gnuastro-0.5/0000755000175000017500000000000013217220471010220 500000000000000gnuastro-0.5/.tarball-version0000644000175000017500000000000413217220471013237 000000000000000.5 gnuastro-0.5/tests/0000755000175000017500000000000013217220471011362 500000000000000gnuastro-0.5/tests/during-dev.sh0000755000175000017500000001366113216276304013721 00000000000000#! /bin/sh # Script to rebuild and test a utility during development. # # During the development of Gnuastro, you often make changes in a utility # then need to rebuild and run it with special arguments and options (to # test your work). This script is made to facilitate this process. It will # take these steps: # # 1. Delete an existing utility executable. # # 2. Run Make on all Gnuastro. # # 3. If Make was successful, then go into the output directory, and run # utility with the given arguments and options. The executable is run # within an output directory (possibly different from the source or # build directories) so if you need to make lots of temporary test # files, there they won't get mixed up with non-output files. # # Combined with the `tmpfs-config-make', this script can be used to greatly # simplify the development process. After running that script once, for # subsequent builds during your development, you can run this script from # the top source directory (by running `./tests/during-dev.sh', or giving # this to the `compile' command in Emacs). Note that you have to set the # first few variables (directories, utility name, arguments and options) # manually before each major development activity. # # This file will be changed alot during development. So please make sure # you have left the variable values empty before committing. This will # remind each developer running this script to set the values based on # their particular work. Alternatively you can reset this file to its # version controlled status before committing your main work with the # command below: # # git checkout -- tests/during-dev.sh # # This file can also be used as a model to write a test for the work you # have done (to be checked with `make check'). Just copy and paste an # existing test from the utility and replace the last few lines based on # this file. # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2016, Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # SET INPUT PARAMETERS # ==================== # Set the basic test directories. If you are building over the source # directory, then set `builddir' to `./'. If you want the outputs to be in # the top source directory, set it to `./'. Since 'build' is the assumed # symbolic link in `tmpfs-config-make', it is also assumed in the version # controlled version of this script. Note, if your directory names have # space characters in them, quote the full value numjobs=8 builddir=build outdir= # Set the utility name, along with its arguments and options. NOTE, for # multiple arguments and options, please put them all between quotation # marks so the space characters are included. If there are spaces in the # values of the options or arguments, quote them two times (once for this # script, and once for the utility. In such cases it might be easier to # just add the argument/option to the final script that runs the utility # rather than these variables. utilname= arguments= options= # RUN THE PROCEDURES # ================== # First, make sure the variables are set. Note that arguments and options # are not absolutly vital! so they are not checked here. The utility will # warn and halt if it needs them. if [ x"$outdir" = x ]; then echo "outdir is not set."; exit 1; fi if [ x$utilname = x ]; then echo "utilname is not set."; exit 1; fi if [ x"$numjobs" = x ]; then echo "numjobs is not set."; exit 1; fi if [ x"$builddir" = x ]; then echo "builddir is not set."; exit 1; fi # If builddir is relative, then append the current directory to make it # absolute. This is done because we will be going into the output directory # for executing the utility and we need to know the absolute address of the # top build directory. srcdir=$(pwd) if [ ! "${builddir:0:1}" = "/" ]; then builddir="$srcdir/$builddir" fi # Set the utility's executable file name utility="$builddir/bin/$utilname/ast$utilname" # If the utility is already built, then remove the executable so it is # definitely remade. if [ -f "$utility" ]; then rm "$utility"; fi # Make Gnuastro (note that during development, it is sometimes necessary to # edit/rebuild the libraries too). If Make is successful, then change to # the output directory and run the utility with the given arguments and # options. # # Before actually running put a copy of the configuration file in the # output directory and also add the onlydirconf option so user or system # wide configuration files don't interfere. if make -j$numjobs -C "$builddir"; then # Change to the output directory. cd "$outdir" # Make the .gnuastro directory if it doesn't exist. if [ ! -d .gnuastro ]; then mkdir .gnuastro fi # Put a copy of this utility's configuration file there and add the # onlydirconf option. We are first printing an empty line just in case # the last line in the configuration file doesn't actualy end with a # new line (in which case the appended string will be added to the end # of the last line). cp "$srcdir/bin/gnuastro.conf" "$srcdir/bin/$utilname/ast$utilname.conf" \ .gnuastro/ echo "" >> .gnuastro/gnuastro.conf echo " lastconfig 1" >> .gnuastro/gnuastro.conf # Run the built utility with the given arguments and options. "$utility" $arguments $options # Clean up. rm -rf .gnuastro fi gnuastro-0.5/tests/prepconf.sh0000755000175000017500000000502613216276304013465 00000000000000# This is not actually a test of any of the programs, it just brings # in all the configuration files into a locally created .gnuastro # directory for all the tests to use. It is part of the GNU Astronomy # Utilities (Gnuastro). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2016, Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # Gnuastro is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gnuastro. If not, see . # Make the .gnuastro directory # ---------------------------- # # This directory will keep the default configuration files for all the # programs. If it already exists, delete it. `mkdir_p' is the equivalent to # GNU's `mkdir -p' which might not exist on some systems. It comes from # Autoconf's tests and is exported to the test shell scripts from the # `tests/Makefile.am' file. $mkdir_p .gnuastro # Common options for all programs # ------------------------------- # # Copy the common options while adding the following optios only for make # check. # # - `lastconfig' will make sure that the program stop searching for # configuration files after this one. # # - Log files are not necessary during tests, they are mainly used for # reporting extra information about successful tests. Failed messages # will be printed on the command-line not in a log-file. So to keep # this directory clean, we'll ask the programs to not generate any. cat > addedoptions.txt < .gnuastro/gnuastro.conf rm addedoptions.txt # Bring utility configuration files # --------------------------------- # # Each utility's configuration file is copied in the `tests' directory for # easy readability. for prog in arithmetic buildprog convertt convolve cosmiccal crop fits \ match mkcatalog mknoise mkprof noisechisel statistics table \ warp do cp $topsrc/bin/$prog/ast$prog.conf .gnuastro/ast$prog.conf done gnuastro-0.5/tests/Makefile.in0000644000175000017500000032275313217217706013372 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ check_PROGRAMS = multithread$(EXEEXT) versioncxx$(EXEEXT) TESTS = prepconf.sh lib/multithread.sh lib/versioncxx.sh \ $(MAYBE_ARITHMETIC_TESTS) $(MAYBE_BUILDPROG_TESTS) \ $(MAYBE_CONVERTT_TESTS) $(MAYBE_CONVOLVE_TESTS) \ $(MAYBE_COSMICCAL_TESTS) $(MAYBE_CROP_TESTS) \ $(MAYBE_FITS_TESTS) $(MAYBE_MATCH_TESTS) \ $(MAYBE_MKCATALOG_TESTS) $(MAYBE_MKNOISE_TESTS) \ $(MAYBE_MKPROF_TESTS) $(MAYBE_NOISECHISEL_TESTS) \ $(MAYBE_STATISTICS_TESTS) $(MAYBE_TABLE_TESTS) \ $(MAYBE_WARP_TESTS) subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__dirstamp = $(am__leading_dot)dirstamp am_multithread_OBJECTS = lib/multithread.$(OBJEXT) multithread_OBJECTS = $(am_multithread_OBJECTS) multithread_LDADD = $(LDADD) multithread_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_versioncxx_OBJECTS = lib/versioncxx.$(OBJEXT) versioncxx_OBJECTS = $(am_versioncxx_OBJECTS) versioncxx_LDADD = $(LDADD) versioncxx_DEPENDENCIES = 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)/bootstrapped/build-aux/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 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(multithread_SOURCES) $(versioncxx_SOURCES) DIST_SOURCES = $(multithread_SOURCES) $(versioncxx_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) \ $(top_srcdir)/bootstrapped/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp \ $(top_srcdir)/bootstrapped/build-aux/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @COND_HASGHOSTSCRIPT_TRUE@MAYBE_HASGHOSTSCRIPT = "yes" @COND_HASLIBJPEG_TRUE@MAYBE_HASLIBJPEG = "yes" @COND_HASGNULIBTOOL_TRUE@MAYBE_HASGNULIBTOOL = "yes" @COND_ARITHMETIC_TRUE@MAYBE_ARITHMETIC_TESTS = arithmetic/snimage.sh arithmetic/onlynumbers.sh \ @COND_ARITHMETIC_TRUE@ arithmetic/where.sh arithmetic/or.sh @COND_BUILDPROG_TRUE@MAYBE_BUILDPROG_TESTS = buildprog/simpleio.sh @COND_CONVERTT_TRUE@MAYBE_CONVERTT_TESTS = convertt/fitstotxt.sh convertt/fitstojpeg.sh \ @COND_CONVERTT_TRUE@ convertt/blankch.sh convertt/jpegtotxt.sh convertt/fitstojpegcmyk.sh \ @COND_CONVERTT_TRUE@ convertt/jpegtofits.sh convertt/fitstopdf.sh @COND_CONVOLVE_TRUE@MAYBE_CONVOLVE_TESTS = convolve/spatial.sh convolve/frequency.sh @COND_COSMICCAL_TRUE@MAYBE_COSMICCAL_TESTS = cosmiccal/simpletest.sh @COND_CROP_TRUE@MAYBE_CROP_TESTS = crop/imgcat.sh crop/wcscat.sh crop/imgcenter.sh \ @COND_CROP_TRUE@ crop/imgcenternoblank.sh crop/section.sh crop/wcscenter.sh \ @COND_CROP_TRUE@ crop/imgpolygon.sh crop/imgoutpolygon.sh crop/wcspolygon.sh @COND_FITS_TRUE@MAYBE_FITS_TESTS = fits/write.sh fits/print.sh fits/update.sh \ @COND_FITS_TRUE@ fits/delete.sh fits/copyhdu.sh @COND_MATCH_TRUE@MAYBE_MATCH_TESTS = match/positions.sh match/merged-cols.sh @COND_MKCATALOG_TRUE@MAYBE_MKCATALOG_TESTS = mkcatalog/simple.sh mkcatalog/aperturephot.sh @COND_MKNOISE_TRUE@MAYBE_MKNOISE_TESTS = mknoise/addnoise.sh @COND_MKPROF_TRUE@MAYBE_MKPROF_TESTS = mkprof/mosaic1.sh mkprof/mosaic2.sh \ @COND_MKPROF_TRUE@ mkprof/mosaic3.sh mkprof/mosaic4.sh mkprof/radeccat.sh \ @COND_MKPROF_TRUE@ mkprof/ellipticalmasks.sh mkprof/clearcanvas.sh @COND_NOISECHISEL_TRUE@MAYBE_NOISECHISEL_TESTS = noisechisel/noisechisel.sh @COND_STATISTICS_TRUE@MAYBE_STATISTICS_TESTS = statistics/basicstats.sh statistics/estimate_sky.sh @COND_TABLE_TRUE@MAYBE_TABLE_TESTS = table/txt-to-fits-binary.sh \ @COND_TABLE_TRUE@ table/fits-binary-to-txt.sh table/txt-to-fits-ascii.sh \ @COND_TABLE_TRUE@ table/fits-ascii-to-txt.sh @COND_WARP_TRUE@MAYBE_WARP_TESTS = warp/warp_scale.sh warp/homographic.sh # `config.h' is built by `../lib/Makefile.am' and is only meant for outside # users (internally `config.h' has everything). Thus, we need to add it to # the include directories of the test programs in this directory. AM_CPPFLAGS = -I../lib # Environment variables for the test scripts. AM_TESTS_ENVIRONMENT = \ export mkdir_p="$(MKDIR_P)"; \ export topsrc=$(top_srcdir); \ export haslibjpeg=$(MAYBE_HASLIBJPEG); \ export hasgnulibtool=$(MAYBE_HASGNULIBTOOL); \ export hasghostscript=$(MAYBE_HASGHOSTSCRIPT); # Library checks # ============== # # The Gnuastro library is checked by compiling programs and linking them # with the library. As described in the last paragraph of the "Scripts # based test suites" section of the Automake manual, all targets specified # by `check_PROGRAMS' are compiled prior to actually running the targets of # `TESTS'. So they do not need to be specified as any dependency, they will # be present when the `.sh' based tests are run. LDADD = -lgnuastro multithread_SOURCES = lib/multithread.c versioncxx_SOURCES = lib/versioncxx.cpp # Files to distribute along with the tests. EXTRA_DIST = $(TESTS) during-dev.sh buildprog/simpleio.c crop/cat.txt \ match/positions-1.txt match/positions-2.txt mkprof/mkprofcat1.txt \ mkprof/ellipticalmasks.txt mkprof/clearcanvas.txt mkprof/mkprofcat2.txt \ mkprof/mkprofcat3.txt mkprof/mkprofcat4.txt mkprof/radeccat.txt \ table/table.txt # Files that must be cleaned with `make clean'. CLEANFILES = *.log *.txt *.jpg *.fits *.pdf *.eps simpleio all: all-am .SUFFIXES: .SUFFIXES: .c .cpp .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(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) --gnu tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list lib/$(am__dirstamp): @$(MKDIR_P) lib @: > lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) lib/$(DEPDIR) @: > lib/$(DEPDIR)/$(am__dirstamp) lib/multithread.$(OBJEXT): lib/$(am__dirstamp) \ lib/$(DEPDIR)/$(am__dirstamp) multithread$(EXEEXT): $(multithread_OBJECTS) $(multithread_DEPENDENCIES) $(EXTRA_multithread_DEPENDENCIES) @rm -f multithread$(EXEEXT) $(AM_V_CCLD)$(LINK) $(multithread_OBJECTS) $(multithread_LDADD) $(LIBS) lib/versioncxx.$(OBJEXT): lib/$(am__dirstamp) \ lib/$(DEPDIR)/$(am__dirstamp) versioncxx$(EXEEXT): $(versioncxx_OBJECTS) $(versioncxx_DEPENDENCIES) $(EXTRA_versioncxx_DEPENDENCIES) @rm -f versioncxx$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(versioncxx_OBJECTS) $(versioncxx_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f lib/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/multithread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/versioncxx.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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 $@ $< .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? prepconf.sh.log: prepconf.sh @p='prepconf.sh'; \ b='prepconf.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) lib/multithread.sh.log: lib/multithread.sh @p='lib/multithread.sh'; \ b='lib/multithread.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) lib/versioncxx.sh.log: lib/versioncxx.sh @p='lib/versioncxx.sh'; \ b='lib/versioncxx.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/snimage.sh.log: arithmetic/snimage.sh @p='arithmetic/snimage.sh'; \ b='arithmetic/snimage.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/onlynumbers.sh.log: arithmetic/onlynumbers.sh @p='arithmetic/onlynumbers.sh'; \ b='arithmetic/onlynumbers.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/where.sh.log: arithmetic/where.sh @p='arithmetic/where.sh'; \ b='arithmetic/where.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/or.sh.log: arithmetic/or.sh @p='arithmetic/or.sh'; \ b='arithmetic/or.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) buildprog/simpleio.sh.log: buildprog/simpleio.sh @p='buildprog/simpleio.sh'; \ b='buildprog/simpleio.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/fitstotxt.sh.log: convertt/fitstotxt.sh @p='convertt/fitstotxt.sh'; \ b='convertt/fitstotxt.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/fitstojpeg.sh.log: convertt/fitstojpeg.sh @p='convertt/fitstojpeg.sh'; \ b='convertt/fitstojpeg.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/blankch.sh.log: convertt/blankch.sh @p='convertt/blankch.sh'; \ b='convertt/blankch.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/jpegtotxt.sh.log: convertt/jpegtotxt.sh @p='convertt/jpegtotxt.sh'; \ b='convertt/jpegtotxt.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/fitstojpegcmyk.sh.log: convertt/fitstojpegcmyk.sh @p='convertt/fitstojpegcmyk.sh'; \ b='convertt/fitstojpegcmyk.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/jpegtofits.sh.log: convertt/jpegtofits.sh @p='convertt/jpegtofits.sh'; \ b='convertt/jpegtofits.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/fitstopdf.sh.log: convertt/fitstopdf.sh @p='convertt/fitstopdf.sh'; \ b='convertt/fitstopdf.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convolve/spatial.sh.log: convolve/spatial.sh @p='convolve/spatial.sh'; \ b='convolve/spatial.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convolve/frequency.sh.log: convolve/frequency.sh @p='convolve/frequency.sh'; \ b='convolve/frequency.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) cosmiccal/simpletest.sh.log: cosmiccal/simpletest.sh @p='cosmiccal/simpletest.sh'; \ b='cosmiccal/simpletest.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/imgcat.sh.log: crop/imgcat.sh @p='crop/imgcat.sh'; \ b='crop/imgcat.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/wcscat.sh.log: crop/wcscat.sh @p='crop/wcscat.sh'; \ b='crop/wcscat.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/imgcenter.sh.log: crop/imgcenter.sh @p='crop/imgcenter.sh'; \ b='crop/imgcenter.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/imgcenternoblank.sh.log: crop/imgcenternoblank.sh @p='crop/imgcenternoblank.sh'; \ b='crop/imgcenternoblank.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/section.sh.log: crop/section.sh @p='crop/section.sh'; \ b='crop/section.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/wcscenter.sh.log: crop/wcscenter.sh @p='crop/wcscenter.sh'; \ b='crop/wcscenter.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/imgpolygon.sh.log: crop/imgpolygon.sh @p='crop/imgpolygon.sh'; \ b='crop/imgpolygon.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/imgoutpolygon.sh.log: crop/imgoutpolygon.sh @p='crop/imgoutpolygon.sh'; \ b='crop/imgoutpolygon.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/wcspolygon.sh.log: crop/wcspolygon.sh @p='crop/wcspolygon.sh'; \ b='crop/wcspolygon.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fits/write.sh.log: fits/write.sh @p='fits/write.sh'; \ b='fits/write.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fits/print.sh.log: fits/print.sh @p='fits/print.sh'; \ b='fits/print.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fits/update.sh.log: fits/update.sh @p='fits/update.sh'; \ b='fits/update.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fits/delete.sh.log: fits/delete.sh @p='fits/delete.sh'; \ b='fits/delete.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fits/copyhdu.sh.log: fits/copyhdu.sh @p='fits/copyhdu.sh'; \ b='fits/copyhdu.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) match/positions.sh.log: match/positions.sh @p='match/positions.sh'; \ b='match/positions.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) match/merged-cols.sh.log: match/merged-cols.sh @p='match/merged-cols.sh'; \ b='match/merged-cols.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkcatalog/simple.sh.log: mkcatalog/simple.sh @p='mkcatalog/simple.sh'; \ b='mkcatalog/simple.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkcatalog/aperturephot.sh.log: mkcatalog/aperturephot.sh @p='mkcatalog/aperturephot.sh'; \ b='mkcatalog/aperturephot.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mknoise/addnoise.sh.log: mknoise/addnoise.sh @p='mknoise/addnoise.sh'; \ b='mknoise/addnoise.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/mosaic1.sh.log: mkprof/mosaic1.sh @p='mkprof/mosaic1.sh'; \ b='mkprof/mosaic1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/mosaic2.sh.log: mkprof/mosaic2.sh @p='mkprof/mosaic2.sh'; \ b='mkprof/mosaic2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/mosaic3.sh.log: mkprof/mosaic3.sh @p='mkprof/mosaic3.sh'; \ b='mkprof/mosaic3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/mosaic4.sh.log: mkprof/mosaic4.sh @p='mkprof/mosaic4.sh'; \ b='mkprof/mosaic4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/radeccat.sh.log: mkprof/radeccat.sh @p='mkprof/radeccat.sh'; \ b='mkprof/radeccat.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/ellipticalmasks.sh.log: mkprof/ellipticalmasks.sh @p='mkprof/ellipticalmasks.sh'; \ b='mkprof/ellipticalmasks.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/clearcanvas.sh.log: mkprof/clearcanvas.sh @p='mkprof/clearcanvas.sh'; \ b='mkprof/clearcanvas.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) noisechisel/noisechisel.sh.log: noisechisel/noisechisel.sh @p='noisechisel/noisechisel.sh'; \ b='noisechisel/noisechisel.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) statistics/basicstats.sh.log: statistics/basicstats.sh @p='statistics/basicstats.sh'; \ b='statistics/basicstats.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) statistics/estimate_sky.sh.log: statistics/estimate_sky.sh @p='statistics/estimate_sky.sh'; \ b='statistics/estimate_sky.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) table/txt-to-fits-binary.sh.log: table/txt-to-fits-binary.sh @p='table/txt-to-fits-binary.sh'; \ b='table/txt-to-fits-binary.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) table/fits-binary-to-txt.sh.log: table/fits-binary-to-txt.sh @p='table/fits-binary-to-txt.sh'; \ b='table/fits-binary-to-txt.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) table/txt-to-fits-ascii.sh.log: table/txt-to-fits-ascii.sh @p='table/txt-to-fits-ascii.sh'; \ b='table/txt-to-fits-ascii.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) table/fits-ascii-to-txt.sh.log: table/fits-ascii-to-txt.sh @p='table/fits-ascii-to-txt.sh'; \ b='table/fits-ascii-to-txt.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) warp/warp_scale.sh.log: warp/warp_scale.sh @p='warp/warp_scale.sh'; \ b='warp/warp_scale.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) warp/homographic.sh.log: warp/homographic.sh @p='warp/homographic.sh'; \ b='warp/homographic.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -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) -rm -f lib/$(DEPDIR)/$(am__dirstamp) -rm -f lib/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ mostlyclean-am distclean: distclean-am -rm -rf lib/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf lib/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool clean-local \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile @COND_ARITHMETIC_TRUE@ arithmetic/onlynumbers.sh: prepconf.sh.log @COND_ARITHMETIC_TRUE@ arithmetic/snimage.sh: noisechisel/noisechisel.sh.log @COND_ARITHMETIC_TRUE@ arithmetic/where.sh: noisechisel/noisechisel.sh.log @COND_ARITHMETIC_TRUE@ arithmetic/or.sh: noisechisel/noisechisel.sh.log @COND_BUILDPROG_TRUE@ buildprog/simpleio.sh: mkprof/mosaic1.sh.log @COND_CONVERTT_TRUE@ convertt/fitstotxt.sh: mkprof/mosaic1.sh.log @COND_CONVERTT_TRUE@ convertt/fitstojpeg.sh: mkprof/mosaic1.sh.log @COND_CONVERTT_TRUE@ convertt/blankch.sh: mkprof/mosaic1.sh.log @COND_CONVERTT_TRUE@ convertt/jpegtotxt.sh: convertt/fitstojpeg.sh.log @COND_CONVERTT_TRUE@ convertt/fitstojpegcmyk.sh: mkprof/mosaic1.sh.log @COND_CONVERTT_TRUE@ convertt/jpegtofits.sh: convertt/blankch.sh.log @COND_CONVERTT_TRUE@ convertt/fitstopdf.sh: crop/section.sh.log @COND_CONVOLVE_TRUE@ convolve/spatial.sh: mkprof/mosaic1.sh.log @COND_CONVOLVE_TRUE@ convolve/frequency.sh: mkprof/mosaic1.sh.log @COND_COSMICCAL_TRUE@ cosmiccal/simpletest.sh: prepconf.sh.log @COND_CROP_TRUE@ crop/imgcat.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/wcscat.sh: mkprof/mosaic1.sh.log mkprof/mosaic2.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic3.sh.log mkprof/mosaic4.sh.log @COND_CROP_TRUE@ crop/imgcenter.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/imgcenternoblank.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/section.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/wcscenter.sh: mkprof/mosaic1.sh.log mkprof/mosaic2.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic3.sh.log mkprof/mosaic4.sh.log @COND_CROP_TRUE@ crop/imgpolygon.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/imgoutpolygon.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/wcspolygon.sh: mkprof/mosaic1.sh.log mkprof/mosaic2.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic3.sh.log mkprof/mosaic4.sh.log @COND_FITS_TRUE@ fits/write.sh: mkprof/mosaic1.sh.log @COND_FITS_TRUE@ fits/print.sh: fits/write.sh.log @COND_FITS_TRUE@ fits/update.sh: fits/write.sh.log @COND_FITS_TRUE@ fits/delete.sh: fits/write.sh.log @COND_FITS_TRUE@ fits/copyhdu.sh: fits/write.sh.log mkprof/mosaic2.sh.log @COND_MATCH_TRUE@ match/positions.sh: prepconf.sh.log @COND_MATCH_TRUE@ match/merged-cols.sh: prepconf.sh.log @COND_MKCATALOG_TRUE@ mkcatalog/simple.sh: noisechisel/noisechisel.sh.log @COND_MKCATALOG_TRUE@ mkcatalog/aperturephot.sh: noisechisel/noisechisel.sh.log \ @COND_MKCATALOG_TRUE@ mkprof/clearcanvas.sh.log @COND_MKNOISE_TRUE@ mknoise/addnoise.sh: warp/warp_scale.sh.log @COND_MKPROF_TRUE@ mkprof/mosaic1.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/mosaic2.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/mosaic3.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/mosaic4.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/radeccat.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/ellipticalmasks.sh: mknoise/addnoise.sh.log @COND_MKPROF_TRUE@ mkprof/clearcanvas.sh: mknoise/addnoise.sh.log @COND_NOISECHISEL_TRUE@ noisechisel/noisechisel.sh: mknoise/addnoise.sh.log @COND_STATISTICS_TRUE@ statistics/basicstats.sh: mknoise/addnoise.sh.log @COND_STATISTICS_TRUE@ statistics/estimate_sky.sh: mknoise/addnoise.sh.log @COND_TABLE_TRUE@ table/txt-to-fits-binary.sh: prepconf.sh.log @COND_TABLE_TRUE@ table/fits-binary-to-txt.sh: table/txt-to-fits-binary.sh.log @COND_TABLE_TRUE@ table/txt-to-fits-ascii.sh: prepconf.sh.log @COND_TABLE_TRUE@ table/fits-ascii-to-txt.sh: table/txt-to-fits-ascii.sh.log @COND_WARP_TRUE@ warp/warp_scale.sh: convolve/spatial.sh.log @COND_WARP_TRUE@ warp/homographic.sh: convolve/spatial.sh.log lib/multithread.sh: mkprof/mosaic1.sh.log # CLEANFILES is only for files, not directories. Therefore we are using # Automake's extending rules to clean the temporary `.gnuastro' directory # that was built by the `prepconf.sh' scripot. See "Extending Automake # rules", and the "What Gets Cleaned" sections of the Automake manual. clean-local:; rm -rf .gnuastro # 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: gnuastro-0.5/tests/Makefile.am0000644000175000017500000002165113216276304013350 00000000000000## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Translate conditions that came from `./configure' into variables that can ## be used here. This includes the programs and teh dependencies of the ## checks. ## ## Dependency structure ## ==================== ## ## The tests depend on each other. One way to fix this is to call them in ## the order that their dependence is satisfied. But that is prone to ## errors and a lot of problem. The user also not want to build all the ## programs. Also, Make allows us to work with multiple threads (with ## `-jN') and in that case, it is vital to define the dependencies. ## ## The output of all the tests that should be used (is recognized by ## Automake and will not mess the system) is the name of the test file ## appended by a `.log'. It contains the output of the program on standard ## output and error. THIS IS IMPORTANT: So even if the program fails, the ## .log file is created. The check if the input for a test exists or not ## should be checked in the test that depends on it, it can't be done here ## in the Makefile. if COND_HASGHOSTSCRIPT MAYBE_HASGHOSTSCRIPT = "yes" endif if COND_HASLIBJPEG MAYBE_HASLIBJPEG = "yes" endif if COND_HASGNULIBTOOL MAYBE_HASGNULIBTOOL = "yes" endif if COND_ARITHMETIC MAYBE_ARITHMETIC_TESTS = arithmetic/snimage.sh arithmetic/onlynumbers.sh \ arithmetic/where.sh arithmetic/or.sh arithmetic/onlynumbers.sh: prepconf.sh.log arithmetic/snimage.sh: noisechisel/noisechisel.sh.log arithmetic/where.sh: noisechisel/noisechisel.sh.log arithmetic/or.sh: noisechisel/noisechisel.sh.log endif if COND_BUILDPROG MAYBE_BUILDPROG_TESTS = buildprog/simpleio.sh buildprog/simpleio.sh: mkprof/mosaic1.sh.log endif if COND_CONVERTT MAYBE_CONVERTT_TESTS = convertt/fitstotxt.sh convertt/fitstojpeg.sh \ convertt/blankch.sh convertt/jpegtotxt.sh convertt/fitstojpegcmyk.sh \ convertt/jpegtofits.sh convertt/fitstopdf.sh convertt/fitstotxt.sh: mkprof/mosaic1.sh.log convertt/fitstojpeg.sh: mkprof/mosaic1.sh.log convertt/blankch.sh: mkprof/mosaic1.sh.log convertt/jpegtotxt.sh: convertt/fitstojpeg.sh.log convertt/fitstojpegcmyk.sh: mkprof/mosaic1.sh.log convertt/jpegtofits.sh: convertt/blankch.sh.log convertt/fitstopdf.sh: crop/section.sh.log endif if COND_CONVOLVE MAYBE_CONVOLVE_TESTS = convolve/spatial.sh convolve/frequency.sh convolve/spatial.sh: mkprof/mosaic1.sh.log convolve/frequency.sh: mkprof/mosaic1.sh.log endif if COND_COSMICCAL MAYBE_COSMICCAL_TESTS = cosmiccal/simpletest.sh cosmiccal/simpletest.sh: prepconf.sh.log endif if COND_CROP MAYBE_CROP_TESTS = crop/imgcat.sh crop/wcscat.sh crop/imgcenter.sh \ crop/imgcenternoblank.sh crop/section.sh crop/wcscenter.sh \ crop/imgpolygon.sh crop/imgoutpolygon.sh crop/wcspolygon.sh crop/imgcat.sh: mkprof/mosaic1.sh.log crop/wcscat.sh: mkprof/mosaic1.sh.log mkprof/mosaic2.sh.log \ mkprof/mosaic3.sh.log mkprof/mosaic4.sh.log crop/imgcenter.sh: mkprof/mosaic1.sh.log crop/imgcenternoblank.sh: mkprof/mosaic1.sh.log crop/section.sh: mkprof/mosaic1.sh.log crop/wcscenter.sh: mkprof/mosaic1.sh.log mkprof/mosaic2.sh.log \ mkprof/mosaic3.sh.log mkprof/mosaic4.sh.log crop/imgpolygon.sh: mkprof/mosaic1.sh.log crop/imgoutpolygon.sh: mkprof/mosaic1.sh.log crop/wcspolygon.sh: mkprof/mosaic1.sh.log mkprof/mosaic2.sh.log \ mkprof/mosaic3.sh.log mkprof/mosaic4.sh.log endif if COND_FITS MAYBE_FITS_TESTS = fits/write.sh fits/print.sh fits/update.sh \ fits/delete.sh fits/copyhdu.sh fits/write.sh: mkprof/mosaic1.sh.log fits/print.sh: fits/write.sh.log fits/update.sh: fits/write.sh.log fits/delete.sh: fits/write.sh.log fits/copyhdu.sh: fits/write.sh.log mkprof/mosaic2.sh.log endif if COND_MATCH MAYBE_MATCH_TESTS = match/positions.sh match/merged-cols.sh match/positions.sh: prepconf.sh.log match/merged-cols.sh: prepconf.sh.log endif if COND_MKCATALOG MAYBE_MKCATALOG_TESTS = mkcatalog/simple.sh mkcatalog/aperturephot.sh mkcatalog/simple.sh: noisechisel/noisechisel.sh.log mkcatalog/aperturephot.sh: noisechisel/noisechisel.sh.log \ mkprof/clearcanvas.sh.log endif if COND_MKNOISE MAYBE_MKNOISE_TESTS = mknoise/addnoise.sh mknoise/addnoise.sh: warp/warp_scale.sh.log endif if COND_MKPROF MAYBE_MKPROF_TESTS = mkprof/mosaic1.sh mkprof/mosaic2.sh \ mkprof/mosaic3.sh mkprof/mosaic4.sh mkprof/radeccat.sh \ mkprof/ellipticalmasks.sh mkprof/clearcanvas.sh mkprof/mosaic1.sh: prepconf.sh.log mkprof/mosaic2.sh: prepconf.sh.log mkprof/mosaic3.sh: prepconf.sh.log mkprof/mosaic4.sh: prepconf.sh.log mkprof/radeccat.sh: prepconf.sh.log mkprof/ellipticalmasks.sh: mknoise/addnoise.sh.log mkprof/clearcanvas.sh: mknoise/addnoise.sh.log endif if COND_NOISECHISEL MAYBE_NOISECHISEL_TESTS = noisechisel/noisechisel.sh noisechisel/noisechisel.sh: mknoise/addnoise.sh.log endif if COND_STATISTICS MAYBE_STATISTICS_TESTS = statistics/basicstats.sh statistics/estimate_sky.sh statistics/basicstats.sh: mknoise/addnoise.sh.log statistics/estimate_sky.sh: mknoise/addnoise.sh.log endif if COND_TABLE MAYBE_TABLE_TESTS = table/txt-to-fits-binary.sh \ table/fits-binary-to-txt.sh table/txt-to-fits-ascii.sh \ table/fits-ascii-to-txt.sh table/txt-to-fits-binary.sh: prepconf.sh.log table/fits-binary-to-txt.sh: table/txt-to-fits-binary.sh.log table/txt-to-fits-ascii.sh: prepconf.sh.log table/fits-ascii-to-txt.sh: table/txt-to-fits-ascii.sh.log endif if COND_WARP MAYBE_WARP_TESTS = warp/warp_scale.sh warp/homographic.sh warp/warp_scale.sh: convolve/spatial.sh.log warp/homographic.sh: convolve/spatial.sh.log endif # `config.h' is built by `../lib/Makefile.am' and is only meant for outside # users (internally `config.h' has everything). Thus, we need to add it to # the include directories of the test programs in this directory. AM_CPPFLAGS = -I../lib # Environment variables for the test scripts. AM_TESTS_ENVIRONMENT = \ export mkdir_p="$(MKDIR_P)"; \ export topsrc=$(top_srcdir); \ export haslibjpeg=$(MAYBE_HASLIBJPEG); \ export hasgnulibtool=$(MAYBE_HASGNULIBTOOL); \ export hasghostscript=$(MAYBE_HASGHOSTSCRIPT); # Library checks # ============== # # The Gnuastro library is checked by compiling programs and linking them # with the library. As described in the last paragraph of the "Scripts # based test suites" section of the Automake manual, all targets specified # by `check_PROGRAMS' are compiled prior to actually running the targets of # `TESTS'. So they do not need to be specified as any dependency, they will # be present when the `.sh' based tests are run. LDADD = -lgnuastro check_PROGRAMS = multithread versioncxx multithread_SOURCES = lib/multithread.c versioncxx_SOURCES = lib/versioncxx.cpp lib/multithread.sh: mkprof/mosaic1.sh.log # Final Tests # =========== TESTS = prepconf.sh lib/multithread.sh lib/versioncxx.sh \ $(MAYBE_ARITHMETIC_TESTS) $(MAYBE_BUILDPROG_TESTS) \ $(MAYBE_CONVERTT_TESTS) $(MAYBE_CONVOLVE_TESTS) $(MAYBE_COSMICCAL_TESTS) \ $(MAYBE_CROP_TESTS) $(MAYBE_FITS_TESTS) $(MAYBE_MATCH_TESTS) \ $(MAYBE_MKCATALOG_TESTS) $(MAYBE_MKNOISE_TESTS) $(MAYBE_MKPROF_TESTS) \ $(MAYBE_NOISECHISEL_TESTS) $(MAYBE_STATISTICS_TESTS) \ $(MAYBE_SUBTRACTSKY_TESTS) $(MAYBE_TABLE_TESTS) $(MAYBE_WARP_TESTS) # Files to distribute along with the tests. EXTRA_DIST = $(TESTS) during-dev.sh buildprog/simpleio.c crop/cat.txt \ match/positions-1.txt match/positions-2.txt mkprof/mkprofcat1.txt \ mkprof/ellipticalmasks.txt mkprof/clearcanvas.txt mkprof/mkprofcat2.txt \ mkprof/mkprofcat3.txt mkprof/mkprofcat4.txt mkprof/radeccat.txt \ table/table.txt # Files that must be cleaned with `make clean'. CLEANFILES = *.log *.txt *.jpg *.fits *.pdf *.eps simpleio # CLEANFILES is only for files, not directories. Therefore we are using # Automake's extending rules to clean the temporary `.gnuastro' directory # that was built by the `prepconf.sh' scripot. See "Extending Automake # rules", and the "What Gets Cleaned" sections of the Automake manual. clean-local:; rm -rf .gnuastro gnuastro-0.5/tests/warp/0000755000175000017500000000000013217220471012333 500000000000000gnuastro-0.5/tests/warp/homographic.sh0000755000175000017500000000262513121462410015112 00000000000000# Apply a general homographic transformation to an image. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=warp img=convolve_spatial.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img --output=homographic.fits \ --matrix="0.707106781,-0.707106781,0, 0.707106781, 0.707106781,0, 0.001,0.002,1" --coveredfrac=0.5 gnuastro-0.5/tests/warp/warp_scale.sh0000755000175000017500000000243313121462410014727 00000000000000# Scale an image to 1/5th of its input scale. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=warp img=convolve_spatial.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img --scale=1/5 --centeroncorner gnuastro-0.5/tests/table/0000755000175000017500000000000013217220471012451 500000000000000gnuastro-0.5/tests/table/table.txt0000644000175000017500000000510613121462410014216 00000000000000# A single table to test the reading and writing functions. # # - It contains all the types. # - String columns, names, and units have space characters. # - Blank values in all the columns. # - Empty lines (not comment or data. # - Column information comments are not in the same order as data. # - A column with no information. # - Columns with missing information # - Some blank values different from the internal blank values. # Column 10: DOUBLE [no units, f64, 255] Column with double values # Column 1: UINT8_DATA [no units, u8, 5] Column with unsigned char values # Column 2: INT8 [no-units, i8] Column with char values # Column 3: STRING data [, str21, no data] Column with string values # Column 4: UINT16 data [,u16] Column with unsigned short values # Column 5: INT16 [no units, i16] Column with short values # Column 7: INT32 [no units, i32] Column with long values # Column 8: INT64 [no units, i64] Another column of long values # Column 9: FLOAT32 [no units, f32,-99] Column with float values # Column 6: UINT32 [,u32] # IMPORTANT NOTE FOR FITS ASCII tables: CFITSIO will give its error # 412 (data type conversion overflow) when the number cannot be # printed in the provided space (with full precision). So make sure # that the full-integer part of the number has less characters than # the `width - precision - 1' (when everything is default, you can get # these values from `lib/gnuastro/table.h'). 1 -1 The vertical lines 3455 -3455 1 -1 9 1874.103872 8.391334343995 1 2 -2 are only for easy 3466 -3466 2 -2 10 123.93373 893.3497e5 2 3 -3 visual identification 3467 -3467 3 -3 12 -0.737648 nan 3 4 -4 of the limits of this 3468 -3468 4 -4 800 78.983 8.2328438e8 4 5 -5 |string column. | 3469 -3469 5 -5 8923 -99 -7.32384e4 5 6 -6 |characters beyond | 20821 -20821 6 -6 9823 -99 nan 6 7 -7 the last one will be 20822 -20822 7 -7 7232 9999 8.3343e-5 7 8 -8 read as a number. 20823 -20823 8 -8 921 2.3 934892734.82 8 9 -9 With@Some#!STRANGE@ 60983 -25722 9 -9 8127 -99 3474924.489252 9 10 -10 Characters%^&*()~ 62182 -30100 10 -10 8287 7.3e-4 -3467.3432e5 10 11 -12 no data 65500 -32700 11 -11 999 8.73E2 nan 11 255 -12 -- Last Line :-) -- 65501 -32701 12 -12 8282 892.23 8975.3653 12 gnuastro-0.5/tests/table/fits-ascii-to-txt.sh0000755000175000017500000000243113121462410016213 00000000000000# Convert an ASCII table to a binary table # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=table table=ascii-table.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $table ]; then echo "$table doesn't exist."; exit 77; fi # Actual test script # ================== $execname $table --output=from-ascii-table.txt gnuastro-0.5/tests/table/txt-to-fits-ascii.sh0000755000175000017500000000247313121462410016221 00000000000000# Convert an ASCII table to a binary table # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=table execname=../bin/$prog/ast$prog table=$topsrc/tests/$prog/table.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $table ]; then echo "$table doesn't exist."; exit 77; fi # Actual test script # ================== $execname $table --output=ascii-table.fits --tableformat=fits-ascii gnuastro-0.5/tests/table/fits-binary-to-txt.sh0000755000175000017500000000243313121462410016411 00000000000000# Convert an ASCII table to a binary table # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=table table=binary-table.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $table ]; then echo "$table doesn't exist."; exit 77; fi # Actual test script # ================== $execname $table --output=from-binary-table.txt gnuastro-0.5/tests/table/txt-to-fits-binary.sh0000755000175000017500000000247513121462410016417 00000000000000# Convert an ASCII table to a binary table # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=table execname=../bin/$prog/ast$prog table=$topsrc/tests/$prog/table.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $table ]; then echo "$table does not exist."; exit 77; fi # Actual test script # ================== $execname $table --output=binary-table.fits --tableformat=fits-binary gnuastro-0.5/tests/statistics/0000755000175000017500000000000013217220471013554 500000000000000gnuastro-0.5/tests/statistics/estimate_sky.sh0000755000175000017500000000300313121462410016523 00000000000000# Estimate the Sky value on input image. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=statistics execname=../bin/$prog/ast$prog img=convolve_spatial_noised.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # Note that to keep things simple we are not convolving the image, so the # result will not be too accurate! Here we just want to see if the full # tessellation, estimation, interpolation and smoothing go nicely without # any errors. $execname $img --sky --checksky gnuastro-0.5/tests/statistics/basicstats.sh0000755000175000017500000000244313121462410016171 00000000000000# Get basic image statistics. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=statistics execname=../bin/$prog/ast$prog img=convolve_spatial_scaled_noised.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img -g9500 -l11000 --numasciibins=65 gnuastro-0.5/tests/noisechisel/0000755000175000017500000000000013217220471013667 500000000000000gnuastro-0.5/tests/noisechisel/noisechisel.sh0000755000175000017500000000260313156610402016453 00000000000000# Detect objects and clumps in an image using NoiseChisel. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=noisechisel execname=../bin/$prog/ast$prog img=convolve_spatial_noised.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img --cleangrowndet --checkdetection --checksegmentation \ --continueaftercheck --tilesize=100,100 gnuastro-0.5/tests/mkprof/0000755000175000017500000000000013217220471012660 500000000000000gnuastro-0.5/tests/mkprof/radeccat.txt0000644000175000017500000000172513121462410015107 00000000000000# Column 1: ID [count, u8] Object ID # Column 2: RA [deg, f64] Right Ascension of profile center # Column 3: Dec [deg, f64] Declination of profile center # Column 4: Function [name, str7] Profile's radial function # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile 1 0.99987331 1.0001617 sersic 10.00 2.500 45.000 0.3 -6.0 2.000 2 0.99929656 1.0006917 sersic 10.00 2.500 135.00 0.3 -6.0 2.000 gnuastro-0.5/tests/mkprof/mkprofcat4.txt0000644000175000017500000000153413121462410015411 00000000000000# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [name, str7] Profile's radial function # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile 1 0.40 0.40 sersic 20.00 2.500 45.000 1.00 -18.0 5.000 gnuastro-0.5/tests/mkprof/mkprofcat3.txt0000644000175000017500000000153613121462410015412 00000000000000# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [code, i32] Profile's radial function code # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile 1 100.40 0.40 1 20.00 2.500 45.000 1.00 -18.0 5.000 gnuastro-0.5/tests/mkprof/mkprofcat2.txt0000644000175000017500000000153713121462410015412 00000000000000# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [code, i32] Profile's radial function code # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile 1 0.400 100.40 1 20.00 2.500 45.000 1.00 -18.0 5.000 gnuastro-0.5/tests/mkprof/clearcanvas.txt0000644000175000017500000000177613121462410015631 00000000000000# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [name, str4] Profile's radial function # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile # # Note that the positions and radii are multiplied by 5 compared to `mkprofcat1.txt', # because we are using the over-sampled image as a canvas. # 1 502 502 flat 100 1 45.000 1.000 1 2.000 2 251.605 254.135 flat 29.89 1 77.650 0.801 2 2.000 gnuastro-0.5/tests/mkprof/ellipticalmasks.txt0000644000175000017500000000167213121462410016523 00000000000000# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [name, str7] Profile's radial function # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile 1 100.40 100.40 circum 20.00 2.500 45.000 1.000 NaN 2.000 2 50.321 50.827 flat 5.978 1.320 77.650 0.801 -1 2.000 gnuastro-0.5/tests/mkprof/mkprofcat1.txt0000644000175000017500000000204513121462410015404 00000000000000# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [name, str7] Profile's radial function # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile 1 0.0000 0.0000 moffat 3.000 4.765 0.0000 1.000 0.000 5.000 2 100.40 100.40 sersic 20.00 2.500 45.000 1.000 -18.0 5.000 3 50.321 50.827 sersic 5.978 1.320 77.650 0.801 -15.0 5.000 gnuastro-0.5/tests/mkprof/clearcanvas.sh0000755000175000017500000000303613121462410015416 00000000000000# Make labeled regions on an image with blank pixels. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog img=convolve_spatial_noised.fits cat=$topsrc/tests/$prog/clearcanvas.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== $execname $cat --background=$img --mforflatpix --clearcanvas \ --type=int32 --output="clearcanvas.fits" gnuastro-0.5/tests/mkprof/ellipticalmasks.sh0000755000175000017500000000305713121462410016320 00000000000000# Make two masks (one flat and one circumference) cat1.txt # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog img=convolve_spatial_scaled_noised.fits cat=$topsrc/tests/$prog/ellipticalmasks.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $cat --background=$img --mforflatpix --replace --oversample=1 \ --output="ellipticalmasks.fits" gnuastro-0.5/tests/mkprof/radeccat.sh0000755000175000017500000000241513126521442014710 00000000000000# Create a mock image from radeccat.txt # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/radeccat.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== $execname $cat --ccol=RA --ccol=Dec --mode=wcs --naxis=100,100 gnuastro-0.5/tests/mkprof/mosaic4.sh0000755000175000017500000000264213126521442014503 00000000000000# Create a mock image from cat2.txt: # # - It doesn't have any random profiles, only the large profile from # cat1.txt. The central position is set to be on the same real # place as in cat1.txt # # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/mkprofcat4.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== $execname $cat --naxis=100,100 --crpix=-99,-99 gnuastro-0.5/tests/mkprof/mosaic3.sh0000755000175000017500000000263613126521442014505 00000000000000# Create a mock image from cat2.txt: # # - It doesn't have any random profiles, only the large profile from # cat1.txt. The central position is set to be on the same real # place as in cat1.txt # # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/mkprofcat3.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option) # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== $execname $cat --naxis=100,100 --crpix=1,-99 gnuastro-0.5/tests/mkprof/mosaic2.sh0000755000175000017500000000273313126521442014502 00000000000000# Create a mock image from cat2.txt: # # - It doesn't have any random profiles, only the large profile from # cat1.txt. The central position is set to be on the same real # place as in cat1.txt # # - Also here, test the individual option. # # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/mkprofcat2.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== $execname $cat --naxis=100,100 --crpix=-99,1 --individual gnuastro-0.5/tests/mkprof/mosaic1.sh0000755000175000017500000000267413126521442014505 00000000000000# Create a mock image from cat1.txt: # # - It includes one large and bright profile that is on the last # pixel of this image. The other tests will also build the same # profile with the absolute place fixed. # # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/mkprofcat1.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== $execname $cat --naxis=100,100 mv 0_mkprofcat1.fits psf.fits gnuastro-0.5/tests/mknoise/0000755000175000017500000000000013217220471013027 500000000000000gnuastro-0.5/tests/mknoise/addnoise.sh0000755000175000017500000000337313136632404015105 00000000000000# Add noise to an input image. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). # # We will be adding noise to two images: the warped (smaller) and unwarped # (larger) mock images. The warped one will be used by programs that don't # care about the size of the image, but the larger one will be used by # those that do: for example SubtractSky and NoiseChisel will be better # tested on a larger image. prog=mknoise img1=convolve_spatial.fits execname=../bin/$prog/ast$prog img2=convolve_spatial_scaled.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $img1 ]; then echo "$img1 does not exist."; exit 77; fi if [ ! -f $img2 ]; then echo "$img2 does not exist."; exit 77; fi # Actual test script # ================== export GSL_RNG_SEED=1 export GSL_RNG_TYPE=ranlxs2 $execname --envseed $img1 $execname --envseed $img2 gnuastro-0.5/tests/mkcatalog/0000755000175000017500000000000013217220471013324 500000000000000gnuastro-0.5/tests/mkcatalog/aperturephot.sh0000755000175000017500000000301313175442274016334 00000000000000# Make a simple catalog for NoiseChisel's output. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkcatalog objimg=clearcanvas.fits execname=../bin/$prog/ast$prog img=convolve_spatial_noised_labeled.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ ! -f $objimg ]; then echo "$objimg does not exist"; exit 77; fi # Actual test script # ================== $execname $img --objectsfile=$objimg --objectshdu=1 \ --output=aperturephot.fits \ --objid --x --y --ra --dec --magnitude --sn gnuastro-0.5/tests/mkcatalog/simple.sh0000755000175000017500000000255113121462410015072 00000000000000# Make a simple catalog for NoiseChisel's output. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkcatalog execname=../bin/$prog/ast$prog img=convolve_spatial_noised_labeled.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img --x --y --ra --dec --magnitude --upperlimitmag --sn \ --tableformat=txt gnuastro-0.5/tests/match/0000755000175000017500000000000013217220471012456 500000000000000gnuastro-0.5/tests/match/positions-2.txt0000644000175000017500000000025413211616535015332 00000000000000# Column 1: ABCD # Column 2: ACCU1 # Column 3: ACCU2 1 8.20 7.90 2 20.1 2.80 3 4.80 5.20 4 5.01 4.99 5 0.01 0.02 6 6.10 6.05 7 0.99 1.10 gnuastro-0.5/tests/match/positions-1.txt0000644000175000017500000000021513211616535015326 00000000000000# Column 1: ABCD # Column 2: EFGH # Column 3: IJKL 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 gnuastro-0.5/tests/match/merged-cols.sh0000755000175000017500000000257713211616535015155 00000000000000# Match the two input catalogs and return merged output # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=match execname=../bin/$prog/ast$prog cat1=$topsrc/tests/$prog/positions-1.txt cat2=$topsrc/tests/$prog/positions-2.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== $execname $cat1 $cat2 --aperture=0.5 --log --output=match-positions.fits \ --outcols=a1,aEFGH,bACCU1,aIJKL,bACCU2 -omatch-merged-cols.txt gnuastro-0.5/tests/match/positions.sh0000755000175000017500000000243313211076737014776 00000000000000# Match the two input catalogs # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=match execname=../bin/$prog/ast$prog cat1=$topsrc/tests/$prog/positions-1.txt cat2=$topsrc/tests/$prog/positions-2.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== $execname $cat1 $cat2 --aperture=0.5 --log --output=match-positions.fits gnuastro-0.5/tests/lib/0000755000175000017500000000000013217220471012130 500000000000000gnuastro-0.5/tests/lib/versioncxx.sh0000755000175000017500000000176413215601241014623 00000000000000# Run the program to build a report the Gnuastro version in C++. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). execname=./versioncxx # Skip? # ===== # # If the actual executable wasn't built, then this is a hard error and must # be FAIL. if [ ! -f $execname ]; then echo "$execname library program not compiled."; exit 99; fi; # Actual test script # ================== $execname gnuastro-0.5/tests/lib/multithread.sh0000755000175000017500000000234313121462410014726 00000000000000# Run the program to test reading a FITS file to memory and writing it on # the command-line in multi-threaded mode. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits execname=./multithread # SKIP or FAIL? # ============= # # If the actual executable wasn't built, then this is a hard error and must # be FAIL. But if the input doesn't exist, its not this test's fault. So # just SKIP this test. if [ ! -f $execname ]; then echo "$execname library program not compiled."; exit 99; fi; if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi; # Actual test script # ================== $execname gnuastro-0.5/tests/lib/versioncxx.cpp0000644000175000017500000000215713215601241014765 00000000000000/********************************************************************* A test program to get and use the version number of Gnuastro within C++. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include int main(void) { std::cout << "Gnuastro version is: " << GAL_CONFIG_VERSION << ".\n"; return EXIT_SUCCESS; } gnuastro-0.5/tests/lib/multithread.c0000644000175000017500000000743113164537456014562 00000000000000/********************************************************************* A test program to multithreaded building using Gnuastro's helpers. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include "gnuastro/fits.h" #include "gnuastro/threads.h" /* This structure can keep all information you want to pass onto the worker function on each thread. */ struct params { gal_data_t *image; /* Dataset to print values of. */ }; /* This is the main worker function which will be called by the different threads. `gal_threads_params' is defined in `gnuastro/threads.h' and contains the pointer to the paramter we want. Note that its input and output must have `void *' types. */ void * worker_on_thread(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct params *p=(struct params *)tprm->params; /* Subsequent definitions. */ float *array=p->image->array; size_t i, index, *dsize=p->image->dsize; /* Go over all the pixels that were assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ index = tprm->indexs[i]; /* Print the information. */ printf("(%zu, %zu) on thread %zu: %g\n", index%dsize[1]+1, index/dsize[1]+1, tprm->id, array[index]); } /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* A simple program to open a FITS image, distributes its pixels between different threads and print the value of each pixel and the thread it was assigned to, this will test both the opening of a FITS file and also the multi-threaded functions. After running `make check' you can see the outputs in `tests/multithread.log'. Please run the following command for an explanation on easily linking and compiling C programs that use Gnuastro's libraries (without having to worry about the libraries to link to) anywhere on your system: $ info gnuastro "Automatic linking script" */ int main(void) { struct params p; char *filename="psf.fits", *hdu="1"; size_t numthreads=gal_threads_number(); /* Read the image into memory as a float32 data type. */ p.image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, -1,0,0); /* Print some basic information before the actual contents: */ printf("Pixel values of %s (HDU: %s) on %zu threads.\n", filename, hdu, numthreads); printf("Used to check the compiled library's capability in opening a " "FITS file, and also spinning-off threads.\n"); /* A small sanity check: this is only intended for 2D arrays. */ if(p.image->ndim!=2) { fprintf(stderr, "only 2D images are supported."); exit(EXIT_FAILURE); } /* Spin-off the threads and do the processing on each thread. */ gal_threads_spin_off(worker_on_thread, &p, p.image->size, numthreads); /* Clean up and return. */ gal_data_free(p.image); return EXIT_SUCCESS; } gnuastro-0.5/tests/fits/0000755000175000017500000000000013217220471012327 500000000000000gnuastro-0.5/tests/fits/copyhdu.sh0000755000175000017500000000257213121462410014262 00000000000000# Copy an extension from one file to another. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=fits img1=fitstest.fits img2=mkprofcat2.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img1 ]; then echo "$img1 does not exist."; exit 77; fi if [ ! -f $img2 ]; then echo "$img2 does not exist."; exit 77; fi # Actual test script # ================== $execname $img2 --copy="Mock profiles" --output=$img1 gnuastro-0.5/tests/fits/delete.sh0000755000175000017500000000240713121462410014046 00000000000000# Delete header information. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=fits img=fitstest.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img --delete=ABSJUNK --delete=ABSJNK2 gnuastro-0.5/tests/fits/update.sh0000755000175000017500000000252713121462410014071 00000000000000# Update the full header information # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=fits img=fitstest.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img --update=ABSJUNK,8.231,"An updated value.",s \ --update=ABSJNK2,1232,"Another updated value",kg gnuastro-0.5/tests/fits/print.sh0000755000175000017500000000235413121462410013741 00000000000000# Print the full header information # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=fits img=fitstest.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img gnuastro-0.5/tests/fits/write.sh0000755000175000017500000000261113121462410013733 00000000000000# Write a junk header to a FITS file # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=fits img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== cp $img fitstest.fits $execname fitstest.fits --write=ABSJUNK,10.92,"A Fits keyword Test.",m/s \ --date --write=ABSJNK2,2343fdsa,"Another absolute junk test!" gnuastro-0.5/tests/crop/0000755000175000017500000000000013217220471012325 500000000000000gnuastro-0.5/tests/crop/cat.txt0000644000175000017500000000055413121462410013554 00000000000000# Column 1: NAME [name,str4] Name of object. # Column 2: X_CENTER [pixels,f64] Image X axis position. # Column 3: Y_CENTER [pixels,f64] Image Y axis position. # Column 4: RA_CENTER [deg,f64] Right Ascension. # Column 5: DEC_CENTER [deg,f64] Declination. A0B1 500.00 500.00 0.99917157 1.0008283 c2d3 251.00 251.00 0.99958658 1.0004150 gnuastro-0.5/tests/crop/wcspolygon.sh0000755000175000017500000000264613121462410015013 00000000000000# Crop from a catalog using x and y coordinates in WCS mode. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat*.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi for fn in $img; do if [ ! -f $fn ]; then echo "$fn doesn't exist."; exit 77; fi; done # Actual test script # ================== $execname $img --mode=wcs --zeroisnotblank --output=wcspolygon.fits \ --polygon=0.99980497,1.0001967:0.998378,1.0012267:0.9999766,1.0013217 gnuastro-0.5/tests/crop/imgoutpolygon.sh0000755000175000017500000000314013121462410015511 00000000000000# Crop an image based polygon from an image. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. $execname $img $cat --mode=img --zeroisnotblank --outpolygon \ --polygon=209,50:436.76,151:475.64,438.2:210.6,454.04:121.4,289.88 \ --output=imgoutpolygon.fits gnuastro-0.5/tests/crop/imgpolygon.sh0000755000175000017500000000260513121462410014766 00000000000000# Crop an image based polygon from an image. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img $cat --mode=img --zeroisnotblank --output=imgpolygon.fits \ --polygon=209,50:436.76,151:475.64,438.2:210.6,454.04:121.4,289.88 gnuastro-0.5/tests/crop/wcscenter.sh0000755000175000017500000000256013125235120014577 00000000000000# Crop a box based on center in WCS coordinates. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat*.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi for fn in $img; do if [ ! -f $fn ]; then echo "$fn does not exist."; exit 77; fi; done # Actual test script # ================== $execname $img --center=0.99917157,1.0008283 --output=crop_wcscenter.fits \ --mode=wcs --width=0.3/3600 gnuastro-0.5/tests/crop/section.sh0000755000175000017500000000277713125235120014260 00000000000000# Crop a box based on a specified section. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. $execname $img --section=-10:*+10,:250 --output=crop_section.fits \ --numthreads=1 --mode=img gnuastro-0.5/tests/crop/imgcenternoblank.sh0000755000175000017500000000311613125235120016122 00000000000000# Crop a region defined by its center in image coordinates, with no blank # pixels. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. $execname $img --center=500,500 --noblank --numthreads=1 \ --output=crop_imgcenternoblank.fits --mode=img --width=201 gnuastro-0.5/tests/crop/imgcenter.sh0000755000175000017500000000302713125235120014556 00000000000000# Make a single crop with center defined in Image mode. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. $execname $img --center=251,251 --output=crop_imgcenter.fits \ --numthreads=1 --mode=img --width=201 gnuastro-0.5/tests/crop/wcscat.sh0000755000175000017500000000322113124521666014075 00000000000000# Crop from a catalog using x and y coordinates in WCS mode. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat*.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi for fn in $img; do if [ ! -f $fn ]; then echo "$fn doesn't exist."; exit 77; fi; done # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. cat=$topsrc/tests/$prog/cat.txt $execname $img --catalog=$cat --suffix=_wcscat.fits \ --zeroisnotblank --coordcol=4 --coordcol=DEC_CENTER \ --numthreads=1 --mode=wcs --width=3/3600 gnuastro-0.5/tests/crop/imgcat.sh0000755000175000017500000000322013124521441014043 00000000000000# Crop from a catalog using x and y coordinates in Image mode. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. cat=$topsrc/tests/$prog/cat.txt $execname $img --catalog=$cat --suffix=_imgcat.fits --numthreads=1 \ --zeroisnotblank --coordcol=X_CENTER --coordcol=Y_CENTER \ --namecol=NAME --mode=img --width=201 gnuastro-0.5/tests/cosmiccal/0000755000175000017500000000000013217220471013317 500000000000000gnuastro-0.5/tests/cosmiccal/simpletest.sh0000755000175000017500000000213013121462410015756 00000000000000# A simple run of CosmicCalculator to check if it can run. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=cosmiccal execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== $execname --redshift=2.5 gnuastro-0.5/tests/convolve/0000755000175000017500000000000013217220471013215 500000000000000gnuastro-0.5/tests/convolve/frequency.sh0000755000175000017500000000262013121462410015470 00000000000000# Convolve an image in the frequency domain. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). psf=psf.fits prog=convolve img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ ! -f $psf ]; then echo "$psf does not exist."; exit 77; fi # Actual test script # ================== $execname $img --kernel=$psf --domain=frequency --output=convolve_frequency.fits gnuastro-0.5/tests/convolve/spatial.sh0000755000175000017500000000261213121462410015125 00000000000000# Convolve an image in the spatial domain. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). psf=psf.fits prog=convolve img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ ! -f $psf ]; then echo "$psf does not exist."; exit 77; fi # Actual test script # ================== $execname $img --kernel=$psf --domain=spatial --output=convolve_spatial.fits gnuastro-0.5/tests/convertt/0000755000175000017500000000000013217220471013226 500000000000000gnuastro-0.5/tests/convertt/fitstopdf.sh0000755000175000017500000000265713121462410015514 00000000000000# Convert a FITS image into an PDF file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=convertt img=crop_section.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - Ghostscript was not present on the system. if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ "x$hasghostscript" != "xyes" ]; then echo "Ghostscript 9.10 or above not present."; exit 77; fi # Actual test script # ================== $execname $img --output=pdf --invert gnuastro-0.5/tests/convertt/jpegtofits.sh0000755000175000017500000000262713121462410015665 00000000000000# Convert a FITS image into a one color JPEG file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=convertt img=blankch.jpg execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjpeg was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibjpeg" != "xyes" ];then echo "libjpeg not present."; exit 77;fi # Actual test script # ================== $execname $img --output=fits gnuastro-0.5/tests/convertt/fitstojpegcmyk.sh0000755000175000017500000000264213121462410016546 00000000000000# Convert a FITS image into a JPEG file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjpeg was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibjpeg" != "xyes" ];then echo "libjpeg not present."; exit 77;fi # Actual test script # ================== $execname blank blank blank $img --output=f2jcmyk.jpg gnuastro-0.5/tests/convertt/jpegtotxt.sh0000755000175000017500000000265213121462410015535 00000000000000# Convert a FITS image into a single channel JPEG image to text. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.jpg prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjpeg was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibjpeg" != "xyes" ];then echo "libjpeg not present."; exit 77;fi # Actual test script # ================== $execname $img --output=jpegtotxt.txt gnuastro-0.5/tests/convertt/blankch.sh0000755000175000017500000000264713121462410015113 00000000000000# Convert a FITS image into a one color JPEG file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjpeg was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibjpeg" != "xyes" ];then echo "libjpeg not present."; exit 77;fi # Actual test script # ================== $execname blank $img blank --output=blankch.jpg gnuastro-0.5/tests/convertt/fitstojpeg.sh0000755000175000017500000000262213121462410015660 00000000000000# Convert a FITS image into a JPEG file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjpeg was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibjpeg" != "xyes" ];then echo "libjpeg not present."; exit 77;fi # Actual test script # ================== $execname $img --invert --output=jpg gnuastro-0.5/tests/convertt/fitstotxt.sh0000755000175000017500000000237713121462410015561 00000000000000# Convert a FITS image into a text file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img --output=psf.txt gnuastro-0.5/tests/buildprog/0000755000175000017500000000000013217220471013351 500000000000000gnuastro-0.5/tests/buildprog/simpleio.c0000644000175000017500000000342613164537456015302 00000000000000/********************************************************************* A test program to multithreaded building using Gnuastro's helpers. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include "gnuastro/fits.h" int main(int argc, char *argv[]) { gal_data_t *image; char *outname="simpleio.fits"; /* We need two arguments, note that the system also gives the executable name, so argc is one more than the number of arguments. */ if(argc!=3) { fprintf(stderr, "this program only accepts two arguments"); return EXIT_FAILURE; } /* Read the image into memory. */ image=gal_fits_img_read(argv[1], argv[2], -1, 0, 0); /* Let the user know. */ printf("%s (hdu %s) is read into memory.\n", argv[1], argv[2]); /* Save the image in memory into another file. */ gal_fits_img_write(image, outname, NULL, "BuildProgram's Simpleio"); /* Let the user know. */ printf("%s created.\n", outname); /* Clean up and return. */ gal_data_free(image); return EXIT_SUCCESS; } gnuastro-0.5/tests/buildprog/simpleio.sh0000755000175000017500000000404213176441456015465 00000000000000# Make labeled regions on an image with blank pixels. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=buildprog execname=../bin/$prog/ast$prog source=$topsrc/tests/$prog/simpleio.c # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - The input data was not made (for example the test that created the # data file failed). # # - Gnuastro ships with its own version of Libtool for the building of # the libraries and programs. But here, we want to test the user's # libtool (and how it works with BuildProgram). So if libtool wasn't # found at configure time, we need to skip this test. if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ ! -f $source ]; then echo "$source does not exist."; exit 77; fi if [ "x$hasgnulibtool" != "xyes" ];then echo "GNU libtool not present."; exit 77; fi # Actual test script # ================== # # We want to use the `libgnuastro.la' corresponding to this install, not # the one (that is possibly) installed (hence the use of `--la'). # # Except for `gnuastro/config.h', all headers are installed in # `$topsrc/lib' and `gnuastro/config.h' is in "../lib/" $execname $source $img 1 --la=../lib/libgnuastro.la -I$topsrc/lib -I../lib/ gnuastro-0.5/tests/arithmetic/0000755000175000017500000000000013217220471013513 500000000000000gnuastro-0.5/tests/arithmetic/or.sh0000755000175000017500000000250513124332637014421 00000000000000# Choose two detected regions with the `or' operator # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=arithmetic execname=../bin/$prog/ast$prog img=convolve_spatial_noised_labeled.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img 6 eq $img 3 eq or -h2 -h2 --output=or.fits gnuastro-0.5/tests/arithmetic/where.sh0000755000175000017500000000253013121462410015077 00000000000000# Mask non-detected pixels in the image with the `where' operator. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=arithmetic execname=../bin/$prog/ast$prog img=convolve_spatial_noised_labeled.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img $img 0 eq nan where -h1 -h2 --output=where.fits gnuastro-0.5/tests/arithmetic/onlynumbers.sh0000755000175000017500000000207613121462410016347 00000000000000# Make an S/N image to test Arithmetic. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=arithmetic execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== $execname -1 3.45 x gnuastro-0.5/tests/arithmetic/snimage.sh0000755000175000017500000000253013121462410015410 00000000000000# Make an S/N image to test Arithmetic. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=arithmetic execname=../bin/$prog/ast$prog img=convolve_spatial_noised_labeled.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img $img - $img / --hdu=1 --hdu=4 --hdu=5 \ --output=snimage.fits gnuastro-0.5/doc/0000755000175000017500000000000013217220467010772 500000000000000gnuastro-0.5/doc/gnuastro.info-50000644000175000017500000066321513217220437013605 00000000000000This is gnuastro.info, produced by makeinfo version 6.5 from gnuastro.texi. This book documents version 0.5 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2017 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation Licenseâ€. INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro’s library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeNoise: (gnuastro)MakeNoise. Make (add) noise to an image. * astmknoise: (gnuastro)Invoking astmknoise. Options to MakeNoise. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Building and debugging, Next: Test scripts, Prev: Documentation, Up: Developing 11.6 Building and debugging =========================== To build the various programs and libraries in Gnuastro, the GNU build system is used which defines the steps in *note Quick start::. It consists of GNU Autoconf, GNU Automake and GNU Libtool which are collectively known as GNU Autotools. They provide a very portable system to check the hosts environment and compile Gnuastro based on that. They also make installing everything in their standard places very easy for the programmer. Most of the small caps files that you see in the top source directory of the tarball are created by these three tools (see *note Version controlled source::). To facilitate the building and testing of your work during development, Gnuastro comes with two useful scripts: ‘tmpfs-config-make’ This is more fully described in *note Configure and build in RAM::. During development, you will usually run this command only once (at the start of your work). ‘tests/during-dev.sh’ This script is designed to be run each time you make a change and want to test your work (with some possible input and output). The script itself is heavily commented and thoroughly describes the best way to use it, so we won’t repeat it here. As a short summary: you specify the build directory, an output directory (for the built program to be run in, and also contains the inputs), the program’s short name and the arguments and options that it should be run with. This script will then build Gnuastro, go to the output directory and run the built executable from there. One option for the output directory might be your desktop, so you can easily see the output files and delete them when you are finished. The main purpose of these scripts is to keep your source directory clean and facilitate your development. By default all the programs are compiled with optimization flags for increased speed. A side effect of optimization is that valuable debugging information is lost. All the libraries are also linked as shared libraries by default. Shared libraries further complicate the debugging process and significantly slow down the compilation (the ‘make’ command). So during development it is recommended to configure Gnuastro as follows: $ ./configure --disable-shared CFLAGS="-g -O0" In ‘tmpfs-config-make’ you can ask for this behavior by setting ‘debug_noshared’ to ‘1’. In order to understand the building process, you can go through the Autoconf, Automake and Libtool manuals, like all GNU manuals they provide both a great tutorial and technical documentation. The “A small Hello World†section in Automake’s manual (in chapter 2) can be a good starting guide after you have read the separate introductions.  File: gnuastro.info, Node: Test scripts, Next: Developer's checklist, Prev: Building and debugging, Up: Developing 11.7 Test scripts ================= As explained in *note Tests::, for every program some simple tests are written to check the various independent features of the program. All the tests are placed in the ‘tests/’ directory. The ‘tests/prepconf.sh’ script is the first ‘test’ that will be run. It will copy all the configuration files from the various directories to a ‘tests/.gnuastro’ directory (which it will make) so the various tests can set the default values. This script will also make sure the programs don’t go searching for user and system wide configuration files to avoid the mixing of values with different Gnuastro version on the system. For each program, the tests are placed inside directories with the program name. Each test is written as a shell script. The last line of this script is the test which runs the program with certain parameters. The return value of this script determines the fate of the test, see the “Support for test suites†chapter of the Automake manual for a very nice and complete explanation. In every script, two variables are defined at first: ‘prog’ and ‘execname’. The first specifies the program name and the second the location of the executable. The most important thing to have in mind about all the test scripts is that they are run from inside the ‘tests/’ directory in the “build treeâ€. Which can be different from the directory they are stored in (known as the “source treeâ€)(1). This distinction is made by GNU Autoconf and Automake (which configure, build and install Gnuastro) so that you can install the program even if you don’t have write access to the directory keeping the source files. See the “Parallel build trees (a.k.a VPATH builds)†in the Automake manual for a nice explanation. Because of this, any necessary inputs that are distributed in the tarball(2), for example the catalogs necessary for checks in MakeProfiles and Crop, must be identified with the ‘$topsrc’ prefix instead of ‘../’ (for the top source directory that is unpacked). This ‘$topsrc’ variable points to the source tree where the script can find the source data (it is defined in ‘tests/Makefile.am’). The executables and other test products were built in the build tree (where they are being run), so they don’t need to be prefixed with that variable. This is also true for images or files that were produced by other tests. ---------- Footnotes ---------- (1) The ‘tmpfs-config-make’ script also uses this feature to keep the source and build directories separate (see *note Configure and build in RAM::). (2) In many cases, the inputs of a test are outputs of previous tests, this doesn’t apply to this class of inputs. Because all outputs of previous tests are in the “build treeâ€.  File: gnuastro.info, Node: Developer's checklist, Next: Gnuastro project webpage, Prev: Test scripts, Up: Developing 11.8 Developer’s checklist ========================== This is a checklist of things to do after applying your changes/additions in Gnuastro: 1. If the change is non-trivial, write test(s) in the ‘tests/progname/’ directory to test the change(s)/addition(s) you have made. Then add their file names to ‘tests/Makefile.am’. 2. Run ‘$ make check’ to make sure everything is working correctly. 3. Make sure the documentation (this book) is completely up to date with your changes, see *note Documentation::. 4. Commit the change to your issue branch (see *note Production workflow:: and *note Forking tutorial::). Afterwards, run Autoreconf to generate the appropriate version number: $ autoreconf -f 5. Finally, to make sure everything will be built, installed and checked correctly run the following command (after re-configuring, and re-building). To greatly speed up the process, use multiple threads (8 in the example below, change it appropriately) $ make distcheck -j8 This command will create a distribution file (ending with ‘.tar.gz’) and try to compile it in the most general cases, then it will run the tests on what it has built in its own mini-environment. If ‘$ make distcheck’ finishes successfully, then you are safe to send your changes to us to implement or for your own purposes. See *note Production workflow:: and *note Forking tutorial::.  File: gnuastro.info, Node: Gnuastro project webpage, Next: Developing mailing lists, Prev: Developer's checklist, Up: Developing 11.9 Gnuastro project webpage ============================= Gnuastro’s central management hub (https://savannah.gnu.org/projects/gnuastro/)(1) is located on GNU Savannah (https://savannah.gnu.org/)(2). Savannah is the central software development management system for many GNU projects. Through this central hub, you can view the list of activities that the developers are engaged in, their activity on the version controlled source, and other things. Each defined activity in the development cycle is known as an ‘issue’ (or ‘item’). An issue can be a bug (see *note Report a bug::), or a suggested feature (see *note Suggest new feature::) or an enhancement or generally any _one_ job that is to be done. In Savannah, issues are classified into three categories or ‘tracker’s: Support This tracker is a way that (possibly anonymous) users can get in touch with the Gnuastro developers. It is a complement to the bug-gnuastro mailing list (see *note Report a bug::). Anyone can post an issue to this tracker. The developers will not submit an issue to this list. They will only reassign the issues in this list to the other two trackers if they are valid(3). Ideally (when the developers have time to put on Gnuastro, please don’t forget that Gnuastro is a volunteer effort), there should be no open items in this tracker. Bugs This tracker contains all the known bugs in Gnuastro (problems with the existing tools). Tasks The items in this tracker contain the future plans (or new features/capabilities) that are to be added to Gnuastro. All the trackers can be browsed by a (possibly anonymous) visitor, but to edit and comment on the Bugs and Tasks trackers, you have to be a registered on Savannah. When posting an issue to a tracker, it is very important to choose the ‘Category’ and ‘Item Group’ options accurately. The first contains a list of all Gnuastro’s programs along with ‘Installation’, ‘New program’ and ‘Webpage’. The “Item Group†contains the nature of the issue, for example if it is a ‘Crash’ in the software (a bug), or a problem in the documentation (also a bug) or a feature request or an enhancement. The set of horizontal links on the top of the page (Starting with ‘Main’ and ‘Homepage’ and finishing with ‘News’) are the easiest way to access these trackers (and other major aspects of the project) from any part of the project webpage. Hovering your mouse over them will open a drop down menu that will link you to the different things you can do on each tracker (for example, ‘Submit new’ or ‘Browse’). When you browse each tracker, you can use the “Display Criteria†link above the list to limit the displayed issues to what you are interested in. The ‘Category’ and ‘Group Item’ (explained above) are a good starting point. Any new issue that is submitted to any of the trackers, or any comments that are posted for an issue, is directly forwarded to the gnuastro-devel mailing list (, see *note Developing mailing lists:: for more). This will allow anyone interested to be up to date on the over-all development activity in Gnuastro and will also provide an alternative (to Savannah) archiving for the development discussions. Therefore, it is not recommended to directly post an email to this mailing list, but do all the activities (for example add new issues, or comment on existing ones) on Savannah. *Do I need to be a member in Savannah to contribute to Gnuastro?* No. The full version controlled history of Gnuastro is available for anonymous download or cloning. See *note Production workflow:: for a description of Gnuastro’s Integration-Manager Workflow. In short, you can either send in patches, or make your own fork. If you choose the latter, you can push your changes to your own fork and inform us. We will then pull your changes and merge them into the main project. Please see *note Forking tutorial:: for a tutorial. ---------- Footnotes ---------- (1) (2) (3) Some of the issues registered here might be due to a mistake on the user’s side, not an actual bug in the program.  File: gnuastro.info, Node: Developing mailing lists, Next: Contributing to Gnuastro, Prev: Gnuastro project webpage, Up: Developing 11.10 Developing mailing lists ============================== To keep the developers and interested users up to date with the activity and discussions within Gnuastro, there are two mailing lists which you can subscribe to: ‘gnuastro-devel@gnu.org’ (at ) All the posts made in the support, bugs and tasks discussions of *note Gnuastro project webpage:: are also sent to this mailing address and archived. By subscribing to this list you can stay up to date with the discussions that are going on between the developers before, during and (possibly) after working on an issue. All discussions are either in the context of bugs or tasks which are done on Savannah and circulated to all interested people through this mailing list. Therefore it is not recommended to post anything directly to this mailing list. Any mail that is sent to it from Savannah to this list has a link under the title “Reply to this item at:â€. That link will take you directly to the issue discussion page, where you can read the discussion history or join it. While you are posting comments on the Savannah issues, be sure to update the meta-data. For example if the task/bug is not assigned to anyone and you would like to take it, change the “Assigned to†box, or if you want to report that it has been applied, change the status and so on. All these changes will also be circulated with the email very clearly. ‘gnuastro-commits@gnu.org’ (at ) This mailing list is defined to circulate all commits that are done in Gnuastro’s version controlled source, see *note Version controlled source::. If you have any ideas, or suggestions on the commits, please use the bug and task trackers on Savannah to followup the discussion, do not post to this list. All the commits that are made for an already defined issue or task will state the respective ID so you can find it easily.  File: gnuastro.info, Node: Contributing to Gnuastro, Prev: Developing mailing lists, Up: Developing 11.11 Contributing to Gnuastro ============================== You have this great idea or have found a good fix to a problem which you would like to implement in Gnuastro. You have also become familiar with the general design of Gnuastro in the previous sections of this chapter (see *note Developing::) and want to start working on and sharing your new addition/change with the whole community as part of the official release. This is great and your contribution is most welcome. This section and the next (see *note Developer's checklist::) are written in the hope of making it as easy as possible for you to share your great idea with the community. In this section we discuss the final steps you have to take: legal and technical. From the legal perspective, the copyright of any work you do on Gnuastro has to be assigned to the Free Software Foundation (FSF) and the GNU operating system, or you have to sign a disclaimer. We do this to ensure that Gnuastro can remain free in the future, see *note Copyright assignment::. From the technical point of view, in this section we also discuss commit guidelines (*note Commit guidelines::) and the general version control workflow of Gnuastro in *note Production workflow::, along with a tutorial in *note Forking tutorial::. Recall that before starting the work on your idea, be sure to checkout the bugs and tasks trackers in *note Gnuastro project webpage:: and announce your work there so you don’t end up spending time on something others have already worked on, and also to attract similarly interested developers to help you. * Menu: * Copyright assignment:: Copyright has to be assigned to the FSF. * Commit guidelines:: Guidelines for commit messages. * Production workflow:: Submitting your commits (work) for inclusion. * Forking tutorial:: Tutorial on workflow steps with Git.  File: gnuastro.info, Node: Copyright assignment, Next: Commit guidelines, Prev: Contributing to Gnuastro, Up: Contributing to Gnuastro 11.11.1 Copyright assignment ---------------------------- Gnuastro’s copyright is owned by the FSF. Professor Eben Moglen, of the Columbia University Law School has given a nice summary of the reasons for this at . Below we are copying it verbatim for self consistency (in case you are offline or reading in print). Under US copyright law, which is the law under which most free software programs have historically been first published, there are very substantial procedural advantages to registration of copyright. And despite the broad right of distribution conveyed by the GPL, enforcement of copyright is generally not possible for distributors: only the copyright holder or someone having assignment of the copyright can enforce the license. If there are multiple authors of a copyrighted work, successful enforcement depends on having the cooperation of all authors. In order to make sure that all of our copyrights can meet the record keeping and other requirements of registration, and in order to be able to enforce the GPL most effectively, FSF requires that each author of code incorporated in FSF projects provide a copyright assignment, and, where appropriate, a disclaimer of any work-for-hire ownership claims by the programmer’s employer. That way we can be sure that all the code in FSF projects is free code, whose freedom we can most effectively protect, and therefore on which other developers can completely rely. Please get in touch with the Gnuastro maintainer (currently Mohammad Akhlaghi, akhlaghi -at- gnu -dot- org) to follow the procedures. It is possible to do this for each change (good for for a single contribution), and also more generally for all the changes/additions you do in the future within Gnuastro. So if you have already assigned the copyright of your work on another GNU software to the FSF, it should be done again for Gnuastro. The FSF has staff working on these legal issues and the maintainer will get you in touch with them to do the paperwork. The maintainer will just be informed in the end so your contributions can be merged within the Gnuastro source code. Gnuastro will gratefully acknowledge (see *note Acknowledgments::) all the people who have assigned their copyright to the FSF and have thus helped to guarantee the freedom and reliability of Gnuastro. The Free Software Foundation will also acknowledge your copyright contributions in the Free Software Supporter: which will circulate to a very large community (104,444 people in April 2016). See the archives for some examples and subscribe to receive interesting updates. The very active code contributors (or developers) will also be recognized as project members on the Gnuastro project webpage (see *note Gnuastro project webpage::) and can be given a ‘gnu.org’ email address. So your very valuable contribution and copyright assignment will not be forgotten and is highly appreciated by a very large community. If you are reluctant to sign an assignment, a disclaimer is also acceptable. *Do I need a disclaimer from my university or employer?* It depends on the contract with your university or employer. From the FSF’s ‘/gd/gnuorg/conditions.text’: “If you are employed to do programming, or have made an agreement with your employer that says it owns programs you write, we need a signed piece of paper from your employer disclaiming rights to†Gnuastro. The FSF’s copyright clerk will kindly help you decide, please consult the following email address: “assign -at- gnu -dot- orgâ€.  File: gnuastro.info, Node: Commit guidelines, Next: Production workflow, Prev: Copyright assignment, Up: Contributing to Gnuastro 11.11.2 Commit guidelines ------------------------- To be able to cleanly integrate your work with the other developers, *never commit on the ‘master’ branch* (see *note Production workflow:: for a complete discussion and *note Forking tutorial:: for a cookbook example). In short, leave ‘master’ only for changes you fetch, or pull from the official repository (see *note Synchronizing::). In the Gnuastro commit messages, we strive to follow these standards. Note that in the early phases of Gnuastro’s development, we are experimenting and so if you notice earlier commits don’t satisfy some of the guidelines below, it is because they predate that guideline. Commit title The commits have to start with one short descriptive title. The title is separated from the body with one blank line. Run ‘git log’ to see some of the most recent commit messages as an example. In general, the title should satisfy the following conditions: • It is best for the title to be short, about 60 (or even 50) characters. Most emulated command-line terminals are about 80 characters wide. However, we should also allow for the commit hashes which are printed in ‘git log --oneline’, and also branch names or the graph structure outputs of ‘git log’ which are also commonly used. • The title should not finish with any full-stops or periods (‘<.>’). Commit body The body of the commit message is separated from the title by one empty line. Recall that anyone who has subscribed to ‘gnuastro-commits’ mailing list will get the commit in their email after it has been pushed to ‘master’. People will also read them when they synchronize with the main Gnuastro repository (see *note Synchronizing::). Finally, the commit messages will later be used to update the ‘NEWS’ file on each release. Therefore the commit message body plays a very important role in the development of Gnuastro, so please adhere to the following guidelines. • The body should be very descriptive. Start the commit message body by explaining what changes your commit makes from a user’s perspective (added, changed, or removed options, or arguments to programs or libraries, or modified algorithms, or new installation step, or etc). • Try to explain the committed contents as best as you can. Recall that the readers of your commit message do not necessarily have your current background. After some time you will also forget the context, so this request is not just for others(1). Therefore be very descriptive and explain as much as possible: what the bug/task was, justify the way you fixed it and discuss other possible solutions that you might not have included. For the last item, it is best to discuss them thoroughly as comments in the appropriate section of the code, but only give a short summary in the commit message. Note that all added and removed source code lines will also be circulated in the ‘gnuastro-commits’ mailing list. • Like all other Gnuastro’s text files, the lines in the commit body should not be longer than 75 characters, see *note Coding conventions::. This is to ensure that on standard terminal emulators (with 80 character width), the ‘git log’ output can be cleanly displayed (note that the commit message is indented in the output of ‘git log’). If you use Emacs, Gnuastro’s ‘.dir-locals.el’ file will ensure that your commits satisfy this condition (using ). • When the commit is related to a task or a bug, please include the respective ID (in the format of ‘bug/task #ID’, note the space) in the commit message (from *note Gnuastro project webpage::) for interested people to be able to followup the discussion that took place there. If the commit fixes a bug or finishes a task, the recommended way is to add a line after the body with ‘‘This fixes bug #ID.’’, or ‘‘This finishes task #ID.’’. Don’t assume that the reader has internet access to check the bug’s full description when reading the commit message, so give a short introduction too. ---------- Footnotes ---------- (1)  File: gnuastro.info, Node: Production workflow, Next: Forking tutorial, Prev: Commit guidelines, Up: Contributing to Gnuastro 11.11.3 Production workflow --------------------------- Fortunately ‘Pro Git’ has done a wonderful job in explaining the different workflows in Chapter 5(1) and in particular the “Integration-Manager Workflow†explained there. The implementation of this workflow is nicely explained in Section 5.2(2) under “Forked-Public-Projectâ€. We have also prepared a short tutorial in *note Forking tutorial::. Anything on the master branch should always be tested and ready to be built and used. As described in ‘Pro Git’, there are two methods for you to contribute to Gnuastro in the Integration-Manager Workflow: 1. You can send commit patches by email as fully explained in ‘Pro Git’. This is good for your first few contributions. Just note that raw patches (containing only the diff) do not have any meta-data (author name, date and etc). Therefore they will not allow us to fully acknowledge your contributions as an author in Gnuastro: in the ‘AUTHORS’ file and at the start of the PDF book. These author lists are created automatically from the version controlled source. To receive full acknowledgment when submitting a patch, is thus advised to use Git’s ‘format-patch’ tool. See Pro Git’s Public project over email (https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#Public-Project-over-Email) section for a nice explanation. If you would like to get more heavily involved in Gnuastro’s development, then you can try the next solution. 2. You can have your own forked copy of Gnuastro on any hosting site you like (GitHub, GitLab, BitBucket, or etc) and inform us when your changes are ready so we merge them in Gnuastro. This is more suited for people who commonly contribute to the code (see *note Forking tutorial::). In both cases, your commits (with your name and information) will be preserved and your contributions will thus be fully recorded in the history of Gnuastro and in the ‘AUTHORS’ file and this book (second page in the PDF format) once they have been incorporated into the official repository. Needless to say that in such cases, be sure to follow the bug or task trackers (or subscribe to the ‘gnuastro-devel’ mailing list) and contact us before hand so you don’t do something that someone else is already working on. In that case, you can get in touch with them and help the job go on faster, see *note Gnuastro project webpage::. This workflow is currently mostly borrowed from the general recommendations of Git(3) and GitHub. But since Gnuastro is currently under heavy development, these might change and evolve to better suit our needs. ---------- Footnotes ---------- (1) (2) (3)  File: gnuastro.info, Node: Forking tutorial, Prev: Production workflow, Up: Contributing to Gnuastro 11.11.4 Forking tutorial ------------------------ This is a tutorial on the second suggested method (commonly known as forking) that you can submit your modifications in Gnuastro (see *note Production workflow::). To start, please create an empty repository on your hosting service webpage (we recommend GitLab(1)). If this is your first hosted repository on the webpage, you also have to upload your public SSH key(2) for the ‘git push’ command below to work. Here we’ll assume you use the name ‘janedoe’ to refer to yourself everywhere and that you choose ‘gnuastro-janedoe’ as the name of your Gnuastro fork. Any online hosting service will give you an address (similar to the ‘‘git@gitlab.com:...’’ below) of the empty repository you have created using their webpage, use that address in the third line below. $ git clone git://git.sv.gnu.org/gnuastro.git $ cd gnuastro $ git remote add janedoe git@gitlab.com:janedoe/gnuastro-janedoe.git $ git push janedoe master The full Gnuastro history is now pushed onto your hosting service and the ‘janedoe’ remote is now also following your ‘master’ branch. If you run ‘git remote show REMOTENAME’ for the ‘origin’ and ‘janedoe’ remotes, you will see their difference: the first has pull access and the second doesn’t. This nicely summarizes the main idea behind this workflow: you push to your remote repository, we pull from it and merge it into ‘master’, then you finalize it by pulling from the main repository. To test (compile) your changes during your work, you will need to bootstrap the version controlled source, see *note Bootstrapping:: for a full description. The cloning process above is only necessary for your first time setup, you don’t need to repeat it. However, please repeat the steps below for each independent issue you intend to work on. Let’s assume you have found a bug in ‘lib/statistics.c’’s median calculating function. Before actually doing anything, please announce it (see *note Report a bug::) so everyone knows you are working on it or to find out others aren’t already working on it. With the commands below, you make a branch, checkout to it, correct the bug, check if it is indeed fixed, add it to the staging area, commit it to the new branch and push it to your hosting service. But before all of them, make sure that you are on the ‘master’ branch and that your ‘master’ branch is up to date with the main Gnuastro repository with the first two commands. $ git checkout master $ git pull $ git checkout -b bug-median-stats # Choose a descriptive name $ emacs lib/statistics.c $ # do your checks here $ git add lib/statistics.c $ git commit $ git push janedoe bug-median-stats Your new branch is now on your hosted repository. Through the respective tacker on Savannah (see *note Gnuastro project webpage::) you can then let the other developers know that your ‘bug-median-stats’ branch is ready. They will pull your work, test it themselves and if it is ready to be merged into the main Gnuastro history, they will merge it into the ‘master’ branch. After that is done, you can simply checkout your local ‘master’ branch and pull all the changes from the main repository. After the pull you can run ‘‘git log’’ as shown below, to see how ‘bug-median-stats’ is merged with master. To finalize, you can push all the changes to your hosted repository and delete the branch: $ git checkout master $ git pull $ git log --oneline --graph --decorate --all $ git push janedoe master $ git branch -d bug-median-stats # delete local branch $ git push janedoe --delete bug-median-stats # delete remote branch Just as a reminder, always keep your work on each issue in a separate local and remote branch so work can progress on them independently. After you make your announcement, other people might contribute to the branch before merging it in to ‘master’, so this is very important. As a final reminder: before starting each issue branch from ‘master’, be sure to run ‘git pull’ in ‘master’ as shown above. This will enable you to start your branch (work) from the most recent commit and thus simplify the final merging of your work. ---------- Footnotes ---------- (1) See for an evaluation of the major existing repositories. Gnuastro uses GNU Savannah (which also has the highest ranking in the evaluation), but for starters, GitLab may be easier. (2) For example see this explanation provided by GitLab: .  File: gnuastro.info, Node: Gnuastro programs list, Next: Other useful software, Prev: Developing, Up: Top Appendix A Gnuastro programs list ********************************* GNU Astronomy Utilities 0.5, contains the following programs. They are sorted in alphabetical order and a short description is provided for each program. The description starts with the executable names in ‘thisfont’ followed by a pointer to the respective section in parenthesis. Throughout this book, they are ordered based on their context, please see the top-level contents for contextual ordering (based on what they do). Arithmetic (‘astarithmetic’, see *note Arithmetic::) For arithmetic operations on multiple (theoretically unlimited) number of datasets (images). It has a large and growing set of arithmetic, mathematical, and even statistical operators (for example ‘+’, ‘-’, ‘*’, ‘/’, ‘sqrt’, ‘log’, ‘min’, ‘average’, ‘median’). BuildProgram (‘astbuildprog’, see *note BuildProgram::) Compile, link and run programs that depend on the Gnuastro library (see *note Gnuastro library::). This program will automatically link with the libraries that Gnuastro depends on, so there is no need to explicitly mention them every time you are compiling a Gnuastro library dependent program. ConvertType (‘astconvertt’, see *note ConvertType::) Convert astronomical data files (FITS or IMH) to and from several other standard image and data formats, for example TXT, JPEG, EPS or PDF. Convolve (‘astconvolve’, see *note Convolve::) Convolve (blur or smooth) data with a given kernel in spatial and frequency domain on multiple threads. Convolve can also do de-convolution to find the appropriate kernel to PSF-match two images. CosmicCalculator (‘astcosmiccal’, see *note CosmicCalculator::) Do cosmological calculations, for example the luminosity distance, distance modulus, comoving volume and many more. Crop (‘astcrop’, see *note Crop::) Crop region(s) from an image and stitch several images if necessary. Inputs can be in pixel coordinates or world coordinates. Fits (‘astfits’, see *note Fits::) View and manipulate FITS file extensions and header keywords. Statistics (‘aststatistics’, see *note Statistics::) Get pixel statistics and save histogram and cumulative frequency plots. MakeCatalog (‘astmkcatalog’, see *note MakeCatalog::) Make catalog of labeled image (output of NoiseChisel). The catalogs are highly customizable and adding new calculations/columns is very straightforward. MakeNoise (‘astmknoise’, see *note MakeNoise::) Make (add) noise to an image, with a large set of random number generators and any seed. MakeProfiles (‘astmkprof’, see *note MakeProfiles::) Make mock 2D profiles in an image. The central regions of radial profiles are made with a configurable 2D Monte Carlo integration. It can also build the profiles on an over-sampled image. Match (‘astmatch’, see *note Match::) Given two input catalogs, find the rows that match with each other within a given aperture (may be an ellipse). NoiseChisel (‘astnoisechisel’, see *note NoiseChisel::) Detect and segment signal in noise. It uses a technique to detect very faint and diffuse, irregularly shaped signal in noise (galaxies in the sky), using thresholds that are below the Sky value, see arXiv:1505.01664 (http://arxiv.org/abs/1505.01664). Table (‘asttable’, *note Table::) Convert FITS binary and ASCII tables into other such tables, print them on the command-line, save them in a plain text file, or get the FITS table information. Warp (‘astwarp’, see *note Warp::) Warp image to new pixel grid. Any projective transformation or Homography can be applied to the input images.  File: gnuastro.info, Node: Other useful software, Next: GNU Free Doc. License, Prev: Gnuastro programs list, Up: Top Appendix B Other useful software ******************************** In this appendix the installation of programs and libraries that are not direct Gnuastro dependencies are discussed. However they can be useful for working with Gnuastro. * Menu: * SAO ds9:: Viewing FITS images. * PGPLOT:: Plotting directly in C  File: gnuastro.info, Node: SAO ds9, Next: PGPLOT, Prev: Other useful software, Up: Other useful software B.1 SAO ds9 =========== SAO ds9(1) is not a requirement of Gnuastro, it is a FITS image viewer. So to check your inputs and outputs, it is one of the best options. Like the other packages, it might already be available in your distribution’s repositories. It is already pre-compiled in the download section of its webpage. Once you download it you can unpack and install (move it to a system recognized directory) with the following commands (‘x.x.x’ is the version number): $ tar xf ds9.linux64.x.x.x.tar.gz $ sudo mv ds9 /usr/local/bin Once you run it, there might be a complaint about the Xss library, which you can find in your distribution package management system. You might also get an ‘XPA’ related error. In this case, you have to add the following line to your ‘~/.bashrc’ and ‘~/.profile’ file (you will have to log out and back in again for the latter): export XPA_METHOD=local * Menu: * Viewing multiextension FITS images:: Configure SAO ds9 for multiextension images. ---------- Footnotes ---------- (1)  File: gnuastro.info, Node: Viewing multiextension FITS images, Prev: SAO ds9, Up: SAO ds9 B.1.1 Viewing multiextension FITS images ---------------------------------------- The FITS definition allows for multiple extensions inside a FITS file, each extension can have a completely independent data set inside of it. If you ordinarily open a multi-extension FITS file with SAO ds9, for example by double clicking on the file or running ‘$ds9 foo.fits’, SAO ds9 will only show you the first extension. To be able to switch between the extensions you have to follow these menus in the SAO ds9 window: File→Open Other→Open Multi Ext Cube and then choose the Multi extension FITS file in your computer’s file structure. The method above is a little tedious to do every time you want view a multi-extension FITS file. Fortunately SAO ds9 also provides options that you can use to specify a particular behavior. One of those options is ‘-mecube’ which opens a FITS image as a multi-extension data cube. So on the command-line, if you run ‘$ds9 -mecube foo.fits’ a small window will also be opened, which allows you to switch between the image extensions that ‘foo.fits’ might have. If ‘foo.fits’ only consists of one extension, then SAO ds9 will open as usual. Just to avoid confusion, note that SAO ds9 does not follow the GNU style of separating long and short options as explained in *note Arguments and options::. In the GNU style, this ‘long’ option should have been called like ‘--mecube’, but SAO ds9 does follow those conventions and has its own. It is really convenient if you set ds9 to always run with the ‘-mecube’ option on your graphical display. On GNOME 3 (the most popular graphic user interface for GNU/Linux systems) you can do this by taking the following steps: • Open your favorite text editor and put the following text in a file that ends with ‘.desktop’, for example ‘saods9.desktop’. The file is very descriptive. [Desktop Entry] Type=Application Version=1.0 Name=SAO ds9 Comment=View FITS images Exec=ds9 -mecube %f Terminal=false Categories=Graphic;FITS; • Copy this file into your local (user) applications directory: $ cp saods9.desktop ~/.local/share/applications/ In case you don’t have the directory, you can make it yourself: $ mkdir -p ~/.local/share/applications/ • The steps above will add SAO ds9 as one of your applications. To make it default for every time you click on a FITS file. Right click on a FITS file and select “Open Withâ€, then go into “Other Application...†and choose “SAO ds9â€. In case you are using GNOME 2 you can take the following steps: right click on a FITS file and choose Properties→Open With→Add button. A list of applications will show up, ds9 might already be present in the list, but don’t choose it because it will run with no options. Below the list is an option “Use a custom commandâ€. Click on it and write the following command: ‘ds9 -mecube’ in the box and click “Addâ€. Then finally choose the command you just added as the default and click the “Close†button.  File: gnuastro.info, Node: PGPLOT, Prev: SAO ds9, Up: Other useful software B.2 PGPLOT ========== PGPLOT is a package for making plots in C. It is not directly needed by Gnuastro, but can be used by WCSLIB, see *note WCSLIB::. As explained in *note WCSLIB::, you can install WCSLIB without it too. It is very old (the most recent version was released early 2001!), but remains one of the main packages for plotting directly in C. WCSLIB uses this package to make plots if you want it to make plots. If you are interested you can also use it for your own purposes. If you want your plotting codes in between your C program, PGPLOT is currently one of your best options. The recommended alternative to this method is to get the raw data for the plots in text files and input them into any of the various more modern and capable plotting tools separately, for example the Matplotlib library in Python or PGFplots in LaTeX. This will also significantly help code readability. Let’s get back to PGPLOT for the sake of WCSLIB. Installing it is a little tricky (mainly because it is so old!). You can download the most recent version from the FTP link in its webpage(1). You can unpack it with the ‘tar xf’ command. Let’s assume the directory you have unpacked it to is ‘PGPLOT’, most probably it is: ‘/home/username/Downloads/pgplot/’. open the ‘drivers.list’ file: $ gedit drivers.list Remove the ‘!’ for the following lines and save the file in the end: PSDRIV 1 /PS PSDRIV 2 /VPS PSDRIV 3 /CPS PSDRIV 4 /VCPS XWDRIV 1 /XWINDOW XWDRIV 2 /XSERVE Don’t choose GIF or VGIF, there is a problem in their codes. Open the ‘PGPLOT/sys_linux/g77_gcc.conf’ file: $ gedit PGPLOT/sys_linux/g77_gcc.conf change the line saying: ‘FCOMPL="g77"’ to ‘FCOMPL="gfortran"’, and save it. This is a very important step during the compilation of the code if you are in GNU/Linux. You now have to create a folder in ‘/usr/local’, don’t forget to replace ‘PGPLOT’ with your unpacked address: $ su # mkdir /usr/local/pgplot # cd /usr/local/pgplot # cp PGPLOT/drivers.list ./ To make the Makefile, type the following command: # PGPLOT/makemake PGPLOT linux g77_gcc It should finish by saying: ‘Determining object file dependencies’. You have done the hard part! The rest is easy: run these three commands in order: # make # make clean # make cpg Finally you have to place the position of this directory you just made into the ‘LD_LIBRARY_PATH’ environment variable and define the environment variable ‘PGPLOT_DIR’. To do that, you have to edit your ‘.bashrc’ file: $ cd ~ $ gedit .bashrc Copy these lines into the text editor and save it: PGPLOT_DIR="/usr/local/pgplot/"; export PGPLOT_DIR LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgplot/ export LD_LIBRARY_PATH You need to log out and log back in again so these definitions take effect. After you logged back in, you want to see the result of all this labor, right? Tim Pearson has done that for you, create a temporary folder in your home directory and copy all the demonstration files in it: $ cd ~ $ mkdir temp $ cd temp $ cp /usr/local/pgplot/pgdemo* ./ $ ls You will see a lot of pgdemoXX files, where XX is a number. In order to execute them type the following command and drink your coffee while looking at all the beautiful plots! You are now ready to create your own. $ ./pgdemoXX ---------- Footnotes ---------- (1)  File: gnuastro.info, Node: GNU Free Doc. License, Next: Index, Prev: Other useful software, Up: Top Appendix C GNU Free Doc. License ******************************** Version 1.3, 3 November 2008 Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document “free†in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of “copyleftâ€, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Documentâ€, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “youâ€. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A “Modified Version†of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A “Secondary Section†is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The “Invariant Sections†are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The “Cover Texts†are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A “Transparent†copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent†is called “Opaqueâ€. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The “Title Page†means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page†means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text. The “publisher†means any person or entity that distributes copies of the Document to the public. A section “Entitled XYZ†means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgementsâ€, “Dedicationsâ€, “Endorsementsâ€, or “Historyâ€.) To “Preserve the Title†of such a section when you modify the Document means that it remains a section “Entitled XYZ†according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled “Historyâ€, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History†in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History†section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled “Acknowledgements†or “Dedicationsâ€, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled “Endorsementsâ€. Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled “Endorsements†or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. You may add a section Entitled “Endorsementsâ€, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled “History†in the various original documents, forming one section Entitled “Historyâ€; likewise combine any sections Entitled “Acknowledgementsâ€, and any sections Entitled “Dedicationsâ€. You must delete all sections Entitled “Endorsements.†6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate†if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled “Acknowledgementsâ€, “Dedicationsâ€, or “Historyâ€, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version†applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING “Massive Multiauthor Collaboration Site†(or “MMC Siteâ€) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration†(or “MMCâ€) contained in the site means any set of copyrightable works thus published on the MMC site. “CC-BY-SA†means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. “Incorporate†means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is “eligible for relicensing†if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.†line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  File: gnuastro.info, Node: Index, Prev: GNU Free Doc. License, Up: Top Index: Macros, structures and functions *************************************** All Gnuastro library’s exported macros start with ‘GAL_’, and its exported structures and functions start with ‘gal_’. This abbreviation stands for _G_NU _A_stronomy _L_ibrary. The next element in the name is the name of the header which declares or defines them, so to use the ‘gal_array_fset_const’ function, you have to ‘#include ’. See *note Gnuastro library:: for more. The ‘pthread_barrier’ constructs are our implementation and are only available on systems that don’t have them, see *note Implementation of pthread_barrier::. [index] * Menu: * gal_arithmetic: Arithmetic on datasets. (line 222) * GAL_ARITHMETIC_FLAGS_ALL: Arithmetic on datasets. (line 39) * GAL_ARITHMETIC_FREE: Arithmetic on datasets. (line 37) * GAL_ARITHMETIC_INPLACE: Arithmetic on datasets. (line 36) * GAL_ARITHMETIC_NUMOK: Arithmetic on datasets. (line 38) * GAL_ARITHMETIC_OP_ABS: Arithmetic on datasets. (line 152) * GAL_ARITHMETIC_OP_AND: Arithmetic on datasets. (line 74) * GAL_ARITHMETIC_OP_BITAND: Arithmetic on datasets. (line 176) * GAL_ARITHMETIC_OP_BITLSH: Arithmetic on datasets. (line 179) * GAL_ARITHMETIC_OP_BITNOT: Arithmetic on datasets. (line 196) * GAL_ARITHMETIC_OP_BITOR: Arithmetic on datasets. (line 177) * GAL_ARITHMETIC_OP_BITRSH: Arithmetic on datasets. (line 180) * GAL_ARITHMETIC_OP_BITXOR: Arithmetic on datasets. (line 178) * GAL_ARITHMETIC_OP_DIVIDE: Arithmetic on datasets. (line 67) * GAL_ARITHMETIC_OP_EQ: Arithmetic on datasets. (line 72) * GAL_ARITHMETIC_OP_GE: Arithmetic on datasets. (line 71) * GAL_ARITHMETIC_OP_GT: Arithmetic on datasets. (line 70) * GAL_ARITHMETIC_OP_ISBLANK: Arithmetic on datasets. (line 96) * GAL_ARITHMETIC_OP_LE: Arithmetic on datasets. (line 69) * GAL_ARITHMETIC_OP_LOG: Arithmetic on datasets. (line 126) * GAL_ARITHMETIC_OP_LOG10: Arithmetic on datasets. (line 127) * GAL_ARITHMETIC_OP_LT: Arithmetic on datasets. (line 68) * GAL_ARITHMETIC_OP_MAX: Arithmetic on datasets. (line 156) * GAL_ARITHMETIC_OP_MAXVAL: Arithmetic on datasets. (line 139) * GAL_ARITHMETIC_OP_MEAN: Arithmetic on datasets. (line 159) * GAL_ARITHMETIC_OP_MEANVAL: Arithmetic on datasets. (line 142) * GAL_ARITHMETIC_OP_MEDIAN: Arithmetic on datasets. (line 161) * GAL_ARITHMETIC_OP_MEDIANVAL: Arithmetic on datasets. (line 144) * GAL_ARITHMETIC_OP_MIN: Arithmetic on datasets. (line 155) * GAL_ARITHMETIC_OP_MINUS: Arithmetic on datasets. (line 65) * GAL_ARITHMETIC_OP_MINVAL: Arithmetic on datasets. (line 138) * GAL_ARITHMETIC_OP_MODULO: Arithmetic on datasets. (line 181) * GAL_ARITHMETIC_OP_MULTIPLY: Arithmetic on datasets. (line 66) * GAL_ARITHMETIC_OP_NE: Arithmetic on datasets. (line 73) * GAL_ARITHMETIC_OP_NOT: Arithmetic on datasets. (line 88) * GAL_ARITHMETIC_OP_NUM: Arithmetic on datasets. (line 157) * GAL_ARITHMETIC_OP_NUMVAL: Arithmetic on datasets. (line 140) * GAL_ARITHMETIC_OP_OR: Arithmetic on datasets. (line 75) * GAL_ARITHMETIC_OP_PLUS: Arithmetic on datasets. (line 64) * GAL_ARITHMETIC_OP_POW: Arithmetic on datasets. (line 170) * GAL_ARITHMETIC_OP_SQRT: Arithmetic on datasets. (line 125) * GAL_ARITHMETIC_OP_STD: Arithmetic on datasets. (line 160) * GAL_ARITHMETIC_OP_STDVAL: Arithmetic on datasets. (line 143) * GAL_ARITHMETIC_OP_SUM: Arithmetic on datasets. (line 158) * GAL_ARITHMETIC_OP_SUMVAL: Arithmetic on datasets. (line 141) * GAL_ARITHMETIC_OP_TO_FLOAT32: Arithmetic on datasets. (line 210) * GAL_ARITHMETIC_OP_TO_FLOAT64: Arithmetic on datasets. (line 211) * GAL_ARITHMETIC_OP_TO_INT16: Arithmetic on datasets. (line 205) * GAL_ARITHMETIC_OP_TO_INT32: Arithmetic on datasets. (line 207) * GAL_ARITHMETIC_OP_TO_INT64: Arithmetic on datasets. (line 209) * GAL_ARITHMETIC_OP_TO_INT8: Arithmetic on datasets. (line 203) * GAL_ARITHMETIC_OP_TO_UINT16: Arithmetic on datasets. (line 204) * GAL_ARITHMETIC_OP_TO_UINT32: Arithmetic on datasets. (line 206) * GAL_ARITHMETIC_OP_TO_UINT64: Arithmetic on datasets. (line 208) * GAL_ARITHMETIC_OP_TO_UINT8: Arithmetic on datasets. (line 202) * GAL_ARITHMETIC_OP_WHERE: Arithmetic on datasets. (line 109) * gal_binary_connected_adjacency_matrix: Binary datasets. (line 139) * gal_binary_connected_components: Binary datasets. (line 114) * gal_binary_dilate: Binary datasets. (line 84) * gal_binary_erode: Binary datasets. (line 62) * gal_binary_fill_holes: Binary datasets. (line 176) * gal_binary_open: Binary datasets. (line 99) * GAL_BINARY_TMP_VALUE: Binary datasets. (line 50) * gal_blank_alloc_write: Library blank values. (line 87) * gal_blank_as_string: Library blank values. (line 142) * gal_blank_flag: Library blank values. (line 126) * GAL_BLANK_FLOAT32: Library blank values. (line 65) * GAL_BLANK_FLOAT64: Library blank values. (line 69) * gal_blank_initialize: Library blank values. (line 94) * GAL_BLANK_INT16: Library blank values. (line 46) * GAL_BLANK_INT32: Library blank values. (line 52) * GAL_BLANK_INT64: Library blank values. (line 58) * GAL_BLANK_INT8: Library blank values. (line 40) * gal_blank_present: Library blank values. (line 102) * gal_blank_remove: Library blank values. (line 133) * GAL_BLANK_SIZE_T: Library blank values. (line 61) * GAL_BLANK_STRING: Library blank values. (line 73) * GAL_BLANK_UINT16: Library blank values. (line 43) * GAL_BLANK_UINT32: Library blank values. (line 49) * GAL_BLANK_UINT64: Library blank values. (line 55) * GAL_BLANK_UINT8: Library blank values. (line 37) * gal_blank_write: Library blank values. (line 79) * gal_box_border_from_center: Bounding box. (line 36) * gal_box_bound_ellipse: Bounding box. (line 22) * gal_box_bound_ellipse_extent: Bounding box. (line 11) * gal_box_overlap: Bounding box. (line 45) * GAL_CONFIG_HAVE_LIBGIT2: Configuration information. (line 25) * GAL_CONFIG_HAVE_PTHREAD_BARRIER: Configuration information. (line 42) * GAL_CONFIG_HAVE_WCSLIB_VERSION: Configuration information. (line 33) * GAL_CONFIG_SIZEOF_LONG: Configuration information. (line 50) * GAL_CONFIG_SIZEOF_SIZE_T: Configuration information. (line 51) * GAL_CONFIG_VERSION: Configuration information. (line 14) * gal_convolve_spatial: Convolution functions. (line 17) * gal_convolve_spatial_correct_ch_edge: Convolution functions. (line 46) * gal_cosmology_age: Cosmology library. (line 18) * gal_cosmology_angular_distance: Cosmology library. (line 46) * gal_cosmology_comoving_volume: Cosmology library. (line 32) * gal_cosmology_critical_density: Cosmology library. (line 39) * gal_cosmology_distance_modulus: Cosmology library. (line 62) * gal_cosmology_luminosity_distance: Cosmology library. (line 54) * gal_cosmology_proper_distance: Cosmology library. (line 25) * gal_cosmology_to_absolute_mag: Cosmology library. (line 69) * gal_data_alloc: Dataset size and allocation. (line 106) * gal_data_array_calloc: Arrays of datasets. (line 20) * gal_data_array_free: Arrays of datasets. (line 36) * gal_data_calloc_array: Dataset size and allocation. (line 64) * gal_data_copy: Copying datasets. (line 18) * gal_data_copy_string_to_number: Copying datasets. (line 65) * gal_data_copy_to_allocated: Copying datasets. (line 44) * gal_data_copy_to_new_type: Copying datasets. (line 24) * gal_data_copy_to_new_type_free: Copying datasets. (line 33) * gal_data_dsize_is_different: Dataset size and allocation. (line 13) * gal_data_free: Dataset size and allocation. (line 129) * gal_data_free_contents: Dataset size and allocation. (line 120) * gal_data_initialize: Dataset size and allocation. (line 71) * gal_data_malloc_array: Dataset size and allocation. (line 44) * gal_data_ptr_dist: Dataset size and allocation. (line 36) * gal_data_ptr_increment: Dataset size and allocation. (line 21) * gal_dimension_add_coords: Dimensions. (line 50) * gal_dimension_coord_to_index: Dimensions. (line 59) * gal_dimension_dist_manhattan: Dimensions. (line 79) * GAL_DIMENSION_FLT_TO_INT: Dimensions. (line 43) * gal_dimension_increment: Dimensions. (line 28) * gal_dimension_index_to_coord: Dimensions. (line 68) * GAL_DIMENSION_NEIGHBOR_OP: Dimensions. (line 87) * gal_dimension_num_neighbors: Dimensions. (line 36) * gal_dimension_total_size: Dimensions. (line 22) * gal_fits_bitpix_to_type: CFITSIO and Gnuastro types. (line 25) * gal_fits_datatype_to_type: CFITSIO and Gnuastro types. (line 49) * gal_fits_hdu_format: FITS HDUs. (line 24) * gal_fits_hdu_num: FITS HDUs. (line 19) * gal_fits_hdu_open: FITS HDUs. (line 30) * gal_fits_hdu_open_format: FITS HDUs. (line 43) * gal_fits_img_info: FITS arrays. (line 11) * gal_fits_img_read: FITS arrays. (line 22) * gal_fits_img_read_kernel: FITS arrays. (line 52) * gal_fits_img_read_to_type: FITS arrays. (line 39) * gal_fits_img_write: FITS arrays. (line 75) * gal_fits_img_write_corr_wcs_str: FITS arrays. (line 97) * gal_fits_img_write_to_ptr: FITS arrays. (line 66) * gal_fits_img_write_to_type: FITS arrays. (line 83) * gal_fits_io_error: FITS macros errors filenames. (line 14) * gal_fits_key_clean_str_value: FITS header keywords. (line 60) * gal_fits_key_img_blank: FITS header keywords. (line 44) * gal_fits_key_list_add: FITS header keywords. (line 153) * gal_fits_key_list_add_end: FITS header keywords. (line 169) * gal_fits_key_read: FITS header keywords. (line 145) * gal_fits_key_read_from_ptr: FITS header keywords. (line 72) * gal_fits_key_write: FITS header keywords. (line 205) * gal_fits_key_write_filename: FITS header keywords. (line 179) * gal_fits_key_write_version: FITS header keywords. (line 212) * gal_fits_key_write_wcsstr: FITS header keywords. (line 195) * GAL_FITS_MAX_NDIM: FITS macros errors filenames. (line 10) * gal_fits_name_is_fits: FITS macros errors filenames. (line 22) * gal_fits_name_save_as_string: FITS macros errors filenames. (line 37) * gal_fits_open_to_write: FITS HDUs. (line 11) * gal_fits_suffix_is_fits: FITS macros errors filenames. (line 30) * gal_fits_tab_format: FITS tables. (line 22) * gal_fits_tab_info: FITS tables. (line 32) * gal_fits_tab_read: FITS tables. (line 53) * gal_fits_tab_size: FITS tables. (line 15) * gal_fits_tab_write: FITS tables. (line 70) * gal_fits_type_to_bin_tform: CFITSIO and Gnuastro types. (line 37) * gal_fits_type_to_bitpix: CFITSIO and Gnuastro types. (line 31) * gal_fits_type_to_datatype: CFITSIO and Gnuastro types. (line 43) * gal_git_describe: Git wrappers. (line 15) * gal_interpolate_close_neighbors: Interpolation. (line 27) * gal_list_data_add: List of gal_data_t. (line 18) * gal_list_data_add_alloc: List of gal_data_t. (line 33) * gal_list_data_free: List of gal_data_t. (line 60) * gal_list_data_number: List of gal_data_t. (line 55) * gal_list_data_pop: List of gal_data_t. (line 44) * gal_list_data_reverse: List of gal_data_t. (line 49) * gal_list_dosizet_add: Doubly linked ordered list of size_t. (line 40) * gal_list_dosizet_free: Doubly linked ordered list of size_t. (line 73) * gal_list_dosizet_pop_smallest: Doubly linked ordered list of size_t. (line 49) * gal_list_dosizet_print: Doubly linked ordered list of size_t. (line 59) * gal_list_dosizet_to_sizet: Doubly linked ordered list of size_t. (line 66) * gal_list_f32_add: List of float. (line 22) * gal_list_f32_free: List of float. (line 81) * gal_list_f32_number: List of float. (line 41) * gal_list_f32_pop: List of float. (line 33) * gal_list_f32_print: List of float. (line 46) * gal_list_f32_reverse: List of float. (line 63) * gal_list_f32_to_array: List of float. (line 69) * gal_list_f64_add: List of double. (line 24) * gal_list_f64_free: List of double. (line 83) * gal_list_f64_number: List of double. (line 43) * gal_list_f64_pop: List of double. (line 35) * gal_list_f64_print: List of double. (line 48) * gal_list_f64_reverse: List of double. (line 65) * gal_list_f64_to_array: List of double. (line 71) * gal_list_i32_add: List of int32_t. (line 23) * gal_list_i32_free: List of int32_t. (line 83) * gal_list_i32_number: List of int32_t. (line 43) * gal_list_i32_pop: List of int32_t. (line 35) * gal_list_i32_print: List of int32_t. (line 48) * gal_list_i32_reverse: List of int32_t. (line 65) * gal_list_i32_to_array: List of int32_t. (line 71) * gal_list_osizet_add: Ordered list of size_t. (line 28) * gal_list_osizet_pop: Ordered list of size_t. (line 39) * gal_list_osizet_to_sizet_free: Ordered list of size_t. (line 49) * gal_list_sizet_add: List of size_t. (line 34) * gal_list_sizet_free: List of size_t. (line 93) * gal_list_sizet_number: List of size_t. (line 53) * gal_list_sizet_pop: List of size_t. (line 45) * gal_list_sizet_print: List of size_t. (line 58) * gal_list_sizet_reverse: List of size_t. (line 75) * gal_list_sizet_to_array: List of size_t. (line 81) * gal_list_str_add: List of strings. (line 20) * gal_list_str_free: List of strings. (line 70) * gal_list_str_number: List of strings. (line 44) * gal_list_str_pop: List of strings. (line 36) * gal_list_str_print: List of strings. (line 49) * gal_list_str_reverse: List of strings. (line 64) * gal_list_void_add: List of void. (line 31) * gal_list_void_free: List of void. (line 60) * gal_list_void_number: List of void. (line 49) * gal_list_void_pop: List of void. (line 42) * gal_list_void_reverse: List of void. (line 54) * gal_match_coordinates: Matching. (line 14) * gal_permutation_apply: Permutations. (line 43) * gal_permutation_apply_inverse: Permutations. (line 50) * gal_permutation_check: Permutations. (line 37) * gal_polygon_area: Polygons. (line 80) * gal_polygon_clip: Polygons. (line 101) * GAL_POLYGON_MAX_CORNERS: Polygons. (line 17) * gal_polygon_ordered_corners: Polygons. (line 25) * gal_polygon_pin: Polygons. (line 88) * gal_polygon_ppropin: Polygons. (line 95) * GAL_POLYGON_ROUND_ERR: Polygons. (line 20) * gal_qsort_index_arr: Qsort functions. (line 16) * gal_qsort_index_float_decreasing: Qsort functions. (line 21) * gal_qsort_TYPE_decreasing: Qsort functions. (line 57) * gal_qsort_TYPE_increasing: Qsort functions. (line 48) * GAL_STATISTICS_BINS_INVALID: Statistical operations. (line 32) * GAL_STATISTICS_BINS_IRREGULAR: Statistical operations. (line 34) * GAL_STATISTICS_BINS_REGULAR: Statistical operations. (line 33) * gal_statistics_cfp: Statistical operations. (line 258) * gal_statistics_histogram: Statistical operations. (line 247) * gal_statistics_is_sorted: Statistical operations. (line 177) * gal_statistics_maximum: Statistical operations. (line 51) * gal_statistics_mean: Statistical operations. (line 64) * gal_statistics_mean_std: Statistical operations. (line 76) * gal_statistics_median: Statistical operations. (line 89) * gal_statistics_minimum: Statistical operations. (line 44) * gal_statistics_mode: Statistical operations. (line 139) * GAL_STATISTICS_MODE_GOOD_SYM: Statistical operations. (line 20) * gal_statistics_mode_mirror_plots: Statistical operations. (line 163) * gal_statistics_no_blank_sorted: Statistical operations. (line 193) * gal_statistics_number: Statistical operations. (line 38) * gal_statistics_quantile: Statistical operations. (line 110) * gal_statistics_quantile_function: Statistical operations. (line 129) * gal_statistics_quantile_function_index: Statistical operations. (line 119) * gal_statistics_quantile_index: Statistical operations. (line 103) * gal_statistics_regular_bins: Statistical operations. (line 203) * gal_statistics_sigma_clip: Statistical operations. (line 279) * GAL_STATISTICS_SIG_CLIP_MAX_CONVERGE: Statistical operations. (line 15) * GAL_STATISTICS_SORTED_DECREASING: Statistical operations. (line 28) * GAL_STATISTICS_SORTED_INCREASING: Statistical operations. (line 27) * GAL_STATISTICS_SORTED_NOT: Statistical operations. (line 26) * gal_statistics_sort_decreasing: Statistical operations. (line 188) * gal_statistics_sort_increasing: Statistical operations. (line 183) * gal_statistics_std: Statistical operations. (line 70) * gal_statistics_sum: Statistical operations. (line 58) * gal_table_comments_add_intro: Table input output. (line 141) * GAL_TABLE_DEF_PRECISION_DBL: Table input output. (line 30) * GAL_TABLE_DEF_PRECISION_FLT: Table input output. (line 29) * GAL_TABLE_DEF_PRECISION_INT: Table input output. (line 28) * GAL_TABLE_DEF_WIDTH_DBL: Table input output. (line 27) * GAL_TABLE_DEF_WIDTH_FLT: Table input output. (line 26) * GAL_TABLE_DEF_WIDTH_INT: Table input output. (line 24) * GAL_TABLE_DEF_WIDTH_LINT: Table input output. (line 25) * GAL_TABLE_DEF_WIDTH_STR: Table input output. (line 23) * GAL_TABLE_DISPLAY_FMT_DECIMAL: Table input output. (line 39) * GAL_TABLE_DISPLAY_FMT_EXP: Table input output. (line 44) * GAL_TABLE_DISPLAY_FMT_FLOAT: Table input output. (line 43) * GAL_TABLE_DISPLAY_FMT_GENERAL: Table input output. (line 45) * GAL_TABLE_DISPLAY_FMT_HEX: Table input output. (line 42) * GAL_TABLE_DISPLAY_FMT_OCTAL: Table input output. (line 41) * GAL_TABLE_DISPLAY_FMT_STRING: Table input output. (line 38) * GAL_TABLE_DISPLAY_FMT_UDECIMAL: Table input output. (line 40) * GAL_TABLE_FORMAT_AFITS: Table input output. (line 67) * GAL_TABLE_FORMAT_BFITS: Table input output. (line 68) * GAL_TABLE_FORMAT_INVALID: Table input output. (line 65) * GAL_TABLE_FORMAT_TXT: Table input output. (line 66) * gal_table_info: Table input output. (line 83) * gal_table_print_info: Table input output. (line 102) * gal_table_read: Table input output. (line 111) * GAL_TABLE_SEARCH_COMMENT: Table input output. (line 76) * GAL_TABLE_SEARCH_INVALID: Table input output. (line 73) * GAL_TABLE_SEARCH_NAME: Table input output. (line 74) * GAL_TABLE_SEARCH_UNIT: Table input output. (line 75) * gal_table_write: Table input output. (line 158) * gal_table_write_log: Table input output. (line 178) * gal_threads_attr_barrier_init: Gnuastro's thread related functions. (line 60) * gal_threads_dist_in_threads: Gnuastro's thread related functions. (line 73) * gal_threads_number: Gnuastro's thread related functions. (line 40) * gal_threads_spin_off: Gnuastro's thread related functions. (line 49) * gal_tile_block: Independent tiles. (line 78) * gal_tile_block_blank_flag: Independent tiles. (line 161) * gal_tile_block_check_tiles: Independent tiles. (line 139) * gal_tile_block_increment: Independent tiles. (line 88) * gal_tile_block_relative_to_other: Independent tiles. (line 152) * gal_tile_block_write_const_value: Independent tiles. (line 104) * gal_tile_full: Tile grid. (line 51) * gal_tile_full_free_contents: Tile grid. (line 242) * gal_tile_full_id_from_coord: Tile grid. (line 233) * gal_tile_full_permutation: Tile grid. (line 152) * gal_tile_full_sanity_check: Tile grid. (line 117) * gal_tile_full_two_layers: Tile grid. (line 126) * gal_tile_full_values_smooth: Tile grid. (line 222) * gal_tile_full_values_write: Tile grid. (line 205) * GAL_TILE_PARSE_OPERATE: Independent tiles. (line 169) * gal_tile_series_from_minmax: Independent tiles. (line 58) * gal_tile_start_coord: Independent tiles. (line 14) * gal_tile_start_end_coord: Independent tiles. (line 22) * gal_tile_start_end_ind_inclusive: Independent tiles. (line 41) * gal_txt_image_read: Text files. (line 79) * GAL_TXT_LINESTAT_BLANK: Text files. (line 27) * GAL_TXT_LINESTAT_COMMENT: Text files. (line 28) * GAL_TXT_LINESTAT_DATAROW: Text files. (line 29) * GAL_TXT_LINESTAT_INVALID: Text files. (line 26) * gal_txt_line_stat: Text files. (line 36) * gal_txt_table_info: Text files. (line 43) * gal_txt_table_read: Text files. (line 62) * gal_txt_write: Text files. (line 88) * GAL_TYPE_BIT: Library data types. (line 44) * gal_type_bit_string: Library data types. (line 187) * GAL_TYPE_COMPLEX32: Library data types. (line 96) * GAL_TYPE_COMPLEX64: Library data types. (line 101) * GAL_TYPE_FLOAT32: Library data types. (line 88) * GAL_TYPE_FLOAT64: Library data types. (line 92) * gal_type_from_name: Library data types. (line 137) * gal_type_from_string: Library data types. (line 227) * GAL_TYPE_INT16: Library data types. (line 60) * GAL_TYPE_INT32: Library data types. (line 68) * GAL_TYPE_INT64: Library data types. (line 76) * GAL_TYPE_INT8: Library data types. (line 52) * GAL_TYPE_INVALID: Library data types. (line 40) * gal_type_is_list: Library data types. (line 176) * GAL_TYPE_LONG: Library data types. (line 84) * gal_type_max: Library data types. (line 161) * gal_type_min: Library data types. (line 146) * gal_type_name: Library data types. (line 124) * gal_type_out: Library data types. (line 181) * gal_type_sizeof: Library data types. (line 117) * GAL_TYPE_SIZE_T: Library data types. (line 80) * GAL_TYPE_STRING: Library data types. (line 106) * gal_type_string_to_number: Library data types. (line 258) * GAL_TYPE_STRLL: Library data types. (line 109) * gal_type_to_string: Library data types. (line 209) * GAL_TYPE_UINT16: Library data types. (line 56) * GAL_TYPE_UINT32: Library data types. (line 64) * GAL_TYPE_UINT64: Library data types. (line 72) * GAL_TYPE_UINT8: Library data types. (line 48) * gal_wcs_angular_distance_deg: World Coordinate System. (line 103) * gal_wcs_copy: World Coordinate System. (line 54) * gal_wcs_decompose_pc_cdelt: World Coordinate System. (line 84) * gal_wcs_img_to_world: World Coordinate System. (line 157) * gal_wcs_on_tile: World Coordinate System. (line 59) * gal_wcs_pixel_area_arcsec2: World Coordinate System. (line 128) * gal_wcs_pixel_scale: World Coordinate System. (line 121) * gal_wcs_read: World Coordinate System. (line 45) * gal_wcs_read_fitsptr: World Coordinate System. (line 13) * gal_wcs_warp_matrix: World Coordinate System. (line 74) * gal_wcs_world_to_img: World Coordinate System. (line 136) * pthread_barrierattr_t: Implementation of pthread_barrier. (line 22) * pthread_barrier_destroy: Implementation of pthread_barrier. (line 43) * pthread_barrier_init: Implementation of pthread_barrier. (line 28) * pthread_barrier_t: Implementation of pthread_barrier. (line 25) * pthread_barrier_wait: Implementation of pthread_barrier. (line 36) Index ***** [index] * Menu: * $HOME: Current directory and User wide. (line 6) * $HOME/.local/etc/: Current directory and User wide. (line 6) * --: Operating mode options. (line 11) * --cite: Operating mode options. (line 55) * --config=STR: Operating mode options. (line 94) * --disable-guide-message: Gnuastro configure options. (line 39) * --disable-progname: Gnuastro configure options. (line 20) * --dontdelete: Input output options. (line 61) * --enable-gnulibcheck: Gnuastro configure options. (line 26) * --enable-gnulibcheck <1>: Known issues. (line 34) * --enable-guide-message=no: Gnuastro configure options. (line 40) * --enable-progname: Gnuastro configure options. (line 12) * --enable-progname=no: Gnuastro configure options. (line 21) * --enable-reentrant: CFITSIO. (line 13) * --hdu=STR/INT: Input output options. (line 10) * --help: Arguments and options. (line 24) * --help <1>: Operating mode options. (line 27) * --help <2>: --help. (line 6) * --help output customization: --help. (line 55) * --ignorecase: Input output options. (line 36) * --keepinputdir: Input output options. (line 68) * --keepinputdir <1>: Automatic output. (line 13) * --lastconfig: Operating mode options. (line 138) * --log: Operating mode options. (line 210) * --numthreads: Configuration files. (line 15) * --numthreads <1>: Multi-threaded operations. (line 16) * --numthreads=INT: Operating mode options. (line 217) * --onlyversion=STR: Operating mode options. (line 150) * --output: Configuration files. (line 15) * --output=STR: Input output options. (line 48) * --prefix: Installation directory. (line 6) * --printparams: Options. (line 64) * --printparams <1>: Operating mode options. (line 72) * --program-prefix: Executable names. (line 50) * --program-suffix: Executable names. (line 50) * --program-transform-name: Executable names. (line 50) * --quiet: Operating mode options. (line 46) * --searchin=STR: Input output options. (line 29) * --setdirconf: Operating mode options. (line 109) * --setdirconf <1>: Current directory and User wide. (line 16) * --setusrconf: Operating mode options. (line 133) * --setusrconf <1>: Current directory and User wide. (line 16) * --tableformat=STR: Input output options. (line 81) * --type=STR: Input output options. (line 54) * --usage: Arguments and options. (line 24) * --usage <1>: Operating mode options. (line 21) * --usage <2>: --usage. (line 6) * --version: Operating mode options. (line 38) * --without-pgplot: WCSLIB. (line 16) * -?: Operating mode options. (line 26) * -D: Input output options. (line 60) * -h STR/INT: Input output options. (line 9) * -I: Input output options. (line 35) * -K: Input output options. (line 67) * -mecube (ds9): Viewing multiextension FITS images. (line 15) * -N INT: Operating mode options. (line 216) * -o STR: Input output options. (line 47) * -P: Operating mode options. (line 71) * -q: Operating mode options. (line 45) * -S: Operating mode options. (line 108) * -s STR: Input output options. (line 28) * -T STR: Input output options. (line 53) * -t STR: Input output options. (line 80) * -U: Operating mode options. (line 132) * -V: Operating mode options. (line 37) * ./.gnuastro/: Current directory and User wide. (line 6) * ./configure: Configuring. (line 6) * ./configure <1>: Installation directory. (line 70) * ./configure options: Gnuastro configure options. (line 6) * .bashrc: --help. (line 65) * .bashrc <1>: Generating random numbers. (line 62) * .desktop: Viewing multiextension FITS images. (line 35) * 32-bit: Configuration information. (line 50) * 64-bit: Configuration information. (line 50) * A4 paper size: A4 print book. (line 6) * A4 print book: A4 print book. (line 6) * ACS: Warp. (line 53) * Additions to Gnuastro: Suggest new feature. (line 6) * Adjacency matrix: Binary datasets. (line 143) * Adobe systems: Recognized file formats. (line 49) * ADU: Flux Brightness and magnitude. (line 6) * ADU <1>: Instrumental noise. (line 19) * Advanced camera for surveys: Warp. (line 53) * Advanced Camera for Surveys: Warping basics. (line 51) * Affine Transformation: Warping basics. (line 85) * Albert. A. Michelson: Science and its tools. (line 134) * Amplifier: Tessellation. (line 54) * Announcements: Announcements. (line 6) * Anonymous bug submission: Report a bug. (line 84) * Anscombe F. J.: Science and its tools. (line 24) * Anscombe’s quartet: Science and its tools. (line 32) * ANSI C: Why C. (line 15) * Aperture blurring: Sigma clipping. (line 22) * Aperture photometry: MakeCatalog. (line 42) * Aperture photometry <1>: Invoking astmkcatalog. (line 53) * Argp argument parser: --help. (line 55) * Argp argument parser <1>: Mandatory source code files. (line 69) * ARGP_HELP_FMT: --help. (line 55) * args.h: Mandatory source code files. (line 68) * Arguments to programs: Arguments and options. (line 6) * Array: Linked lists. (line 6) * ASCII plot: Invoking aststatistics. (line 109) * ASCII table, FITS: Recognized table formats. (line 19) * ASCII85 encoding: Invoking astconvertt. (line 106) * astprogname: Naming convention. (line 15) * Astronomical data format: Recognized file formats. (line 10) * Astronomical data suffixes: Arguments. (line 22) * Astronomical Magnitude system: Flux Brightness and magnitude. (line 28) * Asynchronous thread allocation: Hubble visually checks and classifies his catalog. (line 72) * Asynchronous thread allocation <1>: Invoking astcrop. (line 60) * Atmosphere: Convolve. (line 25) * Atmosphere blurring: Sigma clipping. (line 22) * authors-cite.h: Mandatory source code files. (line 147) * Auto-complete in the shell: Executable names. (line 14) * Automatic configuration file writing: Configuration file format. (line 33) * Automatic output file names: Automatic output. (line 6) * Automatically created build files: Bootstrapping. (line 6) * Available number of threads: Multi-threaded operations. (line 16) * Average: Statistical operations. (line 64) * Average, weighted: Convolve. (line 6) * AWK: General program usage tutorial. (line 961) * AWK <1>: Table. (line 31) * AWK <2>: Invoking asttable. (line 76) * AWK <3>: Invoking astarithmetic. (line 141) * AWK <4>: Invoking aststatistics. (line 156) * AWK <5>: Table input output. (line 120) * Axis ratio: Defining an ellipse. (line 6) * Background flux: Sky value definition. (line 18) * Background flux <1>: Photon counting noise. (line 46) * Background flux gradients: Photon counting noise. (line 61) * Background pixels: Detection options. (line 35) * Backup: Configure and build in RAM. (line 15) * Best use of CPU threads: A note on threads. (line 6) * Bi-linear interpolation: Resampling. (line 21) * Bias current: Tessellation. (line 54) * Bicubic interpolation: Resampling. (line 21) * Bin width, histogram: Histogram and Cumulative Frequency Plot. (line 21) * Binary datasets: Binary datasets. (line 6) * Binary image: Recognized file formats. (line 72) * Binary image <1>: Detection options. (line 35) * Binary table, FITS: Recognized table formats. (line 54) * Bit: Numeric data types. (line 6) * bit-32: Configuration information. (line 50) * bit-64: Configuration information. (line 50) * Bitwise Or: Arithmetic on datasets. (line 40) * Black and white image: Recognized file formats. (line 72) * blank color channel: Recognized file formats. (line 95) * Blank data: Generic data container. (line 147) * Blank pixel: Blank pixels. (line 6) * Blank pixel <1>: Arithmetic operators. (line 245) * Blur image: Convolve. (line 25) * Blur image <1>: PSF. (line 17) * Blurring: Sigma clipping. (line 22) * Book formats: Getting help. (line 6) * Bootstrapping: Bootstrapping. (line 6) * Border on an image: Invoking astconvertt. (line 85) * Breadth first search: Defining an ellipse. (line 35) * Breadth first search <1>: Binary datasets. (line 118) * Brightness: Galaxies. (line 11) * Brightness <1>: Flux Brightness and magnitude. (line 13) * Brightness <2>: Profile magnitude. (line 6) * Buffers (Emacs): Coding conventions. (line 41) * Bug: Report a bug. (line 6) * Bug <1>: Gnuastro project webpage. (line 6) * Bug reporting: Report a bug. (line 16) * Bug tracker: Report a bug. (line 97) * bug-gnuastro@gnu.org: Report a bug. (line 78) * Build: Quick start. (line 6) * Build individual profiles: MakeProfiles output dataset. (line 125) * Build tree: Test scripts. (line 25) * Building from source: Mandatory dependencies. (line 13) * Byte: Numeric data types. (line 15) * C Pre-Processor: Invoking astbuildprog. (line 57) * C programming language: Why C. (line 6) * C++ programming language: Why C. (line 6) * C, plotting: PGPLOT. (line 6) * C99: Dataset size and allocation. (line 54) * C: restrict: Generic data container. (line 60) * Cache, system: A note on threads. (line 29) * Camera: Resampling. (line 6) * CANDELS: Quantifying measurement limits. (line 69) * CCD: Tessellation. (line 54) * CCD <1>: Warp. (line 53) * Central management: Gnuastro project webpage. (line 6) * CFITSIO: CFITSIO. (line 6) * CFITSIO <1>: FITS files. (line 6) * CFITSIO version on outputs: Output headers. (line 6) * Change converted pixel values: Invoking astconvertt. (line 134) * Channel: Tessellation. (line 65) * Charge-coupled device: Warp. (line 53) * Check: Quick start. (line 6) * Check center of crop: Crop options. (line 196) * Checking detection algorithms: MakeProfiles. (line 6) * Checking tests: Tests. (line 6) * Citation information: Mandatory source code files. (line 148) * CLI: command-line user interface: Command-line interface. (line 6) * CLI: repeating operations: Command-line interface. (line 52) * Clump magnitude limit: Quantifying measurement limits. (line 6) * CMYK: Color. (line 6) * Colorspace: Color. (line 6) * Colorspace, gray-scale: Color. (line 6) * Colorspace, transformation: Color. (line 28) * Command-line arguments: Arguments and options. (line 6) * Command-line help: Getting help. (line 13) * Command-line options: Arguments and options. (line 6) * Command-line scroll: --help. (line 27) * Command-line searching text: --help. (line 47) * Command-line token separation: Command-line. (line 12) * Command-line user interface: Command-line interface. (line 6) * Command-line, long outputs: --help. (line 22) * Command-line, viewing full book: Info. (line 6) * Comments: Sufi simulates a detection. (line 324) * Commutative property: Merging multiple warpings. (line 6) * Comoving distance: Distance on a 2D curved space. (line 173) * Compare Moffat and Gaussian: PSF. (line 66) * Compare Poisson and Gaussian: Photon counting noise. (line 33) * Compile: Quick start. (line 6) * Compiled PostScript: Recognized file formats. (line 49) * Compiling from source: Mandatory dependencies. (line 13) * Completeness: Quantifying measurement limits. (line 111) * Complex numbers: Invoking astconvolve. (line 68) * Compression quality in JPEG: Invoking astconvertt. (line 122) * Configuration file directories: Configuration file precedence. (line 6) * Configuration file format: Configuration file format. (line 11) * Configuration file precedence: Configuration file precedence. (line 6) * Configuration file suffix: Configuration file format. (line 6) * Configuration files: Options. (line 92) * Configuration files <1>: Configuration files. (line 6) * Configuration files, system wide: System wide. (line 6) * Configuration files, writing: Configuration file format. (line 33) * Configuration, not finding library: Known issues. (line 11) * Configure options: Configuring. (line 12) * Configure options particular to Gnuastro: Gnuastro configure options. (line 6) * Configuring: Configuring. (line 6) * Connected components: Binary datasets. (line 118) * Connectivity: Binary datasets. (line 13) * Convenient book formats: Getting help. (line 6) * Convention for program source: Program source. (line 6) * Converting data formats: ConvertType. (line 6) * Converting image formats: ConvertType. (line 6) * ConvertType (astconvertt): ConvertType. (line 6) * Convex Hull: Polygons. (line 57) * Convolution: Convolve. (line 6) * Convolution <1>: Convolution process. (line 24) * Convolution <2>: PSF. (line 17) * Convolution kernel: FITS arrays. (line 52) * Cookbook: Tutorials. (line 6) * Coordinate transformation: Warping basics. (line 6) * Coordinates, homogeneous: Warping basics. (line 63) * Copyright: Your rights. (line 12) * Correlated noise: Quantifying measurement limits. (line 206) * Correlation: Convolution process. (line 24) * Cosmic ray removal: Sky value definition. (line 24) * Cosmic rays: Convolve. (line 25) * Cosmic rays <1>: Warp. (line 36) * Cosmic rays <2>: Sigma clipping. (line 22) * Cosmic rays <3>: Sky value definition. (line 17) * Cosmic rays <4>: Quantifying signal in a tile. (line 63) * COSMOS survey: Crop. (line 13) * Counting error: Photon counting noise. (line 6) * Counting from zero.: Options. (line 110) * Counts: Flux Brightness and magnitude. (line 6) * Counts <1>: Instrumental noise. (line 19) * CPPFLAGS: Known issues. (line 46) * CPPFLAGS <1>: Headers. (line 153) * CPU threads: Multi-threaded operations. (line 6) * CPU threads <1>: MakeProfiles profile settings. (line 161) * CPU threads, number: Configuration files. (line 15) * CPU threads, set number: Operating mode options. (line 216) * CPU, using all threads: Multi-threaded operations. (line 6) * Crop (astcrop): Crop. (line 6) * Crop a given section of image: Crop section syntax. (line 6) * Crop part of image: Crop. (line 6) * Crop section format: Crop section syntax. (line 25) * Cumulative Frequency Plot: Histogram and Cumulative Frequency Plot. (line 31) * Customize --help output: --help. (line 55) * Customize executable names: Executable names. (line 28) * Customizing installation: Configuring. (line 12) * Data: Quantifying signal in a tile. (line 6) * Data format conversion: ConvertType. (line 6) * Data structures: Headers. (line 89) * Data type: Generic data container. (line 69) * Data’s depth: Quantifying measurement limits. (line 51) * Dataset: binary: Binary datasets. (line 6) * de Vaucouleur profile: Galaxies. (line 11) * Debug: Invoking astbuildprog. (line 113) * Debugging: Building and debugging. (line 39) * Default executable search directory: Installation directory. (line 70) * Default library search directory: Installation directory. (line 159) * Default option values: Options. (line 92) * Default option values <1>: Configuration files. (line 6) * Define section to crop: Crop section syntax. (line 12) * Dependencies, Gnuastro: Mandatory dependencies. (line 6) * Depth: Quantifying measurement limits. (line 6) * Detached threads: Gnuastro's thread related functions. (line 64) * Detection: Convolve. (line 25) * Detection <1>: NoiseChisel. (line 6) * Detections false: Quantifying measurement limits. (line 123) * Detector: Resampling. (line 6) * Development packages: Known issues. (line 11) * Diffraction limited: PSF. (line 6) * Dilation: Binary datasets. (line 92) * Directory, install: Installation directory. (line 144) * Discrete Fourier transform: Invoking astconvolve. (line 46) * Distortion, optical: Warp. (line 47) * Distribution mode: Sky value misconceptions. (line 20) * Douglas Rushkoff: Science and its tools. (line 50) * Drizzle: Resampling. (line 48) * Dynamic libraries: Installation directory. (line 189) * Dynamic linking: Linking. (line 55) * Edges, image: Resampling. (line 32) * Edwin Hubble: Hubble visually checks and classifies his catalog. (line 6) * Effective radius: Galaxies. (line 11) * Efficient use of CPU threads: A note on threads. (line 6) * Ellipse: Defining an ellipse. (line 6) * Elliptical distance: Defining an ellipse. (line 28) * Elliptical galaxies: Hubble visually checks and classifies his catalog. (line 113) * Emacs buffers: Coding conventions. (line 41) * Encapsulated PostScript: Recognized file formats. (line 41) * Environment: Installation directory. (line 50) * Environment variable, HOME: Installation directory. (line 63) * Environment variables: Installation directory. (line 37) * Environment variables <1>: Installation directory. (line 50) * Environment variables <2>: Generating random numbers. (line 26) * eog: Hubble visually checks and classifies his catalog. (line 100) * EPS: Recognized file formats. (line 41) * Erosion: NoiseChisel. (line 45) * Erosion <1>: Detection options. (line 100) * Erosion <2>: Binary datasets. (line 77) * Error, floating point round-off: Invoking astconvolve. (line 82) * etc: Configuration files. (line 6) * Exact area resampling: Resampling. (line 48) * Executable names: Executable names. (line 6) * Extreme Deep Field survey: General program usage tutorial. (line 6) * Eye of GNOME: Hubble visually checks and classifies his catalog. (line 100) * False detections: Quantifying measurement limits. (line 123) * Feature request: Gnuastro project webpage. (line 6) * Feature requests: Suggest new feature. (line 6) * File I/O: Configure and build in RAM. (line 6) * File operations: Data containers. (line 6) * File system Hierarchy Standard: Configuration files. (line 6) * file systems, tmpfs: Configure and build in RAM. (line 23) * first-in-first-out: Linked lists. (line 47) * first-in-first-out <1>: FITS header keywords. (line 23) * FITS: FITS files. (line 6) * FITS image viewer: SAO ds9. (line 6) * FITS standard: CFITSIO. (line 6) * FITS standard <1>: Invoking astwarp. (line 66) * FITS standard <2>: Generic data container. (line 77) * FITS Tables: Recognized table formats. (line 19) * Fitting: Modeling and fittings. (line 6) * Flip coordinates: Warping basics. (line 30) * Floating point error: Measuring elliptical parameters. (line 47) * Floating point round-off error: Invoking astconvolve. (line 82) * FLT: Options. (line 38) * Flux: Flux Brightness and magnitude. (line 13) * Flux to magnitude conversion: Flux Brightness and magnitude. (line 28) * Foreground pixels: Detection options. (line 35) * FORTRAN: Generic data container. (line 77) * Fourier spectrum: Invoking astconvolve. (line 68) * Free software: Your rights. (line 12) * Free Software Foundation: Contributing to Gnuastro. (line 16) * FSF: Contributing to Gnuastro. (line 16) * Full Width at Half Maximum: PSF. (line 27) * Function gradient over pixel area: Sampling from a function. (line 16) * Function groups: Coding conventions. (line 153) * Functions for user interface: Mandatory source code files. (line 102) * FWHM: PSF. (line 27) * Gain: Flux Brightness and magnitude. (line 6) * Gain <1>: Instrumental noise. (line 19) * Galaxy profiles: Galaxies. (line 6) * Galileo, G.: Science and its tools. (line 104) * Gaussian: Invoking astnoisechisel. (line 23) * Gaussian <1>: Invoking astmkcatalog. (line 31) * Gaussian distribution: Quantifying signal in a tile. (line 6) * Gaussian distribution <1>: PSF. (line 37) * Gaussian FWHM: PSF. (line 50) * GCC: Summary and example on libraries. (line 30) * Gedit: Hubble visually checks and classifies his catalog. (line 143) * Gedit <1>: Sufi simulates a detection. (line 335) * General file operations: Data containers. (line 6) * Generalized de Vaucouleur profile: Galaxies. (line 6) * Git: Optional dependencies. (line 52) * Git <1>: Version controlled source. (line 6) * Git <2>: Table input output. (line 141) * Git <3>: Git wrappers. (line 6) * GNOME: General program usage tutorial. (line 661) * GNOME 2: Viewing multiextension FITS images. (line 58) * GNOME 3: Command-line interface. (line 18) * GNOME 3 <1>: Viewing multiextension FITS images. (line 30) * GNU Astronomy Utilities (Gnuastro): Introduction. (line 6) * GNU Autoconf: Bootstrapping dependencies. (line 61) * GNU Autoconf <1>: Bootstrapping. (line 63) * GNU Autoconf <2>: Synchronizing. (line 21) * GNU Autoconf <3>: Configuring. (line 21) * GNU Autoconf <4>: Building and debugging. (line 6) * GNU Autoconf Archive: Bootstrapping dependencies. (line 65) * GNU Autoconf Archive <1>: Bootstrapping. (line 6) * GNU Automake: Bootstrapping dependencies. (line 55) * GNU Automake <1>: Bootstrapping. (line 63) * GNU Automake <2>: Building and debugging. (line 6) * GNU AWK: General program usage tutorial. (line 272) * GNU AWK <1>: General program usage tutorial. (line 902) * GNU AWK <2>: Table. (line 31) * GNU AWK <3>: Invoking asttable. (line 35) * GNU AWK <4>: Invoking asttable. (line 76) * GNU AWK <5>: Invoking astarithmetic. (line 141) * GNU AWK <6>: Invoking aststatistics. (line 156) * GNU AWK <7>: Table input output. (line 120) * GNU Bash: Command-line interface. (line 52) * GNU Bash <1>: Hubble visually checks and classifies his catalog. (line 113) * GNU Bash <2>: Installation directory. (line 110) * GNU Bash <3>: Installation directory. (line 120) * GNU Bash <4>: Keyword manipulation. (line 80) * GNU Bash <5>: Program design philosophy. (line 27) * GNU Binutils: Linking. (line 16) * GNU build system: Mandatory dependencies. (line 6) * GNU build system <1>: Bootstrapping. (line 63) * GNU build system <2>: Installation directory. (line 144) * GNU build system <3>: Configure and build in RAM. (line 34) * GNU build system <4>: Headers. (line 153) * GNU build system <5>: Headers. (line 162) * GNU build system <6>: Building and debugging. (line 6) * GNU C library: New to GNU/Linux?. (line 19) * GNU C library <1>: Bootstrapping dependencies. (line 28) * GNU C library <2>: Bootstrapping. (line 63) * GNU C library <3>: Gnuastro configure options. (line 27) * GNU C library <4>: Configure and build in RAM. (line 34) * GNU C library <5>: Info. (line 28) * GNU C library <6>: Adding new columns to MakeCatalog. (line 53) * GNU C library <7>: Linking. (line 101) * GNU C library <8>: Coding conventions. (line 83) * GNU C library <9>: Mandatory source code files. (line 69) * GNU coding standards: Introduction. (line 6) * GNU coding standards <1>: Coding conventions. (line 6) * GNU coding standards <2>: Coding conventions. (line 132) * GNU Compiler Collection: New to GNU/Linux?. (line 19) * GNU Compiler Collection <1>: Summary and example on libraries. (line 30) * GNU Compiler Collection <2>: Invoking astbuildprog. (line 96) * GNU Compiler Collection <3>: Coding conventions. (line 34) * GNU Coreutils: Multi-threaded operations. (line 6) * GNU Coreutils <1>: Program design philosophy. (line 18) * GNU CPP: Invoking astbuildprog. (line 57) * GNU Emacs: Command-line interface. (line 75) * GNU Emacs <1>: Hubble visually checks and classifies his catalog. (line 113) * GNU Emacs <2>: Hubble visually checks and classifies his catalog. (line 143) * GNU Emacs <3>: Sufi simulates a detection. (line 335) * GNU Emacs <4>: Configure and build in RAM. (line 50) * GNU Emacs <5>: Info. (line 28) * GNU Emacs <6>: Coding conventions. (line 146) * GNU Emacs <7>: Coding conventions. (line 153) * GNU Emacs <8>: Coding conventions. (line 192) * GNU Free Documentation License: Your rights. (line 40) * GNU Free Documentation License <1>: GNU Free Doc. License. (line 6) * GNU General Public License: Your rights. (line 40) * GNU Grep: General program usage tutorial. (line 628) * GNU Grep <1>: General program usage tutorial. (line 638) * GNU Grep <2>: --help. (line 47) * GNU Grep <3>: Keyword manipulation. (line 46) * GNU Grep <4>: CosmicCalculator specific calculations. (line 32) * GNU help2man: Bootstrapping dependencies. (line 77) * GNU Info: General program usage tutorial. (line 47) * GNU Info <1>: Info. (line 6) * GNU Libtool: Optional dependencies. (line 23) * GNU Libtool <1>: Bootstrapping dependencies. (line 71) * GNU Libtool <2>: Bootstrapping. (line 63) * GNU Libtool <3>: Known issues. (line 76) * GNU Libtool <4>: Linking. (line 6) * GNU Libtool <5>: Linking. (line 55) * GNU Libtool <6>: Linking. (line 130) * GNU Libtool <7>: BuildProgram. (line 15) * GNU Libtool <8>: Invoking astbuildprog. (line 75) * GNU Libtool <9>: Building and debugging. (line 6) * GNU Make: How to run simultaneous operations. (line 57) * GNU Make <1>: Invoking astbuildprog. (line 49) * GNU Parallel: Hubble visually checks and classifies his catalog. (line 86) * GNU Parallel <1>: How to run simultaneous operations. (line 15) * GNU Portability Library (Gnulib): Bootstrapping dependencies. (line 28) * GNU Portability Library (Gnulib) <1>: Bootstrapping. (line 6) * GNU Portability Library (Gnulib) <2>: Gnuastro configure options. (line 27) * GNU Portability Library (Gnulib) <3>: Known issues. (line 34) * GNU Portability Library (Gnulib) <4>: Coding conventions. (line 83) * GNU Savannah: Gnuastro project webpage. (line 6) * GNU Scientific Library: GNU Scientific Library. (line 6) * GNU Scientific Library <1>: Generating random numbers. (line 26) * GNU Scientific Library <2>: Permutations. (line 16) * GNU software documentation: Info. (line 22) * GNU style options: Options. (line 6) * GNU Tar: Quick start. (line 6) * GNU Tar <1>: Quick start. (line 15) * GNU Texinfo: Your rights. (line 6) * GNU Texinfo <1>: Bootstrapping. (line 63) * GNU Texinfo <2>: A4 print book. (line 13) * GNU Texinfo <3>: Known issues. (line 71) * GNU/Linux: New to GNU/Linux?. (line 19) * Gnuastro coding convention: Coding conventions. (line 6) * Gnuastro common options: Common options. (line 6) * Gnuastro major version number: GNU Astronomy Utilities 1.0. (line 6) * Gnuastro program structure convention: Program source. (line 6) * Gnuastro project page: Report a bug. (line 84) * Gnuastro test scripts: Test scripts. (line 6) * Gnulib: Program design philosophy. (line 6) * Gnulib: GNU Portability Library: Bootstrapping dependencies. (line 28) * Gnulib: GNU Portability Library <1>: Bootstrapping. (line 6) * Gnulib: GNU Portability Library <2>: Gnuastro configure options. (line 27) * Gnulib: GNU Portability Library <3>: Known issues. (line 34) * Gnulib: GNU Portability Library <4>: Coding conventions. (line 83) * GPL Ghostscript: Optional dependencies. (line 10) * GPL Ghostscript <1>: Optional dependencies. (line 71) * GPL Ghostscript <2>: Known issues. (line 62) * GPL Ghostscript <3>: Recognized file formats. (line 86) * Gradient over pixel area: Sampling from a function. (line 16) * Gradients in background flux: Photon counting noise. (line 61) * Graphic user interface: Command-line interface. (line 6) * Gravitational lensing: Warp. (line 13) * Grayscale: Color. (line 6) * Groups of similar functions: Coding conventions. (line 153) * GUI: graphic user interface: Command-line interface. (line 6) * GUI: repeating operations: Command-line interface. (line 43) * Gzip: Quick start. (line 15) * Gzip <1>: Release tarball. (line 37) * Gérard de Vaucouleurs: Galaxies. (line 11) * Halted program: Report a bug. (line 6) * HDD: Configure and build in RAM. (line 12) * HDU: Arguments and options. (line 42) * HDU <1>: Input output options. (line 9) * HDU <2>: Invoking astfits. (line 38) * Header data unit: Arguments and options. (line 42) * Header data unit <1>: Input output options. (line 9) * Header file: Coding conventions. (line 67) * Help: Getting help. (line 6) * help-gnuastro mailing list: help-gnuastro mailing list. (line 6) * help-gnuastro@gnu.org: help-gnuastro mailing list. (line 13) * Hexadecimal encoding: Invoking astconvertt. (line 106) * Histogram: Histogram and Cumulative Frequency Plot. (line 6) * Histogram <1>: Sky value misconceptions. (line 20) * HOME: Installation directory. (line 63) * HOME/.local/: Installation directory. (line 63) * Homogeneous coordinates: Warping basics. (line 63) * Homography: Warping basics. (line 93) * HST: General program usage tutorial. (line 6) * Hubble Space Telescope: General program usage tutorial. (line 6) * Hubble Space Telescope <1>: Tessellation. (line 54) * Hubble Space Telescope <2>: Crop. (line 13) * Hubble Space Telescope <3>: Warp. (line 53) * Hubble Space Telescope <4>: Warping basics. (line 51) * Hyper Suprime-Cam: Tessellation. (line 54) * Image: Color. (line 6) * Image blurring: PSF. (line 17) * Image edges: Resampling. (line 32) * Image format conversion: ConvertType. (line 6) * Image mosaic: Crop. (line 13) * Image mosaic <1>: Warp. (line 29) * Image noise: Noise basics. (line 6) * Image tiles: Crop. (line 13) * Image transformations: MakeProfiles. (line 41) * ImageMagick: Bootstrapping dependencies. (line 113) * Imaging surveys: Crop. (line 13) * Immediate neighbors: Binary datasets. (line 13) * Inconsistent results: Report a bug. (line 6) * Individual profiles: MakeProfiles output dataset. (line 125) * info-gnuastro@gnu.org: Synchronizing. (line 21) * INFOPATH: Installation directory. (line 159) * Input/Output, file: Configure and build in RAM. (line 6) * Inside-out construction: Defining an ellipse. (line 35) * Inside-out construction <1>: Sampling from a function. (line 44) * Install directory: Installation directory. (line 144) * Install with no super-user access: Installation directory. (line 6) * Installation: Installation. (line 6) * Installation, customizing: Configuring. (line 12) * Installed help methods: Getting help. (line 22) * Instrumental noise: Instrumental noise. (line 6) * INT: Options. (line 35) * Integer, Signed: Numeric data types. (line 15) * Integration over pixel: Sampling from a function. (line 16) * Integration to infinity: Profile magnitude. (line 15) * Internal default value: Configuration files. (line 15) * Internally stored option value: Multi-threaded operations. (line 16) * Interpolation: Resampling. (line 21) * Interpolation, bi-linear: Resampling. (line 21) * Interpolation, bicubic: Resampling. (line 21) * Intervals, histogram: Histogram and Cumulative Frequency Plot. (line 21) * ISO C90: Why C. (line 15) * Issue: Gnuastro project webpage. (line 6) * Jaynes E. T.: Science and its tools. (line 152) * JPEG compression quality: Invoking astconvertt. (line 122) * JPEG format: Optional dependencies. (line 60) * JPEG format <1>: Recognized file formats. (line 23) * Ken Thomson: Science and its tools. (line 115) * Kernel, convolution: Convolve. (line 6) * Kernel, convolution <1>: FITS arrays. (line 52) * Kernighan, Brian: Why C. (line 15) * Labeling: NoiseChisel. (line 6) * Large astronomical images: Crop. (line 6) * last-in-first-out: Linked lists. (line 47) * last-in-first-out <1>: FITS header keywords. (line 23) * LaTeX: Bootstrapping dependencies. (line 81) * LaTeX <1>: Recognized file formats. (line 60) * LaTeX <2>: Program design philosophy. (line 27) * Lawrence Livermore National Laboratory: Multithreaded programming. (line 20) * LDFLAGS: Known issues. (line 24) * LD_LIBRARY_PATH: Installation directory. (line 159) * LD_LIBRARY_PATH <1>: Known issues. (line 52) * LD_LIBRARY_PATH <2>: PGPLOT. (line 62) * Learning GNU Info: Info. (line 22) * Lensing simulations: MakeProfiles. (line 41) * less: --help. (line 33) * libgit2: Optional dependencies. (line 52) * libgit2 <1>: Git wrappers. (line 6) * libjpeg: Optional dependencies. (line 60) * Library search directory: Installation directory. (line 159) * Library: shared: Linking. (line 55) * Limit, object/clump magnitude: Quantifying measurement limits. (line 6) * Linear spatial filtering: Convolution process. (line 16) * Linked list: Linked lists. (line 6) * Linked list <1>: FITS header keywords. (line 23) * Linking: dynamic: Linking. (line 55) * Linking: Static: Linking. (line 31) * Linux: New to GNU/Linux?. (line 19) * Linux kernel: Configure and build in RAM. (line 34) * Long option abbreviation: Options. (line 64) * Long outputs: --help. (line 22) * Lord Kelvin: Science and its tools. (line 128) * Low level programming: Why C. (line 89) * Luminosity: Flux Brightness and magnitude. (line 13) * Lzip: Quick start. (line 15) * Lzip <1>: Release tarball. (line 37) * Macro: Headers. (line 89) * Magnitude zero-point: Flux Brightness and magnitude. (line 28) * Magnitude, object/clump detection limit: Quantifying measurement limits. (line 6) * Magnitude, upper limit: Quantifying measurement limits. (line 192) * Magnitudes from flux: Flux Brightness and magnitude. (line 28) * Mailing list archives: Report a bug. (line 78) * Mailing list archives <1>: help-gnuastro mailing list. (line 13) * Mailing list: bug-gnuastro: Report a bug. (line 78) * Mailing list: bug-gnuastro <1>: Gnuastro project webpage. (line 19) * Mailing list: gnuastro-commits: Developing mailing lists. (line 37) * Mailing list: gnuastro-commits <1>: Commit guidelines. (line 34) * Mailing list: gnuastro-commits <2>: Commit guidelines. (line 50) * Mailing list: gnuastro-commits <3>: Commit guidelines. (line 72) * Mailing list: gnuastro-devel: Gnuastro project webpage. (line 58) * Mailing list: gnuastro-devel <1>: Developing mailing lists. (line 13) * Mailing list: help-gnuastro: help-gnuastro mailing list. (line 6) * Mailing list: info-gnuastro: Version numbering. (line 6) * Mailing list: info-gnuastro <1>: Announcements. (line 6) * Mailing list: info-gnuastro <2>: Synchronizing. (line 21) * main function: Mandatory source code files. (line 19) * Main parameters C structure: Mandatory source code files. (line 30) * main.c: Mandatory source code files. (line 18) * main.h: Mandatory source code files. (line 29) * Major version number: Version numbering. (line 6) * Make: How to run simultaneous operations. (line 38) * make check: Tests. (line 6) * MakeProfiles (astmkprof): MakeProfiles. (line 6) * Making a distribution package: Developer's checklist. (line 24) * Making profiles pixel by pixel: Defining an ellipse. (line 35) * Man pages: Man pages. (line 6) * Management hub: Gnuastro project webpage. (line 6) * Mandatory arguments: Arguments and options. (line 24) * Mandatory arguments <1>: --usage. (line 6) * MANPATH: Installation directory. (line 159) * Mathematical morphology: Binary datasets. (line 77) * Matplotlib, Python: Program design philosophy. (line 27) * Matplotlib, Python <1>: PGPLOT. (line 14) * Matrix: Warping basics. (line 17) * Matrix multiplication: Merging multiple warpings. (line 6) * Matrix, adjacency: Binary datasets. (line 143) * Maximum: Statistical operations. (line 51) * Mean: Statistical operations. (line 64) * Median: Quantifying signal in a tile. (line 28) * Median <1>: Statistical operations. (line 89) * Meta-data: Fits. (line 20) * Metacharacters: Command-line. (line 12) * Metacharacters on the command-line: Arguments and options. (line 35) * Michelson, Albert. A.: Science and its tools. (line 134) * Minimum: Statistical operations. (line 44) * Minor version number: Version numbering. (line 6) * Mixing pixel values: Convolve. (line 25) * Mixing pixel values <1>: Resampling. (line 6) * mock.fits: Tests. (line 6) * Mode: Quantifying signal in a tile. (line 28) * Mode of a distribution: Sky value misconceptions. (line 20) * Modeling: Modeling and fittings. (line 6) * Modeling stars: Stars. (line 6) * Modifying print book: A4 print book. (line 6) * Modularity: Review of library fundamentals. (line 18) * Moffat beta: PSF. (line 59) * Moffat function: PSF. (line 53) * Moffat FWHM: PSF. (line 64) * Moments: Measuring elliptical parameters. (line 15) * Monte carlo integration: Sampling from a function. (line 26) * Mosaicing: Crop. (line 13) * Mosaicing <1>: Warp. (line 29) * Multi-threaded programs: Multi-threaded operations. (line 6) * Multiextension FITS: Viewing multiextension FITS images. (line 6) * Multiple file opening, reentrancy: CFITSIO. (line 13) * Multiplication, Matrix: Warping basics. (line 17) * Multiplication, matrix: Merging multiple warpings. (line 6) * Multithreaded programming: Multithreaded programming. (line 6) * Möbius, August. F.: Warping basics. (line 63) * Names of executables: Executable names. (line 6) * Names, customize: Executable names. (line 28) * Names, programs: Naming convention. (line 6) * NaN: Gnuastro text table format. (line 73) * NaN <1>: Arithmetic operators. (line 98) * NaN <2>: Invoking astwarp. (line 174) * NaN <3>: Invoking aststatistics. (line 435) * NaN <4>: Detection options. (line 87) * NaN <5>: MakeCatalog general settings. (line 46) * NaN <6>: Library blank values. (line 17) * NaN <7>: Library blank values. (line 29) * NaN <8>: Library blank values. (line 65) * NaN <9>: Library blank values. (line 69) * NaN <10>: FITS arrays. (line 52) * Navigating source files: Program source. (line 6) * Necessary parameters: Configuration files. (line 6) * Neighborhood: Convolve. (line 6) * Neighbors, immediate: Binary datasets. (line 13) * No access to super-user install: Installation directory. (line 6) * Noise: Quantifying signal in a tile. (line 6) * Noise <1>: MakeNoise. (line 6) * Noise <2>: Noise basics. (line 6) * Noise simulation: Photon counting noise. (line 67) * Noise, instrumental: Instrumental noise. (line 6) * Non-commutative operations: Merging multiple warpings. (line 6) * Normalizing histogram: Histogram and Cumulative Frequency Plot. (line 21) * nproc: Multi-threaded operations. (line 6) * Number: Statistical operations. (line 38) * Number of CPU threads to use: Operating mode options. (line 216) * Number of CPU threads to use <1>: Configuration files. (line 15) * Number of threads available: Multi-threaded operations. (line 16) * Number, version: Version numbering. (line 6) * Numbers, complex: Invoking astconvolve. (line 68) * Numbers, psudo-random: Generating random numbers. (line 14) * Numbers, random: Generating random numbers. (line 6) * Object magnitude limit: Quantifying measurement limits. (line 6) * Object oriented programming: Why C. (line 27) * On/Off options: Options. (line 25) * Online help: Getting help. (line 13) * Opening (Mathematical morphology): Binary datasets. (line 107) * Opening multiextension FITS: Viewing multiextension FITS images. (line 6) * OpenMP: Multithreaded programming. (line 32) * Operations on files: Data containers. (line 6) * Operations, non-commutative: Merging multiple warpings. (line 6) * Operator, structure de-reference: Mandatory source code files. (line 56) * Optical distortion: Warp. (line 47) * Optimization: Invoking astbuildprog. (line 96) * Optimization <1>: Building and debugging. (line 39) * Optimization flag: Coding conventions. (line 34) * Option values: Options. (line 47) * Optional and mandatory tokens: --usage. (line 6) * Options: Invoking astarithmetic. (line 127) * Options common to all programs: Common options. (line 6) * Options to programs: Arguments and options. (line 6) * Options, abbreviation: Options. (line 64) * Options, GNU style: Options. (line 6) * Options, on/off: Options. (line 25) * Options, repeated: Options. (line 72) * Options, short (-) and long (--): Options. (line 6) * Order in search directory: Installation directory. (line 204) * Output file names, automatic: Automatic output. (line 6) * Output FITS headers: Output headers. (line 6) * Output, wrong: Report a bug. (line 6) * Oversample: Sufi simulates a detection. (line 169) * Oversampling: Oversampling. (line 6) * p: Mandatory source code files. (line 45) * Package managers: Mandatory dependencies. (line 13) * Paper size, A4: A4 print book. (line 6) * Paper size, US letter: A4 print book. (line 6) * Parametric PSFs: PSF. (line 27) * PATH: Installation directory. (line 70) * PDF: Recognized file formats. (line 49) * permutation: Permutations. (line 6) * PGFplots in TeX or LaTeX: Program design philosophy. (line 27) * PGFplots in TeX or LaTeX <1>: PGPLOT. (line 14) * PGPLOT: PGPLOT. (line 6) * Phase angle: Invoking astconvolve. (line 68) * photo-electrons: Sky value definition. (line 48) * Photoelectrons: Resampling. (line 6) * Photometry, aperture: MakeCatalog. (line 42) * Photometry, aperture <1>: Invoking astmkcatalog. (line 53) * Photon counting noise: Photon counting noise. (line 6) * Picture element: Resampling. (line 6) * Pipe: --help. (line 33) * Pixel: Resampling. (line 6) * Pixel by pixel making of profiles: Defining an ellipse. (line 35) * Pixel mixing: Convolve. (line 25) * Pixel mixing <1>: Resampling. (line 6) * Pixel mixing <2>: Resampling. (line 48) * Pixelated graphics: Recognized file formats. (line 23) * Pixels: Color. (line 6) * Plain text: Recognized file formats. (line 100) * Plotting directly in C: PGPLOT. (line 6) * PNG standard: Color. (line 40) * Point pixels: Resampling. (line 21) * Point source: PSF. (line 6) * Point Spread Function: PSF. (line 6) * Poisson distribution: Photon counting noise. (line 23) * Portable Document format: Recognized file formats. (line 49) * Position angle: Measuring elliptical parameters. (line 132) * Position angle <1>: Defining an ellipse. (line 6) * POSIX threads: Implementation of pthread_barrier. (line 6) * POSIX Threads: Gnuastro's thread related functions. (line 6) * POSIX threads library: Multithreaded programming. (line 20) * Post-fix notation: Reverse polish notation. (line 6) * Postage stamp images: Crop. (line 6) * PostScript: Recognized file formats. (line 41) * PostScript vs. PDF: Recognized file formats. (line 49) * Pre-Processor: Headers. (line 6) * Pre-processor macros: Headers. (line 89) * Precedence, configuration files: Configuration file precedence. (line 6) * prefix/etc/: System wide. (line 6) * Primary colors: Color. (line 6) * printf: Table input output. (line 31) * Probability density function: Histogram and Cumulative Frequency Plot. (line 21) * Probability density function <1>: Sky value misconceptions. (line 20) * Probability density function <2>: Photon counting noise. (line 16) * Profiles, galaxies: Galaxies. (line 6) * progname.c, progname.h: Mandatory source code files. (line 122) * prognameparams: Mandatory source code files. (line 30) * Program crashing: Report a bug. (line 6) * Program names: Naming convention. (line 6) * Program structure convention: Program source. (line 6) * Programming, low level: Why C. (line 89) * ProgramName: Naming convention. (line 15) * Projective transformation: Warping basics. (line 93) * Proper distance: Distance on a 2D curved space. (line 142) * PSF: PSF. (line 6) * PSF image size: PSF. (line 17) * PSF over-sample: Oversampling. (line 12) * PSF width: PSF. (line 27) * PSF, Moffat compared Gaussian: PSF. (line 66) * Psudo-random numbers: Generating random numbers. (line 14) * pthread: Multi-threaded operations. (line 6) * pthread_barrier: Implementation of pthread_barrier. (line 6) * Public domain: Your rights. (line 12) * Purity: Quantifying measurement limits. (line 123) * Puzzle solving scientist: Science and its tools. (line 141) * Python Matplotlib: Program design philosophy. (line 27) * Python Matplotlib <1>: PGPLOT. (line 14) * Python programming language: Why C. (line 6) * Quality of compression in JPEG: Invoking astconvertt. (line 122) * Quantile: Invoking aststatistics. (line 98) * Quantile <1>: Detection options. (line 35) * Quantile <2>: Statistical operations. (line 103) * Radial profile on ellipse: Defining an ellipse. (line 15) * Radius, effective: Galaxies. (line 11) * Random numbers: Generating random numbers. (line 6) * Raster graphics: Recognized file formats. (line 23) * Readout noise: Instrumental noise. (line 6) * Redirection of output: --help. (line 22) * Redirection of output <1>: --help. (line 42) * Reentrancy, multiple file opening: CFITSIO. (line 13) * Remembering options: Getting help. (line 6) * Remote operation: Command-line interface. (line 91) * Removing ast from executables: Executable names. (line 70) * Repeated options: Options. (line 72) * Report a bug: Gnuastro project webpage. (line 6) * Reproducibility: Upper-limit magnitude settings. (line 14) * Reproducible bug reports: Report a bug. (line 64) * Reproducible results: Command-line interface. (line 52) * Resampling: Resampling. (line 6) * Resource heavy operations: Command-line interface. (line 83) * restrict: Generic data container. (line 60) * Results, wrong: Report a bug. (line 6) * Reverse Polish Notation: Reverse polish notation. (line 6) * RGB: Color. (line 6) * Ritchie, Dennis: Why C. (line 15) * Root access, not possible: Installation directory. (line 6) * Root parameter structure: Mandatory source code files. (line 30) * Rotation of coordinates: Warping basics. (line 17) * Round-off error: Invoking astconvolve. (line 82) * Round-off error <1>: Polygons. (line 21) * Sampling: Resampling. (line 6) * Sampling <1>: Sampling from a function. (line 6) * SAO ds9: Crop options. (line 122) * SAO ds9 <1>: SAO ds9. (line 6) * Save output to file: --help. (line 42) * Saving binary image: Recognized file formats. (line 72) * Scaling: Warping basics. (line 6) * Scientist, puzzle solver: Science and its tools. (line 141) * Scripts, startup: Installation directory. (line 110) * Scroll command-line: --help. (line 27) * Search directory for executables: Installation directory. (line 70) * Search directory order: Installation directory. (line 204) * Searching text: --help. (line 47) * Second moment: Measuring elliptical parameters. (line 25) * Section of an image: Crop. (line 6) * Secure shell: Command-line interface. (line 91) * SED, stream editor: Executable names. (line 60) * Seed, psudo-random numbers: Generating random numbers. (line 14) * Segmentation: NoiseChisel. (line 6) * Separating tokens on the command-line: Command-line. (line 12) * Setting output file names automatically: Automatic output. (line 6) * Setting PATH: Installation directory. (line 70) * Shared library: Linking. (line 55) * Shared library versioning: Linking. (line 115) * Shear: Warping basics. (line 38) * Shell: Command-line interface. (line 6) * Shell auto-complete: Executable names. (line 14) * Shell script: GNU Astronomy Utilities 1.0. (line 12) * Shell variables: Installation directory. (line 37) * and : --help. (line 27) * sigma-clipping: Sky value misconceptions. (line 27) * Signal: Quantifying signal in a tile. (line 6) * Signal to noise ratio: Warp. (line 20) * Signal to noise ratio <1>: Resampling. (line 21) * Signed integer: Numeric data types. (line 15) * Simulating noise: Photon counting noise. (line 67) * Simultaneous multithreading: Multi-threaded operations. (line 6) * Single channel CMYK: Color. (line 40) * size_t: Ordered list of size_t. (line 16) * size_t <1>: Doubly linked ordered list of size_t. (line 14) * Skewed Poisson distribution: Photon counting noise. (line 26) * Sky: Sky value. (line 6) * Sky value: Sky value definition. (line 6) * Sky value <1>: Sky value definition. (line 34) * Sky value <2>: Photon counting noise. (line 46) * Software bug: Report a bug. (line 6) * Source code building: Mandatory dependencies. (line 13) * Source code compilation: Mandatory dependencies. (line 13) * Source file navigation: Program source. (line 6) * Source tree: Test scripts. (line 25) * Source, uncompress: Quick start. (line 6) * Spectrum, Fourier: Invoking astconvolve. (line 68) * Spiral galaxies: Hubble visually checks and classifies his catalog. (line 113) * Spread of a point source: PSF. (line 6) * SSD: Configure and build in RAM. (line 12) * SSH: Command-line interface. (line 91) * Standard deviation: Measuring elliptical parameters. (line 35) * Standard deviation <1>: Statistical operations. (line 70) * Standard, FITS: Generic data container. (line 77) * Stars, modeling: Stars. (line 6) * Startup scripts: Installation directory. (line 110) * Startup scripts <1>: Generating random numbers. (line 62) * Static document description format: Recognized file formats. (line 49) * Static linking: Linking. (line 31) * Statistical analysis: Science and its tools. (line 32) * Stitch multiple images: Crop. (line 20) * STR: Options. (line 43) * Stream editor, SED: Executable names. (line 60) * Stroustrup, Bjarne: Science and its tools. (line 115) * Stroustrup, Bjarne <1>: Why C. (line 15) * Structure de-reference operator: Mandatory source code files. (line 56) * Structures: Headers. (line 89) * Subaru Telescope: Tessellation. (line 54) * Submit new tracker item: Report a bug. (line 84) * Suffixes, astronomical data: Arguments. (line 22) * Suffixes, EPS format: Recognized file formats. (line 81) * Suffixes, JPEG images: Recognized file formats. (line 36) * Suffixes, PDF format: Recognized file formats. (line 86) * Suffixes, plain text: Recognized file formats. (line 100) * Sum: Statistical operations. (line 58) * Sum for total flux: Profile magnitude. (line 6) * Superuser, not possible: Installation directory. (line 6) * Support request manager: Report a bug. (line 84) * Surface brightness: Quantifying measurement limits. (line 29) * Symbolic link: Executable names. (line 38) * System Cache: A note on threads. (line 29) * System wide configuration files: System wide. (line 6) * Sérsic index: Galaxies. (line 11) * Sérsic profile: Galaxies. (line 6) * Sérsic, J. L.: Galaxies. (line 11) * Tables FITS: Recognized table formats. (line 19) * Tabs are evil: Coding conventions. (line 151) * Task tracker: Report a bug. (line 97) * Test: Quick start. (line 6) * Test scripts: Test scripts. (line 6) * Tests, only one passes: Known issues. (line 52) * Tests, running: Tests. (line 6) * tests/during-dev.sh: Building and debugging. (line 23) * TeX: Known issues. (line 71) * TeX <1>: Recognized file formats. (line 60) * TeX Live: Bootstrapping dependencies. (line 81) * Threads, CPU: MakeProfiles profile settings. (line 161) * Thresholding: Binary datasets. (line 6) * Tilde expansion as option values: Options. (line 101) * tmpfs file system: Configure and build in RAM. (line 23) * tmpfs-config-make: Building and debugging. (line 18) * tmpfs-config-make <1>: Test scripts. (line 25) * Token separation: Command-line. (line 12) * Top processing source file: Mandatory source code files. (line 123) * Top root structure: Mandatory source code files. (line 30) * Tracker: Report a bug. (line 97) * Tracker <1>: Gnuastro project webpage. (line 6) * Trailing space: Coding conventions. (line 146) * Transform image: MakeProfiles. (line 41) * Transformation, affine: Warping basics. (line 85) * Transformation, projective: Warping basics. (line 93) * Truncation radius: Profile magnitude. (line 6) * Tutorial: Tutorials. (line 6) * Type: Numeric data types. (line 6) * ui.c: Mandatory source code files. (line 101) * ui.h: Mandatory source code files. (line 85) * Uncompress source: Quick start. (line 6) * Undetected objects: Photon counting noise. (line 46) * Unsigned integer: Numeric data types. (line 15) * Upper limit magnitude: Quantifying measurement limits. (line 192) * US letter paper size: A4 print book. (line 6) * Usage pattern: --usage. (line 6) * User interface functions: Mandatory source code files. (line 102) * Using CPU threads: Multi-threaded operations. (line 6) * Using multiple CPU cores: Multi-threaded operations. (line 6) * Using multiple threads: A note on threads. (line 6) * Values to options: Options. (line 47) * Variance: Measuring elliptical parameters. (line 25) * Variation of background flux: Photon counting noise. (line 61) * Vector graphics: Recognized file formats. (line 41) * Version control: Report a bug. (line 27) * Version control <1>: Version controlled source. (line 6) * Version control systems: Optional dependencies. (line 52) * Version number: Version numbering. (line 6) * Versioning: Shared library: Linking. (line 115) * Viewing trackers: Report a bug. (line 97) * Virtual console: Command-line interface. (line 75) * void *: Generic data container. (line 50) * Wall-clock time: A note on threads. (line 19) * WCS: WCSLIB. (line 6) * WCSLIB: WCSLIB. (line 6) * WCSLIB <1>: Invoking astwarp. (line 205) * Weighted average: Convolve. (line 6) * WFC3: Warp. (line 53) * White space character: Configuration file format. (line 11) * Wide Field Camera 3: Warp. (line 53) * Wide Field Camera 3 <1>: Warping basics. (line 51) * William Thomson: Science and its tools. (line 128) * World Coordinate System: WCSLIB. (line 6) * World Coordinate System <1>: Invoking astwarp. (line 205) * Writing configuration files: Configuration file format. (line 33) * Wrong output: Report a bug. (line 6) * Wrong results: Report a bug. (line 6) * XDF: Quantifying measurement limits. (line 69) * XDF survey: General program usage tutorial. (line 6) * Zero-point magnitude: Flux Brightness and magnitude. (line 42) gnuastro-0.5/doc/gnuastro.info-40000644000175000017500000106370113217220436013576 00000000000000This is gnuastro.info, produced by makeinfo version 6.5 from gnuastro.texi. This book documents version 0.5 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2017 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation Licenseâ€. INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro’s library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeNoise: (gnuastro)MakeNoise. Make (add) noise to an image. * astmknoise: (gnuastro)Invoking astmknoise. Options to MakeNoise. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Library blank values, Next: Library data container, Prev: Library data types, Up: Gnuastro library 10.3.4 Library blank values (‘blank.h’) --------------------------------------- When the position of an element in a dataset is important (for example a pixel in an image), a place-holder is necessary for the element if we don’t have a value to fill it with (for example the CCD cannot read those pixels). We cannot simply shift all the other pixels to fill in the one we have no value for. In other cases, it often occurs that the field of sky that you are studying is not a clean rectangle to nicely fit into the boundaries of an image. You need a way to separate the pixels outside your scientific field from those inside it. Blank values act as these place holders in a dataset. They have no usable value but they have a position. Every type needs a corresponding blank value (see *note Numeric data types:: and *note Library data types::). Floating point types have a unique value identified by IEEE known as Not-a-Number (or NaN) which is a unique value that is recognized by the compiler. However, integer and string types don’t have any standard value. For integers, in Gnuastro we take an extremum of the given type: for signed types (that allow negatives), the minimum possible value is used as blank and for unsigned types (that only accept positives), the maximum possible value is used. To be generic and easy to read/write we define a macro for these blank values and strongly encourage you only use these, and never make any assumption on the value of a type’s blank value. The IEEE NaN blank value type is defined to fail on any comparison, so if you are dealing with floating point types, you cannot use equality (a NaN will _not_ be equal to a NaN). If you know your dataset if floating point, you can use the ‘isnan’ function in C’s ‘math.h’ header. For a description of numeric data types see *note Numeric data types::. For the constants identifying integers, please see *note Library data types::. -- Global integer: GAL_BLANK_UINT8 Blank value for an unsigned, 8-bit integer. -- Global integer: GAL_BLANK_INT8 Blank value for a signed, 8-bit integer. -- Global integer: GAL_BLANK_UINT16 Blank value for an unsigned, 16-bit integer. -- Global integer: GAL_BLANK_INT16 Blank value for a signed, 16-bit integer. -- Global integer: GAL_BLANK_UINT32 Blank value for an unsigned, 32-bit integer. -- Global integer: GAL_BLANK_INT32 Blank value for a signed, 32-bit integer. -- Global integer: GAL_BLANK_UINT64 Blank value for an unsigned, 64-bit integer. -- Global integer: GAL_BLANK_INT64 Blank value for a signed, 64-bit integer. -- Global integer: GAL_BLANK_SIZE_T Blank value for ‘size_t’ type (‘uint32_t’ or ‘uint64_t’ in 32-bit or 64-bit systems). -- Global integer: GAL_BLANK_FLOAT32 Blank value for a single precision, 32-bit floating point type (IEEE NaN value). -- Global integer: GAL_BLANK_FLOAT64 Blank value for a double precision, 64-bit floating point type (IEEE NaN value). -- Global integer: GAL_BLANK_STRING Blank value for string types (this is itself a string, it isn’t the ‘NULL’ pointer). The functions below can be used to work with blank pixels. -- Function: void gal_blank_write (void ‘*pointer’, uint8_t ‘type’) Write the blank value for the given ‘type’ into the space that ‘pointer’ points to. This can be used when the space is already allocated (for example one element in an array or a statically allocated variable). -- Function: void * gal_blank_alloc_write (uint8_t ‘type’) Allocate the space required to keep the blank for the given data type ‘type’, write the blank value into it and return the pointer to it. -- Function: void gal_blank_initialize (gal_data_t ‘*input’) Initialize all the elements in the ‘input’ dataset to the blank value that corresponds to its type. If ‘input’ is a tile over a larger dataset, only the region that the tile covers will be set to blank. -- Function: int gal_blank_present (gal_data_t ‘*input’, int ‘updateflag’) Return 1 if the dataset has a blank value and zero if it doesn’t. Before checking the dataset, this function will look at ‘input’’s flags. If the ‘GAL_DATA_FLAG_HASBLANK’ or ‘GAL_DATA_FLAG_DONT_CHECK_ZERO’ bits of ‘input->flag’ are set to 1, this function will not do any check and will just use the information in the flags. This can greatly speed up processing when a dataset needs to be checked multiple times. If you want to re-check a dataset which has non-zero flags, then explicitly set the appropriate flag to zero before calling this function. When there are no other flags, you can just set ‘input->flags’ to zero, otherwise you can use this expression: input->flags &= ~(GAL_DATA_FLAG_HASBLANK | GAL_DATA_FLAG_USE_ZERO); When ‘updateflags’ is zero, this function has no side-effects on the dataset: it will not toggle the flags. When the dataset’s flags were not used and ‘updateflags’ is non-zero, this function will set the flags appropriately to avoid having to re-check the dataset in future calls. -- Function: gal_data_t * gal_blank_flag (gal_data_t ‘*input’) Create a dataset of the the same size as the input, but with an ‘uint8_t’ type that has a value of 1 for data that are blank and 0 for those that aren’t. -- Function: void gal_blank_remove (gal_data_t ‘*input’) Remove blank elements from a dataset, convert it to a 1D dataset, and adjust the size properly (the number of non-blank elements). In practice this function doesn’t ‘realloc’ the input array, it just shifts the blank elements to the end and adjusts the size elements of the ‘gal_data_t’, see *note Generic data container::. -- Function: char * gal_blank_as_string (uint8_t ‘type’, int ‘width’) Write the blank value for the given data type ‘type’ into a string and return it. The space for the string is dynamically allocated so it must be freed after you are done with it.  File: gnuastro.info, Node: Library data container, Next: Dimensions, Prev: Library blank values, Up: Gnuastro library 10.3.5 Data container (‘data.h’) -------------------------------- Astronomical datasets have various dimensions, for example 1D spectra or table columns, 2D images, or 3D Integral field data cubes. Datasets can also have various numeric data types, depending on the operation/purpose, for example processed images are in commonly in floating point, but their mask images are integers using bit-wise flags to identify certain classes of special pixels, see *note Numeric data types::). Certain other information about a dataset are also commonly necessary, for example the units of the dataset, the name of the dataset and some comments. To deal with any generic dataset, Gnuastro defines the ‘gal_data_t’ as input or output. * Menu: * Generic data container:: Definition of Gnuastro’s generic container. * Dataset size and allocation:: Functions for size and allocation. * Arrays of datasets:: Functions to help with array of datasets. * Copying datasets:: Functions to copy a dataset to a new one.  File: gnuastro.info, Node: Generic data container, Next: Dataset size and allocation, Prev: Library data container, Up: Library data container 10.3.5.1 Generic data container (‘gal_data_t’) .............................................. To be able to deal with any dataset (various dimensions, numeric data types, units and higher-level structures), Gnuastro defines the ‘gal_data_t’ type which is the input/output container of choice for many of Gnuastro library’s functions. It is defined in ‘gnuastro/data.h’. If you will be using (‘‘# include’’ing) those libraries, you don’t need to include this header explicitly, it is already included by any library header that uses ‘gal_data_t’. -- Type (C ‘struct’): gal_data_t The main container for datasets in Gnuastro. It can host data of any dimensions, with any numeric data type. It is actually a structure, but ‘typedef’’d as a new type to avoid having to write the ‘struct’ before any declaration. The actual structure is shown below which is followed by a description of each element. typedef struct gal_data_t { void *restrict array; /* Basic array information. */ uint8_t type; size_t ndim; size_t *dsize; size_t size; char *mmapname; size_t minmapsize; int nwcs; /* WCS information. */ struct wcsprm *wcs; uint8_t flag; /* Content description. */ int status; char *name; char *unit; char *comment; int disp_fmt; /* For text printing. */ int disp_width; int disp_precision; struct gal_data_t *next; /* For higher-level datasets. */ struct gal_data_t *block; } gal_data_t; The list below contains a description for each ‘gal_data_t’ element. ‘void *restrict array’ This is the pointer to the main array of the dataset containing the raw data (values). All the other elements in this data-structure are actually meta-data enabling us to use/understand the series of values in this array. It must allow data of any type (see *note Numeric data types::), so it is defined as a ‘void *’ pointer. A ‘void *’ array is not directly usable in C, so you have to cast it to proper type before using it, please see *note Library demo - reading a image:: for a demonstration. The ‘restrict’ keyword was formally introduced in C99 and is used to tell the compiler that at any moment only this pointer will modify what it points to (a pixel in an image for example)(1). This extra piece of information can greatly help in compiler optimizations and thus the running time of the program. But older compilers might not have this capability, so at ‘./configure’ time, Gnuastro checks this feature and if the user’s compiler doesn’t support ‘restrict’, it will be removed from this definition. ‘uint8_t type’ A fixed code (integer) used to identify the type of data in ‘array’ (see *note Numeric data types::). For the list of acceptable values to this variable, please see *note Library data types::. ‘size_t ndim’ The dataset’s number of dimensions. ‘size_t *dsize’ The size of the dataset along each dimension. This is an array (with ‘ndim’ elements), of positive integers in row-major order(2) (based on C). When a data file is read into memory with Gnuastro’s libraries, this array is dynamically allocated based on the number of dimensions that the dataset has. It is important to remember that C’s row-major ordering is the opposite of the FITS standard which is in column-major order: in the FITS standard the fastest dimension’s size is specified by ‘NAXIS1’, and slower dimensions follow. The FITS standard was defined mainly based on the FORTRAN language which is the opposite of C’s approach to multi-dimensional arrays (and also starts counting from 1 not 0). Hence if a FITS image has ‘NAXIS1==20’ and ‘NAXIS2==50’, the ‘dsize’ array must be filled with ‘dsize[0]==50’ and ‘dsize[1]==20’. The fastest dimension is the one that is contiguous in memory: to increment by one along that dimension, just go to the next element in the array. As we go to slower dimensions, the number of memory cells we have to skip for an increment along that dimension becomes larger. ‘size_t size’ The total number of elements in the dataset. This is actually a multiplication of all the values in the ‘dsize’ array, so it is not an independent parameter. However, low-level operations with the dataset (irrespective of its dimensions) commonly need this number, so this element is designed to avoid calculating it every time. ‘char *mmapname’ Name of file hosting the ‘mmap’’d contents of ‘array’. If the value of this variable is ‘NULL’, then the contents of ‘array’ are actually stored in RAM, not in a file on the HDD/SSD. See the description of ‘minmapsize’ below for more. If a file is used, it will be kept in the hidden ‘.gnuastro’ directory with a randomly selected name to allow multiple arrays to be kept there at the same time. When ‘gal_data_free’ is called the randomly named file will be deleted. ‘size_t minmapsize’ The minimum size of an array (in bytes) to store the contents of ‘array’ as a file (on the non-volatile HDD/SSD), not in RAM. This can be very useful for large datasets which can be very memory intensive and the user’s RAM might not be sufficient to keep/process it. A random filename is assigned to the array which is available in the ‘mmapname’ element of ‘gal_data_t’ (above), see there for more. ‘minmapsize’ is stored in each ‘gal_data_t’, so it can be passed on to subsequent/derived datasets. See the description of the ‘--minmapsize’ option in *note Processing options:: for more on using this value. ‘nwcs’ The number of WCS coordinate representations (for WCSLIB). ‘struct wcsprm *wcs’ The main WCSLIB structure keeping all the relevant information necessary for WCSLIB to do its processing and convert data-set positions into real-world positions. When it is given a ‘NULL’ value, all possible WCS calculations/measurements will be ignored. ‘uint8_t flag’ Bit-wise flags to describe general properties of the dataset. The number of bytes available in this flag is stored in the ‘GAL_DATA_FLAG_SIZE’ macro. Note that you should use bit-wise operators(3) to check these flags. The currently recognized bits are stored in these macros: ‘GAL_DATA_FLAG_BLANK_CH’ Marking that the dataset has been checked for blank values. Therefore, the value of the bit in ‘GAL_DATA_FLAG_HASBLANK’ is reliable. Without this bit, when a dataset doesn’t have any blank values (and this has been checked), the ‘GAL_DATA_FLAG_HASBLANK’ bit will be zero so a checker has no way to know if this zero is real or if no check has been done yet. ‘GAL_DATA_FLAG_HASBLANK’ This bit has a value of ‘1’ when the given dataset has blank values. If this bit is ‘0’ and ‘GAL_DATA_FLAG_BLANK_CH’ is ‘1’, then the dataset has been checked and it didn’t have any blank values, so there is no more need for further checks. ‘GAL_DATA_FLAG_SORT_CH’ Marking that the dataset is already checked for being sorted or not and thus that the possible ‘0’ values in ‘GAL_DATA_FLAG_SORTED_I’ and ‘GAL_DATA_FLAG_SORTED_D’ are meaningful. ‘GAL_DATA_FLAG_SORTED_I’ This bit has a value of ‘1’ when the given dataset is sorted in an increasing manner. If this bit is ‘0’ and ‘GAL_DATA_FLAG_SORT_CH’ is ‘1’, then the dataset has been checked and wasn’t sorted (increasing), so there is no more need for further checks. ‘GAL_DATA_FLAG_SORTED_D’ This bit has a value of ‘1’ when the given dataset is sorted in a decreasing manner. If this bit is ‘0’ and ‘GAL_DATA_FLAG_SORT_CH’ is ‘1’, then the dataset has been checked and wasn’t sorted (decreasing), so there is no more need for further checks. The macro ‘GAL_DATA_FLAG_MAXFLAG’ contains the largest internally used bit-position. Higher-level flags can be defined with the bit-wise shift operators using this macro to define internal flags for libraries/programs that depend on Gnuastro without causing any possible conflict with the internal flags discussed above or having to check the values manually on every release. ‘int status’ A context-specific status values for this data-structure. This integer will not be set by Gnuastro’s libraries. You can use it keep some additional information about the dataset (with integer constants) depending on your applications. ‘char *name’ The name of the dataset. If the dataset is a multi-dimensional array and read/written as a FITS image, this will be the value in the ‘EXTNAME’ FITS keyword. If the dataset is a one-dimensional table column, this will be the column name. If it is set to ‘NULL’ (by default), it will be ignored. ‘char *unit’ The units of the dataset (for example ‘BUNIT’ in the standard FITS keywords) that will be read from or written to files/tables along with the dataset. If it is set to ‘NULL’ (by default), it will be ignored. ‘char *comment’ Any further explanation about the dataset which will be written to any output file if present. ‘disp_fmt’ Format to use for printing each element of the dataset to a plain text file, the acceptable values to this element are defined in *note Table input output::. Based on C’s ‘printf’ standards. ‘disp_width’ Width of printing each element of the dataset to a plain text file, the acceptable values to this element are defined in *note Table input output::. Based on C’s ‘printf’ standards. ‘disp_precision’ Precision of printing each element of the dataset to a plain text file, the acceptable values to this element are defined in *note Table input output::. Based on C’s ‘printf’ standards. ‘gal_data_t *next’ Through this pointer, you can link a ‘gal_data_t’ with other datasets related datasets, for example the different columns in a dataset each have one ‘gal_data_t’ associate with them and they are linked to each other using this element. There are several functions described below to facilitate using ‘gal_data_t’ as a linked list. See *note Linked lists:: for more on these wonderful high-level constructs. ‘gal_data_t *block’ Pointer to the start of the complete allocated block of memory. When this pointer is not ‘NULL’, the dataset is not treated as a contiguous patch of memory. Rather, it is seen as covering only a portion of the larger patch of memory that ‘block’ points to. See *note Tessellation library:: for a more thorough explanation and functions to help work with tiles that are created from this pointer. ---------- Footnotes ---------- (1) Also see . (2) Also see . (3) See .  File: gnuastro.info, Node: Dataset size and allocation, Next: Arrays of datasets, Prev: Generic data container, Up: Library data container 10.3.5.2 Dataset size and allocation .................................... Gnuastro’s main data container was defined in *note Generic data container::. The functions listed in this section describe the most basic operations on ‘gal_data_t’: those related to the size, pointers, allocation and freeing. These functions are declared in ‘gnuastro/data.h’ which is also visible from the function names (see *note Gnuastro library::). -- Function: int gal_data_dsize_is_different (gal_data_t ‘*first’, gal_data_t ‘*second’) Return ‘1’ (one) if the two datasets don’t have the same size along all dimensions. This function will also return ‘1’ when the number of dimensions of the two datasets are different. -- Function: void * gal_data_ptr_increment (void ‘*pointer’, size_t ‘increment’, uint8_t ‘type’) Return a pointer to an element that is ‘increment’ elements ahead of ‘pointer’, assuming each element has type of ‘type’ (for the type codes, see *note Library data types::). When working with the ‘array’ elements of ‘gal_data_t’, we are actually dealing with ‘void *’ pointers. However, pointer arithmetic doesn’t apply to ‘void *’, because the system doesn’t know how many bytes there are in each element to increment the pointer respectively. This function will use the given ‘type’ to calculate where the incremented element is located in memory. -- Function: size_t gal_data_ptr_dist (void ‘*earlier’, void ‘*later’, uint8_t ‘type’) Return the number of elements between ‘earlier’ and ‘later’ assuming each element has a type defined by ‘type’ (for the type codes, see *note Library data types::). -- Function: void * gal_data_malloc_array (uint8_t ‘type’, size_t ‘size’, const char ‘*funcname’, const char ‘*varname’) Allocate an array of type ‘type’ with ‘size’ elements in RAM (for the type codes, see *note Library data types::). This is effectively just a wrapper around C’s ‘malloc’ function but takes Gnuastro’s integer type codes and will also abort with an error if there the allocation was not successful. When space cannot be allocated, this function will abort the program with a message containing the reason for the failure. ‘funcname’ (name of the function calling this function) and ‘varname’ (name of variable that needs this space) will be used in this error message if they are not ‘NULL’. In most modern compilers, you can use the generic ‘__func__’ variable for ‘funcname’. In this way, you don’t have to manually copy and paste the function name or worry about it changing later (‘__func__’ was standardized in C99). -- Function: void * gal_data_calloc_array (uint8_t ‘type’, size_t ‘size’, const char ‘*funcname’, const char ‘*varname’) Similar to ‘gal_data_malloc_array’, but the space is cleared (set to 0) after allocation. -- Function: void gal_data_initialize (gal_data_t ‘*data’, void ‘*array’, uint8_t ‘type’, size_t ‘ndim’, size_t ‘*dsize’, struct wcsprm ‘*wcs’, int ‘clear’, size_t ‘minmapsize’, char ‘*name’, char ‘*unit’, char ‘*comment’) Initialize the given data structure (‘data’) with all the given values. Note that the raw input ‘gal_data_t’ must already have been allocated before calling this function. For a description of each variable see *note Generic data container::. It will set the values and do the necessary allocations. If they aren’t ‘NULL’, all input arrays (‘dsize’, ‘wcs’, ‘name’, ‘unit’, ‘comment’) are separately copied (allocated) by this function for usage in ‘data’, so you can safely use one value to initialize many datasets or use statically allocated variables in this function call. Once you are done with the dataset, you can clean all the allocated spaces with ‘gal_data_free_contents’. If ‘array’ is not ‘NULL’, it will be directly copied into ‘data->array’ and no new space will be allocated for the array of this dataset, this has many low-level advantages and can be used to work on regions of a dataset instead of the whole allocated array (see the description under ‘block’ in *note Generic data container:: for one example). If the given pointer is not the start of an allocated block of memory or it is used in multiple datasets, be sure to set it to ‘NULL’ (with ‘data->array=NULL’) before cleaning up with ‘gal_data_free_contents’. ‘ndim’ may be zero. In this case no allocation will occur, ‘data->array’ and ‘data->dsize’ will be set to ‘NULL’ and ‘data->size’ will be zero. However (when necessary) ‘dsize’ must not have any zero values (a dimension of length zero is not defined). -- Function: gal_data_t * gal_data_alloc (void ‘*array’, uint8_t ‘type’, size_t ‘ndim’, size_t ‘*dsize’, struct wcsprm ‘*wcs’, int ‘clear’, size_t ‘minmapsize’, char ‘*name’, char ‘*unit’, char ‘*comment’) Dynamically allocate a ‘gal_data_t’ and initialize it will all the given values. See the description of ‘gal_data_initialize’ and *note Generic data container:: for more information. This function will often be the most frequently used because it allocates the ‘gal_data_t’ hosting all the values _and_ initializes it. Once you are done with the dataset, be sure to clean up all the allocated spaces with ‘gal_data_free’. -- Function: void gal_data_free_contents (gal_data_t ‘*data’) Free all the non-‘NULL’ pointers in ‘gal_data_t’. If ‘data’ is actually a tile (‘data->block!=NULL’, see *note Tessellation library::), then ‘tile->array’ is not freed. For a complete description of ‘gal_data_t’ and its contents, see *note Generic data container::. -- Function: void gal_data_free (gal_data_t ‘*data’) Free all the non-‘NULL’ pointers in ‘gal_data_t’, then free the actual data structure.  File: gnuastro.info, Node: Arrays of datasets, Next: Copying datasets, Prev: Dataset size and allocation, Up: Library data container 10.3.5.3 Arrays of datasets ........................... Gnuastro’s generic data container (‘gal_data_t’) is a very versatile structure that can be used in many higher-level contexts. One such higher-level construct is an array of ‘gal_data_t’ structures to simplify the allocation (and later cleaning) of several ‘gal_data_t’s that are related. For example, each column in a table is usually represented by one ‘gal_data_t’ (so it has its own name, numeric data type, units and etc). A table (with many columns) can be seen as an array of ‘gal_data_t’s (when the number of columns is known a-priori). The functions below are defined to create a cleared array of data structures and to free them in the end. These functions are declared in ‘gnuastro/data.h’ which is also visible from the function names (see *note Gnuastro library::). -- Function: gal_data_t * gal_data_array_calloc (size_t ‘size’) Allocate an array of ‘gal_data_t’ with ‘size’ elements. This function will also initialize all the values (‘NULL’ for pointers and 0 for other types). You can use ‘gal_data_initialize’ to fill each element of the array afterwards. The following code snippet is one example of doing this. size_t i; gal_data_t *dataarr; dataarr=gal_data_array_calloc(10); for(i=0;i<10;++i) gal_data_initialize(&dataarr[i], ...); ... gal_data_array_free(dataarr, 10, 1); -- Function: void gal_data_array_free (gal_data_t ‘*dataarr’, size_t ‘num’, int ‘free_array’) Free all the ‘num’ elements within ‘dataarr’ and the actual allocated array. If ‘free_array’ is not zero, then the ‘array’ element of all the datasets will also be freed, see *note Generic data container::.  File: gnuastro.info, Node: Copying datasets, Prev: Arrays of datasets, Up: Library data container 10.3.5.4 Copying datasets ......................... The functions in this section describes Gnuastro’s facilities to copy a given dataset into another. The new dataset can have a different type (including a string), it can be already allocated (in which case only the values will be written into it). In all these cases, if the input dataset is a tile, only the data within the tile are copied. In many of the functions here, it is possible to copy the dataset to a new numeric data type (see *note Numeric data types::. In such cases, Gnuastro’s library is going to use the native conversion by C. So if you are converting to a smaller type, it is up to you to make sure that the values fit into the output type. -- Function: gal_data_t * gal_data_copy (gal_data_t ‘*in’) Return a new dataset that is a copy of ‘in’, all of ‘in’’s meta-data will also copied into the output, except for ‘block’. -- Function: gal_data_t * gal_data_copy_to_new_type (gal_data_t ‘*in’, uint8_t ‘newtype’) Return a copy of the dataset ‘in’, converted to ‘newtype’, see *note Library data types:: for Gnuastro library’s type identifiers. The returned dataset will have all meta-data except their type and ‘block’ equal to the input’s metadata. -- Function: gal_data_t * gal_data_copy_to_new_type_free (gal_data_t ‘*in’, uint8_t ‘newtype’) Return a copy of the dataset ‘in’ that is converted to ‘newtype’ and free the input dataset. See *note Library data types:: for Gnuastro library’s type identifiers. The returned dataset will have all meta-data, except their type, equal to the input’s metadata. This function is similar to ‘gal_data_copy_to_new_type’, except that it will free the input dataset. -- Function: void gal_data_copy_to_allocated (gal_data_t ‘*in’, gal_data_t ‘*out’) Copy the contents of the array in ‘in’ into the already allocated array in ‘out’. The types of the input and output may be different, type conversion will be done internally. When ‘in->size != out->size’ this function will behave as follows: ‘out->size < in->size’ This function won’t re-allocate the necessary space, it will abort with an error, so please check before calling this function. ‘out->size > in->size’ This function will write the values in ‘out->size’ and ‘out->dsize’ from the same values of ‘in’. So if you want to use a pre-allocated space/dataset multiple times with varying input sizes, be sure to reset ‘out->size’ before every call to this function. -- Function: gal_data_t * gal_data_copy_string_to_number (char ‘*string’) Read ‘string’ into the smallest type that can store the value (see *note Numeric data types::). This function is just a wrapper for the ‘gal_type_string_to_number’, but will put the value into a single-element dataset.  File: gnuastro.info, Node: Dimensions, Next: Linked lists, Prev: Library data container, Up: Gnuastro library 10.3.6 Dimensions (‘dimension.h’) --------------------------------- An array is a contiguous region of memory. Hence, at the lowest level, every element of an array just has one single-valued position: the number of elements that lie between it and the first element in the array. This is also known as the _index_ of the element within the array. A dataset’s number of dimensions is high-level abstraction (meta-data) that we project onto that contiguous patch of memory. When the array is interpreted as a one-dimensional dataset, this index is also the _coordinate_ of the element. But once we associate the patch of memory with a higher dimension, there must also be one coordinate for each dimension. The functions and macros in this section provide you with the tools to convert an index into a coordinate and vice-versa along with several other issues for example issues with the neighbors of an element in a multi-dimensional context. -- Function: size_t gal_dimension_total_size (size_t ‘ndim’, size_t ‘*dsize’) Return the total number of elements for a dataset with ‘ndim’ dimensions that has ‘dsize’ elements along each dimension. -- Function: size_t * gal_dimension_increment (size_t ‘ndim’, size_t ‘*dsize’) Return an allocated array that has the number of elements necessary to increment an index along every dimension. For example along the fastest dimension (last element in the ‘dsize’ and returned arrays), the value is ‘1’ (one). -- Function: size_t gal_dimension_num_neighbors (size_t ‘ndim’) The maximum number of neighbors (any connectivity) that a data element can have in ‘ndim’ dimensions. Effectively, this function just returns $3^n-1$ (where $n$ is the number of dimensions). -- Function-like macro: GAL_DIMENSION_FLT_TO_INT (‘FLT’) Calculate the integer pixel position that the floating point ‘FLT’ number belongs to. In the FITS format (and thus in Gnuastro), the center of each pixel is allocated on an integer (not it edge), so the pixel which hosts a floating point number cannot simply be found with internal type conversion. -- Function: void gal_dimension_add_coords (size_t ‘*c1’, size_t ‘*c2’, size_t ‘*out’, size_t ‘ndim’) For every dimension, add the coordinates in ‘c1’ with ‘c2’ and put the result into ‘out’. In other words, for dimension ‘i’ run ‘out[i]=c1[i]+c2[i];’. Hence ‘out’ may be equal to any one of ‘c1’ or ‘c2’. -- Function: size_t gal_dimension_coord_to_index (size_t ‘ndim’, size_t ‘*dsize’, size_t ‘*coord’) Return the index (counting from zero) from the coordinates in ‘coord’ (counting from zero) assuming the dataset has ‘ndim’ elements and the size of the dataset along each dimension is in the ‘dsize’ array. -- Function: void gal_dimension_index_to_coord (size_t ‘index’, size_t ‘ndim’, size_t ‘*dsize’, size_t ‘*coord’) Fill in the ‘coord’ array with the coordinates that correspond to ‘index’ assuming the dataset has ‘ndim’ elements and the size of the dataset along each dimension is in the ‘dsize’ array. Note that both ‘index’ and each value in ‘coord’ are assumed to start from ‘0’ (zero). Also that the space which ‘coord’ points to must already be allocated before calling this function. -- Function: size_t gal_dimension_dist_manhattan (size_t ‘*a’, size_t ‘*b’, size_t ‘ndim’) Return the manhattan distance (see Wikipedia (https://en.wikipedia.org/wiki/Taxicab_geometry)) between the two coordinates ‘a’ and ‘b’ (each an array of ‘ndim’ elements). -- Function-like macro: GAL_DIMENSION_NEIGHBOR_OP (‘index’, ‘ndim’, ‘dsize’, ‘connectivity’, ‘dinc’, ‘operation’) Parse the neighbors of the element located at ‘index’ and do the requested operation on them. This is defined as a macro to allow easy definition of any operation on the neighbors of a given element without having to use loops within your source code (the loops are implemented by this macro). For an example of using this function, please see *note Library demo - inspecting neighbors::. The input arguments to this function-like macro are described below: ‘index’ Distance of this element from the first element in the array on a contiguous patch of memory (starting from 0), see the discussion above. ‘ndim’ The number of dimensions associated with the contiguous patch of memory. ‘dsize’ The full array size along each dimension. This must be an array and is assumed to have the same number elements as ‘ndim’. See the discussion under the same element in *note Generic data container::. ‘connectivity’ Most distant neighbors to consider. Depending on the number of dimensions, different neighbors may be defined for each element. This function-like macro distinguish between these different neighbors with this argument. It has a value between ‘1’ (one) and ‘ndim’. For example in a 2D dataset, 4-connected neighbors have a connectivity of ‘1’ and 8-connected neighbors have a connectivity of ‘2’. Note that this is inclusive, so in this example, a connectivity of ‘2’ will also include connectivity ‘1’ neighbors. ‘dinc’ An array keeping the length necessary to increment along each dimension. You can make this array with the following function. Just don’t forget to free the array after you are done with it: size_t *dinc=gal_dimension_increment(ndim, dsize); ‘dinc’ depends on ‘ndim’ and ‘dsize’, but it must be defined outside this function-like macro since it involves allocation to help in performance. ‘operation’ Any C operation that you would like to do on the neighbor. This macro will provide you a ‘nind’ variable that can be used as the index of the neighbor that is currently being studied. It is defined as ‘‘size_t ndim;’’. Note that ‘operation’ will be repeated the number of times there is a neighbor for this element. This macro works fully within its own ‘{}’ block and except for the ‘nind’ variable that shows the neighbor’s index, all the variables within this macro’s block start with ‘gdn_’.  File: gnuastro.info, Node: Linked lists, Next: FITS files, Prev: Dimensions, Up: Gnuastro library 10.3.7 Linked lists (‘list.h’) ------------------------------ An array is a contiguous region of memory that is very efficient and easy to use for recording and later accessing any random element as fast as any other. This makes array the primary data container when you have many elements (for example an image which has millions of pixels). One major problem with an array is that the number of elements that go into it must be known in advance and adding or removing an element will require a re-set of all the other elements. For example if you want to remove the 3rd element in a 1000 element array, all 997 subsequent elements have to pulled back by one position, the reverse will happen if you need to add an element. In many contexts such situations never come up, for example you don’t want to shift all the pixels in an image by one or two pixels from some random position in the image: their positions have scientific value. But in other contexts you will find your self frequently adding/removing an a-priori unknown number of elements. Linked lists (or _lists_ for short) are the data-container of choice in such situations. As in a chain, each _node_ in a list is an independent C structure, keeping its own data along with pointer(s) to its immediate neighbor(s). Below, you can see one simple linked list node structure along with an ASCII art schematic of how we can use the ‘next’ pointer to add any number of elements to the list that we want. By convention, a list is terminated when ‘next’ is the ‘NULL’ pointer. struct list_float /* --------- --------- */ { /* | Value | | Value | */ float value; /* | --- | | --- | */ struct list_float *next; /* | next-|--> | next-|--> NULL */ } /* --------- --------- */ The schematic shows another great advantage of linked lists: it is very easy to add or remove/pop a node anywhere in the list. If you want to modify the first node, you just have to change one pointer. If it is in the middle, you just have to change two. You initially define a variable of this type with a ‘NULL’ pointer as shown below: struct list_float *mylist=NULL; To add or remove/pop a node from the list you can use functions provided for the respective type in the sections below. When you add an element to the list, it is conventionally added to the “top†of the list: the general list pointer will point to the newly created node, which will point to the previously created node and so on. So when you “pop†from the top of the list, you are actually retrieving the last value you put in and changing the list pointer to the next youngest node. This is thus known as a “last-in-first-out†list. This is the most efficient type of linked list (easier to implement and faster to process). Alternatively, you can add each newly created node at the end of the list. If you do that, you will get a “first-in-first-out†list. But that will force you to go through the whole list for each new element that is created (this will slow down the processing)(1). The node example above creates the simplest kind of a list. We can define each node with two pointers to both the next and previous neighbors, this is called a “Doubly linked listâ€. In general, lists are very powerful and simple constructs that can be very useful. But going into more detail would be out of the scope of this short introduction in this book. Wikipedia (https://en.wikipedia.org/wiki/Linked_list) has a nice and more thorough discussion of the various types of lists. To appreciate/use the beauty and elegance of these powerful constructs even further, see Chapter 2 (Information Structures, in volume 1) of Donald Knuth’s “The art of computer programmingâ€. In this section we will review the functions and structures that are available in Gnuastro for working on lists. They differ by the type of data that each node can keep. For each linked-list node structure, we will first introduce the structure, then the functions for working on the structure. All these structures and functions are defined and declared in ‘gnuastro/list.h’. * Menu: * List of strings:: Simply linked list of strings. * List of int32_t:: Simply linked list of int32_ts. * List of size_t:: Simply linked list of size_ts. * List of float:: Simply linked list of floats. * List of double:: Simply linked list of doubles * List of void:: Simply linked list of void * pointers. * Ordered list of size_t:: Simply linked, ordered list of size_t. * Doubly linked ordered list of size_t:: Definition and functions. * List of gal_data_t:: Simply linked list Gnuastro’s generic datatype. ---------- Footnotes ---------- (1) A better way to get a first-in-first-out is to first keep the data as last-in-first-out until they are all read. Afterwards, reverse the list by popping each node and immediately add it to the new list. This practically reverses the last-in-first-out list to a first-in-first-out one. All the list types discussed in this chapter have a function with a ‘_reverse’ suffix for this job.  File: gnuastro.info, Node: List of strings, Next: List of int32_t, Prev: Linked lists, Up: Linked lists 10.3.7.1 List of strings ........................ Probably one of the most common lists you will be using are lists of strings. They are the best tools when you are reading the user’s inputs, or when adding comments to the output files. Below you can see Gnuastro’s string list type and several functions to help in adding, removing/popping, reversing and freeing the list. -- Type (C ‘struct’): gal_list_str_t A single node in a list containing a string of characters. typedef struct gal_list_str_t { char *v; struct gal_list_str_t *next; } gal_list_str_t; -- Function: void gal_list_str_add (gal_list_str_t ‘**list’, char ‘*value’, int ‘allocate’) Add a new node to the list of strings (‘list’) and update it. The new node will contain the string ‘value’. If ‘allocate’ is not zero, space will be allocated specifically for the string of the new node and the contents of ‘value’ will be copied into it. This can be useful when your string may be changed later in the program, but you want your list to remain. Here is one short/simple example of initializing and adding elements to a string list: gal_list_str_t *strlist; gal_list_str_add(&strlist, "bottom of list."); gal_list_str_add(&strlist, "second last element of list."); -- Function: char * gal_list_str_pop (gal_list_str_t ‘**list’) Pop the top element of ‘list’, change ‘list’ to point to the next node in the list, and return the string that was in the popped node. If ‘*list==NULL’, then this function will also return a ‘NULL’ pointer. -- Function: size_t gal_list_str_number (gal_list_str_t ‘*list’) Return the number of nodes in ‘list’. -- Function: void gal_list_str_print (gal_list_str_t ‘*list’) Print the strings within each node of ‘*list’ on the standard output in the same order that they are stored. Each string is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, its best to make your own implementation with a better, more user-friendly, format. For example the following code snippet. size_t i; gal_list_str_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("String %zu: %s\n", i, tmp->v); -- Function: void gal_list_str_reverse (gal_list_str_t ‘**list’) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: void gal_list_str_free (gal_list_str_t ‘*list’, int ‘freevalue’) Free every node in ‘list’. If ‘freevalue’ is not zero, also free the string within the nodes.  File: gnuastro.info, Node: List of int32_t, Next: List of size_t, Prev: List of strings, Up: Linked lists 10.3.7.2 List of ‘int32_t’ .......................... Signed integers are the best types when you are dealing with a positive or negative integers. The are generally useful in many contexts, for example when you want to keep the order of a series of states (each state stored as a given number in an ‘enum’ for example). On many modern systems, ‘int32_t’ is just an alias for ‘int’, so you can use them interchangeably. To make sure, check the size of ‘int’ on your system: -- Type (C ‘struct’): gal_list_i32_t A single node in a list containing a 32-bit signed integer (see *note Numeric data types::). typedef struct gal_list_i32_t { int32_t v; struct gal_list_i32_t *next; } gal_list_i32_t; -- Function: void gal_list_i32_add (gal_list_i32_t ‘**list’, int32_t ‘value’) Add a new node (containing ‘value’) to the top of the ‘list’ of ‘int32_t’s (‘uint32_t’ is equal to ‘int’ on many modern systems), and update ‘list’. Here is one short example of initializing and adding elements to a string list: gal_list_i32_t *i32list=NULL; gal_list_i32_add(&i32list, 52); gal_list_i32_add(&i32list, -4); -- Function: int32_t gal_list_i32_pop (gal_list_i32_t ‘**list’) Pop the top element of ‘list’ and return the value. This function will also change ‘list’ to point to the next node in the list. If ‘*list==NULL’, then this function will also return ‘GAL_BLANK_INT32’ (see *note Library blank values::). -- Function: size_t gal_list_i32_number (gal_list_i32_t ‘*list’) Return the number of nodes in ‘list’. -- Function: void gal_list_i32_print (gal_list_i32_t ‘*list’) Print the integers within each node of ‘*list’ on the standard output in the same order that they are stored. Each integer is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, its best to make your own implementation with a better, more user-friendly format. For example the following code snippet. You can also modify it to print all values in one line, and etc, depending on the context of your program. size_t i; gal_list_i32_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("String %zu: %s\n", i, tmp->v); -- Function: void gal_list_i32_reverse (gal_list_i32_t ‘**list’) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: int32_t * gal_list_i32_to_array (gal_list_i32_t ‘*list’, int ‘reverse’, size_t ‘*num’) Dynamically allocate an array and fill it with the values in ‘list’. The function will return a pointer to the allocated array and put the number of elements in the array into the ‘num’ pointer. If ‘reverse’ has a non-zero value, the array will be filled in the opposite order of elements in ‘list’. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. -- Function: void gal_list_i32_free (gal_list_i32_t ‘*list’) Free every node in ‘list’.  File: gnuastro.info, Node: List of size_t, Next: List of float, Prev: List of int32_t, Up: Linked lists 10.3.7.3 List of ‘size_t’ ......................... The ‘size_t’ type is a unique type in C: as the name suggests it is defined to store sizes, or more accurately, the distances between memory locations. Hence it is always positive (an ‘unsigned’ type) and it is directly related to the address-able spaces on the host system: on 32-bit and 64-bit systems it is an alias for ‘uint32_t’ and ‘uint64_t’, respectively (see *note Numeric data types::). ‘size_t’ is the default compiler type to index an array (recall that an array index in C is just a pointer increment of a given _size_). Since it is unsigned, its a great type for counting (where negative is not defined), you are always sure it will never exceed the system’s (virtual) memory and since its name has the word “size†inside it, it provides a good level of documentation(1). In Gnuastro, we do all counting and array indexing with this type, so this list is very handy. As discussed above, ‘size_t’ maps to different types on different machines, so a portable way to print them with ‘printf’ is to use C99’s ‘%zu’ format. -- Type (C ‘struct’): gal_list_sizet_t A single node in a list containing a ‘size_t’ value (which maps to ‘uint32_t’ or ‘uint64_t’ on 32-bit and 64-bit systems), see *note Numeric data types::. typedef struct gal_list_sizet_t { size_t v; struct gal_list_sizet_t *next; } gal_list_sizet_t; -- Function: void gal_list_sizet_add (gal_list_sizet_t ‘**list’, size_t ‘value’) Add a new node (containing ‘value’) to the top of the ‘list’ of ‘size_t’s and update ‘list’. Here is one short example of initializing and adding elements to a string list: gal_list_sizet_t *slist=NULL; gal_list_sizet_add(&slist, 45493); gal_list_sizet_add(&slist, 930484); -- Function: sizet_t gal_list_sizet_pop (gal_list_sizet_t ‘**list’) Pop the top element of ‘list’ and return the value. This function will also change ‘list’ to point to the next node in the list. If ‘*list==NULL’, then this function will also return ‘GAL_BLANK_SIZE_T’ (see *note Library blank values::). -- Function: size_t gal_list_sizet_number (gal_list_sizet_t ‘*list’) Return the number of nodes in ‘list’. -- Function: void gal_list_sizet_print (gal_list_sizet_t ‘*list’) Print the values within each node of ‘*list’ on the standard output in the same order that they are stored. Each integer is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, its best to make your own implementation with a better, more user-friendly format. For example, the following code snippet. You can also modify it to print all values in one line, and etc, depending on the context of your program. size_t i; gal_list_sizet_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("String %zu: %zu\n", i, tmp->v); -- Function: void gal_list_sizet_reverse (gal_list_sizet_t ‘**list’) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: size_t * gal_list_sizet_to_array (gal_list_sizet_t ‘*list’, int ‘reverse’, size_t ‘*num’) Dynamically allocate an array and fill it with the values in ‘list’. The function will return a pointer to the allocated array and put the number of elements in the array into the ‘num’ pointer. If ‘reverse’ has a non-zero value, the array will be filled in the inverse of the order of elements in ‘list’. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. -- Function: void gal_list_sizet_free (gal_list_sizet_t ‘*list’) Free every node in ‘list’. ---------- Footnotes ---------- (1) So you know that a variable of this type is not used to store some generic state for example.  File: gnuastro.info, Node: List of float, Next: List of double, Prev: List of size_t, Up: Linked lists 10.3.7.4 List of ‘float’ ........................ Single precision floating point numbers can accurately store real number until 7.2 decimals and only consume 4 bytes (32-bits) of memory, see *note Numeric data types::. Since astronomical data rarely reach that level of precision, single precision floating points are the type of choice to keep and read data. However, when processing the data, it is best to use double precision floating points (since errors propagate). -- Type (C ‘struct’): gal_list_f32_t A single node in a list containing a 32-bit single precision ‘float’ value: see *note Numeric data types::. typedef struct gal_list_f32_t { float v; struct gal_list_f32_t *next; } gal_list_f32_t; -- Function: void gal_list_f32_add (gal_list_f32_t ‘**list’, float ‘value’) Add a new node (containing ‘value’) to the top of the ‘list’ of ‘float’s and update ‘list’. Here is one short example of initializing and adding elements to a string list: gal_list_f32_t *flist=NULL; gal_list_f32_add(&flist, 3.89); gal_list_f32_add(&flist, 1.23e-20); -- Function: float gal_list_f32_pop (gal_list_f32_t ‘**list’) Pop the top element of ‘list’ and return the value. This function will also change ‘list’ to point to the next node in the list. If ‘*list==NULL’, then this function will return ‘GAL_BLANK_FLOAT32’ (NaN, see *note Library blank values::). -- Function: size_t gal_list_f32_number (gal_list_f32_t ‘*list’) Return the number of nodes in ‘list’. -- Function: void gal_list_f32_print (gal_list_f32_t ‘*list’) Print the values within each node of ‘*list’ on the standard output in the same order that they are stored. Each floating point number is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, its best to make your own implementation with a better, more user-friendly format. For example, in the following code snippet. You can also modify it to print all values in one line, and etc, depending on the context of your program. size_t i; gal_list_f32_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Node %zu: %f\n", i, tmp->v); -- Function: void gal_list_f32_reverse (gal_list_f32_t ‘**list’) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: float * gal_list_f32_to_array (gal_list_f32_t ‘*list’, int ‘reverse’, size_t ‘*num’) Dynamically allocate an array and fill it with the values in ‘list’. The function will return a pointer to the allocated array and put the number of elements in the array into the ‘num’ pointer. If ‘reverse’ has a non-zero value, the array will be filled in the inverse of the order of elements in ‘list’. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. -- Function: void gal_list_f32_free (gal_list_f32_t ‘*list’) Free every node in ‘list’.  File: gnuastro.info, Node: List of double, Next: List of void, Prev: List of float, Up: Linked lists 10.3.7.5 List of ‘double’ ......................... Double precision floating point numbers can accurately store real number until 15.9 decimals and consume 8 bytes (64-bits) of memory, see *note Numeric data types::. This level of precision makes them very good for serious processing in the middle of a program’s execution: in many cases, the propagation of errors will still be insignificant compared to actual observational errors in a data set. But since they consume 8 bytes and more CPU processing power, they are often not the best choice for storing and transferring of data. -- Type (C ‘struct’): gal_list_f64_t A single node in a list containing a 64-bit double precision ‘double’ value: see *note Numeric data types::. typedef struct gal_list_f64_t { double v; struct gal_list_f64_t *next; } gal_list_f64_t; -- Function: void gal_list_f64_add (gal_list_f64_t ‘**list’, double ‘value’) Add a new node (containing ‘value’) to the top of the ‘list’ of ‘double’s and update ‘list’. Here is one short example of initializing and adding elements to a string list: gal_list_f64_t *dlist=NULL; gal_list_f64_add(&dlist, 3.8129395763193); gal_list_f64_add(&dlist, 1.239378923931e-20); -- Function: double gal_list_f64_pop (gal_list_f64_t ‘**list’) Pop the top element of ‘list’ and return the value. This function will also change ‘list’ to point to the next node in the list. If ‘*list==NULL’, then this function will return ‘GAL_BLANK_FLOAT64’ (NaN, see *note Library blank values::). -- Function: size_t gal_list_f64_number (gal_list_f64_t ‘*list’) Return the number of nodes in ‘list’. -- Function: void gal_list_f64_print (gal_list_f64_t ‘*list’) Print the values within each node of ‘*list’ on the standard output in the same order that they are stored. Each floating point number is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, its best to make your own implementation with a better, more user-friendly format. For example, in the following code snippet. You can also modify it to print all values in one line, and etc, depending on the context of your program. size_t i; gal_list_f64_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Node %zu: %f\n", i, tmp->v); -- Function: void gal_list_f64_reverse (gal_list_f64_t ‘**list’) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: double * gal_list_f64_to_array (gal_list_f64_t ‘*list’, int ‘reverse’, size_t ‘*num’) Dynamically allocate an array and fill it with the values in ‘list’. The function will return a pointer to the allocated array and put the number of elements in the array into the ‘num’ pointer. If ‘reverse’ has a non-zero value, the array will be filled in the inverse of the order of elements in ‘list’. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. -- Function: void gal_list_f64_free (gal_list_f64_t ‘*list’) Free every node in ‘list’.  File: gnuastro.info, Node: List of void, Next: Ordered list of size_t, Prev: List of double, Up: Linked lists 10.3.7.6 List of ‘void *’ ......................... In C, ‘void *’ is the most generic pointer. Usually pointers are associated with the type of content they point to. For example ‘int *’ means a pointer to an integer. This ancillary information about the contents of the memory location is very useful for the compiler, catching bad errors and also documentation (it helps the reader see what the address in memory actually contains). However, ‘void *’ is just a raw address (pointer), it contains no information on the contents it points to. These properties make the ‘void *’ very useful when you want to treat the contents of an address in different ways. You can use the ‘void *’ list defined in this section and its function on any kind of data: for example you can use it to keep a list of custom data structures that you have built for your own separate program. Each node in the list can keep anything and this gives you great versatility. But in using ‘void *’, please beware that “with great power comes great responsibilityâ€. -- Type (C ‘struct’): gal_list_void_t A single node in a list containing a ‘void *’ pointer. typedef struct gal_list_void_t { void *v; struct gal_list_void_t *next; } gal_list_void_t; -- Function: void gal_list_void_add (gal_list_void_t ‘**list’, void ‘*value’) Add a new node (containing ‘value’) to the top of the ‘list’ of ‘void *’s and update ‘list’. Here is one short example of initializing and adding elements to a string list: gal_list_void_t *vlist=NULL; gal_list_f64_add(&vlist, some_pointer); gal_list_f64_add(&vlist, another_pointer); -- Function: void * gal_list_void_pop (gal_list_void_t ‘**list’) Pop the top element of ‘list’ and return the value. This function will also change ‘list’ to point to the next node in the list. If ‘*list==NULL’, then this function will return ‘NULL’. -- Function: size_t gal_list_void_number (gal_list_void_t ‘*list’) Return the number of nodes in ‘list’. -- Function: void gal_list_void_reverse (gal_list_void_t ‘**list’) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: void gal_list_void_free (gal_list_void_t ‘*list’) Free every node in ‘list’.  File: gnuastro.info, Node: Ordered list of size_t, Next: Doubly linked ordered list of size_t, Prev: List of void, Up: Linked lists 10.3.7.7 Ordered list of ‘size_t’ ................................. Positions/sizes in a dataset are conventionally in the ‘size_t’ type (see *note List of size_t::) and it sometimes occurs that you want to parse and read the values in a specific order. For example you want to start from one pixel and add pixels to the list based on their distance to that pixel. So that ever time you pop an element from the list, you know it is the nearest that has not yet been studied. The ‘gal_list_osizet_t’ type and its functions in this section are designed to facilitate such operations. -- Type (C ‘struct’): gal_list_osizet_t Each node in this singly-linked list contains a ‘size_t’ value and a floating point value. The floating point value is used as a reference to add new nodes in a sorted manner. At any moment, the first popped node in this list will have the smallest ‘tosort’ value, and subsequent nodes will have larger to values. typedef struct gal_list_osizet_t { size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_osizet_t *next; } gal_list_osizet_t; -- Function: void gal_list_osizet_add (gal_list_osizet_t ‘**list’, size_t ‘value’, float ‘tosort’) Allocate space for a new node in ‘list’, and store ‘value’ and ‘tosort’ into it. The new node will not necessarily be at the “top†of the list. If ‘*list!=NULL’, then the ‘tosort’ values of existing nodes is inspected and the given node is placed in the list such that the top element (which is popped with ‘gal_list_osizet_pop’) has the smallest ‘tosort’ value. -- Function: size_t gal_list_osizet_pop (gal_list_osizet_t ‘**list’, float ‘*sortvalue’) Pop a node from the top of ‘list’, return the node’s ‘value’ and put its sort value in the space that ‘sortvalue’ points to. This function will also free the allocated space for the popped node and after this function, ‘list’ will point to the next node (which has a larger ‘tosort’ element). -- Function: void gal_list_osizet_to_sizet_free (gal_list_osizet_t ‘*in’, gal_list_sizet_t ‘**out’) Convert the ordered list of ‘size_t’s into an ordinary ‘size_t’ linked list. This can be useful when all the elements have been added and you just need to pop-out elements and don’t care about the sorting values any more. After the conversion is done, this function will free the input list. Note that the ‘out’ list doesn’t have to be empty. If it already contains some nodes, the new nodes will be added on top of them.  File: gnuastro.info, Node: Doubly linked ordered list of size_t, Next: List of gal_data_t, Prev: Ordered list of size_t, Up: Linked lists 10.3.7.8 Doubly linked ordered list of ‘size_t’ ............................................... An ordered list of indexs is required in many contexts, one example was discussed at the beginning of *note Ordered list of size_t::. But the list that was introduced there only has one point of entry: you can always only parse the list from smallest to largest. In this section, the doubly-linked ‘gal_list_dosizet_t’ node is defined which will allow us to parse the values in ascending or descending order. -- Type (C ‘struct’): gal_list_dosizet_t Doubly-linked, ordered ‘size_t’ list node structure. Each node in this Doubly-linked list contains a ‘size_t’ value and a floating point value. The floating point value is used as a reference to add new nodes in a sorted manner. In the functions here, this linked list can be pointed to by two pointers (largest and smallest) with the following format: largest pointer | NULL <-- (v0,s0) <--> (v1,s1) <--> ... (vn,sn) --> NULL | smallest pointer At any moment, the two pointers will point to the nodes containing the “largest†and “smallest†values and the rest of the nodes will be sorted. This is useful when an unknown number of nodes are being added continuously and during the operations it is important to have the nodes in a sorted format. typedef struct gal_list_dosizet_t { size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_dosizet_t *prev; struct gal_list_dosizet_t *next; } gal_list_dosizet_t; -- Function: void gal_list_dosizet_add (gal_list_dosizet_t ‘**largest’, gal_list_dosizet_t ‘**smallest’, size_t ‘value’, float ‘tosort’) Allocate space for a new node in ‘list’, and store ‘value’ and ‘tosort’ into it. If the list is empty, both ‘largest’ and ‘smallest’ must be ‘NULL’. -- Function: size_t gal_list_dosizet_pop_smallest (gal_list_dosizet_t ‘**largest’, gal_list_dosizet_t ‘**smallest’, float ‘tosort’) Pop the value with the smallest reference from the doubly linked list and store the reference into the space pointed to by ‘tosort’. Note that even though only the smallest pointer will be popped, when there was only one node in the list, the ‘largest’ pointer also has to change, so we need both. -- Function: void gal_list_dosizet_print (gal_list_dosizet_t ‘*largest’, gal_list_dosizet_t ‘*smallest’) Print the largest and smallest values sequentially until the list is parsed. -- Function: void gal_list_dosizet_to_sizet (gal_list_dosizet_t ‘*in’, gal_list_sizet_t ‘**out’) Convert the doubly linked, ordered ‘size_t’ list into a singly-linked list of ‘size_t’. -- Function: void gal_list_dosizet_free (gal_list_dosizet_t ‘*largest’) Free the doubly linked, ordered ‘sizet_t’ list.  File: gnuastro.info, Node: List of gal_data_t, Prev: Doubly linked ordered list of size_t, Up: Linked lists 10.3.7.9 List of ‘gal_data_t’ ............................. Gnuastro’s generic data container has a ‘next’ element which enables it to be used as a singly-linked list (see *note Generic data container::). The ability to connect the different data containers offers great advantages. For example each column in a table in an independent dataset: with its own name, units, numeric data type (see *note Numeric data types::). Another application is in Tessellating an input dataset into separate tiles or only studying particular regions, or tiles, of a larger dataset (see *note Tessellation:: and *note Tessellation library::). Each independent tile over the dataset can be connected to the others as a linked list and thus any number of tiles can be represented with one variable. -- Function: void gal_list_data_add (gal_data_t ‘**list’, gal_data_t ‘*newnode’) Add an already allocated dataset (‘newnode’) to top of ‘list’. Note that if ‘newnode->next!=NULL’ (‘newnode’ is itself a list), then ‘list’ will be added to its end. In this example multiple images are linked together as a list: size_t minmapsize=-1; gal_data_t *tmp, *list=NULL; tmp = gal_fits_img_read("file1.fits", "1", minmapsize, 0, 0); gal_list_data_add( &list, tmp ); tmp = gal_fits_img_read("file2.fits", "1", minmapsize, 0, 0); gal_list_data_add( &list, tmp ); -- Function: void gal_list_data_add_alloc (gal_data_t ‘**list’, void ‘*array’, uint8_t ‘type’, size_t ‘ndim’, size_t ‘*dsize’, struct wcsprm ‘*wcs’, int ‘clear’, size_t ‘minmapsize’, char ‘*name’, char ‘*unit’, char ‘*comment’) Allocate a new dataset (with ‘gal_data_alloc’ in *note Dataset size and allocation::) and put it as the first element of ‘list’. Note that if this is the first node to be added to the list, ‘list’ must be ‘NULL’. -- Function: gal_data_t * gal_list_data_pop (gal_data_t ‘**list’) Pop the top node from ‘list’ and return it. -- Function: void gal_list_data_reverse (gal_data_t ‘**list’) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: size_t gal_list_data_number (gal_data_t ‘*list’) Return the number of nodes in ‘list’. -- Function: void gal_list_data_free (gal_data_t ‘*list’) Free all the datasets in ‘list’ along with all the allocated spaces in each.  File: gnuastro.info, Node: FITS files, Next: World Coordinate System, Prev: Linked lists, Up: Gnuastro library 10.3.8 FITS files (‘fits.h’) ---------------------------- The FITS format is the most common format to store data (images and tables) in astronomy. The CFITSIO library already provides a very good low-level collection of functions for manipulating FITS data. The low-level nature of CFITSIO is defined for versatility and portability. As a result, even a simple a basic operation, like reading an image or table column into memory, will require a special sequence of CFITSIO function calls which can be inconvenient and buggy to manage in separate locations. Therefore Gnuastro library provides wrappers for CFITSIO functions to make it much easier to read/write/modify FITS file data, header keywords and extensions. Hence, if you feel these functions don’t exactly do what you want, we strongly recommend reading the CFITSIO manual to use its great features directly. All the functions and macros introduced in this section are declared in ‘gnuastro/fits.h’. When you include this header, you are also including CFITSIO’s ‘fitsio.h’ header. So you don’t need to explicitly include ‘fitsio.h’ anymore and can freely use any of its macros or functions in your code along with those discussed here. * Menu: * FITS macros errors filenames:: General macros, errors and checking names. * CFITSIO and Gnuastro types:: Conversion between FITS and Gnuastro types. * FITS HDUs:: Opening and getting information about HDUs. * FITS header keywords:: Reading and writing FITS header keywords. * FITS arrays:: Reading and writing FITS images/arrays. * FITS tables:: Reading and writing FITS tables.  File: gnuastro.info, Node: FITS macros errors filenames, Next: CFITSIO and Gnuastro types, Prev: FITS files, Up: FITS files 10.3.8.1 FITS Macros, errors and filenames .......................................... Some general constructs provided by Gnuastro’s FITS handling functions are discussed here. In particular there are several useful functions about FITS file names. -- Macro: GAL_FITS_MAX_NDIM The maximum number of dimensions a dataset can have in FITS format, according to the FITS standard this is 999. -- Function: void gal_fits_io_error (int ‘status’, char ‘*message’) If ‘status’ is non-zero, this function will print the CFITSIO error message corresponding to status, print ‘message’ (optional) in the next line and abort the program. If ‘message==NULL’, it will print a default string after the CFITSIO error. -- Function: int gal_fits_name_is_fits (char ‘*name’) If the ‘name’ is an acceptable CFITSIO FITS filename return ‘1’ (one), otherwise return ‘0’ (zero). The currently acceptable FITS suffixes are ‘.fits’, ‘.fit’, ‘.fits.gz’, ‘.fits.Z’, ‘.imh’, ‘.fits.fz’. IMH is the IRAF format which is acceptable to CFITSIO. -- Function: int gal_fits_suffix_is_fits (char ‘*suffix’) Similar to ‘gal_fits_name_is_fits’, but only for the suffix. The suffix doesn’t have to start with ‘<.>’: this function will return ‘1’ (one) for both ‘fits’ and ‘.fits’. -- Function: char * gal_fits_name_save_as_string (char ‘*filename’, char ‘*hdu’) If the name is a FITS name, then put a ‘(hdu: ...)’ after it and return the string. If it isn’t a FITS file, just print the name. Note that the space is allocated. This function is useful when you want to report a random file to the user which may be FITS or not (for a FITS file, simply the filename is not enough, the HDU is also necessary).  File: gnuastro.info, Node: CFITSIO and Gnuastro types, Next: FITS HDUs, Prev: FITS macros errors filenames, Up: FITS files 10.3.8.2 CFITSIO and Gnuastro types ................................... Both Gnuastro and CFITSIO have special identifiers for each type that they accept. Gnuastro’s type identifiers are fully described in *note Library data types:: and are usable for all kinds of datasets (images, table columns and etc) as part of Gnuastro’s *note Generic data container::. However, following the FITS standard, CFITSIO has different identifiers for images and tables. Following CFITSIO’s own convention, we will use ‘bitpix’ for image type identifiers and ‘datatype’ for its internal identifiers (and mainly used in tables). The functions introduced in this section can be used to convert between CFITSIO and Gnuastro’s type identifiers. One important issue to consider is that CFITSIO’s types are not fixed width (for example ‘long’ may be 32-bits or 64-bits on different systems). However, Gnuastro’s types are defined by their width. These functions will use information on the host system to do the proper conversion, so it strongly recommended to use these functions for portability of your code and not to assume a fixed correspondence between CFITSIO and Gnuastro’s types. -- Function: uint8_t gal_fits_bitpix_to_type (int ‘bitpix’) Return the Gnuastro type identifier that corresponds to CFITSIO’s ‘bitpix’ on this system. -- Function: int gal_fits_type_to_bitpix (uint8_t ‘type’) Return the CFITSIO ‘bitpix’ value that corresponds to Gnuastro’s ‘type’. -- Function: char gal_fits_type_to_bin_tform (uint8_t ‘type’) Return the FITS standard binary table ‘TFORM’ character that corresponds to Gnuastro’s ‘type’. -- Function: int gal_fits_type_to_datatype (uint8_t ‘type’) Return the CFITSIO ‘datatype’ that corresponds to Gnuastro’s ‘type’ on this machine. -- Function: uint8_t gal_fits_datatype_to_type (int ‘datatype’, int ‘is_table_column’) Return Gnuastro’s type identifier that corresponds to the CFITSIO ‘datatype’. Note that when dealing with CFITSIO’s ‘TLONG’, the fixed width type differs between tables and images. So if the corresponding dataset is a table column, put a non-zero value into ‘is_table_column’.  File: gnuastro.info, Node: FITS HDUs, Next: FITS header keywords, Prev: CFITSIO and Gnuastro types, Up: FITS files 10.3.8.3 FITS HDUs .................. A FITS file can contain multiple HDUs/extensions. The functions in this section can be used to get basic information about the extensions or open them. Note that ‘fitsfile’ is defined in CFITSIO’s ‘fitsio.h’ which is automatically included by Gnuastro’s ‘gnuastro/fits.h’. -- Function: fitsfile * gal_fits_open_to_write (char ‘*filename’) If ‘filename’ exists, open it and return the ‘fitsfile’ pointer that corresponds to it. If ‘filename’ doesn’t exist, the file will be created which contains a blank first extension and the pointer to its next extension will be returned. -- Function: size_t gal_fits_hdu_num (char ‘*filename’) Return the number of HDUs/extensions in ‘filename’. -- Function: int gal_fits_hdu_format (char ‘*filename’, char ‘*hdu’) Return the format of the HDU as one of CFITSIO’s recognized macros: ‘IMAGE_HDU’, ‘ASCII_TBL’, or ‘BINARY_TBL’. -- Function: fitsfile * gal_fits_hdu_open (char ‘*filename’, char ‘*hdu’, int ‘iomode’) Open the HDU/extension ‘hdu’ from ‘filename’ and return a pointer to CFITSIO’s ‘fitsfile’. ‘iomode’ determines how the FITS file will be opened using CFITSIO’s macros: ‘READONLY’ or ‘READWRITE’. The string in ‘hdu’ will be appended to ‘filename’ in square brackets so CFITSIO only opens this extension. You can use any formatting for the ‘hdu’ that is acceptable to CFITSIO. See the description under ‘--hdu’ in *note Input output options:: for more. -- Function: fitsfile * gal_fits_hdu_open_format (char ‘*filename’, char ‘*hdu’, int ‘img0_tab1’) Open (in read-only format) the ‘hdu’ HDU/extension of ‘filename’ as an image or table. When ‘img0_tab1’ is ‘0’(zero) but the HDU is a table, this function will abort with an error. It will also abort with an error when ‘img0_tab1’ is ‘1’ (one), but the HDU is an image. A FITS HDU may contain both tables or images. When your program needs one of these formats, you can call this function so if the user provided the wrong HDU/file, it will abort and inform the user that the file/HDU is has the wrong format.  File: gnuastro.info, Node: FITS header keywords, Next: FITS arrays, Prev: FITS HDUs, Up: FITS files 10.3.8.4 FITS header keywords ............................. Each FITS extension/HDU contains a raw dataset which can either be a table or an image along with some header keywords. The keywords can be used to store meta-data about the actual dataset. The functions in this section describe Gnuastro’s high-level functions for reading and writing FITS keywords. Similar to all Gnuastro’s FITS-related functions, these functions are all wrappers for CFITSIO’s low-level functions. The necessary meta-data (header keywords) for a particular dataset are commonly numerous, it is much more efficient to list them in one variable and call the reading/writing functions once. Hence the functions in this section use linked lists, a thorough introduction to them is given in *note Linked lists::. To reading FITS keywords, these functions use a list of Gnuastro’s generic dataset format that is discussed in *note List of gal_data_t::. To write FITS keywords we define the ‘gal_fits_list_key_t’ node that is defined below. -- Type (C ‘struct’): gal_fits_list_key_t Structure for writing FITS keywords. This structure is used for one keyword and you don’t need to set all elements. With the ‘next’ element, you can link it to another keyword thus creating a linked list to add any number of keywords easily and at any step during your program (see *note Linked lists:: for an introduction on lists). See the functions below for adding elements to the list. typedef struct gal_fits_list_key_t { int kfree; /* ==1, free name. */ int vfree; /* ==1, free value. */ int cfree; /* ==1, free comment. */ uint8_t type; /* Keyword value type. */ char *keyname; /* Keyword Name. */ void *value; /* Keyword value. */ char *comment; /* Keyword comment. */ char *unit; /* Keyword unit. */ struct gal_fits_list_key_t *next; /* Next keyword. */ } gal_fits_list_key_t; -- Function: void * gal_fits_key_img_blank (uint8_t ‘type’) Returns a pointer to an allocated space for the FITS ‘BLANK’ header keyword when the input array has a type of ‘type’. According to the FITS standard: “If the ‘BSCALE’ and ‘BZERO’ keywords do not have the default values of 1.0 and 0.0, respectively, then the value of the ‘BLANK’ keyword must equal the actual value in the FITS data array that is used to represent an undefined pixel and not the corresponding physical valueâ€. Therefore a special ‘BLANK’ value is needed for datasets containing signed 8-bit integers and unsigned 16-bit, 32-bit and 64-bit integers (types that are defined with ‘BSCALE’ and ‘BZERO’ in the FITS standard). -- Function: void gal_fits_key_clean_str_value (char ‘*string’) Remove the single quotes and possible extra spaces around the keyword values that CFITSIO returns when reading a string keyword. CFITSIO doesn’t remove the two single quotes around the string value of a keyword. Hence the strings it reads are like: ‘'value '’, or ‘'some_very_long_value'’. To use the value during your processing, it is commonly necessary to remove the single quotes (and possible extra spaces). This function will do this within the allocated space of the string. -- Function: void gal_fits_key_read_from_ptr (fitsfile ‘*fptr’, gal_data_t ‘*keysll’, int ‘readcomment’, int ‘readunit’) Read the list of keyword values from a FITS pointer. The input should be a linked list of Gnuastro’s generic data container (‘gal_data_t’). Before calling this function, you just have to set the ‘name’ and desired ‘type’ values of each node in the list to the keyword you want it to keep the value of. The given ‘name’ value will be directly passed to CFITSIO to read the desired keyword name. This function will allocate space to keep the value. If ‘readcomment’ and ‘readunit’ are non-zero, this function will also try to read the possible comments and units of the keyword. Here is one example of using this function: /* Allocate an array of datasets. */ gal_data_t *keysll=gal_data_array_calloc(N); /* Use the array as a list.*/ for(i=0;i0) and used as the keyword name. The FITS standard sets a maximum length for the value of a keyword. This creates problems with file names (which include directories). Because file names/addresses can become very long. Therefore, when ‘filename’ is longer than the maximum length of a FITS keyword value, this function will break it into several keywords (breaking up the string on directory separators). -- Function: void gal_fits_key_write_wcsstr (fitsfile ‘*fptr’, char ‘*wcsstr’, int ‘nkeyrec’) Write the WCS header string (produced with WCSLIB’s ‘wcshdo’ function) into the CFITSIO ‘fitsfile’ pointer. ‘nkeyrec’ is the number of FITS header keywords in ‘wcsstr’. This function will put a few blank keyword lines along with a comment ‘WCS information’ before writing each keyword record. -- Function: void gal_fits_key_write (fitsfile ‘*fptr’, gal_fits_list_key_t ‘**keylist’) Write the list of keywords in ‘keylist’ into the CFITSIO ‘fitsfile’. -- Function: void gal_fits_key_write_version (fitsfile ‘*fptr’, gal_fits_list_key_t ‘*headers’, char ‘*program_name’) Write or update (all the) keyword(s) in ‘headers’ into the FITS pointer, but also the date, name of your program (‘program_name’), along with the versions of CFITSIO, WCSLIB (when available), GSL, Gnuastro, and (the possible) commit information into the header as described in *note Output headers::. Since the data processing depends on the versions of the libraries you have used, it is strongly recommended to include this information in every FITS output. ‘gal_fits_img_write’ and ‘gal_fits_tab_write’ will automatically use this function.  File: gnuastro.info, Node: FITS arrays, Next: FITS tables, Prev: FITS header keywords, Up: FITS files 10.3.8.5 FITS arrays (images) ............................. Images (or multi-dimensional arrays in general) are one of the common data formats that is stored in FITS files. Only one image may be stored in each FITS HDU/extension. The functions described here can be used to get the information of, read, or write images in FITS files. -- Function: void gal_fits_img_info (fitsfile ‘*fptr’, int ‘*type’, size_t ‘*ndim’, size_t ‘**dsize’, char ‘**name’, char ‘**unit’) Read the type (see *note Library data types::), number of dimensions, and size along each dimension of the CFITSIO ‘fitsfile’ into the ‘type’, ‘ndim’, and ‘dsize’ pointers respectively. If ‘name’ and ‘unit’ are not ‘NULL’ (point to a ‘char *’), then if the image has a name and units, the respective string will be put in these pointers. -- Function: gal_data_t * gal_fits_img_read (char ‘*filename’, char ‘*hdu’, size_t ‘minmapsize’, size_t ‘hstartwcs’, size_t ‘hendwcs’) Read the contents of the ‘hdu’ extension/HDU of ‘filename’ into a Gnuastro generic data container (see *note Generic data container::) and return it. If the necessary space is larger than ‘minmapsize’, then don’t keep the data in RAM, but in a file on the HDD/SSD. For more on ‘minmapsize’ see the description under the same name in *note Generic data container::. The ‘hstartwcs’ and ‘hendwcs’ arguments are the starting and ending header keywords to search for WCS information, if no limit is needed, set them to zero. For more on these two options, please see the description of ‘gal_wcs_read_fitsptr’ in *note World Coordinate System::. -- Function: gal_data_t * gal_fits_img_read_to_type (char ‘*inputname’, char ‘*inhdu’, uint8_t ‘type’, size_t ‘minmapsize’, ) Read the contents of the ‘hdu’ extension/HDU of ‘filename’ into a Gnuastro generic data container (see *note Generic data container::) of type ‘type’ and return it. This is just a wrapper around ‘gal_fits_img_read’ (to read the image/array of any type) and ‘gal_data_copy_to_new_type_free’ (to convert it to ‘type’ and free the initially read dataset). See the description there for more. -- Function: gal_data_t * gal_fits_img_read_kernel (char ‘*filename’, char ‘*hdu’, size_t ‘minmapsize’) Read the ‘hdu’ of ‘filename’ as a convolution kernel. A convolution kernel must have an odd size along all dimensions, it must not have blank (NaN in floating point types) values and must be flipped around the center to make the proper convolution (see *note Convolution process::). If there are blank values, this function will change the blank values to ‘0.0’. If the input image doesn’t have the other two requirements, this function will abort with an error describing the condition to the user. The finally returned dataset will have a ‘float32’ type. -- Function: fitsfile * gal_fits_img_write_to_ptr (gal_data_t ‘*input’, char ‘*filename’) Write the ‘input’ dataset into a FITS file named ‘filename’ and return the corresponding CFITSIO ‘fitsfile’ pointer. This function won’t close ‘fitsfile’, so you can still add other extensions to it after this function or make other modifications. -- Function: void gal_fits_img_write (gal_data_t ‘*data’, char ‘*filename’, gal_fits_list_key_t ‘*headers’, char ‘*program_string’) Write the ‘input’ dataset into the FITS file named ‘filename’. Also add the ‘headers’ keywords to the newly created HDU/extension it along with your program’s name (‘program_string’). -- Function: void gal_fits_img_write_to_type (gal_data_t ‘*data’, char ‘*filename’, gal_fits_list_key_t ‘*headers’, char ‘*program_string’, int ‘type’) Convert the ‘input’ dataset into ‘type’, then write it into the FITS file named ‘filename’. Also add the ‘headers’ keywords to the newly created HDU/extension along with your program’s name (‘program_string’). After the FITS file is written, this function will free the copied dataset (with type ‘type’) from memory. This is just a wrapper for the ‘gal_data_copy_to_new_type’ and ‘gal_fits_img_write’ functions. -- Function: void gal_fits_img_write_corr_wcs_str (gal_data_t ‘*data’, char ‘*filename’, char ‘*wcsstr’, int ‘nkeyrec’, double ‘*crpix’, gal_fits_list_key_t ‘*headers’, char ‘*program_string’) Write the ‘input’ dataset into ‘filename’ using the ‘wcsstr’ while correcting the ‘CRPIX’ values. This function is mainly useful when you want to make FITS files in parallel (from one main WCS structure, with just differing CRPIX). This can happen in the following cases for example: • When a large number of FITS images (with WCS) need to be created in parallel, it can be much more efficient to write the header’s WCS keywords once at first, write them in the FITS file, then just correct the CRPIX values. • WCSLIB’s header writing function is not thread safe. So when writing FITS images in parallel, we can’t write the header keywords in each thread.  File: gnuastro.info, Node: FITS tables, Prev: FITS arrays, Up: FITS files 10.3.8.6 FITS tables .................... Tables are one of the common formats of data that is stored in FITS files. Only one table may be stored in each FITS HDU/extension, but each table column must be viewed as a different dataset (with its own name, units and numeric data type for example). The only constraint of the column datasets in a table is that they must be one-dimensional and have the same number of elements as the other columns. The functions described here can be used to get the information of, read, or write columns into FITS tables. -- Function: void gal_fits_tab_size (fitsfile ‘*fitsptr’, size_t ‘*nrows’, size_t ‘*ncols’) Read the number of rows and columns in the table within CFITSIO’s ‘fitsptr’. -- Function: int gal_fits_tab_format (fitsfile ‘*fitsptr’) Return the format of the FITS table contained in CFITSIO’s ‘fitsptr’. Recall that FITS tables can be in binary or ASCII formats. This function will return ‘GAL_TABLE_FORMAT_AFITS’ or ‘GAL_TABLE_FORMAT_BFITS’ (defined in *note Table input output::). If the ‘fitsptr’ is not a table, this function will abort the program with an error message informing the user of the problem. -- Function: gal_data_t * gal_fits_tab_info (char ‘*filename’, char ‘*hdu’, size_t ‘*numcols’, size_t ‘*numrows’, int ‘*tableformat’) Store the information of each column in ‘hdu’ of ‘filename’ into an array of data structures with ‘numcols’ elements (one data structure for each column) see *note Arrays of datasets::. The total number of rows in the table is also put into the memory that ‘numrows’ points to. The format of the table (e.g., FITS binary or ASCII table) will be put in ‘tableformat’ (macros defined in *note Table input output::). This function is just for column information. Therefore it only stores meta-data like column name, units and comments. No actual data (contents of the columns for example the ‘array’ or ‘dsize’ elements) will be allocated by this function. This is a low-level function particular to reading tables in FITS format. To be generic, it is recommended to use ‘gal_table_info’ which will allow getting information from a variety of table formats based on the filename (see *note Table input output::). -- Function: gal_data_t * gal_fits_tab_read (char ‘*filename’, char ‘*hdu’, size_t ‘numrows’, gal_data_t ‘*colinfo’, gal_list_sizet_t ‘*indexll’, int ‘minmapsize’) Read the columns given in the list ‘indexll’ from a FITS table into a linked list of data structures, see *note List of size_t:: and *note List of gal_data_t::. If the necessary space for each column is larger than ‘minmapsize’, don’t keep it in the RAM, but in a file in the HDD/SSD, see the description under the same name in *note Generic data container::. Note that this is a low-level function, so the output data linked list is the inverse of the input indexs linked list. It is recommended to use ‘gal_table_read’ for generic reading of tables, see *note Table input output::. -- Function: void gal_fits_tab_write (gal_data_t ‘*cols’, gal_list_str_t ‘*comments’, int ‘tableformat’, char ‘*filename’) Write the list of datasets in ‘cols’ (see *note List of gal_data_t::) as separate columns in a FITS table in ‘filename’. If ‘filename’ already exists then this function will write the table as a new extension after all existing ones. The format of the table (ASCII or binary) may be specified with the ‘tableformat’ (see *note Table input output::). If ‘comments!=NULL’, each node of the list of strings will be written as a ‘COMMENT’ keywords in the output FITS file (see *note List of strings::. This is a low-level function for tables. It is recommended to use ‘gal_table_write’ for generic writing of tables in a variety of formats, see *note Table input output::.  File: gnuastro.info, Node: World Coordinate System, Next: Text files, Prev: FITS files, Up: Gnuastro library 10.3.9 World Coordinate System (‘wcs.h’) ---------------------------------------- The FITS standard defines the world coordinate system (WCS) as a mechanism to associate physical values to positions within a dataset. For example, it can be used to convert pixel coordinates in an image to celestial coordinates like the right ascension and declination. The functions in this section are mainly just wrappers over CFITSIO, WCSLIB and GSL library functions to help in common applications. -- Function: struct wcsprm * gal_wcs_read_fitsptr (fitsfile ‘*fptr’, size_t ‘hstartwcs’, size_t ‘hendwcs’, int ‘*nwcs’) [*Not thread-safe*] Return the WCSLIB ‘wcsprm’ structure that is read from the CFITSIO ‘fptr’ pointer to an opened FITS file. Also put the number of coordinate representations found into the space that ‘nwcs’ points to. To read the WCS structure directly from a filename, see ‘gal_wcs_read’ below. After processing has finished, you can free the returned structure with WCSLIB’s ‘wcsvfree’ keyword: status = wcsvfree(&nwcs,&wcs); If you don’t want to search the full FITS header for WCS-related FITS keywords (for example due to conflicting keywords), but only a specific range of the header keywords you can use the ‘hstartwcs’ and ‘hendwcs’ arguments to specify the keyword number range (counting from zero). If ‘hendwcs’ is larger than ‘hstartwcs’, then only keywords in the given range will be checked. Hence, to ignore this feature (and search the full FITS header), give both these arguments the same value. If the WCS information couldn’t be read from the FITS file, this function will return a ‘NULL’ pointer and put a zero in ‘nwcs’. A WCSLIB error message will also be printed in ‘stderr’ if there was an error. This function is just a wrapper over WCSLIB’s ‘wcspih’ function which is not thread-safe. Therefore, be sure to not call this function simultaneously (over multiple threads). -- Function: struct wcsprm * gal_wcs_read (char ‘*filename’, char ‘*hdu’, size_t ‘hstartwcs’, size_t ‘hendwcs’, int ‘*nwcs’) [*Not thread-safe*] Return the WCSLIB structure that is read from the HDU/extension ‘hdu’ of the file ‘filename’. Also put the number of coordinate representations found into the space that ‘nwcs’ points to. Please see ‘gal_wcs_read_fitsptr’ for more. -- Function: struct wcsprm * gal_wcs_copy (struct wcsprm ‘*wcs’) Return a fully allocated (independent) copy of ‘wcs’. -- Function: void gal_wcs_on_tile (gal_data_t ‘*tile’) Create a WCSLIB ‘wcsprm’ structure for ‘tile’ using WCS parameters of the tile’s allocated block dataset, see *note Tessellation library:: for the definition of tiles. If ‘tile’ already has a WCS structure, this function won’t do anything. In many cases, tiles are created for internal/low-level processing. Hence for performance reasons, when creating the tiles they don’t have any WCS structure. When needed, this function can be used to add a WCS structure to each tile tile by copying the WCS structure of its block and correcting the reference point’s coordinates within the tile. -- Function: double * gal_wcs_warp_matrix (struct wcsprm ‘*wcs’) Return the Warping matrix of the given WCS structure as an array of double precision floating points. This will be the final matrix, irrespective of the type of storage in the WCS structure. Recall that the FITS standard has several methods to store the matrix. The output is an allocated square matrix with each side equal to the number of dimensions. -- Function: void gal_wcs_decompose_pc_cdelt (struct wcsprm ‘*wcs’) Decompose the ‘PCi_j’ and ‘CDELTi’ elements of ‘wcs’. According to the FITS standard, in the ‘PCi_j’ WCS formalism, the rotation matrix elements $m_{ij}$ are encoded in the ‘PCi_j’ keywords and the scale factors are encoded in the ‘CDELTi’ keywords. There is also another formalism (the ‘CDi_j’ formalism) which merges the two into one matrix. However, WCSLIB’s internal operations are apparently done in the ‘PCi_j’ formalism. So its outputs are also all in that format by default. When the input is a ‘CDi_j’, WCSLIB will still read the matrix directly into the ‘PCi_j’ matrix and the ‘CDELTi’ values are set to ‘1’ (one). This function is designed to correct such issues: after it is finished, the ‘CDELTi’ values in ‘wcs’ will correspond to the pixel scale, and the ‘PCi_j’ will correction show the rotation. -- Function: double gal_wcs_angular_distance_deg (double ‘r1’, double ‘d1’, double ‘r2’, double ‘d2’) Return the angular distance (in degrees) between a point located at (‘r1’, ‘d1’) to (‘r2’, ‘d2’). All input coordinates are in degrees. The distance (along a great circle) on a sphere between two points is calculated with the equation below. $$\cos(d)=\sin(d_1)\sin(d_2)+\cos(d_1)\cos(d_2)\cos(r_1-r_2)$$ However, since the the pixel scales are usually very small numbers, this function won’t use that direct formula. It will be use the Haversine formula (https://en.wikipedia.org/wiki/Haversine_formula) which is better considering floating point errors: $${\sin^2(d)\over 2}=\sin^2\left( {d_1-d_2\over 2} \right)+\cos(d_1)\cos(d_2)\sin^2\left( {r_1-r_2\over 2} \right)$$ -- Function: double * gal_wcs_pixel_scale (struct wcsprm ‘*wcs’) Return the pixel scale for each dimension of ‘wcs’ in degrees. The output is an array of double precision floating point type with one element for each dimension. -- Function: double gal_wcs_pixel_area_arcsec2 (struct wcsprm ‘*wcs’) Return the pixel area of ‘wcs’ in arcsecond squared. If the input WCS structure is not two dimensional and the units (‘CUNIT’ keywords) are not ‘deg’ (for degrees), then this function will return a NaN. -- Function: gal_data_t * gal_wcs_world_to_img (gal_data_t ‘*coords’, struct wcsprm ‘*wcs’, int ‘inplace’) Convert the linked list of world coordinates in ‘coords’ to a linked list of image coordinates given the input WCS structure. ‘coords’ must be a linked list of data structures of float64 (‘double’) type, see*note Linked lists:: and *note List of gal_data_t::. The top (first popped/read) node of the linked list must be the first WCS coordinate (RA in an image usually) and etc. Similarly, the top node of the output will be the first image coordinate (in the FITS standard). If ‘inplace’ is zero, then the output will be a newly allocated list and the input list will be untouched. However, if ‘inplace’ is non-zero, the output values will be written into the input’s already allocated array and the returned pointer will be the same pointer to ‘coords’ (in other words, you can ignore the returned value). Note that in the latter case, only the values will be changed, things like units or name (if present) will be untouched. -- Function: gal_data_t * gal_wcs_img_to_world (gal_data_t ‘*coords’, struct wcsprm ‘*wcs’, int ‘inplace’) Convert the linked list of image coordinates in ‘coords’ to a linked list of world coordinates given the input WCS structure. See the description of ‘gal_wcs_world_to_img’ for more details.  File: gnuastro.info, Node: Text files, Next: Table input output, Prev: World Coordinate System, Up: Gnuastro library 10.3.10 Text files (‘txt.h’) ---------------------------- FITS files are the primary data container in astronomy. FITS indeed as many useful features, but the most universal and portable format for data storage are plain text files. They can be viewed and edited on any text editor or even on the command-line. Therefore the functions in this section are defined to simplify reading from and writing to plain text files. Lines are one of the most basic buiding blocks (delimiters) of a text file. Some operating systems like Microsoft Windows, terminate their ASCII text lines with a carriage return character and a new-line character (two characters, also known as CRLF line terminators). While Unix-like operating systems just use a single new-line character. The functions below that read an ASCII text file are able to identify lines with both kinds of line terminators. Gnuastro defines a simple format for metadata of table columns in a plain text file that is discussed in *note Gnuastro text table format::. The functions to get information from, read from and write to plain text files also follow those conventions. -- Macro: GAL_TXT_LINESTAT_INVALID -- Macro: GAL_TXT_LINESTAT_BLANK -- Macro: GAL_TXT_LINESTAT_COMMENT -- Macro: GAL_TXT_LINESTAT_DATAROW Status codes for lines in a plain text file that are returned by ‘gal_txt_line_stat’. Lines which have a <#> character as their first non-white character are considered to be comments. Lines with nothing but white space characters are considered blank. The remaining lines are considered as containing data. -- Function: int gal_txt_line_stat (char ‘*line’) Check the contents of ‘line’ and see if it is a blank, comment, or data line. The returned values are the macros that start with ‘GAL_TXT_LINESTAT’. -- Function: gal_data_t * gal_txt_table_info (char ‘*filename’, size_t ‘*numcols’, size_t ‘*numrows’) Store the information of each column in ‘filename’ into an array of data structures with ‘numcols’ elements (one data structure for each column) see *note Arrays of datasets::. The total number of rows in the table is also put into the memory that ‘numrows’ points to. This function is just for column information. Therefore it only stores meta-data like column name, units and comments. No actual data (contents of the columns for example the ‘array’ or ‘dsize’ elements) will be allocated by this function. This is a low-level function particular to reading tables in plain text format. To be generic, it is recommended to use ‘gal_table_info’ which will allow getting information from a variety of table formats based on the filename (see *note Table input output::). -- Function: gal_data_t * gal_txt_table_read (char ‘*filename’, size_t ‘numrows’, gal_data_t ‘*colinfo’, gal_list_sizet_t ‘*indexll’, size_t ‘minmapsize’) Read the columns given in the list ‘indexll’ from a plain text table into a linked list of data structures, see *note List of size_t:: and *note List of gal_data_t::. If the necessary space for each column is larger than ‘minmapsize’, don’t keep it in the RAM, but in a file on the HDD/SSD, see the description under the same name in *note Generic data container::. Note that this is a low-level function, so the output data list is the inverse of the input indexs linked list. It is recommended to use ‘gal_table_read’ for generic reading of tables in any format, see *note Table input output::. -- Function: gal_data_t * gal_txt_image_read (char ‘*filename’, size_t ‘minmapsize’) Read the 2D plain text dataset in ‘filename’ into a dataset and return the dataset. If the necessary space for the image is larger than ‘minmapsize’, don’t keep it in the RAM, but in a file on the HDD/SSD, see the description under the same name in *note Generic data container::. -- Function: void gal_txt_write (gal_data_t ‘*cols’, gal_list_str_t ‘*comment’, char ‘*filename’) Write ‘cols’ in a plain text file ‘filename’. ‘cols’ may have one or two dimensions which determines the output: 1D ‘cols’ is treated as a column and a list of datasets (see *note List of gal_data_t::): every node in the list is written as one column in a table. 2D ‘cols’ is a two dimensional array, it cannot be treated as a list (only one 2D array can currently be written to a text file). So if ‘cols->next!=NULL’ the next nodes in the list are ignored and will not be written. If ‘filename’ already exists this function will abort with an error and will not write over the existing file. Please make sure if the file exists or not and take the appropriate action before calling this function. If ‘comments!=NULL’, a ‘#’ will be put at the start of each node of the list of strings and will be written in the file before the column meta-data in ‘filename’ (see *note List of strings::). This is a low-level function for tables. It is recommended to use ‘gal_table_write’ for generic writing of tables in a variety of formats, see *note Table input output::.  File: gnuastro.info, Node: Table input output, Next: Arithmetic on datasets, Prev: Text files, Up: Gnuastro library 10.3.11 Table input output (‘table.h’) -------------------------------------- Tables are a collection of one dimensional datasets that are packed together into one file. They are the single most common format to store high-level (processed) information, hence they play a very important role in Gnuastro. For a more thorough introduction, please see *note Table::. Gnuastro’s Table program, and all the other programs that can read from and write into tables, use the functions of this section for reading and writing their input/output tables. For a simple demonstration of using the constructs introduced here, see *note Library demo - reading and writing table columns::. Currently only plain text (see *note Gnuastro text table format::) and FITS (ASCII and binary) tables are supported by Gnuastro. However, the low-level table infra-structure is written such that accommodating other formats is also possible and in future releases more formats will hopefully be supported. Please don’t hesitate to suggest your favorite format so it can be implemented when possible. -- Macro: GAL_TABLE_DEF_WIDTH_STR -- Macro: GAL_TABLE_DEF_WIDTH_INT -- Macro: GAL_TABLE_DEF_WIDTH_LINT -- Macro: GAL_TABLE_DEF_WIDTH_FLT -- Macro: GAL_TABLE_DEF_WIDTH_DBL -- Macro: GAL_TABLE_DEF_PRECISION_INT -- Macro: GAL_TABLE_DEF_PRECISION_FLT -- Macro: GAL_TABLE_DEF_PRECISION_DBL The default width and precision for generic types to use in writing numeric types into a text file (plain text and FITS ASCII tables). When the dataset doesn’t have any pre-set width and precision (see ‘disp_width’ and ‘disp_precision’ in *note Generic data container::) these will be directly used in C’s ‘printf’ command to write the number as a string. -- Macro: GAL_TABLE_DISPLAY_FMT_STRING -- Macro: GAL_TABLE_DISPLAY_FMT_DECIMAL -- Macro: GAL_TABLE_DISPLAY_FMT_UDECIMAL -- Macro: GAL_TABLE_DISPLAY_FMT_OCTAL -- Macro: GAL_TABLE_DISPLAY_FMT_HEX -- Macro: GAL_TABLE_DISPLAY_FMT_FLOAT -- Macro: GAL_TABLE_DISPLAY_FMT_EXP -- Macro: GAL_TABLE_DISPLAY_FMT_GENERAL The display format used in C’s ‘printf’ to display data of different types. The ‘_STRING’ and ‘_DECIMAL’ are unique for printing strings and signed integers, they are mainly here for completeness. However, unsigned integers and floating points can be displayed in multiple formats: Unsigned integer For unsigned integers, it is possible to choose from ‘_UDECIMAL’ (unsigned decimal), ‘_OCTAL’ (octal notation, for example ‘125’ in decimal will be displayed as ‘175’), and ‘_HEX’ (hexadecimal notation, for example ‘125’ in decimal will be displayed as ‘7D’). Floating point For floating point, it is possible to display the number in ‘_FLOAT’ (floating point, for example ‘1500.345’), ‘_EXP’ (exponential, for example ‘1.500345e+03’), or ‘_GENERAL’ which is the best of the two for the given number. -- Macro: GAL_TABLE_FORMAT_INVALID -- Macro: GAL_TABLE_FORMAT_TXT -- Macro: GAL_TABLE_FORMAT_AFITS -- Macro: GAL_TABLE_FORMAT_BFITS All the current acceptable table formats to Gnuastro. The ‘AFITS’ and ‘BFITS’ represent FITS ASCII tables and FITS Binary tables. You can use these anywhere you see the ‘tableformat’ variable. -- Macro: GAL_TABLE_SEARCH_INVALID -- Macro: GAL_TABLE_SEARCH_NAME -- Macro: GAL_TABLE_SEARCH_UNIT -- Macro: GAL_TABLE_SEARCH_COMMENT When the desired column is not a number, these values determine if the string to match, or regular expression to search, be in the _name_, _units_ or _comments_ of the column meta data. These values should be used for the ‘searchin’ variables of the functions. -- Function: gal_data_t * gal_table_info (char ‘*filename’, char ‘*hdu’, size_t ‘*numcols’, size_t ‘*numrows’, int ‘*tableformat’) Store the information of each column in a table (either as a text file or as a FITS table) into an array of data structures with ‘numcols’ structures (one data structure for each column). The number of rows is stored in the space that ‘numrows’ points to. The format of the table (e.g., ascii text file, or FITS binary or ASCII table) will be put in ‘tableformat’ (macros defined above). If the filename is not a FITS file, then ‘hdu’ will not be used (can be ‘NULL’). Note that other than the character strings (column name, units and comments), nothing in the data structure(s) will be allocated by this function for the actual data (e.g., the ‘array’ or ‘dsize’ elements). This function is just for column information (meta-data), not column contents. -- Function: void gal_table_print_info (gal_data_t ‘*allcols’, size_t ‘numcols’, size_t ‘numrows’) This program will print the column information for all the columns (output of ‘gal_table_info’). The output is in the same format as this command with Gnuastro Table program (see *note Table::): $ asttable --info table.fits -- Function: gal_data_t * gal_table_read (char ‘*filename’, char ‘*hdu’, gal_list_str_t ‘*cols’, int ‘searchin’, int ‘ignorecase’, int ‘minmapsize’, size_t ‘colmatch’) Read the specified columns in a text file (named ‘filename’) into a linked list of data structures. If the file is FITS, then ‘hdu’ will also be used, otherwise, ‘hdu’ is ignored. The information to search for columns should be specified by the ‘cols’ list of strings (see *note List of strings::). The string in each node of the list may be a number, an exact match to a column name, or a regular expression (in GNU AWK format) enclosed in ‘/ /’. The ‘searchin’ value must be one of the macros defined above. If ‘cols’ is NULL, then this function will read the full table. The output is an individually allocated list of datasets (see *note List of gal_data_t::) with the same order of the ‘cols’ list. Note that one column node in the ‘cols’ list might give multiple columns (for example from regular expressions), in this case, the order of output columns that correspond to that one input, are in order of the table (which column was read first). So the first requested column is the first popped data structure and so on. if ‘colmatch!=NULL’, it is assumed to be an array that has at least the same number of elements as nodes in the ‘cols’ list. The number of columns that matched each input column will be stored in each element. -- Function: void gal_table_comments_add_intro (gal_list_str_t ‘**comments’, char ‘*program_string’, time_t ‘*rawtime’) Add some basic information to the list of ‘comments’. This basic information includes the following information • If the program is run in a Git version controlled directory, Git’s description is printed (see description under ‘COMMIT’ in *note Output headers::). • The calendar time that is stored in ‘rawtime’ (‘time_t’ is C’s calendar time format defined in ‘time.h’). You can calculate the time in this format with the following expressions: time_t rawtime; time(&rawtime); • The name of your program in ‘program_string’. If it is ‘NULL’, this line is ignored. -- Function: void gal_table_write (gal_data_t ‘*cols’, gal_list_str_t ‘*comments’, int ‘tableformat’, char ‘*filename’, char ‘*extname’) Write the ‘cols’ list of datasets into a table in ‘filename’ (see *note List of gal_data_t::). The format of the table can be determined with ‘tableformat’ that accepts the macros defined above. If ‘comments’ is not ‘NULL’, then the list of comments will also be printed into the output table. When the output table is a plain text file, each node’s string will be printed after a ‘#’ (so it can be considered as a comment) and in FITS table they will follow a ‘COMMENT’ keyword. If ‘filename’ is a FITS file, the table extension that will be written will have the name ‘extname’. If a file named ‘filename’ already exists, the operation depends on the type of output. When ‘filename’ is a FITS file, the table will be added as a new extension after all existing ones. If ‘filename’ is a plain text file, this function will abort with an error. -- Function: void gal_table_write_log (gal_data_t ‘*logll’, char ‘*program_string’, time_t ‘*rawtime’, gal_list_str_t ‘*comments’, char ‘*filename’, int ‘quiet’) Write the ‘logll’ list of datasets into a table in ‘filename’ (see *note List of gal_data_t::). This function is just a wrapper around ‘gal_table_comments_add_intro’ and ‘gal_table_write’ (see above). If ‘quiet’ is non-zero, this function will print a message saying that the ‘filename’ has been created.  File: gnuastro.info, Node: Arithmetic on datasets, Next: Tessellation library, Prev: Table input output, Up: Gnuastro library 10.3.12 Arithmetic on datasets (‘arithmetic.h’) ----------------------------------------------- When the dataset’s type and other information are already known, any programming language (including C) provides some very good tools for various operations (including arithmetic operations like addition) on the dataset with a simple loop. However, as an author of a program, making assumptions about the type of data, its dimensions and other basic characteristics will come with a large processing burden. For example if you always read your data as double precision floating points for a simple operation like addition with an integer constant, you will be wasting a lot of CPU and memory when the input dataset is ‘int32’ type for example (see *note Numeric data types::). This overhead may be small for small images, but as you scale your process up and work with hundred/thousands of files that can be very large, this overhead will take a significant portion of the processing power. The functions and macros in this section are designed precisely for this purpose: to allow you to do any of the defined operations on any dataset with no overhead (in the native type of the dataset). Gnuastro’s Arithmetic program uses the functions and macros of this section, so please also have a look at the *note Arithmetic:: program and in particular *note Arithmetic operators:: for a better description of the operators discussed here. The main function of this library is ‘gal_arithmetic’ that is described below. It can take an arbitrary number of arguments as operands (depending on the operator, similar to ‘printf’). Its first two arguments are integers specifying the flags and operator. So first we will review the constants for the recognized flags and operators and discuss them, then introduce the actual function. -- Macro: GAL_ARITHMETIC_INPLACE -- Macro: GAL_ARITHMETIC_FREE -- Macro: GAL_ARITHMETIC_NUMOK -- Macro: GAL_ARITHMETIC_FLAGS_ALL Bit-wise flags to pass onto ‘gal_arithmetic’ (see below). To pass multiple flags, use the bitwise-or operator, for example ‘GAL_ARITHMETIC_INPLACE | GAL_ARITHMETIC_FREE’. ‘GAL_ARITHMETIC_FLAGS_ALL’ is a combination of all flags to shorten your code if you want all flags activated. Each flag is described below: ‘GAL_ARITHMETIC_INPLACE’ Do the operation in-place (in the input dataset, thus modifying it) to improve CPU and memory usage. If this flag is used, after ‘gal_arithmetic’ finishes, the input dataset will be modified. It is thus useful if you have no more need for the input after the operation. ‘GAL_ARITHMETIC_FREE’ Free (all the) input dataset(s) after the operation is done. Hence the inputs are no longer usable after ‘gal_arithmetic’. ‘GAL_ARITHMETIC_NUMOK’ It is acceptable to use a number and an array together. For example if you want to add all the pixels in an image with a single number you can pass this flag to avoid having to allocate a constant array the size of the image (with all the pixels having the same number). -- Macro: GAL_ARITHMETIC_OP_PLUS -- Macro: GAL_ARITHMETIC_OP_MINUS -- Macro: GAL_ARITHMETIC_OP_MULTIPLY -- Macro: GAL_ARITHMETIC_OP_DIVIDE -- Macro: GAL_ARITHMETIC_OP_LT -- Macro: GAL_ARITHMETIC_OP_LE -- Macro: GAL_ARITHMETIC_OP_GT -- Macro: GAL_ARITHMETIC_OP_GE -- Macro: GAL_ARITHMETIC_OP_EQ -- Macro: GAL_ARITHMETIC_OP_NE -- Macro: GAL_ARITHMETIC_OP_AND -- Macro: GAL_ARITHMETIC_OP_OR Binary operators (requiring two operands) that accept datasets of any recognized type (see *note Numeric data types::). When ‘gal_arithmetic’ is called with any of these operators, it expects two datasets as arguments. For a full description of these operators with the same name, see *note Arithmetic operators::. The first dataset/operand will be put on the left of the operator and the second will be put on the right. The output type of the first four is determined from the input types (largest type of the inputs). The rest (which are all conditional operators) will output a binary ‘uint8_t’ (or ‘unsigned char’) dataset with values of either ‘0’ (zero) or ‘1’ (one). -- Macro: GAL_ARITHMETIC_OP_NOT The logical NOT operator. When ‘gal_arithmetic’ is called with this operator, it only expects one operand (dataset), since this is a unary operator. The output is ‘uint8_t’ (or ‘unsigned char’) dataset of the same size as the input. Any non-zero element in the input will be ‘0’ (zero) in the output and any ‘0’ (zero) will have a value of ‘1’ (one). -- Macro: GAL_ARITHMETIC_OP_ISBLANK A unary operator with output that is ‘1’ for any element in the input that is blank, and ‘0’ for any non-blank element. When ‘gal_arithmetic’ is called with this operator, it will only expect one input dataset. The output dataset will have ‘uint8_t’ (or ‘unsigned char’) type. ‘gal_arithmetic’ with this operator is just a wrapper for the ‘gal_blank_flag’ function of *note Library blank values:: and this operator is just included for completeness in arithmetic operations. So in your program, it might be easier to just call ‘gal_blank_flag’. -- Macro: GAL_ARITHMETIC_OP_WHERE The three-operand _where_ operator thoroughly discussed in *note Arithmetic operators::. When ‘gal_arithmetic’ is called with this operator, it will only expect three input datasets: the first (which is the same as the returned dataset) is the array that will be modified. The second is the condition dataset (that must have a ‘uint8_t’ or ‘unsigned char’ type), and the third is the value to be used if condition is non-zero. As a result, note that the order of operands when calling ‘gal_arithmetic’ with ‘GAL_ARITHMETIC_OP_WHERE’ is the opposite of running Gnuastro’s Arithmetic program with the ‘where’ operator (see *note Arithmetic::). This is because the latter uses the reverse-Polish notation which isn’t necessary when calling a function (see *note Reverse polish notation::). -- Macro: GAL_ARITHMETIC_OP_SQRT -- Macro: GAL_ARITHMETIC_OP_LOG -- Macro: GAL_ARITHMETIC_OP_LOG10 Unary operator functions for calculating the square root ($\sqrt{i}$), $ln(i)$ and $log(i)$ mathematic operators on each element of the input dataset. The output will have the same type as the input, so if your inputs are integer types be careful. If you want your output to be floating point but your input is an integer type, you can convert the input to a floating point type with ‘gal_data_copy_to_new_type’ or ‘gal_data_copy_to_new_type_free’(see *note Copying datasets::). -- Macro: GAL_ARITHMETIC_OP_MINVAL -- Macro: GAL_ARITHMETIC_OP_MAXVAL -- Macro: GAL_ARITHMETIC_OP_NUMVAL -- Macro: GAL_ARITHMETIC_OP_SUMVAL -- Macro: GAL_ARITHMETIC_OP_MEANVAL -- Macro: GAL_ARITHMETIC_OP_STDVAL -- Macro: GAL_ARITHMETIC_OP_MEDIANVAL Unary operand statistical operators that will return a single value for datasets of any size. These are just wrappers around similar functions in *note Statistical operations:: and are included in ‘gal_arithmetic’ only for completeness (to use easily in *note Arithmetic::). In your programs, it will probably be easier if you use those ‘gal_statistics_’ functions directly. -- Macro: GAL_ARITHMETIC_OP_ABS Unary operand absolute-value operator. -- Macro: GAL_ARITHMETIC_OP_MIN -- Macro: GAL_ARITHMETIC_OP_MAX -- Macro: GAL_ARITHMETIC_OP_NUM -- Macro: GAL_ARITHMETIC_OP_SUM -- Macro: GAL_ARITHMETIC_OP_MEAN -- Macro: GAL_ARITHMETIC_OP_STD -- Macro: GAL_ARITHMETIC_OP_MEDIAN Multi-operand statistical operations. When ‘gal_arithmetic’ is called with any of these operators, it will expect only a single operand that will be interpretted as a list of datasets (see *note List of gal_data_t::. The output will be a single dataset with each of its elements replaced by the respective statistical operation on the whole list. See the discussion under the ‘min’ operator in *note Arithmetic operators::. -- Macro: GAL_ARITHMETIC_OP_POW Binary operator to-power operator. When ‘gal_arithmetic’ is called with any of these operators, it will expect two operands: raising the first by the second. This operator only accepts floating point inputs and the output is also floating point. -- Macro: GAL_ARITHMETIC_OP_BITAND -- Macro: GAL_ARITHMETIC_OP_BITOR -- Macro: GAL_ARITHMETIC_OP_BITXOR -- Macro: GAL_ARITHMETIC_OP_BITLSH -- Macro: GAL_ARITHMETIC_OP_BITRSH -- Macro: GAL_ARITHMETIC_OP_MODULO Binary integer-only operand operators. These operators are only defined on integer data types. When ‘gal_arithmetic’ is called with any of these operators, it will expect two operands: the first is put on the left of the operator and the second on the right. The ones starting with ‘BIT’ are the respective bit-wise operators in C and ‘MODULO’ is the modulo/remainder operator. For a discussion on these operators, please see *note Arithmetic operators::. The output type is determined from the input types and C’s internal conversions: it is strongly recommended that both inputs have the same type (any integer type), otherwise the bit-wise behavior will be determined by your compiler. -- Macro: GAL_ARITHMETIC_OP_BITNOT The unary bit-wise NOT operator. When ‘gal_arithmetic’ is called with any of these operators, it will expect one operand of an integer type and preform the bitwise-NOT operation on it. The output will have the same type as the input. -- Macro: GAL_ARITHMETIC_OP_TO_UINT8 -- Macro: GAL_ARITHMETIC_OP_TO_INT8 -- Macro: GAL_ARITHMETIC_OP_TO_UINT16 -- Macro: GAL_ARITHMETIC_OP_TO_INT16 -- Macro: GAL_ARITHMETIC_OP_TO_UINT32 -- Macro: GAL_ARITHMETIC_OP_TO_INT32 -- Macro: GAL_ARITHMETIC_OP_TO_UINT64 -- Macro: GAL_ARITHMETIC_OP_TO_INT64 -- Macro: GAL_ARITHMETIC_OP_TO_FLOAT32 -- Macro: GAL_ARITHMETIC_OP_TO_FLOAT64 Unary type-conversion operators. When ‘gal_arithmetic’ is called with any of these operators, it will expect one operand and convert it to the requested type. Note that with these operators, ‘gal_arithmetic’ is just a wrapper over the ‘gal_data_copy_to_new_type’ or ‘gal_data_copy_to_new_type_free’ that are discussed in ‘Copying datasets’. It accepts these operators only for completeness and easy usage in *note Arithmetic::. So in your programs, it might be preferable to directly use those functions. -- Function: gal_data_t * gal_arithmetic (int operator, int flags, ...) Do the arithmetic operation of ‘operator’ on the given operands (the third argument and any further argument). Certain special conditions can also be specified with the ‘flag’ operator. The acceptable values for ‘operator’ are defined in the macros above. ‘gal_arithmetic’ is a multi-argument function (like C’s ‘printf’). In other words, the number of necessary arguments is not fixed and depends on the value to ‘operator’. Here are a few examples showing this variability: out_1=gal_arithmetic(GAL_ARITHMETIC_OP_LOG, 0, in_1); out_2=gal_arithmetic(GAL_ARITHMETIC_OP_PLUS, 0, in_1, in_2); out_3=gal_arithmetic(GAL_ARITHMETIC_OP_WHERE, 0, in_1, in_2, in_3); The number of necessary operands for each operator (and thus the number of necessary arguments to ‘gal_arithmetic’) are described above under each operator.  File: gnuastro.info, Node: Tessellation library, Next: Bounding box, Prev: Arithmetic on datasets, Up: Gnuastro library 10.3.13 Tessellation library (‘tile.h’) --------------------------------------- In many contexts, it is desirable to slice the dataset into subsets or tiles (overlapping or not). In such a way that you can work on each tile independently. One method would be to copy that region to a separate allocated space, but in many contexts this isn’t necessary and in fact can be a big burden on CPU/Memory usage. The ‘block’ pointer in Gnuastro’s *note Generic data container:: is defined for such situations: where allocation is not necessary. You just want to read the data or write to it independently (or in coordination with) other regions of the dataset. Added with parallel processing, this can greatly improve the time/memory consumption. See the figure below for example: assume the ‘larger’ dataset is a contiguous block of memory that you are interpreting as a 2D array. But you only want to work on the smaller ‘tile’ region. larger --------------------------------- | | | tile | | ---------- | | | | | | |_ | | | |*| | | | ---------- | | tile->block = larger | |_ | |*| | --------------------------------- To use ‘gal_data_t’’s ‘block’ concept, you allocate a ‘gal_data_t *tile’ which is initialized with the pointer to the first element in the sub-array (as its ‘array’ argument). Note that this is not necessarily the first element in the larger array. You can set the size of the tile along with the initialization as you please. Recall that, when given a non-‘NULL’ pointer as ‘array’, ‘gal_data_initialize’ (and thus ‘gal_data_alloc’) do not allocate any space and just uses the given pointer for the new ‘array’ element of the ‘gal_data_t’. So your ‘tile’ data structure will not be pointing to a separately allocated space. After the allocation is done, you just point ‘tile->block’ to the ‘larger’ dataset which hosts the full block of memory. Where relevant, Gnuastro’s library functions will check the ‘block’ pointer of their input dataset to see how to deal with dimensions and increments so they can always remain within the tile. The tools introduced in this section are designed to help in defining and working with tiles that are created in this manner. Since the block structure is defined as a pointer, arbitrary levels of tessellation/grid-ing are possible (‘tile->block’ may itself be a tile in an even larger allocated space). Therefore, just like a linked-list (see *note Linked lists::), it is important to have the ‘block’ pointer of the largest (allocated) dataset set to ‘NULL’. Normally, you won’t have to worry about this, because ‘gal_data_initialize’ (and thus ‘gal_data_alloc’) will set the ‘block’ element to ‘NULL’ by default, just remember not to change it. You can then only change the ‘block’ element for the tiles you define over the allocated space. Below, we will first review constructs for *note Independent tiles:: and then define the current approach to fully tessellating a dataset (or covering every pixel/data-element with a non-overlapping tile grid in *note Tile grid::. This approach to dealing with parts of a larger block was inspired from a similarly named concept in the GNU Scientific Library (GSL), see its “Vectors and Matrices†chapter for their implementation. * Menu: * Independent tiles:: Work on or check independent tiles. * Tile grid:: Cover a full dataset with non-overlapping tiles.  File: gnuastro.info, Node: Independent tiles, Next: Tile grid, Prev: Tessellation library, Up: Tessellation library 10.3.13.1 Independent tiles ........................... The most general application of tiles is to treat each independently, for example they may overlap, or they may not cover the full image. This section provides functions to help in checking/inspecting such tiles. In *note Tile grid:: we will discuss functions that define/work-with a tile grid (where the tiles don’t overlap and fully cover the input dataset). Therefore, the functions in this section are general and can be used for the tiles produced by that section also. -- Function: void gal_tile_start_coord (gal_data_t ‘*tile’, size_t ‘*start_coord’) Calculate the starting coordinates of a tile in its allocated block of memory and write them in the memory that ‘start_coord’ points to (which must have ‘tile->ndim’ elements). -- Function: void gal_tile_start_end_coord (gal_data_t ‘*tile’, size_t ‘*start_end’, int ‘rel_block’) Put the starting and ending (end point is not inclusive) coordinates of ‘tile’ into the ‘start_end’ array. It is assumed that a space of ‘2*tile->ndim’ has been already allocated (static or dynamic) for ‘start_end’ before this function is called. ‘rel_block’ (or relative-to-block) is only relevant when ‘tile’ has an intermediate tile between it and the allocated space (like a channel, see ‘gal_tile_full_two_layers’). If it doesn’t (‘tile->block’ points the allocated dataset), then the value to ‘rel_block’ is irrelevant. When ‘tile->block’ is its self a larger block and ‘rel_block’ is set to 0, then the starting and ending positions will be based on the position within ‘tile->block’, not the allocated space. -- Function: void * gal_tile_start_end_ind_inclusive (gal_data_t ‘*tile’, gal_data_t ‘*work’, size_t ‘*start_end_inc’) Put the indexs of the first/start and last/end pixels (inclusive) in a tile into the ‘start_end’ array (that must have two elements). NOTE: this function stores the index of each point, not its coordinates. It will then return the pointer to the start of the tile in the ‘work’ data structure (which doesn’t have to be equal to ‘tile->block’. The outputs of this function are defined to make it easy to parse over an n-dimensional tile. For example, this function is one of the most important parts of the internal processing of in ‘GAL_TILE_PARSE_OPERATE’ function-like macro that is described below. -- Function: gal_data_t * gal_tile_series_from_minmax (gal_data_t ‘*block’, size_t ‘*minmax’, size_t ‘number’) Construct a list of tile(s) given coordinates of the minimum and maximum of each tile. The minimum and maximums are assumed to be inclusive. The returned pointer is an allocated ‘gal_data_t’ array that can later be freed with ‘gal_data_array_free’ (see *note Arrays of datasets::). Internally, each element of the output array points to the next element, so the output may also be treated as a list of datasets (see *note List of gal_data_t::) and passed onto the other functions described in this section. The array keeping the minimum and maximum coordinates for each tile must have the following format. So in total ‘minmax’ must have ‘2*ndim*number’ elements. | min0_d0 | min0_d1 | max0_d0 | max0_d1 | ... ... | minN_d0 | minN_d1 | maxN_d0 | maxN_d1 | -- Function: gal_data_t * gal_tile_block (gal_data_t ‘*tile’) Return the dataset that contains ‘tile’’s allocated block of memory. If tile is immediately defined as part of the allocated block, then this is equivalent to ‘tile->block’. However, it is possible to have multiple layers of tiles (where ‘tile->block’ is itself a tile). So this function is the most generic way to get to the actual allocated dataset. -- Function: size_t gal_tile_block_increment (gal_data_t ‘*block’, size_t ‘*tsize’, size_t ‘num_increment’, size_t ‘*coord’) Return the increment necessary to start at the next contiguous patch memory associated with a tile. ‘block’ is the allocated block of memory and ‘tsize’ is the size of the tile along every dimension. If ‘coord’ is ‘NULL’, it is ignored. Otherwise, it will contain the coordinate of the start of the next contiguous patch of memory. This function is intended to be used in a loop and ‘num_increment’ is the main variable to this function. For the first time you call this function, it should be ‘1’. In subsequent calls (while you are parsing a tile), it should be increased by one. -- Function: gal_data_t * gal_tile_block_write_const_value (gal_data_t ‘*tilevalues’, gal_data_t ‘*tilesll’, int ‘withblank’, int ‘initialize’) Write a constant value for each tile over the area it covers in an allocated dataset that is the size of ‘tile’’s allocated block of memory (found through ‘gal_tile_block’ described above). The arguments to this function are: ‘tilevalues’ This must be an array that has the same number of elements as the nodes in in ‘tilesll’ and in the same order that ‘tilesll’ elements are parsed (from top to bottom, see *note Linked lists::). As a result the array’s number of dimensions is irrelevant, it will be parsed contiguously. ‘tilesll’ The list of input tiles (see *note List of gal_data_t::). Internally, it might be stored as an array (for example the output of ‘gal_tile_series_from_minmax’ described above), but this function doesn’t care, it will parse the ‘next’ elements to go to the next tile. This function will not pop-from or free the ‘tilesll’, it will only parse it from start to end. ‘withblank’ If the block containing the tiles has blank elements, those blank elements will be blank in the output of this function also, hence the array will be initialized with blank values when this option is called (see below). ‘initialize’ Initialize the allocated space with blank values before writing in the constant values. This can be useful when the tiles don’t cover the full allocated block. -- Function: gal_data_t * gal_tile_block_check_tiles (gal_data_t ‘*tilesll’) Make a copy of the memory block and fill it with the index of each tile in ‘tilesll’ (counting from 0). The non-filled areas will have blank values. The output dataset will have a type of ‘GAL_TYPE_INT32’ (see *note Library data types::). This function can be used when you want to check the coverage of each tile over the allocated block of memory. It is just a wrapper over the ‘gal_tile_block_write_const_value’ (with ‘withblank’ set to zero). -- Function: void * gal_tile_block_relative_to_other (gal_data_t ‘*tile’, gal_data_t ‘*other’) Return the pointer corresponding to the start of the region covered by ‘tile’ over the ‘other’ dataset. See the examples in ‘GAL_TILE_PARSE_OPERATE’ for some example applications of this function. -- Function: void gal_tile_block_blank_flag (gal_data_t ‘*tilell’, size_t ‘numthreads’) Check if each tile in the list has blank values and update its ‘flag’ to mark this check and its result (see *note Generic data container::). The operation will be done on ‘numthreads’ threads. -- Function-like macro: GAL_TILE_PARSE_OPERATE (‘IN’, ‘OTHER’, ‘PARSE_OTHER’, ‘CHECK_BLANK’, ‘OP’) Parse ‘IN’ (which can be a tile or a fully allocated block of memory) and do the ‘OP’ operation on it. ‘OP’ can be any combination of C expressions. If ‘OTHER!=NULL’, ‘OTHER’ will be interpretted as a dataset and this macro will allow access to its element(s) and it can optionally be parsed while parsing over ‘IN’. If ‘OTHER’ is a fully allocated block of memory (not a tile), then the same region that is covered by ‘IN’ within its own block will be parsed (the same starting pixel with the same number of pixels in each dimension). Hence, in this case, the blocks of ‘OTHER’ and ‘IN’ must have the same size. When ‘OTHER’ is a tile it must have the same size as ‘IN’ and parsing will start from its starting element/pixel. Also, the respective allocated blocks of ‘OTHER’ and ‘IN’ (if different) may have different sizes. Using ‘OTHER’ (along with ‘PARSE_OTHER’), this funciton-like macro will thus enable you to parse and define your own operation on two fixed size regions in one or two blocks of memory. In the latter case, they may have different numeric datatypes, see *note Numeric data types::). The input arguments to this macro are explained below, the expected type of each argument are also written following the argument name: ‘IN (gal_data_t)’ Input dataset, this can be a tile or an allocated block of memory. ‘OTHER (gal_data_t)’ Dataset (‘gal_data_t’) to parse along with ‘IN’. It can be ‘NULL’. In that case, ‘o’ (see description of ‘OP’ below) will be ‘NULL’ and should not be used. If ‘PARSE_OTHER’ is zero, only its first element will be used and the size of this dataset is irrelevant. When ‘OTHER’ is a block of memory, it has to have the same size as the allocated block of ‘IN’. When its a tile, it has to have the same size as ‘IN’. ‘PARSE_OTHER (int)’ Parse the other dataset along with the input. When this is non-zero and ‘OTHER!=NULL’, then the ‘o’ pointer will be incremented to cover the ‘OTHER’ tile at the same rate as ‘i’, see description of ‘OP’ for ‘i’ and ‘o’. ‘CHECK_BLANK (int)’ If it is non-zero, then the input will be checked for blank values and ‘OP’ will only be called when we are not on a blank element. ‘OP’ Operator: this can be any number of C expressions. This macro is going to define a ‘itype *i’ variable which will increment over each element of the input array/tile. ‘itype’ will be replaced with the C type that corresponds to the type of ‘INPUT’. As an example, if ‘INPUT’’s type is ‘GAL_DATA_UINT16’ or ‘GAL_DATA_FLOAT32’, ‘i’ will be defined as ‘uint16’ or ‘float’ respectively. This function-like macro will also define an ‘otype *o’ which you can use to access an element of the ‘OTHER’ dataset (if ‘OTHER!=NULL’). ‘o’ will correspond to the type of ‘OTHER’ (similar to ‘itype’ and ‘INPUT’ discussed above). If ‘PARSE_OTHER’ is non-zero, then ‘o’ will also be incremented to the same index element but in the other array. You can use these along with any other variable you define before this macro to process the input and store it in the other. All variables within this function-like macro begin with ‘tpo_’ except for the three variables listed above. So as long as you don’t start the names of your variables with this prefix everything will be fine. Note that ‘i’ (and possibly ‘o’) will be incremented once by this function-like macro, so don’t increment them within ‘OP’. As a summary, the three variables you have access to within ‘OP’ are: ‘i’ Pointer to the element of ‘INPUT’ that is being parsed with the proper type. ‘o’ Pointer to the element of ‘OTHER’ that is being parsed with the proper type. ‘o’ can only be used if ‘OTHER!=NULL’ and it will be parsed/incremented if ‘PARSE_OTHER’ is non-zero. ‘b’ Blank value in the type of ‘INPUT’. You can use a given tile (‘tile’ on a dataset that it was not initialized with but has the same size, let’s call it ‘new’) with the following steps: void *tarray; gal_data_t *tblock; /* `tile->block' must be corrected AFTER `tile->array'. */ tarray = tile->array; tblock = tile->block; tile->array = gal_tile_block_relative_to_other(tile, new); tile->block = new; /* Parse and operate over this region of the `new' dataset. */ GAL_TILE_PARSE_OPERATE(tile, NULL, 0, 0, { YOUR_PROCESSING; }); /* Reset `tile->block' and `tile->array'. */ tile->array=tarray; tile->block=tblock; You can work on the same region of another block in one run of this function-like macro. To do that, you can make a fake tile and pass that as the ‘OTHER’ argument. Below is a demonstration, ‘tile’ is the actual tile that you start with and ‘new’ is the other block of allocated memory. size_t zero=0; gal_data_t *faketile; /* Allocate the fake tile, these can be done outside a loop * (over many tiles). */ faketile=gal_data_alloc(NULL, new->type, 1, &zero, NULL, 0, -1, NULL, NULL, NULL); free(faketile->array); /* To keep things clean. */ free(faketile->dsize); /* To keep things clean. */ faketile->block = new; faketile->ndim = new->ndim; /* These can be done in a loop (over many tiles). */ faketile->size = tile->size; faketile->dsize = tile->dsize; faketile->array = gal_tile_block_relative_to_other(tile, new); /* Do your processing.... in a loop (over many tiles). */ GAL_TILE_PARSE_OPERATE(tile, faketile, 1, 1, { YOUR_PROCESSING_EXPRESSIONS; }); /* Clean up (outside the loop). */ faketile->array=NULL; faketile->dsize=NULL; gal_data_free(faketile);  File: gnuastro.info, Node: Tile grid, Prev: Independent tiles, Up: Tessellation library 10.3.13.2 Tile grid ................... One very useful application of tiles is to completely cover an input dataset with tiles. Such that you know every pixel/data-element of the input image is covered by only one tile. The constructs in this section allow easy definition of such a tile structure. They will create lists of tiles that are also usable by the general tools discussed in *note Independent tiles::. As discussed in *note Tessellation::, (mainly raw) astronomical images will mostly require two layers of tessellation, one for amplifier channels which all have the same size and another (smaller tile-size) tessellation over each channel. Hence, in this section we define a general structure to keep the main parameters of this two-layer tessellation and help in benefiting from it. -- Type (C ‘struct’): gal_tile_two_layer_params This is the general structure to keep all the necessary parameters for a two-layer tessellation. struct gal_tile_two_layer_params { /* Inputs */ size_t *tilesize; /*******************************/ size_t *numchannels; /* These parameters have to be */ float remainderfrac; /* filled manually before */ uint8_t workoverch; /* calling the functions in */ uint8_t checktiles; /* this section. */ uint8_t oneelempertile; /*******************************/ /* Internal parameters. */ size_t ndim; size_t tottiles; size_t tottilesinch; size_t totchannels; size_t *channelsize; size_t *numtiles; size_t *numtilesinch; char *tilecheckname; size_t *permutation; size_t *firsttsize; /* Tile and channel arrays (which are also lists). */ gal_data_t *tiles; gal_data_t *channels; }; -- Function: size_t * gal_tile_full (gal_data_t ‘*input’, size_t ‘*regular’, float ‘remainderfrac’, gal_data_t ‘**out’, size_t ‘multiple’, size_t ‘**firsttsize’) Cover the full dataset with (mostly) identical tiles and return the number of tiles created along each dimension. The regular tile size (along each dimension) is determined from the ‘regular’ array. If ‘input’’s size is not an exact multiple of ‘regular’ for each dimension, then the tiles touching the edges in that dimension will have a different size to fully cover every element of the input (depending on ‘remainderfrac’). The output is an array with the same dimensions as ‘input’ which contains the number of tiles along each dimension. See *note Tessellation:: for a description of its application in Gnuastro’s programs and ‘remainderfrac’, just note that this function defines only one layer of tiles. This is a low-level function (independent of the ‘gal_tile_two_layer_params’ structure defined above). If you want a two-layer tessellation, directly call ‘gal_tile_full_two_layers’ that is described below. The input arguments to this function are: ‘input’ The main dataset (allocated block) which you want to create a tessellation over (only used for its sizes). So ‘input’ may be a tile also. ‘regular’ The the size of the regular tiles along each of the input’s dimensions. So it must have the same number of elements as the dimensions of ‘input’ (or ‘input->ndim’). ‘remainderfrac’ The significant fraction of the remainder space to see if it should be split into two and put on both sides of a dimension or not. This is thus only relevant ‘input’ length along a dimension isn’t an exact multiple of the regular tile size along that dimension. See *note Tessellation:: for a more thorough discussion. ‘out’ Pointer to the array of data structures that will keep all the tiles (see *note Arrays of datasets::). If ‘*out==NULL’, then the necessary space to keep all the tiles will be allocated. If not, then all the tile information will be filled from the dataset that ‘*out’ points to, see ‘multiple’ for more. ‘multiple’ When ‘*out==NULL’ (and thus will be allocated by this function), allocate space for ‘multiple’ times the number of tiles needed. This can be very useful when you have several more identically sized ‘inputs’, and you want all their tiles to be allocated (and thus indexed) together, even though they have different ‘block’ datasets (that then link to one allocated space). See the definition of channels in *note Tessellation:: and ‘gal_tile_full_two_layers’ below. ‘firsttsize’ The size of the first tile along every dimension. This is only different from the regular tile size when ‘regular’ is not an exact multiple of ‘input’’s length along every dimension. This array is allocated internally by this function. -- Function: void gal_tile_full_sanity_check (char ‘*filename’, char ‘*hdu’, gal_data_t ‘*input’, struct gal_tile_two_layer_params ‘*tl’) Make sure that the input parameters (in ‘tl’, short for two-layer) correspond to the input dataset. ‘filename’ and ‘hdu’ are only required for error messages. Also, allocate and fill the ‘tl->channelsize’ array. -- Function: void gal_tile_full_two_layers (gal_data_t ‘*input’, struct gal_tile_two_layer_params ‘*tl’) Create the two layered tessellation in ‘tl’. The general set of steps you need to take to define the two-layered tessellation over an image can be seen in the example code below. gal_data_t *input; struct gal_tile_two_layer_params tl; char *filename="input.fits", *hdu="1"; /* Set all the inputs shown in the structure definition. */ ... /* Read the input dataset. */ input=gal_fits_img_read(filename, hdu, -1, 0, 0); /* Do a sanity check and preparations. */ gal_tile_full_sanity_check(filename, hdu, input, &tl); /* Build the two-layer tessellation*/ gal_tile_full_two_layers(input, &tl); /* `tl.tiles' and `tl.channels' are now a lists of tiles.*/ -- Function: void gal_tile_full_permutation (struct gal_tile_two_layer_params ‘*tl’) Make a permutation to allow the conversion of tile location in memory to its location in the full input dataset and put it in ‘tl->permutation’. If a permutation has already been defined for the tessellation, this function will not do anything. If permutation won’t be necessary (there is only one channel or one dimension), then this function will not do anything (‘tl->permutation’ must have been initialized to ‘NULL’). When there is only one channel OR one dimension, the tiles are allocated in memory in the same order that they represent the input data. However, to make channel-independent processing possible in a generic way, the tiles of each channel are allocated contiguously. So, when there is more than one channel AND more than one dimension, the index of the tile does not correspond to its position in the grid covering the input dataset. The example below may help clarify: assume you have a 6x6 tessellation with two channels in the horizontal and one in the vertical. On the left you can see how the tile IDs correspond to the input dataset. NOTE how ‘03’ is on the second row, not on the first after ‘02’. On the right, you can see how the tiles are stored in memory (and shown if you simply write the array into a FITS file for example). Corresponding to input In memory ---------------------- -------------- 15 16 17 33 34 35 30 31 32 33 34 35 12 13 14 30 31 32 24 25 26 27 28 29 09 10 11 27 28 29 18 19 20 21 22 23 06 07 08 24 25 26 <-- 12 13 14 15 16 17 03 04 05 21 22 23 06 07 08 09 10 11 00 01 02 18 19 20 00 01 02 03 04 05 As a result, if your values are stored in same order as the tiles, and you want them in over-all memory (for example to save as a FITS file), you need to permute the values: gal_permutation_apply(values, tl->permutation); If you have values over-all and you want them in tile-order, you can apply the inverse permutation: gal_permutation_apply_inverse(values, tl->permutation); Recall that this is the definition of permutation in this context: permute: IN_ALL[ i ] = IN_MEMORY[ perm[i] ] inverse: IN_ALL[ perm[i] ] = IN_MEMORY[ i ] -- Function: void gal_tile_full_values_write (gal_data_t ‘*tilevalues’, struct gal_tile_two_layer_params ‘*tl’, int ‘withblank’, char ‘*filename’, gal_fits_list_key_t ‘*keys’, char ‘*program_string’) Write one value for each tile into a file. It is important to note that the values in ‘tilevalues’ must be ordered in the same manner as the tiles, so ‘tilevalues->array[i]’ is the value that should be given to ‘tl->tiles[i]’. The ‘tl->permutation’ array must have been initialized before calling this function with ‘gal_tile_full_permutation’. If ‘withblank’ is non-zero, then block structure of the tiles will be checked and all blank pixels in the block will be blank in the final output file also. -- Function: gal_data_t * gal_tile_full_values_smooth (gal_data_t ‘*tilevalues’, struct gal_tile_two_layer_params ‘*tl’, size_t ‘width’, size_t ‘numthreads’) Smooth the given values with a flat kernel of the given ‘width’. This cannot be done manually because if ‘tl->workoverch==0’, tiles in different channels must not be mixed/smoothed. Also the tiles are contiguous within the channel, not within the image, see the description under ‘gal_tile_full_permutation’. -- Function: size_t gal_tile_full_id_from_coord (struct gal_tile_two_layer_params ‘*tl’, size_t ‘*coord’) Return the ID of the tile that corresponds to the coordinates ‘coord’. Having this ID, you can use the ‘tl->tiles’ array to get to the proper tile or read/write a value into an array that has one value per tile. -- Function: void gal_tile_full_free_contents (struct gal_tile_two_layer_params ‘*tl’) Free all the allocated arrays within ‘tl’.  File: gnuastro.info, Node: Bounding box, Next: Polygons, Prev: Tessellation library, Up: Gnuastro library 10.3.14 Bounding box (‘box.h’) ------------------------------ Functions related to reporting a the bounding box of certain inputs are declared in ‘gnuastro/box.h’. All coordinates in this header are in the FITS format (first axis is the horizontal and the second axis is vertical). -- Function: void gal_box_bound_ellipse_extent (double ‘a’, double ‘b’, double ‘theta_deg’, double ‘*extent’) Return the maximum extent along each dimension of the given ellipse from the center of the ellipse. Therefore this is half the extent of the box in each dimension. ‘a’ is the ellipse major axis, ‘b’ is the minor axis, ‘theta_deg’ is the position angle in degrees. The extent in each dimension is in floating point format and stored in ‘extent’ which must already be allocated before this function. -- Function: void gal_box_bound_ellipse (double ‘a’, double ‘b’, double ‘theta_deg’, long ‘*width’) Any ellipse can be enclosed into a rectangular box. The purpose of this function is to give the height and width of that box assuming the center of the ellipse is in the box center. ‘a’ is the ellipse major axis, ‘b’ is the minor axis, ‘theta_deg’ is the position angle in degrees. The ‘width’ array will contain the output size in long integer type. ‘width[0]’, and ‘width[1]’ are the number of pixels along the first and second FITS axis. Since the ellipse center is assumed to be in the center of the box, all the values in ‘width’ will be an odd integer. -- Function: void gal_box_border_from_center (double ‘center’, size_t ‘ndim’, long ‘*width’, long ‘*fpixel’, long ‘*lpixel’) Given the center coordinates in ‘center’ and the ‘width’ (along each dimension) of a box, return the coordinates of the first (‘fpixel’) and last (‘lpixel’) pixels. All arrays must have ‘ndim’ elements (one for each dimension). -- Function: int gal_box_overlap (long ‘*naxes’, long ‘*fpixel_i’, long ‘*lpixel_i’, long ‘*fpixel_o’, long ‘*lpixel_o’, size_t ‘ndim’) An ‘ndim’-dimensional dataset of size ‘naxes’ (along each dimension, in FITS order) and a box with first and last (inclusive) coordinate of ‘fpixel_i’ and ‘lpixel_i’ is given. This box doesn’t necessarily have to lie within the dataset, it can be outside of it, or only patially overlap. This function will change the values of ‘fpixel_i’ and ‘lpixel_i’ to exactly cover the overlap in the input dataset’s coordinates. This function will return 1 if there is an overlap and 0 if there isn’t. When there is an overlap, the coordinates of the first and last pixels of the overlap will be put in ‘fpixel_o’ and ‘lpixel_o’.  File: gnuastro.info, Node: Polygons, Next: Qsort functions, Prev: Bounding box, Up: Gnuastro library 10.3.15 Polygons (‘polygon.h’) ------------------------------ Polygons are commonly necessary in image processing. In Gnuastro, they are used in Crop (see *note Crop::) for cutting out non-rectangular regions of a image. Warp (see *note Warp::) uses them to warp the images into a new pixel grid. The polygon related Gnuastro library macros and functions are introduced here. In all the functions here the vertices (and points) are defined as an array. So a polygon with 4 vertices will be identified with an array of 8 elements with the first two elements keeping the 2D coordinates of the first vertice and so on. -- Macro: GAL_POLYGON_MAX_CORNERS The largest number of vertices a polygon can have in this library. -- Macro: GAL_POLYGON_ROUND_ERR We have to consider floating point round-off errors when dealing with polygons. For example we will take ‘A’ as the maximum of ‘A’ and ‘B’ when ‘A>B-GAL_POLYGON_ROUND_ERR’. -- Function: void gal_polygon_ordered_corners (double ‘*in’, size_t ‘n’, size_t ‘*ordinds’) We have a simple polygon (that can result from projection, so its edges don’t collide or it doesn’t have holes) and we want to order its corners in an anticlockwise fashion. This is necessary for clipping it and finding its area later. The input vertices can have practically any order. The input (‘in’) is an array containing the coordinates (two values) of each vertice. ‘n’ is the number of corners. So ‘in’ should have ‘2*n’ elements. The output (‘ordinds’) is an array with ‘n’ elements specifying the indexs in order. This array must have been allocated before calling this function. The indexes are output for more generic usage, for example in a homographic transform (necessary in warping an image, see *note Warping basics::), the necessary order of vertices is the same for all the pixels. In other words, only the positions of the vertices change, not the way they need to be ordered. Therefore, this function would only be necessary once. As a summary, the input is unchanged, only ‘n’ values will be put in the ‘ordinds’ array. Such that calling the input coordinates in the following fashion will give an anti-clockwise order when there are 4 vertices: 1st vertice: in[ordinds[0]*2], in[ordinds[0]*2+1] 2nd vertice: in[ordinds[1]*2], in[ordinds[1]*2+1] 3rd vertice: in[ordinds[2]*2], in[ordinds[2]*2+1] 4th vertice: in[ordinds[3]*2], in[ordinds[3]*2+1] The implementation of this is very similar to the Graham scan in finding the Convex Hull. However, in projection we will never have a concave polygon (the left condition below, where this algorithm will get to E before D), we will always have a convex polygon (right case) or E won’t exist! Concave Polygon Convex Polygon D --------C D------------- C \ | E / | \E | \ | / | \ | A--------B A ----------B This is because we are always going to be calculating the area of the overlap between a quadrilateral and the pixel grid or the quadrilateral its self. The ‘GAL_POLYGON_MAX_CORNERS’ macro is defined so there will be no need to allocate these temporary arrays separately. Since we are dealing with pixels, the polygon can’t really have too many vertices. -- Function: double gal_polygon_area (double ‘*v’, size_t ‘n’) Find the area of a polygon with vertices defined in ‘v’. ‘v’ points to an array of doubles which keep the positions of the vertices such that ‘v[0]’ and ‘v[1]’ are the positions of the first vertice to be considered. -- Function: int gal_polygon_pin (double ‘*v’, double ‘*p’, size_t ‘n’) Return ‘1’ if the point ‘p’ is within the polygon whose vertices are defined by ‘v’ and ‘0’ otherwise. Note that the vertices of the polygon have to be sorted in an anti-clock-wise manner. -- Function: int gal_polygon_ppropin (double ‘*v’, double ‘*p’, size_t ‘n’) Similar to ‘gal_polygon_pin’, except that if the point ‘p’ is on one of the edges of a polygon, this will return ‘0’. -- Function: void gal_polygon_clip (double ‘*s’, size_t ‘n’, double ‘*c’, size_t ‘m’, double ‘*o’, size_t ‘*numcrn’) Clip (find the overlap of) two polygons. This function uses the Sutherland-Hodgman (https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm) polygon clipping algorithm. Note that the vertices of both polygons have to be sorted in an anti-clock-wise manner.  File: gnuastro.info, Node: Qsort functions, Next: Permutations, Prev: Polygons, Up: Gnuastro library 10.3.16 Qsort functions (‘qsort.h’) ----------------------------------- The C programming language comes with the ‘qsort’ (Quick sort) function. ‘qsort’ is a generic function which allows you to sort any kind of data structure (not just a single number). To define greater and smaller (for sorting), ‘qsort’ needs another function, even for simple numerical types. To facilitate numerical sorting for Gnuastro’s programs/libraries, Gnuastro defines a function for each type’s increasing and decreasing function. You can pass these functions to ‘qsort’ when your array has the respective type (see *note Numeric data types::). -- Global variable: gal_qsort_index_arr Pointer to a floating point array (‘float *’) to use as a reference in ‘gal_qsort_index_float_decreasing’, see the explanation there for more. -- Function: int gal_qsort_index_float_decreasing (const void ‘*a’, const void ‘*b’) When passed to ‘qsort’, this function will sort a ‘size_t’ array based on decreasing values in the ‘gal_qsort_index_arr’ single precision floating point array. The floating point array will not be changed, it is only read. For example, if we have the following source code: #include #include /* qsort is defined in stdlib.h. */ #include int main (void) { size_t s[4]={0, 1, 2, 3}; float f[4]={1.3,0.2,1.8,0.1}; gal_qsort_index_arr=f; qsort(s, 4, sizeof(size_t), gal_qsort_index_float_decreasing); printf("%zu, %zu, %zu, %zu\n", s[0], s[1], s[2], s[3]); return EXIT_SUCCESS; } The output will be: ‘2, 0, 1, 3’. -- Function: int gal_qsort_TYPE_increasing (const void ‘*a’, const void ‘*b’) When passed to ‘qsort’, this function will sort an ‘TYPE’ array in increasing order (first element will be the smallest). Please replace ‘TYPE’ (in the function name) with one of the *note Numeric data types::, for example ‘gal_qsort_int32_increasing’, or ‘gal_qsort_float64_increasing’. -- Function: int gal_qsort_TYPE_decreasing (const void ‘*a’, const void ‘*b’) When passed to ‘qsort’, this function will sort an ‘TYPE’ array in decreasing order (first element will be the largest). Please replace ‘TYPE’ (in the function name) with one of the *note Numeric data types::, for example ‘gal_qsort_int32_decreasing’, or ‘gal_qsort_float64_decreasing’.  File: gnuastro.info, Node: Permutations, Next: Matching, Prev: Qsort functions, Up: Gnuastro library 10.3.17 Permutations (‘permutation.h’) -------------------------------------- Permutation is the technical name for re-ordering of values. The need for permutations occurs a lot during (mainly low-level) processing. To do permutation, you must provide two inputs: an array of values (that you want to re-order in place) and a permutation array which contains the new index of each element (let’s call it ‘perm’). The diagram below shows the input array before and after the re-ordering. permute: AFTER[ i ] = BEFORE[ perm[i] ] i = 0 .. N-1 inverse: AFTER[ perm[i] ] = BEFORE[ i ] i = 0 .. N-1 The functions here are a re-implementation of the GNU Scientific Library’s ‘gsl_permute’ function. The reason we didn’t use that function was that it uses system-specific types (like ‘long’ and ‘int’) which can have different widths on different systems, hence are not easily convertible to Gnuastro’s fixed width types (see *note Numeric data types::). There is also a separate function for each type, heavily using macros to allow a ‘base’ function to work on all the types. Thus it is hard to read/understand. Hence, Gnuastro contains a re-write of their steps in a new type-agnostic method which is a single function that can work on any type. As described in GSL’s source code and manual, this implementation comes from Donald Knuth’s _Art of computer programming_ book, in the "Sorting and Searching" chapter of Volume 3 (3rd ed). Exercise 10 of Section 5.2 defines the problem and in the answers, Knuth describes the solution. So if you are interested, please have a look there for more. We are in contact with the GSL developers and in the future(1) we will submit these implementations to GSL. If they are finally incorporated there, we will delete this section in future versions. -- Function: void gal_permutation_check (size_t ‘*permutation’, size_t ‘size’) Print how ‘permutation’ will re-order an array that has ‘size’ elements for each element in one one line. -- Function: void gal_permutation_apply (gal_data_t ‘*input’, size_t ‘*permutation’) Apply ‘permutation’ on the ‘input’ dataset (can have any type), see above for the definition of permutation. -- Function: void gal_permutation_apply_inverse (gal_data_t ‘*input’, size_t ‘*permutation’) Apply the inverse of ‘permutation’ on the ‘input’ dataset (can have any type), see above for the definition of permutation. ---------- Footnotes ---------- (1) Gnuastro’s Task 14497 (http://savannah.gnu.org/task/?14497). If this task is still “postponed†when you are reading this and you are interested to help, your help would be very welcome. Both Gnuastro and GSL developers are very busy, hence both would appreciate your help.  File: gnuastro.info, Node: Matching, Next: Statistical operations, Prev: Permutations, Up: Gnuastro library 10.3.18 Matching (‘match.h’) ---------------------------- Matching is often necessary when the measurements have been done using different instruments, different software or different configurations of the same software. The functions in this part of Gnuastro’s library will be growing to allow matching of images and finding a match between different catalogs (register them). Currently it only provides the The high-level measurements are stored in tables with positions (commonly in RA and Dec with units of degrees). -- Function: gal_data_t * gal_match_coordinates (gal_data_t ‘*coord1’, gal_data_t ‘*coord2’, double ‘*aperture’, int ‘sorted_by_first’, int ‘inplace’, size_t ‘minmapsize’, size_t ‘*nummatched’) Return the permutations that when applied, the first ‘nummatched’ rows of both inputs match with each other (are the nearest within the given aperture). The two inputs (‘coord1’ and ‘coord2’) must be *note List of gal_data_t::. Each ‘gal_data_t’ node in the list should be a single dimensional dataset (column in a table). The dimensions of the coordinates is determined by the number of ‘gal_data_t’ nodes in the two input lists (which must be equal). Note that the number of rows (or the number of elements in each ‘gal_data_t’) in the columns of ‘coord1’ and ‘coord2’ can be different. The matching aperture is defined by the ‘aperture’ array. If several points of one catalog lie within this aperture of a point in the other, the nearest is defined as the match. In a 2D situation (where the input lists have two nodes), for the most generic case, it must have three elements: the major axis length, axis ratio and position angle (see *note Defining an ellipse::). If ‘aperture[1]==1’, the aperture will be a circle of radius ‘aperture[0]’ and the third value won’t be used. When the aperture is an ellipse, distances between the points are also calculated in the respective elliptical distances ($r_{el}$ in *note Defining an ellipse::). To speed up the search, this function will sort the input coordinates by their first column (first axis). If _both_ are already sorted by their first column, you can avoid the sorting step by giving a non-zero value to ‘sorted_by_first’. When sorting is necessary and ‘inplace’ is non-zero, the actual input columns will be sorted. Otherwise, an internal copy of the inputs will be made, used (sorted) and later freed before returning. Therefore, when ‘inplace==0’, inputs will remain untouched, but this function will take more time and memory. If internal allocation is necessary and the space is larger than ‘minmapsize’, the space will be not allocated in the RAM, but in a file, see description of ‘--minmapsize’ in *note Processing options::. The number of matches will be put in the space pointed by ‘nummatched’. If there wasn’t any match, this function will return ‘NULL’. If match(s) were found, a list with three ‘gal_data_t’ nodes will be returned. The top two nodes in the list are the permutations that must be applied to the first and second inputs respectively. After applying the permutations, the top ‘nummatched’ elements will match with each other. The third node is the distances between the respective match. Note that the three nodes of the list are all one-dimensional (a column) and can have different lengths. *Output permutations ignore internal sorting*: the output permutations will correspond to the initial inputs. Therefore, even when ‘inplace!=0’ (and this function re-arranges the inputs), the output permutation will correspond to original (possibly non-sorted) inputs. The reason for this is that you rarely want the actual positional columns after the match. Usually, you also have other columns (measurements, for example magnitudes) for higher-level processing after the match (that correspond to the input order before sorting). Once you have the permutations, they can be applied to those other columns (see *note Permutations::) and the higher-level processing can continue. When you read the coordinates from a table using ‘gal_table_read’ (see *note Table input output::), and only ask for the coordinate columns, the inputs to this function are the returned ‘gal_data_t *’ from two different tables.  File: gnuastro.info, Node: Statistical operations, Next: Binary datasets, Prev: Matching, Up: Gnuastro library 10.3.19 Statistical operations (‘statistics.h’) ----------------------------------------------- After reading a dataset into memory from a file or fully simulating it with another process, the most common processes that will be done on it are statistical operations to let you quantify different aspects of the data. the functions in this section describe Gnuastro’s current set of tools for this job. All these functions can work on any numeric data type natively (see *note Numeric data types::) and can also work on tiles over a dataset. Hence the inputs and outputs are in Gnuastro’s *note Generic data container::. -- Macro: GAL_STATISTICS_SIG_CLIP_MAX_CONVERGE The maximum number of clips, when $\sigma$-clipping should be done by convergence. If the clipping does not converge before making this many clips, all sigma-clipping outputs will be NaN. -- Macro: GAL_STATISTICS_MODE_GOOD_SYM The minimum acceptable symmetricity of the mode calculation. If the symmetricity of the derived mode is less than this value, all the returned values by ‘gal_statistics_mode’ will have a value of NaN. -- Macro: GAL_STATISTICS_SORTED_NOT -- Macro: GAL_STATISTICS_SORTED_INCREASING -- Macro: GAL_STATISTICS_SORTED_DECREASING Macros used to identify if the dataset is sorted and increasing, sorted and decreasing or not sorted. -- Macro: GAL_STATISTICS_BINS_INVALID -- Macro: GAL_STATISTICS_BINS_REGULAR -- Macro: GAL_STATISTICS_BINS_IRREGULAR Macros used to identify if the regularity of the bins when defining bins. -- Function: gal_data_t * gal_statistics_number (gal_data_t ‘*input’) Return a single-element ‘uint64’ dataset containing the number of non-blank elements in ‘input’. -- Function: gal_data_t * gal_statistics_minimum (gal_data_t ‘*input’) Return a single-element dataset containing the minimum non-blank value in ‘input’. The numerical datatype of the output is the same as ‘input’. -- Function: gal_data_t * gal_statistics_maximum (gal_data_t ‘*input’) Return a single-element dataset containing the maximum non-blank value in ‘input’. The numerical datatype of the output is the same as ‘input’. -- Function: gal_data_t * gal_statistics_sum (gal_data_t ‘*input’) Return a single-element (‘double’ or ‘float64’) dataset containing the sum of the non-blank values in ‘input’. -- Function: gal_data_t * gal_statistics_mean (gal_data_t ‘*input’) Return a single-element (‘double’ or ‘float64’) dataset containing the mean of the non-blank values in ‘input’. -- Function: gal_data_t * gal_statistics_std (gal_data_t ‘*input’) Return a single-element (‘double’ or ‘float64’) dataset containing the standard deviation of the non-blank values in ‘input’. -- Function: gal_data_t * gal_statistics_mean_std (gal_data_t ‘*input’) Return a two-element (‘double’ or ‘float64’) dataset containing the mean and standard deviation of the non-blank values in ‘input’. The first element of the returned dataset is the mean and the second is the standard deviation. This function will calculate both values in one pass over the dataset. Hence when both the mean and standard deviation of a dataset are necessary, this function is much more efficient than calling ‘gal_statistics_mean’ and ‘gal_statistics_std’ separately. -- Function: gal_data_t * gal_statistics_median (gal_data_t ‘*input’, int ‘inplace’) Return a single-element dataset containing the median of the non-blank values in ‘input’. The numerical datatype of the output is the same as ‘input’. Calculating the median involves sorting the dataset and removing blank values, for better performance (and less memory usage), you can give a non-zero value to the ‘inplace’ argument. In this case, the sorting and removal of blank elements will be done directly on the input dataset. However, after this function the original dataset may have changed (if it wasn’t sorted or had blank values). -- Function: size_t gal_statistics_quantile_index (size_t ‘size’, double ‘quantile’) Return the index of the element that has a quantile of ‘quantile’ assuming the dataset has ‘size’ elements. -- Function: size_t gal_statistics_quantile (gal_data_t ‘*input’, double ‘quantile’, int ‘inplace’) Return a single-element dataset containing the value with in a quantile ‘quantile’ of the non-blank values in ‘input’. The numerical datatype of the output is the same as ‘input’. See ‘gal_statistics_median’ for a description of ‘inplace’. -- Function: size_t gal_statistics_quantile_function_index (gal_data_t ‘*input’, gal_data_t ‘*value’, int ‘inplace’) Return the index of the quantile function (inverse quantile) of ‘input’ at ‘value’. In other words, this function will return the index of the nearest element (of a sorted and non-blank) ‘input’ to ‘value’. See ‘gal_statistics_median’ for a description of ‘inplace’. -- Function: gal_data_t * gal_statistics_quantile_function (gal_data_t ‘*input’, gal_data_t ‘*value’, int ‘inplace’) Return a single-element (‘double’ or ‘float64’) dataset containing the quantile function of the non-blank values in ‘input’ at ‘value’. In other words, this function will return the quantile of ‘value’ in ‘input’. See ‘gal_statistics_median’ for a description of ‘inplace’. -- Function: gal_data_t * gal_statistics_mode (gal_data_t ‘*input’, float ‘mirrordist’, int ‘inplace’) Return a four-element (‘double’ or ‘float64’) dataset that contains the mode of the ‘input’ distribution. This function implements the non-parametric algorithm to find the mode that is described in Appendix C of Akhlaghi and Ichikawa [2015] (https://arxiv.org/abs/1505.01664). In short it compares the actual distribution and its “mirror distribution†to find the mode. In order to be efficient, you can determine how far the comparison goes away from the mirror through the ‘mirrordist’ parameter (think of it as a multiple of sigma/error). See ‘gal_statistics_median’ for a description of ‘inplace’. The output array has the following elements (in the given order, note that counting in C starts from 0). array[0]: mode array[1]: mode quantile. array[2]: symmetricity. array[3]: value at the end of symmetricity. -- Function: gal_data_t * gal_statistics_mode_mirror_plots (gal_data_t ‘*input’, gal_data_t ‘*value’, size_t ‘numbins’, int ‘inplace’, double ‘*mirror_val’) Make a mirrored histogram and cumulative frequency plot (with ‘numbins’) with the mirror distribution of the ‘input’ with a value at ‘value’. The output is a list of data structures (see *note List of gal_data_t::): the first is the bins with one bin at the mirror point, the second is the histogram with a maximum of one and the third is the cumulative frequency plot (with a maximum of one). -- Function: int gal_statistics_is_sorted (gal_data_t ‘*input’) Return the respective sort macro (see above) for the ‘input’ dataset. -- Function: void gal_statistics_sort_increasing (gal_data_t ‘*input’) Sort the input dataset (in place) in an increasing order. -- Function: void gal_statistics_sort_decreasing (gal_data_t ‘*input’) Sort the input dataset (in place) in a decreasing order. -- Function: gal_data_t * gal_statistics_no_blank_sorted (gal_data_t ‘*input’, int ‘inplace’) Remove all the blanks and sort the input dataset. If ‘inplace’ is non-zero this will happen on the input dataset (and the output will be the same as the input). However, if ‘inplace’ is zero, this function will allocate a new copy of the dataset that is sorted and has no blank values. -- Function: gal_data_t * gal_statistics_regular_bins (gal_data_t ‘*input’, gal_data_t ‘*inrange’, size_t ‘numbins’, double ‘onebinstart’) Generate an array of regularly spaced elements as a 1D array (column) of type ‘double’ (i.e., ‘float64’, it has to be double to account for small differences on the bin edges). The input arguments are described below ‘input’ The dataset you want to apply the bins to. This is only necessary if the range argument is not complete, see below. If ‘inrange’ has all the necessary information, you can pass a ‘NULL’ pointer for this. ‘inrange’ This dataset keeps the desired range along each dimension of the input data structure, it has to be in ‘float’ (i.e., ‘float32’) type. • If you want the full range of the dataset (in any dimensions, then just set ‘inrange’ to ‘NULL’ and the range will be specified from the minimum and maximum value of the dataset (‘input’ cannot be ‘NULL’ in this case). • If there is one element for each dimension in range, then it is viewed as a quantile (Q), and the range will be: ‘Q to 1-Q’. • If there are two elements for each dimension in range, then they are assumed to be your desired minimum and maximum values. When either of the two are NaN, the minimum and maximum will be calculated for it. ‘numbins’ The number of bins: must be larger than 0. ‘onebinstart’ A desired value for onebinstart. Note that with this option, the bins won’t start and end exactly on the given range values, it will be slightly shifted to accommodate this request. -- Function: gal_data_t * gal_statistics_histogram (gal_data_t ‘*input’, gal_data_t ‘*bins’, int ‘normalize’, int ‘maxone’) Make a histogram of all the elements in the given dataset with bin values that are defined in the ‘inbins’ structure (see ‘gal_statistics_regular_bins’). ‘inbins’ is not mandatory, if you pass a ‘NULL’ pointer, the bins structure will be built within this function based on the ‘numbins’ input. As a result, when you have already defined the bins, ‘numbins’ is not used. -- Function: gal_data_t * gal_statistics_cfp (gal_data_t ‘*input’, gal_data_t ‘*bins’, int ‘normalize’) Make a cumulative frequency plot (CFP) of all the elements in ‘input’ with bin values that are defined in the ‘bins’ structure (see ‘gal_statistics_regular_bins’). The CFP is built from the histogram: in each bin, the value is the sum of all previous bins in the histogram. Thus, if you have already calculated the histogram before calling this function, you can pass it onto this function as the data structure in ‘bins->next’ (see ‘List of gal_data_t’). If ‘bin->next!=NULL’, then it is assumed to be the histogram. If it is ‘NULL’, then the histogram will be calculated internally and freed after the job is finished. When a histogram is given and it is normalized, the CFP will also be normalized (even if the normalized flag is not set here): note that a normalized CFP’s maximum value is 1. -- Function: gal_data_t * gal_statistics_sigma_clip (gal_data_t ‘*input’, float ‘multip’, float ‘param’, int ‘inplace’, int ‘quiet’) Apply $\sigma$-clipping on a given dataset and return a dataset that contains the results. For a description of $\sigma$-clipping see *note Sigma clipping::. ‘multip’ is the multiple of the standard deviation ($\sigma$ that is used to define outliers in each round of clipping). The role of ‘param’ is determined based on its value. If ‘param’ is larger than ‘1’ (one), it must be an integer and will be interpretted as the number clips to do. If it is less than ‘1’ (one), it is interpretted as the tolerance level to stop the iteration. The output dataset has the following elements with a ‘GAL_TYPE_FLOAT32’ type: array[0]: Number of points used. array[1]: Median. array[2]: Mean. array[3]: Standard deviation.  File: gnuastro.info, Node: Binary datasets, Next: Convolution functions, Prev: Statistical operations, Up: Gnuastro library 10.3.20 Binary datasets (‘binary.h’) ------------------------------------ Binary datasets only have two (usable) values: 0 (also known as background) or 1 (also known as foreground). They are created after some binary classification is applied to the dataset. The most common is thresholding: for example in an image, pixels with a value above the threshold are given a value of 1 and those with a value less than the threshold are assigned a value of 0. Since there is only two values, in the processing of binary images, you are usually concerned with the positioning of an element and its vicinity (neighbors). When a dataset has more than one dimension, multiple classes of immediate neighbors (that are touching the element) can be defined for each data-element. To separate these different classes of immediate neighbors, we define _connectivity_. The classification is done by the distance from element center to the neighbor’s center. The nearest immediate neighbors have a connectivity of 1, the second nearest class of neighbors have a connectivity of 2 and so on. In total, the largest possible connectivity for data with ‘ndim’ dimensions is ‘ndim’. For example in a 2D dataset, 4-connected neighbors (that share an edge and have a distance of 1 pixel) have a connectivity of 1. The other 4 neighbors that only share a vertice (with a distance of $\sqrt{2}$ pixels) have a connectivity of 2. Conventionally, the class of connectivity-2 neighbors also includes the connectivity 1 neighbors, so for example we call them 8-connected neighbors in 2D datasets. Ideally, one bit is sufficient for each element of a binary dataset. However, CPUs are not designed to work on individual bits, the smallest unit of memory addresses is a byte (containing 8 bits on modern CPUs). Therefore, in Gnuastro, the type used for binary dataset is ‘uint8_t’ (see *note Numeric data types::). Although it does take 8-times more memory, this choice offers much better performance and the some extra (useful) features. The advantage of using a full byte for each element of a binary dataset is that you can also have other values (that will be ignored in the processing). One such common “other†value in real datasets is a blank value (to mark regions that should not be processed because there is no data). The constant ‘GAL_BLANK_UINT8’ value must be used in these cases (see *note Library blank values::). Another is some temporary value(s) that can be given to a processed pixel to avoid having another copy of the dataset as in ‘GAL_BINARY_TMP_VALUE’ that is described below. -- Macro: GAL_BINARY_TMP_VALUE The functions described below work on a ‘uint8_t’ type dataset with values of 1 or 0 (no other pixel will be touched). However, in some cases, it is necessary to put temporary values in each element during the processing of the functions. This temporary value has a special meaning for the operation and will be operated on. So if your input datasets have values other than 0 and 1 that you don’t want these functions to work on, be sure they are not equal to this macro’s value. Note that this value is also different from ‘GAL_BLANK_UINT8’, so your input datasets may also contain blank elements. -- Function: gal_data_t * gal_binary_erode (gal_data_t ‘*input’, size_t ‘num’, int ‘connectivity’, int ‘inplace’) Do ‘num’ erosions on the ‘connectivity’-connected neighbors of ‘input’ (see above for the definition of connectivity). If ‘inplace’ is non-zero _and_ the input’s type is ‘GAL_TYPE_UINT8’, then the erosion will be done within the input dataset and the returned pointer will be ‘input’. Otherwise, ‘input’ is copied (and converted if necessary) to ‘GAL_TYPE_UINT8’ and erosion will be done on this new dataset which will also be returned. This function will only work on the elements with a value of 1 or 0. It will leave all the rest unchanged. Erosion (inverse of dilation) is an operation in mathematical morphology where each foreground pixel that is touching a background pixel is flipped (changed to background). The ‘connectivity’ value determines the definition of “touchingâ€. Erosion will thus decrease the area of the foreground regions by one layer of pixels. -- Function: gal_data_t * gal_binary_dilate (gal_data_t ‘*input’, size_t ‘num’, int ‘connectivity’, int ‘inplace’) Do ‘num’ dilations on the ‘connectivity’-connected neighbors of ‘input’ (see above for the definition of connectivity). For more on ‘inplace’ and the output, see ‘gal_binary_erode’. Dilation (inverse of erosion) is an operation in mathematical morphology where each background pixel that is touching a foreground pixel is flipped (changed to foreground). The ‘connectivity’ value determines the definition of “touchingâ€. Dilation will thus increase the area of the foreground regions by one layer of pixels. -- Function: gal_data_t * gal_binary_open (gal_data_t ‘*input’, size_t ‘num’, int ‘connectivity’, int ‘inplace’) Do ‘num’ openings on the ‘connectivity’-connected neighbors of ‘input’ (see above for the definition of connectivity). For more on ‘inplace’ and the output, see ‘gal_binary_erode’. Opening is an operation in mathematical morphology which is defined as erosion followed by dilation (see above for the definitions of erosion and dilation). Opening will thus remove the outer structure of the foreground. In this implementation, ‘num’ erosions are going to be applied on the dataset, then ‘num’ dilations. -- Function: size_t gal_binary_connected_components (gal_data_t ‘*binary’, gal_data_t ‘**out’, int ‘connectivity’) Return the number of connected components in ‘binary’ through the breadth first search algorithm (finding all pixels belonging to one component before going on to the next). Connection between two pixels is defined based on the value to ‘connectivity’. ‘out’ is a dataset with the same size as ‘binary’ with ‘GAL_TYPE_INT32’ type. Every pixel in ‘out’ will have the label of the connected component it belongs to. The labeling of connected components starts from 1, so a label of zero is given to the input’s background pixels. When ‘*out!=NULL’ (its space is already allocated), it will be cleared (to zero) at the start of this function. Otherwise, when ‘*out==NULL’, the necessary dataset to keep the output will be allocated by this function. ‘binary’ must have a type of ‘GAL_TYPE_UINT8’, otherwise this function will abort with an error. Other than blank pixels (with a value of ‘GAL_BLANK_UINT8’ defined in *note Library blank values::), all other non-zero pixels in ‘binary’ will be considered as foreground (and will be labeled). Blank pixels in the input will also be blank in the output. -- Function: gal_data_t * gal_binary_connected_adjacency_matrix (gal_data_t ‘*adjacency’, size_t ‘*numconnected’) Find the number of connected labels and new labels based on an adjacency matrix, which must be a square binary array (type ‘GAL_TYPE_UINT8’). The returned dataset is a list of new labels for each old label. In other words, this function will find the objects that are connected (possibly through a third object) and in the output array, the respective elements for all input labels is going to have the same value. The total number of connected labels is put into the space that ‘numconnected’ points to. An adjacency matrix defines connection between two labels. For example, let’s assume we have 5 labels and we know that labels 1 and 5 are connected to label 3, but are not connected with each other. Also, labels 2 and 4 are not touching any other label. So in total we have 3 final labels: one combined object (merged from labels 1, 3, and 5) and the initial labels 2 and 4. The input adjacency matrix would look like this (note the extra row and column for a label 0 which is ignored): INPUT OUTPUT ===== ====== in_lab 1 2 3 4 5 | | numconnected = 3 0 0 0 0 0 0 | in_lab 1 --> 0 0 0 1 0 0 | in_lab 2 --> 0 0 0 0 0 0 | Returned: new labels for the in_lab 3 --> 0 1 0 0 0 1 | 5 initial objects in_lab 4 --> 0 0 0 0 0 0 | | 0 | 1 | 2 | 1 | 3 | 1 | in_lab 5 --> 0 0 0 1 0 0 | Although the adjacency matrix as used here is symmetric, currently this function assumes that it is filled on both sides of the diagonal. -- Function: void gal_binary_fill_holes (gal_data_t ‘*input’, int ‘connectivity’) Fill all the holes (0 valued pixels surrounded by 1 valued pixels) within a region of the binary ‘input’ dataset. The connectivity of the holes can be set with ‘connectivity’. This function currently only works on a 2D dataset.  File: gnuastro.info, Node: Convolution functions, Next: Interpolation, Prev: Binary datasets, Up: Gnuastro library 10.3.21 Convolution functions (‘convolve.h’) -------------------------------------------- Convolution is a very common operation during data analysis and is thoroughly described as part of Gnuastro’s *note Convolve:: program which is fully devoted to this job. Because of the complete introduction that was presented there, we will directly skip onto the currently available convolution functions in Gnuastro’s library. As of this version, only spatial domain convolution is available in Gnuastro’s libraries. We haven’t had the time to liberate the frequency domain function convolution and de-convolution functions that are available in the Convolve program(1). -- Function: gal_data_t * gal_convolve_spatial (gal_data_t ‘*tiles’, gal_data_t ‘*kernel’, size_t ‘numthreads’, int ‘edgecorrection’, int ‘convoverch’) Convolve each node of the list of ‘tiles’ (see *note List of gal_data_t:: and *note Tessellation library::) with ‘kernel’ using ‘numthreads’. When ‘edgecorrection’ is non-zero, it will correct for the edge dimming effects as discussed in *note Edges in the spatial domain::. To create a tessellation that fully covers an input image, you may use ‘gal_tile_full’, or ‘gal_tile_full_two_layers’ to also define channels over your input dataset. These functions are discussed in *note Tile grid::. You may then pass the list of tiles to this function. This is the recommended way to call this function because spatial domain convolution is slow and breaking the job into many small tiles and working on simultaneously on several threads can greatly speed up the processing. If the tiles are defined within a channel (a larger tile), by default convolution will be done within the channel, so pixels on the edge of a channel will not be affected by their neighbors that are in another channel. See *note Tessellation:: for the necessity of channels in astronomical data analysis. This behavior may be disabled when ‘convoverch’ is non-zero. In this case, it will ignore channel borders (if they exist) and mix all pixels that cover the kernel within the dataset. -- Function: void gal_convolve_spatial_correct_ch_edge (gal_data_t ‘*tiles’, gal_data_t ‘*kernel’, size_t ‘numthreads’, int ‘edgecorrection’, gal_data_t ‘*tocorrect’) Correct the edges of channels in an already convolved image when it was initially convolved with ‘gal_convolve_spatial’ and ‘convoverch==0’. In that case, strong boundaries might exist on the channel edges. So if you later need to remove those boundaries at later steps of your processing, you can call this function. It will only do convolution on the tiles that are near the edge and were effected by the channel borders. Other pixels in the image will not be touched. Hence, it is much faster. ---------- Footnotes ---------- (1) Hence any help would be greatly appreciated.  File: gnuastro.info, Node: Interpolation, Next: Git wrappers, Prev: Convolution functions, Up: Gnuastro library 10.3.22 Interpolation (‘interpolate.h’) --------------------------------------- During data analysis, it often happens that parts of the data cannot be given a value. For example your image was saturated due to a very bright start and you have to mask that star’s footprint. One other common situation in Gnuastro is when we do processing on tiles (for example to estimate the Sky value and its Standard deviation, see *note Sky value::). Some tiles must not be used for the estimation of the Sky value, for example because they cover a large galaxy. So we need to fill them in with blank values. But ultimately, we need a Sky value for every pixel. This job (assigning a value to blank element(s) based on their nearby neighbors with a value) is known as interpolation. There are many ways to do interpolation, but (mainly due to lack of time), currently Gnuastro only contains the (median of) nearest-neighbor method. The power of this method of interpolation is its non-parametric nature. The produced values are also always within the range of the known values and strong outliers do not get created. We will hopefully implement other methods too (wrappers around the GNU Scientific Library’s very complete set of functions), but currently the developers are too busy. So if you do have the chance to help your contribution would be very welcome and appreciated. -- Function: gal_data_t * gal_interpolate_close_neighbors (gal_data_t ‘*input’, struct gal_tile_two_layer_params ‘*tl’, size_t ‘numneighbors’, size_t ‘numthreads’, int ‘onlyblank’, int ‘aslinkedlist’) Interpolate the values in the image using the median value of their ‘numneighbors’ closest neighbors. If ‘onlyblank’ is non-zero, then only blank elements will be interpolated and pixels that already have a value will be left untouched. This function is multi-threaded and will run on ‘numthreads’ threads (see ‘gal_threads_number’ in *note Multithreaded programming::). ‘tl’ is Gnuastro’s two later tessellation structure used to define tiles over an image and is fully described in *note Tile grid::. When ‘tl!=NULL’, then it is assumed that the ‘input->array’ contains one value per tile and interpolation will respect certain tessellation properties, for example to not interpolate over channel borders. If several datasets have the same set of blank values, you don’t need to call this function multiple times. When ‘aslinkedlist’ is non-zero, then ‘input’ will be seen as a *note List of gal_data_t:: and for all the same neighbor position checking will be done for all the datasets in the list. Of course, the values for each dataset will be different, so a different value will be written in the each dataset, but the neighbor checking that is the most CPU intensive part will only be done once.  File: gnuastro.info, Node: Git wrappers, Next: Cosmology library, Prev: Interpolation, Up: Gnuastro library 10.3.23 Git wrappers (‘git.h’) ------------------------------ Git is one of the most common tools for version control and it can often be useful during development, for example see ‘COMMIT’ keyword in *note Output headers::. At installation time, Gnuastro will also check for the existence of libgit2, and store the value in the ‘GAL_CONFIG_HAVE_LIBGIT2’, see *note Configuration information:: and *note Optional dependencies::. ‘gnuastro/git.h’ includes ‘gnuastro/config.h’ internally, so you won’t have to include both for this macro. -- Function: char * gal_git_describe ( ) When libgit2 is present and the program is called within a directory that is version controlled, this function will return a string containing the commit description (similar to Gnuastro’s unofficial version number, see *note Version numbering::). If there are uncommitted changes in the running directory, it will add a ‘‘-dirty’’ prefix to the description. When there is no tagged point in the previous commit, this function will return a uniquely abbreviated commit object as fallback. This function is used for generating the value of the ‘COMMIT’ keyword in *note Output headers::. The output string is similar to the output of the following command: $ git describe --dirty --always Space for the output string is allocated within this function, so after using the value you have to ‘free’ the output string. If libgit2 is not installed or the program calling this function is not within a version controlled directory, then the output will be the ‘NULL’ pointer.  File: gnuastro.info, Node: Cosmology library, Prev: Git wrappers, Up: Gnuastro library 10.3.24 Cosmology library (‘cosmology.h’) ----------------------------------------- This library does the main cosmological calculations that are commonly necessary in extra-galactic astronomical studies. The main variable in this context is the redshift ($z$). The cosmological input parameters in the functions below are ‘H0’, ‘o_lambda_0’, ‘o_matter_0’, ‘o_radiation_0’ which respectively represent the current (at redshift 0) expansion rate (Hubble constant in units of km/sec/Mpc), cosmological constant ($\Lambda$), matter and radiation densities. All these functions are declared in ‘gnuastro/cosmology.h’. For a more extended introduction/discussion of the cosmological parameters, please see *note CosmicCalculator::. -- Function: double gal_cosmology_age (double ‘z’, double ‘H0’, double ‘o_lambda_0’, double ‘o_matter_0’, double ‘o_radiation_0’) Returns the age of the universe at redshift ‘z’ in units of Giga years. -- Function: double gal_cosmology_proper_distance (double ‘z’, double ‘H0’, double ‘o_lambda_0’, double ‘o_matter_0’, double ‘o_radiation_0’) Returns the proper distance to an object at redshift ‘z’ in units of Mega parsecs. -- Function: double gal_cosmology_comoving_volume (double ‘z’, double ‘H0’, double ‘o_lambda_0’, double ‘o_matter_0’, double ‘o_radiation_0’) Returns the comoving volume over 4pi stradian to ‘z’ in units of Mega parsecs cube. -- Function: double gal_cosmology_critical_density (double ‘z’, double ‘H0’, double ‘o_lambda_0’, double ‘o_matter_0’, double ‘o_radiation_0’) Returns the critical density at redshift ‘z’ in units of $g/cm^3$. -- Function: double gal_cosmology_angular_distance (double ‘z’, double ‘H0’, double ‘o_lambda_0’, double ‘o_matter_0’, double ‘o_radiation_0’) Return the angular diameter distance to an object at redshift ‘z’ in units of Mega parsecs. -- Function: double gal_cosmology_luminosity_distance (double ‘z’, double ‘H0’, double ‘o_lambda_0’, double ‘o_matter_0’, double ‘o_radiation_0’) Return the luminosity diameter distance to an object at redshift ‘z’ in units of Mega parsecs. -- Function: double gal_cosmology_distance_modulus (double ‘z’, double ‘H0’, double ‘o_lambda_0’, double ‘o_matter_0’, double ‘o_radiation_0’) Return the distance modulus at redshift ‘z’ (with no units). -- Function: double gal_cosmology_to_absolute_mag (double ‘z’, double ‘H0’, double ‘o_lambda_0’, double ‘o_matter_0’, double ‘o_radiation_0’) Return the conversion from apparent to absolute magnitude for an object at redshift ‘z’. This value has to be added to the apparent magnitude to give the absolute magnitude of an object at redshift ‘z’.  File: gnuastro.info, Node: Library demo programs, Prev: Gnuastro library, Up: Library 10.4 Library demo programs ========================== In this final section of *note Library::, we give some example Gnuastro programs to demonstrate various features in the library. All these programs have been tested and once Gnuastro is installed you can compile and run them with with Gnuastro’s *note BuildProgram:: program that will take care of linking issues. If you don’t have any FITS file to experiment on, you can use those that are generated by Gnuastro after ‘make check’ in the ‘tests/’ directory, see *note Quick start::. * Menu: * Library demo - reading a image:: Read a FITS image into memory. * Library demo - inspecting neighbors:: Inspect the neighbors of a pixel. * Library demo - multi-threaded operation:: Doing an operation on threads. * Library demo - reading and writing table columns:: Simple Column I/O.  File: gnuastro.info, Node: Library demo - reading a image, Next: Library demo - inspecting neighbors, Prev: Library demo programs, Up: Library demo programs 10.4.1 Library demo - reading a FITS image ------------------------------------------ The following simple program demonstrates how to read a FITS image into memory and use the ‘void *array’ pointer in of *note Generic data container::. For easy linking/compilation of this program along with a first run see *note BuildProgram::. Before running, also change the ‘filename’ and ‘hdu’ variable values to specify an existing FITS file and/or extension/HDU. This is just intended to demonstrate how to use the ‘array’ pointer of ‘gal_data_t’. Hence it doesn’t do important sanity checks, for example in real datasets you may also have blank pixels. In such cases, this program will return a NaN value (see *note Blank pixels::). So for general statistical information of a dataset, it is much better to use Gnuastro’s *note Statistics:: program which can deal with blank pixels any many other issues in a generic dataset. #include #include #include /* includes gnuastro's data.h and type.h */ #include int main(void) { size_t i; float *farray; double sum=0.0f; gal_data_t *image; char *filename="img.fits", *hdu="1"; /* Read `img.fits' (HDU: 1) as a float32 array. */ image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, -1, 0, 0); /* Use the allocated space as a single precision floating * point array (recall that `image->array' has `void *' * type, so it is not directly usable. */ farray=image->array; /* Calculate the sum of all the values. */ for(i=0; isize; ++i) sum += farray[i]; /* Report the sum. */ printf("Sum of values in %s (hdu %s) is: %f\n", filename, hdu, sum); /* Clean up and return. */ gal_data_free(image); return EXIT_SUCCESS; }  File: gnuastro.info, Node: Library demo - inspecting neighbors, Next: Library demo - multi-threaded operation, Prev: Library demo - reading a image, Up: Library demo programs 10.4.2 Library demo - inspecting neighbors ------------------------------------------ The following simple program shows how you can inspect the neighbors of a pixel using the ‘GAL_DIMENSION_NEIGHBOR_OP’ function-like macro that was introduced in *note Dimensions::. For easy linking/compilation of this program along with a first run see *note BuildProgram::. Before running, also change the file name and HDU (first and second arguments to ‘gal_fits_img_read_to_type’) to specify an existing FITS file and/or extension/HDU. #include #include #include int main(void) { double sum; float *array; size_t i, num, *dinc; gal_data_t *input=gal_fits_img_read_to_type("input.fits", "1", GAL_TYPE_FLOAT32, -1, 0, 0); /* To avoid the `void *' pointer and have `dinc'. */ array=input->array; dinc=gal_dimension_increment(input->ndim, input->dsize); /* Go over all the pixels. */ for(i=0;isize;++i) { num=0; sum=0.0f; GAL_DIMENSION_NEIGHBOR_OP( i, input->ndim, input->dsize, input->ndim, dinc, {++num; sum+=array[nind];} ); printf("%zu: num: %zu, sum: %f\n", i, num, sum); } /* Clean up and return. */ gal_data_free(input); return EXIT_SUCCESS; }  File: gnuastro.info, Node: Library demo - multi-threaded operation, Next: Library demo - reading and writing table columns, Prev: Library demo - inspecting neighbors, Up: Library demo programs 10.4.3 Library demo - multi-threaded operation ---------------------------------------------- The following simple program shows how to use Gnuastro to simplify spinning off threads and distributing different jobs between the threads. The relevant thread-related functions are defined in *note Gnuastro's thread related functions::. For easy linking/compilation of this program, along with a first run, see Gnuastro’s *note BuildProgram::. Before running, also change the ‘filename’ and ‘hdu’ variable values to specify an existing FITS file and/or extension/HDU. This is a very simple program to open a FITS image, distribute its pixels between different threads and print the value of each pixel and the thread it was assigned to. The actual operation is very simple (and would not usually be done with threads in a real-life program). It is intentionally chosen to put more focus on the important steps in spinning of threads and how the worker function (which is called by each thread) can identify the job-IDs it should work on. For example, instead of an array of pixels, you can define an array of tiles or any other context-specific structures as separate targets. The important thing is that each action should have its own unique ID (counting from zero, as is done in an array in C). You can then follow the process below and use each thread to work on all the targets that are assigned to it. Recall that spinning-off threads is its self an expensive process and we don’t want to spin-off one thread for each target (see the description of ‘gal_threads_dist_in_threads’ in *note Gnuastro's thread related functions::. There are many (more complicated, real-world) examples of using ‘gal_threads_spin_off’ in Gnuastro’s actual source code, you can see them by searching for the ‘gal_threads_spin_off’ function from the top source (after unpacking the tarball) directory (for example with this command): $ grep -r gal_threads_spin_off ./ The code of this demonstration program is shown below. This program was also built and run when you ran ‘make check’ during the building of Gnuastro (‘tests/lib/multithread.c’, so it is already tested for your system and you can safely use it as a guide. #include #include #include "gnuastro/fits.h" #include "gnuastro/threads.h" /* This structure can keep all information you want to pass onto the * worker function on each thread. */ struct params { gal_data_t *image; /* Dataset to print values of. */ }; /* This is the main worker function which will be called by the * different threads. `gal_threads_params' is defined in * `gnuastro/threads.h' and contains the pointer to the parameter we * want. Note that the input argument and returned value of this * function always must have `void *' type. */ void * worker_on_thread(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct params *p=(struct params *)tprm->params; /* Subsequent definitions. */ float *array=p->image->array; size_t i, index, *dsize=p->image->dsize; /* Go over all the actions (pixels in this case) that were assigned * to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ index = tprm->indexs[i]; /* Print the information. */ printf("(%zu, %zu) on thread %zu: %g\n", index%dsize[1]+1, index/dsize[1]+1, tprm->id, array[index]); } /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* High-level function (called by the operating system). */ int main(void) { struct params p; char *filename="input.fits", *hdu="1"; size_t numthreads=gal_threads_number(); /* Read the image into memory as a float32 data type. We are using * `-1' for `minmapsize' to ensure that the image is read into * memory. */ p.image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, -1, 0, 0); /* Print some basic information before the actual contents: */ printf("Pixel values of %s (HDU: %s) on %zu threads.\n", filename, hdu, numthreads); printf("Used to check the compiled library's capability in opening " "a FITS file, and also spinning-off threads.\n"); /* A small sanity check: this is only intended for 2D arrays (to * print the coordinates of each pixel). */ if(p.image->ndim!=2) { fprintf(stderr, "only 2D images are supported."); exit(EXIT_FAILURE); } /* Spin-off the threads and do the processing on each thread. */ gal_threads_spin_off(worker_on_thread, &p, p.image->size, numthreads); /* Clean up and return. */ gal_data_free(p.image); return EXIT_SUCCESS; }  File: gnuastro.info, Node: Library demo - reading and writing table columns, Prev: Library demo - multi-threaded operation, Up: Library demo programs 10.4.4 Library demo - reading and writing table columns ------------------------------------------------------- Tables are some of the most common inputs to, and outputs of programs. This section contains a small program for reading and writing tables using the constructs described in *note Table input output::. For easy linking/compilation of this program, along with a first run, see Gnuastro’s *note BuildProgram::. Before running, also set the following file and column names in the first two lines of ‘main’. The input and output names may be ‘.txt’ and ‘.fits’ tables, ‘gal_table_read’ and ‘gal_table_write’ will be able to write to both formats. For plain text tables see see *note Gnuastro text table format::. This example program reads three columns from a table. The first two columns are selected by their name (‘NAME1’ and ‘NAME2’) and the third is selected by its number: column 10 (counting from 1). Gnuastro’s column selection is discussed in *note Selecting table columns::. The first and second columns can be any type, but this program will convert them to ‘int32_t’ and ‘float’ for its internal usage respectively. However, the third column must be double for this program. So if it isn’t, the program will abort with an error. Having the columns in memory, it will print them out along with their sum (just a simple application, you can do what ever you want at this stage). Reading the table finishes here. The rest of the program is a demonstration of writing a table. While parsing the rows, this program will change the first column (to be counters) and multiply the second by 10 (so the output will be different). Then it will define the order of the output columns by setting the ‘next’ element (to create a *note List of gal_data_t::). Before writing, this function will also set names for the columns (units and comments can be defined in a similar manner). Writing the columns to a file is then done through a simple call to ‘gal_table_write’. The operations that are shown in this example program are not necessary all the time. For example, in many cases, you know the numerical data type of the column before writing your program (see *note Numeric data types::), so type checking and copying to a specific type won’t be necessary. #include #include #include int main(void) { /* File names and column names (which may also be numbers). */ char *c1_name="NAME1", *c2_name="NAME2", *c3_name="10"; char *inname="input.fits", *hdu="1", *outname="out.fits"; /* Internal parameters. */ float *array2; double *array3; int32_t *array1; size_t i, counter=0; gal_data_t *c1, *c2; gal_data_t tmp, *col, *columns; gal_list_str_t *column_ids=NULL; /* Define the columns to read. */ gal_list_str_add(&column_ids, c1_name, 0); gal_list_str_add(&column_ids, c2_name, 0); gal_list_str_add(&column_ids, c3_name, 0); /* The columns were added in reverse, so correct it. */ gal_list_str_reverse(&column_ids); /* Read the desired columns. */ columns = gal_table_read(inname, hdu, column_ids, GAL_TABLE_SEARCH_NAME, 1, -1, NULL); /* Go over the columns, we'll assume that you don't know their type * a-priori, so we'll check */ counter=1; for(col=columns; col!=NULL; col=col->next) switch(counter++) { case 1: /* First column: we want it as int32_t. */ c1=gal_data_copy_to_new_type(col, GAL_TYPE_INT32); array1 = c1->array; break; case 2: /* Second column: we want it as float. */ c2=gal_data_copy_to_new_type(col, GAL_TYPE_FLOAT32); array2 = c2->array; break; case 3: /* Third column: it MUST be double. */ if(col->type!=GAL_TYPE_FLOAT64) { fprintf(stderr, "Column %s must be float64 type, it is " "%s", c3_name, gal_type_name(col->type, 1)); exit(EXIT_FAILURE); } array3 = col->array; break; } /* As an example application we'll just print them out. In the * meantime (just for a simple demonstration), change the first * array value to the counter and multiply the second by 10. */ for(i=0;isize;++i) { printf("%zu: %d + %f + %f = %f\n", i+1, array1[i], array2[i], array3[i], array1[i]+array2[i]+array3[i]); array1[i] = i+1; array2[i] *= 10; } /* Link the first two columns as a list. */ c1->next = c2; c2->next = NULL; /* Set names for the columns and write them out. */ c1->name = "COUNTER"; c2->name = "VALUE"; gal_table_write(c1, NULL, GAL_TABLE_FORMAT_BFITS, outname); /* The names weren't allocated, so to avoid cleaning-up problems, * we'll set them to NULL. */ c1->name = c2->name = NULL; /* Clean up and return. */ gal_data_free(c1); gal_data_free(c2); gal_list_data_free(columns); gal_list_str_free(column_ids, 0); /* strings weren't allocated. */ return EXIT_SUCCESS; }  File: gnuastro.info, Node: Developing, Next: Gnuastro programs list, Prev: Library, Up: Top 11 Developing ************* The basic idea of GNU Astronomy Utilities is for an interested astronomer to be able to easily understand the code of any of the programs or libraries, be able to modify the code if s/he feels there is an improvement and finally, to be able to add new programs or libraries for their own benefit, and the larger community if they are willing to share it. In short, we hope that at least from the software point of view, the “obscurantist faith in the expert’s special skill and in his personal knowledge and authority†can be broken, see *note Science and its tools::. With this aim in mind, Gnuastro was designed to have a very basic, simple, and easy to understand architecture for any interested inquirer. This chapter starts with very general design choices, in particular *note Why C:: and *note Program design philosophy::. It will then get a little more technical about the Gnuastro code and file/directory structure in *note Coding conventions:: and *note Program source::. *note The TEMPLATE program:: discusses a minimal (and working) template to help in creating new programs or easier learning of a program’s internal structure. Some other general issues about documentation, building and debugging are then discussed. This chapter concludes with how you can learn about the development and get involved in *note Gnuastro project webpage::, *note Developing mailing lists:: and *note Contributing to Gnuastro::. * Menu: * Why C:: Why Gnuastro is designed in C. * Program design philosophy:: General ideas behind the package structure. * Coding conventions:: Gnuastro coding conventions. * Program source:: Conventions for the code. * Documentation:: Documentation is an integral part of Gnuastro. * Building and debugging:: Build and possibly debug during development. * Test scripts:: Understanding the test scripts. * Developer's checklist:: Checklist to finalize your changes. * Gnuastro project webpage:: Central hub for Gnuastro activities. * Developing mailing lists:: Stay up to date with Gnuastro’s development. * Contributing to Gnuastro:: Share your changes with all users.  File: gnuastro.info, Node: Why C, Next: Program design philosophy, Prev: Developing, Up: Developing 11.1 Why C programming language? ================================ Currently the programming language that is most commonly used in scientific applications is C++(1), Python(2), and Julia(3) (which is a newcomer but swiftly gaining ground). One of the main reasons behind this choice is their high-level abstractions. However, GNU Astronomy Utilities is fully written in the C programming language(4). The reasons can be summarized with simplicity, portability and efficiency/speed. All three are very important in a scientific software and we will discuss them below. Simplicity can best be demonstrated in a comparison of the main books of C++ and C. The “C programming languageâ€(5) book, written by the authors of C, is only 286 pages and covers a very good fraction of the language, it has also remained unchanged from 1988. C is the main programming language of nearly all operating systems and there is no plan of any significant update. On the other hand, the most recent “C++ programming languageâ€(6) book, also written by its author, has 1366 pages and its fourth edition came out in 2013! As discussed in *note Science and its tools::, it is very important for other scientists to be able to readily read the code of a program at their will with minimum requirements. In C++, inheriting objects in the object oriented programming paradigm and their internal functions make the code very easy to write for a programmer who is deeply invested in those objects and understands all their relations well. But it simultaneously makes reading the program for a first time reader (a curious scientist who wants to know only how a small step was done) extremely hard. Before understanding the methods, the scientist has to invest a lot of time and energy in understanding those objects and their relations. But in C, everything is done with basic language types for example ‘int’s or ‘float’s and their pointers to define arrays. So when an outside reader is only interested in one part of the program, that part is all they have to understand. Recently it is also becoming common to write scientific software in Python, or a combination of it with C or C++. Python is a high level scripting language which doesn’t need compilation. It is very useful when you want to do something on the go and don’t want to be halted by the troubles of compiling, linking, memory checking, etc. When the datasets are small and the job is temporary, this ability of Python is great and is highly encouraged. A very good example might be plotting, in which Python is undoubtedly one of the best. But as the data sets increase in size and the processing becomes more complicated, the speed of Python scripts significantly decrease. So when the program doesn’t change too often and is widely used in a large community, mostly on large data sets (like astronomical images), using Python will waste a lot of valuable research-hours. It is possible to wrap C or C++ functions with Python to fix the speed issue. But this creates further complexity, because the interested scientist has to master two programming languages and their connection (which is not trivial). Like C++, Python is object oriented, so as explained above, it needs a high level of experience with that particular program to reasonably understand its inner workings. To make things worse, since it is mainly for on-the-go programming(7), it can undergo significant changes. One recent example is how Python 2.x and Python 3.x are not compatible. Lots of research teams that invested heavily in Python 2.x cannot benefit from Python 3.x or future versions any more. Some converters are available, but since they are automatic, lots of complications might arise in the conversion(8). If a research project begins using Python 3.x today, there is no telling how compatible their investments will be when Python 4.x or 5.x will come out. This stems from the core principles of Python, which are very useful when you look in the ‘on the go’ basis as described before and not future usage. Reproducibility (ability to run the code in the future) is a core principal of any scientific result, or the software that produced that result. Rebuilding all the dependencies of a software in an obsolete language is not easy. Future-proof code (as long as current operating systems will be used) is written in C. The portability of C is best demonstrated by the fact that both C++ and Python are part of the C-family of programming languages which also include Julia, Java, Perl, and many other languages. C libraries can be immediately included in C++, and it is easy to write wrappers for them in all C-family programming languages. This will allow other scientists to benefit from C libraries using any C-family language that they prefer. As a result, Gnuastro’s library is already usable in C and C++, and wrappers will be(9) added for higher-level languages like Python, Julia and Java. The final reason was speed. This is another very important aspect of C which is not independent of simplicity (first reason discussed above). The abstractions provided by the higher-level languages (which also makes learning them harder for a newcomer) comes at the cost of speed. Since C is a low-level language(10) (closer to the hardware), it is much less complex for both the human reader _and_ the computer. The benefits of simplicity for a human were discussed above. Simplicity for the computer translates into more efficiently (faster) programs. This creates a much closer relation between the scientist/programmer (or their program) and the actual data and processing. The GNU coding standards(11) also encourage the use of C over all other languages when generality of usage and “high speed†is desired. ---------- Footnotes ---------- (1) (2) (3) (4) (5) Brian Kernighan, Dennis Ritchie. _The C programming language_. Prentice Hall, Inc., Second edition, 1988. It is also commonly known as K&R and is based on the ANSI C and ISO C90 standards. (6) Bjarne Stroustrup. _The C++ programming language_. Addison-Wesley Professional; 4 edition, 2013. (7) Note that Python is good for fast programming, not fast programs. (8) For example see Jenness (2017) (https://arxiv.org/abs/1712.00461) which describes how LSST is managing the transition. (9) (10) Low-level languages are those that directly operate the hardware like assembly languages. So C is actually a high-level language, but it can be considered one of the lowest-level languages among all high-level languages. (11)  File: gnuastro.info, Node: Program design philosophy, Next: Coding conventions, Prev: Why C, Up: Developing 11.2 Program design philosophy ============================== The core processing functions of each program (and all libraries) are written mostly with the basic ISO C90 standard. We do make lots of use of the GNU additions to the C language in the GNU C library(1), but these functions are mainly used in the user interface functions (reading your inputs and preparing them prior to or after the analysis). The actual algorithms, which most scientists would be more interested in, are much more closer to ISO C90. For this reason, program source files that deal with user interface issues and those doing the actual processing are clearly separated, see *note Program source::. If anything particular to the GNU C library is used in the processing functions, it is explained in the comments in between the code. All the Gnuastro programs provide very low level and modular operations (modeled on GNU Coreutils). Almost all the basic command-line programs like ‘ls’, ‘cp’ or ‘rm’ on GNU/Linux operating systems are part of GNU Coreutils. This enables you to use shell scripting languages (for example GNU Bash) to operate on a large number of files or do very complex things through the creative combinations of these tools that the authors had never dreamed of. We have put a few simple examples in *note Tutorials::. For example all the analysis output can be saved as ASCII tables which can be fed into your favorite plotting program to inspect visually. Python’s Matplotlib is very useful for fast plotting of the tables to immediately check your results. If you want to include the plots in a document, you can use the PGFplots package within LaTeX, no attempt is made to include such operations in Gnuastro. In short, Bash can act as a glue to connect the inputs and outputs of all these various Gnuastro programs (and other programs) in any fashion. Of course, Gnuastro’s programs are just front-ends to the main workhorse (*note Gnuastro library::), allowing a user to create their own programs (for example with *note BuildProgram::). So once the functions within programs become mature enough, they will be moved within the libraries for even more general applications. The advantage of this architecture is that the programs become small and transparent: the starting and finishing point of every program is clearly demarcated. For nearly all operations on a modern computer (fast file input-output) with a modest level of complexity, the read/write speed is insignificant compared to the actual processing a program does. Therefore the complexity which arises from sharing memory in a large application is simply not worth the speed gain. Gnuastro’s design is heavily influenced from Eric Raymond’s “The Art of Unix Programmingâ€(2) which beautifully describes the design philosophy and practice which lead to the success of Unix-based operating systems(3). ---------- Footnotes ---------- (1) Gnuastro uses many GNU additions to the C library. However, thanks to the GNU Portability library (Gnulib) which is included in the Gnuastro tarball, users of non-GNU/Linux operating systems can also benefit from all these features when using Gnuastro. (2) Eric S. Raymond, 2004, _The Art of Unix Programming_, Addison-Wesley Professional Computing Series. (3) KISS principle: Keep It Simple, Stupid!  File: gnuastro.info, Node: Coding conventions, Next: Program source, Prev: Program design philosophy, Up: Developing 11.3 Coding conventions ======================= In Gnuastro, we try our best to follow the GNU coding standards. Added to those, Gnuastro defines the following conventions. It is very important for readability that the whole package follows the same convention. • The code must be easy to read by eye. So when the order of several lines within a function does not matter (for example when defining variables at the start of a function). You should put the lines in the order of increasing length and group the variables with similar types such that this half-pyramid of declarations becomes most visible. If the reader is interested, a simple search will show them the variable they are interested in. However, this visual aid greatly helps in general inspections of the code and help the reader get a grip of the function’s processing. • A function that cannot be fully displayed (vertically) in your monitor is probably too long and may be more useful if it is broken up into multiple functions. 40 lines is usually a good reference. When the start and end of a function are clearly visible in one glance, the function is much more easier to understand. This is most important for low-level functions (which usually define a lot of variables). Low-level functions do most of the processing, they will also be the most interesting part of a program for an inquiring astronomer. This convention is less important for higher level functions that don’t define too many variables and whose only purpose is to run the lower-level functions in a specific order and with checks. In general you can be very liberal in breaking up the functions into smaller parts, the GNU Compiler Collection (GCC) will automatically compile the functions as inline functions when the optimizations are turned on. So you don’t have to worry about decreasing the speed. By default Gnuastro will compile with the ‘-O3’ optimization flag. • All Gnuastro hand-written text files (C source code, Texinfo documentation source, and version control commit messages) should not exceed *75* characters per line. Monitors today are certainly much wider, but with this limit, reading the functions becomes much more easier. Also for the developers, it allows multiple files (or multiple views of one file) to be displayed beside each other on wide monitors. Emacs’s buffers are excellent for this capability, setting a buffer width of 80 with ‘’ will allow you to view and work on several files or different parts of one file using the wide monitors common today. Emacs buffers can also be used as a shell prompt and compile the program (with ), and 80 characters is the default width in most terminal emulators. If you use Emacs, Gnuastro sets the 75 character ‘fill-column’ variable automatically for you, see cartouche below. For long comments you can use press in Emacs to separate them into separate lines automatically. For long literal strings, you can use the fact that in C, two strings immediately after each other are concatenated, for example ‘"The first part, " "and the second part."’. Note the space character in the end of the first part. Since they are now separated, you can easily break a long literal string into several lines and adhere to the maximum 75 character line length policy. • The headers required by each source file (ending with ‘.c’) should be defined inside of it. All the headers a complete program needs should _not_ be stacked in another header to include in all source files (for example ‘main.h’). Although most ‘professional’ programmers choose this single header method, Gnuastro is primarily written for professional/inquisitive astronomers (who are generally amateur programmers). The list of header files included provides valuable general information and helps the reader. ‘main.h’ may only include the header file(s) that define types that the main program structure needs, see ‘main.h’ in *note Program source::. Those particular header files that are included in ‘main.h’ can of course be ignored (not included) in separate source files. • The headers should be classified (by an empty line) into separate groups: 1. ‘#include ’: This must be the first code line (not commented or blank) in each source file _within Gnuastro_. It sets macros that the GNU Portability Library (Gnulib) will use for a unified environment (GNU C Library), even when the user is building on a system that doesn’t use the GNU C library. 2. The C library header files, for example ‘stdio.h’, ‘stdlib.h’, or ‘math.h’. 3. Installed library header files, including Gnuastro’s installed headers (for example ‘cfitsio.h’ or ‘gsl/gsl_rng.h’, or ‘gnuastro/fits.h’). 4. Gnuastro’s internal headers (that are not installed), for example ‘gnuastro-internal/options.h’. 5. For programs, the ‘main.h’ file (which is needed by the next group of headers). 6. That particular program’s header files, for example ‘mkprof.h’, or ‘noisechisel.h’. As much as order does not matter when you include the header of each group, sort them by length, as described above. • All function names, variables, etc should be in lower case. Macros and constant global ‘enum’s should be in upper case. • For the naming of exported header files, functions, variables, macros, and library functions, we adopt similar conventions to those used by the GNU Scientific Library (GSL)(1). In particular, in order to avoid clashes with the names of functions and variables coming from other libraries the name-space ‘‘gal_’’ is prefixed to them. GAL stands for _G_NU _A_stronomy _L_ibrary. • All installed header files should be in the ‘lib/gnuastro’ directory (under the top Gnuastro source directory). After installation, they will be put in the ‘$prefix/include/gnuastro’ directory (see *note Installation directory:: for ‘$prefix’). Therefore with this convention Gnuastro’s headers can be included in internal (to Gnuastro) and external (a library user) source files with the same line # include Note that the GSL convention for header file names is ‘gsl_specialname.h’, so your include directive for a GSL header must be something like ‘#include ’. Gnuastro doesn’t follow this GSL guideline because of the repeated ‘gsl’ in the include directive. It can be confusing and cause bugs for beginners. All Gnuastro (and GSL) headers must be located within a unique directory and will not be mixed with other headers. Therefore the ‘‘gsl_’’ prefix to the header file names is redundant(2). • All installed functions and variables should also include the base-name of the file in which they are defined as prefix, using underscores to separate words(3). The same applies to exported macros, but in upper case. For example in Gnuastro’s top source directory, the prototype of function ‘gal_box_border_from_center’ is in ‘lib/gnuastro/box.h’, and the macro ‘GAL_POLYGON_MAX_CORNERS’ is defined in ‘lib/gnuastro/polygon.h’. This is necessary to give any user (who is not familiar with the library structure) the ability to follow the code. This convention does make the function names longer (a little harder to write), but the extra documentation it provides plays an important role in Gnuastro and is worth the cost. • There should be no trailing white space in a line. To do this automatically every time you save a file in Emacs, add the following line to your ‘~/.emacs’ file. (add-hook 'before-save-hook 'delete-trailing-whitespace) • There should be no tabs in the indentation(4). • Individual, contextually similar, functions in a source file are separated by 5 blank lines to be easily seen to be related in a group when parsing the source code by eye. In Emacs you can use . • One group of contextually similar functions in a source file is separated from another with 20 blank lines. In Emacs you can use . Each group of functions has short descriptive title of the functions in that group. This title is surrounded by asterisks (<*>) to make it clearly distinguishable. Such contextual grouping and clear title are very important for easily understanding the code. • Always read the comments before the patch of code under it. Similarly, try to add as many comments as you can regarding every patch of code. Effectively, we want someone to get a good feeling of the steps, without having to read the C code and only by reading the comments. This follows similar principles as Literate programming (https://en.wikipedia.org/wiki/Literate_programming). The last two conventions are not common and might benefit from a short discussion here. With a good experience in advanced text editor operations, the last two are redundant for a professional developer. However, recall that Gnuastro aspires to be friendly to un-familiar, and un-experienced (in programming) eyes. In other words, as discussed in *note Science and its tools::, we want the code to appear welcoming to someone who is completely new to coding (and text editors) and only has a scientific curiosity. Newcomers to coding and development, who are curious enough to venture into the code, will probably not be using (or have any knowledge of) advanced text editors. They will see the raw code in the webpage or on a simple text editor (like Gedit) as plain text. Trying to learn and understand a file with dense functions that are all spaced with one or two blank lines can be very taunting for a newcomer. But when they scroll through the file and see clear titles and meaningful spaces for similar functions, we are helping them find and focus on the part they are most interested in sooner and easier. *GNU Emacs, the recommended text editor:* GNU Emacs is an extensible and easily customizable text editor which many programmers rely on for developing due to its countless features. Among them, it allows specification of certain settings that are applied to a single file or to all files in a directory and its sub-directories. In order to harmonize code coming from different contributors, Gnuastro comes with a ‘.dir-locals.el’ file which automatically configures Emacs to satisfy most of the coding conventions above when you are using it within Gnuastro’s directories. Thus, Emacs users can readily start hacking into Gnuastro. If you are new to developing, we strongly recommend this editor. Emacs was the first project released by GNU and is still one of its flagship projects. Some resources can be found at: Official manual At . This is a great and very complete manual which is being improved for over 30 years and is the best starting point to learn it. It just requires a little patience and practice, but rest assured that you will be rewarded. If you install Emacs, you also have access to this manual on the command-line with the following command (see *note Info::). $ info emacs A guided tour of emacs At . A short visual tour of Emacs, officially maintained by the Emacs developers. Unofficial mini-manual At . A shorter manual which contains nice animated images of using Emacs. ---------- Footnotes ---------- (1) (2) For GSL, this prefix has an internal technical application: GSL’s architecture mixes installed and not-installed headers in the same directory. This prefix is used to identify their installation status. Therefore this filename prefix in GSL a technical internal issue (for developers, not users). (3) The convention to use underscores to separate words, called “snake case†(or “snake_caseâ€). This is also recommended by the GNU coding standards. (4) If you use Emacs, Gnuastro’s ‘.dir-locals.el’ file will automatically never use tabs for indentation. To make this a default in all your Emacs sessions, you can add the following line to your ‘~/.emacs’ file: ‘(setq-default indent-tabs-mode nil)’  File: gnuastro.info, Node: Program source, Next: Documentation, Prev: Coding conventions, Up: Developing 11.4 Program source =================== Besides the fact that all the programs share some functions that were explained in *note Library::, everything else about each program is completely independent. Recall that Gnuastro is written for an active astronomer/scientist (not a passive one who just uses a software). It must thus be easily navigable. Hence there are fixed source files (that contain fixed operations) that must be present in all programs, these are discussed fully in *note Mandatory source code files::. To easily understand the explanations in this section you can use *note The TEMPLATE program:: which contains the bare minimum code for one working program. This template can also be used to easily add new utilities: just copy and paste the directory and change ‘TEMPLATE’ with your program’s name. * Menu: * Mandatory source code files:: Description of files common to all programs. * The TEMPLATE program:: Template for easy creation of a new program.  File: gnuastro.info, Node: Mandatory source code files, Next: The TEMPLATE program, Prev: Program source, Up: Program source 11.4.1 Mandatory source code files ---------------------------------- Some programs might need lots of source files and if there is no fixed convention, navigating them can become very hard for a new inquirer into the code. The following source files exist in every program’s source directory (which is located in ‘bin/progname’). For small programs, these files are enough. Larger programs will need more files and developers are encouraged to define any number of new files. It is just important that the following list of files exist and do what is described here. When creating other source files, please choose filenames that are a complete single word: don’t abbreviate (abbreviations are cryptic). For a minimal program containing all these files, see *note The TEMPLATE program::. ‘main.c’ Each executable has a ‘main’ function, which is located in ‘main.c’. Therefore this file is the starting point when reading any program’s source code. No actual processing functions must be defined in this file, the function(s) in this file are only meant to connect the most high level steps of each program. Generally, ‘main’ will first call the top user interface function to read user input and make all the preparations. Then it will pass control to the top processing function for that program. The functions to do both these jobs must be defined in other source files. ‘main.h’ All the major parameters which will be used in the program must be stored in a structure which is defined in ‘main.h’. The name of this structure is usually ‘prognameparams’, for example ‘cropparams’ or ‘noisechiselparams’. So ‘#include "main.h"’ will be a staple in all the source codes of the program. It is also regularly the first (and only) argument most of the program’s functions which greatly helps in readability. Keeping all the major parameters of a program in this structure has the major benefit that most functions will only need one argument: a pointer to this structure. This will significantly facilitate the job of the programmer, the inquirer and the computer. All the programs in Gnuastro are designed to be low-level, small and independent parts, so this structure should not get too large. The main root structure of all programs contains at least one instance of the ‘gal_options_common_params’ structure. This structure will keep the values to all common options in Gnuastro’s programs (see *note Common options::). This top root structure is conveniently called ‘p’ (short for parameters) by all the functions in the programs and the common options parameters within it are called ‘cp’. With this convention any reader can immediately understand where to look for the definition of one parameter. For example you know that ‘p->cp->output’ is in the common parameters while ‘p->threshold’ is in the program’s parameters. With this basic root structure, source code of functions can potentially become full of structure de-reference operators (‘->’) which can make the code very un-readable. In order to avoid this, whenever a structure element is used more than a couple of times in a function, a variable of the same type and with the same name (so it can be searched) as the desired structure element should be defined with the value of the root structure inside of it in definition time. Here is an example. char *hdu=p->cp.hdu; float threshold=p->threshold; ‘args.h’ The options particular to each program are defined in this file. Each option is defined by a block of parameters in ‘program_options’. These blocks are all you should modify in this file, leave the bottom group of definitions untouched. These are fed directly into the GNU C library’s Argp facilities and it is recommended to have a look at that for better understand what is going on, although this is not required here. Each element of the block defining an option is described under ‘argp_option’ in ‘bootstrapped/lib/argp.h’ (from Gnuastro’s top source file). Note that the last few elements of this structure are Gnuastro additions (not documented in the standard Argp manual). The values to these last elements are defined in ‘lib/gnuastro/type.h’ and ‘lib/gnuastro-internal/options.h’ (from Gnuastro’s top source directory). ‘ui.h’ Besides declaring the exported functions of ‘ui.c’, this header also keeps the “keyâ€s to every program-specific option. The first class of keys for the options that have a short-option version (single letter, see *note Options::). The character that is defined here is the option’s short option name. The list of available alphabet characters can be seen in the comments. Recall that some common options also take some characters, for those, see ‘lib/gnuastro-internal/options.h’. The second group of options are those that don’t have a short option alternative. Only the first in this group needs a value (‘1000’), the rest will be given a value by C’s ‘enum’ definition, so the actual value is irrelevant and must never be used, always use the name. ‘ui.c’ Everything related to reading the user input arguments and options, checking the configuration files and checking the consistency of the input parameters before the actual processing is run should be done in this file. Since most functions are the same, with only the internal checks and structure parameters differing. We recommend going through the ‘ui.c’ of *note The TEMPLATE program::, or several other programs for a better understanding. The most high-level function in ‘ui.c’ is named ‘ui_read_check_inputs_setup’. It accepts the raw command-line inputs and a pointer to the root structure for that program (see the explanation for ‘main.h’). This is the function that ‘main’ calls. The basic idea of the functions in this file is that the processing functions should need a minimum number of such checks. With this convention an inquirer who only wants to understand only one part (mostly the processing part and not user input details and sanity checks) of the code can easily do so in the later files. It also makes all the errors related to input appear before the processing begins which is more convenient for the user. ‘progname.c, progname.h’ The high-level processing functions in each program are in a file named ‘progname.c’, for example ‘crop.c’ or ‘noisechisel.c’. The function within these files which ‘main’ calls is also named after the program, for example void crop(struct cropparams *p) or void noisechisel(struct noisechiselparams *p) In this manner, if an inquirer is interested the processing steps, they can immediately come and check this file for the first processing step without having to go through ‘main.c’ and ‘ui.c’ first. In most situations, any failure in any step of the programs will result in an informative error message and an immediate abort in the program. So there is usually no need for return values. Under more complicated situations where a return value might be necessary, ‘void’ will be replaced with an ‘int’ in the examples above. This value must be directly returned by ‘main’, so it has to be an ‘int’. ‘authors-cite.h’ This header file keeps the global variable for the program authors and its BibTeX record for citation. They are used in the outputs of the common options ‘--version’ and ‘--cite’, see *note Operating mode options::.  File: gnuastro.info, Node: The TEMPLATE program, Prev: Mandatory source code files, Up: Program source 11.4.2 The TEMPLATE program --------------------------- The extra creativity offered by libraries comes at a cost: you have to actually write your ‘main’ function and get your hands dirty in managing user inputs: are all the necessary parameters given a value? is the input in the correct format? do the options and the inputs correspond? and many other similar checks. So when an operation has well-defined inputs and outputs and is commonly needed, it is much more worthwhile to simply do use all the great features that Gnuastro has already defined for such operations. To make it easier to learn/apply the internal program infra-structure discussed in *note Mandatory source code files::, Gnuastro ships with a template program when using the *note Version controlled source::. It is not available in the Gnuastro tarball so it doesn’t confuse people using the tarball. The ‘bin/TEMPLATE’ directory in Gnuastro’s clone contains the bare-minimum files necessary to define a new program and all the necessary files/functions are pre-defined there. You can take the following steps if you want to add a new program to Gnuastro: 1. Select a name for your new program (for example ‘myprog’). 2. Copy the ‘TEMPLATE’ directory to a directory with your program’s name: $ cp -R bin/TEMPLATE bin/myprog 3. Open ‘configure.ac’ in the top Gnuastro source. This file manages the operations that are done when a user runs ‘./configure’. Going down the file, you will notice repetitive parts for each program. Copy one of those and correct the names of the copied program to your new program name. We follow alphabetic ordering here, so please place it correctly. There are multiple places where this has to be done, so be patient and go down to the bottom of the file. Ultimately add ‘bin/myprog/Makefile’ to ‘AC_CONFIG_FILES’, only here the ordering depends on the length of the name. 4. Open ‘Makefile.am’ in the top Gnuastro source. Similar to the previous step, add your new program similar to all the other programs. 5. Change ‘TEMPLATE’ to ‘myprog’ in the file names and contents of the files in the ‘bin/myprog/’ directory. 6. Run the following command to re-build the configuration and build system. $ autoreconf -f Your new program will be built the next time you run ‘./configure’ and ‘make’. You can now start adding your special checks/processing.  File: gnuastro.info, Node: Documentation, Next: Building and debugging, Prev: Program source, Up: Developing 11.5 Documentation ================== Documentation (this book) is an integral part of Gnuastro (see *note Science and its tools::). Documentation is not considered a separate project and must be written by its developers. Users can make edits/corrections, but the initial writing must be by the developer. So, no change is considered valid for implementation unless the respective parts of the book have also been updated. The following procedure can be a good suggestion to take when you have a new idea and are about to start implementing it. The steps below are not a requirement, the important thing is that when you send the program to be included in Gnuastro, the book and the code have to both be fully up-to-date and compatible and the purpose should be very clearly explained. You can follow any path you choose to do this, the following path was what we have found to be most successful until now. 1. Edit the book and fully explain your desired change, such that your idea is completely embedded in the general context of the book with no sense of discontinuity for a first time reader. This will allow you to plan the idea much more accurately and in the general context of Gnuastro or a particular program. Later on, when you are coding, this general context will significantly help you as a road-map. A very important part of this process is the program introduction, which explains the purposes of the program. Before actually starting to code, explain your idea’s purpose thoroughly in the start of the program section you wish to add or edit. While actually writing its purpose for a new reader, you will probably get some very valuable ideas that you hadn’t thought of before. This has occurred several times during the creation of Gnuastro. If an introduction already exists, embed or blend your idea’s purpose with the existing purposes. We emphasize that doing this is equally useful for you (as the programmer) as it is useful for the user (reader). Recall that the purpose of a program is very important, see *note Program design philosophy::. As you have already noticed for every program, it is very important that the basics of the science and technique be explained in separate subsections prior to the ‘Invoking Programname’ subsection. If you are writing a new program or your addition to an existing program involves a new concept, also include such subsections and explain the concepts so a person completely unfamiliar with the concepts can get a general initial understanding. You don’t have to go deep into the details, just enough to get an interested person (with absolutely no background) started. If you feel you can’t do that, then you have probably not understood the concept yourself! If you feel you don’t have the time, then think about yourself as the reader in one year: you will forget almost all the details, so now that you have done all the theoretical preparations, add a few more hours and document it, so next time you don’t have to prepare as much. Have in mind that your only limitation in length is the fatigue of the reader after reading a long text, nothing else. So as long as you keep it relevant/interesting for the reader, there is no page number limit/cost! It might also help if you start discussing the usage of your idea in the ‘Invoking ProgramName’ subsection (explaining the options and arguments you have in mind) at this stage too. Actually starting to write it here will really help you later when you are coding. 2. After you have finished adding your initial intended plan to the book, then start coding your change or new program within the Gnuastro source files. While you are coding, you will notice that somethings should be different from what you wrote in the book (your initial plan). So correct them as you are actually coding, but don’t worry too much about missing a few things (see the next step). 3. After your work has been fully implemented, read the section documentation from the start and see if you didn’t miss any change in the coding and to see if the context is fairly continuous for a first time reader (who hasn’t seen the book or had known Gnuastro before you made your change). gnuastro-0.5/doc/gnuastro.info-30000644000175000017500000110347313217220436013576 00000000000000This is gnuastro.info, produced by makeinfo version 6.5 from gnuastro.texi. This book documents version 0.5 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2017 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation Licenseâ€. INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro’s library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeNoise: (gnuastro)MakeNoise. Make (add) noise to an image. * astmknoise: (gnuastro)Invoking astmknoise. Options to MakeNoise. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. END-INFO-DIR-ENTRY  File: gnuastro.info, Node: NoiseChisel, Next: MakeCatalog, Prev: Statistics, Up: Data analysis 7.2 NoiseChisel =============== Once instrumental signatures are removed from the raw data in the initial reduction process (see *note Data manipulation::). We are ready to derive scientific results out of them. But we can’t do anything special with a raw dataset, for example an image is just an array of values. Every pixel just has one value and its position within the image. Therefore, the first step of your high-level analysis will be to classify/label the dataset elements/pixels into two classes: signal and noise. This process is formally known as _detection_. Afterwards, you want to separate the detections into multiple components (for example when two detected regions aren’t touching, they should be treated independently as two distant galaxies for example). This higher level classification of the detections is known as _segmentation_. NoiseChisel is Gnuastro’s program for detection and segmentation. NoiseChisel works based on a new noise-based approach to signal detection and was introduced to the astronomical community in Akhlaghi and Ichikawa [2015] (https://arxiv.org/abs/1505.01664). NoiseChisel’s primary output is an array (image) with the same size as the input but containing labels: those pixels with a label of 0 are noise/sky while those pixels with labels larger than 0 are detections (separate segments will be given positive integers, starting from 1). For more on NoiseChisel’s particular output format and its benefits (especially in conjunction with *note MakeCatalog::), please see Akhlaghi [2016] (https://arxiv.org/abs/1611.06387). The published paper cannot under go any updates, but the NoiseChisel software has evolved, you can see the major changes in *note NoiseChisel changes after publication::. Data is inherently mixed with noise: only mock/simulated datasets are free of noise. So this process of separating signal from noise is not trivial. In particular, most scientifically interesting astronomical targets are faint, can have a large variety of morphologies along with a large distribution in brightness and size which are all drowned in a ocean of noise. So detection is a uniquely vital aspect of any scientific work and even more so for astronomical research. This is such a fundamental step that designing of NoiseChisel was the primary motivation behind creating Gnuastro: the first generation of Gnuastro’s programs were all first part of what later became NoiseChisel, afterwards they spinned-off into separate programs. The name of NoiseChisel is derived from the first thing it does after thresholding the dataset: to erode it. In mathematical morphology, erosion on pixels can be pictured as carving off boundary pixels. Hence, what NoiseChisel does is similar to what a wood chisel or stone chisel do. It is just not a hardware, but a software. In fact looking at it as a chisel and your dataset as a solid cube of rock will greatly help in best using it: with NoiseChisel you literally carve the galaxies/stars/comets out of the noise. Try running it with the ‘--checkdetection’ option to see each step of the carving process on your input dataset. You can then change a specific option to carve out your signal out of the noise more successfully. * Menu: * NoiseChisel changes after publication:: Changes to the software after publication. * Invoking astnoisechisel:: Options and arguments for NoiseChisel.  File: gnuastro.info, Node: NoiseChisel changes after publication, Next: Invoking astnoisechisel, Prev: NoiseChisel, Up: NoiseChisel 7.2.1 NoiseChisel changes after publication ------------------------------------------- Before using NoiseChisel it is strongly recommended to read Akhlaghi and Ichikawa [2015] (https://arxiv.org/abs/1505.01664) to gain a good understanding of what it does and how each parameter influences the output. Thanks to that paper, there is no need to go into the details of the major processing steps. Hence we can just dive into the details of running NoiseChisel in *note Invoking astnoisechisel::. However, the paper cannot undergo any further updates, but NoiseChisel will evolve: better algorithms or steps will be found, thus options will be added or removed. So this book is the final and definitive guide. For a more detailed list of changes in each release, please follow the ‘NEWS’ file. The ‘NEWS’ file is in the released Gnuastro tarball (see *note Release tarball::). You can also view the most recent ‘NEWS’ file online (http://git.savannah.gnu.org/cgit/gnuastro.git/plain/NEWS)(1). To make the transition form the paper to this book easier (and encourage reading the paper), below you can see the major changes since the paper was published. First, the options that have been removed are discussed, followed by those that have been added. Removed options: • ‘--dilate’: In the paper, true detections were dilated for a final dig into the noise. However, simple 8-connected dilation can produce boxy results which are not realistic and could miss diffuse flux. The final dig into the noise is now done by “growâ€ing the true detections, similar to how true clumps were grown, see the description of ‘--detgrowquant’ below and in *note Detection options:: for more on the new alternative. Added options: • ‘--widekernel’: NoiseChisel uses the difference between the mode and median to identify if a tile should be used for estimating the quantile thresholds (see *note Quantifying signal in a tile::). Until now, NoiseChisel would convolve an image once and estimate the proper tiles for quantile estimations on the convolved image. The same convolved image would later be used for quantile estimation. A larger kernel does increase the skewness (and thus difference between the mode and median), however, it disfigures the shapes/morphology of the objects. This new ‘--widekernel’ option (and a corresponding ‘--wkhdu’ option to specify its HDU) option are added to solve such cases. When its given, the input will be convolved with both the sharp (given through the ‘--kernel’ option) and wide kernels. The mode and median are calculated on the dataset that is convolved with the wider kernel, then the quantiles are estimated on the image convolved with the sharper kernel. • ‘--noerodequant’: to specify a quantile threshold where erosion will not apply. This is useful to detect sharper point-like sources that will be missed due to too much erosion. To completely ignore this features give this option a value of 1 (only the largest valued pixel in the input will not be eroded). • ‘--qthreshtilequant’: to manually remove the measured qthresh from some tiles. This feature helps in detecting large and extended diffuse (almost flat) signal when necessary, see *note Detection options::. • ‘--detgrowquant’: is used to grow the final true detections until a given quantile in the same way that clumps are grown during segmentation (compare columns 2 and 3 in Figure 10 of the paper). It replaces the old ‘--dilate’ option in the paper and older versions of Gnuastro. Dilation is a blind growth method which causes objects to be boxy or diamond shaped when too many layers are added. However, with the growth method that is defined now, we can follow the signal into the noise with any shape. The appropriate quantile depends on your dataset’s correlated noise properties and how cleanly it was Sky subtracted. The new ‘--detgrowmaxholesize’ can also be used to specify the maximum hole size to fill as part of this growth, see the description in *note Detection options:: for more details. This new growth process can be much more successful in detecting diffuse flux around true detections compared to dilation and give more realistic results, but it can also increase the NoiseChisel run time (depending on the given value and input size). • ‘--cleangrowndet’: A process to further clean/remove the possibility of false detections, see the descriptions under this option in *note Detection options::. ---------- Footnotes ---------- (1) The online version of the ‘NEWS’ file here may contain features that have been implemented, but not yet officially released as a tarball (see *note Downloading the source::). Therefore, please be sure to look at the dates and versions above each group of changed features and make sure it corresponds to your installed version. It is hence recommended to always stay up to date, see *note Announcements::).  File: gnuastro.info, Node: Invoking astnoisechisel, Prev: NoiseChisel changes after publication, Up: NoiseChisel 7.2.2 Invoking NoiseChisel -------------------------- NoiseChisel will detect and segment signal in noise producing a multi-extension labeled image, ready for input into *note MakeCatalog:: to generate a catalog or other processing. The executable name is ‘astnoisechisel’ with the following general template $ astnoisechisel [OPTION ...] InputImage.fits One line examples: ## Detect signal in input.fits: $ astnoisechisel input.fits ## Detect signal assuming input has 4 channels along first dimension ## and 1 along the second. Also set the regular tile size to 100 along ## both dimensions: $ astnoisechisel --numchannels=4,1 --tilesize=100,100 input.fits If NoiseChisel is to do processing (for example you don’t want to get help, or see the values to each input parameter), an input image should be provided with the recognized extensions (see *note Arguments::). NoiseChisel shares a large set of common operations with other Gnuastro programs, mainly regarding input/output, general processing steps, and general operating modes. To help in a unified experience between all of Gnuastro’s programs, these operations have the same command-line options, see *note Common options:: for a full list. Since the common options are thoroughly discussed there, they are no longer reviewed here. You can see all the options with a short description on the command-line with the ‘--help’ option, see *note Getting help::. NoiseChisel’s input image may contain blank elements (see *note Blank pixels::). Blank elements will be ignored in all steps of NoiseChisel. Hence if your dataset has bad pixels which should be masked with a mask image, please use Gnuastro’s *note Arithmetic:: program (in particular its ‘where’ operator) to convert those pixels to blank pixels before running NoiseChisel. Gnuastro’s Arithmetic program has bitwise operators helping you select specific kinds of bad-pixels when necessary. A convolution kernel can also be optionally given. If a value (file name) is given to ‘--kernel’ on the command-line or in a configuration file (see *note Configuration files::), then that file will be used to convolve the image prior to thresholding. Otherwise a default kernel will be used. The default kernel is a 2D Gaussian with a FWHM of 2 pixels truncated at 5 times the FWHM. This choice of the default kernel is discussed in Section 3.1.1 of Akhlaghi and Ichikawa [2015] (https://arxiv.org/abs/1505.01664). See *note Convolution kernel:: for kernel related options. NoiseChisel defines two tessellations over the input (see *note Tessellation::). This enables it to deal with possible gradients in the input dataset and also significantly improve speed by processing each tile on different threads. The tessellation related options are discussed in *note Processing options::. In particular, NoiseChisel uses two tessellations (with everything between them identical except the tile sizes): a fine-grained one with smaller tiles (mainly used in detection) and a more larger tiled one which is used for multi-threaded processing. The common Tessellation options described in *note Processing options:: define all parameters of both tessellations, only the large tile size for the latter tessellation is set through the ‘--largetilesize’ option. To inspect the tessellations on your input dataset, run NoiseChisel with ‘--checktiles’. *Usage TIP:* Frequently use the options starting with ‘--check’. Depending on what you want to detect in the data, you can often play with the parameters/options for a better result than the default parameters. You can start with ‘--checkdetection’ and ‘--checksegmentation’ for the main steps. For their full list please run: $ astnoisechisel --help | grep check In the sections below, NoiseChisel’s options are classified into three general classes to help in easy navigation. *note General NoiseChisel options:: mainly discusses the options relating to input and those that are shared in both detection and segmentation. Options to configure the detection are described in *note Detection options:: and *note Segmentation options:: we discuss how you can fine-tune the segmentation of the detections. Finally in *note NoiseChisel output:: the format of NoiseChisel’s output is discussed. The order of options here follow the same logical order that the respective action takes place within NoiseChisel (note that the output of ‘--help’ is sorted alphabetically). * Menu: * General NoiseChisel options:: General NoiseChisel preprocessing. * Detection options:: Configure detection in NoiseChisel. * Segmentation options:: Configure segmentation in NoiseChisel. * NoiseChisel output:: NoiseChisel’s output format.  File: gnuastro.info, Node: General NoiseChisel options, Next: Detection options, Prev: Invoking astnoisechisel, Up: Invoking astnoisechisel 7.2.2.1 General NoiseChisel options ................................... The options discussed in this section are mainly regarding the input(s), output, and some general processing options that are shared between both detection and segmentation. Recall that you can always see the full list of Gnuastro’s options with the ‘--help’ option. ‘-k STR’ ‘--kernel=STR’ File name of kernel to smooth the image before applying the threshold, see *note Convolution kernel::. The first step of NoiseChisel is to convolve/smooth the image and use the convolved image in multiple steps during the processing. It will be used to define (and later apply) the quantile threshold (see ‘--qthresh’). The convolved image is also used to define the clumps (see Section 3.2.1 and Figure 8 of Akhlaghi and Ichikawa [2015] (https://arxiv.org/abs/1505.01664)). The ‘--kernel’ option is not mandatory. If no kernel is provided, a 2D Gaussian profile with a FWHM of 2 pixels truncated at 5 times the FWHM is used. This choice of the default kernel is discussed in Section 3.1.1 of Akhlaghi and Ichikawa [2015]. ‘--khdu=STR’ HDU containing the kernel in the file given to the ‘--kernel’ option. ‘--convolved=STR’ Use this file as the convolved image and don’t do convolution and ignore ‘--kernel’. NoiseChisel will just check the size of the given dataset is the same as the input’s size. If a wrong image (with the same size) is given to this option, the results (errors, bugs, and etc) are un-predictable. So please use this option with care and in a highly controlled environment. On such scenario is discussed below. In almost all situations, as the input gets larger, the single most CPU and time consuming step in NoiseChisel is convolution (the first step in its processing). The process of testing NoiseChisel for the best parameters in a given analysis will involve running NoiseChisel multiple times: to see the effect of each new option value. Therefore, once the kernel is finalized, re-convolving the input will greatly hinder fast testing of higher-level parameters. With this option, you can convolve the input image with your chosen kernel once before running NoiseChisel, then feed it to NoiseChisel on each test run and thus save valuable time for better/more tests. To build your desired convolution kernel, you can use *note MakeProfiles::. To convolve the image with a given kernel you can use *note Convolve::. Spatial domain convolution is mandatory. In the frequency domain, blank pixels (if present) will cover the whole image and gradients will appear on the edges, see *note Spatial vs. Frequency domain::. Below you can see an example of such a scenario: you want to see how variation of the growth level (through the ‘--detgrowquant’ option) will affect the final result. Recall that you can ignore all the extra spaces, new lines, and ‘‘\’’ if you are typing in the terminal (in a shell script, remove the ‘$’ signs at the start of the lines). ## Make the kernel to convolve with. $ astmkprof --oversample=1 --kernel=gaussian,2,5 ## Convolve the input with the given kernel. $ astconvolve input.fits --kernel=kernel.fits \ --domain=spatial --output=convolved.fits ## Run NoiseChisel with seven growth quantile values. $ for g in 60 65 70 75 80 85 90; do \ astnoisechisel input.fits --convolved=convolved.fits \ --detgrowquant=0.$g --output=$g.fits; \ done ‘--convolvedhdu=STR’ The HDU/extension containing the convolved image in the file given to ‘--convolved’. ‘-w STR’ ‘--widekernel=STR’ File name of a wider kernel to use in estimating the difference of the mode and median in a tile (this difference is used to identify the significance of signal in that tile, see *note Quantifying signal in a tile::). This convolved image is only used for this purpose. Once the mode is found to be sufficiently close to the median, the input convolved with the sharper kernel (‘--kernel’) is used to identify the quantile threshold (see ‘--qthresh’). Since this convolution will significantly slow down the processing, it is optional. If no image is given, the mode and median will be found on the image that is convolved with the dataset in ‘--kernel’. ‘--wkhdu=STR’ HDU containing the kernel file given to the ‘--widekernel’ option. ‘-E’ ‘--skysubtracted’ If this option is called, it is assumed that the image has already been sky subtracted once. Knowing if the sky has already been subtracted once or not is very important in estimating the Signal to noise ratio of the detections and clumps. In short an extra $\sigma_{sky}^2$ must be added in the error (noise or denominator in the Signal to noise ratio) for every flux value that is present in the calculation. This can be interpreted as the error in measuring that sky value when it was subtracted by any other program. See Section 3.3 in Akhlaghi and Ichikawa [2015] (https://arxiv.org/abs/1505.01664)) for a complete explanation. ‘-B FLT’ ‘--minskyfrac=FLT’ Minimum fraction (value between 0 and 1) of sky (undetected) areas in a tile for it to be considered in measuring the following detection and segmentation properties. • Measuring the Signal to noise ratio of false detections during the false detection removal on small tiles. • Measuring the sky value (average of undetected pixels) on small tiles. Both before the removal of false detections and after it. • Clump Signal to noise ratio in the sky regions of large files. Because of the PSF and their intrinsic amorphous properties, astronomical objects (except cosmic rays) never have a clear cutoff and commonly sink into the noise very slowly. Even below the very low thresholds used by NoiseChisel. So when a large fraction of the area of one mesh is covered by detections, it is very plausible that their faint wings are present in the undetected regions (hence causing a bias in any measurement). To get an accurate measurement of the above parameters over the tessellation, tiles that harbor too many detected regions should be excluded. The used tiles are visible in the respective ‘--check’ option of the given step. ‘--minnumfalse=INT’ The minimum number of ‘pseudo-detections’ (to identify false initial detections) or clumps (to identifying false clumps) found over the un-detected regions to identify a Signal-to-Noise ratio threshold. The Signal to noise ratio (S/N) of false pseudo-detections and clumps in each tile is found using the quantile of the S/N distribution of the psudo-detections and clumps over the undetected pixels in each mesh. If the number of S/N measurements is not large enough, the quantile will not be accurate (can have large scatter). For example if you set ‘--detquant=0.99’ (or the top 1 percent), then it is best to have at least 100 S/N measurements. ‘-L INT[,INT]’ ‘--largetilesize=INT[,INT]’ The size of each tile for the tessellation with the larger tile sizes. Except for the tile size, all the other parameters for this tessellation are taken from the common options described in *note Processing options::. The format is identical to that of the ‘--tilesize’ option that is discussed in that section. ‘--onlydetection’ If this option is called, no segmentation will be done and the output will only have four extensions (no clumps extension, see *note NoiseChisel output::). The second extension of the output is not going to be objects but raw detections (a large region will be given one label): labeling is only done based on connectivity. The last two extensions of the output will be the Sky and its Standard deviation. This option can result in faster processing when only the noise properties of the image are desired for a catalog using another image’s labels for example. A common case is when you want to measure colors or SEDs in several images. Let’s say you have images in two colors: A and B. For simplicity also assume that they are exactly on the same position in the sky with the same pixel scale. You choose to set A as a reference, so you run the NoiseChisel fully on A. Then you run NoiseChisel on B with ‘--onlydetection’ since you only need the noise properties of B (for the signal to noise column in its catalog). You can then run MakeCatalog on A normally, see *note MakeCatalog::. To run MakeCatalog on B, you simply set the object and clump labels images to those that NoiseChisel produced for A, see *note Invoking astmkcatalog::. ‘--continueaftercheck’ Continue NoiseChisel after any of the options starting with ‘--check’. NoiseChisel involves many steps and as a result, there are many checks, allowing to inspect the status of the processing. The results of each step affect the next steps of processing, so, when you are want to check the status of the processing at one step, the time spent to complete NoiseChisel is just wasted/distracting time. To encourage easier experimentation with the option values, when you use any of the NoiseChisel options that start with ‘--check’, NoiseChisel will abort once all the desired check file(s) is (are) completed. If you call the ‘--continueaftercheck’ option, you can disable this behavior and ask NoiseChisel to continue with the rest of the processing after completing the check file(s).  File: gnuastro.info, Node: Detection options, Next: Segmentation options, Prev: General NoiseChisel options, Up: Invoking astnoisechisel 7.2.2.2 Detection options ......................... Detection is the process of separating the pixels in the image into two groups: 1) Signal and 2) Noise. Through the parameters below, you can customize the detection process in NoiseChisel. Recall that you can always see the full list of Gnuastro’s options with the ‘--help’ option. ‘-r FLT’ ‘--mirrordist=FLT’ Maximum distance (as a multiple of error) to estimate the difference between the input and mirror distributions in finding the mode, see Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664), also see *note Quantifying signal in a tile::. ‘-Q FLT’ ‘--modmedqdiff=FLT’ The maximum acceptable distance between the mode and median, see *note Quantifying signal in a tile::. The quantile threshold will be found on tiles that satisfy this mode and median difference. ‘-t FLT’ ‘--qthresh=FLT’ The quantile threshold to apply to the convolved image. The detection process begins with applying a quantile threshold to each of the tiles in the small tessellation. The quantile is only calculated for tiles that don’t have any significant signal within them, see *note Quantifying signal in a tile::. Interpolation is then used to give a value to the un-successful tiles and it is finally smoothed. The quantile value is a floating point value between 0 and 1. Assume that we have sorted the $N$ data elements of a distribution (the pixels in each mesh on the convolved image). The quantile ($q$) of this distribution is the value of the element with an index of (the nearest integer to) $q\times{N}$ in the sorted data set. After thresholding is complete, we will have a binary (two valued) image. The pixels above the threshold are known as foreground pixels (have a value of 1) while those which lie below the threshold are known as background (have a value of 0). ‘--qthreshtilequant=FLT’ Only keep tiles which have a q-thresh value above the given quantile of the all successful tiles. Hence, when given a value of ‘1’, this option will be ignored. When there is more than one channel (and ‘--workoverch’ is not called), quantile calculation and application will be done on each channel independently. This option is useful when a large and diffuse (almost flat within each tile) signal exists with very small regions of Sky. The flatness of the profile will cause it to successfully pass the tests of *note Quantifying signal in a tile::. As a result, without this option the flat and diffuse signal will be interpretted as sky. In such cases, you can see the status of the tiles with the ‘--checkqthresh’ option (first image extension is enough) and select a quantile through this option to ignore the measured values in the higher-valued tiles. This option can also be useful when there are large bright objects in the image with large flat wings which can also pass the tests and give outlier values. When there is a sky gradient over the image (mainly due to post-processing issues like bad flat fielding), this option must be set to ‘1’ so it is completely ignored and the sky gradient is accurately measured and subtracted. To get an estimate of the measured qthresh distribution, you can run the following commands. The first will create the qthresh check image with one value/pixel per tile (see *note Processing options::). Open the image in a FITS viewer and inspect it. The second command below will print the basic information about the distribution of values and the third will print the value at the 0.4 quantile. Recall that Gnuastro’s Statistics program ignores blank values (in this case: tiles with significant signal), see *note Statistics::. $ astnoisechisel image.fits --checkqthresh --oneelempertile $ aststatistics image_qthresh.fits $ aststatistics image_qthresh.fits --quantile=0.4 ‘--smoothwidth=INT’ Width of flat kernel used to smooth the interpolated quantile thresholds, see ‘--qthresh’ for more. ‘--checkqthresh’ Check the quantile threshold values on the mesh grid. A file suffixed with ‘_qthresh.fits’ will be created showing each step. With this option, NoiseChisel will abort as soon as quantile estimation has been completed, allowing you to inspect the steps leading to the final quantile threshold, this can be disabled with ‘--continueaftercheck’. By default the output will have the same pixel size as the input, but with the ‘--oneelempertile’ option, only one pixel will be used for each tile (see *note Processing options::). ‘-e INT’ ‘--erode=INT’ The number of erosions to apply to the binary thresholded image. Erosion is simply the process of flipping (from 1 to 0) any of the foreground pixels that neighbor a background pixel. In a 2D image, there are two kinds of neighbors, 4-connected and 8-connected neighbors. You can specify which type of neighbors should be used for erosion with the ‘--erodengb’ option, see below. Erosion has the effect of shrinking the foreground pixels. To put it another way, it expands the holes. This is a founding principle in NoiseChisel: it exploits the fact that with very low thresholds, the holes in the very low surface brightness regions of an image will be smaller than regions that have no signal. Therefore by expanding those holes, we are able to separate the regions harboring signal. ‘--erodengb=INT’ The type of neighborhood (structuring element) used in erosion, see ‘--erode’ for an explanation on erosion. Only two integer values are acceptable: 4 or 8. In 4-connectivity, the neighbors of a pixel are defined as the four pixels on the top, bottom, right and left of a pixel that share an edge with it. The 8-connected neighbors on the other hand include the 4-connected neighbors along with the other 4 pixels that share a corner with this pixel. See Figure 6 (a) and (b) in Akhlaghi and Ichikawa (2015) for a demonstration. ‘--noerodequant’ Pure erosion is going to carve off sharp and small objects completely out of the detected regions. This option can be used to avoid missing such sharp and small objects (which have significant pixels, but not over a large area). All pixels with a value larger than the significance level specified by this option will not be eroded during the erosion step above. However, they will undergo the erosion and dilation of the opening step below. Like the ‘--qthresh’ option, the significance level is determined using the quantile (a value between 0 and 1). Just as a reminder, in the normal distribution, $1\sigma$, $1.5\sigma$, and $2\sigma$ are approximately on the 0.84, 0.93, and 0.98 quantiles. ‘-p INT’ ‘--opening=INT’ Depth of opening to be applied to the eroded binary image. Opening is a composite operation. When opening a binary image with a depth of $n$, $n$ erosions (explained in ‘--erode’) are followed by $n$ dilations. Simply put, dilation is the inverse of erosion. When dilating an image any background pixel is flipped (from 0 to 1) to become a foreground pixel. Dilation has the effect of fattening the foreground. Note that in NoiseChisel, the erosion which is part of opening is independent of the initial erosion that is done on the thresholded image (explained in ‘--erode’). The structuring element for the opening can be specified with the ‘--openingngb’ option. Opening has the effect of removing the thin foreground connections (mostly noise) between separate foreground ‘islands’ (detections) thereby completely isolating them. Once opening is complete, we have _initial_ detections. ‘--openingngb=INT’ The structuring element used for opening, see ‘--erodengb’ for more information about a structuring element. ‘-s FLT,FLT’ ‘--sigmaclip=FLT,FLT’ The $\sigma$-clipping parameters, see *note Sigma clipping::. This option takes two values which are separated by a comma (<,>). Each value can either be written as a single number or as a fraction of two numbers (for example ‘3,1/10’). The first value to this option is the multiple of $\sigma$ that will be clipped ($\alpha$ in that section). The second value is the exit criteria. If it is less than 1, then it is interpreted as tolerance and if it is larger than one it is assumed to be the fixed number of iterations. Hence, in the latter case the value must be an integer. ‘--checkdetsky’ Check the initial approximation of the sky value and its standard deviation in a FITS file ending with ‘_detsky.fits’. With this option, NoiseChisel will abort as soon as the sky value used for defining pseudo-detections is complete. This allows you to inspect the steps leading to the final quantile threshold, this behavior can be disabled with ‘--continueaftercheck’. By default the output will have the same pixel size as the input, but with the ‘--oneelempertile’ option, only one pixel will be used for each tile (see *note Processing options::). ‘-R FLT’ ‘--dthresh=FLT’ The detection threshold: a multiple of the initial sky standard deviation added with the initial sky approximation (which you can inspect with ‘--checkdetsky’). This flux threshold is applied to the initially undetected regions on the un-convolved image. The background pixels that are completely engulfed in a 4-connected foreground region are converted to background (holes are filled) and one opening (depth of 1) is applied over both the initially detected and undetected regions. The Signal to noise ratio of the resulting ‘psudo-detections’ are used to identify true vs. false detections. See Section 3.1.5 and Figure 7 in Akhlaghi and Ichikawa (2015) for a very complete explanation. ‘-i INT’ ‘--detsnminarea=INT’ The minimum area to calculate the Signal to noise ratio on the psudo-detections of both the initially detected and undetected regions. When the area in a psudo-detection is too small, the Signal to noise ratio measurements will not be accurate and their distribution will be heavily skewed to the positive. So it is best to ignore any psudo-detection that is smaller than this area. Use ‘--detsnhistnbins’ to check if this value is reasonable or not. ‘--checkdetsn’ Save the S/N values of the pseudo-detections and dilated detections into three files ending with ‘_detsn_sky.XXX’, ‘_detsn_det.XXX’, and ‘_detsn_dilated.XXX’. The ‘.XXX’ is determined from the ‘--tableformat’ option (see *note Input output options::, for example ‘.txt’ or ‘.fits’). You can use these to inspect the S/N values and their distribution (in combination with the ‘--checkdetection’ option to see where the pseudo-detections are). You can use Gnuastro’s *note Statistics:: to make a histogram of the distribution or any other analysis you would like for better understanding of the distribution (for example through a histogram). With this option, NoiseChisel will abort as soon as the tables are created. This allows you to inspect the steps leading to the final quantile threshold, this behavior (to abort NoiseChisel) can be disabled with ‘--continueaftercheck’. ‘-c FLT’ ‘--detquant=FLT’ The quantile of the Signal to noise ratio distribution of the psudo-detections in each mesh to use for filling the large mesh grid. Note that this is only calculated for the large mesh grids that satisfy the minimum fraction of undetected pixels (value of ‘--minbfrac’) and minimum number of psudo-detections (value of ‘--minnumfalse’). ‘-d FLT’ ‘--detgrowquant=FLT’ Quantile limit to “grow†the final detections. As discussed in the previous options, after applying the initial quantile threshold, layers of pixels are carved off the objects to identify true signal. With this step you can return those low surface brightness layers that were carved off back to the detections. To disable growth, set the value of this option to ‘1’. The process is as follows: after the true detections are found, all the non-detected pixels above this quantile will be put in a list and used to “grow†the true detections (seeds of the growth). Like all quantile thresholds, this threshold is defined and applied to the convolved dataset. Afterwards, the dataset is dilated once (with minimum connectivity) to connect very thin regions on the boundary: imagine building a dam at the point rivers spill into an open sea/ocean. Finally, all holes are filled. In the geography metaphor, holes can be seen as the closed (by the dams) rivers and lakes, so this process is like turning the water in all such rivers and lakes into soil. See ‘--detgrowmaxholesize’ for configuring the hole filling. ‘--detgrowmaxholesize=INT’ The maximum hole size to fill during the final expansion of the true detections as described in ‘--detgrowquant’. This is necessary when the input contains many smaller objects and can be used to avoid marking blank sky regions as detections. For example multiple galaxies can be positioned such that they surround an empty region of sky. If all the holes are filled, the Sky region in between them will be taken as a detection which is not desired. To avoid such cases, the integer given to this option must be smaller than the hole between the objects. On the other hand, if you have a very large (and extended) galaxy, the diffuse wings of the galaxy may create very large holes. In such cases, a larger value to this option will cause the whole region to be detected as part of the large galaxy and thus detect it to extremely low surface brightness limits. ‘--cleangrowndet’ After dilation, if the signal-to-noise ratio of a detection is less than the derived pseudo-detection S/N limit, that detection will be discarded. In an ideal/clean noise, a true detection’s S/N should be larger than its constituent pseudo-detections because its area is larger and it also covers more signal. However, on a false detections (especially at lower ‘--detquant’ values), the increase in size can cause a decrease in S/N below that threshold. This will improve purity and not change completeness (a true detection will not be discarded). Because a true detection has flux in its vicinity and dilation will catch more of that flux and increase the S/N. So on a true detection, the final S/N cannot be less than pseudo-detections. However, in many real images bad processing creates artifacts that cannot be accurately removed by the Sky subtraction. In such cases, this option will decrease the completeness (will artificially discard true detections). So this feature is not default and should to be explicitly called when you know the noise is clean. ‘--checkdetection’ Every step of the detection process will be added as an extension to a file with the suffix ‘_det.fits’. Going through each would just be a repeat of the explanations above and also of those in Akhlaghi and Ichikawa (2015). The extension label should be sufficient to recognize which step you are observing. Viewing all the steps can be the best guide in choosing the best set of parameters. With this option, NoiseChisel will abort as soon as a snapshot of all the detection process is saved. This behavior can be disabled with ‘--continueaftercheck’. ‘--checksky’ Check the derivation of the final sky and its standard deviation values on the mesh grid. With this option, NoiseChisel will abort as soon as the sky value is estimated over the image (on each tile). This behavior can be disabled with ‘--continueaftercheck’. By default the output will have the same pixel size as the input, but with the ‘--oneelempertile’ option, only one pixel will be used for each tile (see *note Processing options::).  File: gnuastro.info, Node: Segmentation options, Next: NoiseChisel output, Prev: Detection options, Up: Invoking astnoisechisel 7.2.2.3 Segmentation options ............................ Segmentation is the process of (possibly) breaking up a detection into multiple segments (technically called _objects_ and _clumps_ in NoiseChisel). In deep surveys segmentation becomes particularly important because we will be detecting more diffuse flux so galaxy images are going to overlap more. It is thus very important to be able separate the pixels within a detection. In NoiseChisel, segmentation is done by first finding the ‘true’ clumps over a detection and then expanding those clumps to a certain flux limit. True clumps are found in a process very similar to the true detections explained in *note Detection options::, see Akhlaghi and Ichikawa [2015] (https://arxiv.org/abs/1505.01664) for more information. If the connections between the grown clumps are weaker than a given threshold, the grown clumps are considered to be separate objects. ‘-m INT’ ‘--segsnminarea=INT’ The minimum area which a clump in the undetected regions should have in order to be considered in the clump Signal to noise ratio measurement. If this size is set to a small value, the Signal to noise ratio of false clumps will not be accurately found. It is recommended that this value be larger than the value to ‘--detsnminarea’. Because the clumps are found on the convolved (smoothed) image while the psudo-detections are found on the input image. You can use ‘--checkclumpsn’ and ‘--checksegmentation’ to see if your chosen value is reasonable or not. ‘--checkclumpsn’ Save the S/N values of the clumps into two files ending with ‘_clumpsn_sky.XXX’ and ‘_clumpsn_det.XXX’. The ‘.XXX’ is determined from the ‘--tableformat’ option (see *note Input output options::, for example ‘.txt’ or ‘.fits’). You can use these to inspect the S/N values and their distribution (in combination with the ‘--checksegmentation’ option to see where the clumps are). You can use Gnuastro’s *note Statistics:: to make a histogram of the distribution (ready for plotting in a text file, or a crude ASCII-art demonstration on the command-line). With this option, NoiseChisel will abort as soon as the two tables are created. This allows you to inspect the steps leading to the final S/N quantile threshold, this behavior can be disabled with ‘--continueaftercheck’. ‘-g FLT’ ‘--segquant=FLT’ The quantile of the noise clump Signal to noise ratio distribution. This value is used to identify true clumps over the detected regions. You can get the full distribution of clumps S/Ns over the undetected areas with the ‘--checkclumpsn’ option and see them with ‘--checksegmentation’. ‘-v’ ‘--keepmaxnearriver’ Keep a clump whose maximum flux is 8-connected to a river pixel. By default such clumps over detections are considered to be noise and are removed irrespective of their brightness (see *note Flux Brightness and magnitude::). Over large profiles, that sink into the noise very slowly, noise can cause part of the profile (which was flat without noise) to become a very large and with a very high Signal to noise ratio. In such cases, the pixel with the maximum flux in the clump will be immediately touching a river pixel. ‘-G FLT’ ‘--gthresh=FLT’ Threshold (multiple of the sky standard deviation added with the sky) to stop growing true clumps. Once true clumps are found, they are set as the basis to segment the detected region. They are grown until the threshold specified by this option. ‘-y INT’ ‘--minriverlength=INT’ The minimum length of a river between two grown clumps for it to be considered in Signal to noise ratio estimations. Similar to ‘--segsnminarea’ and ‘--detsnminarea’, if the length of the river is too short, the Signal to noise ratio can be noisy and unreliable. Any existing rivers shorter than this length will be considered as non-existent, independent of their Signal to noise ratio. Since the clumps are grown on the input image, this value should best be similar to the value of ‘--detsnminarea’. Recall that the clumps were defined on the convolved image so ‘--segsnminarea’ was larger than ‘--detsnminarea’. ‘-O FLT’ ‘--objbordersn=FLT’ The maximum Signal to noise ratio of the rivers between two grown clumps in order to consider them as separate ‘objects’. If the Signal to noise ratio of the river between two grown clumps is larger than this value, they are defined to be part of one ‘object’. Note that the physical reality of these ‘objects’ can never be established with one image, or even multiple images from one broad-band filter. Any method we devise to define ‘object’s over a detected region is ultimately subjective. Two very distant galaxies or satellites in one halo might lie in the same line of sight and be detected as clumps on one detection. On the other hand, the connection (through a spiral arm or tidal tail for example) between two parts of one galaxy might have such a low surface brightness that they are broken up into multiple detections or objects. In fact if you have noticed, exactly for this purpose, this is the only Signal to noise ratio that the user gives into NoiseChisel. The ‘true’ detections and clumps can be objectively identified from the noise characteristics of the image, so you don’t have to give any hand input Signal to noise ratio. ‘--grownclumps’ In the output (see *note NoiseChisel output::) store the grown clumps (or full detected region if only one clump was present in that detection). By default the original clumps are stored as the third extension of the output, if this option is called, it is replaced with the grown clump labels. ‘--checksegmentation’ A file with the suffix ‘_seg.fits’ will be created. This file keeps all the relevant steps in finding true clumps and segmenting the detections into multiple objects in various extensions. Having read the paper or the steps above. Examining this file can be an excellent guide in choosing the best set of parameters. Note that calling this function will significantly slow NoiseChisel. In verbose mode (without the ‘--quiet’ option, see *note Operating mode options::) the important steps (along with their extension names) will also be reported. With this option, NoiseChisel will abort as soon as the two tables are created. This behavior can be disabled with ‘--continueaftercheck’.  File: gnuastro.info, Node: NoiseChisel output, Prev: Segmentation options, Up: Invoking astnoisechisel 7.2.2.4 NoiseChisel output .......................... The default name and directory of the outputs are explained in *note Automatic output::. NoiseChisel’s default output (when none of the options starting with ‘--check’ or the ‘--output’ option are called) is one file ending with ‘_labeled.fits’. This file has the extensions listed below: 1. A copy of the input image, a copy is placed here for the following reasons: • By flipping through the extensions, a user can check how accurate the detection and segmentation process was. • All the inputs to MakeCatalog (see *note MakeCatalog::) are included in this one file which makes the running of MakeCatalog after NoiseChisel very easy. 2. The object/detection labels. Each pixel in the input image is given a label in this extension, the labels start from one. If the ‘--onlydetection’ option is given, each large connected part of the image has one label. Without that option, this extension is going to show the labels of the objects that are found after segmentation. The total number of labels is stored as the value to the ‘NOBJS’/‘NDETS’ keyword in the header of this extension. This number is also printed in verbose mode. 3. The clump labels when ‘--onlydetection’ is not called. All the pixels in the input image that belong to a true clump are given a positive label in this extension. The detected regions that were not a clump are given a negative value to clearly identify the sky noise from the diffuse detections. The total number of clumps in this image is stored in the ‘NCLUMPS’ keyword of this extension and printed in verbose output. If the ‘--grownclumps’ option is called, or a value of ‘1’ is given to it in any of the configuration files, then instead of the original clump regions, the grown clumps will be stored in this extension. Note that if there is only one clump (or no clumps) over a detected region, then the whole detected region is given a label of 1. 4. The final sky value on each pixel. See *note Sky value:: for a complete explanation. 5. Similar to the previous mesh but for the standard deviation on each pixel. To inspect NoiseChisel’s output, you can configure SAO DS9 in your Graphic User Interface (GUI) to open NoiseChisel’s output as a multi-extension data cube. This will allow you to flip through the different extensions and visually inspect the results. This process has been described for the GNOME GUI (most common GUI in GNU/Linux operating systems) in *note Viewing multiextension FITS images::.  File: gnuastro.info, Node: MakeCatalog, Next: Match, Prev: NoiseChisel, Up: Data analysis 7.3 MakeCatalog =============== At the lowest level, a dataset (for example an image) is just a collection of values, placed after each other in any number of dimensions (for example an image is a 2D dataset). Each data-element (pixel) just has two properties: its position (relative to the rest) and its value. The entire input dataset (a large image for example) is rarely treated as a singular entity for higher-level analysis(1). You want to know the properties of the scientifically interesting targets that are embedded in it. For example the magnitudes, positions and elliptical properties of the galaxies that are in the image. MakeCatalog is Gnuastro’s program to derive higher-level information for _pre-defined_ regions of a dataset. The role of MakeCatalog in a scientific analysis and the benefits of this model of data-analysis (were detection/identification is separated from measurement) is discussed in Akhlaghi [2016] (https://arxiv.org/abs/1611.06387v1). We strongly recommend reading this short paper for a better understanding of this methodology and use MakeCatalog most effectively. However, that paper cannot undergo any more change, so this manual is the definitive guide. As discussed above, you have to define the regions of a dataset that you are interested in _before_ running MakeCatalog. MakeProfiles currently uses labeled dataset(s) for this job. A labeled dataset for a given input dataset has the size/dimensions as the input, but its pixels have an integer type (see *note Numeric data types::)(2): all pixels with the same label (integers larger and equal to one) are used to generate the requested output columns of MakeCatalog for the row of their labeled value. For example, the flux weighted average position of all the pixels with a label of 42 will be considered as the central position(3) of the 42nd row of the output catalog. Pixels with labels equal to or smaller than zero will be ignored by MakeCatalog. In other words, the number of rows of the output catalog will be determined from the labeled image. The labeled image maybe created with any tool(4). Within Gnuastro you can use these two solutions depending on a-priori/parametric knowledge of the targets you want to study: • When you already know the positions and parametric (for example circular or elliptical) properties of the targets, you can use *note MakeProfiles:: to generate a labeled image from another catalog. This is also known as aperture photometry (the apertures are defined a-priori). • When the shape of your targets cannot be parameterized accurately (for example galaxies), or if you don’t know the number/shape of the targets in the image, you can use Gnuastro’s NoiseChisel program to detect and segment (make labeled images of) the _objects_ and _clumps_ in the input image, see *note NoiseChisel::. * Menu: * Detection and catalog production:: Discussing why/how to treat these separately * Quantifying measurement limits:: For comparing different catalogs. * Measuring elliptical parameters:: Estimating elliptical parameters. * Adding new columns to MakeCatalog:: How to add new columns. * Invoking astmkcatalog:: Options and arguments to MakeCatalog. ---------- Footnotes ---------- (1) In low-level reduction/preparation of a dataset, you do in fact treat a whole image as a single entity. You can derive the over-all properties of all the pixels in a dataset with Gnuastro’s Statistics program (see *note Statistics::) (2) If the program you used to generate the labeled image only outputs floating point types, but you know it only has integer valued pixels that are stored in a floating point container, you can use Gnuastro’s Arithmetic program (see *note Arithmetic::) to change the numerical data type of the image (‘flabel.fits’) to an integer type image (‘label.fits’) with a command like below: ‘$ astarithmetic flabel.fits int32 --output=label.fits’ (3) See *note Measuring elliptical parameters:: for a discussion on this and the derivation of positional parameters. (4) For example, you can even use a graphic user interface image editing tool like the GNU Image Manipulation Program (or GIMP) and use Gnuastro’s ConvertType to convert it to a FITS file.  File: gnuastro.info, Node: Detection and catalog production, Next: Quantifying measurement limits, Prev: MakeCatalog, Up: MakeCatalog 7.3.1 Detection and catalog production -------------------------------------- As discussed above (*note MakeCatalog::), NoiseChisel (Gnuastro’s signal detection tool, see *note NoiseChisel::) does not produce any catalog of the detected objects. However, most other common tools in astronomical data-analysis (for example SExtractor(1)) merge the two processes into one. Gnuastro’s modularized methodology is therefore new to many experienced astronomers and deserves a short review here. Further discussion on the benefits of this methodology can be seen in Akhlaghi [2016] (https://arxiv.org/abs/1611.06387v1). To simplify catalog production from a raw input image in Gnuastro, NoiseChisel’s output (see *note NoiseChisel output::) can be directly fed into MakeCatalog. This is good when no further customization is necessary and you want a fast/simple. But the modular approach taken by Gnuastro has many benefits that will become more apparent as you get more experienced in astronomical data analysis and want to be more creative in using your valuable data for the exciting scientific project you are working on. In short the reasons for this modularity can be classified as below: • Complexity of a monolith: Adding in a catalog functionality to the detector program will add several more steps (and many more options) to its processing that can equally well be done outside of it. This makes following what the program does harder for the users and developers, it can also potentially add many bugs. As an example, if the parameter you want to measure over one profile is not provided by the developers of MakeCatalog. You can simply open this tiny little program and add your desired calculation easily. This process is discussed in *note Adding new columns to MakeCatalog::. However, if making a catalog was part of NoiseChisel, it would require a lot of energy to understand all the steps and internal structures of that large program (the most complex in Gnuastro) in order to add desired parameter in a catalog. • Simplicity/robustness of independent, modular tools: making a catalog is a logically separate process from labeling (detection and segmentation). A user might want to do certain operations on the labeled regions before creating a catalog for them. Another user might want the properties of the same pixels/objects in another image (another filter for example) to measure the colors or SED fittings. Here is an example of doing both: suppose you have images in various broad band filters at various resolutions and orientations. The image of one color will thus not lie exactly on another or even be in the same scale. However, it is imperative that the same pixels be used in measuring the colors of galaxies. To solve the problem, NoiseChisel can be run on the reference image to generate the labeled image. After wards, the labeled image can be warped into the grid of the other color (using *note Warp::). MakeCatalog will then generate the same catalog for both colors (with the different labeled images). It is currently customary to warp the images to the same pixel grid, however, modification of the scientific dataset is very harmful for the data and creates correlated noise. It is much more accurate to do the transformations on the labeled image. ---------- Footnotes ---------- (1)  File: gnuastro.info, Node: Quantifying measurement limits, Next: Measuring elliptical parameters, Prev: Detection and catalog production, Up: MakeCatalog 7.3.2 Quantifying measurement limits ------------------------------------ No measurement on a real dataset can be perfect: you can only reach a certain level/limit of accuracy. Therefore, a meaningful (scientific) analysis requires an understanding of these limits for the dataset and your analysis tools: different datasets (images in the case of MakeCatalog) have different noise properties and different detection methods (one method/algorith/software that is run with a different set of parameters is considered as a different detection method) will have different abilities to detect or measure certain kinds of signal (astronomical objects) and their properties in an image. Hence, quantifying the detection and measurement limitations with a particular dataset and analysis tool is the most crucial/critical aspect of any high-level analysis. In this section we discuss some of the most general limits that are very important in any astronomical data analysis and how MakeCatalog makes it easy to find them. Depending on the higher-level analysis, there are more tests that must be done, but these are usually necessary in any case. In astronomy, it is common to use the magnitude (a unit-less scale) and physical units, see *note Flux Brightness and magnitude::. Therefore all the measurements discussed here are defined in units of magnitudes. Surface brightness limit (of whole dataset) As we make more observations on one region of the sky, and add the observations into one dataset, we are able to decrease the standard deviation of the noise in each pixel(1). Qualitatively, this decrease manifests its self by making fainter (per pixel) parts of the objects in the image more visible. Technically, this is known as surface brightness. Quantitatively, it increases the Signal to noise ratio, since the signal increases faster than noise with more data. It is very important to have in mind that here, noise is defined per pixel (or in the units of our data measurement), not per object. You can think of the noise as muddy water that is completely covering a flat ground(2) with some regions higher than the others(3) in it. In this analogy, height (from the ground) is _surface brightness_. Let’s assume that in your first observation the muddy water has just been stirred and you can’t see anything through it. As you wait and make more observations, the mud settles down and the _depth_ of the transparent water increases, making the summits of hills visible. As the depth of clear water increases, the parts of the hills with lower heights (less parts with lower surface brightness) can be seen more clearly. The outputs of NoiseChisel include the Sky standard deviation ($\sigma$) on every group of pixels (a mesh) that were calculated from the undetected pixels in that mesh, see *note Tessellation:: and *note NoiseChisel output::. Let’s take $\sigma_m$ as the median $\sigma$ over the successful meshes in the image (prior to interpolation or smoothing). On different instruments pixels have different physical sizes (for example in micro-meters, or spatial angle over the sky), nevertheless, a pixel is our unit of data collection. In other words, while quantifying the noise, the physical or projected size of the pixels is irrelevant. We thus define the Surface brightness limit or _depth_, in units of magnitude/pixel, of a data-set, with zeropoint magnitude $z$, with the $n$th multiple of $\sigma_m$ as (see *note Flux Brightness and magnitude::): $$SB_{\rm Pixel}=-2.5\times\log_{10}{(n\sigma_m)}+z$$ As an example, the XDF survey covers part of the sky that the Hubble space telescope has observed the most (for 85 orbits) and is consequently very small ($\sim4$ arcmin$^2$). On the other hand, the CANDELS survey, is one of the widest multi-color surveys covering several fields (about 720 arcmin$^2$) but its deepest fields have only 9 orbits observation. The depth of the XDF and CANDELS-deep surveys in the near infrared WFC3/F160W filter are respectively 34.40 and 32.45 magnitudes/pixel. In a single orbit image, this same field has a depth of 31.32. Recall that a larger magnitude corresponds to less brightness. The low-level magnitude/pixel measurement above is only useful when all the datasets you want to use belong to one instrument (telescope and camera). However, you will often find yourself using datasets from various instruments with different pixel scales (projected pixel sizes). If we know the pixel scale, we can obtain a more easily comparable surface brightness limit in units of: magnitude/arcsec$^2$. Let’s assume that the dataset has a zeropoint value of $z$, and every pixel is $p$ arcsec$^2$ (so $A/p$ is the number of pixels that cover an area of $A$ arcsec$^2$). If the $n$th multiple of $\sigma_m$ is desired, then the surface brightness (in units of magnitudes per A arcsec$^2$) is(4): $$SB_{\rm Projected}=-2.5\times\log_{10}{\left(n\sigma_m\sqrt{A\over p}\right)+z}$$ Note that this is an extrapolation of the actually measured value of $\sigma_m$ (which was per pixel). So it should be used with extreme care (for example the dataset must have an approximately flat depth). For each detection over the dataset, you can estimate an upper-limit magnitude which actually uses the detection’s area/footprint. It doesn’t extrapolate and even accounts for correlated noise features. Therefore, the upper-limit magnitude is a much better measure of your dataset’s surface brightness limit for each particular object. MakeCatalog will calculate the input dataset’s $SB_{\rm Pixel}$ and $SB_{\rm Projected}$ and write them as comments/meta-data in the output catalog(s). Just note that $SB_{\rm Projected}$ is only calculated if the input has World Coordinate System (WCS). Completeness limit (of each detection) As the surface brightness of the objects decreases, the ability to detect them will also decrease. An important statistic is thus the fraction of objects of similar morphology and brightness that will be identified with our detection algorithm/parameters in the given image. This fraction is known as completeness. For brighter objects, completeness is 1: all bright objects that might exist over the image will be detected. However, as we go to lower surface brightness objects, we fail to detect some and gradually we are not able to detect anything any more. For a given profile, the magnitude where the completeness drops below a certain level usually above $90\%$ is known as the completeness limit. Another important parameter in measuring completeness is purity: the fraction of true detections to all true detections. In effect purity is the measure of contamination by false detections: the higher the purity, the lower the contamination. Completeness and purity are anti-correlated: if we can allow a large number of false detections (that we might be able to remove by other means), we can significantly increase the completeness limit. One traditional way to measure the completeness and purity of a given sample is by embedding mock profiles in regions of the image with no detection. However in such a study we must be really careful to choose model profiles as similar to the target of interest as possible. Magnitude measurement error (of each detection) Any measurement has an error and this includes the derived magnitude for an object. Note that this value is only meaningful when the object’s magnitude is brighter than the upper-limit magnitude (see the next items in this list). As discussed in *note Flux Brightness and magnitude::, the magnitude ($M$) of an object with brightness $B$ and Zeropoint magnitude $z$ can be written as: $$M=-2.5\log_{10}(B)+z$$ Calculating the derivative with respect to $B$, we get: $${dM\over dB} = {-2.5\over {B\times ln(10)}}$$ From the Tailor series ($\Delta{M}=dM/dB\times\Delta{B}$), we can write: $$\Delta{M} = \left|{-2.5\over ln(10)}\right|\times{\Delta{B}\over{B}}$$ But, $\Delta{B}/B$ is just the inverse of the Signal-to-noise ratio ($S/N$), so we can write the error in magnitude in terms of the signal-to-noise ratio: $$\Delta{M} = {2.5\over{S/N\times ln(10)}} $$ MakeCatalog uses this relation to estimate the magnitude errors. The signal-to-noise ratio is calculated in different ways for clumps and objects (see Akhlaghi and Ichikawa [2015] (https://arxiv.org/abs/1505.01664)), but this single equation can be used to estimate the measured magnitude error afterwards for any type of target. Upper limit magnitude (of each detection) Due to the noisy nature of data, it is possible to get arbitrarily low values for a faint object’s brightness (or arbitrarily high magnitudes). Given the scatter caused by the noise, such small values are meaningless: another similar depth observation will give a radically different value. This problem is most common when you use one image/filter to generate target labels (which specify which pixels belong to which object, see *note NoiseChisel output:: and *note MakeCatalog::) and another image/filter to generate a catalog for measuring colors. The object might not be visible in the filter used for the latter image, or the image _depth_ (see above) might be much shallower. So you will get unreasonably faint magnitudes. For example when the depth of the image is 32 magnitudes, a measurement that gives a magnitude of 36 for a $\sim100$ pixel object is clearly unreliable. In another similar depth image, we might measure a magnitude of 30 for it, and yet another might give 33. Furthermore, due to the noise scatter so close to the depth of the data-set, the total brightness might actually get measured as a negative value, so no magnitude can be defined (recall that a magnitude is a base-10 logarithm). Using such unreliable measurements will directly affect our analysis, so we must not use them. However, all is not lost! Given our limited depth, there is one thing we can deduce about the object’s magnitude: we can say that if something actually exists here (possibly buried deep under the noise), it must have a magnitude that is fainter than an _upper limit magnitude_. To find this upper limit magnitude, we place the object’s footprint (segmentation map) over random parts of the image where there are no detections, so we only have pure (possibly correlated) noise and undetected objects. Doing this a large number of times will give us a distribution of brightness values. The standard deviation ($\sigma$) of that distribution can be used to quantify the upper limit magnitude. Traditionally, faint/small object photometry was done using fixed circular apertures (for example with a diameter of $N$ arc-seconds). In this way, the upper limit was like the depth discussed above: one value for the whole image. But with the much more advanced hardware and software of today, we can make customized segmentation maps for each object. The number of pixels (are of the object) used directly affects the final distribution and thus magnitude. Also the image correlated noise might actually create certain patters, so the shape of the object can also affect the result. So in MakeCatalog, the upper limit magnitude is found for each object in the image separately. Not one value for the whole image. ---------- Footnotes ---------- (1) This is true for any noisy data, not just astronomical images. (2) The ground is the sky value in this analogy, see *note Sky value::. Note that this analogy only holds for a flat sky value across the surface of the image or ground. (3) The peaks are the brightest parts of astronomical objects in this analogy. (4) If we have $N$ datasets, each with noise $\sigma$, the noise of a combined dataset will increase as $\sqrt{N}\sigma$.  File: gnuastro.info, Node: Measuring elliptical parameters, Next: Adding new columns to MakeCatalog, Prev: Quantifying measurement limits, Up: MakeCatalog 7.3.3 Measuring elliptical parameters ------------------------------------- The shape or morphology of a target is one of the most commonly desired parameters of a target. Here, we will review the derivation of the most basic/simple morphological parameters: the elliptical parameters for a set of labeled pixels. The elliptical parameters are: the (semi-)major axis, the (semi-)minor axis and the position angle along with the central position of the profile. The derivations below follow the SExtractor manual derivations with some added explanations for easier reading. Let’s begin with one dimension for simplicity: Assume we have a set of $N$ values $B_i$ (keeping the spatial distribution of brightness for example), each at position $x_i$. The simplest parameter we can define is the geometric center of the object ($x_g$) (ignoring the brightness values): $x_g=(\sum_ix_i)/N$. _Moments_ are defined to incorporate both the value (brightness) and position of the data. The first moment can be written as: $$\overline{x}={\sum_iB_ix_i \over \sum_iB_i}$$ This is essentially the weighted (by $B_i$) mean position. The geometric center ($x_g$, defined above) is a special case of this with all $B_i=1$. The second moment is essentially the variance of the distribution: $$\overline{x^2}\equiv{\sum_iB_i(x_i-\overline{x})^2 \over \sum_iB_i} = {\sum_iB_ix_i^2 \over \sum_iB_i} - 2\overline{x}{\sum_iB_ix_i\over\sum_iB_i} + \overline{x}^2 ={\sum_iB_ix_i^2 \over \sum_iB_i} - \overline{x}^2$$ The last step was done from the definition of $\overline{x}$. Hence, the square root of $\overline{x^2}$ is the spatial standard deviation (along the one-dimension) of this particular brightness distribution ($B_i$). Crudely (or qualitatively), you can think of its square root as the distance (from $\overline{x}$) which contains a specific amount of the flux (depending on the $B_i$ distribution). Similar to the first moment, the geometric second moment can be found by setting all $B_i=1$. So while the first moment quantified the position of the brightness distribution, the second moment quantifies how that brightness is dispersed about the first moment. In other words, it quantifies how “sharp†the object’s image is. Before continuing to two dimensions and the derivation of the elliptical parameters, let’s pause for an important implementation technicality. You can ignore this paragraph and the next two if you don’t want to implement these concepts. The basic definition (first definition of $\overline{x^2}$ above) can be used without any major problem. However, using this fraction requires two runs over the data: one run to find $\overline{x}$ and another run to find $\overline{x^2}$ from $\overline{x}$, this can be slow. The advantage of the last fraction above, is that we can estimate both the first and second moments in one run (since the $-\overline{x}^2$ term can easily be added later). The logarithmic nature of floating point number digitization creates a complication however: suppose the object is located between pixels 10000 and 10020. Hence the target’s pixels are only distributed over 20 pixels (with a standard deviation $<20$), while the mean has a value of $\sim10000$. The $\sum_iB_i^2x_i^2$ will go to very very large values while the individual pixel differences will be orders of magnitude smaller. This will lower the accuracy of our calculation due to the limited accuracy of floating point operations. The variance only depends on the distance of each point from the mean, so we can shift all position by a constant/arbitrary $K$ which is much closer to the mean: $\overline{x-K}=\overline{x}-K$. Hence we can calculate the second order moment using: $$\overline{x^2}={\sum_iB_i(x_i-K)^2 \over \sum_iB_i} - (\overline{x}-K)^2 $$ The closer $K$ is to $\overline{x}$, the better (the sums of squares will involve smaller numbers), as long as $K$ is within the object limits (in the example above: $10000\leq{K}\leq10020$), the floating point error induced in our calculation will be negligible. For the most simplest implementation, MakeCatalog takes $K$ to be the smallest position of the object in each dimension. Since $K$ is arbitrary and an implementation/technical detail, we will ignore it for the remainder of this discussion. In two dimensions, the mean and variances can be written as: $$\overline{x}={\sum_iB_ix_i\over B_i}, \quad \overline{x^2}={\sum_iB_ix_i^2 \over \sum_iB_i} - \overline{x}^2$$ $$\overline{y}={\sum_iB_iy_i\over B_i}, \quad \overline{y^2}={\sum_iB_iy_i^2 \over \sum_iB_i} - \overline{y}^2$$ $$\quad\quad\quad\quad\quad\quad\quad\quad\quad \overline{xy}={\sum_iB_ix_iy_i \over \sum_iB_i} - \overline{x}\times\overline{y}$$ If an elliptical profile’s major axis exactly lies along the $x$ axis, then $\overline{x^2}$ will be directly proportional with the profile’s major axis, $\overline{y^2}$ with its minor axis and $\overline{xy}=0$. However, in reality we are not that lucky and (assuming galaxies can be parameterized as an ellipse) the major axis of galaxies can be in any direction on the image (in fact this is one of the core principles behind weak-lensing by shear estimation). So the purpose of the remainder of this section is to define a strategy to measure the position angle and axis ratio of some randomly positioned ellipses in an image, using the raw second moments that we have calculated above in our image coordinates. Let’s assume we have rotated the galaxy by $\theta$, the new second order moments are: $$\overline{x_\theta^2} = \overline{x^2}\cos^2\theta + \overline{y^2}\sin^2\theta - 2\overline{xy}\cos\theta\sin\theta $$ $$\overline{y_\theta^2} = \overline{x^2}\sin^2\theta + \overline{y^2}\cos^2\theta + 2\overline{xy}\cos\theta\sin\theta$$ $$\overline{xy_\theta} = \overline{x^2}\cos\theta\sin\theta - \overline{y^2}\cos\theta\sin\theta + \overline{xy}(\cos^2\theta-\sin^2\theta)$$ The best $\theta$ ($\theta_0$, where major axis lies along the $x_\theta$ axis) can be found by: $$\left.{\partial \overline{x_\theta^2} \over \partial \theta}\right|_{\theta_0}=0$$ Taking the derivative, we get: $$2\cos\theta_0\sin\theta_0(\overline{y^2}-\overline{x^2}) + 2(\cos^2\theta_0-\sin^2\theta_0)\overline{xy}=0$$ When $\overline{x^2}\neq\overline{y^2}$, we can write: $$\tan2\theta_0 = 2{\overline{xy} \over \overline{x^2}-\overline{y^2}}.$$ MakeCatalog uses the standard C math library’s ‘atan2’ function to estimate $\theta_0$, which we define as the position angle of the ellipse. To recall, this is the angle of the major axis of the ellipse with the $x$ axis. By definition, when the elliptical profile is rotated by $\theta_0$, then $\overline{xy_{\theta_0}}=0$, $\overline{x_{\theta_0}^2}$ will be the extent of the maximum variance and $\overline{y_{\theta_0}^2}$ the extent of the minimum variance (which are perpendicular for an ellipse). Replacing $\theta_0$ in the equations above for $\overline{x_\theta}$ and $\overline{y_\theta}$, we can get the semi-major ($A$) and semi-minor ($B$) lengths: $$A^2\equiv\overline{x_{\theta_0}^2}= {\overline{x^2} + \overline{y^2} \over 2} + \sqrt{\left({\overline{x^2}-\overline{y^2} \over 2}\right)^2 + \overline{xy}^2}$$ $$B^2\equiv\overline{y_{\theta_0}^2}= {\overline{x^2} + \overline{y^2} \over 2} - \sqrt{\left({\overline{x^2}-\overline{y^2} \over 2}\right)^2 + \overline{xy}^2}$$ As a summary, it is important to remember that the units of $A$ and $B$ are in pixels (the standard deviation of a positional distribution) and that they represent the spatial light distribution of the object in both image dimensions (rotated by $\theta_0$). When the object cannot be represented as an ellipse, this interpretation breaks down: $\overline{xy_{\theta_0}}\neq0$ and $\overline{y_{\theta_0}^2}$ will not be the direction of minimum variance.  File: gnuastro.info, Node: Adding new columns to MakeCatalog, Next: Invoking astmkcatalog, Prev: Measuring elliptical parameters, Up: MakeCatalog 7.3.4 Adding new columns to MakeCatalog --------------------------------------- MakeCatalog is designed to allow easy addition of different measurements over a labeled image (see Akhlaghi [2016] (https://arxiv.org/abs/1611.06387v1)). A check-list style description of necessary steps to do that is described in this section. The common development characteristics of MakeCatalog and other Gnuastro programs is explained in *note Developing::. We strongly encourage you to have a look at that chapter to greatly simplify your navigation in the code. After adding and testing your column, you are most welcome (and encouraged) to share it with us so we can add to the next release of Gnuastro for everyone else to also benefit from your efforts. MakeCatalog will first pass over each label’s pixels two times and do necessary raw/internal calculations. Once the passes are done, it will use the raw information for filling the final catalog’s columns. In the first pass it will gather mainly object information and in the second run, it will mainly focus on the clumps, or any other measurement that needs an output from the first pass. These two passes are designed to be raw summations: no extra processing. This will allow parallel processing and simplicity/clarity. So if your new calculation, needs new raw information from the pixels, then you will need to also modify the respective ‘mkcatalog_first_pass’ and ‘mkcatalog_second_pass’ functions (both in ‘bin/mkcatalog/mkcatalog.c’) and define new raw table columns in ‘main.h’ (hopefully the comments in the code are clear enough). In all these different places, the final columns are sorted in the same order (same order as *note Invoking astmkcatalog::). This allows a particular column/option to be easily found in all steps. Therefore in adding your new option, be sure to keep it in the same relative place in the list in all the separate places (it doesn’t necessarily have to be in the end), and near conceptually similar options. ‘main.h’ The ‘objectcols’ and ‘clumpcols’ enumerated variables (‘enum’) define the raw/internal calculation columns. If your new column requires new raw calculations, add a row to the respective list. If your calculation requires any other settings parameters, you should add a variable to the ‘mkcatalogparams’ structure. ‘ui.h’ The ‘option_keys_enum’ associates a unique value for each option to MakeProfiles. The options that have a short option version, the single character short comment is used for the value. Those that don’t have a short option version, get a large integer automatically. You should add a variable here to identify your desired column. ‘args.h’ This file specifies all the parameters for the GNU C library, Argp structure that is in charge of reading the user’s options. To define your new column, just copy an existing set of parameters and change the first, second and 5th values (the only ones that differ between all the columns), you should use the macro you defined in ‘ui.h’ here. ‘ui.c’ If your column includes any particular settings (you added a variable to the ‘mkcatalogparams’ structure in ‘main.h’), you should do the sanity checks and preparations for it here. Otherwise, you can ignore this file. ‘columns.c’ This file will contain the main definition and high-level calculation of your new column through the ‘columns_define_alloc’ and ‘columns_fill’ functions. In the first, you specify the basic information about the column: its name, units, comments, type (see *note Numeric data types::) and how it should be printed if the output is a text file. You should also specify the raw/internal columns that are necessary for this column here as the many existing examples show. Through the types for objects and rows, you can specify if this column is only for clumps, objects or both. The second main function (‘columns_fill’) writes the final value into the appropriate column for each object and clump. As you can see in the many existing examples, you can define your processing on the raw/internal calculations here and save them in the output. ‘mkcatalog.c’ As described before, this file contains the two main MakeCatalog work-horses: ‘mkcatalog_first_pass’ and ‘mkcatalog_second_pass’, their names are descriptive enough and their internals are also clear and heavily commented.  File: gnuastro.info, Node: Invoking astmkcatalog, Prev: Adding new columns to MakeCatalog, Up: MakeCatalog 7.3.5 Invoking MakeCatalog -------------------------- MakeCatalog will make a catalog from an input image and at least on labeled image. The executable name is ‘astmkcatalog’ with the following general template $ astmkcatalog [OPTION ...] InputImage.fits One line examples: ## Create catalog with RA, Dec, Magnitude and Magnitude error, ## `input.fits' is NoiseChisel's output: $ astmkcatalog --ra --dec --magnitude --magnitudeerr input.fits ## Same catalog as above (using short options): $ asmkcatalog -rdmG input.fits ## Write the catalog to a FITS table: $ astmkcatalog -mpQ --output=cat.fits input_labeled.fits ## Read the columns to create from `columns.conf': $ astmkcatalog --config=columns.conf input_labeled.fits ## Use different images for the objects and clumps inputs: $ astmkcatalog --objectsfile=K_labeled.fits --objectshdu=1 \ --clumpsfile=K_labeled.fits --clumpshdu=2 i_band.fits If MakeCatalog is to do processing, an input image should be provided with the recognized extensions as input data, see *note Arguments::. The options described in this section are those that are only particular to MakeProfiles. For operations that MakeProfiles shares with other programs (mainly involving input/output or general processing steps), see *note Common options::. Also see *note Common program behavior:: for some general characteristics of all Gnuastro programs including MakeCatalog. MakeCatalog needs 4 (or 5) images as input. These images can be separate extensions in one file (NoiseChisel’s default output), or each can have its own file and its own extension. See *note NoiseChisel output:: for the list. The clump labels image is not mandatory (when no clump catalog is required, for example in aperture photometry). When inspecting the object labels image, MakeProfiles will look for a ‘WCLUMPS’ (short for with-clumps) header keyword. If that keyword is present and has a value of ‘yes’, ‘1’, or ‘y’ (case insensitive) then a clump image must also be provided and a clump catalog will be made. When ‘WCLUMPS’ isn’t present or has any other value, only an object catalog will be created and all clump related options/columns will be ignored. For example, if you only need an object catalog from NoiseChisel’s output, you can use Gnuastro’s Fits program (see *note Fits::) to modify or remove the ‘WCLUMPS’ keyword in the objects HDU, then run MakeCatalog on it. Another example can be aperture photometry: let’s assume you have made your labeled image (defining the apertures) with MakeProfiles. Clumps are not defined in this context, so besides the input and labeled image, you only need NoiseChisel’s Sky and Sky standard deviation images (run NoiseChisel with the ‘--onlydetection’ option). Since MakeProfile’s output doesn’t contain the ‘WCLUMPS’ keyword, you just have to specify your labeled image with the ‘--objectsfile’ option and also set its HDU. Note that labeled images have to be an integer type. Therefore, if you are using MakeProfiles to define the apertures/labels, you can use its ‘--type=int32’ for example, see *note Input output options:: and *note Numeric data types::. When a clump catalog is also desired, two catalogs will be made: one for the objects (suffixed with ‘_o.txt’ or ‘_o.fits’) and another for the clumps (suffixed with ‘_c.txt’ or ‘_c.fits’). Therefore if any value is given to the ‘--output’ option, MakeCatalogs will replace these two suffixes with any existing suffix in the given value. If no output value is given, MakeCatalog will use the input name, see *note Automatic output::. The format of the output table is specified with the ‘--tableformat’ option, see *note Input output options::. When MakeCatalog is run on multiple threads, the clumps catalog rows will not be sorted by object since each object is processed independently by one thread and threaded applications are asynchronous. The clumps in each object will be sorted based on their labels, but you will find lower-index objects come after higher-index ones (especially if they have more clumps and thus take more time). If the order is very important for you, you can run the following command to sort the rows by object ID (and clump ID with each object): $ awk '!/^#/' out_c.txt | sort -g -k1,1 -k2,2 * Menu: * MakeCatalog input files:: Specifying the different input files. * MakeCatalog general settings:: Options for general column settings. * Upper-limit magnitude settings:: Necessary to define upper-limit magnitudes. * MakeCatalog output columns:: How to specify the columns in the output.  File: gnuastro.info, Node: MakeCatalog input files, Next: MakeCatalog general settings, Prev: Invoking astmkcatalog, Up: Invoking astmkcatalog 7.3.5.1 MakeCatalog input files ............................... MakeCatalog needs multiple images as input: a values image, one (or two) labeled images and Sky and Sky standard deviation images. The options described in this section allow you to identify them. If you use the default output of NoiseChisel (see *note NoiseChisel output::) you don’t have to worry about any of these options and just give NoiseChisel’s output file to MakeCatalog as described in *note Invoking astmkcatalog::. ‘-O STR’ ‘--objectsfile=STR’ The file name of the object labels image, if the image is in another extension of the input file, calling this option is not mandatory, just specify the extension/HDU with the ‘--objectshdu’ option. ‘--objectshdu=STR’ The HDU/extension of the object labels image. Only pixels with values above zero will be considered. The objects label image has to be an integer data type (see *note Numeric data types::) and only pixels with a value larger than zero will be used. If this extension contains the ‘WCLUMPS’ keyword with a value of ‘yes’, ‘1’, or ‘y’ (not case sensitive), then MakeCatalog will also build a clumps catalog, see *note Invoking astmkcatalog::. ‘-C STR’ ‘--clumpsfile=STR’ Similar to ‘--objlabs’ but for the labels of the clumps. This is only necessary if the image containing clump labels is not in the input file and the objects image has a ‘WCLUMPS’ keyword, see ‘--objectshdu’. ‘--clumpshdu=STR’ The HDU/extension of the object labels image. Only pixels with values above zero will be considered. The objects label image has to be an integer data type (see *note Numeric data types::) and only pixels with a value larger than zero will be used. ‘-s STR’ ‘--skyfile=STR’ File name of an image keeping the Sky value for each pixel. ‘--skyhdu=STR’ The HDU of the Sky value image. ‘-t STR’ ‘--stdfile=STR’ File name of image keeping the Sky value standard deviation for each pixel. ‘--stdhdu=STR’ The HDU of the Sky value standard deviation image.  File: gnuastro.info, Node: MakeCatalog general settings, Next: Upper-limit magnitude settings, Prev: MakeCatalog input files, Up: Invoking astmkcatalog 7.3.5.2 MakeCatalog general settings .................................... Some of the columns require particular settings (for example the zero point magnitude for measuring magnitudes), the options in this section can be used for such configurations. ‘-z FLT’ ‘--zeropoint=FLT’ The zero point magnitude for the input image, see *note Flux Brightness and magnitude::. ‘-E’ ‘--skysubtracted’ If the image has already been sky subtracted by another program, then you need to notify MakeCatalog through this option. Note that this is only relevant when the Signal to noise ratio is to be calculated. ‘-T FLT’ ‘--threshold=FLT’ For all the columns, only consider pixels that are above a given relative threshold. Symbolizing the value of this option as $T$, the Sky for a pixel at $(i,j)$ with $\mu_{ij}$ and its Standard deviation with $\sigma_{ij}$, that pixel will only be used if its value ($B_{ij}$) satisfies this condition: $B_{ij}>\mu_{ij}+{T}\sigma_{ij}$. The only calculations that will not be affected are is the average river values (‘--riverave’), since they are used as a reference. A commented row will be added in the header of the output catalog that will print the given value, since this is a very important issue, it starts with ‘**IMPORTANT**’. NoiseChisel will detect very diffuse signal which is useful in most cases where the aggregate properties of the detections are desired, since there is signal there (with the desired certainty). However, in some cases, only the properties of the peaks of the objects/clumps are desired, for example in attempting to separate stars from galaxies, the peaks are the major target and the diffuse regions only act to complicate the separation. With this option, MakeCatalog will simply ignore any pixel below the relative threshold. This option is not mandatory, so if it isn’t given (after reading the command-line and all configuration files, see *note Configuration files::), MakeCatalog will still operate. However, if it has a value in any lower-level configuration file and you want to ignore that value for this particular run or in a higher-level configuration file, then set it to NaN, for example ‘--threshold=nan’. Gnuastro uses the C library’s ‘strtod’ function to read floats, which is not case-sensitive in reading NaN values. But to be consistent, it is good practice to only use ‘nan’. ‘--nsigmag=FLT’ The median standard deviation (from the standard deviation image) will be multiplied by the value to this option and its magnitude will be reported in the comments of the output catalog. This value is a per-pixel value, not per object/clump and is not found over an area or aperture, like the common $5\sigma$ values that are commonly reported as a measure of depth or the upper-limit measurements (see *note Quantifying measurement limits::).  File: gnuastro.info, Node: Upper-limit magnitude settings, Next: MakeCatalog output columns, Prev: MakeCatalog general settings, Up: Invoking astmkcatalog 7.3.5.3 Upper-limit magnitude settings ...................................... The upper limit magnitude was discussed in *note Quantifying measurement limits::. Unlike other measured values/columns in MakeCatalog, the upper limit magnitude needs several defined parameters which are discussed here. All the upper limit magnitude specific options start with ‘up’ for upper-limit, except for ‘--envseed’ that is also present in other programs and is general for any job requiring random number generation (see *note Generating random numbers::). One very important consideration in Gnuastro is reproducibility. Therefore, the values to all of these parameters along with others (like the random number generator type and seed) are also reported in the comments of the final catalog when the upper limit magnitude column is desired. The random seed that is used to define the random positionings for each object or clump is unique and set based on the given seed, the total number of objects and clumps and also the labels of the clumps and objects. So with identical inputs, an identical upper-limit magnitude will be found. But even if the ordering of the object/clump labels differs (and the seed is the same) the result will not be the same. MakeCatalog will randomly place the object/clump footprint over the image and when the footprint doesn’t fall on any object or masked region (see ‘--upmaskfile’) it will be used until the desired number (‘--upnum’) of samples are found to estimate the distribution’s standard deviation (see *note Quantifying measurement limits::). Otherwise it will be ignored and another random position will be generated. But when the profile is very large or the image is significantly covered by detections, it might not be possible to find the desired number of samplings. MakeProfiles will continue searching until 50 times the value given to ‘--upnum’. If ‘--upnum’ good samples cannot be found until this limit, it will set the upper-limit magnitude for that object to NaN (blank). MakeCatalog will also print a warning if the range of positions available for the labeled region is smaller than double the size of the region. In such cases, the limited range of random positions can artificially decrease the standard deviation of the final distribution. ‘--upmaskfile=STR’ File name of mask image to use for upper-limit calculation. In some cases (especially when doing matched photometry), the object labels specified in the main input and mask image might not be adequate. In other words they do not necessarily have to cover _all_ detected objects: the user might have selected only a few of the objects in their labeled image. This option can be used to ignore regions in the image in these situations when estimating the upper-limit magnitude. All the non-zero pixels of the image specified by this option (in the ‘--upmaskhdu’ extension) will be ignored in the upper-limit magnitude measurements. For example, when you are using labels from another image, you can give NoiseChisel’s objects image output for this image as the value to this option. In this way, you can be sure that regions with data do not harm your distribution. See *note Quantifying measurement limits:: for more on the upper limit magnitude. ‘--upmaskhdu=STR’ The extension in the file specified by ‘--upmask’. ‘--upnum=INT’ The number of random samples to take for all the objects. A larger value to this option will give a more accurate result (asymptotically), but it will also slow down the process. When a randomly positioned sample overlaps with a detected/masked pixel it is not counted and another random position is found until the object completely lies over an undetected region. So you can be sure that for each object, this many samples over undetected objects are made. See the upper limit magnitude discussion in *note Quantifying measurement limits:: for more. ‘--uprange=INT,INT’ The range/width of the region (in pixels) to do random sampling along each dimension of the input image around each object’s position. This is not a mandatory option and if not given (or given a value of zero in a dimension), the full possible range of the dataset along that dimension will be used. This is useful when the noise properties of the dataset vary gradually. In such cases, using the full range of the input dataset is going to bias the result. However, note that decreasing the the range of available positions too much will also artificially decrease the standard deviation of the final distribution (and thus bias the upper-limit measurement). ‘--envseed’ Read the random number generator type and seed value from the environment (see *note Generating random numbers::). Random numbers are used in calculating the random positions of different samples of each object. ‘--upsigmaclip=FLT,FLT’ The raw distribution of random values will not be used to find the upper-limit magnitude, it will first be $\sigma$-clipped (see *note Sigma clipping::) to avoid outliers in the distribution (mainly the faint undetected wings of bright/large objects in the image). This option takes two values: the first is the multiple of $\sigma$, and the second is the termination criteria. If the latter is larger than 1, it is read as an integer number and will be the number of times to clip. If it is smaller than 1, it is interpretted as the tolerance level to stop clipping. See *note Sigma clipping:: for a complete explanation. ‘--upnsigma=FLT’ The multiple of the final ($\sigma$-clipped) standard deviation (or $\sigma$) used to measure the upper-limit brightness or magnitude.  File: gnuastro.info, Node: MakeCatalog output columns, Prev: Upper-limit magnitude settings, Up: Invoking astmkcatalog 7.3.5.4 MakeCatalog output columns .................................. The final group of options particular to MakeCatalog are those that specify which columns should be written into the final output table. For each column there is an option, if it has been called on the command line or in any of the configuration files, it will included as a column in the output catalog in the same order (see *note Configuration file precedence::). Some of the columns apply to both objects and clumps and some are particular to only one of them. The latter cases are explicitly marked with [Objects] or [Clumps] to specify the catalog they will be placed in. ‘--i’ ‘--ids’ This is a unique option which can add multiple columns to the final catalog(s). Calling this option will put the object IDs (‘--objid’) in the objects catalog and host-object-ID (‘--hostobjid’) and ID-in-host-object (‘--idinhostobj’) into the clumps catalog. Hence if only object catalogs are required, it has the same effect as ‘--objid’. ‘--objid’ [Objects] ID of this object. ‘-j’ ‘--hostobjid’ [Clumps] The ID of the object which hosts this clump. ‘--idinhostobj’ [Clumps] The ID of this clump in its host object. ‘-C’ ‘--numclumps’ [Objects] The number of clumps in this object. ‘-a’ ‘--area’ The raw area (number of pixels) in any clump or object independent of what pixel it lies over (if it is NaN/blank or unused for example). ‘--clumpsarea’ [Objects] The total area of all the clumps in this object. ‘--weightarea’ The area (number of pixels) used in the flux weighted position calculations. ‘-x’ ‘--x’ The flux weighted center of all objects and clumps along the first FITS axis (horizontal when viewed in SAO ds9), see $\overline{x}$ in *note Measuring elliptical parameters::. The weight has to have a positive value (pixel value larger than the Sky value) to be meaningful! Specially when doing matched photometry, this might not happen: no pixel value might be above the Sky value. For such detections, the geometric center will be reported in this column (see ‘--geox’). You can use ‘--weightarea’ to see which was used. ‘-y’ ‘--y’ The flux weighted center of all objects and clumps along the second FITS axis (vertical when viewed in SAO ds9). See ‘--x’. ‘--geox’ The geometric center of all objects and clumps along the first FITS axis axis. The geometric center is the average pixel positions irrespective of their pixel values. ‘--geoy’ The geometric center of all objects and clumps along the second FITS axis axis, see ‘--geox’. ‘--clumpsx’ [Objects] The flux weighted center of all the clumps in this object along the first FITS axis. See ‘--x’. ‘--clumpsy’ [Objects] The flux weighted center of all the clumps in this object along the second FITS axis. See ‘--x’. ‘--clumpsgeox’ [Objects] The geometric center of all the clumps in this object along the first FITS axis. See ‘--geox’. ‘--clumpsgeoy’ [Objects] The geometric center of all the clumps in this object along the second FITS axis. See ‘--geox’. ‘-r’ ‘--ra’ Flux weighted right ascension of all objects or clumps, see ‘--x’. This is just an alias for one of the lower-level ‘--w1’ or ‘--w2’ options. Using the FITS WCS keywords (‘CTYPE’), MakeCatalog will determine which axis corresponds to the right ascension. If no ‘CTYPE’ keywords start with ‘RA’, an error will be printed when requesting this column and MakeCatalog will abort. ‘-d’ ‘--dec’ Flux weighted declination of all objects or clumps, see ‘--x’. This is just an alias for one of the lower-level ‘--w1’ or ‘--w2’ options. Using the FITS WCS keywords (‘CTYPE’), MakeCatalog will determine which axis corresponds to the declination. If no ‘CTYPE’ keywords start with ‘DEC’, an error will be printed when requesting this column and MakeCatalog will abort. ‘--w1’ Flux weighted first WCS axis of all objects or clumps, see ‘--x’. The first WCS axis is commonly used as right ascension in images. ‘--w2’ Flux weighted second WCS axis of all objects or clumps, see ‘--x’. The second WCS axis is commonly used as declination in images. ‘--geow1’ Geometric center in first WCS axis of all objects or clumps, see ‘--geox’. The first WCS axis is commonly used as right ascension in images. ‘--geow2’ Geometric center in second WCS axis of all objects or clumps, see ‘--geox’. The second WCS axis is commonly used as declination in images. ‘--clumpsw1’ [Objects] Flux weighted center in first WCS axis of all clumps in this object, see ‘--x’. The first WCS axis is commonly used as right ascension in images. ‘--clumpsw2’ [Objects] Flux weighted declination of all clumps in this object, see ‘--x’. The second WCS axis is commonly used as declination in images. ‘--clumpsgeow1’ [Objects] Geometric center right ascension of all clumps in this object, see ‘--geox’. The first WCS axis is commonly used as right ascension in images. ‘--clumpsgeow2’ [Objects] Geometric center declination of all clumps in this object, see ‘--geox’. The second WCS axis is commonly used as declination in images. ‘-b’ ‘--brightness’ The brightness (sum of all pixel values), see *note Flux Brightness and magnitude::. For clumps, the ambient brightness (flux of river pixels around the clump multiplied by the area of the clump) is removed, see ‘--riverflux’. So the sum of clump brightnesses in the clump catalog will be smaller than the total clump brightness in the ‘--clumpbrightness’ column of the objects catalog. If no usable pixels (blank or below the threshold) are present over the clump or object, the stored value will be NaN (note that zero is meaningful). ‘--clumpbrightness’ [Objects] The total brightness of the clumps within an object. This is simply the sum of the pixels associated with clumps in the object. If no usable pixels (blank or below the threshold) are present over the clump or object, the stored value will be NaN, because zero (note that zero is meaningful). ‘--noriverbrightness’ [Clumps] The Sky (not river) subtracted clump brightness. By definition, for the clumps, the average brightness of the rivers surrounding it are subtracted from it for a first order accounting for contamination by neighbors. In cases where you will be calculating the flux brightness difference later (one example below) the contamination will be (mostly) removed at that stage, which is why this column was added. One example might be this: you want to know the change in the clump flux as a function of threshold (see ‘--threshold’). So you will make two catalogs (each having this column but with different thresholds) and then subtract the lower threshold catalog (higher brightness) from the higher threshold catalog (lower brightness). The effect is most visible when the rivers have a high average signal-to-noise ratio. The removed contribution from the pixels below the threshold will be less than the river pixels. Therefore the river-subtracted brightness (‘--brightness’) for the thresholded catalog for such clumps will be larger than the brightness with no threshold! If no usable pixels (blank or below the possibly given threshold) are present over the clump or object, the stored value will be NaN (note that zero is meaningful). ‘-m’ ‘--magnitude’ The magnitude of clumps or objects, see ‘--brightness’. ‘-e’ ‘--magnitudeerr’ The magnitude error of clumps or objects. The magnitude error is calculated from the signal-to-noise ratio (see ‘--sn’ and *note Quantifying measurement limits::). Note that until now this error assumes un-correlated pixel values and also does not include the error in estimating the aperture (or error in generating the labeled image). For now these factors have to be found by other means. Task 14124 (https://savannah.gnu.org/task/index.php?14124) has been defined for work on adding these sources of error too. ‘--clumpsmagnitude’ [Objects] The magnitude of all clumps in this object, see ‘--clumpbrightness’. ‘--upperlimit’ The upper limit value (in units of the input image) for this object or clump. See *note Quantifying measurement limits:: and *note Upper-limit magnitude settings:: for a complete explanation. This is very important for the fainter and smaller objects in the image where the measured magnitudes are not reliable. ‘--upperlimitmag’ The upper limit magnitude for this object or clump. See *note Quantifying measurement limits:: and *note Upper-limit magnitude settings:: for a complete explanation. This is very important for the fainter and smaller objects in the image where the measured magnitudes are not reliable. ‘--riverave’ [Clumps] The average brightness of the river pixels around this clump. River pixels were defined in Akhlaghi and Ichikawa 2015. In short they are the pixels immediately outside of the clumps. This value is used internally to find the brightness (or magnitude) and signal to noise ratio of the clumps. It can generally also be used as a scale to gauge the base (ambient) flux surrounding the clump. In case there was no river pixels, then this column will have the value of the Sky under the clump. So note that this value is _not_ sky subtracted. ‘--rivernum’ [Clumps] The number of river pixels around this clump, see ‘--riverflux’. ‘-n’ ‘--sn’ The Signal to noise ratio (S/N) of all clumps or objects. See Akhlaghi and Ichikawa (2015) for the exact equations used. ‘--sky’ The sky flux (per pixel) value under this object or clump. This is actually the mean value of all the pixels in the sky image that lie on the same position as the object or clump. ‘--std’ The sky value standard deviation (per pixel) for this clump or object. Like ‘--sky’, this is the average of the values in the input sky standard deviation image pixels that lie over this object. ‘-A’ ‘--semimajor’ The pixel-value weighted semi-major axis of the profile (assuming it is an ellipse) in units of pixels. See *note Measuring elliptical parameters::. ‘-B’ ‘--semiminor’ The pixel-value weighted semi-minor axis of the profile (assuming it is an ellipse) in units of pixels. See *note Measuring elliptical parameters::. ‘-p’ ‘--positionangle’ The pixel-value weighted angle of the semi-major axis with the first FITS axis in degrees. See *note Measuring elliptical parameters::. ‘--geosemimajor’ The geometric (ignoring pixel values) semi-major axis of the profile, assuming it is an ellipse. ‘--geosemiminor’ The geometric (ignoring pixel values) semi-minor axis of the profile, assuming it is an ellipse. ‘--geopositionangle’ The geometric (ignoring pixel values) angle of the semi-major axis with the first FITS axis in degrees.  File: gnuastro.info, Node: Match, Prev: MakeCatalog, Up: Data analysis 7.4 Match ========= Data can come come from different telescopes, filters, software and even different configurations for a single software. As a result, one of the primary things to do after generating catalogs from each of these sources (for example with *note MakeCatalog::), is to find which sources in one catalog correspond to which in the other(s). In other words, to ‘match’ the two catalogs with each other. Gnuastro’s Match program is in charge of such operations. The nearest objects in the two catalogs, within the given aperture, will be found and given as output. The aperture can be a circle or an ellipse with any orientation. * Menu: * Invoking astmatch:: Inputs, outputs and options of Match  File: gnuastro.info, Node: Invoking astmatch, Prev: Match, Up: Match 7.4.1 Invoking Match -------------------- When given two catalogs, Match finds the rows that are nearest to each other within an input aperture. The executable name is ‘astmatch’ with the following general template $ astmatch [OPTION ...] input-1 input-2 One line examples: ## 1D wavelength match (within 5 angstroms) of the two inputs. ## The wavelengths are in the 5th and 10th columns respectively. $ astmatch --aperture=5e-10 --ccol1=5 --ccol2=10 in1.fits in2.txt ## Match the two catalogs with a circular aperture of width 2. ## (Units same as given positional columns). ## (By default two columns are given for `--ccol1' and `--ccol2', ## The number of values to these determines the dimensions). $ astmatch --aperture=2 input1.txt input2.fits ## Similar to before, but the output is created by merging various ## columns from the two inputs: columns 1, RA, DEC from the first ## input, followed by all columns starting with MAG and the 8th ## column from second input and finally the 10th from first input. $ astmatch --aperture=2 input1.txt input2.fits \ --outcols=a1,aRA,aDEC,b/^MAG/,bBRG,a10 ## Match the two catalogs within an elliptical aperture of 1 and 2 ## arcseconds along RA and Dec respectively. $ astmatch --aperture=1/3600,2/3600 in1.fits in2.txt ## Match the RA and DEC columns of the first input with the RA_D ## and DEC_D columns of the second within a 0.5 arcseconds aperture. $ astmatch --ccol1=RA,DEC --ccol2=RA_D,DEC_D --aperture0.5/3600 \ in1.fits in2.fits Two inputs are necessary for Match to start processing. The inputs can be plain text tables or FITS tables, see *note Tables::. Match follows the same basic behavior of all Gnuastro programs as fully described in *note Common program behavior::. If the first input is a FITS file, the common ‘--hdu’ option (see *note Input output options::) should be used to identify the extension. When the second input is FITS, the extension must be specified with ‘--hdu2’. When ‘--quiet’ is not called, Match will print the number of matches found in standard output (on the command-line). If no match was found, no output file will be created (table or log file). When matches are found, by default, the output file(s) will be the re-arranged input tables such that the rows match each other: both output tables will have the same number of rows which are matched with each other. If ‘--outcols’ is called, the output is a single table with rows chosen from either of the two inputs in any order, see the description of ‘--outcols’. If the ‘--logasoutput’ option is called, the output will be a single table with the contents of the log file, see below. If no output file name is given with the ‘--output’ option, then automatic output *note Automatic output:: will be used to determine the output name(s). Depending on ‘--tableformat’ (see *note Input output options::), the output will then be a (possibly multi-extension) FITS file or (possibly two) plain text file(s). When the output is a FITS file, the default re-arranged inputs will be two extensions of the output FITS file. With ‘--outcols’ and ‘--logasoutput’, the FITS output will be a single table (in one extension). When the ‘--log’ option is called (see *note Operating mode options::), Match will also create a file named ‘astmatch.fits’ (or ‘astmatch.txt’, depending on ‘--tableformat’, see *note Input output options::) in the directory it is run in. This log table will have three columns. The first and second columns show the matching row/record number (counting from 1) of the first and second input catalogs respectively. The third column is the distance between the two matched positions. The units of the distance are the same as the given coordinates (given the possible ellipticity, see description of ‘--aperture’ below). When ‘--logasoutput’ is called, no log file (with a fixed name) will be created. In this case, the output file (possibly given by the ‘--output’ option) will have the contents of this log file. ‘-H STR’ ‘--hdu2=STR’ The extension/HDU of the second input if it is a FITS file. When it isn’t a FITS file, this option’s value is ignored. For the first input, the common option ‘--hdu’ must be used. ‘--outcols=STR’ Columns from both inputs to write into a single matched table output. The value to ‘--outcols’ must be a comma-separated list of strings, for example ‘--outcols=a1,bRA,bDEC’. The first character of each string specifies the input catalog: ‘a’ for the first and ‘b’ for the second. The rest of the characters of the string will be directly used to identify the proper column(s) in the respective table. See *note Selecting table columns:: for how columns can be specified in Gnuastro. In this example, the output will have three columns: the first column of the first input and the ‘RA’ and ‘DEC’ columns of the second input. Another example is given in the one-line examples above. Compared to the default case (where two tables with all their columns) are printed, using this option is much faster: it will only read and re-arrange the necessary columns and it will write a single output table. Combined with regular expressions in large tables, this can be a very powerful and convenient way to retrieve your desired information and do the match at the same time. ‘-l’ ‘--logasoutput’ The output file will have the contents of the log file: indexs in the two catalogs that match with each other along with their distance. See description above. When this option is called, a log file called ‘astmatch.txt’ will not be created. With this option, the default output behavior (two tables containing the re-arranged inputs) will be ‘--notmatched’ Write the non-matching rows into the outputs, not the matched ones. Note that with this option, the two output tables will not necessarily have the same number of rows. Therefore, this option cannot be called with ‘--outcols’. ‘--outcols’ prints mixed columns from both inputs, so they must all have the same number of elements and must correspond to each other. ‘-c INT/STR[,INT/STR]’ ‘--ccol1=INT/STR[,INT/STR]’ The coordinate columns of the first input. The number of dimensions for the match is determined by the number of comma-separated values given to this option. The values can be the column number (counting from 1), exact column name or a regular expression. For more, see *note Selecting table columns::. See the one-line examples above for some usages of this option. ‘-C INT/STR[,INT/STR]’ ‘--ccol2=INT/STR[,INT/STR]’ The coordinate columns of the second input. See the example in ‘--ccol1’ for more. ‘-a FLT[,FLT[,FLT]]’ ‘--aperture=FLT[,FLT[,FLT]]’ Parameters of the aperture for matching. The values given to this option can be fractions, for example when the position columns are in units of degrees, ‘1/3600’ can be used to ask for one arcsecond. The interpretation of the values depends on the requested dimensions (determined from ‘--ccol1’ and ‘--ccol2’) and how many values are given to this option. 1D match The aperture/interval can only take one value: half of the interval around each point (maximum distance from each point). 2D match In a 2D match, the aperture can be a circle, an ellipse aligned in the axes or an ellipse with a rotated major axis. To simply the usage, you can determine the shape based on the number of free parameters for each. 1 number For example ‘--aperture=2’. The aperture will be a circle of the given radius. The value will be in the same units as the columns in ‘--ccol1’ and ‘--ccol2’). 2 numbers For example ‘--aperture=3,4e-10’. The aperture will be an ellipse (if the two numbers are different) with the respective value along each dimension. The numbers are in units of the first and second axis. In the example above, the semi-axis value along the first axis will be 3 (in units of the first coordinate) and along the second axis will be $4\times10^{-10}$ (in units of the second coordinate). Such values can happen if you are comparing catalogs of a spectra for example. If more than one object exists in the aperture, the nearest will be found along the major axis as described in *note Defining an ellipse::. 3 numbers For example ‘--aperture=2,0.6,30’. The aperture will be an ellipse (if the second value is not 1). The first number is the semi-major axis, the second is the axis ratio and the third is the position angle (in degrees). If multiple matches are found within the ellipse, the distance (to find the nearest) is calculated along the major axis in the elliptical space, see *note Defining an ellipse::.  File: gnuastro.info, Node: Modeling and fittings, Next: High-level calculations, Prev: Data analysis, Up: Top 8 Modeling and fitting ********************** In order to fully understand observations after initial analysis on the image, it is very important to compare them with the existing models to be able to further understand both the models and the data. The tools in this chapter create model galaxies and will provide 2D fittings to be able to understand the detections. * Menu: * MakeProfiles:: Making mock galaxies and stars. * MakeNoise:: Make (add) noise to an image.  File: gnuastro.info, Node: MakeProfiles, Next: MakeNoise, Prev: Modeling and fittings, Up: Modeling and fittings 8.1 MakeProfiles ================ MakeProfiles will create mock astronomical profiles from a catalog, either individually or together in one output image. In data analysis, making a mock image can act like a calibration tool, through which you can test how successfully your detection technique is able to detect a known set of objects. There are commonly two aspects to detecting: the detection of the fainter parts of bright objects (which in the case of galaxies fade into the noise very slowly) or the complete detection of an over-all faint object. Making mock galaxies is the most accurate (and idealistic) way these two aspects of a detection algorithm can be tested. You also need mock profiles in fitting known functional profiles with observations. MakeProfiles was initially built for extra galactic studies, so currently the only astronomical objects it can produce are stars and galaxies. We welcome the simulation of any other astronomical object. The general outline of the steps that MakeProfiles takes are the following: 1. Build the full profile out to its truncation radius in a possibly over-sampled array. 2. Multiply all the elements by a fixed constant so its total magnitude equals the desired total magnitude. 3. If ‘--individual’ is called, save the array for each profile to a FITS file. 4. If ‘--nomerged’ is not called, add the overlapping pixels of all the created profiles to the output image and abort. Using input values, MakeProfiles adds the World Coordinate System (WCS) headers of the FITS standard to all its outputs (except PSF images!). For a simple test on a set of mock galaxies in one image, there is no need for the third step or the WCS information. However in complicated simulations like weak lensing simulations, where each galaxy undergoes various types of individual transformations based on their position, those transformations can be applied to the different individual images with other programs. After all the transformations are applied, using the WCS information in each individual profile image, they can be merged into one output image for convolution and adding noise. * Menu: * Modeling basics:: Astronomical modeling basics. * If convolving afterwards:: Considerations for convolving later. * Flux Brightness and magnitude:: About these measures of energy. * Profile magnitude:: Definition of total profile magnitude. * Invoking astmkprof:: Inputs and Options for MakeProfiles.  File: gnuastro.info, Node: Modeling basics, Next: If convolving afterwards, Prev: MakeProfiles, Up: MakeProfiles 8.1.1 Modeling basics --------------------- In the subsections below, first a review of some very basic information and concepts behind modeling a real astronomical image is given. You can skip this subsection if you are already sufficiently familiar with these concepts. * Menu: * Defining an ellipse:: An ellipse on a pixelated grid. * PSF:: Radial profiles for the PSF. * Stars:: Making mock star profiles. * Galaxies:: Radial profiles for galaxies. * Sampling from a function:: Sample a function on a pixelated canvas. * Oversampling:: Oversampling the model.  File: gnuastro.info, Node: Defining an ellipse, Next: PSF, Prev: Modeling basics, Up: Modeling basics 8.1.1.1 Defining an ellipse ........................... The PSF, see *note PSF::, and galaxy radial profiles are generally defined on an ellipse. Therefore, in this section we’ll start defining an ellipse on a pixelated 2D surface. Labeling the major axis of an ellipse $a$, and its minor axis with $b$, the _axis ratio_ is defined as: $q\equiv b/a$. The major axis of an ellipse can be aligned in any direction, therefore the angle of the major axis with respect to the horizontal axis of the image is defined to be the _position angle_ of the ellipse and in this book, we show it with $\theta$. Our aim is to put a radial profile of any functional form $f(r)$ over an ellipse. Hence we need to associate a radius/distance to every point in space. Let’s define the radial distance $r_{el}$ as the distance on the major axis to the center of an ellipse which is located at $i_c$ and $j_c$ (in other words $r_{el}\equiv{a}$). We want to find $r_{el}$ of a point located at $(i,j)$ (in the image coordinate system) from the center of the ellipse with axis ratio $q$ and position angle $\theta$. First the coordinate system is rotated(1) by $\theta$ to get the new rotated coordinates of that point $(i_r,j_r)$: $$i_r(i,j)=+(i_c-i)\cos\theta+(j_c-j)\sin\theta$$ $$j_r(i,j)=-(i_c-i)\sin\theta+(j_c-j)\cos\theta$$ Recall that an ellipse is defined by $(i_r/a)^2+(j_r/b)^2=1$ and that we defined $r_{el}\equiv{a}$. Hence, multiplying all elements of the the ellipse definition with $r_{el}^2$ we get the elliptical distance at this point point located: $r_{el}=\sqrt{i_r^2+(j_r/q)^2}$. To place the radial profiles explained below over an ellipse, $f(r_{el})$ is calculated based on the functional radial profile desired. MakeProfiles builds the profile starting from the nearest element (pixel in an image) in the dataset to the profile center. The profile value is calculated for that central pixel using monte carlo integration, see *note Sampling from a function::. The next pixel is the next nearest neighbor to the central pixel as defined by $r_{el}$. This process goes on until the profile is fully built upto the trunctation radius. This is done fairly efficiently using a breadth first parsing strategy(2) which is implemented through an ordered linked list. Using this approach, we build the profile by expanding the circumference. Not one more extra pixel has to be checked (the calculation of $r_{el}$ from above is not cheap in CPU terms). Another consequence of this strategy is that extending MakeProfiles to three dimensions becomes very simple: only the neighbors of each pixel have to be changed. Everything else after that (when the pixel index and its radial profile have entered the linked list) is the same, no matter the number of dimensions we are dealing with. ---------- Footnotes ---------- (1) Do not confuse the signs of $sin$ with the rotation matrix defined in *note Warping basics::. In that equation, the point is rotated, here the coordinates are rotated and the point is fixed. (2)  File: gnuastro.info, Node: PSF, Next: Stars, Prev: Defining an ellipse, Up: Modeling basics 8.1.1.2 Point Spread Function ............................. Assume we have a ‘point’ source, or a source that is far smaller than the maximum resolution (a pixel). When we take an image of it, it will ‘spread’ over an area. To quantify that spread, we can define a ‘function’. This is how the point spread function or the PSF of an image is defined. This ‘spread’ can have various causes, for example in ground based astronomy, due to the atmosphere. In practice we can never surpass the ‘spread’ due to the diffraction of the lens aperture. Various other effects can also be quantified through a PSF. For example, the simple fact that we are sampling in a discrete space, namely the pixels, also produces a very small ‘spread’ in the image. Convolution is the mathematical process by which we can apply a ‘spread’ to an image, or in other words blur the image, see *note Convolution process::. The Brightness of an object should remain unchanged after convolution, see *note Flux Brightness and magnitude::. Therefore, it is important that the sum of all the pixels of the PSF be unity. The PSF image also has to have an odd number of pixels on its sides so one pixel can be defined as the center. In MakeProfiles, the PSF can be set by the two methods explained below. Parametric functions A known mathematical function is used to make the PSF. In this case, only the parameters to define the functions are necessary and MakeProfiles will make a PSF based on the given parameters for each function. In both cases, the center of the profile has to be exactly in the middle of the central pixel of the PSF (which is automatically done by MakeProfiles). When talking about the PSF, usually, the full width at half maximum or FWHM is used as a scale of the width of the PSF. ‘Gaussian’ In the older papers, and to a lesser extent even today, some researchers use the 2D Gaussian function to approximate the PSF of ground based images. In its most general form, a Gaussian function can be written as: $$f(r)=a \exp \left( -(x-\mu)^2 \over 2\sigma^2 \right)+d$$ Since the center of the profile is pre-defined, $\mu$ and $d$ are constrained. $a$ can also be found because the function has to be normalized. So the only important parameter for MakeProfiles is the $\sigma$. In the Gaussian function we have this relation between the FWHM and $\sigma$: $$\rm{FWHM}_g=2\sqrt{2\ln{2}}\sigma \approx 2.35482\sigma$$ ‘Moffat’ The Gaussian profile is much sharper than the images taken from stars on photographic plates or CCDs. Therefore in 1969, Moffat proposed this functional form for the image of stars: $$f(r)=a \left[ 1+\left( r\over \alpha \right)^2 \right]^{-\beta}$$ Again, $a$ is constrained by the normalization, therefore two parameters define the shape of the Moffat function: $\alpha$ and $\beta$. The radial parameter is $\alpha$ which is related to the FWHM by $$\rm{FWHM}_m=2\alpha\sqrt{2^{1/\beta}-1}$$ Comparing with the PSF predicted from atmospheric turbulence theory with a Moffat function, Trujillo et al.(1) claim that $\beta$ should be 4.765. They also show how the Moffat PSF contains the Gaussian PSF as a limiting case when $\beta\to\infty$. An input FITS image An input image file can also be specified to be used as a PSF. If the sum of its pixels are not equal to 1, the pixels will be multiplied by a fraction so the sum does become 1. While the Gaussian is only dependent on the FWHM, the Moffat function is also dependent on $\beta$. Comparing these two functions with a fixed FWHM gives the following results: • Within the FWHM, the functions don’t have significant differences. • For a fixed FWHM, as $\beta$ increases, the Moffat function becomes sharper. • The Gaussian function is much sharper than the Moffat functions, even when $\beta$ is large. ---------- Footnotes ---------- (1) Trujillo, I., J. A. L. Aguerri, J. Cepa, and C. M. Gutierrez (2001). “The effects of seeing on Sérsic profiles - II. The Moffat PSFâ€. In: MNRAS 328, pp. 977—985.  File: gnuastro.info, Node: Stars, Next: Galaxies, Prev: PSF, Up: Modeling basics 8.1.1.3 Stars ............. In MakeProfiles, stars are generally considered to be a point source. This is usually the case for extra galactic studies, were nearby stars are also in the field. Since a star is only a point source, we assume that it only fills one pixel prior to convolution. In fact, exactly for this reason, in astronomical images the light profiles of stars are one of the best methods to understand the shape of the PSF and a very large fraction of scientific research is preformed by assuming the shapes of stars to be the PSF of the image.  File: gnuastro.info, Node: Galaxies, Next: Sampling from a function, Prev: Stars, Up: Modeling basics 8.1.1.4 Galaxies ................ Today, most practitioners agree that the flux of galaxies can be modeled with one or a few generalized de Vaucouleur’s (or Sérsic) profiles. $$I(r) = I_e \exp \left ( -b_n \left[ \left( r \over r_e \right)^{1/n} -1 \right] \right )$$ Gérard de Vaucouleurs (1918-1995) was first to show in 1948 that this function best fits the galaxy light profiles, with the only difference that he held $n$ fixed to a value of 4. 20 years later in 1968, J. L. Sérsic showed that $n$ can have a variety of values and does not necessarily need to be 4. This profile depends on the effective radius ($r_e$) which is defined as the radius which contains half of the profile brightness (see *note Profile magnitude::). $I_e$ is the flux at the effective radius. The Sérsic index $n$ is used to define the concentration of the profile within $r_e$ and $b_n$ is a constant dependent on $n$. MacArthur et al.(1) show that for $n>0.35$, $b_n$ can be accurately approximated using this equation: $$b_n=2n - {1\over 3} + {4\over 405n} + {46\over 25515n^2} + {131\over 1148175n^3}-{2194697\over 30690717750n^4}$$ ---------- Footnotes ---------- (1) MacArthur, L. A., S. Courteau, and J. A. Holtzman (2003). “Structure of Disk-dominated Galaxies. I. Bulge/Disk Parameters, Simulations, and Secular Evolutionâ€. In: ApJ 582, pp. 689—722.  File: gnuastro.info, Node: Sampling from a function, Next: Oversampling, Prev: Galaxies, Up: Modeling basics 8.1.1.5 Sampling from a function ................................ A pixel is the ultimate level of accuracy to gather data, we can’t get any more accurate in one image, this is known as sampling in signal processing. However, the mathematical profiles which describe our models have infinite accuracy. Over a large fraction of the area of astrophysically interesting profiles (for example galaxies or PSFs), the variation of the profile over the area of one pixel is not too significant. In such cases, the elliptical radius ($r_{el}$ of the center of the pixel can be assigned as the final value of the pixel, see *note Defining an ellipse::). As you approach their center, some galaxies become very sharp (their value significantly changes over one pixel’s area). This sharpness increases with smaller effective radius and larger Sérsic values. Thus rendering the central value extremely inaccurate. The first method that comes to mind for solving this problem is integration. The functional form of the profile can be integrated over the pixel area in a 2D integration process. However, unfortunately numerical integration techniques also have their limitations and when such sharp profiles are needed they can become extremely inaccurate. The most accurate method of sampling a continuous profile on a discrete space is by choosing a large number of random points within the boundaries of the pixel and taking their average value (or Monte Carlo integration). This is also, generally speaking, what happens in practice with the photons on the pixel. The number of random points can be set with ‘--numrandom’. Unfortunately, repeating this Monte Carlo process would be extremely time and CPU consuming if it is to be applied to every pixel. In order to not loose too much accuracy, in MakeProfiles, the profile is built using both methods explained below. The building of the profile begins from its central pixel and continues (radially) outwards. Monte Carlo integration is first applied (which yields $F_r$), then the central pixel value ($F_c$) is calculated on the same pixel. If the fractional difference ($|F_r-F_c|/F_r$) is lower than a given tolerance level (specified with ‘--tolerance’) MakeProfiles will stop using Monte Carlo integration and only use the central pixel value. The ordering of the pixels in this inside-out construction is based on $r=\sqrt{(i_c-i)^2+(j_c-j)^2}$, not $r_{el}$, see *note Defining an ellipse::. When the axis ratios are large (near one) this is fine. But when they are small and the object is highly elliptical, it might seem more reasonable to follow $r_{el}$ not $r$. The problem is that the gradient is stronger in pixels with smaller $r$ (and larger $r_{el}$) than those with smaller $r_{el}$. In other words, the gradient is strongest along the minor axis. So if the next pixel is chosen based on $r_{el}$, the tolerance level will be reached sooner and lots of pixels with large fractional differences will be missed. Monte Carlo integration uses a random number of points. Thus, every time you run it, by default, you will get a different distribution of points to sample within the pixel. In the case of large profiles, this will result in a slight difference of the pixels which use Monte Carlo integration each time MakeProfiles is run. To have a deterministic result, you have to fix the random number generator properties which is used to build the random distribution. This can be done by setting the ‘GSL_RNG_TYPE’ and ‘GSL_RNG_SEED’ environment variables and calling MakeProfiles with the ‘--envseed’ option. To learn more about the process of generating random numbers, see *note Generating random numbers::. The seed values are fixed for every profile: with ‘--envseed’, all the profiles have the same seed and without it, each will get a different seed using the system clock (which is accurate to within one microsecond). The same seed will be used to generate a random number for all the sub-pixel positions of all the profiles. So in the former, the sub-pixel points checked for all the pixels undergoing Monte carlo integration in all profiles will be identical. In other words, the sub-pixel points in the first (closest to the center) pixel of all the profiles will be identical with each other. All the second pixels studied for all the profiles will also receive an identical (different from the first pixel) set of sub-pixel points and so on. As long as the number of random points used is large enough or the profiles are not identical, this should not cause any systematic bias.  File: gnuastro.info, Node: Oversampling, Prev: Sampling from a function, Up: Modeling basics 8.1.1.6 Oversampling .................... The steps explained in *note Sampling from a function:: do give an accurate representation of a profile prior to convolution. However, in an actual observation, the image is first convolved with or blurred by the atmospheric and instrument PSF in a continuous space and then it is sampled on the discrete pixels of the camera. In order to more accurately simulate this process, the un-convolved image and the PSF are created on a finer pixel grid. In other words, the output image is a certain odd-integer multiple of the desired size, we can call this ‘oversampling’. The user can specify this multiple as a command-line option. The reason this has to be an odd number is that the PSF has to be centered on the center of its image. An image with an even number of pixels on each side does not have a central pixel. The image can then be convolved with the PSF (which should also be oversampled on the same scale). Finally, image can be sub-sampled to get to the initial desired pixel size of the output image. After this, mock noise can be added as explained in the next section. This is because unlike the PSF, the noise occurs in each output pixel, not on a continuous space like all the prior steps.  File: gnuastro.info, Node: If convolving afterwards, Next: Flux Brightness and magnitude, Prev: Modeling basics, Up: MakeProfiles 8.1.2 If convolving afterwards ------------------------------ In case you want to convolve the image later with a given point spread function, make sure to use a larger image size. After convolution, the profiles become larger and a profile that is normally completely outside of the image might fall within it. On one axis, if you want your final (convolved) image to be $m$ pixels and your PSF is $2n+1$ pixels wide, then when calling MakeProfiles, set the axis size to $m+2n$, not $m$. You also have to shift all the pixel positions of the profile centers on the that axis by $n$ pixels to the positive. After convolution, you can crop the outer $n$ pixels with the section crop box specification of Crop: ‘--section=n:*-n,n:*-n’ assuming your PSF is a square, see *note Crop section syntax::. This will also remove all discrete Fourier transform artifacts (blurred sides) from the final image. To facilitate this shift, MakeProfiles has the options ‘--xshift’, ‘--yshift’ and ‘--prepforconv’, see *note Invoking astmkprof::.  File: gnuastro.info, Node: Flux Brightness and magnitude, Next: Profile magnitude, Prev: If convolving afterwards, Up: MakeProfiles 8.1.3 Flux Brightness and magnitude ----------------------------------- Astronomical data pixels are usually in units of counts(1) or electrons or either one divided by seconds. To convert from the counts to electrons, you will need to know the instrument gain. In any case, they can be directly converted to energy or energy/time using the basic hardware (telescope, camera and filter) information. We will continue the discussion assuming the pixels are in units of energy/time. The _brightness_ of an object is defined as its total detected energy per time. This is simply the sum of the pixels that are associated with that detection by our detection tool for example *note NoiseChisel::(2). The _flux_ of an object is in units of energy/time/area and for a detected object, it is defined as its brightness divided by the area used to collect the light from the source or the telescope aperture (for example in $cm^2$)(3). Knowing the flux ($f$) and distance to the object ($r$), we can calculate its _luminosity_: $L=4{\pi}r^2f$. Therefore, flux and luminosity are intrinsic properties of the object, while brightness depends on our detecting tools (hardware and software). Here we will not be discussing luminosity, but brightness. However, since luminosity is the astrophysically interesting quantity, we also defined it here to avoid possible confusion between these two terms because they both have the same units. Images of astronomical objects span over a very large range of brightness. With the Sun (as the brightest object) being roughly $2.5^{60}=10^{24}$ times brighter than the faintest galaxies we can currently detect. Therefore discussing brightness will be very hard, and astronomers have chosen to use a logarithmic scale to talk about the brightness of astronomical objects. But the logarithm can only be usable with a unit-less and always positive value. Fortunately brightness is always positive and to remove the units we divide the brightness of the object ($B$) by a reference brightness ($B_r$). We then define the resulting logarithmic scale as $magnitude$ through the following relation(4) $$m-m_r=-2.5\log_{10} \left( B \over B_r \right)$$ $m$ is defined as the magnitude of the object and $m_r$ is the pre-defined magnitude of the reference brightness. One particularly easy condition is when $B_r=1$. This will allow us to summarize all the hardware specific parameters discussed above into one number as the reference magnitude which is commonly known as the Zero-point(5) magnitude. ---------- Footnotes ---------- (1) Counts are also known as analog to digital units (ADU). (2) If further processing is done, for example the Kron or Petrosian radii are calculated, then the detected area is not sufficient and the total area that was within the respective radius must be used. (3) For a full object that spans over several pixels, the telescope area should be used to find the flux. However, sometimes, only the brightness per pixel is desired. In such cases this book also _loosely_ uses the term flux. This is only approximately accurate however, since while all the pixels have a fixed area, the pixel size can vary with camera on the telescope. (4) The $-2.5$ factor in the definition of magnitudes is a legacy of the our ancient colleagues and in particular Hipparchus of Nicaea (190-120 BC). (5) When $B=Br=1$, the right side of the magnitude definition will be zero. Hence the name, “zero-pointâ€.  File: gnuastro.info, Node: Profile magnitude, Next: Invoking astmkprof, Prev: Flux Brightness and magnitude, Up: MakeProfiles 8.1.4 Profile magnitude ----------------------- To find the profile brightness or its magnitude, (see *note Flux Brightness and magnitude::), it is customary to use the 2D integration of the flux to infinity. However, in MakeProfiles we do not follow this idealistic approach and apply a more realistic method to find the total brightness or magnitude: the sum of all the pixels belonging to a profile within its predefined truncation radius. Note that if the truncation radius is not large enough, this can be significantly different from the total integrated light to infinity. An integration to infinity is not a realistic condition because no galaxy extends indefinitely (important for high Sérsic index profiles), pixelation can also cause a significant difference between the actual total pixel sum value of the profile and that of integration to infinity, especially in small and high Sérsic index profiles. To be safe, you can specify a large enough truncation radius for such compact high Sérsic index profiles. If oversampling is used then the brightness is calculated using the over-sampled image, see *note Oversampling:: which is much more accurate. The profile is first built in an array completely bounding it with a normalization constant of unity (see *note Galaxies::). Taking $B$ to be the desired brightness and $S$ to be the sum of the pixels in the created profile, every pixel is then multiplied by $B/S$ so the sum is exactly $B$. If the ‘--individual’ option is called, this same array is written to a FITS file. If not, only the overlapping pixels of this array and the output image are kept and added to the output array.  File: gnuastro.info, Node: Invoking astmkprof, Prev: Profile magnitude, Up: MakeProfiles 8.1.5 Invoking MakeProfiles --------------------------- MakeProfiles will make any number of profiles specified in a catalog either individually or in one image. The executable name is ‘astmkprof’ with the following general template $ astmkprof [OPTION ...] [Catalog] One line examples: ## Make an image with profiles in catalog.txt (with default size): $ astmkprof catalog.txt ## Make the profiles in catalog.txt over image.fits: $ astmkprof --background=image.fits catalog.txt ## Make a Moffat PSF with FWHM 3pix, beta=2.8, truncation=5 $ astmkprof --kernel=moffat,2.8,5 --oversample=1 ## Make profiles in catalog, using RA and Dec in the given column: $ astmkprof --ccol=RA_CENTER --ccol=DEC_CENTER --mode=wcs catalog.txt ## Make a 1500x1500 merged image (oversampled 500x500) image along ## with an individual image for all the profiles in catalog: $ astmkprof --individual --oversample 3 --naxis=500,500 catalog.txt The parameters of the mock profiles can either be given through a catalog (which stores the parameters of many mock profiles, see *note MakeProfiles catalog::), or the ‘--kernel’ option (see *note MakeProfiles output dataset::). The catalog can be in the FITS ASCII, FITS binary format, or plain text formats (see *note Tables::). The columns related to each parameter can be determined both by number, or by match/search criteria using the column names, units, or comments. with the options ending in ‘col’, see below. Without any file given to the ‘--background’ option, MakeProfiles will make a zero-valued image and build the profiles on that (its size and main WCS parameters can also be defined through the options described in *note MakeProfiles output dataset::). Besides the main/merged image containing all the profiles in the catalog, it is also possible to build individual images for each profile (only enclosing one full profile to its truncation radius) with the ‘--individual’ option. If an image is given to the ‘--background’ option, the pixels of that image are used as the background value for every pixel. The flux value of each profile pixel will be added to the pixel in that background value. In this case, the values to all options relating to the output size and WCS will be ignored if specified (for example ‘--oversample’, ‘--naxis’, and ‘--prepforconv’) on the command-line or in the configuration files. The sections below discuss the options specific to MakeProfiles based on context: the input catalog settings which can have many rows for different profiles are discussed in *note MakeProfiles catalog::, in *note MakeProfiles profile settings::, we discuss how you can set general profile settings (that are the same for all the profiles in the catalog). Finally *note MakeProfiles output dataset:: and *note MakeProfiles log file:: discuss the outputs of MakeProfiles and how you can configure them. Besides these, MakeProfiles also supports all the common Gnuastro program options that are discussed in *note Common options::, so please flip through them is well for a more comfortable usage. Please see *note Sufi simulates a detection:: for a very complete tutorial explaining how one could use MakeProfiles in conjunction with other Gnuastro’s programs to make a complete simulated image of a mock galaxy. * Menu: * MakeProfiles catalog:: Required catalog properties. * MakeProfiles profile settings:: Configuration parameters for all profiles. * MakeProfiles output dataset:: The canvas/dataset to build profiles over. * MakeProfiles log file:: A description of the optional log file.  File: gnuastro.info, Node: MakeProfiles catalog, Next: MakeProfiles profile settings, Prev: Invoking astmkprof, Up: Invoking astmkprof 8.1.5.1 MakeProfiles catalog ............................ The catalog containing information about each profile can be in the FITS ASCII, FITS binary, or plain text formats (see *note Tables::). Its columns can be ordered in any desired manner. You can specify which columns belong to which parameters using the set of options discussed below. For example through the ‘--rcol’ and ‘--tcol’ options, you can specify the column that contains the radial parameter for each profile and its truncation respectively. See *note Selecting table columns:: for a thorough discussion on the values to these options. The value for the profile center in the catalog (the ‘--ccol’ option) can be a floating point number so the profile center can be on any sub-pixel position. Note that pixel positions in the FITS standard start from 1 and an integer is the pixel center. So a 2D image actually starts from the position (0.5, 0.5), which is the bottom-left corner of the first pixel. When a ‘--background’ image with WCS information is provided or you specify the WCS parameters with the respective options, you may also use RA and Dec to identify the center of each profile (see the ‘--mode’ option below). In MakeProfiles, profile centers do not have to be in (overlap with) the final image. Even if only one pixel of the profile within the truncation radius overlaps with the final image size, the profile is built and included in the final image image. Profiles that are completely out of the image will not be created (unless you explicity ask for it with the ‘--individual’ option). You can use the output log file (created with ‘--log’ to see which profiles were within the image, see *note Common options::. If PSF profiles (Moffat or Gaussian, see *note PSF::) are in the catalog and the profiles are to be built in one image (when ‘--individual’ is not used), it is assumed they are the PSF(s) you want to convolve your created image with. So by default, they will not be built in the output image but as separate files. The sum of pixels of these separate files will also be set to unity (1) so you are ready to convolve, see *note Convolution process::. As a summary, the position and magnitude of PSF profile will be ignored. This behavior can be disabled with the ‘--psfinimg’ option. If you want to create all the profiles separately (with ‘--individual’) and you want the sum of the PSF profile pixels to be unity, you have to set their magnitudes in the catalog to the zero-point magnitude and be sure that the central positions of the profiles don’t have any fractional part (the PSF center has to be in the center of the pixel). The list of options directly related to the input catalog columns is shown below. ‘--ccol=STR/INT’ Center coordinate column for each dimension. This option must be called two times to define the center coordinates in an image. For example ‘--ccol=RA’ and ‘--ccol=DEC’ (along with ‘--mode=wcs’) will inform MakeProfiles to look into the catalog columns named ‘RA’ and ‘DEC’ for the Right Ascension and Declination of the profile centers. ‘--fcol=INT/STR’ The functional form of the profile with one of the values below depending on the desired profile. The column can contain either the numeric codes (for example ‘‘1’’) or string characters (for example ‘‘sersic’’). The numeric codes are easier to use in scripts which generate catalogs with hundreds or thousands of profiles. The string format can be easier when the catalog is to be written/checked by hand/eye before running MakeProfiles. It is much more readable and provides a level of documentation. All Gnuastro’s recognized table formats (see *note Recognized table formats::) accept string type columns. To have string columns in a plain text table/catalog, see *note Gnuastro text table format::. • Sérsic profile with ‘‘sersic’’ or ‘‘1’’. • Moffat profile with ‘‘moffat’’ or ‘‘2’’. • Gaussian profile with ‘‘gaussian’’ or ‘‘3’’. • Point source with ‘‘point’’ or ‘‘4’’. • Flat profile with ‘‘flat’’ or ‘‘5’’. • Circumference profile with ‘‘circum’’ or ‘‘6’’. A fixed value will be used for all pixels between the truncation radius ($r_t$) and $r_t-w$ ($w$ is the value to the ‘--circumwidth’). • Radial distance profile with ‘‘distance’’ or ‘‘7’’. At the lowest level, each pixel only has an elliptical radial distance given the profile’s shape and orentiation (see *note Defining an ellipse::). When this profile is chosen, the pixel’s elliptical radial distance from the profile center is written as its value. For this profile, the value in the magnitude column (‘--mcol’) will be ignored. You can use this for checks or as a first approximation to define your own higher-level radial function. In the latter case, just note that the central values are going to be incorrect (see *note Sampling from a function::). ‘--rcol=STR/INT’ The radius parameter of the profiles. Effective radius ($r_e$) if Sérsic, FWHM if Moffat or Gaussian. ‘--ncol=STR/INT’ The Sérsic index ($n$) or Moffat $\beta$. ‘--pcol=STR/INT’ The position angle (in degrees) of the profiles relative to the first FITS axis (horizontal when viewed in SAO ds9). ‘--qcol=STR/INT’ The axis ratio of the profiles (minor axis divided by the major axis in a 2D ellipse). ‘--mcol=STR/INT’ The total pixelated magnitude of the profile within the truncation radius, see *note Profile magnitude::. ‘--tcol=STR/INT’ The truncation radius of this profile. By default it is in units of the radial parameter of the profile (the value in the ‘--rcol’ of the catalog). If ‘--tunitinp’ is given, this value is interpreted in units of pixels (prior to oversampling) irrespective of the profile.  File: gnuastro.info, Node: MakeProfiles profile settings, Next: MakeProfiles output dataset, Prev: MakeProfiles catalog, Up: Invoking astmkprof 8.1.5.2 MakeProfiles profile settings ..................................... The profile parameters that differ between each created profile are specified through the columns in the input catalog and described in *note MakeProfiles catalog::. Besides those there are general settings for some profiles that don’t differ between one profile and another, they are a property of the general process. For example how many random points to use in the monte-carlo integration, this value is fixed for all the profiles. The options described in this section are for configuring such properties. ‘--mode=STR’ Interpret the center position columns (‘--ccol’ in *note MakeProfiles catalog::) in image or WCS coordinates. This option thus accepts only two values: ‘img’ and ‘wcs’. It is mandatory when a catalog is being used as input. ‘-r’ ‘--numrandom’ The number of random points used in the central regions of the profile, see *note Sampling from a function::. ‘-e’ ‘--envseed’ Use the value to the ‘GSL_RNG_SEED’ environment variable to generate the random Monte Carlo sampling distribution, see *note Sampling from a function:: and *note Generating random numbers::. ‘-t FLT’ ‘--tolerance=FLT’ The tolerance to switch from Monte Carlo integration to the central pixel value, see *note Sampling from a function::. ‘-p’ ‘--tunitinp’ The truncation column of the catalog is in units of pixels. By default, the truncation column is considered to be in units of the radial parameters of the profile (‘--rcol’). Read it as ‘t-unit-in-p’ for ‘truncation unit in pixels’. ‘-f’ ‘--mforflatpix’ When making fixed value profiles (flat and circumference, see ‘‘--fcol’’), don’t use the value in the column specified by ‘‘--mcol’’ as the magnitude. Instead use it as the exact value that all the pixels of these profiles should have. This option is irrelevant for other types of profiles. This option is very useful for creating masks, or labeled regions in an image. Any integer, or floating point value can used in this column with this option, including ‘NaN’ (or ‘‘nan’’, or ‘‘NAN’’, case is irrelevant), and infinities (‘inf’, ‘-inf’, or ‘+inf’). For example, with this option if you set the value in the magnitude column (‘--mcol’) to ‘NaN’, you can create an elliptical or circular mask over an image (which can be given as the argument), see *note Blank pixels::. Another useful application of this option is to create labeled elliptical or circular apertures in an image. To do this, set the value in the magnitude column to the label you want for this profile. This labeled image can then be used in combination with NoiseChisel’s output (see *note NoiseChisel output::) to do aperture photometry with MakeCatalog (see *note MakeCatalog::). Alternatively, if you want to mark regions of the image (for example with an elliptical circumference) and you don’t want to use NaN values (as explained above) for some technical reason, you can get the minimum or maximum value in the image (1) using Arithmetic (see *note Arithmetic::), then use that value in the magnitude column along with this option for all the profiles. Please note that when using MakeProfiles on an already existing image, you have to set ‘‘--oversample=1’’. Otherwise all the profiles will be scaled up based on the oversampling scale in your configuration files (see *note Configuration files::) unless you have accounted for oversampling in your catalog. ‘--mcolisbrightness’ The value given in the “magnitude column†(specified by ‘--mcol’, see *note MakeProfiles catalog::) must be interpretted as brightness, not magnitude. The zeropoint magnitude (value to the ‘--zeropoint’ option) is ignored and the given value must have the same units as the input dataset’s pixels. Recall that the total profile magnitude or brightness that is specified with in the ‘--mcol’ column of the input catalog is not an integration to infinity, but the actual sum of pixels in the profile (until the desired truncation radius). See *note Profile magnitude:: for more on this point. ‘--magatpeak’ The magnitude column in the catalog (see *note MakeProfiles catalog::) will be used to find the brightness only for the peak profile pixel, not the full profile. Note that this is the flux of the profile’s peak pixel in the final output of MakeProfiles. So beware of the oversampling, see *note Oversampling::. This option can be useful if you want to check a mock profile’s total magnitude at various truncation radii. Without this option, no matter what the truncation radius is, the total magnitude will be the same as that given in the catalog. But with this option, the total magnitude will become brighter as you increase the truncation radius. In sharper profiles, sometimes the accuracy of measuring the peak profile flux is more than the overall object brightness. In such cases, with this option, the final profile will be built such that its peak has the given magnitude, not the total profile. *CAUTION:* If you want to use this option for comparing with observations, please note that MakeProfiles does not do convolution. Unless you have de-convolved your data, your images are convolved with the instrument and atmospheric PSF, see *note PSF::. Particularly in sharper profiles, the flux in the peak pixel is strongly decreased after convolution. Also note that in such cases, besides de-convolution, you will have to set ‘--oversample=1’ otherwise after resampling your profile with Warp (see *note Warp::), the peak flux will be different. ‘-X INT,INT’ ‘--shift=INT,INT’ Shift all the profiles and enlarge the image along each dimension. To better understand this option, please see $n$ in *note If convolving afterwards::. This is useful when you want to convolve the image afterwards. If you are using an external PSF, be sure to oversample it to the same scale used for creating the mock images. If a background image is specified, any possible value to this option is ignored. ‘-c’ ‘--prepforconv’ Shift all the profiles and enlarge the image based on half the width of the first Moffat or Gaussian profile in the catalog, considering any possible oversampling see *note If convolving afterwards::. ‘--prepforconv’ is only checked and possibly activated if ‘--xshift’ and ‘--yshift’ are both zero (after reading the command-line and configuration files). If a background image is specified, any possible value to this option is ignored. ‘-z FLT’ ‘--zeropoint=FLT’ The zero-point magnitude of the image. ‘-w FLT’ ‘--circumwidth=FLT’ The width of the circumference if the profile is to be an elliptical circumference or annulus. See the explanations for this type of profile in ‘--fcol’. ‘-R’ ‘--replace’ Do not add the pixels of each profile over the background (possibly crowded by other profiles), replace them. By default, when two profiles overlap, the final pixel value is the sum of all the profiles that overlap on that pixel. When this option is given, the pixels are not added but replaced by the newer profile’s pixel and any value under it is lost. When order matters, make sure to use this function with ‘‘--numthreads=1’’. When multiple threads are used, the separate profiles are built asynchronously and not in order. Since order does not matter in an addition, this causes no problems by default but has to be considered when this option is given. Using multiple threads is no problem if the profiles are to be used as a mask with a blank or fixed value (see ‘‘--mforflatpix’’) since all their pixel values are the same. Note that only non-zero pixels are replaced. With radial profiles (for example Sérsic or Moffat) only values above zero will be part of the profile. However, when using flat profiles with the ‘‘--mforflatpix’’ option, you should be careful not to give a ‘0.0’ value as the flat profile’s pixel value. ---------- Footnotes ---------- (1) The minimum will give a better result, because the maximum can be too high compared to most pixels in the image, making it harder to display.  File: gnuastro.info, Node: MakeProfiles output dataset, Next: MakeProfiles log file, Prev: MakeProfiles profile settings, Up: Invoking astmkprof 8.1.5.3 MakeProfiles output dataset ................................... MakeProfiles takes an input catalog uses basic properties that are defined there to build a dataset, for example a 2D image containing the profiles in the catalog. In *note MakeProfiles catalog:: and *note MakeProfiles profile settings::, the catalog and profile settings were discussed. The options of this section, allow you to configure the output dataset (or the canvas that will host the built profiles). ‘-k STR’ ‘--background=STR’ A background image FITS file to build the profiles on. The extension that contains the image should be specified with the ‘--backhdu’ option, see below. When a background image is specified, it will be used to derive all the information about the output image. Hence, the following options will be ignored: ‘--naxis’, ‘--oversample’, ‘--crpix’, ‘--crval’ (generally, all other WCS related parameters) and the output’s data type (see ‘--type’ in *note Input output options::). The image will act like a canvas to build the profiles on: profile pixel values will be summed with the background image pixel values. With the ‘--replace’ option you can disable this behavior and replace the profile pixels with the background pixels. If you want to use all the image information above, except for the pixel values (you want to have a blank canvas to build the profiles on, based on an input image), you can call ‘--clearcanvas’, to set all the input image’s pixels to zero before starting to build the profiles over it (this is done in memory after reading the input, so nothing will happen to your input file). ‘-B STR/INT’ ‘--backhdu=STR/INT’ The header data unit (HDU) of the file given to ‘--background’. ‘-C’ ‘--clearcanvas’ When an input image is specified (with the ‘--background’ option, set all its pixels to 0.0 immediately after reading it into memory. Effectively, this will allow you to use all its properties (described under the ‘--background’ option), without having to worry about the pixel values. ‘--clearcanvas’ can come in handy in many situations, for example if you want to create a labeled image (segmentation map) for creating a catalog (see *note MakeCatalog::). In other cases, you might have modeled the objects in an image and want to create them on the same frame, but without the original pixel values. ‘-E STR/INT,FLT[,FLT,[...]]’ ‘--kernel=STR/INT,FLT[,FLT,[...]]’ Only build one kernel profile with the parameters given as the values to this option. The different values must be separated by a comma (<,>). The first value identifies the radial function of the profile, either through a string or through a number (see description of ‘--fcol’ in *note MakeProfiles catalog::). Each radial profile needs a different total number of parameters: Sérsic and Moffat functions need 3 parameters: radial, Sérsic index or Moffat $\beta$, and truncation radius. The Gaussian function needs two parameters: radial and truncation radius. The point function doesn’t need any parameters and flat and circumference profiles just need one parameter (truncation radius). The PSF or kernel is a unique (and highly constrained) type of profile: the sum of its pixels must be one, its center must be the center of the central pixel (in an image with an odd number of pixels on each side), and commonly it is circular, so its axis ratio and position angle are one and zero respectively. Kernels are commonly necessary for various data analysis and data manipulation steps (for example see *note Convolve::, and *note NoiseChisel::. Because of this it is inconvenient to define a catalog with one row and many zero valued columns (for all the non-necessary parameters). Hence, with this option, it is possible to create a kernel with MakeProfiles without the need to create a catalog. Here are some examples: ‘--kernel=moffat,3,2.8,5’ A Moffat kernel with FWHM of 3 pixels, $\beta=2.8$ which is truncated at 5 times the FWHM. ‘--kernel=gaussian,2,3’ A Gaussian kernel with FWHM of 2 pixels and truncated at 3 times the FWHM. ‘-x INT,INT’ ‘--naxis=INT,INT’ The number of pixels along each dimension axis of the output in FITS order. This is before over-sampling. For example if you call MakeProfiles with ‘--naxis=100,150 --oversample=5’ (assuming no shift due for later convolution), then the final image size along the first axis will be 500 by 750 pixels. Fractions are acceptable as values for each dimension, however, they must reduce to an integer, so ‘--naxis=150/3,300/3’ is acceptable but ‘--naxis=150/4,300/4’ is not. When viewing a FITS image in DS9, the first FITS dimension is in the horizontal direction and the second is vertical. As an example, the image created with the example above will have 500 pixels horizontally and 750 pixels vertically. If a background image is specified, this option is ignored. ‘-s INT’ ‘--oversample=INT’ The scale to over-sample the profiles and final image. If not an odd number, will be added by one, see *note Oversampling::. Note that this ‘--oversample’ will remain active even if an input image is specified. If your input catalog is based on the background image, be sure to set ‘--oversample=1’. ‘--psfinimg’ Build the possibly existing PSF profiles (Moffat or Gaussian) in the catalog into the final image. By default they are built separately so you can convolve your images with them, thus their magnitude and positions are ignored. With this option, they will be built in the final image like every other galaxy profile. To have a final PSF in your image, make a point profile where you want the PSF and after convolution it will be the PSF. ‘-i’ ‘--individual’ If this option is called, each profile is created in a separate FITS file within the same directory as the output and the row number of the profile (starting from zero) in the name. The file for each row’s profile will be in the same directory as the final combined image of all the profiles and will have the final image’s name as a suffix. So for example if the final combined image is named ‘./out/fromcatalog.fits’, then the first profile that will be created with this option will be named ‘./out/0_fromcatalog.fits’. Since each image only has one full profile out to the truncation radius the profile is centered and so, only the sub-pixel position of the profile center is important for the outputs of this option. The output will have an odd number of pixels. If there is no oversampling, the central pixel will contain the profile center. If the value to ‘--oversample’ is larger than unity, then the profile center is on any of the central ‘--oversample’’d pixels depending on the fractional value of the profile center. If the fractional value is larger than half, it is on the bottom half of the central region. This is due to the FITS definition of a real number position: The center of a pixel has fractional value $0.00$ so each pixel contains these fractions: .5 – .75 – .00 (pixel center) – .25 – .5. ‘-m’ ‘--nomerged’ Don’t make a merged image. By default after making the profiles, they are added to a final image with side lengths specified by ‘--naxis’if they overlap with it. The options below can be used to define the world coordinate system (WCS) properties of the MakeProfiles outputs. The option names are delibarately chosen to be the same as the FITS standard WCS keywords. See Section 8 of Pence et al [2010] (https://doi.org/10.1051/0004-6361/201015362) for a short introduction to WCS in the FITS standard(1). If you look into the headers of a FITS image with WCS for example you will see all these names but in uppercase and with numbers to represent the dimensions, for example ‘CRPIX1’ and ‘PC2_1’. You can see the FITS headers with Gnuastro’s *note Fits:: program using a command like this: ‘$ astfits -p image.fits’. If the values given to any of these options does not correspond to the number of dimensions in the output dataset, then no WCS information will be added. ‘--crpix=FLT,FLT’ The pixel coordinates of the WCS reference point. Fractions are acceptable for the values of this option. ‘--crval=FLT,FLT’ The WCS coordinates of the Reference point. Fractions are acceptable for the values of this option. ‘--cdelt=FLT,FLT’ The resolution (size of one data-unit or pixel in WCS units) of the non-oversampled dataset. Fractions are acceptable for the values of this option. ‘--pc=FLT,FLT,FLT,FLT’ The PC matrix of the WCS rotation, see the FITS standard (link above) to better understand the PC matrix. ‘--cunit=STR,STR’ The units of each WCS axis, for example ‘deg’. Note that these values are part of the FITS standard (link above). MakeProfiles won’t complain if you use non-standard values, but later usage of them might cause trouble. ‘--ctype=STR,STR’ The type of each WCS axis, for example ‘RA---TAN’ and ‘DEC--TAN’. Note that these values are part of the FITS standard (link above). MakeProfiles won’t complain if you use non-standard values, but later usage of them might cause trouble. ---------- Footnotes ---------- (1) The world coordinate standard in FITS is a very beatiful and powerful concept to link/associate datasets with the outside world (other datasets). The description in the FITS standard (link above) only touches the tip of the ice-burg. To learn more please see Greisen and Calabretta [2002] (https://doi.org/10.1051/0004-6361:20021326), Calabretta and Greisen [2002] (https://doi.org/10.1051/0004-6361:20021327), Greisen et al. [2006] (https://doi.org/10.1051/0004-6361:20053818), and Calabretta et al. (http://www.atnf.csiro.au/people/mcalabre/WCS/dcs_20040422.pdf)  File: gnuastro.info, Node: MakeProfiles log file, Prev: MakeProfiles output dataset, Up: Invoking astmkprof 8.1.5.4 MakeProfiles log file ............................. Besides the final merged dataset of all the profiles, or the individual datasets (see *note MakeProfiles output dataset::), if the ‘--log’ option is called MakeProfiles will also create a log file in the current directory (where you run MockProfiles). See *note Common options:: for a full description of ‘--log’ and other options that are shared between all Gnuastro programs. The values for each column are explained in the first few commented lines of the log file (starting with ‘#’ character). Here is a more complete description. • An ID (row number of profile in input catalog). • The total magnitude of the profile in the output dataset. When the profile does not completely overlap with the output dataset, this will be different from your input magnitude. • The number of pixels (in the oversampled image) which used Monte Carlo integration and not the central pixel value, see *note Sampling from a function::. • The fraction of flux in the Monte Carlo integrated pixels. • If an individual image was created, this column will have a value of ‘1’, otherwise it will have a value of ‘0’.  File: gnuastro.info, Node: MakeNoise, Prev: MakeProfiles, Up: Modeling and fittings 8.2 MakeNoise ============= Real data are always buried in noise, therefore to finalize a simulation of real data (for example to test our observational algorithms) it is essential to add noise to the mock profiles created with MakeProfiles, see *note MakeProfiles::. Below, the general principles and concepts to help understand how noise is quantified is discussed. MakeNoise options and argument are then discussed in *note Invoking astmknoise::. * Menu: * Noise basics:: Noise concepts and definitions. * Invoking astmknoise:: Options and arguments to MakeNoise.  File: gnuastro.info, Node: Noise basics, Next: Invoking astmknoise, Prev: MakeNoise, Up: MakeNoise 8.2.1 Noise basics ------------------ Deep astronomical images, like those used in extragalactic studies seriously suffer from noise in the data. Generally speaking, the sources of noise in an astronomical image are photon counting noise and Instrumental noise which are discussed in detail below. We finish with a short introduction on how random numbers are generated and how you can determine the random number generator and seed value. * Menu: * Photon counting noise:: Poisson noise * Instrumental noise:: Readout, dark current and other sources. * Final noised pixel value:: How the final noised value is calculated. * Generating random numbers:: How random numbers are generated.  File: gnuastro.info, Node: Photon counting noise, Next: Instrumental noise, Prev: Noise basics, Up: Noise basics 8.2.1.1 Photon counting noise ............................. Thanks to the very accurate electronics used in today’s detectors, this type of noise is the main cause of concern for extra galactic studies. It can generally be associate with the counting error that is known to have a Poisson distribution. The Poisson distribution is about counting. But counting is a discrete operation with only positive values, for example we can’t count $3.2$ or $-2$ of anything. We only count $0$, $1$, $2$, $3$ and so on. Therefore the Poisson distribution is also a discrete distribution, only applying to whole positive integers. Let’s assume the mean value of counting something is known. In this case, we are counting the number of electrons that are produced by photons in a detector (for example CCD) pixel. Let’s call this mean $\lambda$. Furthermore, let’s take $k$ to represent the result of one particular counting attempt. The probability density function of $k$ can be written as: $$f(k)={\lambda^k \over k!} e^{-\lambda},\quad k\in {0, 1, 2, 3, \dots }$$ Because the Poisson distribution is only applicable to positive values, naturally it is very skewed when $\lambda$ is near zero. One qualitative way to explain it is that there simply aren’t enough integers smaller than $\lambda$, than integers that are larger than it. Therefore to accommodate all possibilities, it has to be skewed when $\lambda$ is small. But as $\lambda$ becomes larger and larger, the distribution becomes more and more symmetric. One very useful property of the Poisson distribution is that the mean value is also its variance. When $\lambda$ is very large, say $\lambda>1000$, then the normal (Gaussian) distribution, see *note PSF::, is an excellent approximation of the Poisson distribution with mean $\mu=\lambda$ and standard deviation $\sigma=\sqrt{\lambda}$. We see that the variance or dispersion of the distribution depends on the mean value, and when it is large it can be approximated with a Gaussian that only has one free parameter ($\mu=\lambda$ and $\sigma=\sqrt{\lambda}$) instead of two that it originally has. The astronomical objects after convolution with the PSF of the instrument, lie above a certain background flux. This background flux is defined to be the average flux of a region in the image that has absolutely no objects. The physical origin of this background value is the brightness of the atmosphere or possible stray light within the imaging instrument. It is thus an ideal definition, because in practice, what lies deep in the noise far lower than the detection limit is never known(1). However, in a real image, a relatively large number of very faint objects can been fully buried in the noise. These undetected objects will bias the background measurement to slightly larger values. The sky value is therefore defined to be the average of the undetected regions in the image, so in an ideal case where all the objects have been detected, the sky value and background value are the same. As longer wavelengths are used, the background value becomes more significant and also varies over a wide image field. Such variations are not currently implemented in MakeProfiles, but will be in the future. In a mock image, we have the luxury of setting the background value. In each pixel of the canvas of pixels, the flux is the sum of contributions from various sources after convolution. Let’s name this flux of the convolved sum of possibly overlapping objects, $I_{nn}$. $nn$ representing ‘no noise’. For now, let’s assume the background is constant and represented by $B$. In practice the background values are larger than $\sim1,000$ counts. Then the flux after adding noise is a random value taken from a Gaussian distribution with the following mean ($\mu$) and standard deviation ($\sigma$): $$\mu=B+I_{nn}, \quad \sigma=\sqrt{B+I_{nn}}$$ Since this type of noise is inherent in the objects we study, it is usually measured on the same scale as the astronomical objects, namely the magnitude system, see *note Flux Brightness and magnitude::. It is then internally converted to the flux scale for further processing. ---------- Footnotes ---------- (1) See the section on sky in Akhlaghi M., Ichikawa. T. 2015. Astrophysical Journal Supplement Series.  File: gnuastro.info, Node: Instrumental noise, Next: Final noised pixel value, Prev: Photon counting noise, Up: Noise basics 8.2.1.2 Instrumental noise .......................... While taking images with a camera, a dark current is fed to the pixels, the variation of the value of this dark current over the pixels, also adds to the final image noise. Another source of noise is the readout noise that is produced by the electronics in the CCD that attempt to digitize the voltage produced by the photo-electrons in the analog to digital converter. In deep extra-galactic studies these sources of noise are not as significant as the noise of the background sky. Let $C$ represent the combined standard deviation of all these sources of noise. If only this source of noise is present, the noised pixel value would be a random value chosen from a Gaussian distribution with $$\mu=I_{nn}, \quad \sigma=\sqrt{C^2+I_{nn}}$$ This type of noise is completely independent of the type of objects being studied, it is completely determined by the instrument. So the flux scale (and not magnitude scale) is most commonly used for this type of noise. In practice, this value is usually reported in ADUs not flux or electron counts. The gain value of the device can be used to convert between these two, see *note Flux Brightness and magnitude::.  File: gnuastro.info, Node: Final noised pixel value, Next: Generating random numbers, Prev: Instrumental noise, Up: Noise basics 8.2.1.3 Final noised pixel value ................................ Depending on the values you specify for $B$ and $C$ from the above, the final noised value for each pixel is a random value chosen from a Gaussian distribution with $$\mu=B+I_{nn}, \quad \sigma=\sqrt{C^2+B+I_{nn}}$$  File: gnuastro.info, Node: Generating random numbers, Prev: Final noised pixel value, Up: Noise basics 8.2.1.4 Generating random numbers ................................. As discussed above, to generate noise we need to make random samples of a particular distribution. So it is important to understand some general concepts regarding the generation of random numbers. For a very complete and nice introduction we strongly advise reading Donald Knuth’s “The art of computer programmingâ€, volume 2, chapter 3(1). Quoting from the GNU Scientific Library manual, “If you don’t own it, you should stop reading right now, run to the nearest bookstore, and buy itâ€(2)! Using only software, we can only produce what is called a psudo-random sequence of numbers. A true random number generator is a hardware (let’s assume we have made sure it has no systematic biases), for example throwing dice or flipping coins (which have remained from the ancient times). More modern hardware methods use atmospheric noise, thermal noise or other types of external electromagnetic or quantum phenomena. All psudo-random number generators (software) require a seed to be the basis of the generation. The advantage of having a seed is that if you specify the same seed for multiple runs, you will get an identical sequence of random numbers which allows you to reproduce the same final noised image. The programs in GNU Astronomy Utilities (for example MakeNoise or MakeProfiles) use the GNU Scientific Library (GSL) to generate random numbers. GSL allows the user to set the random number generator through environment variables, see *note Installation directory:: for an introduction to environment variables. In the chapter titled “Random Number Generation†they have fully explained the various random number generators that are available (there are a lot of them!). Through the two environment variables ‘GSL_RNG_TYPE’ and ‘GSL_RNG_SEED’ you can specify the generator and its seed respectively. If you don’t specify a value for ‘GSL_RNG_TYPE’, GSL will use its default random number generator type. The default type is sufficient for most general applications. If no value is given for the ‘GSL_RNG_SEED’ environment variable and you have asked Gnuastro to read the seed from the environment (through the ‘--envseed’ option), then GSL will use the default value of each generator to give identical outputs. If you don’t explicitly tell Gnuastro programs to read the seed value from the environment variable, then they will use the system time (accurate to within a microsecond) to generate (apparently random) seeds. In this manner, every time you run the program, you will get a different random number distribution. There are two ways you can specify values for these environment variables. You can call them on the same command-line for example: $ GSL_RNG_TYPE="taus" GSL_RNG_SEED=345 astmknoise input.fits In this manner the values will only be used for this particular execution of MakeNoise. Alternatively, you can define them for the full period of your terminal session or script length, using the shell’s ‘export’ command with the two separate commands below (for a script remove the ‘$’ signs): $ export GSL_RNG_TYPE="taus" $ export GSL_RNG_SEED=345 The subsequent programs which use GSL’s random number generators will hence forth use these values in this session of the terminal you are running or while executing this script. In case you want to set fixed values for these parameters every time you use the GSL random number generator, you can add these two lines to your ‘.bashrc’ startup script(3), see *note Installation directory::. *NOTE:* If the two environment variables ‘GSL_RNG_TYPE’ and ‘GSL_RNG_SEED’ are defined, GSL will report them by default, even if you don’t use the ‘--envseed’ option. For example you can see the top few lines of the output of MakeProfiles: $ export GSL_RNG_TYPE="taus" $ export GSL_RNG_SEED=345 $ astmkprof catalog.txt --envseed GSL_RNG_TYPE=taus GSL_RNG_SEED=345 MakeProfiles started on AAA BBB DD EE:FF:GG HHH - 6 profiles read from catalog.txt 0.000236 seconds - Random number generator (RNG) type: taus - RNG seed for all profiles: 345 The first two output lines (showing the names of the environment variables) are printed by GSL before MakeProfiles actually starts generating random numbers. The Gnuastro programs will report the values they use independently, you should check them for the final values used. For example if ‘--envseed’ is not given, ‘GSL_RNG_SEED’ will not be used and the last line shown above will not be printed. In the case of MakeProfiles, each profile will get its own seed value. ---------- Footnotes ---------- (1) Knuth, Donald. 1998. The art of computer programming. Addison–Wesley. ISBN 0-201-89684-2 (2) For students, running to the library might be more affordable! (3) Don’t forget that if you are going to give your scripts (that use the GSL random number generator) to others you have to make sure you also tell them to set these environment variable separately. So for scripts, it is best to keep all such variable definitions within the script, even if they are within your ‘.bashrc’.  File: gnuastro.info, Node: Invoking astmknoise, Prev: Noise basics, Up: MakeNoise 8.2.2 Invoking MakeNoise ------------------------ MakeNoise will add noise to an existing image. The executable name is ‘astmknoise’ with the following general template $ astmknoise [OPTION ...] InputImage.fits One line examples: ## Add noise with a standard deviation of 100 to image: $ astmknoise --sigma=100 image.fits ## Add noise to input image assuming a background magnitude (with ## zeropoint magnitude of 0) and a certain instrumental noise: $ astmknoise --background=-10 -z0 --instrumental=20 mockimage.fits If actual processing is to be done, the input image is a mandatory argument. The full list of options common to all the programs in Gnuastro can be seen in *note Common options::. The type (see *note Numeric data types::) of the output can be specified with the ‘--type’ option, see *note Input output options::. The header of the output FITS file keeps all the parameters that were influential in making it. This is done for future reproducibility. ‘-s FLT’ ‘--sigma=FLT’ The total noise sigma in the same units as the pixel values. With this option, the ‘--background’, ‘--zeropoint’ and ‘--instrumental’ will be ignored. With this option, the noise will be independent of the pixel values (which is not realistic, see *note Photon counting noise::). Hence it is only useful if you are working on low surface brightness regions where the change in pixel value (and thus real noise) is insignificant. ‘-b FLT’ ‘--background=FLT’ The background pixel value for the image in units of magnitudes, see *note Photon counting noise:: and *note Flux Brightness and magnitude::. ‘-z FLT’ ‘--zeropoint=FLT’ The zeropoint magnitude used to convert the value of ‘--background’ (in units of magnitude) to flux, see *note Flux Brightness and magnitude::. ‘-i FLT’ ‘--instrumental=FLT’ The instrumental noise which is in units of flux, see *note Instrumental noise::. ‘-e’ ‘--envseed’ Use the ‘GSL_RNG_SEED’ environment variable for the seed used in the random number generator, see *note Generating random numbers::. With this option, the output image noise is always going to be identical (or reproducible). ‘-d’ ‘--doubletype’ Save the output in the double precision floating point format that was used internally. This option will be most useful if the input images were of integer types.  File: gnuastro.info, Node: High-level calculations, Next: Library, Prev: Modeling and fittings, Up: Top 9 High-level calculations ************************* After the reduction of raw data (for example with the programs in *note Data manipulation::) you will have reduced images/data ready for processing/analyzing (for example with the programs in *note Data analysis::). But the processed/analyzed data (or catalogs) are still not enough to derive any scientific result. Even higher-level analysis is still needed to convert the observed magnitudes, sizes or volumes into physical quantities that we associate with each catalog entry or detected object which is the purpose of the tools in this section. * Menu: * CosmicCalculator:: Calculate cosmological variables  File: gnuastro.info, Node: CosmicCalculator, Prev: High-level calculations, Up: High-level calculations 9.1 CosmicCalculator ==================== To derive higher-level information regarding our sources in extra-galactic astronomy, cosmological calculations are necessary. In Gnuastro, CosmicCalculator is in charge of such calculations. Before discussing how CosmicCalculator is called and operates (in *note Invoking astcosmiccal::), it is important to provide a rough but mostly self sufficient review of the basics and the equations used in the analysis. In *note Distance on a 2D curved space:: the basic idea of understanding distances in a curved and expanding 2D universe (which we can visualize) are reviewed. Having solidified the concepts there, in *note Extending distance concepts to 3D::, the formalism is extended to the 3D universe we are trying to study in our research. The focus here is obtaining a physical insight into these equations (mainly for the use in real observational studies). There are many books thoroughly deriving and proving all the equations with all possible initial conditions and assumptions for any abstract universe, interested readers can study those books. * Menu: * Distance on a 2D curved space:: Distances in 2D for simplicity * Extending distance concepts to 3D:: Going to 3D (our real universe). * Invoking astcosmiccal:: How to run CosmicCalculator  File: gnuastro.info, Node: Distance on a 2D curved space, Next: Extending distance concepts to 3D, Prev: CosmicCalculator, Up: CosmicCalculator 9.1.1 Distance on a 2D curved space ----------------------------------- The observations to date (for example the Planck 2015 results), have not measured(1) the presence of significant curvature in the universe. However to be generic (and allow its measurement if it does in fact exist), it is very important to create a framework that allows non-zero uniform curvature. However, this section is not intended to be a fully thorough and mathematically complete derivation of these concepts. There are many references available for such reviews that go deep into the abstract mathematical proofs. The emphasis here is on visualization of the concepts for a beginner. As 3D beings, it is difficult for us to mentally create (visualize) a picture of the curvature of a 3D volume. Hence, here we will assume a 2D surface/space and discuss distances on that 2D surface when it is flat and when it is curved. Once the concepts have been created/visualized here, we will extend them, in *note Extending distance concepts to 3D::, to a real 3D spatial _slice_ of the Universe we live in and hope to study. To be more understandable (actively discuss from an observer’s point of view) let’s assume there’s an imaginary 2D creature living on the 2D space (which _might_ be curved in 3D). Here, we will be working with this creature in its efforts to analyze distances in its 2D universe. The start of the analysis might seem too mundane, but since it is difficult to imagine a 3D curved space, it is important to review all the very basic concepts thoroughly for an easy transition to a universe that is more difficult to visualize (a curved 3D space embedded in 4D). To start, let’s assume a static (not expanding or shrinking), flat 2D surface similar to *note Figure 9.1: flatplane. and that the 2D creature is observing its universe from point $A$. One of the most basic ways to parametrize this space is through the Cartesian coordinates ($x$, $y$). In *note Figure 9.1: flatplane, the basic axes of these two coordinates are plotted. An infinitesimal change in the direction of each axis is written as $dx$ and $dy$. For each point, the infinitesimal changes are parallel with the respective axes and are not shown for clarity. Another very useful way of parameterizing this space is through polar coordinates. For each point, we define a radius ($r$) and angle ($\phi$) from a fixed (but arbitrary) reference axis. In *note Figure 9.1: flatplane. the infinitesimal changes for each polar coordinate are plotted for a random point and a dashed circle is shown for all points with the same radius. [image src="gnuastro-figures/flatplane.png" text="../gnuastro-figures//flatplane.eps"] Figure 9.1: Two dimensional Cartesian and polar coordinates on a flat plane. Assuming an object is placed at a certain position, which can be parameterized as $(x,y)$, or $(r,\phi)$, a general infinitesimal change in its position will place it in the coordinates $(x+dx,y+dy)$ and $(r+dr,\phi+d\phi)$. The distance (on the flat 2D surface) that is covered by this infinitesimal change in the static universe ($ds_s$, the subscript signifies the static nature of this universe) can be written as: $$ds_s=dx^2+dy^2=dr^2+r^2d\phi^2$$ The main question is this: how can the 2D creature incorporate the (possible) curvature in its universe when it’s calculating distances? The universe that it lives in might equally be a curved surface like *note Figure 9.2: sphereandplane. The answer to this question but for a 3D being (us) is the whole purpose to this discussion. Here, we want to give the 2D creature (and later, ourselves) the tools to measure distances if the space (that hosts the objects) is curved. *note Figure 9.2: sphereandplane. assumes a spherical shell with radius $R$ as the curved 2D plane for simplicity. The 2D plane is tangent to the spherical shell and only touches it at $A$. This idea will be generalized later. The first step in measuring the distance in a curved space is to imagine a third dimension along the $z$ axis as shown in *note Figure 9.2: sphereandplane. For simplicity, the $z$ axis is assumed to pass through the center of the spherical shell. Our imaginary 2D creature cannot visualize the third dimension or a curved 2D surface within it, so the remainder of this discussion is purely abstract for it (similar to us having difficulty in visualizing a 3D curved space in 4D). But since we are 3D creatures, we have the advantage of visualizing the following steps. Fortunately the 2D creature is already familiar with our mathematical constructs, so it can follow our reasoning. With the third axis added, a generic infinitesimal change over _the full_ 3D space corresponds to the distance: $$ds_s^2=dx^2+dy^2+dz^2=dr^2+r^2d\phi^2+dz^2.$$ [image src="gnuastro-figures/sphereandplane.png" text="../gnuastro-figures//sphereandplane.eps"] Figure 9.2: 2D spherical shell (centered on $O$) and flat plane (light gray) tangent to it at point $A$. It is very important to recognize that this change of distance is for _any_ point in the 3D space, not just those changes that occur on the 2D spherical shell of *note Figure 9.2: sphereandplane. Recall that our 2D friend can only do measurements on the 2D surfaces, not the full 3D space. So we have to constrain this general change to any change on the 2D spherical shell. To do that, let’s look at the arbitrary point $P$ on the 2D spherical shell. Its image ($P'$) on the flat plain is also displayed. From the dark gray triangle, we see that $$\sin\theta={r\over R},\quad\cos\theta={R-z\over R}.$$These relations allow the 2D creature to find the value of $z$ (an abstract dimension for it) as a function of r (distance on a flat 2D plane, which it can visualize) and thus eliminate $z$. From $\sin^2\theta+\cos^2\theta=1$, we get $z^2-2Rz+r^2=0$ and solving for $z$, we find: $$z=R\left(1\pm\sqrt{1-{r^2\over R^2}}\right).$$ The $\pm$ can be understood from *note Figure 9.2: sphereandplane.: For each $r$, there are two points on the sphere, one in the upper hemisphere and one in the lower hemisphere. An infinitesimal change in $r$, will create the following infinitesimal change in $z$: $$dz={\mp r\over R}\left(1\over \sqrt{1-{r^2/R^2}}\right)dr.$$Using the positive signed equation instead of $dz$ in the $ds_s^2$ equation above, we get: $$ds_s^2={dr^2\over 1-r^2/R^2}+r^2d\phi^2.$$ The derivation above was done for a spherical shell of radius $R$ as a curved 2D surface. To generalize it to any surface, we can define $K=1/R^2$ as the curvature parameter. Then the general infinitesimal change in a static universe can be written as: $$ds_s^2={dr^2\over 1-Kr^2}+r^2d\phi^2.$$ Therefore, when $K>0$ (and curvature is the same everywhere), we have a finite universe, where $r$ cannot become larger than $R$ as in *note Figure 9.2: sphereandplane. When $K=0$, we have a flat plane (*note Figure 9.1: flatplane.) and a negative $K$ will correspond to an imaginary $R$. The latter two cases may be infinite in area (which is not a simple concept, but mathematically can be modeled with $r$ extending infinitely), or finite-area (like a cylinder is flat everywhere with $ds_s^2={dx^2 + dy^2}$, but finite in one direction in size). A very important issue that can be discussed now (while we are still in 2D and can actually visualize things) is that $\overrightarrow{r}$ is tangent to the curved space at the observer’s position. In other words, it is on the gray flat surface of *note Figure 9.2: sphereandplane, even when the universe if curved: $\overrightarrow{r}=P'-A$. Therefore for the point $P$ on a curved space, the raw coordinate $r$ is the distance to $P'$, not $P$. The distance to the point $P$ (at a specific coordinate $r$ on the flat plane) over the curved surface (thick line in *note Figure 9.2: sphereandplane.) is called the _proper distance_ and is displayed with $l$. For the specific example of *note Figure 9.2: sphereandplane, the proper distance can be calculated with: $l=R\theta$ ($\theta$ is in radians). using the $\sin\theta$ relation found above, we can find $l$ as a function of $r$: $$\theta=\sin^{-1}\left({r\over R}\right)\quad\rightarrow\quad l(r)=R\sin^{-1}\left({r\over R}\right)$$ $R$ is just an arbitrary constant and can be directly found from $K$, so for cleaner equations, it is common practice to set $R=1$, which gives: $l(r)=\sin^{-1}r$. Also note that when $R=1$, then $l=\theta$. Generally, depending on the the curvature, in a _static_ universe the proper distance can be written as a function of the coordinate $r$ as (from now on we are assuming $R=1$): $$l(r)=\sin^{-1}(r)\quad(K>0),\quad\quad l(r)=r\quad(K=0),\quad\quad l(r)=\sinh^{-1}(r)\quad(K<0).$$With $l$, the infinitesimal change of distance can be written in a more simpler and abstract form of $$ds_s^2=dl^2+r^2d\phi^2.$$ Until now, we had assumed a static universe (not changing with time). But our observations so far appear to indicate that the universe is expanding (it isn’t static). Since there is no reason to expect the observed expansion is unique to our particular position of the universe, we expect the universe to be expanding at all points with the same rate at the same time. Therefore, to add a time dependence to our distance measurements, we can include a multiplicative scaling factor, which is a function of time: $a(t)$. The functional form of $a(t)$ comes from the cosmology, the physics we assume for it: general relativity, and the choice of whether the universe is uniform (‘homogeneous’) in density and curvature or inhomogeneous. In this section, the functional form of $a(t)$ is irrelevant, so we can avoid these issues. With this scaling factor, the proper distance will also depend on time. As the universe expands, the distance between two given points will shift to larger values. We thus define a distance measure, or coordinate, that is independent of time and thus doesn’t ‘move’. We call it the _comoving distance_ and display with $\chi$ such that: $l(r,t)=\chi(r)a(t)$. We have therefore, shifted the $r$ dependence of the proper distance we derived above for a static universe to the comoving distance: $$\chi(r)=\sin^{-1}(r)\quad(K>0),\quad\quad \chi(r)=r\quad(K=0),\quad\quad \chi(r)=\sinh^{-1}(r)\quad(K<0).$$ Therefore, $\chi(r)$ is the proper distance to an object at a specific reference time: $t=t_r$ (the $r$ subscript signifies “referenceâ€) when $a(t_r)=1$. At any arbitrary moment ($t\neq{t_r}$) before or after $t_r$, the proper distance to the object can be scaled with $a(t)$. Measuring the change of distance in a time-dependent (expanding) universe only makes sense if we can add up space and time(2). But we can only add bits of space and time together if we measure them in the same units: with a conversion constant (similar to how 1000 is used to convert a kilometer into meters). Experimentally, we find strong support for the hypothesis that this conversion constant is the speed of light (or gravitational waves(3)) in a vacuum. This speed is postulated to be constant(4) and is almost always written as $c$. We can thus parametrize the change in distance on an expanding 2D surface as $$ds^2=c^2dt^2-a^2(t)ds_s^2 = c^2dt^2-a^2(t)(d\chi^2+r^2d\phi^2).$$ ---------- Footnotes ---------- (1) The observations are interpreted under the assumption of uniform curvature. For a relativistic alternative to dark energy (and maybe also some part of dark matter), non-uniform curvature may be even be more critical, but that is beyond the scope of this brief explanation. (2) In other words, making our space-time consistent with Minkowski space-time geometry. In this geometry, different observers at a given point (event) in space-time split up space-time into ‘space’ and ‘time’ in different ways, just like people at the same spatial position can make different choices of splitting up a map into ‘left–right’ and ‘up–down’. This model is well supported by twentieth and twenty-first century observations. (3) The speed of gravitational waves was recently found to be very similar to that of light in vacuum, see arXiv:1710.05834 (https://arxiv.org/abs/1710.05834). (4) In _natural units_, speed is measured in units of the speed of light in vacuum.  File: gnuastro.info, Node: Extending distance concepts to 3D, Next: Invoking astcosmiccal, Prev: Distance on a 2D curved space, Up: CosmicCalculator 9.1.2 Extending distance concepts to 3D --------------------------------------- The concepts of *note Distance on a 2D curved space:: are here extended to a 3D space that _might_ be curved. We can start with the generic infinitesimal distance in a static 3D universe, but this time in spherical coordinates instead of polar coordinates. $\theta$ is shown in *note Figure 9.2: sphereandplane, but here we are 3D beings, positioned on $O$ (the center of the sphere) and the point $O$ is tangent to a 4D-sphere. In our 3D space, a generic infinitesimal displacement will correspond to the following distance in spherical coordinates: $$ds_s^2=dx^2+dy^2+dz^2=dr^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2).$$ Like the 2D creature before, we now have to assume an abstract dimension which we cannot visualize easily. Let’s call the fourth dimension $w$, then the general change in coordinates in the _full_ four dimensional space will be: $$ds_s^2=dr^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2)+dw^2.$$ But we can only work on a 3D curved space, so following exactly the same steps and conventions as our 2D friend, we arrive at: $$ds_s^2={dr^2\over 1-Kr^2}+r^2(d\theta^2+\sin^2{\theta}d\phi^2).$$ In a non-static universe (with a scale factor a(t)), the distance can be written as: $$ds^2=c^2dt^2-a^2(t)[d\chi^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2)].$$  File: gnuastro.info, Node: Invoking astcosmiccal, Prev: Extending distance concepts to 3D, Up: CosmicCalculator 9.1.3 Invoking CosmicCalculator ------------------------------- CosmicCalculator will calculate cosmological variables based on the input parameters. The executable name is ‘astcosmiccal’ with the following general template $ astcosmiccal [OPTION...] ... One line examples: ## Print basic cosmological properties at redshift 2.5: $ astcosmiccal -z2.5 ## Only print Comoving volume over 4pi stradian to z (Mpc^3): $ astcosmiccal --redshift=0.8 --volume ## Print luminosity distance, angular diameter distance and age ## of universe in one row at redshift 0.4 $ astcosmiccal -z0.4 -LAg ## Assume Lambda and matter density of 0.7 and 0.3 and print ## basic cosmological parameters for redshift 2.1: $ astcosmiccal -l0.7 -m0.3 -z2.1 The input parameters (for example current matter density and etc) can be given as command-line options or in the configuration files, see *note Configuration files::. For a definition of the different parameters, please see the sections prior to this. If no redshift is given, CosmicCalculator will just print its input parameters and abort. For a full list of the input options, please see *note CosmicCalculator input options::. When only a redshift is given, CosmicCalculator will print all calculations (one per line) with some explanations before each. This can be good when you want a general feeling of the conditions at a specific redshift. Alternatively, if any specific calculations are requested, only the requested values will be calculated and printed with one character space between them. In this case, no description will be printed. See *note CosmicCalculator specific calculations:: for the full list of these options along with some explanations how when/how they can be useful. * Menu: * CosmicCalculator input options:: Options to specify input conditions. * CosmicCalculator specific calculations:: Requesting specific outputs.  File: gnuastro.info, Node: CosmicCalculator input options, Next: CosmicCalculator specific calculations, Prev: Invoking astcosmiccal, Up: Invoking astcosmiccal 9.1.3.1 CosmicCalculator input options ...................................... The inputs to CosmicCalculator can be specified with the following options: ‘-z FLT’ ‘--redshift=FLT’ The redshift of interest. ‘-H FLT’ ‘--H0=FLT’ Current expansion rate (in km sec$^{-1}$ Mpc$^{-1}$). ‘-l FLT’ ‘--olambda=FLT’ Cosmological constant density divided by the critical density in the current Universe ($\Omega_{\Lambda,0}$). ‘-m FLT’ ‘--omatter=FLT’ Matter (including massive neutrinos) density divided by the critical density in the current Universe ($\Omega_{m,0}$). ‘-r FLT’ ‘--oradiation=FLT’ Radiation density divided by the critical density in the current Universe ($\Omega_{r,0}$).  File: gnuastro.info, Node: CosmicCalculator specific calculations, Prev: CosmicCalculator input options, Up: Invoking astcosmiccal 9.1.3.2 CosmicCalculator specific calculations .............................................. By default, when no specific calculations are requested, CosmicCalculator will print a complete set of all its calculators (one line for each calculation, see *note Invoking astcosmiccal::). The full list of calculations can be useful when you don’t want any specific value, but just a general view. In other contexts (for example in a batch script or during a discussion), you know exactly what you want and don’t want to be distracted by all the extra information. You can use any number of the options described below in any order. When any of these options are requested, CosmicCalculator’s output will just be a single line with a single space between the (possibly) multiple values. In the example below, only the tangential distance along one arcsecond (in kpc), absolute magnitude conversion, and age of the universe at redshift 2 are printed (recall that you can merge short options together, see *note Options::). $ astcosmiccal -z2 -sag 8.585046 44.819248 3.289979 Here is one example of using this feature in scripts: by adding the following two lines in a script to keep/use the comoving volume with varying redshifts: z=3.12 vol=$(astcosmiccal --redshift=$z --volume) In a script, this operation might be necessary for a large number of objects (several of galaxies in a catalog for example). So the fact that all the other default calculations are ignored will also help you get to your result faster. If you are indeed dealing with many (for example thousands) of redshifts, using CosmicCalculator is not the best/fastest solution. Because it has to go through all the configuration files and preparations for each invocation. To get the best efficiency (least overhead), we recommend using Gnuastro’s cosmology library (see *note Cosmology library::). CosmicCalculator also calls the library functions defined there for its calculations, so you get the same result with no overhead. Gnuastro also has libraries for easily reading tables into a C program, see *note Table input output::. Afterwards, you can easily build and run your C program for the particular processing with *note BuildProgram::. If you just want to inspect the value of a variable visually, the description (which comes with units) might be more useful. In such cases, the following command might be better. The other calculations will also be done, but they are so fast that you will not notice on modern computers (the time it takes your eye to focus on the result is usually longer than the processing: a fraction of a second). $ astcosmiccal --redshift=0.832 | grep volume The full list of CosmicCalculator’s specific calculations is present below. In case you have forgot the units, you can use the ‘--help’ option which has the units along with a short description. ‘-G’ ‘--agenow’ The current age of the universe (given the input parameters) in Giga-years (Gyr). ‘-C’ ‘--criticaldensitynow’ The current critical density (given the input parameters) in grams per centimeter-cube ($g/cm^3$). ‘-d’ ‘--properdistance’ The proper distance (at current time) to object at the given redshift in Megaparsecs (Mpc). See *note Distance on a 2D curved space:: for a description of the proper distance. ‘-A’ ‘--angulardimdist’ The angular diameter distance to object at given redshift in Megaparsecs (Mpc). ‘-s’ ‘--arcsectandist’ The tangential distance covered by 1 arcseconds at the given redshift in kiloparsecs (Kpc). This can be useful when trying to estimate the resolution or pixel scale of an instrument (usually in units of arcseconds) at a given redshift. ‘-L’ ‘--luminositydist’ The luminosity distance to object at given redshift in Megaparsecs (Mpc). ‘-u’ ‘--distancemodulus’ The distance modulus at given redshift. ‘-a’ ‘--absmagconv’ The conversion factor (addition) to absolute magnitude. Note that this is practically the distance modulus added with $-2.5\log{(1+z)}$ for the the desired redshift based on the input parameters. Once the apparent magnitude and redshift of an object is known, this value may be added with the apparent magnitude to give the object’s absolute magnitude. ‘-g’ ‘--age’ Age of the universe at given redshift in Giga-years (Gyr). ‘-b’ ‘--lookbacktime’ The look-back time to given redshift in Giga-years (Gyr). The look-back time at a given redshift is defined as the current age of the universe (‘--agenow’) subtracted by the age of the universe at the given redshift. ‘-c’ ‘--criticaldensity’ The critical density at given redshift in grams per centimeter-cube ($g/cm^3$). ‘-v’ ‘--onlyvolume’ The comoving volume in Megaparsecs cube (Mpc$^3$) until the desired redshift based on the input parameters.  File: gnuastro.info, Node: Library, Next: Developing, Prev: High-level calculations, Up: Top 10 Library ********** Each program in Gnuastro that was discussed in the prior chapters (or any program in general) is a collection of functions that is compiled into one executable file which can communicate directly with the outside world. The outside world in this context is the operating system. By communication, we mean that control is directly passed to a program from the operating system with a (possible) set of inputs and after it is finished, the program will pass control back to the operating system. For programs written in C and C++, the unique ‘main’ function is in charge of this communication. Similar to a program, a library is also a collection of functions that is compiled into one executable file. However, unlike programs, libraries don’t have a ‘main’ function. Therefore they can’t communicate directly with the outside world. This gives you the chance to write your own ‘main’ function and call library functions from within it. After compiling your program into a binary executable, you just have to _link_ it to the library and you are ready to run (execute) your program. In this way, you can use Gnuastro at a much lower-level, and in combination with other libraries on your system, you can significantly boost your creativity. This chapter starts with a basic introduction to libraries and how you can use them in *note Review of library fundamentals::. The separate functions in the Gnuastro library are then introduced (classified by context) in *note Gnuastro library::. If you end up routinely using a fixed set of library functions, with a well-defined input and output, it will be much more beneficial if you define a program for the job. Therefore, in its *note Version controlled source::, Gnuastro comes with the *note The TEMPLATE program:: to easily define your own programs(s). * Menu: * Review of library fundamentals:: Guide on libraries and linking. * BuildProgram:: Link and run source files with this library. * Gnuastro library:: Description of all library functions. * Library demo programs:: Demonstration for using libraries.  File: gnuastro.info, Node: Review of library fundamentals, Next: BuildProgram, Prev: Library, Up: Library 10.1 Review of library fundamentals =================================== Gnuastro’s libraries are written in the C programming language. In *note Why C::, we have thoroughly discussed the reasons behind this choice. C was actually created to write Unix, thus understanding the way C works can greatly help in effectively using programs and libraries in all Unix-like operating systems. Therefore, in the following subsections some important aspects of C, as it relates to libraries (and thus programs that depend on them) on Unix are reviewed. First we will discuss header files in *note Headers:: and then go onto *note Linking::. This section finishes with *note Summary and example on libraries::. If you are already familiar with these concepts, please skip this section and go directly to *note Gnuastro library::. In theory, a full operating system (or any software) can be written as one function. Such a software would not need any headers or linking (that are discussed in the subsections below). However, writing that single function and maintaining it (adding new features, fixing bugs, documentation and etc) would be a programmer or scientist’s worst nightmare! Furthermore, all the hard work that went into creating it cannot be reused in other software: every other programmer or scientist would have to re-invent the wheel. The ultimate purpose behind libraries (which come with headers and have to be linked) is to address this problem and increase modularity: “the degree to which a system’s components may be separated and recombined†(from Wikipedia). The more modular the source code of a program or library, the easier maintaining it will be, and all the hard work that went into creating it can be reused for a wider range of problems. * Menu: * Headers:: Header files included in source. * Linking:: Linking the compiled source files into one. * Summary and example on libraries:: A summary and example on using libraries.  File: gnuastro.info, Node: Headers, Next: Linking, Prev: Review of library fundamentals, Up: Review of library fundamentals 10.1.1 Headers -------------- C source code is read from top to bottom in the source file, therefore program components (for example variables, data structures and functions) should all be _defined_ or _declared_ closer to the top of the source file: before they are used. _Defining_ something in C or C++ is jargon for providing its full details. _Declaring_ it, on the other-hand, is jargon for only providing the minimum information needed for the compiler to pass it temporarily and fill in the detailed definition later. For a function, the _declaration_ only contains the inputs and their data-types along with the output’s type(1). The _definition_ adds to the declaration by including the exact details of what operations are done to the inputs to generate the output. As an example, take this simple summation function: double sum(double a, double b) { return a + b; } What you see above is the _definition_ of this function: it shows you (and the compiler) exactly what it does to the two ‘double’ type inputs and that the output also has a ‘double’ type. Note that a function’s internal operations are rarely so simple and short, it can be arbitrarily long and complicated. This unreasonably short and simple function was chosen here for ease of reading. The declaration for this function is: double sum(double a, double b); You can think of a function’s declaration as a building’s address in the city, and the definition as the building’s complete blueprints. When the compiler confronts a call to a function during its processing, it doesn’t need to know anything about how the inputs are processed to generate the output. Just as the postman doesn’t need to know the inner structure of a building when delivering the mail. The declaration (address) is enough. Therefore by _declaring_ the functions once at the start of the source files, we don’t have to worry about _defining_ them after they are used. Even for a simple real-world operation (not a simple summation like above!), you will soon need many functions (for example, some for reading/preparing the inputs, some for the processing, and some for preparing the output). Although it is technically possible, managing all the necessary functions in one file is not easy and is contrary to the modularity principle (see *note Review of library fundamentals::), for example the functions for preparing the input can be usable in your other projects with a different processing. Therefore, as we will see later (in *note Linking::), the functions don’t necessarily need to be defined in the source file where they are used. As long as their definitions are ultimately linked to the final executable, everything will be fine. For now, it is just important to remember that the functions that are called within one source file must be declared within the source file (declarations are mandatory), but not necessarily defined there. In the spirit of modularity, it is common to define contextually similar functions in one source file. For example, in Gnuastro, functions that calculate the median, mean and other statistical functions are defined in ‘lib/statistics.c’, while functions that deal directly with FITS files are defined in ‘lib/fits.c’. Keeping the definition of similar functions in a separate file greatly helps their management and modularity, but this fact alone doesn’t make things much easier for the caller’s source code: recall that while definitions are optional, declarations are mandatory. So if this was all, the caller would have to manually copy and paste (_include_) all the declarations from the various source files into the file they are working on now. To address this problem, programmers have adopted the header file convention: the header file of a source code contains all the declarations that a caller would need to be able to use any of its functions. For example, in Gnuastro, ‘lib/statistics.c’ (file containing function definitions) comes with ‘lib/gnuastro/statistics.h’ (only containing function declarations). The discussion above was mainly focused on functions, however, there are many more programming constructs such as pre-processor macros and data structures. Like functions, they also need to be known to the compiler when it confronts a call to them. So the header file also contains their definitions or declarations when they are necessary for the functions. Pre-processor macros (or macros for short) are replaced with their defined value by the pre-processor before compilation. Conventionally they are written only in capital letters to be easily recognized. It is just important to understand that the compiler doesn’t see the macros, it sees their fixed values. So when a header specifies macros you can do your programming without worrying about the actual values. The standard C types (for example ‘int’, or ‘float’) are very low-level and basic. We can collect multiple C types into a _structure_ for a higher-level way to keep and pass-along data. See *note Generic data container:: for some examples of macros and data structures. The contents in the header need to be _include_d into the caller’s source code with a special pre-processor command: ‘#include ’. As the name suggests, the _pre-processor_ goes through the source code prior to the processor (or compiler). One of its jobs is to include, or merge, the contents of files that are mentioned with this directive in the source code. Therefore the compiler sees a single entity containing the contents of the main file and all the included files. This allows you to include many (sometimes thousands of) declarations into your code with only one line. Since the headers are also installed with the library into your system, you don’t even need to keep a copy of them for each separate program, making things even more convenient. Try opening some of the ‘.c’ files in Gnuastro’s ‘lib/’ directory with a text editor to check out the include directives at the start of the file (after the copyright notice). Let’s take ‘lib/fits.c’ as an example. You will notice that Gnuastro’s header files (like ‘gnuastro/fits.h’) are indeed within this directory (the ‘fits.h’ file is in the ‘gnuastro/’ directory). You will notice that files like ‘stdio.h’, or ‘string.h’ are not in this directory (or anywhere within Gnuastro). On most systems the basic C header files (like ‘stdio.h’ and ‘string.h’ mentioned above) are located in ‘/usr/include/’(2). Your compiler is configured to automatically search that directory (and possibly others), so you don’t have to explicitly mention these directories. Go ahead, look into the ‘/usr/include’ directory and find ‘stdio.h’ for example. When the necessary header files are not in those specific libraries, the pre-processor can also search in places other than the current directory. You can specify those directories with this pre-processor option(3): ‘-I DIR’ “Add the directory ‘DIR’ to the list of directories to be searched for header files. Directories named by ’-I’ are searched before the standard system include directories. If the directory ‘DIR’ is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated...†(quoted from the GNU Compiler Collection manual). Note that the space between and the directory is optional and commonly not used. If the pre-processor can’t find the included files, it will abort with an error. In fact a common error when building programs that depend on a library is that the compiler doesn’t not know where a library’s header is (see *note Known issues::). So you have to manually tell the compiler where to look for the library’s headers with the ‘-I’ option. For a small software with one or two source files, this can be done manually (see *note Summary and example on libraries::). However, to enhance modularity, Gnuastro (and most other bin/libraries) contain many source files, so the compiler is invoked many times(4). This makes manual addition or modification of this option practically impossible. To solve this problem, in the GNU build system, there are conventional environment variables for the various kinds of compiler options (or flags). These environment variables are used in every call to the compiler (they can be empty). The environment variable used for the C Pre-Processor (or CPP) is ‘CPPFLAGS’. By giving ‘CPPFLAGS’ a value once, you can be sure that each call to the compiler will be affected. See *note Known issues:: for an example of how to set this variable at configure time. As described in *note Installation directory::, you can select the top installation directory of a software using the GNU build system, when you ‘./configure’ it. All the separate components will be put in their separate sub-directory under that, for example the programs, compiled libraries and library headers will go into ‘$prefix/bin’ (replace ‘$prefix’ with a directory), ‘$prefix/lib’, and ‘$prefix/include’ respectively. For enhanced modularity, libraries that contain diverse collections of functions (like GSL, WCSLIB, and Gnuastro), put their header files in a sub-directory unique to themselves. For example all Gnuastro’s header files are installed in ‘$prefix/include/gnuastro’. In your source code, you need to keep the library’s sub-directory when including the headers from such libraries, for example ‘#include ’(5). Not all libraries need to follow this convention, for example CFITSIO only has one header (‘fitsio.h’) which is directly installed in ‘$prefix/include’. ---------- Footnotes ---------- (1) Recall that in C, functions only have one output. (2) The ‘include/’ directory name is taken from the pre-processor’s ‘#include’ directive, which is also the motivation behind the ‘I’ in the ‘-I’ option to the pre-processor. (3) Try running Gnuastro’s ‘make’ and find the directories given to the compiler with the ‘-I’ option. (4) Nearly every command you see being executed after running ‘make’ is one call to the compiler. (5) the top ‘$prefix/include’ directory is usually known to the compiler  File: gnuastro.info, Node: Linking, Next: Summary and example on libraries, Prev: Headers, Up: Review of library fundamentals 10.1.2 Linking -------------- To enhance modularity, similar functions are defined in one source file (with a ‘.c’ suffix, see *note Headers:: for more). After running ‘make’, each human-readable, ‘.c’ file is translated (or compiled) into a computer-readable “object†file (ending with ‘.o’). Note that object files are also created when building programs, they aren’t particular to libraries. Try opening Gnuastro’s ‘lib/’ and ‘bin/progname/’ directories after running ‘make’ to see these object files(1). Afterwards, the object files are _linked_ together to create an executable program or a library. The object files contain the full definition of the functions in the respective ‘.c’ file along with a list of any other function (or generally “symbolâ€) that is referenced there. To get a list of those functions you can use the ‘nm’ program which is part of GNU Binutils. For example from the top Gnuastro directory, run: $ nm bin/arithmetic/arithmetic.o This will print a list of all the functions (more generally, ‘symbols’) that were called within ‘bin/arithmetic/arithmetic.c’ along with some further information (for example a ‘T’ in the second column shows that this function is actually defined here, ‘U’ says that it is undefined here). Try opening the ‘.c’ file to check some of these functions for your self. Run ‘info nm’ for more information. To recap, the _compiler_ created the separate object files mentioned above for each ‘.c’ file. The _linker_ will then combine all the symbols of the various object files (and libraries) into one program or library. In the case of Arithmetic (a program) the contents of the object files in ‘bin/arithmetic/’ are copied (and re-ordered) into one final executable file which we can run from the operating system. When the symbols (computer-readable function definitions in most cases) are copied into the output like this, we call the process _static_ linking. Let’s have a closer look at static linking: we’ll assume you have installed Gnuastro into the default ‘/usr/local/’ directory (see *note Installation directory::). If you tried the ‘nm’ command on one of Arithmetic’s object files above, then with the command below you can confirm that all the functions that were defined in the object files (had a ‘T’ in the second column) are also defined in the ‘astarithmetic’ executable: $ nm /usr/local/bin/astarithmetic But you will notice that there are still many undefined symbols (have a ‘U’ in the second column). One class of such functions are Gnuastro’s own library functions that start with ‘‘gal_’’: $ nm /usr/local/bin/astarithmetic | grep gal_ These undefined symbols (functions) will be linked to the executable every time you run arithmetic. Therefore they are known as dynamically _linked_ libraries (2). When the functions of a library need to be dynamically linked, the library is known as a shared library. As we saw above, static linking is done when the executable is being built. However, when a library is linked dynamically, its symbols are only checked with the available libraries at build time: they are not actually copied into the executable. Every time you run the program, the linker will be activated and will try to link the program to the installed library before it starts. If you want all the libraries to be statically linked to the executables, you have to tell Libtool (which Gnuastro uses for the linking) to disable shared libraries at configure time(3): $ configure --disable-shared Try configuring, statically building and installing Gnuastro with the command above. Then check the ‘gal_’ symbols in the installed Arithmetic executable like before. You will see that they are actually copied this time (have a ‘T’ in the second column). If the second column doesn’t convince you, look at the executable file size with the following command: $ ls -lh /usr/local/bin/astarithmetic It should be around 4.2 Megabytes with this static linking. If you configure and build Gnuastro again with shared libraries enabled (which is the default), you will notice that it is roughly 100 Kilobytes! This huge difference would have been very significant in the old days, but with the roughly Terabyte storage drives commonly in use today, it is negligible. Fortunately, output file size is not the only benefit of dynamic linking: since it links to the libraries at run-time (rather than build-time), you don’t have to re-build a higher-level program or library when an update comes for one of the lower-level libraries it depends on. You just install the new low-level library and it will automatically be used next time in your higher-level tools. To be fair, this also creates a few complications(4): • Reproducibility: Even though your high-level tool has the same version as before, with the updated library, you might not get the same results. • Broken links: if some functions have been changed or removed in the updated library, then the linker will abort with an error at run-time. Therefore you need to re-build your higher-level program or library. To see a list of all the shared libraries that are needed for a program or a shared library to run, you can use the GNU C library’s ‘ldd’(5) program, for example: $ ldd /usr/local/bin/astarithmetic Library file names start with a ‘lib’ and end with suffix depending on their type as described below. In between these two is the name of the library, for example ‘libgnuastro.a’ (Gnuastro’s static library) and ‘libgsl.so.0.0.0’ (GSL’s shared library). • A static library is known as an archive file and has a ‘.a’ suffix. A static library is not an executable file. • A shared library ends with a ‘.so.X.Y.Z’ suffix and is executable. The three numbers in the prefix are the version of the shared library. Shared library versions are defined to allow multiple versions of a shared library simultaneously on a system and to help detect possible updates in the library and programs that depend on it by the linker. It is very important to mention that this version number is different from from the software version number (see *note Version numbering::), so do not confuse the two. See the “Library interface versions†chapter of GNU Libtool for more. For each shared library, we also have two symbolic links ending with ‘.so.X’ and ‘.so’. They are automatically set by the installer, but you can change them (point them to another version of the library) when you have multiple versions on your system. For those libraries that use GNU Libtool (including Gnuastro and its dependencies), both static and dynamic libraries are built and installed in the ‘prefix/lib/’ directory (see *note Installation directory::). In this way other programs can make which ever kind of link that they want. To link with a library, the linker needs to know where to find the library. You do that with two separate options to the linker (see *note Summary and example on libraries:: for an example): ‘-L DIR’ Will tell the linker to look into ‘DIR’ for the libraries. For example ‘-L/usr/local/lib’, or ‘-L/home/yourname/.local/lib’. You can make multiple calls to this option, so the linker looks into several directories. Note that the space between and the directory is optional and commonly not used. ‘-lLIBRARY’ Specify the unique name of a library to be linked. As discussed above, library file names have fixed parts which must not be given to this option. So ‘-lgsl’ will guide the linker to either look for ‘libgsl.a’ or ‘libgsl.so’ (depending on the type of linking it is suppose to do). You can link many libraries by repeated calls to this option. *Very important: * The place of this option on the command line matters. This is often a source of confusion for beginners, so let’s assume you have asked the linker to link with library A using this option. As soon as the linker confronts this option, it looks into the list of the undefined symbols it has found until that point and does a search in library A for any of those symbols. If any pending undefined symbol is found in library A, it is used. After the search in undefined symbols is complete, the contents of library A are completely discarded from the linker’s memory. Therefore, if a later object file or library uses an unlinked symbol in library A, the linker will abort after it has finished its search in all the input libraries or object files. As an example, Gnuastro’s ‘gal_array_dlog10_array’ function depends on the ‘log10’ function of the C Math library (specified with ‘-lm’). So the proper way to link something that uses this function is ‘-lgnuastro -lm’. If instead, you give: ‘-lm -lgnuastro’ the linker will complain and abort. ---------- Footnotes ---------- (1) Gnuastro uses GNU Libtool for portable library creation. Libtool will also make a ‘.lo’ file for each ‘.c’ file when building libraries (‘.lo’ files are human-readable). (2) Do not confuse dynamically _linked_ libraries with dynamically _loaded_ libraries. The former (that is discussed here) are only loaded once at the program startup. However, the latter can be loaded anytime during the program’s execution, they are also known as plugins. (3) Libtool is very common and is commonly used. Therefore, you can use this option to configure on most programs using the GNU build system if you want static linking. (4) Both of these can be avoided by joining the mailing lists of the lower-level libraries and checking the changes in newer versions before installing them. Updates that result in such behaviors are generally heavily emphasized in the release notes. (5) If your operating system is not using the GNU C library, you might need another tool.  File: gnuastro.info, Node: Summary and example on libraries, Prev: Linking, Up: Review of library fundamentals 10.1.3 Summary and example on libraries --------------------------------------- After the mostly abstract discussions of *note Headers:: and *note Linking::, we’ll give a small tutorial here. But before that, let’s recall the general steps of how your source code is prepared, compiled and linked to the libraries it depends on so you can run it: 1. The *pre-processor* includes the header (‘.h’) files into the function definition (‘.c’) files, expands pre-processor macros and generally prepares the human-readable source for compilation (reviewed in *note Headers::). 2. The *compiler* will translate (compile) the human-readable contents of each source (merged ‘.c’ and the ‘.h’ files, or generally the output of the pre-processor) into the computer-readable code of ‘.o’ files. 3. The *linker* will link the called function definitions from various compiled files to create one unified object. When the unified product has a ‘main’ function, this function is the product’s only entry point, enabling the operating system or user to directly interact with it, so the product is a program. When the product doesn’t have a ‘main’ function, the linker’s product is a library and its exported functions can be linked to other executables (it has many entry points). The GNU Compiler Collection (or GCC for short) will do all three steps. So as a first example, from Gnuastro’s source, go to ‘tests/lib/’. This directory contains the library tests, you can use these as some simple tutorials. For this demonstration, we will compile and run the ‘arraymanip.c’. This small program will call Gnuastro library for some simple operations on an array (open it and have a look). To compile this program, run this command inside the directory containing it. $ gcc arraymanip.c -lgnuastro -lm -o arraymanip The two ‘-lgnuastro’ and ‘-lm’ options (in this order) tell GCC to first link with the Gnuastro library and then with C’s math library. The ‘-o’ option is used to specify the name of the output executable, without it the output file name will be ‘a.out’ (on most OSs), independent of your input file name(s). If your top Gnuastro installation directory (let’s call it ‘$prefix’, see *note Installation directory::) is not recognized by GCC, you will get pre-processor errors for unknown header files. Once you fix it, you will get linker errors for undefined functions. To fix both, you should run GCC as follows: additionally telling it which directories it can find Gnuastro’s headers and compiled library (see *note Headers:: and *note Linking::): $ gcc -I$prefix/include -L$prefix/lib arraymanip.c -lgnuastro -lm \ -o arraymanip This single command has done all the pre-processor, compilation and linker operations. Therefore no intermediate files (object files in particular) were created, only a single output executable was created. You are now ready to run the program with: $ ./arraymanip The Gnuastro functions called by this program only needed to be linked with the C math library. But if your program needs WCS coordinate transformations, needs to read a FITS file, needs special math operations (which include its linear algebra operations), or you want it to run on multiple CPU threads, you also need to add these libraries in the call to GCC: ‘-lgnuastro -lwcs -lcfitsio -lgsl -lgslcblas -pthread -lm’. In *note Gnuastro library::, where each function is documented, it is mentioned which libraries (if any) must also be linked when you call a function. If you feel all these linkings can be confusing, please consider Gnuastro’s *note BuildProgram:: program.  File: gnuastro.info, Node: BuildProgram, Next: Gnuastro library, Prev: Review of library fundamentals, Up: Library 10.2 BuildProgram ================= The number and order of libraries that are necessary for linking a program with Gnuastro library might be too confusing when you need to compile a small program for one particular job (with one source file). BuildProgram will use the information gathered during configuring Gnuastro and link with all the appropriate libraries on your system. This will allow you to easily compile, link and run programs that use Gnuastro’s library with one simple command and not worry about which libraries to link to, or the linking order. BuildProgram uses GNU Libtool to find the necessary libraries to link against (GNU Libtool is the same program that builds all of Gnuastro’s libraries and programs when you run ‘make’). So in the future, if Gnuastro’s prerequisite libraries change or other libraries are added, you don’t have to worry, you can just run BuildProgram and internal linking will be done correctly. *BuildProgram requires GNU Libtool:* BuildProgram depends on GNU Libtool, other implementations don’t have some necessary features. If GNU Libtool isn’t available at Gnuastro’s configure time, you will get a notice at the end of the configuration step and BuildProgram will not be built or installed. Please see *note Optional dependencies:: for more information. * Menu: * Invoking astbuildprog:: Options and examples for using this program.  File: gnuastro.info, Node: Invoking astbuildprog, Prev: BuildProgram, Up: BuildProgram 10.2.1 Invoking BuildProgram ---------------------------- BuildProgram will compile and link a C source program with Gnuastro’s library and all its dependencies, greatly facilitating the compilation and running of small programs that use Gnuastro’s library. The executable name is ‘astbuildprog’ with the following general template: $ astbuildprog [OPTION...] C_SOURCE_FILE One line examples: ## Compile, link and run `myprogram.c': $ astbuildprog myprogram.c ## Similar to previous, but with optimization and compiler warnings: $ astbuildprog -Wall -O2 myprogram.c ## Compile and link `myprogram.c', then run it with `image.fits' ## as its argument: $ astbuildprog myprogram.c image.fits ## Also look in other directories for headers and linking: $ astbuildprog -Lother -Iother/dir myprogram.c ## Just build (compile and link) `myprogram.c', don't run it: $ astbuildprog --onlybuild myprogram.c If BuildProgram is to run, it needs a C programming language source file as input. By default it will compile and link the program to build the a final executable file and run it. The built executable name can be set with the optional ‘--output’ option. When no output name is set, BuildProgram will use Gnuastro’s *note Automatic output::, and remove the suffix of the input and use that as the output name. For the full list of options that BuildProgram shares with other Gnuastro programs, see *note Common options::. You may also use Gnuastro’s *note Configuration files:: to specify other libraries/headers to use for special directories and not have to type them in every time. The first argument is considered to be the C source file that must be compiled and linked. Any other arguments (non-option tokens on the command-line) will be passed onto the program when BuildProgram wants to run it. Recall that by default BuildProgram will run the program after building it. This behavior can be disabled with the ‘--onlybuild’ option. When the ‘--quiet’ option (see *note Operating mode options::) is not called, BuildPrograms will print the compilation and running commands. Once your program grows and you break it up into multiple files (which are much more easily managed with Make), you can use the linking flags of the non-quiet output in your ‘Makefile’. ‘-I STR’ ‘--includedir=STR’ Directory to search for files that you ‘#include’ in your C program. Note that headers relating to Gnuastro and its dependencies don’t need this option. This is only necessary if you want to use other headers. It may be called multiple times and order matters. This directory will be searched before those of Gnuastro’s build and also the system search directories. See *note Headers:: for a thorough introduction. From the GNU C Pre-Processor manual: “Add the directory ‘STR’ to the list of directories to be searched for header files. Directories named by ‘-I’ are searched before the standard system include directories. If the directory ‘STR’ is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeatedâ€. ‘-L STR’ ‘--linkdir=STR’ Directory to search for compiled libraries to link the program with. Note that all the directories that Gnuastro was built with will already be used by BuildProgram (GNU Libtool). This option is only necessary if your libraries are in other directories. Multiple calls to this option are possible and order matters. This directory will be searched before those of Gnuastro’s build and also the system search directories. See *note Linking:: for a thorough introduction. ‘-l STR’ ‘--linklib=STR’ Library to link with your program. Note that all the libraries that Gnuastro was built with will already be linked by BuildProgram (GNU Libtool). This option is only necessary if you want to link with other directories. Multiple calls to this option are possible and order matters. This library will be linked before Gnuastro’s library or its dependencies. See *note Linking:: for a thorough introduction. ‘-O INT/STR’ ‘--optimize=INT/STR’ Compiler optimization level: 0 (for no optimization, good debugging), 1, 2, 3 (for the highest level of optimizations). From the GNU Compiler Collection (GCC) manual: “Without any optimization option, the compiler’s goal is to reduce the cost of compilation and to make debugging produce the expected results. Statements are independent: if you stop the program with a break point between statements, you can then assign a new value to any variable or change the program counter to any other statement in the function and get exactly the results you expect from the source code. Turning on optimization flags makes the compiler attempt to improve the performance and/or code size at the expense of compilation time and possibly the ability to debug the program.†Please see your compiler’s manual for the full list of acceptable values to this option. ‘-g’ ‘--debug’ Emit extra information in the compiled binary for use by a debugger. When calling this option, it is best to explicitly disable optimization with ‘-O0’. To combine both options you can run ‘-gO0’ (see *note Options:: for how short options can be merged into one). ‘-W STR’ ‘--warning=STR’ Print compiler warnings on command-line during compilation. “Warnings are diagnostic messages that report constructions that are not inherently erroneous but that are risky or suggest there may have been an error.†(from the GCC manual). It is always recommended to compile your programs with warnings enabled. All compiler warning options that start with ‘W’ are usable by this option in BuildProgram also, see your compiler’s manual for the full list. Some of the most common values to this option are: ‘pedantic’ (Warnings related to standard C) and ‘all’ (all issues the compiler confronts). ‘--tag=STR’ The language configuration information. Libtool can build objects and libraries in many languages. In many cases, it can identify the language automatically, but when it doesn’t you can use this option to explicitly notify Libtool of the language. The acceptable values are: ‘CC’ for C, ‘CXX’ for C++, ‘GCJ’ for Java, ‘F77’ for Fortran 77, ‘FC’ for Fortran, ‘GO’ for Go and ‘RC’ for Windows Resource. Note that the Gnuastro library is not yet fully compatible with all these languages. ‘-b’ ‘--onlybuild’ Only build the program, don’t run it. By default, the built program is immediately run afterwards. ‘--deletecompiled’ Delete the compiled binary file after running it. This option is only relevant when the compiled program is run after being built. In other words, it is only relevant when ‘--onlybuild’ is not called. It can be useful when you are busy testing a program or just want a fast result and the actual binary/compiled file is not of later use. ‘-a STR’ ‘--la=STR’ Use the given ‘.la’ file (Libtool control file) instead of the one that was produced from Gnuastro’s configuration results. The Libtool control file keeps all the necessary information for building and linking a program with a library built by Libtool. The default ‘prefix/lib/libgnuastro.la’ keeps all the information necessary to build a program using the Gnuastro library gathered during configure time (see *note Installation directory:: for prefix). This option is useful when you prefer to use another Libtool control file.  File: gnuastro.info, Node: Gnuastro library, Next: Library demo programs, Prev: BuildProgram, Up: Library 10.3 Gnuastro library ===================== Gnuastro library’s programming constructs (function declarations, macros, data structures, or global variables) are classified by context into multiple header files (see *note Headers::)(1). In this section, the functions in each header will be discussed under a separate sub-section, which includes the name of the header. Assuming a function declaration is in ‘headername.h’, you can include its declaration in your source code with: # include The names of all constructs in ‘headername.h’ are prefixed with ‘gal_headername_’ (or ‘GAL_HEADERNAME_’ for macros). The ‘gal_’ prefix stands for _G_NU _A_stronomy _L_ibrary. Gnuastro library functions are compiled into a single file which can be linked on the command-line with the ‘-lgnuastro’ option, (see *note Linking:: and *note Summary and example on libraries:: for an introduction on linking and example). Gnuastro library is a high-level library which depends on lower level libraries for some operations (see *note Dependencies::). Therefore if at least one of Gnuastro’s functions in your program use functions from the dependencies, you will also need to link those dependencies after linking with Gnuastro. The outside libraries that need to be linked for such functions are mentioned following the function name. See *note BuildProgram:: for a small Gnuastro program that will take care of the libraries to link against and lets you focus on your exciting science. *Libraries are still under heavy development: * Gnuastro was initially created to be a collection of command-line programs. However, as the programs and their the shared functions grew, internal (not installed) libraries were added. Since the 0.2 release, the libraries are install-able. Hence the libraries are currently under heavy development and will significantly evolve between releases and will become more mature and stable in due time. It will stabilize with the removal of this notice. Check the ‘NEWS’ file for interface changes. If you use the Info version of this manual (see *note Info::), you don’t have to worry: the documentation will correspond to your installed version. * Menu: * Configuration information:: General information about library config. * Multithreaded programming:: Tools for easy multi-threaded operations. * Library data types:: Definitions and functions for types. * Library blank values:: Blank values and functions to deal with them. * Library data container:: General data container in Gnuastro. * Dimensions:: Dealing with coordinates and dimensions. * Linked lists:: Various types of linked lists. * FITS files:: Working with FITS data. * World Coordinate System:: Dealing with the world coordinate system. * Text files:: Functions to work on Text files. * Table input output:: Reading and writing table columns. * Arithmetic on datasets:: Arithmetic operations on a dataset. * Tessellation library:: Functions for working on tiles. * Bounding box:: Finding the bounding box. * Polygons:: Working with the vertices of a polygon. * Qsort functions:: Helper functions for Qsort. * Permutations:: Re-order (or permute) the values in a dataset. * Matching:: Matching catalogs based on position. * Statistical operations:: Functions for basic statistics. * Binary datasets:: Datasets that can only have values of 0 or 1. * Convolution functions:: Library functions to do convolution. * Interpolation:: Interpolate (over blank values possibly). * Git wrappers:: Wrappers for functions in libgit2. * Cosmology library:: Cosmological calculations. ---------- Footnotes ---------- (1) Within Gnuastro’s source, all installed ‘.h’ files in ‘lib/gnuastro/’ are accompanied by a ‘.c’ file in ‘/lib/’.  File: gnuastro.info, Node: Configuration information, Next: Multithreaded programming, Prev: Gnuastro library, Up: Gnuastro library 10.3.1 Configuration information (‘config.h’) --------------------------------------------- The ‘gnuastro/config.h’ header contains information about the full Gnuastro installation on your system. Gnuastro developers should note that this is the only header that is not available within Gnuastro, it is only available to a Gnuastro library user _after_ installation. Within Gnuastro, ‘config.h’ (which is included in every Gnuastro ‘.c’ file, see *note Coding conventions::) has more than enough information about the overall Gnuastro installation. -- Macro: GAL_CONFIG_VERSION This macro can be used as a string literal(1) containing the version of Gnuastro that is being used. See *note Version numbering:: for the version formats. For example: printf("Gnuastro version: %s\n", GAL_CONFIG_VERSION); or char *gnuastro_version=GAL_CONFIG_VERSION; -- Macro: GAL_CONFIG_HAVE_LIBGIT2 Libgit2 is an optional dependency of Gnuastro (see *note Optional dependencies::). When it is installed and detected at configure time, this macro will have a value of ‘1’ (one). Otherwise, it will have a value of ‘0’ (zero). Gnuastro also comes with some wrappers to make it easier to use libgit2 (see *note Git wrappers::). -- Macro: GAL_CONFIG_HAVE_WCSLIB_VERSION WCSLIB is the reference library for world coordinate system transformation (see *note WCSLIB:: and *note World Coordinate System::). However, only more recent versions of WCSLIB also provide its version number. If the WCSLIB that is installed on the system provides its version (through the possibly existing ‘wcslib_version’ function), this macro will have a value of one, otherwise it will have a value of zero. -- Macro: GAL_CONFIG_HAVE_PTHREAD_BARRIER The POSIX threads standard define barriers as an optional requirement. Therefore, some operating systems choose to not include it. As one of the ‘./configure’ step checks, Gnuastro we check if your system has this POSIX thread barriers. If so, this macro will have a value of ‘1’, otherwise it will have a value of ‘0’. see *note Implementation of pthread_barrier:: for more. -- Macro: GAL_CONFIG_SIZEOF_LONG -- Macro: GAL_CONFIG_SIZEOF_SIZE_T The size of (number of bytes in) the system’s ‘long’ and ‘size_t’ types. Their values are commonly either 4 or 8 for 32-bit and 64-bit systems. You can also get this value with the expression ‘‘sizeof size_t’’ for example without having to include this header. ---------- Footnotes ---------- (1)  File: gnuastro.info, Node: Multithreaded programming, Next: Library data types, Prev: Configuration information, Up: Gnuastro library 10.3.2 Multithreaded programming (‘threads.h’) ---------------------------------------------- In recent years, newer CPUs don’t have significantly higher frequencies any more. However, CPUs are being manufactured with more cores, enabling more than one operation (thread) at each instant. This can be very useful to speed up many aspects of processing and in particular image processing. Most of the programs in Gnuastro utilize multi-threaded programming for the CPU intensive processing steps. This can potentially lead to a significant decrease in the running time of a program, see *note A note on threads::. In terms of reading the code, you don’t need to know anything about multi-threaded programming. You can simply follow the case where only one thread is to be used. In these cases, threads are not used and can be completely ignored. When the C language was defined (the K&R’s book was written), using threads was not common, so C’s threading capabilities aren’t introduced there. Gnuastro uses POSIX threads for multi-threaded programming, defined in the ‘pthread.h’ system wide header. There are various resources for learning to use POSIX threads. An excellent tutorial (https://computing.llnl.gov/tutorials/pthreads/) is provided by the Lawrence Livermore National Laboratory, with abundant figures to better understand the concepts, it is a very good start. The book ‘Advanced programming in the Unix environment’(1), by Richard Stevens and Stephen Rago, Addison-Wesley, 2013 (Third edition) also has two chapters explaining the POSIX thread constructs which can be very helpful. An alternative to POSIX threads was OpenMP, but POSIX threads are low level, allowing much more control, while being easier to understand, see *note Why C::. All the situations where threads are used in Gnuastro currently are completely independent with no need of coordination between the threads. Such problems are known as “embarrassingly parallel†problems. They are some of the simplest problems to solve with threads and are also the ones that benefit most from them, see the LLNL introduction(2). One very useful POSIX thread concept is ‘pthread_barrier’. Unfortunately, it is only an optional feature in the POSIX standard, so some operating systems don’t include it. Therefore in *note Implementation of pthread_barrier::, we introduce our own implementation. This is a rather technical section only necessary for more technical readers and you can safely ignore it. Following that, we describe the helper functions in this header that can greatly simplify writing a multi-threaded program, see *note Gnuastro's thread related functions:: for more. * Menu: * Implementation of pthread_barrier:: Some systems don’t have pthread_barrier * Gnuastro's thread related functions:: Functions for managing threads. ---------- Footnotes ---------- (1) Don’t let the title scare you! The two chapters on Multi-threaded programming are very self-sufficient and don’t need any more knowledge than K&R. (2)  File: gnuastro.info, Node: Implementation of pthread_barrier, Next: Gnuastro's thread related functions, Prev: Multithreaded programming, Up: Multithreaded programming 10.3.2.1 Implementation of ‘pthread_barrier’ ............................................ One optional feature of the POSIX Threads standard is the ‘pthread_barrier’ concept. It is a very useful high-level construct that allows for independent threads to “wait†behind a “barrier†for the rest after they finish. Barriers can thus greatly simplify the code in a multi-threaded program, so they are heavily used in Gnuastro. However, since its an optional feature in the POSIX standard, some operating systems don’t include it. So to make Gnuastro portable, we have written our own implementation of those ‘pthread_barrier’ functions. At ‘./configure’ time, Gnuastro will check if ‘pthread_barrier’ constructs are available on your system or not. If ‘pthread_barrier’ is not available, our internal implementation will be compiled into the Gnuastro library and the definitions and declarations below will be usable in your code with ‘#include ’. -- Type: pthread_barrierattr_t Type to specify the attributes of a POSIX threads barrier. -- Type: pthread_barrier_t Structure defining the POSIX threads barrier. -- Function: int pthread_barrier_init (pthread_barrier_t ‘*b’, pthread_barrierattr_t ‘*attr’, unsigned int ‘limit’) Initialize the barrier ‘b’, with the attributes ‘attr’ and total ‘limit’ (a number of) threads that must wait behind it. This function must be called before spinning off threads. -- Function: int pthread_barrier_wait (pthread_barrier_t ‘*b’) This function is called within each thread, just before it is ready to return. Once a thread’s function hits this, it will “wait†until all the other functions are also finished. -- Function: int pthread_barrier_destroy (pthread_barrier_t ‘*b’) Destroy all the information in the barrier structure. This should be called by the function that spinned-off the threads after all the threads have finished. *Destroy a barrier before re-using it:* It is very important to destroy the barrier before (possibly) reusing it. This destroy function not only destroys the internal structures, it also waits (in 1 microsecond intervals, so you will not notice!) until all the threads don’t need the barrier structure any more. If you immediately start spinning off new threads with a not-destroyed barrier, then the internal structure of the remaining threads will get mixed with the new ones and you will get very strange and apparently random errors that are extremely hard to debug.  File: gnuastro.info, Node: Gnuastro's thread related functions, Prev: Implementation of pthread_barrier, Up: Multithreaded programming 10.3.2.2 Gnuastro’s thread related functions ............................................ The POSIX Threads functions offered in the C library are very low-level and offer a great range of control over the properties of the threads. So if you are interested in customizing your tools for complicated thread applications, it is strongly encouraged to get a nice familiarity with them. Some resources were introduced in *note Multithreaded programming::. However, in many cases used in astronomical data analysis, you don’t need communication between threads and each target operation can be done independently. Since such operations are very common, Gnuastro provides the tools below to facilitate the creation and management of jobs without any particular knowledge of POSIX Threads for such operations. The most interesting high-level functions of this section are the ‘gal_threads_number’ and ‘gal_threads_spin_off’ that identify the number of threads on the system and spin-off threads. You can see a demonstration of using these functions in *note Library demo - multi-threaded operation::. -- C ‘struct’: gal_threads_params Structure keeping the parameters of each thread. When each thread is created, a pointer to this structure is passed to it. The ‘params’ element can be the pointer to a structure defined by the user which contains all the necessary parameters to pass onto the worker function. The rest of the elements within this structure are set internally by ‘gal_threads_spin_off’ and are relevant to the worker function. struct gal_threads_params { size_t id; /* Id of this thread. */ void *params; /* User-identified pointer. */ size_t *indexs; /* Target indexs given to this thread. */ pthread_barrier_t *b; /* Barrier for all threads. */ }; -- Function: size_t gal_threads_number () Return the number of threads that the operating system has available for your program. This number is usually fixed for a single machine and doesn’t change. So this function is useful when you want to run your program on different machines (with different CPUs). -- Function: void gal_threads_spin_off (void ‘*(*worker)(void *)’, void ‘*caller_params’, size_t ‘numactions’, size_t ‘numthreads’) Distribute ‘numactions’ jobs between ‘numthreads’ threads and spin-off each thread by calling the ‘worker’ function. The ‘caller_params’ pointer will also be passed to ‘worker’ as part of the ‘gal_threads_params’ structure. For a fully working example of this function, please see *note Library demo - multi-threaded operation::. -- Function: void gal_threads_attr_barrier_init (pthread_attr_t ‘*attr’, pthread_barrier_t ‘*b’, size_t ‘limit’) This is a low-level function in case you don’t want to use ‘gal_threads_spin_off’. It will initialize the general thread attribute ‘attr’ and the barrier ‘b’ with ‘limit’ threads to wait behind the barrier. For maximum efficiency, the threads initialized with this function will be detached. Therefore no communication is possible between these threads and in particular ‘pthread_join’ won’t work on these threads. You have to use the barrier constructs to wait for all threads to finish. -- Function: void gal_threads_dist_in_threads (size_t ‘numactions’, size_t ‘numthreads’, size_t ‘**outthrds’, size_t ‘*outthrdcols’) This is a low-level function in case you don’t want to use ‘gal_threads_spin_off’. Identify the “indexâ€es (starting from 0) of the actions to be done on each thread in the ‘outthrds’ array. ‘outthrds’ is treated as a 2D array with ‘numthreads’ rows and ‘outthrdcols’ columns. The indexs in each row, identify the actions that should be done by one thread. Please see the explanation below to understand the purpose of this operation. Let’s assume you have $A$ actions (where there is only one function and the input values differ for each action) and $T$ threads available to the system with $A>T$ (common values for these two would be $A>1000$ and $T<10$). Spinning off a thread is not a cheap job and requires a significant number of CPU cycles. Therefore, creating $A$ threads is not the best way to address such a problem. The most efficient way to manage the actions is such that only $T$ threads are created, and each thread works on a list of actions identified for it in series (one after the other). This way your CPU will get all the actions done with minimal overhead. The purpose of this function is to do what we explained above: each row in the ‘outthrds’ array contains the indexs of actions which must be done by one thread. ‘outthrds’ contains ‘outthrdcols’ columns. In using ‘outthrds’, you don’t have to know the number of columns. The ‘GAL_BLANK_SIZE_T’ macro has a role very similar to a string’s ‘\0’: every row finishes with this macro, so can easily stop parsing the indexes in the row when you confront it. Please see the example program in ‘tests/lib/multithread.c’ for a demonstration.  File: gnuastro.info, Node: Library data types, Next: Library blank values, Prev: Multithreaded programming, Up: Gnuastro library 10.3.3 Library data types (‘type.h’) ------------------------------------ Data in astronomy can have many types, numeric (numbers) and strings (names, identifiers). The former can also be divided into integers and floats, see *note Numeric data types:: for a thorough discussion of the different numeric data types and which one is useful for different contexts. To deal with the very large diversity of types that are available (and used in different contexts), in Gnuastro each type is identified with global integer variable with a fixed name, this variable is then passed onto functions that can work on any type or is stored in Gnuastro’s *note Generic data container:: as one piece of meta-data. The actual values within these integer constants is irrelevant and you should never rely on them. When you need to check, explicitly use the named variable in the table below. If you want to check with more than one type, you can use C’s ‘switch’ statement. Since Gnuastro heavily deals with file input-output, the types it defines are fixed width types, these types are portable to all systems and are defined in the standard C header ‘stdint.h’. You don’t need to include this header, it is included by any Gnuastro header that deals with the different types. However, the most commonly used types in a C (or C++) program (for example ‘int’ or ‘long’ are not defined by their exact width (storage), but by their minimum storage. So for example on some systems, ‘int’ may be 2 bytes (16-bits, the minimum required by the standard) and on others it may be 4 bytes (32-bits, common in modern systems). With every type, a unique “blank†value (or place holder showing the absence of data) can be defined. Please see *note Library blank values:: for constants that Gnuastro recognizes as a blank value for each type. See *note Numeric data types:: for more explanation on the limits and particular aspects of each type. -- Global integer: GAL_TYPE_INVALID This is just a place holder to specifically mark that no type has been set. -- Global integer: GAL_TYPE_BIT Identifier for a bit-stream. Currently no program in Gnuastro works directly on bits, but features will be added in the future. -- Global integer: GAL_TYPE_UINT8 Identifier for an unsigned, 8-bit integer type: ‘uint8_t’ (from ‘stdint.h’), or an ‘unsigned char’ in most modern systems. -- Global integer: GAL_TYPE_INT8 Identifier for a signed, 8-bit integer type: ‘int8_t’ (from ‘stdint.h’), or an ‘signed char’ in most modern systems. -- Global integer: GAL_TYPE_UINT16 Identifier for an unsigned, 16-bit integer type: ‘uint16_t’ (from ‘stdint.h’), or an ‘unsigned short’ in most modern systems. -- Global integer: GAL_TYPE_INT16 Identifier for a signed, 16-bit integer type: ‘int16_t’ (from ‘stdint.h’), or a ‘short’ in most modern systems. -- Global integer: GAL_TYPE_UINT32 Identifier for an unsigned, 32-bit integer type: ‘uint32_t’ (from ‘stdint.h’), or an ‘unsigned int’ in most modern systems. -- Global integer: GAL_TYPE_INT32 Identifier for a signed, 32-bit integer type: ‘int32_t’ (from ‘stdint.h’), or an ‘int’ in most modern systems. -- Global integer: GAL_TYPE_UINT64 Identifier for an unsigned, 64-bit integer type: ‘uint64_t’ (from ‘stdint.h’), or an ‘unsigned long’ in most modern 64-bit systems. -- Global integer: GAL_TYPE_INT64 Identifier for a signed, 64-bit integer type: ‘int64_t’ (from ‘stdint.h’), or an ‘long’ in most modern 64-bit systems. -- Global integer: GAL_TYPE_SIZE_T Identifier for a ‘size_t’ type. This is just an alias to ‘uint32’, or ‘uint64’ types for 32-bit, or 64-bit systems respectively. -- Global integer: GAL_TYPE_LONG Identifier for a ‘long’ type. This is just an alias to ‘int32’, or ‘int64’ types for 32-bit, or 64-bit systems respectively. -- Global integer: GAL_TYPE_FLOAT32 Identifier for a 32-bit single precision floating point type or ‘float’ in C. -- Global integer: GAL_TYPE_FLOAT64 Identifier for a 64-bit double precision floating point type or ‘double’ in C. -- Global integer: GAL_TYPE_COMPLEX32 Identifier for a complex number composed of two ‘float’ types. Note that the complex type is not yet fully implemented in all Gnuastro’s programs. -- Global integer: GAL_TYPE_COMPLEX64 Identifier for a complex number composed of two ‘double’ types. Note that the complex type is not yet fully implemented in all Gnuastro’s programs. -- Global integer: GAL_TYPE_STRING Identifier for a string of characters (‘char *’). -- Global integer: GAL_TYPE_STRLL Identifier for a linked list of string of characters (‘gal_list_str_t’, see *note List of strings::). The functions below are defined to make working with the integer constants above easier. In the functions below, the constants above can be used for the ‘type’ input argument. -- Function: size_t gal_type_sizeof (uint8_t ‘type’) Return the number of bytes occupied by ‘type’. Internally, this function uses C’s ‘sizeof’ operator to measure the size of each type. -- Function: char * gal_type_name (uint8_t ‘type’, int ‘long_name’) Return a string that contains the name of ‘type’. This can be used in messages to the users when your function/program accepts many types. It can return both short and long formats of the type names (for example ‘f32’ and ‘float32’). If ‘long_name’ is non-zero, the long format will be returned, otherwise the short name will be returned. The output string is statically allocated, so it should not be freed. This function is the inverse of the ‘gal_type_from_name’ function. For the full list of names/strings that this function will return, see *note Numeric data types::. -- Function: uint8_t gal_type_from_name (char ‘*str’) Return the Gnuastro integer constant that corresponds to the string ‘str’. This function is the inverse of the ‘gal_type_name’ function and accepts both the short and long formats of each type. For the full list of names/strings that this function will return, see *note Numeric data types::. -- Function: void gal_type_min (uint8_t ‘type’, void ‘*in’) Put the minimum possible value of ‘type’ in the space pointed to by ‘in’. Since the value can have any type, this function doesn’t return anything, it assumes the space for the given type is available to ‘in’ and writes the value there. Here is one example int32_t min; gal_type_min(GAL_TYPE_INT32, &min); Note: Do not use the minimum value for a blank value of a general (initially unknown) type, please use the constants/functions provided in *note Library blank values:: for the definition and usage of blank values. -- Function: void gal_type_max (uint8_t ‘type’, void ‘*in’) Put the maximum possible value of ‘type’ in the space pointed to by ‘in’. Since the value can have any type, this function doesn’t return anything, it assumes the space for the given type is available to ‘in’ and writes the value there. Here is one example uint16_t max; gal_type_max(GAL_TYPE_INT16, &max); Note: Do not use the maximum value for a blank value of a general (initially unknown) type, please use the constants/functions provided in *note Library blank values:: for the definition and usage of blank values. -- Function: int gal_type_is_list (uint8_t ‘type’) Return 1 if the type is a linked list and zero otherwise. -- Function: int gal_type_out (int ‘first_type’, int ‘second_type’) Return the larger of the two given types which can be used for the type of the output of an operation involving the two input types. -- Function: char * gal_type_bit_string (void ‘*in’, size_t ‘size’) Return the bit-string in the ‘size’ bytes that ‘in’ points to. The string is dynamically allocated and must be freed afterwards. You can use it to inspect the bits within one region of memory. Here is one short example: int32_t a=2017; char *bitstr=gal_type_bit_string(&a, 4); printf("%d: %s (%X)\n", a, bitstr, a); free(bitstr); which will produce: 2017: 11100001000001110000000000000000 (7E1) As the example above shows, the bit-string is not the most efficient way to inspect bits. If you are familiar with hexadecimal notation, it is much more compact, see . You can use ‘printf’’s ‘%x’ or ‘%X’ to print integers in hexadecimal format. -- Function: char * gal_type_to_string (void ‘*ptr’, uint8_t ‘type’, int ‘quote_if_str_has_space’); Read the contents of the memory that ‘ptr’ points to (assuming it has type ‘type’ and print it into an allocated string which is returned. If the memory is a string of characters and ‘quote_if_str_has_space’ is non-zero, the output string will have double-quotes around it if it contains space characters. Also, note that in this case, ‘ptr’ must be a pointer to an array of characters (or ‘char **’), as in the example below (which will put ‘"sample string"’ into ‘out’): char *out, *string="sample string" out = gal_type_to_string(&string, GAL_TYPE_STRING, 1); -- Function: int gal_type_from_string (void ‘**out’, char ‘*string’, uint8_t ‘type’) Read a string as a given data type and put a the pointer to it in ‘*out’. When ‘*out!=NULL’, then it is assumed to be already allocated and the value will be simply put the memory. If ‘*out==NULL’, then space will be allocated for the given type and the string will be read into that type. Note that when we are dealing with a string type, ‘*out’ should be interpretted as ‘char **’ (one element in an array of pointers to different strings). In other words, ‘out’ should be ‘char ***’. This function can be used to fill in arrays of numbers from strings (in an already allocated data structure), or add nodes to a linked list (if the type is a list type). For an array, you have to pass the pointer to the ‘i’th element where you want the value to be stored, for example ‘&(array[i]’). If the string was successfully parsed to the requested type, this function will return a ‘0’ (zero), otherwise it will return ‘1’ (one). This output format will help you check the status of the conversion in a code like the example below: if( gal_type_from_string(&out, string, GAL_TYPE_FLOAT32) ) { fprintf(stderr, "%s couldn't be read as float32.\n", string); exit(EXIT_FAILURE); } -- Function: void * gal_type_string_to_number (char ‘*string’, uint8_t ‘*type’) Read ‘string’ into smallest type that can host the number, the allocated space for the number will be returned and the type of the number will be put into the memory that ‘type’ points to. If ‘string’ couldn’t be read as a number, this function will return ‘NULL’. For the ranges acceptable by each type see *note Numeric data types::. For integers it is clear, for floating point types, this function will count the number of significant digits and determine if the given string is single or double precision as described in that section. gnuastro-0.5/doc/gnuastro.info-20000644000175000017500000114500013217220435013564 00000000000000This is gnuastro.info, produced by makeinfo version 6.5 from gnuastro.texi. This book documents version 0.5 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2017 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation Licenseâ€. INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro’s library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeNoise: (gnuastro)MakeNoise. Make (add) noise to an image. * astmknoise: (gnuastro)Invoking astmknoise. Options to MakeNoise. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Tables, Next: Tessellation, Prev: Numeric data types, Up: Common program behavior 4.5 Tables ========== “A table is a collection of related data held in a structured format within a database. It consists of columns, and rows.†(from Wikipedia). Each column in the table contains the values of one property and each row is a collection of properties (columns) for one target object. For example, let’s assume you have just ran MakeCatalog (see *note MakeCatalog::) on an image to measure some properties for the labeled regions (which might be detected galaxies for example) in the image. For each labeled region (detected galaxy), there will be a _row_ which groups its measured properties as _columns_, one column for each property. One such property can be the object’s magnitude, which is the sum of pixels with that label, or its center can be defined as the light-weighted average value of those pixels. Many such properties can be derived from the raw pixel values and their position, see *note Invoking astmkcatalog:: for a long list. As a summary, for each labeled region (or, galaxy) we have one _row_ and for each measured property we have one _column_. This high-level structure is usually the first step for higher-level analysis, for example finding the stellar mass or photometric redshift from magnitudes in multiple colors. Thus, tables are not just outputs of programs, in fact it is much more common for tables to be inputs of programs. For example, to make a mock galaxy image, you need to feed in the properties of each galaxy into *note MakeProfiles:: for it do the inverse of the process above and make a simulated image from a catalog, see *note Sufi simulates a detection::. In other cases, you can feed a table into *note Crop:: and it will crop out regions centered on the positions within the table, see *note Hubble visually checks and classifies his catalog::. So to end this relatively long introduction, tables play a very important role in astronomy, or generally all branches of data analysis. In *note Recognized table formats:: the currently recognized table formats in Gnuastro are discussed. You can use any of these tables as input or ask for them to be built as output. The most common type of table format is a simple plain text file with each row on one line and columns separated by white space characters, this format is easy to read/write by eye/hand. To give it the full functionality of more specific table types like the FITS tables, Gnuastro has a special convention which you can use to give each column a name, type, unit, and comments, while still being readable by other plain text table readers. This convention is described in *note Gnuastro text table format::. When tables are input to a program, the program reading it needs to know which column(s) it should use for its desired purposes. Gnuastro’s programs all follow a similar convention, on the way you can select columns in a table. They are thoroughly discussed in *note Selecting table columns::. * Menu: * Recognized table formats:: Table formats that are recognized in Gnuastro. * Gnuastro text table format:: Gnuastro’s convention plain text tables. * Selecting table columns:: Identify/select certain columns from a table  File: gnuastro.info, Node: Recognized table formats, Next: Gnuastro text table format, Prev: Tables, Up: Tables 4.5.1 Recognized table formats ------------------------------ The list of table formats that Gnuastro can currently read from and write to are described below. Each has their own advantage and disadvantages, so a short review of the format is also provided to help you make the best choice based on how you want to define your input tables or later use your output tables. Plain text table This is the most basic and simplest way to create, view, or edit the table by hand on a text editor. The other formats described below are less eye-friendly and have a more formal structure (for easier computer readability). It is fully described in *note Gnuastro text table format::. FITS ASCII tables The FITS ASCII table extension is fully in ASCII encoding and thus easily readable on any text editor (assuming it is the only extension in the FITS file). If the FITS file also contains binary extensions (for example an image or binary table extensions), then there will be many hard to print characters. The FITS ASCII format doesn’t have new line characters to separate rows. In the FITS ASCII table standard, each row is defined as a fixed number of characters (value to the ‘NAXIS1’ keyword), so to visually inspect it properly, you would have to adjust your text editor’s width to this value. All columns start at given character positions and have a fixed width (number of characters). Numbers in a FITS ASCII table are printed into ASCII format, they are not in binary (that the CPU uses). Hence, they can take a larger space in memory, loose their precision, and take longer to read into memory. If you are dealing with integer type columns (see *note Numeric data types::), another issue with FITS ASCII tables is that the type information for the column will be lost (there is only one integer type in FITS ASCII tables). One problem with the binary format on the other hand is that it isn’t portable (different CPUs/compilers) have different standards for translating the zeros and ones. But since ASCII characters are defined on a byte and are well recognized, they are better for portability on those various systems. Gnuastro’s plain text table format described below is much more portable and easier to read/write/interpret by humans manually. Generally, as the name implies, this format is useful for when your table mainly contains ASCII columns (for example file names, or descriptions). They can be useful when you need to include columns with structured ASCII information along with other extensions in one FITS file. In such cases, you can also consider header keywords (see *note Fits::). FITS binary tables The FITS binary table is the FITS standard’s solution to the issues discussed with keeping numbers in ASCII format as described under the FITS ASCII table title above. Only columns defined as a string type (a string of ASCII characters) are readable in a text editor. The portability problem with binary formats discussed above is mostly solved thanks to the portability of CFITSIO (see *note CFITSIO::) and the very long history of the FITS format which has been widely used since the 1970s. In the case of most numbers, storing them in binary format is more memory efficient than ASCII format. For example, to store ‘-25.72034’ in ASCII format, you need 9 bytes/characters. But if you keep this same number (to the approximate precision possible) as a 4-byte (32-bit) floating point number, you can keep/transmit it with less than half the amount of memory. When catalogs contain thousands/millions of rows in tens/hundreds of columns, this can lead to significant improvements in memory/band-width usage. Moreover, since the CPU does its operations in the binary formats, reading the table in and writing it out is also much faster than an ASCII table. When you are dealing with integer numbers, the compression ratio can be even better, for example if you know all of the values in a column are positive and less than ‘255’, you can use the ‘unsigned char’ type which only takes one byte! If they are between ‘-128’ and ‘127’, then you can use the (signed) ‘char’ type. So if you are thoughtful about the limits of your integer columns, you can greatly reduce the size of your file and also the speed at which it is read/written. This can be very useful when sharing your results with collaborators or publishing them. To decrease the file size even more you can name your output as ending in ‘.fits.gz’ so it is also compressed after creation. Just note that compression/decompressing is CPU intensive and can slow down the writing/reading of the file. Fortunately the FITS Binary table format also accepts ASCII strings as column types (along with the various numerical types). So your dataset can also contain non-numerical columns. * Menu: * Gnuastro text table format:: Reading plain text tables  File: gnuastro.info, Node: Gnuastro text table format, Next: Selecting table columns, Prev: Recognized table formats, Up: Tables 4.5.2 Gnuastro text table format -------------------------------- Plain text files are the most generic, portable, and easiest way to (manually) create, (visually) inspect, or (manually) edit a table. In this format, the ending of a row is defined by the new-line character (a line on a text editor). So when you view it on a text editor, every row will occupy one line. The delimiters (or characters separating the columns) are white space characters (space, horizontal tab, vertical tab) and a comma (<,>). The only further requirement is that all rows/lines must have the same number of columns. The columns don’t have to be exactly under each other and the rows can be arbitrarily long with different lengths. For example the following contents in a file would be interpreted as a table with 4 columns and 2 rows, with each element interpreted as a ‘double’ type (see *note Numeric data types::). 1 2.234948 128 39.8923e8 2 , 4.454 792 72.98348e7 However, the example above has no other information about the columns (it is just raw data, with no meta-data). To use this table, you have to remember what the numbers in each column represent. Also, when you want to select columns, you have to count their position within the table. This can become frustrating and prone to bad errors (getting the columns wrong) especially as the number of columns increase. It is also bad for sending to a colleague, because they will find it hard to remember/use the columns properly. To solve these problems in Gnuastro’s programs/libraries you aren’t limited to using the column’s number, see *note Selecting table columns::. If the columns have names, units, or comments you can also select your columns based on searches/matches in these fields, for example see *note Table::. Also, in this manner, you can’t guide the program reading the table on how to read the numbers. As an example, the first and third columns above can be read as integer types: the first column might be an ID and the third can be the number of pixels an object occupies in an image. So there is no need to read these to columns as a ‘double’ type (which takes more memory, and is slower). In the bare-minimum example above, you also can’t use strings of characters, for example the names of filters, or some other identifier that includes non-numerical characters. In the absence of any information, only numbers can be read robustly. Assuming we read columns with non-numerical characters as string, there would still be the problem that the strings might contain space (or any delimiter) character for some rows. So, each ‘word’ in the string will be interpreted as a column and the program will abort with an error that the rows don’t have the same number of columns. To correct for these limitations, Gnuastro defines the following convention for storing the table meta-data along with the raw data in one plain text file. The format is primarily designed for ease of reading/writing by eye/fingers, but is also structured enough to be read by a program. When the first non-white character in a line is <#>, or there are no non-white characters in it, then the line will not be considered as a row of data in the table (this is a pretty standard convention in many programs, and higher level languages). In the former case, the line is interpreted as a _comment_. If the comment line starts with ‘‘# Column N:’’, then it is assumed to contain information about column ‘N’ (a number, counting from 1). Comment lines that don’t start with this pattern are ignored and you can use them to include any further information you want to store with the table in the text file. A column information comment is assumed to have the following format: # Column N: NAME [UNIT, TYPE, BLANK] COMMENT Any sequence of characters between ‘<:>’ and ‘<[>’ will be interpreted as the column name (so it can contain anything except the ‘<[>’ character). Anything between the ‘<]>’ and the end of the line is defined as a comment. Within the brackets, anything before the first ‘<,>’ is the units (physical units, for example km/s, or erg/s), anything before the second ‘<,>’ is the short type identifier (see below, and *note Numeric data types::). Finally (still within the brackets), any non-white characters after the second ‘<,>’ are interpreted as the blank value for that column (see *note Blank pixels::). Note that blank values will be stored in the same type as the column, not as a string(1). When a formatting problem occurs (for example you have specified the wrong type code, see below), or the the column was already given meta-data in a previous comment, or the column number is larger than the actual number of columns in the table (the non-commented or empty lines), then the comment information line will be ignored. When a comment information line can be used, the leading and trailing white space characters will be stripped from all of the elements. For example in this line: # Column 5: column name [km/s, f32,-99] Redshift as speed The ‘NAME’ field will be ‘‘column name’’ and the ‘TYPE’ field will be ‘‘f32’’. Note how all the white space characters before and after strings are not used, but those in the middle remained. Also, white space characters aren’t mandatory. Hence, in the example above, the ‘BLANK’ field will be given the value of ‘‘-99’’. Except for the column number (‘N’), the rest of the fields are optional. Also, the column information comments don’t have to be in order. In other words, the information for column $N+m$ ($m>0$) can be given in a line before column $N$. Also, you don’t have to specify information for all columns. Those columns that don’t have this information will be interpreted with the default settings (like the case above: values are double precision floating point, and the column has no name, unit, or comment). So these lines are all acceptable for any table (the first one, with nothing but the column number is redundant): # Column 5: # Column 1: ID [,i] The Clump ID. # Column 3: mag_f160w [AB mag, f] Magnitude from the F160W filter The data type of the column should be specified with one of the following values: • For a numeric column, you can use any of the numeric types (and their recognized identifiers) described in *note Numeric data types::. • ‘‘strN’’: for strings. The ‘N’ value identifies the length of the string (how many characters it has). The start of the string on each row is the first non-delimiter character of the column that has the string type. The next ‘N’ characters will be interpreted as a string and all leading and trailing white space will be removed. If the next column’s characters, are closer than ‘N’ characters to the start of the string column in that line/row, they will be considered part of the string column. If there is a new-line character before the ending of the space given to the string column (in other words, the string column is the last column), then reading of the string will stop, even if the ‘N’ characters are not complete yet. See ‘tests/table/table.txt’ for one example. Therefore, the only time you have to pay attention to the positioning and spaces given to the string column is when it is not the last column in the table. The only limitation in this format is that trailing and leading white space characters will be removed from the columns that are read. In most cases, this is the desired behavior, but if trailing and leading white-spaces are critically important to your analysis, define your own starting and ending characters and remove them after the table has been read. For example in the sample table below, the two ‘<|>’ characters (which are arbitrary) will remain in the value of the second column and you can remove them manually later. If only one of the leading or trailing white spaces is important for your work, you can only use one of the ‘<|>’s. # Column 1: ID [label, uc] # Column 2: Notes [no unit, str50] 1 leading and trailing white space is ignored here 2.3442e10 2 | but they will be preserved here | 8.2964e11 Note that the FITS binary table standard does not define the ‘unsigned int’ and ‘unsigned long’ types, so if you want to convert your tables to FITS binary tables, use other types. Also, note that in the FITS ASCII table, there is only one integer type (‘long’). So if you convert a Gnuastro plain text table to a FITS ASCII table with the *note Table:: program, the type information for integers will be lost. Conversely if integer types are important for you, you have to manually set them when reading a FITS ASCII table (for example with the Table program when reading/converting into a file, or with the ‘gnuastro/table.h’ library functions when reading into memory). ---------- Footnotes ---------- (1) For floating point types, the ‘nan’, or ‘inf’ strings (both not case-sensitive) refer to IEEE NaN (not a number) and infinity values respectively and will be stored as a floating point, so they are acceptable.  File: gnuastro.info, Node: Selecting table columns, Prev: Gnuastro text table format, Up: Tables 4.5.3 Selecting table columns ----------------------------- At the lowest level, the only defining aspect of a column in a table is its number, or position. But selecting columns purely by number is not very convenient and, especially when the tables are large it can be very frustrating and prone to errors. Hence, table file formats (for example see *note Recognized table formats::) have ways to store additional information about the columns (meta-data). Some of the most common pieces of information about each column are its _name_, the _units_ of data in the it, and a _comment_ for longer/informal description of the column’s data. To facilitate research with Gnuastro, you can select columns by matching, or searching in these three fields, besides the low-level column number. To view the full list of information on the columns in the table, you can use the Table program (see *note Table::) with the command below (replace ‘table-file’ with the filename of your table, if its FITS, you might also need to specify the HDU/extension which contains the table): $ asttable --information table-file Gnuastro’s programs need the columns for different purposes, for example in Crop, you specify the columns containing the central coordinates of the crop centers with the ‘--coordcol’ option (see *note Crop options::). On the other hand, in MakeProfiles, to specify the column containing the profile position angles, you must use the ‘--pcol’ option (see *note MakeProfiles catalog::). Thus, there can be no unified common option name to select columns for all programs (different columns have different purposes). However, when the program expects a column for a specific context, the option names end in the ‘col’ suffix like the examples above. These options accept values in integer (column number), or string (metadata match/search) format. If the value can be parsed as a positive integer, it will be seen as the low-level column number. Note that column counting starts from 1, so if you ask for column 0, the respective program will abort with an error. When the value can’t be interpreted as an a integer number, it will be seen as a string of characters which will be used to match/search in the table’s meta-data. The meta-data field which the value will be compared with can be selected through the ‘--searchin’ option, see *note Input output options::. ‘--searchin’ can take three values: ‘name’, ‘unit’, ‘comment’. The matching will be done following this convention: • If the value is enclosed in two slashes (for example ‘-x/RA_/’, or ‘--coordcol=/RA_/’, see *note Crop options::), then it is assumed to be a regular expression with the same convention as GNU AWK. GNU AWK has a very well written chapter (https://www.gnu.org/software/gawk/manual/html_node/Regexp.html) describing regular expressions, so we we will not continue discussing them here. Regular expressions are a very powerful tool in matching text and useful in many contexts. We thus strongly encourage reviewing this chapter for greatly improving the quality of your work in many cases, not just for searching column meta-data in Gnuastro. • When the string isn’t enclosed between ‘’s, any column that exactly matches the given value in the given field will be selected. Note that in both cases, you can ignore the case of alphabetic characters with the ‘--ignorecase’ option, see *note Input output options::. Also, in both cases, multiple columns may be selected with one call to this function. In this case, the order of the selected columns (with one call) will be the same order as they appear in the table.  File: gnuastro.info, Node: Tessellation, Next: Getting help, Prev: Tables, Up: Common program behavior 4.6 Tessellation ================ It is sometimes necessary to classify the elements in a dataset (for example pixels in an image) into a grid of individual, non-overlapping tiles. For example when background sky gradients are present in an image, you can define a tile grid over the image. When the tile sizes are set properly, the background’s variation over each tile will be negligible, allowing you to measure (and subtract) it. In other cases (for example spatial domain convolution in Gnuastro, see *note Convolve::), it might simply be for speed of processing: each tile can be processed independently on a separate CPU thread. In the arts and mathematics, this process is formally known as tessellation (https://en.wikipedia.org/wiki/Tessellation). The size of the regular tiles (in units of data-elements, or pixels in an image) can be defined with the ‘--tilesize’ option. It takes multiple numbers (separated by a comma) which will be the length along the respective dimension (in FORTRAN/FITS dimension order). Divisions are also acceptable, but must result in an integer. For example ‘--tilesize=30,40’ can be used for an image (a 2D dataset). The regular tile size along the first FITS axis (horizontal when viewed in SAO ds9) will be 30 pixels and along the second it will be 40 pixels. Ideally, ‘--tilesize’ should be selected such that all tiles in the image have exactly the same size. In other words, that the dataset length in each dimension is divisible by the tile size in that dimension. However, this is not always possible: the dataset can be any size and every pixel in it is valuable. In such cases, Gnuastro will look at the significance of the remainder length, if it is not significant (for example one or two pixels), then it will just increase the size of the first tile in the respective dimension and allow the rest of the tiles to have the required size. When the remainder is significant (for example one pixel less than the size along that dimension), the remainder will be added to one regular tile’s size and the large tile will be cut in half and put in the two ends of the grid/tessellation. In this way, all the tiles in the central regions of the dataset will have the regular tile sizes and the tiles on the edge will be slightly larger/smaller depending on the remainder significance. The fraction which defines the remainder significance along all dimensions can be set through ‘--remainderfrac’. The best tile size is directly related to the spatial properties of the property you want to study (for example, gradient on the image). In practice we assume that the gradient is not present over each tile. So if there is a strong gradient (for example in long wavelength ground based images) or the image is of a crowded area where there isn’t too much blank area, you have to choose a smaller tile size. A larger mesh will give more pixels and and so the scatter in the results will be less (better statistics). For raw image processing, a single tessellation/grid is not sufficient. Raw images are the unprocessed outputs of the camera detectors. Modern detectors usually have multiple readout channels each with its own amplifier. For example the Hubble Space Telescope Advanced Camera for Surveys (ACS) has four amplifiers over its full detector area dividing the square field of view to four smaller squares. Ground based image detectors are not exempt, for example each CCD of Subaru Telescope’s Hyper Suprime-Cam camera (which has 104 CCDs) has four amplifiers, but they have the same height of the CCD and divide the width by four parts. The bias current on each amplifier is different, and initial bias subtraction is not perfect. So even after subtracting the measured bias current, you can usually still identify the boundaries of different amplifiers by eye. See Figure 11(a) in Akhlaghi and Ichikawa (2015) for an example. This results in the final reduced data to have non-uniform amplifier-shaped regions with higher or lower background flux values. Such systematic biases will then propagate to all subsequent measurements we do on the data (for example photometry and subsequent stellar mass and star formation rate measurements in the case of galaxies). Therefore an accurate analysis requires a two layer tessellation: the top layer contains larger tiles, each covering one amplifier channel. For clarity we’ll call these larger tiles “channelsâ€. The number of channels along each dimension is defined through the ‘--numchannels’. Each channel is then covered by its own individual smaller tessellation (with tile sizes determined by the ‘--tilesize’ option). This will allow independent analysis of two adjacent pixels from different channels if necessary. If the image is processed or the detector only has one amplifier, you can set the number of channels in both dimension to 1. The final tessellation can be inspected on the image with the ‘--checktiles’ option that is available to all programs which use tessellation for localized operations. When this option is called, a FITS file with a ‘_tiled.fits’ suffix will be created along with the outputs, see *note Automatic output::. Each pixel in this image has the number of the tile that covers it. If the number of channels in any dimension are larger than unity, you will notice that the tile IDs are defined such that the first channels is covered first, then the second and so on. For the full list of processing-related common options (including tessellation options), please see *note Processing options::.  File: gnuastro.info, Node: Getting help, Next: Automatic output, Prev: Tessellation, Up: Common program behavior 4.7 Getting help ================ Probably the first time you read this book, it is either in the PDF or HTML formats. These two formats are very convenient for when you are not actually working, but when you are only reading. Later on, when you start to use the programs and you are deep in the middle of your work, some of the details will inevitably be forgotten. Going to find the PDF file (printed or digital) or the HTML webpage is a major distraction. GNU software have a very unique set of tools for aiding your memory on the command-line, where you are working, depending how much of it you need to remember. In the past, such command-line help was known as “online†help, because they were literally provided to you ‘on’ the command ‘line’. However, nowadays the word “online†refers to something on the internet, so that term will not be used. With this type of help, you can resume your exciting research without taking your hands off the keyboard. Another major advantage of such command-line based help routines is that they are installed with the software in your computer, therefore they are always in sync with the executable you are actually running. Three of them are actually part of the executable. You don’t have to worry about the version of the book or program. If you rely on external help (a PDF in your personal print or digital archive or HTML from the official webpage) you have to check to see if their versions fit with your installed program. If you only need to remember the short or long names of the options, ‘--usage’ is advised. If it is what the options do, then ‘--help’ is a great tool. Man pages are also provided for those who are use to this older system of documentation. This full book is also available to you on the command-line in Info format. If none of these seems to resolve the problems, there is a mailing list which enables you to get in touch with experienced Gnuastro users. In the subsections below each of these methods are reviewed. * Menu: * --usage:: View option names and value formats. * --help:: List all options with description. * Man pages:: Man pages generated from –help. * Info:: View complete book in terminal. * help-gnuastro mailing list:: Contacting experienced users.  File: gnuastro.info, Node: --usage, Next: --help, Prev: Getting help, Up: Getting help 4.7.1 ‘--usage’ --------------- If you give this option, the program will not run. It will only print a very concise message showing the options and arguments. Everything within square brackets (‘[]’) is optional. For example here are the first and last two lines of Crop’s ‘--usage’ is shown: $ astcrop --usage Usage: astcrop [-Do?IPqSVW] [-d INT] [-h INT] [-r INT] [-w INT] [-x INT] [-y INT] [-c INT] [-p STR] [-N INT] [--deccol=INT] .... [--setusrconf] [--usage] [--version] [--wcsmode] [ASCIIcatalog] FITSimage(s).fits There are no explanations on the options, just their short and long names shown separately. After the program name, the short format of all the options that don’t require a value (on/off options) is displayed. Those that do require a value then follow in separate brackets, each displaying the format of the input they want, see *note Options::. Since all options are optional, they are shown in square brackets, but arguments can also be optional. For example in this example, a catalog name is optional and is only required in some modes. This is a standard method of displaying optional arguments for all GNU software.  File: gnuastro.info, Node: --help, Next: Man pages, Prev: --usage, Up: Getting help 4.7.2 ‘--help’ -------------- If the command-line includes this option, the program will not be run. It will print a complete list of all available options along with a short explanation. The options are also grouped by their context. Within each context, the options are sorted alphabetically. Since the options are shown in detail afterwards, the first line of the ‘--help’ output shows the arguments and if they are optional or not, similar to *note --usage::. In the ‘--help’ output of all programs in Gnuastro, the options for each program are classified based on context. The first two contexts are always options to do with the input and output respectively. For example input image extensions or supplementary input files for the inputs. The last class of options is also fixed in all of Gnuastro, it shows operating mode options. Most of these options are already explained in *note Operating mode options::. The help message will sometimes be longer than the vertical size of your terminal. If you are using a graphical user interface terminal emulator, you can scroll the terminal with your mouse, but we promised no mice distractions! So here are some suggestions: • to scroll up and to scroll down. For most help output this should be enough. The problem is that it is limited by the number of lines that your terminal keeps in memory and that you can’t scroll by lines, only by whole screens. • Pipe to ‘less’. A pipe is a form of shell re-direction. The ‘less’ tool in Unix-like systems was made exactly for such outputs of any length. You can pipe (‘|’) the output of any program that is longer than the screen to it and then you can scroll through (up and down) with its many tools. For example: $ astnoisechisel --help | less Once you have gone through the text, you can quit ‘less’ by pressing the key. • Redirect to a file. This is a less convenient way, because you will then have to open the file in a text editor! You can do this with the shell redirection tool (‘>’): $ astnoisechisel --help > filename.txt In case you have a special keyword you are looking for in the help, you don’t have to go through the full list. GNU Grep is made for this job. For example if you only want the list of options whose ‘--help’ output contains the word “axis†in Crop, you can run the following command: $ astcrop --help | grep axis If the output of this option does not fit nicely within the confines of your terminal, GNU does enable you to customize its output through the environment variable ‘ARGP_HELP_FMT’, you can set various parameters which specify the formatting of the help messages. For example if your terminals are wider than 70 spaces (say 100) and you feel there is too much empty space between the long options and the short explanation, you can change these formats by giving values to this environment variable before running the program with the ‘--help’ output. You can define this environment variable in this manner: $ export ARGP_HELP_FMT=rmargin=100,opt-doc-col=20 This will affect all GNU programs using GNU C library’s ‘argp.h’ facilities as long as the environment variable is in memory. You can see the full list of these formatting parameters in the “Argp User Customization†part of the GNU C library manual. If you are more comfortable to read the ‘--help’ outputs of all GNU software in your customized format, you can add your customizations (similar to the line above, without the ‘$’ sign) to your ‘~/.bashrc’ file. This is a standard option for all GNU software.  File: gnuastro.info, Node: Man pages, Next: Info, Prev: --help, Up: Getting help 4.7.3 Man pages --------------- Man pages were the Unix method of providing command-line documentation to a program. With GNU Info, see *note Info:: the usage of this method of documentation is highly discouraged. This is because Info provides a much more easier to navigate and read environment. However, some operating systems require a man page for packages that are installed and some people are still used to this method of command line help. So the programs in Gnuastro also have Man pages which are automatically generated from the outputs of ‘--version’ and ‘--help’ using the GNU help2man program. So if you run $ man programname You will be provided with a man page listing the options in the standard manner.  File: gnuastro.info, Node: Info, Next: help-gnuastro mailing list, Prev: Man pages, Up: Getting help 4.7.4 Info ---------- Info is the standard documentation format for all GNU software. It is a very useful command-line document viewing format, fully equipped with links between the various pages and menus and search capabilities. As explained before, the best thing about it is that it is available for you the moment you need to refresh your memory on any command-line tool in the middle of your work without having to take your hands off the keyboard. This complete book is available in Info format and can be accessed from anywhere on the command-line. To open the Info format of any installed programs or library on your system which has an Info format book, you can simply run the command below (change ‘executablename’ to the executable name of the program or library): $ info executablename In case you are not already familiar with it, run ‘$ info info’. It does a fantastic job in explaining all its capabilities its self. It is very short and you will become sufficiently fluent in about half an hour. Since all GNU software documentation is also provided in Info, your whole GNU/Linux life will significantly improve. Once you’ve become an efficient navigator in Info, you can go to any part of this book or any other GNU software or library manual, no matter how long it is, in a matter of seconds. It also blends nicely with GNU Emacs (a text editor) and you can search manuals while you are writing your document or programs without taking your hands off the keyboard, this is most useful for libraries like the GNU C library. To be able to access all the Info manuals installed in your GNU/Linux within Emacs, type . To see this whole book from the beginning in Info, you can run $ info gnuastro If you run Info with the particular program executable name, for example ‘astcrop’ or ‘astnoisechisel’: $ info astprogramname you will be taken to the section titled “Invoking ProgramName†which explains the inputs and outputs along with the command-line options for that program. Finally, if you run Info with the official program name, for example Crop or NoiseChisel: $ info ProgramName you will be taken to the top section which introduces the program. Note that in all cases, Info is not case sensitive.  File: gnuastro.info, Node: help-gnuastro mailing list, Prev: Info, Up: Getting help 4.7.5 help-gnuastro mailing list -------------------------------- Gnuastro maintains the help-gnuastro mailing list for users to ask any questions related to Gnuastro. The experienced Gnuastro users and some of its developers are subscribed to this mailing list and your email will be sent to them immediately. However, when contacting this mailing list please have in mind that they are possibly very busy and might not be able to answer immediately. To ask a question from this mailing list, send a mail to ‘help-gnuastro@gnu.org’. Anyone can view the mailing list archives at . It is best that before sending a mail, you search the archives to see if anyone has asked a question similar to yours. If you want to make a suggestion or report a bug, please don’t send a mail to this mailing list. We have other mailing lists and tools for those purposes, see *note Report a bug:: or *note Suggest new feature::.  File: gnuastro.info, Node: Automatic output, Next: Output headers, Prev: Getting help, Up: Common program behavior 4.8 Automatic output ==================== All the programs in Gnuastro are designed such that specifying an output file or directory (based on the program context) is optional. The outputs of most programs are automatically found based on the input and what the program does. For example when you are converting a FITS image named ‘FITSimage.fits’ to a JPEG image, the JPEG image will be saved in ‘FITSimage.jpg’. Another very important part of the automatic output generation is that all the directory information of the input file name is stripped off of it. This feature can be disabled with the ‘--keepinputdir’ option, see *note Common options::. It is the default because astronomical data are usually very large and organized specially with special file names. In some cases, the user might not have write permissions in those directories. In fact, even if the data is stored on your own computer, it is advised to only grant write permissions to the super user or root. This way, you won’t accidentally delete or modify your valuable data! Let’s assume that we are working on a report and want to process the FITS images from two projects (ABC and DEF), which are stored in the sub-directories named ‘ABCproject/’ and ‘DEFproject/’ of our top data directory (‘/mnt/data’). The following shell commands show how one image from the former is first converted to a JPEG image through ConvertType and then the objects from an image in the latter project are detected using NoiseChisel. The text after the ‘#’ sign are comments (not typed!). $ pwd # Current location /home/usrname/research/report $ ls # List directory contents ABC01.jpg $ ls /mnt/data/ABCproject # Archive 1 ABC01.fits ABC02.fits ABC03.fits $ ls /mnt/data/DEFproject # Archive 2 DEF01.fits DEF02.fits DEF03.fits $ astconvertt /mnt/data/ABCproject/ABC02.fits --output=jpg # Prog 1 $ ls ABC01.jpg ABC02.jpg $ astnoisechisel /mnt/data/DEFproject/DEF01.fits # Prog 2 $ ls ABC01.jpg ABC02.jpg DEF01_labeled.fits  File: gnuastro.info, Node: Output headers, Prev: Automatic output, Up: Common program behavior 4.9 Output headers ================== The output FITS files created by Gnuastro’s programs have some or all of the following standard keywords to keep the basic date and version information of Gnuastro, its dependencies and the pipeline that is using Gnuastro. ‘DATE’ The creation time of the FITS file. This date is written directly by CFITSIO and is in UT format. ‘COMMIT’ Git’s commit description from the running directory of Gnuastro’s programs. If the running directory is not version controlled or ‘libgit2’ isn’t installed (see *note Optional dependencies::) then this keyword will not be present. The printed value is equivalent to the output of the following command: git describe --dirty --always If the running directory contains non-committed work, then the stored value will have a ‘‘-dirty’’ suffix. This can be very helpful to let you know that the data is not ready to be shared with collaborators or submitted to a journal. You should only share results that are produced after all your work is committed (safely stored in the version controlled history and thus reproducible). At first sight, version control appears to be mainly a tool for software developers. However progress in a scientific research is almost identical to progress in software development: first you have a rough idea that starts with handful of easy steps. But as the first results appear to be promising, you will have to extend, or generalize, it to make it more robust and work in all the situations your research covers, not just your first test samples. Slowly you will find wrong assumptions or bad implementations that need to be fixed (‘bugs’ in software development parlance). Finally, when you submit the research to your collaborators or a journal, many comments and suggestions will come in, and you have to address them. Software developers have created version control systems precisely for this kind of activity. Each significant moment in the project’s history is called a “commitâ€, see *note Version controlled source::. A snapshot of the project in each “commit†is safely stored away, so you can revert back to it at a later time, or check changes/progress. This way, you can be sure that your work is reproducible and track the progress and history. With version control, experimentation in the project’s analysis is greatly facilitated, since you can easily revert back if a brainstorm test procedure fails. One important feature of version control is that the research result (FITS image, table, report or paper) can be stamped with the unique commit information that produced it. This information will enable you to exactly reproduce that same result later, even if you have made changes/progress. For one example of a research paper’s reproduction pipeline, please see the reproduction pipeline (https://gitlab.com/makhlaghi/NoiseChisel-paper) of the paper (https://arxiv.org/abs/1505.01664) describing *note NoiseChisel::. ‘CFITSIO’ The version of CFITSIO used (see *note CFITSIO::). ‘WCSLIB’ The version of WCSLIB used (see *note WCSLIB::). Note that older versions of WCSLIB do not report the version internally. So this is only available if you are using more recent WCSLIB versions. ‘GSL’ The version of GNU Scientific Library that was used, see *note GNU Scientific Library::. ‘GNUASTRO’ The version of Gnuastro used (see *note Version numbering::). Here is one example of the last few lines of an example output. / Versions and date DATE = '...' / file creation date COMMIT = 'v0-8-g547f6eb' / Commit description in running dir. CFITSIO = '3.41 ' / CFITSIO version. WCSLIB = '5.16 ' / WCSLIB version. GSL = '2.3 ' / GNU Scientific Library version. GNUASTRO= '0.3' / GNU Astronomy Utilities version. END  File: gnuastro.info, Node: Data containers, Next: Data manipulation, Prev: Common program behavior, Up: Top 5 Data containers ***************** The most low-level and basic property of a dataset is how it is stored. To process, archive and transmit the data, you need a container to store it first. From the start of the computer age, different formats have been defined to store data, optimized for particular applications. One format/container can never be useful for all applications: the storage defines the application and vice-versa. In astronomy, the Flexible Image Transport System (FITS) standard has become the most common format of data storage and transmission. It has many useful features, for example multiple sub-containers (also known as extensions or header data units, HDUs) within one file, or support for tables as well as images. Each HDU can store an independent dataset and its corresponding meta-data. Therefore, Gnuastro has one program (see *note Fits::) specifically designed to manipulate FITS HDUs and the meta-data (header keywords) in each HDU. Your astronomical research does not just involve data analysis (where the FITS format is very useful). For example you want to demonstrate your raw and processed FITS images or spectra as figures within slides, reports, or papers. The FITS format is not defined for such applications. Thus, Gnuastro also comes with the ConvertType program (see *note ConvertType::) which can be used to convert a FITS image to and from (where possible) other formats like plain text and JPEG (which allow two way conversion), along with EPS and PDF (which can only be created from FITS, not the other way round). Finally, the FITS format is not just for images, it can also store tables. Binary tables in particular can be very efficient in storing catalogs that have more than a few tens of columns and rows. However, unlike images (where all elements/pixels have one data type), tables contain multiple columns and each column can have different properties: independent data types (see *note Numeric data types::) and meta-data. In practice, each column can be viewed as a separate container that is grouped with others in the table. The only shared property of the columns in a table is thus the number of elements they contain. To allow easy inspection/manipulation of table columns, Gnuastro has the Table program (see *note Table::). It can be used to select certain table columns in a FITS table and see them as a human readable output on the command-line, or to save them into another plain text or FITS table. * Menu: * Fits:: View and manipulate extensions and keywords. * ConvertType:: Convert data to various formats. * Table:: Read and Write FITS tables to plain text.  File: gnuastro.info, Node: Fits, Next: ConvertType, Prev: Data containers, Up: Data containers 5.1 Fits ======== The “Flexible Image Transport Systemâ€, or FITS, is by far the most common data container format in astronomy. Although the full name of the standard invokes the idea that it is only for images, it also contains very complete and robust features for tables. It started off in the 1970s and was formally published as a standard in 1981, it was adopted by the International Astronomical Union (IAU) in 1982 and an IAU working group to maintain its future was defined in 1988. The FITS 2.0 and 3.0 standards were approved in 2000 and 2008 respectively, and the 4.0 draft has also been released recently, please see the FITS standard document webpage (https://fits.gsfc.nasa.gov/fits_standard.html) for the full text of all versions. Also see the FITS 3.0 standard paper (https://doi.org/10.1051/0004-6361/201015362) for a nice introduction and history along with the full standard. Other formats, for example a JPEG image, only have one image/dataset per file, however one great advantage of the FITS standard is that it allows you to keep multiple datasets (images or tables along with their meta-data) in one file. Each data + metadata is known as an extension, or more formally a header data unit or HDU, in the FITS standard. In theory the HDUs can be completely independent: you can have multiple images of different dimensions/sizes or tables as separate extensions in one file. However, while the standard doesn’t impose any constraints on the relation between the datasets, it is strongly encouraged to group data that are contextually related with each other in one file. For example an image and the table/catalog of objects and their measured properties in that image. Another example can be multiple images of one patch of sky in different colors (filters). As discussed above, the extensions in a FITS file can be completely independent. To keep some information (meta-data) about the group of extensions in the FITS file, the community has adopted the following convention: put no data in the first extension, so it is just meta-data. This extension can thus be used to store Meta-data regarding the whole file (grouping of extensions). Subsequent extensions may contain data along with their own separate meta-data. All of Gnuastro’s programs also follow this convention: the main dataset (image or table) is in the second extension. See the example list of extension properties in *note Invoking astfits::. The meta-data contain information about the data, for example which region of the sky an image corresponds to, the units of the data, what telescope, camera, and filter the data were taken with, the software that produced it, or it observation or processing date. Hence without the meta-data, the raw dataset is practically just a collection of numbers and really hard to understand, or connect with the real world (other datasets). It is thus strongly encouraged to supplement your data (at any level of processing) with as much meta-data about your processing/science as possible. The meta-data of a FITS file is in ASCII format, which can be easily viewed or edited with a text editor or on the command-line. Each meta-data element (known as a keyword generally) is composed of a name, value, units and comments (the last two are optional). For example below you can see three FITS meta-data keywords for specifying the world coordinate system (WCS, or its location in the sky) of a dataset: LATPOLE = -27.805089 / [deg] Native latitude of celestial pole RADESYS = 'FK5' / Equatorial coordinate system EQUINOX = 2000.0 / [yr] Equinox of equatorial coordinates However, there are some limitations which discourage viewing/editing the keywords with text editors. For example there is a fixed length of 80 characters for each keyword (its name, value, units and comments) and there are no new-line characters, so on a text editor all the keywords are seen in one line. Also, the meta-data keywords are immediately followed by the data which are commonly in binary format and will show up as strange looking characters on a text editor, and significantly slowing down the processor. Gnuastro’s Fits program was designed to allow easy manipulation of FITS extensions and meta-data keywords on the command-line while conforming fully with the FITS standard. For example you can copy or cut (copy and remove) HDUs/extensions from one FITS file to another, or completely delete them. It also has features to delete, add, or edit meta-data keywords within one HDU. * Menu: * Invoking astfits:: Arguments and options to Header.  File: gnuastro.info, Node: Invoking astfits, Prev: Fits, Up: Fits 5.1.1 Invoking Fits ------------------- Fits can print or manipulate the FITS file HDUs (extensions), meta-data keywords in a given HDU. The executable name is ‘astfits’ with the following general template $ astfits [OPTION...] ASTRdata One line examples: ## View general information about every extension: $ astfits image.fits ## Print the header keywords in the second HDU (counting from 0): $ astfits image.fits -h1 ## Only print header keywords that contain `NAXIS': $ astfits image.fits -h1 | grep NAXIS ## Only print the WCS standard PC matrix elements $ astfits image.fits -h1 | grep 'PC._.' ## Copy a HDU from input.fits to out.fits: $ astfits input.fits --copy=hdu-name --output=out.fits ## Update the OLDKEY keyword value to 153.034: $ astfits --update=OLDKEY,153.034,"Old keyword comment" ## Delete one COMMENT keyword and add a new one: $ astfits --delete=COMMENT --comment="Anything you like ;-)." ## Write two new keywords with different values and comments: $ astfits --write=MYKEY1,20.00,"An example keyword" --write=MYKEY2,fd When no action is requested (and only a file name is given), Fits will print a list of information about the extension(s) in the file. This information includes the HDU number, HDU name (‘EXTNAME’ keyword), type of data (see *note Numeric data types::, and the number of data elements it contains (size along each dimension for images and table rows and columns). You can use this to get a general idea of the contents of the FITS file and what HDU to use for further processing, either with the Fits program or any other Gnuastro program. Here is one example of information about a FITS file with four extensions: the first extension has no data, it is a purely meta-data HDU (commonly used to keep meta-data about the whole file, or grouping of extensions, see *note Fits::). The second extension is an image with name ‘IMAGE’ and single precision floating point type (‘float32’, see *note Numeric data types::), it has 4287 pixels along its first (horizontal) axis and 4286 pixels along its second (vertical) axis. The third extension is also an image with name ‘MASK’. It is in 2-byte integer format (‘int16’) which is commonly used to keep information about pixels (for example to identify which ones were saturated, or which ones had cosmic rays and so on), note how it has the same size as the ‘IMAGE’ extension. The third extension is a binary table called ‘CATALOG’ which has 12371 rows and 5 columns (it probably contains information about the sources in the image). GNU Astronomy Utilities X.X Run on Day Month DD HH:MM:SS YYYY ----- HDU (extension) information: `image.fits'. Column 1: Index (counting from 0). Column 2: Name (`EXTNAME' in FITS standard). Column 3: Image data type or `table' format (ASCII or binary). Column 4: Size of data in HDU. ----- 0 n/a uint8 0 1 IMAGE float32 4287x4286 2 MASK int16 4287x4286 3 CATALOG table_binary 12371x5 If a specific HDU is identified on the command-line with the ‘--hdu’ (or ‘-h’ option) and no operation requested, then the full list of header keywords in that HDU will be printed (as if the ‘--printallkeys’ was called, see below). It is important to remember that this only occurs when ‘--hdu’ is given on the command-line. The ‘--hdu’ value given in a configuration file will only be used when a specific operation on keywords requested. Therefore as described in the paragraphs above, when no explicit call to the ‘--hdu’ option is made on the command-line and no operation is requested (on the command-line or configuration files), the basic information of each HDU/extension is printed. The operating mode and input/output options to Fits are similar to the other programs and fully described in *note Common options::. The options particular to Fits can be divided into two groups: 1) those related to modifying HDUs or extensions (see *note HDU manipulation::), and 2) those related to viewing/modifying meta-data keywords (see *note Keyword manipulation::). These two classes of options cannot be called together in one run: you can either work on the extensions or meta-data keywords in any instance of Fits. * Menu: * HDU manipulation:: Manipulate HDUs within a FITS file. * Keyword manipulation:: Manipulate metadata keywords in a HDU  File: gnuastro.info, Node: HDU manipulation, Next: Keyword manipulation, Prev: Invoking astfits, Up: Invoking astfits 5.1.1.1 HDU manipulation ........................ Each header data unit, or HDU (also known as an extension), in a FITS file is an independent dataset (data + meta-data). Multiple HDUs can be stored in one FITS file, see *note Fits::. The HDU modifying options to the Fits program are listed below. These options may be called multiple times in one run. If so, the extensions will be copied from the input FITS file to the output FITS file in the given order (on the command-line and also in configuration files, see *note Configuration file precedence::). If the separate classes are called together in one run of Fits, then first ‘--copy’ is run (on all specified HDUs), followed by ‘--cut’ (again on all specified HDUs), and then ‘--remove’ (on all specified HDUs). The ‘--copy’ and ‘--cut’ options need an output FITS file (specified with the ‘--output’ option). If the output file exists, then the specified HDU will be copied following the last extension of the output file (the existing HDUs in it will be untouched). Thus, after Fits finishes, the copied HDU will be the last HDU of the output file. If no output file name is given, then automatic output will be used to store the HDUs given to this option (see *note Automatic output::). ‘-C STR’ ‘--copy=STR’ Copy the specified extension into the output file, see explanations above. ‘-k STR’ ‘--cut=STR’ Cut (copy to output, remove from input) the specified extension into the output file, see explanations above. ‘-R STR’ ‘--remove=STR’ Remove the specified HDU from the input file. From CFITSIO: “In the case of deleting the primary array (the first HDU in the file) then [it] will be replaced by a null primary array containing the minimum set of required keywords and no data.â€. So in practice, any existing data (array) and meta-data in the first extension will be removed, but the number of extensions in the file won’t change. This is because of the unique position the first FITS extension has in the FITS standard (for example it cannot be used to store tables).  File: gnuastro.info, Node: Keyword manipulation, Prev: HDU manipulation, Up: Invoking astfits 5.1.1.2 Keyword manipulation ............................ The meta-data in each header data unit, or HDU (also known as extension, see *note Fits::) is stored as “keywordâ€s. Each keyword consists of a name, value, unit, and comments. The Fits program (see *note Fits::) options related to viewing and manipulating keywords in a FITS HDU are described below. To see the full list of keywords in a FITS HDU, you can use the ‘--printallkeys’ option. If any of the keywords are to be modified, the headers of the input file will be changed. If you want to keep the original FITS file or HDU, it is easiest to create a copy first and then run Fits on that. In the FITS standard, keywords are always uppercase. So case does not matter in the input or output keyword names you specify. Most of the options can accept multiple instances in one command. For example you can add multiple keywords to delete by calling ‘--delete’ multiple times, since repeated keywords are allowed, you can even delete the same keyword multiple times. The action of such options will start from the top most keyword. The precedence of operations are described below. Note that while the order within each class of actions is preserved, the order of individual actions is not. So irrespective of what order you called ‘--delete’ and ‘--update’. First, all the delete operations are going to take effect then the update operations. 1. ‘--delete’ 2. ‘--rename’ 3. ‘--update’ 4. ‘--write’ 5. ‘--asis’ 6. ‘--history’ 7. ‘--comment’ 8. ‘--date’ 9. ‘--printallkeys’ All possible syntax errors will be reported before the keywords are actually written. FITS errors during any of these actions will be reported, but Fits won’t stop until all the operations are complete. If ‘--quitonerror’ is called, then Fits will immediately stop upon the first error. If you want to inspect only a certain set of header keywords, it is easiest to pipe the output of the Fits program to GNU Grep. Grep is a very powerful and advanced tool to search strings which is precisely made for such situations. For example if you only want to check the size of an image FITS HDU, you can run: $ astfits input.fits | grep NAXIS *FITS STANDARD KEYWORDS:* Some header keywords are necessary for later operations on a FITS file, for example BITPIX or NAXIS, see the FITS standard for their full list. If you modify (for example remove or rename) such keywords, the FITS file extension might not be usable any more. Also be careful for the world coordinate system keywords, if you modify or change their values, any future world coordinate system (like RA and Dec) measurements on the image will also change. The keyword related options to the Fits program are fully described below. ‘-a STR’ ‘--asis=STR’ Write ‘STR’ exactly into the FITS file header with no modifications. If it does not conform to the FITS standards, then it might cause trouble, so please be very careful with this option. If you want to define the keyword from scratch, it is best to use the ‘--write’ option (see below) and let CFITSIO worry about the standards. The best way to use this option is when you want to add a keyword from one FITS file to another unchanged and untouched. Below is an example of such a case that can be very useful sometimes (on the command-line or in scripts): $ key=$(astfits firstimage.fits | grep KEYWORD) $ astfits --asis="$key" secondimage.fits In particular note the double quotation signs (<">) around the reference to the ‘key’ shell variable (‘$key’), since FITS keywords usually have lots of space characters, if this variable is not quoted, the shell will only give the first word in the full keyword to this option, which will definitely be a non-standard FITS keyword and will make it hard to work on the file afterwords. See the “Quoting†section of the GNU Bash manual for more information if your keyword has the special characters <$>, <`>, or <\>. ‘-d STR’ ‘--delete=STR’ Delete one instance of the ‘STR’ keyword from the FITS header. Multiple instances of ‘--delete’ can be given (possibly even for the same keyword, when its repeated in the meta-data). All keywords given will be removed from the headers in the same given order. If the keyword doesn’t exist, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. ‘-r STR’ ‘--rename=STR’ Rename a keyword to a new value. ‘STR’ contains both the existing and new names, which should be separated by either a comma (<,>) or a space character. Note that if you use a space character, you have to put the value to this option within double quotation marks (<">) so the space character is not interpreted as an option separator. Multiple instances of ‘--rename’ can be given in one command. The keywords will be renamed in the specified order. If the keyword doesn’t exist, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. ‘-u STR’ ‘--update=STR’ Update a keyword, its value, its comments and its units in the format described below. If there are multiple instances of the keyword in the header, they will be changed from top to bottom (with multiple ‘--update’ options). The format of the values to this option can best be specified with an example: --update=KEYWORD,value,"comments for this keyword",unit If there is a writing error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. The value can be any numerical or string value(1). Other than the ‘KEYWORD’, all the other values are optional. To leave a given token empty, follow the preceding comma (<,>) immediately with the next. If any space character is present around the commas, it will be considered part of the respective token. So if more than one token has space characters within it, the safest method to specify a value to this option is to put double quotation marks around each individual token that needs it. Note that without double quotation marks, space characters will be seen as option separators and can lead to undefined behavior. ‘-w STR’ ‘--write=STR’ Write a keyword to the header. For the possible value input formats, comments and units for the keyword, see the ‘--update’ option above. ‘-H STR’ ‘--history STR’ Add a ‘HISTORY’ keyword to the header. The string given to this keyword will be separated into multiple keyword cards if it is longer than 70 characters. With each run only one value for the ‘--history’ option will be read. If there are multiple, it is the last one. If there is an error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. ‘-c STR’ ‘--comment STR’ Add a ‘COMMENT’ keyword to the header. Similar to the explanation for ‘--history’ above. If there is a writing error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. ‘-t’ ‘--date’ Put the current date and time in the header. If the ‘DATE’ keyword already exists in the header, it will be updated. If there is a writing error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. ‘-p’ ‘--printall’ Print all the keywords in the specified FITS extension (HDU) on the command-line. ‘-Q’ ‘--quitonerror’ Quit if any of the operations above are not successful. By default if an error occurs, Fits will warn the user of the faulty keyword and continue with the rest of actions. ---------- Footnotes ---------- (1) Some tricky situations arise with values like ‘‘87095e5’’, if this was intended to be a number it will be kept in the header as ‘8709500000’ and there is no problem. But this can also be a shortened Git commit hash. In the latter case, it should be treated as a string and stored as it is written. Commit hashes are very important in keeping the history of a file during your research and such values might arise without you noticing them in your reproduction pipeline. One solution is to use ‘git describe’ instead of the short hash alone. A less recommended solution is to add a space after the commit hash and Fits will write the value as ‘‘87095e5 ’’ in the header. If you later compare the strings on the shell, the space character will be ignored by the shell in the latter solution and there will be no problem.  File: gnuastro.info, Node: ConvertType, Next: Table, Prev: Fits, Up: Data containers 5.2 ConvertType =============== The formats of astronomical data were defined mainly for archiving and processing. In other situations, the data might be useful in other formats. For example, when you are writing a paper or report or if you are making slides for a talk, you can’t use a FITS image. Other image formats should be used. In other cases you might want your pixel values in a table format as plain text for input to other programs that don’t recognize FITS, or to include as a table in your report. ConvertType is created for such situations. The various types will increase with future updates and based on need. The conversion is not only one way (from FITS to other formats), but two ways (except the EPS and PDF formats). So you can convert a JPEG image or text file into a FITS image. Basically, other than EPS, you can use any of the recognized formats as different color channel inputs to get any of the recognized outputs. So before explaining the options and arguments, first a short description of the recognized files types will be given followed a short introduction to digital color. * Menu: * Recognized file formats:: Recognized file formats * Color:: Some explanations on color. * Invoking astconvertt:: Options and arguments to ConvertType.  File: gnuastro.info, Node: Recognized file formats, Next: Color, Prev: ConvertType, Up: ConvertType 5.2.1 Recognized file formats ----------------------------- The various standards and the file name extensions recognized by ConvertType are listed below. FITS or IMH Astronomical data are commonly stored in the FITS format (and in older data sets in IRAF ‘.imh’ format), a list of file name suffixes which indicate that the file is in this format is given in *note Arguments::. Each extension of a FITS image only has one value per pixel, so when used as input, each input FITS image contributes as one color channel. If you want multiple extensions in one FITS file for different color channels, you have to repeat the file name multiple times and use the ‘--hdu’, ‘--hdu2’, ‘--hdu3’ or ‘--hdu4’ options to specify the different extensions. JPEG The JPEG standard was created by the Joint photographic experts group. It is currently one of the most commonly used image formats. Its major advantage is the compression algorithm that is defined by the standard. Like the FITS standard, this is a raster graphics format, which means that it is pixelated. A JPEG file can have 1 (for gray-scale), 3 (for RGB) and 4 (for CMYK) color channels. If you only want to convert one JPEG image into other formats, there is no problem, however, if you want to use it in combination with other input files, make sure that the final number of color channels does not exceed four. If it does, then ConvertType will abort and notify you. The file name endings that are recognized as a JPEG file for input are: ‘.jpg’, ‘.JPG’, ‘.jpeg’, ‘.JPEG’, ‘.jpe’, ‘.jif’, ‘.jfif’ and ‘.jfi’. EPS The Encapsulated PostScript (EPS) format is essentially a one page PostScript file which has a specified size. PostScript also includes non-image data, for example lines and texts. It is a fully functional programming language to describe a document. Therefore in ConvertType, EPS is only an output format and cannot be used as input. Contrary to the FITS or JPEG formats, PostScript is not a raster format, but is categorized as vector graphics. The Portable Document Format (PDF) is currently the most common format for documents. Some believe that PDF has replaced PostScript and that PostScript is now obsolete. This view is wrong, a PostScript file is an actual plain text file that can be edited like any program source with any text editor. To be able to display its programmed content or print, it needs to pass through a processor or compiler. A PDF file can be thought of as the processed output of the compiler on an input PostScript file. PostScript, EPS and PDF were created and are registered by Adobe Systems. With these features in mind, you can see that when you are compiling a document with TeX or LaTeX, using an EPS file is much more low level than a JPEG and thus you have much greater control and therefore quality. Since it also includes vector graphic lines we also use such lines to make a thin border around the image to make its appearance in the document much better. No matter the resolution of the display or printer, these lines will always be clear and not pixelated. In the future, addition of text might be included (for example labels or object IDs) on the EPS output. However, this can be done better with tools within TeX or LaTeX such as PGF/Tikz(1). If the final input image (possibly after all operations on the flux explained below) is a binary image or only has two colors of black and white (in segmentation maps for example), then PostScript has another great advantage compared to other formats. It allows for 1 bit pixels (pixels with a value of 0 or 1), this can decrease the output file size by 8 times. So if a gray-scale image is binary, ConvertType will exploit this property in the EPS and PDF (see below) outputs. The standard formats for an EPS file are ‘.eps’, ‘.EPS’, ‘.epsf’ and ‘.epsi’. The EPS outputs of ConvertType have the ‘.eps’ suffix. PDF As explained above, a PDF document is a static document description format, viewing its result is therefore much faster and more efficient than PostScript. To create a PDF output, ConvertType will make a PostScript page description and convert that to PDF using GPL Ghostscript. The suffixes recognized for a PDF file are: ‘.pdf’, ‘.PDF’. If GPL Ghostscript cannot be run on the PostScript file, it will remain and a warning will be printed. ‘blank’ This is not actually a file type! But can be used to fill one color channel with a blank value. If this argument is given for any color channel, that channel will not be used in the output. Plain text Plain text files have the advantage that they can be viewed with any text editor or on the command-line. Most programs also support input as plain text files. As input, each plain text file is considered to contain one color channel. In ConvertType, the recognized extensions for plain text files are ‘.txt’ and ‘.dat’. As described in *note Invoking astconvertt::, if you just give these extensions, (and not a full filename) as output, then automatic output will be preformed to determine the final output name (see *note Automatic output::). Besides these, when the format of a file cannot be recognized from its name, ConvertType will fall back to plain text mode. So you can use any name (even without an extension) for a plain text input or output. Just note that when the suffix is not recognized, automatic output will not be preformed. The basic input/output on plain text images is very similar to how tables are read/written as described in *note Gnuastro text table format::. Simply put, the restrictions are very loose, and there is a convention to define a name, units, data type (see *note Numeric data types::), and comments for the data in a commented line. The only difference is that as a table, a text file can contain many datasets (columns), but as a 2D image, it can only contain one dataset. As a result, only one information comment line is necessary for a 2D image, and instead of the starting ‘‘# Column N’’ (‘N’ is the column number), the information line for a 2D image must start with ‘‘# Image 1’’. When ConvertType is asked to output to plain text file, this information comment line is written before the image pixel values. When converting an image to plain text, consider the fact that if the image is large, the number of columns in each line will become very large, possibly making it very hard to open in some text editors. Standard output (command-line) This is very similar to the plain text output, but instead of creating a file to keep the printed values, they are printed on the command line. This can be very useful when you want to redirect the results directly to another program in one command with no intermediate file. The only difference is that only the pixel values are printed (with no information comment line). To print to the standard output, set the output name to ‘‘stdout’’. ---------- Footnotes ---------- (1)  File: gnuastro.info, Node: Color, Next: Invoking astconvertt, Prev: Recognized file formats, Up: ConvertType 5.2.2 Color ----------- An image is a two dimensional array of 2 dimensional elements called pixels. If each pixel only has one value, the image is known as a gray-scale image and no color is defined. The range of values in the image can be interpreted as shades of any color, it is customary to use shades of black or gray-scale. However, to produce the color spectrum in the digital world, several primary colors must be mixed. Therefore in a color image, each pixel has several values depending on how many primary colors were chosen. For example on the digital monitor or color digital cameras, all colors are built by mixing the three colors of Red-Green-Blue (RGB) with various proportions. However, for printing on paper, standard printers use the Cyan-Magenta-Yellow-Key (CMYK, Key=black) color space. Therefore when printing an RGB image, usually a transformation of color spaces will be necessary. In a colored digital camera, a color image is produced by dividing the pixel’s area between three colors (filters). However in astronomy due to the intrinsic faintness of most of the targets, the collecting area of the pixel is very important for us. Hence the full area of the pixel is used and one value is stored for that pixel in the end. One color filter is used for the whole image. Thus a FITS image is inherently a gray-scale image and no color can be defined for it. One way to represent a gray-scale image in different color spaces is to use the same proportions of the primary colors in each pixel. This is the common way most FITS image converters work: they fill all the channels with the same values. The downside is two fold: • Three (for RGB) or four (for CMYK) values have to be stored for every pixel, this makes the output file very heavy (in terms of bytes). • If printing, the printing errors of each color channel can make the printed image slightly more blurred than it actually is. To solve both these problems, the best way is to save the FITS image into the black channel of the CMYK color space. In the RGB color space all three channels have to be used. The JPEG standard is the only common standard that accepts CMYK color space, that is why currently only the JPEG standard is included and not the PNG standard for example. The JPEG and EPS standards set two sizes for the number of bits in each channel: 8-bit and 12-bit. The former is by far the most common and is what is used in ConvertType. Therefore, each channel should have values between 0 to 2^8-1=255. From this we see how each pixel in a gray-scale image is one byte (8 bits) long, in an RGB image, it is 3bytes long and in CMYK it is 4bytes long. But thanks to the JPEG compression algorithms, when all the pixels of one channel have the same value, that channel is compressed to one pixel. Therefore a Grayscale image and a CMYK image that has only the K-channel filled are approximately the same file size.  File: gnuastro.info, Node: Invoking astconvertt, Prev: Color, Up: ConvertType 5.2.3 Invoking ConvertType -------------------------- ConvertType will convert any recognized input file type to any specified output type. The executable name is ‘astconvertt’ with the following general template $ astconvertt [OPTION...] InputFile [InputFile2] ... [InputFile4] One line examples: ## Convert an image in FITS to PDF: $ astconvertt image.fits --output=pdf ## Convert an image in JPEG to FITS: $ astconvertt image.jpg -ogalaxy.fits ## Use three plain text 2D arrays to create an RGB JPEG output: $ astconvertt f1.txt f2.txt f3.fits -o.jpg ## Use two images and one blank for an RGB EPS output: $ astconvertt M31_r.fits M31_g.fits blank -oeps The file type of the output will be specified with the (possibly complete) file name given to the ‘--output’ option, which can either be given on the command-line or in any of the configuration files (see *note Configuration files::). Note that if the output suffix is not recognized, it will default to plain text format, see *note Recognized file formats::. The order of multiple input files is important. After reading the input file(s) the number of color channels in all the inputs will be used to define which color space is being used for the outputs and how each color channel is interpreted. Note that one file might have more than one color channel (for example in the JPEG format). If there is one color channel the output is gray-scale, if three input color channels are given they are respectively considered to be the red, green and blue color channels and if there are four color channels they are respectively considered to be cyan, magenta, yellow and black. The value to ‘--output’ (or ‘-o’) can be either a full file name or just the suffix of the desired output format. In the former case, that same name will be used for the output. In the latter case, the name of the output file will be set based on the automatic output guidelines, see *note Automatic output::. Note that the suffix name can optionally start a ‘.’ (dot), so for example ‘--output=.jpg’ and ‘--output=jpg’ are equivalent. See *note Recognized file formats:: Besides the common set of options explained in *note Common options::, the options to ConvertType can be classified into input, output and flux related options. The majority of the options are to do with the flux range. Astronomical data usually have a very large dynamic range (difference between maximum and minimum value) and different subjects might be better demonstrated with a limited flux range. Input: ‘-h STR/INT’ ‘--hdu=STR/INT’ In ConvertType, it is possible to call the HDU option multiple times for the different input FITS files (corresponding to different color channels) in the same order that they are called on the command-line. Except for the fact that multiple calls are possible, this option is identical to the common ‘--hdu’ in *note Input output options::. The number of calls to this option cannot be less than the number of input FITS files, but if there are more, the extra HDUs will be ignored, note that they will be read in the order described in *note Configuration file precedence::. Output: ‘-w FLT’ ‘--widthincm=FLT’ The width of the output in centimeters. This is only relevant for those formats that accept such a width (not plain text for example). For most digital purposes, the number of pixels is far more important than the value to this parameter because you can adjust the absolute width (in inches or centimeters) in your document preparation program. ‘-b INT’ ‘--borderwidth=INT’ The width of the border to be put around the EPS and PDF outputs in units of PostScript points. There are 72 or 28.35 PostScript points in an inch or centimeter respectively. In other words, there are roughly 3 PostScript points in every millimeter. If you are planning on adding a border, its significance is highly correlated with the value you give to the ‘--widthincm’ parameter. Unfortunately in the document structuring convention of the PostScript language, the “bounding box†has to be in units of PostScript points with no fractions allowed. So the border values only have to be specified in integers. To have a final border that is thinner than one PostScript point in your document, you can ask for a larger width in ConvertType and then scale down the output EPS or PDF file in your document preparation program. For example by setting ‘width’ in your ‘includegraphics’ command in TeX or LaTeX. Since it is vector graphics, the changes of size have no effect on the quality of your output quality (pixels don’t get different values). ‘-x’ ‘--hex’ Use Hexadecimal encoding in creating EPS output. By default the ASCII85 encoding is used which provides a much better compression ratio. When converted to PDF (or included in TeX or LaTeX which is finally saved as a PDF file), an efficient binary encoding is used which is far more efficient than both of them. The choice of EPS encoding will thus have no effect on the final PDF. So if you want to transfer your EPS files (for example if you want to submit your paper to arXiv or journals in PostScript), their storage might become important if you have large images or lots of small ones. By default ASCII85 encoding is used which offers a much better compression ratio (nearly 40 percent) compared to Hexadecimal encoding. ‘-u INT’ ‘--quality=INT’ The quality (compression) of the output JPEG file with values from 0 to 100 (inclusive). For other formats the value to this option is ignored. Note that only in gray-scale (when one input color channel is given) will this actually be the exact quality (each pixel will correspond to one input value). If it is in color mode, some degradation will occur. While the JPEG standard does support loss-less graphics, it is not commonly supported. Flux range: ‘-c STR’ ‘--chang=STR’ (‘=STR’) Change pixel values with the following format ‘"from1:to1, from2:to2,..."’. This option is very useful in displaying labeled pixels (not actual data images which have noise) like segmentation maps. In labeled images, usually a group of pixels have a fixed integer value. With this option, you can manipulate the labels before the image is displayed to get a better output for print or to emphasize on a particular set of labels and ignore the rest. The labels in the images will be changed in the same order given. By default first the pixel values will be converted then the pixel values will be truncated (see ‘--fluxlow’ and ‘--fluxhigh’). You can use any number for the values irrespective of your final output, your given values are stored and used in the double precision floating point format. So for example if your input image has labels from 1 to 20000 and you only want to display those with labels 957 and 11342 then you can run ConvertType with these options: $ astconvertt --change=957:50000,11342:50001 --fluxlow=5e4 \ --fluxhigh=1e5 segmentationmap.fits --output=jpg While the output JPEG format is only 8 bit, this operation is done in an intermediate step which is stored in double precision floating point. The pixel values are converted to 8-bit after all operations on the input fluxes have been complete. By placing the value in double quotes you can use as many spaces as you like for better readability. ‘-C’ ‘--changeaftertrunc’ Change pixel values (with ‘--change’) after truncation of the flux values, by default it is the opposite. ‘-L FLT’ ‘--fluxlow=FLT’ The minimum flux (pixel value) to display in the output image, any pixel value below this value will be set to this value in the output. If the value to this option is the same as ‘--fluxmax’, then no flux truncation will be applied. Note that when multiple channels are given, this value is used for all the color channels. ‘-H FLT’ ‘--fluxhigh=FLT’ The maximum flux (pixel value) to display in the output image, see ‘--fluxlow’. ‘-m INT’ ‘--maxbyte=INT’ This is only used for the JPEG and EPS output formats which have an 8-bit space for each channel of each pixel. The maximum value in each pixel can therefore be $2^8-1=255$. With this option you can change (decrease) the maximum value. By doing so you will decrease the dynamic range. It can be useful if you plan to use those values for other purposes. ‘-A INT’ ‘--flminbyte=INT’ If the lowest pixel value in the input channels is larger than the value to ‘--fluxlow’, then that input value will be redundant. In some situations it might be necessary to set the minimum byte value (0) to correspond to that flux even if the data do not reach that value. With this option you can do this. Note that if the minimum pixel value is smaller than ‘--fluxlow’, then this option is redundant. ‘-B INT’ ‘--fhmaxbyte=INT’ See ‘--flminbyte’. ‘-i’ ‘--invert’ For 8-bit output types (JPEG, EPS, and PDF for example) the final value that is stored is inverted so white becomes black and vice versa. The reason for this is that astronomical images usually have a very large area of blank sky in them. The result will be that a large are of the image will be black. Note that this behavior is ideal for gray-scale images, if you want a color image, the colors are going to be mixed up.  File: gnuastro.info, Node: Table, Prev: ConvertType, Up: Data containers 5.3 Table ========= Tables are the products of processing astronomical images and spectra. For example in Gnuastro, MakeCatalog will process the defined pixels over an object and produce a catalog (see *note MakeCatalog::). For each identified object, MakeCatalog can print its position on the image or sky, its total brightness and many other information that is deducible from the given image. Each one of these properties is a column in its output catalog (or table) and for each input object, we have a row. When there are only a small number of objects (rows) and not too many properties (columns), then a simple plain text file is mainly enough to store, transfer, or even use the produced data. However, to be more efficient in all these aspects, astronomers have defined the FITS binary table standard to store data in a binary (0 and 1) format, not plain text. This can offer major advantages in all those aspects: the file size will be greatly reduced and the reading and writing will be faster (because the RAM and CPU also work in binary). The FITS standard also defines a standard for ASCII tables, where the data are stored in the human readable ASCII format, but within the FITS file structure. These are mainly useful for keeping ASCII data along with images and possibly binary data as multiple (conceptually related) extensions within a FITS file. The acceptable table formats are fully described in *note Tables::. Binary tables are not easily readable by human eyes. There is no fixed/unified standard on how the zero and ones should be interpreted. The Unix-like operating systems have flourished because of a simple fact: communication between the various tools is based on human readable characters(1). So while the FITS table standards are very beneficial for the tools that recognize them, they are hard to use in the vast majority of available software. This creates limitations for their generic use. ‘Table’ is Gnuastro’s solution to this problem. With Table, FITS tables (ASCII or binary) are directly accessible to the Unix-like operating systems power-users (those working the command-line or shell, see *note Command-line interface::). With Table, a FITS table (in binary or ASCII formats) is only one command away from AWK (or any other tool you want to use). Just like a plain text file that you read with the ‘cat’ command. You can pipe the output of Table into any other tool for higher-level processing, see the examples in *note Invoking asttable:: for some simple examples. * Menu: * Invoking asttable:: Options and arguments to Table. ---------- Footnotes ---------- (1) In “The art of Unix programmingâ€, Eric Raymond makes this suggestion to programmers: “When you feel the urge to design a complex binary file format, or a complex binary application protocol, it is generally wise to lie down until the feeling passes.â€. This is a great book and strongly recommended, give it a look if you want to truly enjoy your work/life in this environment.  File: gnuastro.info, Node: Invoking asttable, Prev: Table, Up: Table 5.3.1 Invoking Table -------------------- Table will read/write, select, convert, or show the information of the columns in FITS ASCII table, FITS binary table and plain text table files, see *note Tables::. Output columns can also be determined by number or regular expression matching of column names, units, or comments. The executable name is ‘asttable’ with the following general template $ asttable [OPTION...] InputFile One line examples: ## Get the table column information (name, data type, or units): $ asttable bintab.fits --information ## Only print those columns which have a name starting with "MAG_": $ asttable bintab.fits --column=/^MAG_/ ## Only print the 2nd column, and the third column multiplied by 5: $ asttable bintab.fits | awk '{print $2, 5*$3}' ## Only print rows with a value in the 10th column above 100000: $ asttable bintab.fits | awk '$10>10e5 {print}' ## Sort the output columns by the third column, save output: $ asttable bintab.fits | 'sort -k3 > output.txt ## Convert a plain text table to a binary FITS table: $ asttable plaintext.txt --output=table.fits --tabletype=fits-binary In the absence of selected columns, all the input file’s columns will be output. If the specified output is a FITS file, the type of FITS table (binary or ASCII) will be determined from the ‘--tabletype’ option. If the output is not a FITS file, it will be printed as a plain text table (with space characters between the columns). When the columns are accompanied by meta-data (like column name, units, or comments), this information will also printed in the plain text file before the table, as described in *note Gnuastro text table format::. For the full list of options common to all Gnuastro programs please see *note Common options::. Options can also be stored in directory, user or system-wide configuration files to avoid repeating on the command-line, see *note Configuration files::. Table does not follow Automatic output that is common in most Gnuastro programs, see *note Automatic output::. Thus, in the absence of an output file, the selected columns will be printed on the command-line with no column information, ready for redirecting to other tools like AWK or sort, similar to the examples above. ‘-i’ ‘--information’ Only print the column information in the specified table on the command-line and exit. Each column’s information (number, name, units, data type, and comments) will be printed as a row on the command-line. Note that the FITS standard only requires the data type (see *note Numeric data types::), and in plain text tables, no meta-data/information is mandatory. Gnuastro has its own convention in the comments of a plain text table to store and transfer this information as described in *note Gnuastro text table format::. This option will take precedence over the ‘--column’ option, so when it is called along with requested columns, the latter will be ignored. This can be useful if you forget the identifier of a column after you have already typed some on the command-line. You can simply add a ‘-i’ and run Table to see the whole list and remember. Then you can use the shell history (with the up arrow key on the keyboard), and retrieve the last command with all the previously typed columns present, delete ‘-i’ and add the identifier you had forgot. ‘-c STR/INT’ ‘--column=STR/INT’ Specify the columns to output, see *note Selecting table columns:: for a thorough explanation on how the value to this option is interpreted. To select several output columns, this option can also be called any number times in one call to Table. The order of the output columns will be the same call order on the command-line. This option is not mandatory, if no specific columns are requested, all the input table columns are output. When this option is called multiple times, it is possible to output one column more than once.  File: gnuastro.info, Node: Data manipulation, Next: Data analysis, Prev: Data containers, Up: Top 6 Data manipulation ******************* Images are one of the major formats of data that is used in astronomy. The functions in this chapter explain the GNU Astronomy Utilities which are provided for their manipulation. For example cropping out a part of a larger image or convolving the image with a given kernel or applying a transformation to it. * Menu: * Crop:: Crop region(s) from a dataset. * Arithmetic:: Arithmetic on input data. * Convolve:: Convolve an image with a kernel. * Warp:: Warp/Transform an image to a different grid.  File: gnuastro.info, Node: Crop, Next: Arithmetic, Prev: Data manipulation, Up: Data manipulation 6.1 Crop ======== Astronomical images are often very large, filled with thousands of galaxies. It often happens that you only want a section of the image, or you have a catalog of sources and you want to visually analyze them in small postage stamps. Crop is made to do all these things. When more than one crop is required, Crop will divide the crops between multiple threads to significantly reduce the run time. Astronomical surveys are usually extremely large. So large in fact, that the whole survey will not fit into a reasonably sized file. Because of this, surveys usually cut the final image into separate tiles and store each tile in a file. For example the COSMOS survey’s Hubble space telescope, ACS F814W image consists of 81 separate FITS images, with each one having a volume of 1.7 Giga bytes. Even though the tile sizes are chosen to be large enough that too many galaxies/targets don’t fall on the edges of the tiles, inevitably some do. So when you simply crop the image of such targets from one tile, you will miss a large area of the surrounding sky (which is essential in estimating the noise). Therefore in its WCS mode, Crop will stitch parts of the tiles that are relevant for a target (with the given width) from all the input images that cover that region into the output. Of course, the tiles have to be present in the list of input files. Besides cropping postage stamps around certain coordinates, Crop can also crop arbitrary polygons from an image (or a set of tiles by stitching the relevant parts of different tiles within the polygon), see ‘--polygon’ in *note Invoking astcrop::. Alternatively, it can crop out rectangular regions through the ‘--section’ option from one image, see *note Crop section syntax::. * Menu: * Crop modes:: Basic modes to define crop region. * Crop section syntax:: How to define a section to crop. * Blank pixels:: Pixels with no value. * Invoking astcrop:: Calling Crop on the command-line  File: gnuastro.info, Node: Crop modes, Next: Crop section syntax, Prev: Crop, Up: Crop 6.1.1 Crop modes ---------------- In order to be comprehensive, intuitive, and easy to use, there are two ways to define the crop: 1. From its center and side length. For example if you already know the coordinates of an object and want to inspect it in an image or to generate postage stamps of a catalog containing many such coordinates. 2. The vertices of the crop region, this can be useful for larger crops over many targets, for example to crop out a uniformly deep, or contiguous, region of a large survey. Irrespective of how the crop region is defined, the coordinates to define the crop can be in Image (pixel) or World Coordinate System (WCS) standards. All coordinates are read as floating point numbers (not integers, except for the ‘--section’ option, see below). By setting the _mode_ in Crop, you define the standard that the given coordinates must be interpretted. Here, the different ways to specify the crop region are discussed within each standard. For the full list options, please see *note Invoking astcrop::. When the crop is defined by its center, the respective (integer) central pixel position will be found internally according to the FITS standard. To have this pixel positioned in the center of the cropped region, the final cropped region will have an add number of pixels (even if you give an even number to ‘--width’ in image mode). Furthermore, when the crop is defined as by its center, Crop allows you to only keep crops what don’t have any blank pixels in the vicinity of their center (your primary target). This can be very convenient when your input catalog/coordinates originated from another survey/filter which is not fully covered by your input image, to learn more about this feature, please see the description of the ‘--checkcenter’ option in *note Invoking astcrop::. Image coordinates In image mode (‘--mode=img’), Crop interprets the pixel coordinates and widths in units of the input data-elements (for example pixels in an image, not world coordinates). In image mode, only one image may be input. The output crop(s) can be defined in multiple ways as listed below. Center of multiple crops (in a catalog) The center of (possibly multiple) crops are read from a text file. In this mode, the columns identified with the ‘--coordcol’ option are interpreted as the center of a crop with a width of ‘--width’ pixels along each dimension. The columns can contain any floating point value. The value to ‘--output’ option is seen as a directory which will host (the possibly multiple) separate crop files, see *note Crop output:: for more. For a tutorial using this feature, please see *note Hubble visually checks and classifies his catalog::. Center of a single crop (on the command-line) The center of the crop is given on the command-line with the ‘--center’ option. The crop width is specified by the ‘--width’ option along each dimension. The given coordinates and width can be any floating point number. Vertices of a single crop In Image mode there are two options to define the vertices of a region to crop: ‘--section’ and ‘--polygon’. The former is lower-level (doesn’t accept floating point vertices, and only a rectangular region can be defined), it is also only available in Image mode. Please see *note Crop section syntax:: for a full description of this method. The latter option (‘--polygon’) is a higher-level method to define any convex polygon (with any number of vertices) with floating point values. Please see the description of this option in *note Invoking astcrop:: for its syntax. WCS coordinates In WCS mode (‘--mode=wcs’), the coordinates and widths are interpretted using the World Coordinate System (WCS, that must accompany the dataset), not pixel coordinates. In WCS mode, Crop accepts multiple datasets as input. When the cropped region (defined by its center or vertices) overlaps with multiple of the input images/tiles, the overlapping regions will be taken from the respective input (they will be stitched when necessary for each output crop). In this mode, the input images do not necessarily have to be the same size, they just need to have the same orientation and pixel resolution. Currently only orientation along the celestial coordinates is accepted, if your input has a different orientation you can use Warp’s ‘--align’ option to align the image before cropping it (see *note Warp::). Each individual input image/tile can even be smaller than the final crop. In any case, any part of any of the input images which overlaps with the desired region will be used in the crop. Note that if there is an overlap in the input images/tiles, the pixels from the last input image read are going to be used for the overlap. Crop will not change pixel values, so it assumes your overlapping tiles were cutout from the same original image. There are multiple ways to define your cropped region as listed below. Center of multiple crops (in a catalog) Similar to catalog inputs in Image mode (above), except that the values along each dimension are assumed to have the same units as the dataset’s WCS information. For example, the central RA and Dec value for each crop will be read from the first and second calls to the ‘--coordcol’ option. The width of the cropped box (in units of the WCS, or degrees in RA and Dec mode) must be specified with the ‘--width’ option. Center of a single crop (on the command-line) You can specify the center of only one crop box with the ‘--center’ option. If it exists in the input images, it will be cropped similar to the catalog mode, see above also for ‘--width’. Vertices of a single crop The ‘--polygon’ option is a high-level method to define any convex polygon (with any number of vertices). Please see the description of this option in *note Invoking astcrop:: for its syntax. *CAUTION:* In WCS mode, the image has to be aligned with the celestial coordinates, such that the first FITS axis is parallel (opposite direction) to the Right Ascension (RA) and the second FITS axis is parallel to the declination. If these conditions aren’t met for an image, Crop will warn you and abort. You can use Warp’s ‘--align’ option to align the input image with these coordinates, see *note Warp::. As a summary, if you don’t specify a catalog, you have to define the cropped region manually on the command-line. In any case the mode is mandatory for Crop to be able to interpret the values given as coordinates or widths.  File: gnuastro.info, Node: Crop section syntax, Next: Blank pixels, Prev: Crop modes, Up: Crop 6.1.2 Crop section syntax ------------------------- When in image mode, one of the methods to crop only one rectangular section from the input image is to use the ‘--section’ option. Crop has a powerful syntax to read the box parameters from a string of characters. If you leave certain parts of the string to be empty, Crop can fill them for you based on the input image sizes. To define a box, you need the coordinates of two points: the first (‘X1’, ‘Y1’) and the last pixel (‘X2’, ‘Y2’) pixel positions in the image, or four integer numbers in total. The four coordinates can be specified with one string in this format: ‘‘X1:X2,Y1:Y2’’. This string is given to the ‘--section’ option. Therefore, the pixels along the first axis that are $\geq$‘X1’ and $\leq$‘X2’ will be included in the cropped image. The same goes for the second axis. Note that each different term will be read as an integer, not a float. This is a low-level option, for a higher-level way to specify region (any polygon, not just a box), please see the ‘--polygon’ option in *note Crop options::. Also note that in the FITS standard, pixel indexes along each axis start from unity(1) not zero(0). You can omit any of the values and they will be filled automatically. The left hand side of the colon (‘:’) will be filled with ‘1’, and the right side with the image size. So, ‘2:,:’ will include the full range of pixels along the second axis and only those with a first axis index larger than ‘2’ in the first axis. If the colon is omitted for a dimension, then the full range is automatically used. So the same string is also equal to ‘2:,’ or ‘2:’ or even ‘2’. If you want such a case for the second axis, you should set it to: ‘,2’. If you specify a negative value, it will be seen as before the indexes of the image which are outside the image along the bottom or left sides when viewed in SAO ds9. In case you want to count from the top or right sides of the image, you can use an asterisk (‘*’). When confronted with a ‘*’, Crop will replace it with the maximum length of the image in that dimension. So ‘*-10:*+10,*-20:*+20’ will mean that the crop box will be 20\times40 pixels in size and only include the top corner of the input image with 3/4 of the image being covered by blank pixels, see *note Blank pixels::. If you feel more comfortable with space characters between the values, you can use as many space characters as you wish, just be careful to put your value in double quotes, for example ‘--section="5:200, 123:854"’. If you forget the quotes, anything after the first space will not be seen by ‘--section’ and you will most probably get an error because the rest of your string will be read as a filename (which most probably doesn’t exist). See *note Command-line:: for a description of how the command-line works.  File: gnuastro.info, Node: Blank pixels, Next: Invoking astcrop, Prev: Crop section syntax, Up: Crop 6.1.3 Blank pixels ------------------ The cropped box can potentially include pixels that are beyond the image range. For example when a target in the input catalog was very near the edge of the input image. The parts of the cropped image that were not in the input image will be filled with the following two values depending on the data type of the image. In both cases, SAO ds9 will not color code those pixels. • If the data type of the image is a floating point type (float or double), IEEE NaN (Not a number) will be used. • For integer types, pixels out of the image will be filled with the value of the ‘BLANK’ keyword in the cropped image header. The value assigned to it is the lowest value possible for that type, so you will probably never need it any way. Only for the unsigned character type (‘BITPIX=8’ in the FITS header), the maximum value is used because it is unsigned, the smallest value is zero which is often meaningful. You can ask for such blank regions to not be included in the output crop image using the ‘--noblank’ option. In such cases, there is no guarantee that the image size of your outputs are what you asked for. In some survey images, unfortunately they do not use the ‘BLANK’ FITS keyword. Instead they just give all pixels outside of the survey area a value of zero. So by default, when dealing with float or double image types, any values that are 0.0 are also regarded as blank regions. This can be turned off with the ‘--zeroisnotblank’ option.  File: gnuastro.info, Node: Invoking astcrop, Prev: Blank pixels, Up: Crop 6.1.4 Invoking Crop ------------------- Crop will crop a region from an image. If in WCS mode, it will also stitch parts from separate images in the input files. The executable name is ‘astcrop’ with the following general template $ astcrop [OPTION...] [ASCIIcatalog] ASTRdata ... One line examples: ## Crop all objects in cat.txt from image.fits: $ astcrop --catalog=cat.txt image.fits ## Crop all options in catalog (with RA,DEC) from all the files ## ending in `_drz.fits' in `/mnt/data/COSMOS/': $ astcrop --mode=wcs --catalog=cat.txt /mnt/data/COSMOS/*_drz.fits ## Crop the outer 10 border pixels of the input image: $ astcrop --section=10:*-10,10:*-10 --hdu=2 image.fits ## Crop region around RA and Dec of (189.16704, 62.218203): $ astcrop --mode=wcs --center=189.16704,62.218203 goodsnorth.fits ## Crop region around pixel coordinate (568.342, 2091.719): $ astcrop --mode=img --center=568.342,2091.719 --width=201 image.fits Crop has one mandatory argument which is the input image name(s), shown above with ‘ASTRdata ...’. You can use shell expansions, for example ‘*’ for this if you have lots of images in WCS mode. If the crop box centers are in a catalog, you can use the ‘--catalog’ option. In other cases, you have to provide the single cropped output parameters must be given with command-line options. See *note Crop output:: for how the output file name(s) can be specified. For the full list of general options to all Gnuastro programs (including Crop), please see *note Common options::. Floating point numbers can be used to specify the crop region (except the ‘--section’ option, see *note Crop section syntax::). In such cases, the floating point values will be used to find the desired integer pixel indices based on the FITS standard. Hence, Crop ultimately doesn’t do any sub-pixel cropping (in other words, it doesn’t change pixel values). If you need such crops, you can use *note Warp:: to first warp the image to the a new pixel grid, then crop from that. For example, let’s assume you want a crop from pixels 12.982 to 80.982 along the first dimension. You should first translate the image by $-0.482$ (note that the edge of a pixel is at integer multiples of $0.5$). So you should run Warp with ‘--translate=-0.482,0’ and then crop the warped image with ‘--section=13:81’. There are two ways to define the cropped region: with its center or its vertices. See *note Crop modes:: for a full description. In the former case, Crop can check if the central region of the cropped image is indeed filled with data or is blank (see *note Blank pixels::), and not produce any output when the center is blank, see the description under ‘--checkcenter’ for more. When in catalog mode, Crop will run in parallel unless you set ‘--numthreads=1’, see *note Multi-threaded operations::. Note that when multiple outputs are created with threads, the outputs will not be created in the same order. This is because the threads are asynchronous and thus not started in order. This has no effect on each output, see *note Hubble visually checks and classifies his catalog:: for a tutorial on effectively using this feature. * Menu: * Crop options:: A list of all the options with explanation. * Crop output:: The outputs of Crop.  File: gnuastro.info, Node: Crop options, Next: Crop output, Prev: Invoking astcrop, Up: Invoking astcrop 6.1.4.1 Crop options .................... The options can be classified into the following contexts: Input, Output and operating mode options. Options that are common to all Gnuastro program are listed in *note Common options:: and will not be repeated here. When you are specifying the crop vertices your self (through ‘--section’, or ‘--polygon’) on relatively small regions (depending on the resolution of your images) the outputs from image and WCS mode can be approximately equivalent. However, as the crop sizes get large, the curved nature of the WCS coordinates have to be considered. For example, when using ‘--section’, the right ascension of the bottom left and top left corners will not be equal. If you only want regions within a given right ascension, use ‘--polygon’ in WCS mode. Input image parameters: ‘--hstartwcs=INT’ Specify the first keyword card (line number) to start finding the input image world coordinate system information. Distortions were only recently included in WCSLIB (from version 5). Therefore until now, different telescope would apply their own specific set of WCS keywords and put them into the image header along with those that WCSLIB does recognize. So now that WCSLIB recognizes most of the standard distortion parameters, they will get confused with the old ones and give completely wrong results. For example in the CANDELS-GOODS South images(1). The two ‘--hstartwcs’ and ‘--hendwcs’ are thus provided so when using older datasets, you can specify what region in the FITS headers you want to use to read the WCS keywords. Note that this is only relevant for reading the WCS information, basic data information like the image size are read separately. These two options will only be considered when the value to ‘--hendwcs’ is larger than that of ‘--hstartwcs’. So if they are equal or ‘--hstartwcs’ is larger than ‘--hendwcs’, then all the input keywords will be parsed to get the WCS information of the image. ‘--hendwcs=INT’ Specify the last keyword card to read for specifying the image world coordinate system on the input images. See ‘--hstartwcs’ Crop box parameters: ‘-c FLT[,FLT[,...]]’ ‘--center=FLT[,FLT[,...]]’ The central position of the crop in the input image. The positions along each dimension must be separated by a comma (<,>) and fractions are also acceptable. The number of values given to this option must be the same as the dimensions of the input dataset. The width of the crop should be set with ‘--width’. The units of the coordinates are read based on the value to the ‘--mode’ option, see below. ‘-w FLT[,FLT[,...]]’ ‘--width=FLT[,FLT[,...]]’ Width of the cropped region about its center. ‘--width’ may take either a single value (to be used for all dimensions) or multiple values (a specific value for each dimension). If in WCS mode, value(s) given to this option will be read in the same units as the dataset’s WCS information along this dimension. The final output will have an odd number of pixels to allow easy identification of the pixel which keeps your requested coordinate (from ‘--center’ or ‘--catalog’). The ‘--width’ option also accepts fractions. For example if you want the width of your crop to be 3 by 5 arcseconds along RA and Dec respectively, you can call it with: ‘--width=3/3600,5/3600’. If you want an even sided crop, you can run Crop afterwards with ‘--section=":*-1,:*-1"’ or ‘--section=2:,2:’ (depending on which side you don’t need), see *note Crop section syntax::. ‘-l STR’ ‘--polygon=STR’ String of crop polygon vertices. Note that currently only convex polygons should be used. In the future we will make it work for all kinds of polygons. Convex polygons are polygons that do not have an internal angle more than 180 degrees. This option can be used both in the image and WCS modes, see *note Crop modes::. The cropped image will be the size of the rectangular region that completely encompasses the polygon. By default all the pixels that are outside of the polygon will be set as blank values (see *note Blank pixels::). However, if ‘--outpolygon’ is called all pixels internal to the vertices will be set to blank. The syntax for the polygon vertices is similar to, and simpler than, that for ‘--section’. In short, the dimensions of each coordinate are separated by a comma (<,>) and each vertex is separated by a colon (<:>). You can define as many vertices as you like. If you would like to use space characters between the dimensions and vertices to make them more human-readable, then you have to put the value to this option in double quotation marks. For example, let’s assume you want to work on the deepest part of the WFC3/IR images of Hubble Space Telescope eXtreme Deep Field (HST-XDF). According to the webpage (https://archive.stsci.edu/prepds/xdf/)(2) the deepest part is contained within the coordinates: [ (53.187414,-27.779152), (53.159507,-27.759633), (53.134517,-27.787144), (53.161906,-27.807208) ] They have provided mask images with only these pixels in the WFC3/IR images, but what if you also need to work on the same region in the full resolution ACS images? Also what if you want to use the CANDELS data for the shallow region? Running Crop with ‘--polygon’ will easily pull out this region of the image for you irrespective of the resolution. If you have set the operating mode to WCS mode in your nearest configuration file (see *note Configuration files::), there is no need to call ‘--mode=wcs’ on the command line. You may also provide many FITS images/tiles and Crop will stitch them to produce this cropped region: $ astcrop --mode=wcs desired-filter-image(s).fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" In other cases, you have an image and want to define the polygon yourself (it isn’t already published like the example above). As the number of vertices increases, checking the vertex coordinates on a FITS viewer (for example SAO ds9) and typing them in one by one can be very tedious and prone to typo errors. You can take the following steps to avoid the frustration and possible typos: Open the image with ds9 and activate its “region†mode with Edit→Region. Then define the region as a polygon with Region→Shape→Polygon. Click on the approximate center of the region you want and a small square will appear. By clicking on the vertices of the square you can shrink or expand it, clicking and dragging anywhere on the edges will enable you to define a new vertex. After the region has been nicely defined, save it as a file with Region→Save Regions. You can then select the name and address of the output file, keep the format as ‘REG’ and press “OKâ€. In the next window, keep format as “ds9†and “Coordinate System†as “fk5â€. A plain text file (let’s call it ‘ds9.reg’) is now created. You can now convert this plain text file to Crop’s polygon format with this command (when typing on the command-line, ignore the “<\>†at the end of the first and second lines along with the extra spaces, these are only for nice printing): $ v=$(awk 'NR==4' ds9.reg | sed -e's/polygon(//' \ -e's/\([^,]*,[^,]*\),/\1:/g' -e's/)//' ) $ astcrop --mode=wcs image.fits --polygon=$v ‘--outpolygon’ Keep all the regions outside the polygon and mask the inner ones with blank pixels (see *note Blank pixels::). This is practically the inverse of the default mode of treating polygons. Note that this option only works when you have only provided one input image. If multiple images are given (in WCS mode), then the full area covered by all the images has to be shown and the polygon excluded. This can lead to a very large area if large surveys like COSMOS are used. So Crop will abort and notify you. In such cases, it is best to crop out the larger region you want, then mask the smaller region with this option. ‘-s STR’ ‘--section=STR’ Section of the input image which you want to be cropped. See *note Crop section syntax:: for a complete explanation on the syntax required for this input. ‘-x STR/INT’ ‘--coordcol=STR/INT’ The column in a catalog to read as a coordinate. The value can be either the column number (starting from 1), or a match/search in the table meta-data, see *note Selecting table columns::. This option must be called multiple times, depending on the number of dimensions in the input dataset. If it is called more than necessary, the extra columns (later calls to this option on the command-line or configuration files) will be ignored, see *note Configuration file precedence::. ‘-n STR/INT’ ‘--namecol=STR/INT’ Column selection of crop file name. The value can be either the column number (starting from 1), or a match/search in the table meta-data, see *note Selecting table columns::. This option can be used both in Image and WCS modes, and not a mandatory. When a column is given to this option, the final crop base file name will be taken from the contents of this column. The directory will be determined by the ‘--output’ option (current directory if not given) and the value to ‘--suffix’ will be appended. When this column isn’t given, the row number will be used instead. Output options: ‘-c INT’ ‘--checkcenter=INT’ Box width (odd number of pixels) of region in the center of the image to check for blank values. If the value to this option is zero, no checking is done. This option is only relevant when the cropped region(s) are defined by their center (not by the vertices, see *note Crop modes::). If any of the pixels in this central region of a crop (defined by its center) are blank, then it will not be created. Because survey regions don’t often have a clean square or rectangle shape, some of the pixels on the sides of the survey FITS image don’t commonly have any data and are blank (see *note Blank pixels::). So when the catalog was not generated from the input image, it often happens that the image does not have data over some of the points. When the given center of a crop falls in such regions and this option has a non-zero, odd value, no crop will be created. Therefore with this option, you can specify a width of a small box (3 pixels is often good enough) around the central pixel of the cropped image. You can check which crops were created and which weren’t from the command-line (if ‘--quiet’ was not called, see *note Operating mode options::), or in Crop’s log file (see *note Crop output::). ‘-p STR’ ‘--suffix=STR’ The suffix (or post-fix) of the output files for when you want all the cropped images to have a special ending. One case where this might be helpful is when besides the science images, you want the weight images (or exposure maps, which are also distributed with survey images) of the cropped regions too. So in one run, you can set the input images to the science images and ‘--suffix=_s.fits’. In the next run you can set the weight images as input and ‘--suffix=_w.fits’. ‘-b’ ‘--noblank’ Pixels outside of the input image that are in the crop box will not be used. By default they are filled with blank values (depending on type), see *note Blank pixels::. This option only applies only in Image mode, see *note Crop modes::. ‘-z’ ‘--zeroisnotblank’ In float or double images, it is common to give the value of zero to blank pixels. If the input image type is one of these two types, such pixels will also be considered as blank. You can disable this behavior with this option, see *note Blank pixels::. Operating mode options: ‘-O STR’ ‘--mode=STR’ Operate in Image mode or WCS mode when the input coordinates can be both image or WCS. The value must either be ‘img’ or ‘wcs’, see *note Crop modes:: for a full description. ---------- Footnotes ---------- (1) (2)  File: gnuastro.info, Node: Crop output, Prev: Crop options, Up: Invoking astcrop 6.1.4.2 Crop output ................... The string given to ‘--output’ option will be interpretted depending on how many crops were requested, see *note Crop modes::: • When a catalog is given, the value of the ‘--output’ (see *note Common options::) will be read as the directory to store the output cropped images. Hence if it doesn’t already exist, Crop will abort with an error of a “No such file or directory†error. The crop file names will consist of two parts: a variable part (the row number of each target starting from 1) along with a fixed string which you can set with the ‘--suffix’ option. Optionally, you may also use the ‘--namecol’ option to define a column in the input catalog to use as the file name instead of numbers. • When only one crop is desired, the value to ‘--output’ will be read as a file name. If no output is specified or if it is a directory, the output file name will follow the automatic output names of Gnuastro, see *note Automatic output::: The string given to ‘--suffix’ will be replaced with the ‘.fits’ suffix of the input. The header of each output cropped image will contain the names of the input image(s) it was cut from. If a name is longer than the 70 character space that the FITS standard allows for header keyword values, the name will be cut into several keywords from the nearest slash (). The keywords have the following format: ‘ICFn_m’ (for Crop File). Where ‘n’ is the number of the image used in this crop and ‘m’ is the part of the name (it can be broken into multiple keywords). Following the name is another keyword named ‘ICFnPIX’ which shows the pixel range from that input image in the same syntax as *note Crop section syntax::. So this string can be directly given to the ‘--section’ option later. Once done, a log file can be created in the current directory with the ‘--log’ option. This file will have three columns and the same number of rows as the number of cropped images. There are also comments on the top of the log file explaining basic information about the run and descriptions for the columns. A short description of the columns is also given below: 1. The cropped image file name for that row. 2. The number of input images that were used to create that image. 3. A ‘0’ if the central few pixels (value to the ‘--checkcenter’ option) are blank and ‘1’ if they aren’t. When the crop was not defined by its center (see *note Crop modes::), or ‘--checkcenter’ was given a value of 0 (see *note Invoking astcrop::), the center will not be checked and this column will be given a value of ‘-1’.  File: gnuastro.info, Node: Arithmetic, Next: Convolve, Prev: Crop, Up: Data manipulation 6.2 Arithmetic ============== It is commonly necessary to do operations on some or all of the elements of a dataset independently (pixels in an image). For example, in the reduction of raw data it is necessary to subtract the Sky value (*note Sky value::) from each image image. Later (once the images as warped into a single grid using Warp for example, see *note Warp::), the images are co-added (the output pixel grid is the average of the pixels of the individual input images). Arithmetic is Gnuastro’s program for such operations on your datasets directly from the command-line. It currently uses the reverse polish or post-fix notation, see *note Reverse polish notation:: and will work on the native data types of the input images/data to reduce CPU and RAM resources, see *note Numeric data types::. For more information on how to run Arithmetic, please see *note Invoking astarithmetic::. * Menu: * Reverse polish notation:: The current notation style for Arithmetic * Arithmetic operators:: List of operators known to Arithmetic * Invoking astarithmetic:: How to run Arithmetic: options and output  File: gnuastro.info, Node: Reverse polish notation, Next: Arithmetic operators, Prev: Arithmetic, Up: Arithmetic 6.2.1 Reverse polish notation ----------------------------- The most common notation for arithmetic operations is the infix notation (https://en.wikipedia.org/wiki/Infix_notation) where the operator goes between the two operands, for example $4+5$. While the infix notation is the preferred way in most programming languages, currently Arithmetic does not use it since it will require parenthesis which can complicate the implementation of the code. In the near future we do plan to adopt this notation(1), but for the time being (due to time constraints on the developers), Arithmetic uses the post-fix or reverse polish notation (https://en.wikipedia.org/wiki/Reverse_Polish_notation). The Wikipedia article provides some excellent explanation on this notation but here we will give a short summary here for self-sufficiency. In the post-fix notation, the operator is placed after the operands, as we will see below this removes the need to define parenthesis for most ordinary operators. For example, instead of writing ‘5+6’, we write ‘5 6 +’. To easily understand how this notation works, you can think of each operand as a node in a first-in-first-out stack. Every time an operator is confronted, it pops the number of operands it needs from the top of the stack (so they don’t exist in the stack any more), does its operation and pushes the result back on top of the stack. So if you want the average of 5 and 6, you would write: ‘5 6 + 2 /’. The operations that are done are: 1. ‘5’ is an operand, so it is pushed to the top of the stack. 2. ‘6’ is an operand, so it is pushed to the top of the stack. 3. ‘+’ is a binary operator, so pull the top two elements of the stack and perform addition on them (the order is $5+6$ in the example above). The result is ‘11’, push it on top of the stack. 4. ‘2’ is an operand so push it onto the top of the stack. 5. ‘/’ is a binary operator, so pull out the top two elements of the stack (top-most is ‘2’, then ‘11’) and divide the second one by the first. In the Arithmetic program, the operands can be FITS images or numbers. As you can see, very complicated procedures can be created without the need for parenthesis or worrying about precedence. Even functions which take an arbitrary number of arguments can be defined in this notation. This is a very powerful notation and is used in languages like Postscript (2) (the programming language in Postscript and compiled into PDF files) uses this notation. ---------- Footnotes ---------- (1) (2) See the EPS and PDF part of *note Recognized file formats:: for a little more on the Postscript language.  File: gnuastro.info, Node: Arithmetic operators, Next: Invoking astarithmetic, Prev: Reverse polish notation, Up: Arithmetic 6.2.2 Arithmetic operators -------------------------- The recognized operators in Arithmetic are listed below. See *note Reverse polish notation:: for more on how the operators and operands should be ordered on the command-line. The operands to all operators can be a data array (for example a FITS image) or a number, the output will be an array or number according to the inputs. For example a number multiplied by an array will produce an array. The conditional operators will return pixel, or numerical values of 0 (false) or 1 (true) and stored in an ‘unsigned char’ data type (see *note Numeric data types::). ‘+’ Addition, so “‘4 5 +’†is equivalent to $4+5$. ‘-’ Subtraction, so “‘4 5 -’†is equivalent to $4-5$. ‘x’ Multiplication, so “‘4 5 x’†is equivalent to $4\times5$. ‘/’ Division, so “‘4 5 /’†is equivalent to $4/5$. ‘%’ Modulo (remainder), so “‘3 2 %’†is equivalent to $1$. Note that the modulo operator only works on integer types. ‘abs’ Absolute value of first operand, so “‘4 abs’†is equivalent to $|4|$. ‘pow’ First operand to the power of the second, so “‘4.3 5f pow’†is equivalent to $4.3^{5}$. Currently ‘pow’ will only work on single or double precision floating point numbers or images. To be sure that a number is read as a floating point (even if it doesn’t have any non-zero decimals) put an ‘f’ after it. ‘sqrt’ The square root of the first operand, so “‘5 sqrt’†is equivalent to $\sqrt{5}$. The output type is determined from the input, so the output of this example will be ‘2’ (since ‘5’ doesn’t have any non-zero decimal digits). If you want ‘2.23607’, run ‘5f sqrt’ instead, the ‘f’ will ensure that a number will be read as a floating point number, even if it doesn’t have decimal digits. If the input image has an integer type, you should explicitly convert the image to floating point, for example ‘a.fits float sqrt’, see the type conversion operators below. ‘log’ Natural logarithm of first operand, so “‘4 log’†is equivalent to $\ln(4)$. The output type is determined from the input, see the explanation under ‘sqrt’ for more. ‘log10’ Base-10 logarithm of first operand, so “‘4 log10’†is equivalent to $\log(4)$. The output type is determined from the input, see the explanation under ‘sqrt’ for more. ‘minvalue’ Minimum (non-blank) value in the top operand on the stack, so “‘a.fits minvalue’†will push the the minimum pixel value in this image onto the stack. Therefore this operator is mainly intended for data (for example images), if the top operand is a number, this operator just returns it without any change. So note that when this operator acts on a single image, the output will no longer be an image, but a number. The output of this operand is in the same type as the input. ‘maxvalue’ Maximum (non-blank) value of first operand in the same type, similar to ‘minvalue’. ‘numvalue’ Number of non-blank elements in first operand in the ‘uint64’ type, similar to ‘minvalue’. ‘sumvalue’ Sum of non-blank elements in first operand in the ‘float32’ type, similar to ‘minvalue’. ‘meanvalue’ Mean value of non-blank elements in first operand in the ‘float32’ type, similar to ‘minvalue’. ‘stdvalue’ Standard deviation of non-blank elements in first operand in the ‘float32’ type, similar to ‘minvalue’. ‘medianvalue’ Median of non-blank elements in first operand with the same type, similar to ‘minvalue’. ‘min’ The first popped operand to this operator must be a positive integer number which specifies how many further operands should be popped from the stack. The given number of operands must have the same type and size. Each pixel of the output of this operator will be set to the minimum value of the given number of operands (images) in that pixel. For example the following command will produce an image with the same size and type as the inputs but each output pixel is set to the minimum respective pixel value of the three input images. $ astarithmetic a.fits b.fits c.fits 3 min Important notes: • NaN/blank pixels will be ignored, see *note Blank pixels::. • The output will have the same type as the inputs. This is natural for the ‘min’ and ‘max’ operators, but for other similar operators (for example ‘sum’, or ‘average’) the per-pixel operations will be done in double precision floating point and then stored back in the input type. Therefore, if the input was an integer, C’s internal type conversion will be used. ‘max’ Similar to ‘min’, but the pixels of the output will contain the maximum of the respective pixels in all operands in the stack. ‘num’ Similar to ‘min’, but the pixels of the output will contain the number of the respective non-blank pixels in all input operands. ‘sum’ Similar to ‘min’, but the pixels of the output will contain the sum of the respective pixels in all input operands. ‘mean’ Similar to ‘min’, but the pixels of the output will contain the mean (average) of the respective pixels in all operands in the stack. ‘std’ Similar to ‘min’, but the pixels of the output will contain the standard deviation of the respective pixels in all operands in the stack. ‘median’ Similar to ‘min’, but the pixels of the output will contain the median of the respective pixels in all operands in the stack. ‘filter-mean’ Apply mean filtering (or moving average (https://en.wikipedia.org/wiki/Moving_average)) on the input dataset. During mean filtering, each pixel (data element) is replaced by the mean value of all its surrounding pixels (excluding blank values). The number of surrounding pixels in each dimension (to calculate the mean) is determined through the earlier operands that have been pushed onto the stack prior to the input dataset. The number of necessary operands is determined by the dimensions of the input dataset (first popped operand). The order of the dimensions on the command-line is the order in FITS format. Here is one example: $ astarithmetic 5 4 image.fits filter-mean In this example, each pixel is replaced by the mean of a 5 by 4 box around it. The box is 5 pixels along the first FITS dimension (horizontal when viewed in ds9) and 4 pixels along the second FITS dimension (vertical). Each pixel will be placed in the center of the box that the mean is calculated on. If the given width along a dimension is even, then the center is assumed to be between the pixels (not in the center of a pixel). When the pixel is close to the center, the pixels of the box that fall outside the image are ignored. Therefore, on the edge, less points will be used in calculating the mean. The final effect of mean filtering is to smooth the input image, it is essentially a convolution with a kernel that has identical values for all its pixels (is flat), see *note Convolution process::. ‘filter-median’ Apply median filtering (https://en.wikipedia.org/wiki/Median_filter) on the input dataset. This is very similar to ‘filter-mean’, except that instead of the mean value of the box pixels, the median value is used to replace a pixel value. For more on how to use this operator, please see ‘filter-mean’. The median is less susceptible to outliers compared to the mean. As a result, after median filtering, the pixel values will be more discontinuous than mean filtering. ‘lt’ Less than: If the second popped (or left operand in infix notation, see *note Reverse polish notation::) value is smaller than the first popped operand, then this function will return a value of 1, otherwise it will return a value of 0. If both operands are images, then all the pixels will be compared with their counterparts in the other image. If only one operand is an image, then all the pixels will be compared with the the single value (number) of the other operand. Finally if both are numbers, then the output is also just one number (0 or 1). When the output is not a single number, it will be stored as an ‘unsigned char’ type. ‘le’ Less or equal: similar to ‘lt’ (‘less than’ operator), but returning 1 when the second popped operand is smaller or equal to the first. ‘gt’ Greater than: similar to ‘lt’ (‘less than’ operator), but returning 1 when the second popped operand is greater than the first. ‘ge’ Greater or equal: similar to ‘lt’ (‘less than’ operator), but returning 1 when the second popped operand is larger or equal to the first. ‘eq’ Equality: similar to ‘lt’ (‘less than’ operator), but returning 1 when the two popped operands are equal (to double precision floating point accuracy). ‘ne’ Non-Equality: similar to ‘lt’ (‘less than’ operator), but returning 1 when the two popped operands are _not_ equal (to double precision floating point accuracy). ‘and’ Logical AND: returns 1 if both operands have a non-zero value and 0 if both are zero. Both operands have to be the same kind: either both images or both numbers. ‘or’ Logical OR: returns 1 if either one of the operands is non-zero and 0 only when both operators are zero. Both operands have to be the same kind: either both images or both numbers. ‘not’ Logical NOT: returns 1 when the operand is zero and 0 when the operand is non-zero. The operand can be an image or number, for an image, it is applied to each pixel separately. ‘isblank’ Test for a blank value (see *note Blank pixels::). In essence, this is very similar to the conditional operators: the output is either 1 or 0 (see the ‘less than’ operator above). The difference is that it only needs one operand. Because of the definition of a blank pixel, a blank value is not even equal to itself, so you cannot use the equal operator above to select blank pixels. See the “Blank pixels†box below for more on Blank pixels in Arithmetic. ‘where’ Change the input (pixel) value _where_/if a certain condition holds. The conditional operators above can be used to define the condition. Three operands are required for ‘where’. The input format is demonstrated in this simplified example: $ astarithmetic modify.fits binary.fits if-true.fits where The value of any pixel in ‘modify.fits’ that corresponds to a non-zero pixel of ‘binary.fits’ will be changed to the value of the same pixel in ‘if-true.fits’ (this may also be a number). The 3rd and 2nd popped operands (‘modify.fits’ and ‘binary.fits’ respectively, see *note Reverse polish notation::) have to have the same dimensions/size. ‘if-true.fits’ can be either a number, or have the same dimension/size as the other two. The 2nd popped operand (‘binary.fits’) has to have ‘uint8’ (or ‘unsigned char’ in standard C) type (see *note Numeric data types::). It is treated as a binary dataset (with only two values: zero and non-zero, hence the name ‘binary.fits’ in this example). However, commonly you won’t be dealing with an actual FITS file of a condition/binary image. You will probably define the condition in the same run based on some other reference image and use the conditional and logical operators above to make a true/false (or one/zero) image for you internally. For example the case below: $ astarithmetic in.fits reference.fits 100 gt new.fits where In the example above, any of the ‘in.fits’ pixels that has a value in ‘reference.fits’ greater than ‘100’, will be replaced with the corresponding pixel in ‘new.fits’. Effectively the ‘reference.fits 100 gt’ part created the condition/binary image which was added to the stack (in memory) and later used by ‘where’. The command above is thus equivalent to these two commands: $ astarithmetic reference.fits 100 gt --output=binary.fits $ astarithmetic in.fits binary.fits new.fits where Finally, the input operands are read and used independently, so you can use the same file more than once as any of the operands. When the 1st popped operand to ‘where’ (‘if-true.fits’) is a single number, it may be a NaN value (or any blank value, depending on its type) like the example below (see *note Blank pixels::). When the number is blank, it will be converted to the blank value of the type of the 3rd popped operand (‘in.fits’). Hence, in the example below, all the pixels in ‘reference.fits’ that have a value greater than 100, will become blank in the natural data type of ‘in.fits’ (even though NaN values are only defined for floating point types). $ astarithmetic in.fits reference.fits 100 gt nan where ‘bitand’ Bitwise AND operator: only bits with values of 1 in both popped operands will get the value of 1, the rest will be set to 0. For example (assuming numbers can be written as bit strings on the command-line): ‘00101000 00100010 bitand’ will give ‘00100000’. Note that the bitwise operators only work on integer type datasets. ‘bitor’ Bitwise inclusive OR operator: The bits where at least one of the two popped operands has a 1 value get a value of 1, the others 0. For example (assuming numbers can be written as bit strings on the command-line): ‘00101000 00100010 bitand’ will give ‘00101010’. Note that the bitwise operators only work on integer type datasets. ‘bitxor’ Bitwise exclusive OR operator: A bit will be 1 if it differs between the two popped operands. For example (assuming numbers can be written as bit strings on the command-line): ‘00101000 00100010 bitand’ will give ‘00001010’. Note that the bitwise operators only work on integer type datasets. ‘lshift’ Bitwise left shift operator: shift all the bits of the first operand to the left by a number of times given by the second operand. For example (assuming numbers can be written as bit strings on the command-line): ‘00101000 2 lshift’ will give ‘10100000’. This is equivalent to multiplication by 4. Note that the bitwise operators only work on integer type datasets. ‘rshift’ Bitwise right shift operator: shift all the bits of the first operand to the right by a number of times given by the second operand. For example (assuming numbers can be written as bit strings on the command-line): ‘00101000 2 rshift’ will give ‘00001010’. Note that the bitwise operators only work on integer type datasets. ‘bitnot’ Bitwise not (more formally known as one’s complement) operator: flip all the bits of the popped operand (note that this is the only unary, or single operand, bitwise operator). In other words, any bit with a value of ‘0’ is changed to ‘1’ and vice-versa. For example (assuming numbers can be written as bit strings on the command-line): ‘00101000 bitnot’ will give ‘11010111’. Note that the bitwise operators only work on integer type datasets/numbers. ‘uint8’ Convert the type of the popped operand to 8-bit un-signed integer type (see *note Numeric data types::). The internal conversion of C will be used. ‘int8’ Convert the type of the popped operand to 8-bit signed integer type (see *note Numeric data types::). The internal conversion of C will be used. ‘uint16’ Convert the type of the popped operand to 16-bit un-signed integer type (see *note Numeric data types::). The internal conversion of C will be used. ‘int16’ Convert the type of the popped operand to 16-bit signed integer (see *note Numeric data types::). The internal conversion of C will be used. ‘uint32’ Convert the type of the popped operand to 32-bit un-signed integer type (see *note Numeric data types::). The internal conversion of C will be used. ‘int32’ Convert the type of the popped operand to 32-bit signed integer type (see *note Numeric data types::). The internal conversion of C will be used. ‘uint64’ Convert the type of the popped operand to 64-bit un-signed integer (see *note Numeric data types::). The internal conversion of C will be used. ‘float32’ Convert the type of the popped operand to 32-bit (single precision) floating point (see *note Numeric data types::). The internal conversion of C will be used. ‘float64’ Convert the type of the popped operand to 64-bit (double precision) floating point (see *note Numeric data types::). The internal conversion of C will be used. *Blank pixels in Arithmetic:* Blank pixels in the image (see *note Blank pixels::) will be stored based on the data type. When the input is floating point type, blank values are NaN. One aspect of NaN values is that by definition they will fail on _any_ comparison. Hence both equal and not-equal operators will fail when both their operands are NaN! Therefore, the only way to guarantee selection of blank pixels is through the ‘isblank’ operator explained above. One way you can exploit this property of the NaN value to your advantage is when you want a fully zero-valued image (even over the blank pixels) based on an already existing image (with same size and world coordinate system settings). The following command will produce this for you: $ astarithmetic input.fits nan eq --output=all-zeros.fits Note that on the command-line you can write NaN in any case (for example ‘NaN’, or ‘NAN’ are also acceptable). Reading NaN as a floating point number in Gnuastro isn’t case-sensitive.  File: gnuastro.info, Node: Invoking astarithmetic, Prev: Arithmetic operators, Up: Arithmetic 6.2.3 Invoking Arithmetic ------------------------- Arithmetic will do pixel to pixel arithmetic operations on the individual pixels of input data and/or numbers. For the full list of operators with explanations, please see *note Arithmetic operators::. Any operand that only has a single element (number, or single pixel FITS image) will be read as a number, the rest of the inputs must have the same dimensions. The general template is: $ astarithmetic [OPTION...] ASTRdata1 [ASTRdata2] OPERATOR ... One line examples: ## Calculate (10.32-3.84)^2.7 quietly (will just print 155.329): $ astarithmetic -q 10.32 3.84 - 2.7 pow ## Inverse the input image (1/pixel): $ astarithmetic 1 image.fits / --out=inverse.fits ## Multiply each pixel in image by -1: $ astarithmetic image.fits -1 x --out=negative.fits ## Subtract extension 4 from extension 1 (counting from zero): $ astarithmetic image.fits image.fits - --out=skysub.fits \ --hdu=1 --hdu=4 ## Add two images, then divide them by 2 (2 is read as floating point): $ astarithmetic image1.fits image2.fits + 2f / --out=average.fits ## Use Arithmetic's average operator: $ astarithmetic image1.fits image2.fits average --out=average.fits ## Calculate the median of three images in three separate extensions: $ astarithmetic img1.fits img2.fits img3.fits median \ -h0 -h1 -h2 --out=median.fits If the output is an image, and the ‘--output’ option is not given, automatic output will use the name of the first FITS image encountered to generate an output file name, see *note Automatic output::. Also, output WCS information will be taken from the first input image encountered. When the output is a single number, that number will be printed in the standard output and no output file will be created. Arithmetic’s notation for giving operands to operators is described in *note Reverse polish notation::. To ignore certain pixels, set them as blank, see *note Blank pixels::, for example with the ‘where’ operator (see *note Arithmetic operators::). See *note Common options:: for a review of the options in all Gnuastro programs. Arithmetic just redefines the ‘--hdu’ option as explained below: ‘-h INT/STR’ ‘--hdu INT/STR’ The header data unit of the input FITS images, see *note Input output options::. Unlike most options in Gnuastro (which will ultimately only have one value for this option), Arithmetic allows ‘--hdu’ to be called multiple times and the value of each invocation will be stored separately (for the unlimited number of input images you would like to use). Recall that for other programs this (common) option only takes a single value. So in other programs, if you specify it multiple times on the command-line, only the last value will be used and in the configuration files, it will be ignored if it already has a value. The order of the values to ‘--hdu’ has to be in the same order as input FITS images. Options are first read from the command-line (from left to right), then top-down in each configuration file, see *note Configuration file precedence::. If the number of HDUs is less than the number of input images, Arithmetic will abort and notify you. However, if there are more HDUs than FITS images, there is no problem: they will be used in the given order (every time a FITS image comes up on the stack) and the extra HDUs will be ignored in the end. So there is no problem with having extra HDUs in the configuration files and by default several HDUs with a value of ‘0’ are kept in the system-wide configuration file when you install Gnuastro. ‘-g INT/STR’ ‘--globalhdu INT/STR’ Use the value to this option as the HDU of all input FITS files. This option is very convenient when you have many input files and the dataset of interest is in the same HDU of all the files. When this option is called, any values given to the ‘--hdu’ option (explained above) are ignored and will not be used. Arithmetic accepts two kinds of input: images and numbers. Images are considered to be any of the inputs that is a file name of a recognized type (see *note Arguments::) and has more than one element/pixel. Numbers on the command-line will be read into the smallest type (see *note Numeric data types::) that can store them, so ‘-2’ will be read as a ‘char’ type (which is signed on most systems and can thus keep negative values), ‘2500’ will be read as an ‘unsigned short’ (all positive numbers will be read as unsigned), while ‘3.1415926535897’ will be read as a ‘double’ and ‘3.14’ will be read as a ‘float’. To force a number to be read as float, add a ‘f’ after it, so ‘5f’ will be added to the stack as ‘float’ (see *note Reverse polish notation::). Unless otherwise stated (in *note Arithmetic operators::), the operators can deal with numeric multiple data types (see *note Numeric data types::). For example in “‘a.fits b.fits +’â€, the image types can be ‘long’ and ‘float’. In such cases, C’s internal type conversion will be used. The output type will be set to the higher-ranking type of the two inputs. Unsigned integer types have smaller ranking than their signed counterparts and floating point types have higher ranking than the integer types. So the internal C type conversions done in the example above are equivalent to this piece of C: size_t i; long a[100]; float b[100], out[100]; for(i=0;i<100;++i) out[i]=a[i]+b[i]; Relying on the default C type conversion significantly speeds up the processing and also requires less RAM (when using very large images). Some operators can only work on integer types (of any length, for example bitwise operators) while others only work on floating point types, (currently only the ‘pow’ operator). In such cases, if the operand type(s) are different, an error will be printed. Arithmetic also comes with internal type conversion operators which you can use to convert the data into the appropriate type, see *note Arithmetic operators::. The hyphen (‘-’) can be used both to specify options (see *note Options::) and also to specify a negative number which might be necessary in your arithmetic. In order to enable you to do this, Arithmetic will first parse all the input strings and if the first character after a hyphen is a digit, then that hyphen is temporarily replaced by the vertical tab character which is not commonly used. The arguments are then parsed and these strings will not be specified as an option. Then the given arguments are parsed and any vertical tabs are replaced back with a hyphen so they can be read as negative numbers. Therefore, as long as the names of the files you want to work on, don’t start with a vertical tab followed by a digit, there is no problem. An important consequence of this implementation is that you should not write negative fractions like this: ‘-.3’, instead write them as ‘-0.3’. Without any images, Arithmetic will act like a simple calculator and print the resulting output number on the standard output like the first example above. If you really want such calculator operations on the command-line, AWK (GNU AWK is the most common implementation) is much faster, easier and much more powerful. For example, the numerical one-line example above can be done with the following command. In general AWK is a fantastic tool and GNU AWK has a wonderful manual (). So if you often confront situations like this, or have to work with large text tables/catalogs, be sure to checkout AWK and simplify your life. $ echo "" | awk '{print (10.32-3.84)^2.7}' 155.329  File: gnuastro.info, Node: Convolve, Next: Warp, Prev: Arithmetic, Up: Data manipulation 6.3 Convolve ============ On an image, convolution can be thought of as a process to blur or remove the contrast in an image. If you are already familiar with the concept and just want to run Convolve, you can jump to *note Convolution kernel:: and *note Invoking astconvolve:: and skip the lengthy introduction on the basic definitions and concepts of convolution. There are generally two methods to convolve an image. The first and more intuitive one is in the “spatial domain†or using the actual image pixel values, see *note Spatial domain convolution::. The second method is when we manipulate the “frequency domainâ€, or work on the magnitudes of the different frequencies that constitute the image, see *note Frequency domain and Fourier operations::. Understanding convolution in the spatial domain is more intuitive and thus recommended if you are just starting to learn about convolution. However, getting a good grasp of the frequency domain is a little more involved and needs some concentration and some mathematical proofs. However, its reward is a faster operation and more importantly a very fundamental understanding of this very important operation. Convolution of an image will generally result in blurring the image because it mixes pixel values. In other words, if the image has sharp differences in neighboring pixel values(1), those sharp differences will become smoother. This has very good consequences in detection of signal in noise for example. In an actual observed image, the variation in neighboring pixel values due to noise can be very high. But after convolution, those variations will decrease and we have a better hope in detecting the possible underlying signal. Another case where convolution is extensively used is in mock images and modeling in general, convolution can be used to simulate the effect of the atmosphere or the optical system on the mock profiles that we create, see *note PSF::. Convolution is a very interesting and important topic in any form of signal analysis (including astronomical observations). So we have thoroughly(2) explained the concepts behind it in the following sub-sections. * Menu: * Spatial domain convolution:: Only using the input image values. * Frequency domain and Fourier operations:: Using frequencies in input. * Spatial vs. Frequency domain:: When to use which? * Convolution kernel:: How to specify the convolution kernel. * Invoking astconvolve:: Options and argument to Convolve. ---------- Footnotes ---------- (1) In astronomy, the only major time we confront such sharp borders in signal are cosmic rays. All other sources of signal in an image are already blurred by the atmosphere or the optics of the instrument. (2) A mathematician will certainly consider this explanation is incomplete and inaccurate. However this text is written for an understanding on the operations that are done on a real (not complex, discrete and noisy) astronomical image, not any general form of abstract function  File: gnuastro.info, Node: Spatial domain convolution, Next: Frequency domain and Fourier operations, Prev: Convolve, Up: Convolve 6.3.1 Spatial domain convolution -------------------------------- The pixels in an input image represent different “spatial†positions, therefore when convolution is done only using the actual input pixel values, we name the process as being done in the “Spatial domainâ€. In particular this is in contrast to the “frequency domain†that we will discuss later in *note Frequency domain and Fourier operations::. In the spatial domain (and in realistic situations where the image and the convolution kernel don’t extend to infinity), convolution is the process of changing the value of one pixel to the _weighted_ average of all the pixels in its _neighborhood_. The ‘neighborhood’ of each pixel (how many pixels in which direction) and the ‘weight’ function (how much each neighboring pixel should contribute depending on its position) are given through a second image which is known as a “kernelâ€(1). * Menu: * Convolution process:: More basic explanations. * Edges in the spatial domain:: Dealing with the edges of an image. ---------- Footnotes ---------- (1) Also known as filter, here we will use ‘kernel’.  File: gnuastro.info, Node: Convolution process, Next: Edges in the spatial domain, Prev: Spatial domain convolution, Up: Spatial domain convolution 6.3.1.1 Convolution process ........................... In convolution, the kernel specifies the weight and positions of the neighbors of each pixel. To find the convolved value of a pixel, the central pixel of the kernel is placed on that pixel. The values of each overlapping pixel in the kernel and image are multiplied by each other and summed for all the kernel pixels. To have one pixel in the center, the sides of the convolution kernel have to be an odd number. This process effectively mixes the pixel values of each pixel with its neighbors, resulting in a blurred image compared to the sharper input image. Formally, convolution is one kind of linear ‘spatial filtering’ in image processing texts. If we assume that the kernel has $2a+1$ and $2b+1$ pixels on each side, the convolved value of a pixel placed at $x$ and $y$ ($C_{x,y}$) can be calculated from the neighboring pixel values in the input image ($I$) and the kernel ($K$) from $$C_{x,y}=\sum_{s=-a}^{a}\sum_{t=-b}^{b}K_{s,t}\times{}I_{x+s,y+t}.$$ Any pixel coordinate that is outside of the image in the equation above will be considered to be zero. When the kernel is symmetric about its center the blurred image has the same orientation as the original image. However, if the kernel is not symmetric, the image will be affected in the opposite manner, this is a natural consequence of the definition of spatial filtering. In order to avoid this we can rotate the kernel about its center by 180 degrees so the convolved output can have the same original orientation. Technically speaking, only if the kernel is flipped the process is known _Convolution_. If it isn’t it is known as _Correlation_. To be a weighted average, the sum of the weights (the pixels in the kernel) have to be unity. This will have the consequence that the convolved image of an object and un-convolved object will have the same brightness (see *note Flux Brightness and magnitude::), which is natural, because convolution should not eat up the object photons, it only disperses them.  File: gnuastro.info, Node: Edges in the spatial domain, Prev: Convolution process, Up: Spatial domain convolution 6.3.1.2 Edges in the spatial domain ................................... In purely ‘linear’ spatial filtering (convolution), there are problems on the edges of the input image. Here we will explain the problem in the spatial domain. For a discussion of this problem from the frequency domain perspective, see *note Edges in the frequency domain::. The problem originates from the fact that on the edges, in practice(1), the sum of the weights we use on the actual image pixels is not unity. For example, as discussed above, a profile in the center of an image will have the same brightness before and after convolution. However, for partially imaged profile on the edge of the image, the brightness (sum of its pixel fluxes within the image, see *note Flux Brightness and magnitude::) will not be equal, some of the flux is going to be ‘eaten’ by the edges. If you ran ‘$ make check’ on the source files of Gnuastro, you can see the this effect by comparing the ‘convolve_frequency.fits’ with ‘convolve_spatial.fits’ in the ‘./tests/’ directory. In the spatial domain, by default, no assumption will be made about pixels outside of the image or any blank pixels in the image. The problem explained above will also occur on the sides of blank regions (see *note Blank pixels::). The solution to this edge effect problem is only possible in the spatial domain. For pixels near the edge, we have to abandon the assumption that the sum of the kernel pixels is unity during the convolution process(2). So taking $W$ as the sum of the kernel pixels that overlapped with non-blank and in-image pixels, the equation in *note Convolution process:: will become: $$C_{x,y}= { \sum_{s=-a}^{a}\sum_{t=-b}^{b}K_{s,t}\times{}I_{x+s,y+t} \over W}.$$ In this manner, objects which are near the edges of the image or blank pixels will also have the same brightness (within the image) before and after convolution. This correction is applied by default in Convolve when convolving in the spatial domain. To disable it, you can use the ‘--noedgecorrection’ option. In the frequency domain, there is no way to avoid this loss of flux near the edges of the image, see *note Edges in the frequency domain:: for an interpretation from the frequency domain perspective. Note that the edge effect discussed here is different from the one in *note If convolving afterwards::. In making mock images we want to simulate a real observation. In a real observation the images of the galaxies on the sides of the CCD are first blurred by the atmosphere and instrument, then imaged. So light from the parts of a galaxy which are immediately outside the CCD will affect the parts of the galaxy which are covered by the CCD. Therefore in modeling the observation, we have to convolve an image that is larger than the input image by exactly half of the convolution kernel. We can hence conclude that this correction for the edges is only useful when working on actual observed images (where we don’t have any more data on the edges) and not in modeling. ---------- Footnotes ---------- (1) Because we assumed the overlapping pixels outside the input image have a value of zero. (2) ofcourse the sum of the kernel pixels still have to be unity in general.  File: gnuastro.info, Node: Frequency domain and Fourier operations, Next: Spatial vs. Frequency domain, Prev: Spatial domain convolution, Up: Convolve 6.3.2 Frequency domain and Fourier operations --------------------------------------------- Getting a good grip on the frequency domain is usually not an easy job! So we have decided to give the issue a complete review here. Convolution in the frequency domain (see *note Convolution theorem::) heavily relies on the concepts of Fourier transform (*note Fourier transform::) and Fourier series (*note Fourier series::) so we will be investigating these important operations first. It has become something of a cliché for people to say that the Fourier series “is a way to represent a (wave-like) function as the sum of simple sine waves†(from Wikipedia). However, sines themselves are abstract functions, so this statement really adds no extra layer of physical insight. Before jumping head-first into the equations and proofs, we will begin with a historical background to see how the importance of frequencies actually roots in our ancient desire to see everything in terms of circles. A short review of how the complex plane should be interpreted is then given. Having paved the way with these two basics, we define the Fourier series and subsequently the Fourier transform. The final aim is to explain discrete Fourier transform, however some very important concepts need to be solidified first: The Dirac comb, convolution theorem and sampling theorem. So each of these topics are explained in their own separate sub-sub-section before going on to the discrete Fourier transform. Finally we revisit (after *note Edges in the spatial domain::) the problem of convolution on the edges, but this time in the frequency domain. Understanding the sampling theorem and the discrete Fourier transform is very important in order to be able to pull out valuable science from the discrete image pixels. Therefore we have included the mathematical proofs and figures so you can have a clear understanding of these very important concepts. * Menu: * Fourier series historical background:: Historical background. * Circles and the complex plane:: Interpreting complex numbers. * Fourier series:: Fourier Series definition. * Fourier transform:: Fourier Transform definition. * Dirac delta and comb:: Dirac delta and Dirac comb. * Convolution theorem:: Derivation of Convolution theorem. * Sampling theorem:: Sampling theorem (Nyquist frequency). * Discrete Fourier transform:: Derivation and explanation of DFT. * Fourier operations in two dimensions:: Extend to 2D images. * Edges in the frequency domain:: Interpretation of edge effects.  File: gnuastro.info, Node: Fourier series historical background, Next: Circles and the complex plane, Prev: Frequency domain and Fourier operations, Up: Frequency domain and Fourier operations 6.3.2.1 Fourier series historical background ............................................ Ever since the ancient times, the circle has been (and still is) the simplest shape for abstract comprehension. All you need is a center point and a radius and you are done. All the points on a circle are at a fixed distance from the center. However, the moment you try to connect this elegantly simple and beautiful abstract construct (the circle) with the real world (for example compute its area or its circumference), things become really hard (ideally, impossible) because the irrational number $\pi$ gets involved. The key to understanding the Fourier series (thus the Fourier transform and finally the Discrete Fourier Transform) is our ancient desire to express everything in terms of circles or the most exceptionally simple and elegant abstract human construct. Most people prefer to say the same thing in a more ahistorical manner: to break a function into sines and cosines. As the term “ancient†in the previous sentence implies, Jean-Baptiste Joseph Fourier (1768 – 1830 A.D.) was not the first person to do this. The main reason we know this process by his name today is that he came up with an ingenious method to find the necessary coefficients (radius of) and frequencies (“speed†of rotation on) the circles for any generic (integrable) function. [image src="gnuastro-figures/epicycles.png" alt="Middle ages epicycles along with two demonstrations of breaking a generic function using epicycles." text="../gnuastro-figures//epicycles.png"] Figure 6.1: Epicycles and the Fourier series. Left: A demonstration of Mercury’s epicycles relative to the “center of the world†by Qutb al-Din al-Shirazi (1236 – 1311 A.D.) retrieved from Wikipedia (https://commons.wikimedia.org/wiki/File:Ghotb2.jpg). Middle (https://commons.wikimedia.org/wiki/File:Fourier_series_square_wave_circles_animation.gif) and Right: How adding more epicycles (or terms in the Fourier series) will approximate functions. The right (https://commons.wikimedia.org/wiki/File:Fourier_series_sawtooth_wave_circles_animation.gif) animation is also available. Like most aspects of mathematics, this process of interpreting everything in terms of circles, began for astronomical purposes. When astronomers noticed that the orbit of Mars and other outer planets, did not appear to be a simple circle (as everything should have been in the heavens). At some point during their orbit, the revolution of these planets would become slower, stop, go back a little (in what is known as the retrograde motion) and then continue going forward again. The correction proposed by Ptolemy (90 – 168 A.D.) was the most agreed upon. He put the planets on Epicycles or circles whose center itself rotates on a circle whose center is the earth. Eventually, as observations became more and more precise, it was necessary to add more and more epicycles in order to explain the complex motions of the planets(1). *note Figure 6.1: epicycle.(Left) shows an example depiction of the epicycles of Mercury in the late 13th century. Of course we now know that if they had abdicated the Earth from its throne in the center of the heavens and allowed the Sun to take its place, everything would become much simpler and true. But there wasn’t enough observational evidence for changing the “professional consensus†of the time to this radical view suggested by a small minority(2). So the pre-Galilean astronomers chose to keep Earth in the center and find a correction to the models (while keeping the heavens a purely “circular†order). The main reason we are giving this historical background which might appear off topic is to give historical evidence that while such “approximations†do work and are very useful for pragmatic reasons (like measuring the calendar from the movement of astronomical bodies). They offer no physical insight. The astronomers who were involved with the Ptolemaic world view had to add a huge number of epicycles during the centuries after Ptolemy in order to explain more accurate observations. Finally the death knell of this world-view was Galileo’s observations with his new instrument (the telescope). So the physical insight, which is what Astronomers and Physicists are interested in (as opposed to Mathematicians and Engineers who just like proving and optimizing or calculating!) comes from being creative and not limiting our selves to such approximations. Even when they work. ---------- Footnotes ---------- (1) See the Wikipedia page on “Deferent and epicycle†for a more complete historical review. (2) Aristarchus of Samos (310 – 230 B.C.) appears to be one of the first people to suggest the Sun being in the center of the universe. This approach to science (that the standard model is defined by consensus) and the fact that this consensus might be completely wrong still applies equally well to our models of particle physics and cosmology today.  File: gnuastro.info, Node: Circles and the complex plane, Next: Fourier series, Prev: Fourier series historical background, Up: Frequency domain and Fourier operations 6.3.2.2 Circles and the complex plane ..................................... Before going onto the derivation, it is also useful to review how the complex numbers and their plane relate to the circles we talked about above. The two schematics in the middle and right of *note Figure 6.1: epicycle. show how a 1D function of time can be made using the 2D real and imaginary surface. Seeing the animation in Wikipedia will really help in understanding this important concept. At each point in time, we take the vertical coordinate of the point and use it to find the value of the function at that point in time. *note Figure 6.2: iandtime. shows this relation with the axes marked. Leonhard Euler(1) (1707 – 1783 A.D.) showed that the complex exponential ($e^{iv}$ where $v$ is real) is periodic and can be written as: $e^{iv}=\cos{v}+isin{v}$. Therefore $e^{iv+2\pi}=e^{iv}$. Later, Caspar Wessel (mathematician and cartographer 1745 – 1818 A.D.) showed how complex numbers can be displayed as vectors on a plane. Euler’s identity might seem counter intuitive at first, so we will try to explain it geometrically (for deeper physical insight). On the real-imaginary 2D plane (like the left hand plot in each box of *note Figure 6.2: iandtime.), multiplying a number by $i$ can be interpreted as rotating the point by $90$ degrees (for example the value $3$ on the real axis becomes $3i$ on the imaginary axis). On the other hand, $e\equiv\lim_{n\rightarrow\infty}(1+{1\over n})^n$, therefore, defining $m\equiv nu$, we get: $$e^{u}=\lim_{n\rightarrow\infty}\left(1+{1\over n}\right)^{nu} =\lim_{n\rightarrow\infty}\left(1+{u\over nu}\right)^{nu} =\lim_{m\rightarrow\infty}\left(1+{u\over m}\right)^{m}$$ Taking $u\equiv iv$ the result can be written as a generic complex number (a function of $v$): $$e^{iv}=\lim_{m\rightarrow\infty}\left(1+i{v\over m}\right)^{m}=a(v)+ib(v)$$ For $v=\pi$, a nice geometric animation of going to the limit can be seen on Wikipedia (https://commons.wikimedia.org/wiki/File:ExpIPi.gif). We see that $\lim_{m\rightarrow\infty}a(\pi)=-1$, while $\lim_{m\rightarrow\infty}b(\pi)=0$, which gives the famous $e^{i\pi}=-1$ equation. The final value is the real number $-1$, however the distance of the polygon points traversed as $m\rightarrow\infty$ is half the circumference of a circle or $\pi$, showing how $v$ in the equation above can be interpreted as an angle in units of radians and therefore how $a(v)=cos(v)$ and $b(v)=sin(v)$. Since $e^{iv}$ is periodic (let’s assume with a period of $T$), it is more clear to write it as $v\equiv{2{\pi}n\over T}t$ (where $n$ is an integer), so $e^{iv}=e^{i{2{\pi}n\over T}t}$. The advantage of this notation is that the period ($T$) is clearly visible and the frequency ($2{\pi}n \over T$, in units of 1/cycle) is defined through the integer $n$. In this notation, $t$ is in units of “cycleâ€s. As we see from the examples in *note Figure 6.1: epicycle. and *note Figure 6.2: iandtime, for each constituting frequency, we need a respective ‘magnitude’ or the radius of the circle in order to accurately approximate the desired 1D function. The concepts of “period†and “frequency†are relatively easy to grasp when using temporal units like time because this is how we define them in every-day life. However, in an image (astronomical data), we are dealing with spatial units like distance. Therefore, by one “period†we mean the _distance_ at which the signal is identical and frequency is defined as the inverse of that spatial “periodâ€. The complex circle of *note Figure 6.2: iandtime. can be thought of the Moon rotating about Earth which is rotating around the Sun; so the “Real (signal)†axis shows the Moon’s position as seen by a distant observer on the Sun as time goes by. Because of the scalar (not having any direction or vector) nature of time, *note Figure 6.2: iandtime. is easier to understand in units of time. When thinking about spatial units, mentally replace the “Time (sec)†axis with “Distance (meters)â€. Because length has direction and is a vector, visualizing the rotation of the imaginary circle and the advance along the “Distance (meters)†axis is not as simple as temporal units like time. [image src="gnuastro-figures/iandtime.png" text="../gnuastro-figures//iandtime.eps"] Figure 6.2: Relation between the real (signal), imaginary ($i\equiv\sqrt{-1}$) and time axes at two snapshots of time. ---------- Footnotes ---------- (1) Other forms of this equation were known before Euler. For example in 1707 A.D. (the year of Euler’s birth) Abraham de Moivre (1667 – 1754 A.D.) showed that $(\cos{x}+i\sin{x})^n=\cos(nx)+i\sin(nx)$. In 1714 A.D., Roger Cotes (1682 – 1716 A.D. a colleague of Newton who proofread the second edition of Principia) showed that: $ix=\ln(\cos{x}+i\sin{x})$.  File: gnuastro.info, Node: Fourier series, Next: Fourier transform, Prev: Circles and the complex plane, Up: Frequency domain and Fourier operations 6.3.2.3 Fourier series ...................... In astronomical images, our variable (brightness, or number of photo-electrons, or signal to be more generic) is recorded over the 2D spatial surface of a camera pixel. However to make things easier to understand, here we will assume that the signal is recorded in 1D (assume one row of the 2D image pixels). Also for this section and the next (*note Fourier transform::) we will be talking about the signal before it is digitized or pixelated. Let’s assume that we have the continuous function $f(l)$ which is integrable in the interval $[l_0, l_0+L]$ (always true in practical cases like images). Take $l_0$ as the position of the first pixel in the assumed row of the image and $L$ as the width of the image along that row. The units of $l_0$ and $L$ can be in any spatial units (for example meters) or an angular unit (like radians) multiplied by a fixed distance which is more common. To approximate $f(l)$ over this interval, we need to find a set of frequencies and their corresponding ‘magnitude’s (see *note Circles and the complex plane::). Therefore our aim is to show $f(l)$ as the following sum of periodic functions: $$f(l)=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}n\over L}l} $$ Note that the different frequencies ($2{\pi}n/L$, in units of cycles per meters for example) are not arbitrary. They are all integer multiples of the fundamental frequency of $\omega_0=2\pi/L$. Recall that $L$ was the length of the signal we want to model. Therefore, we see that the smallest possible frequency (or the frequency resolution) in the end, depends on the length we observed the signal or $L$. In the case of each dimension on an image, this is the size of the image in the respective dimension. The frequencies have been defined in this “harmonic†fashion to insure that the final sum is periodic outside of the $[l_0, l_0+L]$ interval too. At this point, you might be thinking that the sky is not periodic with the same period as my camera’s view angle. You are absolutely right! The important thing is that since your camera’s observed region is the only region we are “observing†and will be using, the rest of the sky is irrelevant; so we can safely assume the sky is periodic outside of it. However, this working assumption will haunt us later in *note Edges in the frequency domain::. The frequencies are thus determined by definition. So all we need to do is to find the coefficients ($c_n$), or magnitudes, or radii of the circles for each frequency which is identified with the integer $n$. Fourier’s approach was to multiply both sides with a fixed term: $$f(l)e^{-i{2{\pi}m\over L}l}=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}(n-m)\over L}l} $$ where $m>0$(1). We can then integrate both sides over the observation period: $$\int_{l_0}^{l_0+L}f(l)e^{-i{2{\pi}m\over L}l}dl =\int_{l_0}^{l_0+L}\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}(n-m)\over L}l}dl=\displaystyle\sum_{n=-\infty}^{\infty}c_n\int_{l_0}^{l_0+L}e^{i{2{\pi}(n-m)\over L}l}dl $$ Both $n$ and $m$ are positive integers. Also, we know that a complex exponential is periodic so after one period ($L$) it comes back to its starting point. Therefore $\int_{l_0}^{l_0+L}e^{2{\pi}k/L}dl=0$ for any $k>0$. However, when $k=0$, this integral becomes: $\int_{l_0}^{l_0+T}e^0dt=\int_{l_0}^{l_0+T}dt=T$. Hence since the integral will be zero for all $n{\neq}m$, we get: $$\displaystyle\sum_{n=-\infty}^{\infty}c_n\int_{l_0}^{l_0+T}e^{i{2{\pi}(n-m)\over L}l}dl=Lc_m $$ The origin of the axis is fundamentally an arbitrary position. So let’s set it to the start of the image such that $l_0=0$. So we can find the “magnitude†of the frequency $2{\pi}m/L$ within $f(l)$ through the relation: $$c_m={1\over L}\int_{0}^{L}f(l)e^{-i{2{\pi}m\over L}l}dl $$ ---------- Footnotes ---------- (1) We could have assumed $m<0$ and set the exponential to positive, but this is more clear.  File: gnuastro.info, Node: Fourier transform, Next: Dirac delta and comb, Prev: Fourier series, Up: Frequency domain and Fourier operations 6.3.2.4 Fourier transform ......................... In *note Fourier series::, we had to assume that the function is periodic outside of the desired interval with a period of $L$. Therefore, assuming that $L\rightarrow\infty$ will allow us to work with any function. However, with this approximation, the fundamental frequency ($\omega_0$) or the frequency resolution that we discussed in *note Fourier series:: will tend to zero: $\omega_0\rightarrow0$. In the equation to find $c_m$, every $m$ represented a frequency (multiple of $\omega_0$) and the integration on $l$ removes the dependence of the right side of the equation on $l$, making it only a function of $m$ or frequency. Let’s define the following two variables: $$\omega{\equiv}m\omega_0={2{\pi}m\over L}$$ $$F(\omega){\equiv}Lc_m$$ The equation to find the coefficients of each frequency in *note Fourier series:: thus becomes: $$F(\omega)=\int_{-\infty}^{\infty}f(l)e^{-i{\omega}l}dl. $$ The function $F(\omega)$ is thus the _Fourier transform_ of $f(l)$ in the frequency domain. So through this transformation, we can find (analyze) the magnitudes of the constituting frequencies or the value in the frequency space(1) of our spatial input function. The great thing is that we can also do the reverse and later synthesize the input function from its Fourier transform. Let’s do it: with the approximations above, multiply the right side of the definition of the Fourier Series (*note Fourier series::) with $1=L/L=({\omega_0}L)/(2\pi)$: $$f(l)={1\over 2\pi}\displaystyle\sum_{n=-\infty}^{\infty}Lc_ne^{{2{\pi}in\over L}l}\omega_0={1\over 2\pi}\displaystyle\sum_{n=-\infty}^{\infty}F(\omega)e^{i{\omega}l}\Delta\omega $$ To find the right most side of this equation, we renamed $\omega_0$ as $\Delta\omega$ because it was our resolution, $2{\pi}n/L$ was written as $\omega$ and finally, $Lc_n$ was written as $F(\omega)$ as we defined above. Now, as $L\rightarrow\infty$, $\Delta\omega\rightarrow0$ so we can write: $$f(l)={1\over 2\pi}\int_{-\infty}^{\infty}F(\omega)e^{i{\omega}l}d\omega $$ Together, these two equations provide us with a very powerful set of tools that we can use to process (analyze) and recreate (synthesize) the input signal. Through the first equation, we can break up our input function into its constituent frequencies and analyze it, hence it is also known as _analysis_. Using the second equation, we can synthesize or make the input function from the known frequencies and their magnitudes. Thus it is known as _synthesis_. Here, we symbolize the Fourier transform (analysis) and its inverse (synthesis) of a function $f(l)$ and its Fourier Transform $F(\omega)$ as ${\cal F}[f]$ and ${\cal F}^{-1}[F]$. ---------- Footnotes ---------- (1) As we discussed before, this ‘magnitude’ can be interpreted as the radius of the circle rotating at this frequency in the epicyclic interpretation of the Fourier series, see *note Figure 6.1: epicycle. and *note Figure 6.2: iandtime.  File: gnuastro.info, Node: Dirac delta and comb, Next: Convolution theorem, Prev: Fourier transform, Up: Frequency domain and Fourier operations 6.3.2.5 Dirac delta and comb ............................ The Dirac $\delta$ (delta) function (also known as an impulse) is the way that we convert a continuous function into a discrete one. It is defined to satisfy the following integral: $$\int_{-\infty}^{\infty}\delta(l)dl=1$$ When integrated with another function, it gives that function’s value at $l=0$: $$\int_{-\infty}^{\infty}f(l)\delta(l)dt=f(0)$$ An impulse positioned at another point (say $l_0$) is written as $\delta(l-l_0)$: $$\int_{-\infty}^{\infty}f(l)\delta(l-l_0)dt=f(l_0)$$ The Dirac $\delta$ function also operates similarly if we use summations instead of integrals. The Fourier transform of the delta function is: $${\cal F}[\delta(l)]=\int_{-\infty}^{\infty}\delta(l)e^{-i{\omega}l}dl=e^{-i{\omega}0}=1$$ $${\cal F}[\delta(l-l_0)]=\int_{-\infty}^{\infty}\delta(l-l_0)e^{-i{\omega}l}dl=e^{-i{\omega}l_0}$$ From the definition of the Dirac $\delta$ we can also define a Dirac comb (${\rm III}_P$) or an impulse train with infinite impulses separated by $P$: $${\rm III}_P(l)\equiv\displaystyle\sum_{k=-\infty}^{\infty}\delta(l-kP) $$ $P$ is chosen to represent “pixel width†later in *note Sampling theorem::. Therefore the Dirac comb is periodic with a period of $P$. We have intentionally used a different name for the period of the Dirac comb compared to the input signal’s length of observation that we showed with $L$ in *note Fourier series::. This difference is highlighted here to avoid confusion later when these two periods are needed together in *note Discrete Fourier transform::. The Fourier transform of the Dirac comb will be necessary in *note Sampling theorem::, so let’s derive it. By its definition, it is periodic, with a period of $P$, so the Fourier coefficients of its Fourier Series (*note Fourier series::) can be calculated within one period: $${\rm III}_P=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}n\over P}l}$$ We can now find the $c_n$ from *note Fourier series::: $$c_n={1\over P}\int_{-P/2}^{P/2}\delta(l)e^{-i{2{\pi}n\over P}l} ={1\over P}\quad\quad \rightarrow \quad\quad {\rm III}_P={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}e^{i{2{\pi}n\over P}l} $$ So we can write the Fourier transform of the Dirac comb as: $${\cal F}[{\rm III}_P]=\int_{-\infty}^{\infty}{\rm III}_Pe^{-i{\omega}l}dl ={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}e^{-i(\omega-{2{\pi}n\over P})l}dl={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\delta\left(\omega-{2{\pi}n\over P}\right) $$ In the last step, we used the fact that the complex exponential is a periodic function, that $n$ is an integer and that as we defined in *note Fourier transform::, $\omega{\equiv}m\omega_0$, where $m$ was an integer. The integral will be zero for any $\omega$ that is not equal to $2{\pi}n/P$, a more complete explanation can be seen in *note Fourier series::. Therefore, while in the spatial domain the impulses had spacing of $P$ (meters for example), in the frequency space, the spacing between the different impulses are $2\pi/P$ cycles per meters.  File: gnuastro.info, Node: Convolution theorem, Next: Sampling theorem, Prev: Dirac delta and comb, Up: Frequency domain and Fourier operations 6.3.2.6 Convolution theorem ........................... The convolution (shown with the $\ast$ operator) of the two functions $f(l)$ and $h(l)$ is defined as: $$c(l)\equiv[f{\ast}h](l)=\int_{-\infty}^{\infty}f(\tau)h(l-\tau)d\tau $$ See *note Convolution process:: for a more detailed physical (pixel based) interpretation of this definition. The Fourier transform of convolution ($C(\omega)$) can be written as: $$ C(\omega)=\int_{-\infty}^{\infty}[f{\ast}h](l)e^{-i{\omega}l}dl= \int_{-\infty}^{\infty}f(\tau)\left[\int_{-\infty}^{\infty}h(l-\tau)e^{-i{\omega}l}dl\right]d\tau $$ To solve the inner integral, let’s define $s{\equiv}l-\tau$, so that $ds=dl$ and $l=s+\tau$ then the inner integral becomes: $$\int_{-\infty}^{\infty}h(l-\tau)e^{-i{\omega}l}dl= \int_{-\infty}^{\infty}h(s)e^{-i{\omega}(s+\tau)}ds=e^{-i{\omega}\tau}\int_{-\infty}^{\infty}h(s)e^{-i{\omega}s}ds=H(\omega)e^{-i{\omega}\tau} $$ where $H(\omega)$ is the Fourier transform of $h(l)$. Substituting this result for the inner integral above, we get: $$C(\omega)=H(\omega)\int_{-\infty}^{\infty}f(\tau)e^{-i{\omega}\tau}d\tau=H(\omega)F(\omega)=F(\omega)H(\omega) $$ where $F(\omega)$ is the Fourier transform of $f(l)$. So multiplying the Fourier transform of two functions individually, we get the Fourier transform of their convolution. The convolution theorem also proves a relation between the convolutions in the frequency space. Let’s define: $$D(\omega){\equiv}F(\omega){\ast}H(\omega)$$ Applying the inverse Fourier Transform or synthesis equation (*note Fourier transform::) to both sides and following the same steps above, we get: $$d(l)=f(l)h(l)$$ Where $d(l)$ is the inverse Fourier transform of $D(\omega)$. We can therefore re-write the two equations above formally as the convolution theorem: $$ {\cal F}[f{\ast}h]={\cal F}[f]{\cal F}[h] $$ $$ {\cal F}[fh]={\cal F}[f]\ast{\cal F}[h] $$ Besides its usefulness in blurring an image by convolving it with a given kernel, the convolution theorem also enables us to do another very useful operation in data analysis: to match the blur (or PSF) between two images taken with different telescopes/cameras or under different atmospheric conditions. This process is also known as de-convolution. Let’s take $f(l)$ as the image with a narrower PSF (less blurry) and $c(l)$ as the image with a wider PSF which appears more blurred. Also let’s take $h(l)$ to represent the kernel that should be convolved with the sharper image to create the more blurry image. Above, we proved the relation between these three images through the convolution theorem. But there, we assumed that $f(l)$ and $h(l)$ are known (given) and the convolved image is desired. In de-convolution, we have $f(l)$ –the sharper image– and $f*h(l)$ –the more blurry image– and we want to find the kernel $h(l)$. The solution is a direct result of the convolution theorem: $$ {\cal F}[h]={{\cal F}[f{\ast}h]\over {\cal F}[f]} \quad\quad {\rm or} \quad\quad h(l)={\cal F}^{-1}\left[{{\cal F}[f{\ast}h]\over {\cal F}[f]}\right] $$ While this works really nice, it has two problems: • If ${\cal F}[f]$ has any zero values, then the inverse Fourier transform will not be a number! • If there is significant noise in the image, then the high frequencies of the noise are going to significantly reduce the quality of the final result. A standard solution to both these problems is the Weiner de-convolution algorithm(1). ---------- Footnotes ---------- (1)  File: gnuastro.info, Node: Sampling theorem, Next: Discrete Fourier transform, Prev: Convolution theorem, Up: Frequency domain and Fourier operations 6.3.2.7 Sampling theorem ........................ Our mathematical functions are continuous, however, our data collecting and measuring tools are discrete. Here we want to give a mathematical formulation for digitizing the continuous mathematical functions so that later, we can retrieve the continuous function from the digitized recorded input. Assuming that we have a continuous function $f(l)$, then we can define $f_s(l)$ as the ‘sampled’ $f(l)$ through the Dirac comb (see *note Dirac delta and comb::): $$f_s(l)=f(l){\rm III}_P=\displaystyle\sum_{n=-\infty}^{\infty}f(l)\delta(l-nP) $$ The discrete data-element $f_k$ (for example, a pixel in an image), where $k$ is an integer, can thus be represented as: $$f_k=\int_{-\infty}^{\infty}f_s(l)dl=\int_{-\infty}^{\infty}f(l)\delta(l-kP)dt=f(kP)$$ Note that in practice, our discrete data points are not found in this fashion. Each detector pixel (in an image for example) has an area and averages the signal it receives over that area, not a mathematical point as the Dirac $\delta$ function defines. However, as long as the variation in the signal over one detector pixel is not significant, this can be a good approximation. Having put this issue to the side, we can now try to find the relation between the Fourier transforms of the un-sampled $f(l)$ and the sampled $f_s(l)$. For a more clear notation, let’s define: $$F_s(\omega)\equiv{\cal F}[f_s]$$ $$D(\omega)\equiv{\cal F}[{\rm III}_P]$$ Then using the Convolution theorem (see *note Convolution theorem::), $F_s(\omega)$ can be written as: $$F_s(\omega)={\cal F}[f(l){\rm III}_P]=F(\omega){\ast}D(\omega)$$ Finally, from the definition of convolution and the Fourier transform of the Dirac comb (see *note Dirac delta and comb::), we get: $$\eqalign{ F_s(\omega) &= \int_{-\infty}^{\infty}F(\omega)D(\omega-\mu)d\mu \cr &= {1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}F(\omega)\delta\left(\omega-\mu-{2{\pi}n\over P}\right)d\mu \cr &= {1\over P}\displaystyle\sum_{n=-\infty}^{\infty}F\left( \omega-{2{\pi}n\over P}\right).\cr } $$ $F(\omega)$ was only a simple function, see *note Figure 6.3: samplingfreq.(left). However, from the sampled Fourier transform function we see that $F_s(\omega)$ is the superposition of infinite copies of $F(\omega)$ that have been shifted, see *note Figure 6.3: samplingfreq.(right). From the equation, it is clear that the shift in each copy is $2\pi/P$. [image src="gnuastro-figures/samplingfreq.png" text="../gnuastro-figures//samplingfreq.eps"] Figure 6.3: Sampling causes infinite repetition in the frequency domain. FT is an abbreviation for ‘Fourier transform’. $\omega_m$ represents the maximum frequency present in the input. $F(\omega)$ is only symmetric on both sides of 0 when the input is real (not complex). In general $F(\omega)$ is complex and thus cannot be simply plotted like this. Here we have assumed a real Gaussian $f(t)$ which has produced a Gaussian $F(\omega)$. The input $f(l)$ can have any distribution of frequencies in it. In the example of *note Figure 6.3: samplingfreq.(left), the input consisted of a range of frequencies equal to $\Delta\omega=2\omega_m$. Fortunately as *note Figure 6.3: samplingfreq.(right) shows, the assumed pixel size ($P$) we used to sample this hypothetical function was such that $2\pi/P>\Delta\omega$. The consequence is that each copy of $F(\omega)$ has become completely separate from the surrounding copies. Such a digitized (sampled) data set is thus called _over-sampled_. When $2\pi/P=\Delta\omega$, $P$ is just small enough to finely separate even the largest frequencies in the input signal and thus it is known as _critically-sampled_. Finally if $2\pi/P<\Delta\omega$ we are dealing with an _under-sampled_ data set. In an under-sampled data set, the separate copies of $F(\omega)$ are going to overlap and this will deprive us of recovering high constituent frequencies of $f(l)$. The effects of under-sampling in an image with high rates of change (for example a brick wall imaged from a distance) can clearly be visually seen and is known as _aliasing_. When the input $f(l)$ is composed of a finite range of frequencies, $f(l)$ is known as a _band-limited_ function. The example in *note Figure 6.3: samplingfreq.(left) was a nice demonstration of such a case: for all $\omega<-\omega_m$ or $\omega>\omega_m$, we have $F(\omega)=0$. Therefore, when the input function is band-limited and our detector’s pixels are placed such that we have critically (or over-) sampled it, then we can exactly reproduce the continuous $f(l)$ from the discrete or digitized samples. To do that, we just have to isolate one copy of $F(\omega)$ from the infinite copies and take its inverse Fourier transform. This ability to exactly reproduce the continuous input from the sampled or digitized data leads us to the _sampling theorem_ which connects the inherent property of the continuous signal (its maximum frequency) to that of the detector (the spacing between its pixels). The sampling theorem states that the full (continuous) signal can be recovered when the pixel size ($P$) and the maximum constituent frequency in the signal ($\omega_m$) have the following relation(1): $${2\pi\over P}>2\omega_m$$ This relation was first formulated by Harry Nyquist (1889 – 1976 A.D.) in 1928 and formally proved in 1949 by Claude E. Shannon (1916 – 2001 A.D.) in what is now known as the Nyquist-Shannon sampling theorem. In signal processing, the signal is produced (synthesized) by a transmitter and is received and de-coded (analyzed) by a receiver. Therefore producing a band-limited signal is necessary. In astronomy, we do not produce the shapes of our targets, we are only observers. Galaxies can have any shape and size, therefore ideally, our signal is not band-limited. However, since we are always confined to observing through an aperture, the aperture will cause a point source (for which $\omega_m=\infty$) to be spread over several pixels. This spread is quantitatively known as the point spread function or PSF. This spread does blur the image which is undesirable; however, for this analysis it produces the positive outcome that there will be a finite $\omega_m$. Though we should caution that any detector will have noise which will add lots of very high frequency (ideally infinite) changes between the pixels. However, the coefficients of those noise frequencies are usually exceedingly small. ---------- Footnotes ---------- (1) This equation is also shown in some places without the $2\pi$. Whether $2\pi$ is included or not depends on how you define the frequency  File: gnuastro.info, Node: Discrete Fourier transform, Next: Fourier operations in two dimensions, Prev: Sampling theorem, Up: Frequency domain and Fourier operations 6.3.2.8 Discrete Fourier transform .................................. As we have stated several times so far, the input image is a digitized, pixelated or discrete array of values ($f_s(l)$, see *note Sampling theorem::). The input is not a continuous function. Also, all our numerical calculations can only be done on a sampled, or discrete Fourier transform. Note that $F_s(\omega)$ is not discrete, it is continuous. One way would be to find the analytic $F_s(\omega)$, then sample it at any desired “freq-pixelâ€(1) spacing. However, this process would involve two steps of operations and computers in particular are not too good at analytic operations for the first step. So here, we will derive a method to directly find the ‘freq-pixel’ated $F_s(\omega)$ from the pixelated $f_s(l)$. Let’s start with the definition of the Fourier transform (see *note Fourier transform::): $$F_s(\omega)=\int_{-\infty}^{\infty}f_s(l)e^{-i{\omega}l}dl $$ From the definition of $f_s(\omega)$ (using $x$ instead of $n$) we get: $$\eqalign{ F_s(\omega) &= \displaystyle\sum_{x=-\infty}^{\infty} \int_{-\infty}^{\infty}f(l)\delta(l-xP)e^{-i{\omega}l}dl \cr &= \displaystyle\sum_{x=-\infty}^{\infty} f_xe^{-i{\omega}xP} } $$ Where $f_x$ is the value of $f(l)$ on the point $x$ or the value of the $x$th pixel. As shown in *note Sampling theorem:: this function is infinitely periodic with a period of $2\pi/P$. So all we need is the values within one period: $0<\omega<2\pi/P$, see *note Figure 6.3: samplingfreq. We want $X$ samples within this interval, so the frequency difference between each frequency sample or freq-pixel is $1/XP$. Hence we will evaluate the equation above on the points at: $$\omega={u\over XP} \quad\quad u = 0, 1, 2, ..., X-1$$ Therefore the value of the freq-pixel $u$ in the frequency domain is: $$F_u=\displaystyle\sum_{x=0}^{X-1} f_xe^{-i{ux\over X}} $$ Therefore, we see that for each freq-pixel in the frequency domain, we are going to need all the pixels in the spatial domain(2). If the input (spatial) pixel row is also $X$ pixels wide, then we can exactly recover the $x$th pixel with the following summation: $$f_x={1\over X}\displaystyle\sum_{u=0}^{X-1} F_ue^{i{ux\over X}} $$ When the input pixel row (we are still only working on 1D data) has $X$ pixels, then it is $L=XP$ spatial units wide. $L$, or the length of the input data was defined in *note Fourier series:: and $P$ or the space between the pixels in the input was defined in *note Dirac delta and comb::. As we saw in *note Sampling theorem::, the input (spatial) pixel spacing ($P$) specifies the range of frequencies that can be studied and in *note Fourier series:: we saw that the length of the (spatial) input, ($L$) determines the resolution (or size of the freq-pixels) in our discrete Fourier transformed image. Both result from the fact that the frequency domain is the inverse of the spatial domain. ---------- Footnotes ---------- (1) We are using the made-up word “freq-pixel†so they are not confused with spatial domain “pixelsâ€. (2) So even if one pixel is a blank pixel (see *note Blank pixels::), all the pixels in the frequency domain will also be blank.  File: gnuastro.info, Node: Fourier operations in two dimensions, Next: Edges in the frequency domain, Prev: Discrete Fourier transform, Up: Frequency domain and Fourier operations 6.3.2.9 Fourier operations in two dimensions ............................................ Once all the relations in the previous sections have been clearly understood in one dimension, it is very easy to generalize them to two or even more dimensions since each dimension is by definition independent. Previously we defined $l$ as the continuous variable in 1D and the inverse of the period in its direction to be $\omega$. Let’s show the second spatial direction with $m$ the the inverse of the period in the second dimension with $\nu$. The Fourier transform in 2D (see *note Fourier transform::) can be written as: $$F(\omega, \nu)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} f(l, m)e^{-i({\omega}l+{\nu}m)}dl$$ $$f(l, m)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} F(\omega, \nu)e^{i({\omega}l+{\nu}m)}dl$$ The 2D Dirac $\delta(l,m)$ is non-zero only when $l=m=0$. The 2D Dirac comb (or Dirac brush! See *note Dirac delta and comb::) can be written in units of the 2D Dirac $\delta$. For most image detectors, the sides of a pixel are equal in both dimensions. So $P$ remains unchanged, if a specific device is used which has non-square pixels, then for each dimension a different value should be used. $${\rm III}_P(l, m)\equiv\displaystyle\sum_{j=-\infty}^{\infty} \displaystyle\sum_{k=-\infty}^{\infty} \delta(l-jP, m-kP) $$ The Two dimensional Sampling theorem (see *note Sampling theorem::) is thus very easily derived as before since the frequencies in each dimension are independent. Let’s take $\nu_m$ as the maximum frequency along the second dimension. Therefore the two dimensional sampling theorem says that a 2D band-limited function can be recovered when the following conditions hold(1): $${2\pi\over P} > 2\omega_m \quad\quad\quad {\rm and} \quad\quad\quad {2\pi\over P} > 2\nu_m$$ Finally, let’s represent the pixel counter on the second dimension in the spatial and frequency domains with $y$ and $v$ respectively. Also let’s assume that the input image has $Y$ pixels on the second dimension. Then the two dimensional discrete Fourier transform and its inverse (see *note Discrete Fourier transform::) can be written as: $$F_{u,v}=\displaystyle\sum_{x=0}^{X-1}\displaystyle\sum_{y=0}^{Y-1} f_{x,y}e^{-i({ux\over X}+{vy\over Y})} $$ $$f_{x,y}={1\over XY}\displaystyle\sum_{u=0}^{X-1}\displaystyle\sum_{v=0}^{Y-1} F_{u,v}e^{i({ux\over X}+{vy\over Y})} $$ ---------- Footnotes ---------- (1) If the pixels are not a square, then each dimension has to use the respective pixel size, but since most detectors have square pixels, we assume so here too  File: gnuastro.info, Node: Edges in the frequency domain, Prev: Fourier operations in two dimensions, Up: Frequency domain and Fourier operations 6.3.2.10 Edges in the frequency domain ...................................... With a good grasp of the frequency domain, we can revisit the problem of convolution on the image edges, see *note Edges in the spatial domain::. When we apply the convolution theorem (see *note Convolution theorem::) to convolve an image, we first take the discrete Fourier transforms (DFT, *note Discrete Fourier transform::) of both the input image and the kernel, then we multiply them with each other and then take the inverse DFT to construct the convolved image. Of course, in order to multiply them with each other in the frequency domain, the two images have to be the same size, so let’s assume that we pad the kernel (it is usually smaller than the input image) with zero valued pixels in both dimensions so it becomes the same size as the input image before the DFT. Having multiplied the two DFTs, we now apply the inverse DFT which is where the problem is usually created. If the DFT of the kernel only had values of 1 (unrealistic condition!) then there would be no problem and the inverse DFT of the multiplication would be identical with the input. However in real situations, the kernel’s DFT has a maximum of 1 (because the sum of the kernel has to be one, see *note Convolution process::) and decreases something like the hypothetical profile of *note Figure 6.3: samplingfreq. So when multiplied with the input image’s DFT, the coefficients or magnitudes (see *note Circles and the complex plane::) of the smallest frequency (or the sum of the input image pixels) remains unchanged, while the magnitudes of the higher frequencies are significantly reduced. As we saw in *note Sampling theorem::, the Fourier transform of a discrete input will be infinitely repeated. In the final inverse DFT step, the input is in the frequency domain (the multiplied DFT of the input image and the kernel DFT). So the result (our output convolved image) will be infinitely repeated in the spatial domain. In order to accurately reconstruct the input image, we need all the frequencies with the correct magnitudes. However, when the magnitudes of higher frequencies are decreased, longer periods (shorter frequencies) will dominate in the reconstructed pixel values. Therefore, when constructing a pixel on the edge of the image, the newly empowered longer periods will look beyond the input image edges and will find the repeated input image there. So if you convolve an image in this fashion using the convolution theorem, when a bright object exists on one edge of the image, its blurred wings will be present on the other side of the convolved image. This is often termed as circular convolution or cyclic convolution. So, as long as we are dealing with convolution in the frequency domain, there is nothing we can do about the image edges. The least we can do is to eliminate the ghosts of the other side of the image. So, we add zero valued pixels to both the input image and the kernel in both dimensions so the image that will be convolved has a size equal to the sum of both images in each dimension. Of course, the effect of this zero-padding is that the sides of the output convolved image will become dark. To put it another way, the edges are going to drain the flux from nearby objects. But at least it is consistent across all the edges of the image and is predictable. In Convolve, you can see the padded images when inspecting the frequency domain convolution steps with the ‘--viewfreqsteps’ option.  File: gnuastro.info, Node: Spatial vs. Frequency domain, Next: Convolution kernel, Prev: Frequency domain and Fourier operations, Up: Convolve 6.3.3 Spatial vs. Frequency domain ---------------------------------- With the discussions above it might not be clear when to choose the spatial domain and when to choose the frequency domain. Here we will try to list the benefits of each. The spatial domain, • Can correct for the edge effects of convolution, see *note Edges in the spatial domain::. • Can operate on blank pixels. • Can be faster than frequency domain when the kernel is small (in terms of the number of pixels on the sides). The frequency domain, • Will be much faster when the image and kernel are both large. As a general rule of thumb, when working on an image of modeled profiles use the frequency domain and when working on an image of real (observed) objects use the spatial domain (corrected for the edges). The reason is that if you apply a frequency domain convolution to a real image, you are going to loose information on the edges and generally you don’t want large kernels. But when you have made the profiles in the image yourself, you can just make a larger input image and crop the central parts to completely remove the edge effect, see *note If convolving afterwards::. Also due to oversampling, both the kernels and the images can become very large and the speed boost of frequency domain convolution will significantly improve the processing time, see *note Oversampling::.  File: gnuastro.info, Node: Convolution kernel, Next: Invoking astconvolve, Prev: Spatial vs. Frequency domain, Up: Convolve 6.3.4 Convolution kernel ------------------------ All the programs that need convolution will need to be given a convolution kernel file and extension. In most cases (other than Convolve, see *note Convolve::) the kernel file name is optional. However, the extension is necessary and must be specified either on the command-line or at least one of the configuration files (see *note Configuration files::). Within Gnuastro, there are two ways to create a kernel image: • MakeProfiles: You can use MakeProfiles to create a parametric (based on a radial function) kernel, see *note MakeProfiles::. By default MakeProfiles will make the Gaussian and Moffat profiles in a separate file so you can feed it into any of the programs. • ConvertType: You can write your own desired kernel into a text file table and convert it to a FITS file with ConvertType, see *note ConvertType::. Just be careful that the kernel has to have an odd number of pixels along its two axes, see *note Convolution process::. All the programs that do convolution will normalize the kernel internally, so if you choose this option, you don’t have to worry about normalizing the kernel. Only within Convolve, there is an option to disable normalization, see *note Invoking astconvolve::. The two options to specify a kernel file name and its extension are shown below. These are common between all the programs that will do convolution. ‘-k STR’ ‘--kernel=STR’ The convolution kernel file name. The ‘BITPIX’ (data type) value of this file can be any standard type and it does not necessarily have to be normalized. Several operations will be done on the kernel image prior to the program’s processing: • It will be converted to floating point type. • All blank pixels (see *note Blank pixels::) will be set to zero. • It will be normalized so the sum of its pixels equal unity. • It will be flipped so the convolved image has the same orientation. This is only relevant if the kernel is not circular. See *note Convolution process::. ‘-U STR’ ‘--khdu=STR’ The convolution kernel HDU. Although the kernel file name is optional, before running any of the programs, they need to have a value for ‘--khdu’ even if the default kernel is to be used. So be sure to keep its value in at least one of the configuration files (see *note Configuration files::). By default, the system configuration file has a value.  File: gnuastro.info, Node: Invoking astconvolve, Prev: Convolution kernel, Up: Convolve 6.3.5 Invoking Convolve ----------------------- Convolve an input image with a known kernel or make the kernel necessary to match two PSFs. The general template for Convolve is: $ astconvolve [OPTION...] ASTRdata One line examples: ## Convolve mockimg.fits with psf.fits: $ astconvolve --kernel=psf.fits mockimg.fits ## Convolve in the spatial domain: $ astconvolve observedimg.fits --kernel=psf.fits --domain=spatial ## Find the kernel to match sharper and blurry PSF images: $ astconvolve --kernel=sharperimage.fits --makekernel=10 \ blurryimage.fits The only argument accepted by Convolve is an input image file. Some of the options are the same between Convolve and some other Gnuastro programs. Therefore, to avoid repetition, they will not be repeated here. For the full list of options shared by all Gnuastro programs, please see *note Common options::. In particular, in the spatial domain convolve uses Gnuastro’s tessellation, see *note Tessellation:: and the common options related to that in *note Processing options::. Here we will only explain the options particular to Convolve. Run Convolve with ‘--help’ in order to see the full list of options Convolve accepts, irrespective of where they are explained in this book. ‘--nokernelflip’ Do not flip the kernel after reading it the spatial domain convolution. This can be useful if the flipping has already been applied to the kernel. ‘--nokernelnorm’ Do not normalize the kernel after reading it, such that the sum of its pixels is unity. ‘-d STR’ ‘--domain=STR’ The domain to use for the convolution. The acceptable values are ‘‘spatial’’ and ‘‘frequency’’, corresponding to the respective domain. For large images, the frequency domain process will be more efficient than convolving in the spatial domain. However, the edges of the image will loose some flux (see *note Edges in the spatial domain::) and the image must not contain any blank pixels, see *note Spatial vs. Frequency domain::. ‘--checkfreqsteps’ With this option a file with the initial name of the output file will be created that is suffixed with ‘_freqsteps.fits’, all the steps done to arrive at the final convolved image are saved as extensions in this file. The extensions in order are: 1. The padded input image. In frequency domain convolution the two images (input and convolved) have to be the same size and both should be padded by zeros. 2. The padded kernel, similar to the above. 3. The Fourier spectrum of the forward Fourier transform of the input image. Note that the Fourier transform is a complex operation (and not view able in one image!) So we either have to show the ‘Fourier spectrum’ or the ‘Phase angle’. For the complex number $a+ib$, the Fourier spectrum is defined as $\sqrt{a^2+b^2}$ while the phase angle is defined as $\arctan(b/a)$. 4. The Fourier spectrum of the forward Fourier transform of the kernel image. 5. The Fourier spectrum of the multiplied (through complex arithmetic) transformed images. 6. The inverse Fourier transform of the multiplied image. If you open it, you will see that the convolved image is now in the center, not on one side of the image as it started with (in the padded image of the first extension). If you are working on a mock image which originally had pixels of precisely 0.0, you will notice that in those parts that your convolved profile(s) did not convert, the values are now $\sim10^{-18}$, this is due to floating-point round off errors. Therefore in the final step (when cropping the central parts of the image), we also remove any pixel with a value less than $10^{-17}$. ‘--noedgecorrection’ Do not correct the edge effect in spatial domain convolution. For a full discussion, please see *note Edges in the spatial domain::. ‘-m INT’ ‘--makekernel=INT’ (‘=INT’) If this option is called, Convolve will do de-convolution (see *note Convolution theorem::). The image specified by the ‘--kernel’ option is assumed to be the sharper (less blurry) image and the input image is assumed to be the more blurry image. The value given to this option will be used as the maximum radius of the kernel. Any pixel in the final kernel that is larger than this distance from the center will be set to zero. The two images must have the same size. Noise has large frequencies which can make the result less reliable for the higher frequencies of the final result. So all the frequencies which have a spectrum smaller than the value given to the ‘minsharpspec’ option in the sharper input image are set to zero and not divided. This will cause the wings of the final kernel to be flatter than they would ideally be which will make the convolved image result unreliable if it is too high. Some notes to take into account for a good result: • Choose a bright (unsaturated) star and use a region box (with Crop for example, see *note Crop::) that is sufficiently above the noise. • Use Warp (see *note Warp::) to warp the pixel grid so the star’s center is exactly on the center of the central pixel in the cropped image. This will certainly slightly degrade the result, however, it is necessary. If there are multiple good stars, you can shift all of them, then normalize them (so the sum of each star’s pixels is one) and then take their average to decrease this effect. • The shifting might move the center of the star by one pixel in any direction, so crop the central pixel of the warped image to have a clean image for the de-convolution. ‘-c’ ‘--minsharpspec’ (‘=FLT’) The minimum frequency spectrum (or coefficient, or pixel value in the frequency domain image) to use in deconvolution, see the explanations under the ‘--makekernel’ option for more information.  File: gnuastro.info, Node: Warp, Prev: Convolve, Up: Data manipulation 6.4 Warp ======== Image warping is the process of mapping the pixels of one image onto a new pixel grid. This process is sometimes known as transformation, however following the discussion of Heckbert 1989(1) we will not be using that term because it can be confused with only pixel value or flux transformations. Here we specifically mean the pixel grid transformation which is better conveyed with ‘warp’. Image wrapping is a very important step in astronomy, both in observational data analysis and in simulating modeled images. In modeling, warping an image is necessary when we want to apply grid transformations to the initial models, for example in simulating gravitational lensing (Radial warpings are not yet included in Warp). Observational reasons for warping an image are listed below: • *Noise:* Most scientifically interesting targets are inherently faint (have a very low Signal to noise ratio). Therefore one short exposure is not enough to detect such objects that are drowned deeply in the noise. We need multiple exposures so we can add them together and increase the objects’ signal to noise ratio. Keeping the telescope fixed on one field of the sky is practically impossible. Therefore very deep observations have to put into the same grid before adding them. • *Resolution:* If we have multiple images of one patch of the sky (hopefully at multiple orientations) we can warp them to the same grid. The multiple orientations will allow us to ‘guess’ the values of pixels on an output pixel grid that has smaller pixel sizes and thus increase the resolution of the output. This process of merging multiple observations is known as Mosaicing. • *Cosmic rays:* Cosmic rays can randomly fall on any part of an image. If they collide vertically with the camera, they are going to create a very sharp and bright spot that in most cases can be separated easily(2). However, depending on the depth of the camera pixels, and the angle that a cosmic rays collides with it, it can cover a line-like larger area on the CCD which makes the detection using their sharp edges very hard and error prone. One of the best methods to remove cosmic rays is to compare multiple images of the same field. To do that, we need all the images to be on the same pixel grid. • *Optical distortion:* (Not yet included in Warp) In wide field images, the optical distortion that occurs on the outer parts of the focal plane will make accurate comparison of the objects at various locations impossible. It is therefore necessary to warp the image and correct for those distortions prior to the analysis. • *Detector not on focal plane:* In some cases (like the Hubble Space Telescope ACS and WFC3 cameras), the CCD might be tilted compared to the focal plane, therefore the recorded CCD pixels have to be projected onto the focal plane before further analysis. * Menu: * Warping basics:: Basics of coordinate transformation. * Merging multiple warpings:: How to merge multiple matrices. * Resampling:: Warping an image is re-sampling it. * Invoking astwarp:: Arguments and options for Warp. ---------- Footnotes ---------- (1) Paul S. Heckbert. 1989. _Fundamentals of Texture mapping and Image Warping_, Master’s thesis at University of California, Berkeley. (2) All astronomical targets are blurred with the PSF, see *note PSF::, however a cosmic ray is not and so it is very sharp (it suddenly stops at one pixel).  File: gnuastro.info, Node: Warping basics, Next: Merging multiple warpings, Prev: Warp, Up: Warp 6.4.1 Warping basics -------------------- Let’s take $\left[\matrix{u&v}\right]$ as the coordinates of a point in the input image and $\left[\matrix{x&y}\right]$ as the coordinates of that same point in the output image(1). The simplest form of coordinate transformation (or warping) is the scaling of the coordinates, let’s assume we want to scale the first axis by $M$ and the second by $N$, the output coordinates of that point can be calculated by $$\left[\matrix{x\cr y}\right]= \left[\matrix{Mu\cr Nv}\right]= \left[\matrix{M&0\cr0&N}\right]\left[\matrix{u\cr v}\right]$$ Note that these are matrix multiplications. We thus see that we can represent any such grid warping as a matrix. Another thing we can do with this $2\times2$ matrix is to rotate the output coordinate around the common center of both coordinates. If the output is rotated anticlockwise by $\theta$ degrees from the positive (to the right) horizontal axis, then the warping matrix should become: $$\left[\matrix{x\cr y}\right]= \left[\matrix{ucos\theta-vsin\theta\cr usin\theta+vcos\theta}\right]= \left[\matrix{cos\theta&-sin\theta\cr sin\theta&cos\theta}\right] \left[\matrix{u\cr v}\right] $$ We can also flip the coordinates around the first axis, the second axis and the coordinate center with the following three matrices respectively: $$\left[\matrix{1&0\cr0&-1}\right]\quad\quad \left[\matrix{-1&0\cr0&1}\right]\quad\quad \left[\matrix{-1&0\cr0&-1}\right]$$ The final thing we can do with this definition of a $2\times2$ warping matrix is shear. If we want the output to be sheared along the first axis with $A$ and along the second with $B$, then we can use the matrix: $$\left[\matrix{1&A\cr B&1}\right]$$ To have one matrix representing any combination of these steps, you use matrix multiplication, see *note Merging multiple warpings::. So any combinations of these transformations can be displayed with one $2\times2$ matrix: $$\left[\matrix{a&b\cr c&d}\right]$$ The transformations above can cover a lot of the needs of most coordinate transformations. However they are limited to mapping the point $[\matrix{0&0}]$ to $[\matrix{0&0}]$. Therefore they are useless if you want one coordinate to be shifted compared to the other one. They are also space invariant, meaning that all the coordinates in the image will receive the same transformation. In other words, all the pixels in the output image will have the same area if placed over the input image. So transformations which require varying output pixel sizes like projections cannot be applied through this $2\times2$ matrix either (for example for the tilted ACS and WFC3 camera detectors on board the Hubble space telescope). To add these further capabilities, namely translation and projection, we use the homogeneous coordinates. They were defined about 200 years ago by August Ferdinand Möbius (1790 – 1868). For simplicity, we will only discuss points on a 2D plane and avoid the complexities of higher dimensions. We cannot provide a deep mathematical introduction here, interested readers can get a more detailed explanation from Wikipedia(2) and the references therein. By adding an extra coordinate to a point we can add the flexibility we need. The point $[\matrix{x&y}]$ can be represented as $[\matrix{xZ&yZ&Z}]$ in homogeneous coordinates. Therefore multiplying all the coordinates of a point in the homogeneous coordinates with a constant will give the same point. Put another way, the point $[\matrix{x&y&Z}]$ corresponds to the point $[\matrix{x/Z&y/Z}]$ on the constant $Z$ plane. Setting $Z=1$, we get the input image plane, so $[\matrix{u&v&1}]$ corresponds to $[\matrix{u&v}]$. With this definition, the transformations above can be generally written as: $$\left[\matrix{x\cr y\cr 1}\right]= \left[\matrix{a&b&0\cr c&d&0\cr 0&0&1}\right] \left[\matrix{u\cr v\cr 1}\right]$$ We thus acquired 4 extra degrees of freedom. By giving non-zero values to the zero valued elements of the last column we can have translation (try the matrix multiplication!). In general, any coordinate transformation that is represented by the matrix below is known as an affine transformation(3): $$\left[\matrix{a&b&c\cr d&e&f\cr 0&0&1}\right]$$ We can now consider translation, but the affine transform is still spatially invariant. Giving non-zero values to the other two elements in the matrix above gives us the projective transformation or Homography(4) which is the most general type of transformation with the $3\times3$ matrix: $$\left[\matrix{x'\cr y'\cr w}\right]= \left[\matrix{a&b&c\cr d&e&f\cr g&h&1}\right] \left[\matrix{u\cr v\cr 1}\right]$$ So the output coordinates can be calculated from: $$x={x' \over w}={au+bv+c \over gu+hv+1}\quad\quad\quad\quad y={y' \over w}={du+ev+f \over gu+hv+1}$$ Thus with Homography we can change the sizes of the output pixels on the input plane, giving a ‘perspective’-like visual impression. This can be quantitatively seen in the two equations above. When $g=h=0$, the denominator is independent of $u$ or $v$ and thus we have spatial invariance. Homography preserves lines at all orientations. A very useful fact about Homography is that its inverse is also a Homography. These two properties play a very important role in the implementation of this transformation. A short but instructive and illustrated review of affine, projective and also bi-linear mappings is provided in Heckbert 1989(5). ---------- Footnotes ---------- (1) These can be any real number, we are not necessarily talking about integer pixels here. (2) (3) (4) (5) Paul S. Heckbert. 1989. _Fundamentals of Texture mapping and Image Warping_, Master’s thesis at University of California, Berkeley. Note that since points are defined as row vectors there, the matrix is the transpose of the one discussed here.  File: gnuastro.info, Node: Merging multiple warpings, Next: Resampling, Prev: Warping basics, Up: Warp 6.4.2 Merging multiple warpings ------------------------------- In *note Warping basics:: we saw how a basic warp/transformation can be represented with a matrix. To make more complex warpings (for example to define a translation, rotation and scale as one warp) the individual matrices have to be multiplied through matrix multiplication. However matrix multiplication is not commutative, so the order of the set of matrices you use for the multiplication is going to be very important. The first warping should be placed as the left-most matrix. The second warping to the right of that and so on. The second transformation is going to occur on the warped coordinates of the first. As an example for merging a few transforms into one matrix, the multiplication below represents the rotation of an image about a point $[\matrix{U&V}]$ anticlockwise from the horizontal axis by an angle of $\theta$. To do this, first we take the origin to $[\matrix{U&V}]$ through translation. Then we rotate the image, then we translate it back to where it was initially. These three operations can be merged in one operation by calculating the matrix multiplication below: $$\left[\matrix{1&0&U\cr0&1&V\cr{}0&0&1}\right] \left[\matrix{cos\theta&-sin\theta&0\cr sin\theta&cos\theta&0\cr 0&0&1}\right] \left[\matrix{1&0&-U\cr0&1&-V\cr{}0&0&1}\right]$$  File: gnuastro.info, Node: Resampling, Next: Invoking astwarp, Prev: Merging multiple warpings, Up: Warp 6.4.3 Resampling ---------------- A digital image is composed of discrete ‘picture elements’ or ‘pixels’. When a real image is created from a camera or detector, each pixel’s area is used to store the number of photo-electrons that were created when incident photons collided with that pixel’s surface area. This process is called the ‘sampling’ of a continuous or analog data into digital data. When we change the pixel grid of an image or warp it as we defined in *note Warping basics::, we have to ‘guess’ the flux value of each pixel on the new grid based on the old grid, or re-sample it. Because of the ‘guessing’, any form of warping on the data is going to degrade the image and mix the original pixel values with each other. So if an analysis can be done on an un-warped data image, it is best to leave the image untouched and pursue the analysis. However as discussed in *note Warp:: this is not possible most of the times, so we have to accept the problem and re-sample the image. In most applications of image processing, it is sufficient to consider each pixel to be a point and not an area. This assumption can significantly speed up the processing of an image and also the simplicity of the code. It is a fine assumption when the signal to noise ratio of the objects are very large. The question will then be one of interpolation because you have multiple points distributed over the output image and you want to find the values at the pixel centers. To increase the accuracy, you might also sample more than one point from within a pixel giving you more points for a more accurate interpolation in the output grid. However, interpolation has several problems. The first one is that it will depend on the type of function you want to assume for the interpolation. For example you can choose a bi-linear or bi-cubic (the ‘bi’s are for the 2 dimensional nature of the data) interpolation method. For the latter there are various ways to set the constants(1). Such functional interpolation functions can fail seriously on the edges of an image. They will also need normalization so that the flux of the objects before and after the warpings are comparable. The most basic problem with such techniques is that they are based on a point while a detector pixel is an area. They add a level of subjectivity to the data (make more assumptions through the functions than the data can handle). For most applications this is fine, but in scientific applications where detection of the faintest possible galaxies or fainter parts of bright galaxies is our aim, we cannot afford this loss. Because of these reasons Warp will not use such interpolation techniques. Warp will do interpolation based on “pixel mixingâ€(2) or “area resamplingâ€. This is also what the Hubble Space Telescope pipeline calls “Drizzlingâ€(3). This technique requires no functions, it is thus non-parametric. It is also the closest we can get (make least assumptions) to what actually happens on the detector pixels. The basic idea is that you reverse-transform each output pixel to find which pixels of the input image it covers and what fraction of the area of the input pixels are covered. To find the output pixel value, you simply sum the value of each input pixel weighted by the overlap fraction (between 0 to 1) of the output pixel and that input pixel. Through this process, pixels are treated as an area not as a point (which is how detectors create the image), also the brightness (see *note Flux Brightness and magnitude::) of an object will be left completely unchanged. If there are very high spatial-frequency signals in the image (for example fringes) which vary on a scale smaller than your output image pixel size, pixel mixing can cause ailiasing(4). So if the input image has fringes, they have to be calculated and removed separately (which would naturally be done in any astronomical application). Because of the PSF no astronomical target has a sharp change in the signal so this issue is less important for astronomical applications, see *note PSF::. ---------- Footnotes ---------- (1) see for a nice introduction. (2) For a graphic demonstration see . (3) (4)  File: gnuastro.info, Node: Invoking astwarp, Prev: Resampling, Up: Warp 6.4.4 Invoking Warp ------------------- Warp an input dataset into a new grid. Any homographic warp (for example scaling, rotation, translation, projection) is acceptable, see *note Warping basics:: for the definitions. The general template for invoking Warp is: $ astwarp [OPTIONS...] InputImage One line examples: ## Rotate and then scale input image: $ astwarp --rotate=37.92 --scale=0.8 image.fits ## Scale, then translate the input image: $ astwarp --scale 8/3 --translate 2.1 image.fits ## Align raw image with celestial coordinates: $ astwarp --align rawimage.fits --output=aligned.fits ## Directly input a custom warping matrix (using fraction): $ astwarp --matrix=1/5,0,4/10,0,1/5,4/10,0,0,1 image.fits ## Directly input a custom warping matrix, with final numbers: $ astwarp --matrix="0.7071,-0.7071, 0.7071,0.7071" image.fits If any processing is to be done, Warp can accept one file as input. As in all Gnuastro programs, when an output is not explicitly set with the ‘--output’ option, the output filename will be set automatically based on the operation, see *note Automatic output::. For the full list of general options to all Gnuastro programs (including Warp), please see *note Common options::. To be the most accurate, the input image will be read as a 64-bit double precision floating point dataset and all internal processing is done in this format (including the raw output type). You can use the common ‘--type’ option to write the output in any type you want, see *note Numeric data types::. Warps must be specified as command-line options, either as (possibly multiple) modular warpings (for example ‘--rotate’, or ‘--scale’), or directly as a single raw matrix (with ‘--matrix’). If specified together, the latter (direct matrix) will take precedence and all the modular warpings will be ignored. Any number of modular warpings can be specified on the command-line and configuration files. If more than one modular warping is given, all will be merged to create one warping matrix. As described in *note Merging multiple warpings::, matrix multiplication is not commutative, so the order of specifying the modular warpings on the command-line, and/or configuration files makes a difference (see *note Configuration file precedence::). The full list of modular warpings and the other options particular to Warp are described below. The values to the warping options (modular warpings as well as ‘--matrix’), are a sequence of at least one number. Each number in this sequence is separated from the next by a comma (<,>). Each number can also be written as a single fraction (with a forward-slash between the numerator and denominator). Space and Tab characters are permitted between any two numbers, just don’t forget to quote the whole value. Otherwise, the value will not be fully passed onto the option. See the examples above as a demonstration. Based on the FITS standard, integer values are assigned to the center of a pixel and the coordinate [1.0, 1.0] is the center of the first pixel (bottom left of the image when viewed in SAO ds9). So the coordinate center [0.0, 0.0] is half a pixel away (in each axis) from the bottom left vertex of the first pixel. The resampling that is done in Warp (see *note Resampling::) is done on the coordinate axes and thus directly depends on the coordinate center. In some situations this if fine, for example when rotating/aligning a real image, all the edge pixels will be similarly affected. But in other situations (for example when scaling an over-sampled mock image to its intended resolution, this is not desired: you want the center of the coordinates to be on the corner of the pixel. In such cases, you can use the ‘--centeroncorner’ option which will shift the center by $0.5$ before the main warp, then shift it back by $-0.5$ after the main warp, see below. ‘-a’ ‘--align’ Align the image and celestial (WCS) axes given in the input. After it, the vertical image direction (when viewed in SAO ds9) corresponds to the declination and the horizontal axis is the inverse of the Right Ascension (RA). The inverse of the RA is chosen so the image can correspond to what you would actually see on the sky and is common in most survey images. Align is internally treated just like a rotation (‘--rotation’), but uses the input image’s WCS to find the rotation angle. Thus, if you have rotated the image before calling ‘--align’, you might get unexpected results (because the rotation is defined on the original WCS). ‘-r FLT’ ‘--rotate=FLT’ Rotate the input image by the given angle in degrees: $\theta$ in *note Warping basics::. Note that commonly, the WCS structure of the image is set such that the RA is the inverse of the image horizontal axis which increases towards the right in the FITS standard and as viewed by SAO ds9. So the default center for rotation is on the right of the image. If you want to rotate about other points, you have to translate the warping center first (with ‘--translate’) then apply your rotation and then return the center back to the original position (with another call to ‘--translate’, see *note Merging multiple warpings::. ‘-s FLT[,FLT]’ ‘--scale=FLT[,FLT]’ Scale the input image by the given factor(s): $M$ and $N$ in *note Warping basics::. If only one value is given, then both image axes will be scaled with the given value. When two values are given (separated by a comma), the first will be used to scale the first axis and the second will be used for the second axis. If you only need to scale one axis, use ‘1’ for the axis you don’t need to scale. The value(s) can also be written (on the command-line or in configuration files) as a fraction. ‘-f FLT[,FLT]’ ‘--flip=FLT[,FLT]’ Flip the input image around the given axis(s). If only one value is given, then both image axes are flipped. When two values are given (separated by a comma), you can choose which axis to flip over. ‘--flip’ only takes values ‘0’ (for no flip), or ‘1’ (for a flip). Hence, if you want to flip by the second axis only, use ‘--flip=0,1’. ‘-e FLT[,FLT]’ ‘--shear=FLT[,FLT]’ Shear the input image by the given value(s): $A$ and $B$ in *note Warping basics::. If only one value is given, then both image axes will be sheared with the given value. When two values are given (separated by a comma), the first will be used to shear the first axis and the second will be used for the second axis. If you only need to shear along one axis, use ‘0’ for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. ‘-t FLT[,FLT]’ ‘--translate=FLT[,FLT]’ Translate (move the center of coordinates) the input image by the given value(s): $c$ and $f$ in *note Warping basics::. If only one value is given, then both image axes will be translated by the given value. When two values are given (separated by a comma), the first will be used to translate the first axis and the second will be used for the second axis. If you only need to translate along one axis, use ‘0’ for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. ‘-p FLT[,FLT]’ ‘--project=FLT[,FLT]’ Apply a projection to the input image by the given values(s): $g$ and $h$ in *note Warping basics::. If only one value is given, then projection will apply to both axes with the given value. When two values are given (separated by a comma), the first will be used to project the first axis and the second will be used for the second axis. If you only need to project along one axis, use ‘0’ for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. ‘-m STR’ ‘--matrix=STR’ The warp/transformation matrix. All the elements in this matrix must be separated by comas(<,>) characters and as described above, you can also use fractions (a forward-slash between two numbers). The transformation matrix can be either a 2 by 2 (4 numbers), or a 3 by 3 (9 numbers) array. In the former case (if a 2 by 2 matrix is given), then it is put into a 3 by 3 matrix (see *note Warping basics::). The determinant of the matrix has to be non-zero and it must not contain any non-number values (for example infinities or NaNs). The elements of the matrix have to be written row by row. So for the general Homography matrix of *note Warping basics::, it should be called with ‘--matrix=a,b,c,d,e,f,g,h,1’. The raw matrix takes precedence over all the modular warping options listed above, so if it is called with any number of modular warps, the latter are ignored. ‘-c’ ‘--centeroncorer’ Put the center of coordinates on the corner of the first (bottom-left when viewed in SAO ds9) pixel. This option is applied after the final warping matrix has been finalized: either through modular warpings or the raw matrix. See the explanation above for coordinates in the FITS standard to better understand this option and when it should be used. ‘--hstartwcs=INT’ Specify the first header keyword number (line) that should be used to read the WCS information, see the full explanation in *note Invoking astcrop::. ‘--hendwcs=INT’ Specify the last header keyword number (line) that should be used to read the WCS information, see the full explanation in *note Invoking astcrop::. ‘-k’ ‘--keepwcs’ Do not correct the WCS information of the input image and save it untouched to the output image. By default the WCS (World Coordinate System) information of the input image is going to be corrected in the output image so the objects in the image are at the same WCS coordinates. But in some cases it might be useful to keep it unchanged (for example to correct alignments). ‘-C FLT’ ‘--coveredfrac=FLT’ Depending on the warp, the output pixels that cover pixels on the edge of the input image, or blank pixels in the input image, are not going to be fully covered by input data. With this option, you can specify the acceptable covered fraction of such pixels (any value between 0 and 1). If you only want output pixels that are fully covered by the input image area (and are not blank), then you can set ‘--coveredfrac=1’. Alternatively, a value of ‘0’ will keep output pixels that are even infinitesimally covered by the input(so the sum of the pixels in the input and output images will be the same).  File: gnuastro.info, Node: Data analysis, Next: Modeling and fittings, Prev: Data manipulation, Up: Top 7 Data analysis *************** Astronomical datasets (images or tables) contain very valuable information, the tools in this section can help in analyzing, extracting, and quantifying that information. For example getting general or specific statistics of the dataset (with *note Statistics::), detecting signal within a noisy dataset (with *note NoiseChisel::), or creating a catalog from an input dataset (with *note MakeCatalog::). * Menu: * Statistics:: Calculate dataset statistics. * NoiseChisel:: Detect objects in an image. * MakeCatalog:: Catalog from input and labeled images. * Match:: Match two datasets.  File: gnuastro.info, Node: Statistics, Next: NoiseChisel, Prev: Data analysis, Up: Data analysis 7.1 Statistics ============== The distribution of values in a dataset can provide valuable information about it. For example, in an image, if it is a positively skewed distribution, we can see that there is significant data in the image. If the distribution is roughly symmetric, we can tell that there is no significant data in the image. In a table, when we need to select a sample of objects, it is important to first get a general view of the whole sample. On the other hand, you might need to know certain statistical parameters of the dataset. For example, if we have run a detection algorithm on an image, and we want to see how accurate it was, one method is to calculate the average of the undetected pixels and see how reasonable it is (if detection is done correctly, the average of undetected pixels should be approximately equal to the background value, see *note Sky value::). In a table, you might have calculated the magnitudes of a certain class of objects and want to get some general characteristics of the distribution immediately on the command-line (very fast!), to possibly change some parameters. The Statistics program is designed for such situations. * Menu: * Histogram and Cumulative Frequency Plot:: Basic definitions. * Sigma clipping:: Definition of $\sigma$-clipping. * Sky value:: Definition and derivation of the Sky value. * Invoking aststatistics:: Arguments and options to Statistics.  File: gnuastro.info, Node: Histogram and Cumulative Frequency Plot, Next: Sigma clipping, Prev: Statistics, Up: Statistics 7.1.1 Histogram and Cumulative Frequency Plot --------------------------------------------- Histograms and the cumulative frequency plots are both used to visually study the distribution of a dataset. A histogram shows the number of data points which lie within pre-defined intervals (bins). So on the horizontal axis we have the bin centers and on the vertical, the number of points that are in that bin. You can use it to get a general view of the distribution: which values have been repeated the most? how close/far are the most significant bins? Are there more values in the larger part of the range of the dataset, or in the lower part? Similarly, many very important properties about the dataset can be deduced from a visual inspection of the histogram. In the Statistics program, the histogram can be either output to a table to plot with your favorite plotting program(1), or it can be shown with ASCII characters on the command-line, which is very crude, but good enough for a fast and on-the-go analysis, see the example in *note Invoking aststatistics::. The width of the bins is only necessary parameter for a histogram. In the limiting case that the bin-widths tend to zero (while assuming the number of points in the dataset tend to infinity), then the histogram will tend to the probability density function (https://en.wikipedia.org/wiki/Probability_density_function) of the distribution. When the absolute number of points in each bin is not relevant to the study (only the shape of the histogram is important), you can _normalize_ a histogram so like the probability density function, the sum of all its bins will be one. In the cumulative frequency plot of a distribution, the horizontal axis is the sorted data values and the y axis is the index of each data in the sorted distribution. Unlike a histogram, a cumulative frequency plot does not involve intervals or bins. This makes it less prone to any sort of bias or error that a given bin-width would have on the analysis. When a larger number of the data points have roughly the same value, then the cumulative frequency plot will become steep in that vicinity. This occurs because on the horizontal axis, there is little change while on the vertical axis, the indexes constantly increase. Normalizing a cumulative frequency plot means to divide each index (y axis) by the total number of data points (or the last value). Unlike the histogram which has a limited number of bins, ideally the cumulative frequency plot should have one point for every data element. Even in small datasets (for example a $200\times200$ image) this will result in an unreasonably large number of points to plot (40000)! As a result, for practical reasons, it is common to only store its value on a certain number of points (intervals) in the input range rather than the whole dataset, so you should determine the number of bins you want when asking for a cumulative frequency plot. In Gnuastro (and thus the Statistics program), the number reported for each bin is the total number of data points until the larger interval value for that bin. You can see an example histogram and cumulative frequency plot of a single dataset under the ‘--asciihist’ and ‘--asciicfp’ options of *note Invoking aststatistics::. So as a summary, both the histogram and cumulative frequency plot in Statistics will work with bins. Within each bin/interval, the lower value is considered to be within then bin (it is inclusive), but its larger value is not (it is exclusive). Formally, an interval/bin between a and b is represented by [a, b). When the over-all range of the dataset is specified (with the ‘--greaterequal’, ‘--lessthan’, or ‘--qrange’ options), the acceptable values of the dataset are also defined with a similar inclusive-exclusive manner. But when the range is determined from the actual dataset (none of these options is called), the last element in the dataset is included in the last bin’s count. ---------- Footnotes ---------- (1) We recommend PGFPlots (http://pgfplots.sourceforge.net/) which generates your plots directly within TeX (the same tool that generates your document).  File: gnuastro.info, Node: Sigma clipping, Next: Sky value, Prev: Histogram and Cumulative Frequency Plot, Up: Statistics 7.1.2 Sigma clipping -------------------- Let’s assume that you have pure noise (centered on zero) with a clear Gaussian distribution (https://en.wikipedia.org/wiki/Normal_distribution), or see *note Photon counting noise::. Now let’s assume you add very bright objects (signal) on the image which have a very sharp boundary. By a sharp boundary, we mean that there is a clear cutoff (from the noise) at the pixels the objects finish. In other words, at their boundaries, the objects do not fade away into the noise. In such a case, when you plot the histogram (see *note Histogram and Cumulative Frequency Plot::) of the distribution, the pixels relating to those objects will be clearly separate from pixels that belong to parts of the image that did not have any signal (were just noise). In the cumulative frequency plot, after a steady rise (due to the noise), you would observe a long flat region were for a certain range of data (horizontal axis), there is no increase in the index (vertical axis). Outliers like the example above can significantly bias the measurement of noise statistics. $\sigma$-clipping is defined as a way to avoid the effect of such outliers. In astronomical applications, cosmic rays (when they collide at a near normal incidence angle) are a very good example of such outliers. The tracks they leave behind in the image are perfectly immune to the blurring caused by the atmosphere and the aperture. They are also very energetic and so their borders are usually clearly separated from the surrounding noise. So $\sigma$-clipping is very useful in removing their effect on the data. See Figure 15 in Akhlaghi and Ichikawa, 2015 (https://arxiv.org/abs/1505.01664). $\sigma$-clipping is defined as the very simple iteration below. In each iteration, the range of input data might decrease and so when the outliers have the conditions above, the outliers will be removed through this iteration. The exit criteria will be discussed below. 1. Calculate the standard deviation ($\sigma$) and median ($m$) of a distribution. 2. Remove all points that are smaller or larger than $m\pm\alpha\sigma$. 3. Go back to step 1, unless the selected exit criteria is reached. The reason the median is used as a reference and not the mean is that the mean is too significantly affected by the presence of outliers, while the median is less affected, see *note Quantifying signal in a tile::. As you can tell from this algorithm, besides the condition above (that the signal have clear high signal to noise boundaries) $\sigma$-clipping is only useful when the signal does not cover more than half of the full data set. If they do, then the median will lie over the outliers and $\sigma$-clipping might remove the pixels with no signal. There are commonly two exit criteria to stop the $\sigma$-clipping iteration: • When a certain number of iterations has taken place (second value to the ‘--sigclip’ option is larger than 1). • When the new measured standard deviation is within a certain tolerance level of the old one (second value to the ‘--sigclip’ option is less than 1). The tolerance level is defined by: $$\sigma_{old}-\sigma_{new} \over \sigma_{new}$$ The standard deviation is used because it is heavily influenced by the presence of outliers. Therefore the fact that it stops changing between two iterations is a sign that we have successfully removed outliers. Note that in each clipping, the dispersion in the distribution is either less or equal. So $\sigma_{old}\geq\sigma_{new}$. When working on astronomical images, objects like galaxies and stars are blurred by the atmosphere and the telescope aperture, therefore their signal sinks into the noise very gradually. Galaxies in particular do not appear to have a clear high signal to noise cutoff at all. Therefore $\sigma$-clipping will not be useful in removing their effect on the data. To gauge if $\sigma$-clipping will be useful for your dataset, look at the histogram (see *note Histogram and Cumulative Frequency Plot::). The ASCII histogram that is printed on the command-line with ‘--asciihist’ is good enough in most cases.  File: gnuastro.info, Node: Sky value, Next: Invoking aststatistics, Prev: Sigma clipping, Up: Statistics 7.1.3 Sky value --------------- One of the most important aspects of a dataset is its reference value: the value of the dataset where there is no signal. Without knowing, and thus removing the effect of, this value it is impossible to compare the derived results of many high-level analyses over the dataset with other datasets (in the attempt to associate our results with the “real†world). In astronomy, this reference value is known as the “Sky†value: the value where there is no signal from objects (for example galaxies, stars, planets or comets). Depending on the dataset, the Sky value maybe a fixed value over the whole dataset, or it may vary based on location. For an example of the latter case, see Figure 11 in Akhlaghi and Ichikawa (2015) (https://arxiv.org/abs/1505.01664). Because of the significance of the Sky value in astronomical data analysis, we have devoted this subsection to it for a thorough review. We start with a thorough discussion on its definition (*note Sky value definition::). In the astronomical literature, researchers use a variety of methods to estimate the Sky value, so in *note Sky value misconceptions::) we review those and discuss their biases. From the definition of the Sky value, the most accurate way to estimate the Sky value is to run a detection algorithm (for example *note NoiseChisel::) over the dataset and use the un-detected pixels. However, there is also a more crude method that maybe useful when good direct detection is not initially possible (for example due to too many cosmic rays in a shallow image). A more crude (but simpler method) that is usable in such situations is discussed in *note Quantifying signal in a tile::. * Menu: * Sky value definition:: Definition of the Sky/reference value. * Sky value misconceptions:: Wrong methods to estimate the Sky value. * Quantifying signal in a tile:: Method to estimate the presence of signal.  File: gnuastro.info, Node: Sky value definition, Next: Sky value misconceptions, Prev: Sky value, Up: Sky value 7.1.3.1 Sky value definition ............................ This analysis is taken from Akhlaghi and Ichikawa (2015) (https://arxiv.org/abs/1505.01664). Let’s assume that all instrument defects – bias, dark and flat – have been corrected and the brightness (see *note Flux Brightness and magnitude::) of a detected object, $O$, is desired. The sources of flux on pixel $i$(1) of the image can be written as follows: • Contribution from the target object, ($O_i$). • Contribution from other detected objects, ($D_i$). • Undetected objects or the fainter undetected regions of bright objects, ($U_i$). • A cosmic ray, ($C_i$). • The background flux, which is defined to be the count if none of the others exists on that pixel, ($B_i$). The total flux in this pixel ($T_i$) can thus be written as: $$T_i=B_i+D_i+U_i+C_i+O_i.$$ By definition, $D_i$ is detected and it can be assumed that it is correctly estimated (deblended) and subtracted, thus $D_i=0$. There are also methods to detect and remove cosmic rays, for example the method described in van Dokkum (2001)(2), or by comparing multiple exposures. This allows us to set $C_i=0$. Note that in practice, $D_i$ and $U_i$ are correlated, because they both directly depend on the detection algorithm and its input parameters. Also note that no detection or cosmic ray removal algorithm is perfect. With these limitations in mind, the observed Sky value for this pixel ($S_i$) can be defined as $$S_i=B_i+U_i.$$ Therefore, as the detection process (algorithm and input parameters) becomes more accurate, or $U_i\to0$, the sky value will tend to the background value or $S_i\to B_i$. Therefore, while $B_i$ is an inherent property of the data (pixel in an image), $S_i$ depends on the detection process. Over a group of pixels, for example in an image or part of an image, this equation translates to the average of undetected pixels. With this definition of sky, the object flux in the data can be calculated with $$T_{i}=S_{i}+O_{i} \quad\rightarrow\quad O_{i}=T_{i}-S_{i}.$$ Hence, the more accurately $S_i$ is measured, the more accurately the brightness (sum of pixel values) of the target object can be measured (photometry). Any under-(over-)estimation in the sky will directly translate to an over-(under-)estimation of the measured object’s brightness. In the fainter outskirts of an object a very small fraction of the photo-electrons in the pixels actually belong to objects (see Figure 1b in Akhlaghi and Ichikawa (2015) (https://arxiv.org/abs/1505.01664)). Therefore even a small over estimation of the sky value will result in the loss of a very large portion of most galaxies. Besides the lost area/brightness, this will also cause an over-estimation of the Sky value and thus even more under-estimation of the object’s brightness. It is thus very important to detect the diffuse flux of a target, even if they are not your primary target. The *Sky value* is only correctly found when all the detected objects ($D_i$ and $C_i$) have been removed from the data. ---------- Footnotes ---------- (1) For this analysis the dimension of the data (image) is irrelevant. So if the data is an image (2D) with width of $w$ pixels, then a pixel located on column $x$ and row $y$ (where all counting starts from zero and (0, 0) is located on the bottom left corner of the image), would have an index: $i=x+y\times{}w$. (2) van Dokkum, P. G. (2001). Publications of the Astronomical Society of the Pacific. 113, 1420.  File: gnuastro.info, Node: Sky value misconceptions, Next: Quantifying signal in a tile, Prev: Sky value definition, Up: Sky value 7.1.3.2 Sky value misconceptions ................................ As defined in *note Sky value::, the sky value is only accurately defined when the detection algorithm is not significantly reliant on the sky value. In particular its detection threshold. However, most signal-based detection tools(1) use the sky value as a reference to define the detection threshold. So these old techniques had to rely on approximations based on other assumptions about the data. A review of those other techniques can be seen in Appendix A of Akhlaghi and Ichikawa (2015)(2). Since they were extensively used in astronomical data analysis for several decades, such approximations have given rise to a lot of misconceptions, ambiguities and disagreements about the sky value and how to measure it. As a summary, the major methods used until now were an approximation of the mode of the image pixel distribution and $\sigma$-clipping. • To find the mode of a distribution those methods would either have to assume (or find) a certain probability density function (PDF) or use the histogram. But astronomical datasets can have any distribution, making it almost impossible to define a generic function. Also, histogram-based results are very inaccurate (there is a large dispersion) and it depends on the histogram bin-widths. • Another approach was to iteratively clip the brightest pixels in the image (which is known as $\sigma$-clipping, since the reference was found from the image mean and its standard deviation or $\sigma$). See *note Sigma clipping:: for a complete explanation. The problem with $\sigma$-clipping was that real astronomical objects have diffuse and faint wings that penetrate deeply into the noise. So only removing their brightest parts is completely useless in removing the systematic bias an object’s fainter parts cause in the sky value. As discussed in *note Sky value::, the sky value can only be correctly defined as the average of undetected pixels. Therefore all such approaches that try to approximate the sky value prior to detection are ultimately poor approximations. ---------- Footnotes ---------- (1) According to Akhlaghi and Ichikawa (2015), signal-based detection is a detection process that relies heavily on assumptions about the to-be-detected objects. This method was the most heavily used technique prior to the introduction of NoiseChisel in that paper. (2) Akhlaghi M., Ichikawa. T. (2015). Astrophysical Journal Supplement Series.  File: gnuastro.info, Node: Quantifying signal in a tile, Prev: Sky value misconceptions, Up: Sky value 7.1.3.3 Quantifying signal in a tile .................................... Put simply, noise can characterized with a certain spread about a characteristic value. In the Gaussian distribution (most commonly used to model noise) the spread is defined by the standard deviation about the characteristic mean. Before continuing let’s clarify some definitions first: _Data_ is defined as the combination of signal and noise (so a noisy image is one _data_-set). _Signal_ is defined as the mean of the noise on each element (after sky subtraction, see *note Sky value definition::). Let’s assume that the _background_ (see *note Sky value definition::) is subtracted and is zero. When a data set doesn’t have any signal (only noise), the mean, median and mode of the distribution are equal within statistical errors and approximately equal to the background value. Signal always has a positive value and will never become negative, see Figure 1 in Akhlaghi and Ichikawa (2015) (https://arxiv.org/abs/1505.01664). Therefore, as more signal is added to the raw noise, the mean, median and mode of the dataset (which has both signal and noise) shift to the positive. The mean’s shift is the largest. The median shifts less, since it is defined based on an ordered distribution and so is not affected by a small number of outliers. The distribution’s mode shifts the least to the positive. Inverting the argument above gives us a robust method to quantify the significance of signal in a dataset. Namely, when the mode and median of a distribution are approximately equal, we can argue that there is no significant signal. To allow for gradients (which are commonly present in ground-based images), we can consider the image to be made of a grid of tiles (see *note Tessellation::(1)). Hence, from the difference of the mode and median on each tile, we can ‘detect’ the significance of signal in it. The median of a distribution is defined to be the value of the distribution’s middle point after sorting (or 0.5 quantile). Thus, to estimate the presence of signal, we’ll compare with the quantile of the mode with 0.5, if the difference is larger than the value given to the ‘--modmedqdiff’ option, this tile will be ignored. You can read this option as “mode-median-quantile-diffâ€. This method to use the input’s skewness is possible because of a new algorithm to find the mode of a distribution that was defined in Appendix C of Akhlaghi and Ichikawa (2015). However, the raw dataset’s distribution is noisy (noise also affects the sorting), so using the argument above on the raw input will give a noisy result. To decrease the noise/error in estimating the mode, we will use convolution (see *note Convolution process::). Convolution decreases the range of the dataset and enhances its skewness, See Section 3.1.1 and Figure 4 in Akhlaghi and Ichikawa (2015). This enhanced skewness can be interpreted as an increase in the Signal to noise ratio of the objects buried in the noise. Therefore, to obtain an even better measure of the presence of signal in a mesh, the image can be convolved with a given kernel first. Note that through the difference of the mode and median we have actually ‘detected’ data in the distribution. However this “detection†was only based on the total distribution of the data in each tile (a much lower resolution). This is the main limitation of this technique. The best approach is thus to do detection over the dataset, mask all the detected pixels and use the undetected regions to estimate the sky and its standard deviation. The mean value of the tiles that have an approximately equal mode and median will be the Sky value. However there is one final hurdle: astronomical datasets are commonly plagued with Cosmic rays. Images of Cosmic rays aren’t smoothed by the atmosphere or telescope aperture, so they have sharp boundaries. Also, since they don’t occupy too many pixels, they don’t affect the mode and median calculation. But their very high values can greatly bias the calculation of the mean (recall how the mean shifts the fastest in the presence of outliers), see Figure 15 in Akhlaghi and Ichikawa (2015) for one example. The effect of outliers like cosmic rays on the mean and standard deviation can be removed through $\sigma$-clipping, see *note Sigma clipping:: for a complete explanation. Therefore, after asserting that the mode and median are approximately equal in a tile (see *note Tessellation::), the final Sky value and its standard deviation are determined after $\sigma$-clipping with the ‘--sigmaclip’ option. ---------- Footnotes ---------- (1) The options to customize the tessellation are discussed in *note Processing options::.  File: gnuastro.info, Node: Invoking aststatistics, Prev: Sky value, Up: Statistics 7.1.4 Invoking Statistics ------------------------- Statistics will print statistical measures of an input dataset (table column or image). The executable name is ‘aststatistics’ with the following general template $ aststatistics [OPTION ...] InputImage.fits One line examples: ## Print some general statistics of input image: $ aststatistics image.fits ## Print some general statistics of column named MAG_F160W: $ aststatistics catalog.fits -h1 --column=MAG_F160W ## Make the histogram of the column named MAG_F160W: $ aststatistics table.fits -cMAG_F160W --histogram ## Find the Sky value on image with a given kernel: $ aststatistics image.fits --sky --kernel=kernel.fits ## Print Sigma-clipped results of records with a MAG_F160W ## column value between 26 and 27: $ aststatistics cat.fits -cMAG_F160W -g26 -l27 --sigmaclip=3,0.2 ## Print the median value of all records in column MAG_F160W that ## have a value larger than 3 in column PHOTO_Z: $ aststatistics tab.txt -rPHOTO_Z -g3 -cMAG_F160W --median An input image or table is necessary when processing is to be done. If any output file is to be created, the value to the ‘--output’ option, is used as the base name for the generated files. Without ‘--output’, the input name will be used to generate an output name, see *note Automatic output::. The options described below are particular to Statistics, but for general operations, it shares a large collection of options with the other Gnuastro programs, see *note Common options:: for the full list. Options can also be given in configuration files, for more, please see *note Configuration files::. The input dataset may have blank values (see *note Blank pixels::), in this case, all blank pixels are ignored during the calculation. Initially, the full dataset will be read, but it is possible to select a specific range of data elements to use in the analysis of each run. You can either directly specify a minimum and maximum value for the range of data elements to use (with ‘--greaterequal’ or ‘--lessthan’), or specify the range using quantiles (with ‘--qrange’). If a range is specified, all pixels outside of it are ignored before any processing. The following set of options are for specifying the input/outputs of Statistics. There are many other input/output options that are common to all Gnuastro programs including Statistics, see *note Input output options:: for those. ‘-c STR/INT’ ‘--column=STR/INT’ The input column selector when the input file is a table. See *note Selecting table columns:: for a full description of how to use this option. For more on how tables are read in Gnuastro, please see *note Tables::. ‘-r STR/INT’ ‘--refcol=STR/INT’ The reference column selector when the input file is a table. When a reference column is given, the range options below will be applied to this column and only elements in the input column that have a reference value in the correct range will be used. In practice this option allows you to select a subset of the input column based on values in another (the reference) column. All the statistical calculations will be done on the selected input column, not the reference column. ‘-g FLT’ ‘--greaterequal=FLT’ Limit the range of inputs into those with values greater and equal to what is given to this option. None of the values below this value will be used in any of the processing steps below. ‘-l FLT’ ‘--lessthan=FLT’ Limit the range of inputs into those with values less-than what is given to this option. None of the values greater or equal to this value will be used in any of the processing steps below. ‘-Q FLT[,FLT]’ ‘--qrange=FLT[,FLT]’ Specify the range of usable inputs using the quantile. This option can take one or two quantiles to specify the range. When only one number is input (let’s call it $Q$), the range will be those values in the quantile range $Q$ to $1-Q$. So when only one value is given, it must be less than 0.5. When two values are given, the first is used as the lower quantile range and the second is used as the larger quantile range. The quantile of a given element in a dataset is defined by the fraction of its index to the total number of values in the sorted input array. So the smallest and largest values in the dataset have a quantile of 0.0 and 1.0. The quantile is a very useful non-parametric (making no assumptions about the input) relative measure to specify a range. It can best be understood in terms of the cumulative frequency plot, see *note Histogram and Cumulative Frequency Plot::. The quantile of each horizontal axis value in the cumulative frequency plot is the vertical axis value associate with it. When no operation is requested, Statistics will print some general basic properties of the input dataset on the command-line like the example below (ran on one of the output images of ‘make check’(1)). This default behavior is designed to help give you a general feeling of how the data are distributed and help in narrowing down your analysis. $ aststatistics convolve_spatial_scaled_noised.fits \ --greaterequal=9500 --lessthan=11000 Statistics (GNU Astronomy Utilities) X.X ------- Input: convolve_spatial_scaled_noised.fits (hdu: 0) Range: from (inclusive) 9500, upto (exclusive) 11000. Unit: Brightness ------- Number of elements: 9074 Minimum: 9622.35 Maximum: 10999.7 Mode: 10055.45996 Mode quantile: 0.4001983908 Median: 10093.7 Mean: 10143.98257 Standard deviation: 221.80834 ------- Histogram: | ** | ****** | ******* | ********* | ************* | ************** | ****************** | ******************** | *************************** * | ***************************************** *** |* ************************************************************** |----------------------------------------------------------------- Gnuastro’s Statistics is a very general purpose program, so to be able to easily understand this diversity in its operations (and how to possibly run them together), we’ll divided the operations into two types: those that don’t respect the position of the elements and those that do (by tessellating the input on a tile grid, see *note Tessellation::). The former treat the whole dataset as one and can re-arrange all the elements (for example sort them), but the former do their processing on each tile independently. First, we’ll review the operations that work on the whole dataset. The group of options below can used to get a single value measurement of the whole dataset. They will print only the requested value as one field in a line/row, like the ‘--mean’, ‘--median’ options. These options can be called any number of times and in any order. The outputs of all such options will be printed on one line following each other (with a space character between them). This feature makes these options very useful in scripts, or to redirect into programs like GNU AWK for higher-level processing. These are some of the most basic measures, Gnuastro is still under heavy development and this list will grow. If you want another statistical parameter, please contact us and we will do out best to add it to this list, see *note Suggest new feature::. ‘-n’ ‘--number’ Print the number of all used (non-blank and in range) elements. ‘--minimum’ Print the minimum value of all used elements. ‘--maximum’ Print the maximum value of all used elements. ‘--sum’ Print the sum of all used elements. ‘-m’ ‘--mean’ Print the mean (average) of all used elements. ‘-t’ ‘--std’ Print the standard deviation of all used elements. ‘-E’ ‘--median’ Print the median of all used elements. ‘-u FLT[,FLT[,...]]’ ‘--quantile=FLT[,FLT[,...]]’ Print the values at the given quantiles of the input dataset. Any number of quantiles may be given and one number will be printed for each. Values can either be written as a single number or as fractions, but must be between zero and one (inclusive). Hence, in effect ‘--quantile=0.25 --quantile=0.75’ is equivalent to ‘--quantile=0.25,3/4’, or ‘-u1/4,3/4’. The returned value is one of the elements from the dataset. Taking $q$ to be your desired quantile, and $N$ to be the total number of used (non-blank and within the given range) elements, the returned value is at the following position in the sorted array: $round(q\times{}N$). ‘--quantfunc=FLT[,FLT[,...]]’ Print the quantiles of the given values in the dataset. This option is the inverse of the ‘--quantile’ and operates similarly except that the acceptable values are within the range of the dataset, not between 0 and 1. Formally it is known as the “Quantile functionâ€. Since the dataset is not continuous this function will find the nearest element of the dataset and use its position to estimate the quantile function. ‘-O’ ‘--mode’ Print the mode of all used elements. The mode is found through the mirror distribution which is fully described in Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). See that section for a full description. This mode calculation algorithm is non-parametric, so when the dataset is not large enough (larger than about 1000 elements usually), or doesn’t have a clear mode it can fail. In such cases, this option will return a value of ‘nan’ (for the floating point NaN value). As described in that paper, the easiest way to assess the quality of this mode calculation method is to use it’s symmetricity (see ‘--modesym’ below). A better way would be to use the ‘--mirror’ option to generate the histogram and cumulative frequency tables for any given mirror value (the mode in this case) as a table. If you generate plots like those shown in Figure 21 of that paper, then your mode is accurate. ‘--modequant’ Print the quantile of the mode. You can get the actual mode value from the ‘--mode’ described above. In many cases, the absolute value of the mode is irrelevant, but its position within the distribution is important. In such cases, this option will become handy. ‘--modesym’ Print the symmetricity of the calculated mode. See the description of ‘--mode’ for more. This mode algorithm finds the mode based on how symmetric it is, so if the symmetricity returned by this option is too low, the mode is not too accurate. See Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) for a full description. In practice, symmetricity values larger than 0.2 are mostly good. ‘--modesymvalue’ Print the value in the distribution where the mirror and input distributions are no longer symmetric, see ‘--mode’ and Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) for more. The list of options below are for those statistical operations that output more than one value. So while they can be called together in one run, their outputs will be distinct (each one’s output will usually be printed in more than one line). ‘-A’ ‘--asciihist’ Print an ASCII histogram of the usable values within the input dataset along with some basic information like the example below (from the UVUDF catalog(2)). The width and height of the histogram (in units of character widths and heights on your command-line terminal) can be set with the ‘--numasciibins’ (for the width) and ‘--asciiheight’ options. For a full description of the histogram, please see *note Histogram and Cumulative Frequency Plot::. An ASCII plot is certainly very crude and cannot be used in any publication, but it is very useful for getting a general feeling of the input dataset very fast and easily on the command-line without having to take your hands off the keyboard (which is a major distraction!). If you want to try it out, you can write it all in one line and ignore the <\> and extra spaces. $ aststatistics uvudf_rafelski_2015.fits.gz --hdu=1 \ --column=MAG_F160W --lessthan=40 \ --asciihist --numasciibins=55 ASCII Histogram: Number: 8593 Y: (linear: 0 to 660) X: (linear: 17.7735 -- 31.4679, in 55 bins) | **** | ***** | ****** | ******** | ********* | *********** | ************** | ***************** | *********************** | ******************************** |*** *************************************************** |------------------------------------------------------- ‘--asciicfp’ Print the cumulative frequency plot of the usable elements in the input dataset. Please see descriptions under ‘--asciihist’ for more, the example below is from the same input table as that example. To better understand the cumulative frequency plot, please see *note Histogram and Cumulative Frequency Plot::. $ aststatistics uvudf_rafelski_2015.fits.gz --hdu=1 \ --column=MAG_F160W --lessthan=40 \ --asciicfp --numasciibins=55 ASCII Cumulative frequency plot: Y: (linear: 0 to 8593) X: (linear: 17.7735 -- 31.4679, in 55 bins) | ******* | ********** | *********** | ************* | ************** | *************** | ***************** | ******************* | *********************** | ****************************** |******************************************************* |------------------------------------------------------- ‘-H’ ‘--histogram’ Save the histogram of the usable values in the input dataset into a table. The first column is the value at the center of the bin and the second is the number of points in that bin. If the ‘--cumulative’ option is also called with this option in a run, then the table will have three columns (the third is the cumulative frequency plot). Through the ‘--numbins’ and ‘--lowerbin’ you can modify the first column values and with ‘--normalize’ and ‘--maxbinone’ you can modify the second columns. See below for the description of each. By default (when no ‘--output’ is specified) a plain text table will be created, see *note Gnuastro text table format::. If a FITS name is specified, you can use the common option ‘--tableformat’ to have it as a FITS ASCII or FITS binary format, see *note Common options::. This table can then be fed into your favorite plotting tool and get a much more clean and nice histogram than what the raw command-line can offer you (with the ‘--asciihist’ option). ‘-C’ ‘--cumulative’ Save the cumulative frequency plot of the usable values in the input dataset into a table, similar to ‘--histogram’. ‘-s’ ‘--sigmaclip’ Do $\sigma$-clipping on the usable pixels of the input dataset. See *note Sigma clipping:: for a full description on $\sigma$-clipping and also to better understand this option. The $\sigma$-clipping parameters can be set through the ‘--sclipparams’ option (see below). ‘--mirror=FLT’ Make a histogram and cumulative frequency plot of the mirror distribution for the given dataset when the mirror is located at the value to this option. The mirror distribution is fully described in Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) and currently it is only used to calculate the mode (see ‘--mode’). Just note that the mirror distribution is a discrete distribution like the input, so while you may give any number as the value to this option, the actual mirror value is the closest number in the input dataset to this value. If the two numbers are different, Statistics will warn you of the actual mirror value used. This option will make a table as output. Depending on your selected name for the output, it will be either a FITS table or a plain text table (which is the default). It contains three columns: the first is the center of the bins, the second is the histogram (with the largest value set to 1) and the third is the normalized cumulative frequency plot of the mirror distribution. The bins will be positioned such that the mode is on the starting interval of one of the bins to make it symmetric around the mirror. With this output file and the input histogram (that you can generate in another run of Statistics, using the ‘--onebinvalue’), it is possible to make plots like Figure 21 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). The list of options below allow customization of the histogram and cumulative frequency plots (for the ‘--histogram’, ‘--cumulative’, ‘--asciihist’, and ‘--asciicfp’ options). ‘--numbins’ The number of bins (rows) to use in the histogram and the cumulative frequency plot tables (outputs of ‘--histogram’ and ‘--cumulative’). ‘--numasciibins’ The number of bins (characters) to use in the ASCII plots when printing the histogram and the cumulative frequency plot (outputs of ‘--asciihist’ and ‘--asciicfp’). ‘--asciiheight’ The number of lines to use when printing the ASCII histogram and cumulative frequency plot on the command-line (outputs of ‘--asciihist’ and ‘--asciicfp’). ‘-n’ ‘--normalize’ Normalize the histogram or cumulative frequency plot tables (outputs of ‘--histogram’ and ‘--cumulative’). For a histogram, the sum of all bins will become one and for a cumulative frequency plot the last bin value will be one. ‘--maxbinone’ Divide all the histogram values by the maximum bin value so it becomes one and the rest are similarly scaled. In some situations (for example if you want to plot the histogram and cumulative frequency plot in one plot) this can be very useful. ‘--onebinstart=FLT’ Make sure that one bin starts with the value to this option. In practice, this will shift the bins used to find the histogram and cumulative frequency plot such that one bin’s lower interval becomes this value. For example when the histogram range includes negative and positive values and zero has a special significance in your analysis, then zero will be somewhere in one bin and will mix counts of positive and negative. By setting ‘--onebinstart=0’, you can make sure that the viewers of the histogram will not be confused without doing the math of setting a range and number of bins. Note that by default, the first row of the histogram and cumulative frequency plot show the central values of each bin. So in the example above you will not see the 0.000 in the first column, you will see two symmetric values. If the value is not within the usable input range, this option will be ignored. All the options described until now were from the first class of operations discussed above: those that treat the whole dataset as one. However. It often happens that the relative position of the dataset elements over the dataset is significant. For example you don’t want one median value for the whole input image, you want to know how the median changes over the image. For such operations, the input has to be tessellated (see *note Tessellation::). Thus this class of options can’t currently be called along with the options above in one run of Statistics. ‘-t’ ‘--ontile’ Do the respective single-valued calculation over one tile of the input dataset, not the whole dataset. This option must be called with at least one of the single valued options discussed above (for example ‘--mean’ or ‘--quantile’). The output will be a file in the same format as the input. If the ‘--oneelempertile’ option is called, then one element/pixel will be used for each tile (see *note Processing options::). Otherwise, the output will have the same size as the input, but each element will have the value corresponding to that tile’s value. If multiple single valued operations are called, then for each operation there will be one extension in the output FITS file. ‘-y’ ‘--sky’ Estimate the Sky value on each tile as fully described in *note Quantifying signal in a tile::. As described in that section, several options are necessary to configure the Sky estimation which are listed below. The output file will have two extensions: the first is the Sky value and the second is the Sky standard deviation on each tile. Similar to ‘--ontile’, if the ‘--oneelempertile’ option is called, then one element/pixel will be used for each tile (see *note Processing options::). The parameters for estimating the sky value can be set with the following options, except for the ‘--sclipparams’ option (which is also used by the ‘--sigmaclip’), the rest are only used for the Sky value estimation. ‘-k=STR’ ‘--kernel=STR’ File name of kernel to help in estimating the significance of signal in a tile, see *note Quantifying signal in a tile::. ‘--khdu=STR’ Kernel HDU to help in estimating the significance of signal in a tile, see *note Quantifying signal in a tile::. ‘--mirrordist=FLT’ Maximum distance (as a multiple of error) to estimate the difference between the input and mirror distributions in finding the mode, see Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664), also see *note Quantifying signal in a tile::. ‘--modmedqdiff=FLT’ The maximum acceptable distance between the mode and median, see *note Quantifying signal in a tile::. ‘--sclipparams=FLT,FLT’ The $\sigma$-clipping parameters, see *note Sigma clipping::. This option takes two values which are separated by a comma (<,>). Each value can either be written as a single number or as a fraction of two numbers (for example ‘3,1/10’). The first value to this option is the multiple of $\sigma$ that will be clipped ($\alpha$ in that section). The second value is the exit criteria. If it is less than 1, then it is interpreted as tolerance and if it is larger than one it is a specific number. Hence, in the latter case the value must be an integer. ‘--smoothwidth=INT’ Width of a flat kernel to convolve the interpolated tile values. Tile interpolation is done using the median of the ‘--interpnumngb’ neighbors of each tile (see *note Processing options::). If this option is given a value of zero or one, no smoothing will be done. Without smoothing, strong boundaries will probably be created between the values estimated for each tile. It is thus good to smooth the interpolated image so strong discontinuities do not show up in the final Sky values. The smoothing is done through convolution (see *note Convolution process::) with a flat kernel, so the value to this option must be an odd number. ‘--checksky’ Create a multi-extension FITS file showing the steps that were used to estimate the Sky value over the input, see *note Quantifying signal in a tile::. The file will have two extensions for each step (one for the Sky and one for the Sky standard deviation). ---------- Footnotes ---------- (1) You can try it by running the command in the ‘tests’ directory, open the image with a FITS viewer and have a look at it to get a sense of how these statistics relate to the input image/dataset. (2) gnuastro-0.5/doc/gnuastro.info-10000644000175000017500000111407413217220434013571 00000000000000This is gnuastro.info, produced by makeinfo version 6.5 from gnuastro.texi. This book documents version 0.5 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2017 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation Licenseâ€. INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro’s library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeNoise: (gnuastro)MakeNoise. Make (add) noise to an image. * astmknoise: (gnuastro)Invoking astmknoise. Options to MakeNoise. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) GNU Astronomy Utilities *********************** This book documents version 0.5 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2017 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation Licenseâ€. * Menu: * Introduction:: General introduction. * Tutorials:: Tutorials or Cookbooks. * Installation:: Requirements and installation. * Common program behavior:: Common behavior in all programs. * Data containers:: Tools to operate on extensions and tables. * Data manipulation:: Tools for basic image manipulation. * Data analysis:: Analyze images. * Modeling and fittings:: Make and fit models. * High-level calculations:: Physical calculations. * Library:: Gnuastro’s library of useful functions. * Developing:: The development environment. * Gnuastro programs list:: List and short summary of Gnuastro. * Other useful software:: Installing other useful software. * GNU Free Doc. License:: GNU Free documentation license. * Index:: Index of terms — The Detailed Node Listing — Introduction * Quick start:: A quick start to installation. * Science and its tools:: Some philosophy and history. * Your rights:: User rights. * Naming convention:: About names of programs in Gnuastro. * Version numbering:: Understanding version numbers. * New to GNU/Linux?:: Suggested GNU/Linux distribution. * Report a bug:: Search and report the bug you found. * Suggest new feature:: How to suggest a new feature. * Announcements:: How to stay up to date with Gnuastro. * Conventions:: Conventions used in this book. * Acknowledgments:: People who helped in the production. Version numbering * GNU Astronomy Utilities 1.0:: Plans for version 1.0 release New to GNU/Linux? * Command-line interface:: Introduction to the command-line Tutorials * Hubble visually checks and classifies his catalog:: Check a catalog. * Sufi simulates a detection:: Simulating a detection. * General program usage tutorial:: Usage of all programs in a good way. Installation * Dependencies:: Necessary packages for Gnuastro. * Downloading the source:: Ways to download the source code. * Build and install:: Configure, build and install Gnuastro. Dependencies * Mandatory dependencies:: Gnuastro will not install without these. * Optional dependencies:: Adding more functionality. * Bootstrapping dependencies:: If you have the version controlled source. Mandatory dependencies * GNU Scientific Library:: Installing GSL. * CFITSIO:: C interface to the FITS standard. * WCSLIB:: C interface to the WCS standard of FITS. Downloading the source * Release tarball:: Download a stable official release. * Version controlled source:: Get and use the version controlled source. Version controlled source * Bootstrapping:: Adding all the automatically generated files. * Synchronizing:: Keep your local clone up to date. Build and install * Configuring:: Configure Gnuastro * Tests:: Run tests to see if it is working. * A4 print book:: Customize the print book. * Known issues:: Issues you might encounter. Configuring * Gnuastro configure options:: Configure options particular to Gnuastro. * Installation directory:: Specify the directory to install. * Executable names:: Changing executable names. * Configure and build in RAM:: For minimal use of HDD or SSD, and clean source. Common program behavior * Command-line:: How to use the command-line. * Configuration files:: Values for unspecified variables. * Multi-threaded operations:: How threads are managed in Gnuastro. * Numeric data types:: Different types and how to specify them. * Tables:: Recognized table formats. * Tessellation:: Tile the dataset into non-overlapping bins. * Getting help:: Getting more information on the go. * Automatic output:: About automatic output names. * Output headers:: Common headers to all FITS outputs. Command-line * Arguments and options:: Basics of options and arguments. * Common options:: Common options to all Gnuastro programs. Arguments and options * Arguments:: For specifying the main input files/operations. * Options:: For configuring the behavior of the program. Common options * Input output options:: Common input/output options. * Processing options:: Options for common processing steps. * Operating mode options:: Common operating mode options. Configuration files * Configuration file format:: ASCII format of configuration file. * Configuration file precedence:: Precedence of configuration files. * Current directory and User wide:: Local and user configuration files. * System wide:: System wide configuration files. Multi-threaded operations * A note on threads:: Caution and suggestion on using threads. * How to run simultaneous operations:: How to run things simultaneously. Tables * Recognized table formats:: Table formats that are recognized in Gnuastro. * Gnuastro text table format:: Gnuastro’s convention plain text tables. * Selecting table columns:: Identify/select certain columns from a table Recognized table formats * Gnuastro text table format:: Reading plain text tables Getting help * --usage:: View option names and value formats. * --help:: List all options with description. * Man pages:: Man pages generated from –help. * Info:: View complete book in terminal. * help-gnuastro mailing list:: Contacting experienced users. Data containers * Fits:: View and manipulate extensions and keywords. * ConvertType:: Convert data to various formats. * Table:: Read and Write FITS tables to plain text. Fits * Invoking astfits:: Arguments and options to Header. Invoking Fits * HDU manipulation:: Manipulate HDUs within a FITS file. * Keyword manipulation:: Manipulate metadata keywords in a HDU ConvertType * Recognized file formats:: Recognized file formats * Color:: Some explanations on color. * Invoking astconvertt:: Options and arguments to ConvertType. Table * Invoking asttable:: Options and arguments to Table. Data manipulation * Crop:: Crop region(s) from a dataset. * Arithmetic:: Arithmetic on input data. * Convolve:: Convolve an image with a kernel. * Warp:: Warp/Transform an image to a different grid. Crop * Crop modes:: Basic modes to define crop region. * Crop section syntax:: How to define a section to crop. * Blank pixels:: Pixels with no value. * Invoking astcrop:: Calling Crop on the command-line Invoking Crop * Crop options:: A list of all the options with explanation. * Crop output:: The outputs of Crop. Arithmetic * Reverse polish notation:: The current notation style for Arithmetic * Arithmetic operators:: List of operators known to Arithmetic * Invoking astarithmetic:: How to run Arithmetic: options and output Convolve * Spatial domain convolution:: Only using the input image values. * Frequency domain and Fourier operations:: Using frequencies in input. * Spatial vs. Frequency domain:: When to use which? * Convolution kernel:: How to specify the convolution kernel. * Invoking astconvolve:: Options and argument to Convolve. Spatial domain convolution * Convolution process:: More basic explanations. * Edges in the spatial domain:: Dealing with the edges of an image. Frequency domain and Fourier operations * Fourier series historical background:: Historical background. * Circles and the complex plane:: Interpreting complex numbers. * Fourier series:: Fourier Series definition. * Fourier transform:: Fourier Transform definition. * Dirac delta and comb:: Dirac delta and Dirac comb. * Convolution theorem:: Derivation of Convolution theorem. * Sampling theorem:: Sampling theorem (Nyquist frequency). * Discrete Fourier transform:: Derivation and explanation of DFT. * Fourier operations in two dimensions:: Extend to 2D images. * Edges in the frequency domain:: Interpretation of edge effects. Warp * Warping basics:: Basics of coordinate transformation. * Merging multiple warpings:: How to merge multiple matrices. * Resampling:: Warping an image is re-sampling it. * Invoking astwarp:: Arguments and options for Warp. Data analysis * Statistics:: Calculate dataset statistics. * NoiseChisel:: Detect objects in an image. * MakeCatalog:: Catalog from input and labeled images. * Match:: Match two datasets. Statistics * Histogram and Cumulative Frequency Plot:: Basic definitions. * Sigma clipping:: Definition of $\sigma$-clipping. * Sky value:: Definition and derivation of the Sky value. * Invoking aststatistics:: Arguments and options to Statistics. Sky value * Sky value definition:: Definition of the Sky/reference value. * Sky value misconceptions:: Wrong methods to estimate the Sky value. * Quantifying signal in a tile:: Method to estimate the presence of signal. NoiseChisel * NoiseChisel changes after publication:: Changes to the software after publication. * Invoking astnoisechisel:: Options and arguments for NoiseChisel. Invoking NoiseChisel * General NoiseChisel options:: General NoiseChisel preprocessing. * Detection options:: Configure detection in NoiseChisel. * Segmentation options:: Configure segmentation in NoiseChisel. * NoiseChisel output:: NoiseChisel’s output format. MakeCatalog * Detection and catalog production:: Discussing why/how to treat these separately * Quantifying measurement limits:: For comparing different catalogs. * Measuring elliptical parameters:: Estimating elliptical parameters. * Adding new columns to MakeCatalog:: How to add new columns. * Invoking astmkcatalog:: Options and arguments to MakeCatalog. Invoking MakeCatalog * MakeCatalog input files:: Specifying the different input files. * MakeCatalog general settings:: Options for general column settings. * Upper-limit magnitude settings:: Necessary to define upper-limit magnitudes. * MakeCatalog output columns:: How to specify the columns in the output. Match * Invoking astmatch:: Inputs, outputs and options of Match Modeling and fitting * MakeProfiles:: Making mock galaxies and stars. * MakeNoise:: Make (add) noise to an image. MakeProfiles * Modeling basics:: Astronomical modeling basics. * If convolving afterwards:: Considerations for convolving later. * Flux Brightness and magnitude:: About these measures of energy. * Profile magnitude:: Definition of total profile magnitude. * Invoking astmkprof:: Inputs and Options for MakeProfiles. Modeling basics * Defining an ellipse:: An ellipse on a pixelated grid. * PSF:: Radial profiles for the PSF. * Stars:: Making mock star profiles. * Galaxies:: Radial profiles for galaxies. * Sampling from a function:: Sample a function on a pixelated canvas. * Oversampling:: Oversampling the model. Invoking MakeProfiles * MakeProfiles catalog:: Required catalog properties. * MakeProfiles profile settings:: Configuration parameters for all profiles. * MakeProfiles output dataset:: The canvas/dataset to build profiles over. * MakeProfiles log file:: A description of the optional log file. MakeNoise * Noise basics:: Noise concepts and definitions. * Invoking astmknoise:: Options and arguments to MakeNoise. Noise basics * Photon counting noise:: Poisson noise * Instrumental noise:: Readout, dark current and other sources. * Final noised pixel value:: How the final noised value is calculated. * Generating random numbers:: How random numbers are generated. High-level calculations * CosmicCalculator:: Calculate cosmological variables CosmicCalculator * Distance on a 2D curved space:: Distances in 2D for simplicity * Extending distance concepts to 3D:: Going to 3D (our real universe). * Invoking astcosmiccal:: How to run CosmicCalculator Invoking CosmicCalculator * CosmicCalculator input options:: Options to specify input conditions. * CosmicCalculator specific calculations:: Requesting specific outputs. Library * Review of library fundamentals:: Guide on libraries and linking. * BuildProgram:: Link and run source files with this library. * Gnuastro library:: Description of all library functions. * Library demo programs:: Demonstration for using libraries. Review of library fundamentals * Headers:: Header files included in source. * Linking:: Linking the compiled source files into one. * Summary and example on libraries:: A summary and example on using libraries. BuildProgram * Invoking astbuildprog:: Options and examples for using this program. Gnuastro library * Configuration information:: General information about library config. * Multithreaded programming:: Tools for easy multi-threaded operations. * Library data types:: Definitions and functions for types. * Library blank values:: Blank values and functions to deal with them. * Library data container:: General data container in Gnuastro. * Dimensions:: Dealing with coordinates and dimensions. * Linked lists:: Various types of linked lists. * FITS files:: Working with FITS data. * World Coordinate System:: Dealing with the world coordinate system. * Text files:: Functions to work on Text files. * Table input output:: Reading and writing table columns. * Arithmetic on datasets:: Arithmetic operations on a dataset. * Tessellation library:: Functions for working on tiles. * Bounding box:: Finding the bounding box. * Polygons:: Working with the vertices of a polygon. * Qsort functions:: Helper functions for Qsort. * Permutations:: Re-order (or permute) the values in a dataset. * Matching:: Matching catalogs based on position. * Statistical operations:: Functions for basic statistics. * Binary datasets:: Datasets that can only have values of 0 or 1. * Convolution functions:: Library functions to do convolution. * Interpolation:: Interpolate (over blank values possibly). * Git wrappers:: Wrappers for functions in libgit2. * Cosmology library:: Cosmological calculations. Multithreaded programming (‘threads.h’) * Implementation of pthread_barrier:: Some systems don’t have pthread_barrier * Gnuastro's thread related functions:: Functions for managing threads. Data container (‘data.h’) * Generic data container:: Definition of Gnuastro’s generic container. * Dataset size and allocation:: Functions for size and allocation. * Arrays of datasets:: Functions to help with array of datasets. * Copying datasets:: Functions to copy a dataset to a new one. Linked lists (‘list.h’) * List of strings:: Simply linked list of strings. * List of int32_t:: Simply linked list of int32_ts. * List of size_t:: Simply linked list of size_ts. * List of float:: Simply linked list of floats. * List of double:: Simply linked list of doubles * List of void:: Simply linked list of void * pointers. * Ordered list of size_t:: Simply linked, ordered list of size_t. * Doubly linked ordered list of size_t:: Definition and functions. * List of gal_data_t:: Simply linked list Gnuastro’s generic datatype. FITS files (‘fits.h’) * FITS macros errors filenames:: General macros, errors and checking names. * CFITSIO and Gnuastro types:: Conversion between FITS and Gnuastro types. * FITS HDUs:: Opening and getting information about HDUs. * FITS header keywords:: Reading and writing FITS header keywords. * FITS arrays:: Reading and writing FITS images/arrays. * FITS tables:: Reading and writing FITS tables. Tessellation library (‘tile.h’) * Independent tiles:: Work on or check independent tiles. * Tile grid:: Cover a full dataset with non-overlapping tiles. Library demo programs * Library demo - reading a image:: Read a FITS image into memory. * Library demo - inspecting neighbors:: Inspect the neighbors of a pixel. * Library demo - multi-threaded operation:: Doing an operation on threads. * Library demo - reading and writing table columns:: Simple Column I/O. Developing * Why C:: Why Gnuastro is designed in C. * Program design philosophy:: General ideas behind the package structure. * Coding conventions:: Gnuastro coding conventions. * Program source:: Conventions for the code. * Documentation:: Documentation is an integral part of Gnuastro. * Building and debugging:: Build and possibly debug during development. * Test scripts:: Understanding the test scripts. * Developer's checklist:: Checklist to finalize your changes. * Gnuastro project webpage:: Central hub for Gnuastro activities. * Developing mailing lists:: Stay up to date with Gnuastro’s development. * Contributing to Gnuastro:: Share your changes with all users. Program source * Mandatory source code files:: Description of files common to all programs. * The TEMPLATE program:: Template for easy creation of a new program. Contributing to Gnuastro * Copyright assignment:: Copyright has to be assigned to the FSF. * Commit guidelines:: Guidelines for commit messages. * Production workflow:: Submitting your commits (work) for inclusion. * Forking tutorial:: Tutorial on workflow steps with Git. Other useful software * SAO ds9:: Viewing FITS images. * PGPLOT:: Plotting directly in C SAO ds9 * Viewing multiextension FITS images:: Configure SAO ds9 for multiextension images.  File: gnuastro.info, Node: Introduction, Next: Tutorials, Prev: Top, Up: Top 1 Introduction ************** GNU Astronomy Utilities (Gnuastro) is an official GNU package consisting of separate programs and libraries for the manipulation and analysis of astronomical data. All the programs share the same basic command-line user interface for the comfort of both the users and developers. Gnuastro is written to comply fully with the GNU coding standards so it integrates finely with the GNU/Linux operating system. This also enables astronomers to expect a fully familiar experience in the source code, building, installing and command-line user interaction that they have seen in all the other GNU software that they use. The official and always up to date version of this book (or manual) is freely available under *note GNU Free Doc. License:: in various formats (pdf, html, plain text, info, and as its Texinfo source) at . For users who are new to the GNU/Linux environment, unless otherwise specified most of the topics in *note Installation:: and *note Common program behavior:: are common to all GNU software, for example installation, managing command-line options or getting help (also see *note New to GNU/Linux?::). So if you are new to this empowering environment, we encourage you to go through these chapters carefully. They can be a starting point from which you can continue to learn more from each program’s own manual and fully benefit from and enjoy this wonderful environment. Gnuastro also comes with a large set of libraries, so you can write your own programs using Gnuastro’s building blocks, see *note Review of library fundamentals:: for an introduction. Finally it must be mentioned that in Gnuastro, no change to any program will be released before it has been fully documented in this here first. As discussed in *note Science and its tools:: this is the founding basis of the Gnuastro. * Menu: * Quick start:: A quick start to installation. * Science and its tools:: Some philosophy and history. * Your rights:: User rights. * Naming convention:: About names of programs in Gnuastro. * Version numbering:: Understanding version numbers. * New to GNU/Linux?:: Suggested GNU/Linux distribution. * Report a bug:: Search and report the bug you found. * Suggest new feature:: How to suggest a new feature. * Announcements:: How to stay up to date with Gnuastro. * Conventions:: Conventions used in this book. * Acknowledgments:: People who helped in the production.  File: gnuastro.info, Node: Quick start, Next: Science and its tools, Prev: Introduction, Up: Introduction 1.1 Quick start =============== The latest official release tarball is always available as ‘gnuastro-latest.tar.gz’ (http://ftp.gnu.org/gnu/gnuastro/gnuastro-latest.tar.gz). For better compression (faster download), and robust archival features, an Lzip (http://www.nongnu.org/lzip/lzip.html) compressed tarball is also available at ‘gnuastro-latest.tar.lz’ (http://ftp.gnu.org/gnu/gnuastro/gnuastro-latest.tar.lz), see *note Release tarball:: for more details on the tarball release. The Gzip library and program are commonly available on most systems. However, Gnuastro recommends Lzip as described above and the beta-releases are also only distributed in ‘tar.lz’. You can download and install Lzip’s source (in ‘.tar.gz’ format) from its webpage and follow the same process as below: Lzip has no dependencies, so simply decompress, then run ‘./configure’, ‘make’, ‘sudo make install’. Let’s assume the downloaded tarball is in the ‘TOPGNUASTRO’ directory. The first two commands below can be used to decompress the source. If you download ‘tar.lz’ and your Tar implementation doesn’t recognize Lzip (the second command fails), run the third and fourth lines. Note that lines starting with ‘##’ don’t need to be typed. ## Go into the download directory. $ cd TOPGNUASTRO ## Also works on `tar.gz'. GNU Tar recognizes both formats. $ tar xf gnuastro-latest.tar.lz ## Only when previous command fails. $ lzip -d gnuastro-latest.tar.lz $ tar xf gnuastro-latest.tar Gnuastro has three mandatory dependencies and some optional dependencies for extra functionality, see *note Dependencies:: for the full list. Links to the dependency sources and instructions on installing each are fully described there. When the mandatory dependencies are ready, you can configure, compile, check and install Gnuastro on your system with the following commands. $ cd gnuastro-X.X # Replace X.X with version number. $ ./configure $ make -j8 # Replace 8 with no. CPU threads. $ make check $ sudo make install See *note Known issues:: if you confront any complications. For each program there is an ‘Invoke ProgramName’ sub-section in this book which explains how the programs should be run on the command-line (for example *note Invoking asttable::). You can read the same section on the command-line by running ‘$ info astprogname’ (for example ‘info asttable’). The ‘Invoke ProgramName’ sub-section starts with a few examples of each program and goes on to explain the invocation details. See *note Getting help:: for all the options you have to get help. In *note Tutorials:: some real life examples of how these programs might be used are given.  File: gnuastro.info, Node: Science and its tools, Next: Your rights, Prev: Quick start, Up: Introduction 1.2 Science and its tools ========================= History of science indicates that there are always inevitably unseen faults, hidden assumptions, simplifications and approximations in all our theoretical models, data acquisition and analysis techniques. It is precisely these that will ultimately allow future generations to advance the existing experimental and theoretical knowledge through their new solutions and corrections. In the past, scientists would gather data and process them individually to achieve an analysis thus having a much more intricate knowledge of the data and analysis. The theoretical models also required little (if any) simulations to compare with the data. Today both methods are becoming increasingly more dependent on pre-written software. Scientists are dissociating themselves from the intricacies of reducing raw observational data in experimentation or from bringing the theoretical models to life in simulations. These ‘intricacies’ are precisely those unseen faults, hidden assumptions, simplifications and approximations that define scientific progress. Unfortunately, most persons who have recourse to a computer for statistical analysis of data are not much interested either in computer programming or in statistical method, being primarily concerned with their own proper business. Hence the common use of library programs and various statistical packages. ... It’s time that was changed. — _F. J. Anscombe. The American Statistician, Vol. 27, No. 1. 1973_ Anscombe’s quartet (http://en.wikipedia.org/wiki/Anscombe%27s_quartet) demonstrates how four data sets with widely different shapes (when plotted) give nearly identical output from standard regression techniques. Anscombe uses this (now famous) quartet, which was introduced in the paper quoted above, to argue that “Good statistical analysis is not a purely routine matter, and generally calls for more than one pass through the computerâ€. Anscombe’s quartet can be generalized to say that users of a software cannot claim to understand how it works only based on the experience they have gained by frequently using it. This kind of subjective experience is prone to very serious mis-understandings about the data, what the software/statistical-method really does (especially as it gets more complicated), and thus the scientific interpretation of the result. This attitude is further encouraged through non-free software(1). This approach to scientific software only helps in producing dogmas and an “obscurantist faith in the expert’s special skill, and in his personal knowledge and authorityâ€(2). Program or be programmed. Choose the former, and you gain access to the control panel of civilization. Choose the latter, and it could be the last real choice you get to make. — _Douglas Rushkoff. Program or be programmed, O/R Books (2010)._ It is obviously impractical for any one human being to gain the intricate knowledge explained above for every step of an analysis. On the other hand, scientific data can be very large and numerous, for example images produced by telescopes in astronomy. This requires very efficient algorithms. To make things worse, natural scientists have generally not been trained in the advanced software techniques, paradigms and architecture that are taught in computer science or engineering courses and thus used in most software. The GNU Astronomy Utilities are an effort to tackle this issue. Gnuastro is not just a software, this book is as important to the idea behind Gnuastro as the source code (software). This book has tried to learn from the success of the “Numerical Recipes†book in educating those who are not software engineers and computer scientists but still heavy users of computational algorithms, like astronomers. There are two major differences: the code and the explanations are segregated: the code is moved within the actual Gnuastro software source code and the underlying explanations are given here. In the source code every non-trivial step is heavily commented and correlated with this book, it follows the same logic of this book, and all the programs follow a similar internal data, function and file structure, see *note Program source::. Complementing the code, this book focuses on thoroughly explaining the concepts behind those codes (history, mathematics, science, software and usage advise when necessary) along with detailed instructions on how to run the programs. At the expense of frustrating “professionals†or “expertsâ€, this book and the comments in the code also intentionally avoid jargon and abbreviations. The source code and this book are thus intimately linked, and when considered as a single entity can be thought of as a real (an actual software accompanying the algorithms) “Numerical Recipes†for astronomy. The other major and arguably more important difference is that “Numerical Recipes†does not allow you to distribute any code that you have learned from it. So while it empowers the privileged individual who has access to it, it exacerbates social ignorance. For example it does not allow you to release your software’s source code if you have used their codes, you can only publicly release binaries (a black box) to the community. Exactly at the opposite end of the spectrum, Gnuastro’s source code is released under the GNU general public license (GPL) and this book is released under the GNU free documentation license. You are therefore free to distribute any software you create using parts of Gnuastro’s source code or text, or figures from this book, see *note Your rights::. While developing the source code and this book together, the developers of Gnuastro aim to impose the minimum requirements on you (in computer science, engineering and even the mathematics behind the tools) to understand and modify any step of Gnuastro if you feel the need to do so, see *note Why C:: and *note Program design philosophy::. Imagine if Galileo did not have the technical knowledge to build a telescope. Astronomical objects could not be seen with the Dutch military design of the telescope. In the beginning of his “The Sidereal Messenger†(1610) he cautions the readers on this issue and instructs them on how to build a suitable instrument: without a detailed description of “how†he made his observations, no one would believe him. The same is true today, science cannot progress with a black box. Before he actually saw the moons of Jupiter, the mountains on the Moon or the crescent of Venus, he was “evasive†to Kepler(3). Science is not independent of its tools. Bjarne Stroustrup (creator of the C++ language) says: “Without understanding software, you are reduced to believing in magicâ€. Ken Thomson (the designer or the Unix operating system) says “I abhor a system designed for the ‘user’ if that word is a coded pejorative meaning ‘stupid and unsophisticated’.†Certainly no scientist (user of a scientific software) would want to be considered a believer in magic, or ‘stupid and unsophisticated’. However, this can happen when scientists get too distant from the raw data and are mainly indulging themselves in their own high-level (abstract) models (creations). For example, roughly five years before special relativity and about two decades before quantum mechanics fundamentally changed Physics, Kelvin is quoted as saying: There is nothing new to be discovered in physics now. All that remains is more and more precise measurement. — _William Thomson (Lord Kelvin), 1900_ A few years earlier, in a speech Albert. A. Michelson said: The more important fundamental laws and facts of physical science have all been discovered, and these are now so firmly established that the possibility of their ever being supplanted in consequence of new discoveries is exceedingly remote.... Our future discoveries must be looked for in the sixth place of decimals. — _Albert. A. Michelson, dedication of Ryerson Physics Lab, U. Chicago 1894_ If scientists are considered to be more than mere “puzzle solversâ€(4) (simply adding to the decimals of known values or observing a feature in 10, 100, or 100000 more galaxies or stars, as Kelvin and Michelson clearly believed), they cannot just passively sit back and uncritically repeat the previous (observational or theoretical) methods/tools on new data. Today there is a wealth of raw telescope images ready (mostly for free) at the finger tips of anyone who is interested with a fast enough internet connection to download them. The only thing lacking is new ways to analyze this data and dig out the treasure that is lying hidden in them to existing methods and techniques. New data that we insist on analyzing in terms of old ideas (that is, old models which are not questioned) cannot lead us out of the old ideas. However many data we record and analyze, we may just keep repeating the same old errors, missing the same crucially important things that the experiment was competent to find. — _Jaynes, Probability theory, the logic of science. Cambridge U. Press (2003)._ ---------- Footnotes ---------- (1) (2) Karl Popper. The logic of scientific discovery. 1959. Larger quote is given at the start of the PDF (for print) version of this book. (3) Galileo G. (Translated by Maurice A. Finocchiaro). _The essential Galileo_. Hackett publishing company, first edition, 2008. (4) Thomas S. Kuhn. _The Structure of Scientific Revolutions_, University of Chicago Press, 1962.  File: gnuastro.info, Node: Your rights, Next: Naming convention, Prev: Science and its tools, Up: Introduction 1.3 Your rights =============== The paragraphs below, in this section, belong to the GNU Texinfo(1) manual and are not written by us! The name “Texinfo†is just changed to “GNU Astronomy Utilities†or “Gnuastro†because they are released under the same licenses and it is beautifully written to inform you of your rights. GNU Astronomy Utilities is “free softwareâ€; this means that everyone is free to use it and free to redistribute it on certain conditions. Gnuastro is not in the public domain; it is copyrighted and there are restrictions on its distribution, but these restrictions are designed to permit everything that a good cooperating citizen would want to do. What is not allowed is to try to prevent others from further sharing any version of Gnuastro that they might get from you. Specifically, we want to make sure that you have the right to give away copies of the programs that relate to Gnuastro, that you receive the source code or else can get it if you want it, that you can change these programs or use pieces of them in new free programs, and that you know you can do these things. To make sure that everyone has such rights, we have to forbid you to deprive anyone else of these rights. For example, if you distribute copies of the Gnuastro related programs, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. Also, for our own protection, we must make certain that everyone finds out that there is no warranty for the programs that relate to Gnuastro. If these programs are modified by someone else and passed on, we want their recipients to know that what they have is not what we distributed, so that any problems introduced by others will not reflect on our reputation. The precise conditions of the licenses for the programs currently being distributed that relate to Gnuastro are found in the GNU General Public license (http://www.gnu.org/copyleft/gpl.html) that accompany them. This book is covered by the GNU Free Documentation License (http://www.gnu.org/copyleft/fdl.html). ---------- Footnotes ---------- (1) Texinfo is the GNU documentation system. It is used to create this book in all the various formats.  File: gnuastro.info, Node: Naming convention, Next: Version numbering, Prev: Your rights, Up: Introduction 1.4 Naming convention ===================== Gnuastro is a package of independent programs and a collection of libraries, here we are mainly concerned with the programs. Each program has an official name which consists of one or two words, describing what they do. The latter are printed with no space, for example NoiseChisel or Crop. On the command-line, you can run them with their executable names which start with an ‘ast’ and might be an abbreviation of the official name, for example ‘astnoisechisel’ or ‘astcrop’, see *note Executable names::. We will use “ProgramName†for a generic official program name and ‘astprogname’ for a generic executable name. In this book, the programs are classified based on what they do and thoroughly explained. An alphabetical list of the programs that are installed on your system with this installation are given in *note Gnuastro programs list::. That list also contains the executable names and version numbers along with a one line description.  File: gnuastro.info, Node: Version numbering, Next: New to GNU/Linux?, Prev: Naming convention, Up: Introduction 1.5 Version numbering ===================== Gnuastro can have two formats of version numbers, for official and unofficial releases. Official Gnuastro releases are announced on the ‘info-gnuastro’ mailing list, they have a version control tag in Gnuastro’s development history, and their version numbers are formatted like “‘A.B’â€. ‘A’ is a major version number, marking a significant planned achievement (for example see *note GNU Astronomy Utilities 1.0::), while ‘B’ is a minor version number, see below for more on the distinction. Note that the numbers are not decimals, so version 2.34 is much more recent than version 2.5, which is not equal to 2.50. Gnuastro also allows a unique version number for unofficial releases. Unofficial releases can mark any point in Gnuastro’s development history. This is done to allow astronomers to easily use any point in the version controlled history for their data-analysis and research publication. See *note Version controlled source:: for a complete introduction. This section is not just for developers and is very straightforward, so please have a look if you are interested in the cutting-edge. This unofficial version number is a meaningful and easy to read string of characters, unique to that particular point of history. With this feature, users can easily stay up to date with the most recent bug fixes and additions that are committed between official releases. The unofficial version number is formatted like: ‘A.B.C-D’. ‘A’ and ‘B’ are the most recent official version number. ‘C’ is the number of commits that have been made after version ‘A.B’. ‘D’ is the first 4 or 5 characters of the commit hash number(1). Therefore, the unofficial version number ‘‘3.92.8-29c8’’, corresponds to the 8th commit after the official version ‘3.92’ and its commit hash begins with ‘29c8’. The unofficial version number is sort-able (unlike the raw hash) and as shown above is very descriptive of the state of the unofficial release. Of course an official release is preferred for publication (since its tarballs are easily available and it has gone through more tests, making it more stable), so if an official release is announced prior to your publication’s final review, please consider updating to the official release. The major version number is set by a major goal which is defined by the developers and user community before hand, for example see *note GNU Astronomy Utilities 1.0::. The incremental work done in minor releases are commonly small steps in achieving the major goal. Therefore, there is no limit on the number of minor releases and the difference between the (hypothetical) versions 2.927 and 3.0 can be a very small (negligible to the user) improvement that finalizes the defined goals. * Menu: * GNU Astronomy Utilities 1.0:: Plans for version 1.0 release ---------- Footnotes ---------- (1) Each point in Gnuastro’s history is uniquely identified with a 40 character long hash which is created from its contents and previous history for example: ‘5b17501d8f29ba3cd610673261e6e2229c846d35’. So the string ‘D’ in the version for this commit could be ‘5b17’, or ‘5b175’.  File: gnuastro.info, Node: GNU Astronomy Utilities 1.0, Prev: Version numbering, Up: Version numbering 1.5.1 GNU Astronomy Utilities 1.0 --------------------------------- Currently (prior to Gnuastro 1.0), the aim of Gnuastro is to have a complete system for data manipulation and analysis at least similar to IRAF(1). So an astronomer can take all the standard data analysis steps (starting from raw data to the final reduced product and standard post-reduction tools) with the various programs in Gnuastro. The maintainers of each camera or detector on a telescope can provide a completely transparent shell script or Makefile to the observer for data analysis. This script can set configuration files for all the required programs to work with that particular camera. The script can then run the proper programs in the proper sequence. The user/observer can easily follow the standard shell script to understand (and modify) each step and the parameters used easily. Bash (or other modern GNU/Linux shell scripts) are very powerful and made for this gluing job. This will simultaneously improve performance and transparency. Shell scripting (or Makefiles) are also very basic constructs that are easy to learn and readily available as part of the Unix-like operating systems. If there is no program to do a desired step, Gnuastro’s libraries can be used to build specific programs. The main factor is that all observatories or projects can freely contribute to Gnuastro and all simultaneously benefit from it (since it doesn’t belong to any particular one of them), much like how for-profit organizations (for example RedHat, or Intel and many others) are major contributors to free and open source software for their shared benefit. Gnuastro’s copyright has been fully awarded to GNU, so it doesn’t belong to any particular astronomer or astronomical facility or project. ---------- Footnotes ---------- (1)  File: gnuastro.info, Node: New to GNU/Linux?, Next: Report a bug, Prev: Version numbering, Up: Introduction 1.6 New to GNU/Linux? ===================== Some astronomers initially install and use the GNU/Linux operating systems because the software that their research community use can only be run in this environment, the transition is not necessarily easy. To encourage you in investing the patience and time to make this transition, we define the GNU/Linux system and argue for the command-line interface of scientific software and how it is worth the (apparently steep) learning curve. *note Command-line interface:: contains a short overview of the very powerful command-line user interface. *note Tutorials:: is a complete chapter with some real world example applications of Gnuastro making good use of GNU/Linux capabilities written for newcomers to this environment. It is fully explained, easy and (hopefully) entertaining. You might have already noticed that we are not using the name “Linuxâ€, but “GNU/Linuxâ€. Please take the time to have a look at the following essays and FAQs for a complete understanding of this very important distinction. In short, the Linux kernel is built using the GNU C library (glibc) and GNU compiler collection (gcc). The Linux kernel software alone is useless, in order have an operating system you need many more packages and the majority of such low-level packages in most distributions are developed as part of the GNU project: “the whole system is basically GNU with Linux loadedâ€. In the form of an analogy: to say “running Linuxâ€, is like saying “driving your carburetorâ€. • • • • * Menu: * Command-line interface:: Introduction to the command-line  File: gnuastro.info, Node: Command-line interface, Prev: New to GNU/Linux?, Up: New to GNU/Linux? 1.6.1 Command-line interface ---------------------------- One aspect of Gnuastro that might be a little troubling to new GNU/Linux users is that (at least for the time being) it only has a command-line user interface (CLI). This might be contrary to the mostly graphical user interface (GUI) experience with proprietary operating systems. To a first time user, the command-line does appear much more complicated and adapting to it might not be easy and a little frustrating at first. This is understandable and also experienced by anyone who started using the computer (from childhood) in a graphical user interface. Here we hope to convince you of the unique benefits of this interface which can greatly enhance your productivity while complementing your GUI experience. Through GNOME 3(1), most GNU/Linux based operating systems now have a very advanced and useful GUI. Since the GUI was created long after the command-line, some wrongly consider the command line to be obsolete. Both interfaces are very useful for different tasks (for example you can’t view an image, video, pdf document or web page on the command-line!), on the other hand you can’t reproduce your results easily in the GUI. Therefore they should not be regarded as rivals but as complementary user interfaces, here we will outline how the CLI can be useful in scientific programs. You can think of the GUI as a veneer over the CLI to facilitate a small subset of all the possible CLI operations. Each click you do on the GUI, can be thought of as internally running a different CLI command. So asymptotically (if a good designer can design a GUI which is able to show you all the possibilities to click on) the GUI is only as powerful as the command-line. In practice, such graphical designers are very hard to find for every program, so the GUI operations are always a subset of the internal CLI commands. For programs that are only made for the GUI, this results in not including lots of potentially useful operations. It also results in ‘interface design’ to be a crucially important part of any GUI program. Scientists don’t usually have enough resources to hire a graphical designer, also the complexity of the GUI code is far more than CLI code, which is harmful for a scientific software, see *note Science and its tools::. For programs that have a GUI, one action on the GUI (moving and clicking a mouse, or tapping a touchscreen) might be more efficient and easier than its CLI counterpart (typing the program name and your desired configuration). However, if you have to repeat that same action more than once, the GUI will soon become very frustrating and prone to errors. Unless the designers of a particular program decided to design such a system for a particular GUI action, there is no general way to run any possible series of actions automatically on the GUI. On the command-line, you can run any series of of actions which can come from various CLI capable programs you have decided your self in any possible permutation with one command(2). This allows for much more creativity and exact reproducibility that is not possible to a GUI user. For technical and scientific operations, where the same operation (using various programs) has to be done on a large set of data files, this is crucially important. It also allows exact reproducibility which is a foundation principle for scientific results. The most common CLI (which is also known as a shell) in GNU/Linux is GNU Bash, we strongly encourage you to put aside several hours and go through this beautifully explained web page: . You don’t need to read or even fully understand the whole thing, only a general knowledge of the first few chapters are enough to get you going. Since the operations in the GUI are very limited and they are visible, reading a manual is not that important in the GUI (most programs don’t even have any!). However, to give you the creative power explained above, with a CLI program, it is best if you first read the manual of any program you are using. You don’t need to memorize any details, only an understanding of the generalities is needed. Once you start working, there are more easier ways to remember a particular option or operation detail, see *note Getting help::. To experience the command-line in its full glory and not in the GUI terminal emulator, press the following keys together: (3) to access the virtual console. To return back to your GUI, press the same keys above replacing with (or , or , depending on your GNU/Linux distribution). In the virtual console, the GUI, with all its distracting colors and information, is gone. Enabling you to focus entirely on your actual work. For operations that use a lot of your system’s resources (processing a large number of large astronomical images for example), the virtual console is the place to run them. This is because the GUI is not competing with your research work for your system’s RAM and CPU. Since the virtual consoles are completely independent, you can even log out of your GUI environment to give even more of your hardware resources to the programs you are running and thus reduce the operating time. Since it uses far less system resources, the CLI is also very convenient for remote access to your computer. Using secure shell (SSH) you can log in securely to your system (similar to the virtual console) from anywhere even if the connection speeds are low. There are apps for smart phones and tablets which allow you to do this. ---------- Footnotes ---------- (1) (2) By writing a shell script and running it, for example see the tutorials in *note Tutorials::. (3) Instead of , you can use any of the keys from to for different virtual consoles depending on your GNU/Linux distribution, try them all out. You can also run a separate GUI from within this console if you want to.  File: gnuastro.info, Node: Report a bug, Next: Suggest new feature, Prev: New to GNU/Linux?, Up: Introduction 1.7 Report a bug ================ According to Wikipedia “a software bug is an error, flaw, failure, or fault in a computer program or system that causes it to produce an incorrect or unexpected result, or to behave in unintended waysâ€. So when you see that a program is crashing, not reading your input correctly, giving the wrong results, or not writing your output correctly, you have found a bug. In such cases, it is best if you report the bug to the developers. The programs will also report bugs in known impossible situations (which are caused by something unexpected) and will ask the users to report the bug. Prior to actually filing a bug report, it is best to search previous reports. The issue might have already been found and even solved. The best place to check if your bug has already been discussed is the bugs tracker on *note Gnuastro project webpage:: at . In the top search fields (under “Display Criteriaâ€) set the “Open/Closed†drop-down menu to “Any†and choose the respective program or general category of the bug in “Category†and click the “Apply†button. The results colored green have already been solved and the status of those colored in red is shown in the table. Recently corrected bugs are probably not yet publicly released because they are scheduled for the next Gnuastro stable release. If the bug is solved but not yet released and it is an urgent issue for you, you can get the version controlled source and compile that, see *note Version controlled source::. To solve the issue as readily as possible, please follow the following to guidelines in your bug report. The How to Report Bugs Effectively (http://www.chiark.greenend.org.uk/~sgtatham/bugs.html) and How To Ask Questions The Smart Way (http://catb.org/~esr/faqs/smart-questions.html) essays also provide some very good generic advice for all software (don’t contact their authors for Gnuastro’s problems). Mastering the art of giving good bug reports (like asking good questions) can greatly enhance your experience with any free and open source software. So investing the time to read through these essays will greatly reduce your frustration after you see something doesn’t work the way you feel it is supposed to for a large range of software, not just Gnuastro. *Be descriptive* Please provide as many details as possible and be very descriptive. Explain what you expected and what the output was: it might be that your expectation was wrong. Also please clearly state which sections of the Gnuastro book (this book), or other references you have studied to understand the problem. This can be useful in correcting the book (adding links to likely places where users will check). But more importantly, it will be very encouraging for the developers, since you are showing how serious you are about the problem and that you have actually put some thought into it. “To be able to ask a question clearly is two-thirds of the way to getting it answered.†– John Ruskin (1819-1900). *Individual and independent bug reports* If you have found multiple bugs, please send them as separate (and independent) bugs (as much as possible). This will significantly help us in managing and resolving them sooner. *Reproducible bug reports* If we cannot exactly reproduce your bug, then it is very hard to resolve it. So please send us a Minimal working example(1) along with the description. For example in running a program, please send us the full command-line text and the output with the ‘-P’ option, see *note Operating mode options::. If it is caused only for a certain input, also send us that input file. In case the input FITS is large, please use Crop to only crop the problematic section and make it as small as possible so it can easily be uploaded and downloaded and not waste the archive’s storage, see *note Crop::. There are generally two ways to inform us of bugs: • Send a mail to ‘bug-gnuastro@gnu.org’. Any mail you send to this address will be distributed through the bug-gnuastro mailing list(2). This is the simplest way to send us bug reports. The developers will then register the bug into the project webpage (next choice) for you. • Use the Gnuastro project webpage at : There are two ways to get to the submission page as listed below. Fill in the form as described below and submit it (see *note Gnuastro project webpage:: for more on the project webpage). • Using the top horizontal menu items, immediately under the top page title. Hovering your mouse on “Support†will open a drop-down list. Select “Submit newâ€. • In the main body of the page, under the “Communication tools†section, click on “Submit new itemâ€. Once the items have been registered in the mailing list or webpage, the developers will add it to either the “Bug Tracker†or “Task Manager†trackers of the Gnuastro project webpage. These two trackers can only be edited by the Gnuastro project developers, but they can be browsed by anyone, so you can follow the progress on your bug. You are most welcome to join us in developing Gnuastro and fixing the bug you have found maybe a good starting point. Gnuastro is designed to be easy for anyone to develop (see *note Science and its tools::) and there is a full chapter devoted to developing it: *note Developing::. ---------- Footnotes ---------- (1) (2)  File: gnuastro.info, Node: Suggest new feature, Next: Announcements, Prev: Report a bug, Up: Introduction 1.8 Suggest new feature ======================= We would always be very happy to hear of suggested new features. For every program there are already lists of features that we are planning to add. You can see the current list of plans from the Gnuastro project webpage at and following “Tasksâ€â†’“Browse†on the horizontal menu at the top of the page immediately under the title, see *note Gnuastro project webpage::. If you want to request a feature to an existing program, click on the “Display Criteria†above the list and under “Categoryâ€, choose that particular program. Under “Category†you can also see the existing suggestions for new programs or other cases like installation, documentation or libraries. Also be sure to set the “Open/Closed†value to “Anyâ€. If the feature you want to suggest is not already listed in the task manager, then follow the steps that are fully described in *note Report a bug::. Please have in mind that the developers are all very busy with their own astronomical research, and implementing existing “taskâ€s to add or resolving bugs. Gnuastro is a volunteer effort and none of the developers are paid for their hard work. So, although we will try our best, please don’t not expect that your suggested feature be immediately included (with the next release of Gnuastro). The best person to apply the exciting new feature you have in mind is you, since you have the motivation and need. In fact Gnuastro is designed for making it as easy as possible for you to hack into it (add new features, change existing ones and so on), see *note Science and its tools::. Please have a look at the chapter devoted to developing (*note Developing::) and start applying your desired feature. Once you have added it, you can use it for your own work and if you feel you want others to benefit from your work, you can request for it to become part of Gnuastro. You can then join the developers and start maintaining your own part of Gnuastro. If you choose to take this path of action please contact us before hand (*note Report a bug::) so we can avoid possible duplicate activities and get interested people in contact. *Gnuastro is a collection of low level programs:* As described in *note Program design philosophy::, a founding principle of Gnuastro is that each library or program should be very basic and low-level. High level jobs should be done by running the separate programs or using separate functions in succession through a shell script or calling the libraries by higher level functions, see the examples in *note Tutorials::. So when making the suggestions please consider how your desired job can best be broken into separate steps and modularized.  File: gnuastro.info, Node: Announcements, Next: Conventions, Prev: Suggest new feature, Up: Introduction 1.9 Announcements ================= Gnuastro has a dedicated mailing list for making announcements. Anyone that is interested can subscribe to this mailing list to stay up to date with new releases or when the dependencies (see *note Dependencies::) have been updated. To subscribe to this list, please visit .  File: gnuastro.info, Node: Conventions, Next: Acknowledgments, Prev: Announcements, Up: Introduction 1.10 Conventions ================ In this book we have the following conventions: • All commands that are to be run on the shell (command-line) prompt as the user start with a ‘$’. In case they must be run as a super-user or system administrator, they will start with a single ‘#’. If the command is in a separate line and next line ‘is also in the code type face’, but doesn’t have any of the ‘$’ or ‘#’ signs, then it is the output of the command after it is run. As a user, you don’t need to type those lines. A line that starts with ‘##’ is just a comment for explaining the command to a human reader and must not be typed. • If the command becomes larger than the page width a <\> is inserted in the code. If you are typing the code by hand on the command-line, you don’t need to use multiple lines or add the extra space characters, so you can omit them. If you want to copy and paste these examples (highly discouraged!) then the <\> should stay. The <\> character is a shell escape character which is used commonly to make characters which have special meaning for the shell loose that special place (the shell will not treat them specially if there is a <\> behind them). When it is a last character in a line (the next character is a new-line character) the new-line character looses its meaning an the shell sees it as a simple white-space character, enabling you to use multiple lines to write your commands.  File: gnuastro.info, Node: Acknowledgments, Prev: Conventions, Up: Introduction 1.11 Acknowledgments ==================== The list of Gnuastro authors is available at the start of this book and the ‘AUTHORS’ file in the source code. Here the authors wish to gratefully acknowledge the help and support they received from other people and institutions who had an indirect (not committed in the version controlled history) role in Gnuastro. The plain text file ‘THANKS’ which is distributed along with the source code also contains this list. The Japanese Ministry of Science and Technology (MEXT) scholarship for Mohammad Akhlaghi’s Masters and PhD period in Tohoku University Astronomical Institute had an instrumental role in the long term learning and planning that made the idea of Gnuastro possible. The very critical view points of Professor Takashi Ichikawa (Mohammad’s adviser) were also instrumental in the initial ideas and creation of Gnuastro. The European Research Council (ERC) advanced grant 339659-MUSICOS (Principal investigator: Roland Bacon) was vital in the growth and expansion of Gnuastro, enabling a thorough re-write of the core functionality of all libraries and programs, turning Gnuastro into the large collection of generic programs and libraries it is today. In general, we would like to gratefully thank the following people for their useful and constructive comments and suggestions (in alphabetical order by family name): Marjan Akbari, Roland Bacon, Karl Berry, Leindert Boogaard, Nicolas Bouché, Fernando Buitrago, Adrian Bunk, Rosa Calvi, Benjamin Clement, Antonio Diaz Diaz, Thérèse Godefroy, Madusha Gunawardhana, Stephen Hamer, Takashi Ichikawa, Raúl Infante Sainz, Brandon Invergo, Aurélien Jarno, Lee Kelvin, Mohammad-Reza Khellat, Floriane Leclercq, Alan Lefor, Guillaume Mahler, Francesco Montanari, William Pence, Bob Proulx, Yahya Sefidbakht, Alejandro Serrano Borlaff, Lee Spitler, Richard Stallman, Ole Streicher, Alfred M. Szmidt, Ignacio Trujillo, David Valls-Gabaud and Christopher Willmer. The GNU French Translation Team is also managing the French version of the top Gnuastro webpage which we highly appreciate. Finally we should thank all the (sometimes anonymous) people in various online forums which patiently answered all our small (but important) technical questions. All work on Gnuastro has been voluntary, but the authors are most grateful to the following institutions (in chronological order) for hosting us in our research: Ministry of education, culture, sports, science and technology (MEXT), Japan. Tohoku University Astronomical Institute, Sendai, Japan. University of Salento, Lecce, Italy. Centre national de la recherche scientifique (CNRS), France. Centre de Recherche Astrophysique de Lyon, University of Lyon 1, France.  File: gnuastro.info, Node: Tutorials, Next: Installation, Prev: Introduction, Up: Top 2 Tutorials *********** In this chapter we give several tutorials or cookbooks on how to use the various tools in Gnuastro for your scientific purposes. In these tutorials, we have intentionally avoided too many cross references to make it more easily readable. To get more information about a particular program, you can visit the section with the same name as the program in this book. Each program section starts by explaining the general concepts behind what it does. If you only want to see an explanation of the options and arguments of any program, see the subsection titled ‘Invoking ProgramName’. See *note Conventions::, for an explanation of the conventions we use in the example codes through the book. The tutorials in this section use a fictional setting of some historical figures in the history of astronomy. We have tried to show how Gnuastro would have been helpful for them in making their discoveries if there were GNU/Linux computers in their times! Please excuse us for any historical inaccuracy, this is not intended to be a historical reference. This form of presentation can make the tutorials more pleasant and entertaining to read while also being more practical (explaining from a user’s point of view)(1). The main reference for the historical facts mentioned in these fictional settings was Wikipedia. * Menu: * Hubble visually checks and classifies his catalog:: Check a catalog. * Sufi simulates a detection:: Simulating a detection. * General program usage tutorial:: Usage of all programs in a good way. ---------- Footnotes ---------- (1) This form of presenting a tutorial was influenced by the PGF/TikZ and Beamer manuals. The first provides graphic capabilities, while with the second you can make presentation slides in TeX and LaTeX. In these manuals, Till Tantau (author of the manual) uses Euclid as the protagonist. There are also some nice words of wisdom for Unix-like systems called “Rootless Rootâ€: . These also have a similar style but they use a mythical figure named Master Foo. If you already have some experience in Unix-like systems, you will definitely find these “Unix Koans†very entertaining.  File: gnuastro.info, Node: Hubble visually checks and classifies his catalog, Next: Sufi simulates a detection, Prev: Tutorials, Up: Tutorials 2.1 Hubble visually checks and classifies his catalog ===================================================== In 1924 Hubble(1) announced his discovery that some of the known nebulous objects are too distant to be within the the Milky Way (or Galaxy) and that they were probably distant Galaxies(2) in their own right. He had also used them to show that the redshift of the nebulae increases with their distance. So now he wants to study them more accurately to see what they actually are. Since they are nebulous or amorphous, they can’t be modeled (like stars that are always a point) easily. So there is no better way to distinguish them than to visually inspect them and see if it is possible to classify these nebulae or not. Hubble has stored all the FITS images of the objects he wants to visually inspect in his ‘/mnt/data/images’ directory. He has also stored his catalog of extra-galactic nebulae in ‘/mnt/data/catalogs/extragalactic.txt’. Any normal user on his GNU/Linux system (including himself) only has read access to the contents of the ‘/mnt/data’ directory. He has done this by running this command as root: # chmod -R 755 /mnt/data Hubble has done this intentionally to avoid mistakenly deleting or modifying the valuable images he has taken at Mount Wilson while he is working as an ordinary user. Retaking all those images and data is simply not an option. In fact they are also in another hard disk (‘/dev/sdb1’). So if the hard disk which stores his GNU/Linux distribution suddenly malfunctions due to work load, his data is not in harms way. That hard disk is only mounted to this directory when he wants to use it with the command: # mount /dev/sdb1 /mnt/data In short, Hubble wants to keep his data safe and fortunately by default Gnuastro allows for this. Hubble creates a temporary ‘visualcheck’ directory in his home directory for this check. He runs the following commands to make the directory and change to it(3): $ mkdir ~/visualcheck $ cd ~/visualcheck $ pwd /home/edwin/visualcheck $ ls Hubble has multiple images in ‘/mnt/data/images’, some of his targets might be on the edges of an image and so several images need to be stitched to give a good view of them. Also his extra-galactic targets belong to various pointings in the sky, so they are not in one large image. Gnuastro’s Crop is just the program he wants. The catalog in ‘extragalactic.txt’ is a plain text file which stores the basic information of all his known 200 extra-galactic nebulae. In its second column it has each object’s Right Ascension (the first column is a label he has given to each object) and in the third the object’s declination. $ astcrop --coordcol=2 --coordcol=3 /mnt/data/images/*.fits \ --mode=wcs /mnt/data/catalogs/extragalactic.txt Crop started on Tue Jun 14 10:18:11 1932 ---- ./4_crop.fits 1 1 ---- ./2_crop.fits 1 1 ---- ./1_crop.fits 1 1 [[[ Truncated middle of list ]]] ---- ./198_crop.fits 1 1 ---- ./195_crop.fits 1 1 - 200 images created. - 200 were filled in the center. - 0 used more than one input. Crop finished in: 2.429401 (seconds) Hubble already knows that thread allocation to the the CPU cores is asynchronous. Hence each time you run it, the order of which job gets done first differs. When using Crop the order of outputs is irrelevant since each crop is independent of the rest. This is why the crops are not necessarily created in the same input order. He is satisfied with the default width of the outputs (which he inspected by running ‘$ astcrop -P’). If he wanted a different width for the cropped images, he could do that with the ‘--wwidth’ option which accepts a value in arc-seconds. When he lists the contents of the directory again he finds his 200 objects as separate FITS images. $ ls 1_crop.fits 2_crop.fits ... 200_crop.fits The FITS image format was not designed for efficient/fast viewing, but mainly for accurate storing of the data. So he chooses to convert the cropped images to a more common image format to view them more quickly and easily through standard image viewers (which load much faster than FITS image viewer). JPEG is one of the most recognized image formats that is supported by most image viewers. Fortunately Gnuastro has just such a tool to convert various types of file types to and from each other: ConvertType. Hubble has already heard of GNU Parallel from one of his colleagues at Mount Wilson Observatory. It allows multiple instances of a command to be run simultaneously on the system, so he uses it in conjunction with ConvertType to convert all the images to JPEG. $ parallel astconvertt -ojpg ::: *_crop.fits For his graphical user interface Hubble is using GNOME which is the default in most distributions in GNU/Linux. The basic image viewer in GNOME is the Eye of GNOME, which has the executable file name ‘eog’ (4). Since he has used it before, he knows that once it opens an image, he can use the or keys on the keyboard to go to the next image in the directory or the key to go the previous image. So he opens the image of the first object with the command below and with his cup of coffee in his other hand, he flips through his targets very fast to get a good initial impression of the morphologies of these extra-galactic nebulae. $ eog 1_crop.jpg Hubble’s cup of coffee is now finished and he also got a nice general impression of the shapes of the nebulae. He tentatively/mentally classified the objects into three classes while doing the visual inspection. One group of the nebulae have a very simple elliptical shape and seem to have no internal special structure, so he gives them code 1. Another clearly different class are those which have spiral arms which he associates with code 2 and finally there seems to be a class of nebulae in between which appear to have a disk but no spiral arms, he gives them code 3. Now he wants to know how many of the nebulae in his extra-galactic sample are within each class. Repeating the same process above and writing the results on paper is very time consuming and prone to errors. Fortunately Hubble knows the basics of GNU Bash shell programming, so he writes the following short script with a loop to help him with the job. After all, computers are made for us to operate and knowing basic shell programming gives Hubble this ability to creatively operate the computer as he wants. So using GNU Emacs(5) (his favorite text editor) he puts the following text in a file named ‘classify.sh’. for name in *.jpg do eog $name & processid=$! echo -n "$name belongs to class: " read class echo $name $class >> classified.txt kill $processid done Fortunately GNU Emacs or even simpler editors like Gedit (part of the GNOME graphical user interface) will display the variables and shell constructs in different colors which can really help in understanding the script. Put simply, the ‘for’ loop gets the name of each JPEG file in the directory this script is run in and puts it in ‘name’. In the shell, the value of a variable is used by putting a ‘$’ sign before the variable name. Then Eye of GNOME is run on the image in the background to show him that image and its process ID is saved internally (this is necessary to close Eye of GNOME later). The shell then prompts the user to specify a class and after saving it in ‘class’, it prints the file name and the given class in the next line of a file named ‘classified.txt’. To make the script executable (so he can run it later any time he wants) he runs: $ chmod +x classify.sh Now he is ready to do the classification, so he runs the script: $ ./classify.sh In the end he can delete all the JPEG and FITS files along with Crop’s log file with the following short command. The only files remaining are the script and the result of the classification. $ rm *.jpg *.fits astcrop.txt $ ls classified.txt classify.sh He can now use ‘classified.txt’ as input to a plotting program to plot the histogram of the classes and start making interpretations about what these nebulous objects that are outside of the Galaxy are. ---------- Footnotes ---------- (1) Edwin Powell Hubble (1889 – 1953 A.D.) was an American astronomer who can be considered as the father of extra-galactic astronomy, by proving that some nebulae are too distant to be within the Galaxy. He then went on to show that the universe appears to expand and also done a visual classification of the galaxies that is known as the Hubble fork. (2) Note that at that time, “Galaxy†was a proper noun used to refer to the Milky way. The concept of a galaxy as we define it today had not yet become common. Hubble played a major role in creating today’s concept of a galaxy. (3) The ‘pwd’ command is short for “Print Working Directory†and ‘ls’ is short for “list†which shows the contents of a directory. (4) Eye of GNOME is only available for users of the GNOME graphical desktop environment which is the default in most GNU/Linux distributions. If you use another graphical desktop environment, replace ‘eog’ with any other image viewer. (5) This can be done with any text editor  File: gnuastro.info, Node: Sufi simulates a detection, Next: General program usage tutorial, Prev: Hubble visually checks and classifies his catalog, Up: Tutorials 2.2 Sufi simulates a detection ============================== It is the year 953 A.D. and Sufi(1) is in Shiraz as a guest astronomer. He had come there to use the advanced 123 centimeter astrolabe for his studies on the Ecliptic. However, something was bothering him for a long time. While mapping the constellations, there were several non-stellar objects that he had detected in the sky, one of them was in the Andromeda constellation. During a trip he had to Yemen, Sufi had seen another such object in the southern skies looking over the Indian ocean. He wasn’t sure if such cloud-like non-stellar objects (which he was the first to call ‘SahÄbi’ in Arabic or ‘nebulous’) were real astronomical objects or if they were only the result of some bias in his observations. Could such diffuse objects actually be detected at all with his detection technique? He still had a few hours left until nightfall (when he would continue his studies on the ecliptic) so he decided to find an answer to this question. He had thoroughly studied Claudius Ptolemy’s (90 – 168 A.D) Almagest and had made lots of corrections to it, in particular in measuring the brightness. Using his same experience, he was able to measure a magnitude for the objects and wanted to simulate his observation to see if a simulated object with the same brightness and size could be detected in a simulated noise with the same detection technique. The general outline of the steps he wants to take are: 1. Make some mock profiles in an oversampled image. The initial mock image has to be oversampled prior to convolution or other forms of transformation in the image. Through his experiences, Sufi knew that this is because the image of heavenly bodies is actually transformed by the atmosphere or other sources outside the atmosphere (for example gravitational lenses) prior to being sampled on an image. Since that transformation occurs on a continuous grid, to best approximate it, he should do all the work on a finer pixel grid. In the end he can re-sample the result to the initially desired grid size. 2. Convolve the image with a PSF image that is oversampled to the same value as the mock image. Since he wants to finish in a reasonable time and the PSF kernel will be very large due to oversampling, he has to use frequency domain convolution which has the side effect of dimming the edges of the image. So in the first step above he also has to build the image to be larger by at least half the width of the PSF convolution kernel on each edge. 3. With all the transformations complete, the image should be re-sampled to the same size of the pixels in his detector. 4. He should remove those extra pixels on all edges to remove frequency domain convolution artifacts in the final product. 5. He should add noise to the (until now, noise-less) mock image. After all, all observations have noise associated with them. Fortunately Sufi had heard of GNU Astronomy Utilities from a colleague in Isfahan (where he worked) and had installed it on his computer a year before. It had tools to do all the steps above. He had used MakeProfiles before, but wasn’t sure which columns he had chosen in his user or system wide configuration files for which parameters, see *note Configuration files::. So to start his simulation, Sufi runs MakeProfiles with the ‘-P’ option to make sure what columns in a catalog MakeProfiles currently recognizes and the output image parameters. In particular, Sufi is interested in the recognized columns (shown below). $ astmkprof -P [[[ ... Truncated lines ... ]]] # Output: type float32 # Type of output: e.g., int16, float32, etc... naxis 1000,1000 # Number of pixels along first FITS axis. oversample 5 # Scale of oversampling (>0 and odd). [[[ ... Truncated lines ... ]]] # Columns, by info (see `--searchin'), or number (starting from 1): ccol 2 # Center along first FITS axis (horizontal). ccol 3 # Center along second FITS axis (vertical). fcol 4 # sersic (1), moffat (2), gaussian (3), # point (4), flat (5), circumference (6). rcol 5 # Effective radius or FWHM in pixels. ncol 6 # Sersic index or Moffat beta. pcol 7 # Position angle. qcol 8 # Axis ratio. mcol 9 # Magnitude. tcol 10 # Truncation in units of radius or pixels. [[[ ... Truncated lines ... ]]] In Gnuastro, column counting starts from 1, so the columns are ordered such that the first column (number 1) can be an ID he specifies for each object (and MakeProfiles ignores), each subsequent column is used used for another property of the profile. It is also possible to use column names for the values of these options and change these defaults, but Sufi preferred to stick to the defaults. Fortunately MakeProfiles has the capability to also make the PSF which is to be used on the mock image and using the ‘--prepforconv’ option, he can also make the mock image to be larger by the correct amount and all the sources to be shifted by the correct amount. For his initial check he decides to simulate the nebula in the Andromeda constellation. The night he was observing, the PSF had roughly a FWHM of about 5 pixels, so as the first row (profile), he defines the PSF parameters and sets the radius column (‘rcol’ above, fifth column) to ‘5.000’, he also chooses a Moffat function for its functional form. Remembering how diffuse the nebula in the Andromeda constellation was, he decides to simulate it with a mock Sérsic index 1.0 profile. He wants the output to be 500 pixels by 500 pixels, so he puts the mock profile in the center. Looking at his drawings of it, he decides a reasonable effective radius for it would be 40 pixels on this image pixel scale, he sets the axis ratio and position angle to approximately correct values too and finally he sets the total magnitude of the profile to 3.44 which he had accurately measured. Sufi also decides to truncate both the mock profile and PSF at 5 times the respective radius parameters. In the end he decides to put four stars on the four corners of the image at very low magnitudes as a visual scale. Using all the information above, he creates the catalog of mock profiles he wants in a file named ‘cat.txt’ (short for catalog) using his favorite text editor and stores it in a directory named ‘simulationtest’ in his home directory. [The ‘cat’ command prints the contents of a file, short for concatenation. So please copy-paste the lines after “‘cat cat.txt’†into ‘cat.txt’ when the editor opens in the steps above it, note that there are 7 lines, first one starting with <#>]: $ mkdir ~/simulationtest $ cd ~/simulationtest $ pwd /home/rahman/simulationtest $ emacs cat.txt $ ls cat.txt $ cat cat.txt # Column 4: PROFILE_NAME [,str7] Radial profile's functional name 1 0.0000 0.0000 moffat 5.000 4.765 0.0000 1.000 30.000 5.000 2 250.00 250.00 sersic 40.00 1.000 -25.00 0.400 3.4400 5.000 3 50.000 50.000 point 0.000 0.000 0.0000 0.000 9.0000 0.000 4 450.00 50.000 point 0.000 0.000 0.0000 0.000 9.2500 0.000 5 50.000 450.00 point 0.000 0.000 0.0000 0.000 9.5000 0.000 6 450.00 450.00 point 0.000 0.000 0.0000 0.000 9.7500 0.000 The zero-point magnitude for his observation was 18. Now he has all the necessary parameters and runs MakeProfiles with the following command: $ astmkprof --prepforconv --naxis=500,500 --zeropoint=18.0 cat.txt MakeProfiles started on Sat Oct 6 16:26:56 953 - 6 profiles read from cat.txt - Random number generator (RNG) type: mt19937 - Using 8 threads. ---- row 2 complete, 5 left to go ---- row 3 complete, 4 left to go ---- row 4 complete, 3 left to go ---- row 5 complete, 2 left to go ---- ./0_cat.fits created. ---- row 0 complete, 1 left to go ---- row 1 complete, 0 left to go - ./cat.fits created. 0.041651 seconds MakeProfiles finished in 0.267234 seconds $ls 0_cat.fits cat.fits cat.txt The file ‘0_cat.fits’ is the PSF Sufi had asked for and ‘cat.fits’ is the image containing the other 5 objects. The PSF is now available to him as a separate file for the convolution step. While he was preparing the catalog, one of his students approached him and was also following the steps. When he opened the image, the student was surprised to see that all the stars are only one pixel and not in the shape of the PSF as we see when we image the sky at night. So Sufi explained to him that the stars will take the shape of the PSF after convolution and this is how they would look if we didn’t have an atmosphere or an aperture when we took the image. The size of the image was also surprising for the student, instead of 500 by 500, it was 2630 by 2630 pixels. So Sufi had to explain why oversampling is very important for parts of the image where the flux change is significant over a pixel. Sufi then explained to him that after convolving we will re-sample the image to get our originally desired size. To convolve the image, Sufi ran the following command: $ astconvolve --kernel=0_cat.fits cat.fits Convolve started on Mon Apr 6 16:35:32 953 - Using 8 CPU threads. - Input: cat.fits (hdu: 1) - Kernel: 0_cat.fits (hdu: 1) - Input and Kernel images padded. 0.075541 seconds - Images converted to frequency domain. 6.728407 seconds - Multiplied in the frequency domain. 0.040659 seconds - Converted back to the spatial domain. 3.465344 seconds - Padded parts removed. 0.016767 seconds Convolve finished in: 10.422161 seconds $ls 0_cat.fits cat_convolved.fits cat.fits cat.txt When convolution finished, Sufi opened the ‘cat_convolved.fits’ file and showed the effect of convolution to his student and explained to him how a PSF with a larger FWHM would make the points even wider. With the convolved image ready, they were prepared to re-sample it to the original pixel scale Sufi had planned [from the ‘$ astmkprof -P’ command above, recall that MakeProfiles had oversampled the image by 5 times]. Sufi explained the basic concepts of warping the image to his student and ran Warp with the following command: $ astwarp --scale=1/5 --centeroncorner cat_convolved.fits Warp started on Mon Apr 6 16:51:59 953 Using 8 CPU threads. Input: cat_convolved.fits (hdu: 1) matrix: 0.2000 0.0000 0.4000 0.0000 0.2000 0.4000 0.0000 0.0000 1.0000 $ ls 0_cat.fits cat_convolved_scaled.fits cat.txt cat_convolved.fits cat.fits $ astfits -p cat_convolved_scaled.fits | grep NAXIS NAXIS = 2 / number of data axes NAXIS1 = 526 / length of data axis 1 NAXIS2 = 526 / length of data axis 2 ‘cat_convolved_warped.fits’ now has the correct pixel scale. However, the image is still larger than what we had wanted, it is 526 ($500+13+13$) by 526 pixels. The student is slightly confused, so Sufi also resamples the PSF with the same scale and shows him that it is 27 ($2\times13+1$) by 27 pixels. Sufi goes on to explain how frequency space convolution will dim the edges and that is why he added the ‘--prepforconv’ option to MakeProfiles, see *note If convolving afterwards::. Now that convolution is done, Sufi can remove those extra pixels using Crop with the command below. Crop’s ‘--section’ option accepts coordinates inclusively and counting from 1 (according to the FITS standard), so the crop’s first pixel has to be 14, not 13. $ astcrop cat_convolved_scaled.fits --section=14:*-13,14:*-13 \ --zeroisnotblank Crop started on Sat Oct 6 17:03:24 953 - Read metadata of 1 image. 0.001304 seconds ---- ...nvolved_scaled_cropped.fits created: 1 input. Crop finished in: 0.027204 seconds $ls 0_cat.fits cat_convolved_scaled_cropped.fits cat.fits cat_convolved.fits cat_convolved_scaled.fits cat.txt Finally, ‘cat_convolved_scaled_cropped.fits’ has the same dimensions as Sufi had desired in the beginning. All this trouble was certainly worth it because now there is no dimming on the edges of the image and the profile centers are more accurately sampled. The final step to simulate a real observation would be to add noise to the image. Sufi set the zeropoint magnitude to the same value that he set when making the mock profiles and looking again at his observation log, he had measured the background flux near the nebula had a magnitude of 7 that night. So using these values he ran MakeNoise: $ astmknoise --zeropoint=18 --background=7 --output=out.fits \ cat_convolved_warped_crop.fits MakeNoise started on Mon Apr 6 17:05:06 953 - Generator type: mt19937 - Generator seed: 1428318100 MakeNoise finished in: 0.033491 (seconds) $ls 0_cat.fits cat_convolved_scaled_cropped.fits cat.fits out.fits cat_convolved.fits cat_convolved_scaled.fits cat.txt The ‘out.fits’ file now contains the noised image of the mock catalog Sufi had asked for. Seeing how the ‘--output’ option allows the user to specify the name of the output file, the student was confused and wanted to know why Sufi hadn’t used it before? Sufi then explained to him that for intermediate steps it is best to rely on the automatic output, see *note Automatic output::. Doing so will give all the intermediate files the same basic name structure, so in the end you can simply remove them all with the Shell’s capabilities. So Sufi decided to show this to the student by making a shell script from the commands he had used before. The command-line shell has the capability to read all the separate input commands from a file. This is very useful when you want to do the same thing multiple times, with only the names of the files or minor parameters changing between the different instances. Using the shell’s history (by pressing the up keyboard key) Sufi reviewed all the commands and then he retrieved the last 5 commands with the ‘$ history 5’ command. He selected all those lines he had input and put them in a text file named ‘mymock.sh’. Then he defined the ‘edge’ and ‘base’ shell variables for easier customization later. Finally, before every command, he added some comments (lines starting with <#>) for future readability. # Basic settings: edge=13 base=cat # Remove any existing image to avoid confusion. rm out.fits # Run MakeProfiles to create an oversampled FITS image. astmkprof --prepforconv --naxis=500,500 --zeropoint=18.0 "$base".txt # Convolve the created image with the kernel. astconvolve --kernel=0_"$base".fits "$base".fits # Scale the image back to the intended resolution. astwarp --scale=1/5 --centeroncorner "$base"_convolved.fits # Crop the edges out (dimmed during convolution). `--section' accepts # inclusive coordinates, so the start of start of the section must be # one pixel larger than its end. st_edge=$(( edge + 1 )) astcrop "$base"_convolved_scaled.fits --zeroisnotblank \ --section=$st_edge:*-$edge,$st_edge:*-$edge # Add noise to the image. astmknoise --zeropoint=18 --background=7 --output=out.fits \ "$base"_convolved_scaled_cropped.fits # Remove all the temporary files. rm 0*.fits cat*.fits He used this chance to remind the student of the importance of comments in code or shell scripts: when writing the code, you have a very good mental picture of what you are doing, so writing comments might seem superfluous and excessive. However, in one month when you want to re-use the script, you have lost that mental picture and rebuilding it is can be very time-consuming and frustrating. The importance of comments is further amplified when you want to share the script with a friend/colleague. So it is very good to accompany any script/code with useful comments while you are writing it (have a good mental picture of what/why you are doing something). Sufi then explained to the eager student that you define a variable by giving it a name, followed by an ‘=’ sign and the value you want. Then you can reference that variable from anywhere in the script by calling its name with a ‘$’ prefix. So in the script whenever you see ‘$base’, the value we defined for it above is used. If you use advanced editors like GNU Emacs or even simpler ones like Gedit (part of the GNOME graphical user interface) the variables will become a different color which can really help in understanding the script. We have put all the ‘$base’ variables in double quotation marks (‘"’) so the variable name and the following text do not get mixed, the shell is going to ignore the ‘"’ after replacing the variable value. To make the script executable, Sufi ran the following command: $ chmod +x mymock.sh Then finally, Sufi ran the script, simply by calling its file name: $ ./mymock.sh After the script finished, the only file remaining is the ‘out.fits’ file that Sufi had wanted in the beginning. Sufi then explained to the student how he could run this script anywhere that he has a catalog if the script is in the same directory. The only thing the student had to modify in the script was the name of the catalog (the value of the ‘base’ variable in the start of the script) and the value to the ‘edge’ variable if he changed the PSF size. The student was also very happy to hear that he won’t need to make it executable again when he makes changes later, it will remain executable unless he explicitly changes the executable flag with ‘chmod’. The student was really excited, since now, through simple shell scripting, he could really speed up his work and run any command in any fashion he likes allowing him to be much more creative in his works. Until now he was using the graphical user interface which doesn’t have such a facility and doing repetitive things on it was really frustrating and some times he would make mistakes. So he left to go and try scripting on his own computer. Sufi could now get back to his own work and see if the simulated nebula which resembled the one in the Andromeda constellation could be detected or not. Although it was extremely faint(2), fortunately it passed his detection tests and he wrote it in the draft manuscript that would later become “Book of fixed starsâ€. He still had to check the other nebula he saw from Yemen and several other such objects, but they could wait until tomorrow (thanks to the shell script, he only has to define a new catalog). It was nearly sunset and they had to begin preparing for the night’s measurements on the ecliptic. ---------- Footnotes ---------- (1) Abd al-rahman Sufi (903 – 986 A.D.), also known in Latin as Azophi was an Iranian astronomer. His manuscript “Book of fixed stars†contains the first recorded observations of the Andromeda galaxy, the Large Magellanic Cloud and seven other non-stellar or ‘nebulous’ objects. (2) The brightness of a diffuse object is added over all its pixels to give its final magnitude, see *note Flux Brightness and magnitude::. So although the magnitude 3.44 (of the mock nebula) is orders of magnitude brighter than 6 (of the stars), the central galaxy is much fainter. Put another way, the brightness is distributed over a large area in the case of a nebula.  File: gnuastro.info, Node: General program usage tutorial, Prev: Sufi simulates a detection, Up: Tutorials 2.3 General program usage tutorial ================================== Measuring colors of astronomical objects in broad-band or narrow-band images is one of the most basic and common steps in astronomical analysis. Here, we will use Gnuastro’s programs to detect objects in a Hubble Space Telescope (HST) image and measure their colors. We will use the eXtreme Deep Field (https://archive.stsci.edu/prepds/xdf) dataset. Like almost all astronomical surveys, this dataset is free for download and usable by the public. This tutorial was first prepared for the “Exploring the Ultra-Low Surface Brightness Universe†workshop (November 2017) at the International Space Science Institute (ISSI) in Bern, Switzerland. We would like to thank them and the attendees for a very fruitful week. You will need the following tools in this tutorial: Gnuastro, SAO DS9 (1), GNU Wget(2), and AWK (most common implementation is GNU AWK(3)). *Type the example commands:* Try to type the example commands on your terminal and don’t simply copy and paste them. This will help simulate future situations when you are processing your own datasets. A handy feature of Gnuastro is that all program names start with ‘ast’. This will allow your command-line processor to easily list and auto-complete Gnuastro’s programs for you. Try typing the following command (press key when you see ‘’) to see the list: $ ast Any program that starts with ‘ast’ (including all Gnuastro programs) will be shown. By choosing the subsequent characters of your desired program and pressing <> again, the list will narrow down and the program name will auto-complete once your input characters are unambiguous. In short, you often don’t need to type the full name of the program you want to run. Gnuastro contains a large number of programs and it is natural to forget the details of each program’s options. Therefore, before starting the analysis, let’s review how you can refresh your memory any time you want on the command-line while working (without taking your hands off the keyboard). This book comes with your installation, so it will always correspond to your installed version of Gnuastro. Please see *note Info:: for more. GNU Info(4) is the program in charge of displaying the manual on the command-line. To see this whole book on your command-line, please run the following command and subsequent keys. Info has its own mini-environment, therefore we’ll show the keys that must be pressed in the mini-environment after a ‘->’ sign. You can also ignore anything after the ‘#’ sign in the middle of the line, they are only for your information. $ info gnuastro # Open the top of the manual. -> # All the book chapters. -> # Continue down: show sections. -> ... # Keep pressing space to go down. -> q # Quit Info, return to the command-line. The thing that greatly simplifies navigation in Info is the links (regions with an underline). You can immediately go to the next link in the page with the <> key and press <> on it to go into that part of the manual. Try the commands above again, but this time also use <> to go to the links and press <> on them to go to the respective section of the book. Then follow a few more links and go deeper into the book. To return to the previous page, press (small L). If you are searching for a specific phrase in the whole book (for example an option name), press and type your search phrase and end it with an <>. You don’t need to start from the top of the manual every time. For example, to get to *note Invoking astnoisechisel::, run the following command. In general, all programs have such an “Invoking ProgramName†section in this book. These sections are specifically for the description of inputs, outputs and configuration options of each program. You can access them directly for each program by giving its executable name to Info. $ info astnoisechisel The other sections don’t have such shortcuts. To directly access them from the command-line, you need to tell Info to look into Gnuastro’s manual, then look for the specific section (an unambiguous title is necessary). For example, if you only want to review/remember NoiseChisel’s *note Detection options:: or *note Segmentation options::), just run any of these commands. Note how case is irrelevant for Info when calling a title in this manner. $ info gnuastro "Detection options" $ info gnuastro "segmentation options" In general, Info is a wonderful and powerful way to access this whole book with detailed information about the programs you are running very fast. If you are not already familiar with it, please run the following command and just read along and do what it says to learn it. Don’t stop until you feel have become sufficiently fluent in it. Please invest the half an hour’s time necessary to start using Info comfortably. It will greatly improve your productivity and you will start reaping the rewards of this investment very soon. $ info info As a good scientist you need to feel comfortable to play with the features/options and avoid (be critical to) using default values as much as possible. On the other hand, our human memory is very limited, so it is important to be able to easily access any part of this book fast and remember the option names, what they do and their acceptable values. If you just want the option names and a short description, calling the program with the ‘--help’ option might also be a good solution like the first example below. If you know a few characters of the option name, you can feed the output to ‘grep’ like the second or third example commands. $ astnoisechisel --help $ astnoisechisel --help | grep quant $ astnoisechisel --help | grep check Let’s start the processing. First, to keep things clean, let’s create a ‘gnuastro-tutorial’ directory and continue all future steps in it: $ mkdir gnuastro-tutorial $ cd gnuastro-tutorial We will be using the near infra-red Wide Field Camera (http://www.stsci.edu/hst/wfc3) dataset. If you already have them in another directory (for example ‘XDFDIR’), you can set the ‘download’ directory to be a symbolic link to ‘XDFDIR’ with a command like this: ln -s XDFDIR download If the following images aren’t already present on your system, you can make a ‘download’ directory and download them there. $ mkdir download $ cd download $ xdfurl=http://archive.stsci.edu/pub/hlsp/xdf $ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_f105w_v1_sci.fits $ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits $ cd .. In this tutorial, we’ll just use these two filters. Later, you will probably need to download more filters, you can use the shell’s ‘for’ loop to download them all in series (one after the other(5)) with one command like the one below for the WFC3 filters. Put this command instead of the two ‘wget’ commands above. Recall that all the extra spaces, back-slashes (‘\’), and new lines can be ignored if you are typing on the lines on the terminal. $ for f in f105w f125w f140w f160w; do \ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_"$f"_v1_sci.fits; \ done First, let’s visually inspect the dataset. Let’s take F160W image as an example. Do the steps below with the other image(s) too (and later with any dataset that you want to work on). It is very important to understand your dataset visually. Note how ds9 doesn’t follow the GNU style of options where “long†and “short†options are preceded by ‘--’ and ‘-’ respectively (for example ‘--width’ and ‘-w’, see *note Options::). Ds9’s ‘-zscale’ option is a good scaling to highlight the low surface brightness regions, and as the name suggests, ‘-zoom to fit’ will fit the whole dataset in the window. If the window is too small, expand it with your mouse, then press the “zoom†button on the top row of buttons above the image, then in the row below it, press “zoom fitâ€. You can also zoom in and out by scrolling your mouse or the respective operation on your touch-pad when your cursor/pointer is over the image. $ ds9 download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits \ -zscale -zoom to fit The first thing you might notice is that the regions with no data have a value of zero in this image. The next thing might be that the dataset actually has two “depthâ€s (see *note Quantifying measurement limits::). The exposure time of the inner region is more than 4 times more than the outer parts. Fortunately the XDF survey webpage (above) contains the vertices of the deep flat WFC3-IR field. You can use those vertices in *note Crop:: to cutout this deep infra-red region from the larger image. We’ll make a directory called ‘flat-ir’ and keep the flat infra-red regions in that directory (with a ‘‘xdf-’’ suffix for a shorter and easier filename). $ mkdir flat-ir $ astcrop --mode=wcs -h0 --output=flat-ir/xdf-f105w.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f105w_v1_sci.fits $ astcrop --mode=wcs -h0 --output=flat-ir/xdf-f160w.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits The only thing varying in the two calls to Gnuastro’s Crop program is the filter name. Therefore, to simplify the command, and later allow work on more filters, we can use the shell’s ‘for’ loop. Notice how the two places where the filter names (‘f105w’ and ‘f160w’) are used above have been replaced with ‘$f’ (the shell variable that ‘for’ is in charge of setting) below. To generalize this for more filters later, you can simply add the other filter names in the first line before the semi-colon (‘;’). $ for f in f105w f160w; do \ astcrop --mode=wcs -h0 --output=flat-ir/xdf-$f.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_"$f"_v1_sci.fits; \ done Please open these images and inspect them with the same ds9 commands you used above. You will see how it is completely flat now and doesn’t have varying depths. Another important result of this crop is that regions with no data now have a NaN (blank) value, not zero. Zero is a meaningful value and especially when using NoiseChisel, the input should have NaN values for pixels with no data, not zero. This is the deepest image we currently have of the sky. The first thing that comes to mind may be this: “How large is this field?â€. Let’s find the answer to this question with the commands below. The lines starting with ‘##’ are just comments for you to help in following the steps. Don’t type them on the terminal. The commands are intentionally repetitive in some places to better understand each step and also to demonstrate the beauty of command-line features like variables, pipes and loops. Later, if you would like to repeat this process on another dataset, you can just use commands 3, 7, and 9. *Use shell history:* Don’t forget to make effective use of your shell’s history. This is especially convenient when you just want to make a small change to your previous command. Press the “up†key on your keyboard (possibly multiple times) to see your previous command(s). ## (1) See the general statistics of non-blank pixel values. $ aststatistics flat-ir/xdf-f160w.fits ## (2) We only want the number of non-blank pixels. $ aststatistics flat-ir/xdf-f160w.fits --number ## (3) Keep the result of the command above in the shell variable `n'. $ n=$(aststatistics flat-ir/xdf-f160w.fits --number) ## (4) See what is stored the shell variable `n'. $ echo $n ## (5) Show all the FITS keywords of this image. $ astfits flat-ir/xdf-f160w.fits -h1 ## (6) The resolution (in degrees/pixel) is in the `CDELT' keywords. ## Only show lines that contain these characters, by feeding ## the output of the previous command to the `grep' program. $ astfits flat-ir/xdf-f160w.fits -h1 | grep CDELT ## (7) Save the resolution (same in both dimensions) in the variable ## `r'. The last part uses AWK to print the third `field' of its ## input line. The first two fields were `CDELT1' and `='. $ r=$(astfits flat-ir/xdf-f160w.fits -h1 | grep CDELT1 \ | awk '{print $3}') ## (8) Print the values of `n' and `r'. $ echo $n $r ## (9) Use the number of pixels (first number passed to AWK) and ## length of each pixel's edge (second number passed to AWK) ## to estimate the area of the field in arc-minutes squared. $ area=(echo $n $r | awk '{print $1 * ($2^2) * 3600}') The area of this field is 4.03817 (or 4.04) arc-minutes squared. Just for comparison, this is roughly 175 times smaller than the average moon’s angular area (with a diameter of 30arc-minutes or half a degree). *AWK for table/value processing:* AWK is a powerful and simple tool for text processing. Above (and further below) some simple examples are shown. GNU AWK (the most common implementation) comes with a free and wonderful book (https://www.gnu.org/software/gawk/manual/) in the same format as this book which will allow you to master it nicely. Just like this manual, you can also access GNU AWK’s manual on the command-line whenever necessary without taking your hands off the keyboard as described above. This takes us to the second question that you have probably asked yourself when you saw the field for the first time: “How large is this area at different redshifts?â€. To get a feeling of the tangential area that this field covers at redshift 2, you can use *note CosmicCalculator::. In particular, you need the tangential distance covered by 1 arc-second as raw output. Combined with the field’s area, we can then calculate the tangential distance in Mega Parsecs squared ($Mpc^2$). ## Print general cosmological properties at redshift 2. $ astcosmiccal -z2 ## When given a "Specific calculation" option, CosmicCalculator ## will just print that particular calculation. See the options ## under this title in the output of `--help' for more. $ astcosmiccal --help ## Only print the "Tangential dist. covered by 1arcsec at z (kpc)". ## in units of kpc/arc-seconds. $ astcosmiccal -z2 --arcsectandist ## Convert this distance to kpc^2/arcmin^2 and save in `k'. $ k=$(astcosmiccal -z2 --arcsectandist | awk '{print ($1*60)^2}') ## Multiply by the area of the field (in arcmin^2) and divide by ## 10^6 to return value in Mpc^2. $ echo $k $area | awk '{print $1 * $2 / 1e6}' At redshift 2, this field therefore covers 1.07145 $Mpc^2$. If you would like to see how this tangential area changes with redshift, you can use a shell loop like below. $ for z in 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0; do \ k=$(astcosmiccal -z$z --arcsectandist); \ echo $z $k $area | awk '{print $1, ($2*60)^2 * $3 / 1e6}'; \ done Fortunately, the shell has a very useful tool/program to print a sequence of numbers that is nicely called ‘seq’. You can use it instead of typing all the different redshifts in this example. For example the loop below will print the same range of redshifts (between 0.5 and 5) but with increments of 0.1. $ for z in $(seq 0.5 0.1 5); do \ k=$(astcosmiccal -z$z --arcsectandist); \ echo $z $k $area | awk '{print $1, ($2*60)^2 * $3 / 1e6}'; \ done If you want a fast result and commonly need such processing for a larger number of redshifts, the command above can be slow. This is because the CosmicCalculator program has a lot of overhead: it has to parse the command-line and all configuration files (see below). These are both human-readable characters, not computer-readable bits. CosmicCalculator then has to check the sanity of its inputs and check which of its many options you have asked for. It has to do all of these for every redshift. To greatly speed up the processing, Gnuastro gives you direct access to the root work-horse of CosmicCalculator without all that overhead: *note Gnuastro library::. Using Gnuastro’s library, you can write your own tiny little program for this same calculation, without all that extra overhead of CosmicCalculator (or any of Gnuastro’s programs, see *note Library::). For this particular job, you want Gnuastro’s *note Cosmology library::. Here is one example: put the following small C program in a file called ‘myprogram.c’. #include #include #include #include int main(void) { double area=4.03817; /* Area of field (arcmin^2). */ double z, adist, tandist; /* Temporary variables. */ /* Constants from Plank 2015 (Paper XIII, A&A 594, 2016) */ double H0=67.74, olambda=0.6911, omatter=0.3089, oradiation=0; /* Do the same thing for all redshifts (z) between 0.1 and 5. */ for(z=0.1; z<5; z+=0.1) { /* Calculate the angular diameter distance. */ adist=gal_cosmology_angular_distance(z, H0, olambda, omatter, oradiation); /* Calculate the tangential distance of one arcsecond. */ tandist = adist * 1000 * M_PI / 3600 / 180; /* Print the redshift and area. */ printf("%-5.2f %g\n", z, pow(tandist * 60,2) * area / 1e6); } /* Tell the system that everything finished successfully. */ return EXIT_SUCCESS; } To build and run this C program, you can use *note BuildProgram::. It is designed to manage Gnuastro’s dependencies, compile the program you give it and then run it. In short, it hides all the complexities of compiling, linking and running C programs based on Gnuastro’s library. The library will later be usable higher level languages like Python or Julia, for now it is only usable by C and C++ programs. $ astbuildprog myprogram.c See how much faster this is compared to the shell loop we wrote above? You might have noticed that a new file called ‘myprogram’ is also created in the directory. This is the compiled program that was created and run by the command above (its in binary machine code, not human-readable any more). You can run it again to get the same results with a command like this: $ ./myprogram The efficiency of ‘myprogram’ compared to CosmicCalculator is because the requested processing is faster/comparable to the overheads. For other programs that take large input datasets (images for example), the overhead is usually negligible compared to the processing. In such cases, the libraries are only useful if you want a different/new processing compared to the functionalities in Gnuastro’s existing programs. Gnuastro has a large library which all the programs use for various steps their processing. For the full list of available functions classified by context, please see *note Gnuastro library::. Gnuastro’s library and BuildProgram are created to make it easy for you to use these powerful features and get to your scientific results as efficiently (fast) and accurately as possible. Several other complete working examples (involving images and tables) of Gnuastro’s libraries can be see in *note Library demo programs::. We’ll stop with the libraries at this point in this tutorial and get back to Gnuastro’s already built programs which ready to be used on the command-line. None of Gnuastro’s programs keep a default value internally within their code. However, when you ran CosmicCalculator with the ‘-z2’ option above, it completed its processing and printed results. So where did the “default†cosmological parameter values (like the matter density and etc) come from? The values come from the command-line or a configuration file (see *note Configuration file precedence::). CosmicCalculator has a very limited set of parameters and doesn’t need any particular file inputs. Therefore, we’ll use it to discuss configuration files which are an important part of all Gnuastro’s programs (see *note Configuration files::). Once you get comfortable with configuration files, you can easily do the same for the options of all Gnuastro programs. For example, NoiseChisel has the largest number of options in the programs. Therefore configuration files will be very useful for it when you use different datasets (with different noise properties or in different research contexts). The configuration of each program (besides its version) is vital for the reproducibility of your results, so it is very important to manage them properly. As we saw above, the full list of the options in all Gnuastro programs can be seen with the ‘--help’ option. Try calling it with CosmicCalculator as shown below. Note how options are grouped by context to make it easier to find your desired option. However, in each group, options are ordered alphabetically. $ astcosmiccal --help The options that need a value have an <=> sign after their long version and ‘FLT’, ‘INT’ or ‘STR’ for floating point numbers, integer numbers and strings (filenames for example) respectively. All options have a long format and some have a short format (a single character), for more see *note Options::. When you are using a program, it is often necessary to check the value the option has just before the program starts its processing. In other words, after it has parsed the command-line options and all configuration files. You can see the values of all options that need one with the ‘--printparams’ or ‘-P’ option that is common to all programs (see *note Common options::). In the command below, try replacing ‘-P’ with ‘--printparams’ to see how both do the same operation. $ astcosmiccal -P Let’s say you want a different Hubble constant. Try running the following command to see how the Hubble constant in the output of the command above has changed. Afterwards, delete the ‘-P’ and add a ‘-z2’ to see the results with the new cosmology (or configuration). $ astcosmiccal -P --H0=70 From the output of the ‘--help’ option, note how the option for Hubble constant has both short (‘-H’) and long (‘--H0’) formats. One final note is that the equal (<=>) sign is not mandatory. In the short format, the value can stick to the actual option (the short option name is just one character after-all and thus easily identifiable) and in the long format, a white-space character is also enough. $ astcosmiccal -H70 -z2 $ astcosmiccal --H0 70 -z2 --arcsectandisk Let’s assume that in one project, you want to only use rounded cosmological parameters (H0 of 70km/s/Mpc and matter density of 0.3). You should therefore run CosmicCalculator like this: $ astcosmiccal --H0=70 --olambda=0.7 --omatter=0.3 -z2 But having to type these extra options every time you run CosmicCalculator will be prone to errors (typos in particular) and also will be frustrating and slow. Therefore in Gnuastro, you can put all the options and their values in a “Configuration file†and tell the programs to read the option values from there. Let’s create a configuration file. In your favorite text editor, make a file named ‘my-cosmology.conf’ (or ‘my-cosmology.txt’, the suffix doesn’t matter) which contains the following lines. One space between the option value and name is enough, the values are just under each other to help in readability. Also note that you can only use long option names in configuration files. H0 70 olambda 0.7 omatter 0.3 You can now tell CosmicCalculator to read this file for option values immediately using the ‘--config’ option as shown below. Do you see how the output of the following command corresponds to the option values in ‘my-cosmology.txt’ (previous command)? $ astcosmiccal --config=my-cosmology.conf -z2 If you need this cosmology every time you are working in a specific directory, you can benefit from Gnuastro’s default configuration files to avoid having to call the ‘--config’ option. Let’s assume that you want any CosmicCalculator call you make in the ‘my-cosmology’ directory to use these parameters. You just have to copy the above configuration file into a special directory and file: $ mkdir my-cosmology $ mkdir my-cosmology/.gnuastro $ mv my-cosmology.conf my-cosmology/.gnuastro/astcosmiccal.conf Once you run CosmicCalculator within ‘my-cosmology’ as shown below, you will see how your cosmology has been implemented without having to type anything extra on the command-line. $ cd my-cosmology $ astcosmiccal -z2 $ cd .. To further simplify the process, you can use the ‘--setdirconf’ option. If you are already in your desired directory, calling this option with the others will automatically write the final values (along with descriptions) in ‘.gnuastro/astcosmiccal.conf’. For example the commands below will make the same configuration file automatically (with one extra call to CosmicCalculator). $ mkdir my-cosmology2 $ cd my-cosmology2 $ astcosmiccal --H0 70 --olambda=0.7 --omatter=0.3 --setdirconf $ astcosmiccal -z2 $ cd .. Gnuastro’s programs also have default configuration files for a specific user (when run in any directory). This allows you to set a special behavior every time a program is run by a specific user. Only the directory and filename differ from the above, the rest of the process is similar to before. Finally, there are also system-wide configuration files that can be used to define the option values for all users on a system. See *note Configuration file precedence:: for a more detailed discussion. We are now ready to start processing the downloaded images. Since these datasets are already aligned, you don’t need to align them to make sure the pixel grid covers the same region in all inputs. Gnuastro’s Warp program has features for such pixel-grid warping (see *note Warp::). Therefore, just for a demonstration, let’s assume one image needs to be rotated by 20 degrees to correspond to the other. To do that, you can run the following command: $ astwarp flat-ir/xdf-f160w.fits --rotate=20 Open the output and see the output. If your final image is already aligned with RA and Dec, you can simply use the ‘--align’ option and let Warp calculate the necessary rotation. Warp can generally be used for any kind of pixel grid manipulation (warping). For example the outputs of the commands below will respectively have larger pixels (new resolution being one quarter the original resolution), get shifted by 2.8 (by sub-pixel), get a shear of 2, and be tilted (projected). After running each, please open the output file and see the effect. $ astwarp flat-ir/xdf-f160w.fits --scale=0.25 $ astwarp flat-ir/xdf-f160w.fits --translate=2.8 $ astwarp flat-ir/xdf-f160w.fits --shear=2 $ astwarp flat-ir/xdf-f160w.fits --project=0.001,0.0005 You can also combine multiple warps in one command. For example to first rotate the image, then scale it, run this command: $ astwarp flat-ir/xdf-f160w.fits --rotate=20 --scale=0.25 If you have multiple warps, do them all in one command. Don’t warp them in separate commands because the correlated noise will become too strong. As you see in the matrix that is printed when you run Warp, it merges all the warps into a single warping matrix (see *note Warping basics:: and *note Merging multiple warpings::) and simply applies that just once. Recall that since this is done through matrix multiplication, order matters in the separate operations. In fact through Warp’s ‘--matrix’ option, you can directly request your desired final warp and don’t have to break it up into different warps like above (see *note Invoking astwarp::). Fortunately these datasets are already aligned to the same pixel grid, so you don’t actually need the files that were just generated. You can safely delete them all with the following command. Here, you see why we put the processed outputs that we need later into a separate directory. In this way, the top directory can be used for temporary files for testing that you can simply delete with a generic command like below. $ rm *.fits To detect the objects in the image, we’ll run NoiseChisel: $ mkdir noisechisel $ astnoisechisel flat-ir/xdf-f160w.fits -onoisechisel/xdf-f160w.fits Read what NoiseChisel writes on the command-line. The curious thing you will notice is that while there were more than 3000 pseudo detections to find the pseudo-detection S/N, but there were only slightly more than 100 clumps to find the false clump S/N. We will see what caused this after a short review on the output of NoiseChisel. NoiseChisel’s output is a single file containing multiple extensions. You can get basic information about the extensions in a FITS file with Gnuastro’s Fits program (see *note Fits::) as shown below. It contains 6 extensions and the first (counted as zero) is blank (has no data). $ astfits noisechisel/xdf-f160w.fits NoiseChisel puts some general information on its outputs in the FITS header of the respective extension. To see the full list of keywords, you can again use the Fits program like above, but also give it your desired extension/HDU. You can also give the extension number (as listed in the output above), for example ‘-h2’ instead of ‘-hOBJECTS’. $ astfits noisechisel/xdf-f160w.fits -hOBJECTS The ‘NUMLABS’ keyword in NoiseChisel’s ‘OBJECTS’ extension contains the number of objects that was found by NoiseChisel in that run. Try to visually find it in the header keywords you saw above. To simplify the process, you can pipe the output of the command above into ‘grep’ (a program for matching lines which is available on almost all Unix-like operating systems). $ astfits noisechisel/xdf-f160w.fits -hOBJECTS | grep NUMLABS If you just want the value of the keyword and not the full FITS keyword line, you can use AWK. In the example below, AWK will print the third word (separated by white space characters) in any line that has a first column value of ‘NUMLABS’. You can also try this for the third HDU (called ‘CLUMPS’) to see the number of clumps. $ astfits noisechisel/xdf-f160w.fits -h2 \ | awk '$1=="NUMLABS" {print $3}' Grep and AWK are simple, but very powerful command-line software for processing text files. Learning them properly can greatly simplify your processing, while improve your creativity, productivity and speed. When you get time, it is highly recommended to master them. The most common implementation of both is from GNU. Like almost all GNU software, both GNU Grep and GNU AWK have wonderful manuals which come with the program for free. You don’t have to read the whole manual at once, they both start with great generic introductions to get you going fast. As described above, you can read both manuals or refresh your memory on your command-line with these commands: $ info awk $ info grep You can now open NoiseChisel’s output with SAO DS9 and visually inspect it. Just note that since there are multiple extensions, the easiest way to view the whole file is to open it as a “Multi-extension data cube†with the ‘-mecube’ option as shown below. If you use GNOME (another GNU software, most common graphic user interface in GNU/Linux operating systems), please see *note Viewing multiextension FITS images:: to open DS9 in multi-extension cube mode by default when using the GUI (double clicking on the file). $ ds9 -mecube noisechisel/xdf-f160w.fits -zscale -zoom to fit Using Gnuastro’s Fits program, you can also copy a HDU from one FITS file to another (for more, see *note HDU manipulation::). So if you want to have a FITS file with only the detected objects, you can run this command: $ astfits noisechisel/xdf-f160w.fits --copy=OBJECTS -oobjects.fits One good way to see if you have missed any signal is to mask all the detected pixels and inspect the noise pixels. For this, you can use Gnuastro’s Arithmetic program (in particular its ‘where’ operator as shown below, see *note Arithmetic operators::). With this command, all input pixels that have a value larger than zero in the ‘OBJECTS’ extension will be set to NaN in the output (written in ‘det-masked.fits’). If you change the ‘gt’ (for “greater thanâ€) operator to ‘eq’ (for “equalâ€), all the un-detected (sky) pixels will be masked and you can see the detections. $ astarithmetic noisechisel/xdf-f160w.fits \ noisechisel/xdf-f160w.fits 0 gt nan where -h1 -h2 \ --output=nc-masked.fits In some cases, you might want to use a different kernel with NoiseChisel (not the default one). To do that, you can use MakeProfiles (see *note MakeProfiles::) in the following manner to build a 2D Gaussian kernel with a FWHM of 3 pixels that extends 5 times the FWHM. This new kernel can later be fed into NoiseChisel with the ‘--kernel’ option. $ astmkprof --kernel=gaussian,3,5 --oversample=1 -okernel-g-3-5.fits $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel-g-3-5.fits \ --output=nc-my-kernel.fits NoiseChisel can produce “Check images†to help you visualize how each step is completed. You can see all the check images it can produce with this command. $ astnoisechisel --help | grep check The check images are also multi-extension FITS files. After each check image is produced, open it with ds9 like NoiseChisel’s output above and flip through the extensions to see each processing in detail. It is _strongly_ encouraged to play with the different parameters and use the respective check images to see which step is affected by your change. The three most useful check images are ‘--checkqthresh’, ‘--checkdetection’, and ‘--checksegmentation’. We can now get back to the curious situation we noticed after running NoiseChisel: the number of false clumps to find an S/N limit was very small (given the extent of this image). This is bad, because we use quantiles in NoiseChisel and such a small number will result in a relatively large scatter. Since this is a segmentation issue, let’s see why this happens with ‘--checksegmentation’. $ astnoisechisel flat-ir/xdf-f160w.fits --checksegmentation To help you get a result faster, when check images are requested, NoiseChisel doesn’t finish its processing (unless you also call ‘--continueaftercheck’). NoiseChisel aborts with an explanation of why it stopped without finishing and the file name of the check image that it produced. The first five extensions are: the input image, the convolved image, the initially labeled detected regions, all the sky region (false) clumps, and those that will be used for S/N. The sky clumps are found over NoiseChisel’s “large tiles†independently. When inspecting the fourth extension of the check image, it is interesting how NoiseChisel has ignored most large tiles and only used the few that we see, mostly on the edge. The reason that almost all internal large tiles are ignored is that galaxies are extended and this is a very deep (and small) image. Thanks to the PSF (see *note PSF::), no object will have a sharp truncation. We have not seen any abrupt break in the light profile of any galaxy: galaxies are always larger when we get deeper datasets. Therefore, in a noisy image, some light will always be left un-detected. To be less affected by this un-detected light, NoiseChisel has the ‘--minskyfrac’ option (see *note General NoiseChisel options::): any tile that has a larger fraction of detected pixels will be ignored. So let’s see what the default value of this option is (recall that with ‘-P’, you can list all the options with their values in Gnuastro’s programs): $ astnoisechisel -P | grep minskyfrac Try decreasing this value and re-running NoiseChisel to see the effect on the fraction of large tiles that will be used for finding false/sky clumps. Play a little with this parameter (give it different values and check the result). $ astnoisechisel flat-ir/xdf-f160w.fits --minskyfrac=0.5 \ --checksegmentation The smaller the value to ‘--minskyfrac’, the more probable that un-detected light in the wings of galaxies will bias/affect the derived false clump S/N. So it is always important to find a good balance between a larger ‘--minskyfrac’ while having a sufficient number of resulting clumps (to avoid scatter). NoiseChisel doesn’t just find the labeled pixels, it also finds the Sky value and the Sky standard deviation in the final two extensions of its output. To generate a catalog of the colors, we will be using the NoiseChisel labeled image from the F160W image. But the Sky and Sky standard deviation values for each different filter will also be necessary. So we’ll run NoiseChisel with our finalized parameters value on both filters (you can also put this option’s value in a configuration file to avoid repeating it). $ astnoisechisel flat-ir/xdf-f105w.fits -onoisechisel/xdf-f105w.fits \ --minskyfrac=0.5 $ astnoisechisel flat-ir/xdf-f160w.fits -onoisechisel/xdf-f160w.fits \ --minskyfrac=0.5 Now, we are ready to make a catalog. We want the object and clump labels from the F160W image. But the input, Sky and Sky standard deviation images should come from each filter. So, we’ll run MakeCatalog on NoiseChisel’s output differently for each filter. When making the F105W catalog, we’ll use the ‘--objectsfile’ and ‘--clumpsfile’ options to tell MakeCatalog to read the object and clump labels from the F160W NoiseChisel output. When these options aren’t given, MakeCatalog will look into the same input file for object and clump labels. For both filters, we’ll ask for the ID, RA, Dec, Magnitude and signal-to-noise ratio (see *note Quantifying measurement limits::). To see a list of all the parameters that MakeCatalog can measure for you, run it with ‘--help’ option. $ mkdir catalog $ astmkcatalog noisechisel/xdf-f160w.fits --zeropoint=25.94 \ --ids --ra --dec --magnitude --sn \ --output=catalog/xdf-f160w.fits $ astmkcatalog noisechisel/xdf-f105w.fits --zeropoint=26.27 \ --objectsfile=noisechisel/xdf-f160w.fits \ --clumpsfile=noisechisel/xdf-f160w.fits \ --ids --ra --dec --magnitude --sn \ --output=catalog/xdf-f105w.fits MakeCatalog can also produce catalogs in plain text format. Please run the MakeCatalog commands above again and replace the ‘.fits’ suffix, in the value to ‘--output’, with ‘.txt’ (we will also be using the text file outputs later). When a clumps image is also given(6), like this example, two catalogs will be made. If you asked for a plain text file output, two files will be made with the ‘_c.txt’ and ‘_o.txt’ suffixes. If MakeCatalog’s output is requested to be FITS, the two catalogs will be in separate extensions of a single file. You can inspect the separate extensions with the Fits program like before (as shown below). Afterwards, you can inspect the table in each extension with Gnuastro’s Table program (see *note Table::) as shown below. $ astfits catalog/xdf-f105w.fits # Extension information $ asttable catalog/xdf-f105w.fits -h1 --info # Objects catalog info. $ asttable catalog/xdf-f105w.fits -h1 # Objects catalog columns. $ asttable catalog/xdf-f105w.fits -h2 -i # Clumps catalog info. $ asttable catalog/xdf-f105w.fits -h2 # Clumps catalog columns. As you see above, to see the column contents of each table, you can just remove the ‘--info’ (or ‘-i’) option. If you want to print the contents of special column(s), just specify the column number(s) (counting from ‘1’, same as output of the command above) or the column name(s) (if they have one). For example, if you just want the objects and clumps magnitude and signal-to-noise ratio in the F160W filter. You can get it with the following commands. $ asttable catalog/xdf-f160w.fits -h1 -cMAGNITUDE -cSN $ asttable catalog/xdf-f160w.fits -h2 -cMAGNITUDE -cSN The clumps catalog has two ID columns (one for the over-all clump ID and one for the ID of the clump in its host object), the magnitude column numbers differ between the object and clumps catalog. So if you want to specify the columns by number, you will need to change the numbers when viewing the clump and objects catalogs. This is a useful advantage of having/using column names. $ asttable catalog/xdf-f160w.fits -h1 -c4 -c5 $ asttable catalog/xdf-f160w.fits -h2 -c5 -c6 Finally, the comments in MakeCatalog’s output (in FITS headers or lines starting with ‘#’ in plain text) contain some important information about the dataset that can be useful. Open ‘catalog/xdf-f160w_o.txt’ in a text editor to see them. Since we used the same labeled image on both filters, the number of rows in both catalogs are the same. So, let’s measure the colors of the objects in this image. We’ll merge the two clump catalogs together into one using the ‘paste’ program on the command-line. The output file will have each line of both catalogs merged into a single line. $ paste catalog/xdf-f160w_c.txt catalog/xdf-f105w_c.txt \ > xdf-f160w-f105w_c_p.txt Open ‘xdf-f160w-f105w_c_p.txt’ after making it to see how ‘paste’ has operated. We can now use AWK to find the colors. We’ll ask AWK to only use lines that don’t start with ‘#’ and don’t have a NaN magnitude in the 9th column (F105W magnitude(7)). We will also ignore columns which don’t have reliable F105W magnitudes (with a S/N less than 7(8)). For the other lines, AWK will print the ID, positional columns and the difference between the respective magnitude columns. $ awk '!/^#/ && $11!="nan" && $12>7 {print $1, $2, $3, $4, $11-$5}' \ xdf-f160w-f105w_c_p.txt > catalog/xdf-f105w-f160w_c.txt Gnuastro has a simple program for basic statistical analysis. The command below will print some basic information about the distribution (minimum, maximum, median and etc), along with a cute little ASCII histogram to visually help you understand the distribution on the command-line without the need for a graphic user interface (see *note Invoking aststatistics::). This ASCII histogram can be useful when you just want some coarse and general information on the input dataset. It is also useful when working on a server (where you may not have graphic user interface), and finally, its fast. $ aststatistics catalog/xdf-f105w-f160w_c.txt -c5 You can later use Gnuastro’s Statistics program with the ‘--histogram’ option to build a much more fine-grained histogram as a table to feed into your favorite plotting program for a much more accurate/appealing plot. If you just want a specific measure, for example the mean, median and standard deviation, you can ask for them specifically: $ aststatistics catalog/xdf-f105w-f160w_c.txt -c5 --mean --median --std Some researchers prefer to have colors in a fixed aperture for all the objects. The colors we calculated above used a different segmentation map for each object. This might not satisfy some science cases. To make a fixed aperture catalog, we should make a labeled image which has a fixed label for each aperture. That labeled image can be given to MakeCatalog instead of NoiseChisel’s labeled detection image. We’ll use the objects catalog in the F160W catalog we generated before for the positions and set the other parameters of each profile to be a fixed circle of radius 5 pixels (we want all apertures to be fixed after all). AWK is a wonderful tool for such jobs as the command below shows. $ awk '!/^#/{print $1, $2, $3, 5, 5, 0, 0, 1, $1, 1}' \ catalog/xdf-f160w_c.txt > catalog/apertures.txt We can now feed this catalog into MakeProfiles to build the apertures for us. See *note Invoking astmkprof:: for a description of the options. The most important for this particular job is ‘--mforflatpix’, it tells MakeProfiles that the values in the magnitude column should be used for each pixel of a flat profile. Without it, MakeProfiles would build the profiles such that the _sum_ of the pixels of each profile would have a _magnitude_ (in log-scale) of the value given in that column (what you would expect when simulating a galaxy for example). $ astmkprof catalog/apertures.txt --background=flat-ir/xdf-f160w.fits \ --clearcanvas --replace --type=int16 --mforflatpix \ --mode=wcs The first thing you might notice in the printed information is that the profiles are not built in order. This is because MakeProfiles works in parallel and parallel CPU operations are asynchronous. Without ‘--replace’, the output is the same in any case. You can try running MakeProfiles with one thread (using ‘--numthreads=1’ to see how order is respected in that case. Open the output ‘apertures.fits’ file and see the result. Where the apertures overlap, you will notice that one label has replaced the other (because of the ‘--replace’ option). In the future, MakeCatalog will be able to work with overlapping labels, but currently it doesn’t. If you are interested, please join us in completing Gnuastro with added improvements like this (see task 14750 (9)). ‘apertures.fits’ labeled image can now be fed input into MakeCatalog. Similar to how we used the F160W labels for the F105W catalog: the labels don’t have to be produced by NoiseChisel. In comparison with the previous MakeCatalog call, notice how 1) we have no more clumps image, 2) that we have set ‘--objectshdu=1’ (since ‘apertures.fits’ is not the output of NoiseChisel where the labeled image is in the third extension), and 3) that we are now using ‘--objid’ instead of ‘--ids’ to avoid warnings that some ID columns are only for clumps. $ astmkcatalog noisechisel/xdf-f105w.fits --zeropoint=26.27 \ --objectsfile=apertures.fits --objectshdu=1 \ --objid --ra --dec --magnitude --sn \ --output=catalog/xdf-f105w-aper.fits Change the filter name and zeropoint magnitudes and run this command again to have the fixed aperture magnitude in the F160W filter also. From this point on, you can follow the previous steps to derive the color in a fixed aperture. We will now find some of the objects with the strongest color difference and make a cutout to inspect them visually: let’s see what the objects with a color more than two magnitudes look like. We’ll use the ‘catalog/xdf-f105w-f160w_c.txt’ file that we produced above. With the command below, all lines with a color value more than 2 will be put in ‘reddest.txt’ and inspect it using ‘cat’. $ awk '$5>1' catalog/xdf-f105w-f160w_c.txt > reddest.txt $ cat reddest.txt We can now feed ‘reddest.txt’ into Gnuastro’s crop to see what these objects look like. To keep things clean, we’ll make a directory called ‘reddest’ and ask Crop to save the crops in this directory. We’ll also add a ‘-f160w.fits’ suffix to the crops. $ mkdir crop $ astcrop --mode=wcs --coordcol=3 --coordcol=4 flat-ir/xdf-f160w.fits \ --catalog=reddest.txt --width=15/3600,15/3600 \ --suffix=-f160w.fits --output=crop Like the MakeProfiles command above, you might notice that the crops aren’t made in order. Since each crop is independent of the rest, the crops are done in parallel and parallel operations are asynchronous. In the command above, change ‘f160w’ to ‘f105w’ to make the crops in both filters. To view the crops more easily (not having to open ds9 for each image), you can convert the FITS crops into the JPEG format. $ for f in *.fits; do \ astconvertt $f --fluxlow=-0.001 --fluxhigh=0.005 --invert -ojpg; \ done The loop above is in series: each file is processed only after the previous ones are complete. If you have GNU Parallel (https://www.gnu.org/software/parallel), you can greatly speed up this conversion. GNU Parallel will run the separate commands simultaneously on different CPU threads in parallel. For more information on efficiently using your threads, see *note Multi-threaded operations::. $ parallel astconvertt --fluxlow=-0.001 --fluxhigh=0.005 --invert \ -ojpg ::: *.fits You can now easily use your general GUI image viewer to flip through the images more easily. On GNOME, you can use the “Eye of GNOME†image viewer (with executable name of ‘eog’). Run the command below and by pressing the <> key, you can flip through the images and compare them visually more easily. Of course, the flux ranges have been chosen generically here for seeing the fainter parts. Therefore, brighter objects will be fully black. $ eog 1-f105w.jpg Another thing that is commonly needed is to visually mark these objects on the image. DS9 has “Regionâ€s for this purpose. You just have to convert your catalog into a “region file†to feed into DS9. To do that, you can use AWK again as shown below. $ cd .. $ awk 'BEGIN{print "# Region file format: DS9 version 4.1"; \ print "global color=green width=2"; \ print "fk5";} \ {printf "circle(%s,%s,1\")\n", $3, $4;}' reddest.txt \ > reddest.reg This region file can be loaded into DS9 with its ‘-regions’ option as shown below (see above for the other options): $ ds9 -mecube noisechisel/xdf-f160w.fits -zscale -zoom to fit \ -regions load all reddest.reg Finally, if this book or any of the programs in Gnuastro have been useful for your research, please cite the respective papers. All Gnuastro programs have a ‘--cite’ option to help you cite the authors’ work more easily. For example: $ astmkcatalog --cite ---------- Footnotes ---------- (1) See *note SAO ds9::, available at . (2) . (3) . (4) GNU Info is already available on almost all Unix-like operating systems. (5) Note that you only have one port to the internet, so downloading in parallel will actually be slower than downloading in series. (6) MakeCatalog will look at the ‘WCLUMPS’ keyword in the objects image to see if it should also use a clumps image or not. (7) Recall that the objects and clumps labels were made on the F160W image. On the F105W image, there might not be enough signal, so random scatter may give a negative total brightness and thus a NaN magnitude. (8) The value of 7 is taken from the clump S/N threshold in F160W (where the clumps were defined). (9)  File: gnuastro.info, Node: Installation, Next: Common program behavior, Prev: Tutorials, Up: Top 3 Installation ************** The latest released version of Gnuastro source code is always available at the following URL: *note Quick start:: describes the commands necessary to configure, build, and install Gnuastro on your system. This chapter will be useful in cases where the simple procedure above is not sufficient, for example your system lacks a mandatory/optional dependency (in other words, you can’t pass the ‘$ ./configure’ step), or you want greater customization, or you want to build and install Gnuastro from other random points in its history, or you want a higher level of control on the installation. Thus if you were happy with downloading the tarball and following *note Quick start::, then you can safely ignore this chapter and come back to it in the future if you need more customization. *note Dependencies:: describes the mandatory, optional and bootstrapping dependencies of Gnuastro. Only the first group are required/mandatory when you are building Gnuastro using a tarball (see *note Release tarball::), they are very basic and low-level tools used in most astronomical software, so you might already have them installed, if not they are very easy to install as described for each. *note Downloading the source:: discusses the two methods you can obtain the source code: as a tarball (a significant snapshot in Gnuastro’s history), or the full history(1). The latter allows you to build Gnuastro at any random point in its history (for example to get bug fixes or new features that are not released as a tarball yet). The building and installation of Gnuastro is heavily customizable, to learn more about them, see *note Build and install::. This section is essentially a thorough explanation of the steps in *note Quick start::. It discusses ways you can influence the building and installation. If you encounter any problems in the installation process, it is probably already explained in *note Known issues::. In *note Other useful software:: the installation and usage of some other free software that are not directly required by Gnuastro but might be useful in conjunction with it is discussed. * Menu: * Dependencies:: Necessary packages for Gnuastro. * Downloading the source:: Ways to download the source code. * Build and install:: Configure, build and install Gnuastro. ---------- Footnotes ---------- (1) *note Bootstrapping dependencies:: are required if you clone the full history.  File: gnuastro.info, Node: Dependencies, Next: Downloading the source, Prev: Installation, Up: Installation 3.1 Dependencies ================ The dependencies needed to build and install Gnuastro are defined by the features you want and how you would like to obtain the source code (see *note Downloading the source::). A minimal set of dependencies are mandatory, if they are not present you cannot get passed the configuration step. Such mandatory dependencies are therefore very basic (low-level) tools which are easy to obtain, build and install, see *note Mandatory dependencies:: for a full discussion. If you have the packages of *note Optional dependencies::, Gnuastro will have additional functionality (for example converting FITS images to JPEG or PDF). If you are installing from a tarball as explained in *note Quick start::, you can stop reading after this section. However, if you decided to use the version controlled source instead of the tarball (see *note Version controlled source::), an additional bootstrapping step is required before configuration and its dependencies are explained in *note Bootstrapping dependencies::. * Menu: * Mandatory dependencies:: Gnuastro will not install without these. * Optional dependencies:: Adding more functionality. * Bootstrapping dependencies:: If you have the version controlled source.  File: gnuastro.info, Node: Mandatory dependencies, Next: Optional dependencies, Prev: Dependencies, Up: Dependencies 3.1.1 Mandatory dependencies ---------------------------- The mandatory Gnuastro dependencies are very basic and low-level tools. They all follow the same basic GNU based build system (like that shown in *note Quick start::), so even if you don’t have them, installing them should be pretty straightforward. In this section we explain each program and any specific note that might be necessary in the installation. The most basic choice is to build the packages from source yourself, instead of relying on your distribution’s package management system. While the latter choice is indeed possible, we recommend that you build these dependencies yourself as discussed below. We will send out notifications in the ‘info-gnuastro’ mailing list, see *note Announcements:: when we find out that these requirements are updated. 1. For each package, Gnuastro might preform better (or require) certain configuration options that your distribution’s package managers didn’t add for you. If present, these configuration options are explained during the installation of each in the sections below. When the proper configuration has not been set, the programs should complain and inform you. 2. Your distribution’s pre-built package might not be the most recent release. 3. For the libraries, they might separate the binary file from the header files, see *note Known issues::. 4. Like any other tool, the science you derive from Gnuastro’s tools highly depend on these lower level dependencies, so generally it is much better to have a close connection with them. By reading their manuals, installing them and staying up to date with changes/bugs in them, your scientific results and understanding will also correspondingly improve. * Menu: * GNU Scientific Library:: Installing GSL. * CFITSIO:: C interface to the FITS standard. * WCSLIB:: C interface to the WCS standard of FITS.  File: gnuastro.info, Node: GNU Scientific Library, Next: CFITSIO, Prev: Mandatory dependencies, Up: Mandatory dependencies 3.1.1.1 GNU Scientific library .............................. The GNU Scientific Library (http://www.gnu.org/software/gsl/), or GSL, is a large collection of functions that are very useful in scientific applications, for example integration, random number generation, and Fast Fourier Transform among many others. To install GSL from source, you can run the following commands after you have downloaded ‘gsl-latest.tar.gz’ (ftp://ftp.gnu.org/gnu/gsl/gsl-latest.tar.gz): $ tar xf gsl-latest.tar.gz $ cd gsl-X.X # Replace X.X with version number. $ ./configure $ make -j8 # Replace 8 with no. CPU threads. $ make check $ sudo make install  File: gnuastro.info, Node: CFITSIO, Next: WCSLIB, Prev: GNU Scientific Library, Up: Mandatory dependencies 3.1.1.2 CFITSIO ............... CFITSIO (http://heasarc.gsfc.nasa.gov/fitsio/) is the closest you can get to the pixels in a FITS image while remaining faithful to the FITS standard (http://fits.gsfc.nasa.gov/fits_standard.html). It is written by William Pence, the principal author of the FITS standard(1), and is regularly updated. Setting the definitions for all other software packages using FITS images. Some GNU/Linux distributions have CFITSIO in their package managers, if it is available and updated, you can use it. One problem that might occur is that CFITSIO might not be configured with the ‘--enable-reentrant’ option by the distribution. This option allows CFITSIO to open a file in multiple threads, it can thus provide great speed improvements. If CFITSIO was not configured with this option, any program which needs this capability will warn you and abort when you ask for multiple threads (see *note Multi-threaded operations::). To install CFITSIO from source, we strongly recommend that you have a look through Chapter 2 (Creating the CFITSIO library) of the CFITSIO manual and understand the options you can pass to ‘$ ./configure’ (they aren’t too much). This is a very basic package for most astronomical software and it is best that you configure it nicely with your system. Once you download the source and unpack it, the following configure script should be enough for most purposes. Don’t forget to read chapter two of the manual though, for example the second option is only for 64bit systems. The manual also explains how to check if it has been installed correctly. CFITSIO comes with two executables called fpack and funpack. From their manual: they “are standalone programs for compressing and uncompressing images and tables that are stored in the FITS (Flexible Image Transport System) data format. They are analogous to the gzip and gunzip compression programs except that they are optimized for the types of astronomical images that are often stored in FITS formatâ€. The commands below will compile and install them on your system along with CFITSIO. They are not essential for Gnuastro, since they are just wrappers for functions within CFITSIO, but they can come in handy. The ‘make utils’ command is only available for versions above 3.39, it will build these executables along with several other test executables which are deleted before the installation (otherwise they will also be installed). The CFITSIO installation from source process is given below. Let’s assume you have downloaded ‘cfitsio_latest.tar.gz’ (http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/cfitsio_latest.tar.gz) and are in the same directory: $ tar xf cfitsio_latest.tar.gz $ cd cfitsio $ ./configure --prefix=/usr/local --enable-sse2 --enable-reentrant $ make $ make utils $ ./testprog > testprog.lis $ diff testprog.lis testprog.out # Should have no output $ cmp testprog.fit testprog.std # Should have no output $ rm cookbook fitscopy imcopy smem speed testprog $ sudo make install ---------- Footnotes ---------- (1) Pence, W.D. et al. Definition of the Flexible Image Transport System (FITS), version 3.0. (2010) Astronomy and Astrophysics, Volume 524, id.A42, 40 pp.  File: gnuastro.info, Node: WCSLIB, Prev: CFITSIO, Up: Mandatory dependencies 3.1.1.3 WCSLIB .............. WCSLIB (http://www.atnf.csiro.au/people/mcalabre/WCS/) is written and maintained by one of the authors of the World Coordinate System (WCS) definition in the FITS standard (http://fits.gsfc.nasa.gov/fits_standard.html)(1), Mark Calabretta. It might be already built and ready in your distribution’s package management system. However, here the installation from source is explained, for the advantages of installation from source please see *note Mandatory dependencies::. To install WCSLIB you will need to have CFITSIO already installed, see *note CFITSIO::. WCSLIB also has plotting capabilities which use PGPLOT (a plotting library for C). If you wan to use those capabilities in WCSLIB, *note PGPLOT:: provides the PGPLOT installation instructions. However PGPLOT is old(2), so its installation is not easy, there are also many great modern WCS plotting tools (mostly in written in Python). Hence, if you will not be using those plotting functions in WCSLIB, you can configure it with the ‘--without-pgplot’ option as shown below. Let’s assume you have downloaded ‘wcslib.tar.bz2’ (ftp://ftp.atnf.csiro.au/pub/software/wcslib/wcslib.tar.bz2) and are in the same directory: $ tar xf wcslib.tar.bz2 $ cd wcslib-X.X # Replace X.X with version number $ ./configure --without-pgplot LIBS="-pthread -lm" --disable-fortran $ make $ make check $ sudo make install ---------- Footnotes ---------- (1) Greisen E.W., Calabretta M.R. (2002) Representation of world coordinates in FITS. Astronomy and Astrophysics, 395, 1061-1075. (2) As of early June 2016, its most recent version was uploaded in February 2001.  File: gnuastro.info, Node: Optional dependencies, Next: Bootstrapping dependencies, Prev: Mandatory dependencies, Up: Dependencies 3.1.2 Optional dependencies --------------------------- The libraries listed here are only used for very specific applications, therefore if you don’t want these operations, Gnuastro will be built and installed without them and you don’t have to have the dependencies. If the ‘./configure’ script can’t find these requirements, it will warn you in the end that they are not present and notify you of the operation(s) you can’t do due to not having them. If the output you request from a program requires a missing library, that program is going to warn you and abort. In the case of executables like GPL GhostScript, if you install them at a later time, the program will run. This is because if required libraries are not present at build time, the executables cannot be built, but an executable is called by the built program at run time so if it becomes available, it will be used. If you do install an optional library later, you will have to rebuild Gnuastro and reinstall it for it to take effect. GNU Libtool Libtool is a program to simplify managing of the libraries to build an executable (a program). GNU Libtool has some added functionality compared to other implementations. If GNU Libtool isn’t present on your system at configuration time a warning will be printed and *note BuildProgram:: won’t be built or installed. The configure script will look into your search path (‘PATH’) for GNU Libtool through the following executable names: ‘libtool’ (acceptable only if it is the GNU implementation) or ‘glibtool’. See *note Installation directory:: for more on ‘PATH’. GNU Libtool (the binary/executable file) is a low-level program that is probably already present on your system, and if not, is available in your operating system package manager(1). If you want to install GNU Libtool’s latest version from source, please visit its webpage (https://www.gnu.org/software/libtool/). Gnuastro’s tarball is shipped with an internal implementation of GNU Libtool. Even if you have GNU Libtool, Gnuastro’s internal implementation is used for the building and installation of Gnuastro. As a result, you can still build, install and use Gnuastro even if you don’t have GNU Libtool installed on your system. However, this internal Libtool does not get installed. Therefore, after Gnuastro’s installation, if you want to use *note BuildProgram:: to compile and link your own C source code which uses the *note Gnuastro library::, you need to have GNU Libtool available on your system (independent of Gnuastro). See *note Review of library fundamentals:: to learn more about libraries. libgit2 Git is one of the most common version control systems (see *note Version controlled source::). When ‘libgit2’ is present, and Gnuastro’s programs are run within a version controlled directory, outputs will contain the version number of the working directory’s repository for future reproducibility. See the ‘COMMIT’ keyword header in *note Output headers:: for a discussion. libjpeg libjpeg is only used by ConvertType to read from and write to JPEG images. libjpeg (http://www.ijg.org/) is a very basic library that provides tools to read and write JPEG images, most of the GNU/Linux graphic programs and libraries use it. Therefore you most probably already have it installed. libjpeg-turbo (http://libjpeg-turbo.virtualgl.org/) is an alternative to libjpeg. It uses SIMD instructions for ARM based systems that significantly decreases the processing time of JPEG compression and decompression algorithms. GPL Ghostscript GPL Ghostscript’s executable (‘gs’) is called used by ConvertType to compile a PDF file from a source PostScript file, see *note ConvertType::. Therefore its headers (and libraries) are not needed. With a very high probability you already have it in your GNU/Linux distribution. Unfortunately it does not follow the standard GNU build style so installing it is very hard. It is best to rely on your distribution’s package managers for this. ---------- Footnotes ---------- (1) Note that we want the binary/executable Libtool program which can be run on the command-line. In Debian-based operating systems which separate various parts of a package, you want want ‘libtool-bin’, the ‘libtool’ package won’t contain the executable program.  File: gnuastro.info, Node: Bootstrapping dependencies, Prev: Optional dependencies, Up: Dependencies 3.1.3 Bootstrapping dependencies -------------------------------- Bootstrapping is only necessary if you have decided to obtain the full version controlled history of Gnuastro, see *note Version controlled source:: and *note Bootstrapping::. Using the version controlled source enables you to always be up to date with the most recent development work of Gnuastro (bug fixes, new functionalities, improved algorithms and etc). If you have downloaded a tarball (see *note Downloading the source::), then you can ignore this subsection. To successfully run the bootstrapping process, there are some additional dependencies to those discussed in the previous subsections. These are low level tools that are used by a large collection of Unix-like operating systems programs, therefore they are most probably already available in your system. If they are not already installed, you should be able to easily find them in any GNU/Linux distribution package management system (‘apt-get’, ‘yum’, ‘pacman’ and etc). The short names in parenthesis in ‘typewriter’ font after the package name can be used to search for them in your package manager. For the GNU Portability Library, GNU Autoconf Archive and TeX Live, it is recommended to use the instructions here, not your operating system’s package manager. GNU Portability Library (Gnulib) To ensure portability for a wider range of operating systems (those that don’t include GNU C library, namely glibc), Gnuastro depends on the GNU portability library, or Gnulib. Gnulib keeps a copy of all the functions in glibc, implemented (as much as possible) to be portable to other operating systems. The ‘bootstrap’ script can automatically clone Gnulib (as a ‘gnulib/’ directory inside Gnuastro), however, as described in *note Bootstrapping:: this is not recommended. The recommended way to bootstrap Gnuastro is to first clone Gnulib and the Autoconf archives (see below) into a local directory outside of Gnuastro. Let’s call it ‘DEVDIR’(1) (which you can set to any directory). Currently in Gnuastro, both Gnulib and Autoconf archives have to be cloned in the same top directory(2) like the case here(3): $ DEVDIR=/home/yourname/Development $ cd $DEVDIR $ git clone git://git.sv.gnu.org/gnulib.git $ git clone git://git.sv.gnu.org/autoconf-archive.git You now have the full version controlled source of these two repositories in separate directories. Both these packages are regularly updated, so every once in a while, you can run ‘$ git pull’ within them to get any possible updates. GNU Automake (‘automake’) GNU Automake will build the ‘Makefile.in’ files in each sub-directory using the (hand-written) ‘Makefile.am’ files. The ‘Makefile.in’s are subsequently used to generate the ‘Makefile’s when the user runs ‘./configure’ before building. GNU Autoconf (‘autoconf’) GNU Autoconf will build the ‘configure’ script using the configurations we have defined (hand-written) in ‘configure.ac’. GNU Autoconf Archive These are a large collection of tests that can be called to run at ‘./configure’ time. See the explanation under GNU Portability Library above for instructions on obtaining it and keeping it up to date. GNU Libtool (‘libtool’) GNU Libtool is in charge of building all the libraries in Gnuastro. The libraries contain functions that are used by more than one program and are installed for use in other programs. They are thus put in a separate directory (‘lib/’). GNU help2man (‘help2man’) GNU help2man is used to convert the output of the ‘--help’ option (*note --help::) to the traditional Man page (*note Man pages::). LaTeX and some TeX packages Some of the figures in this book are built by LaTeX (using the PGF/TikZ package). The LaTeX source for those figures is version controlled for easy maintenance not the actual figures. So the ‘./boostrap’ script will run LaTeX to build the figures. The best way to install LaTeX and all the necessary packages is through TeX live (https://www.tug.org/texlive/) which is a package manager for TeX related tools that is independent of any operating system. It is thus preferred to the TeX Live versions distributed by your operating system. To install TeX Live, go to the webpage and download the appropriate installer by following the “download†link. Note that by default the full package repository will be downloaded and installed (around 4 Giga Bytes) which can take _very_ long to download and to update later. However, most packages are not needed by everyone, it is easier, faster and better to install only the “Basic scheme†(consisting of only the most basic TeX and LaTeX packages, which is less than 200 Mega bytes)(4). After the installation, be sure to set the environment variables as suggested in the end of the outputs. Any time you confront (need) a package you don’t have, simply install it with a command like below (similar to how you install software from your operating system’s package manager)(5). To install all the necessary TeX packages for a successful Gnuastro bootstrap, run this command: $ su # tlmgr install epsf jknapltx caption biblatex biber iftex \ etoolbox logreq xstring xkeyval pgf ms \ xcolor pgfplots times rsfs pstools epspdf ImageMagick (‘imagemagick’) ImageMagick is a wonderful and robust program for image manipulation on the command-line. ‘bootsrap’ uses it to convert the book images into the formats necessary for the various book formats. ---------- Footnotes ---------- (1) If you are not a developer in Gnulib or Autoconf archives, ‘DEVDIR’ can be a directory that you don’t backup. In this way the large number of files in these projects won’t slow down your backup process or take bandwidth (if you backup to a remote server). (2) If you already have the Autoconf archives in a separate directory, or can’t clone it in the same directory as Gnulib, or you have it with another directory name (not ‘autoconf-archive/’), you can follow this short step. Set ‘AUTOCONFARCHIVES’ to your desired address. Then define a symbolic link in ‘DEVDIR’ with the following command so Gnuastro’s bootstrap script can find it: ‘$ ln -s $AUTOCONFARCHIVES $DEVDIR/autoconf-archive’. (3) If your internet connection is active, but Git complains about the network, it might be due to your network setup not recognizing the git protocol. In that case use the following URL for the HTTP protocol instead (for Autoconf archives, replace the name): ‘http://git.sv.gnu.org/r/gnulib.git’ (4) You can also download the DVD iso file at a later time to keep as a backup for when you don’t have internet connection if you need a package. (5) After running TeX, or LaTeX, you might get a warning complaining about a ‘missingfile’. Run ‘‘tlmgr info missingfile’’ to see the package(s) containing that file which you can install.  File: gnuastro.info, Node: Downloading the source, Next: Build and install, Prev: Dependencies, Up: Installation 3.2 Downloading the source ========================== Gnuastro’s source code can be downloaded in two ways. As a tarball, ready to be configured and installed on your system (as described in *note Quick start::), see *note Release tarball::. If you want official releases of stable versions this is the best, easiest and most common option. Alternatively, you can clone the version controlled history of Gnuastro, run one extra bootstrapping step and then follow the same steps as the tarball. This will give you access to all the most recent work that will be included in the next release along with the full project history. The process is thoroughly introduced in *note Version controlled source::. * Menu: * Release tarball:: Download a stable official release. * Version controlled source:: Get and use the version controlled source.  File: gnuastro.info, Node: Release tarball, Next: Version controlled source, Prev: Downloading the source, Up: Downloading the source 3.2.1 Release tarball --------------------- A release tarball (commonly compressed) is the most common way of obtaining free and open source software. A tarball is a snapshot of one particular moment in the Gnuastro development history along with all the necessary files to configure, build, and install Gnuastro easily (see *note Quick start::). It is very straightforward and needs the least set of dependencies (see *note Mandatory dependencies::). Gnuastro has tarballs for official stable releases and pre-releases for testing. See *note Version numbering:: for more on the two types of releases and the formats of the version numbers. The URLs for each type of release are given below. Official stable releases (): This URL hosts the official stable releases of Gnuastro. Always use the most recent version (see *note Version numbering::). By clicking on the “Last modified†title of the second column, the files will be sorted by their date which you can also use to find the latest version. It is recommended to use a mirror to download these tarballs, please visit and see below. Pre-release tar-balls (): This URL contains unofficial pre-release versions of Gnuastro. The pre-release versions of Gnuastro here are for enthusiasts to try out before an official release. If there are problems, or bugs then the testers will inform the developers to fix before the next official release. See *note Version numbering:: to understand how the version numbers here are formatted. If you want to remain even more up-to-date with the developing activities, please clone the version controlled source as described in *note Version controlled source::. Gnuastro’s official/stable tarball is released with two formats: Gzip (with suffix ‘.tar.gz’) and Lzip (with suffix ‘.tar.lz’). The pre-release tarballs (after version 0.3) are released only as an Lzip tarball. Gzip is a very well-known and widely used compression program created by GNU and available in most systems. However, Lzip provides a better compression ratio and more robust archival capacity. For example Gnuastro 0.3’s tarball was 2.9MB and 4.3MB with Lzip and Gzip respectively, see the Lzip webpage (http://www.nongnu.org/lzip/lzip.html) for more. Lzip might not be pre-installed in your operating system, if so, installing it from your operating system’s package manager or from source is very easy and fast (it is a very small program). The GNU FTP server is mirrored (has backups) in various locations on the globe (). You can use the closest mirror to your location for a more faster download. Note that only some mirrors keep track of the pre-release (alpha) tarballs. Also note that if you want to download immediately after and announcement (see *note Announcements::), the mirrors might need some time to synchronize with the main GNU FTP server.  File: gnuastro.info, Node: Version controlled source, Prev: Release tarball, Up: Downloading the source 3.2.2 Version controlled source ------------------------------- The publicly distributed Gnuastro tar-ball (for example ‘gnuastro-X.X.tar.gz’) does not contain the revision history, it is only a snapshot of the source code at one significant instant of Gnuastro’s history (specified by the version number, see *note Version numbering::), ready to be configured and built. To be able to develop successfully, the revision history of the code can be very useful to track when something was added or changed, also some updates that are not yet officially released might be in it. We use Git for the version control of Gnuastro. For those who are not familiar with it, we recommend the Pro Git(1) book. The whole book is publicly available for online reading and downloading and does a wonderful job at explaining the concepts and best practices. Let’s assume you want to keep Gnuastro in the ‘TOPGNUASTRO’ directory (can be any directory, change the value below). The full version controlled history of Gnuastro can be cloned in ‘TOPGNUASTRO/gnuastro’ by running the following commands(2): $ TOPGNUASTRO=/home/yourname/Research/projects/ $ cd $TOPGNUASTRO $ git clone git://git.sv.gnu.org/gnuastro.git The ‘$TOPGNUASTRO/gnuastro’ directory will contain hand-written (version controlled) source code for Gnuastro’s programs, libraries, this book and the tests. All are divided into sub-directories with standard and very descriptive names. The version controlled files in the top cloned directory are either mainly in capital letters (for example ‘THANKS’ and ‘README’) or mainly written in small-caps (for example ‘configure.ac’ and ‘Makefile.am’). The former are non-programming, standard writing for human readers containing high-level information about the whole package. The latter are instructions to customize the GNU build system for Gnuastro. The cloned Gnuastro source cannot immediately be configured, compiled, or installed since it only contains hand-written files, not automatically generated or imported files which do all the hard work of the build process. See *note Bootstrapping:: for the process of generating and importing those files (it is very easy!). Once you have bootstrapped Gnuastro, you can run the standard procedures (in *note Quick start::). Very soon after you have cloned it, Gnuastro’s main ‘master’ branch will be updated on the main repository (since the developers are actively working on Gnuastro), for the best practices in keeping your local history in sync with the main repository see *note Synchronizing::. * Menu: * Bootstrapping:: Adding all the automatically generated files. * Synchronizing:: Keep your local clone up to date. ---------- Footnotes ---------- (1) (2) If your internet connection is active, but Git complains about the network, it might be due to your network setup not recognizing the Git protocol. In that case use the following URL which uses the HTTP protocol instead: ‘http://git.sv.gnu.org/r/gnuastro.git’  File: gnuastro.info, Node: Bootstrapping, Next: Synchronizing, Prev: Version controlled source, Up: Version controlled source 3.2.2.1 Bootstrapping ..................... The version controlled source code lacks the source files that we have not written or are automatically built. These automatically generated files are included in the distributed tar ball for each distribution (for example ‘gnuastro-X.X.tar.gz’, see *note Version numbering::) and make it easy to immediately configure, build, and install Gnuastro. However from the perspective of version control, they are just bloatware and sources of confusion (since they are not changed by Gnuastro developers). The process of automatically building and importing necessary files into the cloned directory is known as _bootstrapping_. All the instructions for an automatic bootstrapping are available in ‘bootstrap’ and configured using ‘bootstrap.conf’. ‘bootstrap’ is the only file not written by Gnuastro developers but is under version control to enable simple bootstrapping immediately after cloning. It is maintained by the GNU Portability Library (Gnulib) and this file is an identical copy, so do not make any changes in this file since it will be replaced when Gnulib releases an update. Make all your changes in ‘bootstrap.conf’. The bootstrapping process has its own separate set of dependencies, the full list is given in *note Bootstrapping dependencies::. They are generally very low-level and used by a very large set of commonly used programs, so they are probably already installed on your system. The simplest way to bootstrap Gnuastro is to simply run the bootstrap script within your cloned Gnuastro directory as shown below. However, please read the next paragraph before doing so (see *note Version controlled source:: for ‘TOPGNUASTRO’). $ cd TOPGNUASTRO/gnuastro $ ./bootstrap # Requires internet connection Without any options, ‘bootstrap’ will clone Gnulib within your cloned Gnuastro directory (‘TOPGNUASTRO/gnuastro/gnulib’) and download the necessary Autoconf archives macros. So if you run bootstrap like this, you will need an internet connection every time you decide to bootstrap. Also, Gnulib is a large package and cloning it can be slow. It will also keep the full Gnulib repository within your Gnuastro repository, so if another one of your projects also needs Gnulib, and you insist on running bootstrap like this, you will have two copies. In case you regularly backup your important files, Gnulib will also slow down the backup process. Therefore while the simple invocation above can be used with no problem, it is not recommended. To do better, see the next paragraph. The recommended way to get these two packages is thoroughly discussed in *note Bootstrapping dependencies:: (in short: clone them in the separate ‘DEVDIR/’ directory). The following commands will take you into the cloned Gnuastro directory and run the ‘bootstrap’ script, while telling it to copy some files (instead of making symbolic links, with the ‘--copy’ option, this is not mandatory(1)) and where to look for Gnulib (with the ‘--gnulib-srcdir’ option). Please note that the address given to ‘--gnulib-srcdir’ has to be an absolute address (so don’t use ‘~’ or ‘../’ for example). $ cd $TOPGNUASTRO/gnuastro $ ./bootstrap --copy --gnulib-srcdir=$DEVDIR/gnulib Since Gnulib and Autoconf archives are now available in your local directories, you don’t need an internet connection every time you decide to remove all untracked files and redo the bootstrap (see box below). You can also use the same command on any other project that uses Gnulib. All the necessary GNU C library functions, Autoconf macros and Automake inputs are now available along with the book figures. The standard GNU build system (*note Quick start::) will do the rest of the job. *Undoing the bootstrap:* During the development, it might happen that you want to remove all the automatically generated and imported files. In other words, you might want to reverse the bootstrap process. Fortunately Git has a good program for this job: ‘git clean’. Run the following command and every file that is not version controlled will be removed. git clean -fxd It is best to commit any recent change before running this command. You might have created new files since the last commit and if they haven’t been committed, they will all be gone forever (using ‘rm’). To get a list of the non-version controlled files instead of deleting them, add the ‘n’ option to ‘git clean’, so it becomes ‘-fxdn’. Besides the ‘bootstrap’ and ‘bootstrap.conf’, the ‘bootstrapped/’ directory and ‘README-hacking’ file are also related to the bootstrapping process. The former hosts all the imported (bootstrapped) directories. Thus, in the version controlled source, it only contains a ‘REAME’ file, but in the distributed tar-ball it also contains sub-directories filled with all bootstrapped files. ‘README-hacking’ contains a summary of the bootstrapping process discussed in this section. It is a necessary reference when you haven’t built this book yet. It is thus not distributed in the Gnuastro tarball. ---------- Footnotes ---------- (1) The ‘--copy’ option is recommended because some backup systems might do strange things with symbolic links.  File: gnuastro.info, Node: Synchronizing, Prev: Bootstrapping, Up: Version controlled source 3.2.2.2 Synchronizing ..................... The bootstrapping script (see *note Bootstrapping::) is not regularly needed: you mainly need it after you have cloned Gnuastro (once) and whenever you want to re-import the files from Gnulib, or Autoconf archives(1) (not too common). However, Gnuastro developers are constantly working on Gnuastro and are pushing their changes to the official repository. Therefore, your local Gnuastro clone will soon be out-dated. Gnuastro has two mailing lists dedicated to its developing activities (see *note Developing mailing lists::). Subscribing to them can help you decide when to synchronize with the official repository. To pull all the most recent work in Gnuastro, run the following command from the top Gnuastro directory: $ git pull && autoconf -f GNU Autoconf is part of the GNU build system and will update the ‘./configure’ script based on the hand-written configurations (in ‘configure.ac’, which is version controlled in Gnuastro). The pulled changes might contain changes in the build system configurations. However, The most important reason for running this command is to generate a version number for your Gnuastro snapshot. This generated version number will include the commit information if you are building Gnuastro from any point in Gnuastro’s history (see *note Version numbering::). Since the version number is included in nearly all outputs of the programs, this can help you later exactly reproduce an old result by checking out the exact point in Gnuastro’s history that produced those results. Therefore, be sure to run ‘‘autoconf -f’’ after every synchronization. You can also run them separately: $ git pull $ autoconf -f If you would like to see what has changed since you last synchronized your local clone, you can take the following steps instead of the simple command above (don’t type anything after ‘#’): $ git checkout master # Confirm if you are on master. $ git fetch origin # Fetch all new commits from server. $ git log master..origin/master # See all the new commit messages. $ git merge origin/master # Update your master branch. $ autoconf -f # Update ./configure. By default ‘git log’ prints the most recent commit first, add the ‘--reverse’ option to see the changes chronologically. To see exactly what has been changed in the source code along with the commit message, add a ‘-p’ option to the ‘git log’. If you intend make changes in the code, have a look at *note Developing:: to get started easily. Be sure to commit your changes in a separate branch (keep your ‘master’ branch to follow the official repository) and re-run ‘autoconf -f’ after the commit. If you intend to send your changes to us (see *note Contributing to Gnuastro::) for the benefit of the whole community. If you send your work to us, you can safely use your commit since it will be ultimately recorded in Gnuastro’s official history. If not, please upload your separate branch to a public hosting service (for example GitLab, see *note Forking tutorial::) and link to it in your report, or run ‘make distcheck’ and upload the output ‘gnuastro-X.X.X.XXXX.tar.gz’ to a publicly accessible webpage so your results can be considered scientific (reproducible). ---------- Footnotes ---------- (1) is defined for you to check if significant (for Gnuastro) updates are made in these repositories, since the last time you pulled from them.  File: gnuastro.info, Node: Build and install, Prev: Downloading the source, Up: Installation 3.3 Build and install ===================== This section is basically a longer explanation to the sequence of commands given in *note Quick start::. If you didn’t have any problems during the *note Quick start:: steps, you want to have all the programs of Gnuastro installed in your system, you don’t want to change the executable names during or after installation, you have root access to install the programs in the default system wide directory, the Letter paper size of the print book is fine for you or as a summary you don’t feel like going into the details when everything is working, you can safely skip this section. If you have any of the above problems or you want to understand the details for a better control over your build and install, read along. The dependencies which you will need prior to configuring, building and installing Gnuastro are explained in *note Dependencies::. The first three steps in *note Quick start:: need no extra explanation, so we will skip them and start with an explanation of Gnuastro specific configuration options and a discussion on the installation directory in *note Configuring::, followed by some smaller subsections: *note Tests::, *note A4 print book::, and *note Known issues:: which explains the solutions to known problems you might encounter in the installation steps and ways you can solve them. * Menu: * Configuring:: Configure Gnuastro * Tests:: Run tests to see if it is working. * A4 print book:: Customize the print book. * Known issues:: Issues you might encounter.  File: gnuastro.info, Node: Configuring, Next: Tests, Prev: Build and install, Up: Build and install 3.3.1 Configuring ----------------- The ‘$ ./configure’ step is the most important step in the build and install process. All the required packages, libraries, headers and environment variables are checked in this step. The behaviors of make and make install can also be set through command line options to this command. The configure script accepts various arguments and options which enable the final user to highly customize whatever she is building. The options to configure are generally very similar to normal program options explained in *note Arguments and options::. Similar to all GNU programs, you can get a full list of the options along with a short explanation by running $ ./configure --help A complete explanation is also included in the ‘INSTALL’ file. Note that this file was written by the authors of GNU Autoconf (which builds the ‘configure’ script), therefore it is common for all programs which use the ‘$ ./configure’ script for building and installing, not just Gnuastro. Here we only discuss cases where you don’t have super-user access to the system and if you want to change the executable names. But before that, a review of the options to configure that are particular to Gnuastro are discussed. * Menu: * Gnuastro configure options:: Configure options particular to Gnuastro. * Installation directory:: Specify the directory to install. * Executable names:: Changing executable names. * Configure and build in RAM:: For minimal use of HDD or SSD, and clean source.  File: gnuastro.info, Node: Gnuastro configure options, Next: Installation directory, Prev: Configuring, Up: Configuring 3.3.1.1 Gnuastro configure options .................................. Most of the options to configure (which are to do with building) are similar for every program which uses this script. Here the options that are particular to Gnuastro are discussed. The next topics explain the usage of other configure options which can be applied to any program using the GNU build system (through the configure script). ‘--enable-progname’ Only build and install ‘progname’ along with any other program that is enabled in this fashion. ‘progname’ is the name of the executable without the ‘ast’, for example ‘crop’ for Crop (with the executable name of ‘astcrop’). If this option is called for any of the programs in Gnuastro, any program which is not explicitly enabled will not be built or installed. ‘--disable-progname’ ‘--enable-progname=no’ Do not build or install the program named ‘progname’. This is very similar to the ‘--enable-progname’, but will build and install all the other programs except this one. ‘--enable-gnulibcheck’ Enable checks on the GNU Portability Library (Gnulib). Gnulib is used by Gnuastro to enable users of non-GNU based operating systems (that don’t use GNU C library or glibc) to compile and use the advanced features that this library provides. We make extensive use of such functions. If you give this option to ‘$ ./configure’, when you run ‘$ make check’, first the functions in Gnulib will be tested, then the Gnuastro executables. If your operating system does not support glibc or has an older version of it and you have problems in the build process (‘$ make’), you can give this flag to configure to see if the problem is caused by Gnulib not supporting your operating system or Gnuastro, see *note Known issues::. ‘--disable-guide-message’ ‘--enable-guide-message=no’ Do not print a guiding message during the GNU Build process of *note Quick start::. By default, after each step, a message is printed guiding the user what the next command should be. Therefore, after ‘./configure’, it will suggest running ‘make’. After ‘make’, it will suggest running ‘make check’ and so on. If Gnuastro is configured with this option, for example $ ./configure --disable-guide-message Then these messages will not be printed after any step (like most programs). For people who are not yet fully accustomed to this build system, these guidelines can be very useful and encouraging. However, if you find those messages annoying, use this option. *Note:* If some programs are enabled and some are disabled, it is equivalent to simply enabling those that were enabled. Listing the disabled programs is redundant. The tests of some programs might depend on the outputs of the tests of other programs. For example MakeProfiles is one the first programs to be tested when you run ‘$ make check’. MakeProfiles’ test outputs (FITS images) are inputs to many other programs (which in turn provide inputs for other programs). Therefore, if you don’t install MakeProfiles for example, the tests for many the other programs will be skipped. To avoid this, in one run, you can install all the programs and run the tests but not install. If everything is working correctly, you can run configure again with only the programs you want. However, don’t run the tests and directly install after building.  File: gnuastro.info, Node: Installation directory, Next: Executable names, Prev: Gnuastro configure options, Up: Configuring 3.3.1.2 Installation directory .............................. One of the most commonly used options to ‘./configure’ is ‘--prefix’, it is used to define the directory that will host all the installed files (or the “prefix†in their final absolute file name). For example, when you are using a server and you don’t have administrator or root access. In this example scenario, if you don’t use the ‘--prefix’ option, you won’t be able to install the built files and thus access them from anywhere without having to worry about where they are installed. However, once you prepare your startup file to look into the proper place (as discussed thoroughly below), you will be able to easily use this option and benefit from any software you want to install without having to ask the system administrators or install and use a different version of a software that is already installed on the server. The most basic way to run an executable is to explicitly write its full file name (including all the directory information) and run it. One example is running the configuration script with the ‘$ ./configure’ command (see *note Quick start::). By giving a specific directory (the current directory or ‘./’), we are explicitly telling the shell to look in the current directory for an executable file named ‘‘configure’’. Directly specifying the directory is thus useful for executables in the current (or nearby) directories. However, when the program (an executable file) is to be used a lot, specifying all those directories will become a significant burden. For example, the ‘ls’ executable lists the contents in a given directory and it is (usually) installed in the ‘/usr/bin/’ directory by the operating system maintainers. So each time you want to use it you would have to run the following command (which is very inconvenient, both in writing and in remembering the various directories). $ /usr/bin/ls To address this problem, we have the ‘PATH’ environment variable. To understand it better, we will start with a short introduction to the shell variables. Shell variable values are basically treated as strings of characters. For example, it doesn’t matter if the value is a name (string of _alphabetic_ characters) or a number (string of _numeric_ characters). You can define a variable and a value for it by running $ myvariable1=a_test_value $ myvariable2="a test value" As you see above, if the value contains white space characters, you have to put the whole value (including white space characters) in double quotes (<">). You can see the value it represents by running $ echo $myvariable1 $ echo $myvariable2 If a variable has no value or it wasn’t defined, the last command will only print an empty line. A variable defined like this will be known as long as this shell or terminal is running. Other terminals will have no idea it existed. The main advantage of shell variables is that if they are exported(1), subsequent programs that are run within that shell can access their value. So by changing their value, you can change the “environment†of a program which uses them. The shell variables which are accessed by programs are therefore known as “environment variablesâ€(2). You can see the full list of exported variables that your shell recognizes by running: $ printenv ‘HOME’ is one commonly used environment variable, it is any user’s (the one that is logged in) top directory. Try finding it in the command above. It is used so often that the shell has a special expansion (alternative) for it: ‘‘~’’. Whenever you see file names starting with the tilde sign, it actually represents the value to the ‘HOME’ environment variable, so ‘~/doc’ is the same as ‘$HOME/doc’. Another one of the most commonly used environment variables is ‘PATH’, it is a list of directories to search for executable names. Its value is a list of directories (separated by a colon, or ‘<:>’). When the address of the executable is not explicitly given (like ‘./configure’ above), the system will look for the executable in the directories specified by ‘PATH’. If you have a computer nearby, try running the following command to see which directories your system will look into when it is searching for executable (binary) files, one example is printed here (notice how ‘/usr/bin’, in the ‘ls’ example above, is one of the directories in ‘PATH’): $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/bin By default ‘PATH’ usually contains system-wide directories, which are readable (but not writable) by all users, like the above example. Therefore if you don’t have root (or administrator) access, you need to add another directory to ‘PATH’ which you actually have write access to. The standard directory where you can keep installed files (not just executables) for your own user is the ‘~/.local/’ directory. The names of hidden files start with a ‘<.>’ (dot), so it will not show up in your common command-line listings, or on the graphical user interface. You can use any other directory, but this is the most recognized. The top installation directory will be used to keep all the package’s components: programs (executables), libraries, include (header) files, shared data (like manuals), or configuration files (see *note Review of library fundamentals:: for a thorough introduction to headers and linking). So it commonly has some of the following sub-directories for each class of installed components respectively: ‘bin/’, ‘lib/’, ‘include/’ ‘man/’, ‘share/’, ‘etc/’. Since the ‘PATH’ variable is only used for executables, you can add the ‘~/.local/bin’ directory (which keeps the executables/programs or more generally, “binary†files) to ‘PATH’ with the following command. As defined below, first the existing value of ‘PATH’ is used, then your given directory is added to its end and the combined value is put back in ‘PATH’ (run ‘‘$ echo $PATH’’ afterwards to check if it was added). $ PATH=$PATH:~/.local/bin Any executable that you installed in ‘~/.local/bin’ will now be usable without having to remember and write its full address. However, as soon as you leave/close your current terminal session, this modified ‘PATH’ variable will be forgotten. Adding the directories which contain executables to the ‘PATH’ environment variable each time you start a terminal is also very inconvenient and prone to errors. Fortunately, there are standard ‘startup files’ defined by your shell precisely for this (and other) purposes. There is a special startup file for every significant starting step: ‘/etc/profile’ and everything in ‘/etc/profile.d/’ These startup scripts are called when your whole system starts (for example after you turn on your computer). Therefore you need administrator or root privileges to access or modify them. ‘~/.bash_profile’ If you are using (GNU) Bash as your shell, the commands in this file are run once every time you log in to your account. ‘~/.bashrc’ If you are using (GNU) Bash as your shell, the commands here will be run each time you start a terminal (for example, when you open your terminal emulator in the graphic user interface). For security reasons, it is highly recommended to directly type in your ‘HOME’ directory value by hand in startup files instead of using variables. So in the following, let’s assume your user name is ‘‘name’’ (so ‘~’ may be replaced with ‘/home/name’). To add ‘~/.local/bin’ to your ‘PATH’ automatically on any startup file, you have to “export†the new value of ‘PATH’ in the startup file that is most relevant to you by adding this line: export PATH=$PATH:/home/name/.local/bin Now that you know your system will look into ‘~/.local/bin’ for executables, you can tell Gnuastro’s configure script to install everything in the top ‘~/.local’ directory using the ‘--prefix’ option. When you subsequently run ‘$ make install’, all the install-able files will be put in their respective directory under ‘~/.local/’ (the executables in ‘~/.local/bin’, the compiled library files in ‘~/.local/lib’, the library header files in ‘~/.local/include’ and so on, to learn more about these different files, please see *note Review of library fundamentals::). Note that tilde (‘<~>’) expansion will not happen if you put a ‘<=>’ between ‘--prefix’ and ‘~/.local’(3), so we have avoided the <=> character here which is optional in GNU-style options, see *note Options::. $ ./configure --prefix ~/.local You can install everything (including libraries like GSL, CFITSIO, or WCSLIB which are Gnuastro’s mandatory dependencies, see *note Mandatory dependencies::) locally by configuring them as above. However, recall that ‘PATH’ is only for executable files, not libraries and that libraries can also depend on other libraries. For example WCSLIB depends on CFITSIO and Gnuastro needs both. Therefore, when you installed a library in a non-recognized directory, you have to guide the program that depends on them to look into the necessary library and header file directories. To do that, you have to define the ‘LDFLAGS’ and ‘CPPFLAGS’ environment variables respectively. This can be done while calling ‘./configure’ as shown below: $ ./configure LDFLAGS=-L/home/name/.local/lib \ CPPFLAGS=-I/home/name/.local/include \ --prefix ~/.local It can be annoying/buggy to do this when configuring every software that depends on such libraries. Hence, you can define these two variables in the most relevant startup file (discussed above). The convention on using these variables doesn’t include a colon to separate values (as ‘PATH’-like variables do), they use white space characters and each value is prefixed with a compiler option(4): note the ‘-L’ and ‘-I’ above (see *note Options::), for ‘-I’ see *note Headers::, and for ‘-L’, see *note Linking::. Therefore we have to keep the value in double quotation signs to keep the white space characters and adding the following two lines to the startup file of choice: export LDFLAGS="$LDFLAGS -L/home/name/.local/lib" export CPPFLAGS="$CPPFLAGS -I/home/name/.local/include" Dynamic libraries are linked to the executable every time you run a program that depends on them (see *note Linking:: to fully understand this important concept). Hence dynamic libraries also require a special path variable called ‘LD_LIBRARY_PATH’ (same formatting as ‘PATH’). To use programs that depend on these libraries, you need to add ‘~/.local/lib’ to your ‘LD_LIBRARY_PATH’ environment variable by adding the following line to the relevant start-up file: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/name/.local/lib If you also want to access the Info (see *note Info::) and man pages (see *note Man pages::) documentations add ‘~/.local/share/info’ and ‘~/.local/share/man’ to your ‘INFOPATH’(5) and ‘MANPATH’ environment variables respectively. A final note is that order matters in the directories that are searched for all the variables discussed above. In the examples above, the new directory was added after the system specified directories. So if the program, library or manuals are found in the system wide directories, the user directory is no longer searched. If you want to search your local installation first, put the new directory before the already existing list, like the example below. export LD_LIBRARY_PATH=/home/name/.local/lib:$LD_LIBRARY_PATH This is good when a library, for example CFITSIO, is already present on the system, but the system-wide install wasn’t configured with the correct configuration flags (see *note CFITSIO::), or you want to use a newer version and you don’t have administrator or root access to update it on the whole system/server. If you update ‘LD_LIBRARY_PATH’ by placing ‘~/.local/lib’ first (like above), the linker will first find the CFITSIO you installed for yourself and link with it. It thus will never reach the system-wide installation. There are important security problems with using local installations first: all important system-wide executables and libraries (important executables like ‘ls’ and ‘cp’, or libraries like the C library) can be replaced by non-secure versions with the same file names and put in the customized directory (‘~/.local’ in this example). So if you choose to search in your customized directory first, please _be sure_ to keep it clean from executables or libraries with the same names as important system programs or libraries. *Summary:* When you are using a server which doesn’t give you administrator/root access AND you would like to give priority to your own built programs and libraries, not the version that is (possibly already) present on the server, add these lines to your startup file. See above for which startup file is best for your case and for a detailed explanation on each. Don’t forget to replace ‘‘/YOUR-HOME-DIR’’ with your home directory (for example ‘‘/home/your-id’’): export PATH="/YOUR-HOME-DIR/.local/bin:$PATH" export LDFLAGS="-L/YOUR-HOME-DIR/.local/lib $LDFLAGS" export MANPATH="/YOUR-HOME-DIR/.local/share/man/:$MANPATH" export CPPFLAGS="-I/YOUR-HOME-DIR/.local/include $CPPFLAGS" export INFOPATH="/YOUR-HOME-DIR/.local/share/info/:$INFOPATH" export LD_LIBRARY_PATH="/YOUR-HOME-DIR/.local/lib:$LD_LIBRARY_PATH" Afterwards, you just need to add an extra ‘--prefix=/YOUR-HOME-DIR/.local’ to the ‘./configure’ command of the software that you intend to install. Everything else will be the same as a standard build and install, see *note Quick start::. ---------- Footnotes ---------- (1) By running ‘$ export myvariable=a_test_value’ instead of the simpler case in the text (2) You can use shell variables for other actions too, for example to temporarily keep some names or run loops on some files. (3) If you insist on using ‘<=>’, you can use ‘--prefix=$HOME/.local’. (4) These variables are ultimately used as options while building the programs, so every value has be an option name followed be a value as discussed in *note Options::. (5) Info has the following convention: “If the value of ‘INFOPATH’ ends with a colon [or it isn’t defined] ..., the initial list of directories is constructed by appending the build-time default to the value of ‘INFOPATH’.†So when installing in a non-standard directory and if ‘INFOPATH’ was not initially defined, add a colon to the end of ‘INFOPATH’ as shown below, otherwise Info will not be able to find system-wide installed documentation: ‘echo 'export INFOPATH=$INFOPATH:/home/name/.local/share/info:' >> ~/.bashrc’ Note that this is only an internal convention of Info, do not use it for other ‘*PATH’ variables.  File: gnuastro.info, Node: Executable names, Next: Configure and build in RAM, Prev: Installation directory, Up: Configuring 3.3.1.3 Executable names ........................ At first sight, the names of the executables for each program might seem to be uncommonly long, for example ‘astnoisechisel’ or ‘astcrop’. We could have chosen terse (and cryptic) names like most programs do. We chose this complete naming convention (something like the commands in TeX) so you don’t have to spend too much time remembering what the name of a specific program was. Such complete names also enable you to easily search for the programs. To facilitate typing the names in, we suggest using the shell auto-complete. With this facility you can find the executable you want very easily. It is very similar to file name completion in the shell. For example, simply by typing the letters below (where <[TAB]> stands for the Tab key on your keyboard) $ ast[TAB][TAB] you will get the list of all the available executables that start with ‘ast’ in your ‘PATH’ environment variable directories. So, all the Gnuastro executables installed on your system will be listed. Typing the next letter for the specific program you want along with a Tab, will limit this list until you get to your desired program. In case all of this does not convince you and you still want to type short names, some suggestions are given below. You should have in mind though, that if you are writing a shell script that you might want to pass on to others, it is best to use the standard name because other users might not have adopted the same customizations. The long names also serve as a form of documentation in such scripts. A similar reasoning can be given for option names in scripts: it is good practice to always use the long formats of the options in shell scripts, see *note Options::. The simplest solution is making a symbolic link to the actual executable. For example let’s assume you want to type ‘ic’ to run Crop instead of ‘astcrop’. Assuming you installed Gnuastro executables in ‘/usr/local/bin’ (default) you can do this simply by running the following command as root: # ln -s /usr/local/bin/astcrop /usr/local/bin/ic In case you update Gnuastro and a new version of Crop is installed, the default executable name is the same, so your custom symbolic link still works. The installed executable names can also be set using options to ‘$ ./configure’, see *note Configuring::. GNU Autoconf (which configures Gnuastro for your particular system), allows the builder to change the name of programs with the three options ‘--program-prefix’, ‘--program-suffix’ and ‘--program-transform-name’. The first two are for adding a fixed prefix or suffix to all the programs that will be installed. This will actually make all the names longer! You can use it to add versions of program names to the programs in order to simultaneously have two executable versions of a program. The third configure option allows you to set the executable name at install time using the SED program. SED is a very useful ‘stream editor’. There are various resources on the internet to use it effectively. However, we should caution that using configure options will change the actual executable name of the installed program and on every re-install (an update for example), you have to also add this option to keep the old executable name updated. Also note that the documentation or configuration files do not change from their standard names either. For example, let’s assume that typing ‘ast’ on every invocation of every program is really annoying you! You can remove this prefix from all the executables at configure time by adding this option: $ ./configure --program-transform-name='s/ast/ /'  File: gnuastro.info, Node: Configure and build in RAM, Prev: Executable names, Up: Configuring 3.3.1.4 Configure and build in RAM .................................. The configure and build process involves the creation, reading, and modification of a large number of files (input/output, or I/O). Therefore file I/O issues can directly affect the work of developers who need to configure and build Gnuastro numerous times. Some of these issues are listed below: • I/O will cause wear and tear on both the HDDs (mechanical failures) and SSDs (decreasing the lifetime). • Having the built files mixed with the source files can greatly affect backing up (synchronization) of source files (since it involves the management of a large number of small files that are regularly changed. Backup software can of course be configured to ignore the built files and directories. However, since the built files are mixed with the source files and can have a large variety, this will require a high level of customization. One solution to address both these problems is to use the tmpfs file system (https://en.wikipedia.org/wiki/Tmpfs). Any file in tmpfs is actually stored in the RAM (and possibly SAWP), not on HDDs or SSDs. The RAM is built for extensive and fast I/O. Therefore the large number of file I/Os associated with configuring and building will not harm the HDDs or SSDs. Due to the volatile nature of RAM, files in the tmpfs file-system will be permanently lost after a power-off. Since all configured and built files are derivative files (not files that have been directly written by hand) there is no problem in this and this feature can be considered as an automatic cleanup. The modern GNU C library (and thus the Linux kernel) define the ‘/dev/shm’ directory for this purpose (POSIX shared memory). So using GNU Build System’s ability to build in a separate directory (not necessarily in the source directory), we can configure and build the programs in ‘/dev/shm’ to benefit from the RAM. To simplify the process, Gnuastro comes with a ‘tmpfs-config-make’ script. This script will create a directory in the shared memory, and put a symbolic link to it (called ‘build’) in the top source directory (the backup/sync software therefore only needs to ignore this single link/file). The script will then internally change to that directory and configure and build (‘make -kjN’, where ‘N’ is the number of threads for a parallel build) Gnuastro in there. To benefit from this script, simply run the following command instead of ‘./configure’ and ‘make’: $ ./tmpfs-config-make After this script is finished, you can ‘‘cd build’’ and run other Make commands (for example, ‘‘make check’’, ‘‘make install’’, or ‘‘make pdf’’) from there. In Emacs, the command to be run with the ‘M-x compile’ command (by default: ‘make -k’) can be changed to ‘‘cd build; make -kjN’’, or ‘‘make -C build -kjN’’ (‘N’ is the number of threads; an integer $\geq1$). For subsequent builds (during development) the ‘M-x recompile’ command will also do all the building in the RAM while you modify the clean, and backed-up source files and make minimal/efficient use of your non-volatile HDD or SSD. This script can be used in any software which is configured and built using the GNU Build System. Just copy it in the top source directory of that software and run it from there. The default number of threads and location of the shared memory (‘/dev/shm’) are currently hard-coded within the script. If you need to change them, please open the script with a text editor and set their values manually.  File: gnuastro.info, Node: Tests, Next: A4 print book, Prev: Configuring, Up: Build and install 3.3.2 Tests ----------- After successfully building (compiling) the programs with the ‘$ make’ command you can check the installation before installing. To run the tests, run $ make check For every program some tests are designed to check some possible operations. Running the command above will run those tests and give you a final report. If everything is ok and you have built all the programs, all the tests should pass. In case any of the tests fail, please have a look at *note Known issues:: and if that still doesn’t fix your problem, look that the ‘./tests/test-suite.log’ file to see if the source of the error is something particular to your system or more general. If you feel it is general, please contact us because it might be a bug. Note that the tests of some programs depend on the outputs of other program’s tests, so if you have not installed them they might be skipped or fail. Prior to releasing every distribution all these tests are checked. If you have a reasonably modern terminal, the outputs of the successful tests will be colored green and the failed ones will be colored red. These scripts can also act as a good set of examples for you to see how the programs are run. All the tests are in the ‘tests/’ directory. The tests for each program are shell scripts (ending with ‘.sh’) in a sub-directory of this directory with the same name as the program. See *note Test scripts:: for more detailed information about these scripts in case you want to inspect them.  File: gnuastro.info, Node: A4 print book, Next: Known issues, Prev: Tests, Up: Build and install 3.3.3 A4 print book ------------------- The default print version of this book is provided in the letter paper size. If you would like to have the print version of this book on paper and you are living in a country which uses A4, then you can rebuild the book. The great thing about the GNU build system is that the book source code which is in Texinfo is also distributed with the program source code, enabling you to do such customizations (hacking). In order to change the paper size, you will need to have GNU Texinfo installed. Open ‘doc/gnuastro.texi’ with any text editor. This is the source file that created this book. In the first few lines you will see this line: @c@afourpaper In Texinfo, a line is commented with ‘@c’. Therefore, un-comment this line by deleting the first two characters such that it changes to: @afourpaper Save the file and close it. You can now run $ make pdf and the new PDF book will be available in ‘SRCdir/doc/gnuastro.pdf’. By changing the ‘pdf’ in ‘$ make pdf’ to ‘ps’ or ‘dvi’ you can have the book in those formats. Note that you can do this for any book that is in Texinfo format, they might not have ‘@afourpaper’ line, so you can add it close to the top of the Texinfo source file.  File: gnuastro.info, Node: Known issues, Prev: A4 print book, Up: Build and install 3.3.4 Known issues ------------------ Depending on your operating system and the version of the compiler you are using, you might confront some known problems during the configuration (‘$ ./configure’), compilation (‘$ make’) and tests (‘$ make check’). Here, their solutions are discussed. • ‘$ ./configure’: _Configure complains about not finding a library even though you have installed it._ The possible solution is based on how you installed the package: • From your distribution’s package manager. Most probably this is because your distribution has separated the header files of a library from the library parts. Please also install the ‘development’ packages for those libraries too. Just add a ‘-dev’ or ‘-devel’ to the end of the package name and re-run the package manager. This will not happen if you install the libraries from source. When installed from source, the headers are also installed. • From source. Then your linker is not looking where you installed the library. If you followed the instructions in this chapter, all the libraries will be installed in ‘/usr/local/lib’. So you have to tell your linker to look in this directory. To do so, add ‘LDFLAGS=-L/usr/local/lib’ to the Gnuastro configure script. If you want to use the libraries for your other programming projects, then export this environment variable similar to the case for ‘LD_LIBRARY_PATH’ explained below. • ‘$ make’: _Complains about an unknown function on a non-GNU based operating system._ In this case, please run ‘$ ./configure’ with the ‘--enable-gnulibcheck’ option to see if the problem is from the GNU Portability Library (Gnulib) not supporting your system or if there is a problem in Gnuastro, see *note Gnuastro configure options::. If the problem is not in Gnulib and after all its tests you get the same complaint from ‘make’, then please contact us at ‘bug-gnuastro@gnu.org’. The cause is probably that a function that we have used is not supported by your operating system and we didn’t included it along with the source tar ball. If the function is available in Gnulib, it can be fixed immediately. • ‘$ make’: _Can’t find the headers (.h files) of libraries installed from source._ Similar to the case for ‘LDFLAGS’ (above), your compiler is not looking in the right place, add ‘CPPFLAGS=-I/usr/local/include’ to ‘./configure’ to re-configure Gnuastro, then re-run make. • ‘$ make check’: _Only one ‘.sh’ test passes, all the rest fail._ It is highly likely that your distribution doesn’t look into the ‘/usr/local/lib’ directory when searching for shared libraries. To make sure it is added to the list of directories, run the following command and restart your terminal: (you can ignore the ‘\’ and extra space if you type it, it is only necessary if you copy and paste). See *note Installation directory:: for more details. echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib' \ >> ~/.bashrc • ‘$ make check’: _The tests relying on external programs (for example ‘fitstopdf.sh’ fail._) This is probably due to the fact that the version number of the external programs is too old for the tests we have preformed. Please update the program to a more recent version. For example to create a PDF image, you will need GPL Ghostscript, but older versions do not work, we have successfully tested it on version 9.15. Older versions might cause a failure in the test result. • ‘$ make pdf’: _The PDF book cannot be made._ To make a PDF book, you need to have the GNU Texinfo program (like any program, the more recent the better). A working TeX program is also necessary, which you can get from Tex Live(1). • After ‘make check’: do not copy the programs’ executables to another (for example, the installation) directory manually (using ‘cp’, or ‘mv’ for example). In the default configuration(2), the program binaries need to link with Gnuastro’s shared library which is also built and installed with the programs. Therefore, to run successfully before and after installation, linking modifications need to be made by GNU Libtool at installation time. ‘make install’ does this internally, but a simple copy might give linking errors when you run it. If you need to copy the executables, you can do so after installation. If your problem was not listed above, please file a bug report (*note Report a bug::). ---------- Footnotes ---------- (1) (2) If you configure Gnuastro with the ‘--disable-shared’ option, then the libraries will be statically linked to the programs and this problem won’t exist, see *note Linking::.  File: gnuastro.info, Node: Common program behavior, Next: Data containers, Prev: Installation, Up: Top 4 Common program behavior ************************* All the programs in Gnuastro share a set of common behavior mainly to do with user interaction to facilitate their usage. The most basic is how you can configure each program to do what you want: define the input, change parameter/option values, or identify the output. All Gnuastro programs can also read your desired configuration from pre-defined or user-specified files so you don’t have to specify all the (sometimes numerous) parameters on the command-line each time you run a program. These files define the “default†program behavior in each directory, for each user, or on each system. In other cases, some programs can greatly benefit from the many threads available in modern CPUs, so here we’ll also discuss how you can get the most out of your hardware. Among some other issues, we will also discuss how you can get immediate and distraction-free (without taking your hands off the keyboard!) help, or access to this whole book, on the command-line. * Menu: * Command-line:: How to use the command-line. * Configuration files:: Values for unspecified variables. * Multi-threaded operations:: How threads are managed in Gnuastro. * Numeric data types:: Different types and how to specify them. * Tables:: Recognized table formats. * Tessellation:: Tile the dataset into non-overlapping bins. * Getting help:: Getting more information on the go. * Automatic output:: About automatic output names. * Output headers:: Common headers to all FITS outputs.  File: gnuastro.info, Node: Command-line, Next: Configuration files, Prev: Common program behavior, Up: Common program behavior 4.1 Command-line ================ All the programs in Gnuastro are customized through the standard GNU style command-line options. Thus, we’ll start by defining this general style that is very common in many command-line tools on Unix-like operating systems. Finally, the options that are common to all the programs in Gnuastro are discussed. The command-line text that you type is passed onto the shell (or program managing the command-line) as a string of characters. See the “Invoking ProgramName†sections in this manual for some examples of commands with each program, for example *note Invoking asttable::. That string is then broken up into separate _tokens_ or _words_ by any _metacharacters_ (like space, tab, ‘|’, ‘>’ or ‘;’) that might exist in the text. To learn more, please see the GNU Bash manual, for the complete list of meta-characters and other GNU Bash definitions (GNU Bash is the most common shell program). Its “Shell Operation†section has a short summary of the steps the shell takes before passing the commands to the program you called. * Menu: * Arguments and options:: Basics of options and arguments. * Common options:: Common options to all Gnuastro programs.  File: gnuastro.info, Node: Arguments and options, Next: Common options, Prev: Command-line, Up: Command-line 4.1.1 Arguments and options --------------------------- On the command-line, the first thing you usually enter is the name of the program you want to run. After that, you can specify two types of input: _arguments_ and _options_. In the GNU-style, arguments are those tokens that are not preceded by any hyphens (‘-’, see *note Arguments::). Here is one example: $ astcrop --center=53.162551,-27.789676 -w10/3600 --mode=wcs udf.fits In this example, the argument is ‘udf.fits’. Arguments are most commonly the input file names containing your data. Options start with one or two hyphens, followed by an identifier for the option (the option’s name) and its value (see *note Options::). Through options you tell the program how to interpret the data. In this example, we are running *note Crop:: to crop a region of width 10 arc-seconds centered at the given RA and Dec from the input Hubble Ultra-Deep Field (UDF) FITS image. So options come with an identifier (the option name which is separate from their value). Arguments can be both mandatory and optional and unlike options they don’t have any identifiers (or help from you). Hence, their order might also matter (for example in ‘cp’ which is used for copying one file to another location). The outputs of ‘--usage’ and ‘--help’ shows which arguments are optional and which are mandatory, see *note --usage::. As their name suggests, _options_ on the command-line can be considered to be optional and most of the time, you don’t have to worry about what order you specify them in. When the order does matter, or the option can be invoked multiple times, it is explicitly mentioned in the “Invoking ProgramName†section of each program. In case your arguments or option values contain any of the shell’s meta-characters, you have to quote them. If there is only one such character, you can use a backslash (‘\’) before it. If there are multiple, it might be easier to simply put your whole argument or option value inside of double quotes (‘"’). In such cases, everything inside the double quotes will be seen as one token or word. For example, let’s say you want to specify the header data unit (HDU) of your FITS file using a complex expression like ‘‘3; images(exposure > 100)’’. If you simply add these after the ‘--hdu’ (‘-h’) option, the programs in Gnuastro will read the value to the HDU option as ‘‘3’’ and run. Then, Bash will attempt to run a separate command ‘‘images(exposure > 100)’’ and complain about a syntax error. This is because the semicolon (‘;’) is an ‘end of command’ character in the shell. To solve this problem you can simply put double quotes around the whole string you want to pass to ‘--hdu’ as seen below: $ astcrop --hdu="3; images(exposure > 100)" FITSimage.fits Alternatively you can put a ‘‘\’’ before every meta-character in this string, but try doing that, and probably you will agree that the double quotes are much more easier, elegant and readable. * Menu: * Arguments:: For specifying the main input files/operations. * Options:: For configuring the behavior of the program.  File: gnuastro.info, Node: Arguments, Next: Options, Prev: Arguments and options, Up: Arguments and options 4.1.1.1 Arguments ................. In Gnuastro, arguments are almost exclusively used as the input data file names. Please consult the first few paragraph of the “Invoking ProgramName†section for each program for a description of what it expects as input, how many arguments, or input data, it accepts, or in what order. Everything particular about how a program treats arguments, is explained under the “Invoking ProgramName†section for that program. Generally, if there is a standard file name extension for a particular format, that filename extension is used to separate the kinds of arguments. The list below shows the data formats that are recognized in Gnuastro’s programs based on their file name endings. Any argument that doesn’t end with the specified extensions below is considered to be a text file (usually catalogs, see *note Tables::). In some cases, a program can accept specific formats, for example *note ConvertType:: also accepts ‘.jpg’ images. • ‘.fits’: The standard file name ending of a FITS image. • ‘.fit’: Alternative (3 character) FITS suffix. • ‘.fits.Z’: A FITS image compressed with ‘compress’. • ‘.fits.gz’: A FITS image compressed with GNU zip (gzip). • ‘.fits.fz’: A FITS image compressed with ‘fpack’. • ‘.imh’: IRAF format image file. Through out this book and in the command-line outputs, whenever we want to generalize all such astronomical data formats in a text place holder, we will use ‘ASTRdata’, we will assume that the extension is also part of this name. Any file ending with these names is directly passed on to CFITSIO to read. Therefore you don’t necessarily have to have these files on your computer, they can also be located on an FTP or HTTP server too, see the CFITSIO manual for more information. CFITSIO has its own error reporting techniques, if your input file(s) cannot be opened, or read, those errors will be printed prior to the final error by Gnuastro.  File: gnuastro.info, Node: Options, Prev: Arguments, Up: Arguments and options 4.1.1.2 Options ............... Command-line options allow configuring the behavior of a program in all GNU/Linux applications for each particular execution on a particular input data. A single option can be called in two ways: _long_ or _short_. All options in Gnuastro accept the long format which has two hyphens an can have many characters (for example ‘--hdu’). Short options only have one hyphen (<->) followed by one character (for example ‘-h’). You can see some examples in the list of options in *note Common options:: or those for each program’s “Invoking ProgramName†section. Both formats are shown for those which support both. First the short is shown then the long. Usually, the short options are for when you are writing on the command-line and want to save keystrokes and time. The long options are good for shell scripts, where you aren’t usually rushing. Long options provide a level of documentation, since they are more descriptive and less cryptic. Usually after a few months of not running a program, the short options will be forgotten and reading your previously written script will not be easy. Some options need to be given a value if they are called and some don’t. You can think of the latter type of options as on/off options. These two types of options can be distinguished using the output of the ‘--help’ and ‘--usage’ options, which are common to all GNU software, see *note Getting help::. In Gnuastro we use the following strings to specify when the option needs a value and what format that value should be in. More specific tests will be done in the program and if the values are out of range (for example negative when the program only wants a positive value), an error will be reported. ‘INT’ The value is read as an integer. ‘FLT’ The value is read as a float. There are generally two types, depending on the context. If they are for fractions, they will have to be less than or equal to unity. ‘STR’ The value is read as a string of characters (for example a file name) or other particular settings like a HDU name, see below. To specify a value in the short format, simply put the value after the option. Note that since the short options are only one character long, you don’t have to type anything between the option and its value. For the long option you either need white space or an ‘=’ sign, for example ‘-h2’, ‘-h 2’, ‘--hdu 2’ or ‘--hdu=2’ are all equivalent. The short format of on/off options (those that don’t need values) can be concatenated for example these two hypothetical sequences of options are equivalent: ‘-a -b -c4’ and ‘-abc4’. As an example, consider the following command to run Crop: $ astcrop -Dr3 --wwidth 3 catalog.txt --deccol=4 ASTRdata The ‘$’ is the shell prompt, ‘astcrop’ is the program name. There are two arguments (‘catalog.txt’ and ‘ASTRdata’) and four options, two of them given in short format (‘-D’, ‘-r’) and two in long format (‘--width’ and ‘--deccol’). Three of them require a value and one (‘-D’) is an on/off option. If an abbreviation is unique between all the options of a program, the long option names can be abbreviated. For example, instead of typing ‘--printparams’, typing ‘--print’ or maybe even ‘--pri’ will be enough, if there are conflicts, the program will warn you and show you the alternatives. Finally, if you want the argument parser to stop parsing arguments beyond a certain point, you can use two dashes: ‘--’. No text on the command-line beyond these two dashes will be parsed. Gnuastro has two types of options with values, those that only take a single value are the most common type. If these options are repeated or called more than once on the command-line, the value of the last time it was called will be assigned to it. This is very useful when you are testing/experimenting. Let’s say you want to make a small modification to one option value. You can simply type the option with a new value in the end of the command and see how the script works. If you are satisfied with the change, you can remove the original option for human readability. If the change wasn’t satisfactory, you can remove the one you just added and not worry about forgetting the original value. Without this capability, you would have to memorize or save the original value somewhere else, run the command and then change the value again which is not at all convenient and is potentially cause lots of bugs. On the other hand, some options can be called multiple times in one run of a program and can thus take multiple values (for example see the ‘--column’ option in *note Invoking asttable::. In these cases, the order of stored values is the same order that you specified on the command-line. Gnuastro’s programs don’t keep any internal default values, so some options are mandatory and if they don’t have a value, the program will complain and abort. Most programs have many such options and typing them by hand on every call is impractical. To facilitate the user experience, after parsing the command-line, Gnuastro’s programs read special configuration files to get the necessary values for the options you haven’t identified on the command-line. These configuration files are fully described in *note Configuration files::. *CAUTION:* In specifying a file address, if you want to use the shell’s tilde expansion (‘~’) to specify your home directory, leave at least one space between the option name and your value. For example use ‘-o ~/test’, ‘--output ~/test’ or ‘--output= ~/test’. Calling them with ‘-o~/test’ or ‘--output=~/test’ will disable shell expansion. *CAUTION:* If you forget to specify a value for an option which requires one, and that option is the last one, Gnuastro will warn you. But if it is in the middle of the command, it will take the text of the next option or argument as the value which can cause undefined behavior. *NOTE:* In some contexts Gnuastro’s counting starts from 0 and in others 1. You can assume by default that counting starts from 1, if it starts from 0 for a special option, it will be explicitly mentioned.  File: gnuastro.info, Node: Common options, Prev: Arguments and options, Up: Command-line 4.1.2 Common options -------------------- To facilitate the job of the users and developers, all the programs in Gnuastro share some basic command-line options for the options that are common to many of the programs. The full list is classified as *note Input output options::, *note Processing options::, and *note Operating mode options::. In some programs, some of the options are irrelevant, but still recognized (you won’t get an unrecognized option error, but the value isn’t used). Unless otherwise mentioned, these options are identical between all programs. * Menu: * Input output options:: Common input/output options. * Processing options:: Options for common processing steps. * Operating mode options:: Common operating mode options.  File: gnuastro.info, Node: Input output options, Next: Processing options, Prev: Common options, Up: Common options 4.1.2.1 Input/Output options ............................ These options are to do with the input and outputs of the various programs. ‘-h STR/INT’ ‘--hdu=STR/INT’ The name or number of the desired Header Data Unit, or HDU, in the FITS image. A FITS file can store multiple HDUs or extensions, each with either an image or a table or nothing at all (only a header). Note that counting of the extensions starts from 0(zero), not 1(one). Counting from 0 is forced on us by CFITSIO which directly reads the value you give with this option (see *note CFITSIO::). When specifying the name, case is not important so ‘IMAGE’, ‘image’ or ‘ImAgE’ are equivalent. CFITSIO has many capabilities to help you find the extension you want, far beyond the simple extension number and name. See CFITSIO manual’s “HDU Location Specification†section for a very complete explanation with several examples. A ‘#’ is appended to the string you specify for the HDU(1) and the result is put in square brackets and appended to the FITS file name before calling CFITSIO to read the contents of the HDU for all the programs in Gnuastro. ‘-s STR’ ‘--searchin=STR’ Where to match/search for columns when the column identifier wasn’t a number, see *note Selecting table columns::. The acceptable values are ‘name’, ‘unit’, or ‘comment’. This option is only relevant for programs that take table columns as input. ‘-I’ ‘--ignorecase’ Ignore case while matching/searching column meta-data (in the field specified by the ‘--searchin’). The FITS standard suggests to treat the column names as case insensitive, which is strongly recommended here also but is not enforced. This option is only relevant for programs that take table columns as input. This option is not relevant to *note BuildProgram::, hence in that program the short option ‘-I’ is used for include directories, not to ignore case. ‘-o STR’ ‘--output=STR’ The name of the output file or directory. With this option the automatic output names explained in *note Automatic output:: are ignored. ‘-T STR’ ‘--type=STR’ The data type of the output depending on the program context. This option isn’t applicable to some programs like *note Fits:: and will be ignored by them. The different acceptable values to this option are fully described in *note Numeric data types::. ‘-D’ ‘--dontdelete’ By default, if the output file already exists, Gnuastro’s programs will silently delete it and put their own outputs in its place. When this option is activated, if the output file already exists, the programs will not delete it, will warn you, and will abort. ‘-K’ ‘--keepinputdir’ In automatic output names, don’t remove the directory information of the input file names. As explained in *note Automatic output::, if no output name is specified (with ‘--output’), then the output name will be made in the existing directory based on your input’s file name (ignoring the directory of the input). If you call this option, the directory information of the input will be kept and the automatically generated output name will be in the same directory as the input (usually with a suffix added). Note that his is only relevant if you are running the program in a different directory than the input data. ‘-t STR’ ‘--tableformat=STR’ The output table’s type. This option is only relevant when the output is a table and its format cannot be deduced from its filename. For example, if a name ending in ‘.fits’ was given to ‘--output’, then the program knows you want a FITS table. But there are two types of FITS tables: FITS ASCII, and FITS binary. Thus, with this option, the program is able to identify which type you want. The currently recognized values to this option are: ‘txt’ A plain text table with white-space characters between the columns (see *note Gnuastro text table format::). ‘fits-ascii’ A FITS ASCII table (see *note Recognized table formats::). ‘fits-binary’ A FITS binary table (see *note Recognized table formats::). ---------- Footnotes ---------- (1) With the ‘#’ character, CFITSIO will only read the desired HDU into your memory, not all the existing HDUs in the fits file.  File: gnuastro.info, Node: Processing options, Next: Operating mode options, Prev: Input output options, Up: Common options 4.1.2.2 Processing options .......................... Some processing steps are common to several programs, so they are defined as common options to all programs. Note that this class of common options is thus necessarily less common between all the programs than those described in *note Input output options::, or *note Operating mode options:: options. Also, if they are irrelevant for a program, these options will not display in the ‘--help’ output of the program. ‘--minmapsize=INT’ The minimum size (in bytes) to store the contents of each main processing array of a program as a file (on the non-volatile HDD/SSD), not in RAM. This can be very useful for large datasets which can be very memory intensive such that your RAM will not be sufficient to keep/process them. A random filename is assigned to the array (in a ‘.gnuastro’ directory within the running directory) which will keep the contents of the array as long as it is necessary. When this option has a value of ‘0’ (zero), all arrays that use this option in a program will actually be in a file (not in RAM). When the value is ‘-1’ (largest possible number in the unsigned integer types) these arrays will be definitely allocated in RAM. However, for complex programs like *note NoiseChisel::, it is recommended to not set it to ‘0’, but a value like ‘10000’ so the many small arrays necessary during processing are stored in RAM and only larger ones are saved as a file. Please note that using a non-volatile file (in the HDD/SDD) instead of RAM can significantly increase the program’s running time, especially on HDDs. So it is best to give this option large values by default. You can then decrease it for a specific program’s invocation on a large input after you see memory issues arise (for example an error, or the program not aborting and fully consuming your memory). The random file will be deleted once it is no longer needed by the program. The ‘.gnuastro’ directory will also be deleted if it has no other contents (you may also have configuration files in this directory, see *note Configuration files::). If you see randomly named files remaining in this directory, please send us a bug report so we address the problem, see *note Report a bug::. ‘-Z INT[,INT[,...]]’ ‘--tilesize=[,INT[,...]]’ The size of regular tiles for tessellation, see *note Tessellation::. For each dimension an integer length (in units of data-elements or pixels) is necessary. If the number of input dimensions is different from the number of values given to this option, the program will stop with an error. Values must be separated by commas (<,>) and can also be fractions (for example ‘4/2’). If they are fractions, the result must be an integer, otherwise an error will be printed. ‘-M INT[,INT[,...]]’ ‘--numchannels=INT[,INT[,...]]’ The number of channels for larger input tessellation, see *note Tessellation::. The number and types of acceptable values are similar to ‘--tilesize’. The only difference is that instead of length, the integers values given to this option represent the _number_ of channels, not their size. ‘-F FLT’ ‘--remainderfrac=FLT’ The fraction of remainder size along all dimensions to add to the first tile. See *note Tessellation:: for a complete description. This option is only relevant if ‘--tilesize’ is not exactly divisible by the input dataset’s size in a dimension. If the remainder size is larger than this fraction (compared to ‘--tilesize’), then the remainder size will be added with one regular tile size and divided between two tiles at the start and end of the given dimension. ‘--workoverch’ Ignore the channel borders for the high-level job of the given application. As a result, while the channel borders are respected in defining the small tiles (such that no tile will cross a channel border), the higher-level program operation will ignore them, see *note Tessellation::. ‘--checktiles’ Make a FITS file with the same dimensions as the input but each pixel is replaced with the ID of the tile that it is associated with. Note that the tile IDs start from 0. See *note Tessellation:: for more on Tiling an image in Gnuastro. ‘--oneelempertile’ When showing the tile values (for example with ‘--checktiles’, or when the program’s output is tessellated) only use one element for each tile. This can be useful when only the relative values given to each tile compared to the rest are important or need to be checked. Since the tiles usually have a large number of pixels within them the output will be much smaller, and so easier to read, write, store, or send. Note that when the full input size in any dimension is not exactly divisible by the given ‘--tilesize’ in that dimension, the edge tile(s) will have different sizes (in units of the input’s size), see ‘--remainderfrac’. But with this option, all displayed values are going to have the (same) size of one data-element. Hence, in such cases, the image proportions are going to be slightly different with this option. If your input image is not exactly divisible by the tile size and you want one value per tile for some higher-level processing, all is not lost though. You can see how many pixels were within each tile (for example to weight the values or discard some for later processing) with Gnuastro’s Statistics (see *note Statistics::) as shown below. The output FITS file is going to have two extensions, one with the median calculated on each tile and one with the number of elements that each tile covers. You can then use the ‘where’ operator in *note Arithmetic:: to set the values of all tiles that don’t have the regular area to a blank value. $ aststatistics --median --number --ontile input.fits \ --oneelempertile --output=o.fits $ REGULAR_AREA=1600 # Check second extension of `o.fits'. $ astarithmetic o.fits o.fits $REGULAR_AREA ne nan where \ -h1 -h2 Note that if ‘input.fits’ also has blank values, then the median on tiles with blank values will also be ignored with the command above (which is desirable). ‘--inteponlyblank’ When values are to be interpolated, only change the values of the blank elements, keep the non-blank elements untouched. ‘--interpnumngb=INT’ The number of nearby non-blank neighbors to use for interpolation.  File: gnuastro.info, Node: Operating mode options, Prev: Processing options, Up: Common options 4.1.2.3 Operating mode options .............................. Another group of options that are common to all the programs in Gnuastro are those to do with the general operation of the programs. The explanation for those that are not only limited to Gnuastro but are common to all GNU programs start with (GNU option). ‘--’ (GNU option) Stop parsing the command-line. This option can be useful in scripts or when using the shell history. Suppose you have a long list of options, and want to see if removing some of them (to read from configuration files, see *note Configuration files::) can give a better result. If the ones you want to remove are the last ones on the command-line, you don’t have to delete them, you can just add ‘--’ before them and if you don’t get what you want, you can remove the ‘--’ and get the same initial result. ‘--usage’ (GNU option) Only print the options and arguments and abort. This is very useful for when you know the what the options do, and have just forgot their long/short identifiers, see *note --usage::. ‘-?’ ‘--help’ (GNU option) Print all options with an explanation and abort. Adding this option will print all the options in their short and long formats, also displaying which ones need a value if they are called (with an ‘=’ after the long format followed by a string specifying the format, see *note Options::). A short explanation is also given for what the option is for. The program will quit immediately after the message is printed and will not do any form of processing, see *note --help::. ‘-V’ ‘--version’ (GNU option) Print a short message, showing the full name, version, copyright information and program authors and abort. On the first line, it will print the official name (not executable name) and version number of the program. Following this is a blank line and a copyright information. The program will not run. ‘-q’ ‘--quiet’ Don’t report steps. All the programs in Gnuastro that have multiple major steps will report their steps for you to follow while they are operating. If you do not want to see these reports, you can call this option and only error/warning messages will be printed. If the steps are done very fast (depending on the properties of your input) disabling these reports will also decrease running time. ‘--cite’ Print the BibTeX entry for Gnuastro and the particular program (if that program comes with a separate paper) and abort. Citations are vital for the continued work on Gnuastro. Gnuastro started and is continued based on separate research projects. So if you find any of the tools offered in Gnuastro to be useful in your research, please use the output of this command to cite the program and Gnuastro in your research paper. Thank you. Gnuastro is still new, there is no separate paper only devoted to Gnuastro yet. Therefore currently the paper to cite for Gnuastro is the paper for NoiseChisel which is the first published paper introducing Gnuastro to the astronomical community. Upon reaching a certain point, a paper completely devoted to Gnuastro will be published, see *note GNU Astronomy Utilities 1.0::. ‘-P’ ‘--printparams’ With this option, Gnuastro’s programs will read your command-line options and all the configuration files. If there is no problem (like a missing parameter or a value in the wrong format or range) and immediately before actually running, the programs will print the full list of option names, values and descriptions, sorted and grouped by context and abort. They will also report the version number, the date they were configured on your system and the time they were reported. As an example, you can give your full command-line options and even the input and output file names and finally just add ‘-P’ to check if all the parameters are finely set. If everything is ok, you can just run the same command (easily retrieved from the shell history, with the top arrow key) and simply remove the last two characters that showed this option. Since no program will actually start its processing when this option is called, the otherwise mandatory arguments for each program (for example input image or catalog files) are no longer required when you call this option. ‘--config=STR’ Parse ‘STR’ as a configuration file immediately when this option is confronted (see *note Configuration files::). The ‘--config’ option can be called multiple times in one run of any Gnuastro program on the command-line or in the configuration files. In any case, it will be immediately read (before parsing the rest of the options on the command-line, or lines in a configuration file). Note that by definition, later options on the command-line still take precedence over those in these in any configuration file, including the file(s) given to this option. Also see ‘--lastconfig’ and ‘--onlyversion’ on how this option can be used for reproducible results. ‘-S’ ‘--setdirconf’ Update the current directory configuration file for the Gnuastro program and quit. The full set of command-line and configuration file options will be parsed and options with a value will be written in the current directory configuration file for this program (see *note Configuration files::). If the configuration file or its directory doesn’t exist, it will be created. If a configuration file exists it will be replaced (after it, and all other configuration files have been read). In any case, the program will not run. This is the recommended method(1) to edit/set the configuration file for all future calls to Gnuastro’s programs. It will internally check if your values are in the correct range and type and save them according to the configuration file format, see *note Configuration file format::. So if there are unreasonable values to some options, the program will notify you and abort before writing the final configuration file. When this option is called, the otherwise mandatory arguments, for example input image or catalog file(s), are no longer mandatory (since the program will not run). ‘-U’ ‘--setusrconf’ Update the user configuration file and quit (see *note Configuration files::). See explanation under ‘--setdirconf’ for more details. ‘--lastconfig’ This is the last configuration file that must be read. When this option is confronted in any stage of reading the options (on the command-line or in a configuration file), no other configuration file will be parsed, see *note Configuration file precedence:: and *note Current directory and User wide::. Like all on/off options, on the command-line, this option doesn’t take any values. But in a configuration file, it takes the values of ‘0’ or ‘1’, see *note Configuration file format::. If it is present in a configuration file with a value of ‘0’, then all later occurrences of this option will be ignored. ‘--onlyversion=STR’ Only run the program if Gnuastro’s version is exactly equal to ‘STR’ (see *note Version numbering::). Note that it is not compared as a number, but as a string of characters, so ‘0’, or ‘0.0’ and ‘0.00’ are different. If the running Gnuastro version is different, then this option will report an error and abort as soon as it is confronted on the command-line or in a configuration file. If the running Gnuastro version is the same as ‘STR’, then the program will run as if this option was not called. This is useful if you want your results to be exactly reproducible and not mistakenly run with an updated/newer or older version of the program. Besides internal algorithmic/behavior changes in programs, the existence of options or their names might change between versions (especially in these earlier versions of Gnuastro). Hence, when using this option (probably in a script or in a configuration file), be sure to call it before other options. The benefit is that, when the version differs, the other options won’t be parsed and you, or your collaborators/users, won’t get errors saying an option in your configuration doesn’t exist in the running version of the program. Here is one example of how this option can be used in conjunction with the ‘--lastconfig’ option. Let’s assume that you were satisfied with the results of this command: ‘astnoisechisel image.fits --detquant=0.95’ (along with various options set in various configuration files). You can save the state of NoiseChisel and reproduce that exact result on ‘image.fits’ later by following these steps (the the extra spaces, and <\>, are only for easy readability, if you want to try it out, only one space between each token is enough). $ echo "onlyversion X.XX" > reproducible.conf $ echo "lastconfig 1" >> reproducible.conf $ astnoisechisel image.fits --detquant=0.95 -P \ >> reproducible.conf ‘--onlyversion’ was available from Gnuastro 0.0, so putting it immediately at the start of a configuration file will ensure that later, you (or others using different version) won’t get a non-recognized option error in case an option was added/removed. ‘--lastconfig’ will inform the installed NoiseChisel to not parse any other configuration files. This is done because we don’t want the user’s user-wide or system wide option values affecting our results. Finally, with the third command, which has a ‘-P’ (short for ‘--printparams’), NoiseChisel will print all the option values visible to it (in all the configuration files) and the shell will append them to ‘reproduce.conf’. Hence, you don’t have to worry about remembering the (possibly) different options in the different configuration files. Afterwards, if you run NoiseChisel as shown below (telling it to read this configuration file with the ‘--config’ option). You can be sure that there will either be an error (for version mis-match) or it will produce exactly the same result that you got before. $ astnoisechisel --config=reproducible.conf ‘--log’ Some programs can generate extra information about their outputs in a log file. When this option is called in those programs, the log file will also be printed. If the program doesn’t generate a log file, this option is ignored. ‘-N INT’ ‘--numthreads=INT’ Use ‘INT’ CPU threads when running a Gnuastro program (see *note Multi-threaded operations::). If the value is zero (‘0’), or this option is not given on the command-line or any configuration file, the value will be determined at run-time: the maximum number of threads available to the system when you run a Gnuastro program. Note that multi-threaded programming is only relevant to some programs. In others, this option will be ignored. ---------- Footnotes ---------- (1) Alternatively, you can use your favorite text editor.  File: gnuastro.info, Node: Configuration files, Next: Multi-threaded operations, Prev: Command-line, Up: Common program behavior 4.2 Configuration files ======================= Each program needs a certain number of parameters to run. Supplying all the necessary parameters each time you run the program is very frustrating and prone to errors. Therefore all the programs read the values for the necessary options you have not given in the command line from one of several plain text files (which you can view and edit with any text editor). These files are known as configuration files and are usually kept in a directory named ‘etc/’ according to the file system hierarchy standard(1). The thing to have in mind is that none of the programs in Gnuastro keep any internal default value. All the values must either be stored in one of the configuration files or explicitly called in the command-line. In case the necessary parameters are not given through any of these methods, the program will print a missing option error and abort. The only exception to this is ‘--numthreads’, whose default value is determined at run-time using the number of threads available to your system, see *note Multi-threaded operations::. Of course, you can still provide a default value for the number of threads at any of the levels below, but if you don’t, the program will not abort. Also note that through automatic output name generation, the value to the ‘--output’ option is also not mandatory on the command-line or in the configuration files for all programs which don’t rely on that value as an input(2), see *note Automatic output::. * Menu: * Configuration file format:: ASCII format of configuration file. * Configuration file precedence:: Precedence of configuration files. * Current directory and User wide:: Local and user configuration files. * System wide:: System wide configuration files. ---------- Footnotes ---------- (1) (2) One example of a program which uses the value given to ‘--output’ as an input is ConvertType, this value specifies the type of the output through the value to ‘--output’, see *note Invoking astconvertt::.  File: gnuastro.info, Node: Configuration file format, Next: Configuration file precedence, Prev: Configuration files, Up: Configuration files 4.2.1 Configuration file format ------------------------------- The configuration files for each program have the standard program executable name with a ‘‘.conf’’ suffix. When you download the source code, you can find them in the same directory as the source code of each program, see *note Program source::. Any line in the configuration file whose first non-white character is a <#> is considered to be a comment and is ignored. An empty line is also similarly ignored. The long name of the option should be used as an identifier. The parameter name and parameter value have to be separated by any number of ‘white-space’ characters: space, tab or vertical tab. By default several space characters are used. If the value of an option has space characters (most commonly for the ‘hdu’ option), then the full value can be enclosed in double quotation signs (<">, similar to the example in *note Arguments and options::). If it is an option without a value in the ‘--help’ output (on/off option, see *note Options::), then the value should be ‘1’ if it is to be ‘on’ and ‘0’ otherwise. In each non-commented and non-blank line, any text after the first two words (option identifier and value) is ignored. If an option identifier is not recognized in the configuration file, the name of the file, the line number of the unrecognized option, and the unrecognized identifier name will be reported and the program will abort. If a parameter is repeated more more than once in the configuration files, accepts only one value, and is not set on the command-line, then only the first value will be used, the rest will be ignored. You can build or edit any of the directories and the configuration files yourself using any text editor. However, it is recommended to use the ‘--setdirconf’ and ‘--setusrconf’ options to set default values for the current directory or this user, see *note Operating mode options::. With these options, the values you give will be checked before writing in the configuration file. They will also print a set of commented lines guiding the reader and will also classify the options based on their context and write them in their logical order to be more understandable.  File: gnuastro.info, Node: Configuration file precedence, Next: Current directory and User wide, Prev: Configuration file format, Up: Configuration files 4.2.2 Configuration file precedence ----------------------------------- The option values in all the programs of Gnuastro will be filled in the following order. If an option only takes one value which is given in an earlier step, any value for that option in a later step will be ignored. Note that if the ‘lastconfig’ option is specified in any step below, all later files will be ignored (see *note Operating mode options::). The basic idea behind setting this progressive state of checking for parameter values is that separate users of a computer or separate folders in a user’s file system might need different values for some parameters. In each step, there can also be a configuration file containing the common options in all the programs: ‘gnuastro.conf’ (see *note Common options::). If options specific to one program are specified in this file, there will be un-recognized option errors, or unexpected behavior if the option has different behavior in another program. On the other hand, there is no problem with ‘astprogname.conf’ containing common options(1). 1. Command-line options, for a particular run of ProgramName. 2. ‘.gnuastro/astprogname.conf’ is parsed by ProgramName in the current directory. 3. ‘.gnuastro/gnuastro.conf’ is parsed by all Gnuastro programs in the current directory. 4. ‘$HOME/.local/etc/astprogname.conf’ is parsed by ProgramName in the user’s home directory (see *note Current directory and User wide::). 5. ‘$HOME/.local/etc/gnuastro.conf’ is parsed by all Gnuastro programs in the user’s home directory (see *note Current directory and User wide::). 6. ‘prefix/etc/astprogname.conf’ is parsed by ProgramName in the system-wide installation directory (see *note System wide:: for ‘prefix’). 7. ‘prefix/etc/gnuastro.conf’ is parsed by all Gnuastro programs in the system-wide installation directory (see *note System wide:: for ‘prefix’). *Manipulating the order:* You can manipulate this order or add new files with the following two options which are fully described in *note Operating mode options::: ‘--config’ Allows you to define any file to be parsed as a configuration file on the command-line or within the any other configuration file. Recall that the file given to ‘--config’ is parsed immediately when this option is confronted (on the command-line or in a configuration file). ‘--lastconfig’ Allows you to stop the parsing of subsequent configuration files. Note that if this option is given in a configuration file, it will be fully read, so its position in the configuration doesn’t matter (unlike ‘--config’). One example of benefiting from these configuration files can be this: raw telescope images usually have their main image extension in the second FITS extension, while processed FITS images usually only have one extension. If your system-wide default input extension is 0 (the first), then when you want to work with the former group of data you have to explicitly mention it to the programs every time. With this progressive state of default values to check, you can set different default values for the different directories that you would like to run Gnuastro in for your different purposes, so you won’t have to worry about this issue any more. The same can be said about the ‘gnuastro.conf’ files: by specifying a behavior in this single file, all Gnuastro programs in the respective directory, user, or system-wide steps will behave similarly. For example to keep the input’s directory when no specific output is given (see *note Automatic output::), or to not delete an existing file if it has the same name as a given output (see *note Input output options::). ---------- Footnotes ---------- (1) As an example, the ‘--setdirconf’ and ‘--setusrconf’ options will also write the common options they have read in their produced ‘astprogname.conf’.  File: gnuastro.info, Node: Current directory and User wide, Next: System wide, Prev: Configuration file precedence, Up: Configuration files 4.2.3 Current directory and User wide ------------------------------------- For the current (local) and user-wide directories, the configuration files are stored in the hidden sub-directories named ‘.gnuastro/’ and ‘$HOME/.local/etc/’ respectively. Unless you have changed it, the ‘$HOME’ environment variable should point to your home directory. You can check it by running ‘$ echo $HOME’. Each time you run any of the programs in Gnuastro, this environment variable is read and placed in the above address. So if you suddenly see that your home configuration files are not being read, probably you (or some other program) has changed the value of this environment variable. Although it might cause confusions like above, this dependence on the ‘HOME’ environment variable enables you to temporarily use a different directory as your home directory. This can come in handy in complicated situations. To set the user or current directory configuration files based on your command-line input, you can use the ‘--setdirconf’ or ‘--setusrconf’, see *note Operating mode options::.  File: gnuastro.info, Node: System wide, Prev: Current directory and User wide, Up: Configuration files 4.2.4 System wide ----------------- When Gnuastro is installed, the configuration files that are shipped with the distribution are copied into the (possibly system wide) ‘prefix/etc/’ directory. For more details on ‘prefix’, see *note Installation directory:: (by default it is: ‘/usr/local’). This directory is the final place (with the lowest priority) that the programs in Gnuastro will check to retrieve parameter values. If you remove an option and its value from the system wide configuration files, you either have to specify it in more immediate configuration files or set it each time in the command-line. Recall that none of the programs in Gnuastro keep any internal default values and will abort if they don’t find a value for the necessary parameters (except the number of threads and output file name). So even though you might never expect to use an optional option, it safe to have it available in this system-wide configuration file even if you don’t intend to use it frequently. Note that in case you install Gnuastro from your distribution’s repositories, ‘prefix’ will either be set to ‘/’ (the root directory) or ‘/usr’, so you can find the system wide configuration variables in ‘/etc/’ or ‘/usr/etc/’. The prefix of ‘/usr/local/’ is conventionally used for programs you install from source by your self as in *note Quick start::.  File: gnuastro.info, Node: Multi-threaded operations, Next: Numeric data types, Prev: Configuration files, Up: Common program behavior 4.3 Multi-threaded operations ============================= Some of the programs benefit significantly when you use all the threads your computer’s CPU has to offer to your operating system. The number of threads available can be larger than the number of physical (hardware) cores in the CPU (also known as Simultaneous multithreading). For example, in Intel’s CPUs (those that implement its Hyper-threading technology) the number of threads is usually double the number of physical cores in your CPU. On a GNU/Linux system, the number of threads available can be found with the command ‘$ nproc’ command (part of GNU Coreutils). Gnuastro’s programs can find the number of threads available to your system internally at run-time (when you execute the program). However, if a value is given to the ‘--numthreads’ option, the given number will be used, see *note Operating mode options:: and *note Configuration files:: for ways to use this option. Thus ‘--numthreads’ is the only common option in Gnuastro’s programs with a value that doesn’t have to be specified anywhere on the command-line or in the configuration files. * Menu: * A note on threads:: Caution and suggestion on using threads. * How to run simultaneous operations:: How to run things simultaneously.  File: gnuastro.info, Node: A note on threads, Next: How to run simultaneous operations, Prev: Multi-threaded operations, Up: Multi-threaded operations 4.3.1 A note on threads ----------------------- Spinning off threads is not necessarily the most efficient way to run an application. Creating a new thread isn’t a cheap operation for the operating system. It is most useful when the input data are fixed and you want the same operation to be done on parts of it. For example one input image to Crop and multiple crops from various parts of it. In this fashion, the image is loaded into memory once, all the crops are divided between the number of threads internally and each thread cuts out those parts which are assigned to it from the same image. On the other hand, if you have multiple images and you want to crop the same region(s) out of all of them, it is much more efficient to set ‘--numthreads=1’ (so no threads spin off) and run Crop multiple times simultaneously, see *note How to run simultaneous operations::. You can check the boost in speed by first running a program on one of the data sets with the maximum number of threads and another time (with everything else the same) and only using one thread. You will notice that the wall-clock time (reported by most programs at their end) in the former is longer than the latter divided by number of physical CPU cores (not threads) available to your operating system. Asymptotically these two times can be equal (most of the time they aren’t). So limiting the programs to use only one thread and running them independently on the number of available threads will be more efficient. Note that the operating system keeps a cache of recently processed data, so usually, the second time you process an identical data set (independent of the number of threads used), you will get faster results. In order to make an unbiased comparison, you have to first clean the system’s cache with the following command between the two runs. $ sync; echo 3 | sudo tee /proc/sys/vm/drop_caches *SUMMARY: Should I use multiple threads?* Depends: • If you only have *one* data set (image in most cases!), then yes, the more threads you use (with a maximum of the number of threads available to your OS) the faster you will get your results. • If you want to run the same operation on *multiple* data sets, it is best to set the number of threads to 1 and use Make, or GNU Parallel, as explained in *note How to run simultaneous operations::.  File: gnuastro.info, Node: How to run simultaneous operations, Prev: A note on threads, Up: Multi-threaded operations 4.3.2 How to run simultaneous operations ---------------------------------------- There are two(1) approaches to simultaneously execute a program: using GNU Parallel or Make (GNU Make is the most common implementation). The first is very useful when you only want to do one job multiple times and want to get back to your work without actually keeping the command you ran. The second is usually for more important operations, with lots of dependencies between the different products (for example a full scientific research). GNU Parallel When you only want to run multiple instances of a command on different threads and get on with the rest of your work, the best method is to use GNU parallel. Surprisingly GNU Parallel is one of the few GNU packages that has no Info documentation but only a Man page, see *note Info::. So to see the documentation after installing it please run $ man parallel As an example, let’s assume we want to crop a region fixed on the pixels (500, 600) with the default width from all the FITS images in the ‘./data’ directory ending with ‘sci.fits’ to the current directory. To do this, you can run: $ parallel astcrop --numthreads=1 --xc=500 --yc=600 ::: \ ./data/*sci.fits GNU Parallel can help in many more conditions, this is one of the simplest, see the man page for lots of other examples. For absolute beginners: the backslash (‘\’) is only a line breaker to fit nicely in the page. If you type the whole command in one line, you should remove it. Make Make is a program for building “targets†(e.g., files) using “recipes†(a set of operations) when their known “prerequisites†(other files) have been updated. It elegantly allows you to define dependency structures for building your final output and updating it efficiently when the inputs change. It is the most common infra-structure to build software today. Scientific research methodology is very similar to software development: you start by testing a hypothesis on a small sample of objects/targets with a simple set of steps. As you are able to get promising results, you improve the method and use it on a larger, more general, sample. In the process, you will confront many issues that have to be corrected (bugs in software development jargon). Make a wonderful tool to manage this style of development. It has been used to make reproducible papers, for example see the reproduction pipeline (https://gitlab.com/makhlaghi/NoiseChisel-paper) of the paper introducing *note NoiseChisel:: (one of Gnuastro’s programs). GNU Make(2) is the most common implementation which (similar to nearly all GNU programs, comes with a wonderful manual(3)). Make is very basic and simple, and thus the manual is short (the most important parts are in the first roughly 100 pages) and easy to read/understand. Make comes with a ‘--jobs’ (‘-j’) option which allows you to specify the maximum number of jobs that can be done simultaneously. For example if you have 8 threads available to your operating system. You can run: $ make -j8 With this command, Make will process your ‘Makefile’ and create all the targets (can be thousands of FITS images for example) simultaneously on 8 threads, while fully respecting their dependencies (only building a file/target when its prerequisites are successfully built). Make is thus strongly recommended for managing scientific research where robustness, archivability, reproducibility and speed(4) are very important. ---------- Footnotes ---------- (1) A third way would be to open multiple terminal emulator windows in your GUI, type the commands separately on each and press once on each terminal, but this is far too frustrating, tedious and prone to errors. It’s therefore not a realistic solution when tens, hundreds or thousands of operations (your research targets, multiplied by the operations you do on each) are to be done. (2) (3) (4) Besides its multi-threaded capabilities, Make will only re-build those targets that depend on a change you have made, not the whole work. For example, if you have set the prerequisites properly, you can easily test the changing of a parameter on your paper’s results without having to re-do everything (which is much faster). This allows you to be much more productive in easily checking various ideas/assumptions of the different stages of your research and thus produce a more robust result for your exciting science.  File: gnuastro.info, Node: Numeric data types, Next: Tables, Prev: Multi-threaded operations, Up: Common program behavior 4.4 Numeric data types ====================== At the lowest level, the computer stores everything in terms of ‘1’ or ‘0’. For example, each program in Gnuastro, or each astronomical image you take with the telescope is actually a string of millions of these zeros and ones. The space required to keep a zero or one is the smallest unit of storage, and is known as a _bit_. However, understanding and manipulating this string of bits is extremely hard for most people. Therefore, we define packages of these bits along with a standard on how to interpret the bits in each package as a _type_. The most basic standard for reading the bits is integer numbers ($..., -2, -1, 0, 1, 2, ...$, more bits will give larger limits). The common integer types are 8, 16, 32, and 64 bits wide. For each width, there are two standards for reading the bits: signed and unsigned integers. In the former, negative numbers are allowed and in the latter, they aren’t. The ‘unsigned’ types thus have larger positive limits (one extra bit), but no negative value. When the context of your work doesn’t involve negative numbers (for example counting, where negative is not defined), it is best to use the ‘unsigned’ types. For full numerical range of all integer types, see below. Another standard of converting a given number of bits to numbers is the floating point standard, this standard can approximately store any real number with a given precision. There are two common floating point types: 32-bit and 64-bit, for single and double precision floating point numbers respectively. The former is sufficient for data with less than 8 significant decimal digits (most astronomical data), while the latter is good for less than 16 significant decimal digits. The representation of real numbers as bits is much more complex than integers. If you are interested, you can start with the Wikipedia article (https://en.wikipedia.org/wiki/Floating_point). With the conversion operators in Gnuastro’s Arithmetic, you can change the types of data to each other, which is necessary in some contexts. For example the program/library, that you intend to feed the data into, only accepts floating point values, but you have an integer image. Another situation that conversion can be helpful is when you know that your data only has values that fit within ‘int8’ or ‘uint16’. However it is currently formatted in the ‘float64’ type. Operations involving floating point or larger integer types are significantly slower than integer or smaller-width types respectively. In the latter case, it also requires much more (by 8 or 4 times in the example above) storage space. So when you confront such situations and want to store/archive/transfter the data, it is best convert them to the most efficient type. The short and long names for the recognized numeric data types in Gnuastro are listed below. Both short and long names can be used when you want to specify a type. For example, as a value to the common option ‘--type’ (see *note Input output options::), or in the information comment lines of *note Gnuastro text table format::. The ranges listed below are inclusive. ‘u8’ ‘uint8’ 8-bit un-signed integers, range: $[0\rm{\ to\ }2^8-1]$ or $[0\rm{\ to\ }255]$. ‘i8’ ‘int8’ 8-bit signed integers, range: $[-2^7\rm{\ to\ }2^7-1]$ or $[-128\rm{\ to\ }127]$. ‘u16’ ‘uint16’ 16-bit un-signed integers, range: $[0\rm{\ to\ }2^{16}-1]$ or $[0\rm{\ to\ }65535]$. ‘i16’ ‘int16’ 16-bit signed integers, range: $[-2^{15}\rm{\ to\ }2^{15}-1]$ or $[-32768\rm{\ to\ }32767]$. ‘u32’ ‘uint32’ 32-bit un-signed integers, range: $[0\rm{\ to\ }2^{32}-1]$ or $[0\rm{\ to\ }4294967295]$. ‘i32’ ‘int32’ 32-bit signed integers, range: $[-2^{31}\rm{\ to\ }2^{31}-1]$ or $[-2147483648\rm{\ to\ }2147483647]$. ‘u64’ ‘uint64’ 64-bit un-signed integers, range $[0\rm{\ to\ }2^{64}-1]$ or $[0\rm{\ to\ }18446744073709551615]$. ‘i64’ ‘int64’ 64-bit signed integers, range: $[-2^{63}\rm{\ to\ }2^{63}-1]$ or $[-9223372036854775808\rm{\ to\ }9223372036854775807]$. ‘f32’ ‘float32’ 32-bit (single-precision) floating point types. The maximum (minimum is its negative) possible value is $3.402823\times10^{38}$. Single-precision floating points can accurately represent a floating point number up to $\sim7.2$ significant decimals. Given the heavy noise in astronomical data, this is usually more than sufficient for storing results. ‘f64’ ‘float64’ 64-bit (double-precision) floating point types. The maximum (minimum is its negative) possible value is $\sim10^{308}$. Double-precision floating points can accurately represent a floating point number $\sim15.9$ significant decimals. This is usually good for processing (mixing) the data internally, for example a sum of single precision data (and later storing the result as ‘float32’). *Some file formats don’t recognize all types.* Some file formats don’t recognize all the types, for example the FITS standard (see *note Fits::) does not define ‘uint64’ in binary tables or images. When a type is not acceptable for output into a given file format, the respective Gnuastro program or library will let you know and abort. On the command-line, you can use the *note Arithmetic:: program to convert the numerical type of a dataset, in the libraries, you can call ‘gal_data_copy_to_new_type’. gnuastro-0.5/doc/gnuastro.info0000644000175000017500000004667213217220437013445 00000000000000This is gnuastro.info, produced by makeinfo version 6.5 from gnuastro.texi. This book documents version 0.5 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2017 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation Licenseâ€. INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro’s library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeNoise: (gnuastro)MakeNoise. Make (add) noise to an image. * astmknoise: (gnuastro)Invoking astmknoise. Options to MakeNoise. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. END-INFO-DIR-ENTRY  Indirect: gnuastro.info-1: 2942 gnuastro.info-2: 304058 gnuastro.info-3: 617914 gnuastro.info-4: 914677 gnuastro.info-5: 1203382  Tag Table: (Indirect) Node: Top2942 Node: Introduction22759 Node: Quick start25458 Node: Science and its tools28400 Ref: Science and its tools-Footnote-137876 Ref: Science and its tools-Footnote-237930 Ref: Science and its tools-Footnote-338075 Ref: Science and its tools-Footnote-438210 Node: Your rights38313 Ref: Your rights-Footnote-140635 Node: Naming convention40744 Node: Version numbering41881 Ref: Version numbering-Footnote-144958 Node: GNU Astronomy Utilities 1.045262 Ref: GNU Astronomy Utilities 1.0-Footnote-147203 Node: New to GNU/Linux?47235 Node: Command-line interface49199 Ref: Command-line interface-Footnote-154974 Ref: Command-line interface-Footnote-255006 Ref: Command-line interface-Footnote-355108 Node: Report a bug55344 Ref: Report a bug-Footnote-161189 Ref: Report a bug-Footnote-261252 Node: Suggest new feature61314 Node: Announcements64223 Node: Conventions64704 Node: Acknowledgments66391 Node: Tutorials69261 Ref: Tutorials-Footnote-170954 Node: Hubble visually checks and classifies his catalog71593 Ref: Hubble visually checks and classifies his catalog-Footnote-180313 Ref: Hubble visually checks and classifies his catalog-Footnote-280673 Ref: Hubble visually checks and classifies his catalog-Footnote-380913 Ref: Hubble visually checks and classifies his catalog-Footnote-481064 Ref: Hubble visually checks and classifies his catalog-Footnote-581308 Node: Sufi simulates a detection81354 Ref: Sufi simulates a detection-Footnote-1101250 Ref: Sufi simulates a detection-Footnote-2101544 Node: General program usage tutorial101922 Ref: General program usage tutorial-Footnote-1154382 Ref: General program usage tutorial-Footnote-2154460 Ref: General program usage tutorial-Footnote-3154505 Ref: General program usage tutorial-Footnote-4154550 Ref: General program usage tutorial-Footnote-5154631 Ref: General program usage tutorial-Footnote-6154768 Ref: General program usage tutorial-Footnote-7154900 Ref: General program usage tutorial-Footnote-8155116 Ref: General program usage tutorial-Footnote-9155219 Node: Installation155275 Ref: Installation-Footnote-1157850 Node: Dependencies157937 Node: Mandatory dependencies159315 Node: GNU Scientific Library161456 Node: CFITSIO162303 Ref: CFITSIO-Footnote-1165571 Node: WCSLIB165733 Ref: WCSLIB-Footnote-1167316 Ref: WCSLIB-Footnote-2167450 Node: Optional dependencies167536 Ref: Optional dependencies-Footnote-1172000 Node: Bootstrapping dependencies172279 Ref: Bootstrapping dependencies-Footnote-1178398 Ref: Bootstrapping dependencies-Footnote-2178671 Ref: Bootstrapping dependencies-Footnote-3179133 Ref: Bootstrapping dependencies-Footnote-4179439 Ref: Bootstrapping dependencies-Footnote-5179591 Node: Downloading the source179797 Node: Release tarball180781 Node: Version controlled source184013 Ref: Version controlled source-Footnote-1186947 Ref: Version controlled source-Footnote-2186977 Node: Bootstrapping187250 Ref: Bootstrapping-Footnote-1192636 Node: Synchronizing192756 Ref: Synchronizing-Footnote-1196300 Node: Build and install196496 Node: Configuring198211 Node: Gnuastro configure options199871 Node: Installation directory203588 Ref: Installation directory-Footnote-1217897 Ref: Installation directory-Footnote-2217995 Ref: Installation directory-Footnote-3218125 Ref: Installation directory-Footnote-4218208 Ref: Installation directory-Footnote-5218382 Node: Executable names219038 Node: Configure and build in RAM222920 Node: Tests226688 Node: A4 print book228329 Node: Known issues229727 Ref: Known issues-Footnote-1234782 Ref: Known issues-Footnote-2234821 Node: Common program behavior235009 Node: Command-line236760 Node: Arguments and options238140 Node: Arguments241512 Node: Options243657 Node: Common options250070 Node: Input output options250944 Ref: Input output options-Footnote-1255561 Node: Processing options255698 Node: Operating mode options262760 Ref: Operating mode options-Footnote-1274621 Node: Configuration files274683 Ref: Configuration files-Footnote-1276669 Ref: Configuration files-Footnote-2276738 Node: Configuration file format276959 Node: Configuration file precedence279366 Ref: Configuration file precedence-Footnote-1283415 Node: Current directory and User wide283584 Node: System wide284849 Node: Multi-threaded operations286368 Node: A note on threads287822 Node: How to run simultaneous operations290386 Ref: How to run simultaneous operations-Footnote-1294332 Ref: How to run simultaneous operations-Footnote-2294732 Ref: How to run simultaneous operations-Footnote-3294777 Ref: How to run simultaneous operations-Footnote-4294829 Node: Numeric data types295360 Node: Tables304058 Node: Recognized table formats307382 Node: Gnuastro text table format312765 Ref: Gnuastro text table format-Footnote-1322176 Node: Selecting table columns322402 Node: Tessellation326284 Node: Getting help332035 Node: --usage334538 Node: --help335884 Node: Man pages339753 Node: Info340584 Node: help-gnuastro mailing list342999 Node: Automatic output344069 Node: Output headers346458 Node: Data containers350782 Node: Fits353617 Node: Invoking astfits358402 Node: HDU manipulation363086 Node: Keyword manipulation365385 Ref: Keyword manipulation-Footnote-1373951 Node: ConvertType374808 Node: Recognized file formats376224 Ref: Recognized file formats-Footnote-1383956 Node: Color384003 Node: Invoking astconvertt387096 Node: Table397185 Ref: Table-Footnote-1399928 Node: Invoking asttable400322 Node: Data manipulation404546 Node: Crop405277 Node: Crop modes407425 Node: Crop section syntax414721 Node: Blank pixels417769 Node: Invoking astcrop419447 Node: Crop options422943 Ref: Crop options-Footnote-1436045 Ref: Crop options-Footnote-2436119 Node: Crop output436167 Node: Arithmetic439030 Node: Reverse polish notation440262 Ref: Reverse polish notation-Footnote-1442974 Ref: Reverse polish notation-Footnote-2443030 Node: Arithmetic operators443144 Node: Invoking astarithmetic462173 Node: Convolve470267 Ref: Convolve-Footnote-1472917 Ref: Convolve-Footnote-2473129 Node: Spatial domain convolution473413 Ref: Spatial domain convolution-Footnote-1474658 Node: Convolution process474719 Node: Edges in the spatial domain476939 Ref: Edges in the spatial domain-Footnote-1480170 Ref: Edges in the spatial domain-Footnote-2480266 Node: Frequency domain and Fourier operations480347 Node: Fourier series historical background483112 Ref: epicycle484690 Ref: Fourier series historical background-Footnote-1487894 Ref: Fourier series historical background-Footnote-2487995 Node: Circles and the complex plane488353 Ref: iandtime492856 Ref: Circles and the complex plane-Footnote-1493102 Node: Fourier series493471 Ref: Fourier series-Footnote-1497612 Node: Fourier transform497709 Ref: Fourier transform-Footnote-1500784 Node: Dirac delta and comb501030 Node: Convolution theorem504434 Ref: Convolution theorem-Footnote-1508534 Node: Sampling theorem508595 Ref: samplingfreq511371 Ref: Sampling theorem-Footnote-1515492 Node: Discrete Fourier transform515637 Ref: Discrete Fourier transform-Footnote-1518957 Ref: Discrete Fourier transform-Footnote-2519071 Node: Fourier operations in two dimensions519204 Ref: Fourier operations in two dimensions-Footnote-1521992 Node: Edges in the frequency domain522157 Node: Spatial vs. Frequency domain525849 Node: Convolution kernel527407 Node: Invoking astconvolve530149 Node: Warp536679 Ref: Warp-Footnote-1540119 Ref: Warp-Footnote-2540263 Node: Warping basics540425 Ref: Warping basics-Footnote-1546360 Ref: Warping basics-Footnote-2546456 Ref: Warping basics-Footnote-3546519 Ref: Warping basics-Footnote-4546580 Ref: Warping basics-Footnote-5546630 Node: Merging multiple warpings546886 Node: Resampling548368 Ref: Resampling-Footnote-1552645 Ref: Resampling-Footnote-2552730 Ref: Resampling-Footnote-3552823 Ref: Resampling-Footnote-4552889 Node: Invoking astwarp552937 Node: Data analysis564227 Node: Statistics565032 Node: Histogram and Cumulative Frequency Plot566608 Ref: Histogram and Cumulative Frequency Plot-Footnote-1570785 Node: Sigma clipping570943 Node: Sky value575330 Node: Sky value definition577385 Ref: Sky value definition-Footnote-1580718 Ref: Sky value definition-Footnote-2581038 Node: Sky value misconceptions581142 Ref: Sky value misconceptions-Footnote-1583503 Ref: Sky value misconceptions-Footnote-2583774 Node: Quantifying signal in a tile583859 Ref: Quantifying signal in a tile-Footnote-1588670 Node: Invoking aststatistics588765 Ref: Invoking aststatistics-Footnote-1614696 Ref: Invoking aststatistics-Footnote-2614902 Node: NoiseChisel617914 Node: NoiseChisel changes after publication621449 Ref: NoiseChisel changes after publication-Footnote-1626402 Node: Invoking astnoisechisel626823 Node: General NoiseChisel options631777 Node: Detection options642188 Node: Segmentation options659317 Node: NoiseChisel output666366 Node: MakeCatalog669225 Ref: MakeCatalog-Footnote-1672635 Ref: MakeCatalog-Footnote-2672880 Ref: MakeCatalog-Footnote-3673338 Ref: MakeCatalog-Footnote-4673460 Node: Detection and catalog production673655 Ref: Detection and catalog production-Footnote-1677326 Node: Quantifying measurement limits677383 Ref: Quantifying measurement limits-Footnote-1689737 Ref: Quantifying measurement limits-Footnote-2689808 Ref: Quantifying measurement limits-Footnote-3689983 Ref: Quantifying measurement limits-Footnote-4690066 Node: Measuring elliptical parameters690192 Node: Adding new columns to MakeCatalog698655 Node: Invoking astmkcatalog703457 Node: MakeCatalog input files708324 Node: MakeCatalog general settings710679 Node: Upper-limit magnitude settings713936 Node: MakeCatalog output columns720070 Node: Match732023 Node: Invoking astmatch732838 Node: Modeling and fittings742540 Node: MakeProfiles743164 Node: Modeling basics745822 Node: Defining an ellipse746602 Ref: Defining an ellipse-Footnote-1749584 Ref: Defining an ellipse-Footnote-2749784 Node: PSF749844 Ref: PSF-Footnote-1754163 Node: Stars754343 Node: Galaxies754995 Ref: Galaxies-Footnote-1756280 Node: Sampling from a function756483 Node: Oversampling761238 Node: If convolving afterwards762605 Node: Flux Brightness and magnitude763801 Ref: Flux Brightness and magnitude-Footnote-1766530 Ref: Flux Brightness and magnitude-Footnote-2766594 Ref: Flux Brightness and magnitude-Footnote-3766801 Ref: Flux Brightness and magnitude-Footnote-4767180 Ref: Flux Brightness and magnitude-Footnote-5767333 Node: Profile magnitude767448 Node: Invoking astmkprof769257 Node: MakeProfiles catalog773047 Node: MakeProfiles profile settings779486 Ref: MakeProfiles profile settings-Footnote-1788381 Node: MakeProfiles output dataset788531 Ref: MakeProfiles output dataset-Footnote-1798654 Node: MakeProfiles log file799230 Node: MakeNoise800582 Node: Noise basics801268 Node: Photon counting noise802087 Ref: Photon counting noise-Footnote-1806503 Node: Instrumental noise806611 Node: Final noised pixel value807978 Node: Generating random numbers808409 Ref: Generating random numbers-Footnote-1813285 Ref: Generating random numbers-Footnote-2813387 Ref: Generating random numbers-Footnote-3813458 Node: Invoking astmknoise813793 Node: High-level calculations816417 Node: CosmicCalculator817208 Node: Distance on a 2D curved space818634 Ref: flatplane821408 Ref: sphereandplane823635 Ref: Distance on a 2D curved space-Footnote-1830371 Ref: Distance on a 2D curved space-Footnote-2830653 Ref: Distance on a 2D curved space-Footnote-3831117 Ref: Distance on a 2D curved space-Footnote-4831281 Node: Extending distance concepts to 3D831369 Node: Invoking astcosmiccal832891 Node: CosmicCalculator input options834974 Node: CosmicCalculator specific calculations835907 Node: Library841116 Node: Review of library fundamentals843369 Node: Headers845498 Ref: Headers-Footnote-1855680 Ref: Headers-Footnote-2855738 Ref: Headers-Footnote-3855935 Ref: Headers-Footnote-4856052 Ref: Headers-Footnote-5856158 Node: Linking856239 Ref: Linking-Footnote-1865661 Ref: Linking-Footnote-2865852 Ref: Linking-Footnote-3866134 Ref: Linking-Footnote-4866308 Ref: Linking-Footnote-5866564 Node: Summary and example on libraries866658 Node: BuildProgram870568 Node: Invoking astbuildprog872109 Node: Gnuastro library880317 Ref: Gnuastro library-Footnote-1884363 Node: Configuration information884502 Ref: Configuration information-Footnote-1887334 Node: Multithreaded programming887389 Ref: Multithreaded programming-Footnote-1890450 Ref: Multithreaded programming-Footnote-2890610 Node: Implementation of pthread_barrier890672 Node: Gnuastro's thread related functions893582 Node: Library data types899331 Node: Library blank values914677 Node: Library data container921212 Node: Generic data container922379 Ref: Generic data container-Footnote-1934488 Ref: Generic data container-Footnote-2934547 Ref: Generic data container-Footnote-3934625 Node: Dataset size and allocation934694 Node: Arrays of datasets941493 Node: Copying datasets943532 Node: Dimensions946840 Node: Linked lists953948 Ref: Linked lists-Footnote-1959030 Node: List of strings959429 Node: List of int32_t962530 Node: List of size_t966200 Ref: List of size_t-Footnote-1970601 Node: List of float970703 Node: List of double974317 Node: List of void978070 Node: Ordered list of size_t980785 Node: Doubly linked ordered list of size_t983819 Node: List of gal_data_t987341 Node: FITS files990188 Node: FITS macros errors filenames991988 Node: CFITSIO and Gnuastro types994082 Node: FITS HDUs996627 Node: FITS header keywords999211 Node: FITS arrays1010433 Node: FITS tables1016334 Node: World Coordinate System1020732 Node: Text files1028926 Node: Table input output1034650 Node: Arithmetic on datasets1044358 Node: Tessellation library1056589 Node: Independent tiles1060750 Node: Tile grid1075966 Node: Bounding box1087647 Node: Polygons1090807 Node: Qsort functions1096062 Node: Permutations1098894 Ref: Permutations-Footnote-11101678 Node: Matching1101967 Node: Statistical operations1106788 Node: Binary datasets1120321 Node: Convolution functions1130207 Ref: Convolution functions-Footnote-11133442 Node: Interpolation1133495 Node: Git wrappers1136622 Node: Cosmology library1138451 Node: Library demo programs1141765 Node: Library demo - reading a image1142712 Node: Library demo - inspecting neighbors1144885 Node: Library demo - multi-threaded operation1146639 Node: Library demo - reading and writing table columns1152066 Node: Developing1157717 Node: Why C1160058 Ref: Why C-Footnote-11166040 Ref: Why C-Footnote-21166070 Ref: Why C-Footnote-31166104 Ref: Why C-Footnote-41166137 Ref: Why C-Footnote-51166202 Ref: Why C-Footnote-61166401 Ref: Why C-Footnote-71166507 Ref: Why C-Footnote-81166581 Ref: Why C-Footnote-91166708 Ref: Why C-Footnote-101166754 Ref: Why C-Footnote-111166985 Node: Program design philosophy1167031 Ref: Program design philosophy-Footnote-11170104 Ref: Program design philosophy-Footnote-21170366 Ref: Program design philosophy-Footnote-31170474 Node: Coding conventions1170522 Ref: Coding conventions-Footnote-11182977 Ref: Coding conventions-Footnote-21183049 Ref: Coding conventions-Footnote-31183357 Ref: Coding conventions-Footnote-41183520 Node: Program source1183790 Node: Mandatory source code files1184899 Node: The TEMPLATE program1193164 Node: Documentation1195822 Node: Building and debugging1203382 Node: Test scripts1206328 Ref: Test scripts-Footnote-11208945 Ref: Test scripts-Footnote-21209103 Node: Developer's checklist1209292 Node: Gnuastro project webpage1210916 Ref: Gnuastro project webpage-Footnote-11215198 Ref: Gnuastro project webpage-Footnote-21215252 Ref: Gnuastro project webpage-Footnote-31215288 Node: Developing mailing lists1215413 Node: Contributing to Gnuastro1217676 Node: Copyright assignment1219677 Node: Commit guidelines1223552 Ref: Commit guidelines-Footnote-11228285 Node: Production workflow1228348 Ref: Production workflow-Footnote-11231265 Ref: Production workflow-Footnote-21231344 Ref: Production workflow-Footnote-31231427 Node: Forking tutorial1231509 Ref: Forking tutorial-Footnote-11236069 Ref: Forking tutorial-Footnote-21236320 Node: Gnuastro programs list1236426 Node: Other useful software1240467 Node: SAO ds91240949 Ref: SAO ds9-Footnote-11242128 Node: Viewing multiextension FITS images1242157 Node: PGPLOT1245452 Ref: PGPLOT-Footnote-11249048 Node: GNU Free Doc. License1249100 Node: Index1274436  End Tag Table  Local Variables: coding: utf-8 End: gnuastro-0.5/doc/genauthors0000755000175000017500000000522012723106172013013 00000000000000#! /bin/sh # # Update/create authors for the documentation. But only when there is a Git # repository. When there is no $(top_srcdir)/.git directory, rely on the # existing authors list. If the authors.texi file has for some reason been # deleted from the non version controlled source, then the book will not be # made (Texinfo will complain about a missing authors.texi). # # Call like this: # genauthors TOP_SRCDIR # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Mosè Giordano # Copyright (C) 2016, Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Status report echo "Generating authors list for documentation." # Only do the job if a .git directory exists in the top source directory # (recall that this script is also present in the tar-ball with no .git # directory and might be run from there) if [ -d $1/.git ]; then # We will need to import the `.mailmap' file from the source directory # temporarily to correct the changing emails (see the comments in # `.mailmap'). Note that this script is run from within the `doc/' # directory. The original `.mailmap' is in the `TOP_SRCDIR', so even # when the source and build directories are the same, there is no # problem. ln -s $1/.mailmap .mailmap # Do NOT test if authors.texi is newer than ../.git. In some cases the # list of authors is created empty when running make in top directory # (in particular "make -jN" with N > 1), so authors.texi needs to be # recreated anyway. git --git-dir=$1/.git shortlog --numbered --summary --email --no-merges \ | sed -e 's// /' -e 's/@/@@/' -e "s/è/@\`e/" \ | awk '{printf "%s %s (%s, %s)@*\n", $2, $3, $4, $1}' \ > $1/doc/authors.texi # Clean up: rm .mailmap # Check if the authors.texi file was actually written: if [ ! -s $1/doc/authors.texi ]; then echo "authors.texi is empty!" exit 1 fi else echo "No Git repository detected, leaving $1/doc/authors.texi unchanged." fi gnuastro-0.5/doc/gnuastro.texi0000644000175000017500000450433313217175767013477 00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename gnuastro.info @settitle GNU Astronomy Utilities @documentencoding UTF-8 @allowcodebreaks false @c@afourpaper @c %**end of header @include version.texi @include formath.texi @c So dashes and underscores can be used in HTMLs @allowcodebreaks true @c So function output type is printed on first line @deftypefnnewline on @c Use section titles in cross references, not node titles. @xrefautomaticsectiontitle on @c For the indexes: @syncodeindex vr cp @syncodeindex pg cp @c Copyright information: @copying This book documents version @value{VERSION} of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright @copyright{} 2015-2017 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @c To include in the info directory. @dircategory Astronomy @direntry * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeNoise: (gnuastro)MakeNoise. Make (add) noise to an image. * astmknoise: (gnuastro)Invoking astmknoise. Options to MakeNoise. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. @end direntry @c Print title information: @titlepage @title GNU Astronomy Utilities @subtitle Astronomical data manipulation and analysis programs and libraries @subtitle for version @value{VERSION}, @value{UPDATED} @author Mohammad Akhlaghi @page Gnuastro (source code, book and webpage) authors (sorted by number of commits): @quotation @include authors.texi @end quotation @vskip 0pt plus 1filll @insertcopying @page @quotation @* @* @* @* @* @* @* @* @* For myself, I am interested in science and in philosophy only because I want to learn something about the riddle of the world in which we live, and the riddle of man's knowledge of that world. And I believe that only a revival of interest in these riddles can save the sciences and philosophy from narrow specialization and from an obscurantist faith in the expert's special skill, and in his personal knowledge and authority; a faith that so well fits our `post-rationalist' and `post-critical' age, proudly dedicated to the destruction of the tradition of rational philosophy, and of rational thought itself. @author Karl Popper. The logic of scientific discovery. 1959. @end quotation @end titlepage @shortcontents @contents @c Online version top information. @ifnottex @node Top, Introduction, (dir), (dir) @top GNU Astronomy Utilities @insertcopying @ifhtml To navigate easily in this web page, you can use the @code{Next}, @code{Previous}, @code{Up} and @code{Contents} links in the top and bottom of each page. @code{Next} and @code{Previous} will take you to the next or previous topic in the same level, for example from chapter 1 to chapter 2 or vice versa. To go to the sections or subsections, you have to click on the menu entries that are there when ever a sub-component to a title is present. @end ifhtml @end ifnottex @menu * Introduction:: General introduction. * Tutorials:: Tutorials or Cookbooks. * Installation:: Requirements and installation. * Common program behavior:: Common behavior in all programs. * Data containers:: Tools to operate on extensions and tables. * Data manipulation:: Tools for basic image manipulation. * Data analysis:: Analyze images. * Modeling and fittings:: Make and fit models. * High-level calculations:: Physical calculations. * Library:: Gnuastro's library of useful functions. * Developing:: The development environment. * Gnuastro programs list:: List and short summary of Gnuastro. * Other useful software:: Installing other useful software. * GNU Free Doc. License:: GNU Free documentation license. * Index:: Index of terms @detailmenu --- The Detailed Node Listing --- Introduction * Quick start:: A quick start to installation. * Science and its tools:: Some philosophy and history. * Your rights:: User rights. * Naming convention:: About names of programs in Gnuastro. * Version numbering:: Understanding version numbers. * New to GNU/Linux?:: Suggested GNU/Linux distribution. * Report a bug:: Search and report the bug you found. * Suggest new feature:: How to suggest a new feature. * Announcements:: How to stay up to date with Gnuastro. * Conventions:: Conventions used in this book. * Acknowledgments:: People who helped in the production. Version numbering * GNU Astronomy Utilities 1.0:: Plans for version 1.0 release New to GNU/Linux? * Command-line interface:: Introduction to the command-line Tutorials * Hubble visually checks and classifies his catalog:: Check a catalog. * Sufi simulates a detection:: Simulating a detection. * General program usage tutorial:: Usage of all programs in a good way. Installation * Dependencies:: Necessary packages for Gnuastro. * Downloading the source:: Ways to download the source code. * Build and install:: Configure, build and install Gnuastro. Dependencies * Mandatory dependencies:: Gnuastro will not install without these. * Optional dependencies:: Adding more functionality. * Bootstrapping dependencies:: If you have the version controlled source. Mandatory dependencies * GNU Scientific Library:: Installing GSL. * CFITSIO:: C interface to the FITS standard. * WCSLIB:: C interface to the WCS standard of FITS. Downloading the source * Release tarball:: Download a stable official release. * Version controlled source:: Get and use the version controlled source. Version controlled source * Bootstrapping:: Adding all the automatically generated files. * Synchronizing:: Keep your local clone up to date. Build and install * Configuring:: Configure Gnuastro * Tests:: Run tests to see if it is working. * A4 print book:: Customize the print book. * Known issues:: Issues you might encounter. Configuring * Gnuastro configure options:: Configure options particular to Gnuastro. * Installation directory:: Specify the directory to install. * Executable names:: Changing executable names. * Configure and build in RAM:: For minimal use of HDD or SSD, and clean source. Common program behavior * Command-line:: How to use the command-line. * Configuration files:: Values for unspecified variables. * Multi-threaded operations:: How threads are managed in Gnuastro. * Numeric data types:: Different types and how to specify them. * Tables:: Recognized table formats. * Tessellation:: Tile the dataset into non-overlapping bins. * Getting help:: Getting more information on the go. * Automatic output:: About automatic output names. * Output headers:: Common headers to all FITS outputs. Command-line * Arguments and options:: Basics of options and arguments. * Common options:: Common options to all Gnuastro programs. Arguments and options * Arguments:: For specifying the main input files/operations. * Options:: For configuring the behavior of the program. Common options * Input output options:: Common input/output options. * Processing options:: Options for common processing steps. * Operating mode options:: Common operating mode options. Configuration files * Configuration file format:: ASCII format of configuration file. * Configuration file precedence:: Precedence of configuration files. * Current directory and User wide:: Local and user configuration files. * System wide:: System wide configuration files. Multi-threaded operations * A note on threads:: Caution and suggestion on using threads. * How to run simultaneous operations:: How to run things simultaneously. Tables * Recognized table formats:: Table formats that are recognized in Gnuastro. * Gnuastro text table format:: Gnuastro's convention plain text tables. * Selecting table columns:: Identify/select certain columns from a table Recognized table formats * Gnuastro text table format:: Reading plain text tables Getting help * --usage:: View option names and value formats. * --help:: List all options with description. * Man pages:: Man pages generated from --help. * Info:: View complete book in terminal. * help-gnuastro mailing list:: Contacting experienced users. Data containers * Fits:: View and manipulate extensions and keywords. * ConvertType:: Convert data to various formats. * Table:: Read and Write FITS tables to plain text. Fits * Invoking astfits:: Arguments and options to Header. Invoking Fits * HDU manipulation:: Manipulate HDUs within a FITS file. * Keyword manipulation:: Manipulate metadata keywords in a HDU ConvertType * Recognized file formats:: Recognized file formats * Color:: Some explanations on color. * Invoking astconvertt:: Options and arguments to ConvertType. Table * Invoking asttable:: Options and arguments to Table. Data manipulation * Crop:: Crop region(s) from a dataset. * Arithmetic:: Arithmetic on input data. * Convolve:: Convolve an image with a kernel. * Warp:: Warp/Transform an image to a different grid. Crop * Crop modes:: Basic modes to define crop region. * Crop section syntax:: How to define a section to crop. * Blank pixels:: Pixels with no value. * Invoking astcrop:: Calling Crop on the command-line Invoking Crop * Crop options:: A list of all the options with explanation. * Crop output:: The outputs of Crop. Arithmetic * Reverse polish notation:: The current notation style for Arithmetic * Arithmetic operators:: List of operators known to Arithmetic * Invoking astarithmetic:: How to run Arithmetic: options and output Convolve * Spatial domain convolution:: Only using the input image values. * Frequency domain and Fourier operations:: Using frequencies in input. * Spatial vs. Frequency domain:: When to use which? * Convolution kernel:: How to specify the convolution kernel. * Invoking astconvolve:: Options and argument to Convolve. Spatial domain convolution * Convolution process:: More basic explanations. * Edges in the spatial domain:: Dealing with the edges of an image. Frequency domain and Fourier operations * Fourier series historical background:: Historical background. * Circles and the complex plane:: Interpreting complex numbers. * Fourier series:: Fourier Series definition. * Fourier transform:: Fourier Transform definition. * Dirac delta and comb:: Dirac delta and Dirac comb. * Convolution theorem:: Derivation of Convolution theorem. * Sampling theorem:: Sampling theorem (Nyquist frequency). * Discrete Fourier transform:: Derivation and explanation of DFT. * Fourier operations in two dimensions:: Extend to 2D images. * Edges in the frequency domain:: Interpretation of edge effects. Warp * Warping basics:: Basics of coordinate transformation. * Merging multiple warpings:: How to merge multiple matrices. * Resampling:: Warping an image is re-sampling it. * Invoking astwarp:: Arguments and options for Warp. Data analysis * Statistics:: Calculate dataset statistics. * NoiseChisel:: Detect objects in an image. * MakeCatalog:: Catalog from input and labeled images. * Match:: Match two datasets. Statistics * Histogram and Cumulative Frequency Plot:: Basic definitions. * Sigma clipping:: Definition of @mymath{\sigma}-clipping. * Sky value:: Definition and derivation of the Sky value. * Invoking aststatistics:: Arguments and options to Statistics. Sky value * Sky value definition:: Definition of the Sky/reference value. * Sky value misconceptions:: Wrong methods to estimate the Sky value. * Quantifying signal in a tile:: Method to estimate the presence of signal. NoiseChisel * NoiseChisel changes after publication:: Changes to the software after publication. * Invoking astnoisechisel:: Options and arguments for NoiseChisel. Invoking NoiseChisel * General NoiseChisel options:: General NoiseChisel preprocessing. * Detection options:: Configure detection in NoiseChisel. * Segmentation options:: Configure segmentation in NoiseChisel. * NoiseChisel output:: NoiseChisel's output format. MakeCatalog * Detection and catalog production:: Discussing why/how to treat these separately * Quantifying measurement limits:: For comparing different catalogs. * Measuring elliptical parameters:: Estimating elliptical parameters. * Adding new columns to MakeCatalog:: How to add new columns. * Invoking astmkcatalog:: Options and arguments to MakeCatalog. Invoking MakeCatalog * MakeCatalog input files:: Specifying the different input files. * MakeCatalog general settings:: Options for general column settings. * Upper-limit magnitude settings:: Necessary to define upper-limit magnitudes. * MakeCatalog output columns:: How to specify the columns in the output. Match * Invoking astmatch:: Inputs, outputs and options of Match Modeling and fitting * MakeProfiles:: Making mock galaxies and stars. * MakeNoise:: Make (add) noise to an image. MakeProfiles * Modeling basics:: Astronomical modeling basics. * If convolving afterwards:: Considerations for convolving later. * Flux Brightness and magnitude:: About these measures of energy. * Profile magnitude:: Definition of total profile magnitude. * Invoking astmkprof:: Inputs and Options for MakeProfiles. Modeling basics * Defining an ellipse:: An ellipse on a pixelated grid. * PSF:: Radial profiles for the PSF. * Stars:: Making mock star profiles. * Galaxies:: Radial profiles for galaxies. * Sampling from a function:: Sample a function on a pixelated canvas. * Oversampling:: Oversampling the model. Invoking MakeProfiles * MakeProfiles catalog:: Required catalog properties. * MakeProfiles profile settings:: Configuration parameters for all profiles. * MakeProfiles output dataset:: The canvas/dataset to build profiles over. * MakeProfiles log file:: A description of the optional log file. MakeNoise * Noise basics:: Noise concepts and definitions. * Invoking astmknoise:: Options and arguments to MakeNoise. Noise basics * Photon counting noise:: Poisson noise * Instrumental noise:: Readout, dark current and other sources. * Final noised pixel value:: How the final noised value is calculated. * Generating random numbers:: How random numbers are generated. High-level calculations * CosmicCalculator:: Calculate cosmological variables CosmicCalculator * Distance on a 2D curved space:: Distances in 2D for simplicity * Extending distance concepts to 3D:: Going to 3D (our real universe). * Invoking astcosmiccal:: How to run CosmicCalculator Invoking CosmicCalculator * CosmicCalculator input options:: Options to specify input conditions. * CosmicCalculator specific calculations:: Requesting specific outputs. Library * Review of library fundamentals:: Guide on libraries and linking. * BuildProgram:: Link and run source files with this library. * Gnuastro library:: Description of all library functions. * Library demo programs:: Demonstration for using libraries. Review of library fundamentals * Headers:: Header files included in source. * Linking:: Linking the compiled source files into one. * Summary and example on libraries:: A summary and example on using libraries. BuildProgram * Invoking astbuildprog:: Options and examples for using this program. Gnuastro library * Configuration information:: General information about library config. * Multithreaded programming:: Tools for easy multi-threaded operations. * Library data types:: Definitions and functions for types. * Library blank values:: Blank values and functions to deal with them. * Library data container:: General data container in Gnuastro. * Dimensions:: Dealing with coordinates and dimensions. * Linked lists:: Various types of linked lists. * FITS files:: Working with FITS data. * World Coordinate System:: Dealing with the world coordinate system. * Text files:: Functions to work on Text files. * Table input output:: Reading and writing table columns. * Arithmetic on datasets:: Arithmetic operations on a dataset. * Tessellation library:: Functions for working on tiles. * Bounding box:: Finding the bounding box. * Polygons:: Working with the vertices of a polygon. * Qsort functions:: Helper functions for Qsort. * Permutations:: Re-order (or permute) the values in a dataset. * Matching:: Matching catalogs based on position. * Statistical operations:: Functions for basic statistics. * Binary datasets:: Datasets that can only have values of 0 or 1. * Convolution functions:: Library functions to do convolution. * Interpolation:: Interpolate (over blank values possibly). * Git wrappers:: Wrappers for functions in libgit2. * Cosmology library:: Cosmological calculations. Multithreaded programming (@file{threads.h}) * Implementation of pthread_barrier:: Some systems don't have pthread_barrier * Gnuastro's thread related functions:: Functions for managing threads. Data container (@file{data.h}) * Generic data container:: Definition of Gnuastro's generic container. * Dataset size and allocation:: Functions for size and allocation. * Arrays of datasets:: Functions to help with array of datasets. * Copying datasets:: Functions to copy a dataset to a new one. Linked lists (@file{list.h}) * List of strings:: Simply linked list of strings. * List of int32_t:: Simply linked list of int32_ts. * List of size_t:: Simply linked list of size_ts. * List of float:: Simply linked list of floats. * List of double:: Simply linked list of doubles * List of void:: Simply linked list of void * pointers. * Ordered list of size_t:: Simply linked, ordered list of size_t. * Doubly linked ordered list of size_t:: Definition and functions. * List of gal_data_t:: Simply linked list Gnuastro's generic datatype. FITS files (@file{fits.h}) * FITS macros errors filenames:: General macros, errors and checking names. * CFITSIO and Gnuastro types:: Conversion between FITS and Gnuastro types. * FITS HDUs:: Opening and getting information about HDUs. * FITS header keywords:: Reading and writing FITS header keywords. * FITS arrays:: Reading and writing FITS images/arrays. * FITS tables:: Reading and writing FITS tables. Tessellation library (@file{tile.h}) * Independent tiles:: Work on or check independent tiles. * Tile grid:: Cover a full dataset with non-overlapping tiles. Library demo programs * Library demo - reading a image:: Read a FITS image into memory. * Library demo - inspecting neighbors:: Inspect the neighbors of a pixel. * Library demo - multi-threaded operation:: Doing an operation on threads. * Library demo - reading and writing table columns:: Simple Column I/O. Developing * Why C:: Why Gnuastro is designed in C. * Program design philosophy:: General ideas behind the package structure. * Coding conventions:: Gnuastro coding conventions. * Program source:: Conventions for the code. * Documentation:: Documentation is an integral part of Gnuastro. * Building and debugging:: Build and possibly debug during development. * Test scripts:: Understanding the test scripts. * Developer's checklist:: Checklist to finalize your changes. * Gnuastro project webpage:: Central hub for Gnuastro activities. * Developing mailing lists:: Stay up to date with Gnuastro's development. * Contributing to Gnuastro:: Share your changes with all users. Program source * Mandatory source code files:: Description of files common to all programs. * The TEMPLATE program:: Template for easy creation of a new program. Contributing to Gnuastro * Copyright assignment:: Copyright has to be assigned to the FSF. * Commit guidelines:: Guidelines for commit messages. * Production workflow:: Submitting your commits (work) for inclusion. * Forking tutorial:: Tutorial on workflow steps with Git. Other useful software * SAO ds9:: Viewing FITS images. * PGPLOT:: Plotting directly in C SAO ds9 * Viewing multiextension FITS images:: Configure SAO ds9 for multiextension images. @end detailmenu @end menu @node Introduction, Tutorials, Top, Top @chapter Introduction @cindex GNU coding standards @cindex GNU Astronomy Utilities (Gnuastro) GNU Astronomy Utilities (Gnuastro) is an official GNU package consisting of separate programs and libraries for the manipulation and analysis of astronomical data. All the programs share the same basic command-line user interface for the comfort of both the users and developers. Gnuastro is written to comply fully with the GNU coding standards so it integrates finely with the GNU/Linux operating system. This also enables astronomers to expect a fully familiar experience in the source code, building, installing and command-line user interaction that they have seen in all the other GNU software that they use. The official and always up to date version of this book (or manual) is freely available under @ref{GNU Free Doc. License} in various formats (pdf, html, plain text, info, and as its Texinfo source) at @url{http://www.gnu.org/software/gnuastro/manual/}. For users who are new to the GNU/Linux environment, unless otherwise specified most of the topics in @ref{Installation} and @ref{Common program behavior} are common to all GNU software, for example installation, managing command-line options or getting help (also see @ref{New to GNU/Linux?}). So if you are new to this empowering environment, we encourage you to go through these chapters carefully. They can be a starting point from which you can continue to learn more from each program's own manual and fully benefit from and enjoy this wonderful environment. Gnuastro also comes with a large set of libraries, so you can write your own programs using Gnuastro's building blocks, see @ref{Review of library fundamentals} for an introduction. Finally it must be mentioned that in Gnuastro, no change to any program will be released before it has been fully documented in this here first. As discussed in @ref{Science and its tools} this is the founding basis of the Gnuastro. @menu * Quick start:: A quick start to installation. * Science and its tools:: Some philosophy and history. * Your rights:: User rights. * Naming convention:: About names of programs in Gnuastro. * Version numbering:: Understanding version numbers. * New to GNU/Linux?:: Suggested GNU/Linux distribution. * Report a bug:: Search and report the bug you found. * Suggest new feature:: How to suggest a new feature. * Announcements:: How to stay up to date with Gnuastro. * Conventions:: Conventions used in this book. * Acknowledgments:: People who helped in the production. @end menu @node Quick start, Science and its tools, Introduction, Introduction @section Quick start @cindex Test @cindex Check @cindex Build @cindex Compile @cindex GNU Tar @cindex Uncompress source @cindex Source, uncompress The latest official release tarball is always available as @url{http://ftp.gnu.org/gnu/gnuastro/gnuastro-latest.tar.gz, @file{gnuastro-latest.tar.gz}}. For better compression (faster download), and robust archival features, an @url{http://www.nongnu.org/lzip/lzip.html, Lzip} compressed tarball is also available at @url{http://ftp.gnu.org/gnu/gnuastro/gnuastro-latest.tar.lz, @file{gnuastro-latest.tar.lz}}, see @ref{Release tarball} for more details on the tarball release. @cindex Gzip @cindex Lzip @cindex GNU Tar The Gzip library and program are commonly available on most systems. However, Gnuastro recommends Lzip as described above and the beta-releases are also only distributed in @file{tar.lz}. You can download and install Lzip's source (in @file{.tar.gz} format) from its webpage and follow the same process as below: Lzip has no dependencies, so simply decompress, then run @command{./configure}, @command{make}, @command{sudo make install}. Let's assume the downloaded tarball is in the @file{TOPGNUASTRO} directory. The first two commands below can be used to decompress the source. If you download @file{tar.lz} and your Tar implementation doesn't recognize Lzip (the second command fails), run the third and fourth lines. Note that lines starting with @code{##} don't need to be typed. @example ## Go into the download directory. $ cd TOPGNUASTRO ## Also works on `tar.gz'. GNU Tar recognizes both formats. $ tar xf gnuastro-latest.tar.lz ## Only when previous command fails. $ lzip -d gnuastro-latest.tar.lz $ tar xf gnuastro-latest.tar @end example Gnuastro has three mandatory dependencies and some optional dependencies for extra functionality, see @ref{Dependencies} for the full list. Links to the dependency sources and instructions on installing each are fully described there. When the mandatory dependencies are ready, you can configure, compile, check and install Gnuastro on your system with the following commands. @example $ cd gnuastro-X.X # Replace X.X with version number. $ ./configure $ make -j8 # Replace 8 with no. CPU threads. $ make check $ sudo make install @end example @noindent See @ref{Known issues} if you confront any complications. For each program there is an `Invoke ProgramName' sub-section in this book which explains how the programs should be run on the command-line (for example @ref{Invoking asttable}). You can read the same section on the command-line by running @command{$ info astprogname} (for example @command{info asttable}). The `Invoke ProgramName' sub-section starts with a few examples of each program and goes on to explain the invocation details. See @ref{Getting help} for all the options you have to get help. In @ref{Tutorials} some real life examples of how these programs might be used are given. @node Science and its tools, Your rights, Quick start, Introduction @section Science and its tools History of science indicates that there are always inevitably unseen faults, hidden assumptions, simplifications and approximations in all our theoretical models, data acquisition and analysis techniques. It is precisely these that will ultimately allow future generations to advance the existing experimental and theoretical knowledge through their new solutions and corrections. In the past, scientists would gather data and process them individually to achieve an analysis thus having a much more intricate knowledge of the data and analysis. The theoretical models also required little (if any) simulations to compare with the data. Today both methods are becoming increasingly more dependent on pre-written software. Scientists are dissociating themselves from the intricacies of reducing raw observational data in experimentation or from bringing the theoretical models to life in simulations. These `intricacies' are precisely those unseen faults, hidden assumptions, simplifications and approximations that define scientific progress. @quotation @cindex Anscombe F. J. Unfortunately, most persons who have recourse to a computer for statistical analysis of data are not much interested either in computer programming or in statistical method, being primarily concerned with their own proper business. Hence the common use of library programs and various statistical packages. ... It's time that was changed. @author F. J. Anscombe. The American Statistician, Vol. 27, No. 1. 1973 @end quotation @cindex Anscombe's quartet @cindex Statistical analysis @url{http://en.wikipedia.org/wiki/Anscombe%27s_quartet,Anscombe's quartet} demonstrates how four data sets with widely different shapes (when plotted) give nearly identical output from standard regression techniques. Anscombe uses this (now famous) quartet, which was introduced in the paper quoted above, to argue that ``Good statistical analysis is not a purely routine matter, and generally calls for more than one pass through the computer''. Anscombe's quartet can be generalized to say that users of a software cannot claim to understand how it works only based on the experience they have gained by frequently using it. This kind of subjective experience is prone to very serious mis-understandings about the data, what the software/statistical-method really does (especially as it gets more complicated), and thus the scientific interpretation of the result. This attitude is further encouraged through non-free software@footnote{@url{https://www.gnu.org/philosophy/free-sw.html}}. This approach to scientific software only helps in producing dogmas and an ``obscurantist faith in the expert's special skill, and in his personal knowledge and authority''@footnote{Karl Popper. The logic of scientific discovery. 1959. Larger quote is given at the start of the PDF (for print) version of this book.}. @quotation @cindex Douglas Rushkoff Program or be programmed. Choose the former, and you gain access to the control panel of civilization. Choose the latter, and it could be the last real choice you get to make. @author Douglas Rushkoff. Program or be programmed, O/R Books (2010). @end quotation It is obviously impractical for any one human being to gain the intricate knowledge explained above for every step of an analysis. On the other hand, scientific data can be very large and numerous, for example images produced by telescopes in astronomy. This requires very efficient algorithms. To make things worse, natural scientists have generally not been trained in the advanced software techniques, paradigms and architecture that are taught in computer science or engineering courses and thus used in most software. The GNU Astronomy Utilities are an effort to tackle this issue. Gnuastro is not just a software, this book is as important to the idea behind Gnuastro as the source code (software). This book has tried to learn from the success of the ``Numerical Recipes'' book in educating those who are not software engineers and computer scientists but still heavy users of computational algorithms, like astronomers. There are two major differences: the code and the explanations are segregated: the code is moved within the actual Gnuastro software source code and the underlying explanations are given here. In the source code every non-trivial step is heavily commented and correlated with this book, it follows the same logic of this book, and all the programs follow a similar internal data, function and file structure, see @ref{Program source}. Complementing the code, this book focuses on thoroughly explaining the concepts behind those codes (history, mathematics, science, software and usage advise when necessary) along with detailed instructions on how to run the programs. At the expense of frustrating ``professionals'' or ``experts'', this book and the comments in the code also intentionally avoid jargon and abbreviations. The source code and this book are thus intimately linked, and when considered as a single entity can be thought of as a real (an actual software accompanying the algorithms) ``Numerical Recipes'' for astronomy. The other major and arguably more important difference is that ``Numerical Recipes'' does not allow you to distribute any code that you have learned from it. So while it empowers the privileged individual who has access to it, it exacerbates social ignorance. For example it does not allow you to release your software's source code if you have used their codes, you can only publicly release binaries (a black box) to the community. Exactly at the opposite end of the spectrum, Gnuastro's source code is released under the GNU general public license (GPL) and this book is released under the GNU free documentation license. You are therefore free to distribute any software you create using parts of Gnuastro's source code or text, or figures from this book, see @ref{Your rights}. While developing the source code and this book together, the developers of Gnuastro aim to impose the minimum requirements on you (in computer science, engineering and even the mathematics behind the tools) to understand and modify any step of Gnuastro if you feel the need to do so, see @ref{Why C} and @ref{Program design philosophy}. @cindex Galileo, G. Imagine if Galileo did not have the technical knowledge to build a telescope. Astronomical objects could not be seen with the Dutch military design of the telescope. In the beginning of his ``The Sidereal Messenger'' (1610) he cautions the readers on this issue and instructs them on how to build a suitable instrument: without a detailed description of ``how'' he made his observations, no one would believe him. The same is true today, science cannot progress with a black box. Before he actually saw the moons of Jupiter, the mountains on the Moon or the crescent of Venus, he was “evasive†to Kepler@footnote{Galileo G. (Translated by Maurice A. Finocchiaro). @emph{The essential Galileo}. Hackett publishing company, first edition, 2008.}. Science is not independent of its tools. @cindex Ken Thomson @cindex Stroustrup, Bjarne Bjarne Stroustrup (creator of the C++ language) says: ``Without understanding software, you are reduced to believing in magic''. Ken Thomson (the designer or the Unix operating system) says ``I abhor a system designed for the `user' if that word is a coded pejorative meaning `stupid and unsophisticated'.'' Certainly no scientist (user of a scientific software) would want to be considered a believer in magic, or `stupid and unsophisticated'. However, this can happen when scientists get too distant from the raw data and are mainly indulging themselves in their own high-level (abstract) models (creations). For example, roughly five years before special relativity and about two decades before quantum mechanics fundamentally changed Physics, Kelvin is quoted as saying: @quotation @cindex Lord Kelvin @cindex William Thomson There is nothing new to be discovered in physics now. All that remains is more and more precise measurement. @author William Thomson (Lord Kelvin), 1900 @end quotation @noindent A few years earlier, in a speech Albert. A. Michelson said: @quotation @cindex Albert. A. Michelson @cindex Michelson, Albert. A. The more important fundamental laws and facts of physical science have all been discovered, and these are now so firmly established that the possibility of their ever being supplanted in consequence of new discoveries is exceedingly remote.... Our future discoveries must be looked for in the sixth place of decimals. @author Albert. A. Michelson, dedication of Ryerson Physics Lab, U. Chicago 1894 @end quotation @cindex Puzzle solving scientist @cindex Scientist, puzzle solver If scientists are considered to be more than mere ``puzzle solvers''@footnote{Thomas S. Kuhn. @emph{The Structure of Scientific Revolutions}, University of Chicago Press, 1962.} (simply adding to the decimals of known values or observing a feature in 10, 100, or 100000 more galaxies or stars, as Kelvin and Michelson clearly believed), they cannot just passively sit back and uncritically repeat the previous (observational or theoretical) methods/tools on new data. Today there is a wealth of raw telescope images ready (mostly for free) at the finger tips of anyone who is interested with a fast enough internet connection to download them. The only thing lacking is new ways to analyze this data and dig out the treasure that is lying hidden in them to existing methods and techniques. @quotation @cindex Jaynes E. T. New data that we insist on analyzing in terms of old ideas (that is, old models which are not questioned) cannot lead us out of the old ideas. However many data we record and analyze, we may just keep repeating the same old errors, missing the same crucially important things that the experiment was competent to find. @author Jaynes, Probability theory, the logic of science. Cambridge U. Press (2003). @end quotation @node Your rights, Naming convention, Science and its tools, Introduction @section Your rights @cindex GNU Texinfo The paragraphs below, in this section, belong to the GNU Texinfo@footnote{Texinfo is the GNU documentation system. It is used to create this book in all the various formats.} manual and are not written by us! The name ``Texinfo'' is just changed to ``GNU Astronomy Utilities'' or ``Gnuastro'' because they are released under the same licenses and it is beautifully written to inform you of your rights. @cindex Free software @cindex Copyright @cindex Public domain GNU Astronomy Utilities is ``free software''; this means that everyone is free to use it and free to redistribute it on certain conditions. Gnuastro is not in the public domain; it is copyrighted and there are restrictions on its distribution, but these restrictions are designed to permit everything that a good cooperating citizen would want to do. What is not allowed is to try to prevent others from further sharing any version of Gnuastro that they might get from you. Specifically, we want to make sure that you have the right to give away copies of the programs that relate to Gnuastro, that you receive the source code or else can get it if you want it, that you can change these programs or use pieces of them in new free programs, and that you know you can do these things. To make sure that everyone has such rights, we have to forbid you to deprive anyone else of these rights. For example, if you distribute copies of the Gnuastro related programs, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. Also, for our own protection, we must make certain that everyone finds out that there is no warranty for the programs that relate to Gnuastro. If these programs are modified by someone else and passed on, we want their recipients to know that what they have is not what we distributed, so that any problems introduced by others will not reflect on our reputation. @cindex GNU General Public License @cindex GNU Free Documentation License The precise conditions of the licenses for the programs currently being distributed that relate to Gnuastro are found in the @url{http://www.gnu.org/copyleft/gpl.html, GNU General Public license} that accompany them. This book is covered by the @url{http://www.gnu.org/copyleft/fdl.html, GNU Free Documentation License}. @node Naming convention, Version numbering, Your rights, Introduction @section Naming convention @cindex Names, programs @cindex Program names Gnuastro is a package of independent programs and a collection of libraries, here we are mainly concerned with the programs. Each program has an official name which consists of one or two words, describing what they do. The latter are printed with no space, for example NoiseChisel or Crop. On the command-line, you can run them with their executable names which start with an @file{ast} and might be an abbreviation of the official name, for example @file{astnoisechisel} or @file{astcrop}, see @ref{Executable names}. @pindex ProgramName @pindex @file{astprogname} We will use ``ProgramName'' for a generic official program name and @file{astprogname} for a generic executable name. In this book, the programs are classified based on what they do and thoroughly explained. An alphabetical list of the programs that are installed on your system with this installation are given in @ref{Gnuastro programs list}. That list also contains the executable names and version numbers along with a one line description. @node Version numbering, New to GNU/Linux?, Naming convention, Introduction @section Version numbering @cindex Version number @cindex Number, version @cindex Major version number @cindex Minor version number @cindex Mailing list: info-gnuastro Gnuastro can have two formats of version numbers, for official and unofficial releases. Official Gnuastro releases are announced on the @command{info-gnuastro} mailing list, they have a version control tag in Gnuastro's development history, and their version numbers are formatted like ``@file{A.B}''. @file{A} is a major version number, marking a significant planned achievement (for example see @ref{GNU Astronomy Utilities 1.0}), while @file{B} is a minor version number, see below for more on the distinction. Note that the numbers are not decimals, so version 2.34 is much more recent than version 2.5, which is not equal to 2.50. Gnuastro also allows a unique version number for unofficial releases. Unofficial releases can mark any point in Gnuastro's development history. This is done to allow astronomers to easily use any point in the version controlled history for their data-analysis and research publication. See @ref{Version controlled source} for a complete introduction. This section is not just for developers and is very straightforward, so please have a look if you are interested in the cutting-edge. This unofficial version number is a meaningful and easy to read string of characters, unique to that particular point of history. With this feature, users can easily stay up to date with the most recent bug fixes and additions that are committed between official releases. The unofficial version number is formatted like: @file{A.B.C-D}. @file{A} and @file{B} are the most recent official version number. @file{C} is the number of commits that have been made after version @file{A.B}. @file{D} is the first 4 or 5 characters of the commit hash number@footnote{Each point in Gnuastro's history is uniquely identified with a 40 character long hash which is created from its contents and previous history for example: @code{5b17501d8f29ba3cd610673261e6e2229c846d35}. So the string @file{D} in the version for this commit could be @file{5b17}, or @file{5b175}.}. Therefore, the unofficial version number `@code{3.92.8-29c8}', corresponds to the 8th commit after the official version @code{3.92} and its commit hash begins with @code{29c8}. The unofficial version number is sort-able (unlike the raw hash) and as shown above is very descriptive of the state of the unofficial release. Of course an official release is preferred for publication (since its tarballs are easily available and it has gone through more tests, making it more stable), so if an official release is announced prior to your publication's final review, please consider updating to the official release. The major version number is set by a major goal which is defined by the developers and user community before hand, for example see @ref{GNU Astronomy Utilities 1.0}. The incremental work done in minor releases are commonly small steps in achieving the major goal. Therefore, there is no limit on the number of minor releases and the difference between the (hypothetical) versions 2.927 and 3.0 can be a very small (negligible to the user) improvement that finalizes the defined goals. @menu * GNU Astronomy Utilities 1.0:: Plans for version 1.0 release @end menu @node GNU Astronomy Utilities 1.0, , Version numbering, Version numbering @subsection GNU Astronomy Utilities 1.0 @cindex Gnuastro major version number Currently (prior to Gnuastro 1.0), the aim of Gnuastro is to have a complete system for data manipulation and analysis at least similar to IRAF@footnote{@url{http://iraf.noao.edu/}}. So an astronomer can take all the standard data analysis steps (starting from raw data to the final reduced product and standard post-reduction tools) with the various programs in Gnuastro. @cindex Shell script The maintainers of each camera or detector on a telescope can provide a completely transparent shell script or Makefile to the observer for data analysis. This script can set configuration files for all the required programs to work with that particular camera. The script can then run the proper programs in the proper sequence. The user/observer can easily follow the standard shell script to understand (and modify) each step and the parameters used easily. Bash (or other modern GNU/Linux shell scripts) are very powerful and made for this gluing job. This will simultaneously improve performance and transparency. Shell scripting (or Makefiles) are also very basic constructs that are easy to learn and readily available as part of the Unix-like operating systems. If there is no program to do a desired step, Gnuastro's libraries can be used to build specific programs. The main factor is that all observatories or projects can freely contribute to Gnuastro and all simultaneously benefit from it (since it doesn't belong to any particular one of them), much like how for-profit organizations (for example RedHat, or Intel and many others) are major contributors to free and open source software for their shared benefit. Gnuastro's copyright has been fully awarded to GNU, so it doesn't belong to any particular astronomer or astronomical facility or project. @node New to GNU/Linux?, Report a bug, Version numbering, Introduction @section New to GNU/Linux? Some astronomers initially install and use the GNU/Linux operating systems because the software that their research community use can only be run in this environment, the transition is not necessarily easy. To encourage you in investing the patience and time to make this transition, we define the GNU/Linux system and argue for the command-line interface of scientific software and how it is worth the (apparently steep) learning curve. @ref{Command-line interface} contains a short overview of the very powerful command-line user interface. @ref{Tutorials} is a complete chapter with some real world example applications of Gnuastro making good use of GNU/Linux capabilities written for newcomers to this environment. It is fully explained, easy and (hopefully) entertaining. @cindex Linux @cindex GNU/Linux @cindex GNU C library @cindex GNU Compiler Collection You might have already noticed that we are not using the name ``Linux'', but ``GNU/Linux''. Please take the time to have a look at the following essays and FAQs for a complete understanding of this very important distinction. In short, the Linux kernel is built using the GNU C library (glibc) and GNU compiler collection (gcc). The Linux kernel software alone is useless, in order have an operating system you need many more packages and the majority of such low-level packages in most distributions are developed as part of the GNU project: ``the whole system is basically GNU with Linux loaded''. In the form of an analogy: to say “running Linuxâ€, is like saying “driving your carburetorâ€. @itemize @item @url{https://www.gnu.org/gnu/gnu-users-never-heard-of-gnu.html} @item @url{https://www.gnu.org/gnu/linux-and-gnu.html} @item @url{https://www.gnu.org/gnu/why-gnu-linux.html} @item @url{https://www.gnu.org/gnu/gnu-linux-faq.html} @end itemize @menu * Command-line interface:: Introduction to the command-line @end menu @node Command-line interface, , New to GNU/Linux?, New to GNU/Linux? @subsection Command-line interface @cindex Shell @cindex Graphic user interface @cindex Command-line user interface @cindex GUI: graphic user interface @cindex CLI: command-line user interface One aspect of Gnuastro that might be a little troubling to new GNU/Linux users is that (at least for the time being) it only has a command-line user interface (CLI). This might be contrary to the mostly graphical user interface (GUI) experience with proprietary operating systems. To a first time user, the command-line does appear much more complicated and adapting to it might not be easy and a little frustrating at first. This is understandable and also experienced by anyone who started using the computer (from childhood) in a graphical user interface. Here we hope to convince you of the unique benefits of this interface which can greatly enhance your productivity while complementing your GUI experience. @cindex GNOME 3 Through GNOME 3@footnote{@url{http://www.gnome.org/}}, most GNU/Linux based operating systems now have a very advanced and useful GUI. Since the GUI was created long after the command-line, some wrongly consider the command line to be obsolete. Both interfaces are very useful for different tasks (for example you can't view an image, video, pdf document or web page on the command-line!), on the other hand you can't reproduce your results easily in the GUI. Therefore they should not be regarded as rivals but as complementary user interfaces, here we will outline how the CLI can be useful in scientific programs. You can think of the GUI as a veneer over the CLI to facilitate a small subset of all the possible CLI operations. Each click you do on the GUI, can be thought of as internally running a different CLI command. So asymptotically (if a good designer can design a GUI which is able to show you all the possibilities to click on) the GUI is only as powerful as the command-line. In practice, such graphical designers are very hard to find for every program, so the GUI operations are always a subset of the internal CLI commands. For programs that are only made for the GUI, this results in not including lots of potentially useful operations. It also results in `interface design' to be a crucially important part of any GUI program. Scientists don't usually have enough resources to hire a graphical designer, also the complexity of the GUI code is far more than CLI code, which is harmful for a scientific software, see @ref{Science and its tools}. @cindex GUI: repeating operations For programs that have a GUI, one action on the GUI (moving and clicking a mouse, or tapping a touchscreen) might be more efficient and easier than its CLI counterpart (typing the program name and your desired configuration). However, if you have to repeat that same action more than once, the GUI will soon become very frustrating and prone to errors. Unless the designers of a particular program decided to design such a system for a particular GUI action, there is no general way to run any possible series of actions automatically on the GUI. @cindex GNU Bash @cindex Reproducible results @cindex CLI: repeating operations On the command-line, you can run any series of of actions which can come from various CLI capable programs you have decided your self in any possible permutation with one command@footnote{By writing a shell script and running it, for example see the tutorials in @ref{Tutorials}.}. This allows for much more creativity and exact reproducibility that is not possible to a GUI user. For technical and scientific operations, where the same operation (using various programs) has to be done on a large set of data files, this is crucially important. It also allows exact reproducibility which is a foundation principle for scientific results. The most common CLI (which is also known as a shell) in GNU/Linux is GNU Bash, we strongly encourage you to put aside several hours and go through this beautifully explained web page: @url{https://flossmanuals.net/command-line/}. You don't need to read or even fully understand the whole thing, only a general knowledge of the first few chapters are enough to get you going. Since the operations in the GUI are very limited and they are visible, reading a manual is not that important in the GUI (most programs don't even have any!). However, to give you the creative power explained above, with a CLI program, it is best if you first read the manual of any program you are using. You don't need to memorize any details, only an understanding of the generalities is needed. Once you start working, there are more easier ways to remember a particular option or operation detail, see @ref{Getting help}. @cindex GNU Emacs @cindex Virtual console To experience the command-line in its full glory and not in the GUI terminal emulator, press the following keys together: @key{CTRL+ALT+F4}@footnote{Instead of @key{F4}, you can use any of the keys from @key{F1} to @key{F6} for different virtual consoles depending on your GNU/Linux distribution, try them all out. You can also run a separate GUI from within this console if you want to.} to access the virtual console. To return back to your GUI, press the same keys above replacing @key{F4} with @key{F7} (or @key{F1}, or @key{F2}, depending on your GNU/Linux distribution). In the virtual console, the GUI, with all its distracting colors and information, is gone. Enabling you to focus entirely on your actual work. @cindex Resource heavy operations For operations that use a lot of your system's resources (processing a large number of large astronomical images for example), the virtual console is the place to run them. This is because the GUI is not competing with your research work for your system's RAM and CPU. Since the virtual consoles are completely independent, you can even log out of your GUI environment to give even more of your hardware resources to the programs you are running and thus reduce the operating time. @cindex Secure shell @cindex SSH @cindex Remote operation Since it uses far less system resources, the CLI is also very convenient for remote access to your computer. Using secure shell (SSH) you can log in securely to your system (similar to the virtual console) from anywhere even if the connection speeds are low. There are apps for smart phones and tablets which allow you to do this. @node Report a bug, Suggest new feature, New to GNU/Linux?, Introduction @section Report a bug @cindex Bug @cindex Wrong output @cindex Software bug @cindex Output, wrong @cindex Wrong results @cindex Results, wrong @cindex Halted program @cindex Program crashing @cindex Inconsistent results According to Wikipedia ``a software bug is an error, flaw, failure, or fault in a computer program or system that causes it to produce an incorrect or unexpected result, or to behave in unintended ways''. So when you see that a program is crashing, not reading your input correctly, giving the wrong results, or not writing your output correctly, you have found a bug. In such cases, it is best if you report the bug to the developers. The programs will also report bugs in known impossible situations (which are caused by something unexpected) and will ask the users to report the bug. @cindex Bug reporting Prior to actually filing a bug report, it is best to search previous reports. The issue might have already been found and even solved. The best place to check if your bug has already been discussed is the bugs tracker on @ref{Gnuastro project webpage} at @url{https://savannah.gnu.org/bugs/?group=gnuastro}. In the top search fields (under ``Display Criteria'') set the ``Open/Closed'' drop-down menu to ``Any'' and choose the respective program or general category of the bug in ``Category'' and click the ``Apply'' button. The results colored green have already been solved and the status of those colored in red is shown in the table. @cindex Version control Recently corrected bugs are probably not yet publicly released because they are scheduled for the next Gnuastro stable release. If the bug is solved but not yet released and it is an urgent issue for you, you can get the version controlled source and compile that, see @ref{Version controlled source}. To solve the issue as readily as possible, please follow the following to guidelines in your bug report. The @url{http://www.chiark.greenend.org.uk/~sgtatham/bugs.html, How to Report Bugs Effectively} and @url{http://catb.org/~esr/faqs/smart-questions.html, How To Ask Questions The Smart Way} essays also provide some very good generic advice for all software (don't contact their authors for Gnuastro's problems). Mastering the art of giving good bug reports (like asking good questions) can greatly enhance your experience with any free and open source software. So investing the time to read through these essays will greatly reduce your frustration after you see something doesn't work the way you feel it is supposed to for a large range of software, not just Gnuastro. @table @strong @item Be descriptive Please provide as many details as possible and be very descriptive. Explain what you expected and what the output was: it might be that your expectation was wrong. Also please clearly state which sections of the Gnuastro book (this book), or other references you have studied to understand the problem. This can be useful in correcting the book (adding links to likely places where users will check). But more importantly, it will be very encouraging for the developers, since you are showing how serious you are about the problem and that you have actually put some thought into it. ``To be able to ask a question clearly is two-thirds of the way to getting it answered.'' -- John Ruskin (1819-1900). @item Individual and independent bug reports If you have found multiple bugs, please send them as separate (and independent) bugs (as much as possible). This will significantly help us in managing and resolving them sooner. @cindex Reproducible bug reports @item Reproducible bug reports If we cannot exactly reproduce your bug, then it is very hard to resolve it. So please send us a Minimal working example@footnote{@url{http://en.wikipedia.org/wiki/Minimal_Working_Example}} along with the description. For example in running a program, please send us the full command-line text and the output with the @option{-P} option, see @ref{Operating mode options}. If it is caused only for a certain input, also send us that input file. In case the input FITS is large, please use Crop to only crop the problematic section and make it as small as possible so it can easily be uploaded and downloaded and not waste the archive's storage, see @ref{Crop}. @end table @noindent There are generally two ways to inform us of bugs: @itemize @cindex Mailing list archives @cindex Mailing list: bug-gnuastro @cindex @code{bug-gnuastro@@gnu.org} @item Send a mail to @code{bug-gnuastro@@gnu.org}. Any mail you send to this address will be distributed through the bug-gnuastro mailing list@footnote{@url{https://lists.gnu.org/mailman/listinfo/bug-gnuastro}}. This is the simplest way to send us bug reports. The developers will then register the bug into the project webpage (next choice) for you. @cindex Gnuastro project page @cindex Support request manager @cindex Submit new tracker item @cindex Anonymous bug submission @item Use the Gnuastro project webpage at @url{https://savannah.gnu.org/projects/gnuastro/}: There are two ways to get to the submission page as listed below. Fill in the form as described below and submit it (see @ref{Gnuastro project webpage} for more on the project webpage). @itemize @item Using the top horizontal menu items, immediately under the top page title. Hovering your mouse on ``Support'' will open a drop-down list. Select ``Submit new''. @item In the main body of the page, under the ``Communication tools'' section, click on ``Submit new item''. @end itemize @end itemize @cindex Tracker @cindex Bug tracker @cindex Task tracker @cindex Viewing trackers Once the items have been registered in the mailing list or webpage, the developers will add it to either the ``Bug Tracker'' or ``Task Manager'' trackers of the Gnuastro project webpage. These two trackers can only be edited by the Gnuastro project developers, but they can be browsed by anyone, so you can follow the progress on your bug. You are most welcome to join us in developing Gnuastro and fixing the bug you have found maybe a good starting point. Gnuastro is designed to be easy for anyone to develop (see @ref{Science and its tools}) and there is a full chapter devoted to developing it: @ref{Developing}. @node Suggest new feature, Announcements, Report a bug, Introduction @section Suggest new feature @cindex Feature requests @cindex Additions to Gnuastro We would always be very happy to hear of suggested new features. For every program there are already lists of features that we are planning to add. You can see the current list of plans from the Gnuastro project webpage at @url{https://savannah.gnu.org/projects/gnuastro/} and following @clicksequence{``Tasks''@click{}``Browse''} on the horizontal menu at the top of the page immediately under the title, see @ref{Gnuastro project webpage}. If you want to request a feature to an existing program, click on the ``Display Criteria'' above the list and under ``Category'', choose that particular program. Under ``Category'' you can also see the existing suggestions for new programs or other cases like installation, documentation or libraries. Also be sure to set the ``Open/Closed'' value to ``Any''. If the feature you want to suggest is not already listed in the task manager, then follow the steps that are fully described in @ref{Report a bug}. Please have in mind that the developers are all very busy with their own astronomical research, and implementing existing ``task''s to add or resolving bugs. Gnuastro is a volunteer effort and none of the developers are paid for their hard work. So, although we will try our best, please don't not expect that your suggested feature be immediately included (with the next release of Gnuastro). The best person to apply the exciting new feature you have in mind is you, since you have the motivation and need. In fact Gnuastro is designed for making it as easy as possible for you to hack into it (add new features, change existing ones and so on), see @ref{Science and its tools}. Please have a look at the chapter devoted to developing (@ref{Developing}) and start applying your desired feature. Once you have added it, you can use it for your own work and if you feel you want others to benefit from your work, you can request for it to become part of Gnuastro. You can then join the developers and start maintaining your own part of Gnuastro. If you choose to take this path of action please contact us before hand (@ref{Report a bug}) so we can avoid possible duplicate activities and get interested people in contact. @cartouche @noindent @strong{Gnuastro is a collection of low level programs:} As described in @ref{Program design philosophy}, a founding principle of Gnuastro is that each library or program should be very basic and low-level. High level jobs should be done by running the separate programs or using separate functions in succession through a shell script or calling the libraries by higher level functions, see the examples in @ref{Tutorials}. So when making the suggestions please consider how your desired job can best be broken into separate steps and modularized. @end cartouche @node Announcements, Conventions, Suggest new feature, Introduction @section Announcements @cindex Announcements @cindex Mailing list: info-gnuastro Gnuastro has a dedicated mailing list for making announcements. Anyone that is interested can subscribe to this mailing list to stay up to date with new releases or when the dependencies (see @ref{Dependencies}) have been updated. To subscribe to this list, please visit @url{https://lists.gnu.org/mailman/listinfo/info-gnuastro}. @node Conventions, Acknowledgments, Announcements, Introduction @section Conventions In this book we have the following conventions: @itemize @item All commands that are to be run on the shell (command-line) prompt as the user start with a @command{$}. In case they must be run as a super-user or system administrator, they will start with a single @command{#}. If the command is in a separate line and next line @code{is also in the code type face}, but doesn't have any of the @command{$} or @command{#} signs, then it is the output of the command after it is run. As a user, you don't need to type those lines. A line that starts with @command{##} is just a comment for explaining the command to a human reader and must not be typed. @item If the command becomes larger than the page width a @key{\} is inserted in the code. If you are typing the code by hand on the command-line, you don't need to use multiple lines or add the extra space characters, so you can omit them. If you want to copy and paste these examples (highly discouraged!) then the @key{\} should stay. The @key{\} character is a shell escape character which is used commonly to make characters which have special meaning for the shell loose that special place (the shell will not treat them specially if there is a @key{\} behind them). When it is a last character in a line (the next character is a new-line character) the new-line character looses its meaning an the shell sees it as a simple white-space character, enabling you to use multiple lines to write your commands. @end itemize @node Acknowledgments, , Conventions, Introduction @section Acknowledgments The list of Gnuastro authors is available at the start of this book and the @file{AUTHORS} file in the source code. Here the authors wish to gratefully acknowledge the help and support they received from other people and institutions who had an indirect (not committed in the version controlled history) role in Gnuastro. The plain text file @file{THANKS} which is distributed along with the source code also contains this list. The Japanese Ministry of Science and Technology (MEXT) scholarship for Mohammad Akhlaghi's Masters and PhD period in Tohoku University Astronomical Institute had an instrumental role in the long term learning and planning that made the idea of Gnuastro possible. The very critical view points of Professor Takashi Ichikawa (Mohammad's adviser) were also instrumental in the initial ideas and creation of Gnuastro. The European Research Council (ERC) advanced grant 339659-MUSICOS (Principal investigator: Roland Bacon) was vital in the growth and expansion of Gnuastro, enabling a thorough re-write of the core functionality of all libraries and programs, turning Gnuastro into the large collection of generic programs and libraries it is today. @c To the developers: please keep this in the same order as the THANKS file @c (alphabetical, except for the names in the paragraph above). In general, we would like to gratefully thank the following people for their useful and constructive comments and suggestions (in alphabetical order by family name): Marjan Akbari, Roland Bacon, Karl Berry, Leindert Boogaard, Nicolas Bouch@'e, Fernando Buitrago, Adrian Bunk, Rosa Calvi, Benjamin Clement, Antonio Diaz Diaz, Th@'er@`ese Godefroy, Madusha Gunawardhana, Stephen Hamer, Takashi Ichikawa, Ra@'ul Infante Sainz, Brandon Invergo, Aur@'elien Jarno, Lee Kelvin, Mohammad-Reza Khellat, Floriane Leclercq, Alan Lefor, Guillaume Mahler, Francesco Montanari, William Pence, Bob Proulx, Yahya Sefidbakht, Alejandro Serrano Borlaff, Lee Spitler, Richard Stallman, Ole Streicher, Alfred M. Szmidt, Ignacio Trujillo, David Valls-Gabaud and Christopher Willmer. The GNU French Translation Team is also managing the French version of the top Gnuastro webpage which we highly appreciate. Finally we should thank all the (sometimes anonymous) people in various online forums which patiently answered all our small (but important) technical questions. All work on Gnuastro has been voluntary, but the authors are most grateful to the following institutions (in chronological order) for hosting us in our research: @quotation Ministry of education, culture, sports, science and technology (MEXT), Japan.@* Tohoku University Astronomical Institute, Sendai, Japan.@* University of Salento, Lecce, Italy.@* Centre national de la recherche scientifique (CNRS), France.@* Centre de Recherche Astrophysique de Lyon, University of Lyon 1, France.@* @end quotation @node Tutorials, Installation, Introduction, Top @chapter Tutorials @cindex Tutorial @cindex Cookbook In this chapter we give several tutorials or cookbooks on how to use the various tools in Gnuastro for your scientific purposes. In these tutorials, we have intentionally avoided too many cross references to make it more easily readable. To get more information about a particular program, you can visit the section with the same name as the program in this book. Each program section starts by explaining the general concepts behind what it does. If you only want to see an explanation of the options and arguments of any program, see the subsection titled `Invoking ProgramName'. See @ref{Conventions}, for an explanation of the conventions we use in the example codes through the book. The tutorials in this section use a fictional setting of some historical figures in the history of astronomy. We have tried to show how Gnuastro would have been helpful for them in making their discoveries if there were GNU/Linux computers in their times! Please excuse us for any historical inaccuracy, this is not intended to be a historical reference. This form of presentation can make the tutorials more pleasant and entertaining to read while also being more practical (explaining from a user's point of view)@footnote{This form of presenting a tutorial was influenced by the PGF/TikZ and Beamer manuals. The first provides graphic capabilities, while with the second you can make presentation slides in @TeX{} and @LaTeX{}. In these manuals, Till Tantau (author of the manual) uses Euclid as the protagonist. There are also some nice words of wisdom for Unix-like systems called ``Rootless Root'': @url{http://catb.org/esr/writings/unix-koans/}. These also have a similar style but they use a mythical figure named Master Foo. If you already have some experience in Unix-like systems, you will definitely find these ``Unix Koans'' very entertaining.}. The main reference for the historical facts mentioned in these fictional settings was Wikipedia. @menu * Hubble visually checks and classifies his catalog:: Check a catalog. * Sufi simulates a detection:: Simulating a detection. * General program usage tutorial:: Usage of all programs in a good way. @end menu @node Hubble visually checks and classifies his catalog, Sufi simulates a detection, Tutorials, Tutorials @section Hubble visually checks and classifies his catalog @cindex Edwin Hubble In 1924 Hubble@footnote{Edwin Powell Hubble (1889 -- 1953 A.D.) was an American astronomer who can be considered as the father of extra-galactic astronomy, by proving that some nebulae are too distant to be within the Galaxy. He then went on to show that the universe appears to expand and also done a visual classification of the galaxies that is known as the Hubble fork.} announced his discovery that some of the known nebulous objects are too distant to be within the the Milky Way (or Galaxy) and that they were probably distant Galaxies@footnote{Note that at that time, ``Galaxy'' was a proper noun used to refer to the Milky way. The concept of a galaxy as we define it today had not yet become common. Hubble played a major role in creating today's concept of a galaxy.} in their own right. He had also used them to show that the redshift of the nebulae increases with their distance. So now he wants to study them more accurately to see what they actually are. Since they are nebulous or amorphous, they can't be modeled (like stars that are always a point) easily. So there is no better way to distinguish them than to visually inspect them and see if it is possible to classify these nebulae or not. Hubble has stored all the FITS images of the objects he wants to visually inspect in his @file{/mnt/data/images} directory. He has also stored his catalog of extra-galactic nebulae in @file{/mnt/data/catalogs/extragalactic.txt}. Any normal user on his GNU/Linux system (including himself) only has read access to the contents of the @file{/mnt/data} directory. He has done this by running this command as root: @example # chmod -R 755 /mnt/data @end example @noindent Hubble has done this intentionally to avoid mistakenly deleting or modifying the valuable images he has taken at Mount Wilson while he is working as an ordinary user. Retaking all those images and data is simply not an option. In fact they are also in another hard disk (@file{/dev/sdb1}). So if the hard disk which stores his GNU/Linux distribution suddenly malfunctions due to work load, his data is not in harms way. That hard disk is only mounted to this directory when he wants to use it with the command: @example # mount /dev/sdb1 /mnt/data @end example @noindent In short, Hubble wants to keep his data safe and fortunately by default Gnuastro allows for this. Hubble creates a temporary @file{visualcheck} directory in his home directory for this check. He runs the following commands to make the directory and change to it@footnote{The @code{pwd} command is short for ``Print Working Directory'' and @code{ls} is short for ``list'' which shows the contents of a directory.}: @example $ mkdir ~/visualcheck $ cd ~/visualcheck $ pwd /home/edwin/visualcheck $ ls @end example Hubble has multiple images in @file{/mnt/data/images}, some of his targets might be on the edges of an image and so several images need to be stitched to give a good view of them. Also his extra-galactic targets belong to various pointings in the sky, so they are not in one large image. Gnuastro's Crop is just the program he wants. The catalog in @file{extragalactic.txt} is a plain text file which stores the basic information of all his known 200 extra-galactic nebulae. In its second column it has each object's Right Ascension (the first column is a label he has given to each object) and in the third the object's declination. @example $ astcrop --coordcol=2 --coordcol=3 /mnt/data/images/*.fits \ --mode=wcs /mnt/data/catalogs/extragalactic.txt Crop started on Tue Jun 14 10:18:11 1932 ---- ./4_crop.fits 1 1 ---- ./2_crop.fits 1 1 ---- ./1_crop.fits 1 1 [[[ Truncated middle of list ]]] ---- ./198_crop.fits 1 1 ---- ./195_crop.fits 1 1 - 200 images created. - 200 were filled in the center. - 0 used more than one input. Crop finished in: 2.429401 (seconds) @end example @cindex Asynchronous thread allocation @noindent Hubble already knows that thread allocation to the the CPU cores is asynchronous. Hence each time you run it, the order of which job gets done first differs. When using Crop the order of outputs is irrelevant since each crop is independent of the rest. This is why the crops are not necessarily created in the same input order. He is satisfied with the default width of the outputs (which he inspected by running @code{$ astcrop -P}). If he wanted a different width for the cropped images, he could do that with the @option{--wwidth} option which accepts a value in arc-seconds. When he lists the contents of the directory again he finds his 200 objects as separate FITS images. @example $ ls 1_crop.fits 2_crop.fits ... 200_crop.fits @end example @cindex GNU Parallel The FITS image format was not designed for efficient/fast viewing, but mainly for accurate storing of the data. So he chooses to convert the cropped images to a more common image format to view them more quickly and easily through standard image viewers (which load much faster than FITS image viewer). JPEG is one of the most recognized image formats that is supported by most image viewers. Fortunately Gnuastro has just such a tool to convert various types of file types to and from each other: ConvertType. Hubble has already heard of GNU Parallel from one of his colleagues at Mount Wilson Observatory. It allows multiple instances of a command to be run simultaneously on the system, so he uses it in conjunction with ConvertType to convert all the images to JPEG. @example $ parallel astconvertt -ojpg ::: *_crop.fits @end example @pindex eog @cindex Eye of GNOME For his graphical user interface Hubble is using GNOME which is the default in most distributions in GNU/Linux. The basic image viewer in GNOME is the Eye of GNOME, which has the executable file name @command{eog} @footnote{Eye of GNOME is only available for users of the GNOME graphical desktop environment which is the default in most GNU/Linux distributions. If you use another graphical desktop environment, replace @command{eog} with any other image viewer.}. Since he has used it before, he knows that once it opens an image, he can use the @key{ENTER} or @key{SPACE} keys on the keyboard to go to the next image in the directory or the @key{Backspace} key to go the previous image. So he opens the image of the first object with the command below and with his cup of coffee in his other hand, he flips through his targets very fast to get a good initial impression of the morphologies of these extra-galactic nebulae. @example $ eog 1_crop.jpg @end example @cindex GNU Bash @cindex GNU Emacs @cindex Spiral galaxies @cindex Elliptical galaxies Hubble's cup of coffee is now finished and he also got a nice general impression of the shapes of the nebulae. He tentatively/mentally classified the objects into three classes while doing the visual inspection. One group of the nebulae have a very simple elliptical shape and seem to have no internal special structure, so he gives them code 1. Another clearly different class are those which have spiral arms which he associates with code 2 and finally there seems to be a class of nebulae in between which appear to have a disk but no spiral arms, he gives them code 3. Now he wants to know how many of the nebulae in his extra-galactic sample are within each class. Repeating the same process above and writing the results on paper is very time consuming and prone to errors. Fortunately Hubble knows the basics of GNU Bash shell programming, so he writes the following short script with a loop to help him with the job. After all, computers are made for us to operate and knowing basic shell programming gives Hubble this ability to creatively operate the computer as he wants. So using GNU Emacs@footnote{This can be done with any text editor} (his favorite text editor) he puts the following text in a file named @file{classify.sh}. @example for name in *.jpg do eog $name & processid=$! echo -n "$name belongs to class: " read class echo $name $class >> classified.txt kill $processid done @end example @cindex Gedit @cindex GNU Emacs Fortunately GNU Emacs or even simpler editors like Gedit (part of the GNOME graphical user interface) will display the variables and shell constructs in different colors which can really help in understanding the script. Put simply, the @code{for} loop gets the name of each JPEG file in the directory this script is run in and puts it in @code{name}. In the shell, the value of a variable is used by putting a @code{$} sign before the variable name. Then Eye of GNOME is run on the image in the background to show him that image and its process ID is saved internally (this is necessary to close Eye of GNOME later). The shell then prompts the user to specify a class and after saving it in @code{class}, it prints the file name and the given class in the next line of a file named @file{classified.txt}. To make the script executable (so he can run it later any time he wants) he runs: @example $ chmod +x classify.sh @end example @noindent Now he is ready to do the classification, so he runs the script: @example $ ./classify.sh @end example @noindent In the end he can delete all the JPEG and FITS files along with Crop's log file with the following short command. The only files remaining are the script and the result of the classification. @example $ rm *.jpg *.fits astcrop.txt $ ls classified.txt classify.sh @end example @noindent He can now use @file{classified.txt} as input to a plotting program to plot the histogram of the classes and start making interpretations about what these nebulous objects that are outside of the Galaxy are. @node Sufi simulates a detection, General program usage tutorial, Hubble visually checks and classifies his catalog, Tutorials @section Sufi simulates a detection It is the year 953 A.D. and Sufi@footnote{Abd al-rahman Sufi (903 -- 986 A.D.), also known in Latin as Azophi was an Iranian astronomer. His manuscript ``Book of fixed stars'' contains the first recorded observations of the Andromeda galaxy, the Large Magellanic Cloud and seven other non-stellar or `nebulous' objects.} is in Shiraz as a guest astronomer. He had come there to use the advanced 123 centimeter astrolabe for his studies on the Ecliptic. However, something was bothering him for a long time. While mapping the constellations, there were several non-stellar objects that he had detected in the sky, one of them was in the Andromeda constellation. During a trip he had to Yemen, Sufi had seen another such object in the southern skies looking over the Indian ocean. He wasn't sure if such cloud-like non-stellar objects (which he was the first to call `Sah@={a}bi' in Arabic or `nebulous') were real astronomical objects or if they were only the result of some bias in his observations. Could such diffuse objects actually be detected at all with his detection technique? He still had a few hours left until nightfall (when he would continue his studies on the ecliptic) so he decided to find an answer to this question. He had thoroughly studied Claudius Ptolemy's (90 -- 168 A.D) Almagest and had made lots of corrections to it, in particular in measuring the brightness. Using his same experience, he was able to measure a magnitude for the objects and wanted to simulate his observation to see if a simulated object with the same brightness and size could be detected in a simulated noise with the same detection technique. The general outline of the steps he wants to take are: @enumerate @item Make some mock profiles in an oversampled image. The initial mock image has to be oversampled prior to convolution or other forms of transformation in the image. Through his experiences, Sufi knew that this is because the image of heavenly bodies is actually transformed by the atmosphere or other sources outside the atmosphere (for example gravitational lenses) prior to being sampled on an image. Since that transformation occurs on a continuous grid, to best approximate it, he should do all the work on a finer pixel grid. In the end he can re-sample the result to the initially desired grid size. @item Convolve the image with a PSF image that is oversampled to the same value as the mock image. Since he wants to finish in a reasonable time and the PSF kernel will be very large due to oversampling, he has to use frequency domain convolution which has the side effect of dimming the edges of the image. So in the first step above he also has to build the image to be larger by at least half the width of the PSF convolution kernel on each edge. @item With all the transformations complete, the image should be re-sampled to the same size of the pixels in his detector. @item He should remove those extra pixels on all edges to remove frequency domain convolution artifacts in the final product. @item He should add noise to the (until now, noise-less) mock image. After all, all observations have noise associated with them. @end enumerate Fortunately Sufi had heard of GNU Astronomy Utilities from a colleague in Isfahan (where he worked) and had installed it on his computer a year before. It had tools to do all the steps above. He had used MakeProfiles before, but wasn't sure which columns he had chosen in his user or system wide configuration files for which parameters, see @ref{Configuration files}. So to start his simulation, Sufi runs MakeProfiles with the @option{-P} option to make sure what columns in a catalog MakeProfiles currently recognizes and the output image parameters. In particular, Sufi is interested in the recognized columns (shown below). @example $ astmkprof -P [[[ ... Truncated lines ... ]]] # Output: type float32 # Type of output: e.g., int16, float32, etc... naxis 1000,1000 # Number of pixels along first FITS axis. oversample 5 # Scale of oversampling (>0 and odd). [[[ ... Truncated lines ... ]]] # Columns, by info (see `--searchin'), or number (starting from 1): ccol 2 # Center along first FITS axis (horizontal). ccol 3 # Center along second FITS axis (vertical). fcol 4 # sersic (1), moffat (2), gaussian (3), # point (4), flat (5), circumference (6). rcol 5 # Effective radius or FWHM in pixels. ncol 6 # Sersic index or Moffat beta. pcol 7 # Position angle. qcol 8 # Axis ratio. mcol 9 # Magnitude. tcol 10 # Truncation in units of radius or pixels. [[[ ... Truncated lines ... ]]] @end example @noindent In Gnuastro, column counting starts from 1, so the columns are ordered such that the first column (number 1) can be an ID he specifies for each object (and MakeProfiles ignores), each subsequent column is used used for another property of the profile. It is also possible to use column names for the values of these options and change these defaults, but Sufi preferred to stick to the defaults. Fortunately MakeProfiles has the capability to also make the PSF which is to be used on the mock image and using the @option{--prepforconv} option, he can also make the mock image to be larger by the correct amount and all the sources to be shifted by the correct amount. For his initial check he decides to simulate the nebula in the Andromeda constellation. The night he was observing, the PSF had roughly a FWHM of about 5 pixels, so as the first row (profile), he defines the PSF parameters and sets the radius column (@code{rcol} above, fifth column) to @code{5.000}, he also chooses a Moffat function for its functional form. Remembering how diffuse the nebula in the Andromeda constellation was, he decides to simulate it with a mock S@'{e}rsic index 1.0 profile. He wants the output to be 500 pixels by 500 pixels, so he puts the mock profile in the center. Looking at his drawings of it, he decides a reasonable effective radius for it would be 40 pixels on this image pixel scale, he sets the axis ratio and position angle to approximately correct values too and finally he sets the total magnitude of the profile to 3.44 which he had accurately measured. Sufi also decides to truncate both the mock profile and PSF at 5 times the respective radius parameters. In the end he decides to put four stars on the four corners of the image at very low magnitudes as a visual scale. Using all the information above, he creates the catalog of mock profiles he wants in a file named @file{cat.txt} (short for catalog) using his favorite text editor and stores it in a directory named @file{simulationtest} in his home directory. [The @command{cat} command prints the contents of a file, short for concatenation. So please copy-paste the lines after ``@command{cat cat.txt}'' into @file{cat.txt} when the editor opens in the steps above it, note that there are 7 lines, first one starting with @key{#}]: @example $ mkdir ~/simulationtest $ cd ~/simulationtest $ pwd /home/rahman/simulationtest $ emacs cat.txt $ ls cat.txt $ cat cat.txt # Column 4: PROFILE_NAME [,str7] Radial profile's functional name 1 0.0000 0.0000 moffat 5.000 4.765 0.0000 1.000 30.000 5.000 2 250.00 250.00 sersic 40.00 1.000 -25.00 0.400 3.4400 5.000 3 50.000 50.000 point 0.000 0.000 0.0000 0.000 9.0000 0.000 4 450.00 50.000 point 0.000 0.000 0.0000 0.000 9.2500 0.000 5 50.000 450.00 point 0.000 0.000 0.0000 0.000 9.5000 0.000 6 450.00 450.00 point 0.000 0.000 0.0000 0.000 9.7500 0.000 @end example @noindent The zero-point magnitude for his observation was 18. Now he has all the necessary parameters and runs MakeProfiles with the following command: @example $ astmkprof --prepforconv --naxis=500,500 --zeropoint=18.0 cat.txt MakeProfiles started on Sat Oct 6 16:26:56 953 - 6 profiles read from cat.txt - Random number generator (RNG) type: mt19937 - Using 8 threads. ---- row 2 complete, 5 left to go ---- row 3 complete, 4 left to go ---- row 4 complete, 3 left to go ---- row 5 complete, 2 left to go ---- ./0_cat.fits created. ---- row 0 complete, 1 left to go ---- row 1 complete, 0 left to go - ./cat.fits created. 0.041651 seconds MakeProfiles finished in 0.267234 seconds $ls 0_cat.fits cat.fits cat.txt @end example @cindex Oversample @noindent The file @file{0_cat.fits} is the PSF Sufi had asked for and @file{cat.fits} is the image containing the other 5 objects. The PSF is now available to him as a separate file for the convolution step. While he was preparing the catalog, one of his students approached him and was also following the steps. When he opened the image, the student was surprised to see that all the stars are only one pixel and not in the shape of the PSF as we see when we image the sky at night. So Sufi explained to him that the stars will take the shape of the PSF after convolution and this is how they would look if we didn't have an atmosphere or an aperture when we took the image. The size of the image was also surprising for the student, instead of 500 by 500, it was 2630 by 2630 pixels. So Sufi had to explain why oversampling is very important for parts of the image where the flux change is significant over a pixel. Sufi then explained to him that after convolving we will re-sample the image to get our originally desired size. To convolve the image, Sufi ran the following command: @example $ astconvolve --kernel=0_cat.fits cat.fits Convolve started on Mon Apr 6 16:35:32 953 - Using 8 CPU threads. - Input: cat.fits (hdu: 1) - Kernel: 0_cat.fits (hdu: 1) - Input and Kernel images padded. 0.075541 seconds - Images converted to frequency domain. 6.728407 seconds - Multiplied in the frequency domain. 0.040659 seconds - Converted back to the spatial domain. 3.465344 seconds - Padded parts removed. 0.016767 seconds Convolve finished in: 10.422161 seconds $ls 0_cat.fits cat_convolved.fits cat.fits cat.txt @end example @noindent When convolution finished, Sufi opened the @file{cat_convolved.fits} file and showed the effect of convolution to his student and explained to him how a PSF with a larger FWHM would make the points even wider. With the convolved image ready, they were prepared to re-sample it to the original pixel scale Sufi had planned [from the @command{$ astmkprof -P} command above, recall that MakeProfiles had oversampled the image by 5 times]. Sufi explained the basic concepts of warping the image to his student and ran Warp with the following command: @example $ astwarp --scale=1/5 --centeroncorner cat_convolved.fits Warp started on Mon Apr 6 16:51:59 953 Using 8 CPU threads. Input: cat_convolved.fits (hdu: 1) matrix: 0.2000 0.0000 0.4000 0.0000 0.2000 0.4000 0.0000 0.0000 1.0000 $ ls 0_cat.fits cat_convolved_scaled.fits cat.txt cat_convolved.fits cat.fits $ astfits -p cat_convolved_scaled.fits | grep NAXIS NAXIS = 2 / number of data axes NAXIS1 = 526 / length of data axis 1 NAXIS2 = 526 / length of data axis 2 @end example @noindent @file{cat_convolved_warped.fits} now has the correct pixel scale. However, the image is still larger than what we had wanted, it is 526 (@mymath{500+13+13}) by 526 pixels. The student is slightly confused, so Sufi also resamples the PSF with the same scale and shows him that it is 27 (@mymath{2\times13+1}) by 27 pixels. Sufi goes on to explain how frequency space convolution will dim the edges and that is why he added the @option{--prepforconv} option to MakeProfiles, see @ref{If convolving afterwards}. Now that convolution is done, Sufi can remove those extra pixels using Crop with the command below. Crop's @option{--section} option accepts coordinates inclusively and counting from 1 (according to the FITS standard), so the crop's first pixel has to be 14, not 13. @example $ astcrop cat_convolved_scaled.fits --section=14:*-13,14:*-13 \ --zeroisnotblank Crop started on Sat Oct 6 17:03:24 953 - Read metadata of 1 image. 0.001304 seconds ---- ...nvolved_scaled_cropped.fits created: 1 input. Crop finished in: 0.027204 seconds $ls 0_cat.fits cat_convolved_scaled_cropped.fits cat.fits cat_convolved.fits cat_convolved_scaled.fits cat.txt @end example @noindent Finally, @file{cat_convolved_scaled_cropped.fits} has the same dimensions as Sufi had desired in the beginning. All this trouble was certainly worth it because now there is no dimming on the edges of the image and the profile centers are more accurately sampled. The final step to simulate a real observation would be to add noise to the image. Sufi set the zeropoint magnitude to the same value that he set when making the mock profiles and looking again at his observation log, he had measured the background flux near the nebula had a magnitude of 7 that night. So using these values he ran MakeNoise: @example $ astmknoise --zeropoint=18 --background=7 --output=out.fits \ cat_convolved_warped_crop.fits MakeNoise started on Mon Apr 6 17:05:06 953 - Generator type: mt19937 - Generator seed: 1428318100 MakeNoise finished in: 0.033491 (seconds) $ls 0_cat.fits cat_convolved_scaled_cropped.fits cat.fits out.fits cat_convolved.fits cat_convolved_scaled.fits cat.txt @end example @noindent The @file{out.fits} file now contains the noised image of the mock catalog Sufi had asked for. Seeing how the @option{--output} option allows the user to specify the name of the output file, the student was confused and wanted to know why Sufi hadn't used it before? Sufi then explained to him that for intermediate steps it is best to rely on the automatic output, see @ref{Automatic output}. Doing so will give all the intermediate files the same basic name structure, so in the end you can simply remove them all with the Shell's capabilities. So Sufi decided to show this to the student by making a shell script from the commands he had used before. The command-line shell has the capability to read all the separate input commands from a file. This is very useful when you want to do the same thing multiple times, with only the names of the files or minor parameters changing between the different instances. Using the shell's history (by pressing the up keyboard key) Sufi reviewed all the commands and then he retrieved the last 5 commands with the @command{$ history 5} command. He selected all those lines he had input and put them in a text file named @file{mymock.sh}. Then he defined the @code{edge} and @code{base} shell variables for easier customization later. Finally, before every command, he added some comments (lines starting with @key{#}) for future readability. @example # Basic settings: edge=13 base=cat # Remove any existing image to avoid confusion. rm out.fits # Run MakeProfiles to create an oversampled FITS image. astmkprof --prepforconv --naxis=500,500 --zeropoint=18.0 "$base".txt # Convolve the created image with the kernel. astconvolve --kernel=0_"$base".fits "$base".fits # Scale the image back to the intended resolution. astwarp --scale=1/5 --centeroncorner "$base"_convolved.fits # Crop the edges out (dimmed during convolution). `--section' accepts # inclusive coordinates, so the start of start of the section must be # one pixel larger than its end. st_edge=$(( edge + 1 )) astcrop "$base"_convolved_scaled.fits --zeroisnotblank \ --section=$st_edge:*-$edge,$st_edge:*-$edge # Add noise to the image. astmknoise --zeropoint=18 --background=7 --output=out.fits \ "$base"_convolved_scaled_cropped.fits # Remove all the temporary files. rm 0*.fits cat*.fits @end example @cindex Comments He used this chance to remind the student of the importance of comments in code or shell scripts: when writing the code, you have a very good mental picture of what you are doing, so writing comments might seem superfluous and excessive. However, in one month when you want to re-use the script, you have lost that mental picture and rebuilding it is can be very time-consuming and frustrating. The importance of comments is further amplified when you want to share the script with a friend/colleague. So it is very good to accompany any script/code with useful comments while you are writing it (have a good mental picture of what/why you are doing something). @cindex Gedit @cindex GNU Emacs Sufi then explained to the eager student that you define a variable by giving it a name, followed by an @code{=} sign and the value you want. Then you can reference that variable from anywhere in the script by calling its name with a @code{$} prefix. So in the script whenever you see @code{$base}, the value we defined for it above is used. If you use advanced editors like GNU Emacs or even simpler ones like Gedit (part of the GNOME graphical user interface) the variables will become a different color which can really help in understanding the script. We have put all the @code{$base} variables in double quotation marks (@code{"}) so the variable name and the following text do not get mixed, the shell is going to ignore the @code{"} after replacing the variable value. To make the script executable, Sufi ran the following command: @example $ chmod +x mymock.sh @end example @noindent Then finally, Sufi ran the script, simply by calling its file name: @example $ ./mymock.sh @end example After the script finished, the only file remaining is the @file{out.fits} file that Sufi had wanted in the beginning. Sufi then explained to the student how he could run this script anywhere that he has a catalog if the script is in the same directory. The only thing the student had to modify in the script was the name of the catalog (the value of the @code{base} variable in the start of the script) and the value to the @code{edge} variable if he changed the PSF size. The student was also very happy to hear that he won't need to make it executable again when he makes changes later, it will remain executable unless he explicitly changes the executable flag with @command{chmod}. The student was really excited, since now, through simple shell scripting, he could really speed up his work and run any command in any fashion he likes allowing him to be much more creative in his works. Until now he was using the graphical user interface which doesn't have such a facility and doing repetitive things on it was really frustrating and some times he would make mistakes. So he left to go and try scripting on his own computer. Sufi could now get back to his own work and see if the simulated nebula which resembled the one in the Andromeda constellation could be detected or not. Although it was extremely faint@footnote{The brightness of a diffuse object is added over all its pixels to give its final magnitude, see @ref{Flux Brightness and magnitude}. So although the magnitude 3.44 (of the mock nebula) is orders of magnitude brighter than 6 (of the stars), the central galaxy is much fainter. Put another way, the brightness is distributed over a large area in the case of a nebula.}, fortunately it passed his detection tests and he wrote it in the draft manuscript that would later become ``Book of fixed stars''. He still had to check the other nebula he saw from Yemen and several other such objects, but they could wait until tomorrow (thanks to the shell script, he only has to define a new catalog). It was nearly sunset and they had to begin preparing for the night's measurements on the ecliptic. @node General program usage tutorial, , Sufi simulates a detection, Tutorials @section General program usage tutorial @cindex HST @cindex XDF survey @cindex Hubble Space Telescope @cindex Extreme Deep Field survey Measuring colors of astronomical objects in broad-band or narrow-band images is one of the most basic and common steps in astronomical analysis. Here, we will use Gnuastro's programs to detect objects in a Hubble Space Telescope (HST) image and measure their colors. We will use the @url{https://archive.stsci.edu/prepds/xdf, eXtreme Deep Field} dataset. Like almost all astronomical surveys, this dataset is free for download and usable by the public. This tutorial was first prepared for the ``Exploring the Ultra-Low Surface Brightness Universe'' workshop (November 2017) at the International Space Science Institute (ISSI) in Bern, Switzerland. We would like to thank them and the attendees for a very fruitful week. You will need the following tools in this tutorial: Gnuastro, SAO DS9 @footnote{See @ref{SAO ds9}, available at @url{http://ds9.si.edu/site/Home.html}.}, GNU Wget@footnote{@url{https://www.gnu.org/software/wget}.}, and AWK (most common implementation is GNU AWK@footnote{@url{https://www.gnu.org/software/gawk}.}). @cartouche @noindent @strong{Type the example commands:} Try to type the example commands on your terminal and don't simply copy and paste them. This will help simulate future situations when you are processing your own datasets. @end cartouche A handy feature of Gnuastro is that all program names start with @code{ast}. This will allow your command-line processor to easily list and auto-complete Gnuastro's programs for you. Try typing the following command (press @key{TAB} key when you see @code{}) to see the list: @example $ ast @end example @noindent Any program that starts with @code{ast} (including all Gnuastro programs) will be shown. By choosing the subsequent characters of your desired program and pressing @key{} again, the list will narrow down and the program name will auto-complete once your input characters are unambiguous. In short, you often don't need to type the full name of the program you want to run. Gnuastro contains a large number of programs and it is natural to forget the details of each program's options. Therefore, before starting the analysis, let's review how you can refresh your memory any time you want on the command-line while working (without taking your hands off the keyboard). This book comes with your installation, so it will always correspond to your installed version of Gnuastro. Please see @ref{Info} for more. @cindex GNU Info GNU Info@footnote{GNU Info is already available on almost all Unix-like operating systems.} is the program in charge of displaying the manual on the command-line. To see this whole book on your command-line, please run the following command and subsequent keys. Info has its own mini-environment, therefore we'll show the keys that must be pressed in the mini-environment after a @code{->} sign. You can also ignore anything after the @code{#} sign in the middle of the line, they are only for your information. @example $ info gnuastro # Open the top of the manual. -> # All the book chapters. -> # Continue down: show sections. -> ... # Keep pressing space to go down. -> q # Quit Info, return to the command-line. @end example The thing that greatly simplifies navigation in Info is the links (regions with an underline). You can immediately go to the next link in the page with the @key{} key and press @key{} on it to go into that part of the manual. Try the commands above again, but this time also use @key{} to go to the links and press @key{} on them to go to the respective section of the book. Then follow a few more links and go deeper into the book. To return to the previous page, press @key{l} (small L). If you are searching for a specific phrase in the whole book (for example an option name), press @key{s} and type your search phrase and end it with an @key{}. You don't need to start from the top of the manual every time. For example, to get to @ref{Invoking astnoisechisel}, run the following command. In general, all programs have such an ``Invoking ProgramName'' section in this book. These sections are specifically for the description of inputs, outputs and configuration options of each program. You can access them directly for each program by giving its executable name to Info. @example $ info astnoisechisel @end example The other sections don't have such shortcuts. To directly access them from the command-line, you need to tell Info to look into Gnuastro's manual, then look for the specific section (an unambiguous title is necessary). For example, if you only want to review/remember NoiseChisel's @ref{Detection options} or @ref{Segmentation options}), just run any of these commands. Note how case is irrelevant for Info when calling a title in this manner. @example $ info gnuastro "Detection options" $ info gnuastro "segmentation options" @end example In general, Info is a wonderful and powerful way to access this whole book with detailed information about the programs you are running very fast. If you are not already familiar with it, please run the following command and just read along and do what it says to learn it. Don't stop until you feel have become sufficiently fluent in it. Please invest the half an hour's time necessary to start using Info comfortably. It will greatly improve your productivity and you will start reaping the rewards of this investment very soon. @example $ info info @end example As a good scientist you need to feel comfortable to play with the features/options and avoid (be critical to) using default values as much as possible. On the other hand, our human memory is very limited, so it is important to be able to easily access any part of this book fast and remember the option names, what they do and their acceptable values. If you just want the option names and a short description, calling the program with the @option{--help} option might also be a good solution like the first example below. If you know a few characters of the option name, you can feed the output to @command{grep} like the second or third example commands. @example $ astnoisechisel --help $ astnoisechisel --help | grep quant $ astnoisechisel --help | grep check @end example Let's start the processing. First, to keep things clean, let's create a @file{gnuastro-tutorial} directory and continue all future steps in it: @example $ mkdir gnuastro-tutorial $ cd gnuastro-tutorial @end example We will be using the near infra-red @url{http://www.stsci.edu/hst/wfc3, Wide Field Camera} dataset. If you already have them in another directory (for example @file{XDFDIR}), you can set the @file{download} directory to be a symbolic link to @file{XDFDIR} with a command like this: @example ln -s XDFDIR download @end example @noindent If the following images aren't already present on your system, you can make a @file{download} directory and download them there. @example $ mkdir download $ cd download $ xdfurl=http://archive.stsci.edu/pub/hlsp/xdf $ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_f105w_v1_sci.fits $ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits $ cd .. @end example @noindent In this tutorial, we'll just use these two filters. Later, you will probably need to download more filters, you can use the shell's @code{for} loop to download them all in series (one after the other@footnote{Note that you only have one port to the internet, so downloading in parallel will actually be slower than downloading in series.}) with one command like the one below for the WFC3 filters. Put this command instead of the two @code{wget} commands above. Recall that all the extra spaces, back-slashes (@code{\}), and new lines can be ignored if you are typing on the lines on the terminal. @example $ for f in f105w f125w f140w f160w; do \ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_"$f"_v1_sci.fits; \ done @end example First, let's visually inspect the dataset. Let's take F160W image as an example. Do the steps below with the other image(s) too (and later with any dataset that you want to work on). It is very important to understand your dataset visually. Note how ds9 doesn't follow the GNU style of options where ``long'' and ``short'' options are preceded by @option{--} and @option{-} respectively (for example @option{--width} and @option{-w}, see @ref{Options}). Ds9's @option{-zscale} option is a good scaling to highlight the low surface brightness regions, and as the name suggests, @option{-zoom to fit} will fit the whole dataset in the window. If the window is too small, expand it with your mouse, then press the ``zoom'' button on the top row of buttons above the image, then in the row below it, press ``zoom fit''. You can also zoom in and out by scrolling your mouse or the respective operation on your touch-pad when your cursor/pointer is over the image. @example $ ds9 download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits \ -zscale -zoom to fit @end example The first thing you might notice is that the regions with no data have a value of zero in this image. The next thing might be that the dataset actually has two ``depth''s (see @ref{Quantifying measurement limits}). The exposure time of the inner region is more than 4 times more than the outer parts. Fortunately the XDF survey webpage (above) contains the vertices of the deep flat WFC3-IR field. You can use those vertices in @ref{Crop} to cutout this deep infra-red region from the larger image. We'll make a directory called @file{flat-ir} and keep the flat infra-red regions in that directory (with a `@file{xdf-}' suffix for a shorter and easier filename). @example $ mkdir flat-ir $ astcrop --mode=wcs -h0 --output=flat-ir/xdf-f105w.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f105w_v1_sci.fits $ astcrop --mode=wcs -h0 --output=flat-ir/xdf-f160w.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits @end example The only thing varying in the two calls to Gnuastro's Crop program is the filter name. Therefore, to simplify the command, and later allow work on more filters, we can use the shell's @code{for} loop. Notice how the two places where the filter names (@file{f105w} and @file{f160w}) are used above have been replaced with @file{$f} (the shell variable that @code{for} is in charge of setting) below. To generalize this for more filters later, you can simply add the other filter names in the first line before the semi-colon (@code{;}). @example $ for f in f105w f160w; do \ astcrop --mode=wcs -h0 --output=flat-ir/xdf-$f.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_"$f"_v1_sci.fits; \ done @end example Please open these images and inspect them with the same ds9 commands you used above. You will see how it is completely flat now and doesn't have varying depths. Another important result of this crop is that regions with no data now have a NaN (blank) value, not zero. Zero is a meaningful value and especially when using NoiseChisel, the input should have NaN values for pixels with no data, not zero. This is the deepest image we currently have of the sky. The first thing that comes to mind may be this: ``How large is this field?''. Let's find the answer to this question with the commands below. The lines starting with @code{##} are just comments for you to help in following the steps. Don't type them on the terminal. The commands are intentionally repetitive in some places to better understand each step and also to demonstrate the beauty of command-line features like variables, pipes and loops. Later, if you would like to repeat this process on another dataset, you can just use commands 3, 7, and 9. @cartouche @noindent @strong{Use shell history:} Don't forget to make effective use of your shell's history. This is especially convenient when you just want to make a small change to your previous command. Press the ``up'' key on your keyboard (possibly multiple times) to see your previous command(s). @end cartouche @example ## (1) See the general statistics of non-blank pixel values. $ aststatistics flat-ir/xdf-f160w.fits ## (2) We only want the number of non-blank pixels. $ aststatistics flat-ir/xdf-f160w.fits --number ## (3) Keep the result of the command above in the shell variable `n'. $ n=$(aststatistics flat-ir/xdf-f160w.fits --number) ## (4) See what is stored the shell variable `n'. $ echo $n ## (5) Show all the FITS keywords of this image. $ astfits flat-ir/xdf-f160w.fits -h1 ## (6) The resolution (in degrees/pixel) is in the `CDELT' keywords. ## Only show lines that contain these characters, by feeding ## the output of the previous command to the `grep' program. $ astfits flat-ir/xdf-f160w.fits -h1 | grep CDELT ## (7) Save the resolution (same in both dimensions) in the variable ## `r'. The last part uses AWK to print the third `field' of its ## input line. The first two fields were `CDELT1' and `='. $ r=$(astfits flat-ir/xdf-f160w.fits -h1 | grep CDELT1 \ | awk '@{print $3@}') ## (8) Print the values of `n' and `r'. $ echo $n $r ## (9) Use the number of pixels (first number passed to AWK) and ## length of each pixel's edge (second number passed to AWK) ## to estimate the area of the field in arc-minutes squared. $ area=(echo $n $r | awk '@{print $1 * ($2^2) * 3600@}') @end example The area of this field is 4.03817 (or 4.04) arc-minutes squared. Just for comparison, this is roughly 175 times smaller than the average moon's angular area (with a diameter of 30arc-minutes or half a degree). @cindex GNU AWK @cartouche @noindent @strong{AWK for table/value processing:} AWK is a powerful and simple tool for text processing. Above (and further below) some simple examples are shown. GNU AWK (the most common implementation) comes with a free and wonderful @url{https://www.gnu.org/software/gawk/manual/, book} in the same format as this book which will allow you to master it nicely. Just like this manual, you can also access GNU AWK's manual on the command-line whenever necessary without taking your hands off the keyboard as described above. @end cartouche This takes us to the second question that you have probably asked yourself when you saw the field for the first time: ``How large is this area at different redshifts?''. To get a feeling of the tangential area that this field covers at redshift 2, you can use @ref{CosmicCalculator}. In particular, you need the tangential distance covered by 1 arc-second as raw output. Combined with the field's area, we can then calculate the tangential distance in Mega Parsecs squared (@mymath{Mpc^2}). @example ## Print general cosmological properties at redshift 2. $ astcosmiccal -z2 ## When given a "Specific calculation" option, CosmicCalculator ## will just print that particular calculation. See the options ## under this title in the output of `--help' for more. $ astcosmiccal --help ## Only print the "Tangential dist. covered by 1arcsec at z (kpc)". ## in units of kpc/arc-seconds. $ astcosmiccal -z2 --arcsectandist ## Convert this distance to kpc^2/arcmin^2 and save in `k'. $ k=$(astcosmiccal -z2 --arcsectandist | awk '@{print ($1*60)^2@}') ## Multiply by the area of the field (in arcmin^2) and divide by ## 10^6 to return value in Mpc^2. $ echo $k $area | awk '@{print $1 * $2 / 1e6@}' @end example @noindent At redshift 2, this field therefore covers 1.07145 @mymath{Mpc^2}. If you would like to see how this tangential area changes with redshift, you can use a shell loop like below. @example $ for z in 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0; do \ k=$(astcosmiccal -z$z --arcsectandist); \ echo $z $k $area | awk '@{print $1, ($2*60)^2 * $3 / 1e6@}'; \ done @end example @noindent Fortunately, the shell has a very useful tool/program to print a sequence of numbers that is nicely called @code{seq}. You can use it instead of typing all the different redshifts in this example. For example the loop below will print the same range of redshifts (between 0.5 and 5) but with increments of 0.1. @example $ for z in $(seq 0.5 0.1 5); do \ k=$(astcosmiccal -z$z --arcsectandist); \ echo $z $k $area | awk '@{print $1, ($2*60)^2 * $3 / 1e6@}'; \ done @end example If you want a fast result and commonly need such processing for a larger number of redshifts, the command above can be slow. This is because the CosmicCalculator program has a lot of overhead: it has to parse the command-line and all configuration files (see below). These are both human-readable characters, not computer-readable bits. CosmicCalculator then has to check the sanity of its inputs and check which of its many options you have asked for. It has to do all of these for every redshift. To greatly speed up the processing, Gnuastro gives you direct access to the root work-horse of CosmicCalculator without all that overhead: @ref{Gnuastro library}. Using Gnuastro's library, you can write your own tiny little program for this same calculation, without all that extra overhead of CosmicCalculator (or any of Gnuastro's programs, see @ref{Library}). For this particular job, you want Gnuastro's @ref{Cosmology library}. Here is one example: put the following small C program in a file called @file{myprogram.c}. @example #include #include #include #include int main(void) @{ double area=4.03817; /* Area of field (arcmin^2). */ double z, adist, tandist; /* Temporary variables. */ /* Constants from Plank 2015 (Paper XIII, A&A 594, 2016) */ double H0=67.74, olambda=0.6911, omatter=0.3089, oradiation=0; /* Do the same thing for all redshifts (z) between 0.1 and 5. */ for(z=0.1; z<5; z+=0.1) @{ /* Calculate the angular diameter distance. */ adist=gal_cosmology_angular_distance(z, H0, olambda, omatter, oradiation); /* Calculate the tangential distance of one arcsecond. */ tandist = adist * 1000 * M_PI / 3600 / 180; /* Print the redshift and area. */ printf("%-5.2f %g\n", z, pow(tandist * 60,2) * area / 1e6); @} /* Tell the system that everything finished successfully. */ return EXIT_SUCCESS; @} @end example @noindent To build and run this C program, you can use @ref{BuildProgram}. It is designed to manage Gnuastro's dependencies, compile the program you give it and then run it. In short, it hides all the complexities of compiling, linking and running C programs based on Gnuastro's library. The library will later be usable higher level languages like Python or Julia, for now it is only usable by C and C++ programs. @example $ astbuildprog myprogram.c @end example See how much faster this is compared to the shell loop we wrote above? You might have noticed that a new file called @file{myprogram} is also created in the directory. This is the compiled program that was created and run by the command above (its in binary machine code, not human-readable any more). You can run it again to get the same results with a command like this: @example $ ./myprogram @end example The efficiency of @file{myprogram} compared to CosmicCalculator is because the requested processing is faster/comparable to the overheads. For other programs that take large input datasets (images for example), the overhead is usually negligible compared to the processing. In such cases, the libraries are only useful if you want a different/new processing compared to the functionalities in Gnuastro's existing programs. Gnuastro has a large library which all the programs use for various steps their processing. For the full list of available functions classified by context, please see @ref{Gnuastro library}. Gnuastro's library and BuildProgram are created to make it easy for you to use these powerful features and get to your scientific results as efficiently (fast) and accurately as possible. Several other complete working examples (involving images and tables) of Gnuastro's libraries can be see in @ref{Library demo programs}. We'll stop with the libraries at this point in this tutorial and get back to Gnuastro's already built programs which ready to be used on the command-line. None of Gnuastro's programs keep a default value internally within their code. However, when you ran CosmicCalculator with the @option{-z2} option above, it completed its processing and printed results. So where did the ``default'' cosmological parameter values (like the matter density and etc) come from? The values come from the command-line or a configuration file (see @ref{Configuration file precedence}). CosmicCalculator has a very limited set of parameters and doesn't need any particular file inputs. Therefore, we'll use it to discuss configuration files which are an important part of all Gnuastro's programs (see @ref{Configuration files}). Once you get comfortable with configuration files, you can easily do the same for the options of all Gnuastro programs. For example, NoiseChisel has the largest number of options in the programs. Therefore configuration files will be very useful for it when you use different datasets (with different noise properties or in different research contexts). The configuration of each program (besides its version) is vital for the reproducibility of your results, so it is very important to manage them properly. As we saw above, the full list of the options in all Gnuastro programs can be seen with the @option{--help} option. Try calling it with CosmicCalculator as shown below. Note how options are grouped by context to make it easier to find your desired option. However, in each group, options are ordered alphabetically. @example $ astcosmiccal --help @end example @noindent The options that need a value have an @key{=} sign after their long version and @code{FLT}, @code{INT} or @code{STR} for floating point numbers, integer numbers and strings (filenames for example) respectively. All options have a long format and some have a short format (a single character), for more see @ref{Options}. When you are using a program, it is often necessary to check the value the option has just before the program starts its processing. In other words, after it has parsed the command-line options and all configuration files. You can see the values of all options that need one with the @option{--printparams} or @code{-P} option that is common to all programs (see @ref{Common options}). In the command below, try replacing @code{-P} with @option{--printparams} to see how both do the same operation. @example $ astcosmiccal -P @end example Let's say you want a different Hubble constant. Try running the following command to see how the Hubble constant in the output of the command above has changed. Afterwards, delete the @option{-P} and add a @option{-z2} to see the results with the new cosmology (or configuration). @example $ astcosmiccal -P --H0=70 @end example From the output of the @code{--help} option, note how the option for Hubble constant has both short (@code{-H}) and long (@code{--H0}) formats. One final note is that the equal (@key{=}) sign is not mandatory. In the short format, the value can stick to the actual option (the short option name is just one character after-all and thus easily identifiable) and in the long format, a white-space character is also enough. @example $ astcosmiccal -H70 -z2 $ astcosmiccal --H0 70 -z2 --arcsectandisk @end example Let's assume that in one project, you want to only use rounded cosmological parameters (H0 of 70km/s/Mpc and matter density of 0.3). You should therefore run CosmicCalculator like this: @example $ astcosmiccal --H0=70 --olambda=0.7 --omatter=0.3 -z2 @end example But having to type these extra options every time you run CosmicCalculator will be prone to errors (typos in particular) and also will be frustrating and slow. Therefore in Gnuastro, you can put all the options and their values in a ``Configuration file'' and tell the programs to read the option values from there. Let's create a configuration file. In your favorite text editor, make a file named @file{my-cosmology.conf} (or @file{my-cosmology.txt}, the suffix doesn't matter) which contains the following lines. One space between the option value and name is enough, the values are just under each other to help in readability. Also note that you can only use long option names in configuration files. @example H0 70 olambda 0.7 omatter 0.3 @end example @noindent You can now tell CosmicCalculator to read this file for option values immediately using the @option{--config} option as shown below. Do you see how the output of the following command corresponds to the option values in @file{my-cosmology.txt} (previous command)? @example $ astcosmiccal --config=my-cosmology.conf -z2 @end example If you need this cosmology every time you are working in a specific directory, you can benefit from Gnuastro's default configuration files to avoid having to call the @option{--config} option. Let's assume that you want any CosmicCalculator call you make in the @file{my-cosmology} directory to use these parameters. You just have to copy the above configuration file into a special directory and file: @example $ mkdir my-cosmology $ mkdir my-cosmology/.gnuastro $ mv my-cosmology.conf my-cosmology/.gnuastro/astcosmiccal.conf @end example Once you run CosmicCalculator within @file{my-cosmology} as shown below, you will see how your cosmology has been implemented without having to type anything extra on the command-line. @example $ cd my-cosmology $ astcosmiccal -z2 $ cd .. @end example To further simplify the process, you can use the @option{--setdirconf} option. If you are already in your desired directory, calling this option with the others will automatically write the final values (along with descriptions) in @file{.gnuastro/astcosmiccal.conf}. For example the commands below will make the same configuration file automatically (with one extra call to CosmicCalculator). @example $ mkdir my-cosmology2 $ cd my-cosmology2 $ astcosmiccal --H0 70 --olambda=0.7 --omatter=0.3 --setdirconf $ astcosmiccal -z2 $ cd .. @end example Gnuastro's programs also have default configuration files for a specific user (when run in any directory). This allows you to set a special behavior every time a program is run by a specific user. Only the directory and filename differ from the above, the rest of the process is similar to before. Finally, there are also system-wide configuration files that can be used to define the option values for all users on a system. See @ref{Configuration file precedence} for a more detailed discussion. We are now ready to start processing the downloaded images. Since these datasets are already aligned, you don't need to align them to make sure the pixel grid covers the same region in all inputs. Gnuastro's Warp program has features for such pixel-grid warping (see @ref{Warp}). Therefore, just for a demonstration, let's assume one image needs to be rotated by 20 degrees to correspond to the other. To do that, you can run the following command: @example $ astwarp flat-ir/xdf-f160w.fits --rotate=20 @end example @noindent Open the output and see the output. If your final image is already aligned with RA and Dec, you can simply use the @option{--align} option and let Warp calculate the necessary rotation. Warp can generally be used for any kind of pixel grid manipulation (warping). For example the outputs of the commands below will respectively have larger pixels (new resolution being one quarter the original resolution), get shifted by 2.8 (by sub-pixel), get a shear of 2, and be tilted (projected). After running each, please open the output file and see the effect. @example $ astwarp flat-ir/xdf-f160w.fits --scale=0.25 $ astwarp flat-ir/xdf-f160w.fits --translate=2.8 $ astwarp flat-ir/xdf-f160w.fits --shear=2 $ astwarp flat-ir/xdf-f160w.fits --project=0.001,0.0005 @end example @noindent You can also combine multiple warps in one command. For example to first rotate the image, then scale it, run this command: @example $ astwarp flat-ir/xdf-f160w.fits --rotate=20 --scale=0.25 @end example If you have multiple warps, do them all in one command. Don't warp them in separate commands because the correlated noise will become too strong. As you see in the matrix that is printed when you run Warp, it merges all the warps into a single warping matrix (see @ref{Warping basics} and @ref{Merging multiple warpings}) and simply applies that just once. Recall that since this is done through matrix multiplication, order matters in the separate operations. In fact through Warp's @option{--matrix} option, you can directly request your desired final warp and don't have to break it up into different warps like above (see @ref{Invoking astwarp}). Fortunately these datasets are already aligned to the same pixel grid, so you don't actually need the files that were just generated. You can safely delete them all with the following command. Here, you see why we put the processed outputs that we need later into a separate directory. In this way, the top directory can be used for temporary files for testing that you can simply delete with a generic command like below. @example $ rm *.fits @end example @noindent To detect the objects in the image, we'll run NoiseChisel: @example $ mkdir noisechisel $ astnoisechisel flat-ir/xdf-f160w.fits -onoisechisel/xdf-f160w.fits @end example Read what NoiseChisel writes on the command-line. The curious thing you will notice is that while there were more than 3000 pseudo detections to find the pseudo-detection S/N, but there were only slightly more than 100 clumps to find the false clump S/N. We will see what caused this after a short review on the output of NoiseChisel. NoiseChisel's output is a single file containing multiple extensions. You can get basic information about the extensions in a FITS file with Gnuastro's Fits program (see @ref{Fits}) as shown below. It contains 6 extensions and the first (counted as zero) is blank (has no data). @example $ astfits noisechisel/xdf-f160w.fits @end example NoiseChisel puts some general information on its outputs in the FITS header of the respective extension. To see the full list of keywords, you can again use the Fits program like above, but also give it your desired extension/HDU. You can also give the extension number (as listed in the output above), for example @option{-h2} instead of @option{-hOBJECTS}. @example $ astfits noisechisel/xdf-f160w.fits -hOBJECTS @end example @cindex GNU Grep The @code{NUMLABS} keyword in NoiseChisel's @code{OBJECTS} extension contains the number of objects that was found by NoiseChisel in that run. Try to visually find it in the header keywords you saw above. To simplify the process, you can pipe the output of the command above into @code{grep} (a program for matching lines which is available on almost all Unix-like operating systems). @example $ astfits noisechisel/xdf-f160w.fits -hOBJECTS | grep NUMLABS @end example @cindex GNU Grep If you just want the value of the keyword and not the full FITS keyword line, you can use AWK. In the example below, AWK will print the third word (separated by white space characters) in any line that has a first column value of @code{NUMLABS}. You can also try this for the third HDU (called @code{CLUMPS}) to see the number of clumps. @example $ astfits noisechisel/xdf-f160w.fits -h2 \ | awk '$1=="NUMLABS" @{print $3@}' @end example Grep and AWK are simple, but very powerful command-line software for processing text files. Learning them properly can greatly simplify your processing, while improve your creativity, productivity and speed. When you get time, it is highly recommended to master them. The most common implementation of both is from GNU. Like almost all GNU software, both GNU Grep and GNU AWK have wonderful manuals which come with the program for free. You don't have to read the whole manual at once, they both start with great generic introductions to get you going fast. As described above, you can read both manuals or refresh your memory on your command-line with these commands: @example $ info awk $ info grep @end example @cindex GNOME You can now open NoiseChisel's output with SAO DS9 and visually inspect it. Just note that since there are multiple extensions, the easiest way to view the whole file is to open it as a ``Multi-extension data cube'' with the @option{-mecube} option as shown below. If you use GNOME (another GNU software, most common graphic user interface in GNU/Linux operating systems), please see @ref{Viewing multiextension FITS images} to open DS9 in multi-extension cube mode by default when using the GUI (double clicking on the file). @example $ ds9 -mecube noisechisel/xdf-f160w.fits -zscale -zoom to fit @end example Using Gnuastro's Fits program, you can also copy a HDU from one FITS file to another (for more, see @ref{HDU manipulation}). So if you want to have a FITS file with only the detected objects, you can run this command: @example $ astfits noisechisel/xdf-f160w.fits --copy=OBJECTS -oobjects.fits @end example One good way to see if you have missed any signal is to mask all the detected pixels and inspect the noise pixels. For this, you can use Gnuastro's Arithmetic program (in particular its @code{where} operator as shown below, see @ref{Arithmetic operators}). With this command, all input pixels that have a value larger than zero in the @code{OBJECTS} extension will be set to NaN in the output (written in @file{det-masked.fits}). If you change the @code{gt} (for ``greater than'') operator to @code{eq} (for ``equal''), all the un-detected (sky) pixels will be masked and you can see the detections. @example $ astarithmetic noisechisel/xdf-f160w.fits \ noisechisel/xdf-f160w.fits 0 gt nan where -h1 -h2 \ --output=nc-masked.fits @end example In some cases, you might want to use a different kernel with NoiseChisel (not the default one). To do that, you can use MakeProfiles (see @ref{MakeProfiles}) in the following manner to build a 2D Gaussian kernel with a FWHM of 3 pixels that extends 5 times the FWHM. This new kernel can later be fed into NoiseChisel with the @option{--kernel} option. @example $ astmkprof --kernel=gaussian,3,5 --oversample=1 -okernel-g-3-5.fits $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel-g-3-5.fits \ --output=nc-my-kernel.fits @end example NoiseChisel can produce ``Check images'' to help you visualize how each step is completed. You can see all the check images it can produce with this command. @example $ astnoisechisel --help | grep check @end example The check images are also multi-extension FITS files. After each check image is produced, open it with ds9 like NoiseChisel's output above and flip through the extensions to see each processing in detail. It is @emph{strongly} encouraged to play with the different parameters and use the respective check images to see which step is affected by your change. The three most useful check images are @option{--checkqthresh}, @option{--checkdetection}, and @option{--checksegmentation}. We can now get back to the curious situation we noticed after running NoiseChisel: the number of false clumps to find an S/N limit was very small (given the extent of this image). This is bad, because we use quantiles in NoiseChisel and such a small number will result in a relatively large scatter. Since this is a segmentation issue, let's see why this happens with @option{--checksegmentation}. @example $ astnoisechisel flat-ir/xdf-f160w.fits --checksegmentation @end example To help you get a result faster, when check images are requested, NoiseChisel doesn't finish its processing (unless you also call @option{--continueaftercheck}). NoiseChisel aborts with an explanation of why it stopped without finishing and the file name of the check image that it produced. The first five extensions are: the input image, the convolved image, the initially labeled detected regions, all the sky region (false) clumps, and those that will be used for S/N. The sky clumps are found over NoiseChisel's ``large tiles'' independently. When inspecting the fourth extension of the check image, it is interesting how NoiseChisel has ignored most large tiles and only used the few that we see, mostly on the edge. The reason that almost all internal large tiles are ignored is that galaxies are extended and this is a very deep (and small) image. Thanks to the PSF (see @ref{PSF}), no object will have a sharp truncation. We have not seen any abrupt break in the light profile of any galaxy: galaxies are always larger when we get deeper datasets. Therefore, in a noisy image, some light will always be left un-detected. To be less affected by this un-detected light, NoiseChisel has the @option{--minskyfrac} option (see @ref{General NoiseChisel options}): any tile that has a larger fraction of detected pixels will be ignored. So let's see what the default value of this option is (recall that with @option{-P}, you can list all the options with their values in Gnuastro's programs): @example $ astnoisechisel -P | grep minskyfrac @end example @noindent Try decreasing this value and re-running NoiseChisel to see the effect on the fraction of large tiles that will be used for finding false/sky clumps. Play a little with this parameter (give it different values and check the result). @example $ astnoisechisel flat-ir/xdf-f160w.fits --minskyfrac=0.5 \ --checksegmentation @end example The smaller the value to @option{--minskyfrac}, the more probable that un-detected light in the wings of galaxies will bias/affect the derived false clump S/N. So it is always important to find a good balance between a larger @option{--minskyfrac} while having a sufficient number of resulting clumps (to avoid scatter). NoiseChisel doesn't just find the labeled pixels, it also finds the Sky value and the Sky standard deviation in the final two extensions of its output. To generate a catalog of the colors, we will be using the NoiseChisel labeled image from the F160W image. But the Sky and Sky standard deviation values for each different filter will also be necessary. So we'll run NoiseChisel with our finalized parameters value on both filters (you can also put this option's value in a configuration file to avoid repeating it). @example $ astnoisechisel flat-ir/xdf-f105w.fits -onoisechisel/xdf-f105w.fits \ --minskyfrac=0.5 $ astnoisechisel flat-ir/xdf-f160w.fits -onoisechisel/xdf-f160w.fits \ --minskyfrac=0.5 @end example Now, we are ready to make a catalog. We want the object and clump labels from the F160W image. But the input, Sky and Sky standard deviation images should come from each filter. So, we'll run MakeCatalog on NoiseChisel's output differently for each filter. When making the F105W catalog, we'll use the @option{--objectsfile} and @option{--clumpsfile} options to tell MakeCatalog to read the object and clump labels from the F160W NoiseChisel output. When these options aren't given, MakeCatalog will look into the same input file for object and clump labels. For both filters, we'll ask for the ID, RA, Dec, Magnitude and signal-to-noise ratio (see @ref{Quantifying measurement limits}). To see a list of all the parameters that MakeCatalog can measure for you, run it with @option{--help} option. @example $ mkdir catalog $ astmkcatalog noisechisel/xdf-f160w.fits --zeropoint=25.94 \ --ids --ra --dec --magnitude --sn \ --output=catalog/xdf-f160w.fits $ astmkcatalog noisechisel/xdf-f105w.fits --zeropoint=26.27 \ --objectsfile=noisechisel/xdf-f160w.fits \ --clumpsfile=noisechisel/xdf-f160w.fits \ --ids --ra --dec --magnitude --sn \ --output=catalog/xdf-f105w.fits @end example MakeCatalog can also produce catalogs in plain text format. Please run the MakeCatalog commands above again and replace the @file{.fits} suffix, in the value to @option{--output}, with @file{.txt} (we will also be using the text file outputs later). When a clumps image is also given@footnote{MakeCatalog will look at the @code{WCLUMPS} keyword in the objects image to see if it should also use a clumps image or not.}, like this example, two catalogs will be made. If you asked for a plain text file output, two files will be made with the @file{_c.txt} and @file{_o.txt} suffixes. If MakeCatalog's output is requested to be FITS, the two catalogs will be in separate extensions of a single file. You can inspect the separate extensions with the Fits program like before (as shown below). Afterwards, you can inspect the table in each extension with Gnuastro's Table program (see @ref{Table}) as shown below. @example $ astfits catalog/xdf-f105w.fits # Extension information $ asttable catalog/xdf-f105w.fits -h1 --info # Objects catalog info. $ asttable catalog/xdf-f105w.fits -h1 # Objects catalog columns. $ asttable catalog/xdf-f105w.fits -h2 -i # Clumps catalog info. $ asttable catalog/xdf-f105w.fits -h2 # Clumps catalog columns. @end example As you see above, to see the column contents of each table, you can just remove the @option{--info} (or @option{-i}) option. If you want to print the contents of special column(s), just specify the column number(s) (counting from @code{1}, same as output of the command above) or the column name(s) (if they have one). For example, if you just want the objects and clumps magnitude and signal-to-noise ratio in the F160W filter. You can get it with the following commands. @example $ asttable catalog/xdf-f160w.fits -h1 -cMAGNITUDE -cSN $ asttable catalog/xdf-f160w.fits -h2 -cMAGNITUDE -cSN @end example The clumps catalog has two ID columns (one for the over-all clump ID and one for the ID of the clump in its host object), the magnitude column numbers differ between the object and clumps catalog. So if you want to specify the columns by number, you will need to change the numbers when viewing the clump and objects catalogs. This is a useful advantage of having/using column names. @example $ asttable catalog/xdf-f160w.fits -h1 -c4 -c5 $ asttable catalog/xdf-f160w.fits -h2 -c5 -c6 @end example Finally, the comments in MakeCatalog's output (in FITS headers or lines starting with @code{#} in plain text) contain some important information about the dataset that can be useful. Open @file{catalog/xdf-f160w_o.txt} in a text editor to see them. Since we used the same labeled image on both filters, the number of rows in both catalogs are the same. So, let's measure the colors of the objects in this image. We'll merge the two clump catalogs together into one using the @code{paste} program on the command-line. The output file will have each line of both catalogs merged into a single line. @example $ paste catalog/xdf-f160w_c.txt catalog/xdf-f105w_c.txt \ > xdf-f160w-f105w_c_p.txt @end example Open @file{xdf-f160w-f105w_c_p.txt} after making it to see how @command{paste} has operated. We can now use AWK to find the colors. We'll ask AWK to only use lines that don't start with @code{#} and don't have a NaN magnitude in the 9th column (F105W magnitude@footnote{Recall that the objects and clumps labels were made on the F160W image. On the F105W image, there might not be enough signal, so random scatter may give a negative total brightness and thus a NaN magnitude.}). We will also ignore columns which don't have reliable F105W magnitudes (with a S/N less than 7@footnote{The value of 7 is taken from the clump S/N threshold in F160W (where the clumps were defined).}). For the other lines, AWK will print the ID, positional columns and the difference between the respective magnitude columns. @example $ awk '!/^#/ && $11!="nan" && $12>7 @{print $1, $2, $3, $4, $11-$5@}' \ xdf-f160w-f105w_c_p.txt > catalog/xdf-f105w-f160w_c.txt @end example Gnuastro has a simple program for basic statistical analysis. The command below will print some basic information about the distribution (minimum, maximum, median and etc), along with a cute little ASCII histogram to visually help you understand the distribution on the command-line without the need for a graphic user interface (see @ref{Invoking aststatistics}). This ASCII histogram can be useful when you just want some coarse and general information on the input dataset. It is also useful when working on a server (where you may not have graphic user interface), and finally, its fast. @example $ aststatistics catalog/xdf-f105w-f160w_c.txt -c5 @end example You can later use Gnuastro's Statistics program with the @option{--histogram} option to build a much more fine-grained histogram as a table to feed into your favorite plotting program for a much more accurate/appealing plot. If you just want a specific measure, for example the mean, median and standard deviation, you can ask for them specifically: @example $ aststatistics catalog/xdf-f105w-f160w_c.txt -c5 --mean --median --std @end example Some researchers prefer to have colors in a fixed aperture for all the objects. The colors we calculated above used a different segmentation map for each object. This might not satisfy some science cases. To make a fixed aperture catalog, we should make a labeled image which has a fixed label for each aperture. That labeled image can be given to MakeCatalog instead of NoiseChisel's labeled detection image. @cindex GNU AWK We'll use the objects catalog in the F160W catalog we generated before for the positions and set the other parameters of each profile to be a fixed circle of radius 5 pixels (we want all apertures to be fixed after all). AWK is a wonderful tool for such jobs as the command below shows. @example $ awk '!/^#/@{print $1, $2, $3, 5, 5, 0, 0, 1, $1, 1@}' \ catalog/xdf-f160w_c.txt > catalog/apertures.txt @end example We can now feed this catalog into MakeProfiles to build the apertures for us. See @ref{Invoking astmkprof} for a description of the options. The most important for this particular job is @option{--mforflatpix}, it tells MakeProfiles that the values in the magnitude column should be used for each pixel of a flat profile. Without it, MakeProfiles would build the profiles such that the @emph{sum} of the pixels of each profile would have a @emph{magnitude} (in log-scale) of the value given in that column (what you would expect when simulating a galaxy for example). @example $ astmkprof catalog/apertures.txt --background=flat-ir/xdf-f160w.fits \ --clearcanvas --replace --type=int16 --mforflatpix \ --mode=wcs @end example The first thing you might notice in the printed information is that the profiles are not built in order. This is because MakeProfiles works in parallel and parallel CPU operations are asynchronous. Without @option{--replace}, the output is the same in any case. You can try running MakeProfiles with one thread (using @option{--numthreads=1} to see how order is respected in that case. Open the output @file{apertures.fits} file and see the result. Where the apertures overlap, you will notice that one label has replaced the other (because of the @option{--replace} option). In the future, MakeCatalog will be able to work with overlapping labels, but currently it doesn't. If you are interested, please join us in completing Gnuastro with added improvements like this (see task 14750 @footnote{@url{https://savannah.gnu.org/task/index.php?14750}}). @file{apertures.fits} labeled image can now be fed input into MakeCatalog. Similar to how we used the F160W labels for the F105W catalog: the labels don't have to be produced by NoiseChisel. In comparison with the previous MakeCatalog call, notice how 1) we have no more clumps image, 2) that we have set @option{--objectshdu=1} (since @file{apertures.fits} is not the output of NoiseChisel where the labeled image is in the third extension), and 3) that we are now using @option{--objid} instead of @option{--ids} to avoid warnings that some ID columns are only for clumps. @example $ astmkcatalog noisechisel/xdf-f105w.fits --zeropoint=26.27 \ --objectsfile=apertures.fits --objectshdu=1 \ --objid --ra --dec --magnitude --sn \ --output=catalog/xdf-f105w-aper.fits @end example Change the filter name and zeropoint magnitudes and run this command again to have the fixed aperture magnitude in the F160W filter also. From this point on, you can follow the previous steps to derive the color in a fixed aperture. We will now find some of the objects with the strongest color difference and make a cutout to inspect them visually: let's see what the objects with a color more than two magnitudes look like. @cindex AWK We'll use the @file{catalog/xdf-f105w-f160w_c.txt} file that we produced above. With the command below, all lines with a color value more than 2 will be put in @file{reddest.txt} and inspect it using @command{cat}. @example $ awk '$5>1' catalog/xdf-f105w-f160w_c.txt > reddest.txt $ cat reddest.txt @end example We can now feed @file{reddest.txt} into Gnuastro's crop to see what these objects look like. To keep things clean, we'll make a directory called @file{reddest} and ask Crop to save the crops in this directory. We'll also add a @file{-f160w.fits} suffix to the crops. @example $ mkdir crop $ astcrop --mode=wcs --coordcol=3 --coordcol=4 flat-ir/xdf-f160w.fits \ --catalog=reddest.txt --width=15/3600,15/3600 \ --suffix=-f160w.fits --output=crop @end example Like the MakeProfiles command above, you might notice that the crops aren't made in order. Since each crop is independent of the rest, the crops are done in parallel and parallel operations are asynchronous. In the command above, change @file{f160w} to @file{f105w} to make the crops in both filters. To view the crops more easily (not having to open ds9 for each image), you can convert the FITS crops into the JPEG format. @example $ for f in *.fits; do \ astconvertt $f --fluxlow=-0.001 --fluxhigh=0.005 --invert -ojpg; \ done @end example The loop above is in series: each file is processed only after the previous ones are complete. If you have @url{https://www.gnu.org/software/parallel, GNU Parallel}, you can greatly speed up this conversion. GNU Parallel will run the separate commands simultaneously on different CPU threads in parallel. For more information on efficiently using your threads, see @ref{Multi-threaded operations}. @example $ parallel astconvertt --fluxlow=-0.001 --fluxhigh=0.005 --invert \ -ojpg ::: *.fits @end example You can now easily use your general GUI image viewer to flip through the images more easily. On GNOME, you can use the ``Eye of GNOME'' image viewer (with executable name of @file{eog}). Run the command below and by pressing the @key{} key, you can flip through the images and compare them visually more easily. Of course, the flux ranges have been chosen generically here for seeing the fainter parts. Therefore, brighter objects will be fully black. @example $ eog 1-f105w.jpg @end example Another thing that is commonly needed is to visually mark these objects on the image. DS9 has ``Region''s for this purpose. You just have to convert your catalog into a ``region file'' to feed into DS9. To do that, you can use AWK again as shown below. @example $ cd .. $ awk 'BEGIN@{print "# Region file format: DS9 version 4.1"; \ print "global color=green width=2"; \ print "fk5";@} \ @{printf "circle(%s,%s,1\")\n", $3, $4;@}' reddest.txt \ > reddest.reg @end example This region file can be loaded into DS9 with its @option{-regions} option as shown below (see above for the other options): @example $ ds9 -mecube noisechisel/xdf-f160w.fits -zscale -zoom to fit \ -regions load all reddest.reg @end example Finally, if this book or any of the programs in Gnuastro have been useful for your research, please cite the respective papers. All Gnuastro programs have a @option{--cite} option to help you cite the authors' work more easily. For example: @example $ astmkcatalog --cite @end example @node Installation, Common program behavior, Tutorials, Top @chapter Installation @c This link is put here because the `Quick start' section of the first @c chapter is not the most eye-catching part of the manual and some users @c were seen to follow this ``Installation'' chapter title in search of the @c tarball and fast instructions. @cindex Installation The latest released version of Gnuastro source code is always available at the following URL: @url{http://ftpmirror.gnu.org/gnuastro/gnuastro-latest.tar.gz} @noindent @ref{Quick start} describes the commands necessary to configure, build, and install Gnuastro on your system. This chapter will be useful in cases where the simple procedure above is not sufficient, for example your system lacks a mandatory/optional dependency (in other words, you can't pass the @command{$ ./configure} step), or you want greater customization, or you want to build and install Gnuastro from other random points in its history, or you want a higher level of control on the installation. Thus if you were happy with downloading the tarball and following @ref{Quick start}, then you can safely ignore this chapter and come back to it in the future if you need more customization. @ref{Dependencies} describes the mandatory, optional and bootstrapping dependencies of Gnuastro. Only the first group are required/mandatory when you are building Gnuastro using a tarball (see @ref{Release tarball}), they are very basic and low-level tools used in most astronomical software, so you might already have them installed, if not they are very easy to install as described for each. @ref{Downloading the source} discusses the two methods you can obtain the source code: as a tarball (a significant snapshot in Gnuastro's history), or the full history@footnote{@ref{Bootstrapping dependencies} are required if you clone the full history.}. The latter allows you to build Gnuastro at any random point in its history (for example to get bug fixes or new features that are not released as a tarball yet). The building and installation of Gnuastro is heavily customizable, to learn more about them, see @ref{Build and install}. This section is essentially a thorough explanation of the steps in @ref{Quick start}. It discusses ways you can influence the building and installation. If you encounter any problems in the installation process, it is probably already explained in @ref{Known issues}. In @ref{Other useful software} the installation and usage of some other free software that are not directly required by Gnuastro but might be useful in conjunction with it is discussed. @menu * Dependencies:: Necessary packages for Gnuastro. * Downloading the source:: Ways to download the source code. * Build and install:: Configure, build and install Gnuastro. @end menu @node Dependencies, Downloading the source, Installation, Installation @section Dependencies The dependencies needed to build and install Gnuastro are defined by the features you want and how you would like to obtain the source code (see @ref{Downloading the source}). A minimal set of dependencies are mandatory, if they are not present you cannot get passed the configuration step. Such mandatory dependencies are therefore very basic (low-level) tools which are easy to obtain, build and install, see @ref{Mandatory dependencies} for a full discussion. If you have the packages of @ref{Optional dependencies}, Gnuastro will have additional functionality (for example converting FITS images to JPEG or PDF). If you are installing from a tarball as explained in @ref{Quick start}, you can stop reading after this section. However, if you decided to use the version controlled source instead of the tarball (see @ref{Version controlled source}), an additional bootstrapping step is required before configuration and its dependencies are explained in @ref{Bootstrapping dependencies}. @menu * Mandatory dependencies:: Gnuastro will not install without these. * Optional dependencies:: Adding more functionality. * Bootstrapping dependencies:: If you have the version controlled source. @end menu @node Mandatory dependencies, Optional dependencies, Dependencies, Dependencies @subsection Mandatory dependencies @cindex Dependencies, Gnuastro @cindex GNU build system The mandatory Gnuastro dependencies are very basic and low-level tools. They all follow the same basic GNU based build system (like that shown in @ref{Quick start}), so even if you don't have them, installing them should be pretty straightforward. In this section we explain each program and any specific note that might be necessary in the installation. @cindex Building from source @cindex Compiling from source @cindex Source code building @cindex Source code compilation @cindex Package managers The most basic choice is to build the packages from source yourself, instead of relying on your distribution's package management system. While the latter choice is indeed possible, we recommend that you build these dependencies yourself as discussed below. We will send out notifications in the @command{info-gnuastro} mailing list, see @ref{Announcements} when we find out that these requirements are updated. @enumerate @item For each package, Gnuastro might preform better (or require) certain configuration options that your distribution's package managers didn't add for you. If present, these configuration options are explained during the installation of each in the sections below. When the proper configuration has not been set, the programs should complain and inform you. @item Your distribution's pre-built package might not be the most recent release. @item For the libraries, they might separate the binary file from the header files, see @ref{Known issues}. @item Like any other tool, the science you derive from Gnuastro's tools highly depend on these lower level dependencies, so generally it is much better to have a close connection with them. By reading their manuals, installing them and staying up to date with changes/bugs in them, your scientific results and understanding will also correspondingly improve. @end enumerate @menu * GNU Scientific Library:: Installing GSL. * CFITSIO:: C interface to the FITS standard. * WCSLIB:: C interface to the WCS standard of FITS. @end menu @node GNU Scientific Library, CFITSIO, Mandatory dependencies, Mandatory dependencies @subsubsection GNU Scientific library @cindex GNU Scientific Library The @url{http://www.gnu.org/software/gsl/, GNU Scientific Library}, or GSL, is a large collection of functions that are very useful in scientific applications, for example integration, random number generation, and Fast Fourier Transform among many others. To install GSL from source, you can run the following commands after you have downloaded @url{ftp://ftp.gnu.org/gnu/gsl/gsl-latest.tar.gz, @file{gsl-latest.tar.gz}}: @example $ tar xf gsl-latest.tar.gz $ cd gsl-X.X # Replace X.X with version number. $ ./configure $ make -j8 # Replace 8 with no. CPU threads. $ make check $ sudo make install @end example @node CFITSIO, WCSLIB, GNU Scientific Library, Mandatory dependencies @subsubsection CFITSIO @cindex CFITSIO @cindex FITS standard @url{http://heasarc.gsfc.nasa.gov/fitsio/, CFITSIO} is the closest you can get to the pixels in a FITS image while remaining faithful to the @url{http://fits.gsfc.nasa.gov/fits_standard.html, FITS standard}. It is written by William Pence, the principal author of the FITS standard@footnote{Pence, W.D. et al. Definition of the Flexible Image Transport System (FITS), version 3.0. (2010) Astronomy and Astrophysics, Volume 524, id.A42, 40 pp.}, and is regularly updated. Setting the definitions for all other software packages using FITS images. @vindex --enable-reentrant @cindex Reentrancy, multiple file opening @cindex Multiple file opening, reentrancy Some GNU/Linux distributions have CFITSIO in their package managers, if it is available and updated, you can use it. One problem that might occur is that CFITSIO might not be configured with the @option{--enable-reentrant} option by the distribution. This option allows CFITSIO to open a file in multiple threads, it can thus provide great speed improvements. If CFITSIO was not configured with this option, any program which needs this capability will warn you and abort when you ask for multiple threads (see @ref{Multi-threaded operations}). To install CFITSIO from source, we strongly recommend that you have a look through Chapter 2 (Creating the CFITSIO library) of the CFITSIO manual and understand the options you can pass to @command{$ ./configure} (they aren't too much). This is a very basic package for most astronomical software and it is best that you configure it nicely with your system. Once you download the source and unpack it, the following configure script should be enough for most purposes. Don't forget to read chapter two of the manual though, for example the second option is only for 64bit systems. The manual also explains how to check if it has been installed correctly. CFITSIO comes with two executables called fpack and funpack. From their manual: they ``are standalone programs for compressing and uncompressing images and tables that are stored in the FITS (Flexible Image Transport System) data format. They are analogous to the gzip and gunzip compression programs except that they are optimized for the types of astronomical images that are often stored in FITS format''. The commands below will compile and install them on your system along with CFITSIO. They are not essential for Gnuastro, since they are just wrappers for functions within CFITSIO, but they can come in handy. The @command{make utils} command is only available for versions above 3.39, it will build these executables along with several other test executables which are deleted before the installation (otherwise they will also be installed). The CFITSIO installation from source process is given below. Let's assume you have downloaded @url{http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/cfitsio_latest.tar.gz, @file{cfitsio_latest.tar.gz}} and are in the same directory: @example $ tar xf cfitsio_latest.tar.gz $ cd cfitsio $ ./configure --prefix=/usr/local --enable-sse2 --enable-reentrant $ make $ make utils $ ./testprog > testprog.lis $ diff testprog.lis testprog.out # Should have no output $ cmp testprog.fit testprog.std # Should have no output $ rm cookbook fitscopy imcopy smem speed testprog $ sudo make install @end example @node WCSLIB, , CFITSIO, Mandatory dependencies @subsubsection WCSLIB @cindex WCS @cindex WCSLIB @cindex World Coordinate System @url{http://www.atnf.csiro.au/people/mcalabre/WCS/, WCSLIB} is written and maintained by one of the authors of the World Coordinate System (WCS) definition in the @url{http://fits.gsfc.nasa.gov/fits_standard.html, FITS standard}@footnote{Greisen E.W., Calabretta M.R. (2002) Representation of world coordinates in FITS. Astronomy and Astrophysics, 395, 1061-1075.}, Mark Calabretta. It might be already built and ready in your distribution's package management system. However, here the installation from source is explained, for the advantages of installation from source please see @ref{Mandatory dependencies}. To install WCSLIB you will need to have CFITSIO already installed, see @ref{CFITSIO}. @vindex --without-pgplot WCSLIB also has plotting capabilities which use PGPLOT (a plotting library for C). If you wan to use those capabilities in WCSLIB, @ref{PGPLOT} provides the PGPLOT installation instructions. However PGPLOT is old@footnote{As of early June 2016, its most recent version was uploaded in February 2001.}, so its installation is not easy, there are also many great modern WCS plotting tools (mostly in written in Python). Hence, if you will not be using those plotting functions in WCSLIB, you can configure it with the @option{--without-pgplot} option as shown below. Let's assume you have downloaded @url{ftp://ftp.atnf.csiro.au/pub/software/wcslib/wcslib.tar.bz2, @file{wcslib.tar.bz2}} and are in the same directory: @example $ tar xf wcslib.tar.bz2 $ cd wcslib-X.X # Replace X.X with version number $ ./configure --without-pgplot LIBS="-pthread -lm" --disable-fortran $ make $ make check $ sudo make install @end example @node Optional dependencies, Bootstrapping dependencies, Mandatory dependencies, Dependencies @subsection Optional dependencies The libraries listed here are only used for very specific applications, therefore if you don't want these operations, Gnuastro will be built and installed without them and you don't have to have the dependencies. @cindex GPL Ghostscript If the @command{./configure} script can't find these requirements, it will warn you in the end that they are not present and notify you of the operation(s) you can't do due to not having them. If the output you request from a program requires a missing library, that program is going to warn you and abort. In the case of executables like GPL GhostScript, if you install them at a later time, the program will run. This is because if required libraries are not present at build time, the executables cannot be built, but an executable is called by the built program at run time so if it becomes available, it will be used. If you do install an optional library later, you will have to rebuild Gnuastro and reinstall it for it to take effect. @table @asis @item GNU Libtool @cindex GNU Libtool Libtool is a program to simplify managing of the libraries to build an executable (a program). GNU Libtool has some added functionality compared to other implementations. If GNU Libtool isn't present on your system at configuration time a warning will be printed and @ref{BuildProgram} won't be built or installed. The configure script will look into your search path (@code{PATH}) for GNU Libtool through the following executable names: @command{libtool} (acceptable only if it is the GNU implementation) or @command{glibtool}. See @ref{Installation directory} for more on @code{PATH}. GNU Libtool (the binary/executable file) is a low-level program that is probably already present on your system, and if not, is available in your operating system package manager@footnote{Note that we want the binary/executable Libtool program which can be run on the command-line. In Debian-based operating systems which separate various parts of a package, you want want @code{libtool-bin}, the @code{libtool} package won't contain the executable program.}. If you want to install GNU Libtool's latest version from source, please visit its @url{https://www.gnu.org/software/libtool/, webpage}. Gnuastro's tarball is shipped with an internal implementation of GNU Libtool. Even if you have GNU Libtool, Gnuastro's internal implementation is used for the building and installation of Gnuastro. As a result, you can still build, install and use Gnuastro even if you don't have GNU Libtool installed on your system. However, this internal Libtool does not get installed. Therefore, after Gnuastro's installation, if you want to use @ref{BuildProgram} to compile and link your own C source code which uses the @ref{Gnuastro library}, you need to have GNU Libtool available on your system (independent of Gnuastro). See @ref{Review of library fundamentals} to learn more about libraries. @item libgit2 @cindex Git @cindex libgit2 @cindex Version control systems Git is one of the most common version control systems (see @ref{Version controlled source}). When @file{libgit2} is present, and Gnuastro's programs are run within a version controlled directory, outputs will contain the version number of the working directory's repository for future reproducibility. See the @command{COMMIT} keyword header in @ref{Output headers} for a discussion. @item libjpeg @pindex libjpeg @cindex JPEG format libjpeg is only used by ConvertType to read from and write to JPEG images. @url{http://www.ijg.org/, libjpeg} is a very basic library that provides tools to read and write JPEG images, most of the GNU/Linux graphic programs and libraries use it. Therefore you most probably already have it installed. @url{http://libjpeg-turbo.virtualgl.org/, libjpeg-turbo} is an alternative to libjpeg. It uses SIMD instructions for ARM based systems that significantly decreases the processing time of JPEG compression and decompression algorithms. @item GPL Ghostscript @cindex GPL Ghostscript GPL Ghostscript's executable (@command{gs}) is called used by ConvertType to compile a PDF file from a source PostScript file, see @ref{ConvertType}. Therefore its headers (and libraries) are not needed. With a very high probability you already have it in your GNU/Linux distribution. Unfortunately it does not follow the standard GNU build style so installing it is very hard. It is best to rely on your distribution's package managers for this. @end table @node Bootstrapping dependencies, , Optional dependencies, Dependencies @subsection Bootstrapping dependencies Bootstrapping is only necessary if you have decided to obtain the full version controlled history of Gnuastro, see @ref{Version controlled source} and @ref{Bootstrapping}. Using the version controlled source enables you to always be up to date with the most recent development work of Gnuastro (bug fixes, new functionalities, improved algorithms and etc). If you have downloaded a tarball (see @ref{Downloading the source}), then you can ignore this subsection. To successfully run the bootstrapping process, there are some additional dependencies to those discussed in the previous subsections. These are low level tools that are used by a large collection of Unix-like operating systems programs, therefore they are most probably already available in your system. If they are not already installed, you should be able to easily find them in any GNU/Linux distribution package management system (@command{apt-get}, @command{yum}, @command{pacman} and etc). The short names in parenthesis in @command{typewriter} font after the package name can be used to search for them in your package manager. For the GNU Portability Library, GNU Autoconf Archive and @TeX{} Live, it is recommended to use the instructions here, not your operating system's package manager. @table @asis @item GNU Portability Library (Gnulib) @cindex GNU C library @cindex Gnulib: GNU Portability Library @cindex GNU Portability Library (Gnulib) To ensure portability for a wider range of operating systems (those that don't include GNU C library, namely glibc), Gnuastro depends on the GNU portability library, or Gnulib. Gnulib keeps a copy of all the functions in glibc, implemented (as much as possible) to be portable to other operating systems. The @file{bootstrap} script can automatically clone Gnulib (as a @file{gnulib/} directory inside Gnuastro), however, as described in @ref{Bootstrapping} this is not recommended. The recommended way to bootstrap Gnuastro is to first clone Gnulib and the Autoconf archives (see below) into a local directory outside of Gnuastro. Let's call it @file{DEVDIR}@footnote{If you are not a developer in Gnulib or Autoconf archives, @file{DEVDIR} can be a directory that you don't backup. In this way the large number of files in these projects won't slow down your backup process or take bandwidth (if you backup to a remote server).} (which you can set to any directory). Currently in Gnuastro, both Gnulib and Autoconf archives have to be cloned in the same top directory@footnote{If you already have the Autoconf archives in a separate directory, or can't clone it in the same directory as Gnulib, or you have it with another directory name (not @file{autoconf-archive/}), you can follow this short step. Set @file{AUTOCONFARCHIVES} to your desired address. Then define a symbolic link in @file{DEVDIR} with the following command so Gnuastro's bootstrap script can find it:@*@command{$ ln -s $AUTOCONFARCHIVES $DEVDIR/autoconf-archive}.} like the case here@footnote{If your internet connection is active, but Git complains about the network, it might be due to your network setup not recognizing the git protocol. In that case use the following URL for the HTTP protocol instead (for Autoconf archives, replace the name): @command{http://git.sv.gnu.org/r/gnulib.git}}: @example $ DEVDIR=/home/yourname/Development $ cd $DEVDIR $ git clone git://git.sv.gnu.org/gnulib.git $ git clone git://git.sv.gnu.org/autoconf-archive.git @end example @noindent You now have the full version controlled source of these two repositories in separate directories. Both these packages are regularly updated, so every once in a while, you can run @command{$ git pull} within them to get any possible updates. @item GNU Automake (@command{automake}) @cindex GNU Automake GNU Automake will build the @file{Makefile.in} files in each sub-directory using the (hand-written) @file{Makefile.am} files. The @file{Makefile.in}s are subsequently used to generate the @file{Makefile}s when the user runs @command{./configure} before building. @item GNU Autoconf (@command{autoconf}) @cindex GNU Autoconf GNU Autoconf will build the @file{configure} script using the configurations we have defined (hand-written) in @file{configure.ac}. @item GNU Autoconf Archive @cindex GNU Autoconf Archive These are a large collection of tests that can be called to run at @command{./configure} time. See the explanation under GNU Portability Library above for instructions on obtaining it and keeping it up to date. @item GNU Libtool (@command{libtool}) @cindex GNU Libtool GNU Libtool is in charge of building all the libraries in Gnuastro. The libraries contain functions that are used by more than one program and are installed for use in other programs. They are thus put in a separate directory (@file{lib/}). @item GNU help2man (@command{help2man}) @cindex GNU help2man GNU help2man is used to convert the output of the @option{--help} option (@ref{--help}) to the traditional Man page (@ref{Man pages}). @item @LaTeX{} and some @TeX{} packages @cindex @LaTeX{} @cindex @TeX{} Live Some of the figures in this book are built by @LaTeX{} (using the PGF/TikZ package). The @LaTeX{} source for those figures is version controlled for easy maintenance not the actual figures. So the @file{./boostrap} script will run @LaTeX{} to build the figures. The best way to install @LaTeX{} and all the necessary packages is through @url{https://www.tug.org/texlive/, @TeX{} live} which is a package manager for @TeX{} related tools that is independent of any operating system. It is thus preferred to the @TeX{} Live versions distributed by your operating system. To install @TeX{} Live, go to the webpage and download the appropriate installer by following the ``download'' link. Note that by default the full package repository will be downloaded and installed (around 4 Giga Bytes) which can take @emph{very} long to download and to update later. However, most packages are not needed by everyone, it is easier, faster and better to install only the ``Basic scheme'' (consisting of only the most basic @TeX{} and @LaTeX{} packages, which is less than 200 Mega bytes)@footnote{You can also download the DVD iso file at a later time to keep as a backup for when you don't have internet connection if you need a package.}. After the installation, be sure to set the environment variables as suggested in the end of the outputs. Any time you confront (need) a package you don't have, simply install it with a command like below (similar to how you install software from your operating system's package manager)@footnote{After running @TeX{}, or @LaTeX{}, you might get a warning complaining about a @file{missingfile}. Run `@command{tlmgr info missingfile}' to see the package(s) containing that file which you can install.}. To install all the necessary @TeX{} packages for a successful Gnuastro bootstrap, run this command: @example $ su # tlmgr install epsf jknapltx caption biblatex biber iftex \ etoolbox logreq xstring xkeyval pgf ms \ xcolor pgfplots times rsfs pstools epspdf @end example @item ImageMagick (@command{imagemagick}) @cindex ImageMagick ImageMagick is a wonderful and robust program for image manipulation on the command-line. @file{bootsrap} uses it to convert the book images into the formats necessary for the various book formats. @end table @node Downloading the source, Build and install, Dependencies, Installation @section Downloading the source Gnuastro's source code can be downloaded in two ways. As a tarball, ready to be configured and installed on your system (as described in @ref{Quick start}), see @ref{Release tarball}. If you want official releases of stable versions this is the best, easiest and most common option. Alternatively, you can clone the version controlled history of Gnuastro, run one extra bootstrapping step and then follow the same steps as the tarball. This will give you access to all the most recent work that will be included in the next release along with the full project history. The process is thoroughly introduced in @ref{Version controlled source}. @menu * Release tarball:: Download a stable official release. * Version controlled source:: Get and use the version controlled source. @end menu @node Release tarball, Version controlled source, Downloading the source, Downloading the source @subsection Release tarball A release tarball (commonly compressed) is the most common way of obtaining free and open source software. A tarball is a snapshot of one particular moment in the Gnuastro development history along with all the necessary files to configure, build, and install Gnuastro easily (see @ref{Quick start}). It is very straightforward and needs the least set of dependencies (see @ref{Mandatory dependencies}). Gnuastro has tarballs for official stable releases and pre-releases for testing. See @ref{Version numbering} for more on the two types of releases and the formats of the version numbers. The URLs for each type of release are given below. @table @asis @item Official stable releases (@url{http://ftp.gnu.org/gnu/gnuastro}): This URL hosts the official stable releases of Gnuastro. Always use the most recent version (see @ref{Version numbering}). By clicking on the ``Last modified'' title of the second column, the files will be sorted by their date which you can also use to find the latest version. It is recommended to use a mirror to download these tarballs, please visit @url{http://ftpmirror.gnu.org/gnuastro/} and see below. @item Pre-release tar-balls (@url{http://alpha.gnu.org/gnu/gnuastro}): This URL contains unofficial pre-release versions of Gnuastro. The pre-release versions of Gnuastro here are for enthusiasts to try out before an official release. If there are problems, or bugs then the testers will inform the developers to fix before the next official release. See @ref{Version numbering} to understand how the version numbers here are formatted. If you want to remain even more up-to-date with the developing activities, please clone the version controlled source as described in @ref{Version controlled source}. @end table @cindex Gzip @cindex Lzip Gnuastro's official/stable tarball is released with two formats: Gzip (with suffix @file{.tar.gz}) and Lzip (with suffix @file{.tar.lz}). The pre-release tarballs (after version 0.3) are released only as an Lzip tarball. Gzip is a very well-known and widely used compression program created by GNU and available in most systems. However, Lzip provides a better compression ratio and more robust archival capacity. For example Gnuastro 0.3's tarball was 2.9MB and 4.3MB with Lzip and Gzip respectively, see the @url{http://www.nongnu.org/lzip/lzip.html, Lzip webpage} for more. Lzip might not be pre-installed in your operating system, if so, installing it from your operating system's package manager or from source is very easy and fast (it is a very small program). The GNU FTP server is mirrored (has backups) in various locations on the globe (@url{http://www.gnu.org/order/ftp.html}). You can use the closest mirror to your location for a more faster download. Note that only some mirrors keep track of the pre-release (alpha) tarballs. Also note that if you want to download immediately after and announcement (see @ref{Announcements}), the mirrors might need some time to synchronize with the main GNU FTP server. @node Version controlled source, , Release tarball, Downloading the source @subsection Version controlled source @cindex Git @cindex Version control The publicly distributed Gnuastro tar-ball (for example @file{gnuastro-X.X.tar.gz}) does not contain the revision history, it is only a snapshot of the source code at one significant instant of Gnuastro's history (specified by the version number, see @ref{Version numbering}), ready to be configured and built. To be able to develop successfully, the revision history of the code can be very useful to track when something was added or changed, also some updates that are not yet officially released might be in it. We use Git for the version control of Gnuastro. For those who are not familiar with it, we recommend the Pro Git@footnote{@url{https://progit.org/}} book. The whole book is publicly available for online reading and downloading and does a wonderful job at explaining the concepts and best practices. Let's assume you want to keep Gnuastro in the @file{TOPGNUASTRO} directory (can be any directory, change the value below). The full version controlled history of Gnuastro can be cloned in @file{TOPGNUASTRO/gnuastro} by running the following commands@footnote{If your internet connection is active, but Git complains about the network, it might be due to your network setup not recognizing the Git protocol. In that case use the following URL which uses the HTTP protocol instead: @command{http://git.sv.gnu.org/r/gnuastro.git}}: @example $ TOPGNUASTRO=/home/yourname/Research/projects/ $ cd $TOPGNUASTRO $ git clone git://git.sv.gnu.org/gnuastro.git @end example @noindent The @file{$TOPGNUASTRO/gnuastro} directory will contain hand-written (version controlled) source code for Gnuastro's programs, libraries, this book and the tests. All are divided into sub-directories with standard and very descriptive names. The version controlled files in the top cloned directory are either mainly in capital letters (for example @file{THANKS} and @file{README}) or mainly written in small-caps (for example @file{configure.ac} and @file{Makefile.am}). The former are non-programming, standard writing for human readers containing high-level information about the whole package. The latter are instructions to customize the GNU build system for Gnuastro. The cloned Gnuastro source cannot immediately be configured, compiled, or installed since it only contains hand-written files, not automatically generated or imported files which do all the hard work of the build process. See @ref{Bootstrapping} for the process of generating and importing those files (it is very easy!). Once you have bootstrapped Gnuastro, you can run the standard procedures (in @ref{Quick start}). Very soon after you have cloned it, Gnuastro's main @file{master} branch will be updated on the main repository (since the developers are actively working on Gnuastro), for the best practices in keeping your local history in sync with the main repository see @ref{Synchronizing}. @menu * Bootstrapping:: Adding all the automatically generated files. * Synchronizing:: Keep your local clone up to date. @end menu @node Bootstrapping, Synchronizing, Version controlled source, Version controlled source @subsubsection Bootstrapping @cindex Bootstrapping @cindex GNU Autoconf Archive @cindex Gnulib: GNU Portability Library @cindex GNU Portability Library (Gnulib) @cindex Automatically created build files @noindent The version controlled source code lacks the source files that we have not written or are automatically built. These automatically generated files are included in the distributed tar ball for each distribution (for example @file{gnuastro-X.X.tar.gz}, see @ref{Version numbering}) and make it easy to immediately configure, build, and install Gnuastro. However from the perspective of version control, they are just bloatware and sources of confusion (since they are not changed by Gnuastro developers). The process of automatically building and importing necessary files into the cloned directory is known as @emph{bootstrapping}. All the instructions for an automatic bootstrapping are available in @file{bootstrap} and configured using @file{bootstrap.conf}. @file{bootstrap} is the only file not written by Gnuastro developers but is under version control to enable simple bootstrapping immediately after cloning. It is maintained by the GNU Portability Library (Gnulib) and this file is an identical copy, so do not make any changes in this file since it will be replaced when Gnulib releases an update. Make all your changes in @file{bootstrap.conf}. The bootstrapping process has its own separate set of dependencies, the full list is given in @ref{Bootstrapping dependencies}. They are generally very low-level and used by a very large set of commonly used programs, so they are probably already installed on your system. The simplest way to bootstrap Gnuastro is to simply run the bootstrap script within your cloned Gnuastro directory as shown below. However, please read the next paragraph before doing so (see @ref{Version controlled source} for @file{TOPGNUASTRO}). @example $ cd TOPGNUASTRO/gnuastro $ ./bootstrap # Requires internet connection @end example Without any options, @file{bootstrap} will clone Gnulib within your cloned Gnuastro directory (@file{TOPGNUASTRO/gnuastro/gnulib}) and download the necessary Autoconf archives macros. So if you run bootstrap like this, you will need an internet connection every time you decide to bootstrap. Also, Gnulib is a large package and cloning it can be slow. It will also keep the full Gnulib repository within your Gnuastro repository, so if another one of your projects also needs Gnulib, and you insist on running bootstrap like this, you will have two copies. In case you regularly backup your important files, Gnulib will also slow down the backup process. Therefore while the simple invocation above can be used with no problem, it is not recommended. To do better, see the next paragraph. The recommended way to get these two packages is thoroughly discussed in @ref{Bootstrapping dependencies} (in short: clone them in the separate @file{DEVDIR/} directory). The following commands will take you into the cloned Gnuastro directory and run the @file{bootstrap} script, while telling it to copy some files (instead of making symbolic links, with the @option{--copy} option, this is not mandatory@footnote{The @option{--copy} option is recommended because some backup systems might do strange things with symbolic links.}) and where to look for Gnulib (with the @option{--gnulib-srcdir} option). Please note that the address given to @option{--gnulib-srcdir} has to be an absolute address (so don't use @file{~} or @file{../} for example). @example $ cd $TOPGNUASTRO/gnuastro $ ./bootstrap --copy --gnulib-srcdir=$DEVDIR/gnulib @end example @cindex GNU Texinfo @cindex GNU Libtool @cindex GNU Autoconf @cindex GNU Automake @cindex GNU C library @cindex GNU build system Since Gnulib and Autoconf archives are now available in your local directories, you don't need an internet connection every time you decide to remove all untracked files and redo the bootstrap (see box below). You can also use the same command on any other project that uses Gnulib. All the necessary GNU C library functions, Autoconf macros and Automake inputs are now available along with the book figures. The standard GNU build system (@ref{Quick start}) will do the rest of the job. @cartouche @noindent @strong{Undoing the bootstrap:} During the development, it might happen that you want to remove all the automatically generated and imported files. In other words, you might want to reverse the bootstrap process. Fortunately Git has a good program for this job: @command{git clean}. Run the following command and every file that is not version controlled will be removed. @example git clean -fxd @end example @noindent It is best to commit any recent change before running this command. You might have created new files since the last commit and if they haven't been committed, they will all be gone forever (using @command{rm}). To get a list of the non-version controlled files instead of deleting them, add the @option{n} option to @command{git clean}, so it becomes @option{-fxdn}. @end cartouche Besides the @file{bootstrap} and @file{bootstrap.conf}, the @file{bootstrapped/} directory and @file{README-hacking} file are also related to the bootstrapping process. The former hosts all the imported (bootstrapped) directories. Thus, in the version controlled source, it only contains a @file{REAME} file, but in the distributed tar-ball it also contains sub-directories filled with all bootstrapped files. @file{README-hacking} contains a summary of the bootstrapping process discussed in this section. It is a necessary reference when you haven't built this book yet. It is thus not distributed in the Gnuastro tarball. @node Synchronizing, , Bootstrapping, Version controlled source @subsubsection Synchronizing The bootstrapping script (see @ref{Bootstrapping}) is not regularly needed: you mainly need it after you have cloned Gnuastro (once) and whenever you want to re-import the files from Gnulib, or Autoconf archives@footnote{@url{https://savannah.gnu.org/task/index.php?13993} is defined for you to check if significant (for Gnuastro) updates are made in these repositories, since the last time you pulled from them.} (not too common). However, Gnuastro developers are constantly working on Gnuastro and are pushing their changes to the official repository. Therefore, your local Gnuastro clone will soon be out-dated. Gnuastro has two mailing lists dedicated to its developing activities (see @ref{Developing mailing lists}). Subscribing to them can help you decide when to synchronize with the official repository. To pull all the most recent work in Gnuastro, run the following command from the top Gnuastro directory: @example $ git pull && autoconf -f @end example @cindex GNU Autoconf @cindex Mailing list: info-gnuastro @cindex @code{info-gnuastro@@gnu.org} GNU Autoconf is part of the GNU build system and will update the @file{./configure} script based on the hand-written configurations (in @file{configure.ac}, which is version controlled in Gnuastro). The pulled changes might contain changes in the build system configurations. However, The most important reason for running this command is to generate a version number for your Gnuastro snapshot. This generated version number will include the commit information if you are building Gnuastro from any point in Gnuastro's history (see @ref{Version numbering}). Since the version number is included in nearly all outputs of the programs, this can help you later exactly reproduce an old result by checking out the exact point in Gnuastro's history that produced those results. Therefore, be sure to run `@file{autoconf -f}' after every synchronization. You can also run them separately: @example $ git pull $ autoconf -f @end example If you would like to see what has changed since you last synchronized your local clone, you can take the following steps instead of the simple command above (don't type anything after @code{#}): @example $ git checkout master # Confirm if you are on master. $ git fetch origin # Fetch all new commits from server. $ git log master..origin/master # See all the new commit messages. $ git merge origin/master # Update your master branch. $ autoconf -f # Update ./configure. @end example @noindent By default @command{git log} prints the most recent commit first, add the @option{--reverse} option to see the changes chronologically. To see exactly what has been changed in the source code along with the commit message, add a @option{-p} option to the @command{git log}. If you intend make changes in the code, have a look at @ref{Developing} to get started easily. Be sure to commit your changes in a separate branch (keep your @code{master} branch to follow the official repository) and re-run @command{autoconf -f} after the commit. If you intend to send your changes to us (see @ref{Contributing to Gnuastro}) for the benefit of the whole community. If you send your work to us, you can safely use your commit since it will be ultimately recorded in Gnuastro's official history. If not, please upload your separate branch to a public hosting service (for example GitLab, see @ref{Forking tutorial}) and link to it in your report, or run @command{make distcheck} and upload the output @file{gnuastro-X.X.X.XXXX.tar.gz} to a publicly accessible webpage so your results can be considered scientific (reproducible). @node Build and install, , Downloading the source, Installation @section Build and install This section is basically a longer explanation to the sequence of commands given in @ref{Quick start}. If you didn't have any problems during the @ref{Quick start} steps, you want to have all the programs of Gnuastro installed in your system, you don't want to change the executable names during or after installation, you have root access to install the programs in the default system wide directory, the Letter paper size of the print book is fine for you or as a summary you don't feel like going into the details when everything is working, you can safely skip this section. If you have any of the above problems or you want to understand the details for a better control over your build and install, read along. The dependencies which you will need prior to configuring, building and installing Gnuastro are explained in @ref{Dependencies}. The first three steps in @ref{Quick start} need no extra explanation, so we will skip them and start with an explanation of Gnuastro specific configuration options and a discussion on the installation directory in @ref{Configuring}, followed by some smaller subsections: @ref{Tests}, @ref{A4 print book}, and @ref{Known issues} which explains the solutions to known problems you might encounter in the installation steps and ways you can solve them. @menu * Configuring:: Configure Gnuastro * Tests:: Run tests to see if it is working. * A4 print book:: Customize the print book. * Known issues:: Issues you might encounter. @end menu @node Configuring, Tests, Build and install, Build and install @subsection Configuring @pindex ./configure @cindex Configuring The @command{$ ./configure} step is the most important step in the build and install process. All the required packages, libraries, headers and environment variables are checked in this step. The behaviors of make and make install can also be set through command line options to this command. @cindex Configure options @cindex Customizing installation @cindex Installation, customizing The configure script accepts various arguments and options which enable the final user to highly customize whatever she is building. The options to configure are generally very similar to normal program options explained in @ref{Arguments and options}. Similar to all GNU programs, you can get a full list of the options along with a short explanation by running @example $ ./configure --help @end example @noindent @cindex GNU Autoconf A complete explanation is also included in the @file{INSTALL} file. Note that this file was written by the authors of GNU Autoconf (which builds the @file{configure} script), therefore it is common for all programs which use the @command{$ ./configure} script for building and installing, not just Gnuastro. Here we only discuss cases where you don't have super-user access to the system and if you want to change the executable names. But before that, a review of the options to configure that are particular to Gnuastro are discussed. @menu * Gnuastro configure options:: Configure options particular to Gnuastro. * Installation directory:: Specify the directory to install. * Executable names:: Changing executable names. * Configure and build in RAM:: For minimal use of HDD or SSD, and clean source. @end menu @node Gnuastro configure options, Installation directory, Configuring, Configuring @subsubsection Gnuastro configure options @cindex @command{./configure} options @cindex Configure options particular to Gnuastro Most of the options to configure (which are to do with building) are similar for every program which uses this script. Here the options that are particular to Gnuastro are discussed. The next topics explain the usage of other configure options which can be applied to any program using the GNU build system (through the configure script). @vtable @option @item --enable-progname Only build and install @file{progname} along with any other program that is enabled in this fashion. @file{progname} is the name of the executable without the @file{ast}, for example @file{crop} for Crop (with the executable name of @file{astcrop}). If this option is called for any of the programs in Gnuastro, any program which is not explicitly enabled will not be built or installed. @item --disable-progname @itemx --enable-progname=no Do not build or install the program named @file{progname}. This is very similar to the @option{--enable-progname}, but will build and install all the other programs except this one. @item --enable-gnulibcheck @cindex GNU C library @cindex Gnulib: GNU Portability Library @cindex GNU Portability Library (Gnulib) Enable checks on the GNU Portability Library (Gnulib). Gnulib is used by Gnuastro to enable users of non-GNU based operating systems (that don't use GNU C library or glibc) to compile and use the advanced features that this library provides. We make extensive use of such functions. If you give this option to @command{$ ./configure}, when you run @command{$ make check}, first the functions in Gnulib will be tested, then the Gnuastro executables. If your operating system does not support glibc or has an older version of it and you have problems in the build process (@command{$ make}), you can give this flag to configure to see if the problem is caused by Gnulib not supporting your operating system or Gnuastro, see @ref{Known issues}. @item --disable-guide-message @itemx --enable-guide-message=no Do not print a guiding message during the GNU Build process of @ref{Quick start}. By default, after each step, a message is printed guiding the user what the next command should be. Therefore, after @command{./configure}, it will suggest running @command{make}. After @command{make}, it will suggest running @command{make check} and so on. If Gnuastro is configured with this option, for example @example $ ./configure --disable-guide-message @end example Then these messages will not be printed after any step (like most programs). For people who are not yet fully accustomed to this build system, these guidelines can be very useful and encouraging. However, if you find those messages annoying, use this option. @end vtable @cartouche @noindent @strong{Note:} If some programs are enabled and some are disabled, it is equivalent to simply enabling those that were enabled. Listing the disabled programs is redundant. @end cartouche The tests of some programs might depend on the outputs of the tests of other programs. For example MakeProfiles is one the first programs to be tested when you run @command{$ make check}. MakeProfiles' test outputs (FITS images) are inputs to many other programs (which in turn provide inputs for other programs). Therefore, if you don't install MakeProfiles for example, the tests for many the other programs will be skipped. To avoid this, in one run, you can install all the programs and run the tests but not install. If everything is working correctly, you can run configure again with only the programs you want. However, don't run the tests and directly install after building. @node Installation directory, Executable names, Gnuastro configure options, Configuring @subsubsection Installation directory @vindex --prefix @cindex Superuser, not possible @cindex Root access, not possible @cindex No access to super-user install @cindex Install with no super-user access One of the most commonly used options to @file{./configure} is @option{--prefix}, it is used to define the directory that will host all the installed files (or the ``prefix'' in their final absolute file name). For example, when you are using a server and you don't have administrator or root access. In this example scenario, if you don't use the @option{--prefix} option, you won't be able to install the built files and thus access them from anywhere without having to worry about where they are installed. However, once you prepare your startup file to look into the proper place (as discussed thoroughly below), you will be able to easily use this option and benefit from any software you want to install without having to ask the system administrators or install and use a different version of a software that is already installed on the server. The most basic way to run an executable is to explicitly write its full file name (including all the directory information) and run it. One example is running the configuration script with the @command{$ ./configure} command (see @ref{Quick start}). By giving a specific directory (the current directory or @file{./}), we are explicitly telling the shell to look in the current directory for an executable file named `@file{configure}'. Directly specifying the directory is thus useful for executables in the current (or nearby) directories. However, when the program (an executable file) is to be used a lot, specifying all those directories will become a significant burden. For example, the @file{ls} executable lists the contents in a given directory and it is (usually) installed in the @file{/usr/bin/} directory by the operating system maintainers. So each time you want to use it you would have to run the following command (which is very inconvenient, both in writing and in remembering the various directories). @example $ /usr/bin/ls @end example @cindex Shell variables @cindex Environment variables To address this problem, we have the @file{PATH} environment variable. To understand it better, we will start with a short introduction to the shell variables. Shell variable values are basically treated as strings of characters. For example, it doesn't matter if the value is a name (string of @emph{alphabetic} characters) or a number (string of @emph{numeric} characters). You can define a variable and a value for it by running @example $ myvariable1=a_test_value $ myvariable2="a test value" @end example @noindent As you see above, if the value contains white space characters, you have to put the whole value (including white space characters) in double quotes (@key{"}). You can see the value it represents by running @example $ echo $myvariable1 $ echo $myvariable2 @end example @noindent @cindex Environment @cindex Environment variables If a variable has no value or it wasn't defined, the last command will only print an empty line. A variable defined like this will be known as long as this shell or terminal is running. Other terminals will have no idea it existed. The main advantage of shell variables is that if they are exported@footnote{By running @command{$ export myvariable=a_test_value} instead of the simpler case in the text}, subsequent programs that are run within that shell can access their value. So by changing their value, you can change the ``environment'' of a program which uses them. The shell variables which are accessed by programs are therefore known as ``environment variables''@footnote{You can use shell variables for other actions too, for example to temporarily keep some names or run loops on some files.}. You can see the full list of exported variables that your shell recognizes by running: @example $ printenv @end example @cindex @file{HOME} @cindex @file{HOME/.local/} @cindex Environment variable, @code{HOME} @file{HOME} is one commonly used environment variable, it is any user's (the one that is logged in) top directory. Try finding it in the command above. It is used so often that the shell has a special expansion (alternative) for it: `@file{~}'. Whenever you see file names starting with the tilde sign, it actually represents the value to the @file{HOME} environment variable, so @file{~/doc} is the same as @file{$HOME/doc}. @vindex PATH @pindex ./configure @cindex Setting @code{PATH} @cindex Default executable search directory @cindex Search directory for executables Another one of the most commonly used environment variables is @file{PATH}, it is a list of directories to search for executable names. Its value is a list of directories (separated by a colon, or `@key{:}'). When the address of the executable is not explicitly given (like @file{./configure} above), the system will look for the executable in the directories specified by @file{PATH}. If you have a computer nearby, try running the following command to see which directories your system will look into when it is searching for executable (binary) files, one example is printed here (notice how @file{/usr/bin}, in the @file{ls} example above, is one of the directories in @command{PATH}): @example $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/bin @end example By default @file{PATH} usually contains system-wide directories, which are readable (but not writable) by all users, like the above example. Therefore if you don't have root (or administrator) access, you need to add another directory to @file{PATH} which you actually have write access to. The standard directory where you can keep installed files (not just executables) for your own user is the @file{~/.local/} directory. The names of hidden files start with a `@key{.}' (dot), so it will not show up in your common command-line listings, or on the graphical user interface. You can use any other directory, but this is the most recognized. The top installation directory will be used to keep all the package's components: programs (executables), libraries, include (header) files, shared data (like manuals), or configuration files (see @ref{Review of library fundamentals} for a thorough introduction to headers and linking). So it commonly has some of the following sub-directories for each class of installed components respectively: @file{bin/}, @file{lib/}, @file{include/} @file{man/}, @file{share/}, @file{etc/}. Since the @file{PATH} variable is only used for executables, you can add the @file{~/.local/bin} directory (which keeps the executables/programs or more generally, ``binary'' files) to @file{PATH} with the following command. As defined below, first the existing value of @file{PATH} is used, then your given directory is added to its end and the combined value is put back in @file{PATH} (run `@command{$ echo $PATH}' afterwards to check if it was added). @example $ PATH=$PATH:~/.local/bin @end example @cindex GNU Bash @cindex Startup scripts @cindex Scripts, startup Any executable that you installed in @file{~/.local/bin} will now be usable without having to remember and write its full address. However, as soon as you leave/close your current terminal session, this modified @file{PATH} variable will be forgotten. Adding the directories which contain executables to the @file{PATH} environment variable each time you start a terminal is also very inconvenient and prone to errors. Fortunately, there are standard `startup files' defined by your shell precisely for this (and other) purposes. There is a special startup file for every significant starting step: @table @asis @cindex GNU Bash @item @file{/etc/profile} and everything in @file{/etc/profile.d/} These startup scripts are called when your whole system starts (for example after you turn on your computer). Therefore you need administrator or root privileges to access or modify them. @item @file{~/.bash_profile} If you are using (GNU) Bash as your shell, the commands in this file are run once every time you log in to your account. @item @file{~/.bashrc} If you are using (GNU) Bash as your shell, the commands here will be run each time you start a terminal (for example, when you open your terminal emulator in the graphic user interface). @end table For security reasons, it is highly recommended to directly type in your @file{HOME} directory value by hand in startup files instead of using variables. So in the following, let's assume your user name is `@file{name}' (so @file{~} may be replaced with @file{/home/name}). To add @file{~/.local/bin} to your @file{PATH} automatically on any startup file, you have to ``export'' the new value of @command{PATH} in the startup file that is most relevant to you by adding this line: @example export PATH=$PATH:/home/name/.local/bin @end example @cindex GNU build system @cindex Install directory @cindex Directory, install Now that you know your system will look into @file{~/.local/bin} for executables, you can tell Gnuastro's configure script to install everything in the top @file{~/.local} directory using the @option{--prefix} option. When you subsequently run @command{$ make install}, all the install-able files will be put in their respective directory under @file{~/.local/} (the executables in @file{~/.local/bin}, the compiled library files in @file{~/.local/lib}, the library header files in @file{~/.local/include} and so on, to learn more about these different files, please see @ref{Review of library fundamentals}). Note that tilde (`@key{~}') expansion will not happen if you put a `@key{=}' between @option{--prefix} and @file{~/.local}@footnote{If you insist on using `@key{=}', you can use @option{--prefix=$HOME/.local}.}, so we have avoided the @key{=} character here which is optional in GNU-style options, see @ref{Options}. @example $ ./configure --prefix ~/.local @end example @cindex @file{MANPATH} @cindex @file{INFOPATH} @cindex @file{LD_LIBRARY_PATH} @cindex Library search directory @cindex Default library search directory You can install everything (including libraries like GSL, CFITSIO, or WCSLIB which are Gnuastro's mandatory dependencies, see @ref{Mandatory dependencies}) locally by configuring them as above. However, recall that @command{PATH} is only for executable files, not libraries and that libraries can also depend on other libraries. For example WCSLIB depends on CFITSIO and Gnuastro needs both. Therefore, when you installed a library in a non-recognized directory, you have to guide the program that depends on them to look into the necessary library and header file directories. To do that, you have to define the @command{LDFLAGS} and @command{CPPFLAGS} environment variables respectively. This can be done while calling @file{./configure} as shown below: @example $ ./configure LDFLAGS=-L/home/name/.local/lib \ CPPFLAGS=-I/home/name/.local/include \ --prefix ~/.local @end example It can be annoying/buggy to do this when configuring every software that depends on such libraries. Hence, you can define these two variables in the most relevant startup file (discussed above). The convention on using these variables doesn't include a colon to separate values (as @command{PATH}-like variables do), they use white space characters and each value is prefixed with a compiler option@footnote{These variables are ultimately used as options while building the programs, so every value has be an option name followed be a value as discussed in @ref{Options}.}: note the @option{-L} and @option{-I} above (see @ref{Options}), for @option{-I} see @ref{Headers}, and for @option{-L}, see @ref{Linking}. Therefore we have to keep the value in double quotation signs to keep the white space characters and adding the following two lines to the startup file of choice: @example export LDFLAGS="$LDFLAGS -L/home/name/.local/lib" export CPPFLAGS="$CPPFLAGS -I/home/name/.local/include" @end example @cindex Dynamic libraries Dynamic libraries are linked to the executable every time you run a program that depends on them (see @ref{Linking} to fully understand this important concept). Hence dynamic libraries also require a special path variable called @command{LD_LIBRARY_PATH} (same formatting as @command{PATH}). To use programs that depend on these libraries, you need to add @file{~/.local/lib} to your @command{LD_LIBRARY_PATH} environment variable by adding the following line to the relevant start-up file: @example export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/name/.local/lib @end example If you also want to access the Info (see @ref{Info}) and man pages (see @ref{Man pages}) documentations add @file{~/.local/share/info} and @file{~/.local/share/man} to your @command{INFOPATH}@footnote{Info has the following convention: ``If the value of @command{INFOPATH} ends with a colon [or it isn't defined] ..., the initial list of directories is constructed by appending the build-time default to the value of @command{INFOPATH}.'' So when installing in a non-standard directory and if @command{INFOPATH} was not initially defined, add a colon to the end of @command{INFOPATH} as shown below, otherwise Info will not be able to find system-wide installed documentation:@*@command{echo 'export INFOPATH=$INFOPATH:/home/name/.local/share/info:' >> ~/.bashrc}@* Note that this is only an internal convention of Info, do not use it for other @command{*PATH} variables.} and @command{MANPATH} environment variables respectively. @cindex Search directory order @cindex Order in search directory A final note is that order matters in the directories that are searched for all the variables discussed above. In the examples above, the new directory was added after the system specified directories. So if the program, library or manuals are found in the system wide directories, the user directory is no longer searched. If you want to search your local installation first, put the new directory before the already existing list, like the example below. @example export LD_LIBRARY_PATH=/home/name/.local/lib:$LD_LIBRARY_PATH @end example @noindent This is good when a library, for example CFITSIO, is already present on the system, but the system-wide install wasn't configured with the correct configuration flags (see @ref{CFITSIO}), or you want to use a newer version and you don't have administrator or root access to update it on the whole system/server. If you update @file{LD_LIBRARY_PATH} by placing @file{~/.local/lib} first (like above), the linker will first find the CFITSIO you installed for yourself and link with it. It thus will never reach the system-wide installation. There are important security problems with using local installations first: all important system-wide executables and libraries (important executables like @command{ls} and @command{cp}, or libraries like the C library) can be replaced by non-secure versions with the same file names and put in the customized directory (@file{~/.local} in this example). So if you choose to search in your customized directory first, please @emph{be sure} to keep it clean from executables or libraries with the same names as important system programs or libraries. @cartouche @noindent @strong{Summary:} When you are using a server which doesn't give you administrator/root access AND you would like to give priority to your own built programs and libraries, not the version that is (possibly already) present on the server, add these lines to your startup file. See above for which startup file is best for your case and for a detailed explanation on each. Don't forget to replace `@file{/YOUR-HOME-DIR}' with your home directory (for example `@file{/home/your-id}'): @example export PATH="/YOUR-HOME-DIR/.local/bin:$PATH" export LDFLAGS="-L/YOUR-HOME-DIR/.local/lib $LDFLAGS" export MANPATH="/YOUR-HOME-DIR/.local/share/man/:$MANPATH" export CPPFLAGS="-I/YOUR-HOME-DIR/.local/include $CPPFLAGS" export INFOPATH="/YOUR-HOME-DIR/.local/share/info/:$INFOPATH" export LD_LIBRARY_PATH="/YOUR-HOME-DIR/.local/lib:$LD_LIBRARY_PATH" @end example @noindent Afterwards, you just need to add an extra @option{--prefix=/YOUR-HOME-DIR/.local} to the @file{./configure} command of the software that you intend to install. Everything else will be the same as a standard build and install, see @ref{Quick start}. @end cartouche @node Executable names, Configure and build in RAM, Installation directory, Configuring @subsubsection Executable names @cindex Executable names @cindex Names of executables At first sight, the names of the executables for each program might seem to be uncommonly long, for example @command{astnoisechisel} or @command{astcrop}. We could have chosen terse (and cryptic) names like most programs do. We chose this complete naming convention (something like the commands in @TeX{}) so you don't have to spend too much time remembering what the name of a specific program was. Such complete names also enable you to easily search for the programs. @cindex Shell auto-complete @cindex Auto-complete in the shell To facilitate typing the names in, we suggest using the shell auto-complete. With this facility you can find the executable you want very easily. It is very similar to file name completion in the shell. For example, simply by typing the letters below (where @key{[TAB]} stands for the Tab key on your keyboard) @example $ ast[TAB][TAB] @end example @noindent you will get the list of all the available executables that start with @command{ast} in your @command{PATH} environment variable directories. So, all the Gnuastro executables installed on your system will be listed. Typing the next letter for the specific program you want along with a Tab, will limit this list until you get to your desired program. @cindex Names, customize @cindex Customize executable names In case all of this does not convince you and you still want to type short names, some suggestions are given below. You should have in mind though, that if you are writing a shell script that you might want to pass on to others, it is best to use the standard name because other users might not have adopted the same customizations. The long names also serve as a form of documentation in such scripts. A similar reasoning can be given for option names in scripts: it is good practice to always use the long formats of the options in shell scripts, see @ref{Options}. @cindex Symbolic link The simplest solution is making a symbolic link to the actual executable. For example let's assume you want to type @file{ic} to run Crop instead of @file{astcrop}. Assuming you installed Gnuastro executables in @file{/usr/local/bin} (default) you can do this simply by running the following command as root: @example # ln -s /usr/local/bin/astcrop /usr/local/bin/ic @end example @noindent In case you update Gnuastro and a new version of Crop is installed, the default executable name is the same, so your custom symbolic link still works. @vindex --program-prefix @vindex --program-suffix @vindex --program-transform-name The installed executable names can also be set using options to @command{$ ./configure}, see @ref{Configuring}. GNU Autoconf (which configures Gnuastro for your particular system), allows the builder to change the name of programs with the three options @option{--program-prefix}, @option{--program-suffix} and @option{--program-transform-name}. The first two are for adding a fixed prefix or suffix to all the programs that will be installed. This will actually make all the names longer! You can use it to add versions of program names to the programs in order to simultaneously have two executable versions of a program. @cindex SED, stream editor @cindex Stream editor, SED The third configure option allows you to set the executable name at install time using the SED program. SED is a very useful `stream editor'. There are various resources on the internet to use it effectively. However, we should caution that using configure options will change the actual executable name of the installed program and on every re-install (an update for example), you have to also add this option to keep the old executable name updated. Also note that the documentation or configuration files do not change from their standard names either. @cindex Removing @file{ast} from executables For example, let's assume that typing @file{ast} on every invocation of every program is really annoying you! You can remove this prefix from all the executables at configure time by adding this option: @example $ ./configure --program-transform-name='s/ast/ /' @end example @node Configure and build in RAM, , Executable names, Configuring @subsubsection Configure and build in RAM @cindex File I/O @cindex Input/Output, file The configure and build process involves the creation, reading, and modification of a large number of files (input/output, or I/O). Therefore file I/O issues can directly affect the work of developers who need to configure and build Gnuastro numerous times. Some of these issues are listed below: @itemize @cindex HDD @cindex SSD @item I/O will cause wear and tear on both the HDDs (mechanical failures) and SSDs (decreasing the lifetime). @cindex Backup @item Having the built files mixed with the source files can greatly affect backing up (synchronization) of source files (since it involves the management of a large number of small files that are regularly changed. Backup software can of course be configured to ignore the built files and directories. However, since the built files are mixed with the source files and can have a large variety, this will require a high level of customization. @end itemize @cindex tmpfs file system @cindex file systems, tmpfs One solution to address both these problems is to use the @url{https://en.wikipedia.org/wiki/Tmpfs, tmpfs file system}. Any file in tmpfs is actually stored in the RAM (and possibly SAWP), not on HDDs or SSDs. The RAM is built for extensive and fast I/O. Therefore the large number of file I/Os associated with configuring and building will not harm the HDDs or SSDs. Due to the volatile nature of RAM, files in the tmpfs file-system will be permanently lost after a power-off. Since all configured and built files are derivative files (not files that have been directly written by hand) there is no problem in this and this feature can be considered as an automatic cleanup. @cindex Linux kernel @cindex GNU C library @cindex GNU build system The modern GNU C library (and thus the Linux kernel) define the @file{/dev/shm} directory for this purpose (POSIX shared memory). So using GNU Build System's ability to build in a separate directory (not necessarily in the source directory), we can configure and build the programs in @file{/dev/shm} to benefit from the RAM. To simplify the process, Gnuastro comes with a @file{tmpfs-config-make} script. This script will create a directory in the shared memory, and put a symbolic link to it (called @file{build}) in the top source directory (the backup/sync software therefore only needs to ignore this single link/file). The script will then internally change to that directory and configure and build (@command{make -kjN}, where @command{N} is the number of threads for a parallel build) Gnuastro in there. To benefit from this script, simply run the following command instead of @command{./configure} and @command{make}: @example $ ./tmpfs-config-make @end example @cindex GNU Emacs After this script is finished, you can `@command{cd build}' and run other Make commands (for example, `@command{make check}', `@command{make install}', or `@command{make pdf}') from there. In Emacs, the command to be run with the @command{M-x compile} command (by default: @command{make -k}) can be changed to `@command{cd build; make -kjN}', or `@command{make -C build -kjN}' (@command{N} is the number of threads; an integer @mymath{\geq1}). For subsequent builds (during development) the @command{M-x recompile} command will also do all the building in the RAM while you modify the clean, and backed-up source files and make minimal/efficient use of your non-volatile HDD or SSD. This script can be used in any software which is configured and built using the GNU Build System. Just copy it in the top source directory of that software and run it from there. The default number of threads and location of the shared memory (@file{/dev/shm}) are currently hard-coded within the script. If you need to change them, please open the script with a text editor and set their values manually. @node Tests, A4 print book, Configuring, Build and install @subsection Tests @cindex @command{make check} @cindex @file{mock.fits} @cindex Tests, running @cindex Checking tests After successfully building (compiling) the programs with the @command{$ make} command you can check the installation before installing. To run the tests, run @example $ make check @end example For every program some tests are designed to check some possible operations. Running the command above will run those tests and give you a final report. If everything is ok and you have built all the programs, all the tests should pass. In case any of the tests fail, please have a look at @ref{Known issues} and if that still doesn't fix your problem, look that the @file{./tests/test-suite.log} file to see if the source of the error is something particular to your system or more general. If you feel it is general, please contact us because it might be a bug. Note that the tests of some programs depend on the outputs of other program's tests, so if you have not installed them they might be skipped or fail. Prior to releasing every distribution all these tests are checked. If you have a reasonably modern terminal, the outputs of the successful tests will be colored green and the failed ones will be colored red. These scripts can also act as a good set of examples for you to see how the programs are run. All the tests are in the @file{tests/} directory. The tests for each program are shell scripts (ending with @file{.sh}) in a sub-directory of this directory with the same name as the program. See @ref{Test scripts} for more detailed information about these scripts in case you want to inspect them. @node A4 print book, Known issues, Tests, Build and install @subsection A4 print book @cindex A4 print book @cindex Modifying print book @cindex A4 paper size @cindex US letter paper size @cindex Paper size, A4 @cindex Paper size, US letter The default print version of this book is provided in the letter paper size. If you would like to have the print version of this book on paper and you are living in a country which uses A4, then you can rebuild the book. The great thing about the GNU build system is that the book source code which is in Texinfo is also distributed with the program source code, enabling you to do such customizations (hacking). @cindex GNU Texinfo In order to change the paper size, you will need to have GNU Texinfo installed. Open @file{doc/gnuastro.texi} with any text editor. This is the source file that created this book. In the first few lines you will see this line: @example @@c@@afourpaper @end example @noindent In Texinfo, a line is commented with @code{@@c}. Therefore, un-comment this line by deleting the first two characters such that it changes to: @example @@afourpaper @end example @noindent Save the file and close it. You can now run @example $ make pdf @end example @noindent and the new PDF book will be available in @file{SRCdir/doc/gnuastro.pdf}. By changing the @command{pdf} in @command{$ make pdf} to @command{ps} or @command{dvi} you can have the book in those formats. Note that you can do this for any book that is in Texinfo format, they might not have @code{@@afourpaper} line, so you can add it close to the top of the Texinfo source file. @node Known issues, , A4 print book, Build and install @subsection Known issues Depending on your operating system and the version of the compiler you are using, you might confront some known problems during the configuration (@command{$ ./configure}), compilation (@command{$ make}) and tests (@command{$ make check}). Here, their solutions are discussed. @itemize @cindex Configuration, not finding library @cindex Development packages @item @command{$ ./configure}: @emph{Configure complains about not finding a library even though you have installed it.} The possible solution is based on how you installed the package: @itemize @item From your distribution's package manager. Most probably this is because your distribution has separated the header files of a library from the library parts. Please also install the `development' packages for those libraries too. Just add a @file{-dev} or @file{-devel} to the end of the package name and re-run the package manager. This will not happen if you install the libraries from source. When installed from source, the headers are also installed. @item @cindex @command{LDFLAGS} From source. Then your linker is not looking where you installed the library. If you followed the instructions in this chapter, all the libraries will be installed in @file{/usr/local/lib}. So you have to tell your linker to look in this directory. To do so, add @command{LDFLAGS=-L/usr/local/lib} to the Gnuastro configure script. If you want to use the libraries for your other programming projects, then export this environment variable similar to the case for @file{LD_LIBRARY_PATH} explained below. @end itemize @item @vindex --enable-gnulibcheck @cindex Gnulib: GNU Portability Library @cindex GNU Portability Library (Gnulib) @command{$ make}: @emph{Complains about an unknown function on a non-GNU based operating system.} In this case, please run @command{$ ./configure} with the @option{--enable-gnulibcheck} option to see if the problem is from the GNU Portability Library (Gnulib) not supporting your system or if there is a problem in Gnuastro, see @ref{Gnuastro configure options}. If the problem is not in Gnulib and after all its tests you get the same complaint from @command{make}, then please contact us at @file{bug-gnuastro@@gnu.org}. The cause is probably that a function that we have used is not supported by your operating system and we didn't included it along with the source tar ball. If the function is available in Gnulib, it can be fixed immediately. @item @cindex @command{CPPFLAGS} @command{$ make}: @emph{Can't find the headers (.h files) of libraries installed from source.} Similar to the case for @file{LDFLAGS} (above), your compiler is not looking in the right place, add @command{CPPFLAGS=-I/usr/local/include} to @command{./configure} to re-configure Gnuastro, then re-run make. @cindex Tests, only one passes @cindex @file{LD_LIBRARY_PATH} @item @command{$ make check}: @emph{Only one @file{.sh} test passes, all the rest fail.} It is highly likely that your distribution doesn't look into the @file{/usr/local/lib} directory when searching for shared libraries. To make sure it is added to the list of directories, run the following command and restart your terminal: (you can ignore the @command{\} and extra space if you type it, it is only necessary if you copy and paste). See @ref{Installation directory} for more details. @example echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib' \ >> ~/.bashrc @end example @cindex GPL Ghostscript @item @command{$ make check}: @emph{The tests relying on external programs (for example @file{fitstopdf.sh} fail.}) This is probably due to the fact that the version number of the external programs is too old for the tests we have preformed. Please update the program to a more recent version. For example to create a PDF image, you will need GPL Ghostscript, but older versions do not work, we have successfully tested it on version 9.15. Older versions might cause a failure in the test result. @item @cindex @TeX{} @cindex GNU Texinfo @command{$ make pdf}: @emph{The PDF book cannot be made.} To make a PDF book, you need to have the GNU Texinfo program (like any program, the more recent the better). A working @TeX{} program is also necessary, which you can get from Tex Live@footnote{@url{https://www.tug.org/texlive/}}. @item @cindex GNU Libtool After @code{make check}: do not copy the programs' executables to another (for example, the installation) directory manually (using @command{cp}, or @command{mv} for example). In the default configuration@footnote{If you configure Gnuastro with the @option{--disable-shared} option, then the libraries will be statically linked to the programs and this problem won't exist, see @ref{Linking}.}, the program binaries need to link with Gnuastro's shared library which is also built and installed with the programs. Therefore, to run successfully before and after installation, linking modifications need to be made by GNU Libtool at installation time. @command{make install} does this internally, but a simple copy might give linking errors when you run it. If you need to copy the executables, you can do so after installation. @end itemize @noindent If your problem was not listed above, please file a bug report (@ref{Report a bug}). @node Common program behavior, Data containers, Installation, Top @chapter Common program behavior All the programs in Gnuastro share a set of common behavior mainly to do with user interaction to facilitate their usage. The most basic is how you can configure each program to do what you want: define the input, change parameter/option values, or identify the output. All Gnuastro programs can also read your desired configuration from pre-defined or user-specified files so you don't have to specify all the (sometimes numerous) parameters on the command-line each time you run a program. These files define the ``default'' program behavior in each directory, for each user, or on each system. In other cases, some programs can greatly benefit from the many threads available in modern CPUs, so here we'll also discuss how you can get the most out of your hardware. Among some other issues, we will also discuss how you can get immediate and distraction-free (without taking your hands off the keyboard!) help, or access to this whole book, on the command-line. @menu * Command-line:: How to use the command-line. * Configuration files:: Values for unspecified variables. * Multi-threaded operations:: How threads are managed in Gnuastro. * Numeric data types:: Different types and how to specify them. * Tables:: Recognized table formats. * Tessellation:: Tile the dataset into non-overlapping bins. * Getting help:: Getting more information on the go. * Automatic output:: About automatic output names. * Output headers:: Common headers to all FITS outputs. @end menu @node Command-line, Configuration files, Common program behavior, Common program behavior @section Command-line All the programs in Gnuastro are customized through the standard GNU style command-line options. Thus, we'll start by defining this general style that is very common in many command-line tools on Unix-like operating systems. Finally, the options that are common to all the programs in Gnuastro are discussed. @cindex Metacharacters @cindex Token separation @cindex Command-line token separation @cindex Separating tokens on the command-line The command-line text that you type is passed onto the shell (or program managing the command-line) as a string of characters. See the ``Invoking ProgramName'' sections in this manual for some examples of commands with each program, for example @ref{Invoking asttable}. That string is then broken up into separate @emph{tokens} or @emph{words} by any @emph{metacharacters} (like space, tab, @command{|}, @command{>} or @command{;}) that might exist in the text. To learn more, please see the GNU Bash manual, for the complete list of meta-characters and other GNU Bash definitions (GNU Bash is the most common shell program). Its ``Shell Operation'' section has a short summary of the steps the shell takes before passing the commands to the program you called. @menu * Arguments and options:: Basics of options and arguments. * Common options:: Common options to all Gnuastro programs. @end menu @node Arguments and options, Common options, Command-line, Command-line @subsection Arguments and options @cindex Options to programs @cindex Command-line options @cindex Arguments to programs @cindex Command-line arguments On the command-line, the first thing you usually enter is the name of the program you want to run. After that, you can specify two types of input: @emph{arguments} and @emph{options}. In the GNU-style, arguments are those tokens that are not preceded by any hyphens (@command{-}, see @ref{Arguments}). Here is one example: @example $ astcrop --center=53.162551,-27.789676 -w10/3600 --mode=wcs udf.fits @end example In this example, the argument is @file{udf.fits}. Arguments are most commonly the input file names containing your data. Options start with one or two hyphens, followed by an identifier for the option (the option's name) and its value (see @ref{Options}). Through options you tell the program how to interpret the data. In this example, we are running @ref{Crop} to crop a region of width 10 arc-seconds centered at the given RA and Dec from the input Hubble Ultra-Deep Field (UDF) FITS image. So options come with an identifier (the option name which is separate from their value). @vindex --help @vindex --usage @cindex Mandatory arguments Arguments can be both mandatory and optional and unlike options they don't have any identifiers (or help from you). Hence, their order might also matter (for example in @command{cp} which is used for copying one file to another location). The outputs of @option{--usage} and @option{--help} shows which arguments are optional and which are mandatory, see @ref{--usage}. As their name suggests, @emph{options} on the command-line can be considered to be optional and most of the time, you don't have to worry about what order you specify them in. When the order does matter, or the option can be invoked multiple times, it is explicitly mentioned in the ``Invoking ProgramName'' section of each program. @cindex Metacharacters on the command-line In case your arguments or option values contain any of the shell's meta-characters, you have to quote them. If there is only one such character, you can use a backslash (@command{\}) before it. If there are multiple, it might be easier to simply put your whole argument or option value inside of double quotes (@command{"}). In such cases, everything inside the double quotes will be seen as one token or word. @cindex HDU @cindex Header data unit For example, let's say you want to specify the header data unit (HDU) of your FITS file using a complex expression like `@command{3; images(exposure > 100)}'. If you simply add these after the @option{--hdu} (@option{-h}) option, the programs in Gnuastro will read the value to the HDU option as `@command{3}' and run. Then, Bash will attempt to run a separate command `@command{images(exposure > 100)}' and complain about a syntax error. This is because the semicolon (@command{;}) is an `end of command' character in the shell. To solve this problem you can simply put double quotes around the whole string you want to pass to @option{--hdu} as seen below: @example $ astcrop --hdu="3; images(exposure > 100)" FITSimage.fits @end example Alternatively you can put a `@command{\}' before every meta-character in this string, but try doing that, and probably you will agree that the double quotes are much more easier, elegant and readable. @menu * Arguments:: For specifying the main input files/operations. * Options:: For configuring the behavior of the program. @end menu @node Arguments, Options, Arguments and options, Arguments and options @subsubsection Arguments In Gnuastro, arguments are almost exclusively used as the input data file names. Please consult the first few paragraph of the ``Invoking ProgramName'' section for each program for a description of what it expects as input, how many arguments, or input data, it accepts, or in what order. Everything particular about how a program treats arguments, is explained under the ``Invoking ProgramName'' section for that program. Generally, if there is a standard file name extension for a particular format, that filename extension is used to separate the kinds of arguments. The list below shows the data formats that are recognized in Gnuastro's programs based on their file name endings. Any argument that doesn't end with the specified extensions below is considered to be a text file (usually catalogs, see @ref{Tables}). In some cases, a program can accept specific formats, for example @ref{ConvertType} also accepts @file{.jpg} images. @cindex Astronomical data suffixes @cindex Suffixes, astronomical data @itemize @item @file{.fits}: The standard file name ending of a FITS image. @item @file{.fit}: Alternative (3 character) FITS suffix. @item @file{.fits.Z}: A FITS image compressed with @command{compress}. @item @file{.fits.gz}: A FITS image compressed with GNU zip (gzip). @item @file{.fits.fz}: A FITS image compressed with @command{fpack}. @item @file{.imh}: IRAF format image file. @end itemize Through out this book and in the command-line outputs, whenever we want to generalize all such astronomical data formats in a text place holder, we will use @file{ASTRdata}, we will assume that the extension is also part of this name. Any file ending with these names is directly passed on to CFITSIO to read. Therefore you don't necessarily have to have these files on your computer, they can also be located on an FTP or HTTP server too, see the CFITSIO manual for more information. CFITSIO has its own error reporting techniques, if your input file(s) cannot be opened, or read, those errors will be printed prior to the final error by Gnuastro. @node Options, , Arguments, Arguments and options @subsubsection Options @cindex GNU style options @cindex Options, GNU style @cindex Options, short (@option{-}) and long (@option{--}) Command-line options allow configuring the behavior of a program in all GNU/Linux applications for each particular execution on a particular input data. A single option can be called in two ways: @emph{long} or @emph{short}. All options in Gnuastro accept the long format which has two hyphens an can have many characters (for example @option{--hdu}). Short options only have one hyphen (@key{-}) followed by one character (for example @option{-h}). You can see some examples in the list of options in @ref{Common options} or those for each program's ``Invoking ProgramName'' section. Both formats are shown for those which support both. First the short is shown then the long. Usually, the short options are for when you are writing on the command-line and want to save keystrokes and time. The long options are good for shell scripts, where you aren't usually rushing. Long options provide a level of documentation, since they are more descriptive and less cryptic. Usually after a few months of not running a program, the short options will be forgotten and reading your previously written script will not be easy. @cindex On/Off options @cindex Options, on/off Some options need to be given a value if they are called and some don't. You can think of the latter type of options as on/off options. These two types of options can be distinguished using the output of the @option{--help} and @option{--usage} options, which are common to all GNU software, see @ref{Getting help}. In Gnuastro we use the following strings to specify when the option needs a value and what format that value should be in. More specific tests will be done in the program and if the values are out of range (for example negative when the program only wants a positive value), an error will be reported. @vtable @option @item INT The value is read as an integer. @item FLT The value is read as a float. There are generally two types, depending on the context. If they are for fractions, they will have to be less than or equal to unity. @item STR The value is read as a string of characters (for example a file name) or other particular settings like a HDU name, see below. @end vtable @noindent @cindex Values to options @cindex Option values To specify a value in the short format, simply put the value after the option. Note that since the short options are only one character long, you don't have to type anything between the option and its value. For the long option you either need white space or an @option{=} sign, for example @option{-h2}, @option{-h 2}, @option{--hdu 2} or @option{--hdu=2} are all equivalent. The short format of on/off options (those that don't need values) can be concatenated for example these two hypothetical sequences of options are equivalent: @option{-a -b -c4} and @option{-abc4}. As an example, consider the following command to run Crop: @example $ astcrop -Dr3 --wwidth 3 catalog.txt --deccol=4 ASTRdata @end example @noindent The @command{$} is the shell prompt, @command{astcrop} is the program name. There are two arguments (@command{catalog.txt} and @command{ASTRdata}) and four options, two of them given in short format (@option{-D}, @option{-r}) and two in long format (@option{--width} and @option{--deccol}). Three of them require a value and one (@option{-D}) is an on/off option. @vindex --printparams @cindex Options, abbreviation @cindex Long option abbreviation If an abbreviation is unique between all the options of a program, the long option names can be abbreviated. For example, instead of typing @option{--printparams}, typing @option{--print} or maybe even @option{--pri} will be enough, if there are conflicts, the program will warn you and show you the alternatives. Finally, if you want the argument parser to stop parsing arguments beyond a certain point, you can use two dashes: @option{--}. No text on the command-line beyond these two dashes will be parsed. @cindex Repeated options @cindex Options, repeated Gnuastro has two types of options with values, those that only take a single value are the most common type. If these options are repeated or called more than once on the command-line, the value of the last time it was called will be assigned to it. This is very useful when you are testing/experimenting. Let's say you want to make a small modification to one option value. You can simply type the option with a new value in the end of the command and see how the script works. If you are satisfied with the change, you can remove the original option for human readability. If the change wasn't satisfactory, you can remove the one you just added and not worry about forgetting the original value. Without this capability, you would have to memorize or save the original value somewhere else, run the command and then change the value again which is not at all convenient and is potentially cause lots of bugs. On the other hand, some options can be called multiple times in one run of a program and can thus take multiple values (for example see the @option{--column} option in @ref{Invoking asttable}. In these cases, the order of stored values is the same order that you specified on the command-line. @cindex Configuration files @cindex Default option values Gnuastro's programs don't keep any internal default values, so some options are mandatory and if they don't have a value, the program will complain and abort. Most programs have many such options and typing them by hand on every call is impractical. To facilitate the user experience, after parsing the command-line, Gnuastro's programs read special configuration files to get the necessary values for the options you haven't identified on the command-line. These configuration files are fully described in @ref{Configuration files}. @cartouche @noindent @cindex Tilde expansion as option values @strong{CAUTION:} In specifying a file address, if you want to use the shell's tilde expansion (@command{~}) to specify your home directory, leave at least one space between the option name and your value. For example use @command{-o ~/test}, @command{--output ~/test} or @command{--output= ~/test}. Calling them with @command{-o~/test} or @command{--output=~/test} will disable shell expansion. @end cartouche @cartouche @noindent @strong{CAUTION:} If you forget to specify a value for an option which requires one, and that option is the last one, Gnuastro will warn you. But if it is in the middle of the command, it will take the text of the next option or argument as the value which can cause undefined behavior. @end cartouche @cartouche @noindent @cindex Counting from zero. @strong{NOTE:} In some contexts Gnuastro's counting starts from 0 and in others 1. You can assume by default that counting starts from 1, if it starts from 0 for a special option, it will be explicitly mentioned. @end cartouche @node Common options, , Arguments and options, Command-line @subsection Common options @cindex Options common to all programs @cindex Gnuastro common options To facilitate the job of the users and developers, all the programs in Gnuastro share some basic command-line options for the options that are common to many of the programs. The full list is classified as @ref{Input output options}, @ref{Processing options}, and @ref{Operating mode options}. In some programs, some of the options are irrelevant, but still recognized (you won't get an unrecognized option error, but the value isn't used). Unless otherwise mentioned, these options are identical between all programs. @menu * Input output options:: Common input/output options. * Processing options:: Options for common processing steps. * Operating mode options:: Common operating mode options. @end menu @node Input output options, Processing options, Common options, Common options @subsubsection Input/Output options These options are to do with the input and outputs of the various programs. @vtable @option @cindex HDU @cindex Header data unit @item -h STR/INT @itemx --hdu=STR/INT The name or number of the desired Header Data Unit, or HDU, in the FITS image. A FITS file can store multiple HDUs or extensions, each with either an image or a table or nothing at all (only a header). Note that counting of the extensions starts from 0(zero), not 1(one). Counting from 0 is forced on us by CFITSIO which directly reads the value you give with this option (see @ref{CFITSIO}). When specifying the name, case is not important so @command{IMAGE}, @command{image} or @command{ImAgE} are equivalent. CFITSIO has many capabilities to help you find the extension you want, far beyond the simple extension number and name. See CFITSIO manual's ``HDU Location Specification'' section for a very complete explanation with several examples. A @code{#} is appended to the string you specify for the HDU@footnote{With the @code{#} character, CFITSIO will only read the desired HDU into your memory, not all the existing HDUs in the fits file.} and the result is put in square brackets and appended to the FITS file name before calling CFITSIO to read the contents of the HDU for all the programs in Gnuastro. @item -s STR @itemx --searchin=STR Where to match/search for columns when the column identifier wasn't a number, see @ref{Selecting table columns}. The acceptable values are @command{name}, @command{unit}, or @command{comment}. This option is only relevant for programs that take table columns as input. @item -I @itemx --ignorecase Ignore case while matching/searching column meta-data (in the field specified by the @option{--searchin}). The FITS standard suggests to treat the column names as case insensitive, which is strongly recommended here also but is not enforced. This option is only relevant for programs that take table columns as input. This option is not relevant to @ref{BuildProgram}, hence in that program the short option @option{-I} is used for include directories, not to ignore case. @item -o STR @itemx --output=STR The name of the output file or directory. With this option the automatic output names explained in @ref{Automatic output} are ignored. @item -T STR @itemx --type=STR The data type of the output depending on the program context. This option isn't applicable to some programs like @ref{Fits} and will be ignored by them. The different acceptable values to this option are fully described in @ref{Numeric data types}. @item -D @itemx --dontdelete By default, if the output file already exists, Gnuastro's programs will silently delete it and put their own outputs in its place. When this option is activated, if the output file already exists, the programs will not delete it, will warn you, and will abort. @item -K @itemx --keepinputdir In automatic output names, don't remove the directory information of the input file names. As explained in @ref{Automatic output}, if no output name is specified (with @option{--output}), then the output name will be made in the existing directory based on your input's file name (ignoring the directory of the input). If you call this option, the directory information of the input will be kept and the automatically generated output name will be in the same directory as the input (usually with a suffix added). Note that his is only relevant if you are running the program in a different directory than the input data. @item -t STR @itemx --tableformat=STR The output table's type. This option is only relevant when the output is a table and its format cannot be deduced from its filename. For example, if a name ending in @file{.fits} was given to @option{--output}, then the program knows you want a FITS table. But there are two types of FITS tables: FITS ASCII, and FITS binary. Thus, with this option, the program is able to identify which type you want. The currently recognized values to this option are: @table @command @item txt A plain text table with white-space characters between the columns (see @ref{Gnuastro text table format}). @item fits-ascii A FITS ASCII table (see @ref{Recognized table formats}). @item fits-binary A FITS binary table (see @ref{Recognized table formats}). @end table @end vtable @node Processing options, Operating mode options, Input output options, Common options @subsubsection Processing options Some processing steps are common to several programs, so they are defined as common options to all programs. Note that this class of common options is thus necessarily less common between all the programs than those described in @ref{Input output options}, or @ref{Operating mode options} options. Also, if they are irrelevant for a program, these options will not display in the @option{--help} output of the program. @table @option @item --minmapsize=INT The minimum size (in bytes) to store the contents of each main processing array of a program as a file (on the non-volatile HDD/SSD), not in RAM. This can be very useful for large datasets which can be very memory intensive such that your RAM will not be sufficient to keep/process them. A random filename is assigned to the array (in a @file{.gnuastro} directory within the running directory) which will keep the contents of the array as long as it is necessary. When this option has a value of @code{0} (zero), all arrays that use this option in a program will actually be in a file (not in RAM). When the value is @code{-1} (largest possible number in the unsigned integer types) these arrays will be definitely allocated in RAM. However, for complex programs like @ref{NoiseChisel}, it is recommended to not set it to @code{0}, but a value like @code{10000} so the many small arrays necessary during processing are stored in RAM and only larger ones are saved as a file. Please note that using a non-volatile file (in the HDD/SDD) instead of RAM can significantly increase the program's running time, especially on HDDs. So it is best to give this option large values by default. You can then decrease it for a specific program's invocation on a large input after you see memory issues arise (for example an error, or the program not aborting and fully consuming your memory). The random file will be deleted once it is no longer needed by the program. The @file{.gnuastro} directory will also be deleted if it has no other contents (you may also have configuration files in this directory, see @ref{Configuration files}). If you see randomly named files remaining in this directory, please send us a bug report so we address the problem, see @ref{Report a bug}. @item -Z INT[,INT[,...]] @itemx --tilesize=[,INT[,...]] The size of regular tiles for tessellation, see @ref{Tessellation}. For each dimension an integer length (in units of data-elements or pixels) is necessary. If the number of input dimensions is different from the number of values given to this option, the program will stop with an error. Values must be separated by commas (@key{,}) and can also be fractions (for example @code{4/2}). If they are fractions, the result must be an integer, otherwise an error will be printed. @item -M INT[,INT[,...]] @itemx --numchannels=INT[,INT[,...]] The number of channels for larger input tessellation, see @ref{Tessellation}. The number and types of acceptable values are similar to @option{--tilesize}. The only difference is that instead of length, the integers values given to this option represent the @emph{number} of channels, not their size. @item -F FLT @itemx --remainderfrac=FLT The fraction of remainder size along all dimensions to add to the first tile. See @ref{Tessellation} for a complete description. This option is only relevant if @option{--tilesize} is not exactly divisible by the input dataset's size in a dimension. If the remainder size is larger than this fraction (compared to @option{--tilesize}), then the remainder size will be added with one regular tile size and divided between two tiles at the start and end of the given dimension. @item --workoverch Ignore the channel borders for the high-level job of the given application. As a result, while the channel borders are respected in defining the small tiles (such that no tile will cross a channel border), the higher-level program operation will ignore them, see @ref{Tessellation}. @item --checktiles Make a FITS file with the same dimensions as the input but each pixel is replaced with the ID of the tile that it is associated with. Note that the tile IDs start from 0. See @ref{Tessellation} for more on Tiling an image in Gnuastro. @item --oneelempertile When showing the tile values (for example with @option{--checktiles}, or when the program's output is tessellated) only use one element for each tile. This can be useful when only the relative values given to each tile compared to the rest are important or need to be checked. Since the tiles usually have a large number of pixels within them the output will be much smaller, and so easier to read, write, store, or send. Note that when the full input size in any dimension is not exactly divisible by the given @option{--tilesize} in that dimension, the edge tile(s) will have different sizes (in units of the input's size), see @option{--remainderfrac}. But with this option, all displayed values are going to have the (same) size of one data-element. Hence, in such cases, the image proportions are going to be slightly different with this option. If your input image is not exactly divisible by the tile size and you want one value per tile for some higher-level processing, all is not lost though. You can see how many pixels were within each tile (for example to weight the values or discard some for later processing) with Gnuastro's Statistics (see @ref{Statistics}) as shown below. The output FITS file is going to have two extensions, one with the median calculated on each tile and one with the number of elements that each tile covers. You can then use the @code{where} operator in @ref{Arithmetic} to set the values of all tiles that don't have the regular area to a blank value. @example $ aststatistics --median --number --ontile input.fits \ --oneelempertile --output=o.fits $ REGULAR_AREA=1600 # Check second extension of `o.fits'. $ astarithmetic o.fits o.fits $REGULAR_AREA ne nan where \ -h1 -h2 @end example Note that if @file{input.fits} also has blank values, then the median on tiles with blank values will also be ignored with the command above (which is desirable). @item --inteponlyblank When values are to be interpolated, only change the values of the blank elements, keep the non-blank elements untouched. @item --interpnumngb=INT The number of nearby non-blank neighbors to use for interpolation. @end table @node Operating mode options, , Processing options, Common options @subsubsection Operating mode options Another group of options that are common to all the programs in Gnuastro are those to do with the general operation of the programs. The explanation for those that are not only limited to Gnuastro but are common to all GNU programs start with (GNU option). @vtable @option @item -- (GNU option) Stop parsing the command-line. This option can be useful in scripts or when using the shell history. Suppose you have a long list of options, and want to see if removing some of them (to read from configuration files, see @ref{Configuration files}) can give a better result. If the ones you want to remove are the last ones on the command-line, you don't have to delete them, you can just add @option{--} before them and if you don't get what you want, you can remove the @option{--} and get the same initial result. @item --usage (GNU option) Only print the options and arguments and abort. This is very useful for when you know the what the options do, and have just forgot their long/short identifiers, see @ref{--usage}. @item -? @itemx --help (GNU option) Print all options with an explanation and abort. Adding this option will print all the options in their short and long formats, also displaying which ones need a value if they are called (with an @option{=} after the long format followed by a string specifying the format, see @ref{Options}). A short explanation is also given for what the option is for. The program will quit immediately after the message is printed and will not do any form of processing, see @ref{--help}. @item -V @itemx --version (GNU option) Print a short message, showing the full name, version, copyright information and program authors and abort. On the first line, it will print the official name (not executable name) and version number of the program. Following this is a blank line and a copyright information. The program will not run. @item -q @itemx --quiet Don't report steps. All the programs in Gnuastro that have multiple major steps will report their steps for you to follow while they are operating. If you do not want to see these reports, you can call this option and only error/warning messages will be printed. If the steps are done very fast (depending on the properties of your input) disabling these reports will also decrease running time. @item --cite Print the Bib@TeX{} entry for Gnuastro and the particular program (if that program comes with a separate paper) and abort. Citations are vital for the continued work on Gnuastro. Gnuastro started and is continued based on separate research projects. So if you find any of the tools offered in Gnuastro to be useful in your research, please use the output of this command to cite the program and Gnuastro in your research paper. Thank you. Gnuastro is still new, there is no separate paper only devoted to Gnuastro yet. Therefore currently the paper to cite for Gnuastro is the paper for NoiseChisel which is the first published paper introducing Gnuastro to the astronomical community. Upon reaching a certain point, a paper completely devoted to Gnuastro will be published, see @ref{GNU Astronomy Utilities 1.0}. @item -P @itemx --printparams With this option, Gnuastro's programs will read your command-line options and all the configuration files. If there is no problem (like a missing parameter or a value in the wrong format or range) and immediately before actually running, the programs will print the full list of option names, values and descriptions, sorted and grouped by context and abort. They will also report the version number, the date they were configured on your system and the time they were reported. As an example, you can give your full command-line options and even the input and output file names and finally just add @option{-P} to check if all the parameters are finely set. If everything is ok, you can just run the same command (easily retrieved from the shell history, with the top arrow key) and simply remove the last two characters that showed this option. Since no program will actually start its processing when this option is called, the otherwise mandatory arguments for each program (for example input image or catalog files) are no longer required when you call this option. @item --config=STR Parse @option{STR} as a configuration file immediately when this option is confronted (see @ref{Configuration files}). The @option{--config} option can be called multiple times in one run of any Gnuastro program on the command-line or in the configuration files. In any case, it will be immediately read (before parsing the rest of the options on the command-line, or lines in a configuration file). Note that by definition, later options on the command-line still take precedence over those in these in any configuration file, including the file(s) given to this option. Also see @option{--lastconfig} and @option{--onlyversion} on how this option can be used for reproducible results. @item -S @itemx --setdirconf Update the current directory configuration file for the Gnuastro program and quit. The full set of command-line and configuration file options will be parsed and options with a value will be written in the current directory configuration file for this program (see @ref{Configuration files}). If the configuration file or its directory doesn't exist, it will be created. If a configuration file exists it will be replaced (after it, and all other configuration files have been read). In any case, the program will not run. This is the recommended method@footnote{Alternatively, you can use your favorite text editor.} to edit/set the configuration file for all future calls to Gnuastro's programs. It will internally check if your values are in the correct range and type and save them according to the configuration file format, see @ref{Configuration file format}. So if there are unreasonable values to some options, the program will notify you and abort before writing the final configuration file. When this option is called, the otherwise mandatory arguments, for example input image or catalog file(s), are no longer mandatory (since the program will not run). @item -U @itemx --setusrconf Update the user configuration file and quit (see @ref{Configuration files}). See explanation under @option{--setdirconf} for more details. @item --lastconfig This is the last configuration file that must be read. When this option is confronted in any stage of reading the options (on the command-line or in a configuration file), no other configuration file will be parsed, see @ref{Configuration file precedence} and @ref{Current directory and User wide}. Like all on/off options, on the command-line, this option doesn't take any values. But in a configuration file, it takes the values of @option{0} or @option{1}, see @ref{Configuration file format}. If it is present in a configuration file with a value of @option{0}, then all later occurrences of this option will be ignored. @item --onlyversion=STR Only run the program if Gnuastro's version is exactly equal to @option{STR} (see @ref{Version numbering}). Note that it is not compared as a number, but as a string of characters, so @option{0}, or @option{0.0} and @option{0.00} are different. If the running Gnuastro version is different, then this option will report an error and abort as soon as it is confronted on the command-line or in a configuration file. If the running Gnuastro version is the same as @option{STR}, then the program will run as if this option was not called. This is useful if you want your results to be exactly reproducible and not mistakenly run with an updated/newer or older version of the program. Besides internal algorithmic/behavior changes in programs, the existence of options or their names might change between versions (especially in these earlier versions of Gnuastro). Hence, when using this option (probably in a script or in a configuration file), be sure to call it before other options. The benefit is that, when the version differs, the other options won't be parsed and you, or your collaborators/users, won't get errors saying an option in your configuration doesn't exist in the running version of the program. Here is one example of how this option can be used in conjunction with the @option{--lastconfig} option. Let's assume that you were satisfied with the results of this command: @command{astnoisechisel image.fits --detquant=0.95} (along with various options set in various configuration files). You can save the state of NoiseChisel and reproduce that exact result on @file{image.fits} later by following these steps (the the extra spaces, and @key{\}, are only for easy readability, if you want to try it out, only one space between each token is enough). @example $ echo "onlyversion X.XX" > reproducible.conf $ echo "lastconfig 1" >> reproducible.conf $ astnoisechisel image.fits --detquant=0.95 -P \ >> reproducible.conf @end example @option{--onlyversion} was available from Gnuastro 0.0, so putting it immediately at the start of a configuration file will ensure that later, you (or others using different version) won't get a non-recognized option error in case an option was added/removed. @option{--lastconfig} will inform the installed NoiseChisel to not parse any other configuration files. This is done because we don't want the user's user-wide or system wide option values affecting our results. Finally, with the third command, which has a @option{-P} (short for @option{--printparams}), NoiseChisel will print all the option values visible to it (in all the configuration files) and the shell will append them to @file{reproduce.conf}. Hence, you don't have to worry about remembering the (possibly) different options in the different configuration files. Afterwards, if you run NoiseChisel as shown below (telling it to read this configuration file with the @file{--config} option). You can be sure that there will either be an error (for version mis-match) or it will produce exactly the same result that you got before. @example $ astnoisechisel --config=reproducible.conf @end example @item --log Some programs can generate extra information about their outputs in a log file. When this option is called in those programs, the log file will also be printed. If the program doesn't generate a log file, this option is ignored. @cindex CPU threads, set number @cindex Number of CPU threads to use @item -N INT @itemx --numthreads=INT Use @option{INT} CPU threads when running a Gnuastro program (see @ref{Multi-threaded operations}). If the value is zero (@code{0}), or this option is not given on the command-line or any configuration file, the value will be determined at run-time: the maximum number of threads available to the system when you run a Gnuastro program. Note that multi-threaded programming is only relevant to some programs. In others, this option will be ignored. @end vtable @node Configuration files, Multi-threaded operations, Command-line, Common program behavior @section Configuration files @cindex @file{etc} @cindex Configuration files @cindex Necessary parameters @cindex Default option values @cindex File system Hierarchy Standard Each program needs a certain number of parameters to run. Supplying all the necessary parameters each time you run the program is very frustrating and prone to errors. Therefore all the programs read the values for the necessary options you have not given in the command line from one of several plain text files (which you can view and edit with any text editor). These files are known as configuration files and are usually kept in a directory named @file{etc/} according to the file system hierarchy standard@footnote{@url{http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard}}. @vindex --output @vindex --numthreads @cindex CPU threads, number @cindex Internal default value @cindex Number of CPU threads to use The thing to have in mind is that none of the programs in Gnuastro keep any internal default value. All the values must either be stored in one of the configuration files or explicitly called in the command-line. In case the necessary parameters are not given through any of these methods, the program will print a missing option error and abort. The only exception to this is @option{--numthreads}, whose default value is determined at run-time using the number of threads available to your system, see @ref{Multi-threaded operations}. Of course, you can still provide a default value for the number of threads at any of the levels below, but if you don't, the program will not abort. Also note that through automatic output name generation, the value to the @option{--output} option is also not mandatory on the command-line or in the configuration files for all programs which don't rely on that value as an input@footnote{One example of a program which uses the value given to @option{--output} as an input is ConvertType, this value specifies the type of the output through the value to @option{--output}, see @ref{Invoking astconvertt}.}, see @ref{Automatic output}. @menu * Configuration file format:: ASCII format of configuration file. * Configuration file precedence:: Precedence of configuration files. * Current directory and User wide:: Local and user configuration files. * System wide:: System wide configuration files. @end menu @node Configuration file format, Configuration file precedence, Configuration files, Configuration files @subsection Configuration file format @cindex Configuration file suffix The configuration files for each program have the standard program executable name with a `@file{.conf}' suffix. When you download the source code, you can find them in the same directory as the source code of each program, see @ref{Program source}. @cindex White space character @cindex Configuration file format Any line in the configuration file whose first non-white character is a @key{#} is considered to be a comment and is ignored. An empty line is also similarly ignored. The long name of the option should be used as an identifier. The parameter name and parameter value have to be separated by any number of `white-space' characters: space, tab or vertical tab. By default several space characters are used. If the value of an option has space characters (most commonly for the @option{hdu} option), then the full value can be enclosed in double quotation signs (@key{"}, similar to the example in @ref{Arguments and options}). If it is an option without a value in the @option{--help} output (on/off option, see @ref{Options}), then the value should be @option{1} if it is to be `on' and @option{0} otherwise. In each non-commented and non-blank line, any text after the first two words (option identifier and value) is ignored. If an option identifier is not recognized in the configuration file, the name of the file, the line number of the unrecognized option, and the unrecognized identifier name will be reported and the program will abort. If a parameter is repeated more more than once in the configuration files, accepts only one value, and is not set on the command-line, then only the first value will be used, the rest will be ignored. @cindex Writing configuration files @cindex Automatic configuration file writing @cindex Configuration files, writing You can build or edit any of the directories and the configuration files yourself using any text editor. However, it is recommended to use the @option{--setdirconf} and @option{--setusrconf} options to set default values for the current directory or this user, see @ref{Operating mode options}. With these options, the values you give will be checked before writing in the configuration file. They will also print a set of commented lines guiding the reader and will also classify the options based on their context and write them in their logical order to be more understandable. @node Configuration file precedence, Current directory and User wide, Configuration file format, Configuration files @subsection Configuration file precedence @cindex Configuration file precedence @cindex Configuration file directories @cindex Precedence, configuration files The option values in all the programs of Gnuastro will be filled in the following order. If an option only takes one value which is given in an earlier step, any value for that option in a later step will be ignored. Note that if the @option{lastconfig} option is specified in any step below, all later files will be ignored (see @ref{Operating mode options}). The basic idea behind setting this progressive state of checking for parameter values is that separate users of a computer or separate folders in a user's file system might need different values for some parameters. In each step, there can also be a configuration file containing the common options in all the programs: @file{gnuastro.conf} (see @ref{Common options}). If options specific to one program are specified in this file, there will be un-recognized option errors, or unexpected behavior if the option has different behavior in another program. On the other hand, there is no problem with @file{astprogname.conf} containing common options@footnote{As an example, the @option{--setdirconf} and @option{--setusrconf} options will also write the common options they have read in their produced @file{astprogname.conf}.}. @enumerate @item Command-line options, for a particular run of ProgramName. @item @file{.gnuastro/astprogname.conf} is parsed by ProgramName in the current directory. @item @file{.gnuastro/gnuastro.conf} is parsed by all Gnuastro programs in the current directory. @item @file{$HOME/.local/etc/astprogname.conf} is parsed by ProgramName in the user's home directory (see @ref{Current directory and User wide}). @item @file{$HOME/.local/etc/gnuastro.conf} is parsed by all Gnuastro programs in the user's home directory (see @ref{Current directory and User wide}). @item @file{prefix/etc/astprogname.conf} is parsed by ProgramName in the system-wide installation directory (see @ref{System wide} for @file{prefix}). @item @file{prefix/etc/gnuastro.conf} is parsed by all Gnuastro programs in the system-wide installation directory (see @ref{System wide} for @file{prefix}). @end enumerate @cartouche @noindent @strong{Manipulating the order:} You can manipulate this order or add new files with the following two options which are fully described in @ref{Operating mode options}: @table @option @item --config Allows you to define any file to be parsed as a configuration file on the command-line or within the any other configuration file. Recall that the file given to @option{--config} is parsed immediately when this option is confronted (on the command-line or in a configuration file). @item --lastconfig Allows you to stop the parsing of subsequent configuration files. Note that if this option is given in a configuration file, it will be fully read, so its position in the configuration doesn't matter (unlike @option{--config}). @end table @end cartouche One example of benefiting from these configuration files can be this: raw telescope images usually have their main image extension in the second FITS extension, while processed FITS images usually only have one extension. If your system-wide default input extension is 0 (the first), then when you want to work with the former group of data you have to explicitly mention it to the programs every time. With this progressive state of default values to check, you can set different default values for the different directories that you would like to run Gnuastro in for your different purposes, so you won't have to worry about this issue any more. The same can be said about the @file{gnuastro.conf} files: by specifying a behavior in this single file, all Gnuastro programs in the respective directory, user, or system-wide steps will behave similarly. For example to keep the input's directory when no specific output is given (see @ref{Automatic output}), or to not delete an existing file if it has the same name as a given output (see @ref{Input output options}). @node Current directory and User wide, System wide, Configuration file precedence, Configuration files @subsection Current directory and User wide @cindex @file{$HOME} @cindex @file{./.gnuastro/} @cindex @file{$HOME/.local/etc/} For the current (local) and user-wide directories, the configuration files are stored in the hidden sub-directories named @file{.gnuastro/} and @file{$HOME/.local/etc/} respectively. Unless you have changed it, the @file{$HOME} environment variable should point to your home directory. You can check it by running @command{$ echo $HOME}. Each time you run any of the programs in Gnuastro, this environment variable is read and placed in the above address. So if you suddenly see that your home configuration files are not being read, probably you (or some other program) has changed the value of this environment variable. @vindex --setdirconf @vindex --setusrconf Although it might cause confusions like above, this dependence on the @file{HOME} environment variable enables you to temporarily use a different directory as your home directory. This can come in handy in complicated situations. To set the user or current directory configuration files based on your command-line input, you can use the @option{--setdirconf} or @option{--setusrconf}, see @ref{Operating mode options}. @node System wide, , Current directory and User wide, Configuration files @subsection System wide @cindex @file{prefix/etc/} @cindex System wide configuration files @cindex Configuration files, system wide When Gnuastro is installed, the configuration files that are shipped with the distribution are copied into the (possibly system wide) @file{prefix/etc/} directory. For more details on @file{prefix}, see @ref{Installation directory} (by default it is: @file{/usr/local}). This directory is the final place (with the lowest priority) that the programs in Gnuastro will check to retrieve parameter values. If you remove an option and its value from the system wide configuration files, you either have to specify it in more immediate configuration files or set it each time in the command-line. Recall that none of the programs in Gnuastro keep any internal default values and will abort if they don't find a value for the necessary parameters (except the number of threads and output file name). So even though you might never expect to use an optional option, it safe to have it available in this system-wide configuration file even if you don't intend to use it frequently. Note that in case you install Gnuastro from your distribution's repositories, @file{prefix} will either be set to @file{/} (the root directory) or @file{/usr}, so you can find the system wide configuration variables in @file{/etc/} or @file{/usr/etc/}. The prefix of @file{/usr/local/} is conventionally used for programs you install from source by your self as in @ref{Quick start}. @node Multi-threaded operations, Numeric data types, Configuration files, Common program behavior @section Multi-threaded operations @pindex nproc @cindex pthread @cindex CPU threads @cindex GNU Coreutils @cindex Using CPU threads @cindex CPU, using all threads @cindex Multi-threaded programs @cindex Using multiple CPU cores @cindex Simultaneous multithreading Some of the programs benefit significantly when you use all the threads your computer's CPU has to offer to your operating system. The number of threads available can be larger than the number of physical (hardware) cores in the CPU (also known as Simultaneous multithreading). For example, in Intel's CPUs (those that implement its Hyper-threading technology) the number of threads is usually double the number of physical cores in your CPU. On a GNU/Linux system, the number of threads available can be found with the command @command{$ nproc} command (part of GNU Coreutils). @vindex --numthreads @cindex Number of threads available @cindex Available number of threads @cindex Internally stored option value Gnuastro's programs can find the number of threads available to your system internally at run-time (when you execute the program). However, if a value is given to the @option{--numthreads} option, the given number will be used, see @ref{Operating mode options} and @ref{Configuration files} for ways to use this option. Thus @option{--numthreads} is the only common option in Gnuastro's programs with a value that doesn't have to be specified anywhere on the command-line or in the configuration files. @menu * A note on threads:: Caution and suggestion on using threads. * How to run simultaneous operations:: How to run things simultaneously. @end menu @node A note on threads, How to run simultaneous operations, Multi-threaded operations, Multi-threaded operations @subsection A note on threads @cindex Using multiple threads @cindex Best use of CPU threads @cindex Efficient use of CPU threads Spinning off threads is not necessarily the most efficient way to run an application. Creating a new thread isn't a cheap operation for the operating system. It is most useful when the input data are fixed and you want the same operation to be done on parts of it. For example one input image to Crop and multiple crops from various parts of it. In this fashion, the image is loaded into memory once, all the crops are divided between the number of threads internally and each thread cuts out those parts which are assigned to it from the same image. On the other hand, if you have multiple images and you want to crop the same region(s) out of all of them, it is much more efficient to set @option{--numthreads=1} (so no threads spin off) and run Crop multiple times simultaneously, see @ref{How to run simultaneous operations}. @cindex Wall-clock time You can check the boost in speed by first running a program on one of the data sets with the maximum number of threads and another time (with everything else the same) and only using one thread. You will notice that the wall-clock time (reported by most programs at their end) in the former is longer than the latter divided by number of physical CPU cores (not threads) available to your operating system. Asymptotically these two times can be equal (most of the time they aren't). So limiting the programs to use only one thread and running them independently on the number of available threads will be more efficient. @cindex System Cache @cindex Cache, system Note that the operating system keeps a cache of recently processed data, so usually, the second time you process an identical data set (independent of the number of threads used), you will get faster results. In order to make an unbiased comparison, you have to first clean the system's cache with the following command between the two runs. @example $ sync; echo 3 | sudo tee /proc/sys/vm/drop_caches @end example @cartouche @noindent @strong{SUMMARY: Should I use multiple threads?} Depends: @itemize @item If you only have @strong{one} data set (image in most cases!), then yes, the more threads you use (with a maximum of the number of threads available to your OS) the faster you will get your results. @item If you want to run the same operation on @strong{multiple} data sets, it is best to set the number of threads to 1 and use Make, or GNU Parallel, as explained in @ref{How to run simultaneous operations}. @end itemize @end cartouche @node How to run simultaneous operations, , A note on threads, Multi-threaded operations @subsection How to run simultaneous operations There are two@footnote{A third way would be to open multiple terminal emulator windows in your GUI, type the commands separately on each and press @key{Enter} once on each terminal, but this is far too frustrating, tedious and prone to errors. It's therefore not a realistic solution when tens, hundreds or thousands of operations (your research targets, multiplied by the operations you do on each) are to be done.} approaches to simultaneously execute a program: using GNU Parallel or Make (GNU Make is the most common implementation). The first is very useful when you only want to do one job multiple times and want to get back to your work without actually keeping the command you ran. The second is usually for more important operations, with lots of dependencies between the different products (for example a full scientific research). @table @asis @item GNU Parallel @cindex GNU Parallel When you only want to run multiple instances of a command on different threads and get on with the rest of your work, the best method is to use GNU parallel. Surprisingly GNU Parallel is one of the few GNU packages that has no Info documentation but only a Man page, see @ref{Info}. So to see the documentation after installing it please run @example $ man parallel @end example @noindent As an example, let's assume we want to crop a region fixed on the pixels (500, 600) with the default width from all the FITS images in the @file{./data} directory ending with @file{sci.fits} to the current directory. To do this, you can run: @example $ parallel astcrop --numthreads=1 --xc=500 --yc=600 ::: \ ./data/*sci.fits @end example @noindent GNU Parallel can help in many more conditions, this is one of the simplest, see the man page for lots of other examples. For absolute beginners: the backslash (@command{\}) is only a line breaker to fit nicely in the page. If you type the whole command in one line, you should remove it. @item Make @cindex Make Make is a program for building ``targets'' (e.g., files) using ``recipes'' (a set of operations) when their known ``prerequisites'' (other files) have been updated. It elegantly allows you to define dependency structures for building your final output and updating it efficiently when the inputs change. It is the most common infra-structure to build software today. Scientific research methodology is very similar to software development: you start by testing a hypothesis on a small sample of objects/targets with a simple set of steps. As you are able to get promising results, you improve the method and use it on a larger, more general, sample. In the process, you will confront many issues that have to be corrected (bugs in software development jargon). Make a wonderful tool to manage this style of development. It has been used to make reproducible papers, for example see @url{https://gitlab.com/makhlaghi/NoiseChisel-paper, the reproduction pipeline} of the paper introducing @ref{NoiseChisel} (one of Gnuastro's programs). @cindex GNU Make GNU Make@footnote{@url{https://www.gnu.org/software/make/}} is the most common implementation which (similar to nearly all GNU programs, comes with a wonderful manual@footnote{@url{https://www.gnu.org/software/make/manual/}}). Make is very basic and simple, and thus the manual is short (the most important parts are in the first roughly 100 pages) and easy to read/understand. Make comes with a @option{--jobs} (@option{-j}) option which allows you to specify the maximum number of jobs that can be done simultaneously. For example if you have 8 threads available to your operating system. You can run: @example $ make -j8 @end example With this command, Make will process your @file{Makefile} and create all the targets (can be thousands of FITS images for example) simultaneously on 8 threads, while fully respecting their dependencies (only building a file/target when its prerequisites are successfully built). Make is thus strongly recommended for managing scientific research where robustness, archivability, reproducibility and speed@footnote{Besides its multi-threaded capabilities, Make will only re-build those targets that depend on a change you have made, not the whole work. For example, if you have set the prerequisites properly, you can easily test the changing of a parameter on your paper's results without having to re-do everything (which is much faster). This allows you to be much more productive in easily checking various ideas/assumptions of the different stages of your research and thus produce a more robust result for your exciting science.} are very important. @end table @node Numeric data types, Tables, Multi-threaded operations, Common program behavior @section Numeric data types @cindex Bit @cindex Type At the lowest level, the computer stores everything in terms of @code{1} or @code{0}. For example, each program in Gnuastro, or each astronomical image you take with the telescope is actually a string of millions of these zeros and ones. The space required to keep a zero or one is the smallest unit of storage, and is known as a @emph{bit}. However, understanding and manipulating this string of bits is extremely hard for most people. Therefore, we define packages of these bits along with a standard on how to interpret the bits in each package as a @emph{type}. @cindex Byte @cindex Signed integer @cindex Unsigned integer @cindex Integer, Signed The most basic standard for reading the bits is integer numbers (@mymath{..., -2, -1, 0, 1, 2, ...}, more bits will give larger limits). The common integer types are 8, 16, 32, and 64 bits wide. For each width, there are two standards for reading the bits: signed and unsigned integers. In the former, negative numbers are allowed and in the latter, they aren't. The @code{unsigned} types thus have larger positive limits (one extra bit), but no negative value. When the context of your work doesn't involve negative numbers (for example counting, where negative is not defined), it is best to use the @code{unsigned} types. For full numerical range of all integer types, see below. Another standard of converting a given number of bits to numbers is the floating point standard, this standard can approximately store any real number with a given precision. There are two common floating point types: 32-bit and 64-bit, for single and double precision floating point numbers respectively. The former is sufficient for data with less than 8 significant decimal digits (most astronomical data), while the latter is good for less than 16 significant decimal digits. The representation of real numbers as bits is much more complex than integers. If you are interested, you can start with the @url{https://en.wikipedia.org/wiki/Floating_point, Wikipedia article}. With the conversion operators in Gnuastro's Arithmetic, you can change the types of data to each other, which is necessary in some contexts. For example the program/library, that you intend to feed the data into, only accepts floating point values, but you have an integer image. Another situation that conversion can be helpful is when you know that your data only has values that fit within @code{int8} or @code{uint16}. However it is currently formatted in the @code{float64} type. Operations involving floating point or larger integer types are significantly slower than integer or smaller-width types respectively. In the latter case, it also requires much more (by 8 or 4 times in the example above) storage space. So when you confront such situations and want to store/archive/transfter the data, it is best convert them to the most efficient type. The short and long names for the recognized numeric data types in Gnuastro are listed below. Both short and long names can be used when you want to specify a type. For example, as a value to the common option @option{--type} (see @ref{Input output options}), or in the information comment lines of @ref{Gnuastro text table format}. The ranges listed below are inclusive. @table @code @item u8 @itemx uint8 8-bit un-signed integers, range:@* @mymath{[0\rm{\ to\ }2^8-1]} or @mymath{[0\rm{\ to\ }255]}. @item i8 @itemx int8 8-bit signed integers, range:@* @mymath{[-2^7\rm{\ to\ }2^7-1]} or @mymath{[-128\rm{\ to\ }127]}. @item u16 @itemx uint16 16-bit un-signed integers, range:@* @mymath{[0\rm{\ to\ }2^{16}-1]} or @mymath{[0\rm{\ to\ }65535]}. @item i16 @itemx int16 16-bit signed integers, range:@* @mymath{[-2^{15}\rm{\ to\ }2^{15}-1]} or @mymath{[-32768\rm{\ to\ }32767]}. @item u32 @itemx uint32 32-bit un-signed integers, range:@* @mymath{[0\rm{\ to\ }2^{32}-1]} or @mymath{[0\rm{\ to\ }4294967295]}. @item i32 @itemx int32 32-bit signed integers, range:@* @mymath{[-2^{31}\rm{\ to\ }2^{31}-1]} or @mymath{[-2147483648\rm{\ to\ }2147483647]}. @item u64 @itemx uint64 64-bit un-signed integers, range@* @mymath{[0\rm{\ to\ }2^{64}-1]} or @mymath{[0\rm{\ to\ }18446744073709551615]}. @item i64 @itemx int64 64-bit signed integers, range:@* @mymath{[-2^{63}\rm{\ to\ }2^{63}-1]} or @mymath{[-9223372036854775808\rm{\ to\ }9223372036854775807]}. @item f32 @itemx float32 32-bit (single-precision) floating point types. The maximum (minimum is its negative) possible value is @mymath{3.402823\times10^{38}}. Single-precision floating points can accurately represent a floating point number up to @mymath{\sim7.2} significant decimals. Given the heavy noise in astronomical data, this is usually more than sufficient for storing results. @item f64 @itemx float64 64-bit (double-precision) floating point types. The maximum (minimum is its negative) possible value is @mymath{\sim10^{308}}. Double-precision floating points can accurately represent a floating point number @mymath{\sim15.9} significant decimals. This is usually good for processing (mixing) the data internally, for example a sum of single precision data (and later storing the result as @code{float32}). @end table @cartouche @noindent @strong{Some file formats don't recognize all types.} Some file formats don't recognize all the types, for example the FITS standard (see @ref{Fits}) does not define @code{uint64} in binary tables or images. When a type is not acceptable for output into a given file format, the respective Gnuastro program or library will let you know and abort. On the command-line, you can use the @ref{Arithmetic} program to convert the numerical type of a dataset, in the libraries, you can call @code{gal_data_copy_to_new_type}. @end cartouche @node Tables, Tessellation, Numeric data types, Common program behavior @section Tables ``A table is a collection of related data held in a structured format within a database. It consists of columns, and rows.'' (from Wikipedia). Each column in the table contains the values of one property and each row is a collection of properties (columns) for one target object. For example, let's assume you have just ran MakeCatalog (see @ref{MakeCatalog}) on an image to measure some properties for the labeled regions (which might be detected galaxies for example) in the image. For each labeled region (detected galaxy), there will be a @emph{row} which groups its measured properties as @emph{columns}, one column for each property. One such property can be the object's magnitude, which is the sum of pixels with that label, or its center can be defined as the light-weighted average value of those pixels. Many such properties can be derived from the raw pixel values and their position, see @ref{Invoking astmkcatalog} for a long list. As a summary, for each labeled region (or, galaxy) we have one @emph{row} and for each measured property we have one @emph{column}. This high-level structure is usually the first step for higher-level analysis, for example finding the stellar mass or photometric redshift from magnitudes in multiple colors. Thus, tables are not just outputs of programs, in fact it is much more common for tables to be inputs of programs. For example, to make a mock galaxy image, you need to feed in the properties of each galaxy into @ref{MakeProfiles} for it do the inverse of the process above and make a simulated image from a catalog, see @ref{Sufi simulates a detection}. In other cases, you can feed a table into @ref{Crop} and it will crop out regions centered on the positions within the table, see @ref{Hubble visually checks and classifies his catalog}. So to end this relatively long introduction, tables play a very important role in astronomy, or generally all branches of data analysis. In @ref{Recognized table formats} the currently recognized table formats in Gnuastro are discussed. You can use any of these tables as input or ask for them to be built as output. The most common type of table format is a simple plain text file with each row on one line and columns separated by white space characters, this format is easy to read/write by eye/hand. To give it the full functionality of more specific table types like the FITS tables, Gnuastro has a special convention which you can use to give each column a name, type, unit, and comments, while still being readable by other plain text table readers. This convention is described in @ref{Gnuastro text table format}. When tables are input to a program, the program reading it needs to know which column(s) it should use for its desired purposes. Gnuastro's programs all follow a similar convention, on the way you can select columns in a table. They are thoroughly discussed in @ref{Selecting table columns}. @menu * Recognized table formats:: Table formats that are recognized in Gnuastro. * Gnuastro text table format:: Gnuastro's convention plain text tables. * Selecting table columns:: Identify/select certain columns from a table @end menu @node Recognized table formats, Gnuastro text table format, Tables, Tables @subsection Recognized table formats The list of table formats that Gnuastro can currently read from and write to are described below. Each has their own advantage and disadvantages, so a short review of the format is also provided to help you make the best choice based on how you want to define your input tables or later use your output tables. @table @asis @item Plain text table This is the most basic and simplest way to create, view, or edit the table by hand on a text editor. The other formats described below are less eye-friendly and have a more formal structure (for easier computer readability). It is fully described in @ref{Gnuastro text table format}. @cindex FITS Tables @cindex Tables FITS @cindex ASCII table, FITS @item FITS ASCII tables The FITS ASCII table extension is fully in ASCII encoding and thus easily readable on any text editor (assuming it is the only extension in the FITS file). If the FITS file also contains binary extensions (for example an image or binary table extensions), then there will be many hard to print characters. The FITS ASCII format doesn't have new line characters to separate rows. In the FITS ASCII table standard, each row is defined as a fixed number of characters (value to the @code{NAXIS1} keyword), so to visually inspect it properly, you would have to adjust your text editor's width to this value. All columns start at given character positions and have a fixed width (number of characters). Numbers in a FITS ASCII table are printed into ASCII format, they are not in binary (that the CPU uses). Hence, they can take a larger space in memory, loose their precision, and take longer to read into memory. If you are dealing with integer type columns (see @ref{Numeric data types}), another issue with FITS ASCII tables is that the type information for the column will be lost (there is only one integer type in FITS ASCII tables). One problem with the binary format on the other hand is that it isn't portable (different CPUs/compilers) have different standards for translating the zeros and ones. But since ASCII characters are defined on a byte and are well recognized, they are better for portability on those various systems. Gnuastro's plain text table format described below is much more portable and easier to read/write/interpret by humans manually. Generally, as the name implies, this format is useful for when your table mainly contains ASCII columns (for example file names, or descriptions). They can be useful when you need to include columns with structured ASCII information along with other extensions in one FITS file. In such cases, you can also consider header keywords (see @ref{Fits}). @cindex Binary table, FITS @item FITS binary tables The FITS binary table is the FITS standard's solution to the issues discussed with keeping numbers in ASCII format as described under the FITS ASCII table title above. Only columns defined as a string type (a string of ASCII characters) are readable in a text editor. The portability problem with binary formats discussed above is mostly solved thanks to the portability of CFITSIO (see @ref{CFITSIO}) and the very long history of the FITS format which has been widely used since the 1970s. In the case of most numbers, storing them in binary format is more memory efficient than ASCII format. For example, to store @code{-25.72034} in ASCII format, you need 9 bytes/characters. But if you keep this same number (to the approximate precision possible) as a 4-byte (32-bit) floating point number, you can keep/transmit it with less than half the amount of memory. When catalogs contain thousands/millions of rows in tens/hundreds of columns, this can lead to significant improvements in memory/band-width usage. Moreover, since the CPU does its operations in the binary formats, reading the table in and writing it out is also much faster than an ASCII table. When you are dealing with integer numbers, the compression ratio can be even better, for example if you know all of the values in a column are positive and less than @code{255}, you can use the @code{unsigned char} type which only takes one byte! If they are between @code{-128} and @code{127}, then you can use the (signed) @code{char} type. So if you are thoughtful about the limits of your integer columns, you can greatly reduce the size of your file and also the speed at which it is read/written. This can be very useful when sharing your results with collaborators or publishing them. To decrease the file size even more you can name your output as ending in @file{.fits.gz} so it is also compressed after creation. Just note that compression/decompressing is CPU intensive and can slow down the writing/reading of the file. Fortunately the FITS Binary table format also accepts ASCII strings as column types (along with the various numerical types). So your dataset can also contain non-numerical columns. @end table @menu * Gnuastro text table format:: Reading plain text tables @end menu @node Gnuastro text table format, Selecting table columns, Recognized table formats, Tables @subsection Gnuastro text table format Plain text files are the most generic, portable, and easiest way to (manually) create, (visually) inspect, or (manually) edit a table. In this format, the ending of a row is defined by the new-line character (a line on a text editor). So when you view it on a text editor, every row will occupy one line. The delimiters (or characters separating the columns) are white space characters (space, horizontal tab, vertical tab) and a comma (@key{,}). The only further requirement is that all rows/lines must have the same number of columns. The columns don't have to be exactly under each other and the rows can be arbitrarily long with different lengths. For example the following contents in a file would be interpreted as a table with 4 columns and 2 rows, with each element interpreted as a @code{double} type (see @ref{Numeric data types}). @example 1 2.234948 128 39.8923e8 2 , 4.454 792 72.98348e7 @end example However, the example above has no other information about the columns (it is just raw data, with no meta-data). To use this table, you have to remember what the numbers in each column represent. Also, when you want to select columns, you have to count their position within the table. This can become frustrating and prone to bad errors (getting the columns wrong) especially as the number of columns increase. It is also bad for sending to a colleague, because they will find it hard to remember/use the columns properly. To solve these problems in Gnuastro's programs/libraries you aren't limited to using the column's number, see @ref{Selecting table columns}. If the columns have names, units, or comments you can also select your columns based on searches/matches in these fields, for example see @ref{Table}. Also, in this manner, you can't guide the program reading the table on how to read the numbers. As an example, the first and third columns above can be read as integer types: the first column might be an ID and the third can be the number of pixels an object occupies in an image. So there is no need to read these to columns as a @code{double} type (which takes more memory, and is slower). In the bare-minimum example above, you also can't use strings of characters, for example the names of filters, or some other identifier that includes non-numerical characters. In the absence of any information, only numbers can be read robustly. Assuming we read columns with non-numerical characters as string, there would still be the problem that the strings might contain space (or any delimiter) character for some rows. So, each `word' in the string will be interpreted as a column and the program will abort with an error that the rows don't have the same number of columns. To correct for these limitations, Gnuastro defines the following convention for storing the table meta-data along with the raw data in one plain text file. The format is primarily designed for ease of reading/writing by eye/fingers, but is also structured enough to be read by a program. When the first non-white character in a line is @key{#}, or there are no non-white characters in it, then the line will not be considered as a row of data in the table (this is a pretty standard convention in many programs, and higher level languages). In the former case, the line is interpreted as a @emph{comment}. If the comment line starts with `@code{# Column N:}', then it is assumed to contain information about column @code{N} (a number, counting from 1). Comment lines that don't start with this pattern are ignored and you can use them to include any further information you want to store with the table in the text file. A column information comment is assumed to have the following format: @example # Column N: NAME [UNIT, TYPE, BLANK] COMMENT @end example @cindex NaN @noindent Any sequence of characters between `@key{:}' and `@key{[}' will be interpreted as the column name (so it can contain anything except the `@key{[}' character). Anything between the `@key{]}' and the end of the line is defined as a comment. Within the brackets, anything before the first `@key{,}' is the units (physical units, for example km/s, or erg/s), anything before the second `@key{,}' is the short type identifier (see below, and @ref{Numeric data types}). Finally (still within the brackets), any non-white characters after the second `@key{,}' are interpreted as the blank value for that column (see @ref{Blank pixels}). Note that blank values will be stored in the same type as the column, not as a string@footnote{For floating point types, the @code{nan}, or @code{inf} strings (both not case-sensitive) refer to IEEE NaN (not a number) and infinity values respectively and will be stored as a floating point, so they are acceptable.}. When a formatting problem occurs (for example you have specified the wrong type code, see below), or the the column was already given meta-data in a previous comment, or the column number is larger than the actual number of columns in the table (the non-commented or empty lines), then the comment information line will be ignored. When a comment information line can be used, the leading and trailing white space characters will be stripped from all of the elements. For example in this line: @example # Column 5: column name [km/s, f32,-99] Redshift as speed @end example The @code{NAME} field will be `@code{column name}' and the @code{TYPE} field will be `@code{f32}'. Note how all the white space characters before and after strings are not used, but those in the middle remained. Also, white space characters aren't mandatory. Hence, in the example above, the @code{BLANK} field will be given the value of `@code{-99}'. Except for the column number (@code{N}), the rest of the fields are optional. Also, the column information comments don't have to be in order. In other words, the information for column @mymath{N+m} (@mymath{m>0}) can be given in a line before column @mymath{N}. Also, you don't have to specify information for all columns. Those columns that don't have this information will be interpreted with the default settings (like the case above: values are double precision floating point, and the column has no name, unit, or comment). So these lines are all acceptable for any table (the first one, with nothing but the column number is redundant): @example # Column 5: # Column 1: ID [,i] The Clump ID. # Column 3: mag_f160w [AB mag, f] Magnitude from the F160W filter @end example @noindent The data type of the column should be specified with one of the following values: @itemize @item For a numeric column, you can use any of the numeric types (and their recognized identifiers) described in @ref{Numeric data types}. @item `@code{strN}': for strings. The @code{N} value identifies the length of the string (how many characters it has). The start of the string on each row is the first non-delimiter character of the column that has the string type. The next @code{N} characters will be interpreted as a string and all leading and trailing white space will be removed. If the next column's characters, are closer than @code{N} characters to the start of the string column in that line/row, they will be considered part of the string column. If there is a new-line character before the ending of the space given to the string column (in other words, the string column is the last column), then reading of the string will stop, even if the @code{N} characters are not complete yet. See @file{tests/table/table.txt} for one example. Therefore, the only time you have to pay attention to the positioning and spaces given to the string column is when it is not the last column in the table. The only limitation in this format is that trailing and leading white space characters will be removed from the columns that are read. In most cases, this is the desired behavior, but if trailing and leading white-spaces are critically important to your analysis, define your own starting and ending characters and remove them after the table has been read. For example in the sample table below, the two `@key{|}' characters (which are arbitrary) will remain in the value of the second column and you can remove them manually later. If only one of the leading or trailing white spaces is important for your work, you can only use one of the `@key{|}'s. @example # Column 1: ID [label, uc] # Column 2: Notes [no unit, str50] 1 leading and trailing white space is ignored here 2.3442e10 2 | but they will be preserved here | 8.2964e11 @end example @end itemize Note that the FITS binary table standard does not define the @code{unsigned int} and @code{unsigned long} types, so if you want to convert your tables to FITS binary tables, use other types. Also, note that in the FITS ASCII table, there is only one integer type (@code{long}). So if you convert a Gnuastro plain text table to a FITS ASCII table with the @ref{Table} program, the type information for integers will be lost. Conversely if integer types are important for you, you have to manually set them when reading a FITS ASCII table (for example with the Table program when reading/converting into a file, or with the @file{gnuastro/table.h} library functions when reading into memory). @node Selecting table columns, , Gnuastro text table format, Tables @subsection Selecting table columns At the lowest level, the only defining aspect of a column in a table is its number, or position. But selecting columns purely by number is not very convenient and, especially when the tables are large it can be very frustrating and prone to errors. Hence, table file formats (for example see @ref{Recognized table formats}) have ways to store additional information about the columns (meta-data). Some of the most common pieces of information about each column are its @emph{name}, the @emph{units} of data in the it, and a @emph{comment} for longer/informal description of the column's data. To facilitate research with Gnuastro, you can select columns by matching, or searching in these three fields, besides the low-level column number. To view the full list of information on the columns in the table, you can use the Table program (see @ref{Table}) with the command below (replace @file{table-file} with the filename of your table, if its FITS, you might also need to specify the HDU/extension which contains the table): @example $ asttable --information table-file @end example Gnuastro's programs need the columns for different purposes, for example in Crop, you specify the columns containing the central coordinates of the crop centers with the @option{--coordcol} option (see @ref{Crop options}). On the other hand, in MakeProfiles, to specify the column containing the profile position angles, you must use the @option{--pcol} option (see @ref{MakeProfiles catalog}). Thus, there can be no unified common option name to select columns for all programs (different columns have different purposes). However, when the program expects a column for a specific context, the option names end in the @option{col} suffix like the examples above. These options accept values in integer (column number), or string (metadata match/search) format. If the value can be parsed as a positive integer, it will be seen as the low-level column number. Note that column counting starts from 1, so if you ask for column 0, the respective program will abort with an error. When the value can't be interpreted as an a integer number, it will be seen as a string of characters which will be used to match/search in the table's meta-data. The meta-data field which the value will be compared with can be selected through the @option{--searchin} option, see @ref{Input output options}. @option{--searchin} can take three values: @code{name}, @code{unit}, @code{comment}. The matching will be done following this convention: @itemize @item If the value is enclosed in two slashes (for example @command{-x/RA_/}, or @option{--coordcol=/RA_/}, see @ref{Crop options}), then it is assumed to be a regular expression with the same convention as GNU AWK. GNU AWK has a very well written @url{https://www.gnu.org/software/gawk/manual/html_node/Regexp.html, chapter} describing regular expressions, so we we will not continue discussing them here. Regular expressions are a very powerful tool in matching text and useful in many contexts. We thus strongly encourage reviewing this chapter for greatly improving the quality of your work in many cases, not just for searching column meta-data in Gnuastro. @item When the string isn't enclosed between `@key{/}'s, any column that exactly matches the given value in the given field will be selected. @end itemize Note that in both cases, you can ignore the case of alphabetic characters with the @option{--ignorecase} option, see @ref{Input output options}. Also, in both cases, multiple columns may be selected with one call to this function. In this case, the order of the selected columns (with one call) will be the same order as they appear in the table. @node Tessellation, Getting help, Tables, Common program behavior @section Tessellation It is sometimes necessary to classify the elements in a dataset (for example pixels in an image) into a grid of individual, non-overlapping tiles. For example when background sky gradients are present in an image, you can define a tile grid over the image. When the tile sizes are set properly, the background's variation over each tile will be negligible, allowing you to measure (and subtract) it. In other cases (for example spatial domain convolution in Gnuastro, see @ref{Convolve}), it might simply be for speed of processing: each tile can be processed independently on a separate CPU thread. In the arts and mathematics, this process is formally known as @url{https://en.wikipedia.org/wiki/Tessellation, tessellation}. The size of the regular tiles (in units of data-elements, or pixels in an image) can be defined with the @option{--tilesize} option. It takes multiple numbers (separated by a comma) which will be the length along the respective dimension (in FORTRAN/FITS dimension order). Divisions are also acceptable, but must result in an integer. For example @option{--tilesize=30,40} can be used for an image (a 2D dataset). The regular tile size along the first FITS axis (horizontal when viewed in SAO ds9) will be 30 pixels and along the second it will be 40 pixels. Ideally, @option{--tilesize} should be selected such that all tiles in the image have exactly the same size. In other words, that the dataset length in each dimension is divisible by the tile size in that dimension. However, this is not always possible: the dataset can be any size and every pixel in it is valuable. In such cases, Gnuastro will look at the significance of the remainder length, if it is not significant (for example one or two pixels), then it will just increase the size of the first tile in the respective dimension and allow the rest of the tiles to have the required size. When the remainder is significant (for example one pixel less than the size along that dimension), the remainder will be added to one regular tile's size and the large tile will be cut in half and put in the two ends of the grid/tessellation. In this way, all the tiles in the central regions of the dataset will have the regular tile sizes and the tiles on the edge will be slightly larger/smaller depending on the remainder significance. The fraction which defines the remainder significance along all dimensions can be set through @option{--remainderfrac}. The best tile size is directly related to the spatial properties of the property you want to study (for example, gradient on the image). In practice we assume that the gradient is not present over each tile. So if there is a strong gradient (for example in long wavelength ground based images) or the image is of a crowded area where there isn't too much blank area, you have to choose a smaller tile size. A larger mesh will give more pixels and and so the scatter in the results will be less (better statistics). @cindex CCD @cindex Amplifier @cindex Bias current @cindex Subaru Telescope @cindex Hyper Suprime-Cam @cindex Hubble Space Telescope For raw image processing, a single tessellation/grid is not sufficient. Raw images are the unprocessed outputs of the camera detectors. Modern detectors usually have multiple readout channels each with its own amplifier. For example the Hubble Space Telescope Advanced Camera for Surveys (ACS) has four amplifiers over its full detector area dividing the square field of view to four smaller squares. Ground based image detectors are not exempt, for example each CCD of Subaru Telescope's Hyper Suprime-Cam camera (which has 104 CCDs) has four amplifiers, but they have the same height of the CCD and divide the width by four parts. @cindex Channel The bias current on each amplifier is different, and initial bias subtraction is not perfect. So even after subtracting the measured bias current, you can usually still identify the boundaries of different amplifiers by eye. See Figure 11(a) in Akhlaghi and Ichikawa (2015) for an example. This results in the final reduced data to have non-uniform amplifier-shaped regions with higher or lower background flux values. Such systematic biases will then propagate to all subsequent measurements we do on the data (for example photometry and subsequent stellar mass and star formation rate measurements in the case of galaxies). Therefore an accurate analysis requires a two layer tessellation: the top layer contains larger tiles, each covering one amplifier channel. For clarity we'll call these larger tiles ``channels''. The number of channels along each dimension is defined through the @option{--numchannels}. Each channel is then covered by its own individual smaller tessellation (with tile sizes determined by the @option{--tilesize} option). This will allow independent analysis of two adjacent pixels from different channels if necessary. If the image is processed or the detector only has one amplifier, you can set the number of channels in both dimension to 1. The final tessellation can be inspected on the image with the @option{--checktiles} option that is available to all programs which use tessellation for localized operations. When this option is called, a FITS file with a @file{_tiled.fits} suffix will be created along with the outputs, see @ref{Automatic output}. Each pixel in this image has the number of the tile that covers it. If the number of channels in any dimension are larger than unity, you will notice that the tile IDs are defined such that the first channels is covered first, then the second and so on. For the full list of processing-related common options (including tessellation options), please see @ref{Processing options}. @node Getting help, Automatic output, Tessellation, Common program behavior @section Getting help @cindex Help @cindex Book formats @cindex Remembering options @cindex Convenient book formats Probably the first time you read this book, it is either in the PDF or HTML formats. These two formats are very convenient for when you are not actually working, but when you are only reading. Later on, when you start to use the programs and you are deep in the middle of your work, some of the details will inevitably be forgotten. Going to find the PDF file (printed or digital) or the HTML webpage is a major distraction. @cindex Online help @cindex Command-line help GNU software have a very unique set of tools for aiding your memory on the command-line, where you are working, depending how much of it you need to remember. In the past, such command-line help was known as ``online'' help, because they were literally provided to you `on' the command `line'. However, nowadays the word ``online'' refers to something on the internet, so that term will not be used. With this type of help, you can resume your exciting research without taking your hands off the keyboard. @cindex Installed help methods Another major advantage of such command-line based help routines is that they are installed with the software in your computer, therefore they are always in sync with the executable you are actually running. Three of them are actually part of the executable. You don't have to worry about the version of the book or program. If you rely on external help (a PDF in your personal print or digital archive or HTML from the official webpage) you have to check to see if their versions fit with your installed program. If you only need to remember the short or long names of the options, @option{--usage} is advised. If it is what the options do, then @option{--help} is a great tool. Man pages are also provided for those who are use to this older system of documentation. This full book is also available to you on the command-line in Info format. If none of these seems to resolve the problems, there is a mailing list which enables you to get in touch with experienced Gnuastro users. In the subsections below each of these methods are reviewed. @menu * --usage:: View option names and value formats. * --help:: List all options with description. * Man pages:: Man pages generated from --help. * Info:: View complete book in terminal. * help-gnuastro mailing list:: Contacting experienced users. @end menu @node --usage, --help, Getting help, Getting help @subsection @option{--usage} @vindex --usage @cindex Usage pattern @cindex Mandatory arguments @cindex Optional and mandatory tokens If you give this option, the program will not run. It will only print a very concise message showing the options and arguments. Everything within square brackets (@option{[]}) is optional. For example here are the first and last two lines of Crop's @option{--usage} is shown: @example $ astcrop --usage Usage: astcrop [-Do?IPqSVW] [-d INT] [-h INT] [-r INT] [-w INT] [-x INT] [-y INT] [-c INT] [-p STR] [-N INT] [--deccol=INT] .... [--setusrconf] [--usage] [--version] [--wcsmode] [ASCIIcatalog] FITSimage(s).fits @end example There are no explanations on the options, just their short and long names shown separately. After the program name, the short format of all the options that don't require a value (on/off options) is displayed. Those that do require a value then follow in separate brackets, each displaying the format of the input they want, see @ref{Options}. Since all options are optional, they are shown in square brackets, but arguments can also be optional. For example in this example, a catalog name is optional and is only required in some modes. This is a standard method of displaying optional arguments for all GNU software. @node --help, Man pages, --usage, Getting help @subsection @option{--help} @vindex --help If the command-line includes this option, the program will not be run. It will print a complete list of all available options along with a short explanation. The options are also grouped by their context. Within each context, the options are sorted alphabetically. Since the options are shown in detail afterwards, the first line of the @option{--help} output shows the arguments and if they are optional or not, similar to @ref{--usage}. In the @option{--help} output of all programs in Gnuastro, the options for each program are classified based on context. The first two contexts are always options to do with the input and output respectively. For example input image extensions or supplementary input files for the inputs. The last class of options is also fixed in all of Gnuastro, it shows operating mode options. Most of these options are already explained in @ref{Operating mode options}. @cindex Long outputs @cindex Redirection of output @cindex Command-line, long outputs The help message will sometimes be longer than the vertical size of your terminal. If you are using a graphical user interface terminal emulator, you can scroll the terminal with your mouse, but we promised no mice distractions! So here are some suggestions: @itemize @item @cindex Scroll command-line @cindex Command-line scroll @cindex @key{Shift + PageUP} and @key{Shift + PageDown} @key{Shift + PageUP} to scroll up and @key{Shift + PageDown} to scroll down. For most help output this should be enough. The problem is that it is limited by the number of lines that your terminal keeps in memory and that you can't scroll by lines, only by whole screens. @item @cindex Pipe @cindex @command{less} Pipe to @command{less}. A pipe is a form of shell re-direction. The @command{less} tool in Unix-like systems was made exactly for such outputs of any length. You can pipe (@command{|}) the output of any program that is longer than the screen to it and then you can scroll through (up and down) with its many tools. For example: @example $ astnoisechisel --help | less @end example @noindent Once you have gone through the text, you can quit @command{less} by pressing the @key{q} key. @item @cindex Save output to file @cindex Redirection of output Redirect to a file. This is a less convenient way, because you will then have to open the file in a text editor! You can do this with the shell redirection tool (@command{>}): @example $ astnoisechisel --help > filename.txt @end example @end itemize @cindex GNU Grep @cindex Searching text @cindex Command-line searching text In case you have a special keyword you are looking for in the help, you don't have to go through the full list. GNU Grep is made for this job. For example if you only want the list of options whose @option{--help} output contains the word ``axis'' in Crop, you can run the following command: @example $ astcrop --help | grep axis @end example @cindex @code{ARGP_HELP_FMT} @cindex Argp argument parser @cindex Customize @option{--help} output @cindex @option{--help} output customization If the output of this option does not fit nicely within the confines of your terminal, GNU does enable you to customize its output through the environment variable @code{ARGP_HELP_FMT}, you can set various parameters which specify the formatting of the help messages. For example if your terminals are wider than 70 spaces (say 100) and you feel there is too much empty space between the long options and the short explanation, you can change these formats by giving values to this environment variable before running the program with the @option{--help} output. You can define this environment variable in this manner: @example $ export ARGP_HELP_FMT=rmargin=100,opt-doc-col=20 @end example @cindex @file{.bashrc} This will affect all GNU programs using GNU C library's @file{argp.h} facilities as long as the environment variable is in memory. You can see the full list of these formatting parameters in the ``Argp User Customization'' part of the GNU C library manual. If you are more comfortable to read the @option{--help} outputs of all GNU software in your customized format, you can add your customizations (similar to the line above, without the @command{$} sign) to your @file{~/.bashrc} file. This is a standard option for all GNU software. @node Man pages, Info, --help, Getting help @subsection Man pages @cindex Man pages Man pages were the Unix method of providing command-line documentation to a program. With GNU Info, see @ref{Info} the usage of this method of documentation is highly discouraged. This is because Info provides a much more easier to navigate and read environment. However, some operating systems require a man page for packages that are installed and some people are still used to this method of command line help. So the programs in Gnuastro also have Man pages which are automatically generated from the outputs of @option{--version} and @option{--help} using the GNU help2man program. So if you run @example $ man programname @end example @noindent You will be provided with a man page listing the options in the standard manner. @node Info, help-gnuastro mailing list, Man pages, Getting help @subsection Info @cindex GNU Info @cindex Command-line, viewing full book Info is the standard documentation format for all GNU software. It is a very useful command-line document viewing format, fully equipped with links between the various pages and menus and search capabilities. As explained before, the best thing about it is that it is available for you the moment you need to refresh your memory on any command-line tool in the middle of your work without having to take your hands off the keyboard. This complete book is available in Info format and can be accessed from anywhere on the command-line. To open the Info format of any installed programs or library on your system which has an Info format book, you can simply run the command below (change @command{executablename} to the executable name of the program or library): @example $ info executablename @end example @noindent @cindex Learning GNU Info @cindex GNU software documentation In case you are not already familiar with it, run @command{$ info info}. It does a fantastic job in explaining all its capabilities its self. It is very short and you will become sufficiently fluent in about half an hour. Since all GNU software documentation is also provided in Info, your whole GNU/Linux life will significantly improve. @cindex GNU Emacs @cindex GNU C library Once you've become an efficient navigator in Info, you can go to any part of this book or any other GNU software or library manual, no matter how long it is, in a matter of seconds. It also blends nicely with GNU Emacs (a text editor) and you can search manuals while you are writing your document or programs without taking your hands off the keyboard, this is most useful for libraries like the GNU C library. To be able to access all the Info manuals installed in your GNU/Linux within Emacs, type @key{Ctrl-H + i}. To see this whole book from the beginning in Info, you can run @example $ info gnuastro @end example @noindent If you run Info with the particular program executable name, for example @file{astcrop} or @file{astnoisechisel}: @example $ info astprogramname @end example @noindent you will be taken to the section titled ``Invoking ProgramName'' which explains the inputs and outputs along with the command-line options for that program. Finally, if you run Info with the official program name, for example Crop or NoiseChisel: @example $ info ProgramName @end example @noindent you will be taken to the top section which introduces the program. Note that in all cases, Info is not case sensitive. @node help-gnuastro mailing list, , Info, Getting help @subsection help-gnuastro mailing list @cindex help-gnuastro mailing list @cindex Mailing list: help-gnuastro Gnuastro maintains the help-gnuastro mailing list for users to ask any questions related to Gnuastro. The experienced Gnuastro users and some of its developers are subscribed to this mailing list and your email will be sent to them immediately. However, when contacting this mailing list please have in mind that they are possibly very busy and might not be able to answer immediately. @cindex Mailing list archives @cindex @code{help-gnuastro@@gnu.org} To ask a question from this mailing list, send a mail to @code{help-gnuastro@@gnu.org}. Anyone can view the mailing list archives at @url{http://lists.gnu.org/archive/html/help-gnuastro/}. It is best that before sending a mail, you search the archives to see if anyone has asked a question similar to yours. If you want to make a suggestion or report a bug, please don't send a mail to this mailing list. We have other mailing lists and tools for those purposes, see @ref{Report a bug} or @ref{Suggest new feature}. @node Automatic output, Output headers, Getting help, Common program behavior @section Automatic output @cindex Automatic output file names @cindex Output file names, automatic @cindex Setting output file names automatically All the programs in Gnuastro are designed such that specifying an output file or directory (based on the program context) is optional. The outputs of most programs are automatically found based on the input and what the program does. For example when you are converting a FITS image named @file{FITSimage.fits} to a JPEG image, the JPEG image will be saved in @file{FITSimage.jpg}. @vindex --keepinputdir Another very important part of the automatic output generation is that all the directory information of the input file name is stripped off of it. This feature can be disabled with the @option{--keepinputdir} option, see @ref{Common options}. It is the default because astronomical data are usually very large and organized specially with special file names. In some cases, the user might not have write permissions in those directories. In fact, even if the data is stored on your own computer, it is advised to only grant write permissions to the super user or root. This way, you won't accidentally delete or modify your valuable data! Let's assume that we are working on a report and want to process the FITS images from two projects (ABC and DEF), which are stored in the sub-directories named @file{ABCproject/} and @file{DEFproject/} of our top data directory (@file{/mnt/data}). The following shell commands show how one image from the former is first converted to a JPEG image through ConvertType and then the objects from an image in the latter project are detected using NoiseChisel. The text after the @command{#} sign are comments (not typed!). @example $ pwd # Current location /home/usrname/research/report $ ls # List directory contents ABC01.jpg $ ls /mnt/data/ABCproject # Archive 1 ABC01.fits ABC02.fits ABC03.fits $ ls /mnt/data/DEFproject # Archive 2 DEF01.fits DEF02.fits DEF03.fits $ astconvertt /mnt/data/ABCproject/ABC02.fits --output=jpg # Prog 1 $ ls ABC01.jpg ABC02.jpg $ astnoisechisel /mnt/data/DEFproject/DEF01.fits # Prog 2 $ ls ABC01.jpg ABC02.jpg DEF01_labeled.fits @end example @node Output headers, , Automatic output, Common program behavior @section Output headers @cindex Output FITS headers @cindex CFITSIO version on outputs The output FITS files created by Gnuastro's programs have some or all of the following standard keywords to keep the basic date and version information of Gnuastro, its dependencies and the pipeline that is using Gnuastro. @table @command @item DATE The creation time of the FITS file. This date is written directly by CFITSIO and is in UT format. @item COMMIT Git's commit description from the running directory of Gnuastro's programs. If the running directory is not version controlled or @file{libgit2} isn't installed (see @ref{Optional dependencies}) then this keyword will not be present. The printed value is equivalent to the output of the following command: @example git describe --dirty --always @end example If the running directory contains non-committed work, then the stored value will have a `@command{-dirty}' suffix. This can be very helpful to let you know that the data is not ready to be shared with collaborators or submitted to a journal. You should only share results that are produced after all your work is committed (safely stored in the version controlled history and thus reproducible). At first sight, version control appears to be mainly a tool for software developers. However progress in a scientific research is almost identical to progress in software development: first you have a rough idea that starts with handful of easy steps. But as the first results appear to be promising, you will have to extend, or generalize, it to make it more robust and work in all the situations your research covers, not just your first test samples. Slowly you will find wrong assumptions or bad implementations that need to be fixed (`bugs' in software development parlance). Finally, when you submit the research to your collaborators or a journal, many comments and suggestions will come in, and you have to address them. Software developers have created version control systems precisely for this kind of activity. Each significant moment in the project's history is called a ``commit'', see @ref{Version controlled source}. A snapshot of the project in each ``commit'' is safely stored away, so you can revert back to it at a later time, or check changes/progress. This way, you can be sure that your work is reproducible and track the progress and history. With version control, experimentation in the project's analysis is greatly facilitated, since you can easily revert back if a brainstorm test procedure fails. One important feature of version control is that the research result (FITS image, table, report or paper) can be stamped with the unique commit information that produced it. This information will enable you to exactly reproduce that same result later, even if you have made changes/progress. For one example of a research paper's reproduction pipeline, please see the @url{https://gitlab.com/makhlaghi/NoiseChisel-paper, reproduction pipeline} of the @url{https://arxiv.org/abs/1505.01664, paper} describing @ref{NoiseChisel}. @item CFITSIO The version of CFITSIO used (see @ref{CFITSIO}). @item WCSLIB The version of WCSLIB used (see @ref{WCSLIB}). Note that older versions of WCSLIB do not report the version internally. So this is only available if you are using more recent WCSLIB versions. @item GSL The version of GNU Scientific Library that was used, see @ref{GNU Scientific Library}. @item GNUASTRO The version of Gnuastro used (see @ref{Version numbering}). @end table Here is one example of the last few lines of an example output. @example / Versions and date DATE = '...' / file creation date COMMIT = 'v0-8-g547f6eb' / Commit description in running dir. CFITSIO = '3.41 ' / CFITSIO version. WCSLIB = '5.16 ' / WCSLIB version. GSL = '2.3 ' / GNU Scientific Library version. GNUASTRO= '0.3' / GNU Astronomy Utilities version. END @end example @node Data containers, Data manipulation, Common program behavior, Top @chapter Data containers @cindex File operations @cindex Operations on files @cindex General file operations The most low-level and basic property of a dataset is how it is stored. To process, archive and transmit the data, you need a container to store it first. From the start of the computer age, different formats have been defined to store data, optimized for particular applications. One format/container can never be useful for all applications: the storage defines the application and vice-versa. In astronomy, the Flexible Image Transport System (FITS) standard has become the most common format of data storage and transmission. It has many useful features, for example multiple sub-containers (also known as extensions or header data units, HDUs) within one file, or support for tables as well as images. Each HDU can store an independent dataset and its corresponding meta-data. Therefore, Gnuastro has one program (see @ref{Fits}) specifically designed to manipulate FITS HDUs and the meta-data (header keywords) in each HDU. Your astronomical research does not just involve data analysis (where the FITS format is very useful). For example you want to demonstrate your raw and processed FITS images or spectra as figures within slides, reports, or papers. The FITS format is not defined for such applications. Thus, Gnuastro also comes with the ConvertType program (see @ref{ConvertType}) which can be used to convert a FITS image to and from (where possible) other formats like plain text and JPEG (which allow two way conversion), along with EPS and PDF (which can only be created from FITS, not the other way round). Finally, the FITS format is not just for images, it can also store tables. Binary tables in particular can be very efficient in storing catalogs that have more than a few tens of columns and rows. However, unlike images (where all elements/pixels have one data type), tables contain multiple columns and each column can have different properties: independent data types (see @ref{Numeric data types}) and meta-data. In practice, each column can be viewed as a separate container that is grouped with others in the table. The only shared property of the columns in a table is thus the number of elements they contain. To allow easy inspection/manipulation of table columns, Gnuastro has the Table program (see @ref{Table}). It can be used to select certain table columns in a FITS table and see them as a human readable output on the command-line, or to save them into another plain text or FITS table. @menu * Fits:: View and manipulate extensions and keywords. * ConvertType:: Convert data to various formats. * Table:: Read and Write FITS tables to plain text. @end menu @node Fits, ConvertType, Data containers, Data containers @section Fits The ``Flexible Image Transport System'', or FITS, is by far the most common data container format in astronomy. Although the full name of the standard invokes the idea that it is only for images, it also contains very complete and robust features for tables. It started off in the 1970s and was formally published as a standard in 1981, it was adopted by the International Astronomical Union (IAU) in 1982 and an IAU working group to maintain its future was defined in 1988. The FITS 2.0 and 3.0 standards were approved in 2000 and 2008 respectively, and the 4.0 draft has also been released recently, please see the @url{https://fits.gsfc.nasa.gov/fits_standard.html, FITS standard document webpage} for the full text of all versions. Also see the @url{https://doi.org/10.1051/0004-6361/201015362, FITS 3.0 standard paper} for a nice introduction and history along with the full standard. @cindex Meta-data Other formats, for example a JPEG image, only have one image/dataset per file, however one great advantage of the FITS standard is that it allows you to keep multiple datasets (images or tables along with their meta-data) in one file. Each data + metadata is known as an extension, or more formally a header data unit or HDU, in the FITS standard. In theory the HDUs can be completely independent: you can have multiple images of different dimensions/sizes or tables as separate extensions in one file. However, while the standard doesn't impose any constraints on the relation between the datasets, it is strongly encouraged to group data that are contextually related with each other in one file. For example an image and the table/catalog of objects and their measured properties in that image. Another example can be multiple images of one patch of sky in different colors (filters). As discussed above, the extensions in a FITS file can be completely independent. To keep some information (meta-data) about the group of extensions in the FITS file, the community has adopted the following convention: put no data in the first extension, so it is just meta-data. This extension can thus be used to store Meta-data regarding the whole file (grouping of extensions). Subsequent extensions may contain data along with their own separate meta-data. All of Gnuastro's programs also follow this convention: the main dataset (image or table) is in the second extension. See the example list of extension properties in @ref{Invoking astfits}. The meta-data contain information about the data, for example which region of the sky an image corresponds to, the units of the data, what telescope, camera, and filter the data were taken with, the software that produced it, or it observation or processing date. Hence without the meta-data, the raw dataset is practically just a collection of numbers and really hard to understand, or connect with the real world (other datasets). It is thus strongly encouraged to supplement your data (at any level of processing) with as much meta-data about your processing/science as possible. The meta-data of a FITS file is in ASCII format, which can be easily viewed or edited with a text editor or on the command-line. Each meta-data element (known as a keyword generally) is composed of a name, value, units and comments (the last two are optional). For example below you can see three FITS meta-data keywords for specifying the world coordinate system (WCS, or its location in the sky) of a dataset: @example LATPOLE = -27.805089 / [deg] Native latitude of celestial pole RADESYS = 'FK5' / Equatorial coordinate system EQUINOX = 2000.0 / [yr] Equinox of equatorial coordinates @end example However, there are some limitations which discourage viewing/editing the keywords with text editors. For example there is a fixed length of 80 characters for each keyword (its name, value, units and comments) and there are no new-line characters, so on a text editor all the keywords are seen in one line. Also, the meta-data keywords are immediately followed by the data which are commonly in binary format and will show up as strange looking characters on a text editor, and significantly slowing down the processor. Gnuastro's Fits program was designed to allow easy manipulation of FITS extensions and meta-data keywords on the command-line while conforming fully with the FITS standard. For example you can copy or cut (copy and remove) HDUs/extensions from one FITS file to another, or completely delete them. It also has features to delete, add, or edit meta-data keywords within one HDU. @menu * Invoking astfits:: Arguments and options to Header. @end menu @node Invoking astfits, , Fits, Fits @subsection Invoking Fits Fits can print or manipulate the FITS file HDUs (extensions), meta-data keywords in a given HDU. The executable name is @file{astfits} with the following general template @example $ astfits [OPTION...] ASTRdata @end example @noindent One line examples: @example ## View general information about every extension: $ astfits image.fits ## Print the header keywords in the second HDU (counting from 0): $ astfits image.fits -h1 ## Only print header keywords that contain `NAXIS': $ astfits image.fits -h1 | grep NAXIS ## Only print the WCS standard PC matrix elements $ astfits image.fits -h1 | grep 'PC._.' ## Copy a HDU from input.fits to out.fits: $ astfits input.fits --copy=hdu-name --output=out.fits ## Update the OLDKEY keyword value to 153.034: $ astfits --update=OLDKEY,153.034,"Old keyword comment" ## Delete one COMMENT keyword and add a new one: $ astfits --delete=COMMENT --comment="Anything you like ;-)." ## Write two new keywords with different values and comments: $ astfits --write=MYKEY1,20.00,"An example keyword" --write=MYKEY2,fd @end example @cindex HDU When no action is requested (and only a file name is given), Fits will print a list of information about the extension(s) in the file. This information includes the HDU number, HDU name (@code{EXTNAME} keyword), type of data (see @ref{Numeric data types}, and the number of data elements it contains (size along each dimension for images and table rows and columns). You can use this to get a general idea of the contents of the FITS file and what HDU to use for further processing, either with the Fits program or any other Gnuastro program. Here is one example of information about a FITS file with four extensions: the first extension has no data, it is a purely meta-data HDU (commonly used to keep meta-data about the whole file, or grouping of extensions, see @ref{Fits}). The second extension is an image with name @code{IMAGE} and single precision floating point type (@code{float32}, see @ref{Numeric data types}), it has 4287 pixels along its first (horizontal) axis and 4286 pixels along its second (vertical) axis. The third extension is also an image with name @code{MASK}. It is in 2-byte integer format (@code{int16}) which is commonly used to keep information about pixels (for example to identify which ones were saturated, or which ones had cosmic rays and so on), note how it has the same size as the @code{IMAGE} extension. The third extension is a binary table called @code{CATALOG} which has 12371 rows and 5 columns (it probably contains information about the sources in the image). @example GNU Astronomy Utilities X.X Run on Day Month DD HH:MM:SS YYYY ----- HDU (extension) information: `image.fits'. Column 1: Index (counting from 0). Column 2: Name (`EXTNAME' in FITS standard). Column 3: Image data type or `table' format (ASCII or binary). Column 4: Size of data in HDU. ----- 0 n/a uint8 0 1 IMAGE float32 4287x4286 2 MASK int16 4287x4286 3 CATALOG table_binary 12371x5 @end example If a specific HDU is identified on the command-line with the @option{--hdu} (or @option{-h} option) and no operation requested, then the full list of header keywords in that HDU will be printed (as if the @option{--printallkeys} was called, see below). It is important to remember that this only occurs when @option{--hdu} is given on the command-line. The @option{--hdu} value given in a configuration file will only be used when a specific operation on keywords requested. Therefore as described in the paragraphs above, when no explicit call to the @option{--hdu} option is made on the command-line and no operation is requested (on the command-line or configuration files), the basic information of each HDU/extension is printed. The operating mode and input/output options to Fits are similar to the other programs and fully described in @ref{Common options}. The options particular to Fits can be divided into two groups: 1) those related to modifying HDUs or extensions (see @ref{HDU manipulation}), and 2) those related to viewing/modifying meta-data keywords (see @ref{Keyword manipulation}). These two classes of options cannot be called together in one run: you can either work on the extensions or meta-data keywords in any instance of Fits. @menu * HDU manipulation:: Manipulate HDUs within a FITS file. * Keyword manipulation:: Manipulate metadata keywords in a HDU @end menu @node HDU manipulation, Keyword manipulation, Invoking astfits, Invoking astfits @subsubsection HDU manipulation Each header data unit, or HDU (also known as an extension), in a FITS file is an independent dataset (data + meta-data). Multiple HDUs can be stored in one FITS file, see @ref{Fits}. The HDU modifying options to the Fits program are listed below. These options may be called multiple times in one run. If so, the extensions will be copied from the input FITS file to the output FITS file in the given order (on the command-line and also in configuration files, see @ref{Configuration file precedence}). If the separate classes are called together in one run of Fits, then first @option{--copy} is run (on all specified HDUs), followed by @option{--cut} (again on all specified HDUs), and then @option{--remove} (on all specified HDUs). The @option{--copy} and @option{--cut} options need an output FITS file (specified with the @option{--output} option). If the output file exists, then the specified HDU will be copied following the last extension of the output file (the existing HDUs in it will be untouched). Thus, after Fits finishes, the copied HDU will be the last HDU of the output file. If no output file name is given, then automatic output will be used to store the HDUs given to this option (see @ref{Automatic output}). @table @option @item -C STR @itemx --copy=STR Copy the specified extension into the output file, see explanations above. @item -k STR @itemx --cut=STR Cut (copy to output, remove from input) the specified extension into the output file, see explanations above. @item -R STR @itemx --remove=STR Remove the specified HDU from the input file. From CFITSIO: ``In the case of deleting the primary array (the first HDU in the file) then [it] will be replaced by a null primary array containing the minimum set of required keywords and no data.''. So in practice, any existing data (array) and meta-data in the first extension will be removed, but the number of extensions in the file won't change. This is because of the unique position the first FITS extension has in the FITS standard (for example it cannot be used to store tables). @end table @node Keyword manipulation, , HDU manipulation, Invoking astfits @subsubsection Keyword manipulation The meta-data in each header data unit, or HDU (also known as extension, see @ref{Fits}) is stored as ``keyword''s. Each keyword consists of a name, value, unit, and comments. The Fits program (see @ref{Fits}) options related to viewing and manipulating keywords in a FITS HDU are described below. To see the full list of keywords in a FITS HDU, you can use the @option{--printallkeys} option. If any of the keywords are to be modified, the headers of the input file will be changed. If you want to keep the original FITS file or HDU, it is easiest to create a copy first and then run Fits on that. In the FITS standard, keywords are always uppercase. So case does not matter in the input or output keyword names you specify. Most of the options can accept multiple instances in one command. For example you can add multiple keywords to delete by calling @option{--delete} multiple times, since repeated keywords are allowed, you can even delete the same keyword multiple times. The action of such options will start from the top most keyword. The precedence of operations are described below. Note that while the order within each class of actions is preserved, the order of individual actions is not. So irrespective of what order you called @option{--delete} and @option{--update}. First, all the delete operations are going to take effect then the update operations. @enumerate @item @option{--delete} @item @option{--rename} @item @option{--update} @item @option{--write} @item @option{--asis} @item @option{--history} @item @option{--comment} @item @option{--date} @item @option{--printallkeys} @end enumerate @noindent All possible syntax errors will be reported before the keywords are actually written. FITS errors during any of these actions will be reported, but Fits won't stop until all the operations are complete. If @option{--quitonerror} is called, then Fits will immediately stop upon the first error. @cindex GNU Grep If you want to inspect only a certain set of header keywords, it is easiest to pipe the output of the Fits program to GNU Grep. Grep is a very powerful and advanced tool to search strings which is precisely made for such situations. For example if you only want to check the size of an image FITS HDU, you can run: @example $ astfits input.fits | grep NAXIS @end example @cartouche @noindent @strong{FITS STANDARD KEYWORDS:} Some header keywords are necessary for later operations on a FITS file, for example BITPIX or NAXIS, see the FITS standard for their full list. If you modify (for example remove or rename) such keywords, the FITS file extension might not be usable any more. Also be careful for the world coordinate system keywords, if you modify or change their values, any future world coordinate system (like RA and Dec) measurements on the image will also change. @end cartouche @noindent The keyword related options to the Fits program are fully described below. @table @option @item -a STR @itemx --asis=STR Write @option{STR} exactly into the FITS file header with no modifications. If it does not conform to the FITS standards, then it might cause trouble, so please be very careful with this option. If you want to define the keyword from scratch, it is best to use the @option{--write} option (see below) and let CFITSIO worry about the standards. The best way to use this option is when you want to add a keyword from one FITS file to another unchanged and untouched. Below is an example of such a case that can be very useful sometimes (on the command-line or in scripts): @example $ key=$(astfits firstimage.fits | grep KEYWORD) $ astfits --asis="$key" secondimage.fits @end example @cindex GNU Bash In particular note the double quotation signs (@key{"}) around the reference to the @command{key} shell variable (@command{$key}), since FITS keywords usually have lots of space characters, if this variable is not quoted, the shell will only give the first word in the full keyword to this option, which will definitely be a non-standard FITS keyword and will make it hard to work on the file afterwords. See the ``Quoting'' section of the GNU Bash manual for more information if your keyword has the special characters @key{$}, @key{`}, or @key{\}. @item -d STR @itemx --delete=STR Delete one instance of the @option{STR} keyword from the FITS header. Multiple instances of @option{--delete} can be given (possibly even for the same keyword, when its repeated in the meta-data). All keywords given will be removed from the headers in the same given order. If the keyword doesn't exist, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @item -r STR @itemx --rename=STR Rename a keyword to a new value. @option{STR} contains both the existing and new names, which should be separated by either a comma (@key{,}) or a space character. Note that if you use a space character, you have to put the value to this option within double quotation marks (@key{"}) so the space character is not interpreted as an option separator. Multiple instances of @option{--rename} can be given in one command. The keywords will be renamed in the specified order. If the keyword doesn't exist, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @item -u STR @itemx --update=STR Update a keyword, its value, its comments and its units in the format described below. If there are multiple instances of the keyword in the header, they will be changed from top to bottom (with multiple @option{--update} options). @noindent The format of the values to this option can best be specified with an example: @example --update=KEYWORD,value,"comments for this keyword",unit @end example If there is a writing error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @noindent The value can be any numerical or string value@footnote{Some tricky situations arise with values like `@command{87095e5}', if this was intended to be a number it will be kept in the header as @code{8709500000} and there is no problem. But this can also be a shortened Git commit hash. In the latter case, it should be treated as a string and stored as it is written. Commit hashes are very important in keeping the history of a file during your research and such values might arise without you noticing them in your reproduction pipeline. One solution is to use @command{git describe} instead of the short hash alone. A less recommended solution is to add a space after the commit hash and Fits will write the value as `@command{87095e5 }' in the header. If you later compare the strings on the shell, the space character will be ignored by the shell in the latter solution and there will be no problem.}. Other than the @code{KEYWORD}, all the other values are optional. To leave a given token empty, follow the preceding comma (@key{,}) immediately with the next. If any space character is present around the commas, it will be considered part of the respective token. So if more than one token has space characters within it, the safest method to specify a value to this option is to put double quotation marks around each individual token that needs it. Note that without double quotation marks, space characters will be seen as option separators and can lead to undefined behavior. @item -w STR @itemx --write=STR Write a keyword to the header. For the possible value input formats, comments and units for the keyword, see the @option{--update} option above. @item -H STR @itemx --history STR Add a @code{HISTORY} keyword to the header. The string given to this keyword will be separated into multiple keyword cards if it is longer than 70 characters. With each run only one value for the @option{--history} option will be read. If there are multiple, it is the last one. If there is an error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @item -c STR @itemx --comment STR Add a @code{COMMENT} keyword to the header. Similar to the explanation for @option{--history} above. If there is a writing error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @item -t @itemx --date Put the current date and time in the header. If the @code{DATE} keyword already exists in the header, it will be updated. If there is a writing error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @item -p @itemx --printall Print all the keywords in the specified FITS extension (HDU) on the command-line. @item -Q @itemx --quitonerror Quit if any of the operations above are not successful. By default if an error occurs, Fits will warn the user of the faulty keyword and continue with the rest of actions. @end table @node ConvertType, Table, Fits, Data containers @section ConvertType @cindex Data format conversion @cindex Converting data formats @cindex Image format conversion @cindex Converting image formats @pindex @r{ConvertType (}astconvertt@r{)} The formats of astronomical data were defined mainly for archiving and processing. In other situations, the data might be useful in other formats. For example, when you are writing a paper or report or if you are making slides for a talk, you can't use a FITS image. Other image formats should be used. In other cases you might want your pixel values in a table format as plain text for input to other programs that don't recognize FITS, or to include as a table in your report. ConvertType is created for such situations. The various types will increase with future updates and based on need. The conversion is not only one way (from FITS to other formats), but two ways (except the EPS and PDF formats). So you can convert a JPEG image or text file into a FITS image. Basically, other than EPS, you can use any of the recognized formats as different color channel inputs to get any of the recognized outputs. So before explaining the options and arguments, first a short description of the recognized files types will be given followed a short introduction to digital color. @menu * Recognized file formats:: Recognized file formats * Color:: Some explanations on color. * Invoking astconvertt:: Options and arguments to ConvertType. @end menu @node Recognized file formats, Color, ConvertType, ConvertType @subsection Recognized file formats The various standards and the file name extensions recognized by ConvertType are listed below. @table @asis @item FITS or IMH @cindex Astronomical data format Astronomical data are commonly stored in the FITS format (and in older data sets in IRAF @file{.imh} format), a list of file name suffixes which indicate that the file is in this format is given in @ref{Arguments}. Each extension of a FITS image only has one value per pixel, so when used as input, each input FITS image contributes as one color channel. If you want multiple extensions in one FITS file for different color channels, you have to repeat the file name multiple times and use the @option{--hdu}, @option{--hdu2}, @option{--hdu3} or @option{--hdu4} options to specify the different extensions. @item JPEG @cindex JPEG format @cindex Raster graphics @cindex Pixelated graphics The JPEG standard was created by the Joint photographic experts group. It is currently one of the most commonly used image formats. Its major advantage is the compression algorithm that is defined by the standard. Like the FITS standard, this is a raster graphics format, which means that it is pixelated. A JPEG file can have 1 (for gray-scale), 3 (for RGB) and 4 (for CMYK) color channels. If you only want to convert one JPEG image into other formats, there is no problem, however, if you want to use it in combination with other input files, make sure that the final number of color channels does not exceed four. If it does, then ConvertType will abort and notify you. @cindex Suffixes, JPEG images The file name endings that are recognized as a JPEG file for input are: @file{.jpg}, @file{.JPG}, @file{.jpeg}, @file{.JPEG}, @file{.jpe}, @file{.jif}, @file{.jfif} and @file{.jfi}. @item EPS @cindex EPS @cindex PostScript @cindex Vector graphics @cindex Encapsulated PostScript The Encapsulated PostScript (EPS) format is essentially a one page PostScript file which has a specified size. PostScript also includes non-image data, for example lines and texts. It is a fully functional programming language to describe a document. Therefore in ConvertType, EPS is only an output format and cannot be used as input. Contrary to the FITS or JPEG formats, PostScript is not a raster format, but is categorized as vector graphics. @cindex PDF @cindex Adobe systems @cindex PostScript vs. PDF @cindex Compiled PostScript @cindex Portable Document format @cindex Static document description format The Portable Document Format (PDF) is currently the most common format for documents. Some believe that PDF has replaced PostScript and that PostScript is now obsolete. This view is wrong, a PostScript file is an actual plain text file that can be edited like any program source with any text editor. To be able to display its programmed content or print, it needs to pass through a processor or compiler. A PDF file can be thought of as the processed output of the compiler on an input PostScript file. PostScript, EPS and PDF were created and are registered by Adobe Systems. @cindex @TeX{} @cindex @LaTeX{} With these features in mind, you can see that when you are compiling a document with @TeX{} or @LaTeX{}, using an EPS file is much more low level than a JPEG and thus you have much greater control and therefore quality. Since it also includes vector graphic lines we also use such lines to make a thin border around the image to make its appearance in the document much better. No matter the resolution of the display or printer, these lines will always be clear and not pixelated. In the future, addition of text might be included (for example labels or object IDs) on the EPS output. However, this can be done better with tools within @TeX{} or @LaTeX{} such as PGF/Tikz@footnote{@url{http://sourceforge.net/projects/pgf/}}. @cindex Binary image @cindex Saving binary image @cindex Black and white image If the final input image (possibly after all operations on the flux explained below) is a binary image or only has two colors of black and white (in segmentation maps for example), then PostScript has another great advantage compared to other formats. It allows for 1 bit pixels (pixels with a value of 0 or 1), this can decrease the output file size by 8 times. So if a gray-scale image is binary, ConvertType will exploit this property in the EPS and PDF (see below) outputs. @cindex Suffixes, EPS format The standard formats for an EPS file are @file{.eps}, @file{.EPS}, @file{.epsf} and @file{.epsi}. The EPS outputs of ConvertType have the @file{.eps} suffix. @item PDF @cindex Suffixes, PDF format @cindex GPL Ghostscript As explained above, a PDF document is a static document description format, viewing its result is therefore much faster and more efficient than PostScript. To create a PDF output, ConvertType will make a PostScript page description and convert that to PDF using GPL Ghostscript. The suffixes recognized for a PDF file are: @file{.pdf}, @file{.PDF}. If GPL Ghostscript cannot be run on the PostScript file, it will remain and a warning will be printed. @item @option{blank} @cindex @file{blank} color channel This is not actually a file type! But can be used to fill one color channel with a blank value. If this argument is given for any color channel, that channel will not be used in the output. @item Plain text @cindex Plain text @cindex Suffixes, plain text Plain text files have the advantage that they can be viewed with any text editor or on the command-line. Most programs also support input as plain text files. As input, each plain text file is considered to contain one color channel. In ConvertType, the recognized extensions for plain text files are @file{.txt} and @file{.dat}. As described in @ref{Invoking astconvertt}, if you just give these extensions, (and not a full filename) as output, then automatic output will be preformed to determine the final output name (see @ref{Automatic output}). Besides these, when the format of a file cannot be recognized from its name, ConvertType will fall back to plain text mode. So you can use any name (even without an extension) for a plain text input or output. Just note that when the suffix is not recognized, automatic output will not be preformed. The basic input/output on plain text images is very similar to how tables are read/written as described in @ref{Gnuastro text table format}. Simply put, the restrictions are very loose, and there is a convention to define a name, units, data type (see @ref{Numeric data types}), and comments for the data in a commented line. The only difference is that as a table, a text file can contain many datasets (columns), but as a 2D image, it can only contain one dataset. As a result, only one information comment line is necessary for a 2D image, and instead of the starting `@code{# Column N}' (@code{N} is the column number), the information line for a 2D image must start with `@code{# Image 1}'. When ConvertType is asked to output to plain text file, this information comment line is written before the image pixel values. When converting an image to plain text, consider the fact that if the image is large, the number of columns in each line will become very large, possibly making it very hard to open in some text editors. @item Standard output (command-line) This is very similar to the plain text output, but instead of creating a file to keep the printed values, they are printed on the command line. This can be very useful when you want to redirect the results directly to another program in one command with no intermediate file. The only difference is that only the pixel values are printed (with no information comment line). To print to the standard output, set the output name to `@file{stdout}'. @end table @node Color, Invoking astconvertt, Recognized file formats, ConvertType @subsection Color @cindex RGB @cindex CMYK @cindex Image @cindex Pixels @cindex Grayscale @cindex Colorspace @cindex Primary colors @cindex Colorspace, gray-scale An image is a two dimensional array of 2 dimensional elements called pixels. If each pixel only has one value, the image is known as a gray-scale image and no color is defined. The range of values in the image can be interpreted as shades of any color, it is customary to use shades of black or gray-scale. However, to produce the color spectrum in the digital world, several primary colors must be mixed. Therefore in a color image, each pixel has several values depending on how many primary colors were chosen. For example on the digital monitor or color digital cameras, all colors are built by mixing the three colors of Red-Green-Blue (RGB) with various proportions. However, for printing on paper, standard printers use the Cyan-Magenta-Yellow-Key (CMYK, Key=black) color space. Therefore when printing an RGB image, usually a transformation of color spaces will be necessary. In a colored digital camera, a color image is produced by dividing the pixel's area between three colors (filters). However in astronomy due to the intrinsic faintness of most of the targets, the collecting area of the pixel is very important for us. Hence the full area of the pixel is used and one value is stored for that pixel in the end. One color filter is used for the whole image. Thus a FITS image is inherently a gray-scale image and no color can be defined for it. @cindex Colorspace, transformation One way to represent a gray-scale image in different color spaces is to use the same proportions of the primary colors in each pixel. This is the common way most FITS image converters work: they fill all the channels with the same values. The downside is two fold: @itemize @item Three (for RGB) or four (for CMYK) values have to be stored for every pixel, this makes the output file very heavy (in terms of bytes). @item If printing, the printing errors of each color channel can make the printed image slightly more blurred than it actually is. @end itemize @cindex PNG standard @cindex Single channel CMYK To solve both these problems, the best way is to save the FITS image into the black channel of the CMYK color space. In the RGB color space all three channels have to be used. The JPEG standard is the only common standard that accepts CMYK color space, that is why currently only the JPEG standard is included and not the PNG standard for example. The JPEG and EPS standards set two sizes for the number of bits in each channel: 8-bit and 12-bit. The former is by far the most common and is what is used in ConvertType. Therefore, each channel should have values between 0 to @math{2^8-1=255}. From this we see how each pixel in a gray-scale image is one byte (8 bits) long, in an RGB image, it is 3bytes long and in CMYK it is 4bytes long. But thanks to the JPEG compression algorithms, when all the pixels of one channel have the same value, that channel is compressed to one pixel. Therefore a Grayscale image and a CMYK image that has only the K-channel filled are approximately the same file size. @node Invoking astconvertt, , Color, ConvertType @subsection Invoking ConvertType ConvertType will convert any recognized input file type to any specified output type. The executable name is @file{astconvertt} with the following general template @example $ astconvertt [OPTION...] InputFile [InputFile2] ... [InputFile4] @end example @noindent One line examples: @example ## Convert an image in FITS to PDF: $ astconvertt image.fits --output=pdf ## Convert an image in JPEG to FITS: $ astconvertt image.jpg -ogalaxy.fits ## Use three plain text 2D arrays to create an RGB JPEG output: $ astconvertt f1.txt f2.txt f3.fits -o.jpg ## Use two images and one blank for an RGB EPS output: $ astconvertt M31_r.fits M31_g.fits blank -oeps @end example @noindent The file type of the output will be specified with the (possibly complete) file name given to the @option{--output} option, which can either be given on the command-line or in any of the configuration files (see @ref{Configuration files}). Note that if the output suffix is not recognized, it will default to plain text format, see @ref{Recognized file formats}. The order of multiple input files is important. After reading the input file(s) the number of color channels in all the inputs will be used to define which color space is being used for the outputs and how each color channel is interpreted. Note that one file might have more than one color channel (for example in the JPEG format). If there is one color channel the output is gray-scale, if three input color channels are given they are respectively considered to be the red, green and blue color channels and if there are four color channels they are respectively considered to be cyan, magenta, yellow and black. The value to @option{--output} (or @option{-o}) can be either a full file name or just the suffix of the desired output format. In the former case, that same name will be used for the output. In the latter case, the name of the output file will be set based on the automatic output guidelines, see @ref{Automatic output}. Note that the suffix name can optionally start a @file{.} (dot), so for example @option{--output=.jpg} and @option{--output=jpg} are equivalent. See @ref{Recognized file formats} Besides the common set of options explained in @ref{Common options}, the options to ConvertType can be classified into input, output and flux related options. The majority of the options are to do with the flux range. Astronomical data usually have a very large dynamic range (difference between maximum and minimum value) and different subjects might be better demonstrated with a limited flux range. @noindent Input: @table @option @item -h STR/INT @itemx --hdu=STR/INT In ConvertType, it is possible to call the HDU option multiple times for the different input FITS files (corresponding to different color channels) in the same order that they are called on the command-line. Except for the fact that multiple calls are possible, this option is identical to the common @option{--hdu} in @ref{Input output options}. The number of calls to this option cannot be less than the number of input FITS files, but if there are more, the extra HDUs will be ignored, note that they will be read in the order described in @ref{Configuration file precedence}. @end table @noindent Output: @table @option @item -w FLT @itemx --widthincm=FLT The width of the output in centimeters. This is only relevant for those formats that accept such a width (not plain text for example). For most digital purposes, the number of pixels is far more important than the value to this parameter because you can adjust the absolute width (in inches or centimeters) in your document preparation program. @item -b INT @itemx --borderwidth=INT @cindex Border on an image The width of the border to be put around the EPS and PDF outputs in units of PostScript points. There are 72 or 28.35 PostScript points in an inch or centimeter respectively. In other words, there are roughly 3 PostScript points in every millimeter. If you are planning on adding a border, its significance is highly correlated with the value you give to the @option{--widthincm} parameter. Unfortunately in the document structuring convention of the PostScript language, the ``bounding box'' has to be in units of PostScript points with no fractions allowed. So the border values only have to be specified in integers. To have a final border that is thinner than one PostScript point in your document, you can ask for a larger width in ConvertType and then scale down the output EPS or PDF file in your document preparation program. For example by setting @command{width} in your @command{includegraphics} command in @TeX{} or @LaTeX{}. Since it is vector graphics, the changes of size have no effect on the quality of your output quality (pixels don't get different values). @item -x @itemx --hex @cindex ASCII85 encoding @cindex Hexadecimal encoding Use Hexadecimal encoding in creating EPS output. By default the ASCII85 encoding is used which provides a much better compression ratio. When converted to PDF (or included in @TeX{} or @LaTeX{} which is finally saved as a PDF file), an efficient binary encoding is used which is far more efficient than both of them. The choice of EPS encoding will thus have no effect on the final PDF. So if you want to transfer your EPS files (for example if you want to submit your paper to arXiv or journals in PostScript), their storage might become important if you have large images or lots of small ones. By default ASCII85 encoding is used which offers a much better compression ratio (nearly 40 percent) compared to Hexadecimal encoding. @item -u INT @itemx --quality=INT @cindex JPEG compression quality @cindex Compression quality in JPEG @cindex Quality of compression in JPEG The quality (compression) of the output JPEG file with values from 0 to 100 (inclusive). For other formats the value to this option is ignored. Note that only in gray-scale (when one input color channel is given) will this actually be the exact quality (each pixel will correspond to one input value). If it is in color mode, some degradation will occur. While the JPEG standard does support loss-less graphics, it is not commonly supported. @end table @noindent Flux range: @table @option @item -c STR @itemx --chang=STR @cindex Change converted pixel values (@option{=STR}) Change pixel values with the following format @option{"from1:to1, from2:to2,..."}. This option is very useful in displaying labeled pixels (not actual data images which have noise) like segmentation maps. In labeled images, usually a group of pixels have a fixed integer value. With this option, you can manipulate the labels before the image is displayed to get a better output for print or to emphasize on a particular set of labels and ignore the rest. The labels in the images will be changed in the same order given. By default first the pixel values will be converted then the pixel values will be truncated (see @option{--fluxlow} and @option{--fluxhigh}). You can use any number for the values irrespective of your final output, your given values are stored and used in the double precision floating point format. So for example if your input image has labels from 1 to 20000 and you only want to display those with labels 957 and 11342 then you can run ConvertType with these options: @example $ astconvertt --change=957:50000,11342:50001 --fluxlow=5e4 \ --fluxhigh=1e5 segmentationmap.fits --output=jpg @end example @noindent While the output JPEG format is only 8 bit, this operation is done in an intermediate step which is stored in double precision floating point. The pixel values are converted to 8-bit after all operations on the input fluxes have been complete. By placing the value in double quotes you can use as many spaces as you like for better readability. @item -C @itemx --changeaftertrunc Change pixel values (with @option{--change}) after truncation of the flux values, by default it is the opposite. @item -L FLT @itemx --fluxlow=FLT The minimum flux (pixel value) to display in the output image, any pixel value below this value will be set to this value in the output. If the value to this option is the same as @option{--fluxmax}, then no flux truncation will be applied. Note that when multiple channels are given, this value is used for all the color channels. @item -H FLT @itemx --fluxhigh=FLT The maximum flux (pixel value) to display in the output image, see @option{--fluxlow}. @item -m INT @itemx --maxbyte=INT This is only used for the JPEG and EPS output formats which have an 8-bit space for each channel of each pixel. The maximum value in each pixel can therefore be @mymath{2^8-1=255}. With this option you can change (decrease) the maximum value. By doing so you will decrease the dynamic range. It can be useful if you plan to use those values for other purposes. @item -A INT @itemx --flminbyte=INT If the lowest pixel value in the input channels is larger than the value to @option{--fluxlow}, then that input value will be redundant. In some situations it might be necessary to set the minimum byte value (0) to correspond to that flux even if the data do not reach that value. With this option you can do this. Note that if the minimum pixel value is smaller than @option{--fluxlow}, then this option is redundant. @item -B INT @itemx --fhmaxbyte=INT See @option{--flminbyte}. @item -i @itemx --invert For 8-bit output types (JPEG, EPS, and PDF for example) the final value that is stored is inverted so white becomes black and vice versa. The reason for this is that astronomical images usually have a very large area of blank sky in them. The result will be that a large are of the image will be black. Note that this behavior is ideal for gray-scale images, if you want a color image, the colors are going to be mixed up. @end table @node Table, , ConvertType, Data containers @section Table Tables are the products of processing astronomical images and spectra. For example in Gnuastro, MakeCatalog will process the defined pixels over an object and produce a catalog (see @ref{MakeCatalog}). For each identified object, MakeCatalog can print its position on the image or sky, its total brightness and many other information that is deducible from the given image. Each one of these properties is a column in its output catalog (or table) and for each input object, we have a row. When there are only a small number of objects (rows) and not too many properties (columns), then a simple plain text file is mainly enough to store, transfer, or even use the produced data. However, to be more efficient in all these aspects, astronomers have defined the FITS binary table standard to store data in a binary (0 and 1) format, not plain text. This can offer major advantages in all those aspects: the file size will be greatly reduced and the reading and writing will be faster (because the RAM and CPU also work in binary). The FITS standard also defines a standard for ASCII tables, where the data are stored in the human readable ASCII format, but within the FITS file structure. These are mainly useful for keeping ASCII data along with images and possibly binary data as multiple (conceptually related) extensions within a FITS file. The acceptable table formats are fully described in @ref{Tables}. @cindex AWK @cindex GNU AWK Binary tables are not easily readable by human eyes. There is no fixed/unified standard on how the zero and ones should be interpreted. The Unix-like operating systems have flourished because of a simple fact: communication between the various tools is based on human readable characters@footnote{In ``The art of Unix programming'', Eric Raymond makes this suggestion to programmers: ``When you feel the urge to design a complex binary file format, or a complex binary application protocol, it is generally wise to lie down until the feeling passes.''. This is a great book and strongly recommended, give it a look if you want to truly enjoy your work/life in this environment.}. So while the FITS table standards are very beneficial for the tools that recognize them, they are hard to use in the vast majority of available software. This creates limitations for their generic use. `Table' is Gnuastro's solution to this problem. With Table, FITS tables (ASCII or binary) are directly accessible to the Unix-like operating systems power-users (those working the command-line or shell, see @ref{Command-line interface}). With Table, a FITS table (in binary or ASCII formats) is only one command away from AWK (or any other tool you want to use). Just like a plain text file that you read with the @command{cat} command. You can pipe the output of Table into any other tool for higher-level processing, see the examples in @ref{Invoking asttable} for some simple examples. @menu * Invoking asttable:: Options and arguments to Table. @end menu @node Invoking asttable, , Table, Table @subsection Invoking Table Table will read/write, select, convert, or show the information of the columns in FITS ASCII table, FITS binary table and plain text table files, see @ref{Tables}. Output columns can also be determined by number or regular expression matching of column names, units, or comments. The executable name is @file{asttable} with the following general template @example $ asttable [OPTION...] InputFile @end example @noindent One line examples: @example ## Get the table column information (name, data type, or units): $ asttable bintab.fits --information ## Only print those columns which have a name starting with "MAG_": $ asttable bintab.fits --column=/^MAG_/ ## Only print the 2nd column, and the third column multiplied by 5: $ asttable bintab.fits | awk '@{print $2, 5*$3@}' ## Only print rows with a value in the 10th column above 100000: $ asttable bintab.fits | awk '$10>10e5 @{print@}' ## Sort the output columns by the third column, save output: $ asttable bintab.fits | 'sort -k3 > output.txt ## Convert a plain text table to a binary FITS table: $ asttable plaintext.txt --output=table.fits --tabletype=fits-binary @end example @cindex GNU AWK In the absence of selected columns, all the input file's columns will be output. If the specified output is a FITS file, the type of FITS table (binary or ASCII) will be determined from the @option{--tabletype} option. If the output is not a FITS file, it will be printed as a plain text table (with space characters between the columns). When the columns are accompanied by meta-data (like column name, units, or comments), this information will also printed in the plain text file before the table, as described in @ref{Gnuastro text table format}. For the full list of options common to all Gnuastro programs please see @ref{Common options}. Options can also be stored in directory, user or system-wide configuration files to avoid repeating on the command-line, see @ref{Configuration files}. Table does not follow Automatic output that is common in most Gnuastro programs, see @ref{Automatic output}. Thus, in the absence of an output file, the selected columns will be printed on the command-line with no column information, ready for redirecting to other tools like AWK or sort, similar to the examples above. @table @option @item -i @itemx --information Only print the column information in the specified table on the command-line and exit. Each column's information (number, name, units, data type, and comments) will be printed as a row on the command-line. Note that the FITS standard only requires the data type (see @ref{Numeric data types}), and in plain text tables, no meta-data/information is mandatory. Gnuastro has its own convention in the comments of a plain text table to store and transfer this information as described in @ref{Gnuastro text table format}. This option will take precedence over the @option{--column} option, so when it is called along with requested columns, the latter will be ignored. This can be useful if you forget the identifier of a column after you have already typed some on the command-line. You can simply add a @option{-i} and run Table to see the whole list and remember. Then you can use the shell history (with the up arrow key on the keyboard), and retrieve the last command with all the previously typed columns present, delete @option{-i} and add the identifier you had forgot. @cindex AWK @cindex GNU AWK @item -c STR/INT @itemx --column=STR/INT Specify the columns to output, see @ref{Selecting table columns} for a thorough explanation on how the value to this option is interpreted. To select several output columns, this option can also be called any number times in one call to Table. The order of the output columns will be the same call order on the command-line. This option is not mandatory, if no specific columns are requested, all the input table columns are output. When this option is called multiple times, it is possible to output one column more than once. @end table @node Data manipulation, Data analysis, Data containers, Top @chapter Data manipulation Images are one of the major formats of data that is used in astronomy. The functions in this chapter explain the GNU Astronomy Utilities which are provided for their manipulation. For example cropping out a part of a larger image or convolving the image with a given kernel or applying a transformation to it. @menu * Crop:: Crop region(s) from a dataset. * Arithmetic:: Arithmetic on input data. * Convolve:: Convolve an image with a kernel. * Warp:: Warp/Transform an image to a different grid. @end menu @node Crop, Arithmetic, Data manipulation, Data manipulation @section Crop @cindex Section of an image @cindex Crop part of image @cindex Postage stamp images @cindex Large astronomical images @pindex @r{Crop (}astcrop@r{)} Astronomical images are often very large, filled with thousands of galaxies. It often happens that you only want a section of the image, or you have a catalog of sources and you want to visually analyze them in small postage stamps. Crop is made to do all these things. When more than one crop is required, Crop will divide the crops between multiple threads to significantly reduce the run time. @cindex Mosaicing @cindex Image tiles @cindex Image mosaic @cindex COSMOS survey @cindex Imaging surveys @cindex Hubble Space Telescope Astronomical surveys are usually extremely large. So large in fact, that the whole survey will not fit into a reasonably sized file. Because of this, surveys usually cut the final image into separate tiles and store each tile in a file. For example the COSMOS survey's Hubble space telescope, ACS F814W image consists of 81 separate FITS images, with each one having a volume of 1.7 Giga bytes. @cindex Stitch multiple images Even though the tile sizes are chosen to be large enough that too many galaxies/targets don't fall on the edges of the tiles, inevitably some do. So when you simply crop the image of such targets from one tile, you will miss a large area of the surrounding sky (which is essential in estimating the noise). Therefore in its WCS mode, Crop will stitch parts of the tiles that are relevant for a target (with the given width) from all the input images that cover that region into the output. Of course, the tiles have to be present in the list of input files. Besides cropping postage stamps around certain coordinates, Crop can also crop arbitrary polygons from an image (or a set of tiles by stitching the relevant parts of different tiles within the polygon), see @option{--polygon} in @ref{Invoking astcrop}. Alternatively, it can crop out rectangular regions through the @option{--section} option from one image, see @ref{Crop section syntax}. @menu * Crop modes:: Basic modes to define crop region. * Crop section syntax:: How to define a section to crop. * Blank pixels:: Pixels with no value. * Invoking astcrop:: Calling Crop on the command-line @end menu @node Crop modes, Crop section syntax, Crop, Crop @subsection Crop modes In order to be comprehensive, intuitive, and easy to use, there are two ways to define the crop: @enumerate @item From its center and side length. For example if you already know the coordinates of an object and want to inspect it in an image or to generate postage stamps of a catalog containing many such coordinates. @item The vertices of the crop region, this can be useful for larger crops over many targets, for example to crop out a uniformly deep, or contiguous, region of a large survey. @end enumerate Irrespective of how the crop region is defined, the coordinates to define the crop can be in Image (pixel) or World Coordinate System (WCS) standards. All coordinates are read as floating point numbers (not integers, except for the @option{--section} option, see below). By setting the @emph{mode} in Crop, you define the standard that the given coordinates must be interpretted. Here, the different ways to specify the crop region are discussed within each standard. For the full list options, please see @ref{Invoking astcrop}. When the crop is defined by its center, the respective (integer) central pixel position will be found internally according to the FITS standard. To have this pixel positioned in the center of the cropped region, the final cropped region will have an add number of pixels (even if you give an even number to @option{--width} in image mode). Furthermore, when the crop is defined as by its center, Crop allows you to only keep crops what don't have any blank pixels in the vicinity of their center (your primary target). This can be very convenient when your input catalog/coordinates originated from another survey/filter which is not fully covered by your input image, to learn more about this feature, please see the description of the @option{--checkcenter} option in @ref{Invoking astcrop}. @table @asis @item Image coordinates In image mode (@option{--mode=img}), Crop interprets the pixel coordinates and widths in units of the input data-elements (for example pixels in an image, not world coordinates). In image mode, only one image may be input. The output crop(s) can be defined in multiple ways as listed below. @table @asis @item Center of multiple crops (in a catalog) The center of (possibly multiple) crops are read from a text file. In this mode, the columns identified with the @option{--coordcol} option are interpreted as the center of a crop with a width of @option{--width} pixels along each dimension. The columns can contain any floating point value. The value to @option{--output} option is seen as a directory which will host (the possibly multiple) separate crop files, see @ref{Crop output} for more. For a tutorial using this feature, please see @ref{Hubble visually checks and classifies his catalog}. @item Center of a single crop (on the command-line) The center of the crop is given on the command-line with the @option{--center} option. The crop width is specified by the @option{--width} option along each dimension. The given coordinates and width can be any floating point number. @item Vertices of a single crop In Image mode there are two options to define the vertices of a region to crop: @option{--section} and @option{--polygon}. The former is lower-level (doesn't accept floating point vertices, and only a rectangular region can be defined), it is also only available in Image mode. Please see @ref{Crop section syntax} for a full description of this method. The latter option (@option{--polygon}) is a higher-level method to define any convex polygon (with any number of vertices) with floating point values. Please see the description of this option in @ref{Invoking astcrop} for its syntax. @end table @item WCS coordinates In WCS mode (@option{--mode=wcs}), the coordinates and widths are interpretted using the World Coordinate System (WCS, that must accompany the dataset), not pixel coordinates. In WCS mode, Crop accepts multiple datasets as input. When the cropped region (defined by its center or vertices) overlaps with multiple of the input images/tiles, the overlapping regions will be taken from the respective input (they will be stitched when necessary for each output crop). In this mode, the input images do not necessarily have to be the same size, they just need to have the same orientation and pixel resolution. Currently only orientation along the celestial coordinates is accepted, if your input has a different orientation you can use Warp's @option{--align} option to align the image before cropping it (see @ref{Warp}). Each individual input image/tile can even be smaller than the final crop. In any case, any part of any of the input images which overlaps with the desired region will be used in the crop. Note that if there is an overlap in the input images/tiles, the pixels from the last input image read are going to be used for the overlap. Crop will not change pixel values, so it assumes your overlapping tiles were cutout from the same original image. There are multiple ways to define your cropped region as listed below. @table @asis @item Center of multiple crops (in a catalog) Similar to catalog inputs in Image mode (above), except that the values along each dimension are assumed to have the same units as the dataset's WCS information. For example, the central RA and Dec value for each crop will be read from the first and second calls to the @option{--coordcol} option. The width of the cropped box (in units of the WCS, or degrees in RA and Dec mode) must be specified with the @option{--width} option. @item Center of a single crop (on the command-line) You can specify the center of only one crop box with the @option{--center} option. If it exists in the input images, it will be cropped similar to the catalog mode, see above also for @code{--width}. @item Vertices of a single crop The @option{--polygon} option is a high-level method to define any convex polygon (with any number of vertices). Please see the description of this option in @ref{Invoking astcrop} for its syntax. @end table @cartouche @noindent @strong{CAUTION:} In WCS mode, the image has to be aligned with the celestial coordinates, such that the first FITS axis is parallel (opposite direction) to the Right Ascension (RA) and the second FITS axis is parallel to the declination. If these conditions aren't met for an image, Crop will warn you and abort. You can use Warp's @option{--align} option to align the input image with these coordinates, see @ref{Warp}. @end cartouche @end table As a summary, if you don't specify a catalog, you have to define the cropped region manually on the command-line. In any case the mode is mandatory for Crop to be able to interpret the values given as coordinates or widths. @node Crop section syntax, Blank pixels, Crop modes, Crop @subsection Crop section syntax @cindex Crop a given section of image When in image mode, one of the methods to crop only one rectangular section from the input image is to use the @option{--section} option. Crop has a powerful syntax to read the box parameters from a string of characters. If you leave certain parts of the string to be empty, Crop can fill them for you based on the input image sizes. @cindex Define section to crop To define a box, you need the coordinates of two points: the first (@code{X1}, @code{Y1}) and the last pixel (@code{X2}, @code{Y2}) pixel positions in the image, or four integer numbers in total. The four coordinates can be specified with one string in this format: `@command{X1:X2,Y1:Y2}'. This string is given to the @option{--section} option. Therefore, the pixels along the first axis that are @mymath{\geq}@command{X1} and @mymath{\leq}@command{X2} will be included in the cropped image. The same goes for the second axis. Note that each different term will be read as an integer, not a float. This is a low-level option, for a higher-level way to specify region (any polygon, not just a box), please see the @option{--polygon} option in @ref{Crop options}. Also note that in the FITS standard, pixel indexes along each axis start from unity(1) not zero(0). @cindex Crop section format You can omit any of the values and they will be filled automatically. The left hand side of the colon (@command{:}) will be filled with @command{1}, and the right side with the image size. So, @command{2:,:} will include the full range of pixels along the second axis and only those with a first axis index larger than @command{2} in the first axis. If the colon is omitted for a dimension, then the full range is automatically used. So the same string is also equal to @command{2:,} or @command{2:} or even @command{2}. If you want such a case for the second axis, you should set it to: @command{,2}. If you specify a negative value, it will be seen as before the indexes of the image which are outside the image along the bottom or left sides when viewed in SAO ds9. In case you want to count from the top or right sides of the image, you can use an asterisk (@option{*}). When confronted with a @option{*}, Crop will replace it with the maximum length of the image in that dimension. So @command{*-10:*+10,*-20:*+20} will mean that the crop box will be @math{20\times40} pixels in size and only include the top corner of the input image with 3/4 of the image being covered by blank pixels, see @ref{Blank pixels}. If you feel more comfortable with space characters between the values, you can use as many space characters as you wish, just be careful to put your value in double quotes, for example @command{--section="5:200, 123:854"}. If you forget the quotes, anything after the first space will not be seen by @option{--section} and you will most probably get an error because the rest of your string will be read as a filename (which most probably doesn't exist). See @ref{Command-line} for a description of how the command-line works. @node Blank pixels, Invoking astcrop, Crop section syntax, Crop @subsection Blank pixels @cindex Blank pixel The cropped box can potentially include pixels that are beyond the image range. For example when a target in the input catalog was very near the edge of the input image. The parts of the cropped image that were not in the input image will be filled with the following two values depending on the data type of the image. In both cases, SAO ds9 will not color code those pixels. @itemize @item If the data type of the image is a floating point type (float or double), IEEE NaN (Not a number) will be used. @item For integer types, pixels out of the image will be filled with the value of the @command{BLANK} keyword in the cropped image header. The value assigned to it is the lowest value possible for that type, so you will probably never need it any way. Only for the unsigned character type (@command{BITPIX=8} in the FITS header), the maximum value is used because it is unsigned, the smallest value is zero which is often meaningful. @end itemize You can ask for such blank regions to not be included in the output crop image using the @option{--noblank} option. In such cases, there is no guarantee that the image size of your outputs are what you asked for. In some survey images, unfortunately they do not use the @command{BLANK} FITS keyword. Instead they just give all pixels outside of the survey area a value of zero. So by default, when dealing with float or double image types, any values that are 0.0 are also regarded as blank regions. This can be turned off with the @option{--zeroisnotblank} option. @node Invoking astcrop, , Blank pixels, Crop @subsection Invoking Crop Crop will crop a region from an image. If in WCS mode, it will also stitch parts from separate images in the input files. The executable name is @file{astcrop} with the following general template @example $ astcrop [OPTION...] [ASCIIcatalog] ASTRdata ... @end example @noindent One line examples: @example ## Crop all objects in cat.txt from image.fits: $ astcrop --catalog=cat.txt image.fits ## Crop all options in catalog (with RA,DEC) from all the files ## ending in `_drz.fits' in `/mnt/data/COSMOS/': $ astcrop --mode=wcs --catalog=cat.txt /mnt/data/COSMOS/*_drz.fits ## Crop the outer 10 border pixels of the input image: $ astcrop --section=10:*-10,10:*-10 --hdu=2 image.fits ## Crop region around RA and Dec of (189.16704, 62.218203): $ astcrop --mode=wcs --center=189.16704,62.218203 goodsnorth.fits ## Crop region around pixel coordinate (568.342, 2091.719): $ astcrop --mode=img --center=568.342,2091.719 --width=201 image.fits @end example @noindent Crop has one mandatory argument which is the input image name(s), shown above with @file{ASTRdata ...}. You can use shell expansions, for example @command{*} for this if you have lots of images in WCS mode. If the crop box centers are in a catalog, you can use the @option{--catalog} option. In other cases, you have to provide the single cropped output parameters must be given with command-line options. See @ref{Crop output} for how the output file name(s) can be specified. For the full list of general options to all Gnuastro programs (including Crop), please see @ref{Common options}. Floating point numbers can be used to specify the crop region (except the @option{--section} option, see @ref{Crop section syntax}). In such cases, the floating point values will be used to find the desired integer pixel indices based on the FITS standard. Hence, Crop ultimately doesn't do any sub-pixel cropping (in other words, it doesn't change pixel values). If you need such crops, you can use @ref{Warp} to first warp the image to the a new pixel grid, then crop from that. For example, let's assume you want a crop from pixels 12.982 to 80.982 along the first dimension. You should first translate the image by @mymath{-0.482} (note that the edge of a pixel is at integer multiples of @mymath{0.5}). So you should run Warp with @option{--translate=-0.482,0} and then crop the warped image with @option{--section=13:81}. There are two ways to define the cropped region: with its center or its vertices. See @ref{Crop modes} for a full description. In the former case, Crop can check if the central region of the cropped image is indeed filled with data or is blank (see @ref{Blank pixels}), and not produce any output when the center is blank, see the description under @option{--checkcenter} for more. @cindex Asynchronous thread allocation When in catalog mode, Crop will run in parallel unless you set @option{--numthreads=1}, see @ref{Multi-threaded operations}. Note that when multiple outputs are created with threads, the outputs will not be created in the same order. This is because the threads are asynchronous and thus not started in order. This has no effect on each output, see @ref{Hubble visually checks and classifies his catalog} for a tutorial on effectively using this feature. @menu * Crop options:: A list of all the options with explanation. * Crop output:: The outputs of Crop. @end menu @node Crop options, Crop output, Invoking astcrop, Invoking astcrop @subsubsection Crop options The options can be classified into the following contexts: Input, Output and operating mode options. Options that are common to all Gnuastro program are listed in @ref{Common options} and will not be repeated here. When you are specifying the crop vertices your self (through @option{--section}, or @option{--polygon}) on relatively small regions (depending on the resolution of your images) the outputs from image and WCS mode can be approximately equivalent. However, as the crop sizes get large, the curved nature of the WCS coordinates have to be considered. For example, when using @option{--section}, the right ascension of the bottom left and top left corners will not be equal. If you only want regions within a given right ascension, use @option{--polygon} in WCS mode. @noindent Input image parameters: @table @option @item --hstartwcs=INT Specify the first keyword card (line number) to start finding the input image world coordinate system information. Distortions were only recently included in WCSLIB (from version 5). Therefore until now, different telescope would apply their own specific set of WCS keywords and put them into the image header along with those that WCSLIB does recognize. So now that WCSLIB recognizes most of the standard distortion parameters, they will get confused with the old ones and give completely wrong results. For example in the CANDELS-GOODS South images@footnote{@url{https://archive.stsci.edu/pub/hlsp/candels/goods-s/gs-tot/v1.0/}}. The two @option{--hstartwcs} and @option{--hendwcs} are thus provided so when using older datasets, you can specify what region in the FITS headers you want to use to read the WCS keywords. Note that this is only relevant for reading the WCS information, basic data information like the image size are read separately. These two options will only be considered when the value to @option{--hendwcs} is larger than that of @option{--hstartwcs}. So if they are equal or @option{--hstartwcs} is larger than @option{--hendwcs}, then all the input keywords will be parsed to get the WCS information of the image. @item --hendwcs=INT Specify the last keyword card to read for specifying the image world coordinate system on the input images. See @option{--hstartwcs} @end table @noindent Crop box parameters: @table @option @item -c FLT[,FLT[,...]] @itemx --center=FLT[,FLT[,...]] The central position of the crop in the input image. The positions along each dimension must be separated by a comma (@key{,}) and fractions are also acceptable. The number of values given to this option must be the same as the dimensions of the input dataset. The width of the crop should be set with @code{--width}. The units of the coordinates are read based on the value to the @option{--mode} option, see below. @item -w FLT[,FLT[,...]] @itemx --width=FLT[,FLT[,...]] Width of the cropped region about its center. @option{--width} may take either a single value (to be used for all dimensions) or multiple values (a specific value for each dimension). If in WCS mode, value(s) given to this option will be read in the same units as the dataset's WCS information along this dimension. The final output will have an odd number of pixels to allow easy identification of the pixel which keeps your requested coordinate (from @option{--center} or @option{--catalog}). The @code{--width} option also accepts fractions. For example if you want the width of your crop to be 3 by 5 arcseconds along RA and Dec respectively, you can call it with: @option{--width=3/3600,5/3600}. If you want an even sided crop, you can run Crop afterwards with @option{--section=":*-1,:*-1"} or @option{--section=2:,2:} (depending on which side you don't need), see @ref{Crop section syntax}. @item -l STR @itemx --polygon=STR String of crop polygon vertices. Note that currently only convex polygons should be used. In the future we will make it work for all kinds of polygons. Convex polygons are polygons that do not have an internal angle more than 180 degrees. This option can be used both in the image and WCS modes, see @ref{Crop modes}. The cropped image will be the size of the rectangular region that completely encompasses the polygon. By default all the pixels that are outside of the polygon will be set as blank values (see @ref{Blank pixels}). However, if @option{--outpolygon} is called all pixels internal to the vertices will be set to blank. The syntax for the polygon vertices is similar to, and simpler than, that for @option{--section}. In short, the dimensions of each coordinate are separated by a comma (@key{,}) and each vertex is separated by a colon (@key{:}). You can define as many vertices as you like. If you would like to use space characters between the dimensions and vertices to make them more human-readable, then you have to put the value to this option in double quotation marks. For example, let's assume you want to work on the deepest part of the WFC3/IR images of Hubble Space Telescope eXtreme Deep Field (HST-XDF). @url{https://archive.stsci.edu/prepds/xdf/, According to the webpage}@footnote{@url{https://archive.stsci.edu/prepds/xdf/}} the deepest part is contained within the coordinates: @example [ (53.187414,-27.779152), (53.159507,-27.759633), (53.134517,-27.787144), (53.161906,-27.807208) ] @end example They have provided mask images with only these pixels in the WFC3/IR images, but what if you also need to work on the same region in the full resolution ACS images? Also what if you want to use the CANDELS data for the shallow region? Running Crop with @option{--polygon} will easily pull out this region of the image for you irrespective of the resolution. If you have set the operating mode to WCS mode in your nearest configuration file (see @ref{Configuration files}), there is no need to call @option{--mode=wcs} on the command line. You may also provide many FITS images/tiles and Crop will stitch them to produce this cropped region: @example $ astcrop --mode=wcs desired-filter-image(s).fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" @end example @cindex SAO ds9 In other cases, you have an image and want to define the polygon yourself (it isn't already published like the example above). As the number of vertices increases, checking the vertex coordinates on a FITS viewer (for example SAO ds9) and typing them in one by one can be very tedious and prone to typo errors. You can take the following steps to avoid the frustration and possible typos: Open the image with ds9 and activate its ``region'' mode with @clicksequence{Edit@click{}Region}. Then define the region as a polygon with @clicksequence{Region@click{}Shape@click{}Polygon}. Click on the approximate center of the region you want and a small square will appear. By clicking on the vertices of the square you can shrink or expand it, clicking and dragging anywhere on the edges will enable you to define a new vertex. After the region has been nicely defined, save it as a file with @clicksequence{Region@click{}Save Regions}. You can then select the name and address of the output file, keep the format as @command{REG} and press ``OK''. In the next window, keep format as ``ds9'' and ``Coordinate System'' as ``fk5''. A plain text file (let's call it @file{ds9.reg}) is now created. You can now convert this plain text file to Crop's polygon format with this command (when typing on the command-line, ignore the ``@key{\}'' at the end of the first and second lines along with the extra spaces, these are only for nice printing): @example $ v=$(awk 'NR==4' ds9.reg | sed -e's/polygon(//' \ -e's/\([^,]*,[^,]*\),/\1:/g' -e's/)//' ) $ astcrop --mode=wcs image.fits --polygon=$v @end example @item --outpolygon Keep all the regions outside the polygon and mask the inner ones with blank pixels (see @ref{Blank pixels}). This is practically the inverse of the default mode of treating polygons. Note that this option only works when you have only provided one input image. If multiple images are given (in WCS mode), then the full area covered by all the images has to be shown and the polygon excluded. This can lead to a very large area if large surveys like COSMOS are used. So Crop will abort and notify you. In such cases, it is best to crop out the larger region you want, then mask the smaller region with this option. @item -s STR @itemx --section=STR Section of the input image which you want to be cropped. See @ref{Crop section syntax} for a complete explanation on the syntax required for this input. @item -x STR/INT @itemx --coordcol=STR/INT The column in a catalog to read as a coordinate. The value can be either the column number (starting from 1), or a match/search in the table meta-data, see @ref{Selecting table columns}. This option must be called multiple times, depending on the number of dimensions in the input dataset. If it is called more than necessary, the extra columns (later calls to this option on the command-line or configuration files) will be ignored, see @ref{Configuration file precedence}. @item -n STR/INT @item --namecol=STR/INT Column selection of crop file name. The value can be either the column number (starting from 1), or a match/search in the table meta-data, see @ref{Selecting table columns}. This option can be used both in Image and WCS modes, and not a mandatory. When a column is given to this option, the final crop base file name will be taken from the contents of this column. The directory will be determined by the @option{--output} option (current directory if not given) and the value to @option{--suffix} will be appended. When this column isn't given, the row number will be used instead. @end table @noindent Output options: @table @option @item -c INT @itemx --checkcenter=INT @cindex Check center of crop Box width (odd number of pixels) of region in the center of the image to check for blank values. If the value to this option is zero, no checking is done. This option is only relevant when the cropped region(s) are defined by their center (not by the vertices, see @ref{Crop modes}). If any of the pixels in this central region of a crop (defined by its center) are blank, then it will not be created. Because survey regions don't often have a clean square or rectangle shape, some of the pixels on the sides of the survey FITS image don't commonly have any data and are blank (see @ref{Blank pixels}). So when the catalog was not generated from the input image, it often happens that the image does not have data over some of the points. When the given center of a crop falls in such regions and this option has a non-zero, odd value, no crop will be created. Therefore with this option, you can specify a width of a small box (3 pixels is often good enough) around the central pixel of the cropped image. You can check which crops were created and which weren't from the command-line (if @option{--quiet} was not called, see @ref{Operating mode options}), or in Crop's log file (see @ref{Crop output}). @item -p STR @itemx --suffix=STR The suffix (or post-fix) of the output files for when you want all the cropped images to have a special ending. One case where this might be helpful is when besides the science images, you want the weight images (or exposure maps, which are also distributed with survey images) of the cropped regions too. So in one run, you can set the input images to the science images and @option{--suffix=_s.fits}. In the next run you can set the weight images as input and @option{--suffix=_w.fits}. @item -b @itemx --noblank Pixels outside of the input image that are in the crop box will not be used. By default they are filled with blank values (depending on type), see @ref{Blank pixels}. This option only applies only in Image mode, see @ref{Crop modes}. @item -z @itemx --zeroisnotblank In float or double images, it is common to give the value of zero to blank pixels. If the input image type is one of these two types, such pixels will also be considered as blank. You can disable this behavior with this option, see @ref{Blank pixels}. @end table @noindent Operating mode options: @table @option @item -O STR @itemx --mode=STR Operate in Image mode or WCS mode when the input coordinates can be both image or WCS. The value must either be @option{img} or @option{wcs}, see @ref{Crop modes} for a full description. @end table @node Crop output, , Crop options, Invoking astcrop @subsubsection Crop output The string given to @option{--output} option will be interpretted depending on how many crops were requested, see @ref{Crop modes}: @itemize @item When a catalog is given, the value of the @option{--output} (see @ref{Common options}) will be read as the directory to store the output cropped images. Hence if it doesn't already exist, Crop will abort with an error of a ``No such file or directory'' error. The crop file names will consist of two parts: a variable part (the row number of each target starting from 1) along with a fixed string which you can set with the @option{--suffix} option. Optionally, you may also use the @option{--namecol} option to define a column in the input catalog to use as the file name instead of numbers. @item When only one crop is desired, the value to @option{--output} will be read as a file name. If no output is specified or if it is a directory, the output file name will follow the automatic output names of Gnuastro, see @ref{Automatic output}: The string given to @option{--suffix} will be replaced with the @file{.fits} suffix of the input. @end itemize The header of each output cropped image will contain the names of the input image(s) it was cut from. If a name is longer than the 70 character space that the FITS standard allows for header keyword values, the name will be cut into several keywords from the nearest slash (@key{/}). The keywords have the following format: @command{ICFn_m} (for Crop File). Where @command{n} is the number of the image used in this crop and @command{m} is the part of the name (it can be broken into multiple keywords). Following the name is another keyword named @command{ICFnPIX} which shows the pixel range from that input image in the same syntax as @ref{Crop section syntax}. So this string can be directly given to the @option{--section} option later. Once done, a log file can be created in the current directory with the @code{--log} option. This file will have three columns and the same number of rows as the number of cropped images. There are also comments on the top of the log file explaining basic information about the run and descriptions for the columns. A short description of the columns is also given below: @enumerate @item The cropped image file name for that row. @item The number of input images that were used to create that image. @item A @code{0} if the central few pixels (value to the @option{--checkcenter} option) are blank and @code{1} if they aren't. When the crop was not defined by its center (see @ref{Crop modes}), or @option{--checkcenter} was given a value of 0 (see @ref{Invoking astcrop}), the center will not be checked and this column will be given a value of @code{-1}. @end enumerate @node Arithmetic, Convolve, Crop, Data manipulation @section Arithmetic It is commonly necessary to do operations on some or all of the elements of a dataset independently (pixels in an image). For example, in the reduction of raw data it is necessary to subtract the Sky value (@ref{Sky value}) from each image image. Later (once the images as warped into a single grid using Warp for example, see @ref{Warp}), the images are co-added (the output pixel grid is the average of the pixels of the individual input images). Arithmetic is Gnuastro's program for such operations on your datasets directly from the command-line. It currently uses the reverse polish or post-fix notation, see @ref{Reverse polish notation} and will work on the native data types of the input images/data to reduce CPU and RAM resources, see @ref{Numeric data types}. For more information on how to run Arithmetic, please see @ref{Invoking astarithmetic}. @menu * Reverse polish notation:: The current notation style for Arithmetic * Arithmetic operators:: List of operators known to Arithmetic * Invoking astarithmetic:: How to run Arithmetic: options and output @end menu @node Reverse polish notation, Arithmetic operators, Arithmetic, Arithmetic @subsection Reverse polish notation @cindex Post-fix notation @cindex Reverse Polish Notation The most common notation for arithmetic operations is the @url{https://en.wikipedia.org/wiki/Infix_notation, infix notation} where the operator goes between the two operands, for example @mymath{4+5}. While the infix notation is the preferred way in most programming languages, currently Arithmetic does not use it since it will require parenthesis which can complicate the implementation of the code. In the near future we do plan to adopt this notation@footnote{@url{https://savannah.gnu.org/task/index.php?13867}}, but for the time being (due to time constraints on the developers), Arithmetic uses the post-fix or @url{https://en.wikipedia.org/wiki/Reverse_Polish_notation, reverse polish notation}. The Wikipedia article provides some excellent explanation on this notation but here we will give a short summary here for self-sufficiency. In the post-fix notation, the operator is placed after the operands, as we will see below this removes the need to define parenthesis for most ordinary operators. For example, instead of writing @command{5+6}, we write @command{5 6 +}. To easily understand how this notation works, you can think of each operand as a node in a first-in-first-out stack. Every time an operator is confronted, it pops the number of operands it needs from the top of the stack (so they don't exist in the stack any more), does its operation and pushes the result back on top of the stack. So if you want the average of 5 and 6, you would write: @command{5 6 + 2 /}. The operations that are done are: @enumerate @item @command{5} is an operand, so it is pushed to the top of the stack. @item @command{6} is an operand, so it is pushed to the top of the stack. @item @command{+} is a binary operator, so pull the top two elements of the stack and perform addition on them (the order is @mymath{5+6} in the example above). The result is @command{11}, push it on top of the stack. @item @command{2} is an operand so push it onto the top of the stack. @item @command{/} is a binary operator, so pull out the top two elements of the stack (top-most is @command{2}, then @command{11}) and divide the second one by the first. @end enumerate In the Arithmetic program, the operands can be FITS images or numbers. As you can see, very complicated procedures can be created without the need for parenthesis or worrying about precedence. Even functions which take an arbitrary number of arguments can be defined in this notation. This is a very powerful notation and is used in languages like Postscript @footnote{See the EPS and PDF part of @ref{Recognized file formats} for a little more on the Postscript language.} (the programming language in Postscript and compiled into PDF files) uses this notation. @node Arithmetic operators, Invoking astarithmetic, Reverse polish notation, Arithmetic @subsection Arithmetic operators The recognized operators in Arithmetic are listed below. See @ref{Reverse polish notation} for more on how the operators and operands should be ordered on the command-line. The operands to all operators can be a data array (for example a FITS image) or a number, the output will be an array or number according to the inputs. For example a number multiplied by an array will produce an array. The conditional operators will return pixel, or numerical values of 0 (false) or 1 (true) and stored in an @code{unsigned char} data type (see @ref{Numeric data types}). @table @command @item + Addition, so ``@command{4 5 +}'' is equivalent to @mymath{4+5}. @item - Subtraction, so ``@command{4 5 -}'' is equivalent to @mymath{4-5}. @item x Multiplication, so ``@command{4 5 x}'' is equivalent to @mymath{4\times5}. @item / Division, so ``@command{4 5 /}'' is equivalent to @mymath{4/5}. @item % Modulo (remainder), so ``@command{3 2 %}'' is equivalent to @mymath{1}. Note that the modulo operator only works on integer types. @item abs Absolute value of first operand, so ``@command{4 abs}'' is equivalent to @mymath{|4|}. @item pow First operand to the power of the second, so ``@command{4.3 5f pow}'' is equivalent to @mymath{4.3^{5}}. Currently @code{pow} will only work on single or double precision floating point numbers or images. To be sure that a number is read as a floating point (even if it doesn't have any non-zero decimals) put an @code{f} after it. @item sqrt The square root of the first operand, so ``@command{5 sqrt}'' is equivalent to @mymath{\sqrt{5}}. The output type is determined from the input, so the output of this example will be @command{2} (since @command{5} doesn't have any non-zero decimal digits). If you want @command{2.23607}, run @command{5f sqrt} instead, the @command{f} will ensure that a number will be read as a floating point number, even if it doesn't have decimal digits. If the input image has an integer type, you should explicitly convert the image to floating point, for example @command{a.fits float sqrt}, see the type conversion operators below. @item log Natural logarithm of first operand, so ``@command{4 log}'' is equivalent to @mymath{\ln(4)}. The output type is determined from the input, see the explanation under @command{sqrt} for more. @item log10 Base-10 logarithm of first operand, so ``@command{4 log10}'' is equivalent to @mymath{\log(4)}. The output type is determined from the input, see the explanation under @command{sqrt} for more. @item minvalue Minimum (non-blank) value in the top operand on the stack, so ``@command{a.fits minvalue}'' will push the the minimum pixel value in this image onto the stack. Therefore this operator is mainly intended for data (for example images), if the top operand is a number, this operator just returns it without any change. So note that when this operator acts on a single image, the output will no longer be an image, but a number. The output of this operand is in the same type as the input. @item maxvalue Maximum (non-blank) value of first operand in the same type, similar to @command{minvalue}. @item numvalue Number of non-blank elements in first operand in the @code{uint64} type, similar to @command{minvalue}. @item sumvalue Sum of non-blank elements in first operand in the @code{float32} type, similar to @command{minvalue}. @item meanvalue Mean value of non-blank elements in first operand in the @code{float32} type, similar to @command{minvalue}. @item stdvalue Standard deviation of non-blank elements in first operand in the @code{float32} type, similar to @command{minvalue}. @item medianvalue Median of non-blank elements in first operand with the same type, similar to @command{minvalue}. @cindex NaN @item min The first popped operand to this operator must be a positive integer number which specifies how many further operands should be popped from the stack. The given number of operands must have the same type and size. Each pixel of the output of this operator will be set to the minimum value of the given number of operands (images) in that pixel. For example the following command will produce an image with the same size and type as the inputs but each output pixel is set to the minimum respective pixel value of the three input images. @example $ astarithmetic a.fits b.fits c.fits 3 min @end example Important notes: @itemize @item NaN/blank pixels will be ignored, see @ref{Blank pixels}. @item The output will have the same type as the inputs. This is natural for the @command{min} and @command{max} operators, but for other similar operators (for example @command{sum}, or @command{average}) the per-pixel operations will be done in double precision floating point and then stored back in the input type. Therefore, if the input was an integer, C's internal type conversion will be used. @end itemize @item max Similar to @command{min}, but the pixels of the output will contain the maximum of the respective pixels in all operands in the stack. @item num Similar to @command{min}, but the pixels of the output will contain the number of the respective non-blank pixels in all input operands. @item sum Similar to @command{min}, but the pixels of the output will contain the sum of the respective pixels in all input operands. @item mean Similar to @command{min}, but the pixels of the output will contain the mean (average) of the respective pixels in all operands in the stack. @item std Similar to @command{min}, but the pixels of the output will contain the standard deviation of the respective pixels in all operands in the stack. @item median Similar to @command{min}, but the pixels of the output will contain the median of the respective pixels in all operands in the stack. @item filter-mean Apply mean filtering (or @url{https://en.wikipedia.org/wiki/Moving_average, moving average}) on the input dataset. During mean filtering, each pixel (data element) is replaced by the mean value of all its surrounding pixels (excluding blank values). The number of surrounding pixels in each dimension (to calculate the mean) is determined through the earlier operands that have been pushed onto the stack prior to the input dataset. The number of necessary operands is determined by the dimensions of the input dataset (first popped operand). The order of the dimensions on the command-line is the order in FITS format. Here is one example: @example $ astarithmetic 5 4 image.fits filter-mean @end example @noindent In this example, each pixel is replaced by the mean of a 5 by 4 box around it. The box is 5 pixels along the first FITS dimension (horizontal when viewed in ds9) and 4 pixels along the second FITS dimension (vertical). Each pixel will be placed in the center of the box that the mean is calculated on. If the given width along a dimension is even, then the center is assumed to be between the pixels (not in the center of a pixel). When the pixel is close to the center, the pixels of the box that fall outside the image are ignored. Therefore, on the edge, less points will be used in calculating the mean. The final effect of mean filtering is to smooth the input image, it is essentially a convolution with a kernel that has identical values for all its pixels (is flat), see @ref{Convolution process}. @item filter-median Apply @url{https://en.wikipedia.org/wiki/Median_filter, median filtering} on the input dataset. This is very similar to @command{filter-mean}, except that instead of the mean value of the box pixels, the median value is used to replace a pixel value. For more on how to use this operator, please see @command{filter-mean}. The median is less susceptible to outliers compared to the mean. As a result, after median filtering, the pixel values will be more discontinuous than mean filtering. @item lt Less than: If the second popped (or left operand in infix notation, see @ref{Reverse polish notation}) value is smaller than the first popped operand, then this function will return a value of 1, otherwise it will return a value of 0. If both operands are images, then all the pixels will be compared with their counterparts in the other image. If only one operand is an image, then all the pixels will be compared with the the single value (number) of the other operand. Finally if both are numbers, then the output is also just one number (0 or 1). When the output is not a single number, it will be stored as an @code{unsigned char} type. @item le Less or equal: similar to @code{lt} (`less than' operator), but returning 1 when the second popped operand is smaller or equal to the first. @item gt Greater than: similar to @code{lt} (`less than' operator), but returning 1 when the second popped operand is greater than the first. @item ge Greater or equal: similar to @code{lt} (`less than' operator), but returning 1 when the second popped operand is larger or equal to the first. @item eq Equality: similar to @code{lt} (`less than' operator), but returning 1 when the two popped operands are equal (to double precision floating point accuracy). @item ne Non-Equality: similar to @code{lt} (`less than' operator), but returning 1 when the two popped operands are @emph{not} equal (to double precision floating point accuracy). @item and Logical AND: returns 1 if both operands have a non-zero value and 0 if both are zero. Both operands have to be the same kind: either both images or both numbers. @item or Logical OR: returns 1 if either one of the operands is non-zero and 0 only when both operators are zero. Both operands have to be the same kind: either both images or both numbers. @item not Logical NOT: returns 1 when the operand is zero and 0 when the operand is non-zero. The operand can be an image or number, for an image, it is applied to each pixel separately. @cindex Blank pixel @item isblank Test for a blank value (see @ref{Blank pixels}). In essence, this is very similar to the conditional operators: the output is either 1 or 0 (see the `less than' operator above). The difference is that it only needs one operand. Because of the definition of a blank pixel, a blank value is not even equal to itself, so you cannot use the equal operator above to select blank pixels. See the ``Blank pixels'' box below for more on Blank pixels in Arithmetic. @item where Change the input (pixel) value @emph{where}/if a certain condition holds. The conditional operators above can be used to define the condition. Three operands are required for @command{where}. The input format is demonstrated in this simplified example: @example $ astarithmetic modify.fits binary.fits if-true.fits where @end example The value of any pixel in @file{modify.fits} that corresponds to a non-zero pixel of @file{binary.fits} will be changed to the value of the same pixel in @file{if-true.fits} (this may also be a number). The 3rd and 2nd popped operands (@file{modify.fits} and @file{binary.fits} respectively, see @ref{Reverse polish notation}) have to have the same dimensions/size. @file{if-true.fits} can be either a number, or have the same dimension/size as the other two. The 2nd popped operand (@file{binary.fits}) has to have @code{uint8} (or @code{unsigned char} in standard C) type (see @ref{Numeric data types}). It is treated as a binary dataset (with only two values: zero and non-zero, hence the name @code{binary.fits} in this example). However, commonly you won't be dealing with an actual FITS file of a condition/binary image. You will probably define the condition in the same run based on some other reference image and use the conditional and logical operators above to make a true/false (or one/zero) image for you internally. For example the case below: @example $ astarithmetic in.fits reference.fits 100 gt new.fits where @end example In the example above, any of the @file{in.fits} pixels that has a value in @file{reference.fits} greater than @command{100}, will be replaced with the corresponding pixel in @file{new.fits}. Effectively the @code{reference.fits 100 gt} part created the condition/binary image which was added to the stack (in memory) and later used by @code{where}. The command above is thus equivalent to these two commands: @example $ astarithmetic reference.fits 100 gt --output=binary.fits $ astarithmetic in.fits binary.fits new.fits where @end example Finally, the input operands are read and used independently, so you can use the same file more than once as any of the operands. When the 1st popped operand to @code{where} (@file{if-true.fits}) is a single number, it may be a NaN value (or any blank value, depending on its type) like the example below (see @ref{Blank pixels}). When the number is blank, it will be converted to the blank value of the type of the 3rd popped operand (@code{in.fits}). Hence, in the example below, all the pixels in @file{reference.fits} that have a value greater than 100, will become blank in the natural data type of @file{in.fits} (even though NaN values are only defined for floating point types). @example $ astarithmetic in.fits reference.fits 100 gt nan where @end example @item bitand Bitwise AND operator: only bits with values of 1 in both popped operands will get the value of 1, the rest will be set to 0. For example (assuming numbers can be written as bit strings on the command-line): @code{00101000 00100010 bitand} will give @code{00100000}. Note that the bitwise operators only work on integer type datasets. @item bitor Bitwise inclusive OR operator: The bits where at least one of the two popped operands has a 1 value get a value of 1, the others 0. For example (assuming numbers can be written as bit strings on the command-line): @code{00101000 00100010 bitand} will give @code{00101010}. Note that the bitwise operators only work on integer type datasets. @item bitxor Bitwise exclusive OR operator: A bit will be 1 if it differs between the two popped operands. For example (assuming numbers can be written as bit strings on the command-line): @code{00101000 00100010 bitand} will give @code{00001010}. Note that the bitwise operators only work on integer type datasets. @item lshift Bitwise left shift operator: shift all the bits of the first operand to the left by a number of times given by the second operand. For example (assuming numbers can be written as bit strings on the command-line): @code{00101000 2 lshift} will give @code{10100000}. This is equivalent to multiplication by 4. Note that the bitwise operators only work on integer type datasets. @item rshift Bitwise right shift operator: shift all the bits of the first operand to the right by a number of times given by the second operand. For example (assuming numbers can be written as bit strings on the command-line): @code{00101000 2 rshift} will give @code{00001010}. Note that the bitwise operators only work on integer type datasets. @item bitnot Bitwise not (more formally known as one's complement) operator: flip all the bits of the popped operand (note that this is the only unary, or single operand, bitwise operator). In other words, any bit with a value of @code{0} is changed to @code{1} and vice-versa. For example (assuming numbers can be written as bit strings on the command-line): @code{00101000 bitnot} will give @code{11010111}. Note that the bitwise operators only work on integer type datasets/numbers. @item uint8 Convert the type of the popped operand to 8-bit un-signed integer type (see @ref{Numeric data types}). The internal conversion of C will be used. @item int8 Convert the type of the popped operand to 8-bit signed integer type (see @ref{Numeric data types}). The internal conversion of C will be used. @item uint16 Convert the type of the popped operand to 16-bit un-signed integer type (see @ref{Numeric data types}). The internal conversion of C will be used. @item int16 Convert the type of the popped operand to 16-bit signed integer (see @ref{Numeric data types}). The internal conversion of C will be used. @item uint32 Convert the type of the popped operand to 32-bit un-signed integer type (see @ref{Numeric data types}). The internal conversion of C will be used. @item int32 Convert the type of the popped operand to 32-bit signed integer type (see @ref{Numeric data types}). The internal conversion of C will be used. @item uint64 Convert the type of the popped operand to 64-bit un-signed integer (see @ref{Numeric data types}). The internal conversion of C will be used. @item float32 Convert the type of the popped operand to 32-bit (single precision) floating point (see @ref{Numeric data types}). The internal conversion of C will be used. @item float64 Convert the type of the popped operand to 64-bit (double precision) floating point (see @ref{Numeric data types}). The internal conversion of C will be used. @end table @cartouche @noindent @strong{Blank pixels in Arithmetic:} Blank pixels in the image (see @ref{Blank pixels}) will be stored based on the data type. When the input is floating point type, blank values are NaN. One aspect of NaN values is that by definition they will fail on @emph{any} comparison. Hence both equal and not-equal operators will fail when both their operands are NaN! Therefore, the only way to guarantee selection of blank pixels is through the @command{isblank} operator explained above. One way you can exploit this property of the NaN value to your advantage is when you want a fully zero-valued image (even over the blank pixels) based on an already existing image (with same size and world coordinate system settings). The following command will produce this for you: @example $ astarithmetic input.fits nan eq --output=all-zeros.fits @end example @noindent Note that on the command-line you can write NaN in any case (for example @command{NaN}, or @command{NAN} are also acceptable). Reading NaN as a floating point number in Gnuastro isn't case-sensitive. @end cartouche @node Invoking astarithmetic, , Arithmetic operators, Arithmetic @subsection Invoking Arithmetic Arithmetic will do pixel to pixel arithmetic operations on the individual pixels of input data and/or numbers. For the full list of operators with explanations, please see @ref{Arithmetic operators}. Any operand that only has a single element (number, or single pixel FITS image) will be read as a number, the rest of the inputs must have the same dimensions. The general template is: @example $ astarithmetic [OPTION...] ASTRdata1 [ASTRdata2] OPERATOR ... @end example @noindent One line examples: @example ## Calculate (10.32-3.84)^2.7 quietly (will just print 155.329): $ astarithmetic -q 10.32 3.84 - 2.7 pow ## Inverse the input image (1/pixel): $ astarithmetic 1 image.fits / --out=inverse.fits ## Multiply each pixel in image by -1: $ astarithmetic image.fits -1 x --out=negative.fits ## Subtract extension 4 from extension 1 (counting from zero): $ astarithmetic image.fits image.fits - --out=skysub.fits \ --hdu=1 --hdu=4 ## Add two images, then divide them by 2 (2 is read as floating point): $ astarithmetic image1.fits image2.fits + 2f / --out=average.fits ## Use Arithmetic's average operator: $ astarithmetic image1.fits image2.fits average --out=average.fits ## Calculate the median of three images in three separate extensions: $ astarithmetic img1.fits img2.fits img3.fits median \ -h0 -h1 -h2 --out=median.fits @end example If the output is an image, and the @option{--output} option is not given, automatic output will use the name of the first FITS image encountered to generate an output file name, see @ref{Automatic output}. Also, output WCS information will be taken from the first input image encountered. When the output is a single number, that number will be printed in the standard output and no output file will be created. Arithmetic's notation for giving operands to operators is described in @ref{Reverse polish notation}. To ignore certain pixels, set them as blank, see @ref{Blank pixels}, for example with the @command{where} operator (see @ref{Arithmetic operators}). See @ref{Common options} for a review of the options in all Gnuastro programs. Arithmetic just redefines the @option{--hdu} option as explained below: @table @option @item -h INT/STR @itemx --hdu INT/STR The header data unit of the input FITS images, see @ref{Input output options}. Unlike most options in Gnuastro (which will ultimately only have one value for this option), Arithmetic allows @option{--hdu} to be called multiple times and the value of each invocation will be stored separately (for the unlimited number of input images you would like to use). Recall that for other programs this (common) option only takes a single value. So in other programs, if you specify it multiple times on the command-line, only the last value will be used and in the configuration files, it will be ignored if it already has a value. The order of the values to @option{--hdu} has to be in the same order as input FITS images. Options are first read from the command-line (from left to right), then top-down in each configuration file, see @ref{Configuration file precedence}. If the number of HDUs is less than the number of input images, Arithmetic will abort and notify you. However, if there are more HDUs than FITS images, there is no problem: they will be used in the given order (every time a FITS image comes up on the stack) and the extra HDUs will be ignored in the end. So there is no problem with having extra HDUs in the configuration files and by default several HDUs with a value of @option{0} are kept in the system-wide configuration file when you install Gnuastro. @item -g INT/STR @itemx --globalhdu INT/STR Use the value to this option as the HDU of all input FITS files. This option is very convenient when you have many input files and the dataset of interest is in the same HDU of all the files. When this option is called, any values given to the @option{--hdu} option (explained above) are ignored and will not be used. @end table Arithmetic accepts two kinds of input: images and numbers. Images are considered to be any of the inputs that is a file name of a recognized type (see @ref{Arguments}) and has more than one element/pixel. Numbers on the command-line will be read into the smallest type (see @ref{Numeric data types}) that can store them, so @command{-2} will be read as a @code{char} type (which is signed on most systems and can thus keep negative values), @command{2500} will be read as an @code{unsigned short} (all positive numbers will be read as unsigned), while @code{3.1415926535897} will be read as a @code{double} and @code{3.14} will be read as a @code{float}. To force a number to be read as float, add a @code{f} after it, so @command{5f} will be added to the stack as @code{float} (see @ref{Reverse polish notation}). Unless otherwise stated (in @ref{Arithmetic operators}), the operators can deal with numeric multiple data types (see @ref{Numeric data types}). For example in ``@command{a.fits b.fits +}'', the image types can be @code{long} and @code{float}. In such cases, C's internal type conversion will be used. The output type will be set to the higher-ranking type of the two inputs. Unsigned integer types have smaller ranking than their signed counterparts and floating point types have higher ranking than the integer types. So the internal C type conversions done in the example above are equivalent to this piece of C: @example size_t i; long a[100]; float b[100], out[100]; for(i=0;i<100;++i) out[i]=a[i]+b[i]; @end example @noindent Relying on the default C type conversion significantly speeds up the processing and also requires less RAM (when using very large images). Some operators can only work on integer types (of any length, for example bitwise operators) while others only work on floating point types, (currently only the @code{pow} operator). In such cases, if the operand type(s) are different, an error will be printed. Arithmetic also comes with internal type conversion operators which you can use to convert the data into the appropriate type, see @ref{Arithmetic operators}. @cindex Options The hyphen (@command{-}) can be used both to specify options (see @ref{Options}) and also to specify a negative number which might be necessary in your arithmetic. In order to enable you to do this, Arithmetic will first parse all the input strings and if the first character after a hyphen is a digit, then that hyphen is temporarily replaced by the vertical tab character which is not commonly used. The arguments are then parsed and these strings will not be specified as an option. Then the given arguments are parsed and any vertical tabs are replaced back with a hyphen so they can be read as negative numbers. Therefore, as long as the names of the files you want to work on, don't start with a vertical tab followed by a digit, there is no problem. An important consequence of this implementation is that you should not write negative fractions like this: @command{-.3}, instead write them as @command{-0.3}. @cindex AWK @cindex GNU AWK Without any images, Arithmetic will act like a simple calculator and print the resulting output number on the standard output like the first example above. If you really want such calculator operations on the command-line, AWK (GNU AWK is the most common implementation) is much faster, easier and much more powerful. For example, the numerical one-line example above can be done with the following command. In general AWK is a fantastic tool and GNU AWK has a wonderful manual (@url{https://www.gnu.org/software/gawk/manual/}). So if you often confront situations like this, or have to work with large text tables/catalogs, be sure to checkout AWK and simplify your life. @example $ echo "" | awk '@{print (10.32-3.84)^2.7@}' 155.329 @end example @node Convolve, Warp, Arithmetic, Data manipulation @section Convolve @cindex Convolution @cindex Neighborhood @cindex Weighted average @cindex Average, weighted @cindex Kernel, convolution On an image, convolution can be thought of as a process to blur or remove the contrast in an image. If you are already familiar with the concept and just want to run Convolve, you can jump to @ref{Convolution kernel} and @ref{Invoking astconvolve} and skip the lengthy introduction on the basic definitions and concepts of convolution. There are generally two methods to convolve an image. The first and more intuitive one is in the ``spatial domain'' or using the actual image pixel values, see @ref{Spatial domain convolution}. The second method is when we manipulate the ``frequency domain'', or work on the magnitudes of the different frequencies that constitute the image, see @ref{Frequency domain and Fourier operations}. Understanding convolution in the spatial domain is more intuitive and thus recommended if you are just starting to learn about convolution. However, getting a good grasp of the frequency domain is a little more involved and needs some concentration and some mathematical proofs. However, its reward is a faster operation and more importantly a very fundamental understanding of this very important operation. @cindex Detection @cindex Atmosphere @cindex Blur image @cindex Cosmic rays @cindex Pixel mixing @cindex Mixing pixel values Convolution of an image will generally result in blurring the image because it mixes pixel values. In other words, if the image has sharp differences in neighboring pixel values@footnote{In astronomy, the only major time we confront such sharp borders in signal are cosmic rays. All other sources of signal in an image are already blurred by the atmosphere or the optics of the instrument.}, those sharp differences will become smoother. This has very good consequences in detection of signal in noise for example. In an actual observed image, the variation in neighboring pixel values due to noise can be very high. But after convolution, those variations will decrease and we have a better hope in detecting the possible underlying signal. Another case where convolution is extensively used is in mock images and modeling in general, convolution can be used to simulate the effect of the atmosphere or the optical system on the mock profiles that we create, see @ref{PSF}. Convolution is a very interesting and important topic in any form of signal analysis (including astronomical observations). So we have thoroughly@footnote{A mathematician will certainly consider this explanation is incomplete and inaccurate. However this text is written for an understanding on the operations that are done on a real (not complex, discrete and noisy) astronomical image, not any general form of abstract function} explained the concepts behind it in the following sub-sections. @menu * Spatial domain convolution:: Only using the input image values. * Frequency domain and Fourier operations:: Using frequencies in input. * Spatial vs. Frequency domain:: When to use which? * Convolution kernel:: How to specify the convolution kernel. * Invoking astconvolve:: Options and argument to Convolve. @end menu @node Spatial domain convolution, Frequency domain and Fourier operations, Convolve, Convolve @subsection Spatial domain convolution The pixels in an input image represent different ``spatial'' positions, therefore when convolution is done only using the actual input pixel values, we name the process as being done in the ``Spatial domain''. In particular this is in contrast to the ``frequency domain'' that we will discuss later in @ref{Frequency domain and Fourier operations}. In the spatial domain (and in realistic situations where the image and the convolution kernel don't extend to infinity), convolution is the process of changing the value of one pixel to the @emph{weighted} average of all the pixels in its @emph{neighborhood}. The `neighborhood' of each pixel (how many pixels in which direction) and the `weight' function (how much each neighboring pixel should contribute depending on its position) are given through a second image which is known as a ``kernel''@footnote{Also known as filter, here we will use `kernel'.}. @menu * Convolution process:: More basic explanations. * Edges in the spatial domain:: Dealing with the edges of an image. @end menu @node Convolution process, Edges in the spatial domain, Spatial domain convolution, Spatial domain convolution @subsubsection Convolution process In convolution, the kernel specifies the weight and positions of the neighbors of each pixel. To find the convolved value of a pixel, the central pixel of the kernel is placed on that pixel. The values of each overlapping pixel in the kernel and image are multiplied by each other and summed for all the kernel pixels. To have one pixel in the center, the sides of the convolution kernel have to be an odd number. This process effectively mixes the pixel values of each pixel with its neighbors, resulting in a blurred image compared to the sharper input image. @cindex Linear spatial filtering Formally, convolution is one kind of linear `spatial filtering' in image processing texts. If we assume that the kernel has @mymath{2a+1} and @mymath{2b+1} pixels on each side, the convolved value of a pixel placed at @mymath{x} and @mymath{y} (@mymath{C_{x,y}}) can be calculated from the neighboring pixel values in the input image (@mymath{I}) and the kernel (@mymath{K}) from @dispmath{C_{x,y}=\sum_{s=-a}^{a}\sum_{t=-b}^{b}K_{s,t}\times{}I_{x+s,y+t}.} @cindex Correlation @cindex Convolution Any pixel coordinate that is outside of the image in the equation above will be considered to be zero. When the kernel is symmetric about its center the blurred image has the same orientation as the original image. However, if the kernel is not symmetric, the image will be affected in the opposite manner, this is a natural consequence of the definition of spatial filtering. In order to avoid this we can rotate the kernel about its center by 180 degrees so the convolved output can have the same original orientation. Technically speaking, only if the kernel is flipped the process is known @emph{Convolution}. If it isn't it is known as @emph{Correlation}. To be a weighted average, the sum of the weights (the pixels in the kernel) have to be unity. This will have the consequence that the convolved image of an object and un-convolved object will have the same brightness (see @ref{Flux Brightness and magnitude}), which is natural, because convolution should not eat up the object photons, it only disperses them. @node Edges in the spatial domain, , Convolution process, Spatial domain convolution @subsubsection Edges in the spatial domain In purely `linear' spatial filtering (convolution), there are problems on the edges of the input image. Here we will explain the problem in the spatial domain. For a discussion of this problem from the frequency domain perspective, see @ref{Edges in the frequency domain}. The problem originates from the fact that on the edges, in practice@footnote{Because we assumed the overlapping pixels outside the input image have a value of zero.}, the sum of the weights we use on the actual image pixels is not unity. For example, as discussed above, a profile in the center of an image will have the same brightness before and after convolution. However, for partially imaged profile on the edge of the image, the brightness (sum of its pixel fluxes within the image, see @ref{Flux Brightness and magnitude}) will not be equal, some of the flux is going to be `eaten' by the edges. If you ran @command{$ make check} on the source files of Gnuastro, you can see the this effect by comparing the @file{convolve_frequency.fits} with @file{convolve_spatial.fits} in the @file{./tests/} directory. In the spatial domain, by default, no assumption will be made about pixels outside of the image or any blank pixels in the image. The problem explained above will also occur on the sides of blank regions (see @ref{Blank pixels}). The solution to this edge effect problem is only possible in the spatial domain. For pixels near the edge, we have to abandon the assumption that the sum of the kernel pixels is unity during the convolution process@footnote{ofcourse the sum of the kernel pixels still have to be unity in general.}. So taking @mymath{W} as the sum of the kernel pixels that overlapped with non-blank and in-image pixels, the equation in @ref{Convolution process} will become: @dispmath{C_{x,y}= { \sum_{s=-a}^{a}\sum_{t=-b}^{b}K_{s,t}\times{}I_{x+s,y+t} \over W}.} @noindent In this manner, objects which are near the edges of the image or blank pixels will also have the same brightness (within the image) before and after convolution. This correction is applied by default in Convolve when convolving in the spatial domain. To disable it, you can use the @option{--noedgecorrection} option. In the frequency domain, there is no way to avoid this loss of flux near the edges of the image, see @ref{Edges in the frequency domain} for an interpretation from the frequency domain perspective. Note that the edge effect discussed here is different from the one in @ref{If convolving afterwards}. In making mock images we want to simulate a real observation. In a real observation the images of the galaxies on the sides of the CCD are first blurred by the atmosphere and instrument, then imaged. So light from the parts of a galaxy which are immediately outside the CCD will affect the parts of the galaxy which are covered by the CCD. Therefore in modeling the observation, we have to convolve an image that is larger than the input image by exactly half of the convolution kernel. We can hence conclude that this correction for the edges is only useful when working on actual observed images (where we don't have any more data on the edges) and not in modeling. @node Frequency domain and Fourier operations, Spatial vs. Frequency domain, Spatial domain convolution, Convolve @subsection Frequency domain and Fourier operations Getting a good grip on the frequency domain is usually not an easy job! So we have decided to give the issue a complete review here. Convolution in the frequency domain (see @ref{Convolution theorem}) heavily relies on the concepts of Fourier transform (@ref{Fourier transform}) and Fourier series (@ref{Fourier series}) so we will be investigating these important operations first. It has become something of a clich@'e for people to say that the Fourier series ``is a way to represent a (wave-like) function as the sum of simple sine waves'' (from Wikipedia). However, sines themselves are abstract functions, so this statement really adds no extra layer of physical insight. Before jumping head-first into the equations and proofs, we will begin with a historical background to see how the importance of frequencies actually roots in our ancient desire to see everything in terms of circles. A short review of how the complex plane should be interpreted is then given. Having paved the way with these two basics, we define the Fourier series and subsequently the Fourier transform. The final aim is to explain discrete Fourier transform, however some very important concepts need to be solidified first: The Dirac comb, convolution theorem and sampling theorem. So each of these topics are explained in their own separate sub-sub-section before going on to the discrete Fourier transform. Finally we revisit (after @ref{Edges in the spatial domain}) the problem of convolution on the edges, but this time in the frequency domain. Understanding the sampling theorem and the discrete Fourier transform is very important in order to be able to pull out valuable science from the discrete image pixels. Therefore we have included the mathematical proofs and figures so you can have a clear understanding of these very important concepts. @menu * Fourier series historical background:: Historical background. * Circles and the complex plane:: Interpreting complex numbers. * Fourier series:: Fourier Series definition. * Fourier transform:: Fourier Transform definition. * Dirac delta and comb:: Dirac delta and Dirac comb. * Convolution theorem:: Derivation of Convolution theorem. * Sampling theorem:: Sampling theorem (Nyquist frequency). * Discrete Fourier transform:: Derivation and explanation of DFT. * Fourier operations in two dimensions:: Extend to 2D images. * Edges in the frequency domain:: Interpretation of edge effects. @end menu @node Fourier series historical background, Circles and the complex plane, Frequency domain and Fourier operations, Frequency domain and Fourier operations @subsubsection Fourier series historical background Ever since the ancient times, the circle has been (and still is) the simplest shape for abstract comprehension. All you need is a center point and a radius and you are done. All the points on a circle are at a fixed distance from the center. However, the moment you try to connect this elegantly simple and beautiful abstract construct (the circle) with the real world (for example compute its area or its circumference), things become really hard (ideally, impossible) because the irrational number @mymath{\pi} gets involved. The key to understanding the Fourier series (thus the Fourier transform and finally the Discrete Fourier Transform) is our ancient desire to express everything in terms of circles or the most exceptionally simple and elegant abstract human construct. Most people prefer to say the same thing in a more ahistorical manner: to break a function into sines and cosines. As the term ``ancient'' in the previous sentence implies, Jean-Baptiste Joseph Fourier (1768 -- 1830 A.D.) was not the first person to do this. The main reason we know this process by his name today is that he came up with an ingenious method to find the necessary coefficients (radius of) and frequencies (``speed'' of rotation on) the circles for any generic (integrable) function. @float Figure,epicycle @c Since these links are long, we had to write them like this so they don't @c jump out of the text width. @image{gnuastro-figures/epicycles, 15.2cm, , Middle ages epicycles along with two demonstrations of breaking a generic function using epicycles.} @caption{Epicycles and the Fourier series. Left: A demonstration of Mercury's epicycles relative to the ``center of the world'' by Qutb al-Din al-Shirazi (1236 -- 1311 A.D.) retrieved @url{https://commons.wikimedia.org/wiki/File:Ghotb2.jpg, from Wikipedia}. @url{https://commons.wikimedia.org/wiki/File:Fourier_series_square_wave_circles_animation.gif, Middle} and Right: How adding more epicycles (or terms in the Fourier series) will approximate functions. The @url{https://commons.wikimedia.org/wiki/File:Fourier_series_sawtooth_wave_circles_animation.gif, right} animation is also available.} @end float Like most aspects of mathematics, this process of interpreting everything in terms of circles, began for astronomical purposes. When astronomers noticed that the orbit of Mars and other outer planets, did not appear to be a simple circle (as everything should have been in the heavens). At some point during their orbit, the revolution of these planets would become slower, stop, go back a little (in what is known as the retrograde motion) and then continue going forward again. The correction proposed by Ptolemy (90 -- 168 A.D.) was the most agreed upon. He put the planets on Epicycles or circles whose center itself rotates on a circle whose center is the earth. Eventually, as observations became more and more precise, it was necessary to add more and more epicycles in order to explain the complex motions of the planets@footnote{See the Wikipedia page on ``Deferent and epicycle'' for a more complete historical review.}. @ref{epicycle}(Left) shows an example depiction of the epicycles of Mercury in the late 13th century. Of course we now know that if they had abdicated the Earth from its throne in the center of the heavens and allowed the Sun to take its place, everything would become much simpler and true. But there wasn't enough observational evidence for changing the ``professional consensus'' of the time to this radical view suggested by a small minority@footnote{Aristarchus of Samos (310 -- 230 B.C.) appears to be one of the first people to suggest the Sun being in the center of the universe. This approach to science (that the standard model is defined by consensus) and the fact that this consensus might be completely wrong still applies equally well to our models of particle physics and cosmology today.}. So the pre-Galilean astronomers chose to keep Earth in the center and find a correction to the models (while keeping the heavens a purely ``circular'' order). The main reason we are giving this historical background which might appear off topic is to give historical evidence that while such ``approximations'' do work and are very useful for pragmatic reasons (like measuring the calendar from the movement of astronomical bodies). They offer no physical insight. The astronomers who were involved with the Ptolemaic world view had to add a huge number of epicycles during the centuries after Ptolemy in order to explain more accurate observations. Finally the death knell of this world-view was Galileo's observations with his new instrument (the telescope). So the physical insight, which is what Astronomers and Physicists are interested in (as opposed to Mathematicians and Engineers who just like proving and optimizing or calculating!) comes from being creative and not limiting our selves to such approximations. Even when they work. @node Circles and the complex plane, Fourier series, Fourier series historical background, Frequency domain and Fourier operations @subsubsection Circles and the complex plane Before going onto the derivation, it is also useful to review how the complex numbers and their plane relate to the circles we talked about above. The two schematics in the middle and right of @ref{epicycle} show how a 1D function of time can be made using the 2D real and imaginary surface. Seeing the animation in Wikipedia will really help in understanding this important concept. At each point in time, we take the vertical coordinate of the point and use it to find the value of the function at that point in time. @ref{iandtime} shows this relation with the axes marked. Leonhard Euler@footnote{Other forms of this equation were known before Euler. For example in 1707 A.D. (the year of Euler's birth) Abraham de Moivre (1667 -- 1754 A.D.) showed that @mymath{(\cos{x}+i\sin{x})^n=\cos(nx)+i\sin(nx)}. In 1714 A.D., Roger Cotes (1682 -- 1716 A.D. a colleague of Newton who proofread the second edition of Principia) showed that: @mymath{ix=\ln(\cos{x}+i\sin{x})}.} (1707 -- 1783 A.D.) showed that the complex exponential (@mymath{e^{iv}} where @mymath{v} is real) is periodic and can be written as: @mymath{e^{iv}=\cos{v}+isin{v}}. Therefore @mymath{e^{iv+2\pi}=e^{iv}}. Later, Caspar Wessel (mathematician and cartographer 1745 -- 1818 A.D.) showed how complex numbers can be displayed as vectors on a plane. Euler's identity might seem counter intuitive at first, so we will try to explain it geometrically (for deeper physical insight). On the real-imaginary 2D plane (like the left hand plot in each box of @ref{iandtime}), multiplying a number by @mymath{i} can be interpreted as rotating the point by @mymath{90} degrees (for example the value @mymath{3} on the real axis becomes @mymath{3i} on the imaginary axis). On the other hand, @mymath{e\equiv\lim_{n\rightarrow\infty}(1+{1\over n})^n}, therefore, defining @mymath{m\equiv nu}, we get: @dispmath{e^{u}=\lim_{n\rightarrow\infty}\left(1+{1\over n}\right)^{nu} =\lim_{n\rightarrow\infty}\left(1+{u\over nu}\right)^{nu} =\lim_{m\rightarrow\infty}\left(1+{u\over m}\right)^{m}} @noindent Taking @mymath{u\equiv iv} the result can be written as a generic complex number (a function of @mymath{v}): @dispmath{e^{iv}=\lim_{m\rightarrow\infty}\left(1+i{v\over m}\right)^{m}=a(v)+ib(v)} @noindent For @mymath{v=\pi}, a nice geometric animation of going to the limit can be seen @url{https://commons.wikimedia.org/wiki/File:ExpIPi.gif, on Wikipedia}. We see that @mymath{\lim_{m\rightarrow\infty}a(\pi)=-1}, while @mymath{\lim_{m\rightarrow\infty}b(\pi)=0}, which gives the famous @mymath{e^{i\pi}=-1} equation. The final value is the real number @mymath{-1}, however the distance of the polygon points traversed as @mymath{m\rightarrow\infty} is half the circumference of a circle or @mymath{\pi}, showing how @mymath{v} in the equation above can be interpreted as an angle in units of radians and therefore how @mymath{a(v)=cos(v)} and @mymath{b(v)=sin(v)}. Since @mymath{e^{iv}} is periodic (let's assume with a period of @mymath{T}), it is more clear to write it as @mymath{v\equiv{2{\pi}n\over T}t} (where @mymath{n} is an integer), so @mymath{e^{iv}=e^{i{2{\pi}n\over T}t}}. The advantage of this notation is that the period (@mymath{T}) is clearly visible and the frequency (@mymath{2{\pi}n \over T}, in units of 1/cycle) is defined through the integer @mymath{n}. In this notation, @mymath{t} is in units of ``cycle''s. As we see from the examples in @ref{epicycle} and @ref{iandtime}, for each constituting frequency, we need a respective `magnitude' or the radius of the circle in order to accurately approximate the desired 1D function. The concepts of ``period'' and ``frequency'' are relatively easy to grasp when using temporal units like time because this is how we define them in every-day life. However, in an image (astronomical data), we are dealing with spatial units like distance. Therefore, by one ``period'' we mean the @emph{distance} at which the signal is identical and frequency is defined as the inverse of that spatial ``period''. The complex circle of @ref{iandtime} can be thought of the Moon rotating about Earth which is rotating around the Sun; so the ``Real (signal)'' axis shows the Moon's position as seen by a distant observer on the Sun as time goes by. Because of the scalar (not having any direction or vector) nature of time, @ref{iandtime} is easier to understand in units of time. When thinking about spatial units, mentally replace the ``Time (sec)'' axis with ``Distance (meters)''. Because length has direction and is a vector, visualizing the rotation of the imaginary circle and the advance along the ``Distance (meters)'' axis is not as simple as temporal units like time. @float Figure,iandtime @image{gnuastro-figures/iandtime, 15.2cm, , } @caption{Relation between the real (signal), imaginary (@mymath{i\equiv\sqrt{-1}}) and time axes at two snapshots of time.} @end float @node Fourier series, Fourier transform, Circles and the complex plane, Frequency domain and Fourier operations @subsubsection Fourier series In astronomical images, our variable (brightness, or number of photo-electrons, or signal to be more generic) is recorded over the 2D spatial surface of a camera pixel. However to make things easier to understand, here we will assume that the signal is recorded in 1D (assume one row of the 2D image pixels). Also for this section and the next (@ref{Fourier transform}) we will be talking about the signal before it is digitized or pixelated. Let's assume that we have the continuous function @mymath{f(l)} which is integrable in the interval @mymath{[l_0, l_0+L]} (always true in practical cases like images). Take @mymath{l_0} as the position of the first pixel in the assumed row of the image and @mymath{L} as the width of the image along that row. The units of @mymath{l_0} and @mymath{L} can be in any spatial units (for example meters) or an angular unit (like radians) multiplied by a fixed distance which is more common. To approximate @mymath{f(l)} over this interval, we need to find a set of frequencies and their corresponding `magnitude's (see @ref{Circles and the complex plane}). Therefore our aim is to show @mymath{f(l)} as the following sum of periodic functions: @dispmath{ f(l)=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}n\over L}l} } @noindent Note that the different frequencies (@mymath{2{\pi}n/L}, in units of cycles per meters for example) are not arbitrary. They are all integer multiples of the fundamental frequency of @mymath{\omega_0=2\pi/L}. Recall that @mymath{L} was the length of the signal we want to model. Therefore, we see that the smallest possible frequency (or the frequency resolution) in the end, depends on the length we observed the signal or @mymath{L}. In the case of each dimension on an image, this is the size of the image in the respective dimension. The frequencies have been defined in this ``harmonic'' fashion to insure that the final sum is periodic outside of the @mymath{[l_0, l_0+L]} interval too. At this point, you might be thinking that the sky is not periodic with the same period as my camera's view angle. You are absolutely right! The important thing is that since your camera's observed region is the only region we are ``observing'' and will be using, the rest of the sky is irrelevant; so we can safely assume the sky is periodic outside of it. However, this working assumption will haunt us later in @ref{Edges in the frequency domain}. The frequencies are thus determined by definition. So all we need to do is to find the coefficients (@mymath{c_n}), or magnitudes, or radii of the circles for each frequency which is identified with the integer @mymath{n}. Fourier's approach was to multiply both sides with a fixed term: @dispmath{ f(l)e^{-i{2{\pi}m\over L}l}=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}(n-m)\over L}l} } @noindent where @mymath{m>0}@footnote{ We could have assumed @mymath{m<0} and set the exponential to positive, but this is more clear.}. We can then integrate both sides over the observation period: @dispmath{ \int_{l_0}^{l_0+L}f(l)e^{-i{2{\pi}m\over L}l}dl =\int_{l_0}^{l_0+L}\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}(n-m)\over L}l}dl=\displaystyle\sum_{n=-\infty}^{\infty}c_n\int_{l_0}^{l_0+L}e^{i{2{\pi}(n-m)\over L}l}dl } @noindent Both @mymath{n} and @mymath{m} are positive integers. Also, we know that a complex exponential is periodic so after one period (@mymath{L}) it comes back to its starting point. Therefore @mymath{\int_{l_0}^{l_0+L}e^{2{\pi}k/L}dl=0} for any @mymath{k>0}. However, when @mymath{k=0}, this integral becomes: @mymath{\int_{l_0}^{l_0+T}e^0dt=\int_{l_0}^{l_0+T}dt=T}. Hence since the integral will be zero for all @mymath{n{\neq}m}, we get: @dispmath{ \displaystyle\sum_{n=-\infty}^{\infty}c_n\int_{l_0}^{l_0+T}e^{i{2{\pi}(n-m)\over L}l}dl=Lc_m } @noindent The origin of the axis is fundamentally an arbitrary position. So let's set it to the start of the image such that @mymath{l_0=0}. So we can find the ``magnitude'' of the frequency @mymath{2{\pi}m/L} within @mymath{f(l)} through the relation: @dispmath{ c_m={1\over L}\int_{0}^{L}f(l)e^{-i{2{\pi}m\over L}l}dl } @node Fourier transform, Dirac delta and comb, Fourier series, Frequency domain and Fourier operations @subsubsection Fourier transform In @ref{Fourier series}, we had to assume that the function is periodic outside of the desired interval with a period of @mymath{L}. Therefore, assuming that @mymath{L\rightarrow\infty} will allow us to work with any function. However, with this approximation, the fundamental frequency (@mymath{\omega_0}) or the frequency resolution that we discussed in @ref{Fourier series} will tend to zero: @mymath{\omega_0\rightarrow0}. In the equation to find @mymath{c_m}, every @mymath{m} represented a frequency (multiple of @mymath{\omega_0}) and the integration on @mymath{l} removes the dependence of the right side of the equation on @mymath{l}, making it only a function of @mymath{m} or frequency. Let's define the following two variables: @dispmath{\omega{\equiv}m\omega_0={2{\pi}m\over L}} @dispmath{F(\omega){\equiv}Lc_m} @noindent The equation to find the coefficients of each frequency in @ref{Fourier series} thus becomes: @dispmath{ F(\omega)=\int_{-\infty}^{\infty}f(l)e^{-i{\omega}l}dl. } @noindent The function @mymath{F(\omega)} is thus the @emph{Fourier transform} of @mymath{f(l)} in the frequency domain. So through this transformation, we can find (analyze) the magnitudes of the constituting frequencies or the value in the frequency space@footnote{As we discussed before, this `magnitude' can be interpreted as the radius of the circle rotating at this frequency in the epicyclic interpretation of the Fourier series, see @ref{epicycle} and @ref{iandtime}.} of our spatial input function. The great thing is that we can also do the reverse and later synthesize the input function from its Fourier transform. Let's do it: with the approximations above, multiply the right side of the definition of the Fourier Series (@ref{Fourier series}) with @mymath{1=L/L=({\omega_0}L)/(2\pi)}: @dispmath{ f(l)={1\over 2\pi}\displaystyle\sum_{n=-\infty}^{\infty}Lc_ne^{{2{\pi}in\over L}l}\omega_0={1\over 2\pi}\displaystyle\sum_{n=-\infty}^{\infty}F(\omega)e^{i{\omega}l}\Delta\omega } @noindent To find the right most side of this equation, we renamed @mymath{\omega_0} as @mymath{\Delta\omega} because it was our resolution, @mymath{2{\pi}n/L} was written as @mymath{\omega} and finally, @mymath{Lc_n} was written as @mymath{F(\omega)} as we defined above. Now, as @mymath{L\rightarrow\infty}, @mymath{\Delta\omega\rightarrow0} so we can write: @dispmath{ f(l)={1\over 2\pi}\int_{-\infty}^{\infty}F(\omega)e^{i{\omega}l}d\omega } Together, these two equations provide us with a very powerful set of tools that we can use to process (analyze) and recreate (synthesize) the input signal. Through the first equation, we can break up our input function into its constituent frequencies and analyze it, hence it is also known as @emph{analysis}. Using the second equation, we can synthesize or make the input function from the known frequencies and their magnitudes. Thus it is known as @emph{synthesis}. Here, we symbolize the Fourier transform (analysis) and its inverse (synthesis) of a function @mymath{f(l)} and its Fourier Transform @mymath{F(\omega)} as @mymath{{\cal F}[f]} and @mymath{{\cal F}^{-1}[F]}. @node Dirac delta and comb, Convolution theorem, Fourier transform, Frequency domain and Fourier operations @subsubsection Dirac delta and comb The Dirac @mymath{\delta} (delta) function (also known as an impulse) is the way that we convert a continuous function into a discrete one. It is defined to satisfy the following integral: @dispmath{\int_{-\infty}^{\infty}\delta(l)dl=1} @noindent When integrated with another function, it gives that function's value at @mymath{l=0}: @dispmath{\int_{-\infty}^{\infty}f(l)\delta(l)dt=f(0)} @noindent An impulse positioned at another point (say @mymath{l_0}) is written as @mymath{\delta(l-l_0)}: @dispmath{\int_{-\infty}^{\infty}f(l)\delta(l-l_0)dt=f(l_0)} @noindent The Dirac @mymath{\delta} function also operates similarly if we use summations instead of integrals. The Fourier transform of the delta function is: @dispmath{{\cal F}[\delta(l)]=\int_{-\infty}^{\infty}\delta(l)e^{-i{\omega}l}dl=e^{-i{\omega}0}=1} @dispmath{{\cal F}[\delta(l-l_0)]=\int_{-\infty}^{\infty}\delta(l-l_0)e^{-i{\omega}l}dl=e^{-i{\omega}l_0}} @noindent From the definition of the Dirac @mymath{\delta} we can also define a Dirac comb (@mymath{{\rm III}_P}) or an impulse train with infinite impulses separated by @mymath{P}: @dispmath{ {\rm III}_P(l)\equiv\displaystyle\sum_{k=-\infty}^{\infty}\delta(l-kP) } @noindent @mymath{P} is chosen to represent ``pixel width'' later in @ref{Sampling theorem}. Therefore the Dirac comb is periodic with a period of @mymath{P}. We have intentionally used a different name for the period of the Dirac comb compared to the input signal's length of observation that we showed with @mymath{L} in @ref{Fourier series}. This difference is highlighted here to avoid confusion later when these two periods are needed together in @ref{Discrete Fourier transform}. The Fourier transform of the Dirac comb will be necessary in @ref{Sampling theorem}, so let's derive it. By its definition, it is periodic, with a period of @mymath{P}, so the Fourier coefficients of its Fourier Series (@ref{Fourier series}) can be calculated within one period: @dispmath{{\rm III}_P=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}n\over P}l}} @noindent We can now find the @mymath{c_n} from @ref{Fourier series}: @dispmath{ c_n={1\over P}\int_{-P/2}^{P/2}\delta(l)e^{-i{2{\pi}n\over P}l} ={1\over P}\quad\quad \rightarrow \quad\quad {\rm III}_P={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}e^{i{2{\pi}n\over P}l} } @noindent So we can write the Fourier transform of the Dirac comb as: @dispmath{ {\cal F}[{\rm III}_P]=\int_{-\infty}^{\infty}{\rm III}_Pe^{-i{\omega}l}dl ={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}e^{-i(\omega-{2{\pi}n\over P})l}dl={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\delta\left(\omega-{2{\pi}n\over P}\right) } @noindent In the last step, we used the fact that the complex exponential is a periodic function, that @mymath{n} is an integer and that as we defined in @ref{Fourier transform}, @mymath{\omega{\equiv}m\omega_0}, where @mymath{m} was an integer. The integral will be zero for any @mymath{\omega} that is not equal to @mymath{2{\pi}n/P}, a more complete explanation can be seen in @ref{Fourier series}. Therefore, while in the spatial domain the impulses had spacing of @mymath{P} (meters for example), in the frequency space, the spacing between the different impulses are @mymath{2\pi/P} cycles per meters. @node Convolution theorem, Sampling theorem, Dirac delta and comb, Frequency domain and Fourier operations @subsubsection Convolution theorem The convolution (shown with the @mymath{\ast} operator) of the two functions @mymath{f(l)} and @mymath{h(l)} is defined as: @dispmath{ c(l)\equiv[f{\ast}h](l)=\int_{-\infty}^{\infty}f(\tau)h(l-\tau)d\tau } @noindent See @ref{Convolution process} for a more detailed physical (pixel based) interpretation of this definition. The Fourier transform of convolution (@mymath{C(\omega)}) can be written as: @dispmath{ C(\omega)=\int_{-\infty}^{\infty}[f{\ast}h](l)e^{-i{\omega}l}dl= \int_{-\infty}^{\infty}f(\tau)\left[\int_{-\infty}^{\infty}h(l-\tau)e^{-i{\omega}l}dl\right]d\tau } @noindent To solve the inner integral, let's define @mymath{s{\equiv}l-\tau}, so that @mymath{ds=dl} and @mymath{l=s+\tau} then the inner integral becomes: @dispmath{ \int_{-\infty}^{\infty}h(l-\tau)e^{-i{\omega}l}dl= \int_{-\infty}^{\infty}h(s)e^{-i{\omega}(s+\tau)}ds=e^{-i{\omega}\tau}\int_{-\infty}^{\infty}h(s)e^{-i{\omega}s}ds=H(\omega)e^{-i{\omega}\tau} } @noindent where @mymath{H(\omega)} is the Fourier transform of @mymath{h(l)}. Substituting this result for the inner integral above, we get: @dispmath{ C(\omega)=H(\omega)\int_{-\infty}^{\infty}f(\tau)e^{-i{\omega}\tau}d\tau=H(\omega)F(\omega)=F(\omega)H(\omega) } @noindent where @mymath{F(\omega)} is the Fourier transform of @mymath{f(l)}. So multiplying the Fourier transform of two functions individually, we get the Fourier transform of their convolution. The convolution theorem also proves a relation between the convolutions in the frequency space. Let's define: @dispmath{D(\omega){\equiv}F(\omega){\ast}H(\omega)} @noindent Applying the inverse Fourier Transform or synthesis equation (@ref{Fourier transform}) to both sides and following the same steps above, we get: @dispmath{d(l)=f(l)h(l)} @noindent Where @mymath{d(l)} is the inverse Fourier transform of @mymath{D(\omega)}. We can therefore re-write the two equations above formally as the convolution theorem: @dispmath{ {\cal F}[f{\ast}h]={\cal F}[f]{\cal F}[h] } @dispmath{ {\cal F}[fh]={\cal F}[f]\ast{\cal F}[h] } Besides its usefulness in blurring an image by convolving it with a given kernel, the convolution theorem also enables us to do another very useful operation in data analysis: to match the blur (or PSF) between two images taken with different telescopes/cameras or under different atmospheric conditions. This process is also known as de-convolution. Let's take @mymath{f(l)} as the image with a narrower PSF (less blurry) and @mymath{c(l)} as the image with a wider PSF which appears more blurred. Also let's take @mymath{h(l)} to represent the kernel that should be convolved with the sharper image to create the more blurry image. Above, we proved the relation between these three images through the convolution theorem. But there, we assumed that @mymath{f(l)} and @mymath{h(l)} are known (given) and the convolved image is desired. In de-convolution, we have @mymath{f(l)} --the sharper image-- and @mymath{f*h(l)} --the more blurry image-- and we want to find the kernel @mymath{h(l)}. The solution is a direct result of the convolution theorem: @dispmath{ {\cal F}[h]={{\cal F}[f{\ast}h]\over {\cal F}[f]} \quad\quad {\rm or} \quad\quad h(l)={\cal F}^{-1}\left[{{\cal F}[f{\ast}h]\over {\cal F}[f]}\right] } While this works really nice, it has two problems: @itemize @item If @mymath{{\cal F}[f]} has any zero values, then the inverse Fourier transform will not be a number! @item If there is significant noise in the image, then the high frequencies of the noise are going to significantly reduce the quality of the final result. @end itemize A standard solution to both these problems is the Weiner de-convolution algorithm@footnote{@url{https://en.wikipedia.org/wiki/Wiener_deconvolution}}. @node Sampling theorem, Discrete Fourier transform, Convolution theorem, Frequency domain and Fourier operations @subsubsection Sampling theorem Our mathematical functions are continuous, however, our data collecting and measuring tools are discrete. Here we want to give a mathematical formulation for digitizing the continuous mathematical functions so that later, we can retrieve the continuous function from the digitized recorded input. Assuming that we have a continuous function @mymath{f(l)}, then we can define @mymath{f_s(l)} as the `sampled' @mymath{f(l)} through the Dirac comb (see @ref{Dirac delta and comb}): @dispmath{ f_s(l)=f(l){\rm III}_P=\displaystyle\sum_{n=-\infty}^{\infty}f(l)\delta(l-nP) } @noindent The discrete data-element @mymath{f_k} (for example, a pixel in an image), where @mymath{k} is an integer, can thus be represented as: @dispmath{f_k=\int_{-\infty}^{\infty}f_s(l)dl=\int_{-\infty}^{\infty}f(l)\delta(l-kP)dt=f(kP)} Note that in practice, our discrete data points are not found in this fashion. Each detector pixel (in an image for example) has an area and averages the signal it receives over that area, not a mathematical point as the Dirac @mymath{\delta} function defines. However, as long as the variation in the signal over one detector pixel is not significant, this can be a good approximation. Having put this issue to the side, we can now try to find the relation between the Fourier transforms of the un-sampled @mymath{f(l)} and the sampled @mymath{f_s(l)}. For a more clear notation, let's define: @dispmath{F_s(\omega)\equiv{\cal F}[f_s]} @dispmath{D(\omega)\equiv{\cal F}[{\rm III}_P]} @noindent Then using the Convolution theorem (see @ref{Convolution theorem}), @mymath{F_s(\omega)} can be written as: @dispmath{F_s(\omega)={\cal F}[f(l){\rm III}_P]=F(\omega){\ast}D(\omega)} @noindent Finally, from the definition of convolution and the Fourier transform of the Dirac comb (see @ref{Dirac delta and comb}), we get: @dispmath{ \eqalign{ F_s(\omega) &= \int_{-\infty}^{\infty}F(\omega)D(\omega-\mu)d\mu \cr &= {1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}F(\omega)\delta\left(\omega-\mu-{2{\pi}n\over P}\right)d\mu \cr &= {1\over P}\displaystyle\sum_{n=-\infty}^{\infty}F\left( \omega-{2{\pi}n\over P}\right).\cr } } @mymath{F(\omega)} was only a simple function, see @ref{samplingfreq}(left). However, from the sampled Fourier transform function we see that @mymath{F_s(\omega)} is the superposition of infinite copies of @mymath{F(\omega)} that have been shifted, see @ref{samplingfreq}(right). From the equation, it is clear that the shift in each copy is @mymath{2\pi/P}. @float Figure,samplingfreq @image{gnuastro-figures/samplingfreq, 15.2cm, , } @caption{Sampling causes infinite repetition in the frequency domain. FT is an abbreviation for `Fourier transform'. @mymath{\omega_m} represents the maximum frequency present in the input. @mymath{F(\omega)} is only symmetric on both sides of 0 when the input is real (not complex). In general @mymath{F(\omega)} is complex and thus cannot be simply plotted like this. Here we have assumed a real Gaussian @mymath{f(t)} which has produced a Gaussian @mymath{F(\omega)}.} @end float The input @mymath{f(l)} can have any distribution of frequencies in it. In the example of @ref{samplingfreq}(left), the input consisted of a range of frequencies equal to @mymath{\Delta\omega=2\omega_m}. Fortunately as @ref{samplingfreq}(right) shows, the assumed pixel size (@mymath{P}) we used to sample this hypothetical function was such that @mymath{2\pi/P>\Delta\omega}. The consequence is that each copy of @mymath{F(\omega)} has become completely separate from the surrounding copies. Such a digitized (sampled) data set is thus called @emph{over-sampled}. When @mymath{2\pi/P=\Delta\omega}, @mymath{P} is just small enough to finely separate even the largest frequencies in the input signal and thus it is known as @emph{critically-sampled}. Finally if @mymath{2\pi/P<\Delta\omega} we are dealing with an @emph{under-sampled} data set. In an under-sampled data set, the separate copies of @mymath{F(\omega)} are going to overlap and this will deprive us of recovering high constituent frequencies of @mymath{f(l)}. The effects of under-sampling in an image with high rates of change (for example a brick wall imaged from a distance) can clearly be visually seen and is known as @emph{aliasing}. When the input @mymath{f(l)} is composed of a finite range of frequencies, @mymath{f(l)} is known as a @emph{band-limited} function. The example in @ref{samplingfreq}(left) was a nice demonstration of such a case: for all @mymath{\omega<-\omega_m} or @mymath{\omega>\omega_m}, we have @mymath{F(\omega)=0}. Therefore, when the input function is band-limited and our detector's pixels are placed such that we have critically (or over-) sampled it, then we can exactly reproduce the continuous @mymath{f(l)} from the discrete or digitized samples. To do that, we just have to isolate one copy of @mymath{F(\omega)} from the infinite copies and take its inverse Fourier transform. This ability to exactly reproduce the continuous input from the sampled or digitized data leads us to the @emph{sampling theorem} which connects the inherent property of the continuous signal (its maximum frequency) to that of the detector (the spacing between its pixels). The sampling theorem states that the full (continuous) signal can be recovered when the pixel size (@mymath{P}) and the maximum constituent frequency in the signal (@mymath{\omega_m}) have the following relation@footnote{This equation is also shown in some places without the @mymath{2\pi}. Whether @mymath{2\pi} is included or not depends on how you define the frequency}: @dispmath{{2\pi\over P}>2\omega_m} @noindent This relation was first formulated by Harry Nyquist (1889 -- 1976 A.D.) in 1928 and formally proved in 1949 by Claude E. Shannon (1916 -- 2001 A.D.) in what is now known as the Nyquist-Shannon sampling theorem. In signal processing, the signal is produced (synthesized) by a transmitter and is received and de-coded (analyzed) by a receiver. Therefore producing a band-limited signal is necessary. In astronomy, we do not produce the shapes of our targets, we are only observers. Galaxies can have any shape and size, therefore ideally, our signal is not band-limited. However, since we are always confined to observing through an aperture, the aperture will cause a point source (for which @mymath{\omega_m=\infty}) to be spread over several pixels. This spread is quantitatively known as the point spread function or PSF. This spread does blur the image which is undesirable; however, for this analysis it produces the positive outcome that there will be a finite @mymath{\omega_m}. Though we should caution that any detector will have noise which will add lots of very high frequency (ideally infinite) changes between the pixels. However, the coefficients of those noise frequencies are usually exceedingly small. @node Discrete Fourier transform, Fourier operations in two dimensions, Sampling theorem, Frequency domain and Fourier operations @subsubsection Discrete Fourier transform As we have stated several times so far, the input image is a digitized, pixelated or discrete array of values (@mymath{f_s(l)}, see @ref{Sampling theorem}). The input is not a continuous function. Also, all our numerical calculations can only be done on a sampled, or discrete Fourier transform. Note that @mymath{F_s(\omega)} is not discrete, it is continuous. One way would be to find the analytic @mymath{F_s(\omega)}, then sample it at any desired ``freq-pixel''@footnote{We are using the made-up word ``freq-pixel'' so they are not confused with spatial domain ``pixels''.} spacing. However, this process would involve two steps of operations and computers in particular are not too good at analytic operations for the first step. So here, we will derive a method to directly find the `freq-pixel'ated @mymath{F_s(\omega)} from the pixelated @mymath{f_s(l)}. Let's start with the definition of the Fourier transform (see @ref{Fourier transform}): @dispmath{F_s(\omega)=\int_{-\infty}^{\infty}f_s(l)e^{-i{\omega}l}dl } @noindent From the definition of @mymath{f_s(\omega)} (using @mymath{x} instead of @mymath{n}) we get: @dispmath{ \eqalign{ F_s(\omega) &= \displaystyle\sum_{x=-\infty}^{\infty} \int_{-\infty}^{\infty}f(l)\delta(l-xP)e^{-i{\omega}l}dl \cr &= \displaystyle\sum_{x=-\infty}^{\infty} f_xe^{-i{\omega}xP} } } @noindent Where @mymath{f_x} is the value of @mymath{f(l)} on the point @mymath{x} or the value of the @mymath{x}th pixel. As shown in @ref{Sampling theorem} this function is infinitely periodic with a period of @mymath{2\pi/P}. So all we need is the values within one period: @mymath{0<\omega<2\pi/P}, see @ref{samplingfreq}. We want @mymath{X} samples within this interval, so the frequency difference between each frequency sample or freq-pixel is @mymath{1/XP}. Hence we will evaluate the equation above on the points at: @dispmath{\omega={u\over XP} \quad\quad u = 0, 1, 2, ..., X-1} @noindent Therefore the value of the freq-pixel @mymath{u} in the frequency domain is: @dispmath{F_u=\displaystyle\sum_{x=0}^{X-1} f_xe^{-i{ux\over X}} } @noindent Therefore, we see that for each freq-pixel in the frequency domain, we are going to need all the pixels in the spatial domain@footnote{So even if one pixel is a blank pixel (see @ref{Blank pixels}), all the pixels in the frequency domain will also be blank.}. If the input (spatial) pixel row is also @mymath{X} pixels wide, then we can exactly recover the @mymath{x}th pixel with the following summation: @dispmath{f_x={1\over X}\displaystyle\sum_{u=0}^{X-1} F_ue^{i{ux\over X}} } When the input pixel row (we are still only working on 1D data) has @mymath{X} pixels, then it is @mymath{L=XP} spatial units wide. @mymath{L}, or the length of the input data was defined in @ref{Fourier series} and @mymath{P} or the space between the pixels in the input was defined in @ref{Dirac delta and comb}. As we saw in @ref{Sampling theorem}, the input (spatial) pixel spacing (@mymath{P}) specifies the range of frequencies that can be studied and in @ref{Fourier series} we saw that the length of the (spatial) input, (@mymath{L}) determines the resolution (or size of the freq-pixels) in our discrete Fourier transformed image. Both result from the fact that the frequency domain is the inverse of the spatial domain. @node Fourier operations in two dimensions, Edges in the frequency domain, Discrete Fourier transform, Frequency domain and Fourier operations @subsubsection Fourier operations in two dimensions Once all the relations in the previous sections have been clearly understood in one dimension, it is very easy to generalize them to two or even more dimensions since each dimension is by definition independent. Previously we defined @mymath{l} as the continuous variable in 1D and the inverse of the period in its direction to be @mymath{\omega}. Let's show the second spatial direction with @mymath{m} the the inverse of the period in the second dimension with @mymath{\nu}. The Fourier transform in 2D (see @ref{Fourier transform}) can be written as: @dispmath{F(\omega, \nu)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} f(l, m)e^{-i({\omega}l+{\nu}m)}dl} @dispmath{f(l, m)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} F(\omega, \nu)e^{i({\omega}l+{\nu}m)}dl} The 2D Dirac @mymath{\delta(l,m)} is non-zero only when @mymath{l=m=0}. The 2D Dirac comb (or Dirac brush! See @ref{Dirac delta and comb}) can be written in units of the 2D Dirac @mymath{\delta}. For most image detectors, the sides of a pixel are equal in both dimensions. So @mymath{P} remains unchanged, if a specific device is used which has non-square pixels, then for each dimension a different value should be used. @dispmath{{\rm III}_P(l, m)\equiv\displaystyle\sum_{j=-\infty}^{\infty} \displaystyle\sum_{k=-\infty}^{\infty} \delta(l-jP, m-kP) } The Two dimensional Sampling theorem (see @ref{Sampling theorem}) is thus very easily derived as before since the frequencies in each dimension are independent. Let's take @mymath{\nu_m} as the maximum frequency along the second dimension. Therefore the two dimensional sampling theorem says that a 2D band-limited function can be recovered when the following conditions hold@footnote{If the pixels are not a square, then each dimension has to use the respective pixel size, but since most detectors have square pixels, we assume so here too}: @dispmath{ {2\pi\over P} > 2\omega_m \quad\quad\quad {\rm and} \quad\quad\quad {2\pi\over P} > 2\nu_m} Finally, let's represent the pixel counter on the second dimension in the spatial and frequency domains with @mymath{y} and @mymath{v} respectively. Also let's assume that the input image has @mymath{Y} pixels on the second dimension. Then the two dimensional discrete Fourier transform and its inverse (see @ref{Discrete Fourier transform}) can be written as: @dispmath{F_{u,v}=\displaystyle\sum_{x=0}^{X-1}\displaystyle\sum_{y=0}^{Y-1} f_{x,y}e^{-i({ux\over X}+{vy\over Y})} } @dispmath{f_{x,y}={1\over XY}\displaystyle\sum_{u=0}^{X-1}\displaystyle\sum_{v=0}^{Y-1} F_{u,v}e^{i({ux\over X}+{vy\over Y})} } @node Edges in the frequency domain, , Fourier operations in two dimensions, Frequency domain and Fourier operations @subsubsection Edges in the frequency domain With a good grasp of the frequency domain, we can revisit the problem of convolution on the image edges, see @ref{Edges in the spatial domain}. When we apply the convolution theorem (see @ref{Convolution theorem}) to convolve an image, we first take the discrete Fourier transforms (DFT, @ref{Discrete Fourier transform}) of both the input image and the kernel, then we multiply them with each other and then take the inverse DFT to construct the convolved image. Of course, in order to multiply them with each other in the frequency domain, the two images have to be the same size, so let's assume that we pad the kernel (it is usually smaller than the input image) with zero valued pixels in both dimensions so it becomes the same size as the input image before the DFT. Having multiplied the two DFTs, we now apply the inverse DFT which is where the problem is usually created. If the DFT of the kernel only had values of 1 (unrealistic condition!) then there would be no problem and the inverse DFT of the multiplication would be identical with the input. However in real situations, the kernel's DFT has a maximum of 1 (because the sum of the kernel has to be one, see @ref{Convolution process}) and decreases something like the hypothetical profile of @ref{samplingfreq}. So when multiplied with the input image's DFT, the coefficients or magnitudes (see @ref{Circles and the complex plane}) of the smallest frequency (or the sum of the input image pixels) remains unchanged, while the magnitudes of the higher frequencies are significantly reduced. As we saw in @ref{Sampling theorem}, the Fourier transform of a discrete input will be infinitely repeated. In the final inverse DFT step, the input is in the frequency domain (the multiplied DFT of the input image and the kernel DFT). So the result (our output convolved image) will be infinitely repeated in the spatial domain. In order to accurately reconstruct the input image, we need all the frequencies with the correct magnitudes. However, when the magnitudes of higher frequencies are decreased, longer periods (shorter frequencies) will dominate in the reconstructed pixel values. Therefore, when constructing a pixel on the edge of the image, the newly empowered longer periods will look beyond the input image edges and will find the repeated input image there. So if you convolve an image in this fashion using the convolution theorem, when a bright object exists on one edge of the image, its blurred wings will be present on the other side of the convolved image. This is often termed as circular convolution or cyclic convolution. So, as long as we are dealing with convolution in the frequency domain, there is nothing we can do about the image edges. The least we can do is to eliminate the ghosts of the other side of the image. So, we add zero valued pixels to both the input image and the kernel in both dimensions so the image that will be convolved has a size equal to the sum of both images in each dimension. Of course, the effect of this zero-padding is that the sides of the output convolved image will become dark. To put it another way, the edges are going to drain the flux from nearby objects. But at least it is consistent across all the edges of the image and is predictable. In Convolve, you can see the padded images when inspecting the frequency domain convolution steps with the @option{--viewfreqsteps} option. @node Spatial vs. Frequency domain, Convolution kernel, Frequency domain and Fourier operations, Convolve @subsection Spatial vs. Frequency domain With the discussions above it might not be clear when to choose the spatial domain and when to choose the frequency domain. Here we will try to list the benefits of each. @noindent The spatial domain, @itemize @item Can correct for the edge effects of convolution, see @ref{Edges in the spatial domain}. @item Can operate on blank pixels. @item Can be faster than frequency domain when the kernel is small (in terms of the number of pixels on the sides). @end itemize @noindent The frequency domain, @itemize @item Will be much faster when the image and kernel are both large. @end itemize @noindent As a general rule of thumb, when working on an image of modeled profiles use the frequency domain and when working on an image of real (observed) objects use the spatial domain (corrected for the edges). The reason is that if you apply a frequency domain convolution to a real image, you are going to loose information on the edges and generally you don't want large kernels. But when you have made the profiles in the image yourself, you can just make a larger input image and crop the central parts to completely remove the edge effect, see @ref{If convolving afterwards}. Also due to oversampling, both the kernels and the images can become very large and the speed boost of frequency domain convolution will significantly improve the processing time, see @ref{Oversampling}. @node Convolution kernel, Invoking astconvolve, Spatial vs. Frequency domain, Convolve @subsection Convolution kernel All the programs that need convolution will need to be given a convolution kernel file and extension. In most cases (other than Convolve, see @ref{Convolve}) the kernel file name is optional. However, the extension is necessary and must be specified either on the command-line or at least one of the configuration files (see @ref{Configuration files}). Within Gnuastro, there are two ways to create a kernel image: @itemize @item MakeProfiles: You can use MakeProfiles to create a parametric (based on a radial function) kernel, see @ref{MakeProfiles}. By default MakeProfiles will make the Gaussian and Moffat profiles in a separate file so you can feed it into any of the programs. @item ConvertType: You can write your own desired kernel into a text file table and convert it to a FITS file with ConvertType, see @ref{ConvertType}. Just be careful that the kernel has to have an odd number of pixels along its two axes, see @ref{Convolution process}. All the programs that do convolution will normalize the kernel internally, so if you choose this option, you don't have to worry about normalizing the kernel. Only within Convolve, there is an option to disable normalization, see @ref{Invoking astconvolve}. @end itemize @noindent The two options to specify a kernel file name and its extension are shown below. These are common between all the programs that will do convolution. @table @option @item -k STR @itemx --kernel=STR The convolution kernel file name. The @code{BITPIX} (data type) value of this file can be any standard type and it does not necessarily have to be normalized. Several operations will be done on the kernel image prior to the program's processing: @itemize @item It will be converted to floating point type. @item All blank pixels (see @ref{Blank pixels}) will be set to zero. @item It will be normalized so the sum of its pixels equal unity. @item It will be flipped so the convolved image has the same orientation. This is only relevant if the kernel is not circular. See @ref{Convolution process}. @end itemize @item -U STR @itemx --khdu=STR The convolution kernel HDU. Although the kernel file name is optional, before running any of the programs, they need to have a value for @option{--khdu} even if the default kernel is to be used. So be sure to keep its value in at least one of the configuration files (see @ref{Configuration files}). By default, the system configuration file has a value. @end table @node Invoking astconvolve, , Convolution kernel, Convolve @subsection Invoking Convolve Convolve an input image with a known kernel or make the kernel necessary to match two PSFs. The general template for Convolve is: @example $ astconvolve [OPTION...] ASTRdata @end example @noindent One line examples: @example ## Convolve mockimg.fits with psf.fits: $ astconvolve --kernel=psf.fits mockimg.fits ## Convolve in the spatial domain: $ astconvolve observedimg.fits --kernel=psf.fits --domain=spatial ## Find the kernel to match sharper and blurry PSF images: $ astconvolve --kernel=sharperimage.fits --makekernel=10 \ blurryimage.fits @end example The only argument accepted by Convolve is an input image file. Some of the options are the same between Convolve and some other Gnuastro programs. Therefore, to avoid repetition, they will not be repeated here. For the full list of options shared by all Gnuastro programs, please see @ref{Common options}. In particular, in the spatial domain convolve uses Gnuastro's tessellation, see @ref{Tessellation} and the common options related to that in @ref{Processing options}. Here we will only explain the options particular to Convolve. Run Convolve with @option{--help} in order to see the full list of options Convolve accepts, irrespective of where they are explained in this book. @table @option @item --nokernelflip Do not flip the kernel after reading it the spatial domain convolution. This can be useful if the flipping has already been applied to the kernel. @item --nokernelnorm Do not normalize the kernel after reading it, such that the sum of its pixels is unity. @item -d STR @itemx --domain=STR @cindex Discrete Fourier transform The domain to use for the convolution. The acceptable values are `@code{spatial}' and `@code{frequency}', corresponding to the respective domain. For large images, the frequency domain process will be more efficient than convolving in the spatial domain. However, the edges of the image will loose some flux (see @ref{Edges in the spatial domain}) and the image must not contain any blank pixels, see @ref{Spatial vs. Frequency domain}. @item --checkfreqsteps With this option a file with the initial name of the output file will be created that is suffixed with @file{_freqsteps.fits}, all the steps done to arrive at the final convolved image are saved as extensions in this file. The extensions in order are: @enumerate @item The padded input image. In frequency domain convolution the two images (input and convolved) have to be the same size and both should be padded by zeros. @item The padded kernel, similar to the above. @item @cindex Phase angle @cindex Complex numbers @cindex Numbers, complex @cindex Fourier spectrum @cindex Spectrum, Fourier The Fourier spectrum of the forward Fourier transform of the input image. Note that the Fourier transform is a complex operation (and not view able in one image!) So we either have to show the `Fourier spectrum' or the `Phase angle'. For the complex number @mymath{a+ib}, the Fourier spectrum is defined as @mymath{\sqrt{a^2+b^2}} while the phase angle is defined as @mymath{\arctan(b/a)}. @item The Fourier spectrum of the forward Fourier transform of the kernel image. @item The Fourier spectrum of the multiplied (through complex arithmetic) transformed images. @item @cindex Round-off error @cindex Floating point round-off error @cindex Error, floating point round-off The inverse Fourier transform of the multiplied image. If you open it, you will see that the convolved image is now in the center, not on one side of the image as it started with (in the padded image of the first extension). If you are working on a mock image which originally had pixels of precisely 0.0, you will notice that in those parts that your convolved profile(s) did not convert, the values are now @mymath{\sim10^{-18}}, this is due to floating-point round off errors. Therefore in the final step (when cropping the central parts of the image), we also remove any pixel with a value less than @mymath{10^{-17}}. @end enumerate @item --noedgecorrection Do not correct the edge effect in spatial domain convolution. For a full discussion, please see @ref{Edges in the spatial domain}. @item -m INT @itemx --makekernel=INT (@option{=INT}) If this option is called, Convolve will do de-convolution (see @ref{Convolution theorem}). The image specified by the @option{--kernel} option is assumed to be the sharper (less blurry) image and the input image is assumed to be the more blurry image. The value given to this option will be used as the maximum radius of the kernel. Any pixel in the final kernel that is larger than this distance from the center will be set to zero. The two images must have the same size. Noise has large frequencies which can make the result less reliable for the higher frequencies of the final result. So all the frequencies which have a spectrum smaller than the value given to the @option{minsharpspec} option in the sharper input image are set to zero and not divided. This will cause the wings of the final kernel to be flatter than they would ideally be which will make the convolved image result unreliable if it is too high. Some notes to take into account for a good result: @itemize @item Choose a bright (unsaturated) star and use a region box (with Crop for example, see @ref{Crop}) that is sufficiently above the noise. @item Use Warp (see @ref{Warp}) to warp the pixel grid so the star's center is exactly on the center of the central pixel in the cropped image. This will certainly slightly degrade the result, however, it is necessary. If there are multiple good stars, you can shift all of them, then normalize them (so the sum of each star's pixels is one) and then take their average to decrease this effect. @item The shifting might move the center of the star by one pixel in any direction, so crop the central pixel of the warped image to have a clean image for the de-convolution. @end itemize @item -c @itemx --minsharpspec (@option{=FLT}) The minimum frequency spectrum (or coefficient, or pixel value in the frequency domain image) to use in deconvolution, see the explanations under the @option{--makekernel} option for more information. @end table @node Warp, , Convolve, Data manipulation @section Warp Image warping is the process of mapping the pixels of one image onto a new pixel grid. This process is sometimes known as transformation, however following the discussion of Heckbert 1989@footnote{Paul S. Heckbert. 1989. @emph{Fundamentals of Texture mapping and Image Warping}, Master's thesis at University of California, Berkeley.} we will not be using that term because it can be confused with only pixel value or flux transformations. Here we specifically mean the pixel grid transformation which is better conveyed with `warp'. @cindex Gravitational lensing Image wrapping is a very important step in astronomy, both in observational data analysis and in simulating modeled images. In modeling, warping an image is necessary when we want to apply grid transformations to the initial models, for example in simulating gravitational lensing (Radial warpings are not yet included in Warp). Observational reasons for warping an image are listed below: @itemize @cindex Signal to noise ratio @item @strong{Noise:} Most scientifically interesting targets are inherently faint (have a very low Signal to noise ratio). Therefore one short exposure is not enough to detect such objects that are drowned deeply in the noise. We need multiple exposures so we can add them together and increase the objects' signal to noise ratio. Keeping the telescope fixed on one field of the sky is practically impossible. Therefore very deep observations have to put into the same grid before adding them. @cindex Mosaicing @cindex Image mosaic @item @strong{Resolution:} If we have multiple images of one patch of the sky (hopefully at multiple orientations) we can warp them to the same grid. The multiple orientations will allow us to `guess' the values of pixels on an output pixel grid that has smaller pixel sizes and thus increase the resolution of the output. This process of merging multiple observations is known as Mosaicing. @cindex Cosmic rays @item @strong{Cosmic rays:} Cosmic rays can randomly fall on any part of an image. If they collide vertically with the camera, they are going to create a very sharp and bright spot that in most cases can be separated easily@footnote{All astronomical targets are blurred with the PSF, see @ref{PSF}, however a cosmic ray is not and so it is very sharp (it suddenly stops at one pixel).}. However, depending on the depth of the camera pixels, and the angle that a cosmic rays collides with it, it can cover a line-like larger area on the CCD which makes the detection using their sharp edges very hard and error prone. One of the best methods to remove cosmic rays is to compare multiple images of the same field. To do that, we need all the images to be on the same pixel grid. @cindex Optical distortion @cindex Distortion, optical @item @strong{Optical distortion:} (Not yet included in Warp) In wide field images, the optical distortion that occurs on the outer parts of the focal plane will make accurate comparison of the objects at various locations impossible. It is therefore necessary to warp the image and correct for those distortions prior to the analysis. @cindex ACS @cindex CCD @cindex WFC3 @cindex Wide Field Camera 3 @cindex Charge-coupled device @cindex Hubble Space Telescope @cindex Advanced camera for surveys @item @strong{Detector not on focal plane:} In some cases (like the Hubble Space Telescope ACS and WFC3 cameras), the CCD might be tilted compared to the focal plane, therefore the recorded CCD pixels have to be projected onto the focal plane before further analysis. @end itemize @menu * Warping basics:: Basics of coordinate transformation. * Merging multiple warpings:: How to merge multiple matrices. * Resampling:: Warping an image is re-sampling it. * Invoking astwarp:: Arguments and options for Warp. @end menu @node Warping basics, Merging multiple warpings, Warp, Warp @subsection Warping basics @cindex Scaling @cindex Coordinate transformation Let's take @mymath{\left[\matrix{u&v}\right]} as the coordinates of a point in the input image and @mymath{\left[\matrix{x&y}\right]} as the coordinates of that same point in the output image@footnote{These can be any real number, we are not necessarily talking about integer pixels here.}. The simplest form of coordinate transformation (or warping) is the scaling of the coordinates, let's assume we want to scale the first axis by @mymath{M} and the second by @mymath{N}, the output coordinates of that point can be calculated by @dispmath{\left[\matrix{x\cr y}\right]= \left[\matrix{Mu\cr Nv}\right]= \left[\matrix{M&0\cr0&N}\right]\left[\matrix{u\cr v}\right]} @cindex Matrix @cindex Multiplication, Matrix @cindex Rotation of coordinates @noindent Note that these are matrix multiplications. We thus see that we can represent any such grid warping as a matrix. Another thing we can do with this @mymath{2\times2} matrix is to rotate the output coordinate around the common center of both coordinates. If the output is rotated anticlockwise by @mymath{\theta} degrees from the positive (to the right) horizontal axis, then the warping matrix should become: @dispmath{\left[\matrix{x\cr y}\right]= \left[\matrix{ucos\theta-vsin\theta\cr usin\theta+vcos\theta}\right]= \left[\matrix{cos\theta&-sin\theta\cr sin\theta&cos\theta}\right] \left[\matrix{u\cr v}\right] } @cindex Flip coordinates @noindent We can also flip the coordinates around the first axis, the second axis and the coordinate center with the following three matrices respectively: @dispmath{\left[\matrix{1&0\cr0&-1}\right]\quad\quad \left[\matrix{-1&0\cr0&1}\right]\quad\quad \left[\matrix{-1&0\cr0&-1}\right]} @cindex Shear @noindent The final thing we can do with this definition of a @mymath{2\times2} warping matrix is shear. If we want the output to be sheared along the first axis with @mymath{A} and along the second with @mymath{B}, then we can use the matrix: @dispmath{\left[\matrix{1&A\cr B&1}\right]} @noindent To have one matrix representing any combination of these steps, you use matrix multiplication, see @ref{Merging multiple warpings}. So any combinations of these transformations can be displayed with one @mymath{2\times2} matrix: @dispmath{\left[\matrix{a&b\cr c&d}\right]} @cindex Wide Field Camera 3 @cindex Hubble Space Telescope @cindex Advanced Camera for Surveys The transformations above can cover a lot of the needs of most coordinate transformations. However they are limited to mapping the point @mymath{[\matrix{0&0}]} to @mymath{[\matrix{0&0}]}. Therefore they are useless if you want one coordinate to be shifted compared to the other one. They are also space invariant, meaning that all the coordinates in the image will receive the same transformation. In other words, all the pixels in the output image will have the same area if placed over the input image. So transformations which require varying output pixel sizes like projections cannot be applied through this @mymath{2\times2} matrix either (for example for the tilted ACS and WFC3 camera detectors on board the Hubble space telescope). @cindex M@"obius, August. F. @cindex Homogeneous coordinates @cindex Coordinates, homogeneous To add these further capabilities, namely translation and projection, we use the homogeneous coordinates. They were defined about 200 years ago by August Ferdinand M@"obius (1790 -- 1868). For simplicity, we will only discuss points on a 2D plane and avoid the complexities of higher dimensions. We cannot provide a deep mathematical introduction here, interested readers can get a more detailed explanation from Wikipedia@footnote{@url{http://en.wikipedia.org/wiki/Homogeneous_coordinates}} and the references therein. By adding an extra coordinate to a point we can add the flexibility we need. The point @mymath{[\matrix{x&y}]} can be represented as @mymath{[\matrix{xZ&yZ&Z}]} in homogeneous coordinates. Therefore multiplying all the coordinates of a point in the homogeneous coordinates with a constant will give the same point. Put another way, the point @mymath{[\matrix{x&y&Z}]} corresponds to the point @mymath{[\matrix{x/Z&y/Z}]} on the constant @mymath{Z} plane. Setting @mymath{Z=1}, we get the input image plane, so @mymath{[\matrix{u&v&1}]} corresponds to @mymath{[\matrix{u&v}]}. With this definition, the transformations above can be generally written as: @dispmath{\left[\matrix{x\cr y\cr 1}\right]= \left[\matrix{a&b&0\cr c&d&0\cr 0&0&1}\right] \left[\matrix{u\cr v\cr 1}\right]} @noindent @cindex Affine Transformation @cindex Transformation, affine We thus acquired 4 extra degrees of freedom. By giving non-zero values to the zero valued elements of the last column we can have translation (try the matrix multiplication!). In general, any coordinate transformation that is represented by the matrix below is known as an affine transformation@footnote{@url{http://en.wikipedia.org/wiki/Affine_transformation}}: @dispmath{\left[\matrix{a&b&c\cr d&e&f\cr 0&0&1}\right]} @cindex Homography @cindex Projective transformation @cindex Transformation, projective We can now consider translation, but the affine transform is still spatially invariant. Giving non-zero values to the other two elements in the matrix above gives us the projective transformation or Homography@footnote{@url{http://en.wikipedia.org/wiki/Homography}} which is the most general type of transformation with the @mymath{3\times3} matrix: @dispmath{\left[\matrix{x'\cr y'\cr w}\right]= \left[\matrix{a&b&c\cr d&e&f\cr g&h&1}\right] \left[\matrix{u\cr v\cr 1}\right]} @noindent So the output coordinates can be calculated from: @dispmath{x={x' \over w}={au+bv+c \over gu+hv+1}\quad\quad\quad\quad y={y' \over w}={du+ev+f \over gu+hv+1}} Thus with Homography we can change the sizes of the output pixels on the input plane, giving a `perspective'-like visual impression. This can be quantitatively seen in the two equations above. When @mymath{g=h=0}, the denominator is independent of @mymath{u} or @mymath{v} and thus we have spatial invariance. Homography preserves lines at all orientations. A very useful fact about Homography is that its inverse is also a Homography. These two properties play a very important role in the implementation of this transformation. A short but instructive and illustrated review of affine, projective and also bi-linear mappings is provided in Heckbert 1989@footnote{Paul S. Heckbert. 1989. @emph{Fundamentals of Texture mapping and Image Warping}, Master's thesis at University of California, Berkeley. Note that since points are defined as row vectors there, the matrix is the transpose of the one discussed here.}. @node Merging multiple warpings, Resampling, Warping basics, Warp @subsection Merging multiple warpings @cindex Commutative property @cindex Matrix multiplication @cindex Multiplication, matrix @cindex Non-commutative operations @cindex Operations, non-commutative In @ref{Warping basics} we saw how a basic warp/transformation can be represented with a matrix. To make more complex warpings (for example to define a translation, rotation and scale as one warp) the individual matrices have to be multiplied through matrix multiplication. However matrix multiplication is not commutative, so the order of the set of matrices you use for the multiplication is going to be very important. The first warping should be placed as the left-most matrix. The second warping to the right of that and so on. The second transformation is going to occur on the warped coordinates of the first. As an example for merging a few transforms into one matrix, the multiplication below represents the rotation of an image about a point @mymath{[\matrix{U&V}]} anticlockwise from the horizontal axis by an angle of @mymath{\theta}. To do this, first we take the origin to @mymath{[\matrix{U&V}]} through translation. Then we rotate the image, then we translate it back to where it was initially. These three operations can be merged in one operation by calculating the matrix multiplication below: @dispmath{\left[\matrix{1&0&U\cr0&1&V\cr{}0&0&1}\right] \left[\matrix{cos\theta&-sin\theta&0\cr sin\theta&cos\theta&0\cr 0&0&1}\right] \left[\matrix{1&0&-U\cr0&1&-V\cr{}0&0&1}\right]} @node Resampling, Invoking astwarp, Merging multiple warpings, Warp @subsection Resampling @cindex Pixel @cindex Camera @cindex Detector @cindex Sampling @cindex Resampling @cindex Pixel mixing @cindex Photoelectrons @cindex Picture element @cindex Mixing pixel values A digital image is composed of discrete `picture elements' or `pixels'. When a real image is created from a camera or detector, each pixel's area is used to store the number of photo-electrons that were created when incident photons collided with that pixel's surface area. This process is called the `sampling' of a continuous or analog data into digital data. When we change the pixel grid of an image or warp it as we defined in @ref{Warping basics}, we have to `guess' the flux value of each pixel on the new grid based on the old grid, or re-sample it. Because of the `guessing', any form of warping on the data is going to degrade the image and mix the original pixel values with each other. So if an analysis can be done on an un-warped data image, it is best to leave the image untouched and pursue the analysis. However as discussed in @ref{Warp} this is not possible most of the times, so we have to accept the problem and re-sample the image. @cindex Point pixels @cindex Interpolation @cindex Bicubic interpolation @cindex Signal to noise ratio @cindex Bi-linear interpolation @cindex Interpolation, bicubic @cindex Interpolation, bi-linear In most applications of image processing, it is sufficient to consider each pixel to be a point and not an area. This assumption can significantly speed up the processing of an image and also the simplicity of the code. It is a fine assumption when the signal to noise ratio of the objects are very large. The question will then be one of interpolation because you have multiple points distributed over the output image and you want to find the values at the pixel centers. To increase the accuracy, you might also sample more than one point from within a pixel giving you more points for a more accurate interpolation in the output grid. @cindex Image edges @cindex Edges, image However, interpolation has several problems. The first one is that it will depend on the type of function you want to assume for the interpolation. For example you can choose a bi-linear or bi-cubic (the `bi's are for the 2 dimensional nature of the data) interpolation method. For the latter there are various ways to set the constants@footnote{see @url{http://entropymine.com/imageworsener/bicubic/} for a nice introduction.}. Such functional interpolation functions can fail seriously on the edges of an image. They will also need normalization so that the flux of the objects before and after the warpings are comparable. The most basic problem with such techniques is that they are based on a point while a detector pixel is an area. They add a level of subjectivity to the data (make more assumptions through the functions than the data can handle). For most applications this is fine, but in scientific applications where detection of the faintest possible galaxies or fainter parts of bright galaxies is our aim, we cannot afford this loss. Because of these reasons Warp will not use such interpolation techniques. @cindex Drizzle @cindex Pixel mixing @cindex Exact area resampling Warp will do interpolation based on ``pixel mixing''@footnote{For a graphic demonstration see @url{http://entropymine.com/imageworsener/pixelmixing/}.} or ``area resampling''. This is also what the Hubble Space Telescope pipeline calls ``Drizzling''@footnote{@url{http://en.wikipedia.org/wiki/Drizzle_(image_processing)}}. This technique requires no functions, it is thus non-parametric. It is also the closest we can get (make least assumptions) to what actually happens on the detector pixels. The basic idea is that you reverse-transform each output pixel to find which pixels of the input image it covers and what fraction of the area of the input pixels are covered. To find the output pixel value, you simply sum the value of each input pixel weighted by the overlap fraction (between 0 to 1) of the output pixel and that input pixel. Through this process, pixels are treated as an area not as a point (which is how detectors create the image), also the brightness (see @ref{Flux Brightness and magnitude}) of an object will be left completely unchanged. If there are very high spatial-frequency signals in the image (for example fringes) which vary on a scale smaller than your output image pixel size, pixel mixing can cause ailiasing@footnote{@url{http://en.wikipedia.org/wiki/Aliasing}}. So if the input image has fringes, they have to be calculated and removed separately (which would naturally be done in any astronomical application). Because of the PSF no astronomical target has a sharp change in the signal so this issue is less important for astronomical applications, see @ref{PSF}. @node Invoking astwarp, , Resampling, Warp @subsection Invoking Warp Warp an input dataset into a new grid. Any homographic warp (for example scaling, rotation, translation, projection) is acceptable, see @ref{Warping basics} for the definitions. The general template for invoking Warp is: @example $ astwarp [OPTIONS...] InputImage @end example @noindent One line examples: @example ## Rotate and then scale input image: $ astwarp --rotate=37.92 --scale=0.8 image.fits ## Scale, then translate the input image: $ astwarp --scale 8/3 --translate 2.1 image.fits ## Align raw image with celestial coordinates: $ astwarp --align rawimage.fits --output=aligned.fits ## Directly input a custom warping matrix (using fraction): $ astwarp --matrix=1/5,0,4/10,0,1/5,4/10,0,0,1 image.fits ## Directly input a custom warping matrix, with final numbers: $ astwarp --matrix="0.7071,-0.7071, 0.7071,0.7071" image.fits @end example If any processing is to be done, Warp can accept one file as input. As in all Gnuastro programs, when an output is not explicitly set with the @option{--output} option, the output filename will be set automatically based on the operation, see @ref{Automatic output}. For the full list of general options to all Gnuastro programs (including Warp), please see @ref{Common options}. To be the most accurate, the input image will be read as a 64-bit double precision floating point dataset and all internal processing is done in this format (including the raw output type). You can use the common @option{--type} option to write the output in any type you want, see @ref{Numeric data types}. Warps must be specified as command-line options, either as (possibly multiple) modular warpings (for example @option{--rotate}, or @option{--scale}), or directly as a single raw matrix (with @option{--matrix}). If specified together, the latter (direct matrix) will take precedence and all the modular warpings will be ignored. Any number of modular warpings can be specified on the command-line and configuration files. If more than one modular warping is given, all will be merged to create one warping matrix. As described in @ref{Merging multiple warpings}, matrix multiplication is not commutative, so the order of specifying the modular warpings on the command-line, and/or configuration files makes a difference (see @ref{Configuration file precedence}). The full list of modular warpings and the other options particular to Warp are described below. The values to the warping options (modular warpings as well as @option{--matrix}), are a sequence of at least one number. Each number in this sequence is separated from the next by a comma (@key{,}). Each number can also be written as a single fraction (with a forward-slash @key{/} between the numerator and denominator). Space and Tab characters are permitted between any two numbers, just don't forget to quote the whole value. Otherwise, the value will not be fully passed onto the option. See the examples above as a demonstration. @cindex FITS standard Based on the FITS standard, integer values are assigned to the center of a pixel and the coordinate [1.0, 1.0] is the center of the first pixel (bottom left of the image when viewed in SAO ds9). So the coordinate center [0.0, 0.0] is half a pixel away (in each axis) from the bottom left vertex of the first pixel. The resampling that is done in Warp (see @ref{Resampling}) is done on the coordinate axes and thus directly depends on the coordinate center. In some situations this if fine, for example when rotating/aligning a real image, all the edge pixels will be similarly affected. But in other situations (for example when scaling an over-sampled mock image to its intended resolution, this is not desired: you want the center of the coordinates to be on the corner of the pixel. In such cases, you can use the @option{--centeroncorner} option which will shift the center by @mymath{0.5} before the main warp, then shift it back by @mymath{-0.5} after the main warp, see below. @table @option @item -a @itemx --align Align the image and celestial (WCS) axes given in the input. After it, the vertical image direction (when viewed in SAO ds9) corresponds to the declination and the horizontal axis is the inverse of the Right Ascension (RA). The inverse of the RA is chosen so the image can correspond to what you would actually see on the sky and is common in most survey images. Align is internally treated just like a rotation (@option{--rotation}), but uses the input image's WCS to find the rotation angle. Thus, if you have rotated the image before calling @option{--align}, you might get unexpected results (because the rotation is defined on the original WCS). @item -r FLT @itemx --rotate=FLT Rotate the input image by the given angle in degrees: @mymath{\theta} in @ref{Warping basics}. Note that commonly, the WCS structure of the image is set such that the RA is the inverse of the image horizontal axis which increases towards the right in the FITS standard and as viewed by SAO ds9. So the default center for rotation is on the right of the image. If you want to rotate about other points, you have to translate the warping center first (with @option{--translate}) then apply your rotation and then return the center back to the original position (with another call to @option{--translate}, see @ref{Merging multiple warpings}. @item -s FLT[,FLT] @itemx --scale=FLT[,FLT] Scale the input image by the given factor(s): @mymath{M} and @mymath{N} in @ref{Warping basics}. If only one value is given, then both image axes will be scaled with the given value. When two values are given (separated by a comma), the first will be used to scale the first axis and the second will be used for the second axis. If you only need to scale one axis, use @option{1} for the axis you don't need to scale. The value(s) can also be written (on the command-line or in configuration files) as a fraction. @item -f FLT[,FLT] @itemx --flip=FLT[,FLT] Flip the input image around the given axis(s). If only one value is given, then both image axes are flipped. When two values are given (separated by a comma), you can choose which axis to flip over. @option{--flip} only takes values @code{0} (for no flip), or @code{1} (for a flip). Hence, if you want to flip by the second axis only, use @option{--flip=0,1}. @item -e FLT[,FLT] @itemx --shear=FLT[,FLT] Shear the input image by the given value(s): @mymath{A} and @mymath{B} in @ref{Warping basics}. If only one value is given, then both image axes will be sheared with the given value. When two values are given (separated by a comma), the first will be used to shear the first axis and the second will be used for the second axis. If you only need to shear along one axis, use @option{0} for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. @item -t FLT[,FLT] @itemx --translate=FLT[,FLT] Translate (move the center of coordinates) the input image by the given value(s): @mymath{c} and @mymath{f} in @ref{Warping basics}. If only one value is given, then both image axes will be translated by the given value. When two values are given (separated by a comma), the first will be used to translate the first axis and the second will be used for the second axis. If you only need to translate along one axis, use @option{0} for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. @item -p FLT[,FLT] @itemx --project=FLT[,FLT] Apply a projection to the input image by the given values(s): @mymath{g} and @mymath{h} in @ref{Warping basics}. If only one value is given, then projection will apply to both axes with the given value. When two values are given (separated by a comma), the first will be used to project the first axis and the second will be used for the second axis. If you only need to project along one axis, use @option{0} for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. @item -m STR @itemx --matrix=STR The warp/transformation matrix. All the elements in this matrix must be separated by comas(@key{,}) characters and as described above, you can also use fractions (a forward-slash between two numbers). The transformation matrix can be either a 2 by 2 (4 numbers), or a 3 by 3 (9 numbers) array. In the former case (if a 2 by 2 matrix is given), then it is put into a 3 by 3 matrix (see @ref{Warping basics}). @cindex NaN The determinant of the matrix has to be non-zero and it must not contain any non-number values (for example infinities or NaNs). The elements of the matrix have to be written row by row. So for the general Homography matrix of @ref{Warping basics}, it should be called with @command{--matrix=a,b,c,d,e,f,g,h,1}. The raw matrix takes precedence over all the modular warping options listed above, so if it is called with any number of modular warps, the latter are ignored. @item -c @itemx --centeroncorer Put the center of coordinates on the corner of the first (bottom-left when viewed in SAO ds9) pixel. This option is applied after the final warping matrix has been finalized: either through modular warpings or the raw matrix. See the explanation above for coordinates in the FITS standard to better understand this option and when it should be used. @item --hstartwcs=INT Specify the first header keyword number (line) that should be used to read the WCS information, see the full explanation in @ref{Invoking astcrop}. @item --hendwcs=INT Specify the last header keyword number (line) that should be used to read the WCS information, see the full explanation in @ref{Invoking astcrop}. @item -k @itemx --keepwcs @cindex WCSLIB @cindex World Coordinate System Do not correct the WCS information of the input image and save it untouched to the output image. By default the WCS (World Coordinate System) information of the input image is going to be corrected in the output image so the objects in the image are at the same WCS coordinates. But in some cases it might be useful to keep it unchanged (for example to correct alignments). @item -C FLT @itemx --coveredfrac=FLT Depending on the warp, the output pixels that cover pixels on the edge of the input image, or blank pixels in the input image, are not going to be fully covered by input data. With this option, you can specify the acceptable covered fraction of such pixels (any value between 0 and 1). If you only want output pixels that are fully covered by the input image area (and are not blank), then you can set @option{--coveredfrac=1}. Alternatively, a value of @code{0} will keep output pixels that are even infinitesimally covered by the input(so the sum of the pixels in the input and output images will be the same). @end table @node Data analysis, Modeling and fittings, Data manipulation, Top @chapter Data analysis Astronomical datasets (images or tables) contain very valuable information, the tools in this section can help in analyzing, extracting, and quantifying that information. For example getting general or specific statistics of the dataset (with @ref{Statistics}), detecting signal within a noisy dataset (with @ref{NoiseChisel}), or creating a catalog from an input dataset (with @ref{MakeCatalog}). @menu * Statistics:: Calculate dataset statistics. * NoiseChisel:: Detect objects in an image. * MakeCatalog:: Catalog from input and labeled images. * Match:: Match two datasets. @end menu @node Statistics, NoiseChisel, Data analysis, Data analysis @section Statistics The distribution of values in a dataset can provide valuable information about it. For example, in an image, if it is a positively skewed distribution, we can see that there is significant data in the image. If the distribution is roughly symmetric, we can tell that there is no significant data in the image. In a table, when we need to select a sample of objects, it is important to first get a general view of the whole sample. On the other hand, you might need to know certain statistical parameters of the dataset. For example, if we have run a detection algorithm on an image, and we want to see how accurate it was, one method is to calculate the average of the undetected pixels and see how reasonable it is (if detection is done correctly, the average of undetected pixels should be approximately equal to the background value, see @ref{Sky value}). In a table, you might have calculated the magnitudes of a certain class of objects and want to get some general characteristics of the distribution immediately on the command-line (very fast!), to possibly change some parameters. The Statistics program is designed for such situations. @menu * Histogram and Cumulative Frequency Plot:: Basic definitions. * Sigma clipping:: Definition of @mymath{\sigma}-clipping. * Sky value:: Definition and derivation of the Sky value. * Invoking aststatistics:: Arguments and options to Statistics. @end menu @node Histogram and Cumulative Frequency Plot, Sigma clipping, Statistics, Statistics @subsection Histogram and Cumulative Frequency Plot @cindex Histogram Histograms and the cumulative frequency plots are both used to visually study the distribution of a dataset. A histogram shows the number of data points which lie within pre-defined intervals (bins). So on the horizontal axis we have the bin centers and on the vertical, the number of points that are in that bin. You can use it to get a general view of the distribution: which values have been repeated the most? how close/far are the most significant bins? Are there more values in the larger part of the range of the dataset, or in the lower part? Similarly, many very important properties about the dataset can be deduced from a visual inspection of the histogram. In the Statistics program, the histogram can be either output to a table to plot with your favorite plotting program@footnote{We recommend @url{http://pgfplots.sourceforge.net/,PGFPlots} which generates your plots directly within @TeX{} (the same tool that generates your document).}, or it can be shown with ASCII characters on the command-line, which is very crude, but good enough for a fast and on-the-go analysis, see the example in @ref{Invoking aststatistics}. @cindex Intervals, histogram @cindex Bin width, histogram @cindex Normalizing histogram @cindex Probability density function The width of the bins is only necessary parameter for a histogram. In the limiting case that the bin-widths tend to zero (while assuming the number of points in the dataset tend to infinity), then the histogram will tend to the @url{https://en.wikipedia.org/wiki/Probability_density_function, probability density function} of the distribution. When the absolute number of points in each bin is not relevant to the study (only the shape of the histogram is important), you can @emph{normalize} a histogram so like the probability density function, the sum of all its bins will be one. @cindex Cumulative Frequency Plot In the cumulative frequency plot of a distribution, the horizontal axis is the sorted data values and the y axis is the index of each data in the sorted distribution. Unlike a histogram, a cumulative frequency plot does not involve intervals or bins. This makes it less prone to any sort of bias or error that a given bin-width would have on the analysis. When a larger number of the data points have roughly the same value, then the cumulative frequency plot will become steep in that vicinity. This occurs because on the horizontal axis, there is little change while on the vertical axis, the indexes constantly increase. Normalizing a cumulative frequency plot means to divide each index (y axis) by the total number of data points (or the last value). Unlike the histogram which has a limited number of bins, ideally the cumulative frequency plot should have one point for every data element. Even in small datasets (for example a @mymath{200\times200} image) this will result in an unreasonably large number of points to plot (40000)! As a result, for practical reasons, it is common to only store its value on a certain number of points (intervals) in the input range rather than the whole dataset, so you should determine the number of bins you want when asking for a cumulative frequency plot. In Gnuastro (and thus the Statistics program), the number reported for each bin is the total number of data points until the larger interval value for that bin. You can see an example histogram and cumulative frequency plot of a single dataset under the @option{--asciihist} and @option{--asciicfp} options of @ref{Invoking aststatistics}. So as a summary, both the histogram and cumulative frequency plot in Statistics will work with bins. Within each bin/interval, the lower value is considered to be within then bin (it is inclusive), but its larger value is not (it is exclusive). Formally, an interval/bin between a and b is represented by [a, b). When the over-all range of the dataset is specified (with the @option{--greaterequal}, @option{--lessthan}, or @option{--qrange} options), the acceptable values of the dataset are also defined with a similar inclusive-exclusive manner. But when the range is determined from the actual dataset (none of these options is called), the last element in the dataset is included in the last bin's count. @node Sigma clipping, Sky value, Histogram and Cumulative Frequency Plot, Statistics @subsection Sigma clipping Let's assume that you have pure noise (centered on zero) with a clear @url{https://en.wikipedia.org/wiki/Normal_distribution,Gaussian distribution}, or see @ref{Photon counting noise}. Now let's assume you add very bright objects (signal) on the image which have a very sharp boundary. By a sharp boundary, we mean that there is a clear cutoff (from the noise) at the pixels the objects finish. In other words, at their boundaries, the objects do not fade away into the noise. In such a case, when you plot the histogram (see @ref{Histogram and Cumulative Frequency Plot}) of the distribution, the pixels relating to those objects will be clearly separate from pixels that belong to parts of the image that did not have any signal (were just noise). In the cumulative frequency plot, after a steady rise (due to the noise), you would observe a long flat region were for a certain range of data (horizontal axis), there is no increase in the index (vertical axis). @cindex Blurring @cindex Cosmic rays @cindex Aperture blurring @cindex Atmosphere blurring Outliers like the example above can significantly bias the measurement of noise statistics. @mymath{\sigma}-clipping is defined as a way to avoid the effect of such outliers. In astronomical applications, cosmic rays (when they collide at a near normal incidence angle) are a very good example of such outliers. The tracks they leave behind in the image are perfectly immune to the blurring caused by the atmosphere and the aperture. They are also very energetic and so their borders are usually clearly separated from the surrounding noise. So @mymath{\sigma}-clipping is very useful in removing their effect on the data. See Figure 15 in Akhlaghi and Ichikawa, @url{https://arxiv.org/abs/1505.01664,2015}. @mymath{\sigma}-clipping is defined as the very simple iteration below. In each iteration, the range of input data might decrease and so when the outliers have the conditions above, the outliers will be removed through this iteration. The exit criteria will be discussed below. @enumerate @item Calculate the standard deviation (@mymath{\sigma}) and median (@mymath{m}) of a distribution. @item Remove all points that are smaller or larger than @mymath{m\pm\alpha\sigma}. @item Go back to step 1, unless the selected exit criteria is reached. @end enumerate @noindent The reason the median is used as a reference and not the mean is that the mean is too significantly affected by the presence of outliers, while the median is less affected, see @ref{Quantifying signal in a tile}. As you can tell from this algorithm, besides the condition above (that the signal have clear high signal to noise boundaries) @mymath{\sigma}-clipping is only useful when the signal does not cover more than half of the full data set. If they do, then the median will lie over the outliers and @mymath{\sigma}-clipping might remove the pixels with no signal. There are commonly two exit criteria to stop the @mymath{\sigma}-clipping iteration: @itemize @item When a certain number of iterations has taken place (second value to the @option{--sigclip} option is larger than 1). @item When the new measured standard deviation is within a certain tolerance level of the old one (second value to the @option{--sigclip} option is less than 1). The tolerance level is defined by: @dispmath{\sigma_{old}-\sigma_{new} \over \sigma_{new}} The standard deviation is used because it is heavily influenced by the presence of outliers. Therefore the fact that it stops changing between two iterations is a sign that we have successfully removed outliers. Note that in each clipping, the dispersion in the distribution is either less or equal. So @mymath{\sigma_{old}\geq\sigma_{new}}. @end itemize @cartouche @noindent When working on astronomical images, objects like galaxies and stars are blurred by the atmosphere and the telescope aperture, therefore their signal sinks into the noise very gradually. Galaxies in particular do not appear to have a clear high signal to noise cutoff at all. Therefore @mymath{\sigma}-clipping will not be useful in removing their effect on the data. To gauge if @mymath{\sigma}-clipping will be useful for your dataset, look at the histogram (see @ref{Histogram and Cumulative Frequency Plot}). The ASCII histogram that is printed on the command-line with @option{--asciihist} is good enough in most cases. @end cartouche @node Sky value, Invoking aststatistics, Sigma clipping, Statistics @subsection Sky value @cindex Sky One of the most important aspects of a dataset is its reference value: the value of the dataset where there is no signal. Without knowing, and thus removing the effect of, this value it is impossible to compare the derived results of many high-level analyses over the dataset with other datasets (in the attempt to associate our results with the ``real'' world). In astronomy, this reference value is known as the ``Sky'' value: the value where there is no signal from objects (for example galaxies, stars, planets or comets). Depending on the dataset, the Sky value maybe a fixed value over the whole dataset, or it may vary based on location. For an example of the latter case, see Figure 11 in @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa (2015)}. Because of the significance of the Sky value in astronomical data analysis, we have devoted this subsection to it for a thorough review. We start with a thorough discussion on its definition (@ref{Sky value definition}). In the astronomical literature, researchers use a variety of methods to estimate the Sky value, so in @ref{Sky value misconceptions}) we review those and discuss their biases. From the definition of the Sky value, the most accurate way to estimate the Sky value is to run a detection algorithm (for example @ref{NoiseChisel}) over the dataset and use the un-detected pixels. However, there is also a more crude method that maybe useful when good direct detection is not initially possible (for example due to too many cosmic rays in a shallow image). A more crude (but simpler method) that is usable in such situations is discussed in @ref{Quantifying signal in a tile}. @menu * Sky value definition:: Definition of the Sky/reference value. * Sky value misconceptions:: Wrong methods to estimate the Sky value. * Quantifying signal in a tile:: Method to estimate the presence of signal. @end menu @node Sky value definition, Sky value misconceptions, Sky value, Sky value @subsubsection Sky value definition @cindex Sky value This analysis is taken from @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa (2015)}. Let's assume that all instrument defects -- bias, dark and flat -- have been corrected and the brightness (see @ref{Flux Brightness and magnitude}) of a detected object, @mymath{O}, is desired. The sources of flux on pixel @mymath{i}@footnote{For this analysis the dimension of the data (image) is irrelevant. So if the data is an image (2D) with width of @mymath{w} pixels, then a pixel located on column @mymath{x} and row @mymath{y} (where all counting starts from zero and (0, 0) is located on the bottom left corner of the image), would have an index: @mymath{i=x+y\times{}w}.} of the image can be written as follows: @itemize @item Contribution from the target object, (@mymath{O_i}). @item Contribution from other detected objects, (@mymath{D_i}). @item Undetected objects or the fainter undetected regions of bright objects, (@mymath{U_i}). @item @cindex Cosmic rays A cosmic ray, (@mymath{C_i}). @item @cindex Background flux The background flux, which is defined to be the count if none of the others exists on that pixel, (@mymath{B_i}). @end itemize @noindent The total flux in this pixel (@mymath{T_i}) can thus be written as: @dispmath{T_i=B_i+D_i+U_i+C_i+O_i.} @cindex Cosmic ray removal @noindent By definition, @mymath{D_i} is detected and it can be assumed that it is correctly estimated (deblended) and subtracted, thus @mymath{D_i=0}. There are also methods to detect and remove cosmic rays, for example the method described in van Dokkum (2001)@footnote{van Dokkum, P. G. (2001). Publications of the Astronomical Society of the Pacific. 113, 1420.}, or by comparing multiple exposures. This allows us to set @mymath{C_i=0}. Note that in practice, @mymath{D_i} and @mymath{U_i} are correlated, because they both directly depend on the detection algorithm and its input parameters. Also note that no detection or cosmic ray removal algorithm is perfect. With these limitations in mind, the observed Sky value for this pixel (@mymath{S_i}) can be defined as @cindex Sky value @dispmath{S_i=B_i+U_i.} @noindent Therefore, as the detection process (algorithm and input parameters) becomes more accurate, or @mymath{U_i\to0}, the sky value will tend to the background value or @mymath{S_i\to B_i}. Therefore, while @mymath{B_i} is an inherent property of the data (pixel in an image), @mymath{S_i} depends on the detection process. Over a group of pixels, for example in an image or part of an image, this equation translates to the average of undetected pixels. With this definition of sky, the object flux in the data can be calculated with @dispmath{ T_{i}=S_{i}+O_{i} \quad\rightarrow\quad O_{i}=T_{i}-S_{i}.} @noindent @cindex photo-electrons Hence, the more accurately @mymath{S_i} is measured, the more accurately the brightness (sum of pixel values) of the target object can be measured (photometry). Any under-(over-)estimation in the sky will directly translate to an over-(under-)estimation of the measured object's brightness. In the fainter outskirts of an object a very small fraction of the photo-electrons in the pixels actually belong to objects (see Figure 1b in @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa (2015)}). Therefore even a small over estimation of the sky value will result in the loss of a very large portion of most galaxies. Besides the lost area/brightness, this will also cause an over-estimation of the Sky value and thus even more under-estimation of the object's brightness. It is thus very important to detect the diffuse flux of a target, even if they are not your primary target. @cartouche @noindent The @strong{Sky value} is only correctly found when all the detected objects (@mymath{D_i} and @mymath{C_i}) have been removed from the data. @end cartouche @node Sky value misconceptions, Quantifying signal in a tile, Sky value definition, Sky value @subsubsection Sky value misconceptions As defined in @ref{Sky value}, the sky value is only accurately defined when the detection algorithm is not significantly reliant on the sky value. In particular its detection threshold. However, most signal-based detection tools@footnote{According to Akhlaghi and Ichikawa (2015), signal-based detection is a detection process that relies heavily on assumptions about the to-be-detected objects. This method was the most heavily used technique prior to the introduction of NoiseChisel in that paper.} use the sky value as a reference to define the detection threshold. So these old techniques had to rely on approximations based on other assumptions about the data. A review of those other techniques can be seen in Appendix A of Akhlaghi and Ichikawa (2015)@footnote{Akhlaghi M., Ichikawa. T. (2015). Astrophysical Journal Supplement Series.}. Since they were extensively used in astronomical data analysis for several decades, such approximations have given rise to a lot of misconceptions, ambiguities and disagreements about the sky value and how to measure it. As a summary, the major methods used until now were an approximation of the mode of the image pixel distribution and @mymath{\sigma}-clipping. @itemize @cindex Histogram @cindex Distribution mode @cindex Mode of a distribution @cindex Probability density function @item To find the mode of a distribution those methods would either have to assume (or find) a certain probability density function (PDF) or use the histogram. But astronomical datasets can have any distribution, making it almost impossible to define a generic function. Also, histogram-based results are very inaccurate (there is a large dispersion) and it depends on the histogram bin-widths. @cindex sigma-clipping @item Another approach was to iteratively clip the brightest pixels in the image (which is known as @mymath{\sigma}-clipping, since the reference was found from the image mean and its standard deviation or @mymath{\sigma}). See @ref{Sigma clipping} for a complete explanation. The problem with @mymath{\sigma}-clipping was that real astronomical objects have diffuse and faint wings that penetrate deeply into the noise. So only removing their brightest parts is completely useless in removing the systematic bias an object's fainter parts cause in the sky value. @end itemize As discussed in @ref{Sky value}, the sky value can only be correctly defined as the average of undetected pixels. Therefore all such approaches that try to approximate the sky value prior to detection are ultimately poor approximations. @node Quantifying signal in a tile, , Sky value misconceptions, Sky value @subsubsection Quantifying signal in a tile @cindex Data @cindex Noise @cindex Signal @cindex Gaussian distribution Put simply, noise can characterized with a certain spread about a characteristic value. In the Gaussian distribution (most commonly used to model noise) the spread is defined by the standard deviation about the characteristic mean. Before continuing let's clarify some definitions first: @emph{Data} is defined as the combination of signal and noise (so a noisy image is one @emph{data}-set). @emph{Signal} is defined as the mean of the noise on each element (after sky subtraction, see @ref{Sky value definition}). Let's assume that the @emph{background} (see @ref{Sky value definition}) is subtracted and is zero. When a data set doesn't have any signal (only noise), the mean, median and mode of the distribution are equal within statistical errors and approximately equal to the background value. Signal always has a positive value and will never become negative, see Figure 1 in @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa (2015)}. Therefore, as more signal is added to the raw noise, the mean, median and mode of the dataset (which has both signal and noise) shift to the positive. The mean's shift is the largest. The median shifts less, since it is defined based on an ordered distribution and so is not affected by a small number of outliers. The distribution's mode shifts the least to the positive. @cindex Mode @cindex Median Inverting the argument above gives us a robust method to quantify the significance of signal in a dataset. Namely, when the mode and median of a distribution are approximately equal, we can argue that there is no significant signal. To allow for gradients (which are commonly present in ground-based images), we can consider the image to be made of a grid of tiles (see @ref{Tessellation}@footnote{The options to customize the tessellation are discussed in @ref{Processing options}.}). Hence, from the difference of the mode and median on each tile, we can `detect' the significance of signal in it. The median of a distribution is defined to be the value of the distribution's middle point after sorting (or 0.5 quantile). Thus, to estimate the presence of signal, we'll compare with the quantile of the mode with 0.5, if the difference is larger than the value given to the @option{--modmedqdiff} option, this tile will be ignored. You can read this option as ``mode-median-quantile-diff''. This method to use the input's skewness is possible because of a new algorithm to find the mode of a distribution that was defined in Appendix C of Akhlaghi and Ichikawa (2015). However, the raw dataset's distribution is noisy (noise also affects the sorting), so using the argument above on the raw input will give a noisy result. To decrease the noise/error in estimating the mode, we will use convolution (see @ref{Convolution process}). Convolution decreases the range of the dataset and enhances its skewness, See Section 3.1.1 and Figure 4 in Akhlaghi and Ichikawa (2015). This enhanced skewness can be interpreted as an increase in the Signal to noise ratio of the objects buried in the noise. Therefore, to obtain an even better measure of the presence of signal in a mesh, the image can be convolved with a given kernel first. Note that through the difference of the mode and median we have actually `detected' data in the distribution. However this ``detection'' was only based on the total distribution of the data in each tile (a much lower resolution). This is the main limitation of this technique. The best approach is thus to do detection over the dataset, mask all the detected pixels and use the undetected regions to estimate the sky and its standard deviation. @cindex Cosmic rays The mean value of the tiles that have an approximately equal mode and median will be the Sky value. However there is one final hurdle: astronomical datasets are commonly plagued with Cosmic rays. Images of Cosmic rays aren't smoothed by the atmosphere or telescope aperture, so they have sharp boundaries. Also, since they don't occupy too many pixels, they don't affect the mode and median calculation. But their very high values can greatly bias the calculation of the mean (recall how the mean shifts the fastest in the presence of outliers), see Figure 15 in Akhlaghi and Ichikawa (2015) for one example. The effect of outliers like cosmic rays on the mean and standard deviation can be removed through @mymath{\sigma}-clipping, see @ref{Sigma clipping} for a complete explanation. Therefore, after asserting that the mode and median are approximately equal in a tile (see @ref{Tessellation}), the final Sky value and its standard deviation are determined after @mymath{\sigma}-clipping with the @option{--sigmaclip} option. @node Invoking aststatistics, , Sky value, Statistics @subsection Invoking Statistics Statistics will print statistical measures of an input dataset (table column or image). The executable name is @file{aststatistics} with the following general template @example $ aststatistics [OPTION ...] InputImage.fits @end example @noindent One line examples: @example ## Print some general statistics of input image: $ aststatistics image.fits ## Print some general statistics of column named MAG_F160W: $ aststatistics catalog.fits -h1 --column=MAG_F160W ## Make the histogram of the column named MAG_F160W: $ aststatistics table.fits -cMAG_F160W --histogram ## Find the Sky value on image with a given kernel: $ aststatistics image.fits --sky --kernel=kernel.fits ## Print Sigma-clipped results of records with a MAG_F160W ## column value between 26 and 27: $ aststatistics cat.fits -cMAG_F160W -g26 -l27 --sigmaclip=3,0.2 ## Print the median value of all records in column MAG_F160W that ## have a value larger than 3 in column PHOTO_Z: $ aststatistics tab.txt -rPHOTO_Z -g3 -cMAG_F160W --median @end example @noindent An input image or table is necessary when processing is to be done. If any output file is to be created, the value to the @option{--output} option, is used as the base name for the generated files. Without @option{--output}, the input name will be used to generate an output name, see @ref{Automatic output}. The options described below are particular to Statistics, but for general operations, it shares a large collection of options with the other Gnuastro programs, see @ref{Common options} for the full list. Options can also be given in configuration files, for more, please see @ref{Configuration files}. The input dataset may have blank values (see @ref{Blank pixels}), in this case, all blank pixels are ignored during the calculation. Initially, the full dataset will be read, but it is possible to select a specific range of data elements to use in the analysis of each run. You can either directly specify a minimum and maximum value for the range of data elements to use (with @option{--greaterequal} or @option{--lessthan}), or specify the range using quantiles (with @option{--qrange}). If a range is specified, all pixels outside of it are ignored before any processing. The following set of options are for specifying the input/outputs of Statistics. There are many other input/output options that are common to all Gnuastro programs including Statistics, see @ref{Input output options} for those. @table @option @item -c STR/INT @itemx --column=STR/INT The input column selector when the input file is a table. See @ref{Selecting table columns} for a full description of how to use this option. For more on how tables are read in Gnuastro, please see @ref{Tables}. @item -r STR/INT @itemx --refcol=STR/INT The reference column selector when the input file is a table. When a reference column is given, the range options below will be applied to this column and only elements in the input column that have a reference value in the correct range will be used. In practice this option allows you to select a subset of the input column based on values in another (the reference) column. All the statistical calculations will be done on the selected input column, not the reference column. @item -g FLT @itemx --greaterequal=FLT Limit the range of inputs into those with values greater and equal to what is given to this option. None of the values below this value will be used in any of the processing steps below. @item -l FLT @itemx --lessthan=FLT Limit the range of inputs into those with values less-than what is given to this option. None of the values greater or equal to this value will be used in any of the processing steps below. @item -Q FLT[,FLT] @itemx --qrange=FLT[,FLT] Specify the range of usable inputs using the quantile. This option can take one or two quantiles to specify the range. When only one number is input (let's call it @mymath{Q}), the range will be those values in the quantile range @mymath{Q} to @mymath{1-Q}. So when only one value is given, it must be less than 0.5. When two values are given, the first is used as the lower quantile range and the second is used as the larger quantile range. @cindex Quantile The quantile of a given element in a dataset is defined by the fraction of its index to the total number of values in the sorted input array. So the smallest and largest values in the dataset have a quantile of 0.0 and 1.0. The quantile is a very useful non-parametric (making no assumptions about the input) relative measure to specify a range. It can best be understood in terms of the cumulative frequency plot, see @ref{Histogram and Cumulative Frequency Plot}. The quantile of each horizontal axis value in the cumulative frequency plot is the vertical axis value associate with it. @end table @cindex ASCII plot When no operation is requested, Statistics will print some general basic properties of the input dataset on the command-line like the example below (ran on one of the output images of @command{make check}@footnote{You can try it by running the command in the @file{tests} directory, open the image with a FITS viewer and have a look at it to get a sense of how these statistics relate to the input image/dataset.}). This default behavior is designed to help give you a general feeling of how the data are distributed and help in narrowing down your analysis. @example $ aststatistics convolve_spatial_scaled_noised.fits \ --greaterequal=9500 --lessthan=11000 Statistics (GNU Astronomy Utilities) X.X ------- Input: convolve_spatial_scaled_noised.fits (hdu: 0) Range: from (inclusive) 9500, upto (exclusive) 11000. Unit: Brightness ------- Number of elements: 9074 Minimum: 9622.35 Maximum: 10999.7 Mode: 10055.45996 Mode quantile: 0.4001983908 Median: 10093.7 Mean: 10143.98257 Standard deviation: 221.80834 ------- Histogram: | ** | ****** | ******* | ********* | ************* | ************** | ****************** | ******************** | *************************** * | ***************************************** *** |* ************************************************************** |----------------------------------------------------------------- @end example Gnuastro's Statistics is a very general purpose program, so to be able to easily understand this diversity in its operations (and how to possibly run them together), we'll divided the operations into two types: those that don't respect the position of the elements and those that do (by tessellating the input on a tile grid, see @ref{Tessellation}). The former treat the whole dataset as one and can re-arrange all the elements (for example sort them), but the former do their processing on each tile independently. First, we'll review the operations that work on the whole dataset. @cindex AWK @cindex GNU AWK The group of options below can used to get a single value measurement of the whole dataset. They will print only the requested value as one field in a line/row, like the @option{--mean}, @option{--median} options. These options can be called any number of times and in any order. The outputs of all such options will be printed on one line following each other (with a space character between them). This feature makes these options very useful in scripts, or to redirect into programs like GNU AWK for higher-level processing. These are some of the most basic measures, Gnuastro is still under heavy development and this list will grow. If you want another statistical parameter, please contact us and we will do out best to add it to this list, see @ref{Suggest new feature}. @table @option @item -n @itemx --number Print the number of all used (non-blank and in range) elements. @item --minimum Print the minimum value of all used elements. @item --maximum Print the maximum value of all used elements. @item --sum Print the sum of all used elements. @item -m @itemx --mean Print the mean (average) of all used elements. @item -t @itemx --std Print the standard deviation of all used elements. @item -E @itemx --median Print the median of all used elements. @item -u FLT[,FLT[,...]] @itemx --quantile=FLT[,FLT[,...]] Print the values at the given quantiles of the input dataset. Any number of quantiles may be given and one number will be printed for each. Values can either be written as a single number or as fractions, but must be between zero and one (inclusive). Hence, in effect @command{--quantile=0.25 --quantile=0.75} is equivalent to @option{--quantile=0.25,3/4}, or @option{-u1/4,3/4}. The returned value is one of the elements from the dataset. Taking @mymath{q} to be your desired quantile, and @mymath{N} to be the total number of used (non-blank and within the given range) elements, the returned value is at the following position in the sorted array: @mymath{round(q\times{}N}). @item --quantfunc=FLT[,FLT[,...]] Print the quantiles of the given values in the dataset. This option is the inverse of the @option{--quantile} and operates similarly except that the acceptable values are within the range of the dataset, not between 0 and 1. Formally it is known as the ``Quantile function''. Since the dataset is not continuous this function will find the nearest element of the dataset and use its position to estimate the quantile function. @item -O @itemx --mode Print the mode of all used elements. The mode is found through the mirror distribution which is fully described in Appendix C of @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa 2015}. See that section for a full description. This mode calculation algorithm is non-parametric, so when the dataset is not large enough (larger than about 1000 elements usually), or doesn't have a clear mode it can fail. In such cases, this option will return a value of @code{nan} (for the floating point NaN value). As described in that paper, the easiest way to assess the quality of this mode calculation method is to use it's symmetricity (see @option{--modesym} below). A better way would be to use the @option{--mirror} option to generate the histogram and cumulative frequency tables for any given mirror value (the mode in this case) as a table. If you generate plots like those shown in Figure 21 of that paper, then your mode is accurate. @item --modequant Print the quantile of the mode. You can get the actual mode value from the @option{--mode} described above. In many cases, the absolute value of the mode is irrelevant, but its position within the distribution is important. In such cases, this option will become handy. @item --modesym Print the symmetricity of the calculated mode. See the description of @option{--mode} for more. This mode algorithm finds the mode based on how symmetric it is, so if the symmetricity returned by this option is too low, the mode is not too accurate. See Appendix C of @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa 2015} for a full description. In practice, symmetricity values larger than 0.2 are mostly good. @item --modesymvalue Print the value in the distribution where the mirror and input distributions are no longer symmetric, see @option{--mode} and Appendix C of @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa 2015} for more. @end table The list of options below are for those statistical operations that output more than one value. So while they can be called together in one run, their outputs will be distinct (each one's output will usually be printed in more than one line). @table @option @item -A @itemx --asciihist Print an ASCII histogram of the usable values within the input dataset along with some basic information like the example below (from the UVUDF catalog@footnote{@url{https://asd.gsfc.nasa.gov/UVUDF/uvudf_rafelski_2015.fits.gz}}). The width and height of the histogram (in units of character widths and heights on your command-line terminal) can be set with the @option{--numasciibins} (for the width) and @option{--asciiheight} options. For a full description of the histogram, please see @ref{Histogram and Cumulative Frequency Plot}. An ASCII plot is certainly very crude and cannot be used in any publication, but it is very useful for getting a general feeling of the input dataset very fast and easily on the command-line without having to take your hands off the keyboard (which is a major distraction!). If you want to try it out, you can write it all in one line and ignore the @key{\} and extra spaces. @example $ aststatistics uvudf_rafelski_2015.fits.gz --hdu=1 \ --column=MAG_F160W --lessthan=40 \ --asciihist --numasciibins=55 ASCII Histogram: Number: 8593 Y: (linear: 0 to 660) X: (linear: 17.7735 -- 31.4679, in 55 bins) | **** | ***** | ****** | ******** | ********* | *********** | ************** | ***************** | *********************** | ******************************** |*** *************************************************** |------------------------------------------------------- @end example @item --asciicfp Print the cumulative frequency plot of the usable elements in the input dataset. Please see descriptions under @option{--asciihist} for more, the example below is from the same input table as that example. To better understand the cumulative frequency plot, please see @ref{Histogram and Cumulative Frequency Plot}. @example $ aststatistics uvudf_rafelski_2015.fits.gz --hdu=1 \ --column=MAG_F160W --lessthan=40 \ --asciicfp --numasciibins=55 ASCII Cumulative frequency plot: Y: (linear: 0 to 8593) X: (linear: 17.7735 -- 31.4679, in 55 bins) | ******* | ********** | *********** | ************* | ************** | *************** | ***************** | ******************* | *********************** | ****************************** |******************************************************* |------------------------------------------------------- @end example @item -H @itemx --histogram Save the histogram of the usable values in the input dataset into a table. The first column is the value at the center of the bin and the second is the number of points in that bin. If the @option{--cumulative} option is also called with this option in a run, then the table will have three columns (the third is the cumulative frequency plot). Through the @option{--numbins} and @option{--lowerbin} you can modify the first column values and with @option{--normalize} and @option{--maxbinone} you can modify the second columns. See below for the description of each. By default (when no @option{--output} is specified) a plain text table will be created, see @ref{Gnuastro text table format}. If a FITS name is specified, you can use the common option @option{--tableformat} to have it as a FITS ASCII or FITS binary format, see @ref{Common options}. This table can then be fed into your favorite plotting tool and get a much more clean and nice histogram than what the raw command-line can offer you (with the @option{--asciihist} option). @item -C @itemx --cumulative Save the cumulative frequency plot of the usable values in the input dataset into a table, similar to @option{--histogram}. @item -s @itemx --sigmaclip Do @mymath{\sigma}-clipping on the usable pixels of the input dataset. See @ref{Sigma clipping} for a full description on @mymath{\sigma}-clipping and also to better understand this option. The @mymath{\sigma}-clipping parameters can be set through the @option{--sclipparams} option (see below). @item --mirror=FLT Make a histogram and cumulative frequency plot of the mirror distribution for the given dataset when the mirror is located at the value to this option. The mirror distribution is fully described in Appendix C of @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa 2015} and currently it is only used to calculate the mode (see @option{--mode}). Just note that the mirror distribution is a discrete distribution like the input, so while you may give any number as the value to this option, the actual mirror value is the closest number in the input dataset to this value. If the two numbers are different, Statistics will warn you of the actual mirror value used. This option will make a table as output. Depending on your selected name for the output, it will be either a FITS table or a plain text table (which is the default). It contains three columns: the first is the center of the bins, the second is the histogram (with the largest value set to 1) and the third is the normalized cumulative frequency plot of the mirror distribution. The bins will be positioned such that the mode is on the starting interval of one of the bins to make it symmetric around the mirror. With this output file and the input histogram (that you can generate in another run of Statistics, using the @option{--onebinvalue}), it is possible to make plots like Figure 21 of @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa 2015}. @end table The list of options below allow customization of the histogram and cumulative frequency plots (for the @option{--histogram}, @option{--cumulative}, @option{--asciihist}, and @option{--asciicfp} options). @table @option @item --numbins The number of bins (rows) to use in the histogram and the cumulative frequency plot tables (outputs of @option{--histogram} and @option{--cumulative}). @item --numasciibins The number of bins (characters) to use in the ASCII plots when printing the histogram and the cumulative frequency plot (outputs of @option{--asciihist} and @option{--asciicfp}). @item --asciiheight The number of lines to use when printing the ASCII histogram and cumulative frequency plot on the command-line (outputs of @option{--asciihist} and @option{--asciicfp}). @item -n @itemx --normalize Normalize the histogram or cumulative frequency plot tables (outputs of @option{--histogram} and @option{--cumulative}). For a histogram, the sum of all bins will become one and for a cumulative frequency plot the last bin value will be one. @item --maxbinone Divide all the histogram values by the maximum bin value so it becomes one and the rest are similarly scaled. In some situations (for example if you want to plot the histogram and cumulative frequency plot in one plot) this can be very useful. @item --onebinstart=FLT Make sure that one bin starts with the value to this option. In practice, this will shift the bins used to find the histogram and cumulative frequency plot such that one bin's lower interval becomes this value. For example when the histogram range includes negative and positive values and zero has a special significance in your analysis, then zero will be somewhere in one bin and will mix counts of positive and negative. By setting @option{--onebinstart=0}, you can make sure that the viewers of the histogram will not be confused without doing the math of setting a range and number of bins. @cindex NaN Note that by default, the first row of the histogram and cumulative frequency plot show the central values of each bin. So in the example above you will not see the 0.000 in the first column, you will see two symmetric values. If the value is not within the usable input range, this option will be ignored. @end table All the options described until now were from the first class of operations discussed above: those that treat the whole dataset as one. However. It often happens that the relative position of the dataset elements over the dataset is significant. For example you don't want one median value for the whole input image, you want to know how the median changes over the image. For such operations, the input has to be tessellated (see @ref{Tessellation}). Thus this class of options can't currently be called along with the options above in one run of Statistics. @table @option @item -t @itemx --ontile Do the respective single-valued calculation over one tile of the input dataset, not the whole dataset. This option must be called with at least one of the single valued options discussed above (for example @option{--mean} or @option{--quantile}). The output will be a file in the same format as the input. If the @option{--oneelempertile} option is called, then one element/pixel will be used for each tile (see @ref{Processing options}). Otherwise, the output will have the same size as the input, but each element will have the value corresponding to that tile's value. If multiple single valued operations are called, then for each operation there will be one extension in the output FITS file. @item -y @itemx --sky Estimate the Sky value on each tile as fully described in @ref{Quantifying signal in a tile}. As described in that section, several options are necessary to configure the Sky estimation which are listed below. The output file will have two extensions: the first is the Sky value and the second is the Sky standard deviation on each tile. Similar to @option{--ontile}, if the @option{--oneelempertile} option is called, then one element/pixel will be used for each tile (see @ref{Processing options}). @end table The parameters for estimating the sky value can be set with the following options, except for the @option{--sclipparams} option (which is also used by the @option{--sigmaclip}), the rest are only used for the Sky value estimation. @table @option @item -k=STR @itemx --kernel=STR File name of kernel to help in estimating the significance of signal in a tile, see @ref{Quantifying signal in a tile}. @item --khdu=STR Kernel HDU to help in estimating the significance of signal in a tile, see @ref{Quantifying signal in a tile}. @item --mirrordist=FLT Maximum distance (as a multiple of error) to estimate the difference between the input and mirror distributions in finding the mode, see Appendix C of @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa 2015}, also see @ref{Quantifying signal in a tile}. @item --modmedqdiff=FLT The maximum acceptable distance between the mode and median, see @ref{Quantifying signal in a tile}. @item --sclipparams=FLT,FLT The @mymath{\sigma}-clipping parameters, see @ref{Sigma clipping}. This option takes two values which are separated by a comma (@key{,}). Each value can either be written as a single number or as a fraction of two numbers (for example @code{3,1/10}). The first value to this option is the multiple of @mymath{\sigma} that will be clipped (@mymath{\alpha} in that section). The second value is the exit criteria. If it is less than 1, then it is interpreted as tolerance and if it is larger than one it is a specific number. Hence, in the latter case the value must be an integer. @item --smoothwidth=INT Width of a flat kernel to convolve the interpolated tile values. Tile interpolation is done using the median of the @option{--interpnumngb} neighbors of each tile (see @ref{Processing options}). If this option is given a value of zero or one, no smoothing will be done. Without smoothing, strong boundaries will probably be created between the values estimated for each tile. It is thus good to smooth the interpolated image so strong discontinuities do not show up in the final Sky values. The smoothing is done through convolution (see @ref{Convolution process}) with a flat kernel, so the value to this option must be an odd number. @item --checksky Create a multi-extension FITS file showing the steps that were used to estimate the Sky value over the input, see @ref{Quantifying signal in a tile}. The file will have two extensions for each step (one for the Sky and one for the Sky standard deviation). @end table @node NoiseChisel, MakeCatalog, Statistics, Data analysis @section NoiseChisel @cindex Labeling @cindex Detection @cindex Segmentation Once instrumental signatures are removed from the raw data in the initial reduction process (see @ref{Data manipulation}). We are ready to derive scientific results out of them. But we can't do anything special with a raw dataset, for example an image is just an array of values. Every pixel just has one value and its position within the image. Therefore, the first step of your high-level analysis will be to classify/label the dataset elements/pixels into two classes: signal and noise. This process is formally known as @emph{detection}. Afterwards, you want to separate the detections into multiple components (for example when two detected regions aren't touching, they should be treated independently as two distant galaxies for example). This higher level classification of the detections is known as @emph{segmentation}. NoiseChisel is Gnuastro's program for detection and segmentation. NoiseChisel works based on a new noise-based approach to signal detection and was introduced to the astronomical community in @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa [2015]}. NoiseChisel's primary output is an array (image) with the same size as the input but containing labels: those pixels with a label of 0 are noise/sky while those pixels with labels larger than 0 are detections (separate segments will be given positive integers, starting from 1). For more on NoiseChisel's particular output format and its benefits (especially in conjunction with @ref{MakeCatalog}), please see @url{https://arxiv.org/abs/1611.06387, Akhlaghi [2016]}. The published paper cannot under go any updates, but the NoiseChisel software has evolved, you can see the major changes in @ref{NoiseChisel changes after publication}. Data is inherently mixed with noise: only mock/simulated datasets are free of noise. So this process of separating signal from noise is not trivial. In particular, most scientifically interesting astronomical targets are faint, can have a large variety of morphologies along with a large distribution in brightness and size which are all drowned in a ocean of noise. So detection is a uniquely vital aspect of any scientific work and even more so for astronomical research. This is such a fundamental step that designing of NoiseChisel was the primary motivation behind creating Gnuastro: the first generation of Gnuastro's programs were all first part of what later became NoiseChisel, afterwards they spinned-off into separate programs. @cindex Erosion The name of NoiseChisel is derived from the first thing it does after thresholding the dataset: to erode it. In mathematical morphology, erosion on pixels can be pictured as carving off boundary pixels. Hence, what NoiseChisel does is similar to what a wood chisel or stone chisel do. It is just not a hardware, but a software. In fact looking at it as a chisel and your dataset as a solid cube of rock will greatly help in best using it: with NoiseChisel you literally carve the galaxies/stars/comets out of the noise. Try running it with the @option{--checkdetection} option to see each step of the carving process on your input dataset. You can then change a specific option to carve out your signal out of the noise more successfully. @menu * NoiseChisel changes after publication:: Changes to the software after publication. * Invoking astnoisechisel:: Options and arguments for NoiseChisel. @end menu @node NoiseChisel changes after publication, Invoking astnoisechisel, NoiseChisel, NoiseChisel @subsection NoiseChisel changes after publication Before using NoiseChisel it is strongly recommended to read @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa [2015]} to gain a good understanding of what it does and how each parameter influences the output. Thanks to that paper, there is no need to go into the details of the major processing steps. Hence we can just dive into the details of running NoiseChisel in @ref{Invoking astnoisechisel}. However, the paper cannot undergo any further updates, but NoiseChisel will evolve: better algorithms or steps will be found, thus options will be added or removed. So this book is the final and definitive guide. For a more detailed list of changes in each release, please follow the @file{NEWS} file. The @file{NEWS} file is in the released Gnuastro tarball (see @ref{Release tarball}). You can also view the most recent @file{NEWS} file @url{http://git.savannah.gnu.org/cgit/gnuastro.git/plain/NEWS, online}@footnote{The online version of the @file{NEWS} file here may contain features that have been implemented, but not yet officially released as a tarball (see @ref{Downloading the source}). Therefore, please be sure to look at the dates and versions above each group of changed features and make sure it corresponds to your installed version. It is hence recommended to always stay up to date, see @ref{Announcements}).}. To make the transition form the paper to this book easier (and encourage reading the paper), below you can see the major changes since the paper was published. First, the options that have been removed are discussed, followed by those that have been added. @noindent Removed options: @itemize @item @option{--dilate}: In the paper, true detections were dilated for a final dig into the noise. However, simple 8-connected dilation can produce boxy results which are not realistic and could miss diffuse flux. The final dig into the noise is now done by ``grow''ing the true detections, similar to how true clumps were grown, see the description of @option{--detgrowquant} below and in @ref{Detection options} for more on the new alternative. @end itemize @noindent Added options: @itemize @item @option{--widekernel}: NoiseChisel uses the difference between the mode and median to identify if a tile should be used for estimating the quantile thresholds (see @ref{Quantifying signal in a tile}). Until now, NoiseChisel would convolve an image once and estimate the proper tiles for quantile estimations on the convolved image. The same convolved image would later be used for quantile estimation. A larger kernel does increase the skewness (and thus difference between the mode and median), however, it disfigures the shapes/morphology of the objects. This new @option{--widekernel} option (and a corresponding @option{--wkhdu} option to specify its HDU) option are added to solve such cases. When its given, the input will be convolved with both the sharp (given through the @option{--kernel} option) and wide kernels. The mode and median are calculated on the dataset that is convolved with the wider kernel, then the quantiles are estimated on the image convolved with the sharper kernel. @item @option{--noerodequant}: to specify a quantile threshold where erosion will not apply. This is useful to detect sharper point-like sources that will be missed due to too much erosion. To completely ignore this features give this option a value of 1 (only the largest valued pixel in the input will not be eroded). @item @option{--qthreshtilequant}: to manually remove the measured qthresh from some tiles. This feature helps in detecting large and extended diffuse (almost flat) signal when necessary, see @ref{Detection options}. @item @option{--detgrowquant}: is used to grow the final true detections until a given quantile in the same way that clumps are grown during segmentation (compare columns 2 and 3 in Figure 10 of the paper). It replaces the old @option{--dilate} option in the paper and older versions of Gnuastro. Dilation is a blind growth method which causes objects to be boxy or diamond shaped when too many layers are added. However, with the growth method that is defined now, we can follow the signal into the noise with any shape. The appropriate quantile depends on your dataset's correlated noise properties and how cleanly it was Sky subtracted. The new @option{--detgrowmaxholesize} can also be used to specify the maximum hole size to fill as part of this growth, see the description in @ref{Detection options} for more details. This new growth process can be much more successful in detecting diffuse flux around true detections compared to dilation and give more realistic results, but it can also increase the NoiseChisel run time (depending on the given value and input size). @item @option{--cleangrowndet}: A process to further clean/remove the possibility of false detections, see the descriptions under this option in @ref{Detection options}. @end itemize @node Invoking astnoisechisel, , NoiseChisel changes after publication, NoiseChisel @subsection Invoking NoiseChisel NoiseChisel will detect and segment signal in noise producing a multi-extension labeled image, ready for input into @ref{MakeCatalog} to generate a catalog or other processing. The executable name is @file{astnoisechisel} with the following general template @example $ astnoisechisel [OPTION ...] InputImage.fits @end example @noindent One line examples: @example ## Detect signal in input.fits: $ astnoisechisel input.fits ## Detect signal assuming input has 4 channels along first dimension ## and 1 along the second. Also set the regular tile size to 100 along ## both dimensions: $ astnoisechisel --numchannels=4,1 --tilesize=100,100 input.fits @end example @cindex Gaussian @noindent If NoiseChisel is to do processing (for example you don't want to get help, or see the values to each input parameter), an input image should be provided with the recognized extensions (see @ref{Arguments}). NoiseChisel shares a large set of common operations with other Gnuastro programs, mainly regarding input/output, general processing steps, and general operating modes. To help in a unified experience between all of Gnuastro's programs, these operations have the same command-line options, see @ref{Common options} for a full list. Since the common options are thoroughly discussed there, they are no longer reviewed here. You can see all the options with a short description on the command-line with the @option{--help} option, see @ref{Getting help}. NoiseChisel's input image may contain blank elements (see @ref{Blank pixels}). Blank elements will be ignored in all steps of NoiseChisel. Hence if your dataset has bad pixels which should be masked with a mask image, please use Gnuastro's @ref{Arithmetic} program (in particular its @command{where} operator) to convert those pixels to blank pixels before running NoiseChisel. Gnuastro's Arithmetic program has bitwise operators helping you select specific kinds of bad-pixels when necessary. A convolution kernel can also be optionally given. If a value (file name) is given to @option{--kernel} on the command-line or in a configuration file (see @ref{Configuration files}), then that file will be used to convolve the image prior to thresholding. Otherwise a default kernel will be used. The default kernel is a 2D Gaussian with a FWHM of 2 pixels truncated at 5 times the FWHM. This choice of the default kernel is discussed in Section 3.1.1 of @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa [2015]}. See @ref{Convolution kernel} for kernel related options. NoiseChisel defines two tessellations over the input (see @ref{Tessellation}). This enables it to deal with possible gradients in the input dataset and also significantly improve speed by processing each tile on different threads. The tessellation related options are discussed in @ref{Processing options}. In particular, NoiseChisel uses two tessellations (with everything between them identical except the tile sizes): a fine-grained one with smaller tiles (mainly used in detection) and a more larger tiled one which is used for multi-threaded processing. The common Tessellation options described in @ref{Processing options} define all parameters of both tessellations, only the large tile size for the latter tessellation is set through the @option{--largetilesize} option. To inspect the tessellations on your input dataset, run NoiseChisel with @option{--checktiles}. @cartouche @noindent @strong{Usage TIP:} Frequently use the options starting with @option{--check}. Depending on what you want to detect in the data, you can often play with the parameters/options for a better result than the default parameters. You can start with @option{--checkdetection} and @option{--checksegmentation} for the main steps. For their full list please run: @example $ astnoisechisel --help | grep check @end example @end cartouche In the sections below, NoiseChisel's options are classified into three general classes to help in easy navigation. @ref{General NoiseChisel options} mainly discusses the options relating to input and those that are shared in both detection and segmentation. Options to configure the detection are described in @ref{Detection options} and @ref{Segmentation options} we discuss how you can fine-tune the segmentation of the detections. Finally in @ref{NoiseChisel output} the format of NoiseChisel's output is discussed. The order of options here follow the same logical order that the respective action takes place within NoiseChisel (note that the output of @option{--help} is sorted alphabetically). @menu * General NoiseChisel options:: General NoiseChisel preprocessing. * Detection options:: Configure detection in NoiseChisel. * Segmentation options:: Configure segmentation in NoiseChisel. * NoiseChisel output:: NoiseChisel's output format. @end menu @node General NoiseChisel options, Detection options, Invoking astnoisechisel, Invoking astnoisechisel @subsubsection General NoiseChisel options The options discussed in this section are mainly regarding the input(s), output, and some general processing options that are shared between both detection and segmentation. Recall that you can always see the full list of Gnuastro's options with the @option{--help} option. @table @option @item -k STR @itemx --kernel=STR File name of kernel to smooth the image before applying the threshold, see @ref{Convolution kernel}. The first step of NoiseChisel is to convolve/smooth the image and use the convolved image in multiple steps during the processing. It will be used to define (and later apply) the quantile threshold (see @option{--qthresh}). The convolved image is also used to define the clumps (see Section 3.2.1 and Figure 8 of @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa [2015]}). The @option{--kernel} option is not mandatory. If no kernel is provided, a 2D Gaussian profile with a FWHM of 2 pixels truncated at 5 times the FWHM is used. This choice of the default kernel is discussed in Section 3.1.1 of Akhlaghi and Ichikawa [2015]. @item --khdu=STR HDU containing the kernel in the file given to the @option{--kernel} option. @item --convolved=STR Use this file as the convolved image and don't do convolution and ignore @option{--kernel}. NoiseChisel will just check the size of the given dataset is the same as the input's size. If a wrong image (with the same size) is given to this option, the results (errors, bugs, and etc) are un-predictable. So please use this option with care and in a highly controlled environment. On such scenario is discussed below. In almost all situations, as the input gets larger, the single most CPU and time consuming step in NoiseChisel is convolution (the first step in its processing). The process of testing NoiseChisel for the best parameters in a given analysis will involve running NoiseChisel multiple times: to see the effect of each new option value. Therefore, once the kernel is finalized, re-convolving the input will greatly hinder fast testing of higher-level parameters. With this option, you can convolve the input image with your chosen kernel once before running NoiseChisel, then feed it to NoiseChisel on each test run and thus save valuable time for better/more tests. To build your desired convolution kernel, you can use @ref{MakeProfiles}. To convolve the image with a given kernel you can use @ref{Convolve}. Spatial domain convolution is mandatory. In the frequency domain, blank pixels (if present) will cover the whole image and gradients will appear on the edges, see @ref{Spatial vs. Frequency domain}. Below you can see an example of such a scenario: you want to see how variation of the growth level (through the @option{--detgrowquant} option) will affect the final result. Recall that you can ignore all the extra spaces, new lines, and `@code{\}' if you are typing in the terminal (in a shell script, remove the @code{$} signs at the start of the lines). @example ## Make the kernel to convolve with. $ astmkprof --oversample=1 --kernel=gaussian,2,5 ## Convolve the input with the given kernel. $ astconvolve input.fits --kernel=kernel.fits \ --domain=spatial --output=convolved.fits ## Run NoiseChisel with seven growth quantile values. $ for g in 60 65 70 75 80 85 90; do \ astnoisechisel input.fits --convolved=convolved.fits \ --detgrowquant=0.$g --output=$g.fits; \ done @end example @item --convolvedhdu=STR The HDU/extension containing the convolved image in the file given to @option{--convolved}. @item -w STR @itemx --widekernel=STR File name of a wider kernel to use in estimating the difference of the mode and median in a tile (this difference is used to identify the significance of signal in that tile, see @ref{Quantifying signal in a tile}). This convolved image is only used for this purpose. Once the mode is found to be sufficiently close to the median, the input convolved with the sharper kernel (@option{--kernel}) is used to identify the quantile threshold (see @option{--qthresh}). Since this convolution will significantly slow down the processing, it is optional. If no image is given, the mode and median will be found on the image that is convolved with the dataset in @option{--kernel}. @item --wkhdu=STR HDU containing the kernel file given to the @option{--widekernel} option. @item -E @itemx --skysubtracted If this option is called, it is assumed that the image has already been sky subtracted once. Knowing if the sky has already been subtracted once or not is very important in estimating the Signal to noise ratio of the detections and clumps. In short an extra @mymath{\sigma_{sky}^2} must be added in the error (noise or denominator in the Signal to noise ratio) for every flux value that is present in the calculation. This can be interpreted as the error in measuring that sky value when it was subtracted by any other program. See Section 3.3 in @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa [2015]}) for a complete explanation. @item -B FLT @itemx --minskyfrac=FLT Minimum fraction (value between 0 and 1) of sky (undetected) areas in a tile for it to be considered in measuring the following detection and segmentation properties. @itemize @item Measuring the Signal to noise ratio of false detections during the false detection removal on small tiles. @item Measuring the sky value (average of undetected pixels) on small tiles. Both before the removal of false detections and after it. @item Clump Signal to noise ratio in the sky regions of large files. @end itemize Because of the PSF and their intrinsic amorphous properties, astronomical objects (except cosmic rays) never have a clear cutoff and commonly sink into the noise very slowly. Even below the very low thresholds used by NoiseChisel. So when a large fraction of the area of one mesh is covered by detections, it is very plausible that their faint wings are present in the undetected regions (hence causing a bias in any measurement). To get an accurate measurement of the above parameters over the tessellation, tiles that harbor too many detected regions should be excluded. The used tiles are visible in the respective @option{--check} option of the given step. @item --minnumfalse=INT The minimum number of `pseudo-detections' (to identify false initial detections) or clumps (to identifying false clumps) found over the un-detected regions to identify a Signal-to-Noise ratio threshold. The Signal to noise ratio (S/N) of false pseudo-detections and clumps in each tile is found using the quantile of the S/N distribution of the psudo-detections and clumps over the undetected pixels in each mesh. If the number of S/N measurements is not large enough, the quantile will not be accurate (can have large scatter). For example if you set @option{--detquant=0.99} (or the top 1 percent), then it is best to have at least 100 S/N measurements. @item -L INT[,INT] @itemx --largetilesize=INT[,INT] The size of each tile for the tessellation with the larger tile sizes. Except for the tile size, all the other parameters for this tessellation are taken from the common options described in @ref{Processing options}. The format is identical to that of the @option{--tilesize} option that is discussed in that section. @item --onlydetection If this option is called, no segmentation will be done and the output will only have four extensions (no clumps extension, see @ref{NoiseChisel output}). The second extension of the output is not going to be objects but raw detections (a large region will be given one label): labeling is only done based on connectivity. The last two extensions of the output will be the Sky and its Standard deviation. This option can result in faster processing when only the noise properties of the image are desired for a catalog using another image's labels for example. A common case is when you want to measure colors or SEDs in several images. Let's say you have images in two colors: A and B. For simplicity also assume that they are exactly on the same position in the sky with the same pixel scale. You choose to set A as a reference, so you run the NoiseChisel fully on A. Then you run NoiseChisel on B with @option{--onlydetection} since you only need the noise properties of B (for the signal to noise column in its catalog). You can then run MakeCatalog on A normally, see @ref{MakeCatalog}. To run MakeCatalog on B, you simply set the object and clump labels images to those that NoiseChisel produced for A, see @ref{Invoking astmkcatalog}. @item --continueaftercheck Continue NoiseChisel after any of the options starting with @option{--check}. NoiseChisel involves many steps and as a result, there are many checks, allowing to inspect the status of the processing. The results of each step affect the next steps of processing, so, when you are want to check the status of the processing at one step, the time spent to complete NoiseChisel is just wasted/distracting time. To encourage easier experimentation with the option values, when you use any of the NoiseChisel options that start with @option{--check}, NoiseChisel will abort once all the desired check file(s) is (are) completed. If you call the @option{--continueaftercheck} option, you can disable this behavior and ask NoiseChisel to continue with the rest of the processing after completing the check file(s). @end table @node Detection options, Segmentation options, General NoiseChisel options, Invoking astnoisechisel @subsubsection Detection options Detection is the process of separating the pixels in the image into two groups: 1) Signal and 2) Noise. Through the parameters below, you can customize the detection process in NoiseChisel. Recall that you can always see the full list of Gnuastro's options with the @option{--help} option. @table @option @item -r FLT @itemx --mirrordist=FLT Maximum distance (as a multiple of error) to estimate the difference between the input and mirror distributions in finding the mode, see Appendix C of @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa 2015}, also see @ref{Quantifying signal in a tile}. @item -Q FLT @itemx --modmedqdiff=FLT The maximum acceptable distance between the mode and median, see @ref{Quantifying signal in a tile}. The quantile threshold will be found on tiles that satisfy this mode and median difference. @item -t FLT @itemx --qthresh=FLT The quantile threshold to apply to the convolved image. The detection process begins with applying a quantile threshold to each of the tiles in the small tessellation. The quantile is only calculated for tiles that don't have any significant signal within them, see @ref{Quantifying signal in a tile}. Interpolation is then used to give a value to the un-successful tiles and it is finally smoothed. @cindex Quantile @cindex Binary image @cindex Foreground pixels @cindex Background pixels The quantile value is a floating point value between 0 and 1. Assume that we have sorted the @mymath{N} data elements of a distribution (the pixels in each mesh on the convolved image). The quantile (@mymath{q}) of this distribution is the value of the element with an index of (the nearest integer to) @mymath{q\times{N}} in the sorted data set. After thresholding is complete, we will have a binary (two valued) image. The pixels above the threshold are known as foreground pixels (have a value of 1) while those which lie below the threshold are known as background (have a value of 0). @item --qthreshtilequant=FLT Only keep tiles which have a q-thresh value above the given quantile of the all successful tiles. Hence, when given a value of @code{1}, this option will be ignored. When there is more than one channel (and @option{--workoverch} is not called), quantile calculation and application will be done on each channel independently. This option is useful when a large and diffuse (almost flat within each tile) signal exists with very small regions of Sky. The flatness of the profile will cause it to successfully pass the tests of @ref{Quantifying signal in a tile}. As a result, without this option the flat and diffuse signal will be interpretted as sky. In such cases, you can see the status of the tiles with the @option{--checkqthresh} option (first image extension is enough) and select a quantile through this option to ignore the measured values in the higher-valued tiles. This option can also be useful when there are large bright objects in the image with large flat wings which can also pass the tests and give outlier values. When there is a sky gradient over the image (mainly due to post-processing issues like bad flat fielding), this option must be set to @code{1} so it is completely ignored and the sky gradient is accurately measured and subtracted. To get an estimate of the measured qthresh distribution, you can run the following commands. The first will create the qthresh check image with one value/pixel per tile (see @ref{Processing options}). Open the image in a FITS viewer and inspect it. The second command below will print the basic information about the distribution of values and the third will print the value at the 0.4 quantile. Recall that Gnuastro's Statistics program ignores blank values (in this case: tiles with significant signal), see @ref{Statistics}. @example $ astnoisechisel image.fits --checkqthresh --oneelempertile $ aststatistics image_qthresh.fits $ aststatistics image_qthresh.fits --quantile=0.4 @end example @item --smoothwidth=INT Width of flat kernel used to smooth the interpolated quantile thresholds, see @option{--qthresh} for more. @cindex NaN @item --checkqthresh Check the quantile threshold values on the mesh grid. A file suffixed with @file{_qthresh.fits} will be created showing each step. With this option, NoiseChisel will abort as soon as quantile estimation has been completed, allowing you to inspect the steps leading to the final quantile threshold, this can be disabled with @option{--continueaftercheck}. By default the output will have the same pixel size as the input, but with the @option{--oneelempertile} option, only one pixel will be used for each tile (see @ref{Processing options}). @item -e INT @itemx --erode=INT @cindex Erosion The number of erosions to apply to the binary thresholded image. Erosion is simply the process of flipping (from 1 to 0) any of the foreground pixels that neighbor a background pixel. In a 2D image, there are two kinds of neighbors, 4-connected and 8-connected neighbors. You can specify which type of neighbors should be used for erosion with the @option{--erodengb} option, see below. Erosion has the effect of shrinking the foreground pixels. To put it another way, it expands the holes. This is a founding principle in NoiseChisel: it exploits the fact that with very low thresholds, the holes in the very low surface brightness regions of an image will be smaller than regions that have no signal. Therefore by expanding those holes, we are able to separate the regions harboring signal. @item --erodengb=INT The type of neighborhood (structuring element) used in erosion, see @option{--erode} for an explanation on erosion. Only two integer values are acceptable: 4 or 8. In 4-connectivity, the neighbors of a pixel are defined as the four pixels on the top, bottom, right and left of a pixel that share an edge with it. The 8-connected neighbors on the other hand include the 4-connected neighbors along with the other 4 pixels that share a corner with this pixel. See Figure 6 (a) and (b) in Akhlaghi and Ichikawa (2015) for a demonstration. @item --noerodequant Pure erosion is going to carve off sharp and small objects completely out of the detected regions. This option can be used to avoid missing such sharp and small objects (which have significant pixels, but not over a large area). All pixels with a value larger than the significance level specified by this option will not be eroded during the erosion step above. However, they will undergo the erosion and dilation of the opening step below. Like the @option{--qthresh} option, the significance level is determined using the quantile (a value between 0 and 1). Just as a reminder, in the normal distribution, @mymath{1\sigma}, @mymath{1.5\sigma}, and @mymath{2\sigma} are approximately on the 0.84, 0.93, and 0.98 quantiles. @item -p INT @itemx --opening=INT Depth of opening to be applied to the eroded binary image. Opening is a composite operation. When opening a binary image with a depth of @mymath{n}, @mymath{n} erosions (explained in @option{--erode}) are followed by @mymath{n} dilations. Simply put, dilation is the inverse of erosion. When dilating an image any background pixel is flipped (from 0 to 1) to become a foreground pixel. Dilation has the effect of fattening the foreground. Note that in NoiseChisel, the erosion which is part of opening is independent of the initial erosion that is done on the thresholded image (explained in @option{--erode}). The structuring element for the opening can be specified with the @option{--openingngb} option. Opening has the effect of removing the thin foreground connections (mostly noise) between separate foreground `islands' (detections) thereby completely isolating them. Once opening is complete, we have @emph{initial} detections. @item --openingngb=INT The structuring element used for opening, see @option{--erodengb} for more information about a structuring element. @item -s FLT,FLT @itemx --sigmaclip=FLT,FLT The @mymath{\sigma}-clipping parameters, see @ref{Sigma clipping}. This option takes two values which are separated by a comma (@key{,}). Each value can either be written as a single number or as a fraction of two numbers (for example @code{3,1/10}). The first value to this option is the multiple of @mymath{\sigma} that will be clipped (@mymath{\alpha} in that section). The second value is the exit criteria. If it is less than 1, then it is interpreted as tolerance and if it is larger than one it is assumed to be the fixed number of iterations. Hence, in the latter case the value must be an integer. @item --checkdetsky Check the initial approximation of the sky value and its standard deviation in a FITS file ending with @file{_detsky.fits}. With this option, NoiseChisel will abort as soon as the sky value used for defining pseudo-detections is complete. This allows you to inspect the steps leading to the final quantile threshold, this behavior can be disabled with @option{--continueaftercheck}. By default the output will have the same pixel size as the input, but with the @option{--oneelempertile} option, only one pixel will be used for each tile (see @ref{Processing options}). @item -R FLT @itemx --dthresh=FLT The detection threshold: a multiple of the initial sky standard deviation added with the initial sky approximation (which you can inspect with @option{--checkdetsky}). This flux threshold is applied to the initially undetected regions on the un-convolved image. The background pixels that are completely engulfed in a 4-connected foreground region are converted to background (holes are filled) and one opening (depth of 1) is applied over both the initially detected and undetected regions. The Signal to noise ratio of the resulting `psudo-detections' are used to identify true vs. false detections. See Section 3.1.5 and Figure 7 in Akhlaghi and Ichikawa (2015) for a very complete explanation. @item -i INT @itemx --detsnminarea=INT The minimum area to calculate the Signal to noise ratio on the psudo-detections of both the initially detected and undetected regions. When the area in a psudo-detection is too small, the Signal to noise ratio measurements will not be accurate and their distribution will be heavily skewed to the positive. So it is best to ignore any psudo-detection that is smaller than this area. Use @option{--detsnhistnbins} to check if this value is reasonable or not. @item --checkdetsn Save the S/N values of the pseudo-detections and dilated detections into three files ending with @file{_detsn_sky.XXX}, @file{_detsn_det.XXX}, and @file{_detsn_dilated.XXX}. The @file{.XXX} is determined from the @option{--tableformat} option (see @ref{Input output options}, for example @file{.txt} or @file{.fits}). You can use these to inspect the S/N values and their distribution (in combination with the @option{--checkdetection} option to see where the pseudo-detections are). You can use Gnuastro's @ref{Statistics} to make a histogram of the distribution or any other analysis you would like for better understanding of the distribution (for example through a histogram). With this option, NoiseChisel will abort as soon as the tables are created. This allows you to inspect the steps leading to the final quantile threshold, this behavior (to abort NoiseChisel) can be disabled with @option{--continueaftercheck}. @item -c FLT @itemx --detquant=FLT The quantile of the Signal to noise ratio distribution of the psudo-detections in each mesh to use for filling the large mesh grid. Note that this is only calculated for the large mesh grids that satisfy the minimum fraction of undetected pixels (value of @option{--minbfrac}) and minimum number of psudo-detections (value of @option{--minnumfalse}). @item -d FLT @itemx --detgrowquant=FLT Quantile limit to ``grow'' the final detections. As discussed in the previous options, after applying the initial quantile threshold, layers of pixels are carved off the objects to identify true signal. With this step you can return those low surface brightness layers that were carved off back to the detections. To disable growth, set the value of this option to @code{1}. The process is as follows: after the true detections are found, all the non-detected pixels above this quantile will be put in a list and used to ``grow'' the true detections (seeds of the growth). Like all quantile thresholds, this threshold is defined and applied to the convolved dataset. Afterwards, the dataset is dilated once (with minimum connectivity) to connect very thin regions on the boundary: imagine building a dam at the point rivers spill into an open sea/ocean. Finally, all holes are filled. In the geography metaphor, holes can be seen as the closed (by the dams) rivers and lakes, so this process is like turning the water in all such rivers and lakes into soil. See @option{--detgrowmaxholesize} for configuring the hole filling. @item --detgrowmaxholesize=INT The maximum hole size to fill during the final expansion of the true detections as described in @option{--detgrowquant}. This is necessary when the input contains many smaller objects and can be used to avoid marking blank sky regions as detections. For example multiple galaxies can be positioned such that they surround an empty region of sky. If all the holes are filled, the Sky region in between them will be taken as a detection which is not desired. To avoid such cases, the integer given to this option must be smaller than the hole between the objects. On the other hand, if you have a very large (and extended) galaxy, the diffuse wings of the galaxy may create very large holes. In such cases, a larger value to this option will cause the whole region to be detected as part of the large galaxy and thus detect it to extremely low surface brightness limits. @item --cleangrowndet After dilation, if the signal-to-noise ratio of a detection is less than the derived pseudo-detection S/N limit, that detection will be discarded. In an ideal/clean noise, a true detection's S/N should be larger than its constituent pseudo-detections because its area is larger and it also covers more signal. However, on a false detections (especially at lower @option{--detquant} values), the increase in size can cause a decrease in S/N below that threshold. This will improve purity and not change completeness (a true detection will not be discarded). Because a true detection has flux in its vicinity and dilation will catch more of that flux and increase the S/N. So on a true detection, the final S/N cannot be less than pseudo-detections. However, in many real images bad processing creates artifacts that cannot be accurately removed by the Sky subtraction. In such cases, this option will decrease the completeness (will artificially discard true detections). So this feature is not default and should to be explicitly called when you know the noise is clean. @item --checkdetection Every step of the detection process will be added as an extension to a file with the suffix @file{_det.fits}. Going through each would just be a repeat of the explanations above and also of those in Akhlaghi and Ichikawa (2015). The extension label should be sufficient to recognize which step you are observing. Viewing all the steps can be the best guide in choosing the best set of parameters. With this option, NoiseChisel will abort as soon as a snapshot of all the detection process is saved. This behavior can be disabled with @option{--continueaftercheck}. @item --checksky Check the derivation of the final sky and its standard deviation values on the mesh grid. With this option, NoiseChisel will abort as soon as the sky value is estimated over the image (on each tile). This behavior can be disabled with @option{--continueaftercheck}. By default the output will have the same pixel size as the input, but with the @option{--oneelempertile} option, only one pixel will be used for each tile (see @ref{Processing options}). @end table @node Segmentation options, NoiseChisel output, Detection options, Invoking astnoisechisel @subsubsection Segmentation options Segmentation is the process of (possibly) breaking up a detection into multiple segments (technically called @emph{objects} and @emph{clumps} in NoiseChisel). In deep surveys segmentation becomes particularly important because we will be detecting more diffuse flux so galaxy images are going to overlap more. It is thus very important to be able separate the pixels within a detection. In NoiseChisel, segmentation is done by first finding the `true' clumps over a detection and then expanding those clumps to a certain flux limit. True clumps are found in a process very similar to the true detections explained in @ref{Detection options}, see @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa [2015]} for more information. If the connections between the grown clumps are weaker than a given threshold, the grown clumps are considered to be separate objects. @table @option @item -m INT @itemx --segsnminarea=INT The minimum area which a clump in the undetected regions should have in order to be considered in the clump Signal to noise ratio measurement. If this size is set to a small value, the Signal to noise ratio of false clumps will not be accurately found. It is recommended that this value be larger than the value to @option{--detsnminarea}. Because the clumps are found on the convolved (smoothed) image while the psudo-detections are found on the input image. You can use @option{--checkclumpsn} and @option{--checksegmentation} to see if your chosen value is reasonable or not. @item --checkclumpsn Save the S/N values of the clumps into two files ending with @file{_clumpsn_sky.XXX} and @file{_clumpsn_det.XXX}. The @file{.XXX} is determined from the @option{--tableformat} option (see @ref{Input output options}, for example @file{.txt} or @file{.fits}). You can use these to inspect the S/N values and their distribution (in combination with the @option{--checksegmentation} option to see where the clumps are). You can use Gnuastro's @ref{Statistics} to make a histogram of the distribution (ready for plotting in a text file, or a crude ASCII-art demonstration on the command-line). With this option, NoiseChisel will abort as soon as the two tables are created. This allows you to inspect the steps leading to the final S/N quantile threshold, this behavior can be disabled with @option{--continueaftercheck}. @item -g FLT @itemx --segquant=FLT The quantile of the noise clump Signal to noise ratio distribution. This value is used to identify true clumps over the detected regions. You can get the full distribution of clumps S/Ns over the undetected areas with the @option{--checkclumpsn} option and see them with @option{--checksegmentation}. @item -v @itemx --keepmaxnearriver Keep a clump whose maximum flux is 8-connected to a river pixel. By default such clumps over detections are considered to be noise and are removed irrespective of their brightness (see @ref{Flux Brightness and magnitude}). Over large profiles, that sink into the noise very slowly, noise can cause part of the profile (which was flat without noise) to become a very large and with a very high Signal to noise ratio. In such cases, the pixel with the maximum flux in the clump will be immediately touching a river pixel. @item -G FLT @itemx --gthresh=FLT Threshold (multiple of the sky standard deviation added with the sky) to stop growing true clumps. Once true clumps are found, they are set as the basis to segment the detected region. They are grown until the threshold specified by this option. @item -y INT @itemx --minriverlength=INT The minimum length of a river between two grown clumps for it to be considered in Signal to noise ratio estimations. Similar to @option{--segsnminarea} and @option{--detsnminarea}, if the length of the river is too short, the Signal to noise ratio can be noisy and unreliable. Any existing rivers shorter than this length will be considered as non-existent, independent of their Signal to noise ratio. Since the clumps are grown on the input image, this value should best be similar to the value of @option{--detsnminarea}. Recall that the clumps were defined on the convolved image so @option{--segsnminarea} was larger than @option{--detsnminarea}. @item -O FLT @itemx --objbordersn=FLT The maximum Signal to noise ratio of the rivers between two grown clumps in order to consider them as separate `objects'. If the Signal to noise ratio of the river between two grown clumps is larger than this value, they are defined to be part of one `object'. Note that the physical reality of these `objects' can never be established with one image, or even multiple images from one broad-band filter. Any method we devise to define `object's over a detected region is ultimately subjective. Two very distant galaxies or satellites in one halo might lie in the same line of sight and be detected as clumps on one detection. On the other hand, the connection (through a spiral arm or tidal tail for example) between two parts of one galaxy might have such a low surface brightness that they are broken up into multiple detections or objects. In fact if you have noticed, exactly for this purpose, this is the only Signal to noise ratio that the user gives into NoiseChisel. The `true' detections and clumps can be objectively identified from the noise characteristics of the image, so you don't have to give any hand input Signal to noise ratio. @item --grownclumps In the output (see @ref{NoiseChisel output}) store the grown clumps (or full detected region if only one clump was present in that detection). By default the original clumps are stored as the third extension of the output, if this option is called, it is replaced with the grown clump labels. @item --checksegmentation A file with the suffix @file{_seg.fits} will be created. This file keeps all the relevant steps in finding true clumps and segmenting the detections into multiple objects in various extensions. Having read the paper or the steps above. Examining this file can be an excellent guide in choosing the best set of parameters. Note that calling this function will significantly slow NoiseChisel. In verbose mode (without the @option{--quiet} option, see @ref{Operating mode options}) the important steps (along with their extension names) will also be reported. With this option, NoiseChisel will abort as soon as the two tables are created. This behavior can be disabled with @option{--continueaftercheck}. @end table @node NoiseChisel output, , Segmentation options, Invoking astnoisechisel @subsubsection NoiseChisel output The default name and directory of the outputs are explained in @ref{Automatic output}. NoiseChisel's default output (when none of the options starting with @option{--check} or the @option{--output} option are called) is one file ending with @file{_labeled.fits}. This file has the extensions listed below: @enumerate @item A copy of the input image, a copy is placed here for the following reasons: @itemize @item By flipping through the extensions, a user can check how accurate the detection and segmentation process was. @item All the inputs to MakeCatalog (see @ref{MakeCatalog}) are included in this one file which makes the running of MakeCatalog after NoiseChisel very easy. @end itemize @item The object/detection labels. Each pixel in the input image is given a label in this extension, the labels start from one. If the @option{--onlydetection} option is given, each large connected part of the image has one label. Without that option, this extension is going to show the labels of the objects that are found after segmentation. The total number of labels is stored as the value to the @code{NOBJS}/@code{NDETS} keyword in the header of this extension. This number is also printed in verbose mode. @item The clump labels when @option{--onlydetection} is not called. All the pixels in the input image that belong to a true clump are given a positive label in this extension. The detected regions that were not a clump are given a negative value to clearly identify the sky noise from the diffuse detections. The total number of clumps in this image is stored in the @code{NCLUMPS} keyword of this extension and printed in verbose output. If the @option{--grownclumps} option is called, or a value of @code{1} is given to it in any of the configuration files, then instead of the original clump regions, the grown clumps will be stored in this extension. Note that if there is only one clump (or no clumps) over a detected region, then the whole detected region is given a label of 1. @item The final sky value on each pixel. See @ref{Sky value} for a complete explanation. @item Similar to the previous mesh but for the standard deviation on each pixel. @end enumerate To inspect NoiseChisel's output, you can configure SAO DS9 in your Graphic User Interface (GUI) to open NoiseChisel's output as a multi-extension data cube. This will allow you to flip through the different extensions and visually inspect the results. This process has been described for the GNOME GUI (most common GUI in GNU/Linux operating systems) in @ref{Viewing multiextension FITS images}. @node MakeCatalog, Match, NoiseChisel, Data analysis @section MakeCatalog At the lowest level, a dataset (for example an image) is just a collection of values, placed after each other in any number of dimensions (for example an image is a 2D dataset). Each data-element (pixel) just has two properties: its position (relative to the rest) and its value. The entire input dataset (a large image for example) is rarely treated as a singular entity for higher-level analysis@footnote{In low-level reduction/preparation of a dataset, you do in fact treat a whole image as a single entity. You can derive the over-all properties of all the pixels in a dataset with Gnuastro's Statistics program (see @ref{Statistics})}. You want to know the properties of the scientifically interesting targets that are embedded in it. For example the magnitudes, positions and elliptical properties of the galaxies that are in the image. MakeCatalog is Gnuastro's program to derive higher-level information for @emph{pre-defined} regions of a dataset. The role of MakeCatalog in a scientific analysis and the benefits of this model of data-analysis (were detection/identification is separated from measurement) is discussed in @url{https://arxiv.org/abs/1611.06387v1, Akhlaghi [2016]}. We strongly recommend reading this short paper for a better understanding of this methodology and use MakeCatalog most effectively. However, that paper cannot undergo any more change, so this manual is the definitive guide. As discussed above, you have to define the regions of a dataset that you are interested in @emph{before} running MakeCatalog. MakeProfiles currently uses labeled dataset(s) for this job. A labeled dataset for a given input dataset has the size/dimensions as the input, but its pixels have an integer type (see @ref{Numeric data types})@footnote{If the program you used to generate the labeled image only outputs floating point types, but you know it only has integer valued pixels that are stored in a floating point container, you can use Gnuastro's Arithmetic program (see @ref{Arithmetic}) to change the numerical data type of the image (@file{flabel.fits}) to an integer type image (@file{label.fits}) with a command like below:@*@command{$ astarithmetic flabel.fits int32 --output=label.fits}}: all pixels with the same label (integers larger and equal to one) are used to generate the requested output columns of MakeCatalog for the row of their labeled value. For example, the flux weighted average position of all the pixels with a label of 42 will be considered as the central position@footnote{See @ref{Measuring elliptical parameters} for a discussion on this and the derivation of positional parameters.} of the 42nd row of the output catalog. Pixels with labels equal to or smaller than zero will be ignored by MakeCatalog. In other words, the number of rows of the output catalog will be determined from the labeled image. The labeled image maybe created with any tool@footnote{For example, you can even use a graphic user interface image editing tool like the GNU Image Manipulation Program (or GIMP) and use Gnuastro's ConvertType to convert it to a FITS file.}. Within Gnuastro you can use these two solutions depending on a-priori/parametric knowledge of the targets you want to study: @itemize @cindex Aperture photometry @cindex Photometry, aperture @item When you already know the positions and parametric (for example circular or elliptical) properties of the targets, you can use @ref{MakeProfiles} to generate a labeled image from another catalog. This is also known as aperture photometry (the apertures are defined a-priori). @item When the shape of your targets cannot be parameterized accurately (for example galaxies), or if you don't know the number/shape of the targets in the image, you can use Gnuastro's NoiseChisel program to detect and segment (make labeled images of) the @emph{objects} and @emph{clumps} in the input image, see @ref{NoiseChisel}. @end itemize @menu * Detection and catalog production:: Discussing why/how to treat these separately * Quantifying measurement limits:: For comparing different catalogs. * Measuring elliptical parameters:: Estimating elliptical parameters. * Adding new columns to MakeCatalog:: How to add new columns. * Invoking astmkcatalog:: Options and arguments to MakeCatalog. @end menu @node Detection and catalog production, Quantifying measurement limits, MakeCatalog, MakeCatalog @subsection Detection and catalog production As discussed above (@ref{MakeCatalog}), NoiseChisel (Gnuastro's signal detection tool, see @ref{NoiseChisel}) does not produce any catalog of the detected objects. However, most other common tools in astronomical data-analysis (for example SExtractor@footnote{@url{https://www.astromatic.net/software/sextractor}}) merge the two processes into one. Gnuastro's modularized methodology is therefore new to many experienced astronomers and deserves a short review here. Further discussion on the benefits of this methodology can be seen in @url{https://arxiv.org/abs/1611.06387v1, Akhlaghi [2016]}. To simplify catalog production from a raw input image in Gnuastro, NoiseChisel's output (see @ref{NoiseChisel output}) can be directly fed into MakeCatalog. This is good when no further customization is necessary and you want a fast/simple. But the modular approach taken by Gnuastro has many benefits that will become more apparent as you get more experienced in astronomical data analysis and want to be more creative in using your valuable data for the exciting scientific project you are working on. In short the reasons for this modularity can be classified as below: @itemize @item Complexity of a monolith: Adding in a catalog functionality to the detector program will add several more steps (and many more options) to its processing that can equally well be done outside of it. This makes following what the program does harder for the users and developers, it can also potentially add many bugs. As an example, if the parameter you want to measure over one profile is not provided by the developers of MakeCatalog. You can simply open this tiny little program and add your desired calculation easily. This process is discussed in @ref{Adding new columns to MakeCatalog}. However, if making a catalog was part of NoiseChisel, it would require a lot of energy to understand all the steps and internal structures of that large program (the most complex in Gnuastro) in order to add desired parameter in a catalog. @item Simplicity/robustness of independent, modular tools: making a catalog is a logically separate process from labeling (detection and segmentation). A user might want to do certain operations on the labeled regions before creating a catalog for them. Another user might want the properties of the same pixels/objects in another image (another filter for example) to measure the colors or SED fittings. Here is an example of doing both: suppose you have images in various broad band filters at various resolutions and orientations. The image of one color will thus not lie exactly on another or even be in the same scale. However, it is imperative that the same pixels be used in measuring the colors of galaxies. To solve the problem, NoiseChisel can be run on the reference image to generate the labeled image. After wards, the labeled image can be warped into the grid of the other color (using @ref{Warp}). MakeCatalog will then generate the same catalog for both colors (with the different labeled images). It is currently customary to warp the images to the same pixel grid, however, modification of the scientific dataset is very harmful for the data and creates correlated noise. It is much more accurate to do the transformations on the labeled image. @end itemize @node Quantifying measurement limits, Measuring elliptical parameters, Detection and catalog production, MakeCatalog @subsection Quantifying measurement limits @cindex Depth @cindex Clump magnitude limit @cindex Object magnitude limit @cindex Limit, object/clump magnitude @cindex Magnitude, object/clump detection limit No measurement on a real dataset can be perfect: you can only reach a certain level/limit of accuracy. Therefore, a meaningful (scientific) analysis requires an understanding of these limits for the dataset and your analysis tools: different datasets (images in the case of MakeCatalog) have different noise properties and different detection methods (one method/algorith/software that is run with a different set of parameters is considered as a different detection method) will have different abilities to detect or measure certain kinds of signal (astronomical objects) and their properties in an image. Hence, quantifying the detection and measurement limitations with a particular dataset and analysis tool is the most crucial/critical aspect of any high-level analysis. In this section we discuss some of the most general limits that are very important in any astronomical data analysis and how MakeCatalog makes it easy to find them. Depending on the higher-level analysis, there are more tests that must be done, but these are usually necessary in any case. In astronomy, it is common to use the magnitude (a unit-less scale) and physical units, see @ref{Flux Brightness and magnitude}. Therefore all the measurements discussed here are defined in units of magnitudes. @table @asis @item Surface brightness limit (of whole dataset) @cindex Surface brightness As we make more observations on one region of the sky, and add the observations into one dataset, we are able to decrease the standard deviation of the noise in each pixel@footnote{This is true for any noisy data, not just astronomical images.}. Qualitatively, this decrease manifests its self by making fainter (per pixel) parts of the objects in the image more visible. Technically, this is known as surface brightness. Quantitatively, it increases the Signal to noise ratio, since the signal increases faster than noise with more data. It is very important to have in mind that here, noise is defined per pixel (or in the units of our data measurement), not per object. You can think of the noise as muddy water that is completely covering a flat ground@footnote{The ground is the sky value in this analogy, see @ref{Sky value}. Note that this analogy only holds for a flat sky value across the surface of the image or ground.} with some regions higher than the others@footnote{The peaks are the brightest parts of astronomical objects in this analogy.} in it. In this analogy, height (from the ground) is @emph{surface brightness}. Let's assume that in your first observation the muddy water has just been stirred and you can't see anything through it. As you wait and make more observations, the mud settles down and the @emph{depth} of the transparent water increases, making the summits of hills visible. As the depth of clear water increases, the parts of the hills with lower heights (less parts with lower surface brightness) can be seen more clearly. @cindex Data's depth The outputs of NoiseChisel include the Sky standard deviation (@mymath{\sigma}) on every group of pixels (a mesh) that were calculated from the undetected pixels in that mesh, see @ref{Tessellation} and @ref{NoiseChisel output}. Let's take @mymath{\sigma_m} as the median @mymath{\sigma} over the successful meshes in the image (prior to interpolation or smoothing). On different instruments pixels have different physical sizes (for example in micro-meters, or spatial angle over the sky), nevertheless, a pixel is our unit of data collection. In other words, while quantifying the noise, the physical or projected size of the pixels is irrelevant. We thus define the Surface brightness limit or @emph{depth}, in units of magnitude/pixel, of a data-set, with zeropoint magnitude @mymath{z}, with the @mymath{n}th multiple of @mymath{\sigma_m} as (see @ref{Flux Brightness and magnitude}): @dispmath{SB_{\rm Pixel}=-2.5\times\log_{10}{(n\sigma_m)}+z} @cindex XDF @cindex CANDELS As an example, the XDF survey covers part of the sky that the Hubble space telescope has observed the most (for 85 orbits) and is consequently very small (@mymath{\sim4} arcmin@mymath{^2}). On the other hand, the CANDELS survey, is one of the widest multi-color surveys covering several fields (about 720 arcmin@mymath{^2}) but its deepest fields have only 9 orbits observation. The depth of the XDF and CANDELS-deep surveys in the near infrared WFC3/F160W filter are respectively 34.40 and 32.45 magnitudes/pixel. In a single orbit image, this same field has a depth of 31.32. Recall that a larger magnitude corresponds to less brightness. The low-level magnitude/pixel measurement above is only useful when all the datasets you want to use belong to one instrument (telescope and camera). However, you will often find yourself using datasets from various instruments with different pixel scales (projected pixel sizes). If we know the pixel scale, we can obtain a more easily comparable surface brightness limit in units of: magnitude/arcsec@mymath{^2}. Let's assume that the dataset has a zeropoint value of @mymath{z}, and every pixel is @mymath{p} arcsec@mymath{^2} (so @mymath{A/p} is the number of pixels that cover an area of @mymath{A} arcsec@mymath{^2}). If the @mymath{n}th multiple of @mymath{\sigma_m} is desired, then the surface brightness (in units of magnitudes per A arcsec@mymath{^2}) is@footnote{If we have @mymath{N} datasets, each with noise @mymath{\sigma}, the noise of a combined dataset will increase as @mymath{\sqrt{N}\sigma}.}: @dispmath{SB_{\rm Projected}=-2.5\times\log_{10}{\left(n\sigma_m\sqrt{A\over p}\right)+z}} Note that this is an extrapolation of the actually measured value of @mymath{\sigma_m} (which was per pixel). So it should be used with extreme care (for example the dataset must have an approximately flat depth). For each detection over the dataset, you can estimate an upper-limit magnitude which actually uses the detection's area/footprint. It doesn't extrapolate and even accounts for correlated noise features. Therefore, the upper-limit magnitude is a much better measure of your dataset's surface brightness limit for each particular object. MakeCatalog will calculate the input dataset's @mymath{SB_{\rm Pixel}} and @mymath{SB_{\rm Projected}} and write them as comments/meta-data in the output catalog(s). Just note that @mymath{SB_{\rm Projected}} is only calculated if the input has World Coordinate System (WCS). @item Completeness limit (of each detection) @cindex Completeness As the surface brightness of the objects decreases, the ability to detect them will also decrease. An important statistic is thus the fraction of objects of similar morphology and brightness that will be identified with our detection algorithm/parameters in the given image. This fraction is known as completeness. For brighter objects, completeness is 1: all bright objects that might exist over the image will be detected. However, as we go to lower surface brightness objects, we fail to detect some and gradually we are not able to detect anything any more. For a given profile, the magnitude where the completeness drops below a certain level usually above @mymath{90\%} is known as the completeness limit. @cindex Purity @cindex False detections @cindex Detections false Another important parameter in measuring completeness is purity: the fraction of true detections to all true detections. In effect purity is the measure of contamination by false detections: the higher the purity, the lower the contamination. Completeness and purity are anti-correlated: if we can allow a large number of false detections (that we might be able to remove by other means), we can significantly increase the completeness limit. One traditional way to measure the completeness and purity of a given sample is by embedding mock profiles in regions of the image with no detection. However in such a study we must be really careful to choose model profiles as similar to the target of interest as possible. @item Magnitude measurement error (of each detection) Any measurement has an error and this includes the derived magnitude for an object. Note that this value is only meaningful when the object's magnitude is brighter than the upper-limit magnitude (see the next items in this list). As discussed in @ref{Flux Brightness and magnitude}, the magnitude (@mymath{M}) of an object with brightness @mymath{B} and Zeropoint magnitude @mymath{z} can be written as: @dispmath{M=-2.5\log_{10}(B)+z} @noindent Calculating the derivative with respect to @mymath{B}, we get: @dispmath{{dM\over dB} = {-2.5\over {B\times ln(10)}}} @noindent From the Tailor series (@mymath{\Delta{M}=dM/dB\times\Delta{B}}), we can write: @dispmath{\Delta{M} = \left|{-2.5\over ln(10)}\right|\times{\Delta{B}\over{B}}} @noindent But, @mymath{\Delta{B}/B} is just the inverse of the Signal-to-noise ratio (@mymath{S/N}), so we can write the error in magnitude in terms of the signal-to-noise ratio: @dispmath{ \Delta{M} = {2.5\over{S/N\times ln(10)}} } MakeCatalog uses this relation to estimate the magnitude errors. The signal-to-noise ratio is calculated in different ways for clumps and objects (see @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa [2015]}), but this single equation can be used to estimate the measured magnitude error afterwards for any type of target. @item Upper limit magnitude (of each detection) Due to the noisy nature of data, it is possible to get arbitrarily low values for a faint object's brightness (or arbitrarily high magnitudes). Given the scatter caused by the noise, such small values are meaningless: another similar depth observation will give a radically different value. This problem is most common when you use one image/filter to generate target labels (which specify which pixels belong to which object, see @ref{NoiseChisel output} and @ref{MakeCatalog}) and another image/filter to generate a catalog for measuring colors. The object might not be visible in the filter used for the latter image, or the image @emph{depth} (see above) might be much shallower. So you will get unreasonably faint magnitudes. For example when the depth of the image is 32 magnitudes, a measurement that gives a magnitude of 36 for a @mymath{\sim100} pixel object is clearly unreliable. In another similar depth image, we might measure a magnitude of 30 for it, and yet another might give 33. Furthermore, due to the noise scatter so close to the depth of the data-set, the total brightness might actually get measured as a negative value, so no magnitude can be defined (recall that a magnitude is a base-10 logarithm). @cindex Upper limit magnitude @cindex Magnitude, upper limit Using such unreliable measurements will directly affect our analysis, so we must not use them. However, all is not lost! Given our limited depth, there is one thing we can deduce about the object's magnitude: we can say that if something actually exists here (possibly buried deep under the noise), it must have a magnitude that is fainter than an @emph{upper limit magnitude}. To find this upper limit magnitude, we place the object's footprint (segmentation map) over random parts of the image where there are no detections, so we only have pure (possibly correlated) noise and undetected objects. Doing this a large number of times will give us a distribution of brightness values. The standard deviation (@mymath{\sigma}) of that distribution can be used to quantify the upper limit magnitude. @cindex Correlated noise Traditionally, faint/small object photometry was done using fixed circular apertures (for example with a diameter of @mymath{N} arc-seconds). In this way, the upper limit was like the depth discussed above: one value for the whole image. But with the much more advanced hardware and software of today, we can make customized segmentation maps for each object. The number of pixels (are of the object) used directly affects the final distribution and thus magnitude. Also the image correlated noise might actually create certain patters, so the shape of the object can also affect the result. So in MakeCatalog, the upper limit magnitude is found for each object in the image separately. Not one value for the whole image. @end table @node Measuring elliptical parameters, Adding new columns to MakeCatalog, Quantifying measurement limits, MakeCatalog @subsection Measuring elliptical parameters The shape or morphology of a target is one of the most commonly desired parameters of a target. Here, we will review the derivation of the most basic/simple morphological parameters: the elliptical parameters for a set of labeled pixels. The elliptical parameters are: the (semi-)major axis, the (semi-)minor axis and the position angle along with the central position of the profile. The derivations below follow the SExtractor manual derivations with some added explanations for easier reading. @cindex Moments Let's begin with one dimension for simplicity: Assume we have a set of @mymath{N} values @mymath{B_i} (keeping the spatial distribution of brightness for example), each at position @mymath{x_i}. The simplest parameter we can define is the geometric center of the object (@mymath{x_g}) (ignoring the brightness values): @mymath{x_g=(\sum_ix_i)/N}. @emph{Moments} are defined to incorporate both the value (brightness) and position of the data. The first moment can be written as: @dispmath{\overline{x}={\sum_iB_ix_i \over \sum_iB_i}} @cindex Variance @cindex Second moment @noindent This is essentially the weighted (by @mymath{B_i}) mean position. The geometric center (@mymath{x_g}, defined above) is a special case of this with all @mymath{B_i=1}. The second moment is essentially the variance of the distribution: @dispmath{\overline{x^2}\equiv{\sum_iB_i(x_i-\overline{x})^2 \over \sum_iB_i} = {\sum_iB_ix_i^2 \over \sum_iB_i} - 2\overline{x}{\sum_iB_ix_i\over\sum_iB_i} + \overline{x}^2 ={\sum_iB_ix_i^2 \over \sum_iB_i} - \overline{x}^2} @cindex Standard deviation @noindent The last step was done from the definition of @mymath{\overline{x}}. Hence, the square root of @mymath{\overline{x^2}} is the spatial standard deviation (along the one-dimension) of this particular brightness distribution (@mymath{B_i}). Crudely (or qualitatively), you can think of its square root as the distance (from @mymath{\overline{x}}) which contains a specific amount of the flux (depending on the @mymath{B_i} distribution). Similar to the first moment, the geometric second moment can be found by setting all @mymath{B_i=1}. So while the first moment quantified the position of the brightness distribution, the second moment quantifies how that brightness is dispersed about the first moment. In other words, it quantifies how ``sharp'' the object's image is. @cindex Floating point error Before continuing to two dimensions and the derivation of the elliptical parameters, let's pause for an important implementation technicality. You can ignore this paragraph and the next two if you don't want to implement these concepts. The basic definition (first definition of @mymath{\overline{x^2}} above) can be used without any major problem. However, using this fraction requires two runs over the data: one run to find @mymath{\overline{x}} and another run to find @mymath{\overline{x^2}} from @mymath{\overline{x}}, this can be slow. The advantage of the last fraction above, is that we can estimate both the first and second moments in one run (since the @mymath{-\overline{x}^2} term can easily be added later). The logarithmic nature of floating point number digitization creates a complication however: suppose the object is located between pixels 10000 and 10020. Hence the target's pixels are only distributed over 20 pixels (with a standard deviation @mymath{<20}), while the mean has a value of @mymath{\sim10000}. The @mymath{\sum_iB_i^2x_i^2} will go to very very large values while the individual pixel differences will be orders of magnitude smaller. This will lower the accuracy of our calculation due to the limited accuracy of floating point operations. The variance only depends on the distance of each point from the mean, so we can shift all position by a constant/arbitrary @mymath{K} which is much closer to the mean: @mymath{\overline{x-K}=\overline{x}-K}. Hence we can calculate the second order moment using: @dispmath{ \overline{x^2}={\sum_iB_i(x_i-K)^2 \over \sum_iB_i} - (\overline{x}-K)^2 } @noindent The closer @mymath{K} is to @mymath{\overline{x}}, the better (the sums of squares will involve smaller numbers), as long as @mymath{K} is within the object limits (in the example above: @mymath{10000\leq{K}\leq10020}), the floating point error induced in our calculation will be negligible. For the most simplest implementation, MakeCatalog takes @mymath{K} to be the smallest position of the object in each dimension. Since @mymath{K} is arbitrary and an implementation/technical detail, we will ignore it for the remainder of this discussion. In two dimensions, the mean and variances can be written as: @dispmath{\overline{x}={\sum_iB_ix_i\over B_i}, \quad \overline{x^2}={\sum_iB_ix_i^2 \over \sum_iB_i} - \overline{x}^2} @dispmath{\overline{y}={\sum_iB_iy_i\over B_i}, \quad \overline{y^2}={\sum_iB_iy_i^2 \over \sum_iB_i} - \overline{y}^2} @dispmath{\quad\quad\quad\quad\quad\quad\quad\quad\quad \overline{xy}={\sum_iB_ix_iy_i \over \sum_iB_i} - \overline{x}\times\overline{y}} If an elliptical profile's major axis exactly lies along the @mymath{x} axis, then @mymath{\overline{x^2}} will be directly proportional with the profile's major axis, @mymath{\overline{y^2}} with its minor axis and @mymath{\overline{xy}=0}. However, in reality we are not that lucky and (assuming galaxies can be parameterized as an ellipse) the major axis of galaxies can be in any direction on the image (in fact this is one of the core principles behind weak-lensing by shear estimation). So the purpose of the remainder of this section is to define a strategy to measure the position angle and axis ratio of some randomly positioned ellipses in an image, using the raw second moments that we have calculated above in our image coordinates. Let's assume we have rotated the galaxy by @mymath{\theta}, the new second order moments are: @dispmath{\overline{x_\theta^2} = \overline{x^2}\cos^2\theta + \overline{y^2}\sin^2\theta - 2\overline{xy}\cos\theta\sin\theta } @dispmath{\overline{y_\theta^2} = \overline{x^2}\sin^2\theta + \overline{y^2}\cos^2\theta + 2\overline{xy}\cos\theta\sin\theta} @dispmath{\overline{xy_\theta} = \overline{x^2}\cos\theta\sin\theta - \overline{y^2}\cos\theta\sin\theta + \overline{xy}(\cos^2\theta-\sin^2\theta)} @noindent The best @mymath{\theta} (@mymath{\theta_0}, where major axis lies along the @mymath{x_\theta} axis) can be found by: @dispmath{\left.{\partial \overline{x_\theta^2} \over \partial \theta}\right|_{\theta_0}=0} Taking the derivative, we get: @dispmath{2\cos\theta_0\sin\theta_0(\overline{y^2}-\overline{x^2}) + 2(\cos^2\theta_0-\sin^2\theta_0)\overline{xy}=0} When @mymath{\overline{x^2}\neq\overline{y^2}}, we can write: @dispmath{\tan2\theta_0 = 2{\overline{xy} \over \overline{x^2}-\overline{y^2}}.} @cindex Position angle @noindent MakeCatalog uses the standard C math library's @code{atan2} function to estimate @mymath{\theta_0}, which we define as the position angle of the ellipse. To recall, this is the angle of the major axis of the ellipse with the @mymath{x} axis. By definition, when the elliptical profile is rotated by @mymath{\theta_0}, then @mymath{\overline{xy_{\theta_0}}=0}, @mymath{\overline{x_{\theta_0}^2}} will be the extent of the maximum variance and @mymath{\overline{y_{\theta_0}^2}} the extent of the minimum variance (which are perpendicular for an ellipse). Replacing @mymath{\theta_0} in the equations above for @mymath{\overline{x_\theta}} and @mymath{\overline{y_\theta}}, we can get the semi-major (@mymath{A}) and semi-minor (@mymath{B}) lengths: @dispmath{A^2\equiv\overline{x_{\theta_0}^2}= {\overline{x^2} + \overline{y^2} \over 2} + \sqrt{\left({\overline{x^2}-\overline{y^2} \over 2}\right)^2 + \overline{xy}^2}} @dispmath{B^2\equiv\overline{y_{\theta_0}^2}= {\overline{x^2} + \overline{y^2} \over 2} - \sqrt{\left({\overline{x^2}-\overline{y^2} \over 2}\right)^2 + \overline{xy}^2}} As a summary, it is important to remember that the units of @mymath{A} and @mymath{B} are in pixels (the standard deviation of a positional distribution) and that they represent the spatial light distribution of the object in both image dimensions (rotated by @mymath{\theta_0}). When the object cannot be represented as an ellipse, this interpretation breaks down: @mymath{\overline{xy_{\theta_0}}\neq0} and @mymath{\overline{y_{\theta_0}^2}} will not be the direction of minimum variance. @node Adding new columns to MakeCatalog, Invoking astmkcatalog, Measuring elliptical parameters, MakeCatalog @subsection Adding new columns to MakeCatalog MakeCatalog is designed to allow easy addition of different measurements over a labeled image (see @url{https://arxiv.org/abs/1611.06387v1, Akhlaghi [2016]}). A check-list style description of necessary steps to do that is described in this section. The common development characteristics of MakeCatalog and other Gnuastro programs is explained in @ref{Developing}. We strongly encourage you to have a look at that chapter to greatly simplify your navigation in the code. After adding and testing your column, you are most welcome (and encouraged) to share it with us so we can add to the next release of Gnuastro for everyone else to also benefit from your efforts. MakeCatalog will first pass over each label's pixels two times and do necessary raw/internal calculations. Once the passes are done, it will use the raw information for filling the final catalog's columns. In the first pass it will gather mainly object information and in the second run, it will mainly focus on the clumps, or any other measurement that needs an output from the first pass. These two passes are designed to be raw summations: no extra processing. This will allow parallel processing and simplicity/clarity. So if your new calculation, needs new raw information from the pixels, then you will need to also modify the respective @code{mkcatalog_first_pass} and @code{mkcatalog_second_pass} functions (both in @file{bin/mkcatalog/mkcatalog.c}) and define new raw table columns in @file{main.h} (hopefully the comments in the code are clear enough). In all these different places, the final columns are sorted in the same order (same order as @ref{Invoking astmkcatalog}). This allows a particular column/option to be easily found in all steps. Therefore in adding your new option, be sure to keep it in the same relative place in the list in all the separate places (it doesn't necessarily have to be in the end), and near conceptually similar options. @table @file @item main.h The @code{objectcols} and @code{clumpcols} enumerated variables (@code{enum}) define the raw/internal calculation columns. If your new column requires new raw calculations, add a row to the respective list. If your calculation requires any other settings parameters, you should add a variable to the @code{mkcatalogparams} structure. @item ui.h The @code{option_keys_enum} associates a unique value for each option to MakeProfiles. The options that have a short option version, the single character short comment is used for the value. Those that don't have a short option version, get a large integer automatically. You should add a variable here to identify your desired column. @cindex GNU C library @item args.h This file specifies all the parameters for the GNU C library, Argp structure that is in charge of reading the user's options. To define your new column, just copy an existing set of parameters and change the first, second and 5th values (the only ones that differ between all the columns), you should use the macro you defined in @file{ui.h} here. @item ui.c If your column includes any particular settings (you added a variable to the @code{mkcatalogparams} structure in @file{main.h}), you should do the sanity checks and preparations for it here. Otherwise, you can ignore this file. @item columns.c This file will contain the main definition and high-level calculation of your new column through the @code{columns_define_alloc} and @code{columns_fill} functions. In the first, you specify the basic information about the column: its name, units, comments, type (see @ref{Numeric data types}) and how it should be printed if the output is a text file. You should also specify the raw/internal columns that are necessary for this column here as the many existing examples show. Through the types for objects and rows, you can specify if this column is only for clumps, objects or both. The second main function (@code{columns_fill}) writes the final value into the appropriate column for each object and clump. As you can see in the many existing examples, you can define your processing on the raw/internal calculations here and save them in the output. @item mkcatalog.c As described before, this file contains the two main MakeCatalog work-horses: @code{mkcatalog_first_pass} and @code{mkcatalog_second_pass}, their names are descriptive enough and their internals are also clear and heavily commented. @end table @node Invoking astmkcatalog, , Adding new columns to MakeCatalog, MakeCatalog @subsection Invoking MakeCatalog MakeCatalog will make a catalog from an input image and at least on labeled image. The executable name is @file{astmkcatalog} with the following general template @example $ astmkcatalog [OPTION ...] InputImage.fits @end example @noindent One line examples: @example ## Create catalog with RA, Dec, Magnitude and Magnitude error, ## `input.fits' is NoiseChisel's output: $ astmkcatalog --ra --dec --magnitude --magnitudeerr input.fits ## Same catalog as above (using short options): $ asmkcatalog -rdmG input.fits ## Write the catalog to a FITS table: $ astmkcatalog -mpQ --output=cat.fits input_labeled.fits ## Read the columns to create from `columns.conf': $ astmkcatalog --config=columns.conf input_labeled.fits ## Use different images for the objects and clumps inputs: $ astmkcatalog --objectsfile=K_labeled.fits --objectshdu=1 \ --clumpsfile=K_labeled.fits --clumpshdu=2 i_band.fits @end example @cindex Gaussian @noindent If MakeCatalog is to do processing, an input image should be provided with the recognized extensions as input data, see @ref{Arguments}. The options described in this section are those that are only particular to MakeProfiles. For operations that MakeProfiles shares with other programs (mainly involving input/output or general processing steps), see @ref{Common options}. Also see @ref{Common program behavior} for some general characteristics of all Gnuastro programs including MakeCatalog. MakeCatalog needs 4 (or 5) images as input. These images can be separate extensions in one file (NoiseChisel's default output), or each can have its own file and its own extension. See @ref{NoiseChisel output} for the list. The clump labels image is not mandatory (when no clump catalog is required, for example in aperture photometry). When inspecting the object labels image, MakeProfiles will look for a @code{WCLUMPS} (short for with-clumps) header keyword. If that keyword is present and has a value of @code{yes}, @code{1}, or @code{y} (case insensitive) then a clump image must also be provided and a clump catalog will be made. When @code{WCLUMPS} isn't present or has any other value, only an object catalog will be created and all clump related options/columns will be ignored. @cindex Photometry, aperture @cindex Aperture photometry For example, if you only need an object catalog from NoiseChisel's output, you can use Gnuastro's Fits program (see @ref{Fits}) to modify or remove the @code{WCLUMPS} keyword in the objects HDU, then run MakeCatalog on it. Another example can be aperture photometry: let's assume you have made your labeled image (defining the apertures) with MakeProfiles. Clumps are not defined in this context, so besides the input and labeled image, you only need NoiseChisel's Sky and Sky standard deviation images (run NoiseChisel with the @option{--onlydetection} option). Since MakeProfile's output doesn't contain the @code{WCLUMPS} keyword, you just have to specify your labeled image with the @option{--objectsfile} option and also set its HDU. Note that labeled images have to be an integer type. Therefore, if you are using MakeProfiles to define the apertures/labels, you can use its @option{--type=int32} for example, see @ref{Input output options} and @ref{Numeric data types}. When a clump catalog is also desired, two catalogs will be made: one for the objects (suffixed with @file{_o.txt} or @file{_o.fits}) and another for the clumps (suffixed with @file{_c.txt} or @file{_c.fits}). Therefore if any value is given to the @option{--output} option, MakeCatalogs will replace these two suffixes with any existing suffix in the given value. If no output value is given, MakeCatalog will use the input name, see @ref{Automatic output}. The format of the output table is specified with the @option{--tableformat} option, see @ref{Input output options}. When MakeCatalog is run on multiple threads, the clumps catalog rows will not be sorted by object since each object is processed independently by one thread and threaded applications are asynchronous. The clumps in each object will be sorted based on their labels, but you will find lower-index objects come after higher-index ones (especially if they have more clumps and thus take more time). If the order is very important for you, you can run the following command to sort the rows by object ID (and clump ID with each object): @example $ awk '!/^#/' out_c.txt | sort -g -k1,1 -k2,2 @end example @menu * MakeCatalog input files:: Specifying the different input files. * MakeCatalog general settings:: Options for general column settings. * Upper-limit magnitude settings:: Necessary to define upper-limit magnitudes. * MakeCatalog output columns:: How to specify the columns in the output. @end menu @node MakeCatalog input files, MakeCatalog general settings, Invoking astmkcatalog, Invoking astmkcatalog @subsubsection MakeCatalog input files MakeCatalog needs multiple images as input: a values image, one (or two) labeled images and Sky and Sky standard deviation images. The options described in this section allow you to identify them. If you use the default output of NoiseChisel (see @ref{NoiseChisel output}) you don't have to worry about any of these options and just give NoiseChisel's output file to MakeCatalog as described in @ref{Invoking astmkcatalog}. @table @option @item -O STR @itemx --objectsfile=STR The file name of the object labels image, if the image is in another extension of the input file, calling this option is not mandatory, just specify the extension/HDU with the @option{--objectshdu} option. @item --objectshdu=STR The HDU/extension of the object labels image. Only pixels with values above zero will be considered. The objects label image has to be an integer data type (see @ref{Numeric data types}) and only pixels with a value larger than zero will be used. If this extension contains the @code{WCLUMPS} keyword with a value of @code{yes}, @code{1}, or @code{y} (not case sensitive), then MakeCatalog will also build a clumps catalog, see @ref{Invoking astmkcatalog}. @item -C STR @itemx --clumpsfile=STR Similar to @option{--objlabs} but for the labels of the clumps. This is only necessary if the image containing clump labels is not in the input file and the objects image has a @code{WCLUMPS} keyword, see @option{--objectshdu}. @item --clumpshdu=STR The HDU/extension of the object labels image. Only pixels with values above zero will be considered. The objects label image has to be an integer data type (see @ref{Numeric data types}) and only pixels with a value larger than zero will be used. @item -s STR @itemx --skyfile=STR File name of an image keeping the Sky value for each pixel. @item --skyhdu=STR The HDU of the Sky value image. @item -t STR @itemx --stdfile=STR File name of image keeping the Sky value standard deviation for each pixel. @item --stdhdu=STR The HDU of the Sky value standard deviation image. @end table @node MakeCatalog general settings, Upper-limit magnitude settings, MakeCatalog input files, Invoking astmkcatalog @subsubsection MakeCatalog general settings Some of the columns require particular settings (for example the zero point magnitude for measuring magnitudes), the options in this section can be used for such configurations. @table @option @item -z FLT @itemx --zeropoint=FLT The zero point magnitude for the input image, see @ref{Flux Brightness and magnitude}. @item -E @itemx --skysubtracted If the image has already been sky subtracted by another program, then you need to notify MakeCatalog through this option. Note that this is only relevant when the Signal to noise ratio is to be calculated. @item -T FLT @itemx --threshold=FLT For all the columns, only consider pixels that are above a given relative threshold. Symbolizing the value of this option as @mymath{T}, the Sky for a pixel at @mymath{(i,j)} with @mymath{\mu_{ij}} and its Standard deviation with @mymath{\sigma_{ij}}, that pixel will only be used if its value (@mymath{B_{ij}}) satisfies this condition: @mymath{B_{ij}>\mu_{ij}+{T}\sigma_{ij}}. The only calculations that will not be affected are is the average river values (@option{--riverave}), since they are used as a reference. A commented row will be added in the header of the output catalog that will print the given value, since this is a very important issue, it starts with @command{**IMPORTANT**}. NoiseChisel will detect very diffuse signal which is useful in most cases where the aggregate properties of the detections are desired, since there is signal there (with the desired certainty). However, in some cases, only the properties of the peaks of the objects/clumps are desired, for example in attempting to separate stars from galaxies, the peaks are the major target and the diffuse regions only act to complicate the separation. With this option, MakeCatalog will simply ignore any pixel below the relative threshold. @cindex NaN This option is not mandatory, so if it isn't given (after reading the command-line and all configuration files, see @ref{Configuration files}), MakeCatalog will still operate. However, if it has a value in any lower-level configuration file and you want to ignore that value for this particular run or in a higher-level configuration file, then set it to NaN, for example @option{--threshold=nan}. Gnuastro uses the C library's @code{strtod} function to read floats, which is not case-sensitive in reading NaN values. But to be consistent, it is good practice to only use @option{nan}. @item --nsigmag=FLT The median standard deviation (from the standard deviation image) will be multiplied by the value to this option and its magnitude will be reported in the comments of the output catalog. This value is a per-pixel value, not per object/clump and is not found over an area or aperture, like the common @mymath{5\sigma} values that are commonly reported as a measure of depth or the upper-limit measurements (see @ref{Quantifying measurement limits}). @end table @node Upper-limit magnitude settings, MakeCatalog output columns, MakeCatalog general settings, Invoking astmkcatalog @subsubsection Upper-limit magnitude settings The upper limit magnitude was discussed in @ref{Quantifying measurement limits}. Unlike other measured values/columns in MakeCatalog, the upper limit magnitude needs several defined parameters which are discussed here. All the upper limit magnitude specific options start with @option{up} for upper-limit, except for @option{--envseed} that is also present in other programs and is general for any job requiring random number generation (see @ref{Generating random numbers}). @cindex Reproducibility One very important consideration in Gnuastro is reproducibility. Therefore, the values to all of these parameters along with others (like the random number generator type and seed) are also reported in the comments of the final catalog when the upper limit magnitude column is desired. The random seed that is used to define the random positionings for each object or clump is unique and set based on the given seed, the total number of objects and clumps and also the labels of the clumps and objects. So with identical inputs, an identical upper-limit magnitude will be found. But even if the ordering of the object/clump labels differs (and the seed is the same) the result will not be the same. MakeCatalog will randomly place the object/clump footprint over the image and when the footprint doesn't fall on any object or masked region (see @option{--upmaskfile}) it will be used until the desired number (@option{--upnum}) of samples are found to estimate the distribution's standard deviation (see @ref{Quantifying measurement limits}). Otherwise it will be ignored and another random position will be generated. But when the profile is very large or the image is significantly covered by detections, it might not be possible to find the desired number of samplings. MakeProfiles will continue searching until 50 times the value given to @option{--upnum}. If @option{--upnum} good samples cannot be found until this limit, it will set the upper-limit magnitude for that object to NaN (blank). MakeCatalog will also print a warning if the range of positions available for the labeled region is smaller than double the size of the region. In such cases, the limited range of random positions can artificially decrease the standard deviation of the final distribution. @table @option @item --upmaskfile=STR File name of mask image to use for upper-limit calculation. In some cases (especially when doing matched photometry), the object labels specified in the main input and mask image might not be adequate. In other words they do not necessarily have to cover @emph{all} detected objects: the user might have selected only a few of the objects in their labeled image. This option can be used to ignore regions in the image in these situations when estimating the upper-limit magnitude. All the non-zero pixels of the image specified by this option (in the @option{--upmaskhdu} extension) will be ignored in the upper-limit magnitude measurements. For example, when you are using labels from another image, you can give NoiseChisel's objects image output for this image as the value to this option. In this way, you can be sure that regions with data do not harm your distribution. See @ref{Quantifying measurement limits} for more on the upper limit magnitude. @item --upmaskhdu=STR The extension in the file specified by @option{--upmask}. @item --upnum=INT The number of random samples to take for all the objects. A larger value to this option will give a more accurate result (asymptotically), but it will also slow down the process. When a randomly positioned sample overlaps with a detected/masked pixel it is not counted and another random position is found until the object completely lies over an undetected region. So you can be sure that for each object, this many samples over undetected objects are made. See the upper limit magnitude discussion in @ref{Quantifying measurement limits} for more. @item --uprange=INT,INT The range/width of the region (in pixels) to do random sampling along each dimension of the input image around each object's position. This is not a mandatory option and if not given (or given a value of zero in a dimension), the full possible range of the dataset along that dimension will be used. This is useful when the noise properties of the dataset vary gradually. In such cases, using the full range of the input dataset is going to bias the result. However, note that decreasing the the range of available positions too much will also artificially decrease the standard deviation of the final distribution (and thus bias the upper-limit measurement). @item --envseed Read the random number generator type and seed value from the environment (see @ref{Generating random numbers}). Random numbers are used in calculating the random positions of different samples of each object. @item --upsigmaclip=FLT,FLT The raw distribution of random values will not be used to find the upper-limit magnitude, it will first be @mymath{\sigma}-clipped (see @ref{Sigma clipping}) to avoid outliers in the distribution (mainly the faint undetected wings of bright/large objects in the image). This option takes two values: the first is the multiple of @mymath{\sigma}, and the second is the termination criteria. If the latter is larger than 1, it is read as an integer number and will be the number of times to clip. If it is smaller than 1, it is interpretted as the tolerance level to stop clipping. See @ref{Sigma clipping} for a complete explanation. @item --upnsigma=FLT The multiple of the final (@mymath{\sigma}-clipped) standard deviation (or @mymath{\sigma}) used to measure the upper-limit brightness or magnitude. @end table @node MakeCatalog output columns, , Upper-limit magnitude settings, Invoking astmkcatalog @subsubsection MakeCatalog output columns The final group of options particular to MakeCatalog are those that specify which columns should be written into the final output table. For each column there is an option, if it has been called on the command line or in any of the configuration files, it will included as a column in the output catalog in the same order (see @ref{Configuration file precedence}). Some of the columns apply to both objects and clumps and some are particular to only one of them. The latter cases are explicitly marked with [Objects] or [Clumps] to specify the catalog they will be placed in. @table @option @item --i @itemx --ids This is a unique option which can add multiple columns to the final catalog(s). Calling this option will put the object IDs (@option{--objid}) in the objects catalog and host-object-ID (@option{--hostobjid}) and ID-in-host-object (@option{--idinhostobj}) into the clumps catalog. Hence if only object catalogs are required, it has the same effect as @option{--objid}. @item --objid [Objects] ID of this object. @item -j @itemx --hostobjid [Clumps] The ID of the object which hosts this clump. @item --idinhostobj [Clumps] The ID of this clump in its host object. @item -C @itemx --numclumps [Objects] The number of clumps in this object. @item -a @itemx --area The raw area (number of pixels) in any clump or object independent of what pixel it lies over (if it is NaN/blank or unused for example). @item --clumpsarea [Objects] The total area of all the clumps in this object. @item --weightarea The area (number of pixels) used in the flux weighted position calculations. @item -x @itemx --x The flux weighted center of all objects and clumps along the first FITS axis (horizontal when viewed in SAO ds9), see @mymath{\overline{x}} in @ref{Measuring elliptical parameters}. The weight has to have a positive value (pixel value larger than the Sky value) to be meaningful! Specially when doing matched photometry, this might not happen: no pixel value might be above the Sky value. For such detections, the geometric center will be reported in this column (see @option{--geox}). You can use @option{--weightarea} to see which was used. @item -y @itemx --y The flux weighted center of all objects and clumps along the second FITS axis (vertical when viewed in SAO ds9). See @option{--x}. @item --geox The geometric center of all objects and clumps along the first FITS axis axis. The geometric center is the average pixel positions irrespective of their pixel values. @item --geoy The geometric center of all objects and clumps along the second FITS axis axis, see @option{--geox}. @item --clumpsx [Objects] The flux weighted center of all the clumps in this object along the first FITS axis. See @option{--x}. @item --clumpsy [Objects] The flux weighted center of all the clumps in this object along the second FITS axis. See @option{--x}. @item --clumpsgeox [Objects] The geometric center of all the clumps in this object along the first FITS axis. See @option{--geox}. @item --clumpsgeoy [Objects] The geometric center of all the clumps in this object along the second FITS axis. See @option{--geox}. @item -r @itemx --ra Flux weighted right ascension of all objects or clumps, see @option{--x}. This is just an alias for one of the lower-level @option{--w1} or @option{--w2} options. Using the FITS WCS keywords (@code{CTYPE}), MakeCatalog will determine which axis corresponds to the right ascension. If no @code{CTYPE} keywords start with @code{RA}, an error will be printed when requesting this column and MakeCatalog will abort. @item -d @itemx --dec Flux weighted declination of all objects or clumps, see @option{--x}. This is just an alias for one of the lower-level @option{--w1} or @option{--w2} options. Using the FITS WCS keywords (@code{CTYPE}), MakeCatalog will determine which axis corresponds to the declination. If no @code{CTYPE} keywords start with @code{DEC}, an error will be printed when requesting this column and MakeCatalog will abort. @item --w1 Flux weighted first WCS axis of all objects or clumps, see @option{--x}. The first WCS axis is commonly used as right ascension in images. @item --w2 Flux weighted second WCS axis of all objects or clumps, see @option{--x}. The second WCS axis is commonly used as declination in images. @item --geow1 Geometric center in first WCS axis of all objects or clumps, see @option{--geox}. The first WCS axis is commonly used as right ascension in images. @item --geow2 Geometric center in second WCS axis of all objects or clumps, see @option{--geox}. The second WCS axis is commonly used as declination in images. @item --clumpsw1 [Objects] Flux weighted center in first WCS axis of all clumps in this object, see @option{--x}. The first WCS axis is commonly used as right ascension in images. @item --clumpsw2 [Objects] Flux weighted declination of all clumps in this object, see @option{--x}. The second WCS axis is commonly used as declination in images. @item --clumpsgeow1 [Objects] Geometric center right ascension of all clumps in this object, see @option{--geox}. The first WCS axis is commonly used as right ascension in images. @item --clumpsgeow2 [Objects] Geometric center declination of all clumps in this object, see @option{--geox}. The second WCS axis is commonly used as declination in images. @item -b @itemx --brightness The brightness (sum of all pixel values), see @ref{Flux Brightness and magnitude}. For clumps, the ambient brightness (flux of river pixels around the clump multiplied by the area of the clump) is removed, see @option{--riverflux}. So the sum of clump brightnesses in the clump catalog will be smaller than the total clump brightness in the @option{--clumpbrightness} column of the objects catalog. If no usable pixels (blank or below the threshold) are present over the clump or object, the stored value will be NaN (note that zero is meaningful). @item --clumpbrightness [Objects] The total brightness of the clumps within an object. This is simply the sum of the pixels associated with clumps in the object. If no usable pixels (blank or below the threshold) are present over the clump or object, the stored value will be NaN, because zero (note that zero is meaningful). @item --noriverbrightness [Clumps] The Sky (not river) subtracted clump brightness. By definition, for the clumps, the average brightness of the rivers surrounding it are subtracted from it for a first order accounting for contamination by neighbors. In cases where you will be calculating the flux brightness difference later (one example below) the contamination will be (mostly) removed at that stage, which is why this column was added. One example might be this: you want to know the change in the clump flux as a function of threshold (see @option{--threshold}). So you will make two catalogs (each having this column but with different thresholds) and then subtract the lower threshold catalog (higher brightness) from the higher threshold catalog (lower brightness). The effect is most visible when the rivers have a high average signal-to-noise ratio. The removed contribution from the pixels below the threshold will be less than the river pixels. Therefore the river-subtracted brightness (@option{--brightness}) for the thresholded catalog for such clumps will be larger than the brightness with no threshold! If no usable pixels (blank or below the possibly given threshold) are present over the clump or object, the stored value will be NaN (note that zero is meaningful). @item -m @itemx --magnitude The magnitude of clumps or objects, see @option{--brightness}. @item -e @itemx --magnitudeerr The magnitude error of clumps or objects. The magnitude error is calculated from the signal-to-noise ratio (see @option{--sn} and @ref{Quantifying measurement limits}). Note that until now this error assumes un-correlated pixel values and also does not include the error in estimating the aperture (or error in generating the labeled image). For now these factors have to be found by other means. @url{https://savannah.gnu.org/task/index.php?14124, Task 14124} has been defined for work on adding these sources of error too. @item --clumpsmagnitude [Objects] The magnitude of all clumps in this object, see @option{--clumpbrightness}. @item --upperlimit The upper limit value (in units of the input image) for this object or clump. See @ref{Quantifying measurement limits} and @ref{Upper-limit magnitude settings} for a complete explanation. This is very important for the fainter and smaller objects in the image where the measured magnitudes are not reliable. @item --upperlimitmag The upper limit magnitude for this object or clump. See @ref{Quantifying measurement limits} and @ref{Upper-limit magnitude settings} for a complete explanation. This is very important for the fainter and smaller objects in the image where the measured magnitudes are not reliable. @item --riverave [Clumps] The average brightness of the river pixels around this clump. River pixels were defined in Akhlaghi and Ichikawa 2015. In short they are the pixels immediately outside of the clumps. This value is used internally to find the brightness (or magnitude) and signal to noise ratio of the clumps. It can generally also be used as a scale to gauge the base (ambient) flux surrounding the clump. In case there was no river pixels, then this column will have the value of the Sky under the clump. So note that this value is @emph{not} sky subtracted. @item --rivernum [Clumps] The number of river pixels around this clump, see @option{--riverflux}. @item -n @itemx --sn The Signal to noise ratio (S/N) of all clumps or objects. See Akhlaghi and Ichikawa (2015) for the exact equations used. @item --sky The sky flux (per pixel) value under this object or clump. This is actually the mean value of all the pixels in the sky image that lie on the same position as the object or clump. @item --std The sky value standard deviation (per pixel) for this clump or object. Like @option{--sky}, this is the average of the values in the input sky standard deviation image pixels that lie over this object. @item -A @itemx --semimajor The pixel-value weighted semi-major axis of the profile (assuming it is an ellipse) in units of pixels. See @ref{Measuring elliptical parameters}. @item -B @itemx --semiminor The pixel-value weighted semi-minor axis of the profile (assuming it is an ellipse) in units of pixels. See @ref{Measuring elliptical parameters}. @item -p @itemx --positionangle The pixel-value weighted angle of the semi-major axis with the first FITS axis in degrees. See @ref{Measuring elliptical parameters}. @item --geosemimajor The geometric (ignoring pixel values) semi-major axis of the profile, assuming it is an ellipse. @item --geosemiminor The geometric (ignoring pixel values) semi-minor axis of the profile, assuming it is an ellipse. @item --geopositionangle The geometric (ignoring pixel values) angle of the semi-major axis with the first FITS axis in degrees. @end table @node Match, , MakeCatalog, Data analysis @section Match Data can come come from different telescopes, filters, software and even different configurations for a single software. As a result, one of the primary things to do after generating catalogs from each of these sources (for example with @ref{MakeCatalog}), is to find which sources in one catalog correspond to which in the other(s). In other words, to `match' the two catalogs with each other. Gnuastro's Match program is in charge of such operations. The nearest objects in the two catalogs, within the given aperture, will be found and given as output. The aperture can be a circle or an ellipse with any orientation. @menu * Invoking astmatch:: Inputs, outputs and options of Match @end menu @node Invoking astmatch, , Match, Match @subsection Invoking Match When given two catalogs, Match finds the rows that are nearest to each other within an input aperture. The executable name is @file{astmatch} with the following general template @example $ astmatch [OPTION ...] input-1 input-2 @end example @noindent One line examples: @example ## 1D wavelength match (within 5 angstroms) of the two inputs. ## The wavelengths are in the 5th and 10th columns respectively. $ astmatch --aperture=5e-10 --ccol1=5 --ccol2=10 in1.fits in2.txt ## Match the two catalogs with a circular aperture of width 2. ## (Units same as given positional columns). ## (By default two columns are given for `--ccol1' and `--ccol2', ## The number of values to these determines the dimensions). $ astmatch --aperture=2 input1.txt input2.fits ## Similar to before, but the output is created by merging various ## columns from the two inputs: columns 1, RA, DEC from the first ## input, followed by all columns starting with MAG and the 8th ## column from second input and finally the 10th from first input. $ astmatch --aperture=2 input1.txt input2.fits \ --outcols=a1,aRA,aDEC,b/^MAG/,bBRG,a10 ## Match the two catalogs within an elliptical aperture of 1 and 2 ## arcseconds along RA and Dec respectively. $ astmatch --aperture=1/3600,2/3600 in1.fits in2.txt ## Match the RA and DEC columns of the first input with the RA_D ## and DEC_D columns of the second within a 0.5 arcseconds aperture. $ astmatch --ccol1=RA,DEC --ccol2=RA_D,DEC_D --aperture0.5/3600 \ in1.fits in2.fits @end example Two inputs are necessary for Match to start processing. The inputs can be plain text tables or FITS tables, see @ref{Tables}. Match follows the same basic behavior of all Gnuastro programs as fully described in @ref{Common program behavior}. If the first input is a FITS file, the common @option{--hdu} option (see @ref{Input output options}) should be used to identify the extension. When the second input is FITS, the extension must be specified with @option{--hdu2}. When @option{--quiet} is not called, Match will print the number of matches found in standard output (on the command-line). If no match was found, no output file will be created (table or log file). When matches are found, by default, the output file(s) will be the re-arranged input tables such that the rows match each other: both output tables will have the same number of rows which are matched with each other. If @option{--outcols} is called, the output is a single table with rows chosen from either of the two inputs in any order, see the description of @option{--outcols}. If the @option{--logasoutput} option is called, the output will be a single table with the contents of the log file, see below. If no output file name is given with the @option{--output} option, then automatic output @ref{Automatic output} will be used to determine the output name(s). Depending on @option{--tableformat} (see @ref{Input output options}), the output will then be a (possibly multi-extension) FITS file or (possibly two) plain text file(s). When the output is a FITS file, the default re-arranged inputs will be two extensions of the output FITS file. With @option{--outcols} and @option{--logasoutput}, the FITS output will be a single table (in one extension). When the @option{--log} option is called (see @ref{Operating mode options}), Match will also create a file named @file{astmatch.fits} (or @file{astmatch.txt}, depending on @option{--tableformat}, see @ref{Input output options}) in the directory it is run in. This log table will have three columns. The first and second columns show the matching row/record number (counting from 1) of the first and second input catalogs respectively. The third column is the distance between the two matched positions. The units of the distance are the same as the given coordinates (given the possible ellipticity, see description of @option{--aperture} below). When @option{--logasoutput} is called, no log file (with a fixed name) will be created. In this case, the output file (possibly given by the @option{--output} option) will have the contents of this log file. @table @option @item -H STR @itemx --hdu2=STR The extension/HDU of the second input if it is a FITS file. When it isn't a FITS file, this option's value is ignored. For the first input, the common option @option{--hdu} must be used. @item --outcols=STR Columns from both inputs to write into a single matched table output. The value to @code{--outcols} must be a comma-separated list of strings, for example @option{--outcols=a1,bRA,bDEC}. The first character of each string specifies the input catalog: @option{a} for the first and @option{b} for the second. The rest of the characters of the string will be directly used to identify the proper column(s) in the respective table. See @ref{Selecting table columns} for how columns can be specified in Gnuastro. In this example, the output will have three columns: the first column of the first input and the @option{RA} and @option{DEC} columns of the second input. Another example is given in the one-line examples above. Compared to the default case (where two tables with all their columns) are printed, using this option is much faster: it will only read and re-arrange the necessary columns and it will write a single output table. Combined with regular expressions in large tables, this can be a very powerful and convenient way to retrieve your desired information and do the match at the same time. @item -l @itemx --logasoutput The output file will have the contents of the log file: indexs in the two catalogs that match with each other along with their distance. See description above. When this option is called, a log file called @file{astmatch.txt} will not be created. With this option, the default output behavior (two tables containing the re-arranged inputs) will be @item --notmatched Write the non-matching rows into the outputs, not the matched ones. Note that with this option, the two output tables will not necessarily have the same number of rows. Therefore, this option cannot be called with @option{--outcols}. @option{--outcols} prints mixed columns from both inputs, so they must all have the same number of elements and must correspond to each other. @item -c INT/STR[,INT/STR] @itemx --ccol1=INT/STR[,INT/STR] The coordinate columns of the first input. The number of dimensions for the match is determined by the number of comma-separated values given to this option. The values can be the column number (counting from 1), exact column name or a regular expression. For more, see @ref{Selecting table columns}. See the one-line examples above for some usages of this option. @item -C INT/STR[,INT/STR] @itemx --ccol2=INT/STR[,INT/STR] The coordinate columns of the second input. See the example in @option{--ccol1} for more. @item -a FLT[,FLT[,FLT]] @itemx --aperture=FLT[,FLT[,FLT]] Parameters of the aperture for matching. The values given to this option can be fractions, for example when the position columns are in units of degrees, @option{1/3600} can be used to ask for one arcsecond. The interpretation of the values depends on the requested dimensions (determined from @option{--ccol1} and @code{--ccol2}) and how many values are given to this option. @table @asis @item 1D match The aperture/interval can only take one value: half of the interval around each point (maximum distance from each point). @item 2D match In a 2D match, the aperture can be a circle, an ellipse aligned in the axes or an ellipse with a rotated major axis. To simply the usage, you can determine the shape based on the number of free parameters for each. @table @asis @item 1 number For example @option{--aperture=2}. The aperture will be a circle of the given radius. The value will be in the same units as the columns in @option{--ccol1} and @option{--ccol2}). @item 2 numbers For example @option{--aperture=3,4e-10}. The aperture will be an ellipse (if the two numbers are different) with the respective value along each dimension. The numbers are in units of the first and second axis. In the example above, the semi-axis value along the first axis will be 3 (in units of the first coordinate) and along the second axis will be @mymath{4\times10^{-10}} (in units of the second coordinate). Such values can happen if you are comparing catalogs of a spectra for example. If more than one object exists in the aperture, the nearest will be found along the major axis as described in @ref{Defining an ellipse}. @item 3 numbers For example @option{--aperture=2,0.6,30}. The aperture will be an ellipse (if the second value is not 1). The first number is the semi-major axis, the second is the axis ratio and the third is the position angle (in degrees). If multiple matches are found within the ellipse, the distance (to find the nearest) is calculated along the major axis in the elliptical space, see @ref{Defining an ellipse}. @end table @end table @end table @node Modeling and fittings, High-level calculations, Data analysis, Top @chapter Modeling and fitting @cindex Fitting @cindex Modeling In order to fully understand observations after initial analysis on the image, it is very important to compare them with the existing models to be able to further understand both the models and the data. The tools in this chapter create model galaxies and will provide 2D fittings to be able to understand the detections. @menu * MakeProfiles:: Making mock galaxies and stars. * MakeNoise:: Make (add) noise to an image. @end menu @node MakeProfiles, MakeNoise, Modeling and fittings, Modeling and fittings @section MakeProfiles @cindex Checking detection algorithms @pindex @r{MakeProfiles (}astmkprof@r{)} MakeProfiles will create mock astronomical profiles from a catalog, either individually or together in one output image. In data analysis, making a mock image can act like a calibration tool, through which you can test how successfully your detection technique is able to detect a known set of objects. There are commonly two aspects to detecting: the detection of the fainter parts of bright objects (which in the case of galaxies fade into the noise very slowly) or the complete detection of an over-all faint object. Making mock galaxies is the most accurate (and idealistic) way these two aspects of a detection algorithm can be tested. You also need mock profiles in fitting known functional profiles with observations. MakeProfiles was initially built for extra galactic studies, so currently the only astronomical objects it can produce are stars and galaxies. We welcome the simulation of any other astronomical object. The general outline of the steps that MakeProfiles takes are the following: @enumerate @item Build the full profile out to its truncation radius in a possibly over-sampled array. @item Multiply all the elements by a fixed constant so its total magnitude equals the desired total magnitude. @item If @option{--individual} is called, save the array for each profile to a FITS file. @item If @option{--nomerged} is not called, add the overlapping pixels of all the created profiles to the output image and abort. @end enumerate Using input values, MakeProfiles adds the World Coordinate System (WCS) headers of the FITS standard to all its outputs (except PSF images!). For a simple test on a set of mock galaxies in one image, there is no need for the third step or the WCS information. @cindex Transform image @cindex Lensing simulations @cindex Image transformations However in complicated simulations like weak lensing simulations, where each galaxy undergoes various types of individual transformations based on their position, those transformations can be applied to the different individual images with other programs. After all the transformations are applied, using the WCS information in each individual profile image, they can be merged into one output image for convolution and adding noise. @menu * Modeling basics:: Astronomical modeling basics. * If convolving afterwards:: Considerations for convolving later. * Flux Brightness and magnitude:: About these measures of energy. * Profile magnitude:: Definition of total profile magnitude. * Invoking astmkprof:: Inputs and Options for MakeProfiles. @end menu @node Modeling basics, If convolving afterwards, MakeProfiles, MakeProfiles @subsection Modeling basics In the subsections below, first a review of some very basic information and concepts behind modeling a real astronomical image is given. You can skip this subsection if you are already sufficiently familiar with these concepts. @menu * Defining an ellipse:: An ellipse on a pixelated grid. * PSF:: Radial profiles for the PSF. * Stars:: Making mock star profiles. * Galaxies:: Radial profiles for galaxies. * Sampling from a function:: Sample a function on a pixelated canvas. * Oversampling:: Oversampling the model. @end menu @node Defining an ellipse, PSF, Modeling basics, Modeling basics @subsubsection Defining an ellipse @cindex Ellipse @cindex Axis ratio @cindex Position angle The PSF, see @ref{PSF}, and galaxy radial profiles are generally defined on an ellipse. Therefore, in this section we'll start defining an ellipse on a pixelated 2D surface. Labeling the major axis of an ellipse @mymath{a}, and its minor axis with @mymath{b}, the @emph{axis ratio} is defined as: @mymath{q\equiv b/a}. The major axis of an ellipse can be aligned in any direction, therefore the angle of the major axis with respect to the horizontal axis of the image is defined to be the @emph{position angle} of the ellipse and in this book, we show it with @mymath{\theta}. @cindex Radial profile on ellipse Our aim is to put a radial profile of any functional form @mymath{f(r)} over an ellipse. Hence we need to associate a radius/distance to every point in space. Let's define the radial distance @mymath{r_{el}} as the distance on the major axis to the center of an ellipse which is located at @mymath{i_c} and @mymath{j_c} (in other words @mymath{r_{el}\equiv{a}}). We want to find @mymath{r_{el}} of a point located at @mymath{(i,j)} (in the image coordinate system) from the center of the ellipse with axis ratio @mymath{q} and position angle @mymath{\theta}. First the coordinate system is rotated@footnote{Do not confuse the signs of @mymath{sin} with the rotation matrix defined in @ref{Warping basics}. In that equation, the point is rotated, here the coordinates are rotated and the point is fixed.} by @mymath{\theta} to get the new rotated coordinates of that point @mymath{(i_r,j_r)}: @dispmath{i_r(i,j)=+(i_c-i)\cos\theta+(j_c-j)\sin\theta} @dispmath{j_r(i,j)=-(i_c-i)\sin\theta+(j_c-j)\cos\theta} @cindex Elliptical distance @noindent Recall that an ellipse is defined by @mymath{(i_r/a)^2+(j_r/b)^2=1} and that we defined @mymath{r_{el}\equiv{a}}. Hence, multiplying all elements of the the ellipse definition with @mymath{r_{el}^2} we get the elliptical distance at this point point located: @mymath{r_{el}=\sqrt{i_r^2+(j_r/q)^2}}. To place the radial profiles explained below over an ellipse, @mymath{f(r_{el})} is calculated based on the functional radial profile desired. @cindex Breadth first search @cindex Inside-out construction @cindex Making profiles pixel by pixel @cindex Pixel by pixel making of profiles MakeProfiles builds the profile starting from the nearest element (pixel in an image) in the dataset to the profile center. The profile value is calculated for that central pixel using monte carlo integration, see @ref{Sampling from a function}. The next pixel is the next nearest neighbor to the central pixel as defined by @mymath{r_{el}}. This process goes on until the profile is fully built upto the trunctation radius. This is done fairly efficiently using a breadth first parsing strategy@footnote{@url{http://en.wikipedia.org/wiki/Breadth-first_search}} which is implemented through an ordered linked list. Using this approach, we build the profile by expanding the circumference. Not one more extra pixel has to be checked (the calculation of @mymath{r_{el}} from above is not cheap in CPU terms). Another consequence of this strategy is that extending MakeProfiles to three dimensions becomes very simple: only the neighbors of each pixel have to be changed. Everything else after that (when the pixel index and its radial profile have entered the linked list) is the same, no matter the number of dimensions we are dealing with. @node PSF, Stars, Defining an ellipse, Modeling basics @subsubsection Point Spread Function @cindex PSF @cindex Point source @cindex Diffraction limited @cindex Point Spread Function @cindex Spread of a point source Assume we have a `point' source, or a source that is far smaller than the maximum resolution (a pixel). When we take an image of it, it will `spread' over an area. To quantify that spread, we can define a `function'. This is how the point spread function or the PSF of an image is defined. This `spread' can have various causes, for example in ground based astronomy, due to the atmosphere. In practice we can never surpass the `spread' due to the diffraction of the lens aperture. Various other effects can also be quantified through a PSF. For example, the simple fact that we are sampling in a discrete space, namely the pixels, also produces a very small `spread' in the image. @cindex Blur image @cindex Convolution @cindex Image blurring @cindex PSF image size Convolution is the mathematical process by which we can apply a `spread' to an image, or in other words blur the image, see @ref{Convolution process}. The Brightness of an object should remain unchanged after convolution, see @ref{Flux Brightness and magnitude}. Therefore, it is important that the sum of all the pixels of the PSF be unity. The PSF image also has to have an odd number of pixels on its sides so one pixel can be defined as the center. In MakeProfiles, the PSF can be set by the two methods explained below. @table @asis @item Parametric functions @cindex FWHM @cindex PSF width @cindex Parametric PSFs @cindex Full Width at Half Maximum A known mathematical function is used to make the PSF. In this case, only the parameters to define the functions are necessary and MakeProfiles will make a PSF based on the given parameters for each function. In both cases, the center of the profile has to be exactly in the middle of the central pixel of the PSF (which is automatically done by MakeProfiles). When talking about the PSF, usually, the full width at half maximum or FWHM is used as a scale of the width of the PSF. @table @cite @item Gaussian @cindex Gaussian distribution In the older papers, and to a lesser extent even today, some researchers use the 2D Gaussian function to approximate the PSF of ground based images. In its most general form, a Gaussian function can be written as: @dispmath{f(r)=a \exp \left( -(x-\mu)^2 \over 2\sigma^2 \right)+d} Since the center of the profile is pre-defined, @mymath{\mu} and @mymath{d} are constrained. @mymath{a} can also be found because the function has to be normalized. So the only important parameter for MakeProfiles is the @mymath{\sigma}. In the Gaussian function we have this relation between the FWHM and @mymath{\sigma}: @cindex Gaussian FWHM @dispmath{\rm{FWHM}_g=2\sqrt{2\ln{2}}\sigma \approx 2.35482\sigma} @item Moffat @cindex Moffat function The Gaussian profile is much sharper than the images taken from stars on photographic plates or CCDs. Therefore in 1969, Moffat proposed this functional form for the image of stars: @dispmath{f(r)=a \left[ 1+\left( r\over \alpha \right)^2 \right]^{-\beta}} @cindex Moffat beta Again, @mymath{a} is constrained by the normalization, therefore two parameters define the shape of the Moffat function: @mymath{\alpha} and @mymath{\beta}. The radial parameter is @mymath{\alpha} which is related to the FWHM by @cindex Moffat FWHM @dispmath{\rm{FWHM}_m=2\alpha\sqrt{2^{1/\beta}-1}} @cindex Compare Moffat and Gaussian @cindex PSF, Moffat compared Gaussian @noindent Comparing with the PSF predicted from atmospheric turbulence theory with a Moffat function, Trujillo et al.@footnote{Trujillo, I., J. A. L. Aguerri, J. Cepa, and C. M. Gutierrez (2001). ``The effects of seeing on S@'ersic profiles - II. The Moffat PSF''. In: MNRAS 328, pp. 977---985.} claim that @mymath{\beta} should be 4.765. They also show how the Moffat PSF contains the Gaussian PSF as a limiting case when @mymath{\beta\to\infty}. @end table @item An input FITS image An input image file can also be specified to be used as a PSF. If the sum of its pixels are not equal to 1, the pixels will be multiplied by a fraction so the sum does become 1. @end table While the Gaussian is only dependent on the FWHM, the Moffat function is also dependent on @mymath{\beta}. Comparing these two functions with a fixed FWHM gives the following results: @itemize @item Within the FWHM, the functions don't have significant differences. @item For a fixed FWHM, as @mymath{\beta} increases, the Moffat function becomes sharper. @item The Gaussian function is much sharper than the Moffat functions, even when @mymath{\beta} is large. @end itemize @node Stars, Galaxies, PSF, Modeling basics @subsubsection Stars @cindex Modeling stars @cindex Stars, modeling In MakeProfiles, stars are generally considered to be a point source. This is usually the case for extra galactic studies, were nearby stars are also in the field. Since a star is only a point source, we assume that it only fills one pixel prior to convolution. In fact, exactly for this reason, in astronomical images the light profiles of stars are one of the best methods to understand the shape of the PSF and a very large fraction of scientific research is preformed by assuming the shapes of stars to be the PSF of the image. @node Galaxies, Sampling from a function, Stars, Modeling basics @subsubsection Galaxies @cindex Galaxy profiles @cindex S@'ersic profile @cindex Profiles, galaxies @cindex Generalized de Vaucouleur profile Today, most practitioners agree that the flux of galaxies can be modeled with one or a few generalized de Vaucouleur's (or S@'ersic) profiles. @dispmath{I(r) = I_e \exp \left ( -b_n \left[ \left( r \over r_e \right)^{1/n} -1 \right] \right )} @cindex Brightness @cindex S@'ersic, J. L. @cindex S@'ersic index @cindex Effective radius @cindex Radius, effective @cindex de Vaucouleur profile @cindex G@'erard de Vaucouleurs G@'erard de Vaucouleurs (1918-1995) was first to show in 1948 that this function best fits the galaxy light profiles, with the only difference that he held @mymath{n} fixed to a value of 4. 20 years later in 1968, J. L. S@'ersic showed that @mymath{n} can have a variety of values and does not necessarily need to be 4. This profile depends on the effective radius (@mymath{r_e}) which is defined as the radius which contains half of the profile brightness (see @ref{Profile magnitude}). @mymath{I_e} is the flux at the effective radius. The S@'ersic index @mymath{n} is used to define the concentration of the profile within @mymath{r_e} and @mymath{b_n} is a constant dependent on @mymath{n}. MacArthur et al.@footnote{MacArthur, L. A., S. Courteau, and J. A. Holtzman (2003). ``Structure of Disk-dominated Galaxies. I. Bulge/Disk Parameters, Simulations, and Secular Evolution''. In: ApJ 582, pp. 689---722.} show that for @mymath{n>0.35}, @mymath{b_n} can be accurately approximated using this equation: @dispmath{b_n=2n - {1\over 3} + {4\over 405n} + {46\over 25515n^2} + {131\over 1148175n^3}-{2194697\over 30690717750n^4}} @node Sampling from a function, Oversampling, Galaxies, Modeling basics @subsubsection Sampling from a function @cindex Sampling A pixel is the ultimate level of accuracy to gather data, we can't get any more accurate in one image, this is known as sampling in signal processing. However, the mathematical profiles which describe our models have infinite accuracy. Over a large fraction of the area of astrophysically interesting profiles (for example galaxies or PSFs), the variation of the profile over the area of one pixel is not too significant. In such cases, the elliptical radius (@mymath{r_{el}} of the center of the pixel can be assigned as the final value of the pixel, see @ref{Defining an ellipse}). @cindex Integration over pixel @cindex Gradient over pixel area @cindex Function gradient over pixel area As you approach their center, some galaxies become very sharp (their value significantly changes over one pixel's area). This sharpness increases with smaller effective radius and larger S@'ersic values. Thus rendering the central value extremely inaccurate. The first method that comes to mind for solving this problem is integration. The functional form of the profile can be integrated over the pixel area in a 2D integration process. However, unfortunately numerical integration techniques also have their limitations and when such sharp profiles are needed they can become extremely inaccurate. @cindex Monte carlo integration The most accurate method of sampling a continuous profile on a discrete space is by choosing a large number of random points within the boundaries of the pixel and taking their average value (or Monte Carlo integration). This is also, generally speaking, what happens in practice with the photons on the pixel. The number of random points can be set with @option{--numrandom}. Unfortunately, repeating this Monte Carlo process would be extremely time and CPU consuming if it is to be applied to every pixel. In order to not loose too much accuracy, in MakeProfiles, the profile is built using both methods explained below. The building of the profile begins from its central pixel and continues (radially) outwards. Monte Carlo integration is first applied (which yields @mymath{F_r}), then the central pixel value (@mymath{F_c}) is calculated on the same pixel. If the fractional difference (@mymath{|F_r-F_c|/F_r}) is lower than a given tolerance level (specified with @option{--tolerance}) MakeProfiles will stop using Monte Carlo integration and only use the central pixel value. @cindex Inside-out construction The ordering of the pixels in this inside-out construction is based on @mymath{r=\sqrt{(i_c-i)^2+(j_c-j)^2}}, not @mymath{r_{el}}, see @ref{Defining an ellipse}. When the axis ratios are large (near one) this is fine. But when they are small and the object is highly elliptical, it might seem more reasonable to follow @mymath{r_{el}} not @mymath{r}. The problem is that the gradient is stronger in pixels with smaller @mymath{r} (and larger @mymath{r_{el}}) than those with smaller @mymath{r_{el}}. In other words, the gradient is strongest along the minor axis. So if the next pixel is chosen based on @mymath{r_{el}}, the tolerance level will be reached sooner and lots of pixels with large fractional differences will be missed. Monte Carlo integration uses a random number of points. Thus, every time you run it, by default, you will get a different distribution of points to sample within the pixel. In the case of large profiles, this will result in a slight difference of the pixels which use Monte Carlo integration each time MakeProfiles is run. To have a deterministic result, you have to fix the random number generator properties which is used to build the random distribution. This can be done by setting the @code{GSL_RNG_TYPE} and @code{GSL_RNG_SEED} environment variables and calling MakeProfiles with the @option{--envseed} option. To learn more about the process of generating random numbers, see @ref{Generating random numbers}. The seed values are fixed for every profile: with @option{--envseed}, all the profiles have the same seed and without it, each will get a different seed using the system clock (which is accurate to within one microsecond). The same seed will be used to generate a random number for all the sub-pixel positions of all the profiles. So in the former, the sub-pixel points checked for all the pixels undergoing Monte carlo integration in all profiles will be identical. In other words, the sub-pixel points in the first (closest to the center) pixel of all the profiles will be identical with each other. All the second pixels studied for all the profiles will also receive an identical (different from the first pixel) set of sub-pixel points and so on. As long as the number of random points used is large enough or the profiles are not identical, this should not cause any systematic bias. @node Oversampling, , Sampling from a function, Modeling basics @subsubsection Oversampling @cindex Oversampling The steps explained in @ref{Sampling from a function} do give an accurate representation of a profile prior to convolution. However, in an actual observation, the image is first convolved with or blurred by the atmospheric and instrument PSF in a continuous space and then it is sampled on the discrete pixels of the camera. @cindex PSF over-sample In order to more accurately simulate this process, the un-convolved image and the PSF are created on a finer pixel grid. In other words, the output image is a certain odd-integer multiple of the desired size, we can call this `oversampling'. The user can specify this multiple as a command-line option. The reason this has to be an odd number is that the PSF has to be centered on the center of its image. An image with an even number of pixels on each side does not have a central pixel. The image can then be convolved with the PSF (which should also be oversampled on the same scale). Finally, image can be sub-sampled to get to the initial desired pixel size of the output image. After this, mock noise can be added as explained in the next section. This is because unlike the PSF, the noise occurs in each output pixel, not on a continuous space like all the prior steps. @node If convolving afterwards, Flux Brightness and magnitude, Modeling basics, MakeProfiles @subsection If convolving afterwards In case you want to convolve the image later with a given point spread function, make sure to use a larger image size. After convolution, the profiles become larger and a profile that is normally completely outside of the image might fall within it. On one axis, if you want your final (convolved) image to be @mymath{m} pixels and your PSF is @mymath{2n+1} pixels wide, then when calling MakeProfiles, set the axis size to @mymath{m+2n}, not @mymath{m}. You also have to shift all the pixel positions of the profile centers on the that axis by @mymath{n} pixels to the positive. After convolution, you can crop the outer @mymath{n} pixels with the section crop box specification of Crop: @option{--section=n:*-n,n:*-n} assuming your PSF is a square, see @ref{Crop section syntax}. This will also remove all discrete Fourier transform artifacts (blurred sides) from the final image. To facilitate this shift, MakeProfiles has the options @option{--xshift}, @option{--yshift} and @option{--prepforconv}, see @ref{Invoking astmkprof}. @node Flux Brightness and magnitude, Profile magnitude, If convolving afterwards, MakeProfiles @subsection Flux Brightness and magnitude @cindex ADU @cindex Gain @cindex Counts Astronomical data pixels are usually in units of counts@footnote{Counts are also known as analog to digital units (ADU).} or electrons or either one divided by seconds. To convert from the counts to electrons, you will need to know the instrument gain. In any case, they can be directly converted to energy or energy/time using the basic hardware (telescope, camera and filter) information. We will continue the discussion assuming the pixels are in units of energy/time. @cindex Flux @cindex Luminosity @cindex Brightness The @emph{brightness} of an object is defined as its total detected energy per time. This is simply the sum of the pixels that are associated with that detection by our detection tool for example @ref{NoiseChisel}@footnote{If further processing is done, for example the Kron or Petrosian radii are calculated, then the detected area is not sufficient and the total area that was within the respective radius must be used.}. The @emph{flux} of an object is in units of energy/time/area and for a detected object, it is defined as its brightness divided by the area used to collect the light from the source or the telescope aperture (for example in @mymath{cm^2})@footnote{For a full object that spans over several pixels, the telescope area should be used to find the flux. However, sometimes, only the brightness per pixel is desired. In such cases this book also @emph{loosely} uses the term flux. This is only approximately accurate however, since while all the pixels have a fixed area, the pixel size can vary with camera on the telescope.}. Knowing the flux (@mymath{f}) and distance to the object (@mymath{r}), we can calculate its @emph{luminosity}: @mymath{L=4{\pi}r^2f}. Therefore, flux and luminosity are intrinsic properties of the object, while brightness depends on our detecting tools (hardware and software). Here we will not be discussing luminosity, but brightness. However, since luminosity is the astrophysically interesting quantity, we also defined it here to avoid possible confusion between these two terms because they both have the same units. @cindex Magnitude zero-point @cindex Magnitudes from flux @cindex Flux to magnitude conversion @cindex Astronomical Magnitude system Images of astronomical objects span over a very large range of brightness. With the Sun (as the brightest object) being roughly @mymath{2.5^{60}=10^{24}} times brighter than the faintest galaxies we can currently detect. Therefore discussing brightness will be very hard, and astronomers have chosen to use a logarithmic scale to talk about the brightness of astronomical objects. But the logarithm can only be usable with a unit-less and always positive value. Fortunately brightness is always positive and to remove the units we divide the brightness of the object (@mymath{B}) by a reference brightness (@mymath{B_r}). We then define the resulting logarithmic scale as @mymath{magnitude} through the following relation@footnote{The @mymath{-2.5} factor in the definition of magnitudes is a legacy of the our ancient colleagues and in particular Hipparchus of Nicaea (190-120 BC).} @dispmath{m-m_r=-2.5\log_{10} \left( B \over B_r \right)} @cindex Zero-point magnitude @noindent @mymath{m} is defined as the magnitude of the object and @mymath{m_r} is the pre-defined magnitude of the reference brightness. One particularly easy condition is when @mymath{B_r=1}. This will allow us to summarize all the hardware specific parameters discussed above into one number as the reference magnitude which is commonly known as the Zero-point@footnote{When @mymath{B=Br=1}, the right side of the magnitude definition will be zero. Hence the name, ``zero-point''.} magnitude. @node Profile magnitude, Invoking astmkprof, Flux Brightness and magnitude, MakeProfiles @subsection Profile magnitude @cindex Brightness @cindex Truncation radius @cindex Sum for total flux To find the profile brightness or its magnitude, (see @ref{Flux Brightness and magnitude}), it is customary to use the 2D integration of the flux to infinity. However, in MakeProfiles we do not follow this idealistic approach and apply a more realistic method to find the total brightness or magnitude: the sum of all the pixels belonging to a profile within its predefined truncation radius. Note that if the truncation radius is not large enough, this can be significantly different from the total integrated light to infinity. @cindex Integration to infinity An integration to infinity is not a realistic condition because no galaxy extends indefinitely (important for high S@'ersic index profiles), pixelation can also cause a significant difference between the actual total pixel sum value of the profile and that of integration to infinity, especially in small and high S@'ersic index profiles. To be safe, you can specify a large enough truncation radius for such compact high S@'ersic index profiles. If oversampling is used then the brightness is calculated using the over-sampled image, see @ref{Oversampling} which is much more accurate. The profile is first built in an array completely bounding it with a normalization constant of unity (see @ref{Galaxies}). Taking @mymath{B} to be the desired brightness and @mymath{S} to be the sum of the pixels in the created profile, every pixel is then multiplied by @mymath{B/S} so the sum is exactly @mymath{B}. If the @option{--individual} option is called, this same array is written to a FITS file. If not, only the overlapping pixels of this array and the output image are kept and added to the output array. @node Invoking astmkprof, , Profile magnitude, MakeProfiles @subsection Invoking MakeProfiles MakeProfiles will make any number of profiles specified in a catalog either individually or in one image. The executable name is @file{astmkprof} with the following general template @example $ astmkprof [OPTION ...] [Catalog] @end example @noindent One line examples: @example ## Make an image with profiles in catalog.txt (with default size): $ astmkprof catalog.txt ## Make the profiles in catalog.txt over image.fits: $ astmkprof --background=image.fits catalog.txt ## Make a Moffat PSF with FWHM 3pix, beta=2.8, truncation=5 $ astmkprof --kernel=moffat,2.8,5 --oversample=1 ## Make profiles in catalog, using RA and Dec in the given column: $ astmkprof --ccol=RA_CENTER --ccol=DEC_CENTER --mode=wcs catalog.txt ## Make a 1500x1500 merged image (oversampled 500x500) image along ## with an individual image for all the profiles in catalog: $ astmkprof --individual --oversample 3 --naxis=500,500 catalog.txt @end example @noindent The parameters of the mock profiles can either be given through a catalog (which stores the parameters of many mock profiles, see @ref{MakeProfiles catalog}), or the @option{--kernel} option (see @ref{MakeProfiles output dataset}). The catalog can be in the FITS ASCII, FITS binary format, or plain text formats (see @ref{Tables}). The columns related to each parameter can be determined both by number, or by match/search criteria using the column names, units, or comments. with the options ending in @option{col}, see below. Without any file given to the @option{--background} option, MakeProfiles will make a zero-valued image and build the profiles on that (its size and main WCS parameters can also be defined through the options described in @ref{MakeProfiles output dataset}). Besides the main/merged image containing all the profiles in the catalog, it is also possible to build individual images for each profile (only enclosing one full profile to its truncation radius) with the @option{--individual} option. If an image is given to the @option{--background} option, the pixels of that image are used as the background value for every pixel. The flux value of each profile pixel will be added to the pixel in that background value. In this case, the values to all options relating to the output size and WCS will be ignored if specified (for example @option{--oversample}, @option{--naxis}, and @option{--prepforconv}) on the command-line or in the configuration files. The sections below discuss the options specific to MakeProfiles based on context: the input catalog settings which can have many rows for different profiles are discussed in @ref{MakeProfiles catalog}, in @ref{MakeProfiles profile settings}, we discuss how you can set general profile settings (that are the same for all the profiles in the catalog). Finally @ref{MakeProfiles output dataset} and @ref{MakeProfiles log file} discuss the outputs of MakeProfiles and how you can configure them. Besides these, MakeProfiles also supports all the common Gnuastro program options that are discussed in @ref{Common options}, so please flip through them is well for a more comfortable usage. Please see @ref{Sufi simulates a detection} for a very complete tutorial explaining how one could use MakeProfiles in conjunction with other Gnuastro's programs to make a complete simulated image of a mock galaxy. @menu * MakeProfiles catalog:: Required catalog properties. * MakeProfiles profile settings:: Configuration parameters for all profiles. * MakeProfiles output dataset:: The canvas/dataset to build profiles over. * MakeProfiles log file:: A description of the optional log file. @end menu @node MakeProfiles catalog, MakeProfiles profile settings, Invoking astmkprof, Invoking astmkprof @subsubsection MakeProfiles catalog The catalog containing information about each profile can be in the FITS ASCII, FITS binary, or plain text formats (see @ref{Tables}). Its columns can be ordered in any desired manner. You can specify which columns belong to which parameters using the set of options discussed below. For example through the @option{--rcol} and @option{--tcol} options, you can specify the column that contains the radial parameter for each profile and its truncation respectively. See @ref{Selecting table columns} for a thorough discussion on the values to these options. The value for the profile center in the catalog (the @option{--ccol} option) can be a floating point number so the profile center can be on any sub-pixel position. Note that pixel positions in the FITS standard start from 1 and an integer is the pixel center. So a 2D image actually starts from the position (0.5, 0.5), which is the bottom-left corner of the first pixel. When a @option{--background} image with WCS information is provided or you specify the WCS parameters with the respective options, you may also use RA and Dec to identify the center of each profile (see the @option{--mode} option below). In MakeProfiles, profile centers do not have to be in (overlap with) the final image. Even if only one pixel of the profile within the truncation radius overlaps with the final image size, the profile is built and included in the final image image. Profiles that are completely out of the image will not be created (unless you explicity ask for it with the @option{--individual} option). You can use the output log file (created with @option{--log} to see which profiles were within the image, see @ref{Common options}. If PSF profiles (Moffat or Gaussian, see @ref{PSF}) are in the catalog and the profiles are to be built in one image (when @option{--individual} is not used), it is assumed they are the PSF(s) you want to convolve your created image with. So by default, they will not be built in the output image but as separate files. The sum of pixels of these separate files will also be set to unity (1) so you are ready to convolve, see @ref{Convolution process}. As a summary, the position and magnitude of PSF profile will be ignored. This behavior can be disabled with the @option{--psfinimg} option. If you want to create all the profiles separately (with @option{--individual}) and you want the sum of the PSF profile pixels to be unity, you have to set their magnitudes in the catalog to the zero-point magnitude and be sure that the central positions of the profiles don't have any fractional part (the PSF center has to be in the center of the pixel). The list of options directly related to the input catalog columns is shown below. @table @option @item --ccol=STR/INT Center coordinate column for each dimension. This option must be called two times to define the center coordinates in an image. For example @option{--ccol=RA} and @option{--ccol=DEC} (along with @option{--mode=wcs}) will inform MakeProfiles to look into the catalog columns named @option{RA} and @option{DEC} for the Right Ascension and Declination of the profile centers. @item --fcol=INT/STR The functional form of the profile with one of the values below depending on the desired profile. The column can contain either the numeric codes (for example `@code{1}') or string characters (for example `@code{sersic}'). The numeric codes are easier to use in scripts which generate catalogs with hundreds or thousands of profiles. The string format can be easier when the catalog is to be written/checked by hand/eye before running MakeProfiles. It is much more readable and provides a level of documentation. All Gnuastro's recognized table formats (see @ref{Recognized table formats}) accept string type columns. To have string columns in a plain text table/catalog, see @ref{Gnuastro text table format}. @itemize @item S@'ersic profile with `@code{sersic}' or `@code{1}'. @item Moffat profile with `@code{moffat}' or `@code{2}'. @item Gaussian profile with `@code{gaussian}' or `@code{3}'. @item Point source with `@code{point}' or `@code{4}'. @item Flat profile with `@code{flat}' or `@code{5}'. @item Circumference profile with `@code{circum}' or `@code{6}'. A fixed value will be used for all pixels between the truncation radius (@mymath{r_t}) and @mymath{r_t-w} (@mymath{w} is the value to the @option{--circumwidth}). @item Radial distance profile with `@code{distance}' or `@code{7}'. At the lowest level, each pixel only has an elliptical radial distance given the profile's shape and orentiation (see @ref{Defining an ellipse}). When this profile is chosen, the pixel's elliptical radial distance from the profile center is written as its value. For this profile, the value in the magnitude column (@option{--mcol}) will be ignored. You can use this for checks or as a first approximation to define your own higher-level radial function. In the latter case, just note that the central values are going to be incorrect (see @ref{Sampling from a function}). @end itemize @item --rcol=STR/INT The radius parameter of the profiles. Effective radius (@mymath{r_e}) if S@'ersic, FWHM if Moffat or Gaussian. @item --ncol=STR/INT The S@'ersic index (@mymath{n}) or Moffat @mymath{\beta}. @item --pcol=STR/INT The position angle (in degrees) of the profiles relative to the first FITS axis (horizontal when viewed in SAO ds9). @item --qcol=STR/INT The axis ratio of the profiles (minor axis divided by the major axis in a 2D ellipse). @item --mcol=STR/INT The total pixelated magnitude of the profile within the truncation radius, see @ref{Profile magnitude}. @item --tcol=STR/INT The truncation radius of this profile. By default it is in units of the radial parameter of the profile (the value in the @option{--rcol} of the catalog). If @option{--tunitinp} is given, this value is interpreted in units of pixels (prior to oversampling) irrespective of the profile. @end table @node MakeProfiles profile settings, MakeProfiles output dataset, MakeProfiles catalog, Invoking astmkprof @subsubsection MakeProfiles profile settings The profile parameters that differ between each created profile are specified through the columns in the input catalog and described in @ref{MakeProfiles catalog}. Besides those there are general settings for some profiles that don't differ between one profile and another, they are a property of the general process. For example how many random points to use in the monte-carlo integration, this value is fixed for all the profiles. The options described in this section are for configuring such properties. @table @option @item --mode=STR Interpret the center position columns (@option{--ccol} in @ref{MakeProfiles catalog}) in image or WCS coordinates. This option thus accepts only two values: @option{img} and @option{wcs}. It is mandatory when a catalog is being used as input. @item -r @itemx --numrandom The number of random points used in the central regions of the profile, see @ref{Sampling from a function}. @item -e @itemx --envseed Use the value to the @code{GSL_RNG_SEED} environment variable to generate the random Monte Carlo sampling distribution, see @ref{Sampling from a function} and @ref{Generating random numbers}. @item -t FLT @itemx --tolerance=FLT The tolerance to switch from Monte Carlo integration to the central pixel value, see @ref{Sampling from a function}. @item -p @itemx --tunitinp The truncation column of the catalog is in units of pixels. By default, the truncation column is considered to be in units of the radial parameters of the profile (@option{--rcol}). Read it as `t-unit-in-p' for `truncation unit in pixels'. @item -f @itemx --mforflatpix When making fixed value profiles (flat and circumference, see `@option{--fcol}'), don't use the value in the column specified by `@option{--mcol}' as the magnitude. Instead use it as the exact value that all the pixels of these profiles should have. This option is irrelevant for other types of profiles. This option is very useful for creating masks, or labeled regions in an image. Any integer, or floating point value can used in this column with this option, including @code{NaN} (or `@code{nan}', or `@code{NAN}', case is irrelevant), and infinities (@code{inf}, @code{-inf}, or @code{+inf}). For example, with this option if you set the value in the magnitude column (@option{--mcol}) to @code{NaN}, you can create an elliptical or circular mask over an image (which can be given as the argument), see @ref{Blank pixels}. Another useful application of this option is to create labeled elliptical or circular apertures in an image. To do this, set the value in the magnitude column to the label you want for this profile. This labeled image can then be used in combination with NoiseChisel's output (see @ref{NoiseChisel output}) to do aperture photometry with MakeCatalog (see @ref{MakeCatalog}). Alternatively, if you want to mark regions of the image (for example with an elliptical circumference) and you don't want to use NaN values (as explained above) for some technical reason, you can get the minimum or maximum value in the image @footnote{The minimum will give a better result, because the maximum can be too high compared to most pixels in the image, making it harder to display.} using Arithmetic (see @ref{Arithmetic}), then use that value in the magnitude column along with this option for all the profiles. Please note that when using MakeProfiles on an already existing image, you have to set `@option{--oversample=1}'. Otherwise all the profiles will be scaled up based on the oversampling scale in your configuration files (see @ref{Configuration files}) unless you have accounted for oversampling in your catalog. @item --mcolisbrightness The value given in the ``magnitude column'' (specified by @option{--mcol}, see @ref{MakeProfiles catalog}) must be interpretted as brightness, not magnitude. The zeropoint magnitude (value to the @option{--zeropoint} option) is ignored and the given value must have the same units as the input dataset's pixels. Recall that the total profile magnitude or brightness that is specified with in the @option{--mcol} column of the input catalog is not an integration to infinity, but the actual sum of pixels in the profile (until the desired truncation radius). See @ref{Profile magnitude} for more on this point. @item --magatpeak The magnitude column in the catalog (see @ref{MakeProfiles catalog}) will be used to find the brightness only for the peak profile pixel, not the full profile. Note that this is the flux of the profile's peak pixel in the final output of MakeProfiles. So beware of the oversampling, see @ref{Oversampling}. This option can be useful if you want to check a mock profile's total magnitude at various truncation radii. Without this option, no matter what the truncation radius is, the total magnitude will be the same as that given in the catalog. But with this option, the total magnitude will become brighter as you increase the truncation radius. In sharper profiles, sometimes the accuracy of measuring the peak profile flux is more than the overall object brightness. In such cases, with this option, the final profile will be built such that its peak has the given magnitude, not the total profile. @cartouche @strong{CAUTION:} If you want to use this option for comparing with observations, please note that MakeProfiles does not do convolution. Unless you have de-convolved your data, your images are convolved with the instrument and atmospheric PSF, see @ref{PSF}. Particularly in sharper profiles, the flux in the peak pixel is strongly decreased after convolution. Also note that in such cases, besides de-convolution, you will have to set @option{--oversample=1} otherwise after resampling your profile with Warp (see @ref{Warp}), the peak flux will be different. @end cartouche @item -X INT,INT @itemx --shift=INT,INT Shift all the profiles and enlarge the image along each dimension. To better understand this option, please see @mymath{n} in @ref{If convolving afterwards}. This is useful when you want to convolve the image afterwards. If you are using an external PSF, be sure to oversample it to the same scale used for creating the mock images. If a background image is specified, any possible value to this option is ignored. @item -c @itemx --prepforconv Shift all the profiles and enlarge the image based on half the width of the first Moffat or Gaussian profile in the catalog, considering any possible oversampling see @ref{If convolving afterwards}. @option{--prepforconv} is only checked and possibly activated if @option{--xshift} and @option{--yshift} are both zero (after reading the command-line and configuration files). If a background image is specified, any possible value to this option is ignored. @item -z FLT @itemx --zeropoint=FLT The zero-point magnitude of the image. @item -w FLT @itemx --circumwidth=FLT The width of the circumference if the profile is to be an elliptical circumference or annulus. See the explanations for this type of profile in @option{--fcol}. @item -R @itemx --replace Do not add the pixels of each profile over the background (possibly crowded by other profiles), replace them. By default, when two profiles overlap, the final pixel value is the sum of all the profiles that overlap on that pixel. When this option is given, the pixels are not added but replaced by the newer profile's pixel and any value under it is lost. @cindex CPU threads @cindex Threads, CPU When order matters, make sure to use this function with `@option{--numthreads=1}'. When multiple threads are used, the separate profiles are built asynchronously and not in order. Since order does not matter in an addition, this causes no problems by default but has to be considered when this option is given. Using multiple threads is no problem if the profiles are to be used as a mask with a blank or fixed value (see `@option{--mforflatpix}') since all their pixel values are the same. Note that only non-zero pixels are replaced. With radial profiles (for example S@'ersic or Moffat) only values above zero will be part of the profile. However, when using flat profiles with the `@option{--mforflatpix}' option, you should be careful not to give a @code{0.0} value as the flat profile's pixel value. @end table @node MakeProfiles output dataset, MakeProfiles log file, MakeProfiles profile settings, Invoking astmkprof @subsubsection MakeProfiles output dataset MakeProfiles takes an input catalog uses basic properties that are defined there to build a dataset, for example a 2D image containing the profiles in the catalog. In @ref{MakeProfiles catalog} and @ref{MakeProfiles profile settings}, the catalog and profile settings were discussed. The options of this section, allow you to configure the output dataset (or the canvas that will host the built profiles). @table @option @item -k STR @itemx --background=STR A background image FITS file to build the profiles on. The extension that contains the image should be specified with the @option{--backhdu} option, see below. When a background image is specified, it will be used to derive all the information about the output image. Hence, the following options will be ignored: @option{--naxis}, @option{--oversample}, @option{--crpix}, @option{--crval} (generally, all other WCS related parameters) and the output's data type (see @option{--type} in @ref{Input output options}). The image will act like a canvas to build the profiles on: profile pixel values will be summed with the background image pixel values. With the @option{--replace} option you can disable this behavior and replace the profile pixels with the background pixels. If you want to use all the image information above, except for the pixel values (you want to have a blank canvas to build the profiles on, based on an input image), you can call @option{--clearcanvas}, to set all the input image's pixels to zero before starting to build the profiles over it (this is done in memory after reading the input, so nothing will happen to your input file). @item -B STR/INT @itemx --backhdu=STR/INT The header data unit (HDU) of the file given to @option{--background}. @item -C @itemx --clearcanvas When an input image is specified (with the @option{--background} option, set all its pixels to 0.0 immediately after reading it into memory. Effectively, this will allow you to use all its properties (described under the @option{--background} option), without having to worry about the pixel values. @option{--clearcanvas} can come in handy in many situations, for example if you want to create a labeled image (segmentation map) for creating a catalog (see @ref{MakeCatalog}). In other cases, you might have modeled the objects in an image and want to create them on the same frame, but without the original pixel values. @item -E STR/INT,FLT[,FLT,[...]] @itemx --kernel=STR/INT,FLT[,FLT,[...]] Only build one kernel profile with the parameters given as the values to this option. The different values must be separated by a comma (@key{,}). The first value identifies the radial function of the profile, either through a string or through a number (see description of @option{--fcol} in @ref{MakeProfiles catalog}). Each radial profile needs a different total number of parameters: S@'ersic and Moffat functions need 3 parameters: radial, S@'ersic index or Moffat @mymath{\beta}, and truncation radius. The Gaussian function needs two parameters: radial and truncation radius. The point function doesn't need any parameters and flat and circumference profiles just need one parameter (truncation radius). The PSF or kernel is a unique (and highly constrained) type of profile: the sum of its pixels must be one, its center must be the center of the central pixel (in an image with an odd number of pixels on each side), and commonly it is circular, so its axis ratio and position angle are one and zero respectively. Kernels are commonly necessary for various data analysis and data manipulation steps (for example see @ref{Convolve}, and @ref{NoiseChisel}. Because of this it is inconvenient to define a catalog with one row and many zero valued columns (for all the non-necessary parameters). Hence, with this option, it is possible to create a kernel with MakeProfiles without the need to create a catalog. Here are some examples: @table @option @item --kernel=moffat,3,2.8,5 A Moffat kernel with FWHM of 3 pixels, @mymath{\beta=2.8} which is truncated at 5 times the FWHM. @item --kernel=gaussian,2,3 A Gaussian kernel with FWHM of 2 pixels and truncated at 3 times the FWHM. @end table @item -x INT,INT @itemx --naxis=INT,INT The number of pixels along each dimension axis of the output in FITS order. This is before over-sampling. For example if you call MakeProfiles with @option{--naxis=100,150 --oversample=5} (assuming no shift due for later convolution), then the final image size along the first axis will be 500 by 750 pixels. Fractions are acceptable as values for each dimension, however, they must reduce to an integer, so @option{--naxis=150/3,300/3} is acceptable but @option{--naxis=150/4,300/4} is not. When viewing a FITS image in DS9, the first FITS dimension is in the horizontal direction and the second is vertical. As an example, the image created with the example above will have 500 pixels horizontally and 750 pixels vertically. If a background image is specified, this option is ignored. @item -s INT @itemx --oversample=INT The scale to over-sample the profiles and final image. If not an odd number, will be added by one, see @ref{Oversampling}. Note that this @option{--oversample} will remain active even if an input image is specified. If your input catalog is based on the background image, be sure to set @option{--oversample=1}. @item --psfinimg Build the possibly existing PSF profiles (Moffat or Gaussian) in the catalog into the final image. By default they are built separately so you can convolve your images with them, thus their magnitude and positions are ignored. With this option, they will be built in the final image like every other galaxy profile. To have a final PSF in your image, make a point profile where you want the PSF and after convolution it will be the PSF. @item -i @itemx --individual @cindex Individual profiles @cindex Build individual profiles If this option is called, each profile is created in a separate FITS file within the same directory as the output and the row number of the profile (starting from zero) in the name. The file for each row's profile will be in the same directory as the final combined image of all the profiles and will have the final image's name as a suffix. So for example if the final combined image is named @file{./out/fromcatalog.fits}, then the first profile that will be created with this option will be named @file{./out/0_fromcatalog.fits}. Since each image only has one full profile out to the truncation radius the profile is centered and so, only the sub-pixel position of the profile center is important for the outputs of this option. The output will have an odd number of pixels. If there is no oversampling, the central pixel will contain the profile center. If the value to @option{--oversample} is larger than unity, then the profile center is on any of the central @option{--oversample}'d pixels depending on the fractional value of the profile center. If the fractional value is larger than half, it is on the bottom half of the central region. This is due to the FITS definition of a real number position: The center of a pixel has fractional value @mymath{0.00} so each pixel contains these fractions: .5 -- .75 -- .00 (pixel center) -- .25 -- .5. @item -m @itemx --nomerged Don't make a merged image. By default after making the profiles, they are added to a final image with side lengths specified by @option{--naxis}if they overlap with it. @end table @noindent The options below can be used to define the world coordinate system (WCS) properties of the MakeProfiles outputs. The option names are delibarately chosen to be the same as the FITS standard WCS keywords. See Section 8 of @url{https://doi.org/10.1051/0004-6361/201015362, Pence et al [2010]} for a short introduction to WCS in the FITS standard@footnote{The world coordinate standard in FITS is a very beatiful and powerful concept to link/associate datasets with the outside world (other datasets). The description in the FITS standard (link above) only touches the tip of the ice-burg. To learn more please see @url{https://doi.org/10.1051/0004-6361:20021326, Greisen and Calabretta [2002]}, @url{https://doi.org/10.1051/0004-6361:20021327, Calabretta and Greisen [2002]}, @url{https://doi.org/10.1051/0004-6361:20053818, Greisen et al. [2006]}, and @url{http://www.atnf.csiro.au/people/mcalabre/WCS/dcs_20040422.pdf, Calabretta et al.}}. If you look into the headers of a FITS image with WCS for example you will see all these names but in uppercase and with numbers to represent the dimensions, for example @code{CRPIX1} and @code{PC2_1}. You can see the FITS headers with Gnuastro's @ref{Fits} program using a command like this: @command{$ astfits -p image.fits}. If the values given to any of these options does not correspond to the number of dimensions in the output dataset, then no WCS information will be added. @table @option @item --crpix=FLT,FLT The pixel coordinates of the WCS reference point. Fractions are acceptable for the values of this option. @item --crval=FLT,FLT The WCS coordinates of the Reference point. Fractions are acceptable for the values of this option. @item --cdelt=FLT,FLT The resolution (size of one data-unit or pixel in WCS units) of the non-oversampled dataset. Fractions are acceptable for the values of this option. @item --pc=FLT,FLT,FLT,FLT The PC matrix of the WCS rotation, see the FITS standard (link above) to better understand the PC matrix. @item --cunit=STR,STR The units of each WCS axis, for example @code{deg}. Note that these values are part of the FITS standard (link above). MakeProfiles won't complain if you use non-standard values, but later usage of them might cause trouble. @item --ctype=STR,STR The type of each WCS axis, for example @code{RA---TAN} and @code{DEC--TAN}. Note that these values are part of the FITS standard (link above). MakeProfiles won't complain if you use non-standard values, but later usage of them might cause trouble. @end table @node MakeProfiles log file, , MakeProfiles output dataset, Invoking astmkprof @subsubsection MakeProfiles log file Besides the final merged dataset of all the profiles, or the individual datasets (see @ref{MakeProfiles output dataset}), if the @option{--log} option is called MakeProfiles will also create a log file in the current directory (where you run MockProfiles). See @ref{Common options} for a full description of @option{--log} and other options that are shared between all Gnuastro programs. The values for each column are explained in the first few commented lines of the log file (starting with @command{#} character). Here is a more complete description. @itemize @item An ID (row number of profile in input catalog). @item The total magnitude of the profile in the output dataset. When the profile does not completely overlap with the output dataset, this will be different from your input magnitude. @item The number of pixels (in the oversampled image) which used Monte Carlo integration and not the central pixel value, see @ref{Sampling from a function}. @item The fraction of flux in the Monte Carlo integrated pixels. @item If an individual image was created, this column will have a value of @code{1}, otherwise it will have a value of @code{0}. @end itemize @node MakeNoise, , MakeProfiles, Modeling and fittings @section MakeNoise @cindex Noise Real data are always buried in noise, therefore to finalize a simulation of real data (for example to test our observational algorithms) it is essential to add noise to the mock profiles created with MakeProfiles, see @ref{MakeProfiles}. Below, the general principles and concepts to help understand how noise is quantified is discussed. MakeNoise options and argument are then discussed in @ref{Invoking astmknoise}. @menu * Noise basics:: Noise concepts and definitions. * Invoking astmknoise:: Options and arguments to MakeNoise. @end menu @node Noise basics, Invoking astmknoise, MakeNoise, MakeNoise @subsection Noise basics @cindex Noise @cindex Image noise Deep astronomical images, like those used in extragalactic studies seriously suffer from noise in the data. Generally speaking, the sources of noise in an astronomical image are photon counting noise and Instrumental noise which are discussed in detail below. We finish with a short introduction on how random numbers are generated and how you can determine the random number generator and seed value. @menu * Photon counting noise:: Poisson noise * Instrumental noise:: Readout, dark current and other sources. * Final noised pixel value:: How the final noised value is calculated. * Generating random numbers:: How random numbers are generated. @end menu @node Photon counting noise, Instrumental noise, Noise basics, Noise basics @subsubsection Photon counting noise @cindex Counting error @cindex Photon counting noise Thanks to the very accurate electronics used in today's detectors, this type of noise is the main cause of concern for extra galactic studies. It can generally be associate with the counting error that is known to have a Poisson distribution. The Poisson distribution is about counting. But counting is a discrete operation with only positive values, for example we can't count @mymath{3.2} or @mymath{-2} of anything. We only count @mymath{0}, @mymath{1}, @mymath{2}, @mymath{3} and so on. Therefore the Poisson distribution is also a discrete distribution, only applying to whole positive integers. @cindex Probability density function Let's assume the mean value of counting something is known. In this case, we are counting the number of electrons that are produced by photons in a detector (for example CCD) pixel. Let's call this mean @mymath{\lambda}. Furthermore, let's take @mymath{k} to represent the result of one particular counting attempt. The probability density function of @mymath{k} can be written as: @cindex Poisson distribution @dispmath{f(k)={\lambda^k \over k!} e^{-\lambda},\quad k\in @{0, 1, 2, 3, \dots @}} @cindex Skewed Poisson distribution Because the Poisson distribution is only applicable to positive values, naturally it is very skewed when @mymath{\lambda} is near zero. One qualitative way to explain it is that there simply aren't enough integers smaller than @mymath{\lambda}, than integers that are larger than it. Therefore to accommodate all possibilities, it has to be skewed when @mymath{\lambda} is small. @cindex Compare Poisson and Gaussian But as @mymath{\lambda} becomes larger and larger, the distribution becomes more and more symmetric. One very useful property of the Poisson distribution is that the mean value is also its variance. When @mymath{\lambda} is very large, say @mymath{\lambda>1000}, then the normal (Gaussian) distribution, see @ref{PSF}, is an excellent approximation of the Poisson distribution with mean @mymath{\mu=\lambda} and standard deviation @mymath{\sigma=\sqrt{\lambda}}. We see that the variance or dispersion of the distribution depends on the mean value, and when it is large it can be approximated with a Gaussian that only has one free parameter (@mymath{\mu=\lambda} and @mymath{\sigma=\sqrt{\lambda}}) instead of two that it originally has. @cindex Sky value @cindex Background flux @cindex Undetected objects The astronomical objects after convolution with the PSF of the instrument, lie above a certain background flux. This background flux is defined to be the average flux of a region in the image that has absolutely no objects. The physical origin of this background value is the brightness of the atmosphere or possible stray light within the imaging instrument. It is thus an ideal definition, because in practice, what lies deep in the noise far lower than the detection limit is never known@footnote{See the section on sky in Akhlaghi M., Ichikawa. T. 2015. Astrophysical Journal Supplement Series.}. However, in a real image, a relatively large number of very faint objects can been fully buried in the noise. These undetected objects will bias the background measurement to slightly larger values. The sky value is therefore defined to be the average of the undetected regions in the image, so in an ideal case where all the objects have been detected, the sky value and background value are the same. @cindex Background flux gradients @cindex Gradients in background flux @cindex Variation of background flux As longer wavelengths are used, the background value becomes more significant and also varies over a wide image field. Such variations are not currently implemented in MakeProfiles, but will be in the future. In a mock image, we have the luxury of setting the background value. @cindex Simulating noise @cindex Noise simulation In each pixel of the canvas of pixels, the flux is the sum of contributions from various sources after convolution. Let's name this flux of the convolved sum of possibly overlapping objects, @mymath{I_{nn}}. @mymath{nn} representing `no noise'. For now, let's assume the background is constant and represented by @mymath{B}. In practice the background values are larger than @mymath{\sim1,000} counts. Then the flux after adding noise is a random value taken from a Gaussian distribution with the following mean (@mymath{\mu}) and standard deviation (@mymath{\sigma}): @dispmath{\mu=B+I_{nn}, \quad \sigma=\sqrt{B+I_{nn}}} Since this type of noise is inherent in the objects we study, it is usually measured on the same scale as the astronomical objects, namely the magnitude system, see @ref{Flux Brightness and magnitude}. It is then internally converted to the flux scale for further processing. @node Instrumental noise, Final noised pixel value, Photon counting noise, Noise basics @subsubsection Instrumental noise @cindex Readout noise @cindex Instrumental noise @cindex Noise, instrumental While taking images with a camera, a dark current is fed to the pixels, the variation of the value of this dark current over the pixels, also adds to the final image noise. Another source of noise is the readout noise that is produced by the electronics in the CCD that attempt to digitize the voltage produced by the photo-electrons in the analog to digital converter. In deep extra-galactic studies these sources of noise are not as significant as the noise of the background sky. Let @mymath{C} represent the combined standard deviation of all these sources of noise. If only this source of noise is present, the noised pixel value would be a random value chosen from a Gaussian distribution with @dispmath{\mu=I_{nn}, \quad \sigma=\sqrt{C^2+I_{nn}}} @cindex ADU @cindex Gain @cindex Counts This type of noise is completely independent of the type of objects being studied, it is completely determined by the instrument. So the flux scale (and not magnitude scale) is most commonly used for this type of noise. In practice, this value is usually reported in ADUs not flux or electron counts. The gain value of the device can be used to convert between these two, see @ref{Flux Brightness and magnitude}. @node Final noised pixel value, Generating random numbers, Instrumental noise, Noise basics @subsubsection Final noised pixel value Depending on the values you specify for @mymath{B} and @mymath{C} from the above, the final noised value for each pixel is a random value chosen from a Gaussian distribution with @dispmath{\mu=B+I_{nn}, \quad \sigma=\sqrt{C^2+B+I_{nn}}} @node Generating random numbers, , Final noised pixel value, Noise basics @subsubsection Generating random numbers @cindex Random numbers @cindex Numbers, random As discussed above, to generate noise we need to make random samples of a particular distribution. So it is important to understand some general concepts regarding the generation of random numbers. For a very complete and nice introduction we strongly advise reading Donald Knuth's ``The art of computer programming'', volume 2, chapter 3@footnote{Knuth, Donald. 1998. The art of computer programming. Addison--Wesley. ISBN 0-201-89684-2 }. Quoting from the GNU Scientific Library manual, ``If you don't own it, you should stop reading right now, run to the nearest bookstore, and buy it''@footnote{For students, running to the library might be more affordable!}! @cindex Psudo-random numbers @cindex Numbers, psudo-random @cindex Seed, psudo-random numbers Using only software, we can only produce what is called a psudo-random sequence of numbers. A true random number generator is a hardware (let's assume we have made sure it has no systematic biases), for example throwing dice or flipping coins (which have remained from the ancient times). More modern hardware methods use atmospheric noise, thermal noise or other types of external electromagnetic or quantum phenomena. All psudo-random number generators (software) require a seed to be the basis of the generation. The advantage of having a seed is that if you specify the same seed for multiple runs, you will get an identical sequence of random numbers which allows you to reproduce the same final noised image. @cindex Environment variables @cindex GNU Scientific Library The programs in GNU Astronomy Utilities (for example MakeNoise or MakeProfiles) use the GNU Scientific Library (GSL) to generate random numbers. GSL allows the user to set the random number generator through environment variables, see @ref{Installation directory} for an introduction to environment variables. In the chapter titled ``Random Number Generation'' they have fully explained the various random number generators that are available (there are a lot of them!). Through the two environment variables @code{GSL_RNG_TYPE} and @code{GSL_RNG_SEED} you can specify the generator and its seed respectively. If you don't specify a value for @code{GSL_RNG_TYPE}, GSL will use its default random number generator type. The default type is sufficient for most general applications. If no value is given for the @code{GSL_RNG_SEED} environment variable and you have asked Gnuastro to read the seed from the environment (through the @option{--envseed} option), then GSL will use the default value of each generator to give identical outputs. If you don't explicitly tell Gnuastro programs to read the seed value from the environment variable, then they will use the system time (accurate to within a microsecond) to generate (apparently random) seeds. In this manner, every time you run the program, you will get a different random number distribution. There are two ways you can specify values for these environment variables. You can call them on the same command-line for example: @example $ GSL_RNG_TYPE="taus" GSL_RNG_SEED=345 astmknoise input.fits @end example @noindent In this manner the values will only be used for this particular execution of MakeNoise. Alternatively, you can define them for the full period of your terminal session or script length, using the shell's @command{export} command with the two separate commands below (for a script remove the @code{$} signs): @example $ export GSL_RNG_TYPE="taus" $ export GSL_RNG_SEED=345 @end example @cindex Startup scripts @cindex @file{.bashrc} @noindent The subsequent programs which use GSL's random number generators will hence forth use these values in this session of the terminal you are running or while executing this script. In case you want to set fixed values for these parameters every time you use the GSL random number generator, you can add these two lines to your @file{.bashrc} startup script@footnote{Don't forget that if you are going to give your scripts (that use the GSL random number generator) to others you have to make sure you also tell them to set these environment variable separately. So for scripts, it is best to keep all such variable definitions within the script, even if they are within your @file{.bashrc}.}, see @ref{Installation directory}. @cartouche @noindent @strong{NOTE:} If the two environment variables @code{GSL_RNG_TYPE} and @code{GSL_RNG_SEED} are defined, GSL will report them by default, even if you don't use the @option{--envseed} option. For example you can see the top few lines of the output of MakeProfiles: @example $ export GSL_RNG_TYPE="taus" $ export GSL_RNG_SEED=345 $ astmkprof catalog.txt --envseed GSL_RNG_TYPE=taus GSL_RNG_SEED=345 MakeProfiles started on AAA BBB DD EE:FF:GG HHH - 6 profiles read from catalog.txt 0.000236 seconds - Random number generator (RNG) type: taus - RNG seed for all profiles: 345 @end example @noindent The first two output lines (showing the names of the environment variables) are printed by GSL before MakeProfiles actually starts generating random numbers. The Gnuastro programs will report the values they use independently, you should check them for the final values used. For example if @option{--envseed} is not given, @code{GSL_RNG_SEED} will not be used and the last line shown above will not be printed. In the case of MakeProfiles, each profile will get its own seed value. @end cartouche @node Invoking astmknoise, , Noise basics, MakeNoise @subsection Invoking MakeNoise MakeNoise will add noise to an existing image. The executable name is @file{astmknoise} with the following general template @example $ astmknoise [OPTION ...] InputImage.fits @end example @noindent One line examples: @example ## Add noise with a standard deviation of 100 to image: $ astmknoise --sigma=100 image.fits ## Add noise to input image assuming a background magnitude (with ## zeropoint magnitude of 0) and a certain instrumental noise: $ astmknoise --background=-10 -z0 --instrumental=20 mockimage.fits @end example @noindent If actual processing is to be done, the input image is a mandatory argument. The full list of options common to all the programs in Gnuastro can be seen in @ref{Common options}. The type (see @ref{Numeric data types}) of the output can be specified with the @option{--type} option, see @ref{Input output options}. The header of the output FITS file keeps all the parameters that were influential in making it. This is done for future reproducibility. @table @option @item -s FLT @item --sigma=FLT The total noise sigma in the same units as the pixel values. With this option, the @option{--background}, @option{--zeropoint} and @option{--instrumental} will be ignored. With this option, the noise will be independent of the pixel values (which is not realistic, see @ref{Photon counting noise}). Hence it is only useful if you are working on low surface brightness regions where the change in pixel value (and thus real noise) is insignificant. @item -b FLT @itemx --background=FLT The background pixel value for the image in units of magnitudes, see @ref{Photon counting noise} and @ref{Flux Brightness and magnitude}. @item -z FLT @itemx --zeropoint=FLT The zeropoint magnitude used to convert the value of @option{--background} (in units of magnitude) to flux, see @ref{Flux Brightness and magnitude}. @item -i FLT @itemx --instrumental=FLT The instrumental noise which is in units of flux, see @ref{Instrumental noise}. @item -e @itemx --envseed Use the @code{GSL_RNG_SEED} environment variable for the seed used in the random number generator, see @ref{Generating random numbers}. With this option, the output image noise is always going to be identical (or reproducible). @item -d @itemx --doubletype Save the output in the double precision floating point format that was used internally. This option will be most useful if the input images were of integer types. @end table @node High-level calculations, Library, Modeling and fittings, Top @chapter High-level calculations After the reduction of raw data (for example with the programs in @ref{Data manipulation}) you will have reduced images/data ready for processing/analyzing (for example with the programs in @ref{Data analysis}). But the processed/analyzed data (or catalogs) are still not enough to derive any scientific result. Even higher-level analysis is still needed to convert the observed magnitudes, sizes or volumes into physical quantities that we associate with each catalog entry or detected object which is the purpose of the tools in this section. @menu * CosmicCalculator:: Calculate cosmological variables @end menu @node CosmicCalculator, , High-level calculations, High-level calculations @section CosmicCalculator To derive higher-level information regarding our sources in extra-galactic astronomy, cosmological calculations are necessary. In Gnuastro, CosmicCalculator is in charge of such calculations. Before discussing how CosmicCalculator is called and operates (in @ref{Invoking astcosmiccal}), it is important to provide a rough but mostly self sufficient review of the basics and the equations used in the analysis. In @ref{Distance on a 2D curved space} the basic idea of understanding distances in a curved and expanding 2D universe (which we can visualize) are reviewed. Having solidified the concepts there, in @ref{Extending distance concepts to 3D}, the formalism is extended to the 3D universe we are trying to study in our research. The focus here is obtaining a physical insight into these equations (mainly for the use in real observational studies). There are many books thoroughly deriving and proving all the equations with all possible initial conditions and assumptions for any abstract universe, interested readers can study those books. @menu * Distance on a 2D curved space:: Distances in 2D for simplicity * Extending distance concepts to 3D:: Going to 3D (our real universe). * Invoking astcosmiccal:: How to run CosmicCalculator @end menu @node Distance on a 2D curved space, Extending distance concepts to 3D, CosmicCalculator, CosmicCalculator @subsection Distance on a 2D curved space The observations to date (for example the Planck 2015 results), have not measured@footnote{The observations are interpreted under the assumption of uniform curvature. For a relativistic alternative to dark energy (and maybe also some part of dark matter), non-uniform curvature may be even be more critical, but that is beyond the scope of this brief explanation.} the presence of significant curvature in the universe. However to be generic (and allow its measurement if it does in fact exist), it is very important to create a framework that allows non-zero uniform curvature. However, this section is not intended to be a fully thorough and mathematically complete derivation of these concepts. There are many references available for such reviews that go deep into the abstract mathematical proofs. The emphasis here is on visualization of the concepts for a beginner. As 3D beings, it is difficult for us to mentally create (visualize) a picture of the curvature of a 3D volume. Hence, here we will assume a 2D surface/space and discuss distances on that 2D surface when it is flat and when it is curved. Once the concepts have been created/visualized here, we will extend them, in @ref{Extending distance concepts to 3D}, to a real 3D spatial @emph{slice} of the Universe we live in and hope to study. To be more understandable (actively discuss from an observer's point of view) let's assume there's an imaginary 2D creature living on the 2D space (which @emph{might} be curved in 3D). Here, we will be working with this creature in its efforts to analyze distances in its 2D universe. The start of the analysis might seem too mundane, but since it is difficult to imagine a 3D curved space, it is important to review all the very basic concepts thoroughly for an easy transition to a universe that is more difficult to visualize (a curved 3D space embedded in 4D). To start, let's assume a static (not expanding or shrinking), flat 2D surface similar to @ref{flatplane} and that the 2D creature is observing its universe from point @mymath{A}. One of the most basic ways to parametrize this space is through the Cartesian coordinates (@mymath{x}, @mymath{y}). In @ref{flatplane}, the basic axes of these two coordinates are plotted. An infinitesimal change in the direction of each axis is written as @mymath{dx} and @mymath{dy}. For each point, the infinitesimal changes are parallel with the respective axes and are not shown for clarity. Another very useful way of parameterizing this space is through polar coordinates. For each point, we define a radius (@mymath{r}) and angle (@mymath{\phi}) from a fixed (but arbitrary) reference axis. In @ref{flatplane} the infinitesimal changes for each polar coordinate are plotted for a random point and a dashed circle is shown for all points with the same radius. @float Figure,flatplane @center@image{gnuastro-figures/flatplane, 10cm, , } @caption{Two dimensional Cartesian and polar coordinates on a flat plane.} @end float Assuming an object is placed at a certain position, which can be parameterized as @mymath{(x,y)}, or @mymath{(r,\phi)}, a general infinitesimal change in its position will place it in the coordinates @mymath{(x+dx,y+dy)} and @mymath{(r+dr,\phi+d\phi)}. The distance (on the flat 2D surface) that is covered by this infinitesimal change in the static universe (@mymath{ds_s}, the subscript signifies the static nature of this universe) can be written as: @dispmath{ds_s=dx^2+dy^2=dr^2+r^2d\phi^2} The main question is this: how can the 2D creature incorporate the (possible) curvature in its universe when it's calculating distances? The universe that it lives in might equally be a curved surface like @ref{sphereandplane}. The answer to this question but for a 3D being (us) is the whole purpose to this discussion. Here, we want to give the 2D creature (and later, ourselves) the tools to measure distances if the space (that hosts the objects) is curved. @ref{sphereandplane} assumes a spherical shell with radius @mymath{R} as the curved 2D plane for simplicity. The 2D plane is tangent to the spherical shell and only touches it at @mymath{A}. This idea will be generalized later. The first step in measuring the distance in a curved space is to imagine a third dimension along the @mymath{z} axis as shown in @ref{sphereandplane}. For simplicity, the @mymath{z} axis is assumed to pass through the center of the spherical shell. Our imaginary 2D creature cannot visualize the third dimension or a curved 2D surface within it, so the remainder of this discussion is purely abstract for it (similar to us having difficulty in visualizing a 3D curved space in 4D). But since we are 3D creatures, we have the advantage of visualizing the following steps. Fortunately the 2D creature is already familiar with our mathematical constructs, so it can follow our reasoning. With the third axis added, a generic infinitesimal change over @emph{the full} 3D space corresponds to the distance: @dispmath{ds_s^2=dx^2+dy^2+dz^2=dr^2+r^2d\phi^2+dz^2.} @float Figure,sphereandplane @center@image{gnuastro-figures/sphereandplane, 10cm, , } @caption{2D spherical shell (centered on @mymath{O}) and flat plane (light gray) tangent to it at point @mymath{A}.} @end float It is very important to recognize that this change of distance is for @emph{any} point in the 3D space, not just those changes that occur on the 2D spherical shell of @ref{sphereandplane}. Recall that our 2D friend can only do measurements on the 2D surfaces, not the full 3D space. So we have to constrain this general change to any change on the 2D spherical shell. To do that, let's look at the arbitrary point @mymath{P} on the 2D spherical shell. Its image (@mymath{P'}) on the flat plain is also displayed. From the dark gray triangle, we see that @dispmath{\sin\theta={r\over R},\quad\cos\theta={R-z\over R}.}These relations allow the 2D creature to find the value of @mymath{z} (an abstract dimension for it) as a function of r (distance on a flat 2D plane, which it can visualize) and thus eliminate @mymath{z}. From @mymath{\sin^2\theta+\cos^2\theta=1}, we get @mymath{z^2-2Rz+r^2=0} and solving for @mymath{z}, we find: @dispmath{z=R\left(1\pm\sqrt{1-{r^2\over R^2}}\right).} The @mymath{\pm} can be understood from @ref{sphereandplane}: For each @mymath{r}, there are two points on the sphere, one in the upper hemisphere and one in the lower hemisphere. An infinitesimal change in @mymath{r}, will create the following infinitesimal change in @mymath{z}: @dispmath{dz={\mp r\over R}\left(1\over \sqrt{1-{r^2/R^2}}\right)dr.}Using the positive signed equation instead of @mymath{dz} in the @mymath{ds_s^2} equation above, we get: @dispmath{ds_s^2={dr^2\over 1-r^2/R^2}+r^2d\phi^2.} The derivation above was done for a spherical shell of radius @mymath{R} as a curved 2D surface. To generalize it to any surface, we can define @mymath{K=1/R^2} as the curvature parameter. Then the general infinitesimal change in a static universe can be written as: @dispmath{ds_s^2={dr^2\over 1-Kr^2}+r^2d\phi^2.} Therefore, when @mymath{K>0} (and curvature is the same everywhere), we have a finite universe, where @mymath{r} cannot become larger than @mymath{R} as in @ref{sphereandplane}. When @mymath{K=0}, we have a flat plane (@ref{flatplane}) and a negative @mymath{K} will correspond to an imaginary @mymath{R}. The latter two cases may be infinite in area (which is not a simple concept, but mathematically can be modeled with @mymath{r} extending infinitely), or finite-area (like a cylinder is flat everywhere with @mymath{ds_s^2={dx^2 + dy^2}}, but finite in one direction in size). @cindex Proper distance A very important issue that can be discussed now (while we are still in 2D and can actually visualize things) is that @mymath{\overrightarrow{r}} is tangent to the curved space at the observer's position. In other words, it is on the gray flat surface of @ref{sphereandplane}, even when the universe if curved: @mymath{\overrightarrow{r}=P'-A}. Therefore for the point @mymath{P} on a curved space, the raw coordinate @mymath{r} is the distance to @mymath{P'}, not @mymath{P}. The distance to the point @mymath{P} (at a specific coordinate @mymath{r} on the flat plane) over the curved surface (thick line in @ref{sphereandplane}) is called the @emph{proper distance} and is displayed with @mymath{l}. For the specific example of @ref{sphereandplane}, the proper distance can be calculated with: @mymath{l=R\theta} (@mymath{\theta} is in radians). using the @mymath{\sin\theta} relation found above, we can find @mymath{l} as a function of @mymath{r}: @dispmath{\theta=\sin^{-1}\left({r\over R}\right)\quad\rightarrow\quad l(r)=R\sin^{-1}\left({r\over R}\right)} @mymath{R} is just an arbitrary constant and can be directly found from @mymath{K}, so for cleaner equations, it is common practice to set @mymath{R=1}, which gives: @mymath{l(r)=\sin^{-1}r}. Also note that when @mymath{R=1}, then @mymath{l=\theta}. Generally, depending on the the curvature, in a @emph{static} universe the proper distance can be written as a function of the coordinate @mymath{r} as (from now on we are assuming @mymath{R=1}): @dispmath{l(r)=\sin^{-1}(r)\quad(K>0),\quad\quad l(r)=r\quad(K=0),\quad\quad l(r)=\sinh^{-1}(r)\quad(K<0).}With @mymath{l}, the infinitesimal change of distance can be written in a more simpler and abstract form of @dispmath{ds_s^2=dl^2+r^2d\phi^2.} @cindex Comoving distance Until now, we had assumed a static universe (not changing with time). But our observations so far appear to indicate that the universe is expanding (it isn't static). Since there is no reason to expect the observed expansion is unique to our particular position of the universe, we expect the universe to be expanding at all points with the same rate at the same time. Therefore, to add a time dependence to our distance measurements, we can include a multiplicative scaling factor, which is a function of time: @mymath{a(t)}. The functional form of @mymath{a(t)} comes from the cosmology, the physics we assume for it: general relativity, and the choice of whether the universe is uniform (`homogeneous') in density and curvature or inhomogeneous. In this section, the functional form of @mymath{a(t)} is irrelevant, so we can avoid these issues. With this scaling factor, the proper distance will also depend on time. As the universe expands, the distance between two given points will shift to larger values. We thus define a distance measure, or coordinate, that is independent of time and thus doesn't `move'. We call it the @emph{comoving distance} and display with @mymath{\chi} such that: @mymath{l(r,t)=\chi(r)a(t)}. We have therefore, shifted the @mymath{r} dependence of the proper distance we derived above for a static universe to the comoving distance: @dispmath{\chi(r)=\sin^{-1}(r)\quad(K>0),\quad\quad \chi(r)=r\quad(K=0),\quad\quad \chi(r)=\sinh^{-1}(r)\quad(K<0).} Therefore, @mymath{\chi(r)} is the proper distance to an object at a specific reference time: @mymath{t=t_r} (the @mymath{r} subscript signifies ``reference'') when @mymath{a(t_r)=1}. At any arbitrary moment (@mymath{t\neq{t_r}}) before or after @mymath{t_r}, the proper distance to the object can be scaled with @mymath{a(t)}. Measuring the change of distance in a time-dependent (expanding) universe only makes sense if we can add up space and time@footnote{In other words, making our space-time consistent with Minkowski space-time geometry. In this geometry, different observers at a given point (event) in space-time split up space-time into `space' and `time' in different ways, just like people at the same spatial position can make different choices of splitting up a map into `left--right' and `up--down'. This model is well supported by twentieth and twenty-first century observations.}. But we can only add bits of space and time together if we measure them in the same units: with a conversion constant (similar to how 1000 is used to convert a kilometer into meters). Experimentally, we find strong support for the hypothesis that this conversion constant is the speed of light (or gravitational waves@footnote{The speed of gravitational waves was recently found to be very similar to that of light in vacuum, see @url{https://arxiv.org/abs/1710.05834, arXiv:1710.05834}.}) in a vacuum. This speed is postulated to be constant@footnote{In @emph{natural units}, speed is measured in units of the speed of light in vacuum.} and is almost always written as @mymath{c}. We can thus parametrize the change in distance on an expanding 2D surface as @dispmath{ds^2=c^2dt^2-a^2(t)ds_s^2 = c^2dt^2-a^2(t)(d\chi^2+r^2d\phi^2).} @node Extending distance concepts to 3D, Invoking astcosmiccal, Distance on a 2D curved space, CosmicCalculator @subsection Extending distance concepts to 3D The concepts of @ref{Distance on a 2D curved space} are here extended to a 3D space that @emph{might} be curved. We can start with the generic infinitesimal distance in a static 3D universe, but this time in spherical coordinates instead of polar coordinates. @mymath{\theta} is shown in @ref{sphereandplane}, but here we are 3D beings, positioned on @mymath{O} (the center of the sphere) and the point @mymath{O} is tangent to a 4D-sphere. In our 3D space, a generic infinitesimal displacement will correspond to the following distance in spherical coordinates: @dispmath{ds_s^2=dx^2+dy^2+dz^2=dr^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2).} Like the 2D creature before, we now have to assume an abstract dimension which we cannot visualize easily. Let's call the fourth dimension @mymath{w}, then the general change in coordinates in the @emph{full} four dimensional space will be: @dispmath{ds_s^2=dr^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2)+dw^2.} @noindent But we can only work on a 3D curved space, so following exactly the same steps and conventions as our 2D friend, we arrive at: @dispmath{ds_s^2={dr^2\over 1-Kr^2}+r^2(d\theta^2+\sin^2{\theta}d\phi^2).} @noindent In a non-static universe (with a scale factor a(t)), the distance can be written as: @dispmath{ds^2=c^2dt^2-a^2(t)[d\chi^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2)].} @c@dispmath{H(z){\equiv}\left(\dot{a}\over a\right)(z)=H_0E(z) } @c@dispmath{E(z)=[ \Omega_{\Lambda,0} + \Omega_{C,0}(1+z)^2 + @c\Omega_{m,0}(1+z)^3 + \Omega_{r,0}(1+z)^4 ]^{1/2}} @c Let's take @mymath{r} to be the radial coordinate of the emitting @c source, which emitted its light at redshift $z$. Then the comoving @c distance of this object would be: @c@dispmath{ \chi(r)={c\over H_0a_0}\int_0^z{dz'\over E(z')} } @c@noindent @c So the proper distance at the current time to that object is: @c @mymath{a_0\chi(r)}, therefore the angular diameter distance @c (@mymath{d_A}) and luminosity distance (@mymath{d_L}) can be written @c as: @c@dispmath{ d_A={a_0\chi(r)\over 1+z}, \quad d_L=a_0\chi(r)(1+z) } @node Invoking astcosmiccal, , Extending distance concepts to 3D, CosmicCalculator @subsection Invoking CosmicCalculator CosmicCalculator will calculate cosmological variables based on the input parameters. The executable name is @file{astcosmiccal} with the following general template @example $ astcosmiccal [OPTION...] ... @end example @noindent One line examples: @example ## Print basic cosmological properties at redshift 2.5: $ astcosmiccal -z2.5 ## Only print Comoving volume over 4pi stradian to z (Mpc^3): $ astcosmiccal --redshift=0.8 --volume ## Print luminosity distance, angular diameter distance and age ## of universe in one row at redshift 0.4 $ astcosmiccal -z0.4 -LAg ## Assume Lambda and matter density of 0.7 and 0.3 and print ## basic cosmological parameters for redshift 2.1: $ astcosmiccal -l0.7 -m0.3 -z2.1 @end example The input parameters (for example current matter density and etc) can be given as command-line options or in the configuration files, see @ref{Configuration files}. For a definition of the different parameters, please see the sections prior to this. If no redshift is given, CosmicCalculator will just print its input parameters and abort. For a full list of the input options, please see @ref{CosmicCalculator input options}. When only a redshift is given, CosmicCalculator will print all calculations (one per line) with some explanations before each. This can be good when you want a general feeling of the conditions at a specific redshift. Alternatively, if any specific calculations are requested, only the requested values will be calculated and printed with one character space between them. In this case, no description will be printed. See @ref{CosmicCalculator specific calculations} for the full list of these options along with some explanations how when/how they can be useful. @menu * CosmicCalculator input options:: Options to specify input conditions. * CosmicCalculator specific calculations:: Requesting specific outputs. @end menu @node CosmicCalculator input options, CosmicCalculator specific calculations, Invoking astcosmiccal, Invoking astcosmiccal @subsubsection CosmicCalculator input options The inputs to CosmicCalculator can be specified with the following options: @table @option @item -z FLT @itemx --redshift=FLT The redshift of interest. @item -H FLT @itemx --H0=FLT Current expansion rate (in km sec@mymath{^{-1}} Mpc@mymath{^{-1}}). @item -l FLT @itemx --olambda=FLT Cosmological constant density divided by the critical density in the current Universe (@mymath{\Omega_{\Lambda,0}}). @item -m FLT @itemx --omatter=FLT Matter (including massive neutrinos) density divided by the critical density in the current Universe (@mymath{\Omega_{m,0}}). @item -r FLT @itemx --oradiation=FLT Radiation density divided by the critical density in the current Universe (@mymath{\Omega_{r,0}}). @end table @node CosmicCalculator specific calculations, , CosmicCalculator input options, Invoking astcosmiccal @subsubsection CosmicCalculator specific calculations By default, when no specific calculations are requested, CosmicCalculator will print a complete set of all its calculators (one line for each calculation, see @ref{Invoking astcosmiccal}). The full list of calculations can be useful when you don't want any specific value, but just a general view. In other contexts (for example in a batch script or during a discussion), you know exactly what you want and don't want to be distracted by all the extra information. You can use any number of the options described below in any order. When any of these options are requested, CosmicCalculator's output will just be a single line with a single space between the (possibly) multiple values. In the example below, only the tangential distance along one arcsecond (in kpc), absolute magnitude conversion, and age of the universe at redshift 2 are printed (recall that you can merge short options together, see @ref{Options}). @example $ astcosmiccal -z2 -sag 8.585046 44.819248 3.289979 @end example Here is one example of using this feature in scripts: by adding the following two lines in a script to keep/use the comoving volume with varying redshifts: @example z=3.12 vol=$(astcosmiccal --redshift=$z --volume) @end example @cindex GNU Grep @noindent In a script, this operation might be necessary for a large number of objects (several of galaxies in a catalog for example). So the fact that all the other default calculations are ignored will also help you get to your result faster. If you are indeed dealing with many (for example thousands) of redshifts, using CosmicCalculator is not the best/fastest solution. Because it has to go through all the configuration files and preparations for each invocation. To get the best efficiency (least overhead), we recommend using Gnuastro's cosmology library (see @ref{Cosmology library}). CosmicCalculator also calls the library functions defined there for its calculations, so you get the same result with no overhead. Gnuastro also has libraries for easily reading tables into a C program, see @ref{Table input output}. Afterwards, you can easily build and run your C program for the particular processing with @ref{BuildProgram}. If you just want to inspect the value of a variable visually, the description (which comes with units) might be more useful. In such cases, the following command might be better. The other calculations will also be done, but they are so fast that you will not notice on modern computers (the time it takes your eye to focus on the result is usually longer than the processing: a fraction of a second). @example $ astcosmiccal --redshift=0.832 | grep volume @end example The full list of CosmicCalculator's specific calculations is present below. In case you have forgot the units, you can use the @option{--help} option which has the units along with a short description. @table @option @item -G @itemx --agenow The current age of the universe (given the input parameters) in Giga-years (Gyr). @item -C @itemx --criticaldensitynow The current critical density (given the input parameters) in grams per centimeter-cube (@mymath{g/cm^3}). @item -d @itemx --properdistance The proper distance (at current time) to object at the given redshift in Megaparsecs (Mpc). See @ref{Distance on a 2D curved space} for a description of the proper distance. @item -A @itemx --angulardimdist The angular diameter distance to object at given redshift in Megaparsecs (Mpc). @item -s @itemx --arcsectandist The tangential distance covered by 1 arcseconds at the given redshift in kiloparsecs (Kpc). This can be useful when trying to estimate the resolution or pixel scale of an instrument (usually in units of arcseconds) at a given redshift. @item -L @itemx --luminositydist The luminosity distance to object at given redshift in Megaparsecs (Mpc). @item -u @itemx --distancemodulus The distance modulus at given redshift. @item -a @itemx --absmagconv The conversion factor (addition) to absolute magnitude. Note that this is practically the distance modulus added with @mymath{-2.5\log{(1+z)}} for the the desired redshift based on the input parameters. Once the apparent magnitude and redshift of an object is known, this value may be added with the apparent magnitude to give the object's absolute magnitude. @item -g @itemx --age Age of the universe at given redshift in Giga-years (Gyr). @item -b @itemx --lookbacktime The look-back time to given redshift in Giga-years (Gyr). The look-back time at a given redshift is defined as the current age of the universe (@option{--agenow}) subtracted by the age of the universe at the given redshift. @item -c @itemx --criticaldensity The critical density at given redshift in grams per centimeter-cube (@mymath{g/cm^3}). @item -v @itemx --onlyvolume The comoving volume in Megaparsecs cube (Mpc@mymath{^3}) until the desired redshift based on the input parameters. @end table @node Library, Developing, High-level calculations, Top @chapter Library Each program in Gnuastro that was discussed in the prior chapters (or any program in general) is a collection of functions that is compiled into one executable file which can communicate directly with the outside world. The outside world in this context is the operating system. By communication, we mean that control is directly passed to a program from the operating system with a (possible) set of inputs and after it is finished, the program will pass control back to the operating system. For programs written in C and C++, the unique @code{main} function is in charge of this communication. Similar to a program, a library is also a collection of functions that is compiled into one executable file. However, unlike programs, libraries don't have a @code{main} function. Therefore they can't communicate directly with the outside world. This gives you the chance to write your own @code{main} function and call library functions from within it. After compiling your program into a binary executable, you just have to @emph{link} it to the library and you are ready to run (execute) your program. In this way, you can use Gnuastro at a much lower-level, and in combination with other libraries on your system, you can significantly boost your creativity. This chapter starts with a basic introduction to libraries and how you can use them in @ref{Review of library fundamentals}. The separate functions in the Gnuastro library are then introduced (classified by context) in @ref{Gnuastro library}. If you end up routinely using a fixed set of library functions, with a well-defined input and output, it will be much more beneficial if you define a program for the job. Therefore, in its @ref{Version controlled source}, Gnuastro comes with the @ref{The TEMPLATE program} to easily define your own programs(s). @menu * Review of library fundamentals:: Guide on libraries and linking. * BuildProgram:: Link and run source files with this library. * Gnuastro library:: Description of all library functions. * Library demo programs:: Demonstration for using libraries. @end menu @node Review of library fundamentals, BuildProgram, Library, Library @section Review of library fundamentals Gnuastro's libraries are written in the C programming language. In @ref{Why C}, we have thoroughly discussed the reasons behind this choice. C was actually created to write Unix, thus understanding the way C works can greatly help in effectively using programs and libraries in all Unix-like operating systems. Therefore, in the following subsections some important aspects of C, as it relates to libraries (and thus programs that depend on them) on Unix are reviewed. First we will discuss header files in @ref{Headers} and then go onto @ref{Linking}. This section finishes with @ref{Summary and example on libraries}. If you are already familiar with these concepts, please skip this section and go directly to @ref{Gnuastro library}. @cindex Modularity In theory, a full operating system (or any software) can be written as one function. Such a software would not need any headers or linking (that are discussed in the subsections below). However, writing that single function and maintaining it (adding new features, fixing bugs, documentation and etc) would be a programmer or scientist's worst nightmare! Furthermore, all the hard work that went into creating it cannot be reused in other software: every other programmer or scientist would have to re-invent the wheel. The ultimate purpose behind libraries (which come with headers and have to be linked) is to address this problem and increase modularity: ``the degree to which a system's components may be separated and recombined'' (from Wikipedia). The more modular the source code of a program or library, the easier maintaining it will be, and all the hard work that went into creating it can be reused for a wider range of problems. @menu * Headers:: Header files included in source. * Linking:: Linking the compiled source files into one. * Summary and example on libraries:: A summary and example on using libraries. @end menu @node Headers, Linking, Review of library fundamentals, Review of library fundamentals @subsection Headers @cindex Pre-Processor C source code is read from top to bottom in the source file, therefore program components (for example variables, data structures and functions) should all be @emph{defined} or @emph{declared} closer to the top of the source file: before they are used. @emph{Defining} something in C or C++ is jargon for providing its full details. @emph{Declaring} it, on the other-hand, is jargon for only providing the minimum information needed for the compiler to pass it temporarily and fill in the detailed definition later. For a function, the @emph{declaration} only contains the inputs and their data-types along with the output's type@footnote{Recall that in C, functions only have one output.}. The @emph{definition} adds to the declaration by including the exact details of what operations are done to the inputs to generate the output. As an example, take this simple summation function: @example double sum(double a, double b) @{ return a + b; @} @end example @noindent What you see above is the @emph{definition} of this function: it shows you (and the compiler) exactly what it does to the two @code{double} type inputs and that the output also has a @code{double} type. Note that a function's internal operations are rarely so simple and short, it can be arbitrarily long and complicated. This unreasonably short and simple function was chosen here for ease of reading. The declaration for this function is: @example double sum(double a, double b); @end example @noindent You can think of a function's declaration as a building's address in the city, and the definition as the building's complete blueprints. When the compiler confronts a call to a function during its processing, it doesn't need to know anything about how the inputs are processed to generate the output. Just as the postman doesn't need to know the inner structure of a building when delivering the mail. The declaration (address) is enough. Therefore by @emph{declaring} the functions once at the start of the source files, we don't have to worry about @emph{defining} them after they are used. Even for a simple real-world operation (not a simple summation like above!), you will soon need many functions (for example, some for reading/preparing the inputs, some for the processing, and some for preparing the output). Although it is technically possible, managing all the necessary functions in one file is not easy and is contrary to the modularity principle (see @ref{Review of library fundamentals}), for example the functions for preparing the input can be usable in your other projects with a different processing. Therefore, as we will see later (in @ref{Linking}), the functions don't necessarily need to be defined in the source file where they are used. As long as their definitions are ultimately linked to the final executable, everything will be fine. For now, it is just important to remember that the functions that are called within one source file must be declared within the source file (declarations are mandatory), but not necessarily defined there. In the spirit of modularity, it is common to define contextually similar functions in one source file. For example, in Gnuastro, functions that calculate the median, mean and other statistical functions are defined in @file{lib/statistics.c}, while functions that deal directly with FITS files are defined in @file{lib/fits.c}. Keeping the definition of similar functions in a separate file greatly helps their management and modularity, but this fact alone doesn't make things much easier for the caller's source code: recall that while definitions are optional, declarations are mandatory. So if this was all, the caller would have to manually copy and paste (@emph{include}) all the declarations from the various source files into the file they are working on now. To address this problem, programmers have adopted the header file convention: the header file of a source code contains all the declarations that a caller would need to be able to use any of its functions. For example, in Gnuastro, @file{lib/statistics.c} (file containing function definitions) comes with @file{lib/gnuastro/statistics.h} (only containing function declarations). The discussion above was mainly focused on functions, however, there are many more programming constructs such as pre-processor macros and data structures. Like functions, they also need to be known to the compiler when it confronts a call to them. So the header file also contains their definitions or declarations when they are necessary for the functions. @cindex Macro @cindex Structures @cindex Data structures @cindex Pre-processor macros Pre-processor macros (or macros for short) are replaced with their defined value by the pre-processor before compilation. Conventionally they are written only in capital letters to be easily recognized. It is just important to understand that the compiler doesn't see the macros, it sees their fixed values. So when a header specifies macros you can do your programming without worrying about the actual values. The standard C types (for example @code{int}, or @code{float}) are very low-level and basic. We can collect multiple C types into a @emph{structure} for a higher-level way to keep and pass-along data. See @ref{Generic data container} for some examples of macros and data structures. The contents in the header need to be @emph{include}d into the caller's source code with a special pre-processor command: @code{#include }. As the name suggests, the @emph{pre-processor} goes through the source code prior to the processor (or compiler). One of its jobs is to include, or merge, the contents of files that are mentioned with this directive in the source code. Therefore the compiler sees a single entity containing the contents of the main file and all the included files. This allows you to include many (sometimes thousands of) declarations into your code with only one line. Since the headers are also installed with the library into your system, you don't even need to keep a copy of them for each separate program, making things even more convenient. Try opening some of the @file{.c} files in Gnuastro's @file{lib/} directory with a text editor to check out the include directives at the start of the file (after the copyright notice). Let's take @file{lib/fits.c} as an example. You will notice that Gnuastro's header files (like @file{gnuastro/fits.h}) are indeed within this directory (the @file{fits.h} file is in the @file{gnuastro/} directory). You will notice that files like @file{stdio.h}, or @file{string.h} are not in this directory (or anywhere within Gnuastro). On most systems the basic C header files (like @file{stdio.h} and @file{string.h} mentioned above) are located in @file{/usr/include/}@footnote{The @file{include/} directory name is taken from the pre-processor's @code{#include} directive, which is also the motivation behind the `I' in the @option{-I} option to the pre-processor.}. Your compiler is configured to automatically search that directory (and possibly others), so you don't have to explicitly mention these directories. Go ahead, look into the @file{/usr/include} directory and find @file{stdio.h} for example. When the necessary header files are not in those specific libraries, the pre-processor can also search in places other than the current directory. You can specify those directories with this pre-processor option@footnote{Try running Gnuastro's @command{make} and find the directories given to the compiler with the @option{-I} option.}: @table @option @item -I DIR ``Add the directory @file{DIR} to the list of directories to be searched for header files. Directories named by '-I' are searched before the standard system include directories. If the directory @file{DIR} is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated...'' (quoted from the GNU Compiler Collection manual). Note that the space between @key{I} and the directory is optional and commonly not used. @end table If the pre-processor can't find the included files, it will abort with an error. In fact a common error when building programs that depend on a library is that the compiler doesn't not know where a library's header is (see @ref{Known issues}). So you have to manually tell the compiler where to look for the library's headers with the @option{-I} option. For a small software with one or two source files, this can be done manually (see @ref{Summary and example on libraries}). However, to enhance modularity, Gnuastro (and most other bin/libraries) contain many source files, so the compiler is invoked many times@footnote{Nearly every command you see being executed after running @command{make} is one call to the compiler.}. This makes manual addition or modification of this option practically impossible. @cindex GNU build system @cindex @command{CPPFLAGS} To solve this problem, in the GNU build system, there are conventional environment variables for the various kinds of compiler options (or flags). These environment variables are used in every call to the compiler (they can be empty). The environment variable used for the C Pre-Processor (or CPP) is @command{CPPFLAGS}. By giving @command{CPPFLAGS} a value once, you can be sure that each call to the compiler will be affected. See @ref{Known issues} for an example of how to set this variable at configure time. @cindex GNU build system As described in @ref{Installation directory}, you can select the top installation directory of a software using the GNU build system, when you @command{./configure} it. All the separate components will be put in their separate sub-directory under that, for example the programs, compiled libraries and library headers will go into @file{$prefix/bin} (replace @file{$prefix} with a directory), @file{$prefix/lib}, and @file{$prefix/include} respectively. For enhanced modularity, libraries that contain diverse collections of functions (like GSL, WCSLIB, and Gnuastro), put their header files in a sub-directory unique to themselves. For example all Gnuastro's header files are installed in @file{$prefix/include/gnuastro}. In your source code, you need to keep the library's sub-directory when including the headers from such libraries, for example @code{#include }@footnote{the top @file{$prefix/include} directory is usually known to the compiler}. Not all libraries need to follow this convention, for example CFITSIO only has one header (@file{fitsio.h}) which is directly installed in @file{$prefix/include}. @node Linking, Summary and example on libraries, Headers, Review of library fundamentals @subsection Linking @cindex GNU Libtool To enhance modularity, similar functions are defined in one source file (with a @file{.c} suffix, see @ref{Headers} for more). After running @command{make}, each human-readable, @file{.c} file is translated (or compiled) into a computer-readable ``object'' file (ending with @file{.o}). Note that object files are also created when building programs, they aren't particular to libraries. Try opening Gnuastro's @file{lib/} and @file{bin/progname/} directories after running @command{make} to see these object files@footnote{Gnuastro uses GNU Libtool for portable library creation. Libtool will also make a @file{.lo} file for each @file{.c} file when building libraries (@file{.lo} files are human-readable).}. Afterwards, the object files are @emph{linked} together to create an executable program or a library. @cindex GNU Binutils The object files contain the full definition of the functions in the respective @file{.c} file along with a list of any other function (or generally ``symbol'') that is referenced there. To get a list of those functions you can use the @command{nm} program which is part of GNU Binutils. For example from the top Gnuastro directory, run: @example $ nm bin/arithmetic/arithmetic.o @end example @noindent This will print a list of all the functions (more generally, `symbols') that were called within @file{bin/arithmetic/arithmetic.c} along with some further information (for example a @code{T} in the second column shows that this function is actually defined here, @code{U} says that it is undefined here). Try opening the @file{.c} file to check some of these functions for your self. Run @command{info nm} for more information. @cindex Static linking @cindex Linking: Static To recap, the @emph{compiler} created the separate object files mentioned above for each @file{.c} file. The @emph{linker} will then combine all the symbols of the various object files (and libraries) into one program or library. In the case of Arithmetic (a program) the contents of the object files in @file{bin/arithmetic/} are copied (and re-ordered) into one final executable file which we can run from the operating system. When the symbols (computer-readable function definitions in most cases) are copied into the output like this, we call the process @emph{static} linking. Let's have a closer look at static linking: we'll assume you have installed Gnuastro into the default @file{/usr/local/} directory (see @ref{Installation directory}). If you tried the @command{nm} command on one of Arithmetic's object files above, then with the command below you can confirm that all the functions that were defined in the object files (had a @code{T} in the second column) are also defined in the @file{astarithmetic} executable: @example $ nm /usr/local/bin/astarithmetic @end example @noindent But you will notice that there are still many undefined symbols (have a @code{U} in the second column). One class of such functions are Gnuastro's own library functions that start with `@code{gal_}': @example $ nm /usr/local/bin/astarithmetic | grep gal_ @end example @cindex GNU Libtool @cindex Shared library @cindex Library: shared @cindex Dynamic linking @cindex Linking: dynamic These undefined symbols (functions) will be linked to the executable every time you run arithmetic. Therefore they are known as dynamically @emph{linked} libraries @footnote{Do not confuse dynamically @emph{linked} libraries with dynamically @emph{loaded} libraries. The former (that is discussed here) are only loaded once at the program startup. However, the latter can be loaded anytime during the program's execution, they are also known as plugins.}. When the functions of a library need to be dynamically linked, the library is known as a shared library. As we saw above, static linking is done when the executable is being built. However, when a library is linked dynamically, its symbols are only checked with the available libraries at build time: they are not actually copied into the executable. Every time you run the program, the linker will be activated and will try to link the program to the installed library before it starts. If you want all the libraries to be statically linked to the executables, you have to tell Libtool (which Gnuastro uses for the linking) to disable shared libraries at configure time@footnote{Libtool is very common and is commonly used. Therefore, you can use this option to configure on most programs using the GNU build system if you want static linking.}: @example $ configure --disable-shared @end example @noindent Try configuring, statically building and installing Gnuastro with the command above. Then check the @code{gal_} symbols in the installed Arithmetic executable like before. You will see that they are actually copied this time (have a @code{T} in the second column). If the second column doesn't convince you, look at the executable file size with the following command: @example $ ls -lh /usr/local/bin/astarithmetic @end example @noindent It should be around 4.2 Megabytes with this static linking. If you configure and build Gnuastro again with shared libraries enabled (which is the default), you will notice that it is roughly 100 Kilobytes! This huge difference would have been very significant in the old days, but with the roughly Terabyte storage drives commonly in use today, it is negligible. Fortunately, output file size is not the only benefit of dynamic linking: since it links to the libraries at run-time (rather than build-time), you don't have to re-build a higher-level program or library when an update comes for one of the lower-level libraries it depends on. You just install the new low-level library and it will automatically be used next time in your higher-level tools. To be fair, this also creates a few complications@footnote{Both of these can be avoided by joining the mailing lists of the lower-level libraries and checking the changes in newer versions before installing them. Updates that result in such behaviors are generally heavily emphasized in the release notes.}: @itemize @item Reproducibility: Even though your high-level tool has the same version as before, with the updated library, you might not get the same results. @item Broken links: if some functions have been changed or removed in the updated library, then the linker will abort with an error at run-time. Therefore you need to re-build your higher-level program or library. @end itemize @cindex GNU C library To see a list of all the shared libraries that are needed for a program or a shared library to run, you can use the GNU C library's @command{ldd}@footnote{If your operating system is not using the GNU C library, you might need another tool.} program, for example: @example $ ldd /usr/local/bin/astarithmetic @end example Library file names start with a @file{lib} and end with suffix depending on their type as described below. In between these two is the name of the library, for example @file{libgnuastro.a} (Gnuastro's static library) and @file{libgsl.so.0.0.0} (GSL's shared library). @itemize @item A static library is known as an archive file and has a @file{.a} suffix. A static library is not an executable file. @item @cindex Shared library versioning @cindex Versioning: Shared library A shared library ends with a @file{.so.X.Y.Z} suffix and is executable. The three numbers in the prefix are the version of the shared library. Shared library versions are defined to allow multiple versions of a shared library simultaneously on a system and to help detect possible updates in the library and programs that depend on it by the linker. It is very important to mention that this version number is different from from the software version number (see @ref{Version numbering}), so do not confuse the two. See the ``Library interface versions'' chapter of GNU Libtool for more. For each shared library, we also have two symbolic links ending with @file{.so.X} and @file{.so}. They are automatically set by the installer, but you can change them (point them to another version of the library) when you have multiple versions on your system. @end itemize @cindex GNU Libtool For those libraries that use GNU Libtool (including Gnuastro and its dependencies), both static and dynamic libraries are built and installed in the @file{prefix/lib/} directory (see @ref{Installation directory}). In this way other programs can make which ever kind of link that they want. To link with a library, the linker needs to know where to find the library. You do that with two separate options to the linker (see @ref{Summary and example on libraries} for an example): @table @option @item -L DIR Will tell the linker to look into @file{DIR} for the libraries. For example @file{-L/usr/local/lib}, or @file{-L/home/yourname/.local/lib}. You can make multiple calls to this option, so the linker looks into several directories. Note that the space between @key{L} and the directory is optional and commonly not used. @item -lLIBRARY Specify the unique name of a library to be linked. As discussed above, library file names have fixed parts which must not be given to this option. So @option{-lgsl} will guide the linker to either look for @file{libgsl.a} or @file{libgsl.so} (depending on the type of linking it is suppose to do). You can link many libraries by repeated calls to this option. @strong{Very important: } The place of this option on the command line matters. This is often a source of confusion for beginners, so let's assume you have asked the linker to link with library A using this option. As soon as the linker confronts this option, it looks into the list of the undefined symbols it has found until that point and does a search in library A for any of those symbols. If any pending undefined symbol is found in library A, it is used. After the search in undefined symbols is complete, the contents of library A are completely discarded from the linker's memory. Therefore, if a later object file or library uses an unlinked symbol in library A, the linker will abort after it has finished its search in all the input libraries or object files. As an example, Gnuastro's @code{gal_array_dlog10_array} function depends on the @code{log10} function of the C Math library (specified with @option{-lm}). So the proper way to link something that uses this function is @option{-lgnuastro -lm}. If instead, you give: @option{-lm -lgnuastro} the linker will complain and abort. @end table @node Summary and example on libraries, , Linking, Review of library fundamentals @subsection Summary and example on libraries After the mostly abstract discussions of @ref{Headers} and @ref{Linking}, we'll give a small tutorial here. But before that, let's recall the general steps of how your source code is prepared, compiled and linked to the libraries it depends on so you can run it: @enumerate @item The @strong{pre-processor} includes the header (@file{.h}) files into the function definition (@file{.c}) files, expands pre-processor macros and generally prepares the human-readable source for compilation (reviewed in @ref{Headers}). @item The @strong{compiler} will translate (compile) the human-readable contents of each source (merged @file{.c} and the @file{.h} files, or generally the output of the pre-processor) into the computer-readable code of @file{.o} files. @item The @strong{linker} will link the called function definitions from various compiled files to create one unified object. When the unified product has a @code{main} function, this function is the product's only entry point, enabling the operating system or user to directly interact with it, so the product is a program. When the product doesn't have a @code{main} function, the linker's product is a library and its exported functions can be linked to other executables (it has many entry points). @end enumerate @cindex GCC @cindex GNU Compiler Collection The GNU Compiler Collection (or GCC for short) will do all three steps. So as a first example, from Gnuastro's source, go to @file{tests/lib/}. This directory contains the library tests, you can use these as some simple tutorials. For this demonstration, we will compile and run the @file{arraymanip.c}. This small program will call Gnuastro library for some simple operations on an array (open it and have a look). To compile this program, run this command inside the directory containing it. @example $ gcc arraymanip.c -lgnuastro -lm -o arraymanip @end example @noindent The two @option{-lgnuastro} and @option{-lm} options (in this order) tell GCC to first link with the Gnuastro library and then with C's math library. The @option{-o} option is used to specify the name of the output executable, without it the output file name will be @file{a.out} (on most OSs), independent of your input file name(s). If your top Gnuastro installation directory (let's call it @file{$prefix}, see @ref{Installation directory}) is not recognized by GCC, you will get pre-processor errors for unknown header files. Once you fix it, you will get linker errors for undefined functions. To fix both, you should run GCC as follows: additionally telling it which directories it can find Gnuastro's headers and compiled library (see @ref{Headers} and @ref{Linking}): @example $ gcc -I$prefix/include -L$prefix/lib arraymanip.c -lgnuastro -lm \ -o arraymanip @end example @noindent This single command has done all the pre-processor, compilation and linker operations. Therefore no intermediate files (object files in particular) were created, only a single output executable was created. You are now ready to run the program with: @example $ ./arraymanip @end example The Gnuastro functions called by this program only needed to be linked with the C math library. But if your program needs WCS coordinate transformations, needs to read a FITS file, needs special math operations (which include its linear algebra operations), or you want it to run on multiple CPU threads, you also need to add these libraries in the call to GCC: @option{-lgnuastro -lwcs -lcfitsio -lgsl -lgslcblas -pthread -lm}. In @ref{Gnuastro library}, where each function is documented, it is mentioned which libraries (if any) must also be linked when you call a function. If you feel all these linkings can be confusing, please consider Gnuastro's @ref{BuildProgram} program. @node BuildProgram, Gnuastro library, Review of library fundamentals, Library @section BuildProgram The number and order of libraries that are necessary for linking a program with Gnuastro library might be too confusing when you need to compile a small program for one particular job (with one source file). BuildProgram will use the information gathered during configuring Gnuastro and link with all the appropriate libraries on your system. This will allow you to easily compile, link and run programs that use Gnuastro's library with one simple command and not worry about which libraries to link to, or the linking order. @cindex GNU Libtool BuildProgram uses GNU Libtool to find the necessary libraries to link against (GNU Libtool is the same program that builds all of Gnuastro's libraries and programs when you run @code{make}). So in the future, if Gnuastro's prerequisite libraries change or other libraries are added, you don't have to worry, you can just run BuildProgram and internal linking will be done correctly. @cartouche @noindent @strong{BuildProgram requires GNU Libtool:} BuildProgram depends on GNU Libtool, other implementations don't have some necessary features. If GNU Libtool isn't available at Gnuastro's configure time, you will get a notice at the end of the configuration step and BuildProgram will not be built or installed. Please see @ref{Optional dependencies} for more information. @end cartouche @menu * Invoking astbuildprog:: Options and examples for using this program. @end menu @node Invoking astbuildprog, , BuildProgram, BuildProgram @subsection Invoking BuildProgram BuildProgram will compile and link a C source program with Gnuastro's library and all its dependencies, greatly facilitating the compilation and running of small programs that use Gnuastro's library. The executable name is @file{astbuildprog} with the following general template: @example $ astbuildprog [OPTION...] C_SOURCE_FILE @end example @noindent One line examples: @example ## Compile, link and run `myprogram.c': $ astbuildprog myprogram.c ## Similar to previous, but with optimization and compiler warnings: $ astbuildprog -Wall -O2 myprogram.c ## Compile and link `myprogram.c', then run it with `image.fits' ## as its argument: $ astbuildprog myprogram.c image.fits ## Also look in other directories for headers and linking: $ astbuildprog -Lother -Iother/dir myprogram.c ## Just build (compile and link) `myprogram.c', don't run it: $ astbuildprog --onlybuild myprogram.c @end example If BuildProgram is to run, it needs a C programming language source file as input. By default it will compile and link the program to build the a final executable file and run it. The built executable name can be set with the optional @option{--output} option. When no output name is set, BuildProgram will use Gnuastro's @ref{Automatic output}, and remove the suffix of the input and use that as the output name. For the full list of options that BuildProgram shares with other Gnuastro programs, see @ref{Common options}. You may also use Gnuastro's @ref{Configuration files} to specify other libraries/headers to use for special directories and not have to type them in every time. The first argument is considered to be the C source file that must be compiled and linked. Any other arguments (non-option tokens on the command-line) will be passed onto the program when BuildProgram wants to run it. Recall that by default BuildProgram will run the program after building it. This behavior can be disabled with the @code{--onlybuild} option. @cindex GNU Make When the @option{--quiet} option (see @ref{Operating mode options}) is not called, BuildPrograms will print the compilation and running commands. Once your program grows and you break it up into multiple files (which are much more easily managed with Make), you can use the linking flags of the non-quiet output in your @code{Makefile}. @table @option @item -I STR @itemx --includedir=STR @cindex GNU CPP @cindex C Pre-Processor Directory to search for files that you @code{#include} in your C program. Note that headers relating to Gnuastro and its dependencies don't need this option. This is only necessary if you want to use other headers. It may be called multiple times and order matters. This directory will be searched before those of Gnuastro's build and also the system search directories. See @ref{Headers} for a thorough introduction. From the GNU C Pre-Processor manual: ``Add the directory @code{STR} to the list of directories to be searched for header files. Directories named by @option{-I} are searched before the standard system include directories. If the directory @code{STR} is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated''. @item -L STR @itemx --linkdir=STR @cindex GNU Libtool Directory to search for compiled libraries to link the program with. Note that all the directories that Gnuastro was built with will already be used by BuildProgram (GNU Libtool). This option is only necessary if your libraries are in other directories. Multiple calls to this option are possible and order matters. This directory will be searched before those of Gnuastro's build and also the system search directories. See @ref{Linking} for a thorough introduction. @item -l STR @itemx --linklib=STR Library to link with your program. Note that all the libraries that Gnuastro was built with will already be linked by BuildProgram (GNU Libtool). This option is only necessary if you want to link with other directories. Multiple calls to this option are possible and order matters. This library will be linked before Gnuastro's library or its dependencies. See @ref{Linking} for a thorough introduction. @item -O INT/STR @itemx --optimize=INT/STR @cindex Optimization @cindex GNU Compiler Collection Compiler optimization level: 0 (for no optimization, good debugging), 1, 2, 3 (for the highest level of optimizations). From the GNU Compiler Collection (GCC) manual: ``Without any optimization option, the compiler's goal is to reduce the cost of compilation and to make debugging produce the expected results. Statements are independent: if you stop the program with a break point between statements, you can then assign a new value to any variable or change the program counter to any other statement in the function and get exactly the results you expect from the source code. Turning on optimization flags makes the compiler attempt to improve the performance and/or code size at the expense of compilation time and possibly the ability to debug the program.'' Please see your compiler's manual for the full list of acceptable values to this option. @item -g @itemx --debug @cindex Debug Emit extra information in the compiled binary for use by a debugger. When calling this option, it is best to explicitly disable optimization with @option{-O0}. To combine both options you can run @option{-gO0} (see @ref{Options} for how short options can be merged into one). @item -W STR @itemx --warning=STR Print compiler warnings on command-line during compilation. ``Warnings are diagnostic messages that report constructions that are not inherently erroneous but that are risky or suggest there may have been an error.'' (from the GCC manual). It is always recommended to compile your programs with warnings enabled. All compiler warning options that start with @option{W} are usable by this option in BuildProgram also, see your compiler's manual for the full list. Some of the most common values to this option are: @option{pedantic} (Warnings related to standard C) and @option{all} (all issues the compiler confronts). @item --tag=STR The language configuration information. Libtool can build objects and libraries in many languages. In many cases, it can identify the language automatically, but when it doesn't you can use this option to explicitly notify Libtool of the language. The acceptable values are: @code{CC} for C, @code{CXX} for C++, @code{GCJ} for Java, @code{F77} for Fortran 77, @code{FC} for Fortran, @code{GO} for Go and @code{RC} for Windows Resource. Note that the Gnuastro library is not yet fully compatible with all these languages. @item -b @itemx --onlybuild Only build the program, don't run it. By default, the built program is immediately run afterwards. @item --deletecompiled Delete the compiled binary file after running it. This option is only relevant when the compiled program is run after being built. In other words, it is only relevant when @option{--onlybuild} is not called. It can be useful when you are busy testing a program or just want a fast result and the actual binary/compiled file is not of later use. @item -a STR @itemx --la=STR Use the given @file{.la} file (Libtool control file) instead of the one that was produced from Gnuastro's configuration results. The Libtool control file keeps all the necessary information for building and linking a program with a library built by Libtool. The default @file{prefix/lib/libgnuastro.la} keeps all the information necessary to build a program using the Gnuastro library gathered during configure time (see @ref{Installation directory} for prefix). This option is useful when you prefer to use another Libtool control file. @end table @node Gnuastro library, Library demo programs, BuildProgram, Library @section Gnuastro library Gnuastro library's programming constructs (function declarations, macros, data structures, or global variables) are classified by context into multiple header files (see @ref{Headers})@footnote{Within Gnuastro's source, all installed @file{.h} files in @file{lib/gnuastro/} are accompanied by a @file{.c} file in @file{/lib/}.}. In this section, the functions in each header will be discussed under a separate sub-section, which includes the name of the header. Assuming a function declaration is in @file{headername.h}, you can include its declaration in your source code with: @example # include @end example @noindent The names of all constructs in @file{headername.h} are prefixed with @code{gal_headername_} (or @code{GAL_HEADERNAME_} for macros). The @code{gal_} prefix stands for @emph{G}NU @emph{A}stronomy @emph{L}ibrary. Gnuastro library functions are compiled into a single file which can be linked on the command-line with the @option{-lgnuastro} option, (see @ref{Linking} and @ref{Summary and example on libraries} for an introduction on linking and example). Gnuastro library is a high-level library which depends on lower level libraries for some operations (see @ref{Dependencies}). Therefore if at least one of Gnuastro's functions in your program use functions from the dependencies, you will also need to link those dependencies after linking with Gnuastro. The outside libraries that need to be linked for such functions are mentioned following the function name. See @ref{BuildProgram} for a small Gnuastro program that will take care of the libraries to link against and lets you focus on your exciting science. @cartouche @noindent @strong{Libraries are still under heavy development: } Gnuastro was initially created to be a collection of command-line programs. However, as the programs and their the shared functions grew, internal (not installed) libraries were added. Since the 0.2 release, the libraries are install-able. Hence the libraries are currently under heavy development and will significantly evolve between releases and will become more mature and stable in due time. It will stabilize with the removal of this notice. Check the @file{NEWS} file for interface changes. If you use the Info version of this manual (see @ref{Info}), you don't have to worry: the documentation will correspond to your installed version. @end cartouche @menu * Configuration information:: General information about library config. * Multithreaded programming:: Tools for easy multi-threaded operations. * Library data types:: Definitions and functions for types. * Library blank values:: Blank values and functions to deal with them. * Library data container:: General data container in Gnuastro. * Dimensions:: Dealing with coordinates and dimensions. * Linked lists:: Various types of linked lists. * FITS files:: Working with FITS data. * World Coordinate System:: Dealing with the world coordinate system. * Text files:: Functions to work on Text files. * Table input output:: Reading and writing table columns. * Arithmetic on datasets:: Arithmetic operations on a dataset. * Tessellation library:: Functions for working on tiles. * Bounding box:: Finding the bounding box. * Polygons:: Working with the vertices of a polygon. * Qsort functions:: Helper functions for Qsort. * Permutations:: Re-order (or permute) the values in a dataset. * Matching:: Matching catalogs based on position. * Statistical operations:: Functions for basic statistics. * Binary datasets:: Datasets that can only have values of 0 or 1. * Convolution functions:: Library functions to do convolution. * Interpolation:: Interpolate (over blank values possibly). * Git wrappers:: Wrappers for functions in libgit2. * Cosmology library:: Cosmological calculations. @end menu @node Configuration information, Multithreaded programming, Gnuastro library, Gnuastro library @subsection Configuration information (@file{config.h}) The @file{gnuastro/config.h} header contains information about the full Gnuastro installation on your system. Gnuastro developers should note that this is the only header that is not available within Gnuastro, it is only available to a Gnuastro library user @emph{after} installation. Within Gnuastro, @file{config.h} (which is included in every Gnuastro @file{.c} file, see @ref{Coding conventions}) has more than enough information about the overall Gnuastro installation. @deffn Macro GAL_CONFIG_VERSION This macro can be used as a string literal@footnote{@url{https://en.wikipedia.org/wiki/String_literal}} containing the version of Gnuastro that is being used. See @ref{Version numbering} for the version formats. For example: @example printf("Gnuastro version: %s\n", GAL_CONFIG_VERSION); @end example @noindent or @example char *gnuastro_version=GAL_CONFIG_VERSION; @end example @end deffn @deffn Macro GAL_CONFIG_HAVE_LIBGIT2 Libgit2 is an optional dependency of Gnuastro (see @ref{Optional dependencies}). When it is installed and detected at configure time, this macro will have a value of @code{1} (one). Otherwise, it will have a value of @code{0} (zero). Gnuastro also comes with some wrappers to make it easier to use libgit2 (see @ref{Git wrappers}). @end deffn @deffn Macro GAL_CONFIG_HAVE_WCSLIB_VERSION WCSLIB is the reference library for world coordinate system transformation (see @ref{WCSLIB} and @ref{World Coordinate System}). However, only more recent versions of WCSLIB also provide its version number. If the WCSLIB that is installed on the system provides its version (through the possibly existing @code{wcslib_version} function), this macro will have a value of one, otherwise it will have a value of zero. @end deffn @deffn Macro GAL_CONFIG_HAVE_PTHREAD_BARRIER The POSIX threads standard define barriers as an optional requirement. Therefore, some operating systems choose to not include it. As one of the @command{./configure} step checks, Gnuastro we check if your system has this POSIX thread barriers. If so, this macro will have a value of @code{1}, otherwise it will have a value of @code{0}. see @ref{Implementation of pthread_barrier} for more. @end deffn @cindex 32-bit @cindex 64-bit @cindex bit-32 @cindex bit-64 @deffn Macro GAL_CONFIG_SIZEOF_LONG @deffnx Macro GAL_CONFIG_SIZEOF_SIZE_T The size of (number of bytes in) the system's @code{long} and @code{size_t} types. Their values are commonly either 4 or 8 for 32-bit and 64-bit systems. You can also get this value with the expression `@code{sizeof size_t}' for example without having to include this header. @end deffn @node Multithreaded programming, Library data types, Configuration information, Gnuastro library @subsection Multithreaded programming (@file{threads.h}) @cindex Multithreaded programming In recent years, newer CPUs don't have significantly higher frequencies any more. However, CPUs are being manufactured with more cores, enabling more than one operation (thread) at each instant. This can be very useful to speed up many aspects of processing and in particular image processing. Most of the programs in Gnuastro utilize multi-threaded programming for the CPU intensive processing steps. This can potentially lead to a significant decrease in the running time of a program, see @ref{A note on threads}. In terms of reading the code, you don't need to know anything about multi-threaded programming. You can simply follow the case where only one thread is to be used. In these cases, threads are not used and can be completely ignored. @cindex POSIX threads library @cindex Lawrence Livermore National Laboratory When the C language was defined (the K&R's book was written), using threads was not common, so C's threading capabilities aren't introduced there. Gnuastro uses POSIX threads for multi-threaded programming, defined in the @file{pthread.h} system wide header. There are various resources for learning to use POSIX threads. An excellent @url{https://computing.llnl.gov/tutorials/pthreads/, tutorial} is provided by the Lawrence Livermore National Laboratory, with abundant figures to better understand the concepts, it is a very good start. The book `Advanced programming in the Unix environment'@footnote{Don't let the title scare you! The two chapters on Multi-threaded programming are very self-sufficient and don't need any more knowledge than K&R.}, by Richard Stevens and Stephen Rago, Addison-Wesley, 2013 (Third edition) also has two chapters explaining the POSIX thread constructs which can be very helpful. @cindex OpenMP An alternative to POSIX threads was OpenMP, but POSIX threads are low level, allowing much more control, while being easier to understand, see @ref{Why C}. All the situations where threads are used in Gnuastro currently are completely independent with no need of coordination between the threads. Such problems are known as ``embarrassingly parallel'' problems. They are some of the simplest problems to solve with threads and are also the ones that benefit most from them, see the LLNL introduction@footnote{@url{https://computing.llnl.gov/tutorials/parallel_comp/}}. One very useful POSIX thread concept is @code{pthread_barrier}. Unfortunately, it is only an optional feature in the POSIX standard, so some operating systems don't include it. Therefore in @ref{Implementation of pthread_barrier}, we introduce our own implementation. This is a rather technical section only necessary for more technical readers and you can safely ignore it. Following that, we describe the helper functions in this header that can greatly simplify writing a multi-threaded program, see @ref{Gnuastro's thread related functions} for more. @menu * Implementation of pthread_barrier:: Some systems don't have pthread_barrier * Gnuastro's thread related functions:: Functions for managing threads. @end menu @node Implementation of pthread_barrier, Gnuastro's thread related functions, Multithreaded programming, Multithreaded programming @subsubsection Implementation of @code{pthread_barrier} @cindex POSIX threads @cindex pthread_barrier One optional feature of the POSIX Threads standard is the @code{pthread_barrier} concept. It is a very useful high-level construct that allows for independent threads to ``wait'' behind a ``barrier'' for the rest after they finish. Barriers can thus greatly simplify the code in a multi-threaded program, so they are heavily used in Gnuastro. However, since its an optional feature in the POSIX standard, some operating systems don't include it. So to make Gnuastro portable, we have written our own implementation of those @code{pthread_barrier} functions. At @command{./configure} time, Gnuastro will check if @code{pthread_barrier} constructs are available on your system or not. If @code{pthread_barrier} is not available, our internal implementation will be compiled into the Gnuastro library and the definitions and declarations below will be usable in your code with @code{#include }. @deffn Type pthread_barrierattr_t Type to specify the attributes of a POSIX threads barrier. @end deffn @deffn Type pthread_barrier_t Structure defining the POSIX threads barrier. @end deffn @deftypefun int pthread_barrier_init (pthread_barrier_t @code{*b}, pthread_barrierattr_t @code{*attr}, unsigned int @code{limit}) Initialize the barrier @code{b}, with the attributes @code{attr} and total @code{limit} (a number of) threads that must wait behind it. This function must be called before spinning off threads. @end deftypefun @deftypefun int pthread_barrier_wait (pthread_barrier_t @code{*b}) This function is called within each thread, just before it is ready to return. Once a thread's function hits this, it will ``wait'' until all the other functions are also finished. @end deftypefun @deftypefun int pthread_barrier_destroy (pthread_barrier_t @code{*b}) Destroy all the information in the barrier structure. This should be called by the function that spinned-off the threads after all the threads have finished. @cartouche @noindent @strong{Destroy a barrier before re-using it:} It is very important to destroy the barrier before (possibly) reusing it. This destroy function not only destroys the internal structures, it also waits (in 1 microsecond intervals, so you will not notice!) until all the threads don't need the barrier structure any more. If you immediately start spinning off new threads with a not-destroyed barrier, then the internal structure of the remaining threads will get mixed with the new ones and you will get very strange and apparently random errors that are extremely hard to debug. @end cartouche @end deftypefun @node Gnuastro's thread related functions, , Implementation of pthread_barrier, Multithreaded programming @subsubsection Gnuastro's thread related functions @cindex POSIX Threads The POSIX Threads functions offered in the C library are very low-level and offer a great range of control over the properties of the threads. So if you are interested in customizing your tools for complicated thread applications, it is strongly encouraged to get a nice familiarity with them. Some resources were introduced in @ref{Multithreaded programming}. However, in many cases used in astronomical data analysis, you don't need communication between threads and each target operation can be done independently. Since such operations are very common, Gnuastro provides the tools below to facilitate the creation and management of jobs without any particular knowledge of POSIX Threads for such operations. The most interesting high-level functions of this section are the @code{gal_threads_number} and @code{gal_threads_spin_off} that identify the number of threads on the system and spin-off threads. You can see a demonstration of using these functions in @ref{Library demo - multi-threaded operation}. @deftp {C @code{struct}} gal_threads_params Structure keeping the parameters of each thread. When each thread is created, a pointer to this structure is passed to it. The @code{params} element can be the pointer to a structure defined by the user which contains all the necessary parameters to pass onto the worker function. The rest of the elements within this structure are set internally by @code{gal_threads_spin_off} and are relevant to the worker function. @example struct gal_threads_params @{ size_t id; /* Id of this thread. */ void *params; /* User-identified pointer. */ size_t *indexs; /* Target indexs given to this thread. */ pthread_barrier_t *b; /* Barrier for all threads. */ @}; @end example @end deftp @deftypefun size_t gal_threads_number () Return the number of threads that the operating system has available for your program. This number is usually fixed for a single machine and doesn't change. So this function is useful when you want to run your program on different machines (with different CPUs). @end deftypefun @deftypefun void gal_threads_spin_off (void @code{*(*worker)(void *)}, void @code{*caller_params}, size_t @code{numactions}, size_t @code{numthreads}) Distribute @code{numactions} jobs between @code{numthreads} threads and spin-off each thread by calling the @code{worker} function. The @code{caller_params} pointer will also be passed to @code{worker} as part of the @code{gal_threads_params} structure. For a fully working example of this function, please see @ref{Library demo - multi-threaded operation}. @end deftypefun @deftypefun void gal_threads_attr_barrier_init (pthread_attr_t @code{*attr}, pthread_barrier_t @code{*b}, size_t @code{limit}) @cindex Detached threads This is a low-level function in case you don't want to use @code{gal_threads_spin_off}. It will initialize the general thread attribute @code{attr} and the barrier @code{b} with @code{limit} threads to wait behind the barrier. For maximum efficiency, the threads initialized with this function will be detached. Therefore no communication is possible between these threads and in particular @code{pthread_join} won't work on these threads. You have to use the barrier constructs to wait for all threads to finish. @end deftypefun @deftypefun void gal_threads_dist_in_threads (size_t @code{numactions}, size_t @code{numthreads}, size_t @code{**outthrds}, size_t @code{*outthrdcols}) This is a low-level function in case you don't want to use @code{gal_threads_spin_off}. Identify the ``index''es (starting from 0) of the actions to be done on each thread in the @code{outthrds} array. @code{outthrds} is treated as a 2D array with @code{numthreads} rows and @code{outthrdcols} columns. The indexs in each row, identify the actions that should be done by one thread. Please see the explanation below to understand the purpose of this operation. Let's assume you have @mymath{A} actions (where there is only one function and the input values differ for each action) and @mymath{T} threads available to the system with @mymath{A>T} (common values for these two would be @mymath{A>1000} and @mymath{T<10}). Spinning off a thread is not a cheap job and requires a significant number of CPU cycles. Therefore, creating @mymath{A} threads is not the best way to address such a problem. The most efficient way to manage the actions is such that only @mymath{T} threads are created, and each thread works on a list of actions identified for it in series (one after the other). This way your CPU will get all the actions done with minimal overhead. The purpose of this function is to do what we explained above: each row in the @code{outthrds} array contains the indexs of actions which must be done by one thread. @code{outthrds} contains @code{outthrdcols} columns. In using @code{outthrds}, you don't have to know the number of columns. The @code{GAL_BLANK_SIZE_T} macro has a role very similar to a string's @code{\0}: every row finishes with this macro, so can easily stop parsing the indexes in the row when you confront it. Please see the example program in @file{tests/lib/multithread.c} for a demonstration. @end deftypefun @node Library data types, Library blank values, Multithreaded programming, Gnuastro library @subsection Library data types (@file{type.h}) Data in astronomy can have many types, numeric (numbers) and strings (names, identifiers). The former can also be divided into integers and floats, see @ref{Numeric data types} for a thorough discussion of the different numeric data types and which one is useful for different contexts. To deal with the very large diversity of types that are available (and used in different contexts), in Gnuastro each type is identified with global integer variable with a fixed name, this variable is then passed onto functions that can work on any type or is stored in Gnuastro's @ref{Generic data container} as one piece of meta-data. The actual values within these integer constants is irrelevant and you should never rely on them. When you need to check, explicitly use the named variable in the table below. If you want to check with more than one type, you can use C's @code{switch} statement. Since Gnuastro heavily deals with file input-output, the types it defines are fixed width types, these types are portable to all systems and are defined in the standard C header @file{stdint.h}. You don't need to include this header, it is included by any Gnuastro header that deals with the different types. However, the most commonly used types in a C (or C++) program (for example @code{int} or @code{long} are not defined by their exact width (storage), but by their minimum storage. So for example on some systems, @code{int} may be 2 bytes (16-bits, the minimum required by the standard) and on others it may be 4 bytes (32-bits, common in modern systems). With every type, a unique ``blank'' value (or place holder showing the absence of data) can be defined. Please see @ref{Library blank values} for constants that Gnuastro recognizes as a blank value for each type. See @ref{Numeric data types} for more explanation on the limits and particular aspects of each type. @deffn {Global integer} GAL_TYPE_INVALID This is just a place holder to specifically mark that no type has been set. @end deffn @deffn {Global integer} GAL_TYPE_BIT Identifier for a bit-stream. Currently no program in Gnuastro works directly on bits, but features will be added in the future. @end deffn @deffn {Global integer} GAL_TYPE_UINT8 Identifier for an unsigned, 8-bit integer type: @code{uint8_t} (from @file{stdint.h}), or an @code{unsigned char} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_INT8 Identifier for a signed, 8-bit integer type: @code{int8_t} (from @file{stdint.h}), or an @code{signed char} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_UINT16 Identifier for an unsigned, 16-bit integer type: @code{uint16_t} (from @file{stdint.h}), or an @code{unsigned short} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_INT16 Identifier for a signed, 16-bit integer type: @code{int16_t} (from @file{stdint.h}), or a @code{short} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_UINT32 Identifier for an unsigned, 32-bit integer type: @code{uint32_t} (from @file{stdint.h}), or an @code{unsigned int} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_INT32 Identifier for a signed, 32-bit integer type: @code{int32_t} (from @file{stdint.h}), or an @code{int} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_UINT64 Identifier for an unsigned, 64-bit integer type: @code{uint64_t} (from @file{stdint.h}), or an @code{unsigned long} in most modern 64-bit systems. @end deffn @deffn {Global integer} GAL_TYPE_INT64 Identifier for a signed, 64-bit integer type: @code{int64_t} (from @file{stdint.h}), or an @code{long} in most modern 64-bit systems. @end deffn @deffn {Global integer} GAL_TYPE_SIZE_T Identifier for a @code{size_t} type. This is just an alias to @code{uint32}, or @code{uint64} types for 32-bit, or 64-bit systems respectively. @end deffn @deffn {Global integer} GAL_TYPE_LONG Identifier for a @code{long} type. This is just an alias to @code{int32}, or @code{int64} types for 32-bit, or 64-bit systems respectively. @end deffn @deffn {Global integer} GAL_TYPE_FLOAT32 Identifier for a 32-bit single precision floating point type or @code{float} in C. @end deffn @deffn {Global integer} GAL_TYPE_FLOAT64 Identifier for a 64-bit double precision floating point type or @code{double} in C. @end deffn @deffn {Global integer} GAL_TYPE_COMPLEX32 Identifier for a complex number composed of two @code{float} types. Note that the complex type is not yet fully implemented in all Gnuastro's programs. @end deffn @deffn {Global integer} GAL_TYPE_COMPLEX64 Identifier for a complex number composed of two @code{double} types. Note that the complex type is not yet fully implemented in all Gnuastro's programs. @end deffn @deffn {Global integer} GAL_TYPE_STRING Identifier for a string of characters (@code{char *}). @end deffn @deffn {Global integer} GAL_TYPE_STRLL Identifier for a linked list of string of characters (@code{gal_list_str_t}, see @ref{List of strings}). @end deffn @noindent The functions below are defined to make working with the integer constants above easier. In the functions below, the constants above can be used for the @code{type} input argument. @deftypefun size_t gal_type_sizeof (uint8_t @code{type}) Return the number of bytes occupied by @code{type}. Internally, this function uses C's @code{sizeof} operator to measure the size of each type. @end deftypefun @deftypefun {char *} gal_type_name (uint8_t @code{type}, int @code{long_name}) Return a string that contains the name of @code{type}. This can be used in messages to the users when your function/program accepts many types. It can return both short and long formats of the type names (for example @code{f32} and @code{float32}). If @code{long_name} is non-zero, the long format will be returned, otherwise the short name will be returned. The output string is statically allocated, so it should not be freed. This function is the inverse of the @code{gal_type_from_name} function. For the full list of names/strings that this function will return, see @ref{Numeric data types}. @end deftypefun @deftypefun uint8_t gal_type_from_name (char @code{*str}) Return the Gnuastro integer constant that corresponds to the string @code{str}. This function is the inverse of the @code{gal_type_name} function and accepts both the short and long formats of each type. For the full list of names/strings that this function will return, see @ref{Numeric data types}. @end deftypefun @deftypefun void gal_type_min (uint8_t @code{type}, void @code{*in}) Put the minimum possible value of @code{type} in the space pointed to by @code{in}. Since the value can have any type, this function doesn't return anything, it assumes the space for the given type is available to @code{in} and writes the value there. Here is one example @example int32_t min; gal_type_min(GAL_TYPE_INT32, &min); @end example @noindent Note: Do not use the minimum value for a blank value of a general (initially unknown) type, please use the constants/functions provided in @ref{Library blank values} for the definition and usage of blank values. @end deftypefun @deftypefun void gal_type_max (uint8_t @code{type}, void @code{*in}) Put the maximum possible value of @code{type} in the space pointed to by @code{in}. Since the value can have any type, this function doesn't return anything, it assumes the space for the given type is available to @code{in} and writes the value there. Here is one example @example uint16_t max; gal_type_max(GAL_TYPE_INT16, &max); @end example @noindent Note: Do not use the maximum value for a blank value of a general (initially unknown) type, please use the constants/functions provided in @ref{Library blank values} for the definition and usage of blank values. @end deftypefun @deftypefun int gal_type_is_list (uint8_t @code{type}) Return 1 if the type is a linked list and zero otherwise. @end deftypefun @deftypefun int gal_type_out (int @code{first_type}, int @code{second_type}) Return the larger of the two given types which can be used for the type of the output of an operation involving the two input types. @end deftypefun @deftypefun {char *} gal_type_bit_string (void @code{*in}, size_t @code{size}) Return the bit-string in the @code{size} bytes that @code{in} points to. The string is dynamically allocated and must be freed afterwards. You can use it to inspect the bits within one region of memory. Here is one short example: @example int32_t a=2017; char *bitstr=gal_type_bit_string(&a, 4); printf("%d: %s (%X)\n", a, bitstr, a); free(bitstr); @end example @noindent which will produce: @example 2017: 11100001000001110000000000000000 (7E1) @end example As the example above shows, the bit-string is not the most efficient way to inspect bits. If you are familiar with hexadecimal notation, it is much more compact, see @url{https://en.wikipedia.org/wiki/Hexadecimal}. You can use @code{printf}'s @code{%x} or @code{%X} to print integers in hexadecimal format. @end deftypefun @deftypefun {char *} gal_type_to_string (void @code{*ptr}, uint8_t @code{type}, int @code{quote_if_str_has_space}); Read the contents of the memory that @code{ptr} points to (assuming it has type @code{type} and print it into an allocated string which is returned. If the memory is a string of characters and @code{quote_if_str_has_space} is non-zero, the output string will have double-quotes around it if it contains space characters. Also, note that in this case, @code{ptr} must be a pointer to an array of characters (or @code{char **}), as in the example below (which will put @code{"sample string"} into @code{out}): @example char *out, *string="sample string" out = gal_type_to_string(&string, GAL_TYPE_STRING, 1); @end example @end deftypefun @deftypefun int gal_type_from_string (void @code{**out}, char @code{*string}, uint8_t @code{type}) Read a string as a given data type and put a the pointer to it in @code{*out}. When @code{*out!=NULL}, then it is assumed to be already allocated and the value will be simply put the memory. If @code{*out==NULL}, then space will be allocated for the given type and the string will be read into that type. Note that when we are dealing with a string type, @code{*out} should be interpretted as @code{char **} (one element in an array of pointers to different strings). In other words, @code{out} should be @code{char ***}. This function can be used to fill in arrays of numbers from strings (in an already allocated data structure), or add nodes to a linked list (if the type is a list type). For an array, you have to pass the pointer to the @code{i}th element where you want the value to be stored, for example @code{&(array[i]}). If the string was successfully parsed to the requested type, this function will return a @code{0} (zero), otherwise it will return @code{1} (one). This output format will help you check the status of the conversion in a code like the example below: @example if( gal_type_from_string(&out, string, GAL_TYPE_FLOAT32) ) @{ fprintf(stderr, "%s couldn't be read as float32.\n", string); exit(EXIT_FAILURE); @} @end example @end deftypefun @deftypefun {void *} gal_type_string_to_number (char @code{*string}, uint8_t @code{*type}) Read @code{string} into smallest type that can host the number, the allocated space for the number will be returned and the type of the number will be put into the memory that @code{type} points to. If @code{string} couldn't be read as a number, this function will return @code{NULL}. For the ranges acceptable by each type see @ref{Numeric data types}. For integers it is clear, for floating point types, this function will count the number of significant digits and determine if the given string is single or double precision as described in that section. @end deftypefun @node Library blank values, Library data container, Library data types, Gnuastro library @subsection Library blank values (@file{blank.h}) When the position of an element in a dataset is important (for example a pixel in an image), a place-holder is necessary for the element if we don't have a value to fill it with (for example the CCD cannot read those pixels). We cannot simply shift all the other pixels to fill in the one we have no value for. In other cases, it often occurs that the field of sky that you are studying is not a clean rectangle to nicely fit into the boundaries of an image. You need a way to separate the pixels outside your scientific field from those inside it. Blank values act as these place holders in a dataset. They have no usable value but they have a position. @cindex NaN Every type needs a corresponding blank value (see @ref{Numeric data types} and @ref{Library data types}). Floating point types have a unique value identified by IEEE known as Not-a-Number (or NaN) which is a unique value that is recognized by the compiler. However, integer and string types don't have any standard value. For integers, in Gnuastro we take an extremum of the given type: for signed types (that allow negatives), the minimum possible value is used as blank and for unsigned types (that only accept positives), the maximum possible value is used. To be generic and easy to read/write we define a macro for these blank values and strongly encourage you only use these, and never make any assumption on the value of a type's blank value. @cindex NaN The IEEE NaN blank value type is defined to fail on any comparison, so if you are dealing with floating point types, you cannot use equality (a NaN will @emph{not} be equal to a NaN). If you know your dataset if floating point, you can use the @code{isnan} function in C's @file{math.h} header. For a description of numeric data types see @ref{Numeric data types}. For the constants identifying integers, please see @ref{Library data types}. @deffn {Global integer} GAL_BLANK_UINT8 Blank value for an unsigned, 8-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_INT8 Blank value for a signed, 8-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_UINT16 Blank value for an unsigned, 16-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_INT16 Blank value for a signed, 16-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_UINT32 Blank value for an unsigned, 32-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_INT32 Blank value for a signed, 32-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_UINT64 Blank value for an unsigned, 64-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_INT64 Blank value for a signed, 64-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_SIZE_T Blank value for @code{size_t} type (@code{uint32_t} or @code{uint64_t} in 32-bit or 64-bit systems). @end deffn @cindex NaN @deffn {Global integer} GAL_BLANK_FLOAT32 Blank value for a single precision, 32-bit floating point type (IEEE NaN value). @end deffn @cindex NaN @deffn {Global integer} GAL_BLANK_FLOAT64 Blank value for a double precision, 64-bit floating point type (IEEE NaN value). @end deffn @deffn {Global integer} GAL_BLANK_STRING Blank value for string types (this is itself a string, it isn't the @code{NULL} pointer). @end deffn @noindent The functions below can be used to work with blank pixels. @deftypefun void gal_blank_write (void @code{*pointer}, uint8_t @code{type}) Write the blank value for the given @code{type} into the space that @code{pointer} points to. This can be used when the space is already allocated (for example one element in an array or a statically allocated variable). @end deftypefun @deftypefun {void *} gal_blank_alloc_write (uint8_t @code{type}) Allocate the space required to keep the blank for the given data type @code{type}, write the blank value into it and return the pointer to it. @end deftypefun @deftypefun void gal_blank_initialize (gal_data_t @code{*input}) Initialize all the elements in the @code{input} dataset to the blank value that corresponds to its type. If @code{input} is a tile over a larger dataset, only the region that the tile covers will be set to blank. @end deftypefun @deftypefun int gal_blank_present (gal_data_t @code{*input}, int @code{updateflag}) Return 1 if the dataset has a blank value and zero if it doesn't. Before checking the dataset, this function will look at @code{input}'s flags. If the @code{GAL_DATA_FLAG_HASBLANK} or @code{GAL_DATA_FLAG_DONT_CHECK_ZERO} bits of @code{input->flag} are set to 1, this function will not do any check and will just use the information in the flags. This can greatly speed up processing when a dataset needs to be checked multiple times. If you want to re-check a dataset which has non-zero flags, then explicitly set the appropriate flag to zero before calling this function. When there are no other flags, you can just set @code{input->flags} to zero, otherwise you can use this expression: @example input->flags &= ~(GAL_DATA_FLAG_HASBLANK | GAL_DATA_FLAG_USE_ZERO); @end example When @code{updateflags} is zero, this function has no side-effects on the dataset: it will not toggle the flags. When the dataset's flags were not used and @code{updateflags} is non-zero, this function will set the flags appropriately to avoid having to re-check the dataset in future calls. @end deftypefun @deftypefun {gal_data_t *} gal_blank_flag (gal_data_t @code{*input}) Create a dataset of the the same size as the input, but with an @code{uint8_t} type that has a value of 1 for data that are blank and 0 for those that aren't. @end deftypefun @deftypefun void gal_blank_remove (gal_data_t @code{*input}) Remove blank elements from a dataset, convert it to a 1D dataset, and adjust the size properly (the number of non-blank elements). In practice this function doesn't @code{realloc} the input array, it just shifts the blank elements to the end and adjusts the size elements of the @code{gal_data_t}, see @ref{Generic data container}. @end deftypefun @deftypefun {char *} gal_blank_as_string (uint8_t @code{type}, int @code{width}) Write the blank value for the given data type @code{type} into a string and return it. The space for the string is dynamically allocated so it must be freed after you are done with it. @end deftypefun @node Library data container, Dimensions, Library blank values, Gnuastro library @subsection Data container (@file{data.h}) Astronomical datasets have various dimensions, for example 1D spectra or table columns, 2D images, or 3D Integral field data cubes. Datasets can also have various numeric data types, depending on the operation/purpose, for example processed images are in commonly in floating point, but their mask images are integers using bit-wise flags to identify certain classes of special pixels, see @ref{Numeric data types}). Certain other information about a dataset are also commonly necessary, for example the units of the dataset, the name of the dataset and some comments. To deal with any generic dataset, Gnuastro defines the @code{gal_data_t} as input or output. @menu * Generic data container:: Definition of Gnuastro's generic container. * Dataset size and allocation:: Functions for size and allocation. * Arrays of datasets:: Functions to help with array of datasets. * Copying datasets:: Functions to copy a dataset to a new one. @end menu @node Generic data container, Dataset size and allocation, Library data container, Library data container @subsubsection Generic data container (@code{gal_data_t}) To be able to deal with any dataset (various dimensions, numeric data types, units and higher-level structures), Gnuastro defines the @code{gal_data_t} type which is the input/output container of choice for many of Gnuastro library's functions. It is defined in @file{gnuastro/data.h}. If you will be using (`@code{# include}'ing) those libraries, you don't need to include this header explicitly, it is already included by any library header that uses @code{gal_data_t}. @deftp {Type (C @code{struct})} gal_data_t The main container for datasets in Gnuastro. It can host data of any dimensions, with any numeric data type. It is actually a structure, but @code{typedef}'d as a new type to avoid having to write the @code{struct} before any declaration. The actual structure is shown below which is followed by a description of each element. @example typedef struct gal_data_t @{ void *restrict array; /* Basic array information. */ uint8_t type; size_t ndim; size_t *dsize; size_t size; char *mmapname; size_t minmapsize; int nwcs; /* WCS information. */ struct wcsprm *wcs; uint8_t flag; /* Content description. */ int status; char *name; char *unit; char *comment; int disp_fmt; /* For text printing. */ int disp_width; int disp_precision; struct gal_data_t *next; /* For higher-level datasets. */ struct gal_data_t *block; @} gal_data_t; @end example @end deftp @noindent The list below contains a description for each @code{gal_data_t} element. @cindex @code{void *} @table @code @item void *restrict array This is the pointer to the main array of the dataset containing the raw data (values). All the other elements in this data-structure are actually meta-data enabling us to use/understand the series of values in this array. It must allow data of any type (see @ref{Numeric data types}), so it is defined as a @code{void *} pointer. A @code{void *} array is not directly usable in C, so you have to cast it to proper type before using it, please see @ref{Library demo - reading a image} for a demonstration. @cindex @code{restrict} @cindex C: @code{restrict} The @code{restrict} keyword was formally introduced in C99 and is used to tell the compiler that at any moment only this pointer will modify what it points to (a pixel in an image for example)@footnote{Also see @url{https://en.wikipedia.org/wiki/Restrict}.}. This extra piece of information can greatly help in compiler optimizations and thus the running time of the program. But older compilers might not have this capability, so at @command{./configure} time, Gnuastro checks this feature and if the user's compiler doesn't support @code{restrict}, it will be removed from this definition. @cindex Data type @item uint8_t type A fixed code (integer) used to identify the type of data in @code{array} (see @ref{Numeric data types}). For the list of acceptable values to this variable, please see @ref{Library data types}. @item size_t ndim The dataset's number of dimensions. @cindex FORTRAN @cindex FITS standard @cindex Standard, FITS @item size_t *dsize The size of the dataset along each dimension. This is an array (with @code{ndim} elements), of positive integers in row-major order@footnote{Also see @url{https://en.wikipedia.org/wiki/Row-_and_column-major_order}.} (based on C). When a data file is read into memory with Gnuastro's libraries, this array is dynamically allocated based on the number of dimensions that the dataset has. It is important to remember that C's row-major ordering is the opposite of the FITS standard which is in column-major order: in the FITS standard the fastest dimension's size is specified by @code{NAXIS1}, and slower dimensions follow. The FITS standard was defined mainly based on the FORTRAN language which is the opposite of C's approach to multi-dimensional arrays (and also starts counting from 1 not 0). Hence if a FITS image has @code{NAXIS1==20} and @code{NAXIS2==50}, the @code{dsize} array must be filled with @code{dsize[0]==50} and @code{dsize[1]==20}. The fastest dimension is the one that is contiguous in memory: to increment by one along that dimension, just go to the next element in the array. As we go to slower dimensions, the number of memory cells we have to skip for an increment along that dimension becomes larger. @item size_t size The total number of elements in the dataset. This is actually a multiplication of all the values in the @code{dsize} array, so it is not an independent parameter. However, low-level operations with the dataset (irrespective of its dimensions) commonly need this number, so this element is designed to avoid calculating it every time. @item char *mmapname Name of file hosting the @code{mmap}'d contents of @code{array}. If the value of this variable is @code{NULL}, then the contents of @code{array} are actually stored in RAM, not in a file on the HDD/SSD. See the description of @code{minmapsize} below for more. If a file is used, it will be kept in the hidden @file{.gnuastro} directory with a randomly selected name to allow multiple arrays to be kept there at the same time. When @code{gal_data_free} is called the randomly named file will be deleted. @item size_t minmapsize The minimum size of an array (in bytes) to store the contents of @code{array} as a file (on the non-volatile HDD/SSD), not in RAM. This can be very useful for large datasets which can be very memory intensive and the user's RAM might not be sufficient to keep/process it. A random filename is assigned to the array which is available in the @code{mmapname} element of @code{gal_data_t} (above), see there for more. @code{minmapsize} is stored in each @code{gal_data_t}, so it can be passed on to subsequent/derived datasets. See the description of the @option{--minmapsize} option in @ref{Processing options} for more on using this value. @item nwcs The number of WCS coordinate representations (for WCSLIB). @item struct wcsprm *wcs The main WCSLIB structure keeping all the relevant information necessary for WCSLIB to do its processing and convert data-set positions into real-world positions. When it is given a @code{NULL} value, all possible WCS calculations/measurements will be ignored. @item uint8_t flag Bit-wise flags to describe general properties of the dataset. The number of bytes available in this flag is stored in the @code{GAL_DATA_FLAG_SIZE} macro. Note that you should use bit-wise operators@footnote{See @url{https://en.wikipedia.org/wiki/Bitwise_operations_in_C}.} to check these flags. The currently recognized bits are stored in these macros: @table @code @cindex Blank data @item GAL_DATA_FLAG_BLANK_CH Marking that the dataset has been checked for blank values. Therefore, the value of the bit in @code{GAL_DATA_FLAG_HASBLANK} is reliable. Without this bit, when a dataset doesn't have any blank values (and this has been checked), the @code{GAL_DATA_FLAG_HASBLANK} bit will be zero so a checker has no way to know if this zero is real or if no check has been done yet. @item GAL_DATA_FLAG_HASBLANK This bit has a value of @code{1} when the given dataset has blank values. If this bit is @code{0} and @code{GAL_DATA_FLAG_BLANK_CH} is @code{1}, then the dataset has been checked and it didn't have any blank values, so there is no more need for further checks. @item GAL_DATA_FLAG_SORT_CH Marking that the dataset is already checked for being sorted or not and thus that the possible @code{0} values in @code{GAL_DATA_FLAG_SORTED_I} and @code{GAL_DATA_FLAG_SORTED_D} are meaningful. @item GAL_DATA_FLAG_SORTED_I This bit has a value of @code{1} when the given dataset is sorted in an increasing manner. If this bit is @code{0} and @code{GAL_DATA_FLAG_SORT_CH} is @code{1}, then the dataset has been checked and wasn't sorted (increasing), so there is no more need for further checks. @item GAL_DATA_FLAG_SORTED_D This bit has a value of @code{1} when the given dataset is sorted in a decreasing manner. If this bit is @code{0} and @code{GAL_DATA_FLAG_SORT_CH} is @code{1}, then the dataset has been checked and wasn't sorted (decreasing), so there is no more need for further checks. @end table The macro @code{GAL_DATA_FLAG_MAXFLAG} contains the largest internally used bit-position. Higher-level flags can be defined with the bit-wise shift operators using this macro to define internal flags for libraries/programs that depend on Gnuastro without causing any possible conflict with the internal flags discussed above or having to check the values manually on every release. @item int status A context-specific status values for this data-structure. This integer will not be set by Gnuastro's libraries. You can use it keep some additional information about the dataset (with integer constants) depending on your applications. @item char *name The name of the dataset. If the dataset is a multi-dimensional array and read/written as a FITS image, this will be the value in the @code{EXTNAME} FITS keyword. If the dataset is a one-dimensional table column, this will be the column name. If it is set to @code{NULL} (by default), it will be ignored. @item char *unit The units of the dataset (for example @code{BUNIT} in the standard FITS keywords) that will be read from or written to files/tables along with the dataset. If it is set to @code{NULL} (by default), it will be ignored. @item char *comment Any further explanation about the dataset which will be written to any output file if present. @item disp_fmt Format to use for printing each element of the dataset to a plain text file, the acceptable values to this element are defined in @ref{Table input output}. Based on C's @code{printf} standards. @item disp_width Width of printing each element of the dataset to a plain text file, the acceptable values to this element are defined in @ref{Table input output}. Based on C's @code{printf} standards. @item disp_precision Precision of printing each element of the dataset to a plain text file, the acceptable values to this element are defined in @ref{Table input output}. Based on C's @code{printf} standards. @item gal_data_t *next Through this pointer, you can link a @code{gal_data_t} with other datasets related datasets, for example the different columns in a dataset each have one @code{gal_data_t} associate with them and they are linked to each other using this element. There are several functions described below to facilitate using @code{gal_data_t} as a linked list. See @ref{Linked lists} for more on these wonderful high-level constructs. @item gal_data_t *block Pointer to the start of the complete allocated block of memory. When this pointer is not @code{NULL}, the dataset is not treated as a contiguous patch of memory. Rather, it is seen as covering only a portion of the larger patch of memory that @code{block} points to. See @ref{Tessellation library} for a more thorough explanation and functions to help work with tiles that are created from this pointer. @end table @node Dataset size and allocation, Arrays of datasets, Generic data container, Library data container @subsubsection Dataset size and allocation Gnuastro's main data container was defined in @ref{Generic data container}. The functions listed in this section describe the most basic operations on @code{gal_data_t}: those related to the size, pointers, allocation and freeing. These functions are declared in @file{gnuastro/data.h} which is also visible from the function names (see @ref{Gnuastro library}). @deftypefun int gal_data_dsize_is_different (gal_data_t @code{*first}, gal_data_t @code{*second}) Return @code{1} (one) if the two datasets don't have the same size along all dimensions. This function will also return @code{1} when the number of dimensions of the two datasets are different. @end deftypefun @deftypefun {void *} gal_data_ptr_increment (void @code{*pointer}, size_t @code{increment}, uint8_t @code{type}) Return a pointer to an element that is @code{increment} elements ahead of @code{pointer}, assuming each element has type of @code{type} (for the type codes, see @ref{Library data types}). When working with the @code{array} elements of @code{gal_data_t}, we are actually dealing with @code{void *} pointers. However, pointer arithmetic doesn't apply to @code{void *}, because the system doesn't know how many bytes there are in each element to increment the pointer respectively. This function will use the given @code{type} to calculate where the incremented element is located in memory. @end deftypefun @deftypefun size_t gal_data_ptr_dist (void @code{*earlier}, void @code{*later}, uint8_t @code{type}) Return the number of elements between @code{earlier} and @code{later} assuming each element has a type defined by @code{type} (for the type codes, see @ref{Library data types}). @end deftypefun @deftypefun {void *} gal_data_malloc_array (uint8_t @code{type}, size_t @code{size}, const char @code{*funcname}, const char @code{*varname}) Allocate an array of type @code{type} with @code{size} elements in RAM (for the type codes, see @ref{Library data types}). This is effectively just a wrapper around C's @code{malloc} function but takes Gnuastro's integer type codes and will also abort with an error if there the allocation was not successful. @cindex C99 When space cannot be allocated, this function will abort the program with a message containing the reason for the failure. @code{funcname} (name of the function calling this function) and @code{varname} (name of variable that needs this space) will be used in this error message if they are not @code{NULL}. In most modern compilers, you can use the generic @code{__func__} variable for @code{funcname}. In this way, you don't have to manually copy and paste the function name or worry about it changing later (@code{__func__} was standardized in C99). @end deftypefun @deftypefun {void *} gal_data_calloc_array (uint8_t @code{type}, size_t @code{size}, const char @code{*funcname}, const char @code{*varname}) Similar to @code{gal_data_malloc_array}, but the space is cleared (set to 0) after allocation. @end deftypefun @deftypefun void gal_data_initialize (gal_data_t @code{*data}, void @code{*array}, uint8_t @code{type}, size_t @code{ndim}, size_t @code{*dsize}, struct wcsprm @code{*wcs}, int @code{clear}, size_t @code{minmapsize}, char @code{*name}, char @code{*unit}, char @code{*comment}) Initialize the given data structure (@code{data}) with all the given values. Note that the raw input @code{gal_data_t} must already have been allocated before calling this function. For a description of each variable see @ref{Generic data container}. It will set the values and do the necessary allocations. If they aren't @code{NULL}, all input arrays (@code{dsize}, @code{wcs}, @code{name}, @code{unit}, @code{comment}) are separately copied (allocated) by this function for usage in @code{data}, so you can safely use one value to initialize many datasets or use statically allocated variables in this function call. Once you are done with the dataset, you can clean all the allocated spaces with @code{gal_data_free_contents}. If @code{array} is not @code{NULL}, it will be directly copied into @code{data->array} and no new space will be allocated for the array of this dataset, this has many low-level advantages and can be used to work on regions of a dataset instead of the whole allocated array (see the description under @code{block} in @ref{Generic data container} for one example). If the given pointer is not the start of an allocated block of memory or it is used in multiple datasets, be sure to set it to @code{NULL} (with @code{data->array=NULL}) before cleaning up with @code{gal_data_free_contents}. @code{ndim} may be zero. In this case no allocation will occur, @code{data->array} and @code{data->dsize} will be set to @code{NULL} and @code{data->size} will be zero. However (when necessary) @code{dsize} must not have any zero values (a dimension of length zero is not defined). @end deftypefun @deftypefun {gal_data_t *} gal_data_alloc (void @code{*array}, uint8_t @code{type}, size_t @code{ndim}, size_t @code{*dsize}, struct wcsprm @code{*wcs}, int @code{clear}, size_t @code{minmapsize}, char @code{*name}, char @code{*unit}, char @code{*comment}) Dynamically allocate a @code{gal_data_t} and initialize it will all the given values. See the description of @code{gal_data_initialize} and @ref{Generic data container} for more information. This function will often be the most frequently used because it allocates the @code{gal_data_t} hosting all the values @emph{and} initializes it. Once you are done with the dataset, be sure to clean up all the allocated spaces with @code{gal_data_free}. @end deftypefun @deftypefun void gal_data_free_contents (gal_data_t @code{*data}) Free all the non-@code{NULL} pointers in @code{gal_data_t}. If @code{data} is actually a tile (@code{data->block!=NULL}, see @ref{Tessellation library}), then @code{tile->array} is not freed. For a complete description of @code{gal_data_t} and its contents, see @ref{Generic data container}. @end deftypefun @deftypefun void gal_data_free (gal_data_t @code{*data}) Free all the non-@code{NULL} pointers in @code{gal_data_t}, then free the actual data structure. @end deftypefun @node Arrays of datasets, Copying datasets, Dataset size and allocation, Library data container @subsubsection Arrays of datasets Gnuastro's generic data container (@code{gal_data_t}) is a very versatile structure that can be used in many higher-level contexts. One such higher-level construct is an array of @code{gal_data_t} structures to simplify the allocation (and later cleaning) of several @code{gal_data_t}s that are related. For example, each column in a table is usually represented by one @code{gal_data_t} (so it has its own name, numeric data type, units and etc). A table (with many columns) can be seen as an array of @code{gal_data_t}s (when the number of columns is known a-priori). The functions below are defined to create a cleared array of data structures and to free them in the end. These functions are declared in @file{gnuastro/data.h} which is also visible from the function names (see @ref{Gnuastro library}). @deftypefun {gal_data_t *} gal_data_array_calloc (size_t @code{size}) Allocate an array of @code{gal_data_t} with @code{size} elements. This function will also initialize all the values (@code{NULL} for pointers and 0 for other types). You can use @code{gal_data_initialize} to fill each element of the array afterwards. The following code snippet is one example of doing this. @example size_t i; gal_data_t *dataarr; dataarr=gal_data_array_calloc(10); for(i=0;i<10;++i) gal_data_initialize(&dataarr[i], ...); ... gal_data_array_free(dataarr, 10, 1); @end example @end deftypefun @deftypefun void gal_data_array_free (gal_data_t @code{*dataarr}, size_t @code{num}, int @code{free_array}) Free all the @code{num} elements within @code{dataarr} and the actual allocated array. If @code{free_array} is not zero, then the @code{array} element of all the datasets will also be freed, see @ref{Generic data container}. @end deftypefun @node Copying datasets, , Arrays of datasets, Library data container @subsubsection Copying datasets The functions in this section describes Gnuastro's facilities to copy a given dataset into another. The new dataset can have a different type (including a string), it can be already allocated (in which case only the values will be written into it). In all these cases, if the input dataset is a tile, only the data within the tile are copied. In many of the functions here, it is possible to copy the dataset to a new numeric data type (see @ref{Numeric data types}. In such cases, Gnuastro's library is going to use the native conversion by C. So if you are converting to a smaller type, it is up to you to make sure that the values fit into the output type. @deftypefun {gal_data_t *} gal_data_copy (gal_data_t @code{*in}) Return a new dataset that is a copy of @code{in}, all of @code{in}'s meta-data will also copied into the output, except for @code{block}. @end deftypefun @deftypefun {gal_data_t *} gal_data_copy_to_new_type (gal_data_t @code{*in}, uint8_t @code{newtype}) Return a copy of the dataset @code{in}, converted to @code{newtype}, see @ref{Library data types} for Gnuastro library's type identifiers. The returned dataset will have all meta-data except their type and @code{block} equal to the input's metadata. @end deftypefun @deftypefun {gal_data_t *} gal_data_copy_to_new_type_free (gal_data_t @code{*in}, uint8_t @code{newtype}) Return a copy of the dataset @code{in} that is converted to @code{newtype} and free the input dataset. See @ref{Library data types} for Gnuastro library's type identifiers. The returned dataset will have all meta-data, except their type, equal to the input's metadata. This function is similar to @code{gal_data_copy_to_new_type}, except that it will free the input dataset. @end deftypefun @deftypefun {void} gal_data_copy_to_allocated (gal_data_t @code{*in}, gal_data_t @code{*out}) Copy the contents of the array in @code{in} into the already allocated array in @code{out}. The types of the input and output may be different, type conversion will be done internally. When @code{in->size != out->size} this function will behave as follows: @table @code @item out->size < in->size This function won't re-allocate the necessary space, it will abort with an error, so please check before calling this function. @item out->size > in->size This function will write the values in @code{out->size} and @code{out->dsize} from the same values of @code{in}. So if you want to use a pre-allocated space/dataset multiple times with varying input sizes, be sure to reset @code{out->size} before every call to this function. @end table @end deftypefun @deftypefun {gal_data_t *} gal_data_copy_string_to_number (char @code{*string}) Read @code{string} into the smallest type that can store the value (see @ref{Numeric data types}). This function is just a wrapper for the @code{gal_type_string_to_number}, but will put the value into a single-element dataset. @end deftypefun @node Dimensions, Linked lists, Library data container, Gnuastro library @subsection Dimensions (@file{dimension.h}) An array is a contiguous region of memory. Hence, at the lowest level, every element of an array just has one single-valued position: the number of elements that lie between it and the first element in the array. This is also known as the @emph{index} of the element within the array. A dataset's number of dimensions is high-level abstraction (meta-data) that we project onto that contiguous patch of memory. When the array is interpreted as a one-dimensional dataset, this index is also the @emph{coordinate} of the element. But once we associate the patch of memory with a higher dimension, there must also be one coordinate for each dimension. The functions and macros in this section provide you with the tools to convert an index into a coordinate and vice-versa along with several other issues for example issues with the neighbors of an element in a multi-dimensional context. @deftypefun size_t gal_dimension_total_size (size_t @code{ndim}, size_t @code{*dsize}) Return the total number of elements for a dataset with @code{ndim} dimensions that has @code{dsize} elements along each dimension. @end deftypefun @deftypefun {size_t *} gal_dimension_increment (size_t @code{ndim}, size_t @code{*dsize}) Return an allocated array that has the number of elements necessary to increment an index along every dimension. For example along the fastest dimension (last element in the @code{dsize} and returned arrays), the value is @code{1} (one). @end deftypefun @deftypefun size_t gal_dimension_num_neighbors (size_t @code{ndim}) The maximum number of neighbors (any connectivity) that a data element can have in @code{ndim} dimensions. Effectively, this function just returns @mymath{3^n-1} (where @mymath{n} is the number of dimensions). @end deftypefun @deffn {Function-like macro} GAL_DIMENSION_FLT_TO_INT (@code{FLT}) Calculate the integer pixel position that the floating point @code{FLT} number belongs to. In the FITS format (and thus in Gnuastro), the center of each pixel is allocated on an integer (not it edge), so the pixel which hosts a floating point number cannot simply be found with internal type conversion. @end deffn @deftypefun void gal_dimension_add_coords (size_t @code{*c1}, size_t @code{*c2}, size_t @code{*out}, size_t @code{ndim}) For every dimension, add the coordinates in @code{c1} with @code{c2} and put the result into @code{out}. In other words, for dimension @code{i} run @code{out[i]=c1[i]+c2[i];}. Hence @code{out} may be equal to any one of @code{c1} or @code{c2}. @end deftypefun @deftypefun size_t gal_dimension_coord_to_index (size_t @code{ndim}, size_t @code{*dsize}, size_t @code{*coord}) Return the index (counting from zero) from the coordinates in @code{coord} (counting from zero) assuming the dataset has @code{ndim} elements and the size of the dataset along each dimension is in the @code{dsize} array. @end deftypefun @deftypefun void gal_dimension_index_to_coord (size_t @code{index}, size_t @code{ndim}, size_t @code{*dsize}, size_t @code{*coord}) Fill in the @code{coord} array with the coordinates that correspond to @code{index} assuming the dataset has @code{ndim} elements and the size of the dataset along each dimension is in the @code{dsize} array. Note that both @code{index} and each value in @code{coord} are assumed to start from @code{0} (zero). Also that the space which @code{coord} points to must already be allocated before calling this function. @end deftypefun @deftypefun size_t gal_dimension_dist_manhattan (size_t @code{*a}, size_t @code{*b}, size_t @code{ndim}) Return the manhattan distance (see @url{https://en.wikipedia.org/wiki/Taxicab_geometry, Wikipedia}) between the two coordinates @code{a} and @code{b} (each an array of @code{ndim} elements). @end deftypefun @deffn {Function-like macro} GAL_DIMENSION_NEIGHBOR_OP (@code{index}, @code{ndim}, @code{dsize}, @code{connectivity}, @code{dinc}, @code{operation}) Parse the neighbors of the element located at @code{index} and do the requested operation on them. This is defined as a macro to allow easy definition of any operation on the neighbors of a given element without having to use loops within your source code (the loops are implemented by this macro). For an example of using this function, please see @ref{Library demo - inspecting neighbors}. The input arguments to this function-like macro are described below: @table @code @item index Distance of this element from the first element in the array on a contiguous patch of memory (starting from 0), see the discussion above. @item ndim The number of dimensions associated with the contiguous patch of memory. @item dsize The full array size along each dimension. This must be an array and is assumed to have the same number elements as @code{ndim}. See the discussion under the same element in @ref{Generic data container}. @item connectivity Most distant neighbors to consider. Depending on the number of dimensions, different neighbors may be defined for each element. This function-like macro distinguish between these different neighbors with this argument. It has a value between @code{1} (one) and @code{ndim}. For example in a 2D dataset, 4-connected neighbors have a connectivity of @code{1} and 8-connected neighbors have a connectivity of @code{2}. Note that this is inclusive, so in this example, a connectivity of @code{2} will also include connectivity @code{1} neighbors. @item dinc An array keeping the length necessary to increment along each dimension. You can make this array with the following function. Just don't forget to free the array after you are done with it: @example size_t *dinc=gal_dimension_increment(ndim, dsize); @end example @code{dinc} depends on @code{ndim} and @code{dsize}, but it must be defined outside this function-like macro since it involves allocation to help in performance. @item operation Any C operation that you would like to do on the neighbor. This macro will provide you a @code{nind} variable that can be used as the index of the neighbor that is currently being studied. It is defined as `@code{size_t ndim;}'. Note that @code{operation} will be repeated the number of times there is a neighbor for this element. @end table This macro works fully within its own @code{@{@}} block and except for the @code{nind} variable that shows the neighbor's index, all the variables within this macro's block start with @code{gdn_}. @end deffn @node Linked lists, FITS files, Dimensions, Gnuastro library @subsection Linked lists (@file{list.h}) @cindex Array @cindex Linked list An array is a contiguous region of memory that is very efficient and easy to use for recording and later accessing any random element as fast as any other. This makes array the primary data container when you have many elements (for example an image which has millions of pixels). One major problem with an array is that the number of elements that go into it must be known in advance and adding or removing an element will require a re-set of all the other elements. For example if you want to remove the 3rd element in a 1000 element array, all 997 subsequent elements have to pulled back by one position, the reverse will happen if you need to add an element. In many contexts such situations never come up, for example you don't want to shift all the pixels in an image by one or two pixels from some random position in the image: their positions have scientific value. But in other contexts you will find your self frequently adding/removing an a-priori unknown number of elements. Linked lists (or @emph{lists} for short) are the data-container of choice in such situations. As in a chain, each @emph{node} in a list is an independent C structure, keeping its own data along with pointer(s) to its immediate neighbor(s). Below, you can see one simple linked list node structure along with an ASCII art schematic of how we can use the @code{next} pointer to add any number of elements to the list that we want. By convention, a list is terminated when @code{next} is the @code{NULL} pointer. @c The second and last lines lines are pushed line space forward, because @c the `@{' at the start of the line is only seen as `{' in the book. @example struct list_float /* --------- --------- */ @{ /* | Value | | Value | */ float value; /* | --- | | --- | */ struct list_float *next; /* | next-|--> | next-|--> NULL */ @} /* --------- --------- */ @end example The schematic shows another great advantage of linked lists: it is very easy to add or remove/pop a node anywhere in the list. If you want to modify the first node, you just have to change one pointer. If it is in the middle, you just have to change two. You initially define a variable of this type with a @code{NULL} pointer as shown below: @example struct list_float *mylist=NULL; @end example @noindent To add or remove/pop a node from the list you can use functions provided for the respective type in the sections below. @cindex last-in-first-out @cindex first-in-first-out @noindent When you add an element to the list, it is conventionally added to the ``top'' of the list: the general list pointer will point to the newly created node, which will point to the previously created node and so on. So when you ``pop'' from the top of the list, you are actually retrieving the last value you put in and changing the list pointer to the next youngest node. This is thus known as a ``last-in-first-out'' list. This is the most efficient type of linked list (easier to implement and faster to process). Alternatively, you can add each newly created node at the end of the list. If you do that, you will get a ``first-in-first-out'' list. But that will force you to go through the whole list for each new element that is created (this will slow down the processing)@footnote{A better way to get a first-in-first-out is to first keep the data as last-in-first-out until they are all read. Afterwards, reverse the list by popping each node and immediately add it to the new list. This practically reverses the last-in-first-out list to a first-in-first-out one. All the list types discussed in this chapter have a function with a @code{_reverse} suffix for this job.}. The node example above creates the simplest kind of a list. We can define each node with two pointers to both the next and previous neighbors, this is called a ``Doubly linked list''. In general, lists are very powerful and simple constructs that can be very useful. But going into more detail would be out of the scope of this short introduction in this book. @url{https://en.wikipedia.org/wiki/Linked_list, Wikipedia} has a nice and more thorough discussion of the various types of lists. To appreciate/use the beauty and elegance of these powerful constructs even further, see Chapter 2 (Information Structures, in volume 1) of Donald Knuth's ``The art of computer programming''. In this section we will review the functions and structures that are available in Gnuastro for working on lists. They differ by the type of data that each node can keep. For each linked-list node structure, we will first introduce the structure, then the functions for working on the structure. All these structures and functions are defined and declared in @file{gnuastro/list.h}. @menu * List of strings:: Simply linked list of strings. * List of int32_t:: Simply linked list of int32_ts. * List of size_t:: Simply linked list of size_ts. * List of float:: Simply linked list of floats. * List of double:: Simply linked list of doubles * List of void:: Simply linked list of void * pointers. * Ordered list of size_t:: Simply linked, ordered list of size_t. * Doubly linked ordered list of size_t:: Definition and functions. * List of gal_data_t:: Simply linked list Gnuastro's generic datatype. @end menu @node List of strings, List of int32_t, Linked lists, Linked lists @subsubsection List of strings Probably one of the most common lists you will be using are lists of strings. They are the best tools when you are reading the user's inputs, or when adding comments to the output files. Below you can see Gnuastro's string list type and several functions to help in adding, removing/popping, reversing and freeing the list. @deftp {Type (C @code{struct})} gal_list_str_t A single node in a list containing a string of characters. @example typedef struct gal_list_str_t @{ char *v; struct gal_list_str_t *next; @} gal_list_str_t; @end example @end deftp @deftypefun void gal_list_str_add (gal_list_str_t @code{**list}, char @code{*value}, int @code{allocate}) Add a new node to the list of strings (@code{list}) and update it. The new node will contain the string @code{value}. If @code{allocate} is not zero, space will be allocated specifically for the string of the new node and the contents of @code{value} will be copied into it. This can be useful when your string may be changed later in the program, but you want your list to remain. Here is one short/simple example of initializing and adding elements to a string list: @example gal_list_str_t *strlist; gal_list_str_add(&strlist, "bottom of list."); gal_list_str_add(&strlist, "second last element of list."); @end example @end deftypefun @deftypefun {char *} gal_list_str_pop (gal_list_str_t @code{**list}) Pop the top element of @code{list}, change @code{list} to point to the next node in the list, and return the string that was in the popped node. If @code{*list==NULL}, then this function will also return a @code{NULL} pointer. @end deftypefun @deftypefun size_t gal_list_str_number (gal_list_str_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun void gal_list_str_print (gal_list_str_t @code{*list}) Print the strings within each node of @code{*list} on the standard output in the same order that they are stored. Each string is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, its best to make your own implementation with a better, more user-friendly, format. For example the following code snippet. @example size_t i; gal_list_str_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("String %zu: %s\n", i, tmp->v); @end example @end deftypefun @deftypefun void gal_list_str_reverse (gal_list_str_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun void gal_list_str_free (gal_list_str_t @code{*list}, int @code{freevalue}) Free every node in @code{list}. If @code{freevalue} is not zero, also free the string within the nodes. @end deftypefun @node List of int32_t, List of size_t, List of strings, Linked lists @subsubsection List of @code{int32_t} Signed integers are the best types when you are dealing with a positive or negative integers. The are generally useful in many contexts, for example when you want to keep the order of a series of states (each state stored as a given number in an @code{enum} for example). On many modern systems, @code{int32_t} is just an alias for @code{int}, so you can use them interchangeably. To make sure, check the size of @code{int} on your system: @deftp {Type (C @code{struct})} gal_list_i32_t A single node in a list containing a 32-bit signed integer (see @ref{Numeric data types}). @example typedef struct gal_list_i32_t @{ int32_t v; struct gal_list_i32_t *next; @} gal_list_i32_t; @end example @end deftp @deftypefun void gal_list_i32_add (gal_list_i32_t @code{**list}, int32_t @code{value}) Add a new node (containing @code{value}) to the top of the @code{list} of @code{int32_t}s (@code{uint32_t} is equal to @code{int} on many modern systems), and update @code{list}. Here is one short example of initializing and adding elements to a string list: @example gal_list_i32_t *i32list=NULL; gal_list_i32_add(&i32list, 52); gal_list_i32_add(&i32list, -4); @end example @end deftypefun @deftypefun {int32_t} gal_list_i32_pop (gal_list_i32_t @code{**list}) Pop the top element of @code{list} and return the value. This function will also change @code{list} to point to the next node in the list. If @code{*list==NULL}, then this function will also return @code{GAL_BLANK_INT32} (see @ref{Library blank values}). @end deftypefun @deftypefun size_t gal_list_i32_number (gal_list_i32_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun void gal_list_i32_print (gal_list_i32_t @code{*list}) Print the integers within each node of @code{*list} on the standard output in the same order that they are stored. Each integer is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, its best to make your own implementation with a better, more user-friendly format. For example the following code snippet. You can also modify it to print all values in one line, and etc, depending on the context of your program. @example size_t i; gal_list_i32_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("String %zu: %s\n", i, tmp->v); @end example @end deftypefun @deftypefun void gal_list_i32_reverse (gal_list_i32_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun {int32_t *} gal_list_i32_to_array (gal_list_i32_t @code{*list}, int @code{reverse}, size_t @code{*num}) Dynamically allocate an array and fill it with the values in @code{list}. The function will return a pointer to the allocated array and put the number of elements in the array into the @code{num} pointer. If @code{reverse} has a non-zero value, the array will be filled in the opposite order of elements in @code{list}. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. @end deftypefun @deftypefun void gal_list_i32_free (gal_list_i32_t @code{*list}) Free every node in @code{list}. @end deftypefun @node List of size_t, List of float, List of int32_t, Linked lists @subsubsection List of @code{size_t} The @code{size_t} type is a unique type in C: as the name suggests it is defined to store sizes, or more accurately, the distances between memory locations. Hence it is always positive (an @code{unsigned} type) and it is directly related to the address-able spaces on the host system: on 32-bit and 64-bit systems it is an alias for @code{uint32_t} and @code{uint64_t}, respectively (see @ref{Numeric data types}). @code{size_t} is the default compiler type to index an array (recall that an array index in C is just a pointer increment of a given @emph{size}). Since it is unsigned, its a great type for counting (where negative is not defined), you are always sure it will never exceed the system's (virtual) memory and since its name has the word ``size'' inside it, it provides a good level of documentation@footnote{So you know that a variable of this type is not used to store some generic state for example.}. In Gnuastro, we do all counting and array indexing with this type, so this list is very handy. As discussed above, @code{size_t} maps to different types on different machines, so a portable way to print them with @code{printf} is to use C99's @code{%zu} format. @deftp {Type (C @code{struct})} gal_list_sizet_t A single node in a list containing a @code{size_t} value (which maps to @code{uint32_t} or @code{uint64_t} on 32-bit and 64-bit systems), see @ref{Numeric data types}. @example typedef struct gal_list_sizet_t @{ size_t v; struct gal_list_sizet_t *next; @} gal_list_sizet_t; @end example @end deftp @deftypefun void gal_list_sizet_add (gal_list_sizet_t @code{**list}, size_t @code{value}) Add a new node (containing @code{value}) to the top of the @code{list} of @code{size_t}s and update @code{list}. Here is one short example of initializing and adding elements to a string list: @example gal_list_sizet_t *slist=NULL; gal_list_sizet_add(&slist, 45493); gal_list_sizet_add(&slist, 930484); @end example @end deftypefun @deftypefun {sizet_t} gal_list_sizet_pop (gal_list_sizet_t @code{**list}) Pop the top element of @code{list} and return the value. This function will also change @code{list} to point to the next node in the list. If @code{*list==NULL}, then this function will also return @code{GAL_BLANK_SIZE_T} (see @ref{Library blank values}). @end deftypefun @deftypefun size_t gal_list_sizet_number (gal_list_sizet_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun void gal_list_sizet_print (gal_list_sizet_t @code{*list}) Print the values within each node of @code{*list} on the standard output in the same order that they are stored. Each integer is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, its best to make your own implementation with a better, more user-friendly format. For example, the following code snippet. You can also modify it to print all values in one line, and etc, depending on the context of your program. @example size_t i; gal_list_sizet_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("String %zu: %zu\n", i, tmp->v); @end example @end deftypefun @deftypefun void gal_list_sizet_reverse (gal_list_sizet_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun {size_t *} gal_list_sizet_to_array (gal_list_sizet_t @code{*list}, int @code{reverse}, size_t @code{*num}) Dynamically allocate an array and fill it with the values in @code{list}. The function will return a pointer to the allocated array and put the number of elements in the array into the @code{num} pointer. If @code{reverse} has a non-zero value, the array will be filled in the inverse of the order of elements in @code{list}. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. @end deftypefun @deftypefun void gal_list_sizet_free (gal_list_sizet_t @code{*list}) Free every node in @code{list}. @end deftypefun @node List of float, List of double, List of size_t, Linked lists @subsubsection List of @code{float} Single precision floating point numbers can accurately store real number until 7.2 decimals and only consume 4 bytes (32-bits) of memory, see @ref{Numeric data types}. Since astronomical data rarely reach that level of precision, single precision floating points are the type of choice to keep and read data. However, when processing the data, it is best to use double precision floating points (since errors propagate). @deftp {Type (C @code{struct})} gal_list_f32_t A single node in a list containing a 32-bit single precision @code{float} value: see @ref{Numeric data types}. @example typedef struct gal_list_f32_t @{ float v; struct gal_list_f32_t *next; @} gal_list_f32_t; @end example @end deftp @deftypefun void gal_list_f32_add (gal_list_f32_t @code{**list}, float @code{value}) Add a new node (containing @code{value}) to the top of the @code{list} of @code{float}s and update @code{list}. Here is one short example of initializing and adding elements to a string list: @example gal_list_f32_t *flist=NULL; gal_list_f32_add(&flist, 3.89); gal_list_f32_add(&flist, 1.23e-20); @end example @end deftypefun @deftypefun {float} gal_list_f32_pop (gal_list_f32_t @code{**list}) Pop the top element of @code{list} and return the value. This function will also change @code{list} to point to the next node in the list. If @code{*list==NULL}, then this function will return @code{GAL_BLANK_FLOAT32} (NaN, see @ref{Library blank values}). @end deftypefun @deftypefun size_t gal_list_f32_number (gal_list_f32_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun void gal_list_f32_print (gal_list_f32_t @code{*list}) Print the values within each node of @code{*list} on the standard output in the same order that they are stored. Each floating point number is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, its best to make your own implementation with a better, more user-friendly format. For example, in the following code snippet. You can also modify it to print all values in one line, and etc, depending on the context of your program. @example size_t i; gal_list_f32_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Node %zu: %f\n", i, tmp->v); @end example @end deftypefun @deftypefun void gal_list_f32_reverse (gal_list_f32_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun {float *} gal_list_f32_to_array (gal_list_f32_t @code{*list}, int @code{reverse}, size_t @code{*num}) Dynamically allocate an array and fill it with the values in @code{list}. The function will return a pointer to the allocated array and put the number of elements in the array into the @code{num} pointer. If @code{reverse} has a non-zero value, the array will be filled in the inverse of the order of elements in @code{list}. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. @end deftypefun @deftypefun void gal_list_f32_free (gal_list_f32_t @code{*list}) Free every node in @code{list}. @end deftypefun @node List of double, List of void, List of float, Linked lists @subsubsection List of @code{double} Double precision floating point numbers can accurately store real number until 15.9 decimals and consume 8 bytes (64-bits) of memory, see @ref{Numeric data types}. This level of precision makes them very good for serious processing in the middle of a program's execution: in many cases, the propagation of errors will still be insignificant compared to actual observational errors in a data set. But since they consume 8 bytes and more CPU processing power, they are often not the best choice for storing and transferring of data. @deftp {Type (C @code{struct})} gal_list_f64_t A single node in a list containing a 64-bit double precision @code{double} value: see @ref{Numeric data types}. @example typedef struct gal_list_f64_t @{ double v; struct gal_list_f64_t *next; @} gal_list_f64_t; @end example @end deftp @deftypefun void gal_list_f64_add (gal_list_f64_t @code{**list}, double @code{value}) Add a new node (containing @code{value}) to the top of the @code{list} of @code{double}s and update @code{list}. Here is one short example of initializing and adding elements to a string list: @example gal_list_f64_t *dlist=NULL; gal_list_f64_add(&dlist, 3.8129395763193); gal_list_f64_add(&dlist, 1.239378923931e-20); @end example @end deftypefun @deftypefun {double} gal_list_f64_pop (gal_list_f64_t @code{**list}) Pop the top element of @code{list} and return the value. This function will also change @code{list} to point to the next node in the list. If @code{*list==NULL}, then this function will return @code{GAL_BLANK_FLOAT64} (NaN, see @ref{Library blank values}). @end deftypefun @deftypefun size_t gal_list_f64_number (gal_list_f64_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun void gal_list_f64_print (gal_list_f64_t @code{*list}) Print the values within each node of @code{*list} on the standard output in the same order that they are stored. Each floating point number is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, its best to make your own implementation with a better, more user-friendly format. For example, in the following code snippet. You can also modify it to print all values in one line, and etc, depending on the context of your program. @example size_t i; gal_list_f64_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Node %zu: %f\n", i, tmp->v); @end example @end deftypefun @deftypefun void gal_list_f64_reverse (gal_list_f64_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun {double *} gal_list_f64_to_array (gal_list_f64_t @code{*list}, int @code{reverse}, size_t @code{*num}) Dynamically allocate an array and fill it with the values in @code{list}. The function will return a pointer to the allocated array and put the number of elements in the array into the @code{num} pointer. If @code{reverse} has a non-zero value, the array will be filled in the inverse of the order of elements in @code{list}. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. @end deftypefun @deftypefun void gal_list_f64_free (gal_list_f64_t @code{*list}) Free every node in @code{list}. @end deftypefun @node List of void, Ordered list of size_t, List of double, Linked lists @subsubsection List of @code{void *} In C, @code{void *} is the most generic pointer. Usually pointers are associated with the type of content they point to. For example @code{int *} means a pointer to an integer. This ancillary information about the contents of the memory location is very useful for the compiler, catching bad errors and also documentation (it helps the reader see what the address in memory actually contains). However, @code{void *} is just a raw address (pointer), it contains no information on the contents it points to. These properties make the @code{void *} very useful when you want to treat the contents of an address in different ways. You can use the @code{void *} list defined in this section and its function on any kind of data: for example you can use it to keep a list of custom data structures that you have built for your own separate program. Each node in the list can keep anything and this gives you great versatility. But in using @code{void *}, please beware that ``with great power comes great responsibility''. @deftp {Type (C @code{struct})} gal_list_void_t A single node in a list containing a @code{void *} pointer. @example typedef struct gal_list_void_t @{ void *v; struct gal_list_void_t *next; @} gal_list_void_t; @end example @end deftp @deftypefun void gal_list_void_add (gal_list_void_t @code{**list}, void @code{*value}) Add a new node (containing @code{value}) to the top of the @code{list} of @code{void *}s and update @code{list}. Here is one short example of initializing and adding elements to a string list: @example gal_list_void_t *vlist=NULL; gal_list_f64_add(&vlist, some_pointer); gal_list_f64_add(&vlist, another_pointer); @end example @end deftypefun @deftypefun {void *} gal_list_void_pop (gal_list_void_t @code{**list}) Pop the top element of @code{list} and return the value. This function will also change @code{list} to point to the next node in the list. If @code{*list==NULL}, then this function will return @code{NULL}. @end deftypefun @deftypefun size_t gal_list_void_number (gal_list_void_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun void gal_list_void_reverse (gal_list_void_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun void gal_list_void_free (gal_list_void_t @code{*list}) Free every node in @code{list}. @end deftypefun @node Ordered list of size_t, Doubly linked ordered list of size_t, List of void, Linked lists @subsubsection Ordered list of @code{size_t} Positions/sizes in a dataset are conventionally in the @code{size_t} type (see @ref{List of size_t}) and it sometimes occurs that you want to parse and read the values in a specific order. For example you want to start from one pixel and add pixels to the list based on their distance to that pixel. So that ever time you pop an element from the list, you know it is the nearest that has not yet been studied. The @code{gal_list_osizet_t} type and its functions in this section are designed to facilitate such operations. @deftp {Type (C @code{struct})} gal_list_osizet_t @cindex @code{size_t} Each node in this singly-linked list contains a @code{size_t} value and a floating point value. The floating point value is used as a reference to add new nodes in a sorted manner. At any moment, the first popped node in this list will have the smallest @code{tosort} value, and subsequent nodes will have larger to values. @end deftp @example typedef struct gal_list_osizet_t @{ size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_osizet_t *next; @} gal_list_osizet_t; @end example @deftypefun void gal_list_osizet_add (gal_list_osizet_t @code{**list}, size_t @code{value}, float @code{tosort}) Allocate space for a new node in @code{list}, and store @code{value} and @code{tosort} into it. The new node will not necessarily be at the ``top'' of the list. If @code{*list!=NULL}, then the @code{tosort} values of existing nodes is inspected and the given node is placed in the list such that the top element (which is popped with @code{gal_list_osizet_pop}) has the smallest @code{tosort} value. @end deftypefun @deftypefun size_t gal_list_osizet_pop (gal_list_osizet_t @code{**list}, float @code{*sortvalue}) Pop a node from the top of @code{list}, return the node's @code{value} and put its sort value in the space that @code{sortvalue} points to. This function will also free the allocated space for the popped node and after this function, @code{list} will point to the next node (which has a larger @code{tosort} element). @end deftypefun @deftypefun void gal_list_osizet_to_sizet_free (gal_list_osizet_t @code{*in}, gal_list_sizet_t @code{**out}) Convert the ordered list of @code{size_t}s into an ordinary @code{size_t} linked list. This can be useful when all the elements have been added and you just need to pop-out elements and don't care about the sorting values any more. After the conversion is done, this function will free the input list. Note that the @code{out} list doesn't have to be empty. If it already contains some nodes, the new nodes will be added on top of them. @end deftypefun @node Doubly linked ordered list of size_t, List of gal_data_t, Ordered list of size_t, Linked lists @subsubsection Doubly linked ordered list of @code{size_t} An ordered list of indexs is required in many contexts, one example was discussed at the beginning of @ref{Ordered list of size_t}. But the list that was introduced there only has one point of entry: you can always only parse the list from smallest to largest. In this section, the doubly-linked @code{gal_list_dosizet_t} node is defined which will allow us to parse the values in ascending or descending order. @deftp {Type (C @code{struct})} gal_list_dosizet_t @cindex @code{size_t} Doubly-linked, ordered @code{size_t} list node structure. Each node in this Doubly-linked list contains a @code{size_t} value and a floating point value. The floating point value is used as a reference to add new nodes in a sorted manner. In the functions here, this linked list can be pointed to by two pointers (largest and smallest) with the following format: @example largest pointer | NULL <-- (v0,s0) <--> (v1,s1) <--> ... (vn,sn) --> NULL | smallest pointer @end example At any moment, the two pointers will point to the nodes containing the ``largest'' and ``smallest'' values and the rest of the nodes will be sorted. This is useful when an unknown number of nodes are being added continuously and during the operations it is important to have the nodes in a sorted format. @example typedef struct gal_list_dosizet_t @{ size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_dosizet_t *prev; struct gal_list_dosizet_t *next; @} gal_list_dosizet_t; @end example @end deftp @deftypefun void gal_list_dosizet_add (gal_list_dosizet_t @code{**largest}, gal_list_dosizet_t @code{**smallest}, size_t @code{value}, float @code{tosort}) Allocate space for a new node in @code{list}, and store @code{value} and @code{tosort} into it. If the list is empty, both @code{largest} and @code{smallest} must be @code{NULL}. @end deftypefun @deftypefun size_t gal_list_dosizet_pop_smallest (gal_list_dosizet_t @code{**largest}, gal_list_dosizet_t @code{**smallest}, float @code{tosort}) Pop the value with the smallest reference from the doubly linked list and store the reference into the space pointed to by @code{tosort}. Note that even though only the smallest pointer will be popped, when there was only one node in the list, the @code{largest} pointer also has to change, so we need both. @end deftypefun @deftypefun void gal_list_dosizet_print (gal_list_dosizet_t @code{*largest}, gal_list_dosizet_t @code{*smallest}) Print the largest and smallest values sequentially until the list is parsed. @end deftypefun @deftypefun void gal_list_dosizet_to_sizet (gal_list_dosizet_t @code{*in}, gal_list_sizet_t @code{**out}) Convert the doubly linked, ordered @code{size_t} list into a singly-linked list of @code{size_t}. @end deftypefun @deftypefun void gal_list_dosizet_free (gal_list_dosizet_t @code{*largest}) Free the doubly linked, ordered @code{sizet_t} list. @end deftypefun @node List of gal_data_t, , Doubly linked ordered list of size_t, Linked lists @subsubsection List of @code{gal_data_t} Gnuastro's generic data container has a @code{next} element which enables it to be used as a singly-linked list (see @ref{Generic data container}). The ability to connect the different data containers offers great advantages. For example each column in a table in an independent dataset: with its own name, units, numeric data type (see @ref{Numeric data types}). Another application is in Tessellating an input dataset into separate tiles or only studying particular regions, or tiles, of a larger dataset (see @ref{Tessellation} and @ref{Tessellation library}). Each independent tile over the dataset can be connected to the others as a linked list and thus any number of tiles can be represented with one variable. @deftypefun void gal_list_data_add (gal_data_t @code{**list}, gal_data_t @code{*newnode}) Add an already allocated dataset (@code{newnode}) to top of @code{list}. Note that if @code{newnode->next!=NULL} (@code{newnode} is itself a list), then @code{list} will be added to its end. In this example multiple images are linked together as a list: @example size_t minmapsize=-1; gal_data_t *tmp, *list=NULL; tmp = gal_fits_img_read("file1.fits", "1", minmapsize, 0, 0); gal_list_data_add( &list, tmp ); tmp = gal_fits_img_read("file2.fits", "1", minmapsize, 0, 0); gal_list_data_add( &list, tmp ); @end example @end deftypefun @deftypefun void gal_list_data_add_alloc (gal_data_t @code{**list}, void @code{*array}, uint8_t @code{type}, size_t @code{ndim}, size_t @code{*dsize}, struct wcsprm @code{*wcs}, int @code{clear}, size_t @code{minmapsize}, char @code{*name}, char @code{*unit}, char @code{*comment}) Allocate a new dataset (with @code{gal_data_alloc} in @ref{Dataset size and allocation}) and put it as the first element of @code{list}. Note that if this is the first node to be added to the list, @code{list} must be @code{NULL}. @end deftypefun @deftypefun {gal_data_t *} gal_list_data_pop (gal_data_t @code{**list}) Pop the top node from @code{list} and return it. @end deftypefun @deftypefun void gal_list_data_reverse (gal_data_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun size_t gal_list_data_number (gal_data_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun void gal_list_data_free (gal_data_t @code{*list}) Free all the datasets in @code{list} along with all the allocated spaces in each. @end deftypefun @node FITS files, World Coordinate System, Linked lists, Gnuastro library @subsection FITS files (@file{fits.h}) @cindex FITS @cindex CFITSIO The FITS format is the most common format to store data (images and tables) in astronomy. The CFITSIO library already provides a very good low-level collection of functions for manipulating FITS data. The low-level nature of CFITSIO is defined for versatility and portability. As a result, even a simple a basic operation, like reading an image or table column into memory, will require a special sequence of CFITSIO function calls which can be inconvenient and buggy to manage in separate locations. Therefore Gnuastro library provides wrappers for CFITSIO functions to make it much easier to read/write/modify FITS file data, header keywords and extensions. Hence, if you feel these functions don't exactly do what you want, we strongly recommend reading the CFITSIO manual to use its great features directly. All the functions and macros introduced in this section are declared in @file{gnuastro/fits.h}. When you include this header, you are also including CFITSIO's @file{fitsio.h} header. So you don't need to explicitly include @file{fitsio.h} anymore and can freely use any of its macros or functions in your code along with those discussed here. @menu * FITS macros errors filenames:: General macros, errors and checking names. * CFITSIO and Gnuastro types:: Conversion between FITS and Gnuastro types. * FITS HDUs:: Opening and getting information about HDUs. * FITS header keywords:: Reading and writing FITS header keywords. * FITS arrays:: Reading and writing FITS images/arrays. * FITS tables:: Reading and writing FITS tables. @end menu @node FITS macros errors filenames, CFITSIO and Gnuastro types, FITS files, FITS files @subsubsection FITS Macros, errors and filenames Some general constructs provided by Gnuastro's FITS handling functions are discussed here. In particular there are several useful functions about FITS file names. @deffn Macro GAL_FITS_MAX_NDIM The maximum number of dimensions a dataset can have in FITS format, according to the FITS standard this is 999. @end deffn @deftypefun void gal_fits_io_error (int @code{status}, char @code{*message}) If @code{status} is non-zero, this function will print the CFITSIO error message corresponding to status, print @code{message} (optional) in the next line and abort the program. If @code{message==NULL}, it will print a default string after the CFITSIO error. @end deftypefun @deftypefun int gal_fits_name_is_fits (char @code{*name}) If the @code{name} is an acceptable CFITSIO FITS filename return @code{1} (one), otherwise return @code{0} (zero). The currently acceptable FITS suffixes are @file{.fits}, @file{.fit}, @file{.fits.gz}, @file{.fits.Z}, @file{.imh}, @file{.fits.fz}. IMH is the IRAF format which is acceptable to CFITSIO. @end deftypefun @deftypefun int gal_fits_suffix_is_fits (char @code{*suffix}) Similar to @code{gal_fits_name_is_fits}, but only for the suffix. The suffix doesn't have to start with `@key{.}': this function will return @code{1} (one) for both @code{fits} and @code{.fits}. @end deftypefun @deftypefun {char *} gal_fits_name_save_as_string (char @code{*filename}, char @code{*hdu}) If the name is a FITS name, then put a @code{(hdu: ...)} after it and return the string. If it isn't a FITS file, just print the name. Note that the space is allocated. This function is useful when you want to report a random file to the user which may be FITS or not (for a FITS file, simply the filename is not enough, the HDU is also necessary). @end deftypefun @node CFITSIO and Gnuastro types, FITS HDUs, FITS macros errors filenames, FITS files @subsubsection CFITSIO and Gnuastro types Both Gnuastro and CFITSIO have special identifiers for each type that they accept. Gnuastro's type identifiers are fully described in @ref{Library data types} and are usable for all kinds of datasets (images, table columns and etc) as part of Gnuastro's @ref{Generic data container}. However, following the FITS standard, CFITSIO has different identifiers for images and tables. Following CFITSIO's own convention, we will use @code{bitpix} for image type identifiers and @code{datatype} for its internal identifiers (and mainly used in tables). The functions introduced in this section can be used to convert between CFITSIO and Gnuastro's type identifiers. One important issue to consider is that CFITSIO's types are not fixed width (for example @code{long} may be 32-bits or 64-bits on different systems). However, Gnuastro's types are defined by their width. These functions will use information on the host system to do the proper conversion, so it strongly recommended to use these functions for portability of your code and not to assume a fixed correspondence between CFITSIO and Gnuastro's types. @deftypefun uint8_t gal_fits_bitpix_to_type (int @code{bitpix}) Return the Gnuastro type identifier that corresponds to CFITSIO's @code{bitpix} on this system. @end deftypefun @deftypefun int gal_fits_type_to_bitpix (uint8_t @code{type}) Return the CFITSIO @code{bitpix} value that corresponds to Gnuastro's @code{type}. @end deftypefun @deftypefun char gal_fits_type_to_bin_tform (uint8_t @code{type}) Return the FITS standard binary table @code{TFORM} character that corresponds to Gnuastro's @code{type}. @end deftypefun @deftypefun int gal_fits_type_to_datatype (uint8_t @code{type}) Return the CFITSIO @code{datatype} that corresponds to Gnuastro's @code{type} on this machine. @end deftypefun @deftypefun uint8_t gal_fits_datatype_to_type (int @code{datatype}, int @code{is_table_column}) Return Gnuastro's type identifier that corresponds to the CFITSIO @code{datatype}. Note that when dealing with CFITSIO's @code{TLONG}, the fixed width type differs between tables and images. So if the corresponding dataset is a table column, put a non-zero value into @code{is_table_column}. @end deftypefun @node FITS HDUs, FITS header keywords, CFITSIO and Gnuastro types, FITS files @subsubsection FITS HDUs A FITS file can contain multiple HDUs/extensions. The functions in this section can be used to get basic information about the extensions or open them. Note that @code{fitsfile} is defined in CFITSIO's @code{fitsio.h} which is automatically included by Gnuastro's @file{gnuastro/fits.h}. @deftypefun {fitsfile *} gal_fits_open_to_write (char @code{*filename}) If @file{filename} exists, open it and return the @code{fitsfile} pointer that corresponds to it. If @file{filename} doesn't exist, the file will be created which contains a blank first extension and the pointer to its next extension will be returned. @end deftypefun @deftypefun size_t gal_fits_hdu_num (char @code{*filename}) Return the number of HDUs/extensions in @file{filename}. @end deftypefun @deftypefun int gal_fits_hdu_format (char @code{*filename}, char @code{*hdu}) Return the format of the HDU as one of CFITSIO's recognized macros: @code{IMAGE_HDU}, @code{ASCII_TBL}, or @code{BINARY_TBL}. @end deftypefun @deftypefun {fitsfile *} gal_fits_hdu_open (char @code{*filename}, char @code{*hdu}, int @code{iomode}) Open the HDU/extension @code{hdu} from @file{filename} and return a pointer to CFITSIO's @code{fitsfile}. @code{iomode} determines how the FITS file will be opened using CFITSIO's macros: @code{READONLY} or @code{READWRITE}. The string in @code{hdu} will be appended to @file{filename} in square brackets so CFITSIO only opens this extension. You can use any formatting for the @code{hdu} that is acceptable to CFITSIO. See the description under @option{--hdu} in @ref{Input output options} for more. @end deftypefun @deftypefun {fitsfile *} gal_fits_hdu_open_format (char @code{*filename}, char @code{*hdu}, int @code{img0_tab1}) Open (in read-only format) the @code{hdu} HDU/extension of @file{filename} as an image or table. When @code{img0_tab1} is @code{0}(zero) but the HDU is a table, this function will abort with an error. It will also abort with an error when @code{img0_tab1} is @code{1} (one), but the HDU is an image. A FITS HDU may contain both tables or images. When your program needs one of these formats, you can call this function so if the user provided the wrong HDU/file, it will abort and inform the user that the file/HDU is has the wrong format. @end deftypefun @node FITS header keywords, FITS arrays, FITS HDUs, FITS files @subsubsection FITS header keywords Each FITS extension/HDU contains a raw dataset which can either be a table or an image along with some header keywords. The keywords can be used to store meta-data about the actual dataset. The functions in this section describe Gnuastro's high-level functions for reading and writing FITS keywords. Similar to all Gnuastro's FITS-related functions, these functions are all wrappers for CFITSIO's low-level functions. The necessary meta-data (header keywords) for a particular dataset are commonly numerous, it is much more efficient to list them in one variable and call the reading/writing functions once. Hence the functions in this section use linked lists, a thorough introduction to them is given in @ref{Linked lists}. To reading FITS keywords, these functions use a list of Gnuastro's generic dataset format that is discussed in @ref{List of gal_data_t}. To write FITS keywords we define the @code{gal_fits_list_key_t} node that is defined below. @deftp {Type (C @code{struct})} gal_fits_list_key_t @cindex Linked list @cindex last-in-first-out @cindex first-in-first-out Structure for writing FITS keywords. This structure is used for one keyword and you don't need to set all elements. With the @code{next} element, you can link it to another keyword thus creating a linked list to add any number of keywords easily and at any step during your program (see @ref{Linked lists} for an introduction on lists). See the functions below for adding elements to the list. @example typedef struct gal_fits_list_key_t @{ int kfree; /* ==1, free name. */ int vfree; /* ==1, free value. */ int cfree; /* ==1, free comment. */ uint8_t type; /* Keyword value type. */ char *keyname; /* Keyword Name. */ void *value; /* Keyword value. */ char *comment; /* Keyword comment. */ char *unit; /* Keyword unit. */ struct gal_fits_list_key_t *next; /* Next keyword. */ @} gal_fits_list_key_t; @end example @end deftp @deftypefun {void *} gal_fits_key_img_blank (uint8_t @code{type}) Returns a pointer to an allocated space for the FITS @code{BLANK} header keyword when the input array has a type of @code{type}. According to the FITS standard: ``If the @code{BSCALE} and @code{BZERO} keywords do not have the default values of 1.0 and 0.0, respectively, then the value of the @code{BLANK} keyword must equal the actual value in the FITS data array that is used to represent an undefined pixel and not the corresponding physical value''. Therefore a special @code{BLANK} value is needed for datasets containing signed 8-bit integers and unsigned 16-bit, 32-bit and 64-bit integers (types that are defined with @code{BSCALE} and @code{BZERO} in the FITS standard). @end deftypefun @deftypefun void gal_fits_key_clean_str_value (char @code{*string}) Remove the single quotes and possible extra spaces around the keyword values that CFITSIO returns when reading a string keyword. CFITSIO doesn't remove the two single quotes around the string value of a keyword. Hence the strings it reads are like: @code{'value '}, or @code{'some_very_long_value'}. To use the value during your processing, it is commonly necessary to remove the single quotes (and possible extra spaces). This function will do this within the allocated space of the string. @end deftypefun @deftypefun void gal_fits_key_read_from_ptr (fitsfile @code{*fptr}, gal_data_t @code{*keysll}, int @code{readcomment}, int @code{readunit}) Read the list of keyword values from a FITS pointer. The input should be a linked list of Gnuastro's generic data container (@code{gal_data_t}). Before calling this function, you just have to set the @code{name} and desired @code{type} values of each node in the list to the keyword you want it to keep the value of. The given @code{name} value will be directly passed to CFITSIO to read the desired keyword name. This function will allocate space to keep the value. If @code{readcomment} and @code{readunit} are non-zero, this function will also try to read the possible comments and units of the keyword. Here is one example of using this function: @example /* Allocate an array of datasets. */ gal_data_t *keysll=gal_data_array_calloc(N); /* Use the array as a list.*/ for(i=0;i0) and used as the keyword name. The FITS standard sets a maximum length for the value of a keyword. This creates problems with file names (which include directories). Because file names/addresses can become very long. Therefore, when @code{filename} is longer than the maximum length of a FITS keyword value, this function will break it into several keywords (breaking up the string on directory separators). @end deftypefun @deftypefun void gal_fits_key_write_wcsstr (fitsfile @code{*fptr}, char @code{*wcsstr}, int @code{nkeyrec}) Write the WCS header string (produced with WCSLIB's @code{wcshdo} function) into the CFITSIO @code{fitsfile} pointer. @code{nkeyrec} is the number of FITS header keywords in @code{wcsstr}. This function will put a few blank keyword lines along with a comment @code{WCS information} before writing each keyword record. @end deftypefun @deftypefun void gal_fits_key_write (fitsfile @code{*fptr}, gal_fits_list_key_t @code{**keylist}) Write the list of keywords in @code{keylist} into the CFITSIO @code{fitsfile}. @end deftypefun @deftypefun void gal_fits_key_write_version (fitsfile @code{*fptr}, gal_fits_list_key_t @code{*headers}, char @code{*program_name}) Write or update (all the) keyword(s) in @code{headers} into the FITS pointer, but also the date, name of your program (@code{program_name}), along with the versions of CFITSIO, WCSLIB (when available), GSL, Gnuastro, and (the possible) commit information into the header as described in @ref{Output headers}. Since the data processing depends on the versions of the libraries you have used, it is strongly recommended to include this information in every FITS output. @code{gal_fits_img_write} and @code{gal_fits_tab_write} will automatically use this function. @end deftypefun @node FITS arrays, FITS tables, FITS header keywords, FITS files @subsubsection FITS arrays (images) Images (or multi-dimensional arrays in general) are one of the common data formats that is stored in FITS files. Only one image may be stored in each FITS HDU/extension. The functions described here can be used to get the information of, read, or write images in FITS files. @deftypefun void gal_fits_img_info (fitsfile @code{*fptr}, int @code{*type}, size_t @code{*ndim}, size_t @code{**dsize}, char @code{**name}, char @code{**unit}) Read the type (see @ref{Library data types}), number of dimensions, and size along each dimension of the CFITSIO @code{fitsfile} into the @code{type}, @code{ndim}, and @code{dsize} pointers respectively. If @code{name} and @code{unit} are not @code{NULL} (point to a @code{char *}), then if the image has a name and units, the respective string will be put in these pointers. @end deftypefun @deftypefun {gal_data_t *} gal_fits_img_read (char @code{*filename}, char @code{*hdu}, size_t @code{minmapsize}, size_t @code{hstartwcs}, size_t @code{hendwcs}) Read the contents of the @code{hdu} extension/HDU of @code{filename} into a Gnuastro generic data container (see @ref{Generic data container}) and return it. If the necessary space is larger than @code{minmapsize}, then don't keep the data in RAM, but in a file on the HDD/SSD. For more on @code{minmapsize} see the description under the same name in @ref{Generic data container}. The @code{hstartwcs} and @code{hendwcs} arguments are the starting and ending header keywords to search for WCS information, if no limit is needed, set them to zero. For more on these two options, please see the description of @code{gal_wcs_read_fitsptr} in @ref{World Coordinate System}. @end deftypefun @deftypefun {gal_data_t *} gal_fits_img_read_to_type (char @code{*inputname}, char @code{*inhdu}, uint8_t @code{type}, size_t @code{minmapsize}, ) Read the contents of the @code{hdu} extension/HDU of @code{filename} into a Gnuastro generic data container (see @ref{Generic data container}) of type @code{type} and return it. This is just a wrapper around @code{gal_fits_img_read} (to read the image/array of any type) and @code{gal_data_copy_to_new_type_free} (to convert it to @code{type} and free the initially read dataset). See the description there for more. @end deftypefun @cindex NaN @cindex Convolution kernel @cindex Kernel, convolution @deftypefun {gal_data_t *} gal_fits_img_read_kernel (char @code{*filename}, char @code{*hdu}, size_t @code{minmapsize}) Read the @code{hdu} of @code{filename} as a convolution kernel. A convolution kernel must have an odd size along all dimensions, it must not have blank (NaN in floating point types) values and must be flipped around the center to make the proper convolution (see @ref{Convolution process}). If there are blank values, this function will change the blank values to @code{0.0}. If the input image doesn't have the other two requirements, this function will abort with an error describing the condition to the user. The finally returned dataset will have a @code{float32} type. @end deftypefun @deftypefun {fitsfile *} gal_fits_img_write_to_ptr (gal_data_t @code{*input}, char @code{*filename}) Write the @code{input} dataset into a FITS file named @file{filename} and return the corresponding CFITSIO @code{fitsfile} pointer. This function won't close @code{fitsfile}, so you can still add other extensions to it after this function or make other modifications. @end deftypefun @deftypefun void gal_fits_img_write (gal_data_t @code{*data}, char @code{*filename}, gal_fits_list_key_t @code{*headers}, char @code{*program_string}) Write the @code{input} dataset into the FITS file named @file{filename}. Also add the @code{headers} keywords to the newly created HDU/extension it along with your program's name (@code{program_string}). @end deftypefun @deftypefun void gal_fits_img_write_to_type (gal_data_t @code{*data}, char @code{*filename}, gal_fits_list_key_t @code{*headers}, char @code{*program_string}, int @code{type}) Convert the @code{input} dataset into @code{type}, then write it into the FITS file named @file{filename}. Also add the @code{headers} keywords to the newly created HDU/extension along with your program's name (@code{program_string}). After the FITS file is written, this function will free the copied dataset (with type @code{type}) from memory. This is just a wrapper for the @code{gal_data_copy_to_new_type} and @code{gal_fits_img_write} functions. @end deftypefun @deftypefun void gal_fits_img_write_corr_wcs_str (gal_data_t @code{*data}, char @code{*filename}, char @code{*wcsstr}, int @code{nkeyrec}, double @code{*crpix}, gal_fits_list_key_t @code{*headers}, char @code{*program_string}) Write the @code{input} dataset into @file{filename} using the @code{wcsstr} while correcting the @code{CRPIX} values. This function is mainly useful when you want to make FITS files in parallel (from one main WCS structure, with just differing CRPIX). This can happen in the following cases for example: @itemize @item When a large number of FITS images (with WCS) need to be created in parallel, it can be much more efficient to write the header's WCS keywords once at first, write them in the FITS file, then just correct the CRPIX values. @item WCSLIB's header writing function is not thread safe. So when writing FITS images in parallel, we can't write the header keywords in each thread. @end itemize @end deftypefun @node FITS tables, , FITS arrays, FITS files @subsubsection FITS tables Tables are one of the common formats of data that is stored in FITS files. Only one table may be stored in each FITS HDU/extension, but each table column must be viewed as a different dataset (with its own name, units and numeric data type for example). The only constraint of the column datasets in a table is that they must be one-dimensional and have the same number of elements as the other columns. The functions described here can be used to get the information of, read, or write columns into FITS tables. @deftypefun void gal_fits_tab_size (fitsfile @code{*fitsptr}, size_t @code{*nrows}, size_t @code{*ncols}) Read the number of rows and columns in the table within CFITSIO's @code{fitsptr}. @end deftypefun @deftypefun int gal_fits_tab_format (fitsfile @code{*fitsptr}) Return the format of the FITS table contained in CFITSIO's @code{fitsptr}. Recall that FITS tables can be in binary or ASCII formats. This function will return @code{GAL_TABLE_FORMAT_AFITS} or @code{GAL_TABLE_FORMAT_BFITS} (defined in @ref{Table input output}). If the @code{fitsptr} is not a table, this function will abort the program with an error message informing the user of the problem. @end deftypefun @deftypefun {gal_data_t *} gal_fits_tab_info (char @code{*filename}, char @code{*hdu}, size_t @code{*numcols}, size_t @code{*numrows}, int @code{*tableformat}) Store the information of each column in @code{hdu} of @code{filename} into an array of data structures with @code{numcols} elements (one data structure for each column) see @ref{Arrays of datasets}. The total number of rows in the table is also put into the memory that @code{numrows} points to. The format of the table (e.g., FITS binary or ASCII table) will be put in @code{tableformat} (macros defined in @ref{Table input output}). This function is just for column information. Therefore it only stores meta-data like column name, units and comments. No actual data (contents of the columns for example the @code{array} or @code{dsize} elements) will be allocated by this function. This is a low-level function particular to reading tables in FITS format. To be generic, it is recommended to use @code{gal_table_info} which will allow getting information from a variety of table formats based on the filename (see @ref{Table input output}). @end deftypefun @deftypefun {gal_data_t *} gal_fits_tab_read (char @code{*filename}, char @code{*hdu}, size_t @code{numrows}, gal_data_t @code{*colinfo}, gal_list_sizet_t @code{*indexll}, int @code{minmapsize}) Read the columns given in the list @code{indexll} from a FITS table into a linked list of data structures, see @ref{List of size_t} and @ref{List of gal_data_t}. If the necessary space for each column is larger than @code{minmapsize}, don't keep it in the RAM, but in a file in the HDD/SSD, see the description under the same name in @ref{Generic data container}. Note that this is a low-level function, so the output data linked list is the inverse of the input indexs linked list. It is recommended to use @code{gal_table_read} for generic reading of tables, see @ref{Table input output}. @end deftypefun @deftypefun void gal_fits_tab_write (gal_data_t @code{*cols}, gal_list_str_t @code{*comments}, int @code{tableformat}, char @code{*filename}) Write the list of datasets in @code{cols} (see @ref{List of gal_data_t}) as separate columns in a FITS table in @code{filename}. If @code{filename} already exists then this function will write the table as a new extension after all existing ones. The format of the table (ASCII or binary) may be specified with the @code{tableformat} (see @ref{Table input output}). If @code{comments!=NULL}, each node of the list of strings will be written as a @code{COMMENT} keywords in the output FITS file (see @ref{List of strings}. This is a low-level function for tables. It is recommended to use @code{gal_table_write} for generic writing of tables in a variety of formats, see @ref{Table input output}. @end deftypefun @node World Coordinate System, Text files, FITS files, Gnuastro library @subsection World Coordinate System (@file{wcs.h}) The FITS standard defines the world coordinate system (WCS) as a mechanism to associate physical values to positions within a dataset. For example, it can be used to convert pixel coordinates in an image to celestial coordinates like the right ascension and declination. The functions in this section are mainly just wrappers over CFITSIO, WCSLIB and GSL library functions to help in common applications. @deftypefun {struct wcsprm *} gal_wcs_read_fitsptr (fitsfile @code{*fptr}, size_t @code{hstartwcs}, size_t @code{hendwcs}, int @code{*nwcs}) [@strong{Not thread-safe}] Return the WCSLIB @code{wcsprm} structure that is read from the CFITSIO @code{fptr} pointer to an opened FITS file. Also put the number of coordinate representations found into the space that @code{nwcs} points to. To read the WCS structure directly from a filename, see @code{gal_wcs_read} below. After processing has finished, you can free the returned structure with WCSLIB's @code{wcsvfree} keyword: @example status = wcsvfree(&nwcs,&wcs); @end example If you don't want to search the full FITS header for WCS-related FITS keywords (for example due to conflicting keywords), but only a specific range of the header keywords you can use the @code{hstartwcs} and @code{hendwcs} arguments to specify the keyword number range (counting from zero). If @code{hendwcs} is larger than @code{hstartwcs}, then only keywords in the given range will be checked. Hence, to ignore this feature (and search the full FITS header), give both these arguments the same value. If the WCS information couldn't be read from the FITS file, this function will return a @code{NULL} pointer and put a zero in @code{nwcs}. A WCSLIB error message will also be printed in @code{stderr} if there was an error. This function is just a wrapper over WCSLIB's @code{wcspih} function which is not thread-safe. Therefore, be sure to not call this function simultaneously (over multiple threads). @end deftypefun @deftypefun {struct wcsprm *} gal_wcs_read (char @code{*filename}, char @code{*hdu}, size_t @code{hstartwcs}, size_t @code{hendwcs}, int @code{*nwcs}) [@strong{Not thread-safe}] Return the WCSLIB structure that is read from the HDU/extension @code{hdu} of the file @code{filename}. Also put the number of coordinate representations found into the space that @code{nwcs} points to. Please see @code{gal_wcs_read_fitsptr} for more. @end deftypefun @deftypefun {struct wcsprm *} gal_wcs_copy (struct wcsprm @code{*wcs}) Return a fully allocated (independent) copy of @code{wcs}. @end deftypefun @deftypefun void gal_wcs_on_tile (gal_data_t @code{*tile}) Create a WCSLIB @code{wcsprm} structure for @code{tile} using WCS parameters of the tile's allocated block dataset, see @ref{Tessellation library} for the definition of tiles. If @code{tile} already has a WCS structure, this function won't do anything. In many cases, tiles are created for internal/low-level processing. Hence for performance reasons, when creating the tiles they don't have any WCS structure. When needed, this function can be used to add a WCS structure to each tile tile by copying the WCS structure of its block and correcting the reference point's coordinates within the tile. @end deftypefun @deftypefun {double *} gal_wcs_warp_matrix (struct wcsprm @code{*wcs}) Return the Warping matrix of the given WCS structure as an array of double precision floating points. This will be the final matrix, irrespective of the type of storage in the WCS structure. Recall that the FITS standard has several methods to store the matrix. The output is an allocated square matrix with each side equal to the number of dimensions. @end deftypefun @deftypefun void gal_wcs_decompose_pc_cdelt (struct wcsprm @code{*wcs}) Decompose the @code{PCi_j} and @code{CDELTi} elements of @code{wcs}. According to the FITS standard, in the @code{PCi_j} WCS formalism, the rotation matrix elements @mymath{m_{ij}} are encoded in the @code{PCi_j} keywords and the scale factors are encoded in the @code{CDELTi} keywords. There is also another formalism (the @code{CDi_j} formalism) which merges the two into one matrix. However, WCSLIB's internal operations are apparently done in the @code{PCi_j} formalism. So its outputs are also all in that format by default. When the input is a @code{CDi_j}, WCSLIB will still read the matrix directly into the @code{PCi_j} matrix and the @code{CDELTi} values are set to @code{1} (one). This function is designed to correct such issues: after it is finished, the @code{CDELTi} values in @code{wcs} will correspond to the pixel scale, and the @code{PCi_j} will correction show the rotation. @end deftypefun @deftypefun double gal_wcs_angular_distance_deg (double @code{r1}, double @code{d1}, double @code{r2}, double @code{d2}) Return the angular distance (in degrees) between a point located at (@code{r1}, @code{d1}) to (@code{r2}, @code{d2}). All input coordinates are in degrees. The distance (along a great circle) on a sphere between two points is calculated with the equation below. @dispmath {\cos(d)=\sin(d_1)\sin(d_2)+\cos(d_1)\cos(d_2)\cos(r_1-r_2)} However, since the the pixel scales are usually very small numbers, this function won't use that direct formula. It will be use the @url{https://en.wikipedia.org/wiki/Haversine_formula, Haversine formula} which is better considering floating point errors: @dispmath{{\sin^2(d)\over 2}=\sin^2\left( {d_1-d_2\over 2} \right)+\cos(d_1)\cos(d_2)\sin^2\left( {r_1-r_2\over 2} \right)} @end deftypefun @deftypefun {double *} gal_wcs_pixel_scale (struct wcsprm @code{*wcs}) Return the pixel scale for each dimension of @code{wcs} in degrees. The output is an array of double precision floating point type with one element for each dimension. @end deftypefun @deftypefun double gal_wcs_pixel_area_arcsec2 (struct wcsprm @code{*wcs}) Return the pixel area of @code{wcs} in arcsecond squared. If the input WCS structure is not two dimensional and the units (@code{CUNIT} keywords) are not @code{deg} (for degrees), then this function will return a NaN. @end deftypefun @deftypefun {gal_data_t *} gal_wcs_world_to_img (gal_data_t @code{*coords}, struct wcsprm @code{*wcs}, int @code{inplace}) Convert the linked list of world coordinates in @code{coords} to a linked list of image coordinates given the input WCS structure. @code{coords} must be a linked list of data structures of float64 (`double') type, see@ref{Linked lists} and @ref{List of gal_data_t}. The top (first popped/read) node of the linked list must be the first WCS coordinate (RA in an image usually) and etc. Similarly, the top node of the output will be the first image coordinate (in the FITS standard). If @code{inplace} is zero, then the output will be a newly allocated list and the input list will be untouched. However, if @code{inplace} is non-zero, the output values will be written into the input's already allocated array and the returned pointer will be the same pointer to @code{coords} (in other words, you can ignore the returned value). Note that in the latter case, only the values will be changed, things like units or name (if present) will be untouched. @end deftypefun @deftypefun {gal_data_t *} gal_wcs_img_to_world (gal_data_t @code{*coords}, struct wcsprm @code{*wcs}, int @code{inplace}) Convert the linked list of image coordinates in @code{coords} to a linked list of world coordinates given the input WCS structure. See the description of @code{gal_wcs_world_to_img} for more details. @end deftypefun @node Text files, Table input output, World Coordinate System, Gnuastro library @subsection Text files (@file{txt.h}) FITS files are the primary data container in astronomy. FITS indeed as many useful features, but the most universal and portable format for data storage are plain text files. They can be viewed and edited on any text editor or even on the command-line. Therefore the functions in this section are defined to simplify reading from and writing to plain text files. Lines are one of the most basic buiding blocks (delimiters) of a text file. Some operating systems like Microsoft Windows, terminate their ASCII text lines with a carriage return character and a new-line character (two characters, also known as CRLF line terminators). While Unix-like operating systems just use a single new-line character. The functions below that read an ASCII text file are able to identify lines with both kinds of line terminators. Gnuastro defines a simple format for metadata of table columns in a plain text file that is discussed in @ref{Gnuastro text table format}. The functions to get information from, read from and write to plain text files also follow those conventions. @deffn Macro GAL_TXT_LINESTAT_INVALID @deffnx Macro GAL_TXT_LINESTAT_BLANK @deffnx Macro GAL_TXT_LINESTAT_COMMENT @deffnx Macro GAL_TXT_LINESTAT_DATAROW Status codes for lines in a plain text file that are returned by @code{gal_txt_line_stat}. Lines which have a @key{#} character as their first non-white character are considered to be comments. Lines with nothing but white space characters are considered blank. The remaining lines are considered as containing data. @end deffn @deftypefun int gal_txt_line_stat (char @code{*line}) Check the contents of @code{line} and see if it is a blank, comment, or data line. The returned values are the macros that start with @code{GAL_TXT_LINESTAT}. @end deftypefun @deftypefun {gal_data_t *} gal_txt_table_info (char @code{*filename}, size_t @code{*numcols}, size_t @code{*numrows}) Store the information of each column in @code{filename} into an array of data structures with @code{numcols} elements (one data structure for each column) see @ref{Arrays of datasets}. The total number of rows in the table is also put into the memory that @code{numrows} points to. This function is just for column information. Therefore it only stores meta-data like column name, units and comments. No actual data (contents of the columns for example the @code{array} or @code{dsize} elements) will be allocated by this function. This is a low-level function particular to reading tables in plain text format. To be generic, it is recommended to use @code{gal_table_info} which will allow getting information from a variety of table formats based on the filename (see @ref{Table input output}). @end deftypefun @deftypefun {gal_data_t *} gal_txt_table_read (char @code{*filename}, size_t @code{numrows}, gal_data_t @code{*colinfo}, gal_list_sizet_t @code{*indexll}, size_t @code{minmapsize}) Read the columns given in the list @code{indexll} from a plain text table into a linked list of data structures, see @ref{List of size_t} and @ref{List of gal_data_t}. If the necessary space for each column is larger than @code{minmapsize}, don't keep it in the RAM, but in a file on the HDD/SSD, see the description under the same name in @ref{Generic data container}. Note that this is a low-level function, so the output data list is the inverse of the input indexs linked list. It is recommended to use @code{gal_table_read} for generic reading of tables in any format, see @ref{Table input output}. @end deftypefun @deftypefun {gal_data_t *} gal_txt_image_read (char @code{*filename}, size_t @code{minmapsize}) Read the 2D plain text dataset in @code{filename} into a dataset and return the dataset. If the necessary space for the image is larger than @code{minmapsize}, don't keep it in the RAM, but in a file on the HDD/SSD, see the description under the same name in @ref{Generic data container}. @end deftypefun @deftypefun void gal_txt_write (gal_data_t @code{*cols}, gal_list_str_t @code{*comment}, char @code{*filename}) Write @code{cols} in a plain text file @code{filename}. @code{cols} may have one or two dimensions which determines the output: @table @asis @item 1D @code{cols} is treated as a column and a list of datasets (see @ref{List of gal_data_t}): every node in the list is written as one column in a table. @item 2D @code{cols} is a two dimensional array, it cannot be treated as a list (only one 2D array can currently be written to a text file). So if @code{cols->next!=NULL} the next nodes in the list are ignored and will not be written. @end table If @code{filename} already exists this function will abort with an error and will not write over the existing file. Please make sure if the file exists or not and take the appropriate action before calling this function. If @code{comments!=NULL}, a @code{#} will be put at the start of each node of the list of strings and will be written in the file before the column meta-data in @code{filename} (see @ref{List of strings}). This is a low-level function for tables. It is recommended to use @code{gal_table_write} for generic writing of tables in a variety of formats, see @ref{Table input output}. @end deftypefun @node Table input output, Arithmetic on datasets, Text files, Gnuastro library @subsection Table input output (@file{table.h}) Tables are a collection of one dimensional datasets that are packed together into one file. They are the single most common format to store high-level (processed) information, hence they play a very important role in Gnuastro. For a more thorough introduction, please see @ref{Table}. Gnuastro's Table program, and all the other programs that can read from and write into tables, use the functions of this section for reading and writing their input/output tables. For a simple demonstration of using the constructs introduced here, see @ref{Library demo - reading and writing table columns}. Currently only plain text (see @ref{Gnuastro text table format}) and FITS (ASCII and binary) tables are supported by Gnuastro. However, the low-level table infra-structure is written such that accommodating other formats is also possible and in future releases more formats will hopefully be supported. Please don't hesitate to suggest your favorite format so it can be implemented when possible. @deffn Macro GAL_TABLE_DEF_WIDTH_STR @deffnx Macro GAL_TABLE_DEF_WIDTH_INT @deffnx Macro GAL_TABLE_DEF_WIDTH_LINT @deffnx Macro GAL_TABLE_DEF_WIDTH_FLT @deffnx Macro GAL_TABLE_DEF_WIDTH_DBL @deffnx Macro GAL_TABLE_DEF_PRECISION_INT @deffnx Macro GAL_TABLE_DEF_PRECISION_FLT @deffnx Macro GAL_TABLE_DEF_PRECISION_DBL @cindex @code{printf} The default width and precision for generic types to use in writing numeric types into a text file (plain text and FITS ASCII tables). When the dataset doesn't have any pre-set width and precision (see @code{disp_width} and @code{disp_precision} in @ref{Generic data container}) these will be directly used in C's @code{printf} command to write the number as a string. @end deffn @deffn Macro GAL_TABLE_DISPLAY_FMT_STRING @deffnx Macro GAL_TABLE_DISPLAY_FMT_DECIMAL @deffnx Macro GAL_TABLE_DISPLAY_FMT_UDECIMAL @deffnx Macro GAL_TABLE_DISPLAY_FMT_OCTAL @deffnx Macro GAL_TABLE_DISPLAY_FMT_HEX @deffnx Macro GAL_TABLE_DISPLAY_FMT_FLOAT @deffnx Macro GAL_TABLE_DISPLAY_FMT_EXP @deffnx Macro GAL_TABLE_DISPLAY_FMT_GENERAL The display format used in C's @code{printf} to display data of different types. The @code{_STRING} and @code{_DECIMAL} are unique for printing strings and signed integers, they are mainly here for completeness. However, unsigned integers and floating points can be displayed in multiple formats: @table @asis @item Unsigned integer For unsigned integers, it is possible to choose from @code{_UDECIMAL} (unsigned decimal), @code{_OCTAL} (octal notation, for example @code{125} in decimal will be displayed as @code{175}), and @code{_HEX} (hexadecimal notation, for example @code{125} in decimal will be displayed as @code{7D}). @item Floating point For floating point, it is possible to display the number in @code{_FLOAT} (floating point, for example @code{1500.345}), @code{_EXP} (exponential, for example @code{1.500345e+03}), or @code{_GENERAL} which is the best of the two for the given number. @end table @end deffn @deffn Macro GAL_TABLE_FORMAT_INVALID @deffnx Macro GAL_TABLE_FORMAT_TXT @deffnx Macro GAL_TABLE_FORMAT_AFITS @deffnx Macro GAL_TABLE_FORMAT_BFITS All the current acceptable table formats to Gnuastro. The @code{AFITS} and @code{BFITS} represent FITS ASCII tables and FITS Binary tables. You can use these anywhere you see the @code{tableformat} variable. @end deffn @deffn Macro GAL_TABLE_SEARCH_INVALID @deffnx Macro GAL_TABLE_SEARCH_NAME @deffnx Macro GAL_TABLE_SEARCH_UNIT @deffnx Macro GAL_TABLE_SEARCH_COMMENT When the desired column is not a number, these values determine if the string to match, or regular expression to search, be in the @emph{name}, @emph{units} or @emph{comments} of the column meta data. These values should be used for the @code{searchin} variables of the functions. @end deffn @deftypefun {gal_data_t *} gal_table_info (char @code{*filename}, char @code{*hdu}, size_t @code{*numcols}, size_t @code{*numrows}, int @code{*tableformat}) Store the information of each column in a table (either as a text file or as a FITS table) into an array of data structures with @code{numcols} structures (one data structure for each column). The number of rows is stored in the space that @code{numrows} points to. The format of the table (e.g., ascii text file, or FITS binary or ASCII table) will be put in @code{tableformat} (macros defined above). If the filename is not a FITS file, then @code{hdu} will not be used (can be @code{NULL}). Note that other than the character strings (column name, units and comments), nothing in the data structure(s) will be allocated by this function for the actual data (e.g., the `array' or `dsize' elements). This function is just for column information (meta-data), not column contents. @end deftypefun @deftypefun void gal_table_print_info (gal_data_t @code{*allcols}, size_t @code{numcols}, size_t @code{numrows}) This program will print the column information for all the columns (output of @code{gal_table_info}). The output is in the same format as this command with Gnuastro Table program (see @ref{Table}): @example $ asttable --info table.fits @end example @end deftypefun @deftypefun {gal_data_t *} gal_table_read (char @code{*filename}, char @code{*hdu}, gal_list_str_t @code{*cols}, int @code{searchin}, int @code{ignorecase}, int @code{minmapsize}, size_t @code{colmatch}) Read the specified columns in a text file (named @code{filename}) into a linked list of data structures. If the file is FITS, then @code{hdu} will also be used, otherwise, @code{hdu} is ignored. @cindex AWK @cindex GNU AWK The information to search for columns should be specified by the @code{cols} list of strings (see @ref{List of strings}). The string in each node of the list may be a number, an exact match to a column name, or a regular expression (in GNU AWK format) enclosed in @code{/ /}. The @code{searchin} value must be one of the macros defined above. If @code{cols} is NULL, then this function will read the full table. The output is an individually allocated list of datasets (see @ref{List of gal_data_t}) with the same order of the @code{cols} list. Note that one column node in the @code{cols} list might give multiple columns (for example from regular expressions), in this case, the order of output columns that correspond to that one input, are in order of the table (which column was read first). So the first requested column is the first popped data structure and so on. if @code{colmatch!=NULL}, it is assumed to be an array that has at least the same number of elements as nodes in the @code{cols} list. The number of columns that matched each input column will be stored in each element. @end deftypefun @cindex Git @deftypefun void gal_table_comments_add_intro (gal_list_str_t @code{**comments}, char @code{*program_string}, time_t @code{*rawtime}) Add some basic information to the list of @code{comments}. This basic information includes the following information @itemize @item If the program is run in a Git version controlled directory, Git's description is printed (see description under @code{COMMIT} in @ref{Output headers}). @item The calendar time that is stored in @code{rawtime} (@code{time_t} is C's calendar time format defined in @file{time.h}). You can calculate the time in this format with the following expressions: @example time_t rawtime; time(&rawtime); @end example @item The name of your program in @code{program_string}. If it is @code{NULL}, this line is ignored. @end itemize @end deftypefun @deftypefun void gal_table_write (gal_data_t @code{*cols}, gal_list_str_t @code{*comments}, int @code{tableformat}, char @code{*filename}, char @code{*extname}) Write the @code{cols} list of datasets into a table in @code{filename} (see @ref{List of gal_data_t}). The format of the table can be determined with @code{tableformat} that accepts the macros defined above. If @code{comments} is not @code{NULL}, then the list of comments will also be printed into the output table. When the output table is a plain text file, each node's string will be printed after a @code{#} (so it can be considered as a comment) and in FITS table they will follow a @code{COMMENT} keyword. If @file{filename} is a FITS file, the table extension that will be written will have the name @code{extname}. If a file named @file{filename} already exists, the operation depends on the type of output. When @file{filename} is a FITS file, the table will be added as a new extension after all existing ones. If @file{filename} is a plain text file, this function will abort with an error. @end deftypefun @deftypefun void gal_table_write_log (gal_data_t @code{*logll}, char @code{*program_string}, time_t @code{*rawtime}, gal_list_str_t @code{*comments}, char @code{*filename}, int @code{quiet}) Write the @code{logll} list of datasets into a table in @code{filename} (see @ref{List of gal_data_t}). This function is just a wrapper around @code{gal_table_comments_add_intro} and @code{gal_table_write} (see above). If @code{quiet} is non-zero, this function will print a message saying that the @code{filename} has been created. @end deftypefun @node Arithmetic on datasets, Tessellation library, Table input output, Gnuastro library @subsection Arithmetic on datasets (@file{arithmetic.h}) When the dataset's type and other information are already known, any programming language (including C) provides some very good tools for various operations (including arithmetic operations like addition) on the dataset with a simple loop. However, as an author of a program, making assumptions about the type of data, its dimensions and other basic characteristics will come with a large processing burden. For example if you always read your data as double precision floating points for a simple operation like addition with an integer constant, you will be wasting a lot of CPU and memory when the input dataset is @code{int32} type for example (see @ref{Numeric data types}). This overhead may be small for small images, but as you scale your process up and work with hundred/thousands of files that can be very large, this overhead will take a significant portion of the processing power. The functions and macros in this section are designed precisely for this purpose: to allow you to do any of the defined operations on any dataset with no overhead (in the native type of the dataset). Gnuastro's Arithmetic program uses the functions and macros of this section, so please also have a look at the @ref{Arithmetic} program and in particular @ref{Arithmetic operators} for a better description of the operators discussed here. The main function of this library is @code{gal_arithmetic} that is described below. It can take an arbitrary number of arguments as operands (depending on the operator, similar to @code{printf}). Its first two arguments are integers specifying the flags and operator. So first we will review the constants for the recognized flags and operators and discuss them, then introduce the actual function. @deffn Macro GAL_ARITHMETIC_INPLACE @deffnx Macro GAL_ARITHMETIC_FREE @deffnx Macro GAL_ARITHMETIC_NUMOK @deffnx Macro GAL_ARITHMETIC_FLAGS_ALL @cindex Bitwise Or Bit-wise flags to pass onto @code{gal_arithmetic} (see below). To pass multiple flags, use the bitwise-or operator, for example @code{GAL_ARITHMETIC_INPLACE | GAL_ARITHMETIC_FREE}. @code{GAL_ARITHMETIC_FLAGS_ALL} is a combination of all flags to shorten your code if you want all flags activated. Each flag is described below: @table @code @item GAL_ARITHMETIC_INPLACE Do the operation in-place (in the input dataset, thus modifying it) to improve CPU and memory usage. If this flag is used, after @code{gal_arithmetic} finishes, the input dataset will be modified. It is thus useful if you have no more need for the input after the operation. @item GAL_ARITHMETIC_FREE Free (all the) input dataset(s) after the operation is done. Hence the inputs are no longer usable after @code{gal_arithmetic}. @item GAL_ARITHMETIC_NUMOK It is acceptable to use a number and an array together. For example if you want to add all the pixels in an image with a single number you can pass this flag to avoid having to allocate a constant array the size of the image (with all the pixels having the same number). @end table @end deffn @deffn Macro GAL_ARITHMETIC_OP_PLUS @deffnx Macro GAL_ARITHMETIC_OP_MINUS @deffnx Macro GAL_ARITHMETIC_OP_MULTIPLY @deffnx Macro GAL_ARITHMETIC_OP_DIVIDE @deffnx Macro GAL_ARITHMETIC_OP_LT @deffnx Macro GAL_ARITHMETIC_OP_LE @deffnx Macro GAL_ARITHMETIC_OP_GT @deffnx Macro GAL_ARITHMETIC_OP_GE @deffnx Macro GAL_ARITHMETIC_OP_EQ @deffnx Macro GAL_ARITHMETIC_OP_NE @deffnx Macro GAL_ARITHMETIC_OP_AND @deffnx Macro GAL_ARITHMETIC_OP_OR Binary operators (requiring two operands) that accept datasets of any recognized type (see @ref{Numeric data types}). When @code{gal_arithmetic} is called with any of these operators, it expects two datasets as arguments. For a full description of these operators with the same name, see @ref{Arithmetic operators}. The first dataset/operand will be put on the left of the operator and the second will be put on the right. The output type of the first four is determined from the input types (largest type of the inputs). The rest (which are all conditional operators) will output a binary @code{uint8_t} (or @code{unsigned char}) dataset with values of either @code{0} (zero) or @code{1} (one). @end deffn @deffn Macro GAL_ARITHMETIC_OP_NOT The logical NOT operator. When @code{gal_arithmetic} is called with this operator, it only expects one operand (dataset), since this is a unary operator. The output is @code{uint8_t} (or @code{unsigned char}) dataset of the same size as the input. Any non-zero element in the input will be @code{0} (zero) in the output and any @code{0} (zero) will have a value of @code{1} (one). @end deffn @deffn Macro GAL_ARITHMETIC_OP_ISBLANK A unary operator with output that is @code{1} for any element in the input that is blank, and @code{0} for any non-blank element. When @code{gal_arithmetic} is called with this operator, it will only expect one input dataset. The output dataset will have @code{uint8_t} (or @code{unsigned char}) type. @code{gal_arithmetic} with this operator is just a wrapper for the @code{gal_blank_flag} function of @ref{Library blank values} and this operator is just included for completeness in arithmetic operations. So in your program, it might be easier to just call @code{gal_blank_flag}. @end deffn @deffn Macro GAL_ARITHMETIC_OP_WHERE The three-operand @emph{where} operator thoroughly discussed in @ref{Arithmetic operators}. When @code{gal_arithmetic} is called with this operator, it will only expect three input datasets: the first (which is the same as the returned dataset) is the array that will be modified. The second is the condition dataset (that must have a @code{uint8_t} or @code{unsigned char} type), and the third is the value to be used if condition is non-zero. As a result, note that the order of operands when calling @code{gal_arithmetic} with @code{GAL_ARITHMETIC_OP_WHERE} is the opposite of running Gnuastro's Arithmetic program with the @code{where} operator (see @ref{Arithmetic}). This is because the latter uses the reverse-Polish notation which isn't necessary when calling a function (see @ref{Reverse polish notation}). @end deffn @deffn Macro GAL_ARITHMETIC_OP_SQRT @deffnx Macro GAL_ARITHMETIC_OP_LOG @deffnx Macro GAL_ARITHMETIC_OP_LOG10 Unary operator functions for calculating the square root (@mymath{\sqrt{i}}), @mymath{ln(i)} and @mymath{log(i)} mathematic operators on each element of the input dataset. The output will have the same type as the input, so if your inputs are integer types be careful. If you want your output to be floating point but your input is an integer type, you can convert the input to a floating point type with @code{gal_data_copy_to_new_type} or @code{gal_data_copy_to_new_type_free}(see @ref{Copying datasets}). @end deffn @deffn Macro GAL_ARITHMETIC_OP_MINVAL @deffnx Macro GAL_ARITHMETIC_OP_MAXVAL @deffnx Macro GAL_ARITHMETIC_OP_NUMVAL @deffnx Macro GAL_ARITHMETIC_OP_SUMVAL @deffnx Macro GAL_ARITHMETIC_OP_MEANVAL @deffnx Macro GAL_ARITHMETIC_OP_STDVAL @deffnx Macro GAL_ARITHMETIC_OP_MEDIANVAL Unary operand statistical operators that will return a single value for datasets of any size. These are just wrappers around similar functions in @ref{Statistical operations} and are included in @code{gal_arithmetic} only for completeness (to use easily in @ref{Arithmetic}). In your programs, it will probably be easier if you use those @code{gal_statistics_} functions directly. @end deffn @deffn Macro GAL_ARITHMETIC_OP_ABS Unary operand absolute-value operator. @end deffn @deffn Macro GAL_ARITHMETIC_OP_MIN @deffnx Macro GAL_ARITHMETIC_OP_MAX @deffnx Macro GAL_ARITHMETIC_OP_NUM @deffnx Macro GAL_ARITHMETIC_OP_SUM @deffnx Macro GAL_ARITHMETIC_OP_MEAN @deffnx Macro GAL_ARITHMETIC_OP_STD @deffnx Macro GAL_ARITHMETIC_OP_MEDIAN Multi-operand statistical operations. When @code{gal_arithmetic} is called with any of these operators, it will expect only a single operand that will be interpretted as a list of datasets (see @ref{List of gal_data_t}. The output will be a single dataset with each of its elements replaced by the respective statistical operation on the whole list. See the discussion under the @code{min} operator in @ref{Arithmetic operators}. @end deffn @deffn Macro GAL_ARITHMETIC_OP_POW Binary operator to-power operator. When @code{gal_arithmetic} is called with any of these operators, it will expect two operands: raising the first by the second. This operator only accepts floating point inputs and the output is also floating point. @end deffn @deffn Macro GAL_ARITHMETIC_OP_BITAND @deffnx Macro GAL_ARITHMETIC_OP_BITOR @deffnx Macro GAL_ARITHMETIC_OP_BITXOR @deffnx Macro GAL_ARITHMETIC_OP_BITLSH @deffnx Macro GAL_ARITHMETIC_OP_BITRSH @deffnx Macro GAL_ARITHMETIC_OP_MODULO Binary integer-only operand operators. These operators are only defined on integer data types. When @code{gal_arithmetic} is called with any of these operators, it will expect two operands: the first is put on the left of the operator and the second on the right. The ones starting with @code{BIT} are the respective bit-wise operators in C and @code{MODULO} is the modulo/remainder operator. For a discussion on these operators, please see @ref{Arithmetic operators}. The output type is determined from the input types and C's internal conversions: it is strongly recommended that both inputs have the same type (any integer type), otherwise the bit-wise behavior will be determined by your compiler. @end deffn @deffn Macro GAL_ARITHMETIC_OP_BITNOT The unary bit-wise NOT operator. When @code{gal_arithmetic} is called with any of these operators, it will expect one operand of an integer type and preform the bitwise-NOT operation on it. The output will have the same type as the input. @end deffn @deffn Macro GAL_ARITHMETIC_OP_TO_UINT8 @deffnx Macro GAL_ARITHMETIC_OP_TO_INT8 @deffnx Macro GAL_ARITHMETIC_OP_TO_UINT16 @deffnx Macro GAL_ARITHMETIC_OP_TO_INT16 @deffnx Macro GAL_ARITHMETIC_OP_TO_UINT32 @deffnx Macro GAL_ARITHMETIC_OP_TO_INT32 @deffnx Macro GAL_ARITHMETIC_OP_TO_UINT64 @deffnx Macro GAL_ARITHMETIC_OP_TO_INT64 @deffnx Macro GAL_ARITHMETIC_OP_TO_FLOAT32 @deffnx Macro GAL_ARITHMETIC_OP_TO_FLOAT64 Unary type-conversion operators. When @code{gal_arithmetic} is called with any of these operators, it will expect one operand and convert it to the requested type. Note that with these operators, @code{gal_arithmetic} is just a wrapper over the @code{gal_data_copy_to_new_type} or @code{gal_data_copy_to_new_type_free} that are discussed in @code{Copying datasets}. It accepts these operators only for completeness and easy usage in @ref{Arithmetic}. So in your programs, it might be preferable to directly use those functions. @end deffn @deftypefun {gal_data_t *} gal_arithmetic (int operator, int flags, ...) Do the arithmetic operation of @code{operator} on the given operands (the third argument and any further argument). Certain special conditions can also be specified with the @code{flag} operator. The acceptable values for @code{operator} are defined in the macros above. @code{gal_arithmetic} is a multi-argument function (like C's @code{printf}). In other words, the number of necessary arguments is not fixed and depends on the value to @code{operator}. Here are a few examples showing this variability: @example out_1=gal_arithmetic(GAL_ARITHMETIC_OP_LOG, 0, in_1); out_2=gal_arithmetic(GAL_ARITHMETIC_OP_PLUS, 0, in_1, in_2); out_3=gal_arithmetic(GAL_ARITHMETIC_OP_WHERE, 0, in_1, in_2, in_3); @end example The number of necessary operands for each operator (and thus the number of necessary arguments to @code{gal_arithmetic}) are described above under each operator. @end deftypefun @node Tessellation library, Bounding box, Arithmetic on datasets, Gnuastro library @subsection Tessellation library (@file{tile.h}) In many contexts, it is desirable to slice the dataset into subsets or tiles (overlapping or not). In such a way that you can work on each tile independently. One method would be to copy that region to a separate allocated space, but in many contexts this isn't necessary and in fact can be a big burden on CPU/Memory usage. The @code{block} pointer in Gnuastro's @ref{Generic data container} is defined for such situations: where allocation is not necessary. You just want to read the data or write to it independently (or in coordination with) other regions of the dataset. Added with parallel processing, this can greatly improve the time/memory consumption. See the figure below for example: assume the @code{larger} dataset is a contiguous block of memory that you are interpreting as a 2D array. But you only want to work on the smaller @code{tile} region. @example larger --------------------------------- | | | tile | | ---------- | | | | | | |_ | | | |*| | | | ---------- | | tile->block = larger | |_ | |*| | --------------------------------- @end example To use @code{gal_data_t}'s @code{block} concept, you allocate a @code{gal_data_t *tile} which is initialized with the pointer to the first element in the sub-array (as its @code{array} argument). Note that this is not necessarily the first element in the larger array. You can set the size of the tile along with the initialization as you please. Recall that, when given a non-@code{NULL} pointer as @code{array}, @code{gal_data_initialize} (and thus @code{gal_data_alloc}) do not allocate any space and just uses the given pointer for the new @code{array} element of the @code{gal_data_t}. So your @code{tile} data structure will not be pointing to a separately allocated space. After the allocation is done, you just point @code{tile->block} to the @code{larger} dataset which hosts the full block of memory. Where relevant, Gnuastro's library functions will check the @code{block} pointer of their input dataset to see how to deal with dimensions and increments so they can always remain within the tile. The tools introduced in this section are designed to help in defining and working with tiles that are created in this manner. Since the block structure is defined as a pointer, arbitrary levels of tessellation/grid-ing are possible (@code{tile->block} may itself be a tile in an even larger allocated space). Therefore, just like a linked-list (see @ref{Linked lists}), it is important to have the @code{block} pointer of the largest (allocated) dataset set to @code{NULL}. Normally, you won't have to worry about this, because @code{gal_data_initialize} (and thus @code{gal_data_alloc}) will set the @code{block} element to @code{NULL} by default, just remember not to change it. You can then only change the @code{block} element for the tiles you define over the allocated space. Below, we will first review constructs for @ref{Independent tiles} and then define the current approach to fully tessellating a dataset (or covering every pixel/data-element with a non-overlapping tile grid in @ref{Tile grid}. This approach to dealing with parts of a larger block was inspired from a similarly named concept in the GNU Scientific Library (GSL), see its ``Vectors and Matrices'' chapter for their implementation. @menu * Independent tiles:: Work on or check independent tiles. * Tile grid:: Cover a full dataset with non-overlapping tiles. @end menu @node Independent tiles, Tile grid, Tessellation library, Tessellation library @subsubsection Independent tiles The most general application of tiles is to treat each independently, for example they may overlap, or they may not cover the full image. This section provides functions to help in checking/inspecting such tiles. In @ref{Tile grid} we will discuss functions that define/work-with a tile grid (where the tiles don't overlap and fully cover the input dataset). Therefore, the functions in this section are general and can be used for the tiles produced by that section also. @deftypefun void gal_tile_start_coord (gal_data_t @code{*tile}, size_t @code{*start_coord}) Calculate the starting coordinates of a tile in its allocated block of memory and write them in the memory that @code{start_coord} points to (which must have @code{tile->ndim} elements). @end deftypefun @deftypefun void gal_tile_start_end_coord (gal_data_t @code{*tile}, size_t @code{*start_end}, int @code{rel_block}) Put the starting and ending (end point is not inclusive) coordinates of @code{tile} into the @code{start_end} array. It is assumed that a space of @code{2*tile->ndim} has been already allocated (static or dynamic) for @code{start_end} before this function is called. @code{rel_block} (or relative-to-block) is only relevant when @code{tile} has an intermediate tile between it and the allocated space (like a channel, see @code{gal_tile_full_two_layers}). If it doesn't (@code{tile->block} points the allocated dataset), then the value to @code{rel_block} is irrelevant. When @code{tile->block} is its self a larger block and @code{rel_block} is set to 0, then the starting and ending positions will be based on the position within @code{tile->block}, not the allocated space. @end deftypefun @deftypefun {void *} gal_tile_start_end_ind_inclusive (gal_data_t @code{*tile}, gal_data_t @code{*work}, size_t @code{*start_end_inc}) Put the indexs of the first/start and last/end pixels (inclusive) in a tile into the @code{start_end} array (that must have two elements). NOTE: this function stores the index of each point, not its coordinates. It will then return the pointer to the start of the tile in the @code{work} data structure (which doesn't have to be equal to @code{tile->block}. The outputs of this function are defined to make it easy to parse over an n-dimensional tile. For example, this function is one of the most important parts of the internal processing of in @code{GAL_TILE_PARSE_OPERATE} function-like macro that is described below. @end deftypefun @deftypefun {gal_data_t *} gal_tile_series_from_minmax (gal_data_t @code{*block}, size_t @code{*minmax}, size_t @code{number}) Construct a list of tile(s) given coordinates of the minimum and maximum of each tile. The minimum and maximums are assumed to be inclusive. The returned pointer is an allocated @code{gal_data_t} array that can later be freed with @code{gal_data_array_free} (see @ref{Arrays of datasets}). Internally, each element of the output array points to the next element, so the output may also be treated as a list of datasets (see @ref{List of gal_data_t}) and passed onto the other functions described in this section. The array keeping the minimum and maximum coordinates for each tile must have the following format. So in total @code{minmax} must have @code{2*ndim*number} elements. @example | min0_d0 | min0_d1 | max0_d0 | max0_d1 | ... ... | minN_d0 | minN_d1 | maxN_d0 | maxN_d1 | @end example @end deftypefun @deftypefun {gal_data_t *} gal_tile_block (gal_data_t @code{*tile}) Return the dataset that contains @code{tile}'s allocated block of memory. If tile is immediately defined as part of the allocated block, then this is equivalent to @code{tile->block}. However, it is possible to have multiple layers of tiles (where @code{tile->block} is itself a tile). So this function is the most generic way to get to the actual allocated dataset. @end deftypefun @deftypefun size_t gal_tile_block_increment (gal_data_t @code{*block}, size_t @code{*tsize}, size_t @code{num_increment}, size_t @code{*coord}) Return the increment necessary to start at the next contiguous patch memory associated with a tile. @code{block} is the allocated block of memory and @code{tsize} is the size of the tile along every dimension. If @code{coord} is @code{NULL}, it is ignored. Otherwise, it will contain the coordinate of the start of the next contiguous patch of memory. This function is intended to be used in a loop and @code{num_increment} is the main variable to this function. For the first time you call this function, it should be @code{1}. In subsequent calls (while you are parsing a tile), it should be increased by one. @end deftypefun @deftypefun {gal_data_t *} gal_tile_block_write_const_value (gal_data_t @code{*tilevalues}, gal_data_t @code{*tilesll}, int @code{withblank}, int @code{initialize}) Write a constant value for each tile over the area it covers in an allocated dataset that is the size of @code{tile}'s allocated block of memory (found through @code{gal_tile_block} described above). The arguments to this function are: @table @code @item tilevalues This must be an array that has the same number of elements as the nodes in in @code{tilesll} and in the same order that `tilesll' elements are parsed (from top to bottom, see @ref{Linked lists}). As a result the array's number of dimensions is irrelevant, it will be parsed contiguously. @item tilesll The list of input tiles (see @ref{List of gal_data_t}). Internally, it might be stored as an array (for example the output of @code{gal_tile_series_from_minmax} described above), but this function doesn't care, it will parse the @code{next} elements to go to the next tile. This function will not pop-from or free the @code{tilesll}, it will only parse it from start to end. @item withblank If the block containing the tiles has blank elements, those blank elements will be blank in the output of this function also, hence the array will be initialized with blank values when this option is called (see below). @item initialize Initialize the allocated space with blank values before writing in the constant values. This can be useful when the tiles don't cover the full allocated block. @end table @end deftypefun @deftypefun {gal_data_t *} gal_tile_block_check_tiles (gal_data_t @code{*tilesll}) Make a copy of the memory block and fill it with the index of each tile in @code{tilesll} (counting from 0). The non-filled areas will have blank values. The output dataset will have a type of @code{GAL_TYPE_INT32} (see @ref{Library data types}). This function can be used when you want to check the coverage of each tile over the allocated block of memory. It is just a wrapper over the @code{gal_tile_block_write_const_value} (with @code{withblank} set to zero). @end deftypefun @deftypefun {void *} gal_tile_block_relative_to_other (gal_data_t @code{*tile}, gal_data_t @code{*other}) Return the pointer corresponding to the start of the region covered by @code{tile} over the @code{other} dataset. See the examples in @code{GAL_TILE_PARSE_OPERATE} for some example applications of this function. @end deftypefun @deftypefun void gal_tile_block_blank_flag (gal_data_t @code{*tilell}, size_t @code{numthreads}) Check if each tile in the list has blank values and update its @code{flag} to mark this check and its result (see @ref{Generic data container}). The operation will be done on @code{numthreads} threads. @end deftypefun @deffn {Function-like macro} GAL_TILE_PARSE_OPERATE (@code{IN}, @code{OTHER}, @code{PARSE_OTHER}, @code{CHECK_BLANK}, @code{OP}) Parse @code{IN} (which can be a tile or a fully allocated block of memory) and do the @code{OP} operation on it. @code{OP} can be any combination of C expressions. If @code{OTHER!=NULL}, @code{OTHER} will be interpretted as a dataset and this macro will allow access to its element(s) and it can optionally be parsed while parsing over @code{IN}. If @code{OTHER} is a fully allocated block of memory (not a tile), then the same region that is covered by @code{IN} within its own block will be parsed (the same starting pixel with the same number of pixels in each dimension). Hence, in this case, the blocks of @code{OTHER} and @code{IN} must have the same size. When @code{OTHER} is a tile it must have the same size as @code{IN} and parsing will start from its starting element/pixel. Also, the respective allocated blocks of @code{OTHER} and @code{IN} (if different) may have different sizes. Using @code{OTHER} (along with @code{PARSE_OTHER}), this funciton-like macro will thus enable you to parse and define your own operation on two fixed size regions in one or two blocks of memory. In the latter case, they may have different numeric datatypes, see @ref{Numeric data types}). The input arguments to this macro are explained below, the expected type of each argument are also written following the argument name: @table @code @item IN (gal_data_t) Input dataset, this can be a tile or an allocated block of memory. @item OTHER (gal_data_t) Dataset (@code{gal_data_t}) to parse along with @code{IN}. It can be @code{NULL}. In that case, @code{o} (see description of @code{OP} below) will be @code{NULL} and should not be used. If @code{PARSE_OTHER} is zero, only its first element will be used and the size of this dataset is irrelevant. When @code{OTHER} is a block of memory, it has to have the same size as the allocated block of @code{IN}. When its a tile, it has to have the same size as @code{IN}. @item PARSE_OTHER (int) Parse the other dataset along with the input. When this is non-zero and @code{OTHER!=NULL}, then the @code{o} pointer will be incremented to cover the @code{OTHER} tile at the same rate as @code{i}, see description of @code{OP} for @code{i} and @code{o}. @item CHECK_BLANK (int) If it is non-zero, then the input will be checked for blank values and @code{OP} will only be called when we are not on a blank element. @item OP Operator: this can be any number of C expressions. This macro is going to define a @code{itype *i} variable which will increment over each element of the input array/tile. @code{itype} will be replaced with the C type that corresponds to the type of @code{INPUT}. As an example, if @code{INPUT}'s type is @code{GAL_DATA_UINT16} or @code{GAL_DATA_FLOAT32}, @code{i} will be defined as @code{uint16} or @code{float} respectively. This function-like macro will also define an @code{otype *o} which you can use to access an element of the @code{OTHER} dataset (if @code{OTHER!=NULL}). @code{o} will correspond to the type of @code{OTHER} (similar to @code{itype} and @code{INPUT} discussed above). If @code{PARSE_OTHER} is non-zero, then @code{o} will also be incremented to the same index element but in the other array. You can use these along with any other variable you define before this macro to process the input and store it in the other. All variables within this function-like macro begin with @code{tpo_} except for the three variables listed above. So as long as you don't start the names of your variables with this prefix everything will be fine. Note that @code{i} (and possibly @code{o}) will be incremented once by this function-like macro, so don't increment them within @code{OP}. As a summary, the three variables you have access to within @code{OP} are: @table @code @item i Pointer to the element of @code{INPUT} that is being parsed with the proper type. @item o Pointer to the element of @code{OTHER} that is being parsed with the proper type. @code{o} can only be used if @code{OTHER!=NULL} and it will be parsed/incremented if @code{PARSE_OTHER} is non-zero. @item b Blank value in the type of @code{INPUT}. @end table @end table You can use a given tile (@code{tile} on a dataset that it was not initialized with but has the same size, let's call it @code{new}) with the following steps: @example void *tarray; gal_data_t *tblock; /* `tile->block' must be corrected AFTER `tile->array'. */ tarray = tile->array; tblock = tile->block; tile->array = gal_tile_block_relative_to_other(tile, new); tile->block = new; /* Parse and operate over this region of the `new' dataset. */ GAL_TILE_PARSE_OPERATE(tile, NULL, 0, 0, @{ YOUR_PROCESSING; @}); /* Reset `tile->block' and `tile->array'. */ tile->array=tarray; tile->block=tblock; @end example You can work on the same region of another block in one run of this function-like macro. To do that, you can make a fake tile and pass that as the @code{OTHER} argument. Below is a demonstration, @code{tile} is the actual tile that you start with and @code{new} is the other block of allocated memory. @example size_t zero=0; gal_data_t *faketile; /* Allocate the fake tile, these can be done outside a loop * (over many tiles). */ faketile=gal_data_alloc(NULL, new->type, 1, &zero, NULL, 0, -1, NULL, NULL, NULL); free(faketile->array); /* To keep things clean. */ free(faketile->dsize); /* To keep things clean. */ faketile->block = new; faketile->ndim = new->ndim; /* These can be done in a loop (over many tiles). */ faketile->size = tile->size; faketile->dsize = tile->dsize; faketile->array = gal_tile_block_relative_to_other(tile, new); /* Do your processing.... in a loop (over many tiles). */ GAL_TILE_PARSE_OPERATE(tile, faketile, 1, 1, @{ YOUR_PROCESSING_EXPRESSIONS; @}); /* Clean up (outside the loop). */ faketile->array=NULL; faketile->dsize=NULL; gal_data_free(faketile); @end example @end deffn @node Tile grid, , Independent tiles, Tessellation library @subsubsection Tile grid One very useful application of tiles is to completely cover an input dataset with tiles. Such that you know every pixel/data-element of the input image is covered by only one tile. The constructs in this section allow easy definition of such a tile structure. They will create lists of tiles that are also usable by the general tools discussed in @ref{Independent tiles}. As discussed in @ref{Tessellation}, (mainly raw) astronomical images will mostly require two layers of tessellation, one for amplifier channels which all have the same size and another (smaller tile-size) tessellation over each channel. Hence, in this section we define a general structure to keep the main parameters of this two-layer tessellation and help in benefiting from it. @deftp {Type (C @code{struct})} gal_tile_two_layer_params This is the general structure to keep all the necessary parameters for a two-layer tessellation. @example struct gal_tile_two_layer_params @{ /* Inputs */ size_t *tilesize; /*******************************/ size_t *numchannels; /* These parameters have to be */ float remainderfrac; /* filled manually before */ uint8_t workoverch; /* calling the functions in */ uint8_t checktiles; /* this section. */ uint8_t oneelempertile; /*******************************/ /* Internal parameters. */ size_t ndim; size_t tottiles; size_t tottilesinch; size_t totchannels; size_t *channelsize; size_t *numtiles; size_t *numtilesinch; char *tilecheckname; size_t *permutation; size_t *firsttsize; /* Tile and channel arrays (which are also lists). */ gal_data_t *tiles; gal_data_t *channels; @}; @end example @end deftp @deftypefun {size_t *} gal_tile_full (gal_data_t @code{*input}, size_t @code{*regular}, float @code{remainderfrac}, gal_data_t @code{**out}, size_t @code{multiple}, size_t @code{**firsttsize}) Cover the full dataset with (mostly) identical tiles and return the number of tiles created along each dimension. The regular tile size (along each dimension) is determined from the @code{regular} array. If @code{input}'s size is not an exact multiple of @code{regular} for each dimension, then the tiles touching the edges in that dimension will have a different size to fully cover every element of the input (depending on @code{remainderfrac}). The output is an array with the same dimensions as @code{input} which contains the number of tiles along each dimension. See @ref{Tessellation} for a description of its application in Gnuastro's programs and @code{remainderfrac}, just note that this function defines only one layer of tiles. This is a low-level function (independent of the @code{gal_tile_two_layer_params} structure defined above). If you want a two-layer tessellation, directly call @code{gal_tile_full_two_layers} that is described below. The input arguments to this function are: @table @code @item input The main dataset (allocated block) which you want to create a tessellation over (only used for its sizes). So @code{input} may be a tile also. @item regular The the size of the regular tiles along each of the input's dimensions. So it must have the same number of elements as the dimensions of @code{input} (or @code{input->ndim}). @item remainderfrac The significant fraction of the remainder space to see if it should be split into two and put on both sides of a dimension or not. This is thus only relevant @code{input} length along a dimension isn't an exact multiple of the regular tile size along that dimension. See @ref{Tessellation} for a more thorough discussion. @item out Pointer to the array of data structures that will keep all the tiles (see @ref{Arrays of datasets}). If @code{*out==NULL}, then the necessary space to keep all the tiles will be allocated. If not, then all the tile information will be filled from the dataset that @code{*out} points to, see @code{multiple} for more. @item multiple When @code{*out==NULL} (and thus will be allocated by this function), allocate space for @code{multiple} times the number of tiles needed. This can be very useful when you have several more identically sized @code{inputs}, and you want all their tiles to be allocated (and thus indexed) together, even though they have different @code{block} datasets (that then link to one allocated space). See the definition of channels in @ref{Tessellation} and @code{gal_tile_full_two_layers} below. @item firsttsize The size of the first tile along every dimension. This is only different from the regular tile size when @code{regular} is not an exact multiple of @code{input}'s length along every dimension. This array is allocated internally by this function. @end table @end deftypefun @deftypefun void gal_tile_full_sanity_check (char @code{*filename}, char @code{*hdu}, gal_data_t @code{*input}, struct gal_tile_two_layer_params @code{*tl}) Make sure that the input parameters (in @code{tl}, short for two-layer) correspond to the input dataset. @code{filename} and @code{hdu} are only required for error messages. Also, allocate and fill the @code{tl->channelsize} array. @end deftypefun @deftypefun void gal_tile_full_two_layers (gal_data_t @code{*input}, struct gal_tile_two_layer_params @code{*tl}) Create the two layered tessellation in @code{tl}. The general set of steps you need to take to define the two-layered tessellation over an image can be seen in the example code below. @example gal_data_t *input; struct gal_tile_two_layer_params tl; char *filename="input.fits", *hdu="1"; /* Set all the inputs shown in the structure definition. */ ... /* Read the input dataset. */ input=gal_fits_img_read(filename, hdu, -1, 0, 0); /* Do a sanity check and preparations. */ gal_tile_full_sanity_check(filename, hdu, input, &tl); /* Build the two-layer tessellation*/ gal_tile_full_two_layers(input, &tl); /* `tl.tiles' and `tl.channels' are now a lists of tiles.*/ @end example @end deftypefun @deftypefun void gal_tile_full_permutation (struct gal_tile_two_layer_params @code{*tl}) Make a permutation to allow the conversion of tile location in memory to its location in the full input dataset and put it in @code{tl->permutation}. If a permutation has already been defined for the tessellation, this function will not do anything. If permutation won't be necessary (there is only one channel or one dimension), then this function will not do anything (@code{tl->permutation} must have been initialized to @code{NULL}). When there is only one channel OR one dimension, the tiles are allocated in memory in the same order that they represent the input data. However, to make channel-independent processing possible in a generic way, the tiles of each channel are allocated contiguously. So, when there is more than one channel AND more than one dimension, the index of the tile does not correspond to its position in the grid covering the input dataset. The example below may help clarify: assume you have a 6x6 tessellation with two channels in the horizontal and one in the vertical. On the left you can see how the tile IDs correspond to the input dataset. NOTE how `03' is on the second row, not on the first after `02'. On the right, you can see how the tiles are stored in memory (and shown if you simply write the array into a FITS file for example). @example Corresponding to input In memory ---------------------- -------------- 15 16 17 33 34 35 30 31 32 33 34 35 12 13 14 30 31 32 24 25 26 27 28 29 09 10 11 27 28 29 18 19 20 21 22 23 06 07 08 24 25 26 <-- 12 13 14 15 16 17 03 04 05 21 22 23 06 07 08 09 10 11 00 01 02 18 19 20 00 01 02 03 04 05 @end example As a result, if your values are stored in same order as the tiles, and you want them in over-all memory (for example to save as a FITS file), you need to permute the values: @example gal_permutation_apply(values, tl->permutation); @end example If you have values over-all and you want them in tile-order, you can apply the inverse permutation: @example gal_permutation_apply_inverse(values, tl->permutation); @end example Recall that this is the definition of permutation in this context: @example permute: IN_ALL[ i ] = IN_MEMORY[ perm[i] ] inverse: IN_ALL[ perm[i] ] = IN_MEMORY[ i ] @end example @end deftypefun @deftypefun void gal_tile_full_values_write (gal_data_t @code{*tilevalues}, struct gal_tile_two_layer_params @code{*tl}, int @code{withblank}, char @code{*filename}, gal_fits_list_key_t @code{*keys}, char @code{*program_string}) Write one value for each tile into a file. It is important to note that the values in @code{tilevalues} must be ordered in the same manner as the tiles, so @code{tilevalues->array[i]} is the value that should be given to @code{tl->tiles[i]}. The @code{tl->permutation} array must have been initialized before calling this function with @code{gal_tile_full_permutation}. If @code{withblank} is non-zero, then block structure of the tiles will be checked and all blank pixels in the block will be blank in the final output file also. @end deftypefun @deftypefun {gal_data_t *} gal_tile_full_values_smooth (gal_data_t @code{*tilevalues}, struct gal_tile_two_layer_params @code{*tl}, size_t @code{width}, size_t @code{numthreads}) Smooth the given values with a flat kernel of the given @code{width}. This cannot be done manually because if @code{tl->workoverch==0}, tiles in different channels must not be mixed/smoothed. Also the tiles are contiguous within the channel, not within the image, see the description under @code{gal_tile_full_permutation}. @end deftypefun @deftypefun size_t gal_tile_full_id_from_coord (struct gal_tile_two_layer_params @code{*tl}, size_t @code{*coord}) Return the ID of the tile that corresponds to the coordinates @code{coord}. Having this ID, you can use the @code{tl->tiles} array to get to the proper tile or read/write a value into an array that has one value per tile. @end deftypefun @deftypefun void gal_tile_full_free_contents (struct gal_tile_two_layer_params @code{*tl}) Free all the allocated arrays within @code{tl}. @end deftypefun @node Bounding box, Polygons, Tessellation library, Gnuastro library @subsection Bounding box (@file{box.h}) Functions related to reporting a the bounding box of certain inputs are declared in @file{gnuastro/box.h}. All coordinates in this header are in the FITS format (first axis is the horizontal and the second axis is vertical). @deftypefun void gal_box_bound_ellipse_extent (double @code{a}, double @code{b}, double @code{theta_deg}, double @code{*extent}) Return the maximum extent along each dimension of the given ellipse from the center of the ellipse. Therefore this is half the extent of the box in each dimension. @code{a} is the ellipse major axis, @code{b} is the minor axis, @code{theta_deg} is the position angle in degrees. The extent in each dimension is in floating point format and stored in @code{extent} which must already be allocated before this function. @end deftypefun @deftypefun void gal_box_bound_ellipse (double @code{a}, double @code{b}, double @code{theta_deg}, long @code{*width}) Any ellipse can be enclosed into a rectangular box. The purpose of this function is to give the height and width of that box assuming the center of the ellipse is in the box center. @code{a} is the ellipse major axis, @code{b} is the minor axis, @code{theta_deg} is the position angle in degrees. The @code{width} array will contain the output size in long integer type. @code{width[0]}, and @code{width[1]} are the number of pixels along the first and second FITS axis. Since the ellipse center is assumed to be in the center of the box, all the values in @code{width} will be an odd integer. @end deftypefun @deftypefun void gal_box_border_from_center (double @code{center}, size_t @code{ndim}, long @code{*width}, long @code{*fpixel}, long @code{*lpixel}) Given the center coordinates in @code{center} and the @code{width} (along each dimension) of a box, return the coordinates of the first (@code{fpixel}) and last (@code{lpixel}) pixels. All arrays must have @code{ndim} elements (one for each dimension). @end deftypefun @deftypefun int gal_box_overlap (long @code{*naxes}, long @code{*fpixel_i}, long @code{*lpixel_i}, long @code{*fpixel_o}, long @code{*lpixel_o}, size_t @code{ndim}) An @code{ndim}-dimensional dataset of size @code{naxes} (along each dimension, in FITS order) and a box with first and last (inclusive) coordinate of @code{fpixel_i} and @code{lpixel_i} is given. This box doesn't necessarily have to lie within the dataset, it can be outside of it, or only patially overlap. This function will change the values of @code{fpixel_i} and @code{lpixel_i} to exactly cover the overlap in the input dataset's coordinates. This function will return 1 if there is an overlap and 0 if there isn't. When there is an overlap, the coordinates of the first and last pixels of the overlap will be put in @code{fpixel_o} and @code{lpixel_o}. @end deftypefun @node Polygons, Qsort functions, Bounding box, Gnuastro library @subsection Polygons (@file{polygon.h}) Polygons are commonly necessary in image processing. In Gnuastro, they are used in Crop (see @ref{Crop}) for cutting out non-rectangular regions of a image. Warp (see @ref{Warp}) uses them to warp the images into a new pixel grid. The polygon related Gnuastro library macros and functions are introduced here. In all the functions here the vertices (and points) are defined as an array. So a polygon with 4 vertices will be identified with an array of 8 elements with the first two elements keeping the 2D coordinates of the first vertice and so on. @deffn Macro GAL_POLYGON_MAX_CORNERS The largest number of vertices a polygon can have in this library. @end deffn @deffn Macro GAL_POLYGON_ROUND_ERR @cindex Round-off error We have to consider floating point round-off errors when dealing with polygons. For example we will take @code{A} as the maximum of @code{A} and @code{B} when @code{A>B-GAL_POLYGON_ROUND_ERR}. @end deffn @deftypefun void gal_polygon_ordered_corners (double @code{*in}, size_t @code{n}, size_t @code{*ordinds}) We have a simple polygon (that can result from projection, so its edges don't collide or it doesn't have holes) and we want to order its corners in an anticlockwise fashion. This is necessary for clipping it and finding its area later. The input vertices can have practically any order. The input (@code{in}) is an array containing the coordinates (two values) of each vertice. @code{n} is the number of corners. So @code{in} should have @code{2*n} elements. The output (@code{ordinds}) is an array with @code{n} elements specifying the indexs in order. This array must have been allocated before calling this function. The indexes are output for more generic usage, for example in a homographic transform (necessary in warping an image, see @ref{Warping basics}), the necessary order of vertices is the same for all the pixels. In other words, only the positions of the vertices change, not the way they need to be ordered. Therefore, this function would only be necessary once. As a summary, the input is unchanged, only @code{n} values will be put in the @code{ordinds} array. Such that calling the input coordinates in the following fashion will give an anti-clockwise order when there are 4 vertices: @example 1st vertice: in[ordinds[0]*2], in[ordinds[0]*2+1] 2nd vertice: in[ordinds[1]*2], in[ordinds[1]*2+1] 3rd vertice: in[ordinds[2]*2], in[ordinds[2]*2+1] 4th vertice: in[ordinds[3]*2], in[ordinds[3]*2+1] @end example @cindex Convex Hull @noindent The implementation of this is very similar to the Graham scan in finding the Convex Hull. However, in projection we will never have a concave polygon (the left condition below, where this algorithm will get to E before D), we will always have a convex polygon (right case) or E won't exist! @example Concave Polygon Convex Polygon D --------C D------------- C \ | E / | \E | \ | / | \ | A--------B A ----------B @end example This is because we are always going to be calculating the area of the overlap between a quadrilateral and the pixel grid or the quadrilateral its self. The @code{GAL_POLYGON_MAX_CORNERS} macro is defined so there will be no need to allocate these temporary arrays separately. Since we are dealing with pixels, the polygon can't really have too many vertices. @end deftypefun @deftypefun double gal_polygon_area (double @code{*v}, size_t @code{n}) Find the area of a polygon with vertices defined in @code{v}. @code{v} points to an array of doubles which keep the positions of the vertices such that @code{v[0]} and @code{v[1]} are the positions of the first vertice to be considered. @end deftypefun @deftypefun int gal_polygon_pin (double @code{*v}, double @code{*p}, size_t @code{n}) Return @code{1} if the point @code{p} is within the polygon whose vertices are defined by @code{v} and @code{0} otherwise. Note that the vertices of the polygon have to be sorted in an anti-clock-wise manner. @end deftypefun @deftypefun int gal_polygon_ppropin (double @code{*v}, double @code{*p}, size_t @code{n}) Similar to @code{gal_polygon_pin}, except that if the point @code{p} is on one of the edges of a polygon, this will return @code{0}. @end deftypefun @deftypefun void gal_polygon_clip (double @code{*s}, size_t @code{n}, double @code{*c}, size_t @code{m}, double @code{*o}, size_t @code{*numcrn}) Clip (find the overlap of) two polygons. This function uses the @url{https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm, Sutherland-Hodgman} polygon clipping algorithm. Note that the vertices of both polygons have to be sorted in an anti-clock-wise manner. @end deftypefun @node Qsort functions, Permutations, Polygons, Gnuastro library @subsection Qsort functions (@file{qsort.h}) The C programming language comes with the @code{qsort} (Quick sort) function. @code{qsort} is a generic function which allows you to sort any kind of data structure (not just a single number). To define greater and smaller (for sorting), @code{qsort} needs another function, even for simple numerical types. To facilitate numerical sorting for Gnuastro's programs/libraries, Gnuastro defines a function for each type's increasing and decreasing function. You can pass these functions to @code{qsort} when your array has the respective type (see @ref{Numeric data types}). @deffn {Global variable} {gal_qsort_index_arr} Pointer to a floating point array (@code{float *}) to use as a reference in @code{gal_qsort_index_float_decreasing}, see the explanation there for more. @end deffn @deftypefun int gal_qsort_index_float_decreasing (const void @code{*a}, const void @code{*b}) When passed to @code{qsort}, this function will sort a @code{size_t} array based on decreasing values in the @code{gal_qsort_index_arr} single precision floating point array. The floating point array will not be changed, it is only read. For example, if we have the following source code: @example #include #include /* qsort is defined in stdlib.h. */ #include int main (void) @{ size_t s[4]=@{0, 1, 2, 3@}; float f[4]=@{1.3,0.2,1.8,0.1@}; gal_qsort_index_arr=f; qsort(s, 4, sizeof(size_t), gal_qsort_index_float_decreasing); printf("%zu, %zu, %zu, %zu\n", s[0], s[1], s[2], s[3]); return EXIT_SUCCESS; @} @end example @noindent The output will be: @code{2, 0, 1, 3}. @end deftypefun @deftypefun int gal_qsort_TYPE_increasing (const void @code{*a}, const void @code{*b}) When passed to @code{qsort}, this function will sort an @code{TYPE} array in increasing order (first element will be the smallest). Please replace @code{TYPE} (in the function name) with one of the @ref{Numeric data types}, for example @code{gal_qsort_int32_increasing}, or @code{gal_qsort_float64_increasing}. @end deftypefun @deftypefun int gal_qsort_TYPE_decreasing (const void @code{*a}, const void @code{*b}) When passed to @code{qsort}, this function will sort an @code{TYPE} array in decreasing order (first element will be the largest). Please replace @code{TYPE} (in the function name) with one of the @ref{Numeric data types}, for example @code{gal_qsort_int32_decreasing}, or @code{gal_qsort_float64_decreasing}. @end deftypefun @node Permutations, Matching, Qsort functions, Gnuastro library @subsection Permutations (@file{permutation.h}) @cindex permutation Permutation is the technical name for re-ordering of values. The need for permutations occurs a lot during (mainly low-level) processing. To do permutation, you must provide two inputs: an array of values (that you want to re-order in place) and a permutation array which contains the new index of each element (let's call it @code{perm}). The diagram below shows the input array before and after the re-ordering. @example permute: AFTER[ i ] = BEFORE[ perm[i] ] i = 0 .. N-1 inverse: AFTER[ perm[i] ] = BEFORE[ i ] i = 0 .. N-1 @end example @cindex GNU Scientific Library The functions here are a re-implementation of the GNU Scientific Library's @code{gsl_permute} function. The reason we didn't use that function was that it uses system-specific types (like @code{long} and @code{int}) which can have different widths on different systems, hence are not easily convertible to Gnuastro's fixed width types (see @ref{Numeric data types}). There is also a separate function for each type, heavily using macros to allow a @code{base} function to work on all the types. Thus it is hard to read/understand. Hence, Gnuastro contains a re-write of their steps in a new type-agnostic method which is a single function that can work on any type. As described in GSL's source code and manual, this implementation comes from Donald Knuth's @emph{Art of computer programming} book, in the "Sorting and Searching" chapter of Volume 3 (3rd ed). Exercise 10 of Section 5.2 defines the problem and in the answers, Knuth describes the solution. So if you are interested, please have a look there for more. We are in contact with the GSL developers and in the future@footnote{Gnuastro's @url{http://savannah.gnu.org/task/?14497, Task 14497}. If this task is still ``postponed'' when you are reading this and you are interested to help, your help would be very welcome. Both Gnuastro and GSL developers are very busy, hence both would appreciate your help.} we will submit these implementations to GSL. If they are finally incorporated there, we will delete this section in future versions. @deftypefun void gal_permutation_check (size_t @code{*permutation}, size_t @code{size}) Print how @code{permutation} will re-order an array that has @code{size} elements for each element in one one line. @end deftypefun @deftypefun void gal_permutation_apply (gal_data_t @code{*input}, size_t @code{*permutation}) Apply @code{permutation} on the @code{input} dataset (can have any type), see above for the definition of permutation. @end deftypefun @deftypefun void gal_permutation_apply_inverse (gal_data_t @code{*input}, size_t @code{*permutation}) Apply the inverse of @code{permutation} on the @code{input} dataset (can have any type), see above for the definition of permutation. @end deftypefun @node Matching, Statistical operations, Permutations, Gnuastro library @subsection Matching (@file{match.h}) Matching is often necessary when the measurements have been done using different instruments, different software or different configurations of the same software. The functions in this part of Gnuastro's library will be growing to allow matching of images and finding a match between different catalogs (register them). Currently it only provides the The high-level measurements are stored in tables with positions (commonly in RA and Dec with units of degrees). @deftypefun {gal_data_t *} gal_match_coordinates (gal_data_t @code{*coord1}, gal_data_t @code{*coord2}, double @code{*aperture}, int @code{sorted_by_first}, int @code{inplace}, size_t @code{minmapsize}, size_t @code{*nummatched}) Return the permutations that when applied, the first @code{nummatched} rows of both inputs match with each other (are the nearest within the given aperture). The two inputs (@code{coord1} and @code{coord2}) must be @ref{List of gal_data_t}. Each @code{gal_data_t} node in the list should be a single dimensional dataset (column in a table). The dimensions of the coordinates is determined by the number of @code{gal_data_t} nodes in the two input lists (which must be equal). Note that the number of rows (or the number of elements in each @code{gal_data_t}) in the columns of @code{coord1} and @code{coord2} can be different. The matching aperture is defined by the @code{aperture} array. If several points of one catalog lie within this aperture of a point in the other, the nearest is defined as the match. In a 2D situation (where the input lists have two nodes), for the most generic case, it must have three elements: the major axis length, axis ratio and position angle (see @ref{Defining an ellipse}). If @code{aperture[1]==1}, the aperture will be a circle of radius @code{aperture[0]} and the third value won't be used. When the aperture is an ellipse, distances between the points are also calculated in the respective elliptical distances (@mymath{r_{el}} in @ref{Defining an ellipse}). To speed up the search, this function will sort the input coordinates by their first column (first axis). If @emph{both} are already sorted by their first column, you can avoid the sorting step by giving a non-zero value to @code{sorted_by_first}. When sorting is necessary and @code{inplace} is non-zero, the actual input columns will be sorted. Otherwise, an internal copy of the inputs will be made, used (sorted) and later freed before returning. Therefore, when @code{inplace==0}, inputs will remain untouched, but this function will take more time and memory. If internal allocation is necessary and the space is larger than @code{minmapsize}, the space will be not allocated in the RAM, but in a file, see description of @option{--minmapsize} in @ref{Processing options}. The number of matches will be put in the space pointed by @code{nummatched}. If there wasn't any match, this function will return @code{NULL}. If match(s) were found, a list with three @code{gal_data_t} nodes will be returned. The top two nodes in the list are the permutations that must be applied to the first and second inputs respectively. After applying the permutations, the top @code{nummatched} elements will match with each other. The third node is the distances between the respective match. Note that the three nodes of the list are all one-dimensional (a column) and can have different lengths. @cartouche @noindent @strong{Output permutations ignore internal sorting}: the output permutations will correspond to the initial inputs. Therefore, even when @code{inplace!=0} (and this function re-arranges the inputs), the output permutation will correspond to original (possibly non-sorted) inputs. The reason for this is that you rarely want the actual positional columns after the match. Usually, you also have other columns (measurements, for example magnitudes) for higher-level processing after the match (that correspond to the input order before sorting). Once you have the permutations, they can be applied to those other columns (see @ref{Permutations}) and the higher-level processing can continue. @end cartouche When you read the coordinates from a table using @code{gal_table_read} (see @ref{Table input output}), and only ask for the coordinate columns, the inputs to this function are the returned @code{gal_data_t *} from two different tables. @end deftypefun @node Statistical operations, Binary datasets, Matching, Gnuastro library @subsection Statistical operations (@file{statistics.h}) After reading a dataset into memory from a file or fully simulating it with another process, the most common processes that will be done on it are statistical operations to let you quantify different aspects of the data. the functions in this section describe Gnuastro's current set of tools for this job. All these functions can work on any numeric data type natively (see @ref{Numeric data types}) and can also work on tiles over a dataset. Hence the inputs and outputs are in Gnuastro's @ref{Generic data container}. @deffn Macro GAL_STATISTICS_SIG_CLIP_MAX_CONVERGE The maximum number of clips, when @mymath{\sigma}-clipping should be done by convergence. If the clipping does not converge before making this many clips, all sigma-clipping outputs will be NaN. @end deffn @deffn Macro GAL_STATISTICS_MODE_GOOD_SYM The minimum acceptable symmetricity of the mode calculation. If the symmetricity of the derived mode is less than this value, all the returned values by @code{gal_statistics_mode} will have a value of NaN. @end deffn @deffn Macro GAL_STATISTICS_SORTED_NOT @deffnx Macro GAL_STATISTICS_SORTED_INCREASING @deffnx Macro GAL_STATISTICS_SORTED_DECREASING Macros used to identify if the dataset is sorted and increasing, sorted and decreasing or not sorted. @end deffn @deffn Macro GAL_STATISTICS_BINS_INVALID @deffnx Macro GAL_STATISTICS_BINS_REGULAR @deffnx Macro GAL_STATISTICS_BINS_IRREGULAR Macros used to identify if the regularity of the bins when defining bins. @end deffn @cindex Number @deftypefun {gal_data_t *} gal_statistics_number (gal_data_t @code{*input}) Return a single-element @code{uint64} dataset containing the number of non-blank elements in @code{input}. @end deftypefun @cindex Minimum @deftypefun {gal_data_t *} gal_statistics_minimum (gal_data_t @code{*input}) Return a single-element dataset containing the minimum non-blank value in @code{input}. The numerical datatype of the output is the same as @code{input}. @end deftypefun @cindex Maximum @deftypefun {gal_data_t *} gal_statistics_maximum (gal_data_t @code{*input}) Return a single-element dataset containing the maximum non-blank value in @code{input}. The numerical datatype of the output is the same as @code{input}. @end deftypefun @cindex Sum @deftypefun {gal_data_t *} gal_statistics_sum (gal_data_t @code{*input}) Return a single-element (@code{double} or @code{float64}) dataset containing the sum of the non-blank values in @code{input}. @end deftypefun @cindex Mean @cindex Average @deftypefun {gal_data_t *} gal_statistics_mean (gal_data_t @code{*input}) Return a single-element (@code{double} or @code{float64}) dataset containing the mean of the non-blank values in @code{input}. @end deftypefun @cindex Standard deviation @deftypefun {gal_data_t *} gal_statistics_std (gal_data_t @code{*input}) Return a single-element (@code{double} or @code{float64}) dataset containing the standard deviation of the non-blank values in @code{input}. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_mean_std (gal_data_t @code{*input}) Return a two-element (@code{double} or @code{float64}) dataset containing the mean and standard deviation of the non-blank values in @code{input}. The first element of the returned dataset is the mean and the second is the standard deviation. This function will calculate both values in one pass over the dataset. Hence when both the mean and standard deviation of a dataset are necessary, this function is much more efficient than calling @code{gal_statistics_mean} and @code{gal_statistics_std} separately. @end deftypefun @cindex Median @deftypefun {gal_data_t *} gal_statistics_median (gal_data_t @code{*input}, int @code{inplace}) Return a single-element dataset containing the median of the non-blank values in @code{input}. The numerical datatype of the output is the same as @code{input}. Calculating the median involves sorting the dataset and removing blank values, for better performance (and less memory usage), you can give a non-zero value to the @code{inplace} argument. In this case, the sorting and removal of blank elements will be done directly on the input dataset. However, after this function the original dataset may have changed (if it wasn't sorted or had blank values). @end deftypefun @cindex Quantile @deftypefun size_t gal_statistics_quantile_index (size_t @code{size}, double @code{quantile}) Return the index of the element that has a quantile of @code{quantile} assuming the dataset has @code{size} elements. @end deftypefun @deftypefun size_t gal_statistics_quantile (gal_data_t @code{*input}, double @code{quantile}, int @code{inplace}) Return a single-element dataset containing the value with in a quantile @code{quantile} of the non-blank values in @code{input}. The numerical datatype of the output is the same as @code{input}. See @code{gal_statistics_median} for a description of @code{inplace}. @end deftypefun @deftypefun size_t gal_statistics_quantile_function_index (gal_data_t @code{*input}, gal_data_t @code{*value}, int @code{inplace}) Return the index of the quantile function (inverse quantile) of @code{input} at @code{value}. In other words, this function will return the index of the nearest element (of a sorted and non-blank) @code{input} to @code{value}. See @code{gal_statistics_median} for a description of @code{inplace}. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_quantile_function (gal_data_t @code{*input}, gal_data_t @code{*value}, int @code{inplace}) Return a single-element (@code{double} or @code{float64}) dataset containing the quantile function of the non-blank values in @code{input} at @code{value}. In other words, this function will return the quantile of @code{value} in @code{input}. See @code{gal_statistics_median} for a description of @code{inplace}. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_mode (gal_data_t @code{*input}, float @code{mirrordist}, int @code{inplace}) Return a four-element (@code{double} or @code{float64}) dataset that contains the mode of the @code{input} distribution. This function implements the non-parametric algorithm to find the mode that is described in Appendix C of @url{https://arxiv.org/abs/1505.01664, Akhlaghi and Ichikawa [2015]}. In short it compares the actual distribution and its ``mirror distribution'' to find the mode. In order to be efficient, you can determine how far the comparison goes away from the mirror through the @code{mirrordist} parameter (think of it as a multiple of sigma/error). See @code{gal_statistics_median} for a description of @code{inplace}. The output array has the following elements (in the given order, note that counting in C starts from 0). @example array[0]: mode array[1]: mode quantile. array[2]: symmetricity. array[3]: value at the end of symmetricity. @end example @end deftypefun @deftypefun {gal_data_t *} gal_statistics_mode_mirror_plots (gal_data_t @code{*input}, gal_data_t @code{*value}, size_t @code{numbins}, int @code{inplace}, double @code{*mirror_val}) Make a mirrored histogram and cumulative frequency plot (with @code{numbins}) with the mirror distribution of the @code{input} with a value at @code{value}. The output is a list of data structures (see @ref{List of gal_data_t}): the first is the bins with one bin at the mirror point, the second is the histogram with a maximum of one and the third is the cumulative frequency plot (with a maximum of one). @end deftypefun @deftypefun int gal_statistics_is_sorted (gal_data_t @code{*input}) Return the respective sort macro (see above) for the @code{input} dataset. @end deftypefun @deftypefun void gal_statistics_sort_increasing (gal_data_t @code{*input}) Sort the input dataset (in place) in an increasing order. @end deftypefun @deftypefun void gal_statistics_sort_decreasing (gal_data_t @code{*input}) Sort the input dataset (in place) in a decreasing order. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_no_blank_sorted (gal_data_t @code{*input}, int @code{inplace}) Remove all the blanks and sort the input dataset. If @code{inplace} is non-zero this will happen on the input dataset (and the output will be the same as the input). However, if @code{inplace} is zero, this function will allocate a new copy of the dataset that is sorted and has no blank values. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_regular_bins (gal_data_t @code{*input}, gal_data_t @code{*inrange}, size_t @code{numbins}, double @code{onebinstart}) Generate an array of regularly spaced elements as a 1D array (column) of type @code{double} (i.e., @code{float64}, it has to be double to account for small differences on the bin edges). The input arguments are described below @table @code @item input The dataset you want to apply the bins to. This is only necessary if the range argument is not complete, see below. If @code{inrange} has all the necessary information, you can pass a @code{NULL} pointer for this. @item inrange This dataset keeps the desired range along each dimension of the input data structure, it has to be in @code{float} (i.e., @code{float32}) type. @itemize @item If you want the full range of the dataset (in any dimensions, then just set @code{inrange} to @code{NULL} and the range will be specified from the minimum and maximum value of the dataset (@code{input} cannot be @code{NULL} in this case). @item If there is one element for each dimension in range, then it is viewed as a quantile (Q), and the range will be: `Q to 1-Q'. @item If there are two elements for each dimension in range, then they are assumed to be your desired minimum and maximum values. When either of the two are NaN, the minimum and maximum will be calculated for it. @end itemize @item numbins The number of bins: must be larger than 0. @item onebinstart A desired value for onebinstart. Note that with this option, the bins won't start and end exactly on the given range values, it will be slightly shifted to accommodate this request. @end table @end deftypefun @deftypefun {gal_data_t *} gal_statistics_histogram (gal_data_t @code{*input}, gal_data_t @code{*bins}, int @code{normalize}, int @code{maxone}) Make a histogram of all the elements in the given dataset with bin values that are defined in the @code{inbins} structure (see @code{gal_statistics_regular_bins}). @code{inbins} is not mandatory, if you pass a @code{NULL} pointer, the bins structure will be built within this function based on the @code{numbins} input. As a result, when you have already defined the bins, @code{numbins} is not used. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_cfp (gal_data_t @code{*input}, gal_data_t @code{*bins}, int @code{normalize}) Make a cumulative frequency plot (CFP) of all the elements in @code{input} with bin values that are defined in the @code{bins} structure (see @code{gal_statistics_regular_bins}). The CFP is built from the histogram: in each bin, the value is the sum of all previous bins in the histogram. Thus, if you have already calculated the histogram before calling this function, you can pass it onto this function as the data structure in @code{bins->next} (see @code{List of gal_data_t}). If @code{bin->next!=NULL}, then it is assumed to be the histogram. If it is @code{NULL}, then the histogram will be calculated internally and freed after the job is finished. When a histogram is given and it is normalized, the CFP will also be normalized (even if the normalized flag is not set here): note that a normalized CFP's maximum value is 1. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_sigma_clip (gal_data_t @code{*input}, float @code{multip}, float @code{param}, int @code{inplace}, int @code{quiet}) Apply @mymath{\sigma}-clipping on a given dataset and return a dataset that contains the results. For a description of @mymath{\sigma}-clipping see @ref{Sigma clipping}. @code{multip} is the multiple of the standard deviation (@mymath{\sigma} that is used to define outliers in each round of clipping). The role of @code{param} is determined based on its value. If @code{param} is larger than @code{1} (one), it must be an integer and will be interpretted as the number clips to do. If it is less than @code{1} (one), it is interpretted as the tolerance level to stop the iteration. The output dataset has the following elements with a @code{GAL_TYPE_FLOAT32} type: @example array[0]: Number of points used. array[1]: Median. array[2]: Mean. array[3]: Standard deviation. @end example @end deftypefun @node Binary datasets, Convolution functions, Statistical operations, Gnuastro library @subsection Binary datasets (@file{binary.h}) @cindex Thresholding @cindex Binary datasets @cindex Dataset: binary Binary datasets only have two (usable) values: 0 (also known as background) or 1 (also known as foreground). They are created after some binary classification is applied to the dataset. The most common is thresholding: for example in an image, pixels with a value above the threshold are given a value of 1 and those with a value less than the threshold are assigned a value of 0. @cindex Connectivity @cindex Immediate neighbors @cindex Neighbors, immediate Since there is only two values, in the processing of binary images, you are usually concerned with the positioning of an element and its vicinity (neighbors). When a dataset has more than one dimension, multiple classes of immediate neighbors (that are touching the element) can be defined for each data-element. To separate these different classes of immediate neighbors, we define @emph{connectivity}. The classification is done by the distance from element center to the neighbor's center. The nearest immediate neighbors have a connectivity of 1, the second nearest class of neighbors have a connectivity of 2 and so on. In total, the largest possible connectivity for data with @code{ndim} dimensions is @code{ndim}. For example in a 2D dataset, 4-connected neighbors (that share an edge and have a distance of 1 pixel) have a connectivity of 1. The other 4 neighbors that only share a vertice (with a distance of @mymath{\sqrt{2}} pixels) have a connectivity of 2. Conventionally, the class of connectivity-2 neighbors also includes the connectivity 1 neighbors, so for example we call them 8-connected neighbors in 2D datasets. Ideally, one bit is sufficient for each element of a binary dataset. However, CPUs are not designed to work on individual bits, the smallest unit of memory addresses is a byte (containing 8 bits on modern CPUs). Therefore, in Gnuastro, the type used for binary dataset is @code{uint8_t} (see @ref{Numeric data types}). Although it does take 8-times more memory, this choice offers much better performance and the some extra (useful) features. The advantage of using a full byte for each element of a binary dataset is that you can also have other values (that will be ignored in the processing). One such common ``other'' value in real datasets is a blank value (to mark regions that should not be processed because there is no data). The constant @code{GAL_BLANK_UINT8} value must be used in these cases (see @ref{Library blank values}). Another is some temporary value(s) that can be given to a processed pixel to avoid having another copy of the dataset as in @code{GAL_BINARY_TMP_VALUE} that is described below. @deffn Macro GAL_BINARY_TMP_VALUE The functions described below work on a @code{uint8_t} type dataset with values of 1 or 0 (no other pixel will be touched). However, in some cases, it is necessary to put temporary values in each element during the processing of the functions. This temporary value has a special meaning for the operation and will be operated on. So if your input datasets have values other than 0 and 1 that you don't want these functions to work on, be sure they are not equal to this macro's value. Note that this value is also different from @code{GAL_BLANK_UINT8}, so your input datasets may also contain blank elements. @end deffn @deftypefun {gal_data_t *} gal_binary_erode (gal_data_t @code{*input}, size_t @code{num}, int @code{connectivity}, int @code{inplace}) Do @code{num} erosions on the @code{connectivity}-connected neighbors of @code{input} (see above for the definition of connectivity). If @code{inplace} is non-zero @emph{and} the input's type is @code{GAL_TYPE_UINT8}, then the erosion will be done within the input dataset and the returned pointer will be @code{input}. Otherwise, @code{input} is copied (and converted if necessary) to @code{GAL_TYPE_UINT8} and erosion will be done on this new dataset which will also be returned. This function will only work on the elements with a value of 1 or 0. It will leave all the rest unchanged. @cindex Erosion @cindex Mathematical morphology Erosion (inverse of dilation) is an operation in mathematical morphology where each foreground pixel that is touching a background pixel is flipped (changed to background). The @code{connectivity} value determines the definition of ``touching''. Erosion will thus decrease the area of the foreground regions by one layer of pixels. @end deftypefun @deftypefun {gal_data_t *} gal_binary_dilate (gal_data_t @code{*input}, size_t @code{num}, int @code{connectivity}, int @code{inplace}) Do @code{num} dilations on the @code{connectivity}-connected neighbors of @code{input} (see above for the definition of connectivity). For more on @code{inplace} and the output, see @code{gal_binary_erode}. @cindex Dilation Dilation (inverse of erosion) is an operation in mathematical morphology where each background pixel that is touching a foreground pixel is flipped (changed to foreground). The @code{connectivity} value determines the definition of ``touching''. Dilation will thus increase the area of the foreground regions by one layer of pixels. @end deftypefun @deftypefun {gal_data_t *} gal_binary_open (gal_data_t @code{*input}, size_t @code{num}, int @code{connectivity}, int @code{inplace}) Do @code{num} openings on the @code{connectivity}-connected neighbors of @code{input} (see above for the definition of connectivity). For more on @code{inplace} and the output, see @code{gal_binary_erode}. @cindex Opening (Mathematical morphology) Opening is an operation in mathematical morphology which is defined as erosion followed by dilation (see above for the definitions of erosion and dilation). Opening will thus remove the outer structure of the foreground. In this implementation, @code{num} erosions are going to be applied on the dataset, then @code{num} dilations. @end deftypefun @deftypefun size_t gal_binary_connected_components (gal_data_t @code{*binary}, gal_data_t @code{**out}, int @code{connectivity}) @cindex Connected components @cindex Breadth first search Return the number of connected components in @code{binary} through the breadth first search algorithm (finding all pixels belonging to one component before going on to the next). Connection between two pixels is defined based on the value to @code{connectivity}. @code{out} is a dataset with the same size as @code{binary} with @code{GAL_TYPE_INT32} type. Every pixel in @code{out} will have the label of the connected component it belongs to. The labeling of connected components starts from 1, so a label of zero is given to the input's background pixels. When @code{*out!=NULL} (its space is already allocated), it will be cleared (to zero) at the start of this function. Otherwise, when @code{*out==NULL}, the necessary dataset to keep the output will be allocated by this function. @code{binary} must have a type of @code{GAL_TYPE_UINT8}, otherwise this function will abort with an error. Other than blank pixels (with a value of @code{GAL_BLANK_UINT8} defined in @ref{Library blank values}), all other non-zero pixels in @code{binary} will be considered as foreground (and will be labeled). Blank pixels in the input will also be blank in the output. @end deftypefun @deftypefun {gal_data_t *} gal_binary_connected_adjacency_matrix (gal_data_t @code{*adjacency}, size_t @code{*numconnected}) @cindex Adjacency matrix @cindex Matrix, adjacency Find the number of connected labels and new labels based on an adjacency matrix, which must be a square binary array (type @code{GAL_TYPE_UINT8}). The returned dataset is a list of new labels for each old label. In other words, this function will find the objects that are connected (possibly through a third object) and in the output array, the respective elements for all input labels is going to have the same value. The total number of connected labels is put into the space that @code{numconnected} points to. An adjacency matrix defines connection between two labels. For example, let's assume we have 5 labels and we know that labels 1 and 5 are connected to label 3, but are not connected with each other. Also, labels 2 and 4 are not touching any other label. So in total we have 3 final labels: one combined object (merged from labels 1, 3, and 5) and the initial labels 2 and 4. The input adjacency matrix would look like this (note the extra row and column for a label 0 which is ignored): @example INPUT OUTPUT ===== ====== in_lab 1 2 3 4 5 | | numconnected = 3 0 0 0 0 0 0 | in_lab 1 --> 0 0 0 1 0 0 | in_lab 2 --> 0 0 0 0 0 0 | Returned: new labels for the in_lab 3 --> 0 1 0 0 0 1 | 5 initial objects in_lab 4 --> 0 0 0 0 0 0 | | 0 | 1 | 2 | 1 | 3 | 1 | in_lab 5 --> 0 0 0 1 0 0 | @end example Although the adjacency matrix as used here is symmetric, currently this function assumes that it is filled on both sides of the diagonal. @end deftypefun @deftypefun void gal_binary_fill_holes (gal_data_t @code{*input}, int @code{connectivity}) Fill all the holes (0 valued pixels surrounded by 1 valued pixels) within a region of the binary @code{input} dataset. The connectivity of the holes can be set with @code{connectivity}. This function currently only works on a 2D dataset. @end deftypefun @node Convolution functions, Interpolation, Binary datasets, Gnuastro library @subsection Convolution functions (@file{convolve.h}) Convolution is a very common operation during data analysis and is thoroughly described as part of Gnuastro's @ref{Convolve} program which is fully devoted to this job. Because of the complete introduction that was presented there, we will directly skip onto the currently available convolution functions in Gnuastro's library. As of this version, only spatial domain convolution is available in Gnuastro's libraries. We haven't had the time to liberate the frequency domain function convolution and de-convolution functions that are available in the Convolve program@footnote{Hence any help would be greatly appreciated.}. @deftypefun {gal_data_t *} gal_convolve_spatial (gal_data_t @code{*tiles}, gal_data_t @code{*kernel}, size_t @code{numthreads}, int @code{edgecorrection}, int @code{convoverch}) Convolve each node of the list of @code{tiles} (see @ref{List of gal_data_t} and @ref{Tessellation library}) with @code{kernel} using @code{numthreads}. When @code{edgecorrection} is non-zero, it will correct for the edge dimming effects as discussed in @ref{Edges in the spatial domain}. To create a tessellation that fully covers an input image, you may use @code{gal_tile_full}, or @code{gal_tile_full_two_layers} to also define channels over your input dataset. These functions are discussed in @ref{Tile grid}. You may then pass the list of tiles to this function. This is the recommended way to call this function because spatial domain convolution is slow and breaking the job into many small tiles and working on simultaneously on several threads can greatly speed up the processing. If the tiles are defined within a channel (a larger tile), by default convolution will be done within the channel, so pixels on the edge of a channel will not be affected by their neighbors that are in another channel. See @ref{Tessellation} for the necessity of channels in astronomical data analysis. This behavior may be disabled when @code{convoverch} is non-zero. In this case, it will ignore channel borders (if they exist) and mix all pixels that cover the kernel within the dataset. @end deftypefun @deftypefun void gal_convolve_spatial_correct_ch_edge (gal_data_t @code{*tiles}, gal_data_t @code{*kernel}, size_t @code{numthreads}, int @code{edgecorrection}, gal_data_t @code{*tocorrect}) Correct the edges of channels in an already convolved image when it was initially convolved with @code{gal_convolve_spatial} and @code{convoverch==0}. In that case, strong boundaries might exist on the channel edges. So if you later need to remove those boundaries at later steps of your processing, you can call this function. It will only do convolution on the tiles that are near the edge and were effected by the channel borders. Other pixels in the image will not be touched. Hence, it is much faster. @end deftypefun @node Interpolation, Git wrappers, Convolution functions, Gnuastro library @subsection Interpolation (@file{interpolate.h}) During data analysis, it often happens that parts of the data cannot be given a value. For example your image was saturated due to a very bright start and you have to mask that star's footprint. One other common situation in Gnuastro is when we do processing on tiles (for example to estimate the Sky value and its Standard deviation, see @ref{Sky value}). Some tiles must not be used for the estimation of the Sky value, for example because they cover a large galaxy. So we need to fill them in with blank values. But ultimately, we need a Sky value for every pixel. This job (assigning a value to blank element(s) based on their nearby neighbors with a value) is known as interpolation. There are many ways to do interpolation, but (mainly due to lack of time), currently Gnuastro only contains the (median of) nearest-neighbor method. The power of this method of interpolation is its non-parametric nature. The produced values are also always within the range of the known values and strong outliers do not get created. We will hopefully implement other methods too (wrappers around the GNU Scientific Library's very complete set of functions), but currently the developers are too busy. So if you do have the chance to help your contribution would be very welcome and appreciated. @deftypefun {gal_data_t *} gal_interpolate_close_neighbors (gal_data_t @code{*input}, struct gal_tile_two_layer_params @code{*tl}, size_t @code{numneighbors}, size_t @code{numthreads}, int @code{onlyblank}, int @code{aslinkedlist}) Interpolate the values in the image using the median value of their @code{numneighbors} closest neighbors. If @code{onlyblank} is non-zero, then only blank elements will be interpolated and pixels that already have a value will be left untouched. This function is multi-threaded and will run on @code{numthreads} threads (see @code{gal_threads_number} in @ref{Multithreaded programming}). @code{tl} is Gnuastro's two later tessellation structure used to define tiles over an image and is fully described in @ref{Tile grid}. When @code{tl!=NULL}, then it is assumed that the @code{input->array} contains one value per tile and interpolation will respect certain tessellation properties, for example to not interpolate over channel borders. If several datasets have the same set of blank values, you don't need to call this function multiple times. When @code{aslinkedlist} is non-zero, then @code{input} will be seen as a @ref{List of gal_data_t} and for all the same neighbor position checking will be done for all the datasets in the list. Of course, the values for each dataset will be different, so a different value will be written in the each dataset, but the neighbor checking that is the most CPU intensive part will only be done once. @end deftypefun @node Git wrappers, Cosmology library, Interpolation, Gnuastro library @subsection Git wrappers (@file{git.h}) @cindex Git @cindex libgit2 Git is one of the most common tools for version control and it can often be useful during development, for example see @code{COMMIT} keyword in @ref{Output headers}. At installation time, Gnuastro will also check for the existence of libgit2, and store the value in the @code{GAL_CONFIG_HAVE_LIBGIT2}, see @ref{Configuration information} and @ref{Optional dependencies}. @file{gnuastro/git.h} includes @file{gnuastro/config.h} internally, so you won't have to include both for this macro. @deftypefun {char *} gal_git_describe ( ) When libgit2 is present and the program is called within a directory that is version controlled, this function will return a string containing the commit description (similar to Gnuastro's unofficial version number, see @ref{Version numbering}). If there are uncommitted changes in the running directory, it will add a `@code{-dirty}' prefix to the description. When there is no tagged point in the previous commit, this function will return a uniquely abbreviated commit object as fallback. This function is used for generating the value of the @code{COMMIT} keyword in @ref{Output headers}. The output string is similar to the output of the following command: @example $ git describe --dirty --always @end example Space for the output string is allocated within this function, so after using the value you have to @code{free} the output string. If libgit2 is not installed or the program calling this function is not within a version controlled directory, then the output will be the @code{NULL} pointer. @end deftypefun @node Cosmology library, , Git wrappers, Gnuastro library @subsection Cosmology library (@file{cosmology.h}) This library does the main cosmological calculations that are commonly necessary in extra-galactic astronomical studies. The main variable in this context is the redshift (@mymath{z}). The cosmological input parameters in the functions below are @code{H0}, @code{o_lambda_0}, @code{o_matter_0}, @code{o_radiation_0} which respectively represent the current (at redshift 0) expansion rate (Hubble constant in units of km/sec/Mpc), cosmological constant (@mymath{\Lambda}), matter and radiation densities. All these functions are declared in @file{gnuastro/cosmology.h}. For a more extended introduction/discussion of the cosmological parameters, please see @ref{CosmicCalculator}. @deftypefun double gal_cosmology_age (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Returns the age of the universe at redshift @code{z} in units of Giga years. @end deftypefun @deftypefun double gal_cosmology_proper_distance (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Returns the proper distance to an object at redshift @code{z} in units of Mega parsecs. @end deftypefun @deftypefun double gal_cosmology_comoving_volume (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Returns the comoving volume over 4pi stradian to @code{z} in units of Mega parsecs cube. @end deftypefun @deftypefun double gal_cosmology_critical_density (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Returns the critical density at redshift @code{z} in units of @mymath{g/cm^3}. @end deftypefun @deftypefun double gal_cosmology_angular_distance (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Return the angular diameter distance to an object at redshift @code{z} in units of Mega parsecs. @end deftypefun @deftypefun double gal_cosmology_luminosity_distance (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Return the luminosity diameter distance to an object at redshift @code{z} in units of Mega parsecs. @end deftypefun @deftypefun double gal_cosmology_distance_modulus (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Return the distance modulus at redshift @code{z} (with no units). @end deftypefun @deftypefun double gal_cosmology_to_absolute_mag (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Return the conversion from apparent to absolute magnitude for an object at redshift @code{z}. This value has to be added to the apparent magnitude to give the absolute magnitude of an object at redshift @code{z}. @end deftypefun @node Library demo programs, , Gnuastro library, Library @section Library demo programs In this final section of @ref{Library}, we give some example Gnuastro programs to demonstrate various features in the library. All these programs have been tested and once Gnuastro is installed you can compile and run them with with Gnuastro's @ref{BuildProgram} program that will take care of linking issues. If you don't have any FITS file to experiment on, you can use those that are generated by Gnuastro after @command{make check} in the @file{tests/} directory, see @ref{Quick start}. @menu * Library demo - reading a image:: Read a FITS image into memory. * Library demo - inspecting neighbors:: Inspect the neighbors of a pixel. * Library demo - multi-threaded operation:: Doing an operation on threads. * Library demo - reading and writing table columns:: Simple Column I/O. @end menu @node Library demo - reading a image, Library demo - inspecting neighbors, Library demo programs, Library demo programs @subsection Library demo - reading a FITS image The following simple program demonstrates how to read a FITS image into memory and use the @code{void *array} pointer in of @ref{Generic data container}. For easy linking/compilation of this program along with a first run see @ref{BuildProgram}. Before running, also change the @code{filename} and @code{hdu} variable values to specify an existing FITS file and/or extension/HDU. This is just intended to demonstrate how to use the @code{array} pointer of @code{gal_data_t}. Hence it doesn't do important sanity checks, for example in real datasets you may also have blank pixels. In such cases, this program will return a NaN value (see @ref{Blank pixels}). So for general statistical information of a dataset, it is much better to use Gnuastro's @ref{Statistics} program which can deal with blank pixels any many other issues in a generic dataset. @example #include #include #include /* includes gnuastro's data.h and type.h */ #include int main(void) @{ size_t i; float *farray; double sum=0.0f; gal_data_t *image; char *filename="img.fits", *hdu="1"; /* Read `img.fits' (HDU: 1) as a float32 array. */ image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, -1, 0, 0); /* Use the allocated space as a single precision floating * point array (recall that `image->array' has `void *' * type, so it is not directly usable. */ farray=image->array; /* Calculate the sum of all the values. */ for(i=0; isize; ++i) sum += farray[i]; /* Report the sum. */ printf("Sum of values in %s (hdu %s) is: %f\n", filename, hdu, sum); /* Clean up and return. */ gal_data_free(image); return EXIT_SUCCESS; @} @end example @node Library demo - inspecting neighbors, Library demo - multi-threaded operation, Library demo - reading a image, Library demo programs @subsection Library demo - inspecting neighbors The following simple program shows how you can inspect the neighbors of a pixel using the @code{GAL_DIMENSION_NEIGHBOR_OP} function-like macro that was introduced in @ref{Dimensions}. For easy linking/compilation of this program along with a first run see @ref{BuildProgram}. Before running, also change the file name and HDU (first and second arguments to @code{gal_fits_img_read_to_type}) to specify an existing FITS file and/or extension/HDU. @example #include #include #include int main(void) @{ double sum; float *array; size_t i, num, *dinc; gal_data_t *input=gal_fits_img_read_to_type("input.fits", "1", GAL_TYPE_FLOAT32, -1, 0, 0); /* To avoid the `void *' pointer and have `dinc'. */ array=input->array; dinc=gal_dimension_increment(input->ndim, input->dsize); /* Go over all the pixels. */ for(i=0;isize;++i) @{ num=0; sum=0.0f; GAL_DIMENSION_NEIGHBOR_OP( i, input->ndim, input->dsize, input->ndim, dinc, @{++num; sum+=array[nind];@} ); printf("%zu: num: %zu, sum: %f\n", i, num, sum); @} /* Clean up and return. */ gal_data_free(input); return EXIT_SUCCESS; @} @end example @node Library demo - multi-threaded operation, Library demo - reading and writing table columns, Library demo - inspecting neighbors, Library demo programs @subsection Library demo - multi-threaded operation The following simple program shows how to use Gnuastro to simplify spinning off threads and distributing different jobs between the threads. The relevant thread-related functions are defined in @ref{Gnuastro's thread related functions}. For easy linking/compilation of this program, along with a first run, see Gnuastro's @ref{BuildProgram}. Before running, also change the @code{filename} and @code{hdu} variable values to specify an existing FITS file and/or extension/HDU. This is a very simple program to open a FITS image, distribute its pixels between different threads and print the value of each pixel and the thread it was assigned to. The actual operation is very simple (and would not usually be done with threads in a real-life program). It is intentionally chosen to put more focus on the important steps in spinning of threads and how the worker function (which is called by each thread) can identify the job-IDs it should work on. For example, instead of an array of pixels, you can define an array of tiles or any other context-specific structures as separate targets. The important thing is that each action should have its own unique ID (counting from zero, as is done in an array in C). You can then follow the process below and use each thread to work on all the targets that are assigned to it. Recall that spinning-off threads is its self an expensive process and we don't want to spin-off one thread for each target (see the description of @code{gal_threads_dist_in_threads} in @ref{Gnuastro's thread related functions}. There are many (more complicated, real-world) examples of using @code{gal_threads_spin_off} in Gnuastro's actual source code, you can see them by searching for the @code{gal_threads_spin_off} function from the top source (after unpacking the tarball) directory (for example with this command): @example $ grep -r gal_threads_spin_off ./ @end example @noindent The code of this demonstration program is shown below. This program was also built and run when you ran @code{make check} during the building of Gnuastro (@code{tests/lib/multithread.c}, so it is already tested for your system and you can safely use it as a guide. @example #include #include #include "gnuastro/fits.h" #include "gnuastro/threads.h" /* This structure can keep all information you want to pass onto the * worker function on each thread. */ struct params @{ gal_data_t *image; /* Dataset to print values of. */ @}; /* This is the main worker function which will be called by the * different threads. `gal_threads_params' is defined in * `gnuastro/threads.h' and contains the pointer to the parameter we * want. Note that the input argument and returned value of this * function always must have `void *' type. */ void * worker_on_thread(void *in_prm) @{ /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct params *p=(struct params *)tprm->params; /* Subsequent definitions. */ float *array=p->image->array; size_t i, index, *dsize=p->image->dsize; /* Go over all the actions (pixels in this case) that were assigned * to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) @{ /* For easy reading. */ index = tprm->indexs[i]; /* Print the information. */ printf("(%zu, %zu) on thread %zu: %g\n", index%dsize[1]+1, index/dsize[1]+1, tprm->id, array[index]); @} /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; @} /* High-level function (called by the operating system). */ int main(void) @{ struct params p; char *filename="input.fits", *hdu="1"; size_t numthreads=gal_threads_number(); /* Read the image into memory as a float32 data type. We are using * `-1' for `minmapsize' to ensure that the image is read into * memory. */ p.image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, -1, 0, 0); /* Print some basic information before the actual contents: */ printf("Pixel values of %s (HDU: %s) on %zu threads.\n", filename, hdu, numthreads); printf("Used to check the compiled library's capability in opening " "a FITS file, and also spinning-off threads.\n"); /* A small sanity check: this is only intended for 2D arrays (to * print the coordinates of each pixel). */ if(p.image->ndim!=2) @{ fprintf(stderr, "only 2D images are supported."); exit(EXIT_FAILURE); @} /* Spin-off the threads and do the processing on each thread. */ gal_threads_spin_off(worker_on_thread, &p, p.image->size, numthreads); /* Clean up and return. */ gal_data_free(p.image); return EXIT_SUCCESS; @} @end example @node Library demo - reading and writing table columns, , Library demo - multi-threaded operation, Library demo programs @subsection Library demo - reading and writing table columns Tables are some of the most common inputs to, and outputs of programs. This section contains a small program for reading and writing tables using the constructs described in @ref{Table input output}. For easy linking/compilation of this program, along with a first run, see Gnuastro's @ref{BuildProgram}. Before running, also set the following file and column names in the first two lines of @code{main}. The input and output names may be @file{.txt} and @file{.fits} tables, @code{gal_table_read} and @code{gal_table_write} will be able to write to both formats. For plain text tables see see @ref{Gnuastro text table format}. This example program reads three columns from a table. The first two columns are selected by their name (@code{NAME1} and @code{NAME2}) and the third is selected by its number: column 10 (counting from 1). Gnuastro's column selection is discussed in @ref{Selecting table columns}. The first and second columns can be any type, but this program will convert them to @code{int32_t} and @code{float} for its internal usage respectively. However, the third column must be double for this program. So if it isn't, the program will abort with an error. Having the columns in memory, it will print them out along with their sum (just a simple application, you can do what ever you want at this stage). Reading the table finishes here. The rest of the program is a demonstration of writing a table. While parsing the rows, this program will change the first column (to be counters) and multiply the second by 10 (so the output will be different). Then it will define the order of the output columns by setting the @code{next} element (to create a @ref{List of gal_data_t}). Before writing, this function will also set names for the columns (units and comments can be defined in a similar manner). Writing the columns to a file is then done through a simple call to @code{gal_table_write}. The operations that are shown in this example program are not necessary all the time. For example, in many cases, you know the numerical data type of the column before writing your program (see @ref{Numeric data types}), so type checking and copying to a specific type won't be necessary. @example #include #include #include int main(void) @{ /* File names and column names (which may also be numbers). */ char *c1_name="NAME1", *c2_name="NAME2", *c3_name="10"; char *inname="input.fits", *hdu="1", *outname="out.fits"; /* Internal parameters. */ float *array2; double *array3; int32_t *array1; size_t i, counter=0; gal_data_t *c1, *c2; gal_data_t tmp, *col, *columns; gal_list_str_t *column_ids=NULL; /* Define the columns to read. */ gal_list_str_add(&column_ids, c1_name, 0); gal_list_str_add(&column_ids, c2_name, 0); gal_list_str_add(&column_ids, c3_name, 0); /* The columns were added in reverse, so correct it. */ gal_list_str_reverse(&column_ids); /* Read the desired columns. */ columns = gal_table_read(inname, hdu, column_ids, GAL_TABLE_SEARCH_NAME, 1, -1, NULL); /* Go over the columns, we'll assume that you don't know their type * a-priori, so we'll check */ counter=1; for(col=columns; col!=NULL; col=col->next) switch(counter++) @{ case 1: /* First column: we want it as int32_t. */ c1=gal_data_copy_to_new_type(col, GAL_TYPE_INT32); array1 = c1->array; break; case 2: /* Second column: we want it as float. */ c2=gal_data_copy_to_new_type(col, GAL_TYPE_FLOAT32); array2 = c2->array; break; case 3: /* Third column: it MUST be double. */ if(col->type!=GAL_TYPE_FLOAT64) @{ fprintf(stderr, "Column %s must be float64 type, it is " "%s", c3_name, gal_type_name(col->type, 1)); exit(EXIT_FAILURE); @} array3 = col->array; break; @} /* As an example application we'll just print them out. In the * meantime (just for a simple demonstration), change the first * array value to the counter and multiply the second by 10. */ for(i=0;isize;++i) @{ printf("%zu: %d + %f + %f = %f\n", i+1, array1[i], array2[i], array3[i], array1[i]+array2[i]+array3[i]); array1[i] = i+1; array2[i] *= 10; @} /* Link the first two columns as a list. */ c1->next = c2; c2->next = NULL; /* Set names for the columns and write them out. */ c1->name = "COUNTER"; c2->name = "VALUE"; gal_table_write(c1, NULL, GAL_TABLE_FORMAT_BFITS, outname); /* The names weren't allocated, so to avoid cleaning-up problems, * we'll set them to NULL. */ c1->name = c2->name = NULL; /* Clean up and return. */ gal_data_free(c1); gal_data_free(c2); gal_list_data_free(columns); gal_list_str_free(column_ids, 0); /* strings weren't allocated. */ return EXIT_SUCCESS; @} @end example @node Developing, Gnuastro programs list, Library, Top @chapter Developing The basic idea of GNU Astronomy Utilities is for an interested astronomer to be able to easily understand the code of any of the programs or libraries, be able to modify the code if s/he feels there is an improvement and finally, to be able to add new programs or libraries for their own benefit, and the larger community if they are willing to share it. In short, we hope that at least from the software point of view, the ``obscurantist faith in the expert's special skill and in his personal knowledge and authority'' can be broken, see @ref{Science and its tools}. With this aim in mind, Gnuastro was designed to have a very basic, simple, and easy to understand architecture for any interested inquirer. This chapter starts with very general design choices, in particular @ref{Why C} and @ref{Program design philosophy}. It will then get a little more technical about the Gnuastro code and file/directory structure in @ref{Coding conventions} and @ref{Program source}. @ref{The TEMPLATE program} discusses a minimal (and working) template to help in creating new programs or easier learning of a program's internal structure. Some other general issues about documentation, building and debugging are then discussed. This chapter concludes with how you can learn about the development and get involved in @ref{Gnuastro project webpage}, @ref{Developing mailing lists} and @ref{Contributing to Gnuastro}. @menu * Why C:: Why Gnuastro is designed in C. * Program design philosophy:: General ideas behind the package structure. * Coding conventions:: Gnuastro coding conventions. * Program source:: Conventions for the code. * Documentation:: Documentation is an integral part of Gnuastro. * Building and debugging:: Build and possibly debug during development. * Test scripts:: Understanding the test scripts. * Developer's checklist:: Checklist to finalize your changes. * Gnuastro project webpage:: Central hub for Gnuastro activities. * Developing mailing lists:: Stay up to date with Gnuastro's development. * Contributing to Gnuastro:: Share your changes with all users. @end menu @node Why C, Program design philosophy, Developing, Developing @section Why C programming language? @cindex C programming language @cindex C++ programming language @cindex Python programming language Currently the programming language that is most commonly used in scientific applications is C++@footnote{@url{https://isocpp.org/}}, Python@footnote{@url{https://www.python.org/}}, and Julia@footnote{@url{https://julialang.org/}} (which is a newcomer but swiftly gaining ground). One of the main reasons behind this choice is their high-level abstractions. However, GNU Astronomy Utilities is fully written in the C programming language@footnote{@url{https://en.wikipedia.org/wiki/C_(programming_language)}}. The reasons can be summarized with simplicity, portability and efficiency/speed. All three are very important in a scientific software and we will discuss them below. @cindex ANSI C @cindex ISO C90 @cindex Ritchie, Dennis @cindex Kernighan, Brian @cindex Stroustrup, Bjarne Simplicity can best be demonstrated in a comparison of the main books of C++ and C. The ``C programming language''@footnote{Brian Kernighan, Dennis Ritchie. @emph{The C programming language}. Prentice Hall, Inc., Second edition, 1988. It is also commonly known as K&R and is based on the ANSI C and ISO C90 standards.} book, written by the authors of C, is only 286 pages and covers a very good fraction of the language, it has also remained unchanged from 1988. C is the main programming language of nearly all operating systems and there is no plan of any significant update. On the other hand, the most recent ``C++ programming language''@footnote{Bjarne Stroustrup. @emph{The C++ programming language}. Addison-Wesley Professional; 4 edition, 2013.} book, also written by its author, has 1366 pages and its fourth edition came out in 2013! As discussed in @ref{Science and its tools}, it is very important for other scientists to be able to readily read the code of a program at their will with minimum requirements. @cindex Object oriented programming In C++, inheriting objects in the object oriented programming paradigm and their internal functions make the code very easy to write for a programmer who is deeply invested in those objects and understands all their relations well. But it simultaneously makes reading the program for a first time reader (a curious scientist who wants to know only how a small step was done) extremely hard. Before understanding the methods, the scientist has to invest a lot of time and energy in understanding those objects and their relations. But in C, everything is done with basic language types for example @code{int}s or @code{float}s and their pointers to define arrays. So when an outside reader is only interested in one part of the program, that part is all they have to understand. Recently it is also becoming common to write scientific software in Python, or a combination of it with C or C++. Python is a high level scripting language which doesn't need compilation. It is very useful when you want to do something on the go and don't want to be halted by the troubles of compiling, linking, memory checking, etc. When the datasets are small and the job is temporary, this ability of Python is great and is highly encouraged. A very good example might be plotting, in which Python is undoubtedly one of the best. But as the data sets increase in size and the processing becomes more complicated, the speed of Python scripts significantly decrease. So when the program doesn't change too often and is widely used in a large community, mostly on large data sets (like astronomical images), using Python will waste a lot of valuable research-hours. It is possible to wrap C or C++ functions with Python to fix the speed issue. But this creates further complexity, because the interested scientist has to master two programming languages and their connection (which is not trivial). Like C++, Python is object oriented, so as explained above, it needs a high level of experience with that particular program to reasonably understand its inner workings. To make things worse, since it is mainly for on-the-go programming@footnote{Note that Python is good for fast programming, not fast programs.}, it can undergo significant changes. One recent example is how Python 2.x and Python 3.x are not compatible. Lots of research teams that invested heavily in Python 2.x cannot benefit from Python 3.x or future versions any more. Some converters are available, but since they are automatic, lots of complications might arise in the conversion@footnote{For example see @url{https://arxiv.org/abs/1712.00461, Jenness (2017)} which describes how LSST is managing the transition.}. If a research project begins using Python 3.x today, there is no telling how compatible their investments will be when Python 4.x or 5.x will come out. This stems from the core principles of Python, which are very useful when you look in the `on the go' basis as described before and not future usage. Reproducibility (ability to run the code in the future) is a core principal of any scientific result, or the software that produced that result. Rebuilding all the dependencies of a software in an obsolete language is not easy. Future-proof code (as long as current operating systems will be used) is written in C. The portability of C is best demonstrated by the fact that both C++ and Python are part of the C-family of programming languages which also include Julia, Java, Perl, and many other languages. C libraries can be immediately included in C++, and it is easy to write wrappers for them in all C-family programming languages. This will allow other scientists to benefit from C libraries using any C-family language that they prefer. As a result, Gnuastro's library is already usable in C and C++, and wrappers will be@footnote{@url{http://savannah.gnu.org/task/?13786}} added for higher-level languages like Python, Julia and Java. @cindex Low level programming @cindex Programming, low level The final reason was speed. This is another very important aspect of C which is not independent of simplicity (first reason discussed above). The abstractions provided by the higher-level languages (which also makes learning them harder for a newcomer) comes at the cost of speed. Since C is a low-level language@footnote{Low-level languages are those that directly operate the hardware like assembly languages. So C is actually a high-level language, but it can be considered one of the lowest-level languages among all high-level languages.} (closer to the hardware), it is much less complex for both the human reader @emph{and} the computer. The benefits of simplicity for a human were discussed above. Simplicity for the computer translates into more efficiently (faster) programs. This creates a much closer relation between the scientist/programmer (or their program) and the actual data and processing. The GNU coding standards@footnote{@url{http://www.gnu.org/prep/standards/}} also encourage the use of C over all other languages when generality of usage and ``high speed'' is desired. @node Program design philosophy, Coding conventions, Why C, Developing @section Program design philosophy @cindex Gnulib The core processing functions of each program (and all libraries) are written mostly with the basic ISO C90 standard. We do make lots of use of the GNU additions to the C language in the GNU C library@footnote{Gnuastro uses many GNU additions to the C library. However, thanks to the GNU Portability library (Gnulib) which is included in the Gnuastro tarball, users of non-GNU/Linux operating systems can also benefit from all these features when using Gnuastro.}, but these functions are mainly used in the user interface functions (reading your inputs and preparing them prior to or after the analysis). The actual algorithms, which most scientists would be more interested in, are much more closer to ISO C90. For this reason, program source files that deal with user interface issues and those doing the actual processing are clearly separated, see @ref{Program source}. If anything particular to the GNU C library is used in the processing functions, it is explained in the comments in between the code. @cindex GNU Coreutils All the Gnuastro programs provide very low level and modular operations (modeled on GNU Coreutils). Almost all the basic command-line programs like @command{ls}, @command{cp} or @command{rm} on GNU/Linux operating systems are part of GNU Coreutils. This enables you to use shell scripting languages (for example GNU Bash) to operate on a large number of files or do very complex things through the creative combinations of these tools that the authors had never dreamed of. We have put a few simple examples in @ref{Tutorials}. @cindex @LaTeX{} @cindex GNU Bash @cindex Python Matplotlib @cindex Matplotlib, Python @cindex PGFplots in @TeX{} or @LaTeX{} For example all the analysis output can be saved as ASCII tables which can be fed into your favorite plotting program to inspect visually. Python's Matplotlib is very useful for fast plotting of the tables to immediately check your results. If you want to include the plots in a document, you can use the PGFplots package within @LaTeX{}, no attempt is made to include such operations in Gnuastro. In short, Bash can act as a glue to connect the inputs and outputs of all these various Gnuastro programs (and other programs) in any fashion. Of course, Gnuastro's programs are just front-ends to the main workhorse (@ref{Gnuastro library}), allowing a user to create their own programs (for example with @ref{BuildProgram}). So once the functions within programs become mature enough, they will be moved within the libraries for even more general applications. The advantage of this architecture is that the programs become small and transparent: the starting and finishing point of every program is clearly demarcated. For nearly all operations on a modern computer (fast file input-output) with a modest level of complexity, the read/write speed is insignificant compared to the actual processing a program does. Therefore the complexity which arises from sharing memory in a large application is simply not worth the speed gain. Gnuastro's design is heavily influenced from Eric Raymond's ``The Art of Unix Programming''@footnote{Eric S. Raymond, 2004, @emph{The Art of Unix Programming}, Addison-Wesley Professional Computing Series.} which beautifully describes the design philosophy and practice which lead to the success of Unix-based operating systems@footnote{KISS principle: Keep It Simple, Stupid!}. @node Coding conventions, Program source, Program design philosophy, Developing @section Coding conventions @cindex GNU coding standards @cindex Gnuastro coding convention In Gnuastro, we try our best to follow the GNU coding standards. Added to those, Gnuastro defines the following conventions. It is very important for readability that the whole package follows the same convention. @itemize @item The code must be easy to read by eye. So when the order of several lines within a function does not matter (for example when defining variables at the start of a function). You should put the lines in the order of increasing length and group the variables with similar types such that this half-pyramid of declarations becomes most visible. If the reader is interested, a simple search will show them the variable they are interested in. However, this visual aid greatly helps in general inspections of the code and help the reader get a grip of the function's processing. @item A function that cannot be fully displayed (vertically) in your monitor is probably too long and may be more useful if it is broken up into multiple functions. 40 lines is usually a good reference. When the start and end of a function are clearly visible in one glance, the function is much more easier to understand. This is most important for low-level functions (which usually define a lot of variables). Low-level functions do most of the processing, they will also be the most interesting part of a program for an inquiring astronomer. This convention is less important for higher level functions that don't define too many variables and whose only purpose is to run the lower-level functions in a specific order and with checks. @cindex Optimization flag @cindex GNU Compiler Collection In general you can be very liberal in breaking up the functions into smaller parts, the GNU Compiler Collection (GCC) will automatically compile the functions as inline functions when the optimizations are turned on. So you don't have to worry about decreasing the speed. By default Gnuastro will compile with the @option{-O3} optimization flag. @cindex Buffers (Emacs) @cindex Emacs buffers @item All Gnuastro hand-written text files (C source code, Texinfo documentation source, and version control commit messages) should not exceed @strong{75} characters per line. Monitors today are certainly much wider, but with this limit, reading the functions becomes much more easier. Also for the developers, it allows multiple files (or multiple views of one file) to be displayed beside each other on wide monitors. Emacs's buffers are excellent for this capability, setting a buffer width of 80 with `@key{C-u 80 C-x 3}' will allow you to view and work on several files or different parts of one file using the wide monitors common today. Emacs buffers can also be used as a shell prompt and compile the program (with @key{M-x compile}), and 80 characters is the default width in most terminal emulators. If you use Emacs, Gnuastro sets the 75 character @command{fill-column} variable automatically for you, see cartouche below. For long comments you can use press @key{Alt-q} in Emacs to separate them into separate lines automatically. For long literal strings, you can use the fact that in C, two strings immediately after each other are concatenated, for example @code{"The first part, " "and the second part."}. Note the space character in the end of the first part. Since they are now separated, you can easily break a long literal string into several lines and adhere to the maximum 75 character line length policy. @cindex Header file @item The headers required by each source file (ending with @file{.c}) should be defined inside of it. All the headers a complete program needs should @emph{not} be stacked in another header to include in all source files (for example @file{main.h}). Although most `professional' programmers choose this single header method, Gnuastro is primarily written for professional/inquisitive astronomers (who are generally amateur programmers). The list of header files included provides valuable general information and helps the reader. @file{main.h} may only include the header file(s) that define types that the main program structure needs, see @file{main.h} in @ref{Program source}. Those particular header files that are included in @file{main.h} can of course be ignored (not included) in separate source files. @item The headers should be classified (by an empty line) into separate groups: @enumerate @cindex GNU C library @cindex Gnulib: GNU Portability Library @cindex GNU Portability Library (Gnulib) @item @code{#include }: This must be the first code line (not commented or blank) in each source file @emph{within Gnuastro}. It sets macros that the GNU Portability Library (Gnulib) will use for a unified environment (GNU C Library), even when the user is building on a system that doesn't use the GNU C library. @item The C library header files, for example @file{stdio.h}, @file{stdlib.h}, or @file{math.h}. @item Installed library header files, including Gnuastro's installed headers (for example @file{cfitsio.h} or @file{gsl/gsl_rng.h}, or @file{gnuastro/fits.h}). @item Gnuastro's internal headers (that are not installed), for example @file{gnuastro-internal/options.h}. @item For programs, the @file{main.h} file (which is needed by the next group of headers). @item That particular program's header files, for example @file{mkprof.h}, or @file{noisechisel.h}. @end enumerate @noindent As much as order does not matter when you include the header of each group, sort them by length, as described above. @item All function names, variables, etc should be in lower case. Macros and constant global @code{enum}s should be in upper case. @item For the naming of exported header files, functions, variables, macros, and library functions, we adopt similar conventions to those used by the GNU Scientific Library (GSL)@footnote{@url{https://www.gnu.org/software/gsl/design/gsl-design.html#SEC15}}. In particular, in order to avoid clashes with the names of functions and variables coming from other libraries the name-space `@code{gal_}' is prefixed to them. GAL stands for @emph{G}NU @emph{A}stronomy @emph{L}ibrary. @item All installed header files should be in the @file{lib/gnuastro} directory (under the top Gnuastro source directory). After installation, they will be put in the @file{$prefix/include/gnuastro} directory (see @ref{Installation directory} for @file{$prefix}). Therefore with this convention Gnuastro's headers can be included in internal (to Gnuastro) and external (a library user) source files with the same line @example # include @end example Note that the GSL convention for header file names is @file{gsl_specialname.h}, so your include directive for a GSL header must be something like @code{#include }. Gnuastro doesn't follow this GSL guideline because of the repeated @code{gsl} in the include directive. It can be confusing and cause bugs for beginners. All Gnuastro (and GSL) headers must be located within a unique directory and will not be mixed with other headers. Therefore the `@file{gsl_}' prefix to the header file names is redundant@footnote{For GSL, this prefix has an internal technical application: GSL's architecture mixes installed and not-installed headers in the same directory. This prefix is used to identify their installation status. Therefore this filename prefix in GSL a technical internal issue (for developers, not users).}. @item @cindex GNU coding standards All installed functions and variables should also include the base-name of the file in which they are defined as prefix, using underscores to separate words@footnote{The convention to use underscores to separate words, called ``snake case'' (or ``snake_case''). This is also recommended by the GNU coding standards.}. The same applies to exported macros, but in upper case. For example in Gnuastro's top source directory, the prototype of function @code{gal_box_border_from_center} is in @file{lib/gnuastro/box.h}, and the macro @code{GAL_POLYGON_MAX_CORNERS} is defined in @code{lib/gnuastro/polygon.h}. This is necessary to give any user (who is not familiar with the library structure) the ability to follow the code. This convention does make the function names longer (a little harder to write), but the extra documentation it provides plays an important role in Gnuastro and is worth the cost. @item @cindex GNU Emacs @cindex Trailing space There should be no trailing white space in a line. To do this automatically every time you save a file in Emacs, add the following line to your @file{~/.emacs} file. @example (add-hook 'before-save-hook 'delete-trailing-whitespace) @end example @item @cindex Tabs are evil There should be no tabs in the indentation@footnote{If you use Emacs, Gnuastro's @file{.dir-locals.el} file will automatically never use tabs for indentation. To make this a default in all your Emacs sessions, you can add the following line to your @file{~/.emacs} file: @command{(setq-default indent-tabs-mode nil)}}. @item @cindex GNU Emacs @cindex Function groups @cindex Groups of similar functions Individual, contextually similar, functions in a source file are separated by 5 blank lines to be easily seen to be related in a group when parsing the source code by eye. In Emacs you can use @key{CTRL-u 5 CTRL-o}. @item One group of contextually similar functions in a source file is separated from another with 20 blank lines. In Emacs you can use @key{CTRL-u 20 CTRL-o}. Each group of functions has short descriptive title of the functions in that group. This title is surrounded by asterisks (@key{*}) to make it clearly distinguishable. Such contextual grouping and clear title are very important for easily understanding the code. @item Always read the comments before the patch of code under it. Similarly, try to add as many comments as you can regarding every patch of code. Effectively, we want someone to get a good feeling of the steps, without having to read the C code and only by reading the comments. This follows similar principles as @url{https://en.wikipedia.org/wiki/Literate_programming, Literate programming}. @end itemize The last two conventions are not common and might benefit from a short discussion here. With a good experience in advanced text editor operations, the last two are redundant for a professional developer. However, recall that Gnuastro aspires to be friendly to un-familiar, and un-experienced (in programming) eyes. In other words, as discussed in @ref{Science and its tools}, we want the code to appear welcoming to someone who is completely new to coding (and text editors) and only has a scientific curiosity. Newcomers to coding and development, who are curious enough to venture into the code, will probably not be using (or have any knowledge of) advanced text editors. They will see the raw code in the webpage or on a simple text editor (like Gedit) as plain text. Trying to learn and understand a file with dense functions that are all spaced with one or two blank lines can be very taunting for a newcomer. But when they scroll through the file and see clear titles and meaningful spaces for similar functions, we are helping them find and focus on the part they are most interested in sooner and easier. @cartouche @cindex GNU Emacs @noindent @strong{GNU Emacs, the recommended text editor:} GNU Emacs is an extensible and easily customizable text editor which many programmers rely on for developing due to its countless features. Among them, it allows specification of certain settings that are applied to a single file or to all files in a directory and its sub-directories. In order to harmonize code coming from different contributors, Gnuastro comes with a @file{.dir-locals.el} file which automatically configures Emacs to satisfy most of the coding conventions above when you are using it within Gnuastro's directories. Thus, Emacs users can readily start hacking into Gnuastro. If you are new to developing, we strongly recommend this editor. Emacs was the first project released by GNU and is still one of its flagship projects. Some resources can be found at: @table @asis @item Official manual At @url{https://www.gnu.org/software/emacs/manual/emacs.html}. This is a great and very complete manual which is being improved for over 30 years and is the best starting point to learn it. It just requires a little patience and practice, but rest assured that you will be rewarded. If you install Emacs, you also have access to this manual on the command-line with the following command (see @ref{Info}). @example $ info emacs @end example @item A guided tour of emacs At @url{https://www.gnu.org/software/emacs/tour/}. A short visual tour of Emacs, officially maintained by the Emacs developers. @item Unofficial mini-manual At @url{https://tuhdo.github.io/emacs-tutor.html}. A shorter manual which contains nice animated images of using Emacs. @end table @end cartouche @node Program source, Documentation, Coding conventions, Developing @section Program source @cindex Source file navigation @cindex Navigating source files @cindex Program structure convention @cindex Convention for program source @cindex Gnuastro program structure convention Besides the fact that all the programs share some functions that were explained in @ref{Library}, everything else about each program is completely independent. Recall that Gnuastro is written for an active astronomer/scientist (not a passive one who just uses a software). It must thus be easily navigable. Hence there are fixed source files (that contain fixed operations) that must be present in all programs, these are discussed fully in @ref{Mandatory source code files}. To easily understand the explanations in this section you can use @ref{The TEMPLATE program} which contains the bare minimum code for one working program. This template can also be used to easily add new utilities: just copy and paste the directory and change @code{TEMPLATE} with your program's name. @menu * Mandatory source code files:: Description of files common to all programs. * The TEMPLATE program:: Template for easy creation of a new program. @end menu @node Mandatory source code files, The TEMPLATE program, Program source, Program source @subsection Mandatory source code files Some programs might need lots of source files and if there is no fixed convention, navigating them can become very hard for a new inquirer into the code. The following source files exist in every program's source directory (which is located in @file{bin/progname}). For small programs, these files are enough. Larger programs will need more files and developers are encouraged to define any number of new files. It is just important that the following list of files exist and do what is described here. When creating other source files, please choose filenames that are a complete single word: don't abbreviate (abbreviations are cryptic). For a minimal program containing all these files, see @ref{The TEMPLATE program}. @vtable @file @item main.c @cindex @code{main} function Each executable has a @code{main} function, which is located in @file{main.c}. Therefore this file is the starting point when reading any program's source code. No actual processing functions must be defined in this file, the function(s) in this file are only meant to connect the most high level steps of each program. Generally, @code{main} will first call the top user interface function to read user input and make all the preparations. Then it will pass control to the top processing function for that program. The functions to do both these jobs must be defined in other source files. @item main.h @cindex Top root structure @cindex @code{prognameparams} @cindex Root parameter structure @cindex Main parameters C structure All the major parameters which will be used in the program must be stored in a structure which is defined in @file{main.h}. The name of this structure is usually @code{prognameparams}, for example @code{cropparams} or @code{noisechiselparams}. So @code{#include "main.h"} will be a staple in all the source codes of the program. It is also regularly the first (and only) argument most of the program's functions which greatly helps in readability. Keeping all the major parameters of a program in this structure has the major benefit that most functions will only need one argument: a pointer to this structure. This will significantly facilitate the job of the programmer, the inquirer and the computer. All the programs in Gnuastro are designed to be low-level, small and independent parts, so this structure should not get too large. @cindex @code{p} The main root structure of all programs contains at least one instance of the @code{gal_options_common_params} structure. This structure will keep the values to all common options in Gnuastro's programs (see @ref{Common options}). This top root structure is conveniently called @code{p} (short for parameters) by all the functions in the programs and the common options parameters within it are called @code{cp}. With this convention any reader can immediately understand where to look for the definition of one parameter. For example you know that @code{p->cp->output} is in the common parameters while @code{p->threshold} is in the program's parameters. @cindex Structure de-reference operator @cindex Operator, structure de-reference With this basic root structure, source code of functions can potentially become full of structure de-reference operators (@command{->}) which can make the code very un-readable. In order to avoid this, whenever a structure element is used more than a couple of times in a function, a variable of the same type and with the same name (so it can be searched) as the desired structure element should be defined with the value of the root structure inside of it in definition time. Here is an example. @example char *hdu=p->cp.hdu; float threshold=p->threshold; @end example @item args.h @cindex GNU C library @cindex Argp argument parser The options particular to each program are defined in this file. Each option is defined by a block of parameters in @code{program_options}. These blocks are all you should modify in this file, leave the bottom group of definitions untouched. These are fed directly into the GNU C library's Argp facilities and it is recommended to have a look at that for better understand what is going on, although this is not required here. Each element of the block defining an option is described under @code{argp_option} in @code{bootstrapped/lib/argp.h} (from Gnuastro's top source file). Note that the last few elements of this structure are Gnuastro additions (not documented in the standard Argp manual). The values to these last elements are defined in @code{lib/gnuastro/type.h} and @code{lib/gnuastro-internal/options.h} (from Gnuastro's top source directory). @item ui.h Besides declaring the exported functions of @code{ui.c}, this header also keeps the ``key''s to every program-specific option. The first class of keys for the options that have a short-option version (single letter, see @ref{Options}). The character that is defined here is the option's short option name. The list of available alphabet characters can be seen in the comments. Recall that some common options also take some characters, for those, see @file{lib/gnuastro-internal/options.h}. The second group of options are those that don't have a short option alternative. Only the first in this group needs a value (@code{1000}), the rest will be given a value by C's @code{enum} definition, so the actual value is irrelevant and must never be used, always use the name. @item ui.c @cindex User interface functions @cindex Functions for user interface Everything related to reading the user input arguments and options, checking the configuration files and checking the consistency of the input parameters before the actual processing is run should be done in this file. Since most functions are the same, with only the internal checks and structure parameters differing. We recommend going through the @code{ui.c} of @ref{The TEMPLATE program}, or several other programs for a better understanding. The most high-level function in @file{ui.c} is named @code{ui_read_check_inputs_setup}. It accepts the raw command-line inputs and a pointer to the root structure for that program (see the explanation for @file{main.h}). This is the function that @code{main} calls. The basic idea of the functions in this file is that the processing functions should need a minimum number of such checks. With this convention an inquirer who only wants to understand only one part (mostly the processing part and not user input details and sanity checks) of the code can easily do so in the later files. It also makes all the errors related to input appear before the processing begins which is more convenient for the user. @item progname.c, progname.h @cindex Top processing source file The high-level processing functions in each program are in a file named @file{progname.c}, for example @file{crop.c} or @file{noisechisel.c}. The function within these files which @code{main} calls is also named after the program, for example @example void crop(struct cropparams *p) @end example @noindent or @example void noisechisel(struct noisechiselparams *p) @end example @noindent In this manner, if an inquirer is interested the processing steps, they can immediately come and check this file for the first processing step without having to go through @file{main.c} and @file{ui.c} first. In most situations, any failure in any step of the programs will result in an informative error message and an immediate abort in the program. So there is usually no need for return values. Under more complicated situations where a return value might be necessary, @code{void} will be replaced with an @code{int} in the examples above. This value must be directly returned by @code{main}, so it has to be an @code{int}. @item authors-cite.h @cindex Citation information This header file keeps the global variable for the program authors and its BibTeX record for citation. They are used in the outputs of the common options @option{--version} and @option{--cite}, see @ref{Operating mode options}. @end vtable @node The TEMPLATE program, , Mandatory source code files, Program source @subsection The TEMPLATE program The extra creativity offered by libraries comes at a cost: you have to actually write your @code{main} function and get your hands dirty in managing user inputs: are all the necessary parameters given a value? is the input in the correct format? do the options and the inputs correspond? and many other similar checks. So when an operation has well-defined inputs and outputs and is commonly needed, it is much more worthwhile to simply do use all the great features that Gnuastro has already defined for such operations. To make it easier to learn/apply the internal program infra-structure discussed in @ref{Mandatory source code files}, Gnuastro ships with a template program when using the @ref{Version controlled source}. It is not available in the Gnuastro tarball so it doesn't confuse people using the tarball. The @file{bin/TEMPLATE} directory in Gnuastro's clone contains the bare-minimum files necessary to define a new program and all the necessary files/functions are pre-defined there. You can take the following steps if you want to add a new program to Gnuastro: @enumerate @item Select a name for your new program (for example @file{myprog}). @item Copy the @file{TEMPLATE} directory to a directory with your program's name: @example $ cp -R bin/TEMPLATE bin/myprog @end example @item Open @file{configure.ac} in the top Gnuastro source. This file manages the operations that are done when a user runs @file{./configure}. Going down the file, you will notice repetitive parts for each program. Copy one of those and correct the names of the copied program to your new program name. We follow alphabetic ordering here, so please place it correctly. There are multiple places where this has to be done, so be patient and go down to the bottom of the file. Ultimately add @file{bin/myprog/Makefile} to @code{AC_CONFIG_FILES}, only here the ordering depends on the length of the name. @item Open @file{Makefile.am} in the top Gnuastro source. Similar to the previous step, add your new program similar to all the other programs. @item Change @code{TEMPLATE} to @code{myprog} in the file names and contents of the files in the @file{bin/myprog/} directory. @item Run the following command to re-build the configuration and build system. @example $ autoreconf -f @end example Your new program will be built the next time you run @command{./configure} and @command{make}. You can now start adding your special checks/processing. @end enumerate @node Documentation, Building and debugging, Program source, Developing @section Documentation Documentation (this book) is an integral part of Gnuastro (see @ref{Science and its tools}). Documentation is not considered a separate project and must be written by its developers. Users can make edits/corrections, but the initial writing must be by the developer. So, no change is considered valid for implementation unless the respective parts of the book have also been updated. The following procedure can be a good suggestion to take when you have a new idea and are about to start implementing it. The steps below are not a requirement, the important thing is that when you send the program to be included in Gnuastro, the book and the code have to both be fully up-to-date and compatible and the purpose should be very clearly explained. You can follow any path you choose to do this, the following path was what we have found to be most successful until now. @enumerate @item Edit the book and fully explain your desired change, such that your idea is completely embedded in the general context of the book with no sense of discontinuity for a first time reader. This will allow you to plan the idea much more accurately and in the general context of Gnuastro or a particular program. Later on, when you are coding, this general context will significantly help you as a road-map. A very important part of this process is the program introduction, which explains the purposes of the program. Before actually starting to code, explain your idea's purpose thoroughly in the start of the program section you wish to add or edit. While actually writing its purpose for a new reader, you will probably get some very valuable ideas that you hadn't thought of before. This has occurred several times during the creation of Gnuastro. If an introduction already exists, embed or blend your idea's purpose with the existing purposes. We emphasize that doing this is equally useful for you (as the programmer) as it is useful for the user (reader). Recall that the purpose of a program is very important, see @ref{Program design philosophy}. As you have already noticed for every program, it is very important that the basics of the science and technique be explained in separate subsections prior to the `Invoking Programname' subsection. If you are writing a new program or your addition to an existing program involves a new concept, also include such subsections and explain the concepts so a person completely unfamiliar with the concepts can get a general initial understanding. You don't have to go deep into the details, just enough to get an interested person (with absolutely no background) started. If you feel you can't do that, then you have probably not understood the concept yourself! If you feel you don't have the time, then think about yourself as the reader in one year: you will forget almost all the details, so now that you have done all the theoretical preparations, add a few more hours and document it, so next time you don't have to prepare as much. Have in mind that your only limitation in length is the fatigue of the reader after reading a long text, nothing else. So as long as you keep it relevant/interesting for the reader, there is no page number limit/cost! It might also help if you start discussing the usage of your idea in the `Invoking ProgramName' subsection (explaining the options and arguments you have in mind) at this stage too. Actually starting to write it here will really help you later when you are coding. @item After you have finished adding your initial intended plan to the book, then start coding your change or new program within the Gnuastro source files. While you are coding, you will notice that somethings should be different from what you wrote in the book (your initial plan). So correct them as you are actually coding, but don't worry too much about missing a few things (see the next step). @item After your work has been fully implemented, read the section documentation from the start and see if you didn't miss any change in the coding and to see if the context is fairly continuous for a first time reader (who hasn't seen the book or had known Gnuastro before you made your change). @end enumerate @node Building and debugging, Test scripts, Documentation, Developing @section Building and debugging @cindex GNU Libtool @cindex GNU Autoconf @cindex GNU Automake @cindex GNU build system To build the various programs and libraries in Gnuastro, the GNU build system is used which defines the steps in @ref{Quick start}. It consists of GNU Autoconf, GNU Automake and GNU Libtool which are collectively known as GNU Autotools. They provide a very portable system to check the hosts environment and compile Gnuastro based on that. They also make installing everything in their standard places very easy for the programmer. Most of the small caps files that you see in the top source directory of the tarball are created by these three tools (see @ref{Version controlled source}). To facilitate the building and testing of your work during development, Gnuastro comes with two useful scripts: @table @file @cindex @file{tmpfs-config-make} @item tmpfs-config-make This is more fully described in @ref{Configure and build in RAM}. During development, you will usually run this command only once (at the start of your work). @cindex @file{tests/during-dev.sh} @item tests/during-dev.sh This script is designed to be run each time you make a change and want to test your work (with some possible input and output). The script itself is heavily commented and thoroughly describes the best way to use it, so we won't repeat it here. As a short summary: you specify the build directory, an output directory (for the built program to be run in, and also contains the inputs), the program's short name and the arguments and options that it should be run with. This script will then build Gnuastro, go to the output directory and run the built executable from there. One option for the output directory might be your desktop, so you can easily see the output files and delete them when you are finished. The main purpose of these scripts is to keep your source directory clean and facilitate your development. @end table @cindex Debugging @cindex Optimization By default all the programs are compiled with optimization flags for increased speed. A side effect of optimization is that valuable debugging information is lost. All the libraries are also linked as shared libraries by default. Shared libraries further complicate the debugging process and significantly slow down the compilation (the @command{make} command). So during development it is recommended to configure Gnuastro as follows: @example $ ./configure --disable-shared CFLAGS="-g -O0" @end example @noindent In @file{tmpfs-config-make} you can ask for this behavior by setting @code{debug_noshared} to @code{1}. In order to understand the building process, you can go through the Autoconf, Automake and Libtool manuals, like all GNU manuals they provide both a great tutorial and technical documentation. The ``A small Hello World'' section in Automake's manual (in chapter 2) can be a good starting guide after you have read the separate introductions. @node Test scripts, Developer's checklist, Building and debugging, Developing @section Test scripts @cindex Test scripts @cindex Gnuastro test scripts As explained in @ref{Tests}, for every program some simple tests are written to check the various independent features of the program. All the tests are placed in the @file{tests/} directory. The @file{tests/prepconf.sh} script is the first `test' that will be run. It will copy all the configuration files from the various directories to a @file{tests/.gnuastro} directory (which it will make) so the various tests can set the default values. This script will also make sure the programs don't go searching for user and system wide configuration files to avoid the mixing of values with different Gnuastro version on the system. For each program, the tests are placed inside directories with the program name. Each test is written as a shell script. The last line of this script is the test which runs the program with certain parameters. The return value of this script determines the fate of the test, see the ``Support for test suites'' chapter of the Automake manual for a very nice and complete explanation. In every script, two variables are defined at first: @code{prog} and @code{execname}. The first specifies the program name and the second the location of the executable. @cindex Build tree @cindex Source tree @cindex @file{tmpfs-config-make} The most important thing to have in mind about all the test scripts is that they are run from inside the @file{tests/} directory in the ``build tree''. Which can be different from the directory they are stored in (known as the ``source tree'')@footnote{The @file{tmpfs-config-make} script also uses this feature to keep the source and build directories separate (see @ref{Configure and build in RAM}).}. This distinction is made by GNU Autoconf and Automake (which configure, build and install Gnuastro) so that you can install the program even if you don't have write access to the directory keeping the source files. See the ``Parallel build trees (a.k.a VPATH builds)'' in the Automake manual for a nice explanation. Because of this, any necessary inputs that are distributed in the tarball@footnote{In many cases, the inputs of a test are outputs of previous tests, this doesn't apply to this class of inputs. Because all outputs of previous tests are in the ``build tree''.}, for example the catalogs necessary for checks in MakeProfiles and Crop, must be identified with the @command{$topsrc} prefix instead of @command{../} (for the top source directory that is unpacked). This @command{$topsrc} variable points to the source tree where the script can find the source data (it is defined in @file{tests/Makefile.am}). The executables and other test products were built in the build tree (where they are being run), so they don't need to be prefixed with that variable. This is also true for images or files that were produced by other tests. @node Developer's checklist, Gnuastro project webpage, Test scripts, Developing @section Developer's checklist This is a checklist of things to do after applying your changes/additions in Gnuastro: @enumerate @item If the change is non-trivial, write test(s) in the @file{tests/progname/} directory to test the change(s)/addition(s) you have made. Then add their file names to @file{tests/Makefile.am}. @item Run @command{$ make check} to make sure everything is working correctly. @item Make sure the documentation (this book) is completely up to date with your changes, see @ref{Documentation}. @item Commit the change to your issue branch (see @ref{Production workflow} and @ref{Forking tutorial}). Afterwards, run Autoreconf to generate the appropriate version number: @example $ autoreconf -f @end example @cindex Making a distribution package @item Finally, to make sure everything will be built, installed and checked correctly run the following command (after re-configuring, and re-building). To greatly speed up the process, use multiple threads (8 in the example below, change it appropriately) @example $ make distcheck -j8 @end example @noindent This command will create a distribution file (ending with @file{.tar.gz}) and try to compile it in the most general cases, then it will run the tests on what it has built in its own mini-environment. If @command{$ make distcheck} finishes successfully, then you are safe to send your changes to us to implement or for your own purposes. See @ref{Production workflow} and @ref{Forking tutorial}. @end enumerate @node Gnuastro project webpage, Developing mailing lists, Developer's checklist, Developing @section Gnuastro project webpage @cindex Bug @cindex Issue @cindex Tracker @cindex GNU Savannah @cindex Report a bug @cindex Management hub @cindex Feature request @cindex Central management @url{https://savannah.gnu.org/projects/gnuastro/, Gnuastro's central management hub}@footnote{@url{https://savannah.gnu.org/projects/gnuastro/}} is located on @url{https://savannah.gnu.org/, GNU Savannah}@footnote{@url{https://savannah.gnu.org/}}. Savannah is the central software development management system for many GNU projects. Through this central hub, you can view the list of activities that the developers are engaged in, their activity on the version controlled source, and other things. Each defined activity in the development cycle is known as an `issue' (or `item'). An issue can be a bug (see @ref{Report a bug}), or a suggested feature (see @ref{Suggest new feature}) or an enhancement or generally any @emph{one} job that is to be done. In Savannah, issues are classified into three categories or `tracker's: @table @asis @cindex Mailing list: bug-gnuastro @item Support This tracker is a way that (possibly anonymous) users can get in touch with the Gnuastro developers. It is a complement to the bug-gnuastro mailing list (see @ref{Report a bug}). Anyone can post an issue to this tracker. The developers will not submit an issue to this list. They will only reassign the issues in this list to the other two trackers if they are valid@footnote{Some of the issues registered here might be due to a mistake on the user's side, not an actual bug in the program.}. Ideally (when the developers have time to put on Gnuastro, please don't forget that Gnuastro is a volunteer effort), there should be no open items in this tracker. @item Bugs This tracker contains all the known bugs in Gnuastro (problems with the existing tools). @item Tasks The items in this tracker contain the future plans (or new features/capabilities) that are to be added to Gnuastro. @end table @noindent All the trackers can be browsed by a (possibly anonymous) visitor, but to edit and comment on the Bugs and Tasks trackers, you have to be a registered on Savannah. When posting an issue to a tracker, it is very important to choose the `Category' and `Item Group' options accurately. The first contains a list of all Gnuastro's programs along with `Installation', `New program' and `Webpage'. The ``Item Group'' contains the nature of the issue, for example if it is a `Crash' in the software (a bug), or a problem in the documentation (also a bug) or a feature request or an enhancement. The set of horizontal links on the top of the page (Starting with `Main' and `Homepage' and finishing with `News') are the easiest way to access these trackers (and other major aspects of the project) from any part of the project webpage. Hovering your mouse over them will open a drop down menu that will link you to the different things you can do on each tracker (for example, `Submit new' or `Browse'). When you browse each tracker, you can use the ``Display Criteria'' link above the list to limit the displayed issues to what you are interested in. The `Category' and `Group Item' (explained above) are a good starting point. @cindex Mailing list: gnuastro-devel Any new issue that is submitted to any of the trackers, or any comments that are posted for an issue, is directly forwarded to the gnuastro-devel mailing list (@url{https://lists.gnu.org/mailman/listinfo/gnuastro-devel}, see @ref{Developing mailing lists} for more). This will allow anyone interested to be up to date on the over-all development activity in Gnuastro and will also provide an alternative (to Savannah) archiving for the development discussions. Therefore, it is not recommended to directly post an email to this mailing list, but do all the activities (for example add new issues, or comment on existing ones) on Savannah. @cartouche @noindent @strong{Do I need to be a member in Savannah to contribute to Gnuastro?} No. The full version controlled history of Gnuastro is available for anonymous download or cloning. See @ref{Production workflow} for a description of Gnuastro's Integration-Manager Workflow. In short, you can either send in patches, or make your own fork. If you choose the latter, you can push your changes to your own fork and inform us. We will then pull your changes and merge them into the main project. Please see @ref{Forking tutorial} for a tutorial. @end cartouche @node Developing mailing lists, Contributing to Gnuastro, Gnuastro project webpage, Developing @section Developing mailing lists To keep the developers and interested users up to date with the activity and discussions within Gnuastro, there are two mailing lists which you can subscribe to: @table @asis @item @command{gnuastro-devel@@gnu.org} @itemx (at @url{https://lists.gnu.org/mailman/listinfo/gnuastro-devel}) @cindex Mailing list: gnuastro-devel All the posts made in the support, bugs and tasks discussions of @ref{Gnuastro project webpage} are also sent to this mailing address and archived. By subscribing to this list you can stay up to date with the discussions that are going on between the developers before, during and (possibly) after working on an issue. All discussions are either in the context of bugs or tasks which are done on Savannah and circulated to all interested people through this mailing list. Therefore it is not recommended to post anything directly to this mailing list. Any mail that is sent to it from Savannah to this list has a link under the title ``Reply to this item at:''. That link will take you directly to the issue discussion page, where you can read the discussion history or join it. While you are posting comments on the Savannah issues, be sure to update the meta-data. For example if the task/bug is not assigned to anyone and you would like to take it, change the ``Assigned to'' box, or if you want to report that it has been applied, change the status and so on. All these changes will also be circulated with the email very clearly. @item @command{gnuastro-commits@@gnu.org} @itemx (at @url{https://lists.gnu.org/mailman/listinfo/gnuastro-commits}) @cindex Mailing list: gnuastro-commits This mailing list is defined to circulate all commits that are done in Gnuastro's version controlled source, see @ref{Version controlled source}. If you have any ideas, or suggestions on the commits, please use the bug and task trackers on Savannah to followup the discussion, do not post to this list. All the commits that are made for an already defined issue or task will state the respective ID so you can find it easily. @end table @node Contributing to Gnuastro, , Developing mailing lists, Developing @section Contributing to Gnuastro You have this great idea or have found a good fix to a problem which you would like to implement in Gnuastro. You have also become familiar with the general design of Gnuastro in the previous sections of this chapter (see @ref{Developing}) and want to start working on and sharing your new addition/change with the whole community as part of the official release. This is great and your contribution is most welcome. This section and the next (see @ref{Developer's checklist}) are written in the hope of making it as easy as possible for you to share your great idea with the community. @cindex FSF @cindex Free Software Foundation In this section we discuss the final steps you have to take: legal and technical. From the legal perspective, the copyright of any work you do on Gnuastro has to be assigned to the Free Software Foundation (FSF) and the GNU operating system, or you have to sign a disclaimer. We do this to ensure that Gnuastro can remain free in the future, see @ref{Copyright assignment}. From the technical point of view, in this section we also discuss commit guidelines (@ref{Commit guidelines}) and the general version control workflow of Gnuastro in @ref{Production workflow}, along with a tutorial in @ref{Forking tutorial}. Recall that before starting the work on your idea, be sure to checkout the bugs and tasks trackers in @ref{Gnuastro project webpage} and announce your work there so you don't end up spending time on something others have already worked on, and also to attract similarly interested developers to help you. @menu * Copyright assignment:: Copyright has to be assigned to the FSF. * Commit guidelines:: Guidelines for commit messages. * Production workflow:: Submitting your commits (work) for inclusion. * Forking tutorial:: Tutorial on workflow steps with Git. @end menu @node Copyright assignment, Commit guidelines, Contributing to Gnuastro, Contributing to Gnuastro @subsection Copyright assignment Gnuastro's copyright is owned by the FSF. Professor Eben Moglen, of the Columbia University Law School has given a nice summary of the reasons for this at @url{https://www.gnu.org/licenses/why-assign}. Below we are copying it verbatim for self consistency (in case you are offline or reading in print). @quotation Under US copyright law, which is the law under which most free software programs have historically been first published, there are very substantial procedural advantages to registration of copyright. And despite the broad right of distribution conveyed by the GPL, enforcement of copyright is generally not possible for distributors: only the copyright holder or someone having assignment of the copyright can enforce the license. If there are multiple authors of a copyrighted work, successful enforcement depends on having the cooperation of all authors. In order to make sure that all of our copyrights can meet the record keeping and other requirements of registration, and in order to be able to enforce the GPL most effectively, FSF requires that each author of code incorporated in FSF projects provide a copyright assignment, and, where appropriate, a disclaimer of any work-for-hire ownership claims by the programmer's employer. That way we can be sure that all the code in FSF projects is free code, whose freedom we can most effectively protect, and therefore on which other developers can completely rely. @end quotation Please get in touch with the Gnuastro maintainer (currently Mohammad Akhlaghi, akhlaghi -at- gnu -dot- org) to follow the procedures. It is possible to do this for each change (good for for a single contribution), and also more generally for all the changes/additions you do in the future within Gnuastro. So if you have already assigned the copyright of your work on another GNU software to the FSF, it should be done again for Gnuastro. The FSF has staff working on these legal issues and the maintainer will get you in touch with them to do the paperwork. The maintainer will just be informed in the end so your contributions can be merged within the Gnuastro source code. Gnuastro will gratefully acknowledge (see @ref{Acknowledgments}) all the people who have assigned their copyright to the FSF and have thus helped to guarantee the freedom and reliability of Gnuastro. The Free Software Foundation will also acknowledge your copyright contributions in the Free Software Supporter: @url{https://www.fsf.org/free-software-supporter} which will circulate to a very large community (104,444 people in April 2016). See the archives for some examples and subscribe to receive interesting updates. The very active code contributors (or developers) will also be recognized as project members on the Gnuastro project webpage (see @ref{Gnuastro project webpage}) and can be given a @code{gnu.org} email address. So your very valuable contribution and copyright assignment will not be forgotten and is highly appreciated by a very large community. If you are reluctant to sign an assignment, a disclaimer is also acceptable. @cartouche @noindent @strong{Do I need a disclaimer from my university or employer?} It depends on the contract with your university or employer. From the FSF's @file{/gd/gnuorg/conditions.text}: ``If you are employed to do programming, or have made an agreement with your employer that says it owns programs you write, we need a signed piece of paper from your employer disclaiming rights to'' Gnuastro. The FSF's copyright clerk will kindly help you decide, please consult the following email address: ``assign -at- gnu -dot- org''. @end cartouche @node Commit guidelines, Production workflow, Copyright assignment, Contributing to Gnuastro @subsection Commit guidelines To be able to cleanly integrate your work with the other developers, @strong{never commit on the @file{master} branch} (see @ref{Production workflow} for a complete discussion and @ref{Forking tutorial} for a cookbook example). In short, leave @file{master} only for changes you fetch, or pull from the official repository (see @ref{Synchronizing}). In the Gnuastro commit messages, we strive to follow these standards. Note that in the early phases of Gnuastro's development, we are experimenting and so if you notice earlier commits don't satisfy some of the guidelines below, it is because they predate that guideline. @table @asis @item Commit title The commits have to start with one short descriptive title. The title is separated from the body with one blank line. Run @command{git log} to see some of the most recent commit messages as an example. In general, the title should satisfy the following conditions: @itemize @item It is best for the title to be short, about 60 (or even 50) characters. Most emulated command-line terminals are about 80 characters wide. However, we should also allow for the commit hashes which are printed in @command{git log --oneline}, and also branch names or the graph structure outputs of @command{git log} which are also commonly used. @item The title should not finish with any full-stops or periods (`@key{.}'). @end itemize @item Commit body @cindex Mailing list: gnuastro-commits The body of the commit message is separated from the title by one empty line. Recall that anyone who has subscribed to @command{gnuastro-commits} mailing list will get the commit in their email after it has been pushed to @file{master}. People will also read them when they synchronize with the main Gnuastro repository (see @ref{Synchronizing}). Finally, the commit messages will later be used to update the @file{NEWS} file on each release. Therefore the commit message body plays a very important role in the development of Gnuastro, so please adhere to the following guidelines. @itemize @item The body should be very descriptive. Start the commit message body by explaining what changes your commit makes from a user's perspective (added, changed, or removed options, or arguments to programs or libraries, or modified algorithms, or new installation step, or etc). @item @cindex Mailing list: gnuastro-commits Try to explain the committed contents as best as you can. Recall that the readers of your commit message do not necessarily have your current background. After some time you will also forget the context, so this request is not just for others@footnote{@url{http://catb.org/esr/writings/unix-koans/prodigy.html}}. Therefore be very descriptive and explain as much as possible: what the bug/task was, justify the way you fixed it and discuss other possible solutions that you might not have included. For the last item, it is best to discuss them thoroughly as comments in the appropriate section of the code, but only give a short summary in the commit message. Note that all added and removed source code lines will also be circulated in the @command{gnuastro-commits} mailing list. @item Like all other Gnuastro's text files, the lines in the commit body should not be longer than 75 characters, see @ref{Coding conventions}. This is to ensure that on standard terminal emulators (with 80 character width), the @command{git log} output can be cleanly displayed (note that the commit message is indented in the output of @command{git log}). If you use Emacs, Gnuastro's @file{.dir-locals.el} file will ensure that your commits satisfy this condition (using @key{M-q}). @item @cindex Mailing list: gnuastro-commits When the commit is related to a task or a bug, please include the respective ID (in the format of @code{bug/task #ID}, note the space) in the commit message (from @ref{Gnuastro project webpage}) for interested people to be able to followup the discussion that took place there. If the commit fixes a bug or finishes a task, the recommended way is to add a line after the body with `@code{This fixes bug #ID.}', or `@code{This finishes task #ID.}'. Don't assume that the reader has internet access to check the bug's full description when reading the commit message, so give a short introduction too. @end itemize @end table @node Production workflow, Forking tutorial, Commit guidelines, Contributing to Gnuastro @subsection Production workflow Fortunately `Pro Git' has done a wonderful job in explaining the different workflows in Chapter 5@footnote{@url{http://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows}} and in particular the ``Integration-Manager Workflow'' explained there. The implementation of this workflow is nicely explained in Section 5.2@footnote{@url{http://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project}} under ``Forked-Public-Project''. We have also prepared a short tutorial in @ref{Forking tutorial}. Anything on the master branch should always be tested and ready to be built and used. As described in `Pro Git', there are two methods for you to contribute to Gnuastro in the Integration-Manager Workflow: @enumerate @item You can send commit patches by email as fully explained in `Pro Git'. This is good for your first few contributions. Just note that raw patches (containing only the diff) do not have any meta-data (author name, date and etc). Therefore they will not allow us to fully acknowledge your contributions as an author in Gnuastro: in the @file{AUTHORS} file and at the start of the PDF book. These author lists are created automatically from the version controlled source. To receive full acknowledgment when submitting a patch, is thus advised to use Git's @code{format-patch} tool. See Pro Git's @url{https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#Public-Project-over-Email, Public project over email} section for a nice explanation. If you would like to get more heavily involved in Gnuastro's development, then you can try the next solution. @item You can have your own forked copy of Gnuastro on any hosting site you like (GitHub, GitLab, BitBucket, or etc) and inform us when your changes are ready so we merge them in Gnuastro. This is more suited for people who commonly contribute to the code (see @ref{Forking tutorial}). @end enumerate In both cases, your commits (with your name and information) will be preserved and your contributions will thus be fully recorded in the history of Gnuastro and in the @file{AUTHORS} file and this book (second page in the PDF format) once they have been incorporated into the official repository. Needless to say that in such cases, be sure to follow the bug or task trackers (or subscribe to the @command{gnuastro-devel} mailing list) and contact us before hand so you don't do something that someone else is already working on. In that case, you can get in touch with them and help the job go on faster, see @ref{Gnuastro project webpage}. This workflow is currently mostly borrowed from the general recommendations of Git@footnote{@url{https://github.com/git/git/blob/master/Documentation/SubmittingPatches}} and GitHub. But since Gnuastro is currently under heavy development, these might change and evolve to better suit our needs. @node Forking tutorial, , Production workflow, Contributing to Gnuastro @subsection Forking tutorial This is a tutorial on the second suggested method (commonly known as forking) that you can submit your modifications in Gnuastro (see @ref{Production workflow}). To start, please create an empty repository on your hosting service webpage (we recommend GitLab@footnote{See @url{https://www.gnu.org/software/repo-criteria-evaluation.html} for an evaluation of the major existing repositories. Gnuastro uses GNU Savannah (which also has the highest ranking in the evaluation), but for starters, GitLab may be easier.}). If this is your first hosted repository on the webpage, you also have to upload your public SSH key@footnote{For example see this explanation provided by GitLab: @url{http://docs.gitlab.com/ce/ssh/README.html}.} for the @command{git push} command below to work. Here we'll assume you use the name @file{janedoe} to refer to yourself everywhere and that you choose @file{gnuastro-janedoe} as the name of your Gnuastro fork. Any online hosting service will give you an address (similar to the `@file{git@@gitlab.com:...}' below) of the empty repository you have created using their webpage, use that address in the third line below. @example $ git clone git://git.sv.gnu.org/gnuastro.git $ cd gnuastro $ git remote add janedoe git@@gitlab.com:janedoe/gnuastro-janedoe.git $ git push janedoe master @end example The full Gnuastro history is now pushed onto your hosting service and the @file{janedoe} remote is now also following your @file{master} branch. If you run @command{git remote show REMOTENAME} for the @file{origin} and @file{janedoe} remotes, you will see their difference: the first has pull access and the second doesn't. This nicely summarizes the main idea behind this workflow: you push to your remote repository, we pull from it and merge it into @file{master}, then you finalize it by pulling from the main repository. To test (compile) your changes during your work, you will need to bootstrap the version controlled source, see @ref{Bootstrapping} for a full description. The cloning process above is only necessary for your first time setup, you don't need to repeat it. However, please repeat the steps below for each independent issue you intend to work on. Let's assume you have found a bug in @file{lib/statistics.c}'s median calculating function. Before actually doing anything, please announce it (see @ref{Report a bug}) so everyone knows you are working on it or to find out others aren't already working on it. With the commands below, you make a branch, checkout to it, correct the bug, check if it is indeed fixed, add it to the staging area, commit it to the new branch and push it to your hosting service. But before all of them, make sure that you are on the @file{master} branch and that your @file{master} branch is up to date with the main Gnuastro repository with the first two commands. @example $ git checkout master $ git pull $ git checkout -b bug-median-stats # Choose a descriptive name $ emacs lib/statistics.c $ # do your checks here $ git add lib/statistics.c $ git commit $ git push janedoe bug-median-stats @end example Your new branch is now on your hosted repository. Through the respective tacker on Savannah (see @ref{Gnuastro project webpage}) you can then let the other developers know that your @file{bug-median-stats} branch is ready. They will pull your work, test it themselves and if it is ready to be merged into the main Gnuastro history, they will merge it into the @file{master} branch. After that is done, you can simply checkout your local @file{master} branch and pull all the changes from the main repository. After the pull you can run `@command{git log}' as shown below, to see how @file{bug-median-stats} is merged with master. To finalize, you can push all the changes to your hosted repository and delete the branch: @example $ git checkout master $ git pull $ git log --oneline --graph --decorate --all $ git push janedoe master $ git branch -d bug-median-stats # delete local branch $ git push janedoe --delete bug-median-stats # delete remote branch @end example Just as a reminder, always keep your work on each issue in a separate local and remote branch so work can progress on them independently. After you make your announcement, other people might contribute to the branch before merging it in to @file{master}, so this is very important. As a final reminder: before starting each issue branch from @file{master}, be sure to run @command{git pull} in @file{master} as shown above. This will enable you to start your branch (work) from the most recent commit and thus simplify the final merging of your work. @node Gnuastro programs list, Other useful software, Developing, Top @appendix Gnuastro programs list GNU Astronomy Utilities @value{VERSION}, contains the following programs. They are sorted in alphabetical order and a short description is provided for each program. The description starts with the executable names in @file{thisfont} followed by a pointer to the respective section in parenthesis. Throughout this book, they are ordered based on their context, please see the top-level contents for contextual ordering (based on what they do). @table @asis @item Arithmetic (@file{astarithmetic}, see @ref{Arithmetic}) For arithmetic operations on multiple (theoretically unlimited) number of datasets (images). It has a large and growing set of arithmetic, mathematical, and even statistical operators (for example @command{+}, @command{-}, @command{*}, @command{/}, @command{sqrt}, @command{log}, @command{min}, @command{average}, @command{median}). @item BuildProgram (@file{astbuildprog}, see @ref{BuildProgram}) Compile, link and run programs that depend on the Gnuastro library (see @ref{Gnuastro library}). This program will automatically link with the libraries that Gnuastro depends on, so there is no need to explicitly mention them every time you are compiling a Gnuastro library dependent program. @item ConvertType (@file{astconvertt}, see @ref{ConvertType}) Convert astronomical data files (FITS or IMH) to and from several other standard image and data formats, for example TXT, JPEG, EPS or PDF. @item Convolve (@file{astconvolve}, see @ref{Convolve}) Convolve (blur or smooth) data with a given kernel in spatial and frequency domain on multiple threads. Convolve can also do de-convolution to find the appropriate kernel to PSF-match two images. @item CosmicCalculator (@file{astcosmiccal}, see @ref{CosmicCalculator}) Do cosmological calculations, for example the luminosity distance, distance modulus, comoving volume and many more. @item Crop (@file{astcrop}, see @ref{Crop}) Crop region(s) from an image and stitch several images if necessary. Inputs can be in pixel coordinates or world coordinates. @item Fits (@file{astfits}, see @ref{Fits}) View and manipulate FITS file extensions and header keywords. @item Statistics (@file{aststatistics}, see @ref{Statistics}) Get pixel statistics and save histogram and cumulative frequency plots. @item MakeCatalog (@file{astmkcatalog}, see @ref{MakeCatalog}) Make catalog of labeled image (output of NoiseChisel). The catalogs are highly customizable and adding new calculations/columns is very straightforward. @item MakeNoise (@file{astmknoise}, see @ref{MakeNoise}) Make (add) noise to an image, with a large set of random number generators and any seed. @item MakeProfiles (@file{astmkprof}, see @ref{MakeProfiles}) Make mock 2D profiles in an image. The central regions of radial profiles are made with a configurable 2D Monte Carlo integration. It can also build the profiles on an over-sampled image. @item Match (@file{astmatch}, see @ref{Match}) Given two input catalogs, find the rows that match with each other within a given aperture (may be an ellipse). @item NoiseChisel (@file{astnoisechisel}, see @ref{NoiseChisel}) Detect and segment signal in noise. It uses a technique to detect very faint and diffuse, irregularly shaped signal in noise (galaxies in the sky), using thresholds that are below the Sky value, see @url{http://arxiv.org/abs/1505.01664, arXiv:1505.01664}. @item Table (@file{asttable}, @ref{Table}) Convert FITS binary and ASCII tables into other such tables, print them on the command-line, save them in a plain text file, or get the FITS table information. @item Warp (@file{astwarp}, see @ref{Warp}) Warp image to new pixel grid. Any projective transformation or Homography can be applied to the input images. @end table @node Other useful software, GNU Free Doc. License, Gnuastro programs list, Top @appendix Other useful software In this appendix the installation of programs and libraries that are not direct Gnuastro dependencies are discussed. However they can be useful for working with Gnuastro. @menu * SAO ds9:: Viewing FITS images. * PGPLOT:: Plotting directly in C @end menu @node SAO ds9, PGPLOT, Other useful software, Other useful software @section SAO ds9 @cindex SAO ds9 @cindex FITS image viewer SAO ds9@footnote{@url{http://ds9.si.edu/}} is not a requirement of Gnuastro, it is a FITS image viewer. So to check your inputs and outputs, it is one of the best options. Like the other packages, it might already be available in your distribution's repositories. It is already pre-compiled in the download section of its webpage. Once you download it you can unpack and install (move it to a system recognized directory) with the following commands (@code{x.x.x} is the version number): @example $ tar xf ds9.linux64.x.x.x.tar.gz $ sudo mv ds9 /usr/local/bin @end example Once you run it, there might be a complaint about the Xss library, which you can find in your distribution package management system. You might also get an @command{XPA} related error. In this case, you have to add the following line to your @file{~/.bashrc} and @file{~/.profile} file (you will have to log out and back in again for the latter): @example export XPA_METHOD=local @end example @menu * Viewing multiextension FITS images:: Configure SAO ds9 for multiextension images. @end menu @node Viewing multiextension FITS images, , SAO ds9, SAO ds9 @subsection Viewing multiextension FITS images @cindex Multiextension FITS @cindex Opening multiextension FITS The FITS definition allows for multiple extensions inside a FITS file, each extension can have a completely independent data set inside of it. If you ordinarily open a multi-extension FITS file with SAO ds9, for example by double clicking on the file or running @command{$ds9 foo.fits}, SAO ds9 will only show you the first extension. To be able to switch between the extensions you have to follow these menus in the SAO ds9 window: @clicksequence{File@click{}Open Other@click{}Open Multi Ext Cube} and then choose the Multi extension FITS file in your computer's file structure. @cindex @option{-mecube} (ds9) The method above is a little tedious to do every time you want view a multi-extension FITS file. Fortunately SAO ds9 also provides options that you can use to specify a particular behavior. One of those options is @option{-mecube} which opens a FITS image as a multi-extension data cube. So on the command-line, if you run @command{$ds9 -mecube foo.fits} a small window will also be opened, which allows you to switch between the image extensions that @file{foo.fits} might have. If @file{foo.fits} only consists of one extension, then SAO ds9 will open as usual. Just to avoid confusion, note that SAO ds9 does not follow the GNU style of separating long and short options as explained in @ref{Arguments and options}. In the GNU style, this `long' option should have been called like @option{--mecube}, but SAO ds9 does follow those conventions and has its own. @cindex GNOME 3 It is really convenient if you set ds9 to always run with the @option{-mecube} option on your graphical display. On GNOME 3 (the most popular graphic user interface for GNU/Linux systems) you can do this by taking the following steps: @itemize @item @cindex @file{.desktop} Open your favorite text editor and put the following text in a file that ends with @file{.desktop}, for example @file{saods9.desktop}. The file is very descriptive. @example [Desktop Entry] Type=Application Version=1.0 Name=SAO ds9 Comment=View FITS images Exec=ds9 -mecube %f Terminal=false Categories=Graphic;FITS; @end example @item Copy this file into your local (user) applications directory: @example $ cp saods9.desktop ~/.local/share/applications/ @end example In case you don't have the directory, you can make it yourself: @example $ mkdir -p ~/.local/share/applications/ @end example @item The steps above will add SAO ds9 as one of your applications. To make it default for every time you click on a FITS file. Right click on a FITS file and select ``Open With'', then go into ``Other Application...'' and choose ``SAO ds9''. @end itemize @cindex GNOME 2 In case you are using GNOME 2 you can take the following steps: right click on a FITS file and choose @clicksequence{Properties@click{}Open With@click{}Add} button. A list of applications will show up, ds9 might already be present in the list, but don't choose it because it will run with no options. Below the list is an option ``Use a custom command''. Click on it and write the following command: @command{ds9 -mecube} in the box and click ``Add''. Then finally choose the command you just added as the default and click the ``Close'' button. @node PGPLOT, , SAO ds9, Other useful software @section PGPLOT @cindex PGPLOT @cindex C, plotting @cindex Plotting directly in C PGPLOT is a package for making plots in C. It is not directly needed by Gnuastro, but can be used by WCSLIB, see @ref{WCSLIB}. As explained in @ref{WCSLIB}, you can install WCSLIB without it too. It is very old (the most recent version was released early 2001!), but remains one of the main packages for plotting directly in C. WCSLIB uses this package to make plots if you want it to make plots. If you are interested you can also use it for your own purposes. @cindex Python Matplotlib @cindex Matplotlib, Python @cindex PGFplots in @TeX{} or @LaTeX{} If you want your plotting codes in between your C program, PGPLOT is currently one of your best options. The recommended alternative to this method is to get the raw data for the plots in text files and input them into any of the various more modern and capable plotting tools separately, for example the Matplotlib library in Python or PGFplots in @LaTeX{}. This will also significantly help code readability. Let's get back to PGPLOT for the sake of WCSLIB. Installing it is a little tricky (mainly because it is so old!). You can download the most recent version from the FTP link in its webpage@footnote{@url{http://www.astro.caltech.edu/~tjp/pgplot/}}. You can unpack it with the @command{tar xf} command. Let's assume the directory you have unpacked it to is @file{PGPLOT}, most probably it is: @file{/home/username/Downloads/pgplot/}. open the @file{drivers.list} file: @example $ gedit drivers.list @end example @noindent Remove the @code{!} for the following lines and save the file in the end: @example PSDRIV 1 /PS PSDRIV 2 /VPS PSDRIV 3 /CPS PSDRIV 4 /VCPS XWDRIV 1 /XWINDOW XWDRIV 2 /XSERVE @end example @noindent Don't choose GIF or VGIF, there is a problem in their codes. Open the @file{PGPLOT/sys_linux/g77_gcc.conf} file: @example $ gedit PGPLOT/sys_linux/g77_gcc.conf @end example @noindent change the line saying: @code{FCOMPL="g77"} to @code{FCOMPL="gfortran"}, and save it. This is a very important step during the compilation of the code if you are in GNU/Linux. You now have to create a folder in @file{/usr/local}, don't forget to replace @file{PGPLOT} with your unpacked address: @example $ su # mkdir /usr/local/pgplot # cd /usr/local/pgplot # cp PGPLOT/drivers.list ./ @end example To make the Makefile, type the following command: @example # PGPLOT/makemake PGPLOT linux g77_gcc @end example @noindent It should finish by saying: @command{Determining object file dependencies}. You have done the hard part! The rest is easy: run these three commands in order: @example # make # make clean # make cpg @end example Finally you have to place the position of this directory you just made into the @command{LD_LIBRARY_PATH} environment variable and define the environment variable @command{PGPLOT_DIR}. To do that, you have to edit your @file{.bashrc} file: @example $ cd ~ $ gedit .bashrc @end example @noindent Copy these lines into the text editor and save it: @cindex @file{LD_LIBRARY_PATH} @example PGPLOT_DIR="/usr/local/pgplot/"; export PGPLOT_DIR LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgplot/ export LD_LIBRARY_PATH @end example @noindent You need to log out and log back in again so these definitions take effect. After you logged back in, you want to see the result of all this labor, right? Tim Pearson has done that for you, create a temporary folder in your home directory and copy all the demonstration files in it: @example $ cd ~ $ mkdir temp $ cd temp $ cp /usr/local/pgplot/pgdemo* ./ $ ls @end example You will see a lot of pgdemoXX files, where XX is a number. In order to execute them type the following command and drink your coffee while looking at all the beautiful plots! You are now ready to create your own. @example $ ./pgdemoXX @end example @node GNU Free Doc. License, Index, Other useful software, Top @appendix GNU Free Doc. License @cindex GNU Free Documentation License @include fdl.texi @c Print the index and finish: @node Index, , GNU Free Doc. License, Top @unnumbered Index: Macros, structures and functions All Gnuastro library's exported macros start with @code{GAL_}, and its exported structures and functions start with @code{gal_}. This abbreviation stands for @emph{G}NU @emph{A}stronomy @emph{L}ibrary. The next element in the name is the name of the header which declares or defines them, so to use the @code{gal_array_fset_const} function, you have to @code{#include }. See @ref{Gnuastro library} for more. The @code{pthread_barrier} constructs are our implementation and are only available on systems that don't have them, see @ref{Implementation of pthread_barrier}. @printindex fn @unnumbered Index @printindex cp @bye gnuastro-0.5/doc/README0000644000175000017500000000371412722534072011577 00000000000000Documentation of GNU Astronomy Utilities ======================================== This directory contains the documentation (manual) of GNU Astronomy Utilities (Gnuastro) and also all the files necessary for the Gnuastro webpage. Note that only the basic files needed to make the webpage are version controlled. The generated files are not. Documentation (manual): ----------------------- The documentation of Gnuastro is written in Texinfo. The main source file is `gnuastro.texi'. Webpage (only for maintainer) ----------------------------- The top Gnuastro webpage files are also held here, after all, a webpage is another form of documentation. To update the webpage, run the following script: $ ./forwebpage This script will generate the webpage using Gnulib's gendocs.sh script (which was part of the bootstrapping process), then it will copy them all in a specified directory anywhere you like (specified by the TOPWEBCHECKOUT shell variable). You don't have to version control any of the files in that directory, but it is easiest to have a fixed place since CVS needs a local copy. Unfortunately the GNU webpage runs on CVS! Read the top comments of the `forwebpage' script for instructions on what to do for the first time and later times. Update MathJax (for the webpage, only for maintainer) ----------------------------------------------------- There is a script in the `MathJax' directory on the Gnuastro webpage directory to update MathJax (`addmissing.sh'). You can get a recent version of MathJax from its webpage and put it in the correct place (see the comments in the script). That script will then add all the new files from MathJax to the checked out files and then you can use `cvs -nq update' and `cvs add' to add all the new files and directories. Just note that CVS is an antique(!) and so you have to add all the files in separate directories separately, first add the directory, then CVS will find the untracked files inside it and add them one by one! gnuastro-0.5/doc/Makefile.in0000644000175000017500000024056113217217706012771 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \ $(srcdir)/stamp-vti $(dist_infognuastro_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/gnuastro.info TEXINFO_TEX = $(top_srcdir)/bootstrapped/build-aux/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/bootstrapped/build-aux DVIS = gnuastro.dvi PDFS = gnuastro.pdf PSS = gnuastro.ps HTMLS = gnuastro.html TEXINFOS = gnuastro.texi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(infognuastrodir)" 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; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) DATA = $(dist_infognuastro_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(dist_man_MANS) $(gnuastro_TEXINFOS) \ $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/mdate-sh \ $(top_srcdir)/bootstrapped/build-aux/texinfo.tex README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = /bin/bash SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ BUILT_SOURCES = $(srcdir)/authors.texi bootstrpdoc = $(top_srcdir)/bootstrapped/doc AM_MAKEINFOFLAGS = -I $(bootstrpdoc) -I $(srcdir) # This is just a temporary work-around since Automake does not pass the # AM_MAKEINFOFLAGS to texi2dvi (which builds DVI and PDF outputs). This was # reported in Automake's bug 23599. Note that a space is necessary between # the `-I' and directory for texi2dvi. TEXI2DVI = texi2dvi -I $(bootstrpdoc) -I $(srcdir) info_TEXINFOS = gnuastro.texi gnuastro_TEXINFOS = $(bootstrpdoc)/fdl.texi formath.texi \ $(srcdir)/authors.texi EXTRA_DIST = genauthors README infognuastrodir = $(infodir)/gnuastro-figures/ dist_infognuastro_DATA = $(top_srcdir)/doc/gnuastro-figures/* @COND_ARITHMETIC_TRUE@MAYBE_ARITHMETIC_MAN = man/astarithmetic.1 @COND_BUILDPROG_TRUE@MAYBE_BUILDPROG_MAN = man/astbuildprog.1 @COND_CONVERTT_TRUE@MAYBE_CONVERTT_MAN = man/astconvertt.1 @COND_CONVOLVE_TRUE@MAYBE_CONVOLVE_MAN = man/astconvolve.1 @COND_COSMICCAL_TRUE@MAYBE_COSMICCAL_MAN = man/astcosmiccal.1 @COND_CROP_TRUE@MAYBE_CROP_MAN = man/astcrop.1 @COND_FITS_TRUE@MAYBE_FITS_MAN = man/astfits.1 @COND_MATCH_TRUE@MAYBE_MATCH_MAN = man/astmatch.1 @COND_MKCATALOG_TRUE@MAYBE_MKCATALOG_MAN = man/astmkcatalog.1 @COND_MKNOISE_TRUE@MAYBE_MKNOISE_MAN = man/astmknoise.1 @COND_MKPROF_TRUE@MAYBE_MKPROF_MAN = man/astmkprof.1 @COND_NOISECHISEL_TRUE@MAYBE_NOISECHISEL_MAN = man/astnoisechisel.1 @COND_STATISTICS_TRUE@MAYBE_STATISTICS_MAN = man/aststatistics.1 @COND_TABLE_TRUE@MAYBE_TABLE_MAN = man/asttable.1 @COND_WARP_TRUE@MAYBE_WARP_MAN = man/astwarp.1 #if COND_TEMPLATE # MAYBE_TEMPLATE_MAN = man/astTEMPLATE.1 #endif dist_man_MANS = $(MAYBE_ARITHMETIC_MAN) $(MAYBE_BUILDPROG_MAN) \ $(MAYBE_CONVERTT_MAN) $(MAYBE_CONVOLVE_MAN) $(MAYBE_COSMICCAL_MAN) \ $(MAYBE_CROP_MAN) $(MAYBE_FITS_MAN) $(MAYBE_MATCH_MAN) $(MAYBE_WARP_MAN) \ $(MAYBE_MKCATALOG_MAN) $(MAYBE_MKNOISE_MAN) $(MAYBE_MKPROF_MAN) \ $(MAYBE_NOISECHISEL_MAN) $(MAYBE_STATISTICS_MAN) $(MAYBE_TABLE_MAN) @COND_HASHELP2MAN_FALSE@MAYBE_HELP2MAN = @echo "Using distributed man page for" @COND_HASHELP2MAN_TRUE@MAYBE_HELP2MAN = help2man --output=$@ --source="$(PACKAGE_STRING)" # Build the `man' directory and then put all the man pages in # it. Unfortunately as far as I know, pattern rules are not portable in all # implementations of Make, so we have to list all the utilities manually. toputildir = $(top_builddir)/bin ALLMANSDEP = $(top_srcdir)/lib/gnuastro-internal/options.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: $(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) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs .texi.info: $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ $< .texi.pdf: $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ $< .texi.html: $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@ && mv $(@:.html=.htp) $@; \ else \ rm -rf $(@:.html=.htp); exit 1; \ fi $(srcdir)/gnuastro.info: gnuastro.texi $(srcdir)/version.texi $(gnuastro_TEXINFOS) gnuastro.dvi: gnuastro.texi $(srcdir)/version.texi $(gnuastro_TEXINFOS) gnuastro.pdf: gnuastro.texi $(srcdir)/version.texi $(gnuastro_TEXINFOS) gnuastro.html: gnuastro.texi $(srcdir)/version.texi $(gnuastro_TEXINFOS) $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: gnuastro.texi $(top_srcdir)/configure @(dir=.; test -f ./gnuastro.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/bootstrapped/build-aux/mdate-sh $$dir/gnuastro.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi" && \ cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \ mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \ rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$ @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp* $(srcdir)/version.texi.tmp* maintainer-clean-vti: -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf gnuastro.t2d gnuastro.t2p clean-aminfo: -test -z "gnuastro.dvi gnuastro.pdf gnuastro.ps gnuastro.html" \ || rm -rf gnuastro.dvi gnuastro.pdf gnuastro.ps gnuastro.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-dist_infognuastroDATA: $(dist_infognuastro_DATA) @$(NORMAL_INSTALL) @list='$(dist_infognuastro_DATA)'; test -n "$(infognuastrodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infognuastrodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infognuastrodir)" || 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)$(infognuastrodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infognuastrodir)" || exit $$?; \ done uninstall-dist_infognuastroDATA: @$(NORMAL_UNINSTALL) @list='$(dist_infognuastro_DATA)'; test -n "$(infognuastrodir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(infognuastrodir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(INFO_DEPS) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(infognuastrodir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-dist_infognuastroDATA install-info-am \ install-man install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || 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)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || 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)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || 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)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ mostlyclean-libtool mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-dist_infognuastroDATA uninstall-dvi-am \ uninstall-html-am uninstall-info-am uninstall-man \ uninstall-pdf-am uninstall-ps-am uninstall-man: uninstall-man1 .MAKE: all check install install-am install-strip .PHONY: all all-am check check-am clean clean-aminfo clean-generic \ clean-libtool cscopelist-am ctags-am dist-info distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dist_infognuastroDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean \ mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool \ mostlyclean-vti pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_infognuastroDATA uninstall-dvi-am \ uninstall-html-am uninstall-info-am uninstall-man \ uninstall-man1 uninstall-pdf-am uninstall-ps-am .PRECIOUS: Makefile $(srcdir)/authors.texi: $(top_srcdir)/configure $(top_srcdir)/doc/genauthors $(top_srcdir) man/astarithmetic.1: $(top_srcdir)/bin/arithmetic/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "arithmetic operations on images and numbers" \ --libtool $(toputildir)/arithmetic/astarithmetic man/astbuildprog.1: $(top_srcdir)/bin/buildprog/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "compile, link with Gnuastro library and its dependencies, and run a C program" \ --libtool $(toputildir)/buildprog/astbuildprog man/astconvertt.1: $(top_srcdir)/bin/convertt/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "convert known data types to each other" \ --libtool $(toputildir)/convertt/astconvertt man/astconvolve.1: $(top_srcdir)/bin/convolve/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "convolve an image with a given kernel" \ --libtool $(toputildir)/convolve/astconvolve man/astcosmiccal.1: $(top_srcdir)/bin/cosmiccal/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "estimate cosmological values" \ --libtool $(toputildir)/cosmiccal/astcosmiccal man/astcrop.1: $(top_srcdir)/bin/crop/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "crop regions of a dataset" \ --libtool $(toputildir)/crop/astcrop man/astfits.1: $(top_srcdir)/bin/fits/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "view and manipulate FITS headers" \ --libtool $(toputildir)/fits/astfits man/astmatch.1: $(top_srcdir)/bin/match/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "match catalogs by 1D or 2D positions" \ --libtool $(toputildir)/match/astmatch man/astmkcatalog.1: $(top_srcdir)/bin/mkcatalog/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Make a catalog from labeled input images" \ --libtool $(toputildir)/mkcatalog/astmkcatalog man/astmknoise.1: $(top_srcdir)/bin/mknoise/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "add noise to an image" \ --libtool $(toputildir)/mknoise/astmknoise man/astmkprof.1: $(top_srcdir)/bin/mkprof/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "make standard 2D profiles on an image" \ --libtool $(toputildir)/mkprof/astmkprof man/astnoisechisel.1: $(top_srcdir)/bin/noisechisel/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "detect signal in a noisy image" \ --libtool $(toputildir)/noisechisel/astnoisechisel man/aststatistics.1: $(top_srcdir)/bin/statistics/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "calculate statistics of a dataset" \ --libtool $(toputildir)/statistics/aststatistics man/asttable.1: $(top_srcdir)/bin/table/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "read and write ASCII and FITS tables" \ --libtool $(toputildir)/table/asttable #man/astTEMPLATE.1: $(top_srcdir)/bin/TEMPLATE/args.h $(ALLMANSDEP) # $(MAYBE_HELP2MAN) -n "put a short description here" \ # $(toputildir)/TEMPLATE/astTEMPLATE man/astwarp.1: $(top_srcdir)/bin/warp/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "warp (transform) input dataset" \ --libtool $(toputildir)/warp/astwarp # 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: gnuastro-0.5/doc/authors.texi0000644000175000017500000000034413217220432013263 00000000000000Mohammad Akhlaghi (mohammad@@akhlaghi.org, 883)@* Mos@`e Giordano (mose@@gnu.org, 29)@* Vladimir Markelov (vmatroskin@@gmail.com, 18)@* Boud Roukema (boud@@cosmo.torun.pl, 7)@* Lucas MacQuarrie (macquarrielucas@@gmail.com, 1)@* gnuastro-0.5/doc/formath.texi0000644000175000017500000000262212460442046013245 00000000000000@ignore Some macros to be able to show math nicely in HTML and TeX. The problem is that when you use braces in the TeX commands, Texinfo will complain for other formats and when you quote the braces with the at sign, e.g. @{, then TeX will not see the brace properly. So I made two macro functions: mymath{} and dispmath{}. The first is for inline math and the second is for display math where the equation has a line of its own. For the other formats, everything is normal, except the display math equations that don't have any proper solution, so I have just put a $$ $$ around the math. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. @end ignore @c HTML: @ifhtml @macro mymath{arg} @inlineraw{html,\\(\arg\\\)} @end macro @macro dispmath{arg} @inlineraw{html,$$\arg\$$} @end macro @end ifhtml @c Docbook @ifdocbook @macro mymath{arg} @math{\arg\} @end macro @macro dispmath{arg} @center@inlineraw{docbook,$$\arg\$$} @end macro @end ifdocbook @c info and plaintext @ifinfo @macro mymath{arg} @inlineraw{info,$\arg\$} @end macro @macro dispmath{arg} @center@inlineraw{info,$$\arg\$$} @end macro @end ifinfo @c TeX @iftex @macro mymath{arg} @math{\arg\} @end macro @macro dispmath{arg} @tex $$\arg\$$ @end tex @end macro @end iftex gnuastro-0.5/doc/stamp-vti0000644000175000017500000000014113217220432012545 00000000000000@set UPDATED 22 December 2017 @set UPDATED-MONTH December 2017 @set EDITION 0.5 @set VERSION 0.5 gnuastro-0.5/doc/version.texi0000644000175000017500000000014113217220432013256 00000000000000@set UPDATED 22 December 2017 @set UPDATED-MONTH December 2017 @set EDITION 0.5 @set VERSION 0.5 gnuastro-0.5/doc/Makefile.am0000644000175000017500000001763513215601241012751 00000000000000## Process this file with automake to produce Makefile.inx ## ## This is part of GNU Astronomy Utilities (gnuastro). It will be ## called by the Makefile.am in the top directory. ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## GNU Astronomy Utilities is free software: you can redistribute it ## and/or modify it under the terms of the GNU General Public License ## as published by the Free Software Foundation, either version 3 of ## the License, or (at your option) any later version. ## ## GNU Astronomy Utilities is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with GNU Astronomy Utilities. If not, see ## . ## Set the shell SHELL=/bin/bash BUILT_SOURCES = $(srcdir)/authors.texi ## fdl.texi (The GNU Free documentation license in Texinfo format) is ## bootstrapped from Gnulib. Therefore it is not in this ## directory. However, it is needed by gnuastro.texi to build the ## documentation. It is the job of AM_MAKEINFOFLAGS, to pass options to the ## documentation build programs. BOOTSTRPDOC is defined in `configure.ac'. bootstrpdoc = $(top_srcdir)/bootstrapped/doc AM_MAKEINFOFLAGS = -I $(bootstrpdoc) -I $(srcdir) # This is just a temporary work-around since Automake does not pass the # AM_MAKEINFOFLAGS to texi2dvi (which builds DVI and PDF outputs). This was # reported in Automake's bug 23599. Note that a space is necessary between # the `-I' and directory for texi2dvi. TEXI2DVI = texi2dvi -I $(bootstrpdoc) -I $(srcdir) ## Commands to make the texinfo tools. info_TEXINFOS = gnuastro.texi gnuastro_TEXINFOS = $(bootstrpdoc)/fdl.texi formath.texi \ $(srcdir)/authors.texi ## Files not predefined by Automake, and not in dependencies that must ## be included in the final tar-ball distribution. EXTRA_DIST = genauthors README ## We want to build the authors.texi file only when we are building in the ## version controlled source. For the non version controlled souce, ## deleting this file is like somehow deleting formath.texi, it will not be ## rebuilt and result in an error. $(srcdir)/authors.texi: $(top_srcdir)/configure $(top_srcdir)/doc/genauthors $(top_srcdir) ## Images: infognuastrodir=$(infodir)/gnuastro-figures/ dist_infognuastro_DATA = $(top_srcdir)/doc/gnuastro-figures/* ## Man pages to build ## ================== ## ## Installing all the programs is not mandatory in Gnuastro. If a program ## is not built, we shouldn't build its man-page either. if COND_ARITHMETIC MAYBE_ARITHMETIC_MAN = man/astarithmetic.1 endif if COND_BUILDPROG MAYBE_BUILDPROG_MAN = man/astbuildprog.1 endif if COND_CONVERTT MAYBE_CONVERTT_MAN = man/astconvertt.1 endif if COND_CONVOLVE MAYBE_CONVOLVE_MAN = man/astconvolve.1 endif if COND_COSMICCAL MAYBE_COSMICCAL_MAN = man/astcosmiccal.1 endif if COND_CROP MAYBE_CROP_MAN = man/astcrop.1 endif if COND_FITS MAYBE_FITS_MAN = man/astfits.1 endif if COND_MATCH MAYBE_MATCH_MAN = man/astmatch.1 endif if COND_MKCATALOG MAYBE_MKCATALOG_MAN = man/astmkcatalog.1 endif if COND_MKNOISE MAYBE_MKNOISE_MAN = man/astmknoise.1 endif if COND_MKPROF MAYBE_MKPROF_MAN = man/astmkprof.1 endif if COND_NOISECHISEL MAYBE_NOISECHISEL_MAN = man/astnoisechisel.1 endif if COND_STATISTICS MAYBE_STATISTICS_MAN = man/aststatistics.1 endif if COND_TABLE MAYBE_TABLE_MAN = man/asttable.1 endif if COND_WARP MAYBE_WARP_MAN = man/astwarp.1 endif #if COND_TEMPLATE # MAYBE_TEMPLATE_MAN = man/astTEMPLATE.1 #endif dist_man_MANS = $(MAYBE_ARITHMETIC_MAN) $(MAYBE_BUILDPROG_MAN) \ $(MAYBE_CONVERTT_MAN) $(MAYBE_CONVOLVE_MAN) $(MAYBE_COSMICCAL_MAN) \ $(MAYBE_CROP_MAN) $(MAYBE_FITS_MAN) $(MAYBE_MATCH_MAN) $(MAYBE_WARP_MAN) \ $(MAYBE_MKCATALOG_MAN) $(MAYBE_MKNOISE_MAN) $(MAYBE_MKPROF_MAN) \ $(MAYBE_NOISECHISEL_MAN) $(MAYBE_STATISTICS_MAN) $(MAYBE_TABLE_MAN) ## See if help2man is present or not. When help2man doesn't exist, we don't ## want to overwhelm the user with any commands, so we just let them know ## that the distributed man pages will be used. if COND_HASHELP2MAN MAYBE_HELP2MAN = help2man --output=$@ --source="$(PACKAGE_STRING)" else MAYBE_HELP2MAN = @echo "Using distributed man page for" endif # Build the `man' directory and then put all the man pages in # it. Unfortunately as far as I know, pattern rules are not portable in all # implementations of Make, so we have to list all the utilities manually. toputildir=$(top_builddir)/bin ALLMANSDEP = $(top_srcdir)/lib/gnuastro-internal/options.h man/astarithmetic.1: $(top_srcdir)/bin/arithmetic/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "arithmetic operations on images and numbers" \ --libtool $(toputildir)/arithmetic/astarithmetic man/astbuildprog.1: $(top_srcdir)/bin/buildprog/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "compile, link with Gnuastro library and its dependencies, and run a C program" \ --libtool $(toputildir)/buildprog/astbuildprog man/astconvertt.1: $(top_srcdir)/bin/convertt/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "convert known data types to each other" \ --libtool $(toputildir)/convertt/astconvertt man/astconvolve.1: $(top_srcdir)/bin/convolve/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "convolve an image with a given kernel" \ --libtool $(toputildir)/convolve/astconvolve man/astcosmiccal.1: $(top_srcdir)/bin/cosmiccal/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "estimate cosmological values" \ --libtool $(toputildir)/cosmiccal/astcosmiccal man/astcrop.1: $(top_srcdir)/bin/crop/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "crop regions of a dataset" \ --libtool $(toputildir)/crop/astcrop man/astfits.1: $(top_srcdir)/bin/fits/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "view and manipulate FITS headers" \ --libtool $(toputildir)/fits/astfits man/astmatch.1: $(top_srcdir)/bin/match/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "match catalogs by 1D or 2D positions" \ --libtool $(toputildir)/match/astmatch man/astmkcatalog.1: $(top_srcdir)/bin/mkcatalog/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Make a catalog from labeled input images" \ --libtool $(toputildir)/mkcatalog/astmkcatalog man/astmknoise.1: $(top_srcdir)/bin/mknoise/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "add noise to an image" \ --libtool $(toputildir)/mknoise/astmknoise man/astmkprof.1: $(top_srcdir)/bin/mkprof/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "make standard 2D profiles on an image" \ --libtool $(toputildir)/mkprof/astmkprof man/astnoisechisel.1: $(top_srcdir)/bin/noisechisel/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "detect signal in a noisy image" \ --libtool $(toputildir)/noisechisel/astnoisechisel man/aststatistics.1: $(top_srcdir)/bin/statistics/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "calculate statistics of a dataset" \ --libtool $(toputildir)/statistics/aststatistics man/asttable.1: $(top_srcdir)/bin/table/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "read and write ASCII and FITS tables" \ --libtool $(toputildir)/table/asttable #man/astTEMPLATE.1: $(top_srcdir)/bin/TEMPLATE/args.h $(ALLMANSDEP) # $(MAYBE_HELP2MAN) -n "put a short description here" \ $(toputildir)/TEMPLATE/astTEMPLATE man/astwarp.1: $(top_srcdir)/bin/warp/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "warp (transform) input dataset" \ --libtool $(toputildir)/warp/astwarp gnuastro-0.5/doc/man/0000755000175000017500000000000013217220467011545 500000000000000gnuastro-0.5/doc/man/asttable.10000644000175000017500000000777313217220432013354 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH TABLE "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME Table \- read and write ASCII and FITS tables .SH SYNOPSIS .B asttable [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Table is part of GNU Astronomy Utilities 0.5. Table can be used to view the information, select columns, or convert tables. The inputs and outputs can be plain text (with white\-space or comma as delimiters), FITS ascii, or FITS binary tables. The output columns can either be selected by number (counting from 1), name or using regular expressions. For regular expressions, enclose the value to the `\-\-column' (`\-c') option in slashes (`\e', as in `\-c\e^mag\e'). To print the selected columns on the command\-line, don't specify an output file. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Table's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ asttable \fB\-P\fR .TP Inputs/Outputs and options: $ info asttable .TP Full section in manual/book: $ info Table .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Table options: .IP Input: .TP \fB\-c\fR, \fB\-\-column\fR=\fI\,STR\/\fR Column number (counting from 1) or search string. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s) in: `name', `unit', `comment'. .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table format: `fits\-ascii', `fits\-binary'. .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-i\fR, \fB\-\-information\fR Only print table and column information. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Table is maintained as a Texinfo manual. If the .B info and .B Table programs are properly installed at your site, the command .IP .B info Table .PP should give you access to the complete manual. gnuastro-0.5/doc/man/aststatistics.10000644000175000017500000001641313217220432014446 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH STATISTICS "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME Statistics \- calculate statistics of a dataset .SH SYNOPSIS .B aststatistics [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Statistics is part of GNU Astronomy Utilities 0.5. Statistics will do statistical analysis on the input dataset (table column or image). All blank pixels or pixels outside of the given range are ignored. You can either directly ask for certain statistics in one line/row as shown below with the same order as requested, or get tables of different statistical measures like the histogram, cumulative frequency style and etc. If no particular statistic is requested, some basic information about the dataset is printed on the command\-line. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Statistics's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ aststatistics \fB\-P\fR .TP Inputs/Outputs and options: $ info aststatistics .TP Full section in manual/book: $ info Statistics .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Statistics options: .IP Input: .TP \fB\-c\fR, \fB\-\-column\fR=\fI\,STR\/\fR Column name or number if input is a table. .TP \fB\-g\fR, \fB\-\-greaterequal\fR=\fI\,FLT\/\fR Only use values greater\-equal than this. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-l\fR, \fB\-\-lessthan\fR=\fI\,FLT\/\fR Only use values less than this. .TP \fB\-Q\fR, \fB\-\-qrange\fR=\fI\,FLT[\/\fR,FLT] Quantile range: one (from Q to 1\-Q) or two. .TP \fB\-r\fR, \fB\-\-refcol\fR=\fI\,STR\/\fR Reference column name or number. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s) in: `name', `unit', `comment'. .IP Tessellation (tile grid): .TP \fB\-\-checktiles\fR Tile IDs in an image, the size of input. .TP \fB\-F\fR, \fB\-\-remainderfrac\fR=\fI\,FLT\/\fR Fraction of remainder to split last tile. .TP \fB\-i\fR, \fB\-\-interpolate\fR Interpolate over blank tiles to fill them. .TP \fB\-\-interpnumngb\fR=\fI\,INT\/\fR No. of neighbors to use for interpolation. .TP \fB\-\-interponlyblank\fR Only interpolate over the blank tiles. .HP \fB\-M\fR, \fB\-\-numchannels\fR=\fI\,INT[\/\fR,..] No. of channels in dim.s (FITS order). .TP \fB\-\-oneelempertile\fR Display 1 element/tile, not full input res. .TP \fB\-\-workoverch\fR Work (not tile) over channel edges. .TP \fB\-Z\fR, \fB\-\-tilesize\fR=\fI\,INT[\/\fR,INT] Regular tile size on dim.s (FITS order). .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table format: `fits\-ascii', `fits\-binary'. .IP Single value measurements .TP \fB\-d\fR, \fB\-\-std\fR Standad deviation. .TP \fB\-E\fR, \fB\-\-median\fR Median. .TP \fB\-\-maximum\fR Maximum. .TP \fB\-\-minimum\fR Minimum. .TP \fB\-m\fR, \fB\-\-mean\fR Mean. .TP \fB\-\-modequant\fR Mode quantile (see \fB\-\-mode\fR) .TP \fB\-\-modesym\fR Mode symmetricity (see \fB\-\-mode\fR). .TP \fB\-\-modesymvalue\fR Value at mode symmetricity (see \fB\-\-mode\fR). .TP \fB\-\-number\fR Number (non\-blank). .TP \fB\-O\fR, \fB\-\-mode\fR Mode (Appendix C of arXiv:1505.01664). .TP \fB\-\-quantfunc\fR=\fI\,FLT[\/\fR,...] Quantile function (multiple values acceptable). .TP \fB\-\-sum\fR Sum. .TP \fB\-u\fR, \fB\-\-quantile\fR=\fI\,FLT[\/\fR,...] Quantile (multiple values acceptable). .IP Particular calculation .TP \fB\-\-asciicfp\fR Print an ASCII cumulative frequency plot. .TP \fB\-A\fR, \fB\-\-asciihist\fR Print an ASCII histogram. .TP \fB\-C\fR, \fB\-\-cumulative\fR Save the cumulative frequency plot in output. .TP \fB\-H\fR, \fB\-\-histogram\fR Save the histogram in output. .TP \fB\-\-mirror\fR=\fI\,FLT\/\fR Save the histogram and CFP of the mirror dist. .TP \fB\-s\fR, \fB\-\-sigmaclip\fR Overall sigma\-clipping (see `\-\-sclipparams') .TP \fB\-t\fR, \fB\-\-ontile\fR Single values on separate tiles, not full input. .TP \fB\-y\fR, \fB\-\-sky\fR Find the Sky and its STD over the tessellation. .IP Sky and Sky STD settings .TP \fB\-\-checksky\fR Store steps in `_sky_steps.fits' file. .TP \fB\-k\fR, \fB\-\-kernel\fR=\fI\,STR\/\fR File name of kernel to convolve input. .TP \fB\-\-khdu\fR=\fI\,STR\/\fR HDU/extension name or number of kernel. .TP \fB\-\-mirrordist\fR=\fI\,FLT\/\fR Max. distance (error multip.) to find mode. .TP \fB\-\-modmedqdiff\fR=\fI\,FLT\/\fR Max. mode and median quantile diff. per tile. .TP \fB\-\-sclipparams\fR=\fI\,FLT\/\fR,FLT Sigma clip: Multiple, and tolerance/number. .TP \fB\-\-smoothwidth\fR=\fI\,INT\/\fR Sky: flat kernel width to smooth interpolated. .IP Histogram and CFP settings .TP \fB\-\-asciiheight\fR=\fI\,INT\/\fR Height of ASCII histogram or CFP plots. .TP \fB\-\-maxbinone\fR Scale such that the maximum bin has value of one. .TP \fB\-\-numasciibins\fR=\fI\,INT\/\fR No. of bins in ASCII histogram or CFP plots. .TP \fB\-\-numbins\fR=\fI\,INT\/\fR No. of bins in histogram or CFP tables. .TP \fB\-n\fR, \fB\-\-normalize\fR Set sum of all bins to 1. .TP \fB\-\-onebinstart\fR=\fI\,FLT\/\fR Shift bins so one bin starts on this value. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Statistics is maintained as a Texinfo manual. If the .B info and .B Statistics programs are properly installed at your site, the command .IP .B info Statistics .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astnoisechisel.10000644000175000017500000001656513217220432014571 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH NOISECHISEL "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME NoiseChisel \- detect signal in a noisy image .SH SYNOPSIS .B astnoisechisel [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION NoiseChisel is part of GNU Astronomy Utilities 0.5. NoiseChisel Detects and segments signal that is deeply burried in noise. It employs a noise\-based detection and segmentation method enabling it to be very resilient to the rich diversity of shapes in astronomical targets. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of NoiseChisel's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astnoisechisel \fB\-P\fR .TP Inputs/Outputs and options: $ info astnoisechisel .TP Full section in manual/book: $ info NoiseChisel .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP NoiseChisel options: .IP Input: .TP \fB\-B\fR, \fB\-\-minskyfrac\fR=\fI\,FLT\/\fR Min. fraction of undetected area in tile. .TP \fB\-\-convolved\fR=\fI\,STR\/\fR Convolved image file to avoid convolution. .TP \fB\-\-convolvedhdu\fR=\fI\,STR\/\fR HDU/extension of convolved image in file. .TP \fB\-E\fR, \fB\-\-skysubtracted\fR Input is Sky subtracted (for error estimation). .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-k\fR, \fB\-\-kernel\fR=\fI\,STR\/\fR Filename of kernel to convolve with input .TP \fB\-\-khdu\fR=\fI\,STR\/\fR HDU containing kernel image. .TP \fB\-\-minnumfalse\fR=\fI\,INT\/\fR Minimum number for S/N estimation. .TP \fB\-w\fR, \fB\-\-widekernel\fR=\fI\,STR\/\fR Filename of wider kernel for better qthresh .TP \fB\-\-wkhdu\fR=\fI\,STR\/\fR HDU containing wide kernel image. .IP Tessellation (tile grid): .TP \fB\-\-checktiles\fR Tile IDs in an image, the size of input. .TP \fB\-F\fR, \fB\-\-remainderfrac\fR=\fI\,FLT\/\fR Fraction of remainder to split last tile. .TP \fB\-\-interpnumngb\fR=\fI\,INT\/\fR No. of neighbors to use for interpolation. .TP \fB\-\-interponlyblank\fR Only interpolate over the blank tiles. .TP \fB\-L\fR, \fB\-\-largetilesize\fR=\fI\,INT[\/\fR,INT] Sim. to \fB\-\-tilesize\fR, but for larger tiles. .HP \fB\-M\fR, \fB\-\-numchannels\fR=\fI\,INT[\/\fR,..] No. of channels in dim.s (FITS order). .TP \fB\-\-oneelempertile\fR Display 1 element/tile, not full input res. .TP \fB\-\-workoverch\fR Work (not tile) over channel edges. .TP \fB\-Z\fR, \fB\-\-tilesize\fR=\fI\,INT[\/\fR,INT] Regular tile size on dim.s (FITS order). .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-onlydetection\fR Stop at the end of detection. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR `txt', `fits\-ascii', `fits\-binary'. .IP Detection: .TP \fB\-\-checkdetection\fR Save all the detection steps to a file. .TP \fB\-\-checkdetsky\fR Save Sky value estimation for pseudo\-dets. .TP \fB\-\-checkdetsn\fR Save pseudo\-detection S/N values to a file. .TP \fB\-\-checkqthresh\fR Save quantile threshold estimation in file. .TP \fB\-c\fR, \fB\-\-detquant\fR=\fI\,FLT\/\fR Quantile in pseudo\-det. to define true. .TP \fB\-\-checksky\fR Final sky and its STD steps in a file. .TP \fB\-\-cleangrowndet\fR Remove small S/N grown detections. .TP \fB\-d\fR, \fB\-\-detgrowquant\fR=\fI\,FLT\/\fR Minimum quant. to expand true detections. .TP \fB\-\-detgrowmaxholesize\fR=\fI\,INT\/\fR Max. area of holes after growth to fill. .TP \fB\-e\fR, \fB\-\-erode\fR=\fI\,INT\/\fR Number of erosions after thresholding. .TP \fB\-\-erodengb\fR=\fI\,INT\/\fR 4 or 8 connectivity in erosion. .TP \fB\-i\fR, \fB\-\-detsnminarea\fR=\fI\,INT\/\fR Min. pseudo\-detection area for S/N dist. .TP \fB\-\-noerodequant\fR=\fI\,FLT\/\fR Quantile for no erosion. .TP \fB\-\-openingngb\fR=\fI\,INT\/\fR 4 or 8 connectivity in opening. .TP \fB\-p\fR, \fB\-\-opening\fR=\fI\,INT\/\fR Depth of opening after erosion. .HP \fB\-\-qthreshtilequant\fR=\fI\,FLT\/\fR Remove tiles at higher quantiles. .TP \fB\-Q\fR, \fB\-\-modmedqdiff\fR=\fI\,FLT\/\fR Max. mode and median quant diff. per tile. .TP \fB\-r\fR, \fB\-\-mirrordist\fR=\fI\,FLT\/\fR Max. dist. (error multip.) to find mode. .TP \fB\-R\fR, \fB\-\-dthresh\fR=\fI\,FLT\/\fR Sigma threshold for Pseudo\-detections. .TP \fB\-\-smoothwidth\fR=\fI\,INT\/\fR Flat kernel width to smooth interpolated. .TP \fB\-s\fR, \fB\-\-sigmaclip\fR=\fI\,FLT\/\fR,FLT Sigma multiple and, tolerance or number. .TP \fB\-t\fR, \fB\-\-qthresh\fR=\fI\,FLT\/\fR Quantile threshold on convolved image. .IP Segmentation: .TP \fB\-\-checkclumpsn\fR Save Sky clump S/N values into a file. .TP \fB\-\-checksegmentation\fR Store segmentation steps in a file. .TP \fB\-g\fR, \fB\-\-segquant\fR=\fI\,FLT\/\fR S/N Quantile of true sky clumps. .TP \fB\-\-grownclumps\fR Save grown clumps instead of original. .TP \fB\-G\fR, \fB\-\-gthresh\fR=\fI\,FLT\/\fR Multiple of STD to stop growing clumps. .TP \fB\-m\fR, \fB\-\-segsnminarea\fR=\fI\,INT\/\fR Minimum area of clumps for S/N estimation. .TP \fB\-O\fR, \fB\-\-objbordersn\fR=\fI\,FLT\/\fR Min. S/N for grown clumps as one object. .TP \fB\-v\fR, \fB\-\-keepmaxnearriver\fR Keep clumps with peak touching a river. .TP \fB\-y\fR, \fB\-\-minriverlength\fR=\fI\,INT\/\fR Minimum len of useful grown clump rivers. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-C\fR, \fB\-\-continueaftercheck\fR Continue processing after checks. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B NoiseChisel is maintained as a Texinfo manual. If the .B info and .B NoiseChisel programs are properly installed at your site, the command .IP .B info NoiseChisel .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astmkprof.10000644000175000017500000001504713217220432013554 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH MAKEPROFILES "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME MakeProfiles \- make standard 2D profiles on an image .SH SYNOPSIS .B astmkprof [\fI\,OPTION\/\fR...] [\fI\,Options\/\fR] [\fI\,Catalog\/\fR] .SH DESCRIPTION MakeProfiles is part of GNU Astronomy Utilities 0.5. MakeProfiles will create a FITS image containing any number of mock astronomical profiles based on an input catalog. All the profiles will be built from the center outwards. First by Monte Carlo integration, then using the central pixel position. The tolerance level specifies when the switch will occur. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of MakeProfiles's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astmkprof \fB\-P\fR .TP Inputs/Outputs and options: $ info astmkprof .TP Full section in manual/book: $ info MakeProfiles .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP MakeProfiles options: .IP Input: .TP \fB\-B\fR, \fB\-\-backhdu\fR=\fI\,INT\/\fR/STR HDU of background image. .TP \fB\-C\fR, \fB\-\-clearcanvas\fR All pixels in background image read as zero. .TP \fB\-E\fR, \fB\-\-kernel\fR=\fI\,STR\/\fR Parameters to only build one kernel. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Input catalog HDU name or number (if FITS). .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-k\fR, \fB\-\-background\fR=\fI\,STR\/\fR A background image to make the profiles on. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s) in: `name', `unit', `comment'. .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-i\fR, \fB\-\-individual\fR Build all profiles separately. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-m\fR, \fB\-\-nomerged\fR Do not create a merged image of all profiles. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-\-psfinimg\fR PSF profiles made with all in output image. .TP \fB\-s\fR, \fB\-\-oversample\fR=\fI\,INT\/\fR Scale of oversampling (>0 and odd). .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .TP \fB\-x\fR, \fB\-\-naxis\fR=\fI\,INT[\/\fR,INT,...] Merged image size along each dimension. .IP Profiles: .TP \fB\-c\fR, \fB\-\-prepforconv\fR Shift and expand based on first catalog PSF. .TP \fB\-e\fR, \fB\-\-envseed\fR Use GSL_RNG_SEED environment variable for seed. .TP \fB\-f\fR, \fB\-\-mforflatpix\fR mcol is flat pixel value (when fcol is 5 or 6) .TP \fB\-\-magatpeak\fR Magnitude is for peak pixel, not full profile. .TP \fB\-\-mcolisbrightness\fR mcol is total brightness, not magnitude. .TP \fB\-\-mode\fR=\fI\,STR\/\fR Mode of `\-\-ccol': `img' or `wcs'. .TP \fB\-p\fR, \fB\-\-tunitinp\fR Truncation is in units of pixels, not radius. .TP \fB\-r\fR, \fB\-\-numrandom\fR=\fI\,INT\/\fR No. of random points in Monte Carlo integration. .TP \fB\-R\fR, \fB\-\-replace\fR Replace overlapping profile pixels, don't add. .TP \fB\-t\fR, \fB\-\-tolerance\fR=\fI\,FLT\/\fR Tolerance to switch to less accurate method. .TP \fB\-w\fR, \fB\-\-circumwidth\fR=\fI\,FLT\/\fR Width of circumference (inward) profiles .TP \fB\-X\fR, \fB\-\-shift\fR=\fI\,INT[\/\fR, ...] Shift profile centers in output image. .TP \fB\-z\fR, \fB\-\-zeropoint\fR=\fI\,FLT\/\fR Magnitude zero point. .IP Columns, by info (see `\-\-searchin'), or number (starting from 1): .TP \fB\-\-ccol\fR=\fI\,STR\/\fR/INT Coordinate columns (one call for each dimension). .TP \fB\-\-fcol\fR=\fI\,STR\/\fR/INT sersic (1), moffat (2), gaussian (3), point (4), flat (5), circumference (6), distance (7). .TP \fB\-\-mcol\fR=\fI\,STR\/\fR/INT Magnitude. .TP \fB\-\-ncol\fR=\fI\,STR\/\fR/INT Sersic index or Moffat beta. .TP \fB\-\-pcol\fR=\fI\,STR\/\fR/INT Position angle. .TP \fB\-\-qcol\fR=\fI\,STR\/\fR/INT Axis ratio. .TP \fB\-\-rcol\fR=\fI\,STR\/\fR/INT Effective radius or FWHM in pixels. .TP \fB\-\-tcol\fR=\fI\,STR\/\fR/INT Truncation in units of \fB\-\-rcol\fR, unless \fB\-\-tunitinp\fR. .IP WCS parameters: .TP \fB\-\-cdelt\fR=\fI\,FLT[\/\fR, ...] Resolution in each dimension. .TP \fB\-\-crpix\fR=\fI\,FLT[\/\fR, ...] Pixel coordinates of reference point. .TP \fB\-\-crval\fR=\fI\,FLT[\/\fR, ...] WCS coordinates of reference point. .TP \fB\-\-ctype\fR=\fI\,STR[\/\fR, ... ] One of FITS standard WCS types. .TP \fB\-\-cunit\fR=\fI\,STR[\/\fR, ... ] Units of the WCS coordinates (e.g., `deg'). .TP \fB\-\-pc\fR=\fI\,FLT[\/\fR, ...] WCS rotation matrix (all elements). .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B MakeProfiles is maintained as a Texinfo manual. If the .B info and .B MakeProfiles programs are properly installed at your site, the command .IP .B info MakeProfiles .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astmknoise.10000644000175000017500000000737213217220432013725 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH MAKENOISE "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME MakeNoise \- add noise to an image .SH SYNOPSIS .B astmknoise [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION MakeNoise is part of GNU Astronomy Utilities 0.5. MakeNoise will add noise to all the pixels in an input dataset. The noise parameters can be specified with the options below. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of MakeNoise's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astmknoise \fB\-P\fR .TP Inputs/Outputs and options: $ info astmknoise .TP Full section in manual/book: $ info MakeNoise .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP MakeNoise options: .IP Input: .TP \fB\-b\fR, \fB\-\-background\fR=\fI\,FLT\/\fR Fixed background magnitude for whole input. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-i\fR, \fB\-\-instrumental\fR=\fI\,FLT\/\fR Instrument noise level (in pixel value units). .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-s\fR, \fB\-\-sigma\fR=\fI\,FLT\/\fR Total noise sigma, ignore other options. .TP \fB\-z\fR, \fB\-\-zeropoint\fR=\fI\,FLT\/\fR Zeropoint magnitude of input. .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-e\fR, \fB\-\-envseed\fR Use GSL_RNG_SEED environment variable for seed .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B MakeNoise is maintained as a Texinfo manual. If the .B info and .B MakeNoise programs are properly installed at your site, the command .IP .B info MakeNoise .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astmkcatalog.10000644000175000017500000001754713217220432014227 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH MAKECATALOG "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME MakeCatalog \- Make a catalog from labeled input images .SH SYNOPSIS .B astmkcatalog [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION MakeCatalog is part of GNU Astronomy Utilities 0.5. MakeCatalog will create a catalog from an input, labeled, and noise images. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of MakeCatalog's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astmkcatalog \fB\-P\fR .TP Inputs/Outputs and options: $ info astmkcatalog .TP Full section in manual/book: $ info MakeCatalog .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP MakeCatalog options: .IP Input: .TP \fB\-\-clumpshdu\fR=\fI\,STR\/\fR Clump image extension name or number. .TP \fB\-C\fR, \fB\-\-clumpsfile\fR=\fI\,STR\/\fR Image containing clump labels. .TP \fB\-E\fR, \fB\-\-skysubtracted\fR Input is already sky subtracted (for S/N). .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-\-objectshdu\fR=\fI\,STR\/\fR Object image extension name or number. .TP \fB\-O\fR, \fB\-\-objectsfile\fR=\fI\,STR\/\fR Image containing object/detection labels. .TP \fB\-R\fR, \fB\-\-threshold\fR=\fI\,FLT\/\fR Use pixels more than this multiple of STD. .TP \fB\-s\fR, \fB\-\-skyfile\fR=\fI\,STR\/\fR Image containing sky values. .TP \fB\-\-skyhdu\fR=\fI\,STR\/\fR Sky image extension name or number. .TP \fB\-\-stdhdu\fR=\fI\,STR\/\fR Sky image extension name or number. .TP \fB\-t\fR, \fB\-\-stdfile\fR=\fI\,STR\/\fR Image containing sky STD values. .TP \fB\-\-zeropoint\fR=\fI\,FLT\/\fR Zeropoint magnitude of input dataset. .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-\-sfmagarea\fR=\fI\,FLT\/\fR Surface brightness area (in arcseconds^2). .TP \fB\-\-sfmagnsigma\fR=\fI\,FLT\/\fR Surface brightness multiple of Sky STD. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table format: `fits\-ascii', `fits\-binary'. .IP Upper limit magnitude settings: .TP \fB\-e\fR, \fB\-\-envseed\fR Use GSL_RNG_SEED environment variable for seed. .TP \fB\-\-upmaskfile\fR=\fI\,STR\/\fR Mask image file name only for upper limit. .TP \fB\-\-upmaskhdu\fR=\fI\,STR\/\fR Mask image HDU only for upper limit. .TP \fB\-\-upnsigma\fR=\fI\,FLT\/\fR Multiple of sigma to define upperlimit. .TP \fB\-\-upnum\fR=\fI\,INT\/\fR Number of randomly positioned samples .TP \fB\-\-uprange\fR=\fI\,INT\/\fR,INT Range of random positions (pix) around target. .TP \fB\-\-upsigmaclip\fR=\fI\,FLT\/\fR,FLT Sigma multiple and, tolerance or number. .IP Identifier columns .TP \fB\-i\fR, \fB\-\-ids\fR All IDs of objects and clumps. .TP \fB\-\-idinhostobj\fR ID of clump in host object. .TP \fB\-j\fR, \fB\-\-hostobjid\fR ID of object hosting this clump. .TP \fB\-\-objid\fR Object label/ID. .IP Positional columns (pixel) .TP \fB\-\-clumpsgeox\fR Geometric center of all clumps in obj. (X). .TP \fB\-\-clumpsgeoy\fR Geometric center of all clumps in obj. (Y). .TP \fB\-\-clumpsx\fR Flux.wht center of all clumps in obj. (X). .TP \fB\-\-clumpsy\fR Flux.wht center of all clumps in obj. (Y). .TP \fB\-\-geox\fR Geometric center in first FITS axis. .TP \fB\-\-geoy\fR Geometric center in second FITS axis. .TP \fB\-x\fR, \fB\-\-x\fR Flux weighted center in first FITS axis. .TP \fB\-y\fR, \fB\-\-y\fR Flux weighted center in second FITS axis. .IP Positional columns (WCS) .TP \fB\-\-clumpsgeow1\fR Geometric center of all clumps in 1st WCS. .TP \fB\-\-clumpsgeow2\fR Geometric center of all clumps in 2nd WCS. .TP \fB\-\-clumpsw1\fR Flux.wht center of all clumps in 1st WCS. .TP \fB\-\-clumpsw2\fR Flux.wht center of all clumps in 2nd WCS. .TP \fB\-d\fR, \fB\-\-dec\fR Flux weighted center declination. .TP \fB\-\-geow1\fR Geometric center in first WCS axis. .TP \fB\-\-geow2\fR Geometric center in second WCS axis. .TP \fB\-r\fR, \fB\-\-ra\fR Flux weighted center right ascension. .TP \fB\-\-w1\fR Flux weighted center in first WCS axis. .TP \fB\-\-w2\fR Flux weighted center in second WCS axis. .IP Brightness/magnitude related columns .TP \fB\-b\fR, \fB\-\-brightness\fR Brightness (sum of pixel values). .TP \fB\-\-clumpbrightness\fR Brightness of clumps in an object. .TP \fB\-\-clumpsmagnitude\fR Magnitude of all clumps in object. .TP \fB\-G\fR, \fB\-\-magnitudeerr\fR Magnitude error of objects or clumps. .TP \fB\-m\fR, \fB\-\-magnitude\fR Total magnitude of objects or clumps. .TP \fB\-\-noriverbrightness\fR Sky (not river) subtracted clump brightness. .TP \fB\-n\fR, \fB\-\-sn\fR Signal to noise ratio of objects or clumps. .TP \fB\-\-riverave\fR Average river value surrounding a clump. .TP \fB\-\-rivernum\fR Number of river pixels around a clump. .TP \fB\-\-sky\fR Average Sky value under this clump or object. .TP \fB\-\-std\fR Average Sky standard deviation. .TP \fB\-\-upperlimit\fR Upper\-limit value, use other options to config. .TP \fB\-u\fR, \fB\-\-upperlimitmag\fR Upper\-limit mag. use other options to config. .IP Morphology/shape related columns .TP \fB\-a\fR, \fB\-\-area\fR Number of pixels in clump or object. .TP \fB\-A\fR, \fB\-\-semimajor\fR Flux weighted semi\-major axis. .TP \fB\-B\fR, \fB\-\-semiminor\fR Flux weighted semi\-minor axis. .TP \fB\-c\fR, \fB\-\-numclumps\fR Number of clumps in this object. .TP \fB\-\-clumpsarea\fR Sum of all clump areas in an object. .TP \fB\-\-geoaxisratio\fR Geometric axis ratio. .TP \fB\-\-geopositionangle\fR Geometric position angle. .TP \fB\-\-geosemimajor\fR Geometric semi\-major axis. .TP \fB\-\-geosemiminor\fR Geometric semi\-minor axis. .TP \fB\-p\fR, \fB\-\-positionangle\fR Flux weighted position angle. .TP \fB\-Q\fR, \fB\-\-axisratio\fR Flux weighted axis ratio. .TP \fB\-\-weightarea\fR Area used for flux weighted positions. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B MakeCatalog is maintained as a Texinfo manual. If the .B info and .B MakeCatalog programs are properly installed at your site, the command .IP .B info MakeCatalog .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astwarp.10000644000175000017500000001060313217220432013220 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH WARP "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME Warp \- warp (transform) input dataset .SH SYNOPSIS .B astwarp [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Warp is part of GNU Astronomy Utilities 0.5. Warp will warp/transform the input image using an input coordinate matrix. Currently it accepts any general projective mapping (which includes affine mappings as a subset). .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Warp's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astwarp \fB\-P\fR .TP Inputs/Outputs and options: $ info astwarp .TP Full section in manual/book: $ info Warp .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Warp options: .IP Input: .TP \fB\-\-hendwcs\fR=\fI\,INT\/\fR Header keyword number to end reading WCS. .TP \fB\-\-hstartwcs\fR=\fI\,INT\/\fR Header keyword number to start reading WCS. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .IP Output: .TP \fB\-C\fR, \fB\-\-coveredfrac\fR=\fI\,FLT\/\fR Acceptable fraction of output pixel covered. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-k\fR, \fB\-\-keepwcs\fR Do not apply warp to input's WCS .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .IP Warps: .TP \fB\-a\fR, \fB\-\-align\fR Align the image and celestial axes. .TP \fB\-c\fR, \fB\-\-centeroncorner\fR Center of coordinates on first pixel corner. .TP \fB\-e\fR, \fB\-\-shear\fR=\fI\,FLT[\/\fR,FLT] Shear along the given axis(es). .TP \fB\-f\fR, \fB\-\-flip\fR=\fI\,INT[\/\fR,INT] Flip along the given axis(es). .TP \fB\-m\fR, \fB\-\-matrix\fR=\fI\,STR\/\fR Raw transformation matrix, highest priority. .TP \fB\-p\fR, \fB\-\-project\fR=\fI\,FLT[\/\fR,FLT] Project along the given axis(es). .TP \fB\-r\fR, \fB\-\-rotate\fR=\fI\,FLT\/\fR Rotate by the given angle in degrees. .TP \fB\-s\fR, \fB\-\-scale\fR=\fI\,FLT[\/\fR,FLT] Scale along the given axis(es). .TP \fB\-t\fR, \fB\-\-translate\fR=\fI\,FLT[\/\fR,FLT] Translate along the given axis(es). .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Warp is maintained as a Texinfo manual. If the .B info and .B Warp programs are properly installed at your site, the command .IP .B info Warp .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astmatch.10000644000175000017500000000771513217220432013355 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH MATCH "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME Match \- match catalogs by 1D or 2D positions .SH SYNOPSIS .B astmatch [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Match is part of GNU Astronomy Utilities 0.5. Match matches catalogs of objects and (by default) will return the re\-arranged matching inputs. The optional log file will return low\-level information about the match (indexs and distances). .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Match's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astmatch \fB\-P\fR .TP Inputs/Outputs and options: $ info astmatch .TP Full section in manual/book: $ info Match .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Match options: .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of first input. .TP \fB\-H\fR, \fB\-\-hdu2\fR=\fI\,STR\/\fR/INT Extension name or number of second input. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s) in: `name', `unit', `comment'. .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-l\fR, \fB\-\-logasoutput\fR No rearranging of inputs, output is log file .TP \fB\-\-notmatched\fR Output is rows that don't match. .TP \fB\-\-outcols\fR=\fI\,STR\/\fR Out cols in CSV, `a': first, `b': second input. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table format: `fits\-ascii', `fits\-binary'. .IP Catalog matching .TP \fB\-a\fR, \fB\-\-aperture\fR=\fI\,FLT[\/\fR,FLT[,FLT]] Acceptable aperture for matching. .TP \fB\-c\fR, \fB\-\-ccol1\fR=\fI\,STR[\/\fR,STR] Column name/number of first catalog. .TP \fB\-C\fR, \fB\-\-ccol2\fR=\fI\,STR[\/\fR,STR] Column name/number of second catalog. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Match is maintained as a Texinfo manual. If the .B info and .B Match programs are properly installed at your site, the command .IP .B info Match .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astfits.10000644000175000017500000000774413217220432013230 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH FITS "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME Fits \- view and manipulate FITS headers .SH SYNOPSIS .B astfits [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Fits is part of GNU Astronomy Utilities 0.5. Fits allows you to view and manipulate (add, delete, or modify) FITS extensions (or HDUs) and FITS header keywords within one extension. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Fits's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astfits \fB\-P\fR .TP Inputs/Outputs and options: $ info astfits .TP Full section in manual/book: $ info Fits .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Fits options: .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .IP Output: .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name (only for writing HDUs). .IP HDUs (extensions): .TP \fB\-C\fR, \fB\-\-copy\fR=\fI\,STR\/\fR Copy extension to output file. .TP \fB\-k\fR, \fB\-\-cut\fR=\fI\,STR\/\fR Copy extension to output and remove from input. .TP \fB\-R\fR, \fB\-\-remove\fR=\fI\,STR\/\fR Remove extension from input file. .IP Keywords (in one HDU): .TP \fB\-a\fR, \fB\-\-asis\fR=\fI\,STR\/\fR Write the argument string as is into the header. .TP \fB\-c\fR, \fB\-\-comment\fR=\fI\,STR\/\fR Add COMMENT keyword, any length is ok. .TP \fB\-d\fR, \fB\-\-delete\fR=\fI\,STR\/\fR Delete a keyword from the header. .TP \fB\-H\fR, \fB\-\-history\fR=\fI\,STR\/\fR Add HISTORY keyword, any length is ok. .TP \fB\-p\fR, \fB\-\-printallkeys\fR Print all keywords in the selected HDU. .TP \fB\-r\fR, \fB\-\-rename\fR=\fI\,STR\/\fR Rename keyword, keeping value and comments. .TP \fB\-t\fR, \fB\-\-date\fR Set the DATE keyword to the current time. .TP \fB\-u\fR, \fB\-\-update\fR=\fI\,STR\/\fR Update a keyword value or comments. .TP \fB\-w\fR, \fB\-\-write\fR=\fI\,STR\/\fR Write a keyword (with value, comments and units). .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-Q\fR, \fB\-\-quitonerror\fR Quit if there is an error on any action. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Fits is maintained as a Texinfo manual. If the .B info and .B Fits programs are properly installed at your site, the command .IP .B info Fits .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astcrop.10000644000175000017500000001207213217220432013214 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH CROP "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME Crop \- crop regions of a dataset .SH SYNOPSIS .B astcrop [\fI\,OPTION\/\fR...] [\fI\,Crop-identifiers\/\fR] \fI\,ASTRdata \/\fR... .SH DESCRIPTION Crop is part of GNU Astronomy Utilities 0.5. Crop will create cutouts, thumbnails, postage stamps or crops of region(s) from input image(s) using image or celestial coordinates. If muliple crops are desired, a catalog must be provided. When in WCS mode, if the cut out covers more than one input image, all overlapping input images will be stitched in the output. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Crop's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astcrop \fB\-P\fR .TP Inputs/Outputs and options: $ info astcrop .TP Full section in manual/book: $ info Crop .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Crop options: .IP Input: .TP \fB\-\-hendwcs\fR=\fI\,INT\/\fR Header keyword number to stop reading WCS. .TP \fB\-\-hstartwcs\fR=\fI\,INT\/\fR Header keyword number to start reading WCS. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of (all) input(s). .TP \fB\-O\fR, \fB\-\-mode\fR=\fI\,STR\/\fR Coordinate mode `img' or `wcs'. .TP \fB\-z\fR, \fB\-\-zeroisnotblank\fR 0.0 in float or double images are not blank. .IP Output: .TP \fB\-b\fR, \fB\-\-noblank\fR Remove parts of the crop box out of input image. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-p\fR, \fB\-\-suffix\fR=\fI\,STR\/\fR Suffix (postfix) of cropped images. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table format: `fits\-ascii', `fits\-binary'. .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .IP Crop by center .TP \fB\-\-checkcenter\fR=\fI\,INT\/\fR Width (in pixels) of box at center to check. .TP \fB\-c\fR, \fB\-\-center\fR=\fI\,FLT[\/\fR,...] Central coordinates of a single crop. .TP \fB\-w\fR, \fB\-\-width\fR=\fI\,FLT[\/\fR,...] Width when crop is defined by its center. .IP Crop by center (when a catalog is given) .TP \fB\-\-cathdu\fR=\fI\,STR\/\fR/INT HDU of catalog, if it is a FITS table. .TP \fB\-C\fR, \fB\-\-catalog\fR=\fI\,STR\/\fR Input catalog filename. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-n\fR, \fB\-\-namecol\fR=\fI\,STR\/\fR/INT Column no./info of crop filename (no suffix). .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s) in: `name', `unit', `comment'. .TP \fB\-x\fR, \fB\-\-coordcol\fR=\fI\,STR\/\fR/INT Column no./info containing coordinates. .IP Crop by region .TP \fB\-l\fR, \fB\-\-polygon\fR=\fI\,STR\/\fR Polygon vertices of region to crop, keep inside. .TP \fB\-\-outpolygon\fR Keep the polygon's outside, mask the inside. .TP \fB\-s\fR, \fB\-\-section\fR=\fI\,STR\/\fR Image section string specifying crop range. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Crop is maintained as a Texinfo manual. If the .B info and .B Crop programs are properly installed at your site, the command .IP .B info Crop .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astcosmiccal.10000644000175000017500000001013713217220432014206 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH COSMICCALCULATOR "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME CosmicCalculator \- estimate cosmological values .SH SYNOPSIS .B astcosmiccal [\fI\,OPTION\/\fR...] .SH DESCRIPTION CosmicCalculator is part of GNU Astronomy Utilities 0.5. CosmicCalculator will do cosmological calculations. If no redshfit is specified, it will only print the main input parameters. If only a redshift is given, it will print a table of all calculations. If any of the single row calculations are requested, only their values will be printed with a single space between each. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of CosmicCalculator's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astcosmiccal \fB\-P\fR .TP Inputs/Outputs and options: $ info astcosmiccal .TP Full section in manual/book: $ info CosmicCalculator .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP CosmicCalculator options: .IP Input: .TP \fB\-H\fR, \fB\-\-H0\fR=\fI\,FLT\/\fR Current expansion rate (Hubble constant). .TP \fB\-l\fR, \fB\-\-olambda\fR=\fI\,FLT\/\fR Current cosmological cst. dens. per crit. dens. .TP \fB\-m\fR, \fB\-\-omatter\fR=\fI\,FLT\/\fR Current matter density per critical density. .TP \fB\-r\fR, \fB\-\-oradiation\fR=\fI\,FLT\/\fR Current radiation density per critical density. .TP \fB\-z\fR, \fB\-\-redshift\fR=\fI\,FLT\/\fR Redshift of interest. .IP Specific calculations .TP \fB\-a\fR, \fB\-\-absmagconv\fR Conversion to absolute magnitude (no unit). .TP \fB\-A\fR, \fB\-\-angulardimdist\fR Angular diameter distance (Mpc). .TP \fB\-b\fR, \fB\-\-lookbacktime\fR Look back time to z (Gyr). .TP \fB\-c\fR, \fB\-\-criticaldensity\fR Critical density at z (g/cm^3). .TP \fB\-C\fR, \fB\-\-criticaldensitynow\fR Critical density now (g/cm^3). .TP \fB\-d\fR, \fB\-\-properdistance\fR Proper distance to z (Mpc). .TP \fB\-g\fR, \fB\-\-age\fR Age of universe at z (Gyr). .TP \fB\-G\fR, \fB\-\-agenow\fR Age of universe now (Gyr). .TP \fB\-L\fR, \fB\-\-luminositydist\fR Luminosity distance to z (Mpc). .TP \fB\-s\fR, \fB\-\-arcsectandist\fR Tangential dist. covered by 1arcsec at z (kpc). .TP \fB\-u\fR, \fB\-\-distancemodulus\fR Distance modulus at z (no units). .TP \fB\-v\fR, \fB\-\-volume\fR Comoving volume (4pi str) to z (Mpc^3). .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B CosmicCalculator is maintained as a Texinfo manual. If the .B info and .B CosmicCalculator programs are properly installed at your site, the command .IP .B info CosmicCalculator .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astconvolve.10000644000175000017500000001071613217220432014107 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH CONVOLVE "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME Convolve \- convolve an image with a given kernel .SH SYNOPSIS .B astconvolve [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Convolve is part of GNU Astronomy Utilities 0.5. Convolve will convolve an input image with a given spatial kernel (image) in the spatial domain (no edge effects) or frequency domain. The latter suffers from edge effects, but can be much faster. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Convolve's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astconvolve \fB\-P\fR .TP Inputs/Outputs and options: $ info astconvolve .TP Full section in manual/book: $ info Convolve .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Convolve options: .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-H\fR, \fB\-\-minsharpspec\fR=\fI\,FLT\/\fR Deconvolution: min spectrum of sharp img. .TP \fB\-k\fR, \fB\-\-kernel\fR=\fI\,STR\/\fR File name of kernel for convolution. .TP \fB\-\-nokernelflip\fR Do not flip the kernel image. .TP \fB\-\-nokernelnorm\fR Do not normalize the kernel image. .TP \fB\-u\fR, \fB\-\-khdu\fR=\fI\,STR\/\fR HDU containing the kernel. .IP Tessellation (tile grid): .TP \fB\-\-checktiles\fR Tile IDs in an image, the size of input. .TP \fB\-F\fR, \fB\-\-remainderfrac\fR=\fI\,FLT\/\fR Fraction of remainder to split last tile. .HP \fB\-M\fR, \fB\-\-numchannels\fR=\fI\,INT[\/\fR,..] No. of channels in dim.s (FITS order). .TP \fB\-\-oneelempertile\fR Display 1 element/tile, not full input res. .TP \fB\-\-workoverch\fR Work (not tile) over channel edges. .TP \fB\-Z\fR, \fB\-\-tilesize\fR=\fI\,INT[\/\fR,INT] Regular tile size on dim.s (FITS order). .IP Output: .TP \fB\-C\fR, \fB\-\-checkfreqsteps\fR View the steps in the frequency domain. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-noedgecorrection\fR Do not correct the edges in the spatial domain .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-d\fR, \fB\-\-domain\fR=\fI\,STR\/\fR Convolution domain: `spatial', `frequency'. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-m\fR, \fB\-\-makekernel\fR=\fI\,INT\/\fR Make 2*INT kernel to create input image. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Convolve is maintained as a Texinfo manual. If the .B info and .B Convolve programs are properly installed at your site, the command .IP .B info Convolve .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astconvertt.10000644000175000017500000001040613217220432014114 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH CONVERTTYPE "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME ConvertType \- convert known data types to each other .SH SYNOPSIS .B astconvertt [\fI\,OPTION\/\fR...] \fI\,InputFile1 \/\fR[\fI\,InputFile2\/\fR] ... [\fI\,InputFile4\/\fR] .SH DESCRIPTION ConvertType is part of GNU Astronomy Utilities 0.5. ConvertType will convert any of the known input formats to any other of the known formats. The output file will have the same number of pixels. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of ConvertType's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astconvertt \fB\-P\fR .TP Inputs/Outputs and options: $ info astconvertt .TP Full section in manual/book: $ info ConvertType .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP ConvertType options: .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT FITS input HDU, multiple calls possible. .IP Output: .TP \fB\-b\fR, \fB\-\-borderwidth\fR=\fI\,INT\/\fR EPS/PDF border width in units of 1/72 inch. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output filename or suffix. .TP \fB\-u\fR, \fB\-\-quality\fR=\fI\,INT\/\fR Quality of output JPEG image (1 to 100). .TP \fB\-w\fR, \fB\-\-widthincm\fR=\fI\,FLT\/\fR Width in units of centimeters. .TP \fB\-x\fR, \fB\-\-hex\fR Hexadecimal encoding in EPS. Default: ASCII85. .IP Flux: .TP \fB\-A\fR, \fB\-\-flminbyte\fR Set value of fluxlow as the minimum byte value. .TP \fB\-B\fR, \fB\-\-fhmaxbyte\fR Set value of fluxhigh as the maximum byte value. .TP \fB\-c\fR, \fB\-\-change\fR=\fI\,STR\/\fR Change pixel values `from_1:to_1,from_2:to_2`. .TP \fB\-C\fR, \fB\-\-changeaftertrunc\fR First truncate then change pixel values. .TP \fB\-H\fR, \fB\-\-fluxhigh\fR=\fI\,FLT\/\fR Higher flux truncation value. .TP \fB\-i\fR, \fB\-\-invert\fR Invert the values in JPEG and EPS/PDF. .TP \fB\-L\fR, \fB\-\-fluxlow\fR=\fI\,FLT\/\fR Lower flux truncation value. .TP \fB\-m\fR, \fB\-\-maxbyte\fR=\fI\,INT\/\fR Maximum byte value for all color channels. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B ConvertType is maintained as a Texinfo manual. If the .B info and .B ConvertType programs are properly installed at your site, the command .IP .B info ConvertType .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astbuildprog.10000644000175000017500000001003313217220432014233 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH BUILDPROGRAM "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME BuildProgram \- compile, link with Gnuastro library and its dependencies, and run a C program .SH SYNOPSIS .B astbuildprog [\fI\,OPTION\/\fR...] \fI\,C-source \/\fR[\fI\,ARGUMENTS TO RUN\/\fR] .SH DESCRIPTION BuildProgram is part of GNU Astronomy Utilities 0.5. BuildProgram will compile and run a C program, while automatically linking with libraries that Gnuastro depends on. Hence you do not have to worry about explicitly linking with CFITSIO for example if you want to work on a FITS file, or with GSL if you want to use GNU Scientific Library's functions. The standard compiler options of `\-I', `\-L', and `\-l' are also available for further customization of the build. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of BuildProgram's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astbuildprog \fB\-P\fR .TP Inputs/Outputs and options: $ info astbuildprog .TP Full section in manual/book: $ info BuildProgram .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP BuildProgram options: .IP Input: .TP \fB\-a\fR, \fB\-\-la\fR=\fI\,STR\/\fR Libtool `.la' to use instead of default. .TP \fB\-I\fR, \fB\-\-includedir\fR=\fI\,STR\/\fR Directories to search for `#include's. .TP \fB\-l\fR, \fB\-\-linklib\fR=\fI\,STR\/\fR Link libraries, e.g., for libgsl: `\-lgsl'. .TP \fB\-L\fR, \fB\-\-linkdir\fR=\fI\,STR\/\fR Directory to search for libraries to link. .TP \fB\-\-tag\fR=\fI\,STR\/\fR Libtool `\-\-tag': programming language. .IP Output: .TP \fB\-b\fR, \fB\-\-onlybuild\fR Don't run the built program. .TP \fB\-\-deletecompiled\fR Delete compiled program after running. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-g\fR, \fB\-\-debug\fR Debugging information in compiled binary. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .TP \fB\-O\fR, \fB\-\-optimize\fR=\fI\,INT\/\fR Optimization level: 0, 1, 2, 3. .TP \fB\-W\fR, \fB\-\-warning\fR=\fI\,STR\/\fR Compilation warnings on command\-line. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B BuildProgram is maintained as a Texinfo manual. If the .B info and .B BuildProgram programs are properly installed at your site, the command .IP .B info BuildProgram .PP should give you access to the complete manual. gnuastro-0.5/doc/man/astarithmetic.10000644000175000017500000001062713217220432014406 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.5. .TH ARITHMETIC "1" "December 2017" "GNU Astronomy Utilities 0.5" "User Commands" .SH NAME Arithmetic \- arithmetic operations on images and numbers .SH SYNOPSIS .B astarithmetic [\fI\,OPTION\/\fR...] \fI\,ASTRdata or number \/\fR[\fI\,ASTRdata\/\fR] \fI\,OPERATOR \/\fR... .SH DESCRIPTION Arithmetic is part of GNU Astronomy Utilities 0.5. Arithmetic will do arithmetic operations on one or multiple images and numbers. Simply put, the name of the image along with the arithmetic operators and possible numbers are given as arguments. The extensions of each input are specified with (possibly multiple) calls to the `\-\-hdu' option. .PP Currently Arithmetic only supports postfix or reverse polish notation. For example to get the result of `5+6', you should write `5 6 +', or to get the average of two images, you should write `a.fits b.fits + 2 /' (or more simply use the `average' operator with `a.fits b.fits average'). Please see the manual for more information. .PP Arithmetic recognizes a large collection of standard operators, including basic arithmetic (e.g., +, \-, x, /), mathematical (e.g., abs, pow, sqrt, log), statistical (minvalue, min, max, average), comparison (e.g., lt, le, gt), logical (e.g., and, or, not), the full set of bitwise operators, and numeric type conversion operators to all known types. Please run the command below for a complete list describing all operators (press the `SPACE' keyboard key, or arrow keys, to go down and `q' to return to the command\-line): .IP \f(CW$ info gnuastro "Arithmetic operators"\fR .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Arithmetic's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astarithmetic \fB\-P\fR .TP Inputs/Outputs and options: $ info astarithmetic .TP Full section in manual/book: $ info Arithmetic .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Arithmetic options: .IP Input: .TP \fB\-g\fR, \fB\-\-globalhdu\fR=\fI\,STR\/\fR Use this HDU for all inputs, ignore `\-\-hdu'. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Nth call, used for HDU of Nth input FITS. .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output name. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Minimum bytes in array to not use ram RAM. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2017, Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Arithmetic is maintained as a Texinfo manual. If the .B info and .B Arithmetic programs are properly installed at your site, the command .IP .B info Arithmetic .PP should give you access to the complete manual. gnuastro-0.5/doc/gnuastro-figures/0000755000175000017500000000000013217220467014276 500000000000000gnuastro-0.5/doc/gnuastro-figures/sphereandplane.txt0000644000175000017500000000005013217200076017735 00000000000000../gnuastro-figures//sphereandplane.eps gnuastro-0.5/doc/gnuastro-figures/sphereandplane.png0000644000175000017500000003521013217200076017710 00000000000000‰PNG  IHDRʤk­}bKGDÿ‡Ì¿ pHYs––qFþð xzTXtRaw profile type iccX…—m’d© Eÿ³ /O -Šðþ7àCVwO·Ý3c;+ˆÌz„®îéŸîé|êPIù}VÉ?>õë·¹ÚµŽÚµ×šÇ6VÍöIR¤iÓÜËÈ#wÿÓ™ñ v}ýpç´zþCþÇùKº mÒ¾ùòíꉃe­Ú?ÿ_/êT%BùûóõÍNéReÿñ|÷ïÏáü„ñëŸ?èÏÏÿaèçç‘6ÔÉÌ—«5í0³cè÷Ïÿd~úõÌß?µöò,&ÂûIú›„ÇUጚµ}‡F·ÞRoL"JoË\Æï£üw¦ÓÚþoMÿúùÛôë;úü–%>?Èš±‘‰ oØþyô×qhµåVý]‰DÌå»G¥ˆûßÕÒ÷ÏïæI¬ú9Z›ñ‡f¿ŸXÍÞ÷Öù™WæYÿ>ïc¨öoÈù‰Å?È’übñG¤ò3øÅ#Ã0T.¦Ú+ EKÒ2u“ÛþZÙYôvê,<x7Xó°'ó)yGS}E< Úă‰wÀaÀ0°0°x¸0°ë;$ƒ5Îgo =æ8,:`^¾ü¾ûã5LÃØäåý)ãšÆ0FäRƒ÷ J›ŒËQy±²^p¿`£‹…wÊ;¼.#x\Œ9x[ Ö‚§e m~àbq¾߇ïË÷å;X‹âl ‡†;ãP/ÂB;ÉTap4ª™ÁKv¯ÊCe!Ù«óæjL$Çuad³˜ «or2r}9"è´—þ–7à’Uò£ÚÆ.Ô#rƒwšðNñI/€ããŒ7ß6ÿ»æv†°Ü®çF¶…Âi™úa kçÞ'@HwÇãŽÁ>ú^ ‚wxÚ½§ÜˆÉƒI ÔNÅó £- ÜÇ̃£ 2€ÈÀ«±éqÆ lñƒ4þ8¢TÍÈO„쉬,ºÁžg±“eE8,Yn£Ðàœ¬)+˜Pv×vàŒÈT>íYÙY©1%кy~ .6Õ˜Pë¿‘'U0»ä9VÌ7O8dâî\ `ó?‹æÕ<£^xÆ1Lz6µl“ß Þ¸y¤lìb,X¥äűž- ±8Ò¢lXdh‹…š¬xyæBÝÐņ“¶P´›ºÛLÞû•ß~“A/@°®ì@Á‡gݶ|iöWf×1zÞ_E²O¥¶ò!.‡‰ÈgÂá7ñ¸ÀႾKö.ǺùÚ¦%_Bpï¥,ñ(8ó€T±ŠÝPãÈq_y¥J:Œ+œ_qÙ6nóüè[X(äÄà»|{J™^Ê"Zn¥ÜÉá´PW¥öQªôB锺Z©Î¸ù#ôÊ@× â0˜ö JSJ§ðz7Dz•>wéë@—=!‡RËhtBC ²YìTÆ>…S½j+tEX,âEfÙGy«(Ô ½•A¯aE×-`«hh™Cz™¼œs•¹bç7 ?”ÑLv1NjèžCcÒ˪«,B³T¡£[€F*‹€âxÙm—Í177žì³Êc P|ð­»8ñq÷âø@Z‡*>ú(ÌK+c·H¹xw‰Éµ^.€º×Jh·„ð›ç±£Ä]õC¥ÄžÂ«À<:H²#UàäÐl¿ˆ¦ßʪZ«Ö:F­“Ÿ+j=ÍYÞªpUmÖkóšj‹Ç–Q{?tŽÆíÚÏzÕU“‡0úáŒ@ÉëSsÆÔ×¼U¹“üâ‘v«ªTô8êvêlAólŽœ^í‰-F <¢{*lBñà mÌb£Eú¡ã€DjÝM e«›‰ ¢>jófÕåVÇ …3½ârTêaãsÁ% ¹ÝSÅ38\+5S9 \¾jX©ÁQ"`®6`/ŠoQ½gS@¹“>BT6ßQ¾¥V¥µjÞï™­AÎM£µ=[#e_é‘Z·Ûú™t2­ øyLú3¯mÄ¡845Q‚¿n“kˆEoúDüéÑ6Ko4 mNoÓçkV>I26²ÍÁºÃÌÒžGEY¢qâ¶X®ÕödTm_sŽä·µSk£Z8m0L»(ÒeÓ‹"Á$‰ü”L Yjq+ÊØ¨Ùþ(ò‘¡…BE/¥P*\¯{P%줇®‰êÈa§ísu*ü‘RFC )séÒk=¡¬Ý%6¢¤º‡`M$»SÈ}BFå˜ÓeN†¼h_z:Žô ü7ñÞÞxMýu’Ú}¯¤:³R?F2Ž÷Kpåv ð¥•´ÊIJÇyBa+±ý¨ª@ ¡ƒAa@0*—P§Zäa]ƒ€Þ±JcÙÏ¦ÊæÊAjWi•eƒ.yŒ¡T*žÆ‚SϘ¾‡Á2&á!yYÇbÙZŒcµmŒ‹ÍÆ€ÄüÈ8x{t¦qÜÔ4®ø¸û (/ Õ .¬Î8üË›âX%¢Õ¸ä à³tIC[úKºué×@[E~U„ß” P催‹f…-¨³Ìëò.5b¶Äâ!erô GPÙì¼ßø©â‹k+â~è1Î6¡VåÊ–ë ˆG“€ÓiÇzú–Kn|±¡ô$˜j^8BÙˆõBû×ÝÒÉdCç®Ä&½s©Àì\?i‚t7¡àº>™lu©MÚ† kq±$±49]áwÝÔ¼ª>1äOU¸ßPCúú× ^&Àt0]ãÒeu.»k¾–b¢Q³øD2LG‡4Mªý<¬Ï~)vµéŽ^t+á–õÎd1±8§dp§AÚføwR–i._©ŸÄpîðécðì@]‡5'bÞOrl}3½íÝÒBóYÖL†|@ÚËÐòW,—@9ôT“¢£NÆnŸ2$½FeÓˆƒÍî67ŽÕžð.›…‚iëj¸~¯0dМ9j„¡B†îÙ]´º-‚OhoÏLtŠ´ ôÎ0Y4…Ï@);UE™S€sÅ^´*`Pv^­‰LÚãÁ2Åhf|-DEY›2Û×t_N'x:½Z~ÑŽ‹ì?üâÑ~w;J’®k¥M²ËA°:Šï0}#öërBêÔ¨äÒö˜‹þ ¿Õ6ÄèæÆJ›ò>Üfà£m,†¥÷ÚK—ge»í×ðìCkË  q8-P~”4‚¦’V2_: Q‡–`™@õˆ¤.´ýЭ¾9hè\ýG øhÇçvG?ØËhP¦‹ä°…on±Xrâ(–Ãg‡ø}·Û¦€ÛÌÉ›¶­9‡¡ mq¸-Øþ 7‰8~@DýžqˆÖG,Ž=âp¦ ‹l 1y']gÅ&ö4¿ÜB|.Ú¯œ3p?´<'hbq³A.óæqçºãô7;'Û…».2r{8UÍçsÅ$]øâ$‘6`;=Ø?$R]Ò„\6ñ†Z/}ï=æt ó’×(_8}ô˜‰î{D¡_(ô2„¤X@IÑt¶†{Ï ‘ò’F£9™3­% ³¤X´ò[5È'…2‰ Å¡FnßqÑ”mDúí‘ÈK­Šµ.åIDATxÚí{”$WyØW$¡×ÖJ‘ˆ½r-Ø`[ì âhm¨9Xv²ÂF½6г„{bäݯIAkëGObEDëÄt#Ùf,Kñ´Ú%>Æé&a6†È‡i`$›cÛGsµ5zìJ+iuóG×ÌtÏt÷ô£ºêÞªï7gÏΣ·ºûWß½_}÷^¥Á$ÎJº°¨jÒ-ƃH)†!R ‚aˆ”‚`"¥ †H)†!R ‚aˆ”‚`"¥Ð媢òAåU^9I·&;ˆ”BTŽœž!§æ©áRHº=Ùᜤ ‹§ghè†jPOº9ÙAIí«­¨ªžŠáYŽ3£+Ik¶î«ÐåâRåȘ2>DJ¡#ÊUUÀ§® Ÿt{²„Œ)…n8*‡K r¸Ôtts²ƒH)tD7˜T®®€rDÈx‘î«ÐÝ%ãF¤Ã)Á0DJA0 ‘R C¤ÃK"BG”K‘¸Žwj©{‘Rèˆn°T‰o‰’q#R ]Q%êÈUÊØ‘1¥ÐU¢®Ë Ü¤[’5DJ¡#«JRNº%ÙCº¯BÖ” Kí„8‘H)lb]I! DJa¢dÒˆ”B¢dòˆ”B ¢¤ ˆ”¢¤ˆ”Bˆ(i "¥ˆ’&!R ˆ’f!R ¢¤a·Bú?:Tñ’n… Üă‘<Î&Ø›ôÁd‹òåÓ½þlX¤%ãF”Œ-”4LJQ2nDÉØÙRI£¤%ãF”Œ>”4HJQ2nDÉØéKIc¤%ãF”Œ>•4DJQ2nDÉØé[I#¤%ãF”Œ”4@JQ2nDÉØHÉÄ¥%ãÆ~%—8”tc@%^£G”Œû•„¹¤0+™¨”¢dܘ©äÊWñÙ¿é/ e.üý °— V8J-é&÷ÏJ&(¥(7Q)¹Ì{¹”9¶EðxG¹€¿aŽÛÚþ¶‹e¶q0üiŽ›ø>ÄcÀ1âÈ#%c“R”žÃ¬plàf»’ áÿ{8ÆwFغ©›½}µt Z”ÝÕá>YK®‹”¢äð,p=Kßk£’‡xmc»CAG£Wê¦޲#‚ˆm‘)‹”¢äð¬pŒƒÌ ¤å27³·M»Ãìoër.ðhíl•ºé ã`o"T2)EÉQ8Ì>à*Ž pŸß*üb‹† Üáhr˜‚îþS7%R%Ç^f'JŽÂBxñaDZí×ðY&¸¦%ºîâÍŽ0â`ßÍq “Lr7+ì¦Æ×xƒìZÉe&Yéð<7Åòzމˆ•sE(9·p+ÌQÛ4ëTѳ>–<ÀQ ï³Âv±ÄË\¿e‡ssÕM”ùÏ›²©ý¹’cí¾Š’£q7¿Æ´æ:Ä—Í´¦wînâól¶q/+,õŒp£¦núE”Üš±I)JŽÆëeÜÛ ‹"¯KÞɇ×R*Ë]êp¢JÝôs<)Ë·ŽIɱI)JŽÂ2sÌ­U³,3Ç6ØÑóBF§ê;yûBÛKÖâOÝe"mRŽIÉ1)EÉ8hSv+¨»‰m¥íU7†ˆÒ©¢ÇxƦäX¤%ãa]Êî5® ÜÄ"+cMÝd’1*9†î«(7Ý”l¦n~š§ÇšºéÍ2ì‹‚[ýE‡: x%Ÿæox;·w)[á |•Ïòáo^Ç+x®å™äZå@D¥dÇD(‡(àèÑ#¥(98ÍÕrØÁ®ðrþ ñ«yd›øî–·]b#áH^ÅOòøã1ޱÂ.®ßr¬x^Ã=c-PózZyÌ3©ƒ¥%aUÆmìzþÕë’ýIÙd…£,ñOp>¯çŸcÀõL!§¡Œ]IPy\fu0b™(ÙK,°ÄQ¶üñ_/DÊõvåÓü]øÓuü»ÂÖc!‚Ö¥’”ÜÈRŠ’[³ÀQŽU,j­ÞFÊ&Ë,ðiŽñ p …µ±åz§úFv‹šMPr)EÉÞ,3Çžd7»†Üwc#W¨VÊ&+|˜9ž<ÞË›Zþr”*_ã &#ØâÀrQrh)EÉî¬p”9–ØÍ®×'ß¼´òhR6[z˜?æiàÇ9À›Ç~ Ý04Ñ“’CJ)Jvã(G8Ê»#Þ%jsÙyRBSÌ?á)6‹ÙíwgïJbJ%¥(Ù‰%*<ÂK\;†ñX§ÉYQI M1?Æ“ÀOð¾Mú5ÇÅ—r#{³Sz ’CH)JnfŽ»#=¶Óy¾d”RBkļ–÷vˆ‹s,p”]c[ÃÇ(Ur`)EÉ4…Ü»¶NÔt›Âµ”Ð:Æ|wwˆŠ+ü)U¶qKºÅLXÉc%Û™c’»ÙÏ×8³’ãaù·rŸã§ø£ßǯæ]L2áóµsâJ)EÉuV8Ì—²¬ÊôRr‘rýèöñ)à-üÇŽ'›xŽ> Pr)EÉUâúHöŽ’ã”`ŽòWò'Lvy昃t‰i„’}K)J6i 9ÁÞ±¤tZÙªã:n)a‰÷ð(ðNf»ÞfŽ»½é(30DÉ>Ç”¢$À ‡¸†%îáÁÄ•Œƒ þû?âÍ]7MØË"û™ãîN¸µ#cŒ’}I)JÅg{x0†Ì£ J69ȃ\Âxó]o³—EòYö²0ä³è1HÉ>º¯¢dsíÒ%ö±?–gëOÉñw_WYáü༿çA‡¹›½cËC£”Ü2RŠ’pˆI.åóF)'Ûø8?á†Kšmã 5–¹&Ò‹%±`˜’[H)J.0ÉäÞ˜Îÿæ)Ùd?5¾¯s#wõ¸ÕrCÜdÓz„Æ)ÙSʬ+¹Ì-¼‹YŒ­~ÅT%¡™öùeNò»¼§çíöòy&ð9Ô׎š‰c ’=¤Ìº’‡ðÚÚþŽãÇd%¶q%.â>~m‹Û¤ÆÒÙÄ=F*Ù5Ñ“m%ø¯À»c­ðTÉø=í,ñžáùƒ-oy7‡™àNsg–ªd—H™m%q?JÉh%“c‚‡¸˜?çW¶¼å~>Ï¥ø¦&~ŒU²£”YVr…›8ƒ1'öíQ`‚Op1ñ“[Ž·q/9ÄóÆ—+ÙAÊ,+¹À5\J-æ‰Iv) M-/á+ÜЇl{y¥-ò±±ïc´’›¤Ì²’‡¸‰}±]üXÅ>%&ø8—ðõ¾´œàA&¸©G7v‰Cq6Þp%7$z²«ä ïâ1î}aÅá•L*ѳοÀS¼Š¿ìë46Ç!v›Pïc¼’m‘2»J®v[íQÒV£å¿ìkĸ—Ú–ÝØ°@É)³«d2ÝVÛ•„U-ÿ¾O-wPcWÏnìØ±BÉ5)³ªd3ÛZ‹©®µû•„Aµ„ƒÜÙ!S¢Ç%C)³ªäRBÝÖ´( M-/@ËÝa7v¹åw±$z¬QÎÊ®’G¹‰½ t[Ó¤$4/¼†¿çÆ>µÜAkØßw}t‹”„³²ªä·p0ÆÊÖuÒ¥$ÀŸä5|™}}ßã÷xUœI«”„³²ªäîLDô) °û¸˜Oñû}ßãNöÅ•ô±LI@gð‹'ðzæ|D䣓~7´(‡Fòº’G“×à$ón˜ú•x8ä(i¢”šóïB¿ì9œŽ"Ï øT“n»I_‰7 æÃu˜gÑ~%Í”RsÞ—Ñ—}y ãð8A)év›õ5ж¶£ª¸LézÏ]¢®ËI¿ãæô?;û™'^{å÷]gŠœ*%Ýr“Ȕʡ Lé ç΄’ ƒ3?ßyÇ+Þ2À}êL⩪r’n½)dFJåñq>§'EÉñ¢kÌÂÊü@Šü¢eHF¤T.U¾ªã¯¦#[J虳?sú\çËÜÅãýLhÙd¨íÕmC9T©ëD®VKIåSÕ*‰#ê£mÎY½tÉ~ê+7 v/ªz*éÖ'O"eøf§JI³ÑÁKo„¯þÌU·v/¦p$å“ )™ö$ñÄÙT@×™oߥÜî°G2±R•p$ã?zö܇NŸ{aµŸÛ*G…¥žºÁ9UHºõÉ’r)U‰{DÉŽß}áç=~Ò=¯Ÿk–.¹Õou) *Ÿtû%éê…q~QHCA]—g0²¢'l›K ƒ‡F“øþaMlV¿oÀ-Ÿ^%Í–RCŽEæ²Yôyß¶é½3á+µÝW•§ÄL"uùh;®*ßìÌ)›¦ØyÔþ±pé7N_yÁ]ƒÞ]—™¥jÕGIÒg…1©=N¤£D‘*Uæ)µGÃ#åâj§}ÞéÞ3G:OÝ¢Ä Ü¤$‘W/éŒå \NPHºKN£!¿ñck²”8èu /ø ô÷öœš…G±ãïK,2,-_‰7`,µ˜®É@7G£¥ G”áO.}å[†z¤¸+飉ÿ+…cJUf’nEdGã¨"³º®‹êBÃeÝ`ÔÀãJÞÏÛ³wy$uRªy¦“¸29–£q(RÓr(`”>õ¶SÈìÙOûªú¾ÁH7˜¦˜¹„OÒ¡:⎓›–Ox<%\ èÍGet÷Uã´É£/yºÛø°÷=³6²L¼NÚF“ŽFÓ)i´”‹ä7&ÚÎ}ýʺܾK¢'­ïê–¯_Ò ˆô`2tN5YÊN§|ôyÏw‰#mýŸ­¾R4¦L×hÒntcÓojç>túܬÞÓöh™Y¦FJåRb6‰ ¡?^8Ë×+˜ûê eJåŸG"5R2OMÏ&Ý¡;ÍK#¯øè濬OÝêqï ˜ô1ÄCJ¤TEl[œ>{ÌžsòÛW]rۦ߷LÝêÁr¹f™ô 6’´Â[ø¿Y›S`v¢§k«óè ƒa“qä²1w$‘R9ÜÉC2š´]¾à«'·ÿ[CÞ»ÂÇø¤aü¤@J 2š´…go…3ÿvè”͇xsú»°ÖK©< é©tM?º¶í‘Îù¿ký]?‰žðÞ3Óž…µ^JŠÌêÚè#ÄÅÊà×Ú~Õ_¢]¦NÚÖJzP;râàDVjx6¹•‰žæ×ùßa„5xðhLû¾¬Ž”ʡȌÔðØÆs·Ãe· {o]g–T¯ kµ”²½Œ£­èò¹Ï=ñÚáj{˜ÅMóÚ°K)){9û#pÅm«?õŸèi¢¦)¤7Ýc±”Rëj/Ï}¾ósk› èi¢+ÔÓ[tg­”ª€‹\´\ô\úÞ𧺼Ç3M~„°ÑX*¥r(È4-›yæNxöß ßÕ fÓ+-•’ò)]IºÂðèúËÿæùó.~û1‹“Ît•R*—}Üžt+„Ñ8u'œ¹Oô4Ñ3ÜÆt•RR ¼yn»`ºrþwO]¦r ‘èY}¾/•Õ=IW/ QÑᢳ¹œ}Û«`qEÏê×Å·¡_þðH¯B*+ºlŒ”'SÂÓ;ïùS×¶Ûs;ºL0\”5ë¤T.y¤Š'èàòcÀhS±fÓ×µNJ Ô¤d -|sÎ{Çp‰ž&º i›ai™”Ê!/%éA×/\9}%?;R4u±Ò2))P“Ù“iâ‡à¬÷1¥îöâFúb¥URJœ4媢r•£ Q¨ðË”~é‡ù >À·†îÄVÒ+­’’u‰“‰“§F•eüQ+jÔüœVáçS2ZÎâ¤)VZ$¥ÄIP>uÐ3: >rümŸÀ‹†,"(˜Ã5 ‹¤¤@ q2itMWð¨èÙ‘§ìhû醽f9‹›ž9#ÖH©®åI·BÀg¤‹RÊQ¹—ßuÙÒyÏnúÓ’ë€rzÆ•ç$Ý€¾Éñýú¾¤!€rÚ·Oàž>Þ÷üó'¯ã²Ë_xݹWŸxéY…Z»Ái†Ÿù3KM½N)éW' ì‘Òá ¢Ä£>H·U¹xÛßxö®ï¾öü^}®ËÕ¸\xnƒûùÊsg„ë™àìð¦3×Oê@ç—øRÒ/N(t úk¦ËqvJÅë:ʧªÕè3Ôs;ýH©ü ~îÂêÚçÏ¿êʼns®À]0žäG¸ä§nÕ¨;øù‹^yù“åF«ÔR9Šzg2¯H´Ø"eœžLº&‘¤”=Ûåá]þæ¼'w\vúÕç]ÉÕ\½áGxè̹KOæ[<œ£´oûÈÏ}‚é4L}·EÊEʲ˜d+fI©ü ÞpÁŸùÁçÏ¿—àÊ·{”Ò™çž~º°ù½<|‚©}#Ö4«"ŽNÁ†ˆVŒ)•·š„Ìbcêæê×4ç~¾xú¬?|öC;¿5r£åt U•‚Ź­’eû_êôÐ9uÓëÍQ䥵ÓÓóÊ'GžÙ¼øŠ·ïw€òð#K]W9û'öYÑ}MËX!J’è¾vOÝô¦Æ'^xá[O¾«sé‡ÊSÔÛ»gûþEvV|=ï«=DJ•Q29:¦núþÜ<Ê'^øÚ™—Í>}G×›xÔ`_ãpîÝØ EåÚž¥·@J|û;$ö±žºa=usÞ`q’û©±ýÞçßwºWì[}kx0ÚvÝP5r¶WH/¥rÈ#CbcÔMoîç¾ø²GÈ=Ñ3n)·Y´ø·ßø(ŸdψP¡ RŽ› YþcÜ žºéÍÃÜwæä‰go=µõ°Ãr*8ÿ-³ûFMèU()ÏîOŒ RJçul¬¦nXOÝŒ b“Çù(_yîìœzO_7÷¨­î$rØÇõ²ˆT9‚‹+‰b¸”Êe;žt+ÒÆh©›^¬Ð=kßÔÖšæúÐ}åVj”ìÞ"Ñp)ñÑú±¤‘¢HÝô¦ÆŸ9ÿï8ðdßsHÖG”4¢XÃUWÔŒÝXÓ¥r’°Nt©›^<Ê}/>ñÌ©Âɪˆ øŠð f-¢mÓ:ã3Y /PÇ™‘k”تx cêfLmyœûy˜ >Ü¥€nŸ`Ͼ‘OꀧGÍâ&ˆÑ‘R¹¸¢ä`Œ#uÓ‹“á¯^¸ès¼óT—ìë‘ôjv¯B`´”øÒyíñ¥nzSã/œZyîæg£zŸ"IõèºBùö®çdº” ÆÏøS7½h®ð²Ù“wDø Q*k6ŸÐM—Òâ‘Á˜y5pbœ©›^„tÙ¢€np긇‘  ŽÅkÛ,¥òpì킌‹àFªºž _zêÉ:ï}"ò~̾àp#¢Qe1‰W& –ÒæH<Œ+›Ú‹G)9µròWÇ–€‹¤ã©ë*°wTi²”#—\ Ñ2`Ýp4"êxZ<ª4y1fk_Ô4r’ûÙÏ?|üù«’Q•Ú­N³c#¥òÀÖîGúX- ûîøß‘FdRF“ÇMs#¥ÄICx”‹{îÔ»Ÿ˜ˆã$¹¯‡#ˆqºACEPI›ÆFJ\þwÒM0åÑÜÎ-K3n‡û×~xSË‚Ž N®}EÇ…ûçqŽRcû=Ï¿/Æ…Ëj#-Òú8–®h®”©Ü¦@yø¡d. ½6ÁHùT[n6Õ“r]ÆFÀz]Ûu-8Jù(p#7¯ýþ~Žp%W··Ü£ªÛ®p³€î¼G·Z; r‚ˆdzÄÖ+Ì•2š³el´'àUqM%™–ø–Ã# 4hý¨×»mÊ »Í üf»XëtËÃÜÌu-1´•‡¦Äë?Ì}gžzúô§ž[&¯ê1Žð ¹Ñú¾Â¯ÇÔâˆ1TJåƒù+½*Ÿ<N(`ûœ:AxZi‘­›b:v¸Aè–AÙ(÷jÝé¿Æ\|Xã+—ãRµÑ°Q¥ŒbÇP)qLJó(?ÏšҶä~ƒ:ÁÆ)µÚÚ™ïͺKxþÖÓt}ÀÇÇWmmåá ¶'WÇÇŽäb†n(ìœìlè|Ê$w…P.åõBØé¬S7cUQõ^þCôë¤tÚ|g VÉãÐìœ×‡=5Öl þU¥lãÔ?S#¥Kì}åR ý®µw&‡_s{uQþð˜ Þé¢Y@wj¤:=ÃL¸È‡Ó:2T9r4¨÷¹2a4õ¯Ñ¥ŒbÆT)ñ§y”‹£[×­3K#ÊH¨kÊ%XªÄ\\ê­êëÆXž³õœÑh)Zš+Ð]þñÓïm?Eå×_[Õ¶‰r(uˆ QE¸¨RF1c¤”Ê…(èÊÛðx5ê#§#úemÓåF{•]¦ï¤Åã|g€õxjüÙ™³—™Þ\@7ž(¿)Š6Ö"hƒ=zS¾z$Œ< n‘RF5¢T>>>åõ˜¨kñev›qAù€‡7ÌÞaÍ+žªy }Pã;\G™~ªÆ››ï\ð›+îrƒ±Gy´EÐÕw½ QlÓ£kÊéo+x³0SJ/ )U5fL‹ûkW+}êC¥PêzTžz?Gñ(s;p·Uùl&, ë½ùÎÈQ¾Z#è¾ì×* FƒÚHWB£JÅŠ™R•æQ>Áú[hÄ>…Þê‡JAuãÇZùV]ÛÄ×PE*ýX>ºVV×è)e?›ïŒåGA+åáã1¯¦õ°[WXY@`¦”žÝTŽæØ0n¿¥õmü:tþúéH+‡³:PÎÖ5N5V«`ïñY 7ß¹ùÔVÏ=z” ¦áT[¿iÀnmT³3cÅL)ª{UU<Ê”©™qY¿¥e­‹ò»ÊÁ¤3­ŠTt  ”·*Å{”+ ÖG»LßoÐõ¹v@Ï(^¯ª‚JkiÇ–GafΧ¬}Zo×3ºÿ·)&T‘"SÍsu ”GaÀÑr‘Y<¥9Þéúé]ÜÏÃ<¾öó£aXhWoz¨“ÜÏo²üÀóßÓçÚë |šôÁžd—㪪òjë«Ö'ÁÔHÙ³£¦r­ýM“q­]m±EWÔN\fÌÎè€YUé|ŒWr’#4¸Ÿë€“á¼ÊG¹nÓ%‘fù'û<ÝåÇôª”)+—‚>®fZ¸Ô¤Rªçeå“#×ïå³èPç²õ}‚ðži&uçÓ”¹ŸÝÀ•ÀIjæ}¬n¾Óº$Üz'§Ýjä•gÒ¶åºÁl_­1ô„Ý¥ÄéüRªE*L%¾6‰+¹™›9Âý\ÈI.ä~Kvc¸ºH¢|Œ(—y*z“¦º¡†y¸„1QÊnç·³C§ÆSÏ\͇ùu|X»,Ò, »´vzzÔ.þ0Q>VÊTžéÍW5í+01ÑÓeø®ë¢d/\~W±ÈáÏ5þý ŸYfjeÊÔQwtè@—õN*TUqSúǤ4U_˜(eÛ‹ØG†M¹wseàQ>ôÂÇž{îwW®ÊÒ2z†I6dX8Ô1³û¾Ê¥D ›üôÏ…ÜÎ>ÞÏ×·* K)ºÎä†Ó¸…¯‰‘2D9Nƒ„Ö°•#¼xæ[_cç¿jÛH**6·u5=&FJ‡Ô"NÛR‹Â–<Ì}gN­œßæ;––䉔àRWE&³z®†X6ß±ªš‘1e4|›¿ä\*¢d¿4/}\òÀó·ÊkÖF™ãtÒÍ¥|çJ·µV7ßyR^³ èYåó&þ[Òí¥¶DÝÆïÀ»ØÃ§_|â™S…“r·3Óü×$݈A)-D¹Üð4÷rÁD³]:Ñ õ%^‘t+ÅD)_Î?Iº †Ó’O|ö/DÉžœtÇÄë”?Ä+“n‚á¼°ö½…ÙÅX9Ù¤›0(&Jù,¿”tÌF×ùd¨å%NöB9\Î3I·bPL”òë¼ZF˜4£ßÊëyŒI}GÒ-1œÙ×—0QÊù0e]F¼è:_—y¥½Q>þ;O%ÝŽA1QÊæäùRÒìF9”˜å.Iº%ƒb¢”Óxj^¦m â\æ ôŒ}•¯fJÙ0‰Ãq•Kº1sò•/'®N¨"÷óS„ÓìÂD)Ð =Å,%5/£ËÍ(_ͳ€¢*&ݳPžZ$ÇíúWÂÌ´u#o3¥ ×гL‹’‹mGÉé=|S×tMO㉖«(GY¤Æ¤ÍÕÓ&JÙ²¢Œnè=LSPU‰—«¨"^ÛÖó;waŒ峈ϔnÝIÓÂu_ —@WØÉ×ù3u‡ŒŸÂ4ûRŠ 9e)W©RÑ›c¤uˆ™(å¦õìt •ƒü N¨ù̧~r46|ì<¬\‰&*”£òªÊq\&u‡Oì[ËÏL);îP¥'ÙIƒ¢:¡Jʺe##·i FV‹íTN•8A;õžÍÅvö­L”²k¶L7ôŒÞÉ4PUÇU6«~6¤ø•kÒvñ¡bÂñ_øs fhº6Vó€±Rbp¬¬}Ì»¤”·¥8°:/°]»t*´ký 6ÂßlÌ–X7ßß{  ¹˜,¥•TeøÑ˜½Å1ñ3X:ƒÆÌù”5×!LA9xã¼Ò=NŒ•R×p3¹Ü‡ ¾½3k•¨%s­RHÖÆI³¥ÌȨR 9[s¯fK)£JaH”‹+‘r èN†×wFÁ·ùJ«ÁR"±R‹G”¦K)£Ja8|{G”¦KY‘H) ŽÝ#JÃ¥ÔuQ¥00V( —U Ã`õˆÒ|)ë"¥00c]Jfü˜.e ?3»„‘ <\;&ýuÃp)u=©…AkÉÙ¹2Ï:†K‰d`…A±^JsçS®Ræ¸rm­÷âFåpúØ"ÏhŒ”º!³E„ðmÚ¼ŽñRòI7A°åØßyµEJWJ„¾È™¹Üå`X ¥(KV苜ýW+¤jÒ¶F¹øöw^-‘RW@I¬¶"G- yz+¤ÊrµRØ’|â¤=RVÈK¹Ð åÙºËÖF,‘RשK²GèI޲ͶֱDJà^®Oº ‚Ñäíž²Ž=RþÿJɸRè‚úeê¶—×­b”ºAY.Œ]ù`:Æ“`CAú:³Rš.tFåqt ÊšX)ÃXYýq„RHC%Ï*I Ì’—M„¨³I·":¬’Rb¥Ð‘|Z.†4±JJ ,±RhGùxiŠ“ÖI©ëÔ$V mÒ'­“’æ¸R î„ôÅI ¥Ô5‰•B *銓J‰ÄJa åã§-NZ)¥®Q—X)Í"ôÔ•“X(%ð;\+±RP.ùôÅIK¥ÔŸáb‰•â®ôÅI»j_[™fQUì_·L•çgÙ™t+Æ•‘tYŠI·BHåPd6my×&–J Ìâ)™Ê•] Ôu Ç“`±”:`†¢¤{²‰ò(0“t+Æ…µR‚.S—.lF)2›ÞŒ‚ÅR3äe‰ì¡òé+­kÅj)%Ý“E”C‘™t¦xšX-%0‹£äŠe¶(ROÏÒ°\J0CAÒ=ÙAùäÓ›âib¹” +’îÉ©Nñ4±^J`šS?•t#„8P…t­ÆÓ™H©,p¯taÓz7¤;ÅÓ$R‚ž¡A)éVãE9ÜÃÃiY½©؃/YØ”SòO[g‰l@jUUK{ »¨<9&“nE<¤%R¢kÌ2/#Ët¢<ŠÌ¤qîdÇ£ÕI· ʃ©è=I·"¾£ÕSI·!¦#u¨R×ÓI·#.R)Y¦•"¤½` •”Œ)›ÈÈ2¨<9¦Ò!dtEJY¦Žp4™©Ólʤ=C ×,Ó‚r(QIwùùfR'%2²LM6I¡”ºÁ4Eå%ÝaTTžÓYM6I¡” +LS-íF噿ÙM6I¥” ËTDK›Q%JúhÒíH‚T]iEO+(©L¥ÒÓƒò¨2µÏ*)”zšU¹rÄ ”Cɸ¶‘‰DÏ:ºÎN<µ(Åwf \ª¢d;“rµÊGjbM@y,R×¢ä2'e¨eC&v%MXv.C‰MdPJÐÞC]´L•§Ê¬(Ù‰L%zZÑÓêwªÛô—’nIQyJÙ/¹™Œ”Mô{¸Ÿ/Ê[ñ£ŠEÉîd6RÂZA—ÅÅ™’B¹FóFé¡t'Ñ@W˜ÄeQF—ñ r,r’-Jö"ãR‚nèI*,J7vü¨"óÌê=Ò/éM¦»¯«èU—nìxQnXL'õ­[’ùHÙDº±ãEåX¤.Jö‡H"ÝØñ¡Š”˜ÑÒéé¾¶ ÝØèQ.ó Ó²A"eºÂ$gø¤ò“nI:»­¢ä@ˆ”Ð ý6þšª*IÉúh(W=Àé¶ŽHÙ=ÃN\ŽËørX”£Šç)nºÁ);¢zŠi Jò±C r,â3%1r8DÊ®è ;©±¨ŠÒ‘íåªyJTô¤®%Ý[){ =Ã$ÇeyÊþPEIYžlDÊ-Ðu=Å E%³/·@ùê89öè=²Öhˆ”} Ëì¤AY}H:²Q®šgžŠÞ)ÖÑ)ûBzš?ËqanD¹ªÄ"ŽtZ£B¤ì]Ó“Ìà‹˜ë(W•¨p ¿ §¤Ó"å@貞dÇUQ¹I·&Y”«J úmú3I·&Mˆ”£kz*³”U1• ¹SOË(2jDÊ¡Ð5=ÅnÅT¾ªR¥)¤tYÇ€H94º¦§Ø Y3²!BŽ‘r$tCO‡bVU>Íé娂Zdž:ÛEÈñ¢tÒ-HÊ%O‡ 5]‰é9«z*¦gÊóz^÷y˜²T³Ž‘2B”GžÊã%qHï M¤û!º®§õvfp9®UÁæî¬rUQ§ ìÑ;õŒ()Ç‚rÈñ6.á ,èûÆôcŠ”Ê!G 5*Ò]‘rŒ¬4kÔ©E½$FôR*>u*T$6&…H9vÖ>ê5jÔ¢ú°G'¥òðñða<§a0DÊØP~øÑo„ýå]Ê5*"£9ˆ”±£šqÓ å¬«ÂðR*7<=H¡œQˆ” ¡|¼°ÓX'ÿÕûO¬ "¥rqñpðpqAd4‘2q:Ó  N£w ÝJJå‡éà ƒ‹/$HiT‚€¦š š*­G·YV—ÀtðÂÿ›5¸NxÏ5-Ú„Hi4ª©¬®ØÞºNÐóÅ–ŸVµkJÛ ö"RZK|µ¯B¼H™ †H)†!R ‚aˆ”‚`"¥ †H)†!R ‚aˆ”‚`"¥ †H)†!R ‚aˆ”‚`"¥ †H)†!R ‚aˆ”‚`"¥ †H)†!R ‚aˆ”‚`"¥ †H)†!R ‚aˆ”‚`"¥ †H)†!R ‚aˆ”‚`"¥ †H)†!R ‚aˆ”‚`"¥…¨‚*(GÍ«|Ò­¢Fvr¶•ÃãZ^dF×G4Á,ÎIºÂ0èŠrx'7ˆ’iD"¥µ(O”L'"¥ †$zÁ0DJA0 ‘R C¤Ã)Á0DJKQùf-ò’n‰5R<`%ªˆÊ' œt[„¨)í¤®g@å©KAúâkQE*¢d‘Hi%Ê¡À¬”:Hº5B´H¢ÇB”C‘š”C'éÖQóÿ1bb]MúU%tEXtdate:create2017-12-22T13:53:18+01:00 ³Zù%tEXtdate:modify2017-12-22T13:53:18+01:00ÑîâE#tEXtps:HiResBoundingBox220x201.5+0+3.5u”Á<&tEXtps:LevelAdobeFont-1.0: CMMI7 003.002 1÷Ô4IEND®B`‚gnuastro-0.5/doc/gnuastro-figures/sphereandplane.pdf0000644000175000017500000002253413217200076017702 00000000000000%PDF-1.5 %Çì¢ 8 0 obj <> stream xœåX»Ž[G M}Ë|@0eTh2ä¼Ë¤IìUg¸’¡5‚Uá¤Èãës8oIÚtY/à+Î%9ä’CÞOÊhRFþÚóxÞ¾yKF=þ¶±™Ôãf½Ó&'EÉ:£:oLìuŒcåi£I;§È%£ƒÅÊÞh¶‰-k·ûœƒÉPL&°¨É.kâ Åä=éè±eDoc!â EÅi³:'¯~ߌúáE>n}Ü>áUñº=ŽgõÝAü'à”Å&‡ÓVu4PcŒN†Ôá¼½ûúí^ZMâ÷‡· ½M!*†»ÁFuøž_w{«NÂòýa{3M2lÄd“’6©’„Ú aBy;MNåä´ˆGX?äƒ: —0<é>÷r‚ɰYqÓU÷þÚí½œ9‹é{ò:ejoåGÕ¿+ °]7ˆ:SÎŒM ÷»½XjRnÌÖ G;óåþÀÅ ²'‰ æÊóånÀ“bœðj¼–!kR Êlp¸‰œŽVÂÔdL€ua ~…]Ô/ $’ÈÁS‘ÃJù…Ö o¬òE3rë–î®JpÄ)#kãn%RFjUB¦ #•c½7 “NŒgF|[OìA#E6é ï ¼éÜ£ÙÌÚÙ¾01Y aÄ¡8Fyn}‘"‹`ÃJòfÑ‚XòB£6ŒmŽë6pGºD­µjnᜆÅ÷CÂàYÑ€ b…äOÄ8¶ùŸ!éùÃ& ÙfF…\ùyPÈD”Vø?f[¤€[½ÎÎÃU¬4´ ­8”¬À^8p:«`Ãc‡D â!E)[ëós‰]0™UµAÒ úRY{‰·5çæ`*…~ÀWE鸕H‘J\FØ5ñN÷ Ž#0=øá‡ê .ÐØ¡Ó@¯™08š‰]õGÿÛ+ãa»¶å…&H´ÔäZ,¾Ýí¥ä£j/ LÙx ϶àý€-{ܰ~fJ§l“¡¢R…Ûï”sÅâRH3bí§îBM¼úÛfe—¼0úùZpúûvÿÝûÙf•änŠí:ýia³ŸÁ€VÕq=–,‚ˆf©r—J‹`-ׄˏŽ%À"üxÉ-OÒ‡J=Eͧ֩~%m%§`x˜…Kff’[iäÇ¥åqb¾ÍQ¬!ŸÐµÉ5Œ„‹¡X‡6º8¦>.™Òõ9<ò 5lôheÐx¢Jº7ïe­ (çeÁ±–KË£%ðHköFº‹9ÑT¡àò?,ä×:]¶¾€L&²¡ýpJË•‰nDçèFv ^”€»œ¼Î˨öz|¾;˜¥ {'’AÚ×hþy‡¦-cÄš9†ò+m"E´ŽTl ±^Ç—®#•&ºÖè -œƒ£žO‹†N—- €mÁ‡*Р¢Ô-Û•‰nDçèFv ^\Ø;½"_¥¬)BÐÁ¨?­1¹Žª+ÉûÇ{’™,‹‹ÞÛ>fôJ6H‘ šÊÜnë˜mv˜tŠÝÉÙE]WÄÿl,—]h1<µœxæ3Ê¿€7‡dÄJ«=·<ÎyíÆ¬ò›Q…bý|âÚÇ¡§úaÄ,³ø›íoõ{ÏTendstream endobj 9 0 obj 1358 endobj 4 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /Metadata 26 0 R >> endobj 6 0 obj <>endobj 7 0 obj <>endobj 10 0 obj <>endobj 17 0 obj <> endobj 18 0 obj <> endobj 22 0 obj <>stream xœ]O1ƒ0 Üó ÿ VÄB†Ví‚ã  8QC_ C‡³t¾;ù,ûá6°K ŸÑã‹XÇ&Ò귈͎E­À8L'+„ìï:¼?`7=øC/$Gulê#ƒÞÐ4RÔ<“h«ªk­í±ù“ÎÀdOg³;3Tը⿔Í®“€[ŒÄ©-ErÇôû%øS°C|ëëRï endstream endobj 15 0 obj <> endobj 23 0 obj <> endobj 13 0 obj <> endobj 24 0 obj <> endobj 11 0 obj <> endobj 25 0 obj <> endobj 16 0 obj <> endobj 19 0 obj <>stream xœcd`ab`dddsö Ž4±T~H3þaú!ËÜÝýƒíÇaÖnæn–…ß }OüËÿ=J€…‘1¯¸©Ý9¿ ²(3=£DA#YSÁÐÒÒ\GÁÈÀÀRÁ17µ(391OÁ7±$#57±ÈÉQÎOÎL-©TаÉ())°Ò×///×KÌ-ÖË/J·ÓÔQ(Ï,ÉPJ-N-*KMQpËÏ+QðKÌMU»ML:çç”–¤)øæ§¤åeæ¦200000v1012²Øüèàûá³qÁ’ùŒ/¾¯dþþçGªhOÏ”yݳ8Ög/ÊMjÈ©i“û­÷ǵ½¾»£»K²zkcÏ”Þ Ó'Êñ/þi¿í·òtöÃ\‡¹/äáb^ʽhö endstream endobj 14 0 obj <> endobj 20 0 obj <>stream xœcd`ab`dddsö Ž4±T~H3þaú!ËÜÝýsÉ÷å¬Ý<ÌÝ<, ¿w }üÎÿ=D€™‘1¯¸É9¿ ²(3=£DA#YSÁÐÒÒ\GÁÈÀÀRÁ17µ(391OÁ7±$#57±ÈÉQÎOÎL-©TаÉ())°Ò×///×KÌ-ÖË/J·ÓÔQ(Ï,ÉPJ-N-*KMQpËÏ+QðKÌMU;ML:çç”–¤)øæ§¤å1000ñ2&FF­|¿¾—íaüÎðÓ‚ùgÍ÷2ÑÙ‹»/)é®’ÿó‚­º¸»¸hQ÷y¾âÅ?í—°ý–ŸÎ¾‡k÷žù<<@ÌËÀ/\ endstream endobj 12 0 obj <> endobj 21 0 obj <>stream xœ]”{PSWÇñZ1¾š-´öÞhWG·ŒJkWmE×Rí8–ú®¢  IH 7/ I ¯_žÄ‰^а¶¨]ëVݵ£¸>Æ}9¶kkí´ëÖ=7sèÌ^ÜýcgçÌœ9çÌýÝûýœûû~¹œ´).—ËÏËÏß´rrµˆy…Ë̛¼Ê\’ú:U”<ÈHëŸ7õæÔ4Éf¢’Yœt.·¦ÖÜìÌ“+tʪŠJZ´¸l‰(gõê•Ù¢7–/_-Z/“(«ÊÄ5¢|1])‘‰iv#í—UIhhñšJšV¼½l™F£Y*–Õ.•++Ö.ÉiªèJÑvI­D©–m”×ТÅ2‰è¹¼¥Ïç<¹L¡¢%JQ¾ü€DY£¨dK$´˜ÃáL_¯Ôêê¶lÝ.%çp8 8;8œ½œ}œåœΛœ|®“ œ —“Æéá®â>žÒËÛËK+K—¤óÅüKŒ]ú†ÑÎaf}”‹JQ†°rWõ¡­6“Ó !Û|d/ y0#¶~8—ñš/G—²¸*Ü€P°Ãwø>š•‰Nò{ðÛ6S³~+d@eó˜Â}7½ÐGuB·³:1G'á–@8bý6G ÇN½Éül9Z´¥…f³¹ÀƉµBTŽîŠï§ ˜„)†Î>jKr™ßñíºüÝ_»}î@ß¹ÁžÖ@"z‚wF Õf£t„ª£¾»{¨kô³±=»÷« ŠIÝ•ƒµPJZ/§4l+ahO›Ë“h!#Wº>= Do‹J¡5—7)¨&…©ÔªªÆ/fÚ ÍJ°ªNS{$z8 ÝþÖýqBzÅ”½†6OÊ{‚³ÂÜÏ„¦ªƒ»ö€d n {†ÁO©‹ÐòšÚò‚‹ôÙOFúFãdÏGŸëN¦^A³“aØœV£Roܲ{eêĉޞ¿'ŠÞ=7 @¬áÿÈ.nî(+(;(Q‘º‘¢~¶ §mÆ3e“La—7ì£â÷®ž> ÄPB·Oc,0WQæ.I=I2T’ûðIÿ8ù-3Cèmc¿à'¢úP]£Öªm$íÍ–j«F½*³¹VŠçØP¼"ˆ÷á÷º¯öߥBƒ¾tc¥Çw-ÚçÕýç"}­2þ—Ó'Y²Ž@c-mVY Ô>,0•C1ÔAáÉêC£Öœ‚áÈP¿ag£X\ –üš ÔCü0.b°ÆoRÔí+¿ù#šyÍ ̨é.:w—‹Ö<öövvýíËXÇíË}É+—Oœ‡2€ÍlwX¬¤´H]_ F¨wÉúªŽªZh ÞÙµBfÚ[BnO«—Š»èn‡nèmn³nl8RètÙëróJ­fËÖšb0Æ0xƒnwÀG&N t…Dœ å€,Z?Ä¿®£GC®f£ÃÚh£´[k÷ JŸÒ_´€PÍN¶CÍPjÑ ÷ÆSæÂ÷¼Ô &Wˆrp:š7` Öc«ð[h:{òdFzTƒ4ä„xb¹p~Î8Z|¾ -x„øÔõ??9ûÿün^ø®/Z*¢6¼³¼”ý!‚T5kÛÄ úb˜›’ÿƒ‡¾EW…hå¢×qÿºz¿Já§|T ­p¤Ý ŽN*êp;ÀĪ´ÚêqæDO¦é€³‰}Ž}Ê †ö¾ñI·vÀ1èpFqG~ÖîmFÐ8µàÖQ´<¬Ý\à÷FôsLpyFÙ†žÆÿæ ù{Rãš‚ýTEõvmÛ–+ø‚Ôš¤eI¢‡ç0ןzúÒÜz&‡I [’nÏqÿ š ¿,Õ~PXA•Vçë7²…B>rè…hzòÙ8|E.†lÀÜ·ðËø× „€1%ѵat-Éâ£ó·yL€Ñ *CiKð¯ð c•LÿdÉ#”Þ@½ˆ&ñC,žGÒ/q 0O{À²M½’2Wå˜Kï’í•î.+,b§ùÎ…?tÝ §š(“ †"ÊÇ%Á©ƒ/üi:ùBÚÊhÆ´AoF‡óo©@ç- endstream endobj 5 0 obj << /Limits [ (Doc-Start) (page.1) ] /Names [ (Doc-Start) 7 0 R (page.1) 6 0 R] >> endobj 26 0 obj <>stream dvips + GPL Ghostscript 9.22 GNU Astronomy Utilities, Gnuastro, manual, plots 2017-12-22T13:53:17+01:00 2017-12-22T13:53:17+01:00 LaTeX with hyperref package Plots for GNU Astronomy Utilities manual.Mohammad AkhlaghiUsed to make the plots for the manual endstream endobj 2 0 obj <>endobj xref 0 27 0000000000 65535 f 0000001684 00000 n 0000008517 00000 n 0000001625 00000 n 0000001463 00000 n 0000006635 00000 n 0000001834 00000 n 0000001894 00000 n 0000000015 00000 n 0000001443 00000 n 0000001956 00000 n 0000002789 00000 n 0000004406 00000 n 0000002560 00000 n 0000003844 00000 n 0000002311 00000 n 0000003257 00000 n 0000001998 00000 n 0000002030 00000 n 0000003465 00000 n 0000004053 00000 n 0000004643 00000 n 0000002084 00000 n 0000002473 00000 n 0000002703 00000 n 0000003163 00000 n 0000006732 00000 n trailer << /Size 27 /Root 1 0 R /Info 2 0 R /ID [<658ABE77718AFAFA1E2C43AD7B90F435><658ABE77718AFAFA1E2C43AD7B90F435>] >> startxref 8871 %%EOF gnuastro-0.5/doc/gnuastro-figures/sphereandplane.eps0000644000175000017500000021536213217200075017722 00000000000000%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 0 3 220 205 %%HiResBoundingBox: 0.000000 3.500000 220.000000 205.000000 %%Creator: dvips(k) 5.997 Copyright 2017 Radical Eye Software %%Title: ./tikz/all-figure3.dvi %%CreationDate: Fri Dec 22 12:53:16 2017 %%PageOrder: Ascend %%DocumentFonts: CMMI7 CMSY7 CMSY5 %%EndComments % EPSF created by ps2eps 1.68 %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o ./tikz/all-figure3.ps ./tikz/all-figure3.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2017.12.22:1353 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup} ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N /erasepage{}N/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{ count ocount sub{pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def/HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def /pgfH{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfA} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} bind def /pgfV{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfA} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind def} bind def /pgfA{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div pgfheight 9 index 9 index 9 index 14 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfdir stroke 4 -1 roll 7 index add 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll .5 sub } repeat mark 15 1 roll cleartomark exch pop }bind def /pgfR1{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfR} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor fill pop}bind def /pgfR{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 8 index 8 index 8 index 13 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll 4 index add 4 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch pop }bind def /pgfsc{}bind def/pgffc{}bind def/pgfstr{stroke}bind def/pgffill{fill}bind def/pgfeofill{eofill}bind def/pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}bind def/pgfw{setlinewidth}bind def/pgfs{save pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}bind def/pgfr{pgfsd restore}bind def userdict begin/pgfo{pgfsd /pgfx currentpoint /pgfy exch def def @beginspecial}bind def /pgfc{newpath @endspecial pgfpd}bind def /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}bind def/pgfpd{/delta globaldict /pgfdelta get def}bind def /.setopacityalpha where {pop} {/.setopacityalpha{pop}def} ifelse /.pgfsetfillopacityalpha{/pgffoa exch def /pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def}bind def /.pgfsetstrokeopacityalpha{/pgfsoa exch def /pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def}bind def /pgffoa 1 def /pgfsoa 1 def end /pgf1{gsave exec 1.0 pgfw 2.00002 0.0 moveto -6.00006 4.00005 lineto -3.00003 0.0 lineto -6.00006 -4.00005 lineto pgffill grestore} bind def /pgf2{gsave exec 1.0 pgfw 0.8 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.00003 4.00005 moveto -2.75002 2.50002 0.0 0.24998 0.75 0.0 curveto 0.0 -0.24998 -2.75002 -2.50002 -3.00003 -4.00005 curveto pgfstr grestore} bind def /pgf3{gsave exec 1.0 pgfw [ ] 0.0 setdash 0.0 -5.00005 moveto 0.0 5.00005 lineto pgfstr grestore} bind def /pgf4{gsave exec 1.0 pgfw [ ] 0.0 setdash -3.00003 -5.00005 moveto 0.0 -5.00005 lineto 0.0 5.00005 lineto -3.00003 5.00005 lineto pgfstr grestore} bind def /pgf5{gsave exec 1.0 pgfw [ ] 0.0 setdash -2.00002 -5.00005 moveto 1.0 -3.00003 1.0 3.00003 -2.00002 5.00005 curveto pgfstr grestore} bind def /pgf6{gsave exec 1.0 pgfw [ ] 0.0 setdash -4.50003 -5.00005 moveto 0.49998 0.0 lineto -4.50003 5.00005 lineto pgfstr grestore} bind def /pgf7{gsave exec 1.0 pgfw -2.50002 0.0 translate [ ] 0.0 setdash 3.00003 0.0 moveto 3.00003 1.65689 1.65689 3.00003 0.0 3.00003 curveto -1.65689 3.00003 -3.00003 1.65689 -3.00003 0.0 curveto -3.00003 -1.65689 -1.65689 -3.00003 0.0 -3.00003 curveto 1.65689 -3.00003 3.00003 -1.65689 3.00003 0.0 curveto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def /pgf8{gsave exec 1.0 pgfw [ ] 0.0 setdash 1.0 0.0 moveto -5.00005 3.00003 lineto -11.00012 0.0 lineto -5.00005 -3.00003 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def @fedspecial end %%BeginFont: CMSY5 %!PS-AdobeFont-1.0: CMSY5 003.002 %%Title: CMSY5 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY5. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY5 known{/CMSY5 findfont dup/UniqueID known{dup /UniqueID get 5096646 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY5 def /FontBBox {21 -944 1448 791 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY5.) readonly def /FullName (CMSY5) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /prime put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D77D0DAC26A1FA54 D2471EE9BE33D2E87853491D634A3F05B7672519E09291AC2D08D95BFB80CABC FA89042E94FED8DC9929ECEFAF741D273687B2127F5B80ED7D16F146894841D5 1A80D8085E27114AC35CD5E578760D8982CF4D8587FD3385FE50E21A253A37E2 AB628DF3500FD2C21BCCBC8C0B6AD3AE21DE63AE6586DB06B3FB1966625EBF52 90FEBA873F819AB480FF994D80C01DE1E2F28C665E74FACFF98B2972CCCAD279 96F2EFF1113CDA922985E095249765989A4C6A92A76340DCFA07AFF34AC5E177 09B739A72D0D1EAE1A6164F3AA0DF1651EFED335B68C8465E1A61025235D4A5A C3661B9C0456C35C770242149B3B98A29784BF71030C7DBB2C13958E5CC263AE FEAEB9FBA84E06D772E94A494B60E32AB8FF862E57175DB17F6162DFFED60EF2 D46FB78237E778C7321ED79FAC137945A46B2D90B778DA46308899577BC7844E 3E09303AB2DD1F64D58756DAD62ADE22C62DE6C9BDA77CB12B1FCE3374CFA442 E0CABC7C9AE699CD955077A7268FA0FD3FF5EEDE605990F0DF0078799F5CED44 6ABDB2E7D9214BECB8B2CBCF328F7F5B8F346B55C9BA5C785A252DA59602B6DF 186D23D5D90556EB52D7C0B44E4A9A189C180FA213E12E9838F0B2902779E289 3E2B7DF45A01F36D88C9CB814AE5D41064030D37393DDD7D5974C1A27EBEC064 B0403898996140AB14E6EF1B48D555A1C4DE29AD0C5D284988B92917442D2C61 3B15E55CD91837B0496FEBB51486CEA7DFD9787AEB484BE887111903124340C0 EB034A75292E59CC038E75E1DDB0027407492EEF92D70E0303BD7B2703E131FE BA91B289003B7E5BF85D2E5E130CB37949AEE51EA57FD424402B0BEEDEDEB5C3 E23643F3100312F94C157C98939EA2312B11DE0A683D4018FFBA2864626C9449 0D656EB0C79246A7F5ACDF442A55C9188D8F3FA64A9B6BFACD8F81D7546E0CD4 3C5CC653CE9514306439AA2BD2FF2B965EA69A30331E8D65056D919476867463 97DAFADD16BF9366E95C7C4276093B639541F7AFC9AF745260685D84DD3095D4 1B925540372ABFB68CEF211D65756FE0E99733B5DB40D5A42016E8715208D4B0 7A120EEB34147BD179FAFA94D0880121D1C6B27F94965ECC1A93D1B73AC1B3B7 191B7B3CD4F2E0E52A3893255C4B3F1A70A0ED36DAD262538E02E8A227F6D6A1 8A047A91ED6409F1E0D9B40698C817918AA47B95A082E3394AC42DE93BF9CB28 68E63F3363FDCDB014E89990C50210750E8442D9555B0A796B243AB03190B2BD 57C39F233318B6474F1B3CCE31C21BEF68FF5E3F866789041910B1B11ACEB75F 146BB1A162AEFB268700C2DFBD9752BCF6F136ACAE815C0AA4147AA2CE61D282 1BA716B693E2F713D0653B17C9381DA86E1CFCDD1B1FB9A72ABDA1AB2BCAD30E A4EAB601BE3F8EB95B32DCF5DD114683AA64E14F9A958D16CC6DAC7DC3ED651D 603959B0265FD36F8DA41F3173A708D88C73EEA1533CE48C2AB26B4DB7CFA662 A8A463CC178C31D342EF907B3B44751859F2BD510F1CA93D61AD39E8E5D7785D D465C47F3EDFAC22DC2B5DD93B2F752EB5482E138A0A1E5CD62747E0F524E29C A56E58A6BA543CB3AE051F4D90891B65712B63DB197E60275EAF5975007D09B7 95F916615F97C50D8FDCFB67F1B677DC5139E6F46ABA079AC552F27F507CAE8E E5C04D31ECDD6CF5E8A447846375C1748651245EB9C780D87FFF162AEBCC9E0B 155B318CBF420DF0CFBAA5669C2DBC81B55B5042514B05B7B82FCC827E21462B BC8F8FA96E2CC4441E07E0901EA72495013400453E49B7D243FEF528E4078AB6 49277EE77C81B9167D2EE1961AE265A8C01F7562ECDC47D9FEC391097474EF8E 54A5A7FE6C98A81ED29D42A3D54326219F638C92AF8A087607CA2A2A80CB1183 8571CD40199FBDB9D70AD83979C739F533359FB2DF0AC4AE3A0E9DFE735ADE9D 6E29B3F6DB9A5B11418E9C860EFDBCB0E49BB900BBCC85860100F1FFA5AC07B5 14F37C5AE5E1A35168BC48BA7012A297C7771789302AF44765A6DBCFDD418172 62DF3A4785385CC9D055A9B4FFF373041D9F5E9DA83BC1C5F3265E49BA624B82 F15BC17B135D8723324865A9CCDD2EF3A0F64C17914F9B238C946FBCABD92B30 AF90191996ABF2E4972AA9D0EF7B64AD0126D07714D4059CE032905BDF877D7C 3440C374D7B5D0073E13ECDF3DEF2938EAC1908CC60D0E5EF5F52AE8A1B0BD34 8A454CDA66E7340783A7152CCD74EAAD4112C7D70F3C867E140988BB610CCA20 F1BF5E3DA8097509CAB419E01CA47D449C50EB8FC6DBB75AE2C5312BBCC5CA91 86B221536517CAA6870429B65069FE3CBF3FFFB5631B57597E5C0C3E39199FF6 4DC35B155A759CBFAA96409BAFC7EDFF03D2671F0396641446605843CA4AA36A 15070DE52DDBFF487C5398CF7604DE843F32CAB26A96F8A9DCD03F3DCAA57E47 6F0D36CDA34B96B7F4986275D79A1BC1954D2BC0BE1509709E40FF23B84F8D65 3DE1D1D8A2AD94AE3DE202D62993EC4BC5AF66CE512EFFE7CF39028BCEC1667D 8782111D9D503BFA45E4960E6197D8CB5697B1662BD2D991532074AF5491DDC3 2EC52B4E5AF9B2DAA5D5E4CB644BED25DACC3F445E4C7D58A1E9737F4EC04A79 238E3578311D88EE6D067725C580A146FF150871FAB2B366B5AFE5CE3B386EF2 EFB540348505A1749BB34586851FB2FEDA92ECC395B618911E1D00B427251B05 15B9E42AC1F0F239827B938EAB8CD20FF9705F4D7FB5F5F911CED9EE8FDABE8B 3C3442DC3B716C3686E1B0573EAE3905C3964ACB336FA3C38B17F229EA10F036 ADDE7FA5CFC01FAAD33F75A125F52AD395C7DBD3AB6F2321D7B5B55F0ED237CC 61FA8278FFF9956C64B8ACBE357D4603CC4599BFA198AEC01E4F4AE047754C16 E155C8FD09C996D9B5EECDB243FA48B0CED1F0882103729EAECDDB9523D6BC22 0AA1545814579043F0DDA2D7F015E56C399EA3C644A15BA6B144361449609C40 A4986E00918A7B44BB06E7090F73FFBE4EE3E051121939EAB0349EE84715DE36 FB187C50AFD74C44C25BE4B7037466CD60F211FFD7044245159505196B0E181C 0177F14D0B486CDFB767708C171FE513AAFA2B60665CA55B1E5F9E0304B63666 3BF44EC4F5B7DA58891081F78B37BE8453E86AF3557B97D8B4969CCDE2DFD255 91FB4D9CD41E5F931751BDF7FC8C700C633470064C0BB00FE5745918A69CE430 D86FE46DEC014C019C06621B2EC6C3F196A8A5E1E613AD8B28A9D0B981C11A29 4AD11CD3A46D089F8EF7D8298971A5F9F6F139CA794AB4BF0AAB2D4D428A8E4D B80EC134CC7CD74D3F08E7BC8AC5B1846E1E5DBFA97AE4DB885286C7D06B4CF8 948E889ED85E8703CB97D7AE19E1201EEA205157BEEFAA3E17B8BDDFD01BDB17 691010A662280C279942158F68BD351B235EA4EBE24D54C0055A19A3F230F353 77202A1D7BE371010624CB741D4BA2E690B33FE582D666E9788A3E3348A0E100 2843E0B2FDEE05DF75F4D49DFE2B69BE79E97DA1B3638289395444F1CF6CDAB5 5E6EEBB6F907807B913290C25D8AA546B121EA90DD113588011DBF01B7F88AA9 B9CA9731532478D3BA57786817C1D31D8C51C307D7F500F1B58C2CEC9594E5C4 E5E7239D90C8B5B4A81F95C048272A2C05EF0613463E4094E922F7326815EF3E 6E82D5A36840A76B1BB25185CD66B05FF2D140E0F22CFF73EB3F57732E935BA6 8C64BB6809E1B45089273527834789637621793414B6853A1C301612920E3F91 458D043CC1B6CDA271864FD4CCE585FDF025FAD217F975FC36FAF8B79A6551DE AC3863E25DE972E2A4AD997E77A2C05A1A14152BCFDEAF40072A0AD952A3944B AB12D66ED3C408DD104B8638D67417D2A95A87E226A03C28181047CF5BE58409 7D07D2529BF867BB61ACFD68F817BCA73815F787162614EB926563EE2F8629FA 6BEBC05465458A03C2A8673A3CFF7552855E082A7B5C2D4101A1B96449071485 279C1EC56610507DF786427B4E4D949BDC9127C2802451F3B21D60D5827E5B7D 0A683F4402725547EEBE27C38839876A3B1B7FE0D7107D6E2292631D1B9EFC79 87D05342972EEE2C413568BA971AF56A2D4D89C7C0D0120AD504D444655CFF3C 957D5EF19169401CAAA2C4C144FF87AC7DD3451A63CE796B8F6C600F913F55A5 A74B928AD676ED097740BDA578DA299F42CB7B7334BD2281E403129866031EEA 1219E7F9BBA230D049EEF401CEB412BF7FB58FB2F9B7D1E47F0D774956B803E2 872A7A5A38E5B7EC4A225C73522EFCE6E98E3EDA3BB402BC5BBBA209074BD2A8 C856290D01A092160E8FB0D9EF324776AD39D7016C63A500D0839E670009F4C0 20F033554B6B7CCAB7BF60494431E4F2755E4CD966ADC7A078D434FA59E5E49B 9903F4E722ED169CC3D0FADE874E3141CD47C69BAFA3183BEA4F37B388F4F48B 7D143D4B79CC5E701EEB350447D9600D39A7C03A25B5B8B6A5A7284A8DB4969C CDE2C99C39EC07BD8559A45CB5AF23B849C1826713828F43DF265068950DDADF 3B584B90748657609A89008187BDE4286F95694D01760260274A23A41FA66A78 773902ADDAD18F98F045FF7D20AD20EB685C145D44237EDA272619EA9AB71497 DC8BBE9EEED31EA77C9410FE650C65A6CA71F0E72E7D83BBCC0A59DCEDA6399D 64A8F4865811A637838445D84D97204CA7A918DD476471A598D7536276C0F0D1 F0A88D8BCCA56409342C1FF678CFF90FC7B287C36CE682E1B200B54B2CCB12DB D1DC9BB4E1CDE2B9B6BD4B80DC226E10FCF20A9E7878A16EDFF37FB874E4868B A9F1C452EAA7126E81763A2DE2B502132046322BE26140F04FEB0E7167920679 FE8618E1AC5C03360AD3D8B5E913E1CF0C1BE9E446DFB050C3978165838278DD 23D17DFDC85DC7B168F173D0945D110976084CB27B6F8AB2D22410DB05BD345D E4E38CC7EDCBAE36CCBAC590DA5C12D969D51B847A1460F4FAEE7D648818D26F 20FFE485D842C2088258F4F0B1FDCA46A7110645C25E3A31C4E6986C220985A5 DECCA30BAA3A4B5CE0152B8A9D68B1FD67F21050A87BDAE6B665036B9C73953A 11B16AA3285456220D09A03DCD8402C06A2BB18717B1AEA7594F748817176E12 87E685FE70E28C0382EAE8948A6E9FC2F46E2B70DAB208611DFD5A5D97D39CCA 8F9AD9A171DF53CAA6E3E5AE87257561BE15E3BB21779397A30AD4B22A1A1EBA 4B7235F59EEEC1FAB7294D521EC1E36723A4D7BA007DA4239C05F0E6DE546D5C 7A58CCD00F6AC96C20B7182CCCE3E5937D7A64F7CCD52A107BB8092D5F95A8A0 589B2DC542511DC89A0EEEF23E711C7444BDF95F64CF486F158CA162138A36DF 5400A5D03AE62A945373E95840F6D6C7BCCC4FE65382584A4DB36D23FBA6562E 1F3AFCDEF27AED61245EF880426B14B3DB5D9731039FB98F2F51094CD7D5EC78 1F8B03F07064CED40D139BD04C868B1E51A994731EDBA98E7D678A07F7AF6E56 92586848C58ABFEF378F5C1B4C3E20BA860BC7310B9AC48F2143B5495F9B3A35 85C9AD5AFEB23DF6376EE78BCCE054C8FAA925965E38EEA6F68CE1B5329D9DD4 DAB3F3342C6E6D9E0C70E63989DE8DD2D3C4C671233888ABF56C58F69D29A742 B5AF39EBF1092C2C4A906B872310DE0E83372B1C7F6E295D8DFFEFF960DC0F4D 83D7878BD8918B9BDFA17889D52AAF362B6162C07810672E23F66F8CF3BDBD6F 0E016C4FBC8CBAA796057A6B9BDE3233909694110279F81259A5E628FBDF6159 CA0CD6997EBD34C3038A02FA4B422A98AAF4297B998685D7080EAEBC22E27900 8B0178A75E5E52363A2E56507B3E44A6F9A9DD81886317A07B4823558D3690C9 8C722915FEFFED7F6CFF4E94DA744562835E29C97333CFE50D49A5EDB886F4D5 279DD9CD35C15656F9329CA06A0CE1BD5986784A910EC3DC7AB1A068C8ED4829 DDBC83091AAF21092234F614A6CA2C4A854B5049B5622BEBBA68AFC0AF9C6686 74555347CD055BB13B5CD7B5B6954A5794AFCFAF9AAA3682C7333564660E7C1A 8FB3DACF1ABACC3D68C26D07060C7D5B9AE9C9377A771C3BCD317F0ECE3CED11 C0438A29708D99A1F3C02E67AA1D7BB57AA7D8C64A2028349BDDD4BF6DB3139E C1BB6D7D906699484EE2A5D83296BEE09644B62EB10658E06E4176C1E5E7BC4F 36F3454F2DE69F0C5B51FD5874F67287294399923B19A40CBCA4B580BCDA347A 9AFB7AE64C8E9070D5586086E6F42EDB8C0E9729649CDAF7C0337BE5E670DB9B D5C038262B65603C1CB1BD00D4ECE2BDAE5B77A8A129DDD79DC7D080AA89B7D7 439A03568C2C826EF23C2ED7160B2F8F14C05F444E364DDE247748541CE7E265 1414B5A15E7152C6E9056B0CD43421D4AA5EBF1EC2CC70516F920F08B0CDC38C DF480EEAF04D7F12638C9CF8DC4F827DB07256F4432345FCDA86CFCB637D04D8 931A81D2DC47674AB435738871A65422D3FD46DFAE9049F27DF0DE33A0E3207F A6832153135BBE5A283CDFF46ABC74C78B3320EAB1E881E59E07C3134F3830B0 8216AAD3995D3F8F6CC988C73B2B7A5B79E81C6E8377FFBDAB29B4CB6317B118 84A437E14B0B213BE7ED610E9469405AB950965B2CFBD4CF0B3415BC9638771D C2D8265D4FF0018FCD3851E645A82C179FB4995A337C0A854999E0D91EE8C98A A9EB781A0DEAFAE1D666D2F5813BB2E79C232E5C96C686D414921DCF8EAD4C7D 06F79EF5078C77556346283940EAEE347B06F756A800FEB7656DC02597A674DB 6F8BAC8751BA046D7040B5BA0AC766522FF9657F71C7C89DC93E92000A00120F 301DE3ADB5D7D62B57E0824B9BBED388A5CF1B39B034AE2E44BE27CC0F5F0223 2A219166697692167403DC2083384A698551FBE48BEC89629820596FD569543E 75174901415C56DCBCA012694D671655AA84A8D8307B34066F1AC149C8B4BE3F 578F57A39B93DC454580C44B12D6D1BC653CCEACE809E5F3F7406B9F4A868D68 ED4C5C23D7B2497668D718621A94AF4938A16FDACFC6E3B216BB615324375050 24A7466E820435B11E93E91F673D609932BE884AA1CDB9D433A40D189A668498 A1B708DA358F56A1F2CE297C61D9AC19ABF79539914749E5DEE0FD0DC998F4D8 1A4CD93D0A06E68CC764308BCE69D4D53FB2F0AB742D7E9618321EE87EB1DEBF 14561A916C8D58B9C6AFE80D586F5FCAC3C6489038178E77B515108E48C7AF9A AC9C3F93598A28CD03864C6A65659E8E6C782F50ECFBE2C27678ABF0978877FF C685386DF9D9D8F51EB5AA618D2B3F63FC6A0D6107469DA479D540447D785235 2FBD6C4054C30D02DF3D2732031297F53AFC937F6CEEE01B2EF34D59FD0EBD21 854C5CAD32C59F6D8F843795472ABE1F73107C0F5A5B9274CFF2346E7627355D 5E7B3B3451C89DF5572F4E9BDCAF526425B34D71875B5109EE341F55C551DA50 31E2EC3BCB7A79CA3F737D3CC23200160C76E29B9A5740BCFA0355AFE7930076 1F621C801268E18B83A108068B8DB4ACF7079069AD73E37ACB779490900CB770 326BA14A6CB1E7FF537AB11F432809968CC441F418AD1A36075D948D487C55B3 C6FC12080681BC9685764E9348B28A29E6FA025EBE0C175AAA6CD60CE6E2417D FAE5E146264FDFFE499FF7B6F04466BF3406D2AF6DE542862EB51614000D9B0F 0C630C2955964D0D808C8C65211DA05FF14547308FADEAD9A907B1944DBCAAE4 DAE093FAF4AE1AC91793F025C0F0C1E74DE7817154052436A369CF7F52E05841 5778334C75C7ADDF2B7C1D996C18E65366EC4F8F085AF9DE24D54FF213C73716 0C383C2741EC725E1FD07F83ED9BED3CEBA6BBF54C5CAC897D17E19F62A11AA9 B3D13D0649DE56955AF9924057555D8DD002A3E510703A9742F8C5D2AF2F1B19 F52F38F6EC4AB6CB0234AF158FB8F0089FE5FA699473609E4DFC2A90705A8512 5861B1347D37480ECEA70DF671DBE8696C5957818BA618D1AC24C441B47F0352 E7F937E5902B0FC5270C5F787FCE8ABF7119F741B36E5F9B70B1DD2CBC5FA90D F3B40316B2097211A07DE9CF2DC319BAFF663638F729648AF7AFD39B5C9CC5BA 49A6FEA0CF977DBB7D1B2CDEF5CB6F745DE93CB22D86E47337CD0C6E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMSY7 %!PS-AdobeFont-1.0: CMSY7 003.002 %%Title: CMSY7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY7 known{/CMSY7 findfont dup/UniqueID known{dup /UniqueID get 5096648 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY7 def /FontBBox {-15 -951 1251 782 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY7.) readonly def /FullName (CMSY7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D9DAFF1B3EA76067 C5493B69F73B89C8B61804A34FCEC826343337CCDFFCE17BF343EA8034BF95AA 14C56862C2C052569AFB236E1F1795F05150C8F28DFEF6BF4BCBACB678D00036 30EE84FEB44B1A8438185EB45654E6853C1159B073E54292D135F0961A64E8A5 AAE49C4BA9C44156C123426212120F99F3E8B7425752A5FE384AAEF755A8464B 51F015F9E2967477D57B22627D75CEF8AAAF0AEBD504EB46D0289DFC8D86C972 F042BD88A90A53613DD93D8A7A8460E63D85F6C15C000C0AAEE4BD5130B6E668 8C9B3F3FFD804745DA1D5EC0AB85C96E1724FA67F9324C59275415182AB48D57 9722DCF602396AD4B5C075A5A89A5D005C9FE11273E5FBDDD1800F11BBDF6AEC 6711C5633A73AC5DF038BA521AC492E138F7FFC7C5438FFD32FEAA1128C66E83 0D3AA40665F05E62D7EF00B1B0596162C402A34B6BAE6300D43F3DFCC84860F5 C0F0F1CE28FC60642BBFE9BC9102E80146774CDC88F9C250DE762D24A3484BCD 1D26B6D9FE981CA5AAB2A4BEDC528115043DC18D7105735D7528C2C5DD89A812 75B5D7B2E5A586FBB0C061E708F92C1552F64A296490BD0F20243986A4707FF9 8AB3C917B8DB92F19DCA6B9D4A1DB57515E51DD85D5C9D2CAF7A036AA3F9E9B1 5B5E099CC05A9126AB274C17D75CB4FAF78052366D2F21EDAADF84B22A2D645A 3E65C4BC0F540B5D9609D88DD0E4CBEEF87C16447D43A5F98528FD45ADD10DE6 41AEC411FD6929308F0E4F48A8D9C9EE386E920D41C1CC98A52073011DF5BD28 5683F280B5CF7F27DC50930C81D344FF5A8A9258A207D2531AC21A735B14155B C22C752DD22AA33C52D6D4D053B3E46FD4C9129068DFF52695A3A9184D04E8EC 93696A3FEC3AEB3814D9015EC14C22EC3ABD5070E8C28A3B42F5596D948212B4 AFB9978A0A361135C9E18CBDC98E0D1E8BDC17E25DDB3D52E86127E5AAECC55D FEE61693190E378978EF1BBD4D1AF005D511C7607CCFA4BCBD3EC427CAD82809 B725B25AE8A03EE88F80A7732A571A2317E0B6A0D072EE8CE2EB9E033CDCC899 B64CF4FA1C708A885442062F08D3D8DAF44C066EE278714D1486EB709D327865 A483F62709E89D08291F044325208EBA758DD459481334F5D9AE3BB61B3020F2 A4538CFC2C94BE84C920BE80806FDCEE394230730E049333A7E16509207514FD 695B5E0AEA9E4A9737311AA0B33B15F6769FF865D1ACB63DC6201C3F1062A3FD 1B446C1857460745917A36289DD57C94FE6240F4A40FBDFC10E91B91B79029D9 9F1B9C74E8E5AA011A0ECBEC660230AD5929F01D0325D15FDC0040406F124021 02AE176F4C98BAC1706F03C2B5B40F325A50CA4683B2BB4605E68E72D0CBDC2D 96B3BBCDD01201B650A7E7744D58D1E36D81FBF72E0A875FF29B4C109A1950FC 9621B18D58806392EEE9841794DFD39E3C4E20D45384FE07F9D445F143B922D1 AB350AA6DFC51FCF767B141A392D6A8B633AACBCEC9F56A0CF40AB08020EE63E 08CC0BE01B40E86388A65F5869F2F4D022DD4B912031CB8CEDEDFC2473772569 5B28F66AB74CD7902A0061AA3547D13C7F0C6EEEA7B0BD316694A94E4D672520 EA044AB28D8D01076C486CE456EDA1811F7ACA75D27473080D27D3E681E35FC6 447046120C6CC4C17674F0F051570A79DCA74848F3F300B58B19018430D99858 CA5504084D6BB74CFDB635B6866974A9AF05DF201C69352B2663B0623E7828B9 5EC5FFA8D8F10A7C28000F8C679B180067D5481D6315BF1C4194EB171C8F3CE2 4CE319975B9E948D907F9F7EEAF07089844391555F329E331D52FF114668B8A4 80704B3C6AC0CCAA2F5D043CE44E65EDA89A0CA854CFDCB11D549B7FA72EDB90 D35353C34A771B1FAF96F83FCA5258AAB65384BAFFCE448690C1432A1F749C20 5817205185F973FA098BA856584753E75EBEBF387FC155202885F5B67117DD7E 70D1CD887183C5573B6FB607D4F6CC9F8B94B09B3F3AEC2EF1E6A320CF6D0112 63046321941D1FB3F2140B59370AA9387E24D579D389A166A10C989497FE9549 34E1AC2E546CC06C5308460DBEF3E1AEEB6CBB0FFDAC458E61DE3391480CF5CD 34A647D4DE15B81131B7D1F9EED4C6837A32E89B0EAAD6A05F5F67518655E5DB 224D4833CEC60D5DBBDB8A03FB1A9730589BB4F0FF56191D17E73B9562E0C356 B188882B36F9505F6F42EB2644FEE125C2A7D12227ABC8ADB924E88B0A9E8DC2 79762523B0B88DBBE6AC7968A46BD9E9F0C3F03F5F64724CA07782195F01F130 30DBE895C212E0EE20162D863F46A674D85232FA0DEE69A8DF019794AF6873AD 9CC2A5EEEF9393313CA519BF95C08ADF7A75B6F53EDCDC39851D20E58B97CA57 A7523717AA1821DEA94C8A9F8B82346B16D92D15AEDC16F0011A45A44B09DE47 08CBA46E8511D0C5CC83F952EEFA4ACFA7F3D7FA5E113EF6B70E5ABA6F1AD3B1 E4D3B15AC6D5C3BC70A3946F411A7D965D6FA9D7B6C6ECE19B2C29A2FF476251 EBF0CF3BF658A1D896323706172746F58B2DE49F8B7E431E20304A42694CCF73 11C4E9E96260CC442E2938A1E27EE6744C7CAB01634C8210CE40488B9CBD757C 4277B5E3E43C7560291D945F9128AF1F85924003418F96458ADDC5BB8EC431D5 AC9093D20DEA69B92454613BC1A82DAD4FBF8E56084494D9D2FFABD82A7C9847 171FE36B265B546F3072B0923840E6C6BB12CA53E05A99F0E8FD4F5109782746 7CAB9B35B68050230736AE624B7862D1244C7D9BE4D1CAAE21B123D1E8372377 F1FEF269A9A2EDF02CE0CC8BF92FD7EF09556987B8A3BF6D8C0A663DB6B9742B E9AC61A449106AF1EA7ACAD40AC6F59427CC51865E6A90CF2AEED8D6037BA70E 4ADDAF622CDE877C98C3B2006B4721FC9BA18E30F0752BD4ACE36221F5CD1497 8FEDA5D643BE2EE007970A68E53D85975116E6CC09F0039A09EBAF0CA4B0EED6 A485CC0B69E526033FD1C1190BC5686739CE13D1AE8EBCABC01FCFF26141867C 44ED291196E546369129B9F759FDD7DC21BAF0A528FC34BA9FA8937813953644 C539F9DA4E55E83DB3D6DA309C562DA1330B157957B18F7618544AB738E25F16 F0517CD13C1F11BB8EA056BDC575D77CDC526EF497639DD89C2098660C5C45B2 D7CF715AC5E76847E0D3178360DAC1BAF6ACAEE72453B845B9F86621C166857B 029CEF5AFE29D1EDB4CA3AD7D008B7550A779E0066D7312DD6C7AFE1C0BFFF25 7B062B0DF30032EA2A2FE3CC46C96A3A0BA1888D1D2B05424A59ABE3EE928ED8 B67F507EFA78AE128F58B54634C7F534B3D0F4AFC23E38FB56EB39CFA425FD37 848545EAD03EDC5A9E796CEFB345F527615C785963F536972EBD9CFC4A6A4A07 5A31A508CA147FBB762ADD198CE36DF86730FCE2B643D1E7DF0BDE800DE7AF89 44A36B04193E44231E08919EE91A8B559646DC4DFAFF0AD891890A0A88FFA8EF B066BCB7AFCA409C51889E7FEB33F19A3CB1268BD0EA74AF29C1401BABD16F87 ACF7DD65A8513DA9995C5092C36A774BC4260113360D29AF7ADF5D22B5B58E7E A9BEFC33B9A91D2C397B27A81087376CB623318A8362C3FA9CBE3026675723C2 E711910DDB328E0EE3FCE219F44FE528B70E58B8E6CDB4AAB48237DD933D9639 E9D4F9EADAA8D46537D964D75C27F210B0C2473CB60D65F61BBD91ADE01576BF 77C49E31936138B0FBA066BE910DE1B1F0E4FFB5E81038E8656ABFF08DFD923E 6BA2AFEDCE6998BBF7045393C34811501586A4846E5B942C8E99D4C481D3AE60 2796ADBB5242D59F1116EBB828014BD903EF58B223DFD18BFBAAE4D348876B06 CAC10B7AF0DC270E6702A3F75D4DCEF872F2CDB9470AC9A1DC1ABCB55636D26F 9CB6BF27A0DAEB1F62AFEC12F55F78C9B59AC6DA9DB4B45444B0C582DB4DB8A4 B31EF4AFB77988E92FC0B257374B4408406490D9AFCC495316D6C08BEC9A76C7 12371E14417711EF802FB7151B3F6A2580C97527C9C3A0FAAB8D62FD992AA18F EBEB36F7910186CD5F70A55DFE932757C299D9D2289796769A00A0C6ABD18F82 E0D4E95D6477E67B4C012DBBD098FE20E2F15C412DD2AD5471A65EACE05B3A1A 0C9C430BAEF4887F2CCE668116B87FFD9DAB4B9B3605CD26E6B12488058AFA30 8843791A95BB322DF5C47387F3EC72343855D6B23D72144EB5EB5157B8B238FD 6C71DDDA64C9539F66A7DD569FFF43DBE4A8F0608A3CBD354DD9BAB5E3C756DD 92C3C1B3E169D86A2230299432488BC04A87E08A80809F9968676DF9157B1C91 27C664ABCCBA9997FAD8966F766B325086899D1FE44581FE07C97688B3E15B0C 234A22646C32BB965B9BFD2CD34854D1488AAF021E169BF9CA9665CF040E25A8 16156C80A2F47397CD370AAEDA731E0D14FBEE1E51A17DB972D96DBCCE33F937 5CDBF1A650BF1D3536BA4CB7A1CACFD5CB457E2368A660A62AC26E64A631B2BA 6B08EBE42E02D9B1B2E95BF9F0A6B59C96A122968FD46A4D17BA3D018CCBA0F9 80BA3C1E6C683111AFF79303CF64F1D2CCBD7571C6E09DD9B27B8E101BE219F0 E075880A0E367885AC94143E777DAE455B990383100EADF786300602C2CE28F2 4F44662FDF03BD39A5181912D8F1243C36FF88882CFC4B34C1D4EBBC01D96A7D 9CE5303042D1B21042E4FEAA455F22A01333FCAD7E4AACA5D3A5386331985F6B 9B247EC6310BB07507321BEF3E4ECFC3B915AAA6E029B3999644C987640863B0 5DCF58CE479497AFAD1208FEFD1796E74467E9F7867C313A3412E6923F4C9144 C69EFA17965056DF043DB465BF2F1E191706D3AAB47E6AD5C9767E4A73B29F2D E2E579D0262237568F82B360ADB6D0219B7535EFD02DD0688CDD23D84FC4F308 5D2D0010B1A9F4F0321A00C154672D21708B66B91ADCF98BAC7A2F94848E9A4E 86CC82EDD0399BD9F13E43359E71F80086B9B0C3B6D08831D4479ED83E7892C4 90C477BD1F06DFEBBF60F26516EECDEFE4787EEA8683754F2B257D0BAA607DBA 35EC6D1618C2FDF3881827F92D793ECF152D761F2423A96210F582DC9B90120F 26A33025414716A5E6F56D712E31BABE5047EC4855B767AC63D793995C9E074B 6E35C7E5255FBF4C3F17E7AD7B2A6C5F7459794FC94306B581536910F244BF5A 3158E821CE75F4B0565EBE985DF24DAA92F9C1D848EEC6B88E21FB6C51125872 1752F7352291960E5BD36F78AABBCF6DAA4D07AF56E4B6058AAB13D41BCDAA14 C0D63C6807FCD0E2B4B9CC892F224843173A75DC53A8F0FA396959C2E2CFE3F5 9B1C8B62797F34E7A0BFCF0787C73FEF98442234A617CF161829498035D30B29 ADFEAABD0B496E8A2E764D22DB7737F950FC5982F1C5F4FD414C1B0202F40FBA 62C81B8F0E836CD73D79366FD62388B437B81FC673442EE34BF27454F72A08F3 389E60CE28A050601A42FB4491C60DC02EC008E6B9DD2495522BBEC7293E2923 120584E88412DA7137397B41A28706B1CC6BB0C80709A2A4BA79822D245757A4 3EE454198942ED2316FAEB981F7615E642167620EBDDC5B271E273216EB119C6 4F2F0412F0BA6E3BA396217597575C6739194E1F839232FF088FDDFD3695A5CB 9A0E220389938596D8BDB183138E1F73F64512E4FAB5E1328F9B42364E3113B8 004BE2CA0B074EE271BBE0260D31CE555D535C16EBB528747EBAFFF253E659DA 3A377CBE0B296276AACF0294CF90FDAADB4EAD5E2F600E5B2A018DEFB86FF61C 84296480A425687CCE37D671472537E897AFD4B8C6A6175E1ADDF9AD24DFC5C3 A73E18AC2D9B28BDA2F17D51DB3521945850DAF0EE48B0FAC271544C1B4F3B2D 53BFC8DE32BA366FB1FEC0DD6C0B1FEA374CBE2B96F5B235A1D83A240DB442C7 1460980A3E5B96AE3D5784DE2C2DFFA671E0A856DB2FF4130E5905F3D5338856 C11A468D867D0C6EC585F1AD3E7164B8598BB59973B9A952FAE819F052A6554D EDC342BCCB0525905D1D27ECB9EE43847B69AE116F494CB2DBBAFB2773F1A3E1 C75FBDF8D66FA5AB4005757D631A0D9424FCDA91A1D2AC6FCE7CC7A23E84C65B 3E92BC684F23467DCF8521E0E27CF1441C487EC6E3BCA0AB54BB137E83776009 833D772FD225E88A8BD992FD69819B3BA90BAAD1DDF16E4326190CC4BF9C30F2 AF7CA1FB38E6387D9745FC5E176B248B1581BF7A4CA2FCA8E423DF340EAE29AA 7E07A25FF838F67378F9A6A9A0B404E01E86E64FEF71DD3D540D4711AEB1974D E2E0D485DAFFC74BA6B8E9AFDA245BC8997BB39BB6BD52B496A09C68F7A8E900 8DB3007643416040FCEC85B407EA0A946827771FBBEE49A3DA5542CC5173A31A 0280AB8E922C23C1BDD88D70627EF124633C318E7C9ACBC14AE216BFD41C0B6B 3A0161757913CA1F7B6626963C09936A52E73DD9B3D86DEEE73C0293A646FCF1 21D4C33DFF1671DA7A53E77E20233EDE51571549AACB7968602CD03EE67ACACA B231661CA9DA2BEC5795A83DFAF675E9B052C8BDD51490F7874C91EF5ED2E0A6 BE9CBABB98A950F7E55DDA3823036437C11F614E27DA5BB8BC6D955FFE54B825 0201275C2C49A3908BEF1DB3D87792DDFFED23DE7FD9CFC284F6255C77E54A39 C2FDBCD28F2938E4CC135829AC1867CAA5705674062C9639FEEFBE49D6108091 7C58585B80464F7E69966D7933C7019BF336B88B9E0E7073A85EAF297B71B303 31EEE9121347A482D28CCE942AF53E94F88A97EF2F1860A92CE29A14495D67B7 D37E207D42F3891E0423F5BCFFCAAC057FEC683696ED6FEEFA65C8FB6F1312C5 24A1130192B4179F3B08DA1C951D988894E7FE7CFC28C56992A1CA82BF8BDBDA E021F16E630FF67201BA4DF5F3F4D6AA65B8347FC1575C142C6C1868E8472BD2 CF191137AE1B36F32FD84DCAD50644AD55EBA2694C93BDF984A5C9E7C92B73A0 26769F00831537266FD2E711AB3F8AFC5F3FDA3C9E6439FFC48C3D1B5527FC56 1FEDE991E66E8465C0E395EAD0A22A2FDC001E449AB9C5E0EF187A1DE9B74696 BEB6A525DBF3A60DA2FBF1579150DEE1C5D1B6F55FF2708CE23289803CE123BD C81E25DB96551A13AD713D5C7BFDD3F2E1D5C12463A195442B51909CC1724E50 A1F6F4EADB3B7355908F36F88521F333C4E7C70B094209D1F883B961DFAC32BC 8C5A2CAF77CA5E6AAB714CC0AF2B42FFF6F73301FC71AFFA9B33A2153F55C2DB C1C111874DEC37CB746BEC9A3A9A37A2DD098CE7C66B0FE38460ACD77A47D53C 1550F857FFB733B5A8D02FB56790A09190B29CCB4F4A3058B1C82F0CC5E1B2EB 2F8E06F2DE531E1EB81326A8EF0F82843A4AC59D267EEE45730895752820BA93 A129C22A78C1AB28BCF67AD5DF372FECC9EE6719A02E499FD5CA866688E86089 7EE8E5912087E0C4588DE38428114785E0CFEDB1E2EE24CC067D107DFDF1E2BD B1C4F9C6B740F3DEA0BD315581004E851ED5A9F66C4F9E95DE97D355DB06F482 A43B565F1255A85710B15A281E2F034B1C23FEE6CDF3A043780CB6AB18A016F1 9EAFE545CA5A5B5AAE2459D69D2151E99D029FB5C1649B9DA784BFDF7D177385 4D8B16B9922D149FFF6B4F99311D52BEC9A9FC098E7192180DBB38767DA9B9C6 E8CFC98615219EF3AD4A8157D14C72BA3F91C8B78381383E0BCA1A5319749E08 D67D1208C693A6640D1BD6B9285AC0D3110CBF8F7747AD12585141C3248D0BB5 BDE892F91A4B3291F21F30294693518E4629A3ADD7C8640E424FF615602C603E 1E14DCB3B17D34C090BEAD2A523E260A599522329B698729A635CFB15BE7E79E 6A34DAC7C3ED57340821A4E7A0C7F88F64BAA69BB80DFA8B659F4756878E3044 E1DB7EE4FE60074AF97818B3D36CF51110191B4E10655F52CC5D11F56517CFF9 04BA2676F4147DC8192C98C555B001D54301853030B2CF0C068ABE831158B1A3 F30593ABD51F5996CE493E0622323FE93B292844521051C1D3799C07DC879EE7 9D047DE1C7127E2DC6F94E30C34FF87FA03DB3A3D597697C133CFC5A9448E067 51777DCFEC80352A92D9DEC0A2F40580A0242C063CD1086D38FF5C6FA1BDB0A5 3EDB5499AA2322CC73A38FC826DC202679AF4A7B571509B715CB8BD1D0C5D1E5 9F5B2D6DF5E9 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI7 %!PS-AdobeFont-1.0: CMMI7 003.002 %%Title: CMMI7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI7 known{/CMMI7 findfont dup/UniqueID known{dup /UniqueID get 5087382 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI7 def /FontBBox {-1 -250 1171 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI7.) readonly def /FullName (CMMI7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 18 /theta put dup 30 /phi put dup 65 /A put dup 79 /O put dup 80 /P put dup 82 /R put dup 108 /l put dup 114 /r put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBBAAB71645535A2B 6F0F22458E1429F4A67307E01F0BCF6F337E0E2AD89658D880B04C26306F8179 C8121B958459B923AC3B05B594D8AB95F75870019130442FD29578D44F5690BC 7281357A5041C8A809A59D0DEE108E2A07D406656BC74A9F3317CB887E712318 46B2ECAA341F8692ACC2D14ABABDFBCAC6F35858355F1D3228B0223EC73AC56F 3C987464DB829F243E304F4C59CDE3EF6EB53A4EF9BA91510CB89A3407261F58 A2AE66880BA98FC1EF546112892494C85A2C39F9DCCAC5766725894A7AA148E9 42360AE64BF3A4F1F9F0A0D0C1AAFDC4D50C52233AA595B7D0CE557D4A010D86 6E6B76A7E9523E8A6633DA9348BC3F59302F72F492A30782AE7EF220516893D3 DE836CDE311DED9262AF01C506040541EE84AAC539B404B23033EF56D4BCE6BE B05F79CD633FE75C6728114D2749E39FD7454050F67763AB636377BA8E1867C3 996C7D7D4A4A02BC49D1AD7FF174C1F49F1F205BC9D5AE42BCB02CF8554E8F5A D1876C9285B6CCD7B8C165F75843B0AA11D8462B57077AFE75BAD086E9D9F91E 30ACFF91776132F3CACAD1CA5E08B17B36A0E45ACBAC52393B9AF9089BD821D9 CD5A9CD9BECA59F7445D63DECC1B4502D299DB85B6E2EE7C69A1DAB91E22A3A5 89B524FA20AF6005E7A586B90A2C6E5A93C9EFA4ABEF5F7E4C7B81363FE8D2B3 0AD637FA863DE787581ADD7CBE463F7866C40F4E280260ED0E9C8453E5C7E668 FFF058B9742DD3F131C264F8FA102CD0DA05F3114D13D34D422799181453FE23 2FC6EFB01BE420C930B879D671F3DFB036197874725220644A5A52DFB467BB75 8089E4F40CE9401777B9FE1D0AEE02E782A6EB2A185A454AE9394094CDFE7CFA C03C23A78EAF242E4F811E4C83B59EF4DC5ACE4AD37B41616B46C263358710B2 6137314545CA6CE89119B42A3518EC85C68DC07D26839C68B1FF55C4A9CD518B A1FB32F9C475BB6110839FCCB94156E7B3648F27245A00D2966FC4DDE3996BFA F463A663CB6935B596B1582ED0ABBC648AAA8A86068BF0038001C753C8BAFA0D 2058041DFA720B528E2D4B16196DB1CF30C779D3F4800FE662D5B60B208341F2 A66EFCB8448C2FCD12DF0DD899911A8BD96C9B670054D328790E5D388518B146 8CE92E368EB1DB3CAAFCA4834CC9D9D9DCC80FB1F34F39DACDE643052C977A7E A95C5FA8DFED9B4DCE769E4E46256D6DA8FB18FD7FA4E4CED5D486803538F3B4 6D3F5B3C03184F5C26C66DBB4C724918EBB6A89C4602E4EDDA81EEE2BD18B683 FDB459F2CE0A9CED23DC208EAA8BEDB304B00E093DEE926A7B32FDB2EC70DD85 94B9137856DDDABB402B2C76DBA87149051ADC6007018EBDD571BE1D092EBD95 76D4E063AD7D5F62E6C26EDB88D38678F2806A1F4900B0ABC4ED034A818119A4 E618F1A902315BC98F26775E59555A3DCEA1D0F8B20A9084920ECBE3F7F245AC 1182A40B518B194669D95DE968542BFF80FDC89669BC256C44CB66A2AB8CD7A9 E42C69956CCB6BDE8C09AD22EF3196939B3B84EB23A6E071A36D702909E019FF 058F27562441EB5CAE87A4407F67C4390810BE89BBE867D636468E73677B84C8 5A1228DD7DC8EADA221B1BAD5F43E832F20ADE7ADBFF170AB306F5B711816FD1 39B7882556E30F002977FB88D8B28826A75DE0D20354A2D41F2DA8578376F7DD F27B0F59D4DDDF5790E11E3957491DC74EEB7625CA49FAD90FA47AD8E0BDE824 FF326A84846A47A21B70FA549BEE307F9C6970009F963B49A504F0115777826F 1D81203F655C242FFF15BA97E3BDDFBF435B10E74CE8543C98966223818839B3 6BF3BC63F882B0AD0FDACA8C56A570277952E1D83F18BEDF084D2AC004E2B09D 70DE1740D7D220E92B54D2FD0DDEAF1E08C41FD321A8D474982DD105B23166A7 AA9E0129DC88065B1E0F9382BEB4B4E1DAAE3EA5489BDCA921AD5A8175F2841F 9400478DFA99C5E5553F383882664D73FBDFA29BF32E52C28DCE80DAF4839434 022FA515679DBC13FE98968D2894DF5DD69C49BD23D00F5D858B69D1F220F968 F0700E13873579B3CFB658972098DC61F1DD580105BC27795DB4AF11A871CCD6 2E1B9AF7F0DAAD4CE315379A7B42CECB983DAC5A2B9426B4E5E0A7F7978504C1 DD7E30063AE3CBDFB24EA2BCCDC478AB82084FD30A4793F4707D9F8F9647B413 F8A5C5AC6D5EA0E35628CE1096A434FB8286F4617CB4D0AD30A4A0B255A5A356 25AA5A947FD3C4FA44B4AA80BAB44C48CC1E2C6D0A711365A37A58C3483D07ED 301A83D2650A2E8CBA9EE62FF5C2736EC82C1402959F64527F9B640619F112D9 8E0F4A8A3078C72ACF3F34AD855AA4008C96E30D9E8C414607C34E06E29AC5B9 2EE5DDB823E8C3EEE6A8DE228313D476A7F39B5DFBFBDEDDF7C45C1C88EE6D01 7FB4F7BB2CBBD5DF7F0CBD98DC287FA6940FBFE1B3B136613A3CF16634CA7B90 53D5FD5776515EFF5D37F8FCC62D8BEC8EE2216503D54D6F2032D3C2BF861E15 FD1B45B71576F15852EEA65DD372E911EF4CC18283CD2FF4196A3F1A9D81137F F1820EC604D6C61AF318C6C5AB6DA1EDF305CADEF7CC0183B86D31310A09972C A4BC37D110C77ECCA614D1A281EE1C2040B4A5ECB31A3FC61760F608E44332D1 D2C53C7891B505A3020E9E4915F3618588FCEC80B9ECC5E637D8D0F3C94B1F2A C53FC46CAE0AFAA7E12266C212A73AAE60199752C042BD55A5DF1CD07FBDB830 C83E7832D8554AD9C9CAEEC7CED1DAEE622090897641CF2E5B34A353D83264D4 4687522DB290D3BA927BA315EA5D25B0D7B69350C6C180AB0C322B05E01F7C7D F2F48651567F0C1B49AF3950E43C94D78F7B184BF2946B924BC4279AED28F3A0 17A7D8B235698A516D3FB5DF0B18A422B2410C385E7E9439C6D60917EB3299AD E31471616251FA40C9FA098109BB31A54D9C03B2F12947E4E9252A0851B81C4D F39E7FC44752504B589C3911571B1D3EC3BD1E1807F99CED1DB20270E483A805 CA2A016E7283550D1B1D35C226FAB63F983CED41A4D02A2F228FA9EF065027B3 CC69D6F2E278C0A2D238D3A37154B0D22281F62C61D9182A69657B027BBDED64 11E261E47620602F865221A534C5A32E2BF5B93A187911A146F2E96538B47DBB 7BFA7EF406FE940F4DAD17E6E4B80C4F031D71F65657C2F5C8233EEAC68DE8A7 E1FC3055C122C1795D0C71A0284F89A9BF04837F61C9E08DB42644A490C97D34 A5D3CEE475B8D578205005A0D68AF94AD27C0E855BB8EDB74775690A4EDD6543 BCC10CF13283D6FA8A7CF3FE6C4F96470A11FF0B0160D3F9816B13B0BAE0D8F9 B84C7631063FE658D13D108D6FE24A89799FABA72E6A6D1C943922CBE676C1B6 11A4106ECB4F1A7F8A84B2783C2E6A109C58D63FC0B74D8C8A1CB62D527441AE E656D94B1AA8581B4F07B653ED6486AAE1F8ADB30FA8D8914AF24721C74B0908 D84F2EBB91144ED4BD7EF533F2584048DEE37E17CDE5FBC2992A6F924FEBAF07 B626F988599DECDAB43C931CFECF99FC6EBB72F8E542765C26295902DFF60B7C 7B9ADDB4858BC9D808B7F0909690CF8DFBC59A786D48B891937C31A219842A43 234425B4963062DB4C4E9F534C77F4243408805B5A6B8BBF428632CA4AC03A7A E336DD181CE0CF3E742079E2919EAFABE16A63299771BF276EFA8D85C920F995 5B9D4E8F1ADFCC5C29AA89BF90C186C5DE7679906B2FD4DB279D245D27D08837 D3A8D541FE37415B706EC585C05804108C1D938E543B8B63E275EE85CE9DD843 0A8B9163144B77DA1A552A25D5E77E94F29CF252BE9950F4E627D5F72536B6F3 3278D4A45D10759F16AE42BAE8460865FEE84537F8EC9BF4813570E883B826FD 1ABF3F4E66DB6FEF8366E07BCF290EA67D39C9D81B2A7EA48E0A228FE3D5AA50 1A56CCBF229C9AF2537A8FA70EEF41096ACED34CC7BEECA4EA1F23B39FBC39D8 CCEA93E63F508CBE6722C11467A3D0D5C4C52031DE43C449333E4295104651CE E13B821D7904653346067E971BE0042C571ABF40C3A1079A675FE4264B784D46 1B8FAA4CDE9851C4EBF69ADF51A7B68CC8706C08D13A44909D4C1D78DB0E0B2D 0E0318304B229DD2FDC968027CDFF65722059C62154304D6F9C3F06DE22914EE 928B7D1BF1FC7E74B4D882998D59BC086AA2D4EAD0AE39F6B75B5A3FB9994506 E21731E1A15F0F2D12F88724BA72898197A80FDAC00243A3038871EBD2F2BAB1 C616278BB78490CB86F552CBE5DD0862F3793D72C68AC16AF8E38FE1A523A5FA 9B0428745B1455671CFA1F6BFBCCF9CA23C833113C2948E7A6AEFFF1A83509FF C559BB5EE7F92BB43F7F37A371E661C826F63DD0C1B25E34A8119E71EC82FB66 23C7B126FB6554E7560B1B69F2EDBB742F3B20D1648C151C37A8570CBD330A9E 7592A8607D2D727F3AAA0FF2057DF4E2A4C7D3B658C6CED38824A770420D89E7 F6AD385DBCE9C9A9095CF0042052A67AB804A6675BB9373A99390CBDFB715984 A069DE543E4C6ADD7F1EC7A15392EF834EAB4584679A43443953427DB13E6959 0F2F5061C99C6D00FA5327FDB5330AEDE19A53DE3AE092634DC6AEEAF63A5BED 990F8A117AEB1CA0E7F7DBE02CB3D86465F1613B976D1CF6F3A1E69740A2FDC8 062ACC45EDA6B863B60015F276860FB79C31D28F97A799568E66D0A8757B2C41 E939337B467303041D0F4C59390B2E41E5F298F275DCC699D27C459ED4D5ADBD 02539F00095D7E1872862142B46BE06513D3EB1A406E6BAA64BE795122100F09 C37E5D1834218EC1D11B031C7DFC9F5AB071A8F4DC08203821366959E9191D4B 289682D915AF28CE5858F83338DC51B6B0DD052A181D9133FBA50CF18F70EE65 C33726A0450EBA9D0E0C3662AF6C2121AB7911AA9880D6BB6811D6D7515888E7 199A0E632104059A88C9D85B19BB35EDF4AB95E1515BB2339572928BD5FE8CBD 2D4DAF55DCFE29FBC4C3D56336277BA0C9A889A129F9FA7052AD1420B8705163 1A808EC1284C888D78CEA2B4BAB71AD76289F5F4986008FA9BF328E8537E6C91 E11DBDD8447E1C9ACE18DB0EC3D5742C264C8EFA445C5D16C2930FB43669774F A2CA52144D99EFA8FC427DB4128CD4C036A8C611B087335C780740FAA419D39B 5DD68EA89C95275F9254D947EB3683D0130255269B10C6CFF29EA0BE484C9949 96188FCB747618A8044E2E37DFFD2DB8ABB621B34DC024259340677095B6937A 78EDCF508AC91D4CEFD872AD73F50582DC8807143CEB9F109C84DC5DA30B64E2 E56DE973088A9D32583D6946DB4F3523902FB1781D993B89D5F56D79D5D98CC1 7FEE73FC3A7D1BCCE90179AE450829E228B4DEAD3B2B4C79A400CFF899AB26F9 048B0875EBC871AD23BA96F88CDA8B87FE5809A13889A6AC349ABB25E54ACAA9 C213C5DE2D01BCB9CC0D7BBD384D23AE12E289FF8FDF1F611F5E14D4B20B15A3 42D9B3B37A83A9CA39B5DB6C8316C51B70F211530A56CFE54D63E88169CF5233 D1A7B2388025B3EBD2BEE0716C3A2D589EBC7A42B3DA602AC4E2FD9C9052C922 711E44408DEEA1FE0C9FD50A39AD46D437F61F284A2EFD42EF158EDD71A1486D 4865D6B5E20E60F4F4FC3D646909FF1EE2D7573665E4CD8340A1B232CAC0202C C35BA9BB3D2267C7E78518F6711633F888EBEF72DC750AC2CB362D528CFC8B2E A1AE1C05456F50EED8CAA768DEF47FF85C4322F02D7F9D188C6F285C674EF589 251B0B913339FD701FDB281338D96704ED7ED908BC113B4275A24D058955890B 12CCDD5572D63688426B0E1E9A40D6AAECFA5555C1CF9DBEF8C04CE1E5A63F14 969D39B6DAE8A91F6AF4CD1E2DA89A4661DA34E272B6032C442C031F081F5DF5 858F4620885773D8A2B2F5EB6DDA74C1408DF279900450E4A3E80BA9A9B1295E F24EDC3F6EFD81A741EF74B0202820516C4FB720687BDD915EB2396128C3B262 20E3075DA153D6FD36E1C05B855929DAA4DE694B6F15EF2145C63250B24B031A 4CF0AFDB225E91D99828B83BD90F1702D3906D45872587A3A116B138AD9627CE E778A949C392202823C670FDBC56F1896FFFFBCF52C4B400F67BA36B5FCE44A5 F18EEB8ADFC088C99DFF8E0A593E81A5ACA2E3693005F723C7D3E0AE2BDD3805 8C6007A00542DEB2539709558A88B21003CE4B2C7817AF207ED576B25A41DEA0 FC55A459BEB00ADB01309B35920F04F84B7B64F95AA99EBCB843A06CED900D99 97BEFD7CCB9F4D85876F10160C8D63E2FDE82B7A8D945F37CC9933ABE0FD1D76 268296B1A5AB06B2E814691128771694224781171DC6266BCC290FCE1AB59416 85530368115BABD4F1DE45952918D1945D51EB713C283DAE8EDD559F437CD886 A4B1DA6120D685C284673A3EE489FC1AE4297A3623B339B7D886B6B4B8F9F4A3 7BF85E320A52FDC6323B51879B98A14C33C567BC069D9B44616514EE1BE36F90 EC5FA33E1B6B0A46945D876EF0085E74935DF2560A03321861A752E59742B9FC 5C501FBC64BFB1602459885B63873DC857ED37F8BE1A9C6E9517B9BF5A6161BD DEB6DB0381FFB34A8A96AB4AD48BEC40D4C198ABC599C3758AFF638AA75BBDA4 8545D5F95FA426FB25587301A43E176F6CED7851E815AD907F2443E70740DD2D 4FBD5D978B9B37F59D6DCF0ADD0F90825DD23558FCB858513602C8BC82BFA383 7AA6DCEA4009961D06DF233C5381A7F9541259926446B2F03664BC5978A1B6CD EA6EBC9FE6100A65959513EEE32E69D47B55BAF30A893D77142F943982019C01 715CE29923795EA01C58A798979939B507C5B29A32881877EF7EF0C5CB3DE591 6B9A6C3F3FFA847F396A396F078860B59850BA4CA3115CA2376AEE6B30C05DC1 6F9DB6781ED0F9D45D10E096C33B1B7CD12A9D57C6E49AD833C4B093DC82811F 16B3BD902BE764A1680831EC5A6C1CED84AE0DC0A65678EA5270BF20931E6409 7AA44EACB22CCA11098F8A51096BE83A1ABA56C9EED4195D5CCF24FDAD92E823 C439DAAFBFD652157D728F2754F28304710D3CB33763156D76A259D446647A11 493FAC70DD28063A4CDDA162F72542368E1AC2826C4BFF7109208F66371910C1 068F21779FC39DE03AECF1C9FB2F417930C22791961D801284DCC89B0833B6A8 D63F153ACBFB7B7D547924613BBCCAED37D90BAC5B0264ED31C7B9DA5A2BC620 9B20CA48424D0FF58905BCD6190BF4B5FC6ECCA1BCEF13426920197CAB41C4E6 E82E8EE7BCB23C6BA6F8B58001533B225ED721D6CE3D6E89116EC33CAA6E905A 649F8C6A1AA187A48E20DB864596481976216DB78F0F57543DFAE3CDC0A6FC77 2CAA49442527A5D94DC54BE93C875690CBE52EAA4EDD9F2A511361BC0F0807EE 96AD0D26B62D809E82EC14EDB158EF48A748A6FE0C3A7EE5D4479B35425F35AD 3EC7444F6FA75CEA5011AD571078293448A33C7647611CAEE87974B0A756DAC9 4E1BA78DEE477FA59AD50BF5C52E068A5E044A4A4994D5B24CC5045F768A3C51 D4F65E2A5AFD271A7666C6835E28C60751EE528C0742433165AFBE71562A3016 F59676D56B0B5F7E4984D664BC3ADDAF24B4205752EE21D4B57057A943018466 09C3FA5D2C5BCBFC22A643586BC9E7A965DC34C0A7DBA435961E5BA3FEBC1391 A91DE01179B57D2AC8E9DDC61C8B96E9D3472F7F9428A1180A828D95E5192EF5 C9813BDD6D1B9DE5FAB1CD26CAF49DC6A7DE7CB1086F9A2441C1A3D9374011AF BE3B54977A19F85091138F528B037CD159FEDD9348D5983E04DAB96A634CDEB6 86CEC585677131B992DE482C8FB5537B02D6A483446B245A83A4B83116D297C7 639767A6FC4713C309364EC9DD674E2A22C9AD6EF41B5F88B82CFFD607BD9EBE 0E84DF1261252400FF346C6AFA9D85C9CB0414FA07D6B42738DE1CC7DAC508F4 403E5DA38DF2626F172AA766C6CE38A97B222430CB99E97048161FDDC15F3990 2CF1C59B36FC0E70979C8BC782C74B3050FC04BCE079AD1CDE9D9C44B8742803 0B656EE7599834DBD8FE44B82CADCF5E08CEBDD3A2ABBEA027C6EB47BF8EDEE8 ECE9563561E742EF2EC8FC88ECAF45DF04E975EF2D26AD69BAAEA8AA9C694FB5 C708241EC74F43553344FBC4BF3A7AA92781282F8E9FCCCCDB9F3270972E1976 DE7BA0A5E16E3F62D24D049F5443D296380B940AB22BAF28C6762E3106EAD5A1 00337F3C7C5FA88A1A170E352DF34D8A155CA4C94523A07D4680FC97E0B53CE2 81C1A110584A3A1B1D3E0E642427B47682772C630DA30D579914A70EF0F0129B 62512EC1FB20700A89402A0567633EC5AE41E8B85174C76E9F19E8AE7697AF86 374130E0E71D5FED70736A0CADB909D509707E0DD3E9C38A7153B3AB08206759 76DA9C7F7D288947F3226260736122D8564B7DDC5F156CDA177BDD4A92682368 0D96DE2262129ED8852C06C215C800B32FBA1600085F761A1A42A9FBF8369797 F9851B08183C57D0BE11C8EC6917883A4E3C7732C7129E5E5562BA190FAFD78B 5CD320D1A754B2FA1FF22C1DC28B2BB0C6843C6599B9CF13987166B7F3E46E05 B0E078274621EDE99540FC1880C78791D7BA0AA3D35B274D88F9BD84ABED210F 83D5041C0DF46FA82793FEFC37CB377E812C7CDE37A851AEB4297C8C521F814A CF4186BEF7532360C2C19E048B916FF8EF506E52D6520F565B3CF1A7B0B3131E 0F78EC28FD13BBD791A84A1F887100C212EDD7D59E509249FDC61297D05F22D7 2EAE3C417AA6CE72BD5F0F675AC0FF26D3B9A02A032CC71D0BF18415B890E482 BA74212E23CC37B4F0E32C07270D0B573FFD8D61BFC7922CB09C5D44456E1FC2 ABC9438D465193DCCB18924936485039546B3DC1622AB459B8A7FC250E7351C5 238C5C2EE30C734469EB72C5A5CC40EFEC85AD6FEE1DC3C99619C5E2752EF908 16EC77456C759CC4332AB0843E1147546BFEA68E60E8D4D6C0B3DFF50EB94BCF C102BE892F8F9371C064A8E5C561093547BEC42522CA770D24670FF376D90036 0642CFD178EF5B3D76EE7A92BED678FFE181B949E172ABEA1C7F2B7CE8A8E094 C1CEDAE5133569DD265E8FA142BF3A10D08F6E64DC36C70DCCB5E6AD8717A5CC 188EF38C611F48A393DCB95F091579143B234EF2E871C95FBDC062ACA066B2E4 6BC078E9DDF9D4EB5E18AFEF460EE48A276C9085E66F0E55FD3253F707CAE30B 93142CC0B349B52593F1B7429FFE11F87A7EEF17E935C7DBA2E6C4C529E69FBD 21C43C2A8D43A8337CB453A51196AAE2EDC300CA43E028CBDD16B59413FFEA45 010218E8FDA81030B19556B121C23C7AAC811104F4350E5B7C8148BA0F5EE165 832AB3CC62DF88E088E0F0298116E4241CBA220758F2DCF4546E8C85B4CEE690 A2A970A8335CBA57A95C90B5F90DDFA880EE549768BF7DDFCE1CD097FE44FDFB 8A958C287F3374F2EBC7D97B7022ACCAF90A50A4176898D4F811319D1845635C D2367744BB613B27643FA59B1ABDCB0C4872024931AE9C0FDFABB0C25A48B8AF E69DEC307603A0349BB3DC2E7C23BF0E0C9626B046DD13C6182419FF8869121A 79F455B7DC24C9DB6F3BAA4ECC9DBC5A74361AD93FAECE9F60AE0D9DC90C5F25 6DD404A43AB89CCBDD4AF7B75F153253825127A0CC5A8544EFA3F3DC440E60A6 87BCB79798D7D020E8EFC8FF00E7548F4F4BC1B3516814A3E1D8E354E0746DD9 FE06D557FCE102015A7E10A915DA052A610C920F4689C76E1557D4DE7BE98C6C CA0D7CDF12186E2BC726CDDBA378E6C173895157FBEE9CBF67A5D6440478134F ACBC26A1CFFF5A872F19D9005A24DABC8DC14972618BEB2B044D080B6A9CFDB1 6130688659404D9BFD6BD879C7427ACF106B040B86C5B1341D60AD33D4AE397A A9610279509369F9CC2307A3F405B8F8E7133875BE15705D652884036E096E41 4CF7390FB23489415FCC992D27537FF620AB122B8442B81AF039EBE355F576C2 C35B372127BF856D4E0AA009674D3973F49EB374268D7AB48BB526C55317F40D F765F2EB87985AFDFBC83AA027CBC898799E0557BF8923A3675EF001B65828F3 2AC3ADB2CC8F472989728D3C307F7E1F020A800903A4E956C719962A148A2D7A A8CB92EC95A7BD9B449DAD79DE345CDA8B3736D78F94A8755D3C96B9675DFD48 6CEBF3DB3D048C4169DC74FBBC2887F0B3C934CB4FAD7B286EB4F944AAB033F4 459C415890414094497A789E06CC7AD20DDE22CCF16E939DE40543A52E1E5558 CD49708F42CECD3CE513ED163242C8A1D38091404636B2804B88039667CD2DDE F0D518C351B50F4BDC0D996920E33B5409C3451B5B08F1ABE7D606C37FC2FCDE D22FCDD2EB2556939F2DA3633E8404F9DE3C470D445758C70298B60C834215C6 198359EBA9C191C28703CC7D08D765486AF4279B318016897C599CEB6D7E6CF4 BB83999D3757471DED44FD41BC8105AFD24A996371331AC29E7F13D730589245 80F5070782A0031B5725D1E66A3C3FA4A889DE3E1EF07E686DE607C9F3890FE5 9210C6B7F0979B9EEB1F3D6B9DFD4F2DF03679D7A4591069890795DAE3D2B1CE 80A9F9F2DBDD4818FF719C73E575948744858AF6BD9AB7DA823D7B3D75CEDA00 5A89B366A43C83193EA40CA63F71E0013A1F0D6D7F94E08CB3F07881E8D34E2D D55222AEDD1AAD85AAF25B52EFF07EAD8C3A442FD1B8F053F5D467FD87F83F13 FF451036954F7395DB7F62920E6D82D1A04A7963BE60945D9A77EEAAB37781BE D3688F2AE65DBD57AA81E62D51DF52AF9B6A1FAC0BF5E8DFBB27ECB6F9A585D4 DB16F7CF676B6D86A9E639753D5EB525B693BBA086A5367407B51C43418F8245 409A58EF771078093400935F29676AF3922E3A91CF860C725372EDE1D951E59A E2F7939AF4256117E7A7E89FF4EEFF0432AE8F0F19462FC176E3F39C3548B561 AEBBD97F34DA4F8C22D0D1878C8B6ABACFBCBA2C59DD13A06399E700126BD341 01B362A61B808787BACB398D72C70C64D04323CA07FA1BBFE2B465D3BD1906B5 054DF1C86CF4DAB681D43DFD7FF3C44B5EF663212F933EA1C8CBA1292C8C1E53 00A8ABDE3B7241444EF4B169DC218EBE3632202278203329DEC208E6D72CCDB2 76E8114AB251EAC8E725BDE3A5384D1135234E0589428E51227DC76602E1066D 37DC487A28A083177D5C26B35BD62A31F9573483DC38C5D092CC981A36EF1446 857960A83F0DDA902D29EB6AAD583E6F80C97BF4437521E1E762E349AE05375E F036AF0384E75798F2FE5A3687C5F749E339001AF2EF658EB7F64A2524F760FF EBFF3DFF32EA99BC030FAC5E934867B4C8FD88126F471D46FF6E0FFAFE5C36E9 D94E1041D29C9824DEE6F1F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if TeXDict begin 14717302 13473704 1000 600 600 (./tikz/all-figure3.dvi) @start /Fa 207[18 48[{}1 41.511 /CMSY5 rf /Fb 255[52{}1 58.1154 /CMSY7 rf /Fc 133[32 34 38 5[31 5[21 25[50 1[42 50 13[50 34[40 11[32 18[{}11 58.1154 /CMMI7 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin % dvips-unknown statusdict /setpageparams known { hsize vsize 0 1 statusdict begin { setpageparams } stopped end } { true } ifelse { statusdict /setpage known { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title (Plots for GNU Astronomy Utilities manual.)/Subject (Used to make the plots for the manual)/Creator (LaTeX with hyperref package)/Author (Mohammad Akhlaghi)/Keywords (GNU Astronomy Utilities, Gnuastro, manual, plots) /DOCINFO pdfmark end 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 0 TeXcolorgray -183 -377 a SDict begin H.S end -183 -377 a -183 -377 a SDict begin H.R end -183 -377 a -183 -377 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end -183 -377 a Black 0 TeXcolorgray -600 1107 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end -600 1107 a -600 1107 a SDict begin [ {Catalog}<<>> /PUT pdfmark end -600 1107 a -600 1107 a SDict begin H.S end -600 1107 a -600 1107 a SDict begin 12 H.A end -600 1107 a -600 1107 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end -600 1107 a 138 -304 a 138 -304 a 138 -304 a pgfo save 0 setgray 0.3985 pgfw save restore save save /pgffc{0.9 setgray}def -53.15024 17.71672 moveto 124.01729 17.71672 lineto 88.58377 -17.71675 lineto -88.58376 -17.71675 lineto closepath gsave pgffc pgffill grestore newpath restore save /pgffc{0.6 setgray}def /pgfsc{0 setgray}def 17.71672 -70.867 moveto 66.61516 -42.5201 lineto 17.71672 -53.15024 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath save save [1.0 0.0 0.0 1.0 39.14719 -64.9789 ] concat pgfs 0 setgray 138 -304 a Fc(R)138 -304 y pgfr restore restore save save [1.0 0.0 0.0 1.0 45.68578 -44.31534 ] concat pgfs 0 setgray 138 -304 a Fc(r)138 -304 y pgfr restore restore restore 17.71672 -63.7804 moveto 20.24821 -63.7804 22.58821 -65.13141 23.8539 -67.32368 curveto pgfstr 17.71672 0.0 moveto 17.71672 -53.15024 lineto 17.71672 -70.867 lineto pgfstr save save [1.0 0.0 0.0 1.0 10.10454 -28.07645 ] concat pgfs 0 setgray 138 -304 a Fc(z)138 -304 y pgfr restore restore save save [1.0 0.0 0.0 1.0 -5.78815 -63.97627 ] concat pgfs 0 setgray 138 -304 a Fc(R)16 b Fb(\000)f Fc(z)138 -304 y pgfr restore restore 17.71672 -69.09521 moveto pgfstr save save [1.0 0.0 0.0 1.0 21.23654 -65.5754 ] concat pgfs 0 setgray 138 -304 a Fc(\022)138 -304 y pgfr restore restore save 0.19925 pgfw 42.28412 24.56734 moveto -7.08658 -24.80333 lineto pgfstr save [0.7071 0.70712 -0.70712 0.7071 42.2841 24.56734 ] concat save 0.15938 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.01619 1.35492 moveto -0.93149 0.84682 0.0 0.08467 0.25403 0.0 curveto 0.0 -0.08467 -0.93149 -0.84682 -1.01619 -1.35492 curveto pgfstr restore restore restore 42.5201 24.80333 moveto pgfstr save save [1.0 0.0 0.0 1.0 40.26117 28.32315 ] concat pgfs 0 setgray 138 -304 a Fc(x)138 -304 y pgfr restore restore save 0.19925 pgfw -53.15024 0.0 moveto 123.68353 0.0 lineto pgfstr save [1.0 0.0 0.0 1.0 123.68353 0.0 ] concat save 0.15938 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.01619 1.35492 moveto -0.93149 0.84682 0.0 0.08467 0.25403 0.0 curveto 0.0 -0.08467 -0.93149 -0.84682 -1.01619 -1.35492 curveto pgfstr restore restore restore 124.01727 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 127.5371 -0.82332 ] concat pgfs 0 setgray 138 -304 a Fc(y)138 -304 y pgfr restore restore save 0.19925 pgfw 17.71672 35.43349 moveto 17.71672 -159.11703 lineto pgfstr save [0.0 -1.0 1.0 0.0 17.71672 -159.11703 ] concat save 0.15938 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.01619 1.35492 moveto -0.93149 0.84682 0.0 0.08467 0.25403 0.0 curveto 0.0 -0.08467 -0.93149 -0.84682 -1.01619 -1.35492 curveto pgfstr restore restore restore 17.71672 -159.45078 moveto pgfstr save save [1.0 0.0 0.0 1.0 15.67055 -165.97327 ] concat pgfs 0 setgray 138 -304 a Fc(z)138 -304 y pgfr restore restore 17.71672 -70.867 moveto 88.58374 -70.867 moveto 88.58374 -31.72774 56.856 0.0 17.71672 0.0 curveto -21.42253 0.0 -53.15027 -31.72774 -53.15027 -70.867 curveto -53.15027 -110.00629 -21.42253 -141.73402 17.71672 -141.73402 curveto 56.856 -141.73402 88.58374 -110.00629 88.58374 -70.867 curveto closepath 17.71672 -70.867 moveto pgfstr -53.15024 -70.867 moveto -53.15024 -78.69473 -21.4225 -85.04019 17.71675 -85.04019 curveto 56.85603 -85.04019 88.58377 -78.69473 88.58377 -70.867 curveto pgfstr save [ 2.98883 2.98883 ] 0.0 setdash 88.58376 -70.867 moveto 88.58376 -63.03928 56.85602 -56.69383 17.71674 -56.69383 curveto -21.42252 -56.69383 -53.15025 -63.03928 -53.15025 -70.867 curveto pgfstr restore 17.71672 0.0 moveto 18.77968 0.0 moveto 18.77968 0.58705 18.30379 1.06294 17.71672 1.06294 curveto 17.12967 1.06294 16.65378 0.58705 16.65378 0.0 curveto 16.65378 -0.58705 17.12967 -1.06294 17.71672 -1.06294 curveto 18.30379 -1.06294 18.77968 -0.58705 18.77968 0.0 curveto closepath 17.71672 0.0 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath 17.71672 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 8.20538 3.5198 ] concat pgfs 0 setgray 138 -304 a Fc(A)138 -304 y pgfr restore restore 17.71672 -70.867 moveto 18.77968 -70.867 moveto 18.77968 -70.27995 18.30379 -69.80406 17.71672 -69.80406 curveto 17.12967 -69.80406 16.65378 -70.27995 16.65378 -70.867 curveto 16.65378 -71.45407 17.12967 -71.92996 17.71672 -71.92996 curveto 18.30379 -71.92996 18.77968 -71.45407 18.77968 -70.867 curveto closepath 17.71672 -70.867 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath 17.71672 -70.867 moveto pgfstr save save [1.0 0.0 0.0 1.0 14.57957 -79.15234 ] concat pgfs 0 setgray 138 -304 a Fc(O)138 -304 y pgfr restore restore 23.74036 6.37776 moveto 25.36765 5.4382 26.55592 3.88971 27.04219 2.0747 curveto pgfstr 23.74036 6.37776 moveto pgfstr save save [1.0 0.0 0.0 1.0 27.26018 4.63428 ] concat pgfs 0 setgray 138 -304 a Fc(\036)138 -304 y pgfr restore restore save 0.3985 pgfw 0.5 TeXcolorgray 17.71672 0.0 moveto 44.20993 0.0 66.66272 -26.02473 70.34955 -61.00407 curveto pgfstr 0 TeXcolorgray restore save 0.79701 pgfw 17.71672 0.0 moveto 38.36986 0.0 57.15932 -15.95958 65.88737 -40.917 curveto pgfstr restore 66.61516 -42.5201 moveto 68.38692 -42.5201 moveto 68.38692 -41.54156 67.59367 -40.74834 66.61516 -40.74834 curveto 65.63663 -40.74834 64.8434 -41.54156 64.8434 -42.5201 curveto 64.8434 -43.49861 65.63663 -44.29185 66.61516 -44.29185 curveto 67.59367 -44.29185 68.38692 -43.49861 68.38692 -42.5201 curveto closepath 66.61516 -42.5201 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath 66.61516 -42.5201 moveto pgfstr save save [1.0 0.0 0.0 1.0 63.54279 -50.80544 ] concat pgfs 0 setgray 138 -304 a Fc(P)138 -304 y pgfr restore restore 66.61516 10.63014 moveto 68.03224 10.63014 moveto 68.03224 11.41277 67.39778 12.04723 66.61516 12.04723 curveto 65.83252 12.04723 65.19807 11.41277 65.19807 10.63014 curveto 65.19807 9.84752 65.83252 9.21306 66.61516 9.21306 curveto 67.39778 9.21306 68.03224 9.84752 68.03224 10.63014 curveto closepath 66.61516 10.63014 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath save [ 0.3985 1.99255 ] 0.0 setdash 66.61516 -42.5201 moveto 66.61516 10.63014 lineto pgfstr restore 66.61516 10.63014 moveto pgfstr save save [1.0 0.0 0.0 1.0 70.13498 7.74315 ] concat pgfs 0 setgray 138 -304 a Fc(P)189 -329 y Fa(0)138 -304 y pgfr restore restore 17.71672 0.0 moveto 66.61516 10.63014 lineto pgfstr save save [1.0 0.0 0.0 1.0 45.68578 8.83488 ] concat pgfs 0 setgray 138 -304 a Fc(r)138 -304 y pgfr restore restore save [ 0.3985 1.99255 ] 0.0 setdash 66.61516 10.63014 moveto 27.63808 10.63014 lineto pgfstr restore save [ 0.3985 1.99255 ] 0.0 setdash 66.61516 10.63014 moveto 55.985 0.0 lineto pgfstr restore 50.66965 -31.88991 moveto pgfstr save save [1.0 0.0 0.0 1.0 54.18947 -28.37009 ] concat pgfs 0 setgray 138 -304 a Fc(l)138 -304 y pgfr restore restore restore newpath restore pgfc eop end %%Trailer userdict /end-hook known{end-hook}if %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%EOF gnuastro-0.5/doc/gnuastro-figures/samplingfreq.txt0000644000175000017500000000004613217200075017440 00000000000000../gnuastro-figures//samplingfreq.eps gnuastro-0.5/doc/gnuastro-figures/samplingfreq.png0000644000175000017500000004064713217200075017420 00000000000000‰PNG  IHDRîþÓ—3bKGDÿ‡Ì¿ pHYs––qFþðtIMEá 5cQH‹ xzTXtRaw profile type iccX…—m’d© Eÿ³ /O -Šðþ7àCVwO·Ý3c;+ˆÌz„®îéŸîé|êPIù}VÉ?>õë·¹ÚµŽÚµ×šÇ6VÍöIR¤iÓÜËÈ#wÿÓ™ñ v}ýpç´zþCþÇùKº mÒ¾ùòíꉃe­Ú?ÿ_/êT%BùûóõÍNéReÿñ|÷ïÏáü„ñëŸ?èÏÏÿaèçç‘6ÔÉÌ—«5í0³cè÷Ïÿd~úõÌß?µöò,&ÂûIú›„ÇUጚµ}‡F·ÞRoL"JoË\Æï£üw¦ÓÚþoMÿúùÛôë;úü–%>?Èš±‘‰ oØþyô×qhµåVý]‰DÌå»G¥ˆûßÕÒ÷ÏïæI¬ú9Z›ñ‡f¿ŸXÍÞ÷Öù™WæYÿ>ïc¨öoÈù‰Å?È’übñG¤ò3øÅ#Ã0T.¦Ú+ EKÒ2u“ÛþZÙYôvê,<x7Xó°'ó)yGS}E< Úă‰wÀaÀ0°0°x¸0°ë;$ƒ5Îgo =æ8,:`^¾ü¾ûã5LÃØäåý)ãšÆ0FäRƒ÷ J›ŒËQy±²^p¿`£‹…wÊ;¼.#x\Œ9x[ Ö‚§e m~àbq¾߇ïË÷å;X‹âl ‡†;ãP/ÂB;ÉTap4ª™ÁKv¯ÊCe!Ù«óæjL$Çuad³˜ «or2r}9"è´—þ–7à’Uò£ÚÆ.Ô#rƒwšðNñI/€ããŒ7ß6ÿ»æv†°Ü®çF¶…Âi™úa kçÞ'@HwÇãŽÁ>ú^ ‚wxÚ½§ÜˆÉƒI ÔNÅó £- ÜÇ̃£ 2€ÈÀ«±éqÆ lñƒ4þ8¢TÍÈO„쉬,ºÁžg±“eE8,Yn£Ðàœ¬)+˜Pv×vàŒÈT>íYÙY©1%кy~ .6Õ˜Pë¿‘'U0»ä9VÌ7O8dâî\ `ó?‹æÕ<£^xÆ1Lz6µl“ß Þ¸y¤lìb,X¥äűž- ±8Ò¢lXdh‹…š¬xyæBÝÐņ“¶P´›ºÛLÞû•ß~“A/@°®ì@Á‡gݶ|iöWf×1zÞ_E²O¥¶ò!.‡‰ÈgÂá7ñ¸ÀႾKö.ǺùÚ¦%_Bpï¥,ñ(8ó€T±ŠÝPãÈq_y¥J:Œ+œ_qÙ6nóüè[X(äÄà»|{J™^Ê"Zn¥ÜÉá´PW¥öQªôB锺Z©Î¸ù#ôÊ@× â0˜ö JSJ§ðz7Dz•>wéë@—=!‡RËhtBC ²YìTÆ>…S½j+tEX,âEfÙGy«(Ô ½•A¯aE×-`«hh™Cz™¼œs•¹bç7 ?”ÑLv1NjèžCcÒ˪«,B³T¡£[€F*‹€âxÙm—Í177žì³Êc P|ð­»8ñq÷âø@Z‡*>ú(ÌK+c·H¹xw‰Éµ^.€º×Jh·„ð›ç±£Ä]õC¥ÄžÂ«À<:H²#UàäÐl¿ˆ¦ßʪZ«Ö:F­“Ÿ+j=ÍYÞªpUmÖkóšj‹Ç–Q{?tŽÆíÚÏzÕU“‡0úáŒ@ÉëSsÆÔ×¼U¹“üâ‘v«ªTô8êvêlAólŽœ^í‰-F <¢{*lBñà mÌb£Eú¡ã€DjÝM e«›‰ ¢>jófÕåVÇ …3½ârTêaãsÁ% ¹ÝSÅ38\+5S9 \¾jX©ÁQ"`®6`/ŠoQ½gS@¹“>BT6ßQ¾¥V¥µjÞï™­AÎM£µ=[#e_é‘Z·Ûú™t2­ øyLú3¯mÄ¡845Q‚¿n“kˆEoúDüéÑ6Ko4 mNoÓçkV>I26²ÍÁºÃÌÒžGEY¢qâ¶X®ÕödTm_sŽä·µSk£Z8m0L»(ÒeÓ‹"Á$‰ü”L Yjq+ÊØ¨Ùþ(ò‘¡…BE/¥P*\¯{P%줇®‰êÈa§ísu*ü‘RFC )séÒk=¡¬Ý%6¢¤º‡`M$»SÈ}BFå˜ÓeN†¼h_z:Žô ü7ñÞÞxMýu’Ú}¯¤:³R?F2Ž÷Kpåv ð¥•´ÊIJÇyBa+±ý¨ª@ ¡ƒAa@0*—P§Zäa]ƒ€Þ±JcÙÏ¦ÊæÊAjWi•eƒ.yŒ¡T*žÆ‚SϘ¾‡Á2&á!yYÇbÙZŒcµmŒ‹ÍÆ€ÄüÈ8x{t¦qÜÔ4®ø¸û (/ Õ .¬Î8üË›âX%¢Õ¸ä à³tIC[úKºué×@[E~U„ß” P催‹f…-¨³Ìëò.5b¶Äâ!erô GPÙì¼ßø©â‹k+â~è1Î6¡VåÊ–ë ˆG“€ÓiÇzú–Kn|±¡ô$˜j^8BÙˆõBû×ÝÒÉdCç®Ä&½s©Àì\?i‚t7¡àº>™lu©MÚ† kq±$±49]áwÝÔ¼ª>1äOU¸ßPCúú× ^&Àt0]ãÒeu.»k¾–b¢Q³øD2LG‡4Mªý<¬Ï~)vµéŽ^t+á–õÎd1±8§dp§AÚføwR–i._©ŸÄpîðécðì@]‡5'bÞOrl}3½íÝÒBóYÖL†|@ÚËÐòW,—@9ôT“¢£NÆnŸ2$½FeÓˆƒÍî67ŽÕžð.›…‚iëj¸~¯0dМ9j„¡B†îÙ]´º-‚OhoÏLtŠ´ ôÎ0Y4…Ï@);UE™S€sÅ^´*`Pv^­‰LÚãÁ2Åhf|-DEY›2Û×t_N'x:½Z~ÑŽ‹ì?üâÑ~w;J’®k¥M²ËA°:Šï0}#öërBêÔ¨äÒö˜‹þ ¿Õ6ÄèæÆJ›ò>Üfà£m,†¥÷ÚK—ge»í×ðìCkË  q8-P~”4‚¦’V2_: Q‡–`™@õˆ¤.´ýЭ¾9hè\ýG øhÇçvG?ØËhP¦‹ä°…on±Xrâ(–Ãg‡ø}·Û¦€ÛÌÉ›¶­9‡¡ mq¸-Øþ 7‰8~@DýžqˆÖG,Ž=âp¦ ‹l 1y']gÅ&ö4¿ÜB|.Ú¯œ3p?´<'hbq³A.óæqçºãô7;'Û…».2r{8UÍçsÅ$]øâ$‘6`;=Ø?$R]Ò„\6ñ†Z/}ï=æt ó’×(_8}ô˜‰î{D¡_(ô2„¤X@IÑt¶†{Ï ‘ò’F£9™3­% ³¤X´ò[5È'…2‰ Å¡FnßqÑ”mDúí‘ÈK­Šµ5ÔIDATxÚíͯ4IvÖŸÃ4Œ ž@–GÙ²6xÔÙ’j/ò•,!²T¯ÍΫzW-±«û0ª»bÑê®X°î•%„üQ%¹GBзF6 ÏØø–{dFj#¸9­ñP°ÈȪʬʈ̈¸Ï¯¤îûVeeEdĉqΉ‚-!!s£ö€$XÏ]BÈT¼…tî"B¬éÿRÖ y1¼Ø#›» „ œ*tÊ:!¡!)”ûÚÍ]BˆyD¼AY'$p$Åø3sƒB!f1¦Üåª?OsW– ¡©eÙ–$‡rïóÊ3G“é0¤ÜeÝÁ“w§¢ue)kYÎ]ŠA%O%•T’ŽW'ùõî»:}"UËJ,©¤’g9Ö–d(÷ËÐK‚ÇÊðÑç“É3G“¹y«ËE²DŒ€[ýF„ nÕþ|…Lí¯ÝEí%–uñ+¿c‰ 2Üé·$ˆð¶:ò ÿ½18RìÔ«nÕ–[Üa‡­dêašGmDØ¡[mX  WžÉ Üà^ îÊ÷ê-›"Åïb߯-‰O\“õ£k)÷Cé'Á£døèóÉäyøh")RÄXä}@Ý\û·ùÆ …TáÚ Û£ßc¡ÿŠñxýûúÚ-âÎצǿ‰yIñŒH¿·†ÂZÿà¹ó½WxT@ܧ<.½°>m«OR]½ê +¬ê½á´e±ª?a_ŸÝËzA-š÷‚q²~ô.å~L»ô’àá2|©ÅlÊó¸Ñä¬\ù7_M½¥£Y^Rsæ‚jKÍ wÝîà«Á³ ·ˆó»¨c Ú£û\À|5¢: :l%S{@b½fØ«¬üä !Éÿªj‰2ì‘VÞ÷™†Ø¥¨uU)ý*áQ½­ßÎÚ'bõo$A‚R,q#¶Hp—›îú:ÈŸãép›×fwü|¤ÿ@”àrËê•ø$núÅώâ]Ö%Æu3q`r.ÃrkX‚'–á‹-ÖYžeÙª&3uÛòÉ£I=Ò>ÅŽ ‘n+÷ó}¯uõYr.Ò¡Š“Ýœøfj›$$n̲«{r$A7óY­“uòÞ$Ø€Ú«»2f‚@‘q|=ó-7§žÍ=ö8Z ÈFuÀ®çoÆ +“£–Õk²åÉ·(BaÑ"ë²ÀRÝâU”{hr.æ%xR¾Öbå¹ÝçÞþD'M$F íÈ‘5"¼z§è¨Ü/̃꟰•T–xÄÖ²”…Üãpòݲ %Æa•á‹r(Yá¡Sâ=*±Ê;à5!‹ÊMqò¤È{ @òabÈð°Ô&þ+TM7Ȱ,¦ ²B¾ã÷ù»çÛúÚT‰ Ñ8{ µbv*÷Ðh“õ¥žðVŸ…'÷§2lF‚ç’áË-ÖYžÕ^íZ^-²?Ëh’XÈZÖXàN½¦¿=G¡u{ bl±E¾ÑCoõ8»fQe F‚g(Î>]µ%_®¾jýéâV¸Ë²®{PMšC“û&n–àöq » Ww(Ÿ¾a¾Üb6åyìh‚¥îÏùÆÅkÿÖ÷ãÆ¸Ó6Pö¹_¹ÑsÕHˆÖºæÙAˆºò`´²IU._^ØâÊ^^c¿´n>¤Þ² HN2ÌÔ–|õj[…ÞÇœÝ#F„ <í\§Ü_ÿý™døz‹Ù“ç9FÁ˜LÁ”‰wŽ¹Ð²lËÄ-2I‘ ::=›rïM2ܻŌ´Ñ,£‰¬HåJîþ—ˆÂH³|îêtݦÙoÏW³Y%Yý5ÖØ\ð[¶¶,ÛÒF›åóžÐ§wœ\÷"ûÊÜ2ܯÅL´GW^yß(¯ÆÎyd \‹G•¢î‡D’iÙ¥³­›[–mé RÊ·¤ØÂ€¬Ýrï×døèZ«òÌÑÄ rY7¤ÜÏxtq‘¦vc[ú‚]åN¹÷y噣Éä²n" @ã+½¯ .ÒÔnlK’C¹÷y噣ÉtSî„Bq*wB!$0¨Ü !„À0±ÏBÈLÈ1bìk'À•;!„ø‹¬±W7ê5âü\;Br¨Ü !Ä_Š×o‘ÈbîÂw YžBü¥8œ6ƒ>”Vb­îsö4Ö¿L¨Ü !Ä[ÔkýÇYb‰ 1ˆqp3âœtâ1Tî„â9c…W*“PïJ‚X=ÈF½gâ+ô¹Bˆ×H„5^«= êÀ;‰@sü‹†ÊBwB±ŠÄb3Ì £CåN!Öù0Æ=¦Ê1o—[,ðA„ •;!„XEâ_þGxÄÍs—Äð÷ßøg ¨sn…#„«üí_Jþ9€Í‡›¹KbŽ/ü‹¿÷MüÓ¹KAÚ¡r'„«üÎ7>üϸÇÍa˜åña‚-nþC µ šå !Ä2ìð ëƒØ÷aŒ-^‡2Q *÷€$²š» „¼l>Øã5¬Ë¡$²´^•î>`’[ç¡Y>x$¯⠲ãñŒ„̃¤€Ú}°û0³ü;¹¬ï-Ëú-2@b¤SˆC†Bå8a‹'üylåÕ;!³ “Ï~`U§’õò“é#—R7,h–Yà ;| ÿo°¦ž dŠ u6©ÉúͲΠu®Cå6^å"¨ð.Ï_&$X2¼«eýïNy²;qšåƒ¦~¶³:à0wy!v ¬“c¸r'„«H*Al‚;ªSWî„b—CÏPç8Tî„b•·Œ©=cx܆fyB!$0¨Ü !„À r'„«0 ŽL}î„b—CÏPç8Tî„bÔ‘é¡YžB *wB!$0¨Ü !Ä* ¨#ÓCŸ;!„Ø%ÄÐ3Ô9•;!„X…udzh–'„BƒÊB *wB± êÈôÐçN!v 1ôŒuŽCåN!Va@™šå !„À r'„BƒÊB¬Â€:2=Tî„BH`0 ŽB¬¢vs—ÀB0L0$¸r'„BƒÊB *wB± êÈôP¹B!Á€:B± êÈôpåN!„•;!„Tî„bÔ‘é¡Ï=xd…÷ñYãVes—…øˆ$X A„Wáô ‰°B:±-DY—Àƒ è:Ù`;ÛuRPHø ó…Eùçzî²ð5Cû+hùFZýÝëžõŸHæ®±çr_þÌè‡eùg0²Ž¸ê}s—ÅX"Û½/—ušåƒF"lʬÂ3 ’ Ø Ò%XÏ]3HŠE­~A Q­uV’Ì]C¬«Þ'ô>¬¦é}Tîa³*E@(C3™Ž#5„â;®©q JãXÖƒ˜²œô¾¥Äs—È@"Ôc,ö>*÷€)ýŠ?Ä$²s?ò)zÌkýÿÕÜ,‘+‰[ò:I4æ~~Ñú¤HbÝ2ŸâL ë“ÔŠï…ÐûÊIØ ò¸kíDå2E·ù5ü¾îHa¬»ÈD”«Œ;õ S–¤¶áäRpÀ­V!ÈE!ëỡȺÄ:”îVÝ`wTKŸÉëpP·¸Ķ&~Tî!S bßÇÿÅ€0„ƒLG±6{Ê|dž÷!‰t T¦î¦Q„jg=GÝä²®ìï3(jpè:E¾»…$)­FE¬µ•{°Tƒè™oDÃ<éA¾r:¨ öÚˆíùðZ¥µÿz.éV KÖóòïÕ•" ¨÷©Ìnï£r—£AL=„b¬#RŸ–ŠÐsü^ãêÆa(ÂSY¯×ÔSJ£ü°¯'#o“½ÎCPô>+-Eå.ǃX k2¥Â+LÊA( -ºNÓLz­ÔÍ ëÖêŽ-,E‹Å>oò+',ÇÓeK½Ê=\òSùúŠY¢ÇÂA&E÷”Â_\ª{P©d+¹ÈX¿',u£|U;¿e=÷MŸNXün©¢ìº.*C^;+íDå(ë §ÊÝoá Srª2Š>äsÒeWU­òH‚ئ³Án@$ZÖ«T¦Å¯YTîÖêN'váDä–LÊw,J•{¨Ý¥x•ÃØÜE#ž ÃéjïèáÕc¯{\«GŽÿ“Þ3k„:èVóVJÜÚRþ¶Ó¹5µüÛ†Û†Ê=TŠ8çúÐì¿pÉh0`O²"´ÌÙðªöÚëîo vý°ßW¹EÉëÊ=Ë"_óÔI¤kU«“²8µ¤r•³n„I $ v]z¾Êm0`Wÿ²¨-Ô¯'°±X¨Ë[#S!ÙXš&,e  ùŸ£r’¦9"ü2%µH5vµÏü£yxÍÿå©THT¬ÜÞö]ÖÆ/uÐ6OWîMÓeXœZR¹‡Iã €’LGÓôÐwso“³Êªß3Çj@]“ûd‚ –êô~ð“wýv,6O— {ªñ) •{˜4Ï}šÉd”»-N‡W¿ýž—&,¾ÊE“ðÚÆÒïø>~MÜû¨ÜÃ$zÏW ~ ™Ž¢NÞAžÔ©ÜdÒ„ÅoY?ɰpR'‹6{H¤§Ë§½Êôâ²Àûºî"ÓQ ¯'}Èg×N™Òå|Òky“¨Õ€ºó-cõ:E¶Bê¬Ô5ªAø=µlŽ÷¬ÙX¨ÜÃD'K8{ßgá SÒfûñyEØ>¼z{$NK8]½–þ¶ÔY;•¹:|ÜïS¸J'³±P¹ˆœ%°)(‰|x2%m¶xlÂ.òƒOz‹:Kra1 ®Í}R)KS«uŶçø;µlŸ.[²±P¹‡H›Ç °¸«’„Ã…õ ÏÙÚ',þNzÛBgoe½t¶·”‡6–«Óeã½Ê=DÚfŸg¾d:Z׃ðY¶¯ï nÞÓãkºév÷IRç_­Ú\¥Öl,Tî!ÒbÀÛAŒLÉÛò4mëæ>ÔÞµT'‹uíëAØÍ/o1 ®è}ífyÿz_««´ö.Íòä*í+¯7“ɸ¤}õºå Ë¢¥w¹_¨“²Þœì€ÇQCº÷µÄ^Xé}TîÁqaÃü]w‘IiÜ^â§¹·=Z¹ª“¥c¶ê.Ëz99³ÒRê.Y}MÎsÉU ;ÛKßš»ÎÄ8—W(À¿Ç_𥹋Iæ’íÇ× ¦öheø=|ð3øhî‚ö®S‹"T™ä²þ幋9¨VY˧ßörìº<]Þa’¨}×^‡Ê=<.y¬àóxÀóÜÅ$®r1Z¹ö¾Ä­}ÌEÚ£ÔGòàg½RîEêÙ6EXÈú7æ.hw®x§á¹Ë8€K±U¯ŒaP¹Ó,—W(þzÉT\³ýN®óƒ\id­Ÿ[L"KKÁg— ØV£#$‘µÅ:]ŸZz4‚µ¥ž-°I@å—½;ÖÓRï¹ì¶žÅ¥5¢}Òk3¶ü;6Žn²ng–Y­S»5Âj$%.m-ͱ“€Ê=<.ÅÏ>ïS&Óp9V¾ú̧éá5k„U‹–µ ueÝF¼¼µ€ºËl¨ÌÃÓ .¥˱0 £rŒë+ÆË“+\[ú/_X#²h]‰•ü\å^s5ø¸ó¢Q€•xy*÷и¾B±ê]$p9V¾úÌ#³¼îí—ÖÏþY´®Êz¹ÊõI^Ž•|Tî—cå+§P¹‡ÆõŠåÌUÄoÊ•ëõµ“OI@¯ª ›-Ku×öÅ vê®ÆÊŸÕÞ ®¸`%H•Ê=4®¯P|œù’é¸üãc¼üuk„M‹–€ºkûb›²n' îZ¬|­ÆÅË_5ËÛˆ—ç>÷Ðøsø€ï^¼Æ?)™Žb=xaxU{)®µu”©Q$Ö)jþãÅˈaeEh)œîsdÝšY^`# îËø€©Kfy+»ÂíQZ#.O†vHatjIå¿ Ø^¼Fgã’ŸSÍ]\â×cåóÏø·ëÄ'?¸xÕoâKþdîÂvæ\“õo{&ë_Ç;¸bPɧj?5wa;r9¯|ñi•{P\Í-–óÛz¨ûi¯²q‘i¸¶½ µÏ}1Œ^Ù¹¯ù>å>ë°s¨dý¯Ì]ÞŽ\•€g¤žæ.l¯:]“(ãAªô¹‡E—Xy?chÉTt^}ÌsØ­Nv…[ ¨+¤÷¢Ò(ÍÛÆ[ÊR†ºnåôk¿ÏõpºÚçæ¶bR¹‡E)†Ô‘v®ïr¯>÷kx½¶v*¤Æ|­lÔu³FXÉ}ÀJ@]‡ûÅoמ€ótst©£r‹ëÉr¨ÜI#ƒ¬æ>³@§µ“½ÜgÖ2ÔuÙ2fif%C]QÊk½Ï¯­˜¦–å$Ê4r=YÂùÕ„Tt‹Ú¨‚ƒü^Cœôv•uŸV¹]²tÔkíAK•ֈɧaTîaÑÍ_êãNQ2 ׎í¨ð&n£³5¯M¢]•{!ë>Ôª›ÛÂ*×"â jWpåNéæ/­®ðÅgJ¦¢ëôЧUnGk¬í0Pwíѳ:o)+u]Ç/Ÿb>ºäÌ1,QTîÑ}…Rv4?Œud:º¯¾)÷.Ö[«\óu]ò°x@¯ uÝÝŠþ¤Ðî’34ǰ-ŒÊ=$º¯P|<´“LA·¸òÓëݦ»5ÂÒ*×B@]·Ä(è\óþu2P×ÃááÔ²sŒ©R¹‡D÷Š_ÞE2£]ã/·³r·¶ÊµU§n“0_u¶FÀ§ñ«Ë©9†·b2C]Ht_¡ÿ?¶?9¦SbM±lã“ôQkÿÀŸÎ]äŽuê&ë¿¿d½5âwñ1Èûê[sûÎXÔ¨¬<±áÁÄo»ßà¤;Ýý¥Àgx$ê´Î'/ƒ®‰Q¨ƒßqúð˜Î‰QrþÞðdž˰ ±;Æ•(eÝp,ÔÑ[ö¿þ«®Ó_5_3£½¯Û(›cÈA³|Hôñ—Z8bBW­q]£ÔëdZ*vÆ'@}Jh'áÐÁÌúò¬NÚÉ^Â!+uêz. Ñ=TîÁÐË_ê[2 ý’ ùá÷욥^'Ãuèøëéi(&kF[Je]ì;½èãVô%¤®{ˆ `8á•{8ôñ—¾ ÍdJ†(w××N} ؾ¤Õíeðæ ¨>A‚¾Œ_ý$ÊhZ]*÷pèá/àËÐL&£×V¤êºÈÜ9VVèãÉõÅ¢ÕÏáÅ*·GšÖ?Ìòý¬FÓêR¹‡FwS™O&¥ÏV¤úun°ýÖNVÒêÏP×=1JŽY7ž¡®{šVÔkïøVÌ^Ö³iu©ÜÃÁAŒxMŸ­Hðc•ÛÛa'¤Ît@]?vÙ:™¨ëž¦Gµw¹÷õµF R¥r‡¾Ê½ð︽î"ÓÑ_e¸?Aìk°²Àt@]Ä(9V¹ÆêzZ#¼H8Ô×aÔÙ@å}W(›H&¡ObÔ®uyzØÓqò,œ¤Ob²Þji%­®QúZ#ŒJ•{ ô8ÖR£üð˜’éèW^]ë¾Êè³nvÿ8ä~‰QàÉAQ}­>„Ô彯ÏÄÒàVLf¨ …!+”…¿àÇç.:q„¾‡Æøc–ï£2~ßü„¹•¡á uý£ä|? £²n6C]é0èóÌ_ðsu2N_kjm+æø£†¨ÜCaHˆÍŸâÏs¸À€àŸZ܆ñ„&¦è· €úDÞ¼‡_1V ³átýUð9ã²n6 ®¿wøŸxp:…vnèQ:µ“ãç1šåC¡¿¿Ôp>$â9C†W÷}¹C&½¹*6Rg8 ®¿5¢¸Ú ¬¨+¬}îé¸cq5 5ŒÊ=z¯P`8ñœþÁ?ÎÇm”‘(ýäÂõÜgcdÝÕ„Cýã=*·„£½oÐtÙ`H•{( Y¡¸¿î"ÓÑ?ø§ºÞÕ4fíä®E« ó«ÜñU­\°ôÍšc,H•Ê=†­P¼Ø)J¦bˆ'×õáUOy{úd[´Lf¨ë¿/0û 0ž¡nˆ[ÑõÚ¬ YžœÐçkýzW‡f2%½ƒj×»:=bÀ¶aÑ2™¡n˜5Âü4Ì`@Ý€<‚õgà¶ÝhX lŤrmÔê5êºw‘LD¿ƒk¸á{r7oÑ2P7Ìa|•k4 ®Áúõnö½aè¥rƒa+×ÍZd:†ÿ¸·1´g»lÑfÀv;›àû€Óô–Öˆ¾SËÌTrîsƒÏá;¾Ûû{zsx§(™†¾‡ˆ¢¸^Šï›ÝËmù:>üjï¯ÀÕ ðßP'ÀUYÿ øÀ{ÏØ*×C­À©‰:Q¹‡Á/¶½¿wÐÙ¸~Í]2+}­Ø!…›«ÜŸÂ{€?ìýÍßÂÛ¾dª F3ÔåÓ°ûÞßû=³²n4CÝßÅ{ÐûT&߯ŸðeCå0Éû9†œ TîP†^ôŽ½ÎÆõóTî/œaÁ?Õw^; ðwÿ7û,6ä+7fÕ¸s€úHËúÏ’u“ꆺ€!ðŒo+‹)†ÅÊÆœ¥ô¹‡ÀÄ¡8úŽ‹ë.2%Ãbå«ï8èõ¸s0I`0 nh¬|U+C²n. np¬|õÜZ¯Óèxy*÷? ¸¼î"“1Üö—OQ¼t8„¶° ’uWCê†{§ËñËÁÌ{ýO¹+0”“€Ê=†µ,äœ&24V¾þ÷&ˆC²6Ï/oˆáëAwe}h¬|ýI86e˜W>™™D6Tî!0t#àú>e2 ýÓÎæ—î`x“¨Á uc&òF3ïÌP7bür6¿ü˜é²! •»÷H4"ÊÙ™/™”áÞéê{®MÇx§aj¯±ÆP†ºQÞiÓ6sucÆ/W Ë+_`$’€ÊÝÆx¬œ]w‘IcìuÕ—;Æ;m8’ÀX@Ý8Y7I`0CÝpï4àvï:¥Ófùq‘Tîþ3Æc¸ºî"S2nídì¨ £Œ›°¸I0VÖÜ3Æ; ÀÕH‚qe$¤ŽÊÝÆêªoº5ˆ‘ é®|¹n °c¼ÓPÆy3Œ‰®©¾éVÆlä­}ϱ¨¡QSK3‘Tîþ3jóË3ëA§úÄ£'½¡±€ºqÖ£‘ÆêFs= —zߨ鲯;•»ÿŒóX¹ºî"Ó1R ªÌAëÏØõ ÙU®©#_Ç*÷"’À„¬› ¨Kê%ëù“ê 0ÖÕ`dÉEåî9£Òpx3 ™Š±¶ó„ Ïì]P´b VfêJ•<|¢`P ¨ßûv¦êdŒqÁœ•;‰Š‹C3™’±¶ƒšF®ᢳa´¬»gc1à>q1’ÀÔ„eÔn *wß?GtQ8ÈdŒ·ýÀÅ´cCÏ\4÷j5”¬7`µ±bütÙ@ï£r÷±^¸êÛî<™s¶gúÐÈÄNÆÌ½†êƯ ʺ¡€ºqÉ^pôDQî&¦Ë&l,T Ç8gHÝKÆ€íÇ9s¯‰ ‹ÉU®™€ºñëA“63uã’½p𘓽oD¨Ü½FŒt#†Ô½hL¬ EF1±¬Ì½£“¾˜¨3â>1hc1Pg¦÷¹•ˆË„«Ô€…ÊÝoÌÌ™Èæ%sƒÜ^YºåÚ1°D%UnLYÆïFÍÆâDKIlÄ}âæÔÒÌ„e„=•ÊÝo´Ç}ôº ïH®™µW·êºy“;¨ÇcdxU{§²Ô™YºRgvqâJH‰8(6*w¿1cÔ*Wîã äeâ’kGW>^. )B#uù„e¼ï^×i¬¬ ¨ËŸìxñT˜ZÈFPÙØ-ÊTî#‘1åîpOqgEhj=hÎÜ;: ÎPü^©•‰€ºñÙêೡˆ÷05 £YþEbhŽèœ’øˆ;~OSÎ*cÎu&e=g¤¬ ¨3ÿŸãÎÔrt†…“:ÅC Tî>3>Åf…;ÂAüD'ê€ßÓÐz.íß7eÀœI×jÊ€ À˜³Á¦Ü'£:©Ü}ÆÜ æÒº‹ø‰#®ÒYe`=Xú=gW„ÆpÕ]æ—uslg¦aã=*{*Wî/3[.rÜŠv&ÞáŒßÓäzÐÐ>Y>3)ëEÒªQ-%©lG–Ü»š Ì=~9Ôû¨Ü½ÅÀ™Á5œâ/nl¨4iÀ®6Y›²ÜaÔVCYè?Lª `1ê.{ÜŒ,ÇÂ`Üê}ûÑsF9¨Üý¥0j™9UÙá þ22ÈfUF!]£äbt@]]c¤V*3áuPgvq‚2’`f¯»9{ý>ƒ¦aTîþb¶¹"Ä_̬GQæ<3$¥×}ÞIoþ릦ñ¥×}VY·³8™·÷ô¸cw1Q¹{J6dZ¹Ï*Ägœðº›õyVwšQ¹Kl4œ0d‰áʼnÛyͺO€¢¥µ•»¯ïFNñ›C‘!ôÎi{Ü ŠPÓ“Þ‘uÆ',&d}\@…ʼn;½Ï”Ǩ\]ZŠÊÝW̆ åÌ/ÄoнîóYL°Í$ÖPWLXLÊz^«1í4. Îüw”"4A9a1ØûÆØX¨Ü}%“Ýhvá ¾£ôŠp¦ ¢,Ìú<5¹”P„cê$2"ˆÚÝFÈúÈ€:{–ù‹&,eÌÇ€:Q¹{I9ˆ™øbª@¯;Êøár•‘ Òª×)žÉac;³¬—£í¤Ã¡lLXŠg”ô߃Båî'V1•_£N®‚¢™’!Ù°gÍ~¢¬¿j§¥f±=Ú™°`Ä4ŒÊÝOìt£jB¿;ÆŒ+BKö,Špx@5•1Ú0?* ÎÎw^{„¥ Ëp{•»‡ÈÒÎ æÉHT¦CÇ3ì¡Î{­i£ÖêT±“õ¾¸´™{•»WHZ¤×´×T6j#¸ÕJc3Ñq­×íVÌ×9j§×îËþJcH@])ëw– ¨MÃâþ²>$ NŠ1%³ÙRå¤cªñ«˜„Ù¬Ó¨Ü=B¢rÝ>&«óUÔmÅýîdê0\iôGåÊÉÞ¨¤n›–D¸×ZUꦔõ)|Ô= »±æh@­÷¥£Žëéˆ,‹ôÀn­Û©Üýb£MZ·ÖüíÅ0vOÓ<D5A´»!q9åµ¼rR{­4ØW÷…-"Y—•Vƒ{Ë“0à¦t7X^žHÕÞX®So¨Ü£m¶)›B4ì›ÔƒÆ"l›E~Š91q‡¾í­²r°[ÛÌÉ.QM ö\9ɺ÷Ð_¬s—²éóµ¶€º ²^jÕFÔd=n•õÆÀ¹¾u²Ôj0ë¯û†îÕzß½M‹„$Ø„90·Tî^ ‘Üé,ðƦI«äFçzJ°å)q¤?jWÆnÜ‹%㼤xÔ;Á'Pƒ€ÊðZÿ¹”+]uÓ½tG²þºë·F1HÖÕN½êþ²®\Šöbj¥{({ßÖ–íHÒRµ?LÑûúÒ Ü%æªÌ%$’žÊ¯“ˆ†žûæsѲž6yFßv²+ëꦌ‰^ËÖ´TbÙ`«U{ôP4£ê´/ׄ <‰áLŽɺ”õ ¯­›äó:ex£ÍØVd]–òXÆ^ÜY7ɵº)­k½¯8`x“üõvz«á½5&éRä2!A‚¤–N&ëiT;¨½¼‹­^­°’=vØaÄÉÔdÖ½V{–e]½‘"EJŠTxÀÙ¸À#I!E‘» öx5‰5+¯ÓR#l°–öØc?¦NÈú}MÖwØ—uI#AŠJ ÝN¹Âmì}#s¿K¢ë4Sï;⪬+(¤ Å <"ªþÍ×´/lñØ6~ôˆdà=רüf„ûÆžðŸæ~R|5¶Ø›£+hùFZý­?Ûà±ó}׃K´ÄsÃÛÏ}ú$l±ÅSã‡ë¡ãÖõ§Ñë› ?Øö‘Qlñ-÷qKÖ§Wko±miñÅà>4°N X5¾m°÷M_§ZÿÙ´|’BA €Wù\Z"ü;üMü þd–yÚöfþã·ßó}|ÿfð·ïá«gïþÿzògC®óyü>‡R¬¹¤”oI±Å±¬ÿeüZgYß\¦Ç{øzÃûÝC¿Ôøþ'øß\®÷ñɨo _<{÷›w|hx~¾Èúgø—-מÿÒûx¯áÚÿßÂÇ#ôÊ/ލSsïû!º‡D¶÷¾ðG³Ô)çóøyü¼n7ÈeýÔ,ÿÞùƒd·']éS|ŠOð»£î9|X€ïãûøkø¾r$ö8Û"—ù"~Ðñˆ‰/ö¸ë˜>ô~ákø*¾Št‡ïãÿ_«½ó >Å÷F ­cë| ßÂßÂWñÕϱù—Îeý|ê ¬·õÚæ§RŸ´üŸâ|oä‚qŒü ¿ŽuªÞ÷Ã^Oå¿xôD>Á'ø>›­N?†ÿÕþá‘rWþ¡lðfó!ãû2ì×Ò"H‚1b8˜²€<â7T‡ð•áïÏ!ë#F”{,ûù_e‡À ?lÔV­R "ô<ó!LY—ü;`\$‚…:U½¯g¢b9 FÞû‰:’Û˲~d–×om¹ØO¹Œ¬«£ ›6³¼þôÊ:!þq.ëµÏRl›÷¹SØ ñ•~ÒKY'ÄW®HoÃV8•Qä ñ‘¾«pu ¬â#×eê!„À r'„Bã­ñ· n#+D¢!gÀË®E&¿$$¹ôô%?ÂZ–ÈÔÃÜ¥`tɃ—uÛfú:Q¹Ž,ä1•ò$¯o@G¾J„óc1Û¬sTÞ5.‹|,K[™ºeÝqSWZäÕ– ,Ëã:€;wT…,#ÆwZÛ‹:5ÔÒSYïÕ:^µMG)J«Üôfk¥ †&aäËì ñÑ¿i€ñT$}ĺ-Yá…o7$è´Qʉžo„PHõk=&%¦õÒ.°ºzÍý5Ù…BkúÙ ßZv»q½Oa‰çúß®ô ¬ód®ÝÒíNS'ÊúÖñ£¿ÕÊÔAŠŽëd¦V¹¬Óçî ²>YW>bôA™’ ®e+3p®¶RN…ÊÔ;@íôë¯áèq¶a¥®§g½…SÝzñ»DÝr 2gˆàÊI‚K]’[$ΖŸ N”õ}ZÇþ ‡×É`­h–w‰ø]n ˜É¢ ÿr§”³¡v¦‚4Ƽpê {Y÷×-Ô”™·%>^ŽÝÉцœ´6L¥Ø9c&Ýé³ï2”2p¡VÖëDY?â¬uælƒt•¢ädS›±ZQ¹OФhR&·*âhRÙªülê½á™h礉µ3¾D¥úÛ«‡ J9Ú_ý±¤€ÚIäb$DØW¾2Iá «ƒN5ºWYîÁ/—ªoïK„ä8Qª¤ˆòO%:ö.žþÀ¢~Ftþ˵òÊë÷H»Lz<—uý@Yb‰ 1ˆqpƒ}í³Ú/KŒ8_sHŒ%¢^GÏZ¥Ìãµ@–—¸½VæêDYïÆiëLÑ6öé*Er2‰7Y+*÷i9 !ŠUe’<4JÒrvœà)îaLÝIœÿÐow̪Œå`~˜¤”Q×ý1XÊd¸—wÕ^¬q‹=V²Ww€D¸Ç;,å€Þ–)Vx…,±Èi׿…R¬ä €–¢S9K‚ îp@"kõ.’b7ê5–¸;N&#jqò²Æþh¸~ÄmyýÞ¬©TØU ‰õ®$ˆÕƒlÎòX§õ R YÈúeXŸ‰±Ê3é_¬•¹:QÖ{P´ÎDmc™Rt\'õR]œþ|Y¾Ð§ûb•‡Q!ÊÃ,°Æ[,ó ýÿ«VGºu±†ê]ª“ ;¥œô9¯¡°Åe]R(,°B„¨±C…HʼnÍÕóC-DM_{ú-¥ŸOZ~çI¿³ÈÃe×î²lh·2¸¨xƵOWõS¤/·*êb{öZ( *Z µQkDˆNO®> ÚŒ?¡zT˶ԩ|Š÷Çg¤7Õjš:QÖÏ~û¤uæk#íÛYŠNëdªV¹¬såî YëÕ`&{kÜãËê#ýÿΞ/µ“ú?Çû¤¬”rjr#£ÔCÑv€ºd‰™6N”3ë]ëyqü­ü<¬ú²@œ›ßÔƒþÿAî°Ä@Ú˜H²eÜ<š6 *ŸËBbm»HT&éYèái a÷€±:!OÄ•IŒ¸<Ͼ©VÓÔ‰²~ÄiëÌÚ6&è.E§u2\+®Üx!Á3¶ˆ°‚ªVsxÔ[E¶zÕõx¼¹rßM¹òÜž¯¯~ût6o©”>çjý]¬rÒj•ƒ5ªr)¢ú ¨¶ ?]¹Ÿ|«ùІWˆŸ®ˆõ÷Êù{1·¯VóXÕ·( Y¹wxNÕ*p…µR<\q´Â¨,î½à¾Üüx±VÓÔ‰²~¹uælÃ-­úô7sµÒ²åÃCz /DÅ]ßOЍR)ú³'…ƺ[,ÙùÚ´÷ÕN)'|ÊgjöH¹/ ŠZ!B„ª¸.(÷“o5\Q¿OT^»Å«¦}¬ùó+®Òÿ?1–ŸWîXâ ÷ùpŽ'¤Úõ]SSXãªi§´ /DAåA ùºk,°Ö3î÷Ø Å«RQ¯q+l pøø[ˆ±†Ò¦Æ|&^\±©î«ïôÔ6 V¹çÚÍ£ §Áu ÷Q©Ü[žä€µ¡Û¯ëÊ+ͱY'*w¾øj|!:ñ>FHÎVøiÝlÙô­ë÷UhWÌXÖ& æQýÎöòz 6”ûÆE« ëê+ͱY'FË҈ʎã®Uv{¬v€Êj1ígߺt_Y"R·²lÿ†º“m‘Ú¦úÓlU’"›e‡ïÁ±l`¬SØ„Ø6ÖëÄÜò„t@b,Yˆ™ ~1I‹mY-tɿ›«×X CÖ{ï±N¡bÛØ¯•;!ÝxÀ«úJ} êwÈ÷·W×ì±»|†¬qã9¡Yž¨C÷|Ýî·ëpÍÃe;ÁåÉ!ä%Õ;!ÎÂu9!dTî„BH`P¹B!‘ûÜ×Bó!/Ê:!¡…rOF݈â ”uB^o]K¼AñœLÿ—²NÈ‹áÿçöÃoÉQ~Ñ%tEXtdate:create2017-12-22T13:53:17+01:00Vû*%tEXtdate:modify2017-12-22T13:53:17+01:00'¦’¬tEXtps:HiResBoundingBox483x122+0+0¡Z 'tEXtps:LevelAdobeFont-1.0: CMMI10 003.002 5âF†tEXtps:SpotColor-0CMSY7ºÜ¢,IEND®B`‚gnuastro-0.5/doc/gnuastro-figures/samplingfreq.pdf0000644000175000017500000005061713217200075017403 00000000000000%PDF-1.5 %Çì¢ 8 0 obj <> stream xœ½šK%Å…Yßà]±»-Ô5™‘/Kl°1$K`Fò³°†É¢1F–ÿ½Ï‰¬ªÌÛs»™ddÙÓŽ®Êgĉ/¢úõÖ¸þgû÷åÝéÙ_cX¾ýéÔÖ–¥.ÿ9…å““­5„R—¼ÆÖDÑרK”`k±åÇW§/ðà·§×§èã-Û?/ï–^p̸ø€Ù–ßœúdÃUµR–ãš"~uwúòü§LA¾zñ)ßÔùͲV¼ùâk<÷÷ó¬)c]ÛƒS(†nÕö‡ß¿¹µUµ•vmÔ¼æcÔŽš°ËóïñŽ¥5[Ú°ÀÜj;¿¸¹U-k3;ÿëæ6­µ¶¦çon0_±–¶ÑÓ<ºžÚ1ÃÏ7·aÕjEëùûé矸ÄCjçàš†¤ç;Î=Ætþ¡?›ZÖów7·y•hYίnnemGxþzŒvíHŽ»†¸¯ãÎWÍJ¾z$—ÇŒYã[3Ö¥k zmL]e~x?ê>òÇ/NŸã‰V|'\°ÿ%ŽZm¹;‰&=þïwð6ÌSKóqùÿýçÉÚškÁ;W\Þ±ºæ·Š¼°¢Ë5c˜º(}Þ¼ûrš·Â²$ø]«Ë1Eæu'¼ðfq ÃÆ¥š¸e{k[ºˆŸV7M¹ý¶¯èxu[ñ1ø¶'Nø`ˆ•…/\Ðb±´5É’Vi9´=ÂZXK vþñ涬©ÀÑ^Ýà‘”-Ÿ_ãVZ,Ž*û§¿üþ°½VóÐOß2del밼žÈ5ð9HÉå¾>xÚ¾4Ùû* žóؾî/ë΢ ×Éøn¼W'®‚"³8PWp-ôås-¸Ï\`îÓWpš…‚ü&âšmH7ËL÷Ð@?ˆÜþâê¸ä«þ é6Õ õXaŸž./ÞØù¸Úø¸Ù[ñ1G}“«æÁÇiçc`Á†ÇjoǃCkõ>Êñã2o\BÝ0¸`’ƒK¬íÚÎ ¹ ‡ƒ-îcðåe`žx¿æž зRŒjpþ'Á²|m¦÷Göü(úÿŸV¾{ÑóÆ©ª¨íGÿwh¥Õk·‚TäxïZ>ƒ»j´ö$rU̲®°uñÈ~¬¢Kͱè¨(`©Ý²ñù1ðÆïﺨ(Æÿ÷öÚ`Ÿbª((î$’QQÀIñGr¬¾—)…Ê]¦YÇ}]ÇÛº)¦ºâ>Q#KBȧ3Û ò´âRI€ƒ§aÁ[vÐ0FIÓ(Ç ;MÃP.~_3!s¼N”°_€iHPuÄ‹?,;N«bd`âÀièn/O8­D<á4ð"8ô8 x M8"Š™&œVc­™&œV¢§Ugz•§á²¿ Pû®¶ÓÆvË;µ²±p¿Pøà·ÛØD]~‘¨¿\z6AUŠkOËWXÓ×£»§½@œÔ¹[@}ëž+¤%Ï Ý2=ôå62µáŽ’X 6¨„´â¯ $Aðí–ë9Ë5z¢¸p9Ê`[Z ’æe ŒlqÃÿ'lþœ¦6ïc(¦àÀ÷9´E°QO¸5R—‹Š×-Û[Çò·Q«v¦y'¶•í#ì+ßæØ÷öXñ=3Öîƒ6a™´Ò}PÀû1‹”kt¦îP‡þŽ`j(£ÍûëóቡœA¼u bH\/ïN=?={þ—åß?þüêôìoK<=û3ÿç£Ïþ€žÿqyïôñóåó‡w’®ï:1£®‡´E¡QƒØ€Æ7i‚_@… Û2³;î–ƒ(*4ÚâL)7ÎDÁ›º k™y¢AÎêŒ ¾TÛŒX w‘N 4b§f‰†üm˜p4«Û '  ;ljÚWƒücuƉ†ü³e­Žr™pÂØQ,e cG±ljfý™!', ÿ„<á„ü¿8a…ë8Ke¯fà„d Ì1xÂBáÒ& °P™»'€0vË= S؄ƎbÓ ),2žtB ‹Ö¨R©Zz±ö‹\l§âSѬ³U¿.‹)9‘‘(B·àvsœÂx»%NHal("1 ¤06!4) ÷=ñ„±—'œ0GÊDØ)μM4 μM4aŸ´6Ñ„¡Òñ¶ØN&pé\'š0¶KhÂØNô–öFÆnb+M˜À#wp¿O¸ÖÌKI÷°¼ M\< 1Ž’·I ~'½Ãå"Y?ì%iìUì=uaåêuÃ(JË®(†ˆ`¡ÅåÃà€Ãìifë–BϦ¥´þ Ò4r¹„nAÞÐ.2¡;—i§¶D¢ïãXW°¹î–ÖK¶GµÁIùEƒ¸î7j¨3qý±P¹7Kub$Ôµ>1Ë¡cæè–IÏاé Ä/ApCˆ07ÊÅÙ:_£6 ,Ä+IÈ-™å‰ø—èþLd¢Yids¸1~5€'öÓJP!¼Oæ6ºEéŸ Â(îßñ{iéSÁµ!À†ë ^ùâ"+E>Êþƒ[¼~B4ïñ›-€7v+šßfâ1ÁwpãµK«ßgéJ¨Þàî‚W[Ÿ½6Vo»1Õ°B¹ˆÙþR®›…ЧʡRNX*”êSåè›È¿1¸»HmÍ$úÝR(9ü§Ÿ*ó ʪ;KÙØ™Yâ|ó¥Ì¯# O…¹º^Ü7ÜÐ\í4nU«å||Ø̧qU”ÁfÝR™;‰†›’åjT DÔ®v?ÂY%{Nïla‹û#˜wÈÌý„ÕR £%Æ{ŠBç粡(»å……}d‚š%Åž.)¥åÇ%E’zåu|6?,»¤H…¯5 E*ŽÕ?î"÷e¢iˆ?6¶L…!4q VÕñçàiÒñçàˆÐçH3çŸS`pþ9(E"±MÚ -ÏßAº¥ê„"­:û Ba_9mŠ´æì3ECpö™!²ë47<‚0)Î Î>SÃ#¨³ÏÔðæì3uƒP`qö9E£dv£¡hÔÄRcŠFsô™šüœ.:7=˜=l£éÁè&sÓ#gŸ©é©R27=bsö™š87JùÔôàì35=„ ¾Ññqö9¢Ž>£ß!·¹Ý!ÖÉçhwHêà3ÚŸýCýí²)[Š£+°[ÞFNÚ59A˜ +¶K9ñvGá_«lzR.¿)]´ß Î> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /Metadata 48 0 R >> endobj 6 0 obj <>endobj 7 0 obj <>endobj 10 0 obj <>endobj 31 0 obj <> endobj 32 0 obj <> endobj 29 0 obj <> endobj 43 0 obj <> endobj 27 0 obj <> endobj 25 0 obj <> endobj 44 0 obj <> endobj 23 0 obj <> endobj 21 0 obj <> endobj 45 0 obj <> endobj 19 0 obj <> endobj 46 0 obj <> endobj 17 0 obj <> endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 47 0 obj <> endobj 30 0 obj <> endobj 33 0 obj <>stream xœcd`ab`dddsö Ž4±T~H3þaú!ËÜÝýsÉ÷å¬Ý<ÌÝ<, ¿w }üÎÿ=D€™‘1¯¸É9¿ ²(3=£DA#YSÁÐÒÒ\GÁÈÀÀRÁ17µ(391OÁ7±$#57±ÈÉQÎOÎL-©TаÉ())°Ò×///×KÌ-ÖË/J·ÓÔQ(Ï,ÉPJ-N-*KMQpËÏ+QðKÌMU;ML:çç”–¤)øæ§¤å1000ñ2&FF­|¿¾—íaüÎðÓ‚ùgÍ÷2ÑÙ‹»/)é®’ÿó‚­º¸»¸hQ÷y¾âÅ?í—°ý–ŸÎ¾‡k÷žù<<@ÌËÀ/\ endstream endobj 28 0 obj <> endobj 34 0 obj <>stream xœ¹FþCMR7$øøø‹‹ø¥ù6‹ ‹ ­ø)÷Z÷U÷Qmq€Copyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMR7.CMR7Computer Modern42]ÉøˆøÍ‹¯÷¯øZŸ÷èÙø¥÷8¯ûøR ‹’u‡‹}ûßü`g÷º9i‹:pg½Ë¯‹°‹Ë‰½‰½ #¯p:‹—­Ý=ø&üûœøÍ‹à÷ìõè¯Êõ÷ƒìø÷JiˆuP~ƒ…>‹}‹ûLôè®§ÇºÕÆÐÉ‹ê÷ !Õûû74/X¶†•£¨œ¯„®WªÒÏ¡º‹ï¿=:4MFkgû…û‚‚‹‰‹oø0wŸøCš÷n•”Ÿûa–¯ Ú  7Ÿ §“ Ú› t©´J endstream endobj 26 0 obj <> endobj 35 0 obj <>stream xœoHqÆïܺN[댒r;¢ lF †–±‚ÌЊ셵¶S‡n7·›çÔvn8çöu;—nnms›šZ–ö‡¨Wõ¦ 4¢‚HéUTЛ‚øÝ:©VožžŸçÁ1y†ã8¡«­=QñÏíwàâαDR(÷.çY (ä7rý[QËÔ´ ߌÉqÜb÷ôë«Ófjie©=†½TyeeÅ>ê€V[I5Ó6“Ao¡jõl+mÖ³ùÐN50Í:©=U­,k=´?Çqez³½Œ±µÞ»âLl+UOÛi['m¤Ž3–:¥7ÓÔ¸²ÿªcÌVKÛ¨ZÆHÛ,V†arûéêb ;ƒ•c›ñ¶.¿“c1¼wl•â‚{æágTúaaGe‹èÈŠLÔ‰ U‡·§8’M{b‘»áÇ/uÙS’–‘Ö·7gìq^}Kù^óßÐÝGëmFÇàÁõ£ì­[Bv fÈ)çX§ÅÂ^¬[jþ†NÞF[ï}Þj¾ªöm‚7Ø|Õ™,L¤¦³ñéä|0 x2˜5‘Ê\, é9ôlÏ1ßeè+ZT¡ªF¥CøÇÊe©D#ý 8W¢MàOiÒþ Üà‡_¯´}mr»Ûè¯Ò™oÀ•˜]`V“„yHÒ)ÿ8ákóÀº èÔ°AA† ,\#Ñ6q^5rs(ôHTH|yÆkç«›4-mõ]: ¥ƒ„R\•B™_ iü½X#ý¹sªp ‚ ×h_÷ïP¯þ®ðºòP¾âž˜'š‹ «•9­;ƒ~¾ÂÅ’§2´„þ¨Ð¢·Î¡…*0 [ÃŽDcÌ—rb239â¼M×çSX…q¸K¢-D F :„0LÎv@·zm#qO“¾ƒ5žÉÇ@ˆGÃêÇo^äo&ŸíRÁY©È\çu¹;}ŸßýdÏXÏÄýè£O“j%—u‘Ȳ¦ éRdý\ÑÊu‘¼"­(œ û R_´ endstream endobj 24 0 obj <> endobj 36 0 obj <>stream xœcd`ab`dddsöõõ4±T~H3þaú!ËÜÝøkÎ_Önæn–•?2„¾G ~çÿ"ÀÀÌȘWÜäœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*€¦&ós JKR‹|óSR‹òsü˜€ž``adûÑÁ÷ëfãê⫾ºÉü#÷¡h[YSFw G霆¹sçLŸ5Y®wâ”uæ/|*1iiÿ܉‹¦¬]w`Æùó¶­<ØÍqº;¢" A¡2N¾µª¥º»Š#bgú¡{¿K,ìíš^YÛÕVÑ*W˜ÛÍQ[;qåüIs§,Ÿ¶|ÏwÞî£w}×Ú‡x–›yɵ^ XåÔÙí]ímÓvÝu^jwjwaIevabCXwGÔö)³{&Íž 7ÿÖâ5«»9ÖöfTW7&·äË·4&µ•¶µ¶µä×Gv·’àòâÆäæly¾²?œ§N›ö½`Ûï„©ìë¸pËq±˜Ïçá\×ÏÃÃÀ#~Î endstream endobj 22 0 obj <> endobj 37 0 obj <>stream xœcd`ab`dddsö Ž´±T~H3þaú!ËÜÝý³ôûRÖnæn–…ß;„¾G ~çÿ"ÀÀÌȘWÜäœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*€¦&ós JKR‹|óSR‹òx##‹æ¾Ÿç¾—ïd|òSšù§ÿ÷rÑÙ »-*í®–ÿs‘­º´»¤da÷ly¾âÅ?í°ý–›Î¾“k'÷ι<<@ÌËÀ¿Y\ endstream endobj 20 0 obj <> endobj 38 0 obj <>stream xœcd`ab`dddsöõõ´±T~H3þaú!ËÜÝøSô‡k7s7ËÊï?„¾'~åÿ%ÀÀÂȘWÜÔîœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*€Ý¦&ós JKR‹|óSR‹òòsSÓ»˜Y&ÿèàû©Ñxóû·ùŒs6|/½óÝã=3ÐL¢«šv¤å×LkšÖ(7«fVaw‡‡Ûo%õðôU»ëåf¯]p¨{9Çœæq­¿™³å2“’»9¼s÷Û5cëüMò+ŽnÚØ=›cZÓ䆊š¼Ê¹—½n »î¹°|¡Ü¬- 'ºïvo9°åÂê¿ËuŸâà+[ðÃyê´iß °ýN˜Ê¾šë&·‹ù|Îåý<< ôü— endstream endobj 18 0 obj <> endobj 39 0 obj <>stream xœ}’{LWÆg˜qEÔL|áÎàTˆÖgŒ‚"VÐFŒZŒ ÅE^Ë"Ì.".EØåÀBy XY@»€+ÚjAD|Õ6Z‰Ú¢¥cÕnc©i“ªõ ^“vјô¦ÿÜÜ“Üû;ßw¾CS®.MÓn! _f*“iÅËE™Â± U íw*×^nÆâÞ1;#=)†¦µ»óBtiY鉻dÉ'ÎW \¼xá\)( `±´R«IOŒ‹M•"bå6Vv)R¤..Q#gI>Ëd9mɼy™™™þ±Ú ]ú®å¾s¥ÌD9AÚ¨ÉФ4;¥P]ª,­Õj¤amþÃGˆN›¦—5éR„n§&=•¢(UêîôP}VœÆÇwNEm 6R‘Ô,j3E­¢B©”;¥¢ÆP£œ&)WÊH=£·Ð_¸LricX&9ï:Þõ×ûŠÉCyvÅÓFãˆÔ0Ê^ü\øIsyªOtHF®ºø Kfä¹%q·* ¢DÒÀEçÂ:u×ié‚¡>ƒNS¯jš[— gE\Ë=ÿñüµkõ;ÂÕ$ëÿßz(WÉf;α)^ít‡;{g(‚ŽŸŸtiÛ‰p˜HÆ—ÙD cžÎÂÑýݧÛZD²êÿ©ÁX#@6Ü·;~ýæ}‰À/ w …ìÝ{?ÜëY²ÉÙ5Èi—ꢑ¹ƒŒƒÁpÜ#À·íH=)=X”d>¥ÅØØbmhíH¶Å¼iP?gÉÔÿ§–+Ð_B)ô½–É›kNŠCkÁŽ]vì‰}`)…›pîÀÙ׌dÎê:D,ü•û½6eØŽ)ì;¹É¾j,eO”Vt«q"‹ áHøa2žogæÛ”Ñ]oÄGJ°ðVj0·`KøŠE½j¼Ï‘¹Ã&À$’Ù\øãüÁ“ýUåê’%,úV»Ù¹5*΋øœg‡MùÆN[2ʼ/½zªÚ^ÂÛ¹“b¡6CªÅ)8‰k5×eƒ ‹ s%R8ðX_PïJÙÄ–ö’&µ‹6í=`$¿ùrê̇5D^NˆöÖ®^ |zv-ˆ¥Í5ÐÊÛ õúL9'%¦3þ²£çEu™ÚCIÉoÇO~9òzSÅUñtû‹dÈåÓŽdÚŽY?j»¾¦Íˆ~„!#ɸg>8½;н¶6L…Åù&uA·lðA=èƒÓï^¾Su ²:Ä7ð¸c¸ÈF·9°â£:—¢éChvDýE¼‰çìéÄ“HÍr2Çõ¾h.3Uçä™ šÅ]³˜² ¶[µÝÚn¸m|É1¡ ¥-§G@ñ.‘y%X¬/#é§} >$¡²jËŠKr‰d ‰¸pà‰“/t×*)r¾¼¨"?ûý­û¨É$"éHy„¡×œ1Ñä„^G‹¿e#îQîeŸï´]æÚ\%2ñ8YÄÈiçt¼¶nÏÉ).†B¾ÐRPÝÐ{¡ªR“P²a Š÷º9ÍŠ_uãFZ™ÔÍ(a˜)à9¶® š›õ`É9ìaë I–AoT“ÒÃõ ËMP'¢³b on†¦:gp6ƒmÈÝFŸq`³ƒQŒØ/À‹¼¾¤1?/iÚd,l÷3êv›}` ¬µÌìYÚ½òîžKÐë{ÿ8Õoq@OdÒ'$BhƒáyÞU„‹p¾®¹býóûê£pnïm ¨Ý+` ¼¹‘†©¡Æ$à= V%¤uÕ•V–ÄÖpv÷‘jw×…ª¶r•j A5Š¢þÐÂÖ( endstream endobj 16 0 obj <> endobj 40 0 obj <>stream xœSkPWÞ%!»Ð˜jÖ õÑÝ¥µÖTZ[ñ ?PP£ ЊmLVB! „@‚ Z5ž #Œ 8ÊSEAII ʵb§-N§ÓVÇ¡£ýÑŽj§Ó§Î]½þèZZ«3vÚ¹s_sÏÜïûÎ9I¨#’$©˳ç%>8Δ§‘òôùY`Ó½Wï¦G‚VZupz¤Q<“õi”3‘P‘¤³tÏ gQ¹+?ÏæægYfóó’“Æñó“ùevÁ•o1;ø ³Û&ØÍnåRȯwZòw9?ë5›Û]´(!ÁãñÄ›í%ñNW^Êì8Þ“ï¶ñF¡Dp• V>Íépó™f»À³‹ßV8íE¥nÁÅg8­‚ËAD”£¨¤Ôl í±†XGl LÄr"•H#2ˆL"ZQH¨ q<¡‰8 Ò«¶©ÞSgÉÕº»zÐ/#y=Ò(ãm¤‰aÎ)Ù€GÓ6RâÇþ^ÂG5û†µÏKiH ùÍÐ¥3­eKXÜþÄêöëÁ皌ÙÅ,3† /ݹ‘bÎÖƒ•S ±IB±™±„ôw°ýhr s¡¯ Ð,ŠMM¡¾óum@v1ëqljVzÅF¸°‰ÛÙ"4Ó‹ÕaÛÙwû€Fs~ýqhJâ-7‡IÊ »ŽÖûáp++BÛáZÿ@Áyhº ÅšöôØ:9fÌz² nq#­$ËÈû@©Ð#õñÊé— ‹)”Z)Q{ È1çd%Ë«þÒmåðz*9Û´<¥úØÝz쥂⯗þÄ2Þãp¾¢uòE_À.¡5§ÐK}7ŠJA“PÒ˜29zÌP¹¿³ƒš–èh¯„J.S„Fh§Qucå§x¶ëö.x«Ç{¢«»µÿ”÷HµŸí¬ë€¾Úc^ÂåSŒ´²×ïÂ/L‹&–Î2e×@êkë§·¢y†8jnB¥+ÛÒsh~Óp-û§^»$«h݈¾MVzC¡²]~%lxƒB«*–oÿSgEUÅ s²êÞ™†g>·Çâg¾C³8fû'0ØÑuŒF—Ô¸–ª,ß¼a ÐXhƒpáx;Ù/ì‚!TÐæPrÑá ¡Õ§Ñ¢Ù­`ïþA%oFCÛA8Ñå»’3Ìm ˜Ž¦)?$%ÍÀ“ðÔŸç —Ñüð#G½Pµµ¦j›+{ÓX®DÄîCSÞçN«ýA±¿õôñP¨á$ (ðãÑFëÐeä#$¢¡Bî»é†GÔÜVº¶[ô‡! 5gþîÚ{ÆÇ¼jŸ1ÌÐùõÛ¡Ñ3mž”óëÿi ~Ë˜•“[Ìzn&Ô ÆM«iŶý=4îï‡äµЦփ‡48·ž’¢‘æ)6Z½°Eª×j‘¦S;AÔêâi|v endstream endobj 14 0 obj <> endobj 41 0 obj <>stream xœemL[e€ïí-÷,e€M4›·×-f|ÊK7eÕMMÐm0¢‰ ”(-ôc£‘½eí-ia¬ác(E§ShÜ/3jA§F—§!çv/&–î‰9ÉÉyß“<Ï9‡¦ä2ЦiVWq¼¸h«zFÚNK;dÒS 1®÷¦€’¥|öá,´ebmžØF14m¶õê,mÖ&ƒÑ.äÔç Åee¥³EEeBy«ÞÚT_g*êìF}k=ñ0 •–ú&½½SÈÑíö¶ý{÷:κV[¡Åj8˜[ 8›ìFá¸Þ¦·žÒ7‡-f»ðz]«^HÎV˜Ì:Kk›Ã®· –½ÕLQTªåð«UûääRÔQj7•G¡J¨íO¥RiTZb;JN©Uº€öÉÒd/Êze?0¥’G%y\©h‚¾t/ßa¤lVãã»7H:ÉÌ#4É$ê¿ó1Óÿ¼Ùôwjîç|Nž¢òB#y‰l#Ygº¡<о÷àÈÏßböü'(EÖ*Ç„¤»ˆfßàKÞå¢i·ãÓä¥AeêÄ9¥òVP™NQÿ#ýÀ endstream endobj 12 0 obj <> endobj 42 0 obj <>stream xœ%oluÆïÖrœP‹,i¤ïÎ(q2Š/ÄDçÌ „1úbLÏîXKvm×^×Þ6º»¶kïúퟕõÏXÖv-›ÌmZçŸÌ 1:"ˆÑ@$ᣠ¾ð…$&¿kºKxõ<Ï›çù<8¦oÁpßÞeµ;d¹o÷iáÚÞíq4Øz¸þö60èÀ ÿ¨þO+âw£þ]¨ïLã._Dír¹EcÀ.0m¶ýÌ¡ŽŽÃ˜g-–¦“ç<ëd¬¬`çxVh†Aæ-—ÍÁ "ÓvÄ.îôûýí,ïmwyŽî?Àø‚éἜg˜ëgº]Nyå9æ]ûérñnŸÀy««Ÿó8]<7Àb¦ï>5ø†=½†Yñ8¶­ù ÓcwðQü·Ÿ¦ëÂÚXBëãè2ºmú›¸55êŒÀx„§Õh<*ÎÄ29H'©Mħò„”9©fe9QÃ/ âs@Zˆëèlö“Dz ÌhvUO ¦¸i5*(d4Éæ™R’*£ÎÔ‡Qð€y+HøeðKY(}zÄæXT¤{¶ä~5|Ì#Æ ¢á—Ô"¬À¯Ê \2<™-@ij" ZI¨ €šuIgJIÃt/“ž!Ú™[)ý¡¹—о?‹üۻ觻:M§=eú(ç œ—a„~ž˜CDzîÜLÁœ-ÍÎÌA $¾“í0F ÅñÒÂbeuýdõÇ ±§&†ÙÛh%»‰À}¸&9ý#ñò->3by̱æ­@q=•­Á Y !§ë[ó~±ùù•Õ"µ|­ŠNœ%è©R7}‰¯_Ó¡|ý%SrAá•°:D…ãR¤”ƒ™‹‰P˜RüÖ-E‘ÔŒš{Öì+óåÚ,U\-|I2EŽÇÎ(ÔÈñÀ6 yX>w>19Y¢õé&ú¯ŒO/#ÏÏèÕ¿tÚ=4}%Îû†Ü^Až”r!jv¬èlžÁ“üû§½ÐƒµÐwù…êu¸@¢¹`XRÇ”ä?§{m}'€<6|å2Ú}ï_˜¦óá)) †&¨w;¹ÆN°ÝÕÎ;76.m֨웟õ^…Ûpñ‡Ú­ó_¯¢½p•4ú*ZW>?ø Ñ`óÛ—vÜÜIíÐ.šÏ ö?~Ã’Ÿ endstream endobj 5 0 obj << /Limits [ (Doc-Start) (page.1) ] /Names [ (Doc-Start) 7 0 R (page.1) 6 0 R] >> endobj 48 0 obj <>stream dvips + GPL Ghostscript 9.22 GNU Astronomy Utilities, Gnuastro, manual, plots 2017-12-22T13:53:17+01:00 2017-12-22T13:53:17+01:00 LaTeX with hyperref package Plots for GNU Astronomy Utilities manual.Mohammad AkhlaghiUsed to make the plots for the manual endstream endobj 2 0 obj <>endobj xref 0 49 0000000000 65535 f 0000004092 00000 n 0000019391 00000 n 0000004033 00000 n 0000003865 00000 n 0000017509 00000 n 0000004242 00000 n 0000004302 00000 n 0000000015 00000 n 0000003845 00000 n 0000004365 00000 n 0000006864 00000 n 0000016320 00000 n 0000006551 00000 n 0000014938 00000 n 0000006339 00000 n 0000013427 00000 n 0000006001 00000 n 0000011684 00000 n 0000005769 00000 n 0000010992 00000 n 0000005540 00000 n 0000010431 00000 n 0000005383 00000 n 0000009649 00000 n 0000004958 00000 n 0000008566 00000 n 0000004799 00000 n 0000007816 00000 n 0000004570 00000 n 0000007254 00000 n 0000004407 00000 n 0000004439 00000 n 0000007463 00000 n 0000008030 00000 n 0000008788 00000 n 0000009877 00000 n 0000010640 00000 n 0000011204 00000 n 0000011957 00000 n 0000013669 00000 n 0000015208 00000 n 0000016542 00000 n 0000004713 00000 n 0000005290 00000 n 0000005683 00000 n 0000005914 00000 n 0000007167 00000 n 0000017606 00000 n trailer << /Size 49 /Root 1 0 R /Info 2 0 R /ID [<658ABE77718AFAFA1E2C43AD7B90F435><658ABE77718AFAFA1E2C43AD7B90F435>] >> startxref 19745 %%EOF gnuastro-0.5/doc/gnuastro-figures/samplingfreq.eps0000644000175000017500000057410513217200075017424 00000000000000%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 0 0 483 122 %%HiResBoundingBox: 0.000000 0.000000 483.000000 122.000000 %%Creator: dvips(k) 5.997 Copyright 2017 Radical Eye Software %%Title: ./tikz/all-figure1.dvi %%CreationDate: Fri Dec 22 12:53:15 2017 %%PageOrder: Ascend %%DocumentFonts: CMMI10 CMR10 CMBX10 CMR8 CMMI8 CMSY8 CMMI6 CMMI7 CMR7 %%+ CMSY7 %%EndComments % EPSF created by ps2eps 1.68 %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o ./tikz/all-figure1.ps ./tikz/all-figure1.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2017.12.22:1353 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup} ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N /erasepage{}N/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{ count ocount sub{pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def/HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def /pgfH{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfA} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} bind def /pgfV{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfA} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind def} bind def /pgfA{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div pgfheight 9 index 9 index 9 index 14 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfdir stroke 4 -1 roll 7 index add 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll .5 sub } repeat mark 15 1 roll cleartomark exch pop }bind def /pgfR1{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfR} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor fill pop}bind def /pgfR{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 8 index 8 index 8 index 13 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll 4 index add 4 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch pop }bind def /pgfsc{}bind def/pgffc{}bind def/pgfstr{stroke}bind def/pgffill{fill}bind def/pgfeofill{eofill}bind def/pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}bind def/pgfw{setlinewidth}bind def/pgfs{save pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}bind def/pgfr{pgfsd restore}bind def userdict begin/pgfo{pgfsd /pgfx currentpoint /pgfy exch def def @beginspecial}bind def /pgfc{newpath @endspecial pgfpd}bind def /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}bind def/pgfpd{/delta globaldict /pgfdelta get def}bind def /.setopacityalpha where {pop} {/.setopacityalpha{pop}def} ifelse /.pgfsetfillopacityalpha{/pgffoa exch def /pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def}bind def /.pgfsetstrokeopacityalpha{/pgfsoa exch def /pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def}bind def /pgffoa 1 def /pgfsoa 1 def end /pgf1{gsave exec 1.0 pgfw 2.00002 0.0 moveto -6.00006 4.00005 lineto -3.00003 0.0 lineto -6.00006 -4.00005 lineto pgffill grestore} bind def /pgf2{gsave exec 1.0 pgfw 0.8 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.00003 4.00005 moveto -2.75002 2.50002 0.0 0.24998 0.75 0.0 curveto 0.0 -0.24998 -2.75002 -2.50002 -3.00003 -4.00005 curveto pgfstr grestore} bind def /pgf3{gsave exec 1.0 pgfw [ ] 0.0 setdash 0.0 -5.00005 moveto 0.0 5.00005 lineto pgfstr grestore} bind def /pgf4{gsave exec 1.0 pgfw [ ] 0.0 setdash -3.00003 -5.00005 moveto 0.0 -5.00005 lineto 0.0 5.00005 lineto -3.00003 5.00005 lineto pgfstr grestore} bind def /pgf5{gsave exec 1.0 pgfw [ ] 0.0 setdash -2.00002 -5.00005 moveto 1.0 -3.00003 1.0 3.00003 -2.00002 5.00005 curveto pgfstr grestore} bind def /pgf6{gsave exec 1.0 pgfw [ ] 0.0 setdash -4.50003 -5.00005 moveto 0.49998 0.0 lineto -4.50003 5.00005 lineto pgfstr grestore} bind def /pgf7{gsave exec 1.0 pgfw -2.50002 0.0 translate [ ] 0.0 setdash 3.00003 0.0 moveto 3.00003 1.65689 1.65689 3.00003 0.0 3.00003 curveto -1.65689 3.00003 -3.00003 1.65689 -3.00003 0.0 curveto -3.00003 -1.65689 -1.65689 -3.00003 0.0 -3.00003 curveto 1.65689 -3.00003 3.00003 -1.65689 3.00003 0.0 curveto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def /pgf8{gsave exec 1.0 pgfw [ ] 0.0 setdash 1.0 0.0 moveto -5.00005 3.00003 lineto -11.00012 0.0 lineto -5.00005 -3.00003 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def @fedspecial end %%BeginFont: CMSY7 %!PS-AdobeFont-1.0: CMSY7 003.002 %%Title: CMSY7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY7 known{/CMSY7 findfont dup/UniqueID known{dup /UniqueID get 5096648 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY7 def /FontBBox {-15 -951 1251 782 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY7.) readonly def /FullName (CMSY7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D9DAFF1B3EA76067 C5493B69F73B89C8B61804A34FCEC826343337CCDFFCE17BF343EA8034BF95AA 14C56862C2C052569AFB236E1F1795F05150C8F28DFEF6BF4BCBACB678D00036 30EE84FEB44B1A8438185EB45654E6853C1159B073E54292D135F0961A64E8A5 AAE49C4BA9C44156C123426212120F99F3E8B7425752A5FE384AAEF755A8464B 51F015F9E2967477D57B22627D75CEF8AAAF0AEBD504EB46D0289DFC8D86C972 F042BD88A90A53613DD93D8A7A8460E63D85F6C15C000C0AAEE4BD5130B6E668 8C9B3F3FFD804745DA1D5EC0AB85C96E1724FA67F9324C59275415182AB48D57 9722DCF602396AD4B5C075A5A89A5D005C9FE11273E5FBDDD1800F11BBDF6AEC 6711C5633A73AC5DF038BA521AC492E138F7FFC7C5438FFD32FEAA1128C66E83 0D3AA40665F05E62D7EF00B1B0596162C402A34B6BAE6300D43F3DFCC84860F5 C0F0F1CE28FC60642BBFE9BC9102E80146774CDC88F9C250DE762D24A3484BCD 1D26B6D9FE981CA5AAB2A4BEDC528115043DC18D7105735D7528C2C5DD89A812 75B5D7B2E5A586FBB0C061E708F92C1552F64A296490BD0F20243986A4707FF9 8AB3C917B8DB92F19DCA6B9D4A1DB57515E51DD85D5C9D2CAF7A036AA3F9E9B1 5B5E099CC05A9126AB274C17D75CB4FAF78052366D2F21EDAADF84B22A2D645A 3E65C4BC0F540B5D9609D88DD0E4CBEEF87C16447D43A5F98528FD45ADD10DE6 41AEC411FD6929308F0E4F48A8D9C9EE386E920D41C1CC98A52073011DF5BD28 5683F280B5CF7F27DC50930C81D344FF5A8A9258A207D2531AC21A735B14155B C22C752DD22AA33C52D6D4D053B3E46FD4C9129068DFF52695A3A9184D04E8EC 93696A3FEC3AEB3814D9015EC14C22EC3ABD5070E8C28A3B42F5596D948212B4 AFB9978A0A361135C9E18CBDC98E0D1E8BDC17E25DDB3D52E86127E5AAECC55D FEE61693190E378978EF1BBD4D1AF005D511C7607CCFA4BCBD3EC427CAD82809 B725B25AE8A03EE88F80A7732A571A2317E0B6A0D072EE8CE2EB9E033CDCC899 B64CF4FA1C708A885442062F08D3D8DAF44C066EE278714D1486EB709D327865 A483F62709E89D08291F044325208EBA758DD459481334F5D9AE3BB61B3020F2 A4538CFC2C94BE84C920BE80806FDCEE394230730E049333A7E16509207514FD 695B5E0AEA9E4A9737311AA0B33B15F6769FF865D1ACB63DC6201C3F1062A3FD 1B446C1857460745917A36289DD57C94FE6240F4A40FBDFC10E91B91B79029D9 9F1B9C74E8E5AA011A0ECBEC660230AD5929F01D0325D15FDC0040406F124021 02AE176F4C98BAC1706F03C2B5B40F325A50CA4683B2BB4605E68E72D0CBDC2D 96B3BBCDD01201B650A7E7744D58D1E36D81FBF72E0A875FF29B4C109A1950FC 9621B18D58806392EEE9841794DFD39E3C4E20D45384FE07F9D445F143B922D1 AB350AA6DFC51FCF767B141A392D6A8B633AACBCEC9F56A0CF40AB08020EE63E 08CC0BE01B40E86388A65F5869F2F4D022DD4B912031CB8CEDEDFC2473772569 5B28F66AB74CD7902A0061AA3547D13C7F0C6EEEA7B0BD316694A94E4D672520 EA044AB28D8D01076C486CE456EDA1811F7ACA75D27473080D27D3E681E35FC6 447046120C6CC4C17674F0F051570A79DCA74848F3F300B58B19018430D99858 CA5504084D6BB74CFDB635B6866974A9AF05DF201C69352B2663B0623E7828B9 5EC5FFA8D8F10A7C28000F8C679B180067D5481D6315BF1C4194EB171C8F3CE2 4CE319975B9E948D907F9F7EEAF07089844391555F329E331D52FF114668B8A4 80704B3C6AC0CCAA2F5D043CE44E65EDA89A0CA854CFDCB11D549B7FA72EDB90 D35353C34A771B1FAF96F83FCA5258AAB65384BAFFCE448690C1432A1F749C20 5817205185F973FA098BA856584753E75EBEBF387FC155202885F5B67117DD7E 70D1CD887183C5573B6FB607D4F6CC9F8B94B09B3F3AEC2EF1E6A320CF6D0112 63046321941D1FB3F2140B59370AA9387E24D579D389A166A10C989497FE9549 34E1AC2E546CC06C5308460DBEF3E1AEEB6CBB0FFDAC458E61DE3391480CF5CD 34A647D4DE15B81131B7D1F9EED4C6837A32E89B0EAAD6A05F5F67518655E5DB 224D4833CEC60D5DBBDB8A03FB1A9730589BB4F0FF56191D17E73B9562E0C356 B188882B36F9505F6F42EB2644FEE125C2A7D12227ABC8ADB924E88B0A9E8DC2 79762523B0B88DBBE6AC7968A46BD9E9F0C3F03F5F64724CA07782195F01F130 30DBE895C212E0EE20162D863F46A674D85232FA0DEE69A8DF019794AF6873AD 9CC2A5EEEF9393313CA519BF95C08ADF7A75B6F53EDCDC39851D20E58B97CA57 A7523717AA1821DEA94C8A9F8B82346B16D92D15AEDC16F0011A45A44B09DE47 08CBA46E8511D0C5CC83F952EEFA4ACFA7F3D7FA5E113EF6B70E5ABA6F1AD3B1 E4D3B15AC6D5C3BC70A3946F411A7D965D6FA9D7B6C6ECE19B2C29A2FF476251 EBF0CF3BF658A1D896323706172746F58B2DE49F8B7E431E20304A42694CCF73 11C4E9E96260CC442E2938A1E27EE6744C7CAB01634C8210CE40488B9CBD757C 4277B5E3E43C7560291D945F9128AF1F85924003418F96458ADDC5BB8EC431D5 AC9093D20DEA69B92454613BC1A82DAD4FBF8E56084494D9D2FFABD82A7C9847 171FE36B265B546F3072B0923840E6C6BB12CA53E05A99F0E8FD4F5109782746 7CAB9B35B68050230736AE624B7862D1244C7D9BE4D1CAAE21B123D1E8372377 F1FEF269A9A2EDF02CE0CC8BF92FD7EF09556987B8A3BF6D8C0A663DB6B9742B E9AC61A449106AF1EA7ACAD40AC6F59427CC51865E6A90CF2AEED8D6037BA70E 4ADDAF622CDE877C98C3B2006B4721FC9BA18E30F0752BD4ACE36221F5CD1497 8FEDA5D643BE2EE007970A68E53D85975116E6CC09F0039A09EBAF0CA4B0EED6 A485CC0B69E526033FD1C1190BC5686739CE13D1AE8EBCABC01FCFF26141867C 44ED291196E546369129B9F759FDD7DC21BAF0A528FC34BA9FA8937813953644 C539F9DA4E55E83DB3D6DA309C562DA1330B157957B18F7618544AB738E25F16 F0517CD13C1F11BB8EA056BDC575D77CDC526EF497639DD89C2098660C5C45B2 D7CF715AC5E76847E0D3178360DAC1BAF6ACAEE72453B845B9F86621C166857B 029CEF5AFE29D1EDB4CA3AD7D008B7550A779E0066D7312DD6C7AFE1C0BFFF25 7B062B0DF30032EA2A2FE3CC46C96A3A0BA1888D1D2B05424A59ABE3EE928ED8 B67F507EFA78AE128F58B54634C7F534B3D0F4AFC23E38FB56EB39CFA425FD37 848545EAD03EDC5A9E796CEFB345F527615C785963F536972EBD9CFC4A6A4A07 5A31A508CA147FBB762ADD198CE36DF86730FCE2B643D1E7DF0BDE800DE7AF89 44A36B04193E44231E08919EE91A8B559646DC4DFAFF0AD891890A0A88FFA8EF B066BCB7AFCA409C51889E7FEB33F19A3CB1268BD0EA74AF29C1401BABD16F87 ACF7DD65A8513DA9995C5092C36A774BC4260113360D29AF7ADF5D22B5B58E7E A9BEFC33B9A91D2C397B27A81087376CB623318A8362C3FA9CBE3026675723C2 E711910DDB328E0EE3FCE219F44FE528B70E58B8E6CDB4AAB48237DD933D9639 E9D4F9EADAA8D46537D964D75C27F210B0C2473CB60D65F61BBD91ADE01576BF 77C49E31936138B0FBA066BE910DE1B1F0E4FFB5E81038E8656ABFF08DFD923E 6BA2AFEDCE6998BBF7045393C34811501586A4846E5B942C8E99D4C481D3AE60 2796ADBB5242D59F1116EBB828014BD903EF58B223DFD18BFBAAE4D348876B06 CAC10B7AF0DC270E6702A3F75D4DCEF872F2CDB9470AC9A1DC1ABCB55636D26F 9CB6BF27A0DAEB1F62AFEC12F55F78C9B59AC6DA9DB4B45444B0C582DB4DB8A4 B31EF4AFB77988E92FC0B257374B4408406490D9AFCC495316D6C08BEC9A76C7 12371E14417711EF802FB7151B3F6A2580C97527C9C3A0FAAB8D62FD992AA18F EBEB36F7910186CD5F70A55DFE932757C299D9D2289796769A00A0C6ABD18F82 E0D4E95D6477E67B4C012DBBD098FE20E2F15C412DD2AD5471A65EACE05B3A1A 0C9C430BAEF4887F2CCE668116B87FFD9DAB4B9B3605CD26E6B12488058AFA30 8843791A95BB322DF5C47387F3EC72343855D6B23D72144EB5EB5157B8B238FD 6C71DDDA64C9539F66A7DD569FFF43DBE4A8F0608A3CBD354DD9BAB5E3C756DD 92C3C1B3E169D86A2230299432488BC04A87E08A80809F9968676DF9157B1C91 27C664ABCCBA9997FAD8966F766B325086899D1FE44581FE07C97688B3E15B0C 234A22646C32BB965B9BFD2CD34854D1488AAF021E169BF9CA9665CF040E25A8 16156C80A2F47397CD370AAEDA731E0D14FBEE1E51A17DB972D96DBCCE33F937 5CDBF1A650BF1D3536BA4CB7A1CACFD5CB457E2368A660A62AC26E64A631B2BA 6B08EBE42E02D9B1B2E95BF9F0A6B59C96A122968FD46A4D17BA3D018CCBA0F9 80BA3C1E6C683111AFF79303CF64F1D2CCBD7571C6E09DD9B27B8E101BE219F0 E075880A0E367885AC94143E777DAE455B990383100EADF786300602C2CE28F2 4F44662FDF03BD39A5181912D8F1243C36FF88882CFC4B34C1D4EBBC01D96A7D 9CE5303042D1B21042E4FEAA455F22A01333FCAD7E4AACA5D3A5386331985F6B 9B247EC6310BB07507321BEF3E4ECFC3B915AAA6E029B3999644C987640863B0 5DCF58CE479497AFAD1208FEFD1796E74467E9F7867C313A3412E6923F4C9144 C69EFA17965056DF043DB465BF2F1E191706D3AAB47E6AD5C9767E4A73B29F2D E2E579D0262237568F82B360ADB6D0219B7535EFD02DD0688CDD23D84FC4F308 5D2D0010B1A9F4F0321A00C154672D21708B66B91ADCF98BAC7A2F94848E9A4E 86CC82EDD0399BD9F13E43359E71F80086B9B0C3B6D08831D4479ED83E7892C4 90C477BD1F06DFEBBF60F26516EECDEFE4787EEA8683754F2B257D0BAA607DBA 35EC6D1618C2FDF3881827F92D793ECF152D761F2423A96210F582DC9B90120F 26A33025414716A5E6F56D712E31BABE5047EC4855B767AC63D793995C9E074B 6E35C7E5255FBF4C3F17E7AD7B2A6C5F7459794FC94306B581536910F244BF5A 3158E821CE75F4B0565EBE985DF24DAA92F9C1D848EEC6B88E21FB6C51125872 1752F7352291960E5BD36F78AABBCF6DAA4D07AF56E4B6058AAB13D41BCDAA14 C0D63C6807FCD0E2B4B9CC892F224843173A75DC53A8F0FA396959C2E2CFE3F5 9B1C8B62797F34E7A0BFCF0787C73FEF98442234A617CF161829498035D30B29 ADFEAABD0B496E8A2E764D22DB7737F950FC5982F1C5F4FD414C1B0202F40FBA 62C81B8F0E836CD73D79366FD62388B437B81FC673442EE34BF27454F72A08F3 389E60CE28A050601A42FB4491C60DC02EC008E6B9DD2495522BBEC7293E2923 120584E88412DA7137397B41A28706B1CC6BB0C80709A2A4BA79822D245757A4 3EE454198942ED2316FAEB981F7615E642167620EBDDC5B271E273216EB119C6 4F2F0412F0BA6E3BA396217597575C6739194E1F839232FF088FDDFD3695A5CB 9A0E220389938596D8BDB183138E1F73F64512E4FAB5E1328F9B42364E3113B8 004BE2CA0B074EE271BBE0260D31CE555D535C16EBB528747EBAFFF253E659DA 3A377CBE0B296276AACF0294CF90FDAADB4EAD5E2F600E5B2A018DEFB86FF61C 84296480A425687CCE37D671472537E897AFD4B8C6A6175E1ADDF9AD24DFC5C3 A73E18AC2D9B28BDA2F17D51DB3521945850DAF0EE48B0FAC271544C1B4F3B2D 53BFC8DE32BA366FB1FEC0DD6C0B1FEA374CBE2B96F5B235A1D83A240DB442C7 1460980A3E5B96AE3D5784DE2C2DFFA671E0A856DB2FF4130E5905F3D5338856 C11A468D867D0C6EC585F1AD3E7164B8598BB59973B9A952FAE819F052A6554D EDC342BCCB0525905D1D27ECB9EE43847B69AE116F494CB2DBBAFB2773F1A3E1 C75FBDF8D66FA5AB4005757D631A0D9424FCDA91A1D2AC6FCE7CC7A23E84C65B 3E92BC684F23467DCF8521E0E27CF1441C487EC6E3BCA0AB54BB137E83776009 833D772FD225E88A8BD992FD69819B3BA90BAAD1DDF16E4326190CC4BF9C30F2 AF7CA1FB38E6387D9745FC5E176B248B1581BF7A4CA2FCA8E423DF340EAE29AA 7E07A25FF838F67378F9A6A9A0B404E01E86E64FEF71DD3D540D4711AEB1974D E2E0D485DAFFC74BA6B8E9AFDA245BC8997BB39BB6BD52B496A09C68F7A8E900 8DB3007643416040FCEC85B407EA0A946827771FBBEE49A3DA5542CC5173A31A 0280AB8E922C23C1BDD88D70627EF124633C318E7C9ACBC14AE216BFD41C0B6B 3A0161757913CA1F7B6626963C09936A52E73DD9B3D86DEEE73C0293A646FCF1 21D4C33DFF1671DA7A53E77E20233EDE51571549AACB7968602CD03EE67ACACA B231661CA9DA2BEC5795A83DFAF675E9B052C8BDD51490F7874C91EF5ED2E0A6 BE9CBABB98A950F7E55DDA3823036437C11F614E27DA5BB8BC6D955FFE54B825 0201275C2C49A3908BEF1DB3D87792DDFFED23DE7FD9CFC284F6255C77E54A39 C2FDBCD28F2938E4CC135829AC1867CAA5705674062C9639FEEFBE49D6108091 7C58585B80464F7E69966D7933C7019BF336B88B9E0E7073A85EAF297B71B303 31EEE9121347A482D28CCE942AF53E94F88A97EF2F1860A92CE29A14495D67B7 D37E207D42F3891E0423F5BCFFCAAC057FEC683696ED6FEEFA65C8FB6F1312C5 24A1130192B4179F3B08DA1C951D988894E7FE7CFC28C56992A1CA82BF8BDBDA E021F16E630FF67201BA4DF5F3F4D6AA65B8347FC1575C142C6C1868E8472BD2 CF191137AE1B36F32FD84DCAD50644AD55EBA2694C93BDF984A5C9E7C92B73A0 26769F00831537266FD2E711AB3F8AFC5F3FDA3C9E6439FFC48C3D1B5527FC56 1FEDE991E66E8465C0E395EAD0A22A2FDC001E449AB9C5E0EF187A1DE9B74696 BEB6A525DBF3A60DA2FBF1579150DEE1C5D1B6F55FF2708CE23289803CE123BD C81E25DB96551A13AD713D5C7BFDD3F2E1D5C12463A195442B51909CC1724E50 A1F6F4EADB3B7355908F36F88521F333C4E7C70B094209D1F883B961DFAC32BC 8C5A2CAF77CA5E6AAB714CC0AF2B42FFF6F73301FC71AFFA9B33A2153F55C2DB C1C111874DEC37CB746BEC9A3A9A37A2DD098CE7C66B0FE38460ACD77A47D53C 1550F857FFB733B5A8D02FB56790A09190B29CCB4F4A3058B1C82F0CC5E1B2EB 2F8E06F2DE531E1EB81326A8EF0F82843A4AC59D267EEE45730895752820BA93 A129C22A78C1AB28BCF67AD5DF372FECC9EE6719A02E499FD5CA866688E86089 7EE8E5912087E0C4588DE38428114785E0CFEDB1E2EE24CC067D107DFDF1E2BD B1C4F9C6B740F3DEA0BD315581004E851ED5A9F66C4F9E95DE97D355DB06F482 A43B565F1255A85710B15A281E2F034B1C23FEE6CDF3A043780CB6AB18A016F1 9EAFE545CA5A5B5AAE2459D69D2151E99D029FB5C1649B9DA784BFDF7D177385 4D8B16B9922D149FFF6B4F99311D52BEC9A9FC098E7192180DBB38767DA9B9C6 E8CFC98615219EF3AD4A8157D14C72BA3F91C8B78381383E0BCA1A5319749E08 D67D1208C693A6640D1BD6B9285AC0D3110CBF8F7747AD12585141C3248D0BB5 BDE892F91A4B3291F21F30294693518E4629A3ADD7C8640E424FF615602C603E 1E14DCB3B17D34C090BEAD2A523E260A599522329B698729A635CFB15BE7E79E 6A34DAC7C3ED57340821A4E7A0C7F88F64BAA69BB80DFA8B659F4756878E3044 E1DB7EE4FE60074AF97818B3D36CF51110191B4E10655F52CC5D11F56517CFF9 04BA2676F4147DC8192C98C555B001D54301853030B2CF0C068ABE831158B1A3 F30593ABD51F5996CE493E0622323FE93B292844521051C1D3799C07DC879EE7 9D047DE1C7127E2DC6F94E30C34FF87FA03DB3A3D597697C133CFC5A9448E067 51777DCFEC80352A92D9DEC0A2F40580A0242C063CD1086D38FF5C6FA1BDB0A5 3EDB5499AA2322CC73A38FC826DC202679AF4A7B571509B715CB8BD1D0C5D1E5 9F5B2D6DF5E9 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMR7 %!PS-AdobeFont-1.0: CMR7 003.002 %%Title: CMR7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR7 known{/CMR7 findfont dup/UniqueID known{dup /UniqueID get 5000790 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR7 def /FontBBox {-27 -250 1122 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR7.) readonly def /FullName (CMR7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 50 /two put dup 52 /four put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB981ABA2ACC9A23A5 3E152596AF52983541F86D859FC064A0E3D5FC6647C3CAB83AD4F31DDA35019C CDB9E3DD3FEBD4C2B36BA3CF6E6C7DA85E25D8A31A9BAD39BDF31FD0D1790707 9DE6A078E8A409D8295F642DF492AC4F86AC84383B0F4C6BAA7C22AD5A898A71 D6CB34D2CD12266C486B75E75A69C14819DD9BB8159088E04D4717E576B8482D BDA52110AC8B8A80E4E9D58F470EEBD3CF44A1E1EE8DA318FFF3611B02534FC9 F4018C7C57E80570D2F634D98BE5D5EC6D95051157F0EA94A3D12BE0B4B79939 F82F8D73136D3337C44E314B0B16CB030D9A12E01FB667105F334C3EE965E5A3 D410D2F1531547A4497C355AEEB295CD3C5334BEE5232992960B757594B89F3E 52095042DBE6B4DA3C3AD50CA95EA9EBADA10630B500CF1FCCA7D60306743681 7E428D33B7F7C40B425CD58E4CD8AB474BCE6A307BC6C6EBC15A8A96E0E2977E A33389154536F5C5D8CF036D07F24094E779E5ACBE5502C92892F10F4C6DB627 C7EC4C7BF20B39418A8A85D7FD9B0EAAFD871DDD41F93BDE5FE619AFB8711824 DE890E62C1969A6FE28DD3578AF43D58A728FAFF0B9FAA640962C8F35A26F76C 67F3548D6DB54A25CEB368B47F97EA2B0C4D7C0E7894A4F0C823C6C1922CF9DC 10E05600556F1C7C9AFB33A2DB6F8730F70D6BF94B1FB0887451F2FFEEF3584F DFADCFA9A2D4846B8F0E51620E1327D994CDF973B837D10C90FF76DE22B47CD5 EE3183898D156861AB4DFAD34A1E3FA260B8164E6680BF58413A553E88F6100B C4F4E8E972C81A5F88A7DBCDC308B4C3581BCDE13877B976B1F84330839FE5CF C78551620EB803DF94A5C921F8EE24F7EF8FC4C3E1653514212631F54F90E3DC E9EAF96E998F340C4F729ECF7AB430FDB7C0BE3DF2C0D23015820E28B743CAD7 7F0AE95413C3EEABBC69E852F53EE1DC260D7F1E712BECEF2F18437DB23D8E74 2902AAFBC733AC5BAA452DD6F3671859AD836C8564E99CDC4183D8495AFD99D6 1F0D65B6588CE7546717911E25BDCA6C2649E3A7466A3E2DA7C7994A30AB4449 672EFD00632EFA8629C1AFB7D53D801028F77C864869FE636213A69173003EA6 BE1ABA95EB07B13D1594BEFCC95ECB0A9CFA9892EE0677D6B6C250855762B7A7 8E4E022640F93169DFA0303A0D5E73BF3E0F4D4AAD10FD7E4EB20532BA30371F E9F480F9513432946F9828AFB5D4AEAFA5829B2CB544E5EB634C4537EF7DF08A A1CFD94A52DCF0E7CE4C5EFFB01E6D50558B75DB4C8D5512B06080F27BE62E01 2EEA6A0357441401458C842D3DD4C35B8F561D816B336216CE0C14BF77648AF5 E33912CF95872A1E1AB9A18980A0B29A881D13397C15E1CBA5D3E0B27943EBE2 F3003D15EB446BCFC1C231832475D5B7AA19E4CFDE119D6CD62D053C6D29C333 5F729791D17B3F7108074EEF4D1BD101CB33E01004532CB0D716D2E54D169C6E 80163E70C0E9081F31A1ECBAE079D2A518B790B0CB2CD03DFD034A0F4788E800 B0CD2DC1FAFDD487C2F381EBAB2A2F3F3AF82021B211DC9CD2FBA6A1BB3D4AEA 4C7F3D9A5C21DFF284CCB827D205A69638E98D5DD8E36AFC1A4481B5CB2A2E8F D6C838DA6F81990F5ED928DC7457501B5C979FF4CD20A830896A460C5DB13D56 A3B2B5D9B292374A9BF392894DD99FCD6A1E655AB395E839F074D1596488700C 4E2891C8AEEF66568E82A8B826F9A28FF84D4D9BDA21F638EAF96880B4EBE0D8 081982F34831A03BEE81FC177700C2360D2A48915EC40D5FE85B400E175D5AF1 067FA0097904FB647757BB44B4042D30D1557BD0F7922D731142FD682139CEB7 58CA4C8C240A0B86B1888CACC507E24E04020BF1882BD9B4CAECFA97DB24D7F5 AD64C69454027F198BA35881B94EE9159A2D73E450C3BDAED66B886D6DEBC84B 653E165176228F88993F12A170775A8D7038BDF2FE8DC1F7B98BDC02D1E6686E 9B834F6C0AD90780B17DFE25F0A4E470CBA84E73F2D22BEE09A040F14CFA2C14 0FDA5A5149B5FAFFE49F55EEFC43831BC43A8326FEE9C7F469C0FC3B000884FA 41DA7318EB57262CB96FC4EC7F16CA07FE1C3BE8C2DBC8A8135953D6DDF20BDF 75A2B6D26074FCE752BD32FB9F5CA797775E8DB9BB9786B469A3CD65A0D9DDDA C2A166E454A94860EEF5B5C12172DDFC576A03F6E6F8A735FF21A3E9CCB4CAA1 3064893487697986A42CB5888B2B0A79FA3C74E8187BDDF7BEAB884B70B8D4AA AC6615745AEB906E08BF831CFDE222F58D02B428D55E9D5A3CDE74E42D8A2CB7 E1A3A9439B678AD438793ABBEB72B21C58981DAF3EDCE4BB93D95F4A1E943BBC B3A012DE92FED4F232A3A7D60CE60B605151F9C7C18A5C653E5D6D15E5B49A63 73E7A339504D0ACC74B8B116EA88C3EBA2CC631AAB29F761E5F062966AD2FD28 7FFE52FA8A115DBE23E471094FFB3CBAFBDF11B7E9058313F2D069B2CE98A962 64645738F02A31E2F2AC11628724034ADBCEE012721EBF0A567893411F950410 B20754A7510D041FFA6144AC9CC46D846B82581F20BBD001D34D9764010824BE 61C30D05E5C5D100A24F1917F01799CF5BC4E50FCECFEA732CB50196825F0E08 8A1EC868C6D4357857EE2957E081A0E4372E31A8ABEF23C3F2EA0FEE57DE4D08 61C570175C41AA0C7A3A579ADF593F18B4AE3782D2552E4E0759C32E059EE741 2D8191E381731769F6648B3581CAF11DAE46471896666F18F02918B0860BDA3C BD5DE777672447C23C62ACFC2611ED5239D6A266FDA6031EBC5A530C1A2FF7A6 B4380B9A4C877267854AD1F1677CB5433F28894ADF93D39EAB94541A8D232E08 22D082D0951A60F62B87DC028714EC74133A4D65F7D0D1296C0E189C4A42AA98 28E8AE7ECBB9FC8DFABCC6EEB1E9FB06227F90808EF31331CCC5D4C9A6182181 047902DC9FD0444FB94B60FC74F3B677758088CE6A159D940C5CF682335E756A 8BACF06AD7225D49B0002392C889B0FE2C71311D2596F4903D12FA20BA2FFE25 A0804B4BC282929BE31E0F46B34532CB5795A65218CFAE21F390792DA67775C7 B91A2BF4C16DE4F6551DAE3A5827F616BE9040EE6B1008DA2F99A01EF66D697A 6CD1A44E0A15D1F39EA8025E886A68A1E9C334327C7703EE721E497CA924AC90 7723106D913C5ED4BA4FC743CEA8D0F5172526107DA65775C0B1B77179D336C2 9B09B608D80B1A1E87CA1A84A833A00D980D919BFF56F6390E9D5B45E9935CF5 E69D003564462F750F7DCE02DC23CC215A0696B74D8BD3156A392A94F557655E 00BFAA035647568ED66157FACC585E411F7F428569C147DC43F6E4FDE693D0F3 9917BEFEDF61FB980B85515FF6424824E2D995B05CA1E5D3E8BD8D3281DB7CE4 E54923E84058FFC0A8A2C491327D0F87CE4C352B724167CEE224DABA3B95757E 4A419594BE4F92E78BA6D35D4C93D31ECC3134B24A45DC32445725BB044F09A3 AA8C31EFC0A2944ACE2F2CE054CF24DB350FB3C71115518C24BDC0F7E54250AF 9D3378D38480E1CB9029F31570C619A28F065CA4FED5665EDB96712ABEB33B9B 4232C00C1B0215F08D53F7E430887035AC25BEAF06942FD1B6C442253C887AB7 D694C1A6115C8990B4CAF1E81DD1FDDD6B03C00055BE956BE7FD8A4E1049AE69 EDA8593CBA8C4A41E046C689FBBF9F1B64E5856A7FB1C61EC815A56DE2A8ED33 41F370B8203D4E5B19C63AE9E6E0D26F4F3814B5AF48AD30EC9B8402C941FDD9 722FCAFC638FBB835F83DC77F93D367266FA7DFFFCB567EF82B1695AB4D94D09 B18AC041811027229DF431F5CB2BBF6ACCE9D500C8F075A74590641C1A607C56 D2B8624797BCD9C91C3177818691FBB4744EDB6056464A0B95B8D63F7C22309B 82D6126E2057BCC9FE5566D96B7A9B201A09B0D3252A5494C8CA2C8BA8A13C29 37EF2A882D61DA708C279F663D88A8E2999A0F3B6F98C49901A7631BF7708B67 54D0B4C52BF4BE0DA0439E6763A7C9D639AD4092E77B13D3510DAE1475C978AC 796F9B2AAD3BFF35C5A3E19B5E2BF704B3BBDF68CE48BA4FA2496D60E58888EA 28AE12D00E9F0816FAC190590A865BB58569A91BF0345D01230ABA361442006D BA2C90EC2036BBAB79EBAFC3F217DBD5854C519235F9627A1C3C71D21ED38AEF 0BB40F3B86BB9F09A3F309473D8757AB7E638DC1C59A7F9BCD49DE4107A2E54F 422767FB94048987847205584309397F554744690ACFFDF5902FE5DB355930B8 71863217830DD7A563B0B3A4025ACE75B0E777B4414B62A13B50C54E0E6D47E9 D43BF769B9411B74E1069BF71BA873B4B8973EC9BA492A5DEA58D267872BB246 10AA67B143D0E2223FFB4991E583E629413CC894C3FA4869B72D19CE1A0CEC8C 0FF5E5A3EC1FCB7D3C4289813F0D249A11B55104BD60B2A89BEF44CC77CCDA9A 065B8B83B4F4253AA1D535290DCFAA4773452D110D2B3370F9E2FE5432B54A9E 644EB3BA9BFF62347F376839024CD5EF3C5DFD30F412DD5474B7933E6A1AB63B 4B12F2417C72D0543C26A263AEA53E5BAEBD67E23553A72E949DEC556BEB5D09 C4D7A89B14FE4EC68D0E3E9D65A64B285E53590F418EDA8175113CA375A29930 DDCF4C71ABB26CEB800C2C2B253AC1F53651C88A56ABE5A74F3B54CB4FFDDB92 60AD7272BA25EC2F6FB759AA6E1E7964FB55AD09F4EB25DE45FD01833947BD05 6266AA8ABB7DD792941C7A070FCF3A4636FBF8921C70298D42FE92F079DBA2AD 6149D9CF9EF7264DE6DFCD4429949B15EA90B596340713BD61926DDB2BB23BE8 F9DE38A31620A817420A245946E551463960A8C5C7295E3B3D6A59BCDF5E472A 40B7A2CDDAA43CD8AAFC411D037142579D11054A903E102DF0D0C7B5BB854DBA F3F086AF991F7F5D5C730F8F9AF213F25786F3EC0E54530FF912F4876FDE16B6 A07D0DC4FC46EC6363BCB68B83ACC448B801EC43FDD2F8BE0E93D809FF81E38E 176AE17C67C85FEA58EC95435434C49A950AA955D8B20989C550AB1F1C31B7FF 99422E1F48FB7D6F327C6DBC4695A03903DB275B94CB39386E46579271870A25 21823E75C377E9D5B46655E8CD8F986372CF8BA846423E26582315A9D19E0BF5 305C32B2A0EAC3ECB275B1D8BE11A37ADF524944219D94EA2C5DBDA768828B6D 775DA8CDB09E0570E4ADDF462EFD8D3FA3F86B1DEECDFFB699AF6507257C1879 16FC615868C2D51F03CD57BA38D42995D9164B257441210084DC409B6EE4C119 0B2E17B0A8D5326DD0010E4A325D5F77BF935693BC90A00A28C7B5F74817DA39 F47A41E32F4F92AA04D30D810F7B1484EB53AD8CFC8CE8928B570314E0F713F8 AF127227190F9C16BB73D2A217FF801C391A29095DA5E4974D137A0CAA7DE702 E20DD4755B1D78739756A5E7EC3542B96AD6844199FFA2F5F2E9C64E2DA4FB2A ED79869F745C59D235438251BC2E6D26112AAED20E06021D1AB896EE1F1DD2EB 437FBD4A25E42245C5A647493FCC9922E6DD7AF57D5D482921D1CBD6F0F02949 C27777144751C1E72F4EE2BC343D4AE7A8A8758123B54FB1A026144C643651EF 0907A376945E19A8FC7F98A034832A5820A481B0823F980F59623E0511593FEA BDE6EFBCC0383242CBD4954027B075B21F10472059A480D6E5ED01C3B07461CE 9810251A5C5643EC7403130C2246E8616CEA25EAC7A0076731FEA8CC43BCE3BE 933FCE61067F5FD402E67E2B9DAD954AA77C5BC86BC5E4BCE2ED676D8D8EC7D0 ABC5C86D82180B9D5D7451C71B5149B6B67883578DE9909317928C0A92E3205E F23015400A1763A6FBF67FDE3318AD2696685A1832FC31CF38589EBC7CA1C818 60D2B2211E04EFCCEA88D9A9082E82951EEB123924A267CB03C48889032F2892 4227E217FA28F87E01CBF27BF1EA60641A4238258CB7AA355908FE36D90F5CAD FE992D03A33E47CA9AEBEFDA57793F39DC6A9E85D5B289F6B862B35DBCF82E43 5CD6A862F6FFAC36478C384C3BDB0148CB1FEDF55969C776E77917635B5A65EB F2AD351D21CD3822D43289FE8EB0FED58182997097C7E9F4373553AE1CA92083 EDE3BBE6C3BC7009D15AB5FEC6A59E9FD1BCC7B2099CA15FEF083B9CBF7B890E CDDDE6BA0AFF306C76500C945DC91BD533FF9A585CEEDEF79238C54E6168001E 26FEB29E523EE501BFA4F60B782B1499B07084C35A2434B4D29D3D8E2C8F945F A9922443B68D07DF7EAA1F4CDEFFC438B597D8943E231B5216808A85F30EDC81 9DF5DD22F54A45335B4C2203887475F39D247F0E7347BACFEAF220ED82F9263A 6488E73C1910023E505FDEB143006C1A351D441AC57F9D52D2C6D63D78C75605 999885676BBBAD56074298E0BFDACBA1830BA58E87F436CC670EE8EB1870154D 72DDBBF3794F8CAAA3F1E11DE29752DD99EAC695838A19BB67A1FA3829B6E0BC 5301610A0351AAA749F456AE31ADD87D6ABADCDD1FB3CE81C3713F48780DF407 530CB284B2AC709F52EE7AD647DEF9FA4D2A867CCEF728F3D40CF34C28D21527 10160B3DAFB5FE16AFC9D36C6EC4021FC189005862082BEA60AC72B63AD27D72 FAF3C2D89DA2648FC4C65104A069212D87144E8533CD86A6D73DC7CD9DBA25CE 7DA53B000266F3871B24663C77723703315C5E4A89DFCDBAB384AE7EB2F455AE AB191FED406F7F6EC9E5B8276EF5C4CBA041AC7E8BCEC7CAE840154BDCA3232F 15711ABD1E867A434E9787CA0A6D1F197597DA27ED2402CB2D84ED082E8D3A39 81E6EB270DCA4E7A90E2BEBD3CBB3A2BE3CAB926192D7292CC16845B6399A543 BCFD224BB52F21352732DB5154FA3442733066CDC3E186D8AA97CD801DFBE43A 116C86889BE198DA88CA978B8C40ACB67E8F7BA499DE68A6FF0DC72C3D00BA1A B378B39610F15CA026F95ED8155CE3FFFFA2E2FEB352DBE14CEE1669F2387B70 55B91185FBBED764266215D518716EDA3DFC9E5DB6B148A553E75AE5E38E1CFC 6EF47B314D54CF24BC13856F4F7C976BB91D143DE32FF49BFFC87E17885A1893 BA1B8E441B08EFC04F7D103C1FFBB665194B3D0920473740C55FB1C50EBCF717 A2359B687FCEAD65616EE89A68F8D91AFACAA0B238EE4AF0279AF5BE5294C3DE A7E1F5E6248C0210E7D40683F04B12A933C746ECB517CF94BBCC6E4CF49AC715 D8005AFECBDFB7A6B417DB8A28F8E9EAF39CEC1CA64DF37A5E66A76C26F721F8 A63B003A040A62F87DCF61B298F960D510BEFA453F118E59E7DE8CA3DD002EF0 127EAF733D5C61B5132348D280F84D159809CC71A3C6F7373BBFD8D6EF715D34 0016DEFF14AA5F960BF1BB9AC304A1823722843547BB4CA5EA4C41C6C2701C8F 7BDC810443F9DF34BA469A3260009B799871BAF8523C8763544DCD0B382D44C5 F75046AFF85F0B5A3188C2EE786CEEE5496A5AF4BCB0B429CAFC403FB983EFE3 61FD9F52ADFC38E07A0FD7BACBA530D2E4DAB2592AA9564843E7E2305047F060 C5FE4243FA8FDF1B5D4F61ACA7850A604FBC6D6970959752695C90F78961B4E2 C8CFA41082B1A37405AABCEE5BA3DC2B9EA76F486117B84728EC6D8AE6379CCB 402C2AA89078EC992C00D53151E9D82C65643F549A572A20F05107A41BE5AC57 8EDE92AE20B05E2D0C98151CC92D5389A675DFE39DF546A33A84A4C534337ADE B17C34E09145B37CE1EB1D10D42CC8D6E6B127A3809F7202381FDB88D42084CD 0AEAEB8A8288CB56870EA2BE9D0B9DC8291021CA561E2BA388DA3494E433E0EE 5E69DA51D0AC505C9F71562D3E9750F23CF14D2C8ECF0692FBBCB4A92B48B4B0 AA2163A516AD96B9354BCDBEBB351B643BF3CB00446AFFC4A137CB928E99D626 4824385F1E9CEAE6E317451B4ED21EF0010D48D4208A33C438D3DFB71B016A4A 126B01232F7E9ADF658B1608464659CC58C45D6BD570E1F3BF5A898600EF5C02 B0220C942D5ECDFBDA55B7F0D5EE8EFB3D6C6CF47C368F50D56E68E55530B5EA 13006EA18FFD6ABB9885E58B15D79A63CFF184DBCD58E3E99717AFCBB63FCD67 8FCD7D27FA745B291E27AF64F2083031A551C8A8AA175C3DEA7118C51D56BFBD EC6A7B4DCD8EC9487F9E3A959269241FDCCF32FFC8B4512158C82E5081343CDF A498C78EA594DDC70F78DB3A5C80A82039D47E3A8F91422EAE7EE919249F4CF4 2C5AD408D837D078F6A54434729F2B86673480EFB21B5B349F8F7BF71169F18B 5C6CF3C56AD6182A569E3B55C4BFA716AC5CB62DED86EBB886A3B413D09DB25F 259194B6B08D8E39A6A806F9EBE00B6D415B6C115C0518BD6D12F012304E5E89 84A02F587B3988D7DE8D1D323B3AE99370B7A2B52528F61FA79209D9120C9034 B8542BEA1B658756C8C61328BE72261AABEFA88686939D807C01251A0881FCE2 71BEC2B8B25F4DC1E1877210CEB5E2C2DB5C 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI7 %!PS-AdobeFont-1.0: CMMI7 003.002 %%Title: CMMI7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI7 known{/CMMI7 findfont dup/UniqueID known{dup /UniqueID get 5087382 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI7 def /FontBBox {-1 -250 1171 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI7.) readonly def /FullName (CMMI7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 25 /pi put dup 61 /slash put dup 80 /P put dup 115 /s put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBBAAB71645535A2B 6F0F22458E1429F4A67307E01F0BCF6F337E0E2AD89658D880B04C26306F8179 C8121B958459B923AC3B05B594D8AB95F75870019130442FD29578D44F5690BC 7281357A5041C8A809A59D0DEE108E2A07D406656BC74A9F3317CB887E712318 46B2ECAA341F8692ACC2D14ABABDFBCAC6F35858355F1D3228B0223EC73AC56F 3C987464DB829F243E304F4C59CDE3EF6EB53A4EF9BA91510CB89A3407261F58 A2AE66880BA98FC1EF546112892494C85A2C39F9DCCAC5766725894A7AA148E9 42360AE64BF3A4F1F9F0A0D0C1AAFDC4D50C52233AA595B7D0CE557D4A010D86 6E6B76A7E9523E8A6633DA9348BC3F59302F72F492A30782AE7EF220516893D3 DE836CDE311DED9262AF01C506040541EE84AAC539B404B23033EF56D4BCE6BE B05F79CD633FE75C6728114D2749E39FD7454050F67763AB636377BA8E1867C3 996C7D7D4A4A02BC49D1AD7FF174C1F49F1F205BC9D5AE42BCB02CF8554E8F5A D1876C9285B6CCD7B8C165F75843B0AA11D8462B57077AFE75BAD086E9D9F91E 30ACFF91776132F3CACAD1CA5E08B17B36A0E45ACBAC52393B9AF9089BD821D9 CD5A9CD9BECA59F7445D63DECC1B4502D299DB85B6E2EE7C69A1DAB91E22A3A5 89B524FA20AF6005E7A586B90A2C6E5A93C9EFA4ABEF5F7E4C7B81363FE8D2B3 0AD637FA863DE787581ADD7CBE463F7866C40F4E280260ED0E9C8453E5C7E668 FFF058B9742DD3F131C264F8FA102CD0DA05F3114D13D34D422799181453FE23 2FC6EFB01BE420C930B879D671F3DFB036197874725220644A5A52DFB467BB75 8089E4F40CE9401777B9FE1D0AEE02E782A6EB2A185A454AE9394094CDFE7CFA C03C23A78EAF242E4F811E4C83B59EF4DC5ACE4AD37B41616B46C263358710B2 6137314545CA6CE89119B42A3518EC85C68DC07D26839C68B1FF55C4A9CD518B A1FB32F9C475BB6110839FCCB94156E7B3648F27245A00D2966FC4DDE3996BFA F463A663CB6935B596B1582ED0ABBC648AAA8A86068BF0038001C753C8BAFA0D 2058041DFA720B528E2D4B16196DB1CF30C779D3F4800FE662D5B60B208341F2 A66EFCB8448C2FCD12DF0DD899911A8BD96C9B670054D328790E5D388518B146 8CE92E368EB1DB3CAAFCA4834CC9D9D9DCC80FB1F34F39DACDE643052C977A7E A95C5FA8DFED9B4DCE769E4E46256D6DA8FB18FD7FA4E4CED5D486803538F3B4 6D3F5B3C03184F5C26C66DBB4C724918EBB6A89C4602E4EDDA81EEE2BD18B683 FDB459F2CE0A9CED23DC208EAA8BEDB304B00E093DEE926A7B32FDB2EC70DD85 94B9137856DDDABB402B2C76DBA87149051ADC6007018EBDD571BE1D092EBD95 76D4E063AD7D5F62E6C26EDB88D38678F2806A1F4900B0ABC4ED034A818119A4 E618F1A902315BC98F26775E59555A3DCEA1D0F8B20A9084920ECBE3F7F245AC 1182A40B518B194669D95DE968542BFF80FDC89669BC256C44CB66A2AB8CD7A9 E42C69956CCB6BDE8C09AD22EF3196939B3B84EB23A6E071A36D702909E019FF 058F27562441EB5CAE87A4407F67C4390810BE89BBE867D636468E73677B84C8 5A1228DD7DC8EADA221B1BAD5F43E832F20ADE7ADBFF170AB306F5B711816FD1 39B7882556E30F002977FB88D8B28826A75DE0D20354A2D41F2DA8578376F7DD F27B0F59D4DDDF5790E11E3957491DC74EEB7625CA49FAD90FA47AD8E0BDE824 FF326A84846A47A21B70FA549BEE307F9C6970009F963B49A504F0115777826F 1D81203F655C242FFF15BA97E3BDDFBF435B10E74CE8543C98966223818839B3 6BF3BC63F882B0AD0FDACA8C56A570277952E1D83F18BEDF084D2AC004E2B09D 70DE1740D7D220E92B54D2FD0DDEAF1E08C41FD321A8D474982DD105B23166A7 AA9E0129DC88065B1E0F9382BEB4B4E1DAAE3EA5489BDCA921AD5A8175F2841F 9400478DFA99C5E5553F383882664D73FBDFA29BF32E52C28DCE80DAF4839434 022FA515679DBC13FE98968D2894DF5DD69C49BD23D00F5D858B69D1F220F968 F0700E13873579B3CFB658972098DC61F1DD580105BC27795DB4AF11A871CCD6 2E1B9AF7F0DAAD4CE315379A7B42CECB983DAC5A2B9426B4E5E0A7F7978504C1 DD7E30063AE3CBDFB24EA2BCCDC478AB82084FD30A4793F4707D9F8F9647B413 F8A5C5AC6D5EA0E35628CE1096A434FB8286F4617CB4D0AD30A4A0B255A5A356 25AA5A947FD3C4FA44B4AA80BAB44C48CC1E2C6D0A711365A37A58C3483D07ED 301A83D2650A2E8CBA9EE62FF5C2736EC82C1402959F64527F9B640619F112D9 8E0F4A8A3078C72ACF3F34AD855AA4008C96E30D9E8C414607C34E06E29AC5B9 2EE5DDB823E8C3EEE6A8DE228313D476A7F39B5DFBFBDEDDF7C45C1C88EE6D01 7FB4F7BB2CBBD5DF7F0CBD98DC287FA6940FBFE1B3B136613A3CF16634CA7B90 53D5FD5776515EFF5D37F8FCC62D8BEC8EE2216503D54D6F2032D3C2BF861E15 FD1B45B71576F15852EEA65DD372E911EF4CC18283CD2FF4196A3F1A9D81137F F1820EC604D6C61AF318C6C5AB6DA1EDF305CADEF7CC0183B86D31310A09972C A4BC37D110C77ECCA614D1A281EE1C2040B4A5ECB31A3FC61760F608E44332D1 D2C53C7891B505A3020E9E4915F3618588FCEC80B9ECC5E637D8D0F3C94B1F2A C53FC46CAE0AFAA7E12266C212A73AAE60199752C042BD55A5DF1CD07FBDB830 C83E7832D8554AD9C9CAEEC7CED1DAEE622090897641CF2E5B34A353D83264D4 4687522DB290D3BA927BA315EA5D25B0D7B69350C6C180AB0C322B05E01F7C7D F2F48651567F0C1B49AF3950E43C94D78F7B184BF2946B924BC4279AED28F3A0 17A7D8B235698A516D3FB5DF0B18A422B2410C385E7E9439C6D60917EB3299AD E31471616251FA40C9FA098109BB31A54D9C03B2F12947E4E9252A0851B81C4D F39E7FC44752504B589C3911571B1D3EC3BD1E1807F99CED1DB20270E483A805 CA2A016E7283550D1B1D35C226FAB63F983CED41A4D02A2F228FA9EF065027B3 CC69D6F2E278C0A2D238D3A37154B0D22281F62C61D9182A69657B027BBDED64 11E261E47620602F865221A534C5A32E2BF5B93A187911A146F2E96538B47DBB 7BFA7EF406FE940F4DAD17E6E4B80C4F031D71F65657C2F5C8233EEAC68DE8A7 E1FC3055C122C1795D0C71A0284F89A9BF04837F61C9E08DB42644A490C97D34 A5D3CEE475B8D578205005A0D68AF94AD27C0E855BB8EDB74775690A4EDD6543 BCC10CF13283D6FA8A7CF3FE6C4F96470A11FF0B0160D3F9816B13B0BAE0D8F9 B84C7631063FE658D13D108D6FE24A89799FABA72E6A6D1C943922CBE676C1B6 11A4106ECB4F1A7F8A84B2783C2E6A109C58D63FC0B74D8C8A1CB62D527441AE E656D94B1AA8581B4F07B653ED6486AAE1F8ADB30FA8D8914AF24721C74B0908 D84F2EBB91144ED4BD7EF533F2584048DEE37E17CDE5FBC2992A6F924FEBAF07 B626F988599DECDAB43C931CFECF99FC6EBB72F8E542765C26295902DFF60B7C 7B9ADDB4858BC9D808B7F0909690CF8DFBC59A786D48B891937C31A219842A43 234425B4963062DB4C4E9F534C77F4243408805B5A6B8BBF428632CA4AC03A7A E336DD181CE0CF3E742079E2919EAFABE16A63299771BF276EFA8D85C920F995 5B9D4E8F1ADFCC5C29AA89BF90C186C5DE7679906B2FD4DB279D245D27D08837 D3A8D541FE37415B706EC585C05804108C1D938E543B8B63E275EE85CE9DD843 0A8B9163144B77DA1A552A25D5E77E94F29CF252BE9950F4E627D5F72536B6F3 3278D4A45D10759F16AE42BAE8460865FEE84537F8EC9BF4813570E883B826FD 1ABF3F4E66DB6FEF8366E07BCF290EA67D39C9D81B2A7EA48E0A228FE3D5AA50 1A56CCBF229C9AF2537A8FA70EEF41096ACED34CC7BEECA4EA1F23B39FBC39D8 CCEA93E63F508CBE6722C11467A3D0D5C4C52031DE43C449333E4295104651CE E13B821D7904653346067E971BE0042C571ABF40C3A1079A675FE4264B784D46 1B8FAA4CDE9851C4EBF69ADF51A7B68CC8706C08D13A44909D4C1D78DB0E0B2D 0E0318304B229DD2FDC968027CDFF65722059C62154304D6F9C3F06DE22914EE 928B7D1BF1FC7E74B4D882998D59BC086AA2D4EAD0AE39F6B75B5A3FB9994506 E21731E1A15F0F2D12F88724BA72898197A80FDAC00243A3038871EBD2F2BAB1 C616278BB78490CB86F552CBE5DD0862F3793D72C68AC16AF8E38FE1A523A5FA 9B0428745B1455671CFA1F6BFBCCF9CA23C833113C2948E7A6AEFFF1A83509FF C559BB5EE7F92BB43F7F37A371E661C826F63DD0C1B25E34A8119E71EC82FB66 23C7B126FB6554E7560B1B69F2EDBB742F3B20D1648C151C37A8570CBD330A9E 7592A8607D2D727F3AAA0FF2057DF4E2A4C7D3B658C6CED38824A770420D89E7 F6AD385DBCE9C9A9095CF0042052A67AB804A6675BB9373A99390CBDFB715984 A069DE543E4C6ADD7F1EC7A15392EF834EAB4584679A43443953427DB13E6959 0F2F5061C99C6D00FA5327FDB5330AEDE19A53DE3AE092634DC6AEEAF63A5BED 990F8A117AEB1CA0E7F7DBE02CB3D86465F1613B976D1CF6F3A1E69740A2FDC8 062ACC45EDA6B863B60015F276860FB79C31D28F97A799568E66D0A8757B2C41 E939337B467303041D0F4C59390B2E41E5F298F275DCC699D27C459ED4D5ADBD 02539F00095D7E1872862142B46BE06513D3EB1A406E6BAA64BE795122100F09 C37E5D1834218EC1D11B031C7DFC9F5AB071A8F4DC08203821366959E9191D4B 289682D915AF28CE5858F83338DC51B6B0DD052A181D9133FBA50CF18F70EE65 C33726A0450EBA9D0E0C3662AF6C2121AB7911AA9880D6BB6811D6D7515888E7 199A0E632104059A88C9D85B19BB35EDF4AB95E1515BB2339572928BD5FE8CBD 2D4DAF55DCFE29FBC4C3D56336277BA0C9A889A129F9FA7052AD1420B8705163 1A808EC1284C888D78CEA2B4BAB71AD76289F5F4986008FA9BF328E8537E6C91 E11DBDD8447E1C9ACE18DB0EC3D5742C264C8EFA445C5D16C2930FB43669774F A2CA52144D99EFA8FC427DB4128CD4C036A8C611B087335C780740FAA419D39B 5DD68EA89C95275F9254D947EB3683D0130255269B10C6CFF29EA0BE484C9949 96188FCB747618A8044E2E37DFFD2DB8ABB621B34DC024259340677095B6937A 78EDCF508AC91D4CEFD872AD73F50582DC8807143CEB9F109C84DC5DA30B64E2 E56DE973088A9D32583D6946DB4F3523902FB1781D993B89D5F56D79D5D98CC1 7FEE73FC3A7D1BCCE90179AE450829E228B4DEAD3B2B4C79A400CFF899AB26F9 048B0875EBC871AD23BA96F88CDA8B87FE5809A13889A6AC349ABB25E54ACAA9 C213C5DE2D01BCB9CC0D7BBD384D23AE12E289FF8FDF1F611F5E14D4B20B15A3 42D9B3B37A83A9CA39B5DB6C8316C51B70F211530A56CFE54D63E88169CF5233 D1A7B2388025B3EBD2BEE0716C3A2D589EBC7A42B3DA602AC4E2FD9C9052C922 711E44408DEEA1FE0C9FD50A39AD46D437F61F284A2EFD42EF158EDD71A1486D 4865D6B5E20E60F4F4FC3D646909FF1EE2D7573665E4CD8340A1B232CAC0202C C35BA9BB3D2267C7E78518F6711633F888EBEF72DC750AC2CB362D528CFC8B2E A1AE1C05456F50EED8CAA768DEF47FF85C4322F02D7F9D188C6F285C674EF589 251B0B913339FD701FDB281338D96704ED7ED908BC113B4275A24D058955890B 12CCDD5572D63688426B0E1E9A40D6AAECFA5555C1CF9DBEF8C04CE1E5A63F14 969D39B6DAE8A91F6AF4CD1E2DA89A4661DA34E272B6032C442C031F081F5DF5 858F4620885773D8A2B2F5EB6DDA74C1408DF279900450E4A3E80BA9A9B1295E F24EDC3F6EFD81A741EF74B0202820516C4FB720687BDD915EB2396128C3B262 20E3075DA153D6FD36E1C05B855929DAA4DE694B6F15EF2145C63250B24B031A 4CF0AFDB225E91D99828B83BD90F1702D3906D45872587A3A116B138AD9627CE E778A949C392202823C670FDBC56F1896FFFFBCF52C4B400F67BA36B5FCE44A5 F18EEB8ADFC088C99DFF8E0A593E81A5ACA2E3693005F723C7D3E0AE2BDD3805 8C6007A00542DEB2539709558A88B21003CE4B2C7817AF207ED576B25A41DEA0 FC55A459BEB00ADB01309B35920F04F84B7B64F95AA99EBCB843A06CED900D99 97BEFD7CCB9F4D85876F10160C8D63E2FDE82B7A8D945F37CC9933ABE0FD1D76 268296B1A5AB06B2E814691128771694224781171DC6266BCC290FCE1AB59416 85530368115BABD4F1DE45952918D1945D51EB713C283DAE8EDD559F437CD886 A4B1DA6120D685C284673A3EE489FC1AE4297A3623B339B7D886B6B4B8F9F4A3 7BF85E320A52FDC6323B51879B98A14C33C567BC069D9B44616514EE1BE36F90 EC5FA33E1B6B0A46945D876EF0085E74935DF2560A03321861A752E59742B9FC 5C501FBC64BFB1602459885B63873DC857ED37F8BE1A9C6E9517B9BF5A6161BD DEB6DB0381FFB34A8A96AB4AD48BEC40D4C198ABC599C3758AFF638AA75BBDA4 8545D5F95FA426FB25587301A43E176F6CED7851E815AD907F2443E70740DD2D 4FBD5D978B9B37F59D6DCF0ADD0F90825DD23558FCB858513602C8BC82BFA383 7AA6DCEA4009961D06DF233C5381A7F9541259926446B2F03664BC5978A1B6CD EA6EBC9FE6100A65959513EEE32E69D47B55BAF30A893D77142F943982019C01 715CE29923795EA01C58A798979939B507C5B29A32881877EF7EF0C5CB3DE591 6B9A6C3F3FFA847F396A396F078860B59850BA4CA3115CA2376AEE6B30C05DC1 6F9DB6781ED0F9D45D10E096C33B1B7CD12A9D57C6E49AD833C4B093DC82811F 16B3BD902BE764A1680831EC5A6C1CED84AE0DC0A65678EA5270BF20931E6409 7AA44EACB22CCA11098F8A51096BE83A1ABA56C9EED4195D5CCF24FDAD92E823 C439DAAFBFD652157D728F2754F28304710D3CB33763156D76A259D446647A11 493FAC70DD28063A4CDDA162F72542368E1AC2826C4BFF7109208F66371910C1 068F21779FC39DE03AECF1C9FB2F417930C22791961D801284DCC89B0833B6A8 D63F153ACBFB7B7D547924613BBCCAED37D90BAC5B0264ED31C7B9DA5A2BC620 9B20CA48424D0FF58905BCD6190BF4B5FC6ECCA1BCEF13426920197CAB41C4E6 E82E8EE7BCB23C6BA6F8B58001533B225ED721D6CE3D6E89116EC33CAA6E905A 649F8C6A1AA187A48E20DB864596481976216DB78F0F57543DFAE3CDC0A6FC77 2CAA49442527A5D94DC54BE93C875690CBE52EAA4EDD9F2A511361BC0F0807EE 96AD0D26B62D809E82EC14EDB158EF48A748A6FE0C3A7EE5D4479B35425F35AD 3EC7444F6FA75CEA5011AD571078293448A33C7647611CAEE87974B0A756DAC9 4E1BA78DEE477FA59AD50BF5C52E068A5E044A4A4994D5B24CC5045F768A3C51 D4F65E2A5AFD271A7666C6835E28C60751EE528C0742433165AFBE71562A3016 F59676D56B0B5F7E4984D664BC3ADDAF24B4205752EE21D4B57057A943018466 09C3FA5D2C5BCBFC22A643586BC9E7A965DC34C0A7D76A470B0602AE45106417 0701ACD2C764DDE218B924E38B5A13CB82678372E743A8B3CC300BCBBB878978 D9847F0640A031D5E76B5AD07699C3B2FC6C1DBBF79938BA649C152FFB2B5BBA D18B9570670B99907506494F362B124790A17D4F415D8447ECF70B67DBD46643 91AD465A1852B804CBE65206EAAA38FFD2B4180AF00DBC6296D1FEDC19FA5BCA A34AD360FFF6448ECF0C070FCFC38C9B2A0C3BA3A2F5C501AF422AB19AF71892 751E333B3699808F21E6766406002FA2421F56C69D2E51C2B2216963F2BA3BEA AD824B9D615294DA6ECF0D368A804C33757192B269FADA535A6673D051CEFCBA F069F54D177FFE0DAE3FF3FC306A8068ECD70110AA5D0040732FF339A34551E7 559ADC69253C322BBC30885EAA8428E6EAE6B9EFF05C08F7682BCFDA5A1DF66D 1B40E748808F8295F3DB4EFFFD7A18494D1A89DB2CEF167EDCE15B2E09EF726A 08D136CCF5409783E81A542284A9E584045EFD6A178B5373C350B21C3A34D9CD 4B1DACD67F0EFB5D0614953268406714D20D0682B9034C3F9DCA3D82DC16F6EB E552812F8969CBC59DF9699021198D19714375FC8FC95165C7B958F87DDF0561 59306478EF4E9D5600D2667EE1870596C2134433C222226127CFA3EEF5D51BE0 2AC5088C6628E796989805D292A760F49F5A80C368495A15BAC3FBE9C47C9D00 9F8933589DC25BD35DE191D1117FC9D861BCB0B75ED2F2E5DCAF8F4A7483B24D F8B3D455A1CE95CBC918B6CBE43145BF880B60773901AC84088ADF7C09EF9DB0 F2824E13EB27F3166EC715CD8813283631C1EB5FCB95388F3C451044B5E01815 8EBC43F1904166D0802442AD03A31F8324D2706F2C67945F1E35A257CC183B79 495D15F49AD969DCFC30E76EA324DE50FED6C40EDA82014D1CB8BFE66491B0A2 32190F7D4D7C68F7F5FA2330E55B902ACC35DE5E2C1A0435F0C904E0EFB78F2A ABD047848708DA0C21E76662DCB36B7737510ED74EE8CC4F71625A6706270F04 79BE1EABE14674F7E7710F2716940BB5AE450019D9CA2821970E21D266527919 EA7F936F21025B6E55F1FA5283349FB9A8BEC5785598A28A3099507ADB319E73 CE04CCACB006B8C6B03D46FC042E7E4EA917585E0A5FF4E12E5DD451A1404F21 EC8331F0E9454DB872C584F11804F73EA41B6A6784B3ADCE20F8600CA3C8BECA 14F2924CD0485D362421FB251048A5560583150DB3A518CB20B94F63D3489FB3 931F434799C7582544226C199648D6C4715C3E7796584DAB237DF303C254DA26 8F336F28967258C9C6BE68C7D6AD7FBE64697D5A7ABBDE22DB8273F00C6D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI6 %!PS-AdobeFont-1.0: CMMI6 003.002 %%Title: CMMI6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI6 known{/CMMI6 findfont dup/UniqueID known{dup /UniqueID get 5087381 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI6 def /FontBBox {11 -250 1241 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI6.) readonly def /FullName (CMMI6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 109 /m put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFB83E8A2A6085DA11 61B1632328B94B21D3CBF2E7752D441A2C9A03F6681FDAB37C4B67D5857720F7 0C4BCEE266586738012A2237A85FCD0425DA7E8E8632543F5BD5D50F9DBAAE69 9E053AECA6027559DE42F7291EB381D866F1293107553809861D43508C6F2341 5E4FCC431AF4A9B3660386AE63E877DCF5E513D0D5702B98D58B34897FEE163A 75CD6F5A2196F91CE5060CA5E72F9C5F79D18F242EEE58135BFAB02D5CA430B6 D1B9A376849751A45E52577B1810C4F0C7F6C8196071D5B08FDB731C5384CCBF 03B460347E0CAC959E4A12620B6C2ED62E06A241D1637F418B5599A7FF3C1390 7AF66A00F7C31B4EDF249C56C268EC9D546CD0489DA51B734C8292CE7B3D9E30 71448C85ACC64FA99B2DEA91AA4CBCBBB9DE20833700AF96395DEEDA3FEB7D6E D6E3BE4A62CBFA18BD0471C14F3A2FD025C88E8166A9830C5B5B94624A3D6482 D1A1D83805D0EDAC1C79EA858A523D9FA3356DF42BC01886E77F6AA6B04E4E3F AD107D861FC626F0A439BC3F125D48649E5101BF79C71507FDACACBBB4C4335B C41A5C15ADF1DF69E1D68C3EB9BE30BDD5385F81D26EC8F2F206C1C7032B9EB7 0392BBCA23B4693686AF8D2E1ACB2FBEE81D75667CD1DDB906BC5B675660ABA4 E63429F16623F20B6A040E4942107CCA26CF6C1F52DEED9EC7EB15BE4F18F2E3 9ABDEEAAEA9AC41E9F20C37C54B33F609F5835AE5A1EC9D674DC50FAFF6D3511 2198195590F62B3B8A6FC8C3431BB8895A2F910F0361062DE32CDA9A7F41E761 B09BD8545CAA2D7124B5688B54705AA52E4716E36C0303FEAD38E0510B3CB496 6C30B115C37E02043D47B4ED796C671E30360800EC13F0F0FF3E0DBF5A642396 EB0F39A9DAF0974678EA1D041F08BD73867065DA91B044EF2AB15FAA6546031E 189936C1FD302BCFBE55EAF369DBA4895DD0996BF7292762551A86C8A3604E9A 8AD29E38BF6FD40172051EBE7C694249F3378ED0139D37EEA3ADB66F3A80A1D9 9C3655F054CACE93BA4AD42DC78A03F42455ED1BD5C122F234F21ACEB8FEFF9E 3BFE0DB2DA6D368478299ED63912A234ADB1DCCF1E519AD20772B71F8522B5DB 24E9658BDC1333D76F07F63D81F7A51D12C445ABF698092A24E5E5C36A52206C 0C41F7DCA529BB0A4D146DB6B4B341459FC17FFA357CA5F93DBCF30B61374613 4846D619423BCAC59B7EB40C14C70ABD985754A0094C98350D01FE9FA371B0F4 38884690DC7700C49236EF68BD6E806E8937AD8B77648F552C0C907007465A76 1475BDD3FBE1CF69C706E703226471C249A3448F81C240ADBE4B5474216D0235 6B0816BB6935A2704E851E20C002F85B653BB0700915B358DDC168ED3FAE3D91 8280A5CA5C2708D622B03DC47A70E5FFCAD5A7C8D9AD563857BBEF92A3BDB588 8B5B55CC9B960F20CA4AEB598DA8488004DEDBC9671488011E836D9D8B6251BF 256D08E6F1808E9D498449DF1F18E48B310D561D4DD3146C2BA64D960E66447F 6DA8B07194E3BFAF662C00737BB7222B55A5CC206A1C46F252ACF93D2063BABE 2BAB874C01AEC438D3F86AE37C9D7FCE4077F5B5785E12C1E0B685134CE2E8A2 2E4DCDDAED2D53D13014E428FAAE22447763D4693E82600F850CA4A49E1ADC5D C8DFC16E97B9F6164095CF7F31373B591F815621F45DFF77BFBF89EF60C9F50F 0C2FBBA4EA9602E197B9447FAB6AB57B19B1C801DAB66BF7D263F6572B9EEF88 E06744C1FE197B8EAA71E1EB67716B7CAB30C859A2D1B2DB95ECED02B83FBA32 E62F97EE4403FADEC936CC8DAA161F7B509B2723BA2B735572A80D7D087E6395 6A9D34D5963E3C6E37F307C66D1CE551D2F055BFCC7360FBE93ACAFDE2B1A849 37FD373F62BB23C1A2E3DF61C9452A8C995B03D44D6210A968C6293B4A3BE662 C7B0B59E6EF6D53FD293B2C290436B0C448E7D15A63533DE321643E53C85EF8B 060C434E46A736EA617EA00D185323460E77B95C49070B035194A2E7693C3B15 104ED7F56FCADABE49F27F9A576B354C574B5BAFFFC57FE9AF02FBD87B8874A1 24C53826659BEB1EC50446AC26EF3A95877ED3D81D33A8BC1BF7473FB9C11ABA 0F27B38EEBDF77D3D3EA63AE6022DB0D4F1125DF274B86EF0A4A263E108D6044 7A885F5E87362293A53F457CBA6C911D23653DA7CE4BB7D4FF4481AB97C0DD81 C13515F0E3BF8A7E8DE2CE69B25BA9C185D9BF31A65DD290B0D4FDF40B61E2D9 AF92BC6468B3F5AB5D5B88710C489ACC69198D697055B39AB3DE8B3733825C5E 6E763E2698574381A01352A7042A36EA96D17DD2EEEAFF04ABF7BF7D877B0FC7 B6BA51BA994D431F472B6EC4B4C327399576470A1773BCBAC61CDBF0F95DA6A5 0BE5239B7E9CD39E1E4D27EF6695D1FB56D4CA2C2370509547D6D01273CBE6E0 66A696C35D2D0282CB8C85D7B1C51453A0AD0BC80E1D183D11AA78879643D9D9 A3D0B2BD8EE3EDF29483CC5871426232A20CB058EEBDAAED85378B163425C270 B0F7BB46B7D1B89CF84E6A06791195FB17F11F34A2548FE424DE10E376B39A2F DD9B0BA2F2FDF3ED4AACBD0D60E67C0749D6DCBDE6E79041398DF3FC8D9B6CFC 693B870683CC425C52705902DFD324E157C9829F25B14A057AA92AFA17F156FB 0BA949698EAA0657B03D9538288D887959EF24A427EE7EDE47F304A1A6A715FA 2966273831B5B3A9C11021C153E67A73FA606FE3233C3DB217404C6AED6A4C59 DD4C2A98B31AF5604D8DE8354448B4CEC66022E756B0056CD32E9B002ADC712C 0545C2C16D9457E271D98A4ED7DDE01BBD1856F5C3DA28794D2C7951FE2FE6D9 18643CEEC41CA4A3464D3D3A102653CD6EAADA59CDD44918523B8811C2ECCABA AC0D188F5E07B37AFD56006B10B32EDD179F4DA693EEBF4DF5425D996585F21C 8780A4D23D24FB0618C12DE65CAD42A0138E28A100257978EDCAD168C55C6F07 78A067F0299890356C2A184820A554FB07448395ECE36C45211757552E288ED3 7DFE46CB92EB2070442AFC85864A45000C4854D728096AD3D4C552EFC26DB6B9 C340358451B50AF9F1B35C2E32D495DE85B5848D78940270DEFC07A14D960730 878B5B55916FB40FD805116C9C2AC8C6D4645DA67A978F1C6FE705EC188DBF7B FE7AD6769F2EEC4A9B05306D5BCD6EC3A240D6A29ED07D1D82E697DC8CC391AA 015DB6BCD1DA5C9A5A7BE3C5936681215E859E9837027D108A54F42AB24E38C2 4A7D8CF3264AE049D4B1AF48BBC564BCC88AF19D37DD81CCC431D0C554DF29A6 94ABDF8126EE4FE1DFB78559B9BF36FAFEC9791049C865694F9E2FFB7A308FEB EF0195FAA6BFE7A081B65C5125623903828372F117EE17E588B2FA26DC9AE37D 9A6F0043C019624D3D87AFDB4B90C46AEA78919CEF5D7ACEE316F30EA0229742 55E02E0E2533CAD78CE9BD6E0260A695D776ABA229D89CF9BEA92CE0397821A8 830A557021B3B90CE0B07A4B34C24337FA3FA4A3728B6E013BA01071CA7FA667 6FFB4BA3A28B5D5614ACD4E80E00938C2589CC6CF885A260AF7589240BF8987B 20A19FDAC73FAEEDD93EBCB3D46F735214164AFAF1A7828FE96E2BF7CE1EA46E FC1FC4527A0ADF2B81CA51E3D96F3E786511AF00FDDD9764CD3178362CF9DEE5 F05D100EC21A301F40FEFC3EF05AFEC140A9466AE68FCFD6CAC1A143BAF2B7BF D0DF808F0CF87FE2399CD9D2DD424227CA7D4073ED002CD555FBE8057A797B60 313D18ECDD779FA7289D4E7BF82D95A7535CE3F0F4164AF239AC666653736654 C13E436B526EC5A1DC97E1D85C4EB563C7061AE1E81F0B38BC45B17C15FDB0DA E5F6332721A925D4DD5A97BFF3E3F11D4F4F43BAE4E73A294D314527397F03CE AFD12DDF9D07DAD8D6C8EFAFC2F52E20FBF62026810C0C31A1EF71FBD612654D C68B7A24112F0ABDD20EFF3DADBE447AF9CE568F873ACE72B63283CB26B89BED 4B3315F26084453B1EB0877065A76E7B704B27F93DBEB365574A78E92FDB4B82 D6ED91A1728F571FC9CAB636A6E81D0C1C4F5E3F6F4574B6EED48BB61EFDDC80 1831E2AB9327B37881F0CA5D5265575F210BF4BCD8653B4193F74E3FF65028F9 2968B8127C68CA2919DDF529EC882EE99901146CA629A07B4DC59E7868DBE083 6E546C5769655EF6628FE2EA78AC891D130108192053D5056A7BD06C09592AF9 6310B3586A2609DB94CB0079550358F5547B9FBB2B77917A327EFE3F972C7263 54076627B4DD74638C3105FB25DA246484799D5326EE80503F18672B893289CB 1FFF8D3F662FB33E93025D86803551A8A1DE363D1534BFA3EF968871B19FB189 DAD841C177E2AC98B6B69A78048221C5EBBBB86511939D3A9963B3BF021185AB 0B26CA7D0A779DC2F7693C7E48286BD60EE46615E31B93FB0E6992AE20C792A4 72AD6FFAD6682D0F606807D7AE63A6280B5967FAB889DCDF0F76347CE302FAED A59E1B1AB785D9D0ED695A0D05DD3DF0EF0B275AFCF9EC7031E1357E99A3DB85 B4D137567875F7580E2BEC96B08C97ECB40876000B610E0BFE81E7884C9BBAE6 6BE9C2C612475396BC10EC7FFBD1118A7971FE1971DFD0CB677ECA65DD837B5E C7D36FE9F20A15A941F1E77C11093C902DF5B7639580B9C0E4AAD13518E1901C 1162FA095F301848770C6C618E371A0AC3463D0D94221EFCC0884B21300194B5 97E03BCD5C4878CEBF352EDD1D2173B56C9B6A08BF3F33419DF226E1633CC5CA A88A57AA85E21657569916E9B4B79E51B5535A57B2D6FA3EED1D0AA32DC0165B 12F8F5A681040B456D8DF175AD6053A2954F327F4EB4CD453A056FB1701242C2 59755058640C62632C764E002CE928E6B908BB137C28630A3CDBC7C34CF2B643 FFAFF20E345A86F31756C78A8EE2B9B1C5DAB2C863B29A44190770FD90BC6AED 0C25942BBD6A370C21650947B49AC8EB6825BE65DEFAFDDA32007754DFE0273F B995B8986E505F95E58A3F8873545DDA6F3FFAADE992F3FF7B2DAB76D663280E CF2BA18BC8871A7C361AA3600B192948CB918FEB0F2900AF2BCF169576828325 449CBF0C7AEDC299FCBB061F491469B9ED1D56771A03F9F202550E17FDB15B51 4772B2F06E6AABA4027D13E8730999532DB2475630D2F8EB98242E36F5B45A94 2D8083014B63A806BB9A01906143482C614B5CFBE8C5354A3F2438B2160F6DC0 81AFCEB201EC67F66DC5808C907A3C6CB664F444D24095D9A11D4978A7B57037 87C67552FD59F5713D0FE03462F9A1A323BB3EFF0AAD61B1792CB109CA9AE4D4 D7F7FBD3FB91258DCFFB4634669FA13E03C0AF699165311CBF37D24378022787 87D1320ECF878F859149B2F994E700A32CB7253297AC58753E4583A08A1F83D5 CBFF10F2D26D71CDB20E1C69A666E9C4D23BB0E6BF1097FBBB204EB736E61FF0 C3FDE1986938F8099694B9F998B3C735770FF21F73B1A6B750498BFD21184F11 5E6AF0F1FBB08EAD436C4AADE1E6B815F5E58988C113B4B2335A340798BFB201 40586D0BCD6AF5A08CE9AA042910197F47D98CBB4411A6D435A46F46B3964F85 032D7F8D880732276A8FD24DA772F642F06C9F3EB4C9090AE4A3AAE67D8768A1 7B2A57E15B7FC626450372F40E3EE28D8D997CCC8CC89C644461D1110740407E F6D884A0503E05AF830994AD0CEEA924D935749F6EE9F2DD65A58ECD59229918 A303C90E19E9C411FAF24AD5E9B786178F8182692CDD508A4755123B4A594AF1 A8E7287456C1CE2CA485CF4CF9DEE5238AA7328DA204816F98B7EF49EDB30875 3CF8C48E0465BFFA8F2A1CFB6A8F165B63CC80F54C669D02BFD9A0EA0FDE2B40 D69F0101AE4D2C10185AB10953019FE7D373BF40C2F6D4E36693F118866D1267 12BA7987ED4313E8635DA02A4FC1F7815105F8EDFE8004A8801CC1AFA8D123FD 1768A6C39E838BD489C6BEFFD3BDF650DF48D5F8D99DD5A2E8AD235F2CAE8BC9 C13AE9B214CF3FBFAC7BDFA54CB6E675273330608BD35600775FFB2A96FF648E DF55A78B43CF54CABC0DA8D574CC5C5C62E9D658EC62035EA5028767749E48D5 658212BD39C7E76ED0C6F3E0A1D138A0DB8BE574987AF1E43070F1F12C560009 F48993FAC935EB56A5793BA13C28293601D268B4880F9BC33D553FF3B6A7900D 37900BD3B4B558C84BBAB09B4BC2B14D32E49596DA090E586E28D560903B9744 7D014EF2A6AC4F711A025DBBC841F1C1C93BA1F8327DFE33C803A0993050D590 C7AE262261DB7D04B9DD91F89927161A69E14BB2A48D29578410E312A4793101 B6CD65B298988AB798F45B76E1F58BE24DB207C7E07014E17525B436D41FDB28 D1072CBEB526E17C72DDA00ECDD06394940DEE8BD02CD3C81BFD12BE0568A459 0F53010A0655942C932905FEE87183CE357887E2ED286DC1E89F2F401CDDDFA9 B418F218D4115043892882C09F2E3749D4671E75AB1AD01C78F59FE3F54276D2 A91512C21C68180CCC0E147E834002D7799FF393842CE88BEA714672E1952C9F 7CEF2FD0115B0E292079909A7775769341A7888CE6063537ACFF225B4F396972 41BF46C599D278906F3BCFF81DF941BF5888DE8A53CB0A2D71610CDCDCC1760A 7844F89FCBB892AEA853CF5D967648995559EFE852C95D2EFDA2CF063500F88D 2C83B615618831267BD8F5438DC53C6433CE7347E9C55E103B450EBED6229219 20E979C00B0B9D86345FC3A8EA2B049B7E148A7AA1C859AFE93381DA74CA578F 8FAAB28175D5B57F6A74F9869B2F530009E953913C6925D0045CB2E817A17742 3C5B7574E9BF3BA7B769C161C2496EA2D346B4E19E434120FE92A0ED3F4A9ACC A8BFE55F04D17DF035D01FC0B06182D8C27B6D32F36551B9AA56D61FB6A34254 D0DF918C6716D8D05B973C8BAD5AD52C06EF3C6503D4E0F7F791511C79AE74E4 4B707612149D583C5D96E534CB45F1E7CA5B23642B1BDBC881FD8E4F66CCEE96 7CC0509B5CFB0B3596682A81E682DAF6AE58F605FD7A1F414F62572298AD8491 B76D0A23B4AC731FB8E7682F506B5CC02F7029827FFD866EF4DBF56E07E7743A D42CE65B38EBDEA193CE5B172E87DC88452C3DE192E363EB9DBEC4EC65F53002 BE9E94180F73B53CE1E8EE9333DC86DF5FB2561FA1F9B2511962CBEFACA739CC 38A286651CEFBF451FF6568CFFBA8AA68555181147C1CDBA18C4F5C77BA8548D 2B1BA37E05EAF7F69879C3ECBD02783028CB1A8649842EB71023F89CEB36CEEF A9B04E9ECB0577536B88ECE7C1D81B0D6D5A478F8E92DF83D194759437088D7B E93C6AFD0CC6D568E60E2F1265A6613F97A6C4068C8EEBA70F6CC4E88A80F65D EA7B498395390A74BA57221B86611D3EE5DC4632F139CA8A15E5B9D2DC97088D 7CC65197CD93F4803BE4246394F40EDC2CB4904BC273C597F13C8DC680245A3F F1AF2D7BCE5D69E9CFC81E5E9F46927C5F55C719AFDB2CB1AF2E4D55B0E3ACA8 6BBBCF253CCFF8F02B8542F296CED0EB8A06A88549DC959E22C3D6C48F310452 22B32C44B046A61A4F7F8AED613DCD3C464DB2280D56E517CFD16DC32C83EACC D3E936D2F3A883B265444D818393E30EE3AA59E6FA73DDC421F5A0FC8442F89D CCE98189ECADC080F1973E14012C2B87F6A8289D7E1B8958E2220FA1C68EF82D 01A2B3516F320EE84950A6A54963ECD6F606EB5693F6A0BC74CE2B5AEF26AFE6 7BF5D5357C3D53CFF50F60599F2165B6E742A331B47F46D977FC721867EC9CE3 7E9BFA2149C9E3A47AF0D0EDBF29C1E6D92BFBBEB52F816EFDBA9CFF83AC072C 5FD264F8F24CD5A1C0F68399FF4B29FD77C4A54D8296523413DCE938ABBAEACF 072AE89B1CAE513DF9810B85613549445F8E854424603C5A41EDBB163CB453EB 25FA6960DDBA116C2ED617F52681C14DE6896B2F378958251FE38408C8EECC77 7B6A264C42878DFA9BF9784D96E185391D1843EF25EFCF69A7A12B9BEBA00E6F 5B52FA5CB5DED8D24E67EBF80AD8A076DC4DB5E086AE05A6DCB2020729F1138E DD19139FFBFBA6782E4B86FB407DF52A6BD068F9FC7C385522CD541133611CA0 0F6838783A8F5C316148736FCB09057175098C1452626DF29FA208BA38E0EE7E A3008655333C42CD4AEFF25EDC397B8955CB360C829B5C6090D12F094E8980D9 230BFED445A83940686D739430E1D61F536BEFF169C3BA5BC33E952049DEB374 47172B3707E6407438461846A8F4F8132927B6B188777BC9817239E86A8B9F5C 5B234CEDF64A608F1CF6A04790CD84FF85CA6969FC8D9260BCBE8B0449701E28 183AAA7C4FA73A108F02D81A038F60A68B1CE5771285F82D7AD81B396B026D65 D1E572800BF04230D5E4C577B34DAE18BD74906E9994B74C309CF9BAA29FF7E7 C86886C0330AA8639A197A2F3F358E40D2E2513DD66D7DC671E21D8A5C22B51C B0701C583BD4722ECC21E1F14F701EF753928169C1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMSY8 %!PS-AdobeFont-1.0: CMSY8 003.002 %%Title: CMSY8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY8 known{/CMSY8 findfont dup/UniqueID known{dup /UniqueID get 5096649 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY8 def /FontBBox {-30 -955 1185 779 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY8.) readonly def /FullName (CMSY8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D80B73E7B6CB7548 0E1D77FFC695988391DC44AEED8CC947B3D7E198B9620E2238DB3A2819182F03 14498B8CDFBA48926DA721920B221FB33BC21A8456AF10891403501D0F6415F0 7E041AFFE109F640E54FC1A365674711EFF94E752652A4C8DA62CDB1149DB899 2C4A4BD77A06E81E93C5698C05DD02F74A0756082738BDB53003B483752AE498 DD718AEA8F3FB5A6B7E2D2AE8F309065F3D556F9A34AB90C88833A54295E0982 209C466A301BA3372AABEE20D862C6DC6B6FAC1463C8CBA8AD766ED1B4C9D712 2BECB4E6ABF558D8AB5281C35726BB8D046982C0DDAE17BFFC9394125E4E84C0 B283977D31460B8EED4346CCB09F64DA0ACB640C6DBF32F2DC30D54668C1CC12 24C7280593088E9958C047125C323E9C842801346A9CE5F50413D69F6DE99471 65D2E387765E92EA4C43F17B467DF6E266D92551009C0E52E7219AE9F5E2E8D2 88852086FF3600BFB50AF3EAF8C009D8D5F084B510F792385F328F7EFA8C38AD CDAB2EEDFBC6AA45F6DD7364C2F02DD2BE6C79C8361E83D4267CEC2407689864 B57B5D967FC80AB3BE8CA43955FB0FD3081D438437559AD24A7ADD484C1E4A77 B00BDCB0D1B121FEE983412E1EA5489BDCE5DCB4A7310135956B230C0DE7BBED 516369A92BC41FAC8D73490984942D930DC193BF0C774C1AEF627B969EE4B001 11381AC57815D7581E2372A1DB740B09F4A7FB4318B765DA4E7B44E8805CEF85 44EC3B10613FE7B397BF91B69A5CB2E9086D1E7A1FAE0A9ABF2A237A2D29ABFF E392A18AEACBF28274E775D3FBAED4F46B982B9DA4602E24094EDCCBC9D6FC0F 67C60376879245606C0B9C9A678E8917516BE1CF097B1C75C9F0DDAD6899F08F 81FB7A198D45FE060CD2A550D9B8D58B882B969D7BC3EC018A1FE92BDB262835 26516FF97AC387EA525FF987E5EB1EAAE4EA5866C9CC043D183763C530F7D7A1 2070E4044507C4E5611FCC117FBE4396E0B24F672CD53D5FDFA56D561FB86D40 90A52A7C7F29A119DFFB694A8C445367746A49CA5FA83163BE448EB19625DF26 609A8C8672631A10411036CAA3D6C2F822A4B2505DCBE8E1CE6916AE515E78CE E8C894B134BF811671D17C19248853131DFFAEDB24B15FF17EAC194662460642 48D23515AD434C68DF56753806FE96DB3A29F9D4980E0B6EAED7383F9FAD2584 8F85679D6D1933677ADF5D31FE6E43DABF137E834A1DEA632D36EA5728625159 8F33348893C9D1C510501628E4A9A80587DF6E179FAF68B158406A3EBCD726E2 AC17F2DF8B3607072824D2E5A6479F7BADE32E603E54E7A83BB2DFDEDB0D80CD 1F1BDD4F6C9025CC3A8A3685DF10A8183FA80CE0F0FE2BFF2500F76B1037AE41 56D2D7FB468C3CA7549E3599A2AACF66302572F1B35BC8EF7C23F6FC4B720228 1D673D903111CE378AAE83480B4DEB7EA84BB35F4F7BE997DD4FFF5A9B5E7650 3C7365BA0965B242DC369D03215651184024A08EC284F1798B0726152884B4D8 46411B3BC8F5CB53A70AD53BD7B1AF23528849B56CF2F75609FE715878CF6448 38579380688B47AE3D374B0DB6ECA5B8284414090123D47F3F9DF389E023F431 6B4C0DDEE4190DEEF4CA772742012754DA9A44A8F550FADA6D8FB0C512D5BA2C BB7DF71B1DA41FB6936BA71B710CC6A80751E43436F0F5888F51AB370DD4A088 40F402661E08732C960705C7E0D29B8DA1A8A3E119409E51EE575E9655F47568 023977917C8EC610BEBDB9C1F4EBC192084D63EAA00EC87B53E86620BB5AE51A 579B0F8E1972CE1DA02832FC75184F45409DD9D413402C2FA27BCB0AE6DB4CE1 5AFB114E23232DE07C4674969A1FC94D152C6D3A611F029ACF4D949A2C0755D0 31C7DACDBB4DFCFAF7E87295CCF5D4AE28D87ABC3533D87EEF1507B9FF9063F7 F007DF03734A20BC3A198B049000C92D2849C62DDAA719FC28EB372793E20128 D786670E08948808BA45C4F6AA0DD8A8357CCC47228A760C5C7864853BD9C9A4 285E446CB72C5C9D3F03FAB000810DC5674061FA116153040743E846506CFA67 FA8770E785D7DBC7293F37389A0859CC22275B23C44B57B92A033A7BD194340A D6BAC6E103402F8396A5394C617CB2A27D9500921D5DA06115EC81715EA8E360 4A95DCE8689CBE268B8E6C8B806CFB0ECBF634250243C9E1AFFACAD65311FA4C 1DB0988203537E5EF12B86FB454D06CF05E4F4FC4143D62920E99304245B6ABC 82E21192BE94F5E980DB21E07FEDF0EB0CAF4ABDFC20EF08A2A44A7940E2862E 08FABA516152DBA899D6CA561EB08C7C8298DD511084E5230CEBF28AB1D84C85 B5BAF4616C28FE05AFA4BABB3BA03F8CEEF3F3EB0D3034BD3D8D06629B8E9EBD 72484057E71C9EB4DFC7C2CE7749271AC926C2419D618FB0B60FD6F81F0F2C04 E529CC74DCC9E4AF32D935D7CA65FBD0842A7BAF162D08F782E65DF3AD9EFE69 198AFA9208B22BC21BC4ECABB9BFFBA84C8421B74748E1EAAACEB59E566838F2 C439579D6C75074F94493F7D5C8942D881AAE6302C37A61003AF77684EE99AD7 EB5EEEF050C52E75E4E842F8174470FA60CB213BB6F257EEB26CC55D1202931B B981DE2535A87CF37BFF912220C117EE166CCAE58BBF624170FFBC0716726B36 304D698F2CA131675F7B1199E6581B8C812C4FAF75814282477BE2B7EBCBA7C2 FA6356B2876F89698C6C2493989E9EB252DE03BB374622A7C88B8EE9FEB4851E 02F85CF70CDCA7BED5EC94E81170FB557C3BFC6F32CD70B506E56A2CC5451592 130C6F570C679577C44D60A811DCEFB3535D855259B1021AC168DB76DD38B459 F1813E3DB20AD9275D58880CE94058490ABBBB0D8DD16D4A65F680B30057F15D 07FF54D779CC978E90A850A2D8D79961EE276BB26B594C16F56557435671A3D8 ADD3DD0BC4BC73B0652B9DA8462FE614A14A11ADB2214EC4910823FB4CEC8938 24354C5C62547EE5710FB5ECD93AA45DEA7411F6CA8D5B5FA222685E622AD73C 1BD5DFD1C8F253352D6C7D14FF2FACF07CA5EB11392C6A33E9CABFD99F743BED 55E8DEF49E07B9444171D1780C698E5B65B540F41F845AC188DC7C0C8B5BA5F3 546BEAAA4F29F0DF30D5AC12A60862742623100074457BF2D820DCAAB340C1DF 22FF26992DC02F276B40A7C528C84B72CD189A4088C90070486C49A1014FDDA3 5093FC12DAF309FBC063653E6A33E14EB51B081126AB5BCB8016E975060B796D 6CBFDFE6CB9E191F12E309254BDD6660E3227012F5DADE246B02B6D8127F1EE2 248F48DC5ABBD229748444420C868450602120664984FE3A8B2373232CE5CA15 E67172CAF7EA99F73A66AE33B1EDE5E8351DB02497CE3338930147873D4E46B5 E918F5592A21789FA9F46232BE693DFC33240E2649D6AC1940B101D806089436 F0CE230BF6D0363510378822891DBD3EEF3365430E74FB6C994BB40C8EEDA593 CEDAFEBC3B87C7C04F52FBD7D557A77B44855CDBEC8A8D26F44D66446B5662AD 15B6B79D13BD262D79BF51C09F8F690A61C7F11EC2E05F6BEDA273648E9E1EBC 3D5F1D6ED486797F753064ADDA8494405556D43D395B1487EDE877CCC1EAE954 1AEE2513DDA94897B733609E8179DFE1975590568202EF20D58A89B34874CC3A A5579473AC65E0EE61545AEF578ADE10BE3FB3E2CDC96678F613E4DEF7BC1B38 8A551C93438A0540E292F65F1FA73D9AB30A5F545284085E4930A570C1807995 7108AA8194607304488616DD4AB189F8EDC5F4507AEFD7847817A8ECFFDD2DD5 DE95E04EAF2774F8AF661827229F01E769A32734097C457EB6FF056D90C46C5E 9F936AA6BF2EE8244BBEDB8862E56423F5845BB10C8809730B011D650EA18945 83C320A3F4ED095A5EF91929FC877ECC28A1C2CE74A53245E629BF46C6534983 307B1C94EB35CECDEE86551F0C308F66690E591C5D9D8FE14F534CF3F5DB6D32 39D7C799F392C4E65759B7BF61F4D8312E3B26C31466206A367A0DD7A90D25E2 805D36ED5CE0A4BEBCAC0A348FADD2D2AAD670E28BE6E33F627B4A9F35078B1D 6688084C4C18840673EF9B3526172EE14EF64E97C8B006C27DF6EF73BA6E6459 3608F10EB1EC4B824DD5360B42AFF2084788B165747AABFB2C9C0EBBA9C6246C 08F28143809315D6268E386F09BBAC54C34213438B56C386B34AA457D149CC39 A3C163F56E3C2E637C63A79CF7F2DE969EF3AAFF75F3F20499A9ACA61279D545 866FFE57D25998244F448AAB042B141952BD653007A889B1A716A4042CBBB827 C1ED5E3C616C22D5FCB39D3B3539F9B71D50D25ECD2E5D953C7A5194C867DDB1 75CE10B2C3A20E8CDE15AAE9F549D034838DC066CA649C31EE365D46450AF18B 893748D055DD88C72391FD92DDF0AA1A1316051BC756F87BC9A425019B2FA7BD CA9F35E89E2229B3021DD24C9DF0DC3217F44DCF510116DDC9E92EFDA3E0A892 491C8961CA484BA29B8CACD2FED2E246FA7414F892AF7B9F08698FDEC82D2E4D 8C6ED1FD9E0BA2645663E7E97B0F780033D025F2EF3B364574C03F04FFC4E09A 3D4182BBFCCCD8CA54A92434E2208803ED36F931D31C7498B7FCEE4B78AECF11 B27123A10F031F9CBA36066680E4748E346D18FD0EFA395D1A9227530618ADD9 64D96C50A0172F712CB427E8F7170F8A1691FB95B247A271499F0E63676BD64B 167438333A3BD9CD9641AC637E0ADB17F1E394DF34AF5A2BD02030DD087BBA02 E1209338B74075744A9A9966039AB6D223F385E06FF359257913E6C01BF32F5B A3640C7CA41A6C51F296E50DC1CD1D68491CE5D75E0ABDD4C5C4A97C8BE2BA35 D91AF9F8F38E7AB8C1778B06A212D0416E6137087329AAA2679C51D014CC4DEF 0F1543E2FD97621E552E19B29AA1368CB5046C188BA59B1E1875B25FB269DD2D C0678A42CD310702465694F2BF302AEBC43F714F7C657505132DDA71CD23D17D 628BF3400EB5DDFCE2850F31B40C5913394649AA4241CF646F3939916C2077AD C11F8C3E478586AA7931E327333FCD8A2EB31DF4B47AA2F31B999556602DD998 5848143C0CBD0B5187DF08E675550F2384D48C2954EA7D16AD2B94DF97C194D2 302CC47BF968CB1F6C9641A87525D5C6972ACCA1D4A4B4DA8EC54BEA6E7312B3 2737754A9FCBED3BA5F8220B751506BB0A5BB5CF706AFCC04BFD713A3BE3C842 9FFDBAA0CA5691D0FCE76134841A169970903843163DE68FF09649E99945DB64 491FD6D8B2DF237DBAF550D1B74263B3BF1EF6211F40D4DF2DEC46E4DE557088 5D458A7CDC6F34B8C3F5C76582C8B7D24A333AAE0B43CA67436F8ECAD7C50B12 35BAAD521033D8024E4DFCF01580AEC63BD5F8ADB778F822AC4FF0DA608EB7CC 1A52A51B9F38FFADC0D2F4D8394C5D598123B483AE5AC1215F24F2492EBAA134 3C58AD4E3B493AABDF753EBF1F04058C6981C353D6788C2D3294165B667D3765 7883A8493F5D772F789F73979B254BB9397FDE4F8B76CA6FFF312F4B012949F4 3EDCF1AC60FFF2681549DFF430B498405E79CB407DADFCEDCAB1E2FAD3B0F4C7 B575A33EAFF9F67D37F50BB06D06834EA683862991C5BE340D4A7F8D131E733D 289F72977870F9958102F5D835739F0F5A642E7194E8AF7FDA2937E5C0712CE4 EE15CB475725030CE0F238C32775D3EC95CE3D0886046E3EEAE322F59D423E83 DE88DDAB5CE0F70537487EBA5A16A9306BA7DDCA14A85A9F83B3BC3600DC9421 BDADA2704A5A24F7174A3A486ACE68739EC5960038CB44D969A594E97AE1F42C 42C1B7E3A456B3CDFC7683537B337AA8777F18CA45B22C8BEB18877DC624496B 9E8EF9F386B7FE4D94ABD5CE3B5786E76FE04A35909C472C04654A4405932EE6 A4A3E0F6DB088603FDD82F0EFCB85A962002A662D1AD0647A2F484B59075A1FA 9F4327D542ED7962620B998ECC3A95CE736089593461CED9B5AAAB05C2DA3820 5AF29B32904E1EEC357C8E282189C6D8F562DB11291091E6897E24CD8F8E2A34 67F35D261E01336152E69831B0CC6B03FF1AC7EA22B745F513A25FE10F70E74A 3FD71FE1EC9999BEDE7CFA6A97EA2DF621711BE950FF8960965685BAAEA71FA6 36F165573A0A6A92DAEE41A9B0C97BF03419FF6BA1F44524D00FD671EACC4233 9A857680DFD27B9F1E7A760058C8277B3761DB9969241D1824A7DADF70BBFC38 89C6DB9091E3BFCB36851CB9662B365A4B7384BDBA1D385902D1E5DABA72A159 63790096B927EA49299AE03E41C7F593F3B995D1155E91C62D5F68845ED3C797 7798B56858F96C2FE2E37D812873B7801767082A6D6B60602CEB94B7F6D7A142 72814734DC584A18D1FFEA7333D4C7E2DFE5B91E9AD92EB52533CA52FA888980 C79FEEDF0FAFB3B20B497F9AB668BDAFA364B405916526D5C48E57DC30BC35B9 BF684FDFAD199D9A28541327F3899AD505FBBBBB22F419E22E0149EE5FDD2B43 AF442E2724EC16934C307FA731F90AD1C76B74569B78CDEA7C19808233C6364B D049F3F50A68D3EC5F29F2B96BC58C44AF90FE13F244B7129F14B5DAC3F3F310 B330E67CA4EB76F895DAC8025F11EC7630EEB4826B5721348FA38F28B2AEEB1C 5F7CA413C486C94B1DD96988F07F7A08D3635E28624878E55D4FFBEB5E183CB5 93014D8A272EBCF3A09133603CFFEF43A6FF059BCE525706D3795884FB495748 C8AFB50DB464459A5C36D7CD087631BC09C693A11BDF1C6011D9864FE66EE8C0 4824A42E97D16E017C0BB73732D4537E2A5BB283B3568950E5681364DBC1D6DA 058A122862A44ED85029A7B39F2FA7C362D859D0B429E056891339626AE6091D 74F6110CA32F8F3E9507216997E6AD1A2F1FFBE8B407C9880DE230E234F6FD41 A291851178BEAE5DB9DEB22E3443807E2BCEF12A4AE8C490AA9E3D2918329F47 42314CD258A0760DE5FDAC4AF7209CEB530B8508B278952A3638CA8491C3B493 516F461610DBAF32E923ACB834B15E2D169A10F2609EC0ACDF7BDBC777DD2C19 2DB330FD557D3B06B78824D6AB237D8F2D57A7ED35F02CFA9290ED6893B41657 A2485524A3F1642FF5808FDB77015D9467EDAC4A6BBE8A175833B1225A5554F7 2C60207F7A2632A4023255E8EF1F38C1B8216C9B03319B60BEC9799E5378683F 46E698FA75F2DFD40F17C603F3335F1EC70DBA1449C7A33EDDD46CC3DE4A6557 EE67BF349AA8680FDBF415DC527129288B5879500180F75DF80394EC7CF11BC8 9EE9A4ABD64DE3076A2963F83FA333F19FF74F79ECF36A87A31D6F125FD2415B 3F6A6FC33C179F54CA164835F3C3DB62AF444BDF27AFF23098C7212477F688B8 6F48D9AD080D544D57FEDD33D3D9AED9346CBB644C97C951D4AEEB2BF6F0CB18 E2517BA7ADCFD00FE44E290E731D53E5C0D762FCBA08004562DCE6A5EF2FBB74 B3053CBED3B6E896B1C3356DD9E8FCB69691AAF6BEBA0424D62B9F266D560B40 89E20A9F35AD4A7F65A7183761ABBEE0F7EF26ED3565A25516A3A5A57143979A 1EEED8CD52A69E4E1AE4795F3EE0CA21B9F4D166783A9AF54B08B6C56703932A 310197E328C6E6A6BADAA11D66A952964F31FD690082FA02D1E2A4512A9F2742 33B203FB770A3A1C7490ED630D0FAEB3066429D0237E18818EC368D0DA72EB08 1951C70139EB0DD59EB53AF5039A7618C77F6CED9F0A066FED6FEE0C0E328351 BA39746C1224A29D191D8B86491E0A306ABA070CAA2756C3A33990EB6DDF34E8 06EAAFF94AE6686EEB06A17D6D020D1F4E59428D533DB0EDA6434E6E1A478D5C 2A0D08CB39DA7D5F5200199FFFE3F41729478D4F63AE01FC0BF3B378FF6402D1 CCF1BE5F191BAEAEC7FE400C9980E103D8776EC196E741AFE11D249E0C277263 80FBD329524C55943E25631F113FBD8331C0044A7A2138637206A7941CF02590 577043EB0F205392C34E18B1ADA47CE63CB8F01365A044CE570FA20446102210 F03C0647CD0CC29E28B149F84C2F39256EE1457CDC3862C4082A95B44A61E8E1 B4ABAD32DA3E2FB8D849B1C5CEE60F205007464DF38712737776BB6BB3223941 95169B5BE578BA13DAE40B19AC184CB6F260A1EFE13CC8438ECB56EEBD30ACDD 8E24F52934 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI8 %!PS-AdobeFont-1.0: CMMI8 003.002 %%Title: CMMI8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI8 known{/CMMI8 findfont dup/UniqueID known{dup /UniqueID get 5087383 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI8 def /FontBBox {-24 -250 1110 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI8.) readonly def /FullName (CMMI8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /omega put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBA9B440A6DD72BF8 97084C906B05FAD969086ED21AF0AA1471613182B26117D7494DD9F9270EF3ED 8DA4D957225F75D060237B6DAAD5A0AE3E702B3D1C437835B93B8AF1F9E7D966 E739CF3AD5E256F90286A34069E5BB4122F94F18F3485658D0D25B938522A879 8215A417CA2CBD20F71C5C5FCDE21EEA7BB27876D93BA667868A419287FE59BC F538980597DBBA743DBBDBEBC61E3286DA7977833DC8BFC5E52FF5DF5EFD9A92 D070EB769E31E760A50FDE012DC0057835E8B9B046FCC83F1A0C40326AFB4E3A 0CC3BFA35FCC64E32854F32EB7DF10A19F95830136BBB8139DE1663B7FD790CE 464EA431AC109FCA0E03F3E0D355FAE20AC8774D6B1CE233C27680C77DDA7356 560A27C75993E8C980CD1E3B0683F7E8A05119B3AD567DAB4851B66E418687B7 F9B21B3BEF607918D5973421B68E65DFD8B6C8DFDCF1CAFE2637D365148EBCE3 FA4CC00052A2A522205EA3AE3461CEE02042E1A3F11467CB6C8C849B200CCE3D 0BC188EC7B934CBBC0AE2BF5DEA228181DBF0F774119F313516E7D97FF532621 9278F856C166CA6547504F34991D588A0631A5CD06363F3FEE9FA0772C783447 ECD0A200929CB58EBFB6B72008E4082B5D14AA560C24915B9463A92F38237886 C35CBB2D4DD6D0CA8C1D4EC46093041C6181C2F6586EE3E7D4E647A107B6DB23 DAD9AB5A0C2905455FE58075EFF6B48597078BFCCDD84812B98986F34987CE49 7EFB19814F2A58B0233A59331F6F8EB66401F04EE7B1ECAD9BC90A2BCEBE213D DDDB1F75C83609ED6A669A0CED58B2E269E76ECF73616D94F13CF827C9BF354A E82202988DCFE856786B8AE569AFF3105B55C72C58D310FFC0E10B2ABAC8DB06 40D5F72E54770E9DED1AF4616008595B8481E3D9AF4191CC9A5BFD9DDD01C9F1 FE7165D21E488DB40879E863D470CB31CA06E5B5F1F8C3CCE04B697CEB0F3557 ECAA358D2EC2B370519CE06138FA702314BA01F1F33881825EAE1230098BB3C9 59666983275CA4E8D9DB34979F86535577E79393A72F84B0F768FE8C92692907 15E9FE9894E98A0EBEA490CBC8C7E5A9F3E43B24C2C5A4BCD71DAAD3CC0B8B82 AC13933543E295C163F61C9FD18371CB514493F90BF7FB460C029B8DD2E2BF05 FD66B451DF277864DE1EE42100BF29E01A50258C2758F3EDE211BB3457B8243C 20BE72983FD6FA2581C5A953D94381E32E80D6D6095F2E93A5455C101BA71E8C E560D4694E4C167EFA25FB1E9D214AEA745CE34CAA5468FAEF8F6BDB6C6BE8F4 3D58836C26A2392E4C4DECE284A90DDB3858A16D6135FED655A600929DE71605 6CA32F6851A2A6F71A9DF3D5D657593BB729CBCA2F4B059365B7263DC08AB211 9C547096E6427F6AA53CB2EB87DF0AFE2ABCDBD15D7EF228D3396413B83C6B4A 79E41F9BA55A2688F62A10472675E5658F151F9FD6634EC94EC0682C17448024 CC1633077C07A93E4DA8749D974FB8F4332B5DECF97D749C10DB60D4C90ACBFA E65AE928C88BAE19234690EEABDB30BEDCEF2660D7464D5071058C30C572A2BC 7DEE5384BD7614A4BEC4C84E18CF7EC81C810256E8CE6520466C033E2A36D3D3 5D6074B3857415011D8D9D49A474D994571CDBB89AF92BEA879BEBAF67663F5C 17ACAE809C2231EDD0A76641BA52FA7B19A2798D54A4A9B62C42F9905851229F 2CEE0191C8AA5AC12BB0CE9E5E3E862683AB57DBB4AAD6AC0FA8BA4F408D41E0 755F72B82B7C18EC6B13995BF7AFD66AF4BA0EA7523DA8B75EE751744EBA9CA4 4E8BC1FB37734503A5B24FB9F2C2D07A47CFC477F02413D55BD7DC180B0344E8 50248801FA6BE26C97F397797F5F9DF762967E7CD92CCB8B2E587C92177619A4 BF8046CBC72C6E69DC78B8CB6B7381A290080EF59F5B9F29C1167B261C932E9D 010D2D14BB425D157F22BC0305770AECC5BC80000F8CCFB9930255A68F299ED9 D3B5B83A2CC00E3305EB281E1A7054734661B175C6CA0AF168790985F173DF03 A8693B677BAFE23C3CF833FF6463B136FC370E4F0C29E322DBEF637F62C33CD9 B0A8338FD67EC628E3BF2FCBF7CF0347D5CBA1DBE6DE878DD670176B85F69EF2 3C5CCA1BD2B8A385F113EF1CE522F5A6AE053B9C1E39408C9459DE3E7FE2C4ED 77F026B0081BB80D40185458139C16333EA27F43EF1204BFBF80BC5301B2A3AD B10F7EFBB4F5B7E04DA1167F68BB6D4049440B0F57385FF0A95E72760C6A12F8 1335BB31CB74081FBAA319180DC00113CF50CC5A41D2E751E055DA1429CD75BB 0060C21CED634FDA106C49A12B356129D010E29F2919301AA7F80222AF3905ED 672FF85C9897A70241E8DDB9A53034B6BB44E140D9E739848E7A782F24B98AC8 00DA09EBE4532787E5CF3ED815705F659D8E52DC2C2D4949374A3BF192BEEB99 1D9A90A4F3250BF8A1FD40D91F5B34AF2CC561FD02FED712500B24330D87DA9E 4AA46B6E34BCB40B1F73A1DDE07E002B9478E9651D2BF85E67585B6ED812BE03 A594874A235B1C1840C4BF4BA6D863583D8C12DB49EF7F8CC24DCBB6B21FBCA9 378F3E2DC406291AB324571F76E0805DF8826090F0E8B50599CA58D124653D16 16C782B01C91A6F3DA6346482E3163D28D95EA49866360147296838A3FD0CC53 920F91D895F839CB61FFD2FBA296CA4C6304EEE579782AE5FD33D0FA652BA7E2 CEC7C01DD0D3E0D56E6177EE5F609A396F7FC8EADABB465DBA7F384E215C4DCB E64F807A50A461545107F9C3F7D7CC7D33E6EBD6D9228B1DCBFEF160703E6129 0DCED8D45DD54E2A36E698A616E7906A50901E453BDB2A363EB77144E9EA6F2B 6BD927495EB0EBA5755165707CCFBF8759CE5856881117C7F3EF6D494EDDA7EF E499BCA56C86467AC573DA9C2724FCC74BEB331E736FB093DCB67DAD42296655 415D110F2729BD1D55E5C9CCE2E724116F45FB2E66AE0F790258851A5C808762 68B8A110BD326F8D3EC45004E7CC08DA42F6CB80A6B6E7C286F139534A275BCD 2F812993DD9C9A1AEB5E7E4BDB4805DFF3A7030263AB060C9B74F0C25C5B9005 965284884450CC2815DF28D5F9B0496DC7A3AA85E1E42741E1538797175C28D9 FD904699C771FB066397FFDEE8E8DD1ABBDF67E6BFEF95BB700A7C1BA91354C5 42EC3864F6E19B379E79A1CC3C786C0DA146C6B0B8E507ED58DBB1F12F613A98 0E1F8967991427A22ED323901C4B83336CD343212131E8B59C2F5D232702ACC5 7891BFD4EBA5D0FA35AEF9F3520CA82D121BF6885BBDAF15248A9E4649ADB94D 0735CC4D14E1D7275427D00C8E709579612F7F74DB6FC218C10C278CC63E2AE2 37EC996B10C0229D687F0DB5E38A8C4DAFB3DD8A9E7ED37186FEFC97790A1EA6 636A88FA9FB4D282234BAAD301A1F3AD33F252C5EEC49410562FC52809CEC466 A0F6D148E9AF19D6DA2337C8283FBFF6005C37AAEB0B7F7217A8DC6F949B9984 72DEF163E4D5ECE4288404448C96A7FF0AC76F732D50AD63A1D286C9180E80E7 C218B1F48E3034FCABA6BF262CEECC284AC29E9F3CA1CFC1639A681ED66C1FBA 666F073D45C84A286E05FF809D4764FE819B6A330E73695CCF2F448B4D4EB4B3 F63E94EC289807A2F9A1159CF328C002B467B19D6E9454CCE36FC19E0A214190 B251818DD456EF658B0398E275514B72D9C1DA5F806EABCF1DD56BC025D69FC8 A0C2FAAC1892B64D2AF79EA2F57F103CA623E440307600D50E783FAA998EBD40 51D23A0CEFF8D8649B48B982DC38D613F882DCCAE5F51233A641B3CFD783F830 D984F116DEA3ED8F0D3369AE629A006BAD4523F8E3C7C6B39A6C972508B67AE9 32613F28CCFFC4BBC86CF31A0C25C786554F7A1F3DE97F5CFD1A941F775067A4 784385E2D02EE1FF886701B1E87D966D3F500E15591A5012E645837FE2DBE3E6 A3D375C6CA0ADBF96B33EC3FCFFFD888D7344B31D40427B8A8BED0FEC6FBE038 1FB5F0714C4B5A0E607E215B5B7F76ACF0FEAA4C9790EB7E13C0E3933B7C63FE 5B934EA34F4B741C3667BF1735C685CECA63507E6FB9EB06AA010311F12AC1AB 4CE3FE8D1EA1EDB3C700BEBA516FC71D740B1CA1A60D4578003973CC3EE21DB1 58FB1CF7E2EAEB2A4A6C742EBC3575EE6378531C6EFA6E6986E68B8E25CEEA67 A59623FC1ED2ADDA9D72DBA627D179E47DC7F5551E07EA4D54ADB6CC8109D340 7279F288E552EFD79C17DA3431E53EED66D16F24BF86468C2FE7EFF421560500 12FB048D6CE2F370BE4E560F8B4AA12362ACFEBC839351C1D5100C625B14CFDC 747B66082D4AD5474A63EA0054E9C3E6295AF6B133348487B0471395857F4B73 4BF8337DCE2FE2E1A4EAD7E7BEDC822BDDCE42B79B308C11897C98E3ADE253CD 09CEEEC0CB1DB66AB072E36E1E04911F40B535B0FD85982C21B8A587D65C38D2 DBC5A07A0A26DFFF7460F10781069490AC1B611CF7312A14B4AA6005A4582C5D 336BCC30EB47749193BE8D457A43F54204B070DF5AC2057B6437E23705C7FE8F 7BB150560F7044BE3E48EFDDA539FEEFB0D2A7856CD4E405FCE0F5EB190D91AE 578E2EDEB9ECA218573BB1A8EF116043A27DD17A4047BCCC7C5F3C563A910778 45ABCA32C7347E6180ACC86F9D665FF025DD8AF514FC3724B5C3510F3C37E0AC 5101D1667C6ED4E8F37F06CC2BDF66CB5A9FB7C52CAD26344FD1557571336A1E 1E340EBA149B4EB99016D1A411FB874914AAB2A415CE3F5FDFBBF5AFD7959B9F CB127BDC68D2A2F3F07FF3D4FF32046C0371CD2E68A6471E46B08413FC3C7A80 A107EEE57979DB387B2206D2810DB310B7232B2DAA385256C8A58964B512003F A0C24ED21809E2576229627278118107B9C32345C1EE8C0CFB452CA362379369 31320DEB5371037AFAD093B61E8AC7A6DCF7D49C7F8EC32DC0ECEAFD7E892810 039570D2956289B15E078C2545911BF535F72F7DAC619BBDEEFA855BBAA81704 18F7D351B0936357085A32157AD8E27438A58B2397D69264E748B0B8D01B33F4 D04DC59326A7DED39E247A1C1A1AE49382BDBDE9478A1CB48F88BDF14A268B40 A40B9FBFC4C87FD3DF1EB2464C3C14E36CA41E09EE0A9B75FEB0769F9ECEB1BA EBF73B818427FACDBC33BB95B9654F31C59A766E931C698A8608F15290FCDBD3 5C535D9036A19CB7B55BF54E96F9B2206DC71624E2E55FE632FDFDEC8757AEA3 1D83D190ABED5E7A7AAE2F41FCEBC7C18626BF58F9E9F02FBAE0C8AA85E9DB21 A3D8907522DCBAE4923C6A2A09FD2F08FE32215C544AB577B337D929E625E704 E041C2381AFCFEA37F3133B6CA20093EFD457C772E428325E56C9CBCC447EF9A 05A8C3F28017DD4FFACC51B38E4896C5044266EAB4EB7C13FE855E790DCF8A17 B61B1D30DD866BC57397EF6297C4891451FD6A5C6AD6D7446F58F56A68650908 224D9F4C31C6906FD29BB51DC947465B808438E6260325752808963C808A4AAD 60422ADD62CAF315F6AE92FACEC55D5B682089AC0BC051CE1E2C06A3874736CF 0DB5F7C8F178479E4F11665402781D80397C75456F5CDF0A4F382A19EC6AD64F 71A9275264800E178F212269154DD8352167C57EBC0A38BE794AAD1601C8E541 7E1AB8E969A76E1EB4092644958FEA2AD29635E70C4DFE2EB0D9B3E1644FAAD9 B27AD5466EFAC724718962B62E7B8C32F412B69DFFEB792587D571FB5C591D95 4CD441662CD1B07595E245FA537FA9EB5A20A97E5C9251EED22C9961B48B25ED 85BB7524F635F9CBA3714C6D60A6BF920C45A64F4C366C1F9D22F53084997C9A EFE2D79FBE3347111F5093E271DB7E3770B35D253DAF93653F6A23FA145AD775 AF11E188EA0428137D9A14542E3EDA6F7B2E5AA86C9F3D3649A85ED2F020C696 01A339FE6D7E42BC548C8F92A4E3809C67A986C99418772403D16D0E8662595A 1F37563671D6DA0F36CAC99DAA8FEA215DF7D45E61314915A30A22FCA86A50D5 2FF2EF08E240F9FAC030D92BDFBE40F1972DF413E6B452024CD11792BFDAA2D7 C82716528AD4B3D637BB43E748336DCC86A952BE96F1EA423E31340FCACDC1EB 02EE932F58734AF3A5B2279361B63F1D824EE3BA9F4D2EC7B33A300A1CE8CA43 24616444176DB8099D85AC68329B1F85E4B5B16F3B396FE2AE7774F3065D0203 AA140DC128D6F935C44733EF585F89E8639A2096A225A2E5E49D447D8AF9FD44 CF6C1BAD5C5E5262AECC5543EC8199B00B72BE32A0F110F64A1D0D5CCEF38FD1 155D6198E9A343702F8ECF5052333272CAC2FE016681E12745CBE14E1065EFD5 407DA3686080989F6F6D650A9F1EB3A813B070C30C0D3B4A1E9C206E2E4DFD51 D8DCBE9AECF956640A2E79F1B4FD0EB8E0449AE1B8FFEBC43275743B4D7F6605 0673B61EB3189E74F51F3780A91E6A5C6464C8CF7D563D9958D46F39B1A12087 6BBD4898BA9ABA468AE1F24115891FD3CBC2195F75958E26DF8BF1B93F7B521A C12112237AB23A8E5A7B7D0DC4C53692B35F3CD813EB463C0BD3A6486B0476C6 3B36DA71FE512E5745D097FD4AF5D056E434DEE2AF926B2EE79F7FC4FEFD4130 BB4B4BE01E5C720325A4884507CB51CBA4FFB615B78A4182444F0ECBE4161A58 E86FE1DA2E39C2BECBCF1F1D7B9B776A26078FC252128FA8108CB83F673CFD37 CCDA493234FB93E1550EF8D2DC049ED95B00A8A57834B024B277D3DF062E748C B61F183F2D72AD075474F8165528CE75E4F40B38B0FAAE45751C1907F8D31619 E88EAB02EEED415F3EE3BC5BECC6AF565D34E0BA2958FF337A2B06012DD1858E C53DE52C108BD5AAB76C882198C72CDCC958D68EA8FD26F76F04EC1A08B2AC3F A6D0E8724D2656555DBC0C8C42A3E22ACA7E1BC8E9F897D9AB692E0FB9EC32EC 59E31CCA4516A3C3BFD5411BAC3DEDCE374D48681CE7D67DEAB93F5B5C5290AC FEB29C5EA2C98095692873D36C7DA24847B66F31E4CA4C7AE5C79D7CE4F0532B 78620582E3731A2A6533A03E7155B33E7CD142FE79F72721862EDB24959B9783 F834CB616FFCB2A23497BA6D99AE34DC459A2F7B3E4DA2B54BED118ADCD92178 66C40F4E60F6E1327D5DBCA645A2A7C770807E6D7E47E1265C753F8793BD2D1E BDCD749CC24D4AF9315A93F01180A0F9A7F420DA1B87664DA5FD967131273271 9DCC45C3D57EB9B8AF14771E8E751D88B98D2FFDC72F5011D402EC34FD010ACF D3B0660304725191D64FEE106253FCB3470F1A16EB7B45C1489D3534BF94F740 C2781DAFA5E8A9E7B25A85BD7935DF3ADDE08C960E283D8FC3976FDB4085DBB4 B6B35FB239C28C785B18BE4FC98F3A5F410F562DB5FCA04E8074E4E790F4265E F88117B3D0833AFAE6E8B8A71D7731BA6F14FD6F217EDA3F8CC687A494FC3914 B84FDC37C8C335AB1E7E0BEC7FB6B7A595C50CF8F0080C8D461BCB8B579A5155 F963B6587873FA31C3A6572740C63EFBE58A2EBB723B7517D2A243F6CB08A038 54F4DF0F6692022B2EE8C6F6B73735ED3166BAC58D9216A06EA6FC7B63B20031 D0F0F99D83D9030B413C2360DD2C553E34BD67851B743C3FDA676AD63C5BD759 9131358C6BCDF05FCC048F4EBB9005899ACDD8E9EC9BB8C5A08E83485047D263 0ED69B4D1869A38068FDA03524022A1D32FA2AE0BF728D2A654E52B6A6C90A3A 725F86627D7C3EC5AF5AC512976D35FE42AACA3FECB401788D0BFFD9F4743BB2 EC5B4E7891F216DCA5A69E917A171E0069A03FB214ED307DE947225049D46E0C 4707503F09811A597A9113921AAC23AB1CAA9866F81A02BDF349FAB129F23E86 E384C043053055938D42ACBF9F0EE86CEBEB011BD5BB7D593104140E6AA9CFB0 4E0B47C91E504BB6A95B2CBC36EC03BE01897C3D498EB30FBE4BD9584B9D766F CB3CC7C96FE3F50E5B15E00AADFC4CC5F070174140B900AB6641C0D3288DF57D EA7A8218D2756207016378DAB96F019A7CA184E464BCCA3EC26A825154216681 E9C7E9DDB1E7A19E6BA5C33BF110B670CB8C9278F1B10F9B80FED965D9CACBB0 8182A446B47E392C8C80FF10149219A5E1939136FDC294332A11A2B7813C337E B57F83F6ECDF3953920EEC54531F6ED1721CB57D780E5A203425585B2BB67E90 22751099A7263C3F9413B20D8611E58EC20A84E0B6159D743BB1CF415839AA13 FEF65F4263104D2021831A6CFCBD1552D99ACDCE76927699529D0BDF6EAAE40D 79B892353966686433B20BABEEC26E5CD6DC647A44F6D4F5232C90BC5A0565DF B74E09B8F10588517CB8055DB01C7D5ED55CAD41E197 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMR8 %!PS-AdobeFont-1.0: CMR8 003.002 %%Title: CMR8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup /UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR8 def /FontBBox {-36 -250 1070 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR8.) readonly def /FullName (CMR8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 48 /zero put dup 70 /F put dup 99 /c put dup 101 /e put dup 110 /n put dup 113 /q put dup 114 /r put dup 117 /u put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B 8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF 27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF 18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB 7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242 6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8 B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517 2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374 3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850 9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45 7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D 25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502 CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2 DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB 16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413 07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752 762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978 D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826 CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C 74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541 1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9 E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44 3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE 37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89 7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762 C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36 A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D 7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447 CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD 3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61 59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89 6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069 79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070 F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B 49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38 2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B 29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F 2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87 5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237 EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5 5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E 293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806 568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405 64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109 A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075 267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D 136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0 A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7 80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7 D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB 46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9 66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8 2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71 CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF 2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0 DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5 CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B 0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47 CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479 7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF 6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893 6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C 72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256 13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE 6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7 1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197 86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72 D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B 70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10 0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20 FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180 52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5 7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA 09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7 401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335 74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127 3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6 ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0 93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197 301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847 F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61 1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E 36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291 34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011 ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B 9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634 E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A 893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8 E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE 0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2 B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5 B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F 3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7 AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5 98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF 4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1 AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E 015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A 167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F 9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522 CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831 130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202 2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154 C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0 ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3 3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612 E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20 3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7 3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D 947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972 26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479 0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697 984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247 44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49 603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B 6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE 276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF 809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22 08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7 3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF 76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5 A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602 3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41 966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18 CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531 2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF 94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641 DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35 9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1 FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E 1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77 24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C 06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC 6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530 F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6 26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6 D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2 49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17 064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692 8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445 2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359 52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1 17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF 145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F 2FC33D0D499DBE56C6668E137715D435D6B683E0113647B2765AB0F3D98AC717 5B33C3EDDE18506E73B4E392B022F30480BD30F59B2E3A59D93017296C3156B4 B5722E1955777716388AA987B2665669716F866FE6BDAD5E74A523CC03915F26 9B7B231F5D9B1F61DF7CB01ED3F27070E36547B263855DF5B2E3ABD2ACC440B9 0826E1DCCF222C2C481CA44F0FDB78B3EB4165F3CEC5C2A056D1DB93172C4B72 816DF9B504269EBBB0E991BAA89D8E21E4E48E22BAC83A5EEE833843B49C6B7E 2213C6BB5D5A06B5A3456EB0D4E22B8120325DEB5FE283D467947D5267B77FC9 5F1349E6125A8F072ED33FB0F303CDDF08B6A60DC195391760204C96BB2C5C99 6EE9008BE9D7EFD2B92AEF911D3BD0E165B45852851EEFCC0CAE974157B24E35 A53D5CE86978413021CBCA7CFCEDB934E526C4A7D578B105309DA145A55A2CAB BB5B97CF29C9511BBB9E92830D31CCAD135591EDE65EECB2C67CEA040FAD8ACE B9CBEBBEEF33FE439A7FD13101A5846FC7EB6FB3ECC2ED52E8049E6CBEAA6F1A 4C98E73B0779BB201001C6A77250C2E5BDE047672F2965F4E6CF01B299AA5A89 50291984AEDFD71602744FCCE3D54A9466922FC625AE3CF4A41FF91B6F0FAD0A 69EE0C7CD6AA7BCDB3C529F90283AE2AAC5C48C70EDE240E1BEFD1C57DB8EA31 BF350C91374F51AE7BD4304FFFE390618A4E2884EBCBF3425E499825B499323A 1C4070BEC0F4A4A7FBF6B5932EC254CDE301D0AC73E6A126560E1C4A87F6D1E1 9F8548D3FFA8A2ECAB80F58697DD253117825CDA98B644683CD8ADFCB5D10FA3 71AC5A07B75E56DBD5629F623CE5AA0EF00B430EECE8F9576FBE6455382B2A12 BE5532EE70CE80CA0036480312FB881BFFCE9413BC241BC5BC4AF50A2E69F22D 32474B8F0FD92A5E6F978BD753C1956B5F4DFE98E23ABF2DC63521D8326DB780 726AD3493CCC4648C7CDA5173243BBD78844F487A568FCDF42CCB9ED6D1C6AC4 63637218A766F1F7EA32953F0BDF323591423F26D8D3A5CDDB698E7AA07BE304 8A754C03B5BC47D79C51F9E6DBE40265AB9395A80F9F713F99AC900037F10AB2 45B369747D952C06B28A8205BA21CE6EDDA0A3490C7A731673DFD6935764B86E 0FBD21AB0BDD836F1F36A8B8883A1A890243312F65F586C333CA4105A2989C93 327F153A5F5FDE0F7E8CAC18B66788D4176D7E15D82B3CF317A3A55E51E8102B BFAC37CC3093AD75B5D774B8A235D811FADA33BB4ECB76188B27ABBFFEAE5461 0AC04DC9408510D939ED26EC44DD73B1021E9C8B3F979FCD664A4822F539B87F B6E2545426155CCBA1D9332E0360DBF391CD050FF7A7A4CD2BA52D878EF7BB9B 396C0C0756B5668675B8BE7BD0E62658964CCD30A1AE33EB01FCDC5EA0014E21 58C392DAA11E5EC40A65160BFBDA23C2D293B382B7EBD7AF1E8E1FB4F9EA89AF 001191D5A9AFCF0723A8146778B3C43A40AD91D1CB1B3500876343B6BD3E18A1 9CBB5C02F2E2F02E35D504045FEF316FDFA111FA8E05552E183872BCC52786DC 64C30E61CF4DE57A44DB69E5300AA6800825EF6585135FDA369688959CF7CFA5 2DB50864DC77AA796146721F0346FEF270C91679C516D2B989CD342BD82A9392 FAD36ECDB55F23BE1E6D1774734452075EA953928E70FE763EDD1D1C43649682 AC863969C2F01FFFB4546613DB45B4CEB5D49E13AC3583900DD86ADE33B04AD7 89EDA1E71B0E435FA51CE672610863B09AD523F38ACB9049E19584E02B017B62 0CF1DF503EBDC21E33ADF1AAEF5D3011C252E2F78D72C2CFEE6C3E9B062A19FB 32373E4A0FA640D511D65B57BC20E8B4C0896781333A200403488D5E66FC4AB7 CFC9E768F50EEB370F82A0C891E2A760E48B747005DD501AC1DD02B1C5E2DE5B 1C88FADF871E2D7196F95AF293D84CB3EE1E0BD1EAB950F6C8BC45E0159ED21D 5C39A2FBC8F2ED821E764EE17E0B24422613B625784777A760B860544D8E0686 0615833CCCA7E4A07537AAE75C1E81D080D3B447B600F1BA96E02792BAF7A9ED C28F3F354878ADA8B8537564EA2AE9038283B320D0E0E34590A127D7453F7C75 38358A597F2D193575874E3F2D8B7A5F2B072568C134EA1CD0D426B70DE32E38 2A3ABB2D76E64DC5B5C3484001C905438467C435361B9E472D6AC99C245F081A 27020382548D198EBA28B3DF641AE6C02EB955EED1D2F8C107B102F87E0A4116 5B54536912F502C068555CF0EDFD65BAF94A1A34FC23FDF577148DB5F70D2D4C 33F042DA2357AEECBDF4421832B3CBE6CBF51637B9D0061D3A2006837A406AB6 D4171D10D243A73C0B578DA059FAB16383CE6F98121A60DBD3202167613E7EF3 CB9954E67CA1E80B2AEF8E09753618A374051DF4B63940546D3647283FA207BC 6AC14D0385B10837745F68CB84F19ABAE7A91FBDB46056288C7F4DEB8B4FFAB0 12ECF6F0C5B52BF68A72DB17696AD4CB3DD859B5EC2BA35ACAA02102ED84AB8A AD183EAC5C4A9380FC4BD9767E44B9BF0193E5637790606AD545980594D1CD92 5DDCC247B045F0D026A8153D566FF043B6EF58F34911C4D0BD518BA5E025084C F76ED1FD2DD89E9B8A4D99C0119CF301890856C8796BD5D474C3F3378FDFC48A 4266CD3795C823028FCE91145C4BC9397E57550EC677279A795943BD2F497413 BD9CC9DCF92A8410BEB5BC75AD82C6D03134AEE138267D0BB7B9296EB9539015 ADE8151D07D279C53B30531E8BA1AF2E129D7FA174AD4FA533B477E1FD4C0E8B 3823B77677E5B5CD83192067D8CB9BCC4A0BF164DEBBD84CCEA3FB23F63E1674 A42EC65193E29CD1AC69DD2E024F84A65479296CF7B8D4282E681DE283888BD9 4C816202E2E9547F3294CC5402ECA826AC4EE8820D1D340AD584A6B000110F59 B7422DB4C07AD362E48C4B5273870A7622970C7EC3471784DBDF3C7A2E4D8A96 4D5C611E6615A7EF6D9F2C26898E378E61E39EA5DA 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMBX10 %!PS-AdobeFont-1.0: CMBX10 003.002 %%Title: CMBX10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX10 known{/CMBX10 findfont dup/UniqueID known{dup /UniqueID get 5000768 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX10 def /FontBBox {-56 -250 1164 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX10.) readonly def /FullName (CMBX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 100 /d put dup 101 /e put dup 108 /l put dup 109 /m put dup 110 /n put dup 112 /p put dup 115 /s put dup 117 /u put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43B233BABF23DF8DB B6C2BD2F04672F9A3B7FE430263E962F16A948319C51B8ADE6E8A80D3D88023A 6DEA4D271676C2C8615C4A0EA7DC8F6601610F398673A4D4B905F49EA868FEF6 39BE073001A36DEA6C08ED51452F062B971740019692E221F4455EDE46AF24B8 407A98B791F6AD525C72C09776247E194043281D04FE1CD1D8AD8DCEEC3045B4 F95B3B41CD3300768D8A049815348BD7AC1004F5500817E3A267D694AE108BAF 285B288FC5F28A03E9D34FE5D9B2F9A9BB26ADE66B1CF8EB5BE606E83D213C33 DE083C20D636EF780E761944FCE3B8A950B1E6E7568F33B557C6D59E0CEAF185 53E609A4F58AC4D5269116F958C4D115C44B5A6DABAB79D3BB6E60BDFCECE108 74CFBE258779F32C80CD7D9A7CEBA50A0966BD9961F71560119668C4A0C30A5D ED91ACB30940502B24F33906D6E0F16F81DA87EB6D7FC8B7853BE388C40D75C2 2CA8F94713AAA1561F5321CE97997CB4AF0E37F44E25B0F73CF4986422B1CD89 8F861CA623004ADB1C28268D7F8C484AA10C9519B6AEADC95AFAA3304D60E85D 718B2F67D2B734095E5A92C90785252C98067DC05137BE735220BBCB7C341D61 C4B98BFB1EAF883D38D7A93195A059EF82B42027F23B6CD633231D704B891A9B 03D11A646F13898F20321D7BC150C63FD6DC6BF9CAFD8DA759E95384B729A0B2 767B9F3E55C682F7A248BC1184F7D294CFFAE0B246DFCC8F215625DDD4F49F09 FA8D41CBF4A06152FEB152C61539ADF7E70A4D23AF8267D25CE3B12D39D62377 547E2528D18DC4134FA3BE0437EE0B3509223D71F06D44C6227D62BD01AC0A2A 3EDA975E894371C07CA1027B102549A7D552FFD25ED2DCC68E29E71BBAB43C62 57B0BFC6A953ABC2EF703F35D112F6B5460018CDCEAD17F149DBE5B52C2B9E10 9818EA6D97C8AC884F6841C9B600A7D868F59C1D80E98DE0741D06D69858EC84 1B33C6C9938B7E8A6FF6C12AD456EECBD3EBAF0D7331536B9F6422019FAFFFA4 822E79D6D89D6366DA636CB708894FEF904F366E295F1CB808E78E883913C4FB 1631248ED6A7CF1095C0C61C4F05E4B9DFC47533A5FD24540AD71A0E2907B98B 28085EB88ABFC3478C9644594C7DC4244ED5A7C1CA8D960B65497D56D174645A B88F12C2CF0A807DA314017984CF3C4FB7F47392A651EB9CFA961B28E2989893 9FC4D97171BD5338673F5D1CE2C3C08D48A1B77769F01D5058236C655FFD864B 80E28F900191D4EB349AA5E400A7B0A0FCA0F3E79D7A7C69775BF754329397B7 D18B20B2683CBC4A19729BA878B3C17EBA0A7E9EE297A5B67E915CAD92C8F356 582B8299DE6A58E73408F525F7EA895C48A8F0D626A06A96A50348DFBE479D89 4272576FBB0CD332193D28A8F11503BAE98F8E1D73CF5BCADF23DCD4E6586ABB 323568F5A34E359661074D50CD8D9DF27191FCE24F10225A5D721EFDE2547E1D CA998077D2340B1A4ADFFF570AA677CDF3305D5E3A394BB1626EB35074D4EEAC 2F037CA2EA389F7683FD17A8E07C12B4CB3BA8C249C9B12D297C618009F76717 0EBF5F2DD39A6BDA10A2E5A811D4E190660F5FDDBA29201B6F8042620397AB2C E59267A7247B0463891831A6F40582BC3F614E5167B646A8F53D8A31717DD9A1 9034034E705BA7884F0E0738307AF69D3517147C282747F2788462FDC4336A4F 9CD222908401A25F0A1F7B13B8DAE622DC965AD0BE62497420B70C04AF432237 E0FDD043456187658ED93B0F9822A3998511DF05E59CC85B7B9992CA0CE3B814 9723BAE70D2631F32B4BF93511F67179FFAD2075E1591CA5907A4C67701B56CF A5E5B02EB4A842BA1F18D6864E5677359C2FB4AF5BCBABAFB053F230CC129B45 8D15413F736EB07C571521C7DE2A13F2AC1C133D491B0A607197BE9AA1231D96 BED7968788246B2E4D2BD330F802810F5BDA3760FEA5210CFC6F54748FB1D921 5CC3624BBA5B8962AA7D94159651589540B17CF7A785F297264F9C1006D36928 6E2756D3B623A6087E4B106FBA76255903C624C07E18A1AF4E185A533C640711 86BB477A906ADD36EB6C8F4A12BC2F01B2B98412E4E105977640930CD998D990 0254A1E5E9843B7A8ADE0AF6D5871E6D3D666465AE69813A2E26333213FF6713 6F08D55A90C079A56E1B9AC655F720FC22B5AD8550FFF26DA7B0C5A0B60DDB05 64E8FAF684F3A455BA9BC9278043D79537D201D520E38750335A4C8FEA887377 879331B68DAD6B253F4FF9981D0F9B9550ED5179B15EEEB00E560A3DB6E5973B 63403E4E2F40A3D0B937246E9652000B917B1369741E0F913C14C2D2D6D1FCBE 2CEC4422177C58523715BD070002EC2E13D383A1DC8C84228862B6C5D3B65667 9FA97E175239BB7FE7E37E14B96DD7960A8AD49DF428CFC13B5D3CC22E245317 47B5244DA97F1DF954CED2D552477237CB23D037C0DE728E26C82738954EEA1F F34FE497DA005AF03746DD2ACF77F6E6F2C224862A1D18AF6F7A5DAF34564387 9E01DBFF49F8621C058C04C2B3F4F3033FF3E8A977B2CD6B2A3CA4A6C569B19F C5AC457AE9AF334DA66A730960C7565E93A2D373C0E3DE14646FFDA05DF4C6EB 6D4CA8ACCA3C3115764F77B842581760BFB9E5C0EBE55308B0577A8F4D968CE2 BA3361D79378D451DD150C34D7E901397AC63B33BD7DB13C50D678F5DE999238 4B4EA15BD449C46F262D931478F5685CDEEC4C4201FC3EFA607AFB8F27AF6751 125DE42D2FE2D31DE769B7E7FD8CC8C5D91343B537139A822A5BC4160BB5314E 37501F65B4FC35475FE9E03E34CBF6795AE86CE409500BD0799DE39FA69978B6 EC74D2197C03632D3F59B85F404DB31240968FA75059B2581B101E028CDECC2E 7E5E25DFA106E9B8ADB81E82BE9ED3BAA9D03EEB22B7B67AB1262DF6AF5F5EFD A5627EFEB84F3A5F92EF2557EDA2843D7D18C592635623CEAB14CC3620F33986 410D6DBAEF9F86E4E6682054540E2B01D8FF2161F10E66851A188BC15BD6666E 8D3F21709F196A31EE676D28A2D12639CC2E7020A52910F052E61A0710DF09B0 064171D05611451BD24FAD64716F141E1C41D3218A8115A3D73CA041D02B46D9 28C3D07DF0FB668E8E91409C8D0A26A65CD737C075E026AC0A974C9BE658199B 3B9D82ED95E4646977D8F60717DA4C68767DBD7E8320D5AA1D5DEB2E6B009759 8282F27D64F1F904830AAB501CDA4D9233FC2F12F77F0FBCC46E6B729C71F6D5 E6F3EA02EC35D1048394F4EF2177FC5EB726DE5EF2DE7997166B8BE5B5105D08 EAAC3481FC612665CA112D3F889A0E5B7843EFFCEFACA24A01B6AC2B7DDE02F4 A9295AA2409A3756BAAB44608DACBB56840060037869455BEBA46F10AFC68DD0 0563843DF111C6D34911CF13AA6023E5E899060B5EC60D0F78FDEF3E981151A9 24903EB13ED1A67EA1977449716D1A5A7EDE1A2E9465C9C2B20A58AF02D9F373 73E627CBF296B3A6A4670C39F3B5EA30D76F0362C81020A1777F0ADDBC6B52F7 213FEE1718214087837049CF2AF00407639657428B9E8B532F68B631611A3501 3D9DCA38090E227BD0D6D0FB4130EE866DB6B195C873AFD18DDB3B1E40F740C6 B3B375ADCBBF628A07A5FACED539FEDA3379D3B60216C2EA6629BE2F65199D82 FE3AE627D7C67270F3497AE75F7A9514968B5950E2D63C38DA240AF4E6CAE88E E25167D179108679876E7C80C85FE1D2BCC2EC9B88BE76A8F5736E8E6B3A9CF9 42E58A4ECB7914865E67C1468CF66D658206830B9380FE346DC2DC4BB56A92CE 4B5E4EA9036C177869315A2D9E6CFE97E3BFD7CBE0747D40CE5E8A3A0988576B 8AD2B1E4314C0D8A0CBCA08844A49F7E054D31BA7543730C0A7390BC4A288D10 CE29E389A4791305D3AC1BB6F77C805F1032787306F78FF76A20A9E629899F6D 13356768D33D7B9E294E8CD50CBFB9CA02A193922BD9B4372C912D1689B6644D 52CAA30F7421E8114D077288119AD9514EF21E5B9989CCE2ABA0C12549FDF493 FFB39736AC9EB72DAF45E4EA6057527FA9F5AA0A1A3F03C12F7482E465C766D3 760DA7714D56C91BDAED507A5572BEB51A895F8DD3BD5AAB042650154FC7E4E5 5EEA6194DF73AC5EE2CBD4EE26E29B1D2D0C458B4850BFE842DDF2EBB4E2A25D C6A11CA2D8F346E2B736DF88A3D57BC0380B52396A6C039212699F5D3342EB58 0C3DD5D01D5078479BD9FD10C07925556C0AB0F03606F33796BA72074549EDA6 E33644F62CA35207D7421D2727AD8419AD1772789D33405FCDDC9286BC34C974 A52297F5BBD2E541E8BB473F733AE5097BBC9D5FACF18DE4173B4711E28B23ED 16E0A6746A60F6FF903026A3900169EDA87D98396E762C2EC963D89197B8CD0C 25244806BE7CBF46BE60A8F9171731EADFC969C28679B025371E5572E52A0EF8 B3FD9B4638D03E20BFDEC9345E70B8166D38846DCA68E0D0B4B53629C7E7620B 45E0A610BCD07FEF8814CF915CFB11119F42407D1C6DC1E6353451D40A382C2E C74DF2A4889ED5A3495C3E973565F7178CA190D22C9693C10EB12C1E7A8679CE 4AFECFC964CC98111BA4ED2BA9B10292A71D5B11870EB08EB483922CE8628A06 05E7CF6DF93E112B60EF888AA8DB52994EC33DC7277D7B7A4F913AD30257261A D6EE80476A9A8D316D190BE6CE0046CBBCED365AB305495284FA921BE0638E00 63DB2AA4C5F163340BCCD1061B469504DEE350B82FBE1689C1B65D095405614B 35997D6F0DACA7190D64ABA351705B17B23FE2EE5996FCD607F49F54392463EC DD5B944A4B82FA2BE3E75E2946D483060DF99277340B0AB65A2042AD088E2B75 BBDAB869D1940F64B50D25078519D18748AD64AC5615EFAAF4F3105B0111AD40 70EE173ABE6A4ACE486B4E5999158A4377FDA6922FAA6E9305F48570D14BC81F BFF4C663E1EA9D1E050534F9315A663C4C5DA52CB02EA6408AA473C32CB0CD71 169BB43C0508A842F400240F0063243B4C459A1FCB3312C41C32ED0EE87F591A BCB6D5D3830AE4645CB4D40336DB4AB6540B52E70E1EA415CC6D886827EBC5B3 EC35CC5C136243B0C20B3C603B648B132B99D05F9B48263ACFA59A856BE74441 FECF5C6D1FE9D1F4F9942F460961901E16017144C37E83C6822177B2A6C47ECC 6C47A1104460665E5BCFCF08874008302750EB991CD98D0D8D22B921F90B99B9 05EE7C39F2BC2A7798157503743C9F2F267BDBE2E8A4CDA7317F81DBF8962E1C EC02822CC7F770FD4D08D335904375BF0C6DAA0510771627ECB9EE69C0F47D30 69A87052989DF80D9F4F19F75B070C3689AB3BE0966453F9D56CED6C1745B50D 813AE6D7E44B73423AB3778ABE4CD2C4DF40E14C5A426043F7057E2DFA2DAA70 EA6723F1C7967FECB1E7C1C0CA283334163FBE31C32254490170C3513580A552 19A5DD75E6C4ADCB12D33517A03318A6BBC7E4214266E125140D8C40F78A0340 1F95D9FBEC4DCC55B71E89375AA94B0D55646F6C069561480407D0A3AC127024 D7D1E9ED6B599A2A8766B8792F46D35508B66F302D289405B101A3C6BADA680D 8C56E2A00B766A4CB155446F862FCF17537A2BE85418E20CD77C4F1F69F70BC6 17BB5DA8FAA876D0E8BABE273A19C04A8697B3E3CF4725E2C77C8761A9243F24 96F8AE96399996001A57FD75106745AB4646FB9C6421F1D4EBF3BE533BD11AE8 14BFBD6D308376B26E08E4ADA490DDCCA94BE8240403D5EB0FE3549061DFB668 4105B4FE77189546619B6BCF3F9723E278E98D50A17DB8A4C46744FA21760635 5B332689316BD17C966D466AE737FE3ED7ABC443ADD88D4823A10BC9747ABDEE 027515AC353A420523F85298029475D8BFD83A2CD00C02CA07974BAA581D2215 A850E6E4C0A5E17E0EDF91C63FAC18C70093F40FEEAF0350B403E2806F4EAE96 BF616A805616EE55C4657418C26CAF54187A6684821B86A76F15088AC4D5B551 66C3CA8DC61E9810858D1204F899C7E3A1754F483134609F6EEE6364B1CC04FD 92C86EF194FA3249601AD722D75D1D395CD15A93C768EC60A486AE885683364F 93DA00A865C1035F913FDA69E7D9A0422880FB81EC23C00427F07A5EA3CCB613 83C859958AC53FAEA26A6BB39ABA068863CCE3D447720BC31A5136E08EE58963 093AF587A72112D55853A1048A2B1695DB2D7F13CC924F2F0902071260C33ED6 30893A04577C0ACF0681C0FEC23E5404F844A83BB5A2F8DE1F0792196139993C 1152094BC36A6AE5BAB4B8281E506F485F0BAEEBBE71E174B7CED1E52A8242F9 DBDF3E0FBA296538D964EB5B7A4E23B1BB0F59872C9D4FE8498203E3AC08B71E D2B965AA6CD5D20DA6C83FDC86F4A5D68A58A72C5BB9BFE9BC755C56B24025CE 6F24443D3CF32CD711D3D94C7C1DC275DDAE3341D840090F97CB6CAEF274C94F 9F3BD3AAB3F98BA8A7B5CE5E48D1462DAAB37BEB1C10B410E8D33FA42D898183 BD4F807112D78AA94509E33C179BF7C9E82E55AA7D09E128A0DA06A330CF4AF8 5DC861498CE029CE8C1BD15C923A708F2E7AF98E4F7B34212A0CB417553C86EB 6DD46B0466F1A21D29FC5111226794ECFCA5DD4240C0B8D106CCD7EA6F03E133 BB7733F055D6FFA04EF5C6F872B4FDA3E42F0F036C4825543D75682ACF71B548 DED160ACD05625274799D0AE201305DA526E01A3D2A719B1B15C05CC09467F3A 5627860C0F36C503EE392E1786620F3F2287AFE56634E03566B9B1F537FD92A2 913166228791871A8F8CBA1A1DA634E8224058052A10FE1E67CBD3FD21A6C07E 243CBF58BDC78577847664EEA5225EB8D6679AB17C563848A9D4D58995EA3609 51C1443B752A070D9872FE1643F0677019235AC25DC2B29169D38308F2170A1A A0FDCC59E6602197D2815B914041FFC7106DAAAF30CD97400C6D0826A40385A4 C8520119A065CF32CF2FC5FBD8DFD29222528A7F96FDA533145846B3428F8239 E50277C366418D713F84B12A5FD4F904DC13DB1844A391FDAEB97643A6FD2945 942FD4FC5A4A35E184F23304B8B4D93D0C37EFCC4E106D4FCD0DA3E5D2117589 3FFC2BD1D121026562C55C455C3585050B9460891B006F62D9D9B66695C3D348 A467C14C0256FA9621CB056E7CD389505194FF463BCC4010897F9A690EA87D9D BB3ED4C174FBADB8A4744C6E4A44D773967FD703EC37672F9993DC48BCC8A060 6CEFE8E6B8F10886E15BA0466AF410B90DF0020FAB88BE493606B6A734EA85BB 926950EB10D2F2CFDBD182B0F133809612CCF6ACCAD049C8005A42FAF78368B9 E7684F98DE421BE0A3BC0FAEE024A7BE67E15C8394F17FE84DFD8156C2A3E94D 08259E15CC657E8CE3088395BF6B5F825764E141AE15EBD186DC049261623D26 8636705E06C6E4A1F8ACAEA59F91B042DF5DB9C2AB986A784384706A43E5F18E 42C29CC1CA86D4F247B3BBBC89F3633EE074DCA4AC15B1E33EE4822812A62E88 C32B0AA57249980EE17AFC1346074800FA529445D18649A0475246A25CF325A0 BDA06AAF392FD455218B13D9ED577D51A9500B9FB7860716A8E2FB3A8C4BE3B3 6656C6A5653AEF00184020ACA0BCCBF48BE3BF91E11C8658686C89848E714E6D DC158DCD1C1BC03B83FF94C60B1DC71CE8A86B46DBE661C9F8F4677F8A2C7CF1 E41A91EBDA2304735147BE66CDFF2673F09D408297302124C127F0B35690CAE9 CE1679120CC4D582FB69550AD34A047DDFCD9D411724554CCED753DB52D6AA7B 22B0C55EB698ADDBB0F8ED15C971AEF113C74B9E25DA29199237B98DA4023665 C2A63A837E4CAB38F8DF37DBAB5DC80C0C3FA72C8A70DC76B5B36B2EEADDCE74 23CF794B66E4DD3B35BF99893789063BF7B01D5F186B2FDE518B2CF2EDE51F81 38244BC64548AC3433A80B86D6A0CA26D77F403C06D65B7394BF1FC7D06D37A5 E70ACD844E3367DE4DB71312CBB85ADD21D5A1F99BB8427F252D90ABB66D7154 EA5AF4A165DF6415A0880AE784071E6B3E2101F0B663DE14DB1ABF8B7CE0E6D9 D24F9CDD9F80028D37C9CB4067A28D41E879AEFECDA71F649EB3C250BFF809D8 1E427E3BF24E85C75F080D93E0314883988B3A4A2B72A1B4A3D2189AB6ECFFBB C58151AF05AE335200711ED945E18B4BBCE24A8A162BD9BB26137253BA8B5819 41E759A7CA7CBA129BAAD438E87189F2F6AE7C86F4EA099DEB23705A500332A7 4F141D8778EAF3910486B2EA25AAD16B60DD804D0E5BAB0FEBB77BC95EDED08D B8941E040D99E8F44E70FF842306ACCF65C0AC9673859DB9C3A724238CB8CE62 255BAF0145692EE3B52643A0DE3E667AD03EEF6C753F57E34AECAB0CFEC7B07A 150D7151E57BB3A026D50C7A88DF5F480147D87DFEFE463F76122EEB5128796E 46CB0AF4B537987C2ED552B37D83F393222659DB735F2A293159AD84AF082B95 6F1454471FC36D805485D619D58FC53FBD6E3F72660ABA559B91ECDEFB267268 86A75650C3919962B0139409A29F5E3FA70B901CD5D2C49144778CFFF1D5B63E 099C92AABDAA73D54689812279C95FB7A4F7E840DD53DD3197A4E6D3099446FA C0032FD40411E8F3300A8A8934B5216B01D916D41DDB32513DC4ACFCEFE43D6B 22FEF13D3567B047C6B35C477ACF2E172701FDB0FFFBE01DD58D7E54398EF4AF DA5A404E194BCC39BEADEE5C76D7CD1E602793B950256F25871A9760C80B1EB4 D1E1179C390BC240DA061C9D539B20F4FCFB72DD0C1E860DEA2988E749819787 F04BA7A9CC3EDBF9CDE46895FE31EF0F8DEB63E295E8826BF920C8FEAE3B2080 8C98DC43DB22C6537028798198E2D3B0453ED725B774686310F635AE6153D9E1 8A0514882D4CCFE9D2D2465513E42E548F64A50ED78AEC9D62E0F9CF61EBFC9E E8832D60E91796C916FAFE58F51818B80BBA52C1C06D94E602481654E5378C8D 137E3A872753CCDE4B2618C031CFB13EE91C91335441C434296DDEF61CDFBF8E 8FAF25DB3B6D6796FCCE2711938D605AAC00F0A58DD1A03FCE8732DE541E5E8A 41FC87E1FCA5CD9B5E8D63E7A7D6CEBA67D8A83EAFCF490DB7185AD55ED0F43F 9A1290E91C463895BD12E8A831DAD661E36E1B01ED4C112B8E1D0991D0294BB9 A13B7E9A8835B12A7133E834379B3477DAD425B7996592FB0395E3B4FEDADF4E 23A07F6C0E1387DD54F5C8BD071C4E9E4CC98C55882E29B65E5BED61B57EED93 07FAFD75CF3BB101D1529F83AA8234F70F342B0E531BF23E9A7D1FD112193CAA 4E377B44F94D9E990C22598C2AE33EA73BD0670A4A000DF78624CE01A25DB30E 22B0EE3FA892AF673E323BE5D63D0929903FB45F56B11CC718EF5A690A776E28 8BEED7010ADB1076B23257F9484533DB8A86604B70B9F2A25A7DD70F13B65172 5C3DAA77885AE348CE4EE02021BDDEF16B58AA7B006877B630C97653DE7C661E D5D3477A1BBEB61FFB1A113E316EB366EBDDD54C621987FEF09432023A2EA97D 0B4D38229799F6656F7BB8E67379FC4652ADF65179AACF7FC9CB925A84ABECFC 00B4212CDF4E88876C2DD4E79099677C4A5A97860D9D1615587D68A4AC7A7204 47E421FC84C21560E71E1FC313776DC3717FB397BEC643F896029B671A199342 6378241B3230E538EA282FD38ABE642223D82A657245105757BE84B599C63F2B 008CE5F43703D558AFD6CF637F5B7BE3ECFB2CEC1DD6193BF0B3F2DA259B2279 4B5285456A3F8D65AE57B5DD2BCE68A552AA47F3854DA72478EA84DCC5EA6C61 8A1517C79076F33F654C8BABF2C472D192F98B070C3BB4D3E491950CC7076CEE 67822B1300D3A2B499F879E661548237B268386E066F2C8957F4C24E00179D65 3820FB3EEA99029BC7D92B9229242FE0402434F9E9D0784F451FEACD30A472C2 C7241394973CB6421043F7C7DCF5076A8C3B0A0520055D4A345897CD8D997700 48BCDCD2B7C56C4F15016ACFAEFBF2709E1050E430190D778236E1F3CF2A2E4E B0F5E0046BB0EC79DA3521397B42D6F3E389C51DA1AEDE8292F21814EA7DFF47 68721C5A1D2E8D121B235EED4FC60F6AE7BF7BE43085E59A7E8982198428B465 E858850E6C6CF9E5CA28BA647584F5C1CB17A02FC5A7FFE787387CA91D863A9A 8C9FA8CF7BBB5FEEB920A5DA403E3B41787E1449D6C459B6859867F6440B996B 7AD28238EB51173E04AA8616AE65D972C3E81A5DC5452910B0D9B286E559F189 53057776DD852449E55D47530F269AC1B98101AFCF34C340EA150D8D59B94719 39D77B882243F8A561426FDE05C9C304CB555D6628A79A65BDE6F7F467A41ED7 A40FE1689E6B6F69FD44C3E9D382FB558ED6E1158CFCA33C04ACFDA06C216560 A52D57507C8F16BC6DA689E34C8CA295708D212728C19C09232F7AE51D6624C8 B15D84C4B7B36CAB189684ADBEFE40D6071C2D18A0B90819774D57093EECEB20 7CAA1C2C81ED825DC2E7EEE6D14EBFB9C3C82827878BAEE83AB15AF7823AE436 DC4ACE2F11543317A3A65B4C4CD419C22A0535BEBA631C1B785D2A6B376D2F26 1E6F833FED1423463869E3095E399BA2CDB74B479EA63CCC96F4E35B7DB8A8D7 F3E1C563B26D336769F99E923C38341D5FAF91E5BC1FB3E8F0DDB164D359D7B3 020C65DB0A4BAE1D4C27FF32A5D979E23C8E0F735BA046895452D87AB391C29E 2C70BD2CB82D67AE7484913F544446E9D627C5655F5DF39DE4EE628B55AD3AEF 9CDAF2B8C4EB220A4DBA4AD8B81D2190AD2C037436BD988354D90C44BCCE920C 979763D13C1BA329854173F9656440257F79C4FDCDECABE30FE2A2092BA658C5 C8FDC260B8313FE0938A0141B2AD5AEFDDC154DFD58F90E9235FEEE0A96EE384 012483463C85D84BFB859B4DA9AED8DD3EC429BB6BE3C6AB939508855D5170F6 7870E2E83B25C19236CF797449326CE17BFF834630F038534EB36FB4A15E66D2 511127D3EA37B0E8D4F697157C5D904FF766EC1403FB778DF3F0231898211B11 75210D99BD3126FADE492BDDA58CC7F70BCD0AEE3C4C74E74FCDC840C5606E2F 82E1A309047F453F28D3EA6EC1D1FD48EBECD3734FBC999868B7143A9CDBA841 2B8823A2DCD573DEB40099972923EC769E82D2606DFAB86BA3ED61993CD175E1 F109E9EF19152A162A7A611B0C1544B537B373ADED0E18908DCAE6815EF81164 A37FDDECDE989832A3EF924F742E25B19A0BFCAEDBDB3A3C6D20B40CDED1AA7C 87BF98A456C5CF7EC85DC4DC84C04004094751FD25636D32D49F70BB372E623E D69875E89F752CD43D7DF617E16E13E1A0ACB1A179BEA921AD975BA34D939789 EADA2CB7ADEAC794306C184E4E7C4F12C4B85209F2940C212CD32B3E18E73269 ED8E8A9BF8A75CFD493526C2523B426D91965789B65A8D5543CD79425E7F36C5 91A07EB96D90703551D779EFF681F8F08A0680A068170448F455CC0188983484 415C2B710114788A2A0C21D23110F21DF48C25DF7F8283EEDB29F2DD58A53550 94B058E091D08D8A0689BD28D63CAE1E392264A7BA3710BE6B9399183DEE0755 D69C4EF892868693F93FACF37F9AF74561741A9C9C02B1CA16BF053FB3D388EA 0318A7AFA32DC0C941AB0780428B0C050C80EA4A44738E3CFD3923D4AA33CAC5 C4252CB8F4627E7DE4EE71432AC0AA0D5AA0380874FCB1FA0B49DC72DCF8D987 4AF4619753E2F0678009B2F2EE7575FC56A2E9B780335BA801C4745DFC3E2FCF A4134EE349D91AB2A1F7BF7FA8A3C244CC316B5261634BB2A9182E39D5AF7932 27E8C73020D3F98114DD14D66370B5BB085A73FD4DEB3E54BA2D7349F3527F98 A9DFD878A299DE45098FB84F47F93EE6954FF12E39403029D1B3A5B4D8CF2DE1 4DCCE289A5C4B3AA3151E04E4CF5FEDD9CAAA3B4D3059118FCF7C2B7FB543932 E77D622B30921F0D4CDF999CC506034694DE9CCAB76D506361A0691665A42A35 5530422E80E05272BE344B699D2A6E5B2D883EBB48DCE825FD9F6777B97477A6 B06D39597159237CFF4527EC49DFB3726D80D887E44F3C04B1DE02DAB246C59B 1C7FFB0D8BAC544FF228C45046BD9098C010DB1694E7046F144A71EDF1761456 6ECEC31A61400B5A232ABCB7652965DAE16E3A2E6DCF978D5C03041B4D9F9519 374DF54FFAEAA61C0DBEB873BE4239BB7C7EC1BA796D0B401CEA2F493BDB678F 20A7E94586CB9F90A6EAAF6CBA33610DA9AFCC960089A7FB95EC7AFD0E689F34 3C95A4E4D98AB7637A8B12FFDE34D292B64170824F6E17F04776F87C04C53D6E 4093717B11FEB89476BDA8C80236F5BBAC879FDE03E4F8451A925D658D3F1A43 E412DFE21872DE02B8987532A69823A969A554967B1D60899D2997C3453B6C6E 9FFD84D113CE9706540E53E9AC4AA98182444E63ABEF11A9A38108D66B7F725B 042100C894EA57059C8A11873F9C601EC1D0E5A62409B15425F815953F1BEF14 3AEF54CF2C4A960EFB94F034B2C43CC36070F704FBA40E973A99184200694755 64B23D4A48ADCF945EFB28D70EA4F3AF7C4D800414A87F951BB00C8848C3A2EA 48D5ACC1FBB1AE4C4904B34C560EEBC79F2A58FE2A63038D56794A94091C647E 28ABDC8CA7F937A9249126CF625B174CC1011CD6C9206D8B46391525A276B074 34422E8C3C17FEA49476A70A9384FB6D382A0BAFDA1D782EF5C5C126BD966D7A 8C43AD19FE99A5D1A892EAC634A4B7AE75FFD5DCE621D130041539FA44736247 CBAA66A449C89F9D031F66E7675A185A4485C09C3DF714A1557CB7CCB002B192 1C97564D8A0B552A2007EB6338FDB4E6200B786B07D77C384B45E824E646CD09 64C52C0AE22D62F571DDCD74160B9338C694F92243F369DF52A139660BCEB1C9 A296D2377675C372E86CFB841D418A3FFF99E267C2E056BB55FB8EBB0B544D7C 005911F8C508D8FD5D74A1ED361D35D10228961BA264068F942D81FC41264472 DACB17F573B57559C40AC67733C9043E98A73F5B106A5B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 58 /colon put dup 61 /equal put dup 70 /F put dup 73 /I put dup 84 /T put dup 102 /f put dup 111 /o put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD ED277A492B42D88D0E068D61F2BEAF96BFE7F399175DE7D08981736F7DA253EE 331F97DCBB941B1832E3FDBFA7650E0905E062516F27090476AD2FF0CA78B14E 13CD9482201FEA5AFD00A134F3C357412CEE5E264C20C39E157567538D94E69B 6B7F3EC896D42594593A016CB5FD306F440F63F2F8A60EA6030C5280EFF0AB91 AE4F207B84B68DDE13F0F9671B2E7E4B03C30FD2970B441E2914538354E3EEA5 8F730A0094DEDDDC4A1867AE25CFD73B90688BAFC791B2E6517A4E1BA2F39AF2 E407998778B4E07497DA3811243A86115E451D3ED1539E597DF1BB2FFFE276DB 12DF81F103DAC3E3782F964FEB500B32ED3ED63FBFDC0E43AEE3EE3CAE110D57 D53E36D8081D645083CB8C992985DB99D9BD29DC9FC9391448D296F1205CED8C 5111C7471C53D6A973434A3938E1970D8EA3CD40C7B8FB44205899626C10B168 927E4925532684A429F690536B79F694C1293E1438DEEB728CC5B35F801620FA 2EB8E25C29B364450F33AF7305F28FF3FF34DF7BD592A865F81614B15473D597 88E039C0BD01FBB360077A16C6D30991FB63EEDE2E732DFA6BDFB4C1D0D83185 542DA6218503A75C10C35A95B63056A0ED3DDED1C8764477F6328EF65CBC8D3B ECEB718B49F2297D416D2A3401DAAE76C35A532BAAEBC8A228B58284599EEBB4 250B3B4DE895A70D335D41F59317F44A60ED73DAB72A2F1AC1DF2D2C99CEF50C 236C6047499118755EE07CD09E659FE41B9E9AE8E9D60E06A3E169A1A02B17E1 E5A321FB16C81BC1636D6B4D6D280B4B84778FFA7DC977146FD3B64C7C2FFA65 8BB21E8FAC70D8E3823E35871842BD3E95A8F76885DD0B87E382F1BA066EE793 8A36C655A9CA2E2B7D736DB0F32541B8D32B5C20AEBCF9007B80CA45189BD8A3 B135FE7050A6DD93D6CB6FECC4AE448A1A67E3FF1DCC92B8A4010A5FB94633C8 EA9295B4BC957F62A653018E98A03B7268517394AEC07E4F10FB25DA53070C2B BB4411D9608F4FF0B2E171883C860572E77BAFCFBDBD48AFE79140EB33D4106D 91CFBDEA52C72153C48DC62B435E2D60435497EFE30E582F20D5864807AE8683 1051F55FD1C3B0A09767B0E3F9185FA9D6EFD6B7F8165A6437F7600D061DA9CC 9C41FC34FEFB523CD77C171DC673154B9C531003F473DCDA9764F56EC19382F2 B86AD651CA2B01DB899C2666127A60C776F97ECFF94C2307EB3C44EC877FCCEF CDAEA25114CE2484465A56A684012053B3D078122861668F7F6E96C8E7829242 F1E05AA1A3BA678F44AD7BF3CF980657CCE5506A7AC923DC5E300B27F3261549 5E7F26989BF6328610AED78D0AC8A6526EA1459DE51494A639DD781F1C8B62B7 32C93AD6D5252312974C01FD5FE881F9994498B9CA251192A91D5EE10F947975 B3C8FC5D5856C4CD23C29A70F8E71CE392D8FB2087FC991638FFF960D0D38234 AA1C9900C092C65DDAF5DF5891AF008F869D7AF5E4EF1989FD377E90578C7306 0D2FEC1F218A069053CA2B0A1FBF490CC00B0A45B8D17CB74BDAA4BFF6DAB538 0CBF6172F37878D277D9A29A3B03EA96BC30446FA34F89ED1837E82A0995C680 7B6805524A6D24289FF6CE2EB50AF4A027014D43A353D719B14B247A87898A96 0DF68C0C0FE3889279BD833E4CEAF0C80DEFA6AE947F58A30DC4C7CDC1212D0C 80BE2F454A7D8613D0CF64AC5BCC7FF4C157C20901F88098B1C87175331A8FB6 2F312B70A54548B4769A0AED35C6A162A2F8042E0762A9360B2DEFDE2D57D0AC 1341F032BCBA162134FC3DADB6F9A6FB9137CBE9607998FFE1B4D2716BA61F70 4CAA3FD4727A88730D6AE8D68D1D5B530C884868B7868775EECACE16BB485F55 F723460DD6C93A05E23ABF87E930FA696DA3480C857B7E2F12318F34862A3CE0 7B5C2B5B0098EE29708F98ED5EC55F183D5B2EE491CACCCAACE7F841AC1F60D7 8689111BFA6B2D1015854A43B170C08103526C7DFF028D788DF5373AC68A0B8A 8C159F8856BB81184F4256994B5005D654E490867BBC73A9A9879DBB7FB52F25 A5A5DFA45DB0FDF9B94F0EE1870B692CD097005D1500BF926CBB9146855D0C7D E652A0D32733B6EA08A261F936EDE7E4745E67F5EA79D5D7EAE4DE0A8330DE53 327E86F2A3C810B8826E503BDF87CA82AC039F77FE0D4B91CD072E5DA1DA773F 2059F46A636EEEE6A62B6E1214CE593C8E6A44DF1526522F347A7E54C91D69A0 0CE5CF3F5C7528E7A638F5041056A43F90D0E6A47C2521C1058E8C6689492CD0 99C7CB0A061D63D174B1A2A1C606E5981D948853087B5A8B43DF3613AAAD505C CA785EE521B5D53CD5177C020699005F6C0D10D78585740BB798449CF2CDB83E 7A2B47C10C95FFFF6F55524C8964CE1CA8A15F517A7FE8C30572AD06D6EF7B0E D471DB941811E709BC070B8DEE5D8ED323ED64D790560A64E3B93CEE04453E6B F41692DEC5CBC2465BF1CE78A971F4AC90303A68A6510AD6BD87E9BD0F7E93A6 7159F5E7576A6FBD347BBAE7EDF985A31A59D1D3A011EA04EBF7D2F5D1AAE846 7481D16E8AF6539E38E8A367B56133931E7C52F372CB9CFAF7DA3CAF003473DB A5C03B5BCF8107CC4EB3E5BBF668827AD1CE9ED39E7242C84FA9821CF4CA16EB 943AF05A6D7B488CEC77941EE8A8CF583F9326DFA9ED12F08B91B7E0983965E2 CAFA4372F96E18DA533BB2FCA2267FD97ACDC041F923737AF599DED35127DA26 CFC3AEF7F5FCC28AD59580920606844039C0FF5C49D1AD996A67AB0914D83D85 9C06A7E060285C1F860C6CFDEBC07D3F1415F381236D587D73CC978E88EEA0CA 70F49B517973916884B791DB3DC254114ADA73978E9616FE099066621A67E742 32C1DFD22C0C2F0056228FE28DB27C20E11FC1025C09369641184BF8693C5BB6 10D3F09AC6EE6F80648EE5B7BEA7A68B9134B077BF5F3E3AE02075A1CB79491F 068A2B14377790FBA48D45A479F84FF3F89370958999D807FB2FFCC20C68DF3D CF39C650A0FC208D145DDB75E8C1498186A179EBBD01DF1894A0D385E30DEBE1 5A07B645CF5B62BD528480943A66EF404678D13500AFB9016A1CFF617E3BEA52 0228F1F88989DCDBF2FEBA950983427A12C4E3D4CF274333B02824F86FF4120C 321A254E1D69AFC7B85E6F47533348615DE01B19A150917E890EAD7F0B1D2A75 5B6FF0D035921E6ACE3359C63E38EC1E7DC4313CD359EF031B06397D63B8DC95 2C181A021DCD56DAFF5356DD69035A8BBDCDFF8099358F35DFC5C797DC9BDA2D 45C4273CDD402FD08DC49766D74D310FA855438C544F21DD01A7A4D00CBE4EA7 3EC643FDB0E8A71C3596B310316CC7FD91D5B57522E415254C0C32C1A55681FB 197E064813ED8350A7028FFBC05E897D3B491A519FA7D086186E1DFFF2957A84 6F5FA893F976226DB9D1FE4762A9F8F340EDD4FA1FEED9BC93B54413B06634F7 A8627A1D40C1C4571AEBDF9A96F8683C934E5A2005460DA3A401B4412F82A5F6 B3746ED9C5C370BCC1D342A34E1416A44F8D068C547F532E2B8F7650D840719E 4B5A5F03F330F80EBEECDCC447D05EB25B40AE652F9715C4278FFCE8ECACE440 3DEBD108C15E44F1307B04C07C472184EEBA16207C0A8465655BDD3C02468271 91DB13C2B94B2BE0A1269AFCCBF03BF40333C77E235523849CE2E33848E3548D A2FF8C6D22C0B9D407636E1711E4E49C134C09DA5287AC72E43AF8AAA00A73AD 09F27C34CBC49D5CA71A16473DB79E9084E90F0F1193B24FCCA320BA3F7BF4BD EB1AA8C108ABDCCD2B50519AC8BFAA56C6C76D3D684F055D3516749E038E7ED9 A95C6149B359C5F51DF38DB34FD091D838B5901221B1DC306602F36C60E64626 6D756A3E218870B5DD2E90A21FB5E0A38CE3F3BE0204B3418703B9FAD677556B 6126588ED31FDD75751D6AC94F434EB4500F2E616D56E6DC386125D243C047E6 0642712F481C64E241B4CE537B0868D956BD9023121C47526EB8914045FC1A98 7F01D49A14A9D584536F1C2230DBBEC85D0D9A04DB7D6D11396AA25AD92B2D32 860972F14526971226E47D766911F8DEDB90F301CE11B454A2AABF1105A77651 F11826254E67A830BD38FAC5D375EAFFEAC832C3CEAB91AF35C6D99F28930194 3E2D129ED11C2447BDA9AC808A6E9B6A8A11F11C873CCF6A42851189551B202E 8504A2E8F593278437BBA2FB76BE68458D0D5FE383487FB215197D3FB9164ED1 2F05F1B8C9C1D26933C0CC13BB46830AED41E6D2D71345DE8ABD4AD9580393DC FE1308329592355B7EE33B920B995EFF3377EDF5C3275F060DDF862EE8BEADE8 980D19E2CCBDE2A00D86CC9B26296657E7F0E063B53276B3AE86CB001251B16B 243D9BAEBC9A4BE6E3B25146B846A663321CE46CD920AAF006D4459B729A97B6 30B6383CE8FD64E59A0E0796666892988B01C75C384DE6C4D3E115BAD437E56B 557781739951A39F81124659A44DDC4172D677218BF1512D6CEAF66DC4435CC7 514C88A892796F642AD4E31E7711E7A2FFE948AB3B86E7AD1B0FA3F7A2FD80DA 3023867F9C3321DD337E2F32C919F17771D7ABF77FDEB29124A9E47F4F5A8AB9 E566F40DFA397FEFB07B6D7C63D3B7842112B4AA03E97B57B5336E13DCD7FA55 CCE39AE3C7CA72F8B2CB87EEEACB01066D61EB560373EFF0B575920220F5B2A2 E345CF253B4B2B713722C9A76624B28183A37C6E869CAA4D1FC3C506106DC6E8 32BE12C5564F237D73D367BEC28A891D9B070E3A7D5D90F237CFF9262A276119 2C5BCB242A5E820D1A11D1CBE9270312588A1D4B3EAB92D99FD24C11169E7D41 8BF18537AE1E8184EB954410F79100357354C11AB02341A20218AF283B7A5EFB 18E6CABBBE20360B2CBD627E90808C 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /omega put dup 70 /F put dup 102 /f put dup 108 /l put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D 2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D9111F4948A3E665E3 0DE92169B2A2137C001654C5F4FDA968F5E3AB43146106BA16C4208830672D20 AD334D8E65C2D501A78B5805F59D77EBBC4CBAADAF49AE90AE92E2A76BB60B8F 4B35FDD1FA3BAB72675AB7128D477139A0195F35012DABC476B56E857D21F53F 925034DED22AB78A4AAB159549D42B680EF6A48738ACE4D0447AC4CA3F8B6887 DC4D0DE43F265116B84937317F9901B2B20FA4BFC3023756EE1961871A2B621C E1CFCFB7668C654A0A6932CC164CCD895CED9FBF6BBCB506FFEAA8D655DDF93A 0FF9B562B41B2A56306B32B7D9AA95447E607E59D349B671CFDC9500CDEFBF66 AF3595E96134CEC60ECDF641FA6A4D68434FB79C70680BEEB9792AF21E15FFE2 6B6D7D53FA347EB08D70B4AE2276CFAA71474E508847F9904B053BA4AC83C283 A738833F9A79CEBBB958678D049C8390FC8C8A3465ADA0CB3756BD4629A50C9E 81A997A3253632EC5BE2B55922FED876393D08BC973B467BE6B0A6D5779E8430 FFB9A320EDE59B95D114409AD41745DDD834DDBDC959C464082F26A464FF6323 F420719C455BABE15C9C683EE95A926C4711B3024FC12A39A8690166823F6524 C4DD9BC083EE564386B2FA5A81C2B0ABFB5D88BA04CC4E1E87932079695ED794 96024CB1274B42540FE90F707CD16225F27EC857D9C485C72DB01641AEAD605F 5BFC396177ED73248E7B9D961C77B0049ABFC8766B1DDE8240E4E9A2AAD07983 2B3B514792F8AE50D8BA9E34651BB464BAD32541C980265570A421D8CA9F4E58 7EBF862E73C3A77D4B60DDCB039081A9E48D3EEB88D153CF187F8082D41EB157 E62013F01392B06879248307E4A93D15ACC40B1E1B99DE64E78E79AB5E7580C0 11A246C9D90C71BC49E28B4269922BF5C4F6C1562DD7C0EE34E513B8268FFA58 6DCD942A09F9C6F75E28072D5D8D8B2A7AC702AAD787FBC79CA0F1CF184090B3 CC4BE026C0075D75D2D7B7180F08B4FC77C75719FB714D363E0C642E87C4432E E28CAAB8E01C0BBB917D33EB901A9A1E52A5CF9568B9F4664BD84D1CB0A1304B A80F27B3466BC9A6C9214EF14CDDF63E4D96BF6D89A5E30DCD1030A616893230 0590472530DE2073DD78DCEA7B1A177E69652C32AD6A69220B9C9919D5E3BE4E 66A498AF14EE5FF9C5BBD7294718342AFBA23CEA76368DD5CEBA21092073876B E26BF2E1001013DF512B8E9A7D92EBF9AC84CBEE9384008AD5CF5A836A83191B 582251063B9F648BA908B99B90919CF355DA3383CCC1B4D360E47C63AFC22700 E0B8B0583D05EF57FF992172DDB5560DAFC30E2F314FE720297D1A6F11CB27C5 DB0F62B7CC50F946F07A9D0A6A289D2F39B36471 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if TeXDict begin 31765089 8046549 1000 600 600 (./tikz/all-figure1.dvi) @start /Fa 255[52{}1 58.1154 /CMSY7 rf /Fb 203[33 1[33 50[{}2 58.1154 /CMR7 rf /Fc 140[31 34[42 18[34 35[39 25[{}4 58.1154 /CMMI7 rf /Fd 146[54 109[{}1 49.8132 /CMMI6 rf /Fe 255[55{}1 66.4176 /CMSY8 rf /Ff 222[44 33[{}1 66.4176 /CMMI8 rf /Fg 134[37 3[39 2[28 37 2[39 8[31 1[31 28[46 21[35 4[55 1[27 27 40[{}12 66.4176 /CMR8 rf /Fh 138[53 1[38 2[53 1[53 80 27 6[44 53 2[46 97[{}9 83.022 /CMBX10 rf /Fi 144[42 8[25 17[60 10[30 2[54 8[65 2[23 16[32 32 40[{}9 83.022 /CMR10 rf /Fj 147[25 5[41 31[53 36[52 33[{}4 83.022 /CMMI10 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin % dvips-unknown statusdict /setpageparams known { hsize vsize 0 1 statusdict begin { setpageparams } stopped end } { true } ifelse { statusdict /setpage known { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title (Plots for GNU Astronomy Utilities manual.)/Subject (Used to make the plots for the manual)/Creator (LaTeX with hyperref package)/Author (Mohammad Akhlaghi)/Keywords (GNU Astronomy Utilities, Gnuastro, manual, plots) /DOCINFO pdfmark end 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 0 TeXcolorgray -183 -377 a SDict begin H.S end -183 -377 a -183 -377 a SDict begin H.R end -183 -377 a -183 -377 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end -183 -377 a Black 0 TeXcolorgray -600 419 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end -600 419 a -600 419 a SDict begin [ {Catalog}<<>> /PUT pdfmark end -600 419 a -600 419 a SDict begin H.S end -600 419 a -600 419 a SDict begin 12 H.A end -600 419 a -600 419 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end -600 419 a -596 414 a -596 414 a -596 414 a pgfo save 0 setgray 0.3985 pgfw save restore save save 0.99628 pgfw 0.0 0.0 moveto 0.0 0.0 moveto 0.0 120.47398 lineto 238.11313 120.47398 lineto 238.11313 0.0 lineto closepath 238.11313 120.47398 moveto pgfstr restore 2.83484 104.88313 moveto pgfstr save save [1.0 0.0 0.0 1.0 6.35466 110.89365 ] concat pgfs 0 setgray -596 414 a Fj(F)12 b Fi(\()p Fj(!)s Fi(\):)37 b(FT)28 b(of)34 b Fh(unsampled)27 b Fj(f)9 b Fi(\()p Fj(l)r Fi(\))-596 414 y pgfr restore restore 3.29312 14.17339 moveto 234.82042 14.17339 lineto pgfstr save [-1.0 0.0 0.0 -1.0 3.29312 14.17339 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore save [1.0 0.0 0.0 1.0 234.82042 14.17339 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 235.2787 14.17339 moveto pgfstr save save [1.0 0.0 0.0 1.0 179.03989 4.6759 ] concat pgfs 0 setgray -596 414 a Fg(F)-6 b(requency)25 b(\()p Ff(!)r Fg(\))-596 414 y pgfr restore restore 116.22212 14.17339 moveto 116.22212 88.83403 lineto pgfstr save [0.0 1.0 -1.0 0.0 116.22212 88.83403 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore save 1.49442 pgfw 96.37897 14.17339 moveto 96.37897 14.22443 lineto 97.18867 14.26335 lineto 97.9984 14.32738 lineto 98.80809 14.43118 lineto 99.61781 14.59468 lineto 100.42752 14.84209 lineto 101.23723 15.21667 lineto 102.04694 15.7608 lineto 102.85666 16.53764 lineto 103.66637 17.60948 lineto 104.47607 19.04982 lineto 105.2858 20.93224 lineto 106.09549 23.33107 lineto 106.90521 26.29137 lineto 107.71492 29.83559 lineto 108.52464 33.95248 lineto 109.33434 38.56854 lineto 110.14406 43.58165 lineto 110.95377 48.79892 lineto 111.76347 53.9989 lineto 112.57318 58.9376 lineto 113.3829 63.31577 lineto 114.19261 66.88853 lineto 115.00232 69.39984 lineto 115.81204 70.71562 lineto 116.62173 70.71562 lineto 117.43146 69.4232 lineto 118.24117 66.92226 lineto 119.05089 63.36679 lineto 119.86058 58.9947 lineto 120.6703 54.06638 lineto 121.48001 48.86641 lineto 122.28972 43.64394 lineto 123.09943 38.63687 lineto 123.90915 34.00352 lineto 124.71884 29.88057 lineto 125.52856 26.33118 lineto 126.33829 23.36482 lineto 127.14798 20.96077 lineto 127.9577 19.07231 lineto 128.76741 17.62677 lineto 129.57713 16.54887 lineto 130.38683 15.77205 lineto 131.19655 15.22185 lineto 132.00626 14.84814 lineto 132.81596 14.59727 lineto 133.62567 14.43292 lineto 134.4354 14.32823 lineto 135.24509 14.26422 lineto 136.05481 14.2253 lineto pgfstr restore save 0.19925 pgfw 96.37897 17.00824 moveto 96.37897 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 86.9348 5.93782 ] concat pgfs 0 setgray -596 414 a Fe(\000)p Ff(!)-497 422 y Fd(m)-596 414 y pgfr restore restore restore save 0.19925 pgfw 136.06476 17.00824 moveto 136.06476 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 126.62059 5.93782 ] concat pgfs 0 setgray -596 414 a Fg(+)p Ff(!)-497 422 y Fd(m)-596 414 y pgfr restore restore restore 116.22208 14.17339 moveto pgfstr save save [1.0 0.0 0.0 1.0 114.10497 5.51721 ] concat pgfs 0 setgray -596 414 a Fg(0)-596 414 y pgfr restore restore save 0.99628 pgfw 240.94797 0.0 moveto 240.94797 0.0 moveto 240.94797 120.47398 lineto 481.89595 120.47398 lineto 481.89595 0.0 lineto closepath 481.89595 120.47398 moveto pgfstr restore 243.78282 104.88313 moveto pgfstr save save [1.0 0.0 0.0 1.0 247.30264 110.89365 ] concat pgfs 0 setgray -596 414 a Fj(F)-543 426 y Fc(s)-507 414 y Fi(\()p Fj(!)s Fi(\):)37 b(FT)28 b(of)34 b Fh(sampled)27 b Fj(f)324 426 y Fc(s)359 414 y Fi(\()p Fj(l)r Fi(\))c(=)g Fj(f)9 b Fi(\()p Fj(l)r Fi(\)I)r(I)r(I)796 426 y Fc(P)-596 414 y pgfr restore restore 244.2411 14.17339 moveto 475.7684 14.17339 lineto pgfstr save [-1.0 0.0 0.0 -1.0 244.2411 14.17339 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore save [1.0 0.0 0.0 1.0 475.7684 14.17339 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 357.17012 14.17339 moveto 357.17012 88.83403 lineto pgfstr save [0.0 1.0 -1.0 0.0 357.17012 88.83403 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore save 1.49442 pgfw 337.32684 14.17339 moveto 337.32684 14.22443 lineto 338.13657 14.26335 lineto 338.94627 14.32738 lineto 339.75598 14.43118 lineto 340.56569 14.59468 lineto 341.37541 14.84209 lineto 342.1851 15.21667 lineto 342.99483 15.7608 lineto 343.80455 16.53764 lineto 344.61424 17.60948 lineto 345.42397 19.04982 lineto 346.23367 20.93224 lineto 347.04338 23.33107 lineto 347.85309 26.29137 lineto 348.66281 29.83559 lineto 349.47252 33.95248 lineto 350.28223 38.56854 lineto 351.09193 43.58165 lineto 351.90166 48.79892 lineto 352.71135 53.9989 lineto 353.52107 58.9376 lineto 354.33078 63.31577 lineto 355.14049 66.88853 lineto 355.95021 69.39984 lineto 356.75992 70.71562 lineto 357.56963 70.71562 lineto 358.37933 69.4232 lineto 359.18906 66.92226 lineto 359.99876 63.36679 lineto 360.80847 58.9947 lineto 361.61818 54.06638 lineto 362.4279 48.86641 lineto 363.2376 43.64394 lineto 364.04732 38.63687 lineto 364.85703 34.00352 lineto 365.66673 29.88057 lineto 366.47646 26.33118 lineto 367.28616 23.36482 lineto 368.09587 20.96077 lineto 368.90558 19.07231 lineto 369.7153 17.62677 lineto 370.52501 16.54887 lineto 371.33472 15.77205 lineto 372.14442 15.22185 lineto 372.95415 14.84814 lineto 373.76384 14.59727 lineto 374.57356 14.43292 lineto 375.38327 14.32823 lineto 376.19298 14.26422 lineto 377.00269 14.2253 lineto pgfstr restore save 0.19925 pgfw 337.32684 17.00824 moveto 337.32684 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 327.88268 5.93782 ] concat pgfs 0 setgray -596 414 a Fe(\000)p Ff(!)-497 422 y Fd(m)-596 414 y pgfr restore restore restore save 0.19925 pgfw 377.01265 17.00824 moveto 377.01265 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 367.56848 5.93782 ] concat pgfs 0 setgray -596 414 a Fg(+)p Ff(!)-497 422 y Fd(m)-596 414 y pgfr restore restore restore 357.16995 14.17339 moveto pgfstr save save [1.0 0.0 0.0 1.0 355.05284 5.51721 ] concat pgfs 0 setgray -596 414 a Fg(0)-596 414 y pgfr restore restore save [ 0.3985 1.99255 ] 0.0 setdash 331.65758 14.17339 moveto 331.65758 99.21382 lineto pgfstr restore save [ 0.3985 1.99255 ] 0.0 setdash 382.68192 14.17339 moveto 382.68192 99.21382 lineto pgfstr restore save 0.5 setgray 0.3985 pgfw 332.11584 90.7097 moveto 382.22363 90.7097 lineto pgfstr save [-1.0 0.0 0.0 -1.0 332.11584 90.7097 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore save [1.0 0.0 0.0 1.0 382.22363 90.7097 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore restore 357.16995 90.7097 moveto pgfstr save save [1.0 0.0 0.0 1.0 351.53423 97.66507 ] concat pgfs 0 setgray -586 381 a Fb(2)p Fc(\031)p -586 395 75 4 v -574 443 a(P)-596 414 y pgfr restore restore save 1.49442 pgfw 388.3512 14.17339 moveto 388.3512 14.22443 lineto 389.1609 14.26335 lineto 389.97061 14.32738 lineto 390.78033 14.43118 lineto 391.59003 14.59468 lineto 392.39975 14.84209 lineto 393.20946 15.21667 lineto 394.01918 15.7608 lineto 394.82887 16.53764 lineto 395.6386 17.60948 lineto 396.4483 19.04982 lineto 397.25801 20.93828 lineto 398.06773 23.33107 lineto 398.87744 26.29137 lineto 399.68715 29.83559 lineto 400.49686 33.95248 lineto 401.30658 38.57458 lineto 402.11627 43.58165 lineto 402.926 48.79892 lineto 403.7357 53.9989 lineto 404.54543 58.9376 lineto 405.35512 63.31577 lineto 406.16484 66.88853 lineto 406.97455 69.39984 lineto 407.78426 70.71562 lineto 408.59398 70.71562 lineto 409.40369 69.4232 lineto 410.2134 66.92226 lineto 411.0231 63.36679 lineto 411.83282 58.9947 lineto 412.64252 54.06117 lineto 413.45224 48.85515 lineto 414.26195 43.63788 lineto 415.07167 38.63081 lineto 415.88136 34.00352 lineto 416.69109 29.88057 lineto 417.5008 26.33118 lineto 418.3105 23.36482 lineto 419.12021 20.96077 lineto 419.92993 19.07231 lineto 420.73964 17.62677 lineto 421.54935 16.54887 lineto 422.35907 15.77205 lineto 423.16876 15.22185 lineto 423.97849 14.84814 lineto 424.7882 14.59727 lineto 425.59792 14.43292 lineto 426.40761 14.32823 lineto 427.21733 14.26422 lineto 428.02704 14.2253 lineto pgfstr restore save 0.19925 pgfw 408.19388 17.00824 moveto 408.19388 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 398.64032 5.52275 ] concat pgfs 0 setgray -596 414 a Fb(2)p Fc(\031)r(=P)-596 414 y pgfr restore restore restore save 1.49442 pgfw 439.37553 14.17339 moveto 439.37553 14.22443 lineto 440.0118 14.25298 lineto 440.64807 14.29623 lineto 441.28433 14.35939 lineto 441.9206 14.45021 lineto 442.55685 14.58083 lineto 443.19312 14.76251 lineto 443.82938 15.01251 lineto 444.46565 15.35248 lineto 445.10191 15.81184 lineto 445.73817 16.41307 lineto 446.37444 17.1899 lineto 447.0107 18.1761 lineto 447.64696 19.41835 lineto 448.28323 20.93828 lineto 448.9195 22.7757 lineto 449.55576 24.9583 lineto 450.19202 27.49384 lineto 450.82828 30.39703 lineto 451.46454 33.64626 lineto 452.10081 37.21297 lineto 452.73708 41.04611 lineto 453.37334 45.06699 lineto 454.0096 49.18388 lineto 454.64586 53.27829 lineto 455.28214 57.23082 lineto 455.9184 60.8996 lineto 456.55466 64.16612 lineto 457.19092 66.88853 lineto 457.82718 68.96902 lineto 458.46344 70.31335 lineto 459.09972 70.86354 lineto 459.73598 70.6196 lineto 460.37224 69.55902 lineto 461.0085 67.74408 lineto 461.64476 65.244 lineto 462.281 62.1704 lineto 462.91728 58.64262 lineto 463.55354 54.78091 lineto 464.1898 50.72112 lineto 464.82607 46.59816 lineto 465.46233 42.53232 lineto 466.09859 38.61957 lineto 466.73486 34.93953 lineto 467.37112 31.56488 lineto 468.00739 28.53105 lineto 468.64365 25.86057 lineto 469.2799 23.5465 lineto 469.91617 21.58449 lineto 470.55244 19.95123 lineto pgfstr restore save 0.19925 pgfw 459.21823 17.00824 moveto 459.21823 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 449.66466 5.52275 ] concat pgfs 0 setgray -596 414 a Fb(4)p Fc(\031)r(=P)-596 414 y pgfr restore restore restore save 1.49442 pgfw 286.30295 14.17339 moveto 286.30295 14.22443 lineto 287.11264 14.26335 lineto 287.92236 14.32738 lineto 288.73207 14.43118 lineto 289.54178 14.59468 lineto 290.35149 14.84209 lineto 291.16121 15.21667 lineto 291.97092 15.7608 lineto 292.78062 16.53764 lineto 293.59035 17.60948 lineto 294.40004 19.04982 lineto 295.20976 20.93828 lineto 296.01947 23.33107 lineto 296.8292 26.29137 lineto 297.63889 29.83559 lineto 298.44861 33.95248 lineto 299.25832 38.57458 lineto 300.06802 43.58165 lineto 300.87773 48.79892 lineto 301.68745 53.9989 lineto 302.49715 58.9376 lineto 303.30687 63.31577 lineto 304.1166 66.88853 lineto 304.92628 69.39984 lineto 305.73601 70.71562 lineto 306.54572 70.71562 lineto 307.35544 69.4232 lineto 308.16513 66.92226 lineto 308.97485 63.36679 lineto 309.78456 58.9947 lineto 310.59427 54.06117 lineto 311.40398 48.85515 lineto 312.2137 43.63788 lineto 313.02339 38.63081 lineto 313.83311 34.00352 lineto 314.64284 29.88057 lineto 315.45253 26.33118 lineto 316.26225 23.36482 lineto 317.07196 20.96077 lineto 317.88168 19.07231 lineto 318.69138 17.62677 lineto 319.5011 16.54887 lineto 320.3108 15.77205 lineto 321.12051 15.22185 lineto 321.93022 14.84814 lineto 322.73994 14.59727 lineto 323.54964 14.43292 lineto 324.35936 14.32823 lineto 325.16908 14.26422 lineto 325.97878 14.2253 lineto pgfstr restore save 0.19925 pgfw 306.14561 17.00824 moveto 306.14561 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 293.47867 5.52275 ] concat pgfs 0 setgray -596 414 a Fa(\000)p Fb(2)p Fc(\031)r(=P)-596 414 y pgfr restore restore restore save 1.49442 pgfw 246.61714 29.84685 moveto 247.19543 32.7336 lineto 247.77376 35.88594 lineto 248.35205 39.2831 lineto 248.93036 42.8671 lineto 249.50867 46.56442 lineto 250.08696 50.30675 lineto 250.66527 54.01534 lineto 251.24358 57.58203 lineto 251.82187 60.91086 lineto 252.40018 63.89363 lineto 252.97849 66.44041 lineto 253.55678 68.47075 lineto 254.13509 69.91109 lineto 254.7134 70.71562 lineto 255.2917 70.85231 lineto 255.87 70.3246 lineto 256.4483 69.13945 lineto 257.02661 67.33577 lineto 257.6049 64.98882 lineto 258.1832 62.18164 lineto 258.76152 58.98346 lineto 259.33981 55.50154 lineto 259.9181 51.84398 lineto 260.49643 48.1008 lineto 261.07472 44.37492 lineto 261.65303 40.73468 lineto 262.23134 37.25275 lineto 262.80963 33.99747 lineto 263.38794 30.99826 lineto 263.96625 28.28711 lineto 264.54454 25.86577 lineto 265.12285 23.75066 lineto 265.70116 21.92447 lineto 266.27946 20.37079 lineto 266.85776 19.06712 lineto 267.43607 17.99529 lineto 268.01437 17.12157 lineto 268.59267 16.42432 lineto 269.17097 15.86807 lineto 269.74928 15.43207 lineto 270.32758 15.09729 lineto 270.90587 14.84814 lineto 271.48419 14.65869 lineto 272.06248 14.51768 lineto 272.6408 14.41475 lineto 273.2191 14.34035 lineto 273.7974 14.28758 lineto 274.3757 14.25038 lineto 274.95401 14.2253 lineto pgfstr restore save 0.19925 pgfw 255.12128 17.00824 moveto 255.12128 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 242.45435 5.52275 ] concat pgfs 0 setgray -596 414 a Fa(\000)p Fb(4)p Fc(\031)r(=P)-596 414 y pgfr restore restore restore restore newpath restore pgfc eop end %%Trailer userdict /end-hook known{end-hook}if %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%EOF gnuastro-0.5/doc/gnuastro-figures/iandtime.txt0000644000175000017500000000004213217200075016536 00000000000000../gnuastro-figures//iandtime.eps gnuastro-0.5/doc/gnuastro-figures/iandtime.png0000644000175000017500000003346213217200075016517 00000000000000‰PNG  IHDRñ× L%bKGDÿ‡Ì¿ pHYs––qFþðtIMEá 5cQH‹ xzTXtRaw profile type iccX…—m’d© Eÿ³ /O -Šðþ7àCVwO·Ý3c;+ˆÌz„®îéŸîé|êPIù}VÉ?>õë·¹ÚµŽÚµ×šÇ6VÍöIR¤iÓÜËÈ#wÿÓ™ñ v}ýpç´zþCþÇùKº mÒ¾ùòíꉃe­Ú?ÿ_/êT%BùûóõÍNéReÿñ|÷ïÏáü„ñëŸ?èÏÏÿaèçç‘6ÔÉÌ—«5í0³cè÷Ïÿd~úõÌß?µöò,&ÂûIú›„ÇUጚµ}‡F·ÞRoL"JoË\Æï£üw¦ÓÚþoMÿúùÛôë;úü–%>?Èš±‘‰ oØþyô×qhµåVý]‰DÌå»G¥ˆûßÕÒ÷ÏïæI¬ú9Z›ñ‡f¿ŸXÍÞ÷Öù™WæYÿ>ïc¨öoÈù‰Å?È’übñG¤ò3øÅ#Ã0T.¦Ú+ EKÒ2u“ÛþZÙYôvê,<x7Xó°'ó)yGS}E< Úă‰wÀaÀ0°0°x¸0°ë;$ƒ5Îgo =æ8,:`^¾ü¾ûã5LÃØäåý)ãšÆ0FäRƒ÷ J›ŒËQy±²^p¿`£‹…wÊ;¼.#x\Œ9x[ Ö‚§e m~àbq¾߇ïË÷å;X‹âl ‡†;ãP/ÂB;ÉTap4ª™ÁKv¯ÊCe!Ù«óæjL$Çuad³˜ «or2r}9"è´—þ–7à’Uò£ÚÆ.Ô#rƒwšðNñI/€ããŒ7ß6ÿ»æv†°Ü®çF¶…Âi™úa kçÞ'@HwÇãŽÁ>ú^ ‚wxÚ½§ÜˆÉƒI ÔNÅó £- ÜÇ̃£ 2€ÈÀ«±éqÆ lñƒ4þ8¢TÍÈO„쉬,ºÁžg±“eE8,Yn£Ðàœ¬)+˜Pv×vàŒÈT>íYÙY©1%кy~ .6Õ˜Pë¿‘'U0»ä9VÌ7O8dâî\ `ó?‹æÕ<£^xÆ1Lz6µl“ß Þ¸y¤lìb,X¥äűž- ±8Ò¢lXdh‹…š¬xyæBÝÐņ“¶P´›ºÛLÞû•ß~“A/@°®ì@Á‡gݶ|iöWf×1zÞ_E²O¥¶ò!.‡‰ÈgÂá7ñ¸ÀႾKö.ǺùÚ¦%_Bpï¥,ñ(8ó€T±ŠÝPãÈq_y¥J:Œ+œ_qÙ6nóüè[X(äÄà»|{J™^Ê"Zn¥ÜÉá´PW¥öQªôB锺Z©Î¸ù#ôÊ@× â0˜ö JSJ§ðz7Dz•>wéë@—=!‡RËhtBC ²YìTÆ>…S½j+tEX,âEfÙGy«(Ô ½•A¯aE×-`«hh™Cz™¼œs•¹bç7 ?”ÑLv1NjèžCcÒ˪«,B³T¡£[€F*‹€âxÙm—Í177žì³Êc P|ð­»8ñq÷âø@Z‡*>ú(ÌK+c·H¹xw‰Éµ^.€º×Jh·„ð›ç±£Ä]õC¥ÄžÂ«À<:H²#UàäÐl¿ˆ¦ßʪZ«Ö:F­“Ÿ+j=ÍYÞªpUmÖkóšj‹Ç–Q{?tŽÆíÚÏzÕU“‡0úáŒ@ÉëSsÆÔ×¼U¹“üâ‘v«ªTô8êvêlAólŽœ^í‰-F <¢{*lBñà mÌb£Eú¡ã€DjÝM e«›‰ ¢>jófÕåVÇ …3½ârTêaãsÁ% ¹ÝSÅ38\+5S9 \¾jX©ÁQ"`®6`/ŠoQ½gS@¹“>BT6ßQ¾¥V¥µjÞï™­AÎM£µ=[#e_é‘Z·Ûú™t2­ øyLú3¯mÄ¡845Q‚¿n“kˆEoúDüéÑ6Ko4 mNoÓçkV>I26²ÍÁºÃÌÒžGEY¢qâ¶X®ÕödTm_sŽä·µSk£Z8m0L»(ÒeÓ‹"Á$‰ü”L Yjq+ÊØ¨Ùþ(ò‘¡…BE/¥P*\¯{P%줇®‰êÈa§ísu*ü‘RFC )séÒk=¡¬Ý%6¢¤º‡`M$»SÈ}BFå˜ÓeN†¼h_z:Žô ü7ñÞÞxMýu’Ú}¯¤:³R?F2Ž÷Kpåv ð¥•´ÊIJÇyBa+±ý¨ª@ ¡ƒAa@0*—P§Zäa]ƒ€Þ±JcÙÏ¦ÊæÊAjWi•eƒ.yŒ¡T*žÆ‚SϘ¾‡Á2&á!yYÇbÙZŒcµmŒ‹ÍÆ€ÄüÈ8x{t¦qÜÔ4®ø¸û (/ Õ .¬Î8üË›âX%¢Õ¸ä à³tIC[úKºué×@[E~U„ß” P催‹f…-¨³Ìëò.5b¶Äâ!erô GPÙì¼ßø©â‹k+â~è1Î6¡VåÊ–ë ˆG“€ÓiÇzú–Kn|±¡ô$˜j^8BÙˆõBû×ÝÒÉdCç®Ä&½s©Àì\?i‚t7¡àº>™lu©MÚ† kq±$±49]áwÝÔ¼ª>1äOU¸ßPCúú× ^&Àt0]ãÒeu.»k¾–b¢Q³øD2LG‡4Mªý<¬Ï~)vµéŽ^t+á–õÎd1±8§dp§AÚføwR–i._©ŸÄpîðécðì@]‡5'bÞOrl}3½íÝÒBóYÖL†|@ÚËÐòW,—@9ôT“¢£NÆnŸ2$½FeÓˆƒÍî67ŽÕžð.›…‚iëj¸~¯0dМ9j„¡B†îÙ]´º-‚OhoÏLtŠ´ ôÎ0Y4…Ï@);UE™S€sÅ^´*`Pv^­‰LÚãÁ2Åhf|-DEY›2Û×t_N'x:½Z~ÑŽ‹ì?üâÑ~w;J’®k¥M²ËA°:Šï0}#öërBêÔ¨äÒö˜‹þ ¿Õ6ÄèæÆJ›ò>Üfà£m,†¥÷ÚK—ge»í×ðìCkË  q8-P~”4‚¦’V2_: Q‡–`™@õˆ¤.´ýЭ¾9hè\ýG øhÇçvG?ØËhP¦‹ä°…on±Xrâ(–Ãg‡ø}·Û¦€ÛÌÉ›¶­9‡¡ mq¸-Øþ 7‰8~@DýžqˆÖG,Ž=âp¦ ‹l 1y']gÅ&ö4¿ÜB|.Ú¯œ3p?´<'hbq³A.óæqçºãô7;'Û…».2r{8UÍçsÅ$]øâ$‘6`;=Ø?$R]Ò„\6ñ†Z/}ï=æt ó’×(_8}ô˜‰î{D¡_(ô2„¤X@IÑt¶†{Ï ‘ò’F£9™3­% ³¤X´ò[5È'…2‰ Å¡FnßqÑ”mDúí‘ÈK­Šµ+|IDATxÚíÝm¨;}~×ñ÷·{UWikçÚ kQv™³k©Hé2G¼°ŠuNX´µ:‡¢½ÙRÍ¡¢PI -na®]EV“ºmQŠ5Q¶´2à®}Ð3[[‘bË[(R{ó¡R«kùú É9É9É9¹™L>¯pq“ÿ™Éä—Ì÷;¿ßün GD.Gæ7Ë¿ZJ·îC‘Óøœº@DDDNá-zäuˆˆœÜ·óÅüêÚ¹ÙqO"Òl_Â7.R|îYÝG#"§f]Þá­ûE‘v1xG õ"""-¥/""ÒJJñ"""­¤/""ÒJJñ"""­¤/""ÒJJñ"""­ôÖKÿho`>)NHHA@<›Ó"RÆ><íZ@×{u“Èeª7X@—€œ¡u—…Èùyë•¿òæóXg©Ö"&ÄÄ”œîôé¡/R—Úb€ èya)S»qÍÁ)²£—ꇳ“{•çŒ¼Ï w'<¶’ÌïЬ["õ©3¤Üy^ÒFu…Èùy!Å[Ħ¦±ùIïÙºÓÿX¼Ô¤š"uª9$Ü[à%¡Åu—‡È¹y¹¿©a,³höƒOÎ~^üËÓŸgañ¡§éb³Só^-²xùèDduÆ€býÏÛÅE‘S¼ç›î}yæ¹E61Ÿ5žÍîZb),ëZ—Ð&ÖYle]@`£Çà`Sìr¸Ö¥C –2Ý´W°Ä¦D@ÇÒº Xä|:¼üÚß~èd3OóÛÄE‘lj—¤8é³g'L–~Ðqœ‘ãàŽC—ûù_Ƽ™?â‹g_z凟£¥×›nÜkŒ/½ú«ïM=.åÁ<‡æÏ¥øã9ö¶'ˆÛDgþw©³] PÐCùyàÇÏÏÌîÍͯþK š~ϯ)2 à×;­S>4Î7í•ㇺG‰†ÚˆTeǰuχÎnDæ^4·‹åSéiœ˜€òánYÁüÙŽÃ`rJî-#'óþú½ZDøpÊ?‰HvŽÛDK .^Š"ªšÝnµÓMo¿‘´^rCŸ€.lØ«:؈4Ñž1À:~½è·¿E PypÌZüK2º‡‚³æSotI-[»×㑽í,!ò;˜ŸýÅë1@½èEUT‹÷ŒrùzÛ’ùÿÃNÈùvÞ§O´n¯žS®>'"u[^Ž-<ÌÏýWc€"€È£ê–¡éÑYt“±î|øKÈýbàËK–‚ÀÃðÆë÷ÊÉÃà™®jõ" ñìl}9XÄ,µÔRЙ {=(ˆÌ½ÚPo˜1`±è„E¤D`¿yü™ Xä7–©eÞó¡•ŒlLNLñÐ×¶à…î66™¿òÄÊyÚÌRrJbJÏaÝ^=³[–‘~s@äÒ0¼F„t~[œÉ¯ÆE‘ÛªN‹ö- ¼œíƒ|yÚÌu{=ì•DÚÈ&‹5â–žKé‚[eÇPQ PËf1“êºÛͶVÔÊhÛWöªU©Dš¨ª  Rå½x©R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)ÅïÄ•ß:–œfÿÖµ î÷zZË%yür\ì¿ýå(US 8îûœÿ¦p"˜â-´ÔÞØ½¥–ÚÀÛ~µ,´÷K¿wÀÇÏþ*±ÑÞÇõ¸ÿ!ió¿˜Ç)Éc—ãÊþÏ¢¥jŠDz_Ižº–9Nì\Öƒ “ùO÷¤[oç?…ŒÖþE²þù÷oTç\’§)Ç¥ýŸI9Vöiùâózx.Å¿w—óP ¨·$O]ŽŠÄ8~µø'W8%cº{lØa¼îiûíQŽ+#^mÊjº=KRå(5S 8Å€æy«îh€ˆlñ£E$ÀЋùï`¼ø}IÇßžÿMHB”žY@Dì½¥½ŒIyÏ"Æž¿ºÈHè×]8Ç)ÉmÊq¹$É/º¥j'ŠËß\ï[pß]Å€Æq.³¡~JLLÌ€”`þl‡ã0"qR!÷DOš~‡¦©p¾MLê<üM‡‘C攀N—ÐaúÚþç{<¨™ª9%ùü}.Þéc9®–ä¡åø¤¹ó ʱ²OK õeqâ°úÍu^.GÅ€#.j¨" /,dÀìšqH€œ ¼ ãi'’pé§È"ðŒ ¼\ê4ÒežSXì=/}Èâ3#zeÿ‹£;/•ä6å¸R’\ŽRµÓÅ€•o.´þ»«Ð@ÐPo1¡Ÿ=]z`0²Ì º6û×ÀÇÖ±”œ|ÓÞ=³Œ©ÁøYCPFñÐt´Úˆ´Íþ›ÃR¿[ó¯–ävïscI¶¬¥zÖ%óçßSÇ€5ßÜóþîZHâ뼫õ)ÞB~,÷M| „@‹;?óm§dÞ‹Àµ÷x°¾÷,&fÄÕÊ?å„Ö!äfý–Ûí¿AR:V®–Ðv%¹ÝûÜX’m+G©˜Å¤ü¼}Ŭ~¹Æ©bÀ«ßÜóúîZÀ¿åK­ðñÆ?Q hœ–7Ô[ȈÿÈ3²hß”@ “QX<ß® Í¿¤Ì›íò‡æ¥<óOHÈØ‡Þólý ¿¸€ I×£6 ëlü“ %¹e9n.ÉV•£TÍ"F|†‚ÉÆÑѧН|sÏë»k ~ŠtQBÛ—¤b@}Zâ­Ã”!?ÅÏÒgbóÁZJDd©…à9C"‹H¼ä†Ž¥–XJž1´‘ÅÖ!#žo‡¥^R>ŒØº[—áêß3577·‘Ú,µÐ:$ÄÖyiÿDMùZZh"n€:6Z¼óíJòéû\~§+å¸T’‡”ã³’lL9Jõ,eÂ-oø9Ó‡¤SM XùæÎ§c9×3¥äcü·Œlððü^1`c9*œ€ÓÚõ$„)©C8ëy¹öï¢Ç \ý· ÛtèÎþ~ý_3zè[šÎú‰®íÿ2­»ü–ÊdÖkuÑO8ؽ$_+ÇM%Ù¦r¬ÿqy=êgßV&ÄÑ ß’£Ç€m¿¹çñÝ•1“ÙÈ€×þr]I*Tü™Å8Þê{ñË÷Œ¼`ãý™åûô^®6mº‡ïCYàåìþÞš¿ ááÞ_ÎÆ¦­Mû·NsÆqz¹<5Åš®‹kßÍjI¾VŽ‹Òzöw-*G©Þò·Õ_êèuü°å7÷<¾»OÊG1àl´:ÅŸXŸ.;ŸùЖÜz[íñE„¾ã6gKå(çê…ïîaßÜ ûî*œŒRüÞ<7,Ú\3x©¶ûªèr¾”*G9W/wúæ^ÔwW1àt”âà'ëÂq`p83*G9WúîéݪO¤Õ=êEDD.—R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)Å‹ˆˆ´’R¼ˆˆH+)Å‹ˆˆ´’f·YË"b f›×}i*¥x‘‘ð˜Ö ÉÈÈN7٪ȱ)Å‹ˆ<°˜!9·«õv‹ˆ‰H­¤ï¼<©œ¥x, K—>}/Ÿÿ«çäÖ!µ˜;/ê>^‘ר»ˆ`1Sb®½·.Á?ò!W”L­[÷‹¼F)^DK™0öëmî´{é·Üѵ‰…u·ÈK”âEäÂYdS®½·ý6>ž×å;u½ÈfJñ"réälU_æ¥ßÒc`Q݇/²‰ºÛ‰ÈE³”€Wî¿oâC p]÷{YOµx¹`Óåv¿@ŸÀҺ߅ÈzJñ"r±,`@ÿÉl¼äŽ®륙”âEäru)wéd·ŽgôÔýFDÖiõ½x‹xßâ'Í1-rI,`V»~›@¹Z_·˜îQî£÷I,=ôRAäøZ•â-dñˆ€ øðE@d³gJŠÙC³S‰´‹…„DÌR{ ”äÀûø¾ˆmöL1ßwX#ý‚—vÇĆŠ(Ò4­Hñ“99å¢În),®¯-žŸü !¡Á˜Œñ]mD¤,$!&rJrr2z‹ômú³x`Áü áO𸳀ŒìÐà™eÄ ë.‘UgžâNìœl›q­ž㇭#b: ,gÌXWà"çÇ"b"2²×ç÷’‡`:ôˆI mLFvP È•â¥yζ»E–Ú”{b2®üÚ{»7¸yî}¿æŠ1÷vo©úÅŠœ K,µ{¦„ yÛo¼¿cŠŽÈ<óž_qMN‡{›Zwï)i3âºKDä©3¬Å[LLBȘá1Ù½ ?oì˜XIÆXóDšË7æÆô|¼÷nng?xNNßB"R+³ó}uÏ ‹´–¼4Ë™Õâ-´zn~ëÃãÝE÷Ò‡~çoÓ&Z^B¤™,¶ Jnüm¿Û?Á[D°z)ï…÷ý–·épo vÜeFRw鈬:£o ¸®9±_ãc¿ãŠ‚{(Í‹4‰…6aBÎÕ>7枈YÛV7»Øç†{KwJó9ºÑ' s&)ÞK¹'äÆ_íPs8/üŽ+B¦;žâ"r"Ú€{ ®^[Ï}K/žÙžù ·ÄÜ[gë Fziœ³HñÖáž„[¿©î¹~Ã-÷ÛÎ?m‰ý†¹ý¬êþÏÙ‡í7ÌíSº`’}X`)SB®ª¸Ä_ð̯éÑåW´`ìáì{í›Û?©û8.MãS¼%vO—ž_UßÎ3¿¡Gb÷¯ŸâðÏyðe|²–‚j0 ù§¼øJþYÝÇ"çǺÜqë7Õlõ!wü~R›˜úËÀbþïþš}GÝÇrYâ-´ Æ~å‡7íš?<–êä6Yz~²ô|üø<îè“ÚÔ¢M[Xlÿ’7¼{þë—Ù§‡Þlóæ+ïÚ7mz¢-–B×ËGû°ÝÖ[Ì_ùžß;úëú‘Ö³ÈîéЫ²œ+r&6y¥Jíw›ý•ùè­wñMuÊeið 9‹˜0>h™Ç…æ?/×zK÷ã–_%çfù7ÏlÌwó÷íã«[X@‡ˆø4ßÏ7ÏKóð3ĤV‘oùË–Ÿ_>Ú!ÙI¶X¾ƒøòÑNæÛm¿ÅÌ{ùóŸ>ƒÈ֬Àþ‰æ~ÏØ¢ùݺŒ‰½¤gC>Ê÷ÛG^èæénüF?Á7ó9ÀïòÓuÊ¥qœØiÚƒNz”=¥GÚO§»ô{Ì=÷¤Dóß¿ƒßÁ)~OHyİî²<Úgâ{où]8Îo´§,ÎóÁgòä¹ßÿ“=éÑxCr¤÷½&Æá‹suãvSç±Äðfs´äþ8GÛÜñÓoÏÛþ''¨û]\ʃÇÚPoRn›µr“¹¡k˜wÿ™0ö¥Á;þ1þŸñàá÷±÷¸¢djݺ½nþ]|Ÿñ/Ò$Á² lBÌÍé†Ç²Í|t)+1Èïè1Y>[HxÒ£=sþ¹æÚ#­R­6Ô[Àˆ›æÍå™Ý0°)ᣔÏçÄ÷ÒÞ<}†[KXüúìÙ-÷«¼9|'r,b\Ÿ8d/c>9øÐ Fúݳ?OМ˜/j^D¿«Å[Ä„`›%eêà9‰÷ðIþƒo}„>ž×å5ó•È,fBî§Nð¯ÏF÷¤?ã7D6}ÖõNw⥖â+;¹÷÷¯ùM~¯Ýe¤¬—~KÁ¶#ìE.—u™Ð_SK>:Ï)7ŸÇ–¯oyóœJ¦Ë‹VY@Œšé¥q•âíÛéWsrï}„)7þ­»'lrKW+Ù‰¼ÄþïWôr}6Ì_i]6…—~ØÉÒ€¼™-rÙt/Þ:|·M^ãÍ"ºÜx >´œ‰±K‡@ϬÏÈšÜB!R+qW]ªô¾Å ëÍ­èòÊ"WÞ³‚•>ësUyq‰¼ª1µx‹p×ä è/ŽÐsnèî6±¥÷(¹øÞõ"ëY—„ÛŠëÂwÄÏ{ÉXHôút[>äŽE’r§Kwi¢†¤x‹´òsǘ,7ÝyÎéŽMïwt5¦Ès–r[õ¸/èó|ÙØéW¶2fÄ'Èš»är5"Å[À€qe÷ßö;ƈîÓ+u2d´ËÒ*ž¯ ("΢ºZñ¼OÎ`åXbØöHüŽßå+hpÿ!¹lHñŒ É쀕FúGÞ£`²ËnÔX/ò”Œ¸ÅþîˆWn¹u¶«ÃXÄä +# Õ€o)áÆùÚÂb §ý-Ø`§õ”âEVŒ(ê»È÷b6BfÖºfŠmoX— #¾†DËÍJ3Õžâ­Cç(KÍœVÌxý1zÉÉ.SÔzF©ûñ" 6 XÛ«½2>䚘©Ål[‡·Ð&t¹ó;Ϲc sZš¨æozg0ž4ÞÌ=ïçÇì,²®¸'XÔß—ô@ÝîNÃBþ;)·_ªûHÎO³ÛYLT︭Å[¬!Õã~Û«L/¬ÐŒÖ"t)*,û²ÇßòÇÚ·E<^l¿—ÒsróµüuƒÏð'x¶/àË Éø%¾“_$2`¥c^À'ø¸ý8¿ «ƒîVÚ–¶°¥¦ýÇ-,XYoÓÑ–m'ÛâéÑ~ˆ·gïæ÷·åKGËÇx7ð.þ°u›=¸ºyêœÀvðÚ‘òúLW¥õé²íÄ‘R¼\6 èTt‘ÿûø¾úá·ÞRÏšd)Õ}xÁÐà÷ðù|1ïžÿÛïòg“sÙ„÷?l1^Š 1_ϯð1~`¥R°Üwu‹å<[„+[l:Ú|éùSmñôhßæ}óíyÛm±|´œÿÿ]¨õsgŽ;U?èð† ’WJIÜÃd»âžÿ¶õ<¦:øÛÆLê>~=˜àO?RüOö€£TõØæ ¦Kwͳ?ÀÿÃq~m«× ©%šVö‰Õtóa>;ÿ1¬» ÎçAŒã5Õâ- KïLêðÛ¾§˜’/µ ]ïJä4,¤ÃuÝGñp4‰¯;š¿ÅïðgøÏümöâ…õénq[Ovâ?h_ÈGøŸ|¸ê ŽÏ_] õ]h~OúíÙ¬Ùë–]vX}Näb¥ ›Ñ“`Óyë%ß¾Ó~úÜ[Ò „-ᳯ!oø2eTKz èœU",_äf)Æ~ç}:[ŽŽÕÕ¨\0‹I¶Ÿ&öäG'}xÉPýê¥9ê4×%?«ëÜœcÞ-±)…ßÌ„gä¯OOkÁV}ôEÚ«K¿A®éñ’ñh·4E )ÞÂm—jlŒ1ñºqìÙ„ˆ›•[w[ÔããígÁiKˆš,ymÞ‹õI5ï…4Cµø.ãóº§âÅÓ¦z l@Ê?é4èÃW'Á‰T‡—‹–6jÀì‘«>Ôj’Ò•§x ù²³º?“­6Õ[— c¿Y{íß'~eIŠD)^.—}#¿Ð :ü).7îè¨/MP}-¾ÃÏa#uöX‹·Ø¦à×›Z"¼à{ù³›we!¡R¼\°oáSM©Ã[@tü±=žñïùšºß›H)>¡9e¶—Z2_@2ææ•I‚¯}á_S²¦8‘ªYШɛÓµ'ü"¾î·&Rù¸x tzoÍK»ch_ŶYúÖÇ6°hýßYBÜœ ?D*wìÎm°˜àDý‚ÆL5 –Ô¯êZ|ÂøL¿öΟò›-'ë³výx 4j°HÕš4`ôdósxþ¼‹®HõªOñgØLo±M¹âضýdóõ)ž¹VJ’‹Ö˜fzëœtðêX)^êWiŠ·ðüÖW³ÐF$óÁqwt·œ»nLøü/-!>Þ"çÇ’•EBë<’àÄóëe.óE*Tm->nÎ]¸mX`))C¿›µÉ^ó€—Ï›êÕH/Òœ:<ÝÓÞ4ôìɺè"5¨:Å7åôÞ‚u˜PøíJwœ;"l5âõIS½…LÔH/¯!·ê,<Å`¹'ÔT/µ«0Å[p>S¾XdÂ'SÓ^rCÄt‹«ó1Ñ㥀u™Rp[÷û©“EÐÕ)Ò &àRS½Ô®ÊZ|LÑŒ»p/³ÀtŸOM;ã¹_3fb¯ÌBíÅ¢o¡Mèrç·g:–@äX’f´ãY\I€ŒÐ¢Ãw#²¿jS|#Nï—Yʈ±ß¾tÏÜ{\3}åôÏëï%W ©»ˆÔ©!Íô›V‡?®u=rDªUeŠo|3½Å6¥\, û’y]~jé i>#iRýÝ:¦y³¥FM™øÊºä‘ ªÅ[`]K.K•³Ûj©£°97ÛŸúÞ³1]&Ùc½ß"bbbà×¹jBz›©m;yȱ…•¥ÖX@âUÍ/Y4'Å[Ȉ(ìºþOAªRY-¾ÉÃG,°”Á¦»ï›yî·þ6·t¸·{›ØÄ&ö†)×|3N&‹æ}{-r)µ‰hÂÙpä¥c_”Óœ:s2¿Ü.I•µø†Öá­KBß÷¾7çÙlŪ¥gf{.Øn¢œÓ{¼ÀJ6Íž/rbAýwâ-$Úÿ\ß•—†Å i½|ŒEë7£ê!§W]Šqÿ„ÅtÉÑlçåšK˜¼1)~ùØRnê>¹H!õOü4¨x~Éf¤w`©ìƒjºJTÙÝ®þÓ{Å|jÚÛ“^Ó7$Å{¾TŠm«úDŽ,¨;áYõók–™þf¸TÉêZ§îÑjT—â›qnn~÷½ïw'm°jÒ¸å ™Ž¥uŽ\ ú“Ý©V‡ß¬1/YžÈk $ªKñaý÷á¬Ãˆbë…a÷ל+x<[9Á»[¯™'r<öR©éÒ–².›Ó§Þ{+185Ù¿U¦øF\ÏZl#BnO>?5u´gžžàj®—*ÕÜŽgQ kD4©%î–>ƒ€‘jòíWQw; ùÉú×X³€”€^…GRîÓŸÖÂMÁh¹çþÎ>BŸ?úð[ÇB1)lÃB:Õõ?Ïòïj}ýêéaï‘ñÖ¡Ø9,< ÏwÒçó~XÄŽC…¥>/e†MªêQòNååñ„¥Dô+®Yïw+ g`Ù†Û“£]̽õµúÝ™(I,?ã‰?—÷Öøê¬gê-/l¿ KRÛ4Wçˆ#Û;ÄÖ;ãoÕey)3lPíb²µ±Ä¦ÛLMÛ^ÐcTÉ©ºÞ/¹%mòRöWÏk˜˜É™T2ÙlÈHwåσôì–v¨Å[|@ç±÷Am©ä« ùy~œ°†#øß¶gPþ>mßZÉÕu².ø­/«Jð}|@ûi~Äþ^}í.Ö9 ‰¸ÎoÀ—óktö¬OlÏw]ò.þ‹ý¹J&ªZ³ …<¿S_çgø>Oøu>m_·}eµÊÙíêò(øtݱ³wWöJÕŒÝÿe~¹²wÔ^ïæ·ë>„³ôÛü|݇°—ߪèušÔ%p“U÷4ÄîºãÄÎiÄø©_cãk§¤µ½öd¿²¥Ã”pSIù±uéÔ÷ê1ÿìß´‡ ÎäÉs)^Å'Küô•+,¹=Ïã¼öžeË€ÁÚI~Ió?C=‡.ÓõߊµŸ–ã—P‹?;’r]I¿ÿ‚~Ãåp0Bë^ëí²îårzçÑGI,¦»ëÚ¥U¥øÚÌÕäóøì[E/ ì˘aþ½||iÀ Œ9íì~rLC%øsc_ÎOî¹éæÁlÃ&þ _ùý€¸¤rÁï…aaý#ã+÷ŽïÑ à¥Nvk—»ÙŠLV¼Nî³âÅyõ _£1ó¼Uè‹øÜ}6{©mÍ‹}«Lñ=+OÜ© ïœìÓýºº†ú¼)óÛUÇšµºÞ`%Äêä–JyVɰ¦iÔÚŒ–:Ö•ºís ªß ¹š+Ó€õ±,fy쫼ÔàGõ7)¤+£g”à/B•µøË»†?ø Þ¢#5§/ÏH?¬:Á[HH²ï½d‹ˆ €ñîÛ[DLI¸Ï¶G-ånÍlÖeزž—Ø©+:,Å/<ç~WõùpH 8$\z ¨rv»†¬^©CoM©`ÑRég~WKY„{_ä¥ ½Çx¯Ù¾Rr’m3í¯¹Mmb#{col`›šXb£ÃÞºuö¸6$mYÓvƒV^¬Ða6ÇkH–οºÆÑì‰Gˆ‡G€úb@uµøìˆó*Ÿ‹ˆg§;Ú‰¸ZkHð^P°|mà¹{,I<[[+âÕ’´€áìâÇ&0ÿéàÀBb¿Ý¹ÌJÓ=û.vË.¬/ñaŸàSñcª(êXç pH¸ðPe-þò®àê`huvïò±&1>¿q ÞórÞhµóéíu‰_?½‰ÖÔ·r ÁÇ»Ÿœ+:û]êyFlmjûº¸þ8ÀþÃGËXgwèpŒpp¨1TV‹÷̰àܾZ:l A—>S»9FJöÜÆ$@YË‚šG`ÅUõÎï½ oCîíµÉ„Öýëx¾|oì= ˆ‰¼g ™g’P2^|§-"†k^¥ão?¼„(={¾…${ÍHÎõ[#çÒÖ'?¬7Î#0¦Cä[¤ºÚ?¾ÀbbïÁ1bÀjxºÍ³p„àT0­ãðfÛiüº5M`KtÈ´ D$„ø¶“n¹ÇƒövØ4§‡L"J—È¡³~Rß¶ ¹Ÿ½gvø–3Yž¦“€wèàt ¦¤t’Å_Òaà8Œž~Ë ÷F8ÿ«˜ôù6tf“S2˜=ï3:êw²Æ lã~Ÿ«úîôºý'|=~pH‹Á‡N`»ÿç°o8F XD€cÄ€Õðt›çà0ŸìßåôñjJµu¥øôÐðLúøA7á±" &åž½¶žÎx³Ç¶#âݾ«)~ùã³³ødç§þC(~—Ÿ!f:›ežøé6‹èIgä±ç¯7Å;L÷ûá}דâGtÚ¾ià€ïã!1àpœðx†pP XŽO·Y)óêç¨ÏH[Õyè5ÛÜûyY‡ÛvÜÜðŒlÿÏÞ¯xå[ 髚àÊÙoóJ ;ÿù…»…žYÆÔ`LÿÙ6ÁìNc%K×#;ÂYq6,X¿PóZ‹‡D€fÅ€•ðt›“D€ S¼mdÑ¥L·`á¡ýé-¦ôÌ.ë²èöŸîsl3zÙBúÞ³˜˜½çÛ´%œo4ÞfàRk$‡ÜGW8–æÄ€•pµºÅ§ˆUö¨‡ñÊ kí–øa•ÖmÎÜXò‚ŒbÑ÷ùÙÀ |iN‚<óåÓm<{ìŽö°Ív žSÚåÄ€CÍ*œ“íbÀrx²ÍÚpp ¨v1Ùì‚zÔÆ‡Îåå¹ÝBËkucB"°”b6&y6+˜¥ éÎÿ“PZg6׃¥ ½°R‹ÉŸ‡u/­\º6- 'bèå³mnÍÿu±çFk ŒøÐÙ"ÎFrÀª(Ôåi XDïYx„ðàY xŽœŠºÛ9‹® U>êènWÏ;=ù»ª¨SÖ¹>Öæt®æ]k¢ÍÛ¬þÎôÈGXsw;‡d¿.S¿ïÊ»ÛÕóNOüžŽÜý³}×bÀóðìœö޳îv•6Ô{Iv!Mõ ùùM1#‡ñrýgîC¢Ù4”³ëøåþ(O·YþÝ:-¿xc°Ë˜çà¹-åü¼žG€§Û¬þvx ¨ö^ü¬™îÜL/­Òß}úf‹[Ù·þRzä$⤦PuŠ·liõ]ÁË#Ïï\w=ÖƒM“_BŠ·ˆ •h²§ºb@Å)Þ‹K8Á-¡¸”Á²ÏwýFÔ´Øé [5óþzªÃËõÄ€ªkñð£°ÅåôÙ‘— Û™¯[uÒ Õ§ø¤Óîî6òeüXÝG!ÒX9Ývß®³¯ã·t™/MPyŠ÷‚!iÝoû¤ºüœªîƒi*RìÞõè¬|”ŸÒxvi‚êkñÐ':â*È c1-ê$rT=:í­Ç[g»éŒEN¯†ßòz|wíjÁ"òÀ3ò¶Æ Hu‘/MQG-ú„ÖÊ©l-&Ò¢"¯êÑii¿ú.ekGCÈÙ©%Å{¹Ï4gaÀP÷àD^ãy;Ûò, Ã]ÝG!²PO-ï¯YçìY‡@Mt"[é“´°ONJî.'QSŠú-8Ó¥§:¼È6¼h_[ž…êl+ÍR[Š÷!y»NpK[<#™Èñõ‰Z¶z|—¡êðÒ$õÕâ¡Ï;öþº àX, £Žv"Ûó’Ä·Ô}Ç£³Ò<5¦xÏø,ßWwMJ®e'DvòùRkI§»Ù`9 ˜•f©³·„í8Á-%Q?Z‘ÝxÉ-Ý–  €êðÒ4µ¦x/¹¥sþ'¸%t¹Ñõ»È®<çŽôüW­°”˜u¶•¦©·çôœ÷ nî´x¬È>|ÈÉy®±%xi¢·ê>ZÈĮϵl#ÆêI/²/ïYÈ„ëºc_‘ÒÓE¾4Q͵xï1ft¶Wñ ×]x‘CÜ ê>ˆýXÀ„¡.ò¥™âœçd–6në> ‘óæ%·$ç8ߥLÈ´®œ4Uí õ^Ú-S+ÏíD±.‰îÀ‰Î »ebÅÙ 4XxÍõÖå–¿é?T÷qˆ´‰ßYÉÄzçКgߡøÓþ©ºCä% JñàCË™XÐôõÚl@­jð"Çæ=+š¡oÐlÒ|i¨Ÿñœk"&Ö}$›X`S"n”àENÁ‡\Ó±As‡ÑZÄ”Rýpä4,ŃÜ3mæ9Ü"§Öì }ë0aìI#g¡q)¼ô;†L›×õN'·Hš{¡o)z; ò¨Q÷âyÏ ÒfÝ‘³”.wçÐHäÜyÉ•L­Agœ¤$\« OÎGkñ3>䫸ãöÉf4ÖY`:\7'܈´÷øFþ²¥Í¸+o!"%x9/Mñàÿ‰oâó˜Ö}Š[`)÷„:¹Eªå?Äß&á¾î›vÚ€{2--ç¦Á)¼ôn‰¸¯oöjëpO­ë䩜ç~E®Ý[RÏX`)SB®½áƒyEžktŠðÌoèѱ®ä-±{ºôüJCäDêâC¿bÌÀ&WýÚÖ垘[×(9KOñ0?Ҥ6­î·Ø& ëþ»Hý¼Ç9«p(uìž=¿Ö%¾œ«³HñÞ犌‘U0‡µ…6bBΕšæDšÁKïqEÁ½ NŸæ-¶ )C¿Ò%¾œ³³IñóSüš‚©¬sš.xXÇÜS*½‹4~Ç5!SœêÞ¼…Öµ #r®¼_÷;9Ì¥x˜ŸâWtxcëïjÞBëÚˆ7t)¹ò;u®i"Ïý†[JRóã^ì[d]›rOB¦ÎuÒg–â¼ðž_sEF̽M-=¬é~éÄιò+ï)½‹4™gÞó+®u±o±¥vÏ”ˆ!W~í}Åi‡†În÷:/èÓ·€„˜©ŒÉÉv»î¶˜˜„1Cƺf9'ž“ƒ…$Ĥ–“‘íÖ1Îf1Æôv"Íw¶)~ÆK† Áb%%9ÅÓ+q ‰ ˆR'¶Èy[¹ØŸ”ä”äOÏm‹xü ÆÜù¸îw!rgžâ|̘;°˜ý—Ùÿ?LSPSÑ×@‘¶X\ìƒÅóž>Ä€øá§œ’œœŒRcÝ¥íZ’â<R·…„À·Ÿ€çµziÏ€‡Z¹E@Ÿægày­^¤ÝZ–âWyA1«Ù«Æ.r‰fõt{ÃÏ(È%:Ãõ"""ò:¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘VRŠi%¥x‘Vz«î¨@V÷´F¿îÙ˘¢îCh…‚q݇ »¹€ïJñG⽺@d>¬ûÚÁ T’gF õ"""­¤/""ÒJJñ"""­¤/""ÒJJñ"""­¤/""ÒJJñ"""­¤/""ÒJJñ"""­¤/""ÒJJñ"""­¤/""ÒJJñ"""­¤/""ÒJJñ"""­¤/""ÒJJñ"""­ô? |‰Õ}"rzÁšç~“Ÿ‹ë>49ªà-ÞÞ©ûXD¤&ïá`R÷aˆÈñ©¡^DD¤•þ?hCãVUL#¤%tEXtdate:create2017-12-22T13:53:17+01:00Vû*%tEXtdate:modify2017-12-22T13:53:17+01:00'¦’¬#tEXtps:HiResBoundingBox484.5x124.5+0+0(å‡x&tEXtps:LevelAdobeFont-1.0: CMR10 003.002 éFvIEND®B`‚gnuastro-0.5/doc/gnuastro-figures/iandtime.pdf0000644000175000017500000002654513217200075016510 00000000000000%PDF-1.5 %Çì¢ 8 0 obj <> stream xœåYM7 ½Ï¯˜£}Ø©$ê‹=( ä–xoi…›lS¬ ¤9ôï÷qF¤d¯×Èzé"lÑÒIQ|zɧÙ-~vò§}OÓo¼›>O¼puþgró/S\ªs¥ÎqÉΧ<‡èóRëìÑâxþûýtÀćéÓäW¼¹}OóO÷‚éç0Çùþômæç¼Ä\)ÏÞ‡%r˜ïOÓÛÝýþÎ-™™cØ}<íýR9¹´{¿¿óKα¦Ýû»Ó’ íüþ.ÁfÚ}ÞßÑk,ãÔãö5ùüîþÕôóýôz¢…kB\Þazæ9Ųø<Ÿ&®˜A ‰_ Ëäùþþ9q‰KñiN?¹ «J‚ÅÏ)aUHsG©‹¤Š+Ã=»dâlë ˜gÛüaÅáù¬RÈ…ÏU.È3ðSÅçšÔûºJ9>IƒCd‘‰ƒ”x–´„‚ÀÔ ÇB×ó!^ÆV¯ÓšE‰ƒ¸®q%¿ÅI™ ¦Ã2ÒïŸdŠRê3I ±# ×ä¼íq3#éZF‚O²'€³/[JÞìQº©¸*õÂKðÑûÝo¨7œJåÝ£”S*u÷ëNªˆj¦€*ÃðÑe¤Ô&<ت¿öwYJ/§g öõìIÔˆ¨Caª¡x\ |V$DìŽ-£mxœ¨‡Ò !áŒ(Úr[IªAÖ”œ®{è'Ö†ÇI÷ouO—_øœþ°Z²;¿0î|æ´Þ›“YJÄÁ)UÔAÅË€EaJYè~ p*õÅálpå@ǺV¨%"„ !1J/ÛCÇÇ©9¡óº\F!Á*Hì0­³äŸdâröãt¨\¼ê[ 4Ûi° vY\G(hزº¤j¡èÁ³„Ò-‚%7Súج–ZÛ^BÁIKÚÌÓ6Fºš6C½l—qŒùê±}°;ñ²â>LÁf•VzZK¬ŠßüHOiò® ýØû ”ŽhÕQ–áðs*àƒägƒIne0BBsê·µïW2˜K™m‡õTÖnüvV¿õóúîïÏrL؃°—Îjým[íC…#µg „ÌØó&A#üX‚†¥®–FÐe#èJX|Ú¡MØÚCÛ_ÂÐWùÈËOáŠqìBÈ^ˆÅáêtuG·ò\Ü}° +ë5aWì^…H¸¦Ö2Õ.ìVÇEØÕ¢ºšH§¢!ª°Ãª'm-$ôï{–)¢‹Ôx“7(‚nåÑj¼‹_-7:ÊÆÃÃ8û„7  ñ†mñÍÊ áÕyEÚQågû;Ä-)öþ®†›ý=0šfâ¡¿“€<‚[wLa:¬öwX°˜†x²¤ï…X¾£¿ôÀWú{ÚÞ]Öö®×ž v½©ëðûƒ­iÍ=8m}É9ÉÊP•Í ²Œ|‘Uµi2MÕ…Š›3™ ÞcH²©º6îϘfPY¦ë›jS|Suº¿þÞÜ3Qxî¿´8…T^N¾K7Þ´YRYEW¯ÊIZùì¥$ÚPüp¥ÿêrKf«uÜð¥Ä6‹H9QdërÑy"׸1»ínšw¶úÂÿ5Ì ¤‡4ȹ')¸˜ü8 .àâoWÍ¿ž|³º‡é(‰ßw'r¶ ÚP2$"×~Åy¥8,mã¾N_-Œè`Y—g0VOPÉ\ll¿mNõuçn¹é‘t’ÿ?G9 5J./ƒJ¡Œø¶N£Œ‚saÐi”q=©ê4ƒi:2C¦ lcÛl2ÍÖo2Í6ø™¦EÝ㎫ü+æXÅ*Ó¨$QË=hôi¹­Ò": ”àÀ¶°€Û¢±­ld‹a’zì›l\kË×Ú߬Ñ"‰b/×4ZŽªÑ¢7™ºFóO¹Ehè;4UQHÆáÍp“éà×rÆáeT¯Òi†6Xãðõe†`ýÌ‚Gm|‰×íõû’8wï ­É9¶S€#Ã)0è §áß-›¼ N¨@6ù±üïÅ PPé|ž…«x0K“Š òC÷èE½è3š—†pÇÚÔå†@{Yñ¦èj9ŒO-x0Žëƒ¡“uFã-XpÓ0Ndî:6‚Q‹R"4†Ò-Œ¾Ôý½¹hË/‚`/¸ö ö`¶ÎRW(íë¤7É¿—x]z›öÆ×§âûõô/ehÎYendstream endobj 9 0 obj 1889 endobj 4 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /Metadata 25 0 R >> endobj 6 0 obj <>endobj 7 0 obj <>endobj 10 0 obj <>endobj 19 0 obj <> endobj 20 0 obj <> endobj 17 0 obj <> endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 18 0 obj <> endobj 21 0 obj <>stream xœN±ýCMR5$øøø‹uøìù.‹ ‹ ­ø¾÷]÷V÷Qmq€Copyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMR5.CMR5Computer Modern312–äUøˆùJûˆûc‚ЋЄmøeu¡øCœ÷n–‘¡ûb—· ä  7Ÿ ¬– äœ WÛü endstream endobj 16 0 obj <> endobj 22 0 obj <>stream xœµ”PÓçÇ¿!ïWaÊ¥Êl¿ßXÚ)ê°vóKY‹=ޱa-QTf€ !A~0$ù"áGø¥I@!B'"Bm±õ¬=kñ®Õ‰ë~æ°»íº­Ÿo|ì¶ÐîvîŸÝíÞs÷ÜóÜ=ÏçÞïÏó¼_*8ˆ!»RÓb—ßç× ø'ƒø§„@Jüµ! ‚8xäI:w5V®Âœp|ý»”P P×ìÒhËt*…R/ݘ-Ý»EúüsÏÅI_VËuª\Y‘4U¦WÊÕ2}`S(}]“«’ëˤã•z½vçÖ­ƒ!F¦.‰Ñè Ñ[¤•^)M“—ÈuGåyÒ$M‘^º[¦–K—µÅ,O»4jm©^®“¦jòäº"Š¢V•ÈråŠ4Uz¡zc4E½J¥S‰Ô+T•LýJ¡¶S©ÔnjJ…|RÁT¥ RÐDå _þ#8=øjˆ0dRĈ²xs˜?|üJ¯%wñØ]!ïÄ+’ß~K·7;SÃZ?‘ 5! úÖú,Ž8éÃFHat#ÌÙÏÃ9øÈÜjGùè#Lp˜LÿíÓés­éûXrìŸ ã÷½üÆ>Áä,žœòáüI´Vš,P]ÅZ¬ÆÚ&µ[Þœ ‰R½´ÿHgqŸ+«ß8S{¯’™<í¡Í›•×o–±æ«½˜r¨7p$œ.‡ÚÎÖÓn‹½óŽ¥|âÒÜ­±ò¡â>N>z¨EÙüBgŠÞf†Æ—9¹³¨‘µÕ8ÁL8N´Ý0zQç¾Æ+˜ýu /ù4tKàm;t.gä@÷`¶$+vñ”÷¸\=unm ç;ó4såZ~,WH§[~bNÔn+ФC6³ý¯º[óS“ãnÖž3 ¿Lãç°Äͪ2h#Èχ©6þ’ds¬6{ß‘éÙKw0ÙÁ†ñvã0Ž/v ..¢~IÈGòQ’²:ãq00ÚÓgø3†lŠ!t`¬þr®ÁèQ u:« ¡Êj®4±¥©{ w“´í-|#ÞŸ»ßq *|Ü7Õsúq‡W0¾ˆî9!ÿ3<&q;Àóû,¤H4Y³!Š„“>‹‘¸n)ÝÒVQe9a4s…;\¡€ƒíVåOY¯Á8cë—´ãú…Þ1Àp°Φc­$²!LúðÎV nÏcæü¹k€Ž$IW­¯ô=`¾øä£_Ž—½QÒÏMÛz ¡ÁÔÇCWuOç©¶ÞÞcÞÜŠ óწÚ#ëü90ϼ”ôbžKá-æêjK ªšŽeWd@&“ˆAé¸#0tf~¨úô!vÏ{`”‚êlGeC0g-Í- Y%ÑðÀÝ oºú¹ÎžS>`þ›‡\C1WY®-S>_bðg¸ â÷Æzúéø©Ë£Ãظ0ÿœÁ[çÃI/^ð­Æí‹xûË5¼ÿ(Yp/\…{ÌŸÉÚ{d+K}¢;F%÷è­²Ô$°% ‘ þnÿœ‡w-3–åH”Ð –¶QŽ˜ÆHÑ)¸ rF AÉ9åÊ«&/0¿ñÜr€³¼ÂZk´r¦× t…uW«kæÍÝEg™ˆ c»¦?£‡!â. yOŠÀksô7µØFÀ Ì| ȳ$øGªõ\Þ>œÂP¤¸æ!*ø¯$ƒ%^•Z[R ,õ÷Ÿ9Ë’-äU‰‚¾Þz"ÿŽÇ3ý&Œ‚Ï:jþ:Ó¯á<‡ÿ¤ÃüW<ùË„- ý•þ’¯vˆŽ’òQ'¾<èÆp^ Íêi€Ð3ºé¨Šbe Ñ´ý~À÷eøL7,×”ÑQÐq–ã»iè…v½Í6¸{&`Ô0©uüÔfj}qíˆèk> endobj 23 0 obj <>stream xœ~þCMMI7$øøø‹÷òù+‹ ‹ ©÷ò÷Z÷W÷Tns‚Copyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMMI7.CMMI7Computer ModerniJ“øˆø(§ø§÷è÷ÒªÓ÷Øù›¡opnqnz˜v¦¨¦§¦û`ü‡~†‹z\³eÂï·÷š˜~‹ˆ}Š…€‡t;_bd‹w†˜¡¢’ž”¡•¦–¦–¥”£¯æ—ޕޗ‹•ºc±T(]ûz~™‹Ž™Œ–Ž¥á·¯°‹›”ƒpt…|rMwŸøC••—÷pŸû`•« Ü  7Ÿ « [É– endstream endobj 12 0 obj <> endobj 24 0 obj <>stream xœ­’mLSWÇï¥/÷âj'½6Lt÷^Kt3@5ŒÔ9dtÃm€:Í¢Ör¥`_ ½q"¥€´<q@}Y[V*S|›:%›[âts3..›:Ñ}0ι’s›ë‡ŒŸöuyNNÎsrÎÿÿüžspLš†á8./,.ÑäN¬^fâ¬4áe 8’cI­ PH‡gÉÒUÈ–6¿ˆÖLÃ$8n¶9 -ÕuÖÊ ÏÎÓÏg5Zmþvan®–-0qÖJ½ÎÌëxgÒñ©ÄÈ–Zô•_ÇÎ[bàùêÅ99µµµÙ:“-Ûb­X:[[ÉØÎÆY·såì ‹™gWëL;Y[öä\h1UÛyÎÊ[Ê9«ðt›ž«,3-Ö,İ2ìl¶ ËÃVc31FaSRt˜;†gá-øí´RÉ,I‰¤_ª\Jv…7|ªÃaëTæÏdR÷P9Z«¶Þü É ú·ò+¾ùcí:ж·ÈÝÐ\Lj/;¡ÙÛÙÞîóÑxú}'u§Ú@"âô×.˜†ö3U±ò.]IÝ(õ¸˜ŒÞAi£‡nwvƒÈÐéc}ð©cvÓ®ÖFg«‹Ø»€•\Q©á3Ë!;CÝ‹Õ ´\«'•ÂŽ0:ü`$¬¾…Ö=¨gRJGf5Ê¿yüB÷¥¶Š8½ÅÕb‚ÝdMí@Äß7ôãÛG—Š9"&N£©„8ýÑæ Aâîá¶sŠW¢ÄÊÖΣ õx¯ð…:f XŒöêšê`Mt ˆÑÊäÖ”²6€ Fð#aÔuu…%Éì¤VýÉwˆvYXÞ‹òF¯C?D ÇhðäÓQ õsh½Q>Úñ7œNÅuMøé‰9Ð;Ì!üÐÛ¿×ë9>H ¬êóȰ\™¼>IcªPÚUÄMŒLê,JCÕbà9F¼ý«ÔÅœŽQä€S zøç篿¿ä]SB‹õÿËÙu`…¶!•p¢Æ#õ}Uþ!6½¿“«¿[àÝËàãÍ–b’ú=Aˆ³':Ný©«y3ñ,ãÈ2Žß— 2A©´…Ìf›ÍlÙC¡AZüUúŸ=¥àJáDOúqT}]‚¾LNW‡ÀÃÓÅï.‚m@ ?| ç#äÓƒD…«ACo3ÊãwáX*îB|²ÇÛË;ÂLHÝ@‰Äã¨ê\mºÿìR7ÔãOP.¢¿ƒ¿f ¹æ7Q)Ê r–žƒŽ¾øþÑH]ÄÐä†6ýù屑‹@Þ?±Xûæú%eÅŒX&V9àÛ *!ò´Lf•ï15ojÜÕÜ´ì@*íA¡°™½û‚rqË~":åê ôi¾_‘ìV(®úS1ì_á‡`P endstream endobj 5 0 obj << /Limits [ (Doc-Start) (page.1) ] /Names [ (Doc-Start) 7 0 R (page.1) 6 0 R] >> endobj 25 0 obj <>stream dvips + GPL Ghostscript 9.22 GNU Astronomy Utilities, Gnuastro, manual, plots 2017-12-22T13:53:17+01:00 2017-12-22T13:53:17+01:00 LaTeX with hyperref package Plots for GNU Astronomy Utilities manual.Mohammad AkhlaghiUsed to make the plots for the manual endstream endobj 2 0 obj <>endobj xref 0 26 0000000000 65535 f 0000002217 00000 n 0000010593 00000 n 0000002158 00000 n 0000001994 00000 n 0000008711 00000 n 0000002367 00000 n 0000002427 00000 n 0000000015 00000 n 0000001974 00000 n 0000002489 00000 n 0000003273 00000 n 0000007181 00000 n 0000003117 00000 n 0000006491 00000 n 0000002789 00000 n 0000004484 00000 n 0000002628 00000 n 0000003576 00000 n 0000002531 00000 n 0000002563 00000 n 0000003799 00000 n 0000004749 00000 n 0000006704 00000 n 0000007432 00000 n 0000008808 00000 n trailer << /Size 26 /Root 1 0 R /Info 2 0 R /ID [<658ABE77718AFAFA1E2C43AD7B90F435><658ABE77718AFAFA1E2C43AD7B90F435>] >> startxref 10947 %%EOF gnuastro-0.5/doc/gnuastro-figures/iandtime.eps0000644000175000017500000030132513217200075016516 00000000000000%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 0 0 485 125 %%HiResBoundingBox: 0.000000 0.000000 484.500000 124.500000 %%Creator: dvips(k) 5.997 Copyright 2017 Radical Eye Software %%Title: ./tikz/all-figure0.dvi %%CreationDate: Fri Dec 22 12:53:14 2017 %%PageOrder: Ascend %%DocumentFonts: CMR10 CMMI7 CMR7 CMR5 %%EndComments % EPSF created by ps2eps 1.68 %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o ./tikz/all-figure0.ps ./tikz/all-figure0.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2017.12.22:1353 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup} ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N /erasepage{}N/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{ count ocount sub{pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def/HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def /pgfH{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfA} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} bind def /pgfV{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfA} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind def} bind def /pgfA{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div pgfheight 9 index 9 index 9 index 14 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfdir stroke 4 -1 roll 7 index add 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll .5 sub } repeat mark 15 1 roll cleartomark exch pop }bind def /pgfR1{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfR} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor fill pop}bind def /pgfR{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 8 index 8 index 8 index 13 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll 4 index add 4 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch pop }bind def /pgfsc{}bind def/pgffc{}bind def/pgfstr{stroke}bind def/pgffill{fill}bind def/pgfeofill{eofill}bind def/pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}bind def/pgfw{setlinewidth}bind def/pgfs{save pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}bind def/pgfr{pgfsd restore}bind def userdict begin/pgfo{pgfsd /pgfx currentpoint /pgfy exch def def @beginspecial}bind def /pgfc{newpath @endspecial pgfpd}bind def /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}bind def/pgfpd{/delta globaldict /pgfdelta get def}bind def /.setopacityalpha where {pop} {/.setopacityalpha{pop}def} ifelse /.pgfsetfillopacityalpha{/pgffoa exch def /pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def}bind def /.pgfsetstrokeopacityalpha{/pgfsoa exch def /pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def}bind def /pgffoa 1 def /pgfsoa 1 def end /pgf1{gsave exec 1.0 pgfw 2.00002 0.0 moveto -6.00006 4.00005 lineto -3.00003 0.0 lineto -6.00006 -4.00005 lineto pgffill grestore} bind def /pgf2{gsave exec 1.0 pgfw 0.8 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.00003 4.00005 moveto -2.75002 2.50002 0.0 0.24998 0.75 0.0 curveto 0.0 -0.24998 -2.75002 -2.50002 -3.00003 -4.00005 curveto pgfstr grestore} bind def /pgf3{gsave exec 1.0 pgfw [ ] 0.0 setdash 0.0 -5.00005 moveto 0.0 5.00005 lineto pgfstr grestore} bind def /pgf4{gsave exec 1.0 pgfw [ ] 0.0 setdash -3.00003 -5.00005 moveto 0.0 -5.00005 lineto 0.0 5.00005 lineto -3.00003 5.00005 lineto pgfstr grestore} bind def /pgf5{gsave exec 1.0 pgfw [ ] 0.0 setdash -2.00002 -5.00005 moveto 1.0 -3.00003 1.0 3.00003 -2.00002 5.00005 curveto pgfstr grestore} bind def /pgf6{gsave exec 1.0 pgfw [ ] 0.0 setdash -4.50003 -5.00005 moveto 0.49998 0.0 lineto -4.50003 5.00005 lineto pgfstr grestore} bind def /pgf7{gsave exec 1.0 pgfw -2.50002 0.0 translate [ ] 0.0 setdash 3.00003 0.0 moveto 3.00003 1.65689 1.65689 3.00003 0.0 3.00003 curveto -1.65689 3.00003 -3.00003 1.65689 -3.00003 0.0 curveto -3.00003 -1.65689 -1.65689 -3.00003 0.0 -3.00003 curveto 1.65689 -3.00003 3.00003 -1.65689 3.00003 0.0 curveto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def /pgf8{gsave exec 1.0 pgfw [ ] 0.0 setdash 1.0 0.0 moveto -5.00005 3.00003 lineto -11.00012 0.0 lineto -5.00005 -3.00003 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def @fedspecial end %%BeginFont: CMR5 %!PS-AdobeFont-1.0: CMR5 003.002 %%Title: CMR5 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR5. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR5 known{/CMR5 findfont dup/UniqueID known{dup /UniqueID get 5000788 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR5 def /FontBBox {-10 -250 1304 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR5.) readonly def /FullName (CMR5) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 50 /two put dup 51 /three put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE26BF1F487876AD1 16184ABCA7446A2352AB37C36E9C9BB67CEE105C612D36566FB459D6ACFB1DC3 7A59448A06EBA21F8824266BDD0ACF9E356251A897A920C39F1AB236EE06C039 8C4C0AE55FCED464E19AFAF548D454FCF73F6087102630AEA03E622AF2596870 1353925801642BBDC11F09963F4ADF037671B73D48CD9C209DB4D5BE7F4CB381 94887E8365D25C45D1F87EFFAE360104ABD3235E4D2F4BA163408448E814D49A 3E7C171B8F1275D49937C3255326069007B302844EBF2BC1990DDFF1A34C2770 A262ACCE874DA1E0002188D6A713C79D5E9226178EED27D6F4E4DC24ED2669B2 3873F42A48E5C1365AAFC83FAD8B849E5D7E52BFBB01B281005A9EBEB4EA2F35 B691489305BCFE5516DEFBA092F66ABCA2D739A9277AC69F74F786045E63B0F8 66D545B12B0581AEB579D5E1E2A412DB8F66276E05F131EC3B9F543E11F40FBA 8CC47071DB04A5D38A707C9F825527521CA1FC412FB54DBD72E912BA4EC8F747 306A65040671237C8FE84AB6D6157D96EDE13B3A8FBF7140F1A9DA55B666953B C7FA638353F278D07066AB8DDF0DFFC832F7025DF1AF9F894D52E9FA95EBBEF5 9D6B97768FEC26E845B87C6ACF5395C75B894B5A1F50B248BA33943C5AD6CC2A 8D9AC65C08B3206E7F5E5913CD0D54C9FF741A4D92B628F85E43F52082397891 66E6F922E0BFA2E45F0072217011D4B8EB40893F151E4E2E92ECE5862C467D4E 3833311B08340AE1C0C692095AFB739E9B9A4F56BFA0F0B2AB8455A7470C22C2 0C2EC285026195CB73EE2A713ABBDE4945AFEB92630BF852DD4845FB4C9A8C8A 0C8C971F29440B4A786108D0DA1AEFDBE03568B6B2F3953B4D07A5B7D6FF564F 6CC0D8C08CA459D556154A45133BD7AF70C7D8F474DE66E64FA112D776478A83 B282EA4E941CE2FD6D8F7B68D129CE0093AAF7C1D345C3D65BE74EE9391C9B89 2D4D31764F1BA81CB12CE46D15A6BF941C9F0EACB4A2DECC8F2F6B85FFF490D4 ED7BB6C7CDED10F03F68282B2ED20809F95840A904020C98299E17C46243D9EF 05B5B8173BB2E8CBAB3AA9B8207A9EFE6366C91A7674DBCD9FAF12A2EF4B5117 5687F3DF1244F5439ECD8AB0587F492E990DD7B516C664AFAB76CE71084FDD70 E7F5A38BD46926615659488D3548C5066C06E443016DD40275CFF3105573117E 369C8C34E48BEE832D93F0ADA7674FC6F5A64183DB2B70FF166E02E044B7063A 41D2F396A9158A26D3953F12982ACD1D7593F474DB98ECFD00EAF57FAAF17C7E C1E4775B37FCBCD6DB1B5BC6209162E57E21A6AF427043562D9854B430A0BAED 20D31A9AC334C87875E53E0B956D33111955459DCD98D54E1BCC61BA58CDB41E 03009979C0A541FA9F69B55D3F3750515E5F268A7B55254B8A44CA732F2B9242 18F34C029665B31EB68331B0147607645983340D15E322E3D0532E6376D40FA2 1041F7988EB9F56D83946757786737D8BB4A996EA7933E79BE61B4EA1115AA4C 286B7AAFE80AB7C619329AD5FA772A6279FE85FA6B623138FAE1C6AE3FA45AB0 95D8020D2EE2979E8A87D7E7C5DA2E6B701FEB4923F401F892D83A4928807152 96CB664018AF24E829E582FA8B4F0E07387BAC53530AB3AADF74404EB2F311E6 C6A70F960FA962E52A30CCC6E15097F9B7BF011626DAD38EDF78745B60C0818B 34663683577D897B1B6AEB240F3A2AA29F1F1800FE0A5C205B35C6A6438259FF CCEC942AD2D7C3CFE01F956B795C0349DD5380D0140D3BB54FD99EEE5171DAF5 4FA360A740589A1F8AB4FBC275CC06FF89A8350F4982F87E747501A74B7C81A0 0F40FBA9D2875022DC3D417FD623D89FB6A0C0F1B930ACC2117C6CE94AAE5844 0B5C9DAD579B7DDB73F2B26B05E1AAE30AF69937722E8360987AC0BDBE305B5B DDBEF5A6C03BE1743C518E6B7B58A85AC961B8755BF37688E37DE0632BBE06E0 53FAFAFBE52EAF276365A0484A1A682C9B9486CDCFBFBC4F4A1D6BF71378F014 56DDF9B15A5AE0276827ACBD9AB04D685F52A62BD3DA33BDC2A262B756B58C26 4F3B552841B81CA60C951F400551166C72B8D357D8122685FE97D14AC22AB6FD 2EE4CC429D580AD7B8D12A9C601FEE5D25C98BCBCF96C87FCFBF28419BEEFFA8 7A4FC7B6E5FD377EBD5E743C3FDBB7554A1FB9663B648B15C4119CA952A8263B 278E5845AB929942E1A0FC4CC413F36134884EAF3704865C1478D6988880EB54 C5C5C1BDD7CB0548342B9C7B6F94DD6341C5744A9A3C4A866F620BB70575EABD AAA42E3B6E23AA029080B299294AF2E9388520367E964A3A66A84628D75F1BEB C7A58C92EF7335F30BD0A26D072A986635318E0473CE3CD5B4F1BBFF6E781938 EE4E3C11AC27A1BE0C3B55586A4565E4B967ED2EE4674121A46DA1C32C5D278A 44BEB43CCA246B730D337918AAA394728814C726DA4F9C40AC6EE877365976EE A53276A818CF25E995CAA34039339C55DDDE74B3C11742786C1E9FA5C432EAC4 E184F35560EA31D687D005843B02F9252C2A16F9E4C31C18D0D45B7D5F63D589 3C1FE3D33C912B9CD79DBCCF9FD8223FDC18D55762F0DB2DB241625B91DB17F6 206120D6300D317E82F3DDE6D2D0825547C08BE7E6FF8FB54D4DFEF2F4E475F7 F3838B4ADBE49F8C41409D85085DB5A030858AAEEA5AB9CD2D1172C8D0EE31AE 507D8048E123AEAB05979C872ADBA4833D36626166BBB2A2CEF2F3E641DB429C AB15C97D7180E8E6AC0D871E20678516ABAA4D616B51C132F41E5661858B8C2C ECEE4A65A2B0FF310DFB531B213196D2E2AB015963246F44E22E603E741BBFF0 16DBFC284906983A8C15278A36F5379F46C152304DADC8D90C313961E5F58180 EEEC5A15131E5C48AD27F80B77EB0370482D528735FBA3E6C0548BB66CC222F7 CCE87194F565B9EF7F32E656E6964501CE32462FFA6B87087EBAF45D454CFBA9 ACA808C4397F3852158F1C0AE44772253ABEF6D278F726A03A9CBC4330EC80D0 117F9131C5974445B81093C1D6E093C669CD285D1BFE864D53E5F140D40BE4CC 2689C42C50C4137DE564374B2130609785D8F519E0083DD24A44DE24A68E4071 4A2122AB8AB9649660D1C96DC58F37F88623528078BFDA3BA3085D527ED4CAF6 25BA663A61AEC4938CA78C49623FE0EED33DA2D08CC78F86A807E791BC9CFCFE 8FBFA55EC2259B64C31F6EBC45D2DF9B47EE09AA54011D40F55B6F12F49F2266 EDDB09D44C521EC9568CA7E62283C483A436417B65B4FCBC7EA32AC6EB4E7B30 080816F29F06D6B09E5506D3149C5D758BA85D820357D4955B0C1FFB383E10DA 4D61774D3B23C84A339C7348ECA6078080FF8B436B2261091DBBDC02583E366A 622ED9F95D2A85BDBA48DCE8BE45628A4ADFD5A48869800D9B54F530F43A8F53 F765F5D5C44A9399FC1B9CEFA343966118DD11CB102423D46BA0F096795AF0D1 BA33F089AD80A104DE7FDF8A6E7D935E6713963FE3C57CC673BCDD423DF3DCE0 C57EADCA2AE4DBB30166C2CF1F7113DF96A27D4BBB23ABECC5A4795F1290F4F5 5293B5870F892C9A32C776AAD06D78D0514F047373879CFC5AF9D624DCE5BC8F 7CEA5055064050AAB2F24A1C792B2609FFDADC6AB8D0F31A12403CF3436A1E1E E24BA5F92587925C4D6795A3FB163245FBF054BB1B0FF01FD63DBF7C192D0F31 33A17E7764699B669A3ACCF7C36849EEDA395E7F55174023A79904A766F21D58 3DDB7B4C2808DE7FFB8717658084E70DBE046A13BBF1F9BB97B3AB527D68DE8E 924DE65486C3B883CD65A95901B0DE57821CB6C6AE37644E02F5CB0163617113 C91D2C649A0BA10736F3709BD504F22DA8831A09BD0B2D6790A498F2FBC2F642 7845796E606ECAB2356238AAF40323D71B236CBD1E3E43BD5443F304D52F3CC0 28DB5D33A732695AA09C0449C53C656704D820217AC035DF45F59AE445946481 E5BFBE5D4EC0A42B5662FBEB9FF6ECFFB5E8517312F56C91A01824E401E7203E 258C3BA073C1B2532B8312F5AE29E37F5EA71C52F171593B1370D4ED5D7341CD 567390ED5B75D612D5873BAC518587525A591164E8D36D2BD89F792BD9EE6ACE 99FB72B23CB2445F12B8A6A0876EE711166C9E34897D370174C17A2495D58B4D 3DA19DBB1AF2E09C72FA42AA3D8047D05AC4F6A27F3EBF32ADD2AD2FF26EAE05 A9AB34C9287EE00E8EC29C6603036D365AE08E00D1C7C410EA2551696954EC92 92080C8FA5C9E67698BD7B895C82ED29391E015F83E0DA145384E223319CBA74 19494F070649E03CE9FF905619C6CB40F562DA49C1EDD2CA221DD7D3DAFA8279 AB50DE1C059CB8D5C9FA8137DA711B9D30F236526AA389B2F79F3D5BA6ED9534 8852BF4448DC1B72E361A6A2B94CF865BC9C3401D995529E2A36DE755EE001FE C67B184AE8241D08AF88D626BD2D8AA12EE791AC4253D4761A21917C7F2F5AEC 795CD14B33F59DD7080C7654DEFFFA669F50FB1AC8C0F2E60201673A78D03DFD DE0CB142F0F616C4051772BDB837CB4CE87A0C8D61E0FC7F90517EA0F5F6B1B4 D57143CC0AE7CA9521C1536962867D6318DF1C9CE6476CEB9ADB21655D379B26 7A0EAEC2D28430C14D38764C493BA4C06EF4BE6780131F2FEC066C4866E0B258 51C48BEF77011A0B5763CB3D69A50BDD50C2D7EFBBF18BF42544B1AC196377FB 4826BACB3C16DB805D38C34F9E92AA9AB5F9A9B317D8BF32AF8A758017269914 DE3B748625D319E571187E1BFED9CCBE11ABC18C0C6123D24D2C7303DE998847 0F6F644748ED225135CC3B957EDE8567AF3EE47F5E942EA9293F7BF74260D1D5 A6F5E56705E12C8379DED158E66DF54349F0504EF584C6D05C44CDD8B720809E 3DC36FF60BF55FDF1CA8C968E68346CF43C568E0B3175CB7D55343DE21CF9730 C9DF918360036E4204CD024A67E764D3CC7677E5B229C1B909ECD1B9042134BB DD8E47FDBF63F212D401A797EF60011F52EAAFB88E3E70E007BF19826E40FE4A 73B57D52FAB33A737B1341381EB2ED307E0B83B45D6911E04BE623DA82DD6BDB 2DA096827E6A498A8D503668E45926525789D43D1BD5B896B487C0CE04FC9DAA CD9078D0C8A0639E27F0DCD82C552A7FABA42BFFEAD66CEBBD4D2E4B4A1B40A7 B6FD119D37FA26C14C29A70E2EDB3253A1AAAC2650009CA3B97B430B1A05F2C6 F2120C8981683D0976BC42FE98AB2D33014B983CE1E2F1E1AC4A524249C3CF13 4B36652F96FCBD3660ACFC2F9778B729AFE2CE1BCF473DC5A846FCC3ACBE455E 2C37853F5204085ABF3BEE50C28D99312A078CE2F6F4C1D2D3017F0E5BB5B614 102BE45CAF8108407EA970111B5A97CA8C7A64C70D52D28D2EDCD27879B1003A 6D168CD054E87C063744CDE097887CDF268D89180AF8BB4F170804AE5DA779B2 1941775FC32FA189038D6050EC0E400BBED364E0CCD8DA571E902DAD812988E2 4BF761F472EBEB411388FEB6F901777D090400F695D823C758882CC008D889E1 02678FF81B252C33C89E3B04157C889D4F0F86D432F0B3DD7811BCF01C2FC041 0D4B1DD9CB6F2433F9B34E7E8ED8BB1FA4F9F7CEB5354A8305C372C2EDEAFE5B 4AE23CEF34AC457961B15CEA084E31B3741CF2EC317DF484736EDD688737C380 6D868BDC02D1E63A52D21C8E7C1FD1BD8717612FC247293CC91E0EEA08D5F805 70217761CFCA0F9C13996DE0F045F28DB67378221722416236E4DC00194E9C45 A3839F4BB53E226919C2CD13A44E4F67334454DB7E133B2D308925CC2E275293 F81AFEC4DCF49230F22EFA19F48CAB7E09FA727CC2E11E5A5CCF57307506D5E7 6DD1D26BFD3DF97E73C2DC019B0A75B9D6386469ACF1A00A5AAB55F99BA1DE49 9883DC4FB0E8AD9421B105E050519976705F7BC889FB3B6C2921D2E198FEA294 E192DB3738EBEBF6485075728A0E16ABD53A25BB0795A21B65AFB6ABD7EAA3F7 1DAE1BA012651B4BA0ABE02F3CCCEB9E92979F17A3338A376C57A1F13E3C90C7 9DE8ADE421329A57369CCC2BA622840B79C0DF098EA42B810C596DE85F51EB9E C8F6FAA598C73F359FD7CB1D337E3B083833389846A99C87885A7537D35772DC A7EE51E8EEECF4E4F38AA04C3F4C447080386A41F1461599739D73C58CD02D65 0899177F7D707AE793B4C915C590AFD6E6810700BC0C3D14B67E03129A4215E4 953B88C7A9FF1AF4B6DA293E1DF2EF5667D408AD3F2DFDBA46EF95A1D8E1CA29 FBFA01A4B965D1101CA6C0C2BF4670E94776753FF52C2751AE41872EBE3DC66D EE58BFD3BF8F543802C7614F64E7A9CC4474DAB5F4C59F8085FD523C91F0FCE2 0CAEE1B9613064F9C9CE9556C841563A43660E0E71EE761F0448C41589AD0312 958167F62FB166655800150F9E81A558949071F01BB11C9ACFB2ACA4F332D2AC 598AD5ABD3D5EB17AFA97456C0DE4D3D872750F548C357FF34919A3EDCFF9658 F3DBF53BB3D0A204E84702DF6FCF5022E753CA92323ABEDC81071ED44C306A7B C10D15F905672783BFCDF28D97EE156E293046C09595159C735A266ADAACB887 7026C404951C27B88CC3EC1A6F15F016D55AE6B5DD739914DBD6861098977064 762AE2867697967117DD7E3CDFC24D046F1D83856D49224191CBAE95C2E7B9DA 4DC5ACB06B9F637312C1378941EF6B9D966E84DA69E66C43EDC0564D4A9B201E 5CCD830900AC4D4EEDBBA4AD14ACBADA20179AE138CF35D6F830801D7F9D1F3A B48B6C2EA3B77E7EE42DC0A26C7FDA6EB64DF4136FC3AE0FADAB84CD30392E44 49DD3F7DFAB77AC2E3A8D16C9BC002AA17A9C1E9166A21648AE2AD7F9DB250DD 2F3F480844C93059796E89238B0DD470329C2AEC9F178B83D421063BCC18CC35 2C562DAE86EBE6529D19066FAB70C8E73B260C71924B0B3DD652AE37DC2ADCD7 A3E3E1936FDD259A3F32D669B6CD82D73436212D6CCBE436578139AE07BA8C5F 07A8D2158C8F21007FC0B96E2B3588466A6FAB4F70363E994AC4FDC2CAB3A478 9C98DE079DF219648A6219EC7040A8FA91BE9D9451BEA89906677866F50B6FAB E8FC00E826B115CD65FAF738492A919CCB657186BA12260C2816C44A632285CC 25CA1D797DB0D901EECA675FFA1182AD6D48A8A96402D07A288CCC02F8A7CE0A 39084DA379C5FD08743060851BD02A3C9CC298FFA0AEAC5F5E1928C46A6EBB42 7D2AF9D32BD0117A8CD7B453C66FF39163092568B5A26F210900D466EA5CE01F 14BC1F57BB0D3186BEE9BA1A5648887CAC06E23057199A31781C4C37B1A07C32 B8AE8A40F5C481C8D2854AE5C2C3C746C4A2B48189A373A438F512642A55F2B2 3CCD2D5A06A1859B50C1C3352B1B5B56E652F00EE79060842A33A8CBD002E777 3CF6C051A6D5F02E35480569E9D00493C494F9FB977E665AAE4468E6DBBCC950 33876A21B75095CF391E09E814D7A03EAA19BA0D7A560610CC36EC3A9CA39CD1 4A359FBC14B07975379B68949C9FC2DFAF037C56C13802A7F66C809549EF2FC5 25EF3F517F06F90EEDFA6F8A3E5F1F3531A5415F3191B8FA7B0F28950A20A1E0 6E354480D09729E3A2D6796DB81825DADFA4580FDC7813B7989B18020C3AB1A2 87E948890C25563CB26A068ABABD94F3D42213218F2ACBB2F5B317311474B222 BE1844548554B37C97284940D5B7AF9E4CBD884D4994A76CC1ABF8E6AB0676A4 0A8130F05B0ABAC088FE4F9FB536924A55451C8772B29087B8E5E649DA3B449B 4A055214DF69D0218549440B3665E4D20C5A8660B3E0C3ABBA3426E7820E1A94 5D273A6ACCF5BC0B8F536F03B719B63234B5A306AED143DC5C782962AE007C69 7E79A5F4F65FDCB1AE1AA20F8D2BC95E7B9719A1CECC02999A3F4B89932B9982 34198D9FA8B4C63AA4A227C1B81EA53A5A2DB81A1A5FDADCE6B0435EC39BBB8F 66941BBE80248D0AD0CF054429BB1B117D9EA18D84E337F3AA61EA5E38FB9A40 74CFC091A00B98EA1B81F743028D8B1AB42BFC30D1EC3E8F722878B4FC53B177 9A5DFE01C4AABA49E0A1F06BB27915A36AF08441C72F70E715AFA69CEB00B695 C4C88813888A023B8731F367EADB36033B5D634527AEA1A245F8EC6C1DAB5F5D 24C9D9F922C7A35C9D1518649D76A6B2D6CF1860A5E5023EC7E0F9E572D59F28 0729BFD36EC45C67697B9130BE6EA156E42D4310FA7BD1338F28CAE0BBB0A4AB D60BC0E71FFA920217D4D3011CBF1CEB1861EB16C0B6E8D30743545593A496F1 BE6DCD9FEF26C2FED56B0D5F311D072269095176B4A0051A4799E806342E7FA9 FE4BEB97DECA29129AA00C003B4A09B8EE17972B34D7BFE58B0B391D1FAE28A5 A5FC3B1D37FA8B1EA6319037052A3B019ECF0737F7A3A141926A091E38CDCCE1 A09606744A460B23066A308CD1B9C5C68BEE666E66568204D4B1C44ABFDB13E3 07CE04F8AF95C39FFE2BE4C66B25D3AE22F31D7174EB5A4776291976095910B9 F2DE906D63767C93690F774B4B259B9C4F5406FCFAE1E91E91B50B1700EED1FE 988C8B589EF00A391ACB67A3338EBCF0AF101366D61C6A8A3111131BFBAAECD0 7A750984FBB53A661CB3F71D328B7A444794E64A35D30AC905460BC04C9F5006 B14DC5FC384A9CDDB8BA36F8E196C1AE0949CADBB52C5B3FB58441507C2248C8 09B20D2F6E8B0AAF19A962 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMR7 %!PS-AdobeFont-1.0: CMR7 003.002 %%Title: CMR7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR7 known{/CMR7 findfont dup/UniqueID known{dup /UniqueID get 5000790 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR7 def /FontBBox {-27 -250 1122 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR7.) readonly def /FullName (CMR7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 82 /R put dup 84 /T put dup 97 /a put dup 99 /c put dup 101 /e put dup 103 /g put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 115 /s put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB981ABA2ACC9A23A5 3E152596AF52983541F86D859FC064A0E3D5FC6647C3CAB83AD4F31DDA35019C CDB9E3DD3FEBD4C2B36BA3CF6E6C7DA85E25D8A31A9BAD39BDF31FD0D1790707 9DE6A078E8A409D8295F642DF492AC4F86AC84383B0F4C6BAA7C22AD5A898A71 D6CB34D2CD12266C486B75E75A69C14819DD9BB8159088E04D4717E576B8482D BDA52110AC8B8A80E4E9D58F470EEBD3CF44A1E1EE8DA318FFF3611B02534FC9 F4018C7C57E80570D2F634D98BE5D5EC6D95051157F0EA94A3D12BE0B4B79939 F82F8D73136D3337C44E314B0B16CB030D9A12E01FB667105F334C3EE965E5A3 D410D2F1531547A4497C355AEEB295CD3C5334BEE5232992960B757594B89F3E 52095042DBE6B4DA3C3AD50CA95EA9EBADA10630B500CF1FCCA7D60306743681 7E428D33B7F7C40B425CD58E4CD8AB474BCE6A307BC6C6EBC15A8A96E0E2977E A33389154536F5C5D8CF036D07F24094E779E5ACBE5502C92892F10F4C6DB627 C7EC4C7BF20B39418A8A85D7FD9B0EAAFD871DDD41F93BDE5FE619AFB8711824 DE890E62C1969A6FE28DD3578AF43D58A728FAFF0B9FAA640962C8F35A26F76C 67F3548D6DB54A25CEB368B47F97EA2B0C4D7C0E7894A4F0C823C6C1922CF9DC 10E05600556F1C7C9AFB33A2DB6F8730F70D6BF94B1FB0887451F2FFEEF3584F DFADCFA9A2D4846B8F0E51620E1327D994CDF973B837D10C90FF76DE22B47CD5 EE3183898D156861AB4DFAD34A1E3FA260B8164E6680BF58413A553E88F6100B C4F4E8E972C81A5F88A7DBCDC308B4C3581BCDE13877B976B1F84330839FE5CF C78551620EB803DF94A5C921F8EE24F7EF8FC4C3E1653514212631F54F90E3DC E9EAF96E998F340C4F729ECF7AB430FDB7C0BE3DF2C0D23015820E28B743CAD7 7F0AE95413C3EEABBC69E852F53EE1DC260D7F1E712BECEF2F18437DB23D8E74 2902AAFBC733AC5BAA452DD6F3671859AD836C8564E99CDC4183D8495AFD99D6 1F0D65B6588CE7546717911E25BDCA6C2649E3A7466A3E2DA7C7994A30AB4449 672EFD00632EFA8629C1AFB7D53D801028F77C864869FE636213A69173003EA6 BE1ABA95EB07B13D1594BEFCC95ECB0A9CFA9892EE0677D6B6C250855762B7A7 8E4E022640F93169DFA0303A0D5E73BF3E0F4D4AAD10FD7E4EB20532BA30371F E9F480F9513432946F9828AFB5D4AEAFA5829B2CB544E5EB634C4537EF7DF08A A1CFD94A52DCF0E7CE4C5EFFB01E6D50558B75DB4C8D5512B06080F27BE62E01 2EEA6A0357441401458C842D3DD4C35B8F561D816B336216CE0C14BF77648AF5 E33912CF95872A1E1AB9A18980A0B29A881D13397C15E1CBA5D3E0B27943EBE2 F3003D15EB446BCFC1C231832475D5B7AA19E4CFDE119D6CD62D053C6D29C333 5F729791D17B3F7108074EEF4D1BD101CB33E01004532CB0D716D2E54D169C6E 80163E70C0E9081F31A1ECBAE079D2A518B790B0CB2CD03DFD034A0F4788E800 B0CD2DC1FAFDD487C2F381EBAB2A2F3F3AF82021B211DC9CD2FBA6A1BB3D4AEA 4C7F3D9A5C21DFF284CCB827D205A69638E98D5DD8E36AFC1A4481B5CB2A2E8F D6C838DA6F81990F5ED928DC7457501B5C979FF4CD20A830896A460C5DB13D56 A3B2B5D9B292374A9BF392894DD99FCD6A1E655AB395E839F074D1596488700C 4E2891C8AEEF66568E82A8B826F9A28FF84D4D9BDA21F638EAF96880B4EBE0D8 081982F34831A03BEE81FC177700C2360D2A48915EC40D5FE85B400E175D5AF1 067FA0097904FB647757BB44B4042D30D1557BD0F7922D731142FD682139CEB7 58CA4C8C240A0B86B1888CACC507E24E04020BF1882BD9B4CAECFA97DB24D7F5 AD64C69454027F198BA35881B94EE9159A2D73E450C3BDAED66B886D6DEBC84B 653E165176228F88993F12A170775A8D7038BDF2FE8DC1F7B98BDC02D1E6686E 9B834F6C0AD90780B17DFE25F0A4E470CBA84E73F2D22BEE09A040F14CFA2C14 0FDA5A5149B5FAFFE49F55EEFC43831BC43A8326FEE9C7F469C0FC3B000884FA 41DA7318EB57262CB96FC4EC7F16CA07FE1C3BE8C2DBC8A8135953D6DDF20BDF 75A2B6D26074FCE752BD32FB9F5CA797775E8DB9BB9786B469A3CD65A0D9DDDA C2A166E454A94860EEF5B5C12172DDFC576A03F6E6F8A735FF21A3E9CCB4CAA1 3064893487697986A42CB5888B2B0A79FA3C74E8187BDDF7BEAB884B70B8D4AA AC6615745AEB906E08BF831CFDE222F58D02B428D55E9D5A3CDE74E42D8A2CB7 E1A3A9439B678AD438793ABBEB72B21C58981DAF3EDCE4BB93D95F4A1E943BBC B3A012DE92FED4F232A3A7D60CE60B605151F9C7C18A5C653E5D6D15E5B49A63 73E7A339504D0ACC74B8B116EA88C3EBA2CC631AAB29F761E5F062966AD2FD28 7FFE52FA8A115DBE23E471094FFB3CBAFBDF11B7E9058313F2D069B2CE98A962 64645738F02A31E2F2AC11628724034ADBCEE012721EBF0A567893411F950410 B20754A7510D041FFA6144AC9CC46D846B82581F20BBD001D34D9764010824BE 61C30D05E5C5D100A24F1917F01799CF5BC4E50FCECFEA732CB50196825F0E08 8A1EC868C6D4357857EE2957E081A0E4372E31A8ABEF23C3F2EA0FEE57DE4D08 61C570175C41AA0C7A3A579ADF593F18B4AE3782D2552E4E0759C32E059EE741 2D8191E381731769F6648B3581CAF11DAE46471896666F18F02918B0860BDA3C BD5DE777672447C23C62ACFC2611ED5239D6A266FDA6031EBC5A530C1A2FF7A6 B4380B9A4C877267854AD1F1677CB5433F28894ADF93D39EAB94541A8D232E08 22D082D0951A60F62B87DC028714EC74133A4D65F7D0D1296C0E189C4A42AA98 28E8AE7ECBB9FC8DFABCC6EEB1E9FB06227F90808EF31331CCC5D4C9A6182181 047902DC9FD0444FB94B60FC74F3B677758088CE6A159D940C5CF682335E756A 8BACF06AD7225D49B0002392C889B0FE2C71311D2596F4903D12FA20BA2FFE25 A0804B4BC282929BE31E0F46B34532CB5795A65218CFAE21F390792DA67775C7 B91A2BF4C16DE4F6551DAE3A5827F616BE9040EE6B1008DA2F99A01EF66D697A 6CD1A44E0A15D1F39EA8025E886A68A1E9C334327C7703EE721E497CA924AC90 7723106D913C5ED4BA4FC743CEA8D0F5172526107DA65775C0B1B77179D336C2 9B09B608D80B1A1E87CA1A84A833A00D980D919BFF56F6390E9D5B45E9935CF5 E69D003564462F750F7DCE02DC23CC215A0696B74D8BD3156A392A94F557655E 00BFAA035647568ED66157FACC585E411F7F428569C147DC43F6E4FDE693D0F3 9917BEFEDF61FB980B85515FF6424824E2D995B05CA1E5D3E8BD8D3281DB7CE4 E54923E84058FFC0A8A2C491327D0F87CE4C352B724167CEE224DABA3B95757E 4A419594BE4F92E78BA6D35D4C93D31ECC3134B24A45DC32445725BB044F09A3 AA8C31EFC0A2944ACE2F2CE054CF24DB350FB3C71115518C24BDC0F7E54250AF 9D3378D38480E1CB9029F31570C619A28F065CA4FED5665EDB96712ABEB33B9B 4232C00C1B0215F08D53F7E430887035AC25BEAF06942FD1B6C442253C887AB7 D694C1A6115C8990B4CAF1E81DD1FDDD6B03C00055BE956BE7FD8A4E1049AE69 EDA8593CBA8C4A41E046C689FBBF9F1B64E5856A7FB1C61EC815A56DE2A8ED33 41F370B8203D4E5B19C63AE9E6E0D26F4F3814B5AF48AD30EC9B8402C941FDD9 722FCAFC638FBB835F83DC77F93D367266FA7DFFFCB567EF82B1695AB4D94D09 B18AC041811027229DF431F5CB2BBF6ACCE9D500C8F075A74590641C1A607C56 D2B8624797BCD9C91C3177818691FBB4744EDB6056464A0B95B8D63F7C22309B 82D6126E2057BCC9FE5566D96B7A9B201A09B0D3252A5494C8CA2C8BA8A13C29 37EF2A882D61DA708C279F663D88A8E2999A0F3B6F98C49901A7631BF7708B67 54D0B4C52BF4BE0DA0439E6763A7C9D639AD4092E77B13D3510DAE1475C978AC 796F9B2AAD3BFF35C5A3E19B5E2BF704B3BBDF68CE48BA4FA2496D60E58888EA 28AE12D00E9F0816FAC190590A865BB58569A91BF0345D01230ABA361442006D BA2C90EC2036BBAB79EBAFC3F217DBD5854C519235F9627A1C3C71D21ED38AEF 0BB40F3B86BB9F09A3F309473D8757AB7E638DC1C59A7F9BCD49DE4107A2E54F 422767FB94048987847205584309397F554744690ACFFDF5902FE5DB355930B8 71863217830DD7A563B0B3A4025ACE75B0E777B4414B62A13B50C54E0E6D47E9 D43BF769B9411B74E1069BF71BA873B4B8973EC9BA492A5DEA58D267872BB246 10AA67B143D0E2223FFB4991E583E629413CC894C3FA4869B72D19CE1A0CEC8C 0FF5E5A3EC1FCB7D3C4289813F0D249A11B55104BD60B2A89BEF44CC77CCDA9A 065B8B83B4F4253AA1D535290DCFAA4773452D110D2B3370F9E2FE5432B54A9E 644EB3BA9BFF62347F376839024CD5EF3C5DFD30F412DD5474B7933E6A1AB63B 4B12F2417C72D0543C26A263AEA53E5BAEBD67E23553A72E949DEC556BEB5D09 C4D7A89B14FE4EC68D0E3E9D65A64B285E53590F418EDA8175113CA375A29930 DDCF4C71ABB26CEB800C2C2B253AC1F53651C88A56ABE5A74F3B54CB4FFDDB92 60AD7272BA25EC2F6FB759AA6E1E7964FB55AD09F4EB25DE45FD01833947BD05 6266AA8ABB7DD792941C7A070FCF3A4636FBF8921C70298D42FE92F079DBA2AD 6149D9CF9EF7264DE6DFCD4429949B15EA90B596340713BD61926DDB2BB23BE8 F9DE38A31620A817420A245946E551463960A8C5C7295E3B3D6A59BCDF5E472A 40B7A2CDDAA43CD8AAFC411D037142579D11054A903E102DF0D0C7B5BB854DBA F3F086AF991F7F5D5C730F8F9AF213F25786F3EC0E54530FF912F4876FDE16B6 A07D0DC4FC46EC6363BCB68B83ACC448B801EC43FDD2F8BE0E93D809FF81E38E 176AE17C67C85FEA58EC95435434C49A950AA955D8B20989C550AB1F1C31B7FF 99422E1F48FB7D6F327C6DBC4695A03903DB275B94CB39386E46579271870A25 21823E75C377E9D5B46655E8CD8F986372CF8BA846423E26582315A9D19E0BF5 305C32B2A0EAC3ECB275B1D8BE11A37ADF524944219D94EA2C5DBDA768828B6D 775DA8CDB09E0570E4ADDF462EFD8D3FA3F86B1DEECDFFB699AF6507257C1879 16FC615868C2D51F03CD57BA38D42995D9164B257441210084DC409B6EE4C119 0B2E17B0A8D5326DD0010E4A325D5F77BF935693BC90A00A28C7B5F74817DA39 F47A41E32F4F92AA04D30D810F7B1484EB53AD8CFC8CE8928B570314E0F713F8 AF127227190F9C16BB73D2A217FF801C391A29095DA5E4974D137A0CAA7DE702 E20DD4755B1D78739756A5E7EC3542B96AD6844199FFA2F5F2E9C64E2DA4FB2A ED79869F745C59D235438251BC2E6D26112AAED20E06021D1AB896EE1F1DD2EB 437FBD4A25E42245C5A647493FCC9922E6DD7AF57D5D482921D1CBD6F0F02949 C27777144751C1E72F4EE2BC343D4AE7A8A8758123B54FB1A026144C643651EF 0907A376945E19A8FC7F98A034832A5820A481B0823F980F59623E0511593FEA BDE6EFBCC0383242CBD4954027B075B21F10472059A480D6E5ED01C3B07461CE 9810251A5C5643EC7403130C2246E8616CEA25EAC7A0076731FEA8CC43BCE3BE 933FCE61067F5FD402E67E2B9DAD954AA77C5BC86BC5E4BCE2ED676D8D8EC7D0 ABC5C86D82180B9D5D7451C71B5149B6B67883578DE9909317928C0A92E3205E F23015400A1763A6FBF67FDE3318AD2696685A1832FC31CF38589EBC7CA1C818 60D2B2211E04EFCCEA88D9A9082E82951EEB123924A267CB03C48889032F2892 4227E217FA28F87E01CBF27BF1EA60641A4238258CB7AA355908FE36D90F5CAD FE992D03A33E47CA9AEBEFDA57793F39DC6A9E85D5B289F6B862B35DBCF82E43 5CD6A862F6FFAC36478C384C3BDB0148CB1FEDF55969C776E77917635B5A65EB F2AD351D21CD3822D43289FE8EB0FED58182997097C7E9F4373553AE1CA92083 EDE3BBE6C3BC7009D15AB5FEC6A59E9FD1BCC7B2099CA15FEF083B9CBF7B890E CDDDE6BA0AFF306C76500C945DC91BD533FF9A585CEEDEF79238C54E6168001E 26FEB29E523EE501BFA4F60B782B1499B07084C35A2434B4D29D3D8E2C8F945F A9922443B68D07DF7EAA1F4CDEFFC438B597D8943E231B5216808A85F30EDC81 9DF5DD22F54A45335B4C2203887475F39D247F0E7347BACFEAF220ED82F9263A 6488E73C1910023E505FDEB143006C1A351D441AC57F9D52D2C6D63D78C75605 999885676BBBAD56074298E0BFDACBA1830BA58E87F436CC670EE8EB1870154D 72DDBBF3794F8CAAA3F1E11DE29752DD99EAC695838A19BB67A1FA3829B6E0BC 5301610A0351AAA749F456AE31ADD87D6ABADCDD1FB3CE81C3713F48780DF407 530CB284B2AC709F52EE7AD647DEF9FA4D2A867CCEF728F3D40CF34C28D21527 10160B3DAFB5FE16AFC9D36C6EC4021FC189005862082BEA60AC72B63AD27D72 FAF3C2D89DA2648FC4C65104A069212D87144E8533CD86A6D73DC7CD9DBA25CE 7DA53B000266F3871B24663C77723703315C5E4A89DFCDBAB384AE7EB2F455AE AB191FED406F7F6EC9E5B8276EF5C4CBA041AC7E8BCEC7CAE840154BDCA3232F 15711ABD1E867A434E9787CA0A6D1F197597DA27ED2402CB2D84ED082E8D3A39 81E6EB270DCA4E7A90E2BEBD3CBB3A2BE3CAB926192D7292CC16845B6399A543 BCFD224BB52F21352732DB5154FA3442733066CDC3E186D8AA97CD801DFBE43A 116C86889BE198DA88CA978B8C40ACB67E8F7BA499DE68A6FF0DC72C3D00BA1A B378B39610F15CA026F95ED8155CE3FFFFA2E2FEB352DBE14CEE1669F2387B70 55B91185FBBED764266215D518716EDA3DFC9E5DB6B148A553E75AE5E38E1CFC 6EF47B314D54CF24BC13856F4F7C976BB91D143DE32FF49BFFC87E17885A1893 BA1B8E441B08EFC04F7D103C1FFBB665194B3D0920473740C55FB1C50EBCF717 A2359B687FCEAD65616EE89A68F8D91AFACAA0B238EE4AF0279AF5BE5294C3DE A7E1F5E6248C0210E7D40683F04B12A933C746ECB517CF94BBCC6E4CF49AC715 D8005AFECBDFB7A6B417DB8A28F8E9EAF39CEC1CA64DF37A5E66A76C26F721F8 A63B003A040A62F87DCF61B298F960D510BEFA453F118E59E7DE8CA3DD002EF0 127EAF733D5C61B5132348D280F84D159809CC71A3C6F7373BBFD8D6EF715D34 0016DEFF14AA5F960BF1BB9AC304A1823722843547BB4CA5EA4C41C6C2701C8F 7BDC810443F9DF34BA469A3260009B799871BAF8523C8763544DCD0B382D44C5 F75046AFF85F0B5A3188C2EE786CEEE5496A5AF4BCB0B429CAFC403FB983EFE3 61FD9F52ADFC38E07A0FD7BACBA530D2E4DAB2592AA9564843E7E2305047F060 C5FE4243FA8FDF1B5D4F61ACA7850A604FBC6D6970959752695C90F78961B4E2 C8CFA41082B1A37405AABCEE5BA3DC2B9EA76F486117B84728EC6D8AE6379CCB 402C2AA89078EC992C00D53151E9D82C65643F549A572A20F05107A41BE5AC57 833F7BBF8C4C5850C1FBDB908D03DD674C4D0ADCFE9C9883304785B4B8792B9F 7325ED107734B276D7DF57991AE7B94FF5664A8B29A0FABAC6434AE218DACCEA D910D8BE7A6B05F0751F9A6B49626C86CB82D9461E82A63A9A4DBB20FE472415 598E1470196F65230F7B80B54EBAE48FC308F9C0A6D60143CC3D5576671AC712 D8F88D6471E5408C44554E768203021BD7214C2234AD81C620ED2A12432CB1F9 F7CC85EE25AF847626399CAA221DC09190CF963D89E1665C5E2B6F92BB55E3CC 795F201D9279A9D6B2C5E58B87A9C9E3FD107CE0C06AE18F8C86EE27886F4E50 6E74E0EF1A8B1E75186521796C67111D5B173BB16A5E7330400D99CF9C28211E FDC800BC1C72B3992892B69995418C5FADEC75B678E9E4BD1904A329651DDA7C 8FA7B44DCF7D8D202ADE7758EC9A3DCBB7D2FE4DC35FA945B1893ED7E83693F3 57E77B565F5EA1B858B648A6DEC57E16AFAD23482C4B5B7EDAB573C9C6295596 CEAF371C3F6055F264E672AF19BBB4E75D3F9D367D0EEE161F4B530967B1C302 23A4795086E3B62BB336A1EC17DE448EFC759FBFEE95F241C892118CC7F4AB21 63CD9EDFDCCBB11C8DD28E4D7A952EE5AF84BB6861FE3531213E981C8C13B100 7F78406981DFAAA68E2C37A6D3158EDC12B37370FE7F2C28881836B5BF7DCA16 00DB02C0181F5F47FFDE30BBB6265FEE22756F684E24AF483026CC799E9F569B 69918B157BD9C185D78B766D00CC710FC6E09B3BB760771886E7A9D74FE32752 F3C7DF1634DD6093029616F07174704538A134FED3383AA3F2EFBD1048DEC021 6A351166A7DB302C00C298D17FD386D47B94AFF2B153B999AFCEB3285CCC4DE1 4E42B878192CF623123CE26E7B1D7C763177C3630A7AC887651C7083ABF2480A 029DAA72DD28EE5BCFCA64D1A02C62F69D2EE818E5CB530A486FF659055721A3 3667AC54E2806ACD21EA1C56714C52880301C29531554D6B430ED031D7301665 2AC839219D94C189A7CA884DBBC8BE7CDC05F25353197535813D912643ADEEAA 0CBC70AC3BDEB6B1A99764648E9B56A3E35BE85FDAA5F5BDA180C08D20FE2799 454DB0A343E30694A74B1ED5AF6466690EEF71125CF538BF80927223355A1334 6BEE819DB1AA153798FA99C53536EDED95379CD4CADA8C68F91101566A737938 2D1DE033DC53A347A778FDE57826D4816AC6847D7ED46211608668E4604BBBB8 34C39162206BD89B0C98BAA2CB86C6C5E46891CFAB3A44D634AB730A986B4844 BF3879510DF54E403B7937459E615EA25594F9C5770CADDED18BF51E04F5E7D8 FBD2C885F66FD1BC0B98D88BDC7B7839E8C38B379C17B7B3B4DE6FAD49EAD070 9AEC1C6893B4EE449F21D98BC59E92E7C966C2043984461CDF084B59B578A1DB AD7323710E2BF88023C846D5920D76DDD20E87AA1072B1762D26CB92493F5F8D 1AE7839D5E921FA2EE35A6E218B0F43E2D123D58CA6B3A11B9A6615D52E92621 AF384A5DD4EE9AC8139E638C91ABAA178DEB59614029B6A2577AD18850E99197 A964EC484EDCC5EE7069D1193395F9AAB485ED1D445D5E8B66B9CE5C70BE83D0 37A14837C71888C0FFEC9B446C7FFA15C81C0335381837E108ACBE510A70049E 33E3B51F007C039B8F5ADC23057B3EC569EB5FED14D4EBF29A7B8F866DC09D55 0EF6B65FCDF28D924CDEC99D7EE7EA5A5F379A7AF3F82E45DAFDF4D447A71B4C 3B3372EA3BD9527C7247C8E854D7C2886A42E8747FD61956F48B058AB2F4E2FE F265E9B613EB9BA3CD8A4597E7DBA99341F673BB6A4D5D1CAC97CB8AB1551666 3C3F9045B25D9049D4E48300A118CD5875BF2C0CCF39AF128B900A70286A8FA8 7E5B0E3708D989BB6935FAD7BAE9F89EDEDFDA6A22D62C3A6AE15C1D474E7904 5277E54673B2230243E006CDDFC37B3E303F093D50FE6E694D5DE6113BBC7C65 4B6157A213C3B957F1AB59AF4FFA9DDF16DB39A3AB3E79AAC425C82FFCA6049C 5E65903E5805554458D639A6539D81D459A25A3FE60C9B24D78DA80BCBA25F67 99D44CD63F98813E4BDEB7A47894B8EFDB5E6DD3914EB8B2A695A27274452C7E 5187EB7D2CB1B1C632CC124DAED975D14E38EE9C2F49B920A589F093ACF8CBDE 4BD44410BF32270F81450A6AD4CCEF639E32CAAA27A2D12F8EFD203076991542 0731B5FD5A5893F5A7FC462A2376258230C21CC3C95FCD87A0D5DF0C438A5C83 438E22606D5851436D3CFD3D131515CBD8D66B94C9748BDE4C3C872D044D9868 94FB90D760A0F5F80C6E5006041E358BA807D78D7D8536D9930805CC0DE7FB8D AF2AA94C3475B677425A004D7C9D25F31FD0B91549B973568399D0B5C5BB6DE1 7C08D652C8EC8E34EA5FFDA8F0423C709F6779A5307636D5E2E9AA1101A8E1C2 C45DE1634C04CFAA1B6338529ACCF266ABA9F81D1333F49A21E6313555299229 2569977698BC50D190EECF558E63F8A27F72B0F2086D3B411D3F2B9CE21EBC56 16E409D143548FAEE27D989DFA7378C55991C73D75A5EA3436494CC64C92B419 866583B334F7A5CF4190E3ED102697FE67FF89CE1D829CFE6B0A6DD97340263D 5E164C806B24D1C2EB0DC3FC52F788491FC617BBFDC5CE24EF45F3867550EE8C 73599D0AD9E4CDF62332C37DC01673E6150FDA17B060BD1D185714F0298A0CC9 291623427EED8D70E11FEA71CDF027ADACDD0658D5EED7F5207067A6981283E3 3C47C68411AC529ECB04AAF92E086CADE594C6367AEF1A0123A1B1598AA997C1 6C2988EF7ECB0EC1F52955F9C59CCDA4DC79485AB8BC74164DD7B6F2E09EE828 E8170F4FB8A70C4104A30960D3007EEF547FB86CCD91850E35F06E55BB59CDB7 EA1CCEC93084C8E194B3A4D5388CD14072952C8161A22BEAFCFFBB20BC2EE0B6 52BB298E0733E6E2AB7E4EBB581DC1E345EB99D3FFB4D7D6DF7C4B5CDB09CB25 4F113203227016C5CD81690C92C0EB7FC5BCB72B835B0929F5584274D479397F 489D186C82832EC9983BAAFA758B687CC237032BED965DA6C21A52A11A9E0DCB 2112EF27B3AF650502F90967A028580652AE6BCC89E949E17BE84635FE297E6D CB903B226A7423659E54624F343CAC59F14596313C8FE87775325D9190BE7471 0CDB1ACB83BC5CD1935A2D83C6A101322BF122B0DB36ABE4BC780B543E605AFD 836B821D437304B6B9A5D4BB9C7456FB3A9CBB0C9FB936E9D608CAB1B3FCA5B4 9F2DBBD3AE7DE2971B704810C8B9055B079BF14A0A8624259CE5E7D7B6FAC5C6 23F853F90DDF300883316936B51BD0E6AEF93A82FB07D0FC65DAEDDA76A0FAEF 5B54E50FD113600799484438B9417FD11BA2E81F36AEAE32271EEDF0A2EBD9D4 103EED484DEA065ADBD6C3B7DB87131ADA65F2D22D6952FB43B120ECF69A7683 B54BC603875BD9EAC28AC6EB355558AB43B7C3918719CC67F4AA919F898E44B8 6C9A4C3FB94AF3957060EA20B62566B3562EB897E144EB2880B065B9FB06C6A0 08A543CAB94AB34ECB39E6849AF0B06DFDA389CCE9DC593E54AC539997EF2F02 7FFEFBB3F98BEA2219B6FC760D79F0899143A6F7B4B388C3839C5F8B71336635 7E57E741A242DE19C8BDB0AA704DFECF3EB4A6607E4B5F67CF66AC02AAB0D235 443BDDA2E25BBA6788D4F26B173FC778DABA973AFFEB0077BCD54AD1DEBA5E77 8537F8C24A4312D344658128FB2701654B49D8F79B56731B8AA3C5AA7DC7D4AB F4A820091287BEE237714B457AD62CC5D3D6A0E513BA4DDA0492D58AE5F5E878 945B5E66A424B69B40AEB5F094E6D530B10F9B53B2CA1720AE14787BB5A5D363 6B5076EDA07C64E8B9FBE88F68878AE9C41798372A7BC12DD8988C6000178E8A EE95BD88C8206A883EB11CC8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI7 %!PS-AdobeFont-1.0: CMMI7 003.002 %%Title: CMMI7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI7 known{/CMMI7 findfont dup/UniqueID known{dup /UniqueID get 5087382 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI7 def /FontBBox {-1 -250 1171 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI7.) readonly def /FullName (CMMI7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 105 /i put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBBAAB71645535A2B 6F0F22458E1429F4A67307E01F0BCF6F337E0E2AD89658D880B04C26306F8179 C8121B958459B923AC3B05B594D8AB95F75870019130442FD29578D44F5690BC 7281357A5041C8A809A59D0DEE108E2A07D406656BC74A9F3317CB887E712318 46B2ECAA341F8692ACC2D14ABABDFBCAC6F35858355F1D3228B0223EC73AC56F 3C987464DB829F243E304F4C59CDE3EF6EB53A4EF9BA91510CB89A3407261F58 A2AE66880BA98FC1EF546112892494C85A2C39F9DCCAC5766725894A7AA148E9 42360AE64BF3A4F1F9F0A0D0C1AAFDC4D50C52233AA595B7D0CE557D4A010D86 6E6B76A7E9523E8A6633DA9348BC3F59302F72F492A30782AE7EF220516893D3 DE836CDE311DED9262AF01C506040541EE84AAC539B404B23033EF56D4BCE6BE B05F79CD633FE75C6728114D2749E39FD7454050F67763AB636377BA8E1867C3 996C7D7D4A4A02BC49D1AD7FF174C1F49F1F205BC9D5AE42BCB02CF8554E8F5A D1876C9285B6CCD7B8C165F75843B0AA11D8462B57077AFE75BAD086E9D9F91E 30ACFF91776132F3CACAD1CA5E08B17B36A0E45ACBAC52393B9AF9089BD821D9 CD5A9CD9BECA59F7445D63DECC1B4502D299DB85B6E2EE7C69A1DAB91E22A3A5 89B524FA20AF6005E7A586B90A2C6E5A93C9EFA4ABEF5F7E4C7B81363FE8D2B3 0AD637FA863DE787581ADD7CBE463F7866C40F4E280260ED0E9C8453E5C7E668 FFF058B9742DD3F131C264F8FA102CD0DA05F3114D13D34D422799181453FE23 2FC6EFB01BE420C930B879D671F3DFB036197874725220644A5A52DFB467BB75 8089E4F40CE9401777B9FE1D0AEE02E782A6EB2A185A454AE9394094CDFE7CFA C03C23A78EAF242E4F811E4C83B59EF4DC5ACE4AD37B41616B46C263358710B2 6137314545CA6CE89119B42A3518EC85C68DC07D26839C68B1FF55C4A9CD518B A1FB32F9C475BB6110839FCCB94156E7B3648F27245A00D2966FC4DDE3996BFA F463A663CB6935B596B1582ED0ABBC648AAA8A86068BF0038001C753C8BAFA0D 2058041DFA720B528E2D4B16196DB1CF30C779D3F4800FE662D5B60B208341F2 A66EFCB8448C2FCD12DF0DD899911A8BD96C9B670054D328790E5D388518B146 8CE92E368EB1DB3CAAFCA4834CC9D9D9DCC80FB1F34F39DACDE643052C977A7E A95C5FA8DFED9B4DCE769E4E46256D6DA8FB18FD7FA4E4CED5D486803538F3B4 6D3F5B3C03184F5C26C66DBB4C724918EBB6A89C4602E4EDDA81EEE2BD18B683 FDB459F2CE0A9CED23DC208EAA8BEDB304B00E093DEE926A7B32FDB2EC70DD85 94B9137856DDDABB402B2C76DBA87149051ADC6007018EBDD571BE1D092EBD95 76D4E063AD7D5F62E6C26EDB88D38678F2806A1F4900B0ABC4ED034A818119A4 E618F1A902315BC98F26775E59555A3DCEA1D0F8B20A9084920ECBE3F7F245AC 1182A40B518B194669D95DE968542BFF80FDC89669BC256C44CB66A2AB8CD7A9 E42C69956CCB6BDE8C09AD22EF3196939B3B84EB23A6E071A36D702909E019FF 058F27562441EB5CAE87A4407F67C4390810BE89BBE867D636468E73677B84C8 5A1228DD7DC8EADA221B1BAD5F43E832F20ADE7ADBFF170AB306F5B711816FD1 39B7882556E30F002977FB88D8B28826A75DE0D20354A2D41F2DA8578376F7DD F27B0F59D4DDDF5790E11E3957491DC74EEB7625CA49FAD90FA47AD8E0BDE824 FF326A84846A47A21B70FA549BEE307F9C6970009F963B49A504F0115777826F 1D81203F655C242FFF15BA97E3BDDFBF435B10E74CE8543C98966223818839B3 6BF3BC63F882B0AD0FDACA8C56A570277952E1D83F18BEDF084D2AC004E2B09D 70DE1740D7D220E92B54D2FD0DDEAF1E08C41FD321A8D474982DD105B23166A7 AA9E0129DC88065B1E0F9382BEB4B4E1DAAE3EA5489BDCA921AD5A8175F2841F 9400478DFA99C5E5553F383882664D73FBDFA29BF32E52C28DCE80DAF4839434 022FA515679DBC13FE98968D2894DF5DD69C49BD23D00F5D858B69D1F220F968 F0700E13873579B3CFB658972098DC61F1DD580105BC27795DB4AF11A871CCD6 2E1B9AF7F0DAAD4CE315379A7B42CECB983DAC5A2B9426B4E5E0A7F7978504C1 DD7E30063AE3CBDFB24EA2BCCDC478AB82084FD30A4793F4707D9F8F9647B413 F8A5C5AC6D5EA0E35628CE1096A434FB8286F4617CB4D0AD30A4A0B255A5A356 25AA5A947FD3C4FA44B4AA80BAB44C48CC1E2C6D0A711365A37A58C3483D07ED 301A83D2650A2E8CBA9EE62FF5C2736EC82C1402959F64527F9B640619F112D9 8E0F4A8A3078C72ACF3F34AD855AA4008C96E30D9E8C414607C34E06E29AC5B9 2EE5DDB823E8C3EEE6A8DE228313D476A7F39B5DFBFBDEDDF7C45C1C88EE6D01 7FB4F7BB2CBBD5DF7F0CBD98DC287FA6940FBFE1B3B136613A3CF16634CA7B90 53D5FD5776515EFF5D37F8FCC62D8BEC8EE2216503D54D6F2032D3C2BF861E15 FD1B45B71576F15852EEA65DD372E911EF4CC18283CD2FF4196A3F1A9D81137F F1820EC604D6C61AF318C6C5AB6DA1EDF305CADEF7CC0183B86D31310A09972C A4BC37D110C77ECCA614D1A281EE1C2040B4A5ECB31A3FC61760F608E44332D1 D2C53C7891B505A3020E9E4915F3618588FCEC80B9ECC5E637D8D0F3C94B1F2A C53FC46CAE0AFAA7E12266C212A73AAE60199752C042BD55A5DF1CD07FBDB830 C83E7832D8554AD9C9CAEEC7CED1DAEE622090897641CF2E5B34A353D83264D4 4687522DB290D3BA927BA315EA5D25B0D7B69350C6C180AB0C322B05E01F7C7D F2F48651567F0C1B49AF3950E43C94D78F7B184BF2946B924BC4279AED28F3A0 17A7D8B235698A516D3FB5DF0B18A422B2410C385E7E9439C6D60917EB3299AD E31471616251FA40C9FA098109BB31A54D9C03B2F12947E4E9252A0851B81C4D F39E7FC44752504B589C3911571B1D3EC3BD1E1807F99CED1DB20270E483A805 CA2A016E7283550D1B1D35C226FAB63F983CED41A4D02A2F228FA9EF065027B3 CC69D6F2E278C0A2D238D3A37154B0D22281F62C61D9182A69657B027BBDED64 11E261E47620602F865221A534C5A32E2BF5B93A187911A146F2E96538B47DBB 7BFA7EF406FE940F4DAD17E6E4B80C4F031D71F65657C2F5C8233EEAC68DE8A7 E1FC3055C122C1795D0C71A0284F89A9BF04837F61C9E08DB42644A490C97D34 A5D3CEE475B8D578205005A0D68AF94AD27C0E855BB8EDB74775690A4EDD6543 BCC10CF13283D6FA8A7CF3FE6C4F96470A11FF0B0160D3F9816B13B0BAE0D8F9 B84C7631063FE658D13D108D6FE24A89799FABA72E6A6D1C943922CBE676C1B6 11A4106ECB4F1A7F8A84B2783C2E6A109C58D63FC0B74D8C8A1CB62D527441AE E656D94B1AA8581B4F07B653ED6486AAE1F8ADB30FA8D8914AF24721C74B0908 D84F2EBB91144ED4BD7EF533F2584048DEE37E17CDE5FBC2992A6F924FEBAF07 B626F988599DECDAB43C931CFECF99FC6EBB72F8E542765C26295902DFF60B7C 7B9ADDB4858BC9D808B7F0909690CF8DFBC59A786D48B891937C31A219842A43 234425B4963062DB4C4E9F534C77F4243408805B5A6B8BBF428632CA4AC03A7A E336DD181CE0CF3E742079E2919EAFABE16A63299771BF276EFA8D85C920F995 5B9D4E8F1ADFCC5C29AA89BF90C186C5DE7679906B2FD4DB279D245D27D08837 D3A8D541FE37415B706EC585C05804108C1D938E543B8B63E275EE85CE9DD843 0A8B9163144B77DA1A552A25D5E77E94F29CF252BE9950F4E627D5F72536B6F3 3278D4A45D10759F16AE42BAE8460865FEE84537F8EC9BF4813570E883B826FD 1ABF3F4E66DB6FEF8366E07BCF290EA67D39C9D81B2A7EA48E0A228FE3D5AA50 1A56CCBF229C9AF2537A8FA70EEF41096ACED34CC7BEECA4EA1F23B39FBC39D8 CCEA93E63F508CBE6722C11467A3D0D5C4C52031DE43C449333E4295104651CE E13B821D7904653346067E971BE0042C571ABF40C3A1079A675FE4264B784D46 1B8FAA4CDE9851C4EBF69ADF51A7B68CC8706C08D13A44909D4C1D78DB0E0B2D 0E0318304B229DD2FDC968027CDFF65722059C62154304D6F9C3F06DE22914EE 928B7D1BF1FC7E74B4D882998D59BC086AA2D4EAD0AE39F6B75B5A3FB9994506 E21731E1A15F0F2D12F88724BA72898197A80FDAC00243A3038871EBD2F2BAB1 C616278BB78490CB86F552CBE5DD0862F3793D72C68AC16AF8E38FE1A523A5FA 9B0428745B1455671CFA1F6BFBCCF9CA23C833113C2948E7A6AEFFF1A83509FF C559BB5EE7F92BB43F7F37A371E661C826F63DD0C1B25E34A8119E71EC82FB66 23C7B126FB6554E7560B1B69F2EDBB742F3B20D1648C151C37A8570CBD330A9E 7592A8607D2D727F3AAA0FF2057DF4E2A4C7D3B658C6CED38824A770420D89E7 F6AD385DBCE9C9A9095CF0042052A67AB804A6675BB9373A99390CBDFB715984 A069DE543E4C6ADD7F1EC7A15392EF834EAB4584679A43443953427DB13E6959 0F2F5061C99C6D00FA5327FDB5330AEDE19A53DE3AE092634DC6AEEAF63A5BED 990F8A117AEB1CA0E7F7DBE02CB3D86465F1613B976D1CF6F3A1E69740A2FDC8 062ACC45EDA6B863B60015F276860FB79C31D28F97A799568E66D0A8757B2C41 E939337B467303041D0F4C59390B2E41E5F298F275DCC699D27C459ED4D5ADBD 02539F00095D7E1872862142B46BE06513D3EB1A406E6BAA64BE795122100F09 C37E5D1834218EC1D11B031C7DFC9F5AB071A8F4DC08203821366959E9191D4B 289682D915AF28CE5858F83338DC51B6B0DD052A181D9133FBA50CF18F70EE65 C33726A0450EBA9D0E0C3662AF6C2121AB7911AA9880D6BB6811D6D7515888E7 199A0E632104059A88C9D85B19BB35EDF4AB95E1515BB2339572928BD5FE8CBD 2D4DAF55DCFE29FBC4C3D56336277BA0C9A889A129F9FA7052AD1420B8705163 1A808EC1284C888D78CEA2B4BAB71AD76289F5F4986008FA9BF328E8537E6C91 E11DBDD8447E1C9ACE18DB0EC3D5742C264C8EFA445C5D16C2930FB43669774F A2CA52144D99EFA8FC427DB4128CD4C036A8C611B087335C780740FAA419D39B 5DD68EA89C95275F9254D947EB3683D0130255269B10C6CFF29EA0BE484C9949 96188FCB747618A8044E2E37DFFD2DB8ABB621B34DC024259340677095B6937A 78EDCF508AC91D4CEFD872AD73F50582DC8807143CEB9F109C84DC5DA30B64E2 E56DE973088A9D32583D6946DB4F3523902FB1781D993B89D5F56D79D5D98CC1 7FEE73FC3A7D1BCCE90179AE450829E228B4DEAD3B2B4C79A400CFF899AB26F9 048B0875EBC871AD23BA96F88CDA8B87FE5809A13889A6AC349ABB25E54ACAA9 C213C5DE2D01BCB9CC0D7BBD384D23AE12E289FF8FDF1F611F5E14D4B20B15A3 42D9B3B37A83A9CA39B5DB6C8316C51B70F211530A56CFE54D63E88169CF5233 D1A7B2388025B3EBD2BEE0716C3A2D589EBC7A42B3DA602AC4E2FD9C9052C922 711E44408DEEA1FE0C9FD50A39AD46D437F61F284A2EFD42EF158EDD71A1486D 4865D6B5E20E60F4F4FC3D646909FF1EE2D7573665E4CD8340A1B232CAC0202C C35BA9BB3D2267C7E78518F6711633F888EBEF72DC750AC2CB362D528CFC8B2E A1AE1C05456F50EED8CAA768DEF47FF85C4322F02D7F9D188C6F285C674EF589 251B0B913339FD701FDB281338D96704ED7ED908BC113B4275A24D058955890B 12CCDD5572D63688426B0E1E9A40D6AAECFA5555C1CF9DBEF8C04CE1E5A63F14 969D39B6DAE8A91F6AF4CD1E2DA89A4661DA34E272B6032C442C031F081F5DF5 858F4620885773D8A2B2F5EB6DDA74C1408DF279900450E4A3E80BA9A9B1295E F24EDC3F6EFD81A741EF74B0202820516C4FB720687BDD915EB2396128C3B262 20E3075DA153D6FD36E1C05B855929DAA4DE694B6F15EF2145C63250B24B031A 4CF0AFDB225E91D99828B83BD90F1702D3906D45872587A3A116B138AD9627CE E778A949C392202823C670FDBC56F1896FFFFBCF52C4B400F67BA36B5FCE44A5 F18EEB8ADFC088C99DFF8E0A593E81A5ACA2E3693005F723C7D3E0AE2BDD3805 8C6007A00542DEB2539709558A88B21003CE4B2C7817AF207ED576B25A41DEA0 FC55A459BEB00ADB01309B35920F04F84B7B64F95AA99EBCB843A06CED900D99 97BEFD7CCB9F4D85876F10160C8D63E2FDE82B7A8D945F37CC9933ABE0FD1D76 268296B1A5AB06B2E814691128771694224781171DC6266BCC290FCE1AB59416 85530368115BABD4F1DE45952918D1945D51EB713C283DAE8EDD559F437CD886 A4B1DA6120D685C284673A3EE489FC1AE4297A3623B339B7D886B6B4B8F9F4A3 7BF85E320A52FDC6323B51879B98A14C33C567BC069D9B44616514EE1BE36F90 EC5FA33E1B6B0A46945D876EF0085E74935DF2560A03321861A752E59742B9FC 5C501FBC64BFB1602459885B63873DC857ED37F8BE1A9C6E9517B9BF5A6161BD DEB6DB0381FFB34A8A96AB4AD48BEC40D4C198ABC599C3758AFF638AA75BBDA4 8545D5F95FA426FB25587301A43E176F6CED7851E815AD907F2443E70740DD2D 4FBD5D978B9B37F59D6DCF0ADD0F90825DD23558FCB858513602C8BC82BFA383 7AA6DCEA4009961D06DF233C5381A7F9541259926446B2F03664BC5978A1B6CD EA6EBC9FE6100A65959513EEE32E69D47B55BAF30A893D77142F943982019C01 715CE29923795EA01C58A798979939B507C5B29A32881877EF7EF0C5CB3DE591 6B9A6C3F3FFA847F396A396F078860B59850BA4CA3115CA2376AEE6B30C05DC1 6F9DB6781ED0F9D45D10E096C33B1B7CD12A9D57C6E49AD833C4B093DC82811F 16B3BD902BE764A1680831EC5A6C1CED84AE0DC0A65678EA5270BF20931E6409 7AA44EACB22CCA11098F8A51096BE83A1ABA56C9EED4195D5CCF24FDAD92E823 C439DAAFBFD652157D728F2754F28304710D3CB33763156D76A259D446647A11 493FAC70DD28063A4CDDA162F72542368E1AC2826C4BFF7109208F66371910C1 068F21779FC39DE03AECF1C9FB2F417930C22791961D801284DCC89B0833B6A8 D63F153ACBFB7B7D547924613BBCCAED37D90BAC5B0264ED31C7B9DA5A2BC620 9B20CA48424D0FF58905BCD6190BF4B5FC6ECCA1BCEF13426920197CAB41C4E6 E82E8EE7BCB23C6BA6F8B58001533B225ED721D6CE3D6E89116EC33CAA6E905A 649F8C6A1AA187A48E20DB864596481976216DB78F0F57543DFAE3CDC0A6FC77 2CAA49442527A5D94DC54BE93C875690CBE52EAA4EDD9F2A511361BC0F0807EE 96AD0D26B62D809E82EC14EDB158EF48A748A6FE0C3A7EE5D4479B35425F35AD 3EC7444F6FA75CEA5011AD571078293448A33C7647611CAEE87974B0A756DAC9 4E1BA78DEE477FA59AD50BF5C52E068A5E044A4A4994D5B24CC5045F768A3C51 D4F65E2A5AFD271A7666C6835E28C60751EE528C0742433165AFBE71562A3016 F59676D56B0B5F7E4984D664BC3ADDAF24B4205752EE21D4B57057A943018466 09C3FA5D2C5BCBFC22A643586BC9E7A965DC34C0A7D272B5B1617BAC2B0CB510 5DD5EC6F7ED1226D19189FF547776698FD48B7A6A038131F869A9E24006A4FCB 9FDD5E4A6DA9C531E1F1D1F0131CF8BF06B78BD2C6109E3D5251ACCAA6661142 7E0CF66D8C1998ED3DDDF69890FB2039F35BFBA2D9E6EA42F2E2E88E8C66D0C7 6B2A404F1C72AD3C0A327A90E16092E727CB2BAA0128995EB7C99569C8CD11C3 77C294DC2CDA70D0CB20DC0EA68FFB6BA42D64A1609E07F378A1AE072D1E66EA 6A88B6216A65BB5D731DF9B83A7A1136A9CE874779495E7C1D5CBB3A4F47906A 09156C93994992C526D0C9BD0129976B790F553FB2400B78F2857FDDA9C4AFF2 AF6A3334700FB3733F881FAF164591DCF506611CBDDA1E075026F2E98E581366 76C64A391601CA4FBA8CA906ECD13A23F4B7E7B39B39088D010DA238CCD5FBD1 DE4A90C188432793EEE6100D31754A7E35006BE1525B491190A9349D56CF1571 8CB1A7FADB595012FF87C7C9D63D48DA49C6FF1DA2DB4BE5C17C3390FC33FB05 F07F8B7B098DC4CA6765975D8649B09CC02BECA011A3B9D350E5603A9909A1AF 0618554EEF9AFB0A94F492AB24913B20B8A441480122050457CD7CAC1B2FA3E0 EF9896A70C1C8F045E8FCDA8B497C8DF6807BF9B4C51600E2DC1C68CF508C6A7 F39A0CAA4BBD71A361A882A23702AD90D117FC9367CC496B62C3BB2967C63BDB 25A9DCD7A0E28345E6C903AE58C6C05D84077445CDB73865454B18D20A5F371A 03FC84B30EF621C5974C95C04DE90F179C63FD778579C69637E7460D0528C76C 7C21AC92AA6043F2FBC781ADDE8DD8BFF211 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 50 /two put dup 58 /colon put dup 84 /T put dup 99 /c put dup 101 /e put dup 105 /i put dup 109 /m put dup 115 /s put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD10B4729E5749A10EDBE644886443D1249 2C8517DF8D8AE98E2882439FA81903941B363A7D885F93C6DF9E1FD89F2F8CEE B870C409ED13E78B4C914813B0A01DF8F876EDCC4F384055FD37C575726AD69F F23D50EC5BEE2FB95A44F2B2E2DD94C933D90BED2C97B53738B4B2ED56EBE617 BEF17B9DF4F314A37F10FDE34C570D7BE76A496A58242F51E7321380CB042424 855F4B53071DF5A0DA5A31B8AAF9FB4F4C491625FF8FD008BD4402918043BEDF 77B840B2BE0DAAB4EF904FFEF935954AFB9BD2041241B1BC8519EB642C89E288 479664226DBB6F1171F9EEBC7E1273D0CABCF6B1BF7F26AF21C21D9B1B916F4F 603DDB68D3614B86566FC91D67AC3F4A4A96E256FA1A3BD35F4465AE4EC64D82 34BEB4BBDDCEEBD9A89D932E55F14CA2776F927C4FD3E0920790A57DAEA08C5B 169A3E2309DA6BA8684A5D1DEE81415796E13DCF906FCDADB092047831B16841 B250CD148557D72DD7E683BF122B38E2C4F614E59B395D1D9823D7D5F126D932 14B50A37FCA7120F8F3A8E42134F1B6B0C248D56F247AA68FB941839F600F61C 14247EFF780BBA3E5198D37CED44DEEC3455048FC451BCDB48DC414AE5293A60 5A59877D6A42FA7AF1CD28488C1FA0A2D5D57551A68A6479A8FFA785C2BD2D32 BB5F20CFCD667AB094E382D582BEAD23DF0A82CC481E2DF2F7B0CE752DB13736 3373816937321F70D50D6D61F24053B2D53F0D9435B8575DDAB8AF9358720367 9A974E13D88C63121A3196210E0C1363B06E0C4CB49A374F2A0C163CE0512B66 7AC78A09A780813B1FF02AA967B12AAFAA0C4E797EF349A0EB76D9524D9345E8 226E83D3291C80B65FD333DD6A1DFD3F3CF2476231B11E3005F3F94074622377 3C8BC72E954983FEDEBF29C468F87096011692AFE293731EE7455CCC4ED0ABEF 6C73B6DAD196A17D4F415D8447ECF70B67DBD46643BBB2D9CA0825E4E1899778 6BA72E91BA1D2759753E96A327B6C55724D80DABC4D736411942BBA8CF08157F 21D63C12E302B2AE8F89259944B1272B1259D760D7B237396DE5E7810D69F242 8045CD609E23CE37791362950FB7414D0A2A7969C4C1E24E272A91C5C70D329E 38BB46FD05F9027EC85A5770A26ABFCE9BB6F317D1927FD9100CAAA63C6A4A24 A808A932650890ADBEF2B23765A431C9C05777C5F9FCE9085CF55CE0548710F8 4BF0C35052FE6AC212A20E02B86BE559E9AB16B32D0DF190AC6B9BECF2190F31 C568C908C2A31E6042DBCDB81389EF28815477997EEA26D31D194DA347C0CBC9 18BAEA0A5CE7E682B6A859D852D22ADDC8B4AAE9F220003BB2B2CB9369704CE8 5F5ED2FA84096D5D15D9907749FA6204D5078361834AC6C0217AC49887C1D62E AF131698FDF6B55E5B1B11C5AE8BD7FBDB7BA6E90874FB1A220AD14E1EAE70CE F7F489BEC25D3BF60959056C16E1C212D194750A8A223D02F28A0B8845A098A9 E13C19B474AE0A92A80ED24D98F32BEF868FB88DCAF45952353E6ED578ECFAE3 57393BDAA439A6A4C2D2B002B45B933534C0B4C51DDC50BE37BB6E42B8FD6393 AF6603E7BE95D2B9E8B9F50EFE02A94198A791978C912521569844012BABB5AD F93891FC191896A1A86CA2E5957BCA0EE326B90C882E7CA0051D10AE4C979806 8F254ED1A91F7031FA0B828C89F0402B564D3F8521868D652CBA1DD239AF01AD CB322583134466D06C6B6F759FDB452EFA0029231EE1E3133136F8B9E2C7CAA0 CD72D2269D74A4ABCBDDE3DD98EAB24D30A19E5C5D55EAD0550D79E5E4EED921 E877C70FB87C49FD0D18CEC4306702D0E91B068D1E432A2C5F1530543806F108 6EA20848A86EFFC39673E2D4368C6BF53A039A8517BF2DB8E77F5201C8A04618 1D249305DD002F50F36A89F0400BFAC3A533E44F41CDD70B221266D552DC691C 78E23E6FDABD6C8150FB4B1B0B028D6A21389CCFDC5FC32406ACD3E3CAC5159F 4F3FED91D570F9A604E1937BA288E6F7F5EF5F5C788487890E9F2A1A8AFE1CE1 E993C94539D461C1B53FCC48784EA20B5F7FD586822E597FC6F6E0B8C34E8AE8 162B8FB4D09237C2396A5A7BD8631FB26FB458A47AB5FDB14365B551D5489030 C1FE9277426CC659731E2435367E24534F36E0684C7AF056A69D43BA41A51116 F20B32D5A200D311ABFD9C942087AACB2B1E4EF9E1280B1852D5EBE27D2466E8 97DA1F9C43DA91D2701CB7A4AC25EEB794446615226D34EEA5D2D5A25E176D10 E70984633DB2203ED9BF9F14DA81F778D8802781AD3E51C984AD2E577BF4A90C 0A7A3796606B875865C56EC5983994F695A0A1993E736C2AC98575E4DD4696EE 66B2BA477D13141991A598363952A06703CF8738CE452C21319C42A23DF5B583 E2B3C570319F66980ABE0ACCEFBA3D2977040D8E3EB331187243D9D49DBCAF4C 6205808A224EE853AD4E54905F25CFEFBC2591A87D0CE5AEDA30DA4F11EEEA10 3137618B2BEA401C06D3D5E81C497121E89D672888605828A5D33BF71AB47461 4D9A42140FAE137A7F48B332D4210F204854AA899ECE4676D80F8AAA5305D162 D03F2BA7FABABE7F94C0E09E6D9FBFF9E42091225BD1B26B4B1F951D83972DEC D70AA8987112F05C939A6FB07CF24413281F866189CA8DC2EF6F0410A1FA92CF B6D33B1C4E7FCED8816FFF15F540DAF3B29B92C547B56DCB53F9792361A8CC60 ABCEFF0F3F23B33A64163C8BB9397196E1C263CB1ECE2B1F6DB3AFA1BF4B117E 4BF697898780190F1355CF7A154765411925D03D58A22DCD2AEF5406DF4668F2 64E859A014650DD9C516FFEE68BCBEA7419EE8E4262876F04BF1B180B36040D8 AF94F0747C51AF468981751B8E0C9251DD4C68226F267C021CA4C0E99CAEC2AA C50A7A8CE5BD7B6F491228740146E27096709E279D2309F21A88A000784867CA 329A82F44834A395D4CAA4CD6992FE9AC85200BB44DC345608947C80FF139D50 63A575FDB831BCA5BC4899E7B88CDC28012DA319B643AE0E6AFFF1E138C8493D 65E6834192E0853AEB5B7643FC865E744107C0DB2502C4C4A91BC788FC12516B C85BC89A23C2C6A28D20DD8A6A3C971A03327F4F98F4D0DC2A799D6AD10E3D85 4A57C9880CC89324A79A0CA3F1783DC42D7C0BFA2C42E085C3F897F0D49D1161 EACCC4DE5819A5C3AA97AD291A3032F4198B12D0D7A61B06D63389AB640B7420 7F0434C9599D055D786DC25523AF3CDCD644FF9EDA896ECFFB9944EB7EEADEC7 BD012E823A33321B9462C1198EAA9270AE8B04E3F4B760EF786A761A5F7843FD B3F18140BAD03E0158DF81156B6588FA78F249C39845E6BDF1641A7E9BB42E02 CB0BB9343CCF301F1F53A4A8DD396CE859EB7B54ACCDA547DA19D30BDC742E3D A7F4813B88292A4D0926E17439547EDB2806235D9D7D9129C8A538E9E40791F0 47BF1459FC997AB2BA2F9E78B3E7BD30B089F5F80B5C63FC2C4512D85CBE50B5 E511F548989BA3C67641CCE84BEE2B9FA16B9012FAA871D4A4B4FAC5CACBE15F 3153B48B589A8A8A0CB30FFFB563E5D1406441D0444E37F24BA2596E4747528F 6D503237B9F75D55DE40017827CF2F40115BF8A7BB32F7D29BB52326EF7010CC 414B02C54F4A7FC6BE441B0F61FCB2AFDF0955C21F2A76D9B9E0898361BC9790 8B03BC66EFE9B7E606DD697A4AE783E1B58285083719A578C764465BB5AE6605 B8A7ADE9F895C972355C5B941F50B0DB832656F8E76AFCCDBCB1E5C3A79A4975 48D548EA0EEE00188DD29F8C8DC25126B903D06F944A73CC5DC22D9C3CAB6E2F C94DD9C1EB388944F46893A8E5FBF0DE600DBE7387C953CECFB9AA7C9D17C1F1 01CD90284DEB91E97C50334C156FDD8B8402220D0AA6C4D0CC75F6E725DFC714 91D7F7EFBF76FD30BCE9E0DA785B4B66E57BADA803684DC21891FCA79A0E6BAD 7A714B2561F3BFCA23FBAA7F725D9DE5DC425E020A65EBC2F85D7AE66F11F920 1AD4167B77773EE63AB064C8D7C10EA5C9B822D49F5CA2318B9DC925189BC49C 88A31E642B429A60FB107FF8083A1E3CE13B926239A5605AF1F9344A73920417 72AD0DCC9B3A10B1F9CCEE6920484F5700C33040DA66E66A9995FA5B117AE9B2 AD8758C27F821DDA65907598F3EE66D811DDA393FF99D7E4B9C90790F45B90E8 54FEDE45AE507F9E987BFF931BEF04840386765C9F1E4A7F21734ABC337C672A DCD7134F75A3B9C6936AAA730D0C2A01D2ECBEF8341E4AA9FBAE955D35F82DA2 BD6E375B8296EBEFDF67ADDD1199B3489FBF70088277DD5092CEF25362D1C0CE 18404050364236F8EF19E3E2C7A446C02ED24485737ED748A72E3F0F13EE11D3 062F4AEE524A43990A60C61B1F8E950CFD1D217D7C7AC3ABFB77C14DDD1A29DC C155C4E1B0C4FEB26976F9836DE58EEC072B98AB220976B1D3EF6C195BF23BA5 0F0B7DDD7F5E2DB252A1D404FFB4E8B80349E3513C385B9B1B7E3E58581D1CA7 53B9CFF195056C3866457A419198A9DDF0EC0735A7EBB872BC7936D24A8C8FD5 F17C7951CE86D4E2DB760750DA4EF1F2087AA80130EBAA385F77DA728261F3C5 DCC0A8D22518208A890355BF47BDB825E83C214B1A6B7D3D7D16A3254EEB428E 1CE31F8259A3599D548F402CD38A6E6E7B2E988EAC409B813079E96584113B25 1886E82B3442BBF6BA88191C009FB1E074BBA26DE7F97F34346DD7DF6D1E221F FBA66658B199215C2C0681A42D170E0F61B139F5405402BF2AA5E11CD58E68F3 BF4441AC79B3F5A52118AE0888DE9408E587691DBEE539477D3D591DCAC49F95 12D1206231FA7EC78BC826F2EC2F9ED156C810F2BD65804C0DDB80B53713A981 DC219292F660D220AB9158B24E59A7287D8E063E7B16F35C6BB0CE32B3D2E171 F7F64904BAD040407227339502C857FAF6058AC1829843AB9167E1FFDA98B3E1 FCDF81530BB54A9A5612818E9EE4260DB5AA01F5DEEBEDD4A730D8682941FFBB 9FC6B58A353B0708A3B141ED2E97EB495A8428872F8E8703FFB5571DD1B68FC5 C92110EBF2E54655FCFD2051D75C1ABCFCD2A649D5A849884A36A81AEAB7E8CE 1479C3D78B2718CCD560FE8F606C309CFD7D95ADFA5C4D635A50A5B063D85C68 F515B26DA2BBB92F9ABEC74168EEFEC94476843F602696B72DB620599841A6E0 9501E10D7DB5EE7FF3E46C238BD2872DD7B3330B76D227B6571E96CD57ED179D 0A95F2E100422CBE88F83B2057A3A4917F6AE4FA4084F3D3DD0CB2FC19AF2C91 6A2DA46A2E2641DF90F4DF83E2137D103BB030AC43C12546683E4637E91009DE 4E5ABE82B704E28F50AD9F28F2FFE11E409D1DBFAC0B4AC3DB2C7C731A70AAC3 4C 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if TeXDict begin 31861906 8176887 1000 600 600 (./tikz/all-figure0.dvi) @start /Fa 204[28 28 28 49[{}3 41.511 /CMR5 rf /Fb 140[26 4[37 55 19 2[19 1[33 1[30 1[30 1[33 12[47 1[48 40[26 26 40[{}13 58.1154 /CMR7 rf /Fc 150[23 105[{}1 58.1154 /CMMI7 rf /Fd 140[33 5[69 3[23 3[37 1[37 14[60 25[23 7[42 42 49[{}9 83.022 /CMR10 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin % dvips-unknown statusdict /setpageparams known { hsize vsize 0 1 statusdict begin { setpageparams } stopped end } { true } ifelse { statusdict /setpage known { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title (Plots for GNU Astronomy Utilities manual.)/Subject (Used to make the plots for the manual)/Creator (LaTeX with hyperref package)/Author (Mohammad Akhlaghi)/Keywords (GNU Astronomy Utilities, Gnuastro, manual, plots) /DOCINFO pdfmark end 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 0 TeXcolorgray -183 -377 a SDict begin H.S end -183 -377 a -183 -377 a SDict begin H.R end -183 -377 a -183 -377 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end -183 -377 a Black 0 TeXcolorgray -600 436 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end -600 436 a -600 436 a SDict begin [ {Catalog}<<>> /PUT pdfmark end -600 436 a -600 436 a SDict begin H.S end -600 436 a -600 436 a SDict begin 12 H.A end -600 436 a -600 436 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end -600 436 a -596 432 a -596 432 a -596 432 a pgfo save 0 setgray 0.3985 pgfw save restore save save 0.99628 pgfw 0.0 0.0 moveto 0.0 0.0 moveto 0.0 123.30862 lineto 241.6876 123.30862 lineto 241.6876 0.0 lineto closepath 241.6876 123.30862 moveto pgfstr restore 2.46857 108.51219 moveto pgfstr save save [1.0 0.0 0.0 1.0 5.98839 112.03201 ] concat pgfs 0 setgray -596 432 a Fd(Time:)37 b(1sec)-596 432 y pgfr restore restore 9.86678 54.25609 moveto 98.1871 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 98.1871 54.25609 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 98.64539 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 97.23601 46.12158 ] concat pgfs 0 setgray -596 432 a Fc(i)-596 432 y pgfr restore restore 54.25609 9.86678 moveto 54.25609 98.1871 lineto pgfstr save [0.0 1.0 -1.0 0.0 54.25609 98.1871 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 54.25609 98.64539 moveto pgfstr save save [1.0 0.0 0.0 1.0 57.7759 96.9019 ] concat pgfs 0 setgray -596 432 a Fb(Real\(signal\))-596 432 y pgfr restore restore 54.25609 54.25609 moveto 83.84894 54.25609 moveto 83.84894 70.59998 70.59998 83.84894 54.25609 83.84894 curveto 37.91219 83.84894 24.66322 70.59998 24.66322 54.25609 curveto 24.66322 37.91219 37.91219 24.66322 54.25609 24.66322 curveto 70.59998 24.66322 83.84894 37.91219 83.84894 54.25609 curveto closepath 54.25609 54.25609 moveto pgfstr 79.85257 69.05252 moveto 89.71935 69.05252 moveto 89.71935 74.50185 85.3019 78.9193 79.85257 78.9193 curveto 74.40323 78.9193 69.98578 74.50185 69.98578 69.05252 curveto 69.98578 63.60318 74.40323 59.18573 79.85257 59.18573 curveto 85.3019 59.18573 89.71935 63.60318 89.71935 69.05252 curveto closepath 79.85257 69.05252 moveto pgfstr save 0.19925 pgfw 54.25609 54.25609 moveto 79.85257 69.05252 lineto 79.85257 78.91931 lineto pgfstr restore save /pgffc{0 setgray}def 79.85257 78.91931 moveto 80.84885 78.91931 moveto 80.84885 79.46954 80.4028 79.91559 79.85257 79.91559 curveto 79.30232 79.91559 78.8563 79.46954 78.8563 78.91931 curveto 78.8563 78.36908 79.30232 77.92303 79.85257 77.92303 curveto 80.4028 77.92303 80.84885 78.36908 80.84885 78.91931 curveto closepath 79.85257 78.91931 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore save 2.98883 pgfw 103.58255 54.25609 moveto 121.23137 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 121.23137 54.25609 ] concat save 2.39107 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.52684 4.70245 moveto -3.23293 2.93903 0.0 0.2939 0.8817 0.0 curveto 0.0 -0.2939 -3.23293 -2.93903 -3.52684 -4.70245 curveto pgfstr restore restore restore save [ 2.98883 2.98883 ] 0.0 setdash 0.3985 pgfw 54.25609 78.91931 moveto 147.97185 78.91931 lineto pgfstr restore 128.23825 54.25609 moveto 226.43289 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 226.43289 54.25609 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 226.89117 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 186.1893 45.50581 ] concat pgfs 0 setgray -596 432 a Fb(Time)22 b(\(sec\))-596 432 y pgfr restore restore 133.17542 9.86678 moveto 133.17542 98.1871 lineto pgfstr save [0.0 1.0 -1.0 0.0 133.17542 98.1871 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 133.17542 98.64539 moveto pgfstr save save [1.0 0.0 0.0 1.0 136.69524 96.9019 ] concat pgfs 0 setgray -596 432 a Fb(Real\(signal\))-596 432 y pgfr restore restore save /pgffc{0 setgray}def 147.97185 78.91931 moveto 148.96812 78.91931 moveto 148.96812 79.46954 148.5221 79.91559 147.97185 79.91559 curveto 147.42162 79.91559 146.97557 79.46954 146.97557 78.91931 curveto 146.97557 78.36908 147.42162 77.92303 147.97185 77.92303 curveto 148.5221 77.92303 148.96812 78.36908 148.96812 78.91931 curveto closepath 147.97185 78.91931 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore save 0.3985 pgfw 147.97185 54.25609 moveto 147.97185 78.91931 lineto pgfstr restore 147.97185 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 146.27678 47.52606 ] concat pgfs 0 setgray -596 432 a Fa(1)-596 432 y pgfr restore restore 162.7683 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 161.07321 47.52606 ] concat pgfs 0 setgray -596 432 a Fa(2)-596 432 y pgfr restore restore 177.56471 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 175.86963 47.52606 ] concat pgfs 0 setgray -596 432 a Fa(3)-596 432 y pgfr restore restore save 0.99628 pgfw 246.61725 0.0 moveto 246.61725 0.0 moveto 246.61725 123.30862 lineto 483.36772 123.30862 lineto 483.36772 0.0 lineto closepath 483.36772 123.30862 moveto pgfstr restore 249.08583 108.51219 moveto pgfstr save save [1.0 0.0 0.0 1.0 252.60565 112.03201 ] concat pgfs 0 setgray -596 432 a Fd(Time:)37 b(2sec)-596 432 y pgfr restore restore 256.48405 54.25609 moveto 344.80437 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 344.80437 54.25609 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 345.26265 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 343.85327 46.12158 ] concat pgfs 0 setgray -596 432 a Fc(i)-596 432 y pgfr restore restore 300.87335 9.86678 moveto 300.87335 98.1871 lineto pgfstr save [0.0 1.0 -1.0 0.0 300.87335 98.1871 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 300.87335 98.64539 moveto pgfstr save save [1.0 0.0 0.0 1.0 304.39317 96.9019 ] concat pgfs 0 setgray -596 432 a Fb(Real\(signal\))-596 432 y pgfr restore restore 300.87335 54.25609 moveto 330.4662 54.25609 moveto 330.4662 70.59998 317.21724 83.84894 300.87335 83.84894 curveto 284.52946 83.84894 271.2805 70.59998 271.2805 54.25609 curveto 271.2805 37.91219 284.52946 24.66322 300.87335 24.66322 curveto 317.21724 24.66322 330.4662 37.91219 330.4662 54.25609 curveto closepath 300.87335 54.25609 moveto pgfstr 315.66978 79.85257 moveto 325.53658 79.85257 moveto 325.53658 85.3019 321.11913 89.71935 315.66978 89.71935 curveto 310.22046 89.71935 305.80301 85.3019 305.80301 79.85257 curveto 305.80301 74.40323 310.22046 69.98578 315.66978 69.98578 curveto 321.11913 69.98578 325.53658 74.40323 325.53658 79.85257 curveto closepath 315.66978 79.85257 moveto pgfstr save 0.19925 pgfw 300.87335 54.25609 moveto 315.66978 79.85257 lineto 315.66978 69.99329 lineto pgfstr restore save /pgffc{0 setgray}def 315.66978 69.99329 moveto 316.66606 69.99329 moveto 316.66606 70.54353 316.22002 70.98956 315.66978 70.98956 curveto 315.11955 70.98956 314.67351 70.54353 314.67351 69.99329 curveto 314.67351 69.44305 315.11955 68.99701 315.66978 68.99701 curveto 316.22002 68.99701 316.66606 69.44305 316.66606 69.99329 curveto closepath 315.66978 69.99329 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore save 2.98883 pgfw 350.1998 54.25609 moveto 367.84863 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 367.84863 54.25609 ] concat save 2.39107 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.52684 4.70245 moveto -3.23293 2.93903 0.0 0.2939 0.8817 0.0 curveto 0.0 -0.2939 -3.23293 -2.93903 -3.52684 -4.70245 curveto pgfstr restore restore restore save [ 2.98883 2.98883 ] 0.0 setdash 0.3985 pgfw 300.87335 69.99329 moveto 409.38554 69.99329 lineto pgfstr restore 374.85551 54.25609 moveto 473.05017 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 473.05017 54.25609 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 473.50845 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 432.80656 45.50581 ] concat pgfs 0 setgray -596 432 a Fb(Time)22 b(\(sec\))-596 432 y pgfr restore restore 379.79268 9.86678 moveto 379.79268 98.1871 lineto pgfstr save [0.0 1.0 -1.0 0.0 379.79268 98.1871 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 379.79268 98.64539 moveto pgfstr save save [1.0 0.0 0.0 1.0 383.3125 96.9019 ] concat pgfs 0 setgray -596 432 a Fb(Real\(signal\))-596 432 y pgfr restore restore save /pgffc{0 setgray}def 394.58911 78.91931 moveto 395.58539 78.91931 moveto 395.58539 79.46954 395.13934 79.91559 394.58911 79.91559 curveto 394.03888 79.91559 393.59283 79.46954 393.59283 78.91931 curveto 393.59283 78.36908 394.03888 77.92303 394.58911 77.92303 curveto 395.13934 77.92303 395.58539 78.36908 395.58539 78.91931 curveto closepath 394.58911 78.91931 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore save /pgffc{0 setgray}def 409.38554 69.99329 moveto 410.38182 69.99329 moveto 410.38182 70.54353 409.93578 70.98956 409.38554 70.98956 curveto 408.83531 70.98956 408.38927 70.54353 408.38927 69.99329 curveto 408.38927 69.44305 408.83531 68.99701 409.38554 68.99701 curveto 409.93578 68.99701 410.38182 69.44305 410.38182 69.99329 curveto closepath 409.38554 69.99329 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore save 0.3985 pgfw 409.38554 54.25609 moveto 409.38554 69.99329 lineto pgfstr restore 394.58911 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 392.89403 47.52606 ] concat pgfs 0 setgray -596 432 a Fa(1)-596 432 y pgfr restore restore 409.38554 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 407.69046 47.52606 ] concat pgfs 0 setgray -596 432 a Fa(2)-596 432 y pgfr restore restore 424.18198 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 422.4869 47.52606 ] concat pgfs 0 setgray -596 432 a Fa(3)-596 432 y pgfr restore restore restore newpath restore pgfc eop end %%Trailer userdict /end-hook known{end-hook}if %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%EOF gnuastro-0.5/doc/gnuastro-figures/flatplane.txt0000644000175000017500000000004313217200075016713 00000000000000../gnuastro-figures//flatplane.eps gnuastro-0.5/doc/gnuastro-figures/flatplane.png0000644000175000017500000001450413217200075016667 00000000000000‰PNG  IHDRëd kГbKGDÿ‡Ì¿ pHYs––qFþðtIMEá 5cQH‹ xzTXtRaw profile type iccX…—m’d© Eÿ³ /O -Šðþ7àCVwO·Ý3c;+ˆÌz„®îéŸîé|êPIù}VÉ?>õë·¹ÚµŽÚµ×šÇ6VÍöIR¤iÓÜËÈ#wÿÓ™ñ v}ýpç´zþCþÇùKº mÒ¾ùòíꉃe­Ú?ÿ_/êT%BùûóõÍNéReÿñ|÷ïÏáü„ñëŸ?èÏÏÿaèçç‘6ÔÉÌ—«5í0³cè÷Ïÿd~úõÌß?µöò,&ÂûIú›„ÇUጚµ}‡F·ÞRoL"JoË\Æï£üw¦ÓÚþoMÿúùÛôë;úü–%>?Èš±‘‰ oØþyô×qhµåVý]‰DÌå»G¥ˆûßÕÒ÷ÏïæI¬ú9Z›ñ‡f¿ŸXÍÞ÷Öù™WæYÿ>ïc¨öoÈù‰Å?È’übñG¤ò3øÅ#Ã0T.¦Ú+ EKÒ2u“ÛþZÙYôvê,<x7Xó°'ó)yGS}E< Úă‰wÀaÀ0°0°x¸0°ë;$ƒ5Îgo =æ8,:`^¾ü¾ûã5LÃØäåý)ãšÆ0FäRƒ÷ J›ŒËQy±²^p¿`£‹…wÊ;¼.#x\Œ9x[ Ö‚§e m~àbq¾߇ïË÷å;X‹âl ‡†;ãP/ÂB;ÉTap4ª™ÁKv¯ÊCe!Ù«óæjL$Çuad³˜ «or2r}9"è´—þ–7à’Uò£ÚÆ.Ô#rƒwšðNñI/€ããŒ7ß6ÿ»æv†°Ü®çF¶…Âi™úa kçÞ'@HwÇãŽÁ>ú^ ‚wxÚ½§ÜˆÉƒI ÔNÅó £- ÜÇ̃£ 2€ÈÀ«±éqÆ lñƒ4þ8¢TÍÈO„쉬,ºÁžg±“eE8,Yn£Ðàœ¬)+˜Pv×vàŒÈT>íYÙY©1%кy~ .6Õ˜Pë¿‘'U0»ä9VÌ7O8dâî\ `ó?‹æÕ<£^xÆ1Lz6µl“ß Þ¸y¤lìb,X¥äűž- ±8Ò¢lXdh‹…š¬xyæBÝÐņ“¶P´›ºÛLÞû•ß~“A/@°®ì@Á‡gݶ|iöWf×1zÞ_E²O¥¶ò!.‡‰ÈgÂá7ñ¸ÀႾKö.ǺùÚ¦%_Bpï¥,ñ(8ó€T±ŠÝPãÈq_y¥J:Œ+œ_qÙ6nóüè[X(äÄà»|{J™^Ê"Zn¥ÜÉá´PW¥öQªôB锺Z©Î¸ù#ôÊ@× â0˜ö JSJ§ðz7Dz•>wéë@—=!‡RËhtBC ²YìTÆ>…S½j+tEX,âEfÙGy«(Ô ½•A¯aE×-`«hh™Cz™¼œs•¹bç7 ?”ÑLv1NjèžCcÒ˪«,B³T¡£[€F*‹€âxÙm—Í177žì³Êc P|ð­»8ñq÷âø@Z‡*>ú(ÌK+c·H¹xw‰Éµ^.€º×Jh·„ð›ç±£Ä]õC¥ÄžÂ«À<:H²#UàäÐl¿ˆ¦ßʪZ«Ö:F­“Ÿ+j=ÍYÞªpUmÖkóšj‹Ç–Q{?tŽÆíÚÏzÕU“‡0úáŒ@ÉëSsÆÔ×¼U¹“üâ‘v«ªTô8êvêlAólŽœ^í‰-F <¢{*lBñà mÌb£Eú¡ã€DjÝM e«›‰ ¢>jófÕåVÇ …3½ârTêaãsÁ% ¹ÝSÅ38\+5S9 \¾jX©ÁQ"`®6`/ŠoQ½gS@¹“>BT6ßQ¾¥V¥µjÞï™­AÎM£µ=[#e_é‘Z·Ûú™t2­ øyLú3¯mÄ¡845Q‚¿n“kˆEoúDüéÑ6Ko4 mNoÓçkV>I26²ÍÁºÃÌÒžGEY¢qâ¶X®ÕödTm_sŽä·µSk£Z8m0L»(ÒeÓ‹"Á$‰ü”L Yjq+ÊØ¨Ùþ(ò‘¡…BE/¥P*\¯{P%줇®‰êÈa§ísu*ü‘RFC )séÒk=¡¬Ý%6¢¤º‡`M$»SÈ}BFå˜ÓeN†¼h_z:Žô ü7ñÞÞxMýu’Ú}¯¤:³R?F2Ž÷Kpåv ð¥•´ÊIJÇyBa+±ý¨ª@ ¡ƒAa@0*—P§Zäa]ƒ€Þ±JcÙÏ¦ÊæÊAjWi•eƒ.yŒ¡T*žÆ‚SϘ¾‡Á2&á!yYÇbÙZŒcµmŒ‹ÍÆ€ÄüÈ8x{t¦qÜÔ4®ø¸û (/ Õ .¬Î8üË›âX%¢Õ¸ä à³tIC[úKºué×@[E~U„ß” P催‹f…-¨³Ìëò.5b¶Äâ!erô GPÙì¼ßø©â‹k+â~è1Î6¡VåÊ–ë ˆG“€ÓiÇzú–Kn|±¡ô$˜j^8BÙˆõBû×ÝÒÉdCç®Ä&½s©Àì\?i‚t7¡àº>™lu©MÚ† kq±$±49]áwÝÔ¼ª>1äOU¸ßPCúú× ^&Àt0]ãÒeu.»k¾–b¢Q³øD2LG‡4Mªý<¬Ï~)vµéŽ^t+á–õÎd1±8§dp§AÚføwR–i._©ŸÄpîðécðì@]‡5'bÞOrl}3½íÝÒBóYÖL†|@ÚËÐòW,—@9ôT“¢£NÆnŸ2$½FeÓˆƒÍî67ŽÕžð.›…‚iëj¸~¯0dМ9j„¡B†îÙ]´º-‚OhoÏLtŠ´ ôÎ0Y4…Ï@);UE™S€sÅ^´*`Pv^­‰LÚãÁ2Åhf|-DEY›2Û×t_N'x:½Z~ÑŽ‹ì?üâÑ~w;J’®k¥M²ËA°:Šï0}#öërBêÔ¨äÒö˜‹þ ¿Õ6ÄèæÆJ›ò>Üfà£m,†¥÷ÚK—ge»í×ðìCkË  q8-P~”4‚¦’V2_: Q‡–`™@õˆ¤.´ýЭ¾9hè\ýG øhÇçvG?ØËhP¦‹ä°…on±Xrâ(–Ãg‡ø}·Û¦€ÛÌÉ›¶­9‡¡ mq¸-Øþ 7‰8~@DýžqˆÖG,Ž=âp¦ ‹l 1y']gÅ&ö4¿ÜB|.Ú¯œ3p?´<'hbq³A.óæqçºãô7;'Û…».2r{8UÍçsÅ$]øâ$‘6`;=Ø?$R]Ò„\6ñ†Z/}ï=æt ó’×(_8}ô˜‰î{D¡_(ô2„¤X@IÑt¶†{Ï ‘ò’F£9™3­% ³¤X´ò[5È'…2‰ Å¡FnßqÑ”mDúí‘ÈK­Šµ IDATxÚíOh#×À“¦Çb)$ÐZ ¥[è¡ÌAΡ”Z-…-xa±öPCÙ ÷²† €·mTJÔ»e xO^²‡Š–ÀîöAÛƒM@ni±C†Üº]£9”´ì{顤ÓÃŒå[ÿF3šyOþ~†]YF#Y?}ï}ï{ï.‚0£äyp²>a8Ïg}‚úe–Ù5¶¹M‰<%÷vÖç$ C´F`”¨º·Á(±Ãm÷žñGˆÖJ#Z £¨± @‰¼{Xå ëS†cHßZN¯Wý€¼{9ë³Æá¹¬O@POj *QZDka,Œ2yvŒ¼‘Ïúl„áˆÖÂŒª‘ªàî°Œh­8¢µ0£Æë@•“që|¯Y.(Š¤Ì„¡xÃZ”yÈ»RfSÊQTG´F`ä)sàQWÒf Z ÂÌ!}kA˜9DkA˜9DkA˜9¤&\È#O8:›‚;)Uâ ÑZŠ‘7JS9p™*;,Ÿ»¾–õ+žDka8%ö}cÇx’ì ‰»Ë=ðÊQ…¤­…¡¸î \æJü+áCŸ–£ö0òH©KˆÖÂh–yŸðIÂG-÷‰ÕU‰ßI Z #0jl³êþ2¹ ~oýÜDO#Ry.ÄC2áÂP|©ï¥$²ÔF•»Fž#JÁÈlÔ(qÔŒ2÷\‰ÙñpåG~þPÃ¥æ_.“OàxO¼£°ƒÛ»6Ï>ë.äýŸPÎú•ëý#pa H ¸qgn%6zó¿±z‡]w¿gíñõ¬_»ÞˆÖÂÂR'Â:ôŽ×ëYäýŠË½âY¨!¢µÐ—)H µ“m”=ëež¹ßt `.¢µÐ‡iHm”ÓåáÀÛ#„RoÝ•#ÿÿê9Ñ…HˆÖÂ9¦©áˆÓª²2L 8ô›Ü'cÖë$þÜŒŒ¸ž•¥÷¤*7®ðzõíwŸU“=îS¾úé·¯<Þ¾ôüoüáYõ›×Þ¿ÿ¬zíw¾þì¼ßn\™ûÞÃõ¤Ÿ{†8zqŒõi2YåYí žVƒuî°2•c[4¹…Eh±‚ã?O‹Wé`baNé¹g†ÕÇhÉd µH­.Ó”ÀÁÂ$Ø8˜[ÚX¬PÈú P±¤Î@k‘Z]¦-õ0ÚBš }SêÔSf"µºd)5X"õ(Æ–:e­EjuÉVja$¤Nµ.R'ƒ…Ã1…€ˆÍÀ½è× ÄÂà#lºþ¥¶3–ÚЯv°%ŽG”:Å.‘zž`¹ÀØ“Ôñõ}D¥wKÛ¿© }üsË…—;´ø”¿AHê% àc!ðÜÓcP²ì.[\ãÇ;™QêÔ¢µH}‚…C1ð!½é«L½ëm,æüÌñ lZGMB¿æ÷éW‡Åbà¶&[(&Ä|Þñø.ùïB…‹Cß‹³´±èè¿.Cd©SÒZ¤†¥^ä5Y 5„ãÅ¡›ìñ8Æã£ö©;XCèK¨Ns˜Œú"Š‚Ã%¾È¹Ì‡8@ƒµnc±ÅÓ„Î%#&:•FøE’ÚÆÂ¢Ë1]ìÐj‘™f²G<©;½X?Ñe•À¿§Ì±ˆ ì±G'Ôe° F߸ |‡÷y™Çt"i'Ö»£IB´ž}©ƒñ¶EÛ×w®¯ÄIs“c:<ž0:¦‘ýn²˜(Fî¥;T9æC.û}6yýÐ5ñ¾fRfB©§>À5«R[´ir“*/Q\¿Â#îÐ`‘J ž&+˜H¡E!!­OÙ§A±× ñ°ýæüð×gs‹+ÀÖû9CÞ"à% ;84±¹9ôX 1±ÔSn„Ϫ԰Å1Ь„Ò_ébö&|tšãÔ çât‡:PÀÄøX`5`mÛ$wÙbwè×h‹5æY¡…ÊkŽM ©§ÚŸ©-:XT+Öhr‹-êI Jñ‰M—=,ºgÊç¹I›µ™w‹%àPÞË9tÈñˆPá%ÿq“”©Kê)6ÂgCê&K\b ‹b*£·ãÓaŽ^Êí8âcÕ Thð($µM³Oó|h <ŽÉ`‰¦Ÿ"³¨s‹·üR«7q“”©Sê©i=R,ðˆÇܧ¡ØÇ¡9BŸ ŠÔýéÒå5^b)¤w‡Ë¼1 =Çø [”i7Y!ÇiÎULrâ±¥žRßZ_©-Ú˜,ö~O£àb¶p¥¢QRfjK *x 5‹f …ôàc>æ74ù!ll,ºÞò¿±ia÷þ‚^Ñl!â{”) H=­õ”Ú¡E‹Å€Ôªâ`ÄŒ’×U]ê gαÅß{—ÆŸøG(ñ•ÃÄä/|DuNKgÃsº5ØJDê)h­§ÔM¶0Y‰Xœ˜wCYáÂØ‘H©ÃX8ló¿ÞïŸóWNTžÃôkÚÚl±È/àÌÔ9¼•Xõÿ¶ I¸ÖzJ ­Ìq’,;¡8Æ0è!õéì´.ÇrÛÏ÷yŽ7ùþ9Eß"Çÿr®w4¯þMy“:a­u•ŲÜð©÷rFF"õ¤¤pŽ9ŠC•z–zsû¼Z ›5ÿZ“÷ük;þ;Võ×HKPêDÇ­õ’ºÍ[ü^›íaSÇÂÁ便M,¿VÚìŪ~d-õp…£ØöWüš/`ð%¶xùÜ=ê¬ù×:¼Ê;Tü1uŸ•:A­u’ڡη&"Òt¥Ž¯p¼9éã̳i1‡©O,¶Ôg÷2MHk¤Þâ.&w4‹Ô“3Ý%‚§£ð¸Œî|h@L©25ŽÈ»«F‰æé[ë$u6w4ÄJŠä¤ŽÒN‹&÷S}ÆÄ‰ßü^vWe°êýFÞ=J Zë$58h0Б“Ju‡*Wuè;"‚ÔÆé~¢Ák«ä݇Æ6ewÀxîõØZë%õÅb<©uQ¸?–FÌÞR˜(R—Øç•ó;Œ{½jã36ÝM8¹Sk‘ZE~Î_æƒsRë­pšº®W±ùmlPv/÷½e™¼â‚QfŸy÷ –Ö"µš¼Áoùø?š1…ûáp)´Ì’&L²ðà6%®÷‰ØTý&ø:ëî `°ƒìN(º°{>b;¸·á¤g Ï÷ë£Ñ1R/ñÎ…H—-òצþ':]’@‹Å TaÒ…·)q½Ï ~ü6ÊTÙ„‰‹Gu” ®ûpÈ´ø€oñOxsêÏ-îø…"ÖxoaR©7( ›<0ÈS%ï¥&ê[ë*µMuæÇ¬Ó¬(kÒ`‰.÷1™ç8Özå†I¥ ïÝ^åejî+0Ñê(ºJ nQ×iŒÈ¤)u‡ ë/0øSeðzæc®”ž2Ÿ¸‡\î/µ±a샻ëRã¡w]d­õ•`^s"£~¤[û]¤‚íç 3È©·y5´–òĪ(ëWŒÀ:Æ»^â,rßZo©îë²JtdÒž¥UÀ›ú¸É«ÕpºN³´zlrhT©‚WûÖúK=»d3õ²Ž•I)ˆMU·é:Ó’0J”ÜП!‚Ö"µºd5Ÿz>³Šì–êË"„™¢Ôý»>›R×Eý*”ΕÔv†[Ê‹ÔÃ3e6›R{Ž×˜§©Ë.}Ènå“.éõ¬mš%”µ"u©ÇÔzV¥ööƒxÌ]æ5M¥e¹œQ…ýªöZ,1OWÏúõ ¤«o=»RqÐqvÖk”¥ó ¬pU§ôØ)™H=†ÖCê³4™Ke+Ûx̾ԚíG}–Œ¤™2»˜RìÑ$Ǧ²qb¥öö&=T¬i«t†RÐúâJí ÚtØcSI­gMê-öp¨`fTà’0J=´~q¥L nU¬I ,–E¦RÑZ¤îÇ6Pa13­t–ÚÛªÞÁ¦C%“é!)±Ôµ©‡ca3ˆ-öR‹â:K K8(R 0;±9LæRÐZ¤ŽJ‹N/Š›S-§ÔEêÇX~Tnè4!#. HÝWk‘zr,lœ€tMð·N/ŒµÑÌpÔ”ÚÓ×}ÍSdŽ"&³ÙQQBê>Z‹ÔIâ`aqŒƒC#ÐìÜâdðfü¦¨ RwB«•¶¨Þz¦…¡›û]‘úœÖ"uZ4ý¥~m`-çZ½êt3Ô{OGj§·'ô^hÇïf ´v1°f™ƒ5«=äè(#õ­Eêìéø¬{zfŠ[Ôù:/û¿³ðЖì§_¶¿¬GXR«w9˜ ðv‘.Pôt•-†õ”F!©Cå("µ TúF¿uV9]v²Øç>]ŽC¿;yÃxzšÌ®ƒ¯ðtÀ#.Pïx2”’:­EjuQ¡O- A1©{3Eju©G9©}­Eju©GA©á9‘ZeDjÅQRjxN¤V‘Zq•Œ§eòYŸ„ÐWv_¯¾ýî³>aG/Ä?Ètˆ¹m½0-ŒÛ¬ºŠFAm&؃K˜>"µÑZADj!¢µrˆÔB\DkÅ©…øˆÖJ!R I Z+„H-$ƒh­ "µ¢µ"ˆÔBrˆÖJ R I"Uf `”x"R Éñj‡ßTÿôf%tEXtdate:create2017-12-22T13:53:17+01:00Vû*%tEXtdate:modify2017-12-22T13:53:17+01:00'¦’¬ tEXtps:HiResBoundingBox235.5x48+0+0æ8Ñ×'tEXtps:LevelAdobeFont-1.0: CMMI10 003.002 5âF†IEND®B`‚gnuastro-0.5/doc/gnuastro-figures/flatplane.pdf0000644000175000017500000001417213217200075016655 00000000000000%PDF-1.5 %Çì¢ 8 0 obj <> stream xœåV»Ž\7 íõ†JO±ŒHJ”T&€aÀãé®f±6Oa§Hò÷>Ô½ÒÝEGk,3¤Hêðð¡ùqLþ·^®á§_9ÅO¿‡D=%í?i™ºFÍB¬¯AÄ: /Í—À½ª9–Ff™]CÙR¿Õ|¡sVj9JJ¤½!Þ¡)” œ()äY é!_ࡉ,ßXˆQÓ›SÞîpMÃ@{FàÎÔzYwLÙ=6‡Å†òˆð4 2<Î܃ȉ ÷·?XîÂ×À£¿âþq¹Æ_ÎÞc;u€8?†­ùFB½"J¥ Âùî_ÿ|RôZ’üñü.¼9‡÷á>J§Ö<Åýó#ÜWøK½%wjL) `çÜ(—¨¬TÛ‘ø”/¡ ¸/M±6bÍK^‰O k¥ZkœZ¥ÄÅÖS¹;Še±£œžçñwäÞϼ_œ±åB( ÆPÃ÷ŸK¡†¹a`m«Ä·“_“[]•`+jY÷\o4Ø ØŠ’WÔ€ÇIšÀvd˜g]n,±ÿ]Úâó¡@ûl—åÉvÄßewØ,‹àŠð4…Aö3ú|Š˜T?„J½&ÆÆzyȳih5Ë”5Æ2Ò&h[ØÇwøÿÍÇ.c0£4AÃØ6ˆQ*aÄÉ2¨¨è@È8¯CNÕsqƒVÆÜqÁ’ƒá|@þ²endstream endobj 9 0 obj 873 endobj 4 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /Metadata 17 0 R >> endobj 6 0 obj <>endobj 7 0 obj <>endobj 10 0 obj <>endobj 13 0 obj <> endobj 14 0 obj <> endobj 11 0 obj <> endobj 16 0 obj <> endobj 12 0 obj <> endobj 15 0 obj <>stream xœ%’{LSwÇïµ W×0]ÖE&»½›ÑɆïÃf¶8Â|n"DÄJ/¶Bi)ú¤¥¥ÛžÞ>(-­Ky´Jå1QÑ9²Ä|L·à’™-‹É¦[öÇ“åwÉõý뜓œ“ïçûÍÁ±¼eŽãåUU•Û¶.µøµ8_¼ŒG‚l‘^<•bˆó.çͽ´«ý:ª[…åḺÝá.Wk ZåCml(¡¶••í*¥¶oÝZFíQÑZeƒ¬…ª’1 Z%crC3uTÝ ¤µq·‚a4mÙ¢Óé6ËTm›ÕÚ3Ÿ””R:%£ ŽÐm´¶ƒ–SŸ«[ê€LES¯ð6¿*åj•¦¡µT•ZNk[4 %†aË÷hõ9‰aïaG±¬«À½XAΖ‡ áâ¿-‹ˆ>ý̳…‹vCuc|EG{Q¤aŸ¼³žµzízÂt…É4Œù3p &Ø,ׅ̊bp>j÷9¤ ׆è EÃñÇèÍ5(°œëˆ Å`#TÕ¬®Óº®>àÈ+pÍ%·xŸyyßɨ ,UÐs•XÌ÷$!`„"¸N!è_TJP z’žäòÕ]ƒèî³X Gÿü%z:'aÍN\„!n?×7Nö\`—æCé@,óÍp*ÜsaôŒÂ9«T®ö6h%LQ}:šœhºx|}­ZOv_?“=u —Û ¥å °„-\ÄçK…ÈÄ£äÍI ñnºƒí²TK ù»R±gH¶„raý° B [’ÐèÐÂ<a-j—N m/¥RÙéïÅ•‡Ç+©}øU¤ˆuG‰vI#ìçz9éøGÆ8?a?ÜlÜ×(PRS•BVN` #6L B†H·‡Í*mkSݬnæáä|ÈOö5NÊïñü6’ŒDìÀÚ=n‡Gz–ÚÛÖ„Ü”O…RÑ™°E¥®>½šâ7åÂþÞñF~µ$zˆÎ^³Íä4ÛI«»Ùmp´:4NÍIaß·ùTE%Ç»f¦n$î?•ö_ D!I\ošª)mÖÛ_ÅÄõÉôßÓs hÒÚZziû†#p‚Ø~_5wy<‘É–jkmñV%ÝRpÒo¼Ü1ˆ÷Ez#¹7"Æ4sÖT[3Óxïùó?Q~†,ä]K̨ñ*>ýHÄÇ?•ø b1—Ú=F²Ûët…°ö¹›œÃF²ºƒ‚Í0Õ’> E a•ð¾°aÓ­Ê_’³Gw¤aÙÄÙ›0CCýÙÄdì.pÄRd6¯»“%û ‡N¡aG“Ã\O !ý".qÀc6ÖyÚ¤¢¦óÖåÙ,z}è†tlîúÔ4âeN§Çéuåâ]dƒè³$¿e™“ø·xòˆ¯\Ü.Îáƒ^«ÍËÝäaÁ$ìpåÈŠ@(.‚ÒùݨÐÑÝìhên¶ž°ÑK×ã 9ŸßOr\hØÿ•¬A;ƒh=Z èmøõØ‚ ÂÚ’ƒþò øøwD¡’1úÖc÷í:ØÂÊÂ:á+QØžâË£ÑR¥– ²hÁØÊŸ^#WæíJŠWŒ„Äb ûO™M» endstream endobj 5 0 obj << /Limits [ (Doc-Start) (page.1) ] /Names [ (Doc-Start) 7 0 R (page.1) 6 0 R] >> endobj 17 0 obj <>stream dvips + GPL Ghostscript 9.22 GNU Astronomy Utilities, Gnuastro, manual, plots 2017-12-22T13:53:17+01:00 2017-12-22T13:53:17+01:00 LaTeX with hyperref package Plots for GNU Astronomy Utilities manual.Mohammad AkhlaghiUsed to make the plots for the manual endstream endobj 2 0 obj <>endobj xref 0 18 0000000000 65535 f 0000001197 00000 n 0000005399 00000 n 0000001138 00000 n 0000000977 00000 n 0000003517 00000 n 0000001347 00000 n 0000001407 00000 n 0000000015 00000 n 0000000958 00000 n 0000001470 00000 n 0000001576 00000 n 0000002000 00000 n 0000001512 00000 n 0000001544 00000 n 0000002224 00000 n 0000001915 00000 n 0000003614 00000 n trailer << /Size 18 /Root 1 0 R /Info 2 0 R /ID [<658ABE77718AFAFA1E2C43AD7B90F435><658ABE77718AFAFA1E2C43AD7B90F435>] >> startxref 5753 %%EOF gnuastro-0.5/doc/gnuastro-figures/flatplane.eps0000644000175000017500000011406713217200075016677 00000000000000%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 0 0 236 48 %%HiResBoundingBox: 0.000000 0.000000 235.500000 48.000000 %%Creator: dvips(k) 5.997 Copyright 2017 Radical Eye Software %%Title: ./tikz/all-figure2.dvi %%CreationDate: Fri Dec 22 12:53:16 2017 %%PageOrder: Ascend %%DocumentFonts: CMMI10 %%EndComments % EPSF created by ps2eps 1.68 %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o ./tikz/all-figure2.ps ./tikz/all-figure2.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2017.12.22:1353 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup} ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N /erasepage{}N/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{ count ocount sub{pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def/HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def /pgfH{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfA} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} bind def /pgfV{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfA} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind def} bind def /pgfA{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div pgfheight 9 index 9 index 9 index 14 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfdir stroke 4 -1 roll 7 index add 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll .5 sub } repeat mark 15 1 roll cleartomark exch pop }bind def /pgfR1{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfR} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor fill pop}bind def /pgfR{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 8 index 8 index 8 index 13 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll 4 index add 4 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch pop }bind def /pgfsc{}bind def/pgffc{}bind def/pgfstr{stroke}bind def/pgffill{fill}bind def/pgfeofill{eofill}bind def/pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}bind def/pgfw{setlinewidth}bind def/pgfs{save pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}bind def/pgfr{pgfsd restore}bind def userdict begin/pgfo{pgfsd /pgfx currentpoint /pgfy exch def def @beginspecial}bind def /pgfc{newpath @endspecial pgfpd}bind def /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}bind def/pgfpd{/delta globaldict /pgfdelta get def}bind def /.setopacityalpha where {pop} {/.setopacityalpha{pop}def} ifelse /.pgfsetfillopacityalpha{/pgffoa exch def /pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def}bind def /.pgfsetstrokeopacityalpha{/pgfsoa exch def /pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def}bind def /pgffoa 1 def /pgfsoa 1 def end /pgf1{gsave exec 1.0 pgfw 2.00002 0.0 moveto -6.00006 4.00005 lineto -3.00003 0.0 lineto -6.00006 -4.00005 lineto pgffill grestore} bind def /pgf2{gsave exec 1.0 pgfw 0.8 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.00003 4.00005 moveto -2.75002 2.50002 0.0 0.24998 0.75 0.0 curveto 0.0 -0.24998 -2.75002 -2.50002 -3.00003 -4.00005 curveto pgfstr grestore} bind def /pgf3{gsave exec 1.0 pgfw [ ] 0.0 setdash 0.0 -5.00005 moveto 0.0 5.00005 lineto pgfstr grestore} bind def /pgf4{gsave exec 1.0 pgfw [ ] 0.0 setdash -3.00003 -5.00005 moveto 0.0 -5.00005 lineto 0.0 5.00005 lineto -3.00003 5.00005 lineto pgfstr grestore} bind def /pgf5{gsave exec 1.0 pgfw [ ] 0.0 setdash -2.00002 -5.00005 moveto 1.0 -3.00003 1.0 3.00003 -2.00002 5.00005 curveto pgfstr grestore} bind def /pgf6{gsave exec 1.0 pgfw [ ] 0.0 setdash -4.50003 -5.00005 moveto 0.49998 0.0 lineto -4.50003 5.00005 lineto pgfstr grestore} bind def /pgf7{gsave exec 1.0 pgfw -2.50002 0.0 translate [ ] 0.0 setdash 3.00003 0.0 moveto 3.00003 1.65689 1.65689 3.00003 0.0 3.00003 curveto -1.65689 3.00003 -3.00003 1.65689 -3.00003 0.0 curveto -3.00003 -1.65689 -1.65689 -3.00003 0.0 -3.00003 curveto 1.65689 -3.00003 3.00003 -1.65689 3.00003 0.0 curveto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def /pgf8{gsave exec 1.0 pgfw [ ] 0.0 setdash 1.0 0.0 moveto -5.00005 3.00003 lineto -11.00012 0.0 lineto -5.00005 -3.00003 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def @fedspecial end %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 30 /phi put dup 65 /A put dup 100 /d put dup 114 /r put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A90B8A9EE5C613CDB822F07B 115D4C174FB7945535F2F9C2875C9675143B8D98DEFD3898170FBCB19B4C29CE 1E6883E0F68B5D42751BD7AD09E3EB745F0A6338BA2148B769B5E1EB21109414 C1615EC1A1FEAD5831938F74E26E1F6BF51136E5C76F823D29D35078412923DB B3A32176ED7935058ED16528D28E50E37BBEB1D1554503645DD6809FA22A0DC3 112E7888A499450162B7373CC8855953B351E8873A4D7DCC40EEEE5A8A2D00E0 EDD8CFE7153824BF94833ABE10FA64768E457D5395519937705DAD2FFC5E71D4 521F01213B7DF82426867DE914CC9866E428F614F18078B4367187426E2260AA AD0175A79ECA5F533693C732411F26E3C4BB6EC72B16FFBD0BA30BA59F263FF9 6CD42386C234A9C45A4B00FD43A3D08956635864E8D040D8A9292428B9368284 5A1953EAD96D706002B26699A01CC575B9BEFECED97B275242FC83C18C515E2E 66E442E3B2BA22A04266DBF485B316D2E3853D0A9DF4D3C30964AABA09D5E6F7 85A9C221F860E8A7A6D07A9752C312EAFD9F8B4714F8DB62963E29043C6AF1E4 BA7DE78F32595520AB046D9B8E281569FC78C6F4D0ABBD8791CF0C51054CF345 C534F3BEEF1649DA09B5EE666A33D342B70E24E6B3A3A9D6931380807DD0B0E1 00CDB6EBE68584E732665112A462DDE9B389B54A9894857AB44188897585385A BE55FB11BFB15CFC3A6FC5CE7896CA962E0F043F13051A86E7C027B5B7DB2E96 D2D332E5179C1D425E76CFF47864584BC7D5959CF12C0ED8A482D037DFF25369 A322926FEBF25CACC6437E447259D9DEA440BEDA630F26F5DD390DF2157AE7B6 5B1B2A2E9E77F08AB430265929CF43DC43ACFB94242788D56CC959E5FF791C71 0AB58E3938730F3F7E73982A57A931E6A629F642BA838B0F74EBE1C1F2A5C41F B144CB49F1797D8D9C504FEE14DFC35EC4AA763A5A54D69FD8BA39737BD84820 0068AAC8310C17D11DEECA8176D4CF4C31056EC9740B66D0255CBB4DBFB442BA 31D5C658325AD9D8D39687C6CF6FD79A23E9920769DAA49600CC3AD5033FF0AE 2FBE473AE47612F8B3AC4C36329DAAD4153033C4287BB9BA09F1C667796D7ECE 10F4D324E962AD72B0D8403D2D17FA8E24ECD787C0824B155F68C3E2F2A8A7CE 1EA6823F854AADBF82DB395D570BD3A76CA0AB44EAA06D67FCE86A740BA2E97E 8867D17F26F42D7AC31E8B4A0127DC94B9A7E758F5BBBBC479CC1C1D694C5733 FC94285448097300C593671CC4C604DE489F780DB50519183AFE51105AFE03C7 D941513AAC552608150FA94B3112B5FE9668EF9BD45D5B03714FB546C53FE2A1 FC24AAA118D2CBB797BDB8C5182AFE1F8A0E3219467544BAC2A79055DFC68CAB A1DC90A26278D0B047E61498F2385FAA72FF59BD5A31C70CABA62A60B4FD4564 5257B2CE76A648DDCD3624A801D435144DAFAEFAA97C45C73698727521A5186F 5C0453933F95526E95300F8A1015F54CEFA9F0E4B2D010EA9706E14087A20214 071F1AA5360EA8EAD2908CBA3FD3A288436F0FD3306BEE502EF2972719A4588B C42564F283B52B2989223812A6D661AE2F8D7914991CBEBD08AF92EA3A9C6471 00FB4A9FF636E88CF1CA05FA4382C963B69A3F1BBAE80F9336006868C8C8A841 C78F664D47DB155620954164BA2630EC80B4C49945AEA0936AEA9547C6676382 E5017C64E743F193C08D4BFE6CA13954DA42E42034E0E4DE12E984F346BCF804 1FCEE1AF2D0AE264DF949ABD543CB61114D2EBD7BF992C75FABA33FABAE07FAE BF94997747C24D709CC1E62C2447FA9C7074C938DB7FE88DAB0310DCB5C7DC5A 80AB7B9C9BDD090AFC0DC7B8213D06DF771F8A11C2F1226220A50E0F15D617AF 5BD298ECE88A6A631FF8DD658AC72E48883CE3697C8900EC89CA9BCBF3D2467E CA5916AC42EB7517B5F7562BB592D7A8437A4FB6B52578F546FF828D5F8EADA6 75C01574F3B4046C0CB512622CADB66144D90E091FAFB4E48B22FE16C7DB8CD6 32AA344352019ABA02989CF7AFD8E1001D8DCC44A38187328E558F1F171BD1D9 DCD0CECF35A08311B8463A9A749F6C3F761A74BA80A96EE08E1055A65EAB3656 17DEEAC1CA356DEE81FE0F8CF82FB2BDC98D6D17FD6ABA4DACCECADC939D7EE0 874B808DDF116DB4952226EEDB79EFB4A8844BEB29772DC66A799FD566DA587C 5F96702CF7C9334D3DC4F5C97C311C4D26761BC7E3D23D2151047AF82C14DDF6 8EADA13CCF22AC304D10507DCEABC6EB60C8D3D75719F78101460BE0EF313A2B 9CD1988106 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if TeXDict begin 15725327 3355777 1000 600 600 (./tikz/all-figure2.dvi) @start /Fa 134[41 47 5[37 13[43 34[62 34[49 30[{}6 83.022 /CMMI10 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin % dvips-unknown statusdict /setpageparams known { hsize vsize 0 1 statusdict begin { setpageparams } stopped end } { true } ifelse { statusdict /setpage known { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title (Plots for GNU Astronomy Utilities manual.)/Subject (Used to make the plots for the manual)/Creator (LaTeX with hyperref package)/Author (Mohammad Akhlaghi)/Keywords (GNU Astronomy Utilities, Gnuastro, manual, plots) /DOCINFO pdfmark end 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 0 TeXcolorgray -183 -377 a SDict begin H.S end -183 -377 a -183 -377 a SDict begin H.R end -183 -377 a -183 -377 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end -183 -377 a Black 0 TeXcolorgray -600 -175 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end -600 -175 a -600 -175 a SDict begin [ {Catalog}<<>> /PUT pdfmark end -600 -175 a -600 -175 a SDict begin H.S end -600 -175 a -600 -175 a SDict begin 12 H.A end -600 -175 a -600 -175 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end -600 -175 a 228 -342 a 228 -342 a 228 -342 a pgfo save 0 setgray 0.3985 pgfw save restore save save /pgffc{0.9 setgray}def -70.867 14.17339 moveto 127.56064 14.17339 lineto 99.21384 -14.1734 lineto -99.21382 -14.1734 lineto closepath gsave pgffc pgffill grestore newpath restore 14.17339 0.0 moveto 15.02376 0.0 moveto 15.02376 0.46964 14.64304 0.85036 14.17339 0.85036 curveto 13.70374 0.85036 13.32303 0.46964 13.32303 0.0 curveto 13.32303 -0.46964 13.70374 -0.85036 14.17339 -0.85036 curveto 14.64304 -0.85036 15.02376 -0.46964 15.02376 0.0 curveto closepath 14.17339 0.0 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath 14.17339 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 3.18149 3.5198 ] concat pgfs 0 setgray 228 -342 a Fa(A)228 -342 y pgfr restore restore save [ 2.98883 2.98883 ] 0.0 setdash 14.17339 0.0 moveto 70.867 0.0 moveto 70.867 6.26218 45.48482 11.33855 14.17339 11.33855 curveto -17.13802 11.33855 -42.52022 6.26218 -42.52022 0.0 curveto -42.52022 -6.26218 -17.13802 -11.33855 14.17339 -11.33855 curveto 45.48482 -11.33855 70.867 -6.26218 70.867 0.0 curveto closepath 14.17339 0.0 moveto pgfstr restore 14.17339 0.0 moveto 65.19774 5.1022 lineto pgfstr save save [1.0 0.0 0.0 1.0 37.29979 -5.25822 ] concat pgfs 0 setgray 228 -342 a Fa(r)228 -342 y pgfr restore restore 65.19774 5.1022 moveto 66.61516 5.1022 moveto 66.61516 5.88503 65.98056 6.51962 65.19774 6.51962 curveto 64.41492 6.51962 63.78032 5.88503 63.78032 5.1022 curveto 63.78032 4.31938 64.41492 3.68478 65.19774 3.68478 curveto 65.98056 3.68478 66.61516 4.31938 66.61516 5.1022 curveto closepath 65.19774 5.1022 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath save 0.79701 pgfw 65.19774 5.1022 moveto 73.00339 6.40321 lineto pgfstr save [0.98744 0.16458 -0.16458 0.98744 73.00337 6.40321 ] concat save 0.6376 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.55415 2.0722 moveto -1.42464 1.29512 0.0 0.1295 0.38852 0.0 curveto 0.0 -0.1295 -1.42464 -1.29512 -1.55415 -2.0722 curveto pgfstr restore restore save save [0.98482 0.17365 -0.17365 0.98482 73.71306 3.04996 ] concat pgfs 0 setgray 228 -342 a Fa(dr)228 -342 y pgfr restore restore restore save 0.79701 pgfw 65.19774 5.1022 moveto 62.6561 10.6935 lineto pgfstr save [-0.41454 0.91193 -0.91193 -0.41454 62.65611 10.69348 ] concat save 0.6376 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.55415 2.0722 moveto -1.42464 1.29512 0.0 0.1295 0.38852 0.0 curveto 0.0 -0.1295 -1.42464 -1.29512 -1.55415 -2.0722 curveto pgfstr restore restore save save [1.0 0.0 0.0 1.0 48.9396 13.87665 ] concat pgfs 0 setgray 228 -342 a Fa(d\036)228 -342 y pgfr restore restore restore save 0.3985 pgfw 33.69203 19.51862 moveto -5.66927 -19.84267 lineto pgfstr save [0.7071 0.70709 -0.70709 0.7071 33.69203 19.51862 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore restore save 0.3985 pgfw -99.21382 0.0 moveto 127.10236 0.0 lineto pgfstr save [1.0 0.0 0.0 1.0 127.10236 0.0 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore restore 34.01608 19.84267 moveto pgfstr save save [1.0 0.0 0.0 1.0 31.16908 23.36249 ] concat pgfs 0 setgray 228 -342 a Fa(x)228 -342 y pgfr restore restore 127.56062 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 131.08044 -1.17615 ] concat pgfs 0 setgray 228 -342 a Fa(y)228 -342 y pgfr restore restore restore newpath restore pgfc eop end %%Trailer userdict /end-hook known{end-hook}if %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%EOF gnuastro-0.5/doc/gnuastro-figures/epicycles.txt0000644000175000017500000000004313217200075016725 00000000000000../gnuastro-figures//epicycles.png gnuastro-0.5/doc/gnuastro-figures/epicycles.png0000644000175000017500000230111313003420334016671 00000000000000‰PNG  IHDRVôÖ¢väbKGDÿÿÿ ½§“ pHYs  šœtIMEßkù9~iTXtCommentCreated with GIMPd.e IDATxÚì½i¬%é}Þ÷{ת:˽Ý=Ý3MRÃá*Š”ÄH"ER€-ÙŽ$ëƒ ‘¥D‰Vk Hv$ØLL9†>$AD2`0Äß‚,fÀ0¦,ÁFœE2'Ô-”(î”gã,=}ï=çTÕ»æÃÿ=Õ#¶’ø¡`0Ý}—S§ê­ºÝ¿÷ù?úÌoüTíûÐG¬uxï)¬µxïH)s<žÈ9Ó÷=Þ[JMcÐZqssÅ48gÑJX×Ó÷=¥Æq¤”B)…Z+ðû¿¿sƺ®£”DΉÝv º’Räx< 5ôC9³ß P+󨵠”"¥„R c µV¬µäœ™ÆD 㛡GéLc41FjkJi†ÍŽãxâúúß9jLT2ÆJ C”®ÔZ¹9œØ w(µÓ„1š~p@!ƈ֎yíqv çL­•yžqΡµ4ÆX¬‘ßçœ !RkÅ9‹Òr¾”RäœÇ#ÎY¬5¤$Ç7 F[´v”9grΔRÚõKì÷{j­ÄQJQkEkRjùþµV”R(¥ˆ1._/Ç•(%c­&—„ÖŠ”"777ôýÀf¸àp3Bäþë^G‰‘뫣麎f¬3xï™ç k¤8çä\ö[Œ±Gj…ÝnÏÍÍ Þ÷cÈ9“R†*káü^6› )%‡1F6› »ÝŽãñˆ1ã:²RœŽGº®Ã9GŒqY‡¯^?}?`LO ‘”1N¤4ã¼ÃZÃÕÕ C¿ãb‹2!LhɹbŒÁÚ£ (UÖr­q>a l7[y±àœ¬;…ÃC3s1Fᜣ”ŒÎ;ºÍ-j9Þ¼D.Údœ×˵O3J)†aƒ*=Z›vÜT!¥€µ–ÍfÇÇWPµ®ÃŒíéü€59C ™JFkˆéHˆ'ºÎã(”9âØ®›!«ÊáæÄnwÖSÌ8Û3l6”Z)b´A)GŠ ”¦ï!L¤<¡TÁzƒ·•xs ¢±®ÃêŽ\-9ƒóUi´Ö”Z q"‡bÃþÖ%§ãW_æÖåkÔ²–© k%e231”,çÝûPÌóŒwPË}g]¥¨µdŒ‘{·VCN•ZÖj”*¤AÉ}T+Ä1Æà¼GiM-…’åyÓ %%æ9°Ù<*Š_!—Œç¶(.8]G†ýæãŸÿÂ'xâ5·Ø]z”‚Z4nû]¬ZµjÕªU«V­ZµjÕªU«þèeþâŸÿ?Ukešæ©@k@­…œ„ÖZ8F 6àS˜¦‘”Rƒ ¥N˜ÃÌÊTrÎh­ñÞaŒ–0ƒ¬°0Ï!*­ú ,Xk°Zà ÐÀŸ|ïyžDid)% ’bn Øs$ưÀC‹£í4SÎÄpÖ¶ÓT)%æ‰R )DJÍXk±Ö“t}RPJn R¡”»’ÆXœõ(¥œ´ô}ßડäÒ q¥”ºÀL­5•GpÓƒ1º½¶*T0Æ ´"ŲœË”Rƒ³k-óÎÎgç,ÎÙv^ÆÆ˜çD²QŠ¢4U™åüɺs‹[µ”²@æÝ}‚RŠ‚¶Š8Žãˆµ†‹‹ÃÐ3±!ï‚5–Ü~§¨r~r¦·XÛ“ìLòcŒ„ùÀn»çòò¥ !|sÅB&åØ iBw=ºz¦ñšš"Jk¬ñ¤š°Öàý Ð4ŸÜ—Ím*Fkª1ÄȹRK]Þo®×÷(4JÕGìRF³cç1L\__q1lú U+œï˜¦€Ò”AUƒ1ŠZÅy=ŠŽê 5'´×{œQ²ŽPX#.ÔL¡b¨U£Î÷’2¨åA |© Ž:C‰r¼Á;Kßð’@XG¦¹* K×YR:¯ŸÜî½@× ”’ÐÊ`œ¥¦Ê8Oìv»æ~Wdµdj y®ÍÉ.ÔZq[k !4G¼ù}©9íÒ@iÿÑî/¹&FEP‰ù¨ú­g<žÈE¡´ÅX·þÔZµjÕªU«V­ZµjÕªU«¾Dd~ôGþøOmè{NIÆVs—¢8²t§g÷j%׈Vâ0UÅeZ+…Ò cus„*úÞ7  aÂ:ËÅÅm1DN§©9e¼Vkµ¸5¾i”ÝÐy¨­+9‹+Õ:ÝÀj!—$îVg0å‚÷?cÇã‘Ârì9W´¶íÐN TŒÞ·±îœ°ÖÒyÒg­ÂO­ P ›¡E)T@޿¢”] ÊÙõ{¤)e”Ö˜æz˜išXŽ_àij®JÝFŽa¹kÇãiáçhè3 Ãâæ†­9´¶t¾C¡I)£µA¡Œ#×TØ\Óš¡R¨E-€:ÅÌEŽ¥´H(®UÕ¾Ÿ8¬c „0ƒª8çÑÆŠS°Î¡£T0Ö¡dŒ9J¢Pq®£”È&”e5ãrE&N'øûýŽív‹Òrþ½(¥2ž&ÉÕŠS‹4H ÄUéT`ž)Eö[\׿™ñ4Š£Ùiâ\H9£Tm#ÿ 0- T¡5Ëæ…ÖæcJ8×£ŠÀñh(E·ÎYŒV”†JE1 =¥žÝ¸šqˆÞuŽœ+a–ìbçP¥È)PsiŽÚÊ|#Ï­5VCI ªÁYGªc F;J­¤¶þ$6"a¬Âh)ƇÄùZR1ädZÂè‚ÑèO§¹(¶›µ²¸³ÏÀ|ž§vBÎ_­Õm]œ]õœnщ’3UeJ±¤$Ÿg´ÿ}k©”‚V ÝuôÍímÚŸ—Äõ^3ÖÈó4ä€ë%~m))Ɖ‚Çû J{T{έZµjÕªU«V­ZµjÕªU«¾Àj¥b!‹½uë1Fœs2Îmì26\½[ ŸªBÎi)´zu’ŒñŠƒ0„@Œ®å_žGËa@aÍy<ÜP«mãЕ³Œ­;gÅ}h5ÓxÄ»@ÀóH»sŽívËÍÍ §Ó‰Íf‹3VJf(œÆ#6Êøø8Žâ@Óµ‚Ö‰+Ê©Åqv~?!H¤n@¶¦º@ÏZ$v FqÞÖª1Æ¡”d‡ž]jµF@ ŸÎF\³âP=ö?Š' 9iÕ’*cäç|SÓ gyÕñÎc–Ò°óŸ{ï‰12Žã#8œqÎì/öh­™ç¹ezN§Ó2*~myýˆ1ªA¨¼”õxßãý@Œ¹ExÂ<7çn¥ë:¬µ-C•%Ö`q;Ç‘ívC) cZ¯6”R›sµ§kÉÆTJIÖfËÊDAŒÓI zJ‰a3,Çn¬Ä]œÏû9þâ ÏkUÑF2r%o5-?³€äJ×ù–éš êæè=qùxßwí8b,Ä03ÏòßíÛw¹¸{©BwdQXëQªPÊÄÕÕ———l·ާ´»KÉÓ5½ïPbžãx@Ýœåçs] ܺuKÀª²ãÉiÞõäTÛƒä«J©k±•Zd z'ëÆ™ŒâáÃk´.\Þ~Œ¹h´‘ÜU(Ä ‘}çÑÆæyÞ›í€6=1œ3-!¹ØìPÎcRakÎ÷w&¶œß¨*‡ÃCÒé5Ìt}OÉ¥eñz¬±Íq-à´Tq_+Ôr­=?×Â’Å zYýಸªÏùÓΉ“6å#9²ÊòœSŠªåH[k—È›3ÚZrŒä7‘KlÎú -;U)Ëx¸ÂjÒk;¶·oC¬  »vý¹µjÕªU«V­ZµjÕªU«V}IÈü¹ïùºŸ’ò#Éíûžq<‰£­µÂ—’˜|”•™sZÆÙ¥ÈJÜ­µÂ<ÏÐÆ¹^í÷û%7`'œ³\^ÞZ`$°Œá ”ôܹs{‰ðÞ¡j!4m[¤w $òæCnà¬ÔÒœ«e%f5 Øï.)¥p8Ø_ìðYËrëÆ–ozvbž³o§iÂÃv»%¥´ik¥•>çG€ö Ïy¬’E+€¸ï<Ó4cŒj%YŠaØÉqÅLÎçz¼ë˜¦c‹oÐ œÑâÎÇZ®&¦Øòtå¼*%¸ë:¼ï–÷5M3!D¬é¨¹2ÏayÓ(ëÐË0l$^¢²ŒÛŸ¯ý0 Ëq¼Îk­)9á¼kð8‘³8—[1&†aƒÖ0M§¥Mi°îQá–VÒ8ß÷”2Ð[ާé,Ú8jÕP*9CˆßugÉ¥¢­%¤ÈÅÅL¥ €3å‚÷=Ê”¶ *+œëp£ÖŒïUUNã‰\+ÃfKAÎCU–\ ëœ8F¶Û9e¬uLÓ¼¸¦«¥5‡Ã }?Èõõž¤z{×Ñ [R¬Xë1ÖBà¿üÛ›ižùŠ/3ó4á·[Ò4Q•8Ï©Š1$Œë[WAS ¨ª˜&yÈfKfè{ŒQÄy”|åÙov ý¥Z¨–aØÓõhÕ“Š%E©–ÎËûȱrZ6CÎå|ÖZ$æ¹´ÈOnkZ ¿Ä£„ùDiºÆh|ס•[ÎÙ9ú¼žæqdž¦vËfŠÜ¿ÆHüHJ¹mî(Bœå+JÜ«ªJŒ öÍëO®U«V­ZµjÕªU«V­ZµêK@ööíÛ€¸éªI)/ÿ°?ë À¼?—©¼¡(rʤ˜©¹Ðõžó¹¼¼Le//ï´B™J×”z·”ǦsŽyž—ŒÎyžÑµE¥$”Vø¤MJ­4}'cãg'¦ŒÅb ÔR¸sçã8q¼9b]ÇÕÕÞwܽ{—q:cdӌӥ`š&rJ¥Ð¦9Kbè7XçI)Ë8t˜Q(ú¡cšÊ’Ï)Y£ÝRf£µf³HI€€éºo圼”øW-i¥ˆ±ó¼€Âínǃ—_^ܘçüPïýò}µÖ¿Ïµ9ôCsì=Í?ÍùÎö j;ß“òÄ4Mt­èËVzë¥T¶ÛRvÖŠÁr¡ÔDßõ”’˜%9´ïº%â@»dZNÓ̽{Sy ô݆dó^U<•é:÷âœqªŽãHÉc-Úø%"¢ÖÊÅÅÅqŽA8çúÊ9)Kvè¾õÝ–Óx ç,ãûÆR«}N'J±€Œ—ç\軡A3ÉUJQjÅxÏvÛBdšƒ8-]G©Rµ„VÌsÄûž’+¹dŒ6Í íÄAšÕÖk©¤š–B0ÉÝ•ñt…¢dú)VbÌH̨¢äŒÖ–3Ö÷P+wn3O\ß\3´‚³ívë:Æy棿ð‹( ïüš¯á‰×½ž›WnÄ¥êj)üøÿ(Ÿüä‹|ûw~'ÓéúÃÕ5ZC-¥eõ*úaC)â´-EcL‡¥EHèŠqRskE œ'Æã‰~ð<þš7Èh|Uø¶¡Œ!É=6ºC+(YR\§d?‹‹YÀ¦sž&É7V†TaŽP-JK,I­…'æy–ÜTß6V”mnÿˆ÷Ýrß7&Œ‘R2YÇÓ«ŠàjË\PÚ‘óQ ºjÛĪ…¾W ç4¡tEW…îþÙô”WWW‹[yÕªU«V­ZõG#c òï¬ÿ©Mõ­ZµjÕªU«þ(å½çâââŸV§V=WZ-#Þgp*“±Y{.¢i9‹gøéœ‡ !ȸ{H0ì÷›0œŽ'†aXœ°òõÎ*´v”"DºÔ’Ãy<ŽâTURÖÔuÓ)·úŒL]kj…AcÈ9’¢|ŽÀ_%™—%-àuž°Ö°Û_¢Èá\Çõá!©¯*¾ÒZñØcI¶b‘ñ_`ɜÑñH©2 ¶ÛmszªÖ¶^QºJášý~OΙëë@ÓõaŽh­ an®Q½Œ±+UØ-Q«5ªsËq\=|(ãö͉kŒY ô9[ô<Ö_k%§ó˜}+Ùñ~¹öñ<²œ ¥ÔeÄý bÔ —¬ÖæJÕ ²¢rv ?¯¯Š@9§¥,*çÌ~¿_ ¯ga'‡ûýL =!ÎUùšÝîku+]“Òª®ë˜ç¸”aí÷·( ÚŸAn­uqŸÏß9úÁ9Ç8†=` e Ë{Rh\˵m3@Ñ÷¦•‡É½á}ËØ4rýí¡r.Ĝк¾G‹Ju¹®9ËšWTæpÀãñ›ž2Í€Á9)2ʨ–ª$ß³´ÜOÉßµ-«¶à»Z*µj´vÔ©E~mM¶ã4‡Ã‘Ýy:±Ûìényª5ô݆0È>8ðóÿçùÜç>Íßøþ›ÿöƒP _ýU_Ë—½þIbŒü¥÷ÿ‡¼ï}ïà‡~øùßÿÑ/ñ]ßû]Œ¯¼D,™Çn=ÆáæŠíí[”˜ˆS¤»¼ÍÍÕ¹xüµL§º'å mì^Ѳs» i>1™Ýn/Ù²º‡¤´O¤Ä5lÅx´îñ"™\Àh‡Q´dœæÔžõQF3 Ôæ\ú­ùÉO²ßïן€«V­ZµjÕ‘Îñ]ïz×»þ}ýÇùüç?Ïn·[OæªU«V­ZõG¤yž†w¼ãÿ|°z<Øíö­ÐFFœC˜ÑéìðLĘ[ z¦b›3Î#ôZë¥^\‘ç`ž&¨ ­ 7׌1¤”ÐÚTR†0KFç« ¨jÍÔ*Àí SJԒȵ•ÙTqë)¥Ér®ä,NVçyΜNssôUPç\S0 Œ”\±¶C!Ðežf>ò‘ŸãµO>Î[¿üÍÔZӉͶ'¥¸ä,–”)$qujÍ4Ÿ@i|gè{‹1¶Ò €¶fb’È‚œ+½ßr8ÑÔ£°³Ã-ƸD'ˆÛÖ-ÎGç|7/ÒâÞܳµÖ%ëö Ë_=Zv¼Ê(2t]Çé4µ1z€ÌÜ20÷û}Ë}Í žVœ3k—ßùG%<¥BÑTL»6ɵV‹ 5çLjy¹ã05€*`q§æ&¥9HÁ»Çï]`´'©ÐΕjǦH± •¡…V…€øñ4¡´b³\ûŽ¢X6 ÎÎÁã)0 Æè‘ ÖX”’’0‰hX™R ¥Ð@™âx<¶\UCJ±_O²^µÓ” )ª’DÏ0G”:;&1Îh­Z¾±&ç Æjœq+ðº`)´Â-ëˆqF‰ÈdR…\r‹ÐhmÈ5SâæFò­¥€-ňv–~wÁ³O?Ë'>ñ ^ÿäë¹¼uÉÕõZ¼w ›-Z)žá%¾þ½ïã[¾åOóÛÿ$¿ó;Ÿä¹/¾À§>ýi~úg>Ì{Þûe|àà™¾ÈÏýüÏSËÌ»ßý...÷\ßAÆ›c‹ë0_¹¦šŽñúH¿ßr ´")ƒ3âþÍ-“5Í‘ñ4²¿—2GÆ9à»K´Qä8rÆGV†Z*¤Ô )¨Z‰)5¸¡M.ç !Lâ´6ºÅ=ÔölqâމR"Jk:?H¶t:GÈsK€«]ò‘—rº5pŽ?y”-,×°‹uÆXR8¢”ÅZ‡ÖEÖ³'¾s†2ó<þÿóƒu­®ZµjÕªUøRJþ^øéOú_èû\^^òö·¿}1²¬ZµjÕªU«þðdŒáùçŸçÁƒàçZç¬8½”´»OÓ ¥ Jå%ŸSFÆí€-Î-×mŒ:¥„1k=ÖÂṎ֖́Ýîc ÓÀJ­ÈÈ£µjNÙ®Ó¯?0ååææFrC¨ *qš¸Ø^b¬5.…Rz¥1FÊÄ9“K%£ìVI©ML‰*Æ8¶—Ñ_Þô†7±½Ý³Ýn$ß…1šR4!g\SWZÑùëùp`Ž‘Îo°ÎPr]F‹K\1ERžQXP0Ï}?°ßï™g¶µA­5Ûí¶ì›Åmëœo®ÒÈ4å–Yð¸MÏŽSqe@ÆþC Ø,¥.àGÜu­-ÔJjñRZöh<þìº-Ež5’'ªµbžósŠ’Iv­ñ¾k`¹,X­5§Ói—µHyÚv»mëÂC&„Ø«£ëzR*ã$Z"$¶ÃžI'BÈ­‘Ý i•íö¢9eTÍñt‚–E{þ ª8LíÒΖG+ qz¨Zã„Ñ¥,Þ)¬3Ëu8çÓ–’8×wC‹”¸IQPj ç‚6™R9ÕÖ>ïM­âÆ-5RŠÜn•JŠòùÆ8¬ÕŒã m*¾³¤\¥-Ié™uºÅ*€VJál‡÷%Nljã<ázÏÇûüôOÿgܽûß÷}ßÏSoz3w¿ÏsÏ=Çv»ÅZÇnÁ8ŽÜ}ì.W××Üâ>_ñÕ_Ç+/¼Ä¿öí?Ê{ß÷?üÃßÏÓÏ>Ǿð9~èG~„¿õ7ÿ¹V¾â+ÞÊÅůyí}\ß“b¡ï7ùO¼öI>öË¿ÁG>ü³üÂ/ü2¿Åcwo“ÕöÛ­$óÙ÷ŽÞ;j<ËD7xÆã5ÇãÛ[3Î# ÎSï-µÄæxÏ’«4ÊJV1Cc&—H­š”ã47 í›k_¦JR[&®€óR4¦•˜QµhªÖÔj8/˃÷œUüO—£ÿ¡¥[ÜIÉ™ÓñŠ”Û]Ê9b,Ä2ãä4aMEÛ~ýé¶jÕªU«V­ZµjÕªU«V}‰Èƨ¡Z6›Çã ûý†}ßQj$L¹D‹Sòt8‚Ñ(­É©Ð9#íÞt)”I1r¸9²í·Ä"ÎI¥ ÇñHLž;Ý!Nº~ÇqÃÇ?þ›ûOxç×¼×=õZ>õÉÏðܳ/óÜó×|èCÿ€ÏþëNÜâ5|ç¿ù]¼ð‹|ðƒÿ=ßý=߆³Šœ9fŽ×·o]ãÄ~ßqýð%ú¾g¿ïPt é§HM†R%çÔÈ)r íÈDZ9Ø3}¿¥ïa’ñ{Ua:’#í4¥dP×A¥¨ª“hÛ‘cÅ4w¼RVÜÒFâÂ8 ÐoSgëÙ)®”lð¤0“Ë„ë,®«@”Ížâ¨JáF!À7׎lUëV×·jÕªU«V­ZµjÕªU«V­ú#«ÒôÞ1OÓéÄv;`­%¥Œ1gçÄðÆ2l¦VˆTMmœŠÓéDç=}ßÓyOœÃÐã5¸VŒ4Í3!^ypE×÷¤F9¬ñ<¸~™¾Øxϧ?ó9~᣿D×wü«æ_ÁYæ(¡P«dTGŒ³­hIܤÎ;bHX«QZF§­um¨U6ç9²1•ª(”ŒõRAe´Uh Çãç-ÞwXÛr[K gÉ~•pÇv»çxœ©œ‹¶n¸¸¼Å+b}'¸ ®BU©Uá}Gˆ“œç<“l·›et¸”Â4ÎR^CeðÆHéŠËðªB¨6*”JÁY/íëUвhÎemäkæ0ŠCSKf«V¾ŸGåX)FIönaVJ¡*¨Z˜çæpv–R îÙqûÙÏpïñ;üÀwÿ5¾þ=·ùþêûyåáKì/öû J‰äyýßȃ—Žlº ßôÇþ8××#¿ú+¿Ág?õ»¼ûë^Ï»Þýµ<õÔ“-$òŸÿ“ŸýYÅw|ç·óÌs_à±Û·yâî}¾øÂ³h4›¬é7ᇞ¢‡-[ !°Ýn˜NGJ”Bj+ªÓµ cu+$«Ô,9ÉÆZ´·±u„8¡-ÊA/nçµP‹¼Õ’±FA+¬;»TÏ÷Î?ýë¥$¬“˜œ#ˆ!I|éÚ½›$/Vi‰¦À¬?µV­ZµjÕªU«V­ZµjÕª/°šS`:ÆéH 3lzJ)ĘPt-gU£`,ã4-%Ú¹år}‡µ¶•Us­…”Ê#”Ò\\\p8Ž\_¹ÿ5ÔªÇİÛóÜŸç?úQ^|é·.oñÞ÷½Î;¬ëÖõTqNL1¢ŒÂ{‹1RÜ4Ïs+‘‘èišä×E p´²l·{¼wÔ, BJë%ÏQkƒV m䨶RŒÓ\°Îv¤$cÄF;¡O‘›Á³Ýn%ViœµXçÑFŠ‚¬’¬Ú’Œìçˆó†Ë2Ö_JFZÉM–ÜÛ\2 qçæ"Ž¼ÜŠ¬Îãù2ºÝÐ7HQZ½j̽ˆ3ÄV(f)9b€ßuKéÕ¹Èé1,rÖAª”¢$G…Ö•i[®ªj¹ž•ãñš¢*æÇZKŒ ï».IWEið®#„Ä8OÔ\$Bâæš&îÞ½Kž2ý°>WJ.ø®ÇiÕ|ö³_àëßû¾øÜó(¥ðÞ·l^Yo <3šý~KŒ3ã8q<qÎ6˜ª¡VJɤ$Y¼k¥H0Tº®gšæ6Æ-¥`Þ{|§—\Ë !T”‚ÃÍÄ0ôl6¦åÖªVV †¾cžFwr­c•öz]¥«j,(ÕKK½ÒÍý|›íæ1®¯®¹¹ÎP=é}—ùêŠq4 ýÀxÊüÖÇ?ÇsÏ>ÃoüúÿÅŸøSßÈ;…çžý"Ç›ÊÕƒ‘}ìÿäozŠËË Ï¿ð »mON3ã(ŽZïzœuŽ#¯yíüäOþ5¾õ[ßÄOþÇÿ ÇŸa»Ýòàå(]¹wï nW\½tÅ’Sâïüò‰ßþ]¾å[¿•¿òŸ`è:¼ò"›Ý@Š»ý?öc?Èý_}ˆ¿þ3‹oû¶?ÍÛßö§ñDïïà¼g>+ÎÛ^8ОæÞý'¸¹¾aH ç$U®•¬ýÒ ÇÂ1ÖHÔ…µ¤$ñç|]e ”LÍ•"1GPmÔCK)¨³TÕã²ÁDM d³d¬žÁý9à\F—s¢ÉÎUÊêºrÍP ª$”rËÆdG¯™©«V­ZµjÕªU«V­ZµjÕ—X…Œ5 *ìv;:ï9žNä”ID(‹ƒÀ£”1'qj¡°Ö³ßïpÎs8œ:É}œ¦µH!Rk;žyú³üOÿðòž÷¼—ífÏÍኧÿɧyݗݧyÏ{ÞÍÛÞþvq9ªÌáx ä‘ËÝï ¥dzÛµr 6†i%‡t(%µ’-…µš¬‹”[)" %cÏ”"#ÚJŸ‹g<›í–¾Hi&)ЙBàxÙì|?`­¦ÔsRÅhE*™ë›Ãv/nCe(¥¹b‹&e>çlO¤˜©uÂZ)Ý*E²=•’¼Ñ\‹)gL‘ ÙZ Zi¬v}´¡…DÉUÓ²T¥PJ‘3(%ÅK›Ý³Ý¢¯¯ÑZ3Ž#Ã0,.Ös!VN‰“DTÕ ©jƒX•R¥NĨ¤(ª “2,K×yR(-9÷HQ”÷ªX¦4cœáæxäá×¹¼sIª‰)N(4Ö;¦1`•fœûÝžÏ|ú³¼õmoãÎ;þÇbæÇé¹$-¥‚ÖJœ¼JЏb Xg1F“b!gyÏÚt¶Æ·lXÝÜÏ®5ÇjÛl|ÓÂt:¶uàqÎ@éè¼dì‚&§@$£1ÌÇÀ<Œ1¼øÒ l†-wï=&PÞ;üÆ‘R}¿E)CÉ[-•\4~÷Ã=t0lH7×\ßö¯#„À4GúnÇnw_üG—ßýÝßaë1b†ßüÍ_çW?ök¼ûkÞÇ;ßù•ö?Æ7ó73Ž#µÂn·Èiä}œÿ_JÆ:C×ÉZ)E2nµÖKþ©Öš\Ä1rZ΃÷ ƒÖF6jÆyK.9Ü`L¥ðÞáÙ,Ñ ZaÔD)×u\Þ¹d'bŒÜ¿cJb à=9BÈ8»i‘e Î{:e)fÃç>ñ):¿åSŸù4^y‘ßú­ßæ­o{;ßð ßÀÝ»w%KôÖ^óÒËhmø³ßñg¹ÿŸúÔ§yüñÇùËé/óÇÞ÷§øÐÿðßñÖ·¼™ãñš9ÝpïÞnn^Áš0ÃíÛÁæ’ÿô¯þoxÃëù ?þ<ó{_h÷¼âÎ;¤TC× üò/ÿ2üàù†÷|?ô߇ï:ž{æ¸až ó4qy¹'…¡¢‹á…g^b»å:~ô£åW~í׸sçÔÊg>ý9BÜ¿Ÿ~»ãæ ŸÅXÛí¹ìò‘Ÿ%„ÈSO½‘~ ÆT‡£´Ó;ÇáÁKtÃû-Þ;Ę1Ö¡ª&¥Â8NXkØívh­™¦qa?Á#i}ßB ä‘’Ó$Y‡1´ÈŒ¬’qü9|ç%#³‚udjÎ'¦yäÿfïMc,;ï3¿ß»œí.uk¯ÞÉ&›d«¹ï¤H‹²dmÖbI´%{<ö `;#;žcL`O€NdàI ™I€xâ%Ø€<±(YËH¢)ª)‰¢%6Å­["E6ÉfoUÝU]Ë]Î9ï–ï©KúÃ̇ùëÃù}éÛÝUçž{¶ <ïó!4išG÷ä̃YMve“½{PÕ±ÌF)…ÒqôÝÔ5‰Fj”ž@tS:çB‘çytŒ Î6‘ÑâêC bŒ[ÈY'Eø·\±Îy&“1½^à4È&3U(¤ôÔÆpéòe666X\\$ët¢€þ¶|ÕèÚ3çPBÄñy¡‘rLUÕ$‰&Í4!äSQxÁc›¢*%0&p9ïp.àC M=#¤ŒŽc-Éò>ãII§ÓŹX%¥$/r´n®O¥¸í¶Û9qâi”RL&%iš „ÆZCUY¤(¹ëõ(G³'“Iü!xI]Û˜ù›h2ÝŘzš;;½¦Þ&Äíþ»±†@EVdÄS.¸(˜{ðH” (-põ˜ÚƒµŽñx‡n¯Cšjªª¯9OÍd<ÆZÇÊre¹7©ºHÕåÄSOògöäEçO?s‚Ó¯z¤ú*Çnü·\}õµ,,,0ÓïòƒgOÒë%looð;ÿÕoâ|ÍÖöóƒe^>ùçÏŸãÁwÝIQÀL–³µ¹Þ8³‹óloŒøwÿç2;?ϯüʧ™ wèv»dY6=®EQpqu•Gùë—×ùùOü¼ó¬‰ ,ƒA—à-Z'X4;[“(Ì&sýln1õ+›[¬®®"„en~¥`qi™……9ºÝ7Üp”íí-ÊzÌ•ÍMæççñJÓíõ¨«š¼(¸²v‰<Ϩ+‡’»y¨ˆÏ·g³ls(­°6Ƙ$^5åU1_:Š­ :IpÖ±¹¹4"øf‘':œ…~Kö¨*¥ŒCüÓ+…ïÀ‹ÒšX ñzUŠàÆ:‚EJ\bi««ZZZZZZZZZZZZZZ~b„ÕTÓo}LU!¤Q,O¢)ÀÁ”ÒH%Éò”,-¢¨–&t:¦^GÁs<¤ÛéÐét¦ŽU)um)Ë ÇŽÅÔ–ï>õO?ý}Þ÷¡Ÿ¦®&h¥ Ä¥±3H@)bñ€T$YÊpgË—¤G©cê©à¥µnò.=EÑ¥jÄSÔµi2 3¼w8kÉòDtŽ¥iÂdTQÛèfÌ;ž!5Ʋ¼GŠÊ̤Äú@šu©kGš8ïñ.DÀoÄDï㺵± ¨ë’D'H%¸´¶Ž’n·‡µ1®]xBtš‘)…NbL@]ÇÒ£,ËðÎáC4W2ir]Îz´N¨Êºm‘ÑU© ôz=”R”Ã!I“KZ5EeÓvó˳jcHtÂL–Í­f´:F&äyÑ|FCš%ø3b…”H4B‚ Z+„Ñ%ªvsr¤ Ô¦I’‘åÒTà¼@¨x³,áG§Nñæ™7x×»ÞÅöö6i’¡Ôn»"iœÓVv!QRá•#Ër L]¨RD—¡”š²!!›1ò˜y›dS×@t9WUIUï÷$àp¾Ä¸ Fë”™AÎxÍÁC{Y^Y¢ª7ÙÚ\Çù@QôX[½ÂÞ|–ÿåþWô{s|üCbnn޳gϲ°°€”’ªª˜››css“'Ž‹­Ím~ý׃¢)•“Í5·§±[j%¥õÞ®¹4Bb~«Œ9¬N¥9ÁG·m\iiiiiiiiiiiiiiiù‰V-qÎ4åMQl0ÆFÁ1K±®ÆØ HêªÂ‡ ºƒÍ‹”À+ð¾&KsÒ$Çx‡ÜÍþôž^¯`{kĤqû73ïðâ‹Ïóýï ¸úšCÌÏÎP–†TK¬­ôúXWa«<ÎG‡¥5k-½^g<ÆTôz=¶·K¼÷MvjÕÒ4Å7cèÖÚ¦¬H¼Æ:…©+¤Ü-ÁòMŒÀ®8'Þ*ójì¸ÛÛ#²,'I266®ÐëΠ… ®<.x²¼@ 57ccÄB¢b&¬oò“D#DŠkŠtò¼;uµBø¿#ȼ½°j·X*kЧÊI‰P ZG'q)]ÿ÷q\Ù{3•Š3ĨÝíL3UÑu×ý›e)xÚªÆÔ޼H)²>>8LíðÁOL©$Ά©àB ¬KÒ´ Ï„ˆ¢¾1Z ¬ HuåðÒL“g¶¶¶›¬œ¤®kÒ\0¹xñB€s^¯h„¬Xc4eY¢TB§Sj§ÆÙÐ|f a·õ=^3ÞÅâ-ï=ÛÛÛ!˜™™…UU㜥,KÊjDnï£p®´Gk1‹¸?SVïUéÑZ’¤)å¤D£BáTvBG*Ò¢`<ˆ èçB@ÀK‡õ%IÒÛ’[n¹•d<ÿ³üÞ÷ß°¾všAwkÆX$Šîü<¡žðo‹ƒû—™›-v¨ª1£­Ξ•_ýG¿Êh´ÅÅÕóìÝ»‚s5ë—¶Øwà üGÿ7ý~‡_þåO³oÿ.]º„Ö ëëäyÎÌÌ€W^y•¯ýë<ðÀ;ùÿðröÌÒÁ ‰« •kØÚ"„bnv‰sç.²½=懧~Ìæ•æþû~Š}‡;ÌôûÈDséÒ%¤Ðìl­³½=$Ë ææç©ME–i®¹ö0õWŸçsŸÿ<ýèG¬¬0%I·‡«ª¸ÐÒí“ù€­')Dj¢5NÓiùZ]AÝûXç<ÎX”TˆEïoãKï§¢­1ï=yžOŸ»îïÝX âx¿Ô¤Œ‚©3±èÊy¼‹™Ì*Á;×ܧIû­ÕÒÒÒÒÒÒÒÒÒÒÒÒÒò‚ú­_¿õ¤TY…?aŒ¡,+Ò4!iÚ­¥Å×à=ÆÙèkFÝukˆ2‚ˆµ.2:wÅÉÝŒK¥$JKʪäàÁ½¼rú¾÷ô3,.,3¿0 ‚,KÐ*ÏL ˜„¡›Þض.¥š šLWÑd¤†æ½-!êÚR×uӶݸh…`4!¥ *+vv¶évg¦¥5²y…÷ ¤Bˆèšt.0;3O·;Ķv¥“·Jª´$ð!Š”iš ƒŠ­ð€÷ÑÁ÷+ 0Y–£”b8M3X}¸Æí*„@'I“ *A¼%;/ñn÷ÿU“5YO˲bË9øà£p$Ô4's×Õ¹ëüÝuÿîž»4Õ·Û¸.R<8E 0ÆaMŒrP*Á‡€@¦9Z7Åaµ™ŠÃÞDz¨º¶©›¬Q…±ï£[U…u!5R&…}kJöî]ᆮ§ª*ƒA3ÞÛßã{Yœõ$„è¨õ>PÕumH³$±é]"…Ž…`I¶­µÑ]«cVjm*@<~:QEÐt¼F ÓÜÍãQE9vÅ,Jw©k "§Û UÆxbðA07·DY9ŒñäEŸ¬èÓ)úx§ÆÔfŒTÑUY–|Nf‘×^?ÅSßûï~÷Ýt: [kHe5¢©G[”Õ„§¾ûö¬,qô†ëÙÙÞ¤×)¸tùu]qìØQ¤ wFäyï$ Ë|ùK_f<ñë¿ñë ]¶··ð!eºƒD€Çûgâ\R IDAT^}õUÞùÀ»ù&Êñ,KÙÞ¸‚V¤¤Ó›!QšsçÎñâ /ðü /`¬áðÕWsßý÷sãǘ_ì!eÅpg[WdYŠŠñxÄìì,Î{Ö×/333@Áì`žåå}¼üÒË|ë[ßæWÌÚÚ%.^¼Àw¿ýöíÛ]âÆ€|Œj ÞÓZ'¤i†©kl]cm¼' d×i„”±ªM@ )¥j~V+MÑí¢š…‰ÝûiwÑB7!„8ãqÎà}w%Ö–ø`Âãƒ%àqÎB¼—1£x<“õŽýGèu]³±±ÁòòrûíÖÒÒÒÒÒò÷€±àõÊ•+ìÝ»÷?kÃáÉdÂâââß)Áliiiiiiùÿ)%£Ñˆ²,YZZúOþ¬–‚8íå¤Ä[H’4 Ù·ÊTêª"I Ò4¥6†ªœDgÖnûvšÑëõ¢(7š€§)[ñ$‰@JÑŒÑloo“e9W®P·ÝviÞçÙçO2??ÇýwÝÉöæ%’4ÁT–4×ÔÎb­'HA@N”u]“$9i–DÑ!KI’¬ÉFŒ#æ£á6‹s’àõTx›L¢×éˆT²µ¾˸\Ì^Œbç®[4þžTÐéæQ {f)G–$MÐR/pÓFrÙ‘¥B<1"à­p×D%ЈÀk a×ù©¢Ûw×—ìFó6á8 Ÿ¢‹©cÜA¢dÝ—~×)§šœÖ@h¼ÐˆÒD'æÛÇþwÅ Õ8l½wS‘$‚¢èJðÆFgŒ.¿ÄyŒ­¤âçRIo‘$IÌY†=ѸƒU©Q©cI“LB1©,B&$J7£ùB¯bŽjEžçƒ×#„Gëì-÷!ñ3UUIYÖqìMšHDPXÏW¢3¤LÄ‚ñx›àYž!ìlètãx¹Ò)JÅFx­ ‚H‘"àBIYíPÛ1Æ@Òï.ÒÉ{à Þ|ã"?zé4o^¸Èp¸ƒ÷Žº®@8¤„…¥yî¹û.z½.u]2?¿Àüì2[›%&ìÐíI”Ö s\¹d VøøÏýÿî .œ¿@–­àL‰HSR I¯ƒw9åhÈ-7Þȕ˗QLYóòK§8vÓ TõˆN§O–v"GiÉ_~öÞ8ó¿õ;¿M9Þfk»d0³ˆ­c,Âk/¿Æñ'çªCùÔ§?Ý”%IƒÁ &náâÅ ¼ðâsììl³²²ÌÇïÿY¬ Xã1~“áØæŠL+йYœ ”e”’nÖe¦Ó&± ǸŽwýÔC\søZNž<‰µ–óçϳ±±Á믿ƫ¯¾Ê'>ñq¾šáöN®pX‚·HéItŒI² [W(6Yº&>óœ!IcñĘˆó‚xbT‰÷Óª]‡vaê4ßu˜[c"Þ÷"€ĵ£I!Í6å‘*GZµ®ý†kiiiiiiiiiiiiiù Aï u!4mÙÆR¬5Ô•‹e*A✡®£k2I£ám¸¤Ó±ñèΔxÛzlWªMI·W°vi¢HÙÜÚàØG9tÕ|ö³ÅN½Ì ×\K·(¡©RS'ì '¤ENž'dYFU•øç™”‚H©PJ1H“œ$IñÞ“&­¼“¤©B Ñ*akk‹‹/pèðAº½“Éxšù[¿›LDbÞh·Ûù8†ßéôÔ)Î’4E6®&ϺXWãñM¦b]]’Éyž£µÄÚ ‘ÐŒ ’D4BN|-Sgçn‘޵vZ¼]°)Î9vv†ôº XÎ5%Î:fffp¶&ōָF|«LjWªªj*¶–eI’ÄãímºT#¸ºªF P*¡®ãØu§3 àÒcÜ!J6×…·8Ë´-ì:B¥¤ÓéQ߈Åèé$Bh$º®ÑJFáÛBYȲ(`í K’T‰Â}][Æ£’4M)ò.Ö:BpdiÞ×5µudi†R1†Á9‡’)<ÖvvvHJwE`OQD‘°®ëit‚÷ŽÚX²t.– ™c<ÎHÒ¤ÃÎNÅw¾õßÿÛ“œ~åãʲ´w…dzoÿ¶··ÙnbåÏüˆ<óC®»îZz÷OñÆ«|á¯e2Úf~)aq%gvnž£7ô™[ºSkÞ÷ äïóÆg¹þÈ~––Ʋ½3FÅh8ÁT›ë›Ú{€,ÏQRrîÍ7Y»p‘ê>œ¯X]¡T‡ª²¼øÂI^ùñëü£üËøÉ$Šä:ÄÈÙ=<þõ¯ñÇ㓜;3uò<›Þïu]²ºº†³‚—_~‰€ãÖ[oæšk¡SÁ•u¤ôhðÎRcQ.ÃNlGEÉ,Ï Áry}ƒ+W¶OJ._Þ`cã ygç“Ég-KË‹¼ãè1ÊjÂ-·ÜÂ3ÏœàÏÿü/xøáOrÝuG°¶DÈ€Qp·.:¥óà©ëŠ4ÓÍ"B,‘Þ“ß-q |@„Š„ïpÞc‚@'fùTD}{é™ob”RXc›ò?…J428œ3 Á£šÅŒ¸(₃àu…‚~¿ß~kµ´´´´´´´´´´´´´ü¤«©îѵ—&it¤Öf*àI)Étе5;“1yÚ¡èvÆb¬C©Ø–­TÂxgcHWC’D‘¤QSR!¤d<Ñíö(ºyŸ4)N³²°Â½wÝÇ‹Ï?ùsg9|x? Á¡œ@!èN4I0¾¢ªJÒ¤‹PV ñªÒPN,i’à­Bˆ ©ˆ™«F“1Þ ŠO?ÍŵóôÝ^Ó"'W ÎÙ¦ +ŽÏçyJïc1–1e,œ!å¤B*I‘æ”e‰Ô ­4ÎÇ|ÆæëZÓ]Eg­q‘tR3©&Œ&´¤Y†W%%:KA \]Oóa‘Q0¶Ö4e=r:fÝ¥žªª(ŠÆ]y´Ôxá©&.fƦ)A8$k£hÝï÷£(­¬çg{{‡¹¹yê:PÕ5‰±8Ê&£8 Ž(¡©¡Ô»‹!MS’$E% JIªªŽb¤”e‰5!ãõ8©ì˜ª>Çp²E·—€ x¯HÓ9Æcøìgÿšï>ù·ô3|àcï¦Ûë!u›w¶·Y^.¸çÞ£¬¬¬°¸´Ä§Oóøãßà¯ù+²4ãÈ‘yÇGyùÇ/°½­Ì 8ñô¹råï{ïÏÒëñá<ĉ§_â£z¶Þd<Ü¡*k:E‡ù¥E6.¯‚n€ ¥Sž}ñ·Ýv½þÃí1Çüü€ž?Éñ'¾Á/|êa稪1YV03˜ãâù5ÿÆ_²¹¹Å?ùÌÁÊÊ ;ÛC”lŠ :uYsúÕ³\¼xŽÚmsøÈ!öïßÏLw;©ÙZ#DJ~™Ñö™h’4çâ…ól¬^`g¸E]W)°ÞQNÆtz]„ôz}ÚÃÊÞEò4§Ûí7&X[s誫†c9zìZþù?û]6Ö ¹þµ¤:AkEp ZC]Æ‚6k<®²¤Y,“Jã…š<*‘ Ô¼elZx¼/©j‹3ˆ­§I’’õ–ÃÕ9&¥`Í$n³ýÎjiiiiiiiiiiiiiùÉVG#‹÷5¢Gš%”eÙ^qäT…sàt:}Ò4£Óé2—±µ^§±µ:ÄvõD'ÔuÍx<¢7“Ñ)ºL&JGbžXëÈ“S;Š¢ƒ³‚ɰbÿò^^+bQ‘R‡PZl‚þÌ,Jh¤Êi‚.'¤I/–9‹V™È˜Ùi<Ýî R$X E>ƒðMA"‘k-s‹æ—fX\š‹J³=¥`:B# ,13Ó’¤ … ®+´ö¤ZN¤YÑ%I2¬õXï‘JGghS†ã]ˆîÙ$ºàtÐEç“É)Þ9úó3x›’è$hÕ#Ò"ŽÞCÀC»¹µWNP*P”„`*1÷Á{ÉÄX­@†(0 ¦cô»¯»ELYÛË£«5 X@ º½¬qÚ‚µ”µ¥¬K´ÊA^D1Ò G¯“ø9ʲÄZ;ÍrµÖ2™Œp!ŽUk­°6–¢i¥ð6§ÑY-¼!Øçj”„àÿNɘ֚4͘™P×5å¤b¦ßçÜ›¯¢Å"£R©ñ¼óyË—WщdvnT HÒ©R±³3"IºÌö°µu…Ëk;(%™›]fsgÔ{ŠNÂÖö:™'Ë—ùÜ#_â‹_þ6wßs;wÝwŒ,w,G¯»ž^¯Çx4av0ÇêêENü>s³sÜu×=Üyû?åÌ™3|î‘Ïñâž%ëßǽ÷¿‹—~ô2¯¾r›nº™™™Š?x’Û˜›o:ÆùÞ*LYpÔ’|çÉ'Ù³w?H…ð0ª*„Ö¬ì;ÄÎVI·;Cš9ÖÖ.ò—ÿþ/øíßþm¤”TÕ˜º®™ŸŸçµ×^ãþèÿâŸøŸø¥OñúK?f8ÜA«ç<½^ŸS§Nñüó/pðàî¸ý’îý~A£àXÅ`°ÂøJÍö–ãå¿Ä3Ï=Ï… ç¸æš}èD23Óeqi–ùùº½KKóäyFUÅÅ›<ËÑRÇø©ØÚ\çÔÉ‘jËÂÂÂyúEÊÞåý.Ù9äæ&‰H0¢ÆÛšà ½Þ ›WvHtN‘÷1eMo0O9Ú¢®›ç†ÈfqB*‰kâ7ÑQ/°,ÎX@’¥x© Ây¼‹q ¦ŽÀB`jGÐ!f7#I’ ­3œ… $R$ÔµA«˜éBDKKKKKKKKKKKKKKËO€°*„ Óé ¤býòe.]¾Ìòò ÝnšlÊ4MÑIJåÃÑ£ñ‚ Ï ”X×ä‘Ê8f?™DGbžèD£Å;OiK²¬hÚ×iJ‹jŒqdYÊ`®ÇÞýˬ¯¯âý (dtŽ 33Q¼ŒFd¡k‰sž²šQÜ-`J’S[¢SP[Kð1˜Žú_ýõ 5 Þ{„8ç‘":+©€˜S*PM‰”ù€—Žñx‚sˆ‚³JðÎSÕŠ¢ Ïh4Œù!2•UI1S ÛB1@íÃ1„­ ¬±äEÊx<Ä9K·×a25cû1;u2£CŠ1ß<ÎÆãºÉfj]×H!‘)x?&Ë ”ú»c»£Ø»cÍQÀõ(¥§ÇOH”ñ<îæG ƒ@2™øXxÕäNc°Ö’$IÌšlÄU!D¼š² ªšP›šºžP'Šàl“A μ·h¥P‰jö;^O‡Tѵûå/ûî»—ƒ¯fXW$:¥(Џ¯¡ÆC±HK% YšÓ›™¥(:äyFP;Ô¶•B¬^ºÌ©“/³zñ J&œ;w‘$Ièu{Hèv{ö-pðPÆüâ>„ìòþÿògú—üì‡?ÆmwÞÈ`6af.!Õ‚Kk«<÷ÜPRqÛm·sìèõ¹ö0Ï>ûž9ñ}f3Ü|Ï}|æŸþ—<úµÇyò»Ë•õ5>ùðÏsâéïsüñÇxßûßR’S§N²ÿ^{ã4«k«ì]L°Ò#ÐlnoѱžGÿæQ>ýKÿ€+—™™™á™œ`ß¾½ ý¦ á2Y–ñ¥/}‰|ä#,..6ž¢(øú׿ÎsÏ=ÇÇ>ös\wý \>wŽÁ`@–eŒÇcΞ;Ëùóç©«Š;#G®%ëõØÚ¸€­E–C¬]ºÄúÚeNžú§O¿Á¤6ÌÌÎsÿý·sèêÑï¤$ZÇÒ·`ãýïkœµTã’I9AIEÐ<ÛÛ#„€¢Óc0?ÏÎhLšÌÍ/¢kË‘ë¯çÔ_âöÛïÂ9Cð©GÀ`]Ík¯½ÌÂÂ2ATø¬™ IEJ’iʺl®û˜us§5ÆD—¹’‚ø´ð(4Ï693ˆ‹SL ìDð€£èTµ£®ªèžoÊ༇ºªñ^ UŒV0¦Š !Â!E[`ÑÒÒÒÒÒÒÒÒÒÒÒÒÒò#¬¦iŽók+Š^C½HÒc U]ˆNu]’ç)Y–‚ÀÇñ›‚¥JÇL²F8“dYs8«zê.Ô‰B Õ”MAÑɰÆqôGxíµ—Øm3P]”–˜ÚNó\Ç£ Æù˜—ê=!8¤ˆ…VeYÅ|Î$c<¢uß×ıâ$M7nl¤—Mƒ·1UE¤,OIU†³k|#ÒÆØ!Ji¼Mf¢Ž"¦”(%¢x)cF¢Tl$Ó4!„(Z¦iB¢cn«wž@h>Kt«*¥HÖ ÛÛÛ(•Ðë)&ÕOJYQJbL4ÕÍçð8ï)Ò(vBÀÚFìDLÅ¡]¢€ê ^NË©v ²âqUX£âÿGQ9ËS”R”åˆj\¡›LX­G·,`mÀû·„Ó]ÑvWXÝÍ­Ç7‰yšÝ”Ñp„u5I"Ѳ@kWRÈx¬C@)Mžh|Œ®EÉ1–ºªè÷gX[=©'ln\ŽÅTi,T²Á‚ˆÍìBzóËL6‡è$¡è jFcƒP=²¼Ã›g.ò•/}•Ïü€óçÏ“è„w¼ã(“²DŠ@¯ß!MrÞ|ýË{(ë1³ƒn»ãμ~‘_ý•ÌÊÊ^οy†Õ‹5ƒ¹„,O8°ïïßÏ08qâ'ŸŽn8Ê­7ÃÔž×NŸæÔ3ËÊž}|ô#âºëŽðÇòÇ|þsŸåñ—8ríaŽÿ&<ð zK±±±Îƒs(-ãõaH3µâÀþýXoY[_ãÕW~Ìûßÿ~Ò4aff†ápÈñãǹ뮻X^^ÆC§Óakk‹Ç{Œ³gÏòž÷¼‡«¯>L·Û§œ Éókkk|÷»OB€;ﺓùù¹ƒ!õxÈüì!.ž¿Àë_çÂù79óÆ+\¾´Ê{ßûÞûþqÎSôfèfÙÚÚÀù!å¨FHÓ%%Rz,fº€’=cÆ¥$/fÑR!TÊž}QB2™LØŽ‘Bs÷½÷qü‰oc=[b^¬T ¹ÅY*3âì™sÜrë]ä³9W.0Ó_h\Öë 2€RšªjÜÛB h²T¥Dˆ‚Ã{p2^ë!¤’@À»˜=œ(‰P )ÃÔé/bËuÕ8æe‚0H£ñ6Bz„t{íWKKKKKKKKKKKKKËO„°j§a¿ßGJÅx<ž¶­ï¶ÎƒÀK”c eYÅqú$A*sñg¬µTÕ˜ªŽÌèPô¤)hgct= !¡R¡µDÊÀ¸Üf~¾GY¯PNFd©¢“EÑ6„ůÂã…$ÍRë¢XhlE]×t:yCËaLÊšDê©À›µ}#×$‰¦ßï2PJ6b l#4ê¦L& …n„É(¦ ]uišÆ’#i»GBÅ|RD ÛËÑJŒ–Û8P™¤×ëcLüÉdLU•œ9s†ÙÙYæçg)Ëm^}õ<×\s I’`L,gÒZOÝ¢RªS DŒ"¨J@’eue§îãèŒÕïHóë,夜ºxw ¬â6Ãô\+¥AÔ7»è΋B ®b^¬­Utü6ênAÚî1ßµw³e¥”¤‰fDŒ$HÓ¡!x’Tá¬Ã{ƒw„'ˆ˜ë›Â´·Î­§ÓÉø…_x˜<Ï ÁÑíæœ?³N¢%^:’DãCt0›ÑcPi—ºX«éõØÚ|þ‘oð•¯|‰+W.qÿ÷ñþþÇŽ]Ç‘ëbý„Éd‹Ñä Á¦\µç6Î;ÇêÚE¾ýíoñÄOqáü*ËKX^šçá_ü§O?Ï™3/aí„gNœàÔÉ“ÜsÏ=|üç?Å«§^äùçŸ'M+++ì?°ÂêÅU6¯¬¡Åì\—ñ{¿Ëÿô/ÿ%ÿæÿ¸ÈgþÉoqóÍ7òÄÇùÀ>Àk¯&ÏsªºÂúxŽ¢Spâ™çXXœceÏ2YQðÍo>ÎÜü€þ CYMP2á«_ý* =z”áÁ`ÀÙ³g9~ü8ÛÛÛ|êSŸbee…óç/4q‚o}ë žþ9î¹÷nÞùàT“ ;;;Ì/ yÎ¥syäÑ¿ag{‡º²gïï|ð<´‡ÉhDg¦ƒŠÑdÌÖÖY–§ ÃQÉdRáCM·Û%ItSh&¹²¹Áææ:ƒÁ,½ÞÎk¶¶w@J²¬EeãI‰w‚ý¯"ÏO0®+ºÝnŒ’ðj ¥†`™ XºgÉ©ϰ³=⎻@ ¦®mçˆÑ.fK !§®nUi§Îw­“˜™\US!„Ǹ éã¢.Š®Z'(¥£ƒÖKÒT7ÏÈ$Ƹ(0& ˜º¿[ZZZZZZZZZZZZZZþþQ¿÷;ïýƒ,M Fã“É„,)pÍØ¼ï•1 ÇC¬±ŒÇãFT¤i‚u¦ËD3Â3u’ƼQg£‹MHâh¾jD‰(¼ïñÁP–±ðªßï’9‰–Teٌȱt¨¬Jœ·ä¢qA„$dYŽsÑ%*¥ 65!D5øÐd…zÒ4CJ‰Öš<ÏšÃxœñH¹+"Æ}Áh4&M3”Ôh•$)ÖNHRÅx\R‹|꥓èĵïZ+`ª8†žeeUF¯ÖìììP“IIQtéõúÌÍO†¤i‚ ´jÃ0u€z!?o5$à™LÆììlã½£Ûí2 >eJi­©LÍx4Á:Û8}uSÊÝŠQ¸M¦B¸”ñœEG¢ˆÇ-Lm1&n# BQ˜{Žjaêj®ªŠ4M±Ö6ŽÞX Vš ÒÑìÅÚX‚‚.F3k}°k'°ob,Á U,ÝÊò”ÊV”“$ B,îÂã‚c4©hœOȳYú3ËœÏw¿û-N¾ð,7Ýô®¹ú0ûöïãØ±èv»œ|ñ.ž=Ã᫯fnv–W^y™,MYXœ§×ë0I²  ½^‡ëo¸žo?q[WÜ|Ëͬ¯o°±±ÎáÇùê×¾Æ}÷ÜÍ¡ƒ‹8g1µe0¿ÀWÿÃ׸ꪫ¹ñ–[Y߸̋/>ÇÒÊ"?øÁ3ÌÎÎsòÅyýõ×yøá‡©Ê’¥ýûyò‰'xôÑG™››ã“?Œ‚­­-B€S§NrâÄÓ€ç=?ó‡ÀÖ%Û;[loorêÔ)Ž?ö7œ–ùàqÖ£•Ýnc J)†Ãiš‘êŒn¯C’ê(Š Âãkâ2$<ý~—­íMÆcAQ$I—º®©ª²q˜ÆÂžº®šÑó8¾NˆÅUZ¥£Ñç4½^—­­1RI:i‡4Í)Ëòm.Ò ¢‹V±1ÞZÃxTa]ÍÒò<;Û[±M>ËI“œK—*2ÀYK!ÄìR½àÃt > +±¨Ûí1 ét: Ü4jannke5Æ;Ažç͸±Ÿ¾ÞÞÚ$I4I’F‡^3]äJÆqx­´RS·«PP9BDIkM’$ ‡1š ÏœõXk‘’&j ЍÖ†Ã!I¢étºÆÔ`šOóSß>òßétPIB™egg‡ÁÜ ŠëÕc u]‘§ ý™.ãáç0D¡\i¤ˆîâ²,ò$à ‹­+L]ã“2Bm˜›°µ5¤ÛË1M¦mšu):W·Ø³w€Nz|îs_æOþôßqúõ $i`0Èyæ¹!AmQU#޾ãƒÙytX[Ý`íÒ‚9I¯˜áž»ïg%ì%Ï;\ux…NWðÓ⦅Ç{Œ¯íQþà¿ý~ã×~[îxR*öîYaßÊ Ï?÷<_ýêà#ùY|׃üí“ß¡Sh²4eïÞežzê{ÜrË­ŒÇÛ9r˜ÿìù“?ý8zô>ø_ûÚ׸æš#\sͶv†H‚tû3¬_¾ŒÔš{ÑpÈ«§_an~«®ºŠŽ^Ïåµ ._^çÃþ0Ýn—4Mùîñã|ãñÇy衇¸÷Þ{yýõ×Y\\ÄÃ#|ž,Ëù™ŸùiöìYF'’‹/`LÍk¯Ÿfgk‡,ïpìÆ›™›]`ÏžXk·ÙÜÙ@¤*ãÑIŽq’á¨bi~ÖLÒí\E¢R†Ã 6¯¬såÒšM¶¶¶ Îriý2I"ÙXsl±6 IDAT_guý"Y7aÏž=|ãßàÂųÌÌôèv»Íµ¯è}Ο¿Àúå n¸î(yš2Õè¤àÒåó8[£I–i”ÊÙð½^ïb‰ZÌedY†vŠÑhL·Û‹×¯k²™…GI…T­£sÝZ »1!2>­‰YÇJ*Œµø€Ï¥šÈTtd‡ø<@)°AtèË&#º¥¥¥¥¥¥¥¥¥¥¥¥¥¥åï Ma“ÓLM)uSD•!¥šæ¢ %ð®jœ‰¥2Œ)§ÂYldO€@–w©§*£Èe9uG`cRÓ&Ïá‘2#Am Iš TÚìC x‹u­`iÏ"UUalÇy‰ã·»ãåÎy¼Ó2+)%ÎFÑuw„}W@‚©{Áôõî¾çyNx[!·@“&’¼H™Œ'ôûêÚ°viƒ¢èEQ¨jÓ¼ŸÀ9O–4í4mã4ÍñÞb­ÇÙÐD¨©ø*D܆sŽN§‹1‚Äû(ˆÇótÃá½î iªI’ìmŽÛ] ÄEouQôIÒ\ãú”Ó|×¢»bá•÷ç=>8¼óH]¼išR î»sfêNn¼·œµu]7ãú–ÜGq\ PÔe‰JÆØæ÷ã¨ÿpgˆ’2æýVÂÇUûiÐmêBLㄈY·º(â±qQˆ–:cnnŽÞL—+è,%ÏgX]Ûd~a?V×ù×ÿû¿â±o<ÉUñ©_|ˆ›n~‡]ÅéÓo`­¥,'¬o¬³¾±ÊÂâÇŽÝÀ7Þ„–õKgøÚ£ÉÕW_Ï5Weyi…×`çÒúÐ{xçýwqü›ßáøïÿG>ó[¿ÆﺃÅÅ66Ö¹ãŽ;ȲŒ'¾ùzø“Ø¿µÕUn¹ãN>÷ßêIöïß˾½û8sún¹õfî¸íV¾ð×ð›Ÿùgx¯¼r`4š°³=dks‡¥¥‚_8EQôèözlmïðÌ3ÏñÁ½ŸÃ‡syý2WW¹ë®»¸êª«8wî_øÂ¨ëšÏ|æ3äyÞ¸“%_üâ±ÖòÐCqàÀAöÚÏ•µ‹üð‡§xòÉï°¸´ÀÕW]Ã]wÞKYÖ(™3Ì¢5¬^¾ÄüÂÎål*ƒ%ʲ&‡”5/ýøÁéÓ¯³¹±Åd\³zi%$ŠÊÔìßwgk²NJê3ssì9°—q5deÏý~Ÿ÷6÷™iÜšÓ¯¾†spüø7¹pn•ì“ìÙ»DGÞÎåK©ê ½~'ºÉM©™¬)677ÑZ333Ãh4"4‘)JGǽsѱ¿yá½ÇxV1ý7:êu“é\cœÂûè~ìÆ™Ô¤iŠ÷¢q®†&&EÅûØIlð¤í÷VKKKKKKKKKKKKKËO†°Z×­ È;ÄaÚ8.ž¤SÇa‚àâÈyðïBt•¢£œŠRJœÇÝ£ÓM_Bªªb2)éõº„àHÓØ€¥½èz¬EÖ!Aˆ©o@ï-[›«øãÒ¤@H .ŽÔ‚l„è(^4‚GS1.º6 ãñdúJ Fãmvv†¤IF¯×¡,+¢ioŽ‘V( ã‘E)K]9Œñ9h•’w;L&BA–'ï±Æ „¹ )Z+„H°Öàœ…¦©>MS„ŒÇ%ÖF5x…4¢wŠT[ %y]‡ÑM3•TÓ±ü(Üœu$Yo¦Ÿß9㟒$‰ù¥õ´¬Ç!°8Ç«ªj>KTœ“D!e¤œ7ø6ñ b*¦{ïcÄ@’L ÒºÝe9¡´%UUO¯oc~mðˆ‘Â{„8¨*‹!4!¸¦+ etQ É´´+Ï3jS±µåQ*g2ñŒÇ’t–Új¾ð…¯röüE~ÿ_ü>ËËK,/u™L†ÌÌ ¸ý¶E³3$‰¤Óɹ¼~ž“§žã{O:°Ä;ßy;wßûž懜xæ)æsÜ~ûmôzu0ÌÏç|ä#ïg~vÏ}áß³¹s‘Oú— Ä{â†ë®ç!øö£òÀý÷òì³?à¹'èŸüÄÇÙØ¸Ì}{™ÌPV%þð‡ùçÿõïóÎw¾›»ï¾‡¿ú:›[;¬­]Æ{I§˜AɜLJ~ôc€ä…NrÓÍ·0˜çòú_üâ—¸ûî{Ùw`?§Nâ+_ù ×^{-üà‘R²¾¾Î³Ï>ËÖÖGŽáºn`Пaccƒ'¿ùMÞ8sšÙÙz÷»Ø¿ïR*ʉÇÁÂò2Î;¬÷ æ™_ØËêå-.­¯±¾9ä7ÎñÌÓ'H”f¸µÅ5‡¯B*KÒ±Ì-õ¹ï¡[ôçQ2Æ{t{]ªrB–+º39ÃíM²¤Çdâèw;Ä”Çúú%æçgY»´ÆÞ=ûÙÚÚ¦Ûí󿙳j• iÞ¡Û6ÜxÃn6nZÅGÿÝ¿!íüÌO¿,)B²}ëvž~ú .]¼LÒMHº]vÜy'a5â™3\<ÉéÕT¢˜ÆÀüÀ‡8zôe~ù—ßÌÉSçð¼V;¡ÑæÚµf®ÎEU6lØŒçûœ={ž›o}õZ‡yí×]ÇîÝ»xú[ÏðÄOð¶·¾•o¾™«—/sîÜ9N:…çyÜrË-¬Y³†¥¥%Ž}±ÇZÕìÞ½‹ÉÉ1,–ÅÅEF†'ˆ#Ÿ¤ÓAàG „¯xìÉG8òâ×9~–$…"‡$Í8°oìfrbZÌødĵùW©×« <®]™'É2¼XTAÅ'ËZI-2êq´O{©I¡s”'é¶ZŒ RcЬËäø(íN—­›7°nÝ:Þóïâà·ûw8xðz>ô¡ç)†{ ·ZML£1ÈÄø_øÂ_±0;χ>ô!yõ•W¸tégΜaÏž=lÞ¼)%GŽáÌ™3AÀ¶m[Y½zå ––ˆ+1ú ¾Qä‚n'åø+§YXhóØÓÏsï}ߤZgzÕVæ2®Í.159É¥Ë%Ç>ó¶m”^zåÞöö;8xÓM<õÌ“ÜßC`ãS“DQ„÷'ŒéU#¹%mÍS‘aè34TGJC–,±¸8Ïôô4‹‹ dI—<é‚6 À˜ŒŸùàO³eËzèa´ÉlÐn5ÉóŒz½†Ö† .pæôqvìØI­V§,4ž'°B’¦9aè» –Þël™- 9BD¸­¡ÃkKŒ-Â#ËRü4Å Ü•+æ”ÄhCa Bh¤cJ”ô0Ö1¤Õ÷ȇÇ2f¥¯¾úꫯ¾¾ß¤µîè]+‰þ諯¾úêëûJËáÈï)cuyt¼(\qQ³ÙD)EàhcȲk¡^‚ÞX¾µDö’Œ+ÅFB!Æ.±s×n{ì ‡FѶäþèØ¸a#÷¼óG‰+UžxâINœ<Áu×]Ç»ß}išñè£R«V¯bß¾}LNNQ¯×étšH)©VëT*.]œáð¡—yõØY.^˜Ã÷*òÙ/Yšx‚N{‘²L¨ÕBš‹‹”…AII$ÝF4X.3º6Vk|_öL?ÛK–\!Žc[€p8‚8ét[„•f§I7i#D‰.ufm.s£K×üm¾’eJ ‚J€?ô1ZÝ6Ú”øOPxî‰o2>6ÄömQÊg-|i¢ÀšîýI‘⸊ï{=«!IªÕ*yV |¤õ©Vj€ ÈJ<G1:/H“ÄU^™’²È°¦À÷@ M™ŽÉj eY …!yÞ!é¶ñ}Ih]’& ¾'ñ•Âê’RYFäxž;¦2Tk!çΜ¢âÇD¾Gké õ<ïUj$]‹!YVú>˜Œ¥ÅY„T(OQß{†¹KßfYσ$m’eê)ühœ¸:Ä¿ûØ¿çãÿñ[¼yŠ÷ýôs×7rÏÝw±}Ó;7M³cÓZVO±yó:ÚE.]<ÃÜÂ%Ö¯›à¶;rç]w°gߎ¿zŠ?øƒOÓlÎs`ï^jlX·žsçNqô¥ÃìÝ·‹J¥ÆØØ*¾ùͧgpdˆn²À@ݧ^­a­åcÿá/8pÃux¾"ˆ@%KK‹¬ß°ÖR›Ê@ øÌ/-R9õjƒ0¨†,.t¹xùãÓ“<øÍûyÓÁ}¬Y?Ê'ÿä¼åíogrz þ…¿â-o{ÇŽŸ$ŠbâjOþ§?ág~öýÜý®{˜¹2Ç—¿ú5.ÏÌð¡ŸûW®ÍðüóÏP ƒƒU¶mÙÄ–Í©Vb:‚ lP” TÀÉ“§¹ÿþG¸ru–ÙÙâjn¼‰Ûn¿?ûÔg¸ãŽÝüÿÓ?çï¼™·¾õzöìçàµTT‹¼{óçϰØì0ŸX~á—~‘›Iš—˜½ú:¿ù›¿ÈîÇØº}’oÚ‰±ǿʡCGØ¿ïzÞr0öIÒž¬rüå3œ»xš×μŒõ,(Ÿ¨˜2q[,­V‹JT¡H ¦×¬#KRΜ<ÅÅ‹opâÄq®\º@µ±uÓ&Ö¯Ù„´¬¡È»”eB ²¬I‘·(Š.YÚA—žHzeU¶[¢(iÑeŽ.Ù¯”c>'icJÂ@!¬!K;xacb ¤%¥ÛÈ0&š0¬b@†;ÿÎ7ô<Ï™ŸŸg||üüÃCô˜Ó}õÕW_}õÕ7V¿óó±( ˜ššúÿõ;Úí6I’0::еöô¾öÕ¾úꫯ¾úÆêß–”’N§Cš¦Œý¿«¿ùÏ~ø#N‡,ˈ¢ˆ(Š(Šß÷IÓ !À|ò¼Ä÷=êõaP–ßn€O’„<ω¢ˆ0 )uŠT <éLOív)ÃÃC!ˆ¢ˆ ˆÂ(QR‚4Ž+¨$Zç”Ú±X=O–$Éðƒ)<Œ.%¦|?Ä–i–R©øØ¢@JWH#•¿¼ä¹+ŽRJ¢”Ä$žïõФÖš•'­ Ë2JJW¦d Aây’²ÌAJ¤rÓý^µrÿ¥·bZK©½ BHg>c1ØÞ±4hk±<ß'ŽkÌœ;‹)3®¿éz´)h5çQR¸4gY KgøZmÐ¥¦Z$MW$¥y^P«UévS|?pœHϧ(r’$uØ?$ðÍýßx‹—.³mÛn¸á&FGÇXZl2:2ÎSO=ÃRsŽ÷¾÷4[3,µfX\ºÀÕ™“T#Íš‰7Þ°‡M6p~æ g.\áÀ]¼ù–m¬š!MÛœ:}Œ}¶3:ZgÕªIvïÝÃÆ›yõø Ž9ÌÆMëÙvÝ6öïÙÎäØZnùÄÌåʰgÏ^Þööw25µ†ÁÁ1„ˆi63NŸ¾ÈsϽÄK/½Êå«W©ÕTªU†ÇÆH“ŒÇûínÊàà(ÝNÆ—.óK¿ø‹D¡¢>PaÓæ 4˜œbÓºi†kLLŒ0µzŠkó |ë©§(²&7í߯¦ ‰¢{¿v/Ó«W³nÝFŠR316ÁÔªUlÙ²‰C‡qøÈóLMNðäãóå/ÞKk©ƒ]ܸ—õ73=µŽF„¯¢ ©Ö«„QHµZ%Ë\aØðð0Y–Q­ÆŒŒ302F³°¸@­:H‘çg¢ ”øŒ6„A„„…ÑC¤kÑ¥FkÀ‚”>¾~»|ÊJ” žD›]:¦²§@¬\à(%{¿Ï`´îq•RZd¸£o¬öõƒ|šô_û ìªï‰uè¯G_ß­ç×ÛçPßXí«}õÕW_}õÕïš±úóï?ð‘0tfƒ”’ VN8<ÏCkã°†#Ȳ Ïó( W–¤zœÐJ¥Ò+r]x(O¸vváîÖ2?¿ˆÖšzm)Ƹâ!¥\ñP¥RAë’<ψã˜$鮤c»Ýn¯H ËcµÇütU2A µ¦ÛmG!Z—…Áó¼å¢.%ÑZ÷ÌU—P].TB P.ýjÅ _Ö÷C´v øIQh|/Dz½B)!ñ}Ç«H‚ÞÏ80¼ãº¾F d¯ù[X¬6m>J…ø~äj&ØŒ¸ƒHå‘åE/…ë!¤OÅT* ªµ–––ð<éüU IDATŒ×Ó4M‚Àï•e• \yÖò×\‘ø¾ãBZ¾]ªÕívÉs·æB*’nÒ+Ûr'aÆò¢$Ï2ÂZË | APÁóŠRSj‹T•jRk éyX)”Pt;m—æÐFSo `4„~„1)Á˜‹ÏÒJw̼zÇ·Z¯‘—%KKKäeÁ¹ ¸xé §OÏñÕ¯=Æ‹/žc×îíìÞ½—[o¿µ«×pÝ®ÝlÙº•ë7²eËn¸þti8vìe®\¹Lµ3<2L–$LOMqõê5æææX¿v-¦,Y½jšoÜÏC=Ä7¾q?·¼…z£F½Vçð‘#Da… 6°°°ÀÙ3gbh`4-𼘑‘1N>‰µ%{öì¦Ñ¨qúäi°P­T9{þ<µzûkÖŽró{xê[ÏñÄãOðä³ÑM—fl|5Ö$LMNWF¨Æ>¡:Ež“$Ž™œåùÊ‹-5yš€pE{¦”Žï(¼Às0JÑêt°Â%¥³¢¤(KÇlÊ] gø{~ˆòB´,+ÐFn³¥ÐAèø!y^Rš Y¾v2Æ µî]ø ʲ,~à!‚¾±Úט²t®@2G™ÎÒM/ÑI/’¦—ÿÖ-Kg ]D¥MD¶e ^Ü+Œëëï¹`[,Pv®ÐI.Ðý;ÖaùV¦W‘Y U¦à•¸¯(ûúÛJ3è´ ]¤l£3ÿÝÙ—È›gY Ï ðB×ÚØ7VûÆj_}õÕW_}}?«ÿüWïüH†A°’Útíñ]ʲ\AXkzÍñrÅXuôö;.꥔4 ÂÈÇ —ȲÖ83¡,&Šbš\¹r«W¯±qãF„ÔjU|?ÀزgFJ²¬ÛK™Uzãô. éù>EQ’&e¯ÀHy ¥IÒ%ŠC¬Ñt“µÚÙû¬†J¹Çb1+'XR*<ày»ÏE龿ùèRcŒèÝ­]㽸²,ÜñsI5Ežç=ælˆRîB#ôFgØµÔÆj¤xž‡ò|<壤3=%Ž£Ún·iµÚøžE ¤.-F[ !™Ûí¶ñ|ò$~„®JIÕKâz=óÜôظyž÷îĪ,‹£¹,Éç9Xƒ§~àER¹$«6Îræ²ûÇ‚®õ\kW*…u&x§ÝÅ÷}Ê¢$MºÎBò¼ >РÐ%y–³°¸Džk„p¬IǸÕaÑ¥E…Ò ‘Ò'Irš­­v—,+©Ö I7ejzÖ6øüç¾Ê›Þ´ŸUkÖpþ78|ä—.^â™gžäÚÕ«LMOS–m`x Áž]{À‹/¾ÈÌÌ cc£T«Ö¬ZE\ yྯ±wïn昚^ͶmÛxà§9sæw¿ën¾ò¹pá"“ süøqjµ˜8òBWª$IÆ·œýö³×f™½6˺µëQ*`bb’¥¥9*Õ¥$a#¥G’ž}ö«1Zröì6nÚÊ…ó3ìÞ}_ü«¯P‰ëüäOþÏ>û<ß|ì1¤ôغuei¸é†›ØºqNÊ¡CGyñÈK<ñä3>tŒ7.\ÃóL¯ÚL½1 "¦ÙZbzzœñ‰I—ÚÜÿ<øàÃ+†ÿï}ôH :ü¯}¹ùkaÀÚ «² µtÁz@‘u±Æ"UÌñWÎpôèKìÙµ“É©Q„ÔAÀ}÷=HàÇ  ‘¤K(:%vc¯œâð‘çùµ_þ9nÜ#oyÛÛ øôç¾F7YdÏ® AÚjɈnÚFzk,µZ0®®äc–ÓÜeY8Ó_÷Šø$„•**Œ@kò¼Àó|¤T^ØK—zø~ð7RÜ )<” \™žð]RUºM!–’0ôQÊ#Kf£,M/áîpÆ”½×”CXë6 dx]ßXíëûðìÇ€)0&w¬òåÿÚ:WÍóÎSs´óËtòò|Ž<ŸýŽ[‘Ï£ò.A–"Ò¶Ì0AƒÁØcr¬)V»×w¯p±¯•…ÌßXƒåõ(À¶å<´¯’wfhg—þÎuÈóY²ü&_$È»ø6ß`cÆ”` °¦·}ãæý3¯ÓÄ.Ì@ëuÒ…£,]{žÖÜ‹ä­s¨¼o@„ „úoc®öÕ¾±ÚW_}õÕWßXý®«¿ýoýˆ”n|^)EEÄqL»Ý^ïo4Î8ÎLÓtÅp]f².›²Ëcåe™öNØ I·K§Ó]Iªž9s–gž~k!Ms6lXO«Õ Ûí¢&Žc²,¥V¯Òív0½±y—  ÒC) RQfI×±E•”4—ˆ#רðÒGH±i×˳º½ cŒ»iCUPʧ,KÊRã)åFم縤ʣR©õR`¥ã®‹¢\I©:䀢^¯#„KûB‰ç•”:#/:h#„FHÂ`¬»?Zkò<'M–ÅÒÒ.\¦^ox!Q;£Ò*DÏÀtç]šN·ÕK+:6Aàáyiš¢µ+ó|·–e®)Š¢g”=3½¤,N R©I’¦iEë’­EÏ|õŸ ñ=7íLÚ€(¬¦E^R©T‰¢ ei\:ÙóÉó|åo4[M‡†È Ç©m réÒegâçAôP kí$¡4.ãy1E)( ¨V˜šZƒ§"æç–˜]¢ÕNøÒ_?Äë¯_axh„m[7³oÿ>¶oÛB%öÂðû¾ÎW¿úU®ÎβiÓf/ÀWŠ عs;N‡'Ÿx‚;vP¯×Üx9†'¾õ8·Ý~ÝnÎêÕkغuŸüäŸÓn]åæ›oe 1À™³§™½6ÇÄä8Õj…"ïR«ÄTªu:.íN!àᇟæúë÷1=µŠjóÂó/080ˆõj«³3 `Œf±Ù¦ÑÁpôÅã4[ ÓS«¸vm–éé5œ>sŽÇ{’ññ)6nÚƒ>Hš¦lݶ…Ûo¿õ×13s™î¯|ñ+<öø·øÆ}‚t»%YÖzh£xñèk<ðàãÌÌÌ1<\ã3Ÿù¿xêég¨Öª\·sïý‰B­Ö ÛM™eÿþëøÙ÷¿Ÿ;î¼;o»™gŸyšC‡Ž°nÃ:t™R«xI“ÀSH«˜ââ…Ž;Å@£Ê›nÞGQth4j¼ðÜQL)¸ë®;ÉóE*5·y²zr-Ç_}•Ç?ɺµ!{víaÝÆM¬šnPè6?ò$IW³oï6%Y·``¨†6` ㈤ÝÁ«Ð{íK) Ã?ð1ÆÆ5²$¡ÌslY K5ß I“ !]B+(¡È5Ö€µ.¡®¤Rx*@—c¬Û¸ –‚R væz7Á‹ïDQÐÛŒq›Aè60,/ÚÓ7VûúþSÑÅ6Ï“¶N²Ø=I§{–n÷ÝîëнŠ_äˆJŒ¨¡âIÂx5q<ý·(ž"Чã)<QzY‡Åòu:ݳt:¯Óí¾NÙ½ŒŸ4QVBÐèûªßi'aY¤Û=ËÒâ1:3t»çHºç°køY‚ð"nüëðíõ˜&ŠÇÂ)4¶³D·s‰ÅîÚݳèî ^ÒD¡ ¬õ îä2éòÖ1Z—¾F«}Œ,P”µŒ4èÖiôâqBéÕÀ¯üƒ›ñ}cµo¬öÕW_}õÕ7V¿kÆêÿ/Þö‘,Ë7SJNŸ>Í믿Ύ;èv»+&+¸qÖ0t)­,ËV.¬=Ï#Š"Ò4¥ÛíöN(²Þˆ­¤ÛÍHÓ¬gH‡Ø·w?6ldíÚUH)I’ËH‹¡(rÂ^‰RµZAJÑ»¥<ºIF:¶©5Oyøž8³Óó%Vk‚Й°Öºb%`wP–…3…%+åRžç¡K—æ´Ö®<ÞÈôªÕhÀXAQZ¬ð@J”çã!V€.Óž)#IÓ ­5RJŒ¶ÄqLYÎ U ?ŠÈÒÌñbmo5 C¬ui\c ž§h4T☹¹9T/™WkXcд¶(åFA!„"ÍR¢(&ŒB—b)¡Ô% ž Z«àùy™¡ÁÃ=ǹs ­æe™R­Üpý>&§Æy×»ÞÅêÕ«¹rå <ú(‘ï3<ÆZÚ.N%®ÛyžP$I—n»ÍèÈ8 ‹‹T*!R <ß§R ÏàÊÕ&gÏ\ KJ®\½Êµk³,..òêñclݲ™é‰)æ |Ÿ²ÌÈÒ./¿ü"GâÒ¥ LMLrËM·ðCoy oûÛbfæ y^2?ßd||Šf³C£1È}÷=Bµï¼û-ìÞ½›Ý»÷pë]oá‹ùΞ=ËÐÐ 'OždrjŒK—.²cÛVlž°ß~y‰çž?ÂÝï|‹ ³xÊàK¥*äEÈððž{î0cãƒì?° ?4H!xâ[‡˜ŸkqË-7qáÒ«Ôj’v{‰¤Sâù Ž¿ú"qXðCwÝE{qžÚ@Àþöó⋯rìØYFGªlÙ¸…GšwAj@’e¹{=÷§J¹÷´²W´·Ìl.´ã  RyÄõF¼^Âß`ñ¼%= ?ŒÂ!=ŠÂP”š$I1‚0&Ë Œµx¾ÛH‘ÒÃhCY¢°BÅQ„Û%±+÷+¼•yPÙ×7Vûú^?Õ2Šb‰<Ÿ£(›˜|Q, M—\,‹Åâ˘0FÔG‘Õ1¼p‚0'†¿ã#Á*DxU¬õÑRÑ·ib1x,Mfв….:ÈÒ¥áþy|EÑ$Ë®RKØb‘/PæMò2ÅZ½RVØ€@Ö•!de /œü\‡¿¹~0€ z ÃÜ’Û‚œ0øV „‡5EÙ¤(šÈ"C `¥T´¯ ïùÒK$³OS´.A8„?¶›`t'~4„ÊZˆÎ è áÈêBÅÿ f|ßXí«}õÕW_}õÕï–±êãù9¶©æøñã=®dddd †!Ö”+eVqSÅJÉÕ²ÇñJy‘”n¤uhh˜8ª‘¦N—¡¡$í‚¡Á!¬-‰¢èÛ#úž3OÓ4£^¯¬<(ÏóÈóŒ¢è¢Y椺‚@îàê¼7¶n±Æ"Ï÷I3½².‰Z’e9AàjÅD,ŠÒ%/@ëòoŒÄk²,eb|ŠC‡ñàƒP9·ÿð[zf®EöŠžNVP "LŸ „EÊ_˜Ò•,%I‡JF!Zg/`2´±` ¬ñPžGdiÅR‰*C/ X‰ÅR”Ž)Ñ)ð}0pŒÜ ÉÒœ4M)KÇ‘ÕÆBî8¹ÖZt¯Ô˃0“` Z»c&pÖåõÎÓ”$ɨÔj½¢.KQ¸'·)Æ8F¤Ê•’%)H‹!ž¯zÇF Ë’$/°xã‘g KÜIµ,5™p÷_UgØ^œ™á+_ü yøI’t‘é鵬_¿†ý{°nÝ:†GFð<…1!Ö*šÍEν~’S§sôð“|öSŸdzõ*n»ãöìÝÇ]?ôÃ<ÿü ¼ôÜs<ñä“ÜsÏ»X·z¥Õ¸þMÔC<øàÜõæ;ؾu7Üt=Ï>w„×ÏfÓ¦­´;KüäOþSŽy™ßÿýÏqðàA&ƦÈò„v§Ãš5ÓŒ“¥9*ð gRŽ ãygÏœÇh…>qTenv†‰É šKK$y‹0¬ =Ÿ$3ø~C‡¾ÅµÙYŒ–$IÂ{ÞûŽ?η½ŸN’ròµ×h·Ût’67l ŽV­YÍŽ[ñ”B 8qì5Ž=ÌðÈ0Q³k÷Ö­ÝÈÓÏ>ÏñãG{…hð¿ý¯¿ÃªUlØ0ÆØØÿøÇy䡹󮻸té"¯¼ò2ï~÷ÝìܹO|â¼ëo¦(ÆÇ'xïÿSþøÿ‘§¾õ"7Ý´•"½ V#=ÀŒOŒãÍV!5ÍÖ,¶lÚÂ}_”ZµÎî];è&WX˜oa+šµkÖ04Ô ,3”g±ž%I[h¡xÛÛ~„?üø§˜_Xìm T)²¦Ð(eP2D›’4uèˆ8ŽÃÀ•ãM·ÛÅó\y^X«“¦˜¼ÄS!ÖjLïùíØËϲ‡PÏw:­ö"‹KM¦§WS¤ètÇx6„Pøž‡ìäY E®16Çó||ßC—î¢Ê•ÒõÕ×÷ªyÖj »Hš^¤ÝžÁ˜’8¨R‹Gý Há>{Ïk<„À@üÿoCÅ µü8¤Á–å)¢@Ù.Y¾@³ùÆ|bí:DeêuðBZÐ)!œA²\Õé&« <´Ôn)c£îxäcJ”/1ÆR…C I¥R©”e‰ï4›Ò4éq©•Ô°”SŒ–X#WŽÑ!Z[‚À}¯ï‡RfA@ ¬ Wvŵ.\ÒÕ± zx‡¢÷wWÎã9ôƒ+­ÒX+0Ö}¯xdÝ”ÀVŽcú ú Ê2'IÚ€F*¾GQX‚ âƧ­Äó}¤gHÒ%ßwaWP«NÐiwùô§?Ãç?÷&&¼ùÍ·sðà›X½fšN§µÂ¶Â0ŠÈSµ’õkÇ9°o+Yr;YžÐIÛ|á/¿ÀücDÕ:ïyï?áŽ;ïbóú ¼täŸùÜçyûÛßÂ-7äÄÉÓ¬[·½çÇùÏŸÿ,•¸Æøø»÷îá«÷ÞÏÔÔc4—ÚüÎÿð[¼ÿ¿ÌG?ú þõÿñ?Óh48þ6®A I’¤ŒÖk  Í3¢È”¿qa†8jö8 K‹’ЗXcȲ‚ sIO‹¢Ý)8sæ|Ïð¶8p=_þÒg¹xa†¯½ˆTŠÛ·óãï~µFÏs¬Ý¥ægN½ÊÑ_di±Í¾}x÷ý(ÛvlgîÚU>ÿçŸçcÿáwÙ°a#·Þ¼‡;w±cû.Ž}™·þЭü§?ýcH;mv\·“,érþìëŒ ×Ù±} ›7®gnî2‹ ×X½q‹ WY½z5»vàøkgÙ¶}¡TX¡ =m%a2»0‹æHqìQ«G\·ó:þâó_'KK×i!5ë×O3P™Bª êõ­öÖæHÏRè«$;vì@—†sçÎqõêU¦F'1:ÇÚŠÂW€¢È©j­ím¹Ñ{Ïó¨×ëX ¶(À¸çÐ{“¢Ö–”V e€µmzÈ%žÇÄäZãÒ§%Wúg5–¬DJ$.ýÝÃEFYjJOãy’¢È@˜~B´¯ïaiŒi‘e ˜¼ED,” Ax¿ŽˆÇPÞ8ŠèïÿçøH|"êÿÅ?,Kî3¿HºD‰Hæ)l‡\DÕAˆàŒcrÒô E±Ôû¼m!eˆ°A„ƒ¨`Uùn$Ûà q¢*>ð·s¨³ˆ¢‰4 "'/®R´ÛÄ^¢Á~‚õõ!o’Ì¥;‚<ëИÚNeüMÐåž>P!·ŠüÚ3”K§׎P ¼x­+‡ì«¯¾úꫯ¾úú^6VÂ0¤ÙlÒív©T*H)iµZ+cðnT?q?Ðãk.É/³C—“ŽËßïÌHO…Ë! —NMÓå ‚ ËÛ(å¡Má8®B ­¡ÃÓk²w)gŒ†¡" C|ßsfª°ŽŸÚKzd™û¹<Ï‘žce®U{ìØåÇW–ÏsI‰<Ï{ãïçÒcÖê6©Ö%N—¸¡¤ÂŒ\i4)PJ€€¢(z#v®t&<¤‘(á Ã(pŒÆn𥆍R%ªéƒM0Ú"¥Å cŠÏÞýn½ó.*ŸýìgAHn>ø&º«V¯ãÇÞóÜûõo𡼟v{‰©é Ž¿z”Ûn E‘±jÃ&~ë_þ:ÿò·~—Ÿúé#ìܹ…+Wfxíµãc˜Ÿ[drÕ$ÖõÚ ÒD€“v¯’åcã£dY—j%"®Ma„344Á³Ï¾DTiðü¡—¨Æ’R/Qè&ïù‰a Þ`ýÆ lZ¿¥iž±0¿ÀÓO=͉“§Yµjš»ßñV&§Vá‡W¯\å_ÿïÿ G_:¦Më¹çžfÝšõìÚµ‹¯DÚÕ’?üØ¿¡1}–ûo_ÿµ_åÞ¯ßËÔäÝŒŒ6¬ÑnÏÒi+„Œˆ‚aö8À§>ógais²"E–)Bf(Q`”FzmsŒÊét—E ˜»6Çö]uÆÇW1УèNÐêVßmº(§¤{¿QÍVƪÕkH“©AP¦Â¡4zïUÖ–dYÁðpƒ¼‡þ°VôÌWEiKŒ‘”e@¢dJkÀ ,¸D·Ñ#ùvÚÊö0(–2u£¶nS)ÅM”EáÊsù÷7Ñëu8í´=¼ö†ÿÀi§œB»ÝàØÑC<þØ=œ´cŸûì‡X\\‰€«®º’«_ü"nþâxlï^^ü¢+¸ãŽÛk±cÇ6–Ž273ƱÃûxþÅ;Y™_W²{×.¢(Á:Iœ$äÕi™F9'VŽbl!YÑ#+—Э©éYÍ6Ui Ã+ ý~“¶YY-A8ÆÆšD‘/°ÒF!I"Ù²y ÆfrjDE­–`…ŵ!4µZL‘çk‡É|I–¥Ãc<#b¤( THUV:ôÇœ³8Wa÷m„R©z„oÞÖÚ'ûóÂs˜“$Âë_Ð?ঠ‰Rb¸ãJQ«q­†b;F驤¢8Á`pªZFHPºMÜÞ†¤†Œ'@ן“L˱ò´·˜6u7 ª Ìê1RŽB8N½¾ ¥ÂúÿO3åkØÁ R³B.+‚ Iž‰Š(šEëÆ“·mBRCK=$a¬hÐ"r%•«È²Çfžz})›ø$ñÈ\}ZËXèuqËG1«¶N¦±õ…„c;ÿ4¬4ª6IkÇ%ôåä‹ßÇ.íÇ5ÎF´‚‘¹:ÒH#4ÒH#=µÕǶÍÛ˜›âÈ‘£œ}ö9<ôÐCl?ù$œ+i¶Ü€Ís›‘2G*͵¯¸˜?yË8|è8[6ŸÄCß¿—4ÍÈó‚ÕåUòj@UùR³ññ˜SOÛAoež^w•Õµœéém9¾B½Ù¢2–¯|å›|ñK_ãÑÇpèP^{ ]x>Ï{îù¬®ÍÍ9ÁâÂ÷Ü{'wß}““ã\ýõX ›ç¶Sä†Û¾ußüÆíÜvÇm¼üº«¹úå/gÉ=:EÊ¢Ãôô$'Žó‡øû4 ž÷ÜKÙµçt„r|ãÖÛ¸ésŸã ŸÅéÏ<ƒ·¾íÏøåÿô툭[OF«IÊ*¦WV™‰{,.,aŠœ"+P² *°8gx|ïã>¸À³Ï{Sã›_& ú•amu‘¸fÉKGÅ8`­³Ì¡Lai6›H)Ȳ[dt:+h1F– ÒQÒ$”ˆ Dˆ gÖ*B×Úäý|ãÜ£”?Æt1ÎBšfà öxr¸"†hßýæY¹RH¤ò‹ëç0©$‘ üÂPnQ@iéÏ3Åz:¿†ÊŸ/-8|ù]e ¡Ðú⻲dé)à˜à\AYõIÓà û(Ë.Q4K­½…ZmÇSo“UMDl"²¬$O»U¬c„ªŽTì˘žr®¢¨V‘ýdwÜ.RÖš´Úg$[Ÿ‚[¬€&QÔ$ж²ìy÷¢Z¢Œ,°¢‰ÖaÊy¤§£œ)¨ºó”+û°f•¨½™æ–K‘AóŸùi ê4æ.Àô§X¸‡jõUëA” ‚±Ñi¤‘Fi¤‘žºÆêÄØEn°Â0Á”ÐnOÐï÷) ‹@c¡^÷Bq oú ¤tâG-©¡u@¿—!¢¢Ê΃,Ã:Ÿè\ëZ­&I?+Ð*¦ª4µ°†PŽ ˜¼OžëYæÔ’RÇUNÕ6J¬’¤Î Ÿ±VôiµÛ Îè0@Š¢›ÒK "ªªÂT%ýï|¾üÅ›ÁeDASö¸êªçóÞw‚ßÿïïá=ùg<²÷Qjµ«r)$q¡CA¯œµî>N?ó¥?ñ(’®Á©9Lò¥[n㦛nÂVSScüäu/æ¢çœM³S#–æÅŽnj¸÷¾‡8v|ž‰É&×_=[·l¢Õ¬Óï¥|ãë·ðÉž#¸ê%×ò×ïýc†•ÎÊÆñg%Ÿÿܹó®{9åÔ3yéÕ/£ÕjñèþÇÈN¬ðþ¿ý=û\¶nÝÂÊÒ­fsÎÞCV¬bJÉüÑU¦&gè–ã4&$†‚™é„$€ñ¤í‹ØêM —á*ËIs§Ò5›g,ºRDf’X7±eI•¨øYÚ&ÇÉͪf˜™™äèþE®yù °Î±¼ºÆÌä,‰Ò1eÚe|¢ÍÍ_ûíÖ6.~Îv²þq”Ôh¨ÝåaÒ$Šké°¶øÅ¡Ê›µB(TQ˜’²(ÐZ‘—©/鋜Å/®Pb…À5Lã`­ (2ÂH¢µ¢,s_’åJtRù*ÎJ¢(!pNÄAP–Up%F ‘ž êQVG8rüh2ÖÞEœ‡m”j=õ7_(hn"¬MÐv9i¾Àêòw¨ÛˆV0ã{ j>-Þ‰¢\åÈügH²˜Iy ­ÖÉØf>¶_ Âp'íÖ"]‚¥ctí>² dbâÙ„áÄèp{šÊšÝî]¬öï¤?µ‰¨=û/,XÀ"ØŠ6ÑI÷aV¿E{¼EÜ«#4ÒH#4ÒSØXm4ôz¾@Jkå©kž1èGñ3ªÊz8&; JQmX°R ÓW~L¼^¯“ç%•­?VWUÅFZ4©Åh£”ç¶6 nÔ0•óÈ€¢ÄZŸtôÏ©P* (|9R%T¥%©ÕÁ ¬±cïUá9¨UU¡uÈ †!“S(©‡cðÖú>â(Ðéîr­Å:‰߬ ¦(X[]£V«c­ObšJ2¢(&‰ÒlàŸ7 °ÎbJK\K†Q=d¸JÏc¾œÆ˜Ê§N•¢4%EQ†» uHD¹ÃY‡§¸ œp'‡EVR‰aê­$ŽÍæpT˜V¦M)±®"5…Žù+aÑA(¢(A!¢ò,Ý(ñEc{vŸBR‹È‹|#ÔšÃB)gRþ€™ºŽj„BH­<ÕÍÏ£4Æ0HS¬-°V€Sëcÿ8¤´H-pÂc ¬üñ½•«_v/¼ò òt•{î¾¼Ÿ];wqÕË®"OSfgg@:ð ßZ’fÊ #â(¦ßï#CI«ÖÆ”½^ƒ‡:ÌÌÌ0>6NiRö:À5/{1c9þâío£Ýšäºë®åÿä÷øÚ×¾Æ/|>JivìØÊ>ÈÎ]ÓXã¹›Çaz&¦* Ó³›yñ‹.ã¯Þÿ92ÏܦÍ9~ˆ(VLNO²´t‚ɱiüÞC z‚²TDaÌÔô,ß¾ý;|ù«Ÿçæ¯|…ÊÎ9ë^ñŠk¨ÇšV3 2=ÂБúì?p„}fmµÏɧîáÂç\íKÍTD6ÈøÊ·ïâ3Ÿü$cc-NÞ¹7¼þçÙ½gó GÁ5ÐÚ³DëI¿¿é&¾uë·9å”gðš×¼–;Nbß¾ýÜ}÷=¬zÜúíï²sçfš1^zõ+ø•×ý'~â'¯¢( zœ±–¡ª,y.™˜ÜÂʪeéÄq(Ök7)òœ¨¦1ÆRo6˜?2àðÁCôz†=»7S­ÆY?#dÔk‚±ñí±1вç?£Ò’æ=Ò4c÷îT¦`||œªªÃ&yVpôØq^ò¬ 8rü8_þÒœyÆ/#mÀòZÙ™6MR 7nôŠ2§(<ÿ¹–Ô(+C®ÒZãè@SµZâ?Ë•/¶ÓZo Œ0 >ÐíÇ1BZŒ©0ÆóŸ¥ôˆgÁˆ’0I¨!çX`>¦ / ””ÈQyÕHO¦Êòe°¤íëI‚hœ8ÚNÌ<2ÕB€Ž:&p+¦ì¢Ó>6]&Õ#ÍQ<ƒ”áSðT87 ÏWHÓEB=FXŸ@³èú4D<- <EJMÆà4¶2h+ÐrÀ`°cRâxv”\} ©( :ía !MSÆÇÇ1¦¢Ûí!Tˆ.¬í¥ÊŽ!Æ.¤t›étHé±^ÿXc,i–A¿I\;‹<¿jð(¦|6YaYYš§^¯“$ +++h­‡÷9išÒh4¨×ë£7h¤‘Fi¤YkÉóœ²,_:¿Þƒ4Òl¬æy†svã^#ŠBƒAx3ÀÃ)Ë‚¢ðŒR­5Jú›!ñð‚¸2~\VáK£Ö9Ã2(!õzk Δ¥¼ùæ\‰±%Ö8ü‘°yË ×ÿäu|òÓá‹Î'Î=ï<î½ïNªÊ0=½™­[·Óét™mPV9y–sÁðÞ¿ü"ûßÏ–uzÝ”’Š¥ÕU1ypøà€SOyÛ·žÉ±ù#¼óÝïâ£ý2'Ÿ\ãâç\Æe—]Á¶-Û‡¥a)EYÔ"xà}äQ"]ã”SÏ`ÏîÓpº`y¥ƒ&ba~Oâ³|õ«_çßÿÌOòŠë®¢Ñ’Å*…=Be”UH­Vcuu|òìÝ·—½üå<ïÒËpHVWW9pàË++,,­Ñï¦\yÍ ˜?‰/~þë,.­pö¹§‘¦ÖÄ(]‘Ô|ºrqa¬èÑ 8ºïišÒl6XíDiYeš;'•UÉé§Ÿ>übVV–PºÉÄÄÎI- Šî»çÖ–”.8í´Ý8[Ñl6YZXF×ô²ýÁÏ}î…XŸùÄïqû·ïç%×¼ÜI£´zv±qDQ8äûE#%2 ÐÖú´¶H¬5Xk(+K:@"‡_fR ”R”eJžf€!N°‰³ceQù" •ÂZ¿˜"¤À!‘BRÚ‡CŠaòH#=r8œ) [F®îW¢tÄTëYˆx ¥|Úìét'†×=Š(œD·"$‡±½Ãôû¡H‘*"Цž:¯Ë9pЧ2ó¤é²lÀXë\â`%k õð¢ái&¡ l#ÇB×BU‹¬­Ę©BÂpÜ—n ë·Fzò”ç9‹‹‹Ãk‡U–––¨ÕjdYÆñãÇ@hšzúÇUIžƒu[èv@úÏ>nY–œXZb\5˜kì?BY,aŠUÒÞÇŽezz† ˜ŸŸ'Š"´Öt:–––Ø´iÓÈXi¤‘FéÇÎXí÷ût»]œs´Ûm‚ @Â8O¼±º²²B½VÇ9G¯Û#NbÂ0ôlLØp¼«ª¢,K‚ À9K–•H)üx{ú¢¥¼¢2å†k­E)_r†áÆèì`0Lwÿ¾,KOè”54[óÜçQ” ƒØ›CóÓ9Ȳ) Æø"%kJo\šŠ0 ÉQì ÄA§K­V÷MRŠ0 )ŠcÖ bßDk ÄID©N R JçpÆb75Ã8 Aô]?FhJSQYÿÚÖÖÖPAD&ÃÛI -eY€)}Á•ÖJ„:Â!©JKe nh¢‚DJR!pàEQbŒA Ò‚²Ì ㈲¸JØa1OUor+o")¦‡’ †äYI&EN•P Â8$Ï„aƒ¢° ú)QÑð¦„ó†’o(éͧõû;çÖŒ-©Õj(m‡?¯Q2@R¦™OåÏ›BšäLOGœyÎy >ñ‰OðÓÿîZf7Írüøqn¹åë,..2;=Åî=»™˜žB IhP9Áâ‰e~ôaöî}Œ±±6³SSLOû1ÃP;LiôV81èQ–þs|ø±¹èâ 9xè(ýø‡ùå×ÝÀöÛøæ7¿Éµ×^Çüüss³¬vºLOj&&¦˜?¶Ÿ :‰º„A:`ÇI'ÇðÈ£‡9ó‚K9vì1¦Æ[,­¬‘ $Û·Í Õ;wmá¯þú#|äcŸ"-¼ú?¾+¯¼œ]Ûö \H·ŸS«%…dañ(Ÿ½éfÆÆì>åì>ùTÚ­VVº4Û5:kó|é 7qÿýßãâ /áÃ}?q q"%Í:8¤½.NøFú}ìc<ðÀƒœ{ÎyÜpà ìÙ}*YVðý‡e~~SO=GÛËÁƒÇùÏ¿úkÜw÷7¹äY/à5?÷óK¿|%q¢°&¤µ¨LAšuèt»|÷Î;0¶ÇÜÜ Ri’$¢¬2’¤FV¥=|„Vs{÷=ƹ絘™ÝDw5§(s¦§§Ù`/R@:(èõ´Ú3¬,¯±°°Äò‚cóæqjµ€<ËÐ"Á)G½UçË_½…8i ©#6ÍnãÖÿu§í9“©éI”²,./ÑjÕ(J È0ªcMEQ”äy0L™Â0 Ðív±ÎÇI’àœ¤( âD{öôm¥*+ô°¤nKá Àó\Ã(AM–¦$I Ü(ÂBâ°è(ÄØŠÒ˜‘±:Ò.SõôÇõŽÑ,,2žD46$³ž]ú4— ¶¡á@Ô\La3z½ïcÌjµmO 3Ïd¸þ+ ëÔë;©Å[CŒËÓZR‚¬£ÐD*¡^I³cœXþ&­ÆVš]@ ¥WŸL…aÈää$A 9çrx/™˜'+O`Òã A2Gsü$T27¼2ýçK1H¥h‘*É{Û¨)½ô02>Ääd›F£ÖšÉÉÉ{ˆF£‚$IFoÎH#4ÒH?Vò ³a® !hµZ#cõÉ0Vã$BH‡t×B‚@S™ë*ò"s¥$qâ[³ÁQäåð¢FgÆhí Zœs(­†#úbØ$ïpÎÑï÷ɲŒ0ÔÃVô çÝn—¢¨š XO’x£.PF›²¬P*¢ÝŽ)ËŒ¢¨|˸qT•ÇEáGl£k+Ä0yEñ•_Y¼o,‡¯„0€¤²†AàÇô„AÂ2 ¨Õ)ËŠt£µ&I¬óÏk­Á¨lEYXëS€B…(¥é÷3Ê"%Š%ˆ‚^¯CÇÃ{ í÷‡…¢,Bãœô&²0ÃÑ`¿Ý8²<Û0¿-îPT•/ÓZw4}Š×E!y^ø?;ŸE½Ö¢ªJ‚ ©Éó”Z³…´–EJ{bœîªó泓äyNÄDQäÓ…Ö³Z8+‡ŸNõûv=…j0UEhJycÕVë,Rz“Ï®µJ£TˆR‡¬qÎ9›‰Â~üS\ý+9íÔSøÔ§>Î÷ü§z*×>÷ùÌÎLκY–Q–[7maëI0èõHû=N,.²ïàaO07=Íx»E–ædiŸñ‰qZmÒ4eË–­,ÌåEW^ÆŸ¾åϸó»ßåâ‹/áÝï~'ÏyÎs¸àYçsç·³sû3ؽçO¥, i ì8i7Ïxæé:|„8©³¶šÑ¨³¼Üá”=g19³‰oßñnnþò-LM79çÜSù‰ë_ÂÅ—œO§{‚Ng‰vsé ¾sǽ<üð÷Ió>¯¸öjÆ'ÆèvûTNPYušw¿ãoùÞCráEçó‡ôfªêPä)i6@«€0Ðj’Åù%þúoþ'­ñ1^ûÚ×291…Ò,åK_¼™4+xù˯á­o}+ÇŽÍó¦ßþ}>ð¡sé%gñøß˜Ý¤¹þú«JQä†ÒdKýA—“wnfÇŽ­t:‹à$½nŸf£FU pÒ¨„©É-d©ä[·îãå/&°®‡’!Q\ãž{îf×î9¢°N•¤c9vtMs›¹ï®[yá—`)0¶¢Óï'5ò"㳟û4gussÓµq®|á‹yÏ;ßlj…wrõ˯äê—½ˆ–³¡c0XEÅeå@† ÖøÄ©ÿ%¨ŒâOÄp±Àâ‘!Ž"Ë ÂÀ/,„1*’0`«’@$qBUÉ¿(Š|AÜ0•.„_|@H¤b˜zþr)‘£ ÖHO¨•IÉò£äÅ1¤ëáâ9hn‚Æ&o„ý()j!ĺh#‡è÷‘¦¥b‚`ìIÄ80 N@÷(¦\¤Šµæ&]ñ£vñ"åÍÆÆ :è§%A)Ç`#½:Ò-¥µZÍ_ë+ÅØØív{X®Ç’µ¥}t;{‘aLï¢ÙGךÃ÷Íý¿>öøø¸_P,»¸±íTf38FRßÏÜìóÂ6Bfgg7Ê[•RÄqŒÖ#Ã}¤‘Fi¤E1,–w$Iâ á¥až,cu«*¥¤^¯û¤ò†¨sŽ¢(†#à  P K“,y^ d@Y–äy9\5öüOñCLÓ,ˆ­¥¬Šá…¦·J¤”Œµ‚­5Ö:ʲćµ>íUÞ˜ تÃD¬çÒsA×Y®RºýB@­V÷¬TcÈóœ,ËÐZo\ˆ­_œYk©Ê’V#¡Èrò<ûÁmu$µ®×g-í?´ž;5>I¿ßÃZë‡Ô„ 2%‰H”T¡BIE)zýA¨‰â‰ 2>íé·Ñ"…E(K²BJ¿O¬sëÍœ¼(ˆÂá¨re|R7 IÓ”²¬ˆ6Fí×/6¥ôF²þñ„A虸U…Í+ÖV×t€RŽx¬MçÈ bÍ‘¦)aèH’º/›2Þ$×ÚÂÎUC#·¤,K’$Æ)·a{L@€ †I[ç‹­”R¾\ªrÔÂ!+*ìÐh p(ŽÎÏÓï÷9ãÌÝìß-[·sÊ3ÎàwÞü_‰“˜Ÿ{í/Ñn5 UÀáØ²6­ ¨%1.vä¹¥²­bÆÇê´Zãdƒí,-gi¥K–´[-1Â0ÀˆdÅÁƒû9iÇ©t»)7üüÏñÁ~7žùF¶oßν÷ÞÏU/½’}ûö¢u„u’0ÔT•AJE£Ý¢×‘ ²œ¤>ÆÝwÝÇêj—•ÕœSwoaçɳ<òÈcüÑŸ¼/|þN®¹æ"^ýêŸbnÓ4­V“Ç?@lß:ÃC÷Þ˾ôuÊÂñüç¿€Óžq*Ž‚²ô í0hð囿Ÿ¿åmœyúÙüæo¾‰í;f8:¿—^¿BiãK窌VsŒ´ïøò¿Æ=÷ÞÅ5×]Åe/~ýµJj:Ä­·~›];÷púgñ»¿û{ÜwßÃüþü>øq\gb|ûÄ÷øÕ7^‚sŽ<5~£Òé•ì}l…ÇßËôœfffœ8¬3dÌÌNRoÄôijˆÂ6÷T4ùº IDATbaq+®¸t#E^K"œìÝ÷W]uÓ³›©Žb0熭[Obÿ¿åºë®B`PZÑí•LL¶¹íŽÛ8vì8¿ñÿüUU.-°ÖéÒlLqϽ±¼²ÆØX“‹ž÷,Òlð%gY–Óéôˆ£I­‰-Rú±Óõó1­V ©ØX4²Ö^u ÀU8Ÿ¤—Î!µÄ¿ÿý1 4þx°ÆÎé€(p¶3¤óÌg*ÏjUÚ—Æ4Òdæ“Óï>JY.F1q})f ûJhž¦Dˆ`œ(2iºL·û}êõ$ÉÖ'g»L‰ë…þ Z¯±¶¶Š±³3s¬®®QU–‰‰I”ôÆgžçEŽŒ#ÊRR9Z ªªD Mci6›(¥è÷;Ôj B@·Û$eéqëi±u”OÞFäy)%Ö9œp„q4,ð*©5Z ú)EU×jıg;•UµfÈ­6Öዼ$rDe¢ôeTQ@e"ŠäYJ#•¦,ªB>§ 4%ƒ4Cë­ÕМ®tè˰DIÌêê2E)©*oø–U94©rjõx˜2 ýc—vcl*ËR¬©(KA%lÚ´‰¢ÈpHÒÕ&iÖõeV¡Oë”e94ý{Æ!¦òéT)$VyS½t†²,ƒÈã² ©½n*_à£u4k – !Á9É í“玲„……‚g<ó ö8Ä5×¼œwüÅ;H’¯ýëIê íßËÑùãÜóÝï²pü8k5œµÔ’„¢,*`brŠMssœvÚ©œ~ú3iÖ'Ñ:¦Q«q`ÿã<òØa¶nÙJ½.A S019ÉòÊq„ˆØ±c+/¹ò*>û™Ïqùe/æ _ü Ï~ö¹ŒOL £ˆµµõz I³‚ÖX“8Ö¤YÊôô_ýú1n½õvÊ<`ÐWÜøçïᓟúϹøTþâ¯ãŒ3ÎNd?Þ%Ôu¬üÁïþýÞQ®¸âeœyÆùÔëMÊÊÓa øÚ?|•›oþ‹ó+ü_¿þFÎ;÷tÂXrèÈ#$õ€zRçĉ6ÍnÂÙ>_ûê­Üõ9ÿ¼‹xÃ~•zSÐ_[cþø<{÷î£4† .¸€É‰iÞüæÿ‘#ǸñÆ?¢?Èxlï£¼á ¿Æ«úuìÚm¹âÊ‹¼Ah$a¤QAʼnÅ.zÀ _tµ†DJAšæ<øÀƒÜpä?è „%Ð ã3;øÛ¿þ"ÛwÀYgŸN°‚Öç,b~>ã̳žAw­G’Ä9|”PשJXœ?Áî]Û™?öµÚ$ˆeéøôg>ÃgJ’,.ÍÓnβenÆ tqèÈqÞööw°m×ÿ`jºU:ˆÑ•c¢=NRk “ïÁ°”94áõÄjHœõ :R(œ1[QU†0Ñ¡¦(Êa"Õb…£(ý± 0&ÕÕ-j Êl€s'À …p³-G,€‘ž•U"[ ïC KRßBXÛü¨3 ¢õÔpá/g08A–Eˆ€0šD>‘ffYá²>E÷®ìDãÍí­OO–ê¿Ra8AŽÓqY¶Ÿ,[DEÖ~“ºO9çþÑ$Ú?ùWœàz‡‘½cÄcçO<Tü¯; …&lî ¦ìƒÎAœíñOQëÆj¿ß'‚`¤‘Fi¤ S5Ë2²,óå Ãp”X}2U?:n°¶¢ª1ò#ÞYÞ£¬JÚ-?6¤H§‰£ˆ¢,)Ë „E뇥ª œñøŠz=¡^¯£”ð F)¨ªœª*£3L½"Ú)å$½^J½žè`c¿V¯“g9BxÖT Á‰$½^ ЉEéJoºc ÊÊècÖ$‰¦ªìÆ>/«­Z(¬óÉ9!ðåSQL $ǧ^OPõ:A€s¾\j‚PEáÓ¸am¤v±H©KQX ¶ô)äõsð#[¾èÊ›DfXæÙ¶¥ç¹:G¬c ì0µY":|âÕC$J“€pëœUAi )±®¢¬ E Çç‰cK¯Ÿ1;7Çß}à#Üs÷¼ço¥ÛYão'?ô Çç”=»Ø¾m;Û¶lGàHâc}Óìj§ÇwÜÅ'>úI&'ǹö'®ã/xBJÎzÖs™:p€Ûo»-[7è‚é™qÚ­6{÷îåС£\xᥜÉsùæ­·±wïã´[ì?p€³Î:)|zØC^ òŒ ²E "âXqöÙÛØºußÞÿáÕ¿Žu¿ýæÿ“—\ý\œÐé.°yóVæW8iÛî¾ó{|ðåôÓ·qÞK/ã¬3/ ×Í)JoÂcxË[näóŸ¿“W½êyüÊë_Ïöí[YííÃ9Ëødt`(²“v]Ìwnùû035ÉK®z!ϹäbÊ|€%ßì¸ÿ^pùÄõ:ƒ~ÆÞðÖ:9oÿ‹çOþôOyí/¼‘è£ÜrËwyå«N™„š•åB†LÍMpìÈ Ýþ*k½”Ù™MœXìpbi™©-s´k’}ï§ÝÚLМá+7ßÎUW¿öxÕ¥%>5ÿÀý÷1;g9çœ³È ‹%Yž³gÏ™|ìcŸä™Ï<‡$ ÂÐ#BZS|ý–[x衽üÏ?ù}:e’FÅý÷ßDZ£K«‹œþ9_8È·oœÏ~æÓ¼îu?O¿ÌÈSƒ’!R‚5A¨©Jß³žÐ÷7Œ>ù„~Ñ&˲¡áªÈÉF…u†¢ÊqÂ` á±: Qô¼µRQÈ Ä€uþÆUJ¤r”Æé‰pN,Ùà ½µ‡©-êÉ”˜j?F;!@ˆq=AB·{ŒÕÕe&'.B-Ÿný·# íaVè”KG´Æ¶¢’-?vSðÍæn‚ N¯÷0y~‰‰Íh ùø#=‘J’„mÛ¶ù£$ø§Œå ç–€>.¨áZ[¡½ý_ýRjšSPý¬¹[qÙ^œ9†£… ÍëSg#4ÒH#ô#{iîÜÆw^žçt»]jµ³³³A@žç,--‘$Ɉ±úd«ë¿Y7¤ô£ü>±åÍ›uS´, z½Ö8šIRC IQzf`­V&ÆîÝ»xþó.åü Îc¼Ýfjj’¤–P R‚@“ÎAe Ù gqi‰[¿õ->ü¡Oñîw¿‡Ë_ð®½öZ¶lÝÊÙç_Àc=J¤-†ÿœ5[!š@Xxŵ¯ä½ï}7¯úéë8zô§Ÿ~:Ö ªÊ¨aásaÀÊr\!%ã|áó·pÇí÷3=ð[¿ý+4ÛÃêÚ a°pô(JEüÕûÞÃ#ïç§_õ*ž}ÑÙ¤EƉZÍ z½ÿø'øèÇ>Îøxnx)¯ü‰W2H3yø^&ç"‚ àĉ%fgw³´Ðã/ßý§,/.sÅå/áÊ?Ÿn÷ƒþýAÊwÞͦm[yÒh6éç9ïz×;™˜˜àÏoüoÔë >øÁqÉÅ—°¸¸Äoþ柲gÏ&vï>™( ‰"Éôô8«VOtxß_¾ŸÝ»æ¨ÕbjuޏóίsÞ¹çÓŒ5ïû>aX£ÑhóÀ­wpäè?qÝå¤ÙI\cqñã[7óo~‡Ë/J+B°°r˜,KIâ&7髼ì¥/¦( Ži´&I;Š~è&.¼ø2Œ-q®"ËR6ožeº¹™÷½ÿo¸üÊKùú×¾ÊÖ­ûùÊWîàgög©' ò|@)œ5¤yJÅ3,ŠæÐ¥Tcˆ?ŒÙΛ«y1 $ÄQˆ‡.ŠŸò¤ …@¢Uˆ¥7\•_ 1§ÞTUX!qÖ¾µFú·5òªúóýj•$N¦Pi„®ñã忉¡¹Ú& µÄbò²wâ ’‰csµzdæ©=†¬MÖgQÑäÛöÿÃ{!„& 'I’äù ºÝGH’ÍÄñ摹ú«,KVVVpÎ133óÆï‹²Ã {˜AU@4áØÿÏdµïP*A8Kž-ÓYÛGMM‘$-F|Ý‘Fi¤‘~œLÕ,Ë(Šb{ãC‚ž1¾î«y¯ËŒvØ“e¬®ò¬›ªBÒ4ýÁ¥”eEUõHj1Fƒz½‰ÖƒA†R‰O(–eIGa¤}@o0× ÛZ½6d¶Fff’$H)ÑÚ'`»þ°0KE!e™cLIQ¥”eŽE@¯·6,|œûî}SöœÎßý݇xðžoñ‹¿øÎ=ïlŸî• S•äéic,õÄ' ©7›4› ¢p‚WýÔ+xåO]˾ý‡øîwsã_¼•Í›·ð¢_Ås/»Œý?ÄñãGp¢b÷);i6ǨªŠ^Àîݧrö™çñý‡A‡Ýþ€$N0V ´¡HÓ”¥¥%V–KÎyöó Íw¾ûÝoÞË¿û™ xõϼr˜ºnð÷Ÿ¾‰+^x;·ïä»ß¹~ð=\rÑÅüêþy’z Héõ+æ¶žÄwÜÅoüÚïÒé.sÃk~’—¼ô9LN¶X>1Oר<3ÃÂò æ6ÍpÒö1Þý®÷ó¿þáVžwéó¸æe?˦ÍÓå€V+¡Ó]æ®»ïæÜ žMEÔë 8Ä[ßþv.¿ü Î;÷ò<çöÛï ÏsžwùåüÒ/ý–—àÍ¿uÝî! ¡4ªR266…w|ç0ÿõw^ÉôÔÌÿfïÌÃí¬ê{ÿYë÷¼OΜ“$@ 1Ì‚pGPТ¨Õ: h©Z­Ö[ëÅbµP­VêlÕVÅÖ¹Å!ŠÌ‚ Æ@NÈ|’3{|§µÖýcís@{Ûk…PÔó{ž<ÏyžœìwZïZßõý}¾LNïÃwóLMÍòò¿”Zm޾¾n´v Ã"ŸúÔ¥ ô¯`Í¡«ðƒ”é³ &Ü·•7^ð^´Îh42~x+Ç*ìØÍÖ‡&¹ôƒ'a”¡˜¯¸y¾òÍï’¦/~ñ ˜žÙ&aùò ÂÀð¶‡80Þ&W„Wœ÷¶l¹™Ùiöì=ÀQëŽ$‰Z)\)ðÇ“$ʆŠns]‰t¢v„Ò©Ý4¥icTBà[g©ÖÄ6+4#ŒÐ ´ñçÑF+ЄF R[<ˆpÑ*³Ÿ±X‹uPKaTUÛ‰—En7¢Ô…Òï&Sõ×W§›|A‚œ@LrÀ-‚¤v|ƒ1 J1JÛ«S.m Ÿ_‰”ÞïíÝé8y …UHé3;{ggÎQÂu‹‹X€'±â8frr­5ÝÝÝ¿,¬¶§©Oo'IÂÜ2¤_}|O tÁË“Mmv'2\I.GˆE&Îb-Öb-ÖbýþTE¶ºƒ½™ï™ÏEZ¬ÿù’V|³¡Fžçq/¨Þó-°Y–.0´6ÔëuZ­íVŒ6†\>¿ ¶ *S ©¢Ó‚®ZÆ]×YŒÊçó‹e¤„AÞ†/yΣá0Òt‚¡žç`Œ"S IÒ¶œU<ßeÞ…êºÏTL³Õ Ic<ßÅJ£Úº_u¶ðsš%¶½£ôYÑÙúÕ²,£ÝŽˆ£ßÄáv»Ýq„Z#‰ç=*ÏŸWéÈŽ;VwDR‡VË&ÖkeƒæÿMœD´Zu2Aàš4MHSû=óçellœ|¾@wïÂ9w‰ã:¸®]h¤iÒ‘õcv34Eº2”ŽÐ&#Ëb’$¬“wþº-1F“$qÜ&Ib²,Å @(’´Mš&dYB£1gQR ”eÚfYƦ‘š]¹àVYF’X†®6 0(­:ˆ 㸜rÊ1LŒOòðÃÃÜu÷½Ü~ûm|ð’wröYgP*¸” Íú$ŽLÉ’iÜÀ1q4‡J,[ÚƒQ-öí¦Ùš&M›Ô3¬ZµŒ—û"Þù磄æSŸýÙ½+ap`ˆÙ¹:ÃÃÛɲŒ©©)âvÌÔø4/yé¹lÛöŒQíêBJ{Ý}ß'Žc¦gfŽÃuÄ'?ùúúùîwÿWœwýKs<²ýnÆÆFX¿î¶?´ùê÷øþw~«Ï{ ¯x幸n„Àº£ å ÿüµ¯ñ'ò.Š—¯õ3¼å]o£§» £Ši¢(eÅà Lì¼ýmï皟]Ëëßð ^ÿÆ—àåê¿NœÎróÍ·pï=ÛxÞs_„J­cûào>òúúú8ãŒ3H’ß÷¹÷Þ{yík_˦›oæßÿíN^þòã9ëìg³wï~’¤“áøŠ|˜gÓõ¿ á…/~ë=‘uëÖ111A©X¦ZíbÏž=Ôê³ E¶sã÷qî¹Ï´÷’ÎPZÑݳ„[o½…ÁÁ^–.íg®6Ë=÷Ü‹1†®r™ï}ûßY¿n€Õ+WƒxnÈž#üô§?ãÙÏy>CË–qâ‰'1¸t) í¸ÅØØ¤„Þ2§œv"ŽÙ€ã¶>øÂÍá¹!Yf¹qÒ`t'LÏél8Y,À|8]à[^±Ý4‘þ±²c¦ÌgŸ¥RÒ4ëüII’#‘C"D!rã“¥Zy`ûw ]$ƪZté,ÖÁ* 4ɘ`Z笠˜®5ïù=tHþjyª±”f¦g!Jà LfiÚfzz¥]*]ÇË-ý½UÎŒp‚ Õê 5¦gî N&1,.*ž¬r]—R©D©Tú¦±ÜN>nÒU9‚0ì}\ße‚ ¦gºrznÓÜ LÉâ…X¬ÅZ¬ÅZ¬ß“¹X0B> °ˆÁyŠÍ<߇NƒëØÖÔ|¾„ï‡>¾ëâ%Z­6BÈNp „aé8di†ï‡Ý&II¬ÒÇ•VT5:&Íbš,sI’6R¢5x®…Úc“²³L!„¦Õñ;\UǸžƒã†xžO–ÒÔºNÛí£ÅB€#¬€™¥)Y¦1:E#‘Ò2T•´|Ó0#Ñ©mo/ò€¦ÝjwØ®>*‹‰ã̦Þ'Ça[tßÅAÝ"I¢ ƒ©28ÒA+C–ƨ,!—ËÛ ¯,Ñ ¥&ŽAØE+Æ%R Ñ¤©•Òè,£§TªeWPk6 ¡ÉçòÌÍÕÈ…´ÎP:¥5P*¥T*aŒMTU:EkƒÖ¹ª”ÁhÇþéˆÁZ2¥1F1ŸŠÞjµP:Âd ßwqé¸-H"ŽæÀ„>F'¤©uÄzH²,Æu\éÙ®S‘¥¦àÈ®QªAÔª!¥ƒR RÁÛÿø®øÔ—øÞw¯géP‰Ë¯¸œ¥yf ®[dªVÃxeŠ]ÖE˜eø¾O£Ñ$Š#ê³iêRèÀ󭨉㠴Œiµt÷”¹à¯áæ›7óÙ+®`Ãú ¼ô¥çPé-QŸ›ffz–|X¦U¯Q©ôP.„,b¶¶Ÿé‰)”ð¨.é&J}ŒMÑÛû4Ò¾ò•«øÖ77sü±ËxóEç°lHSkÆÜqç&Î:û…Ü|ãÝÄ툟n¼šTµùË÷¿‹îž"ÓãÌÕ#–øýD피õ=üü¶‡¸øâWpÞyçâ¹PÝI5A ….24é9nûù5|ç;ßbp¨›üÍ%¬]»’={¡X Ù¶íAvíÚ˺#¢¯{€™Ùù|•-wÞ˧>õY^ÿº?àÙÏ;ƒ‰ñ V­ZÆ¿|ûkœþìص÷ÿç_àMo<Ÿ»î¾“¡¡!– Ç“Äm‰«c®ýéfN8f ÝÕ<»ÞÄò+س{'«V «6~XÀq+(ðÃ?Â àœ—œAרכ„ù.y~vÝuuÌ1(¥Ø·wYV縧î]Ãüpã ¼î ÏÇ/‡¤&G½™ò_º W N?õ~¶ñ{}ÌT» (“'Wîf¦v/ý½°fy?I{‚³Ÿ÷,îºý^î¿oþ°€ãÍ‘ê:):“$i@óÑƪ”¥²ŽÀª@t‚ä:În×É{ÈÒŒLùR¹ƒ*1‘á¸~'pOQd:Aé ¡,*@ë Çq1 ²‡E 8ÒºgÅ¢x°X§ŒÉH’ ¢hrKá mw_LKÃ&Ôûà” 0@Ò®“Å{ñ•‡Ë’'ô›´ÎH’)âx0ø~¹p)ÃÅËÐ)ÇÉ‘ ‡ÐQÓG85„.C‚\\düóo7‘ç‘8Ä>)é¢5Š—;„ ëpœ°çñ}—_!\r*©‘¸ Í’EÀb-Öb-Öbý>TÇÌÍÍ-˜Û%²XO1aÕàà¸Rº¥h6Û,©VqA#2E·0"O¦žâ îtÉ*­Ð(â4Áõ:-ÇÇ>FY ð}|O tD–¶‘"Ãqžg¦*‹@Z!Áë6MÓéH+d¦ Q”áù6•Ûh‡4J(w-Á£æp]—4I-+6SdaÍwó¸NjC¥2:Åu4ÆH²,%K Ià‡(@+ƒJ ™ŠˆÚVXÅdhÕ& ­SÖu<ŸË-$ :¾Cf2”1DQJ†4ÛRH¤cqŒQ(•Q,bž)rïáH—0¨`4Háâ:Å …1 ‰”>ÆØð*ÏõIT Æ`´Be²ÃŽus9‚p®,0*Wá8·1£3æã}´Rà+‰*Ñ„¹B ¢tÏw‰¢q:MWµŸ×¼òE|ë_®ç-o|Çžô,¦'¶3>>ÎŽ²oßFGÇH’ŒJ¥B–j*Õ*ýýý ††èééf÷®íÄiµG¬BeM¢¸A»]#øØ»—³Ÿs&‡,]Êõ›~Î'>ý).~ëôö-e×#;1I“•C‡ ÇM9tõ2~´ñ.¹® n ¸qÓ„ù*ív÷¾û¯ÙùÈ$ï}÷Ñ?è°|¹O½þJIV,?ŒûZ›ÿõ?ò§ïxž¯™kL iÐÓ=@_ßZ¾ÿÝ«øÀ_~‡3žÝÅg?õ^žñìSß=Œ=Ç¢6JÕ>FÌð‹ÛïcjzŠoü>½õMœxÒñ¤iD«ÕÄq<6ßv;…B‘ÓÿׄaŒ¤ÙLøé¯æúŸ]Ãÿèµ}Ô¡øR“ %›o»)[sü>}ÅØü‹}¼þ5Ïdù²2?ùâ¬\ÞÍ#;&g9dÙ:šµ6[ØÆkþðeøž Ph5æØ±}ç½êU9ÉÄtJ_°„F þõÛ×ó–·¾€Á¡ö“ËNž‘ÑnÙ¼7½é ´[MêµV¯^ŠƒdÛðNV¬öxÍë^Á\k†bµ›Û¯ßÊæÛ~Îß}ôÿPÎŽ^wË––™k4‚n’4 6G¯_FÁ3¸^Ì@ßu˜nAlˆ²&Æ­!‰1ª€ë”~iÐ÷=Ò4µApkìFãyngQ •K¦ì‚Ïu=¤´‚T–$h„ݸr$¤Ä*âÎf8øD©¥áæÂEgŠTe6ÜÊ^ë`”Î"Ú­I¢xŽRù(¿á‹'æ±âª›‡Ê bñ0­ö>ЦD— ° IDAT iŠHñÄ'­[´Z;‰ãT*Cø~ÏÂX²Xë€Kȉn|áÔ›3‡pðÏÕ“rþƒK&êh=hD¾QY Aùñ-R¼ÅÒáÈúsɵ˜4•‡Å…åb-ÖoGÙ óÆÅ/ý°XÿBØ?FG<æôË_rC !“åŸÄšïзΟûùŽïf³Éþýûéêêb```¡üwÜx´a ‘‡NðÍSSXµíêB8˜N‹Ö„$j·ZÓÝÓM+Np=Ç<¹.J™Ô!ßÁБÌ|ßǨÇ<ël¶q¥Ýíž°B)ˆÚm|/Ä÷m{­Ò¥ù|©Ó’ÎŒW ëvm7hcð;éV«µð¹ó7¥1£mà’ª“Ìý莻V±uæz9|? Mì̶߫;ch4ÐG›ŽÃÓdZ‹Áå±ÒüƒbŒ!IS”Ö„aˆïYŽìÜÜI†¹¼O¡P ‰mÛ½VV˜•ÒA‹x4(lj¥4T+UI’ËåHÓ” P¯×ç;(•!ŽõzÈí!MZeärùÎqÛÿ·½®¶õ_é ©±\[) <ß"”F+& àæC<ÏYBË´´Îd:ƒ´,B ·s®À‘8®ß"NÀ‘yTÜE–j²8¡Ò«ífÅ!ðŒ“O㣗ü 7mú££m’ØcùŠ€åËÉ2ÍC3Ó#¨×Û`Iª™©ezxG®=”O:ŽV=AÈŠ,êe|t‚åËeç®=l8öxú†VòÕ¯~ï~燼í‚7Óß·”f}ŽfÂÓOZÏ—~øî¹÷v>tÙ«è§·§—áá¬ßpÃ[wó©¿ÿ4WýÛݼñÍ'ó¦ ^ЉÝ{©T—Å-êµËWÎu?¹ž»îº•Jî»ï>þäocíÚ5´Z *Õ"QÔfÓ¦M,]º”SN9•F½ï‡Ôjun¼ñf¾óoòž?»˜SNyY¢ÙãGŒŽïäÌ3_ÌähÀ•_ÛȪ•}œ}ö3iÌÍኌO<†žž"YRÁŸÑã4Úœ~Æ©Œ“/u±kǤôèïïÅõ¡Z-BþéËÿF»=Ź/{Yª)sxaH’ >ó™/²t°—#Ž\ÇÈž=ôõ ÑUíÁõrlüñž¶îâ9¦§'¹ôÒðö‹/fÃQëhÔFÉ—–!H©V— (0<¼›»ï¾›s^p*RšÍ&•JÙ¶”†yp-ŽB¡<Ïó‘¸HÇÁ(Mª5Y¦‰ã¤ƒ0‘HigÔü8“)tž[i')BÚð©4Uˆý}­4p‰”t0Æ»Ááy߃ÌÕI߆ÒéÅðªÅ:“—¤hãêŒ ¬}8NañÜüjIü"N±‚+'‰ÒLˆC¸nþ Xô(Œ™#M'HÓžw,®[]\xþ?ÅÕ'èGÍú($š.‹Âê“3l˜_bºiÑŠ÷ÑNæPnÂ>ðK;àM ñ½*©ßƒp ˆ$C4ç €»¸ñ³X‹õ”¯(†8zT\@( t€ÂâûíI«T mi‡m–8@‘vQ››#I‚  R©†‹2OÆ»ttt”±±1Œ1T«Uzzz(•Êí(&Šò…ù|ž ø=yïe1¦9F»9NœÍABw€P.GEðœ§äÐáZ©uCÉŽ(˜ežt™«ÕhÝ=]cP©"VB<×EX"Ž”&³jC†±"-Š4Ép\Ï÷I’–š"¥$ŸÏãHcXà° ®kÅW+hº %ËÞLÒO†(­)•J(¥¨×kT«UZ­V'(+ež·šeŽKçótGø3„aÁ¦k T†ãÊ3J š8Ž-ö@:¶5WÏO*í1?<ÏUB†áBhWE–5êfÁdÿôùoòµþͦá/ÞÿG\ôÇ/gbr•Ê:F„Ö†F#åóÿð9ŠÅ Åb»îÜÂ;ÞùVúª ­V“-[î"M6l8ŠžîÆÇ&Pʵ7ÜpW]õc.ºèÍ<ýÄ£-Ã7 pÕ¾ÁëÖS –óŽwü=ÛªñÁ¿~ëׯ䶛®ã„ãdp B>—#jTØ|ÛfV¶ŽþÁ*{GGÉKüû÷ÂêU‡øÓµI •*{÷îáò˯ä/Þ÷F²¦¦g¨VsŒŽ¡u™k¯½‡^òföŒ“e†þþe”ªUîÞrm½‡·¼åC41SS³¼çÏ.᜽çœy:{öî`p Š£ŠÌÌNP,IÃ@o?sÓœxÒñ–Íœe”Š„€ÁÁ^ð¥E˜¼å2§.qfÖZw8ËæQæ²ï»d*AeÖêvž{éŒZ´Ê:ò)cŸ#•Ú@+át\ßÖi¯´" BŒd™Á1*³ãït6!¼ÅôëÅz¢K££)tc„\©H¾Ü‹,ÏÿªrA®L™ž~€4iáºù'DXÕfŽLMvØì½@žÿ™¶šëB»mµ)§ñUèB°xΞ¼R(Õ¤>½v«AäzŸ°k`Я€)®@¥1éÔƒ¸^ˆp{¾c‘5·X‹õ?9P ”ÉРU‰Djh4¡Ùýaµ¬1”¬`´"qqœ¢ÅÉÅÞ¬ßt´4dèŽ~ðØyž#È8‚š„¶Ð#°Ï(lfjz†%KºX»v-Ë–-_ÈÚY¬'¾æsz†‡‡Ù¶mÆ–,YÂÀÀ+WR.Hâ×8¬X¾|ÁHø;}ÿê6*žú>²é4jûi¤SPU”Ä*¤\‡ß¢Òm]O±¹žEQljåãJ‡4I0J!œ\…u‚"Ï@Çh­ñ¼ÇuÉÒ´Ó–Ü }Ò£ iš€P(­h·SÂÐǸÆØ :Iôžà‡ZYQrÞíºîBš}X§l–e¤2#tCÆÆÇØ³g7k×®% Cff¦qgÁiú¨ÐIGØsÈ2Ý-3’¤ëø®‡Ö)qáû¡å1¶­W`]˜Iby©®ã!¤» j’eÖêºî‚k6Š"Â0´ÎXm’4M;Ž]‰ïç;¡=Öý&°ÂªVf IÚ&\$ÐŽÚVdñ}\)i6ê”J%ÂÀ§ÙlµZÍ 8Öõ†ív»ãj-øyTf…ð0ðHÒJe–gšYñ( C’$YpþZAZYæ#.ÍfÆõ]<ϳO‡©j žçá‡.Y¤PŠÇ¶Ïs0išuΕD LKòùí¸ÁÌÜ4år¹\]LóÁ¿ú[îåìÅ ^ø\Ž=úH|3\PHiƒÍ\´#@·ñ=…ÀÏ«N&—/S›m0WkrÛæ;øî÷¾Çõ×ßÊù翊é™:cSST*Eúû{1J1=5ƹ/y)_ü—¸öú8ó¹'¢œ:íÖ KWô’$92å‘Ä.+W.ãÝïz×]7žʇ>ò^”#Vã<í¨ÜzË^ü¢·pÍïä²|‚ÁÁç¿úe ,-rËÍ›8þ¸g"M×Ütïú³+yÅKãÒ¿~½½9ví~ˆ¾þnff¦éíícûöÜ{Ï}$IÊ™g>—/~ñ‹H>ú±¿Æõêijõ¶m{˜b±À† ÇÑn·ñ<4ñý€Ÿlü)ŸûÜU|âãÆÚµ«™œ˜Ãsr¹óé/pÒ‰ÇsÈÊÃ)•˼÷½ïc ?Ï»Þó6¦Ç&¨T Ôks䋾½OëͦfÏî1й<==UÒ4&Ÿ/’Æ)ssmÊ•¦]#S–  ÝÏÔn¤Hi7y|ߎwÒwqb»É3?œ !ð<ÏNá’½Ôf'‰£2;N ÑlRx×ÁEàt–YA·3—q¤C5ñ<;þÎO Dló6¬žŒï» ÷T:~sŸ=ÑíYÆ("Ý 2³äD•œèÛlÿKMOpœnŒñ€ÆÌU ‡å?þfסÝ'jãºÝ ƒ×ðâfÊ~!$ÂËQ¨ B\ÇiÛ€¿BßâÂüIS· šBÏì@ÇMd±QèyÜnÕ_ºÎA ªËh7g`æ>ÊKÖàç–€ÿéx¹X¿=ïû_ýyþ}÷XÑü`çóíÏ}¿>YÇ=ÿ½¿zÌóxÎÁ(ˆçÐÍý´umräÈ›"N€rÓ~n ÕB« 1BÒA´ö’s{ÉWžŽ,-ƒ°j°Xÿ?Aj~,6j–VkŒv{zaŒ– Â%Ìrˆ¤:4´šè¸A»½Ÿn¿‡ïÿôvìÝϲ¡eœzê)¬_¿~¡#Y,^‹ƒRY–111AÙpï‡zˆ;ï¼õë{9öi+è+vS* ¸=ˆßå Y“h‘4 9¾™tv²ŒXVÑAj5Ú0j'¥ð Âòq–ÀS 禩m?÷}§Ã)MH’ÏwÉårôõtÛdv×Åó-×±Õj“¦Š ˜gf(uD4ÐFãºiá8Åb‘$±?G±Á÷CŠ)¡Ÿ£ÝŽÈòh‡Ž°jlºJíçic™®FtN õz™™”RX8^H)UʪóîK׳ÿ.M“…¶zû;aàwÚ{•ýÎÎÉ™wZZw` ×ñ:».ÒXGšR! I’üÒÄ`se ÿ‡|>ßùMšÆ$‰[­ãÍŠ—Æt^ðóÖŽ£8Žã޳Ø~¶ïûH)‰ã¸#,Ú]ÏwHÒh!X§ÙlvlãVðɲ •Y„°ð¹µÚDQB¡P Š"|ß2oCà†ÈŽ ø>®ï’Ä1Ífd]Æ· H$q„Ê” ÷rü΄Å%ËZƒ”aè,à ¢v‹TûDÑaÞaåšÕÌN×ø·ï]Ã%ù%;¬ÿÝÿæÔÓŽa®±8žY@1Aš¥d*Ã÷]¢Tãû.q+ê…EH9†Öý½C¼ôeçpòIÏà«_ÿ:Ÿûüç¹ð­o¦»»‹fTcÛ#pÄš”KŽÈóŠ?8—?½ŠcO<”ÌÌÐNj¸a…mïEPbßÞY®øûK¸é¦Þý®çò§ï~;¾L³¼ÔÁ¥¬Y³–ûîÙÂwn"È'¼û½sß=÷ày«©M‡Lpùâç¿Ì·¾y¯zùÓùà‡.f`yޱÈh·|ßã¾ûà†ëoæÔSOcÅŠå|ö³Ÿaýӎ䬳_@XÎS›'Ž[ìØ¹ƒJµLoO/žçÙŠ°@É ¸öšøÁ~Ìå—¿‹¾¾^fg')™™™bÿ؆y€¼ø2îÞ´Ÿ¿ûØ?ÑÓçòGo>›,™cûý;Y»úr@KGúô¯<’+¿öo¸A‘g<óêÍi´6\ýÓë9ï•/cõêCØ6¼‹|ØÏÍ7ÝÉ7nç¯.} F´‰ã6M£%Ù7Í~°‰¿|ÿ…ø~€ç‡8Â!,T¹þ†[øÙÕ“\}Íû©»¸ü²Ë™ác÷aF÷í$ŸÏÅ‚Œf#£§{€™¹:=Ý%>úÑÏòœçžë êõ~&Ùµk„±qZVÅtœèªÓІy´V “_­YxþŒRh£¸¬Vkë:7¤t‘Rá.`1hëV5h„¤³Á#q]¿#”Í¿X,NE aŸ4®k¬Òq¿m®QQ«Õ˜œœ¤Ùlâº.]]] ”ÝÚù`¾ééiææ,¯{õêÕÿcí6­V‹©©)êõ:I’tî/çyT«Uººº(‹ cçã;ö„4%25_à;¹Ž8¸Xÿuy@ßïC©i²l–,›Âq–>Ú¹óß]™„,š%k7)UW“ϯ\<Í¿FIá’Ï-Cë²Æ(Zƒ›ïf‘Fýd–Õ„¹=8dxåÃqK} ž¨k n ¿°œ¨>Jcn+ùä ü/P)E’$ ¸°ÅúíZ­ív›V«E«ÕZ0 Ì¯s<Ï#ŸÏÓÓÓC†n¿'¦’$Y˜kDQÄàà ýýýÿiQŠÙÙYfggŽy~W(èêê¢Z­Á“&ôþÊ0d ­c2ÝD´Æ‘µ2Ñ$víÚÙÅv}"»!È?F”3@‚‰™š¡=}jò6Da ¡¿íûhR<<„‚>eyŠO A5³×!k!uôY0‡H«øzJ]ë÷wÏ)LÚ ko¥5} õñM¨x /¿Y^CS“dé0ÍöA2Ah»9ð3‚¸ÆJ¥¹\‘´ã†Æ ¥¤R.£2E£QC/Ì‘Ïì‹Í·®G­Ž`k@ϬPëøÖ¹éy.¾ï=F0t8HÇ õzßóHÓ)]ÒÔ&ÖK)\`v)IÓ¬Ã1¤iŠË9ì°CBÐjizzºzÇ‘4›M²,é´Ø„‡$AÐNÚ(éQ(æ‰Ú1ZÙ€ªLeÄq !0bAuëºT™m•—Rþ[ô±âê¼7˲αHâ$18ÄqÊÜ\ )%®kÅÛ ­»UI’$"Mc?À ,B Õl- õÚÜç¶·¯é™i¤´ç. Cr¹œ ÒJ Ƴéæq”á8ùQ7ÍR„èŽóÖqZ­¹|ØqšJ|Ï'K­ø+¤ èÉ’d!ËŠÉ, ´R ÁóœÎ"^aŒ" ýŽHe»iš’¨¿ ‰ZÅòsS)ò¶sÍ5wóÎw¾œ7¼é(–B¦gÆ Ã"Â|/çyxž$Ic!:ŽX++QÚø¾OOW‘¹é)‚°H«9M3Rä e.þã·p÷='ðÏW~‰s^ü"N;ýD¶ïxˆ£ÛY9´†$iñ´ ‡q×½}lÞ|/|ñ™ÌÔ ìÞ= ”ˆ"‡ÏüÃ7Ù³w7Ÿüø›9ïõçS›ÜM£Ñ" +HÑ…ët37½“K/}ïûów±vý‹ÞþKV39¦ðå ¯í‡HÓ&ïùóWqÁ[^ÉÔÌ.ÆÇ÷§ Â\™(jñóÛîbv¶ÁÞð¶n}˜ /|'çŸÿ^òÒÑhÌ â:ûöíâ‘ÛY³f «V­Æ‘.33³x^@Ùõøò?ƒÊÛÞvGu“¨”Ë´“­xŽëo¾š ßúˆ \þ‘3>sáŧqÆ™G373Ëhx€§­?Òº¥ŠÅäÔ ýØ7xõëN£Z-£u‹Í›ïà°5‡sò3Ž¦Þ˜¡RîÇÝ|èCW²aý/|á h´Æ¸íŽ[9ó´sðEÿrÃ(ªôôV¤Vk’ót&ùìg¿Í_ýÕ+9ìÐ#¸ì²ò³«¯æW|˜0pÈRÍÄÄÝ=ÝäÂ*­VÄÌ\éä¸ýö;¸ç®üŸ÷¿—j)O¢<09†Þ‰1°æ°å(ẮSÀ¤éŽãÕê1´Z»hµ!I4]]}ˆßèÌR§ ‡EväãJU"&©‹ž¨b}5OÚ¢^Ðehæ‹”+ËÈ‘OÛZ (³ÄJ-¹‹vk/¨Ö¢´Ñh0==½`^X¬ß1¡Ñh0<<Ìðð0<òÛ¶mcdddaƒ³»»›žž=ôPÎ>ûlV­ZEWW×&6NOOó‹_ü‚7²k×.^ûÚ×rþùçôco·ÛÜqÇÜ|óÍ 3::J½^'Ž<òHžõ¬gqÊ)§°bÅŠ§.OQk¨ÕIZû¨éÝHÝ K,¡T>‚|i 32K\¬!êW7Yzp²!ºæfq“1êsB¡‚*h¦»Ifï¡[ôà•VBe,â‰þ³ Ô‰ã=ÔçöàF ¯—ra5…þÛÂïâ ®Çü3Ô‹cVR•k÷ì㌇¯ãèuEVs2ŽbåJÐÚ¡\^M¹¼¾¤¹ØðD•‚$Iسg»wïfrr’£Ž:Šç=çY¬îuèʶ’Ž^ÇÔþëY"}ܾc¡¼ì‰ëyj¼  ÕDï`vø3´Ìª…•¯¦RÞ€ôª¶å¿/¥>0E³>K†@öbMO­ûѵ”>1äóyÚÍ&J)‚0Äd6eÝõ<âDÙ–XÏƒŽø–Ä1I’à{!®ë.¡J[ë¸eu&¤©M®Ã< Q*!}”Ê0@.âº>IÇ1kŒu–ËåÇTvÆòN@”ÎPÊ ¹ÖÍã’$Qà8NG¤t0Æ2NÓvJZ1ËšÍfGðd™Âuž"¥@kÐF!„îàù9‹éˆ§žçáHm¬cÕqÚÔqÙÿƒ]dYÁXZÛVxã<×M³!61®ë`ݲ)¹0èߨà)¥¹\Ø ¸ø¾·Ð&\«Õ üÒ©©)’$&—"‰3²L†ùÏUæsLŒR,–0Q”EÖ]<ï\v{jãà TJ–J@‘f‰=v£‰¢Gw^+Õ*Ž)­HnǶ ºÝn£µÝ±<É„|>@øDé©ï{ÏÇØtËÝ|ë›åÏÜÀ\}áh|_à¹9ºa÷ðV|èAfgg¨Õæ¨ÕjäBŸ\>¤§·‡ Ö3¸ìâ8"Í"Ðj§4ê1ND‰æˆ#Vò†×ŸÏ—ÿé ø¹„SžqsS#Ì6&ð½.Rcý†µ|ó;ßâygŸÅÔDFèõ²sïn¾~+­F~ô-¼æ‚×19²d‚Ô‚vzWr÷í÷sÅ߉·¾íuô úô Tؽ§ŠÊòl¾yŸüäwYµ²Êe}g<çvï¾/0(-èí]Á½[îç¾û`ÍšÃyùË_Éöá|ä#WðªW½³Îz>£,é®°cÇFGG9ꨣéîî&K…J ¥ì½õéO}–Í›oã’K>Ààà ŒP­t‘$Ù$·Üv g>ûy”ò«ø×+¯åg×ÜÉ©§ òÊó_Àäø>µˆžž2IÖfb¢ÉÒË@VùÞ÷oÄ j¼ñMo˜ÃÃÃÜzË-¼üÜó1dŒMN±|éÓùÚWÀ½÷ìâ/þò•ܺù&=¼g?÷t ~Ñ=MþéË?æÃûFÖv( .§>×âÞûïÇuÚ¼åâwðñË/cãO~ÂÇþöRÖ­=”éÙ¤ -ë'N2ff§É2ÉìL•+å_¯ü6/}ÉÉ,_¹”é©Ý ü ÌÍ7mæ°C©våiµ§ÑJz\ᣵ ´ ‚\Ç9.BõÇ¡Ýnv\¦VÄ·ns”ö™ÂÐYØ`±¬ÁHƒƒÝˆ‰“„,3k±Ze:ã¦}þÅ CJéÖºú;Z󮣭[·rõÕWsçw255E¹\æÀdYvÐxó.ѱ±±ÎXûä:Ÿâ8fff†{{ï»—ááa0044DWWFƒZ½Æ–-[¨×ëär9ªÕêã^`je Ž“Òl¶Ãž—§ÙŒð<;Q‹ãžïÐnGdY‚ÖV t=‡45 Âãc[ô•R6ý»#¶Î§„§iŠt°ÜWc³¬7#Š’’Á!ŽÛöštܵó/åùÏóƒ€,Ëp]‹l0ÆÄ¥J•8¶Ðê|®ŒçÅ$qbÙ¥í¨Ã¯¥ *I;¯é¸Tmˆï[ž­ëVA\×A)H¢éy¸žÀ˜tA0—®cq ò1®^)QIJ¦¤’`„ 0†v+Âq%AèÑjµh6tu÷cd£^ô>n¹y;ßûþÇ8áøãØw`/¥B@+öìåÆënå¾î¡kéééŒåOJ‡F³ÍØÄClÚt+Õ®.Ö¯[DzÁ*‡¯YNš*²òæê-ÚÍ:^à²nÝa¼ã·ofjÍJºªKØ¿”Ä›#Î4'?ód®Úx5ŸøøWxÁó_ÌÌÔÿ»¯µ|âãÊ«.8É=÷àzª#òKJÅ^6þð:¾ü•¯ñž÷½› GñðÎÛÉ2ÉŠ¥Çpù‡?É÷¾#'Ÿr—ýíŸsÈê&ï¤Ôåà9%’(Ç·>ƒ[欳Ïf劕\}õF®¿þFÞ÷¿/à¸ã¥ÝjQ,å¹óÎ_$ 'Ÿ| AàQ¯7¨TªLOÏR.Wùö·¾ÃÍ7ßÊ»ßýNŽ>îF÷ïÃõµZ“Þ%ý\{Ý9âˆ5¬?òöíɸôCÿÈ’¸äCogåÊA¶>x##»8aÃq ¾_bמiV2Àׯ¼Š‹ÞöGôôvq÷]÷ò•ü2/Ù¹ôwWÙ³{7GyÃïäŠ+¾À ^p #£ûè_±‚šãÄã«4g§¸ðÂñÚמŋ_t6“Ó“øK£Yg®Ñäò]ÁÇþöR>}ÅÇùÁ®â _º‚Õ«–1¾7žgð|I»Ý ÕNp½É±iúûVpÍÕ73=UãOßy1õ™Ç3”Jnºi˜³Ï9‰Þ¾.Úí¹…|Gxàj’¬ù…—]àwÙ0+cŠ®ïµ!‹ÂêA³æ»8ŒQèÖ8ÙÜvŒjƒÈ¨ò„¶ç ž •*"_ÀÒ3(=‹ts”Ëòùü“:n/Öã¯V«ÅÎ;¡Õj±lÙ2Ö¬YÊ+ð<‘‘¶lÙÂ}÷ÝÇ–-[Ø¿?®ëR, Ãðq³Ð¥”„aHoo/Zk*•ÊA;Ö(Šá†nàÇ?þ1žç±jÕ*N8á*• Qqÿý÷sÇwð‹_ü‚8Ž9óÌ3°?Oç^£uLí§Õ܆T¹pˆbù«HH÷×?š˜ºº¶wYéCW#Ý a€‘½ˆì’l’Fc ãø82@Êð7Äíü.¿­#Ds]ßCËŒC¾—bi aÐgÆãâÿ{Ð ff]Þ Öu‘<Ž%kÎÄ ÊHaÌ$ƃ´ZÛqœÇ8N_gŒ_ºoI)0–]]] c›”‘ ;sʳ{7¡+ÜÁe8á„(þ‡ó?¯‡Éß «Á˜6*ÙK«y­öf*}'“ë9Ñ}$„Ýh&Ó¤iF£ƒ¶,•˸ž÷”½óÜù­ëúÔë ¦&'Y³jZ+|ßÇw$ÛVµ„aßµ†rGplš}ä¬Pé(´vHU‚R¥¬“Ëó<Úíĺ,Û&Ç Ž‹MÂFÛdø,#KUÇYª¨T²TtDYÛ+…"ŽZ”Ê´ö‚MæL Ãè±ÜÑ8JÈåò$ic¾ï":â‡êpl\Úí¨#[A!R£?ÃÐÇ+îJ)p¤ƒçù NY+FÎ#¼î)`Åê4%Ž[¸ÂŠ.ÚhtfÂ%<ÏÇ÷Ý…vú$IÓ˜ñÑ:ŽãP(óYb^ô¶Év«…ëHÒDá¹Öyë8y‘#,—hÍΡTF–%8އï;H×ò|’$¡Ùlø!œ…”0ôi4ëd™mçRcHì n@cð|? H’ ¤ÀqrDQÄÄÄÅ|€Á`Y’ÖÜàz²ã Έ“6i¡»¹ì²Ë¸îÆí|îó²vÝŠ&}KùÑU?æÊo|“|±ÍYgŸÉE§ý!K– Q((•Jd™¢Ý²lÙjµB80ÊÞ½{عs?»w {Ž8Œ§¹ŽþÁ^&§§’ÿËÞy‡ÙuUgÿ·O?çöé3j#˪V±,lÜÁà‡’5 B¡ŒÁ@ÀB „H>Ü›, Ûª–­2j£ésû=uïïsçÚŽ!¸È¶£ý¯~ÝK9|h…R7Fƒùó‡yã_¾‹—.æžm÷ð«»6ó‰O~ˆÁ"»¶ßÁ‰‹‡ñ[-‚fÃÑ)–²ŒUÈeó %¾úÕ¯ò¡¾™øhZŒe:d3¶Þ³ƒÑ#pòÉ+*DªJ¥1%´ö:Ó\δ:ºÑ(ÐLDH†°/ŠZ­‰ )Jm#?:,p€$(âNuM×´´€¤IT”&©1IÇø.‰#‚ÈGʸ½T1 §m¢õô¬Ú¶Z-n½õVFŒP((–RF¦ïûO¨)‰iš sÉ%—pÆg`Ûöã,ÛØ·o7ÜpÛ¶mcÞ¼y\pþœvÚiär9tM§Þ¨308@µRåÚײmÛ6V¯^ͪU«[2˜ÄP;ŠÔ(x½hN/âx«Ýc\?%r¹•Á$•Ên`µT*u°¾ï3<<ü„}ß©©)n½õV®¿þz¦¦¦¸è¢‹xþóŸÏÐЮ›æÏÃÃÃ8ŽÓa®þêW¿Â0 -Zô¤Ð¶Œã•Ê=Ñ"›ëÃ=hF/Ø¥ôÜz´°ŠŒH*÷a„ÓdskÉäæ·‹”Â邨ÉJ5üq’¸A6{"¦ù¿·£Ca\¡VÙŽÓ¬áÆ‚LîDvËîA<êyP$qHuzoJ42ñ2 pÝGGïÅu LN1Ø?–ñ/ÿömþëç·ñÙÏ]†BÒ! à¥/y;w•¹â/ãuö‡TëGØ»çÅR†f-ÆW7Þx«WžÆÚ“Narr‚½÷Ã:r”ýèŸñ‘ŒÝǼù½\{íuÌ›?Ä©Ï8££ShšŽ” ž—¥«ÔÃ?ü׹ᆛ¹üòËèO™Ð¦`jbšîî"SS‡©5Æxγ^„)ðÕú>ßýÁíüáËÖðœ‹ÏÂ0÷ïÙÅÂEƒ 119J±Ø‡åäéÒzùàGÞÄKÿðä W~ö3œ°x9çœ}÷ÝG>Ÿ¡Õ°øæ·~@­v/|ù½Ü»û>¤0XsÒFާ<5Êûþ殾ú -ÈS¯¤Lè\>ÃW¾üªÕq^ò’çóý«ÿ7¼î•¬X¹¿5ËÒ¥ó©Ï–1t˶P"fϞݸNËÖ¬æO^ú*6žz:+—@—1Œˆ™™&¥Ò0?ºækÌŸgžy.Õê,Rµ0u¥Ò½C7M,ÒàIJÎs†!®T) [Ó°í´€•JÓ`4}PZÚÂß~…0:R! ‰ Ò¢Ê@%d[–%!–1J%íB„<† é)(¶›{÷îåöÛo'ŽcÎ8ã ffgÙ?‚ßòñ{ÍÝßr¹ÌÌÌ Ífß÷;çˆmÛ8Žƒçy ²Ù,¶mwŠbsçÇOb|ß§R©0>>Þ1¹( ŒS.—i4躞¾·ëÑÕÝEÿo l’$avv6eén¾ÏóX»v-§v+V¬èHäƒ<š®144„‚½{÷²{÷næÍ›÷˜€U¥b¢Ö(ˆ;3€n÷qÜ}þ1QFM"Š«4û1Í<°à‘ÏC4J’4±¬n,«ëx’òØQ7P )$ˆˆ8ΪybÁÔ» M̃ÖÍÆž;Œåˆö„1®EÊbÉ Ò¬Max£Xæ0R‰v7–<>9O!`µX,rê©§bYÙl¶?iíü±···ÓAò‹_ü‚J¥Âý÷ßÏÔÔTg®¥”„aH¥R¡R©P«Õ:g¾Þ!þØxž×1~œËÍæäÚ~d£Ñ \.366†¦i à8£££T«U‚ èke³Yz{{) {Ÿ¹ütß¾}lÚ´‰ÑÑQ–.]ÊÆÙ¸qc'7L’„l6Ë¡C‡( 8p€Ý»w³hÑ".\ø;V•Jˆ¢ A0N’´pœ^v]ëIµÇdR#’ÌL`&à–`å‡ÐŽÔtðz°èFO|éÇ |ÿhûÜÍÿïc®*‰КB6Ê(L4¯7·ì"B{lÌf©BZ­=DQÓš‡¡÷·M¦Û{.¦¹Më!ŽwEZ­£8ŽÂ4Úàêq³ÈdzÎó>ì9ØôœE0~-õÉ­èùÝxf7–Õý©93÷¹Îã'«Ù˜R a8C«r/‰; “Ãí?£¸œÄÌ…¾ßjwƨŽÔišOz5#›É¤Îö(Là “qÑt$‰‘Ò@ÓT§ÍÝ4í6“2$ŽR]Ò8‰h4XfB½ÑH5?M ˜¦E’H¢(ìÜ)–i¢-)†~⹆i¢™:ºž‚A¤ «ÐÚ“B)‰í¤ÊsZ qaÛabè:žç„!p=MèMè²êº†m›)P†8Ž…¡›´Z-ÇCˆ´UEˆtƒñƒ&Q£k:®›EÓt*¶¾V×5Â0B)‰ë:4uL35jªÕji0jÚ(!p)Áo¥N¦I"‰ã(m;¶M4=ձ𠻧§4–RRž%W(¤&MI‚eÛ„A€¦›hš ‘*‰Û¯e¥ÉEÚº¥IBȶ۟m›Ø¶“šX‰T ^Oµü<Ï! }’8B3ÓE®éB“Äqˆ_ ˆc…í¸hB Š…"aÐ@h Iœ€HÉQ¢©A…˜¦B119Æ•Ÿÿ2Ës<ï’—Òª[ÜzóÝ|üòÏqÖ™'ñµo]A_‡À02xVžf}:§Ûl6 !cdœà¶eµ–CÖ+P\6ËvùÙÏ~Dë‡?â¬3OE× X,Ñjøt廨Uš,^Á~rWÿàg¼îÏ_ÆØÑ4‘áö[~Ì÷ÿý:ŠÅ,ùð›YÚI”+wFãšE1×Ey¦É׿ù-öì?È•W½Ÿb·‰ï‡DIÄ‘#³¼þ5%C®ºêOøÃW< C7|úû@¹ŒÍL±éÖÍ,=q)ëŸy*ï¿—¿ÿôUd³_úâLMNÖ¢Ôå—×ý'óæ-¢¯w͆O©ØMËJÇq\>ÿù/pûíwðÎw½“¡¡yLOO"e*EQ,åÙ?²‡»îÚÄ™Ï<›È/òóë·sÙeßdx‘ÆÛÞñ ”Tȶm»‹K.¾” \® Ù¬Ç'>q%¹L?ç_xWÿà»DQ“W¿áMÌNÎ’ÍäÉd\®½aÿùãëyÛ»_õ×]ÍÉÖ#Œ÷†˜z/_ùòwxÁóW¡´*wl¹–.'—ïæúnãß¿ÿSžsñ³Ùµ{¯yÍ«8íÔõ”Ëã õæ,B3ÚŒxE£ÕB(žž^~ðÝab¼Å‡ÞÿR‚8•E-”²9|x‚믻 /<›îžªÍ½xYeéCG "’8F&- ÓNŸ]G² L©~³H[r<Ï¥»§‹$ ;ZÈR*41œ¤ ½mt—j¶ê$ dœ ë&ºÖ–ÑÓ’"•ø I Pè†DÓ¢§]P{÷îeÓ¦MìÙ³‡µk×rιç°éöMlß¶ß÷ÑA:Wp›ššâž{îá®»îbtt”ÙÙYêõ:š¦ÑÝÝMwW7ƒCƒ¬ZµŠ¥K—Ò××ÇØØ7ß|3wÞy'ù|ž à88oÎÎβuëV~ùË_rôèQ.¸àÖ­[Ç­·ÞÊÎ];9|èp‡qÓÛ×Ëúõë9ïÜó( ¿\3ïØ³gÛ¶mcÿþýœ}ÖÙ<ãÏè˜tÍ1r ÃÀ2­N!qrr²ò>¦@š„ªšE9‘A'<º}\±@•¤áH’ˆjõ™ÌgèQˆÝtáaˆºŠPÌ"(ÇÙØÇrضMoo/ C½>‰=;F¡ëdr«ÑÜ4ÁÂëB䆠rUG+… ý8¶‰ëºÇ'ç)&Ì­#]×-ûÔ²,J¥tuuQ©T˜¥Ùlv^ãû>ãããìܹ“;vpðàA¦¦¦¨×ëî“b±È¼yóX¿~='žx"CCCèºN­Vc×®]\wÝu:tˆK/½”… 099É]wÝÅOúS4M㢋.¢¿¿Ÿë®»Ž½{÷255E.—£¯¯E‹±qãFÖ­[G&óPò8Ž9rä;wîäþûïǶmÎ:ë,–-[ö°ÿ9Ï“ÔÔ8`zzºãò»qÜ Ù!¦ÈdNÀ¶‹èz†”ÍøXÀM…R d<UÌDv!dúdÊ#:šî’ÍžˆïÅ÷'ˆã:ùüIèºû¿«h–ø¨Æz}мìG÷Šˆ|ع¶ÃcB¸@H9‚eEäŠëp3MÈÉ*„Ž®gÈf—ãû‡ðýÃ$I@.g ëÝÀqÙÇ»þæcÏÀrz)tm V?L£v”Zù^¤ÕE¾¸¶Ãàž#9r„B!5~²²Vã¸N£z/õòÈd’Œ»’\é\,g>a ©Õ ŸÏwºÒŸ  *€áÚ6žë P”˳ä<T€ëhhBbš.¥’ƒ’‚H¦ i…øQŒíêH$­¦ë* ;m±O’ÍHµkZ­ Žn@ÆKA\)|~à“1<âD⚦fÓ¬×q]‡”Ë©hÖk˜–‰ëfÛ62i{­•Í„AÜ]¢+P*ÂÔAʈZu©ÃtpÝ,‘ߢѪ£é97Cœ„ ¦¦c:.h‚ ÕJc4Ÿ(JHdªÏ*%í¤V¡¤@ÊT ÖËx躎íXLOM¡” ŸÏÓò$q‚e™Ø¶…ïû$‰J?a 4ƒÈÐu3ÕyµMײÓVá8Iµ›¾D]¤ ­DÉdQB€¡c[š)P€åX(blË"еZ MÓÉåó­˜(‚\&ãxA‚=šÂ5uZ¡OTȸ‚VØ ÕJ0u°-‹$ö‘a„¥»èB ÌT†@A‚$ },SÇÒ-’8AÆ ŠTwRÓÒC71 –h´Z˜¶I+ŠºM[lºóNnºy?õW¯Às ~ñókø›÷]Á[ßr)/¾ô", ¦Æ¡IÈØº¦PV†°Ù"LLÓB’V»R“+dSΉ2–f`z]ä»}=y^õÊ—qý ?çÎ_ÝÁ†õk°u¡ÇÃÇpBt×ç9¿:ßúî·¸oïN¢Àå¾]G¸ês?bxQ–/}ñchÂgb|Ó IT€ ùBñÞ¿¦·¿È'¯øRÄÔëË`ÿ}‡yÕ+?J&7Å·¾{%óúsLíG3™ÏÌãÀÁqîØt;gŸ{«VÄ};·óÞ÷\Áé§.áu¯ùcdl¢T„”‚í[ï`ÁÂúûJèXLLN³pá"š¡iöòÏ_ÿ:ÿö¯×ñÉO½õ§¬frlǶð›1®íqpd„ƒpÆYÑ?oD9>ðÑ1=]çãトŋºÈçºùç/~—•«Öb™6åÊ ýC‹©UcvìÜÉ5×ü”·½óO©MO3;=Æþô(ö˜LK›Rq [îÜÄk^{9ùæS0„bÍÊõüçÿýÏ:ç9¬^3Ÿ÷¾óË„qÄ¥/{NÎçç7^˼ËWðÁ~SO^ÅîÛxË_ý}Ý%tZt2Ô’Dâ9.Õ™&I3D·– /`¶RçÊÏ~w¿ëÍ /fòкJ‰4(fVpåg¾Ãèx™½ö1S®àåshzHÕp-‰ tfËM4!ÈäR†ºa¤Á»e ܬ‹Šc’ÄGH*-ld½ Š|» !“¡¥zÉ)‹_tº{ #5°S2ië«&HÍB TªÑ›ÊMa96ª­Å,cù´’ÁTJQ.—¹ë®»¸ñÆq]—eË–qÒª“Ø¿?†n<ª÷ª×ëlß¾[n¹…Í›7·Ù÷)Äóž­#°Ú†J>ž›Áò2H?¤åGÄIB(A'i’ÖfÎ €$¦“ü…Q€l¤ÌWW³Ñu0Í´\Ó,db>„ÖŸ¶Á* Å\ûl!…¦é†F¹R}H²iÚ)’‡Q”¶Ÿ"ý>Qcév›1jÄV )%v’‰T×Ò²¬”+jµô`ÖuË´Ñu$Qt„&:…žÔå¾ÞÖ”Rmê|Ê I ¡¤”d2fgg¹÷Þƒôöu‘ñ²m¶¨‰®ë(™~I™$>Q`š:(¥B×PB'‰#ü ÄÍäP$H™`Z²Íµm›zc)^ÆA)A£Þĵ3$èºE’â4C‡$& BÅ$±Di C‹A“H)P±Rz»eÆJÒD¤Þ'J¢¤Â¶Ü*¯J Úbª*‘M ”@E •BW…BXI¤n¡ëåj“­Û÷à:]¼îu¯âÛßú&ŸûÜ×xï{.啯5S‡öRz»KÔ+uÆGGp½ …bºzè£P‘LMÓ 0ÏA· bÙB(ŸZ}׳X¹j9ûGî§V­¡—¶c2==‰ëº>º¡!4Sgÿ¾qZ “Ï}ú øèÇÞÂIkç¡k-êõi‚–AÖ[LÎäþ[æø«·¾…VPG‹\v?úá-üíß^Aï€ÅÇ?õw¬Z6Èìø(¥B‘é™I2^ž{wífç®ûxík_I3hqtb‚w½ûýä²KxÃë_Aµ0MVÓgÛŽ»Y¹f˜LÁ¥ÙÐí„Á¡¦¦fp½"›µ•Ï}þÿrùåoà̳ÎaìÐú˜§««Äl¥Ì›·pâ²¥,Yr2³u‡/]õeîÝ=ÁÅÏ]Ì Ÿ ‰sý­?¥«Ëeáü…LOÖqó¾/ÈåûøÔ§.ç¢çlàÔg¬äšk¾ÇK/ýJ…;ïÝÅÂù«Ø¶kôÊ¿ç‹_úžóÜ 8pè0×ßp3žû|n¸é6²Ù…ØÅ{ßÿNLžâäuç19-ø£?~7çŸ ÏXÍÄ‘=”ºs$2"Il&F«\óß20¤³ÿàff§ZHÃG×% Í0pl¥t¿Ab¥:ÆBk³Ð’0 I’¶´…LýMXØv³]PHƒT^D7@)½s¨ëÖ­cùòåtwwÓÓÓƒeYlݶ•‘ý#d³ÙŽÌ\5Ô¶mlÛ~X23gÊçyq³uëVLÓä /ä‚ . —Ëáº.[·nå?þã?Ø|Çf¢(âÅ/~ñoVç@å{ééi …B§­vv¶óš¹älŽ…#„ ¿¯¿Óšøèo¼cMjT€ŸôxWd±µnP1RN D?BØ¿ÐBk]’ã7òqO„n7‰õê6‚ÖQÌža,ë¸Úê±¾ï3vô( Á ºÒûnº¨|•õú³§!ðD/†XHÔ!œD†5fªSÌÌL088tœµú4I’055ÅÈÈH§%NþfÎ$øÐ¡Cüô§?eÿþýlܸ‘E‹Q,±m›F£ÁÑ£G‰¢ˆ|>ÿÖÓx9'ô`éœL€çyŒŽŽ²yóft]çœsÎa``˲h4ÜqÇÜrË-\ýõDQÄóž÷<Ö¯_ÿ`uûöíìÞ½)%]]]8ŽC³ÙìxpÌ[­³³³¶T*‘Éd~gg´RÍæÆ^²Ù>r¹Åaƒ÷•´êc”Ë{H²=8…ùã·3 #O>·’Fc?Ê.D`å³ Œ§¹.¹BQ%’4ô‰«a•ræãdY(‰l”IÊã¨H¡²]¨Â"pÿg [Ó,’ϯ¦Ñ¸Ÿz}¥òèzšfr¼€ù„š¸=Ë0Ì€xt$w!{W¤Loò‘Ê‘-\¸ð7vüî‡j$õÝ0¶»1EqÕ«1 ë:’žJ©N^öTF³Ñ$‘J¥FD¨4hÊx9lÛ&ðâ$†(D'@[—NC×5”RJ4ýl)çL§4LÓjëëD$¤Lž( QJá:6¶i¥:­a*G eÚ¦¯éZ'yVJ1JFW&ºž2SMòl‰ŠÛ‹ÕÀЭT^°,”Žm»Ôëu¦¦¦ÚÂ=H™FŽíbš‚(öÑ´TkUÓE[ !eÎÆIÐî~ÐÐ4]7º‰h·±išh2©ñB¢¤D‘JÌé@†‰aDQ„” ‰T †©§:²qBaè:~ņ©·ïQŒm§]RJâD¢kz»YÇ!RÒþ9ý}’¨”+%½ kÄÊÇÔL„‘!•hÙ„~ÇÎÄ&õZÀöí{xÑ‹ObËæÛ¸âS_ãë_{§¬?‰=;·QÌgÈçŠTk-lÛ¥¯¯Ÿ‡³ëþ=  –1Žmc[h Çw¨ÔfÑt빸ŽNÆLNN'qâ·–5ìÚ±ƒÜT†åË—“Éñý™XÔk ÏÜð|®þ·ÿâ—¿Ø:¼õí¿Ï³Î9F}DbÑ¥6ã’/-æûšñž÷½‰J¹N«q‹|óŸ¿Ïg?û}†ðÉ+ßÌš“VѪOÒ ÊØá6˲U=Øž¢6¡!k1…b/W]õ%îgã3ŸÍ–»näÙ_@ ’Ð¥§´˜CóÁ†7üùF.ù½05}7£qúƳ©–gñ<.~Î[ø«·?›Õ'çÙrçNÖ¬<•Ûo¿‹/~é;,9!ËiÖqîÙ§a[2 I¢¡tLÇÁUšaE‹ç#T%r¼ó¤Ù èîõ¨4&"ATêå…Ãk¸ò²Ë˜­LòÊW½˜+>ý=¶Þ³•õ§¬Ä]lËN[î“´ýÌ÷SÓ¨$ËL™á©Ž²@( ™€Ò=eó«©ÄI˜¶r H☰m‚¥i¢Ã¼PJ¢Ð‰£„8NÀ4Ûr!ºf¥ÏRHÙ®ì%¥§:µ ÇqÌÁƒ¹ãŽ;¨Öª,^¼˜µkצŽÀ–‰ÐDG摵µZmÛ¶ÑjµX¹r%gžy&Ë—/§P(¤æšF¡P`劕 Òßßa˜é$¥Ä¶m†‡‡Ù°ak×®eppÏó°m›Z­F__;wíäž{îaãiÿÇë-—Ëlß¾‘‘„\}õÕÜ~ûí¹¦9¶N³Ùäž{îéè'͵ >ÊŒZ3h­ ²va0 çxÀú¸‡†pJÑJƈªûÉf‹ÿc²¨1Ç,ùPºI¢$Iü·û||‹aÛ6]]]¨°ŽVEÅ 8`e~#ëìX=gš›EÏu# ‚ ¢v„œ[DïîÆóŽèO§Ñl6Ù¾};7Þx#år™•+WröÙg³hÑ¢ŽgÃÌÌ »wïÆ¶mÖ¬YÓaƒf2 ÃhkàWÃÞÞ^ºººP©”"“ɰtéRžñŒg°víZz{{1M“(Š:Åá»ï¾›-[¶°~ýú‡«Q122ÂÞ½{i4lÙ²…/|á ©ÔÓƒâŽ9)£pðàÁÐû»B Š”³H DMë†cQÚW ²yUÞFÖ[@6?ý°ÜSGË@b`5Ê BnŒ§¯‰’R ­æ8~0‰nváxýh¦7'‚ú8àÚ˜–Ÿ#›ÍcZ:I.WåñãÿŒ}ø+üÞ‹O¦Pð¸à¼‹Ù|Ë&ذq5cc{¹ûî-tuuÑÓ7baA”áò}ˆLž{ÉN?}G̰cëÎ8ã™H}†FkÛó°Anºa ?üá&^òòõ¸l<}-}= Q±ƒßœá%ð!.¾doøóP®¢ë&»Hû´8ÿüÿÃ_¾é<^øÂ ¹÷Þm,]6Èî]{ùÚ—¿Kê¼èpáyg`™±M“$LÙ a3 Œc ½-á: ³|áóÿÂŽ÷ó®÷¾…®^ø·|‡K_üBÐ º{†øåÏn㪫nâ#»” Ÿ} W^õïÃÃà ³`Á\×íœù'9O’„b±È)§œÂÙgŸÍðð0¶ý@ÁlÉ’% ³yóföìÙÃäädç;(¥Rv÷ØSSS(¥Ø¿?GŽyØ5)¥Ré¼¶¦êŠ+p]÷wó¥9óbšt½£Â… ¡q½r/ÙÕxùyÓ}Ä›€¥e0õdX%J`¸%„î<=·{™ ¢&a}†(òÉO “=á“ ¾<@-ÞŽ¦w¡ƒÍ~äó`•дAfgwÓhÅuç·Õãã‰ý˜ .$»™ÆÌ½h"‡“]¶IÇÌÌÌ ”¢T*=¹€U%QAÖÑ»iŒíB˜è½‰dVB­VCA6›%—ËýV™˜'m|”Vý$QÇ)cÒu]â(¢Å(©£k:h‚0p= ¡‰L“¬”}Z­Vi6[mÐÒC&ªmTå`Ù©6©”ª£y“‹:I,ˆ¢Ç1¢)3Hº®Ûi™°LÙ®X)`ª¥nô¦i’q½”½êhšŽ’Àq\Íf3ei‚8‰ñýfÛËl3NçŒq£Dª…˜$%S D©¸ý:”åhµR×oŽã´ï H™àØ&¦eÒl6@èØ–EDÇJM×p]Û±hÔSV›ã¸ØŽA³©:çDGÄq„e¥†`éçëÖ­eºfz­V)¦i£” Z-£iºBSh¤sF-tCChI£ë)h>wÈ‹¶v¸R©Ó¶T©S¹ „F"C¢Hb™v ²ª,ˆ¢T*¢4Hd„.ì”í‹T²À1lM˜´až'¸mÓ]¬XÙùçÉÄ‘ýÈ$¦¿¿—££cܹùöïaé Ë9ÿ‚gc»™|…ìŽcu®=Ib‚0$ CªÕ‡DA!_ X*Rê*Ѩ7hÔ/£Vعc',^ÂlÅgß½Ó|ã«ÿN£åó‚žÀ›ÿÏ©5ŽPmÔ‰e…¡a¢–Å?þi­)Þúž7ây6F8„ëføñoã­oùϽd%Ÿúâ_Òßï11>‚k05‰(d¹æÿJO÷|ž±áT&ŽVi4B^ý'ïc媓xíë¥Zx‡»6³ç¾},Z´˜u'o`ll+©“É:ĉ®™ÜvËÝ|àý_⢋Oåï>ò¾÷½«¹å–[8eõ©<´—;nÛÂøÔý,fíºS©V L³‹Oæ¹çW÷±jÅGþî=¥³wß.Š%“þ.ªuE3(Å>QSòío_Í)zèïïgÕꘖ…®Ù(¥31>ÍÛßñžyF/ïyï›HTˆÒDW.AËæï>ô~.~ÎBÎ8ëtjÕ*ù\‰­¿ºï~ë—ø-›÷¼ë"^réK8tp„žÁ!åü0 ŸËP)— ‚C7ÈgòØY+“ã®ü6_ûÖø‡ü{öìÛA+iqÒêuìÚ½‡Åó\Š^—âÛœ}^–—¿âRFÇʘ&Üu×vn¼þN>e9­F€Lº¡¡ mj÷@`=·Ípš¦µƒÿÃÐq\Û³‘IjèÖ¨6A)¤’íâ„@)Ù6¦"ÕhÖ4SC™H4a [s:šsŸ¥ˆã„8’O«–íÙÙYî¾ûn®½öZ¶mÝÆE]Ä\@©TJ÷4TGOô‘~o!™L†•«V2²„›o¾€J¥Â‰'žÈààà1iÕu|>OWW×Ã@P×ubppÉÉIªÕ*333”J¥‡ I’P­V)—ËH)dùòå¬]³–îîT”RTkUvlßÁŽ;¨T*Ì›7ááar¹Gg£P4¨Ó¢L^ ãïtDÇøyD½J 1ŽQ=J)èE˜=oa>ÆØj»›ç8¸z¬G³Ñäð¡ZSÛéRw˜e’\iiÿZrœùøq™µñ=IJżyÃôööŸ §°ºwï^~üãsýõ×3;;Ë‹^ô".ºè".\Ø6… .\Èôô4¿üå/B°nÝ:–,YBÿã”R˜¦I±X¤T*=ŒAê8ÝÝÝär9fgg©V«T«U<ÏÃ÷}fffh6›‹EN8áÖ¬YÃàààÃÓ9-ֻロ£G’Íf;æš¿‹Ø/ÊÔj#hšC±¸Óì:F»r Ì@cfËpÂ<È/xäºÌB€Û…P«íÂ&è"Æzº> þ,Zõ0Ù†À3‡Ñ)Kôc蕊ٳñrCú#-N‰6ÐÞ8(UiË9?oŸè¡ëÅÒŒæõò]P¿f÷"НÈòåË1 ãaæx¿ûµ\†™=¨Ñû0™e°œK¹„qg?Ïd2Oi‘‘Ëå¨ÕË8ŽM6›eôèh Tz.RJjfZ™p\×j'ü B›èºR`èŽí¡ F«ŽiZ†Eà§ú«…B Ë6˜™™!ŽclÛn30ƒ6ûF#‘"Õñ”²SµLµHÓ–Ð8IÃÍšÓòÐÐ ¥aj¢~ˆ@`·µQ…DqH£Ñ ŒšFç÷®ëâØ?" câ8Är¢8Âo5Ð4£ °&†…i¤í—²}sr(EàGXNÊ<«×븮E&T본®‡çY4MÛ#µáR´Z ÝÂô<Ü$Ahm@TJB]O[ïMÓÀ¶MšÍLV šÍ¥$¶- BŸjµL&›²™âXÇ!†©á:^[‚âXú>-¿I)ï`ÍVØ™-¤LR£™¸‘Œ $2Dª[OçJˆTš!ŠÂ6«OGª„( ÑÚ ­aºn¦lb)Z5ÍALµZgjªBuVñŸ?ÙÌ׿ñ„–`™ž“aÇŽíüì'?cé²¥¼ôåDÎË“Ä n6G$¢(¢åû˜†B7ìÔÉ^ª¶6®…ëêx^‰þ¾~¦¦Ç©ÕjLLŒsßîÝœ°äDŸ°”‰ñYæÏ?_üüzr¹ÊŸ+?ómöžà…—žÀGþîmxžN»rõjLØ|ó?`ß¾{y߇߄fÕ0l ×^ÄW¾ø>ðþÏð¬só῞bÑÀ÷'£G/1>ZῸš“V/añ’AWìØz€w¼ýoyñK.ä-oû#¤‚48tà0{öÜͧkͧVÕ0Í®aRÇ6»¸ñú-|àÿÄ+^ñ<–Ÿ´ÿüÙ5¼ìå/áêû “,˜7Ì·¿û¬=y˜…Ã'Ro„ŠC|ç›?äŠ+¾ƒfÂg?û>2^ž÷l'—5XÊ*¤h&a cÚ®üü×›à5ox%ËW,CÓŽYÂp=*³eþôaÍš^þöoF7#êõ®ea˜ž×ÅŸ¿áý øðeocûŽìß»×ñøÁ¿ÞÀ¢óù§/¿šl&ÃÔÄC%¦'GÉyY@199ßl¦Àx¡Ô.€è|ñÓ_äk_¿•×¾þÅDªŽé)ü0¢1ásÑùÏfÏ®Ã|èóïb|rš«þñ2ry“ð@îؾý0;vìæ™gžŽï7Ð5Mƒ( 1M‹ ð¡]È‘RÇ š–Â&–e£”ê˜éQˆ¦û˜)ã5u>MôÙ ÒâLºi 62މcÕ.é [$‰TÈDáyY¤LˆB‰ýÆ_æÚÚGFF¸é¦›Ø»w/ÃÃì^½š¥K—’ÍfÛß]Ðl4™™¥\.Ójµ~kr!„ X*rÆ™g`ûöîcëÖ­LMMÑÝÝM¡P ŸÏÓÛÓÛ2ç>ïÑ\¿®ëär¹_[ Öu½Ã&M bq‡û`©›8Ž©V«ÌÎ΢”bÁ¼lܸ‘7Ò×Û÷÷•RrdôF¤Æ|¹ƒƒƒôõõ=„9óHGBL@„T:©[úñ@øX¢y⮣0®G“Øîbt·¡¸ÕÐÐp•ƒ‹F«ÚÇ×ú±J Ïs‘fH<»3×KÆ^‰©åþ¿ÜcM·É–#êûñý*ºÙÀÎxO›ŽŽÿÍ£V«±wï^n¸ánºé&¢(býúõœsÎ9¬\¹’l6Û9G5Mchhˆg=ëYlß¾ÉÉI¶lÙÂÁƒéêê"ŸÏS*•dÁ‚ ?j”R ˲:èÿXÓgŸ1RâPØÑQVs¹+W®ä¬³ÎzØu!h4´Z-víÚ…ëºtww344D>Ÿÿ«I† 'ƒiv¡ëÇ‚ ®ˆ“:­ÆA‚8@Y]à”ÀÌ<Š‚ŒÍ;Ñô°Ð4AøÀÓO Jê„Ñ$†‘ÅÊô"ÌcÅU êP«¢•¬ž…˜ùG¦uûà¹Ð4Çé|Z­HaÛ=ÇD‹÷øøM¹ŽŽ©g03ó!;¿1Acæ6ÛC™jµ®ë¶I~Ožç!ò'ðËÛ ´&²0ØéG9L«…a¦¡™LæIwÝ:>²mÝ(bYaäÓ×ׇãØèšŽïû˜fÊ@F N&q‚ã8AÚÆ˜j ¤ ž$‘T+µNâ)„†ïû„a€ë:A€¦‹¶;s“F£A©duPäò^›)™21«Õj§õ1‰e[³Õ"Hbâ(j‚DÊ”ZoÏç)Ï·a[ø›Ž©–L’T#µ­a×l6‘‰Àq2DQ’j‡èR ¢H¶Yœ:AÉd‚€8JÚ÷ÅAÓ®kÓjµðÃ&GŽN3oÞ™L†$ iù-¦§'ñ<—B!O'$fŒiê´ZaÚ^,$ÓG¢k:¦mÐj5‰¢ÏsÛn”³¸Ž‡¦ êõj4 h6k8Žƒi:DQˆaêíkôñ[a¬ŽcI£Y#—MÅÃ0@èɺ´Zõ¶Ökʶ#I£‘λf¤LÕ9@À04ÂHá·|t=ý,]—„aŒ Ü-ìD. IDAT-KÇ4$ CÁÿcï½ãì¬ÊµÿïZOÝ}ïé%e’LBB B1RzôUQQQ°aï"ˆ{=*6¬¯œW9âQQ@&„PBBIO&3“©»>u­ßÏž-ˆzŽ’ få“òI&{ž½Ÿ²Öºîëþ^ÕZ•®Ž,& ë¨áÕÈæÒ(m¡E"P‡aÄĘâ…/îæ¨Õ«˜œšóó«¯æÎ»îàõç¿‘B>O*~ÂÕ5a´µuÒÖÖÅøØ( Ó0UH6“'Š’ðµ„¡1«§¨#Æv]¶nÝÎ]ëîE+—R{'a30°˜mç›—ýŠJe”ó³|âÒ7 ãqj5“ÞÎ^ÆÇ&ä7×ÜÊOök¾ý½w£Í!¦¦=J…¹üǮ咋¾Â¡Ëúxÿ‡^G.¯Ú½ ­c¦§|¹óÎÛ8té Ö»­%×]{#o}Óçyå+_ÌÙ¯8“†7A¡h³cÇ6ÖÝõGŽ=~5VÊ!•Ê¢#CFÄ*Ä2]n¿íÞøÆ/sÂq‡ðš7žGOO–ïýà ü⪟ño/;—믺–›~ÿ[æ0Þ"&'+¸)›Ý{¶ò ¿Šðž÷Åâ…G²î·32ò Ï<ùéLLîeçŽôö΢«}!ßÿá•ÜtË-|èâ—qÌÓV19QÇ”Y5‡8öxÕ«ßMï,‹·¿ëlêIÚÓí8V ©5®ÓÉ;Þñ>Ñ}ø›ÜtÓ-ttæ9ã´óºW¿ž®<¯{ݳ‘f@yªB&•%Œd2.Ó•)¡Ò¤3yJí cÒtøÆ×~ÂW¿~#¸ø%Ì[ÐÏ]÷ü–“žq 7ßt;+x>0Æo®¾‘ë~·‹ï~ûMôö—ˆbM„ïC&†@`aÐÀ5mRé$Í;Œˆ$|. ÃÖ"{æÙ1ÃÞŠã˜Z½Ža& êÄÕ>sÏÌ8ð£„}ì&!TQ(1L‡Èš‚œ$ C$lÃÀL¥A@y²B{gV*ƒjÇ:fX¡[¶lá¶Ûncdd„ÓN;þþ~”RLOOc“““ ³gh{÷îebb‚ññq²Ù,¦ibÛöãDM!¥b‰µÇ¬ q3<<̺uë¨V«ø¾ã8̘ËGA*bþ¼¿¯¥j ‘ÉdÈår!ðß- ¢(¢R©0== @oo/‡~8Ë—-§­­­…³B´Š‹ÓÓÓÄqLgg'=== …¨"Ý$·$O>É lCשË2m¹4F:›¤ÜûFxi™C‹:†*ƒrAZ€qðÃÙÃv:ÚÛp½Ñ12,$ï¬Â’%Ä~VsÅň JTÝ‚ãä:;He¶¡°OÄæšjûöíÜxã\sÍ5lß¾Ã;Œ“O>™Ã?œžžžÇˆç3ÂêI'D¡P`ýúõìÚµ‹Í›7·Pp…BC=”µk×’Édèêêú»xÓ4Éf³8Žó¸9ÿÏ;kfÞ@£Ñ`jjª‰nK3gΖ,YÂܹsóZB&&&ZLØl6K__íO 7X'!ÄZ%9"Â|L°ô=ÇaP¡<¹…QDØ…$üîxƧdGª‚R©fxÒSkõñ©P&•Îaåòˆ'XÕZ6Pñ(º^‡š‹HÏ…LÍÄçÿùyét†$adqˆeå1®gþ÷V§ YX†ç]O¹r;ç!ì ·‚ïþ9 ’Ρ 1D¹² cAa #‹òò¹Ö^yÆôx Óu]Â(ÑÇq@øH™&Žc´N8¦i"-Ù|è'!*ÃMÑ1¤\.'ŽGÇ-1M)M¤ÓL„OÏ«ãõ÷F©¥®ëàyAÂø #,Ûlm,[Âi#¥²åvUM'kǨ(n‰}‰»ÔÂM§˜Jxˆ¶máùuj5ÛžAHTœ¤ÛÛ–‹a¸D*A$©uÊåiR©4ÓÓÓ‰kÔµ›‚ áÒ „FJ(•J€&ŽÂ(À²ÌV»¦ÖN§ÑZEaÓ9û'.lÇÍð§V ßóÐ(Î:ë¹ ¥Î>®øÁwÙ±cüÀ‡1Mƒ8R†Æq\Úô0›Ú–-S®Tð=ÑdÁJ‘°fK¥ Ð××K¾˜&Ž#Ûell’ùó’É–øõ¯¯cÕÊcXqØ”Jñ¥¯|ŸM›†!†¯~ó2®I®˜gh÷‚°@)?ßýf=—~ò³\xÑëèîÍÒˆ&¨Ô5?úÁ/yï;¾ËÜ…½|áËï£onŠñ‰­d29TdÑQ²¸êªËÉçÛXµæuͺ»ÖóÉO|‰—žý ^ýÚç#D@½®˜fãÆM¬Y}sg/ ^ؽ{ ®ÓŽR‚YŹ\÷›_ñÁý;§ž6ÈË^ñRî¹ë66X‚ÓO{wߵޛ¯û/|d«\Îܹ³0,i9Ä8¼áocl:äÔSòÊsNg÷®]LOÔX8¸Ý»·c;mH™â¿ü߸ìg|í²w²`a7SS“ÄQŠöB7=¸™‹.þ,K-ñ¡‹ßNëà7µªGàÛ¸n‘Ïî«ìؽƒÿÚE¬¿çVfõÏeÎì¼âì×°hÁ|Þóþ÷#ŒiÜt7ÅvlGPžšÄMe@HÊå*]]=¤4£cchóãþ€ÛîÜÀ7¾q óéæá­ë8êiËøÃ­7°ôÐcس{šûî~„ï~û>öñçsüI«Ñx¾ÉÈð0dz­¶mÛ€ë:ØV¡#ÂP!EâzÒMa5Y8ËŠdy‘ð…¶ecØ¢x7¹^²Y J„4¥h2©c$&(ˆ¢¸ne˜!5Ž›0е ¨ÕªT*òÅ"¶0ˆÂûw¬ÎˆŠ{öìaóæÍ‹EöìÙÃ5×\Ó=Ïãî»ïf×î]xžÇÆùâ¿ÈÂ… ™¿`>Ç} ===Y4̇’ôà¾~ÆÆÆODÚ={fûöí ãº.'œp þ]‹™Éÿo ¨ÿ³uF¬‚DX/•JÌ3—¶¶62&h­[@úT*ÅÒ¥Kéëë;`ùCO}Étæ‡ø«èˆ‰ E„²$˜¿}ºáF:²µ2ÄiHåÿ—ƒ•þuF„LM•©NŒcE5,7S˜Vz¿¤s ÃÄhëŬ:°w˜J´• =N»‘Á²nèÄÇ1›6mâ7¿ù ×\s {öìaÉ’%œxâ‰üñtww?nΓR’ËåZÝ'ŒŒŒ0<<ÌÈÈCCCŒŽŽ²aÃÆÇDZ,‹#<’ÁÁÁÿqQòOEróoÎù.´Î¼§ Z]—étšl6Ûb¾?ú{(¥˜˜˜À÷}æÎË’%KšÆ ý,2ÄÔöbGur™vL§}Ÿƒò+„[±´K¶m–Óö½¾00R]•Æ. ¥H¥rO9AO¡ °¤ËÜ'†\­a4Fµr? Ý@§g'Îá(ÈÔÀ0Š˜¦Om$Žkh­>ÐöðÝn²¥ÕèêCDãw *;I¹t¶Hesÿ$¢jó™Ò˜BU¶;pÚ—cu­¢á‰ÂD'û§Ã<aµV«Å~âP|”À7Dd™V³}<"Œ"T J i¶3¢a8NÂ%U:" 7˜aJBÏOZßë>–e$Û­ÂqlaYqœˆ…)ÓE7a”6…Õ$iž&T …‰4C¤’–YP¦ÕdnZÄa„çù¦HÚéMƒ02ˆã¥âfÀ cbUGEƉóUÇÛNÞ{„8NœˆR6=a.šf µm›0Ô”ŠyªµjÒ2j&bL.W }´NÞGòY†ÕÚ`Û¶ƒi&7RÈ&K5Â4%Ò€8ö Ã!†•e-'®e™­VügaTœˆ¤¶85E.[ä”SNç§?û=ýƒ|ÿû?ä·í êÁ^»œ3Ÿ{ ;¶=ŒçMà:&(Ey*àË_ü:oç›9åÌcxäÁ;(•ú¸ïîÛ¹ð?%[4ùäçÏ¡{–Æ÷')•zQA¥¦¹ñÆ8lu?mímd²¿üÅxß{>ÃgÇ/y»v>L.[`z¨Æ–m»9ì°Õò‚é)C:´uäÝËìÞe\yůxÛ;/ã¬Â[ÞñJþð‡[˜Ýw(;¶bZŠËã]ï|Ï}ΙÌèD ¥Rtô.ämo~77ܸ‡Y³á‹_ù ÕÚn¶ïÜâ…‹AÔbœB!C©ÔË7läòË¿ÏE¿EK3>¶ ‰A.Sâ?¯¼’}ìÿrö+ŽáÜó^ Âgtt˜ysS-k2©vÞýöóà–‡¹èã/eº2ÎÊÕˉ£,/zþy,ZÔÃG>ñ¦&F˜áÁEøÍv¨T:C¹^G`ÑÞÝËî¡=X¦C&eqÉ%—±e˾ÿÃoÒÕ3Ÿÿºú‡Ì[ØÎîᔊ%†÷ŒqϺ-|÷›¿æC:›—¿ò¹LNmIÚ÷c—õë×ÓÛÛÞ=>{öìÅt$RZx ‰Wóq- ;—‡(D5‹I ¦9³koVðe«ø¤tÜä¿-W£m»­p¿8V gž]²‰Úh†½YBÄhmE>š­õ%•²˜3wa”ü¶00õnoog`` åL{\û{¹RnOìÝ»—[n¹…ÉÉIb³|ùò¿(^Î×-ZļyóZ“““ìÙ³‡x€«¯¾šuw¯ãºë®£P(Ðß׿ßïÉõa·R/g6VŽ ‚€Í›7sÏ=÷055Åàà GuýýýOhÑtЭú¿t}#01q°„"ø [1e=ˆÝ×7¸Y´¨íBÁpÕÁx l09µ›ÊÔ"…Nçй4ÂØO9i@ªˆvlt4A½º•Fz;Ù\r]«Ú¨V«ìÞ½›k¯½–›nº‰ÑÑQ,XÀgœÁÑGͼyóþê|7Ã<Ïd2ÌŸ?¥µZññq†††¸ë®»¸öÚkÙ°a…B\.ÇÀÀÀ~ÙÈ›¦‰ã8­}rè$ø¸G±±1|ðAvî܉ã8,_¾œ#Ž8âBýœpÜ,.ºäƆwÐß?ÈÖGîÅN Ü\†öãœ|ÚZŽY»œñ=#ª›‰=9>ý±«©y—~}ú‘lÝöG &†§±™Ã¯~ykŽ™‡cd3]üöú›øÀ…Ÿãøã#}?´Žl֤јäæ[®gõ«èëîcxt ¥R7CÃc¸®ÁÜ9 ¸ö׿åíïø«Wg¹ð¢÷¢Ä$G¯]Ɇû¶qÔÚ#ñj_û÷o0¸h.O?î0´ö©L7èí™Å÷¿õ¾õ­›ÉdàË_û©ŒÉý÷ndõÊC‘(â D¡Eº‚?Þ¾\üyÎ>ç…¬=n){öŒãXEz»ûøÖ7¿Ã׿þ+Þ÷ðŒSNÄójàÅô÷-`j²N±ØËkÎy#ŽT|ø’7cZ>ÝÝLMxœñ¬sY¶|^ô66oÞH!/h/¨–˜RrSQLgG7ZX<øÐ# Ì`hh˜¯|æë4‚¾sù¥ØŽ`høaž¶öHî¹ÿV­|:÷Üý0ÿù³ßòó+ïç¬ç¯äŒ3N¤VÁu4ãzº;Ù°a˜µkW!Ä4Ž…5Ð>Rêf‚‰P‚ Š‘¦Rª5Aý©pa´ÜRÊDLq›¬ç`fñœ¬ÐRÍ«¦ë>Ô­‚‘4$ßÀj¤R)´†0Ž’{T œ”KÈž äS© .äÙÏ~6K—.mu'ÏI'ÄâÅ‹Y°`ÅBñ/¦êΔBˆ–hé8©Tж¶6r¹CCCìÚÍØÞ1Æö޵Îé~xͤ“¡X,"¥dbb‚mÛ¶ÑßßßD¸$ÏíÉÉIn½õV®¹æ¤”,Z´ˆ5kÖ<έû÷.ƒEóÇÁ±¯o$iÒ8d1u tDîàfc¿d–HÖ™Öl]#ËAauŸ=¿Œ€tjŠ8ë#Œn°‹ûÙ ,"È,Iή⦧q-ÿàÉ9ÀF†<ôÐCÜ|óÍ\}õÕ”Ëe/^ÌñÇÏQGE__ßãö†3®Ð¿4çضM:¦³³Ã0غu+CCClÛ¶‘‘‘Ç ›û\Hhg*•¢T*áº.““ /~zzºº<óu›7o榛nbdd„¾¾>Ž8â–.]ú¤«Š˜Šš@J›¬Ì!ØWÜätíï†é-ˆÜBdq>8¹Üå. ‰±aÆìô”qÓ;°©“Ïtc¸û É€Vho=¹•³Èµ bZ™'°&Lònþ´®ÙÝPZGeÊ7P†ˆ2x¢ü¤Ùq¬~_û¸õ‘”FËy*¤Ýlá—’°¨  à C&?g‚‰Ã&N ¹Ž•„½ 1íäæ²L‡ ð}TÊE°ÐM§¥ÑJ‘S*q:J™´ýGQH£ÑHž/qœH§éÊ”MAÃLþR'·s Žã!¶•„Daˆ0b¢(h. ÓĶ’`*­ „HÄX%" íX UE 6ðà ×2,,[7O˲ˆU€m[Äq@>Ÿk~6´À†abY3©B©ÏkJe0¤C£áµZ•ЉÂä{#"RÒi†P9Ék«(ФÄQ¦‘´Ï,@¤‘ˆB‰cÓn DIÛ±Ö`;¶ÈÅ1aèG 2 åZh¦i1*Ö¡DA¨ñ½:¦)1­fK¬Ð 5š8 ¸Ra$“p/;ƒZÅ*@Ä¥À¶ 4>éŒbõêÃh„Šÿø¿ÿ÷_t Ž›#ªqá{/åæ›Ëùo~-Ï~Öi˜†ddd”0ôñLû ù)×& #T¬™š*3:b™ÅbCÏañâAžqÂÉ<¼e3Û¶ïdÃý³äÐåôÍ™O6“áWWßA݃ù|äã¢ã?¨°í‘ÍØfiËåãù8^´——½êåDÁ–îÂ)ž÷ü×°k÷_ùú¼øe§±{çFÜT¯ž\÷×ÿö*Ž=q9 Î¥V‹Ø±u”w¾ós<íéËy×{þSå=t´wâyU¾qÙ×8ú¨#9äÐY “r;(—§( ¸v‘í[÷rá…_§oV–/}íÓ@„i¤èìHQjÛK¥6Ä®­uâXðÂ=‡j}”zݧ­0ŸuwßÃßÿe‚÷¼ï/›Ï7]Ãá‡ÎÇ0µê^£ˆßÈqïmøô§>Çó_ø,žÿ‚ÓfjºÊàœå¼ë­gÏèV>þÉWqê3Oàá‡7aÛ.^#bV/{«»9ÿ¼7²øn^ÿ†³i+u/ôðÀƇ¸à‚7qÖóŸÆ»Þóz‚F•LÖ¡25A`+T!Ža‘ÊæÙ;F©½›¹óÙ3<Êû/ü(kVÉE½‡z¥L—"ÄuÚ˜Ý7ÈØÀý¶pÝu÷sê3—rÉGÞÍÞ½[hëÌ£Tr¿û> íÞÁš5çqãïÏø„‡çU"À×M¡CI­R'V–kµø¨0³´N&„G³µ4ÉóPfâþ—)ÌäùÅÉóEš ´j ¸t¬Ðq„ï׆ub˜Ó°ZŽù(ðÂj†É)œx™“gcÕjõq©”’z½ÎíwÜN­V£V«1{ölÎ8ã [®“GOÆ3íòSSSìØ±Û¶)‹¤R©Ç0{fxÝŽãà5¼Ök·Û™¦I¡P ½½×uaýúõÌ™3§UóZ;ÄÚ¡†‡Æ'sp³·ï6s"$eL¹5”QBÙÙý|ÍûIäfWûäÌ1Ñ8xr1ÓM²k×®VñpãÆ ´›ÄqÌøøøcÖétÓ4 ‚€±±1†††H§Ó”J%ÇiuºH)[s¾iš-^¹ÞO.©t:Ý ÎeçÎlݺ•¾¾¾VfÇää$üã¹óÎ;q]—•+W²|ùò&Vnÿ…¦.˜B’Òæ>Z'({ñ½=¨¨‘´g:“ ªü*â©Ùî¡Q*$¨ïDÚn~Âê`ßh}„7˜Çé8„tÛB°sOã"¸¸X 8XPÞK+3Qœ Vˆòô½Lú‡àæ»Ðº‹'—+¯!¬£j#Ô÷Þ‹g¦  Êš…ÖDZq]ç)wJÌLÆÅ´’Öòz#IwO‚¢’Dë ôÑ RnŠ0ÖH‘Lˆ–i"­$éZAàyI¨Œcbõz“=ªa³³ÄQ„”‰VJ‰ï{AŒc;¸n2ñFÂŒcŠ5¶íP¯×ÃB¡@:•¢Z­'ÎLiü©b…H)p¬Äëy¶k£ÑTëuRމkºøAâ¾u-+ NŠcâ0-qS¶m2Yž¢Ø–Ç÷}¦&'H§Ó!ho+1].ãy !p\ÓÔu”J¸Š•J™RɤÑð°m—l6MyºŠÖétÂÕ±]ƒòô4““f„í8ŽÉdÜ Þ¨û!¾ïcÚ6¶ea&Ò”§ËMÁ6ÂkT±L‘ˆ¦CÊMÄìXŘÂDÚ±)ñêu¢(á¢uŒÖ CjQ˜èHk,ÃÃ" #¤† ‰ã©A"iaÖ /Š%©”‹RQ%Ýw)Cº˜¦EšXŽc[„>HC¢c“Xé¤Õ»Ze|jœtÖ¤³³“~{#sé(µ³sçVÎ;ÿÃtt(¾ýݯÒÞÖ†Š#&¦¦‰£)-\WàØ)Òi›©©),˦½£FÝÇ÷} ÃÂq$aE‚±½“”riúŽ>œéJƒûØŒ–)6=<ÌÝ÷î¶àe/;™ùÝT*#…"_Hcê.®¾úZ¶lÙÉ¥_8îQ®˜XQŠWŸó~¶lçüןÉI'φ{ÖSìÐþ)N:qçŸõL|à6z:³´·˜žš`ddù̵©"o8ïs\ð¶ã¤SW°wl”R®›Ð·yÕ+ßc6øÂ—?†–Ólß¹‰R[–À3Y¸êpn»þ÷¼ãŸâäSVpÞùgcX ´Vüì?®â¢‹~ÂG?ñ:Ž?i9*ž \¥^ó¸H Ôžg²R¦ÖðÑ2E&•gûöÝ\qÅϸýŽ{yó›ÎáÌgJ­2…’>vÊÂ1³ŒMLS¯*~uÕ5üüª-\ð–gòÖ·œÇÄÄnúû LŒÐÞ^"ŸÍs×]¨V¬\uÿþ•ï0oA?Ù\†òTz£†-Ý„µ*$±Ö8ÂD iØ TÓ¥ïcšIqb†¹*DÂr–Rµœ±ž)¨˜$¢GRTÅARäqmRVM2ÍÂŒD 1 3á+àáUÞpÌž=;áJÿÙbNA¥Rá`š&ù|žþþ~,X@Kx|Ì¢½|uß}÷qùå—S,Y¾|9=¿SÀ IDAT==¸nâ¾÷}Ÿí;¶ó‡[þÀ–Í[8äCZA¯ƒå‰nÌfÚ»»»éééaïÞ½ÜvÛmtww399 ÀŽ;X¿~=;vì`Á‚¼ô¥/eÕªUOˆ­*ÐdÈ¢ ûr­ ›'Ñü“:ù½ÈS$3I?êM8Ç;ãÐ>8öá'4ÐÓ{ˆjÃÄÅB÷I⣙9pûñË›abfq»xðüC)ÅÈÈ¿üå/ùÍo~ÃÝwßM±Xd``€b±Èøø8SSSY$Em‡ÁÁAÚÛÛ[W^y%}}}¬X±‚ööö$ƒ£Ù¹qãFÖ­[ÇÔÔ+V¬ ¯¯ïqë‡G»aŸˆPüèß…H‚š;::˜5k[¶laãÆäóyR©étš©©)î¸ã6mÚD¥RᤓNâôÓOgΜ9Oò4¶ï;Z¢°N¹¼‹jcQDdzÞcÄÄLŠilQ$¯³Xì«p…­&ÑÞ”MtW7”惙~Bs»‰II´!0‘z p€ GÿÛ7«„t ]š‡˜êÀ©I:Û&Ée«Hù$³nUŒ®ìFl‚ñ‘ÔƒäróÈgs-ÃÒSNX­7ªIˆ”X–Ùd˜BzÔj5,ÓÁNYA7BG1¨8À&¶í„:ŠI;.JCìkÃEb«CH"?ÀkÔ@4bí¦ÑÂ%Œ<²¹R˜xž‡ã8¤Ó)”‚lV…B1 ϯ’ÍeÐÓ54Š(¨%‚1aá Ó²ˆTÌÔÄ^rÙñ‰w¢©" ‹ò… BŠÅv®ùùò¡‹¿Å¿½h oxóÙ½síéN¾üåopùwoã}ï;‹g<ãp&¦v29YE²m\Ûeltè$&BZØV–{ïyK?ýY¦&m>uéÛXµfåÊ.B’\|RlÜ8JcºÎ]ywÜ2Ä%8ãÖ®¥6¶Gh_`‰WÔÞÑÁ¾ð.N9é9è†dÓý8ãY'¢¼¯VAˆ7E"ˆ5¸©4¦ébš ì]E Û6ñƒ aTAJ ËL‘NDAÃH®­#Ђ Ò $–á (¥›‹&Ùì ñ \7…ЂHYHm†i'CE %¡nEÑSÌ/¥ü›mnQ%]B „G:ã4ý[¯—J¥PJ±mÛ6ÆÇÇ1Mó1&¥¦arì±Ç²víZV­ZE:nñM÷¹ñ7^Ó²,æÌ™ÃgœÁú{Ö344Ä 7ÜÀ·ß"éÔ0Lƒ¥Ë–²há"Ž8âzzzž.*H|$†›@4éÿä׿JƒJC­ª‘<|ž¢jŒóppü/ïú=DcۛƲ–2òOÊÚvÚÈ!ê{PõÝèpêà¹9€F½^gûöíìÙ³‡©©)”Rlܸ‘Z­F.—{\ÁSkM>Ÿç…/|!G}4étº•|½uëVFGGû8‚0 )•Jœ|òÉœ|òÉ,Y²ä¯Î¡k¾þŸ¬þük„är9N8ᤔlÚ´‰M›6111Ñ2ÔT*J¥«W¯æØceþüùd³Ù§Ü¹ÖQUÞ¬—É–VàfæpÐÑø·f\MLDŒBïÃÊl7hÔöPõ§Pn8]`¦žpè 0-Ì|;Ä5¨MA* öþ 3<8À°K¤³ËÐå ꣛1ÜùÐvî“w DZMÔwÝF”ïÄî\Lªm6™tÓ4ö0ßþVz¦N+Á:ðÃ$…]š8Žã:DV„ç5°L›8 i4ýÉë0ÉG>ñfÚ;–•¡IóȆ[‰£Ç»)<¯ŒR^CÐÞ9À}÷qÞyÓÙirч.`å‡Pž¡Q›Æ æÌ™ÇæÍså•¿äÜ×¼šþþ Ädéí9”ï~û§|òÒŸPÈÃû/|)Å’$—j#ëjbB2Ù<[¶>ÀÕWÿ޳_þžsæóBR”9¾ô¥¯qíµ·òÊW¼ãŽŸKÍcj²Ò6ÙL;™L?ýé•|ãWó¦7¿g>ó$†‡Æ›æ£‡±ñ!>þ‰—päš%T;1͈¸.@d°Ýž`Ù‚@{Øn¶ãò­Ë/çß»‘•+ûùô§_Iÿ¬~vïÚJ*í HS«…Ü¿i wÝ»ÿüÙ­ÓßýÎ[Y<8—Û"ò#0$µzL¡­ƒ”ÛÆm·ÜÎ#ñ‰O>[n½ß³Y±tÕjÃHib;&° ¼*†i'ARq²g†À4%°I¥„åBl¢#qâØö¼:BÈVœ”‰kßóë-䊊! ˜V"¦l‰~Q"¥Ùd^‡ŒîerjŠ%Ë6»â‰E‚”’L&CGgQÑÞÞþ7¦„d³YzzzXtÈ"6mÚÄðÈ0ã-¤Œëºôôô°bÅ Ö¬YÃÚµkéîîNBú,‹R©DOOmmmÛx™¦I&“¡«« à¯n|f’;;;éëë£X,þÕã–RÒ××Ç™gžIGG7ß|3÷ÝwH)éííe媕<}íÓYµj-nì?&Œ…@¹)(mÑ N â ÐE„Q@ZÄ?kˆ›”Nƒ‘o¨‘´ÄðJJ•Qñ„nó<äò Nâ_r¨:ãØ±GÁžMÊj{R|I¶Û†Q\D<±Žz}:ª<7И ³,•Jôöö¢”brr’ééé¿8Ï)¥èèèà¸ãŽCA>ŸgΜ9,]º”7²cÇ&&&ð}¿… ˜5k‡~8GuG}ôcæäGÏëÕjõ1óºeYär9z{{“ÐÞ¿‚ß1M“l6Kww7†aËå3ç§R)Ž;î8²Ù,®ërçwrÏ=÷E™L†yóæqøá‡s '088H&“Ùïašûg Á›ÆŠ!ßyVvö¾c†ÿóÓ5hÔFðcÙ1ˆÌuí‹;9algòPö Rá}¿³ß–žF†LvF¦Š¿ý ÈlƒYÕñðd-‚*µ±L®Ç8ô2³–‘oëÆ¶ŸÚ…y3igMU' ?-gUâŽ~ÂóT±&"jµMDaŒÒªÙÚŸ8J•ÒhTÂ=Š8ŽÂ#HxŸJƒ%FC¡P" ƒ„{¯cªÕ •JMLWW ¯†nЇ†‘°XMÓ Z­"¥À0’ &ß÷“ôí(bš¦™$î†"Ž%QS¯ù˜†BÊ$­Ñ÷}6?²•y´·wày tR©T’¶}ËÅóM©0‹ûî{ˆ^Vµâ,ÂäÒ¿—Ñ‘2ŸÿÂ̰ñýI¢ À·mbãÆGxÎYÏÆµòìÙC¦à²cd„Ùí‹Ù±¹Æ _p³fÅ|ô’wrÔšåŒí$㦱 »Ñ`ïèWüäGœvú™ôÏêflb;Åb?*.qýïï㋟ÿO"'4ŸÃW ­*B¤˜Op³ÚùõÕ×ò£þŒ×½ö\–,YÆî=»h+µsY.ûæ'H¥\œT¡áÍD‘IJÒ|æSßá—¿ºƒK/}+ËW,ãŽ[ÿÈõ7^˯µ…cŽéâ#—¼Û ±ï#¥ëä¨LT…Ä6}³ "x`Ón>xá©{U^wþÓ8î¸cÈL&§FèéëãáMÛ©Uc®¼â&®½þ^Ž?n—~ìò™˜]»ïÇr…RCÃS‹ýÔªAóîwžW¿æY,?l9o}ÃôÏê »·éò]ÝY*å ¶nÝBg{/¹|F-ÁŒ 0¥…a›¦Ãžáa”ÊภµƒŠá!&" y£UŒIÚÖÍ„SMâB”£M˜‘„âi°m!“{Åa(hòŠ„ØÏù Oâ°m›5«×0{öl¼†G>Ÿ§P(ü·blww7/øÿ^Àtyšz­ŽçyÍ`@Ñ=ÛÛÛéì줳³Ó4‘R2wî\žóœçpôÑGcYmmmyíöövŽ>úhfÍš…çy,X°à/C¡P`ÕªUôöö299ɬY³hkkò¬¿ˆ…L ϸ<ÁóR©,¦Y! #‚ hŠ®6"öðê–c6ܨ)DÖ‰cM±Xdtd/*ÇIx±®›¦V«5'›0TM×i¦A¥Aèi™HaEšFc©lÓ0hx L-0ma$ÎѺà¦òõz\.›ˆ¦JcK0¤ FPfšqSPWJ7Ãx ” QQ" ë&„ZÅŠºE -4±Ÿ ‚8"ŠbLÃF6*Òx~„ëfiøA$ȸ6†RÆø‘ƲLR)ò°Ü õz™õë×óÈ#Ãüè‡!ðêH øÃØpÏ<ÿ¹ÿÆì%KÙõðà íÞ…’½ceÊÓ妫y< ¬)•0 7iK°“çz&›Ç°=,[a¸óPA¹ü›?fd(`ÉayÎ{íYXN°H9¤²6=òÿõ«yÏûÏÆvMÂFЉQ“K?öM¢(â’KNaÞ‚N&§ÆÈ¦óØøÀ#ìÚÈ‹^üvm§­Ãäû—ÝÄ×mãå¯>štÞ§Rµ *Óuî½g§žrÕj‘ AFÔS,[z#Ão<ÿ³{¼ýí¯`ùÒTÊè(AXx^l.Ãg?÷9-bÙ²…Ä*¤·o6~ÃÅIwsù·?ÌØÞ:}s ¼ù-/ «×Eq]ÑÞ>Ã2¹âŠÿË 7\Ïk_{kÖ¬a||š;vñú׿‡5«åÍœK._@ë˜ÚF{g†L³uó>üá÷cH›ýèSÌd×ÎÜõÇ Üð»a>ôÁÿñ'ŠÖ¡'(¦ç2<:D:g22>Dÿ¬^¤”4ª&?2ÍÕWßÌ÷¯ø5«V÷ñº×½Š¹sg3>1ÂätŽRw­ÛÈðîqªÓ’o^ö¡àÒžÇiÏ\‹ŠÆ˜šÜM:!ˆ¨{“)˜˜ªÓÕ=‹o\v›7×8÷µç°uËF®úÅ-œwþé¤3.•º&Ž“âL­Võ¦1¥‰’Q† 3’ÄªÑ Aˆ¢*–¡paXè8qøk¥ñý„szQ“£l†!J)ÒétÓïµ\íJ¥šÜd:yî¦ryººÚéîî Z›À±Ý‰È!Ó4éë룧§§%Bþw.!’Ë!‡Ò*þý¥Ö<Ù ù›)¥”‹Eòù|K0ýsÇj*•¢¿¿Ÿžž´ÖõXÇ¡§§‡®®®fX |LxÖ_Ú\º®Ûz¯ž|üècÿ‚›DÞØ:´ÙÒæ2L#õÏ·j×Í:Hƒ¤è§Ÿ:gBˆZ;Ôü]ÄSbt6éŽ#0ÝÒÁÝÓ¿ÊÐTüB¦n #Õƒ°ž$WŒüÿÙ;ïpËÊòìÿÞ²Ú®§Ï™>Ãt`è EAE£±AŒ±‚%FcL$–ÄD£ß{‹Å’ X(ƒÒ{˜a€f˜>gÊ9gŸ]VßïµÏ ù¢4†aÞë:×8»¬½ÖÚïó<÷s?÷í×N¬AÄ¢ Óþ³§ ùLÝQºŒÓåË—?.)žÉ\`2W«U-Zô[cþÃcüäÏÿÀå}ŸéÓ§344ô¿âz¥R™b¼N¤¿m•J¥©×™|‡ç“o?½½½ÿë³N>ö‘ò„ý÷qÊø=‹±&A”‡‹ñóqãQÓ‰';…PÊG–fâ}P›‡P}OÂu°˜u 1 À=pŸÚ ëV 4 ¥$Y‡ÎèÍ¥:Ê[ü”†1–$ê=H¾õ&džR:ŒružÛxT°º`V®×“#JX[lø“îö`étÂÂȪT¢8Sàgš¦h-I’‚ÙèºÕ)m!è²2®«‰’´«AZ@¶ÉsƒïXkÐŽÂqJdYб9yž’e¶ VZ’4!Ï THÓ a,Z+@uÁàÂ}[*EžQŒâ¢I‹£åƒÕäYÁþôýË–Lš¦t:\OƒQ0\Ó4'Šb&&š8ŽC–e´Z-ò¼8V­$B8(%»£üe”Ò´ZÅ诒Û·ï ¿¿0o6[c¨V+Ź˒‚‰‹,L±”Âq$R‚–“¹,B"…@:…‘Ž£½ÂÜFº¾Cà#¢IÞ¶½ _–Šr¹Jb2CŽ@tG3Šó•¤)RNäädÙ¤¤îÞúae®$…D‚@v¯™‹° R*ÇíÊ$x^©È!Ë Q§ƒ11µ¾*­°M–&hé13g ríµ;yÇ;N¤^+3¶w—_v)67¼â•¯¦\®²cÃÖ=øN /ü JT«}ÄqŒ1†45´Z-šÍ&aâ{Á¢í°Å¶72gÎ,†pýÕ¸èâq8óŒç°lé#[ב%0ÒhãV%—]~9g¾ôd9t9»FÌš6ŸOñGÜtû>õ//ç_y;Gö …Âs+lß¼ƒëo¸š×½é ìÙŠR%~yÉ |êSßᬳOå}ï\üE͇8dÉáÜxÃUœøÜç084ƒ]{¶¥!Íν=CìÝcyû[>Ê–Í çç¯8äÐyŒíÄwê•*qQJ|ösŸcþÜù¼åœ·°yË&¤V$IGú|ìcçñë«×±xio÷ÌšãcÌ(a'£Þ3ÈŽÍ{¸âŠËID“þÍß±xÑFGǹæºk¸råµ|ìãïå9Ï;‰‰±=ìÚ³Æø8C3f3<<“ùÔ׸햛8û¬×ñGgž†«=®¿þ¾þµo0{æ~qÉ'ñ|Ç Ûë84;»˜5gÖ­§VŸFØvq=Ÿ‹.¹ŒŸüäJ꽟øä[8áøÃ±V²{dŒJ0‹f³CcL³mó^¾ûÝ‹i4<yë¹g1m¨<ÃäÊG§ÝÄq}vìÜKµ>‹Àëcëö]|÷»?擟<‡ÞÞ®¸ü?)•áE/>+ S¼4 )•jÔjýh©H¢6AÕCˆ®.ª5ÝQý|ê»kŒèæ¥ ö¼5¢GÝïMÁäŸtªM’dÊèMéÂ0®0©#UUQ!ݽY‘¥! ÐêÙ“ˆþ6“ªÇRt= Òÿ¿XûmŸ:íuËãÏ{?™àÈn¢þ߯>ût®(5AßÁH!ÉÇV‘¶×3±÷¬ãS©,B)ßúèXhZ0¢Ëxæg¥t‚ÙПÑê<@»5ŠÝ~ )O;åTÉÏŠJ?‡æ¶ÕŠ*øý ŸÎÚQUc0í]0± êó»Åýµ¯ƒ«O\3ü÷GŠ×5.?ÖÇý6`÷Ù´´®P©,,RU=[+êí"ƒxáU]ET–yÁf|ÒôÒ3¬a²"8ÀH~êfuPGuîÀŒßý (Õæ"Ué)9„$M˜˜#Ú¾¹åzʵYôÏ:Ri!žÚü:˲îx=S£“ÀÔ¤þM øXJúqœL‹)ì®Æh«Õ PV ¢á0Öàû~`´(˜F ´Æ’‘$IR0eµ£ñ}Ÿ$IºNØß/MÉ´Z-Œ5"@)IEt:êõ¢û’g–4Íq´Æ÷Ëä™eb¢ëºä™E{.¾¯ ÝXÇ)̱tÑiLÓ”$I)$®ë2ÎÔñ§iJvHMF©äN1| PZe]p9㨣ŽFJÉèèèÔãÂ0$79Rv»ªÖ`LN’„$‰šJ\Ç%K-q¡¤‡VYf1¦¸nyžw¥ Ð7M ®ëÓn‡¤i‚ç¹4Æ›8ÚÃdi€†<3ä™ÅÊŒ8Nð<¯SOsÒ,&Ï-nW{yž!…Äq\²$NWj@âh1)ijº“‹Ö’‘Ý£¥€j©ŠÉLwŒÇCàû¸Z3>1AoeÎÌéxŽæ%/9…ááiÜ|óoÝ;Î{ÞýnvïåòËW’dË;”yÍ¥\ªP©ô"„ddd„5÷ÞǪU«'Ë2FGlj¢ˆ Xºt •šÃi/>T¿<̾òt¨Uà-o>‹]Û Ž”ü9hÝË}×që×óŸø;Fv¶qÕl®þÍjþõ_¿ÅËÎ\ÆkÎ>m[71mp.c£!í–àW—]ÂQ+–3¾g„þiýl\¿—øÈ9vÅB=l.wÜ~+¯{ÝŸpÇ­wòÉO|ž7Ÿó*ª=‚‰Ö(Bº :ý IDAT”k(ƒïðo;Õ÷4ùçO½‘£:˜Fsý½uvl¡Ól1}Ú4.¾øb\ÇãØcŽcÓÆ‡P®$ðj”J3ùéOÉw¿ Ó†=>û¹¿ã°Ã—±k×zÒDP¯ sëMwñÃüŒ… ðŽ÷¼•z­Î-·ÜÂ7¾ñ-†ø×/|†Ý#;Ø´a=åJ€ç¹,\´€»W¯ç=ïý{fϘÉG>z3¦ÏÀbøÎùßäW—^ÊKÏ|!o;÷MìÙ»ƒFs7ÒJJ¥*IÞ¡§×eóÖ9ö¸ã¹ïÞMüò×ò¥¯üß×¼ñM/æçœÍöÝ÷3²k%¿8rÈ¢œÛ'øü¾ÊºûÇyÞó†ùâ—ÿžáé}Ä&퉇ÈÒ¾§‰â­ëxn…%K–¥{öƼáÍÉÉ/8…SO=•ûÖÞË…®ä¸fqÄá‡ÐšØC»3\WaLNf •jÀDg GûXÓ5QRÈÂÐÍÓ¡±¹ƒ@!¬!Ë-¸U0ʃ‚:É ˜d"$IB»Ý¦TòJÞT¢]4°r¢(ê² JM‹)´]…DëšTÖU5P!FÒÂ'eŸ÷äí÷#û!Ÿ{2­ÑUD»o¡i L”Êóptuß9^k ‹ ¡@ຫûÁýã85De!=3O§³õF’‘ûiÚkAi`9Úïßïù© s` xRn±•ÖÄB ºRÇ>í÷·ºãÔ‰Lï¤dg!ÙÇš.ÖõlÎ@„ÆqjNÄc\IÙ–PV!ED¡‘¯ÿ=M:øö$¯œŒ{Ñn /èEºåûïÓ‘ó¨2T–“%ëÉ£ÕÈÖ½ØêB‚ÒÜî”×(7°–0ŒhwZt½Äñ6´ÙJ¥g9ՙǂWÖÜZkãh\×›býU«Õ‘X)¤’äYNšd¸®Ožãÿ«§ºuišv«]VVB¥R# ;LúÛu:×% c Šz½)£{G‘U¯;Ç1I’Ç1®ëá:¹Íˆ¢¥<Ï£Ý ±¦ÐÑ)4u,AP)\îQ´Ú”tÑÊâyÒwº,Ìœ°Ö€(¥§FR:NWËUaŒ ”ñ<cÀsKÔjÅ;ïÓjµð|—N'¤R«E!Q4†ãïU)×§ÄØǧTª†áT‡4Ë3òÜ UqžçQ*äy6u~Ó<§R©‘¦†f³ƒv ‡ìv;¢Z©eN”D+‰_ @XöìØËÈ® 3þ|¢(Â+i¿L«âúŽ£iµ'‚ •J™‰‰žçQ.—‰â¾¾>q¬5ÄqB)¨F)¹eêG(PRg ,A’¤ø~@ÍUkˆâ A¿$iLìÅõdPôÓ¦õóÀëY²¤ÎòCáž{îbÍ=«yÕ«^ŦM[¹ôW+Y¼ø`Ž>æâ$¤\-%1?ÿù¯¸þúëyè¡MT*ƒÌ™3ı+ŽcxÚ4*•*`ñ<‡=Ä}¬âÿá¼þÉ ×íä²ß¬!P‚w¾ó5ô×ãÍ6ƒ½}d‘F%¾öÍ/óš³^ÊÀ@ÍqŸÖX…}äãÌ™_åƒç½’r-e÷.Áöm»)ƒÜ|Ãâ ,Z<‹(‘˜Üç#þÃÃüè´S8êØ…¬ßt7w®ê°yÓ^–,>×õ(×\ò,FYÔ5f̘Å×¾øcn¸aõþWrök_F’ ¥$‰Cæ-˜Os¬ÁÕW_ͽ÷®åô3Ng&#Î"ª•î¹gûØ÷pøë¾ŒiÃÖ¬^ÅÂ…Ñ÷øú¿}“Õ«îåÏþô5¼è´SY}ïj¾û›ï³aÃF^ðürÆé/a|ïŽv Ó ÍfƒoýûOX¹r¯>ë,^xê©8JrñŲrå5,˜×ϧÿïß³téAìÚµ/”¬¡±7FjE½§—8JÒã[ßü>ßúÆ/ñü^Þöö—rê©/Âó}¶oÝMš¦g[6näö[àÖ›ï`¢1ʲ¥‹ø«÷¿žc=ŒÌ´ ;»ˆ:ã¨<Åõ|ü D–;¤‰ÅQ=4'\¢,áÏßõA?âpþñSo⪕ױwÏ(ëÖoãßø0V¦›âúJ(¬1hUtˆÇÇÇQ^Á"ÍrC¹Tȇ´Z ²«­•¡øYh ÛÌ#ŽÓ®”)ņÊå€Z­B…E?ZŠ©ä#Œ:T«UÒ4-ö4“¡ÅØØ%ÏÁØŒVÒ·䦓¸v»ÍÄÄyžȉ „àûSFEÓëñ,Kh1$AcŸ¹ŽtJT¼ áú؇.'Úu(=(pj˺àå¾ðI F41ºªOGxÕýXí&Œ*`°çDZ!L´ÚD±¦0±,O;©¼§Gkó·Ö9‚Iw>°~ÿ»Û¤´[h´Ö•ÂPV>ÍçV„®“{ý´EŽÉ÷â‘ð߇cELLLÐétž•7w)¥(—ËA05ýô¾JZQO3@¦„¢¦ûAfȼQH'ˆú> VæäLÐÄ÷*8µ2Ò= ðô$iÔg¢ÒÙÈVas=wâè*:˜ùÜ× qvva’Íhogh90*3@9ÏžK E1®¬$K3”Ôx^@š¦´š­©VjhÇ%Š"Çëj¯¶»`j©&ÍÈRƒãlFc ®£1Òb±Xk ¦fž#ÂxI`²`ccÈ,Ë s)·„íŽà «ürÁŠ’Âm^+*• y^Œñ‡a„@.åR­}\×%‰m—õZlXëU µšzýB31Ãq”uðÜ)e¡•˜GÓ cšIat¥B Ò4/˜eVÇ…qRoO?ÖÒ4# #Ò4GëžWœ;)®ãÒl5q´¦ÞS"ËŠ/M#’$-䄦Ӊi·C\ÇÃ÷¢(íê×õ\´*ÀZÇÑ´Û-굪µ ®ë o¥Bs¢ÐÀ•Bî䯂ÅuÏr•9s"I2zúøÙÅ?â__IàÆ¼åÍgóڳϦ¿¿pòÖŽ.Ì¿òŒN'¤V«2cÆt?l1'>÷dÖ­kòõ¯ýz]R/{¼þgbL“²WYÍÏ/ÿ9© yþ©'S«õTò¡¿ø$7Þ³‘|ûMqÌc#xºF9è᪫n -Ï]t,¹gúÌÞý¶O³fÍ~þ‹Ï tÎêµ×rô±K8ÿü³áÞ|öÓŸàλo¦Ù £AÐCà/⢠¯å£ùï{ß¼ö /¥1±‹Þ¾€û×­aÑÒÃIâ˜[o»…›·pòóŸÏÒƒ!3Tjô•ËìØ1Î;ßùA6ïŠyï»NáÝùV^ù+Â0dtwƒÏýë8è ¹|ñK_btl+ßüö¿±aãf–-=”w½çe`{㸎Ǣ¥‹yhÃ:n¼é:~ýë• MãóŸÿ4óæ-墋/äW¿¼!á5¯>“Ó_ü\¤Lxhóz¬MÊ5”'˜9wˆÑ½!÷®ÝÌüàÖ®ÝÈÁ‡Îç¯?t.‹ÏÆõ+(Ði\?B³5Î5W]É7n!(Gœ}ö 8õ…Ï¡·¿F½^f÷È,ßq <‰ s:BÔ𽪵iÜ{ÿÞþççqÔŠ%üŸÿû¶ïÚA¥ZásŸý7Ž?îH;æHöŒlÆ÷=<Õ5`Ë‹„Rˆ ¥´x~ ÙÝ›@e,)J%Åè—°diH–MžçŒqÛm·±råJZ­Öc*°~›fêãyÎyÇû¼ÇZ(>žÏ2ùØÅ‹sÄGp衇288ø ,‰rÌ3«t¡† Ž-âÌÈ-˜‘Û0¦ T 2\$”OsÑaÈéÐ"¡IM.FË ìWšR)\‚že`,Ím×¶wÐÜ~-&© Ÿ€r«û@ñg¶d‚}\}Rª§íÀÆ#èÊA8ûŠfštÀL{”|bv0=p­öQP5I6nÜÈ•W^ɪU«óÿ‰—ûR ¢ù@¹\æè£fùòå,X° hhü=ÑXŸ0$ìwt8¥µ>HÆ¡=yJµ}öcZ,¹Í1ÂìWÍäg"(tðË‹ðe“v¸Ó¸S;þ€À*XüÀ’G#tÆnC¤;©õ­À¯,zVªÐט̲,ëŽQáy®ãbòÂ¥1Ë‹q°¸®×eUnË®ë”<‚À# #â8"Ë3¬Í‘J‚0䯒& ÕZ!FJ”(:UY!KC¤,tOAv ÝV)%Z»]ýÔ!/{ùiD=`=òLñÐÆ­ŒqÆ/c÷îQ\®»ö2¾ó»øÂçÞÃî½[XrÈA,X4—«®º–Zu—¼t)¿ºôB^ræ«Ø²ý~¤g˜Vã—¿ü5o=÷‹<ç¹ËyïÞÂΑÉ;–0v蟉29þìBFwïaÑ¢ÅrèÁå2adiN¤HGó÷ý4÷Ü׿¥§-ⳟû?´š» ¼*_ÿê·ÉSxß{ßÏ‘GÆWþ‚ÿúÏóY°ð Î}ëÛ˜5sëÖm`öìéAÀØè8çû|.ºèBæÎ›Åyç}ŒiÓ†¸óö5üõ_¿ ®ãõo|¯9ëlß¶‰‘‘C­gWC³Óbbþç1sæ0QÜ Ôe§ÿæê˸øâKÙ°®MØVtÇÛßv/9ódü’ellN‹F#ÅwJô÷Ncb¼M;ˈ¢ˆ$ôõ ÒWŸE³sÃÍ·qök?ÎK^ºŒýí;¥ÑgÍ=«Y}OʉÏ5˜¸C’E¨°¡d×HÊ"Ea8d<Eáh]ÒÒ,C;­œn#(,ž/ƨîo;Õ|É2CÒ,Ãqò¾I Ø{Úõ˜bµ̧âû¤ázÒÖÒpYu JØÚ“¹Šý6F©Wn'ŽW£Œ¢ÒsªtгîìkÏóH’cL×8©(SÌÒnç!Ï ý¿BÏÒ4í‚znÞEm”*ܬ“$Áu]\×%Mc„,Ø¡i*‹qñ.˜`»£øŽã …E*Ažåä¹%Ï-­V%5Žv‘BuÿV°8Ó4™:®0ŒÐZS*•¢øÿI’’ç€U]­Žâ6ƺSFTiš¡µ˜¯È3‹QÈiL¡ëZŒÞ·q]=Õ¿+‚µ"3ٔɓ1 Q˜à8¾ï¬N)©T*Ð5zʲ ×ñIÒ¥4år•$‰‰ã”$‰»I†Ei×ñHsC©\eîü*Ö ¬4Ûm¬,XGÆf$YH”´rPÒ%£pLâœÔdø¾O»ÓÁu=”rHóå@NØjOÝ a;šbão0mÚJ9¡ðýÇóH³Œ4.LÌ<ÏÇq¬X)ˆ³Œf§Mžç8ŽF*AàûÒRŽ‚(i£´&Ër‚²FÑÛ«h·:`,R(vŽìbù!‡°bÅñÄ©$o|ÇYÿЃ|ùkæ°Cfbï({v@žQ-Ø,AIKwPZS«Ô ÍÌ4¡âû´[›7ì¢Óiãú‚ç:«v‘$”õ|rYçö;×`TÈQ+ŽÀ=»Þõî¿bxšËÛÞù2¬°dQ@Ù¯ÐÈwqݵWqÚ‹OGjC©\fǶQ>ü7ðÚ×-áÍo}5W\y W^õSNyá ¸ÿ‡»èäøãfݽ·sÿýkY°h);¶·xÿ¾Â 'Í峟{7#{6R©¹82 Ma˜pþùÿÉðp/?„+ŽZaH»•Ú_øÂ÷¸àÂû9ü¨>>ù™pã·ò‹K~ÁÍ7^ÏA-æ´3ŽgÛ¶‡øÎù_çðÃåo?ü âûvÄÀÀ«ïYÃõ×ßЕápù§Oü 3f³råÜvÛ­¬¾çnN>ù$>ðþ·1{îlÖ®]M¹\aph&i’±sÇ^î]s?«VßÍØÞ â¶ÏsŸsï}ß¡¸®e|l/7Üp5×\µ–=»›ŒnÁJ—ƒ]Ä«^9“;ÇQ('Cˆ¨Ó"ðœÂøA½Z)“˜Zß0ƒ(J•nYußþÖO¸ëž‡øè'^ÎYg¿†í;¶ØÅüÇ/˜5ÓEIM’Æø~×N)´r±BÈp´Qš`rPÒÁuJ$IJåÔ=Ç‘$IDg8ZáùÆXÒ$EJA”Š1QTìOƒƒƒäyFÇ(å"º:Ô‚â»h­AMž§¤iŽ×ç:aD ®v1ûÉļã8 qê©§2oÞ<’$y”d¿#'&&¦¤*• õz×uga"¥¤Óé011”’¾¾¾ßY`M>Q1::Ú¼ýýýEì ¦I®1†Z­FS×o{|’$4 Z­B“·V«Q«Õ…‚¹Ò××GOOϳt„ÒAÈ!ªý/Ç §ÑÞûk¢?¤…<ê³@<½ º¢¸Û/94ÿósJ‡êŒ“PRÓXÿ}Âñ;ݳˆš4Ôª?éÉûãÌô¡ÙBÆ!n}ÂD¨.ñ¿ß 1  ”€¹ÝŸ§™"¨ ½ ˆ/Î&0éb_ÄŠ¤Ä÷}–-[ƹçžËK^ò’Gœº˜Œ¹I’0::ZLÜIIOOårù·ÆK!ív›F£AÇxžG½^§\.?"°šeDQ‘ ÿ®&ìÃAØÑÑQ¢(š’“{¤>™Ã´ÛmZ­•J…jµú˜€U¥õzááa<Ïûƒ^#¥\z{":£¨æ6Hs¨Í*€¾}j …f‚>ªª¨ýj:D}DŒÐø¢M»·l¸û´Zꯂ_@Òzˆññ5d^=µå]Ó×'ou:!»ÉÍFL{#6‚9ؾPxÖ{=¹IOyžaE·k'„Ä÷ò.KµèÌi\×!7YaDe»fJžƒŠ(Ši¶Æ)UËÔjµ‰’,âð\„!IãBë­‹¤{ž*@R)»Ì/ H”’@N–¥$iŒTß÷ Ÿ(Ji6[xnÐýÑe¢ÆqŒ%&Ë iãyZK²,ëšE¿ÈÈmŽn—±”uËÄD!@é.£Kj2Â0dhxõzN;"IbòÜçEwÖó||ß'Ï-ÖX”rð¥ƒ5 • Ž Í²,ŸÒ|µFtK4UŒA ÈÒUééé!Iã®á^N*ÁäBk²,Áu\Ò4™bÓº®ƒïù€$M³.3¹8°Ö26Ö §§í8X 0kÖì®yXÜ5¤Rä]FsÇH))•ƒ®ñÖ$,#Ï‹.lP hvÆ£&a%žF….­ë8„aF؉I"͜ٳhŒ7@*|? Õl1gÎ<:íˆN˜ñþ/Œ6vñ•¯~„Þ:Q”`ó‚Í\ò=JGc,%MBÒ($W’rÉŘŒJ¹Š”‚4ó™QÊRïw9áäeäv”8n ‰Wíãç—]ÉK_qÃÓ§±wGÆE?¹ŒÝ{Züñ«fÉ¡}lߺ“iýóIc‡U«V28ÐüyÃlÙ±“ᡃùòg/A¢ùÛ}Œ«¯½”ù‹ú˜1oßþ÷ÿbáÂ%œqúìܲšC–/¦Õ6lÙ2ŠcÏàï;AÉð·}#sôÐ7äiD5ð¼i\pÁÔëujõ^RÓ ;¸^™0ÉI˯¯ºŽo}ëúúà o:•ïýà[ŒíÎÈcŸ—ùz®ºæç|÷;ßæ9'ΫÏz Gy<½³iµ›lÞr7Ýt3›6oaÆôY³b³gÍ¥^¯sã7pÞß„4‹yå+_Áëÿì5¬ºë&6>t/¥²dÞÜÙL4#Vݹ–Ûn]Ū»ïg``˜Ã8‘'Î¤ÙØÍž=»ùÞ÷.âšknad$¡R¶,YT爣–²`Á 9x!sçÏFäiaL±Q{ŽÇPß´Œí¡âU‘¹!I› –¨÷ÏÂk”ùõo.ã›ßþ!k×mçO_{ ÿô™RªxlÛº)Ú­˜ï~ç{œõêWsÇko˜©Dº·§—$²X©°F`¬EŠBwÒsòL …‡ÉÕ•Q€é2Ò‹&SÞnãºÅx–v\„°Xc‹£=„,dD¤,ŠÐbX:©Ï]*•~/`õ™«Ÿ&@xÈêLÜi‡‘›Ä»h\o D¥´ÚÇ?…ÀÇGRF#ètÁªg«RH¤.á÷.&ŸyØy €Õb#-LT&Gß“$Ai…ïùX&GíÔè«ì‚ÖBnJI|¿ŠµÐj6ÉSð+^ל)#Ž""Ç!M3|?@J!4žëc­ ŒCʵ RJ’俵‘”R4›ä¹)ŽÇ°¦èjÇ)FÛ­ÅuKDa“(LüJ¹”Ë…;½ç¹x>é’çí¶DIEšfÔ5M `8ÍR’,Ç÷ Î81ä¤Tä¹-F†s °Ñ‘ ƒCÃÄQJLÝr¹Jÿît©s:9ž¢¤Áq|²,ÅØ|‘¢`ÿš‹Ý?†ÜdHe°¶Li’ •(dÈ ÐÇZ¹Jj\×ǘBLØu ó­Vg‚<Ë Æ›T ‰t­v ¥åJ‰<Ë Vf–Ñh4èt"zzzqR‚£ I+’r ¤õ=Ÿ RAÊ­V“ÆXH‡¸>ZJ¢0"–¥n‡W 39AÉáØc–ó•oüŒ5wÝMßÀ0Rõ²}×(•z/ßÿÁ÷Y·a_ýÆ»èïCŠ ‘gx* Ýž`tl„ âÒl¶iG)vŠï•*&Ë" šžþ”p¸wõýL4 óK*žG«Ù¢T IÒv“ÖÞÇ+^{ ;wïÂÕ³ùÙÏVEšW¿êDr3ŽFµc¤J¸wíœóöshµÛÔê½ÜtÃÎÿÎ%¼ÿç2gÎlîY{·þì"^ñòw±mÓn_¶œ¸5Êܹ³Ø¹}s¨”øèG>ÃÕ+Wñ…¯¼•c^Ìî=é­1Ú qt‰ïÿàǸ®Ïóž2—^öþôO_‹É,I*°y™4S|îóßa¼sðÁUÖ­[KµÔÇÜÙ3ÙÑâ—¿ú%óæÏàù§žÉ´á 4—(θöºë¹cÕ]4›cÌœ9““N~13fÌàÖ›næ«_ùw¤’,[zoxù·bžïF fÏnÑl6¹öº{¸é¦[X{ßzãm‰ z IDAT,<”#Ž8¸ñú{¸ëžGk*1Þlþè§²üÐ¥ ö1Ð_föìi´&FY³f-ëî_Oß@í&«ÉŒÀÅ¥1‘¥í–q´ —9ÊsÙ1Úà’Ë/äŸ]ÇŽ#œ~Æ1|üŸßÅœ¹ÓiNŒ3¾}7{÷Œ’¥ŠO}â3œrÊËù³×¿–+®z2èG:>BhšÍ6å © 3“ ¬Ñ…¾ª«©lɲ M2(]!aØ!K¡^/ó=#ËS¤ÇwÉ’„f«EµR.ô¤­}[ìC“Í)×õ»M¥¬hZh¯â‘&)b?Ò.š,cR»ûá ã£f“ã‡Àãzü¤Àú=&ŸóXôRþø' ¬J$ ‰ÀR°>ža,!!ðÐýs(qRÆv^NnKh5 ¥!ÊÕ§¹úhÀj +ø²†´0MP.ðÌ3|Ð¥A*s^€òÆîÿ)1·+3ä¡J³Ê{ÊÉÓ¶m:¸¢‚Ï0Ðz\y8N<¾Ì:X:BWö-B( kb²‰QÁ Ò«v¥¿¬}jÏКjµ:ÅØ|,qïá1y2.?Rž09®ÿxbøäÏc}üàààÿŠÉö¼ÿ?·xì@âãÎ[ ¨’áÑ&Â5M¼ŽVh£PJR #1¥$"+±rÛÁ$-N~þ\ðóËùìç¿Î?üÃyô®&6kÖ¯ãß¹€7¼å8Ž>ú`öîl¢²ølÚ4ÂÞ‰í Ï®Q ¨ÖØ´yœÈ2ë‘Ù:nÉ }M”*Õ:Û·ïBË—Uè) Òˆ+¤6Ã-eÜpÝJ†û{X8c>™Ê¸óÎ{¹sÕNN:q.‡r Qk;}Õ^þñ¯pЂY¼òU'cL›£?Œóøà»>ȹ缃SO?Ë.ý)³çÍ¥\šÉŽm1Wýúg|õËñÏŸ|röËÙºã^Œu“¾Aþë?.böœ…¬8îHnºårN;ýd¶lÝÈðÐ|LR¦3¡øü—¾ÊÍ·íá¤çÏãmþr6=p[b÷ÈÏ=é8Ž:f1IÁ…^ƒãRè#KƒÖ%æÍ]Îøø8\p}}u†‡†xÑéÄŒáaªµ »Gvó“]¶í#Œ7ÚlÞº“Í›w"eÄD3c ¿ xÜÿÀf®Xy/Jz{+,;xÇ´€jü9󨔫¤ID'c¬•²îªûep`€RÍ'5P* º¦¹¥§oÒöŽîfÓÖÍlÚ¼…ûÜÌM·ì$N63cÖAyü2>ûúóž>L‡ŒîA+O—øáþ“{W¯áCó.Nyá©<ðàf¢´Áâ¥+HÐnµÐ`Ææ!tGòÑ(©É2Kž§(-puW«Y[’î¾e‘Dq‚Ö>¥R€±¡4Ưi¬Á`¹Qh-§Y!¹v:¡ºû„i Røe²<äi1€D*Mž/@îg㬥ù à,*Ôã³–WAõ-FŠ”,ßJ»µ»õÔj¯À­TŸz0Mʨ“®Ž2¿ƒÏ'²TÙ6äM(ÕA? C᡼Ù'b³˜æî;I6_Ž55ÄÕéO9kÁF2ò.PpTý}WÒ¥=¶‰Xily:Â-ƒ5ûÆ-(,B9X·—(+³3y€z6‡;É`u_\7–?žx)Ÿ¢ô‰áòÒwð¨Õi!å– ÒïÙ< Cˆ&Æ4‹)7©°ÒÙ/‡Ñ=oˆjÍÇ»iL¬¥\ž‡ï í;¸*Ð6ã$ù^êr!Jö°v>C—µƒ»>Õ¿FWÙ­Œ·®£¢WPò>!P5 C:RJêõb?0v/íp=q{ލ¡êK=‹öËFÇcV1RŠ(ʧÆ%Çe||¬;QAIšNš²¸ÈnǤp®vÀJLn(•J¤iN»ÓÆ Sh–j㸸Ž"ŠRŒ±Z? ˆãR‚кkb•Ç!J+„0“am†19i"ºz5]Ñ ÇÃ÷r…ñL«ÓÁuÒ4¡ÓnQ«#i?×Z?LP¼`^Zk©U«Sú«ªkE1Yž¸žçcÉHÓ‚…:iDòð€99:Z°aÓ)õÉß.]ÝÙIf°Ö­\”rÉò¸ ¼jíÐjµ¨V«]]a:&„ì:Œ[”.®‡µx !,iV½X Çs]èÀÆQX§`’Z[€ÁJ¦]6o—u‡di„ïÿw'×t»ÈÆÒ("MӮᕋҊ@išÍ&¾ïS©THÓÇñ»_М$ IÒz½Îôéƒ|âãçñÖw|ŒOüÓ'™=s ,æ'?¾˜°ãñªW½‚<É‘ÒR)y\±òRæÍZÆQÇÍXs££î¼ó†¦Íchh.s¦/`ÇÎ-$q‹»îØÀÖ]›ééYʺu¡€“Oz.I’S«÷°cÇvª•^ø#Ž;î98ÒA{U.¾ä¿ØÛŒxÓ›ÿßsé´r*•€FÔáž5wñ¿y­ÐPï™Å÷¾ûCn¹m3—þê“ Í ÙÜBš†Üs÷&æÌïà 26>ø'œx<7ß|Ç®XʺîàK_¾ˆ—ÿñbÎ}Ûؾc=ÕJ•±±ˆ (qñE—Ðî´8áÄ…lzèfϦ§§—+®¸€ÿð+ìÜšÒ7ÐÇ]«ws üà…Ç¢”döœyÄÑܳj-›¶m`íšõL›>“î_O_›ÖnàC—±páB°à9ãc{짯¿ÎÝwßÉÞÑÝìØÑ`ÏHŽçY´¶¸*=%²,¡ÓɨÕ`Á‚óçÏeÉ’%xžÇÍ7ßÎð´ilÚ´…±Æ.ûÅVÍq–.YÈÐÐ0¿¹òÂ(áèÃçS©TÙ¾};B&&&˜3{Ãsû¦ô²sÛÏÙºe;wlaç®6Ž¥šÏŒó8çœOsÒÉ'€ÊÛ»“±=ã´š :áë×=ÀücšÏþ#tÐA<ðÀ=ŒMÄìÝ“°lé ÊO’æiÉâÏuq´™"I Iœ€€Á‘ª{Ï ”Sfò{.ö.EÖçAWïY ¬ã÷I×$eppv»]¯tÏóÈsC§Ó™"¥’(S$ÊZy€$Š"Ç-œä‡A`T‘x¥Y$XR)”è:'SŒ¬{žGšÆdiJFJ¸®Kšº"YWßsÒMZÈB\+%JZ\' ËršÍQc|‹Ö ×+Ñn‡cñ¼Rw|7Ä÷ý) 9M3²<éêßÅäyqܹ1ÆSº²ÖæHé"T1\•S¼ëMiçˆ~ÁRs§«‰W˜b=hïPª\¢¨M’¤x^©0ìÊs‚ „¢(¤\.ÇZ;Hi§L¼¤tH³œ4ñ\wJÓ qQ)—IÓŒ$É»ÌÙ­<¶ìÚL©P¯Wq—$ Ý?%!/FE¥k3r“Þ”Á‹ïûc¦ÎaÖu>ŸìjÔëu Üýï6qFmà.ZëîuMQÊãCñ_?úW>ô7çª+ï ðsî¾c-Ç;‹e‡ÁȦuhm¹âŠ+˜>}:K—/d݃زm¥J—¿ìuìÚµ›Õ÷¬åKŸÿwvn_Ë´>zûªHO1m¸F³9°xÑÁŵj7 s¯v“»înrÎ9‹PJÓhn¸v5Kx{Üá´Ú£ä¹„̰ö®Û˜5kaSò¦±mË_ÿ·KyÛ–ð‚® ÝLi¶öî¸}-ñ®·$Û¶oÁ fpøáÇ‘%ßüÆO™1+à###ëÙ½g;aX¦^ïåW¿¸’m[·qÎ9oåöÛo§ÕeùòÅ´Z!g½úϨóÈÓ>¾ôå Q Ž<ò(6oÝÊɧCe>¸Ž­;¶qÇ÷P.÷â¹'>ç¹…¼‡•ä™bÃúÍŒ1¶waÔ!ÏSZÿ½7Öý*ëß6JGLMרWC.¼¾ÉØØ$¡Ž˜ž™!/R¶letl¥$ZK6mšÃá¨Uë¼âåW²¶Úæñ8yrž™éÌÏ/ðÈ£ÐYÍØ¾uŽíÛ·Ñm§Üÿ}”…ãÄÉ“5NžZe-I9~t…Örνß\bË–œ«¯>yÝVvìÜÉðÈ$QeŒ,•ÜûÍûÐ@ˆ’ýûâĉ#|âŸdjªÁå—¿€ŸyÇO3?†4ï TÉ¿ø9°Êyçí¦Ói„’¤×#P k òL€Õ}γ¡—&}@‰s%y‘ sžh,ôÔ8Ït–Êg¦¬‹¦BÌÐgý÷é9ÎyŸIìYÍJkò,£Óm F+Àõ›5>hI)Nü€mÔS·ÑˆÈ;%]gÊ5Dm‚ç&¹WH GhŽ^FËt¤ 576+¨o!jòŒÄƒ;é2¬'Î ¡Ü‚þiÈD…R4Xs]”ÓÔ\ñöUJ1ÒÌPi^†Mé,Ý=REÕIPÏŒ{PX‹p}FýÆ!啕ÄóUDï$q°-†èŠèœ­ý~´K¯[P çhTùÚè$k7ÌSµQO¦‚:¢±‰”Iv–ŠëPéïMŸÍgªµ9izšvûQŒÙL³y>Zן×Ïy% Q£tkh—àXAÐäÙœ4r¶$é¢ÓÙïˆÍ-(³1r¼«¿%mª“Ôg/G”gé»íÂ_†cß“¸ú­ !‚X†åûàäW©Î^F}úrLuêúó×B<‘rèY«þ°/4¾è')KG­VÃZ/ž•eÑg²Z)ZdYNÛµÑÚ ´A)‰Œ%ÂÉÁ¨üºË´t®òä™*Öv0.^I’—&}—§1fΕB£‚œDIIi:I’R­6(Ëœ¤—!–\I #¤’}‘1ë ë ´)išxG­PR"„‡¥·Ûm¬µž}h=1Šz½Œ4M©A`¨×k¦jYyg/>°Ê:/gYFQd},öpre2 ÏK¢ fmm£5Íáºw•RRZ¼°eúx(Â"œÄÞ©êž ë4eéC³ªÕ)Ö :í„‘áqò<%Ï‹þqOöy°}$AD8— Fw××͇ìÈA€ÌºXꤌ8ö,Ùn·‹T®/F ŠÊRyrÑÂXîíÛøÀûþnþìMœ:¹Ìo9Í{~ÿ%´V¨U‡¹õ›·ÑlÔ¸áe7ð©›o¦H5—]þ¦&7ñ©›>Éðc½Ì+_q#?ûŽ×0Ô¡Y¢2\çÔ™’¾çËõ:Yf™Ÿâ®o܆1ŽÙMS4‡†¹íæûyðe~îß½ŒFÊ\ ƒn4xøÑxÛ^Ož[ª•&ñgÈ¡Ãó¼û÷þ- K‡X^j373ÅM7}†=»w£C’¸ÇŽždÏî+x÷»ßÇ¿tŒwýÞ5<øccSà ÷Üý‡Ÿàío;ÇO¦ÝZ`nn’¥ÅÆÇ&Q*æ¯|=oÛ;yxÿi^óÚk¹øÒRQ¼ï}ÿ/¡J¸ä¢‹ø¡zQØdzzŸøø§™žž!M3&&'èv»,.®Ðn/14ÓÈ5Ž‚«_÷ ªµˆ"óiª““SD&¢Vk062Béz VNìn¯…–k(­Y]Ydfjœá¦â¼½×pâÄ<÷|ó;¶LqæÄ!ªÕû.:•Õ5ÆF W]}9R(¾tÛ­Üôé¯QY¸~Ïö]t —½ðRV—Nsæô1uÅ]ß¼‡½—0hpêÔ Ë‹=JA5fþÔ¶ï˜%—_v×^÷Ò´K»Óá(JR÷_¸Ÿþá}\|é¥;üqd¨U«´×Öˆ¢˜0ô!qÖ9JÛ­ÃbŒÂ9! ÓiÇU¤h#±V ëÆ¨A³È7a$8‰”ôï)JjÊÒ»½UŸ›•çù ¡(JœsT«•AÈœ+=^ ÚØ7lÔ÷S¦‚“C$+§å¦’?§µ)âh7zIwa?Ýù‡ñ7º‰©N#žvÞª#ÏWÉ“Ó=MTÙ2üŸlX ކ”Šx®;+PÁ4ö¢JEÚ;MÙ;KræpÁä‹ Òý4¼œƒ"AôV sƒd¹¡¬}¿RP€]Ck„ºNM‘Qé/žå«Nc¨6F¨E5*¥!<û TÚÞÔ7j£ž´šg ;Ší®’–ËÐ=NMBXŸéòÉ3$ÉiÂp„(š~þ¯…˜p msÒ¢CÖ;NÕž4'óû_IÚËÈd… ÚJÍñ\dÄ?ߪ,K:Î? õ•ºAÔÜKÞ¬Kõ…sW ò¼¤R©R©Dd¹ç©VkX—Óë•~C-QRºœ¼H Œpbƒ $hEA¥R¤^zñ;¡Ý]% B¢8 IzH©ûØ‰î ±35 È’VrÐÒðæ·üùÐß1\ƒ™éIzŒ<ïrâøQÞô¦7ñ©Oýz®ä‡®-i/æ]ïú#~ç¿}‚ŸýÙËyÇ¿ý ÆÇ+,-.2><Á™K´³”ÖšâìÂ"q Yæ:CéV»Í‘#§Ùµ &&FQBsû­÷pÕ{AvÁ4ê#Jä»8¿ÊÀclñ<¹¼†‘ê<†øQ:§n¡µðu²Ü1$'ÑÛ¡>ü4 «×›G¬§ZÆÌ!9’ëŸË•ãÜεp*€ú,¶±‰²kqýû³-¬ŽŒ Ól4в \éà²yÈ LÁÔ6–p£6êI>Ϋ• ŒÎhµN°¶¶„RWÃÏ‚¨ç9£íµG¢ËÐð 1fæd!T'(´ Ózˆ|u­æ0F= ë`!é V—‰{–ÈL#Ä$ÐØxÏž#Âj»Ý& Ãoq®JuÄÐ>ر@wåùÏ2ºwްQEÊï0ú­ºVš¦´Ûm´Ö4› ¤,I[§X>ø92:Èí/FŒœss+\íÙV‹Â‡ÇqŒsŽn·K£Ñ@J”!èåŠÜ§Û÷z=d?^kƒRÞéåGÃNë®,}(UæÇÕ㊠0A_tt^ u[z€ÎÞÅ )Úâ0a€ÃƒÂ…( E!ŽPœÂ–ޤHá/(kÊ‹ˆeác»¶tdYŽ”’z½†s%I*Éó„¬(°¹Eõ­eYø ‹’,KûâgŠ2Ež£” (s¬-ûn5Mžç$I,Ë#þZû]»ÝbmµEuK,Ëú#¾Þåæ¿Æ‹«EÙF û`†f³9péFQ„ÖŠ4M°Ö€p¤i²ÌÉóœÉÉ)„ôz]¤òŸE«ÕBA«ÕFŠ c2*•FOà“¹‹2£Ó^i‘’AèVQä~ ºÏ×Íúk ž ›¦é€­êÇ›×ù·žÕº´Üë»[­V‹v»ÍÔÔø-QÚŒ¸2ŠÀ!äi†–OáòŒ…³púôi^zÍ ·Þz µfƒ•åUî{ðAÞò¯Šv7å×ÿóïó•ÛóÑÿg^rýåtºÇ8qü08X!Ãcctò”JMS­ò"gqq•]c5–—WÉ•åÔÉeο`/RÁÂÙE¾rë]ÌŒlÚ2ÎòÊi²v‡-³{xôч¸üª+èt{ låS7}”ã§à/» c$*ÐDqƒ/|ö>¦&çØ´y–$IY^^aÏž à IDATÌÌÇñ·å‚Ê&šcWÒé![¹ŸÕ•»©)C¥² ©ÂòLëõzôz½¸ê3t"¤,éuÒY¹‹¬»ÓÜAu쥄• 6Â"uƒ ¼8êE€PT*À3þ:î@X‹¢¥ J„°ÄqÜû,à0CýظpEKëú.HÒ>À)C’ö ZKŒ6 äÀù©”òœB£qÎØz!7ó¢¤ößC§Lè¶zDqŒÖmIÒÅZ‹1š4Iü……ý ®œ,ͼÓRYHLàÝ®Q"X[âœÀ„yž€€"/HÓ„z½Š¦Iß©™P–%Q¡”ìscsŠ¢  µZœ Œ"¬³ô’E‘ÒnçÔêÂ0DJ1Öý@©õîƒ6 n€Z­A·ÛBHªãœç¬úÑ|/x­­yžèøÔ‹gÎzq¬Qï»F%eY „ I¼ëÀ„†0T}g®w°zÁØ;újÕ®Ô¥”ˆÕZëou»î\][‹â ñ^JM½^éFç}ëz -¥ÇGCT­!•Akèu ’¤àûâWìâ#ù—¼êÆEsx‚_úÅ_ãöÛæùÀû+/¿„³ó‡ãœF£³’Juˆ“ÇçyìðãÌnÚÃÐPÄÉ“9YêÓÙëµÊÇ­ò¿ü苨TbN\æð¡#ìÞ»…]»7ãŠÓ˜j•ÌlâÚk¯Ä–JXf§G‰¢)Áh‰‡Â¡•@‰)P"N ¤!4Z+²$£TþºhTëþk-T£ˆ^ÞFI RS–0:Z'Ëz¸"¥V‹hÔkH [6OñSÿëOð¿ùßùÌgïgëÖ ^õªëÉmFn-s›7‘& K«§q…bhØÐ,'¨7 æÍ¡:ËK«\yå5ô:ŽJ<Ì{>ô§,œ=˦9¨Õb’¤’’¸R!Ï2´¡ßYw›;¬Ë)“‚¼Hú hCH²<£,ܹþõn­¥Ýi¡µ& J)†']_@ѤiæŸMaL‘öúF;@iØþ}„a_"ðìæuLkë ŠÜX­óZµ–Hµ:dyn¯è_Tþ:ñï9;Œ­+ ¬+ûâ⺸aú ÝÞ)œ£(½0šçÙ`t¿Ûí`Œ¦×낈QÚ_ŒRù°+©!Pzàt âLQÍ:­Vk0òŸç¾+àÿ~( ë½*8x×Ý yžbC–£‘ÒslžëZkÐË-­å%††LNÆ,-/aûãÎ’Z½‚³‚²ôB°ڋݬ;usÒ´÷-n[ífç °ëBÜ’ƒ8ÏóÈêy²–ÀDÖ”šÉÉ)Ò4!ÏKÂ0²ÆàrÍ¡qšÙÙJ߸ë(o}k J±°ØF(Í•×ÜÀŸ~ðÃ|äÏð_ëµ\}õÅœ9u„¸"è´Û˜HÑi÷øòmÿ@4¥Z ­ððgÏ.cX«N#È©×käYÆÚJ›µÕœÉ©‘$¹¥^krøÐ*5C5¨ Ìþÿn汃Ëü×ßþ7D §Ï®PëŽpëî£Ýç¢}»8~tR­Ò™âèáUÞûÞ[xÅ+/áÆ7¾œS‡Ä(C5ªñŸ¿…ñÑ ¶n™#M–9~ì ¯{ýÓí´DLÏìááGŽòc?þ ,.ÁÏüïÿбñ&ï}ÿ²¸t–}—œÇË_z<ð0ûü'Ù¶}ŽÈÒn UÕ´[ ^¼ƒ}û昛¥Q—h1ÒÊ@+¬+q6GJ³¥³žc,$ÂyǴц@{g&V£íá$‘6Xç9ÃRxqÑ¢ÈË’"KAj‘šzl uµ%PBS:Á…ìä¼=ãÜrËqþôOnæÐ¡#\{í¥(²º²Â¶-›(‹k ÆÆG9pðÇâû.¤Õê°°ÔfnÓÇg×yçóæ·¼Ñá ÞþSoåÁ{nfë¦i––V¨×ýfB€Ä!¤B~câ„#·9XÏ\¶VÙ Á…¦Ï›É0:¤(<+Y*8´–ƒ¯]G‚¸¾3¿Ä¡yÂÁ¸.´I)½{¿(ÿ]ä9yž¡”Bé¼(=†bã½õŒ×¡C‡øüßž;¿v''Ož$ÏóÁ¡þ[Rë”'¸å‚ééiÞñŽwpñÅ322âƒÈÎ úðð éõŽÓéóeÖÎÞK±v†á‹Þ‰®<õ¢çzÃ˹òœI¬N—sP¤°x l†žÂÆMªµ[·Öpβž5 _J/ÃI‘µèMì é¬Q.?Àðð.¢ÚÔ3çêÚ¨¨:rä·Þz+wÜq‡˜¾½ùúösssüôOÿ4^x!ÃÃÃßæ0;§$=„hbŒddÄÑé̳¼|'ÆÅT*›žÖÿs·{Œö꣄‰¡b¶a3Pk€üÁtH ¡‚QFF® Û=ÌÒÒ4››ˆâ9COŸØÜ]À®b%9ˆÔ; ª›|u£Î‘×µŸ:?xð CCCÌÌÌü“÷³ÒjÓ×¢dñÞÃjá0A<ŒÃ7‹VWW1Æ0::ÚŸ×h¥ )`þ$ü2jñë oùIâÚ5H¹Ü«y>Ù½¤ÓÉ‚€^¯‹s¶o'öBœµ%q\õéñi‰”!½¥UÒ4EkE½Qamm â«­vc •j„$CÒ,Ã9Ï'-ûH'¡‰üøynéò&°¸¨ê;4!E™Ñj­ uH„DÑÝn‡^Ï¢”UבÖåØÒâz ¥&B”RýQ\‹”ë„Wõƒ¨ïB…jTížùGcîµZ^Ò!Ïýçµ.HÛþϳ.¯wò<ï»YC¤ñ Të$A ÑZaÙGøÐ(%}(N§ë±JKŠ¢$Œ"‚À;aõ!в ÛYF 8~â4g—ס¨Z’4A"©ÖêY†”>(ª×KˆÂ˜z½Ö9ó>òÁÑë%dYJµZCJà…Sà¬ÝÂÿišþaµ,½¾îf•Òô ôExÏÀÕ*ð"¼6}A¶D C)ŠÂÒn¯F“lݾƒ‘Qxàþcœ™_`d|ŒÃGðÒ^Ik©ÍGÿü¼øE“¼æÕ7²ºr”Ò-ÑéZ²,çžû$ ëì=ïŽ?νÞËÖv‡¹¹qÜgxôÑGxÅ«wRK­–—:DaDiKÛ¿Ÿ¢„ɉ:½n‡õÉOò¢k^ÐgݦT«c$YÄû?ð1‚‰i¸÷Áû¹ûþ{¨T\yå>Ž=½_ÿ:ã“ìØ>F\ŒŽŒ²eË Óӣđ`ß¾=äÙ£cuf§GÉÒÂirÝV)µz(ɺ=œpD&"Çâ,>TMÐJß|@ZœõpR{$GQ8”*)2G!R‚ @*…@R)ãc1ÕJ•µÕ5—–0ÆUëØ²ÇßøjîúÆ¡d•oÞu€ýŸæ o¸)ròì${wï¤^k` Çî"„#ISNœ˜'ˆcvíÚÅG?úWÜvëŸcüÂø÷Üu××¹êªË+†ôT›F½JÒm34}š‡zˆ4M©T*LMM D )%kkk,..ÒívÑZ3>>ÎÜÜÜÀ¤rŽËy€AÊ:A0KQh¬]$MÏ@Ñ%”©CØüþ‘ÎBºF™¯‘Ð#/ÑF©I‚pQ©ƒþÁn’H†ã”egSdҥȑ‹y¤! ÇŸÎ¥Šr•´wÝNЙE‡Sˆê(¢2ÆÆøÜ¹WJùIs×ü÷¢Ðèx3ñPJ£~/®Û¡{ô"+&÷!¢¬Ã‡Œ!мHé Û!ŸŒÞ‰¯ ’.æÄc—£k[ûÂêzh’ÑVƒ ¥¢(|½óÝ/5ø‘~)}Jv–Q244ÄððíΚwþ™æ–0Љãô’„#IýX~”Γފ¢ B’$EhE½^ï;[¶Ü´˜´.dú¢K[ô™ `ûNVKisïÂQ)Z9„±Ö;ÍŠ¢ÀƒÒZi²ÌsR…P}ç¨ ½›µŸê­µZ•²Ìñ-ß$ι>2Aõ/xje´!˲܇á ì ÌKÊ‚²Ìéö|Nšf(僬¬µäYAD£É²‚$ɈãµZ“'æyç/ü¿ðóoãÆoÄáÈsAÒM(mNÅ(åCzJ›Cáù±Öå()¼kTD(½ÈÕŸr,K×’² …ÿ~ÖÅ‚õØZûD˜˜ ) ‡Öš8úx ϧtú|Z;@<a2gaq‰Q=Ëì¦Y^ýškøà߯û?ðAöž?Ëèè µæï?ÊC<Îýá/3:RE]ºÝ5VVÚ<øàA¶m¿€áÑ~å×~V'åõox ã#¼åmoàöÛç+·ÝÉO¾íj††ÆÈº‚²ô’„<+9xàRÂܦqŒRäN±²´Ê]w•«¯¾cBZâÖ/~“ÿíß_Ïð¨‚^NŽÑk[V¸ü²«I³¥í±w×e|ì¯>Íç>{€ÿþþ·Rk†,ÌeltŽ^¯ä‹_¸‹]ý2jÕ!ÛÿÈ¥ J›P¯51á(ŸøÛ/ðá|•{+¼á¯§Z#ÅßýݧøÚ×â…_J-ÐÔjuÆgFqÂrýK¯¥µ¶D·»ÂÎmsdÝ5¶l™&«‹k8gnÔ0¢t:-’$a¸^#h(’´G ²4ÇY‡2ÊŸO„ësBKp%Eá™ÅB ,mq\%+JÊÂ’9i/íó„ $PšVk™^·E%’„ÆsŽÃ(â’ ÷1Ò¨Ð錎LsðàãüÅ_ÜĶ­c\|ÑNõQ¶oˆé‰ÖZ«:gßÅ£Üü¹ÏòéOÿ2ŸûÜAÞð†ðú7¾M[Çø‹}ƒŸÿ™Ç:K¥’¦]’$§ÅoáÒÑÿYò"éÅQ¥ü=ï7ÊF@Š-…¿7”ò®n·XçÒúfF JLáÐÊ€ôã:ιÁ½"¤o$EqìÝ­}uý×YáÃç6„Õg§ÆÇǹô’K9tð=öF&''¹æškh6›lÍÑ£G¹ë®»8vìÍf“}ûöqÝu×±eËjµÚ9·~Rú IóáI"xÞ°… ‰‡÷øCmvеÓ_`qþ³²Äè&Á÷ä,ý—„Õ„Žë ¨Òâï}#& ±ŒdX»ä›ÖŒ³%JiÙ… „+ý¹@ô1tI·x’îÑÛé-ÜIet+•MW¡&v â\ùwÜÏûd÷”$IÐZQ«Õ|R½òÁU>4)ë‹„gÌeRÞ}h„€ÃGóÈ#Ç!£c£LLÍõ»*’,˱ÎR­T½ç<«Ô‹q}n tº¾x¡iµZdYF­Qëûh,BøQþ<‡¢,ȳ­Â@S–™w^ö¹¨yîEв,‘Ò¢B+CY‚-E?\ʹÇÑàïÀ0B)ƒ³>ȪR©°²²‚s–jµJ·Û%ŒL_tµýQw?Þ¿ŽOXbÒ4ë ®ÐI:ßâÌ~B\‘()‰¢˜"Ï)­3Çëã8ç¦ÚtH’„(ªàœ ×K}ˆŽäYÁÌô&Þóî_czzš^¯‡µþÏ­¬,Ñj`¥,s”òBf»½ŠR>k}-d?ðË9ï¸-K(rKD­R†A_ôy"-.‚ÁÆ`]t•²ÄYÑïœÉ>¾A‘$)Ö ÊÜsdã¨B^$t;] Wž³†Ÿýw?ÍÍw?ù±›¹ö%»¹ðü ¸ÄœÇ¡ý§(ع}'R—´Û§évyüÀ!vì¼-ëüÂ/þ23Süê¯ÿ<;wO"\Nw.bvnˆGçþûïãºk_FU‰¢gç—HwäôáÀÔÖ$IJ‘öH’Ó³ðµ¯ÞA’Á½ìJ²|™ÐT*›øüg?Þ½ÛÑ¢ÊÒâ*aUqúd—÷ýÁM\wÝ,W\õbΞ=J‘­›ùìÍ_ath†K/¼œ…¥#ë#³ß©Œ©R¯M¡òÙ> ñ8„ÏAJHCØØFmö*œ\aiñ~Qa-§>´À ?y"™- »„n¯å5„Bž ãLÃPÝNRœ¦Õ>F\ ƒçÏh•@Uf±Ó×"DHëÔWhŸù:Amúj‚êì÷¯ºœ,[! 5Z7ž±`•çmYݱւ¤…ªLmÂ&ïÑl6û†Œg÷@%„ Zõg‹8ŠAG„ͽ˜è„MÀ­"è©ÕõT×ÐлvíbóæÍ>ÛÁ9vïÞ=ج‹·ß~;û÷ïgqq‘½{÷ríµ×rýõ×311qNî þyqU¦>ãx'c¤+HÝ"Õ,¦&jèh*ãÿ“ÆY¼X Û™'/zhëˆ{ º,‰ã L4NN ¨Ãë•’!*ƒÂ¢UHà:ä6ceå>…¦FסRñ/}†]ÈÛ¸n‹nÑ¢ !¡DAlÁ„S5®4Álˆhçb­³Q—––¨T*Aðψ« ¡›è©Ë‰J‡³Ek?+€±½ˆÆEÔÕN"eqb™nï0Ùéû°G‚ÕE¢¡ÂÙ+ÐÓW@<Ô7 mÔ`?†!iš‘ç…HÒÞ•fK0ÍÖ* Ñ¬±¼´ÌéSg˜œ˜bh¸âGöX8;Ï_¿“ýûa||”óÔùŒO!BhZ«­”@+¢(¢V‹ð#²‚À„„¦Ó‘H uD%nÐKŒÐÊóI+qDže¾ëâ ×îõŽ+-R(Þ=Jû‘ýÔyg¤a2HéA@žûYŠÂöGØeYPX‹µ%ByIšæ„aD^–ÔªUÚÝF¤Œ½Öå:@I… B´2Ä‘DjÏ” ¢ˆ²(Hz=† ¬#åHÓ¥Õh!äY† ‡’Š(lxÆcž£MLa…õ|¿¨¢1± ÛîÒív‰¢ˆí;7Sd%eQUB”Äq ­B²,§p‚0¨b@Š-rléCs¤h©)ÿ™ƒÀ „B8’Pä=¬Ëý«ÕôCɲ¢ßñ\ÉõÀ+ç½$§R© tH’t‘RQÚ‚N·C† 5Ö ÖÚ\™Fý )¢Mkm•½{6ó®ßý%Þñ3ÿ‰ÏÜô]`÷®ËyüÑ6FB’¬ 5‰ YZlß9ÎïýÞ{™žšâw~çÿfx¤ÉÂÒQΞ=Mžì9”oÜsšÏ~öA^üâ7Ñcx|Š$­2>º‹4+qFÆF "C¥¢¡p„ÑCÃÛ‰+›¹å–ßcËæa¶L޲px™ñ±qÚt¹å‹ŸáÆ×\C7Y!é–ìÚýBþìƒÿƒûî?Ì{ßÿSDÅ–u²ÞG-r÷}wó¶·ÿk:Ù _¼ýK\tÉὤ¤`˜NGòÎ_ú ŽYã­oÿþðÿ„Ç>ÊÌÜ›7O16:Aœ]Ue×Îl¶F`$£cŒÔBÈ3”ÈsÀ»¿“´Eø SXl!éöœÈ)‹’ ©T¼ðhe‰Ä’–-„Se( Gž+¬•8é¼»(èe=Ò¬ Ò†°“eör\iѪI*:ÝUVV晚%i¥Tjš ’ìØ¹Í3 Ê̲ÿØ „²¼üW2<ªØ²e„(’¬žYD’f³ÁÐhƒ0 ®S«×ˆÂˆû¼­y˜‹ÏÛC^HÊJ*S L• Œ(l™a /0#¶k=&Å»øËk]õ¿‰@…PÊ"Eô]ÿÎy'/ÎR¾‰QæÖ82TQ"µA8…”ÞÉn­Çøæ†Ç tÚkôz]†ƒ! ´*±În¼µž…’RR6‹² V«133Þ={˜L`>|سÕlšÛÄîݻٱcÇ9LÚÔ¨ÊYìÚIòö1”4Èðùåô* ž¸ FØn—´³DçÌíÍ‹ÀÔžœcÒ•c¸¤CEŽ!ÍÔ“¿A¥ vµMÖ>AàÖ@NÓïÈv€Ý»êŒ×kœOÉ3Éü™#ßd²¾% Eá¹§Æ8pž“èݪ~ÜFôÁªÎ­?O ç;úN‚1¡A>ØÊÚEêÉ‹Ê ¯y‘‡£Ý*îY®$Ih­µˆã˜0 Cÿ@–eôz=ÊÒ3¸7mÚÄèèè9íFD ‡ÈÄ<=·JìºTž²8B`3´+ uú6’…±e窈æ¶'áÒu”.§m—A—T«5TµÙ·{r+!DH,ª˜"ÆtRp+Ðhx¦õóe%TDPŸ£¹å•´ätN~‘ÖÑ›±eF}æ‚Ú÷„b‹”Vëal™P©l&Š6‚ŠžAÊtíÖÄIz£Ó)œyâY·°°€µ–¹¹¹gUr১J«ÕbllÌ3¯¥Føp’Vo×:AMŽÿÿì½y´­YYÞû›Í×®n÷{ŸsöéëTKõT  D"ˆØÄ†˜›a•¡^3nîMLLìÛÍÕ`»H0 ¢ B)TÕ©îôÍîWûµsÎûÇüö**A)(ªj¿cœqÆ8{µ×úšùÍù›Ïû<„ÁX}¶UUU\ºt‰|ä#¼ýíoo:ÝßÉï|׆îÚk¯åU¯z Õz<|OJ9MОŸŸg~~ÞÏ¢hêÁºÜœ$ KKKôz½§·êÿ陥@xðF!½Þœ$Ô=()Š1cû1ji Uº„h•ÒIŽ“¶5Ò Bj!ƒ6ìåŸÁ©P @‘4Ï?s5 ‡yµÃx°†q AðIÚŸ‡ˆP‡ˆV‹XθPÄÍyè|s›½úü1v/ðXYYyÂæÏ§ºJÙa¤Xü"l2Ë·©F›Œ¶ß†¸ °Q@¬Ð:~iïZT÷zˆç÷®‰OV'“ÉÔ·AL)wY–DQäUyAF,-ï§,sŠªôJ+¼À¡ÃÇJMÆ”•AáÓí'“1 ˜™é5ÉÚ<á¡æÛÍk’¤…lÚʵš`­_OXk§DüÿOœxe¨µ9¦öŸW…Šº®Ñ÷µÖ·çë@azÉÚÆKb7Ùy÷3yت¦ŠËÝ]Ê4M¼ªÕxEÚþýÃííò<§—F%ÈóÜû´jí¢¢8!ËÆÍ÷ Ô€k¾4R ´€õ5MËu]UÔ´T ÖV8+P”ˆ(ŠŒª²á?¯’A³ó¤‘xPdjÿù£0¡65Z7ß ‹³÷MÒ¤i?ö2rc}0™µ’ ¯±lhÀõî¹Ø…þ<š,5!;B2·0ÇÎÖ&—.§Ýé „ MSâ8jÞß[ RØFXW5A¤GQípÛó®áõ¿ý³¼ñÀÿwÒê¶pÕƒ@ª# Îm²v)ãþð]ü³úrn¸áFþú¯ï$ÔW]y‚´•ð±ûOqýsžÃýØñ½ßó‹üð¿üo ^ú¥/`{Ðç®wý1W\u%µ}=vµmÊ´¶¬¯_$Jcº3-Ãm¬+&“Œv»…–©US•%B:‚PÒêÍ„’íãJÎ?t†N¯Õ(`wX]½‘ÛTï…¹…£¼ÃÂBÂu×ÝÀÎöÿí׃«æÀâ Í$6++ú;}Z­6•=Ge¿ÿ¦7óªW}% Ëû ûè`W¹y‘SV9IÜBJׄ÷H¬­1ÆRT5Ä!aªhzÝ+¥¨kÓØÔÓcüøâ‘¬ Öù )A Ù¨«jŒÉ”D„źj:שªŠÚX‚@“¦Þ2ÁY‹µðîM3ŸšÚU½x;–˜Ù¹Ù©'¹1†~¿Ïöö6UU133ÃáÇ™ý‚‡Žbu*ÜDº1ªX#fŸA­ÔˆÁ2ÉÊ2®Áúǰ÷QÈ6ZXÔÌH~Æ‹8”´A¡Jt”âÚ)ŸÂ`– Ȩʂ||‘¨z•È3 së”táF\~3ü(“ûËÕZD$sh™|æÊߪ†|ŒžG)Iç‚'É;w¬–äùi&ùèöqtë0B†Í³Î˜zü§v·o7¢(Š'ªãlk?E6@õÏ“$' Ø»6žu×±µ ‡CΜ9ÃÝwßÍÚÚÚßë=¢(ÂË_übIÓtºÊó|j_×ív§‡»k£vvv¨ëzúóvû™bõ"„ H‚¥æiÁì`˳Ôf“Údüï*Išfu‹&fZ‡öž„ ‚AÐÛ½rmÜØRçŒÉâ çA4öަˆÖ‘šƒgàû³¡vmÉ‚ ø´›G^hXQA/ V^€®N@ÿ1ÜÖ#˜GqeŽ0A°tæ:‡nDÇ«°gH÷éÁjQdçìnhŠU ÃÑhDYzˆ†€TÐ…1E™ƒ$IŒ±5Æ ‹"ŠCaó´W¿º'N„”’S¨¦”Di…³*äyî5„¤¬K”Þ D²(éáiÞÏš“ó°Q ´VSkkÊÒQ› !œ_7]´ÆxÿÃ]˜ú‰^¯8Gš´¨êºñhuDQH&㜺®H’„¢ða<++K w6h§-Š¢ Ë&‡«eYÅi%ý flÃcQnå°8gPÊï:Wù¤uåC•åXÆV„¡"MZ  ñ*9!Íp0ñmQZ5êWoñP›Š@Xg°MÂ8¸i´µ†]ÏH¥uåA´ÖÙëÔõã°Ù9ºw• »Çq7èKkÅæö¿õ[¿Í+^ñå¾êjD1!Ïeó»› 0Äqˆ %Œõ å,ÏHÓ8lU1Ǻ1ßòÏ^ÉW½êE¼ïÝðýßó‹<ðÐC»f‰XǤíÞú'¿OE|ß÷¾–|ð„‘fa®K·Û¦¿3$Òšl4âË^ò%üÆëæxç_þ5?ñ“¿ËýáÛY^ ùñŸúU^ò’›¨-\º¼Aw±uAœÖÈ0f4žpæÂÁ‰«®ÀØŠ(ˆÛNŸ¹À•Wenv™áhDVæü¿þǼøÅGùÒ—þC>úÑ“ç’믽;ÿê÷¸êªkX]=Àëû7yþí·!„äÁfßÊqÞü–·ñŸñw*VWSãŒ#÷Q”c–W–xäч8°oWáòå \wí eÊ‘Æ3tÛÐnu1FajCgD¯Ýfyy– ¶·G¨0`g'ãòÚ„|ô>zßÇŒ2òÜÐßÒL¨*ˆcÅÂòù¤àüÙ ×^9ÇÕ×ᦛ®à+^ù%ÌÌ„ Ç^¥¬¬¬Po%P;ˆuHœ(ju]1. ò:`kg)Á˜Š}û#¥e(JÐ5RH÷ÞûqâÔ19Ò°ÅÍ7¼ (Ù·4Çxg›K—7X]]%ŠÙ¹Úíín›ù·?νð…|ãk¾‹r°‰¢ié/©M‰µU³qS£´h ªÅ8 Â03ÛÅÔ†²,©ê‚²¬qÖ1?†Î*L]ãšv~çµ1^ê,U]!¤m<‹i¼diîYƒ%®ô÷°µ®Qàg~²#ý8,•@JoÉbjË^‹ëSSyž³µµE¿ß'Š"®8~7Þpãtqe­egg‡íímêºfvv–+®¸‚ùù/ü…¼’4=‚ÖmF£“loý óó/@3ÏÈé¸{úÀ+èŸÿSv.þ ±Û"áÌuÝúL–ٌǧ¤Ýž#M¢TëI8Òej%ö?NU¯1Ï~´ Ÿ„„ß/¼J–oE'âco ËNÑß|uÜb¦wú39Îá&#ÄÎ63Uö{ÛNO^Õbë¢ eîз‘¨«QĤiÊ¡C‡š…üS»#¥diié“»Ò9Äì~ÄÚˆÁe˜ÏöÎé³°”RÌÍÍqýõ×ó ßð ŒF£¿ófÀ®¨äÀtÈneYÆææ&Ãá0 Y]]娱cÓN–ݹÁÎÎÆ–——Ÿ6sƒ¿ÿA0Ó%qWqtºÎü¤G…ø?{õdÏî€Ir5axüS®üyP©¿Ì½çèÓ±œsL&yäfggY]]ý”Ïgc [[[h­™éÍs8»–®†º[Ò€!2ˆAìݧÿG°ºkàœ§×Y–¡µ¦Ýn7á->:¼*². â8@ë©Bjê² ÎŒADYyc¯×¼Gè®JÓƒ½àÕ5ZGL&c¢(&IZi›¢,°®b2ÅÊ+Êœ$ˆc¤”Hç! Ö[;¤ç qRy1Á9¯ú C/“/‹ªÙi¯°¦$ŠÂOP`z•jU– a!eHêÚû+î†2ùÏ7Jß`zì‚ À8‹”>)r0š†!Æx )°HéðaRbMEY–XëšÏ‚²Ê" Š%açÞ/(I¼‰¸Ÿ8:ò äÄ)%ކS>p*Ë&äùxêIF¨ªªù^§Èùc«µênhXE]ë'ìÄZk‰£àì$ôônÿ¢—°~ù2·¿ày|ù+¿–¯ûú¯â‡~à9tèwÞy—.?Š”’{ï=ƒUí4IÒáÔÙ3¬o^Æâ˜YèU*çh÷?ðW¿k53½%{dƒ“'Oóc?þÝ,..±¾5ÇÚÚ&ôØÛ †¼à…/äGcskÈâÒ>Ö7ú¼á ÿ“3§3boÍ t 8vì(÷|ð’nÄM7=‡²„ŽV+ÆT:Ý[k}–W‚"†ƒN=òYQpêô£ÔÖWwßóQú#áƒG0¢¤2z³3¤­ˆ¤3@)Åöösç.“ç‚v;æã^âý¼Ä[þø.þâÎ;ù®ïú'\Ã1–—Z\¾|޵õMʪB¡*¦¨,y–c­%ˆB)‡áèÍÌ1™t»3¬o­ÑISffæY\:BG8é•çiÚckc‡·¿ýllga1B\{-'ŽcÿþÃÌÎͲ¹±Aœ¶hw;¼öµ?@œÎòßùäÃM²¬ÔX„p BºéÃÎÚÇUúÆXÂÐ+»5) u€”’,3è@zàlËé@Jé'«{õ”Ôh4âìÙ³¬­­!„`nnŽ•••餥ª*N:Å#<Âh4buu•¥¥¥§‰*Eø0 Ý!±u^"ûç e!™}ƵâÉt ½x3i= ßþÕöI2« ì2¢«!þt»ñ50ÂÚêz‚GPj!¢'å< 2lµç ($ŽW‰ã}ϸövÌt¯£sôËë"brîÏÎ’vNGKŸ~e\ž!«¦“ì#JW{IÅOÆò¬ùÓ‡ja ÂÎ *GH=ïv[ªŸRiç£ÑˆÉdB¯×£Óé‚8§;s˜áåBvê=°úl«½^ãÇÓét(Šâï7: A»Ýfqq‘(Цó¹ápÈÙ³gY__GJÉìì, OX'?žsçΑeN‡¥¥¥'X <óxž­‘h䞯ñS V}ؘ”{çáÙPa2??O«Õú´=»»¬Gë¯Dm} ¿·þüŒÁêìL—ÑxLQÞs¿Ã6™äMÂ}ˆ1áj”Öt{>I;ŒŸˆm‡¶f2RYÆco†QówØxÑÔSÕb]×àBÚí.RhŠÜð@4%J{…«1¥4B(‚@âœñ/Â{¦S¡µ¦ªýƒSkP›Ç}K¥ôÐ'§–µ­aP”ެ¨ Cÿûò|<….7M†š­íMZ­6áW2µ’V³P¤iL^fÞ@ì*5BX‚ "Ë2ª2§®ýë…€º.Q @É‹ ¦¶Íâ]àœˆ’2hT¤ÖûʪÀ'•;|«¸õÊ@)$2p¶q‹þ¦ £)u]'qtwûÌÔ+Ò{Ъæû¨©WÐîͺ ›N­ÖŠÉÄ ¨èv»|÷w'Rvú}º4àÊQãÊç´ÌÒ!¥„ , ‚0mZl‡,ÌÍñÈÃ377G»Õâ¹ ®¿i•·¾íCüÇŸ}ÿò‡ÿÏ¿ýÅÌ/FÜzë-|äÞqãM×Ón§TyÁ¸?áÏßú6n¹å¹tÚ‚¨ËúÚy’4å/ïü nºù¾ó;¿ýÑ.IÒæ'~ê¿òú׿…s.²oa–(h1?¿Ìåõˬo¯aDi„ 4£ÍZ튵MnþS EÄ{Þ÷!’ÔðòW|[ý3B‡-Ξ¾@Ún±µ³Íd’óÕ_ýµdyM·»ÀìÜ~^÷º_ãþû,-'8’$Ë€••e66Ö)« W<‚$<ø0/yÉ P ”ÐH ‹sD±&M#leŽôû[„‘"íôØwày¤íR+n{þs‰Ó„Å¥ßJW9Ã!ëklhÒô9þÎÂÅK%>xžõµu66jÞô–ó|ôc?Ë7|Ã|Ó7~5ZÏRVÖI-EQ“B ”°T¦âÂ¥ ,,¬5Ýî<Ö,/ÃØš<\¾4duõ8íöûH“„á c42Ürë·ßþ|‚`‚V©Cʲ¤?D1EUñK¿ü«5Ï¿þÑÄ8á7Rhá7_üd[4²±ÁƒNS­úͱÛí' aac2žçaE um¨ª!Uc?"PZ{=x#“ßµ4‚f,¨©Lé}ÜBhI]”(½«·Há­Vªª" Rœå jï½úüÕ`0àÔ©S\¾|ÙïðÎÌ0777݈ªMÍ™3g8uúYžÑjµèõzSÕÊÓt¡HUG;< ¥ ža-aQ9{œ–ôÝ;—ÞÁäÒ=$úz¥ÑJ“Å''çJŒYr”J‘rhód*<” IÓe”¬ØÞ|a,‘ê"‚Î3,( F+´¾ ¶p¿…ñÚÝ ƒ…&Ö=áßú³Ôõ˜‘;ÇP>FÜ9AÔ^ò¯ß«Ï¬:ƘzGAÝDš‚l|ÙÊ’­­-¬µÌÍÍ=å`u8²µµE X…(žCuQJpå6®|8Þ[$>›Àj»Ý&MSVVV>K^èçgŸ¨X œ9s†õõõ¿}nЀՋ/RUÕtnàÅ3{µW{µWOFo‚òv7;?Xõ¼ÌL³•>Ù2`ïùøYÕI>¦(³)«*⤔ueÑ:@ê¼ÈqÍI±Ö’ç9Ýn—‡­aˆ³†²EQ£ªÓÉå•´IÓ)'æÛ;}Vö-!€!Ë2¢(¢,KÀ·`Sã,äy1Hò<Ã9Ð*" }*¨Ä1ਪ’²ÌQJŦñxõŠÍ˜(òpS)&U–ΫSkƒ³ ´&h”d‡{UL²1ƪZE!ÂÖÌÌtɲœ¢ÌHâ”,˰Lm|k¿ñmüB(´Íq¬½ç¤òÁRû„›AI…Ž5UU`-”ƒ¢ñ¼ åØË ­Œ1äyI»S9E‘#(‡ÀQ@ 5¶9î>Œ+¤^(#%R ï-Y–¤q x;ƒ]Cdk#²|Œ”’v»Ý´0¯Nl,²ÌûnÕÔH!Ñ:À9CÚŠ©M‰¶‚ÚT„aH…8gšß“»aòPÝÔ†¥ÅUœk>SУÎ%•¬î?Ìø÷?ÀÖÎwð;¿uIð+üìϼŽžsëk¬m\àË^z 1ŒÆ–¿¹ëoèöèv÷Uììä¤qÄâlÜ{–o¸›o>ÈUW]C S²,çÁæÎ;ßÉûß?_ù•wðoþÍ÷±²¼ÌÖæ†·Â¨<8Åù‰®çdsFSo¶]ÏÌÉdŒ”Š$I‰’¤Ä%UU… ãñØ+Ý%àjâVH]æHE³1âàÙ,©2lƲ÷ª©Z>Ï'„QÒØ˜fCÈonh-Kƒ©-v/½ê)©ÑhÄù çކôz=™ŽÕÎ9jS£¤¢ÓîÐítŸ~Á*D´÷SKÁηˆ\HGÌ4‰¼á3h²%¼—[ïÂMpì­}ˆí ¿M'}­ù—½¿– ê:c{û$Jµ˜™¹™(ú\%i¤œ!3æz4BšSÐ;ìC¶žQp5æ‰fo¥wÜ!/¼‹É…¿ÆUÄ<ô~’ïžÊj‹~ÿ#(iXZ¼‘8YFìµ’>i 2+6 ÎPLVAÅO°I’„ø3ø`0??O§ÓiÖ»wk )WÑal¶A5:M=z•®N½b÷êÙvmΞìÊóœíímŒ1ÌÍͱ´´ôouc ÛÛÛŒÇc’$¡Ûí>ÍC«öj¯öê õÙç9§OŸþ$¯çO|Íh4"˼$nì(÷êIœÁ{ Zi‚ @)Ý(#½ï¦5¥ ¯ðTZ£¤¤(‹¤ùöš4IÂS×è d2™`­! }kÎh4âôé3,//DZO´oZqÓ4¥È ” ‘R¡”F Ae|Z¼£n H„ J•Tõ¨ šÒÓð¯4Ó˜Ú`mT”‡W}–EEY¤iS{0¼Û •$RRyœ+kª‹Ýp&¯„­ªŠ²Ì=Ì3‚@{ŸÅÆcT‡h 2B0N| < á,¨ƒ0@+í[‚EÛn›²­%U…?^Öû8ZëÀtä¸7!ö:$ù× ƒhÚºò2ÃYÛ( µ©qÂ0˜î^ìªá„(­˜¬೫ìÕ8ç|`S3©V*ôêºæýwá&¦qÑ IDAT°“k+ªª¤® a¨½*¸È1¦ÄZÓW9²,cqq޲,©‹Ê6G>)(JC¯7Ë‘ÃóÔµa8R%W;Ä/üüàç~þ—øŸ¿/û¿8vd™ÿñ?^Ï¿ýwßÃqþÜ:Ï{Þ‹‘F37»„A0ÎJfzsœ|ø!¾ùŸ|/7Þ´Ÿ¿èÔuA¨¡ß_cqß<¯ýþ¯å§~ìœ~øG¸åæ«yîí·sEû ¸¥á‘GáÈþ#DQ€µ5aâŒdfv‘ÍíuzøÿäÕßÊêÁ}üù;ßD^õ9zø¢$amó2ýá/ýÒ—ò§o{'×^s3çÏ­ñ_õ÷ØØ„*‡CG[\qìjNº—²(9xxŽ0ÉŠZ«© üÌ™³<°ÀU'ޱµµNiÚí¥-‚Œ5(Ë nT“RKL]PI&^^ä9“|B™Ì´:q@!,ue)„ca_Bo1âÊã¯ä«^ùÌÅÓB‡Š4IOÆôû}â8& C”òÞŠ»Þ§»-è~(Dà@`LEQä$©Æ#HqN`j‡’!}À• çÂI´Š(k• š©‚¢(0Æ4‰i!¹5SušW¬ÖTe…T…-Æã>BH’Ä{‚J¡e£æé<8 %´Z)ÆÖ:¢¨kÆã1ZÄ-j²Ò*)°h<@–>ðI+IÆÔµmŽ‹·9Øm·oµÚÚÿ\ÉÉ$C)= ¡’ÒïÈfÙįµD©pS£¥ô°Ø™æ÷h¥%ªm”r»ÕRWõ&»7êî1ÇÄqìC5œ·HðàÕÛì&ÎyűòíÿÎ2ö½ô\JÂH„ºi¿ö¡ZE1ñçM%8+©kKÄd㬠óŸ½+.ž}˜ç\}Œÿøÿ7/¹ãN~ù?ÿ9Îræì9fg»¤i‹ë®¹%gèvz¬mm2;;‡‚ŸýùÿįýÚŸrÍ5GøÉÿ>X[5¡r\ºø/zÑ­Ürý>Ž<Á…³Û|ôÁxä‘‡ØØØ Màâ…K¶vh-‘Z±±½ííÂB«íÈë17Ü|išð»¿÷{œ¸ò8Y9Dšñ¤äÀ¾ìl•üÂϽµuHI·QU%'ºŸ,ﳸÔ"MSÆÙ˜3gÎÒ›kSUçÏ_àÈ¡[¨åcÿK‹sŒÇ%½n‡ªªÐÒûBy€Ú¢25Z Â8¤¶%C"5‹¨%E^Q–’@´QAD66”EMwˆcE1ÞD˜ [ôIãyÚ«óœ8z·ÞxÏÿÁÞðû|ø¾3üèþ$¯ýÁogi¹Çò¾eN?vÄ„Q‹²rÄÑU [›}îûØ=üÞïþ'\c<‚²„0KÉáÃŽ^O‘g`ecm‹c'òšoù òòÎh$Ò8aye‘çÞö\²É„ª(puÍül@kvúÛ()I¢F^ñ®C”ÒÇŒžnìŽA`hBç8VBËæÞ5E†sµÊËë©âTI…³!½ruwZUµ©‰ƒ¡×l Xë¨+‹j6Švïko+ µÄÊ=€§ª&“ ëëëÔuÍÂÂÂ'y§îTŒ'cÒ4¥ÝnO½«?ÏÑ"\UA‡nïz&“G.â\4í~Ž âS< ztz×a]ÁzužÑà4œ|³W„s· õP×CÆãǨªmÚí«ˆ¢…Ïññ SDï¥Ì™L£eב.Eй®>“*Bê%âîÍÈÅ!“Í{\|32"p1s‚6¢#F Æ[tí>”\DŠEžYŠêϼv»Ç€iKßg½Hr7Ù . Â9{¤«¿oQ¬¯¯ãœ£Õj=å (Ïsò<§Ýn?AA+d€ìÀ—È'kèÁYâÅzï¶WOZõû}Μ93õøýDÕôî=:nìö’$™vczñÌÐØ«½Ú«'¨FQÄþýû ‚`ºö(Ë’ÑhDžç(¥|–Q«µU?Wë Q¬³TesfôIqʃNç*ªlB]8¤³`j¢$F5º*Ï›ÉÂU]5=~Ç1³r®IdôJÉ]hèÿX &Ða£´ £ªòþ®A`ŒôjJúVtãÛ²µR8E^ú ÊIŒ©J!¥a2£¤¦ÝöæåÎ)¢(šúLXk<@u©<”"ÒU%RZ­“ÉxÚÆ{èe†‹,Rjâ$"‰ÛTÎQ¦Ç2RHÆ”äyAU¤TD¡k´üûùp'G‘—US×qœ"…¡ª ¦ñù)˦59öÁFeY—y\‚ QÛ6ÅUiPÚO¼u¸Ê D5¦ÞrÁ „?»ª_kAk…TrÞåSÎ%žÙU6«dû ®ÊV)²·™0ªÊ`Á– S• Rþûh†1ÎJ*ãP LåUÑ×|f»1ƒµs8*¾é뿚;nÞ"ÿèU¯æ=sW¿ú›`~á“шý«Ç¸çƒ÷ð?ø|ä¾5þÕ¿zÿô[¾™ÅÅY;ëÌuS;›ÄAÍÊJÊÙ3g¹åæç0Ù.¹ùùÏãö—¿ŒÑà4ú¿þkïåž<Ê?þJØÞ¶ósó<ú裦>|œ¢€¥}sôûœ:ý0Ϲþ9œ9sŠ£ÇÐê¥|Í×} —. (sÁÏýÂopÏ=ç8p`­­>•1ÔÙ˜²Ê™‰(Ký÷~˜ÚÖLÆ9­nÂh4æàê!–ØÞÚÆÖ9i£• ®,Ö„P±ö°7ˆ0V`mMžUÈ@Å]t4KQäE . •Ĉê¢DH…R©oqî€ri&ŒûCÊ|ÌÜœåà¡E¾éÕ_α+æøó¿x;¸÷Þü–?ãË^ö%$q zÝYpÇ…sëè ág~æ¿ðÞ»."„cqŽïqötŸk¯;‚ÓŽápÀ™ó5i¬™éÎj…1JF„a›ÙÎ 3};vk ãበ¬±L†C¢(¤ÝN¨ò’¢ÈID8ÖBDÓÍç ® ÞUaêªYLz°j­W¢a@‘W)PAà­j¯à÷›(²¹æ…˜êq¥»WøX”ð~¬Öú +k+êÚ>0o7ðÊ¡»á}vªšß«Ïoí*Vûý>:ÐhõÉjÔÝ0Æõ >öÑñž÷¾‡[n¾…#GŽ<­¾«š0œÃ˜¼yVmŠ8Þÿ™¥µ?­&¢Š0œ§=s¥é“gog²vêÔÛh׎hñ‹©‘dãǰ¶OÆ$Éòç'B*ïk÷!EN^ p“³$ (µÐÀÄg\M­|µ™`ÖÞO¶þ*1Fé1Q¼Qäo"#ê¬B2âÙ«>ÜÙÙamm )%333ÌÎÎ~–­ù˜@q1¾Hܾ…tþ”n=[{Bô‡v7-óüáó®w½‹[o½•£GîÀ½Ú«½zRáê®X ˲†y¹é¿GQô´ÊxÚÕ²,)Ë )Õ4µ=ŽC²‰ßŽ¢„V+ñ*R7çÀY¢H7­å‡9‡i‹RJ¢F-:‡t:íÆu§Ù¹‹Ð`‘òq X*ïC*€4M û8 I’RËg%aƒ(°Æƒ œÀ ×xšzxh­WßZ[M'`^5›ã¬BÁp8¤Ýî4pUÅ!eUO/À¢(¼òÒ9z³]ªªlÞßCDzÊITxo ©‚ ¢6A˜P›]Ùµj‚r ­VËOF5œ(>,ÇV!I’RÅ%y1"MÒ¸EY¤ÐTUÖ¾5¹6Æx¥e–ˆãN;«ÜØ©* Ó©²µ(s„+¦†ì6ÙÆÏÑMÕ¼Ó€¯àq†>Óƒ‚Ú톅É&Ì{ÄZkȲ )ýÍÞj·(мù=®9ï%R ¢(õ _j²¬¤®jT‘¤šº.j[bêEH$j”2Ô±vñöæº|Ý×}1¿ð ob}½Ïõ×ÜÆƒbĽ¹‡{>ô^>pÏI–÷/ñK¿üm|ý?þ\=fsãJTäY–!,Q"‰¯ØG] Y˜]d²µÁ¹SÒZÔ\wíµì[’<|r‡<+X\Xƺœë®¿šïùΟ¦;“ðÕ_ó :¨ê‚ѨÏ}ñí¼åÿsgÏò¼ç߀µN=vŠû®áÝw¾“?þÓ{™ë…¬]°°¸ÈÆö:í¶$J[S0??Ϥ(Œ†,..qësobv¦Ëp J‡yN:tˆÍõm¯ø•‰ÄT¬¦*ˆ-†šP'Äé,¸-i( SW”…·òhµ[LŠœÉ$c¡7çÕèR²5Ù Ó‰b›õKŒ‹š›Ÿ{ˆåƒ¯âÑw–~F]¼ï®÷óœë®Æ9Ád\à\Ÿ½ý¯øŸðv’´Í­·,sûíÏcaqŽ£GsöìŒÌéõÚì vøéŸø²±÷#Þé8dº,.ì# #ö-/3êäÙ„$‰©Ë‚Á`‡´³¸¸€q†aPRRõÔnD‰RÞcÕ‡’ë,JFHIósÿ:صáð»uUQ•aìƒáŒ-‰ãˆ<§ÏdãcìÕá‡hlJü¸äáU]!„¡'›Foàë­7üÆ‚·`Q8ªfÃi¯>ßÝN—……fgg‰þ·äø 8zì(Gå¡“ñè£r÷Ýw³´´ô´«»ÇËhݦßÿ“Éi„ÐH¹Š”šgš:0Yš ÃQÍ «ÿ΄ æ)ƒ€¼¼@»½L«uèsà©úé+‰÷è6;;÷2™¬7-\!æñ¥Ïs!€0AÌ%u_‚’].Ÿz3ýÑ_RmnÐK2§:J#“ÊïügãêÔ©SÜÿý8çØ`?GayqHiT"‚¿›‰£À˜uLqY®“†sôºÏñV:ŸpEQÄâââtŽø…p,þ6À+¥¦“®"Ò¬C¹îÙy½ìÕç¦Â0dff†8Ž9tèÐ4<í~õÕWsöìYî»ï>}ôQîºë.–––öÀê^íÕ^=iµÛ濵µ5íœFÔuM·Û%I’iÐø^}ÁjQæ´[‚ $Ï &“ ­V€Ò aÔÔ趪3Œ™àœ%I-Iœ0™Œ‰£Ä·Ì§1“É„"ÏPÚ{†q@ÒJ¨›öÚÑЫF½w¡‡‰AàkÚJÉÆYӞᨠæ^I>8ÊC¯8óðÃa M ¯¢Óé1 Ñ"ŽÆ“ãqF *[#Ä„8NȳªiU÷a3B@Y e%B“ç)!M¬³ ‡¬1„aË«a(R;ƒÖEY¢¥" #мÀ¸’$mù «] ‹ È+Þ˵®Í´…~<bjG„ã(Ë’V˜€äyAÄ8g &è@}À±ÄIÜ1¯²ójQÝøI†ŒÆcFãŒ8ŠP*¤Ý””eÑ…I¯Är‚Á`H»Ý" cŒ­E ß:]¹Š8V”E ÂÇþø8,UUP9QãœAjsªQDæ„eDÈ©êWH¦PU«ˆ²ª©¨1Æ¢´ Œ5¶*|À’²W!eE¬#Æ[:û:0 …ÃÖcÖ.=Ê·}ë·Ðjk67†Üõ¾»÷cj[pÓÍ7ó­ßþn¼é:fçzTåkJâ( . L]ƒuÄQDnkÂ@ e@žMÈ2ÁüÂ<ýsÌtŽðêoz¿øKȯüòïðÿü¿?Œ w¼èKøÞï?ËÑcyô±‡áá‡ÏòÒ/û"ÞþoæÀþCy7ç/^æë¾ñ´âeÞü¿þ”ÿ‰ßae¡ÃööýûøA°ÓF–4Õ„:e<SšŠÕÕý;~”NóàÉèvBv¶¶˜›mqåGØÜØ&Ð Î*¢¤Ä!£¶®‘J“µ1€ 6#rª:'Œ4ab*‹Ó“QÁ¤D!­ A&“i–N`kÁìBÌ0_'ˆ2{1IêèÍæWþËOó›¿ù&.žÛ í8,ÑZ2¿¼B’¤Œcl»Q“ºšV’gc¤‚^·…”’"›`…#Ò‰ÃÖ5Îìzßc¿ 5uÝ|–=;€§¢®ºê*^óš×0™L8|ä0‡þß dÌmϽù¹y666B°ÿ~®|ƒ…Ö-Z­cÅeòü"ÆLhµŽ£TôŒ‚«IÌ.݆šÁc5ùà <ö&‚¥khÍ_EíGˆ9@?ç¡M»}‚¢¸@–mcLI«Rö€„gT°X »‡© ÃùGNñŒÎü³Ý‡¸òð,-­Ð길ñìõ*B°¹¹I¿ßgk{‹ÓgÎðàýp|y‘`öð•}§°³ª1œa<>³5R|b†ÁãU–%›››XkÙ·oßðBM3HÙ„ðÙ ¸>0ì)vö곯k¯½–þÏÿ9ÖZŽ?ξ}û>inpË-·0;;ËwÜ1½g:´wðöj¯öêI‡«¯gÝôoP¾T?/`5µÉ0¶Â!QÚ5äùgaqÓIÒ¡5ƒq†µ ­%MSªÒP;PAR`ªWç(§!¦¶h† ¥É yžÑm'g1U¶¤2Ýn×·É Ð:"+&tºàc„3EM%‘ÆGQT>>ÐÄíØ«Âœ#ŒSÈÆÄ±¸EQyè!¼?k·Û¥®k‚@33Óc{{!"jWS›‚8 Ⲭ¨mIo®G]&YIF´Ò.R¤¸Ñ˜<ÏÒFÞw*Ÿäàq˜6µÄšÝIlÕøðÕ²à¨ÍÄ·ò»Œ²* ”$ gjÒ&$) ›tsC™iµZHKjï9+Î8²|Bærfgç(òŠÉ ó\uF{HTUJ:´ 0¦¤Û™z…aBUådyE’vР( d Ѫ2g© ×ø Šlʪ[[’@“t;”eé­#L‰4ÖXB¥ÉÇ9q# ˜d#‚@‘¤Ùh€Öœ& Ú)ô‡äÆ’´{loA)ÒN—²,)Š!ÅhÈ7}ÍË}ÐP­ ƒ2ÐdŸñ#²³¶î•·‘Æ:2©q"a0wS¶¶·h·:8¥T’± ÛZ`ùða¾å¿žS?Èë~ý½œ=õC|Ë·ÿ3öíßÏ+¿úHUóÈC÷³z`÷¼ûÃü‹ïùvfZÞ† Š[Üxë xëŸ|ˆçÞü"þä>Î`§fe!3Ä”9ƒÑûWçÙlÑJèö66Îó¢1›Û›X;@IÁd¼É¡GY^è1ô‘Æ2?³ÀåËëT’VÒc4ÏÌ0öiµZØÙz¨]›©´r˜ªÄ`D¸ˆ8Ö´’6¦QYooèÎõ¸¼y‰…à 7‘º•$p1.SŒÛ´Â.ßüÊ—ó®÷¼Ÿv0C˜œ<ù0‡áo|?¯|å1^ú’—pÓ­7²²²ÈéS1®Ð"t’›®ÜÇÆvÎÂÊ23­EgAÆ“œ‹¹tù,×/¯I'`}ç½N—@Kòl„Rƒ’!ÂJêZÊT®$ŽÛÔuÑ(\ B ¿  ¼Ô:K–QÚCPœB뜿gëÚF ¡i«…ÔçaQYCUÖòÚ‡™ÕU4éñt Ài¤PÔ¦¦*-a$1ã~¿y‚µŽªÊ}ð^æP*&Ú =xJêØ±c;vìSþ< C®¹æ®¹æšg¼Q$É~¤  >N–] fÃnWõôÚ~úYIÜ;ŽŠºŒ†Q^¾‹bãÃ$ÝeÚé*"XyÊ`Œš$9à¡ï`H–mè˜@Ö(1Aü ‚ŒÍ`;‡×pß#ðÖ·}”ùÅ5^øÅm®³¬ƒÝY{ÖKÖZ¢("Ïr.^ºÄcÎ2Zê±Z íh‚Ù9j!R"üºö£»aO»›xARç}Æ›'ÉF— µ©*ã=¾§¯ (Ërš„¾¼¼ü·°¬*oE¦”Â"¨«Øy¤ÕPM *@îÕ½úìëŠ+®àŠ+®ø´sƒ'Npâĉ½ƒµW{µWŸ—ò‚¾j T÷¼T?`5Ib¢Yí¶¼Ú¦U?$ b67·¸¼y™ù…Ö9ò¢2È‹‚þ€²¬ £˜¹ÙY?5V‚ÉdHž—8«ˆÂ33óœ9}ŽÁ`Àá#‡XX˜§ªk„üÿÙ{Ó`ÛÒ»¼ï÷NkÚÃï|oßÛ·'u·%!,b 6¶ƒã(P$!e*åàJФâTŠ" qùC>*©;6ªØ Ǥd¤€‘„Z¨¥FR·º¥¾=ÜéÜ{†½÷ß)Þuv ›$%RKÞÿª®>ê¾}´÷ZïZµÖó>Ïïß÷£Ð! RT¿,+²¢ ïŒÖÌ·¦ÄWg=mÛ!„ÄEžgX7`t¶ŽÀçyNU–é:›"êFá\7*ùé´"¬[º#1zò"£ˆçšz‰‘"S8Û“ç™Ìè‡RÜ×d  ”¡( ”Ò¬VËñ¥H¬YTB(œuIb ©9Üdš€ÃYËd’ ¡ÛaŒ¦,*ä¯o»çÓé„é,Eþ»®Ã9Ç0 ‰1•Wc4KŽ–­ }—M“I¤,0Fcñ4W8Çî|;´:¦SÅ݃®\¹@9 BÃ¥Ëg¨*jNYN–÷Ù™OY-ŽiêE–ѵ-~:P<§årÉáá}„L‚aÝÖEB $h£ÈóoÏ`´Êp †ÕŠãûG¼¼¼Éç>÷9nݼÍž¿Á€Cû»s®\Úç~໹töMSSe†AXúÕ1W¯=À[ðÙ—ž'›ì°³»ÍÇ?þâÅûBòÂ0 =Þ»uô_ˆÄáEUVx—ØÄR ‚„‘ߣ!(ò¼ (NyªŽÐ÷#6$ޏ "¢ÃŒå€Àf¾“e;lm½‰¶}™ããO2™œe>¿ìòÍÆúŒÚ‰DŸ}Œm}…éî·!äÙ×Å÷̲=¶·ßLÝ|‰£û/0·™™‹°û(dß<ü[! WìÞàÒìUîÙÝÝç‰7<Î;ßùNºþІ7Mj$¿wïyž3›Í‰Ñ²¿ßÓ\z™Vž§88ÏQèIÅd6£ï:‹EzÎËsvvvhÛ6ïìœ%Ö·áî'aXàϾ“¥ÜÃÞgow‡®ë¨ëšÙl†Öšííí×U9ßé‹£µ–ÃÃCŠ¢`2™°¨ÚãÙ¿4â°aº¹¯of3›ÙÌf¾ù¦i¬µÌf3ʲü#²×7ó «CïFN •FE× ¡qÎbL†6’HÈ„Xk1F£¤@E!r¬³ÃÐÑ÷©“0–çy>Þ®=x•Û·oaí@]¯ Š"#“ŠédJß÷±6[í”Á9ú®#fcÙL , ´’e IDAT2(¥ÇxnÚ‰÷> ”'Ä׬ÐJ%q$Eî³´Ã?–\5MC''ÇIL-r¬…\)„TÄÐã†!`:™°ZÕD¼õL«Š¶ï‘"O1jï !`m».…ÆÒšˆ¥R¤Xx…Ò Tr¤· GG‡ìíí#„dU¯°Ã02m‹$Ûžaè×ß+Æ$+%)Ë£S;®sïR†ß!¤'âˆ"â‚Ǻ†±L,_‡ ѬV5B2£)«ëw!b²œB"ë-ˆÄSU*CF Q”e‰‹6¹`]HXƒyÉááQ* ‚±ð'q\cè‰xBtXç°.¤r®âöRjŒÙ¢(.‚ëÑmïîÓ.>‹š\ /Îÿ¡Ñíoœqĸ¤nnÒ4/±un—wþ™ïAî|;;gäío{+×®^cgg'ñõÿŸ¶miÛ– .péÒe„ð˜ü.Ùä ôÃË,ïGÚüAŠü"1$lÔ0 kAô%Õu=rµ‚ž>¢ÈvÈöߎåvè !ŽÏµvLx™uãëÅ sºBHÏš©2â쀕%jûAB!‰¥þZÓ<6³™Ílf3›ù~NOšÓt:ñ˜©dÒ³q¬~-…Õ¾·kV©VŒmó–,cLÝc´àüùóTƒÒz’K4‰—‚Ù¬JŽGýy¡’+0¾ÆˆLDAðD!Ç"±À08@ ”A¢(´Êñ2})Ç‹_$\ÃdZ ¥Âï<ÊdÄ„,¥Þ3F¾œKÇš¦£*Š¢ úÄ¡•2¹‘£cÑ3 étJŒ‘¦iÐcÌ͇ˆÎ41&6n–kL¦ˆŒtík-ç/ìráâ. ZNV÷úŽË—/ñôg^à•WhÚÿìç~‘½½Œe=ðÉ߻ɠïáꕌ‡¯]áÒ¥Kx×qpÿ€äEº¼wŸðèò³S0ŸO©û†²ÈY¬jvvwX^zéWΟãÑGbk>§í,;Û[„8çâÅóôCr¤œ={–º®Y.´mËÉÉR¬¨W+†Á¢3Å… ç¹tñ"UUqåÊìíí£”áì™3©ø»¿ô«|ì©g¸wïŒéYœÔü‡?ý¿qóæ=þÆüSd…BÉÈd;£Vœ9»ÍË7oðÔSçÏý¹?Ï{”[·î@TœÕSPdI¾|ñQºfÅrÕâ•æÕÛϲ¬ó]ÁK_ZRUp¸¸OyÐÑ:‹‘ 7¸Ñå YQ£¤h)™D˜ £ƒðI`á´ìBŒ‘Hõt!¥4RibkΪ©X-ˆä(•R •"D=2ŠÓ†.9£#rÜø1Ę„Üäp¯;ôˆ]ñÞ"dÂL&åX—îeé³´‘xF~òf6óõxhSäù>Jå,—Ÿcuò"™oR#²ézóá…ù‰DßCwÇ_¢Gt&²½õ-Ù”ÌAè×UÌ^E‘Ÿ%“"¾Œ_½Âª~#”ª0z+}!¿"¾æ×W Ähçn³¬Ÿ¡n^åüÙ7ó®ïy7oýÎRUTU±~æÛ¼($WÊññ1W¯^åÚµÑ Úîe–G+ìý8i_"îo#ÅÅuÁÓi,ðôï‰ý¨÷ˆËCˆ’éäfÛo¢îKú> þÙÿFh×Ó å?û9½Ub‘'À¶l³v6³™Ílf3ßd¢žÖlmm­7=7€¯Ã90ºH»Ñ>ÐÙ~í¬ÌLÆd2–æO^¦8¾t¤ï{¬M⤔c’ðÙ¶mj{I°†ŽÕª¦È ²¬@ʈÒÅb‰s6EìË’I1¡mSÍC?Î VõÀrµbµJ/)Ö¿óW¾‹wýé·3ŸÍyã¢c{g‡ÿã×ÞÏßú›ÿ=_zqÅî®ãÖ­ÛÔmƃ>0"'’c°=Ûó’è /§š–´]M?„ävv–ý½}ʲ¢( (Ë’íímΟ?Ƀ&gS6Fì©ãc¼Ö‹<çÎÝûüþg?Í;´MÍ»¾ã-üôô“|øŸþïïý2oxüß÷½ßEi½¡$Õ¤âÉÇŸàèþ/^¢k¶·öiGUͱnÝy•Å¢¡È+NŽѹáú££t‰àäd‰ðècW…’g>÷g¶ç쎱ÄÅ MkI*‰6©H‰È ÆyüàGá?¢´¦, º®AˆlÜ:½n4Þ ä¸¾Cp ¦x’›:Æ€Ò ­M“îyýТ”DjD¤2iSb`t«‹„#‘~h×iF$­Å´Ö’F¥M>Þß6.­Í|= ‰1sªê&–è…¥oŽiÃ=òù>“ê0¾1Ü«ÞÕÔ«ç‰Ë›Ì†H^î §g(‹‹(U¾®Ene¶`ˆYÎ”Û ¾aqü4Uñ>C”TUAÛö,—‰w$£h»ï-UU°\-1™f:qpp$·XIÌ«›†é|NÛµk‹ób±X‹{Êhˆ2‰z¬u£8hñ>²µµÅ$TÄØ#¢ ,K²,Ç»Q^‰!ÚñLÒvŠL ¬HâK ï,Ád2%Æ@ÛÔcȳŒ¾ïº$¸Sç\r¤:çBb­ý²cãéú–ˆÇûH×5äEbö6qJ§Ó*‰fCŸ˜°BpþÜ„ܺu‹¶mÆ8w*µ)Ë’<Ÿ µbѬЪ‚˜ÞG°I|žN+œ8e–úQl!ŽßáËäîûÖ:f³ð©Ü, D¨CHͰ*+)‹äÌz‡·“;”\„Þ'7±RŠÅbÁlº½¼µ6äeÅ0 ÔÍ‚¢(ÈsC$à%Iß[¦“-†¡%‰Ûõd™Y;‘ó,#Ï ¢1hmhV5zŸµ–dy†÷q‹‡ÄÃ=¶’C:¹\ãxŒ•R˜ÜàœC˜Lrº®E)ƒ1‘²LY®_ qÕ”;÷ïñ±~ çK>ÿì¹uû>e1ãà^‡Òà-üÔ_{?ù“•_ÿûyàò¿ýá÷óâx×»¾ƒãÇþ2ŸýýøÛû×X­Zf³9}wÂ7ØÚsþÂ>—.]ÂÚžãã),{û{8ÛsrrÌÎîYfó)«Õ ë–Ëå:0™LX­VÝ"Ë2òB"õ€šÁ¶Úh¤x‘Ñ6i³YqÿðEÙpûκŽNnƒèù7ÿ­滿û|䣿‰;ºÁ­õlO÷8¸{ÂÅóWPÑpt\³¿wË—Ïð»Ÿü4÷ïü2ùðÓ(•0!Μßã}?ú>„kLFf".(îÞ;á±7\ç÷>ýçwf|ç·¿Ùl†µ-Ãà0™çÒæ‘¶iqnED’%]ßœÝ@–¤TTUE–„HkÚYÀÓ´ŽªªÐÚ< >]ãÎyªIŽ”‰ÓšðeY¦Ò*eZƒÄZÑ„À»€Ðd2“¥ë(`ŒNÎê¾Å9;ž—S¬Hb8'F²A© 'g3_÷G7òü,¹ÜFøÑÞÄ…;ÐßF ‹[H¹1Ûñú+¶ò¾Å¹eºvÝ‚Á#E€b|z™|z!õ7Âi€| •—L˜As“f¸KhïbIFOF|ÎëìaÛD×ࢣ³X{ë(5c:½Îdz}ÄlÜÿo³»»ËööökâfŒ(Q1ɯ0¨9Cè‰â.ˆc„H¬ÓÍùÓ—°\*¤ð´Ë§ñîúì㘽?…T†Ü$ÓÁ©óå”Óöå/o_o7Œ‚,Ëþ€“y2™¬.Š‚¢(Æ?ÇN‰Ílf3›ÙÌf6³™?faõt÷: š©<È3"õ´mËÖ|Nù|›;wîQÞGʲy¬b±O¥+]×1 )¦~ ‘?m]­äyTéA­©–¬ãó§`|Hî°ÅÉ BÉÄ»¬ëñsªõÏÞGæ³-îÝ»? ›©¸gkk ïmâƒ:‡V†º^0 ùl;=TæGÇ÷iÛ†ù|JQ©ÐFäøR#d¦D ƒÛº»¶Åj‹69Þ[L^ k1®šT,'H%Æò&TÉ]ºZ-ñÞRB&ÜA׺Q“›¥™NK”ŒëbªÉdBY–t]‡”‰ê½çæÍ›c˜ÍæL§ŒÊiÚ†u]#¥ ®k?ŠáÆhš¦ÅD·v1„à׎ÛaèhÛ†’Cs2­hú%Δ҅AKÉjÙ$—ŸR­É«ŠvµÂÏryŒ19Æh¬µìíí%ôƒè±è«ok Œ®ç@Ó-)‹’,ËÖE §ˆ¢(p΃õÄXô#Sa˜mðN$”eµþ½Q™‘ÁëGAË­ñÚhœux×Ç¡é:ʼd°=MÓ$ÁŽH–™t¾³‚™™°Z®ØÝ†žnˆ }ÇÇŸú*Ëùà¯ÿ&u1›m¢f»äxayÏ÷>Á¿ýã?Ê?úÕÿ™w|ÛÛxìÑyø¡3¼üòE~÷é§yðá'ø‘ù~á¿ù5.\¼@«WH뛊Ÿî¾ÌÖlB×,)sÉjuÂ+/ß`{>CJ8>>úëæÔÝ|xx8^£9Óé”U}i!ð®E鄬èúÄóÌcNo;¬µè|‹ýœŸøÉ¿D5ùÇ4mÇ_ÿ©çÑGÏðÜsŸæäø€øï#ǽ{÷1&gw÷,]çØŸãéÃϲ½u–®·<õ;Oó±§~—øÞÏó_°¥ÂÛ€1+¢€O~úˆOüîÏñ¶w¼‰"‡® xñVQMö8:é‰QR]Þa2K.Ôz,™Oçôø`Öz@¬7b²˜î3OÄNœlí`v.ŒüÕ­sìà‘"#«¦(e©ëUÂ’(Íе ŸA7šÆD„0 b*ÖÒ|Xß']@D”†ªªF·v‚Œ§ûæ€6&ÏqCÒ£*ÒÒÝ8V7ó:Ðô„LMôsI Ó¸M׿ÌÉÉ—1gÙÚz¥ª/_Ä×I$‹ã3N]w›º~ç´žQägÉ' Éf òhóBH G°C‘çhöÐñßP¯^!Æ‚­ÙHµL§˜†¯“–øÕé&ÚCâê&u8ÄOQL™N/ÛdÙ.Rl\ªÿsº‘ÿe&ä9b{y|‘Postò \‘³«ßIfvÿy!´kǰü&WLç2™=†Ù¸LÄ* ¾žâ…ÿ_Ÿíþ»¨º™Ílf3›ÙÌfþ„„ÕÓ–ôWcÑ“b¹XQÇÀåK—yõæ«Ì·wiÚ–ét‹ºnä B0NQJÑ÷Ã:‚žçÕèàÔ̦©¥»ï{NNŽÖÐ{ç<ÓÉ”¶ëB‘eZœM€}©$EQ"”Æ÷cŠÜ·mËl6[‹Eu£©ª’aHBjY£‹5½TI™\¸BHªÊbŠŽç µÂÙž¦­ÑZƒ A F†”ˆèÌP7Á»T,£Ú²<§é’“Mk=" ×µœI¤Fà…OŸÎ: ŲÊrB×õXPR ¤"‡ 9–òxÐ:‰¨ZëÓ.Ê‘ù¨¹wïóùÖ謳8gÇ—ÿ|¤mzBÑÚŒ‚h*— !9jÃ(š[;PU%]×Ðu=Ú(œ‹·Dr ÎSæ)^æü€sqÕspÿ€j2)Ð(b”£Ã/}_!"ýÐÑu‰Ÿ›Ò'Ö%Þpr²@n¶íÖÜXçbL@>$A¸iâ@HEßÛtì”$Eð©í‰ãú"1G?ö”G;âô}‡·Ž>JBôm(²äPô>ñ¥(/’™ @µ¹¶þHj«@L¦˜ý‡ÉíK†ÌLóÇÀìþsÜÖ·i>=¦z€²º‚Q“ÍqÜÌf6³™Ílf3›ùJ„Õ¢4ôý0 Œ‚§ã“Ÿü$Ï?ÿo}ëÛxë[ÞÂÖÖ.>œÐ4 RfÜáܹsXë°6‰ÖZ¼÷‰gCGG…¤©“ó±®S wUMÉLŠð˜¬ÀõŽÌdä&©0&E{–õвª˜Usú>ÅnSt¶ObÇ|†]&}ŸœcUUÑ÷ÃèhM…ZZ+ta0:Å”O9±ÙiüÜÛ$tƒ’ÙØÔ JçTUF×7„¢äƒutvAïyˆkço*Ÿ #2aX¿üxï×bïd2c:º¶e6Ÿ¥XUyEž)Œ.ÖÑ@ RÒ¶5Æd8ë2btFU*Bt´MG`ík­¯IM<©Å<±S¥ÈÐZ"U:ovð(yV¢²ƒ”R ¥`:›Ò4õ(P§ß™X–16ÍÆèQJ`&vèY®ŽFv— ï^;¤TÄQ€NÎÑ\¼™cÙ‘ÅbAžçloíà½Ç˜|<·bdÝ ÃùÉ|ŠÑ†¶MÑüÙö$‘×Ös2K¥Â.¾ŒQ)8g“ &$E‘„6"E^ „"‰Ö£ !x¼s(©iÛzÜ@0¸a@åŠÎzŽ'4uOUMqA²³»¤E Ëá}Á›ß4á;ßõvž~ú·xìÑG(Œ¢iV«ŽóÎ!•bï Ïáÿ¤kU™ó¥/½Â#^fgw—7OÒÔ5ïøÓoe¹¸Kß)zè:Yf°CÃ… g‘ò4¦'^+æóyÕCÀûÀr‘â°1ä”Ù>Fk´P í@–k„ŒäZ³é ‹Å‚çžã³7?Mg[žýì1ËÕoxã¼å-o"¸äžQh„Q%@•—\ºvßü­ÿ›¾ïù3ï~3á‡ÿW¯=ÊñqÇùóò3?ó_rïð$œ9»Åþ_ü nß9àW~ùä#þ8 Š;·oÓõ'lí¦“3 ƒåÖ­»”eÉÎî<]'R¢¥"Jêôsï#Q¾Vlqz­ !(GEºOhôãO¬bAÓÔQ9;§/£Î‚ðH•6 „äY‰:qjQcÒ}5&Çlˆ‰«]bBK¡‰!ƒ‘ÄÕ„A 8P””Ä(FqÜ@È7óº•öªê*eyiÐîq|ü4Þ×(•±³} %.€Ø&22½ÉA)ÿ˜Ê®b€ˆ„5GYˆ–àîR¯n°¬ï@„éô ;;¡õ`†”ßD¼Ear]í0ÑÃÉ‹Ôþ& Û~Žš\†­+Äl 1|Ùyøcrǘþ"Žç"ñî­]P×ϲZ}!³pž¹¾ÌÖöÄI…T¯C\Á7ê2šÉ™7 ³ÿ©O“-^†öE(÷ !F‚o©ëÏr²ün÷²³o%æÛ›¸™Ílf3›ÙÌf6ó• «]׌‚‚Á…Š““/^áÂ…+|ô#¿Ã|¶ÍÛöÎSæ3êe‡õŽ|àCüÙüA.\¥q=„¦·->ŠrŠ1’¾o’på-Y¦‘2¦‚/™ø²‰½ØNÖTþÕué#DĘŒmßcLŽ ©Z ”4ÎF¤!I "±G¶¬÷cròir§Öó$p ‘XªÆdxȲl-l:çˆ.¡ò"yfŒNW7ãžél²F$èQ¨% ŠÌ(BŒ4uŽÌž²ÒTƒé{Ñ:¹•´8? ÃÆžÅâxiK¥ †ËuµlFWnbWŠÜ¢Âi)Ù©X-ðÒ$Í <Á[”Ln?!%‘÷"$ä…Î0FŽ8ûe˜€tœ’°°6Á­QF¢tFžв ‚¦µ!² îz®?ü0ÿø×~‹7¾éI>÷éÏr0Ñ®ïûËßÏÎvÎ|ZpåòEÜ`ÑÒ  Å+/ßæøp…’šGy”"ÿ ýÐqñÂ)/½ôßÿƒïåSŸzŠ;wïàìŠÝööwXÝ#Æ@žåD1:‰€ÂIO®ÛÄ1¶Ö®hCUV@*Sr–‹mײ½='øäþ½zõ!²L%W2![Ûsú®a¹<&7erÚ¡%xÁdºÍÑñ=¦ó)çÎnó}ï}/.8¢Ô4í=\p,V¯2ßVì"O:Þõî9s.c±ôìîܹ}BžKº¦Å(Íů1 ‡¬š#.¿ˆ¹¹ +‘ŠÊ ×ÁXfc¤,ƨq£%¹ô•R $Yž¯cúJ)„ÈŒ%E>á왥ô¸^’ë|¹:"/Òú=9Y0Ÿí§cäXœ§F½' d ºˆ÷ÃèäW¡"]O1Š1!+A¤s•\ü&‰J ˆcAÛf6óú“V¥Ì€ŒÓ¨÷tú0!tH"¦ØîZ^ÆQHJ* ½“ó ³?¢ ¡;&´÷¨ã‚‹ ’#(b 1Û"y¾1»H9?ï7™Ä-5R1Ýÿ¦ž,l#|‡©C×Ðñ9¬Žè¨(©Èõ¦P L÷¡¯VTm[èjˆ5–- ‡ „e>¿LÉÙEÊ]D9½aGÿ±_z]Î5(N IDAT]Gí¿ÛÜbùÒo‡–âÌ·#ä¶=auûc4Ÿ"ø–Éö[™l :ÛÚ¾Ílf3›ÙÌf6³™¯TXE„TLdCE<ó™Ï±¿†w¿û»Øß=ÇoøÃ\¹ú0ReX¹téßÿÞ`:ÝbµJŸSN*¤R‰õh4yfX,N(Šbä¹ö4MËl6Aõ% ˜˜É¶7@Šä{çÇçÿäDÒ¶=Þ¥²,ï-!$±3±Qó5 5•X t]KYVÌçÅŽ©Å<„u™ÑRÄ‘Ÿ*p69X}pdYAU•x'ÖeEƤ§1†££C¼÷Lg³tÜ”’Û5}&…÷Ö 8ëÐ:²½3E&ã"Ê'WŸ6g“SUMêJK¼sĘÎÃÞÞþ±îˆ§âm–DÕ8:A™ e$!¤ãè|Rœò¬À»!9DâPFãBb× !Ö¥ó•›§\ÙSÑÍ(ÒÁ0tÄÄBDÁ$/ÑÆ ‚@¢ Z`”fg7c¶µCo{ûûòÜsŸG„ÀÕà{ßóNÚú>Bx|ßá,|èƒâÃù(˺æíßöNÞô-oƺ)?ÿóÿ+·nÝçßþ/^d:êzÅññ17oÞä±Ç®rísh£0YÆîîø€Râ¸VÉFÁ=mœÄ0 •¢iZªª`:Í"•…eª²`çÌ Ûµœ³\öh%É3C5™sïÎ=Œ²œa›ž²œàòtñ!½ ) xöögòâç8Y¼…¬Ð,Û£KuÍ‹¯|‰w½ûÍœ»¸ÃñÉ=¦SÁÿõëÿ wîÒ¶‡lmÃþÎ9œ“ܾù ӭ˨lÀ…š¶o!Jº¡gU7ô½eÁŠÙlŠVŠè_s¥&wrBG¤k4¬îÚv<^éþCúotQ­…ùgÚºGÆc¬PR•„4ø!"trß9ç„„V1dݦ~ýÓ:B¡Tb¬ž2YƒØÁ£LLßðí"áKb¤Ú¤47ó:u´ž±µõdJ ¸qôEÚîUÚpD'z à Ì0!x^ão~ÅbbŒÈú€¸|…^ÑÈ>É´±¢Ôç¨æW)g!~¹ë[|ÓŸL…Øz€2Bé,„†î%šö%z±$#Ã0%϶!Û"è-<³QX_ÝyhV¨Åä'i8¡™©˜Ï¯0^%Æ£˜¾1áÿÉœ{ „>¾ð´¯þVw?…ˆ™O‘ú,ÝÉ]/€àZLuÙÖ©¦×röÝÌf6³™Ílf3›ùŠ…Ug#D…ÒEr,Šˆ‹‚KW®óùç^`{ŸO}úÞõßÅ™s3¦Ñspp‡~;wn3)&äy>º -!xÚ¾Æ9OYe†Ù¼"Çjµ¤,‹1æ˜L'„hÛn]|eŠ<12‰Üº}‡sÎ3›Ï“)¥èšÉdÎ`{²L‘wžžƒƒ»\¿~¢Èhš“— —(MÝ}™ø©ÆØoÀû$hž"—S«Tôà ÖbE(‘bá^2™NiV5mÛ®—ÞGú¾Æû±¼†„08åÊžpñâ¼÷Þ?f6ŸQäÉdR!D‹÷IlÑJS“ÑY“Üöte>ϘÍfk‘ÚÚÄzM"q¤m;¼OåaÃ`S?Jú¾KÂódNÓx›0BH2#ÑYFS78Û£3Ã7ºžGßðRçd&KBÔO¶Öc¤ÈK¢èûšzÕ£AÈÔ¨n” ‚,«å“©hÊZ‚,ÏCÛ ÎRZ)ŽO˜N§ÄÖmîZ)tf\Ï` ;Xdˆœ$ÀëäF´¤ðB€2¯•lÅ®kG'¢Y;¢µ¬š“j‚)þ%Q&‡p^¤ù¾gp­sN+šÁ|ä¹Ï?Ëc<Ä~ý·¸zõõâ„¶^PÍJVCËÁÝ»äå„ahyæ3Ÿã[ßò6Î]¾Èõ‡âÕ›7xû;¾•í}ßͯüÊYÔ5‡÷—œ9»Ë+¯¼Â¹³gyéÅ/òçÿì{Xl7°µµ…B ”@™) Öö„ŠœN«Z¤†ÌèÔFŸi¼k !m8 }ßpxë>R Î_8‹sŽÕj·ÕH&U…RÌæsVË%;[{Ô]GÛ÷”YE Ò÷ ÝjàÌùs„à¹yë&W¸‚Ðõ ŠLò쳿˹sÜ‚i%úcž}åE~ø_ùQ¶g_àC¿ñ‡Ç÷)‹9[Û3æÓ –ýÝ}¤¬VKfó k{”JßKÁBHåf‰hš~}ã;å§Öà ¥’[ÜùN¡ð«†Sž7L¡È&%ø!J«crç(ç[Ø`_[Gþtó#ýÿEì0ºè‡q‘Š×RÔ?Ž›' P8—˜„ƒŽøÖ³ˆ’ `3ßHâŽ@€Ê`ë²évâ€I@Ç|‹/Ò¸%KxüW!x&¬ÀÔí2ûÌç2) Š !sГôYþ…¼€FñRØÚ"Ÿ=Ì x$[p5Òø—YÐ_õy˜Ù’™˜#æ—É‹kìŸÊ;¥Â˜ ¨°QTÿäÏ»Ò;;ߊ‚¥ÌYžîãÿIˆ5“ ßÁüÊw“o]GÈsx3›ÙÌf6³™Ílæ«Ve,hš½U‚Ìèš–gŸ{™+Wçñ'ŸäÓÏ|†.Fdž³Z5ܺuƒé,§l#/íÑ6=Ëå’í‹Õ$EcˉÄè@Û5„Y­RáSYVë&S)“ ÕZ‹É墣뇳ª*‹cv÷w©ëšf•âò“ÉÁ)$†¶nÑFðè£o`µZ DĹ“)ú¾áÔœ"3ç¢é¦Ó m Fjº&Pæs·ä¥/Þà•_bÿ<¿á~ûá^Õܺ ‡«ž+ΰ½{Žå²ÅºHÓ[ê®áüù]._Ù§î:n¾ú)þýŸþ1²Òñ~õ£tEkÇ;¾ýOѶ‡Ì¿üƒßO]/X®–<óûŸáñ'߈pŠ|ô£xïé:˃×¢nîñܳ_àÚƒg‰1ðâ¿È÷¼ç]h%Y,ãšÊ fd™‹ÏJEcBeçM[£U†Ñ©l)Ïs¬‹Ò‚3gÏ ¥ „?ÏóÄèmꆔÅk®s€99" –"Ÿ!PãùÊ0¹@g‚4A“¸ÇF&>noÇc–Ö†þØ{óXÛ²»Îï³Æ½÷™îøæz¯Ê®ÑeÛx((ƒžÒ†ŽRÕʉˆhº‘:‘襑èNé(!¢›$t€¤Qš“ À°«\.×ðjx5½ùNçìiMùcís^¡¦[iÀjƒö÷é©^]Ýwï9k¯}Î}Ÿõý}¿Æ¢”Áõqp5“#”Äû–)t]÷ ¥4Rå½%Å©šrìHJ‘™ãÐû!ãWP%ˆ@èêM|Gާ­±Ú  ›³] ôC)Oc½Ë¨?ŸP/{FI`º‚Å.EòÂP:øïî”$‡Æ DÃûÕÈïþXòÉÆIüÆë`*XìQ$&lÖôOvr~4º¡ÆKðe ¢8Þ­H³ó௓#iÈe/ u9.Ò¨Q£F5jÔŸ¬NfùÇá¢H%(Ë’SÄ`ù‡?úã¼õáwð~øGxù¥§™L-uS£µa¹\ò‡Ÿ{œûï e5¡i:btH¥9>9ÆjÃbž³š2<ÉîÔõvn¾ö„pÞåñ|)B£1©”¢ï;|HTÕkJ¼Oha›s ×µô}Ö%1DÚ~ B5RjRˆX]²X,ðÞãߊuŽX2I}—áS]¯èûbh}/ˆ1Ò÷=“‰òMócsо­‘RQ–Ù…«uÉ:æ1ù ”- 8„Ìß1€J%‘)á}ºR‚-ªáëôeA5Í…R>äÒ-¥$Z—8×S7+¼[1›Í0&5§p.dÀm5F—híè{ŸG¤FI1Œé±_çQ®Ë¶”Îî[!ÉpX)œøèi[‡ÚÔ¥4D‘³&C¤(px\6ç·E±Ù«¦ãøø˜j2ÁZB“DBN&$rÑpŒò?Ý24¿““™Gøõ¦˜k×»ø€åüËü÷ Zç ËõõíûçܹP’³jÃÑsœCl¬µH9r1×6;Yëšw¿û+¹zý©)B]·H"û{ð…'Ÿåë?ôf[S¾ðÔ“”eɇ?ò!®¼x™Û7øôg?M9Ýb{÷,—Ÿ{‰Oþî§) ÅÝ÷ÜÍÑQÁ3_|œ+/¿ 4¼÷]oãädÉ|V1NBR¯j +" À.#yŸ ¹”24MCÓÔ`Öä{M„4”€Eb‚Ô'ùÿ¥¥ ´‚ss^»r“áË&W5ïõÂZäI‘óoO=õ$>úU9ZÃ;z—÷p×u“NNnÓ6°j—9Ÿ¹k©Û;Äyt½d1ß$}ï¸}û6MÛ"Õ."äƒ[D/HI¢´Âû/ƒBŠü|‘É$;tRÌ{J Pá1dW·T!çC#PÒcîhñ>@ÊEq]±…öÖPðF"†@$Ç Äo”VÈ!ÛzS˜5|þú5Ò“?#1¤,HI’DßµFý‘ÊpÇäŒQãuõ¥”)wÀÌ»É?õ¯3tÿ´Åq£F5jÔ¨Q£dJ„&&A! UUñw~àûyÛÛßÁª]ñ½ßûŸðâ•é:¿ÉCB²µµÍãŸ{‚岯ƒÖ†ÙtÁb¾½ZkhåœÛ@´¦iX­V›ÜQkìP,u§p)„€ë{ÙjŒÉÎ2Îõ·dQL§3´ÊåQÖC›|.ëÑÚ`M.'ʆkó˜|ßu„“÷lUeç«‚“å 1FʲÜÀc e™£³Ù”Ùlžak\²Bc\­qó|Ö¥V)å¼±„Gªˆµ*;zÀ„e°šR¢mkÊÊ0ŸO躆”çèp98f¯¿öÇGGÒæû¯³Q‹!ö¢ï$µùÞ]g¡®ïËüËFÇ@JùàÄûUÒu-Þ%´.軈­ ¬-Q*ç®ô㫔ʇÃkK"ß“J œs9–ä þ;0ƒóÕ{‚s9ÂÃHS ÔX,2jÔ¨Q£þ$R@L€éð{«£F5jÔ¨QZiÂ.’ˆïË<–®$O?s…w½û]|Ó7}e >ù©ßãÿøÇßûþïck§ÄÆ–\þìg)Ë)¿õÑòUx”W^}…ßü­_ç[¾å?dk>¡*ÝfÄz ¢ÖpêÎx|†cb¶È,„Ο[V«åвš€P´¡ÉÎGç7@SˆDïZú¾#ML‰åàä4›ÌN)]×a­¡,-ÎIL¡sIVJL&å0¢/™*KŒ‚®ëÞàxTœõ7jv’vy,½ï‰”ÊIqR*ªª ŠBJÁã¼#¥žJ” ¤¨QèyŒ‘ªª€ e»¾¥ïk”Ò( 1õ)¹}p“ÝÝ]¶··xíèš–)BDÚºÍP¨W´]MUUÄ˳ú>`L‹6ù¹­Ÿ)mFé3—ìîîf¨#JG„Ì‘1Ä!·µ§mªj†RçzÙu›A,$Á'œ vú„4Ùqè½§,KæÓÊzú> ŽÂœ)bvªn¢#D†u9”-)Šbp͆  rîfQÆÀ€ÅƯÑw×ð%%¶0žÜfRM!â\Ê×Je'ržÕj…P”58y'Å„­í9¯_½ÁÝ÷ÜMß;>ùÉßæø¨ãä¸æÌ™Ó<ûÜk<õäÓœ9oxð¡¹|ù2ÿÔïòmßú·hêMS3™ÎÙÞÚá~ÿ9Ž{ûSOjÞñŽ7£”ÄÍjuˆRŠkW¯ré®óL&BL4u” ¥ܦkmÞK]GŒ „¢ªôÜ+¡†Ïa(\JX]‚ˆ¤$‡=ã"ÏÏç9×ê<¯¤F)µ9Éßš¶¦ë{¤Ôœ;wk ìì.6‡RJ´Ñ(%òØ;‚°ôÌ·&Å„ª*±æ„­­9RBYUÔ«–›·^ggçÍœœ´e'¨RŒ¦ì0VJS>@‰„Ê1"E‘³L»®Ëeoº@ëõŒ‘"V[°„¤mkBð•!Æ„16»{£^g<«U=˜!jD"DÀ‹@ ÎS) •À ëc^75ìCr$J¾VgË6$ÆÑÚQ£Fõ'‘!ê¨Q£F5jÔ—@ÒûŠJê:Q7“eÍññUÞòð›Ø?»CYÁ_ûëæ}ï{'ÿâ~‘Ý}Š¢bgg‡G?ø(§ÏœáðèˆOýÞïqãÆM®_k)ŠŠ¾÷CÎ`7ZCŒ Ì0kmvZÃáá!(»ÉÖ®Ö5³…e±XÐ4+BF±Cà¥EÉœÿ9Ì)ŠŠ”`U¯èûœ÷B`¹\¢”ÜŒùw]‹s޾ïX.—¬ê¥óùœ¢(69°ëÇžK ÄÚ†–yÄæãÙíXÑ÷}"0€Á Œ§Ó Œ´ÎÆùìœuÎexSX&“IvjÁÕ«¯ñÊËWP*Cã£ÛL§E‘áЭ[·8>:BJ¸~ý:«ÕŠCv¯f¥=ˆœ¥©uŽW888 Ðø#¿i[ÜpœÇBÈÏ{OÓ4S×ù™ÁLʰz:]°»·Çþ©Ó›±k­íÆÍë}Fïã­ªHÉ@6ùš÷½»ã@634گ݆ëÇ¿~.)åì;Ï !„¡í CDk+¦ÓÙw lbRʰJI”Ò˜½³NJ)ʲDksŽº^a­%„|ýnܸƽ÷ÞC×Õ“ʲäÒÅ7CâþÉÎt²MçáCþî»ï~žxâ :×ðÍßü7¹t÷ÝܼyÈ·|ó_E©ÈÖö>/že6›ñÑþ6w]¼È=÷Ü3ÄE(вÜìǾï†ç6÷Inœ¶k÷¤RÙíY7ÍæþJ)7Ó'$EY¢uAð‰ÁÚ’ªš¢•ÅÚ‚Ùd çrnh]×4M3<&9¸Âe™áûÖö…-xå•Wé{‡µeQQUUÞS:粞œs²<¢( fÓ|Hpt©ëeþ<©X.—~xxˆRš­í­ÍëE\—“yOÛ´¬†½°9@ôdBQX”’›„”"Îuô} " M–[˜áp!åΩ‡ÌhO]×tÝåõšc‡ß&ßÇU~]* ƒ. Ea1E€ôÚI¼þs†­ù>‘J‡¬æu.ô¨Q£F5jÔ¨Q£F5ê߿ԷëWü.,Át6çÆÛ¼øÒ«|侑۷Žh:Ç?ÅóϿ̿½÷'%OÝœÐ÷-JjΞ=ÏK/½‚sïøŽoc>ß"%Ï|VB2?Íf|Ù{¿)-èÚ\jdŒagg›é|¶XB ´Fù]Î*¬Ê*ç‰z78@Óélˆ(麞¦i†foWš¦,‹8Tk˜!(Ë‚”b»/ ä0ÚÛu-]×b€xëB«­s4RÁàJÀ©’w€ðt6F×´RÄè8>9" Ì0Þkm†¾UUcàøäˆÉ¤äÊË/"$œ9sоï899Fk3¸ó2ÈÑÊn@N5™b¤mÛœ©)Óéd“ûCÄË|±`>ŸsxtDˆ©ÆZ”ÖùÏÆ ­Í`ri‚ ¸3ºÀûÀt2£(ªÌïRUÎõÁÀ[Bć SóõU„Gô•Òô>C£¢,reLè!•˜ý¥1F”Ìp])EÓuLª ÖÚ ÐZ»‰3ÄÕ¤M¹e]YÚ¶ä&:Á{7Œký*ä|Y3”< $BÈMƒ¼àŽ›×ŸŸJ ô-«v‰ºí9þÏ=…çž}çÖXNŸÚâw>þExð<ï~÷{QÊòÔSO1›UÔõŠóçÎÓ4ž½ÝóììžçùË/ñò«¯#•`µ:¤*5—.Çh8wæÖ*.]¼Hßµ›=˜ ·Ò«rN®2H±ÎþuÙýYy¿KMÓ¶„˜òu–yÉc©5¶(‰)ÑvŽ$RÑ4ù{ÆiÛ†ÝÝÝ âÈI(%iÚŽÙt‹/~ñ9yÛÛÎûˆ4d;´¶ÃßëX­ZªÉ>(âžyöUööÌf3¶wf¤ÔsáÂY.^:Ãlf¸çî»8{f®«)LAŒ‚I5åöÁ!J+„HLf¬©hÛ±Ñ7«M¡œ6K!sÞr0œR€˜0Ö ë)(Š¥3…„”ë‘ê y©lè)F‚w¾ÏŽÚ˜B¾‡Ã€õáÍÚõ»>4pΡ¤Â…|_…ÐÅ}ÿÆô¾ï¹}û6§OŸþ’¿y¬aþ¨Q£FõçMù=üK÷þèœãàà€sçÎý‰¾Ær¹¤ižÒª IDATö÷÷ï” ´Ž$5jÔ¨Q£þçô™3Te9ÀÌ ÆŒ1¸µ3¯(r‰ŒXîK¦Ó)ÖX”ÔL'3¼‹EQ1›-ØÞÞfkkk“©($™Gç!â\eÏÀ¤ØÀÞ8ŒçQðœ/Ú4ͦ´*Ãué“¡šL6`% ß2‰M‘Rˆa-Š®Íù”Rhä`XJ çÞw\¿þ:]×°¿·Ëb±`kk›ÅbAYN0¦€”Á¥R!$ͪåõׯ³µµ…÷¢(HQÐÔ$‰”ï¾ÄÓéôNÞ¦Öô}ÏjµÊ?ë°e!æ2"ŸÝ«“Ék ´^•·ÔuCçê¼ÎBBÂ9s>¯§Oô­Ç»€j(!38ïs|ƒ‘Ø"_w¥ Rjóm¤TÖÙé£ÛÄ”e9€06.ÕÙl–]¿:»[óˆzv‡àÐ:ïËü}r‘s1z¤L…%ÅD×µ›ÌV=ŒÔ¯÷õt2a6›mîáÑ«zEYvw¶˜Í'œ>½‹z®]{¢´”¥â¿ÿþ)ÿê“­íóœ?w‰²œ"¤FhÅ|>#‘øå_þžáªªDJÉÁÁÓé”MÛ „àÔ©S”e¹qt;×Ã4•Zçwª¡(ÎÓuy¿gð?d±Š„¶S‚Á‡„m ´)Ah”.p.;‰sI›Ù¸ºµ¶ÔuËjµÊed«Á‡M¡˜Ôš·>üv®¾~ùbrYL'óÍý¹½½Ã½÷Þ;8ÅÕp-a>Ÿ‚G˜Ïf\»þ'ÇG̦S¬Í…\»»»ÌfÓͽºvâj­ˆ1Q× ÙÙ=ßÎy=ä,'´ÎV>t4Í 1ö$áp¾Ï1ë†Ûü[6@]þ kõP$æ"¢¹(Ïw„_ƒ„H(%ÐVç¼eÉðù cT.#$1:VG5jÔ¨Q£F5jÔ¨/éé\¡mÀ—àÔ™ ìì\â[¿õïñÈ#ï ï/¿²doÇò·þ£¯ãí_ñ\¿ñË&g‹J•ç¹sç™Ts~ý×㛾éyÓ=§YžÜD A]×´mKQäFû5$,Ë’££#Ú¶eVTt]GUæ¼Ì®Ë_2™p²Ê£ùI(Ú¶ŠÂÐÊîiÛŽ0@Â\ZS D†”''5M½Âê nrQ”2ÓAzR²„˜l¹)ƒV¤m[Ú¶a6Û®ëç­„ØQŽÐ<¤¸]—›†ï8ÀbIUÍ‘"Aœœ,qÎQ–ÎuøÐÓu ¯¾ú û§öqÎñꫯm@¥ÖlÆ 6Å^ é;Ç|hL7ºÀÚ‚ºnÑZ1N‘2Ãײ)Ì0F¯´6y´ÝgªµÁ[*‡ÌNV–à^E´2ôÎ `Mo´Hgð”a¨È®N#1ÊÒví¦e½œ¿%ñwÜ{)Ÿø“`¹ª1ÚæR®àèº:»]uµ›~cYÚóV×ÐÓ;‡žKŠTà½ÀM×·TUIJÃØuò()ÐÆprr‚1[cþzíjuÐ.WrDÄlR1ŸÏXvÇܸuÀõ›' ™N Î;MS;DÌçî{àO~á*?øƒÿ/>ùßþíówmóÔ“°¹/nݨùÍÇ£©¡9â«ý¯¾òïz×»X®®söìeY°XÌ ³}ï˜Nf›\\!$…-JNkð!_«~È?U:¯þìCÎõÌy²ç<1BQTc𮅔˩V«ZëáPA"„ݦتȑ¦Â÷‘óç/ñÄ?I³jQª@аq,{Y.—ÜDPrñž]´žrxxˆ U~LeU TÇ,•8×aíÞ[°¾ÎÙž£) J+?\Û œZÙ<î?¸4òVËŽh!t> ð-JƒˆšàJkl1!zGL )Sv¸&OJ w!†(“7‚V)óý&eb¹j6¯ÐJô)ëh¥½ eBnܰ£F5jÔ¨Q£F5jÔ¨ÿRÿÅöÁ QS˜9 KŠ©àégžææ­Û¹”)¶·>p$ÏîÞŒ²2(-ØßÛ§mçÏ]â _ø"çÎç™gžáÒ¥ó(hÛv3ÖÚ¶9ËtÝÖ¾ntWJ±¿³›`ÑÓ»üñù|Nï\-ׂ´~]†BѬZ2 !Y­jÚ¶A EH 1—D¥6.?¥Ä矨Ê)-}Ÿ#Ô­¸vЭaìJ%¡GI5Ä©Š!2`p{Š´74B½ôhe0ºD 5äѬ5cØÚ^ ´äÆÍë8çrQW„Õr5Œ{+R¼ãÔÚ"’ Äœ‡YUêºak±Íòä„ù|NJd@òJÐu=BI„”H¥saTˆ$Õdš3`“" 1‚D% Ö¤$èš2!ô}KST ~hŽIZÏ•Î08!`X¯úæEbH1¦;ãÒ"AŠ ²1söé€Ë²Býn…X­”Ö›c! ¢Ãû~€í¹`Èû@YN ‰<>ʺüãsLBÊЬ°7o_§îjв ¤ˆÔ–S§Ïst¸äÌ™Ó(W¯½JŒE9Á;Á/ÿòg¸òòã|ÅÛbk{’ËÀê!K>õÉÏš½S§˜ÍgÌý­OpÏ›NóUx/{;[ìî."!TUEYVÙu©Tv&û8'exl­A©\n%$y¬_Ù¼þClBÎ ÖÚk [ d†„J ú®J˜$1´Ñœœ¹³ÙeÚ»~(lË_¿ïÁª ?û³ÿ>úA¶óœçšbÎiužÕjIvyNxýê7nœðñÿ¯_=È÷Yô¥¤ª4½å~f³‚­Å„½Ý§NíÐ4Kú¶£,§CÌ„A*IŒŽ˜"“jŽ÷q³>k§rvŽæû_Š\îc`€î)åèU1ö‘Ôùï‹áà‚¡TOl ½\ïÉmâ&bÊNx=äL¿¤®×ëƒ!>ÊÈR©Ç(€Q£F5êO£1 €ÍÏÍcÀ¨Q£Fúó¦/·(­ÅnqúÌ.¯òï瑼€ƒƒ¶·wijÏ]wÝ…Ñ%—Ÿ{žO|âwùȇßÏl6£ïóÈíÁÁ“Édãºjšc ×®]#´=ç/œ§mkNê%»»»t]GE‘ÛÙI¥nȈœN§CSyEUM V«åPžSaŒ¡iV8×3),R)¤ÌÙ©º© T‘J®50F#{ÿ†ò"·ù!)k »Òú®§09o36eGëؼh­Bhª2g«¦$éûa$^éᇒ‚gÏžÁZ›Ÿ'­óŸËbJ]·€Èà¯éw¢Êyµ)ÅårIQä\ɪœ èIIÀà¬SJcÊì^Œ1Ò÷ë‚ÞàüÌN»ü\Ãסáv TóÈÿºëN”An½Ï9®BXzסµÊš"R‚R d†¥(æüæï¯œù`À‘HX›»së¬ÐìÐT‡G¸º¡¸t÷y®¾v“²2”¥ewïÎ#¢æ¡5¿ùØeDúoøáþAbê8}f—ÐKnݺIYÎ8nž~úiî»ïÞŸ°µµ…T’‹ïBëì žÍfƒ³Xá}V¹m½1”Î{7¡óãOZçÌXµy~)fhê} FR¥,Þ·t]ÞwÎå5[,¼ðâó¼òÊË<øà,³ g×É"çíºÎ3;u3§ÏñÂóW¸ÿþ7qpÔ’R@+Ñ%Îy{V«šW^¹ë×ÙÇŠ½ý]nߺ•³ŠÍ„££ÛœÚŸ3™æ 㺮)‹œ¯Û÷=](‹)MÓS4¤\¹!bÊ@]AY–Ęè] GsØBk—P2»ÜÅà–!`¬„˜ŸcŽ@ÜDc¤”HDL¡ÐI¾áu!a KQ”Hk‰}ŽH)Ñ4Íaa§®BÅ€s-IæüæeŽ5jÔ¨Q£F5jÔ¨Q_ÒÇ5—_¸AÓÎùùÿû×øß|’ïÿ¿Ž);^~í Œ.éëc¾îƒïá‘wßÏÇ>öQ~÷w?ÉÅ».pï÷AJ¤¤8Yðž÷¾“ŸþéŸæÑ¯}?¿÷{Ÿä©g¯ðî¯üJNê[°Ð—¦P’àmï¹üü«¼V^c÷ô)\LÙ‘)$‡ÇKʲÈPEŒ1 ¼ïsáTxé}ñ„UU.ˆêºÚ¢#‡ #en‡O ©Bj”^·žç²ïs@U(eè;‡sž¶í‡LQKJ)=ÞçÒžÂNð>mÜžJ*’H(­06T{ç@H´.ðIt]vÕJ Ú*„L8ßrë åääˆùbÆéýó¼ví&m½b6Òô€ˆ["‡B¯ÎÕ eQ°nìšL¦aŒb¹ªi›<Þ9lQnN¨ƒXŸTçü²¬r™QÓlƦ3œÌ§å!E‚”<Îg‡µ†#‘ˆ– [VXkð>â}"F »Û¬µÔ«(‡¬Ýû¹ÏñòK/ñÕ_ýÐB0U¸vIHž”,}Wã}¡±†!×#å6ç=¾vLB\ØaˆÐÄq¾Aé ï8>irœµX5Ã'OÝÔÔMϧÿðq~û[˜Ì'¥a¹<Áj@$‚ˆ¸@†¹þ„».^àég>Ï7þ¯§¿Þb‹|)4¾í¹ví:³jŽÝÙFÛˆó`LÉÖÖÓIÉ™3ÛDq‚’ÉÄb CÛ9ªb†TŠÃÃã|È!51ôÄäP² oO2€œï‰1löeJ … & ÙáªÕ‚Öw›hŒDŽ}Pƒ ZFA !$¶˜BŽË@DCÆà2É Uü‘è £BAðu½Â;O¶ƒ”zˆËhi±G$‰z|×5jÔ¨Q£F5jÔ¨Q£¾\Àª©oº÷~~ñ_þ6ŸýÜÓüýÿê;yó{øþˆÉ4PUEÓ,éâu¾îCïûžöS?ÃßýÁÿï[lÑd ˆ–w?ò^xþ2÷=ô¿òØÇ¹ëâ½VŒ†óÅQH´ Øxû;ßK×!eRVLæ BˆLg[9cqÕ1›Í†,OÁd2gÙÔ)@„ì`ìI)RÙc$1xH dÂZ5€ÔõØ»Á¹\HcŒÁù¥ó !{”48ç(¶¶v¨ë†¢(snëñ1>:¦ÓŠÉÔà|b:¹tÀH"Í#!åìF! ¶´y¼88¤m2¼L"¢,ÔË©ù'ÿÓÿ Æqóú¯Ò´‡üø»t'JW|ô·?Æé½KLª’矖G¿æ¬ŽIÉQM b …@5™!¤ÄZEÛæ§¢0¬[î­-Æè¡ÈÉÑ÷)$GŠ×{”VL&Š"õjEð‚Þ¼ª°“‚ÙtÆ /¿ˆÖ†³ç΂\»v•²ÐL§n”a¾ØãðöU¹àü]Û¼òÊ‹:ŠJ“b@iV–VJÎÚg>­Xv;YpêÔ6ÕäŽWœÚÛek» ª$oyëýܾuƒ˜j¶¶öÑÊ¢¡í\Ÿ˜M+¬„}H]‡K=¶* Á ­ ”ÐøÞ£uv´'çPÊ“Dë )9„Ð(­A”VÈ B¢G)‹²úUƒ÷ŽZ l¡ú®ƒ$(Ë‚!Iô52yD„ÐAÌ{jRUH±>ÇPRH´”ÙIÍVG5jÔ¨Q£F5jÔ¨/°Z¨ÈÙ {|êãñ¡¾î½Èöv"¸EÏÄB©=Mt¤XppØòî÷~€ÿñŸü>=öøÀ{X5'œ;wŠƒ›·xðÞ{¹òüΜ>Ë}÷ÝÏo<öé¾A šÎ蛡‘\JÚ®G(Ãîî6Jä±Ýé4ÿw­ªª6cÞ lú¾Ç3ŒÝçr¨8d¶ö}‡ô’ªšàú.-¡`u/Š‚²,QJѶí&‹3„¸÷/ç§” ­ÌÐ&/999a6›RM*œÏÆ9†è<¶\×]^Ø¡¸&G1´Ñú¾£°Ùñ–ÇÓóH¶±–ÞKR”¹\'|ÈD“É4—K9·Éù >4YksÕP”cÄ»DŠùÿ˲¢, ÈÎßD5™à\ÏñªA«HYjR„”r$‚6ÃÞ˜P²D7ОìÊË9µw2Ÿrû»Ü<ƾ÷(%9Bu€­ÙÕcÎÕLIn2sÙÝäÞ )I1ˆÖèQ^ ì"kû>;.ñH• ©ŒÑÙ9œ€ P:<ø.» •€ˆ1g¹®×‘0Fãû.»Pc¼y„H8× ¥O‚¢(7ŽÞDBÃd2áÆ­›ìíî±µ½EH’gžy¥JV«U†rZ°wz—3Û÷rýÆ+ÄèR3Ÿïðá˜k¯ãü1ÿÇOÿo|ô7çã¿s™Å–f¾¨¸téO|þ5ž|òó%Úº' ®Y!)¤Í5šLª „s. „d¹\²³³Ã­[·ÐJsï½÷“䵫7ØÞÞfR-Ò²¿¿ÏÕ«78<ê9Z“C*Aß×ô]AU–<òÈC¬ê[ܺuÀ™ÓgyäËñ²æÒÅ ù‰ÏPZˆQ0ÎX,ÔuÃb1¡oŽY5Kº Y®/]¹BÓhfw<òÞ÷ dVšØ'¸ïAöv÷ðΑbd6›ÑÖõP,ær.iì‘:Ã|[úCùZða“+›ÁÀG‡îÙ|e¨žìúÀl¢4ÖåhÁçœÚ²ÌN×]ׂN°òëZv„;bèi}Š­ó=Þ»†¢˜äR°äH1!% %BD¢÷#cÅĨQ£þ씾Ä__ŒKÏŸy‰ïþÎïá7~ýWxËCqÒ6(!ÐZ 4]óžÓgö©ëš¢ÈÙžkqrrBY–›2¢#]×eç\ˆL&“Ê |ßÓuçJEš¦#ø~p” „HL§SRJ´m‹snãô\7r¯±Æ¬V5~¹b:™!¥¢®ÛÊEœëqΑÒÐ)”ª6íÞ¹}\oJ“¤LXcœylÞèb€•v¼+”’“›Ãót]?äDŠÁý™6 R+“ì“@k¹i·ï»ï«UÍ­[7Ùßßg2™Ðw)4ÖX´4ô.à#)­E)M×µˆ$‘H´ÔÈ¢ÌÀNæB.™ÃïSŽ`kõdç¼e÷Þt:ÖÑm€³1š¾ïP*(¥5"&qh–S’¢#t¾sHÝb¬Eòàú\H¤¥A$98I=Þwh  ×A ´60dböý*;©“ÀZƒÑ!óçºè ÁÑõ )$Æf7oÝ´¤±Ö¢µâèøçr>gÓt$¡¸|ùrvGw§OŸfµZ1™T®xùµ+T“kIÜæmo€»/¾™/|þiÎßç}ïyO?ñ:O?ý2“Iŵë¯óð[ïew§ä«¾æ«¸öòóô}Þ‹"EBŒCUÎöΣMvN+¥÷´Ínj!èû>;¶Ë s‰UÆvëý[Ùåº>äP*ÐvK¦‹)Ëå!g/^`Ÿg¿ðï{äk¨Z^{í5~õýY^zée~äGŒ~ìãüüÏýO~þ)ê¦ã¯ýráü]t]—3wzêô>˃DÛÊ¢"Š’ÃÆ½½ “IÅ|1åå_äâ… RÅ›îyÓé ×÷(¥©J‹ïZ|è !B«)悲Š9‚ì`NQáz‡R À?· ²»Ü÷c'ÃA@zC!ZºÓž+Äæc)%¤‚® Ää7÷mŒz(@B$‚÷L&šÆ³\žP–vˆ‰¤äIbpm«4Da Y! ˆã»Ö¨Q£þŒ˜j„ÐC‡Ç“þ 5¿zå_aøõoû|BÊt±ÉŽ5jÔ¨Q£F5ê/$X­ª÷"¶¬˜.ö¸zí˜`1¯˜L· ]`U¯(&[¼ðÂuþé?ûç|ìcŸGk¸ûî)w]¼HÛÜdk1Ç*)-®ëyëÃoá3ði¾ã?þ6ž¿ü,?÷óÿ‚|äƒlmÍiÚaÈ©Œ¡‡è(ËjŸwÌf º®ckkg3ªk­ kÏl¶@ICa«uøH1QU —̤1¦ ‘[ä#”e‰1%ZÛî…7ÀH÷étN×eè·þB¿i–ïûž˜"1JV«;;;…ÅûµKÐ`L1€à>7£+EL9 riÛå¯)„Àõnóý³;R£¢kyÊp} µ>YcÌàïr€@¹ '7ÄgP&™L·nÝ»ÈÞ… Ü|õUŒÖCœBÀÇ@LDBÊšvEŒ²š HtmŸKž„Ú4¡+•×MH‘„1amIa-!ù!+5 6>­V+¬µÈƒëSoàùài•ATL•BälP!$.Ô¬–'h¥ÑZau.¬ÊNÒ| ¤¤(P2¡¤"ˆˆwïÖeN9×Õù’äøøˆÕªæÔ©}&Ó"ç‘ ‘Ý‚ÑçÂ'¥©ëåàö›1úÙÌðúÕ«9â¡,xåÕ×ÙÛ?Ã<ÀS_|–›7ŽÒòâ‹/2›/èú†³Ùïk´‘àæÍ—9½·Ëñá-Ž–¼pù2·nÝàžíûyê‹ÏrêÔ‚IµOpŽ7½éM¸¾¦šTÄÎS‡ŽÕj…1R“¡tt›qò;kž†(†2® Yóµ›r¥ìÒŒ›×÷8Q¦DJ‹±¿\ñžw½‹ü~œÿö‡”ùlNt‚÷¿ÿQþÁý¿ø/Ÿø‰Ÿb:Ýæ#ßøµ|÷÷|'—î½ÀÑÁ+¸fÅ|>GIU.HѳlVUam‰o¯½š8{¦Ó ?þiÞöð%Þýžw2©Ëããœ)[Mh›šço߯jEUÃ$ˆHÙi+£DVfãD5jÔ¨?Ç/ã–W¸-𸽒P(l1gZ–qŒÇ G«T ÍNÚ¢œ\BlÝ ¦×zÔ¨Q£F5jÔ_\°z¸LÜýæ¯àæÁÏò™?|¯ýÈ©›c¶v*^¹ò/<ÿo¾ûö§øì¯ý:w]x3ßü7÷ÙÞ)ùȇÞCUÍHq‰•‰¶é°Fᛞî¿Ï|îI>ñ‰OðÈ#ïçû¾ïïs÷=8ÿÁ¯AiÉÑñ!ÓÊRØM½Â¹Hß{¬µX[ cû~•Š(Ì™§ÆX꺹ãüDP”ˆÙ(’ ©<â‹ThŸž}ï6޳M&bˆœœ,麎Åb FJEQè2åñ着8Y.I$>ýéÏPØ‚GÞÿ>B¹M^åqý! Aßõ„ÐZR1ä›rQ”÷h-q.!ȱﲻӻ% Ì`¥ÈîU­¦¬†ç’ÐR°Zž°µØ¢ëÚáqËa-}ï8}úJIn]»Æ«¯¼ÌÅ‹—(lÎ=UZã\=€Ñ‚¦]B"ÅHUIb‚¾«‡ëL•3bý0Ríú~påeÀtxtcÖ–H½Ž^Pä| 1J)¼w¨'¥D*Ò­-'‡Ge1%ò8¾Ñ!):º¶Š¥$Î;¼ó$c RŒev2k…Ñ×û  !Ò¶-)%&Ó‚él‚µ†¶m²ãuÆÌŽfEUU·mÅî.‡·˜Í¶ðÎQVuÓ°X,ðÁ³¿¿O]Žã“cb’\½z•‹ÆÒ´ E1%¸–_<;»s «Q¶dµ <ôÀ½¼íá‡øø§>Ï'>ñ8úº·²XLxûW¼é¤BëH×Eš¦A%AQX[€XkåœUcÌó›]¼Zç{HkCˆk%MѺÀMÛ¶H)è}Àûnc}ˆ¤ ˜”{x¯Ñ²¢ïJ þößþ^{õ*U9ckï4gÏ\ ö<ð–süäOýçÏ߃V%>z®¿v™ƒ£kÌæÆ,rÌF8ç™Íç$J´q|tÃÃÈýΙϦ\¿vûª4ìïná}›!ªTU‰ 嘉°¥†$r¶¬µ$uÛ¢µ¥ë:º6_CA‡÷i €KïX­VH9¡i[¼s›½àC ,ËMÌȸHªªÚä5 )HA|dµjp½g±ØÊ±õ1†ÜÛ|X£wq×6hS ¤¤ëŒ±ˆÖÓ4u~}ß·Fõïªè ÍU\8Á%OTŠ©GU§Ñ¬#>剦@5€Ó’’ OøãÁjÕh|sL'žÆ•ߣD…Us¨vɧ£þ¢Éã©SÍk'¯qõäu„ŽìTÛÜ?}˜Jýÿì>zž?zžW—¯’ˆlWÛܽss5g|5jÔ¨Q£F}ÙU¡œ»kÓçßÄ?ú‰Ÿáµ[K„Œ\yõE>÷ø§yô«ßÇÛÞù~>ñûŸæòsOs󿓲ä+ßõuÜûæ9:¼A ‰ù|º)ƒ*ç3’(xøáxöÙgyäýïåk¾æ|ì·‡‡zˆù"ç‡Zcp®ƒ”ç¦\¡¹ÈHë 6³ 4 ”ÆÚµ#3n2$½÷ôm‡‰Y5!Ĉ1yt·iVÇ+<°¿¿sŽããcf³Ùú ֛⪣£#¤È¹«½ë‰)Ãc «zÅjµ¤ª*ÙÑ|âàðÛÛ;üì½y°¥é}×÷y¶w;ëÝ»{¦g¦§G3Ó#{¬É–¬¶"Ûñ›’Á„EŽ„„P„¤‰ƒ“T€ŠP©¡b’¢B&12¦lƒƒíAƲ%Yk4›fëé½ûîgy×gÉÏ{ÏÈÁ6r,Ù:ß®®;Ý}çÜó.çœ÷ý<ßß÷›$!HšÎâz7ªˆù–]_0dtÖGD(cŒA+ˆ~^ÒuYš3ÈÓ^Ú8fîã~h›)6”2 ‡EÅÊ Œщ7N¨ê’²Z¢H™ÍÞ.²mt¼61Ž¡È‡„§³}Œ1Œ†#ŒI¨ë€žU5'Ï£ƒñ,‹TÈ‹K”bu¼0NWãåqô¾wí¹)q=\Ž…@y‘c­¥ªª= ⿦ÏKuлþD#èlt­QR`ƒ§®¬µ«³²\"„&IÌ žŠ³1l!Vàý‹ÇÀÏÎñ<ÏY,„®EIIU•ƒ£ÑˆÅrɹsç¨êŽ·®ßb±Xpnﯽq•étJÕƒï®íȲkkê2£·¸wó.KÛ,¸sç:?þ[çÎó÷¿‡ãã›t]ƒu‰ŽŽHçR¨>‡W³\Î1YŠr•ÚuF§«‚°¶µÑÝ/L¬n¡{ÇóÙèæYéZ]×´mǨØÄ;ÉrÑ¡U̽ 8ŽŽîòàC¢S;Êò€eU’Ží½‚²: 1÷îí3fC’ö÷pVAH99Ù§iïqùò“Ì—‚ëoÝÅhOšælmOyüÑ÷1f¼òÊ ŒŸ~'»»[ ËEÍ ÈÙØØ ®k’$©•óS–ËQ:¼÷à ]×öÝøš 'TUC’¼]쥔$ËRò<åøèç›››(¥8>:b:þ ûL*6„{b;OYV„ÃÁc i–ä hÛ9ó²Ä{Gž§¤*AJAU5 I‘c‚îÿ®êÝïë‘ÚµÖZë_‰¤öñ"}Y¡«°Ë7©›}ÊÐÒáHtŽžgP\dÌøõ`g,(<û„M=„ýuòY­Cû9U{›Åò*X’ƒdL¢wñÊ LßÏ„ZGüR*n67ù¥{Ÿäsw>‹L-—·fËì±›îa¤ù—>† –“ö˜Oßû4ŸºýIl°<¸ùL?ÈCƒ‡Ø’[¿&Ð_k­µÖZk­µÖú’Õã“A øÈü^þ“ÿô¯òçþ«¿ ž~j‡û»¿‡7ßüé/ÿn\¿ÇsŸZPä- ?ýO^âßýþçùÈþ.„œž,QiŠïuWbmËåKòÙÏ~šª*ùð÷~˜ÿò‡~ˆ«×®óôSOâ½%M3šº¢ÈX9IÏ€©Rr•!ùÅESÞBˆnÆ8ÞÜÒÖ-Î:ê&Â3² %5J*ŠÁ€Î{‹JE×áYÖp8\A»$MV>sŸâÎYš¦BkMQd CÞõ®waLBžeTYÆp8ÀÙè†}»¸Bµ5Ëå !ÀC–¦=¼ „ b!–Š7B™1ÖÉ$ƒÅù¶/ïrá£CT®Ï)í0I,Yª›’4‰PÚy‹©ÀùŽÅbÎlvÌææ6ƒANÓVXÛà½`¹l1iMv®ÆOYyò¼À¹ï;”LiÛø<Ò\³,OélEt„ÂZá=&híû8¿‚çÎu_äô bãy’i|p–zGð°²èuÖˆÇE @Å›:¥ô ì®w:Ÿea†ƒRŒîœIï|6œžž2™L Î:ò\#DF-JÒ4ChÛ˜Û¶y>@JCÛ:†ÃeÕpîÜ9îÝ»Ç|1G(MY·œžž²¹¹Ép¸ÁíŸÿ>z… $[[[ÜZ. Fìì4Ë%;{SÊÅ]Óñ&G‡Ç<úȃÌÞ÷Þ¯åÕW_ÂÚ%ãq‚T¬ /Þƒˆ¥L@Û5-zÀÞ‘$&I¨ËšáPÓ¶mÌ “ȾäKá},C}vh×µR÷%iiš¢MŠwšLç(¨ªSªÅœK^äÎ;H­AJvvÏóâKÏñèã—±®!Í šºfsk‚J$iišQU5Ák‚S4c8š2N™—–—_y‹ñ’$åÖÍ·ØÛ¹DÛÍØÙ°··…À÷Pٯ⠲4G) TÊh²…µ-O‘b62¬2ÏFëϜ߿zðÎ1躎¦ªHŒa2ÒÖu¿páWeVÊÄ×]@ ±ÖS•5uÝ2ŽO&¢[Ýù%Á«þ$«%¤(ÝôQ ñ¼¶Ö1NQ2Ye段ÖZkýÆZÒuÌç7q®E (4¤É.’ dŒ-Ê7Ao )þ•Yö¿])`œ¡­f¤4(zé誚ùñ¯¨ŒBN‘£û ­×ïÝ]Üå“w>Égnÿ2·æ7dм’½SÁ¹üJ¨ßð1®WWùÌñ§øìñ§¸¶¸†óŽÒÅâJζ¶¶Öhk­µÖZk­µÖ—XŽ2ªÅO<þ0ñÏÿ‡üÂ'>Ïýßáî#þÆÿï~Ïyþøÿ~n\»Ê×=õúà7²»}?ëoþ(÷oÿ<Õ¢äýñ玲[ò<–YíÞes|Ž43¼ã—ùÂ^æëÞÿõ<~å)þïŸy–§Ÿ~Šºîƒ±´I£MNÕ´h¥Éòœà=mcc–diF’¤_ǬLk‘B´@)C–çˆy–Òu-¶ë¨ª!IšazˆR× m[S³Ùœºn˜N&pr|Š!JEª¢i*꺢m›XlӾDZöS†Ã!!Äq_c2ÆB,J| íjÚ®EkÙ»]ã¸5Œ‰ 1æ‚J„Ð83=ÛÎáB(ŠAŽÖ Ëù J”´})AhƒíkЉÆp¾‹€“;ۦؘ۩µè£b–­¡o²—H‘ D œ/QJ“¦)M×ÅÑk)=R)R“Åkl/A’'9Ú˜èˆõ£Pm"hµÖÒ4 ñºÎõC¥"|õÎA(¥1:Ù­Öc²­;ºÎ‘gJó¡$ÖZ®_¿NÊrÉ›wQÊ0xååW¸øÀEÚ¶e²±I×z‹%Ež| maksƒ¦)äSn\•ñxÂöö„ë×ßD}:ãÆµ×xê©'Èò”ÃÃ#¶&Ã8òï=ZôåaL¢QZa»˜É™ç92Ëv†sq{Ó$‹kZ„´ýßw+ÈšCÛ68ב¦)ƒÁ wJ·$‰¢s e¹ˆÎS=àøè„'Ë#|­›†££ª¹d9_"µ¤ é~GžçÌšˆÏ;‡P%G‡s¦“yåå·\¹òWßüY®AtùªžS—Kv·÷È’ç X‡Ô ]çX,–øHÓ£ >t}VsJUÕhmØÜR•%Z'½Þà¼íóƒ%>š:F!¤i`êzåŒ=ˤmš†EY’¤ŠŒšE;ç—o~šséOl¾“Bë¾ÖZk­µÖZk}ÙHQqþ\A‘4üžïúÝ|÷wûÎî?—ðC?øýüàŸý“\87à>ð$ìþ.=xžA‘ògþìŸâû~ß×ó÷?ú^üük\¼ø0eÝ ´F'HÚ¦ââÅs¼öú«TeÉ?ôµ|òSoò‹ŸüRª>ƒb>[bŒé]cte±XP×5]ÛQ×±˜ç¬¹Ýè)UÓ–z5ÝTmÎγÇ].–x‡ ‡#@0>pxxDÛ¶H!ûÑük£Ã5¶£G袵&Ë2BˆðÏ96šº©©ë“Œ1”eÅéé )åj„ÿÌ („ ,KªªÂÊ…kmGÝTÔMEgk¤òi¢0¬­iš%Þ7#ú&q‰V‚¥ëJêz‰p8×bm‹µÖ68ß’e†ñxŒ6çbyXn ŠlÄp0%19…V Z%lLwÐ2Å;ÈÓE1 ËŒ‘€EªXt¥T „ï[¤ $©BÉ3èûv%Ú¶îs%}?^Þ¢¤b8"U›BD§^ ¶Ü§ý¨~ÛF j;·r»z‹±@à]ÌÚB¡•Æhƒ@|/XÎ+ö©«A<ÿŠ¢èã$ÎF¸Uà{ó/›¦¥m]̸4 ¶s“Ðu–ù|Ž2~‚4‹Á‡G‡«8‹ë×opé¡K,—K”Žßb0"I2ƒ ˜LFH°¶æsÏ–×_‰¯ýÚ§ø/~ð?Ç{ÇÞÞ.·nßà¹çžÃZÛg¨¾] •‡XâvµÖTUÉüð©Tï¸mÑ?÷¶s«¬a+÷gÒ;Ÿ#×XÛl ¢"ˆxDè89¹ÇÑñ>›Ó1yš1LhÛÀñIÉ}çgsûQðCÎ?ü5üÜÏ|‚¿ú?üOäƒ1óÅ‚Ù씓Ù!ÖÕìîn£uÆdc›®q¼üÒ ´Î˜N¦<øÐEFãŒÍEnÂ÷ žªZ"ðEAÝ´ýë –‹šå¢Áè”a±Áb±¤,—t]·‚ÇÞÎWí§Z³=d>ƒüBÌŽÎÒèUJõ€ØÅŽ~4VI…ÖšápÈÎÎÃáïC_F,ªS :ÉBÑÔ–ºîðÊE%Mú&Ë(¶ 8ÖŸZk­µÖÿ‹HùX¨çÊò-NN>ÇÉÉhÛŠáðQ¦Ów1&¹ˆ”‘#¥Fêÿ)B*„ÔH¡:C 'èÍûMßI>}FC–ö&ËÓÏc¿Ë»×Âo3°Ö—ßéGÀ:Ëéì”›Ç7¸¾¸Îî`—o~ð[øºsï¥0~éÎ/òòÑKÔ®ùuÇb9âˆ7çoñúá[läÛ|ÓÃßÄw<ò|õö“Ü©os­¾ÆQ8¢¡!¬Ï‘µÖZk­µÖZëËDZ†Šfq€ëGûð÷ÿÞßd:Ìø÷ÿƒ?ÈSOž9³Ù]„×+q]Šm*òdÂù?ÆÿÃOðñ?Ç×Ã{È‹kÙÜÚ œ-ÙÞÚAÍþþ³\½z•û/\äÁ¶ø¥_ü%¾éƒäê믲5ám ®¬³}ŽeÌ%̲,¶“w–å2)E1"Ðõ7q„W qÁѵ-H”V´m‡pëóùœ¢(¢›3Dx4 9==åðèñhÌææ&Þ ‹ÞÇB © \Ö±e>D@¢’„º©IŒBÈŒ‰.Á¶©‘R÷£¼±DJkµŠ8Ëy<ˇµÎ¢M¼¹9+qR*‚¯¦­!8œëM ޤ“ ´ `c[¸T¤‰¦ª—$&AiTç=MÛ‘$ MAk×IÚ¶‰`UónÓ!u½¤m-Y–QÕ ÕrIšFW¦†Ét£wâ.B2)ËÖYÚÎbç%yÖ‘eCž²j2€•¢µ!„.^ ‹³<Ù³œP‹Ç»˜ Gˆ­ô™Îb›V$ÞŸ q÷`0º%MÛÒu“hÒ4– ,&IH{ÀUUU_†¦Bat‚6 ï=MïÒTÊ`mGÛÚUAQ±?b0QW³ùŒ .ðÖµ·°!PÕ£ñˆ“Ó>ô]×âœ'øÀp<æpßRU5I–‘fÒåÅ“{Ç<ñÄc”‹’Ѱ`4´<óþ÷ñ“?ùQ¾ú«ãÕW^æää„ÍÉ£ˆ@/Äck-RÉä Ó\ i[ÚÆ“˜4Âk)q]üùÚD¸]©’¦ih;KÓ´hËÈÚ6Æ$ †¯¼úóÓ.?ô .MBrù±Ç(Sðü‹_àWžïûý?ÀìÔòìÿF'\»þ&.Ôln처-q6æì&&a:"D  7ùèG‚»÷NyúéGyùå—yüÊ.‡û\~hƒÁ0g:™0 '}þm<榩QRÐXO’¤t­G* 2áðø„®­¨›ãñ„.™Œ71&‰‘#"–É ã"„!‚Xz§¤ äE¨ª Á KÐéÅ ëGý-Öœ‹ Ƥ(­ ïwÞCç“$˜4!ß¿ÇÅq­uÌl.+”NãBXßH®µÖZ_$ï ™a}IãKÚö¸ÿOrƒÁàR~”ý IIBΨñáˆ`KB{Jsl'h+‹I'3R~ÓÝ´ký¦«£c–TûÖ‡¸à¸0¼À{öÞͽfŸ¹›ó ·Û‹ÛÜ­î’é #Í¿“ZÙŠWæ¯põäMm¹¿x€÷콇©˜b»- §Ý)wêÛ$yÂHŽHIûüßµÖZk­µÖZk­/!X=]8„¬8<: È}šê€ïùî÷óž§åäô6“ à˜Äs<›‘$[4Õ’Æ×4¶cc3çùç_@xƒ"¥m-­õdég-YfÂrûÆUv·¶ùîïü~ø‡ÿ>¯½öi’0«d¹ähvA„KRýȬ¦ë:ŠAAÓ4}1MÁd2a!4UyºræyЩ‰£òmCÄJàƒC«xá5?=!Ç`0@*6šÍénR×5åò£3&£‚ªئ¥à5™Î(«ŠÌäh©F±±1âd¾T¶[²\D¨šçC5YV*E]òl‚m,mÛ±,`ŒÆ»ÐgDXgq®£m¼’ˆB*LšáƒÃzG¢b‘“¦˜$#&Ìfeï‚kñ´6Ø Ñ*¥ªJ¤L° „Ø@‡™ÑV%˺ŠnE£¨;Kð­:´×$™ÆduÓ€LȲmLb¨š9Å 'Ë ªº!ÑiOW‚®kñÁ²hci˜ÑQi”Á;Ap ABU• ‡’ሦª¨*‹1)BkÚºFJO–æxe©[!“„ÆvxE–Ò9‹Pš$I‘lðѹë“É¥wïÝFJ´mEšhÚÒènœ’dɪÔÈ:‹ ‚²^²\,Ù=¿‹³ë;æ³R‚1’ãù1ÃÉ^|‰G»LÛ•L¦#zøA>ó™çùº÷½›W_½Ê}ç÷xög~‰ó÷ÝÏæÆ¸Ëx²EW Úºa<Üåâý;<ûì/ó©ç^æÚÛ(•G0ú~Œ¬ñíßó=¼òÖ«ü7ùæßü¦wògÞÇ7}èië÷nß#ÉuÝrnï>|TMC1Ü™ò£ÿ࣠F’.m2›ßãèPðàÅMp)Z qN±±ym\Xâ«%B:”l e vö69>žá%H­8¸s—sç6b™Ûd‚ãÑ&Ú¤,æ(ÝæàÐ&Åú#%ºÀ(ƒ³%$iš U ñ Aud*ÁÈ4Í)ë†\(lÓ2£³¸?ïÛ²ÄHõ-Õ²$É y‘!¤Ây"f߯|b‡ CÊcÌúSk­µÖ Ýqüuw‡¹¬ÉG3™¼!’¾ÀðËõ=#AŠÆ£M–ˆpBUÝb6ûÅ`—ñè[ ²XpµÖ—Ù¹ù‚,Yr{\ oPëšûóûÙ1»™p±¸È»7Ÿæ…ç±ÁòÜágIUÊ…üJFÃÁ™Ùá¤:ág_ûYnßæ¡ì!.%—¸HÈtÎ¥Á%d'yëð*zÛp>;ϦÜD¹r¯žå¦¯µÖZk­µÖZký–‚Õl0áäôímFã1§ó’““S¼÷ÌçsÊÊ1êÎ2lr°_1]äÎí}þ·ÿõoñÙ—*¾íC;qÜ:HFù©uYrppÀù‹çyçóæë¯ñ®'ßÃ;.?Æîv§>õïûú'I“¸J-}tvi#P ¬m)ËeËw­5“ɤˆà/I¢ ãl”·i☹r ¤ÀƒVЦ)‰ýXŠÖÖä:Ãû@]-IÒ­M³dP}æilŸïÚŽÄÄÂ)£R´ê³Éz÷jš¥˪Ɠk=Ö– ÚYÓY%$&§í*¤„¢(b!•ÏÇÚŽ¦iÈ2Ÿ³ÑŒF–óyüùýȱsq ¾,ë¾l(øXkYJ³)cIT! yža­%IrÒ4%ðÞ¡µa¹ˆ¥\ÒhòᘼÏC5ÆÐuݪ¤Çc±BÚ6 UÒmçWÍðÞ‡è(q<ß»’®¹·ñbZ"E_äåù úŽú¤Z•Oµm»Ún)AxœHZ§© .`­'/†è®£ª*N³>_WGè©LñnÑZ %X×öå`13U)]ÂM‹½û3„•§BÁáá£ñ˜º®™ÏçH-IB8ZÛÒ¶G‡œ»ïÉ|¾`Yµ”Õ’ÇŸx”kׯ±\Ìø•ç^dckDk-&/PF2mà;A’Äqzë$³²a4³ð+<ýÔ“\¹r…<×ÔuC–jq Tó;…²˜/pF»{œÞÞÇv© F@ Æ]H)Z‘¦R ¬õ8Kt]·)B¤8Û@Ðh-‘x„HP:áÑGŸä™ßu‘W¿ð?ýO~Ž¿ðßý/lïl0Žùº÷&|îùçyáåù–oŒ?ý§ÿ{[ÛT‹9`ÙÜšö‘‚,Ë(ëš|0FéÏ}îE¾ð…ëlíLÑÆÑuKNÉ.߇VÃá„DetÖƒìÏ!Ùô®ew–e}LžOO6è¼@Õ+O2Ž—]od &›Ü¹~cR’$a"fvk IDATYÎð¾CêÙp“exÀ[Og-ÁÇÈd,µ³¡)ðα88Š$Î’¦Yj(ŠœeËàlç*ÆÔ6ºÌµ1(3»¶¯3Á"H©0ZTÀ‡ŽªéÈ“õ×Zk}¥ËûŽººI·¼Á )1:gPì‘äÐzÒOó|9+V`)eM“irŸãÜŒÙñ« 8F§{oZ/*}¹èlê äxé©\Éó7˜ÌØžï°Óî œÀ9GbSž\æÅ<{óY¦aJ:IHdº¢.8î.îòâÁ ¤¤<µñ4¸@³l™@Kš£òˆ×ö_g[ì²;Ý%享iÚ†,ËHÓt}€ÖZk­µÖZk­ßz°ê}ƒI$I’Pä#žyÿûù‘¿óϹÿ¾wðÌ3 i—Ù#¼ãá~áãŸáÇ?ú<û³/óÐ.|ó7!Z¤tt΂ø>S4øÀ•+Wxãõ«Tõ’‹<ÂûÞûõ¼ôÒ«|Ë·~#BÖÔ­c4Œ­°JÇñì45=|Œ.<­cyQÛv_”}j0F3 (Š‚$IW£ôÞÑÃÇŽ¦®¨ë’$IȲ ,BÄ|Ê@X5G°VÇ!ûlIG’¤xïIR…”ñbᨫ“+–e…s–4Íú–{‹1‚eY"¥Š…?¶f±8EP*Ò‘˜åcƒ!!ؾ4´V¾†õ¬uXÛ¡µ¦,«~ûSBx{T]ë){ÙQ ‡¶Þû>Ÿ3‚K@JIb†¤1†º®WˆðÖuý÷E‡1º6èVYŸmÛ® °1ºt!F!Ðõ \¬ÆëŽqÖZ”1xÛÔ‹¢ Ë2NOOÑÊgi?3DCˆûNkèÇÀœ‹y®ñÂ:‚X“ô€™˜êœg8‘$šÎ6h­H¬mcq“ŽÙ¤§uEpá=I_8}_°¹¹IÓZòáˆÏ}îy._~Žæ,Ò–ÍîÝ=bcs““ãçyß3â—?û"§'§ˆþAcïTbxæïç‡øgÿÞ1¯½þ&¿÷{m»Ä{OÛ¶x "tïüÐZqZWXïQiÆdcƒår HlëVóB”Ž‹mSg¯÷ç-­Ñ´–¢û[È@Q¤,ËõrÆùó;üÀü!ºü·n¼Á;×ÙÝÝ⥗_`<ðýù™6îßeT,g3Îïì`c4â´uƒ%3þÙ³ÿœƒ{ððÃ#¤Ð<òÈ#\¼o‡Í y–°µ5Eá)›x~*¡Q2xÒÃJïM-8ÕäÅ€4-.§YÌ*U†òtN cc:FkÉ|I³¡Ùßßg<šô9ΊÌ”ŠC‡ÖuXëè‚G)’‚ÄHÌ0GÉxÞßÛßïÿM!‚CàÑ2žK¤’Xˆ&•D IÝ–H!B¼$ˆ³×†Ã脘?íןZk­õ­@Ž®;¡ª¯ÓV×ÈÅIqdòBÿv,õÑ1"IÆ(µÃlöyÊùkdv‰x„J!¯«_F`u¹\B Ë3Ð6-o¿A}ÚðXó;n|¼VRVñÈÆ;x}ñ¿rï9®˜+œ ç› Rį…smq•[åMž Oo<ÅžÚ£­cÏ–šD'ÜZܤë:Þ•>…Ì$¤Ðv-UU­îÖZk­µÖZë+æª0„žE#šÖ:òõÇoýÕlÕÌH³”¶©˜Ï—ü[ßú]¼úò>å¿ÿ;üäÏrå‰ÇxàûPZ3›×\{ë&ÿä‚›7;6§ðUO>ć?ü­4Ý1EnX.«èÎÌsœuŸœ2ä¤iÂÍ›79·÷ O>ùU\»ñÃÁÙ¢¢È‡dYF×z‚ó8A¦Ö±5¾ë:¬ëúRÈócTïÔl©ª~$ú¬€³óIHCšÄ†ycbÁTÓZʲìœa匴¶c¾˜‘çyt‘–yžSU ¼«â%ïJÅñ%k£{R+Kd,Ajš©$E‘÷?WP R´VXB’eYŸ+ú«··Ã˜58kcKù• E°G=2[=÷<ÏišØl~V´Õ4 £Ñ­õ¯*ÒŠE]fUÈÓ¶í¯r¨Zkc©—”≠f±,O¦lmmqíæM”Ò“RU÷ðÞóÙÏ>G‘¹uý.—~˜Ãƒƒ>õƹŽÙl†R›ÔuË|¾d{o@Qä\ºô0O¡µ¢iº®ev:ã¾ûöÀ[$ ½URäB+\SóÖõ›|òÓŸæ{ÿÀ`¶B¢Tº:þ”!b‰Z’¤HÖ5ئ‹Ð>šHqZ*¬rܼ~•ε|ó·~ï I4ÓÉc<ôðB°\yì2I³C]Û°1Q.f\¼ïζÔeƒ6O, ónÝ8äýäO㜠ÈSf³»{[llMÙ߿˹½J öïÞE¨¥S$žTç–wMŒÆ™QUŽéd ™¤œÞ»Íöæ„D”ݬw’ƒ–¦]²(º®f4šš,7€¢mT 8Á³DÇ5 t¶c>;e<ÇŒâÆsxxm4ÃÁ%H‰éî©9{ÍpxêªEJEš*”’= Õt]MSÛ¾ omW]k­¯l ªê6óùç1ư±ó8š=„ž‚Ê[o€TÃÁ#äj‚9º¨ãgÏäAì®ÿ—ÝPB{ÐòÆáLõ„û÷îçüîùÕõS’%l±Åíå-‡”jÉi:cw¼ÇVºÅiw‹GÏñû Fé‹Ó‹\ع½b/£ !‡¼öúë ÇCöxãõ×ðu…6 çJ³*\BâÜYdC|sVJöYŸ’$‡s-‚@p’ùâ!5ç/l³Ó öïÞBiÃd:%àHSÍrY1_“¨”阦Z’HÞÒ6 uUѶ–œ!ÎzÒ¤ÀYÉÏüyî3œ?ŸqþÂ}xßrt´Ñ5Yjc1Z×5$*pB鈉Îë²´Œ6‡œà½Å†š?õïýY¾ï÷~ Ï|à½lí Y,Ž@¶Hå)«Óþu¢Ñ:Áó¡¥!€ŠTÖv£A M5é¶B ¢C[Âd2a8 D xk-Þ9$‚Îy´1˜D÷±-U£LL’ {—ºL5‰7d\\Xß8®µÖW¬¬SÖ7hê{H™‘e;¤ù‚1ˆd'{cc1´H# :%4–v~O…ɶÑj°>¾„rέ•½÷`!ÔžY3c2˜°³·ÃÆÆF-+1ÆPPpit‰×'òVõÃňíé6;Ùlx³y“/,^åñÝ+<¾{…Ép‚Ibüƒžtƒwn}/}ž«‹«4IO=ž@UUÔu½š^[k­µÖZë_®E»`ÖΨ¨p¸áߊœœq2f˜ ×;ì˨ZkWSÆÆò<_÷q|)Áª1 Êh¼”eÉ`8Ä;Ãw|ç·ñáçܹ{›£ã{Üñî¿øáÏÿEÞÿþ÷ò‘?üûpn† 3Nf·É3Ag[ÀP•ßÕäyÎáÉ!MSóÞ÷¾¿û#?Ê¿ñßÌÖÖ&ÃáˆO}ê—ùÈ÷Î×ÿvQË0¯ë!©!ËS¤”4mݺ86$Ï i¡±±Í=BÊ3W£Òbõÿ9çûÑvCÓ4@ ª–$IÂ`PÄæöÄPUMÌ£ì[ëccz MSºÎ J*“®Ü•óùç2L"1F!lÙÏóA|ž­]eŽZ¦gãóÞ{Zçp6~ÏY>jÛXƒ„º‹õE¡ú~¹‚ÑYVcú‹ÅcLÌ»J”RÔu ¨~¤þ‹÷y„{“É„$I°Ö® ¦Öš$Iúýëû¨Kžç!X,$i‚R’®u¤IJ–AY:œ+Wp7F0@Ûv/0&a0âœ#ϤilHOÓnÛ¶ÅZ·:ÎñbUÜÄÙh{Áq_žAÛUü¾ßÎcÓ$#9Ýßg6?%I¢ã¡ë]¤&ÑxhÚªyËãö:Ëñá>e¹ Iö1&aw2b„¢m;ꦣ,KvvvyóÍ(­yíµ×ØÞÙBˆÀññYž1i너¯¡½ãåùóçøð‡¿—ðœû±ã÷ß÷rå‰Gó8¾y’¢´\¹lÛ¦æá‡æÎÝ;ŒÆþ£?ù'ð>fË6e]ÑA"„F«Á‹êÖH0Ò4:$».¾a«Þ¥iŒFEÛtŒÆcŽƒÃC¤!…À†@U/1ÚÐ,—ØŸ3ñÄh“è˜õk[¤ óóyÃòtÆ_ÿkÿ#?õß`º!yí¥ëüÑ?’±µ=¥($W¯ß!IaPd Ãá„®ï)]ëIR a~ˆ _j…'‚DK‰RÐv 6 BŠ8–hRlgqÖÒu‰˜,ÛT|]Ù..ðdEF–edYJÓ´ØÎ2LÁÑ¢eB ‹îíõçåZk}¥]>‚ª¹ÃÉégB³½ù i2EˆP¿# êÛtU"t“‹ '„ùUyƒ.ì3  Šîõ¥«eY®¢™|ð¸à @–æL§S’ÁÛÓBŠÝÁLä§®}ŒRT\ؼ@1*¸ÙÜäêü§å’§.¿›+[W(ÌÛ€T É4™rez…sù¿Âi8eæ$$œžœr|r̹sçÖ`u­µÖZë7=' ÷Ê{Ü\Üä˜cZÚUæuüt$$lˆ îÜV£ ’#¸Öoîgª÷þÿÓø~]×”eI–Ež0Wœg­/X=:šÓÙ†íímÆ“meuÄgžûy>ò‘ðÈã; †ÅrI¹l‘rƲ¼Î²ºAY£TCžKŠñßIšJ\‚Åã½¥kmOÓK¶·6ICšfloïðÜsŸ¡©;æ‹9E¦‡TU…÷–ápÈ¢/ ŠîK÷–¦‰™ž“É&ˆ@U[”N0‰ÆVÞGÐ)U„•OÛµYÞ—QE«uqì}>Ÿ#D`ccƒ¦iú¼ÑNã˜~t“¶­%I’UΧñëññ *Q¤© mF'$I†”Šå²Â]H¼{ì]JI¹,c~b_ŒÇæ+BðHƒAÁã¬_O9W¥ E¡ äÛ.P躸 gÒ$I(ËrUôõÅ ´( l]¤‹ÅâW嚦iJÓ4+(iŒ!Ër¬µ,æetÖõãùI£”R"ÈöN°X”t]Ëp4`2™ç)eY2©ë¦ÏMðÎsz2£ÙÞÚê»íÁîWmÇ™k·,K„dÙ ^¿*Gö̵+Ôu‰ÖŽétJÓ4,ñ9Xk±UC1q|2GJX,f´m˨ÄcÑ?Gm4BJºî,[U3Ìçs¹|ù\¿y‚¤m+.]zˆ—_z™‡.½ƒeYâg:ÙàµWßäÊcOðñÿ>ú5ܼsÈ×(+ÝÃOÝŸS ­¯xá…Ïsrrƒ^äcûúÐ_âøè^<¦ý¹jm\H ʲ¡Š½½=îÝ»Íõo±··Çì4æ¬ÞwñA¤J(ç5Jj¼‡år ´m×a]ƒ$¬\ÊX–5Y¦°}™Øb>#O‘'×Ò†Xê´»½Ã|>g²³C°­Tã‘QõÞCÛ:œdƒ)/½ðÿø/ñÀƒ›ŒFCªzÁÕ71™åþûçÑUšh¤$:MÐl#R“Ñ–'tNÐÕŽý_/qt¼àè?æ™÷=ÍîÎ{û·ðÒ 52?ÄbY3lL7¸{÷“J:‹ËêºæÂî:UœÜ!MÒè~$I)«ï$uë1ÊPÍ+ðpáÂÌg3”2¤™ŽQ!RÑÖ5]hÐJcg0pëÖ-Š"'ËbN4xƒ‚e9'M ‚·cÖZk­¯0¬ân¸KZT®Øbë×ÿ(Fp×ßåxqÌî`— ½AA±†«¿I²ÖrëÖ-f³<òY–ýk\&‰U¶xšFSß|>'Ïó5\ýRU£S„Œ.ź* AQ GÇ7¹që²\²¬#¼Ë#.]žr|r—ΞbLGškŒtmMp)Z¦•b]…Ò‚¢(ð>°½½ÅÎî.¯¿ñ_ûî=.]ºÌOýÔÇxî¹çyêé'™ï#…ìÛäãw–e}&¨¥,]_Ê/— ò<'ÏóÕ¨û`0Xųqö<Ï ½‹µmc~h’$=¸ô#MKš¦é ±4ÎÁrY²\–=LMHÓ‚d±X¢”d<1›Íxíµ×‘ ¼ûÝïF Â „äæ› †C¥%R„8z ËTïš­ì]çVPw8bC×ÕXk)²$6û°Ê˜={®ñ†«/òïÎù>wU®Ü»Iòv>éÙØüÙ‹m>_Pù*gu¹\®\­gWˆ«)‹Åkí*"à‹ãÎÓ¹è•R²½³³Žº®(Ë%ÆèªÖ}þh‚R×ËIžQUå {ïúWÑÁÙ {ܾ8Žft²j˜»À*[9Š}’°XÌ@žEÞÇ8‚äyÎÆFl©—R2äY޶–eU2›ÍHÒ”Ñx´ŠW@Æã1ÇÇÇ<þøã”}áÖíÛw8wá<¯¼ú*^0è:K×¶ mÛ Ó„éÏ<ó~^óÍÞ%aýt2¥,g4MCPŠ<Í0}VQ1æBÉ“Û!y‘àƒ¢*K”ò«"²³q½$Õ ‹Å¾k±®¥m*¼w#dCò¼àädFQ úsÈ“&†ƒý’$acsƒ®Ïæä9“ÑÛ6tM‰R}–°R8i6`Y:†“-lî¿þKàkßû4y¡HrÁdcˆ i® œ³´M`”gt­£³5­õ8[%† uS²½s¿÷ü·£ v÷î#Iaÿö5êÎâJ‡Ð9›;ŒÏ³µ=äà`Æç_x™w?ý^~â'?ÆË¯~žïü®oçoüõ¿ÆŸùÏþ4ç÷¶Ð:¥i:‚ðP S‚¤™Æû@‘ðãã9‰‰¹Ã¶ótmËp4Ä…@Ó¶èLQÖKòÁ€Á`@Ó´²³»Ãòäm$J Ú¶¦ëڸϒŒõ­ãZk}åÈû–®;¡,ßÓñ»È²ó1¾å+‚âiÄhB&]dØêÖ!Sd²‹­Öú-U’$L§ÓžxÂ=à–»ÅÞp ÅRùk“­t‹+Ó+|ðÿ‡½7Öì¼ë;?ÏrÖw½ûÒ÷¶ZÝ’Z’­Õ²lËvl¼Û`0a3‚IȨ(˜B1ÉL%S$Uf&C‘–0Æ™xc›µK­^nwßî¾û»žõ9Ï3œ÷^ÉU6ÆrÉòûíººRwë¾ï{öó=ßßçûF>}õÏ8³s‘“Çh1¯]~-oZ}kþ¡ ¿djÇáèxmƒE’4¡Ÿô0AÄðoj¬N5ÕTS} ã.ÏsÆã1ÃáA:`ÏíÑköXh/°ÖXcFÌàã#j ÚÑ÷‚‚wÀ¥Ñ%..Ñ3=VãUÕ"MÑœš«Eá¶¶¶ØÜÜ$ CºÝnæò¥(›1y•ãkŸ¶ß¦íµÑM[µÁ@FFIùE&•«ï èäLn¸Ü¿Ì¶·ÍZce™†k ‘_„˜ê/qy3Á/ú¾OÇ<øàƒ(©ˆÛ1ÁZÀn´Ë{Op%¹ÂÂ̯^z5¯-ój[XÒ4Eë:´vˆŒ\ZZzÙ–9¦YÊ(QÅURM<^Z“[Z‹T‚ ð1dYAÄœ8qœÞÁ%Ú­&Â)Z³3 v ½;ý1aèh·„a¬¦H  !½ƒ³xžÂ9ËÚÚ1Úͼf$¶º¼ãÛ¿“gž}‚~oÀÂ\›Ñ¨”‚ÈoRNF›kcÏCJ© „<4%Y–PU%õ´~EUAQõ™E °•%ôŸOeÖ†`Í­  Š¢ MSâ¸YØT P”EIQ”G)=ç ×ë#„daa–½þL•ÓiÏa+M–Ò$!ðú®úK =I“ ¡©lÅx<Æó‚£ôlž§TÆ`ª:]*0“B+ŽŒOœ&Ï Â0©^`T>Ï›=4Cëå!hµZGÆuUUEA–eø^mb²H Õ<ÏIÓ”¢x¾ô«æ ¶&©W ”òPJ¿ÀàTH©QÊco÷¥aà£}91K+¬uG©ZS:¬-qŒÍ=×Õ IDAT3“ui)ŠŒª*‰¢à(…ªXk&&« ªÜ$‰[Q–RzG?ê4­T „#nÄ ú}F£TFÚ‚v»Mžç”¦œ˜×ë,e•c K5It E‘‘çu ÔþÁ>žç±ßÛ¥×ëãy1—/^daq‘²4?qœ‹—‰£ÁÙsçˆm<ÏçÌ™3\ò$ýAAU9®¿^£=K£ÕB0$KR*ãèÌÎ uÈüÁûyà™›ëróÍ7㪠WÕ<ßC y®Ž¢¨æÑ–fr¢s8W‘å#F£Ñç {{{4âRHòâp?r(ÏR–Ö™Éh]8I$;Ê¢D þ~Ÿ¥¹%îºó.†Ã![×®am}òž™c}ý:¤ÔŒÇc¤Óõ:QNÕiéÒXÂXSY…Ô![;üîï}–µµ€[^qÛ»—XZé²¼Ò%jhüR²¼¼L«Ù‚JÔE-Ò!UˆòªrxºF yVPÚ g}ðì™süʯ|Š(ÔhuŒ;n¿›^oÀÇ>öq~ý×?ÁƒlòÌ3çØ¼Ròà#?ÄÎ6(Oqåj7¾!âºõ\ݼÌâÒ,ãÑíxB’e)Ynh´ÍYTЦ?¸ÂLwq2 [øžWñW·vXZZ Ý^ /JâÖ<>ø ÿô—?Ä­7ßËÂÜ:Uéc«€Ÿÿ¹_äío3ïùžï”C”ôPrzÓ8ÕTß :LªæùUŒÙ%Žï"Ž×ù¦äŠ À× »(;«FäãË/B7æ˜)oõë§Cƪ@жmúù€Ýd—›nf&šÅSÿåOx\ÝÄÂâ)N†}¶³«HoÀ‰Ö:«ñê—Ù ¡húM²2#-Œ5Tyý~ÚíötåL5ÕTS½@£Ñˆ |ücç¡g¢u²Å}å}Ü:+²”$*!!ù/š£'<ºU—çöŸc³Úd?Þç :à˜>†‡75VÿŠæª”’(Šøìg?Ë ? êDtoë2Xðøàq6’ bSŠ’ÀÜÙº“ØÄGÏa ïpzû«aµ¾¤¯‡± —‡—ÙØÞ µØâXxŒHDø/±9N-•à [s=…‡ÖÆHÖb{g‡"WX…šþAJÎPd%e®ý°9Yj1Åk’FÜAiŸ¹¹yFY!êâ—v«ÍŸÿ žnqû¯âæÓ7óÀƒŸŸpíÄ(­J`m51 R õß SL.Ò<Ÿ x>U™¦)AÔ÷üE`Ýä­ŽšÒ”G‰N=ùý,Ëi·fð´ÀP)FH’$hå¡”¢Ùl£•Ïp˜pÐÛeiy‘,OQ"BkÅÁAN{[Y„¬&‰” ÏS€Æ˜úbÐójÃS©º„Ji…˪Ú,+3Â0˜ÖR!‰£æ„«ZMvL…'½ÉS ÿ‹X«I’uêõ['d«#>‡ïûGLÓC¾©µöˆ3{h¼b^øgƤT(¥Ž’®‡œ‡«™œBàyš$)ŽþÜù‚,-)ò§-èõRò¢æ¥ Á„¡*Ž^׃ÖÞQƒ½Ö;Y6ιI2²æ´Ú«MÖ,C*&˲f“&IB„õؽ''ÌWŽFب›f'f¶ÖêȔβú Q·ÛåÌsgXY:Æ¥‹×¸íöÛI’„ÁhÀý÷ßO–•ÌÎ-R–ŽápH0f<ÊYXX`gwå7) A£ÑÀךt˜Ðh4pN$#ž>ó úЇ¸rm›×¾ö^æææiµÛ\¼t‘…ù´ªœeY’eeY2;;Ë0¡ÊšÜv-Fã>ÛÛ[¬­Ÿ@kÍÖµ]Ò8gvv,ŒÇCš­ˆF³)S¬µ„^ ÆaLmZ‡¡_#,”ÅÖ×SÃÌÌ,ÝN3A ƒ:©­||/BJAUeà*/Œ(JƒÔ!+ןà¿ÿ©_âìù-þÅ¿ø@ÆùçX;¾Èµ­ n}ŤـV«Aw¦ƒ)ö1ç“%ŽÊ@YJ/@+A^”ø^LàE|èÃåø‰›Ø¼²‹1[;?÷sÿ% r‚¬p(àÃ{(ûxß~o~ÓkØÙºÄ»ßõNvvw9¶v¶ÖÛ­äyÆÕk[$iÉÜ zŸùÑ¿ƒR¿ú¿ý3~ïýàøú ïøöocØßg0Øg81gçIÆ)qc[*®]ëÑ;€,“Äñ"ÐàìsOñï~ã Z­.ïùîïÔ„fo¯ÏüòôBdª©^ÎrÎR–=ö÷?ï{ÌÌÜ€çu9,±ú¦• ¡½ZBo"Á¹½ !œš«_'Åq̉'Bb¤9ºùv“__É=v¤%×u[¬Ú!*‚¯é …d©¹ÌuÝëxvÿY.÷/qûÌ[>Fw®;mBžjª©¦úÆò,go°Çîþ.íÍ6§Ÿ:ÍuK×Ñj·¾¢qjë,ëv“ÎlŸaÇÛAv%‘ЦÆê_ùš¯ö ¿oïo“7rn¿•·Ýò6\äøüþçyjó)~óÙßÄœ4ܳr³Ù#¶ê¡×sæÌfffX[[{Ùœ †}öùôî§ùäÙOòï ,Í-yP/)cU+Iikþ†VŠ(lâ*ýÝ>yf™Ÿ_Á÷4y>&®;~š"ÿ0{{)™ÊV‘š‰ÂV–ýƒ¤Ð¬ŸXÃì$dŘ(P¹ckû K‹«a¹õ¶[èt:<üÐ#¼ãßB«Ó¦ît¯Xc AÐU5iàV^=ŠoÒ£¨sžçõè¶„a„çÕReYMè')N!pÖ‚(¡Pžbh5×Ò:|_>n2N~X¬”$I&M3šóM œ@+ÉØ”tÛ3˜²b¦Ó`8Èôû,,,Õ¼S-ÐÚ¯Q e,Í2ƒR ¥š l=>lŠÉgöAú8O£u€sJ:´òÈó k,ÖÖIÚ²°„A@Ðl0× ã¾âyîè)F†G‰×PÿûÂü iš2PJ"„÷,íVƒÕåeò¼ ËrÆ£1JûÌÎtøó>ÅþáCt;páÜY>÷Ù‡øäŸxÜy×Ý(WRÙŠ¥¥Edà3Ú9@yM„’8šX •ñ sü  ;·Âü|æÓ[ôGvRR±³smj¬N5ÕËZA‚´C¢Òàù3xz)§©ÌúérˆŒñìM®G>¼HÇx^8Ýt¾N*'($‰$è Ê>;Å6wÇwÑ;abõÈ#—‚Hz„x0aú}YcÉœšeY­ðéñ§¹^%5)É8¡7êÑn·iµZÓ4ÕTSM5Qd‹w¿énæNϱÛÞ%ïä|ªúûìsgëNN4N«øËƒ…¤5jÑè50•A¶%­¨E+˜w¿ZÓ»,K®]»Æp8d~~ž…ù¢FÄÜúëÇÖYŸ]GhA:JÙ’[\sר0¬Ûu:ªóEæ¢ÖšÙÙYÆKÒtüªLgƒ|Àgv?Ã3é3TíŠvÔ¦)šhôKÎÔ×TšFaª>ƒƒ!I6äø‰ší$ÓéHƒ}Úíž’t:³d© Éméhu5ÆŽ°VèEjÑJ¢4\»ºT‚Ø÷(Òq£Í±c³’NK’ûT²¢?´˜ÜFšÅ…+ëËüÖ¿?sóóœ¸î:|OsãÉ“DÚcœ¦ìõèvg&æyAZ’4§Ó™$q-yž ŠÂ€KñtÀ©›×Ù8{?ð¸rå FŒsŽ¥¥%Ò,Á÷BJcðÿ ÅI>D8Òšq2®Ç;]LiH²Œ¢,h·:¤iBàGh¥1Æ5:¤¹Eë¨Ñå±Gžå‡ÿöÿÄʱeÚ3+üö゚w¿ë¬K BÉÚ±%ÒqÂêÒqlaJ67¯²vÌ„мH4e>Dy +`œÕ ìÊ>ù©‡ ƒ„·½ý]„aÌwÏ;¹ïßÉ·¼ñÕYî{ýíÜxêþÉÿø?p°×ãŽÛ¾·¼é$wßq3ŰDÒGÒgÿ`DÜhñ7øyï÷¾žû»?Fà·É®Òm7™›ëP¤;DAÂêJ‡w~ÇÜ|ú?õ÷ŠïûÞÿ†2-X:¹ÎÖæ3”nÌþÞínß+ñ°¼â¦;hE TD¯Ùù«ë]^óºëøÌŸ^dãì·¿ê8ÃþÎEÓ+‘©¦zËapv€´CZ²‹”óÑ…imÝäND"ý6ZÝD:|œñx©jãY©hj>T{{{,4æÙ+öØÊ·éÄæây|õ•o«âÿüJnê»r†%¹D/ë±›ïW£ñˆím´ÖScuª©¦šêJý”b©à¾wÜÇ[x Ü>×û÷_¾¿é³ÒYá†ùXŒièò/(ÆB°”,±z°Êµô¹—3×ãxûø4µúUHJI’$ ‡C¤”?~œõõuÖ¯Ól6‘J¢¤¢È NéS\h_`—].‰K\0X·ë4i­ß÷Y\\óY:3]vΰ³»Ïé[nåÉG.37;Ëù ¾B*G…¤äƒQré“|êþ§yê™§¹íôÍ\¹²É'×ÀTÆLÖWº5U…˜ðpçææAZ†Ã>¾¯¨*‡çIÚ{{{lî]æ&ßcie¥k ÄÞÞÖZÆã„F³IY–¤IŽñê‡ASÙOHYC±ß‘e9•©ÀI|í£¤&Žb´ÒøAH–äaÌ8)hwæ±hvvúüäOþ|–—=Ò,áôM§8èíÑlK®\½ŠV‚{îy5®rt:s€" C,¤#Œ<ªR ”@{aQ‡T>‘ók¿ö~^ûÚûHÇ)O<ù$_xü øà'9¿q†þÑûX]YâÂÙ³8ö@$t:’z DB¯w@{¶çU |Œqó‘~š0hòƒ?øýÄí˜0r4>E>ä–[næÃúgx^„R‚ÕÕyºsýá€5WᇦF麮r •HéÎÅø1|þÏrëó$ùF{‰ïyïÛùÃ?üu~ô~îxõ ­NÈq}lz%2ÕT/cÙÊ0mbòº­Óˆp¡fJOõEvœTQ¼€c’ô¥ÓlÜ€çMµ[Q±²²‚†‘7bÌë,3b–Žì Ñ/ÎZ‚fÜd¾;‡ÒŠÊÕ×½Ó«·ðäàI>²÷qÎ.ð-KoæM+oú²X–v³ÖšÑpÄ^¾Gé•hOOôW©F£Á©S§˜ŸŸ'Š"Úí6íVû‹ž7~ÀòÜ2÷6îE xöÈJr{çvÂ/èœ#Ë2.]ºD»Ýfqqq2ý+c ;ãžë=Ç™ä ·ÌÝÂÛÞÆéÆižw’4Í"MÐŒšaa4âdEÕeB…1€%Ms?b{{›üáòš×ÞKØFTÆø{{»´šzý=¤¬èvbv¶Ð~ÀþÞJéÉH·˜^YÆãaNÆêƒEšÇ1ZÖè€ÃÄk³Ù¤ÓíŒÇôû}Z­Vm¾ ŽZâ=¯n´·U…79xâ²<Ãó=œ©ÇÝE¥ˆÊ ¥ ý£1íÑhDYÔÆoÍ®¨l] UUJIâ¸Ö>išS•¥ÍqV •ÅØŒÒä …’>N8ÊÒ`«ŠÑ8¥Õ–xAÍc­GÃs´ÖX[Mv¼: l=<äFõ(VU<ÏCk=išó11¨#ŒÉpVàœ$ êä/H”vuù—(¨_Fx!ÖTUm¼â$(519C´'QžGi,BH? Ì‹£;!$ZûH)ЕÆ:K’¤H©BãyŠ,IPÊCJ5I-[T ÑÚ£ªjÖˆµ¥|dQàùq# ÈKÒl|„Èóšçªµ¦,R|_£&¦±”¤­o~½.Eeñ£sçϳ¾¶Æ¥K›T(œu\»v“'¯§4–x˜oý¶·³yù*·ÝþJÎß`kk ÐäyÍ€µÖÒ;p¬['Ë Š<% g¡¥&æ·d{g‡7ÿµ7ÑÛÛAôìoxós3qÍv8J)ŠQçûH\]¼„“ŽÂ”eEQ”híáÎJÎ'þó§xó›Nãye‘à–^ Og¼úÕ·±rlA¢Èi5ºìïPf!%ãñ˜¢t˜b“ñ0ggïßévv%+ËktÚ ~â'¾ƒßùOó‘>Mû¼æ ë|ûB‹;n¿‹“'æ9q|‹Ïmpöü3¬®ç-o{+_xüir“5}ÊÂà,ø^H»3Ãëî»'žú§n¼‘þpÈ™sgiµ=æ:Ì.-óØ#›ìîî07?ÃìÜY>æÔM·òÀÃñº×¿ŽÕîI´öHÓSv(rdzO÷xî™'1e“'¿Èÿú¯þßÿ7ÞÅâÒ+Kó¼å-÷RæGëx þäcOñÓ?=½™jª—Ÿ*’äizž ˆ‰ãã(MžLNõ%ì=„ˆQbžóõ$‘NŒÕÖÔX}1ovŠœím¶Ò-®5®2ʆõµ+ê+b¥þUM])êñHSzlŽ6ÉÊŒååå£ÒÔ©¦šjªo*¹Iy ÜÌ.bx žÄõÏ‘ZËÀ¥xÒ£ÂÒv÷xóÌtïàS½K<·ÿ,Û»›ì,ÜÅ›×ïciæQd4PŽGx¢Iè9%ëÄ¢µXçÐ^m !°(LåÈ‹’……67¯püøq~ø þ쳟çßñò²tD«ÝDIS¢ÈGªŠ¢Lh6c¤ÇH)i4"²¬`{{‡0¬£RÖ†ØÖÖUffÚÌvÖév;5&À—Œ†C”VEIQÄq<)Û)ÑÊÇ9‹µBÔˤ,  ÂZƒµ ߯ӸÚS ‡CŒ­›ê•X[§?µŽÈ²Ú8ó}¿.U’’<Íȳ ë*¬=,RªŸò÷ûC´.B¡¤‡q®2”ÆbÁÚrb:J´') ‡R_GXjî¥Ò ¬DkEYŠIU]$%eml RA^$¤™¥×Òˆ(¥'ÉâtЧ, QÔ M2œÏ P²6l•Rت¢,*<í(K‹­,êÐùñqlý+ÇæðCÁÌ\â¾{ÿÿêŸÿÏ>}–·½õœ?;äê5‹šD Iä QèÑéδg¸õÖWÒ|”$1,-¯²¼zsóm¬+(R?úÀGùã~ž;ïZãúS7°¸<ÃplùÂcO’äŽÏüÙgÉ3Çsg6xü±§ØÙðÄ£EÁöÁ€È‡ôŸ{^uósËdÎÐiÏS”†ÊdôûC6.îL¯@¦šêeª²ì‘ç»Äñi| ˜Ž×}™KX„hâÇ×aªm²|)$¡ß@L éÕÜTJá„#É<ç3çÏMR3/²w€C Åœ?‡4’ýrYf‰Tô²§šjª©^¶2ò”ÒôÉÄ>Î P.!ÆòAùHå#e€”Â9<qº5ÏZãf‚ø \ù,¯=Ħë±8|F8NE3Ñà‹8ï®þ“_S½¸çÛC“T¡hË6wÌÜÁ3ƒg¸8ºÈùáyN6NN¼u7)sÿÆ>:ç(«’kÉ5Î'çÙ­vyïÌ{Y«ôv{ȶ$nÄ/É)}˜hÃU”eA𼨧Ûí$Y:ÆB*kCŸÐkÑl6é÷‡H©évgèJ\^®t¤YŠòJùh)¨ªŠ,³hí³¸´LFœ;{–…ùyŠ"§Ñh±´´Êù³`%Íf\‰Ž,Oè´»\»º‰¥`i±Cž%xÊÇZK«Õb4ÑëLÆúÛôû’tT@O°vl…Q‘$)ÎY´öFch6›dYm$Õ#ëŽÑh„R²NfºItrÔ)Š¢e×Þ„AZüã ÆHZ)¤:4ïÒ´ ŽÒ«ÇÛk”eEiRŒ)qÎE!ÖV5WÔX/ÐÄ2¬9›âùQ™ÍΩ£ V*‰Ò 7—‡(ñ}ÍxEQÐéÔ…\•qi‘Ñh4ÆÍF‹ª²ø¾O»Ýf8e)¥Í‰q#$M3ò¼¨SÎ^€š,Ë)Ë ÏóqÖ!¤!j¦«†ápÈx\7Àk¥‰¢SŽ;Æù Fã1ÇÖÖÙ¼|•Ë›—ÙÝ=àâÆ5Þùî÷ð©OÝÏìì<¥qt»3”¥eaÁg4Léõxt»³þ„D+MAEe ¶¬¬,ñ_ýï§ÓŒÉ’!ÖYвD)À¸Ù¡Ø?èÑôÑÒcœŒY\š#ŒÉQZç9ÃáqÜ$§”f@£ÙÁºú9ç`0dqqé¨Qp0¢”$ ë}¤,2ò$¡Õjç4a Ä¡Á[†>ž§ÙÛߥ3»ˆ17Þzš¿ÿ÷þüŸáío{Û;{<øÀCÜpÓ:E‘ç)wßs¾<õô3ÌÍ·VWW‘ÒcxÔÆ{U eÍüEH<ß›¤jk´G½Í;‚P“%#¢ äÝßõNÂ8fûÚEòb@2èã3È*&KBvw´\#qÖa˘¹ùÛžgñÒÄÌÏ/RZË{‚‡¿ð$Ï<ûýûßÃÍ·ÜÀ¥ |â?ŸáÚÕÛ}šßúíßãÿÂÏpãMóüùç/òá}šù[ÿ3Q¯é ³3š0jq×Ý·rê†5¾ðØc4#^}ï½xZ2î0îÓlÄUpéò•M^ ‡ã-yž¡Y<Ï£Ñh¼hL ªªÈóœ¢(ŽÎžç}Í/êÉC‘×|說^p^¨§#^øåM:~%ªÀ䓇BÏÿ\­5¾ïÁ„=½Ðýƺˆ´TUZ—ÞëBt`RH0Õ—‘RÐY£匆WðŒ#˜YCˆ©)ýb) C–––(“‚‹½ tÃð‰tÌ‹´ôX‹Ö”†Þ5/Xk£L÷™—’ªªÂst¾:üîœ; zH) ‚zðöµ:¿ðœÐn·¿f¯qøó?ß ÏÉuYq}_§Tñ<ï/evTÌÅ!*®ªª£ûº ŽB&/—‚š©¾ê-ëJÈÆÐï‘› Ô¬(ð½a÷m¤ß¤Ù¾…ùö-xÒ—ÒÑvŽï\€|Ǫs¨l"9Ë`¨Ñ^ŽRëxzÉ H¿¾W‡ÿ÷´°êE5é´¦ÝnϧZpç쌋1õãRt‰b© ""Ïs677év»“RòoÌãƒu–­ñÏî?K’'¬+ÜÖºæ ÉÎÞZh¢8zi«q\ÒE‰R-°6Å„”ıà ×çÄu38 E‘aŠ!aØ`ëÚ.B†ÃUU'2ã¸--•4¦$3 aP7¿e‰³ÐëõX˜ŸZ+ü@²°0ËsÏáé§Ÿãü…ó„±c~¾Íp0@*‰µ ÂÐ'Ësªª¤Ùl‘ f‰ÀSš¹™üÀÃV( ËS’ñ˜•åELU—SEQDžgHQJùff®¬ÙMAžGOäë߯ObBÔ&id­M@c óóó¤yFôz=¤”ÄqLY–A@YÖéNç½^Ã÷=<©©¬áêqwíS C 5Ífkrc^¢<91!*Â0Àóêö÷"¯¦J Š"G(ÄQš¼N“ZCxážOªNṄãÚð-X]]%ÏkÞk«Õ¤2ss³híc*sd>çyNø„aÈx1ßêåa©(Ë!j£Ö÷}Ò¤ Ï3´ ÐZáyMš%PU4uSžäGŸ¿ÑhP9Ç´º.^¼ÈÎÎkëk\ÛÞ¢¨*öö÷' ¯ã›xä‘/Йé’¸Ãâ ŸúôŸ†Q1;Ûekw\£6Ò”ápÀl§A£ÑÀÓ‚¼²¾¾Î}ðC¼þu÷ÒŒ#†ÃÍV lIåEY1;;Ë¥Ík,--£ÑD~@QubW)ʲ¨Gè‹­<ÊÂàyíNDͤÝÞÞÅóŠÂà\=ú_åäà\¯[),^+¢ÅŒÇ#J[’ö:6q«ÁÖÖZ üÈçºëOQº˜qšñwÞ÷üÞø¯Ý+°N>Ë+ËÌ/Ì¢4tgfXJã8ûìÓ,ÌwX^™c0† :J(®^»ŠR¸š§:ë÷%%e™£”¦Ñh²¿·Oô÷·èí:­6íf“Þ`ŸùÕôöîGZǽ÷¼™'„ßú¿ÿˆt\ñ³ÿð—yï{ßÀ»¿õ.|­I‹‚Þ•+¼êÕ¯ãÛ¿õfþñ/ü*—73lüàüØÿ k«§É‹1BBQÂÿò+ÿßõžïâÞW¿ž}äOqøœ¾å8ýƒ>»;c¢þÞÿ×¼ï}ïãºëÖp¤dÉa\‘—¶w6™››¥Ñóš×ÞNiRŠ"%I^#7ƒÁ€³gÏòè£òôÓO£µæøñã¼ë]ïbyyùk~1`­eoo'Ÿ|’ÇœápÈüÀ°¾¾þ5}­ªª lllðä“O²³³Ã`0`8N*šÅÅEVWWYXX`uu•n¸0 ÿ „ÃNÏ=÷<ò[[[ Æã1³³³ÜrË-Üzë­;vŒ(Цæê7ŠbŸ$ÙÀ¹1Íæ*¾ß.”¿„Õ†-C.BZ‹p@‹ÌûüæÝ^ öö÷¸4Øà²=O®Ä^Œöä×,xÒCIEIIRd¤YF BüÿŸ½7 ¶ë:Ï3Ÿ½ö¼÷î¹ó€‹Žà’bdQ²%˲)]rÚqìŽt¹SQ9©ŽÝq·;Ýí!N+nWÜiWºRr”´"ÇŽd[¢d‘¡DIæ ‚ 1¸¸ópî™÷¸ÖêûÜcR”µIš°ñ¡øžiïsÖZï÷~ÏkÞ z{·ˆª,--±²²ÂÊÊ kkklmm!e+•JT*<È¡C‡¨ÕjÅ9ì-¸‰¤”,//sêÔ)Ξ=‹eYüÈü###oÉãgYÆòò2ËËˬ®®²¼¼Ìúú:N¥•J…0 æÎ;ïd×®]T*•?W37ÏsVWWyå•WXXX`ccƒf³‰aT*n¹åî¸ãfff¢ËÍúë)ªJ™Ðé]At·ð2×v)‡ÐÂÀ†d ,aù˜V€ø¶¦£‰Â&eF%äq„v36ó~‚p ˶ètñt‹@Œa„Sà–{Ò›nÕ·y­ûìpÛ´Ù?´ŸÓ[§Yí¬rſ–ÚÂÇÇqÆÇÇû·é"µäzï:§§q —ÛJ·aÅày”J¥wíDz,•I’$Ã$CŸ$éÒj6Y\PÄQD’$H•`žWˆŒK+k,--ãøE “Ê ’$Æs|,×°ÁÌAéŒ$UEb|* J%J¥MNwq\ ©î½÷¾ù­—XZZäèÃwÑélb»¢@ä)aâù&–i Ï·ÑJcYAèÇÑ *—Bhצß—Ó,¦¦Ô9i\¶mÑl6QJ166Fšäô¢nßZt \ÇA˜f_˜,ÀÍZK aàqÒë ;)Z Ë(ê½]ŒÆ§iB–¥˜ÂÀD`ÛRæÄq‚¸˜–‰0 ¡IÒ:yžáûZCÅH© ¨a¢$aP|o$yž ò‰'1J)|?Äq\lÇ"ÏdßA+ÃòÀ.ž¦ JA§ÓÅq\§8ˆHS“e²Ÿ*ïöÃÀ$º/~À…øÜëõúaWŽk!ضkuF†GÑJ£ _®"³ßèö"¶5ФKžo`BÜVߎʳœf£ÁòÖKîu"³CÉ÷ß1°0¾ãÓ–mâ,¡ÙiÒ’…¸ë¸7…Õw‹°º¸¸ÈË/¿ÌÙ³g™››cqq‘­­­Aþ@†AÀý÷ßO’$:thŒý]—•R¬­­ñ /ðä“Oâº.þð‡1ÑJ’„K—.qòäIΟ?Ï•+WX]]4;«Õ*®ë222Âææ&<ð`ddäOœ*QJEëëëœ9s†¯ýëƒÇÝÜÜ$Ë2J¥wÞy'½^Gy䦰úײ#eJš¶ˆ¢EÌ´ƒcᆓ8Õðíg­ÉÉÉÈÞÄÂÖ:CêUœx©DŽÝÊÐÌ÷!ì2q¼ÊV}3ßD›iYh4&Zj,m!¸éš~G…;aQõªTÝ*½¼Çr¼ÌJºÂ=Ä3ÄøøøÀ-£VBÂ|wžKÍKìªíâîÚ݈Là•=†*CóÝ{ÏYq’’çX¦i£±–Ãpm Ï!l÷ÙÏñ_ÿë“üô?þªÕ°úî×ÂijY&JK„Ð}—°9püZ–Ež§Ìû^ŽaÛdyÚæ’hMÿ³Ó4±- LÉÊR*¢nŒi^ŒBôa²,Ær Ò,¥qL§ïV¶H’„úVa[lnl`yçÎ]ÀõC¢$ec£Î<̋ϿLmh„V³K©TãØ±Sðâ Ç8|Û-|ýkÇ™™™fvvŠã'.Q©ôâyž±º²A%¨bÛE§êÚÜlÇddt˜^/bx¤‚VŠv§Cœ¤Tk5â,!N,»Ã7 “n·À³?’%iš!eŒãz$iNçä²pâ–J¥{!%¶Ö¤Yáê;Ò’,£I:Zâùt3¡Ñê0¿pŠZm˜Re‚¡ê0/Ÿ8Ë“O<Å¿ü4s—2î»o7YšÓëmÁ‚¢RÙ¹{/Ï=÷GìØ9ʵùKT«Ã\_X \v1M‹ÀŠkÅ”ƒ y*1M‹,•dy†ãº†(‚µúx€­ú&Íf“0p©–‡…AF­VæÜÅyVWêìÚyÄQ²Åz§Cçµoâ9Ž£ |Ém‡ŽÐnÁã“Ý{³cçaV×;|ñ÷ŸâýïÿÿáÓÿžOæßñÏþ3®Ï/ð>ó¹åÀ!Ö7–Y[]åðm{vï%êõ8}ªÃ¾}û±DÈØè,iÚ¦T4Q7âÌ©UžøÃøü~ÉÉÓÁ1ò8ef|v‡ê¨`¸æóË¿üS7övP)Ò4åüùó|õ«_åøñãAP 7ÞQÀ÷}ªÕêÛ‚HÓ”z½Îµk×XZXb||œ£%˲Ap`·Ûeye™sçÎñì³ÏrùÊe¾ÿû¿ŸGßóè›Ü,ZkZ­çϟ糟ý,+«+Ø–ÍÑ26>†ÌeñXgÏqâÄ æçç¹õÖ[»¹û¼‘Å.€p3€ç».·Šôº—è5æ(•Âpäæçò6T†ìÚ½›­°Î±…cä¦F{rp'¿Ýå˜û‡÷oÄ,¶){eöº{o^˜w“øžç\¼x‘§žzŠk×®á8{÷îe×®]Ôj5z½ œ¶@£tPR÷ãÂí+eŠaš8¶eZ´šõ¾;5/6#_$·çZ+„Y$Ë+¶mbÛ6£x®\æ€"Ï2â4/„_igŠÕå:ßû259 †@KE¦ÒþFd (ÐIø­4a©Œe ò1ÎåK—Ùµ{š»¦èE=666ð½(^£Ö’$U6—! &³’9Ýn™§T˾ïQ©„$qÄÆÆ¶c115ÄV=£T®€Õá±ÞÆõÅûÙ¹g‚û26:ƒ´X]ÝâèýßËÿøÿÈ /žgfÇ$»÷î§ÕN¸~½Éìl‹~sW/÷àé§ÏñôÓç?ª÷Ü3ÎOýÃÿŽ]³Ó(™p×3\ºtÌè1}×uš Ïš6–móÜþÝ{J#eFg+frÇÒN“¨“`ûK ,~à#÷ÝÐ,Ë8sæ gΞ¡ÛëR®Q)WÞÐìy;JA­Vã®»î"â8tußʲm›ááaî¸ãŽÁØÿìììOÝn—“§Nòä“OråòNœ8ÁwÜñë kÛwÅ<ûì³¼úê«Ìì˜áá‡æðáÃÔj5Ö×ש ÕxâÉ'¸xñ"§OŸfdd„ééé·Wû¶Šï(bb:Y‡NÜAj98øŽOÙ-Š›¾TI§ÊalÆ0ðà¦äÿÇ—ÜBÛ!¹a¦¤Lo~&o£hÖívYkl°Ü^£ZfÚº_Tß‘{W‚’SÂ6mâ<"Î⛬¿wÛ×QFGG¹ýöÛÙ¿?år™©©©ÁøzE,..222Â3Ï<ÃÙ³gyöÙgc||ü/,¬ !çþûïgddÇq(—ËoéZ?33Ñ#G¸í¶Û¨ÕjìØ±ƒ‰‰‰~I“;v0<<Ì“O>Ék¯½ÆÔÔSSS×귧Ο?Ï3Ï<É'ˆ¢ˆ÷¼ç=>|˜ÙÙY,Ëbqq‘±±1šÍ&W¯^åÌ™3ÜsÏ=Œ ŒB7ë¯r) FÊ-¢hž–ùî?ÓX–åôS¼Z.D”ÂÓÓ³4›-Ð& ˆâ†Žð=©`m}<ŸÆš4KQÒ Ž{ØH¤Jéõ:€I–k|Ï&I:½÷Üs7Ë«‹´ÛM”Nà aà³oß$AØ)UŽVÅøºÙ5’¹#/YÄ IDAT½nŒƒE®ò‚Ój[(­ûNG¥@©)5UiM–ئ…iÂgšd…Иeä¹B+ ÚíÝ?Ì<ÒBõ<Ó,FÍ;ûS)Y`òaäRÒíuˆ¢ˆ(ŠFªb„^£ˆ“#/ºIJÓwÚ(­2'ÏS,ÏIJiR¸Mµ0û¡=ày>Íf£ÚA ܺZ€ãؘÖ[À·…2ÇñŠü¨×¥Ë¼žq“ç’F£Î… 瘙™abb¥r ³À9BázV?Ëè ³…à\àr,[a[R÷ÿ ËrÁÐôò™Ìùûÿè“DÍRJ<ÏÆ&­V‹\HÃP‡išt:ݾ+×Dª ¥¦ùÇNYÓ.0ÍfËø~‰\f‘Û¶MLÓ@J¥q\üØA !,´Îû˶Q²Sv]—NÔ&ÏSLC ]¸ƒ€­F ß÷ñÃ'Npøð!¼R…—ŽŸ$ŽŽ…½»oa}cïùžÇ8þò)ÚŒ$Éñ‚€¯.26¦yø¡û¸çŽ÷òïë?!LLNàz.iš0:dõz“±±î¹÷0S3¬,ÏS-»|åËŸæÌ™ó¤©bfj7BØÔªÃÈ˲û|;o#MÓAîÆöãn›e¶ÏU†a†!÷ÝwGŽ! C|߬÷…1#8t/]ºÄÅ‹9uê‡æÈ‘#ƒÜ†íêv»?~œgŸ}–­­->Ìþà²cÇŽAÆÇää$Õj• .ðôÓOsáÂN:ÅÑ£G¿«Ì›u£VŽRM’d‰v{ ÏÛA¹|Ë*÷µ›ï\î¾és¢q‚•t…5ªAµàw¢AFèú%œ,£R»¯´÷ÛÂ`dÄÝ5®Åç)»S ï¦ê–o^š¿„õF¹}èvêQkkl ma”nü߀µÎ¯.¼J½]gWecb ³kb8†ùîV¦{…ë151„ÆvkõÐ! i52„e!eDs+F—»x¾ƒÖÐi% ]\×B‘ö7±yŒ·L.óþ¢eâ¸YÞÃqCÖÖ7XYYgÏž]¸®I.%Q²ÅcïE—%l[%)¦°±ÍbüÞ4 r“)E¢s¤RXžƒ°LÒ8&KsLË@õ]œi–¢•ÆSÓDQÔ_ô džÂñ¬"è*ê2TB)‰”)š‚j˜Jeä2CI)s £8T€¡ú’©,ÓDu{ôâˆ^§ÅðP¥à®Z&®c‘Äà¸6†dR£E\À00,…@iB „IäRaY™Ö$ív±…´l 3—h¶ib»Yž#ó!¬³Çód.ûáP&ºøÜ£išS*‡8þ(ûä^fgwÒn·‰“x°uÓt@ŽM­UŸ …åÓ@k0´‰”­¦mcš­ã#£ÄiBo«Ží8(%IÓ˜Xæ¡O–% Íþ5,žË²r\×à ò\ö»hº`®j°,Ö)J 2ÓëE€0 ‡ªF`YI“¤ÂØŽ ˜–ƶÁ·-”†LK„¡¡Tɲ¼Ÿî¤)˜.¹mŽ•ý·²¾þ§)  …&,Uhµ#†ª£¤±`çŽý\¸p Ã<ýµ?âÖ[†0„Í'?ùü«_ý4SS5LsÏ}îs|ê×þ)k«Ë”Â!¤¤2'I»4›MÞû7ÞCõH’‚#<::B’¤T‡ªdJ2>6A¹Ô%étp,­T­ÝnB,3”Î1 ‹4ÎIÓ™)lÏB˜‚õõõ@µ°°@mh„8n³º²AšæLŒOR.eœ;•ßû/_Çv²4Ãõª$qŒãL[“æ1PæÎ;ogie…¿ñ¾Gilmâz¾røð!’´Cµ²¹¹ÆP¹Æ¥ sìÚ³—é™)._>ÏêZƒ±Ñ*nÂÆú£Ã1iT\ññ¥r3ÍèE ½^0ð o§k”Ëe²4Á4µ¡¹R¥O=þM¾ð»Oò¯~ýŸ°cç8Íö VäDš[n¡—jrqîÂ1í¯ñÉOþ$ð¥/súôú(»ví¢T* þ]¥Radd„r¹Œ”’õõuÞ´¸Y5KÊŒnw‰$YÃófñýYlûϺ´…MŪêFÔࢾH¦3ö…{1CnÀæi„7U݃QÞñ&œ(l.G VÓˆª]fD@Í‘[&¦;qó½Ã5ìs`èϯ>Ï•+Ô'ë˜âÆmÌ«þŸ«ÑU^ÜxÃ0xßî÷±¿¼Ÿ’_ºaÞ›ÕIÖqÌ€’7 ¤îË&Q²‰°LZ-_.Ñí´)5,ËbjjŒ8†µ•&2sAK<2#& \\Ã#NSD#L Â@é™[˜¶‡0,Ο½Äí·Ý†=RF©Œ 0¸õÖ¬m\GÉ7 Q¹…-Ld–b 6 ´Êp\ Û Ð†À4‹QñLJüÀG÷™:RæX†ˆ€¦0±,ÏóÉó ÓDQË ÕJ(ª®Œ‚ejš&Ž-¬UÛ±‰ã×óH’„êð0­FƒÐ/œ3J)„ãGa@5t±MMÒë%0”$ËÑØäi±kS¥Y‘`nÛ8^1ª§ÏU«"$+ÎST"q=Ã2PÒÀÇñ¦T Çvˆ’ ©ÌBØ®çø ¥†*0†Bæ9y–áú>aÉòÂ4™˜§Ñ¬¿|¼ÍŸ50És=èð ÓÀSxÇ%îvÈsƒ<µÀLI ´ÝÇ&‰# ƒ‚‘j;H™’ç)žWA £?þ/ðÜB(ètºxžWˆ´Z÷¹©ÂÈéõ"Wa;J%¸ž…i»hm€.^³Ô`{5"E6ω:ÝÂ)-ºÝË´qíCXè\#u!’÷’”$U¸¾6Úr‰’˜ÊØ(í(fmþ:Rk’<&¬TÈdÌ¥ó ìš¹…µ•¯_çüù+,.®ð¾÷ÜÅèX…{¸…óoþ7Þû7~€ïyôûøØÇ~œ÷<ú i’áUl»B/ÊɤbbfŒJe„ÆVB®…eDI‰ñQ’$aÏì ŽiSv¢^L½¾é˜¨,¥<µ“¡¡€^Üf ‰¢ÚHÙÜZfrb‚‰Ñ1LÓ&ޏ®ƒahâ$¡Tñ|ßw‘R1·p Ë´¨·Û(a8Ã+/_ãɧVøõ_û·ü³_øŸª±¶¶ŒíXÄYƒ2i¦Ù³oŒ_ù•å‡þÖGùÉÿþ1WÖi·[¸®G¥ÇèE:[sŒ—Y½~× ˆ¢˜±aŸµµ6NèÝn— ðPY IŒï*â¤Ec£]8¬´ íFøÞB˜”*&¦iÌiÖ{\½z¿ä1>6ާo¼q¯í ¼sçÎñôÓO³±±Á¡C‡¸ï¾ûȲŒç_xþ»YIÓ”ùùy^xážyö®Ï_'Žcz½J)jµ¥r‰‘‘ŽÜ}ÇqÃV«Å‰'øò—¿Ìúú:<òÓÓÓÇiÇ\½z•o|ã<ñÄÌÏÏÇ1sssœ={–ùùy´ÖTª\×åâÅ‹”Ëeì?@­Vûsa¶]7«««ôz=\Ï¥Z­¾)¸J)Åêê*§Nbnn­5>ú(‡þŽ©ÂZk4Åïã¶ãöÝ>”#ÉtJ’%¬Æ«¬¤+()‹`à ôB&ËS ‹a<<šF“µÞuzYDlÄ2Q¶+f Ëðð- ëáJ)4]£Ø‡¸¡‹éýÀüe «†ëŽà9²¹JÚ»†Ô0L‡›®Õ·ðs¶À, ¬’‰Ù4)yÃ% û ”° ‹)w’P„4Ó& »qÃŽ=þUþ.þyÆÓ·§?¶3 Š|=X/8}ú4Ï?ÿ<óóólllÐl61 ƒr¹<W[­VY&¤”o ¯zÿûßÏÈÈÈàqŸyæž~úivíÚEžç¬¬¬pòäI®_¿>Ø*•J³ÁÝwß=`µnçKüyÞß¶Ûu{ÒæÛkmm“'OrñâE„Ü}÷Ý<øàƒß±A«”*Öûþ”Îë?¯w­ H1‘¢ó>MÜ20 óætÆŸw”1I²Fš6‹Ré–õÝ—9ctÓ.›ñ&—ôe|á2dfˆdl? Á(ØþëžY“‘˘VÚd>ZG Ÿ}C·1$Tg‘\TqÅXæÍÆð;X®å2ŒÚ!½¬G3nÒI;(­nÈ÷“«œ¥l‰«í«l¦›ì©íáÐä!v; o˜Æ©åØnôLûNm03³Ï`zj†‹±-—ѱQ².´ÛÇÂq ’$Ŷ #&I²4Ʊ\ÛŲl„©±”@!‹°&Á€UÚéF¤iáhUZaÙKKË;þõà:…+Ös\¬À%Ïs””xž¢€çgRÒëõ°m ×óÇuÉ2˜X6X–‰!%& µÙwqf˜¦i©êRnóFsâ8Å0T\Ä$M wßvÇÆ0 ß§™tˆ»],Ëì9Ñ‘×ZCŸíÚ‹ ¥ÌsºYŠÔ&¦e’Ë´1±E] û.PA¥Zƶ¾ Ë àÊõ<<Ï#í' o¼ ÓDjE»ÝÁrýþ¦FcŠbV¯œ$ÊŠ…ÞvRE1f‹ñ‰q’$¸ Ò4l¶Ó+•RXfá@íõÒâçV;ä2%Š"JF! ¤ÔÅõpÝ~à×z_¬+6>½^ß÷ú„ ¥ÀÆàï\׌ýB¬K¹,á/Ûc6èâÞ1M Û±hµÛC´T&Í%†iaP„xå¹Ä”&Z{h!0-Û2ɲ„Üè ȆƒÒäv­±€åY˜†‰:XvJœ&´:¶M$½^‚iYÌϯ0<:…ç—‘‰ ôJ<÷Ì7ùÆ7ŽQß‚Ñ|æ3¿ÆïüÎä#?ø¿ÿ¥Ïóàðßþ7?Ìç÷Ë,,t˜žšÅ¶]Â0 ÝÞ Óµ‰“&“^­ 677ÑZ²kvš8îR©”qíBÄGi\ÇÅu lËFÊBXQ2#Žc|ß'<²Tb»åR@),йVDiÄÄÄY–#¥byy™Ó§O£•AEÌÎNqèÐ!\Ï'޶å{ßÿ7Ù9s€_üå_çSŸúçLÍŒð›ÿöÿäÉ'¾DÜÛâKði~çw¾À‰3¯qæô«ÜzË~öì:@m¨ÆV}‹Ñ±öíÛGšF|ë[ßdïÞ]Ô†Ë8~-:H#%J›ìÛ”¹K1Õ¡!LmQ«Ä=e™˜F@šwZiàÚg#L°L‹½» ûŸÁÖV‹VÚàýÔOpñÂÎ=ÃØè(׿Hãyj3T«ÑmuÑ®äÃú>\Û¤¹v¥ ÚT‚­P\£µZ@­æcÛI’b˜v_è5b¢@LXÕju0ú&e†ãØ´;`á86B؆m›ØV±‘6M©%Ý^Äüõë|ðCÆ0 òìÆÚ´l‹ªœ8q‚gŸ}–Ý»wsï½÷2==ÍÂÂÂw}(ˆ¢ˆcÇŽñìsÏrùòe‚ àŽw†á`Ôpccƒv§p°nD¶®Ýnwànýöךç9Q±µµÅ±cÇ0 ƒðÀðàƒâ8N‡—_~™¯œÀu]{ßc<üðÃßñõúƒT¯×£Ùl²ºº:HJNâ„ûî½ÙÙÙ7³Û‰Ê§OŸ¦Õj1<<ÌîÝ»©Õjäy>xÌí÷´} µ,‹ÑÑQ†††ÞÕ|Õœœ–n±•m±ÞZG’‘ÒQÆÓ>Â8¦Ch†x†‡‰‰ p#ä*¬±Œ¹Ö¹†¡B1ÊÎrªç!Þõ›0Ý?¶h´ˆ›\Õ¿x B”¨ÒÓ dºÁ9ÖÍæ-­””ºQgÓØD£ð©Uìw` ‹¡JRXÂë…ºyaÞ…âꟵ7¨×ëÔëõ~: \.Ö®(Š8y²Ï#¿r…r¹Ì­·ÞJ©TÂu]ì~hp³ÞÄ)—RÇ1Ngp†¬AyÞßnQ¯×)—ËìÝ»—£GòÐC‘e­V‹S§Nñꫯ„Þ£G¦Tþ¬ƒ~¯×css“ÍÍM²,£T*}Ç@™ååeNœ8Áúúú€Ë>111˜"Û~®(ŠH’„<Ï¡\årù]™þ½-î(]£K/ë¡»ÎϨ„fHH¸}²F7׿?ñ³T9½Þ5âxÛvð¼),+øSÇÿ¿½LÃd2œ,tž64’&gš§˜ f$Z%ñ†°‚Q¤éôõ}QµI“åh™h˶˜ ö0¥‡£&º³„ÝMÐj £:öÍæð;Y¶° F™'èe=®6®âH‡¥î½ÄyÌk ¯±¼±ÌŒ3Õ;˜t& Œà†B}YA¢¥M¯Óò,†G«ô’M,ÓdllŠo}ó ­V‡ZÍ ÏÓ"n¨Šiº4[Íbl[˜ÈþÁ5ŽTÔw_XJLź ºb*…e<Ï+F»µAšH×ãÂù9î=Rgbb )¶š †kà eÙH­HÒ˜ R¥ÛmÓn÷p]— èt:˜¦Àé ³Yša(ë{() ‡K*qƒJyˆ,O‰z)¶­±lÏ Ée‚Ås@Ï+%år…4Í©Õj|å+_áÁ§øqÂ@˜…Pgˆ"„&ê&8nñ8I’`Ú.žm÷ƺ8T˜¦mYýà BX,:¹î`QÕZEQ!¦ ñ†n¥RrÀ2PýE¹$W Sœ1­5y–¡û"&†1à eYFø¾Ïêêê`0`‘ U1#D!váY’(îb;®m³²¼YˆšÆ6‡µ,<Ï&IŠûIJL02/øy¦eö¬}ØØfè0 0ŒÂ‰\0]%®p0-T®ëaÛ6R*’$F*0 Çöðý€$‘ÈØ<Ë!ðm"£m×&ÍÓ>nÁ Lªf ajâ¤àãv“ˆÍQ”â…Ch-8vìÙ¢a{¤‘Åg~ë?±µ±E«¥è´µšÁýØ#üÌOÿΜy…#÷BÑãÂÅ«üâ/ýSæ/¯ó[Ÿþ}FG`ÏîÛˆã ÛŽì ´ÅÆÆæ:y>O¥R£\.M‰NǵÈ(0††8޹B)‰ïûX–E–¥ýNgq¯ù‡eZ}~iµÈÓœ¹¹9â8F©âžw‡‰ñ1>D?ó­¿Él0R+³¹¾BžZüíO|”K—®ðïþŸÿ›_ú•Ÿçÿןço}ìûù—¿ú/xüñ/ð ?ÿ?‘éœ_ü¥ÿcÇŽóÅßÿ=”²8xð ¥PÅšÍ&Gz€]»vqméÊ^gbj­%ãCtÚ jÃU„T«<·„Ê º©c ×ò-2)‘YN·Ñ¥\­03¹£p2FÃÕql;Àñ|þóoÿ½n›Ææ:¶00l˶ȓ„,IH£˜°ÐÚÚˆõNßÑZ³Y_í uIÓ˜‘Ña´¡i5› Õp§­û¢Þvsb»é¢5T+ÛÿÎ"M3”¤ßà2Ȳ„^¯À‘LOO02ò}T«Cd©º!9r­V‹cÇŽqòäI666øà?ÈÝwß=`…u:’$ù®„՗޽Ĺsçp—Ûo»‡~˜‰‰ |ßG)ÅÜÜ×®3»c–Z­ö† Âm7þw:m³Ù„vçÎÜy猎ŽÁ`ñĉ<õÔSŒsß}÷½IXÍóœååe–––h6›4 êõ:‹‹‹\¾|™ÆVƒ;wòÈ#°wïÞ7¶”R,-/qêô)Ö7Öåüùó´Z­Á½ôúÃéââ"KKK˜¦ÉÐÐ¥Ré]y؂½ÒÑmæã9–¢%¬ÜfÔg2œdDŒàòǶ]\\Ë¥f½1(¡™6Ùˆ7ÙŠl©Œ’0ðŒ!<ÇÃïæÍX† ÁÓ6&†¾éôx«ÄU¥=CQ¹)¸½ wî'LK$á;vø1„<ßC˜¢»£MJ:knÖ»¿Úí6§OŸæÊ•+DQ4ºÚ㘳gÏòüóÏS­V¹óÎ;yä‘GÜQ­5›››,..2<<Ìððð›&:¶×ûo3_Ïgít:´Ûm¦¦¦xï{ßK­V¬«­V‹_|‘çž{Û¶¹ë®»Þ€ÿùÓj{êd~~Ó4Ù·o{÷î}SÓsmm×^{ÕÕUÂ0dnnŽçŸþ û¢mSÒÚÚ×®]ëç~SQï¶µ>SëÉ:‰JP(£ÀéN_Xµ \Ó¬õ¡2lß8Ÿw@Vz$É"q¼ŠïÄóvÀwÙ.† tB¦éâ\¯Ð–¬õ®ÑiÏU&°|:É:Vdƒ*¸ÕI´A¦2¦¼)¦¼iª”0Í ä&qo· ¸y ßéæÕxiœC;‰²ˆ‹õ‹ìw÷ßpgÅœœ¦lòÒÒK,·—90|€»Çî¦l”7X˜«•ÄŠ<‹@–ÐJ±µÕD‹C%ŒŒŒÑlnÑhtq“,Ê0M‡juÏsèõ:h­P}§e”p,‘Û(Y„I%‘J"úÁJqœR­>Zk C 4ZMÆF'‰z6W®,rÇG0ÈI²”8°„‰Â Žc2©(•Z[›$IáÈÓºX„³,#ŽÂ4ñÇöPYJ’dÈLáyv?ÜÀB&2×…ËÒ( Zض¨"¡\dš6†!ÑlÓannŽÙÙY‚ Ït…F©B‰hÇEJ‰ã˜ä2Gk0m™gý[Þ@ãXäyN/ê"„…ah’$îþ „m‚n·3ßÚ¶»—¾ )ž´6fß„Œ M£AG7ËÒ"Œ) IÒ¢ûéû>Y–‘¦)®W0-˸b·]«¦i–<´Òä™àZ­$ Q¯‹iZ4šõbE¥Z&MSZ­-ÂR†&Ë3 Q´†m ªŽãôYA!,@“ç¶]lŠâ8&cÙ¤ IDATŠ"LÓÄu\,Q¼¾^ÒÃq A%J"l×ÁB˜ý*…k ”gôº ¦ŠL&˜–i ”V$2"ŠÀ0ËÇA!sÎóþ¨±mó•¯<Á—¾øR4š9ívJÔë‘KøÀûï ->üñ‘üW.ŸçÙç¾ÎÏÿÂÏñ±ÿ0?ù?ü]”–ü—Ï ç/¡\r) JŽ]!ô†‰{]N^8Çîû¨ ÕèµÛ^€ã€[ñˆ»šûÙÏR¯×¹ûÿcïMƒíºÎóÌg¯µç3Ÿ;ã^\Ì‚($RœDQ´[¶éAC$«ÓÕN9%ÇÖ§"ÇIWw9—;éN·]IÚ•”#ËN9Š,Y¢9Ó¢(R¤‚A1÷¸ã™÷¸öêûÜC‚¤$JI°……øqï=ggŸõ­w½ßó^¿‹|à¬^½:Jk·™»8G·Ó…Ñ·ÿš'Oä›»vîâöÛog×®]”J¥ÁâiíÚµ$I‚eY'þÛuÆæÁ|&;wîäñ¹é¦›©»¦iR«Õ˜X5A­^ãÈá#œ?~à°ýˆ¢ˆ}ûöñõ¾ÎK^byy™$I‚€jµÊîÝ»¹ë®»Ø³gccc—,Ž”RÌ]œãÈá#ÌÏÏsáü~ï÷~ï-1+®ÕV«…뺃Ͱ+qh43É ›/°Ð›ãgF‰ o[Ø?RU´ŠìÚÉ«Íãœne±•á)M½ZÇuÜ+ôÉР»Ý jÀ(#Œ«¾ÊËy}ó­ä«bõ;´œChÔiHòýž|˜R©Ä]wÝÅÞ½{¬mX^^fïÞ½ìÝ»—›nº‰Z­6VB,¥”ضý¶ðoœë·lÙÂý÷ßÏM7Ýĺuëu„çyìܹ“Ó§OsèÐ!<8à¿þ EäÁdff†M›6q÷Ýw³{÷îKéËËËœlÓfÃÔ¶LlÁ2ÞB½i’L-m4*Õ˜® UŠZuSZ9‹QÚØE•ÚÃÂód|Åx MîÒÔÚ S-r·¢m»(må-ßý…n‰0ŒètºŒM !#cqþÂ<½’Ø X¨17ߣV«a)¦#™ Ц4IÒ˜N·=ØqìõzHibÛ.Q˜ ý[‰†JraSæÇŸ)H5d ¤È±Z«\piöY¢6 P™-ˆÂÜÝE16lì;Ò,0tþ>Fî°¤X—ƒ@z&ZDqŒ4e?¥]cš`Yfßšáú."Šû¡&Iœ §RØH!1ÈïLÙOÙLZˆ>> Ë…›,C¥ ¶i÷EE…AîVJyû±Î Œ~xTv(Ê}<‚"Ëòã’~k}H–Ê2²4#NblË&ŽC„ Õ)WJ´{M@aš–-Q*AJ£ï´M0 ÝOì&¦B œ¸qR½óõèÑJkƒ$Ñý`0'¶µÆq\¤%sVªÎaß*ð Ç…^Ø#ŒSll)A”`¶,  ƒLÐ&:« !â°Í…ó9{æ6##ËRº OrOŠ…ÊÀ-ôZÔëez¾çSð\š%ŠE‰À–&Ú¶q,•¤ZÓl-Q,ÈiXtº-ǤÓiaÛ¥’Ïìùs$IÈðð$†(…Ñ ý,çý9ƒï¨8Οi­A¥š8R8Ž›ãM´ ÒSÛ¶,R• fÍæ2ÅR-ç¿ Î(Š8}ú4Ï?ÿ<¯¼ò k×­¸3]×%Iס\)Ón·ßöëJ)£Ùlrþüy>L¥Rarr2qê»î/Ù }CÛÿZl†A½^gÍš5Ôj5<ψ•žç1::Êøø8_:H«Õ¢ÙlR¯×ó”ÕþïI)cûµÛ±,‹N;oG¼xñ"ÍV“™™öïßÏää$¦ix¯J)Z­Fƒ$IbzÍ4S“Sý.KY¬Íf“ÓgN†!¶m399ÉÈÈÈ[аWBÕŒš,‹ Ë1ÖTÖ2âŽâIïG.¥!ñMŸz¡B›&­v“Ù,ï©3„‹{å˜ZCØÅH·NäU§Çåÿ®Žwh1—8—ZPgÒ¢bWÞÓãQ¤ÄÄ(ÔÕ›ó>N‡Ã‡óä“O²oß>Êå2{öìᦛnbÕªU¶¨”’J¥B©Tbvv–£G244ÄÚµk©T* …·Å9ý¾ß†A¥RazzšáááK¸¦žç122B­V„a5›M†‡‡ß$޾¾~X^^æÅ_äÉ'ŸäÈ‘#lݺ•;î¸cÐù²²‰ºR+¶Z-â8fllŒ7222B¡Px“°º¸¸È™3gXZZ¶mFGGYµjÕ%F›÷JPMHhe-ÃEaƒº]§f×\\œKæá€`°!sªwŠ%µÄˆ7BÑ(æk´«ƒ(j†ç0 —bqÛù±æ·Ì€¥}F‚€^»…¿væððK è\à61)P`ئd–.E6`HG¸²5 ^ÄÕâwe.FP–e*²Â }‚¹tŽ[ô-ï›ãO“”V·Å±î16âiiošµÞZj¢ö¾s«˜Â0)}Ht¦ð‹6í F¾¸LRE&˜V‰¤×#Mcl»@½nÓê˜ùUŸ÷¦µ! \×#LÂ<ÌIXd*wI’i¬¾³°Õ XXX`ÍÚ ´6ÐF†iÙŒWhµB:„ááq Èù…„˜™Äq\¤G¡PÌ[Òã”,×ÍSë‹ÅRŸ——¡3ÄÀ²]¤T(•a¹XgY¦i&¯¬ß掑Ò$IŒ”9g4B,3w,ÅqÌš5kˆã•*,;ŸZlÛêO€­I’æ-ÆIÜY|)Èú3¤4)Š}îOÔ ¤´Pi.¦Àè·vC¦Á²$Y–ß‹4Mz=TšâV´Ê†Ä+X€j¥†!òÓ21„A·Ûë»í „xíø¤4ˆTB¯ZöÓ4E¥fÙìóQÁó|z½<¬ªÝiä‚°)Îו–èü^¨þkAö†DôÝ£ZåîÉ(Š"©U¦ˆ£ˆ$‰Ê"Ó ×³1d~=…9.X˜fSLÎ)ŠÒÓ²ITF¦Âð)W\0„t°¤ Â&޳§<{t??ò/½tˆ¹…óœ<b»…°íÚQFGǨTÊ\»}3×^»–úp‰‰‰aþæÁ/ó™¿ûIΜ;ÈÙsçH’˜›wïáßüŸʧ>ùsŒ¬ç¯ý3jµë׬á±G^àÄñSÄ‘¦Õî2>Z £E±Xdxz=†‘ ‰0ŒÜ­'!õZ…4Î]ªÝ^@Á+àº%zÝ^ß9­0 HÓœ1ªµ&NrÑ/w;¤iB8ž‹cYDa—LEdJ!¤Ö)õ *Ké…=|¿Z±4‘B±J»ÓcÓ¦Õx¾ÍøÁÿÑðëó4–ç®–øñ9~çwŸûÿËó§¹ï§>ÄÿÑâÚk·rÛm{Ù¿?ýÙû¸eÉÁGyè«Ïò»ßþ7lݺ{ïÛËÑÃg˜œXM½6Äùshd*Æ*‹H‚(Oˆ­T±“Ærƒ,ËHUn/ÆvêõÝ^ÃÐt:Õj‚ï…Â0Ñ™Æ22Ònv¦fdd”v;/x+e0Œ°m›R©HtÑFÖo1O<n¥õÅ}ýz>ÖŠ˜˜ã,’Dõ÷QÑn·ð ~? 7Àr­‡9U½þæ”xßðWødÏ=÷½^5ÓkØsóÆÇÇ‹ß÷bqañžØ÷®ë²}ûvš\œ|úé§I’„72555B]×¥X,~ÏÐZlù¾O½^S€„”’j¥ÊèÈ(–e Ü¢¯çTC>—lÚ´‰jµÊõ×_?ÖŸ8Îw¾ó¼x€'žx‚B¡€mÛƒÅZE4 Z­–e±fínÝ{+»wïàYVÄß4M9qòO<ñDÎÞÆ`Íš5ŒÿPÎwzÑ•‘¡´"JC–Ã%Â0d}q3Іø±…OƒŠ[aÂçŒ:KC/#•Df&–°0¯´§FgdA—¬ÛDÖÇ0üRžtu\&IÕ@h SÛiR‘·©\—e$@üÐcÒ[EÕ©¾'ÂŽ0$¶°óÚHÇ(}UX½’Ç Çüܹs<ýôÓ<öØc\¼x‘;3û￟k¯½ö©mÛLOO³aÃ.\¸ÀóÏ?RŠùùyV­ZÅÐÐÐ`Ž/ ?ö\ÿš浟­„cY–Õï¾kå!ÆŽó¦Ï|–e´ÛmNœ8ÁÃ?̾}ûÃÛn»{ï½— 6\²á™¦)ËËË´Û¹IhݺuÜqÇlÛ¶ÑÑÑK‚®LÓäå—_æßøKKK‹E&&&X³fÍ{:×k4))Kj‰SÑ).v/’¥{ë{©[õ÷Æ9~EP†àt÷4‡Û‡™Wó(S1fQ5ªÄO¼{5Ž[´Ûð¼)ŠÅMHé^¶û–%ªa€•HFF¯Ç¿C:ý{óšsØXù÷ßñÂx¢Œk”ÉÚ³(ÃD:å«Âê»Xë”E™ª¬ÒÖm.¤ˆu|Å£V‚vƒ0 ÑnpäÂ^X| {‚µLÚ“W^Ýþ¶…UabšRØDQ80M ­2,ÓĶlÚí.޳ „a"…¤^w9t$eiiáÑ) Ë##ÒD“ ú)ôq“¨~ðP¿­È2“¹¹EzÝÓ´Û-T…b™‹—i·B@bÈ!ó:Ó‚L›$IÞ¿ÂÌ™£¥4¶e#¥IFDQ‚myx””’0 q]wàÆ\Y†1B E7“z=Â0oÉ×}¡XÇ ½  X(á¹>©Šû®JÑO­ÏùІa U?|JdÊ@¹S0ìå©ô®cEQ”®ôíÓíónK¥ŽS¤Û û‹éÜá*¥ÙoËg0I+•âû>ËÍNŸ³écYÊVdRÇñ MT%aÞE i¢HUš»üRE„ý÷˲a-y¸–êZÉAàVŽ `Àr·Ï_Í–ãz@ŸÇ* Û# ã~ Wîš•ÂÀ2ó÷êõzhc#”RdZá<Ò4Ešf¨,ÅÐàØ>qœ‡M¹¶M’dœ:s•el¿î:º]úN!‹¨(AÉðØZ ÛCuCíVÌ«¯žá…sðà+}å8çN-!åŠA’&tº)×l+³yÃZ¦¦'سwëÖM³nã¤ñ_ü/lÜp#_ÿúŸó¡ÝN§=OÐëðø£òÉš}ß}‰jÙç3Ÿþû=ú ‡_žçÃ÷ÜÁ×§Ÿ:ÀþýG8}ê<ë6NÇKyHY‡|‹(AgŒOŒ©„^¯iHÊåZgzù ““Ó¬ZµŠN·3a³LõCÑ ÚÖ ð´,‰iJ‚ ÇüÅ‹Ôëu<ßÍS¹ûB»Nò¿µ-‹,³r÷oœ M“n§…cû´ÚKlÞ¼žŸÿÙÛxøÁýüÆçzضCuÙsËMÜÿsæ±Gá×ó·h.5¸ùæøoñE~û·ÿ)ßMΜ|•é©1üB‰Ñq>ös§×îñ?¾òeþÝ¿þ„‘â®»æçîÿinøÀNªå)Ê%Ÿ¥¥yÛÆ4óð‚0¢ßu)W yrl+¢\.‘¦¦))]4šn§×Ç} Ì>·X£²Ë´° Ë1I¢ž— ]Žëáy)•Ê E’8y„8nÓ̶Åb‘8Ž› a¢”´o\²Ì@e1*K2GUô‚•J‰å¥††ªDQ€”ù¦i^ù»w+æéÓ§ùÆ7¾ÁóÏ?Ï?øAî¼ãN6nÜ8p˜Ø¶ã:H)éöºƒï×Ä ó}Ÿ[o½­5ßúÖ·˜å«_ý*Y–w xžÇÚukÙ±c÷Ýw›7mîo>ýp…F©TbhhÛ¶/)(_Ïf[9ß·zíœ \Áó<ÆÇÇɲŒ,˸îºëظq#¥R‰§¿õ4?ü0•J…7211AE,//Óh4°m›7rë­·²cÇJ¥ÒàX„DQ”‡b5šd*cdd„±±±A`Ú•022Z´˜æYè,똑ò(5§†¼Œ-c>Æ¥EµZc.˜c®7Hõr+mÓ[£éêAÖ b¬Ç¦Œq5bé² ‰MIOÅ.r)€’¥âÕ€°Ë4Ú´9ªrÌ|³¨1÷æ8*V™)Š…l–óé)ÚÙµWoÎ^9r„|Gy„³gÏrË-·p÷Ýw³sçNjµÚ%ó–ïûÜpà |ûÛßfvv–‡zˆ¯}íkƒð¦Õ«WsóÍ7së­·²}ûöúx^/¬¾Ñýº2×®üÿF¬ÓGìÛ·Gy„x€r¹Ì‡>ô!î¸ã6oÞ<¨_/2/,, Øé“““ìØ±ƒ;v066v‰°ê8Ífs^Y­V`Þ«¡P,é%ž^~š'.>ÁµÕk¹}ôv*Vëmò6ÇÜ1¤œìäÕÆ«„ÅéKŠß·âÊå¬2c÷ŒËT/iÅó4û‰ŒYY‡é”1¥·1þP»[Fi©)i,?M›"y`øÕñÎaF £¬-¯Å8k0·4‡šPWü†D†ÌÌÌÐŽÚø«|ŽgÇy®ñ÷_s?ÛWo§êWß·÷Ä\I4RfFѵhuS¤x¾Oš fg/b›ûœM…ÎbV­ÃqÎÇIî0T†È‘:êïlè|¢ITî“ÂÄLË¢Trh5Û¸®‡ét:µzr¥ÆÙÓ3Ò!NbLázý¦u|¯œ‹zÄ@Úg9ÎÀÊÀÝn·/lB%$Z#aÀ£‰ãÜAjÛ+íñY?h&ášÂÌ'2•jt–O¼ ‹T+5Š…r.ƤÚÔæJú´a cE\í_à M™¡±ÛVýVu!,,S’ez€È…Î ƒrÏ<»ï;¬žEš’¸’D H™ñÿáÿ̯}öã|í«_ç _ø2ÿèÉßgxÈc÷î=|æ3Ÿbdt Å4šK¤iB©T4 y«•i£²C ÝGuX¦…ró½4ÉÐ #çFQ.˜¦Ä¶M4a@&é´» `&I¬ð|ßvˆ“0ìÇ*ç·Úö `^y6WBåVž‘• °j­Šï‰‚Cdd:%ŠÒA8œcÛ,..äÎÚ8G$‰Ä¿ÂÃWοÕjqöìYNœ8ÁÔÔ/x‘ BeÇ=z”ÇO°¸°ˆeY|ýë_çÌ™3ŒŽŽ2==ÍÈÈÈ›b¶m³~Ýz’$Ás=Μ9Ãòò2 ,--Ñn·9xð çϟϯ{œ055õC±ÈV¹ol½ÿ~Bê[½F¾e^²`[9ŽS'OqìØ1¼p€3gÎ077G½^ïsÂCâ8çêV+UÆÆÆîœ×/òVœ²K‹yªñÖ­[©×ëWŒ[uPh`’¨„F¼ŒcºŒ¸#äå ™±°0 “¢] Hfºçèêî¹s¯„„Ј)b6W[×/ß0„‰åAjbÄ-HLÐ>pUX½#1g™Èï1Z˜¤`¿7“’%lŠf‘¹4zMÂ$¼zs®ÐÑjµ8yò$>ú(O=õ½^­[·òá˜]»vQ¯×ßêdYÓÓÓƒLˆÓ§O3;;Ëüüü`®?räÈ@p4M“ééé79Oßî\ÿÆá­æù·ríi­i48p€ÇœgŸ}×uÙ¹s'÷Üs×\s årùM›yàs8X“ jµõzjµ:q_ß¡Òl6) lÚ´‰±±±÷œ§d³Á,§§˜ŸÅl†’!̪Ʉ7AÑ)þ@‘Ç“cαŠIƒ”VÜâ¬q– ÎÌŸXçc¤X( ¸ØÚ¾ŒBF.6‘V}#Ú* ”*Ä`Ȳ2¡P@ü¾ Ù}ßÖ:†4$5·Fͪáh‡¥îí¨MM_y­ô+ëÃ0óîp#âTçMšŒVFÙ4´‰©Ò®tß·÷Ä4-™ó630ÈHU†!4®c‘¦6Yæ23{!gf.‘0 zÃ#CXVOeÄq‚V Ç‘XŽƒ2L0òT¹T¥…:Œ FJuvîÜÎÅ‹38ŽC£µ@£ÝeÔ.bÛ6çÏϱ¸°ŒçgŠ)†™§Ç;– ^öm\!H“¨Ÿ8¯Q*EÊÜÁc¹8"$9§E¥¤Q· Ù&½^D’}Þ§"I™R`dƒEiæ¡':ëwR*•Ðèm6Ùÿ«×çÊg%ø)Ë2¤01¥…2²>¢ ç%ê,·Ò¯„5ù¾ƒm©<)<0úÈ£ß.’c ´^ Õ’Çn¦ußk÷Ó­M„m ½"i’$¹Ø#2!òVþ,ÓýI]ôAîùy§©"Ž£‹Ì4-²L` R#?wÅ-›õ/GÄq‚iZø²Hwéõ|¯ˆm;ôzRH´4p]?w§9V AJ”‚<Í>ícD¿E6 ×£ß~"¬üʧY "ç†BŠͥ6žç#€B©Ê¹s1ÿò_ý<üû_8†çB¹l³eóv¶nYêÉ)Nœ8K§ÝeíšIn½c=õ!‹jµJµVÎ]Ì*ÀuæiÜŵM¾õ­oR©îºûù›¹ûö;0X¶K«1ÃÝwÞËüù39òŸúôÿBvxõÕÓ$‘¢àAFü½_ý;<þø |ùËó+ïï2:¼ž8]Æq,)QÊ"c––±m‰eIzA7çËZ&¶íðÁÛn#Š"|¿@Öÿü™¦D)R0<<Ô¿ÿyc.FÞZäû¶)s&«)ISKZ˜R¢…Îú؉>£8#GUtÃ¥rËqXXh°}»Ïc?Åu×mÃrL¢0 Ãäæ½wò•¿~€ßøŸ#M·ìÙÃ?ÂOÿô½:ø<7Ýx-Bdiߥ4Aoϯñ©_þ8ÿø'8røO<ñ_ûÚßòÅ/þ ×mßɧùVîºçfVMÓé¶HÒˆRi” P”k£ A·ƒéØtÛmŠE—(JHh2Li´l IDATQ¾ec[h4®k£²”8ޱÜQ¬¨×‹ÌÍ/b`Q)׉¢œ{¬Ò Ã0q"Z›¤iT·ÂÙ\)¢W\ò…r™¨×#æ.é)ÇÀ0BçÌê8ebbŒ¥¥y*µO~ó ÖL¯fý–i\ÇCeÆûf²_ù~ Ã_|‘“'O^Â*ÕZÓét˜ŸŸ§Ýnc_øÂؼy3×]w?õS?E­V{“H(¥¤\.sí¶kY=µš ‚-sþüyŽ?γÏ>Ë‘#G@ç­2÷ÜsÏ›mo÷<.ǵxãëø¾ÏÈÈÃCù{±Û¥Õjõ9ÛÆ›þæ.YÈéKKKœ?žv§ÍæÍ›¹ñÆ©ÕjWT …@àããá"´ÀƦB—Ë_8­,àò@&#ÍÒ¼]ø .uÿßÊ‘_—óC'1ü…^šl †¯^—Ë&\k„%¿À¤µ–ª¨¿'Ï—4dž$ž ¢žF%WïÍ•6V6"OœÈ‘5?ü0/^dûöíÜu×]ÜvÛmŒ¿%|…±êº.###ôz=ºÝ.KKKÌÎÎrâÄ öïßÏâãG?úÑA8æ»1×kÏß/½ô=ôÏ<ó ËËËÜqÇÜu×]ÜtÓM Ïúã{ÍõðÚ&ì 2`nnŽV«ÅØØ»víb||ü=¿¿Ý¤Ëùöy¢^Äh:ÊìÌ,\x€hMÄŽ±¬«¬£`.es¾Å°…Í”?…%,ŽõŽq::Íêúj<áý„âZ/aé„’(#âå»ZCØ€¥¶ÚváG¯C Œ<4Õ¨(WÇ»9\Óe¼8ÎXaŒóóÌ÷æ™ÔW^;½Öš^¯GGø%mkž=ÿ,pÇôl­l¥&kïk§º™© !@Úy {„ã˜ô‚6Z™œ"Ëb’8!MS\·@–™‹æç5½^' S‹$Sý–ñ|ÑgÚyKw†”Yš;Ó4Ã÷}Ž?Îòr×wp’i &''AK al´N¤æÂÄ-ø¨T` !3rH¾æDÍC§ò]ËTÅ}¥@Æ -!ÀvòÖÿ ì¡ú¢¯Ïsû‚¥—CѨ/˜X¸žK§Ý8‰„d*Cét0©¯L‚Q Ú6ó‚¾c5ðX¼LÓ&IR’D‘ÄŠbÑéYåÔh£Ñ`qq‰ñññçUJÙç“æ­ÞÝn0h÷ÃKJ\×!È’~h”Â4úM‡"× ãèuÌSƒ8Î]²¶mãû>I’ Üv†a’¦ñ »PTª±m ™è§Óç!f®ëa ‰ãPø~98_Ð8Ž—s)]Êb:ía ¥ì·lƒç¹¤iÒhÒ`€î³Ss§qþ¥ž© ËrИ„aÂ7Ÿ|šgŸÝÇ‹/ÍðôsÙ}Ã:~óó烷ÞL­^fr|œ™Ù³œ9s†u›¶2<4ÌÈpµk«tº ¤J!€4Ž:í(ß@° tÚM^>x˜OüÒßaöÔ)„aâØ>‚F£ƒÄÆê»G“4dËÖµ¤Y›g¿ýi 6n"I—øÀ[¸ù– <öàq¾ð§_æüúÇ@·ˆãáJÛ$ Úí®ëP*ûôºæ.\`dd„Fs™‰á –q‡¨òU«Õèv»´ÛÁs·²!s@%Ò„ÆbH¦RÒþ¢Ä”e˜"Åu<’$¥Óé`L¤éÄ Ò21m›v·Ëñ'¹ë®;yåèalÇC‘éÓöÙ±ýüõW`a¾Áøä$×\³•¯}õK|ò÷c ÍÜ…3lÚ¸f‚ç9<ñøS Orý®=*5¶\³ë?p=¿ô±ò‹ùâŸ}‘ÏÿÖÿC­öùÙŸ½…Ï~ö³LNM±´´€ãY˜Ø®‰R’åÆ"…b%gÌ&)žWÄu< aqþÂÉü9ǵ°}H {=ËE–MºÝ€‘á Ê•!ºíR8H!úÈ>ÝGˆdØŽ8 ’$ E*• Ýn—ÙÙY&'')W+ Õð‹’éCH ŸjÕ"Ibâ8á•#/sÍ5[ÑZñÊáWY³f=•rý}!ªZ–ÅØØ7Þxã Èë5ç»îw?äŒÚ$ίUš¦”J%ªÕ*•JåMlÓKvh¥¤T*Q*•^+C•¢Ñh0;; ÀÜÜ'NœàðáÃìÞ½›‘‘‘wåÜß–î#r<ÊŠ«\1p*¯¸s\×íóvC‚ x“{fqq‘§Ÿ~šgžy­5[¶laïÞ½T«Õ÷ÜÅòFQ¡HIÉÈ}qõÜI·M›j¡JœížaÔ£î\yÏÎU9õ¼°–IšôŒe,\\²«×û²=Ô†8¡OÝ¡P)½'Ÿfßò+Œq¡{”èç\WÒH’„£Gò·û·<òÈ#ÌÍͱiÓ&î¾ûnî¾ûn¦§§¿ïF ”ß÷/q¡j­i6›œ={ß÷9qâgΜá¹çžãÖ[oÍב?‚ÿG™ë———9tè>ø O=õZk®¿þzî»ï>vîÜù}ÅÏlÔçú×#â8æùçŸçå—_&Žc®»î:n¾ùfV­ZõžßßT¥iÀ3Äú‰õ[<Æñåãpýn»óÚ½ETFŠjµŽã˜\¼xtÊÐpwtx †{¾Çää$q’ ’œ§=T’à;†V$aˆÖ²H‴ï`ÎC×2”JÑ,+c¥'¤Û ÈTb&……)²,@H“úp•Sgfi6Ú.Õú03³Kœ›½À†M£,-ž#ÕÚc“<öø7øØÇ~žZ5w ,5–¸á;˜¿0‹)RÆÆÆè q”²qý5ø~ RÅÑCû©T‡qË’‘q‹û·ÜÎÏÜ3û÷¿Ê_þùWùžáK_ú4wèƒüÂ/|˜k·oEc!MDŠëUs÷¶0”BЋb,SÐé˕Р: @š‚4S4í<ä+ÖØŽÉòÂ"F_øB  „)sG¯R9×èo®t;´Öxž;Zã8ÆHb„4r‡¼È7â(Áõ   š­&ÝNÓ4ã‰ÇcÝÆ ø^ Ó.½o„Õ©©)>üá³uëÖ7-œ à IŽ?Î7¾ñ T–ÿøÇNŒ•M¤K‹Íüo6›è¾CEÔZã8¬ž^ÍĪ zÇ{„Qø¦…Ê;uÞQÁÀi¿ÂÜ]ùù ÖäÕW_åðáÜ9{Û²©×댎Žöñ4õzZ­6H>}ú47nìo¦å›u‡âÑÇåСC¬[·Ž;wrÍ5×¼‰ ûž/´b^ÏÓÊZXÒÂ3ýÜáðŽ‚]`TŽr¶}†í“Hú"…Õ«ãÔþ´Fé„-<ªØè«Ü·Ë&¦(ºÝˆn#F(¿7òGÑ)2Yžd¦;“wÎ^WÔó×ëõ8wî>ø O<ñÇŽcË–-ÜsÏ=Üpà ŒŒŒ 6^_/6š¦9Àu:¢(Âó¼A—ÞJÇÞèèè ¬qnnŽF£A’¼;¶e¥Q œª=öív›½{÷rï½÷²mÛ6J¥RŽÚëÏÙ+›Â+çgš&CCCT*LÓdqq‘sçαqãÆK°@333<þøãœrá{|add8¦ƒ«\"«xbÿôôe íÖ –YÁªŒ .gý’†60žY \Z‹”þõ’&ecC‘4@¸`¼7n?‘ª°Yå­buq53ÝZªEvMŠ™ÊÑx™ÎˆeÌ…ìOÏ=Í /PrJlªlbki+%«ô¾¿f©P$ìEh²4Ã0i$ží*/cfv‘,ñ±¤BZ)Zw"¦R€^TE1Â0¦A§ÝÂr%QÜÃÅ”yPL.<„d™Á5[¯áƒ·ÝEÁ¯³¼Ð£P(P(V˜ 1eŠJ#J…RÞ¦ŸöhvºdIˆ-NËIPi—$yMEƒãZÄI†0r'¥)llÛA'y¢¶0–e#…Ä*x¨4%ŠrG®¡sáÐ’L§h¡ITJØMp’aš9;1N ã¼¾^% ›t»9ŸÔq,’4ÁuMâ8!NŽí¡uî¦4MA’FýšŒ0ê’éÑ_„[HŽ#ó`•‘e! V«¦)Iâ8¹Pj™™Ê7²´T ™Ä¶–i …À0$½^۱Ȕ´LÒ$w°¶:MLËÆ¶-¤•‡b¥™Â‚Lk¢4E©,g B‚,SC  ! L[ ”&JrnFfh¤¤I‚i™yê|¡Ò„,;Ž-û_º ¦™A¦ »¼`ö< C¤Û4‰Ã$G$1ݰƒcZø®C»ÕÂvÛ&èèL1B8ŽÅŽײ}ÇÂÄåÄÙyzø!¾»ï»Üyç^nÛ{3Î#Ãc”‹’™s§ÃÏ'UA/Ų$:K±Mϲ±…‚ âÂܦ׭¡½¸Àr#fÕÔ0i–!¤G”v¸8–O}æüùŸ}…éÉõئdv!¦Xp¨ Nœ|™4Ih.Ïsûí»ùåOýOüÙý2õ?þ†[oßÁP½N£3‹Wð°,AhÆÆÆ°]›^§Kšf”Je ¡Xh´ð}Ÿ4V§Dª5Â0IT„04~¡@§ÛCšéæÜG-:Qý”zsžD”Êp—”ˆvPð‹XŽEªb‚n‹TgK#ªÄäd…¹ù/â:M–?ú6oúyæçNõ$×︑ŸùÈm|å¯þš|h/irÛÞ›¸pî$S“£,6.fšmÁÂr Œ ‡Í勸¦iÄüÙ34{-Ü›Úp™k¯a÷¿ÁgýøË/>Â×þú)äìºþz>ñÉûùнwâʈ$¥ÑZf¸jã¹&I–Òº$Y åt²¡lR-h,µñm£_8›:wØ-]œg¹¹ÌøøÚµh,7(U‹˜¦ÈÅB"ÃÑѤ”å~öp‹éÕض9pK»Š6ÂÖ$±BjP™Âò}âv›ñ¡aÎ;Çó/<Ïî›w“)Eu1ß'èß÷Y¿~ý[rÀV6o:A»ÓGFFؾ};Û¶m£P(¼)uwÅÑqþüyzè!’$,ªVX¨+l×#‡pîì9,Ë¢V­ Ø·ïäR277ÇóÏ?ÏéÓ§±›ZµF¥RüN’$ÌÌÌpà¥8p€F£Áú ëY¿~=CCCƒvÈjµÊøø8Åb‘ÙÙYž{î9ÆÇÇ!Ë2fggùÎw¾Ãìì,ÓÓÓ|ô£e×®]ßÓåûž.¼2ÅÅöB1éM1æŒa¾MŽYi—ÏÛÌÞ^‘ncSU–Xd1[Béôjå}{+ÏÑßœ½ò8_¨kWÛ/ßÓˆ ÁEfÓYz…å*4ï¾»L[æõ|ªV’b¯Ž+a$I‘#GøÖ·¾ÅÃ?ÌÌÌ Åb‘ééiªÕ*ív›cÇŽ]•eµZ-¯sm›ÙÙY¾ýíosâÄ ¶nÝÊðð0Åb)%išÒh48tèçÏŸÇó<¦¦¦.Á ½Ó¢ñ¾}ûxôÑGùæ7¿ÉÂÂSSSLLLP,™››cyyù’ºCA½^gbbÓ41ÍÜd4::JµZåÂ… ìß¿Ÿz½ŽRŠ 8sæ ‡âÅ_¤T*±{÷nöìÙsIÖ{"”Ñ£GHˆ‡GI”¨ÚUüªc9˜¾ÉáÅÜmŸåë¿Î±ø{K{Ù^ÞN¡Xøžáš¶°ñGÐRs¾sžÌËóóp«Ÿ´ ¥¤©Ð—óÜÓÝ9ŽšPÃp'‘bˆŸón"¨CÔ„VJepKWuÕwKX5l&Äz‚ï¶¾Ë|}ž4{wë^ݯ_ÏØÕ:ǶÛmÒ$%ÎbŽGùNó;n&s3î\}'× ]ƒoúÿ¿¸¦DP𠘆@ˆúŸù5²LḰz­Ë™z&Ò5èóTª&'ë¸\˜mE=zß“8žASExÒësFÁóŠHÓ$SŠR¥D(:í6'Nœ¤\®³yóÚEÖ¯óèu–¹0Ó$C $UŠ,KA ÊE»/d¤YF‚ÎijôSê3 áõ• •¦(!ÐÒ!M2\×ÁqdßYštz}1ÔÇór~]«ÝÄ05iÇñÐiJœ$X–Deš(‰)•*8¶ËÜÂ"IÐ ŠÂ0IJs©ç9}Žiž žs[m„a“¤1Òtð Q˜óS•б,—„×’'¥4±ì\ÐÕ¤$iî$-—Ë„aH”)(• ôº]šÍ.è Ó´P*ììj­PÊ Š.i–æNÇ‚Ÿ_¯~æîOþ¥r…4MòVµÂY50D.¾eZaÈ2M»Ûî·–Û"ßeîv;8+müŽ—;`³ 4MT”EFŒŒŒpËÞ[ضmårypÞ¥R‰uëÖ±yófΞ=Ë¡C‡¨ÕjT«U”Rœ>sš‹.R*–صk÷Þ{/SSSWäç Ó˽e¤a2ZeÈz[ZœÅt’½¤K–iFü<óíñÖ$Ÿ¸ZÙÿø‹¼Œ4í T¯ÿlû˜fá²¥¿óãêgàrŽ8‹YŠY2aH#|ñž¸äMLí€ÒªG¢¯BV¯”‘¦)'NœàÉ'Ÿdß¾}†ÁúõëóùëôifffÞ4ǦiʦM›Ø³g£££´Z-8À“O>ÉÌÌ £££ ¹(—‡€¶8~ü8I’pÍ5×pà 7P©TÞ´!ûVsùëk·³éúÆßéõzìß¿Ÿgžy†—^ziÐQ×ív)—̃Y†mÛlÛ¶mÀ\Bà8ÓÓÓlݺ•ðÊ+¯àº.çÏŸ' CNž<É©S§PJ±mÛ6î¹ç¶mÛö–LÚw{^o¨½¤G!+P‘¤!);ÿ{ooÉUÖ{×Z5מÎ>óÐóÎD’Î@Bì0$ æI|EÔr½*¨ Þ¾*(ê½ x¯À« á‚÷ePD„È$‚ ™ÈD’NHz>§Ï°Çš«Öý£öÞI èNÒë¯|ÒUgWÕÞµÖ³~Ïó|5|Ûgº9Íx}œ¯íùW·¯fùð2"8…ÃwÞýTHšÒdÊB ÍÚ?@ Ÿ;Žz ö1àÆ?Œù¢"é“¶÷FkèÆ&ð€ ÍØQ Î÷!éBÖ;[_zFÃ&“Æ$“r’ƒýƒ,F‹„:¤Aãg6ôòݤKÄEL¦3Ò¬¬º_][%MRâ<æ†ànInA¸‚S;8oþ<6XŽ9£­Ÿ8.I³ Ó°([ÉS’4DZYžc+Åìì y~-ý~Ï,U§9õz,+ù2RÉQ{ƒa˜Ø–ºl{LÓ)MœÁ†1‰Úí.Hƒ~Ð#ŠúŒ5´ÖÚt:íA%&Zܦ¥ˆc°mÈé Bhq·ÛvQ@žge…c20hR)MòŠ\—¢h^rb‡}Ά!±m“n·C‘çTª<Ï%ÓVQ>ÇqÈóœ~/$ÏKÇî,H’¸4ËJbú½.¾çŽ*¦@—-鎇0 Â0 ŠRÐ ÃUæÐèªäV¢Å¨5¤(òÁß(7êq`Yö`’-g(Ó4Y[[#ÏsÇ!IŠân&ì°íuØ&žçÓ´Bƒ.µR”ÈÛ¶‰¢hÔ¢*D)<ǃö!Ä  Š"ÃgÇ2]#²¬<϶m”di)î¦iŠçyAP™æ½„€¼(F¬¡^ DŒmÙhQÞ{D&!¤vÐý.µF“4Íʤ½~J¥>MÐ ¸ó‡¸åÖÛùÌç¾Îrk?ý^Ÿ~¿’ã|ïº%žó¬K¸ô­¯ä¥/}.i# A‰ð+.JAFmÄYŒã:dE>rû®×Çÿ-ÊjÄ Gž9|ï{ßc||¥$óósÔu²8椓vàºpæÎsX]ÞÍw¾}=ÏyÎÙ}ëíÔÇfyýfKïàï?ôeq~éå/Á0C¢´4m £Be4êÓe •î“Å1Ò‘˜Á*¶=m¹DaÛv± “ ˆ1 ÇöIÒŒ~/Á«TiŒUÈÂÃtФdyŽI–k¤²q<50z ÉÒ˜©é ´”,¯.395Åu×]Íu×ôù…_8‰þZk®¾Jm¯;A” *õ:§î<—ÆÔgÉ¥W&KDÕN‡ÉÄeyM3y4Æj¤½‘äQ‚)’㛤#s(¡ËyÉD“fÊŸ K¯P©Mò›¯ÿ¯<ã…Ïá_>÷yþöï>ÅÿóŠßå”S¶óªW¾—<ïY„Ýt‘’tz$­.›''©T(r„̈ X Br!qk>ÚÌH’Œjµ‚6s·×HD†7=Ží»¥èõÚô‚˜™ÊB ×'ˆ„4°=¡L”2±”‰a$LO“ç–0ʤ0èw»Ü|Ýõœ°};¾ka+ƒñF)BÕë ò‚ZãÑ“‘¯T+ÌÏÏÇñ4…T*fffغm+­v‹«¯¹š¯}ík„aH1@·Ôëu6oÞÌ ^ð.¸àN>ùdjµûöíÍ¡$Ü—yÔwÏ“ïû¬[·Ž¥¥%:ÈwÜÁêÊ*«««DQ„RŠÙÙYvœ¸ƒu ë8éēصkóóó÷ªà0M“3Ï<)%ßøÆ7¸ò»WòÉO~²LÞ&³ó³œ~Úéœ{~úéÌÏÏØÚǦ¬UÊ¡Gꫵf5ZåÚ•k¸mõ6¢4âÛ^ȦÚ&ÔŠyú¸7íÃø®&ôz·ÒíÞ‚Ö•Ê6êõS1 ÿøÃyŒ)U§Êú±õŒycGåªT™Õ³‘fO¸‡VÒ:þÅCë{´ÛmºÝ.7ÝtwÝuרÃä‡GEüüÏÿ<[¶lannŽÙÙY¶mÛÆwÜÁM7ÝÄ7¾ñÕ6@ƒÕj5æææ¸øâ‹9ÿüó9ûì³G{V×ß×gÝ38’¤ÀSN‡ ÈóœÕÕU®¼òJn¼ñÆÑ>æž#Ïs|ßçùÏ>;wîÄuÝÑ¿zꩼìe/ãK_úW\q—_~9„u° IDATA`lÙ²…‹.ºˆ;w²yóæc÷S­v‹ àç>u³>JzJ$*<¾ñx¶Ø[ØÙÞÉ«WpUï*–×–ù­éßÂã¾…U…¢¢+ôéÓ4ޝäãHÓ€vg/½¨˜ØÞÃiê¨ïÖY+ª?ÛõXI*µ •f…®Ñå0‡Yf™&M,~úæ­I‘pK÷®]¹–ÛÖnã@x€5½Æjg•N»Sv{ëS˜Ì{óœ5u¬¿€ÓgO§nÔ±±5ýn i¤8–m˜­1”¢ßëÓé¶1M Ã0èõ{dyÖRaB–GdY¡C‡8ù”Ÿcqi‰4Í™™#Iâ8¦Û…¹¹žzáù|üãŸäÉO>›Z­B.3·Ðàmoÿ-Þü¦wòçúO:Xð†ßžoÒiµHR0-›BgøÇ™ ÕZ&M åÐëtq|Ç)"O°ˆ‡$N©Të„qJ·`»’Z¥J˜é‰NB>¨”Ž¢Œ HÃß«"íç¡…$)’$Ç´ª˜ŽÉûÞ÷QÆ'R^}É«ùÆWoå½ï~?ÿþÕÿ¤9Ù§Vg­Q©8ĹäšïÝÄÿú›òë¿v ÍÉÍHÕdzf7ß¶„*N;aß$ÉCr©!Ð"!Ê"â(#Kc,ß/…àÄ@÷,”.°LµYZ9ÈB½ÆïüÆ/ñü‹Îç³ÿò%>ýÉËyÓkßÉeïÿ8Ï}î3¸äWg|‡ô×™ôg’€~¦Yë%^ë’$š“X1TQV€×µ@JƒLj i§íØÔý™™‡1…Ö¸ž‹–Ó¶P†Aœ&e«":+HóSiâ &³3tš#¤¢½¼ŠÈa¼V§ÈSt’aûU² Ïj¿‡ Ûr5€RŠ6òìg?›ÃK‡q‡‰‰‰Ü0 ]‚wíÚÅüܨZ­–‰Ö­[Ù²e˽º]¤”LOOsÞyçÑh4F4Cüúõë¹ð ٰa7n¼—Ð9Ú sssìÚµ‹©©)\×evvv_ŸsÎ9Ôj5.¸à‚Wý¾DØ¡iÛ6;wîüdÏØØ§œr RJÖ¯_Ï¡C‡èõz(¥gݺu£j¥R9&êBÛ!HÒ8%"ºÛƒÀÀ fÔpüòYù†ÏÞÊ^*FGÝ[Pˆ„„óøËôpÆÝ–3~¢2ެ5qüu#ó^Ü+ö:>~Æ‚ž2ð )1EçìéîaÚœfBMüTçŒ;ºwpýêõ|¿ó}–¢%â<¦jVñµÏœ7G¡ ´§±”EEVX°8qìDN?™Y{öÑ÷=X–MÅ(©°,¿lW̤Q$¶eÓnC‘ç¸N…v°BšfÔëu&'›¬®–màX‚4é‘d U¯I’FH«tµÏ2M:0V2ÌÖ­Q†Éµ×^ËSžü$Ò4¡Ñ¨b9'œ°Ã*H’Cg¸®D“‘ç hMšÆä`†$MÉ’ ³bá8I’‘g) t‘&yžâ86ŽmE%«/Nbj”í½JY,//3æX $RÉ8\)5-«lë½å–[8xð³3³ÔëuÒ,)S²P›Í&Õj˲Ë6P@È’5D!q\VÏÖj5e i)lй–,Æ¥²’O:ÈÒ–mÛ·ß~;AŒª ­í°išŽÄÒa¬‚,ÍȬ’+Ç1Z t‘ŽË²¢Ä#XN)Æ%)®ë•ÕP¢dÄ_ÐÒH&G 5pKQ» j˜ÉDQ„ëºñOấð—eÙ¨jµ(JZ0€ºëA0Òh4Hò 4¦DkAšjòÂ$Î$i/cr~Yò‘üþÐGùîÕš©IÉÓž~ /zÑ/05åRoqLÃÁ­Ôˆ¢„?|Ç[˜›¯óîÿñ1V;‡xó›ßˆí6ÈÓeò,#’´HA—Ò.BcX¶ïQ«×©ÕjÔÆšLL4hŒÕJSž¨|†Íf](ÚíA¢”Äu]ÆÆl:À›~ïµüý‡.ã Ÿû/zñ38¼tˆ;vïaË–Óøƒÿö{¼î5—rÙ‡?G§Ûáy/¼ˆ³ÏyZ÷iw©ÕL‚‡î$OsŠL³¶ÒeÆ­„iFaä$iHT}Ÿz½J^hò¼¼6¿Z# #ö÷z¸V™TQª¬-ñqœÐív) ¥ÂõêÜrë÷Ù´}+õê:þèþ—}ìJ~é—6qö9Oaÿ]1ý~Ⱦ½ûpªk4&ÊÔU¼J…±F“_ûµ·ò¦7_¦MyÜã‡W™$Ozì;x¿"ÁȦ&&£FØV…4)ù,a®02( ÏõÐ…¦ÝY" j5,mÓ^Ümä¼ü¥ñô'ŸÃüû·ùëüÞù'ïç;ßø¯þÕ—²}Ë$sséõÛÓ Ë" 2üš‡gyŠM0%2Ž‚" ñ\ŸBç„IAÒê¢Íe¹˜VY¥Æ1Y–‘*ç•a&1ñàÿEÉ7€À²œQÒcvf†(qm !%­ýû©5›H°QÆ£⯔1RKˆÀó¼+ú¾ÏÎ{gŸu6yžæ{šï™¦‰išX–5ú{Íf“³Ï>›ÓN;¢(¨V«?"¬nß¾7ò´§=m4Ïþð°,‹Í›7³°°À\0š“•RÔj5N<ñD¶mÛ6êîvÜ˼Â4lc…iš?ô «þçææ˜˜˜à¬³Îýv†¦Ãûv;ó¢L1@ÜèÕ95š\çÄ:fßê>®»õ:¾yè[\_¿žSfNaks óAŠ7¢4ÖHŠ„âtG}$ )®7ÊfÈû‹ÄÁ2!ÒÆ¬žˆø’GEAØév»¤iŠeXÔ©ã⥠ŒAµVÃsËê·¡ âp®=>Ž®°:4T,±p÷æîÝß°, ß/+áÇᤓNbëÖ­£õô‡×úáZ8,8¹g|133C³Ùäñü¨ãexm›6mbnnާ<å)˜¦‰çy÷)¬.,,055Å®]»F1ÊÐÔø‰O|"çwÞèº~ܽ ;ø³lÛqVx­vÚ¶=Âk‚”Ôý:!!kùݹÏÊRKZ,x L9S#¯î¿Ó!'§—÷è}ª²Š/ýGM‹ð1w; *3;ñu²4Ê~øÏ¥A6J9ÇÇÏ2ÙÀ“[¬-¨T±wm/Û¼m4ýæOåÊuN\·|—|vÚfÜg]uÓÎ4µ¼ÆcÔÌ4Á·}¢+\Lib+ûQù=–i‘&9…Rƒ*IÓ$+Êöm¥K‹°´´Ä¦uQÏ4pm‡ññqºÝ6q# ‰eY(iPsktûšL—NØšr£k(‹^`Y.šœ¹¹¾ûݫȲ¥ IBŒm'lá–[oǶ úA˶ *•’ŸÚiuð«u´.™Ä`´,“<n`%®ë¡¤M ²¼_âÐ@éÔmÛŽcÓë•j‹‹‡˜ǰÕ@˜T*>–å”â³2iµZ,."Bff§Ù²e#i–9ß#IbŠBÓh4Gbhš¦H¡Ð:'M¤,×a†SŠ»]"…¸[Ä¢­¶].bÀc(˜nݺuX¸®K’¤¤i2Çâ8-Úƒ¼ÈI“*ÝÝ ˆ£­ïÞô†BI—UÂRŠ(>M@Ý«Š+Ër9Z›#^j)ÙA@s¼I1hñ?xð •JeÄc½§(’¦)¶í¡Œ´d¸’—ŸmHâû™¯ò•¯Þɶ­Ó¼ù-§ò¬‹ŸÇ¦M[QJ`ª™î’å9ao…µÖalÛC/嫨°n¯ûÍ?ãàÁ?äÿøw˜žr û«diN˜†mYåæ?‰pÒÃ0££ßÅõl”*ƒ¹ÎZÙ“f›6laÓ¦M¤Y  CâU\LK31=Ë_ô Þõ®rÁç#¥ÁÔt­úÿ¤ #ráú†mÐïöYí„4'6ÐiÅüõ»ÿœ÷¾ï³œwvƒ½àbÖVogey?.Ô6ãU\ÓÀs5yÜ&‹ZlÞ8ÃßÿW¼ø…/çßþ¦¦+¼àÏdû ë8é¤ÍœxÂÉd¢O”v1mWñXYë Di€–¹ž%±”$(ºtò.šUÍ0ôã6¾ïb6ÂÈ0MhÊŒ—¾bO»x‡¶yÿû>Æ+^ñ6.~ÎÙ¼è%Oä´3O/9¨Éè”fÅ!±b´†¾Œ±‡0í±{ïíô‚'Ÿtr9Ÿ9.Õ5‚^›Š×`z¼JÄ„aº@ý~Ã4P†‰mZeåwcWlšcM¢()9ÆZÓ‹Ö¯[ —‚$Oñ+UÖz‰¤!tT‡ýb?}¿.ä†(ÉG‚IÍóœn¿K7îR¯Ö©ÚÕc¿ç§¶v €Fc’H…xØçF d@ Üü¸.Ǖ՟ýœë¹'l:ÃáaZ­ý±>Úûé°nWãU¾°÷ ܸt#y”ó„©'pÊô)Œ;ã™AÞËizMšÕ&¸%ÖÀxÔFÅX¦Îrâ8Á÷}zQË´ƒL`µ*Y[ka¦EwµKÍ7˜žžæ†›‘g«Ë-¦'ëH)hµZDq€í;˜¦$Is’$AÚ&¦eRÒ08åÔùüç?O4›6aÐÃq,êµív‹$1­ƒ¹NAhÛFW… %AP¶ÇgiF’:²¬þIÒ²] „ÀrŠ"GŠ^»…e;Œ7K3Ó`eu•‰©Ir£M^h”2ɲœ0 (Š‚Ã‡Ç1F­[7Š èEõz8IIÓÓ²É M¯ày®ç‘¦ ¦iPˆŒ")[a†›òa+~éf©‚`À 41ŒÒÍÚó¼‘+ößãyÞ ª4T¼‚i”‚qÉVÍB)„Q­Y–¢5Qг®ë¢‹‚4M­ª¶íà8&QÑétB•£ª;Ã0h4¸®IÆ%+¨Tª†IQ”FXa’ç9+++X–5x~ ’$ EQ”™d­!Õä¹Àw]¤¡ˆâ]h”QV"‹Lc6QXМÚNky‰·¾õR>ÿ…ëpxÞÅK^ò<ææ ƒ.½Þt‘Ѩ™E@'(âjÛH!I“>Yqúé§ó©Oþ¯xÅyËßÁ>ð‡Xv…8èã{U’¸d8š¦‰TIã8¦e²¸¸ÈâÒAüZF­:†.Š2ØÒšn·G«µÊž=·ós»NG“°ý„ͤy‡ÅƒwòÒ—¾œÿïÏðoz7ö®×3>>I7èÐ öpÁ…'ðþ ÿ?{ç_sÕ5·qé¥áæ›®â—_þbæç'ÉSh4|‚^@m¬IG^ÞSsÑDiHVÄTíË+‹Ê`ný‚0äÖëoF’‚¦2°,Ÿ4±m“^/DkÂ.ãQÐïu0L§¨oÛŸrÙeWð¤'ÎðÊW½˜']p·Ýz=S !¸õ–ëØvÂ)øþ5[“¤!y°ŒŒV‘I…w¼í·¹ê»7pÕ57òåÏ}ŠOÿCNÖ¯ño{§žv2~Å Lº5Ÿ¢ÝÃój¬,­qçîÝlÚ´Žé©1òh™µÎA”4È¢ ×ppm—¾(ùÎ~ÕC9º×!RЉê89ûÁß矿ðe.ýãÿÉÇ>s%/ù¥3yÓïÿ.¦ªÑð“ã5²¨O’§(C!ó Û”lݼ0 1„ÆR‚8‰±¤ >9Iµ2FD„ýÊ,¢(ˆ‚Žç‚ÖAÛRÜqë]4Ç›,¯Æq<‚8a­Ý¢Ð)9ÕJ %ô£•ŠG’&aÊ÷o¼‘ùù¹ãÑÃññÈ’ä„d™ whÇm<ÓcÚ Ñ Q±7ÚÃMÝ›ùöâ·9œfãäFΘÙÉÎu;™±g¨‹zijx„ÑaZ¤¬%«E×vÕáÇÇCÙiNáÍ=¹Äö´WЫ7 ¬"EŽme ’@Ç $ …q¼âéaÛèÄ2Â1|ÓðˆŽŸÂ–~ôÎÇ+,‹Ìz³I³›ããøøYί&&¦6IHˆ‡%Uè‚nÜ¥wØRÛBŪõ9æh ×F¦QBƒqì •)+¥ˆ70½ãÂêQ¦2iVš,Æ‹ŒÒM»{b¹Ð­´ÅmÛøÖâ·P™â´æiœ;q.[j[ðl4Né=<ÏÃqÇÔOÁHÓ„´È1¥BHEQ0ÈFgÔ|……õŒ™,^.ùnd8®KœÄƒL(Ã@낵V ËøFÛvæU)Y^öþEqH@©’Ó™e9qÅQTfÓ4cÆõlß¾4MŸ¨á8­:-ÛçmÛ¦Ð&q\:-[fYýE!‚ˆ¢€$)Ê–t‘“¤•ˆ·¶¶†í¸1Jà¬8Ÿ(Ìâø^-¥iZ:&I‚mÛÔj5LÓ$NbŠ¢|iš„Lð¨50–*ȋҭßƶ] à Ë2â(1ƒ”£ìÜu:ÌD [a†™Ø{вe+ʰU¾ (R²¬¬º…’=˜¥9¶ma(cÀŒ-9³RÞÝRcYÖ¨BU)5ã8Fߣ Uk] ×Ò$ÍÒ‘»åð\)JJ¢°:ÌÆ–U°²¼ï¸ä¼³ÂQœ ‹œ8 IóÓ6@K”¡ˆãœ4˰évbêÍ®¹êz.}ËÛÙ}û~žýì3¹ä’W²mûF„,Ðynw‘,‹0 Iš:R`™&B%'VIŠüðÛøÈeŸä3Ÿú<_úâ |þ_oà5—¼ˆ']ðsœxÒV²ñ>–•‘å’$$ˆc/BÉ2a:6~Ågm­ÅêÚ2ív—vwJµŽi@¸®CÄ$qŠeÛX¦MµRÇq|:6•j•‰éY®þμö5oãæï·y寜ËÏ?õB&¦]úUÎ>û .»æÓ˜Z+‡˜;pm™Îþ,.­w×h/¸Èå_ø*õZ“sÏØÂ%¿ò"–yÃÞËkç£L6á¯Þs :9|è ;ùd’µkËtSÄ)ä"Lß®£ƒ1g[xôºE‘`%è^ŸX'ä6++mnºæ?qëëøàÿzÿþ­ïòçïþ ŸüØ/òºW]į¿ìb¾ëT\RR­Öp\Ó40‹œ<Ѝ6fÍÅ·=j(’8CôC<Û#wÌ’,%v½t¯ÍuAõi¯fllŒ¹™qâ$¥µÖblbËvˆ“>qš‘êœ(K‘Z“f)*7ð}'.¨W«ê‘`1iš‘óîññnrÄÝ™aGÃ1èI“ÍÕ-8Ø;ˆQ4héˆÃña¶påâ•|oå:<Ãg×üœÖ|ÛÛi:Má<誸vÒæÎÞdºàäæéÌÚ Ç$‡¸*,`§v:r" Xú6½ÅÿÀ§À•Ô׃a#*<,LŒG1ÂÑÝ<¬°BGv¨;5&)”0Žö¯…¢«zE}ˆ =ñ¨2ÃxDþVlCÙññð¯ùÃõþh®ùrP¤£…&ÓY‰Ä{ï]Z¤ô‹>‘ލ‰žðƒ(ŠšC$Ùé.Tüc&qùÃ#'£­[XLP5Ç…Õ£ò>;°éF]ö±–.‹vÎ!»»»¹fíºY—Sk§ò„™'0¥¦Ð±FÏõ0•‰2ÔcËcÊ"+Jó'e Ç÷+´{!½^!%R)îÚ³—¢(ȲRKÓŒ‰ñqú½.K‹KLMM#EJžEDýe*Š¢ ŽŠ74Ï5¹)s,ÛA)ÉøÄF0\¡9Ö0M ÖÖÚ¬,¯0??Ešv1Œ²)I3<Çý4Jî¨ÖY–cÛ¥2®Œ‚<(Dަ`ié0žç£d¹Ù–M?èã9Š ± ×õVVIÒd$ª[I²,cbr| ÖçôƒZk¤,QC ºïU"-ùS–M–•­ÿRŒŸÔH¨-…ŲZÕ0a£u1úì4ÍG¢Y–ð ÷.†‚…”Ã( ¨¤*E%Ô4K*Ó4ÉuJ…¸¾F¡¤W•ßq† DZ©TªDQY¥êù>Bh¤#QQ…†*@%—6Ʋ-j• ½n{äÖ=üü¡p<¼,Ëèv»(»s’Á×ÿ}7ö'Ÿäóÿ|O|òÙ<ë¹?Çig,Põš1ì ±ñ}ßs¡DqŠçÕ@+¤2i4Æp=Ç6‰â©<ªµ*‹‹KˆÔ I4aX ‚©™,-íç=oy'ÿصÔ+ïyÏ«hV'ÑELžhn¿å·Ýx Ÿÿì¿ ´fmy•Ûo½qÃÁ1,VfǦíÌnØDÚê1Õ¨±yËff7mE%9Ó;¶ó©/~€ëwï¦ÓYeýY§2Sw1UÉJ&—e«©© ìôÛd2Cµ"Ú n…´:=\³ Ë5qe=TÕ 1]g|¶A¥Z0½0 yR˜V“sv=ç<ë…|铟áýïýßT‚\ò믢·x'–)1ₘV¯K·Û£„„ø• X6ºÈ‘H"×EÖªÔk5”ëB’9‚"Í) ‰§žÔ'Æéö;˜"Å–)¾_!™h&«Ë‹ô{|ÏGIHÒ˜$˩תlߺ DñˆY\†É—C‡qõÕWÓëõ”¸:\Œôœ^¼Ìy?ÉuÉg<”k:ÒãK&²Éüü<6l`nnî~]—ÆPBQ3ktí.w? #Útt‡==ܰrß?|3‡;‡13“ó;yÂüùl«oÃU?yKd”G¬D+(Ó`«w Ù8q?œ2–¿gZ%-¢Õï-_RáT«&਎h1RD¸XÈŸ+îcEX-+VcÃ¥jT‘Bå_¤ bT¨[u´ÒôèÝoKòññ3Yòœv»ÍÍ7ßÌm·ÝÞÕ…Î IDATöˆ^ÃŽxäHÎy0Çk­q]—………§þáÀý$ÃR §Aì ÷1ãÌ0fþd¼ª X VÑ™¦J ë1ù ib{ dýU¢d •XÚ;fQæ!!P 9V’«µèLà*—õþzü¶O»ß¦•¶ –Dã°òu5[å»ËßåÛ‹ßf¾>Ï MÝÄ*Fä¢ôû±û1ù=YVeq¥Jƒ¥8OpÜ:¥i•¡‡¯bÛ6qÞ¥ÛëÒ¬O²mûvâ‚^¿Ïü¬IkmÛV(e"… @ŒÄÁÒøIaI·Û£@c6–erhñ 'l[àºë¾‡2«lÞt"I’²²Òètp=G™QºÎ»®çTÈŠ¨42%¦©£R*Š’4G Ó²“„ƒJÅ#ˆ#&BYIB”äT*.kíi®±L›¼ÈÈó)åh‘ó}— ‚¦Y lE‘SHP–…a; ÒLƒT„qŒãšH% ú}LS¢L‰k¹qº¬r5ŠþÐtjÈH-…Î|Ä?5Ms”Vza楬ˆâÃP¦DHC‰½ , 'ÏKŽfV¤Héâ˜B0ª„Ís]¢Šœ<ϬÔÓ4q],‹Gî–J)’$WEQ„iÚž®"Ž"¢(eV³,1g‡æZC ÕjQˆ)E‘cš&Z@E ËJà4‰˜šÛ—/ÿ2¯yõ¥Ôëÿó¯_ÃÅÏzËËK´Úm¦¦Ç‰‚6ý CžÆØ¶©96¡²ÈȲ-4:O°©#ÖÍÍÐZÙÏùìâ³ÿüç<ýé¿Ç_þÅßòŽ?zyáûU²,Á0L*Õ E!X^k•ÏòYYYEJ“"·Êß`IQñ}ÖZKìÙw;µÊ ãã3™äÛߺ’g>ã©Üyç÷9óìm¼ýßÌ/¿ì-\Óüù_üît…=ûne˦yì¿“Û7rÙGþ†ÿígyï_}„›¾×ß¼›~èœñø Ï}þElÛ¾…óÏz2J7I’g¶M§½ŠReJŠÜÄ0}„p™ŸBêre8Ô|ÚÂ0 ¦'\vïÞÍ_¾ëí|ìc·`)gž9ÁSž² IÀ?¸Û·“„m¶m›å®;ùíßøm¾ñ•7b‹[×ÊÄô<¢Reßþ€³ÏÞ@}n ?¸ó 6¬Û̉;NAHƒ OHbÍ¡[ï`JÔX¾ùF¾òÝ›˜q^‘Ñ=¼BÍ­b(‹~sÛ]·²Ün—LµVÎXͤî×»=tVd9•zÇ÷Ø¿|˜Tkæ6Œ“†ê5ÍÌÂz6n:…êØ,ÂòizuþËKŸÉéMÉ¥o½ŒóNúO|Æ…0nCÅ…8¡L ‰6LCDÑjwX[iÓj·“Ûñq\e–ïäX£ÁØÄ8Å b»éyÔ\-K29?I¦X¦IcÝkÝ;÷ Õî’T|Æ›“ØŽ‹e˜t[-,Ó¤ßïRy„hDEQÐëõ¸ùæ›ùà?Ⱦ}ûF† G"çÝrþáãøœ#9oxMGÂñ2¡ä3Ê5=˜{/è‘óÏ?Ÿ /¼Z­†mÛÇ\–X 0¥E¨CníÝÊ5û¯æŠ½W°7ØÃ¹cçqñ³Ø1³ƒzµþCí5å³ËuŽ©,|éQÕÕÇìæì§·›® ›©ð, ³Açð׉‰ñÙõ˜êd„š:Ê«Š.²èbÊJ¹öÇ<K¡hZã¬óÖá›>™N3uâÐZ“e‡æòË/çSŸúÔ­ûÇâþPâ‘¢¸[Üÿq¥öø,˘œœd×®]\tÑE4û4ÁüYŒŠYa]uwõïâûíï“æ)^ÍÃ’GžÌÒ”¦Ù‡z‡8Ô9„_ø¬·×?¶×miA}‘ étöàba28&'B!áøü{tbl!ðmŸSÖÂ5k¸véZZa‹ÕbOyØ<4¡SS&.w»¹jñ*v/ïæù[ŸÏl<ËÒ¡%f«Ž=hߌG°êy.y¦ÑYiTèÛtÉrÉÁý ¥4ÝnFGd”n…J)6¬_OšB§ÓGë‚~?Às¤YŽTÖÝòB¢õ BQ¨QËb¥â33;C–%墀Äs+¸ŽVVV.õ&E¡ÑRc(«¬\S´ä™&/bò<ö%PrE•mc$9 ÐÚ VmâºZƒë†‰iZAˆm»æ¬ÜþÉ’ÍU²Hï^D;EQ x¨¥€Øï÷É3‰aX˜¦A烶~kàæhyžb˜&B ‚°4ðVei6h«—Æ©M’$ôû=|¿Šº‡{ô°Ýüžn×£ BHº½.Žcå3/´T¡Æ˜¦¢‰´ª…ó¼d‘IYš„¡( M'e—Õ̦i¢‹‚(ŠFReÅ®Ä÷|²,1[ËÖA‘¥xž72©BeµZ ˆ¢ˆ,ËÕz½–]вRª²-4yI–1Ö\Ç¿åëüÆk.ejfš7¾ñçyÎsžÊÚÚ2ͦ…ÖíÕC$q„e–U®CqZI-LÐCH¼‘aU\™›Ÿ ‹#K“´–9gçyüñýozÓÿǺ¹&¯}Í/£LIkíý~Çq¦E˜&¤i†çWiµ[ØŽƒY¯bYišP=¦¦&h6ëdyD¯ß¥V¤âzÜùƒ½¬¶06!ùÖw¾ÀãÏz Ÿ¿ü#üîëßÊ›~ÿ/xý^Ãds;7^{+'lßNk¢p…_~Å39ç ããÿGþþ£ÿ†ëW¹é&Å—¿ø ¶ls8iÛgÙyú©œóøSÙºi=žãGmÆ'ǦÂvsoŒ¢(¨Õ¦ :]ŠÜ Õ Y>ÜcÿþEöí=ÈW¿úM¾ò•ð}Ÿ3NŸå‚ Ǻ 4’^g•'?ùLªnŠ«¸öÚo¡sŸ™…&i yd#Š*ûn9LÚ¿‹ÿøòÕLNNrøàGùô§?G³YãSŸ¾œ«¯ÝÍê2œ}ö›·lçÊ+nBÆ)çlG Mº´DºÖAfaH„kQŸª³ù¤“™šZÀýî Q•NkË„æD“ƒ‹Ë\nsÒŽÍ4§¸ýŽ»˜˜ªQµaÿuûøÁÞNÍÕ4ÇÇèöSN:s':×üÊ Næ£þWZíË+·±na×õ0-›™™9Æ&§0ü ˜•éƶlÄyÙ¢§ôƒ.­åe‚~—$êÓëuPF öÛ>:‡†o g&pH[ ³‚;qNŸV§‹!$ÛÅ&¹ˆP ŠGP[Ýp>X¿~=]t«««G\¹QAç9Žã`Ûöýž;Ĥ ç”áçç¢:/Š"¢(²JcÆû;~xMQ†!Z—x•J¥r¯‚ûº‡áœ9tšÞß5Åq\²|¦tÃM™eYlÚ´‰ÉÉÉ£¶Áúq£nÕYï¯ãšÕkøâ]_dµ·Š§|ž³ñ¹œÞ<ƒ“ê'1î?$Ó™´HÙÛÛËJ¶‚ïúLÚ“˜Ò<&«Ëk£õ‘Á—¢¾YôÑz•¨{í;þ&ƹ!⦸È!èA"üpš 37²¨ªs{‡X W¨ÚUæjsòè›Q²,hçËJ÷‘éôø—u‡Rб±1vîÜyÄ b`ö™$åÞc¸^>К<4é ÃÛ¶>âÃ0,=,ËÂó¼Ñ~æþÖätàÙ¡µ¦R©Ü¯€;üŒ,Ëèõz£âß÷±,ë>¯m‡ »‡×Tvbêû}V¾ï³eËÆÆÆPêèµÛÚ¦©šd"ƒVû«ÜÈl«lÃWÌ`bzI¥þ‹½E0áM0áO”†W]• „BKI!R´ÎŽÑ8¡ èQ>Etñ1´Ö¤IÊòâ2YXvw¯¦«ìïîg¬6†m<4a5+2v·wó}ß!Žb¶Ú[OÇ™´'±¦,ªµêSù˜Vƒ0 M2\³lŽÂ>$¥0Y­¸ÌÎÎ1¿0ξ=+,.-ãÕršã¥èáz&ZC¯“’¤yQ066F¨ÊªË(‰ÈÒÓ(7zq’¦!e™HU:z®®¶é÷ûlظ Óªãx33óÜzËxæÅÐh4I“ˆ0ì”›$-p\“$IJÃ&ÓFˆ ôP*Æ0-Ì© ëÚRáúW]uA?äŒ3ÎÀ¶,Ë&Žcjµ*Ýn‡4‰A”â¡mYäƒ §eis‘çÄq\"”.ä@.‰¡˜WíV MF–gxÒA AÆäY€iÛ8Žƒ’R©rÊ,4i–‘¤J™X¦MEA„ë: !OËÅ·  È ò,£Ðš,°Wè"§(J(Ã`mmjµŽ(ô€» ½^e–Ù%©¶eae–±d±*òBcšåsŒ“Ë*+¡’$¡Ýn£”9rý'q—ÏK—"w’$$IR$ƒÅ¿^¯ÐÃ@̱|Ï%Îzýþ€ÅëQ©7ñ |ýß¾Î%¿úf.¼ð\þàÒסÌÃì?°ßóét i`H :Ç6}´ÖôƒJ( × M Â0Æ04†]$¤ªD®›†Dç  èöÖpÅ$¿ñ›¯eß¾¼å>EÅüÎレJeŒNo•jÍ/ñ¦" {$qŽ©ÆÇ§Ècßõ±,›BkªŸÆX Ë,+ˆæ7pÖÎÍ|ó›·³tx?³³.~Mqhñ.ÆÆ¶óá˜/üÛ—x×»Þ_5ùµW¼ [M¦ËôÂ*õmÛ=Þùg¯ã¢gœÉÔô6ÚmÁÍ7ïC_ú×OðÏŸú —ýÝ? „ɺuó4š>§œ2Em¬ÁÔôB)n»ãJv{´Z=¾{Å"KK«DA€iÀÔd_xñ3¸à‚Ó™™Å¯8ŒO f¦µ%êîQ/ææ®çÛ_ÿ:;¶?ž~é£H­ÙÇþê/>@ÔëS÷«¬¬t™_Gk-æœs.`aý;N<‘ÃË-Þúïá_ÿmOªMÛp¹æªCtã„§Ÿ9ÉäÂ8¡HÙ81ÇüÂzêÓ“ÔfšÜ~èî8pˆõ3ÛˆE7NØtÖ&›.µ†¾1'Ú£Ùù„³Ø´}'­¼œ­ ³LU\¦7a†Š MkùysÛ•WP[˜çÉçîâäÓÎà†›¯ç™Oz"ªá¡Ãå‹´îÚOq•ƒ‹Kì¹kI±aýz6mÛAmz£fcZ.cø7‚e’D­Ú²Èz=òv›åµez+}Ì}w‘¦šÙM[éôB”ícÄ)“•*––h)ñL“"ͱT‰y$±j¤”T*¶oßÎøø8Y–±°šç9­V‹4M©V«T*•{UtÜׯ§ÕjÑï÷BP­V©×ë?VÄìv»t»]|ß§Z­þXaµÛíÒn·GbæøøøHȼçyÃ{h·Ût:*• õzý7qRJz½ÝnÓ4i4x?|egÁ±é*ì> Þ:®\¼’k^CE58gâ<^ºí™¯Ì=dƒŠ"/“ˆ»ºw˘ucë™t&I›²¡ÞÄÔ6òÿ²÷žq–]å™ï­÷ɧrWWç¤n©»•AY‰h‚‰†kÏ8`lãÁö…±ñ`<Ó8‡{ìkc{p’…Œ„„$$$$$”¥nuªîª®xòÎ{­ù°«‹,¡‹@-¨·~ú îÓ§NÜk½ÏzÞÿ“%Å`zð|bQ N1´CöÑz@çÄ­hj˜þ¬ò„á>'ÏIç9yØCG}̱»ÂÚhâ³ÐBkÅÂ`¥`‘Éú:¥ÆiØ-¥ — Ëi—¹hfMX}Nõ ¢æòË/çœsÎù–9Y–±¼¼L†O»†ŸZsƒ  ÝnS*•¨ÕjO+¬v»]:yžãû>µZ Ïó¾éþBJIE«ëþÐÐÐjÎÄS‰½KKK«è¶f³‰ïûßTX=µ¯HÓ×u©Õj”J¥oú˜¾òß:Žóœa àW¨`®€å‡8¢fÕhZM,aaH£ø{ŒUÑ-É’åZ^§‹Ê2d¦@”æÔjuT–“å9Ž_&câT“d…Iš­í:$iB¦çÚ¨4e‡”½2¦0‰Óˆ,WH §©c• 7ñ]”Dgƒn¡Ñ®ã M“<Ë ƒÞª#VX.ùJðŒ!%¥MLS"¥I½Þ\—†½‚€jµJ§Ó'É2„!ñJeÒ,!ÎS,S@.“¦i““Óë÷±¤…™Ù™Iµd ‡n?¥ÝK™jLpÛgîåß¿í=¬[7ÂOþÌ«iAÐ7¦Iš›hË)gƒ b±UlЦ¦¦Ší¨ey”<‡<ÏȳÃðÒdx¸ŽRš4ÏÈÒÓ·À8F.ò¾_}³3ÇùÝß¿–ÑñM¼î×`:¹Šèv:T<ŸÅÅEürKVH‚œzÕ£äVé,÷i4j¨|@„*lÙ¼‹02xó[.á—Þó³'Z4›cÔj›èdâIJ¥—^½K¯>—ßûÝ?äç~éyûÛ߯5/zŽS¦Û^"V"+fÓDNp˜ZÃåìjÆ Þtå’ö#„åpÇîç?z-‡Nãów?L?(úË(¯$è  T.&Þ÷ž9Áyîc玭ìÚº•f¥Œ)röìÚN0èR«”™Ÿ>ÆãfÐ^à¡ûîåЙ_‚ýçoæñ{î' ÀКË^¸™|ý+/±<»ÄâÑE6Œoàî{î&×-þå_®åâÎ%XÊáµ/ÞëÏÎøßÿðyfPÚ¶‘ ëù.úIäèvxì8Ý|3Ÿ»ã&dÃä¿ÿÕ#”›÷ðß~ãý\ù×@Ò5€¸Ãï Þ#Lž±cjŠ3_r¹ý_DmïVJ®GžÄ$AÈ‘O0wìÝó%¦?ù)|Ç#í,0]“\pñ PV‰‘ó.D[‚õB³ciÕÐ=v‚ôø4óG!±½”$•ŒLRª4Él»àäúu04ŠYG}C:#í÷H’Ë0éͶ˜{â(þ“Gñ<¡áa†G†q£RÅ0=òp€é<¿F,N‰}ÃÃÃψ¦µfddd•Ïüt ¶RŠÑÑÑÕÀ¿Slì§¢¿òwœºý©æç+ÇÿNŽŒŒ¬ ħ8Üßl4ð+oêðèºå©ê”} ñò­¢¾òõ>]xSšl«mãå_…Í[Ê»¨ÚÍg%õ7 ZÝe‚0Àõ]Ô©P=-å4A‰1ÜLcµ©†êú‚#ý<+ˬR­í3—Í’wî%`šæîwà í{NÍœœžî’²LƒœïïÁ´g»Ñ7ˆtȉô(é©>ï9^cÀp†§ˆBMÒ/ Ëkõ\‹Ý’J¥‚ïûÏhÍ&kø©úÉÉI ÃxZç¦ÖšáááUôÙ©IÀ¯Í­øÊ5ÿÔï/®wO³¾žºýØØØWaÜžj¼ÿ+žO­ûO·çùr¶†|Î]bB\×etd´˜ÎÉ\ì=ˆ•ZÔef­I³Ô¤!«ãý ƒŽt0¯çqs—5ÂöÒvjµ¾í¯}VÊÅÃRUd¿‹T‡‹€H¯yÚ<>•gtû3ÄÑ CÕýXÎH1X«çä{èû>;wî¤×îÑo÷9Ø>Ètgš~½߯×*%¥%ZäHû;‡wráÐ…”Œµ¯ës<ÏÅ÷…Ò±Jôz¡š­-„0ˆ£"&W‚0Ž(—k4†<,Û§?X™¼ #lKá—|lS µ¦?fϯP)•È…¦R¯)ƒAŸFcˆC‡ŽÑív1¥Åɹ9*5‡uSSX¶ƒËtI¸;µÀ² w¨Ö$!ñÊØºë”ÐJdZÉÂI/ ‚`€Ö¾ï`;ë§Ö-Ä(Šè÷†Y¸_¥A–%ä¹^aEaX„Pi0 ­%IœƒN‰Rˆã)5–-V;Ë2VB§Q˜R¯y”|ƒ~¯‡4¬U÷ggäy±ˆg ”S×Ã÷+aDÈu©F ‡©ë"%h „ƒiÙÄq‚t ÷± X¦ƒaØh%R¢rÈób¦ÙlÒiÏ¡ªåbÔV)lËÄpÒ,§°ø+äŠ3WJ‹\ ò\ùå ˆ)Ji‚ O„†‰ëžÅÍÑêTrµQ0^Wx«BX–m˜øÕ:ˆÃmJ»ÂèöÍÜpýmüؾ—ÉuM>ðkoã̳6³¸pÏöW^çÂA›¯°,˵j!šLŒ“& 'NÎR¯ ¯ƒVHi¢µ@J“ʶ]SœþNffed¨Igi™f£B’eôˆ4Õ¸¶e›ƒ€RÙÆr4ë§&h-·H\Wò’—]Î?þãßrý¿ÞÁúõ›ˆCˆ’„`qE‚• j®ã½ïý%núô¿ñÙ›oâÃý7¼âå/ãšk®¦äyH2ªÄŒŽ”¨øöµrJöˆd@ÔK™˜¨ðó?÷6†F§8pè(žÀtK ¯#Ésâ°ËXÅc|t„pQ¿O8 WG‘YÈÌy^öÊ—²oß9Ë'Ôw|ñ‹\{à +æK_ºóÑdzab9ÐÍö^pg_s.Íz•>Žªqø‹G¨”G¹íÉl>«ÉWí¡RÑìß¾•`±Ë£ÿ÷<þÀc„aŸs/ÜË™çîbÓWò¶_þG®zËægÞù8gìÞ‚™ôyõ«^ÀЮ³8~÷]\4>„\?ÎÏg|ï–UJW'8S#ÌOšÃž¼š='æxÑ^ÅÁÏÞÅýwÜÃÖ©ÍÜÿ¹G9öä!^þÆ×A’€k²ÔîbºQœPòö^u9A’a·f1U‡¸— ´G ½ÿ!–{–Ú Ìµ–‰lܾ›Ñ [±Ê>#ãã”FÇ ä²kdœíƒ>yéœå¹y>ñ(•r™,OiŒ “‘Sk>ÿBxN Ï´ç;>/‚cæææ˜™™¡Ýna®òŸëõ:ÃÃÃT«U†‡‡¡T*=#ø;ùžjsuÚ~„d´<Æ™ãgDTʱÁQÆu•!§‚>ðÌšÄ$W,…­Ádº[gÈkR5ªÈÓÕ¥(¦SG–r¢ðQD&pô(’矰*„m×)UÏ 6þbÒôV¢å#ôf?GŽ[ß4ÝïêcÒh2‘“ ×‚Œž½ë¦V´Ò­¤Å„Á“þsŽÙ iO²ÞÝÍL4Mž®ñýN›ó[¿[ëå©Ó~¿O§Ó¡ÝnÓjµh·Ûôz½•Àa{#´nÝ:¦¦¦¨V«ß»õkë™LŽ|;ŽÓÓe½—†Ä3<†õ0†i SI"´ÐôÒQ/bžy 4š8‹Á†:uÊ”£4Ý&žãa¬a[V˰ªÈÒzâÁ1ât;ÂâtV5[u€•%èD"¬Êóoòæ{¬òI’Ñïöñ<Ÿ8-ãAL)pý~Ÿ$Ið]‡,ÍHâ×¶p]3„aHg±M½ÑÀõÒ,¥Ój³nb‚?‰RÇu£ˆ$U”Ë6'ç–8>=ÍÄè$ˆiH²$Á² ¤!0 Ë60Œ"øIHcÛ„aŽÒ¦a¢•B«bÞÅÈ>¤(%1-)3¢8%Ë2LÓ¢T*§A䘖[ ,›<ËÑÂ8F A©äã•Kô—:ÿD„0R`˜ÆªÐ—g…˜E1iš¬²üNzž ¸«+µâ•Â$Mcò¼`²¸o×-B¬¤–† Ë´6p—ÎRÇô±$Nˆ¢­LÃAÊBØÔšîj‚eÙ¨Ò$[áš 4Åýª\‚¯’h%PRÎÓ8F“cÛæ [7\áUqJQ˜ eÐJ¤y!¢JR_·@%€e”|Ã0i-Ÿ¤\©`Ø%aJslO>q˜÷¾ç}LNø|ð¿þ{÷žAkiÛ°VO†Oµ¤i²Êsêv»T²ŒÁ`Àòò2¦¶Pò«Hà ËrÒ$[9h­PZ¡T!& ab%‚ %èŸ`ãÆíüÑþ ¯|Í/òÞ÷ü!ÿëÏßK£6J¯ÓCk‰Òš H³„4Ïh÷L¤‘3·8K©nâø’³Ï=‹'?Ä è€p^Çùç_Îß}øZ~âÇÞÂèð(ž ß_bÐn#eHÐéS) sÅùgsåçðø‘£üÃÇ?Ƨ?ûiöž½Ÿ¿è2vmÜ‚‡ô¦éŸgzÐfÁNqª|Û§<^ǵJ¨´‹ï$ìÙ9Fsxˆ‰ ëIUÎp©„•k:ÇÓnuÐNÌõþ¦§±ar×Ð&°ßh IDAT8–Á+/¿€êŽí”Ü1þí£×Ó]šçª]—b—JÜöù;ñ£„X<~ävvŸw»¶med}“Ûnº‘3ö‡åÕ)íXÏX£LclˆpvŽÛ¯ÿ 7}êsÜ÷…%ʵ&ü°ëÅ/diá %OóÅk?Éô½ÐZZàÊ×¼Ùð™Ü¹…¤µÌÙǵ׿‚¿ûØMüÓuŸâ“7ßÌÂÌ,öMÞñcWØ>Ÿ¸áFîºÿ¸éŽ“¼âÏãâ‹/ÄwsR3Z³'i»õõ1Ìܧ29ÂËôßqà‹°ÔY$#çºO\ÏÅ/{ ëvlaÞ}ÐYäÉÅy¤_¦´‰ƒ³Q#X QžKž”u.yÙJ*‚4BIA;Hh÷=þ'Ÿ8À¦±ar)1kvœ½—±õë0*.¶cSmVIhà ﴰ€åéÃ,·{~ž¤žn›n·Ë#<ÂwÜÁ¡C‡XZZ¢Õj¦i²qÓF¶mÛÆøØ8{öìaÿþýLLLüÿj²ÖêËŸƒºWg½±ŽÙÎ<íÁIõçP ácxÆ0)L¤ßP´Ñèâz­JkzqÂñN‹Vºˆ’¶W¶2^šÀ3¼Óù…ÏCºiˆ‰‰Aö¼êÂÄu'¹Šî ¥?éÍ}…4ÜêÖb<ð»t(¢SY;]Ûð?k×M³ϳµÙ¦¶3jLbŠçÖl`0"7±ÑØO‡T%Ïèðk­¾¿Öþ¥¥%}ôQ8À¡C‡8vìsssÄq¼Š¨T*œ{î¹\rÉ%lݺ•jµú}Èò-‰«HÊ¢Œk¸ U†èë>]Õ¥3è°Ü]¦§{„„Â`¬4ÆD}‚º¨ãááà`Jsmõu§ U´4ˆô2q²HI˜úTÜsùÝ*¢ŒÈ—pµÀ•M a­‰ªÏå;²‚!™™™A4“õIb3ÍÒ»ßÖ}Ï÷æy`ú‚^ÀÞÆ^¶o/œö*[Õ³ÖjEXEä¹\ÝŽf©Æ04JkR•!DŽi˜ô{zE€TE8“-h6›Œ ¥–eQ)—‘2G p<•gQD–ËÑÑQÒ<#‰cjÕY.‘B27?GžçÄi‚e[ضÉÐpu“>O:ÌE/¼ӰȲ%ƒ†´1MAœ¤Å)ÉU‘v/„F“)MEŠikay…‘ꑦ¥Rm2nÛ¶UQ©Q€Æs¹VØŽG‡ !Í5$–£‰âÛ6È•@J0 Yügôz}\Gàº>¾i’Ónw©7J«#+ŰH½¢Vø3Y–V+hFžg€Ašæ$IÁ°5L‰aX  Ü4|êõ",WEk!¤»üR„¨€m;`€VŠj¹Aœ$h†é ”&KŽc“e9¹*ÄË<É*'WŠ,OWHÓ202A–%DQ€eU(•}ò¬8ÖJ¢ÉR`Û®ë¬ÅI’‘e9R r¬²É ©Vë´–Z”ÊŠÿø®_¥Õüîïþ8W\~Ç@JM¥Z&M2´ÒredÈ’Äq¼ÒK btd Ï-@ðQ<À6 BcšžÂ0 „´Ñ:C©) L£Ì 7ÏøºŽ{K/?ÿõ»yÓ›~‹?úƒó;ü[ žDVÊôÃ6˜‚±uc - i³ÑÙÄác0,I4‡ëˆƒÐî.Ó¬OÒYîrÍ‹.å¯þüÜ}÷}¼å‡^K’ôñ¬!ºelSàÚÝåY|kϳ9s×föŸñK,,,ò¿÷ûüìŸþ+ëÇa÷î3¸êŠKÙ}Æ.¶L^À|·ƒáy,v;ôƒ€¥0¤½´„m Œ,¥lשgfâH?àáû¾ÄwÜA©ìS)yì9k7W\òz&ÇGÑSSä­%>Î ó×ÜüùH¯Ä[Þð6­_‡í˜œyþytRZ·‰{~ûwHM¸ô¥WÓm-±ÜiSß´s¸Á£ÓìÞ¸•šW¡øInùçqݧ>ËK^ûZÎe•÷|àïùŸþy~ä‡_Å_÷jn¾÷.=øÇFyí¿ŽrÓÇhT˜t †jl¬W¸ýS×1>nòÉëÿ”nÓ[ìñ ?úNÞñÎ2fÁȈɖÝyý‹öñ7ÿãvîýø œ{É^®~õKØzæv&wGÐé` ƒl±GЙfxÓ8û†+ÜsôazÓ3ì¯oàß~ï¯8óœ=œóª+¸oö Ÿ}üA.»æÅŒ—&¶m£rŽê9-KmÒ~ ƒVw‘™ù㌌ŒÑbý–ö^19ÈúÜ×=L?y„Gn]æþ(áŒÝ{Ù0…³c" ˆ:-Ê›·£“Ñ][ _cÇ=›,ËX\\dzzšcÓÇÃr¹ŒišÄq¼Ê‘~â‰'¸ï‹÷ñè£rüÄq.ºè"vîØùœ2Íž×M6_øLØxe—¶U¥§ûôtÄ£#H}תÓ, ѰxßÀÁ)̇óÌ…'IU†ÎLTä2äTðË5FKc”ÌçÁx’a -“Tfh²ç}Ž®&Ž3Feì"¤pè¿…`îóÍ¢×_…7v1ˆïôȪ2 âk[—WRŠ×êÙùþœµ,Îðú%ªýrè9~}5Ø‘Äì(º½e·KªÒ⣰Öã¯Õ׬ý‡æ–[náᇦÛí®N§œbz†aÈc=Æìì,ફ®âÜsÏe||ü´å—Ÿnâª-llÓÆÅÅã¬ÊÔD@ÄÄ á5±G(S^ ;zÊ‹®DØ>NeEÄéIò^F¹¼}¥Ÿ}îÞé8:I<ˆgŒ‡§†»vÑ}®?.+è‘’U¢l—©ù5Õ"sáí°MÅ©<#G¸Zù9æîÅ»1„Á5¯aãðF„!°Œµ§¯V é U!2™®¶‹e•ÈѨ<öÊå2Y¦™;¹@ç”+5’D GHp=Û-³8©$C^\,­Ñ:'ŠR•a˜šn¯ƒÕ›Ñ±!ÎØµ¥®m“jƒ8 ¨ÖìØ¹‘;︇]ñb†‡ƒ.Bg†$Ž¢(A)…eY+#'’Á ”’,Åȼ”R¢¡Q9˜¦! ’6§ïû(ý^Ÿ(ޱ<‡,Sh q¦1¥•t{ײ‘–…i[(¥Xn-á¸6ia˜C”ÖJûg µ@+Çñ°"éÚ4M,«pžÆqŠRŠ$I0 kÅÑ©°-—þ O’¾ëx+\ bÒÊm®Ü^¢”Ð6ý^Ÿ4M1MÏsq],K À^¿‡‚’_Âó<Ò4GP‘Jq)%y¦QJƒ6@K4Š<+ú¢ÂÍ ¹J1 I¹\*ÂfZ]â8)¸…,Ód*PŠ4Ɉã¨ì2L´N‹$L+Ç´LÂ|Àºu»˜ŸØºó<ÞñöŸçs·MóÃ?|./¾úb¤Ѩyä™"S´hô*“éŸÈqLÓ¤×ë$ Y–bÖ Çˆ.¢þŠÃµ-Ò ŽÃã úm†š†òŠW¼ŒŸ~ûùØ?†W¼ìf.¿r?i6e:˜V‚íyh%É•dt|ŒÃÇâ¹>q2 I|¿D¿7 VÎ9>sŒ·pÙ¥ò§üa®~Ñ¥ø¶‡ç¹˜:Ee9ߦîû sæ¦âš.½…6¯Ä/ÿäOóö7µ¹ï¡Ç8pü$ŸºóNþîÆcÓölß¶—±á1F‡GØ4¶ E̥Ǚ;qŒ4ˆ90ÿw-ÞÆòâ<•R™][wð®«^Æèð¢âçrÇõŸàÓwÞÈüÉizƒ>Žç26¾‘ÿ~’M›¶S+»¤Q†A‚ ÒlЗ°œhªã’Hk´m±Ðéä)›‹7S³\îûä§øèŸÿûvïægßõ³ìyéKiIÁ?\} û‡›øí_ÿ{þôOþ­adÒcÓ—3^r>g5‡é=zi޵n’…$dǾÝüü{~ë>÷0¯Ý›°cø…ŸúY>!ÿ'›«U¶NNR­ú4†›¼å7vsÃM7rßOò›·þ³i…‹®9Ÿ×½á5ì=ûL*LZ¡Ã“xtœ7¾û]Üó‰Oa>Îþí»Y:<ÍÍÿOìÓKp6 “{6åfû>w'¡Qâc ˜†çûØÃcäRÑñ©ŒU‰‚ˆ4ÌÌÌœfdÔíì:o7û/»¥ µÜaya™û§×.ؼ۷ídbÇ>&·lÇ®¯­ZÏbÕëuvìØçz ­v)¥X^^æÈÑ#Üü™› \@§MµReó¦ÍkÂê·!¬ZXÔDŠWaÄe– ´ú-¢l[FH¨CªºŠB«Âé"ÌÅsÌÄ3 *ŒÛUšå•Jëy”$,48ÚY õȾ'Þc§ºÃ*£Ò€àä­'ï(ž«7]žBšßIqB“«6*]À–6ž=kÿg«r‘ci‹Rêã§žë¹{Í,ED=:á<=Ñ[ ¯Z«o*¬¦iJEË~hˆõë׳uëVFGG Ã'Np÷ÝwóðÃsÝu×Ç1®ë®"Öê[¯SÁVe·Ì¨3Š^ù\z¹ò³VO¿oòÜQ ‘Ðo! ºh³ N ç9ø%¤éQt”$maù¡<±¦©ž¢žiáw^‰\æLú“DiÄÉä$GGÙeïzF®™Î˜Mg9Ò?ÂB¼Àö¡íìßɰ?¼öb³÷@J‹<Qy‚! „VDQ̈T¦86¸+‹Ik¹C·Û§ZwQJá{.•jãÇOððñ}ÇõF¸›—)qË„,íªKš¸®ƒéØ¨Ì R*±0¿Èô‘ã4÷×°,A¦4‡]\‚ dÐШWè÷Ø–"ŽlÇÇu¼ÕÄÈB¥7W2M†D‘^m€}¯Œ’4Ï©WjHaÐí·°,×uô²,£Z­"L“8IÑJaYÅh‚í¸¤iŠZI¯,•|ÊÕ BÀÜÜ q®ŒŠÇäBH|¿Œ&Ýnååë×ûT+U„LW£§MlÛF©5pêï,ÓÁs,Ë MS„,D?Ã01 HaA‘EžIƒˆ,Nq=gE0Vôz}lÛ¤R© ¤¢×í¡tŠíTY^lS*WÍ`¬üN—4Ë€Â}kš­ ÍcT®B’¤!Y®‹ð,ÏÆu=Ç&޳•íŒ$Î1 Ó2±mPZ’¦çŽSÂ0Rò,&9Ò4(U«Ì/µ›ØÅßþÕ?qËgnçÜ}#üø½σîÒ,žë²<PªU‰³lE …8ŽHÓ Çqˆãx|_ Lò<'Ï Ö4,,ËŲ,Ò4Yš“ç ¦%±m›<³ˆ¢†­H³ ¾3λ~î?pûgäÝïúÏ|òúãU$¦Y|VAL·’çàÙ%fgæÙ¼y®[aÐP¯ Ñë…¨yŽÎo|ãÕ¼áõwqççnãÒK_€gP©RvÂþ€¥…PŠOvÙ$3,ü†Gdh¦â•È–{|òÃÿ‡Ã÷=DëÈ?ÿÿ¾“­—]„ˆ»Dq—ƒ³Ó”›#¼æe—ò¿ó1Tšñþ_ÿe®~Í‹h÷Ž06ÚÒøžÁæFe6°<‹^z”‹öìãÏ>ü)n¿þ.榻L86לѠ1\¦*#¢Ùyn½õfJ® Ü¬sÖðg7Ï"¯òÉoâµt Ûö4yË¿{=¯{ÓbŒ4’‚,^äÒ×¼š™;îâäçïbçÆ}<~è1î½þf†÷í䜗¼˜ NØõUˆX‘e,ËCÈÒËÌ®‹!sÂþ€¡u¨™Ì>7^GèÝ<3g„8“¾KÃtÈ–û¨Ö€…#3´;ÆB;àÉ[n`xtˆ½ïùÁµ•ëÛÙ¤ mÛ¬[·Ïóعs'–eáyÞW…WAÀ‘#G8|è0=þ'Nœ`aaáë’z•R_tñLJJù´ß‹M‚ 8l´……Ű;¦¯ôòݸK{ÐÆÁA"HtÌlz [Ø YãøN‰±ÊeQ)7QƳÜçÝé¹Ä "ê4R÷EÂÀó·ÙÒÄô†©N]‰”’þ‰[Ú‡aúFÊë.Ã:óȤzõ3óTöå†O…K„Á Jæ8fiÓJã¹Öñ}»ÑÖmBb˜ÕR•Z©vZð}Ï£Z)cöL2•}•€³Vkõ•ëíÆ¹êª«BP.—©V««ŽÕ4Mi·Ûlܸ˲¸á†xðÁÙ¾};[·n] °úv×þ"oB>e Õ÷ÒZÏs=µþ=ðJBS ãÓF'KÈÎ4”º4†ßÝÃä$™c0x¥Ú”J[pœñ5ÀiÖãHQL„OÉ)Z²Å¢Zä¨:ÊV½‡o]Œ’ˆŽ?ÀÉÅ“LÚ“ì©îaÜÿ†Ódkµ"¬R†9®[¸³ÄÄ0\0s¢ H)tÀA?¦ÝêáxI*X7Z¡Ù,3¿pœr¹¼Ê-W*ÄiŒ4™Îˆ“Û÷h–›tmÖ¯_O& œ<Ϙg~n™J¹Î .’²µŽÙ»ÿ î¹ç’$cyy™z}ˆ0\¢\v‘Â#K¿œyŠKjY‹‹‹X–õå?3ml»aK¦Å ?@)ð½ IšÒjµ¢HŸìõzHË¢VkÇ qP«×±¤‰rs²4¥R)“«œ$ÈÒ„rÅcØm!Y–cÈÑS²šX?4Ô¤ßï¢É)—]êõ:išÒívÉóÂ!E1Nou$µÓéÐhÔ°¤RZg$INž+<ÏD© a»a¦!–eaßŶ,„ÐdiR${6ínǵ˜Ü4EGt]l¿L®5I’ MÛsÑRbH‡<‡x; …Äq-”Ê1M‰et»z½Ót°m, ‰ãÛrѶƶL³À(Žc#¥¤Õj1:>Nžé‚…kJÂD3<4Ágo½“_y߇ª—x÷»ßÉûvÓY|‚8°L‹¡Ñ Ó*„CÛ^qñ *•:ívϳIÓœN§‡”&•J(Š(—Ë(e!dYŠ…7M,ËDk—V{™$I±Í:Y–áú×tô¢¸ÏÔæ3x÷»~’Ÿúéò[¿õ?øÍßû¯ÌÍ@ e8¨/¼àB®¼¼Áÿñ'¹ì²‹˜™‡¼Ïl·Ã‰cÇ® ±cÓ¦®¸LÉR«ÅÉp™05‘U›nç$:؃€MF‰­¿öeÜñÙ;øëürÛa|óFš›G‘€kX<öäQ>þ/ŸÄ“&3Ë P/1ºn Ӳػ¾è*®|ñ•–Eœ§„Q@¤%þÐ( Ëóä9øžÃb¿^‰v˜ÓNëFkLŸìSo“æ C vl`û–müË_ü%·ýóÍlšç]¿ú‹l¹ð\Ò°Ïb Z!›k%zÇOð‰?ú(¥,a13ŽEÍô™Ý‚™-!eŽ,™„3ÞpG¾x7‡ÞK¥brÝïþ8û¯|)÷Üó7þë=ü͇oàî#1[7ö˜næ¿|ð§Y'=‚£³œ8r„¸ÝÂï'üÂ¥çQó$w>ÂÿúoÇ?ø§ì¾ü|~ø-oäõlÅ·L6¼òJ–ÝrÅ•ûwðÙþ8ÿí'ºìû¡×²¼x’Ì«RóÇÈ0 ·¶o±ÜY b˜n•ú„J2LÛgrË¿Ï@:$*%ít©*;Š™=x”²íQ²KôK°ïͯ)8yÓÌM·IçgÖV­géT·ÙlÒl>uÀèè(×^{-‡" ƒ¯k –––˜¥ÕjÇñ× ¯ßhÓsê0°^¯³}ûöÂiù}ÈpjV’U"$d>çd÷$ݬC,"4šDÅtÓŽp(ÉÃæ(• êÔWS†Ÿ—¾0ñÜ rÝ&M—È¥…eºñüvñiáT7ƒ.&Ÿú3·2˜½ éV1*ãØVñ4X&&F"±°*))ýu™֚8é„-¬úž×X»Ø=KÕÏûÌEsô²nÁú÷<<ß{Î…¡Se~©TL©œˆˆT¤Ï¨\«ïÁajjŠÑÑQjµÚ7ä®_¿žÍ›7sôèQî¼óNfggyòÉ'ét:_#.%œžç1 PJ!¥$Ér¤Î‹ nš¢2RóAi°,‹^¯‡e98¶…Ê3ÎÞ¿—îÿƒA€S6)—Ëh2^ð‚sø½ßùÝnÀö›°€0\¦×ëâ9 1M‰¥r²,G)M¥R]q#¦+¢›EšÄ\P㸘¦Mšç„ÝLiÊå žï†!Ò4Y^Z&Žc<Ï! BzIŒï{dI„ë¬P”*‡B`š&¥R‰<Ó¸žcyA€ÊSò<§\ö1 “AÐ 7”ïû¸®KÆäyN’$ضM©T0XÓ$Cél%çÂ[PS´ø¾GE¤Y‚eÇqúý”~¿H¸ô|Ƕ‘Ò`aažz£Ž”ûT)…Ò`HA>UñHúÁÓ0±L¥3¢8Á²‹ð«,ÍHÓ„8‰ðñ(—*Åx½+á_EèˆÖà{>! #4…kÐn·q]^» nàA`”ëLO/ò¾÷ýZÀ+_y_rý¥9 ID¨<Ã/W0-“`å±»®»:²E8M£Ñ \.E†!‘RE`› ^·ÐJa;&µÂZªaYªÑ™"‰sL%°L ß+ÑYžá导šË?òw|ìcwqõËoâå?ps ‡‰‚CÚô»=´Òx®ÏâÜe¯D’¦X–ɶ­Ûq ÁÒÜ4ÕÚ(eßáÍoz¿üŸþ'ÿß_”×ýàŸžeÝè0{÷îó=RÏ@™9È]–øN Ë‘¨(¦aØÌÏžà±0wx†¥¹êce¶ì=‹÷½ïíl½ðt»ËÉ“ AÈÃ=Š_­påË.fdl¬À!HÉÄä”ý–ôÐyŽïÛ¬Ÿ% ;”<‡$Œ±„`Óºut:sÔëÝöwÝõ6N­ç̳&ùË¿úoû›©W< 3hµ$ í,F™Ð,•©–Ê”ÃÙðØ}òؽqâÐ4U§Ê ι€?ú&¤×EZv"ž¼ýã~;²ÔŠÊºö\Á†+®àÉ[ïæS7ÜHöù[¸ìe×ðþ÷½_y÷›yòñQ2ð›Ü~ó\|Îy­…™%v¾êUðÙ9öèAb‘1yî9¸›Xy†6}:‹Ëôƒ”ÆP Šäh¥PI‚o{ˆåCK £Šr@غ1 ×/324ÄÐö£T¡œÆÔ³}‹'iŸ\drmÝúŽV𦠖––xì±Ç˜žžÆ4M¶mÛÆ† 0Œ¯ÞD–J%¹ÊiwÚ¨L14<ÄÔÔÔª UÁüü<333Åõ¸Tb||œ©©)jµÚêšðýV‰ùUÿo Û°¿?öêEú&Zdy‚™§ÅŽø{åéIÓ¡´î0ñ€xþKt°(UwàyëV«§Ü¨}ݧ¶éDúô10qq11II‰ˆ°±‘BRu««k=i€pÂ>B—ÖÜŠÏrå*'ËsêVCK<Ã?m„U­5–4i:C´³ó½Zö25¯†kÂêZ}¹ž.ÁZ)E†ôû}‚ À0 <ÏûªCÕS£ü§¦ ƒ‹‹‹T«U&''‹œ‰•CÔ4M9zô(ív€F£ÁúõëÅ÷ý¯ÛO¬ÕZ=å~Á´Á­#j±•‹¢CCå}°Z$ѧ$IŸ4IÈSGy3Ãqm¤!¨T}’4[ c²m‡ ŠÑ*ah¨ÉÒ²¢Ûí’Ä5Â0ÁÈ4Ò’x%Ç.Ñi÷é÷û¦@å­åejµ:õj`"ÒãØ±ŒMíÂu â8¢Ñlrþy1wr©ÕG`ÛB*P.Iœ‘äy®ÑJ#Ѝ{¢0F+M%ô{}\7¥RªE a¢Ã°iÈUwk–e(UˆræÿeïÍÃ,« sïßÚkÏûÌuj®ž𦛩iiAPcŒ#†8}I|¾ä^¯Q£1&j“G£^5^£ÄÜDƒQT "34 4 tÓsuwÍgÜóÞëûceÐx£ÑäSo½ýO=]U§ÎÎ^k½ë¤Äõ<È3ò,atx¿ß'KclÃÆ” 48Ni·:†c{¨ŽgÅIZ¨õôH£TrÉÒ>I”rxá(õZ Ó©qí×¾Fµ¹·:Lfø çœÑä¹ç?Ÿ[>ÿ|ùÿ‘mgœÈKßü²A“£ GX¿i=­¶§»$<|çm9ôg>çÙD.­“ŒªyÖM¸Œ¯¿˜ê*>ø×_¦Üÿ,á\L¹9Ä–‹Nå²W½ŒÊø*Ýç9/>7½ùc\ÿÍÿ‡çl;‰ºðÚ¹q+ϼä^òêçR-78vì(%oÒÄZüÜèVXñŠ \¹ãlnúò¹÷úkð¹sÞt›Î9• ÝeáÈ^¶L¬ÃˆuV^x1÷ÿÓ5ýNx鋘ýò?püŽ¡rÊ•ºdþèÕ:qÊôñ>ý bl¤F¦%xUÒ”c õj»\EK3P4€m‘õúø ”i ’ÊŽs§=wzŽÐï/Z?g<µ*ÔìÑÒ"éÀìÚµ‹©©)šÍ&§Ÿ~:6løËþÐÐ[·ne×®]ÌÏÍ#„àÄOäÜsÏ-ÜJ!¥dçÎÜ~ûíÌÍͱzÕjÎ9÷.¸àFGG—”öËø¿u½$‘Òr²,@ùïZåiŽM؃'#]uøNºsOÐ)ZžcÉ2B–IÉIIèÓg6Ÿc:˜¦Õ_ø±yªnîb*“¬œRÑ«hš Úè#رm5`yÑ÷sEšóÙšYÅÓ=<Ý!'ÿÅYD ƒs€-Zý:n‡ÜΗ³—ñSôQ199Éää$ív›jµÊèè(®ë>íg-ËbõêÕ¬Y³†ÁÁA|ßgbb‚³Î:‹“N:i©T·Ûírà 7ðä“ObY›7oæ9Ïy[¶l¡\./Ÿôeü´#*.TW`SAO§YXØK´‘2@ˆ¥ªhš…¶KøÓ=ä*O AXÔAk"ÎæL¨ÖNÅqÆÑ´e•õ/:¤&©5Æq*I…¤Ÿ0›ÌÒ°4Dãß|þ%IB„t{]FyR=É@e€õ•õ ÿü.±ÿ b5I‹<Ó<ìâ÷}²DÇqM,7EØY¡I‡n\×#ŽJ¥ IÚBj:†¡ÓëA·Û&IGŠ$)1m©ä(tÃÄq,K"=vÛ6©”ÌÍueûgq`ÿ!žqΉX–C«;I} Î–“Ná_ÿ*n[óHUL’ö©xŠò& ]ê !ÏJi¤i@§$q†iZè²P¯*ºn`;6ŽãDBh8† Í2¤¦¡”B×Mâ(&I¢(@×$Ži0=sDZ¢(`B‘„N¥Nh¥X–Ê ˆ‚BE©eÙ@‚iéXšq„ÕâèSªÐ§àÑR— 3MslÛZøCLÓD7 M# C¢I–ÔÇq!R…aHEi“b)&$žW¢ï÷1 ³ ýMH©!¥Ž²´8N!¶í€*T 0 ×ý"+Ïy¶å’¦)a#„øAF+  Û6—Z9…(HæN'àOÿäÃH‘ñÒKÏâÅ/{>sÓO¢k‚^?E)Ãð°íŒz3Çsm²(C׋lÜ(ŠRE1ŠÂÂkYåre‘,-"²,Å÷ýB¬%cQ'?ˆcÈUFœô±­ sYUšá–tʆNèâ×_ööÑ/±ñ„œ­'n!‹¡R²× ›Ý»îÃïúTËMtisæö­ÔQj`:#ìÛ¿M›6sé¥Ï䟼_{á¹l=a ~§C¿0wß#~dO>ùÒ€ukWqÆϤ¹rúØ(­={Ø}×-¥x`÷cl=çN=ïTJ+WÑ9zœ#ǧA”ˆTØ¥ÃUâ8b>L(Ù6a/Æ´tŽÏ´± üÙi’<ÇÖ B%‘Ò@i!aØe~ŽLÎñÇïù´—òsܶó~Ú]Ÿ·¼åeüö›~“…Î,žmb 9.ÒrÉ´„,ŠI㘸Ó+”Xõ:†eF*Šéw#ÜfO_Î üy#Žcî½÷^n½õVüq¦¦¦ˆãß÷QJ±aÃÎ9§ A±ºiÓ&Š2Œj…“O9™g?ûÙÔj5”*J{½·Þz+R—¬[¿Ž³Î:‹íÛ·ãºîÿ•jÕeü¶]EˆÁ ­ÖC”Jëqœ_mº”Ñõ”Gs¤¡ÑÚ=*ŒQy…ÀXÁLr\M³ æAƒak˜5k Uµ¤ár•Ó‹ºnf²w3ò°µ ¦>£i’SFT×U[¾±~ŽXðçÙ×ÚG—yª®ƒ4Ä/”¸Z,6äˆEn@-_²eü´÷ôz=n¼ñFî½÷^‚ àYÏzçwcccOûYÓ4—\,¥R ×uY±bÛ·oç¼óÎ#],מžæöÛo_Êw=ûì³9ï¼ó˜˜˜X>áËønV‰ ‚®›T«UÂð(Ýîæç÷`UJå•xîðÓŽƒü9²Þ!ºùq¢”"Ë,Ë"zTËe¼jßïô:ضEž§Ø¶MÙõŠŒØ(FhN©DšÇèRbh`JÍ0ɃÝРωTPäw¥)YãGÆ8O8‘gŸ6ïý“/ñ÷_¸™÷½w eÛÑŠ‡§Óï ô×uXµq–f3yhŠ»B’BÙ+ã‡=†jí™ã¼åWrÃ7oä¯þô+|᪓yìûño|Õ½˜Õ• Ï>};c§l…‘T’Éý>N–e‹“p)w}ppÕ«W366F©TZ>éËøY)„ð°¬Ò¢¨,$Ë54tDÔ%WGˆ˜%ÿ ­Û ¹Âì÷! ÑtÜ(!ô †7†á #4cù´ÿ’¡d”XQ]A»Óæ‘…G¶‡Yï®ÿQJ]¤. ³5Ãt<ù¬«¯c}e=ž¾ìú‰>•žmÒïõЄ‰kV0Ê%z¥ˆB‰m—qK&š~î£)QØÂ’ùiÆG‡Ñ5“C“Sl 7`Y’ç aã8%²4'U)I$RÇõ‘ Mr”Ȉ²„µ'¬æö«¿‡e6˜™;€aÇ$‰g-àØ‚C§©TKøa‡ œÅ2R'Iº.õZ(ŽÈ“ÂÒ­TAë–N”„$QL„¤iŠáºäiŒeVÛbð‹ð{],˶M,3Ç4Lü @ƒ&P*#Šl×ÁT6q-2)Ò$bvæ(Y y³3Ó8ŽM„8¶CèG„A€mÙ”‡\)t]ÇuœBå«Ô¨r‰Ô@£KUˆ:Y¦>†.Qªˆ[IÓˆ$ BVS¸uMäèÒÄïèšIµìô#úÝ.Ý,Ç¢Q®173Ëî]²~íêU’ħ\²ñÐÈâÛ,…)J„Iˆ4sL]#ËúAŠ•[¤IVä‘"ÈQd* t;CjCsA„Äq ?ìPvÇ‘š@Ó50»òWú†¯yÍiŒŽºäiކ‹iJ Ý@åBäžÀILÂN‹`1C·^«S*»ôÚ-ò4% šec‚ŠW!aa¶EµbaªZš bŸ¦»·\þþðÝŸçoýs6ocóú .:ódjÕ*Fuˆy?g~÷’n‡…h»îQkTXµu~’K‡™vŸ¹‡ïg°9L©ZF8&N—“‡ˆâ€uëV³Ðš#ó{˜yDÓÔ —¤5ÃhÅe¡µ@žg¨8¢:8@ÇôÚ=êµ*–аUÒÐ{§ŽpòŽ)™ œ!þù3ÓtŸþÁÛ9pp/¯ºò æŸ}Û_óõ›¾Æ‹.½­—íÀnÒžšå+_¼–oßx;ïþÀ;¹åö½ ‡•ku”iïíòÄ­w1ü[Ï<#–|暯á5˘ŽÁPcˆm—ldâõ±‹u'Œa[=f<ƈ3Êã{î`®³¡ÙÜyïÿí=Ÿf°9ÈÉ' rÑóOæÔ“·p†µLŒ’„}’,b!ìS7aÓóÏÇi:Üù·Ÿç_®ú;^üžw"#Ÿ<Îp½*™mÑ<û òûnãÎ{¿Çoxët«¿xŸü§rxn–/|ùœûœ—€UÇÏß¹“aÛah¤Ì'þé3|ã[÷sÖ3žÁêÕìØ¾…-'È‚?…cZx幌 ú¤š!± ¥Ä²«ñ?†a°fͲó36lØ@ET*v=º‹û￟ýûösûí·cÛ6¶m³iÓ&,Ëúr¶×ëÑï÷B`Y†n iZßíÒï÷QJÑl6™Ÿ R©,Ÿüe,ÂBˆšVZ(•¿ÒiþŠÐÇ­†´Wcí œ¾ö&³ÂÞÁ„wug¸º‹ÿ¶åLU³ÊÆÚ&r•‘¥>½Ö£ì‹öñX>ËD^c@¥x,»ÀžÈTJ–gÔd“!cG+¡~Q¢””&CÞm½ÅÑÎQf˳E¼Ó²sq?Úí6<ð7Üp<òkÖ¬áâ‹/fÇŽ þØ‚©8ŽéõоˆF£çyKÄkt»]¢(Â0 h4?âzYÆ2þã(F9Ó¬£i›ñTŒÈRô`–¬5M—I\ø«š’”Ó:®6„ç•È]§ j¥ˤê/%<ÓcEu{â=ìêìbcu#™Ê~dŽe&ƒƒƒdaÆý˜ fijMÖWÖ3^ÇÖ—7«"b5в<Åv\”!°,‰aëÄqŽih˜º^.18^¹ÌððHQT¥iHÇbn!&I(ˆ')‰ú1¦Ð‰’¢$J×5t]C #¥QX°•D7Lò¼È×”Rcdtˆñ±QŽ›¢\u@&†‹c™¬\¹‚»ïº‡mglFw<ÂxC/’º¡c&ó TÊ‹*Å0Ä4 0Lü~@ÅUXî …k‘—!Z£i©žßïSªh$I†Ež©”qœP©T‹ÝÇ4_,Í’ÄqŠ[*¡Kƒn·‡”:†!›è%¶m`˜E RQôT¨š”*^)%žçÿdžB'Rj˜ –i’“¦EÁ•¦éø~€RJ 4!Ñuƒ’g ›’$IÈÓ T†&I–`;:RÓÈ•ÀÐ Û²9ùä“K«"Ò,#ÉS¤¡£rFؘ–G?ðÑô¢àÊ@G©"z!ÏsÇ! #¤4(—Ët»] CG)\)âÄ'MûhºÆ@cˆù¹.º^&ðCÆ×lä W]Ë÷žcËf‡3wlCJèv{¸¶EžŠÙ ê’$ ¦Ô1tÝÔ†µ"/ã 0 „"Wªt”Àq@9± t«PQˆˆBÓðܺÔé÷{èÊFjnñw´ ‘gdQˆ§;X–MÔõ±ìBÉýªK/àﻎ¿þÈUüÉÛß@³9D¹:Ál°@·×Ç«R*7èw|D¨ðJ5¼†@˜6å¡4?æÞëoãº{ÿ™ÃæxÑŽ þ÷5»ùôKÎáâ—]ý£ô'pÿƒw3tr¹Áº k)ÉA&ÖMàg!Çç[(äQ LD¿â•ÜâðUÎÐP“^¯O·§Ø·ïIµÚ* ©1Ø ^¯“$ Ia/*ë,Ó ×íR¯×i4ÄQHshÓ’$YF­RæÉ½O0\Ç,%yr7{çïå–{ÛènÛù—´BŸÍÛê¼á·ÞÀ+_órJ¶Å·¯ý*úã3}¨Ï§?ý~îºÿ ùñÿŶs6ðú+.fxÃh·xäîïqö™§qê%çBs‚üVƒ@Y††kD¦hºÃÌì÷<ë·^OÐFHr'u6ßýêÕô÷¤ñŒ³ØýþoКíñê—žÁië×òøc²rëv®ûæ­üÞëÞÊsÎÞÁß]ó·l:á$>÷wßæ¯þâs4@ÓlžsÑ*~ëuWpòæ-„aˆÈS„T¤ªxžJÍ"Ëù¿¡˜\ÆÏH÷HÉèÈh1~œà#„Àu]Ö­[ÇÈÈ_ùÊW8räßùÎwð<ááašÍæÓ¢\z½Åq)addMjKߟŸŸ§Û-Ú´GFFXµzÕr¾Ú2ž¶8ÂÁ²&È• Íút{Oâº+‘¿J¶;eÈ ÓÞ ÚÞqü¸MÔÝMÓui6WQ5?ÑËšAÝ,,ŽJ÷Z„k€£âk’Ãý#Œ9cTÍeëÚÏ ý´Ïl4˨9Š-\$¿X‹l©I\ÓÃÎüØ'HÃ_˜ Øeübcvv–;wrà 7pûí·S­VÙ¶mçŸ>ëÖ­[\?<…€§ØP¢ˆjµÊøøøÒ¸®”Z*Á ‚×ugxxx¹°j?whšùò_)È%*C˜RÿþF£4$šÕDÓ‡^Ìå{õ—%³ÄªÚ*šA“™c3Lö&™éÏÐt›èš¾ä0&Ó2ITÂÝ“w&!'•Nb…·‚’QZŽ,ûI‰U„ZlJ׋fô("ˆC”ÒÂB× L«ÌÐ`ßiZ À4 C#ŠbJ¥ ~V4¶*©$>Q†…=²Z®“fY¡kLŠÅ„&Yž24ÜdõêÕ;z”•«·ä)s²DrƧó5ü¶S IDATÅÏ•(ŒÐmã”pL)‹LL×q‰Â¨`ÜM‹,Ë—”Biš’f†&±mÃ(TDš”Ån¶ä Tž-}/Ïrz½–eQ*•°m›4íÐíöȲ¬È7ÕJê Ëv(•*¡‘§®ç†…¥TJ½(òÓ‹\Ó4-ÈТ(+_| jK‹tÃ0–šV Ã$ÏAÃÀ4†nä¯e @j: Hâ èºE¥RYªP¦B©”^ÏDzÛC—‘§‹™¢ ¥’Gš)úAN§‡çy޶HNBEx¦K–=õ¾‹Ò'¥½~ŸÀ(•*X–E’JRÛ±ÈÓ”4‹¬ÖLÑÎ"¼R•^’+ƒötÈ5ÿt3ŠŒË.»±± :í®çb óó$qL»½@¿×ÇÒu,ÛF:ÕF“4+ÊÊ’$A K ¢(ªRJ-Ú|‹BªTå$q‘µK²H®‡¹•/5…æyšÄ´<‚($ì…H‘âÛ²‰Ÿ´ÓÃk Ò>¼Ÿ]û±ãŒ“8ñ¤;¹ãž'2X±õt:‡#5††Æˆ3Áì‘Ò^B³2@Év)ÛÓ““LîßÇ‘½û8ôø>j•¯~óåT›Mºø¼ë®¢62„®¦‘y?O9é¬íHi3vÂFÂîÇÛ HÇ¡Ô\A˜v=q„f½ÂÌÌ ~Ðl R.×p\‹( fzú8–cáº.­V‹8NŸFî?U8öÔÎ{‘¯kÓj-àÖ0%~bZ’Q‚;n¾‘ÃuVœv2k6ì§1>Št-6¶•S·?ƒ©¹v?º‹¹©y^yùYÙ,óçñv¾óÝ{¹úš¯ò¢ßx1Ͻhbv/ób×_ó%L#âäí§Ókµ9>ß"p*”†ÑiÏcS.Uéö"„‘ã÷CòNÇö˜šžfd¥Å#ÝÉ•¯ÿ8µÕñ?bjò&n¹ån¼ñûTÊpî¹üÙûß…g[TJ5¤f‘„1*Ì8ù/a®—p÷ w°rýÖžµéé)«ÌB’š&¶ŸÉžÇ²©´‚?úÄÛÙyõW0ÒŒxzŽžùžœä³ûiZó·Ýy'ŸøøÇyÕ~ƒ½píºŠ?~Ï»iwñ®wþG}Š«¿øò0FzMñ{âÔ@hB-·1þÜ)­§¦†±d÷B°uëVšƒM:×_=»víbtt”3Ï<“R©´dåëv»LMMÑëõ(—ÊlذuëÖ-©R’$áØ±cÌÍÍ‘ç9ÃÃì\¹r™X]Æ݇®;.mºí]øþ1Y³òWC)’Š”®ŠÙ—'•õXÎGo¦ÑÚ…Öš sÊ(9‚&,´Ÿ@ošç1qÚ!Ç`´´žš7Ètr ·]Ó)›eÄâ¿eülè$]ŽG©{u,i¢kri®úÿ7²,+zH)IHÈòåMÈeüû÷M«ÕbçÎ|ýë_gçΤiÊ%—\³žõ,Ö®]û#¥UKϲ4ennŽùùyò~ÕçùÍ×ý.èÀe¿¾÷¾ÿí„ýY,½‚¦IÚ­Ï«áÕÊ„s Øcœ÷²—³÷nþÚ7Xµýtì\Q²-ìj™¹VÎÜÈ“»°oÿ!6ÿúKpÝÏžph×#Üpì0øØ.¯å}ï}-7}w'¿÷Öÿɧ¯ú2§žvi¢è´º¼íü!–¡ñÇïù,ï}ïŸño++W¯ãà“ß§V³(—kÌÍE8–ýcíhËøÙÉÕ^ìH)©×ê¬Z¹Šæ@“}Oîc~~ž……Â0\"VçççÙ¿?­V«ÈWm6©×ëHYAðøsèÐ!Ò4¥Z­Òh4ŠŒîe,㇖5ºæàâE-Dû”rðAür/Æ32úªÏm"oŒ1£‚EŒhï¢wì.‚¸‡6ñ\\k÷ÿøzJeÁ$A0‰iáÚ RÃ#LŽÐÉ[tòmÚ”)££/ßZ?ëõSÅ|iÌcmy-å¤üS-Øÿ³ðÔ36è¸U—ŠQe*šb!ž/b©–±Œƒ©©©%¥êý÷ßO¥RaÇŽ\xá…lÚ´éÿ˜ƒÇ1䨱c$IBµZ¥Ùl>MÝ:77Çþýûét:4›M•JåfCb¿Â̪&Èå-Åe`J“1gŒ“*'Ñ÷ûÜuü.DKpÂÐ 7‡ñHDðxëqôLgÜgc}#«²¬VýiˆÕ8 1õbHâ© tYØÜ•¦F1" Šª0h â:.º&Ð0ðÊe&V48rä~ßÇ2m² ²-¢~ˆÐŠø‚4ÌHÒÇq‘RÒï'¤iŒ&5²,¤Z+ñè£ø!º¥‚ÙÙiëá`åšs‰Â )L’$ÅqÜ%b0\T­Deñû†a"5$JI’ Ã!$y½žã8T«U<¯Lžç,,´°,“ É3…m[Scvv–¡¡¡Biªrò,CeĆa†1Rêèº Ï3 #Ïs ÃÂ4M,ËD©è/½Ç§•O)?Ÿ"ö ÃXR® 4òL ÐA(â(±KA€Ê3PäyŠ)-H4,颿(I%SŠZ½†ß÷Q¹@¥)q’äPi Ð÷»(r4iÒ÷ÛX¦²ˆq0Mò ¼²C’F‹±BJ¹t B+bÊå‚„B %rt+G—:R·)©íîš°™›íñÅÏ•0€Kž÷ljõ*½îIÿ(J·ÑÝ_~bUe´Ò­tÏð˜pÇXãMš&mbz“·Ó˜Þ zíT\{`ðoó ’.Yÿ(ip¯y6޳’LåÔeŸ–Ñ"T!3ñ ¶a£‹ebõ?L\¢ÈÉIIÑ4Ɉ3„·‚´Ÿ’dÉ/Ä{Ìó]è4ìmÙb>žg>™'T!U–ã –ñCÏ¢,£×ëñè£rÓM7qÇw$ gžy&/xÁ ضmÛ¿›ž$ GŽazz!µZz½¾´aª”baaC‡áûþ’Xû—±Œeü§…q\¸ÄÿõŽ†Æ˜3ÆéõÓ¹½w;Ì<@ͪQ³k4 \Ç¥öØÕÚÅž…=¬°W°¡º±ÒÆr¶îOG¬H1’$MAhȬ ì9š¦ðJÕZ ”ÁÈÈx‘™ªr´ÅÁ¡T.±÷ÀQzýn½‚aäX¦h¤i²Hp†$MsÇD7tò,#W9‚ EB¹ì†aãÒШQ­”Ù¸q=ûì¥1?ßF1Y–Ñl6s6`M/ˆ?<Ï ‚Çv(—Ë´Z-„&Ñ4 ß÷©T*˜–EE$qŒã:ØŽKà÷ñSðÔœ¦)išbšæÓâò4MGJA†´Z”j300€R’,Ë£2ô²IžäxŽƒ.5ò\'ŽÒ\'íÇ$iŽcZÄABk¡EÄ´ú=ŠB¦(¥S« ÐnwH…æ»^ºnÐïwȉà§ÔXqcèf!DK¥ã8¨Ì.HMµ@H\LËô¹2¸ÿî=Üró}¬X —¿ü%¤B§×í¢dyÎÜÜú¢Ý6ÚRn­®ë ²Ïå—_Žcš¬^½™¹ùI|¥ŠC¿Ógdxƒu, ØóØ’4dxxDZ8vìÈb>¯K¿ßA×u:¾ï“$ žW& CöíÛ‡®ë¬[·MÓXXXXºÎùâ¹lû> í6UÃÁ.ÕÈ{>ÛÍôñ£ 6뜲cé­¨OfHd˜c<üÀ£´ç€`?/}ñk9°ÿ(¿õÆ+Ù´u%û›0¸Ãù¾'ö-pp>åü‹ÏCŽ®&¯Œá8uúyLka†¡Æi?av®nÛôCÝ@Z#Ìw;Líë²°÷^®ûöƒ ¯Ô˜ÏîÃ[ÍúSWñ싞ˇ>òŽw½‡Ûîx„nñšß ØwàqÖ®[I­Y(ÉSºØU‡ýG悈‰Í©|×å¶k¯cÃYÏ ¯”i èºÅÈÈœÕd÷—®fõþ½T'øîžil]ñÚ‹ÖpÅ+_C’÷847ÇààkVsÕß~’jsÌ:i:ÍÑ£{p]ÿõ;Øÿä$_ùÊ·yÛÛ®æïÿþ›üî[ÞÄ¥—þ¦ž ò„8Ž0–‹ÿË&)“““?~œ8Ž)•J ¿ì! I–0Û¥µÙ\=‰†ÙÀFiùp@˜/MÝùÈç`ݬyÐ~H¥¯Ä]Äü^¼¨#HLP9šÐ÷Æqt‡ýý™?ÌÈÀ¶a/ÇüGŸ¤´hÑ¥K¦#–È!ÔªPlž Ól’Ê”……yt¡ãã3Ï<5j˜˜Ë×K‚€Ûn»ë®»Ž;î¸Ó4yá _È…^ȶmÛ–b°~”RK1O©U‡‡‡i4O+¶ô}Ÿv»mÛT«ÕåÒªe,cÿ¹ó¬$avv€Œ“BcÌc{m;|”û;÷3³~†^¥G¢%L÷¦yðèƒÜuà.:y‡Wl{[ê[ÚrlÉOM¬š–AE¥R%ð{˜¦…¦éô¢”¤Z-Ñh4xø±caD«Pr,„‘’g)Íâ8CåŠ,ÉQ :í6ºÔ0 §°…/æ\J‘“&Y£ëÛv‰’?ì14TÜc{dŽí‘$!§ž¶•ûî¿‹^Ïgdxœ~7 «EAþä$IÊÄÄÄRq”R9Q.æ—jX®ƒ4dA¦)åje‰<Ò4~ ë:Žã"Äb˜ï",«(JŠ¢ˆ¡¡!”R‰ Ψ‚øL’Û¶Ñ¥†Ô‹,ÕN§S,º‘R/,èJ‘$ÉÓ”ŸP¨›4M#˲żÒÃ(rKƒ `hhh)6à©\©§È^Ïóèôûô}‘@Ó-·Jùˆ0(J¥²€†iá;ºW¢ÓéR*Ç+„$ S4aÇ)aE ¶åb&ö¢²QJ)‹"0A‘±+¥ŽeYKÊQÇt‰Óœ(‰Ñ4a4tÀÆqj\ûO’$pîÙÛ¤;7…iÚèºÎÂ|‹,M9õÔÓPJÑiuÈó×6B KÓ4ˆãÇvÒÅB­,+ìýYž!4$Mñ£ŒªW¥;?G¹^CD!†e@#£,³ˆE–‰?=Íá#‰‚‰ñ œñ’n‡Ü´h/tæÛ(ÇF³,t«D0×á’‹/â±GŸä†äï0Iø›?ý––2Ò⯿’á¡•¤äŽÅž{îajßQêµÞ€ÃÅ/}ª¡!k·0û“¼êy/Aµ}>ù©@¤o|ã•´;Ó8v›™¹ÃèZN¯3P½®”R·ÅÑ£“(rF†‡Q(,[Ƕ‚ eÙ„aDÇ8ŽÃÐоï/©ñt]gaaa)‹µV«‘96B7q’WdÒäо¸¦Åg‰;ÐàØôQœ 9±j“D^°ÿñû/äÃþ:÷ï~„±zƒ¿¿‹û¾›JµÁµ~/ëVlä-¯zû<Â-{Á½ú[üõ'>Ž'MázeH<´8f¤±JeD}ÿrã=|àÃÿ›ûï|ˆãûá¤à¹ÝOí$q`dÓ(¯|áÅlݸ†?û‹ßehÈeÕê&ý`ŽrÃ!'='Ž{ÌÌv1, …}÷°cÅ VnXÍîûî‡0‚ÑLaPÒ=Ô|áYœ|êVüÉ#T›už÷Æ‹8û‚cìÝù3wßEmËr=djö#ÃuL¥ÑëNñ$R" ŒR¶mÿÿØ;ï8Ù²ºÚ÷Ù'W®Î}cß'ÞÉ3ä¨ ¢  $ÓsQœAD1‚OQD%(ò2äaff€aò½sÃÜØ·sw媓÷~Tß–‘à{‚‚P«?ýOu÷9uNí>û·×^¿µ.áš«ϳ~õeÜñµ[ùËwÿ=Ïùµ?äÌ™y^ýºõɲx0k}Ÿ8*qï½÷®=›‹Å"¾ï÷Õî«Í‹‹‹<ðÀÜpà Ì/Ì342ÄÔÔÃÃÃ"V›Í&sssØv?Qó[ÛµÖdiFm¥F¦2††‡(•Jµ¾;„@˜.†7Œ›mGé”Nç(ž·Ë*ñ?/ë^)Z·HÒ.iš’3sxÒë+·„ÄÏMQy†ÒÄ+÷Ò©E:ßÀ¾iW¿åšÐ#UËÉ,–•ÇñÖ!¬<¬Rg¶a“3sh¤CS7±°p«Zé5Õ½çyC|ONg1sáq’0âŒP´Kd™¢Ûí’féƒÔû?Ìçy„xyKX ¡eÔÚ “Ra ìX+ÓÓÓŸ_ëšcµ:’B2âŒpAåê­:³Ù,Ÿ¯}žƒÁAÂVÈ|m› †.`ga'#ÎÈ fúÏ«hÑcÂAA?å!H´Äu=´ˆñ<Ãè'Ó§IJ"QØ!NšHi†Šn¯KµP M2)q®yˆJ)QJ“¤1IõýH•ÂHúE™ÒT*ffæØ¸y?ó‹'°-¥¶n¢P(pöì»ön'èN¯¶Ø{,,,år00 “0ŒW•¬A£t?JiÓrúaM½f«ƒeš¸ž×o}Îçȹ.ËËËk¡=qœâû’N§Çúõ±,›N§ƒçù½^¾H8ŽÃñãÇÙ¾}+Y–×õú„T¦I–f¤iº&Õ‚€(ЍT*†AõUŸç<-MéÐëõȲlMÉjAÐív×Ô¡–e±´¸„¥%CÕ*†a“i¦è=:-A¹4B¯WC§Š\Áe¥±D!ß×Âd ,Ûí·|;.q¢XXZ`|ÜÁ±]l×%MC<Ï¥ÓéÐjµ¨TªH)I“l• þ7ŸØ,ËÃJgHÃE#ˆã›8z½Å—n8„›—<î '²L1<4ÄââA0>2ŽŸséµ;˜fŸÄ5„A%Äi€&Á³„ÖDq„±äÕív±miÚ„q¿Ý´<â„göÄi¶Nm¢ÓªSðÈçû*˜$biq‰4Ké,O3\-QݶAÿ½ÑqÚÍ89 ~±Œ&õ•2Ö\pñ%üÒ/>•O~üõ¼õßFgå רÉ5—^Àøø8¦t8{zIŒ_ù&w>Êú=;Ùñð«¨÷–‰Òæ2ÓË4j1A0ǶmpÝ Ÿc;¼æ5Ïúuùù§>‘ƒ‡¾A.'±LC ’¸ƒ%l¦6Žqfn™$íîaÔ£X, tB·àº.Âð0Wýhû!jÛ¶Éår˜¦¹f§`YÅb±òµ:¾¥cS-Wñ“ŒÞBîü"‹ó ¤Âà’«®¦Ó ±ü"‰²IUÈôò=Z³qx7/~ÉS™>u/'N6øÚ]5fnûÔù¼òoæ!×\Æk^þ:>sÇ=¼ëm¿Çÿúí§sÿÉCìÞv§fرë|ÂÖµÅyò2O=‰8tÇ!þúŸÿ‘~èVœ¼äÒË.à7žý4®Þ÷0þêíoåâËF8ïÀÏðå»îçàôíüó‡>Î[5ز¥À‹_|-;¶_LÐõˆCMmÅÂ÷Æéµ;”K°l›Ó3÷’Åœ`Ûùr×í÷púþ 1ÛicÅËŒibé¹ÌÞsoçf¶\u€dlc¡Ëôm·1¼c’¢aH—æÒ±öNL­=aZ­€©©]Ôj+\ÛW¹íÖûؾõ<žÿüQåõoxÅBÂï¾à7ˆƒAxÕív›[¾z §NB)ÅÈÈÕJõA¶,GŽáà}93}†b©Èþ=ûÙ»w/ÕjõA ¨N§ÃÒÒ–mQ©T¾mñ”¦i_Ù'T«U¬>£ìÁ:Àw!W L³@±¸—vç0ÝîabRºÿ£ÈUFë.±ªƒˆÒÂƃ.Áv†©V/GJ‡%‘Ñm5àômH{#nÉÁ°r«×‘©:‘Z¢#|§¸¤û æL ‰mXCPWuå`6’ŸÌÿ·s]'‘Šh…-Z­&*ÓLŽNâÙÞ÷lõ‹²ˆ³i’$bÜ¥l—ÑY#>[µ†úa_[»Ý¦Qo0$úA–aG‚z+%ô2 ¾†Áq@¬jÍÉ“'ù¾À 7Ü@£Ñ`ݺukb™ééifggô7Y–122ÂîÝ»¿X=}ú4µZ±±1ŠÅ⃈ è e‚UÁŽ”rm-w®Ãr€àV6Š>Ÿ766¶Æ™œ{îi­Aƒ…Å…Ãâàð¡æ‡øzíë¨L‘6SFÕ(WL^ÁU®bÒžÄÇ«ÿbUJ SØ Ji”Ò¸žKœÄdQDw¨ÕH³€8Žˆ‚ŠžïE&¦”ŒŒŽÇ­fÆú’´ $ýVq!Dß6ÀиŽÝ/µUÚ'Éâ˜v§_ò°,ÉúXÜÔ IDATõë¹õÖÛ¸ú!S.— ÃR¡Š“Ë1<<ÂüìÝV—|>×÷AUЉ‰ ²,[#ûL}Óv» ÂÀ¶ÿm±+¥ìs…!ÅbqÍo§X,¢4šÍ5Ei–ex«¤kÇk©÷çÂ¥×%ŠSlÛ!Í"ŠÅiš`YÖ·W1*3ι°)Ï“kéëçT­ç”«†aà8N_U ûÞ°†!ð},S(ÕOQ®ª¦Ù7©®‹ÜpÃçù»÷ÿ3.ç—~ùg£X® EÈâÒi*ƒZcÓ11-‹¢“[#u•ÒDaJšjlÛ%çç×Ès÷øœ’7I’~ÁžilÛÁ¶‚ Žûª]­B†Oœ„q ÛvÈÖñOüfÑQ—óÎß4¶¶éõúÇ®TªR²²\g¨Z& ƒþ?¸Ö˜–‰iû„a‹$‰ûd¿ÒCâ8Þj®À´Lâ´ï æû%âÞú¦· Ò.ô¶7£ƒe(tÑkwˆ²Œ4I0L“»/ Ý¨‘¤&–ëÄ]‚N„²lTœ2\ª Rˆ£€u•„1ô¤Nªº|ðƒ7ñ¯ÿòvmª°röó3'¨V'81}œ£'޳yËžü¬_ 0RWÎR¬–ðÔ0iGc»B„èV‹µæ4×^û,æj¼üïDXð‡]ÊâÒ¶­¨”r˜RtÚ4Úu E¿H’FC!„¢V_Æ÷òt»mâ8Á4-‚^D£ÑZ ªËçó¸®K³Ùüw"ýqÚît¨ $a—z­…gaÀÜâ"—=ä!˜åa’n›ÄpÂEc2:²[‚ˆÂv—ßyÞoÑ M;˾ýøüîæŽ¯ý"_p OV øÐ?‚cÓ§‰¨ñõ;®ÅP’É‘ $Ý„ÖR ©a~n™¹EMq8ÇùçmÅ/I,3æ«·\Ï­ŸþÇî9L”ºÜòõÃtDJ1ÅBßë03ð×¾•O}âf~ögŸ€çÚ$i‹3ǶnÝB–z(02¼ŽíÛ6£Ã:ã—\ÉԽǹõ®cü£ž@9ñ±mAÐj¢Ú=œR‘j¥Hœ$t»†G*ì9p7ù‹l¼ïnÆ~­f—•¤Ë™™i\/ÅÏ Nž:ņ [¸ó®;¹î…D±0Ê¥—<‚ôã¼ò5o P.b»‚7¾ñƒüÔO=Šõ““ƒYëÂ[ Ç!MS9uòaÒn· ÃpÍëÚõ\öîÝ˾ýû¸êÊ«¸è¢‹¾-%¸Ñhpvú,¹|¥¿]½%¥¤P(÷Ý{ßZPÞC®ySSSƒc€ïR$Héá{CZ„á)², ŸßŽiæÿÇ\‡ÒŠ… ÎLoeZŒûU,ù`"O``™%Š¥óA zñMD‹‡iœü…É«É_‚!]²l‰Nç$QÔÁ/ìÄq×é}Û9mÃf}n¶é°Ô^Âöl*~å'¶­M%Šz»ÎÍ‹7sÓÒ4ƒ&£î(6îê.&ü Œï`6¡µ&R§ÃcÔÅV.òÁó<&'&Ét¶ÚöÃa”Ëe|ÏÇölœÐa½·ž¼eé%½ÍÀ~e€þx^^^æØ±cÌÌÌÐjµèv»´Ûmî½÷Þ~&ÿÛ(ˆ¢ˆ /¼ç<ç9Œ=ˆ4={ö,õz7®u¼|+Éq.Ðjff†[n¹e5[¤Ëå—_þmuÄ 0À÷û|‹¢ˆ™™ …£££kÙív›(Š0 ƒ‚]àÂõbT h?À|g£l°1·‘ý•ýì(îÀ—Rõ?M¬*zµ[eI’’ÏyR€)±m/g2:6B­vF‹rÙGJ£ŸÒ.ãc,-.oÞŒ)’$C‹¬Ÿµ¢5)Á0­µð#Ûî‡u ˆ“\Î`ß¾}ÜtãWXY©S,9”JI”a \xÁ…|åÖ/ñèÎÃè¶K}¥è¹Ôú4Mñ}Ÿ4M‰¢­5¦iâz>qÜWáó25MÓ4ét:X–E.—£×ë·GKÝW0u»]z½¹\Žv»M>Ÿ'Žc°ï“Ç1 H“„œ_$ b6lØHt°,›8ŽÂXm/5}^&çûA@¡Ð7êt:k*ÖsÄo?¼J‚-V¡’8ŽPª}QaYQ’$B+ÚÍ%®¸úŠÃ“¼ý]Ÿàçá:Æ'§xÃë®åŠ«.Æ0O£DZcÛæÚ=SJ¡µè«3Ó Ó²Ch4š”ËUǦÛmE…BqÍŠÀs}â8¦Ñhcš×uû»´B ‚°E/ vÓÌqã wRkÀãz“%tcÖHYµêßZ*—׬,Ë"^%v ©‘†AöÐ ~žLôˤi’*Ò Û±q^¡Êë®{wÞ~Œ·¼á€I>Wdiî †Ôôz^¹ÀpµŠ›/õ¶;†–’F7&JM*•2iSp-t/B )a//ò•[oáÄ™Àâ‚ó6rüØQ6oÚ„av­2;7͉3GÙ}ÞnTeˆ… Ç‰ÖðªM®yÒï÷ §K:ôZŠ…ù%Ò(åo|+Ÿúô«(ç=.¹d7 ó¤YˆãX˜¶ÇÖ=e¶lœ`ÓèW^vö†,ß ‘VÛD¸4GZqÈ—]Ò,¤„‚ŒÑ©)ÒZ›ÂÎMLœçèWoeøÒóй¢C<Ÿ°eÃz¢^m[¶“)ƒ,ëõÇw1µe Ï|Îÿ"ɯýk9}æ,"…·ýñûøÃ·¼j0kýày{÷ìÅu]æfçX\\dee×uéõz˜¦Éúõ뙚šbllŒ]»v±wï^†‡‡¿íX8p€\>Ç–©-ògBËå¸èâ‹ÈTÆÌÙ<×#’$|ü‡°í †‘’eÇótºàyë±­!„øÑW°+­iD]Ã.£Å1&rãXXß±h·Í åÒ˜Õ°GÔ8Ž”.Òt0 %â¬N’DF ßß‚iæ¿céo&CnßZêtûM£IÏëQ ð ÄwÌ÷æ¹kþNnYø ÷÷¡…&̾èB6mÚÄÕW_ã8Äq¼fðöÏ`€~<¡”Z*¥Vóo‚µ× ß½]ô‹<¬ð0öä÷0×Cº’áÜ0Y!/òEý÷C¬šÒF+ÐYª‚ÃÖÑ7¨…CCE^(ø´Ân‹B¡B¹\áô©ÓìÞ·žF³Ž¬FÍS›ùð¿ÌÑí´ÛªCUFGG×Ú-<ÏÃ0 ’$Y#mÇ¡R©ròÔ4a˜P­VÖ|<»Ý.acYîj[~ŒRàØÖšBóœ·j’$k“a‹¥Õ¶wã¸k è0 ðýˆlõÞõ >-%–eã8Y_½¹JbeYÖ6Yݽ´,kí<ýÝS…idYJ½Ñ^ó`õ}Çͯ…ei­A)’¸ÍÙ…Æ&ÇxÕ«_È¿|ì ¼ã]åÏ|ù—/ç!×ìgeé0I!­¾/«Öýv—\.‡4l⨯òì„=”Šð¼ÜjKkµÝ?&Š"|?×où"²4C©Œ,cÕ %M"LÇdz󘖅‘uq=‹Žæk_¿“|žôäÇaÛ‚N+D% Ë4‘¦¹ê“k ‡ÎJ a°ºó¢È2…!i–!´À”˶љ"Œb¼UfÌ9˜¦É]·ßΧ?y;ÿçSïfÛ¦q2•°pfš,ë1:6L¹ZBš&½8d~¦ÍøºóÐX$:ŶR Ä –HÏ F5ÔŽŸäŽ{ïàdm‘Ÿyúÿ­naó¶Ûyõ«ÞÊ?}èƒ<ùqWp럢Z-r哞‚Q§qr†îì2Êè!'Jå^iˆúJB»âù6޲HT ¶d‹ru‚ÙåãüñŸ¿Š‰?ý+þð­Ãñ-öïßÎȇĢXªPÎ z!óss<ÏÅqMâ8¦V«a¯¶+»®‡V¶e¯)³,#Ÿï©ååe’$! C´Ö«^lA§ƒ‰¢Z¨Ò«w¹ãŽ;˜Ø°‘-»öptnÃó·sòÔ '8ÃüÙen¾õ>â^@Ö\}`”b1ášGíaï°mß.l×#¨wò*|äýÿHmy‰ç¿ð•$”ÆóÌ.fiÞA(Éûöó¦·¼ƒ/Þt’ç¾äÞðÒßÆì¶™Ÿ»ŸrÑ'ÉÚôzg #Ã)Õ!ðƒS¤:O­021½1‡WT\zàì»hœ×¾æµÜôå“üüÓÊs~噜:u”8éqï¡û¹÷¾Üwëí|æÔ,ïxׇ±]h/ÆM›‹/»”í—¹JBJbzÌ,/³%Îé(äÈ ùG«Ì}ù^8xoj#eQŰ\+G!ïÐîÄ\qù^®¿þ¡Ìœíðö·ÿ-ïý‡÷sæìF&†Ù°Ù£=ßã«·âè‘i.L\ßïâÊ÷|öíÛÇæÍ›éõzAÿ™Ç1išbù|~Í{µT*Q*•¾c±qùå—399‰i™ŒŽŽ222ò s‹EñˆGpþyçÓít1m“ááá©_à{l å…|F§w’v÷^Âx‘áÊ•«ÊÕý8Ó ¥Á'G™ò÷lÉ7Í"¹‘‹Òcåä'h5ŽÒKš˜•qìâ:\®³ÓÌ}ObY ‰4úÔhÑÂYýúIQbh4ÁÑö>½ði:Y‡+×]Åp~˜nÖå–Ó_¡¤Jl1¦°†7¬Õ»úì2M·á3ÎTáÃöF’8¥¶´L¶êÓúïI§ÿî…d³Ù¤Õj14t3_x1»<”õ[†:fåØaŠ¥6ŽTN¯ì£$,×–ÚÁ÷Á”jcŠB9O’jD’`ê”Nmš—^÷«d‘âcý8gNîç¥/ý]ÆFG©-/So5ñð}‰ëÛ4uÚ툡áa+‡V‚4ËôpÆsX¶M­¶ŒmK&*SÄYJ§ÓC!±m‡8‰@@¡RÆÎWÚ¥[ïrðÈТeItª¹bÏŠ$LuK Mì$çæ‰u›ñWsèöøæWîe›U ç;LŽNb0<¶•Z­ÆxaÏ/±²4Ç—o¼…3Ó‡˜œpx䣚ÇÿÔc¸ðü xöÓŸÏ¿~æžùk/æà‘gf®ï–e1::Êèèè÷}¬M›6±iÓ¦ïúsÇqØ2µ…-S[7~€ÿL™†y,{=®êDó¤É½à ž{.ÐêG¾â_-Õõœ&/VnKÚÌÌÞÄéæq‚ÖQ¶ŠóÙ]ÚˆçŽcÛÃÿ1©¨áÜ©~R ™Îh'mNuOqºwšmåmAœâçò<|Kt¸êâ]Üüñ²ub”ñuÈ\Å "l…hÓ¡\¢P(‚ÖèÅi‚î)œ&˜Ž¢X.Ћ:Ô‹8މçP6|:õ6½ Êº›—¾àÉ<ûiãÚ羑gýÒµ¼ímÂöíûÈÒYâø¦™ô=aÓ„B.O1_¢ÓêaƒB.‡i˜h×@“R­æ¨”+(¥™™]Â0=J•1¤´p=ŸœËEæfgù—oçs×ßÄ}_8ÈòL!¿¤ÊフÉñ2{¶l¢XtYj/Ó ;l­R²#ÚºQžöÊ)¼¨Hg¾†L59ÓÁ9j§—iŸ] zÉ.’0ãéO>_½ï ‘ ýä<òÊ2¯{ã{xÌ£7òšWþ:As†,íJH•eg¨´‰‡çxH×"WcÃÎÄQÊJ´È†ÑÍ8¦Gªº¡h.Ÿ¡ZÝÀ›^÷jN{>¯zéë¸þsÿŠ–‘tÈVjtDJf JeͶ}ë8²w”k®¼‚?ý¦OÏS7KÜtŽÎò<ù»¿à}Ÿ¾ŽØðظi;?÷èGré–IÂÂ:"³„¥ËX½z‚ØL¹ó®{عc++m^üâ×ð‰ßÍSžòP^òâ_åªk.Çu%aÔ!ŽxÏûÞÃã÷‹Üu×ÑÁ¬5À?y”àâ:SŒ yôºÓt;ÇÐJ‘/lÃBH~TeyÈPtèÒ¤I…ÊwmÉW(‚4àl°ÄÍYÂ*¦§cžêsIi Û.ü?ŸsÁ£J÷'fÄ(­èÄîXþ& ½6å7qñжçv90áñëŠÃ+‡ùJãfFFF(抸FÿIC§1­^“SSXžƒçw±­OzØ““kmÒ?L†ÁÐÐåR!´A¦2êQéÞq“8M±,»¯à´80À ðcH¨†aÈ™3gèv»˜¦É† ¨äÿ;‰U­Õš'ƒiZ …¾‚Ò±év{kÜår† a`Û6µ•Tfë„ɱuT*C4›Áª?£Dë> fYÖZ›å¹( CÂ0ì³å–E±X¢Õí†1ag‰]»vòÙÏ}–ÙÙYÆ&|¤©(ò˜¢ÈUW_ɇ?ü¢èñ„YLFØRbˆ˜^·‹!Á0úªÅ$IQh#a®z¬öÃŽÎy®ö¢I©”Dz jË4†"‰C„iF}oÖ8Ç÷É|’4!I"Ò°oiàj‰0Yf¡2ƒ,5HuŠ”¶e‘)EÄYL¦…BÓ4×|-ÏÝ¥T?}Õ¯Gé×í§¶7u´Ä8ŠWÓ^!ŽS¤‘‰åI"fÈ ðk¿õÓÜyíßóÕ[Žñ¾÷ÜÄe—m¦2lã¹C4k+ †Ìa¬’»Z ò…Z§„±BHAÐ °V ]­û©°Ò°Öާ뺡hwû¶ ~.ÇÒÂåb…Xõ‰ä•å&ŸûÜg)æáIOz,q“$}+ƒ$MPZ£ ƒ Mœ&dJãû9„`õ[ „Â0¶4Q*Fk0$˜ÂÀò DQ„”}z7—ã3Ÿþ,ì¾€^£Ç{>ð1ÞñÞ?¡ "|ÛÁN%¦°q´ [¯“d=‘`¤F3á–H•ààm_ãã×™g\ûËl»æ0LT§®M¼<ÏÂò gægÙ°åBžû¼ßäÝïy×þ ì»øiXV™Vc™B¾ J¢l[:ô¢!L|¿ïµô#¡h.eØf›^§CÎïo„ALŒŽ ñ¦7>—¾üoyäïåmo{!O|Â#©Ëô(=l'% "õ×Í¡tŠaj2’d!Zg„iåF„ë²Êd‰Dš9NŸžáÐ}G¹ýŽ;¸ùÆ[ig1{vTø³7?Ÿ{nýX&¿ò²ëè±0w†¨µB7µ2¡Zô ÛuLKôš(£“×x¦$“ÂhŠ9ÁøhljÐFVï,®Ê„0©óæ·¾a ^÷¦ëÐF€ÒÍnÑêZiší:™ê^)ÇÆ© tÃ.šŒL*¤c`É„( (4)VNÐæ('yÃ<—'>á¼ë¯ÞÄu¿÷Û˜*båÌI»uÜj‘!¿€a›”‹1wó‹ì¸|ŠÊpŽÉ‰I&'7ã‹u\ºåÙX…Q"Yá _úÿè{ùß÷-‘Sš«.ÛHeó^&¯xX¦0\YÇñã'yå+^Ù3šÏþoÙ»w?Z§,-ŸEcP(ø[8FµœçiO½S¬ f­ø %W…ð±Ì <ÏCë%Âhž0™¡RÚmŽ€Èñ£ê%)1pqññ¿sPš„„¥t‰oÌ}ƒÛg¾ÁLg–Éò.¶V¶pþø%8öðÿ¶@ÐߢŽßÓ~àÇqôf›³|éÌYŽW˜ð'µFI:1]ŒÔ`JnáHz„íÃÜS¿KY“"U¿J¡PàìÜYž:H£Û¤guè̵H͘HB«ÑBiõm-Ð?Œkm·Û´š-,Ç"´BT¦ÈȲˆ™N‹3:ÃfŒo›x¾ÿCµ.`€`€ÿ ض½f‘)¥¤\.G‹Ÿþ ‰Õ8îhœ ¬ñ<8ŽÈç ´ÛU…eÙLN 3;;Çæ >#eR©Vßô»Û ¨w’4Á0 ¤4£píÃ<—.Þ'ÒúDä¹Ôh-ð=ùHS°~Ý:Nœ8ÉÆM@$ÄqŠ– 矿Ÿw¿û/™žžaýä8JkÒT‘iŸ(•&Q“¥ ­4™J‘Vß?5]%5…P¤™F¢HÓ¾¡o.ç’i‹|Î#V1Yš‘Ïçð\—úÊ ®ç¡´¥I¢˜ne³Jaà8.Q¡2‰eõCâ8 5RK ÉP*圖BëþîyŸUkAiš®yý„Q€a@…H³ï! Iš$€”}/ „Aeh˜1í8%Vss‡xÊÓ”ÞÿÞøëÞÆ¾CüéÛ~‡©©ËsŸ÷8Æ&&™>{’ÌÅv+„Y©@Ê"®ô‰S—¬2}f3_@ø.n.ÇÊÌ4‰2°]‰m9LÏN³ä´Ø¾s+¿üœýüù_|‘§=ãñŒ Qª’Z¯TÆUpŒ<–—"L²”Úâ Ahà £žAe´„9²ž .:ýÖ³8y眼ãN>ñ±›yÙ«^AV©’Û°ƒG>ìr®ºüB6¬ßÎ_¼ó½Ll˜$êö¨­4ˆâ6¶#IâÙÙEFGʨx™½àiüú¯‰‚8Ž×B²lÛ"Šb”꫈mÛ&Kb\»ß^ßiwV“Om¤!IÒÓ”«Äj‚~±Êû?ð̯œàw^ü²¬K7¨ñËÏ~¿üô_ãO.wÞqB¡ŒíX”òäIH’„  ¤´ðl„AÆdqF7衳¾wU§Ó% LËÂu= °¥TÿZ̾Q+I’ ¿'ÉÒ,Ce’ë¯ÿq 7’÷Ò¨mZ Jéc9.†a' a$IL¦2Ò$Fß=>`K£¿„Ê”ÈP†*ãØ±# LrÓ 7119Îú½çóçó×ìܳ›ÚR‰ÑõøŽ ™D÷2gOÓmµ°-¨®CÖ;œ¸ó.¾ü•Èyìo>“âh…³‹s˜YÏ”4NgéÈ)Ï¥0^dÓŽÍ4zõF“|±ÊcÿHÞõf~a…|AR.Ñl-áZÚÔø¾‹å[¤IÖÿÊ\×%ËÝ ZS)ûÄqËQ‡v§C©\Á÷MÂÐÄ” ‘JxþóžÅÅïæÍoz'½ú·ù½—<“_¿ö©¬44'N“‰õ%²4å ̾3JÁ¯ ‡•z{î™å£ýûØm W.½ôR~õמÆ5¹Çsh®Ì÷7 z ÄaLóÔ,A½MÉS8ºÇhÙ§ÖlÐ\Y¤\*12Z&2%y'O{¹‡Ðj´éµ{~C:ØŽ‹m¤Ê#bš­˜n+& ¶l݈Q)qþçó;/x9Õjžg=ë7 ‚”];.ᦛobçÎmØVi–„ri„Ñ‘™ÔŸ`rý87]HOAqÌáÄ`›<Ï¡H• Pclt#•ÊÏxƳùЇ¾É{þöÓ¼øº_%M#¿‚m—0" ©& lZ6*ÐàJT‘wrì"½TÒ­·)äº4–ëä]‹-;Æ)©Í½Yö^õë”7íäýŸ¹‘O}òc¼öåoeݺ®½ö™üÜÏ=™êØ0Ž#i65æ"¦­°L—¹é³LmXGÎâ˜Ù`Ö`€Ò§Z:€ïNÐéœ MÛQdq+äGdÞ§0Õ|…ÈÌh‚ãµS•®e®q«arã~nš¿‘/Ïß@".Þ°ŸŸ_ÿtÎ+_@Ù)ÿ’ªŠ®èÒM”V?Q«BÑ Á²\fÈ«²­¼KF.a{q;"œûR(:‹Ý–T‹¹¬Â0 {…t2¥¤JLÕ7³ÉÛÍÈÐ.§‚—Slܸ±¿mýpýÙ Ã`dd„R©„! „)ÒCÌuçXéÖ°­8 òå1Š~i V`€àÇš`à‡H¬öU“¬î8ÿ‘ÚhÔqÇq°,ÓÌ8~|…© yFFG@÷•”†!°l‹ýû÷ò¥›ŽÓë¼aÂ( —ó±í~êx¯× X,Ç1q¯¬†8¶ƒÎA·M+™ŵmæffÙ±s miLÓÀ² þðkøÒM_àgžðD²TchM§ÛAe)†!P¨ ²T#¤`Ý]Šc [ mÛ²I’Û2‘RÇ ÒДJy‚0IJ$žkS_î`¾ë`˜¶c#-cUb`’n·‹m¹8¶ Z’ÄÊ–Há DJ’D$i…À“.Rš(QÔ·$ÒBkM–ilÛEJÙW¿¦)A–`š&¦ÙÍ)x«Dx‚ÀÄpúv†´è]ÞöŽ& 3žö /býØÕ¤,qêÌ}Œ õ¸äÊu|âÓ·ò{¯x-o~ãs¸hÿaзHbz•lÖ”Àwsôº=¤!©VÊ€" CºÝ.Ji|ßG½öºãØø¾O†¤YŠiILKâå‡èEš¯~å~löìÛŒm›¤‰"ŽBLÓ!Œ4ÂH)ú§WŠ$˰]2‹XiŒ&CËP¨4Á±%žïÐjÕ™ŸÅ´]†††™Ø¾­{öîC'ƒOÜ{>“¥ #C)IÓ "1<^Á’ú§™ûêÜwìyÊYÿÈË jóÌ6˜!m¶9tè:Ψ®¦8:LâIÚ¡"Í,Šå/‡ãt¨Õzlž:Ù³'è ¥C¤ŒiuÛ(­ðÓ$*Æ$$Ó AÔÀ`Ù941­nF>ïãùIÒ!ñsF FÇÆ¸çð‚müÃûßÅ_÷~^õš¿àÿ\ÿI~óÚ'²wÿ& ÅZbqß§¾”qב¸ÿèQÞû÷ÿ› gsåU;yýï?—«¯¸œ‘‘2íNåÅôÛuJå<#ÃeŒØDv#fޤ\Ôlݺ‘^§A'ìáºa§Ij0»¸„µÎGI‡((é0:¹ Ãòiµ#äX*‘ê!ÂN‹F3ÄLK¸þ0Í”ò£¹‰/ñ› #ÜvÛýÔçÉTD½¾Ìç>sèÿ²÷æá–Õõ™ïç·æagï3OU§¨* €b*¤*€ N¨Phé¨1MŒm'&×$÷¹I'7Á›¶c“КNŒ³ "¨(SAPÔpj:ó>gk^¿µî» ÓvÚÄÜDïþü±ŸgŸçœ=¬µÏþ­õ®÷û¾ý|ˆÌ¤Ñ\¢T4Ù2¾ég<ýÔ=vŒgiø9l:k„±ZúP•”BÁÂ0M,½Jc-'Ž#ÎÙ±‡=W^ÌþfïþÕ= !’"Ó!ÏXï¬SrÉ´˜nÜc#ô*‹"iî°‹V( §²< ò›8…„r1cíäSlÞµ“wÜös¼ãßÝÆÁÏqÿýð¥/}üvîÜÉîÝ—rÙå3=³… ì¡jÛ,Ðë­¡k Y–Q¬[ ž…ŠaÔQ ™ÆhJ@NF”œBv:¢‚¦Á2ÿEÍ« EµDdHü&d‰YQ@ ˆ³O­?Ë“ëOs´;Ïjo• &˜¬ŽqöØvί]À°9Š&~8Gd”… ްždتS·j?ôcü8$ I’ ëúß8e.9âæÑÖ£Tœ*såÍŒ9c¸†ûÂ4ÔóÂêCgæ!Ÿí|†¥xYŠ(˜žÐð…‡gô˜®Ì2Wše´>„e«èºŠ®kÿ*Nâ„X–…eY/Üwr›Ùâ,såÍ„²Çz´D¦lAÕÔÁÇ€ 0àŸGXÕ4 Ëê u2ÍÐuý´óP#ÏóÓåU CCÃTÊU:í.ab뙆d2¤\ö6Ö»}ÇgÚCQTdEQÿ±eßiåy†a ( ºÞulWÅ0t¤LÐT CW¹d×E<º÷1æ6ÏbÝ®&ZŒÕ±M›ÕÕ5lÛ$“MUOQÅhšŠf¸ä䨺‰®åbB$ºfcŠè_išŽ¢@Gh ¤Rb™4Ð5 Ë0¡ÛêôG˜³”0° ý¼ËT&}S€¦«˜†Cè÷³O“¸?†f:¾ï‘“aÙNž8ÅääY®S@UU n(Šð½€Œ¾s7M$]¿I¹ä% ½n€iY$R¢+¶[¢$¥/ /.f|Êå[÷⋟€o¾ŠTèLŽOÓXÛàMoºË1ùÚ=÷Ó ÚD©$IsLÛEQÝ®ihH™E¨hŠÑÜóUQ)J 鬯¯Ój5)•J¨ª‚ý"UÕPU¡h$2"I††ë¬oÄ´[š.¸è¢³Ñ ¤Bø8T)ûn]U3@I ÄQˆ¡ëhªBĈ<ÃPò,AÓT cee¯×ÆqªCurÕbùØ<_ÿú“|øŽ·°÷àSð,?þ$Ÿýôg¸ý/þœ³Ï>›×½þ&ví:Ÿb¡LJTCÁÒí x^TRд¥ÒDÞ…¬…ï"í,#²q4k‚L-"4èÇçü,„ %bNÉ:ѯFnÁF|‚/½‹o.>Lœ§œS<‡Æn`ndŽ‘ê0%½òD#r¬{„þ<¯y-ãöšò“'¬A@·ÛŶm\×í) ~ês¨yˆÇVãʉ+™,NãhÎßBÆìq’Jñ­ä™œCMëÞKÞÛ†¶³¹>Éð‰irZ¨ÿŠþþîkQ„ʰ;ÂleûV÷q¢s‚v­ÍSý+Žž 0`ÀXXÕu4M Ã߈£˜jµ‚ªö‹§Ìç3.ó)stÃÀ±â A.%èýLMU è;1e_TZLçù2¦$IÈóü±UUU|ß§P(å1iÒ…¹Bö˜œ˜dþ蚆†Êg$I—úHÇqxò©ýœ»ãLT2,S#ŠcLS'¡)„aJFž%äÒG Ð4…$ŽLÃúnÖ¾U 3¨T*8¶ßóЕr±HàûdyFpz$ýù¨„–×!M%I£ˆ0ô‘R¢«ŠÚÏO- XvÏ8øìAFGÇ% C_ȪB!ËrúÙ·ÛvÐ ‹(î!”þ¨¾¢hx^Hš¦H™#PQU0Ž™Ù\ç?ýþ/óû¿w;¿õ[ïá·~û=œwÅ–-“ì¾ì.º`7ïø¥_ç–7ü4ëë‡ðAàgË–«†C«P)— ‚ª år]׉â™g/冡“e’,“¨j¿Ô¬ïxî ò†aÐñ4S#Žž=8Ï‘CØ.Ìlª“ÆAèõójéF)õ±1¼n){EEÓ$Žc“D‘×ES–ÞwUªUz ­u¯ÇØØ(f¡LÆÈ8áè¡£¬®…Øn‡¿ðÆ+u6OÏ0ÿè#LÖŠ¤qŒ §Væä3¹ë£wbÄ!oüÕwPîsæŽ9>ôá?dï÷ñïù3~þg—³Ïþ,'Oã‚ ·ñë×¹òª‹1œ”ö³t;Z.…BEËÐŒ˰ÑËpQ2„Àïv8qª]¦v0йn‘ë06³Ýu9µÞ ÙY"|Ž=Æþ}GØ{×]|ùSŸ¥a×hÊÅz ·¼…3Ü2Ï+Ák_½‡Ø­¡Õ·òÇößqùË¿ú#ÎÙ¶™zµRA( FQ¥ÓnK›\éQ)äq£Çý÷|‰3¶Ž±õìÝ4ƒHë!ƒ<é ÿ¾pìØ–W—ðƒ÷Þw÷Üû%dœ°¸Ôå—~é]¨vÌæí£LÖ§¹`f;“Â&“EœÂöìN¨‰n(تA»×C-Ztóˆ¤ÛÁrK$½²Ë,¢HùgŽ’otЧǑñ:žïáù«$q?ãŒ-7𦷾•SGŽpçã—nûŒŒŒqÛmoãe7¼˱ét: â ðýâ*XäX™‚š¶P}ŸØ;Œ˜ª‹£–¡0šõ/ò:ui"‹Ç޲šÂ/·Ù°×™?±Ä´œaóô»¦.a÷Ðnª…ê?©ƒK× LÅÆªv [ýÉüÖŒã˜ÕÕU|ß§X,R®c ŽÇØ6°…ÍŽêæÊsX?`¿ëŠNͬqNí\ö˧x°ùM½ÃTeŠƒÍƒœìäe›_Î\e×2~l¶MÕ­2Q྅ûè4;œQݨ3JÕ¬¢ŠsuÀ€ ð#V¡?r­( Žm#SIžó‚ðÙo«OÈ•Œ‰‰ ­æ2Ý^K”Ê%SŲ Eeu––V˜ߊbSp‘RÒív_p§Öj5öíÛ‡çyìܹ×uUÓɲ ×q‚„4®399ÅSO>ÍîË.Á0t’ѱ!¶œ1ÇêÊ õ«®Àï61MÃì? E!Í3R™¢êB€ªiý‚ Å “!´~>ëéò*USûnYMÃP ™àõâ0Bs„"h¶×)•J§­ýÜPKq¨”kÄQ‚[p0 ]ï7ÒëB€x¾¦(BCQR®½î:LÓ$Š"‚ `jjŠN§ó‚SXJI†E j~#3A¹Z#“9~ôK¦Èûî¹È 4ÖN23]æƒñ.žxä)üî£?ÞáÈ¡ˆ¯åøáí\uÝeÜöΛ˜C(‚ ”41£cs¤©dee‘8ɉ“ Ý8Ý®›&AØïYF–I§_4–ç9º¡š¦“$ Y.Ií~VíÞ½ûèvcÎÛ®3·e’$‰iŠ® |ÏC3m’8Æëõ°lË0‰¢˜‹ x½.år-[·"€(ŒúûXQ‰SØsõT'Î"Xú(çMÓY[G/YX£5D’âu}>ÿf~~ž«^r;v‹êêt;«ÌÜ |îÍùcè¥2bj ÓÖ •H¨˜‘ QN;‘Dª ÓŽ)8UþÍ­·p×çîBJX8©ó¥/<† CÁî§-ÌÎŒ24Tex¤Êy;·0:êrÆ–ÆÆF(W&ˆ#ŸååãFŽçû„a„[ahh ß÷hµ}Êå …‚KÅœ{Þ…´½Ýn›æzÈü±#a—©™9<¯C¯Ûajz+gl=“<3h6Z´ÛÓ(¢ë*a7$ÏtC§Ùj`h¥R‚j*È$!3+(tüœòXª£]ðóŒFÇãо§Y:¾D冢_ÊìyÛ0¬˜L´1Œ¤:ä:ªš2wF©Mã#ÜðšËžäÀSÏqõU?Çë_ÿÓ¼øú=,­5Ø¿÷)Ž?»Ì½ß~‚Öâ:ó_}ê(3žÉæ-[Ù1½áJ‘¥Ås/¿/7ˆ’ ]w ê¬CQ5ÆÆkäzHž¯£ëFÁEJAôðz1±æ’Ä1ããcüÆï¼‡ÿãÝÿ'wí>óןâ½ï{?]²‹›o¾‰+÷\=X¹ ð}¨Ê8v”ˆS„Á2QÜE•™h‘)™**:ª0AÕAùgrðedBô6h[åðC‡9pì!#-˜µ8OœÏ¥Ã»ÙY:Ÿ w’8ŒiÄ܈yRJZa áéT²aZ«-¤žýD掭¬¬°´´ÄÚÚŠP(•Qê Ëñ¢±qní<&œ å‹¢†jpùØåiÀ püÔ v;8åŸÄ6lf ³ [#¨üø¸~Kf‰ñâ8%»Ä©ö)i:Á=÷ÜÍe»/E¦1Òë4Ùºõ ¾øìYŒm›t»ë}Wk˜“‘„<ï»)É2 %“’,MÉ$a@&ˆ“ÿá¸4UE!ñCò´Ÿ5še^Ç´q‡DJR)û®Lݤ%ÄIJÚî»U%GU!M%2ë羆aH’¨(šqÚñ™“e9Rö ³òôÓ™¯YÖϽ9„a¿ *‰3b5ŲLZ­.š¦aš&ª¢ž~ìÃ4É㜕…c8ÙM:».~=í–‚¡OF6úá÷ßû |ä1~ÿ?ý¯¾þ§ß±'OñØãÏñ'òç<±¯ÍìŒÆË_q!7¼ì¥”Ê}Õ²,²,EJ‰eH™öÇöUå…m$ RfˆÓ®`·X ÏûY·ûž8@¹h277ÌÈH‰VcCÓúeNi@¹R¦Ûó±tƒr¡H’HLMÇ0LüV“R±jFsav›B¹ÆôÌIâyýÏjX´;>†[Æ ¶œq&ÞÆ ßøò“¼í-×R­ Qrr„k±ÿë_çÞ¿ù*Ã… ¯{Ã?kŽfãŽébé'—h¬·(èõ[Ñ'ÇhÅ]™â˜â¶Ü®T¨Ì”h6$I’rÝu×26QD(=ÆF¦‘©ËÈè4Ë+' ¢–"Xbc£Á¾}Oðøã+X6|ù«ßÅ÷¡XÔ.±cGsÏ=óÎÝÂÜ–êÃS¤i@‡4[MFGfh¶Z¬®…œµýlM§¹Þ$ìZüÑ{ÿœ½{ŸáüÜöö›yÙ+o&cîþêÝ|ôÎOsõž;¸òÊüÌ›nåŠËwaê ¹‘³²p”0éR,PJº¡àû=™P¯Ô°Üj^evfIñÙýž8Äs+§¨”+lfzlŠÙÉiv_½‡¢["ì6˜¨WqÌ*_þ³÷³ezœÚì8­¬ÅÚòqh†”ýŒ°·AkµÁ©ý±õº«i-£ÙXE¦¶ÑØ8‚ cLQB( ºž06RIJj´¼%¢`ƒÀ h­4é¶—Y:yˆ‡îý“glÃ(ç¨N‚",4Õ´,4]Ðê,.=ƒièœ:Õ$Š{ÄlÞ4Æ¥»¶ÐX/sÞó(ÚUöÞùqŽ>½Q2ILJyfm‘üé§ḛ̀óõ¸ìú#œ{é¶u.Û¦ÏF)Þz› ƒù¥>ú$ÛG  J<Ï'Iú9Ä…Br )cÒ´‹·ÚDæ*/}ŨFÖ IDATÕ¼ä•/åÄ©%>×gøÍßüM¾õí· V®|žrÖ PœD·ËóÝÛ Út»Ï Pqò!u¥P"·-þv·“ø[·ÿàÔtþj¡„@Ä]ro™8Û Ù\cyù0'Ž,ppÿ ÔQ©d”ÊÄ8‚åcË´WÛÈìWЗ“#¥¤ÝnÓê´ŽÀ):8ù4º¢ÿD «žçÑét‚€V«ÅãO=_ò(í.2;9ËöÚ™Œº£èÊÿ:BÆPM¶U¶³ê¯q´u”ƒ­gy¢ñ8cÎ8»jS³kÿàcükÃÁa\g÷èe|/û.G;Gq.›k›14{0û1`À€ øQ «Y&Q!ú£íŽãœËTÒ´Ÿ©i*¦i222Šß)¢ÍÖÅB ¡ <ÏCÓT¤„$I1M‹v»A,û-ö¶m#¥$Š"Â0¤^¯S.—ɲ €v»ƒªp:×U¢ª*Žc“ɈM³›'M$¦­ ¨*^‹Ñ±t]ãÑG᚟ºß_'ŽCTM!M Ÿ*³™„h"…1‰]­³±²„iËe<ϧÓî 3z¥Æ©¥e¬B‰S ‹ôüÎ=ëLH%þÉEžxøÛzî 7Üð 6mÝŽRt½ÅB?§lå¹yŽÍgbvŠúŽ3é=šËd¦‰ï'TŠ:äÝÈC(}çs¥Z!‰4RÓóÖÙuñÙ:tœÉÑ FëC FÆG)Úš°ÿÿ¤2em­Áß|á‹ÌÏ§Û ˜Ÿ_âk_Ÿçó_8„”9›7Á®KvrÁçqιۘÛ<‹i®Õ ‚€(2ùúïå+_þ*Ï<Ä…íäÎ;þˆ]Š×=ÉÉ“ßall’+öœÉko¾o}ó!>ðþÛy÷»~±áIn~Ýͼöµ/G‘Eâ D&ªj’¥’‚["ÍsڀǾû]–Ìó‘Û¿ÈÔ¸ÍΫ.d÷îݼåÒ‹ÉeÊx±†c8œZ^¡…¤aªk³tü¶Q¡^¶X=uÆ&Iœ]OÑô-ÂÎ =xœ‰sÖ0†Fy×;ÿzûè¶;8N€!TÈ2B?@Ñ$¦e ZZß5ÜéG/øC¥îÜE„àøòa†¶Vñ½.ë¶U¤T-12<ÄÂb?›w¨6Eä-¦…yÔ‚pC¯²ðÈC¬”²sÁ53zÙEdºÃoýÆo¬f|óK_âégŸào}‡÷ÿÅуëö\Áegnf‘ìBÜ‚K–õ]Ž]†Ÿ}è—™œCQ3Ž|ULŒÇ–¥²°p€‹vmâöýß<þÈ3|és÷óñ}šÿþÉÛ)WÆØ½çb®»þzF&&9yô=òO?ó^§Ç™›Æ™°5.¹p–·¾ùg™yéOprc™<x^›´çai ;.¡`+)Â5) 34¢Z±éÊABžôÐTɦ™)f&ÎäÔÑ#¬,´™ª—سûBþòŽOz9›§¦ñ[],³Š®D„q +Q¤ÀÒêXšK!×Y^_`|h–™ñ³PÍò®GYD¡ÀÐmJ®‹ŒÞFD7hQÃó{$nÄâBƒ’s³[IÂêú ÊYÎÄXrÚ휶P(Ð5“öF“N§Ówµâ(¡±º†iX8®M&ÀP5TMÅÒmÔ\àÅ¡ô0M EÑ›bieè‹N^ÐÃ>çì8‹ÛÿìCt:ËÔq &–Óì4ˆ{1–UÂÔ è…YÜ%ÏÀÐt²T!‘ šjº¥âõº=ÙÏf }È’]WɲŒ”¼_Ö%T’D¢(J®!“ŒRÑîg>ÆÈŒLæôz~¿Ëq ¼ˆ ÐM4Ë02A¯×¡àÚ(Ê%Ïë¢**¦¡£©ýŒÖ(Nñ¼M›æèv{ýò¯¬e`X&aè“gÝÒɤ N|l+ 2Ól-ãf‚µFJ±4Cµ6ŠSà C¶ÎÃõ/¾ŒÏ|ò^¾ýÀ“¼á¦ ø¿ó+ŒNù«†ÀëFF>Y,Ð4È I“Œ8AHLKCQr òûÎ]ß Â.šj`Y:JžõÝxF‘'öíC**Z)fÓ–šÍ µDä‰Óˆ8iR6§Q¤IK²<¦äZ¨šàèÑäR2:5Aud„<HE‚.ñ‚ªYÆÐ]ªC÷ïÇq‡©OÔY†[*³ºÖåêK.äþÏ|š}O<ÌeW]É…×í!IC¯çñ’ëÏá¯îü+¦gFè4æIÂ&^Ðel¤D»ÓD¦T‘‡ ¦n%Ýv‡sÎ=‹mÛwR®ÑÚhsÇ_ÞÉíúï{ÿ](ª‚Ìn½å:Þø¦ËŽsΡ䤴ž|„O?ú GŸbda˜£ëË OLcŠ4½åeÆFêhІYx͵áEÃELÏrbåÏ>»­;Î %•Z…n擘CS*~ÃâñGgîêWû'™™RÉcŸÃϧ^"–]"bTWÃÔD’!3“¡á1d)ãéÇžâÚ«®á‚+¯åØÂ)ª“3TÒ Ž¯úŒÕG(è:¦„~—b©†¢¨%Í(päÐqŠlžƒâ8..d.½g0b¨ŒÖq&†‰ •Ø (*Ý'Ÿäøþo³é«ÑZUÃåÅ»çxÕ —‘ OÞ}ÞÉUîüاùàûnçwßÿ.Øu!/ÙKxéu× Û*Ýut;B×AULËF H“”v³‰a˜¬·»t:mFf ×€~T¡êÿCbË3p¹3¯Âßrt*€&€D‡P‚ßáƒ"ù{vÒ§€…ó?I¬Ì1Œª1ª…eÃØX†R(aNû4d©è¨®ÆºÖ`È¢¨õÅÀÿüËœœ¶lq´ó]µ‹[w¨[£LØã•"&æOôn ‚€ Nk:Ôj5ªÕ*¶c£*?|A“¡ÔÔ9CÏË·ü8(((Xª…¥ZäfþðŽ 0`À€ÿj…UË8h¯ºŠ.ÂÀò,Û&Ë2 @ÊñQCƒ8ĉ(hªFx8…22‡õË-{ËøuÊå“㬬¬â{ŽS Z*£ª:B(¨ˆÓ¨9ŠšªQ,–û èaH&<ê£5ž=ü,‹++¦ŽeDqÐxó›ß‘CǹꪫØhž"Íû#òyžõûò~V)y¿)V×u¤PQ…†"´~„Až 4M(¦†…L%©ŒÐ4 EQÉsÐ,]7iŽaX¨ªŠeÙ´;>š¦¢+*ªá ¨†a†!–©áº:ªÚw¯æd¨:XªÙKJ%º®£ëý °</D1˜†A¹Tå™gžåèÑ£\qئEš¦t:mLÓBA¯œŽU(ZŒ©¸ù†1M}¤Â©.¢%™ÆµRÔ\ç~þ5|÷þIü€_¼íff*´Z ô¼ ,G'“’B¡€®[¬76RP­ 9išÄ!º¡ „‚ïyØvNš¤ä¹H*¶­#3ÈrýN²ÑŽlÞ<‰cêÈžB’édRA^h¶wl“,ˉcŸöF‡,™œšÆ-Vèt<¢4ò C¥T —šisäÈÓÜ÷à}ÜøÚŸ#UmÒ8᲋vñžßûsVN,°~F•Ÿ~ÝL_q)þ±gII©\Ävmš§–ÙX]fbt wj†¶ïcT*¸¥*kš«m6ÏmâÐs‡™œœ 6ZCµŸÍ+4¢Ä¦RqB’ç)–åÒj‡´ZlÓd|¬ŒiZäR€ÈHHˆ‚dkÊ•”,íaè q “ ¡Zä œwÞ6üÍ›yðÁGñÂ6Cµ"Ó³ã Õªìjo|ÓÏpãO¿‚[o¼ŽáúnÁ¦ÑX¢T*‘$1®[€,& Ž/ž$“pƶY9DãñÇxòÉ|ç{{¹ñæWsåž=†Á׿ñuîÿÖ7Ykdû™[سûEŒ% –‰iêŒ ×ð;¼(DT ¸e‹$í¢å&B¨”jCäAFDZêãÔ6m'‘©„(¬¯41ŠuœQ /ƒó.º†»Þ˾{¿ÇÎW½Ž™ñM<þÐa~áí¿Èjc£`P4úG„ÈÉÖ#Å"Ϊ¸CÎ<÷¾ýù/Ð^™:ëEt¼†9Æ–ª‹”ý1XÕl‹4KPt‹<ˆQ°¹ûž{™Ø4ÎäÙgÒÛ8CÃtîÿ 'ŽðÆŸ»…oìßKIÙI¯·AÔ ¨•u ¹F©¡—,„*q ðâ zMbÉøˆÆøØV2ÿ§8ëòËXTŸúÂWøÄ'îäOÞÿÇœuöY¼ñÖ[­ÏB¦à’Ä'KCœr ·RÁï´q…sZÜ0`À€B«ŒjqÉq^puŠþú-Zˆ ìçÓG>xð·„Õ<ïG‹h…! J…<·áûÜ¡BôEPpsÇajØ C̺LYj¯°,ªÃ"¥œ—QQB )ê ßÚ™I²<#'§C›¥d‘':`©6çÕ.bÚž¦Há‡rjþ¸bÛ6###8ŽC¡P@Ó´&žþIŸ@ñq ¨0`À€þY…U)%Ð/R‚~ù”®ët»]ò¹Zäá§÷3¾í ªÓ,]fey‰ïåÓþ4¿ð¶ëyÅÏÞŒiê„ÇŽ ¢„R¹HØirpÿ3Ä©dvÓ&ŒBÏï‚îÐi÷¨V+‹e‚ Msâ8¥ÝéQ*‘R†1šf’d°ÿÀSl™›E3‚ÀÃ2 ËÀ4ÌþI¢¦§19 qÒÅó×%Ï Ëda$Q34—È\â‡>h1ã㛸ÿ¾½üÞï|Œ8Yâ­?ÿ³¼õͯ¡\5xîð3\~ù&Xæ¿Ý~'Ÿýä]¼ê†«xÍM¯`dhŠBÁåÐáçHâ Cw°mÏ[çûà“ýy‚‰ñ vœ³‰W¼êZÆÇ'P b©ÀÄ´É+^µ‹±ñV–9¸ÿi–Ö%ëíU¸ÍAÉ2œ¢‚ŸKU#!Ë#jÕ½„Zu˜4MH“˜R½ÆÜY ß{è[4Ú!ÕႲ—3Ïå‚—\Ë»ßN’f›_áÁoïãþ{¿ÍþÃQªsë^Â+_þbÜZ…<í'>B5AFÆêƒUkÀ€?qU(¾ß‡ªU0S¨ä S`øï‰¦†ª…Àü;è|J!P……ÊCd8jÆPi˜µpo‰ÅöS7˜¨L`ë ýrQ?óYë¬ÑñÛ &F*’sÜ ±G1Æþ#ª>/¬>a^Ó´ÁgzÀ€ 0à_JXõýÇqpët†gß iÖ åHY–‘£#£¨Š ÑØ ´i„ååeª5CwÐ4A±X$ bTU!Œ"4+'KûQ¦aây†a¢j‚,O!rÚí&†a i:Y–ýßw]‡J¥BÅ\tÑE<öØc %ÂУÝîQ­ÔÑ5…í¾˜‡þ7Ýô*ŽèøäÓ0y4_*I–’%)ÏHS‰ãº(†Ño<)9’0JÈQÈ…B”¤ $dYN»ÝîŸL(MSPUÓ°,«ÿcµo•2%Ë%Q”cŽc“Ä)Q”¦Yšà>†aPtûͤš¦“Ê M( ú£xÊiwèðH Û1IeŒe›ÄiÈÆÆ•J…BÉÁ󺄑O¡à>åÂK'=Þñöwsd-àÍ?{·¾ñfânüéÛxüác|ðç—ßõo¹õß\Oœ\Z`nÛ–W›<›½ßÛË÷ßÃC=ʳÏãøñˆ,‘ŒÂ¯ýÚ«yõ«_E’@»å#„Ž®¹äY„¢ô…Õ4Mñü?NÑIÙØhbè0\ÂÒ ü4ÃÖJŽE"U„¡£–tVWÓm÷(W*TKCd)´-Jå ºÐ “Xª…fh(B°Þ^Æë„ÌŸ<Îу‡¹õ · æ ¶nÒ\ëðà÷$ËáÌ ¶£Y9ë‹'±¸¦ ]Ÿù'ŸA’3wöY¸㬵ÖQmËp鬮“&åRMÕ ýˆm[·ÓétiÞÏ%ŽStS§±¾ÌÊÊ)ææ&ÐTMS)•K¨ªJ‡®›@ÓrT%"Îc4ÅF1tâH’å)I&ñ;mtÃbbbÓrX]êrÛÏ¿›¯|åo}óUü»·ÿ6nÁdc}ELMŒ05V§Z5¹pç-<ùø<¹ãnÞ÷'_å—ßy·Þú3l=ë º :Ì>øŽ9Ìu×^Ã5×^Ã¥/:Ƕ9¹¸Ð/sS–æi¶*eb¹H˜4˜™-rÞÎk‰Ž¬ñ•Gï'L×Á‚’S¢ãI\Í%ÍMB ÓD¦¥ªº‰Q€Ž<¼…G¹ã#ÁóU +§Õͱ e ¶Ÿý0X:=>Ï£žâÕ¯y ÷|õ8¼ôºkpê%T[C8)BDŒ¨%‚8g©¹ÁâÉc$½uŠÅ6³›G™*Ñðæ?‹ÞYãÁ“m:_†¦„BË‚mÓ%Å"‰}„«ë+|æËŸcçø0Þ{7¢±çÍ¿Àâág;c'µÉ³H–Q¥Ác{&o·ØsÝzŠC’…ôÂŒÕõu†Õ!œ‚MÒkÇ›GmÔhŸ¢«ºàÔØºi’3f7“)ëKM¾ø…¯ñן¼ƒ÷þÁ{¸úš«¹é¦ÙuÙ‹P¥G/mÐn… ®üsb€j€õüýS*ž¿ùaÜ€ `¢àš4Tâ4"—§Ýªý‹Í ¤dy„šd"éf%æÿeïÍ£å*ë¼ßÏ~ž=Õ®¹Î<ä$9™Hs€æÄT´…·´m»Ñ¶_íV[¥Õî¶»EATÛ E[DÑ0HBHÈIræsjÜótÿØG×í?Þ{×½ïu]»»>ÿœµjíUµj×>õ<õÝßß÷k`bbbƒñÂ*jz U¨ÿ­œ‰¿Tÿwª]ºtéÒ¥K—.]þ7…U˲PU•$I‚€(Š(²Öyß÷—J‰4„¢ ›*†¡Ðj6)•WEIœ’J¨õ”ìaa¡N’FôöÖX˜9DETª5Z­Ö’€(‘RbYy„"ñ}ŸÙÙY …½}54Í ð\|?+ÐJDQLµ·‡ùùyØÏš5«P”<Žã>ƒƒ½Ü|ó8þ„£éíëÁ÷³ªlT[! ÉʶT E)X*ŠJq=© ÂÈ#I"„PðCÃÈ ©¢0"Ž’8¡P(bš9<ÏGQÂ0$ŽÛ(¨ø~€¦éhzmø : ó ¨ªF©TÆ0t‚¢(ü½˜†2U¦†*Rfñ(’ ðÑu4͊Ī•*i’¦) ·,¢(BUv ðð#ppÎe°þäò³Ù¶íD®¿þ&Ò4摇~ËÇ>þ>ø—ײl…Îêñ•|íëßä¹ûð\h6=æf#HL6lbåø0\°ŠS7­ÃwçX·n-µþ~¤Hè´8ŽCæzEÉrW“$Æ4u¤^b®îø1 –ô“†i““*ˆ{q_Ôi¸Mrfj­D)_A¤/(—˸m›v³žÓ‰£ŽQëÀ*ÕAfÔÙ0°œUk6²ûs\÷åÛèëàÜ Î矯û^ìã9ò% -Yœ¥>3ÃØø*òýý$JB£ÑB1 4‡‚¯P(ÇÉDpMÓ~ÿ#RÊlD1 #Â0À0TÎ?+º®Ò±[¡Ç‚O©T$ŽB!–\Ô)šªdå\(ärŠ¢¡( ù|‰¹…&VÁ`Õê LOæ_¾oáõ9 IDATp=7ï·uÔ?ºùœ~Ö xiI[ éQˆ–ƒ¡(óóuþä²7ò¦ËßÊ 7|“¯^ÿïÜzÛüîÒ 94qFc­Û.àŸ¼Šþ¼`V{ÏSѵ„V{Ž(ê0ÐWFj’ý/íC( ƒ£ƒ„~Àbã9h¶_ Q ºY Š 4›!ÙØi:/ÌìbÿÁýLOLãµb†zËXFÊñ'œ@.§pê)›£¯9µR\ÿ%ÎÙzC'oæ–ëoàž{~ß½÷µ,Ö˜œ²¹òC—áD.j>Ç‚3‹15YÕDè*n»Áâ®=z~§¿æP)bG1y,§qŒ/ :>í@áÈä;wîefêÿôÙïñêW­ÁS~ð¥¯ð±‡'I=X9ÆUWãE ÒÔ¨Œ@¡ÚCìÆf?ÃÇ­Æ!ÇÜ‚ƒ%, Â(Æè¯0::Ftð 3ÓGöVÆ>¦Ù‹ã§Øq#+õËå¨Ör¼ýŠ7ð¶w¾‰íÛwò¯}›÷^ñaÆ–/ãýùN:õ$JÅRwÕêÒ¥Ëå?üáÿs±RùÏZÒŠŒÇIFÿ˜'Lu<šñ<~<Ö‚\bQì/Q¬('$©HŠZ1»9þßñ“ꊪ]ºtéÒ¥K—.ÿÿ «¦i†a˜e} ‘'¥i漌¢Ì5‰šR.ÐS³pÝ sw¦ Š"IÒ” ´)äu|?daaK É™yšÍíV›B¡€¢dy’®ë†á’ЪR­e‚£®ë$ID’Fº‰ª Â(Â4 <ÇáÄOdbb]7p]›|>’×(•Šl8z=;wîdÛ¶­ÄQLÅØ‘›‰_A€7s¸^HdÎÊ\Þ"JbòZÛé ˆM7ð\])T„®¢ë:¶å¨ú~6¾oè:RJ¤)qœMÕÐõ,ß5 3qU× ZÍ6ív‡……צX,f‚µ‘ýð}!$Að»s¢¡¢!AFQ‚išÄQD†x®CÎ4èt:hªDÓuÚA€ ô DŒAà‡`$‹í#Ë1hpÞ²wÏÎ;-ÇlXEèù¼ý-—óÌ“{¨”qÝM5èchd+o I‚Bñ ÃÙ©ƒ ’$B )1I¢* U®(Y1™f1yäõù¤°|IXq‚*ÄÇn×i‹X½ezzúÉiyˆ$i †ªáÛm KgÐ(D.AØAš&õÄ¥XÈaÄùDcÕŠ£Øó£»xè‘X±díê5k4 õa˜&I»ÃÄáÃ8­6«9 Ã*) ~˜+*$ %«ŒÛî`r4M|ßgh¸ŠëºKùe’Ìu£dkªdzažjµHºx^Ö°\,P5-+=#%IcÒ8A ˆ"ÜG†(B!ŽÁÐ}½ÃD1\ÿ•¯qý ÷pü1£üä'ßÀÔaºÈ /ìÂÌ)˜9ú‚‰Ž ææ¦ÉJôöä ÎÙºf˜8¸Àß~ìVçø»O~˜×\ôJÚ&-»c7É NÛî k¦nP_¨„¾}½}¨I1ûŸ—1½«\>Α#3<ñëxüȇ&Ù½ó$ÃC³n ëׯåܳϠTè¡häè¯Õ8tp=%‹û~u7‘ïÒ_.¡6±ãÓ7¨2=¿“Þ¹<Û¶K»9ÁW®ù§l:…ï~óNj=‚7¼å•4w0*s ³L¶Ê=½„ 9vã%öî|˜ Ç¢ø}´ã‡‰&(•ªøeaÑWíaùÀJ¶q!¼þ5Ôúá_>÷Œ°ý®»ù¡ù#N>톖òÂKù÷;ï#Žîýõ_8 +Vöb𠝹è<†MuÇKA –ŒvRŠÕ<š£è.³ÎK¨ù^ôÒ  K!ò|̲Jªƒç,¢Ê2­Ù:…b/G3Î5_ù_¾æ:>rÙiüÏ}¿5K„DWT^~Þétš>ŠÐpl‡bQCŠ9d*hÔçÑ ƒ8Ž‘RC7Àó›!P”„0ŠÈY)!I\¤ª¢J(Š8|h†(ŒQU•á¡*"È0 ‚æü­k7¬%V Â0Fä Å Ä D¨–±ËÌÂ$®ßdùø()±¦C‚ÌÎÎñȯgx ‹/¹„:ÜôË;™ž›¢PT©ÖzvÀ=ûðIظy¾H98;‹išhš‰iЄ†"TR$1½½Y¦¥çy¨j–¯kYA]¯“3S8ŽMzT*%¦§')K(Š Ž2Çs§í`å XEùùE’$‡•/â:.ª¦R­ÖÒäÙgvsÕU_áàÁynøæ?²å¬ó˜>´“8lS³z~T-ÁvêôT4l§Óqè)÷ã9*e³È=¿º¯ã[ ô÷qÕç>F±PåÞ{Åm·ÝÆÛßõi^{÷m|øÃbíºÕ´Ú3( _̱{Ï~Ž?þDt*¥2‡©—1Ò¿’(Š˜xi?O>÷žù)‡~ùûvµÑ²—5ç/cã±'rñE—ÐÓÓejÞÂLB‚XA “(‚öB›¹™C öרV,Î>ãdC¦¾Àò±UH#ÏÈÐ8{vîâø[°ë6_påaÇ#Oó¦‹Nã§·ÜÉë^ÿ †j#,:MFj#4³ˆ@08Ô‹Û©3R$¯Z(!$^‚¦¨ÄaB@À‚½È‘9 jññ Š©òñ¿}?÷þø1¾þ¥÷0¾bw]ýö<û,[Ï:™ Þz9R¤ëth{ Þó®÷b–úØûÄ“<ðà½<ùÌ#|ýÆoqäڔʀÆú± \ôÊ‹Yµn=¶£` H£—XëÇ3(¯8·V@æ%Ó¡ÕY ŽT ½Bä±Lƒ8ˆ1r1mç0Ò\äò·máMÿãB^|a’n¸¡»juéÒå¿€n V¬Çi/b•Gq=¬2{òýý„K/=ŸÍgžFí¨ãñ>€P:ss˜ž†\l²wß‹•kN:†ÅvO¦ˆJžXèHE#ŽcÔX i: sóket]#IR’$!—3 ‚Lp ‚×u1MÃÐÈ,¤K…g:V.*3G²e¢lE´ÛB1pýCÓRchp”¹ùy¾ò•oq÷]pÉë.æg·ÿV›ƒ{žczþLCÁÌåѵû·Áé[ÎBH Ï xÓe—°õ¼-üð‡?àû·óîw½Ÿw¾ër^}áËé©–xöé ®"Žtª}D~ŒMžzr·Üt?Ïï~–#GæPŒo;Ÿâ16ÆgùÀ§?ŒØ0Dœ$hšÁKûžãðÔ<^5O.ˆ(XU’H%M5 ù<"_Àwštš6µž2­¹Yô7s&V1i”2^Ë' µ•ËÙz^‰vÝÇiÛÌ<ïúáï>{%Ï>™™éhB0Ð×G˜ÆHÂÐÍbf¦þå«Áƒ(Žl³XÀ÷B"¾•«—³íÂÍ(ÞNäÒn·ƒ ÒhŠ8 °ò6/Õi¼îÍçR,3=¿À¾½ó<ô‹‡øÉm?enñ»ÔËF¹ø¬S˜Ýóscý„~–ÙšÏç—¨*¦™[ÊáLQU) EJYé"%qø>A¡i:)`è9iµš´ÛåJ‰V+s¶;6ËFWpï/ïÇ÷#Ž;þ|ߥP4q]Ó0ñ<ÓÌQ(•PPÐ4f³A’BµZ#B? / ›I’b;žç~011¦i¤i6Úí^&-eÑò¥L`EËýNlsˆÂˆ(ŽpœöÒ¹M1s&®ëÒîtèëëÅ÷}‚0Ä0 ‚ÐÏÄhÝ N2a5^)W!~—ñ¡i*R ’4,RÂÀaÓI§°wï.~ì¹\ÂùçoeïÞùÀû®â[_ÿ5óGœrÒj¢Ð#‰’$Ä4%ªƒâ£é)ŽÓ@Q"Pb¤fàza? eQš–åÖ¦i J‚” )1()¹\Ž(Ô¹çž'¸ï¾'_Uä-o~Zš²ëég©VJŒµœN§ã'èJŽœ‘CUœNN§Îìô¾Ód`°R¹L„XÅ2ûŸÜÇðò(vƒ/ÿëu؉Ê?ûQ”’EªHžÙy€÷ïç”c×ñÓdËqCl\?Nqh€ÅÆ"²”Ç'&J–e›*$^HÄ$aL¥·B¾TD×4‚ÀÇ÷=<Ï%MÓì:U@J㺘ù9ÓĶÝl¬_3 ‚ߘ<2E±T¤R©à99«J³§’ãkùþ÷¾ÇG?ú%*•úлxÍ…ç3==…eèØv›ŽÝBǵ©×çQuIÃÐÀJ¶ÿv7ßÿÞm|ïÆÛY9¾œ7¿õœuî©ôõUiÛuÂÀ%‰]¦©T‹œ|Ò&Î<ë4ìN‡Ï\u3¿þõƒè†Î–-çP®ô±wßvïÚË—¾x×^s#=ö +WŒóº×¾ž×_úzÞxùë8ç—Smv>ñ(Çz QÅäà¡ ¼V“Ø ¡hàØ6‹‡§1uA¥”Ç÷=õLK§·¿ÆÂÂ$ÍÅ9¢Àe~z†ûï¹—ÓÏ>‡úÌ"{w<ËšõGQè©"U•ˆ„cO; C ê­yxðwÜõ½c«Çè+•i¹mì ƒPdÐaâ…ç¡26LËuð;>NÃÇî¤BgÙªq®þÒ—øû¿ù._ýÌ[Øzì:î¿ý6{ä^yñœ|þfÙa®>’´i̼ˆ·x˜ãÏ:…¹;y~ß3ôŒ”°“¨>zΤZàÔOåâ‹_ÏË^ñJN>e2…é‰Üø­{ؾcžÇ÷m'©”X3¾š’Yen¾ÍÜbb)Oª„XE• j¡È]ÏnØ(,£Jca×®cÖý/¿Ðƒ `qq‘þþþ?¼ð¡dYÃ]ºtéÒ¥Ë6²=õn} Ãz½ÎÐÐÐÿ«çèt:¸®Kooo¶Çþ!Döû«K—.]ºtùÏDšfæ·?$BlÛÆó<úúúþ/UÓ4Å÷}J¥¬ÁüСCü®ÐJJ‰‚$IHSP„ÂÈÈiâÍf“\®H±˜GѬ¼I³•Ðj5èØUTUÃq)‹hšF’d±™0ÆuƒL˜C'—Ë!$x¾Kšd ½U(¤ …B»“¹‹Å »wïaÕê@Çm£ •Áþåœ}öV~xÓX½z ËW‚ášžCQ5ÄÒûŠ’)3—" èz&„%(„ALe”ÃÊ„ÓÅÅyÂ0DJIœ„DQ€¢E …"š–‰·Q” i­v]Ï„MÓªBš†žCfåU%+ÇáÓxÎ0RQP’CUÁ0±m{É ›Ç1B(!J‚*Uò–iüŸsqc¤ jú4«>¿ùÄ<ÿ§¸úÚ#6}<‡^LØ÷âO=²™äŠ÷]†” Ù‡ûñŸD¤F‚AªäH“”$51 Ó´ˆãÏóÉç4’X.eæf¢¯‚Š¢@¸v‡©CÓÄqJ>§á:-ŽžfÍúõ” íú,’¢çòKñ 1¡Û¡ÓžGŠÄÑ5ãø»`äJ™h³fãéì¼ç>n¿ãF´J/§Ÿ»Q(à †Ny¨F¡¬i˜²â¨5X«–…>2 Iƒ¢i’ I«Ùb¡±@àGÔJUz{zÐMÛs²kŸM—HUP4 A€dMÆA€mw(šUE ( ÕJ C5‚˲è©öÑl604_°€±«Ù¿?þâ·îåïxo¾üOÙóü.^zi/ËÇFpìyŠÉ•F³ÅȲºÓs”‹ƒ|à/>Êc<Ë«_ýJ¾ý¿btyçv>A»­âÍ9†Æè²aÂ(daq‘ÂblxŒðoxÙÖ‹xË[þŒOþÝ—øÅÝ0qèÍæ«ÆÇ8õ´M¼ûŠ·r‰'"t“‰}{™_˜$ODcršÞQIœÎ²sÇì_WFJh7:Ô<šj0Óh1` ©/èÐv<‚$sïηÏÏR0T– pÎ˶ñøögøÖÿ• N?ƒrIÃõ1…Mâ'A0v̶†¾Í÷oÚÎÛÞw ç_øK>ýÁ+_»†8²q‚6Gö áytℼª‚Ô¨VzéË´:Ï>ÿ,_½ößøæõÛùÈ{¶°| Àw¿õuÖ¬^Áç®þ,ú²fëÓÔ½E¦¿D¿¡bøëûˆ^ØÉÁ½ûé¦ÒW¡ºQBè¶QR‰.T¢ E!g±ñèÕœpüZ:û_¤{”ûªÜµã nºñ|ûºë9嘹àå[9zãB"üÀ%h5Ñ5 »íàyÕr?RêxN¡x8ŽÝ]E»téÒ¥K—.]ºtéÒ¥K—?Ôžžõz$Iˆã˜§žzŠM›6‘Ïçñ}Ÿ$IÈ[¹œI§ÝfphUÕIÒˆ(Éçó˜9/r)—JxžBœxžGNê”ËåL µ,Rb\7\ʦÌFÜ£8d,H’,– Š ]ES Ò4Í\œ"Ëkã„‘‘¸ÿ!ž~z§œv<žß¦t9©gœ~Üÿ(¿¾ï.¹„…Åzzzð<MÕñ=?s†YW±T¢ÓqX¬×©ÖªH?Àn¶0 ]×HbjµŠeåÐu ?ø ]ÄkÛH!‰ã86€!4Ò0Âu}’ÄÇócH#4]R,”iwÚ´Û- #+»ZX˜§§§]×IIRÉÊÁH–\aéïï*'I‚ãØ¿w‹ù~@Ť"AÓ"T]e`p9÷ÞùsŽÚx³Èeï|'¯|ýøÄçÿݵƒ]’-gmâ̗ƺ5˘—¬Xs:Õþch¹%ÜTeêP‹ýÏ?Ç­7ý’vm'±%o»`%ùÈáþûïå5o{#'m;“$ñ “ˆr?JÔCy97Å3÷þ’Áj"ÔY±r…áQví;Œ–/P©Téx6¹¼G®XAK!Û™C^ÂÞ]¿E„ l;ïå¼ê­3™zìÙ;ÇžçpÇÏïæ;ßÿ=Õ2]t+V 3::ˆ•sQ’6åJVCOJŒã¸ÝU«K—.]ºtéÒ¥K—.]ºtùcV]'Xƒxík_KÇî.9ñJårÖ:ßj šÃ}@B%øa‚"tâ0EA0:2„çJõæï_ ËM±mÝP1 “v»EgÅR¦$iŒeeqžë™+4ŽI“LØ´m›B¾Œçµ)4Î<çž~ò1ÆÇG©Öj,NM ªôyÛÛÿ”o}ëߘ›]ddÙ0ŽÓ"N*å*~à år&zù•31sQ”@œdqù<)`wÚKET)h4>|ˆñU+PU•$IÐ Ž²b£‚DWLP ™£Ýn¡,‰YR5±r&ÍŽƒaäˆÛV¾‚nZÌÎ/`å‹äry:Ž‹ïû¸žG._BÓudœå«¦iJf¥I†±$ü&1Š*È é"9S¥Õ ù§ú*©¨ð“;¾Íu×}™×¿îAB/ [´íܺùhÖ­\ÍÂüC#½x¾ãúŠU¢0% %Q¤¡ª%HâÐÆvL=¥T®bê9ÇË¢ ´q J‰¢¤¤IH­Bëøž‡ªÁ²1‹uk7·<Ò(FH Ujx^ Q‡dú0“‡^dxÅ µAèá,ÎSÌ÷øšUPrû7óÀoà¯?õQІÃÝ?€‘¾d‘WfqpçÚ͈N9…ïÜü³­¡’’h]7h7ÚX¦…PÀ CZ^€P"C!‘àz-)šÈ²Q=/BÊ,ö¢P(bóósDA/Œ±Ê=aDÛîàºí¶MÎÌ3qð0ƒý˜†NÿQså_~ŽûÞÎÇ>þnÞpéEtZu:Î4BuY6Ö‡P`rvŠj±H¢(äsV±Ì×¾úoüü·yÏoçÝïzc+ziÛs™ÞÔ²ŒÓÞÚ Ž£E1º¡áºr¹##k°Û-®¹ú:}d¡¯°aýñ\~ùÅl{ù+¹ï×÷ò‘üúàßÑéÌsÖÙ›)–ttC"ô˜Èn‚°)çÇ(ˆ Ä«7žÀ/~uÒéÍåQGJ$a€¬ÔŠ#¼‘“¸žM‚N¡lÆ q1<:D乸qL)gbToÿó÷sç7¿ÏÓ;Ÿ§÷¨µ ôõ±gßA\ÚM‡u+V"s¶ï382Î?á \ú§ûùÉ·oáæ[Î÷´bY¥â) Z*•áŸR×áðl€×±í€‚žpö±cl9f-£U6|+Ž]Ɯ۠GD¡Gà{äóedZ¤`Ðkaó^BKC¨%ú{ñ"‰¥õ¢Z%š‹.¥j!c¯…´0 ‹¼¡ ;öä!zkŲÆbsŠ|µÄqÇ8ûÌSIcÉ¡Csìzn/·Þr7¿¾o;Ç7ÎW¼ƒ3Ï< Ïõ1sy¢h‘8)sÝU«K—.]ºtéÒ¥K—.]ºtù#A^yŹŸ4 )$J óóó(iB»]'ŽÂÀ! ] ÍÄP tÚ!¿zàÆ×£GW bwê(ÂâŽ;ƪøœtâq$±JJ±\Âó=XÊAPU bP E„¢ÒnwˆÂˆr¹ŠT5$¾‘¢ ˆ¬8J™åQ6v¸¤¤”«% % Çmb» úû{è8.·ÿô.ÎØr>I ªâBdNÐf£Ž”JV fÎÏ8Š0uœa¢k:†®-5ÆkH!ÐT iJ¹\Âs]<×E7 ¬B¨!¿f IDAT‘ ¬QHÇ(@Ë0ÌiªR(ÔˆSM/P(÷¡ÐÛ?„:³óu +Ÿ•fiBÕ •8×u‘2ù—*O)ð\]71͆$Rql( éïïC¶JF·¨Qèã‰ûaeïÕR´ª“Tu”À£ˆBä»k%TU!ŽC C¡R4Ñ%$Qˆïy(REÑ4"‘Rdô¨<ôУT-ñ‘ôô¬ o P.ÖX>ÔËh_B¡ˆKڮˆ5+¸äåçóÚ×nãÌ­›X»jŒ¸1ÏÜÁ: È›’ÓŽ[Í›Þx W^ùfÎÚº•õ›×°ö¤M̸ æ_"&•ò2l¿…¢¨D”u ]Õyìæ[©OÍ1¼ådŠ'G}¾ v (¤½yF{ŠÈ(ÄÐtâ(B/š˜%ovÃI¸ÿ»73~ò&†ÎÜÌD»ÒI¨Š„¡ÇÄKû(• ŽÙ¸ŽW_ô2^}ÑËX\Xä W[nùÓS.S3mF—÷‘È„¦íR­œò¿üBïf¬véÒ¥K—.ÿ÷t3V3º«]ºtéÒå?#t«º® ¾ïa:µZÇí`9Å]rI HMb„ÆÂ¢ÇøØr×§ÓqP¥J!o`æ p©á>ŒÂ0BIg™¥ª”ŠeHSÛ'NbtÝDJªj$QòûB¤(ŒZ¶Añ½4!T¢(eó©[øìç>Åk.~¥R.{³©GÇn²j|9ýæ1yô1Î8sAèÅ>–aáy.…b‘V+ÅH‰‚8IfŽðw¹šJV2†>Ž"DÖ{oÛ6B@©XÂñ=â(E¨*QÑi;èºAoo/Íf]×IÒ×uÑtUªø‘D¨š@Q2Go¾PDH× ‚MJ„¦a*I¢-‰ÂÑØ ±4zŽ‚ã8 BR%¡cOqÁ+Nãï?3ËÇ?ñ#üy>ö7oçܳ·P+QŸšÂT«,:‡©U+hšÄo¹´Z-ƒ!$ž†‰®‘&&)B( ¤ ż™eñ“&)A Ä º¡Òl4p“8 Qe–c[*Wð¢ˆLVÌÍL!óUJÕ¥6"+yœŽC¹Ra¡ÞÀÁ†ÐÃkûüâöÛ©ôôòžOŒ2^؇¬Y»Ž]Oì'Qžßñ$}}¬X6È#Ï=ƒ¦ê¸^ÄÌô4cý}H¡AJJŠ¢©ä y„P°6± * Qè“$ I’¢JMÕÑ5•4̲l%E(’D ‰bÅP0Kï%Í›´ZMF—0:<Ž*JüËç¿Æ/q?W~è­¼é çóÒþlj"›\Î I½=£Ù5!sXù>7ÿè6~rÛÏ8jÕJÞýž·²yó&Úö"ûö<Çðp¶Q,–Hb¨VʘªFÿÐr8Äo½‰»î¸—Z¹ŸóÎÝÊ?þÃÇX»v ¡úØö,3““8nUªä̧žv ·Ýú9®üàßóÑ^ÃôìAÞþÎË1,‹Èu¨7ZŒUúp¼YL*ƒyú—õ0¹ç9Öž±‘i{_3Д„öï§l)õ” Ü€ÆüQä34ÔËÀÐv‡ ©7›4› ¤ÐPõålÞü ž|;‡öÿ’ÃžŠ¨öòôÎg-Ò_É£²û¥Í!Mb O22>ÌúO$ =<7@“/'t$hš‚ã4øÍ}{yæ©Ã˜ySOÛÀÐðjvìxÇ=ÄßpÏí8Àæ371ª™ƒÅyXX o`” í1zôFLÍ¢'*c•t3›‹Q„ oñâ„V§M»>Ïèà}ÃÃþ÷{II© ÔHU¨ ö`Ú!BĨJE]FtZÓÄ ¬X¾‚÷¾ïm\|ÉÅLœáᇶóµ¯~o|Cá‚ ÎàÜs·²ryw!íÒ¥K—.]ºtéÒ¥K—.]þP]¯ƒâ+A5º§ Ad‚`bEŠ¢‘$)ív›(đΠûfX¿æs âx(suJ“rEav6$I@5Ô¥¦û]ÏòR‰¢0ÆPAªŽ³Ô². I|ß'N ÃÀ4M\ÏG I „a¸ÔÈž1­vƒmÛ¶1?7ÏšÕ›™ŸŸ§ÙhÓ×7Ć£×sé.æË_þ*¥’ÂøªÑ¥¬®ëašV6¾Tü†!i!dŠã8T*5r9‹fs‘(Šèééeaa–”ì®±”ß (-@GY |Å8Žƒ¦é˜¦Iút☠ðH5 DÙû UEE!š¦‘Ëå°mwÉ ¦c&ºÐˆƒ0Ë´BÂÐG„ ù‚…m;¸Ž»äàÕÑt‰ï7Ðs9ü°A[üù®à„·ðÏŸÿ*—\üaÞù¶­l9ùD*%‹“6EV8•àz…¢ÅÔÔ$Rzk=„aHzÂ0@Q$Rê(dθ4Š1t ¡¤Dª *% ßq8øÒ~bF—oFÕL„€+V,eæzDA€H"öìÛKßðÃ#cøÛnaæ,,;bت¡è³{^äÖ[oãè“Nà¬7\Š×jb/LÓXœ¡>?ÚõëxüÁ§¹ÿž_ÒW•ôŒÓöh9-Ì|Õ€F«‰ƒDqDà{†E¡h"1 -Y•…tÉɬ""AÕ$š®"„F{¨ª Ä„Q€"S MA˜¡/éïÄî„„¡ƒ"æøó÷½•z³ÀÝ¿ø2ÕªÀõ)ÕŠ8^„"óHY¢Óö¨T(U{Ù¿?W\ñ^„lóÑ¿ùkŽZ½MWpÂaä¡jÍV@Þê#ðS\/`tx˜f³ÅBÃæ_®þ,O<õ$ƒC½|ê“bÓ)§à» T‘°X?H}~EQ±¬KE‘.š8|h7ƒÃ«øö·?Ï•õIþéŸJÝÞÏ{®xª‘â1f'Ñ¥ dõ† F1Çö'ŸbÓyg“ï+º«VåøMcÄMŸ8¨àµì†C£Ñ`ÇO01ñ¦§§Q¤dv~Ž©™YÛah`˜Š^१^`ý¨Æy[/`÷ÞCx~ÌYgnᤣWÚu;â´³Æ)—(”¬Pá©çv²àº ¬¢7ôf›œÿšWà%3‡±çæé©ôâ¹»÷îcïÎxè7O°g÷‹8®Ío|œ™éÇlaÛùç°ÿÅéØ-ÞséyúégX>8ˆQíg¬£y¸ŽbJŒªe7:tRš3‹D©Æ²ekpfIÓ€Ï<Íðú•Œ·ž0v‰M$R„Ìn0õõTŠ‚í‡˜R§UŸ$UtÆÆªµn%/{Ź(Êǹû§¿âÚk¿Æ5WÿC3ïì®\]ºtùBšþ~Ÿóÿ”lHEéžÊ.]ºtéÒ¥K—.ÿ}„Õ$ 2Çše *Žã  Q¥š@S!gš¤(8Q‚a †G2GãŠãìéì"]4M£#EöñHâ¬l)Š"\ÏE7t4¡’áy7%Ÿ³Ð4$I0 ƒ0 ‰£”(1MÃ0‰“4;ˆµllGS5L+ÇÂÂ<[ι€ŸÝvÿþÓ»Ù²e …B•¹¹9’$aͺål8z%?ú ã«.Ã4 ¦ŽÌP,eñRf¯¦™…8•}¬¼Et:-\×CQR³c<×EÊÌ%E †n† Aè#„¤VëÍ:EÁót] ˆ”$ qÝa$(æs("ò¤TR#M3a9—Ë!¥J§$QŠ9ø¾Ÿ9$¥‚"ª®' a¡ëRÕ‰…ÄÐL»ãÑß?ÌäîIžzò..|õeŒ qóM?à§?ÞÎC¿ù-û;œqf™O|êýQÈôÌ4}}U CË\¼iŒï»$IL!_D ¼ÕHEÆ)i’àªB ê‚4ñ;aP*ú†hv^<0066J»ÓÀ êÓ³ Ô8ö¸¨¦Å‹‡^btÕ zšP ³hmÙÓlç±GäÄͧrêë.fnê²P@/åPeÂøŠ•4ê <ú؃¬^}Ž=¡j$Z‚"ctÃBê°ÿÀáãä t#FQd%‘*™ãT!”ìs#’$AuiÔY!|âÈ' C,5sẾƒ¢¤˜–N•‹iµ¦)—GÈ—NäÇßû1ÿó£ÿÀ+^µ–Ï|þJâdžVËGH+_ÂÊ•ñ\“B¾‡Tä¹ö _ç–[oãïü.¹ô•@ÄÜÂ$õÙErFžœY ˆ!¯д<Å¢…;5Íwþ†Ýz Ï?ßàÜ­ÇqÍÕW3<ÒK£9I}©/.àØ6=µ~T<7$Vbrº d„¡Ãbý ¹\™OÿýŸá…_à{7>‡U¼™+Þûêu­˜Ç,Àüà¯}Ã{ùþ5דºb·—]Ïìä@c7Íy›ƒ;^à™gžÃuš8®N¾P¢¿¿€nèl8z%åj‰ÇϲeËèëëcd´†¥ÛÜsó7é/œuÙëx£^bòÐ$SsGø?Ø{Ï0IÎú\ÿ~ßÊÕ¹'ÏÎfI«°+­¤]i $ D12Ùalø›hL0[€8dƒ ˜` $HBB(í®vµywòLÏt¬®ôÖ{>ô ǾÎñÿŸ °ûžý¡¯«§ºªfÞª§žßó¬0)×àTGHƒB˜¸±FZÇ“96y7»0ͬèpÒæqô€Ë é0ÃùibZ&íöÙd™Gœ&C“)‹8jÓjÍóoÝÂÁ}÷±ÜJiÅ×}æŸxôîI„L‘ßú þš N]¿•‹¶lcpÍ8aÅÄ®TñÊCK&GŽ5¨=v«ÕfpŽÌÍsÖùÛ ZBµÈ4Á)—[1q¨Èù>Iš`Š Û´"Ó!*Iè¨!-Tjð´g^Ä…íàîï¯Z}úôùCÒEÇM¢¬K*ÒÞÇÿ½‹@``àà!í"عþ¾ìÓ§OŸ>}úôéó_GX퉀!ÔãnÕœ_À²L² lËÆu=â8FYS*åit–Éç ØŽIu(ÊÂ`õšUÜ·sA'bh Œ«B t¦I2Õ¬VJŸ¢$Áqt–aš6š^f_– D/¤tŨl»7/„¤xžOsq†“NÜÌM7}“Ltƒ4É0M‰)¯|ÕËøÔ'ÿ‰›¾þ ®ºê*Ú² h-ñÜQÜ%MˆŒ8 h4—(GÄ(ŠÈç}lÛ¦Ûí>žáe$ Ó4‘"ÃóòÄQÃ0Èù9”J£Ó”H†aRÈ9˜¶I¦Iöö¾hXÉ”5{Å]h,Ã!NB¢nLÞ÷°m›4B ÄQD"Jex®AÐ%S’80XG–ºÜýÃxÇßÞÀû?Ï{Þ•¼â/çÿðJ’¨C·Ó¤^Ÿ¡\)35;CÐn1::Œi+¢8Â0ç¬À¶-È$Q¤ÑÊ@ZŽí¡UŒid˜† SŠf³N§Ó&﹌ŽÀÀ»÷¥Ù ð=ð\ƒFsžzm8 ¨-A¡dà Áøð Ê4è4Jf¯<Êüíwó¹Ï|šË_ú"N~ÒÔç©ŽŽ°°X#Š„¡Xœ›åÐÞG1lÍØÄ*0-â Kux€B¹Š´rØ6´ÚŽë÷òU;½è Æ÷|¤ÑséÑ;&QaX½Üá^þ® Šb:˶è) P™Â0è¹z5Ôk ªå5͘¿û«øÊW~Êû¯}Ïxþ¥L¼—ÊA7œÃ4‹D¡C¾à!­Œrqˆ¯ßø >ññÏñô§_—þå“ä íFƒTt:M,ÇÄËå0 ϰɆˆ#Å5ïý(ßþöŒ¯*rÅÏá]ïÞÎÈÈ ívƒGwý„fÕØ¶#Q‰À4lÇÂ4%ž~¾D«¶DAÎóYnvð|—vÐàºOþ×¾ïc|ø£ßcã†Í<ë9W0ß®Q[M|x†}ïº÷>îüé!î¼çZlÑæÑv &ÊlX"Û7næÜó¶³ví0#£C¸®C¡T _ð°=4hµ$*¡V«±X?ĺñ2kÖј9L{ÿƒèÜ0ÅJ…bu ‹Gv²ëþÝäre*«Nb`ÍÂ0!‹2 ÕÁTËs“Ôgö·ç±’f¦;ˆœM5I㌞Ë2GâRÆè¬B³5‰iu¸ìÒ'°j|Ó÷I¬qŒÔåúw¿‹NrÚsžÌî©iÖ¸þk7²kß^:Nʹ[Oe놓(8eJ›VS-çÙ¸z„c;w “µ§Ÿ ÚÆR.P¥±J±R‰RÐnuÉòItc9+ù¾IH¦"lÛ¥±üH“m;&ú«VŸ>}þÏÑt†&û5gªD@°@Ö:BG-ˆî¿Û¹*¸ÚÁbQ\‹6ÆY š_¹Ô‘+×t+ŽÖ>}úôéÓ§OŸ>}þ3 «Žk!¥$Žzcö¶m#eOÜTJ¡MA– Ò4ö,šÝ€Liæ4›mâ$DëÞØ:X”Ëæç":A„çå°,'˜¦EE¤I‚çyèT¡”êå…šæãÂ¥eZFOÔûeX{ªRÓ4+#f–mâJ“v»Åƹä’'qÃW¿ÎÓ.{2…B( éår½äE¼áÿ{;ëÖÝÎE]ÜGb”ÄqŠß÷1 °,ÃŒ”Fp‡n·V›Ïç©ÕjT*qS.— ‚i8DQh £€e9ô:]4R‚–mbYJfè,CJ‰RI’ „ĶÌÇ£,³—ŪÒV²f{VOðÖ)hHSJi¤°ðr>ÍzL»!†àyÏ}>7ÜøSÞ{ÍûY56Äö³·395ÃèH•v I”t0L—‘ñ2q¢ØB¾Ð˶5 Ò$%‰cX½=ÇDz D“$@Ú%‹êõ­zƒr±H!ïS_XÄ Ìê'°ãÜm<ºçAKhÙ¦R-½ìØñUCh•…)­0Å×89æïßÅ _ü"ÏþýßcÓ9gÑmµ0lƒÅ©Œ žKC…Ô——YµzOXÏÎ={8î¤Dá"ÎàIªi6B¤t8:9ÃÒrƒJ¥J±(‘BE!­ö2¶ecÛÖJœ…ÄsT&0MÓt t³ˆT¥ø¶K††Àu=0zÇÐsÆGÖ°0×áÏþôÝÜwßn~òÓfl|œÚÔ–—[¶R DZ(‡ º1KKuÞö¶·²û‘YÞwí_pêi[h7LÏeýúu¤i…ư,|¯DÎ`ÿ¾£\ÿåOró7o¦R-ó—õJ.¼è<òy—©é#LMíÁ¶mNØ´–(Hi6[tÁòr‹Á2*S˜Bc˜ŠN«MÎFv›RaùÙ¶[`êð,¯{í™™éòÖ7œ8Êsß¾û˜›ÜÏî[&‰X5a2T4(%KüÑ¿œm—?™Â)눔B6Û$ª¾R^•¢IA´¢%¢T%!A·íØ* –ti7cŠ…!¼ënÎ??G»›Ä-ŠÕëÖŸÂÚ¡ æf–ùÑÏvbï=Êš‰Æœ<¶câÛ‚RÑá¾Æ,nÒÆ2b¢ú,¥1‚Ö…üBJºI—¥Zfk‰ÁqŸýæCþoüã'߆-;˸9Aw)tÌ,åÉO{"rt€ÓÎÛ—:¨fŒW)ÑI›ÜqËw¸ÿ‡?æØ‘~ñGÈ"Í7­§„`ÕIë)¬Ý„JÁprxi“¶²É” q$h5c\G‡žçG!Ic¹6Yš2?7Ee¨ˆ0vÁjáêÓ§Ïÿ!I,¦uº+⩉Ež<†H9—5üÿª²Ñ`%hÂ`žn6û¸$+„ë–ð¼!„ÈNÿü'åîWúN„øÕÏï§MôéÓ§OŸ>}~«„Õ,K‰"…çú˜¦I.g’&½Gªzcú–eaš&q7"S1†aÒl6Ù°a=~Îazjš“O9­ã•²© KJþø/æÖ[ogýúœpÒÉdªEª\×'Ž;4-ry‡J¥‚Îl,Ë V[x\ü5M“ññq²,c` Jg(¥(—ËdZP.—‘†`©VÃqm²,%Ic\×AMªz©¶%1„fi±ÖÛ7aˆ%MZAð(ø9È2,ÃÄÎyHÓ Í0 ”Ö¨4%Ó Aá{9Â$!M²^ÑRÜËjm6˜NÌØÄZ®¹æOyÛ;>ÃK^ú—¼ú5À _ô\,+G¥ê‘/ºÔ—¦°mI«Q'Œl'O+lËbnz×qÈçzŽMËpQI‚möÚÑLC‘/å™=v”£‡qÂñÇ‘÷s,--ã¸9òÅ*ŸøÈ Ü|óݼñÏÇ$%Wô„¦R¬ Â.K ‹äl‘À€ë“™’CwÞÃ]߽˯|«Ï:®Šˆ„"oå)äKÐUt昚$S‚êà–Ì,ÔÀÉ‘ÊeT³N¡4Èî]ûÙ°~5–iÒlu)äè†] ž‡@“ó=¢nˆÌ4qÑît(–Ñ©& ;(*ûe+\!¡X,‘¦ bdp ÓÌsïÂ[Þüa6o9žC7ÞDœt©7!-ÁÐP™,‹q­!s€nWpëmßã›7ßÂE—láoÞù°ËRý ¶m²°°„ï•(Wáx6·~÷û|þó?ä±½»Ù²ådÞô¦7pþvÐ Ì/¡ÞÒX–dia‰±Ñq‚v‹f3À2-â8B®ˆÁJ4:í&–,’¤¹Þß•01¥KµRfzf– Èøüg¿Ê#¡¾ ïx뇨®â„MEþê-Oâô­[9ã¬3éÆ ßÿ§/Poî¯ì éìa±¾HÙÏÑi·Ð:CH騹¼0 Ò¬ƒã R`H‰ãä ‹mŠù1¢ÔE›–‘GhŸ¥Ù9r–ÇèØ(ϸôLNï§2`3¿{/ÂÈXzdžSO:?‹ÈâFjÎ¥6=EÎÊdÃtÍìæíýÞøÌ›.åƒïaTF£¨È!ïçh6–ñË‚°±@Ò®a{’±‰aŽ+ ›l9 Wò¸üŠgpù³Ÿ Í”# 3ì¾ï~|ó­|çæ=¸ä³·~Ÿ­'maÇIgpÂ)›Y}öé¬YEX_ ‰cÆF7Ð –YÄ4ò„Q@Ü ‘Ò¤\¨ "È9y„éöW­>}úüûOR”JȲ„@Fˈ`Š$Y ŸŒBY"g àk+Ÿñ¿ ×4ŠCtºHœ¦Ó™$#Ý+Ø”zÇÐ c2|z £W¼ÙçwŸ4…VK ” P€R þoËæµ¥  ^)5ŽÅ¢À¶ûkŸ>}úôéÓç·DX5 ) ”RÄq„iÚ´Ûmòù–c&JA–õÚÏ=ßŶ]:í”v«Cu©-γzÕz’$bͺ © ‚Ûñ†…c»!ÉK¤i†ahÑ])jÊçs˜†M'è€ÖX®Ûk¤Crù|oô]¥!ÑüÒå)h·Û˜¦Eš*LÓæ)O½„Ûo¿ê@ž“O>‰fk™f£CÐ Ùºõ4LÓâºë®ãÏ_û:ª•*Q˜Ä`˜YËË |ß­zßY§X¶…¹"ø†A»ÝÁ4-²LÑl¶Èçsä 2•!„&Ž*‰‰â!@¥Žmáx~O8ÖQ·’8V½ÌOË! #´NȤÆaš&Q”§ EA¦3|Ï#—ï9‹{Y«ZK #CmÜ\J·˜› Ø´i5_úò»yÅ¿‰w¼ýËÜúÝ;8eËVVO¬cÝú1ªšõÖ248ŒÎjt»-r®M’(:ÌömÛˆã„j¹B)²T£ÒǶÐ:cfrŠN§Íú Ç%tRL«€_¨pÃ7n棿ž(ƒ}»w2Pù}Âtž¥Ú<Çm8…v”"‘t—ë”rUDfóó›¿Å£;wñô?ø}7m¤ÑZBû6¥r™n£……X ØûÐCl;ïlî¼g'ì9À©Û·ñ©Oü¯x•$J$¹¢G¥Ra×#b —éÉ%æç—A È”&Šã^4…a"„¤ÓȲŒr¡„aXD±"U Óö0-ƒ8N¦ÍÀà ‹µƒ¤™iVøØ?ϧ>ý^ûú+¹â÷žŠô &MR,û¤YË•d©M§í´3^óš7QùÐGÞE¹,i6çHT—åF—ᵤJ1Z‡ÌæÎ»oãš÷|ŽÝ»–yÆ3NæÆ?Eu D³±D·»D¢:‹qÚF.Ãk1pð 6®gt[d7Ä4 IDAT2bl°‚ï:˜vŽ £0 |¿‚›C`6–xàÁûøà‡>Ê÷ï\À4ÛlÜPdû™°qÝZ^~ÕË(M˜Äñ«–éR_^Æqíž#:˜¶E"SLÝÀÏÅË$søåÕY>ÊR 9eý(i§C' i§†Ç†^3Ƹt™›;J¹èá(år8‘"®-q,n!Ф£°=/—ç _¸—½5J™åàáCœvúVòÅ Sû&)äm‚°Ó@ÍÏ Ã€°½Ä¡Çvaæó¸„:Bš.a=™b[I7£lHžvî94÷`ÍŸ³ãÏ`>Š˜94ÃýwþœÏù&šžÍŽm'óä wð„sÏ£TÁ¯HÂú2Q¤ql ‘õ"Tr9 …å"1û«VŸ>}þ½ršE:#´ZSd™ÂwŠ ƒäÌS°p‰Db`ƒia6B¿TNÿ÷¿F°]ÄÀ0¾Îa³VZ…VXa½8CKï£M„@P(l¢X< !úÿÓþ3Ðéhn»-ã¾û`iIpÉ%’ç<<ïÿîs{׿pÿýpã×Í8ùdÍ¥—¬Y#úÂjŸ>}úôéÓç·CXu) Z­Q”àûylÛÆ¶”RDQ¼RìÓCG$˜†dv&áðácÔëK$aÆi[¶13·ˆ”àº0?W£Õjá8A’$DqŒkÛdYOͲ ÛîÅÔjKär>®ëÒì´1MƒÑÑQ–ëu„– À´VÙ "Œ“• z4 ÆÈÈ0££ÜsÏ=¬Y³´ÅðÐŽuÓlÖ9ûìíìÞý(o{ë[ùЇ>ÂÀÀ033S$iÏ·Y^®‘eq¬ðÜRJ<Ï#Ë2ZÍ&Je+ÅU6®ë⺽üÓfkCJLÛøÙe:#—Ë#½-ˆ£”4‰PiŠm»$qüø~¶, ÛvVÊ´4Bj4)ŽcÓì´h6ë‹EŠÅâã9 ®“CYÖs”Xމgg´:- ˆ€0TH£È'®{?ߺùû¼÷½ÿĽ?¹í8–Ãñ'À'®»–3N?•ÃE‚¼oqÞ¹ó=°‹Î²Þí•P¨¤7Ö=??ƒ4¡<8D¡P Yo¡°)ËÜy×=¼êÕŸGZÃE8áø5XB“0:†´1 Û6=Bà8>¦åDšÑ±µþoä©Ï¾œåÅÇ8vxå¡B‚E-LlÛçæ›náþáK¼í­¯äÙ/x.õùLj£.†Ñ{ß2%©2]ÅCS|øC×qà pÖY#|û[ïâ´-§Ñ ¤qSvAhÕÅ`Ïr±Ý&MÒéfŠ.År‚Ì13½€9²0¦TÇ÷ÙýÐn~úÓop÷Ý÷ðèÞ‡™›Í8mk…·¼åR6oÞÂöí竎òÚW¾•̳aÕ;Ú$ŒS*Å*9Stcθðbvþüvý|gs!•‘ ¡‘Ò qœ XŽKšÀ`uœTe$2¡sAÚ6ËõiÄòݨN”¶ZUÅê¶ðò9ff¨ø>­0fdý‰ì;|„Ö£2*l†V¯Á(ØÐXdphƒü©[Ù*T!µE&}4À`t\öÌgrË÷¾Éîƒðº7ŸÁýûq,‰á[½ì]a1ÛlpÒÆl:i÷O¤äyGÐívq} 2E¬B¤- Ó˜¼ÜûÙ·óAÞpíß#X› O¸¾à%LOÎðÐÜqÇ·øû÷~ˆ·4ßÃlã²§^Æö³¶38<‚t=l±LÖn¢“ lãæz9ËÿjÖ²OŸ>}~„,ëE HÛ8$È4Å2‹d:ôËwÃÀÕ.¬ ý‹_ ¤ÿ^1õÆ ,Ì_º\)„öPJcd&6½ŒùTuh·öa ÓÈ! Âè;ò×Ж—5û÷ÃÝwÃÃk² 6nÔ›„Õàyÿú| Ch44Z÷Ü­Žæ¿¡±·ÛšÇÓüâpà€&I4õ:œz* B.×w­öéÓ§OŸ>}~ „Õå¥ù|R©B–i”R y CÐí†h2\×CJÁÂô<¥Á*ã«Æñ=Éòòcc#Ô—&™›§Û Y·n-Cƒs³K„aÄòòòã#þ¦i%I/«Óó( ÄqŒçå0 è¹g»Ý.*Kq\«Wî$%¦%IÓˆplÏ•t£6¶%ˆ¤¢,qÁ…;¸ëGð•¯|•«¯~ Ó“3¬^½ŽFc–f«Î ^ôjµ&×\s ô‡/g|ÕAWÇ££c´Û-|ÏÁuºÝîãÙ¯J)jµ%†††PJ’|¾H»ÝÄqz[†˜–DHs¥øÉ@kA¦@)…RZi$ùBž Ð*#IcÛêE¬dIÀ”Òär9²¬×Tßn·ñ}Ÿ8Ž1¤ƒaؽœZa`™µÚJG˜–‹ÖQ€Ã\uõÕìyìïÿo7#%|êÓà²KÏå¡ïgbÕq9”K#˜fJÔq-¹ù¾kw»ø®‡H‘qøè!òy±u«YF­V§ÕŽq\Wx|ñ«?gãqy^ðÂò—¯¹Žm[·€Ž! q ˵iJ’°M¾X⎿ξ={xÞ+®B H§ˆMÍØÄ(I;Ä7 j³Ó<ºw'ׯgìÌ3È: 'žtµ ãùäŠt•díøA0Ë–Í›¹éë÷㘵…EÒDÐ Sª@!T HLÓÀô Li‡ Ú–„Ý6¦k#Dï¡€#M|?G’ ÒXÑhtY½f/~ák9pð(×íœvÚy4–I—R¢´A–™äók8|¨Æß½ûm 3¾xÃûX;:Dcf? McJåa"¥¨VŽžâ‹?¸~ì»lܰŠùç×sÞygÇ]êõi:ݦiÚ% $ÍV“R±ˆ4 æ–ð<È\ü¼KœD¤©çåY\˜îµÐ+ƒ›¾ñ]îþÑC<øÐ/XZªsúÖ³¸úUW±}Û)¬^½šBÁ'M#êËǺGyòSNaíZÕš§bûX®A»ÛÅrM¤éxžöÜòø ?ÿƽìxþ„Vˆéhl;&SIbÛ*ÉXî¶ðœ—N;CJÏ®ˈRu#CkÑÞy[˞u92±¨«Tò9Úâe¯|/~ñÓxÞ…2?3ÍHVÀÒ‚zÑMà¸0¥eB-Éð-ß+’$šZ£W‚òÈGg–P|ã–24>ÆEžÁüÜ1¼Â¦[ä裔òEŒöüèVšíâU/û3:µÊ0¨4&Hbʫǩÿd»ï½—§]üÜ #LÜG”d,)?Wfpb˜K7n碋N¥Ýn²gÏ~þ³G¸ùÛß㓟þ4gž~&§¶…­ÛÎdíúµ -¬ÅL:#MâþªÕ§OŸCàÊÐ:Aˆq2K§3 Ý–¬àù#Øå¡^€´0 °/ ýcEá¿*ÌJ niùø¤¸ô®q‚àíöc8iŒïŽaŠã0Ü!„Ö½â«ÿèmëóÿ¥`f٩ٻWšÑÑŒNvï’¸¬YóëB¬5{÷jâÖ®ŒŽB¥ò¯EÒF~8ã±Ç4ƒƒ0=-9zT0= ëÖõŒfßôܧOŸ>}úôùM «ž—Ã4m‚ $Š"<ÏÝËÍ2…iš˜¦$Ë¥b)4ããcø^©©N<ñD$-lÛF˜¶ë³~ÝF¢$)PYo¤Àó<„=Çj†!®ë’ÏåЉ&ºx®&ŸÏãû*KI³iJRÕVªçTu¥,Óèh‰”8M‰“³ÎÚÆ‘Ãßä®ÝÃλ„…Ú2­ð\‹z½Î_¼é üÍ;þŽ|ä:^yõË8ýìÓ9zp­fÃ4ð<ÏóHÓž˜©3m١к7š¤uJØ IÓב$I„Ê*‰°mS ¤fE\í]|Z–éút:ËLlÛÁ²¬Þ÷öL”JÉ2ÕO—È^©—a˜ŒŽŽ’¦)I’P,‘Ò$ŽRºAÓt1M‹0Œ°A,Ç$NÂ8µM¿ÀôLÇöüŒ3ÎÚ„åÞŒ4`ã «¨T×pöYy~øÃÛøé@Öð¹üéOa¨’§P( Ò­5*I± ƒ¥¥EÇfÕÚ5¤*%îFøùíPâæ«<´ó1~x÷n^ó–—pÆ™Û)z×ᘂNc Ó4IP©Â͹˜¢È·ÞÁ®;ùÃW]Mᤠ´‹äFXœ|iš0T ÛéÆsì߯¨7;ë FG‰“ß2( Ø–…NIÔmB–b¸6Ò0zwRbY6HI³Þd`x-Ïyö qœßþÎ( kii˜4;Æy&&Öð½ïÝÊ›Þô®¾úÙ\õò—£ÂL£ &x–G+´È’2Ã#|äc×ñ×o¿žóÎãþ+Î;ïL\™‘Æ-<Ï!YX\À²Žcã¹9LYFk“,¬[³žåÖa”6\l³ŠcÓlÌÎH^ÿº×²w_“Uç¿•·¾óÏ8óÌÓqmƒ(ê-šíy:aF–86Ôó\ü¤“Ag¨`š XR)¶4pí2±†Ýö³yb [7ŸÀž»~ÎÈÚQÖ?ã<º¢Ò1Q²L·›‘ÏÙXމ“óH…ëx&ıÂ÷ÊäÆ×b'  eq¡Î† [Ù|ÚvL»DµTa¹ÞatÃjî»ãî{x‰×®]‡r]d>¹As™v–Q* áš#«†Q¡Aùá?åÈá9.¸h a˜ç7íbË–›7oãû·=B±Tâ Ÿÿ<ÇŽåÕ¯x9K“3Œ<(ÍE—<•¡±Õ´šf¾H˜¦È8!± ¤a°45ɾt=Vr꥓Ô&ÑF—‚e“sLBÚ´’_÷\Ï…ògžu[N;Ûp˜Ÿ[æë_»‰/}é˼óoÿŽSN:žç]ùû<í)“e1vn€¤¾Ø_µúôéó¯ˆã%‚àJÕ"CÛ¯"Eéc8•ßÜÆ°~-È$ËbÈb̬E&B:Á~d0MN–þ8ÅþAý@ëžû´ÓÛьÚµ‚¥e¸çþuaU)¨ÕààÎ;3³pÜF¸è"ر£ç\ýÕ\Ö  –—áüóû÷ñc‹‹’Z *ÑVûôéÓ§OŸ>¿yau©±ˆëú " I§ÝAÐwï5Á ¢(Eë”òÀµf‹,“(eÐl¶ðrUçh,ÇGJ›¼çШ·ÒÄqŠ…qØ%K#’X‘óó8ùN‡8Vt„4‰ÑYF&5*I0cË6qL‹Œ I2aHßsCB±4H·Û@%]¤eó ¨DrÉÅòÍoÜʉÇD¾œÇËûL™ìuåò¼ä¥/䓟úgþù‹_ vØqÎÙ4›Kt:mš­Y¦WDeƒnØEë×’¤ª… Ž2,ÓA⢳„T%H!0M‰eZt:]Û%]ɯuñÑ’(À°L¤Ì"Á4õJÖkŠÖ•öBú Ã&Q ç2¤±P,•iª&AbÓ0ˆÂ[šèT U†%{Ù¸µùcT+e OyÒÙœþ0wÝ5Ï+¯~gŸu!?ùñ=ìÛ»H–A¥bsòñã\~Ù…x¾Isi­bFÖL°ptµ¥¥u¬ªhÔæ°]•hJ…"Q^00r_½þ( Ïÿƒg³sçaÜ8Ö*‹ T}˲xà÷pÓ _ãÍo~-ÎñëëËX¾Ëüü"ްñý"z›GwíâŒsÎÁ \XÀ-—ÑR³fýÛ—YZXä¤M›yìÑÝ<éâÓñý*ùÜC#yâ4CJPÊFi›n˜ö\¢¹ ¦²étZ$aÂàÐ%Óa©V£`˜½sRh@Ðj§¤©ÃÄÄ <øÐ£üÑý gž}ïÿÀ_Ktçl\×aày¤çó÷~œÛn¿w¼õ%\ò¤'’¦ó¸9“¹Ùe<·D¡<„?àsÇ­÷ðæ·\‹ïû|âã¯âÒ§_Fuˆ£6¾+év[ÄqJ«SgõšqÚí&–m°¸°€—+1Tb¹Þb¹ Ì ÒT¼2@ó•¿Ã_ý=<ÅSžº™×¿á%œÿ„äò6ùBžÉ™£tº)•b º Mµ:ÈìTÛ1‰ã”Å¥%\Û¤lUp­ £ ±m‡4S–E©R$1›.8›É½øæ×oâ¥;N¦0‰Ô$-…Y­`ºEꀃGf)ªlܰš-Z%ib—Š(,ZAD±œçüm[843ƒS™ e¥`æøñOaõ˜ÇHÙ$Ò F'ƉÛ]\³„ÔÎ@ŽÔ±Ñ™‡KÜýýŸðÞ÷ü#?ùÙ!"¹òó uöí›ä=ï}%_t1³S󔊂3¶ŸËèÈËÓ“˜®¤:1A¤Ll3Ïü|œW¤äy¥ÈÄÀõlÜ‚Åí·\ϱÙc\þ´K±GQªEµ4ˆŠ Û&g`¨n—œ—#Ž›mb›.* Y5>ÈŸ¿áMðúˆ]?ÄM7ÞÈÇ>úa>ðÁkyîsŸÇ/z"ë7nè¯Z}úôù¥L…Ö)JE„áÝîaÒ´ƒãŒP(¬Çó&þ‡ô· ǶKHÑ" gIZSˆ`Ÿ2j%oÞ4ó¿’õÚç·•$,Ó¬]›Q* FF$÷ÿBpàlÝ*ؾV×hµá4?þ1ìÚÕs»ÎÍi}úôéÓ§ÏoXXuóJÅt–é`8&®å!¥AkÒD377…Öw<…\‘V'Åó:A—N ©5bÖnðh·«E†<¦æ¨ Œ‡ Ò4D‹ˆN+Àµ ؆M) Ãõ”X¶IG„q¯ðÆÉùÂx8p(cïcšõë%hÁÜl/‹õÀÍÄjÍI'÷„Ùƒ‡$7Ü(¸êª^á•Ö05ñØ>M½!ð=Áðp/¿uaQ0?¯™™†0ì=üîmOÿéÓ§OŸ_²’.ø¿X‡ýµÏïþºÜ;žýúVµ–H)É”&Ñ)zåǶ Á2,š­:‡cbý: Ó£\.32êÐé´ÁüÂ"bÅ©FÆFÙ³o'­f S*²L …4Žm“©^™!%–e­\.÷¶ã—'E·ÓáØ±c‹EFFG@ôZÛ³,[‰HJ‘)E.—Dz ‚  ô2Mwœ}6¶åò™Oš«ÿä*ŠÅ2 ÈRÕ+Óê&\~ÙÓ˜ÜzûmX–Í9çì@ “ñÕ9rðI,©–VÑj×)åLâ8$çI¤„z½N¡T¡Û 1-‹\ÎòY&q]Ÿ$ÖÄIŒRR€$MRb#Ae‚0N‘–E£ÑB–©±m ˶”Ò$iB¦ÊR2ÝËü´, ­ǵRÒ¬·qL C®`Ž•C> °Ü"Ræ)Žø›wü“|i)¡Õ¨Q,zvh7æhÔ[˜†A¹”gjò IØaxU•\±D·²°°ÈЇ+0st’0Q˜žÇ»¯ù<¹œÉ«ÿü%¸žÍš5ãT+P.ä ªV06ß½á«<úð^^øü?`ø¸qšsGP2Ã2Às„”Ã`ÿžGa`í:ÂV‡¥z“²4 “7ç']¤>8ÍSž½( 8°’ñÕké†Ö¯ßÈ-ß½—jµÄÁƒG1 ‡é©cŒ a‚Ÿóñ½JeÌ-ÌÒn7Áp™ŸœfÕê˜<6ÏÄÚ¹õÛ·ð'¯º†·¿ó*®|þsYœ¤èP«-⺶[dxl7~ùzþö]ãÕ¯¾‚K/»˜#GöSÙH©4ÊôÔk6œÈr£ÍÇ>òq¾ô¥pÞ¹¸æïßÚ‰q ©™ŸÞ‹ÐŠBÎÀ2òÔfçñ<‹z£Áˆ;L7Lqœ"¶é'`“‘ÕÌÎÌsó·¾Íµü"Ǧ2žvéFþå‹â”ÍÇG ¢n‹ÉÉô[mò~¡W:ÑhP¨Èû.A Ðè,Å0-,Ó"hµétš VñýKKKÌNÕÈUóä XÒÀµ,ü|ž¬Ý%“¹Ó·ð‚?z1ÿò¹Ïòð׾˩O9—V½…(ÛL U˜™o1TZϪÑô´ZË ³ñ„Õ¤!4• MEÃÜQª¥AëmVŸÂ>Êî³\yÅ9ŒMl¢#ºxÆsS‹:A[ÝŒÑnùö·xÇß_Ë{Þ÷6®|é³Xæ¹ÿ¡_ðÄ ÏãÅ/¾š+¯8±¡qPCdmZË3(­ITÀìÎÝ =ŒJ‘B” fÖ¢ij´3ZÌǸõãŸãøÓ6qÁÓŸ…"¦hQït¢˜$S½"À ‹=2€mZ(‚4MÐY!LLÃ& »H!‘†"n‡TŠy.¸à\žö¬ç²×|èÁþªÕ§ÏuTŒNš¤z‘0] Šjx^•\n†1 ü.•@ÙFϯ‚¨ePé"q\£Ó=„— ã8•ÇEØ>¿yÒ4¥Ûí®Œì瘟×;¦Ù±Ã`íÚŒB!ehHbYš£Çz$¡RñЙÃô´Éþýš(RœsJÊæÍŠ™É·¾mñðÃ&—<©'ÌZvÆC-öL1-Ÿ‘!|ߦTrxø!ÍÐà/…UE÷¢Ë~ÙéЧOŸ>ÿ•IX^î½þ[½·B€ï÷dÙö¯G°ôùÝT“$YébeâÚì ¬¿ a5I¶e¢3H3EïÉoÆ‘£‡8røÖ­gÓ¦ã™X»Šv§‰çY†I>'™žž%MšÍeLK``“e1kÖ|¯N’däK>:‹Ðh<Ï'MS ©ð<Óê©J±- ÃpWJžV„Ï(IJª–D¥1† ®e… Ýn!@“ Ó’d™ M–é`Y6N‡-§F£ÝäsŸýg^öò—“óó$±"ètñ<Ÿåå%Î=ïl¶Ÿ½›nú&ï{ï{8ÿܳ˜žæ„6!´Aš8xÎå%’Db;CC¤©ÅâbSxh¡ˆã˜De@†eyX¶ƒ¥ T–¢²Lk²,£ÑêP è,×»ø¹Ç齟fa„Ö­@šË’˜¦ ù™¡uŠ&Bh¢( <ÏÃól „(tBHË$cŒXpë÷oåØÑ6—=ëRǘ™>wˆ-/ IDATÀRmSj‚Ζ™pú©Ç3PÀjÿ½÷޲ë¬ï½?Ïî{Ÿ}ú4ÍH3ê’%ËM.`L° ƒ1l²\J ! ’î½tH=„0„1$L³qÇ\å&[’UF#¦ž~vßÏsÿ8rïû®uß÷âÜø|Ö:ÿÌšsÖÌÞû<åû|ßßê1‚~ÀèHÇ-ôcò8¦V­S¨8t-zaÌ–»¸õŽ{Y^]`jºÌäº)–O…);¶mÆ·ÈÃÓ¹þëß`ï#òŠß|=õúåeœR ¤ àdÞw;vžJmdŒ  YžïÓêöñ|Ï+ÑëìÚu­FHØšgjj=ì9ÈöS·ÑZm³qãf …BÊÝwí#I3öxŒ3NßL'ØŽAvBgl|„,Oè‡]<ÝÄ.i·ê#[øþu·ñ‡oþù¡ÿ ~ýÌÍ=†çø¸^ ¡ŠH•²²Üæÿí<ôà=|öê÷°ûÜSXX<ÀÖS¦Ð0hµ›ÖŸÏM·ÝÉ;Þùv–—$oyëKxñ‹®B˜«Ks-£Z)bNÇ1Ð-“CGŽ£i`»!žW£ÕébZ.®cs×Ý{øÆ;þŽ{îþ)I:Ϋ^u%/yÙo03½‰fó0•E4=%Oc<ÏÃu<°´´L£¹‚W´q“~_a&I¢ò!’$Bf a(Q2'C#7$IÑn­"Éñ<›~«–)ú+«”í3—\Äeý7_ó Ì4arçm7'†_ “9I§Mžæ<ôÐF×’«"F?$èGlÚ¹“ŸÞvñì2KK«x£Ë«Ðju¹ñ†Ð…Îæ­;™[JùNƒ’SEè.–?ʦgðo|?ú³ÏÓÉ-=ÑoŸà‚svÒ\<̇÷ñÇó6 !Œ,Å¡Gî] ŒpË ×39½‰ÙûHgQ#P ¹%1\ƒé5Yüé|ÿc_¢hÛ\ôœËÀ/Ó=:G„àÈü ºQÈØø(cc£$a@EhäJ!„&JiRž<Њ èǶmâ8.Qw‰™ ã¬yæpÖ2䉌Ì!l [Ñ“K„†¢\>Û=Ù”êÿâÀI»ˆV߯RŒt…Ë?ÀuÊŒÔÎÀ¶fAkÏ!'ApìØ14M16¶™•‹cÇ岯ÈHt³™œ‚ÕÖî{°ÉÖÍÓ¤IcÇKÔjP*ÅlÙÒeýúÓ4¨UK¹†«®¼‚±‘ÿrû­|꯮㢠OaÃúMlÚ´…±±qFê£L­# »´Ú-ÒTÇuËÄQŒ”IC>xê,G)Ûr‘*£t‘yN¦©T„qN/Ì(ú#üèŽÛètz\tÑ…èº6RM(Ñ3…i:(©ÈeŠ…$Í¿lÇ" ûä2År]dœ!ÐQ9¤iŽ`˜D’ÉÉ5Ôkc¼ÿ½Ÿçþß/ÑëÅbŠ%…x.<ãé»xÇ{ +'è´–Ù´u;¶cpbî0®S¤T,’II«Ù"NF×L§Š›n¼Ã pɧâ}*%›ÎÒ²°Csuž©5·}ëî¹ë~ëõ¿†C ÅÉ¢¤ º(™!=H¥Z§R¡Ýë¡„Žžåxå 20­Q˜#eÎúõ3|í+×ñì+ÎcëÖMÜvó<ÿEO§×ïQ+ש”8v|‰ùã9‹KKŸŸgßÇ8m×VÒ0&ÉbÒ4ÃÊ ”PDI€fV1Í…ÑMÜüƒÛyûÛ?Àg?ûNÎ:g3ÝÎ1оN¿ÓG¥.¾7ÂÜÒ,ïz÷‡ð}—|üHöÜKµæ¡áPòLjú oxÃsý wò¼ç_Àüþ«ñK6ó'f1ô”RÙ¡ÓnsøÐq\ÇEz}Ï+¢>¸ç¾¹èâ§SÑ=n¼ñF>÷¹ëyè¡<ëYçñ®w½‡ÓÎ<……åã4ó¸nÎêêÝ^ƒS¶l¢ÓIÐôÂ>yªe|b”( )•*8¦5ˆEH2Ò4!BÛÆt­Uz]…W¡\4üJ“ˆ,yŒgÙ„i˳™_]fÔÔØõÌ ±Û}¾þÕ¯±û²§rÖ³Ÿ†“›:v­j’Š„b¡ÈÔô•Z™,é“å–i b&¬XU*u‹vR.1Ý*·Ýr®cqê©»Y;³†X yÑo¿‘|y…|ù8±Ú䵿ó¾vÓ,šao{çûØuz3vm`îØ!ü¢Ëµ×¼‡µSdYC«`°~r Çs)jë&§X3:NÙõéØ6MãúøJPu=’=óO_ÍüÒ<ô®wâ̬cui•$W”êuJq‚„Tª5ÆFÇYY^ IbJE™)„0AäÙ/J“$L\×Âõlâ8¤ÕZÅ´-<¯8,×2ä‰LA° ýDbÙ5„WÁ¶Ç0Œÿ×—Ëkh: [”Š;Qy‡ ?RÃ²× D0‡ÏÂãˆeYT*„4ZMSHSAµ ££à²k—A§ wÝ[cnÖ& }޶¸óÎ3jÃéi—‰ ]ÓٵˤÑPÜw/Tʃ¾Ççª4Wñ׿AeÍ™|ðŸäô­ëF†$fjj™§$† ÕêP®‘™dt¼šAzb‘ Ó£rÚ•õÓ˜ŽÉåyªšFÝ(À={¹ç[ßGC^ü¦×᜻“ÕÃsœXmP(—0ó„ŽnYô‚€•ÆêÏ3à²,¥£é2—diŠi:hšN¡à“e)i–bšžgáû.B3éu;ÃÓÇ!Cž(P¢tAÔB3=¼Â:Tq M3øÏ•A*0Œ"#µóé÷Ð뎡º.¢Ä0sõñÃ4MjµB(‚@G©XZ,B¥baš&Ž3p“îß7É‘YÅò’ξ}‚€sσ ,&&,|ð޳΂^¾u-Üw”J:Ë ˆ\16ª³i“Àóz½ÁZßq"jž^J©¡°:dÈ'4RB«^z)ŒŽÆØ=<*$ý(å¡Gr;œ²jôðk-· ZŒn”D‰ª^%W9&&ºÐ15M ź_µ¨ÚnÃáÃ0;;W×­ƒM›`j '#Ë$¶mS(8zô(Q çÃÇKXµLFžK”]×Ñ…MGôz=3Âó<4CÃu ÚeIÆGG CÅâÂ"#ãe¤”8¶ZF¹ê16f‘g Çñ±ÌC×èvšØ&()1LǶ‰’>«¦7Ç I’"eŽi|PäRCJc ®2ˆ p\=A†ÌY–&†aã8'3EMƒv»‰À ßíQ¯×(ú>ï}˜Ï}îjžýœçà|Ú­J渎C«Õ@&!^øvíÜE?È™=¼ÀC{¥à•øöußç‡7ÝÀÓ.|O»ø)¬ŸY‹mê4›ËXŽe9t:]ü‚‹ã8„a‚_(  ´‘Úx¥1V–X¶ÏC?Âü¢Æ/¸ˆr¥FvÉó,“𮡔$Ï3”’H9é·m‹<Ïèõºäy†a ·iI’Š4—†E–Á‘}P*püØ!|¿Êsž)ýæ*Î2õzKdIyFP,õºØ¶…ã–éõ{DqJ¥R'•‚Ng¥ üR•8ï“KØ»ï1n½íQžtÞ&Öoœ&“'ÐdÆü‘Ľ·ßz#÷Ý}#¿õÆß¦6Y!i¬Rª¹¦£HMpbaV«Ëi»ÏC¤’¯ä%ºibš6†i"0ñ}Ÿ;n¿‹ç<çœûä]\÷íøðG?ÂO=›Å….Û·G!6NóÈÞJ‡~Œ—¾ìMxäNVVVq,ËDGd©Ä(Z$YBµ<ÉW¿úm>{õ—ø‹¿|+»wŸA»³dnP)Ö)øU¾ó­ïò¾þ5Wüú yù«¯ä}{¨–]4áR«N±´ò‰|ˆo|ã:®xáy¼ý¿¾ß³ ƒ<_a:e¤Œ£I’¥³PÂs‹Øæq$1ì*SS›¸÷ž{ùÊWÈÑ£sÞ“Îâ–[®djjEΡƒ‡)KØÒF3`jM^oÓÔˆ‚>?ýÉ6oÚL%(¥(—ËȺ½6Žã`é¹™Ëd}º®M¹\DªŒ4 14Ãб,ŠHÂDZ°M“Gy„r¥Šn;TÆFpŠ%VÃ.~&™~ÚLݳ‡{o½›t%äé¯{5ä IJjFFëÄ>RÓH¥À&Vi„ßõü«oR(—yÆó^rÍ?ÿ˜^ÒE7%¯yÍ;™Ù裊ð©¿£¯øî篡ÙXämï1»/}K]xÒ×ÏAöWq\ɱÅcŒ”KšbµÙ$Q)AR­““Ñêø¶GÔK°Ð¨lœ¢I7Š+Í,ú÷=Ì_ú KÍv_ñl6?ã)ô;+ê5¶O¬!Œ#Vš 4ÓÆ3 ºÝ6-MÃ÷„Ptº]übmpÀ”IùÒÓ4IÓ¥r¤Ê‰ã !~–'­‘¥9¥Zm8k ò„ÓU%t篸V*3§†Ðþ³º7š0qÝi„°ÃôZ(l{(0Œx|ˆ¢ˆÅÅ%ÒT¡ëë)¥‰º>0L”˰n-LNê<ú(|á ‚8VT«’ÝgiìØ¡ýÜIå8°e ¤©â¡s?®Q,êìÞ Û¶ ªš®„Ç8³Z­“G©a–!C†û .¹äFê#ØŽMt;+äiÈšÉõ,,68s÷.|ú¯±°¸Â‹^ü|9̾}{yÇ;ßÃYgíâŠç^ÎÖ-›º¤ßïàyU‚0Ç÷ÊÔ'j|ó_aûöf†íùôß~žÓO?›ú9S,/7Ù¼E019…$'Nt]!Ð82Ræ(%îîÕ´ÁÏ~ö¥1 P躆åƒDBöû8Ž3xŸV@ˆÓÊ ÃŘæê"q´B­:ÃÂÂ2##5ŽÍ&K%k¦Ö’KE„躇í LË!èwãÛ-Ó #2Bj#kX¸÷ÝŒŽR*Ø¿3™Þ±“j©Èm?ºƒßù½×2¹±@ÔY Ê!Iú”œ2†.@HZKKôz=6mÙ †I¯ÛÇ- óËu¦E?ð‹Tš“ʈíÛw²ïÀ£¼ø%Ïç–×ý„£³Çyæ%Oãï¿ò]Î;çzÁ*›7odvö›Ø¦Ë}÷Ìô#N,-Ñj/²yÓF6nžâÈÁÃT«5Â0£\åúïÝÁŸà‹|æê7qæîí4VçˆÂ ÏÁ)NS®Õ¹æËŸç‡7}‡÷}àÍÔ&Ç ¢&iœÓë 6LOsóÌ'>þ7,.4øôÕïã’KÏåÈìCÄaŠ¥i|ß7Y\êG)–éR­ÖÉS821 z­ÂÞûùÖµ×ñÝï}‡3Î<7¿ù<é)粸8 z€ G3»ØŽF«s‚±ÑµºÅüñEdž¢i‚Z½†adzÆâÂ"AQ©ÔbÐ=0•9ý~H«Ù¦\,' ³³G«×è]ææf)•}J£ãø»\"‹B\×% zlÞ²™n?¤'xÓ¶I¤"Ô–æ™/|! àk÷e:Ý€ç¾ü*Ê3¸¹Æâñyb¥¨T+êÄJCÆ 7ýøQÚ·‚í-óÝy \õÒsøÚ?þ >ø(_ûÂ?06^âe¯»œ™©V.1õÊ+9rèN¶Lo yâ1]A©Xañø#,´Œc÷ÂN›~P±ˆ‚@ ²XÒ^h°iªÈÜ‘$HDž0¿4U¨RItþöõÜÿïQ¯pÕ_súv:̈́哧 ©R˜¶Åøø8Iš"QÔjeTž‘g1I–áØ6½°O+jµ:¾e“$­VÓÔq¡™'³”%Iš¡k&qž#r†U°C†<‘È¢“NÕö¢ª?ÞèöþEªáãºk‘2&Žç‰¢€Sá ÄÇe³—†í¶…B×ñHâÛ„µëp}ɱcû‚>–©1¹Æ!b4ÍD]—=™ædº Wƒü$dY ÄPóäj+I¢@G×]³-ÓBJ c+ i±À0 Í@)yž¡ëÅ¢OõQJâº2™œœàÿàwyä‘G¹ýö±aÃ*•Ê }j”£‡Òí6ZN–wYXìQ,UéôšlÙº‘ãóó,.<4Ï?ôI®ºòù\üô Ñ Ç.ÐhöHÓ•Æa~ÿ¿À'þê\þ¼gpàà<úðxçŸâ’Kêüð‡‡9ÿIS”|4í“§ †¦aé.RèäLÃEÓ%Äyž£ëú¿±xK)BG cZæ ïÖ4I’„ÄJˆÂš¦!sp]Ÿœ”<ËqœZÉ'í¯0>â±ïá»R°mׄ݀0Αš‹á8X¦K»ÛÇ:åªÂ!N3ÐqqÿýÒÏ¡Rô@ÅT=EFÐj±çÞy,;dí¦í;z•ºƒí¸øz™( ±A’ôY\Zbbj tœ¤Ÿe9¾í’÷{èR‘¦ Y’§ £+xêS/àŽÿ /¹€S¶ŸÂ>ÿw¼öõ¯duùë<öØj#ëfÖḖ-96·€TŠñ‰) 1=½žã³Ç™žÞB·×¥àU¸ö›×ó¦?ø>ý™·ð” /`aî4]âûq¤(JøÆW®á›×~“÷¼ÿO)Ö–; Ë]ÊÞ4*òùØ_~™w¿ë \öÜ]|ñûcdM‰~w‰‚í’$1š‘’åŠ^£ÊÀ²òÌ`ßãl˜ÞF±X'R6_úû¯ðž÷~W¼ò©üÕ_}„3Î<…fkGº‡‘±Ýv‹Ååy¢~—m[×159Âòb€B'†®“g9¥B‘º©& ¶ë2:1N…äyNÐj£}<×!ŠcVšm*Å"q6ȶmËri·ºX¦Fi´Ž£»ìÜu:/°m¾ÿµ¯ñÅý5—]õ<Öœ.U"V 2°u“‘± þá³ÿĉ+|ðÏ“gžÅ£³û˜\?Å™gŸCÙ+Só\Î?ýT¢þ*ã[Š,?N{ù5O§akda‡ÈYÈT§RÐh„a³Øíâ cZ,.¬p׃÷±Ôl³sÛtaA_ÒÌÉ:š­3)âåˆ]w=wÞ| [6Ïð¬ÿòR´][QIˆ 2%Ñ,%sò¶msÚieJ%)ÕPP}¼×GaǦ®cš #å ôÜqrR*lÛ4‹ÊÒ8abb-&KKMN]3ƒë@JJå2º®Q.yðÁ½>4‡ïK¼‚N¬'ÈT¢kBüÌe)º@©AÙºmû8Žƒ®kA€@ò\„pκ4# ®Ô\Fäù áVÅX–…ëÈÒì¤r¯“eÙIGl—Å¥UÖ¯ßHEôú!ŽSàœsÏåÄüßûþ÷I’„+®x³í§\ò ÃËv‰¢˜‚ï#´Ãx¾ÏµßúÛOÙÍ'>ù¾tõgøØÇ¿€axÖ¥Ï M%¥¢Ã'?ùEþùŸoaÛö›6ofµÙâöö@æ‹‹ %.ºø*z½e”L1Œ%a¯hƒfj XA€”Ïó0 ƒ ÃhPžmÙ$I‚¥ Ò\§@Á8–‹Ì£k7èR.—qìJ)RSb‰Œ$ìspö1læR,’g yšà¹b¥‘ÊÛ.¡ç&†¦*"Í"ÐL KòMüBXS/³zt?ž-ðFGùÇÏ]ÃÓ.>Ï|î»|óÚïrÁÓO£—w©z>ýNH¹R¥qìz‰uÓÔÆ'Iˆ QTª#¤„¦†!BSxž‹P­f‹‘‘6Nsó­!•y^ùªßàï|7YªsÙs.ãºo—·üÙQ2ãŒ3Ïàæ[®!M{x”óÎÝă{~J$¬›ÙÄêj—‘‰i®ùÊ×y×»>ͧÿö¸è¢'³2™ Š¥*šY£V÷xÇÛßÍñ…&ïx÷;(× „i4’ÌLmåøÑÿõmΰ IDATŠ>üá×rÖî4Z‡f!4ò$Ç2,’¬¦h¡Fè¤Tcëæ:€÷~à#Üÿà<õü'óíï|ŒM§9xèó'f*ad¤ÊêÊ~ÁfíØ$ReÌ=ÆM7ÞÊ%—¼×5Є Z­'1ËË« ºfEiš"t ˶0Œhvû¸n¿\¢à©×G£ËÔ1,“ùãÇiŽWv0uƒ0L0 4ËèD!¦é` tB²HQ0‚î qš²’l™äŒç<‹úXïõKüíG>Éù÷Üů½ðJÖÏlàÑÃûie!UÓgë†q~÷uOçœ3·ræEgrjg-a¶‘µ—°5—4ŒX]=ŽQñ0tÉú ch͘å;æi¯®R¬Ö1¥ŽÌBêõ"F¥„’&q£EÍñ2ãðâq.¾ðbŽ/-õúxÒNH{y•Êøn¥Æ£ßº•ßüÚ2gÇEçsÙK_H樕%t2Ã$ÉSL#CS™èr)£„~¿Çjc…V«‰i阶‰æâWÒT#Iržç“e9y.I’Œ( ^M ,š"I#ìá¼5dÈ€ˆH²%’xÛ¬aùQÕpž`×B`\wŠ<‰ãyúý9\×À¶ËÃGåWŒ¦iØ–®+ÂP ëŠrYý;±Ô4abB01ñ‹ûøÿ„eÁÚµ‚µkÿí½ÿ× "Ë ^WhôúŠnwï:dÈ!Ot~YW‹"X^QìÝŸs èЙl05-sǤ™Áä(Ø'ãU²TÇ5\\ÓýyAHL̪X¥‘7è¨Gãä*gÔEúð¢ÿÿÌÏ¢m––ày¹—_®8õÔ]O9å—½{G,/¢-kÓ3äq^¥i (,ËDˆ ôg¢¤¦é躮%Ð4Ó4Ú¼q ŽåòÀûÈ3IÅèºI¯×%Í"ÆFÇXY^att”‰ñ) žO¡à£k:†abYžç ÛÄ4 „$IBdYŽeÙhšŽÌQ˜…(ÓpɲAçr!§çºn`YšEÑÏs¶m¡éŠ‘‘£##4›+ƒü§Ò ÃöêÊ2S“kyýë‡-›·óןü=´É‰i,ËÅvLÆ×­¡´’€4MèôzÜvû~Î;÷Êþ8¯|Õo±iã&®¹æZöÜ÷(•ÚËËm>ûÙkyÊ»øÜç>Äö»h4VA×`÷YçqçOîeë–[·l@ª¡Å=ÛÒÉ3‰Ìy"‰ã„8NȲœAv¬u²›_FÇdY>p¹é­V€çVX(eÐnü 2ŒÖ'ðÜF“v§eØXf¤§±t¬£ù” Ut¥ã9.ºÝn‹~ØCèŽg#hX®‰aYôúm:Ý3Së0€™µSÔg6`86ÿý­oe|Í$O»è™,®h|ë7“j†W¡ăÒôN“#ûä”™µ¬Ý´‰~? ËJ3XmµH³ … R­R,zäiL¸–IØï3>Qft¬Æ‰ùE<_czÝ ßýö-\öÜg3;;GÒOév;\|ñ…ôƒA©ÚM7ÝN¹\&ŠS‚ æèì¥B…~÷zþð÷?ÍÕ_üsžùÌsh·cïÅIñšWÿ&ÂÔ¸ú‹Ÿ`tMÃvpQ&GOç¾r-—?÷w™š,ó…/}„ËžûÊ“™õ“D½.2I) ä¹" 2’DÇ+Ž23½“5k¶ ëEnºåNžþÌ—3{ìŸþÌÇyÓ¿ÃÎX^™£Ñ @3,r¡‘Kc9¸ºMÄt:-zAŸr¥ÊÜü >ôc§læªß} Ï~Éó¸ÿчùì_|”ß½±¾FÖl¬Ì33QcûÆ1¼÷V¢åýôš‡ÐÒe|£ ñµ€zÅ¡XréM—ŽÒh-’D=’4Æq]*#£˜¦IG¤iDžÆÔŠÖÔªx€™g¬©S+¸äâg°qzOh8RQR&V/äæO}†ë¾ü5lÓâÊW¼”ç¼éw ª}Cš†ëƒ²iŽP9šžCž"ó˜4 ÈÓ]X¦E±T¢>22hP¥rtJåµZ…‚ïŒ÷ÐP ²,'MNtß/1{ô0KKóH™g­!Cž ë„<_ ¤IÏR¤å5¨âš' ¨ú tÝÁ÷·P(l& [Á2YÖC©¡•ÿWTŠºŠ[ápx˜}½}Ä*^ðÿÏk=E’$„aˆ”òçÂj»=T——îãíÛ¡\މ¢;w¦lÜh‘eeZ-,xâäáHù³¦•ÿñªUŒ0ìS,úx‡4ÉHSAšæ†A¥ Bӈˆ\d $ä’‚WĶ<ºíœj¥FÁóɲ Ë4ÃË29~<£Õlã:%r™ÑÉb,ÝDÓu2)Q¨“y­ éC7È2qòáèºI–¥†‰úɮں®0mAž¥èºy2cU‘å92—H9xÅq Bázyš`š®[¸[m—4Mp— °mÉå—_ÁÄø$?ºõ6¾þõosáÅO!X^F7Á-H’¯P§±Ú$`íÔFþîó×pÁùgðþ÷ÿ%ßø§køñwrln…ûöìDZ=Þø{¯¡P(1ìãã<øÀýÔ«pú©gòGoù;vìÂ÷m4RlKGL¥aY‹ …ÒBÓЄR’,©E¿„c»¤iŠÌ$B×M§±²ÌÚµëè´;˜Â" –ñýIœt\ÏD:­¥>åˆsw?•÷ÜÍʉUN½à\4]¬®Ðïw(:tûMT®£çàê§€ƒ‡Úu<,ËfÓx‘J‘¼µÀ?ýÝÕTJe.¼ìrÏFlÞfs÷ó,4ºlÜ8J­â ì¹ýfê¥Å™µä:V¡€La' Ò¥khTyŽnA§ðÐÃqêé›Ù¹s{~ŒÉ©I®¼ê…¼÷ÃeW\ƶm§ðÕ¯|ƒWüæ•lØ8ÊÖ-#Î^üÂfL«z²jȯæ¸E“´Z‚BáW+Xhº"ËY6ÌX2dÈA_–Á˜ØlÂÝwk<ðì;”ê}¼éÌë{¹e¾ÅR£Í®±Ó˜q¶“ie4i¢”@ÊÿÙ˜+°t‹:ušZ%¼CK¶Ð4 gxéÿ7ɲŒ¹¹9[·n¥X,’e⤨*¨×¡TTe 6RjlßnpäˆÆž=ƒìÕü ´5Ìó_4¬tÝ_dµÿ‡V}×Ã2LP )A% q㺤ÊIã Ï·HZ­r¹Jœ5Ù¸a+GŽİr¤´(ª(!¤ÇÚÉidËK‹LL”h·;TJ6YšâØšÐÑÐ ÓP±N”§¸žE±X"IR¢0¥P0 ]³0ôÛ.MSò\b0è ª”$Ï““;CÓº¡“ËhB…šÐAhHßE*…i*ò,Âq-¤Lèu›ì>ó46m™áÆ›nà‘Çæâ‹ŸÁ¡CsĉnèdFÄ 7~j]ð‰O|‰[~t€—¿tÿøÇغí ^ö²·ÇPªÂûßû:ÖoØN¯Ñ\m³nýn½å<ëÒ³h¬.róMwñ®w_E¥F!k8zÃ0‰ã]XdhH•£›…C'„qÇ1pŸ´—Q(Z´V;8Z»´–}ô“4[Çù¯ïx‘Œ:¼ÊÀ%'òœz­Lž„,8J§›2=½£h±uûF}`÷Ýx3[NÝmZ¬›˜B:6­0¢V§³ÒDïA/£jÕiZm›¯¿- Ù´ÖàÖk¿DØù½·ýåY¦¦vQãðÃGØ¿÷~vÍ\€¥ Ž<¼°™Ø¶ƒ ÝWGw,‚¸Â P0MË4~· Râ:6yœ¢ë:[·o Mv¹›Ÿ~êjO48åÔÝœ²kÿøG¹üyWð¾÷W¾ú%Œ9ÿüSØàvöíS,7Rªck9°Åò ~û·ßÎ_üùïð‚]ÊJk?¦i Ù%ú±D³ê¼äªßàe¯x9/yÕ¥4;GÙ¸a‚‚»†ùÙ”W½ø±4É?üýû¸àÒÝ4–îǰ%åªG'è"”C¥RA¦³‹sŒ×Öbêe&F62wtŽßú­÷ôóûo| ϼäi$iŸv§A§±Àâ‰>æÆ *•"I:pàj–‰® 4Ç"’~ ”À’ dz±l¥$^ÁF7 Í"t „ÈQ*8®nÆ9šfÒë†Daˆk›¤YL³•«]Ó £Ær áåèYŽkšÔjSt£€,Q”½2^Ñ'‰"úYˆf(̲Á¶Âzª…I¢Ø¼~‚BÉG3u²4À@pÊîóعét~tÝÍÜzà Üó‘{˜¨W¹ô¹Ïcgq„}÷SÈ,Fõ*+YD»+q :‡ŽÌ²|b•3Î:Ã2éôLÕñÏÞÊ=÷ÜL&«í&4cÄ© k6qb]VTN é”­£¦(Uý ðà÷±÷†Û±â”µ¿v6—¾ðy˜#p-zA—•Æ*³H‚>Ý(¤¹Ú£V¨156JžèXæ SZ(CJÌ“‘"Kp\“,ON:ó%Ža‘§É z#K‰ÒÛr‘2¶,Óe)Sk7Ðj7  »4\ˆ òŸ[TílúÙÃó¦ñýmhÃF¿X¸ŠÅ:Í}݃¸Z SsÀpa(®þJ„M¥ è+q¬Ñ0Œ_kTÓ*½I›rIcÿ˜†M¡àc˜iD]’$DfY$Ñ•‰i8¤iJ„DaŠ”Óq”Rä¹<Ê«ašŽía[.†n‘gŠ<ËIÓMûì½w˜\åyþÿyO?gêÎìlßUGB‰ÞL·)ÆØâŠMüƒÄ$&¶Üã$ŽK·8¸;Æ8‚md1„@QÔP—V«í;»Óçôs~ŒPšfà‹ñÞ×µ×îµ»×93ï9sžç¹ßç¹om× ]Sˆãz½ïƒ¢„aD£ÙÀ÷=ÂÐ%›Äxá#Åš.ñÊË.bçî<ôÐ#Ì8†|¦‹ZµAàûL'ص3fÛŽ}ªLµ6ƒ¤ü@ÆqàÃ{5nüG.»â"vîÚË¥—¾ÿøÃlÞ¸‡íÏ>Ëy.cãÆGX0?Ëù_J¥:E"i!Ka x¦a¢(’¤# ¡€ªk¨º†aª¦B¥R%“*P­T°L•XÈŒ.rû~AÃŽ‘d /p@‰|EбëUtU"ij”Ë“Ì[ÖHDL—ÆHô8ñì31d‰ ÷ÿ 3™iI8h&**ÕJ™˜Œ™£#›%kj¸Â#ìáÇ?º—®v}ÛÅøð>.½òu¨º=“<.žÇÄ8l|p#Š$ãNÏà7Ì]°ˆH³pŒ$n~âz.ŽS# šˆØA>©„Ži´ÞšfËd˜ÛßÅ‚ÅKiÌ”ééêâ»ß¹ ™+_÷*öìÛ…¦«–Âÿòs SæÒWŸ‰,Z¦[¶ ÓÓ¿„Ãc£¼þ ïäºw¼«ßþv<§Œm‰¤$fª—T¶‡ /¹œ+_9—_ù*&'‹z†¶t?;¶ ñºËßÄÂùüà_à„`ÏŒ’0“A B¢ÐÙN"k"é2uÛ#™î`Þüå,Z~*wþè'¼á 7pÜÒßþÎyÕ%§úE«´gMúºòt¶e‰ƒ€D"‰ªê¤RI …™¶4µFb¹HÕ­ãPl†ÆGhÚu4M%a$“ *ÕBЍ7*ØÍÍFß³‘eˆ|]ŠÈ§“d“IDáÚ6¾ß¤V-â» )B™Tšr­F3 šŽD(ºI.Ó’×±‘‰Ðt‰TÒ ŸjC—d$`%%tCB!ÝH²A±Ñ$lOsö¾Žw}ö£\|ÁExe›Ûÿþ[<üãŸv$&¶ £m. ²óÈ*y‚¦ŒU2V‚°Q'¡˜H~Ìôä(‘_£#×FÒ°Hê:]íXjK7µÃlCGFRur…’ù¤‘&Å»×sÛ‡?ËgÞ÷16¯”Ž\†\o'ßpê‚*nƒX‰ d0t´¢c¡‘6L’©$V&‹j´d¢*I|'"ÝV@Ä2nÓE×5RÉ$BDx®ƒe˜˜º‰çÚøAIòˆâ›U 0 YŠ Ÿ [;a0›…Ìb/ë$»A­¶“Z}™Ìr’É…H’2»0ÿ¦¼ AžäÃ4ziQ9 ¾=» ?##/]ÓJ%ŠB|?8jeY öîÝKww–ÕÒó3M¤E„!LÏÑtƒãOXÆ®} „D¡'ŠCTYfzºˆ¬äÐ4Ø·÷ ~àâ86º¦‘NgpœÐêÌpì&ºnáû.~è’¤ ¸ÍžïAÄ€, ªÕ:’$Ž]É(ªÄ„aˆišÄqD³Ùl%~BÂó|,«Õ1Û´XV]×[Ú¤RËH&Æ'Œ V/ÒÝ¿ãWžÊOïú¹L;Ý=]hš Æà—÷âª×­æ×ˆ /z=K–.À2Þÿþ1A†-[¶ðŽþ€È øÐÍŸâÙgGq\xÛÛnàÔÓ—qÎY¯ä’‹ÞÄe—]@ÂH‡sqí&ª¦"B×m‚ªÒ’ Ë b âÆÖEE’„‘cdz‡ù‡o|…›?øVúû;Ù¶kƒÃ5>|Á©¨Š€Ð'Ž" Y¦63M6“¡Q¯P©L3gÞ¡ëQ-WȧÓIJÀõ=:æÌa¼VgûÓO³ì„Ã-=eázAàù ä¤IÁºu÷1] YÒ°{ï^ó†ËHšDZÒín™K/9—ï~çAöígh×0‘ãÐÕÛCº·@©2E¬Ëx~€a(H’B-r2Ž‘iI;T«BÓCQT¢ bôÐ¥™ º™à¬³Î¢V·yàÞµœqƹ¼ó7òÍo›ân¹å“œvö*.»ü"Ž;îë<³­ÈÚŸ=ÌÌ­·>ħ/æÚë_ÇÔágqì*‰d9²Ÿt¸æµ—qõ5grý—c7jXViîúÁ/¸é]ÍŸ¾ç•Üôî«QD•áÃhª‰¦4܈0’Òk³aÉâq’íÏlãK_|/Å逿üôŸsÆ™§†F Û®“Τ!˜fKæÁóCtÓluªÊ2’ªÖÓÌŸ?Ÿ©©)F††0ªnºŠerÇwÒÑQàì³Ï&NE¦i¢i žçE1QQ’Ϥ‘%AƲc Ûµ‰‚EH€4jUâ@âP­HµdÓæä%×v)drtê혚Žu·Ù$™0‰‘*F>^F.žç1sx"ŒiëÌ`!ÅZ«-ÁIW¿šžåK9´u#[w±eÇvžÚº…ŽÞ^ú/&×ÙM¾£‹ãæÌCÌIc#$ƒ¶\/Øj‘œH’W’„’IPwI겚!°e&Çǩժ<<ô8ãŒ<½ %Ž0»3\ðš‹Y~ú*܉1†GGpr0åqLFTCÒcúÌ¡Z®b¨&mJ‘–±¬¶rÇÏ~B_oçœy# F IWÐ’A`ÛH2mé š¬â6šT«5d%Â4u¢¨¥³£ÑXŽEpDÃÎCÖbÉFÑgÛrf1‹—'b DÄuÔÀF]mCQ³„Ño W½ƒ(`7†Á4z܉Lbvy^dbUÓ!‘E~ñÎiY­‚Òvb*‡Z­Žï›³d³˜Åï)±Q©L±wïÓ O’J pöY'‘ÏWH&¶ãU'¨ùÝDv“dÝ'W‘™Œ”hÌü U$ÕÕÅ §‡´œkMÿÝNÏóhÖšÔ‹uÆ›ã$ƒ$¦k3[Ÿü_¯[£ÑÀu]&'')—K1‚,§ioÏ ë1†Ñ@Ó, Ã@’Zù`>sç¶´X¡PhI¼œ19 Ï> BoïK”XTUÁJ$ˆÃˆ(I&“$V‹ÈŒA–¢ @VA’#â Ä÷\ C¦Z«Ç i*SSEúúòHrˆªJ´µéìÛWbt]ÇuâÐÇvl,-a(„¾@74b9@Ž@QT$©eàâNëüJë÷²,ˆ¢¨Ubh!IŠ¢„>A†!–eáûõz Ó4±I\;Â÷"‚YGUŸ3ÌŠA„DQ@ â8 ŸKsp÷N]s:±Ï<½‰\áLU£\ò;Üàc¹™oÿ»¬9¥‹K.9Ÿ+^ýäó_þò_ñ±OÜÌÏ×ÞÃ+κé™Ã”í–±Þ±Ç.åæ|”Ïÿí7ééíâš7\EqªAoÏRÊñ~X¥á%V‘Ah8vˆð¦‰0h±Jy:f^ÿbîüñÙ¼yIÈFÈúÇ Ðà„ÕË(—¦H ø>…L†É‰qjv…öö,Š,á{†¢ ª*ûž}϶Y¶b%'uv2vhˆÛ¶sÌ’e´eÛ˜šž P†ÐPe@ReϾý¨¬Z½ŒkÞ~í½Y*uÐu §QE 5–/ŸÏI«»Ø·{œÜv/oºúrŒ¤E£6¢ËØA„çFGs‚„ "BVZd ç{$Mß÷p]»Q'•4)ΔشùI.»üJ¾øÅ¯²r剬X±‚o}÷ŸxzËVŽ=nÿüã;y‡3Ï8“­Ûîbßî Þþ¶bôÎˈÂi íŒ:¤rsÙ?Íuo}úØrÞùg0:vSÏ Eð©~žuë~É­ß~g»C[H'M¬t lÛ#ŠUTE¦R²1MX´hS£M>u˧yð¹é¦«¸ä’ 0LÇ®ÐhÖQU ׳ñ}8U“I&SÌ”ª4?б@H¢e*'A{>‡m»xŽGè9èŠL*dÉ’%ôöö¶> Ÿ];w‘J'éîîB’"šÍ*†a`ê:ºhI'WkuRÉ R UßA º*aj*AÓ#$bN_7%·%;±ª 4ÕЩ{6‘ëёϥLêµ*ª/1R,¡KURˆbCS!Œ l™\*…¥é ÉÌ9u sV¯¡´þqÖÝþÏd)ŠÓ3LîÚÃÐÖØ —”•&&FO'ˆ³&}=à0Ó¤ºo”]ê&섆mב£â¾!r’ƒ““ö*Ü»±ÌÂÞ$·|âF:æöafd|·J²-Á¾ÁÝt$ ‚J™òÔéT !¹Ô›MÛÆ0“RŒ¬(Têe|×å¼³ÏÄ4Ô›uzæôc7m*õ2^bzkÄ7 p›’.PU…t: „èFËÐO’$„PZF D¨ª†ªjHŠŠª„ˆYwŽYÌâeK¬ÆÔ *c¢"¤²PgIÕßÈ­J5Ìi IDAT`戙f0ŒM”ÈaÖŸøÅ,Á÷ªŠU…AG$ "pÝ–é­ïÏš;Îb³ø=Î!â!šhÚ4™Œ ¯ïf¢Š[9ÄОišò„à…>iÏ¢s¼—ÚXƒRðÛÇŸÄßÞF±´‚e©e˜j!)ÄñÎAüÀ§Þ¨Sª•—Ʊ|‹xVåŸÆˆÖT¶ëºT*•£?»®Cgç4mmÓȲ‡$IôöÎ%‘°ŽÖé4ô÷·ÆâaÁ˜;7&Š¢—嵈c(aÿþ©,ÄK”X­×ëH’„®› IxžG_o†iàº.aØ*î2ŽWG–" S§i{Ùgz:dºX%—kÃq+Èr+­U4‰O<žGÖ?ËÌÌ Bòɤ5E`™–n¡)’!Ë š^èâ¹.aš¦¡é*õZ?ˆ £–9•$I„aH³ÙÄ0‚í<•%|?`jj Ë2I&[†Z®ë:A I š&£*:q´¬ÔÖ!”õR“l"ÅÔØkNZÉc›î£TZL6»€_ýòi µ/åVÞ°–×^}6ùÈ_1]t¹íŸ¾ÄÀœ.ú LMN¡ª*ßþÎW¸õë?äk_û9ïz×;(t-à‘‡rãMW2a/+q×??À²ãæÓ?7Gµ:JzXVõzY¨H¨ …+KD‘F&ÕÅcüü盹ôʤó4<—MO=ÆÙçÎ#“¶(í§«-MøºIefϱ)är$3&º"LÚó&'Ç©ÙùB-i²håJ^»ŽÝÛ¶³lñ±XŠ‚«†H¾GIàGŒŽL16^¤áÂ+.<‡öÎnå"±ž%›ÈQ)¢¢X\|Á|ò¡S*Ť;úñ¤ʵ"=LM£ë:aØzH’‚ˆ#¢ Õy,„ -›"•LR,©”K¤S úçÒY­qðà ?¼íûœuöé|á‹_àýú8ïÿàûùø'ÿšo¼‘¯~íÓ| —^z·}ÿ!¦gÊôÌ1¹ââÓ[÷€ärðànº»P™˜á†ëÿ˜?|Ç›8ïüÓ)W¦èhïczÒãCø$Ö?Íí?ú–ŸP`d|½=¸N™(t ‚+™Çõd*•:}}ý¤Úz¸í:ÞûžÏ0oAÿr×?Ò–Ïw™™™Á´4LK£ÙlbYï#$C7Pƒší222†iê„‘ŠªH„A€ïû$­$ª¤0m»¨BÐÙÑD¬\¹EQ(•JhšF{{z£µ ¢ë:† C\É&•MãûAµ¢k:º@ Eˆ®¨ˆP"ð#jÅIÚ&µzƒÀ X¼h®P­×Èe³ØžÃÐÔº®b$L€ Â÷}TU%©h$ 9Œ‘d™¨TîU©Ï”Ù=S¤…<ûä3X®OÒ–I¹VÁ°tÆŠG¼@öNÃß)3æ4é™Wcbh¹ê1ÐÓÅ¿zœCåI²íòä$“â´ƒavÐo§â<Éö±:;Ç“ÛNH³:C}øÓûpÂêÑ¢ˆ¹¹†‘ Z­@,¢§Þ@Rt4-Y%ˆ}dE¡»³›âÔ$^à`{M¦Ëe:º:G øB7@CEŽU"?ÂH˜˜–Ex¡**pl0MI¨DQ (¿VT~³˜ÅË¡$‚¦=…×ÅTsV/ÈÚìÂü—욂В˜Ù^$·Ò,B¨@"b–b}KB ‰‘A¡ èêÆ‹WèDQ«ÐRA>ßFoo‚ÔïƒÈÜ,f1‹Yü¨ªÆqËçðæ·žÉÔÄ‚@FÓ <¢YYJ[GÂjGqB·%¨sl¾É±¹"¥Ô3ìÛ8=ÍžÒóõ*ùÕdÛŽ!ŠZS3qkŒ!AàdjÕ…tÞLïlÇêÿ‘Xõ<ÁÁAJ¥íííô÷÷“Íæho_@6›Ç²BR)™T*$ýk^cšÐÖÖ’7½ýy¬šà´SæPœnR¯705ƒ0´YtÌ|+¶Ý$™ÒÑ4 EjéIÄq„ãØÈ’ŠºøxHŠ„¬ÈDQ"" }U&ŽÃ#$oˆ¢(ȲN šGã Ãh‡GQ†­Î.I’$‰ ñÝ&¦i +11B´:`ƒÀ'=E!öa H&Õæe:»rlÞ¼ëþðÕÜÿÀ·Ø¹ë0[v&‘QùÞwÅ)«û¹íû7ÐÕ™âÐÁ]\yÅ¥ì?°ÍÐ)t$9Ìë¯>…Õ'ŸÆ÷¿sÏîÙË÷~Xâ•—ŸÊûÞóÜùÇY¾¼›Ï|áz,ìb||!(š‰*µL¾„š" 3-I hZ–ѱ4Ý)N;ójT%ËØØ$c¯}Ý Â°Ž ò]„ïSœž¢^oÒÕÓ‰biÔÊe4UGAfzlœj³Nßœ9˜é$5ßEABAá„“ObpÛ.žÚøǾ Í0Q“0€À)NÕŸôY¶Üà´s΄hÅLƒaáÙ5²Ù4^ìà{U^qæjþ.u›6ïãÀÁæ.4±}ZÃ&—)  ß’ƒÐ48 ñ¼!†­ïžïÒ´ë–NgWM»Žª*œþyüàö;ˆâ>þú¯þ’}øS\yåkøñïdá‚å|ö3_æ–ÝÊÀÜvöì­q饑Î6 6hÔ]zú9|h’wßøg¼é­¯áo¾†âÔ$é|C{‹\sÕÇéèÌqߟ§¯_¦Q¯ G&wüðžxúW]u «O:ž0° ìL&Çð`…/½ç lÛ±ò&.ºøLêµ1l»‚ª*$ ’ã4+DG>ƒ•J]3ñ$ßik˲ðzz»A„È K¤Iâ(FÄ@# *+Ì”JضMµZ%—ËET«Õ–¡•e‘Ïèeœ…”J3‰~¬bûɶŽ[Æ |<¯‰¡ëhšÄ€Ü…ï¤YÑñ›jÝ4hVìÞ½—À÷˜?o.¤Óèº$b¢@P/•˜œ9Hih˜°ZߩҘ,ÕÔššL©=M.‘¦«#EZÖ9°ŸÅËŽ!Ó™§n×éèÇH§[æT“UB9‰ÙÓÏå³?ù= ™c¬*׿ë9·7Ï­ßø;ö×èO¹drÖœu.¦ß úÉ“TpÏ}›ØöÔS„v…ãÏAnV™:¸(ŒèK™$ûú‘ AVÑÙv"Û¦éDQŒBˆ¦ëdÌD‚êä8r¡¨ ^ÒÑÕŽaH¾‚ˆ±RkÚ—j£8GÆ:ZÝÉ ø>Aã8.B((Šq€¬ ¢°õl{9P-¾ïS¯×™™™¡R© „ ‘HÐßßaÏ{gîs»Àår™r¹ŒïûÌŸ?˲ž×sÅqKºaff†ñññ£T¿n÷XeYtuu‘L&Ñuý¿}-Õj•ééišÍ&žçB´$q²Ù,ÙlÓ4_6ÉÔï ¢¼a­HàÕˆÒ}ì˜]—ÿ ·*dVa4FP™BÄÅÊ"f‰Õ qẕJÄÔ” Žùè/Rp’$H$² M["4t]FQfµˆ_:÷H+æÚ¶ýï¾\×%Š"”#“rš¦]ªª>oñ8ŽcšÍ&årùhŽ1þ|t]ÞŽ†!Õj•J¥r´cú¹ÉI!º®cY¦i’J¥H&“ÿãØì8ÓÓÓÔëuÇÁóZƧϭW[[¦iÎÞó³ZÆFQØ`Á@‚×_~&¥j•b)âðáNÕ=B dÛÑ•êGi*8.xzDG²Fg¦ˆœïdã¤ÇÃ÷Óm”hÏû´·‡dÛ"âX (Y% ˆzT«Ufª3tf:È Ì«ÿGbÕqFƒT*Eoo/==½XV‹Ð–¤Ö†¥ô„o‰Öø?´4G«U$q„'“_6ŽqÜ2­:x&&ZCØ–ÕúzÎHó%E¬:ަi¤ÓIÊå*ù|Ïûˆªe¶ï{x~€¦©¨šD¤ÒYrù4º¤Û.Aú8nƒ(n¢i-­Ìl6ƒnÈ· CY(’@WLU¦iÛÄž ›Èã8Š¢ „Àu›†aj¸nDzH’®i´··#Ër«h1š¦ÑhÔÐŽX„ !eUÑH§,<ÏÃ0L¢(dbbUS0 MS B Ûn`™IÚÒ=:0H{!AÓ­pÎ9¯à‘Gv±{Û0=ºù‹’{Üc“£\}Í¥\|þjL]P*ÒÑ‘¥PÈòø¦M<½ùIÖýâ>î]÷,[·ßÁæM›øÜç¾Æ²å]Ñ$ÅQÖýr•:<³eŒ;Ð?°]Ëz&™l†Øh6뚘òßþÖ],Z<—“N)°éÉÍ–Áɧœ¨<ñØ£§àÄŽ¥Q/ù6D*žÓ`rbŒå+WS+O£Å* 1¦ª0qxŒ§¶íàÂË/AN&iz6¶`¨&‚D"ÅòSNaû¯᱇×sʧ¡G„ fGÏl¾F–-_ŒªKøõ¡êa„&)Ø•)Ìv“F¥BìFœqú1Ü»n'ÿrϽ\wýå$Û:8xp˜(PéîïÆ4U‰4Š"¡ª QB ë t]ejbUÑI¥RˆD,Æmmm\sÍUÜý³{9ÿÂK¹çÞ_ò½ï›«ßðxà!òÙv†¹ýöïRªQw||ðQ®¿á G!iu1ùÉòæk_ËÅ—œFÓ#×Ö˶'§¸êõïæuלÌG?ùG¸N“8RñƒÖ½<þÑorÅ«Ïã'?½'Ÿ~ˆÝ{62^ …>ÐïWuÄø¾ƒ$µ´²,·>S’FR“J$‘e° BY EVèïéáÐà0㓤³)‚0DÓ tÝ |¦§gÈfÓT«5êµ&šÞzðƲE,¸^ŒÐTõBgŸÚÈêWP›ÁT¦iQ+W‘t•Ñb‘®®¢H"t|Ò‰$…L;÷ß·ŽâØ‹æÎc¾ÞÁ£k@+94KeFƇ©» ÒùSå)ºûºiïíbÞñKÈ:ÉärhÉ$öÑŸ/`ÏLc„1{†öböæXy,[öìÄ.˜èY$d6nÙÁ?úSn_÷UN¿ú-4?ó]fd§¦l>øµ¯3°|wÞ· §FB9Ȫ‘ ®}ë¹äÎç[ÿx?‹W¯äm×\Nqï:3IFŸy’ÊÐ(‘ðÔ~J±R¥­£D®Å'ÏÜ•+H'Ó Ë¸""T%BB¦) "¡Ðtm’™$±,ˆ}B‘„kÛȱL.“Ç0u„ ( ŽÛ V«a%L„ZΛšŽa$0’IšÕ2µZUUд—‡óf¹\fûöí<öØclÙ²EQX´h×^{-Ï{BEÓÓÓlÞ¼™M›6Q.—ùÓ?ýS.\ø¼’AP*•xôÑG¹ãŽ;ŽÄ;ù?%Dq£( sçÎå’K.aÉ’%tvvþÚ÷ÇñÑ"n×®]<ú裌ŒŒP*•¨ÕjÄqL¡Pà„N`õêÕ,X°€d29+ñ»¯ÕaŒf UJ ŠY­Èÿ9dm„¢Dƒ&J\%‡ÔÙ¥y¡Êø  ÑhP­Fø~«‹IQ^¼nUEáh‡ìäìß_el¬F"Q ›Õg/ÐKQ199Éàà CCC>|˜ÑÑQ¦§§ ‚˲H§Ód³YV®\ɪU«èìì<²ÙüÛkJ„aÈØØ?þ8O=õªªò®w½‹®®®ç%6†aH­VcÇŽlÞ¼™Ã‡S¯×©V«Ø¶‚ŽŽúúúèííå˜cŽaÉ’%žcBþ ÂÖó<†‡‡Ù°adllŒR©„‚l6ËòåË9餓X°`ù|~öfûýݾ82ú_Ç÷&¨×'|èÏôÐÕ¾[è³HãÙÊ!ö5†é±b:T5”034ºl8Ñ{–Œž ›ŸÏÜžãQT™ju/B$óÑ´ùÑâW!#+òц8I–f/Çÿ†a0gÎr¹º®‘ãLü·Ï©dúúZß+h6[µcOOÏÑIî— ±Z«Á“OB½‹Cw7ÇÌt!$Êå:¹\ Ç®!+>sæ  ë.ããÌ_ÐOz$ ÂsZ»—Qá‡aFE• Ãß1Œ–ÙUµZÂ\‰º¡#? !ß÷ BEQÈf[ïÁ¶TUF× 4]…8¢^¯P©´L|Òé ãùžçÓJ Scjbš9 34ò¹Ž4É8K{Þæü ¯ãÔ“—òÃ;¾L„CµV!Ì0S¤Ùœ¦Ñ¨ ð1ÍÝ|ücÇî½5î¸ãfd×_cc §È_\{)í…N¾öõ÷qó{¿ÈàÁ ‹ëÈ%霳‚ëÞp g¿â®yÓ5LŽÌp×Ú‡ùàG¾Ï>û'ds9¾ôåÛ¹ìÕ§ÑtaŠ{~º‰ã—&èÌgñ›:; øµã$“ivmÝÊ1'¯Á&Óž#ršõ:'¯^ƒa˜L‹ŠBAGh–Iqp˜¬j2wÁ<Üáˆ][·süI+Ñ¢Åc¬ýÙz&œvú‰1±§m¦§*(é49C&•HRcèà8]+y“G6ÞÈ?}³.>‰Þ® }} Ùýì^6<ü0’*X¹rFE’X¶ìXÊ¥i\×gº8Môôô"$™F½ ×F CÒÙ4¯xÅÙü|íO9ãŒsYûó¸õk_å/Þó>|ó_òÊ‹®à£ÿo~ëe<ùä“ O062͉'¼‚Àù‹›n¢£s1—_z1uw×÷Ùsx7çŸûgüÙ{/åÝï{=Ð2˜r×sèë›Ïõ7¼HŠX¾l®mú ÿðµoð­oÞÏ'n¹Ž?xëÛ)M ’LA‡8Í&ŠÒ"V[Ú¾ ËR‹l‘!™´ˆBPd•0 PUŽ|ïAbÛ.qc&®ãã¹>FÂ"ۖô,Â8"J1qƒR©D½^Çu]E¦Ñ¨£j ©TY‰‘•T2ÇxÑ¡½³§·ïä#ÿ _üÂ_Ò×ÝNЬâ6ldIBW5 Ì£XœÁqVŠîönœ†KJIs׺»îdÛ†g˜¢y¸È¢¹óP-™‹/¾ŒEkŽS†” JŒ'"ªžËh½A³6“mÃL¤=a1âT)=µ‘ÅœNÊéÂVqà‘L§9ãü Ha=×ÿÑûX»î—|áóŸç£7ý9“pú¹ÇrhÂ¥iCoɧÞ÷~±aã&Þóî¿¡oŽÅ©Îáþmóºë^Ã1çµ*šSG•b^ò*˜žÂ®Ô(Õjlß¶ƒÇ7läžµëèŸ?3¢½·‹ù‹’ééË€0†ØG DMÛ!F"ô#$E'©éH’JEDqDFÄQˆ¢è¨j€ÝôH&“¨š†$µ:ÝzR©‚™H!P±þ; ã#»«#<ôÐC¬]»–;w¢ë:“““\qÅô÷÷¿ ç­V«ìÙ³‡ 6P,yó›ßü¼ëEQD½^g÷îÝܳöš&íííôôô ( ¾ïÕ?REQ(—ËGäj~s‘U©TØ·oßÈ›ž Z«â:.Õj•r¹LEŒŽŽR¯×Éçóÿ£¤l/!¢Ê¯ã;cÈq„iô€’œ]”ÿ1 Ë "ÃhšNô,(Æìò¼ ˆc8ŽtÑaük¡ó‚Ÿ]‚LTEP­ *•˜ ˆŽŽªÎâ¥A¾ ñ裲sçNÆÆÆ(—ËxžwD~NG–eÂ0ddd„™™Ö¬YÃÀÀétú·îÄ ÃR©ÄÎ;Y¿~=†apÝu×=oï/ CÊå2ûöíãñÇgxx˜(ЍÕjGåËR©û÷ï'›Í244„ã8¬X±‚|>ÿŸÞ_·´K¥`ëÖ­lÚ´‰b±H£Ñ \.Óh4B022rD Ϙ%Váû|o›Ø¯@è KiLµ+#cètuߘ Y²éÄ¥SP% Ý€t @hô))2f+¿3†®;@AÇDQ“E§%Ïj«þÖñL"—Ë‘Ëåþwž¹\Kk5ŠZäc¹ q,¿¬ò×m™V=öX+ö¯ZÕÒ–}©æ)a ë-}GMõ1 ƒF£Ž¦ȲŒçÙ¡‡¡[(²IÓ®Cì¢i&Qì±déB†W¨ ¡§g5–ãy0oþù|Š™Ò ËK(ÏÔZf3aHCz(‘„¡¸A„ë!G`ÛöbTÇJ$ñ}—f³‰®kX–JÐô‘$éȘx¢•àÙv«WQâ8Äó\šMUÕÑ4¥eŽ%$<ßC7t1¶E!BŠiÔ›èfšj¹„i&)•\:»²|îs?âŒ3Nâ“·\O©´°‰B‰ý£‡H*º"'d|¿Î;ÿø3<óL™ùóÓüèGŸdé±Çrÿýaè÷Þ÷Uš,9®ßorþù¯æs_GÖ;Ñt“(2I¤ÓÜò¡ðÄ“|àæóØ¿÷0–™ãë·Þ‰Ü·î!Üð(í‚kßö*9b׎]üêÛ¹ãΠ‹–°tà Š¥zP"…Ÿÿd-ã#£¬>q%òL•j¹ÄÀœ¹aLm¦„d즃™HШ۔⠉L–Àõ‘-ƒãO>=Û6³ãY¼âî¼ýAtI#ô8áø¥„µb« ]ÓQu…Z¹D"—Äk„˜²F:¥Ñ7^º‚oݶ•OæùÉßï–9ùÔÓ¨ÕçS©•H$’-ƒ*ÛfïÞ½$-‹\.‡iX†ÈŠA­^C6¬Vçj½eþ]Ý\ùÚ×p׿ÜÃçÃ#lâŽÛoãoþú¯¹àÂWc˜ «¯¹òR>|ó×™˜¨ ›?øAL+ŧþêƒLN‘+ôóýïÝÍ-Ÿ¸â5¼ý†×ÒlØ„a@ùVˆ"rŒ&–"Þð¦7Ò×½_þb=_úûoQ(¸ýö[X¸t€é©'©×ËÌ›ÛE{{/•Ò4D²ADÄqH„HB KrK9–PUEÑiÚ TI ê*®ã •J…ày>¾ (>¦•BVž|b#==Ý$ TMƶ]|¿¥'E!Õj|>ªhÔ›%¤2zŽT*C:[ÀЇٱ-¤Q *õ™ZÂÀ’Uƒ“ä ÌKwáïûÀ§˜;)ª395͆'« OUyík_‰¥©h æÓ³j%BÇ/!œ×Ee|ÙqñCŸX–A’1…‚+kÔS-Q`ÅÂ>š“,vWsèÐ*Í&Ýýs¨Ø ñ ölÚÈî¸Û×ý„Ó^yaΤìUȸuLO²b„yzŒX:€Ý´iÓ .<÷,¼ ¦rh„©‡(<Ìà›_ÿ4m©N&Aß)«X¸t1zÎ"Œ\58òñ‚I’i¸.Q¬ §e$I1a‘0-dI¥Z­`ÛBÈHR«àÂYR‘¥$2‚ßí±¯çºgÞõ‚;E!•JÑ××G&“Á4Í$ùhé}ˤ’)8ù䓹ø¢‹I$Ôj5<Ï;ú©TŠyóæµžc¿æµ„aÈÌÌ [¶lá;ßùfƒB{5kÖÐÝÝMìÚµ‹û￟gžy†‰‰ Ö¬YCGGÇó6ò8‹žp¨I 4#’ƒ¤Î«ÿ[èzUžõ)âÊAHÍA¤zfæy–š¤Ó½d2 Ë*‰DKëM}Ñ›„cE¢££Àܹ92™Ù.å—R¬fË–-ŒŒŒL&Yµj .$—ËQ¯×dóæÍ¬_¿žM›6qÍ5×pÁ°téÒßZ/WˆÖHl&“a``€D"qtšñùÀs$ªïûd2òù<}}}H’ttótbb‚ÁÁA¶lÙ˜˜˜Àu]Î9ç’Éä¯=ÞÓO?ÍÝwßͶmÛèîîfåÊ•sÌ1H’ÄÁƒÙ²e Ï<ó ¥R‰þþ~V¬Xqtƒc¿/ˆ‰"Ÿfsfu™ÐÀ0{QS AÏ"b¹Å@=wo)V0I„è²òï§ |¦÷x“xé4ŠÕ%w‘N- ™XFGÔû¨”ž&ÈV?~²»Õ )­ZvÿoձšÉ@©³m› ¤¯¯­5éú;ݵ-²øÐ!Á“O '´ôU{{ÿÝ-þÒʪÕ*mmm­®˜Z•à C|ßŲ,TU¥Ùl†¢¢ë&^QcÛ-sž­Oo$"Êåõªƒa:‘ŒeYd²9êµ&ªª *:’@Ó4 dˆ@ÄèºA ECˆ–Ϊ$ÉGÉTIH8^Ï÷MI’Qd]× üI~NS•£º>Š"¡i² ÛF‹M,+ŠJFDQKB ŠQR«7På"ºš$"E&ÝÆÍøǹù#708´¾ ÙŒAäùt´%èÌÔfPthËæ¸ü²5,Y<͙缂EÇCìØ±‡á‘:½Ì™ßËØØ(¶ó·uOm™àÇÿüQò…}ó–ðͯý=?øá¯øÊW>AO߬”Á%¯z#CÃcÀ/ÞJ: ?úç1«ÊÆ IDAToî\„l³ví/X²¨Àªc—à4GÈ¥Ó Þ*Ë$Ú28õ€s.¼˜§7l`ôàaÆïgÅšU}ý8ãؾK®G²VŠl"Ë䨷ÿô§¼âô3X|ìR¦ÃÂù¸]Y¾û÷_¥ÑEÄ^D>¯Òß×…W/Õr<›ÞÎ<µ‰ ê36ý½h²O£1Ä òÖm|/m*ò¹ÏÝÊß}#ÕÒɤE(|j•¹|]‹™Ÿ`ld ÇñȤÓxŽK:$Yœ0ÂIA’5MÆu}<§Á;ÞöVî¾û^z» ÌŸ·˜nx7ùv“¯|õoùþm?äÖ[¿ƒ,ÆG60>¶“lNã/þìFÆÇ¦éXÅW?û>ý7·ñå¯_ÍeW¾–ÉáC¸® -ÓN³)ÑlÚ(Ê a¤IuÓÙ“æöÛïâÝïþG>ðçWqÍ_ëO1>¶B!aÈÔ+5ä‚JÄH*ÈŠ‚"d|ßÅó\EinaD†„¡ÔJå!Z]Ʀ $ E–i.¦™@ךf‘H¦°› V¯^ƒ­Ýï–žq|DŸX IrK¿6Ž ‚–fg.Õ†Óp(á9Ýó#(×ÐdÚ”$…\BXS6ÎÞ~±áqª¾Ë?¢q“›Þÿ^ó–5ìùkïßMç¡=¼õí×qÛ÷n㞯ßÊÉ«—S“ÎɸOG>‡Ñá BdIÆ2 4ËÄ­ÔH§²´[ „°}Û6D,xÕRYQ°2)œ ¤ª |n»k?v,—œ²œ‹Ï]ƒ§V9ïòÓéýÆ<µ†w~èÏùùýóæ7žÂ—?ÿenþ“·óúËÏ !Õ铦GÉv¨ —ü©K‘zSÔ§|û߆ âÿ»î,Ã"×Y 00.‰lw|”½Û·2¸ÿ»ö3žZÿ0ý}ݬ>~9jG;&F­Ž=ôTŒ$^„1ªªµ®k#I ‰D ÇqƒùÈXªªdÛ’¨FŒçÕ±]—ßeºÌu]¶lÙ®]»’ ½ÐÞÒ þ-Ђߴ[þoùÜŽð‰'žH¡PÀó¼ß8zÿÜ1ÿãßþíyþ»×û\Gêœ9¬Y³†åË—“N§q]÷¨a¢UUI$X–õkã8;wîdÆ ²déÎ?ÿ|/^L:&Žã£º´ëÖ­ãðáÃlݺ•öövæÍ›÷¼’³xAèÀAÁÅDG‘RÅäEµW™@IÎá0ƒN`ÄíÌn-¼P¤™m—°í˜8. I /¦Ô£,C*ɤ@’"ªÕ*SSMR©,‰Dzö½ Ë2sæÌáÌ3Ï$ŽcR©ííítvv’L&q‡Å‹ÓÝÝÍ}÷ÝÇ–-[xâ‰'èë룯¯ï7«¿I¯ü׿««‹ÓN;4M#“ÉüÚ¸þo÷ÿ›b½¢(ttt°jÕ*ºººÐ4¶¶¶•§*• ¤^¯sèÐ!vïÞͲeË8ãŒ3þÓñ|ßgÛ¶m¬_¿ž½{÷’H$8ÿüóY²d ]]]ȲÌÀÀ¹\Žb±È¡C‡Ø¹s'{öì¡¿¿Óœ•ù}!U}¿J£q€(ª`&ò(ä´Nв ÿ稗12ôÄÝø¡Cѧ`°ëèñÂУYÚ×jþH-B$ç!$IÒ‘$ˆ1n¤0DkT©ÔÆ®ÒÔt§Ñ©wÎ^–ÿG$Èç[D#@¹¬1o^tÚú&U[Ózå²ÇáÃ:##‰tuµÞk2ùâIý¯‰Õçôlt]G× fffhkËãyî‘Ή8†À÷Q•ÖhC©Ö$B"×%Ža÷îAjÕ]DQÜ ,BFˆI²8xp×qQlgK²„¦š8qklÒtCEÓ-dIC‘A×5Y:"´©DDD­ÚÀГGw}ß'ˆ|TU9Ò©ú©$ãyfMSÿöÎ;L®ƒ:û¿Ûï>³3;[µ«¶ê¶dË–»eãˆI‡@€bšI0¡äûJJHõ#Á”Ä`Œ‰ .ÈVµú®ºVÛgvwêíåûcv7VŒä#XæÓÑ3ôh÷™rçÞ{ÎyÏ{Þ—0òÅÿH¢Fƒ(ŠP5ITPuuÎq͡ҰX¼øb¾õÍ»ùê×vó…/½•»dÓ¦5Tg')fûð£&®k# y$ שצyã[nã_¿õ =ô—]þ’éa13ë7^Ãâ%9: ŒŽŽr|xœøÜK¹hóy4«ïxó[¹ÿÁGy矾‚«ž{§Žð®×½‹¡#e>ðWocÇö]”fñöw¼’ukÏcd¸Äôô1öí}Œ[oýäÀB°=NOœ¦\)³jÍ*¬ÀÇó=rí¶\w=y§Òdïc;YäAÿÆ ñË3˜µšªãš6‘ ÐÑÙÅ›."]Ìa:M/ÄèZÄ_ûù\‘êt³æ³xICP©7LAFQ$BÏ¥2S%—)ì^DÚxA# ñÁwðæ7}Š¿ùÄ·é+¶sË‹®dlì0±¤NGgqÎh¦%8¿|ùò–™Õjƒéò,(¾,SlÏ“JÅQõ`á\ÉrLNŽóÜë®æÛwþ+G â8£¼ç½·sâä1^üÂß%_Âßæ<ôðI29ŸþÍûp›…¶~>÷Ñ/ðÞ÷~•Ï}ù5\»e'?A*• r,fˆ"Çp= U1ˆåRØvÄÇ>ú÷Üùí{ùì?¼‘ç=ïJ¥“ŒeåÊ帶¡'I“㣨šÚºž$!‚0æ ¢ uî6šdÓ)<߯6¢9뙦 ÊF’ Œ(ÏTÕ8¶`è*¶c-€;ÉdEQ¨×« b÷Ífß÷(¶w`[ BW"ŸjC dJårq#{ŽðÂ>78ñøœ8°ŸÃûà»m=l¼êjný½'&C¶üö-Ø®Kß’E$s‡QciʳMbñ,³Ó>²¨!„¶i£)*JI‘æø˜‘éÑ“n£16I1cÅÒV, p|$5F:݆¬ª‚Œí¹øRkõO5"^üükØsߣte|¶Ü¼Îö¯{ý|ê#ÿÎ]ß’ðï[wqüÐ6ç²tweÀH1=yCð'F92¸Ÿ«n¹‰z­Bʸ`Óf =F,Ÿ§4Y"J`Ù6º¤ª>bwš¾üFz6‚Áàž=ì}ü§Û¹ƒ¾žz{{Èvu‘^¹$Ǭ¢¥snsC,EQ$…tZŸ3àóæ\8%I"ðƒ9s¾gïªã¼©Ó¶íÛfQï"Òé4G}ÚUø§K¸abÛ6–e-˜8ͳD$Ijik+Ê\^ÓP…d2ÉÒ¥KéèèÀ÷ý§4YA`Û6¦ibšæ‚ÎѼé†ëºg¬ðëºN2™ü™+‹ó£ƒ•+VÒÞÞ¾ðz?  }ºæmfffa%P’$Ö®YËu×]G>Ÿ_8$ Nœ8Á‘#GØ»w/‹-ZhöÎÅÙ\<a )´IHD)ͼiè¹ø¥ËY ‡Œ…„F8w<ÏÓ_eø¾K­6Kµ¹¹cÿëm&UµeÞ!ÕjƒÉÉYŠEõ°z–„¢( ÐÝݽ°•"ŠâB®‹¢ˆåË—³téR¦¦¦Ø·o‡æðáÃ\rÉ%gäeÏórð|¾o­íYn‘l ÃXØ|E‘l6ËŠ+èééY0‹„;ÔqšÍ&–e¡i-߆ùÿ›7œ¯#t]om€=‰’­( Åb‘B¡ÀúõëŸ6—OLLpðàA&'')—Ë”J¥§ÔqaØìܹ“mÛ¶aÛ6]t7Þx# ŸµP(L&Ù»w/ÇŽãØ±c8p€B¡ð?búy.ζz!$,g Ó‰b»ˆ‚J¦-F"^aºlS©TI$RÌÎÔÐb¶ÕÄO¨j‚±ñ2¶ãÑl4ð=CWH¥b­•g4U% TMA[͆,‰8Žƒ D¨º†ç¹4-ÃÐH$“4ëöB±„D-6žm[X¦…ç{(Jœ(Ïõ0t•t&¦8^ˆiÛ¨šŽªi„‘癨¢Böñ»Q”&ŸÿÜ;Ù|É5<÷¦‹¥*QèqòøqŠù^yh?+Vtó¢_Ž„Oij’ñò8›®¾œÙ™¶]#Ë€®ï³üüõ¬8o-?úηùÉ}âøÐ¿t²#ðÛÅtDQ`àè*³ÓÓ¤c ß{?GŽç寽ƒ·¾í3¸ô÷-&¦)ˆ¡ˆ®¨$Û T¬c#§£Lo?~£A(:èi…"×\s5ön½÷S¼ûŽÏ36r˜×¼þüÈÅó[.„‚(âº.š¢!I"’¨²xÙr$I¦4=CÃó™­Ö)•ËD‘C:­£*-Ý—B[Q0xéワuk›Ë·,fxø0}}KüˆÕ\qÅÅÜù½û8ýb‚È%•nãý¾ö¥ûøÆ¿ü ×^£#§I%:°Ì)b1߯!†ž"¦¶³û‰­¼ëÝ_gÅê_ýÇ¿¡­]etr/aàÐÞ‘Ãs p5œ¦(xds)ª³3ˆøAbHyˆˆ„¾ï{ø~€¬hÄtײB—ÀudEÑ$AP%•úÌ,'OŽ€ÐÒï4.†®¡êa$àùz\'Œœ¡§³ƒL:‡m›D®OLV‘äzÇyãÝÎ’%«¹ê¢ÍŸ'“É,HügVì¼VëÎ;)—Ë\tÑE\}õÕ¤Óé3À‘ù¡ñ¼6m¥R¡T*-Áçâ7;üÀ¤^?„뎓JÑ´.D±èÀÓƒh1bd…,Ç¢c”£2‰¹?qˆx„ÓGЉT/±DÂSêAÖhdóTí4Öl@¼14{²"Äòç¾ gä>Û0Æã0:ÑhX 'X½:Mww×ÿ³Võ3ŽãÐh4Ð4ˆÅÒ «ìß_ Ë–ÁÙ®r&Ç4ßuH§³ ‰Ì¡Þ4‰'S4š&fӤОÃõ*õiEF•`zfYŽ˜-KLMO‘ˆ'I%“±–m¶Ö-;:Ù»o/ñd? ˜ŸÄ DÑ¥2=MWG'1]CT5¨Iàƒ¢©DB„éVQTÕQô–¹¨È„~ˆ¢Ø®‡*ˆˆJkBYoÖH$’hF‚F£NˆH<C–DRI× i4]UT#‹ø”ku’q I©Û3$bq<»€ -ãýï» j¼â×áú: E\WBV´uô0])á¹餌y¤2„ažt›‡eøA„eÕP¥8nàÛßz;ßùö÷°™%‹×ò’—¼„|>Aùô/zÁ;0›>_úâ\qÍuœ<|;þôKÜðܼç=·Ó³¨“‘ѽH¢‚ T*UÒé4µúW\z/~þHDœžÇV®;Ÿf­A&•£ÙlàùÇÇÆÉ¦Òd{Ú!¸ùßÎ}_ÿÛ~¼«Ü`ýå#y6†g“I§ðÙ™*ÉB‘)+ÄsmýÑý\ÿŠ`Eú@‰{zR² ÿÄi<ÛCw›„^S£'¹òª-ØÕô¤†F­î‰å™*òš—ÞŒl7ùÛO~‘OýÝ}<º÷ üÐÿbQo;Ò8’à’J¥Ð5…fÃ$ÂAI&_È“t|Â("àôÈQxŒd"O>³ ]o§«£—WþþËyõk7ñú7üß¾ón~𽻄€t¾í{@”aðH‰„±’;nÿ3¾óÍ|í«ïaýú^ls Cw°ÍºžDˆZSðF#Ä0DFÆGxý›>Á­·^Ê[o»ry«6K:›CQfgg©5ê´ç (¢Šïø¸ ‹˜C’Àµl\Ï#•NàXM\ÏÅÀw<×ÇW!¡K¨šŒm€D{¡‡ér•(20­Ó1ð$ˆD†Oœ$™Hd¤´‚"«X‘@=”™)×H&3tÄSÄT9‚˜ £àQ«Ô°+iü×¼í &âô$džر¯ÉýþW^yK—ܲU+‰±]›Óãe–za&Å”áÉ 4MãÒ+®äãÿ{ÆG'9~ü==:z tWzøé#'0C…YGBõt;•“cÜzËëyÁÚ^õ–!ÄpëìÜó ‹­byW'Ó|å³ßç³SŸã9›WpþåkÙpÉEH¾„çÌ’P=’1‡X,…ï&)ö¤±\ Q‘#ÛkÒ¬4ÐtMS‘ÂIQ" Ëw¨ûMªšC.‘#ŸÎ²¸óf«*ö©N òð=?æ‡ÿøÏ¼àùÏgÙ¦ ½HŠ„?[E0ü DÐUlÇERU9Þ’NQT|·Šçûg0&ž-1Ï.Ý¿?<ð¾ï³|ùrV­ZE£Ù •N¡L)¿TÒdëÖ­<¾íq¦ËÓH’„ïû‚@†”¦J4MbFlUbYÃÃÃìÞ½›R©DµZ=£Áñ}Ÿééi†††xä‘GÖöëõ:a.B‰‚ÈñãÇ)—ˤÓiÖ­]GOOÏŒ ¸®ËÐÐ÷Üs ‹-è‚g³Yºººèèè ‘Hå9MϤâÎ2•¨*…üRÚ<ËDòóÈœVŸ‰Å–UGœ< ³³"¢¨!Ë ÏÖÛB8ŽÃì¬ÂéÓããQ«VÁ¢EÏ„–û/ ¬&’q<×Çu]Em­Jˆ…B¾5$4#F½^GÕâž‹Hë‹ko/’LŒN²ñ‚^*Õ:’܃$ùX¦M2ÇuÂHA¢¿o ““Ç1­&mù<©dš™r•@¬OµÌw¼¦sÉ5ð\×#Œ"Â0@ BdQX0© ÃA™jµŽ®ëH’2çÂìã{!S%b‰ ¢k9jM׃öÂRDѧ\&•("‰2=]køÚ—¾ÁÎOðÕþ0Šîؽ½}”J%DQÆvDY§#ßÅØð4¢ì¢éŠ* MÓbfz†}{÷Ñ–W‘B…Õ+»YýÞ7c™:ù|¡åm¹|äC᲋Wñº×½œU61|xQ„/ù-\zéùa“cG¡Ç¸®…<×|…KàYhRËÒf|ì¥R‰þ¥‹I¥’-9YÂ0bTf* DªŒ¸N€úlùí3yú4[¼'ŽpÑe›èXÞb®6k¤’šåYVôôóå|”MW^F×êåÔ*t­YJ&ù(žëpòáGéë20t VáÔá¬Y}ÇžÂó\V\¼ j QаšM²ñ’Øä¶Ûþßkð©O“mÛÇyå«ÞÉßðÛÜxÝåtv/¢4zYÐ Çwq‹(]2ð|UéîΓÍ_D:•gzÒE‹ùÀÿþ4'OÕ¹íí—2|â4W]q%/þíßbÇžýüÉ»?Ä{ÞÿFÞÿþ/°zåüí'¿Á¿|óq¾üÅ·qÉå¨WF(•'è_º”é²Oà‡(ªŽ,ÊÄã233UþâãÃõfn|Á‹¨Nb’b „"Žø"f³AôAð]"Óq¢–Îf£Ù$®è†A„ˆ˜ð¼×óñüÐ ‘À‡ÙÙ*n‚¨b9ªã Çt–ô÷·ÌØ¢Ñp<—È´U™M7hTêô÷öa—Ë(ˆ(”F')ô÷òÐã§pCŸþän8M"ÑZ¢¼á¦ßâŠßz>v­NI'–L3ñ™P:tŠôÄ$u«NJkÃrFÙ±ýa^û/çÑ'öðÄöA·ÉîÁ1n¨N²tõy$õ†g¸<…¬ ¨ÙjºÈÔä0‘¢(2‚ ’I%ˆÅŒ–DEÓŒ¹Ä& >¾,b$: R˜j4Ñ%Ÿ¸j.ÇŠ-ÏeÙòåzì1FŽeèÐÒíºV® ¸f%ÉD ·\B#Òmmx¶…U¯£&“X³e’‰8’'>ëV;æ]í'''4Ô.ºè"6nÜH±X¤y¢ùK7¦i²mû6{ü1FGF)‹¬Y³†l6‹aH’ÄÈÈS¥©3‘ù†Êu]Çy käÉM^³Ùdß¾}ˆ¢È%—\Âe—]F,Ã0 Êå2÷Ýwû÷ïo²žO¡P8X×Y{20:ß0jšÆâŋټy3_|1Ë–-[]Ÿ Fqààêõú+GUUêõúë”¶m/0aæuß²Ùì³rRýÿaÇ4çdÓUýU 9`´ŠÐl­N¡´-BÏéþ*Ãv T0ÍˆŽŽLF|Fš8Ql= ‰‰–‡ªB&sX=›Ö§« Çarr’©©)ù|žl6»\Ú¶ÍÞ½{¹÷Þ{™˜˜ ««‹ 6Ïççú<‰jµÊää$ñxü)õQ†ø¾¿À€}rΟÿ™iši¯íŒ EMQ«O=7ÀüõçÀ|z{aÛ6z]%Ÿï “QæÊg÷¼ Ÿºíâ8ͦÀÐÈîÝ•J P]¾ŠE8Û[Ùqˆ¢(@’[ ²×õ¨V«ñ$ñxœfÃÃsƒV#éƒH€,)´zX±2ÃÈé—nN255C(²†,É´åbL—`zj†DR'ð\’i IDAT\+ ‘I "Q«šÈ¢Šë›(’‚ª¨Øž ‘€,k8®Gà - 5’„˜êZÞ‚ÖmÛˆb˨Ê0 šÍ&¦i¢ëz+‘F‚¤So8|ëλ¸âêç±ní&Q¦^7‰¾Þ͈b’ÈWþá+ÜþÎäSŸ~5ÅŽõzQl5Ëš¦£©-6’ç…LOÏ¢ë õf ? ÉÈŠ®‘L¨”J{ö憯"r¡Ù¬àú.ºªR.—禣ðêßgõÚµX ‹£vÑÑÑÅÈÈÙlšJµ†¦„d²š–ƒ ˆ†J*Y$ <œÐCˆÌfÀwY¶t1¹|žÙÙidY"ðA’[+-µjƒ?d"âò^nêý]Ž:Èö}ûÙshˆç^#Éöœñ ÚòN¡˜A ã„Ô¬ï~×GxßûÞÍï¾ôåìØ¶/|þN Eç‡?ú4K;=} Mhkë 6Ó ‘Ì2==Mh»qŸ<ôÿðÙ¯ð‘}œŽö.jS§™™)OÄP"U‰c貤†.‚ ¢ ’L¥q=Ë5‘£¹,!)2¡áGAJ& q£X2Iˆˆ¬ëEØ–¢¨Äc:¢§GÇ™­Õˆ DI¶,bªFBÓ‰f«N€‹#:.~Ããáÿ„ï~o’,PuêüÞ¾«¡³ã%oa¼lB 0rê錎¤eHe 4,‡öÎ{÷îgp¨Ì{dôôrÇ»Þ@6©sß¿ßKef‚ÙÙ1QdåªÕ´å²$“ Í&££ÃˆR€ëÚtvp=‹‘ÑQ†‡ùê¿}‡—]ÌõW_ÅÐC:ú˜®¹üôÑÇy¾{׃®253K¥)Ó˜çöÛ?Îko¹†«:û±ü€HÍ316E eùì—?ƒ;rÍ Wòþ—¾“µËc…ÄÛLŽ—Iäb4ÊuÆgš—®]edø&M’©‘,b[fÓÆ4mdIƶ]4]ké¹1MDr|ê354#ALÓQTÀ iNãx6Ë7?‡•ê¥ãNíÞËO¿w/î=÷³æ¢Ú(æó-#ä©)ŸÙÙ–e`êÏt8{Âó Ùl=‚‚ Ķ›ÌÎzŒéìÜ©14$Ðß›6µX¹ú³ ÿ•=×CÓtt½%|lY’¢R¯×PÃ0ðý`NCIDÕ–£¹  †cQoû÷ òÇoîàĉ㸮"Ɉt´·0>6ƪÕËqD…x,Eèy4&ÙT–„Þšx‡aˆ"*„x®Oè…¸¡K$ŠD~„Õ Ð4QbÁ¨j~õÃó<šÍ&’$‘H$ÐuF£AÃöˆë ,Óá«_ÛÍ¿¼›nÜBÿ’•ôt÷xåÒ‡ ñƒ»ï¥Rø‹¿|×ßx5S¥“t÷©×kT«5r™ÕZ BE ¸a`9-¡`ϳ±ßdɉD4DY@ÓØÎ4ÙBÓSer¹ 33³ ,ãäñ£¤Ó1¶›´µe)väñ¼&^ Šù|¾5uL«" ŽÍty–\.G*c¶<…ëÚ¤ yÆÆÇ±l›¾ÅK[Ç4ˆÐ™(Ûµ$!¼€›7ѹd)?ø¼ÿ!®¼üRôlž©½{(ØÃ‹~é8«Q1›¤³â:jŒåË–søñ£½ûû˜¦Åú‹. dú­ Ñ¬áZa†n é2®c¡i"ñ®4ŸØÍË^ñ[\sý üõ_ÿßýöc;Ö@Œ °h1õÒ²¦aš-QyUÓ1ˆp£:ކ:ž )yÒí^ùû7ðš×ÝÂÊÕK©T*D¡I¶gñGŸä÷_õ[Üxó•T*& ½ˆe¹|êï``éZ&'‡èêMã[•jYUq«ÉdM×¹ûî»ùáïå_þ埩VÄ …™ÙITMDÓ"ÂP&|â± A ø.ª¢Òtl$5$ˆ4L BYU"0Añ‚QRƒˆP ¿a"†MÓ¦T*Ñ–/’É&‰ð=Óvè[µ„ØtM‘ÀJCáÀ®'ˆUMz7\H4]áÞo}—í¶ïÉ㊑`ÑÒ ¨{"ÝK–°dm†““# ¹,êï¥Z©!‰ ŠYÚˆt6Ë—ÿÏW¸èÂ~ºº5‚Àeíºulºp×oÙÌØØ(é¶,¦ÅñcÇikkãøÑcÌḬ̂~íj±8ÏÁ²,TE$›K³êy7²æÊK966Æ÷ô W­>ÜýSL«Áþé['•ÏIð_„×¼é6D±Áªõm¼ñŸã+%V]|!;¦¦YÑ%JœûÞÊGnÿß|ã›ÿÆïù!íi -òê7½†ñÒ$¼g+·¿êw“„†H…B€")$©93±Öª¹(H(І ÈH¢„ëøx^€¨®GV6uIOà!¦cK$QeO†@–ˆ„ueç­a ñbNÜ÷O<´•{·fós¯&uáyhš@i¦D,#°mºAീègM1E4›MNœ8Á<€i™\tÑEœwÞy‹Å…{¶c; ÷ð_$‚ `vf–À(‹,^¼˜žžÒéô ØÝÝM «÷Áœ1Ü/’$±bÅ ®¿þzÎ?ÿ|r¹²ÜºÇ§R):;;) ìÞµ›©©)lû?¾MÓèíí媫¯"k5lmmmxžG¹\æÀìÝ»—#GŽP©TÈår‚ÀêÕ«˜'®ëR*•¦R©à:.wß}÷Ó2ešÍ&õzx<¾`àñlo¶|,ëIxc’ÜZ’åßFZà!xФ"É:Â9 üWxóimÂ9ðÿĉ‹¢D¤Óé´@¥=c3x<¢X išø"š&ð4fòçâ,« *• ƒƒƒÜ{lÑßßÏ•W^É\@:þCOݶm:::X´h===äóydY^È—ó2@óú£¿Ìû$‰¾¾>®½öZ6nܸ £Úò‘YµjƒƒƒìÞ½›£GbšæSä æõ\}ôQ8ÀÔÔÔ0,Š"ëÖ­cùòå,^¼˜l6{ÆÍ<À<>>ŽišLOOóÐC±mÛ¶§Ô,žç-üN:~Š~û¹ø Œ0 òM\ÁÆÕeäd5ÞÙ"ý7"&ÅX–XFNžåxp˜‘ê0“õC$I ¯JÓ£Q¯1Æ3Ò J¤âä´ýé~Úbm¨¢Š %H "•Ê^LóºžC’ÎišÿzÕV.lý]­zŒOÓߟ!“I•¬UË‚™‡ÉI¨×çNõ0bfƦR¨ÕŒŽêè:¬] ›7ܽÄÙ¬& dYAÓtlÇŶm4A$‹‘J¥‰‰jµ†ïGˆ¢ƒoÛˆ’’„e9hrƒÞEí|ïûñ}‡©©Q*•NTQÁP Ð–¢»+ËÔä$.XCµê1;[A• ›ÎL&AE ððý¨„ á:.±x’( Ëwñ7=Öb&Í'”yGèT*…ã88Ž3·*! Ó´º»—𑼉ú§ûùÊWî£Z¿UÛoM„`eoŒ~ì•ÜúÊ39~œB!‡Ù¬£i*šª133Ë¡CC-ã•ÐEÒ4Ìf–ã¤n(øšJ*£Q7‘¦UG–EBJãcºº©–K(Š€ã˜$â:Qä¡ÈàºMÒ¹6|JÓ3¤ÓI™Ùš¢ JÈ’Ðb,…ÇÈéar¹,éd’Á¡A\×å‚ÏabrE3ÐãiT%†íxø¢‹a´Øw‰lšj­¤Ç¸ù…·0~ü$û·ï¦·£ÀÃwßÅÕ—_Š˜MRž.!µÅðB‰¥‹úP%¨WkÐV Õ*¾ùÙO³fõÔ®>B_¡išHŠ‚ªHÔà96öÜ*‹c™ ô3qr‡øÚ×±óñǸí¯'™icêô>‚(ª¢¢ë‘/F>!5L;Ä 4Õ@3 |úÃG<¿óÒ«™žž" # ùNþîãää©AþäÏn#®%ùÆ7À·¾~'B§¯·×oÍŰª”!fÈD„˜^“”ç‹_üõZøCĒɹZ€@ˆë™¸žŒeGd³Hbœ™iM“ætÄŒˆTLF’d"ABTTÇÂ]RÉdkÐ4‰ÂQRˆ„A„je–Z³A*“ARŒ¸…h Qð|‡(‘ĈD*† Ä4·^G erŠŽ.©œ·b¢í1øÀC<þÀ Ÿ§o]7×½äZ&FŠ|ÿÅo呟Npý Ö¡dRÄÛž8¼Jí$NUD‰:yè'Oðùú/{éúû{ùÞwwðõoüϽþùŒz³4½€00¹è9çãFF,A¡P ß–ãÞ{îåòË7sÅ—ÑlÖ˜™õ©Ugp‹±Ó£Äµ4¹%K(MÏ’ËwÑÝ;À¦Í×°cçcüàžû)®\†¬)¼åÏç{ß}„—Ýú&þêƒoçû^õ’ñÑ×–»ïÝÃÐ?=†/þ#+®<Ÿþþ>nÚx ïþ³71:6ÆÞí{Ù¶kùðçù›Oþ9ÇvqÇû?ÃM×.åö;^‰%JJD¡H ¨ªA"® É"®ã‹Åñ<‡0€(’|U’u׃-DŽ"IÄEDJ&A±]›(ñm1Å¿ób_| §vìaû=’Ù¹—å_HaÃJH(yD¾‹(Ï¡MÏ’°,‹#GްuëVvíÚÅÊU+¹tó¥ôõõ¡ª*®ëb™år³iÒ–kû…žWQúúû¨×ëœ>ÍîÝ»Ñ4¾¾>òù<ÉdrÁÐéÉ Ð_XovÒé4]]]$“É3&š¦‘/äéèèZ¦WÕj•|>$Id2Ö­[G{±UQ†|abY6l`×®]Üu×]>|˜x€B¡ÀÀÀÀ‚VlµZ]ЀíììdùÀr–,^‚agè©A@yºÌÐÐ#§GPU•ÞÞ^:::žÂŠyVôá|£ ³³pòd„ë27t…dòyL ãìvý¹ÀŸ5hM4rˆZ²¤q.~… ǹ•Äÿ‰+hâºå²F¹¬¶&ÏPÌKÔªccÍfĹUÔ³?*• »víZÔ)‹\|ñÅlܸqAòZä™|>O[[ÃÃÃìÛ·x<ÎÒ¥Kikk#•J¡iš¦ý·‰¢(’L&éìì$“Éœ̪ªJ6›]`ÐÖëu*• ííí-Ù¼¹$‰ÞÞ^6oÞLWW333‚@¹\fjjŠÉÉI¶oßÞòŒÐuúûûQU• h6›Ôj5‚  §§‡µk×ÒÙÙI2™<£fE‘ññq>L£Ñ@×uŠÅ"½½½gõ uþ#üçòkþíž#ÛþœpkÍ t@Iu¡h™¹[ÜïÀ ¨’JVÏÒ—êB®@N¨£§žƒ¢öÒ0]šá$‰X‚Œž!¥0ƒ˜#«gÑDíIç¥:·=eE³D‘ $ùE% ÎůÌ“!H§5âñE?+Ùª¶ CCðøã°?Œµ6OâqZ„¢RÈd ¿Ö¯oI<[,Fdq°², ×õ‚€ H&Sxžå˜(Š‚¦*¡€†ˆ¢€¬¶´|n¸éZ¾{×ÝŒŽ ã 1ÀvâFI#f0[)‹¤RIé$¢*㲤`Y©œ¤JBà‡È¢@ÌPQ”Ð4pDPuæØ­óI XpFœgÚÎ¯Š Ê¨rŒñ‰IÖ­;Ÿ÷¾-¯~Í•YAT9røõFK·nË5—³fU§Ž‘HÊØVMo¹­·Š<úÈ6Ž9ÁË_ÚÁØøilߥ˜Ï31åâ»VXERc¤Si:»º8tàcÓhš@Â0е’Ó““Da‹E5;S~’»³L¹<…ªJH’Œב« žçÒ¨×ð=5“!ŒD"ßcjºADWwº¢!"V³ BD.›AÓc>r#‘ ¦·ôMÇA’5²¹ÕÊ(B®çø­æµQ3éèï§cåÿö‘cÄ4rýÝ †ŠN³iãú×_y% 㯘Ÿ?¢Ùlпj)±lœé¡Ab]‹tQð]Ÿ¸¡„!¡¢K*¾ë‹%)O•Ð º¢36rš-[®á³Ÿý17Þxž"D1AA”|AÄ6mLÓ"›Ê‹é¸®€kK<þÄã|ð/¿ÂCÛ?Œ¢ÂìlUN±g÷>þîï¿ÏßýÝý+ùÖ×þ…ÿõþò¾÷¿Oâ3 î?ÊÀÒ6LgId%‘¥>=E±ØÅ»ßý.º{:¹í¶ÛC—0ð˜˜Çqšˆ’‰ÀôtIL*ãS´µ­D%,Ëı›jEÓl^ý‹û°¬Se ]Ãó}4-FL‰àáø!‚$S«Ï"jºÃ}\ߡѨB&B“DßÙµIh:¾¢a„"q#žÏѽ{yø¡G/qùWñú[~‡D—€3YÛ¿™5k/äo?ûmþákßçöwÝÂK_õTu”¦[ÆÐ{Ü1Á[ÞúIFÊu|p/šªÐÛ«qÁçsúÔ~r™¢Qž,Aä099BïâåÔ Ší:ÈW^ÆÊ•¾G*•ä¼ó×áÙM\ÏFˆ"~|3 ö#Ÿ(pßý±zíyØË”[gõšµì>4„šÑyÿŸ¿“ï~÷_yÉ‹ÞÊŸàEüîó®åo¿5·ˆâšçpç]3l×ùþ¾Ï×?ùoÜýý¿fË–-d“m\wÓåüÙûÞŒ®Å¹|ó ¹æÂ«ùâ7÷rÁÕOðÜ›o$˜)¡k b±²,/ kÌYÃ00 Ë´ð¼–¾s J IØ®K$©ŠÌÔø(O¥™˜˜¤½½=–Àö#$%ަ§±\-´Q»sôe/§ç’ iîÞãwÝCôàƒ\zóµ¤×¯FP"p‚gM¢Ÿ™™a÷îÝ<ú裘¦IOw6l }n‹a~Ýqœ¹üãþ—Fó¡ë:l¸€z­Îá#‡Ù¶m¦iÒ××GGG™L†t:M*•¢X,ž±bÿ‹O[úe¹\î)’$‘L$i˵Íéx{4 \×Å0 âñ8ñxœ¾¾¾§}þb±È‰'bçÎ\pÁX–…¦iضM¥R¡V«¡i+W®d˵[ذ~ße~5ppppAgU%-Zô lœMP.GÔj­ùA½ã-6œ$ë¶´§5ñÎd •:ûBŸXõis ½Ð‡hsÀê¯TU"…ðõÜùÕ\©8ŽÇô´L¹‘Í>óØZ ¦¦šMpPϬg#,†4›M†††øÉO~Â#<‚çy¬]»–›nº‰“Hh 1—.]ʺuë8vìû÷ïDz,Nž{Þk^ëþ±sP´·Tbóæ³ÿ8'{Ÿ½ö°Öûþ¾ïó{ž\Ë2¢~ࢉa˜Ídð}+—%ò<üfÙhËR©Ì@_arÆÄNJ•2Žã1~PŸ³ð‚Ï $•¦ã03]!oɲH³â`[Yœ¦‡¢iqByÿ>ª‘Ïæ³V³ç±Gé,ÕÈ-[Cd²9šÓE^qÉfîßñ Íé"S^ùRTDn½q«S)²VUÓ©V*-(èXvš†ã!‹*/`ê9Â0AÑb’ØãüóÎá®;ʽ÷ÞÏÖó¶016Âøx‘Îîvêµ š¢øaè1Ss$ȤAú¹þúëøøß¾‰þ%LÏ “ÕHÂ×~ìcüýß¿—ek6r×Í?äÏþìã|àƒoã­o7Ýø¶o¿+®Ø„ïhª‚$«D~ˆ *¼ï}WsÆÂAÞö¶·P*Ñ4f³N¥<ƒtRµÚÙÙI‚‚$Y(Jk!6 7Qh-¢‚„™Ò ©¬mÛÔju&&&H’°¥¬[Žã¡ëªª399EGX© ’¤ÐlÖ5™‰ÉȪH*m151ÁÒÅK?1Fg¡“¸é£Æ13ƒ€À“;àž;ïäðÁ£lÚz¯{ûÛè]¼Çñ¨{ã(¢a™ë×sóƒ!7~z÷#¼ýï'‰G™¦{^Ž»î¾‰¾¾vþñkŸä³ŸûõÚÿðÅëH[:Nc‚ZÅ¥\žÆqäó,Ó¢\.£)ûöï# }zººÈ¦34›M<7AQÀ÷â($•²éêjcÑ¢Œ–ÊàÁèè(S‡rÿ?ã5o{ßûÞ÷PRܲÃÎ{cå’3±å2Óã£Ô‹ãà7ñe YâÞúFJ üèßæÌE*Ÿ¾îã–Á—¿ô-*Õ1þù+Ÿ¥4=ÆÄð0e§Éñܽëq^þÛoÀ4¤Ò9E*• ¦iÎÁ®¾¾>Êåò\B­®ëD*Td©e© È83Eš~€ª˜ØqBg[¡P¯ÔQ1’¨Uk¤tƒÄ÷‰T‰ªè@&&÷[[Ù²ªŸßú>w~ù[¬Z¾šŽË/AŸ7Õn?%Š'Ïó8~ü8÷Üs»wïæÂ /äì³Ï¦P(<£ ζm:»:;1F±XÄó¼¹þ_4LÓdÓæM­V_QàÈá#ÜyçÔëõ¹§ùƒóY³f W^q%«V­zFÒðs«¹\îYÊÏ$IænO¿ÿsýû¹|Ž\>ÇÈðÅb‘b±ˆeY'Ó0KT*t]gõêÕ\zÉ¥s^±³Ï#Š-ëžÑÑQ&'&‰Âˆî¾n:::°mû”ktœ„{ïy衘0„‘³Ïéî0 (—ab"al<æØq(`éR¾ÞS $$ÔiЪä1ÑA8Ý>÷¼H¤„1Md*'A[–Ó*š_vˆ@ˆ„äWœµŽC@B A«÷¬(§?®Ùð}ŸG}”ýèGìØ±ƒJ¥ÂÅ_̶mÛX²dÉ3 êì\¿~ýzt]çÞ{ïåðáÃÜÿýÜrË-ø¾ªªôöö²eË.ºè"6mÚôœæ½Ù ÓY°jŒ»\R IDATÆi®Ÿ°Š¢Ë忀èÂ… Yºt)²,sûí·ó裢i+W®D;I fÁ*@WWK–,aÙ²ettt<¬ªªÊ±cǨ×ë„aH¡P ½½t:ýœlŽ~ÃuazŽ…ññ§®$ úúZj´¶¶d=­\ýï¡àRªؤ’4¢ð<¦$·L<}€¸1… j¤3ó(d—Ó#ªÄI‚8k­ñÿñq•$Û^„ªf)—F×2™Ž“–§Ç¯¬Ú6HRÀƒÎJétwgåωuäÜ~;Ü}74!Û¶UÙ´)bá¶-#Š­ÍAhTÃh©YOµ^Y‘e ¢¨ œl¡ B‘8ˆH„V³¬ˆ¸‹ª Hrr²¸kÉsûú2Œ±zݾŸw¿û^ÿ†—ðÆ7ü6çž»‘ÿè&D½@à`š ²¢295Åg>ówlݺ™+^w%µâ’$1>>†®i­Pà\ÖHâ× Èfs„!>|YVCUQð}]‘Ñ4XÐ ‚YoÄ2’,ÑV(0>~ËJ1vb¼µ@K`zjšž¾î“­Ä.v6¡Z©bq3Þ #C'è(´33^¤ÓÊQ/S`ÇM?ä±ÇáŒEgð'ïý ôL3“åøÄ(#SEdU¤Gìçcûÿð¥ílÞ¸/œdÙ’Ç ½ÍDS;˜.—ùá-?àu¿û&.ºô¤l•Å‹úQ•·YE•@U4MF”-LˤZ¯ƒàãˆ.º¡rÆ‚-ï,!ÁiÔ±,fÃA×UŒ´I½VfÝꕆ̙+ÓïãIùnýîMÌLÖ™˜8Á‚Áù˜™ûöd×λ‘#™—]z!ýƒ:•â '†Ž1°¢Ziœ™on¿‘=ùÔû¯ UÈrÕïü ““­E]­2IW®MÎ"k²ó—¬cb|EÔS?†aˆ¦ièº>†P­V1M“B¡€4‰TT®€(Ê8Ñ š ²34êuêÕ:ímmè’Š$Å)ÇGÍ딄„FèP'@ Y𦫳—ÿÉ;pöæàðÿ[_gÁâÅ .[ «Î9%àªëº”J¥¹dÜ(ŠØ³g²,#arüøq:L©\¢Z«òõ¯]»vÑß×ÏòËéïïVº½¢(twu³~ÝzRvj.,b6 ªX,R)W¸çž{Ð4 ÇuX²xÉs³þ¬¿H€˜˜‰çBqzü'`›$!)$± Dèé¹°°Óã—ùæz@ˆ (X–LO@6ûÂo–%ÐÕ%29#I"-Õwr ¿Çää$O<ñ7ß|3?ü0º®³bÅ .¼ðB–-[ös7eY¦³³I’0M“+V011ÁÔÔSSS‹EªÕ*;vì˜{ÌòåËŸ“ruÖ›Uþ%«÷_äï*Š"ƒƒƒäóyöïßÏøø8ÓÓÓsA[AÌ…xjš†išs^é³p7Žã9µo¥R!›Í²bÅŠ9;¢› @ÀÔT ª‹-PÒßÿl4>Þº ÐÝÝ)§Ç¿ƒ4ÄI€’€€Ìó¢ÄO¯Lcæ0n#±YÉ¡)6‚(óÜ U$É@’,¢È'мӑ/ XM¥$šM×U^4y¨AвözòIس§K×®…åË#–. ™7/ù…¡“§â†‹,+2ÍfA1dyÎóE’”“ûV‹zœÄÔë ü0$ŠC-A“%4ÕDUÖ¯?›™b™™¦%' ‡Œb9*5·U(Š’%—ïD72ŽK˜‚N±Ø “³ÐuAŠ‘d™0Œp\$E‘Aˆã¤ø…s“ïìp‡f³I?Íf“F£ª4ë jS—±L ’]04Aò‰ËÔ%1Ô04Ï©:’$¡k)tMCQ:€ë6èè(P­Íø>¾ #àyq$BÒ$ÒxÍkÏ烸‰Å‹¶ó—ñ‡€¡$€ª)ÄqLHD‘‚ï·&×(ŠðIj¥ÄG~€ëÔQ$ CÓ9xð©T–žž&'§i8>vʤ\q…„B*$‹xãù‚ÄÔô]]=x~Hqj†l*…ï5Z6’BxŠ„$‹Üüðxù26w^Ð$É·qÖÖ =8Ä·¿ò V­[Ϲ/}9K×­¦w Ï÷|¿àDñF“BÏ2¶è°ã®›Xµf½ƒ‹#E•i8®çƺi“1lt]ÁókDQƒEg ðÞ«ÿ‚gÌç3Ÿùoz£Ä–-ç’Íå!ô[¾zIŒ–²(UôÏ_Æ¡}Cüá;þš¯}ëoE‰áèà;ÿ÷&öìæ†/üGŽãÿø^ñŠ­\ó×ï¤\.cÛ&…œÊÌÌ$ø!ù\ˆu®½ö#\sÍhïÈR*N¢)µFƒTÊĶ,Â0Æi6MU Ø\.ÃäÔ$a  ë¾§£«"ЬRsBµ*ª&“ËepšM$¡u?ˆB‘‘R–e¸õ&VÊ"m§(NLâ6›ôtt“Me™ ›ÎRœ(7„”É ×ÿOjõ2}=üþ¼¥6Pž§ìz8~³£?“¦ÑøÎ÷ó¹ØÎË_¾–¯}õQ©?ª*L5ü<)ÛF–A¶"\núþ·èèÈà¹uŠ˜–H:­FM·‰ªš¸AÄîÇŸ¤»³ËJQoÔ¨–jÌŸ?@/ÃÇ33S¤»»U1M”a0Qž¤·»9 Y±lÚËÎ¥^A}*u‡Éb]4X¹|Y+ƒIdì6òY•z¥ãÔèìÉ34Šf#H>~ä£iÄ a=#¤D|ßGQ”9eYEH¢@&kz$!"!² Š I 2Q"DŠdB,ÅQÔòO”D ˲˜ž.²téRLÓdzj’\ÎDÓdšétš8 ˆdQQIâÇ«pù+.çÁ²mÛºú{¨Wʈ‚H'~D’Ds?K²LJK†’$Å "J"Ç1º¤@ã5›äR9Úº»I•ºÑÙ3@E ’ØG”U*Õ11†má:>¡Ѭ7]U@ðN¦œ'aˆàè²Lqxˆ©£¼æÊ×àù“¥&še¡kK6n J,ŽðíýW.}ÅkÙ´i-ÇF÷#6ÃG‹,𷄤i`§:Y¹l-ýlªš£}ð jÓÓhF ô7 ñ"‘ÐI0tz½ÎL©L®ÐË•¯}µªË×þõÇìØ±“ó—S-áw¯zgž¹EȤ Ïàƒïý,WýÞ2Îݶ‰™‘ôõw34<É·¾±¾øi:;xÕ+^O:—â}W¿›0„"õšÇªÕK¨–áØ±}ô ôòÄãS|þ†k¸úê¿"Û–axøííDÕ@S$DID74œzƒ0ˆ‰ã„8ÐtJ­Æ¡Ãû™œ§»»‹Je _•P¤]71u(LȦS芄¡­tw´ã4]º;–ðä¾ýH‚Àà¼ù„QHÃi kÐ^h£Ë# 2šl°ç¡'dÕŠ•|áú/ð½åSŸy;¿l±Rm”™lTˆ%„É#¤ÒY¦Š"×~âœ{Ár¾ü•bbâ’8MÞî sÅr¾o –çi5Ƨë|ø£7 ðp>×|à/éÈ÷S«OÇþI–¢\kÒð#DÅhµvûšª²pÑR–×t­UQ…ÁÁù„§¦± §R¥Q.¢[&¢ ÓÛe“={úKh_²Ñ{àÀþÃtæ‘¶s<¶÷qffŽ#éÛȯ9ƒZ#I¨¬X½œ\(zš Éf³¼ç/ßCw‡ÄÌôL!Â-kX– |á†o0ôØc¼ñªW“Õ5ÜÀczz]×1S&ñTH‚ˆe›,Yºˆ0 ŸÅcTä:ÓDUT„HÀw\&ëMÚÛÛ‘ AH(äsAD=j¢´[(€è$„•ƒ‚ÕÓƒK€#Dx"DˆnH~Ùf–ö®Gy|Ï)Uu]§¿¿Ÿ‹.ºˆB¡pÒÜþ©–ºYÅê±cÇØµk¥R Ó4Ù²e +W®dñâÅtuuý„_AhuVÌ*3mÛ&—ËÑÝÝÍ‚ p½–ZvôÄ(CÃCÔëu¬ÙØÌ_ñkÿÏŒJ¥ÂÔäåry® qViªiét˲ˆ¢h¬þû‚«Z­²k×.}ôQEaùòåœsÎ9§ XM’–÷Ú &òù‚@WWË"dd8á‘GE¤§G@ÓžéÅf[Í ¸^“û ¯/a _8u­NçqH ¦E—j¼5IcŸÆm¿ü0 Q”¤–Ræ…*бõü²‚#­€­ §“©_ÃóTGÁî½ýùë¸b*$ña ½“Tv!ŠbÿÒà6™Û.>MÆÝCQZªï}û‡…bUZëüÛnƒcÇ`` aÑ¢:ù¼K>¯`š©Sζìÿ VÍ–i·@j!+ 1-HÙ‚ª­tl‰¶¶.ªu—™JƒtFB‘SØ–J¥ÜäÈ¡1|àq>óé16lXÍÅ¿Š¶B/ÃC<üÐ>/æ­oý[Z-}íÈ2ŒOøðùÏßi‰ vsîÖ^.½ä.ºp+MÒiA  IR‚8މ¢8NÃpn²Dz,$I¢V«`›6в(“ľã à‡1v*‡ï‹xnˆaÙ¨’JøÄaˆ,ŠžÏÔÄ$Q S-•Y88Ÿ÷ß˲e h4ü Š}M@ B„$DCÚò9®¾újºúdÊÅqˆEˆD’â8$ˆtME’%\ÇEÕ4D‚Ð'ò#Y$=tUEÑuÊÓÓ¸®CgW'‚¤124B„D*ÛÆäÔ“Óe C"oZHŠNè;x®OÇ´r¸Ž‡" ´çóT],›XU‘ƒE”(OŽsÏ]w°fí óðË5T5C®½‡Ä«P¯L±|íÒmíT&ß¿ñߨ֦i6áŒ3ÎÀ«xxÅ]¤ÉZB_åÆÿó.¹ürúW.gúÄ8FÆF³U‚8DTB$Q`º8ŽiØè†Š($9t%Ë–ó¡/¡ZªñÅ/|…?úƒ×²ñ¼mßÿ]]9Ä8˃?ÛÃäÄ8_øÇë;ö’$7R\ý—×òîwÿ9í¹vÞò¦÷R­Õùæÿþ$qä34|B!KŠ(JH__†éÉ*ªbó¥/ý3ùȇÉä,Jå"}ý½T«3”G&I§R”ŠEâ0B‘Y"ITÍ’>Œ8tuç‘ Ah©À-C'ee©;1¡ëѬװmƒ\6C½^GÓdY¦$TÈfRtu´S©T™žž¦««³ð¨Š†$*”fÊtµ™,Y²‚~à“ÌLH”.(S÷b2PèïaºéKÓ•B ÚÚòDQ‚,$~È£<ÉÌT™Õë‹Ï^ÿy¾ý¯?äê«Ïâu¯y5µÉcئHµ:ƒll8gßüúOè+ÀË.» ×oâû t]¤é6‘Ó²¨»‰ °tÙJTb&ÇOàº.yZAZÃ#ÇhÔ+¤Ò6=ݨªa€Äô÷tÊ šCè J¡[E bÕŠhF;O>|„Ññ ûOqèÐ $S$¨”‰bI58>|7‘1ó ±rð³ûvafUYETó Q<¾‹uKP¯MÑ7¯Yyl×xåKéëî¡êN¡ª ¶mQ) ÀTÊB }dYÆ0lÿ,°Fƒ¡¡!’$!NÏ©bá)Ň(ˆ¢ÐZ(&¿¾×]¯×çZã8&•J‘J¥æ6ýår™G}”}ûö…+V¬`ppûdå¡iÚ\GËzdœ}ûö1oÞ<Â0œSú>öØc<øÐƒT«U6lØÀÚµkéëëû¥[Ã÷áÄX‚e ôÍèê‚ö6ILø°gOBwwÂúõÏVÄÉr«…Ðõàðá„”-÷r¬ž'çb8Qiâ>&§ÛŸ°Úòþ¯Õb§eÍñBy$ªjëù“D¤Z×=­˜z±Œ8Ž™žžæÐ¡Clß¾;wR.—Y½z5ëÖ­c``Q)•JÏP¼©ªŠ®ëˆ¢H­Vc||œjµJ[[†a ªê\}:Ûñ1ë¡þëôõ<ááa\×Ûµ9š}-µZ¡¡!î»ï>FGGI¥RÌ›7öövLÓD–eòù<¹\MÓçàÁƒô÷÷Ÿ´±ó©V«=z”»îº‹R©ÄŠ+ظq#¿–ÍâçÄ£VëÿØX+\²»»u3ÍgßײZç¯eÁáÃ-VMƒÿ óó¿ÕH’ßAP”T‚Zx~€e¸‚[FfPí…˜…EŠýKý} 08Ý9ðë«mm­Œ‡jmRÄñ ýn©Ñ…Ý»AU#Î:ËgÁË0 ]ÿÍóÿ]Ç; VE<ßC7 üÐó´Ñ Y’‰#‰j½$Y˜zº¦rà‰"ßüÖÿedô ¶Ù…™ÒxɶW²rùD±ë®û_ûú”Ê+ÏÔ¹âŠW³í¢ó™?ÐG8èªÔ2ä>zœƒ‡°cÇî»o/ÿü¥1¾þÕXµò |ü$ŸëFT<"ÇEQbüÐC“cÂÐCâHB$A’!Æ÷òù qéT¾’BY’QuE pÏ­“Î(h²€&˜ŠB„ﺄ¡‹¦j¤l­e(ˆ‚œÇ5ý).¹øBºº;H"˜™)ÑÖÞ†,i¸uÓ²IB‘zc†tÖ ‰ŠÓ3äry¼F€•²Ñ$ƒ¨œ´p]Ï Èå3øžCÄ(šDÈÈ$a@³ÙDÓ l;C¢„­™„a„eXDª@:8Žƈ’ IKõ#‰é”ãxT«%ÔT†H”Q% M‘uò“E†Fó[¿ÿ’F)›%ëC­R¥QŸ k)zŠ›n¿Ÿ;wÜÉö[fX¸8•J¸ñÛ·óªWžCg¦”#Vp:z–qéežØóº"ÑÞÓŽÖðü=mÑ ›9>DW[(JE(NÓYÈÓÛÞÃΡñ±ÿŸûìg˜?0Ÿu[7R/NbåúøÈGßÎï½ù¤ÓYœÀ!Æcû¤½ë ÎÞzÛ·og÷žøæ×¯'eç{œ¥g 0<<†dëÌ_°ö¸ýîŸQ«Wùë¿ù¶ú R¦J­2ƒmä3iêõ );E&Á ¤Ôjõà4ë¬X¹ŒÎöµf•8 …˜‰‰q<Ç#*àø>é\ÍÌQ.•¨ O¡ë:Y«Z½N„Ôë zû{‰p}ÉRI”Ñéñãtè…TL®ƒêñŽ˜FÖ2¬Ý²™+W𭟼´ m=ŒŒD¶dz;;QÂÔ r‰ŒiÒ^0‘møìgÿÁƒvŽ)òÀ·Ð43ÕGâhH‚Íðñ2Ë—äø§/^ÃÙÎdfæ²åÊ ùB†éb™z3 mgQõaÓ‘M#D>c“T+bLÃ@òmm„Cy膂K8µ*åjÙ¶ˆ¼^Ó£'“ãøÐ ý\¸e真áã#׳ãÇAI¹íÖý<|Çã\un‡Ž?ÁykxhÇÃd*MbDM¢­-K¹ÙÄÌ(Ü7Jg®“À‘éïêâÐ{0S:¦1=Ó$ð¢X¦Ú¨AP.9~ü8º®cè:¹¬IÅ1MÃ0peIÁp$©eI· ê(|á’¿á¥ÞÏl/r¸ŠpREsú‹ñ|¾¯®Û:'«UèhÉd^˜iš…D1œ8¡P«Í‚¦Ó»+/ô‚€}ûöqÛm·ñÓŸþ”R©D¡P §§UU™˜˜xV'FÇ´··300€®ëŒqÛm·ñøã³víZºººZÖK²Œïû”J%vïÞÍØØmmm b𿝼ccšÞqÇŒÏuÌ>÷lwΑ#GØ»w/{öì!I–,YÂÚµkçÖ$‚Ð ¶íì줭­ééiyär¹žçá8‡fïÞ½ìß¿Ÿþþ~¶mÛÆÆ1­|Áaz+ù»Ñ€¥K[ªÔ§;0Í~Ô³íþ³ó~*Å\pMrz_Hˆ’ˆJ\B!EJH!c=?snÔËĵ$ XmÙAPÌ_jwLB&#f‘“*-¿k“ÓêÕ_Ì“!nݪÕXtq™ IDAT ‚Tݵ«X.ô8ãŒóçKd2š¦þf~šf (FâL‘Ð ( ‘e†ë#‹M·I")”k%úº—pç;yÿû¿ÈŠ5½¼ÿ#ïbÝY+xó›ÿ”…‹72tÄâÃû+žÿùOPK¶\¸œ‰âq:Ú:çË_ùÿ_â¾Ýò®~’O}ô¬:s€™ñÃtd24fjtd»%߉éŸ7À·þíÇüøæA·BB¯‰¦ˆˆHh‚Fì~ˆ©YºˆÆx!HªF¹\FJb,Ó ˆ߃8&ò"Òé Š¢t 4M¦K5ô”Ætm Ei6+’Jâ„ ]Pñ¥×÷p‰,ÝVˆb…‰q‡¾6‘”(`Ô¦1Äv¿ÿ'/9o-…l'N¹Â};îãÊ×þ!él@¥6†–”Ÿÿüì¸û>nøÜ_2é|í#I<²¢Ådišº[C× Ò¶Ž* Ȅԛ <9&m™ŒÅnàUêøAD"Ê4ü– ˆç7IÐD ͲP j¥J0V¢Ïà+"ùöµöŸ-Ìt½õ?ht’tꥈžPÕ‚“…’rò&¼ÈùTÀ§4ƒz]Àu[Š3M{aÞß8~ÊÓ±Rñ<íô‡ó"a2<<ÌC=Ä“O>I’$H’Ä‘#Gp]QŸeok×®å²Ë.›óOŸœœd÷îÝ”J%,ËBQ”¹uÀ,\mkkcݺulݺ•|>(Šssüìœÿôùu6ê¹ÌõaÎÍõ³¯¯X,rðàA<Ï›;.Ïóð}€b±H±X`Ù²e\pÁœ}öÙd2™¹ã‘$‰… ²eËvîÜÉñãǹå–[xôÑG ‚`. «»»›7²eË–g­^l׆0lž§·ÿÇq øDQKÍ:ÛY"Š­kˆm·ætÇiÍßÿÝçð˜OpI0‰õy›Ã¢¸ŽëÁñF‰“,È<E…(ÉhVœ$(ÆiÃÜ_Ó˜¤R-ŽFã…ߤˆ¢–}×®Ö&Ëòå ˆ´µiȲþ› ¹g'3A…jµŒÙº…ÄQD¥RARD:Úz¸çžùÓw]Ï;ßuôÎß¡Þ(Ól˜äìE|î3_dûöý¤3"W¿ïU¼þ ¯Æ¶¡Þ˜&ð+x®‡*ÅÄ‘K†Ô“:^Ø n6Ðt“0ªqæª\vÙ+yËÛŽò/_ÿ.ÿòÕÛùî÷âU¿5Ÿ~èÝ´åòx•1šqƒj£†®ê„aDÎÈ‚‘„ ²‚"ù¾/ ŠAàÅa¡¨*ªÚòguͦ‡¬ÈȲN¶|eeYnMÊ‚G³é k&C‡÷óÖ·¾…¾pýØG¹èÂ-lÙ² Ó4ˆã–ÿf½^C×5TU$IdY"“I#P¯µ û0ðÉå2ADàûÄAH'ˆRKÉkY&¢#‘JÙLŽv:Cœ$hªNdÁèè8ï¼—ÞÞ~tÃDÖ4’8ÂÔT¢<Ïb\×Á?²¥R""&"’¤â×êd:{ùÉ¿|…³ÏÚ@×’eTÊ“h²Œ¦ à&äó]¨QÌ­·ÝÅ5ú,²óÆ7]Ä;ßõûÒy¦FjìÙµ›éÉ#Xi‰oÞ¸ƒüùmÔJ¿{År^}ùˆV'ãõÙ•Iå2H„¾€)kD~D,A"%²ˆ(Ë$QLÕ+‘ʤr6ïZóG,•k¯þ/½b×_÷ÏüÃÿœy½ i6ƨ–ë|â#7ðÆ7\…ïÖøßz/×~â¼âeçѨ͠ØSN Å´¨Ô+ôvåyô¡=œ:̼B·dãWë¸ø8a‚"ŠÈ¢€@Bø˜¹,n­aY±GFòy’ÐÃ÷] CǶ-â9?É–ŠNQT2Yõ$Ô‰H„˜j£F’töö0zü£cãdÛò¤ÒY¼(Â,ݦæÖIÂÞ\žêÐ(½9™ÃÇøþWoåÈÐ(oþÓw³hë|^÷Ž?dêÄ4ó{EQPtEVI¥òì¸{'ozóç¸p[/»ôÓ¸•€¾ž>úákxd×cÁ‘#Gh4ÄqŒ¢(är9–,YÂêÕ«Ù²e ‹-BÓ4†‡‡±m›¶¶6 ¥ ý÷ÐÖ0 ²Ù,]]]¤Óé_wg!pww÷œ7j’$ضÍÂ… i4 355ÅÑ£G)‹H’D:¦¿¯Ÿy,_¾œU+W±téÒgÁdY–9óÌ3Q…{ï½—ìdÏž='ƒ&[þ²kÖ¬á²Ë.cóæÍ´··Ï)^OÉïBÜ*Æž>z{áüóî½Wà'?IX³ædp•øô¢÷©Å£çµ‹a´™§×óÏs™WHâ"D.‚X@”»@PO¿5ÿ ‡ ´ÎÃYåÙ u®5› S“ Õê¬Ís˳>=~•ßI’0 ƒÞÞ^jµFƒ½{÷²oß¾Ÿû˜ÙË­[·ÐÕÕÅÊ•+™œœddddÎK5 C4M#›Í200ÀÖ­[Ù¸q#«W¯~ÆF®ªª¤ÓiÚÛÛQUun]1;‡ÏªEg7gÞkPU•L&CGGÙlUUç¿bÅ ¢(âÈ‘#LOOS.—)•JÔëuDQ¤³³“U«V1þ|V¯^͆ ˜7oÞ³Ö7³+ù|žûî»Ã‡óÈ# ( ]]],^¼˜K.¹„3Ï<“ÞÞÞ_è=ÿb¹6ÌÎͳÜÜ÷[ÃíŸW¯~¦’UU[@ZðuÖ{õ¿ý9tòßóioR§!Å‘Jê"D©’ø—ôo@’ÁÎB}ªeš‹Êiùñ¯ó¼3ÍÖ&…ë¶Àªç½°ÇT«Á‘#1G&\~¹ÈæÍ:==*²ü›=GËI’Ðh4°m“\.G¹\níâ…!£h:¾ç£Ë:ˆ“EÞõgŸæÕW®áÞyåʆ։_Í03¥sãM38¨ó‰ÿùf.Üv ’è±ïàcèjB&m"‹ & $Ä Q‘¶Ó¸ž@£Þ¤£% «ì?¸ƒþy øä§ÿ¯»êBþö“ŸáûßÙÏ“{ßLJ®ùS6¬[JÊÊ&U¢Ä¥ê”hÏu"‰Q(’ É1qX%Lb¼ AUå0%$Œ|’¤•ì-Ë2‚ØúEkM¾a"K2’!CI¡i*Fl&M¹<É»ßóN|è!LM"Iáz <×Dz-4]& [ê7n´|1%Ïó1 ƒ ð}MרÕjH’ˆ,+H¢ˆÄ¢@„˜© nµL¥Ú £»Ã4˜œnÁ¬[o¹? Øzþôôöâx.ãcH’D.—F–EÂ0A× Iâ{º!1a¡H²³”‡†ãúœ‰q|A ¢(¡Z©‘(î=Â{Þó!¶ž·˜·¾ýµFȉ‰'还‹z×sÇ­#¨’Ã7ÿáZ&']nºù‡|ùË?åË_ÙÉù/éäìëXZ…5kr YÄÈG |„8AR[Ái’"‹ .!¦eà4b‚™¯ÿ“?`ý†-¼ùíב7¡86ÎÞÇv³þÜu\{õÇ%ø½7¾‘K_ò:^å*Þþæ·PžÅÌšLÎL£¦-šM\6ϽwÝËOn¼™·üÞkùÌßÞ@y|ËV‘ ‰PˆˆOžÿAáyÂÌ ’,!"ª$âžãD†iÌÐGQ„aÄqŒ,Ë躎¢(DQD©T¤V¯b˜‘Skº¨)™DR)9QÓÔ™/‘•®ÚÈè#wðµ¯ß…bI¼á/þ˶^ÈÛÞôa*30ºo„Žü ná·§ ·4ƒkÄÆ7þõú$®¿þ38ð‹úç15ãñgïú+¸ÿ0Äð¿nxóõáTUöÜG[[/{÷<É®‡w¶ ™†Kʶéííbxèÿ½÷޳¤*óÿßçT¼ùÞÎÓ=92ÌCEePÀ€ «¨«këϬ»‹¬Ši]÷‹¸¸®® 0£Iƒ8: 00©gº§ÓMu+s~Twƒ„]„AûáÕ¯ûnÕ­ºu«ÎsžÏù<ŸŸóèbI),Tbˆ¢ˆ(Šð<¥Szºº‰…ãå ÃÇ+]tš-[S)— ÄN'&À`[Šœ°ñ}Ï• %&ÌL³Mµ\aù÷Y>iòãË®çª=Yéíq¥<¥±ì0$çytÕ ¤:&UÏs±-›sÁÉqËwoÄ–Ðד㢋¾Å/:‹·¼å ´þ|n¼a#Ï{Þ‚æ‹/e|l‚J¥F*‚N;i 4Š hOk„9X2Ó`µ,DZ •šÌ¤Î’”J%  ”A+° ÇÏÓœ 0‘ÁóK`rLŒµˆBÅüƒx¾Áüõ:[–Å¢…‹8ùä“™šœÂu]úúú–‰!¥¤\.óôcžÎòeË©×ëA@†³Œ˜B¡ÀÀÀ ,`áÂ…Ùµ6†®®.Ž8âz{{ ‚€ÁÁÁ?b‰®\¹Û¶9è ƒX³fÍŸl­w]—¥K—r '°dÉ-Z4k´U©T8à€èïï§^¯Óh4hµZA0Ëà-•J³æýýý”Ëå?*”„”ËeV­ZE.—cùò匌ŒEÑl±7þ|ößúúúf Ÿ¬EYA庴û—K°r• ÙÊœDg-3zmŽ3ª>öÀ·¢ŒÒiü3ö[üòZòÇcù½sço0f3\73¨y¢4Vs9èꔊ02÷ÌïSá8ÎìâàØØQýCõ@Ÿ4eùòå³ÝÅb‘ƒ>˜jµÊøøøl.™WçóyzzzX¸p!óçϧ4ƒÎMÏ/8æ˜cX´hRÊY£¬Ì8u ÏyÎs8à€ø“5¶m³`Á6lØÀòåËñ<¡¡!üéöеk×ÒÛÛ˺uëh6›t::Îlž®T*ôôôÐÝÝM?ƒƒƒrNQ*•X¾|ù,{uïÞ½´ÛíYs«V­Z5+!ðd#Â0k¾ã¸óÎŒI78˜É<XY¨ÑzNà/>ïÆ¡ zpJ«ÝýøÕùÍà­€¶„Hôôª7së\cH9£;ž1¿wìÈ, …Ç7?k °i“aÇŽBĬXQdñb‡|þ¯_¦ÇÎårDQfªáùaDšdÌ:i;h­‰CC¡Tæü þ…Kª¼ïŸ^ÌÄÔ.„®R--æü/\Ìõ¿¸•õëz9X»ú:í:õÆÅœÄó$¶%ÂŽ°&[]nÕ›tƒç稕zHÒˆ(¢\ÊaÄÆvïå ráE_å Ÿ½˜‹/º–¿;ý^ÿúSxÛ;þ¿l¡’ÊÕ±JqE£%iš UHš4ЩÄh ×sHC.çÍ&þ8 ±B¦S(µa¥‘Rb[6NŽÆsaû¶{pl•YØ:’ Aw¦MŒlÒ4 Žk‘¦i¦¹˜Ïôt×öÉ®{v]ÇÂó<¤¤©"N’ÌÇóv Ï—HSMÐÉZNî¸ãvº{j,]¶Œþ^ÆÇG £ˆ¸ÓÆ÷=t’` B ¤ådŒ9˜¬G%†²ã ý<ùkzèz ß–DaB»aã`ç 4[†üàFöŽ@o{ü¤é$A§ç§Œí¹r¡ÀSŸ¾–ám[øÙe_ch`%¯þû—ó’W¿Š¯¾–o\z=ç}ñGT«Ç{¯zÙ‹Y±| AcEéb#Ñ®…F™„8‰“Z¥BF¨8%iblAÅS|â?>Éøø6æu³ñg·sÏ=Ã|âãäsŸü,}e͹ç¾ÎŽû¨ë¡“glj’.Ïg^Ï q?ýú÷xÿGþÝÛïg÷´r»â£Ò’L¿SH­%Úó‚€b±H§Ù@I1W`lbœTÅØŽ…eY‹EÂ0œHÇ!MÓYf¸c»Žåãû6Í0¶ªý]¤IJ'ŒFâac ›°Ýbɲ%„wïä–ï\ɵ×ÿcOXÍ⃎eíÓ6ð__¾˜/}ûJ|àŸæ°§_Ƕ­{X¶daРÖ=  7ßxüð»1$ü臗b÷|n¾u„[oº߃¥Kú8î„õl¹óWäýp8W^y¯zÍÙìÞ Ë—Ù¼ê•'qÆ‹O"M"ªµ2ƒCLî݉J5¸‰ÖàXR8äó’$ÂCœÄ$Ž-©”Š4 FFvãXšbÑÃ’†¼›ÃóòT|•jT=" c\Ë#Šc’4áÛ_ÎW~qG?mG=åh^óš3)85>÷ÿ.§§‡u8ÑTB¶¢P*&M„„©(7OHDÙ)B}/JE48÷=obó}¿aÃ3ÇQÃ{áöÛïæ„ã!M »GFQqD.—i&c… ßËL ¥4ù|ÏóH’­„°ÀHÂ0Ķ%–ã¢R¥ RBµÚÍäTþž¾ð¹¯pö¿\@wµÀ%—^B´hLsÔ3þz€Õùóç3þüGYLçX¿~=ëׯ«¹‚Z­F­Vcݺurß÷Yºté¬&êCx. .dáÂ…sÌ1¿÷^±X¤X,²lÙ²ÿãês6nôôô̶9þ5G’fEX’<Œæó°h¡Àv ít÷<<©Â÷³öÃ9€¿H™Lœ„´#¤÷ÿ‚´k Ë[€ßí#ÂcçV<OŠHÓ¬nvœ¬póž üBA08˜™ØmÝjæ™} X]³f kÖ¬ù_†ëº¬X±‚+Vü¯æ}}}ôõõqÄGüѹ-X°€ <|lÛÌ›7yóæqôÑGÿÑûK–,aÉ’%ɵš™Ÿü5äz¥²…Ò©)غnº){õýLà•f:V¤ÌÆ9—Nþr Èc;K(Tú «¬Úc€~Pš D€å0§sýøÇŒ¬VWW6—Þ±#ëüšéâzœ`U¢H³clÜ(˜šJ˜7/dáÂ<ÝÝËúëGÚíN§ƒeY”J%R¥2wò\K‚çÛ„qJ¡P %Û·Soìæ™Ç "ìdJ2н˜ÿø· øÐG¾ÊG.á+~€®>Ãî[qmÏ3Y‹ ´BPq‚@bY»O›ˆžŸÝ;Gñ ~Þ!Š Šœ_¥^ßC©èðÒ3N坸{Þú¦wñ‘O}Ÿz{ÿú±wP,±wï6òžG†Ø¸• Ò£ E»3E>o“ªˆ háº.QaIk6gà£Ä÷s4ãæ¬ããðî]¬Y³†]»†éïï¡Ñ¨%-’`Ïõ"cªe“Îc4iš"„Ä÷=¢hxu|¢0DZJ)‚ E1—Gh…V a¤) cã“t÷õãy>ããã˜P LB³Ùdá‚…h2996í–i!UB¾P@JM’DHÛ!M ž—Ã&ƶÐË5ÊU~úï¥ ‡m8–æÞ=àÛXžKÞwˆS¶‡å*¶Ü¹›ë¯» ߇ž¾^^xúsÈùmmLj°ŒCÜi¢U‡ù °pán¼ô§üì²aŽÞpÇŸö\ö?è œÂ{8÷ÜrÞg¯åšk~Í9g¿ãŽÝ@ØG¡Ð*ÁQ‚¼#°¤V)žqÈ»6­f•†|ý¼Ïq슥Ô7m±%÷Žnæ?ÿû‹qø‘üϹçóÕ oãCï=‘ð×wRìaQ®Èî-;9p`9ÐÃÍWýœK¾ÿ}>ð©ORëêåÊ«Äp¶ì¼ÃÁ´¦AUJk×w¦Wa#\× …‡NLª:ùBŽ8Ž)—Ë„aHE³Æd3`‰1×v¨« œ¼‡t]:q„I'Fj(9¶m°”!WëÇŒŽqÕ÷¿ÍeÿšW¾î%<å´tœA&Û)Ÿüô¥œrÚ:– ðùÿü¿Ùò#?lÕ²K§Ó@´;·w°…fþü>vïÙÂ)§=‡Áê¾÷ýß¡ˆlGP( ö¶Í[ÉîÝu>xö§˜š€ôL^pú³é­ð,ÃøÄ(¶-¾+ù¼‡ë8t‚€8NѤiDš& 9òùB4æ|¤ÐTKòžÃèHŒçgŽ®¨MÎöÚ÷|„oã’bD‚% ½}½üúç70°º›o¸‡·ÜÃQGB¾ÐÅûÏ~Û゚+.ßÌÕ×]Ë[nãÐ#ã¹'½ÇwÑi„Ò1ÂÎÚéCi¡UŒ]´hïÞË›Åü.øåM7qáÅ_âó~•K¿q§®àE/|`c´àÇ?ü–Ç>óxT)ÓÚÊç h\âXã:JiR5½°â8ØŽEš¤ÓFL­ :I鄚‚ç+0$Ó÷˜Åd½EßÀ|â(å²ËÈȈfÏH“Ã9?§i·“Á«æfsñWùêŠ3(,8aÍIü-„Ö»|j*kï}¢ÏËÌoŠÅ90f.æb_‰ €ÛnƒM›2PµVƒ£Ž‚CÉØª¨²†Ù˜R­f¹ÜÜ5œ†+yÌ׊œTäŒVúc)0ž}®©2g\õÄÄ °jYÙ3Õé<¾ÇOÓ„©©&wÞ ·ÜRch¨ÈQGåé볟Ô]u X1 ÀVЦP(P¯×ñ½<¾ïv:ÔªE”²¹ï¾{yÞ)'2oO+ú–ñõ /åãû*ÏyÖ|Þþ®—c9¿ûÍVæ ‘D¢8!C`[‚r¡‚N a"-Èçs8^KÚô ÇZ'” RmÆÂ¨˜vs*uq½”Ï}õvôÿðÁs.äç¿xÿ|öë8é¹; bÕÄòÀ2)*Ï*!T‚e ƒãd93m fV,ËFé du]Ïó(‹t:õÆÅRŽN§EšÆhctJ½1E¹TA)5«8#žîº–eÑl6I’„jÅ1­C)˜Öot xž‡p%ÅÄø&Æ›¬^}a§´mlÇæÞ­;`pp lãòÄqL'äryÏɤËÉè;FZ8ÒÁh‘É–Àv%ÍÝ#lúõmœùŠ—¡â§àÑl!ñK„eÐÆftbŒ«®¹Ž­[ÇÉà¤ç®GÐ&¦ÐI@ÞÏ¡T&oà89:¡"ožú¬c¸gëv®¸ôBX·žžþLìÚÿŸÿ)N>áR^óúÏrÖ«?Ì«_û[þáͯÂwL èròDÐl7Ú4ïYâ IDATØÉ­·ÞÆÞ‰)n¾õWÜr}Ä‘ë–%‘Ò¢Pð±-—F£E«Õƶ%åJ ¥¤0ÙX Àwm††˜šš­ñŸ‰F“þr¡ÊÌè,e¶™–å,_¾÷9í䥜uÖYì·zõæiÐæüÏ~ŽyýÿÂ×.üƒC6]}{ðr%öŒ“š:^.Æ59\Ï'VŠ(Ø;²‹µkV2´q;WýôüvËoxÍß¿Ž…}‹X´¤›þÞ;É{‚C9!2]Õ$Iè„^Ιµø'i hÇÆ˜L*‘±Ä…aXÕ JBÜÄÇ÷Ëx¾$ŠÒL¥\£Ýê -ãŽ;žg<ݲó¨$fÉ’%ôôÔæfsñ×U<P)$qÆd™ÑG•2NfØp8'›i5l·³ýÂ0ÓX-•æX«9°ŠÀ¶K䊋)/8`øâ©;iŽÜ ^/~×þØ^mŸ;ëß/Qçâ±xVÓ4cÃ(µo€™Ž“=ïZgEd’dcÈÐ:sñøAÃÃYûÿÄôôdšª‡«VÁƒ=6Éž×v;Ëß3,ø¹g,,Ц€……%:@‰Œú§¤2ÿyòŠ” ,·€ëWn~N“é ɇŠîîah39éÑéˆÇ¥“ÃCGLM…ìØ!عÓ!Žóç[|p¶˜ò·r;Øív›F£‘éN»#ÎqDQ dNËí ŽMV®XÅüýèÔæŠ+~ÌG?ú5Îzռ╧ÑÛ—#ê´ðœF)’¸ƒ†f£AÎσ­™jN’ÏÉùEÇ l%F+”ÒHÛÃl<´J0ÒÆu$õú(A'Àr'h´¶òÒ3OdÍË8çœ/òÚ×^À›6ßÍk_÷2|ßA©ÛÑ´§Úíàù.Ý]>ÚdíØÓ,븳4Q³ú˜*Õ¸¾ÄÂ÷<:õúTÖŠž$¸®C1Ÿ§Õ²i4§ÈûE<Ï'Š"|ߟu…f]/ƒ Àó<ǦÑlb Ï÷°„$ç¸hbKc[4“óŒQÔ''ZÈd}Ïu©uwÇ1•raI­&žgÓn·±mÏ÷JÑj·ðüžŸÇr<Úß–ÄqLÎÏaR…#Àó].ÿÞX¿n«WB§Ád;¢X­ ”Áµ]‚ C'î°cçNFöNàæÂv8ô°ý2Ä(ƒ%<šGX¸N>-©I£€‡¬¥·¿Ì]›6±ãŽ<óÔÓajžú®úÑ~üÇ^Ì9ç~+n¾ûèxÚšƒØô‹ëhl¹‹-¿¼…úè(Ží#Y´rwoJyöÉ+8îÔgàåŠTzçóÓßíâÍ|;/=ãÿãô7<“wÿãYŒï¢àyìÞF}xœÉ‘In»ù·|ãû¿áô³Ö±yã¯Øo¦wárš£{xÍ›_G§1Êà¼>Âúq˜±.sy?ŸI7ä >¶í`ŒFcIzº»é¤S““0 ŽK)ét:äóy¢(¢Ùlâ8žç•±¢ƒv¥ ‰NñŸ¨÷| ®ÏäȺæ 1òÛÛùî}JÙãÄ—¾ˆ/^r?¹e#§$(w ðùóÞÍ«_r"Gu -¾uåç F,êáºëÎêýªTjÌýuÚ»†w°úÀ^R Ñn³ÿšUô íÇ׿ý9ö[]ÃómÚA‹‚WâÚko ¯Rà¸ãŽg×®û £ |Y±¡Ói1hŸýlÒ(&Pé´c¹"h7Èår”ËC™Î°1ضM«ÕÌXáFãH i *¥2Ff’&UèPO3Ç–-°]CjZÍ)Öy8œò\ö OD …ï|绘×w o{ûûX¹ÿRÎ|Ùó(öv1zÿv’Ä/å°\MÜŒq\M³ÕDè„8l±ãþ{©T ¼÷ݯᤳ>ÃE~|ãRÞûž÷ƒ\|ñ'šßK}r  †Z)¤´3¶ª2ÄqL>—±r“$Ó•MÒxTŸœœ¤ÕlÓß?Ûvð\7'ÑFE®SÀ²¢8F)1ŒâMoyˆÒ´°|‹Ì•ûÉ¥±ªuÆÜŸÑE›‹¿Ì„fFwÕu]lÛÞgƒÿhŽ/3Gñ$‰Ið|(>Hêá&bi õÔÛ(•«¾?g^õ)…Äòª”ço@H¥©my5H‡Bï!!÷!Y@#‘æ*õÇ*Òô)€}ã¾Ìþ”ÊšF#+âæÀ™'6'i­g;·æâ±¿¾RÊٚ¶÷ 6Ø PÚlfÀêÐ}4y$,]úû†TJe¬÷©)¦ÍçÐWŸ e«h¤n…ipU<&ŸÿX‡"¥NßóqÊ¥l27÷[>ιÐà8)]] öìÉ15åÐéXñ\mLfèÜn·ÖÜuW‘‘}}’¥KaÉ’Œ ñ7¬ff+î´›fÆÔŒSÆÆÇèêîÍX˜NÂÞú}Ùs8S{ ›6ý–¼ïk{ÜRÎùðkh5ÚÄqŒR†Z­Bt:°*-ÛñÑÚ¢ZëCàèßq1J`¤`lbŒb¡F!_FÚ%ÆÄXÒÊ[©v€ãµˆUÌĤâàCVó?_ú8gžù>ü᫘šÚË;ßýZ ¾M«]§ÚÕÅÞ] º»K$´Qq<ëT©h \'‡JCÂNŒïû¸®E'(¥QJe:¨iJe’qlcÛžçS(‰ã˜ ã8–åL_C3ëøíºþ¬¾¦RY{¹c;XF`ÛVÎ#:í6‰%©•‹` ·ß~]Õ èD!Žg†Úí6Ý}½³.ØJ-lé`Y’tZŸÕõ=”!I•A aiáÊ,ƒlÛÆÖ»ïâÕo}3& èÄ~ÉG …´${GɫĉÁó<6oÞBÐ1´ÊcÙÊyh`Ûàãù®#BE ©XE‡V="h7¨ôr°u;·Ü͵ßú*«:’Þ•‡²dá|>ýã¹Ï:–÷½÷=¼ó´·óî׿ˆ{nº™dr Elذ<‚üÐ|~y× óZ>øåÏ¢LÛëáÝÿø.žwÆ \üŸ°tõ"^ùºSH,kVÑœØÍªåÏ€DÑŸàÚs?ÄÙy a½ÍÈm›Ùôƒk9pÝzz‚„žB!*ˆ0 Š,9¶;Bâ86B,Ç#²,Û& ±J T`‹ÌŒÌó0Æ$ RJ”R³@Gš¦ÙȱHµÆrlrŽ‹g,’$Ás|¬T!uH%çsçõ×rÙ·.aAµÌK^ÿjXºœÅ]Á¶ÉIl¯‡¿ÜLPá„cŸÊ[ÿá œü²“Y}ð –ÎëgóÆ|âcÿÆyÿï½Ä9ÍÊ5‹)V|N~î‡yë;Öò÷¾Çxhñ¯çüÛï8ï3¯Ç–cõIj rl¹g …\Ž®j EJ „Vd ¸Ïq)‹x¹õz£`rbŒ¤T*3Õ¨m‚0OW­F>¢ $_,àä|Œ€DÅ$aL¥PdRk|ßÅŠNØÆ ­VmÛ¶r`Ò&hMÑÛS#!ä›ßù^¼ ¥6qÅå?Àrî¸g3§v2®9€RŽXíŲ–'‘–ƒe9¸®Mö}´N8îÔSxÏ;÷pÎ¹ßæ›^Éð}-,ËpÁŸç}ï•J ¶©TÊt: ž—C i[ËÁu=ÒT#¥AJR)R ,GÒÕU%ŸÏOßC‚T¥Ù¢‘¤QˆI)@b®ƒ‚(h`L)mSØŽ! CäϰσªFƒ{Ë.»,“2yþÁ…Â#Ù/s…³Û?Ò}í1f^g¶¸ýs2&Ÿ÷ßÖ­[ǪU«(•JOж߇•+{G ÃÆ|^P~„÷wšÂÞQÃä,Y Õª Xœc«þe'î–[¢Ðw(B84vüŒpê^„t0*¦ØÂòö…Ñ!:Ø¢CŰM9®þß‹g ““0:j‚ ÙÀœrÎë7ÎÅãú¥iÊèè(×\s 7ÜpÃ#Îûûb¼æ f{­5år™µk×rÐA±|ùò?i¾õx‡ëŠûTëL`húûÿ¸ýj*c¶gÿ^¼æÏŸËß³÷„ea•» i@»ª¹â> V ©IQ–Á8ö¨ú…ãjµ„ÑQwV à/ ¬FQHtÐZ0:šã†<ÆÆ$6dÒO¿½ÇX•R"DòI‘±S]×E+Ñš©©:…|…‘‘al[Óh„LŽ¥|üc±ßþU>tîYŒOÞKH|¯J¥‘G!BfíÁ==UŒ²Ò' 2¬N§I¬a¢Ða7çãå\lÏEO·±Š|ߦLÐ?0@;°HUL©”CkI³¾ƒ®žåüû¿¿›>û\pÁoˆ’Ïò÷½×®&×wiuÚ¸9E«Õ¦P(â¹9Z­6Æ$˜ê@'l£”"ީ֤©"M<Ï£/ Y›¾¤iBš(¤°Ñ *•.Z­6ív€ëzHa#%ÄQ ff2/ÒAµíð=ËDQÀÔÔ$]Õ –€½#£ä\›r1Ïøø(N®ˆíHZí˜\>G­VÃõ¼u·I´³ žV Œ J5F(”Ê´l»KeÆGFðkdÔæ‡—~—C=„B_­©QB‘)E1—Ç6КšÂ.{÷L$ ÃÃ#D ô (•’xûxVÛö0&!IÛQx´êžï³wb' ì`é!G±tÁ¿ºe3ÁxB;¶¹ûÞ=¬Zµ’7mx*]x5ûM^õŠ#™Ìáô”Ã3g‚Z•0WäkŸù4/|Ûiˆ\‘x÷ͱ{P»'8ý5Ïâå¼’}è=Ô"Z»Øqç$Õj•Vc/Ê(>sÁgxÖ Ïâi/~ì&šl3>:É/¯¾Ú îúÞ¥¬>x?"BÒTã•K™yT¨˵1IJ’*Rc°X®ƒ”NÎ 3Ö™™X:Ž3ë^Z©T¦pEª©Ñˆ0Á±$Å&ØR`ç\n½á—\ò­o²fõj^òŠ31ÕnD*Xºf%×\üZÅ%ßû ÷nW¼íïcç$ì FøÌæ¾ûïäꫯ¡»gˆb¹ŸvõïåðGr¬4Mgó럿Oþ8‡ÿ¹œ¾ë½]U¬|Ž__{-IØæèçG85N3jãVs´'”Ë’VL­\Æ÷|“Lì%è@­KðìGÚ Q³IÁÎcK›¨¢LéD¸˦§Z£D”+Ñã D¤ ×pˆªò/}•»o¿‹ Þ檺àà5ƒüýI« I9î…ÏÁ;t-Œî¢OP¬ôpÓϯæŽû÷òÑóÿ‹æÈ$jWsßû~« yûéïgÐŽ¸é+ßàÇS“´ÂqÇ"Ÿë%Q†{ï›bùê}2ÏäÆ_‘ëªâ/_ÀàüAN\½’×_Ïö-·3µãNV¸šÚªý Zƒ$dl¢IjÅ|…½ããaãy ÏÉc¹6–ÌÔ)ˆ8ŽÑZÏNÚ:̸l„‘¶e ‰"ˆb$à/bšu~öÓËùÁå—sâsžÅ3N>‰¶è¶ëTú2¯¯—¸ÙÔbÓæ-¤ø”µôìhÑžˆ°T“þ¾.n¹õ.Öî·žJe>Vl36¾—³^õj¾séÍ8Ž!ŒË¼â•ÿÈe—ÞÁSŽ^È¿þëÙLNŒ!„¡¿(‡eËqé%w±mÇ=Ô½šf= ÐídE«•éÏb˜þnI’R(dL¹ èg` P ~έH“Œž¦1qbDÖV/¼Z'XŽÈZéÓË‘ |ÛP­–ùåõWsäi§áTKè0â%§¿œ/~îWXN‘w½÷Ý\sÝå<ïÔ ì¸DÄA‹B¡ŠÖš¨¡À±hªÕ.T¢Ú-úz÷c×]w°iëÍœñÒ3yåËÞÎè®I®»æ›h3Å’%KPÉ8qÔ P( µD +Ôm2Ý#¥IáºlÛ& QMß.–´l;3±²,Ù¢ˆÐ‰BM˜„€Áu àHÂNB¥TÆöy‰å–)DѼÿRâ±›©Û>Å¡c) Ž”O Q+LЄ¨‰(”ÁŸs7zL~v©Û1ôöæÍËòO hé1ô4›vdÄÐÓ-æÚŠŸ°ß#{zz8ú裩V³ùןËIJ)ƬtÀL¾|¸ügLÖÅÓjµÈçóäóù?›ÃÛí6ívF¤Éår‹E\×}X`5Š¢Ù<^.—6‡Ï€ªõz}ð-—˳Ĝ‡š‡´Z-Ò4Åó<ŠÅ"¾ï?ä9ÍÔóæÍ£¯¯Çqö™œï8°º~}& 06Û¶=ð‘ÉÔj0o^¶ò‡ŒÖ¹°€*±¥­›x¦E½OâªÆè¬ÎY×ê\í ‚ÈCS¢X*±åÆÛøôÏeEo%Õ*íN@×þ%Êk9æE§à,~{ßtÝ×fÁêýðb ®óý¯|™Óׯgϯæ»?¼œï]}3KôrÇ=wS«æÙpü‹¨T R±p 6;wî¡Ò=Èe—]ËЊnj¾Ç7?÷%\–._ÂÂÅK8øè§áî¿?Ë>€å-áÎ;7ráO¾ËÓã“Z¸„Z_•r eI@à{^Öo2mT DqLš¦”Ëe’$™ΰÎfVÈ3c/á: ¶²°´ÁÕdŒÏ0æš«~ÎÏ~ò^~æK9pÃ3 ›ºzЩÍþK—c…1»·ïåïz?gÔwñÒžÆóO~-tF)x¢D3:6…VvqñžŠ¥2S’F=åiO;Û®ñãŸlã™úøð9o¥«»L«=ÛòÉ‹œrêsùÌy?æ’ï^ÉQGŽ-\‚ MÎøŽƒ©5RXh•â8J)Â8š\¬i­-C'ä\‡R¡'¤iŠÀ&µR@kƒÐ Ïsi’Ð ZxÒÆw]„ À(<ßfdb’0î°û׿¢gpkÖ®ã]ï|Ÿ>ï›<çÄS邉Æþá5¯`åâeLìÝ:Dëˆ4ÔŒ¶¸üÇWðö7ÎÈöí Ìc銼íçsÞ%¿Å-ÁYgœÁÞñÎ8ëزÎèž;‘´°mƒÖ ßÏ“IÇJ„å!¥Àç¹Èi½X!Ä4‹PbŒ˜ÖÀ´I’t:IMéYe2y•hl+c. ;(€Ð4Ûc8± ž,ØêÌ5X´hÝÝݳÌÍG²ßL‘•¦)ÅbñaÕÆG£Ñ Ýn#„ T*ÍŽÓ·ß °:S`=\q¢”¢ÕjÑh4˜‘ЩÕjXùÍfsˆ-‹”J¥Y3»‡V[­¶mÏq¤ýp¦xÍårO:÷ÍbQËeEØø¸¡B§cCC¹,Èå²ø±ñL‹5Š2FLw7ôö>ùÐ8¸äŒ‹EŠ |žTýsBâäú(ôŠno¡n'Øs-Â+aUæãåæaÉ'FÀhE5Pa¯6éŸPðﯧrË^\j5C­¦R“9K;OÌ)‰ŒW,jâX09 JÍ!ªO($dYT«U;ì0Ö®]ûˆöQJ155E†!Èçó›ÿf˜¤aÒhd‹ÞÅ‹x>DÌäð™EÛr¹üÀêŒ4Adzy¼V«Í«ض?óÇ1“““³Àj¥R™%^üáq„Ìx$IÖEY.—X9ÖLGÜ#aÑ>¾À dÏÄD& 05•É÷d÷G–¿çÍ˶™kÿÿS!—ÄXt¢…!̺äö¡\fŒ"I&‰¢1\7ãæÀÕ'xa£»;[GžœÌž»0üß·ãÏVÖëÙ³Üje:ÊŽ]»î¼ÓgãF߇g>žö´láäÉFxxLÆ¿b©‚6&cÕábðét U.Æ”Òܶé×üfÓÝD!|ò£¯ä°#d÷ȂΥÊ<’‚ÈB Nàpû–]œ}Îw8ú©‹X±t9µZó°{xœ¯_|%¿ûÝV¬(јTtõÕH:!½5ŸNP'Ž#¤ÊÚ-Â$ÄA+¢T¬§‚F3Å÷*ŒìBÚÐî4±]ƒcÄA‡sþù-l¿÷í|þ¿o¥h€÷¼ëuH»‰N;ŒN5(ºð¼aÐAé láÆ ÛšRÉÅv-Œ†‰±HÉŠïû$Z«“„Œã6ÆèîéÆMF@Œ±-›b)™Î@5eefBKÒ8Åö|§€‘>ùŠ%=Ú­˜mÛ†YºbÚH†G÷âxeÆFCrö½ýÔªE4Ûvð "#ºØЧ1eÐbeж ÒÆ:T䬈[»‘®®>–®] ¢Ø IDATI¿VAhE3‰¨æ»q°±m‰“7hÕ¦99Lkb7. Ã6yÛG·A( â„v:lËA"°=‹X…LÅ1åR/¿Üƒ®ýÎ÷øÁ×.b@*ò„h7Ç ÞüJnÝü+”=üb^i/»ïÛFѵ©ö-àŽÛ†ùÍ­;é:\ñíÏÿ·g!ˆ8þÔSùìgÎçS|œË–n£ê#˜b™CkÝ|ý¾@qÿ>Î~ÿ{i o'i·¹÷·›ß¶“Ûn¾ß]ÿ+º*Uö?êPV{$û=ûT¼ÁùÜzÕuLîaÙ’e q) IPÍ娇!Úu0ÚFÅ6I¬HTE j,iaŒ& Û/O!Ÿ'Šc¢0"NR$¦æåiŒãøèHóƒï^Ê-oã÷<öRRZ¸å*Q¡s‹–¢/þ÷øàGÎ'Ò!ï{ÿ¿põÕ×ñ_Ÿ}Ak'N¡Û±ùò×®à™Ï|©€Í¿»žÿüü×mðÒ?×NùÁgþü.zzsìÚqŽ”„6IÇf¼9ÁkWñò—Å…]Çß4Jßàþ„ÍaüœA"1Z!±QqŠŠBò¥Z‚(ÆõlÂVßÍ#´…!ŠT¢ð½:58–ð,¢¸ƒÑҲж‹Rd"±=WdÌpc{ -XÂà~ë¸þª›ù§³¿É›ß~/{ÝyõÏà/=…~÷ûظñ^~öÓ_óoŸÉ‡¬âsŸúž£Hm‹®î¥\ÿÝ«ùäG¯åÝox ­ñí¤iŒÎWÙÙîŸ'8ù…§rÇ–;9â¨ýYwÀÁœyæñœpüÑ”ªe$!FÇHìiF} &D’ S B#…Cš¢D#'çŒHË&Mc”ÖØ–Cª@›Ì`EFc°ÒCMËXÒ±%J§X¶~RNX¤” …G™Ì ¥Ri¶5î‘°6ËåòláÌ>0Î,®ëΞÛÃCJ‰ëºäóyz{{g ¢ù€‡ûôœf¢P(ÐÕÕ•±ÛÁöª¨}R––,…þ~Áؘ஻4?ú‘¦V P. †==‚rùÉ«Ý$D‘œ¬!ML„ý„Sÿ'ÅôDì|ž‰;¾C§±™t¬®Þ§âûƒHùø'…¦)ÚÄ¢M)!)Ì«Iý€Ž©V­c Ef¬R~B„€žÍ¢E†ZÕÌõûPd¦½Î#¼·]pŽíîî~Dó€b±øˆrøŒÆëŒÄÚŒƒ1#í3ó93ïi­©V«³íù3Û<Ôw) ôôôüÞöÔ€rfû}`°³Ž’JåPõÁï9Îß&ðòèÆ7‰6˜c&Ș¬…}æü´Žhµî¡ÓÙF­¶Ï›‡e¹s?ÜøÌU*) SS0:š¬ùü£×DŸ1£›˜ÈÌè6m‚ûïÏôÕ•z@zr2G½îQ©HÖ¯u¬\ù·Û$dOµ´2¸žG±R èÄx¹åj™ŸüôgÜxãM´n'?÷$–/œ {†·a„bñ’¦ *•~*µÅìÚÙ F\ù³Û¸;œÒ½”ñÉ”ýø êõ,]º„OúM|åKWòù ¾ÌÙü ca‘*J~Ž$qñe@Ù/„1nѶ¢¸ƒ° a!í"EÞ÷²é²®#E@_w‰¯|ùžqÜùô§¯`þ‚ƒ9ýÔ#iMn¢·{€¨cˆCI'8¹ÛMA„t){ÝmÐ(,¡–ÌP£Çu¨·:ø~ŽFs’b)Gß@{FvSoHrù|ÆF”6I¢h4êXÂAR!4I’â9Å\~ZG`YA'¥Tìbã­¿dÙòE $“Í:Žïa[y–Î'_Î#µã;tâf»Ž´2WHtšéò›žZ­(¤¥¤í @¥ÓVäòeoqýO~γO= ¼\ƺŒb#±´OÁÍ!uŠgbÚ¤qLÎ1 u—ð,¨DlãÊ*(¡’Ï‘F ^¾H§£¸ç®í”{\ŠÕ"‘piÄP±‹´wîá§~ƒ-×]Ëò‚ \.±hÍ*Önx:ùƒ×sÄúÕLÝ{—}þ‹¬=äØðt&ï¼úmwqåæïññó·Ò7ßá £×òôßÇWßÁŽÍE¾wé¥ÿ?{ç`gY¦ýßóö÷ô3gzË$“^H!MÐTÀýD×]ËZÖú¹¶µ»nQW…]uUìˆ" Jï $H€ô ¤N2}Nûû|œÈ·nqut®æü1çÌ™÷}Þç¹ïë¾ïëâ‚‹Ï$ß–$ŠÆñª5L;KXq¸ÿÙüÄ£|ô³ŸàÙê!–H²°÷ ’BT‰xæ® l¾wWù{,zbç¼ár¦Ï\LÏe}Œ?½“ï]ÏbMaÖÊ¥¨„hªŠ.$q`¢‹4"ò‰%xnˆï{%&Ž<Ï#›ÉR)—ðü€T2C„ Tsiïì%˜%vÕâÎoaëÖ§yãÛßÞ”gÓ{Xºrª–$tF¾Ëo`ÕªsiïËsíOîàþNÇ0Lžxz'o¸bç_|“¥ƒì$—^z:ïø‹osѫކ¦%(Õ&PDÄßþÍŸpÆÚØ&t·Ìdrb„¡ãGÉf’”Æ'¼:DNµÎ¸€÷½çí<°þöæwñÀýñ*Bññ\¡¨Ø‰Q€ŒBb[5M@£qšj`fÒ „¸õn,ÑŒåJÇ©ÒÖšcrì8– DÅTL ]EÈ5ËHeá%Npï][ט>w)Õñ!Ž—ÇH¼íU9û§ž.#ÃÜ;€E@BM × ˜1k6xì‘gh·2¸~¥g W-âÆÍœÿš‹¸üô—±÷±û¸ñú_ðžwÕ«{¸ú»_£­»” 4†¢ÄÒ'ðB¡ #BÙЕÖUÕ$Š$ž/°9! ŒH$sÄA€P”FF‚n Ia5~† ]ÓMâ8"Ì ”˜Ð^‚áo¦ú{%^¢Çqضm>ú(“““ÿ%!E}}},Y²„þþ~²Ùì‹6‘yi'` ©€, 4­AžærâD ¹\c¼è%í2*Š]@IèŽKÕN"Ô—±* ÍîÁjYEÖ¯Q+Ä?ö Ê1D…SH$§¡ªöï—D!Q§HÕç-‰–ŒI†7’+!4 ¼PÝÖB4’IÓ”(ª˜’÷{á·!_lðRZ@c"©©I!“Qèî†9sÌÛ æ9µ£äösµ( ™˜§··›¾¾é´´´àº~„©TžJ­Lq²†P ¢HpìÈ Š’B!`Ó¦-Ì™o}ëÅtw÷R*•¨V«D±$J‘ÍfäSŸü9sOúkO[‰VÒCSS„‘N¥’˦15Aû@ˆ®¨Š‡ï{˜FŠ(@Dè{DQ€Ä'ßÞJ^j|åKïäïú:ŸøÄç˜=ãï˜Ö¥‘IØH†>¡ï£Ä‰DMS|IÕ°,“ ¬¡¢ ]Ó01t›ÉÉIÜTL,-C,#Ú[-E‘ \éQQ¯×éííÁó|!Qè.bPG×4 Ã$Š}&+„G¬ºd›md䣯!“•aú§7“ËT a$pk‚šã`˜6šj¢*E‚7ÆbbC"Ä11>‘'±M …»¯ÿ9]=½ôΟOàÕpÂÅTñ#‰¦ÛÈ8¢^w1mU±8rø H•ö®iè&ĪMl$JHÚR¨WŠ #-Ý@•E³PÕ$©DŠo{i©òþ?'ÉÐGC[>“‹gÑÒ3fB½F6›'³úeúNbËõ8:ãrÛú»Ø3®“Nüà'ß§m^'㻟åê›~Ì¡€Î¼à³øÁäÞD‰D>OàL†!¿¸ç>>ó‘‘•:v9$c™¸“Xv’}{v¢ …Ùrí«±hÏ~î¾å6>ýÞó†Ë.`ùå—жòTú¥Ãñ]ûÕ2³Î?ƒ@Ô‰Ê!M±BUTjœšKs> œ Â†v aÓUòƒ;)QU [Õ^ 5 IäsÜ{ãMlyl+ozÇûf‚u罕ñ:¼çýçñÞ÷¿“T2Í¡Ñ\uå7X²ø\Þð†+øØÇ¾Ê¾}¬\–ã7–n"B±Ñc,[>Ÿ%''Ùñ¤ƒnÔ0 sÎ]À[ÞrQXâèð(©d×u"ć?úÞýöבРü($ô¼ÐE ‘*8N ƒ— Ѽ´©¡h6cãÃ8A 3‘¡¢k ¬æˆÕZ­ÆæÍ›ùæ7¿Éàà ™LÛ¶Ñuý9£ hjœzê©X–Ekkëo¤{:…ÿ9Tµ¡·–JÁ̙ʯ˜QýòõK^;Q(`5!U oô”Pb]/Ñ`T‘FOÏ#ÓŸ‚gn"žoàyæ¹:…ÿ5\×ehhˆ‡~˜-[¶0>>N¹\~nÄß²,z{{éííeÆŒ¬X±MÓæÂÆTÇÞžFUMPž¬ãTŽ£Ñ„¡5ƒP_à@¨áKEBhhZ!ò4 mSçü G¬6 Ò-+ PAcŒ?~ÛÏitªîÝ ÷ßÅ¢¤¯/¤¯Ï%“qOH´4ˆÕÎΆl{{£ùá½¢åó9¤„Jµ‚ªd2Y4M'Œùl†ƒ‡S­–˜6­@ÆÔ¼€T6‹fD躉¦Œñ<Èd%¿XG…|ýk—‘Ëi9º ]Óq}Ïõ:nPáâWŸÎÐð³|îïoä[ßjeÞ¬v2Éž« ©TM3‰âK1ª š* ”˜ÉRS7°ª×õBáÈÀ^2ÙNÖu:þðûøÏ¸òªðå/¾‹á‰IÒI ©dò6ž+i8e©~WÐuÃlH Ô2 :¦™¢ê–iÊç)«ª…[ (•'é›=ƒt:ãÔ†RšÄK¸(tMÁÐ TU! bM! Éd†(Ѝ»uZڻعksž„ã„x~EQinkÃõ‹Të1#cdÒ9¬t–„T0lÓ4nä(B £˜ÉÉq„¡6ÆŽŸXÕ1L-”xc#<½ûIÞþ¾wғ蚉:B†‰&Ü0 Ž%ºiá¹ÙB3VÆ$ßZ`×Áqj47åqëÒ´šFÅ­“´ÓÌš9?òpŠuòÍm(µ:?ýç+ѪFBaõºå¬ºä,’³:¨¹UbC‚!#‰ïë¤z:Y·n7_yO?ó +.\‹»k‚¹I[[›«oº ?!iM§øæ>Npø(Qy’JµÂÑCÇ,Mpíõ7ñê Î *Õ˜8t˜¦|J–´@1ÈgrT‚:ŠKÜ“cþŒ5Ì]y2Ûo[σ7ÝÂÀSOpÁ;®`éůdbýfžxp#!ó/<ƒdÂB†8>v2‹žÌ¡Ê!TÂF(1B ô ‚t6ƒëùOG¤l‹`²H*ióÈý÷³{ß.}Ýëè]°€·½ëýŠ ˆ$ßþÎý\rñEôö¦›˜ÄQ¨rÑ+/ ж?¹“Î.“׿þ•ÌšÓγ;÷#TÕöi)$øüç?Âö'žÅb,œÉ¢Å½‹IÚ*ÙŒAÒ6 ½v"†FÂ2IÙÅb© ,[b¦õõðo¼•/üã8ÿìÅNYˆÐ ŠB§QHH¥“¸qH)DªECÑ}ÜŠƒ®ƒ™L+ a,P±¡LÓ •ϡᑶ¨Ôp]¯Z£\.âÖb©rxpœÛîœâ`©©l¹ãvÆ»•0iqʼéÜð½½ÜyË­üèçÛ1šÒ,›ÓËËfO#i„4÷· 4uÍåï>ø6.8ïí\õÕ›ø‡¾‰™#5–.^Æ­×~’»ö`#™vìØÁþýûeõêÕô÷÷O]À)Ìžíqê©UæÌl6ûœÜƒ” ™d²1]6Õsšë9(BÁ¶ " ®S'ŠëŒÑu¡HÆÆG°, 'Œ14 ìãº>Ž3::HÇ477sïÝ·³yó¼ëóX½â$ÆG†He2 ÍVÃLpøÈ1ºzú)Ujüå»ßÇæÇÞϧ?s _úü»˜3»'¨R¬I&=êÞ™LE P”†¶ªšXºŽHIß#Ž"â(ÆÐ5tÃ&F§X¥ ›¼ï½ogï¾ýÜuÇÓìÚ{Œóû0S:££c$l MO€´RÅ2TÕCUB‚0 C<·ŽªZ†EàÈ(‰i(LN6¾W:•äо}èZ]Ó±LMSñ}]Wˆ£7dÔ.êƒBS7†iQ)WðÉÎ=ÇijžA&Û½÷Üμ¹³øäs}(j M‹Èd,’i‹DÚÆÀuBâ0l´á‡Ó°QTA,ctUGÑB×k”4“ÇŸ|Œ…'/"Õ’§66J²ÐÄäD…XA³ð=)¦¦¡ÉßuA4Ô5;ÃégžÂ£_¿‡m;vqáy§Q©’Ëçq«5\ßkà±@AÒ\èg¹æËÿÄÁÇ8}Ý©( ƒ5¯:³¿…by_‘hBâi=(àîÚÂ÷¾|JœæÍŸø mßË–­yÏ»Ï!<|ÝÇùÅæÇ86Râòe‹˜<°‡›n½°VçðØ8#Åþ‰'ÚÏŽ§žæñ;o§UÆ´¶·£'’,˜¿€ésfÓÒÛAÁ+O`7ç)»u²¶ÂªË/bù’E\{Ã÷¸æ;ßæâ± ¦_x «ó6üì_);e–]rBÑ XFO¥+qüËÔ1-EU4Ìm4M£Ti˜ÝØ'Äèa'mžÚô;ŸÜÎů~ÓVÁþl|ü6lº•G·>Á_¾ýo0”ª°QH*™l†b±ÈŸýù«™,-%™Œ‘Çþ[èn›Mq²HD•#‡÷ÒÑÞËIo|%šn j>µú0ªP.ŽÐÑÚC¹8N.“%Š"âÐ'Ž"4]#LâxB Q §>Á¥¯}kÖ®¦Þ»‹'gèï¶Q“1q­FKç~z÷^-æ`®úòu¬\´„Òž},™ÞÃ’Wž È $mØàz¨š`bb’¦ÞnJã#¨šŠfèÄBotˆ«*H5 Otm7:ÿU!Q…$‘É ƒ0è›6 M7Ð4뻄a€ª4:^…hŒ16^+¨ŠŽ¢iº…®’éBš©z¾Ã0hïhçe«_Æš5kèííebbâ9bUJI2™$—Ëý·®ÃS˜Âo›œ„„@„|É/+Xè©™"ãØ>âÊ(Îð# %FëR°  þ‹CRBè¢xXªŽ’hFQ¦öÌç†é´ Ÿ¨ª|AIL¡@&«Ñ\0¨•J%9e^5…ça -ZDoo/…B\.GÇÏ™= ±eË}ôQ¶mÛF¡P ¿¿ŠXÂó~¶V3Qàøøîa¬tA–D—= À+"*Ch^ÓìÀ²Ú™*f½bJãyɤ ­­Ñ©Z.7ÈÑßAãã°oìß ÀâÅ3gztuär扎Õ_æQ “dϱ‡!¦m£&µºC­V¦µµßsq½S ;¡Ç9yùËpƒˆÁãcXv‚\ÊBS-žÞõ4w>s‹/೟ú££ÃlbD*¥r™D2žgža (ºý3úç²hÑR¾òå/ñš×¼‡/ýã-¼ñO/dùŠEèf‰JmdB¡L¢¢#ã$N5"ÖHtì”@ÆBQaH$ta’JZDT«Ô}¿ûÜGü¿\uÕµ|ìcA¤d°“j•™D3šH #®j¨ Ô¼¥R ÛÊb[)„¢b:šªã5„ªaÚEb¹BÒ´ðü†™$Š<\¯B"a?ˆˆ#EÑÑ5ƒTª…Ç·䟿úCŽ9ÈÄX…8‚¥Kfñ©O~–æ…¼û]ÃÚ5ËyßûÞIµò,uoœ¦\7~,©U£†éMRWˆ‚ˆÐó±õ†Ó´‘0Š@‘1iÓ@HˆCÉJ‘£CƒœÑ…øõ*Iib× @I%-‚À%Š"2–F½\¤^©`Ùº¥Sój,_y*Í?ÝÈ~ôÖž¶˜ ”AŒë:èª ©ë(¨Xº…38Êm_º9R¤§»Õ—œ…c«¨sº‰bCÑȘ‘Êd‘ÉèÏÖs÷Ý?&Èëœõú‹é8ërö=ü9ÌL;9EcË]÷qÍm Ž‘J)ø¥½Ürónhä; ,»ðîÝ´ó^ÿ*ž¼Y™äéG6²jæ v ìåÀñ!¶ÿì:šÉì9³Y´òTz×®B(5‚ÀE×@Ìl抽›[¾óCnÿÁ¬-;œ´n-g]p[ï¿›}÷ý‚ùgŸ‰ž³8°š‘µ’ÄQUK‚¢!H! ã]Õˆ‰ˆC×±…¡íÛØ¿k'g½Ži'-×aËŽ´ôd™6m7Ýv¦¡¢*†ÖÄãOÑL¥6BL•jÝGS«šÊÄä8…\±_ktK •Þ®.jNHàQ«{äš k´µäÑEŒ[«‘´²èBÁu«XF 7©¸ur¹,±ˆ0M‘ÑaR™<‡žF3L¤ˆpCK·ASB`é&ÒIÛnµ†(»äÍ Š¦àE™¦õzÚþã 8ÎþÏ’Œmnýé£ ìæ^ë{TÆF-6õÕ Hôõ2{Ö,Ò©4éL–„i‘Lçp]øéÍwsדã”&%ËÏ~5kÖ¬àl;„t–MßùËVÅüãåW2éú<»} ;ú0…äøÄQ´àè&w=~å`…7¾v ¦3É•Ÿþ º3”‡éé6‰Þ~ÔÖn’ÉZg…l‚ˆ„P1 B%Æ#¤¦¢è:B¨(¾R€± *ÔÜ*Åòq$R’LØh¦ŠP4M# ÆvŠ¢4Ldƒ\U„d ~à!ô:aä Ãß^'g ¿.‘¨ªJOwóçÏgÆŒtttÐÚÚú+޼¢žŠ¦iÿA C $Š£çŒ7~S¨ªŠišÿ#“ª)üa$LBшơþ’GC@1{H´®Á‰Æ)íD†ªb¢@ªãw˜ÅHgQ;†m[ØÉ6TÕœJøžÇý2 º&hm´w4í…½¶ª¢ÒÒÔB_w†£±NOéLáL&C?mmm„aˆa¿bÄÇ1Q‘H$8rä:tˆR©ôŸ<3!axB*ì·Ô©øåß’ú#†¢€ÝB,bêå2a<&‡Ñ¤@ˆ¿wMS¿Œ(b:e4%…*¦Æÿ_,ç³ç5 >¾Ÿ%›µT˜œüÍ;Vã*•†À¡CÏ“,Y"XºTbUmœùSéʯ!VM«Á<~€¦ªØ–çÖijÊã8.--Íd²Ivï;ÄÏo¾…¦¦fŽ%—i¦­¥Àm·ÜË¢E39kÝZR)ƒ„­‘ËÚÄ^B¦ Ç÷Éå›Pu›JÕ!ßÔ†‡¶pÍ5wáy>ú‘×sÕUŸä½ù1öí;Ê?|á¬\5›ª#b”‘¤^­&B1¨;Û6ðü:ª¢64F U1PT ÏHÚÂo˜ºäÃùögÅu×ßÄÛÞñ:Ì‚¡ëÄq?2RˆßóˆEL&ÕŠP8®K­\CUù¦á2 IDAT#¤Œ±,ƒj­„•¨f„ëVÑ­'GÓtŠÕ*qSsl;IIÔX¡Zôhkëâ‘ÍOñ†7~‘¾¾.yåeÜpÃÏyâéIÖ0ÿòõïqá+ÏåOßøN¾ÿƒo1Yú"]¸†¹³{°íê¥"Цá¹u‰v2Åøðqò™4•J‘t*IÆÄaLÒ²Ñht 'Óiî¸åZºZHµä9vàY×¥µ£Èõ04(vÆLšDáye*µ Ú;{ð£:f"ͼ93˜Ý—ãþ;ws÷wpÁyëðêcÆ4e38“%2™Dp×O®ãÙ}Cœ|R/«/nÎ$ÑœÃ\¢z N@è¸èZš=lfÇÝ[)þÏ.£eáŽçÖ[6ò“¯µ¸—{ï¼—âøY K§7sé«^I¡«“¶ÎNÔ|_Üu/MÓšXûòÓ)´¨OcÖ¼×!ü+á •É¡lš§¶>Áîk®eæ¦Í¬yÅy4Ïè%öܬ ìThkÊñŠ×\Ì­å›ùáÕ×òºÐgé+ÎfÅé§s×í· 'l¦¹§VdVÏlFÆ'PU‰ç9V†ºã`Û¥‰I¶ aŒª€*bv>µ•úÈ(Ë—/£gÎlˆ$Žô¹ýCtNë4n¿ã¦OÏДnf|ÔåÛßú)§®XJ¡šš)I™iÆFGhmî¦Z¬Š t]'ÝÔÆ¡Cƒ¤3Y K!ke92ø,]í-lâIZ[ÚÈØ|'À“!†ÙØ Ó@“ (˶pÝ:Mù ““8ŽCZÉúGËôöLÃ4,š²MˆH’Ìäxàg7±dáBš µèPgbàÕÑqž9ø U/dàH‰3ÎZC:×FǼ6JÜù—oÆHª„~-Ÿit™ !ѸZAQ7ÀjÉÒ5­ƒsΛſ|'ãÅA}d#ZÎâäå+ñHñíï]Ç –àœK/¢0½iD´tåЂ4´Ïå’·JnÙöO<^Œxú¯:cgð/8þÌ‹Ev•ëز etSUÉ·´ÐÑ?žyóèš3¼M70ƒÝ2Q|‰[/aØB€¢)TÊUêŽC:FÓT„Ò0šó|ij¦Õ0óm4µaz§ë&nÝ# ãÁ/Å#EQ@Æa@ÇLñªÏw̪Édhii!ŸÏŸÐ¸ýÍ»Ü:Ä®]»8zô(Õjõ9rõß“¬ÿÖ½7ŽcE¡³³“µk×ÒÒÒ‚eYSäêÝÚÓH¦ÚPÃÕL0Ó6¼—0¹*Ô fó2ˆc¼0&¬ R|;Ö0”f°5Bð¿ƒÄ",á£XÉ^ ½“¤£çq,˜˜LL*ttA2ùÂ'XR ÏÆ«YÄa„¢L«SøßC×ut]'“ÉüÚß›={6]]]«VÊÛßñF>ùÉï3w^—^z míM”Æ\©£ÃÔJ“ds&1 L3K, tÝ&I“Îdð÷ÄD½G8ŒMކuEÃ÷ Œ†‹·¦!A­^'_h!–:Q¤É÷ø»¿ý2—]ú2þú£ï£î¸¼úU§ó™O}–b ®øÓKyë[>Àç¿ða¾ñÍâúë¯cý†­¬^u6<ÈIK—`Q\'}J“¦¢îyX¶AÍ«SsctÝ" #¤’Ig86x„‘ñaVŸq•r=™Ý$ˆ"²Ù$N cP 1¶­ã8%’)EQmƒšçÑÜÜÂ'>ú^ÞñŽòÕ/ÿŒ Î>‡B¶“²1tè=í ilºþöìxš3/YI_‰ÖÿeÆÇ<ÎduY9Nƒj$_âÄ*ECMt‘hY)r”ÝE¥´©PÕf”öi3ùë“AÙx6C¡   UUM"$.ŽðQÐ1HM-²ç•X…ñqÁÈ̦Á‹€X•ÔÝñrH©ªuUâ)iÝ)üŽ×\†H))—ˤÓir¹\Ãûâß«Üu×]lÚ´‰ÁÁAt½á‘ñoM®ÝfA< ®¸â æÌ™C2™DJ9U|ýc&l‹Tb:š¢P*m@ ¢ªItÑŽPR ˜¿³ 9Ž}b¿ŒR>„â”@Ñ ÕÙP§b×EÜuBÚ¬¹¹™0Ô©TŠEC¨Õ~³Ïp8r¶löö€+j$1ah“JeþÃþ6…ÿ$®ÿØûÏú´ëx„QL:•AU4¢H!ã8DQ„i§ŠNOW/+—ŸJGG;º¦¡ª…¦Šm[¡)ßD2¤V/a%5‡"q)UFÉæL>KSSŠ Î?—á‘'eÝYKX¼´“­íã;WÿœùófÓÑ1UÉà{*‰d;aÆuP}’)MWQE(¨BE 6FqQ½¦†Ä* .¥RÙϵ?ÚÈ჻yìÑíìÙ{„¡ãÇ864ˆed2)ìT+ÑŠ¢¦°¬ªš@7RÄhŒŽNâ1š®c˜ L+M&SÀNdQTƒPU7Q5MOP¯ÇÄÒDÆ×þøz¶m?Ê7¿ö4Åa׎-Ì_2‹5k–qôÈ“LŸÑIGW’k¯»…ó.XÅ)˱~ý&î¿ïn¾m=7Ý|'Ï"“i"ÛÚŽ"%QÜÙ®»Là R-v éÄŽ‡•LrÃu×Ñ3cK–/'Ë´A*X¶I"c⸊¢"d„ŠDS†$Ó”§VsQÍcÅ*Éd†¹óÑÑÚÌ÷¿{7{÷0wö,z:» œ†¹ÎàSOqíwD[s'g_qVO ª•@WlðÎæe§†¶±Ói*¹íêk~ȾðQì93›¤`¤¸ö3?`YïV¯9y篥ÿœÕ´®[CzF/õí¬=o=½”êun¼é>.}õTbj¥2ºÐ ÍLG‚Á#G¨•k´ut1ÏîÚOÿŒ9ôvOã«ß¾‡¡ZÄd-$iLï6‰ë|úKÂÊ3#”ÅDJ‚8Y ä:HÐÝQ`øÈ6=´C¼þÕK¹è´eX•!Ra€IjãcTEÌôn–žq:«Î8é3f7¾GÍãÁ;×óÈ]PÚý,ÚH‰ ð1[²ºA„XªŽô •J#AµVÃB¼ÀÇóbÒÉž"¨šNG(ŠFG„Q€P¦t~¢ M¤0´ è}ÿå†îû>´¶¶þ^qõ%ê.EŽãðä“O²uëVFFFâ©§žbóæÍ<øàƒlݺ•½{÷†a`Ûö¯Œþ¥Ré9bvttKZ[[Y°`Ó¦M£««‹îînE¡T*5º¿Óif͚Ŋ+X¾|ùs²Sø£ …Â$ÊÔœ!bUG·ÚŠúð)ÕDè |5¦•a¤7ˆÞÔ†Ð'\åOõ!YKjhÏF!åJ™áÚÇÜAêN%T“JšŠ”²ñžÆf„ÀYoÍ1¬6T3?µÄžG8lØ££‚ÅK$K—²Yñ‚ºÇRR“£u‡£‡Tœ²ÁÚÓ¹ÜßME¿;ù !A099IGGÇÿè3ªÕ*Žã7þ_©Te``€M›6ñøãcš&Ë—/çä“O¦³³óWÖØää$GåÀŒaÛ6}}}ÌŸ?Ÿ®®.ºººhmmÅó<Êå†'C¡P`ñâŬ\¹’… bYÖÔ=šBh(ŠŽ¢ØDQŒWCuj¨ÍU§q>ëÿoîpœAêÕ}¨N UK Rj=9%®ù"Ú§\×åøñã(ŠÄ²lzH¡^‡SNéÓýû=á©§à±Ç Â9çètw›¤RÖ‹Ö¼÷—{óP«Õp]—–––_O¬þå›W|º©©‰À#›ÉQ¯;A@­R%¦¡AW«»ì8Âôé}?~Œ„m291ÂñcG8zì(QH¦I¥2¤Òyêu…b©„PfÂD(Uxžƒ©Œ gáÂyìßÿ4ý³Ú™=»å§ÎeæÌ¹|÷Û×±yÓ,\´˜|®™ÃƒG©ÔË´u6ã¸Ï£^«Qw„Ó0Ð48’¸NˆëùÄâP‚*Aœ|ò~ðý[Y|Ò,N]¾œíÛ·³õ±MÜvç½ÜtóF¾yõ/øùÏbë£ØöäÓÔj>®IÓÌ‘J4“ÍwËwcjM¡EÚ„‰¦eP´426Ð4é\Ñ‘†‘ÄJä8tx÷½÷Û¼í/Ncùâ¶m}ˆeËN¢V'“±éèíàÃõ>û¹wsÇO04´“³ÎYÇ‚…'ówÿu.¸è\.ºäbÚ¼…¿ýûŸò¯×ÝEg—E:“¢Ð”§T,I…Xi蜪~D&‘føØq¶nz˜W¿ör!Ptºã1ÉD)#*®`ê6†ªSÃÔ …¤°¨:’PØD‘`øèqV­\KµZäëß[Ï‘{™7w>3æ-àðÎüëµ×2:TæC|'G¢*©®V #ˆT„ÐÑ¡(Da€išÜõ“Ÿqtï³üùÛßJzÙ *^@«ÝÁðÀ8·}÷z„â"šl¶8ÊîÁ€Ï|ærνôÕÌŸ9› ¿øO?µ÷ßϲE'qÉe—áNLPwêq„ž2AU@‰±1Ð…N(¼(ÂCbEÉåè;—iÓzytÓf¶=¼™…§®@K[Ä(xU»ÐDOk+[6ýW,9} é–~!É Wãб£äzº¹é¾ ä; œºê4œ(äWßÈšµ³ii-ÄEÏáðä"e[&ÒÔhíé¤î{Ø-­lßó » óÊÿóÚgôòÔ(Õ9eA33 N;y6«O[ÍáÁc@BK+*ÉB îÜÀ®ú!«úç’ô%÷Ýú(kÏXÅ×¾öMšÛZŠDÏfñ…Ù<“A‘‘Ò1àEɘ¾b5s-å¤å«ènjfxxŒÍ<ÂÝwÝÁþ½»aLgs;šj y–nb(*q(‘±Ä¶mÂ0F†šš`|bðH¦ÒDQL±8A|B«3Žã†V¯Œ!ÒP”F@%ŒÞ)bõy"V÷ìÙÃŽ;£X,288ÈØ»w/{÷îåÙgŸÅó< à —Ë‘L&ÿƒê/¯ÃáÇ)‹d³Y–,YÂ+^ñ –.]ʼyóX´hRJ†††R2gÎÎ<óLÎ<óLf̘mÛSQá)± ¾_Áu‡˜zKÃñ¡;]QÁH™i|B¼ên¼ÊôdUÏ ê*a,q‚€jèP‹*Ô£U¯Êhq”˜ñhéÅhF¨†xЇ:8‘ƒ{hвFŒ úu,‘CµšÁHN-±ç™XݸQ01²x±Ë¢E!‰„Ö0g}¡’*$æ3ZöÙý´NqÄäÜsù1Œ@à{ ™T3“ãe:;z‘RÁÖ,ºÛ;)—KLï›ÎÌþ…tw6ó•¯|+^ÿ^ÿ†syíë.#_Hqxð0n­B6©6Fþ5 EÇ©MçñÜ:Z£ I¥2ŠÔ$==ý\þÚsøñnã#ùË–-ÅÇ´töîÙËÃmå¡·q÷}C¸î ßV! ‘„ž®4íttvÐÒÚŒ"¹|ŽÙ³û)4ç(r$Óž[ÅuPtZÛ¦‚ñ‰2{ö ô×¼êŽì= ¡î‚Q›äð®}dÓ_úÂ?ñŽ·Å›Þ|5ëÎÞÆÚ3/ã³_ü0WãjZ:›ùø§>Îégnä?ø?½á6mÞÌk.:—ŸqÅQ¤n"£Ë´ºÉÀö§˜7o>É\õÀa|¢HàGÒ9ÆF‹4Ò˜F†je!u\Çåèáa:[[¨}&«"Q »§Ÿ0Œ0u7|âSO6ßÏG>ùEü$W~á}ŒÙͳGFøó·¼'™G‹]ôTš‰‘:Y=ƒf& Ê%lKbv¬ßÄ“Ûç¼³Ï&òBÆKžˆSløñC Õ–-N³öâ˸ò¦ÇxÅ+z¹ø’ó¨Ž$ßÑÌ»>ø×|ÿ_¾ÂÃ÷ìå²ÓO‡‡Iås˜¦…ƒ ”®ã =Ÿš!PÐPTAÞJ+’À÷™tË$ ƒæ'ór×aýÏoeý¯åÜ÷¿ +•A„.•Z¶S—qÙ›ÿ”ýø;Ì]?“þ•+i>ƒ >HÇÜ9˜ ‹cCDZí…| •r¿R£³©…C?Æ®mÛèïí¡î\Cÿìw´d•õ7ßÊñåØñuÎhè†&HfAè8Ä0(¦™Q³‚Š`DTTTš&t »_ί^媛ï÷G5=ÃèÌ7ƒÎæíÞZ½Ö[ouUÝ:çìsöÞ”ò±p€ˆ¨@ÂŒ °í…—ùÈO¿H:âÆ>F0®cû>ããe:¦-àÅvñ­ïd×îwÜñqr¥UÛGW}&ÇʬZ{<¾ Ï=ÿ"]sçÐØÔVKÊõ¢‘8Š ¹IP¢˜V-ýÜó}|ÏûW“}IÅu<‚jQñ°ryœÉq²‡‡Ø¶û7|}'—_>“E«Žãħ°uo/#£"­ä+E,ɧìzŒLd)U*ˆÁaä@Óó©Z6FÕ¢\ñ‰ A`l|Çw™ÌQ¶ U‚á¢(ÓÝ;ÌHÉä½W}‹óÞÂÍ7ßÊÒãV"ˆYfÄ$¶Üýsª#ãÈŽCK0F®`áx‘ú:~ð£;øØÕ?掛ßO,¨¨äX53À¦Ç6qÁ.¥XìgíòVÞxñ9ÔwÎ@•$ Ç¥cúLj§âc–-ʃ¸U—úæffu]À¬Ë/¦¸ûe^|ö)º÷ïåç7ܳӧqâ‰ëè˜6dG+‚,!Û&e£ŠQ5@’ G’”JU̪ƒôqm£jôlÛD’$Âá®ë¡É<ßÅv­)Õ?a1N§Ó,[¶ŒeË–ÑÑÑA<G’$ÆÇÇÙµkûöíãî»ïfll ß÷9á„hll|Õué+IÀ±h = “L%Y°`ëÖ­#ãû>Š¢000€aˆ’ÈôéÓY±b‹-z•p ÿ7¡££xqIJ€èe!&B(ø·A "Á@+BÝqŒ¹“G‡=?'Þa›ÙލÆ)Û=ù,£Õa,aŸšÖvl¢¡(MáfÂÕ0FÉ` ?@¡˜¯~A9ÀÂäR‚^‘J±Y ÏET"S¬ÿ‘÷l»B.7Èä¤O,6øóÉ}_ÄÈ)õêØé¨ÇêÔ°?…?FGG¹çž{xüñÇéëë£Z­U*:;;Y·n7ndÅŠ$“ÉWý®¢(´··ÓÖÖF0DUUY¸p!ëׯ?æ·žÉdxúé§±m›ÎÎNV®\ÉÚµkinnž’ÿOá"ì Ç‘'{0ÌQйd7I<6AHÄbÑ1ðó}Xå>²B5'Y7E¨G£Sòÿ¿ÈÚ, ™={6Š"‘ËÉÄb5’thzz ¥å?@.aïÞšÀâÅÐÙ9õš¾È‚/P­Ô××S_ßÀÈÈŠ,ãz>u©0¦Uö[ÛZY±Üã—wüœ7¿ùMøØ$“q†‡˜Ý5›P(L¥l±mÛ.žyf3ûöô‘ËW™3w6Á ÌÚãV¢k*š&3}ÚLÂZ…úT3ƒ£<¿©»žæÜ ΣX*bc¬Z½Ÿþüf{üqî¾çq®¾úClÜx*§Ÿq³fÏÂ3†¨TóµkUY<×ò,$QDiȲJ._Äõ+C"ÃÃÝ|àýsç/à¶Û¾Ç•ï| ûö ®!ÎÌÙ,^º‚(ÅàÀݽ}d&òìÞ¹—-[ºÍòòË£<»ù•² x@X†HX%‘ŽÓÖ^OCcœÎii¦ÏleÆô’©3Ø»ˆSO_HóÌùôOt³xÁ,<ÈØ fhI>øþwò•¯ÝÄ›._Àù,å‡?|€¹ó—±~ÃjvíÞŽ¨¸tNo¥sú¥,^4o~ãFæÍ™Ïo½h4ÆòåK¨º²ï£!â ôôõsæ/Ä(•"\|êêêð AP°lð,Eƒ Z5¥(©d;®¬°é…§0…q¶Þö¥Šk+¸žL]zÕªD}2ÊþÃÞ~å?±xfy ,?åtª¹IêôTQ¢PñÊ%tYE)T¨–K<ÿ´·w²øŒ“A†á¢×·ñ»=ÂõßøïøçÓ¸äª ¹ñ†‡É*|ìB쀀a¹8Ÿþ#üûÒ ¼üÄsŒîÝǪ×FpF'(2¹R™ ¦biž"!™~ÅDE4M§ìU0';FÛŠOÇÖT IDAT%\ÜÚÆ/nù·|ëf®¸ê*TMCsD|ÏeæIDZªgÝq/ïnŽrŇ 2sÖ~ôãÛéhmáÍ—]D¹Z$QñO±}×¶‘E‘€ª#*¾ia«ø¢ÈîíÛè=t¡ìT#´Ö×ÓœRÉÎ:ç\2F…@*I~x‚‚&c :š¢ÔÓK@Pijm!Š3³±—žÝŠz¥D*#§X¥-]ORƒÌh?3Ós([Ãe<3ξñ­t4·3}Ñjn½ùn6?¶óϺuë×pÖ9kÑâ!’!ÛtIâZ%#n¦X pópù»ÖsúÅ2ñâCT+=ÜúãÏñ•Ÿ=Ïž¡abuqÛBÄS"A‰ñbj€üp;dã8åŠCP¦ ùHn‘jÅÀmrâ%ÇÉ®Lv÷˼´y3»·¼Ä¶ç·ÐÔÚB×ü¹ÌXº˜dªRfÇuÑd™ ³D4%òŠt'ŠP.Éd& ‡CDãÇDRjAVŽ;^õ§€$I„B!æÏŸO @’$Òé4¡PI’Èçótuu±wï^î»ï>zzzxê©§H&“¤R©W«²,£ë:¦eR­TÓ"áp˜xv…Åikk£¾¾~ÊWu ˆJ!ÜŠY£â  y *Á¿‘ÿ€(Èh&bÉÕˆŽ‹[x”êØl~Â`¬‘¼B¶SÄ @ðŽ’f>‘@˜˜G5 Ñ@òEB„000ü*/Žo!lç©§BCtÈšÜþdpœÚàe5²(•Š’JùvÕ‚„2ɨO@ƒ’U#§¸¨¿}ø¾OµZedd„={öpðàÁ×tÙëyáp˜%K–°`Á‚c=Á+ÐuææffÍšE À4MÇall ¨X8p€––t]'‹½Šìx¥ç0 ÏóH$¤R)âñZèÏ+—Ͷm#‰D‚¦¦&’ÉäT0…ÿ¤Õ‘T "’@£Œäûø…1ªL`ÍËÑ´šžDÂüÁ0GÏÊ–SÀ Š‹‹ìúhUÉ‹ ‡"¨zUM#Qà_-|¦ð—õ}è8“““„BAA¦¥E¢R©©M2øCâ‰W¾2ÇÆàÐ!…SNæf˜:” ΍H¬\»UÖU‰x*Šï‰ø– ‚‡¢H8ŽMµ’%‘RX²tGº÷ÓÞÚŽ$(È‚B!—'žøœuÎÛ$òr†²<»y+÷Mòì3/2Пò%‚!EÕ™5k¹¬Éæç³<óÂm”L™u'œ@n²„,&ð\Ÿ¥sNdÃñçS­T¹÷þ{øÄG>ÎÚµ‹9õÔÕÌ;‹‰ñ,Ï#aZåj…`(Œãx”ª9TME‚d3„CÕåïßyÝÿ —^|ñN%—G9(ØÈndÔ#2'E ÐÎ)뺰mÇñ0*£cctéadd”Á¡aº»GpyqÛ»! 5ŠDÕt]#Y¾l)ûöìcñ¢…<ùØ^ºf-Gkh¥ZÈs¨w™Ü8'o<‰L¦HÕµ8ÜßéçÇg®ÿ[v>Ã)ëÎ`ýºU|á³_â¬k êÎiäï¯|=»víæ‹_ú¹öãœrÊF:Z:سs'çž}:#ÝÈ )bÍi²ùqäªK,¤#‰>¦cME±MÓP´¥1“á|ˆ;o¸—ûïÛÌáî¦ëá‹P×­:mÓ=‚.èlXÞÈ’kéÙ»—‰‘>ú»K¼ÿê÷°ôø•œvÖ¹DÔf`’ë È>Ó=ÅŸæàпÿ ô™Í04Š©crÏË|éæï1mi;Wþõ õrûwàÍÏâu‹q2}”«ãÄ’­\ó©/pÁ.⤓VsèñûèÞ÷/˦ŸßɆËÞŠ91ŠìjHšÊñ¯¿ˆ—öâɧ_býUÏÂ}F¡;è:~-™Žoª´„T*{_¢oÓÌHŘwüñ!Úºo EtdÙÆ±mòÅ êCiŠÙ MéNZçÓ7pˆ–¦:ödâ¶ï}›M›vˆÜrÓUlØp }‡9xh?«V¯&3*ñƒooFמ㬳—ñÆËÎCÑC8¾À÷oýÑHA1Ù{`­ÈxjKU˜ÏÒQÐŒ<1­ ŸÉ¾Ãtï¡jy~û³Ô54qÒë.¤yæ"´ÖF¾óÔ6^ìg°’!‹1cZ;=ú A%Œ)è¼´s;‘ ICS®%žœÉŒÓ¸áÆg9ãuçsý>Ì÷~üfOk¢RÍâø.‘T#Á`’€éáx> uq*FÛ¥¯÷IÖŸ1‡›ø0MuqÞ÷î÷rÓ÷nâæoaz:A{Òåøã›h³Ãˆj’Šç‹5ò“¯#7‡®º¯ÐOe @_wž•jœ gŸÀ‡;… Wî%—ë%Ph°ÄšG³/ãØ&’åâ$‘X U âùš >£ã#¨6¤çt²aùìL†ÊØ›Ÿyš{ïú O?ɹgŸM¸½Oð¤"V¤Hu¢B9##ø:Z4Q²ÊRD4EHàš&~Õ©) ¦ÿdÄj8fÞ¼yÌ>ª‘$é˜ÜÎó¼ci¼CCC¼øâ‹¼ð LŸ>•+WþžtßqŠÅ"ÕjI’^凿º.ù|žR©„ï×[---D"SuS8 5Œ/I˜^†juÑ¡zuµ«¿†H–BÄb‹Ñ1‘£˜}™ÂÁÛÙžHâ%V² ¸Îè|±©ñŠª(Ô|UIÀÓ<Ò¤ñ¨¯ šý<1ôŠ‘eI´´ âÊÔè÷'…a@¡PÐE%•J‘Nüy‰UQ„HØ%r è"Å‚„ëÖ‚¶$iê}û¿@¬vwwóàƒòàƒâºîûÂÓq¸ì²ËèììDUÕW«±Xì˜$bbÇq0 ƒîîn¶mÛÆþýû1M“@ €¦i¯"V_iš”J%Òéô«ê¿išäóy*• Š¢H$H§ÓS¾ëSø/4³ „P¨Cöl„Ê^¡—ª7I‰ZbQ$T*Ùø’‡‡þªÊ( ":&”‡q¬QÊ~ Í!ÑBPï ‹"(‚ Q³˜ª¬©°,‹±±1‰8±X„–‰\®V¿''ù½`Gß÷±mRÉgpP`pP¤ZhkƒtzŠX}M½n©ZDD~ Ó4Y½z5Ц §Éf'Ñ5p$Èx6GKk=¡P€ßv;}C\~ù[(—L|_D—†'{¨«‹ ë• ]]IfÌ<û÷ö±uÇËèz„={Ð?8Nß@U:fÖãù6ßÿÁoxæéͨ²€c˜„‚Qëš™3wóÌçÒK.âøã—q¤w¿þÕ]ìÚ½‹÷_ýn–-_J©RÀ÷<|ÙÇ´ªÈ²J(Äq\,êâ †Eµ<ÉÆ“×2:ÜY)P—ŒS©”EßÉc[Š áãmàZð<|Ǧ.¡£½…Ëšð<EÓ@Ë8Ü;Êþ‡9Ò3È®=9x ›Ñ‰*ã%zxVöì’ŸýòIÚ:aÎŒ.ævÍbÁœ&æÏoab²„¦ÇèèœÏ‹[÷±pÅ,Îð',?‰…s»èhoয…}ìÃd3c,ž7‹—wïàé§Ÿä£×^Ë'>þI®»ö:~½óÃC aíºU\ÿå¯sù›/& ÈhJ£b£ë!&3ebÉÝ==<ù»Çøí½ñè#CH"¤’1Öž4³Ï}§~2­1 ÕQ¡0š¨ UDǧ|¤ŸÛ¿õM š¹à-±g¬›ìæ¦ïÿ˜sÏÜÇ7¿u+Á°NßÀa~óÛGèÙ‡HD䟼˜ Þp&ù±1™®YÓ©KÔ1{ÆRÂá ã¹2¡X‚ÓN;U«ÓÛ}€î½;©V Œö±Å5iaùÊåŒM‚ "-¿ZÄΪtïÙÁ¶­ÏÓÒ´O¸üío£qÁH´ðÒ–¨å,kÏ8oÞrÍsÀv(æ ’á®i!)6nhÄ6"äs&/íØO&ë±mÇ »÷lã¼sOÆ6Ké9Dkk+ÙRO´ Û©ý~4Á´<ÌJ…e+ó¾wŸÆu_x€ßz+·ÿäGJ"®æq*U|±©Âõ§ÈE4MûS.u]§¾¾žŽŽ^~ùeFGGéíí=º “ð¿8Q©T̘>ƒiÓ¦ ºr]—\.G±X ©©‰éÓ§¿Ê‡m ÿÇ!’Š.‘­4~"Í ÿí¤°JR9Ò8ëtõHì|ŽP¡Ì¬ Mg]”d<…¬üG¯ˆÒ«»| AuYJ‘lò¢BŸoÑFS ¶Jx^íº¥Z5gdÄ'nýƒ¡~ÿ{䚇aŒS*±¬$¶"›­¥ G¦,ÿöy%I"‰ÐÙÙÉÒ¥K_“מëº$ ’É$¶mÿÞÕ«¦iÇ.HMÓÄ;j™µtéÒcÖ@äá‡&•JÑÞÞŽ®ëH’ôªÀ+Û¶‰ÇãL›6Dâ_ƒõªÕ*“““”Ëet]§­­¶¶¶?ës5…¿¦fVFQ½¦ úMÈX€€êT!;FÑï§Š{li) &DH ‚ꡈÐJ EˆCTõ).õ¯¢¬ɵµµ¡ë ‘H€¦Õ®PûûÁ¶ÿ=k’É9xÐaÏßÓÑ¡Ó܇Ç{öóècûÑ€¹³´´&øìg?A×ìuÜ}ßC,^²–Õ‹7póS7Ðß?̬m\ò†‹øêW¾ÎØXUÓq—3ÎxÿÄ?3cÖ<ÞyÅ;¸ãg¿àšk>Êí?û ç-å-—]ÁW¾þ5nùö¸úý¤ZÁ× ‡¤’ ì|©—ï}ï×<ÿüVö÷X6/Åe—džSV°rÕr"±Áˆ€'NË`YžQÂF¢:Y 9ÕÈ£¿½“»¶ó_ÅÈè óçÏeæ²ùŠ¢'Ṫ* Lìît÷aã›/D ÉÉPŸjçð–n¶>„Ö…ó.8•jy’Ïñ&.¾l ¡XŒ€˜$—ï9Æ-ßùŸúÌgAò‘â1ɶF/¿D¨µÑ± O>ø0³—,¥sá"l_F·ªOÛ§l™8ª‚­Š¸Q¯â`”„’Å’«>ØÃcwÝËÞ÷^T]ÃÁ£T*±`ÕJÒ?¿ƒ¡C‡™»l©Dœ—F&)O›ÖYó2ud&ö÷3,æoX­iJ¥*áh¥\AQD’é$U£L©TEÕâD L›>˶øÜõ·‚² ¢R³X{Â,.~ÃLd²}˳̛7‡¸¨#]\O sZ±¤†wùû÷ý¹ÉDˤ9ä3ïÿ™ìC™1ÒmÍôMŒb(A¢± Q#èKä&&¤gÏ.&ƆiŸÝÅ‚eëÑêC§ÕSÆìÝÃŒY Ês»–Òsð|àªÏò«®¢­¥ £ú ²EšZ¢„Õ0݇X´p?ü<òg¹Œ×½ˆS6žH>ŸÏ¢«k>ƒƒø8ضA0@–ÕšÕ‡ KPöŠ`iTó.ðà}›˜;w‹fOçº]ƒ]gû¾»™åéÍsé›ß ¾ÄÀ`Žõ§,' ‘’U Í ä2clÙzÓNïâ‚‹.äúÏÝD8â²÷@‘ë?¾‘k®ùb¥J8FQ Ã@–eêëp]Ï÷Ñ4­&ÝEÉ$È ²¶íâX!j^©Ñ–&N¿â æ¬Y˾íÛ¹íλh¾/†³ÎbƉ+ÉâàINÙ!ªKTªe<ßBkø–Åhv -àbxDQ$ÌáÇ9pàÝÝÝd³Yêêê$ ×uett˲ˆÅb´¶¶¾j±Z,"ŸÏó`mjjšºXÂJAÑÑðÑŽZŒQÇ·ñ=»v8ˆˆø¨µ Ì`E‰! @>Ö“€0Eªþ•}'¾¢¾¨¯‡húú`d^Ékô}˲0MËr9|Ø£»Û'™„ùó!‡©½Îk$VeY¦P(‰DH§ÓGÓÄÂø¾O0IJ¬š¼QÕ@¨V ’ÉF®¾úƒ<úÈ“|åË7ÒÕÕÅ9çœIç´vT5Œi¨šXÉ!‰µPÇ5q©PÉf¨o pÞ'²s×>ê×:ÐÇ·nü¦á`¹QA´‘Û€%+6N¼‘Gîý%[·=KOÏ>6¬_Ç¢E ñq™7§ E±,‹þž^QÁ²lŒŠE,š ‘ˆƒÈ±"•Édèèl;êGQó´q=DZEË7±L]רªÊøø8žç¡iápÓ÷±,ÇÏa˜#øH’B ¦kFˆá~NXÓɲùiòù<‘@d¤žÁž,Ï<õ[¶íbp¤Ÿ—²ïP–}¿ƒÓO=b¾Â@÷‹–5ÑÞÔÁþ½ûèlm渓6ðì³Ïòäïžá—\‚ÈZ˜^ýAn¸ñ[\ÿÙ/ttî¿ó7ø–Çd±Ès›^䓟ý _ýÜ¿pËwÊG®ùŠáùßmâKŸÿ=Ú‡¼ýЏfÉ<6œ²ŽæéxF‘R%G±4D5SDÖ,\[Aâ("¸¦ET¨LsøÀnæÌí$Ýc ?N0¤2ž#kÅ4l<ÏÆªØ%=â…ÝÛIÖÇéZ±˜Bo7z<Ÿ/ñ›_?ÄŽ£œwùéÔ×§ùÚ7¿ÆðH‘÷^uÕbމ¢ÃôY3øÈ5ÿÌeoú®åK_¹³arx€ºHÉwHÄ¢,]¶˜…³Û˜àÅ'vÓÔ' Ê"e«‚åÙ’[2(Lä †CDCqŒªG £R­pÂë/âæþ3;}’Åç¯{dªN:éDvm~ŽR>C°1…䊼¼éEŽŸ6IðûzèïbÖâe4ž¸ŽÁR9C*•= ÌDYÂT*6ãÕ1–-[ÈßýÝñüøöM$“µaÝú.ÞõîwÐÚT‡$ø\ûÑ_ÒФ½£ǵÈd2¨Zïyï¿Ð?0ÉwøÌìl¢÷àAævÍÁ,öìÚMKK sgÏ%oV™Þ2Y|¢L÷‹ÛyfÓ#drƒÌ›³ž“ÎZMº­AjD K¸–…«èäò%ÂÅ ÁP#}½#4øî÷Ãåš|øoBU&sefL›ÅÇ>üi¾qà ¼÷=§ÑÛ7J{{·Ýö"•Ý{6ÓÙÑŒLfŠ‚¯„ãZ8¶ƒ.‡ßµp‹1½ü0!UGŽ[·ˆwør~ù£_ròÙoå=oZÃy/@ Èôõ÷!È2[_ØÁè44'i¬o@v<Šù,‹–G]DH×xÓ%oào}'í&[&¡yT²%UGQe|ßÇ4M‚Á áp˜¾¾>¢Ñ(ªªR©TeYS©šÂá0‚‚(b FBä ª¬Ó±j%‘¦&æw<›ï¼{~~'3·îbõ©'#/žƒ—)ÛEzè¶‹oÛ˜’ÒE…°yJ—ñ¿6®û>¾W#U!  Of˜Éd8rä¹\MÓŽy§I’ttÁg°ÿ~úûûq‡X,F"‘ø/e§ðµ#!ÆÃ¥R:€íæ‰{²¯•àýõÃõ]l»€™ßG»ž ³ãT´MˆÕ^òÙç°‡tâx9Z{=þÓÔƒê$Ra€¸£ÐÛI†ò+L'‰„"$‚É£sáÔdøÇ¢X„±1MóioWèèH“Nóg'A ЉDB躊 Ôü`ÿ‡C‚§ðB"¨ªzÌ}Ú´i¯¹Ö‹¢H ø=Õû·þÅ@8>VÏs¹ù|žB¡@*•j6 bÍÍͤR)‚ÁõÐÎårôôô099I,#‹›Ã§0…ÿæCÁïU<=’FÀoF}ÕÅ*(‚‚ Š¢ŠÀ›ö×<³X–Åðð0±XŒTJ§µU¤¾¾¶hœœ¬ÕÆW¼X‹Å¢(¢ªa2‰‰ ùó/†@`j)ùš‰U˲…B‚@¥R%‰à8.¡Pl6‹¢¨H’ÈÈÈ0²¤¥µÌÄ(Ž#°zÍJN>e#÷Þs/×]÷efÏžÉqÇ­¤µ­‰xõ/Ÿ$ÕØÀ?úI®ÿÌõ\wÝ—ÉNTùÙÏŸaíò™|ùóoæ¬3O¥¾)A_ÿ!âap+ãT+%ÌJ‰x,Œ/ʘÆ$R@E$¬Jž°¤¢§Ø~×=Œöò®w¾Ë1˜»v%c㈊ÀäÄ0š¡bWPƒtEÇgó–X¸t>šìRuLⱞ½ïÆÆsäJ§q9“¯ßðW}`# ž€Ut\îh<öÝ}UöìÙŠçÖÔ4ͯçHOÁõ¨ƹõ§ÏÒÙždͪ•45F‘«±Y­h!„°çY€CT‘=Áò°‹Š#àÊõéLd9îÄuì|úEŸ¾'"!˜6ª(³xÕrž¹ç^Æöíeúªel8ÿ|žx~d‹¸¥*O?ô8ø.ËÖ¬!oä|Æ`˜âhUT@%˶<‘`0L¡h¢hðÑ¿— §®¤®¡Ž®Ù³8Ø=ž½/³fÕ,ªeƒñL]LÆ`Åêµ¼õ²ñÌÓ/óío¾‹Kßxã}ûI'lß¾…áá:ÚÚ£|ÙG,¹È¦=QÄ“`ÇK[Ù»ï‰tŒãN=‘óO%_ÈqóO¾Ïn{‚ýó{‘6Ù|ŽüHŽÎÖÙlzþ§¼°u3¦Á¼…m´w&˜9猌IÔóÌï¶qóM/ÐÚçë7pEÕ±pK+ñ¶NÞ°| ý=Éó<È]ß»•isg2ïÌ „[ÒØŠ@Å)#(*uɹ’© )!$aê‚ár]*• ù\£j K2¡PˆP(ô*‰Þää$===T«UR©©TŠX,†x”r‡±ñ1Êå2ªª …¦)¦ð‡&¢šD!T‡àðÍQ*Æ .šV÷WO:žÃ¤™!WÆö]êƒõ4„PõªdF²”²»qì ²"‡®Öÿ‰hËÎbCèjšp¨p¨ÏÎãÚ&E«Ìˆ0BJO¡ŠS‘,LJePŸpÈC–]\Wø‹ E% LJärÅ’@¹"ôkŽ€SøÛ…$IÇÑ?gŸ`Æ1‚öß°¯„\e2DQ<\õo‰Õb±Èðð0Õj•ÆÆÆcjaŠÙ˜ÂŸ„éÑdm*øöÿÐwbírµv±ZWWû÷lÆÇ}ÅB <ÏÇóÊå "–mmµ‹Õ©åxÜANXw<ñxײ±LÓ´ CpÔ @pÀ—Dª†I"¤R© ày¡`Óª"J"Š"ẞï# µÂèûþ±Âæº.@Çq°,ë˜,DÓdÊ¥²$€k£  ë 26’àa•ÊL R—®' ‚;ÉÁ›9x`”N9A4i&ÕÒªu×òü¦ƒœÎûÞËò+°­$ßýÎüã‡'%Xµîx~qÇíìÛµ‹¹K–0x¸‡ÈìFV/_ÍÎí;8õugÐÒçùçŸäÂ7Ïe—_Ê7¿ým>ÝÞÉ[ßövÞþ¶àà“üàÓœ¶ñô`«0ÆðÈ6º€ Šø¶&+0¾å!)!š†ïYX•2ži"©>ä3<¿éi"á0Í3ÛŸÁ*å¨oj¤d–ñ=‘fhd˜°B¶¾ô%£Ì¬µË°p‰†#÷qxÿ!rÅ*mÓcÌêšÉžƒC$’eÞqÅ{ÁJ!0Éw¾ó >wý}$lŸïÞrÓ§OC$"áåBEîëá×?ý9wÿú4YaͲVÖ·ù«Ž£ifr ŒQÍQÈNOÆqllÙBÕ#TL“²¡D‚ÅËWrdó.ŽìÙGÇ)kpªÊ塺$ófͤ{×.¦¯[<³aëóŒìÝÏøÀ(cã\ôÞwá'¢¾I*! (hñ•r Y—e «`š®T42Ù~ÉgœyRM‚nºÜ{ÏÝüúÎgX¶¢…Kסkaz{F项©¿ú î¸}×þm¼ùo…LŽt0Íh1C¹ñ<úø/±óE‚ÁŠÄ:Ô‡30ÊCO=ޝy¬^»žik—AHeû–½ÜÿÄc\rù[ùü×ex¼@×üFöí=ÈD]0PåÏ=7È ßz?«—/dd`7¹b/RQ@UbHÄùîÍw±rE7ßôî{àÂÕ«–’Éôa™EÒ LŒO ÅEáèÖ¬Ÿi XUÛ¶PDǶhëšÃd/Édš#G¶rå•góÑÏßË‹ÏmâÌ3Ïä²w\IPµ@例ÑäŠsÞÄîÝ»xäáÇðCÝC£ ì~â)ªU%äÔ‹ÎáŽå‹øÕ/žàî_þ’Þ2ZÍkáºO]ͼy­Ø¶ƒçUq]—p8L8FVLàZ­¢( Á`Ûq}ÀõBxž€å¸ *x²Š'‚çƒíûè†IÛ‰«i[½”Ñ­[Ùöð£<ôÕo±êŒ ´lX‹/äq*Ä|™ˆVìIàOm“ÿðŽà¯,ÏDQ<&ÿ{e››Íf9|ø0GŽa2SóUM$Äãñc6ù|ž¡á!DQ¤®®ŽT*uŒxõ}üÚO= “J¥‡§Ì¦ðŸ4e¢F84EŽËmÇ÷,T)„ ÿu[G˜žI_¹ŸQs„Îärd­OÔ 6-Æ'‹x¸Âèv&dß·QS'"Š8}Ø÷=\·L™2†ê#ƛу¢J£¤¡‰  ûªô³¦n-ŠªL]­þ‘ð=pÏ©T †‡GhoýÁ ¿ÿÝïsYö¨¯÷(=&&D²YhiþÜÙZSø+…eYX–u¬?ø÷«¯,úúúØ»w/ãããÄb1Òé4©TêØ%·çyd³Y*•𢩡¡á÷+Õj•|>¢(¿×_La S˜Â5õF€ÎÎΚ­¥,!‹Õ.P Ø¿ßöˤÓÒé$ããŠd25OÕÖVhl¬ÙèLá5«µBaÆ1ð|>O(:6|úž øžIflEÕA0hmM³k×–,Y‰¬‰lX¿†ó.8‹îînvnßÏOo»“}ø›¸ÄS0wî fÌ줹¹‘dºŽÙ3“ez˾ï`‚ #øwT}lö‚plw]—R±ž„ï hªŠåX¸–‹PÑ…B1‡SµH×73Ü×G}JÅ3Ç8yýôˆGÉË24Ћˆáz>uõ"1™bi’R9Ëò¥ëÀóÙµk«W¯À1*wÜñ¼´{³fϦ£sÅñ–-]ÈsOÿ??Jª!Èò• ¸æCïá–_þš¹OÍäk_ýŸøÌçùÅ·qÝg®§®!J¹2Žäd(Fï¦sZ'¡ˆ„Q.c™2–%¢(*¶ãÕ$Ñ8d2“øƒTçtÆöïåðÁ^Ö¬YŒ,ºÔMkÅÅÁÇGe|ßCpLôPUÖ1Fs ì¡¡­•úæF*F•¸¤‘Ë3™É1YgŪµêùÈ%ÿÀGþñÄ#9á»ßû,7Þð0—¼iWÿã•,\ÜEurb©QRñ|™‰¬ƒªjàytÎPùèuoãÂóæ±uó&}j¿ùì=¼õ½tM›ÍigF°>‰m1D7 PÎ4EZˆT=L£U“p[3`€íÏ¿Hlj+pM A– ¨1}öl6¿ð,UHl<ï<øîp ›3ßpbsš’ka—´Š‰ëšZˆ`2Œe(•MTM¥\6ù…b‘d*Îxf„p4Á‘žÃÌž5U `WEšê[CUâ8NÇ ðÄÏññßÇ?pW¾ýí<óÈ#˜%—b¹ÈÉgmäÈó[ÏøòyRzÑ5ÉîÙÁ3÷<@Ȇµ«Óºf¤Zpò“ȉûÇyà±=|ôŸ–òwœÃ³ÏlgíÊKX³d9/–÷ÐÛÓËËúY¶¬™×Âìõ,[ÔF©8‚„ÀÇõ"‡ óÉ}œ¶ŽYœõ: =h‰ .-” E’ñ¹\‘`@Àu\R©&T5€,Š%Ï—DŸüà\·„判Óéd€é3À0Šüè–›9mÍɤ1;fsö¹"';yïû?F6WE¡\)âVªTmQÕR)Üì³çÌçŸ>¹”kÞ÷>†‡GéÏ’™¦¡¥I”Påè2FÀ4M$I:–Ü*B$ÀªT±<=$ áÚ6®[cR-ÏÂõ|$YÇG¬…¸6’ïá«õãŒóÙs×=<úË»˜¿ÿKÎ~‰ŽVÜ\…¨ª LŒjMž’ÿÑïS(ؼy3™L€x"N$A Ã`||œááazzzؽ{7º®³bÅ ,Xð{þB¡ÀÈÈš¦‘N§_u‰ò I;1>c;$SI‘)bu ÿi{Œ$i¨j”p¸Åq j5üÿ—Èÿ…Âó=lÏÆõ|¢rA)Žˆ $Ðã ‰¶aôYJ™Bš¼œ$ž…,¿:AÁ÷]LsŒlá%$A%›¬×#H5VD@E&1Í~–xK‰øÑ©ë¯?…¢ÏРO>ïÓØ¨’J%I¥„?;©úo‡JY®ùÂÙ¶ëL½ßSxí8tè;vìÀu]¢Ñè±ÀÊWUÃ0èîîfëÖ­ìܹ“`0Èüùó™6m±XìØsñŠÀøø8ªª’H$~Ï>£Z­’Ëåe™h4:Z5…)LáµõYGy;EQŽ]®†ÃÐÔTStwC(ä‘LzH’ÈØ˜ÄîݵkΜ©Z«§S¯åA¬ŠÈ’Œ €ëzTÊ|¿ÆV‹‚„¦j‚ˆ „@¤T®R­@°±ì [¶læøu멃C}$IÖoXÇI'm 3že˶ŒŽf‡{ïÙŠeÿŽÁ!‡h,S¢w‘8Ò=LC}#шO¥<Ž,IÈr€b¡Š®G‰ÃXŽC¡RD×Á±MºfÏddh”_üâÎ>ë,BÁ0‚ï>®çà:¢¤‚¤á¹6²"¡jŠ,#ˆàyÂÑf]ÀóŸ‘O†Íý–ÿÇÞ{ÆIVÖiÿßûäS¹ªsO÷t˜œóÃ Ì H–$iaU‚®º&Ìè꺫¸fWVWTÄ¢ ŠH–,ÌÃd&OOçê®xê¤ûü_Ô0þ]uŸ}VŸÏ²l}ßTuUº«N¸Ãu_÷õ{ëÛ®äË_ú ÷Þýo¼þõçræë×óÓ»™·_ùFš¦5#'FÐuM3ð\—PHÒ™ ¾b~äáÔ| ;NS¦ôÏmØD:i±dÅR|Q´X‚j­†ã¹¤biÂ(Âñ ÓÝ=‹C{)‡é)äÇ‚JÁC(:/îtøÐOæö[Ìðø§œz›ŸßÇ[¯ø[^Üqˆ÷¼u_¹áËøþ8÷=CŒU(z’H(¨*hJˆI!²Ðޑ䄵+8íü×sëOîâG7näÒóÜJ•)3¦0ëØyxŽO¤ Ú›rDcÄb"UAA€ {f?ÛG—X2C¥2‰tª$¦v¡ýV¡²÷ ñås¨ìÜCql„éÓf\¾˜bi‚(•&XŽ$òkL:ãTƒM-ilÛÆ©yärM”KeRéùÉaÉà3cf/Û¶nã´ÓÎàÆ~ÉÃ>ÍUW½“3Ï8•ƒ1½ ¿æ_8iýt.¿ü-HécÄcÜz×ÝìÝ»ŸÖiýRТAxx²’ßÜ{7c÷ÓÕÛÆâ¹ó±z§â†¦ ‰b ªŽ‡n¥æ:”ʧŸv7\-]­­Tm%s1/mà†ó>ÌÙçÂ[®z/A­ÄW¾ð–.íGUCzz§04êȈûø5wýü®zë¹Lki¦T¦µ9M(C’‰†§X&ɤJH¹P&ôCd’°-ÄTÉd’š[`Úœ.·F"móàÃOPeû†­\pöIŒŽî¥cêt†¶næ>ñ!öì÷ÿ=²•ñ|…R5¤{ælÜ|žÃŠÏµÿt-'­<™5+×1}ñB¦+K€ 2,01ô2¦©aÆQgcE¤R©£Îõ(ŠPUQ¾$®™U# Ä2l"EÁóBBJ„ª j:‘© £¸ÔÜ*Š©2í´µ´/œÏK÷ÿ†;¿v#Ç®YCǺ5˜-iˆ\ô\ §Z!Öè·þl*• 7ndûöí85‡ÖÖVš›š‘R-F5::J>Ÿ§X,²|ùrÖ¬YüyóþÀMR*•EÕTÒéô¼†a}ÑÏ÷ÐT §ê0>>ަiœÕzp¦Ù¤R½01ÅA(*höÿHq5 B¢¡‘$‰uÄEª Æ¦‘èN ¨:ÑÎÛñ ;)é l%j)õjÇŠV/|”qj‡(W¶’N-$™˜uÄÙú;"$¾pqd…ŠS&-2˜†Õ˜,ü9Âj#j5H$ ÚÚšÈå¢è¿_X"P0LÐ pkàù ×Mƒÿ:<ú裔J%²Ù,Éd²>ò}¢(¢R©ðâ‹/rèÐ!‚ `Μ9¬ZµŠéÓ§ÿ^¿ŒŽŽÒÞÞ^ úwű¤”„aX¯÷†äóy …‰DâU³pÑ AƒW7¯9^)¤ûJäX"!™:U2:*xùeèìÔÐ4)ƒƒ;v’IX´èw± þŒ±{H!žç©T ߀èHuVDD‘@]Õ0tËN‘LføîMßçѧ6ðžw¿]·(VÊÔª%¤ ÉåÚ8ûÜ“0ôº›ó´3VEðÂóÛØ´ñeŽ?ö4|àž{þqÚš³˜†ÉÐád³¦¦â”K¨ŠEÌŽãû•j™xÒ@ú.nàƒ”tuu1:<†¡›DAHEø‹ôüÐC¨MWð|U«oñ÷ü2ªwdª¢õ­ŠPp]UQ:^q©&“I\×=êîUU×õ°bi¢ DˆC˜š†ª© íß‹®êtΜITóŠ%gÎüe¸eÇ IƲ1±B…ªïàU U§0é36`š –,YÈ®—÷ã8B~<À6[0ô$µjT®‰Ñ¡qÂÊÙ–J“c”œI +‰lAW ¢É ãcEÚÚ;h›6“HƒÈÐ@7CŸP*~ˆP43I×ü¹ÂÂ…³éš; Y,i*Ne 5#ô|Ð"Úg÷òëß>Fu×Òsg ê:ÕšCª§ Âám»™±rÛ¶máð¡Ã¬»à\ðŠH['”`ù*Q¹†ª âI%Âß 1Í•’G*Û„ë•I§Ó („RaüèG·ñOÿøæÍíåÅçj’Éb ×S8°oœ{ïÝÂõ_ÿ{bqm[ŸcÉqËyè…½ì`öìÏ“®)ŒoÞÅKûvS*1wÑ,æ­\B$B†J£è‰\}Ë“f"#ƒ–¦Nbx`„Þ)ÝŒ ‘NH7ÄŽyìÞ÷,ž|ò)ö,ACƒU2­ÓÜó£“%æ,\Ê”î4ßùÎ/Ðu¸ð¯Ž'™lgbܯ;âYÇ0s)zzzÙ±c;º¦âÖ\FG‡™3w6…ü8C£hkiBS¡Rs©U å*§ž±’¯~óîÿù\~þ{˜>µ•åÇ'ˆ[& KC+–.á£~—¾ñ#üì÷’ß¾ƒÕÓfbÍ™Gsq7^ñ×|ësßà†/}›Å‹æÒ½p&ó–ÌãØ•‹ñƒËÒ!z¥-¨/¨hG‰žçJ‰mY(ºF„Ô¡…UGÝPy¥ºfÔÀRA[¸U‡‚ã`d²4MéæÄÅK|øIž¼ëW´¿¼ãÏ= æ÷ã–Êèf£’ü_ÝÐéœÒÉîݻٱc»_Þ‚R©Ä+¹ã™L†þiýÌœ1“åË—³råJÚÚÚþ`¢S*•®ç“‡Áï½÷Jo[{Ûwlç¹çž£T.1Y˜äŒÓÏ`Μ9“Ñà hJŽÃä~Ï9çœC6›mœŒ ü—I$|ººJlÚ$xî¹ $Èål\WglL0>3gÂÒ¥¿s¬6ø3„UUU®”½ÒØA€ï{G·»K)‘‘@U Ï%ŠTTÕÄ $3Ï<—ïÿðV>û¹/qÖYgÓÓÓOÇ”)èº`hh˜ñ‰1²Ù ¾çÐÓ_—ÃîcÖœ6º{l¾ú/ÏX~U©”‹G&¤Åb•„•ÂëÚP:ÅE7 ¼P¢§ê ¢±bÅ &''1T MÈ0Ä0 LE'Œ4ü >˜¯gå@xd¬(Šª Pk$“ TE=º2©iZ½˜Ž®]itUQ0l Í4¼Â¡FD‘[«08t¾¾iùaí[·ÑÒÞI<ÓÎÐÁ<Éd Ý8Å<µb ‹#ƒ42‰N,ž#ŒóçÏá'·ßO =?$IÑÑçÉ'çŒSOGWÁ6ÜJ×ñ¥r•Õ'œÈ†/°cûvºº{X¶x!›ž{š–\šÙ3zxý™§sã ?à”SÖbY6ž ©LŽüè8†ià{!~ààõÉP¤š(jŠáÁ†¶ïdÇ®½,]²ˆ¸• Ð%"ná†!¦'Š´z%cMÇÐãüâ·ðõ~ù]9:¦öIA¨„ù £ÃE^Þ=Áª×­äW÷=ÉÞƒeÖ¬?ž«þ抗_±ŒyÓçÑÝÓÊá‘ýØ–A*ÞB%`š‘0±´ Y:¦fP)–± Ô´•ÌHîáоíÌîêå³ß¸„w¼óÇÜ0s ¦/dÓ#FÇi›7-mP­Œ’Lšø"$ Ò}Sðª*ûHOíFµ ÊžO&nck1œý£°ë “‡éŸÙ©K†ìÁêîG„"ŒˆTl%®`„!~ÅöR؉òã‡q‚ß¼þ:®ù»Õ]‘éî»÷§ 3Xé '¯?‰û|˜‡¸›CÈ䚨֠XïÞô¾õ­ASlîyð‡LëêàáÉjµÂ’y‹˜šëâ³ÿ&W]y*kO>¶Y=T¥C­µß ™›@¢Ñ?k ­¹ˆ°¦040ÊÀQ²Ù,ªÒÑÓ‚‘ˆ³|ÅŽ;æ.L»× ˜/P,Œñ«ŸÝJoO ÍÍíøX–B*ãóŸ¿’eËæ‘ŸäÀ—©–+̵ÂD‰[où9gžýz¦Íècó‹Ï3¥½ÎŽ<·@:c’He¡9ׂ¢Æ1 ‹t&C©dð®w_–=U–÷VúSðÀ1{áz*•2ÙT#¥ùü6/œÇÙg-âê÷}Œ€ZžáGÇ/ÇêoaѲÅÜxãõì|f ‡†øêÍ7ñ‹ûâÓŸz gõu7AEG2k´£Û,^i/£(BÕ5tÛÆG"•ˆÈP ¥DDšªø.¾¢ë‘"м€Zà€•ÀNg@1P}p+Põ*´r§Nïá··ÜξpóÎ=‹…gœŠâ5,8 bvŒùóæ£**ÝÝÝÔjµ£E(¤”¤R)²Ù,---ôõõÑÛÛK{{ûfæÎË\€³Y¶t™Læ÷ÞO&“¬^½šL&ÃðÐ0étš®®®ÿ¶b þ§ ˜9H¸PgT â­`$ÿÇ8W AñÚ81-F[²S5þ]â©a¢˜XÙ¥„“#¨Åµ‘ ˆD39_-R5 Šmg‰ÙýhZ,ƒU:mFŠ¥±Oì¥D Ék¯L|¹\¦Z­'ˆÇMÀ§Z29xP0: ©TÄÔ©ÐÛ+°¬?Éd]@Ð4 )%®ë"C"ô%†ea[q” $+WÌf²èñÄØ»ûÿæ·ÈÐçä“O¤··ž7‹Ù„†JùT ³æôrÚ©§ñþ÷}‚k?ýU>úñ«èŸÖ…S+chp`ï~æ/ZDäJÅúë¶@‚jm%ÒQQhkogh`ˆL&‡ Ãú–|P­º„ÒGÓÔj EÑP”ºp!Ñ4q$ƒdEJ]HU5EAJy4OÕq<Ï#“É`[6•J…P’Ù,¡ÕD¡DQïR)OmJHë¸ÅQPT’9›îÞÆ&òIJ tC¥VËS.bê¶éa6ª.°VÒ$½}½Œãy.Í-)·Â’¥³ÈOŒ’Ë¥©NV)•‹Ø–E__†-[_féªÕŒLeyzÃsôO›Éé§ŸÆgÿéŸXê[ýj IDATºhííœxÒ:~sÏÃüöé'xË»ßB1ˆjµL,–@ƒXÌÂ);Äìb1IY¼|`o|æŸÙóÌ!–M·X¼h9ÅB‰Ä”<À•>j¤‚¢Qs|¬„ÊÀðW¿ÿ t…ñx#‘AKe°u ¹·Â¡ƒCì;pÁâ×qëOɺSðÀƒO°}÷!>þ‰óܳ“ /^Ï}ZD{{+“Et+M¤Bø(B ¡I‚(ÀskD††«©”‹y̸Bç¼>ž}êEN‘ÊxËÖ‰”8Z6¤BÁDÈ”A&¥|öŽi<ò›‡xî™- „"€ûöŒ hÂ+ä™7w&ÿôÅïpþÞÅÅ—.eÝÉ'3eÊT.< ·ßñëNœÂß¾ý,üâ­R’õKøccÜ~ÛÙ°ñïzûrN½âr¤ôp5ðP©8%ªc%ô@7;H¤ZPU‹_üì§äK’øûϱ{÷§ž1‹È”L8ãˆR‰EKVqÛm·ó¯×ßÊcOnåÊ7ŸÆ¼E]|ýkײö„ãxëÛ?ÌC<ÇCìäKŸ'oºü2ÚL$]/žO¹P&¨ Z[;hmmãñGee¸œiÓú¨•ËxžC&—ÅóJÈPÒÚÑJ¹N6ãÖ¾üå¯ÑÜœeé o䟯û6zðn~t룼uñrÚZÚIf² Uš²)t£×W¸ö3ïcËγóù¶ xî¥-¬[øzö¦]$Y¶l1ËNH°öœ“É× dÒYô¨ G–4M;âʉŽ8ÕÝ£b«¢(–…'d=††.TUC§R¥\­’H&°*A]`¯VqTA(øèR#Ó2¯VÄêhçÄ·ý5~uwÝú= ‡öpâ¹çB®Ñqý9!ˆÅbÌ;—¾¾¾£¢*pôñ•þO×u,ËÂ4Í?év;öØc™={6Š¢OÄIÄ¿÷¿’É$kO\ËÊ+ñ<UU‰Åb$“ÉÆÉhðºZÁÊ‚j€”àä‰J Dº4ëU-®ÊPRq+ vFèNôÒ˜† ¼PÄ…#‹û&ŠÞA,»­21xŽ_ÁP5‘"²â©6b±)¨j+`þQaUE%!Ô´ÕdǪ"ÅkOX}¥šxSS3ªšB‡ÑQÁs›xò mÛ"ZZ$k×B"¡ÒÕD¿;daÁ† <"˜ÈGtvJN:IÐܬþÞ$KJP¦×ÏYô*S.u1Õóêßí•'呟õèõÖh]üiZ[[I¥R,X°€ ‚€0 Ãðˆ G9ZÄØ0 lÛþ£E§‰^x!®ëbš&‰Dâ «¹\ŽU«VuÃÆãñßËkoРAƒÿQ5*• R†ttÄY°Àfóf…ÁA¸ývÁÈH]T7úû¡Q3ï/$¬Zv=?Pˆº¨J¡ün°äû>ÕjXv€ïI¢È! h:÷वëikîäž_ßÏšãÖPsk<þè³üø–Ÿ¡(µZ…×C&¡¥¥™Þ¾.ŠEO}êÓ\uå5¼ï_äúëßGg{ mí­ °kÇ6:Ú;I¤b¸žCÍ)¡huA4fÛLä õI 8Õ"¡IIàûF}B¬„‚0:2YÖ!Š|"¡âz.D.BhD2BU ]¥\­`Y†n „QD(%¦aPª”Ñ4l6K(CŠ…I„a‚"¡¦ üZ…Éâ ¦£½?t™ÒÞÌÀÀ~T;IÜV™, ·%©t ÷È1µšMlK¡©9K:£R.Éd¼ùñIâiƒPÖxÝ)§òµ¯~C†èêèdï¶m´4gX±ržÝLßÌùÈH㬳Îã»7ÝDF¤R.xÃ…ÜñÓŸñ¦7¾‰LJáœóNæ;ß¹‘ÝÛ—ÑÔÒŒnÇ(–}TEÃP,é,®ëRuªH5Æ·oü*?¿óëfg0Ÿ–Þ) H¸Õ B7¨:.Ò—dŠ•€/áfFÆàõëºqj³§Íå¥ /²gßNzÍ6^ض›þéÍ´uLçÉ߾ė®çû7߯ùoXÀî=ÏrüâãQ—TÆÀ¶:ÇŠ[xn©¨„ÒCS@’ ÑtÝŠ¡¨:5§F-òqeÖ¦$ .äÙGåÔÕÇóÌo¶rݯããßü‹“ wmáž;ÿ³N=Îù‹1l•r¥Œ*L,Ea϶mÌN]ŠW]Æ-²­­ì}~ñƒƒÌ¾ôÂÚÎΗŽG<¥Q˜#2|ÔÖ5$ÒØzŒš¸±X=žå«×}¥+^G"•cxd”DZËM原<ÎË—æ…ç_BW`²o|óùÌ™µˆüÐ Ÿ¿öï¸ú›™1ÇÆ4 œb•ÙÝÝÜ\ä–ïüdZá’7/¥{þB¤n0Y.Qq\¤®£ÃÐB<§VH:×cÓÆgèi6xö™mÌšÓÂÛÿö-v†²["žnerÂá®;ïã{7ýŒÓ“¼÷½—ÐÓ£ñÕ¯}Šâ¤ÃÈÈO?¹êDÀç>÷m‚p„óÏ?À7›€PМm# .»ì2öØKgW Åb±ñq2éú¹­9E¢ªÒ'•œ‚f¥Ø¶ñyþígÏ39Yãþ§÷ñÆ«®äo{/kG{Æ¥êLÔ\2Í]<·i3­Iÿí3œsÞ©\ÿ¯×ò·_ÍùkWqòEQ( ’MÆ1·Z¡¸oä”ÒZ E Ð#?¨¡ C7Q„z¤J¬‚¦ê¨Z=&% B| T UhT2¥R MÓêN¢D 3G ôñƒ€šç3ubj ǃHÕQ“1lÍ :8Ž.B„QLh¬¸êb­>–»¯ûW®ÿäÇxǯlô\&Š¢ljÇÿüh…t:]ðøS¬¦‘Íf[úü/V­îNMu#•ˆ°2å*ºè3õªýèÃ#ƒ¼ðâ‹l;´_Uñ;§@«E(뢗¦Õö¹½µiN½-”Cl*ígGþQføóYÙºŒ¤1Ô6êQ ÿÁà ¡F ŠƒÄT ñ4†¢( btT`Y:ÃÃ^z)M¹¢`Û‚­[±tO…X2™ºZJ(—aó‹ðÐC×ðرCÐÚ*8î8ˆÅêç¨.â ††²YASNðïj¼¾:„| އ+LN*G…Õj†† ¡¹  ^•Ÿ¿Á«ëÞ2þJƒ¦i´µµý‡¿cš&¦i’Ë5VÍ4hðçãºîѹN}ÑÇdÁ…óχ­[aß¾z?8s&¬ZUw¬6âœÿBÂj¥Z$‘ˆ[xn€if(•J†IÕ©?VªE{üqÎ>ï\Œ¸ÂDaÛ² È´•CU`ïîÍôOíäÔuDZeËNV®^ËÅ—^ÈàÐ>öíçŽÛï¤Pªr߯·26RÄŒ¹´·O£¯o&ó–ôòð“{xࡹüòËÉç1b6ã…1Ú;š˜,° [„>e -DUT% Xö1n­a̤@?”D¦aS­Uqt&CRŒŽ!T"ÅäD d€e™„‘ã…X† ª‚fi ÐÒÖŠúJå#ƒZ•„fáT+d34U06Q ô@È¡±CtLé¦04„ÈÈ$×ÔŒS+àx8~d¬TÅŒ£‰€)]J’ÁC‡ñ½ MMM¤“)W`'lÆ&†0í†ÚFq\…þ O<økVŸ¸†lûj¾uÓ-XFŠÑ‘C´uvS­x¼´yK/fÑ‚cxúÑŒ—IqRvÈ[®¸ˆë¿ù-ÞÍ'ž…o¤0M„¨T… ˆT2™žzb ¿ºm;³»›xËy+?°D‡ÉÐø1¥0_Äné Ðm„"PÔCc>ùù˹☌L0Q'¬ ¾º–¦P* èžÖK(]ölG‘-üêþøÆ·®eÕñ‹I'[°í8ßüú¿PrøÈ5ïç‰-/ðŸþ£cŸøèß1wÎ,òù"ï laøð¾„üp…þ©íD~D:ÖJ…2‰ÄïîÓÉÂÝ]SƒU‰cÇ[ikÍQ-¢¢`Ç-|¡S“54]28™çÐx·_q<Û÷¹ú£Tð¹ôuDzvu3Óçu¢Ú‡³zí?ò7ózî¾ç>~þ³Y¿n>×|ø2^·~=Â#¥  p¼ÀGO«”‹£(ªJ2“CQ „01íº Ý$†™ R-¡ª*Aá8UEÅŽÅAàFd’ÍÄ­ 2Š04!UPlÓB+nà(áú•ª‹aÆÐt…ªç ‰+@SÁ1‚²$Ñ·sÞÿüêw5z­ þ·!ˆ5‰•Õ<²t)"¤¢k©zôΫHàò}غõ wß};vn!››Š3§—J7¡ ª·q¹œG®IJ›$†àù%JN‰Q=ÃÎËlÚËúL'3U“0 ‘±ÉºýðO.!!‡Ýà ”`û6ƒá i-C…¯™Ë¢\.ƒƒƒLNæ C•Ri*•r ³f,[ ÷üZalå”z^ƒçJ&R>B ñŸTÜ©–˜9£Ÿ‘‘Q>síg8é´×±æÄe,Z´ˆys±ÿÐÎ8e Šˆ‘/ìf÷®A|øqªµazºcüò®]œ°:Ϻ“×É­D™,Ž`Çl4µ¾6|b1‹±|UQ±c6–¥Q«yÔ¼¡˜ ¼@"#I†(šFBª9Gnê Åû¤³«“D"Îê5'pß}÷±dñbd(9î¸ã(L(¦cLŽWXzæ9<»i??½í>ÞõÁOððcOóË{~@wW3§Ï¦¯·C«pýõ?!T>uíûðvm&™N€¥’îigdx’l2M±ZÅ3CšM¨Ù6nüÔ×Ñ w¾çj¾ñÙ@U>rÍ'0Í&ξà~}ß]lÛ/ùÌçÏbËOISK†­[öð®wžËþÝÛùÐ>Xß*¨ê¸žëzD„PÐÔzѱ0H B˜hZŒ‰|™ñ±I¡’Ne2`tdMSq…$ÑÔÄÌy³Ï—IdunþáøÔg?K~ä­ý3¸øò«Ø»a|ˆþ9‹é\°ŒH膇!¶¦"ÐØöâf<Z§õA‘¢Qš¬R/bw¶“ŠX±$EéR µJl.ËH±ˆeؤb*?¿ë.V·˜L&ƒfG'+”*?½ý'õ’'­Í—¾úvºº,&óãDÂA³ªmpøð>:[[Ü7ÄÏþ»Æ EF \ýþÏñ³_~™X:C© ª ¾_ÃsóغE2ÙÉMßû>±dÄe—^ÅKÏ¢™`!­íYÊÅ z`qË~ŽaKÎ8w+OüöiFÇ"L…ÂQà ª‚—_ÞËú—`Y àÝïZDZ+AUòù<Édœb±B<Ç4L4M¥P˜D F ýýýLŒ‚T]%ŠT #NµôÏè%•Ô9x¨Äð/ UØøÈvþÕÜÿЃœtæ[Q)t# aC&ÓÌC>Æ'?ú\óÁïÒÞfpûò8çœõ¬?i ˆ€xÂÓÄ<¤ ªà{ª¦Ô'Ž!x^€çyxžŠ®™Ø §Z%Î „B¥RBÐ4¸hŠB !”º^A¯G­Ê5t<@.q`ÿA>ò¡wQ©–ˆB‰„ˆ(BQ„€PJ¤/@…@Õ4,˦P(R(""‹¡ëžŒÐWâz†n Ä“œÿ†‹øù]ïåñ{îfýºÕx•1BÏ£6>Bï 'ÒÚ5ƒgvlçùÛ9sár*†¨Éòà‹´Å$;Û@Ѩú,?$D¡T­Ëˆ’6Š"„Ž®™L”†Ñõ8þІÕÄ=;ØøÌVÞ|ÕÙ´´4QªŽrûí·qÓM¿åÊ+Žåê÷]E(RsF)F0Í$®ãÓ–nG7,â"`dÇ.ÿåýÌËu’©K¤ùæw?Í¡½XyÜ|w’TFGÈ))˜Vˆ¡Ô‹¡Ÿ¾©K@4³qÓ/ñ#U“(zŒšëà’¾¾~œJÀÜ™KyâáïcÅBfÍé 89LOw?•JÈŽíøÊ—oåÃלÏÛÞs%ÕÂAˆ<,ËBÓ5òù1,KÃó&& är92ÙfÊÅ2Aè’L¦Hµ¦hÎØ^€Só ]Í ¥FÌNñî|”üàa6oá;7ÞÂWþñŽ[:®NÁ;®>‰î9Eã~Ï<¿‹7\t Óû0³·ƒË.>c_SÃU1LSʺÛEQþtÇ¥jNµÇAJ‰aè@@¸‹ª(UE7T‚ Ä\„hšŠªê~ý¹išDRI®›€ùT¼9ô½Ý7t”:¨[ÝÊ9 !„@D6ÆŒm<€ÍØï öm`062Dcƒ ¡„BPnIÝêVç|s¨|òÞóGµôÆûû 6 ×g­úãÞ[u«Öª³öÙç{¾¿ï¿ØÍ»~ãÝLM+®¼âšõiòð÷⺗ó¾÷þÍê T6O¦ªTuò~7ùb‰4Nè2<~ô­/óà]w°ir3ç¿üxýk߉UÊQî-°rìÃ?ÿ»¬]]fëÙë9÷œIÖ®`ddÓ´©T¨ÕŒŒP«-³T©ãû=½eJ]šµ˜#ÇNbY5„´¦K&X¶‡)M ¾c¡…$ C”ÒØ¶ ¢(:-NiL#iófm€ã¸(ZdqÈÒ¾ëàº6q3}jŠ3vœ‹Œb¦æ1M‡Õk×°°Ô$U!Bj,ÓÆ±<¢4¢Ü•'Qq’e ž—CJåôõ–ØýÜ!’0! d–"TJ 6nÙD®ˆp¹Êr#b|bš iæÉ|V¯çØ‘}Ô—q,˜>9ÍÛßvßýþC¼ñ瑸0ØŸ'I»ù«}‚sÏ_G3Xbt¬€eÔY»v”÷üökøÀo'nÄDi†aHúÊš$krrzŽÙJJÍ›ÞzñÁ?åú]ÜðÊ«8sÝJ>½—‚W]¹ /«¶^Žî{ײ9u¬Â¯¿Ï~ñ¬_Wä†ë_†04Q£…븧E¬!ÛÑ ‚vnˆJ%$Iû{B`;iÒv J£m‰/w Â!5™H~S4«u&×n`úÄ»žÝ…½u½ƒ=„aŒëçiÆüÞÃ$qÊù×\Íââ)øÛÛ0ã„Ëv\Æ÷NÞǪ±UP(bÆ!Ø633s¨œË*äՌð,A†F"èîí§ViQ.÷r÷×oç«_}ˆ7¼þ,ÆÇW²°0G¡hñ?ø¯xn#GO1[_¦ËwÉP„IˆH긦ËК ÿÒgØûÔ÷ضy5×üÜyâ@‡çZósüÕǾÌ?ô~²0£ÒHÚ‘Xäü.,; :uIb“z-âÎ;î㶯ÝÍs»gxèûŸdËö ææ÷„5öx¾-\Û}÷»Üüºßft4ÇÍo¸–٠ahƒV5dhh€|Á#X ‚€,Í#Ic‚ …ã8X–ÅÐÐiªéfzfŽ®Þ.²,#KS9çøL®^ÇrSñáÿwLësÜzë_“$·þõ<ðÇùƒ?ù=^ÿæ×ñªW\Ä}w‘™D7W ÙZfvþ8–epõW12l0¾ªÈm·Ÿÿü;Áº3VpæÆ a„Š|.GdZ­Ï+aÛÎéÈ“ö…dûn I«Õ¤X*P¯×0MÇqH’ß+¡•Âvâ8!U`ˆ¶Ö–éµ×I B˜ E<ÏÇQáy>Y–aš¶eŸ>æ3šõ&†má˜6*K:g­:´³<Ãó(0@£qFm/F¤°íÁ¶/S‚Ô!-?ùÍv’ÀÌ,œ<©Ù¼Y2<ÜK’tšÅ%XœâÀ¡²ÆÆ¶‚¬Âá©Ãüpê<Üz˜ŠSeÝÛY]ÃZó"F ùœDÊ™ã"Éæ–瘫Í1Ô7D—ß…!~öµ¾¾>zzzк-pþC‘Ó0Úî̵ëÚÂâÀΧa…‚fýzÍêÕí±ÀÇbFF4«V ’Äaÿ$©btzº5¶mà8¹«ÿÞ’í8¡v4”çÁø¸FHÍ‘£‚“§Úe\RB>/øwÖ;tèСC‡?«ÂªÊ Ÿ+R¯×i6[xž‡”‚8IQaŒi¶EB0X±bÃl6†Öút™’‹ï¨VëT«U¢(Åqƒ?]Ý]ôöv±jdŒíçl!_°9°ï½/½˜åʆ4ˆ“žïsìøqÒ¬ "bh¸‡‘Q—õÖó¶·k|àaîúÖã<ðí½|á“ în×qÈç]J]E|ßfd¤ÈŽs·°óé°iÓ %غu’5ìÛƒްj\“ÏåÉ”Ä6¥bž Q!°iÚ(¥¨×ëäójµaQ(´Ý¼ ±,›êò<ÄM¢ FEŒ¬[GÜjòØcµ›q5¤_À°lòųósì}þw~ë¼áæW1²bl¨T*ôø.JgLL¬"hIV­ÇËy4Ã+W ñøã ,ÓÃÔf2„hÒÕ]&l4©G1ƒƒ4Â˶ØóÜnº»»iµºººHâˆ(l‘³sò>\ÄC?ø8Õ†Â0\´¬[7Áyçmá™?äüóv°TY lµ0Í%Þý®×pÕµçÒ:5Í÷¿pW_p1#W]‚?4L£òÙ?ý8ß{r?ÛÎ*¶vñé¿údÎafî Î\³‚ß{ïë˜ÙwTH¦aæäažßõ<ƒ9‡É•6›7l ¶øY^ùŽ7P.æ™:uˆb)%-R†ëb d€Ù§þÅ B´³µ”Ò8N;ÊB)EÜj! «9â¹$Í:q¢Èu÷3>1JΜ}Þ…,ÚMШ0ºá ¢LB©Hýä"$‚¾-g0:t)S·ßÆž'ŸâÙgv2¿<Ï…“c„•RiTª©./3YØH<¿€çû8ÒÂthǦ»ÛåÑGæ7ó¸öÚµ|àCD,‘Å!:•$QDÔ è*»d„±¢ÑHè]…ÌR\òànáù'bý†q.{õkY–ÝüΟýWš%‡ë¯¹‚_~ËMÜ}÷}<ýän.¹lÛ¶¯ÇÔ}|ê¯ÿ–‰Õƒ\þ’3@IR‹F£É­·ÞIœÂ»Þu=›·n¡ÕO­Ú8í-a>F“b±H–µo"8n»tÅ÷ÛŽ}ß÷iµZ€Æ&†á£T†&ùœE’)Ò4Ã÷|„”hY¡´"I2r~[<£&®›CIEÔjUÊå"–e tJ±XÂPiXÄ*융:tèð‚ªD»ª ű£¥“°c8vgÙèСC‡:ü„Õ(Š€öõ a·­fxÚ‰©_ Æ7m‹,SmwªÈP*Ã÷= äV¯‡®—Ã0,²´¦ÍÑ£ÇIb˜ž>ÅÄÄ0gž¹‘, 0ŒŒûöSYš§Xr š-†‡F)æWñÈžÀ{o‰þ>ÈtB«YÃ÷ ôuóêîKxÅ+/ í_äá<ÎÞ={©VkLOŸäÄ©yο`5ýC.޳õì J%›Ze–©“§ð}Ÿ¹Ù9Ž;É‘c'X·v==Ýݬ]3ÁÒü¶å¥³ïj+•’e1¶mÑ×׋RÖŠF£F³Ñ`¨;Çñ…i\Ë&‹"²$eïÞ½\}õ5ÄQ„È4ŽëbÚi’P(úœ}öVJÅ2Z iR(0Œ ¡ûñ<““'¦‰£1Ò,¤P(²´P¡Ym†)ÅBµÅ€8nqrê$™:/W&Šʽ]˜–àÙ]Ïpã+_ÅâÒž›ChÉôÔ,}4ku†Gr¬ÝÄãìçªk¯"ŠšÌŸªñ’k^ÁÝwÜ; »XF©–%Y^šãŒ‰AÌ.vþÝW±EÀø`‘©h‘á>Þÿþ_¥ÒZÄ)ÛÔæf¨…Q5Qª…óícç·ï…jƒÜÐ0÷~þoë04VÀˆÒ0À’`JM41-Ó4Ú¥UZc®e“D!ac9BhÐàº.iEíü_Û¶²mÁÐ/^h ²Œ˜Œ0UèV“ÃÇ1ØÛEïȶ­xäžoâæËôM®…,å‘û¾ËððFWuê:Q\pÑeÌW–ˆ“…VƒÁr³ZµA½]*cè ¡MB)ZÆ1*ìÝ»—k¯ÛÊ;~íÍØ2¡Ò¨RÌçZ“D1Bk ¡× ,¾wÏÓ\½u‡ö?ÂÝÁWžÃæ ¯„þõ|ïþ=üpÏnýÜ_rÝ;øáƒò«¿òGÌÍÇüI×Mì8ç\–þøÏ¾Âïýîëð “T øpàÐB ×]»‚ßøOo% „Q€eY(•²¸”²~ýzúú»¸þú«yéµWÑU.²0w”®ƒ@k‚°IeqŽ+®¸”wÿ§?äo¾üE~õ7ÞØuïîEж‹8b|?GÄ(-@%$I˲Éås´Â&Y¦è ‰4µVLøü꯿“ñ±uüÜMïåwß÷ßxß»…Ïúÿf©ºÀ§þêk¼í­bb•ÃG>1A¥œ8~³7½æ•üà{ÏñÑ[DȽ\võq”°íœm´ê5 !I[Mâ,ô} +ÒÂsÅ‹­ËB@šf§×HÃ!^¸°5P™nÇL(ˆ“Œ4ÑHÓ-ˆ¢?_Àò<”jb ° M5°m\Þk»RM ·Xƶ ’$B£p|Ò ¡ –Ô³V‡þ÷Íœ™Ãð\DÖ"1:EguˆBb1CB ˜fÛîBÊÿ³iÍíõäéìM­ÛÑRBWWÊúu!£ƒ!GöÅ<»KS­ïäTßQnƒÉþÕlï;‡ù³É…cœj8Tc…þŠ¡ZkZY‹™`†ŠXFyŽp°±OËÏÿ1q€|V¬hg¨ 6r9þž‹SJ¬]+˜š‚gŸmgÒnÜ(8kXÐÝýÓëú<ÆÆ$'O*„S§4“«[6ÃæÍ`;µ¢C‡:tèðØ‹¿nk&RJLÓD`Ðh´Ò P(EacÙÒ4RÃm±JK’,U­ùB‰GŸÜÃñã§(açÓ»¸æÚKÙ½{›·LÐ×Wfqq™8Žq¬"³Xœ8sÃZüîƒ4 q’bXqÒÀIÍj‹f£NÎÏQ(çÙ²­ .z©ÊZG ËÕ ¥rÅhÑn×ö<—V£ŠÎs³‹¬\9Aî±§øÌ¾Ì}G¹üÊËp\Ÿþž.*•yÒ$&çš$I)M”R(¥NgÊAˆm·Eh!ý=Äõešµ&cc+i,Uyj瓬[·Žá+¶Eª®¤:¡Ù´y=cc£Š>A³…a˜ø–eÄY»ÿy–à;6^¹‹8©ÑhÔÒÂÀ­ ’•¦hÝÎMÕZ‘$ ÃÔí¸†,Á¶­s1ã8AšÓ îJ“&!yº¨H±r|Œ¡Zó  yÎ>{GÂôK4ç«Úý¯çÛ°´f÷cO’ÏRü-› ¿}?òÌѹ½ÁYW]Ž:1…ŠFÑZŸÑÓÄIH#Œ‰g—éíîå—ßò Ç`qzŠJeÇ5@(Ticš/\¼hrŸ¥™˜Ï~ìï8±q/wíœËê³·qp)¥Y™åÀñE.¾b/¿êlâZ¥$K‹ ƒC°víJ‚ åž{¿a7¹ò¥/%hüÝ×îâ#·~•›^±¡QÁ[ÞúKDQƒÝ»Ž°yëJWñý<ËKW_uvû˜7²$¢Öq‡å¥E‚ I›Ô+ÇX³æn~Ó%|å«?â¦7Ü€+m´6¨Tê€hG4hI–´Ç£(!ŽÚNÏz«EÞu1D{mi… šQƒá ~ôÈÃøî½kï·MÐX`ÇÅgsþöóøÎ·¾Î7¿þLÓÅö|ú{¨«9”jòs¯¼žOßò ë×m¤X*GbÕØ*’$EJƒ,Ûö0\!Lâ$¡\ÌS«UȲ )Zk Ódiqž(NçºYd*#IR–ULÃÂu},Ë"Jbêõ¶e¡²Œ Qoƒ†‰ –Ý.dzCdA­ÓvÉ•!*¡ÑlQpJ ÒèdçtèÐá••† ¹†k‘Óe›ˆj0œ§‘BéÏAÊõXVZg§_yÚ÷*Ú{¹ eYP,*W£•B)NgTk„hQð+l¯0¼Æ‰ÙSÖ^³Ÿ$pXžT« }úü¸¹˜))³Á,kh¤ V):³ßB€iB¡®ÛN¡-´þCש”í,Òuë$>¢™™i?aÓ&Áðp»ê§¹ ÃsadDà:’FCQ*i6¬Wœu–d|\t2V;tèСC‡?aÕuÛ®Ó8 Z!žç#¥ø_r ©ð¼öXªëØX¦IÇh­±mÓt‰ÂÇñBQ¯¶8pðë7làðáCœµå X\XÆÐU."1h5ZÔ«žÓ…6MÖ­_MÂÌÌ CÃ]RàZ6(…Ôšœí`Õ¥y,7O BÂ(AhI>Wb ¿H˜$¨,BJA«ulS’MÊyÛËsãk_Ëèª5üáþ’'ÿìó\{í¶nÝÌÈŠAFVŒà˜1õJFFhR´P˜–$ ƒvæ©ee ¥Á³,æççè¤à‘9Ã0ؼu+iŠZ³I¢ÃÄõ]°A.ôtNh;Çu¹5‡ã»tuu3<Ü˱ã³4êM²,ÅóJ˜†Euy™á!‹°VåÐþ}\uÕU|ⳟË Ñ ˆ’®ïP.—ùÎw¾Ðí,Òf#dÇöó¸ûÎÛ©Vä½"X6…²‡“Üóí;ø¹W½Šêò<*Ë8wǹ|ô–pÉE—R. P™­ãe²T@ –ô1¥‹2]t–ëwTbÐ šä<‡bÙ ˆÐ)1…¾nú¸óŽïñÆõç²ÿ@Àê ]`j&&×ðüáƒ-x~ÏnÂÊ"q%!9߯s]heš&®ëE1RÅí¢32¤)ñ —$Mxü‰Ç¹æê+°sIX£g|·«—£»÷ðäCá86ãg¬Ë¢«XfàÌ3 ‹yì‘'X¹e#Þð2}è!¹ã.†‹elà j5A Ta:F[˜ a@šÅœœ:Œç˜(’¤Mò~ÏõI“KHLKb ÓD­”áB‰…Ùˆ=sÿãƒoeÓÅ“ÌE?vˆO}îo9yjš÷üöuÔwaÓ˺µëpmÁæM£\réeÒão¾|/ï|÷/3ºj„»ï¾Ÿßÿƒ[è±ùõw¾–ɵ=ÌÍÎ…!c«¨T*˜¶A³Ùbzú$““7a0?Œžî¦´hÖ”Ë% #¦ZiâL‚°ÂûÞ÷>οäZfg*¬XAÅ€Àó|â8áÄñSŒO¶EgaR.ù@[¸ÌåÊ”ò.QÔ@Ëa¤ÄIŒÒk×­&ѰeK?£c«¹çîï12êR. sù5WÔè-w“…KK³$­Ö,Ã=ÊrÈý÷>Ê3Ï<Ãûþ¯÷ ,3€ÊR ÓĶlâ¸íRW(â8>£jcÛ6–ëbYiÚþ½”•) Sà¸&­f Ë6±œ©ŽÈ²ÓsH²ZµÎÀÀ €Zµ‚çÙ(Ö[ÑŽVA ¤ñB1VHk\ß#NBL@ EGZíСÃ?½«3¦‡Ä£ŒVŒ ,2´n uFc?B´'tŸ†Û^׿R¼S¸n‘4ˆ–êÔ–r¹ ÓÐ8Bᦰqƒ$2wÚ…×]geïô_ÀŽžs(PÀÐ`š,ƒFr¹öx÷?ç’T(Z´XH¨$ºì.VæVýÌVýÿAÊöØ¿ãü‹°†ÃCpÎ9‚4h [Ï‚•+ÛßÅO«°*Ø6 À¶mxžfãFÍä„À²:Ç@‡:tèÐá'´¢ÇѤ‰&ËZk”§KTL¤!ÛîÔ,ÍÈ”8]†¶éàºI µ¨EÎ×8¶ÃÌÌ<ð†ÓCD4› *Õe–––¨U+ô÷÷áXj±•}Ø– Ž`h´€—ÏsôØ>&W_ Jw‹®È!} ”d¹yœR٤Ѫ 0ÐÂ`qq¥ ±-ÏwZ’Ä­Ê2ý½$Q†éxÌ?N_ï¿õc|õ¶Ûù½ßû6üˆ7Üü2&ÆFé)IL’ÏçI’„fCãº.‰!±m¥ÚmÝJk–›5‚VÄŠ±U 4F”°ní:²4¡Õ )÷öQê*ƒ”ÔƒǶZ â$Ae)  Žé r9Ÿz«I–4æ™='h4êxžCWW™®r³3sŒN®æûß¹›B!ÇæÍg"¥`zz?׌<ÏfËY›¸í¶;©ÕꘆE'Ø–ÃáGXÚx&ëÎ?‡ ¶HË Ùqáîºã®¿á‚xÃγzr˜ÛÎâ¹gŸáÚ—ßÀÂô,¸ BhrÝ~Î`jî *š»‰åJ,nchð]HTB´Hšy<‘R°LÎ:ûlî¾wO=º—#'*üɇßÂî‡÷³nýfžÝ³‹®¢ÍΧžD¥¹¼‡•‚VˆcºH¥Ak²4#cêQB–%©H¢ -~9A!‚¶;Š"t–" *Ag1ÒvÛ¡óÔ³{¹þú—’¡‰Â3•äzºé)wóü#ϲvÍ$Å‘z~/KÇO²bó:Ní{žÙ™9¶¼æTDÆŽóÏÇ·,îúÒW¨.ÔEd† B LÓ «¯—,NÀDŠV®#IÒ™@ ‰Ji!Lƒ|ê³ûá'ɲ'"˜÷,TßfúTžc{öqüéÃ\sÍzn¸ìlêó‡Ÿà ïG¢ IDAT·ü-å‚â-o»ÛÑÌLÍÑlNqÍu±kï3|ãλX¬†üÚ¯_‡—S|îó·09¹–R~”B¡LWK3h0?·D­VgÕªQ°ÉðŠ.–g!‰ðÝ2h•jÇÀ÷’$`pÅ—^¼…>¼“oÚÀÒâ–”,-NcšP[–˜†dq®ÉÖ-—ñù /ÙaÎܲÃ÷¢EFšDäò9Ê¥Žã’+ôPYX¤Z­R*•B¼(²ú¾ÏóH’¥R‚ei ™ PÊ‘aZšfP!k¶ÅÒJu- ZÍ*­–ĶšˆV«E©ÔE>Ÿ'Ë2–——XXœ¥V«0>6F¹§›ö{•üΉ«C‡?ÎO Êe|]ÀeBT‚)êõSÄqët6¥ÀÁÂ¥„¡30L2)Ñdíæ-ÚÒ¬Fˆˆ,^&iÔˆªuZõ õz„e ´ò(šý¬šD­,spôQ”±’•=# [+Ñ (K!‘èvºJA«QÔ.$ú§ß_g1 Ý`I-Ðít3žg¬0Ž!ŒÿÐ1ÿZ\®¸.¼°ý³eqºpö§Û±jí®‹/†sÏmß¶­±íÎ1СC‡:tøÉ!kµ&õfB`96Ò6‘&4š ‘/p\—4M‘@F„­€,ÉNëJlÛ"—óÛceBQÈ{tw÷pèðq·‡ûx„aÊ]>åâƒý㔊]4šËضI³Õ" t—s¬,qèТ K4–°ñ¼*…úr+º»{X^®Zk„CB>gãºRjš:†„b!‡ïhÖ‚ "hÖ(æ< 9WyË›nâ{þŒ¼ÝÅÿþ—¹ë›ßæ»ßÙÅÞýujéÑ6(SÑŠ[„ADd¸Â¡dåÈê!å|Ó+`˜ûÃvË(á`:%j­„Åå:­(A&Žçb˜&ZI¤pñœžç`/ä‘ä .ã“+h6Õ…Žiaç œ¼Í‰S'ÍìñƒœsÎ6z†VÐ50ÄÉ“ äSHêµ:ë×o ««ÄÌì,]Å"y×fdå lÛfïþd˜´R…J[ŒõáùpêäAJe¥bjõ%Î=o;33SÌ:…çydÄdf€Ì;ôõsøÈIT- Ç²ºI=[$¤I*šaD„¸9—b>Ð.Q"Øzɹ(ÏäÖ/~™ÁÁ•¹Ì,M±ïÔS\zév&F <÷,Þ¿Ÿ°™ÃhgUJiaY.Ršd™¦”÷É{.Žc“¥š$N0 ›œWÀ·=<ËÆ5Mdš 2EšhTf‘$‚f!p¸÷®{¨-yl9sA’ï.“YªÚ䨑“8ìØº™Å§ŸæÈ£O°íÜíàØì9¼ŸÒÈ/½ˆÁ~×Ç4 ¶oߊ“S<õØ÷©>€V)ˆ”$¨APų3bÑ " ¬×‰+D&®UÂÆ!‹™Ä€ŠN$yôöÛøÎ׿ÄÚõýd.¼ÿÏ¿Á²À)ŒsêÔ<×]µO}üƒ Ñ7°’ééS|ýë÷óНäÆWÝÌ¡ý'éï[A+€]»÷°zõ8¾ïñ‹¿tozó+é(rÝË_ÎÄšµ¸9Ÿ8ŽII>×O«¡)—»‰ã„ÚrËp) ,WæYX˜'I4Ž“#ISlÒ¸ÆÍ7¿–Çùa"-A¡œ'ÍbšA“8SíHiÐZÔê ¢8>]2´"T&X¬´˜™«Ðl†ìÚõ, øÈ_þ>GgœùÍ|åïnƒ°….8( Â¥&q«…ŽkLޝ¢§8HOi%}ùc#eþáAžÞ} ×[Ã_ßúZ­M;/9ÍRÂ0d¹R¥DÄqBœjÀ@¦e#¤$ÕŠ ŠQJ*Eše¤iJ&Ôj!BÚHi“ÄŠ$ÑX¦ƒJ!I2|/Ge4k lË9ݨlbš&Ai5†a/ø‹Eòù]}½˜¶‡íúhѹ8ìСÃÉéàSaX†”=8ÎJòù ”J›(–6Q*m$WZƒQìTõÍågY^~Šåå'ÿÙGeù –—Ÿ¤¾ü,qåB€Óµ’|i¥ÒFŠÅ3qKë‘Å•8ÅnVôösͺË8ä"úÕÌ·jo§×ÚB©nß@5 ÈåÛ¢ê?åVÕZeGêGØ»¼—ÕãØÊf²0É€7€)ÌŽ¨ú¯½8mwjWWû‘Ï·ã~ÚOA/dýz”Jí‡çu":tèСC‡?YLÇÏc9&B ’8 Öˆ0 “ro ßÏÑŠZq„cÛèL¥ [š) ›1q¤Èå X† ÓÔ˜6(­0Í"‹ +V q`ÿqrAH¢–…aõòô3OqñÅ;° —¾žAÙtÆ þð~þuo¤Öñ’L¥¸9 aÆè8Á”.®mžnõi—pe¨4Æ0 T£• l5ÑZ"m•$ 4†ã{ ÄÚâQ&Fúùâçÿ„¿ûÂm|ìc_!1Žqãk^JbVpý«×Ïy´–$YŒZè8ÆÊåÑ•¹bÃr8|ø(õVF—p0ü„QH¾ä!„¦ÑlÎ-ŸŽSÈa9²L`ZÂÖØ¶‡ÒÛJY·~dPŸp¤AÓ˘ä™=OsíÔ$ªUab´ŸXÀðäfêõ‘Äl)i¢°L›½{÷°~| ƒ¼#+ú893‹r},Ã" ªô•»Ùºq3‡b w©Á°,&׬áéÏR¯×Éç‹® ™¶Ð §0ÄÜ\L<£ñVX7 °Aib“,’˜¾ƒiHTؤ`D3”VõqÆy›øÐGoãÞúK<ýØAŸÜÏ/¼á.ßx%û÷t—]~ Z$º}¦§§éîî!W,…1CÃ+ÐJg:ËHã­|.ݽ«ps1{÷íçÍoy·þõŸpñsÇw?ÃC÷}5µa»´DÂüÉY¢ÙÂq4ÖØF/fÚMmúïúµ—qßSS¼áMïÆ2ÎÑ}HSÆ-L™a[žãÒleø¾ÍÂb@eiÐDq†' Û¯0 ÇFÇ4PJ!”I·ÛÓv²+…žcà9‚®n‹8ˆO ÅÒÔh®kÐÝÝC«‘ÏgX–ƒÖšr¹LWWÛ´QÂ`y©Iey‘r©sâêСÿXr\LÓ%ŸøK€%¨/¡ƒE’l‰H´Ï½ü˜Â¤RÃÎãtáæ |ÿ;/ç œËl£Å‘ê'Â=º‚% „‚°.ˆc)m §…Õ(æ)¥H’„HGT³*G‡©Å5òVžá VæVaÊNhJ‡:tèСC‡¤aHLÓ"MSÒ,ò,’4Á0Œÿ¥[œÎa±LÃ8H»»= +I’„j­Šï{œ}övòyÛN8uêßúÖÝ,̧¬Z5ŠaJÆÆ ÌL/ ´dqi‘Zm‘rWM'yzgLÕ1LA–¥$i»8 ¡‰“Ó´ñÜ<®“ö=´’AD³ „e9XfÛŘ&Š4S„aH³Õ¤^¯ÑhÖ Ã&³3SH¡HÓ5xãoâ+_½…mÛ{ù‹~‰oÞ~a­ÈÌQ“}Ï5ÈçWP«×YnÌKË3d¦ Ü›gqî(ÇO⌳Öжe»H*Ëp­BÙÚäsÝX¶ƒëºX¶Öš ˆÂˆ,Ë´‰¢„5kÖa05]#Ëiš²íìmL:É¡ç÷³bt%Âvˆã˜r©‹]»v“¦A+Äws˜†ÍšÕk8xà0†!ÛŽfƒ g¬g¹R¥ÑlP,q›(ÎØzöžÙ½‹(Mh„ A­^cÛŽ<ýì3øý¤IL«Ñ)_·†(J9rôÒ´ðDzQYF.—òlÂVˆi¨4%C ÛEIƒ«¯½žÅeM±Xàñü€Ñþ®¸ðûYÁø„ÁÝ÷daqÓ´É2M’Ø Cšá<ÒLP*"M#â$$ ”P¶´…&ÉR‘Åuœ²E–Tè*ÑR žÚ÷ß}ô8¿øö›‘ÂÀк‘Òš®ðÙ[>Jòœ÷†×â taš­&Ás{yøkß ˜Y`ã¦õ*Òµ±¤ žÏüÜ<¦ëaOLÒ?2ŒW(rüè1N;Ì ôrƒ•å>dÑãàìq¦ëKX®MDŠÛ•ǵ úMíâÛ_ý&ëןɶ‹ÎgãY[èèHñ¹O}Œ7Þ|#isÙ¥›˜=éHfççøÓ?ûïùíwQêêfqi‘™éã¼íWÞÌøÄÃ+z 5¢ - J¹"y¿R—®â¾×M)z»øÆ×nçë·ïæõ¯½¡`qn‰4Ñ L¤a`Û…b‰\>! ¤§¿Ïu¸ê%ùȇ?‰Ê‹ó xŽïz 4¨ö©m·¹cxŽ…íZ§GAA†RJg¡Uo"¸–ÃU/¹†ë^zR§$i‹4i`Y aÛ8nž4•ÜùÕoð±O|š¾¡aþü#ä­¿ò‹TjulÛÂ0$¥b‘œïŸ.>SX–Aµ²ÄÒü"*ÍÈÒ”b¡ˆÎi’¡ÒŒêr…ù¹yÂV€Î@g`›&™J˜››£V«Ñl4¨×kA‹4ŽH³„L¥HryŸ\.‡ã¸8Žƒïç(‹ôõö½(ضC¡PÀu=²4Æwçg0ÍNK‡þOcÝà!û¶P¼˜þ«x WÿXž+ñû/ÄôW‘e°¼ Õ*$É?þŽÝžËêînúü<­´Áž¥=v„ß}ß_òØÃ‡iU ÌO§ÌÎ6qòÜ’ÇóG÷bLb±ïÐŒœ V Ý¢.¡Hpl‹0 I"°ŒÍž§ó_ÞûVJ¾ÅÜ3Ó=:Èå/¿Žçž|’SÏæåW\ÅðYgQ›ÇÄBÂB•Ç141†hµPŽÇðø…r7KKUöï?ºÊ½XaBHBˆØÊh&M"3e)X¢·Xbqç^îÿüWذ~ç_s-²wÓ69ãÌa¼²Éªá>šK!øï7³jUCÝ”J>Ï>û ù|ë×o¦P(ñµ¯}ƒ‹.ú9æ Þó[/¥\t0I(å|l! )ŽQ&‰L’Ð ï÷`yî»÷;¼ç·þ’+.?ƒnx%B@±P@e µÀ®ëã9>:ÏóR’ËåBÆ¿ý;¿Ã«^už—#Ë MSlÛ&ŽãvÜ@ú?Ù{ïh»®úÞ÷3ç\}·³OoÒQoVµ%Û²ä^äN Í`ìP Bh!¹à†$ÜÜ„„—B€k¸`Àظ÷Þän[²z9½íºú¼¬ƒ“÷2îËxwa¼ýc ICgìu¤qÖZs}ç÷÷ý€Æ´¶káº6Bhf«ÓLÏL135I³Ù¤«³“ùóËÜ|óÏ©×},Ë¡oçÕ»˜Úû:nÐ^rèíj#MSšAD˜*´0¹æ{?åº[÷ó±O•m—\Fèṵ̂xÇ;ÞŽíiïè £³“ÎÎÊím´µµ!…Àq,ÚÛÛi6›„aˆï¤iJ§˜¦D““ÓÌÌÌP«×¡VŸ%Õf•z½F³YgjjŠ™™É7KAÆFG¨×kÄqL’dׇçå(–ФIæ³-ÏóÐ:ezz†‘cG)äm:Û‹­§V‹-þ_F&(aå1¬6,«ýÿÑa˜íN]½6Có%õšfxX35aøïÏh*IÉv*ÌcAiˆ’Wfv6ÏŽÝy†3å×8îf÷ÌnvÏÎý:³›Ý³»ØSyCÁ!bÓëõ±¤¸”…t:ØÒnÿ·hÑ¢E‹-Z´øÿÃËy@‚š0 ¨×ëøA@f/ý=Ø–G­:ƒ¥4J*‚ À0LÛA*E”¤o~`.—£ÑðY04¦?E’ŒÅ©a[ŽkàØEúú8|Ø'I ˧»T¢^¯ÓÝÝÁ¿ô{‹9Ð Íz„ÖY;·D–~H˜ÄÙŸ‘8žK[[& Z¦•9hEˆC™€À}´N1-‰e›s¹†u„Ðaƒ8J1 ‡é‰ÃH[ò‘^Å–gò­¸•ÿþç?dÕ ýüöo_Æ’e= Øwp~ìãvx`™¨œÃº5'093‰éš4£¬>ç•iÔ}Hl aѨ51½”(‰1Me(jõ„0ð±±H´$ŽÚûÛY·v5#c{9xd”BÛ<:ÚÊ(e²÷Àa.Üv"Jpm‹5',ãî;n§ÇhI õZ“¶¶v¦¦f¨VktämŽŽðK—.æØñ#ôÏŸG:çûGŸÃ*|—/}åZ mÞsÕUL`dä}%Ï%öCtªIu€i*Ð  3Ç_œÄ8¶ƒ©ZjÒ J5hŒûÌ_¹šÿñ/? £Ý泟ù •éiúiåGÿü?Øþä üÁ'®bñºµ`ÀþcG(·é8a%^w= ûéí脆OgO7Gc¨¼„Wž~”‰É †Ö¬&ö¸]ÝÔku”å²`a/3c#¼¾cóúúèéDYжbÊL Ý–#´bܪ»_çïÝÀ’®>Îy×ÛQƒí©¦Z¥Tr™ß7À·ü #vqÚæuT&Ž!ˆp\›Û︃ͧͪµ§ñÂöùÎw~Ài§-áï<“³ÎÜL­:KÁõÐZãØµ†ÂñÉåKLNMóüsÛùéoâλv²by'ý×_Dù|Ž£GPʰ …P ‘RÒhÖÑ:ÅqrTjUüfŒa8X¦àê«?€ß )ÛË„Òb±ˆaH´–s›91霃µP(095Cä7±-Ëô(wôpѶùηàê«^࡞dfb’«/Ü@’LcEU´öi„½Ý+9>:M¥Ú`Çk ççùæw¿ÁȤϿ\w£c!7ß|3çœu2¹œ@ M.—¡ð\¥2Ñ16>J­V£Z­’Ë{8ŽC©Ôd.ø0ŒP†If­Òtt”ñsìPÈòRÈeg/¢M BícÈ Å¡cc$ÚbÅʵ¬XVäÀáIŠ=¬9yï¾â vï~†‘áýôÍ›OuòŽe"¤`v¦†Q4±L…NbÓ`ÑÐ|´Ö>°Ÿ$,Rbzb2s¶jA[¡ˆmÛ¡O©-û½Ö)–e)IcÛ62·= …bôh65B¤’ !Ž3AÕ´²ÃP(¥°-‡bÎe||„é©QÜVÆj‹-~]•FÖʾd©`dX3:ª9>œ•uw º:³¿¨Ì FF ¦«|mQЂ³¶”ú(ôºèl¿êß¡)$v9#×úOoÑ¢E‹-Z´hñ¿w \¯×0 a*¤ضïûH!°Ó40- Ïui4ÏCA ¤M”$$ZãØ&–•’¤Ù(ë '¬àû ùR Ë)pò¦Øùò^¦¦gX¾| ¹Á~y¾üÕoòþ«Ïá-—K,X¸0l⺖©HÂHM–©5†aàŽ#1”‰ÖC¡ý00ͬ¸ ŠB’4A§š$0MÅøÄqFF†ìGJ‰2ùB Jm9DjS­’Äu¼œÇïüîål=ý$¾ùòÏߺ•n¸“Kß¶…+Þw¦i°oÿärí{X¸x¡R<ÏÍFò-ËP¤±&¥F£©Iµ ItÒ$MR,SaZ†²Z£ÑTg¦èëk'Šaz¦L$žmÒÛÕÃŽ—#½ÍÙIÒ0° ‡‰©)ºËÙyÛE6år£££¬\2„ P,҃ɱcÃŒŒŒÐÙ٤ضKg{7õšÏÔÔ4Ë—-§R­†!ýý}´µ9zäkV-ccìÚr2æõ×rààQlÚH£2I˜Ä˜žABJ£Þ¤;—Gh!l{âY^ßòö·å˜9ÎçÎ?ø}½¥gÅ<,7Çìá”:æñ_û>J¡TbëYgóÜöí<ûà#¬\¿‘ÞÁ~ÜÙ JÚâ¾ÛîfôÐA.¼ôm$ »ñEÈp=¡dZL屇_¤»lÐÓYböØ:Ú‹4M˜©IO‡Å~ê48i]'~s–0ï0r|?…œƒ¡ MLÛ! ö½q€¿ú«©×aé²>Þûîµ\tñ©,]ºˆ|Îadd…¼ÃØô(…b¿¡Ü‰Ž Õ(™]ííh’ËeyÍÕZÏËcKYÈQ«U)—ÛPJÇ!¦i"D&Œ§i‚RÙO˜fÑRi 9ÞîvfflX·ŽŸýô|æ³Æ#ï"HàÅW²åÄ>l‹bÁ¡½\ä•ݯѽ¼H?Q#ä´S–39ó:ïÿÀ‡Y·v=]Ý\ñžóÙxÒê•iLË$IB"?ËëUB øø) yÂ(À²Mš~ƒ4M(•ŠxžKŠƒ!$IšàX !$Qãzö››@Z'$IŒm[xž‹Ö‚$ÕäŠEâ "Ž,3¥ÇÅ0–e!¥¦Þh6êœ}áùDÕ”j²´hÑâ×%¡¯/ó¿6›09¥™š$±Æo J¥9aµÕª¦Ñ$©Mw—`Årãu dù?<¤•9Ý¢E‹-Z´hÑâ×`ýû;ý+¿ÌLã,ÏÔu]¢(!‚7óM-ÓÄ4T–7Ølf­à^4MñƒÀ²¬ìkí¬p¨Ô–GÈÍz@ öî9ľ}»¸äÒ·±÷õ#\ý]4MÃ?@­Zá„U+èîêDh„ÐRËrQR‘&i&þ†M¤Í”)#kúMšÍ&†!"sÃ%ILª Cá8M.çR.—’¹Ï·PJÂ\|€!AÊ!¢¨Á`7›7obÅò^víÚÉ=÷íã_<ÉîÝ{8ÿ¼mlX ‡‘ñi|?å}ûœ·€R±DG@D®`c;6Í0¥XlÃvlªÕ¢8@*‰Š0HÊÊŠm“›o{„þ¾§¸ž6׿ùíO±çl8qZD~DzyãàaŠå.úºÛ1M‰4LÇáàŒ ³~Í*ÆF†œG’¡cÃJ%zº»1 ‹©©iJ¥*•:oìÝÏҥ˱,“0 0Lï7ym÷.V®XFÐhâ×ê”:Ú9rðÏ>ÿ"Û.½œ4L±©AèãØÊ$:"IM¤•ãÚoâņY¾¼ŸÎvÅ×ÿÛ_²ó¹§xúÑ_°påÚ- ©Tñ!]}œ}æi<þøcüý7NÔœä¤u›ÉÙí„aˆ1© õ¥Š¥6ЊfÝ'j(ò¹"Ìó½~Î?~ó»üö;ÞÁ9︊`ç>îûùmüð»×ÐêüÁç>Îùo¿˜š?KªÕ±1šÃãÔóü“Oròé§±éÊwQ©M‘ïï&Wê`lÿQäð$õcÃ<÷â3l>ïtº‡˜ šD(’Ta+'ËžÕ)©NÍÂ%K¡³óÕŒ:ÄÒEË8xûý¼xÇ=¬:uCžA½ìa•:ÉúH°ùo_ÿ7Þð_ýâÛY·r)_Çu\\7O¥ÐÝ3H%<ûÌËüá§ÞÎß}ã‹ôö—™?Šc H ))JˆTAªZ°ˆ÷¾ÿ­|è×ò;þ-N?ãDÖ¬Yii‚`Ç•HB\ÏD*@á:y|¿‰i*r9¦ß`ff–r¹eÄqL[¹Ó´:Á´L,ÓĶ-’$¦Ñh`˜ Ó00ŒÌu'YôB`Y&QEíå2;wì `€žîÎ?ïlÎ=û #æòóÏ`^_;Ÿ’Ž1ql’ÿþ£{¹á¶Gš·€UCƒìyùeÞÕ;xË•Wñ /ðÂöÇùǸžÿèÇ\xÁ©t´ÑiL½VE§zÎ¥³&©Ž1”¢½½ DZ)·—‰“¬ÔÏ4 ÒTãû>F=»†e6æ*æf]³ŸS™ýã8s¨JAµZGICš4M¤4Ã¥² fCI4šT§Ù&Q쓦1Iš`8«ÿ—7ô0 ™šš¢»»ûWþðȲœ[%1-Z´ø¿Þ2QÕ²¹äó%¡Þ€‰ Íô´fbBSo@wôöHò9I©$èìJ …ü_Þg[´øÏ$ɯôùEÓÓÓôõõý§>£V«Ñl6éìì|³0øW”òÍ8¢-Z´hÑâ7­5išþJÏ!¥Ì¢R}Ÿ®®®ÿ{aõ ŸÙö•Z­FeQËysn²¹"ÛÆTaà“ÏçIu&@8v˜–RBf Ý @C’´— è'ïûüñŸÜÊ®Wãö;bÏÞ>þû—ó'òÇ<ôà=¬Y½šB¡H’¤s-Ý 9ÇCI’ h Õú,–-‰ã©$¦iÇ ¾Ÿå¨AÛVXŽÒ4A§‚|>G½^4måvâ(F§!E&h ©b„J0M Sº˜ÒÀ44RÔ9eËZÖ¬Z€klz˜ƒ{§¹÷¾Çq\›Õk70п˜#G†ùø'¾Ç†ç§eϤZ›&IA(—z£Ž)žká86†i ”"IÁ´LËÀËÛÜyï ;º³N^Oeô8{÷ìdj¶I”4Y²°—ɱC 9^{㎎²åäu„A? Éç èTsß/îæ¢ Îe|lœžâXSm¼ôʶœ¾M溳ùóróÍ·pâÆ¸ž…ï7éŸ×ǃ÷ÝǦ›¨U«”Û˘Râæ <öø³Ý"KN>úô$•F…\ÑÅ0]|¿N*BêMˆÁzF‚㙜tâg_z «æuóÄãñÈ}OpʪŔJí8=½¤µÝ==\|ñEŒ¿Æ÷®y˜—žŠé‰ K—,Äõ Š¥v„0‰‰iziòvŽ’W 70È‘¯ñ½ënæßü9_þ£?äô§ñÔÏnæ{ßúß÷8_vüèÕ,Ûº‰zuœˆ„¨áNU8¾c#{bÚ6ç~à Ò6ª ©åàbQ6‹~yýânÚ{ËœõÌV&ñ$•(iáY.RHÂ8Ä›DAˆ¥ÊñðÚKLÒxòEŽüâNÛx2ó¶m!^µ€=SŒ½~Œg·ïäï¾ùm¾wÍã\ýÞ¥|òã¥QŸ%ˆ’8E©–(e±háB>øwpú雀&ÍÆ4ZûÌLOâ86q˜ÏiÔ5¤Â-¸"t‚öqA­6E¹­@£1ÃÄØ¹œ‹@c(;së)³ô0 “[o½© òùwß}7ƒýýHQàc(e$ILÄQ4çV»Ö£„$N°lg®Ø*ƵmÒ8bjjŠÞž®ýÁµ\ó½kùÈï’mœÃ¼ž~íßÃü%$cc©ÍIoß¾ö)í}…3ׯâ/þË?ñàƒ÷pñ;ßɇ>t5¿óáröÙjgíšUØ–Çavs&E pm‹ Y#‰Câ(À2 LCb&qà¹q1|ü8:I0,“(޲ edEÊœsSaÓ4BRlï¤^©b&…Î^ÂfðŸ4MÑ:!Š#’8ƶLõ q‘Ä)Na]KXmѢů=†¹œ P˜¦ M!I²,Ve@Î Ít÷@>® ¶ý¯¬-Z´„Õ–°Ú¢E‹-ZüF«ÿåó%Õ1–eÌ9Å"´Öh JI Ó" cÆÆF8¸o?½½½˜fÖtoš6Iª‘J!„Â|’$Á4 S23=A!ßF’BF -XÂÈñ<öèªõ”|1åsŸÿåŽB¿Á¡ƒèíë'Žbò…†RÔëulÛBJ‰a˜Ž‹D5מk—ÄqLG(••#(3+6Ò:Æ4 â(É©ˆL€M!M4Iš¢TVfQ&TkÒTa›¶aG L0;;ŒHB®¸âJ–/ìåÐÁüv°Ê£îâ®»îGª”5kOaçÎçÙ°ádr^CÇ”&R¹h u:­1Œ,ÖÀ0,Û¢6ˆBŸ—vìàчpÁi‹ÈGN±“^|œ‹/< íÏ`š&5?åÑg_á² Ï  %iše]>ñè#¬_³šb!OÎ˦’¶Î^n»íÖ®[MD8NIGG/¿ü*Åb‘~Ò$Ʋ¶epìÈq\Ûc`p” Pììã™G·cZ9fÆ'ItÂÂ¥CLV&Q†CBH˜T±Ì"¯í>Ì]w?LŸ<»¯¸€%=%òý,›ßÃäÁ£‹yò‰ùÉððÃOpøØ¤IBAwÿrnq3¢Q©3rt˜}¯½Æ¿üÝ?ówsŽmó¡«‹cösóoäÞ{ïà„5Ëùä—~Ÿ­gœB¾¯“úä0õFCƒ›šìxâ9î¼éN/ä­Ÿøª«ÄT0KÓP¶‹Jìr=Bqÿ½wqú¹[éÙpˆ„ª`Y9;ÂÄ÷›D:BzH‰Ð¥öNJ=ý,Xº’Ý?»êØý+Ó¾e5×âŠw}ŠïãN~xÝ£ì?|„«Þ»‰?ùÂ'(,¦fFQ† Ö)/—G')JBª›8¶&ŽøÍY )h+ˆãÓ°IAÄX¶G…4ƒårÇ1ˆ¢&õz…£GQ,æql×q°-jâ8Ų,ò4IÃ0MÇejjŠ|¡È¢%Ë™š˜Â²-zº:¨Ug1 5—q¬0M˲‰ã„ÀHâ¥,lÛ%êõl£GIhÚÛÛB2[©ò7{+Óãûqr6Cƒ‹ÑAL¡]0½÷u$u™kn¸—ù½E®¸à,¬à‡Žûüå?~ŸWwìbtô«W/cëÖ͔ۋ4”t‚íX8¶M’Æ4ý–%ѤH©±ìÌE›¦RJšÍ:I#$ä ,Ë$MR*Ò¹—5ÓtæÄóÍòl´„A„idù´Óã|úÓÄšu«éîìÊÜ^2{XŽkÇY$JŠÀͯm «-Z´øAÊL4íì ô ³£¯/s´sÏzËʾ¶E‹–°ÚV[´hÑ¢E‹ß(aõ“ÛúÛ¶ñ¼,ÛOJ…ë:ü²VI„A@g{{Ö¸EhÀPVVd˜Ê ^¯' ¶m#dJev†4¶‰Âˆ©éI/^Ê#½Ä¾ý3|ÿûÏ%—ŸÃüùƒT*M¾üÅ/3;pÑ…g“/@’Ä„¾T™VhM†4U¢¸N.ç  …ïDQŒT™#̲E>©ŽH‚ A)E©TB5ç*“¤‰Æu\lÇ#Š"¤2P–Eœh’(Å`Jˆƒ:µÙ<ÓD锨¯±lÉ ï|×EtvIö¼¾›Ñ±ˆW^ÞÅOoº‡jµÆ¦M[¸ä-ïdhhÃÇòúÞ½>t„ÀO0 ƒ|ÞÁ42¹$IâLh C„(¶kÒ$÷Üñ›V–)Ð^ncÕúÜzÇ#œ²qˆ®‚IÐh`äÊ<òÌ œ½u#¹œƒi»Tfk¼¶s~½ÎI'žHk´aÓÙ7Ÿž‘BÉcÉâ¥ÌÎÖÈçÛ0”Åã?Íž×÷³eËɤ:Ʊ &''pm—;w³zÝfk”a‘³ò´•zøÉ ?ã[ÿtOYNï`Õ ÒD™š(ž¥”ïå†î&Nrìß?N|úóïÆ²$©_¡-W`Í¢•ì}y'>x?Eæ­\ŒHøqƒÆì›6oâ-—ŸËŠåì}ãeb/·Þú4·ßö wÝ~ ÷ßs/÷Üq?ºî'ÜõóxðÞ§9ôÆ0C~e†ûï|’éÉ}ôôùO|€+>ú~òe—ZTB¦'&éíêÆµ <{ûýÜ÷ó;X¾l1—¾ëíØ+DuB×ÂôòøÕ&9ábD’ûo¹•Ù©ãÌ_6ŸÙÙ z—/F*´H%¶rˆ’ÄH!gPõ}\·Hebš¼pxøŸ¾Íðáì<ýDÒ¾6Œ03R¥z|œu+rÚ9'ð‘ßy+Ÿø½÷cÈ&Æ …6?‰ÈŠ!Ã&¶2¦PPÌÎŒ¡ qLƒ$ŠHScy˜†MµZ§Q÷±L­4¥¶SSäóår™ÉÉqöïßmÚ¸NÛr¨ÌÔ š¦eÅ!~ÐÄ0 ‚  V«ÓÝÝC.—§½£‹( Ø·?…|ÃH˜¦½£ŒNõœ3 L¶æœ® ßt(Õ rž‹ß¬ãXžãÐlÔ™š˜ää³ÎÆQUn½óNnºé^nøÁ-Üûk7 Ñ)RŽï¦Ñ³€ënz”ó¶nâŒU ¨ÝÏG?úlXN­Vãç·ÞÍ×ÿòû¼ôü}ˆ$¤³ÜF±Ão6æ²^ÕÜMTÓlV £C€¦^¯aÛÇŽÅ÷<Ï%—Ë¡ E„˜¦='nf›S¶í¦Ù&•ž‹,‘RG)a‘oïÅPŠ™™i>þ±¿ç¢KOeéÊUD$iŒÖ)%¦i …@ Ã01-aµE‹¿1d%©ÿ* þÛã_ãSZNÕ-aµ%¬¶hÑ¢E‹¿¡Âêï~èä¯H)šÍ&Ê„ññq”20 Û¶°ÌÌÉåØÙH~>ŸÏ²…B*…ã:H©‚„ Ž"¢°I.—' ŒlÌžËvh/-æg7ÝÃleš³Î=™ƒGrÍwoàÁûð¹Ï¾…¡¡E(Cd™…‚7K³²}ƒ™©)Æ'†)””’ÄQBf.2˲2gœŽ2AU¤¤:¤R©‚ΡQ#Da„ãz!1 ) õR$©’è8ª€0×Ìsxÿ0–éàØ)•Ê>¤Uá”-çpιg’$3ì?0›5šO¦¼øÒ+TggèíéᄵkY²d1år'õF“Ù™)&&GIÒ×q²(¡ˆ£©$–­ðƒ:åÎÅÜvËí$³cì”Ó¶nfhÙbî¾çònå ¨Öª¹6ž~i7}ÝæÍ煮¢„ör;»^ÙÁ¾=opÁ¶ ˆc”†éP«×yô±Y»vi ZK}ì ¾öµk)K\zéY(CP«W²r2ÓáµÝ{™74¡4…Ö ›/|é'¬X:ÈþüÓ˜*!Æ'D øØf™¿ù«¿ç²Ë߯SOî ½+Ç{®< Ó€0öI›ùØåä .äøÞ׸óž™ÛOWO‘bÁB £Ça‚OYÏ…Û.àïz K—ôQ,˜Ôk 㣠šõ¥œGÁ3énÏqêÆ•,œ?ÄPOW]q—\rW~ä}”úKø* U¶ BºËÌOðÐnæé; ·³—|òwQó{˜™'°$*ç²g÷zJ]¼6†÷ág?ºžµëV°vË&ŽM ÓŒ …:‰Â êWñ‰ŽDx. ?¦Ã*ÒÜ}û®»µKXwÕet­^LíØ4³;ŽðÖs/ã’+¯àü·]Ä‚ùÔ+c4ý $•òhF†i4ê"%ô+ÌVFq•9ÐÃe˜”Še’âT ¤I­Þ™mD˜ŽA1_ R©pðàAæ ÌcÉâ%x^Ïòˆ‚C9”K RRÓð€@‰iÙT«5JÅ2#cãÜyçtuuc( iH½V¡··‡( ! ü¦ãd…mQ˜ P¦Éñá&§&i/·‘Æ‘ïcÙ&B)^}éEÞñ¾«¸ü²‹éê*pxßqb;w<Æ©‹»iTC–÷6n¿ïi&åÌÕøGY{Æi¬Ù¼•sÏ¿„·½ír¶l]ɾ½¯sッpùå[)r¡‘ ´HIu:ç@)afzš‰ñqÚJ%´fÎýíÎÅžh JÒ쎴þ¥cU’À³Í©æœ¨ D4juÚÚÊÜrË÷éïäÔͧÐlÔh4êÙ÷$E¶©¤æ^z¤Â´–µ„Õ-Z´hÑ¢%¬¶„Õ-Z´hÑV „UÃuB?ÀP×qi4«„AHƒŽ› S „ éWyè¡X¼x1ÝÝÝÊ ÔV¦/¦>i”¢“&(SYÃD(eëÌ)j•©ÍÔY¿n)ÿõO/üñ7yîÙg©TR&'š|ú·rÆé[ˆ¢:3S³”ËEÃ0PʤÙðÁ“ %„ÒX–­ˆB” Ë´R$F“4ñrYökC&è4&I}tfnU%I’¬& C’Ä@‚ h" )@dñ†ÉÌÔ=Ýí¤I IJÑ+€€‘C/Ò×ÑË—þø*Þóîa~vë“ÜzûC>Zå«_ûÿrííl»p#W^õn6n:‰¾¡~FGŽqøàöåµ=Gèîèf €Îöv‚ Amz–TÇtv´qš¶?6Ɇ5=C¤FÓ·®âÞû÷rѶ…XLJÅÚUóÙþê6nÝD}æ%¯ ‡˜5K×qãsû˜­kJ=ef¦§ðk›6mä¹ç"ðëtt-@(;î~€## UJ˜†˜¨$¢«\$_ðصk''m:™8„J=äŽ{ï$ò¹ö<ý0ëO\JLÓ Ö­ŠìÜ=ÍdEÑÞY¦6;ÁÆ“–ÑS,P™­ã¹yB»N%ð)å ¼ï“§÷Á¹÷¸ÿ‘orù¥gsé¥oapÁ*‚©i¢áòž‹ÕesÉå[ÙvÑis¥e eâ HSržƒ¡$ù\7°$‰&iÌ¢ëU”aR¶,œ|rœÇo¿×ŸzŽd¦Æ‚RŽœ†\ÐÁTR§¢%.ÁH•Wyž¥ö÷”yটp|¬ÂÒËΦ¸f5K]“£s|¤Ê²ÓÏ`j|‚ºn«)…NFÆ+t:1pÝ_ÿ«W.dýy›‘¥<{&¦èZ±šy'°gç.žþùKl>s3^Þ–8¬“/ ãÛ00õKXXÒ!Hb eŠ4Nq$…ééiÇÃ2èéêÈŠÜ„M+gSȲ‚¸Tå.Ç4¥O§Yö1)‰Æ¤TÌQ­ÕBÐÑÑŽ‚ááa 9‹Ó6o P(ÒÕÝEøLLN‘b€È¢=òù†i u "skK$JHÚÛJÔê5\§ÈèÈ0BHºsöí‰ßþà_óÓ›rœtÊ®zÿ[xï;ÞŽ7þ˜°rÙ¾„JÒ99ŸýÄÛùúgÿ–O}ú;|þ3[ ¿ÊD™Ú¥¶gl^Ï›WF JÅ,GÖ°Ê´‰“h„aR(yØv!! !—Ï6º{úÑ)èDà8.¤’$ibš$ 1M‰e{Da„m;s¥U I‰âR*”òÃ7ocšŠSOÛÊK/%NŠX9…ûX®@j2Lâ$$Öz®l¯E‹-Z´hÑ¢E‹-Z´hñë€úÀûÖ~Ŷm¤„Aˆëäho/#¥$I"â8"ŽB¤tõv¥>ù¢G5q];Ÿ5¶iâXy/m;„qB'‘90•´A f¦ÇX¾|ˆ½¯¿ÌÔÄ8×ð¹Ï\É[.? ߯ÏY´µA•:% Zk,ÛÆq²ìB´˜Ëm´ßlÓ€$I0”T¦iáynæ¾µL”¨¹ïÌ— çšÀmÛD ÄÈ$Å%i”à7k”K’$BG)šÏøØ4íyÒ¤ŠL³tùç_xgŸ6·ÜvB f*Mž{a×_G¶L—°ú„Ó˜·CšipèðaöïÛG„äryònžŽîŽ;Îm÷àŒ-«Ùtò2êõ#Ì\έ·ßËÊõ§PêiÃÉ™~“Ç·¿ÎÖ3ÎÄV>I½Š«=šÅÏn¾Ÿ .=›©ú0í]m$QŠçåxþ¹gq½2ó†–Ñhj¾ø§ßæÜsOàýW}€ÊÌ$óz¨ÏŽãYFMvíÙÃäTÁ•t´/ÀðÉ`Ë-›×3rh§l\GdBP' ÅËõsÛm/óôöƒäK Ï=¹‡³¶.å¢K¶P™òq¼<ÒÖ$*¡Ö¬bò,Ûp2Ë­ÂR÷ÞñO>ô$bºÆÐÀ–ã ü*Òè¤IàO“DU\OÒÕ]ÀvÊJF‚¶4öAÅTk3x®_©SrrØÅvŒTñØ-·sÝ?\ÃÈk¯s‚…œ´jÍ`–Õçm&éô—V¡DÎðÈÅË»é8a=/ÿìîºé>¶\pÞº 'Mì(¥19ÃÈÞל׋¶ H|lˤ:]¥Ý+SrÛyö×2}t?ëO^Mß§0Õh’: ·ˆWÌÓÓWƳ¹÷.Š®AoWGV §S¤4¨WxNC*å`)‹(MR`ÚÙõ–$)q’$)JIÒ$Å÷³&¦ƒRŠ0Œ°-˲°me(LË ŠCâ$°mLË¡ÔVƲlÒ4¥ÙÌîŽk£ -]…ŽkH ³3u:J[© Ã2‘R`™&A!„`ll”z£A[±-µŽã`ÛA˜Ëq½ó‡ñàƒ7ÒÕÕɺu«¨W')Øš´2Êú¥] ×mþëïÂìäo{ž²ŒÃû¶³üÔE,Y»–`Zò­ú[FGÞ`ÅŠ…LLÃqd–Ál)¢4Á´˜–ƒ”ÊtiÔš %íärü¹lTÓpB!0Щ$!Âv%¶m£S‚!Žãf]:s ‚aJ+TqÒÄttbsÛmsåUD§>)5,+%ŠBlË#N$S9æ‚ÿå ½åXmÑ¢E‹-þcZŽÕŒ–cµE‹-Zü&òkð_¿ôÖ¯¸îœH B tš½ GsÙŒ HÓ$+oIR:Ú;Ø»ç FGGISM¾™¯k$ IDATP„DE Q”©–ȹq© „€4Mðò6õÆ4ƒCeÞÕ[¸èÒ³X½v1åîvüFÛ¶°= Ù™ä:®af߃&R,Ó I²FqÓ´R¾Y¼õËsi Ù‚DE1qÿrÙóæBEˆì³…w.À4iƒÐX†¤Q«ÑlÔɹ.õZ$Õ(Ó Œ¼¢ „¡ˆÒ”X \·À /<ËŸÿù—Éå$³3#ŒŽ†ìxñ wþìž{j£<Ç¥¿¿Ÿ…‹éíéÀñL:ÊSOogr¢Šå¶qÊ©pí·B¹ä²íÂ͘NDWï|^zqI*ؼåD¤Hð¼vn½};›Öoa ³‹ætƒbÇ *28ptí½9æ/í#Œj ²b.¯ÐËóÏïæÌ³/æº~Æ?yœ~ì½¼±ÿßýÎY·~Þˆé Ê==Ü{ï³\pH¾þßáñÇžç¶Û¯ghÉ×}ÿZjÓ£œ¸tVÞ#Òš\®“k®¹•Îî6öæÐþIÞù®­l:y9•J×u0”¦2;I>_@ EÆtvv±fýzzû{™æµ=»xþÙg8¶q#µ X,SÈ(Z.f"±FûÒ1µ$gÚ¸ZRôrX‰ÀpòÌŒŒ1|ø(Ï>ú×|û[léEú{xχ®fýç03;ÅÞ±Cœxñù˜®G¢5–iãW›””M.ßNcïnúÁµEÉGþè3%ü&–ë`ämJ½ÝìÚ¹­¡wpgãâ–ë’S.GžØÎ?½‘ù‹û9yÛ9ÄžÅtµN"-„Zcçr”ÛŠtwwqxϼ±g/‹V@ÑõðlK™H)ñŸ(ŽH$$q¶§)c»xž‡išhbši“¦ –mÓðCÍ&Åb?HµÆõ<edYÄÕj• 0-˲‚×uHÓ„F£ã8$IÂu×_OΑ´·wðÆû)—ÛI’„B¡ðfA^6™ššÄ¶,¦¦¦BÒÓÕE…DI„RÏs,Ë¡^¯‘Ïåˆã˜|þ^úûûH’™”Œ˜ÑÑ ¾öWS‹Ç¸tÛ6º­bäýlزŽöö–ÝA¥:Nÿü>–-[Œi[4u¦g§çr—q’`Îå¾ÎÎV0„€¹û‡2l”œ+¸K MR’$"Õ IÅA`Û.Q”Òh4(ÛR"„D*œ‹^°m›8˜–P q’ÒÖÖÃ7þæï9笳˜?Ô ¢Ž2üf‰©:º€¥Š£«%¬¶hÑâW½\ý?úßhú͵T‹-aµ%¬¶hÑ¢E‹ÿ¿Vÿô³—~%| eór4k š&¦i’s=<×Ãu\\Û&ð}FGFiÔ” %,Ób ¯%Ží‘¦ …AÎ+¢ ›$•h qÇ!ˆ˜Zmо2ýíÌÌC™B„T¦¦p‡$ˆÃÇ5‰¢­5š¥¶Í†DÈLI“ðdªË2ß,AHu’Ȥš$NѤTs…?!À›½8ŽIæÄ!i!Ðhêµ9ÏÅsfgfI58®ƒ² šQƒ(‰03‹@àºO?¹Þî>õɰí¼MÌŸgqhÿnŽŒ§Œ摇Ÿã–›áÅç^âàþq„ȱråÖœ° â<Ž›¢Ù°ùÉ wFMÖž´„r—GF$ZòÌÓÛ¹ìmã7šK<öØ.ÊÅ2 »ñ„ÀR£Ã#iÌö—Ÿã¬óΡ$tõ®Fk 7÷?Ù{ï(Ë®úÎ÷³ÃI7Õ­\ÝÕÝÕ9¨[je©P a6˜$lcÌà0Žã±±ýÆ6ç„yÀC ø‘,„„ „rI(§Vêœ*ßxâÞ{þ8…ŒßxÞ,í±ñÜÏZgõZÝ}oݪS'}÷÷÷ý®áËדݧîáÚ_Ï£½À½÷ÝÇíw<¡c]VO\zéÌ-œ@ùU2SçŽ[ŸäÓy3ú'Ÿæž{îGùçfùÑ×½’,ér÷]óô“‡Y¿a c#MNÌöøó|–+^ywÜón—wüÔ•¬]ÓÄäŽ ôȲ)ËŸ4ÍI“)$:˜^?Ã{Îâ¤ÍXn/óðcóÝäÙǟ湇åàÓ{é.,az}TfQ¹ÁõSl7Ætbºs‹<ýð#=r”;oú_úÂW¸û®ûXì,³ûÌ3xí_ÇËø• 7qJpû­_gæ¬ÝLoßJÞîR$yVàiëç^…Û?ñ:ÈkÞþfVŸ¶ ×îå±´¤¢F©µkyì;±°ÿ0wŸNÚj142 ‹=nüÈÇImK_ýr†OÛÁܱ£4Ç&Is‹·R&מŸÇS’Fs˜Õ[¶2¿ÿûžÙ‹É FFÆÖ¬ÄXdˆ@ᔣŸõÑJc¬Ã ”$É’•ç_‹ïûdyJ’ƤyÁÁ‡É²Œf³IQ/Ý`O8‹ã˜ ÐZ㜣0†ùù9¤,'”$IBžg¬Y³Ïóévû;v œ(10äyŠR‚"Oév;øžGµZÁó|LžÑ‹»X !Ê÷Îó|åü‘sæž=¼øÜsÌÎαqãF¦V¡òÕ™CKÍ·=ÀSz¼æ5Wrxï®ýÄ_ðÊ×]A­’µc‚Šf×î“XXZÀóË­%‚0 Ûí€GùYMQ”4½>õzcÊãß …Â9ÊE'2¤²HíО&/ÜJY•@ QZÓj/c­YY˜*~ŠÂe–$MB¯³â+7ÞË=÷ÜΫ_ó Û¹%žòA8úH™"ôº°:`À€ÿÂjè)Ä tbHp)x ÎÂê@X0`À€þ÷Võ‰'ˆ¢ˆ"™Ÿ›Ãó¼•QÜÏ/GðóR(„ç,R ªµ!–[³ôzm)AÒç­¯!ŽKç[½QYU˘,5(€uXc´Ö¥ÃVŒ1H!²,¢ÒZ✇s cWÚ¸…ZB”"ªµ­õßÙ9yžáy&7e±•€RLñ;ÿé4«xíkÞȦM§ò?ú(×ßðM~ìM¯àWõ—x׿ÿy{ä 6oßM!+¿Æýà×~ýÏxêñœJ‚µ$® È G‡ðã?ýs|õ†ûùè'â’‹ÎeæŒÓ˜ß·—¤Û§Óépðð1FG%kׯ%+ *µ°àA›ƒÃBœp´Û TµO02Ìš³Oç-§lãåû®àù§žáð³8rèû_xÛn¹“,ƒFB?,¬,G¯Œ¸ÇÆ×LÒkw8ûܳٴ}“kW36= ¤Èú6ž§ ê±f÷2Ê’¡ªÔ½„ ÒÔ‡Fx些¸÷î»ÙrêIlÝsyÜA8ˆ“ŒÜ ¼¡ G––˜Ÿä¼‹.æÞ¯ÝÂ{¿ÍÌYg€UÃÍ&J)J» Ñ¨­y Æ9z„8ŽY¿~=ËËËLO¯a|l‚½{÷Òj`m1e²”’©©IìJvk¯—öR‚Èe(Š‚V{ )4­V‡‰ñ)–——›šâšk~œO|âãüÔOþ ô§BCeÌ?ñ§ì>›ÿø³—ñ»y+o}Ó{Iâ>î=Æ…_»“wýäk <ÃêUãXg !ïqàÀ‹lذ‰$Ž‘Ú+f¼ˆ‰±qægÑïwP2$ «8¦°X““¤)Ú+e`mE¯gЪ V¯S¯WÉócJQ$I’âûž.‹ô9Ä5jõ”Œ¸ôòsøý÷†‡ºŸ=n¡×[Â×Îå¤yks ëQ Òüc±8—cLZ.Î ñw$UI†¢‡$#¡«ÊÍUSæcë †ˆ¿Ïµªœ@(T7 0`À€þm¢ÇÆÆHÓ”$I ‚¥$a!¤I9.ìù­"Ò8áù½Ï219ÉÆõ¨V«>|k{,8‰T‰*u ÌdTB†>XK–’,¦¦B*•Aà'Z+jµÂ@¥R*IÒ-ªÎ •Dk¥$qÜ'ÏsªÕR´œ+W¥V/¹§z½Y–àyíILa)lñ’ðêœ%Ïó¿ýÿýy^ Ô÷2IœùžÖdýœ@{øaˆIS´§ €¬(¨V‡èçµú(RË•ñk-眵…O\ûUŽßG­rìè jµ ?òcÛyÝÉ3OçúënçчóÜ‹‡8>·Ä‘»_ä–»_äþ‘»fعu+Ö¬aýÌž}q÷?ò §ž»‘J ®³kçNî¼ý>fÞþ–“wÏð©¿ø:Yq1ñâ,‘_al¢ÂØè0»vžÅ¾çÚÜøÕ»ùÀû¿‚>ö±9i×V¾vó]hß§Ziò±k?M‘¼åšWP«Ï0·`QzŠ~øS<öxΦµ«yë;Þ€&|ùÆØ´i”Ÿx×k‘¾æÙÇðГ 4FjÜ{ïC¬Z=ÌS?ÏÌšÕ/Å-øŒŒÔ16AKAÒMðM–Å(­qXÒ<Ã*^8¼ŸÉ¤ƒ­ÍU왜„óY¿G//8ú œ8z„¤HR|­I“”z­ÌüUÍ*±µŒ4›l;ó|Šî"…°ÌÍ`jÕ8U˜î¸$O±ž&q–ÀÓDNS)$'~Œ›®¿Žh¸ÎkþÝO‘&}¬ô¥ ZkÐ!E8EµÑ¤Ý‹©M¯æŒ Ïçñû"Ë ¶œs.ã.†¤äò+/¥]Ä´µÀÓe´…N3r%IòœHzdÖBT–R¥½õ‰I^ýº×sï·ná–¾Ìú­›žDZKšÅT+!Ž2_µtGHÊ9í)´¯Ë‘~O† âÌ’f/ð ¢N§ƒç,•Z•~Ç1J)œåi¤EÎððIS'5“““EŽÖš6‘¦'NÌÑlŽåø…$`Y\\xi’Ô„,ݯ•($IRº>?ô—]z9Í¡Ï>ù3·ðæk~‚(¨ ´$7–~«E1w„ËÎ;¹þL®yDzœ—ñ÷?¼—wûE{žZcˆvSo48vâiž033C£QcaaZùqš’g)Q ”¢Z­‘%†8-ðý¤DÙ¿"@¤¤i—~¯ éI††ò,'‰Z­õz)Ja»ÛíQ«J?¢ÓéÐï÷è÷$^ÒhLpÙ¥ñÁ?ûŸþÌ_qÑ¥Èl¯ƒ ~¥ŠÍ-…Â\µ ð?û>×›CˆkéõŽÇ ˆïkÆs8U||$8 Y l¥QÓÛêЗGˆW¦ ¾_\•B§ Â^u áà\ô’¸*-|ÿ&¿°„ñÏñ½8Šî¯3`À€ ð@ýʸü·óÆsûŽ’YËÜòaÎÞs ›6®f~ö8“#S|îs_âœóΧ21¹jŠo|í›ÌLN°aã4&K˜Ÿ_`Í©g²x¼Ã»ÿÃûùÊWÄW8X\ì²wïÒ†G}’ZµÂ§>õ—¼ì‚‹ùЇ>ÆuŸ¿Ñ±µ¼ûg~ߎòõ[¾Â}÷?Hµ9Ë'?õ[\|É)Œ4Ç0¹ÇàƒÜsÏ~õWÞÆ£ß¾…¥Å%n¾ý¶ì:•BHž}þ8C”·¿õÕTC¬ßÅó4y^`MuU+à@ë2Z!¨x¾‡ôGa I–‘2ð@ Ƨ§X·q=¶naÓŽml8e'›NÛͺÍY=³†¡éULlœ¡9>JÜëP¤1ín +¡Ûë`’”Zpbÿ~´“¬ß±“¥N—,/PòƒGù«~ «ïú_"Ú°†¥öN É ¤q˜¼@H…ÀÑnwÙ°nGŸyŽgn½“ìÈNÙ¹…u¯xÝP¢jC4*M\f0yAšç_£´¹£CFæ9¤§1E°vófê¾Ç¾_Ä×’Šï³jr‚å…%íiҸġ•¢ßëx~yÌ(…T‚8Ih·ºd¹ËËË/Æ !ð<k-IRþÞk­©Õê´Ûúý.Õjc † Ð!±ÖaŒ¥Ûí35µŠC‡344D–å,,, ¤ ÏSÆÆÆËÏñ½ñ3ë(lAài²<Ç÷}jõ*SSSt»]Úív—±‘a–Ë^þ ¬°dIyì( ‡NÌrî¼Më¶òô3{üô»¯áä];hÍëÔ81¿ÄðØ(O?ù$óóólÛ¶^¯Ëøäý^jµÆÁýû±EN%Ѝ ¡¤^ùžb*• Ê ð+ÁØ‚v·K½>Š$"Ò4Ř!an~–µ7râè1œX •¨A·Û¦R Éò.ÁÒB›­[NåóŸÿ$Ï>7ÏÅ—lebr)Qe˜ ¨³¼Ô%ŽsêÍ]ÿÝú `À€ÿ-ÎÅdÙY¶Œ)ZˆbòEÒt‘4ï`möÒfl‚²ßh€Ó «àWÁó@ZœËHMÔö06ý;¯ÇfhkФ0›“å}ò¢‹µ)J…qõß9Î$­6./Z#þ9FËÃôz˜NáyˆäõgP2ˆ0`À€?ˆü«ËXýO¿tåo{Z„e‚Üä8[†!¾¯K±$Oè,/²ÜZÂ÷ãcT*yQÐëõÈ ƒ±¶ô-ö}´§0¶À˜Ò *D)ªJáaÀÙÒ «T„5Æä€@+…ÖjELõð}ÿ¥1}!AÒëöp¶¼Ñ( ‹5­5J*úq! Ùl>΂RÆŒ1h­K7«R8WйßûzBH¢°Š¯5yš’v»äIÌèÄí…yLQPi‚,u[Ô‡†éÇŽ0,Ë¤Ôø:Ä÷ªÔ+M–žãÛ÷=Ì•W]AP 0EŠs)Ƥ@Nšµ1®ÇðHÀ¹{vó†7¼†7¿ñG¹ê•rÊŽ6¯–ÌZbru•NfØ$%¬ö8åäVOŽá‹®ÿ&»N;•Z3Bʈ¥¹Ýå.'ïÜÉÜÑÃ8éð”fõ¦í|øC_æ?q%×^ûAÎß³… lß>Îôô/¾0KžÁØh•N»Ë_~ò3\ÿ×ßâÙçæyà;÷ÓZÊɳŒ‡ù7 þËþ,ƒË=LÒmåüò/ÿ×üøIüÆü ëGšÜüÛÙt‰U33DÏ<ý<;·‡üðU—w:˜¢5†JµŽR©¾ç“gEéH¦t­ZQ ÿ‡A€§ÑÕˆ^ž Mlrú&+ÿÎdÄyJQdÄEJ.¡MF¦%¹-Hòíy•'A ¥$[n±ïñ§9y÷i4‡'‰ª g©†–žßÏ'ÿøC,Í÷yÃ;¯¡¹y-}›‚Z­FîI²,#”>Íê&µeÓ¼-›˜ ôC&Ã:ßþòMLÔ"Î~çÛ(ê}뛣´æ—‰´O–$ RzH©ÈéöÑõ2ü§Ï¬qÆ¿øý½Ï¢k5dý£ܰ:V 0`À@Xý'Vý½—ýv–¥á(ò °EF–¦8›£dYU­ 5"l‘“å Y^º²|ߣV¯®ä/Z©ÔJ†©AÊï} ò¬ Vk!Rj”ôðý²¼&‰»[©$Ö–ãúB–âgš¦Äq‚se¾ª1v%/µ,È’¢FÓ4Å÷=ÀÑn·°Îâég%A ´Z RÀQ˜‚4MPªtÄ$Iޝ}°†Îâ"ÎT<'Œj½F§×åøÜ: ÐA€u>¾ç#%`’>J‡ŒŒŽñ¡ÿûë\þŠ3ˆªUò"Ãåe)Tk,CQ¤X›`L‡¢XbffˆK¯8Qϰ{ë0¿õ¿C! ß}â Àpáù;©EÔ‚ž~j?GæŽqþ¥ç±¼d©¯æúÏßÈÕW]ÍÂÜ1͈¡‘!œÓtzǸìò‹Øºm”[Æ¸ä’ øÑ׿– Ï?‹§ž¸—Í›fHâ6ŸýÜÍt[ÇÙ0³Šm[×1?·ÄwÜÃììc¼ëg¯bd4å’—]À¦™“¨ú«Qfˆ_|ïoS˜>òñß ×yжÓ^pÜýÇ9pü×üø5ÜxÝ]¼òÛxå‘tºTkŠÂ9@—îãÜ (EJ)Uù¼%Äʬ¸À:CR‹Ó‚v¿Ëñ¹YüZ…¤Îà”Äy x Œ_¡¢•r1Sày•Z<ÏÀZê•:Y«Í“ß}˜'BXi’¶º4GF9¶ÿŸø³PôRÞöη0sönZ2GUÉú Ýv…8cé.·é,,Ó¼ D(EÇTH7íP©Qó×a¥Ïw¿ý““I¼D·»Lclœ­[7qËÍ_æÔÓ'étЪI–.á+Ëù{vðî÷ü"RGÜ}ç½lÚ¼›¿ñ-NÚyÚópEŸÓOÙHetˆ¯^÷ižzø¶ÏœÉ3Oïç=óÄ/ IDATïþENÌf|ì¿@cH³¸ØåØtÒNfauSóзï']n±fd„ ×j“›¿:D/I +˜Ì ±+‘B#-2æÁŠ•|- ¶°¤IÊâÂãcãT«UÒ4-†J‚RXgpÆa ‰–<鯄|JíáU#ŽÏÏ“9AEùtö¥~Ê)ì{ð^¾ðù¿"Ë^Ík˜¾èlŽž8BeÕ­å¾TT› æ–Zh¥é$ i?#†”GEˆ¤ÃòÒ7ýÍ­œ¹i=;/=‡»¸‡ íÝl9õ\òTRGHŠh‰g,ž(’¹,PB¢) ——)Ò„È÷‰üˆ¸Óf´9L0<Ê®³Îæ¹§Ÿbÿ‹{ÙsÞyÔ¦¦ˆçæèv-Cã!<D$yN¯³L?Í”ÙÃRJÚí6I’¼tüŒŒP©T¾ïÙ&çð¡£ k×®BÊòá$Œ|:퉊nbä®»îæSŸú6Ÿýìûh·û<ÿÜ>N?ë ŽÞ_æ¼jVeæ«t‚J5"_0helE¤ôÊ÷î,3<\cݺÕ R¤q—ºöQ3;xì‰oóá‹·´‡9ûŒ]¼æå3´âƒüæ/_K;\|ÉZÞ÷›¿Î®;±¢àáîeíšI”'é÷ú¬žž Ûncò‚,K1ÆÒž M²,ÃØ.aTCˆ*÷Ü{'k×laõêmÌoqÛí·°sû&Î9÷dФE«5O³9D¿ß!ËûŒ’®78x_/²wïslß±+}¤2QH·Õ¥Ûžc󎓹è¢ó81÷Õú*Ž£Þœdh|_üÌxÏ{ÿ#Ç_?¸’0àÿ{{ ¬-p6A¸eŠôýîa0>¡£ÖÜŒ ”)¨”™×ÿœ#ù^áEnŸX&ËŽ³´´<ï#eˆ”B(„(ÿT*`à`ýAV ñãÏÓúòmd{ŸCœÞ%߸=6††•É0k ƒ°¶ãÿ¾âØ—ÞËZ\š¾dÐ@)œÃõû’=ö8ý»î&yê)\šâOO£êõÁŽ0`À€ü‹¢»ÝRÌFJÉÐP$é>~ Ðª\L&è¤]fq.ch¸‰ +H³œÙ¹cÄqNÕ˜˜XR!ÖHò¬ÀØÒÙZ:B ¬3 úHeQž)u²B¯8[ËMJÐÚ_q´Y„X¹ [ÀàœJ¥ÚY[ 4²ã-Š c ‚ÀÇS’¢PÄqŒµ† ô Ÿ"Ïñ<‡senªT GäyNÖíQcÃ#çØuÊ)hO14>JŒ#.2*¡ÃP˜…Ã[i×Ú§0)ñ).¼øbnþÖ3¼ù U€ ÎXŠ¢OnR<_U}X.¨E²4'™ë‘µ—9÷ÌͤlÞ°†j¤øÒ—¿Æ¦uðÖ×]Ew>a÷©§3>>ÄáãJ©‰a.»â|þæë7ðŽ·^Mm(*&‰áå—]Éwx„öò2«WÇ–öÒÆ'&ÑÜuÛõ\páÅì:i‚ñÉëŽóÄS³¼ú‡_KèÕ˜;ñ"rV ŒâÀsû |ü#d|¼ÁüþOrî§ràÈc¡˜O{¼pô³1üäU¯ä…gŸ'3°qz Š”áZåì^½ç{(©Qh´” J«µ)$Qî#Ö ´³¸4a²ÞdóypÎ177KX‰ð•"I3ŒÈ‘RÕj&Aƒ'@)]ÖmX ZFh{œÆÄ$rÝ õÙ|æ |éúë[5Æ›~æ¬;ûrŠPaM¶PiÔX^naz1Î÷©Ž3±®AÇ` 9±ÀèÈ8Üù ´LÛ´†É‹÷°åùO~çYlÑ`Ëî3èkÐA…8ŗŠÌYºiJ ž´eäE^P«„tòœ¬›@%b>é±zr{&&yîÁ{ùÆ ×³eûNÚ}*ž'HãýÜ`¥GUGeÞ§+Ûé¥TdY³1Ôl"Ûmº½žR,,.R¬Æ ãûþKÏð¾ïS˜˜8îsüøq¦&×P©T8vì8ZìØ±‹m[Ÿäðá|üã§§|ìÚ?bÍê)Úå2:C(¬KK‡¼ƒJXE+V!ÊQ|œ£09ï³nf ­Ö"¾PÄ9b¬É¾‡ï¥WH–3Áðk¼ÿ?ÏðÃWœË«Þý~p?·Üÿ_úê½\rÙ¿ãô“GyÛÛßĦ«ðý*iÖ-Ëûú)EQ „Ck…çù`·Ýv;J Î9ï”gyò©‡‰“>a¥Êg>ý9þË‡ûìÚ2ÆïþÎÏråU‘$ SMŠ"AHÇñãG±V2³v#Óà 4FËB>/¨Q­6¨TVñâÞgùú×¾ÅOüÔkÈú=jqÚó-Þ÷»?Í¿ô¶íØ0¸j 0àï!ǹ%:ݽªNãë:CõhYAÈ‚&Bþ/,À(sòå4ƒïG —°ËI’9ºÝBEkÚ5p¯þ a-æÄ,ù ûQDÞëÑzðAl£Aõ¬³J‘C«×CÌÍâuºT×o@7ÿ‘¶ ÷Üsh­GÇCC†8kÉNœ uÏ=ij'õÅ‘£‡áâx° 0`À€ÿâ¨_}ïE¿]¬”ŤI)’äyFaRúýE‘£<³g êµæ0Y^†ÂÒ,gtt”¡æ étû$}ƒT©TÊìQç,½~„ŘtEt0øB)¼ 8…5!ÊdMcLÙf®}¬±ôû}Lañ´O¯ßEˆÒkŒ#Ësß÷±ÖÒj·Zá¥û!ðý²¹V8„€4MʘßCWŠvB’Ä)¦°Ä.I¿‡ÍR††›¸$Á"”ïÓêvhõ:Õ ^€58—#°diYôãù³ KefkµÆG?~翃ÉÑUèÂÃÓš,ïÛBv)\ß8+®‚´C¨¼Á#wÝÆÎ3ø«V!Ôß¼õnŽiQ«&\}åe´{Œ­ÞÈ­wÞŠ_“Ô‚©Ñ1n½ùk¬šl²yÛ&r£ˆ³!<ôÐ#ÔëµzˆÖŠ$éøŠ¸ßåöÛnáŒÓOF+ÇÒò FÇê|÷Á{Øsþé=´Š‚JX'ôª,.,3³v57Oó†7_ÉêéúýXE–zL¯ÙÁõ7ÜÂÁý/ò?zcC£ÜñÕÛIûû™høl<åtªuaÇ)YVà!V€ø8!¨²Ö ¬±8ëð€z`òœ¸×Ãæ9E–ƒµäYÏÇ÷<"ßÇ׉ÃX‡+,¥k\bMù`„Þy/»N=‰‰)¾ö¹/pë7¾ÉËÎ:“W¿õÍŒíØLÛôiÙ˜ Z¥³ÐB9ɱ…y ÓM‰j5lPH‰@QÑõá ÔÁcÜqÃWãâ×½Š4’ŒÎ¬'[NùÎ÷³nÝš“£tÒ6iÜAæJE'Ë©{žsÆ"„Dhéi‚J…°ZãÀá#•*ÕFk _ѨÕxäÑÇ9qb–õë7¡+5âN4+žuà„B‡!J{TjUúq Ε¹ÆÚ£^¯c!IS†‡‡ñ|krŽ{Ý-œqî8ŸûÜǨ×ÿûâê `À€ÿÝ„-I‹";N’#Í:+ñE ßG×Ö¢‚„W©ø—uƒJ„Ѻï u¢èaLHq$¦‡­<à_úóøáZ-ú÷ÞKòè£è-›!(æðFLj¶oGxÙü<Ë÷ÜKúÀƒ˜gžÆÅ}„”ÈJáy8cÈ#~ì1ºwßMqø0$ ª^G6eæúóÏÓºé&l–!GF°G¬ž¦rÎÙè±±ÿ©Ï>ˆX9*Q 0àñä_[ÀèèèKâgš&ø&Ë2*•±ñ1^xáy|ß'ëgÔëæJ­1Tjz½6ynP2d¤9JQ²Ü‘¥ ™€4M #OØÔ¢hÏÃs²,Ã…:cèöS´ÖÔëu:Z;´öˆj£+-å=´PøZ÷ûyAµ!µOa-iš£ýêÊè® /`³EÂ0À÷}‚ÀC*Kšd$R‡Xk1ΧR 0ý.Q=à…㘟`~~Ïó® ³Ö÷©×«X)è÷ca ðÊ Gò²µ>ɨÕ}³}ÛZÖ¯žà¦/ÝÉé¿¶›L´I²˜FÝÇÒ@êaN,.qd6¡Ygi©Çúñaºý6}þÔ:ós4ÖLsÑ9ÛXšK¨…k¸ûþg9óŒíÄùQ¶m݃·<ÍË/z"7ÔFÆ9m÷<ñäÿ$ÖMS÷ž¼íNüã-N}ùEôg&8¸´ÈT°ó̳^Èmwý §g2³i=•°Ær§Çbfa„Í s½.ÕÀ§92NçøQ*^€3Ó+]ÙCa„'½^å,':-6lÙÌ•[v0{ø(÷Ýóçœsu]A$"òZPV¨IzÝ/ ÒŠ@*TRäCSÌL¯¥Ó들)Ævˆ"ªaR%|ÂZ•ûÉoòÁý?|ç¡çѼöµ»¹âÊ×ñÍ›ïâ}ï{?ûö?ÍßÜø‡ì:e'îòà*:`À€•JEÑ9Lš§'ºx•i*•5x"å#TøO—sù—›VD§rAF©ˆjuQ4‚µ‹ôâ,µ¾ƒµ ôNÃ@ðÏW0àþ{GY$Ešâ¡ÛC(…·a¶Ó¡xî9ŠÙYlQ Š{ø0æºëÈÄ(E¾w/ùì,õË/'\¿ÓéÐ{ðA:ߺ•ôùçaDzð õj•ÊØJ\»9x5½½i#Å“O–†<ÇÖ˜•Ú?`À€å=BYáVRô^º V:pþÝ ø‡íØïíÈÿªÐív‹(Šˆ¢)a’å ¾¯éõºÄIŸ¢È˜žž& jô{Ö(ú}ÃñÙÃ&Å ž¢uJ jÕQpk,¾ï“ç9i’“ç9µZ4M‰Âa'1~P bB”#ùA”‚h¯O£1DQ$IJÑ+W¹}%°Öe)yž½¤T áHÓ „Â÷ºý%aQˆ!ÊŒH)Ër¬ò=,Æ)ÎH!œ¥³¸¦ 96ÆòÂ<Ê÷HMS ¥N–¹”¾¢¬ ËÖ‚ö*Zâ„¥›ö¨U<-¹êŠ“ùä'¾Å[ßôZÖNû¤ý)Ú­>~EÃÄiŸjm„º.Ц÷âF'ÆQCMòv—¼3ÇY§nåö; KÏ<{€ ›'ñµàeîáÞÛïG›€8é «š™u›¸áË7÷¡o,iÒÁ|ÎÝs:7|é¯) Ga ý~ÆÄä ð¼ˆoßw?W_ýC=zOz̘çÄñcŒ“e)IÒÇ EœÇÌ.ž`íºU„¡¤Óé` pNa Ÿ:ö>{Ÿ|ç•T‡‡Yj-Ð x×{~‘§¾ûM®û«Oòè½ð#?ö:6v2õJÀúæk*ÃTƒ ýåÒ÷ñœ£Óïáy19=›!+Y“ËrµWº–“$)³|£­5GV+F¢a¬ƒ$Î(F«Ã™…JƒãwÝÍÒ‘9nÜ÷&Ö­âçõ½P IDŽ7\#í·8vüõFcRk)Ñ¡‡'"Ž£ÕêÐk'Ê#ð<ž~ôQþη #6Ÿº›}ya…ÖBÕlܾ‘Å¥ã<ÿÌãÔBÍèä¾öh·;¸$à #ú…¡×_f¾Ý¦×n366ÊH³Éü\ùàR¤9.7HVX\qt±ÅôØã«Ö€Õ|á‹Íš5ë8cϹé8zì±-À kC`AûŠ<ÏpÆ"œ£ÈsÂJáx©,.Šêà2ŠÔá)Mä‡dy%aii´ ¬Öhµcº½>¡Ÿ°~ýZ?`nî(Ó놫9Ži1ND’±‰I’¾%3U|%h-·ÊsQ–a ‡_ ÉòŒ,Ïi4(­1½_øÍãÞÃΫøÏ¿ôFòþ‡Ùà n½õ[ìú±OòË¿ð»lÙºk¯ý^yõ¥,-ìG’®Z ir‚<9NE$HÏGËq‚`š Zýò=<¯ÔG–¥¨,‡ö1 Á(„͸ú¯ˆ,MY^ZÂ,-Q;z”¢ÝBhMeíZŠÇé=‘‘,/ÓiµÐ­e²çŸÃ<ú(8 S«Èžy†Ì÷é­_OµV%óÇmÄ›{fÍZ~è=t?kÕZ]ÕÕ·ºîIû|Ï÷÷ý™¤QJåXfô<5qª±,Çw,Ã&I4I’òK¯þy>ù‰²wßp+IØ£Û‹h¶:˜qŒáÉÒ„°×ÃÑ"X˜™fͪI”c‘·2šÍe.½ì"‚à¯Ù¾cAož\g€ÁÚuk¸þ†ç°´Ü¢TpYZ^`ÛŽM|â³$qËÄ:#»T*WXXXaÍÚ)ffæç«,víºGÝÏóŸÿÒ4ebbDZY˜_brrŒfs á*jÕQ|ßáìÙ3L­!Šú`R t&‘RÐé4À–-ì,ž!NS,ÛB*¸ê¦ç25Yå‡ß¹›Ï~úÿ—avトçÜþBDiZ-ìXu{d¶À)ú$† ˆT£Å䢿ßÄi_ø–E§ s²i¼8%‚²ãc‹Ðê2wü8÷}ïûxlò’_|1[n¹ƒˆÃ§žbinŽ©5«Ÿ§Óë„ B䘦ÑULCRª#µ…PÊv)eU¬(æäÞ'hvÚ<çÖÛu:ËMÊ£#˜%ƒåæ CÕ2×ÞpÜ{/<ú×]=£cÌ--“æÇcÃÃDIB˜ÊèG%“¦Ï÷)W+(%IÓŒ èPtû½0" "ÖnÞˆå¹?všï}÷nî¸õl³Ìø¤Ç®ÝiÞ¿Â{ßûV^òÒóÐCñÎw¾Ÿ+®¼¿ûø‡Y·®ÎüÜ~L#òÂê€Ïf14:Oˆã&ÝÞq’x»ºÛÁ%„pþ'ýÝŠxÎc¢=­9ÈVÐ~\仌Æ`øAXc–—–g¦ÉçæHƒé{¸ã$@Pð ã˜üÌŒÅò'ž€BgËfÌ vß{­¥e–öíÃi4šž&=uŠÜóHo¹yú4ÙÞG˜>pQ©`®ZE}iaYØCÃx“StªUt÷…UÇ&(—1mg ¬0` »%°²gÏÂÌ ÄñO„ÕJ¥ÿ=µ”Šà¸ý¯ø†èNÎë+â##ÈJ©:ÏŸ.žVçM€ƒ Žg@X5 E’DçÝh†)ûcÿqÔÏk,–0•E£Ñ/›9~üäÕje*<¿@IȲŒ8‰±-Çöp\—n¯ƒa „(¢8@åj\çA€ëYH%±¤…iZçóO²,Ų ”!Â!-Là JÒ(Æ6MD¦i‘œa“D#•ÁØØ(AölËBb“DÿƯÏÿ¬¾œh*%4BRr”aÐn­P-—ql›Ð²0 ƒ<He¡¤D$kÐý¢*Ïë‹Íi–£”í˜ÄYB6 »-Ö¬½€ÛïØÌÇþîÛ\tÉvFêE‚N‡b©ŠéÚ„qŠçùH4JHH:Í#«Æ›M CˆŒ‘U“‹£œ9s–ʰdn~Ž5«'YœŸ!K#¾þ¥ïòæ7ýËÁ4¶/±ƒS§Ž³m÷:q¥¦irÑÎKx྽lظÇqh¶šø^‰;wr×]? Š|ß'I*• ÇŸ`×îí™#UŽaJjõ ³³3h u†ëº„a‚à¹÷üà›  &'GÑYF¡XCñøáƒ\rñÊcCÜtû ¸üê+¸ÿ;ßåÎO~…_ÿWÝ|=ÛŸw#jÍvÐ!7%yÑ]jb 7Íèu{J%t¦Ñ:ÇR&Ži …eY„A@…H•£ø‘Fä)"ÏiœåðÑ#<üà^fNŸBèË1¹á–›¸àe/!o6èF)[·_@…ÌÌ-`˜&žçƒê¡súûƒ€4IP@/ éµ›ÒEæ5¯@tvšðÌåZ…µ×]Ʋ)º>I'À²,üj™nØÃsÊ\uí5|ç›ßà‘={ص{7ccc,-7(ZÊ4çN• c›ƒbÁÇ4 òL“Ä d¿RAkM·ÓÁ¯V8|ê8R^ðÒòľý9rß÷X¿fRZœ;;GØmæ1^ÑÇp,ZA› á8¥JP,Ï/Ñîv©Õëx®E’´ ³ÂJ0ÄA‚ïÉRûlÙ±‹•ù'ø_}+Û·oáe/ÿòÔ#— ­Æ2Eo%ª•p¬qŽ>y–Ÿ{ñøàßÂK~î…ô‚&_úâW°ìŒÛn¿…(Žéö\×"N:t».E]¢ÓëQ.—eif¿PâùÏ»ƒ¥Hpâ©9þñ“ßàÓŸüc›/õ‹hµCC#tºm„Ë€8Ê£Ý Ét›ññQ–Wbâ ‹Ôàz9Re¤YDšät;k×)LC24>LšIÖ®·YXê²eËF N™Ç»›Zá^º­½|ók¸þ9ãÚCœ8zŽ{ï?ÀJãʰؼy=‹K þøþ‚°£¹ûGóÙÏ|”7½ù•TJ†Ð¬4›ƒ«Ö€ÏZRò¼I¯wšfç)LiQ(N Ì¤ªÿsf’öì !QF ¼PК&çhaÖà¹?)2ðŒaÙ6õz ³³P*¡V¯FŽ!¥@NN¢¤@=JrøùñX»vâ_~ö¶m¶Mrð Ùc!|ˆˆ£X¤tõU”6o†J…¾§X IDAT ¨·Ûd‡‘=K§Ý†‘aäÔjl ¹j ¸CCX££$¥2¾ç 6΀žõ¢êÂ,.BöM›6õ…ÓO§)4›°¸–™³y ”Ëÿ¶¸*YçÏ8y–=Jï‘G`ï^(•»wã\|1öø8a’Ðn·i·ÛT*†††=Ï„°Ún·èt:˜–ë:DQDžçضM£±B¯7ÇÐÐCCÃ(iP.×XYn³²²L”„ø¡r …"Ž£ú ÛÁ †i’¦)†aeÇ1)—Ë$IB–fäyß›¦Yàú†ñãÜ­¾ÊnZ‚0ì†!•…a€ëú„‘çX†Î!N4J ‚ àÌÙsý2­r…$NH²(ÃÀ0ͧ# Ò4íG蔜¼Ÿ¿j*œâ³óÓTku:½†aD ‰Ò e*LÃ"Kr²$¥›´‘Ê Ír¢(AÈ€(Hég>ÙÊñšW¿Šo~ëw¹ïÇø…Ÿ»'˜®‰”‚$ AK) ‚sçN1µaŠ qK:ÍÉ‚ë7¬æÉ'òškž¹™9¦ÆFfݺÕüéŸÿ¿úÚ_atb„SG²~Ãwß}';®Ø…ΤT˜ÊaÆüÑþŒ_xÙ‹(—ËA€a*&''(<¦§Ï±nÝ:Úí67nfvv†á¡!ºÝ…¾k°Û¤V+sæÌIlÛ&ÍBtž‘f †tB°´¼Ä…166‚”Ðh5Y·a#NÑãäé§X³jCyŒ¯[ÍèH•Ûº|ç¿~ïïy€<ú0£ãcL®^ÅŽ‹vá•KŒTÊP)CУ‘æÊR­‰£~£{¢STŽ’ø¥"…R±ÿô&ÍX™gùÈ >̾'Ÿ¤táÖ[žÇ¶«¯à_¾úE6ïÚNØX Mbb l4‰¢Çup‡v»e+È5y®É“ Äd™ÄtúvüMÔ¼͹EXn±~ëf¨¹D†fÈ/Ñ BÒ<&M# E—nb!¸åÖ[ÙsÿÜ÷=Üø‚0\«±²°@æØ`ZÄaHn›ÄQ„ÖåròœN»C†XÊÄR&•†©Ê Ê3zYB©Täì “ë¦Øºc+þð‡|ï+_â¢Ë®fª:ÆP±Èr»Ñ¿ê Jb—<²DÓh4Ê$ŒBò\’¤9­N@šÄË6¹æD‰¤ô˜œ\Có\—ß~Óæ»D­^╯|IäS*ù,®Ì°yÓ%aEߥ×qùØG?ÏÕW_Î7=—•F“…ås¼áŸâï>þj’$£Ý°“={öcšŠ»ÆðÊ>Fm˜Væë:‰(‰Y>÷Õûùü7åÀ¡Ç({CüòëŸÏ Ï»r½J¸„AN”„¸¾‰2 ÓM(ø#ôº ä"fff¥ŠH –m DŽÎSЂ8Ö(‘ÓiEØÿ£µcë“„±‰QÊåvÄÈð$¯yõ¯ñ›¿ñ6~pß~ ÀqàÏ¿™î{„w¿ë營¤\€·½óelÛ¶ƒ(–ŒOpé%ÛxòÉClÙ¼ŠJ¥LAŠc9ƒ«Ö€Ͼ%5 Éu‡8¥œ ÎáT¶R(lªÀÏÈ<ŸýÑÆ4"‹ÎÅ3èPa(Ó¬ å`üí½q0 …†ãF¢RFU+ˆáa¤”¨5kúwí?NúØcäaDéöÛ𮺠gr Q,¡Ó ùo’;SS˜;vàßp¥‰ ’Ѻåƽ÷>ŒŽcz~{ÃŒµkÈ+ÄØ2Ž1- ÇqÑ¥–m6΀ž«„²¬ê…ùyp]˜š‚5kÀøožI./ÃÑ£93óÝ0Æ*ÂHža¹BjžÎCG`bâ(˰ë3I>Lû»ßE>ñ”Ëèv›Ø¶q\—XºÝîÓFÈZ­6VŸ‰õ‘iš(¥p]›B¡€”’0 9ï@ ÁÌÌ,B€ë”ðý"##£äB#dNœöðý"QœÓí&H,´Îžn‚)%®ë¢”¢×ëQ,q]—ÅÅÅ~‘MÇ1R) C"D?k+Ï5¥RB¥@…´Û- CaÛ6Z÷Ý¥B(ÇeiéçΞa|lô|SXF¥Z!ì5ûû:§tˆãøé‘¡¨Û#CÈ=<ÛfåÔiߥ§|ók_ç¦ÛïÀ+UЩ& ÓpQÊ ÌcÂnÿýÑyŽ×õ1Lƒ j" Ù/_ŠK‹ìض‰]»Vq÷½'¸ý6ëÉt„”¿P"ÏÀ +Ó˜ŽC¥\!˜ŸcHUÉ•A‹k®ÙÆûÞÿ)^ûºœ<¤qß1xÙ¥»±Œ"ûö=ÁõWo#N\uÕ…|åkßeöÌ4Òhe1õr×6™_¢\.`IS,¸Œõw… €œ‘‘î¿ÿþó!ÅB•4ɨÕjdYF’DÄI„aH ¾ix$IÂþý²uË:†j¨K£ÙB(ƒÚpî»Ññëˆã”4K(¯_EVkñ+úÏt¦gyø®{hLÏñàïáί~ Ã0ؼm+k7m \¯a•|f(—+˜–‰¡FNƒÇNÑiwX\\dvn–…¹y:Ó3‹Mªcu.»êr6í¸€uì@¹Ý…9RÊ#u ¥upy~±H’$ô‚€á‘aº¨Ó4Ѧî»E%(Ç‚8"O T.":]ÿÁݨ8æª;n¡[²Hœîr‡••T¡ŸÁ„!•R K*ÚË ®¼â ¼ÿîüÆ7¸åæ[¨sfq«RÆ9®e]Ò$"ÖC(’8Ag9B ©0½a`».ËÍe†&FY\\$Ê"2×#ì´¹üÒK8}ì÷}÷»\}åuŒ­^…Hc2™aú‰Öئ´M …DãXB&´Ú ZÍ.år…Úн°E”„„¡ÀqK|øÃåƒø«&=Þýûïà/¸‘Ç÷íÇ´*4ólÛqOì{€£G±cû¥” eî»ç>ùé;ùê×>@+%ÞøŠ?åúëküÜK^Aš%,.xŠË/¿­;ñ ‹ Ön¸‚íç®»î╯¹ƒvw–(N( ¸Ž$ìÆôÂi{Œ ¯cjÒ¡ÑLÙ}Ñ.LqËË=®{ÎU¸NM†Y^êòøãO°wï“\~Ñ;.ÜÄÔª [¶¬å‹ŸÿÚsŠ¿ýÈ[¹áæ+Eë% ¼ñ oäož?÷Ò²¼<‡%ëxÞßþöw¸íÅ·®\<«Ð@›(>C«u’<÷™y–U|Î÷þl¡l¨®ÇÍ«zžvgšFã1ŠÅíxÞÔ`—xéõzœ9q‚ÎþýTŸ|Û÷17l@úJkÌ©)’cÇHö=Žn5±·n¡¸söäÂqð6n$_X 9}F†qvï¢xÅ•ø\ˆ°,LÀ/–ˆî€ÞÑcäqŒ½kÕk¯ÅÙ¼-%Ï#j6iÍÌîÜÉÔÆŒü4ö0`ÀÏä*A÷]ª'OB§ÓÏQݸªUø¿ëk•2lÞ’Ó3gyüÔ9¾·?Ç›íRšjaú1¹66uQgmi-«J«£åÏ”bž$°´'O¢ææ¨Üz+yÓ|ê)fðt©Äø¦M¬^½šñññþ„«1˜îyF„U§x¾ƒa˜dY_ ÕZ377‡mÛç3­«W¯bffšÅÅyffæª`»AÔ¦Xîß¡ÆqÊèTE¥r )B@ô€¾KÕ0++Ë!¨TJ€ JR,ËDª¾¨šç sI’¤aÐi6‰ã)yž#”2Ôù³… Ûj²¸¸ÄúõkY¿f-N×4h..púäQ&'Çð<8Š%JfNfbÕ*–Ûªµ*ÍFÇP,,,°~j’'¢2Tght„V³0 ³/è†Ý)Cõ–š3DQŒ2]t&ÂÓtÐ2…\ãûÝn“……eÞòÛ¯ãå¯zO:Ë%»6³¼ØDçžçã{EÂf‹b©Èé#‡h¬¬°vÃ&¦;Ë É ÙÏìt ±Òbzú;¶oà̙Ӭ߆u›8ôÄ!žûœMÌΜ`ç΋ùÈ_‰Å…õñ*9 íÎ ›6oaÓÆ<ºg/w¼èvPJQ(ø\÷œk9tð0Ýn)S¡8qâÃ#5‚n0Ì(ªì¸`+AP­•YY^ÁóJdiÌÂü"û™æå¯xíN“‘¡U„a„ízŒë„G±cãξ0­3|˦¹¸@q¸Æó_÷ Ò búôŽ8Ìüñ“<õøaŽï?DAdIF˜¥TKýÙ…$IúñJ1¿0OgÔ†jL”KŒ]yëvogýæMHÛ#Mz­%|‘¢,Á²-:afs…NQðK(K"MI®ûÎÍ4é áqœ`žo6Τ&KbÚíõ1Tš’­´Ø÷ðC\¹u+¹ÊéfKaÌ:·†kÛt‰Hâ˜(ÍXn4)9a#s¸p×.<ú(?ºó{\yÝs˜œg¶ÑÂõ<–çg±›<Ë0Mƒv³Åª‰I–—p-‹^·YŠeÙDqŒ_(±ÔXIJm†êUt’ô"ںņõ›X»j#÷Ýó§¦ÏrÁ%!\‹DœoØÍ!‰,aà—Kd™&L»©8uò ÷Üû¿òÚ×ã»#¸n¹öIî¼ïAþð½ßàío¯{ÝoR*˜ž;EyÈ'Ö1¶lä _ø¿û®ðÇüz6nÙÀì¹Eþü#Æ _´“Ë.¿„vk…/|þŸ8rä)¾ø¥¿ MA°jr+_þÒ—ñìc\|é¥?z„G÷ÝÉÿ擬Œñ\·hò믹š_ýOï¢0Y£Ñ^àðÑǘ?u”Ý—\€4J x|íë? ^3¸ñ–K9wö ¿ýú·ò‰ÝOµæòÜ/cd¢‚0 Ýs”Šeº±ÆóŠôbÍââ2ËËž'†ÃÊÜ Ê,cªœ«¯|iìðõ¯~÷¼ç™>—R)Ãþùï™\U#Ï»Ñåâ‹/fÇŽp͵Wò£»ïãê«/eãÆ‹ùåW¼†ï~§/ÿÓÞÈc¢0 µ1íaî{àn{ñàÂ5`À³k]g‰ã%”*cYc8ÎÄyçæÏèŽ`zH$¦6pÝ”0lEgÉó ×@ÊAëÆ3rã`š‹Ep]D‚_@z>‰Q­â_°# Iª5P kãF¬ÉI”祰ׯ§xãdæÚ58«× J¥þ¦shˆÂ®]Èn—<Ͱ7mÂÞº U¯“G!ÆØñü¾üÏcZdB£sòä,¿ó;·ñÎw¾ƒF£çû”JCTÊî½÷^þâ/>Ìß}üN^óšç²aýnö=v”‰ÉÍ,-µyÇ;Þ‚St8rô ïúýOð÷ý*—\s#Göí!Irvl¿É©¼ím…ëztÂ&ïïÛyëk_Exò««E¬ŠËª+v#­¢ö2C…b¨L%š$î BCñ§úQþás÷ðÁ÷½ŒK¯¸˜·ýöûøâ7f¸ds™÷¼ç lܸ•ö¸ÃL©qÓóŸ‡mñ‹/{ ŸìñÍo¾½{r×{ÂâCú5®Îå4 Li#=E®ð^5PU x¶‰ªiÚ£Û'Ï3 …M¸îÔ³(kÔFÊž'Ê Ûž¡·°ÌÂ,2WŸ,Ë¢^¯ãÔët~Ü'ä9F¹ŒÚ¶·V'¿òJ(Õ²TìÏy̱1Š• h°L„iý_þ^:þWà®_yŽ(—QSS`[ˆ,؜ĘžFŸ=KÑu)ã 2V ð¬\(hÒ0¡·¬ –`²“C 4äÒ Na1lq¶{š¹ä©‘²®¸‰]îš'%EK³£ ªääZ“Ó ÁÙÎYÎvÎÒJZLyS Cxjp¾ýélZM¼¸HkÏ’ Àغ¹};Ú4¾OYk*I‚™e„IÂüü<•J…B¡0VŸ aµ¿ŽÉéõºÑwaj­)•Ê$qB¯×#MSâ(fye…r±ÎÔT™4Í£ÃÇ·žÎe ÄA’ë×õQqÈñã'X;6B·Ù¥k ‚¬E’kR°ví.¾x”CޱyCn7ıâ d÷E»ùØßþ%ss§I²9‚©±õ:t’ëo½žÅF­Câ¸Í¦ÍëØÿ•GH“¾pýãØ†jµ‚m÷ã²,éœRô"Ò4Cɬÿ{b`š6•JÈðýqœ‘抹ÙE*M­^Á±SÒ̤Ûm16:Bœ„LMŒS.šô1¦ï’fYÞ/îRò0&JCÚ­ A’k"•!&« ­¥šk )QÊ@ˆ¼ßlÅ(%q›<¤iB#MèõVˆ‚–càx\¿„‘ D¢{!³³3˜¦"»(CÃuš­6®ãáÚ6QÔ?.jµ*i”!¥qÞQ‘#04$aŒmÛX(²^À{÷²uÝœuã„"cie…re)Ži! …ÌY&q}Ÿ(Šh‡R䜞™e´RaãöMÜõÝSÜs×÷yî-·P± Zív¡ŒXމÎRš­e’n€Qì—7„AH.r:aÐH<Û#‹5–ã"-‘iR ˆBº:á¦[oe~~–‡xs§NrÙe—cZ‹+ riP¦Eôz-Ξ=K± ©”ZÌÍ7™ï'^|q‰Ï}îÝ\yånz½6?ôûö¥V™äþû÷òoßK³ ðó/y%‹³1Y–±ïÑïóäá>ýŸãòË×ðáüåJ™ç½àFÏgdtŒR¹ÂG?úQ~÷w?ÎÅ»§¸ôÒÍ,Í/pÙ–MT/ØÄcŸ9MÚ|ŠF»ÃÄv—S±þÒ«yrß!¶­ÝNeÜ¥›ü§ßÿ>û¹=¼õÍ·óŽw¼‹7½ñ×ùö·gxýk.ãƒï/Eߡњ‡ÜadtAèóàc¬_]'×mVš)ªâ¸3³N>u† 6o¤R_ÃËÖ_ÉþÇöó™Ï|Ÿ‚þð©ùÌ/œ&IÛ(•#…¢\¨søàAÞú¶7ÑéjþáSoáà§yï~Œm›&Y^iqÛí×$ Èr¤°fLcù$Åâ` gÀ€gA0M¯w )]gÛ}–‰‰0¢Šmåä¾& —ÉZGÞj or°“ü”‰¢ˆù…º Øyÿs®ó¾jÓìûeY¿9å_†:Çõ¯¢rl 94ôôçü8CU„mC’MO³rü8Ýéi†‡Êy×ë€<[HZMÚ‡Ž‘>¼ŒwZAíò<§0ºU[ÃC'[iDN34üLº¸±ËHµŸÁ*"0bøqƒFcaaº&żÈLs†8‹Ñ¹f”QœAîêOC\]\$»ï>œÍ›)^~9öÄÙÊ ùÄÉò2áô4rÃì‰ ÆÇÇŽâgRXM³Çqžv¬ú~$Ö„aÓ4ŸX…Ö 3,.ÍðÔ‰“ uFGGR% aÒ=/*¦„!8v…’¦©È²„( úX£” T*`ÆùÒªY& Cò<ò\²,8/Æ(iôc”IJ$ín¯ÿÚÒ,<ãÚët9ýÜS’i’$é ‚•Jϱ¨“õzˆT#• ‰d#cSÄaL¹Ri¢óŒ A*$ÂP†ÂÒdYв%¹P¤¹&N2âÊœ§ÏM³mã&$iªÉt†]p°)P*WX³z=?~k¯z9'O>AÅd©Á†õY½ºD¯×ÀReÛlÞ|!ÿð_çµÝ¬ß¬J¿\fíšIz½ KþùœÛßï—Ou»]*•¶íQ¯Ê5YÖR’,͈“%C”²(+ÌÎ.R*›Ôj:½S¸N… èQ)ÖÎowõ´Àž¥ I¯G½0D»Û$Q)¹mâÕ‹˜E‹¹ ‡éXHm äqB”F„:Â4m´NÏ»®û#òF õóuÇK@:Kˆ£€$Œ1”-·\âÜÙ³ø©$ÅR‰H¤Ø¶ïšJÇ1Y*P®J‚TH!10È5dyJD8Ž‹%Ç"jµ±Ë>²æÐ’ Y£º ÒðÊ$‹"¤T8†Cž+â4'ÎÁ³m„ÊY :Øv]v1ûî}Gï¾›«n¾ßP´ ÊÃCÄY‚¡ ŠûånQÜC E”Dø…"E)Iµ†Làš.½^ È¥ -$™Œˆ“˜…v›5›·P.V8{ì(玞À0Mêãc˜—ùùilÏ£àûÜ"oø_çæ›_ÈJ3`qy™Ù¹s\sÍå\|ÉE„AϲxòÀ!þò/¿‰ç9TËã¼â¯âk_ûæçfyó›>À…nçÑÇæÐ“s|ù+÷Qz7ßúÖIÞð†çbÙ.A¯t9üä~>ú_>οü‡lÜ´™Ñá¾ô…baáµ¢CØ™ÅeÏÄ6%V›§ÎR¬Ž13»Âæ­—òõÏ|ŽÏþãÞø–ð›o|<²‡¯~å wܱƒþÑ{(ø9§O?Áž=pýsïàà¡Óüýßÿ-ûö>ÌòœÉ¥—]†â¡Gá̹’4áØ‰SìØ²•ƒñïþ=JZÜtÓEÜ}÷cì¾dk×N‡Û$Ü"–å’kŸÿü{o'Nc>õÉ÷qÃM¿Àõ×\Ë;ç-¼ê—þW]sQ²ˆm¡s‹84ñœ ¿V Óé®Z< Ð:!IDÑ4Y¶B¡° ×z7™HYÅu Í!^:‰Ô¤VäÀ¹úÓÛ7û¥¡Q§ƒÙj¡j5¬¢0ŒŸ¸W•úûýÿÒÓ˜fÿã_½ÓÌ!MÉã˜$ ÉÃèéû† xVnYFº¼Lxnšdfš]T   q’.ôçhÉ”éq ;ÉÈÎ3\Z,³³¸›‚,¢e?5Í Ûƒ^†R‚DâããZ.U!ÌBZºÅL2ƒ2ÆŠ€÷ßoçÐí"––Òu‘«WIIê8kÖ†!Ý™ÌV Wõ;ˆLs“ôŒ «q÷݊ ÓéÐl¶X·v•J…••gNŸBëœ(êR,™š\‹Î$FÓ²¨ *Y¦Èsùô‹÷Ç´åÓša$IBÇ(¥0MóéÏ‹•~3}ÇOÿ{˲1 ­£¤ )%žç"„$˲ó#øý¢,´¦R©ô_7 °”!%¦ã‘ë Ë4Ù¸e a»‰îõ{= À®÷ó8õ©S&§xòþÙváNriE 2d Ž' IDATNÉÉQ–‰D SM¢,)I2TC˜d™&M3tžF ¦i]â$¡V¢R.“$)¿ÿ{ïáÆë_Íž=sóÍ×”d†&G‚))ËL®^‡Sª"E†#S´¹p‰“˜+¯¼Š‡ÚK¥\cii‰¹Ùy<»ŒaŬZ½–ÓgŸb¢V@D›7n§àßO§b[yÞ%N:x~œ;7Í–Ò&²,@©¾>7?Ú5ÈÒ Ë²XYiâ81 %\ÈûŽUT+uÒTG®Gž\`dtœr¹Ìôñ%J«ëôz]dÞ¢X,Ðí¤xžƒY°P9dJÑ;àšx¾Oœ&ôº=ÃCà ag9H-*—­Ñ:ïÿ¿µFgÇ}¡_)d–K(%±C™Ä݈¸ÛŪÕi5lÚ²eH´ aÐcd¸N–$h­q] Ò$A³?úmYç£3R¢°ï¸}F–sbu[7AÝ'K*^7—†Bç µ Ϧé¦Êr_µ†ùÙi¢8d¢^# :ؾËÍ/ºƒ¾þu»ï^.½öj¼²Ïüò2¦ïõ á ™äZ“fq–ádY?ÞA*d¢!ÖŒ”‡‰Ó”(IHÈI’@GŒ¯[CF,.,0T,P¹p'Ýv‡cïgqam—ìf¤^e¡¹B)|§@¦3ªÛÏY¿y…ò Ÿ™Ù'YYh³qíüÖo½‘ÍnbÛ¶]Ôªkp­afçÎðù/ÍòØÁœ8u‚×½îÅüöÛ7ðùÿã‹h²vý&þà.à¯z-¥9ªõsó³üáþ„[nÛÍåWï Iböìÿ>WÞ´# Ë$¦n›ÔF×PÝp=—yüÔ§Ù¾MpñÖ]œ=yŠwÿÁ'¸îúÕ¼ó¯òÔÉcÄQ‡¿øó?#É:9v€Z­Äm/|>†ªò†—ÿ/<´ç8JC­ð=n{ñ/²°´Èïüîû£„œœO~êË\¶ëb´6øÜý¯ý•_ä¯>ü®»ö¥9ºŸñ1ŸVs™°×ñ<†G7ðĞǹ÷þCüé_¾•ëŸ{ Ýö¾_åÚ«žKµR¡VƒL·Iu•ri”Fq»A±æâ =¸j ð³·Dš4i5G)M±0†íT™¢˜QFŠ.p,’碼ìÒ¿êŒðïmÛ  õ›ˆçç1׬ÅE9ÎO¶Á¿Ç¶ø{ !ÀsQ##TV­ÂÇ÷£© xöˆnº×£³w/ºa—× 6Öèzš|3Ø«¡ûœ:xš'<ÌÁ¦Ï™‘–ªG1ËSj-²&)ŠQrŒ³˜J PBá+Ÿ-¥-œ Ï0Π2ÅPqW¹ƒmñß‹0$?w½°€&¬×Ñ–¦aàON"Ï#ZYAw»ÄqÌìì,¥Réi nÀOYX­ûo~¡Pbe¹ÁÂòR?Ñ+à8žçÓh4XYY"I¡×I`b|Q†ý–y! ,ÓòÒ0#És”Ù„X–…axžÇÒÒN­5¶mc(E¯ÝAüXŒ‚0ŒI¹^'huH“iA–izaˆe›$YLš¦rLe=]¼•eš$é;q ©‚Zk,ÓdåÜ4:K)ù>I†$çf0•¢Ýê ÍOæú;nCœÏï´ì~Ú’,Õ½¥Á6™J°LÓÉ‘¹À´B@'d™äùxƒwè… Åb‘_ú¥çó÷Ÿø"7Üx ½n—zmˆ°vcJ…*ÅŠO”Åh)°l îa˜‚, ¸æÚ‹ùÍßê±ÒlR«’åšJͧٚű œ>Ña¢Z#ˆºŒoÀ/˜œ>û«6Z(YD‡žkQ*Ž„=\§Ÿ} Š,… «9uêÛ·_€©|êõ„h†!†TøžKµR¥ôp=‹0º`š³3]6lØHžEd‰¦Z›di¡MiÕjzÍf“JÁE)‹8ì" A¤r”!‰Hè\ˢ컄í…b‘‚íÐ BºÝ.:‰(Ò0ìŸö¥"hµû¢«ma›žçÆiÇ)^ÃêR.W1•m[ qR.÷ÓBš”J%Z­6¶e’$ ¶]’4'G#dŽid:û±qE¤aÄÌ‘'Ždtë¢<' <¯ˆ©ÄÞ½Çyýÿz;ö"{ï} -$ßúÖ·™ ð}“$N8pà•úk6róó.Cá8&%¯Ìÿé ìܶ™ èÒe±`yv8xEÍ…í"ŠºiqøÐ!´°LMÙ—(QÀUÝÏX}åBFÜ\ l4ñÇ®~fÑÄ-èÎAg³4†ëM!DqðÞôW‰UA¹d½Ez½³8…QƒðŸ:qLÞh"«Tþ·Ý¥ÿÞ{RXÅ"q¡@lþŸì½i”¥Ç]æù‹ˆw½ï]sϬ}WÉ¥}·lƒlÛ`Y족¡OÃÌÐÐp˜aàh0à†6c`7 ==ÐÀË–,Ù–l-%©¤*U•j˪Ê=ó®ïóáͪƒ·YÚ²œÏ9•ù¥2ï͈¸ï?â‰çÿ¦Â¡ÝgÛ¶]LMï$ÍJ—V釀b¬5C=œÂW ·A™–$£Ma Ò2FÛMI©s†ƒaàAåU*E–S9¡ï2ìmP¨Fà(Š$¡4%®ï‚äel•gJ8x®‹çyXkÈòÊn)p<PŒ’­ yžaŒAHEXo"e@QJ„ð0ü°N:L¨ÃK—ɳŒ©±ñ*­>ˆèo ˆ‡)k=<åá éñi”tén J’f1qÒ ŠòŠ_-X+«û4%K×ðÕ]æ|ó·~§/æüÚo€™¹mˆLã—.—Î.3húdù)¡L4(t¾ÎظÏ5×ÁÓÇObP‘9!¾bÜ€ùáuÇeP¯£;m®½óNn¼ñ&žùÔ£<óàƒ,;JS¤ŒÕL–àªz}Ž ØAwÃå?üáó\¾<ô­ºOÚï㙜™ñ‡5Zoþ¦›yÛÛî»ÎŸþñïÓ_¿L™t9þÔ“¬<÷«ÇO2Õczn'Ÿ|èa>üáOò-oÿ6f¦·!´Bi—ÝS»µéj”î0Þi0,Y-Bk„ÎGìkóí÷Þà ×ìâ£<Ä÷üwò¶·¼G6IFs|ücÏpãÍ^·1Mð}øã|àýÎï#üÞï¾—ßüw¿Ïþëæô…eNyŽöd‰<ð±ßåu¯ßÇú*¢Ì)”ƒçùœ¾x‰m;vðð#Ÿáà5×€5ôû}¤çb´A i5[•½@£Q)`½ß Å ­V ßõȲ”ZØÀURüÚêYšø Ï H“W Ù»Žïøï_Ň>ø oã9vNÌÕ\VWæ©ÕX…PVŠ*è¨,)u‰P%aè³g÷~–Wcn»÷Î>Š6%žív›~7A °Âà’V;¢ßïbŒ¦Ùìàº.£8&Šàf‡Þ×È·¤qA¯ÛÅZƒïyÔê¾gRE5²Ä!ÍF£RH”£¢RÿFáe1`jºƒ¥ÂZƒv«E¯·Aà{ø~VâàRÊ*hÊñ|F£!Åf ¾’Q;º ”p¤DÛ)%Y– “F¼ÐC ‰¢:£Q†‘à„!ƒxDn-³{÷àZÍÉçŽqùâ9vîØÁÌá#”ÚáÂj—ÎÄ©¶¬ 6кϷ¼ã‡®?ÌĶ1ÒÑcõ£$§3;ÅÉS/’Œ†AD³Qç=ßùnÂZåé{ðºk™_\¦Nñþßøc>ý©§xüñã¼ýíwðæ7¼¡7¨{=dÚGeF¶ñZsË]‚æ—–àwÞÄnÎôŸÜY?ú_¥!|~òGÿ Y¹Là´ø‘ÿé‡xñÔ ~å}ß$¥ó³gù•_ú}n¸î¹öo¸÷õ|øßõð\8ùÂó|Çw|;{¶æÈ+öòÝïy<ô‹üÁ|ˆozë·’%C.Ù=ìܽ“3ňWÞýJr=b0ÜàÂ…‹¸a×~ÝÝŒýŸŒMtƒãã9Aƒî2Ò{·ß¼‹=ÛÆhD>gOãòåyšuŸ]‡î¤97·Uµ¶°…—3¯JIbúhS¯B†Ó ¼­ùªÖZ\×½ê¡Tõ=IS׫~Ê©L| T70BXò<#p<’xDkj’º5ÄÝ.AÒjµXYZâÖÛnÇZCl ‡Ôëyi¨G¥Ö8JQäJ9ÌÍí (sLiBây`¡,,õF)ŠÂ „%Šê¬ —0ùßû}ßÅGþü“üÒ/þßüÆ{ ‚’Rw™ÚÖëPZ…#(i JJ”[µíï;pgž9ÏîÝ{yò±qým$­V‹ùË—HÓß P)å²°xmÀu]ì&aíy>½8F9Ѝ¾ç£fiiis kkkLN(‚ "ŽSu|ß'K«¶vçWéðEQ'kìÞ³“,OHÓ]¦t: VVׯzãVëAá¹>~àÐ¥€$‚«s bs ¥c0ƾïÐí%ä6§”%=„p0¥AëÊã,®ëá8ec°”ºD‹5¥Ž?Îp0 p=†eޱk ƒAB†+++‡ápHTk€!ÅÕu§º¤\^áèSG™œž£3>É ?Äs}<\<¾4xŽD ‹% k…¹ê3<ñ=0¬á:•¿°¥²0Ú§·Þ£YorÝ ·ðÀýÿްçÀ:Í6+Ý>MÇÇ‹¶¤‹Xм¤°¬Å÷}´Ö¸®Sy±æ%ž#ñ!E©‰j!®çPÖZFILàHƦgxå¶mûÌ#|ö32wy•ƒ×ÝL±Þ'SÒ9¸o;¿ýçU÷¼ ©çÏž¢æ{xNHlrt¦™›ÞÎüÅË`<7brbY^"€úÔ+¥àW~ù÷ùíߺŸV-âÆ÷pï_&ãòâ*íz"8õ1^˜_b×îVÂ0.0/éå”ñ‰]?zŽ_û•÷ó§õ ~âǾ›Év2éñäcOð¡ßý0?ô?¾•WÝu3E¼Žp\^¸ˆ°†3g–Y\\â†ën¥, ¿øÞC‘Âòž̹ý¶0f•7Üûî¼ã/qÅ€A÷4“ãmΛJ9Ìg>û9u·Æé3§hw"6VÙ»ç0¿ú¾ÿ™¹]ûM§Õ ÀÓO>ë_s7ÿög~S&<ù±¿D ËÞ=;˜˜;€Û#·lâ·°…—çcJòrH" tPkmC9[Þ¡ÿz ˜ÁQë+“#|¯[ÄêK×­B`U»M_)ðÜ*ýäËuˆ¢"t•BJE+Šïtp}kr¶°…-| ì /K’4Ås<ß#ð³>Í•3´^œ§!áöïk3:´ÎŠXÄ9ÙÃM:j“»i«&ŸX{†ùõ¸8zŽV¼ÆÞÁêÍÝLÉ<!¾€¯»ƒCD„B1C2²­ y ˆs”ØåejZ3uíµ8Û·#®ø¦*LNB» EA±¼ÌúÆÆÚªFo«_~bµÔ•h³Ù&ª×1V“›‚sçφ5ü0$Œ*‚)ÍJVWWiµZŒF5\ßG EgÌE)c,aä“kKžkÂ0"BÒ4E†¤HÈóŒ¼ÈÈ¥$Ny–ÓhuÐZÔÂMOÈà:Ú˜ÍuT)+rІ!®ë Ë £5n­R7–…ÆU©ªú$ µÆqT¥‚´’zT#Y[CZƒãy¤iLo}…z»ÉäÁèá©cc´T¨¢¬6tÆç‰º4DQ³RoRIÖÖ–‰‚Ãမ™)Æ:5F£!žëQä)ž_ë„0ÜÆÿòc?Ê}ÿ/qöÅËyÍ~WæÙ³o7ÖQ ÂuÑiŠÑU8Q™¦ÔÛ‚kà£÷?H£„µ>V:´Úm¬¥ u’›fLOÏpüÌ1†Ã!«´Â€V{)%KKËäYN-¬mþy†¨Vcaq²,i6”R¹&Žs¢z ‰1%Ž#R „¤ Œòxî¹çX[Ó´Û âxV“eRº\¾¼H'hmª 2á"DIšÄ8Ò!ŒªCÑp“e J)ÂÀ¡^ob-Äñˆ¢(†5´6X#®ìWHxßó*ų¨Ö”” ÏsÈŠX×ÅQ½n—F½B!•¤( ¬t Ãc4EQàû!a\%ÿ…Æl†}I—í3ÛXyìqV—VØ~Ãa:ãV¡¤W©]¥AéÊ\Jð]G)¬©xåTŸ¡, ƒBK‰°‚¼È ‚:¥2ìWjè»_õZþâ?ÿIn¸é•wSÆ„¢ øÂ ÐÆ¢„CQæ•G±ÕX Úh°%-eQP$)ž0è÷P®‡Õ–AF½Fa-½x„N|G2·{7ÖJ.]^FªãŒMÍ0Y å9Eo•»n»ž,ëÒ®³6X!jÏrô©gÙ¹s7kƒQ³Íž=˜¿pkGœ={™ñÉYVVV™ÿègøÿâ|ðÓüÆ{ßý÷ÞÃÌ\›î"q>1Ɔgq=æÁ‡žàÃð>ðó?ÌÌ·2ZÕÚø2ÀqšüÔÏþúàf5)ùú;öñ]ß÷ÖÖ_D‰ŒÕ¥EZ|ß÷¿›8é³pù,Ûv4yî¹c¸^Ä{¾çÛ¸ÿ¯å‰'>Ëßx ßòÍ÷ñ¿þÈûh6\²¤K™‡ ã%”Ô¼ÿ×QÜEØ”s“|â‡ÑùQÛg¥Ÿ1*‡Ø2£Ý©á*W”É·¼á^„0ØXafÛ6n½©Éêâ*ëKó$ñ«K ŒMÔÙýŠW€’Å>¹ -åÚ¶ðòÜGkF£‰ã‹øþ$Íæ+*õå©úEÉU%Z¶‰°%.#`Ô€­Ð†— qsi~žþü<¼€áÖÖ`jêË£ZUª:H¶ZXÙü<ñ±g©)‰7½eB¾…-láå^ù †ø^–Áp„ #¶ïPx·dœ¹p‚ËgY<7MR[ÂÔ¡òãd {Éé6^ð©¿ØàÐÚvZÛže]<ÆŸ>°ºz=÷îøFf:7á_øy*¬@ °lyy¾0eÉðìYúÏ Š¡ç9Žt)µfÇô»=¢ÐÃW)±±\sË­LíÞ`aþ2Ï{]æì;r½ÞYÞÇŠ@Y²¸Ogÿ üñø3Žôcî¼ó.â8iÙð O?ýïúΧ?¤™FØ’»ïœæ/þä—Ù67†).ž8Í¡›ïäØÓ/ð‘Ãx?ñ$™.©5ÄpÛ³ŒVìšÇJÖû]þÝïü'2 wÞÓཿõ#ôÔ*éú³afðÌÓrûÝûÀ:8ŽÏ®]{@)Þüß};SÛw²pùq¾å­¯“²w·Ç5·!mÆÒåeƧ`}m™z8‰ã¸xJSƒ^©“Çð<É÷üËד– ËËå¥]c IDATØ61A–ô©7|/ç³=Á[ßö6Ú®†LwÚœ=u‰ãO>F§Ý䆻nGhMÜíâÎØ,Ãl¬¥µU·¶°…—!±j)Š>E±NÎáû[ƒò9` ¿¶B¯‘d«H$¾·só²w / ŠÑí"66ÀêŠètª©/ËEÀ•×p]’ÂZ ž­œˆ·°…-láe^øp;Ô¶md½‚s¸“M¼zL}ïíÙ‹Œ.0®ÁùÆZºf²¹¹ØAÔš¸ÔÙ»m‚ÙmÓ ¶‡œÍcÖ?kÏ“†;ÉtO¼Úç… ¹yfÝ´àÛ‰j ëëët»]‚  Ùj9zi‰|u3>;v`ëõªÎþ—µ0а­iY"7633›‰/?Œº]ân—ZPk6¾_‘Ë_MÄj- ñ<4-X\^&ŽcÆ'¦P*#C²¼$8}æE:­i‚0¢^°ÆP”?q‡,ËÐZÓît°Ö’ŒÂ0b8ì3®Ñj71EN«Yǘm Ê,Ç¢ ƒYa+?T£7ýS«võr“L…JyXµ2»›Dl‰ë*Š"ÇQaÅ•ÊÑu=j~„’¬ˆA±†²(ˆ¢:&/AÊ"CH‹6µN‹Ñ‰˜»w“t7@J/`i}­RLnjõZT²®Kše4MÒ¼’—ÚàºŠÎø$É`€ëºœ={¬EËFw‘¯?@+L&™š™Àæ?ü£ßÊ·¼þA~û×?ˆë¹ÌnÛÏ(‹)UÈ(-Öâ*Ey&`lz†Vë<ËKpâøišZW„¸*K€ápVà{¥+‰IÐUj¬5JJÇ!E#7Áe©Ñº¤,5Ãᥥ%&Ç÷P¯uè÷‡`jµ€ÉÉIy‘FšS¬.±aŸ' h™=8õqh6ÊE Ia ²4#Os2?£È‹-õê?eû"%I’pæÌΜ9C»ÝfÛöíÌ´Ûè•lQ ÷ïG>ŒÃ/¼¢Ýl2ÊsÒ¥%˜¥±Éí½œžÖZz—/³tò$3SS„»w#ÆÇá«ì\ìœ;w×óÙµwñ VVÖX^Y¦ÙhU!@ÃaPcÇŽ6¥vE¡-AÔ+ei’T!F­±ªee•²„Ö˜C†”eN’$xJ2ÅÄñ€z£:ÔJG!¥$ «`¢z½ŽP)$e¡¯)+-Ïó«þ ÖX´Ö› Ç’¦)JJ¤%ÕfA*ÑVS¤IJ$$6¶ÒSvÓ'6Ãæ«+¾ùV´µ¤yF‘ijam³5ܰFš¦!H†C\ÇÁaU-êªj‡1RvîÚÍôô º¬H?äÑð2Æiáx“”™A]¦§#~úgßÁOÿćùÿâœ` ë XX^"Í ÷l£¿QÍ‹ë…ÄÃ!³³st:Çž;Éë_{;—æ_àÒåE¦Çk ‡C¥(´a8¢!Ër„PXiÅ1Ýn×óÐF“¥Wù· )HÓk ®ë²°°À+ï¸ ¬b0291ÉéÓg*+Ç#Ï \?`þâeüqÂÚY–Ñløl¬nà´JÒ4çâÅEò<Ãõ$ZÄÅ)RÆÆC†II \¬)( ƒ”J9ŒFCÚíqƒý~Ÿ(ŠBáº>R ò<¿jí%DERXžçS%RB”e†Ta1X[_²pymÛæÀIã ‚¼(ñ®¬·"ÇZA-Œ*ÿR]²Ž£ñüÊ+¶¿¾A9¿Ju©NbœÞÚµf¯ôɬ¥„dý’ æRæ)¥ÇsPÊPèÊ›×X‹)%ŽãÒl…øa¶Ú”ic(Jƒr]W‘ë’Îö9î}Ó›xäáOrk³ëºëÉ»#<×%Ë3 )Qž$ŽF£!&©ÕŠ4!Â0¤V0¦d8฾ïU·¡®GX X¸ÜÇJu]J× À*ÅZ<â•_ÿö]ØËÙÓ§ùÔÃsðšÃì¾îE–¡šÖxø±g¹÷oÀÁ‰çqÓ7RlzîþÕ_ý¤™Äñêh«9öâ>÷©§i…3\<~†£š'?Ê5¯hð;¿úý\Ï×S¦Yy¸AÎäDă¿ögœ[1»÷:¼p’ý·¾’ïÿWßÃ'¼ŸÝí)¶·ÆxÓ]wà!üÀâÚª}0j„Ü~ç«1Z“ z¬­­rþBw¾ó_R«;üÜÏÿ8žë« ”9Ìn›¦(2âx„ú½.ëƒÑ$éWßs÷½éÔ—ÁÀ’ô»èbDY¦D¡KÍóp-4:uæÏçòécøAV£Í»Þõ´”ÖP"YYXCx>µö,Ý^™f´5ìËdßÇ1óóó?~œ“'Oâ8sss|Ã7|“““_òÃ1† N:ʼn'ˆã˜·¼å-ÌÍÍ}I_kmmgŸ}–ã'޳²¼²i["þÎæ@Jùy‡Ê›o¾™Ûn»v»ûEȉ‹/òô3O³¸°H¿ß'Žc&&&8|ø0×\s ããã/» ÕËy¾A’\ õú>»óøÒòÓÅo·¨7êLŒu‰²%”vÉAy–aáÀ „¦;¿ÄèÅ™hSN äz+ÏÂpë*TÝ¥Þ˜Æ÷šh[rªw’SýS˜¦¡l—U&ˆÝ"Wÿ±Äjžç\¼x‘ÅÅExþøq<­Ù¿¼Ì>ß§ùŠWÝtò‹«¦^GolPž;ûöNL¼¬æâJm²´.TŠÜÙYØ´ ýª"VǦ¦HÒ$CHIT¯|¤rÑÚRäšQ¼Áž=‡ð½º4$qLPk¢óŒ•¥U¤ªH,”eI»Ý¦(«60Ô¢×u)Ò„<¯Bˆ@lÞ¸ÉMrôJ¸Tu#§ϳH×ÃØŠÐº:À›ª#)+ò,¹Õ ô«÷!¥Z¦”vó6´òÇta-®ï1J´.1Fcý€F³NP e+¾\½ŒãôjA¬)ɲôêaXn»Rïø¤IÌp8DI‰»é«YW òÒASà¸%Ö¹ïMßÈñgyø“gùŸ;ÄÅáuZzå½i+Eê0‘ÉäØÍf›óçç £×1&LOÏ`2MšVáOÚXò²jéo4Õ¸úÙhˆT’¥• ¤tH’ß÷”rȳŒz½ ¨²Ö’$ QÔ Ï ŽS±'Oàà¡C´Ût y!(²;wl#Ë,y^’ç–N{‚±Î8­VíÛ'¨Õjdy‚ã*jADžSà¹ÖTê«F£ç¹› ö•jYJ V …BÉ*˜‰«ªÏóH’„$Iè÷„a £ív‹ÒæH×Ã•Š²Ô›rÉh0DIòŒ4ÉȤÅñ«‚ÑÕCÉuçŠj¢¨ZF[²<§Eƒ_8ìß·Ï•Œ”Ä j V4Nš’R.\šgÇŽiÊu‘¤-ʹê-œfBBßAXƒ]¦”ÒE)A^hn#cعw7+«Ë|æsŸÁ‹Bf÷f”$(Ïi’`µ©,´!MsFý°‰EPMžÄ›Jå’¢0Dõze…à(‚¨ÎÆÆ:Yã·šHå¢Âˆ"/È€×f|r–ãÏ?Ï'ú ¯2‡oºÜ¿ð ¿Îž=¯à¶ÛnÇw—.œe÷Ž)„¶˜d€Pݵ!If˜œ˜C­—üÑo|õ•>—VáÐø×?ôVÞõo£¶m–“Ožäñs/²¾!8;\£P%§>ò í¬Ç¶¬Áåð ·¸Ïð³?ù¿ñ¯ÞþævÌ!Ó îyåòlÄÞ_¼SÏ]äOþè³ìݵÐu9sþ{MRóÉ àÂù‹üôϼ“ý‡ö³rñ8ž¯¸õÖ6Ó““ôz¸^DX«¡u†çÔQnIR8.h£é¯¯2Ùj‚NxÚÒlÖXº¼Â';J²6ÏžS9rorÖ è.¯“ 0È4º”>¬r&C“:•Búe€ÅÅE~øaî¿ÿ~ž|òI<ÏãÆoä†n`bâKß}…X}òÉ'¹ÿþûY[[ãöÛogffæKJ¬öû}Ž;ƃ=ȹsçȳü 샪ˠ+Äh½^çÝï~7×^{-­V몚çoÓ4e}}G}”‡>ù ô{}úý>yžÓét¸å–[èv»¼úÕ¯~IÆp /%±ºÎpxߟ Šöm%ÛÿSΘ"Äñ¦1"¡(–Q®DÊÎÖÀ¼(°t¦/cµáy|Åný¬Eä92Ž›êÀ-|塵f~~ž§žzŠ“'Orþüyèv»Xk©ÕjÔj•håÖ[o¥×ëqèÐ!ÆÇÇñ}ÿ¿¹.k]ð>úè£|üãÇ÷}^óš×Ðé¼´Ï„¢(XZZâãÿ8<ðO=õBî»ï>öìÙóE‰Uc Y–±ººÊ‰'xðÁj±¼¼Ìúú:eYEGŽᵯ}-wÜq{÷îÝZl_s°@‰Öëå%Ô¤A÷=Š‹àæ>¶œàl1ÎC™ƒ<õ4Ûìà൙ݹB§îâI)ñ’„ÈÑf‘þ¥ôæ ¢±)œ©½È¼F–çô6zåÊÑhÌàù $ ƒeF£k­5æó[ŠÕr «8®Z­ÆÒÒó/2\[ÃãЭ·Ò¼æ‚={_¨Æ ª×ñêuŠóç1ý>äyu†øç*®0ò£5FJ„çaµ&ÝØ@]ºDë‚™„ë~ù3ÿ1Äj=jà:>YQÄ¥¶´Z-†Ãkann;ÝÞ€$IIc‰R.A-Bº.£Ám4a­ç©Š¼”)@l¶J[k´Î‹ef%eaQR`  Rrµ=ÄQ2PX©(Š»™¥Ø !0W[L4ùf+¾Üüê¹ …‹TaDÕþ¼éÏ P%º(‚-àÀ¡ƒ —éLNb­À |\ÏÝ Ò œJô·[0­µ$il†•‚ÍÔûA’`±8®ƒ«dåªKŠÌe®EH‹Õ9iY cÉüà÷ò·ÿûOýóð¿õ;ßÅÜìVÎ=Ï[^ÿ:²Ñ:A=¬”Ã#¬§qu\†¸ù¿ó ?ƒ?‚ì?|ç.^æ½ïû÷ÍÃ?ÌSO=E–U~Ýý~ÿjÛÜKõÚW:ÇyIT+a²cÇn¹å<ˆ.õ罎µÕsùÒ¥K|úÓŸfqq‘z½N†Ôëõ¿ó¾´®|ÎÏž=Ë_ÿõ_3qž$NØ·wõzýê!ìòåË<ýÌÓ¬®®²ÿþ¿Wùº…¯¶µÆÚróRØ£Š¦ØÂ?«C}YvŽt0O- Ã-bõ¥@ `Îó¨·ÛxÛ¶#Z_!ço!€ê÷p—–³³ÐlnMÐWʲäÂ… |îsŸãüùóh­ãÀÔëuŠ¢`}}³gÏòÀpâÄ î»ï>n»í6vîÜIø…ÔYÿÄš/7íÎ^j¥ê•z}êÔ)>ö±ñ /lZ‡é«Y_ŒTM’„“'OòÈ#ðÌ3Ϧ)ããã8p€¢(X\\äâÅ‹=z”ÑhÄøøø±ú5IªæXÛ%M/’ÄKøû©Õ®ƒÝGdÃ!ûÖûIK¤€Ý×ïâÐ]‡Ø½sSµ)Zª…oýM…)h=¤ß‰ýʦ¤9sí½w"²¬øcÖ±v•²è3,a`}‚b‡Í!¦Û3L´&¶ˆÕR WŸ«««›]±î¾}ܳ‡Îµ×âoÛVí¿ÀóKAEØf“až÷ûÕã?GµjEB·‹YZ" HÃpr?¨//éSdÇŽ!Ž©B»\÷«îouªª/ Â]jzƒJ:¬¯wÊ£Ñh"…Kœhâ$GÈ*„ªÔ†V»Sµc%Æ”eA–eäeTbsœ,JI<ÇÁ‘Φï&IcÊ2D A­éã8ÎU5ª5UÈp½¿#g¾¢jÕFcòrÓ—L\•TWJÛWùc)ʂҦ8ŽÕè¢"9ƒzDomÀD§Ígå†o¤Ð%¥]•¦Wùßa+Ú¶(Kò¼ÀXSÝ(…ÞLˆÖ`mE¢*G`LÕöiMåï©Ü/W ó èR«×Pà¶;Œú¼ë;ïáW~í£ÌíÝÅ[¿íÍH•åEÕNž¦Ô£1 +¨×#æf;œŸŸÇó|â$çâåËd¹!K ´…ÉÙY’Äc0019Y‘Á¦¦fpdùùy¾ñ¾7#€<Ï‘Tíèg^|‘WÜr-Û·oç/þüA?`Û®Ý\>s)Ο;O§Ó&ŠBâaëDN‹/Óôßëx ú'85V«A–Ãêê A­DAš É‹C‰tš”eåïêlŽ]žWã*…ÚTW¡Š ðк¸j ‘çY–onÈÚíúÐïráÂ%~æç~ŠÁRmÁXoÝ•0†Ééˆ"B›1HJ²4Ç !%ư©ŽVA¸éyTÙP£É‹œÂž{îYƃ€V»Cæ+³´¸@¶š2³s/Çž?Á‘û˜Û¾ƒQ6Â1mÀs\’µõuò¬ Ýjã{.ÉpH2̨!ްø¾ ²¼D:¿²´¶„6%ÍZÀòòÙI^yÏÝœzîiœ°ÿú#´&Æéw7B2Lc”tHÂ0ªÂÌ´%/ Œ±ø¢ò}ÕÆ¤)ÿ?{ïf×Yßû~ÞÕ×îezS—¬bË’%Ù’ÜBÂ!'¦Þ@BB8)Ü$$7P''$ÜKIJ.¶  ã‚dI–%«Kcf¤é}×Õ×{ÿX3ƒ…M1˜k9g~Ï3Ï£g4³gïµ×~Ë÷ýþ>ß0 ›®çQ™«`¥ÓÔ¦+Nro×dËÔÑM“ù0F‘Ý[w±;ÝÍŸÿéùêýÇ0Üó¯ŸcûúuÍ5ô(·– :ÏdÿÕJ•¹Y‡JÝÅDP¦Vw»8†+Ó|ùëxìh…ªëRî*qÃÝÌ-?¾m»ÖbÚÉj­ìûä§8ýÐ×¹ùæk865KçæëØwà<Ç;ÂçNÑcYlÞºŠ{åþícÿÈñ ^õª•œ=r€R&Kw_/™–6L·Âuë³¼÷]oajè$A¤M²…<¦%p\‡F³­™¨ZŒë†LºsTª“ØYÕN&j•,YͤQæìÉ~ÎöŸ!×ÒÊOÞöròÝxõs®GK4-ÁZÌ;ó¤²iÒ©µj…ZµB[['¡Ðu)”y«c† àÌiΟ?OÓiÒÚÚ ’)TA*•Z=Ç!ŸÏ?ï/›Í²iS2n>Kmq¬:r䃃ƒŒ±víZzzzÈårÏpé„aÈÈÈä‹_ü"¥R‰;w²ýºítuv066Æþýû¹ÿûyä‘GxÕ«^Egg'årùÿžÜrý0 É51õ4ºn/_“x5k"Õ2ž?L£9¦wb/_Α°ªÐ¦ë¤³‚ÖD:õ‚¸c„¡#R6¢Ñ@¹xV­JÚ—ë Ø#Ë¥µz¡P \.³råJÖ¯_O©T¢V«100€‚C‡qìØ1,Ë"ŸÏS.—haUA6›eÕªU¸®‹mÛÏ‹XûÝÊó<.^¼ÈñãÇ"Êå$ ú{ÍÅQ166Æ¡C‡øêW¿Êèè(7ß|3×]wW]u†a000ÀÁƒÉZààÁƒìܹ“n¸T*µœþ¿‘¨ÇU|Ï›#ŒU2…õXíK?Õâ8\ç{ÅAÇÚº6u¡•4²f–½‡ ßÂnÄá<#§¬VŒ®.r]בêÝÈå(˜¦V¹ÀÅê8CM—¢ÒÂÆüfJ¹2¦e.¿=?ÄX999¹´gÐ4R©DߊäZZP¾Ç8§§Ó¤s9¼ €ÙYx1vn„!ÒqFG‰‰‡†hT«4m›¸­ ŶQ0‡† ŠPS©„í.ćÐÒé\Ò~à2!prkžît×uq]0(•ºñ}F£I…hšŠABX(Ê\[U âÄå—J¥’DöP"£Ã0ˆbp.Q$Qt(ŠQ”x ú4Û+(R¢é AVarú¸NÇ1šž8HhÖêH)r”.ž¾^¡.@Ä‰Ô„Õ ÌL'<¼BK õ8B(’DTÓT E¨ø~ BqŒ,`4TUAQÄBàRŒDLƒ)#\Ç“±ÊhjSÌ©‰£UÂPA êÎ<·¾ôzrmeÞõGŸfÍæMìº~ He2ºA­æ¡Û Å\–ÖZ{ºiÌ×8~ì8×uìE¨ZÒb¯[èºFÇ(BCU&°¡´–‹‰ˆxˆØG‹5‘”h–Îlužj½N:c3ßlÐZ.1::ÌÚ ëh1ó<¶ÿš*X¹íjtUà†º¦á{Õ†‡¥̹U²…4( úïXÕ5<7`pp)cJ­-¸žƒçèFˆî ÊFÍ2ˆU‰N¡ê&&q¨ó×û|ôïÿ™Éqƒ´á4`úR­áSìl£:vŽ#_ÿ†á8MuMO³nÃfz×là®/|…1G00­óС~®ÎOÜv¯{ë¹ùæ]´”ràEÌNÍRêµyäâ «³’Û^3ö¾¯rÝ+_Âkßô›Ä~Ì7þ<ŸýÌ]|æÓ8=všŽl¶¼Í/¿þu9Eÿ‰'xø¾/rÕæÍ¼ñg_ÉÿüÛÉö¥?J±ÔGÓ!©4ê”LF£I®Õ<ææ&é?{޳l¿a+[v\Kùt·w¢Ô]ž:qŠ'>Šmìݵ›t¹„ÕÖFFÔ¥J”*RÈæ¸xéZà“*¶,Œb ê5×C:)däXOFÈ(õ¢N=v‡Çö?ÆÙ³géìꤥµ…(Š˜››û#‹_ßiÁ±øÙU…öövn¹åvîÜIE´µµ=c³óôÇ\üýgûOܧW*•bÅŠÏêLB,¹NÂ0DJIKK ×_=«V­zÖW½^çèÑ£<üðÃxžÇµ×^Ëë_ÿzº»»“;)ééí!I344ÄÈð‡¦µµ•íÛ·?¯ÌºåúTäÃÜyLÑDÏv#¬e9¸ê‡Ø¡ `év¹~TÛ{I¼Ð9$_ÀMÈåPº»‘ƒƒø/W*ËoÎR†a°mÛ6º»»Éårضiš˜fb¢‰¢ˆÍ›7³yóflÛæž{îáøñã¬_¿žÍ›7_†³yúülóý¢íis¾¦iôõõQ*•¸é¦›BP.——þÿ¹ÎõßO°Öüü<äÈ‘#lݺ•z½Îüü<ÃÃÃßów]×åÀ|ýë_gvv–k®¹†Ûo¿ÞÞ^,ËBQÚÚÚ’½ÍØ<ò§OŸæÐ¡Cìܹ“l6»<æý—¯)+xÞ%ææÎcY½”JÐõË]ú¶i²}Û6®Ú°!ÞL؈9V?ÆLc†t.MÆÎ,æ‘ß$šêGC¡ÐÃÿñêÛ¨ÏM¡J‰¢¨ÄDqL¤HÊ–IZúÄqƒ&!ª®!ü O„šÀ°l”@Ò˜©¶lbbMÃõ"2)›ÆØ0ÏÅèkC¬jA±TºreÂHR©N㻘vL£9Çð…A¬Œ‰eè˜ù¯ahé”MI½QG¦Ó” y"' #Â(—Qœªes3³¨šJ³îÐÝÙÎììš™axrŽÖRÛ¯¿žÃ`fjŒën¼K#—ȵ¶âÛ ºfaYææëT܈¶Ž5hšŠï‡Äj•lÙ`®yŽÑ‘Zºº0A…ôv÷ÑœÑÈgJˆ”‡0LÜÐâØ‰Aö=v/Ÿü·ÿ`z|ž_ù…—òæ_ûûÊý4†Fè,f8úÕÏrÿééËQ.çÈæË¬ßrf¡ ³ÐÉ๠üߟ¼S†8?PáÉãcü÷Wîå-¿ó«lÚ¼+15q‘ ç ]Iè+26ÍÓ'ð¦'@s‰çGi Leº6ƒômvïÝÈ­·¾ŸßýÞÿ—æß>óWu [¶°s×6pæÄcdLŸ çû8u޶¶ ;v];}×uyùË_¾„Bø^‚g½^çâÅ‹<ñÄŒŒŒÐÛÛËîÝ»éíí½ìoJ))•Jd2¢(bjjŠÑÑQ‚ X¾áþ7¨(òqÝqœñq™ nOv[¥tµZ…zÒi¬Í›Ñ·mCio¿"ùªšeš¤Ri¦¦¦¨Tê‹E:ÚÚq\MQÐ ß÷±mÓÔ¨VkøKJX(ª tÃH¤A0å)°T ÍÔÄø¿Ðª/pîR)„q¸ÞT–Ü( ÔfÃÔÜ>n‚0š0A1J"" £L¨BaÁ1”½à6}¤†¦¡h «4¥ UâÕšÈ:{ûˆ¥ Äľ‡"TLMÇ |ˆAÕÀ24EÇ#@   X&íÔ‰Œ«€n€;S ŠTÃ$V¾ïâut#‘"ŒtbT#ðëdU…¶¶È&þÐïñÖ·ý¿ð3Ä=ÿñ×hšFªxQÏ÷)uÊE ¯c—ƹx~]Mqê䓬Y×…ïA¡½“C<ˆªÂ†«ÖG`˜iÎâ±CçyßßÊÌÌH;•£éÆ|ãá‡Édrä;×ðŸ_¼k®ÞLÊ2QµˆÎÞvþéÿÄ­·ÞLÅIJA*§2ï3;5K, jΙ¢†Ð"¤'Ȉ–<­íV ¦gæ‰b“HJ Mø*q¬àù^â%F×µ%¢ª‚¢*$š{„PCÂ@Rkx(z Ò£Ò¬…`[E åÎðàƒ_æýx7Íú<¾×€(&ð}Ô8qp†q@Y7ÐÝ:‘æãÇ–f Üé{ÄZLS‘R#oXdR)ÌXOX˜)›—´åüàéz £;‹ÛžFxë;ú˜¯Wp[²LÏÍ’±l^ú²cz®ÉÄø0éŒAÖÒQT©ˆœF@&“§PÌ"•ÕÔ 13)b)1tÇs@K±ˆP  ^sðü˜|>GÊÎàúPìíeKà19ô§û&WmÚ@$"¦ggÐÓeÎ_Æ `Û¶¹p~Š/}é‹<ùäQª*×\³™×_ÇÕ[o¢ÔÒÂØð0w}æ.^ÿúŸçÈ‘a6lÞD¤ð¥ûâþûOsæØ$N½Á½ã§ù¥Ÿ½™uíEaåË÷0ºÿ(Oì˜t6&6›¤T“/¿  i´!ÉóÄéa>úOŸ'ÊrßCý‹6¼ãwxÝϽ‚Xx œÂJiøjÄJL»hv‰ÙÑ*†ª¡w”i(*bRàŽœ¥°Ñ£éä‘uK“Xݵ™r§AßZXÓù±—½™_ÓÏó÷¾‹Õ×ZÌãÆ—uSÄ©6xüksúÈ)nþ©ÛX½{'ZÊd6Š™«TÑ4›T6GÁ|u’==è¦NºRglj‚¦e±eÛFŒ|žXÕ¨©õé*ºf’ÑtâH"Ô„9=<>Σ>Ê<€aìÞ½›B¡€ïû rß}÷ñðónÝ:â8æüùóìß¿Ÿ …­­­lÛ¶m!T7»Ð1wùá—çyœ;wŽ066F±Xd÷îÝX–ÅÑ£G¿çúfvv–Ó§OsòäIÇaóæÍìÙ³‡t:ýŒk¶øµ(:/vërýW(‰”1AP¥Ùœ%Ž#ŠÅ«žUTýöûeI¼ST:Ó„JÈpm˜zÐ £¥É—ȽD\»…+Û6Q üú¾Ð1´<(Ú‹70éVËå2Åbq¡[W<—6ùÊç“Öø8Npõzòoõ é88gÏRÙ¿Ÿ8&ܸÝ:Ò6Pèè@k4Á¸\F¤RIX¦våÞkZFŠJGG'žàzÞ‚SPCJ‰'b¥®A€id2é… %‡ ÐuÓ4±,‹J¥’ÀwUÅ@'UQ C± ¨.¶]$îÁ$ðI'|tU_h©_Lc×¾¥Hb¢($– ª>ªP5%Á+ÈMWPT3/]/iû6M*ªP1tƒ¦Û ^¯“/dÈe³èŠÊÔÀ ¶i211ÁÕÛ·ºIðQJSœº˶Ð5+á}.°\“P£˜0öÑT ) é8(BE7,?@ÕTâ \U¢(Æ |MàÔ]"ÝBÑTâ8Hõ:ãã#t­ZÉüÈ…î>þê¯ßÏíoü ^÷Úßã_ïü ,ËÂ$`R«näéêµèêY…¢™LŒOóäñ“üô+nÃÐSÌMð©O~–7¼á6 =ÃèØÖ¬çñanÚ»‰íÛv#ÌÍÕÈeÊ|å+_ãÁçSŸú'Îy‚o>úºãœz…TÊäñCG0Í ëÖ^…BL>_Âu}L³@³Y¡§§—ƒG.aY-躎¦ê¨‘Iefš¹ùyÚ;``à·ÞrS‚} BU5¢8DÓ´…vÃ0ð}?ð™¯Ì/9´¹M±ŒÉåm4#…ãƒ:åÖÞû'CW÷Õ¬^½‚FsUQ𼄪©É½ª‹4ª¢ø>–ŒŠÀóö±?eÓæ \:‡®ƒa¨„® C©ÓžoÁQ]D¬¢i&ýƒÑœ€šÓÖÙG±­‹ŠP­Õ±¬ ]]=|å+_áïîx€¿|ÿùåÛ“?ûÓò¿>òÏxÞzÿÛ¹2žâSظ}v–}+h(i9ÉéQ¶ï݃ÝZ¦+ŸG+æiÔkX!ô¦2L|Œþ3'™ôjìØ{¥®.R]ÌÏÎÐ #ÒÙ:JàÇØ¶M[kß °l›æHá C¬_¿ŠB9KH7‹ðl„ï¿(EÕjµÊáǹï¾ûèîîf×®ôõö2:>öœÛ׿k5îùÂxdß>.Œ cg²lܸ‘t:a˜¦Éôô4õzZ­†ïû X˜d#R­V©T*ÏpyH)ñ} "ÿàƒR­VY³f ×_=»ví"fffèïïç±ÇÃ0 n½õVvîØy™àùÝjhpˆ2™ ›6o¢»»›L&ó Çêèè(§N¢ÑhÐÕÕÅÎ;Y¿~ý3œ?‹-–š–`RÚÚÚ(‹ËáU/"qU!F. χœƒ C¬iÈq‚xž<ËôÁÁ~(ŠA€Œ"ˆ_XgŒÐ4„i"ÔeŒÆ•&®~×±/Šh6›T*ªÕêÒ¾m±ëÃqŽ=Êý÷ßÏ©S§°m›5kÖ°uëÖd ¯ë8޳t¨º„ùô½Ââÿ/š+Çazzš‰‰ V®\Éž={ؽ{7AP«Õ8}ú4Ly 8ž§ ža2??Ͼ}ûxôÑGY±b·Þz+­­­ßw‹ôèè(O<ñSSSKîÙgë8yú\¯ª ’,ŸÏ×.™åzñW,cõó8Ç2×£ë¹ï*ª~{)(äÉ›Ég`ÊæñÙƒdês俆±Õ4©tšqùA™z\¨\`0dŠ) f^«£“L8‹ ª˜Õˆ.@®t‹åCÌç^Š¢üp™ºÙ,¤RP©|KX½ÂEUqñ"ô÷ý·ÿFzï^Ê+W’imE·mD±˜¼– rBB$‰ëª†iYhºž´Ì« Rd¼È£‰Ñu×õ–8¨RÆd2iTU%ŒÂDàQU„HDQßu¨×$1RJLó[®!äe‚{à(z"f‚LÚý5Û¶‰ãˆ(öÄÌß÷ðã¹$åQI¦Š"Q5Ó6ñ˜‰°,u•|wó•Yr™ö'ïâmoûoùµ÷òáýë7lfn®†®g8?Pa|Ê娉3tõõò…{ï¥ZµØºua$øæ¾4ê1¯yÍÏ uƒîî|è¯>Âøx¼ïOð5Á5(6—F&ùøÇïäM¿z;“Ós|à}äoÿÂ($_(qúô1¾v߃Üþ‹o&—K311ˆ•V©Uä²%f¦gÙ²e GNÂ45ææfH&¨ªªS. C…é©il;…ãT ã]€B:m!ch6¢¨Ž¦j¤ì4a£©úS0 #‚0"_ÈàMÂ0Â4Ó %-å.žxü0÷Ü}€;ÿõH’ûT]x,_QŠš,LD H‚ÎÂ8&”’È‹°„ž°=¤D! ËòCÏ÷qℨšŠ"ª¦ÐÑÙÔTÂ0¢êÖP ¡ ì´N€U4“l&ÃܼKà‡¤SBxO&A‚•”!– 3·Ùô±–>{Ó´Ð48†F„4†abYiæ=‡ é&-+W³e×|èêjžõWïÀL•Q¤Â¯ÿêŸr×]ðã/ÛÎßöµ:ã!Nž8ÅìŒËÉ ÙzU û=ŒÌ¦£K'm 6·wðŠŸºžõkWóº×ý:Ÿûø§øØÿÊÏýÌV˜nç© Un}éJ¶¼ú§˜›'+üä/¾™ÇÏñ¥oÀ—ÇyüØ9Ú»×ðÑÿu7?ûs7óûðFJ-YŽ M‡¥*3ur™³3ó»"•Éâx!AJ£³w5mŒ®kwbMLM̓۸Ç÷˜­Ò·ªƒ}üó\³±Ì[ßø‹„4øÀ{\6æƒú,Óó£üÃGÿœÙÊ¢P7Mìl–¯y%Š £O]àðc‡¹tñ"WmZÇÕÛ®¡³%Ïè¥ANLMàÌWh[ÙÉÖM/%ÉQ\fǧÀ¶É¤-@!–1Žã% ÿ0¤Z«‚¶R Q06>L*•Æñj˜¶Ž™Ò‰¸^„®¨–…)LóÅåB”RÒh48yò$O=õFƒ›6²yóVL3O£~ñ9w«4‡Gæø¹s”Êe¶oÛÆu×]·ÔBpéÒ¥dlïí¥T*aÆÒ¡Íb»þwrѨêÂX¿¼±fÍ6lØ@.—ðÈ_ÇxðÁimieë5[¿§°êº.ÃÃà Òh4زe ×\s ù|þ"hEŒŽŽrâÄ &&&Èçó>|˜±±±gl¢‚ `xx˜¡¡!TU]j½\®ºÒ+@ÁÖ:*&Š\~¿žaT¤4ñDŒ‡K–xù²<Ÿ!!÷H#l­\FdR/ ê×êDÓ3ÄŽ³ü½ˆªZ­rôèQΟ?ëºlÛ¶ 6,)\×åìÙ³<þøã¤R)Ö¯_ÏŽ;èèèHr2H¸¦ããã´¶¶ÒÚÚúŒ¹ôésþ·Ïõ‹bÆâák__»ví"›Í.ñÐ]×åÉ'ŸäàÁƒ˜¦¹tˆ»X333?~œ'NÐl6Y³f ;w&­ßo'ÎÄÄÇgbbÓ49yò$¶m_Öu"Dbü˜œœä©§ž"Š¢%CÓò\ÿ_ZVEÈ&ø3(^ ËêÆ¶»~€™Q £“Wò`‚& ÆÜAjõK¸s§1Õ ÅdÞC׈“Ï÷¨Ô+øŠfjtZt[ÝÈah*±Õ ôçp›ÃÙv–#_ e2™Ä¹†àûW> @J♼ýûñçæ+WbmÞLzÝ:2å2梪ªW¾óöéÂêb’`âÞ ‰¢Ý´AQ‘’Äy*%A! ‰¢ ð—&«Å‰©^¯/¥:+ŠBDq„P@× Â0\jíN„Pea&ˆBˆ’o²±5- ¤¶ðÁv‰e›H©â4=4="EIî)ˆ¨BÂHâV=„ÐPâˆ( È3¤,›0òAˆ*Á4MÕ­--ˆref–fu+nÅqšU©TÈdrÉ ‡Š¢€®k¨†N­^! “„wc!ŒHS“`¬”BUª*ˆeˆš”ÄšE¤ê„QŒ%Vp*³ÔëU ] E‰"‡k·nâï?òNn¿ý=¼þgßÅýñ¯ðÓ¯ýÆÆ'ùêýûX¹ºã§NpüøaÁGîøfg«Œ r×gïæóW¤‹­8x¿ùÛ¿côb…÷ýÙ»éêîãâØ–¢¥¥þç;yéOþ}+VñÉO}†×üôkÙ½ç&ææ§™™™æ‘G¿Ém/5ŠÐQ0p|1…L«Ä±`hè"[·uR­VHgRØ)U*4} ¦…®Kffæ‘24MǪ¢Ðh4HÙ Ã\j2M‹TaÛ©ËÀòÂu™«L‘Τ‰#A½æ“Í´2?Wãwçý¼êÕ×°ç–›™} שa™ePd$ ãdLè4i¸qœÜßA¡TŒš¦b™A$‘‘D¨ Aá Ië)ˆ!¨5QtBk+ŠªbÚ)DäS,pôˆºSC“ ú¢D¸®C&÷¯ï{ R! pšIRyµ^¥Z­Rn)23?OƲ°;Z CŠaØ(ŠÀ¶ b™¸ÀÇG5¬\ŽH(I˼f05[5NçM IDATeõº-¸‘ÁÁ#'8Ñ?É×9È×¾| ¢˜/~ñöþÄf&ÇFh)¶ðÆ7ÝHÊH162ÊøÄZÊd|fšéù9jÍ;¶] B1ÛŠFo>r?㧿ɧ>~2¶h/·²iÓZ,£Äï¾ósÜò3»©:óZË\º@©ØÆÊM×QèÞÊÛßñZ;»¸ãïîæ×ßòã¼âÕ/AÓ=ÆÆž"WLS™›e|<$—ÊR«×qê.¦žÆiFx®‹e§8qò ©b‰­7l娾CüÇÇ?ÍžWÞÀ¦=ä ­tµ¶ñ…{¾À“'OñÉ|/V!ÃųÇÈ•ò¼ûÝoÁL¹üå_~ô»þŒwüáÛ Ÿ@O1UŸ¥5›%“³YãnVlØÀÀ7öQ¿4Ì×ÿöcØi“lgžµ×of͵×`:qš6Ó•*Åö6|×!Š¡Ùh&VšN*“&ˆ#® CeÚtôö¸ êNÇqÈl:d~ךEű“à½0 )¾ˆæú0 ™œœäÑGevn–µëÖ²uë5tw¯$ êuùœçþ(Š˜›EaõêÕìØ±ƒíÛ·/97„¬Zµ Çq°m{©}ïûÝäH)QU•U«VqÓM7-p˜¦‰¢$…§NâØñcœ;wŽK—.áNâññqŽ9Âàà ¦i²víZ6n܈mÛÏy£(bbb‚3gÎ055Åìì,ŸøÄ'ž5Õ8Š"êõ:cc‰û×0ŒäÐq¹%ëJ^Q"e!+dEEdÑIJ¯òù»ºbñ*/_Œç[Xu¨Õaˆ’Í¢¯èC-•^˜¶¼…Å4?O0ÊÄÄ+W®dãÆ¬Zµê9Í¿³³³œ?ž©©)¢(â®»îâ¸Ìa»8×7›M.]º”„éúò\ÿ_¾\¤œÇ’1†È ‰N¸40((l#E9k16ý$Ñój/1¨õ§PÂq¤ŒR`Ç6í²«¬«°²³@J¤ÐÑÀ*‚ˆqª ¼`–bì¡ÈèYø¬Ëõ#/UM« c'q|Å «qàŽ2ÿðÃø¹ê-·Ý´‰t©„þtwê‹l|Ó ¦i¡&a1žï''b¶‚ªhxƒ.•¥S4Ã0‰ã×u±m˲Ãp©MÁw‘TÓ!2iµt‰ã!$±TH«BÏsPUÛJI •PÄ‚`»°¨C¢jËRñ<(QUçG„a€”biè8.–•¢Ïã{QÓhÖÉAk¹…±á1Ú;:¾G…dò9 à £¥É+"~š›I%Ž%~ࢢi µF“L:á‚ú¾‡eÚ 'ŠFâ]ø}À÷§†–M#ŒBb]¥V«Ñt¤s"ßAQu*µTUpÕ†•Üÿµò†_x'o}ëGøûø ¹\|>dlü"l°ç¦¼ý³ofzt„¿ó“\èïç%?ñΜ>ÇþÇò¥îgrÒá·ëWÙ¹c'ÓÓÓ¨ŠÉ¥‹£üãÇîä±ýûسg/;Ä[ßò?Ȳœë?Ëìì$O>ù$…\–z­ÁÄ¥Sìܹƒ®®^bQÇó]Ò¶AJÍ&ccc¤Ói,Ë$h:Ø–EÅLOÍË댌Œ2?WÁ÷B2vŠ0h&¾a HÞïÅSX!Íf˲h6›Ôjµ„Û”6©»ƶ3¨¾‚ed¸óßï"æxÏÿõ÷ÌMM¶m¢h:*º¡b«ÄnXAS5ìLMÕp][Uðœ RES ¢0$ŠÄš·Ð?x¥§‡ŒaAR©Ìã{Pk:”Šyj~HÓñ‘Õš¢²rÝZxø1>÷?Ñ®ç¸þ•*NÕÅ.å° ›¿úÐÇØsãNö¾äÆÏ¥ÆôÔ$A<ÇïÿÁo“Í”xûü ¯zå0/yÙ œéŸÆ428n@60E„©lܳƒúôZæúiÖj´mì£ÔÕŽÙZ¤îø(zF¼ ¤såŠd¡JÒÙƒ‘.„ ^¯399ÉìììÒ<ßÒÒ²,®þ® ¨â»£hB`¦ºAÿá8Ò¡d-‡Xº¸Þ VçO—6!Í ¨ ÈägÓ¤iµZ)§ÊXö·ue© ØE”¸„ê:w¤VnY\}¡„Õ|y‘Žø±[náÐc‡¨Í»Ü}ÏÝܰ{+7Þ¼ Ó0)wõbèm­-ÌÎB&cÒßšÐñذñÒV†ŽÎN,3Åìl…ùù ù|‚yX¯A% ã…{F! cææ¦b!®ë¡ëét†F³F&“¦Vk`èY@gzzžÏ}îó¼íÿ|+†©Qi:‹Eüf!¡ - dk6ÐMÇó1í4®U5BÁq}RiM7ƒE‚a˜H!‰âˆÀuhŽOPžbëö5h¶I#Š©7›dTfÃE¦Žç „!H§Qà B,Ë¢Q¯aZ&†G¬F4 ¦e“+ä±Äiz(ŠJ*•¢Ù\8ˆb,Ë&Ž“¤ä #I*Ïf2Ì×넱‚jT«iUÃm88ŽÃÏÿük¸ñ¦¸M½7ÜH®ÓâÜáŠAW±À6r(º†@cj¢†T“ÃsdŠ!#c£lîì£~ñ¥öV.>Í}ƒÿ·Ç¸é¦vþðO~aä¸x~‚â ¿ñ3´­ì`pð ¶•av¾Bk{/ïù“¿à–[nåÓŸü*›6¸ãÃïdtü<¦bÌβmÍZÃ@JÕ°¨;™LžtNA¢h*Ýë×Rá“ÿp7_¹û,QªÉû>ô&6´­ãä™Çélí"°ó|î®Osò¤ÏŸþõÏ2<|ž\Î öb2y‹Je]±ø¿òfŽî?ÇG?üd³F©Í`ņvœé12†Aux¡§.»>)ËdïÛ~¡Ä\¼ÀçïþkVô²ýæ—RUDH½QG×4jssÌÏÎ`X&);繋ÂÀGÐÛÝÊ•=4Ü*ÇÏ'_K>#º¡¡*)œºGàxØš‘Ü·ºö¢*• GåßøÃ‡Ù°~»oØMgG'†¹œ$“‘J@„aô]…ÉŲ,‹k·]K³Ù\ ”ªV«¬]»–îînŠÅ"¶mc©TjÉ}ò\˶í%ì¢;eq#V(èhïH˜×¾O¥RÁó¼¥öÄg«E‘y~~žÕ«W³bÅ ÚÚÚžñÜSkµ¶eÓÓÛà 7ÜÀµ[¯%›Í.!Q„„QÈÅ‹yäáG8yòä’[·««ëûæ»]±âãÃñ[‹C ŠŠ²Øô"ÞHJÓtfh4FQ‹»°¬vÄrrýóV%Mti¡FÄ(ËÌáçETµ¬dóf ãÄó±Ü”L½·m|, ½]—®øŠã˜K—.ñÐCqß}÷199Éž={xÍk^ÃæÍ›Éd2K­í¦i²jÕ*Ö®]»ä m4lذ®®.J¥ÙlÃ0°,ëšó„˜¦I.—{Æü-¥Ä²,²Ùì’ØY©T–£öïßÏã?ÎÌÌ {÷îåÆo¤»»{éq× ÉÚ=zÑ,a¶×j54McýúõÜrË-lذÖÖÖË~GÓ4Μ9þ}û8pàÙl–îînV­Zõ¢Ÿë—ë;—çU¨ÖF°ÍNôlŠú|`W$‡0ÁhÎÒék;wauÜš•¬µÇXTTñì¸ E(¤Sí¤T3cÄ‘DÑS - «/ˆ°šÉ|‹±z «a½NýøqêO>‰šJ‘éî&×Óƒj¿øQÚÓ7²ó•yb© i:R,:‰Ãf@:¥%çìµöoýÖï'R³¨$I™¬š®#’„кAä€`br‚5ëGQ-ƒD¡k‹I1Õx»#–:¦i,Š¢ !P„F$CLÓBˆôó&±B†)0«1 *Ó4Pµ‘(øâiv”Bj„%㘨ÕÂ×4DNEQ$ªˆ¢ˆXÆTz—ó3?ý6¦gÎÑ·lG>Ê÷¼î5<¾ÿnîúVå… ÇŸ8L>kðÚ›wóc?öÃØ•2Qщ"¦gç8Ús„»›w33=ŒêŒŽô3°¬‡o|ã«\¾ú'¿aŒPâX20ÐÏȺî¿ÿ1<ÏcÕªåÈ …ç¥ÀxÆ)( ªÇÉâØí‚ùM¡Pè®—F>_ Þªâ¹’J¥‚exË[~˜Ñõ›xÛÛßÂø©ã¨"Âuüv@aY?z‹˜äÊ%._¨ÓjuhÔ᪦#ƒ„œã ×W Š]SQ’„z³I®TÀq2˜¨y•lžBoŠ®¢š™¼F&Ј|—(”(]æ¶¥éäs9Ú^€®©Ž°"Èdm‚Ž×Á4M M%Œ$š¦a q,ŸeàÕjµÿ ðÓ4ÐU0Û±Éô  E "B„*»f-—&.p÷7?Ãuc[è-—ñŒ ŽGU ê³utM§ÜÓGàB©·B_Ï2.]ždëºÍôeó$“x`/Sç/ÒjÇ2¿óÁŸ¡UÉõ °÷kpf núÞ9v„¾ž"BhŒŽ\×¾ðu\×GSmΜ>Ç_ýÕÿÍ5G(—bZsxˆ¾Þnúž×RwŽ-4.ÍLñÞÿòy~ämƒÜ|ë똛8‰a…„(éõ%¢zy’šôùÀ{~‹ï{ãOó·ÿã¯ùÄç>‰c¸HKåÉ{÷rêô8†“eÕ5ÛDÍ÷ЄƲJ×ÛyæŸæáoÜOùÚ-,_5„ø4Ý6½z¦¦È’Žë§Ì}'­F0ñÑL•uÃk°²6ª®¡$TAVs0Í,—Æ/ -7lD¶Û¯Ð(!Š"&''Ù·o`tý(›7o^ü’$!ŽCBZ4ã)êî,"I§¢(Zd¢<ÈjÛ6»ví"Š"öïßÏÜÜ÷ÝwûöíÃ4MlÛ¦¿¿ŸááavïÞ½8–÷0:K¥RʤÆÏ.°h¡ ÆX/ÞFQ„ë¹LMM155…¦kôô/²jŸûwA@­V£Ñh`š&›7oæ ·½5kÖ<ËayAsMFé䈪ª”Ëe^ñ†‰”DµþÅ ÄAš§Ibôl³TB)R€ç¬-Ç)#¡¥nºKñâ«BG§Œ&#Dý2dcp*Këüb¬B<}þ~¹MUAzê,ã«^Rn $ò9}ú4÷Ýwwß}7.\`ëÖ­Üxãlݺ•žžžgå-Û¶Ù²eË¢‰U³Ùdß¾}<þøã˜¦‰ã8ôõõ±aölÙÂèèèw”÷”¶mS*•®ÐI_¶[Z8ûµÛmæççùæ7¿Éøø8###lß¾}QûuÁ‡dákÁHÓ÷ýÅša¡6¨V«´Z-„¬X±‚±±1ÆÆÆèëë{ëuÁ¨ë¡‡BA¹\¦¯¯ïŠ5» Âi³^z0¾ÝòÅ1± I„ÅxQÖ+I‚°N³qŽ ‰ÑrCØv–‘ûß`šª(JžHñiƧÑcÉ’êïˬf³é×Ô´ÛWµyUÒhŸ821A~çNœ ÐìW‡>¯VoµqlÓ4ˆbŸR.ŠJ¦&QºicBÕQ5PdZS%]Óž0 qˆafIIùªF$%QtYž 1Ê¢`¸ C¤ 1M3u„4TÔ.k#–1AÐ"—Ë‘$ š¦¢+ YU5Ü…Ä(„ ŽÓd•$ º¦!åBK¥B]ÕˆÂÞJº®§úš€†ˆ8!ð½Å¾¢¤@©®ë$¤:‡Q¡ªZZ[&1B<ó€'’ŒítGÙ[ÄqŒiD]c°8 Sƒ¤8AÊ´@Ô4=ã]3º‰’Ä„¡ hxž‡ïy äyÿû›L.Çøùq6láÜ…3ä²Y:ó-,"J¯Ù‰¦Dض`îÒŒ|––ëãX:·ß¶‡¶mabâ"Ž&ŽcMC ×lXCÛk3~î}½en»ý©ô–˜¼xMÕ1mƒ0tÙ²u׿æxâ‰û9zä8ùóÐh„T*=ÌÏïýÀnJ¥~«Íô̦QÀu|?Ä÷.^¼ÄÈÈ0a˜÷ŠhZ Ô‡¡D×uòù"N§ë‚©wÀóÉ8Ebú¿÷¡?æÈ‘:øGï"‰;a“žR™Ð‰¥N³íÇ År‰/~î ô”Šl¹fUÕðƒ¬“ÏÃ÷ClÕD¤ØŠ¢¢ %†$‘ôö÷1¸´Z-,Lš33†ä y@àEšf´B/Àpll[Gº: 4Ë6Qµ”ÍÝÛS¢Ñj„ Šš®…¡jÄ D2BÉbCN›8NX¶l­VzoµÛíôžÔTJº Q”‚R¢=¥"s9rEU© ÇËyø¯sÃÍßÊÑMx¡×éDZí&FFÃÉé$a5ôèËh”“>ÀW>÷9ìŒàíÿîçøý?ù Þô·0´y#''°¤ä¿ÿÉ'Øýš–-/1X,sùÂdº¨_úÒ×øÕ_ýmþݾ›~û÷rÝu;8sú$™¬^ÃÊžÕÜÏ|ù¾Æö=·bj&µ¹Ùr…N³ÉÏþü/²ÿà˜öo¾};Û{U ùtá3þ4ù[ÈBF¹¼ƒL4ÀÄSÖX__†‹&!QGm ]! %šž2Á¤”‹`¢®ë8Žƒëº]@[¥Ùlc†`hY:ÆG?ú%þúïfhÕ µÚ$=•<"–èš…ÉãXÕ¥Öhðù/|‹mcCì¾~;¡”øAˆçÌÎUèYNNÍÒjUSÖìÓ­k¸65;C+ ± ­ØOmzŽN­](€mũƪƒiX´š-ìXC‘™DtZmB Qè“Ïå‰dÄüü4 •J!t‚ÐCF„©,G¡â”ÝÔÕ.rÄqŒahhšŠ”!RFI‰!,3er^@3P˜iÔp£Y[gÅêUèþñ+ÿÈýä ì\‘N(1“—溆۾ÿí<üà|þÓÏM{nadãzÞóžÿ‡/|õ(Ãk>ðž_gíÈ**Sûfhx„ • ¯“HŸÆÔeî¾ë~áçogŦ œŸ›CËSÏù1*6º#è¸s´ÚuÌŒdÇõ½¼÷?þúà/rãmoBX‚zè3ã¨*(^LYw0¬aÐÁŠ#Åí$ó³ìÝû-´$dhx5NÞ¡ãûHS—&˜ŸcͺœŒAÃkÓîÔ0- %,_¶ é ¤Ÿ€!ÁsIº{M\›àèÁ{É¿wµFÇÌÌÌðÅ/~‘½{÷>Ë­>Žcší:3óSx€&ùJt  IDATßùFFGزe o¾ãÍ\wÝuW€‰ Zª[·neõêÕ¸n*u133Ãää$§Nâ‘GáàÁƒ)Û½Ùà–×Ýò²±:šÍ&÷Ü}À|¶nÝÊÍ7ßÌòåÿ²³«”’F£ÁÜÜÜìÙ(ЍÕjLMM-Ê \ýõ‹ÅW¦ÞZ’@»œžÂ½|™Ø÷É,_R*‚m#j5‚™:—/cÊ¥ô`¶KñìMrYbÍ#¨ú¨ÂC[´´ZŠïúQu]âÉ ÔêerFÑàå’©I÷JA£á<”ò /)?\U1>>ÎÞ½{ùò—¿ÌùóçÙ´i¯{Ýë¸õÖ[Y±bÅó:Û+ŠB>ŸgÍš5T*n¹åÚí6sssLLLpúôi8Àã?N†ø¾Ïí·ßÎààà¿y\˜63¢(ÂuÝE}Õ¾¾¾E†ìUµñ¹s´._¦Õnw?§"¹|ž|o/bd$•Yê„<·øƒù¶¢Ç92(/Ö›$$^ Q'£È¶ eÄR†|—<*¹l-›¥Úh\µÀj†´œÆÝwÖj˜Ãð~=ô÷¿¢IÏVÇYd»–M«Ùƶ3ø~@IT5 ŒB Õƒ ÃpT]pn7 ƒ8ŽiµZ‹ãÛ¢ËêyæØ¼aj$IŒïûÏЫKÁËR©ˆjh~@JLÓÂ¶í®ž\Üu]–¨šÀ4-b©¥± JÊúLAܘŒc£i:qœ… "IÐ4U5hJ‚Ûì`XGÁt2$RbÚ6ÕN=Q0U}à[èhzžÛýìt”j÷óÅ¡Ä Uךè®K„"Â0 Ýñ˜››#ŸÑ‰TÝ4‘R…˜&QR,–È”J$~ŒP ‚( ÂУV«¥&Nívj®2°ŒK“S,ïíãÌé3hC+è+Q^ÉSGŽP*»d²ó&±ˆ0tlGµ0L 7ñSs¦DKI!W Ÿ7ñ}$–d³¤ pÛ E%Œ|”$&Ÿ+aYy­iÚóó¬^½Ïõxâ‰ÃôöBJ:®Kú„‘B³Ñ!N +V¬äìÙ³‹C’HÜN‹l¦²È ^Ð3Z©©Õj‹Žœ®ëR.öàP^¹š÷ÿäoóã?~ 7½æ5LM„Ml]C‚þžåÜç£äË7ùM<7F“)–)J ÜN‡©éiúËËIPº.â"‘@"cTE#ŒBòå<„)c£9=˲¾~B (6I–eS­ÍãML%ÁL†®c9:­f·Ó¢§·—r¥Àìì<†©"£ßóhéh¿–²Òèê§`sÚ¸h·äÒÏqìTòA6ñ#I3L°t‹Nâ¹ ª“['ÖU²nt ÕéçŸzŠMÛvP*ä „†fg(V*ŒŸ=KtP½wýÝßòµ/|‘òp/ïüµÿ“ɆÃý‡Øýýodüü~BUcåàþðÃïãÚ1•·¼~F’Éð??þYΞ?ËÅK—yã÷}¿öæçá‡iuBúWÓjNRè§Óhðõ¾›žr…¾ï\·‘ñóçyÃmï@74þæ/~×½ñ6Zµ*çÇÇ™;wŠö̲ë×195‰Êzfg&I—Æì4¯ý7Žn i5PuhÏ7ª‚S,àGªF`Kî¹÷[üùÇ>˶ÛøÆ×adÛb»‰ê($­6"NPbô$¦•ýišJ‡E8R£²i-ïZÞÇý>À)¯Åêáµ(–… ¦&˜Ÿ!›ËR,÷°|y?I,‰…\±B½ÑÁïH‚f‹‚SÄo4° EP¡zâ0ßüú—¹fózÖݰûêïœv5“ûûûÙ¹s'žç¡ëúãøqÓlæ¨ÌÅsH)éëëcÙ²eô÷õã8Îó¶òN¡P ŸÏ/î#­V‹jµÊÚµk‘R2;7Ëù çyê©§ØqÝÓNÃ/u¸®Ë¸tù}ý}lÜ´‘Õ«W/J{<7t]'›Íâ8Îb^­V«WW5 Ž;ÆñãÇÑuÑÑQ®¿þúE£«WXÇ„³³„óó`èå2z¹%ŸÓË&±lâù9ÂËS4¦EèG\‰Q© –tæ–bq“4 iht„A€º¬¾ˆ‡þ˜ÄóaŒjåQô—g„O³U¬¢N¸Èù&Zèb˜¯šóÙ«"|ßçìÙ³ÜsÏ=Üu×]T«UÖ¯_Ïk_ûZn¾ùfͪ^(×/0VΓN‡5kÖ,ê‹^¼x‘K—.ñøãsà 7,êœ~§@é¿¶¾±,‹nºé&úúúÒ©»®ìÝ3ßÏ4M¤”ø¾eYT* “É,6‰íî¬ëºt:+Œ«|ßgÿþý;v )%›7ofçÎW/°†P­ÂÔ¢Ñ@³,¬\îYŒU]USàgj ¢(W—º!O×ÇI€žG>†ÓjU@¼X[‚ðêˆùÓh}×c”7!ŒÜwn«¨dÉb ¢Ð,º³Kó¥(yT-—Ã(•éèöU£±Ç©\¨ h­Ñ“OŸ<‰•ϓټ9>3_=æ­Z”€ÐL %! "&ŠP‰bÐtDBLŒª©(BM⻊"”E uá¸0–¬wuèÇ‘ ãˆ(JÉN§ƒ”’lÎIÁI’®ÖÒ}ÃHÇŸmÛF7,’Dâyd!4 !:E]ÕˆãP‰Âß÷ñƒ€0ˆÐ„†¦¦iœ€ NÍ/Ôªó:tˆ7¿í‡ˆ’„l.Çäܪnwõ£‚(’x®G$%¶mE’ŽÛ!Œ4UMÁ@M<£ÑE1BèzʸŒ¢!ÅRËPð$†NJ„®`Ú&nÇÅí¸(„Qˆßê ©®¡›*Š¢#¥ÄPUMИŸ#ç˜ÄAH>“¡1WűTâÈEQbÇ®”‘AEIüÛÄC¼ „D'V‚0 “ÉE‚N§Šç‡ºŽ”!nÛòLLC¡ãûhšc9¸n‡™Ù:þANÍœ§ÙêpûßÀƒÝGÄX¦C"}r¹,®ÛÄv AÀµ×næØÑ£©voÑ“wHLÏq]Û2qœLw-å"Ø„©>®®é$B£Xêá?ø»ÔjU~ê§Uø^×o¢X&Y«Œ–-pÿý`80²q –í+(È0ÝÄt)Y^ée™ë!eÄåùiz*yÂDvïÍôЯ©Ëå …B£Ug ŸÅoÕ± ? ñƒSKu“ÈfÉç =FCDá%1q×´,Ž%õÚ<ËV.#“5!IBŸ(L0 ˲QL¶±lEM]ÝÐAH4]`Yf×)µC¹\@>NÆ$CZ…¬ædhº>#KèL^ž¡âdhù 6mÙÆ“‡÷sßÝÿÄæ;É,ô¡Zg󖕘£ËøÄþ?É÷ÿnþ‰·°ÿðÃüéÝÃOÿÂÏpvü4Š£¢)Ž:ÃW¿x7zÿ/à( 9»ÌŸÿŧøä§¾Æ/½ûç8}þ+Œ_˜b®ñ‘¿üŸûÂ×ù»ÿõ1FÖobfúýŸáïÿöüÅG—N½ÅàÆÍ|þKÿ€ŒM>ô;¿ÌÆÑæ'&H|—Áb–#3˜jˆô¨I‘G&_ÄóÚÄAÀ›ßx;v²Ý¤´ ÛM¢0"gô =•0‘Ôª—˜©gÍ5kø÷ü,óUøçûÏógÿ$ïûoïfæüS˜z3‘¸¡O¾Rf²U§`dQIÜjQL Ã&j6Q‹0ô™›ãÜ™Sì¹å6,ÇÁÈdÙ¸~'_ Þl0;}‘ed³=t<]1ˆ‰Ró?ßÇo¶°KY&ßÇé“'X¿ëµ¬½v+"—E«†a088Èë_ÿzÖ®]{Ð'„ ŠR㥇÷íãø±c„aÈßøF¶mÛÆŠ+¼‚eºp°rÝ´É¥iÚâøžã8˜¦I±XäìÙ³?~œ“§NR¯× ‚àeOœ8ïùlÛÌèÈ(¥RéGø>C>ŸGAµZåòåË´ÛíE ¸$I?7Σ>ʩӧ`llŒ­[·.Êâ¼Ò@ÕØuñçf‰}sÕjÌeË‹ZŽ ‰i¢‹èI‚wôî±chƒƒØaˆ–Ï£.«KñÌ{Jb:$DØ, p¾ˆ«ÛÃ7@A¼<Àªj©˜EM¶ f¦°ãùlÚ _Š«T½|ù2wÝuwÞy'GŽaõêÕ¼öµ¯åÆodíÚµhš¶xŽ\`.äýP2Š" ÃXÔ:µ,‹¾¾>lÛfvv–|©©)&''ñ<ïˬò_ ¾.HÏe³Yî¸ãfffž×˜*I:ľ}ûº„’ÜvÛmìÞ½›ÞÞ^V¬X±( ÏçQU•z½ÎÌÌ ­V‹¾¾>Â0$Š"¦¦¦¸÷Þ{9qâ…BmÛ¶166FooïU¸5$ÄããÐh gh«¯/$HH”vQ«OM¥²"¦‰XV÷W™„4’ èF-¿¶ ¬¾8u],}¤7íË èˆÂ*Ðíï UÑ(ˆ"QQâ:`Ù¥Kù’%C‘ËA±øôsx•„”’F½ŽÞn“™Ÿ'>u ¥^'³~=¹­[Žóªb¬kA'Ë× ×õ¨ IcÙ&2J¡Ä°¬.Àô´#±ªêèZªý¹ðúN'e¿ê†‰¡§¬Ò( ‰Š@IM°ºã A…!vÆF3T:n)Ó.ŸªhXVšDew™ª6RúÄq‚¦«Xj*ÉU¨èš†³‰‰©ÎÏQ(䱜 fƒz§C!“ÅŒT!üV³Mßà ÙR‰–ï¹>¥lK·PuÚ\$žž^\×ESLš6–e±2„¡J—™KŒ®©K½a"„‚ë†hZ×uIˆ( Ä–jL!T¢CSP2:Š“tšô—²€O¨ÇªŽ¢Aœb",Ë@Ó|3½Ífƒ0ô)m¡Ò¨Î¢Ä6­–‡næ8ðð!î~ð~~âgÞ…f¨¡‚ªš(q@,„ÐÈZE©µSä†&KE¢("òC‚ Æ‹$ù¢Îüì,…B?ª’Å4Ëz—§eýÆ5ì~Íšµ„B¦Ç\N൉‚¾þ^<ϧíù{lê9IJ6nÞÀ®»ÁÔñÃSlØ8Ê›Þ4Çß~êïø­ßüYEÐéÌ#„$ }T?ƒšHÚÍ&–i¡6±®áJ¬3ŒÝñVrºÂ¡¯ßÍÉûá5¯»™ÓÉàûm¤ Y³f]5©7Zø^“b©‚ihèDhYKwyòž¯Ñ˜¾ÈÖ(l¾Lßu1_!øQ.—cÆ ]ñŠ¢àû>O<ñ'žJ †a°k×.¶lÙB6›Å4Í+ N‡Ë—/³wï^’$aõêÕ,[¶ ˲PeÑèîä©“œ;wŽ(а,ë í´—"€ãÇ3==M¡P`ló«V­ºBÞà¹Àj¹\¦··UU9wî?ü0ƒƒƒ´Ûm|ß_<°=ù䓺Ám¯¿ë®»ŽL&óŠ,DÂÙY‚É ð<Ì|½P|šêy$Í&Þü<Þ“O>„{ê4Qz“».ÉU,Ò¿/ß?â´=º´/fÑ=„+€ÉËC•žÄ¯zU—ÄóPLS–HR/ÿž†œ8q‚}ûöñÕ¯~•óçÏ“ÉdذakÖ¬A×u¦§§ŸJÆqL6›¥X,¢i<öØcœ;wnHÌår¨ªºhütêÔ).^¼ˆ¢(”Ëå+Ì&ÿm0 •l6Ë–-[ð}ÿ 75lNM%?N.—cÕªUìØ±ƒn¸aq RUUzzz(—˘¦Éøø8û÷璘/õþð<³gÏrèÐ!î½÷^,ËâÖ[oåæ›o¦\.?ïDÏÕQÒœšB7 ì•+Q—/GynmbÛH!h>ˆcœ+–°Ÿ­ÆDx(ŠC¢/ðE-Ú­S4½ H+Vé»UÓ-WC¥~êµÔ¡ÞÌ,I<¼„Àj’ËA>ŸÊt:WO¹ iÈN‡ðàA¢Nœ€Þ^ÔM›PFGS¯„WQhŠÐR£*?B…r¾€m;DQ Q Ü$aLG¶‰dLœ¤‰/Ýô] ÃHM…¢tTÑv4”®îª‚úÓ£Š@ʈ0ôG½ýªO®”%’)kUšg…aˆ¢¤:©q¬‚ˆI¥;æ#»šª©¦iw•ôí­ôÒhÌS«Î`ä‹äÊ¥´ðŠSö‹Ž Þh‘ X†ª@"ÈЦ¦#ÃÙªÐ0M›(J=ŸX ‚@"£ˆ(òqkÑàJÓÇÁ²ÒQpÏóª d,ˆcI¬(ø^€kD‘Ä×b2ŽŽš¤Àª^.ƒžÊ„2@Uª¦CJ×,+4U#!B(Já{{{iVë†É|µÁ‘#G©ÖÚXN ‘ÈD‚UIõT›¾¨ÄqÊ0¨(vÊ“á ÃÄp, ÓF::/‘‘ îùèF‡¿ü˳uÛ2m×.ãìÉ Ì®ßB©\ÀOZÌ^¾Hßò>ú—åp›B9OÇØ¦M’xF?ðÉäd$‰djòÕé4±4f§C¾'¾ÏôÔ ¹ÒZþô#ϯÿæn¿ãû¨N5n“¬Á4,µÙBÐm³}×õì?z/a,Éd2¬ZM³Z‡P2°n5õùihu~ˆ‘51 ÍVKQÄÄq@¢Æ2BvBŠù‘So7P,ŽŽÑׇª›ha XÛ´ðÛ.±Kjð YHãù!ªª!U‰×e]kšŠïGø~‚¦ZDQHƶI•V³IœxA”Ž@ç³È0mˆX–A6›I™ÓA€ïë\*}ý(–ÆÇþê“\w]†·½ãßS›`æ­$n'¸‹Ñ –“ÅÎei^ª3©JùšëÐmE×9?>É:×ÅW¬œCES‰‰sgÁÈš!òå>$ ¶KÜôq¬"}••\»m¿ÿá¿ãÁ{ïaÓÆaLÛ@×%Íz…€œå h6™l/ð “@‚®¸±€(!kgØyóë¸øØÞók¶l¤wÓ MÛwéxŽ•Å2²h" k‰G{ò"GyˆN³ÁÎ=7‘[¾¢˜XÊg¹Ä^ýy^}Ö¸þsU×sÉfÓŽ¶®ëär9z{{G ¼+:Ÿ<òóóó¬ZµjщwÛl69vì×lº†Í×l¦P(¤S Ý©ŠZÇÓ ù¯Xë…÷y!3«0 çÀÁÔëuÖ¬YÃÆY¶lÙ·=)ŠB6›eíÚµlÞ¼™K—/qìø1öîÝ»(‡rðàA&&&Èf³lß¾[o½•áááWl!Õkø“X¥2F_Ê‚nªŒˆ&' Μ¡}éÁSO!ÏœA1M¬¡!Ôr‰%å¥À(c¤lE-d ©Y ½ˆ¯³¥;äÅ«|bÙÕIJuß_Žˆ¥‚ôtâH¡,ÁçWÓžEœ>}š{ï½—ƒ†ábsðøñãœ={öŠüEëÖ­c×®]ôööÒjµ8zô(>ø “““‹ÆŒjwR°ÙlrêÔ)„ŒŒŒ<¯Æø åügJÕýK¹~¡.XÈ÷ õM©TzÞÜ¿¬.4: àP(,Ãq×Ãc}»zõj¶lÙÂñãÇ9qâ–e1>>ŽïûŒ3>>Ž®ëlݺ•[o½•7¾lšñÿªç²;¹j:Vo/d2Äž‡œŸ‡(BëJ÷$¶M; Q}3Ž—€Õ+²VúïÅdF²IÇ=MÏc”7¢e–=½¯WùU2´A¶Á À\Ú‘_º›E¤~¶Jlø>xÞKÿì²ZEV«Ðl-LLL $<~µXÄÚ±uƧ¶¯&`U7TÔ˜®¦‹@ÓT’$Æ0TÚí6Š¢’ÉYxaˆ!L¼nw.ŽÓ.cj£ª*qEÒ÷Ñ»nêªúŒù$DJw²/YìØùaúžº¦§Z¨Š†”1q¼ð¬‹.3uáwi(ª‚PD"P„ ]£©$‘ív‡ôOtÚm²y‹$”Ë!éÞl–i²råJÈeÑ[.V·íb8q P C7Ͳ …ž¯v ª ILlǤÙê,- ¡t'!‚nòºÝÕTX]·MTUAA ”„H†H©‚ªtˆ¾ÛAZb‘φ®¥àl¥®}Š # ºæNªšÙ®Û!—Ï!e‰ämïøQ¤€ t‰QHøˆ$D ¨Ç!qu÷VÙ]_huš¨ŠNǨª‚e9Ôëu45ƒª ¢(¤`÷ÞwµZ‹ËQ4…•+Ñ4b±‡v«Æû÷½üÄ;ßͳrpããXœ=w‘Më‡ñ<ÃÒ‚ô÷‰UQQUçºÄHÊ¥ÍvƒÝ4Ù·ˆÿáÿx{3ùéßsÓµ ‡øú—¯"ˆ[Dh ó‰Ïü'” ‘ŒR}CÇÁ2L.Ök@Œ“±ñètZD¾êØ C%AÓÚÅA7tZ~“r¥‚::ÊÉO q’D‰¦ T¡ª$qB(%"VÑ4WFD$Ÿs0m? ðý3³Urùù| ]78î<½½+({0M¡D)ÓV(¨ºB«ÓA¨ B˜D$¸n)%gNŸDÕ3Ó—X=¼’eËp=Hbbx ˆÊz¯Egö<áÉ LÜ÷ú¼ÇO½ûG1®¢YÔ9}ø)N=Ïèê5¸­ †¦â¶5¾ô÷òŸþÓǸ~ÇJ>÷÷{ùÌg÷²ilˆüé‡yÏþ#Nž½H!ëð±¿ú<º&Ø2¶žLÖáîûpîÜ~ú]?ʯÿÆ/ TIà61t•O}üc|ë®GùÄßü³—§ðp´<¥Ò+ªìßÿ0z Íùùl…È’$B'gØ„m—êå)ÓF ĉÏÅÉqê—'è¯ô0´b v®Pñ<—(‰šîä¨Öfظi”\VçèñãìÞ½ðƒzÊZWM2‹¶+©×t<Ó1AWhG>YMÇHb‚™ªa2xÃõÔeľO°Öë°fÏn\"„aãF ¶¢Ñ“7 jô˜™¸Àþ‡fÙà»n}^¬àwši"¦½²:{ß@Ô5ÝHõ”-ÛÂqt]_d—>Ÿ|€eY‹Eúúú˜žžæØ±c:tˆ  ^³gÏvïÞͶmÛèííeff]O%6®Ï}UU1 #• y±´ç¾Î0ŒçýœqS«§æRBz{{Y»v-•Jå_dš†ÁØØo}ë[yô±G9qâ{÷î]ÔYÕuááa®½öZvîÜÉððð j¶¾"BÆ$‘D8"Ÿ=½Ï“HâŽÓÚ· ^ÇÈåÈÞr úÐÒqêÕ«ÓùôU‡§Et:hµžÂ &ÉfÖQ.îD×KK‹óÿ7`5RFL¦šB¼l¬$Ív°zzqs<åòÒõ¹ÊÀµN§C­V#ŽSŸŒééi{ì1ž|òÉ®Ƴß÷Ù³g### P*•èïï'ŸÏsòäI>ŒïûÄqŒ¦iX–E6›å¦›nb×®]\ýõT*„‹² ž Ï€QU]×søó±\…‹ïñܺṚñÏ÷³†a`š©Ñ±eY‹5Åsóÿ† xË[ÞB±XääÉ“ìÛ·}ûö-2[+• 7ÝtÛ·ogtt”l6{uËý,x¬É‚¬CµJëˆçç)ìÙƒº|9‰ék’äª]~uïá!ÐF7- æ(Vf%/^ãQI{lq÷z&,õ4_Úè:É™¥^‡J%Õ.~‰ö‹pzšÖ£â?öÉéÓ´ƒWlEA¥RÁÞ½›ÜÍ7c ¾*/ƒÖj×"I"ð¼jÈø‹ãd°,ƒèƒ.¿ IDATDQ0Œ ª–v ;EIuBŒ©„„¡Jú$Â0Y<ˆªB¡Ói/&9DŒeØ‹0AUQ5m„ ˲µWÓ9ð…ÎHª{ªkFWj FÓ0P(K h¸©p8q‚Išõ^«@__q£AʤÒT Ã"’1$D ¦A§Ó!]Tl+ål6ÚhFÊÈ](’äi}XHÐu8yÚxDtA`Ã0ÐdŒç¶ EU0-ÍPQÔ]ZÁ÷?@I"QEQ!I %Ez"affšROÛÖ‘na™(šª@QTJ‘ÄÛ±ˆc‰PÂ@’$Q÷>ˆãÃÐI¢”!K¨ ›^'@ ¢j*“—.r×=wqÃk¶…!3³3L\šdùòÕ %>ý©ÏðÔ‰EÇóBl+Ë‘Ã'(WòÔÉsܰóZ‚°MØv†™™)lÇĶt¢0@×µôó© –ebgó„QÈüþ‡y˼r±È׿þ³—æÙ<6D©h“Í•¸ÿÁƒÌT§¹ãÍß‹SÎ"T•‹/±rpÇÎñäÑÃx½ý}:Ø"ñZ´=Ÿ¶HМ<ÛBI$‰ Ñ ™$¸&½•"‰t|ÓÒÐ ƒZ³Š’JQ8±jàû²Û±vP¢A”²Lc!‘‚ijôõ.Gˆ„V;uþÖ—BÁ¡X,â8&ÓS—Ñ4h4šØ¶MÆÉáù à ›Ívµ#AÕ²¶ƒç¬[;Ìò~œŒÉÉÓ'‘q„üHâØ6^Ðñý©½Üù¨”mNj£"ù•_ý~nºyC«W!Ô„Á¡•$B'Š"þñ«{yð¡û1u‡å+VðOßøÇ<ÎÜÜ$›ÇFÈå,Žœ¸›r©‚m—øó?ÿ(øo_æ?µ“åËW“ÍV¨OL³bx“GóK¿øû¬îÑøÁ7ïàÂø4Ìœ¦˜+#Š=H?aY±‡]×nG³-‚ù‹Ôf¦¡§§Muð\EXN†Z³R¦£Û&Y?²k¯íçØ±“˜–M¡â89'C£Ñ"“-ã”+8­1¾" ‚€‚Tqœ x¾ô-Ñ›o¤åJŽxŒò“eú7 3[S(+(~ƒ¤3‹Ð|Î'Ÿ<ή={èÛÉô…Yf]Áªuë‘Q€¥º×¯ž« \*366F¥'e¢,0X¿àØÓÓÃÎ];q2““ÌÍÍÑn·÷ÔR©ÄƹöÚkÙ¶m•JHMà†‡‡Ùµkõzý f‹aô÷÷366FǬ[·îyPMÓ¨T*lܸ‘[n¹…Í›7/j¤=T.•JŒŒŒ˘;w>¯nì󅪪¬Zµ Û¶) ‹EN޾jÖBu)^bìÍIJú“Œ¶ÅY¾”¾_E!U×qÐ¥$©VÁuAÓþÍósE„t õÐCø‡‘ÌÏXI¡€Y,b¬X22Bv÷nœõë_µ.“š”Aðÿ±÷æQš\g™çïn±}ñm¹gUÖ¢*•T’\Ú‘¬ YÆÆ˜­iÜÌÐ ^`` Çôp†é¦é馡›ÆlV»±˜Íx9Þ°eÉ`Ù²,ÉZ,k+Õ^¹g~[ì÷Α™v–d!¹Jr¾çäñŸï}Ÿû¼ÏS µÆó<_‘$9e™ã\E‘g ¤EEQ8¤’h­É󜪲[l#kKÒ4¥(Š:AU¶ÖžÁ¡¤Âº‚¢¤iJ!HÒ”ªªÐÆ ´Di³5h `Lí¨¸ÉÒñ¼)ë„•f9UåB’ÊV8ëHŠœ$1>Þ&MF$é·(Šmí «aˆ]]¦ÝéÐëõ±BbŒ÷UfIš4É)‹|Ã0Äb]±!mUUlµ‡¤iºÅøu•CJ…sŽ,ËðýšñYß§c4QT9 kLŒ”’¢¨HG#–æ Û1*ò¥«Ù®Æ«ÙºeÍPÝÔ& Œ·µø(Ër㯠<¢8¤ÌrúÃuvœ³ŸÁpHYäX[ƒÒFÔÊcH‡ÀmíŠJ™S•¥%6«!R ´Ñ†cl•#ð0žæÝ¿÷nfgw°¸t Ï7´Z-Úí6Zyä~ñ—ÞÅî½ÿõ—~…·ÿÞïrÉ%Wpëß~ŽC‡®àî»>ϼî5!È‹cJв$¬êq(ËÏ÷(ò‚¼J)äñc³kטfzÆ"U›Ç[¥¿žÐ쎡}XdüÈë~žÁœŠø¶—¾œ$“,Ì/r鑤 çî?— Ñív(Šë"¥ z$IB·Ù åàêçn«ÏS$É/ò0+5ãS“”eAél-I!yQ3Hƒ¨A 5ù0¡ÊJ´ñ ½[ZúýãÕ›RZÍy^òÐCÓl¶IÒ”G}œÝ»v±¼¼ÌØX‡}ûÆH³”¸Ù¨™z8F£a ‚‹ŠÕÕUÉóŒ=ûvÓh6¸ÿûh·[hÏ#/ ò<¯¿›"cñÔ)‰Æ–ÜýÙ;ÈDÉU/»„Ü“Üó…ÏÓÇ?LNÂM/½”Ç>ÍòJJÜŠùžï›ã•/¿‘ënx!GŽ<ÄĤ%I¬®ÜÇ0)y嫾…‰©…=;}¸ãswòæ7ÿ<¯|Å·á‡)GOÜKùì=gšªRüÔOü4Ÿ¾í(ÿþç^ÉOüøñÃ&½~ŠR~óŸóñ÷}˜»\¢œ4ìÞ{>Íp×»ßÇ=<„ü›[Øñ’ëß±“•‡2xèahd¶àüƒçÑK$…Ãe+«CŒÑDe„0Š^o•<³Z ¦&ºÜ}÷2ëk=EVÏw««=FIA’9Z¥£7XÃøþD„i’Ó=¼~Ô.ò(ŒŽcšR1vêÞ{{óû¯$]^$îyœ¸ã³,//qÓË_F0» ’”hl’ݬ st^b…ÅÏhU)ŹçžËìììÖßétž”ÍÙh4xñM/æºk¯«;$¾ª•ï«Ù¤› “͘ššâÆo䪫®¢ª*ÆÇÇÿ³ÑhpèÐ!Î=÷\¾÷{¿wKòæ†ïûûŘGŸ‹±ñ؇(²èéBjâøJ…Ûé›ãE?€Vû+ºh.| W÷o ԻታÍz;[Â÷}®¹æ:DQOIÆÈ9GE[y2.»ì2<¸•ÿ6Ûñ7sý&›ôê–+¥˜››c||œ½èEŒoÝÛyçÇ®]»HÓß÷ÿÉMÝÍΙ™¾ýÛ¿} ¬}*Àª”’K.¹„sÏ=wË|ëk«ÆÆÇÇ·Ö'›ÏK±Q›{DQôO‚¿gel°y 6jjáûˆ‰ ÊÅEV¦=>^û­l2·7F¾!aÌ8­öõЪx Í3¸~²›Îæ ÛÏû%°¨$¡ZYA§i­wû¬&`‡íõè}ô£ ?óª4E]pòÒK?ï<â¹9””­Áäó̬ê«Æh<Ïl¥9Æ„´Z @ ´ÄYGš&T_’f5CNJ¨*Gžg(]Oþb°³V ã¡MÝa­%IFcð|Mªs®n›Ç ý­ Ö:ª ’À÷HÒ!à6 nGQ”hm ‚ vg,²’A¿«J|ßcmu¢È1ž¢Ê ú£qŒ×ˆ!Y9ü( jƃ!NÕº¢R«Ü C*[%)¾ï‘¦C¾Â÷ÿÐÿÎÐ3¬Mïâ†k^ÌêBKÉôÌ8UÞ¯MµTÂEÏRd ¿6ášœlÒKNÓî*|ð1¾ô¥‡¸àà!v?Xçýx/¯}ísáAÄüô’Ï|æóñw±kǾçñ·ûIþäÝà¶Ûãô‘yph®¸ê v¦çXe¬ŒFüò¯¿“ÿc"沃óàáG™9ï\šS¢—ˆÛ„0êe ^㤤*K”ÖèÊ1Þ ñ´âСpÇç?JQ¹ÚžÃóˆÛMò$§Ù4 |´g Èb¯Ä‹5^®åèRb½Yn±º"h\ð¢Hy/ß}7MÝ¡1{£ÃGøÌ§?‰Ò–«nz A§Kšæ” ¬¯éשJ®ªuiÕóg‡o³µÿ«Áϧ ȶžÓAkM³ÙüšÅ”’0 7: ž¸`Ú¼ïÎè !h4OÛPj³•Ðó¼§õ{ŸS‹ýñ Ü9%Õê2ve3Ý@‡!B dÕ ±Í5\U‘/Ì“Ÿ>or a¶ÕÙž}ì;Àgéì}Õ{I–î¢o-nº jîÇ3í‡ô|çjédeµÑz¨Ï\‘äyÐl"Âë,£á•$4<ï¬Ö üfˆnþÛ̵Q= àþ«óç?ÜÐ|ªkMÒÉ™M>Q<Õ{ßÜH5ÆÛñø.5JÅÏtb* ~Q\oÀm#«ßøoOkí6诮"’ãܳ; ðÀTwÝ…h\qÞ•W"ææ¦§ ž"¡äy¬ö7Z⣠u–••%@211AUX Æ3ØÂÒë­ÁFB ƒej³$IÂm´rFôû}²Q‚u„Þbëb4Ë×4FaŒ¦rµ¡N’$H‘ׯMÆ«~Òß(Ë [Ùš±jÚh|?"IR„HýˆF£¨õDkÒ“gaD‘¤¤EÂpy™þ O«Õ"í÷QÆ#/-ƒb„òk€1K Â0DàHÓn“•…´qQ€ &˲ší+Éh4ÂY…RÏóè÷û4Ú-<Ï£²%RH<Ï£Çø¥ MK¤T~„R»Á€ÅÕšµZ(–—–0žG§ÛÚr¼ö<ƒ‘Š$Mjé©IÓ”FÔÀø déäij™‡ÄqȰÈõØHmÚ „@;kí†æm=Z[ A¿ßgçά®®SJ!B8Füâ{3—]¶‹Ë.¿œ›ÿ䱬PŒOÎð±[náów,pûg~Ÿ›ÿì/É2XZZæÒ+®brbš8n3úÜsÏ=ìÝ3M¿?$ Y–£µÃÓ çjre…-AzVbü&_~èJu1:bÿ9ð®SïÇV ”ìò…/<ÌýØ)Ë”¨Uð§7ÿ9žQ:t1eY „£Ç`4“34ã&K£³aƒª- ¥-iD1ƒþ*4®ö6#]Y¡Ð +%y^ä)•µÄAHî,“S“,®÷ G(±R¤íNre)a¨9vüJIvï™#n´I³£QŽsëã!»vÏqôÈñ `¥Mà‡œ>}šÕµeææv$ aà#•d||‚ª² §çO055  ¬öÖiÄMšZ-–˜žfX Úñæ‘£|ùÖÏrÕ‹®e÷uW±8Zã²ïxï}ûò77ÿ/~Õ+ÐÚ‘eó´bƒR`³F£!“m?öív›n·KžŽH³aYZÐjŽ3èkV懼ò%çòC¯ù)Ž8Ì~x?Ò >ò{¹ùßÍ_¿ïÞþûÿ‘ ^Èh¸Ê/ýÒ/òÛ¿óQÂXrÍ ÷±ïÕrÝ%‡¸|ÿ^î½ýÓøM ¾Gwv'×M¥56 ñ›MlÝ}7LL ÷ì¡ÙlâÚmÄóÌüŸŸ¿$še%¢ÊÁmšÎœyÌQP±Œð ²9‰0ÑvÎ=ßž1Dcc”ÎÑ_[ÃßVŸÕeÁ±c”ŸûöèQô®]4o¸èškp¬ûo¶ÐQÔ ËR”V4‚qܤ(Ê-×ÅÚ)¾~0q3¦(jF¦®–’ß7HYk«¦é¨n÷çm(•ó¦_ùY:6Y–òú׿Ž(ÐgÐnbŒ"][§luƒ˜¬’Ä­½µe:ã,–˜š™aþØiÆÇ'H‹Œ²*ÚÃ3Fk†ÃN5è/-³Üï>¾ ŒaØï#åIü @*ÍôÌ,ÖVÌÏ/QV98Ä7š0 éõú C›ßõ[¼ú_|;?tÿáßÿ=úo{Û¹ö†Ø1;‹ÈFTÙbþƒáu¬÷ùôwsþ/à;ÿ·×ÐÚ1YNbKN>úñù{Ññ.I8qô³;vÅ-†ÃgkC½¹¹Y²,E ‡ç$IÆC_~”©iÃäÔ²t ªu˜©e+ˆ¢+jy”N«M¶6$¯,‹ni…Î ¤$ðkÃ!~#ehz î½ÿ6F÷f¼ð¯fæÚ›(3ǨŸcÚc¤6ÇÚ4=AiÒÌQ”lûoÇóµð<¢ÙYÒõu†·~Š$é\jv¦v;í÷)NŸ"]X@XK4=ƒžž†nwXýÆAàÀ8áÔ H±z䣨ã·Bè@sÄÙ0ˆ>Fô£…"F"·‡ï™«úÏžšYå é-çØ†T·c;ÎÜ÷H öï‡'°ÇŽ1xà†e‰]_Ç=Jy×]uÎÞµ .» 1;[k5oÇÖ«ñè°™ ÐÕ h[hL8;g·’’U·ŒÏ$±è ØVÏÄ·WÃJ·‹\[£³¶Vk¬>ËÀjzü8½;ï$i4ð.¼&'ëÛ‘ßœk.]%¸ÚA±Mk@r4J±Î…!‰(-F´6$iÍPBâœÝм©°¶f° !Rà*R D­9*¤£(ì†Ë¼@kŸJkŒo°(dU3[®™“b¼UJ⨵儨ÁÖ4É0ÆC]›.Ù»¡?NŽžÁÚŠJP›sY‡ÔµÉÖòâSs;¨Ê’þp@‰d<@H|ß§Ès*k ¼© MGTEŽ´ …BJ±¥£j6 ¼j÷Èš…+„$ð}’d„ÖÌ8)ñ”¦²e FXŒé ¬Í1& n¶Áxh,FyâpäE |Ïß[­e•£6˜°eY"¤D/ÖôÖzˆ²"K‡ÄÍ&Ë¢ï *'ðýˆªrdY­1älÍö½Á`ÄwÞÉþýh·Û(¥IÓ”OoðÖ·~„׿þ[¹äÒ+‘Ê¡=L±²Üc×ΈïûþvÌM“• µD*Åy2¿°ÌUWï㳟ûº÷>\uÇ=Êä9pë'ná7õm¼é—ÿ³çÎ2ehϯe+Œ&òA¢¤"MR,)Y‘á„ Ýj¡¥ÂæÕV‹‹‹%É´ ð”‡2Šª*ކ¬û iVRäÍ–Fi¿Öj #Öû=Z¢‰”µ±ç{ß§(kYŽ~•0=3Íh˜ =Cà‡¬ö×é¯÷‰¼V ò mEˆd|ôæ›ñ[ ®å+É=ÅBoÀ¹û/àèáSœÎ2ö\z)ÿÈÇÙ5³ƒÙÖS3sØL°wv‹+ËLÌŒc¼ˆ•¥œQO156Å%/¸#\}õe,,?N¿ŸRY@H¦¦›üÜü7¤é ¹ä¢K¹êÊÓêvùûO”׿þç˜ðïùf§ÇHó„õµÓýU"Y‘ O3521Ý¡ô »öïÃCkr’þê*Ö´&Ætƒöø8© …`ïž½4£&Y^2\ï!µÇÜ®œ‰UŒ²^í.û1wΑ¦) Ü{ï½ ‡Ã¯[oÓÝ÷©ûÕ×~6®ñt®ótîëë¹'çjƒÄÙÙYvîÜÉÌÌÌsÒÌJêt0³³˜Þ:”)¤K”ó9¥5ÐëQe)ÂL«…Ÿ@´¿Jëñ9ϽmT8G Íõy²änŠå{IQø³×"3`gzò¬@&¾5ˆmžÿ36§ÛAŸ|}*Ëg™¢C0üm½Æ3UUÑï÷yøá‡yì±Çžó9ü«Ïy¶~Ë×s¼sŽ0 ™ennŽÉÉɳKU)hµjV{U!WWÑiŠm4À9ü,Ã;瘞†ñqˆãúœíøÊû A4K1:FRÌ£‹ã&ÏÚ©ÍâÈD†Àâ0°½‘yfÞcÐããÐïó ¬Ú,#]\dåÑGY[\$¼ê*ÂK.A}S¹ákýeLàc´(>wÇ8ô‚óobI˜Ý1‰çC…%¸òÊ+ùÄ-Ÿâå¯|)ÿù?ýâf›ÞúÝN‡ª*€ é*ʲ¢,SòJ°¸¼@#žfrbïú£?åž/f¼æ_œOY%¿Äà‹÷,ñú×þ'ª^rý9¼ã÷ÿ;;gCÖ3Ny„öDŒçKÖÖViµØ"ƒÁ€óÎ;Ÿü2Uo„ï7¡´¼éMoceA26±/h0X] ðCÒ$Áʈª‚*+°eA™åP¹ &µ¢ÑðÃWZ”§ðµ&ˇäi4 Ï´·!hos”4A„³ªÞXž IUåÄÍ!`~~žªÊiµÚhí!…ÆÚ P€Æ9Kõ†²~/tÛ]ŒR¤£„¼(˜›šåø#s÷Ã_&šŒ¹â¥ßƱ¼O0 ›ÞÉÑûä¥/y%ïûà‡¹îò+‰ævqË'oåU6û^Àúú*‰1ÖêR$9YZÒce¥‡`™»æXZ^`vçAÓç^s17¿óvÖViw?ø¯_Š)q;òeÞ÷á/ð¿ý.¿t‚·¼å­„žäñG¤ÙnQ¤)Ýf@#n°øà* 'N2è è´%çœs®åãlÅ`exçNffg‹ V—QRe9±ï‘F„Q›Ùé——ôû¥1ÆÃóBª¢Âø!) Óôz‹,,.ÓjøØÊ‘%ö‡´:1~àS |ಌ,¡¢ˆBk’µu´*hNM°|äq>ò×ïçü]{yÅ¿~=k ÇùÜç>Ï _>CØ ˆ²ŒÔZÊ<ëRc‚^àS”NJ<ÿ¹³ø´Ö2 x衇xç;ßÉÉ“'· žj¿9×>•s6ß,R¾žsžÎ5€'5ÚúFÜ“µ–0 ¹ú꫹ñƉãøikÂѳ÷â‰qHVå ÙâqÒ•—瘩I‚½{ÑB›çt1&H$‚ 3ÉçT!"õ,±ëÑ) —¿@qòc(¡'.E´÷€:ƒ`fåp£ úÂé í6Øöφ/«Šte•di‰ª(Pg S\|Eÿµªžu†Îvþñó|à)çý3‘ßÊyÿðøgú_ïñeY211Á5×\Ã7ÞH«ÕúGæ™gE´ÛÈ Ü¹Ót,ËàúëQaˆhµj)mPõk€Órqš~¿Oè†hìÙ™Åì†ì¢Û̲۹öŒ½6Zw:”€|U[Uäëë¬ßy'kGŽ00†ö_x!¦óÍ­·¯kÓ ´Ö UZ¤Q[‹•ډѢ¤Ù0UÚlϨª ƒ&ßCH0ºU˲Diï«’ƒÛ!  jµVh­qÖ"·µ6’Bo'¥ÜSs䆤õ=–E ZamÍ•Ô/çey‰­%ÎAe-eU¾ÆÐŒ û5K°,KN:E3îÐŽ;µ—uà ò¼Àº_ò<«µ³Z¶ÀM¿?À9Kž¹ÃójÕó|ÂÐ,i–€p(åQ䎲¬°R ”@ CFH$YVb-&ÇØ¬È±EAY8kqž#ÍÒ-Ó/ã(¥¨ª ?Ȇ)ÎÊÚ˜oƒ½D>£4!Òëã”UÅz¯‡R†v+B*IU¥5^9|Ïçêk®ÃU–ª*I’”îäFIÆ[~í\vùEÜwï}´[MŽ?Åúz¥=>ô?ã½}ßù7âpXQà(‰›P”««ËÌÌÎrüø vÍíba>çĉcÄ‘·µ°´Ð'A:¢ ‰çKL4Æ?ôþÝÏüž‚Ç;Nš¯×ÌNcÈË:ÝtÓEüίÿ»vkæO|‰©Î,¬ °¶ÄÚŠd4`çôY:ÄiÍÄø8F¬œ\ ³û\ÞöŽßãc»Ê{þäLÌîæèÂ#DqD•fx²~ÇÒш$+•#ð}rkÌÓ,¯õoµGÔhP¦)½~Fà†µõU"?£w¶ŒÉ‚0¤7Éóœ,+hÄ1RÖRi²æ?ާ|f¦')K‹idU/aéÄ2‘עĜ>yŠû⦅¹ì¯õ‰ËŠ,MȳœåG³û…—ãÅg$e–‘' UQ±xÊ0 ðýzÌFÉE*ñ¼œ•å5ÚícBÒ4åÁïåâdrr’F)ÈrGš ÍFŒ‡Æ¦‚*¢+XYïèâUŠ…Ûnç3·~šƒûÏç7¼d¸ÎÄ¥W³Wøœ>qŒ=ã]܆$ŠMrŠJcüÂ6ÆÄ ûëøF™çÎtÓ<¢Ýn³oß¾ZKëë`aŽF#¬µA€çy_ó\!UU‘$ išnS„aˆÜø.¿Öyiš’¦)žçÁ“?Y–‘$ Î9´Ö4RËosãmóžœs[÷¤”zÂ{ʲŒ4M·¤fžJÑçû>SSSø¾ÿ¤`ïÙ^LˆF„nD`Û¸5Å£Šz~œÀLL"ΦÜÓ…ÒEh‘!D DÏ!pU€ Qíóñ«’ª‘­ÜÇàä-„• PÐh>3–u%i¹BY­Ðˆ'PA÷¬m¡|Ž¡fTi­+O»˜GÈ3ÿ\…W–dkë$KËøí6r[³ñŒÅ¦äìì,çŸþSÊûÖZF£yžàûþSÊyžoHÒùOÉ3MS’$Ù2ÃcÌæä¢(¶òx£ÑxÒ[–%Ã᪪¶L¼¾£ts’$ÉÙ¢¾§'ZóXki6›Œoªge‡ŠÖ 5ú˜íܹý‘<•IM *-ÈEަª5ÌÏFP5MÑÔf¢]°-»s&‡CRc ÏqËË5°úŒy-m9ø‚²*±•CJA5IÓŒÑ Ãê’(Ѝ¬c”%„˜¬ÌèƺM´´µ’hmÐJ iP*M’&uP*’ °1Š4±deVóQL'n“e ÎJ´V”eýñ„aˆçk\š‘ä#†ý5LP(ƒ¨Àx!ÂJ„4[-zëK4;Ml^2Jsʪ"ÉGàÎ8§æO35=“%žxïû?ƾ°ÊwÏ$ozÓïpèâƒ\{ÍuŒí`}}Ä;Þþg\ý>eyy(LÉÓ”sÏv³EUæìÝ=Gž˜™™å²+&øôgîäÿÕ÷aóuм¢(,•€Âà…SÄ㓼í·ÞÁ¿ý¿~‡ƒu¹êò+¹ë wƒ ˜š÷¹öÚ«ù©Ÿü1Æ»S³>GßÍd×§ÈÖi7C–×–1¾ßЬö–iaAÜàÈãÐ=ÿ</óÖß¼…W¼t–W¼êUŒ=:íýáž”ÒÑn6Ð…"°ŽuÏ Œ&OT ]qz~™Àô˜™˜/eÑ¡z΢„fbb’Ó§Y]]ezz†²pX[2Ž(Š’©FŒ­*ÃBÚ-s8!ÃáãŒç¡”¡ÈkPi4J©Ê’V£AYU”yA·ÕÆø>«ý>½AH tf>ò‡¿ü%¢ñ6LLò¾O|‚ý_ÀÊꨱÆp”ÒïÑÏ­·ÞƃÞÏO¾áG¹ðü]|ò}ïá/ßÝç5?ôƒ,,ÇoG5h-¡·ñý˜,Ë‘RÒð¦ tÈ—Ü@Àmœ<¾Dè“—k„qAYŒÀJ~ã7“,­˜œéטo1ôRø>R+dQ¢R‡ÎÉøS;˜ÓÓ“-Ê|ÄêâÒÁÒüyV/„W–8>Ÿš˜±Nƒ±‰ Fʲ€N·ËéùŒ’>¥«" ,CÒã§¹õÓw°ÿàI–b”arlœ]看²%Yfé W1a@’g¸µ ?ˆIÒ‚tTЊbÏSâ•9ŸþÐß ûÜxýõ´¯¸”´L ã&hÉô…¹óS·Ð›ŸçÐ5WLN¢O®c*1JJó+Œ’A‡4Ï£çFr‘RÒl6¹à‚ xÝë^·U0=¥Äm-ëëëEA³Ù$Š¢'-|z½ý~!­V‹V«õ„Ð&û0l/ÆOxü&w}}½ÞÈò}ÆÆÆ0_ä³ÖÒëõèõz8çh6›[Ì’'ú-£Ñˆ~¿1†v»ý”RcÌÓvP>; ‹ÑÙƒ×rxÖÕÆnR"žì!¡jè6²B¹Êá=—~MÔØA„ôY¿…jéN”šFï<ˆPí3¢¹j)±D¦—Z¡¼1ÛÀê36ô¾œœ@NN‚>ž«ÀÙ’bÔ£¬àU»k–ζ$À™ÛŒ1LMMñ²—½Œ+®¸â)WU«««$@@ÇOšÿœs$IB¯×£ÑhÐl6Ÿd_ÀÑï÷éõzTUEE´ÛíZ íŸ`Ên2aÓ4ÝÊãcccOhŒ¶IzY]]­¥Ã”¢ÛíÖfÈ_ã}‡¬¯¯“ç9aÒn·ë®·'¤77®Æs³Ce;žR(©ñt„vQ$µÌÎY°:WaGkØþ2±Cê.b{óŒ«#­QeIÔïCž?ãŒU[UŒVVè?þ8îÁiïÝKç[¿oÏžm®2 ‹´•*F4›Mzë«c(Šœápˆ’"ËAø„Ú'&¤ù)q3DººýÆYA3 È‹aÉò´n£Wв¬Ö0¬Y`eY1>>EiQ8‡­*Š¢Ä˜ºPTF“C²¼À÷5®ÊYZ^bbbš*¯òŒªÀiÔö,AÐBù`y>"Ža…ùG0R <£Ü·ºuËs”«(Êša[È }W§ü˜ÞzÏ—a@™Vh£ÀA’¤H)‰Ú!E^±Ú[¥ÓCVŠ´È¢ž³diŠFÐË×I+M,&ðà W–xÍ 2 (,AeH=ÀA‘åxÊ#l†”e‰‘µÖm½n5 ÅhTÐí¤Ãeâ $n¤kÃ!º5N™‚1!e™ã9K‘ q¦¢×_A / à$R’ÒòÁ[>É/¾‘îØkÁÛßöA.¸hŠïøÎWðž÷}™{ZŒF%ó'szð8ÇŽœæoÿ=~äõ?€"cïÜ Ïç/o~'ÃAJDIV匵|ÊrÄÅ—_Æ]÷á;¾§$R•,1qƒ~ÏÒéî"Í ŸÿÂQÞö¶_æî»¾H» ¿ñ–ÿÀ®¹úòïæÞq+ KG9úØ<¿øŸ_Ë¥—Œ‘Ž–)³Ó“äiJš®x š¾OJ‚Ó'|y…&„“-Â&صeþìO?Âc‡—xÿûÞF™#M3’µ„öx‡ÒU zªµ%b©PÚGÁZ>ÀU9“mNRâN‹õ Œ¤bµH°¡¤W¥«"jÉ„ÇÎ×FfNñøÑãaŒ! Cš£,#ºã zkh%ŒÖ´[ I G2ê!…Á÷<ò¬Ä:ÇáÇè¶Û´Lˆ欭öYë^ÎDZrþÜNnùÿ‰§Kví?Ò›æ]úf^ý]wÝ}7^ôxÍ~ó<’á*;w´¹ôâï"Š {§ÏåÇìÿæWßò+¼ÿ=å;ÿå«Yê­uÇIóœÅ¥qCÓíN’g9Ifc†®½ˆÐ‡§ŽsôÄctÆké‰ ‰„4»Mè¯szù1fƒ˜")Y\^BÐè´ñ'› ¢ª ?}šý7^BEÉèä"³;=º{w†¥çщ"D Káa*Õgyiž±Æš]à„0îÖßW:$ +óh_"´ K‡?ÆcÇ3.¹©ÁjºÀ`m…}S»Qk): ÐFÑ‹±†£5òE%&š¦;ããËDÍýGïçÓ·Þ‚ËKö\zˆÎ5—ƒPØLb+‹LLpÞ9{xô#·b÷\€lï hvHMHæ"Í Ë‚x|Š¥ÕU–îs¨ËBJI£Ñ`÷îÝÿ¨Ýí‰ k-Y–m±Jž ŒÜ<þ«Ù.›:£OÄúØ4º Ÿƒ,;¯‰èìG’bÝI7ÿ×´:¯Â ^€P]økœ:ÀŠ +JzT}6¾M)Ϫ^¡^Kt5B‹ínÔ3ÆÆÇÇi·ÛOš÷7óe]~…|ãyÞ×Ì—›y¯,kù3cÌV¢ã7sòæÚÂ÷ý­.÷Urt›çH)·r9°•óŸèUU‘¦)Õ†ïGuä?qo›f¾Y–QUÕÖºBký„넯tøÉ'z·ã¹ž×¦Õ܉Êrœ€h‚öY¬æŒÜ…øÏsâdÉ1øý?ø¾å[.¤Ê5—_q?ý³ÿüÛŸx!/yù,žø2qì¡„@¢ñME…à\‰–B+àdP™—LLìå¯þì½ü·_þK~ü ¯fïÞ`Wj9á“$)Ê7Tª^Pi¥At`DZ“ Zí6"p”«Bßc”ôYí Ip„~Œï y2¢’–(lú>§Nž B.>t1eUÐïõ‘D8O1ì'H!°Ö××é÷{H Ýn—Ñh„Vc$y^’g9ªT-q€6š TxÒ¡«‚én—±aAïðã”eÁy—]ÈŽó0^ñŠWsáSä–±±çìÝËÊò×Â7’o¸–ÇN ÃˆÈW|÷÷~?ñÞ¿`ç¾=Lî˜Ä â¸Aà7ÈËŠµõEQ઒²p¼ø.¿b'ŸúûÜ~ûgùá×?‡¿ŸFCcŒæ¡ï§Ý)܈Þz޲Š$âWÏ×”¶ Ýh-ÏÓ_]Ãiò=FɵÕÓŒïß[Ëj(Ã0͘=ÿ'î¼?ÔŒ·hèE‰,‘J"•#ËSvÍÍQØŠ¬PØÊãØñ/’ô ^~͘rD{,DD™4Mˆ½_ù8%PÝI–=z«CÚb/hÌͲzßÜýÙÛ0BrÅK_F¸ï£Åu\ÔdTIòõ>³­1ÒaÎô¥—bN­’Ï/¢÷ìÇ›jÒ¯j™‰8 ˆƒ‘…n+|Nf›m_oÄqü¬Ÿç9§NbmmÑh´aºøÄÏV)Åää$;wî|RÙ€íØŽ'¦üNu(z‹ˆª JäsÑcI*ˆÆ‘úB|1$=þ1+÷ W:Fc#TëŒØÏE‹°³>ª F#ÜpX/Ïtø>²Ù@ÇÊ—ÛsóY y_—©Ò×›óŸN4¯ÕlÖÕÕU¨ªŠ ˜››c||üë~§Z­§>ç=oºL¶ãcšµ“2}Œ|tmbÔY¬:¨J\¶NU­P¨!6¯³=hg0”1Äccäaˆ(Ë:W?cC^oåËËØ‡F9‚·gúÿgïÍÃ,½êzßÏZë÷X»æ®ê!t:Ý餚C”Iàpe™Q‡Ã¹***ÊãìQyÎ9/¨÷ˆG¯(P/ƒ Ê C'!CÏcu{|çµÖýã­"Aƒ­ïóôÓ»»jWíý¾ï~×ú}ßß÷»kWeï±i¿S«JI¬„*¬ˆð(‹”'¥$Ž3Œ–hSÇ#‚ÐCJ‡]B%½Jd" B ¤H©*Õ¢\©Èȳœ  Ã<Ï)A:.Âqpcô†WkT BVA>ÂລÒx„rD•"¿>R/¥"Ë\· yÒÆ`lç*ŠÌ’Ñì,RIŠ,ƒ"_ïöU¤b8®ƒëX#7º¡JJZ­yž¯¥ØŠN^ïd†a¸%„ÀšêÆiB­Þ$põ)T©ßžGžiʢĎF @–áù2 pA!+B¹RFY„°¸®¢,³uÿÁ€,«‚²zÝV ¼ZHgb!LYâ…5´.ÉóÏSÔ\‡,ͱÖA R „À Io¹ËÄ䬅¿xßg¹þÙ¯ä=ïù¯ìÛïð£oý¾xÇCèÒÒ매ù³ç!-ÏÒhC¯w’$†¿½áN~úmÿ‘f«ÅÒ¹scŸCÚŒ-s-î½÷ üཕ¥…“,,ôÙµ}ýÁ ÿñÏqÃÇoäÓ7ÝɃ¦X /}ñeüâ;~‚+®ÚÍéã÷8ÿù­/æÚgÌò¤'] _ø\zk§QÒ‚”¥AÛky–#…‰Õ’Üd˜bİÔÔU“«¯~>ÿá?Ãì–ÿ×O}Æ&”E‰Öà8®ëà>~‘ôzÄqBÓøa ©ª´ø-lc€ ‡H)©×ëXa2ßB£Þ¦f‚î`¥¥&''¸pçvŠB“$C”(%8sæ$yž266ŽïV›Så(RVdÕøø8i𓥯<ßÇqcí:N(³‚L ¼FÀœq쑇9öÅûqFÎ%Zº`pä2Ñᚃ7<‰ÃÀcÐëñÈ#0™šêP%cí6Ãñ3gØÿ’ï¡gRþü}Æ›àÍÄÉ€Ùù9¼Z ÏQ Ë+KD¡Â”Š,éñº7½ŽOÜúë|èCÅ÷}ÿË𽕥ŠZˆÄ°º²ÈÚà<ÞÄ Â(f¦&©û5r Iš‚¤«]„ãÐë€4ê &&&iwaÄZ·„ˆ8a0ø—Îo¥»à×B„®R¸(GŒ|²Ô09»•4´[5î¾û/˜€ï¹æƒ¼ìÔ($ŒD¦²"hÖÛôW{Ä™¯†ëÄLû_¤Üþ‘8ü¥ûxÊ“páW€çcSAí×ÆÒ j`J†§–hmdìÀ•,Ü~?Ù#G›ÝF $ñ¨¶–ÒP2ÂÒÙT&üË÷–ÕÕU>ü‘óÙÏ~–‡z˜8ŽsäðQJ½^ç/x¯yÍkضmÛ?‹,ÞÄ&¾LøÕж`MÄ(áÐåw¬3™@à»ctÆŸBÏ nD÷ä͔Ø֮)¼VóÛòš6ñ-8®RbÓsöÖXlY|{_Tȉ ì–­$™‡:=¢>aP>›ªÕM|ÃHÓ”x€[n¹…~ô£ÄqÌÖ­[yãßÈsžóœoÈ¿u›xü`h2rѧNJí ±‘6,#׎Ñ( jÎŽUüÈ&¾]¬žƒít°RÂÚÚã^eŒa´¼LïÐ!ŠÛnÃ=}šÎ«_MpÅ›žæÿðTá7•v­V[W­–8އֆ,[O›Ï2\·Kl·›øÃ‘#G \qÅ(U%”[+«Q£«|)7Æ'Yxtü¢". <¥J¬üYŒ© Ù¢(Hç;8Ž!ªÐ'S©Qƒ @ ¹ÆT`ò„E›b½HÖcé÷ûŒwÆð”";~‚ Š˜™ÛY†‘ÆXò¢@Ùêžg9B8c#ÚhGâyÞ:á[ub•7N³Ñ^Íà+Æ3jµEYºéyY–”º îz Ã$Áq"| Œbjz!»¦(Q') âQ‚²%®§0¦ (s@ãº>ƒaå\ס×_#ð#š­ Cž§¹A)Íødƒ^ZÐ_]"ÍrZ„ êA“²¨ü8¥,‘Ne¿ ”ƒ².×>óY|ð¯?Å ^ôY>yógùñ{>…NÆåó¦ IDATÊ%Iîºë~^üâ×25Ýæò'¿_ù•ç°eêI<óÚ—ðÒ—î£99Épe7¨ˆî8Y%/2žýìgðî?z?<ð0Ǽüe?ÄEÛwrêôaŽ?Oog>c7¯xųø®ç<‡;çY={„ñfÕµs80Ãþ+ŸGclœáhîê2±CQHé€a±h„8ÂE9ŽX· ë¦Dc;¸ùƒÍêrÉ/þæõl½ `áô)õFEò›’ÐɲåºÕ5(ªk5¨7qŸîÒ[´f” ©E5[B\ÇÁJC;l“Xƒ+]¼Ò,f„±š±±c6 çÎÏwк4BÂÐÔUhއ"|¬­ÆŒ¢(Âh1šZ­…ï$ëÁf:/H CO%_Ñ–5®¸ä î}à$·}ñ‹Ì]v1w=Ì4 ) fƒn·ËþýWÇCn½õV¶ïØJžgÔëMŽ9Îøx›™¹)Â(äðÝ·qñÅò¾ˆ>úQ^ÿ†×’V–V‘a@£Õ¢U¤«P”,.Ÿâºë°÷¢qî¾ë gÏÓn7pÛÃþ ¾+¨5PuV‡]¶ÎnE8&/¨µäéò‚µå%:““„cmân%%QQ$)‚¨VÃõBN~é¥Ö z]¦æf<LÕdHËÖ”¸¾C³9ÅÊb‚¶Y[[åÓ7ÝÆk_{ͱ½Ò¥´iiÈuJÍkàx>õ‹‹+´f§©ÉV/PvOrÏ=‡8sæ,—ìÙÖ;Ñ  ×u&ɬäüò2ÓcMbrwçNÔÔTT·‰ŠX-Ë|½X¬¨BTéÅATã‘(ʲÀZðw=Äâu&'lj¢6U0VIžg8NÂã¸.†JÕ©\I }\×Åq”#Ö_[J`tAQäh­ÑÖ 5hº0•l‘ã8QkÑxžC™x$+ Ž;ÆŽ=û ð”Ú)žH!È‹?¨Šgc :+7¼oÂ0Ęê1B°jU¨ Ø«€-áH´1>;ˆŠñ/Ê‚¼,2ÄU®tÇó°F‚ë¡_T¿K‚ã*¤-p=åJêõR в:BB’–L´[È(Âꂵî*yšxƒ8#Š¥(Ê Ïuñ”‡Ð)Æ”X BYŒ…Òú žþŒkø³?ÿ¿ðŽßFJÉ‹_ú|Œ±ìÜy­Žä–[f8rô,Û.ØÏ—?™_ø¹ßåè±sìÞý2 ƒ%ÍF(Žï!…ÆóΞáÔ‰3(<|Ž#Ÿ#×`€ƒÛ¼áõ/ã5¯}m¥ì[["ëŸG ÁĬ$¬.-"¤ÄsK>;/ØÉÂÙEêõ&ZGá¸×SèRcdŠé‚T‰Qº÷ïúÝ?A¹ð¢>‹lt×S”¥EH…!KsFYŒÕ°(|?×'l·j5„±Ph”¸A@:ì3Hb¢špj ÑV!TXï9Ôë!‹çÏ2¬Qo4Ñe‰5%­VƒñN›,K †µ:YV’f#´.q¹‘ŽxžOÕp—$Ké÷Úà>C“fM+ÉŽ­08~šëžù,毽’óù€û¿tŒùÉ<òÈ#ìß9Žã°´,xå«^I= ùÀþ’Åóç)‹’oüó[·¸/~Þwsûgo¥»²ÊS®z2zÿ_ñ½¯ü^æg·ðБGÃ'pë4ˆã‚(rÐÚáo~ ?ÿsÿ“ÿ÷Oÿ”·¿ãçˆ{Gh&¦ÆX<œ¹Ù” »#Æ[ÑD‡î°‡4š@*NÁs«BÎ =$I2âµ.F*jÂe|b‚f£A¯ßc,M6DÊÊ¢CSêQuϰ0hÂ`‚öÔ.>øßAÉoøÁWë$ÄzP#+Kj€a™Ò˜h1å9„A ×8äk>ù¹áx.žúævíCIR ‰1¤uèGµˆ-cdILé(¢Î4¶èq¶È¹ð 0‡NpòÞû˜ðaáÌævÌcU¹¾U‰ÑzsÓòx C.¹ä¦¦¦(Н­¸*Ë’……Μ9CÇLLL0==M«ÕzÌÀªMlâ›,™($¾Ã‰ÕŠ\U„áR¹ óÓ¤Ë÷Ó_¼¡%Êmà„ãˆo©ÿšÅØ!Vw …‹P“H67ü'‰i‹+@t:È©©'N˜Ü£Eã&¶‰o’X‡?~œ{C‡Q¯×Óu›ø×¿µ9DÑ6”  ¾D–-âºM\wìÛB®ZkÐ:!µ1±kµ1üÆÖMÍ'¢Z­*¼ª×ƒFþ‰;k ¶(0i q\=/ŽQ 㘅£GÑwÞIûá‡q›Mœ½{af¦ú]›ö;_&VÇ!MSò…[ÈòÏ•8<Ïßx­–×j5²,[ÿ™¬’Ø`ÊàÜ’çÂJ\×#îp¼ÏH)p·ú¾,%/sêqŠÔ'1^è2Ñe¬a8zc4YQ­W.fãxÖëuF£I’P¯×Æ õÖƒ8¦Œ»Ôñ%†}M»9O»üï|˜_ÿ?Ása'”ÃÆZ²,ÅÙ0e”¬±û²gbM¥ü}ÕËŸÏŸüÙ ŒOD\ýÕ<ïùÏàeßû\'cÔ?Ú2=ݤ»ºÌäô$'~ˆé™ ¡¥×"­"ôì€éÉ9Œ6 RUD¦%Çj˜BP ƒ‘S„Ì]r ÿÏ{~‘Sç3žýÌ6V0)DáKËQZ­É`ãºa‘–š)4Òk5VOŸÅ¤)A£I¯ßcØë1ÙjQ”%Y^PRùûJ!ÐÆVŠÓ0ÀšJ}jFÐ¥fö°Ön¤Ž—…Åq<<_aLÕ(¨Õj ’$¡(– üˆ<ÏI‹ )*U^¢3Œ) 0tåìÑ£\ý¼ëè+I7͹úàAìHpà Ø’+÷_ÎÞ½{pŹsgyË[Þ‡?üaNœ8ÁôÔ;w]H{lŒµxÈÄô ÷Ý}Ͻþ¹|ò“7ñÁ¿ü /Í«¸òÉOáÄÑÃLÍn£7\@‹!£:¼á ¯äÝïþß¼ç>΋^ð<öìÝAàŽ1Xë26ÖFS’é’z§M­ÇÒâ2 ˆ¢Yka²·Q‡zƒºòÐ+}¤rèŒOÒU.Y¡b¦'&ôû„G)âaŸóK ÈPPk”ø¡]oF„Ôâ‘ÃÙcGùÔ§?ÉþØ+ÙvÁ<ƒd…Èë û L‡-UP‹BVG#V‡‹„Òõ§?wÜù)¦wΰíÂÔ:S Ó‚Ô8dlo@Ôo¯‡Ži¸Ø\¯ö˜›¿€ÅÁ*¢5ÆÌEÛž]Â.,Ñï.±EnAX.c,1IRl®ZÿâMª víÚµ”ñ¿nŒaiii#Øjrr’Ë/¿œ]»vm&ðnâqƒDÒ² ¤•¸Ä@ |g«>„PøÞS3ßÅP׈‡Ÿepî3X[Ò˜{A{×·´àKâ%Òä‘3EXÛNÀ¦Šæq:¾¥¦<·@qê4&Nžx*•GCµ6±‰oGåæ›o&Žc.¹ä š4úzA“›ØÄ¿òÍ ×mP«M¦½Þ=DÑNêõ‹þÕ_IQtFë”zk/?½ù„Y¤í—‰Õ±1( D¿_¬ÿDí¢³ŒáÓÞy'â3ŸÁ.-1ˆ™)ñÌÚªÙ¤öô§Sö³q:'Tˆå‚X-Ë*¬Êu%ÆÖÖÖhµÆÈÒÏóèõz”¥& *¥¦1–4M¨Õ"”RH©ÐÚ¢ÖÇü­ë„…¡4)EQ u‰Ö•Ãó\”rȲŒZ­F’$QHš¦H×ÁQ‚j„_¢Ö£EQ ” VÁ’T“e1ÆT ÕG““µ®Ô¡y‘c±Q©p[ÍR Õè¾ã9 BÂZ~¯Ë™Ó§Ù·k'6K)t^y“ƒã8 ‡<ßE)µ¡N­Ò# ¾ç¡Ë*ͲÕláG!ñ(]·ˆÐV¬¿‡­-èhµZZ3¥¸BCQ0ÞépöìY0†¼0„­:ƒAJ«Ñ@Ê*´êÑj!I’ „À÷ý*EZ* ­ŽGVj:í&‹‹ 4'Çq xޤÈr<8Šnw IA³UC뜬ˆ‘V ‹œ¨6ÉZï<3³ãLM޳Úð=/úüÄúIίŒxëxýë_ÁûÞÿ¼þµ?B–ºÜyÇ!>ÿ¹£ìݳ…=—Ö¸ëÞÛy-ßMœ¤„õ:Úd¸ŽC( ·x†«¯~·Üò ÞóÇছ÷ñK¿ò¼êû^ t ÏpòÄQZ..‹ç×8v‘[oº‰K/ÛÇòRv£ÁÌÔ4I¢ C׉HSƒç)åPšmRŒ)0²ÍjH½¥q<Á erübnùÛ[øàß|Œw¼óµLÅÜò‰xùË_ÂÂÚ€vg¡mu.‚Çyz»ÅŽmóŒ–WˆÚ2Q ‘Q„k!K|ß R <Ïe8@!hø®’$EåOüh2é£ãH®ë~Åß½^—0hb­¨|V•Dë‚Á`@žçDQf£Íòrk-ív/ó­-“ » tÌXàKÅàÌ)žö´§âo™¥01“[æ9úÈq®¾t?—_ñ$Þõ®?àû’£ÑˆW¿úû¨Õ땺{ÇöîÝËÌì,þI–2ò|ö<érj~È Nxç¯ÿ&ùйñ#7ð¢×¼š™¹í¤k}J«éŒu" ­16¶•w¿ûxù÷¾ßþí?ä/ÿæO9ýÐLL‘e«HG"ý¡-ãI†Ã!Ö® K¤£—î¿bÝòà eE,ÇYJ4ÓÄ7•5R±{÷nÒ0Æ”9ö$í‰YŽŸ:LQdà/¤ÐŠQšÓjOò³o+wñ¿ðŽ!ÍRJ¡¢µŽ @bÑ ºk„ž"ð]œáˆ³GsË à)×=ƒOÛ‘ŠAVIé‡8Öb´Æ‘¥SD‘cM‰ë7ZM&^[&·‘ê„ÙË/åþ£7Ÿ[âŠý—"j!&ΰVÐ]ëcŒÞ\µŸŽ"cccI¼EÁÙ³g9·pŽápÈØØ—^z);vìø*€ååeèv»ë¡v}óÕé¿ÿøß­V‹ /¼z½¾©‚ý÷H¬ —0˜CÓ'Ë—QÒÁQ³ñ½QÂ¥ìDuRd<"^¾‡xé.¤ ”‡Í"Ô㯴±@^ I’5Üæ¨³y‘=ž0Ýëa†CDà£Ú­'‘)„Àj Ðkk•Ù&6ñODçÏŸçî»ïæ`jjŠ}ûöqèСǜdyyž³¸¸Èòò2½^ï+¾ÿë­ýÖZ<ÏcëÖ­ÌÍÍU‚‹ÍfÀ&¾‘ý‚t ‚i„0Åqòü ç8wöû/½„2M)ËÇ„•¥­‡Ã rØqœ ÅíÊòZk’4űùåû….Ñy±~C¬:Ÿ•õlEŠjY#nµQ£ÁºQ+¾à¸Þ:¡m°Ö •¢È+Åo„ë¡*%Æ@àE¢ ¡ïÓn·!¨B—L–!”çºH×Gëœ"¯ÎŸR¥É1‚0”% 4ÝÕ j5—‰‰€Åå.wãG9úHÊ•Ovp•eÿ•ûxÉ÷\Äûß? <ûºËùÕ_û)Œ8Ïoþò/d%_Rú½33³H‘ãy×\s5ï}ïïP&Ë<ýû¸ù¦¿áE/ÚOž/“g«4k [ÆH·Ž-K&Æ;¸žÇØxå#‹k=\_ ñ0VP9ÖPà{.IW×E13?Î`x ×ñð\—S§Wyýü<í–Û~üûYzøVn¹á¯Ñ¹O§Ýda­ÏÖ­;è.¯ •àWå]|ÿë_ÁDgm,V)h¶Ÿ$ë­6LŽG³VÇ…E¹ é:„´ hmð=—Pú,//S”%E–mŒ%iÊX»M†H*å©1 uŽÖ%P…ËÕj5¬©‚ÍšÍ&J¹­©G‘7ƒð Š×è(‡Ó÷ÜÏ™¥s<õÀ•˜fD¾6 ë&´êmŒÎ9øä«yóW˜ššâܹs~ø!vリzÑi·)Ë’Ñ`@§=Žø˜R'íÉŠ4£×qñÞ}œýi>ò±¿çÿøWÙ»÷RΜ=Ž˃.(‹ñ%5¿FººLM;(+8tó-=ò0￘Ïy„u¤°6 Ís\a±Xe‰|…2Eã 0ºÀ *7‡²—SD57ÃÎë®á¡þŽ«®¿í{XãsæÜ §O ¹ì²½›«Öã¶I•_÷kçÎqÿý÷ÓôÙ¶m;wîdvvõº³GåŸüwßu7KKK_á'þ•{—/Cø¾Ï¥—^ÊßøF.¸à‚Ïÿ&þA¹ˆæ6ŠäÃÑq<-i4¦¾ã‰ÕGá7v æB:ŒÎßÉèü˜rHkÇ÷àF_ý>-c«{ú7ôF"Å?ø]…j67üß*hp]Ôä$Îô4≠Z›ç”‹‹”§Oc×'Í6±‰¯‡••î½÷^î¾ûnF£O{ÚÓ¸âŠ+8}ú4§OŸ^¯­¾6’$á‹_ü"ŸûÜç8tèÝnw½.”_µŽk­7Ö}c “““¼ô¥/å/x­Vk“XÝÄ7ºa@ˆ&žͦ!IV  Ñ°øþ rÃfçñ\û,Xƒe„Ö‹ ÷`Œ$.& ·¯“ª›kíaˆm·æ9¶×£™eø_gMgqsÿýØ{îÁ ‡È¿v–(è;‡Ôšz³‰71˜žÆ™Ýœy,b,J)„•g©Ö$IŸ ˆÀBYj†Ã!I’?ð9¿°TyG G!ð¼Ï )uN6Hp\— ð}¥ÔºÝ@¾Ql !*•êz¸•P¥*…Ÿ€°(%76%*Åh¥dnPæ)aXG‡ÊC@QU¨“1)-B¬?_[””¨n(KŒ”Äý§ÏœfßeûX[]¥íûøÂC–eDQ„ïùùeeaEtU#ùIÍfsã™4Á÷BÇÝ(¢]4˲¤Ì2×¥4%ÆÑ•¬ë@©)‹‚8ŽÁ<ÏE¨Ê˳Hë ·’²Ô8Ê#¥ëÞ³ ‹á¸YEj{ž :ÃÚ’tãÔÔz`X#*²Ñq°ÊÇH>R ¤òHJÍÄT‡ÃGäØÑsèÂðû¿ÿ—4BøÅwü:EF-^ø¼ëøÔÇ1öížà÷þÛ/qÉe»8|ø3,¯$ 1ž'ñ½ˆfc’4ÕH<<Çgÿþ'>t'ÿÇËŸÃϽý·öÀfD¡‹çxØB“ç]j¦§g˜Ý:•–,NÁ*FqNžåx^u½a±ÂP9Êq…Ö†¸HÉÒ„vk’Õ•.SÛ/ãÓŸ¾«züè[ˆFS°l2DR’Æi1`jf–aˆãø!3Fëv ‹ý>£aL«253ÃÙ¥˜¼@¸R‚E`Œ¦Ls¬S)s!©øk‹pJ:$žëb œ§²Íè÷8yò^¸“(ŠH’„ãÇŽã>—ìÙÃ0ÉX®’Ç„í[w Ê’ $ÛvìäüÂô{ÿ7ozó›Ù’úXñ¶Ïù³§Ø2¿“^o×½þå|ô÷ò#?þ{\pñ.¼’"îúmRY`%¤ƒ„´ÌñÖJúç—©y>áôÝ"㠋ʲD‰ëù(<Ò<ÇoÖÈ•dáì9¶^¶›<×8²`°zŽF£‰$¤,'ääÉ“üÔÛ~ÿO¯ã¹ßý–ÏR÷ëŽÏò`f»ÉòêQ½ÆØÜ6z÷=Àíû(Æ–xúS™ÝµÁ`•d˜á…u„ã"­&Ë%ðüê溤,-74HOá ßò2£°Šao…hçQ§ÅÚ‘ŒíºÂ&žS°´31»{sÕúW€±†3§Ïpß}÷¡”b~~žíÛ·366öUEP–g¬­®qÿ÷säðʲ¤Ùl255µ¡nBÐívYYY!MS‚ `Ë–-lݺkí&¡úïB‚Qæ.i>Ùø7U¤H'"»‹Á”1ÉùÛž9‡ê\HÍQøþäW¼ßa1d9]¢0åc² .MÒñ;tüuUj™#³U|£±á®m^_÷åºNbV‰±%¶(xB˜šZª=}’ »]l¹©XÝÄ×¹\¬ÅZËñãǹùæ›9zô(;vìà’K.aÇŽS_ïùZkF£'Ožä _ø DQÄÄÄ­VkƒH-Ë’ÅÅÅ ë®(ŠØ·oišVµ÷æÚ¿‰oêì!e› h]R–§I’1v ˜EÉ1àqœ~Ò%$Ëäf‘Ô,¡MŽçN†[pœÆæ)y¢"Š0í6eãôû˜¯£À·Z“?Nrÿý”Ã!bËÄÁƒ¸»vEúÜ9džS«×QÍf޵‰Ç&V‹"Ç÷}Â0 ÏJŠ¢Ä÷}|¯òùrݪ(TéÛIšº,ÉòÏs×™Q5šª|$uA’Ø ;!anŒÓ{žG’$ž®e™á•ežHið<c+u‰cÄ:¹êúíV‡,+¡Õ#Ïs¬…8âûžïUP–)-®ëP%cÒóH²„zˆ§\u:!•ŠBWIìúñ)å†r(­Hè¢Ì«×V–¸®‡ãX £Ñº$Žc\ßÃu\”ãT*JØ È¬[u.4äYŽƒE¬/ÂëŒ<Ë+ß[åaLU|û^ˆëúdYŠ4 å¸T¶“k¼0À`°hL‘#¤ +Rlæ“[,-‰ÊóNˆÁ‚•Y;)BÂÀâJ¾ÿÔ¹aÿ“æ8zä ï|ç+8ð´g1X\dyag<õ>ü‘«ùðßü-íNÆÖmËK£¤&‰% KËì½ä†ýU‚°Iž¦[EQ»ÉëÞð]Üqç§xÝÞÌùõ_ãÈƒÇØ³g”%£Q Và»5¢0 Í3Êl€U×õ(rëZ\%ñýŠDϳ¤RIæ9´Cžg¨°D„iê05·Ÿ¾ðÿù'‰7ÿðËxõë^J‘÷¸`×eÜå|šþ‰³L=ùjúiN½Ö`åÜ"3³[˜ßÚá¡Âó¦¦gqK¥F(Ižfè^†H©@ZjaÂd$²Ä•®u¡4U8!­Ö®[…»•…¦Q¯#¥ƒµ‚<«ŽA½9†_özª¼v-ƒÁ€á`„’.Aà"DeÉшêäJ°Ô_cJJìrP*¶\µ1Qg9MhÙ:nIç*¤”ôzk8ŽÇÕW_½Ñè÷û„aùùí£)’×J:íqò¢ Ô–/>p?;·^€ãäZóòW½†ðƒ~è—=åŒcY[;ÃÌtÇ1tÏŸ§VŸãOÿì]¼àoà-ÿçÛù«ý1—\¶›ÑòI–úêA@à ³ ¡5‘ WºkQžÂ"„ŠðLŠr”rq]Ÿ¤´åb#”ëT R+(³ŒfS‘“05µá@6¶Æ)ßÿÚ7Óuy嫟Ï:+N«1FÚ]dªîá`P^’qô‹·pâžûžÏUO½–ƶ_±´Ú%NR<¿GT q=‡(•R’$¯Ôù^ÔÄÁ@g¤Ãe“v×ì IDATBÛÀS-\áQ7†¡£0¢ ~áºónnÙAQ+hŽOæ9é(Æ«o.\ßjŒ†#Μ9铧رc{öìazzú«l¶ÎoåàÁƒœ8q‚b}Báâ‹/æàÁƒDQEîH)9tè·ß~;«««ÌÏÏsðàAžõ¬g±mÛ6¢(Ú,°þC …RÑz38Aµ`ùoA{7RD¾Àpésô–>C)õÎUH"¬¥´%Ké"÷"×òk ®ÙŠ¢Åb‘BqAý|壤‡L‘ƒSøŽÁooG:›67w©ÑX&K±‹‹” çŸ$¦£¾( 6’n7±‰Ç@Y–¬®®rß}÷qÇw×]w;wî\¯#¿~³àѺp÷îÝ=z”cÇŽ!¥dË–-\}õÕìÙ³g=ȸ²üºé¦›8vìžçqñÅóìg?›Ðjµ6×ýMü3 €Q´×uévïÄŒpD†òAÛ§ÚCH‡o¶YkLµ%XƒÈ‡ˆþ ²r‘X4ZW†[Qj³qù„ÞSF´ÛˆnÑëU«µ¶gñ#Ð;~œ|zöíCº."ËA@sr€lªTÿéíˆÅ ë^¨•·cž—•úÒX\×G ­s¤t‰Gñz±h‘JÐlÖÒ4]/Žr°Tž­Zë IÏó*òk=äQ’(ÍS”/1ZƒÜˆU«1vD¬F+ 4Ö tYVã÷^„6%¾ ”Ø(h‘¬{Èjú£![·Íëd)Žríµ×Òjµ 5òá„Åõ<ÏÃu]„ëäo XœuïW£ Z@–¦„aTP‘bØG·³N¾j¤”a€*Kð%©‘ÕÏ@cpð<!¦,Ió„T[\GâØÊ?ÖZ³®È­R…pÖE‰µàx^àRä B‚ÑÇQdIJ{r dé…H¡ÐeŽ5’B‹êœ9>”yQ)^C/dÐù»oaï%ãÜxãû¹÷žOpéžk ‡ðåcÍ1r#Øqñ<ËKGø“??æ¯Ðí˜g|¢Æ¿pû¯ØO<â9>NèÓëwY]]¡¡KÜÏŸü¯¿àõo| /{éKøäß}†k®½–•“‡i4Æ‘VP”%i’É I6D95”¬Ò²Oš$ º}ZÍíF¬D Gå¤:¦”dm²Ó¿üÎwQo5yÙ+ŸM!V1q«Zá8Çï½™kžÂ{ÿð½<ÿúç²{×%cñ\Û>”Åóçh®7 ô(F9ƒ~Ÿáò í™´.ÉG õÀÃó=zi ÊA: Ó’B[ J9$©ã8ÌÌÌàºîz0AT¥ªÐ8)ņêÛ÷}ÊÒ†Áúb¸îù;JQž‹.-‘r9~Ï!Ê8¦½uŠc)0‚†QkÔXî/Ðëõ˜žžbm­KE4›m¤TU3%NjQ„²‚³'N3½m+^=â–Ï~ŽÓgOsààuÜsÇç˜m6ˆDÄÓ¿û…¼ç7~ƒÏþ>^õïgjj–¥îiü¢`ë¶YÖV5VHþø½¿Çõ׿”úá·ñk¿ü6žþ¬§p‘œaX,ÃZJÔ0VCY J‹çº¥˜Há; é{¤YFœÄ¨u‚çzèa‚p]Š<[5šä"E¹½µ.íöÅt{oûéŸA©ïû‹ßbf¦Ãh°„.yap‚²ßEô4Q}œ•æÐÍŸã’'íã¢kžŒšaõÔQtf©×Æ0z€.Sz«0†ñ‰1jµ&YYPhE^j|ßC9>¹,H³Œ ôÁÓ#p%xõ€ÕÑ2ó”§úБS,/âYÏ=H}ÜÛ\µ¾…¨|{Ü{|8qc »wïf×®]4›Í¯ùœ‰‰ víÚE§Ó!Š"—^z)Ï|æ37”+Žã$ ·ßv;®ç²óÂ8p€«®ºŠZ­¶9 øïž7A£q1y¾Ê`ð0Q´ߟþ7òî*Ox·¶…úüÓža°ö%–¬Ë)#1nÖËZhšµ>!!áW•ƒ%%11ÁÐ y ûA-ï1–÷h9“Dj !6 ¿Ç#ú¤¦Z[U{ 51ŽøvW(‰êtpææ(ΞýrxÇ&6ñH’„Ûn»C‡!¥d÷îÝìÝ»—‰‰ –——¿Á{¶Ç\Àüü<µZ(Š˜››ãꫯæšk®ÙÉ,//ó…/|¥sss8p€§>õ©lݺusÝßÄ?{M­l8Îjµ+!¢â‚tô)8m¨Ï‚ò¿AnU`LIšž!IÎbm‰+õÈÃc!| Jmª;žè𣈠Ý&Îó¯O¬æ9¶ÛÅœ=K¾¶ÆhûvÔüI7'Ö=„И\O6È ÂÏ5#‘‘kMY$dÃÒ÷1¾Giƒ”וX$i’àùe¡ñ}¿j6¤Ãá!$y¡q]S‚pÖUàë–¾_©¼Ã>YZ …¤Qo°¼¶Ì¨{mÎ9N0ÛAÎNÐíðd„¢òl JÆÚ“tÚS$I‚­æišR)¾ïa±x~¥Â-JË–ùm4&Ú,œ;Ãöíó<íiÏâä±SÌÍo÷ †¦Wã§ë]ÜuÛ]üíûþŠÿÀ+iø-FiÌêâõæ,y^²ã‚iþן¾‹·üÈ;yÁKÞÂë¾ÿy¼áÇ~€‹·Ïgk8 Ÿ a1ño¢ÆDk„5°]Z( yV¢sƒS” ÃÞ -§Á _päÁ^ça£&È冴j>ù±›øÁ7ý,3[ÚÜø÷ÿ͉ƒÁyFØF³ºè^ßh“=N|üFŽ?ÉÓ®¿Ž‰§]úø­)¬¶¬®.Ójw0EA°Æh4$Ï,µš" j8¥ ,SŒ¶Xa‘J¢L¥ï§Ò,%Ò>à8!át“ÎÜǺ—©l™žDº½µ3ŒMn.\ß*XkY^^æöÛoçÔ©SÔj5öîÝËÎ; Ãðk>§^¯3;;»>Ù hµZìØ±ƒË.»lƒXBpë­·’9pÁŽ Ø³góóó›}¸n ¥"Š¢Çpx¥ü0&ÿoCÑ$ÝÑÌd¯ý!ýÞƒ,XKL"݈ȭ3Q›`®1ϸ§ÁWôèc­e±¿Èùá9²²O”ÇÄ%àNØ:ŠÍqµÇ%%©M)²!‹3>3=óíO’²Õ$›žÂöû›n›øºHÓ”óçÏsË-·pøðaæææ¸êª«Øºu+µZ¥¥¥o¬x^Àìt:ëvx333ìÚµ‹½{÷nì'Nž<¹8<;;˾}ûسgõú&9µ‰1}†”>µÚÈ5lï8Iv†”ÇDX•R:Ö¾ bµ MÏÇǰÖj­]ÎÔÿÏÞ›GYzÖõ¾ŸçyÞyÏ5Wwõ”îtgìÈÌp @D×òŠzôÞ«W=WP.Ë£"Ѝäg 28 '8I ’9«ª«ºÆ=¾óó>÷wW%a’‹Éâþ®U«WWíÚµ÷³ß÷¾¿ïïûÅ£ÁÈOõ^Pk4Èý¾ŽÙÊú:½ùÂzm #E«…=;KµÕÂsÝÑ@~7ÄjªslYúZÊB¹!MblËÆ²‚¡ú3'Jz”Û’$˰mU+}GmÛÆu}úý>ZçÛ£–)ŸSY©$a4 R©¥)››<øàý<õiO%Õ¾[Ú¤‰¢µzc ´ÎÈÒ˜¢(U£žï ,CaJŸÖ,‰B]¶LåYù^„$3)‚"+è.¬àMY6¶mãcaº]l4©í^‡Ôh*2-ƒ¶ C’FضC˜æFãà&Y–R­WÐ….}Rå°õWQX¶ñ ‰|×A ›œ‚L äÈ$Åö •a1½wõúE–ã{vÅ&ÉsŒ(Т Î24àyB•íÏBH°@šT硱¤$Ï%žßÂrrD(ˆ: B*Ò,¦ðŽ” :GR˜Œ<-èô45š{ùä'®çÿä}웫óS/>Z¬°º¶ÀlkŠ(îàûËíR«51F1ÖjB^A5ª^éúÌgþ8ÿü‰kÁ‚B§ô»ž3F–d8Ž"JÖ™ÝÙ¢êKú‚Æø÷msû—¿Ì¥—>…öæi c«„~¯O–iDa#…ÚÆÂ%M3(@96–%Ù1µ—$ R\ס eÐiN­²Ÿû¿zŠ¿|LJyíë/æÕ?û<¬, ʆ:Bž!³¾vì$O?>Ï«¯yïù»¿¡=X!hÍpðÐ…¼ÿ=¥»¸A£Ú$R*“DPmUéln2– ,4$ƒ<¢H#[áÙ6y–b95”’$Ù€$Ȳ !$J ²TÓno"„¶\×£ÝîÒlŒaÛ6‘¤LƒŒS|ÏÃv,¤1:%‹Ø–øœém²Ò=Ã%³Ó¨NS÷=Zç íYønºqÑE†W·èõcœÜ „"‰ |¿Â#ެ®®bÙŠÙÙ)’$)}{¥ j¬œ9IAF‘FŽ/!dÄEOÙÅFw)vïÞÉÅÏx6ª(¸ýÓ7ò¬]Wm’F}¢p•¼pÈéðÃ/x&×~ò]¼ýÏ»ßÿO|úÚÛyþUOaii™Kžw×ÿúk¨ øÊ‰‡8°ï,@d²lAß­R¯aûUôæiÒþ91Nuî uwzÓ" lLqü¡eÞò¦ßæÓ½‰}ÞAþèÞ@=h’õ2Т¨CgpŠîÒ<—^yñý÷qÛÍ7霋_ø\&öì%îm ±@ÚHËEÚ6ÓÓr…!¦ËôŒ‡”Žë礄©±1‚n·OÕªÓ“P­×ˆãÇU(ßE‡$ C1áÑ[;žd'½žÃFSqG›š'šX]__ç¶ÛnãÌ™3LNNrèÐ!vïÞý-‰UxD麹¹ÉØØØösAÙ]Ñï÷év»c˜œœdÇŽT*•Ñ€ðè«oxÍdÑÚ@°ž$ïObDj"žò‹4O~ké‹,¶.Ä™}û[ç³#˜.ms¾)jaÑ A•*hUZ춦iwî`yµÃÂ’„09)¾ç|ß“ >R×Ù\êŸZÀLÏ~_´ÜkcXH3ŽG1SyΞQkõßf}?uê·Ür 7ß|3¾ïsùå—så•WâyÞ7X|'múqÓn·1ÆÐh4ð¼GÒƒÄqŒmÛ4›ÍaÐìhráñæXkˆ±³ Ìnܹ‹8Ë ê>‰&X|x 4¹+˜Ü· UqPM?çZ>ô7Ã/¿îu$ý¼ÿý¿É_¿÷-4wŒ&zq‡^·]h¼(&<½Ä 7ò¹Ï|†Æä?òâk˜Þw™Î±×+­B¤”ˆ”TTšã8ŽGgä,ÛÁqÜíùËq,ò,ƶ%žkãûÁ¶}C¥ZAëò:ÑdyAsb†~Àʉ“ô6Ûô»6¾C5ÅßÂ0duu•“'O’ç9SÓSŒ[Ô<Ïé÷û ,Ëbvv–Ù³Ûv7yž³¹¹I·Û`ff†={ö|Kkþ£n†%ž7ƒïï&ÏSáIŠ"{2½CÀ&kVÜ›bÌm1.0±q7Íþ<Õ<ÁÅB¡¾Å3ll\\\ÀÇ_Ô˶øAˆçENš¦~•$ ÃÇ‘x®OE€¡úÀæyNQ”þ—–e‘¦%á*„@ç†(‰p}3ôÓ…ÆÈÒ¯G÷cÂp@¿Ó¥Q Ïs”c0Ã1@’ÄÃ4ÉG6J(%éõ#|éãz˜‚3gNÓ¬zÔ›>aܦ96ëtú Q–¢S›A3>1ÍÆF‡é¹ý\ÃÍüÖoýÇOlàùðâŸüqO<€å¥¸B’Ä Bj’´@A–¥ \|ß/Í’ÏsHÓ„]»v ³„%8gŽJРßéâ».aÆ!®SåùÏýŽòÚ_ø^û ¯á—~ñçu?ÿ3ŒWRgåû£P©PÒK‚ÌÑyN¥êãºR \×F)‹,K)ýƒËëѲ=nùÒí|ìãŸá o|%»v羚ñ{¿ÿî¹€‹ŸöëÄ]ÍøóXýô¾úÐWù?~ø‡©¶Æùà‡>ÎsŸù“h“`¬¶W±Ç=Ü Ÿ”mrês»¹ïÄ­¤Xöp\¤(+àDaŠR¶åF1™N±”CTÀ”›°R½Z¾Þ$)†v1R „øM–+„,¸8ŽÑYïIlËAE–ZõÂ$½Ϲû/ <²4­ZOÒ4em}……Ö××i4ìÙ³‡jµúm7ƒÁ€µµ5úý>Õj•ýö³oß¾íu2Ë2VWW·U-[Äj­6JTáÑĪ"æPÊ¥ß{€~<£v!mä“CáT˜‚8OYi¯3¦&˜š¼kùK«w ¤Ejy8­ áßPKˆ¡rÆ1)Ec| wÇ ëZóðàa&Ä$;«;™8bäMýxQã†Â²H›MÒ±1Ì÷šX‚é±Áä$ý$Aol@–>¬¶±2Ün·¹çž{¸õÖ[9tè¤V«1 ¶Ï³ëëëDQÄ`0 Ûí²ººÊêê*Íf¥TÙ1(Êüv»M»Ý¦( &''Ù»wïc ¦ƒAÙù†!•J…]»v1;;ûMC0Gáqš¡AYˆ †ò|êŒcþ?Ë|")mʬ‘JõX Ã×u) ¨T ß‡nz½Rɪ˜RøU¬®bæçss¨½{‘[dìß=±*¥AmQ~ Æ<ß#ϲaøQ陚åÉvU©n-•žQT*X}ß 9´¥`ݪný?T‚h½^G*…¡ ×ù°u_<ê±9A ¨Û²²Twú”¿§³‚B,eQ­Ö‰ãej|¦1”Rt;mª~•N»ÍT³AuðÆL\†véÌP(°…Âv\”Ü.ð½­s ­ Iœ‘¥9–t¾E½Ö ŠC¤(•¨+%išƒ¦JI”Tä Ê`)¥l‚‘8¶BÚ¥ƒpÀTmžÊ) C¡slÛÆ¶‡!c9ØCŸÚÍÍ6®ëບõ®7Fš&è"¢^¯aÙšœ“—^¥¹Ö¤FPH—A"q‚1º0ªÆû«ÿΟ½íÓDa‚ðô«ö°g÷<'"ŠC<¯†ãº(%ÉŠ’@æym«–“$¡V«e“;g¯ñàƒrÉSÏ%KSl["ÉÑYŽë(esÕ•Wðæ7¿ûsÎ9Ë)øôg>Í«^õr”´©VkØ–"Ï4¢PèíÀ-E–%7$ØË§<φ„I¸ç¹Aª’-€(icKE/wHűùyp%Òó9òàQÞò#JR®~ñOòÓ?÷\Þööf½½‰X¸,,­#•‡eå$Q¯QGH‹µÓ§©íœ£Ècb!ÑIŒ'½Nß¯ãØ›Çö·½b•¥¶ Σˆa)<ßö-:ýAÈÆæ“““LMMaÛ.ÝN4ɉ¢” ¨à§VØ99Nÿä)„ïpö… â„™éYî½ínÄ´¦5>Až'h ´Épm—C‡`Y½n·R£H†é¨C«Ë÷XX>F³ÕĶ|¯Â—n»™ã'îç…/|3³S(PßMgõÂÊqª&5ºË œû´§15;Å­Ÿ¿§<í©Ì<ÈÒü<Í©Y’"ÂhØÜèÐp'øß~=¯ÿõ_á]ÿý¼ç=ç>z=ÓÕ€£‹§¹üG®föÐA:½ÎßÅÄŽ‹ÙèTÈ ÍJ{¯ÜqÝ7Ï®û kÍ3=/zÝËøÓ7_Í¡³÷°xÿíLïß&§R‡õöyâ0Q­‘­®pó¿|’‡î»‡§_ýl.~æÓq|—¢(°}(Œˆ“Ç(„€"/ïõBôûµZJ¥B·×aeå qÑlÖq\‡^¯m[EN§ø5d!1ENwÐ'¨4°”Esb’¼×(gz÷~Ò\Xõ±y4"VŸ(ôz=î¹ç¾rûWèõz>|˜«®ºŠÉÉÉoK¬nnnrâÄ 677q‡é©i&'&QJaŒ!Žcî¿ÿ~Nœ8Aš¦´Z-&''‡!#Œð(ºPXÝ·Ý IDAT8ªN =t¸’ P5LüÀ' "Ñ˺ä+VeŽ`ò uã­ßI¶v¡§5¸ü[ DñiÂpÛdÂk’»5Âþ"KÝè |ϧ9ÛÄvím2v„û_Ô‹¢ôù"Æ¿ÇaQd9›Ã×Äñö¾…‘-À"WÓ4ess“ùùù²ã+˸óÎ;©T*Û"¡n·ËwÞÉÒÒI’ð‰O|‚ÅÅEvïÞÍ\ÀUW]EµZ%MSN:ÅÒÒÒ¶bõë×õ Ž?N»ÝÞ^÷ÇÆÆ¾Ár`„w(‰P£¢âœåYàº.;wîÄ TšÂì,"ÏYí6x(…IºÇ38rÓíR™œ¤zÖYØ#bõßO¬…)SÇ èakƒ¨lË&+2², Ç&MS<¿$„¾ž4 ¸®‹çyÄqLšn©P!UËÝ!ŽcªÕ*Ýn—(Ѝ7›CAFéÃjYP!Êß/ÛìSr#¥Á˜ÛöHâ­K­ZƒÞÖÚ K9àH”ã`å ùZÊÊ™2Å ^.ʤq 09Ê’ä™ÁH‰”RÚRjòÜŠFc ¥,òÜP­úDQHšgØÃÃt¹™Ë² ËÚ’T—žô “°Ce‘çš~2 V‚1§B«5†Î2°l”,ÿžD+œ[éº6á ¦R­Òngzzišb ðƒrÌt¦©×«Dƒ5<ÏC*Ò¡ÝÍV‹æøÂ(£ÝÞdùÌþèÞÆ§>5Ͼ³$ÞÅ®Ÿçç~þ•¸.˜"Ã2ßqôR@Ç–å“$¨6&±m›^¯O¥â•Zsιçòà‹˜BQ脢иÍ~î"m—<7øU‹ÃíçSŸþ$_z¯ÿ¥×ò÷®¹æGQ*£ây()(tF‘eH—4T*>I’ u>û-%mFžç¸®‡” ¥víÜÃÏÿìU\ã§X^{­±=Øn•»î>ÅF·ÍØìY¼ãN”‡,®i>òÑkù™×½‚7¼áï8qü8]|{÷žÇÃ'V(’A¤)dƘWÁ­Z´Z“¬,,Ҝŵ%¢âÑËc<ǧîÕˆó]X¶‹’0Œ‡… I–%Äq„Áö·Æ·¼––ÎÐív©×kDÑ€^oK T‚Z ²4'/B”TaJo}“ÌÜ}ì8¾UÐó}î¹û^î:Ç÷è´»xAÙº^`Sä*)Ë*0ÊF‹-³¡úW1»sœn/¤Ýðð‘xãïý>ðG¿M½é“¥6¾3Å?ü퇹õ_?Ïï¾ñ?ë˜^{ÀØx“ÍåeZ•:çžw˜|øøÉ—¾„ Y'ìnàT¯F¿'é†mšuI£åó»oþE~ã7^Îë·¸ésGøägïåÏß;1€%Ù;V0YÀ8£!€±¯Ù<ûÒçðŒkžÍìåŠW½¯bì”j$HÖ¨4jà¸X¾S­³öð îºñ‹$½M~ìšcæ9ÏamaK§e£òœ`b å –Kži B*\ËEJIÅä:cié4+++TŸn¯KšEeÈŸ*ˆãÖš8O1EΙÓKÔ[)3sûˆz!Ê(Èrì±iĉ“¤ƒ.öĶ)ž(lµ n´Î9çžöÔ§m‡S|+¬¯¯sìø1ƒããã´Z­²h8$cÓ,e~~žõõu¤”T+Õok-0ÂlH¡ðíq +"‘–Âò+ |~0Ô#ÊU¤$·rMQ("‘³nÚ´³-9FӛƫO`Û-ÙÊ ¤HÖÿ»yåîá[*fŒ†´OÞ_DG§ Æ.Æ÷æÈ…`\…lÚ-²^N'ê 'õÈîña¦Êda#(•¢òû`3@¢siŠ* HÉP¥1úÌFxd^•ß÷Ù¹s'û÷ï'Š"N:ÅâââcÖâ,ËX__'I²,ãèÑ£h]Úp•á±ÃÇ-,,°ººŠ‚f³I«ÕÚöX5ư¹¹É©S§ˆã×u·}ÕGkÿ#Œð„ðéJáû~iE©5fv=öû8««ÈÉI­ WVèß}7ÙÒÂóðfg©LM¡å=ÂwI¬Ú¶Cš¦e+½íàºc ,K‘çg9ó•ê–*õÑ H£Ñ IÊ$sÛv€‚” M(KbÛI*HÒ©­±&¹.IKYØ–Î5ZÛD¥Ö ‡!?[»©’ø,LÛ.ÓË\ÇJ2UQúÛeYÎØä«܉[©"ø$Þ´¡Vi 0DÑ- ¢8ò\l/Øà2F Ä–Òàûiš–~ž” UÁÖë°‡/=hmÛ"Ërò¼T½" Žã@šƒäZ—$«|ÉÄÄ8&/ÀRØÊ!O5J–„a’deXàyvà3;3KµVV_5½þ&®ãaЄƒ4Nh6[=¶ÀübˆíOà-xð÷?ðÿäuÜð…#¸üÔK/åÙϺ‚#Gޱ8¿È—&Ž»8*ÂZF(¥0äCÿ!1%ákŒ¡( VVV˜™™$ËSú›+\òÔÃÜzëm„½Ç•X¶fÐY/[Ü3‰r,ò<á¥/ýqþè­ÅæÆ2Ï}îsøÀûþ••5¦¦h i#…B •̹α¤Áõ«ôû¥w¡ë:è¡?pÙN_¹R)Ý„ÝÎã5¯ùq^öŠ[èuÌL4¹êéOçæ/ÝÉùšcgñÀ±yÞú—ïæÏþì­Üö¯'xý¯ãICo3ÄÂáÜCç±¼r ¤¥¤#Ð:D5&ðª5æ缫®Ä3 xdYWzx•y·Cd2L¡H¢ò¾(}:ÆjµŽëP9¶­p]!÷Üs7ûöícrr‚JÅ'×zÛwU ›,OKE´m3ˆ#¢Á€ÊÔw>ø0x.“örtcoÒáå/%iw@¯ÓÆs]ÂAˆcäÃÀ¬~¯4¸.ŠAy“‰œþ åø†q¥¥6:éðÞÿñ^òS/cï¾½ô=ÒØá]øÞô¦ð;ÿåÅ8~ÀF¯Mž¬lDÔ‚ Q’²ç¢§ñœ~ȃáŠg\I¥Q#ŒD/'ΜÆñm41~ÖÁQ’W¼ü%üÂϵ¸ö3·ñ_ßúa^ö’Ÿâ—å5<üÕÏrß _dÿEç`Íî"¨ 8›“{™¨ÎræöÏqâèW)ºrüÌi”È©» ŤiŸ,ÖØ^ö™u®ÿÔg讯ñ#Ïy6j¬Å—®ÿ<­;©ÕjT]‹N‡ù¥38®OµR/‹Â"ËÂÇ JõãÆÆAeY– uÂøxkû(èù>Âtš"ŒÆõ¬rnMbº½ªëáT|”‚ÌHº««T¦§AŒˆÕ'’X=vìËËË:xˆýû÷333³}~+t:)LÁØØÛ¨­¢b’&(¥h4Tª•QxÅßfgl#*Ó² Û½׬Q1M$“”JÎïçC¹bLÔqAщ3—u Ëf•H¬³oæc•q,'k¶~*âö]tŽý •¹•BŽÃ×+nLIÑ=…°LWic!˜öf0MÁ|qŠA:@+ý¤%U-ZxÂÉš$NE¸ŽCmrŠÚÔÔ÷|.“@Ãõ Z%rì¡ýÒH±:Â#ØÊæh6›\vÙeé¶|ô=´¥XýÚ×¾ÆÑ£Gév»Û+gu,ó"(;<×ÖÖˆ¢ˆjµÊÔÔ­VkûçPZlnnbÛv¹¿wFêÁFá‰Û$IÂòò2õFƒq×E/,Ð_Y…¼³Îb}0`ýøqÜ“'‘EµkrziÛ£A|<ˆUc ¨TpdIœfY˜!!%Ê$p@*)Âa˜”ã8ÛÞ¡¶]¶mo·?j“ M¿K¯Ñ”$yä¹£(*z Aà‘fÙPyXà:BÈmqÛ¶¶‰])K/˳R™©ËÊaéñª¶M&äý~iàû¤…)w_R‘é¼[P«{A©ôËs´0ØR0ø¢|ÝÝnwÛËÔuÝákÔDQ„mÛ8ŽK¯aLA†H)q]×õ¶ÉÆ-ÂU ‹Bçø®MÔë#…À?F“‡!~ÐY]‡$EV-´ÎKßYE¡‡¡FåX„M\ÏÛ Þ Æ²@JSŽ¥ë“gšZÐâmo{?×þËÍq‡$Ó,¯&Ä.»¬Á¯üêÿÆK^ürnùâ-¼ýÏÿ’g=ã2ffÇYYnc)Dn·¯$q\¶»ˆœ8ÎÉsÐiÊøø8Ýn—f³ÉêÚ ±{ÏŸ»nµ$dzŒ^oK <7Àq«Hi‘g OÖ•dø'œû\>wÝ-üêþYÒhÔ0¸«PØ–Cš2“g ®7 S3nþï{ßßðÃ/|!g_q kG¢Þ˜â¼ °Þ Q…Â÷›iν_½“?çõXÅ»ß÷§¼à…/E‰5.Ús‡'Úœý”+kMzѾõÝ~»X ½~ñà<ÜZ!}L4 p]D’âUŽÝy/·Ü~'c³;¸æ—~) 6º]ξðb–VWY^Ýࢠvàúú½iš£µÁ²µZÍÍýþ)Koå Reß¾=ÔëµzehÛa°‡¢È†FàZ6Ò(ü`'Y!)ŠŒ±‰1”‘ @J‡Ù¹=œzèfæv"êc£UëqFQ”*â…ÅN/žFçšóÏ?Ÿ}ûöQ©TþM¢Óé°´´„eYLNNÒl6ûüº`0 ”bbbâ1jÖFøF@×À(C‘/‘Š ŸÆó|”r¿ï_~Þ뢻g€DEo@œyÄڅDZœ.“çŸG`Y¥¦ã¡šûñ¤&Ó½åaå+(§ŠÛzÒ™xôÍi+Ð?ƒ#T0 7…ŠUa¶:Ãj¶B7îÉçIgÇ1Qáû>¾ï?±,Ë 1i† Ì:°-ë{¯¾*g-)KmQ@•¯×uGóÉåVJªÕ*^x!SSSÛç×¯ß ,//Ç1N¥—]v?ñ?ÁÌÌ •J×u·mï–––¶½Õ¿YÈå`0 ÝnãyÍfs[Œ4Â#ŒðD‘«ZktžƒïãNN’Ôë$››°¸HÑ)Yá,.bI‰wàöÜ\Ùí1Âã@¬jA–hßÚNó›|èG“ei¹†'l)1·Žãáy.Fƒ(ŠX^^Fc­1Â0Äq]|ðŒ1(¥X>³Àäd“zmš/Þx Q31Ñ*[ùŒ!Ä#¨V|âÎ:/zÑñ…o!îxÖ³®`mUòÉk¯Å’õõ5Ò4A)(L޹Né÷{¤iéOEá˜/†êf¹}}fYJµÕâºOÝLØOùò­wF!Ji~臮æ‹7ã=ïü0ó'év ZuxÆ%“<ëÜ€ÿtÍsIºËÄkËìÛÝàU¯| íuV—Oâ¹6ËËëôÓŒz£ÉÆ™3ÄQˆÐµzå¸DQYïUHòŒS‹ó´»ø¾‹C ­Ë+#Hâ„4É0… ‰S&Ƨ‰£˜,Ó4ÍrcWÒ4&ŠCÒ,Ƙ×·™oѬ|üC¦Tp*›Qˆ_«qîshÔëäà e­^'Žx¾Mµêá¸jH z½>BXT+cD¡Æ÷ZÔkÓÄ¡$I ÿôñkyù+^ŽRŠ()›|ä#ŸãÜó÷ðüyaw“Je 2ˆÃÅ;Þý!þçgï#íṅ>ö5.¹lŽ+ŸùÃ|ñ†›¬÷¨ÍîAH—A’ðÁ¿ýG^ýªßæM¿û¼úeWóÞü»÷´8³ú\¹†ëC DfcSųƨW¦QEéMR­L#‹€,¨Tr‡ñéD§Ïð¥úgŽ?É«ý׸ð¹Ï¥:½“(ÉiMïd£Ý§ÝîSp,ÓDƒA¯‡T’öf›(Œ1B0HbNœ:ŽdÁÆæ½^! –¥†v 0e@Ma4…މÓa¿KõÐEJA9Ÿ!J5?–ƒ;9‰Òi¯7üþ'´Ö,//sòäIƒÍf“C‡1==ý~ƒëëëdy†²Ô7¨Q•R4š t¡9uê7Ýt_¸é ,--„o³IVXVÏ›Ã÷÷$k ÇÈóÞ÷!£jÈ»]£cº}¼Æ8ÞÜ.ü}ûp÷ïe0Wee'DçÏ2Ø·ƒîþ¿þz>}ó9µ´„.@Z¼Ú>jW`û{IãΠVï¤Èú@Fn6èz2¢¨í€ÊXþ7Ì‹Ž´Ù̲3˜cc°A;ÚDúÉG¾Ûåžpaa;;ãÇŽ‘¦éwÿQÙúÑчÉÖ×õ“è`L„íØ4[-Z­Ö÷Ü @AµÙd|f¿R)«y^þ»5Ç÷ûÄ'O,Ìc†™#üÇ„eYxž·­òÞúÚúžëºÛ]Š–emg‡(¥s­k­Y]]ݶ¨V«Ù/!h4LMM‘$ wß}7×]wwÜqÇ¿ëþa„FøæÛ°RȱººJ·Û-*'&P¾\]ÅšŸ§Eî™3È^iÛXÓÓˆFcdóx­1µZµ$j†ÊÒRm*‡$i> 2H•cŒ³ÝöÐl6‰¢h[m—eYnåyÔj5t‘•mï¾·íû¦L¬×z›|+‰B]*… CL•m_cJ…h¡Ke¨ã8dY¶T¤”À˜rÑÓEY©"BâºÂxØÂÐMRlχ¢À / Ï÷F0È"Ç£ˆJµk–•‰è®ë‚n·C½^G)I¿ß*qs¤,IÜÁ ¢ßï—d®(ÉÏ<Ïð}w[ÝêØ.¦y𲏏€SqѶÀs],a“z^)á¶l´N(ŒÀèrÛ!ÏrJ_0¦@©2@,§Trv»]@Põ,ÛB E­Z#ŽV¡Èñ2ƒhe[´7æ‘®¤J³ºƒ}ì£Üð¿æù/ÿ÷1=ÑDë.IÜǵ\úÝ>ÕJ‹Ü<Òjßh4†1Ec­ÝnoZ&°¤A)ÁS.:Ä}÷=@Å{)ƒxv{±æ‘qˆ¢ì‚B¤\pÁ¬®t9qrs/¸ˆk®y*oyËxÁ= ­5ƒ¨À`[^é¯ëøDaL–¥Ãë´Ø±b8ÁHiS›¤Ûîðîw%á“ÿó¿ó_¨×}~ô…Ïáù÷üîï¼A\pée3|ôoßN`2nºîZ™ÝûÇê)9|á´´0f€ïÖÙ9·“~â8‚©±q6ﻩgü4«Ë§‘®ƒïU!Ìé¬oÐñ#”£(tÎò™¥íû ÏÊ¢E¹a+EJ9¤iÆ®]»ˆÂ˜ÍcãM²,§zÉæyJQˆò`irJI¢v+Ïùׯ}•ϸ’\k|¯<€Ö›uë+DQDV$´»‹T‚B(\OQ«U¨V(eá{®S#šïïܵƒ#>À}÷/ðö·_E’¦LOœÅÿúìxï{?›Þü‹8žG‚Mg£ƒïXŽ ¨Ô9rü!žóÂ˨Öç¸óî[yhá¿ÿÆ7°û¼‹yA”ðÑw}ËŸý\>öÅ›xχ>‹Ì5ÿ×O¿’«ŸöKx¾FoG6\|ÏpæøQfÆæ°ŒÄ³+Ôª-L¥ÉÚ` #<¤m×`rn?õúYaÑò›ÔéÜ÷|õ+H?àÙÏû!¼éôÂ>|”©éiÎÞ¿ŸÄ)@Øë"eã7=’(¡Ýîb9 ;çêRÒ4¡ÓÙDˆ‚,+ïyž ½i]ò\“祢œÿ20¦È0d8¶ƒ_ HŒ]ªý)J/]S†„ìš™$ë÷ðÒŒQÈçã<Ï‘J299ÉYgÅÞ½{iµZß±ºÕæW«×h6›Ceò#‡+Ïó8pàËËË?~œ#GŽ0·s޽{ö2;;;üþëk˪²¹y;ƒðI(”üþ ³2Æ {=¢£Çð ‚Ý»Ç%Ó ƒ‡Xì´³Zä« ×ýÝgX:½JµZ¥¨Õqkµ¡í†{ÉÕB}Šlá‹DiŽ“;X~*¡c0YF‘$˜,CH‰¬Õ"‹L–‘wÚD>Hrò$ÞÁƒ¨JẠ#tÚ¡9N¥Bm|‚ÚØê{œp.„ Z© ''è6êhÛ¦H3Š™?ûyeé–£j$Y ÖÇõ|Òt +sš“u¶mÝÊÇ>ú vïÞÃÏÿüÏóWõEn½íV®¸ü©t{«dYJVX[ZEy!A›G9x®ƒ’ ¥r â$Áu=B×ãøáGyã›ÞÅòrŸ·½õ üúoü>þà‡xó[ÞÄ÷ßÌ ó¤svsñåð¯y.ëæ[¨î ë§«|î³ÍÅW]JTX&š¨ TH¥ê’Ä=*•&ÚqÀôÙ´ižGÙO±²Z&‘]a2ò‘Y+®çà&ù(©„>i–b$A¡”K¯7¤Ûày>Z—EiQT-|ä Ì(á]2V{Ý5\!Ùwþy|î#ÿ›ÏÝûW®œ`ÏÎó¸hÛ“X‰cŽ-P©D DÌ©ã Ô« r|7ÄuCêÍ:žÑ]PX—f£EµrôÐúýUÞóž¿fçÎmL¯k“§ÆúüÿþÇ(Uå ŸŒÕ1þ?ÿŠÏ~ê+\÷ÜóøÑëžCwsøø /zåSèØ”÷þí‡yúÕðŒkžƒÉsfÏy—&’_ÿÕßgQh^ùŠðê—¿„Í›æxøãààCl¼tš…“Gðƒ3S‰‚ˆ¤¿Fa; u‡Èicå€SK‡…GàˆºnF*3È,+÷íç®;ofzý$g_x>¢’{Ú H:)»wG6Œ9ut xÔ-êµý^‡"ϱƔ%jB°xêQ¥†•’óó®fmm…ápH­VÃE–åe ž.ÍÇÆDÉœÎò™ÅÏ#/R°¡ \ÒÂÔô «ƒ~YÊ1Ö÷TžçqÁ033C¿ß§R©0==ýê]uÕUgFofff˜™™ù¶›þf³És¯}.O½è©ôû}\Ïezjš¹¹¹ñ›?Öwb¡TD£±—ÞàaV:_g?Ætû*¤üº9/y)E¥©Eç¨~ŸâÄá.Õ“‘:Æãßø&_@›rÚè‘GbýÜz¢¨†.rŠxˆ—N±=¼ÇN|†»oÞO/nÓp+L´êÔëM\÷V¤tþ§cX.rÛ¡/1SÛÈÂÌ B¯Z¢V~HtúºûÀ<ò裬..r< ÙqàîÕWS¹ðÂo{|º¸HüàäGŽ ‚ˆæµÏAÕjÿtS¶°@鍊Ü|3zy™â’KÀq‰¶o§èe 3t¥M¢4ÕUª‡1?;û}-å1ư¸¼Ì©cÇp<êºiK§`u¿^'9yŠþW¿J|óÍÓÓÔ6o†!cuÆú—&ýää$/zÑ‹¸æškØ´iÓ·-–ž~ÜÔÔ¿ø‹¿H–e4›Mæææ¾ís „`÷îÝ´Z-®ºê*´ÖT*fggÇ ±Æë 9~EQÄ–-[ð}Çóè¦)Ý("›E¦)+ÀÒæðaòÍ›ñ·mŸ ¿×Æjž&X­ñ׋0Æ0è÷1V •‹Tñ<× ÀZ:kkÔëu²lH^LOMRä£Ò&ObL†1’JÒíuÈÒÀj‹ã98žG‘YÏÅjK^X>yÞÃQRh‹rÄ04X,€-GÜ¿‚ÇqAºè,ÅØÇ Ê•øW©Ðò!¸GNgóöˆÂdEB(\jaca§ ;¦ü*R(,>Žã¡uNVüˆ¢È©Tj¹& +$I†ïj|ÇÇz€8ÂE¹:-p…"ÎR$(H‡ Õ°‘KeªÍj Çsq,%/Ó‚‘Å5*›7äšÂX BP©`m­-B¸Tk òL3ì÷BâH‡z Éò´L΋ò\qŒ†éuÓô»Cší)ZÍIRmH KX­Ò_^æ#¹…ëžÿL¶îØÅÑÃû‘2AHȲ„°!œ²œÌ!q…u¤Rº‹±š¨R–óôz=Âpš<–T«[ÏÚÀÉ¥!<ò([¶ÏÒK2v/xÞ^^û‹¯çË_¾…w¼ããåñ¡¿ûϼæ)üù_þ!½Î­–ÇÂÑ£ÌÕìÚ¼…[lÄÁý÷°ù’KñÜ6Bº(+ÆZÖâeZë ÈÓ#’Cǘú‰ñ‚—ü8®’ø~JÍ­aµB)Ÿ(ôH‡CÒ¼O-ªáˆŒ™é6kÝ/˜ä†>Í»Þñ?éõkÝÇÙ°a3ßÜ” Ÿr_ûêm|åkrå•çsî¹Ïä÷þàxË[þ”8†å•Çø™_úÏüöo¿…©‰×<ýb†Ëó‘|œ?~ç&ÎûȬÀq\fwž &æg_ô"®zÆe´´†÷sÛ—nd×…{ 6LTÖ³´\¦!jºBÐlQoW1É2˜iš“ë8xô0&OhOƒS™&òÖQ?¶Ê}w~šÇŸd繻شs‡—V˜m®cƒò}f§'q„¢#Ö(Ò WJ¤ÎÂâù>:+y©öV Ò,eaá0A%òÙ4¿žN§K·ÛeÆM$IBTFéb÷  È-ÕZmSŠ4A¸XKœƒ´)aè—Ç aÑ()(‚ òÁÆäŒaßã“àÈžž>Ã]s¾ ÖÐÆY¿~=À(­ÿí[È÷ý3)ØomðVãâ±¾ã f‰çµõ,i¶ˆÖ ƒá¿ëÖ(cìß§#ƒµ%^)‰ËŸ]§, ‚a7añ¡S îy˜Æ#÷v×IÆæ™9:Ú²¼Úe0¨ÒíÔ˜lGÔk ß+ÈÝY•<Æ«q[g‘uΓXߨB{b–JµÊ¿ÖXkHˆ+ÂJDEDnøC“X…²8¯œR*ÓqÓl2z=â‡BÁ–- %ùÒÃ;ngpû++8­ÎÔ$á®]¸ÓÓè4!yà_»•xÿþ²@öž{A@03C±Ò#9t¨j /*ËA¿ß¬H!ŽRxA€¬Õ°aHÇå=Aš’Ü}É7¾Ëäm𖍀±ÆúWö¥0 Ù¹sç™kÓ“•ÿ\a²oß¾3¿÷ÏÏýBZ­FƒíÛ·ÛãÆçþ±Æë‰1†,Ëþ Õé8¸ëÖáœ}6ÅÃõ«Ø~éºøW\¿kr¼Ðó½½§´ßR&…-ŒÇB”'cI’•Daˆç)*•ƈ/Z œrtY*Iš ˲£J¨Q镵 Ï ËÿSQ¸®KšæH!1¶À!A¡h|'@¸Z âx0*g²a0:GkIT©Sh‹.4qœ“e†J¥ä¤2±€ïE \ŽŸ:Ik~ŽI“R =œÄàMŠDy¡pððÉ Ö DyBÕºlÍtF–Ê’„Åq<éàŸ˜¦~à•\Uciµ&J^Uœ–œž0DZAäWÈŠ”\‚õª€"Mq¤ƒò‚°BðÁ¹îy—°qjðŽ7ó‚k÷òôË/!¨TXt¨ùu^ò²cjb#çíXǧÞý.žÿÌ«¨M×i7[„Í+Ý>"pü*®[Ås|Ljqï‚cÆS“³èaŒÄ‚¬’úû/°6Õ䢫ŸÉôyçŸ\F†8T-²Ì` C¦ õÆ:Mä§{/Ê÷:,™[YÓšh>ƒÁ°hS6̶ۓ8ŽWšã¹¡È ò¼ R©á(—,ËŒuÊ'!±ªLî ,ŽrÑ…f0èÓ² <ð‘ÑÙò†bl¬>ú× ÑïTÿœ½ö¯Ý¬ý¿=f¬±¾þ:&ûÆGôÛÁQ´AxßsQ”EA½Þ®¥™ž'sî»·Cró!Öy˜J; Ú2ÏÛ¶Ñ:z”Ø8ÿt¶l} ›7W™™I ÃÃѵßèžÅ7‹zQÌÏæê-×0M ÔˆAýoH[ÍJ²Dº!a¦2Çž‰½DN¥dXÿè±Ç#IÂ0drjŠ™ÉIÚyŽ÷À$‡‘-,Ð|þóA)’ûîcðå›Iﻢ[t>ûYL–Q½è"’£G~s?ùã!´A®›¤8~œä–[0ϸ½²Jvè(i·‡35M}zšêÔÔcµÞh Ö­cX­’[[¢²Ýë‘ÞqùÁC¸»vâîÝ[š«cõoõßÁªâ_$Y¿—×c5ÖXßN—ê8q⌯°~~žÖƈ½{..Òùò—Ñaˆ³góÏ'غã7ï{i¬– S;b†š3÷ZëQI”WrPµ¡Ð¥é“f1•J×-ÇøµÎ‰¢2ARŽÃ !FMö¦Yù½Ð¤YŽ’¢HȲŒjµJš•ìÔ<ÏZàû>ÂZ¬ÕY–4¹®‹. tQšI:¤Ð¦äÁ*¥ÀóÆäº,þ1¶,È’VC–13;ˆ͛ÊÙZa¢äQäB¡B¿LŽå¢4…<µ֞):½zyšã{>6Ë)t¯<”EÉ\tÝÆˆÕZŽë[²1u‘“éã ÏGë²̱G,+KKÌ¥ñpˆäyYðåP½n—82X°ººÆüÜÝC[Òà ƒÑi¹)HS£rtQ²]¿‚r#²Ôò‡ïú+.ºh7ûžr>++G BפCMÔqðȆBåHéEå ‡6×UIÉלlsçwrÉ¥—c(ètÖð+!ç>_ýê~®yZ2a‹cì™\Ï X]К±\ÿŠkùøGþ§]ö4víÙÁŽÝ»xÿÿú^÷‹¯&:%?×úLÖ7Ñ]ë“à¸)±\$ Cz}E–Lá Þö?ÞɼëƒÌ¶]Þó¾_býl‹NM›'xï{ÿ+·}ý«ÌÎNqù•²|âQ<×Òn5¹ÿþ{h»ÚU.zÆ•üå{ÿŒµ£Ç™™ÞH¿—SKP¯!HK°†ÞJŸFs‚úúY;Œ=±J ÆWÈÐÁ•.SAÀp0À¸àyþˆ,‰Ö%~#Ë Œè´`Ûöüï|”­[¶01Ñ"Ï3¤DQÀÒÒ¾_î Yž ¥$ CŠ“‹H!Ê$l¯G'ÌÎβaý&’aB蹸žG–i¼ÀA:Ð8JaÜ£ Ú@{r’/þüÿo>ÁïýÞ›¹øÒ§q×í·qäÈ#Ü{Ï7yös¯! %<ü(º€»î¸W½ò¥üÄO\Ïe—ïbyiÈÆ “üÑ»nàìÝÓüÚ›ÿŸ»ñÓüÎoˆw¾ã Þƒ´'7ñÉ}‚¿¿éö—²ý¹É!÷Þñ ª*¹ãâNµ‘“KSÈôUêÎV†Ë}Ž=J}ý Am‚•$ KLÖ&ŽÏɾÁ7¼‡ 6U¹üù/À™ZÇ`áIfhO¯£›dÄË+¸^@µZ§H3V—NrüèvŸ½Á`Xò7GÜé’œiw­×ë%ÿÙ–cýÝî€ ŽOu¢B1⇌`euß÷ñ<a%ÒQ¸®D ot 8ÿ)Û~dŽ'¯?›™Çr|ò “gíabËY¨*h•щ#îÞË=é]6}jÓ»9·9ÏÓçŸÁÎɈïð&$d:cÊc&\Ïls÷‡îFêtÕôô4Sí6n§Ãâñã ﹇táÃóÎCÅ |åfì‘#ÈÉ6²ÕÂjMr×]ˆ 0;v=òÉÁCXc ¶oÃß±ƒä®»ÑGÁÚ¶Û¥X t­F[kÔ`@P¯_Í£Óå°ý~Ÿ"I I(HÀözd<ŠNbÔæÍØ³ÏƶZàAåc5ÖXcýpétËqÇ! C‚zöìAä96 ±Õ*jÛ6¢­[QÆøMû^«§ÇN›ªB´ÖgŒƒÓ+r刄O–¥H)eQÔ¨Êó?Àu]¬-F)/ÇqH’!ZEN¡3­ Ò4¡Þ E@•¦«Î 8®G¸J+ÂqV>Yž£ M‘Çc±Æ"pF#` ÚX%!2ÆHÇAkM·Ó§&}*aƒÂÒ4%Ï õ1Ê­ 4£ä¦0())²œÎêZ9Î)Qá2/y¯iš”íÐJ’f1Ƙ§µ4l…(ˆ‡=Œ+@ƒ¶,¦’›jŒÎq¢ˆn¯ iB–¦8¾OµV¥ÈŠQÄ{@¯“#¥¤61QµiL¦S„Ðä¦ÀqCêõ*a1ì¬yµšåÔ‰ãåà†ƒ$¦Íñ¾÷½ŸLyÓ›~)s<×`…Æ9ab5¤Ú"dYh&eŽ# ¥±TT«5\×aýúõÜw߃×eåø Í:Y–ðšŸü ~é o`ii™öd AɉUÖ`!MsŠÌ§¿|Ÿzí ¹ïÞ²J‘e\ÿògðºŸ{;׿ì%´gf0©ÆjÅ —yr3Ìc†EŠÎ<¦fw³v*â'^ó&>õ÷_a×v÷¼÷·Ø·g+yÞ¥È{,-­2»>â§~òÅdEBýÉ/°¸¬¹á£ŸåÃú,/¹~ó¾wÒž<‹Çy„³¶žÅ?~ñïyÅ+ÞÀk_{-ÿáúWƒ…îZ‡|àoø•7¾“¼ø®yás¸çÎ[Ù¾c;*lsÓç¿ˆŽªXšHºÝ5š+ct²‚J ®pñ*pdë6Ÿ…{r•‡?ö1îð!¢ºËü…»q¶Ì£—œ¨J’åTª5V»}⤠ÆbµÅw6βºº‚–­-sìeåä.sùŸaóÄ&.[÷t®Úxª¾cSµ  §{¬Æ«¤YBáh­qÕ—±Ún·i6Ë•6©ÒZ2cA€ÐšüÔ)–î¾ge•Ú½û©ÎÏã_z1Âu)A?úÉ ²ýû±w߃èvñ¶o£zÁDóóØS‹ÄËËè¥EÌÊ &Mé7›ô ²8Æ]^¦1*Ýü~«½^¥•|­‰„ 8vŒÄ÷)VW)Ò¤,瘙)¿*ø.P/c5ÖXcõƒ®Óe¹óóóg°cRʲ¨qv·Ý¦yùååÏŽƒ'UŸcµßïãûþ™tih­G#ðú §Á‹Ñ¤‚z½‚µ–8ày¥Ù–eÙ™†z€¢(Gc­µgLÛ$–B瀙Sè×sʱ}©P£ žBç(G‚(˯°fļ)ç‹"ÆhS¦­)yPJ”mÛ” ¼²,KgŽt˜™YG%ð9Ùé"«>¾ç#]™çè<%Ës !Ë4«k0útYV9êeÊÕ÷}мÀŸðÈâ!Æeᕱ€!ŒBÒ4£È Ã>Yžž15àûC` ;JäJ«ÐIFµQcmyŠW*’QØ‘eÛ½ïû¨Q™W2è†óóÐ&§ZHº’«êH” É2XíwiDišRäA­BÜMÐk)ñç_`Ïž6W^q1 ÇÒh)Ò$!Ïb|7"Ëñã0 P”æPKcÑZ”,“Íy^°÷ÜóùÒ—¾BÖOp\…ëHºñ€¹ó,/w9pà0Û¶mc8,ù»y‘QÂ%ð›äÅ 7âiW>;o¿‡ ŸÁÅ—\ÀäÔ$ú§É[þë¯àÕÇ¡éUðÚäË]ÒB1;wqâqËWðªWüG¦\~qÈ[ßúKìݾŽS ‡ €JÅCH‰ãYŽ}×uñ\‡ µŽt¡‡ïûøžƒ>«ÝQ«pù3ŸÍMý4æðþüF:ñ€Aœ¡Ó'HZµ&aà“šœµnóÐvîÚAWÇ uA‘ex¦ÊD½E¯»† ‚ LZÕÑ ŠÖבXk)Š‚‹.¾˜…cÇØ¿?•Ö$ŸúÄ ,‡—¾ä)ÝCˆ” pY8rœ tÈ3C³á!e‹÷½÷·øÜ7Q©Öi¶ê¼ò•¯¤9Ñ`mu³¶N#dŸ·¿ý¿ðŒgîàu¿ð“ ú‹¤IÆÛÞö{¼ûO>Ï«^uòg¿Ëb÷ wL¥’™Ù³iíðß~çíìÝÿ¿õ¶7³cz'‹Ã¬Ñ'²=ò^BÜK‡j­Š?8'Nðè-·ñÈýØröÙœ{þ,:9½.ª1…ïé bp}´µœµy;ýþ½N‡•ÅE¢0 <<¯\ñs]·LÓF¿JDŠs&E¾¶Öa0ÐjÕË–kcè¬u)ò|´`SgÙ¨Ô­Bžç£QJÆ”¦­.$ÆZ”r©×}¢¨Rßâ.ÕÈEØl|Ök¬ñ%4ŽS!Œ6á º1irˆ_' ægŠžà«RP©B­ŽŠ'`).èɘ ;³sqrË×\=Öåà]]&¶õñóëºø¾ä”]âÑî]|óð€ô¡ 8•}›öqñÜSÙ;ss•9ù]˜aô@£ûaÄwlÈþÿMÿ1b-N£A´{Å£>BxÛmÈ¢@…Á9{¨îۇК¬VÇÆ1ÉÊ*ÅÇ?Ž=xˆ`ãj_Lõ²Ëi†¨Õ0º`xü8ùÑ£Ø#G™ÜrSÍõÙZ““ßw€”’F½ŽÜ¸½¼„í÷ÉÇÄ16Ëí6Îô4ÕÙY¢F£Dé1>„Œ5ÖXcõCg®þ«(ÇA8NY*:Ök¬žfÀœ6@O¼+;¦¼xsb´.è÷„‘?J`YŒ-è÷“ÑȾ‡–¢È‰µz¸‹ÆZC–%ãBœôÈ E â$ÅÑàù!…Ö¤yJX©€*StR8袗Ö:)Gü:1úå8uª³r|W)”PH%ˆ‡1{ ¦Å IDATËËKô:üš‡S`4ÚA€r|db±Â ]Eyñ%• Ð%%Q%@9ÏóX]]%Ib„ÕÄÉ€P£â¡ò5– 7„¥ÞR”#@JŒÕè,G`ÀQ¤EŽ?2‡ÃÀ£×ï€Ñµ*ñ &îq}—$‰q„Äu]êõ*I“f9f^g•4"”Ä÷´qÑÆbŒ$ ªdÙkeYtå(&§¦ùÒ-÷óÈ£‹¼ûݯ£^¯& t׆T«^o€Õ(ÀbqœÒLÆ~³4š”Ëpƒt¸`ß>VW‡¬¬,3=Õ¢Èbª2©8ûì½|ãžÇ¹úê«0„(t£s$‚\ âa—½OÚÛßô\vÅSXV•Ÿÿ…çñËoøs~êg^C³åE ictº€ð4“Í zmÞõοæ/þü==žòüÝÌ;~ÿhO59uäs›¶°pô³­9:ý.ES«yA%9üàÃLNL!ŒÄ˜¿ê±yϺíõð„bÿm·sÞÆõø¾ƒ•åxdZQ¯5ñ}—aÖ§ Çå‘;÷sÖS.Ä_ß`eÓ¨V°ÆpòÔ"Ež199‰. J: ñ0!Š"”´X+ÈÒkìϡټyžååE–——˜˜h’¦)Ö€Jzh‘åÔ£*A¡•B¹–Lç(å•er¢ü¼çyQÞpŠÏ÷(rðÜ*aPÇZÉ'?ù9ÎÞSçIìE›¾/é.¯°y~š$ë!$¬¬® óŒ³woâY×¾µÅ%Ö:+ úǰ¬U[$éz“?úÓ·±cûNž:ãÖøÀÿ–?y÷çùÃ?þ)žwÝ Y=µÌtã\nüâ|æ¦ k!·a?>‡{„]zW¼æ…ØŠ`Qt@¶Èåxbâ ÁÊÁ£<øµ[i»>WÿصøO:âÐ=YV  C–¥QnOƒÆ‘Å““­žÂÝ4>q5ÖøZëÀi@ñ(&ë’åH}áâŠ)=pÃ'–½*%" Q:2ª°|RsðT‡éÝ ÛÎr˜pÝ“?h8ùˆæ^7e›üá/°swƒ§=ý —ŽàzúE^Žû{.\¬°dizÆhRJ¢uÉ|M“CQh¢©&[·ÌsÛm_çÊË/¤Ñ¨2HL:äÚk¯æïúCÞøË¯¡°VP–z½†É ÖÆøA€Î¶îš¡×“Üs÷ý¬ßv×½ä…üõû>Á§?y ?ýsϧ—-£\ÅêÒ2Ž7MœJÞõŽ¿à­ÿýÈ­åMo|:¿ñ–ŸB&˽.µj“dÌÌÎ…|ÄÍÒœJTeÐOi5&‘ND<¸wÂCE>Ês@ø<ëÙ×òÁ¿ý;¶]{ µHé‘ Ì´§Éו%s÷¹¬¬¬çš8N¨ÕøAÉKEH+ôVÖ0YQ„Érr 2ày’,ŽQhŠ<'¼ (‹è)ÕzO|âFÖMÍó¤']À­_?ÀË®¿ŒÕÕ%· V˜hE »+ )™ž¬cÚŠ"—ÄÝŒÎpTF¹‘ vp½ i2àÜsöâ8ëgC>ý™OòÖ·}€W¿ú"^üâ—¢µ!PunúÔ×xõÏü* .T@aƒ ?ó£ÉŸþGÚçn ¨x¨vƒ¡8Îôì Í Î㟿…[îø&»ÎÚÈîË.FMn€,!¬ÅèAŒj¶¨NL€;Á½YšPo49qê8³³S$ÃÁ¨Eã{.…6 ìÈTÕHébŒ"ËR´6´šm\·\üñ<ß÷I’˜¥¥ešÍAà!´Û­ò¸ª3¤2äyŸ,×Håbl„©éöWÈuLšÆH2ebÒi²~!1ìœ+¸ä’*wܾ›î¸ä¬û;|–&«|`áîì§êÔ8gï<ùÊ-äGg1ÝFT0äwé‡åä,±Äš·Êžö9Lø¸Òýw³KÇ¡ºoÞÜ,½³w£„ Z¿f1@­†Ú¸‘ÚÔBIÔú9¢V‹`Ûvœ™uåßüó÷ÄCò¥%Š“'Âé™Ù¸&aá8íIL³Åðè1²ÅS˜É)Z×=ê¾}¸““ãcÅXc5ÖXcõÄ«žçç£ó^¯wfÌhmm­äS¹9ÆäxžƒT`ŒÆ¢IÓ­5QäÓé䬭­Ñ¨7½–¦­Þ¶ïa18Žƒ”–B[ò<ÇQî#=‡j5@÷5y‘’$G ´ÑäY†És””xž‡1†4IH“äŒI¥T™T5Æ€4 5Æ¼àŸØc¥™eRá¹N9úÛôãJ*œ uOÓ„,IÎŒkgY†5†Zµz¦ôËóÊ×RªÑó(M_Ï+Ó½J©²‹’{¡„D!PÊ%—9+ÍÙY¦¦Ût‰æ·ày®«ÀXªÕ?ðÈÓ]deJØ‘@Ž”…ÁQNɘ•K–Õ•S4k„¬°zlvÐ`µ;äóÿx3ÿñu/£9±pìÂdÄÖ¢(Ó¶ž«(¬apß-·‘%‘™Ük«=¤ã¡“”©©i|ðažý¬+YZ:…rCz½{Ï?Ÿ<ƒ;n¿ƒsÏÝë„©&K3ÕbnËF`úœ­e {%ò ©Õëhm”Š0 IÓ()ßÊ:Žã˜$‰i6›A£¡ÐšF£Mž¬­ô‹ ¹oÿ7ѺÊAºe YR Getn™frsÂP¢\‡•åSx^AÜcëÖm€Ï 7|ŒaÜçÇ_õrZΧN‡Bar˜ß< RÓé¬xUü «,¢âá¸Rit‘Òhmá×~õ7yÿû?ÇDÓ¥ÑlÑï9~¢Oµðú×ÿÍÖ&tžqË—¾Î‹^ö“\ý¬ yÁ+®æäÉû.-°¥=Çó^ø*nýègèœ:B¸ZÃÆÐU}¾rÇílu4·~ê3ìø0—<ûÇØuÕå“¡ŒFkðê´ëÓHmºX["F\WaMŽ-4K'Ó¨××­% ½^—jµ^–³é£Ë";¥¾ ¥$‰“25/ËÏèéãçùÔj5”RgŽP.¢Ôëuü@Ðé­’¥Õj“,Kq¯L![ƒµE'=Dž¢*>Êõ¨TǶêXcõ­Ž’7D® õ,‰´†BôöîÃ!¬B4ÎÄÕ ÔÔ4N;Ä]ê!»}Šck`,­ÅŒ‰å1Ñà V|éá!¾ó8+›xØ GxXé”åOÒâ8%z)|”#ÉÒ)$eãºïûôúebU¥rThf×uH’’…êy.qœâºejÀZÊb«<Çuü[eØ¢@ù>Òu°X’8&hשW«;tˆ™]ç`Ec)ЬÜNyŽ0m Gá¸NùÚ$ăéz(§äÄ Z§DUŸ4 büh‚¨>Ã{ÞkÃsžsiÖ¡^õPò$+pý€Bè÷¹/"=…±ÍF•ãÇY·a333¹çž{¸øÒ‹é¬œÀK®Súý˜Vka<á“d}^zýu¼ïo^Ë·ïçÉOÝCk"d÷žÝ|ø#7ðŸ~õ— +ó|¸Ãù·¹ñÆ[¹â’oûݟ墧ì¦ß]ÁRVô ”ÇwhML Ã>3ë¦6±ººÆ¶-[@å@’öÊ%ôŠ>ý,¥Õœ`ûSŸÄ§nø®­ª€ƒv=†:Ç KÅóÉâ*;÷íå›·ÞÅæK. X7A_g¸žÂ†$)÷ÍÉÉ)ò<§×ë¬X ŽãEU<ßÁKàWè÷ú%7x˜’&9•J0ôËd¸£ð\¡¡†€ Æ ÝŒnÖ#Ï-¾l! EŽ)aT!KSN--“ç%ãsË–Üð±ÏrÙå;X¿élNþ•¨B‘ÆLÍÎÐï ɲœ$ëÓét8ÜY`×Îsqœ ¼¡sÊ<ׄV°av;[7àà¡că”õs[xÁ󝿝xs7rç÷ðÙÏ~ŠßýÝÿÅå?²—wüño²n¾ ›øÊç>ËÌÜFNž¼Ýúi<ÇG4UGò¹†üê-ˆC ¯¹þ|þÃÏÿõ-;ùâ?|’}æ«\õ£OãÚk^„PÝžÁ%ËQûjµµ‚4Éð+qêœ)Ÿ CŸn¯4¹]W‚d¹Xa!M3bÄž†( FéâJ9PRÜPJá8e?K3”’ †²~B¥R¡Zq(r;â©:8µ ä¯ˆ‚0Œ¨6jX«±H²\3&äŒ5ÖXÿš¤t‰Ây¦À®‘¦'¬Äjßic•ÂÒ!€Dtþ¿£„×E4[¸“u¼S=túM†+‹ N-°©¿Æ–ÚzN©¾r$§>FR½ƒ™¹‹fžÊÕÓÏâ,÷\—`9“X º\ÿŽ»†,–°ªWÑ¢ PA‰ø÷8.2ˆ¶nùïòŸ¶Õi·ZJ¼éi¼v»D:HY–‘Âuñçæ°½½Üuê·V}èÕ]ջ®½÷ó>ÿçÁÚ%®6hâ¬ÇR ¤Âº’•IA?ë1.JTÔã¦ÝÅŸþéyàÏË–m3L&Gé$ž:/I£„bxÕ JâU›Çë­Æx ¶ÇãѺF£—Üÿþ|ýë×ÒÔ½^FÓT„aH>qÉ%ð¾÷}€ÿö¸ÇÑ4%u9d¦ßÁÛ g+ð)"”ŒØ¶{W<á\ó·Ÿãô³Î"‰S~å¹ãÑyÿíò'`M“žøl¾ý­»¸ì~[x×»ƒÎLC1:ŒÍŒí& Ç–Ž ¨ #…T1ÌFY6ààáEŒ14ÆÐ˜ Â5¤* r%"7t¢Yºéc >€p&ãÄ“wñ¥÷½Ÿû?éiT“1ºÓåh>F75ƒ´Cà,VYæwoÇ_w=‹ß¿™™™{ C‰­çÃáï=ÖÚŸ¢™6»³è['ùx”SW†{«¤§7qîÆ‹¸p穜;{»²ÝdBcºp8ò¬XÏê $1üïêbÁj±ÊÑÉúªÏ¦l‰þ¿Ì­úOÄUüÛB©õÅaˆš›#ºðB¢ÓN#Ù²…ôœsQô³ùtµ&غ•ÙË/Ç­ìGd’ø”íˆ0˜~1L™2eÊ”)S~ºÂªÖzÝ]Ö¬—-µ Ø7n$I†Ã!q3 Èó1Ît´Óg"&в,Ã{O]×4M{†!?.Ʋ¶8›¦!ŠbŒ±ëÍÚÖxânŠ£u¹E:DjEY–Ñ>Nˆõß+!‰ã˜µá*J¶Ý~ÝEfL›ù©”n]£yÁp4DuU!dëz ¸q…ñã$pàÔmûwhT†!EY’ç‚0 ÛípðàA–——9ëì³ Ã€ªªÐZ£u+"7ÍúkÔ¬çË*…ó¾Í+Õç Ô¥ˆ"Šr¤.d]¼1lÛ¶…Û¿ó=œ­±BÚ¼·íE‚ôh¡¨«câ¸uº:"Òc¨L…4ÖVèÐc\MÒé0Ø´›¿þà[ùÁ-ð²×Þ“ ö€`2Yc´¼Â–…í(!1 xA ÚÔÆ10Ö0ÌÒét˜½8eiyĤÌéX]]e¸²LÚ XY1;ØLc%|àxÃ^Þ½·pÎ9gpd²‚óŽN·C]å(àPŒ)xêÓÏcýBOغ=ã¾÷»€+Ÿ|žúÔWràð*{÷,òØGžÄŸüÉëô=«Gï ?3ChF£ «“5„’H3)*²îee¸ö7pÞù÷äœsÏ!K4Æxªz GNiLé©G%¶,Ûš4’œ¸ûÞÿgïá’;ï \ØLÞ”iÈÊáCd¦¦“jê.t6Øuò Ý»ù3O……¨Qö¸º-‘j0¦mŠ¢˜ ÐZ#„ ,KêºnÇÎËšNÖc\Ö\í×¹øâûÑGU5dY†N:°:$S&ù*>ŠéÅ}ÆaÒEÙAÚg%ζEVQ”°2\&Iû<ä¡?ÏÁCGOrÙý/¦¬k¢ aíè*y>!/*úýA$Y^=ŠÔš­[w`ÚÜܺ®ilIW+6oËX\º‰"·(Õ¥;3K^ä½û>ýÙ/q‰ÛxÔcOä9çÞíLV†wpèà>¶oÜH‘öì=Æ[ó\N=‘Íð›¿õ*n»ñë¨Øó”G>w½ë¯éœ½Â–³N%/Ög[gÏâý1.zã;ù×¼'_þ,ž÷K÷E×a¦2SS—xA–¤8c‰“ã ?øÁì:is3óÔu+ÆIJ #´Ö”e’!Y/>þ}ÓF}Hʲ È „¤iL]WDQØ:‘(j÷ááZNe˜Æ³|ôRFÌÍÍSæ%Aà*B¢¢¦OƒˆÆ8êÆMZS¦Lù_JŒ£uD–Ícœ]Æ™oòõ…t3«ØJ`üÑKí2°B [Wë¿ÀÇî ðM#(Ç “Cz¢….¾Ù ›ç‰ª€3-Š| ¨vJ6Îw8{p7NîœF$ÛÑò4ƒp=±ÉµëÎÿ&?ÞŽÊULê1Ëå2x˜fÙœli_ÑÙí’ÞçÞh¥‰P7þìº?…@t.½߬ T…˜ÛrÜ…;eÊ”)S¦L™òSV½m/ÔMcðΣ¤¢©kö<À 'œ€ CÓOZaQ)AGXÛ`l @Q”ÔuCgäy;nÞévÚ1xkñäz¦¡Òš²“Ä!RI†ã!a&M] TeM]UÌn˜‡õqÿº¨pÞ !q”Ð4ͺÛV u@…!©ëºÍ2õ‚4é’õúˆª$Žbð%^&EŽ!Ni‚0 b"òbˆ[/øisJ-R ƒ>“ɘþLýwícÏž›8ýô3XZ^E ˆ’ˆ|I—#¤Š8éô38ûŒßøúu,Ìε¹ºVR5í`¢§ª „ΈҊ™¹—\zŸþÌW¹ê¿_Å·nø(ûö-ò¥¯ÜÀ%÷ßΫ_÷<¢Ø0>VÒOv1>¶†Sc*æçºˆ Ï]ûö1?¿I¹†óÓ4|÷{G8zt™™…ÜF¿§PÊ2ž â˜4éF¼ØXQ6#’Ù‰sœÎ9|õÓŸæ~Oy*¡tˆ,&Ù²‰dT²|ôLÙ4è3·0Ï{¾ƒsY–aJ Í ^®¡UHfgpÖQ;C+tÒÑ!BÆ£ ƒÁ ߺþ®¼ò÷øÀg9唓éõ{ÔeƒäD8¶mÝÊÞ½‡Û‹‰¨Í÷Í¢>aãªßhÂhŽ(0Äé e× »)Ê’0 ùîßå”ÓN¦Û͘Œ†Äa€tm4ˆPucI²˜4î°tl•þ`!4RI„Ô•e’ç[¶Í°¶š'šÕÕc>v„m[vñŒg>Чýò£˜ë¡ Âqë­×3“%lÛ±“fy¢Ùü Üç²3øÝ7¿›ýÇ*ÆÇ&\ù”‡³û„‘Õ<ïÙÏf’ïCwf±á•mX­1Pާ]y%§yðÓY9z+oxÓ‹€kjD”h‰ó’ñxD”ÄL&5EYpá…w§nj¬õDQÜšÊÃy·îÞM°µÅ¯ J)œ³ŒÆ£6*% QJ µdm˜Ç:ÔeŽ”²]„ 4“¼b0;Ë×>ö~ï÷ÿ‚+®x8Ï|îópMÍpi‰$ qÞëD‰—šN§7=jM™2åS\]/÷¤ƒTN†sM; #j¼‘—‡È'·ðH'&¦K‡pÿì±=Ž‚199n]X5F0ZJ©–RÜš%œK û§ãU‚r‚d‚ôø¾-¹+¸‹Ú·±+Þ{„ðë1+íá«Û…4ý×u1ï’©ºXei²„Å2×§ö~2-5åß-Tª4%=ó̶; Š àgõum݈~„üÇ£.¦L™2eÊ”)SþHS5øÆI ½¥.&ÜrÓ¸óö[é¦!¶™FŠ ÐëŽÌ†º®1 IDAT)òŠÑ(g4Ì1À9…’ qܧªˆ©;T äuCm-µi…“ AèèÏÆ¬®ÁØšÚXÊ¢F¢|ȱKä«9å¤@çjj—ƒj(Š’6ËP†Š,‹ E]4M‰15iÓëgøÆbÑ!„1¦2LWÑA„Õh/ðUƒN"Ò™A"´¦¨ ^jÊÊP7–N¯ ÒsÁç1¯1¯â•§²eS¢¢€0ŽÈ«‚IQ ‚€Æ:ʦAê4éúB§)ª› BTŠL't£Œn6 ½ œ|·{°xìTãDŨQú’ZXd¨ÉÇ3ýyNÚu*Z÷@g4RcUJo yœ‰ˆ£ÙV —’þü‰|ÿ[k|ïÛûxüå²y!!v†TÇô: ôg63©<£rBcÆHaˆ½ qÙXL3"KfZyê¦`2Q7%J *3ÁÒÐéõùæ 73»°XFÅèhìapÙÅ\÷õ½lÛr:Âõ˜L<ýÁVb·™€9”ŒÒ‘— +£œÇ_ù8>ü‰÷ñ?^û{<üA¯àkŸ»ƒHÂñƒÏæOYèÏ2^ÎY^^e49ŠËÄ©E I>–¬qlßz>‡5ô:;ÑjÀußø>M gž~ “¥eÒ$¦15aPæÊ¥ÄÑ ¾¢ j<ãÅ!$}κè"[1Ü,`iù6z½k ÑÂ&&F0¬ [.º; =®ÿÊ—˜•îXC3¬ñ¦fii +é`€“QÔ¥)<ÂiºYï$Bx)Y\<ˆ5*ÝÀ'?ù#¶îÚÁÒð.íà .]öC&kË0QùÙ݈·}̱Û48ãü“jB¯·@‘7t³–Ž.ñ¹¿û4çŸ{£á2Ö7­1tÒa0?Gw¦Ïê°À1¿°Ó´åM¦1ôº=6Ìod¦»acŽ£|@vN£<¬.Aù’™, ™ŒY9t„ÉÒ*3ñ ʅݘ@‡˜Ã Ò‚§¼ê—ùêÍÇë^ù4ÞÿþOsåU¯äÈ(@õúÜvøG¼ôµ¿Ë5﹞ry#=¿…³»»œU³È}p:o¾úù|ì›#¾sýÀ6h/@EŒjCÜïeÎÕHa µb¦7ƒ’1IÔÃ4àl›í¬¥1e>d’¯Q”«Ä‰ ¬ÖX][¢—uˆƒ Í)6V4dý;Œ©Á9Â0ÂV5Ψê’3Ï9Ÿ½·íçw~ïÏX[9̤ZDFÖQªÍMf˜“d]:ó Ó£Ö”)Sþ?¢"#Š6’$ÛHÒèd"Ý€: å?¾ ©ÛüUéA– ‹pËAéRÿä~"@ BƒL ‚YÂxQ´lB6ÑÛº‘ÓOßÈY'ng[g3y“³o´}ãÛYjŽð!B’ÆEÿºŽgÃh<âàè ‡ËÃLü„$JÙo$SéÛþŸ¡UjM0˜EõûÇ?ûY¥R¶–ç(ƒ°2œ¾‰S¦L™2eÊ”ŸþÙ¶‚N–E©QRÒ¤) óó|ÿÆï¡”gÛ¶­X'¨ëçD›J[Þb#L"¼·¬­Ž˜Ÿ_€IŤ*±N ´"M»ŘÊZ|U"ZQÕ)¡7“!„'MS´ ©ªg=I“ç%ib«vT`<ÑéôWYëp¾-ŽBøõÒ‰kA“׬އÔÖ‘¤¬³8!ðRâH'ðÎSÕy5FëVL Öó©œh³h)i§C¯×Á¸ç$q¯G)Dm @ž£¤¦®Ûˆ…n·ß>Žsëe ’Æ5T¦© ƒé®¶x (Á¸ª «’@xŒ74N`=à=ÒxðgEÑP:ƒ—’N·NaÇÂüVð–Å#+ô!EÙàu‡¿|ÏÙ°Ñóȇ=€åý·1èôXÑ:A:Šœ1¸¦¦®mÛRÞ$mÀhT ^’¤ñz‚CIO Î<{_þâW¸üò‡ž™~†D2\šð‡<†ÏöÕÜôƒ=lß1ƒŠ=GÜÆLoÕ$'Œ !“±ÁŠ˜Ã‡–Ù·¯ä•_x'ýN;ë$^ôÂ'ðgïþ¾þå/sÖi§²:s‰›9zô.òɘtn'Õx…P¶edKK#æævP:xÙËþ€G<ì2N¿ÛÙ,º­-*P>|ùùMT¹¡PŽv!Ak²(Å'Ä›6²ý¤]\û±ðà'^NOZl9Aõ2d’Ñ­4¶ª`ÐgÃ)»¸é‹_匽wÒ?÷òcÇYH¤È4Å Áhe‚¢("ÔoÚÏ¢Š’8$MSDRMj>ð¡óè_x,³³óŒóéA¸œÅ+Ã`Ó< ósë¨L© ]€[£¨k| ˆ|Üf;OvÐ:`m8dㆠ¬,-qîÙg’&­+Ö[¼h·)КÁ`ðâCœõ ×–‘’´Ãìì<Æ4Œ'#lÓ–bôz}°bee…ùÙyê² Câ B E˜D£‚»Nc¸÷†‹«ÜûÑ?OYEg=žÿ²qú¹§ðÐ+_Æ›¯~ozÃo`„aTöøÃ?ø ^þëW3»m–»Ýëî}ñNúóÇù’_ü¥ÇòÞw}Ž~ø#<î &N;LŠ‚ù[†m”ÉËߤamuÁìIgX»î€§ÍPþ‰{ÊcLûÙèd ¬ ²8IAÒ¬x¤H¡¸}ï’8¦;›1;?Ïd\233KÁe¼„N/¥¬—‰¨'ue˜If¨W Žì_f&͈wN\S¦Lù äFºÝ9:ìHmÃÄz _¬öëWH2º¤d€¦Ù­0®nVPÇŠHüËÍS'ŧ³0¿…ÛF·±gí¼÷lŒ6±UÆ”Mˆ×žÒI ³îXý'‘Þ{†ã!K£%ûCÈT²©·™MÑ&fÄ Ó\Í)S¦L™2eÊ”)ÿEÂjÕÔĤˆ¦a<£N>ådæ6ÌSÕ5‡fó–Øº¦ÍÒ’„AL¶#®UUÓ¬g“®­­âœG)M>™à½k[³KÑæ­"u@œDàMSÒ˜S‰ã XŒ5h-HÓ”².tˆu5Ee”e…Ôêxn«µ ‡Rª@"„Ä{ßÞ¬! úý>Ú9òÑ/Úçá¼Áúš *+Ò,,ÖúõH6›ÕY‹ hãÊb]d‘¸¦½àh…¦€0 išÂ‹”ív9ç¨Ë×Ô¨@ž¦©Ñ¡lóÉê SV¤2„P“u3šª@YC(ÁZƒÔxO*¼£mG¡…ñmdÂÑïϰÿÎDÅÌì€áp•­›Oå†k¿ÁÇ>õa^ñª_dǶ-î'”Š@*œ·¬.PQÎõXß^pIaœ¤Þ€óoƵ¯cQäÔU³¥'Ÿ´ƒ·¿õV&“µöLv¨K’);vžÈ¶m»ùÆ7¯ãn?¥cGpá˜a~+î&ŒIIÓMܲg?ï|çŸó7×|„¼hˆ$üÚ+Ës®z©øánäÕ¿þF>ùñw`ŒàŽý71˜YàÆoÁºŒ»v’—«Tn•$ÝÀxT1™ yáS^Ǿ; Ïøå‡1\<‚mÞœi,ÝÎ8Iš*”’TMƒPž Ðh¥(Ë‚¤ÛÁއìØ}2·Ür ?üîœñÀKs’þÖ–'4yÉì ƒo gœNzÃ÷ØÿýÒ?ëlâ(ÄŽ#¼TXg ã@i´÷J­ÇOx¤pxoPAL¯·À_½÷/Ù×+Ÿv9ÞI”ñ4X—c„H¬ðÄiÒ“t2ÆÞ✠MŒ„ÊZª&Ǹ”§,F$I‡(”:p'Z îqá…xgÂ!R*êªÂY{<¶mÁ ¢ukQ%"ÌÌôGQDQD§ÓEJE’&:t¨Ý'ƒ°ô°KÄg?úÞòê7pö†ˆÑ–m\ºû<Òx³8âAx(¯úõëùû¯|ŠÉÒa²0ãÅ/|,g\ô ì½ù×~çZnüÑ÷yë[ÞÉ«_ön~î»xÛÕ³ž÷x~ø•÷€õˆ( ’ÉxÌÍ7ß̧ŸB7‰@‡Y\&é ^!D›Íú÷…\/ŸJÓ´Í“­Ú‚º 1u…3ŽN¯Ò´¦, ´ä͈( ؾs;kËK$Þ+L#Xذ‰Ëî)‹‹ËÇs®…hÈ‹ ËKc|¯anva­È‚þô¨5eÊ”ÿ ×Ë®þ-mÏé?ÄÀOŠŒD³³çpø¨ÇzزEeÿüQC2gÙžb†Ã ‡ö¾·/"ƒÎÇí5^i«þøë⯧*+Œk˜Kç˜Igè}:¢C@ðoaÕ”)S¦L™2eÊ”ÿr$JRÛ†Ú¼ Ï(ÏÙ²}§ŸuA”2Îsâ8ÒXAm^ t%1a`±XoH²ˆ,K£¥J©Ö™¶^‚•$É?8EÖ8ë1¶¢(‡L&c„ð$i 8²N¥¼x«tŠ’1Ö´NÕãâ©k³XåºÌZ{üg¶¹‡að“‘ ÖmkÛ2+Ý:SÃ0$ƒãNX!BJŒ1ÔuM]7ÄqB¯×£ªê6ß˲´×Ž »ÖÝhCŠï}+¼:·~ƒ÷‚ lµQ •ÀcÒ„š@«Vè3Y/ceq‘|y•À:DÓ œEaQŒiÈó1ÆÖHé)ëG… AuRþâ=×ð¡~‚É$'K7Sä1ïùË¿!ˆ4÷»ô\B‘¯‰Ân’xȲŒn’' Q–v:d½.i†´Û'ŒfÐQ¡bœP¡ˆã¸ÍÉCiñ¶bÓÂÝ,âðÁ3›Ñ*¦i `1vÂÝî~:Ÿþü'A(T0»a3V*œ 1^ñž÷|˜gþò¯òÖ?{?eaxé&Oyê}ز¹OUÜJ]/óÜg>—~§æý×|"¯Ø°q“"çîÝ‹ÍÛv°2£’eí©kAuyË[ÞÆg? /ù}9a×Ntè™™íÒ45++C Ãûö½3¶¢jJšº¢1uS¶ûHple ’Œsîu_ýòµÔû`° mEÄ,tg© ϸ¨avžsîy/Ž:„¿åd'¥ª ¦qXg±Îg B [SÕCj–ÅcGñ^£t—?|ãó°GœÍ ;gðÆ!ED C¤npÞ€‘è0À ‡_Y&H4Ò7XSá…#J‚HÓ4ÖÕHI3™ŒÐJ²6\á¡{0A¨A(¼7L&CŽ;‚Ö­ðgŒÁûÖþã¬ã™™æææðÞSÅzA Ç÷}!Zk6mÚÄÚÚ‹‹‹L&Â0$Iâ8e0¿…û\ôý˜Gñ‰/¼èÅÎîÝàå¿ñ*J'©¼áO{<}Í;É6o¦©l3¡œwÞžû‚§óúÿç×ùû¯ÿ€?~Óÿ ˜4|þ³Ÿæ^çÊÝï~>4†r8b2Éqúý‹‹‹¬® 9rä“É„ ˆ(‹€ª*—âaØãÏ·išõE$…ÄhO†\ýÖ·ó÷ !û(‘è½î|[Ââ-ý™Y–w%‰{ 2žöÔ§óÍo^Ïž={ Ãc*â8$5¡”·ÜÀ¡ý?D4kÓ£Ö”)Sþ 0óOný$ª¶çU03 °¸èÙ»×s×]žÑ¨]«ýg’­PlN6³;=•³‹áþ”ï}o‘åòÉ–ówpÇdûÖöqÇhwæwpW¾ŸƒùåYvK4QÃÖÞVNÈv1¯æ‰‰§¢ê”)S¦L™2eÊ”ÿR4J—%qÄG”$lݾƒÕÑu¤.:ˆÑ:FOÓ”Ô¦ÆÚVÜK’¶Íuee‰-[¶àñŒ'c‚ ¯Ö›Í…¨ÛÅ[K]„ó(­èvúXS¬‹¡ B(u]“$ McP:„ƶMõ^"”$4J ¬mËc<ž¦1ëŽÕ6ª ¤Ž±n•ápHã=éÌ€*2ÉG¤QHÇ4¥A ‰Všq9,YÖ% Ú“tïÝ~Âx÷¹7:œ#éhÐ{B¢T‡,íƒMxýë—·üñWyä£vò¼«®B)ËêÚ1ÖÖ, fijpÆãtƒ”!–HÎ{œw¬­­ôûè8â„ù Üëè×}ôï¸øùÏ¢+Ã1½îT1aŒLÁ–ÓNáàö°çÛ7pÊ »°uЭ"ŒwX[cƒðM[ƒl(°¶a0àmÊ5ý~¾ÿ}xýï<˜(v=°²´A…5aÔ C´yI'¡\]"¬KêR1£ñ È.N§Dqˆm$ÞZ–²Ì CÉ®];8óÌÓX^ZÂ9ƒ‚õÅ%NB”h…U¥Tëò®*м$I¢$^/ Xk(«‚ñØÇíwAY–hè÷ûëû‡@Mã,Y·ÃÃýpf –‚_ùûïqŞĿøpûKãØê-tÂ.3YŸq~'Þ,Q¹ ‚€ñÐsã _æäÏç¯þâo!µºåG8g@j¬…cKÇØrÂnú½>ÆŒGc„DIœöÑ:x‡uk%¬;ä“$ÅÚVDˆã!Ö×X,ó›P"å%¿öF\áyW½!$MS£T„5RòÑ„ù »øÆµßâŽ}‹\ñ¤§²ó„“ùôg>Ãg>Âfç¤aJÜ›cíöïщA ’éQkÊ”)?“Yss'°gç{7:îv®à~÷SDÑ¿|¿¢8rx†$Lyøƒ¶±e§gvCͲX¡×ø±‡Äv"z²GJú“ò@¡è6biÊ”)S¦L™2eÊ”ÿÂj”$yõžPIŠINcLëèt¬kŸZaR!R‚Ç ¤'MR¤c sssÇãòÊ0;MíÐZãœcyi‰,Ëèd]šªZÏp´Xk‘RàœÅºÖÙ(¤G…š¦1ÄqBm<Ö ðëcÈ¢uÃJµqm›z]…1A T;ªm[ì£(Bƒ-rœw4¦u%ÞS×í»÷mjžO â°Šâ(EÁh8ÂZÏæÍ›IÓ¸uÜE]œst:œõŒF#´V(¥1Æ¡µlÅç¨rK]6¨@Ç"‘PÕ5UUè€( –«Œ&%3Ý.ÃåòÕ!}c1uMej¬%Yœ!EHYUøÊ#$h C7%'²›o}ç»Hbꫯ~G—à¹W=˜ÕÕEºj†:/øË÷ý Oÿ•çÄ!uU„ε—-Îû6‹ÖyŒ-‚ ÂZOUUà 2R`¼Ã™Š$ì"˜Ÿ{àÃùðG?MÓ´N>T”õˆÜ”œxÊ6¶íÜÀ5×|†<èI;Zò§o{?ï»æ£Üü£#lÙW>ùQ\õü_AÐ`Í~³÷ºçÝøÓ«ßÍË^ñ F˸×Ewçì³ïÁ{Þýy^ðâ'âEDÑŒIz)ùšaváDnùáí¼ôW_È?{3÷ºhß}Ãÿd2†ž~¿ƒ±5e^cK–ô0uÍ8_%A…Â6jÁX@¤1 ¨‹a g]z¾ö¶·qû׿ÉÎK.%LŽ-Å5a'fh I'¥³u#û¾ùvØÏ:4¹i…k%aˆó†4Ô¦Äy‹ÖŠ¢hdÀÇ>rç ^py~„ÙÙšºAÊÖ1¾-Q@ov@‡ %¶,qJSÕMî‰:8%oyQež8Ò„¡f8\Å45A (ŠŠ¦vë15£µ!RÇÇý1Xk)˲ý<aE!««+ôgºÜ~û­DQĆ ð¾u“[㘙™AkÍh4ls‘Aˆ²áÛßø {ïÚÏÇ¿y=÷ý…Çóü翈sN:•c‡ö uB¯;‡Y›)M¯!£ ÕœŒ˜›ÙÈsç7¹öË·qá=6òÚ×<—3O9 ð¬,.‘ 6ÒíÁh‰bu• ‰H²Œ ÁyêÚ ¥¤±!ÖsA«† èИ˜}â“<âQÄù^õëÀi§+ž÷üGLî¡^áä“w³°°g ÁÜz1©d›[+ýÞ,ee¨ÊbÝ•A ñΰ¶¶Š5†n·CQç9ñ¤3yëÛ߯½î}ý~Šq$tº (Ù'Ë6ðæ7¿—¯}åÛüþï¿÷}à«4µâA?w2o~ók¸üò‡qû¾o¡ä„<_؆……üáï½Ç>æè°ÁXÃ)§lç%/}#ÞótN8i7em‘*%M6ðÃoç¹Ïþ >÷Åñȇoã­oû#6mÇš‚  Çk$qÜÆ7H÷¦ Aà‘ ’$E‡ïQÒCœ$E‰’8k2±ŽØ·w3³sX­)kƒo,Ý EF ™„,Ìàè2îÜÏ®sÎgipŒÆ#º S×h)±MMÝTH%p ÏÞÛóš×þ ¯}í/sÏûœC1Y!”xÐCª¥b”L \ãæ¿ÿƒÁ j×Iä£éu¾ŠìuÐqŠ6 [ év3d£µ†0 —3A@’ÄH)©ëë’8£,k”j5Œ1€hseë¯ë†µµ5¼wtº¬5dYFÇm™œy‰µ­ëõر%Ž=J(òj•®«9|û^œô<ö‰WòÚ׿™7üÁßðý›¾ËÙ§ŸÍ–Á ù ø¼âÐ-?¢l2˜É·8—òÆ?|7w3\nøð‡>N–ä«G¸Ç=.¤öЬ?ËêhÂdÎ4TÆ!U@Yú›ó[3Ž;ÂÖPŒbfû;8º8äSŸú8ï{ÿ'¸ë€å®_bÇöŒç=÷r®¸â!œÁ˜æGï#‹#´äUÎÖ9ÿœ—Ýÿ¼êÕ¯áw^ÿ†ã5vœ´•¾ôQ<çªÿÉç¿ðW,ÌŸÉp-ç oz3ïxÇ'YZ,yÆS/ä¿¿è9ÌÏ÷X]Zd’ؼu"|â#â>÷¾ç*æçpØ6 ¡j¨ªãÛ3êª! BT Ñ*­±cãÝÎãºë®ç†/}{>ò!ÈTÑév‘GÙxV]ÎÆÙs;¶ñý/|‰·ÝÊûu4– IDATì§Q®£ŸÄ;r‰Ä†‰n÷‘ɤDêˆ[¶ñÅ/~­—Þï"ÊÉhßãɈ0ñÄ‘¤¯’Jè é|ücŸåÃy3'Ÿ¶‹ý·"ä÷ºˆ¹ù>IÒA°Æ©§îà%/y1UURLrBQ”%™¸ñ¦Iû½¶(lÊ”)S~†icR`ãÆV` `uÍc ª Û•¤)ÌÌ„„^ææqüOZT»¾?Õ|¦L™2eÊ”)S¦ü £MÓÐív ƒç,u]ƒot€”­#É4m$ÀÌL!ÖUå„ñxxz½ε#Ãe]ƒ°­`©i–…Ññôá·³yc—Ñp‰µ•ý$‘' b´sàÝHSצ®yéË®âÉO~·ß¹È†–×VyÁ‹_—¾zï|çû¹øÞ?ÏUÿ/{ïmYU§{ÿæœ+ïtöIU§"•(RUQPd% ´M´¢¶¨(mh_Q_[ºµm1` b`k‹EA X¤"VÎuêì³ãÊsÞk[}ï‡û~¸cô;ìq×oŒóáŒÆÞ{ì¹æÚÏ|þÏså{Ù±cšZ®þ»³xç»ÿ¥5»vm&ŒzTkÝv‡Oê“,]º˜±±Qž}öY&'GI¢~‘¯ŠÂ¶-„Ñ$iDž¥XJ‘g)Z Œ1$iFÒiVœþ’óøÉ·ÓŸ™eljiI?E!I£Œ¾“âÍ›‹7RcdzO2vèR*¶MfI"µ‘q@ÇÔU„U'É àóÌÓÏqÙÎbÞ¢%ôfŸ%ŒBÈöR«4AxEî±Ê<·Reç¦MždxN€-û{9UŒê[Êö±mAîTüTÿçh’DŒáXƒ%-¬ak}¿ßæúÅ:s탅nÅëÂA4 ‚&–U¢ø¾ƒÖÏõ‰¢ˆN§ƒR6ÆZÆÈ~¼?ÍÎÍY|Äl'áÜsNaót‹6ïçâÓÏâ ÿò-6lz˜Ïê£H Q?¢;ÓGø.¸Ùý\xÑyüÕ[>¢Ešî%\ýî›øã#¿çŒåGá›dÕ‘S©U OIãËHKÑë°-C’ÄDÑ!|´ÖC§.ø• BÚè$'Ë4RútfgYpÈá<ùØFV¬\G¯Ûfݺu<øë{xÍ«.åu¯wÜþeÆÆRiŒÒí®þð¸âíW32Ç·šׯgÿþp,Ãlg–~'%<ÐFYsW,EÄÓP+7®’’’ÿky«sç{B1M$‚ƒÓB.×’’’’’’’’’’ÿލ«¯:ç#ï‘g9Q’g`+ ¡BKLnˆ“Âñ&•Ĉœ,O‰¢4ÍhŽŽUfZm Ër‰âˆ pƒÎŠìÓ(ޱ¤EÆä¹¦âWPÊ"Šb´Î ׫ç#¤$ÏsÚíYjõÆ@'$iŽ1ºhâ–¢pÔ …x0EEÖ£RªX@¤š‡~ˆõ§Fž¥ôÃŽë’ƒ )$ZÒ4EHÎ5B(0Ûv0tœâxõz´&Íê,Ç#M5RJÇ)Ü©B"Pt:Z­Ùá´DI‰ãÚ$q‚m;T‚…D"……–Ûq±lÏð¥ä‰G¡>1†ßl’ AœfX¶Ã®»mŒÒk÷h޳cç^¾ô¥[¸ð‹Y°xŠN¯Ëþý1ŸûÜ7غuÀÕ¹„ŋƨsZ²w÷V&&*¤IÌl·‡iáŒ$Nɳ Kƒv®myŽctQæ”$)i¢q|/¨'›jsŠZcŠïßz' æÊ5×|«?ü9¶îè²vÕBÞö¶Ky÷».ç®»¿Ë§¯ÃÐ"ìÇ)«°P  "Ô«u´\§ŒŽ5Ù±ó¿øYNyÑéLÌYȾéYæóñü2_ýê÷ôœsî±|éËâ”ÓV“Æ]×aÏžm,;ôPÚ³³\û©Ï°þ„¸ð‹P¶“1tp6Yš£u†˦êxžƒò%$R(°„U#˜7«;Ë¿ý%Ë_mY8ŽGàz¤iBe²IÍsyìÁ_1R h.š19¾à{>Žãb[6Æ4àûu6<²k?õ/ü?ᅩ©Iv{irßD(èug¨ù>³›·°í…Í,<êh,·çy"u]„]A%÷ jUPynH“b J¥Ø·w7>M£ÑÀ÷z½JÙ8žO¿¿Wø¾Ö† † òàƒ1Eœ‚mÛÿ“Ø*Ès}p¦iZÄ|ø>ŽçâÙŠdÛfvî`õ©ëÁR„¹æ¨ccráÞyùÛ¨˜þåk¿âäcçpÈX £"šã IŒ‹±mrl´p¸ï§°yÓc,^r«?†íÏþ”%‡L±|å‘d¹!Jò"ú@$K)”²Ò²\lW‘Ä<ÏC*Á ßGAµZ+ܪBQ$ü mŽWå¼s.fßž½¬?å|ß#‰c^túIÜ|ã·0fÀ‹Ï½„hÐd¤)H¡¹àe/åö~“W½òe¸® 9Ò ÄÔªãfl~ì^–¯^FµYAV×þo/èe@IIÉŸ“°ú'µ˜r*¾,«øúÓ÷Ž\ùz•üÿKPPF”””””üwäÏ. zy1¾mI$H$:3dYŽ@£5˜\cû…À˜$…(R©TŠ%…kÒEI ÛöH³¢ì&ŒBlåÅQBàÚýþ€8I¨Ujø~À`â{.ˆ¢ô¦ßï`DQÜ“$ BXHQÜ¥+e¡”A 1ÅÍx®5zxƒdY…Øá»>žçÅ)Džë¡¤" #jµ€\ä(©R#•…­\ÂAHÆÕ€8‰ñ¼Bpã×öpŸ»vé„jµŽç»DQ„r|¤ÖôÂÉjYŽ[!ŒBÂ0<(>IÐmÏ …6iZŒ™KeƒEü‚)òk ¬ÅÒ+DQ’Ñê÷ð*iVÄ ÂÇõ@ ªAjeœgžÙÂ!‡15g>Ë]ζm뎛Ã)§G?l… “öY¾| q¸©$i’Ðíui4' 1S,)‘XXÂ"ÏS„ɰ„ŠÊc´Ï ž"Is‚Àa|þ2tóÈvò»?læþ_låÁ_^ÉÖmN>aW\ñ:Î=ïLê Ç–²x%Ÿ½ö³\{íU¸¾ÄV9ä²<'îõ©7GiwfʦR¡=Ûãò+ÞÂ%½ ŸÛÎæÍ-¾üåÿ`ãÆ-Ì´`| >síU¬[»ñIÏÎ0–dç®Mµöh~pÛ÷¸õ;?à²ËÞÄ‹N= )5»wme|¢†Ö1qÔC³jÉQ[bY2S¼Dë¼xO»5b{÷²ì¨#ØöäÃL?ù“Ǭ¥—ÇØyއƒŒ 3ÉÔªÃXóÂsl}úI&V.Åò<"“Ðí¦T«#X®Eo0À±]l§Â׿öe:]Éütû]\Ë£Zñˆ’ÌÎÎ 0Øj”\Eø‹(‰›ÀÃÌþ/¡Ûí`DB+ì¡\ ÇXø™ÁhÁ ‰IÓ ­sl»pnOLNE•jËvðý a8 ‰cÂ0AJI¥RAëâf¿(öbXRÇ0J@ÐlŽ’eÉÁ˜Ž4ÍŠüf»pÅ{žGÆt»]TÏ8Šð@HÅ©ôºÛá%s¸ößgWk†Qc¸ü½ïbɉ‡³nÅéÞ-XÊÅóë(«N$"ß!Ïûfvóo_øÕO/å#|;—^újÒ´¶THÚ]¢0a6ì„êÕ ž_!7)n ´Æàå&%ך( ©Tê z=ÀÂh‰”…xn´‚>ñ©kxå+¯â¶ýO~âÝœvÚé±êh¾þõëÙ¶m  R±uë&Þð†Ë©Vkl|úIÚ³)»vífÅŠ9è,gtt匲wóv¤QLÍEUÇË]´¤¤¤¤¤¤¤¤¤¤¤¤¤äÏ™ç Y–`)€œ^¯G–¥EQ‹ÎQJáyžï sQ šç:øn€ãx˜ž¡ÝšerbœJ¥Bž¦A€ëbeHÓ˜Á G–ÇTkõz•8 úŒ7Q¶…T6F@ŽÄqšc#°·T\\×.Ä©1h´€ÜE2™Ö ,’8!LRr$žçáT|˜7N³Z#íõž‡TJ!$‰#¢,e¨V|”4dY†D †îYÛ÷ggÉu^üO×B)‰ãZè<Çó\\×r„0¸žCØoÓ©²hñæLŽ!„& {!ð«>Žg“™c4BE®¥eYضƒrp=Æ'çÐ9°Ÿªk1>Òd¤6‡<05§Á NðG$y¼‰1²4a'8vî~xÛÏÈâŒóÎ;‘‰É*ããMš£ãŒŒ5iufÈŒ 6:ÎļyTªu|/ Mrt.PÒÂu<¤´Éu!Šé,F °,Çñpœ ™†jm”Jm‚TWèLknºù.ÞüÆ÷ð÷}Œ={zìÙÓæäŽ`ݺãÙ³w–ŸÜußùîlx|3W]õ~vïë2ÛÎI2—îf{9>*UÃöÆiÎ;ŒPW ã [7·X´x'Ÿr9W¼í*~ó« W½ïÕ,^\ãùM±lÅú6FØÂyóùÑmßæŸ¯ÿw>þá¤×a»Š½{wQ©Vèvû  WCð+>cããŒN`Û>IhÈ3 ƒ¥\´Lçä"c "ì˳9ùÅgó»Ÿÿ’Áν4ªUl[‚„J­NŠ!ö<–­_Ïö­[ØõÌF”È–¯ú@B»½—0 I´Í Ïïæ–oý‚3ÎXÊÄÄY–a;Š( 9p Gjúý>ÏmÞȶí[¨ÔÇé¤>Íy+¨xU’Þ,ŠN¯%+xÒ¥Y Fl“Ðïuql ¥R ò<'Ž<'`´9Aetf{8ŽG¦DQQ8U­V ‚€:‡<ì‘îßEÖžFèCNc¬†rDQ W­¢,°íœNûHM’E¸nÀ䜹T« ¤PT«uªÕZ!ºæ9S¯UÙ³s çœw¿¸ÿßiT\pÁ{¸õ»wõŽ;ñlοàåhcáyÏ?÷,{÷÷xêéÝüæ×O³vÕ*V®\NPco«‡6Hg÷à ¬‘¹`UË]«¤¤¤¤¤¤¤¤¤¤¤¤¤äÏKØYžÓî%¸n…æØIœ!-Ig¶Ã ÜO­Z¡Z­"2MFøA@·Û%O3\ߣQmà{Ia´ÁVÃ`ây.Z§™Hèv£¢uÝqôºìܱ“©ù ¨Ö*hŽr1ÊBK‡(6dFA¶e£úI„RËV“#¤Árl2­‰ãĹÁ¤9qš‘g9&MhMÚ l‡~¯U'58Z&!3QÏu©f„£\tªq\‰t»dyF®‹Vs&ŒC´Éq¤‹­Ò,¦×ë!… Ï“"4ÑX¶M,ŠÑ 󱄮†^Ô)-! t!"+MNšhòÌ mÅâ£V±õñGÈEŠ+’È#!ÂÌ"½Ìš¢ F4š>þö÷œxÊìÛ¥øþ7¤îÁ²¥MÈ#îºëgŠCW.btÄaè%š ‹n«‡Ö.õæ8­-º½>£““´»=¼ ‚°Sò8BH…mWI´\‚‘Œ0=Ý凷ÿŒ›¾r+<¾™© ¸ôÒSéõl¾ÿýûxü±gxèwO‘A¥RA)ÍI'¯gÛÅ?é‡\üòóñ4N©T$3fÉÓ6³³]žÞx?ö Ï<½™Ý»ö“¦Wï9¬_?—¿~çëXµj)§œÒàu¯ýgœº–£[M·“!àþßÝÏ÷nýŸ»îï­G³tfwP«TI“ תҨ7éG–3ˆúäý ×@(-Б N 2V'êï¥9>B+î‘È6Ý~‚Ê5ÁÂCX½ú¼ë—œtAQ«ÒGcY.5é °t9G®9š?<ðK‚‰qzÍQ„m¡²RǤ¢AÕšàž»ï%ôx畯@'%á@g7#*A°ˆZÅ'L[ŒOeØ–G×ùâ׿Õ¼˜¥‹–1óÔ0ëV315z,tÚÑ ]§SSt˜¦e°¥ƒ–”å@?Jð*UËñˆbðƒ²<Æ÷‹â©N§3,«²È†kÔ ±-‡Á`€ã؀ƖåàcïÓ½½L-\@y¨±%¨^›÷¼ñͼíò÷pæyoâïx/üÅ­Ìm8ÈÜÐë÷12àÙgöðøsOpäêåzؽ­,\0ʧ¯ý[þâå縊õkF°«9ýî^¤;Ž­$ÝdoÌ!ц(3¸¤7Ø_ hÍ´¨×›y I¬qI–i²4!×…“µ×ëÑïu0Fs`÷s³n5wß}77\÷UÞòæñÐo6ÑïïcÇ®­\ÃXuäaŒ×|ô0ɤ9ê±pή£³ÕœC·×e4l!v=ÎÄ’%М„0·Ü¸JJJJJJJJJJJJJJþ,„U¥dÑŸÅSݬ‹ëøÄqLžçøž‡íØ$iŒ’6z…™™¤XžË ßGkMže¸®;‡ÇvÉMVdä’4M‘J‹¨²BÀÉ5¾_)D SŒÒW*U²¼KšfEÔ@b óÁ–%e2B9ªJÚ@QleÛž˜B ,EžË¢©Z­A¦Òu¨Ú‚,WHKágq¢ql…ç:X–"ŠÒ¢x*`Û²xüý¸h9·]\×#K3Ò´(7’ÃlW„ Š"¢Ù6£££8®C{vßPÊBH’ Á–ÏóIâŒ^¯‹cûT«Ù`€[«¢uNËf&>Yiáy6qè¨Uz­YÞrÅ[y÷þŽw½ëƒ|죟@Y.õ–‹øÉ?æècâØ.ã#LŒÏ!ì·p<­SFGêìèm£Û™¥1g’JÕÁˆœ0ê!•AÙ‚8Õå“™œ,í£µÃHe>¶Å¿~7}õÛ<·iÕºáµyö±k8ÐjÓêÀÃü% u—¾î"vlßÇÅ/=ƒ>u í™iü±Q²8¡áztwnfû–çYuÁ%ÇÄIZêª%%%%%%%%%%%%%%.Âj¿ßG )\„“3 ð}ŸF£Î5™NI“×ÄqL†Ã—*Žãcó²“$ŠEFe¡cÚ$Y†ã8Œ6GH¢"S±Z©â{U”%‘–MÇDQŒÑ†?áXV‘qø§2(œŸY–!$H©@I²,Gk]ä•ÿN)c4™‡±±1tžÏ)‰±´Ä6…°édÙËp\A¦!Ó yR”ë(US¹®ƒ6éPèµIó¼(à¡~-+ MSâ8Æóñ1.8ÿ¯øÜ 72è„4GGyïûÞˆšVk/µºG¯ß¥RõJƒL1"'I3×G)eW±¤"Sâ,±šŒ MœH¤Rd‰Æ¤à# ãˆÚx“Îì^ªã£œpáùÜsËwxôg÷³ö¬3Iò#5®c‘È ß®°z͉üö¶;Ùõ«G™sö:˜ UgAýP>ÿñ¯°ý…]üÛ¿~”E‡, ßÍpmi7ôCæÏ›G§“R¯ é`Ù5ÆÇÌ€=/lbíi+ŽO´sƒHÒ“íö\×`k­A¹6Y’\_–²¢tAˆa›-ÉÁPìÆäh£”DH‹Žã0§Qå²Ë.#l=Žq\ì‘qÒÈÆ³\fÂÙ"cÚ*V.Ž]በ°|ù ÆÇ'‰ÂŒallœN§;,ª³±¬"SYYI&}šÍQ¤´èvwǸìͯfñ’&—¼â ^rö8ëŽ=Ž0 ìåÿáÃ8n•Ý[ŸçãWî;9br[‡x¶M§5ƒø4ÇÆhwÛ¡Jaµ¤¤¤¤¤¤¤¤¤¤¤¤¤äÏEX•ÂFJ…¥ì¢[(’¸ÈQ̲Œ,O‘ªaïõŠ|Ðf³9,dÒA€Ö˲6f9ŽƒåøX–K®s$Û”²Ø»gµjjµ­lâ(ÅhC¦ÄiB–i|? Ë2öìÙG¥R¡V«‘ç…pª”…뺣ÑZ£sCf2ò|X²e iš e q7MR<Š’™¨âÏ%ÎŒt0²,ÃØF Â0"N”c Ë­þShRJ‘ç9B \ÇG*Anbü æÒ"+C‘5Ë Ç®mÛlß¾,ËX°àlËæMF€Fª¢„«^¯36Ö¤R plŸ\§¤yŒŸ ”ïóüæMÌ?ö$T’pàÀ,í^ŒKŸ½×@âÛ„í .øKÞñÖ‘¤°{ïnzƒ=œuÖÙ8n‚¥bÂÁ íM%ÃiÓÙ?mÛTª½A›‰yóÙ¿g¯2‚çUqì J€ÅÃçî{àsÿôe~õÛ'Îyé:^÷Ƴ8ñÔc˜7>N«7Ë-ßúŸøèxvÇ.NþëÎ]J«ÒthÖ&pSÁ¸ƒÔp„$IBò<ÅóüÂõí;¤IŠÎ„0“Ç ¹NÈÒb-cر±Qlۡ߆V†n§‡íXäy6ÌãuÈN§ÃädÏs‰“eY\úº7pø¡k¸ý–‡xvÃc|ú†»yßµw³èÈ…œ}æI¼ëŠKY¾âH^ûªóù·/þ˜Í›¶@¡l›™Î^îà>Þx;#M£#¼ùMoãŒÓ_Œ” /ùÅÜrãƒü¿W_Ç/ž`ẕ¤Ânb[6®íb)…ÉJÚ¸nÀܹS !î0K8O ÒRXVq ’´Î‚ FPõɳA?&N:d¹ÂóÆÙ¿ï)Ž\µ’‰‰Q^ÿú·pøaÇr`ßz½Y‚FÁ`š™™]t{°á±¬8l%i»EW'ìÛºy R_0ŸA&Ò*w­’’’’’’’’’’’’’’?aU‰Tö°„¥(B†aáDU…{°Yòƒ.´bœ?;èt‹ãb4>‚bdXCGfVˆ¥y†çV0FÒïGŒT*»÷ì¦91†í:€$MsÒ4cëÖíyäaäy~Ð+DQ,I’ç9Æ®ÏÂ©ê ¥…Rª]Ó!%:-„Ø8MjUt‘ "lQ÷Äy†I . ¥À¶JÙÂs!¥i1Òì»>RJÒ$Æq|òL#„"Ï Ç®çyT«UŒ)DÛÂÝÛ(šÔƒ*ý~Œ1`Y¶-p\­3â8"ËÒÂù§ a§×Å'gî²eüþö ·g/ncìQ.ñ+5ÂÜ¢áUIµÅH}!ýÁâØÁ 2&æx lÛñƒA ¥&ç.Âs'è¶v“;¯‚´5Ýn›öë8øÎ$ÒåW¿zŒë>û¯ÜÿÀZ½ŒUGŽðÁ]ÉúSV±pá<,ðëß<Ì5×\Ç?{–8Ô¬?z>ßþöù—®å÷¿¾—…‹æ ¥aþœ*µ¥œ²~ µúÝPóæ·\Á¥—žÈ+_õ*ÝY´IŒ4 Ñ&"O´Ih˜¥÷Y8ÿº˜÷¿÷5¼ÿýßà˜£OæÆ¯|矞׾æ5¼ø%1Ÿüä¿p‰GrØKiͶXºl{öîÄ÷´Îº‰3#¤M§ÝÅÆ1y޾¿µÐd&Ãhãh“!Ežj\Û!ìvQ¾Mœd4Ç&ÌÎО=ÀèQ‡qFÿLî¸ý‡LÍŸ¤ºd!Ý~‡Úø<¾ÅÈÚµ8[6°ánìuxsÆøðg¯b_fóž¾Ïw £¹IÉ´¡Û qÝ€4O©ÔÇøÉ]wsÚé§4ÇœuÆéüàöob”Ãä‚e<ò›ß°æ¤6‹ÍgÄ ðŒD¸élx0‘ÝáE•”’\çDI8<8H0"R´XV!òåyN’&(e¡, ß÷QJE1qâylÛ^¡›}ÀÈè^µJÔï3R¯pΰlÞQìÙ¾ƒC8ŠGžÙÌ-·Þο}áÛüì§wóõ¯ë®»–—¼øD~ü½oПÙWÄä)QØçŽ;nãÑ'`j¾ÅÑkçñÜÓÏqÒik8j͉Ü{ïùÜß ’N Ïi€ÊèvBìÀå}:Cë¬pèg ‹/bÿ¾iúýŽã#¥EÇø¾Ož§$IŽÅ¡ˆÎ-„®2èi”e3Ò˜ ÛéãZ>Ží3H$–Ã’‹pì–,¥Õ‰˜;1Å̾-ŒMÚtÚ}<ÛÅÉ3:û÷°sçV]ºtް]Ç/w­’’’’’’’’’’’’’’?¤ [¹¤Ôá(;€çyH iZd!ÌÌÌ%MÑûjµŠ…«SkM…´ÛÂ0ŠŸEþ£@Ç Z‚çþýÈyS ‚*¾ç#D‘ù:22Â’%Kp·›–FeYF¯×ƒa³x‘YȸƒÁ€<ÏI“”^¯G2å×€Š4Ž0F“¤ƒ~Ÿ4M±- Ã|H¿†,Qd-ÅN˲¶û¾?têEh­™%I G«mÛE‚²èt:ÅßÑÑQêõ:ƒ¡Ó×q¼aÌ"â8&Ë 1UJ”…`U«´z]¿Bsl.a¿GØ›%K¿}è 6mÝNk~ûÛ?ò»GžáŸÿå>ñÿJØS`,Î;ÿ \Ï#76³³Œ18®$ŒûìÞ¹nØÃH`;¤¹$É,Ü`ËAëŒiòÀýOð–·¾ŸWÿ囹í·iNÚ\ó‰7rÏÏnç5—^ÊÔø ýÃÞö–pÑùWrçOc´æ‚‹ŽäúÏ_E£©hT}žxü ,,zíä¶•'Ó´f7áz}Î9ûD¾ôÅëQV‡nw;lb¶µ•Ng+ýÞ. m\7BŠ˜N«‹N!Ï$‡¶–åK%¾ìr06û·Wsê‹NáÔÓNà/^uŸùì7¨T̳€ÙVŸÀkÄ‚ÙVD–*\§ŽëÔð¼:¶ã#…F‘¥¤š<‡$ÍèG!iV”˜¥YJ–e¤™&S ƒÂÒ iò(§:ÚÄ ÚŒ»ŽÏ:“ûî¹—xºGÍ«3}`7¹‘$BüqV^xyœñÂÏâ‘âçwláü×,cýÉÇ`ª¹BÚc¡TÀÜ9óÙ¶}+oÇõÜúÝ"rhMࢗÃÖ=!›·îbéêcH¦·oaÎøóçÍÅ‘6iœ#•"M’al† ŽcÚí6ÓÓÓôz=l[R©xX–Â#¥$ª4u‚ BÔj5t®‹õŸçd¹>¸fmÛæ¯jêõ:S‹—0wÎZ°Ïîb¬Þõt;lݾ™én{d„Ÿu&7ßô%|ðTF¦Ø¶s:›å’K.à+_û"•Fϳ™·`.¯ø«Ëøù}?ãÇ?þ'Î=÷öîV|åËwqék?Êo{/ûgöðÉo~eË–ð–°}ei”•Æ’¤‡ÖqÜ%J{$iÈ ? 92†Š~?DçE¦³ÖE1_EEyž­PÊÅ«Lâ»c„}èwRtqa Aà¬Z½˜›oú\ð Þ|ù•h= ´H’.+W®`Éò¥EŸ7Âx³ÁX=`t|Œ…kÖJ –"¦ÜµJJJJJJJJJJJJJJþLPW^~üGŒ×ñ±­ÿ@l»pó¥i‚Ö…3«poJ¢(" ÃÿÅ5jYY– dš,Ó€ ƒm4hCÅXΰhÊvl´8IqìBHÅ<Ï%Ïu‘a¨–õŸY«‰Ry®‡ETišsY•²°…©ÕèíÞ‹Q‚êXÈd¨L# XžK‚!Ï N.‹¦o£±”ƒm;CçiNµZCAžç…CƒPÏ÷ 17M:zÿ$:gYvÐq›ç9ÖEéÏîÝ;pû`Ü‚ãÂmQŠå sM†ŒŽcùÏn|޽;w³rå2üæ|nøÂ¿#-Ÿc×Ï{þæƒL·2¾zó<¿i7#µq”5`õš¥øžÃ²CV`YŠvoš\'ØN•A”22Ú$×9û§gHÃèè\ÂH03“±es‹›n¼•O~ò?¸áŸ¿ÃoÝÂäÜ*oû…|ú3ï碋Îã…-Ïsëw~Âg>y3ÿô‰¯ñàƒDš#–,àÚë/ã}>SSMÒ8b¤1Â]wÞËé§¾˜JPE A–EäYe)âÐfÍšu|ñ ßÁV Ç®=Žöì ¶%ȲËÊpçCÔéÎÂ-_¿•ÿè6>õ—\ü*Z3mN9å$Î<óT¶n}^o†CWÎãž{~ÎóÏ<Ãi§ž‰Ñ’ÆÈ›‰±)6Æ(ªÁý^ÌXsþÈ8®²1@œ¥¸®Gœi‚ B’jlÛ#S,ËF¹™-Iâ•i¬Ìà‹8KžG–§ŒŽÓ›nñäý¿ebÞ\êÍQqN$AY9N`C”³yÓn¾v˽lšÞÃÍ7–‘ªâ…-;pÝ ™Ž˜mwi4&pì Qœa»Un¾ù§ìÚ¹…s_z6¾ç¢Ü*·|çê£.§œs6­§7²uËs~üZ²(ŶŒTä¶$N<åøUü iZ8¯lÛ^* ¶m!…,Ê×,‡<ÓC¡Ç%Móƒɽnïàû]Ê¢Ô* c”R8Vqñ<ŸN§M¿ßCÙ6=ü¯}åßqç=¿á;·ÞÅwþ„u7añá^ÅÑG­" ÷âÐaßôvªRÒÚ±™Þ^\§F?q8â¨uœ°þ4^ûÚK8õ”uHòÇÇ7òû_ÿ–KÎ: î茉¹ v'ÑëïCˆ£Ù>–¥±\ÑAáV7ºx]еœ3ôȲ!EQÈ—ÃÞ}³ÔjE=ê£5L“¤ÕFÛ¸áŸoâÉ'7óôÓûyÅ+Ö²|Ù´I±TÀöÝÛ¹ëÇwð¦¿| BåìÞ¸,˜Z¾í$º8lqœÃþ·ô$I˜™™arrò¿|ó(®»ªÜEKJJJJþÛ‘‚ÿ«öÇ4MiµZLMMýý^¯G†Œì˜ø¯àOJ%%%%%%ÿ0æOËÿ:¤”ãN'&&þ?×A–iâ8&l*• ƒÁDZC’EEɲ°,«È¢TŠf³‰1†J¥B–eôû}ªÕ*Zkaˆ_ °,Ÿ$ȳbÄØu]RbkUäÚ.–%Éóœv¯åØÄq<|,^Qå»!fªJ)±m­ žç$ B¨ƒñ˜"KUJ5Ì…4X®²pç)§a¶¥A¹‘ý©X€#•ƒ”†!Íæ(á &Ër’4Çóë,Yr¿ùù]̶¦±å¿ýÝŽ;©Âø¼#é¶]îýÅ“ìÙÓ§âX´Ú»©ÃGÿþ»²ô»\xÁKxÕ«^Æê£×&Ó„ƒ! Ï=¿“J06¶GYlÞ4ÿ|˜Ï~öß™>­ŒÔmÎ;ÿ¥œqÖÉœzÆ:>ò(þÐ;yðþ‡è¶5IRx†ë8ýô|èÃïäðÕ#$É I<Ë «9jíñ4nû ž[GÙ’v{~¥ŽeUD]š#Y–óº×¿„›o~€W¾æ2Æ›Ë:I‡Àòˆ;~ô½;Ù´åžáy[yo½ü­¬\yŽWa¶5͵Ÿ¹Ž“NYE«½ÃŽXÆÌÌ~n¸áS\ùö÷pûÂÅ_ÈÎÓT*!)}„Ö̶x^…­ÛwRñ;ìÚ½›yóæáU*$Y†Œ’% ãV¨øŠhÆœ‘z‘µšd˜0FJËUຠÂ^µÁñgŸÏžû2ýà^Î~Ëëqj.Ý8Ä·%Ù cÞšµôí1~õ‘ïóÉ¿¿ŒÕ‡ÊžÙ§xëÛþ†·^~9ñê³èu:³‚© #qN\?É?~§ž|–“N9ÏÀœyóyøO‚3—#OXÏ7¿ðYZ›ž§yøÑ`,ÛCê6Yª±”ÂR’JEb[>r”aÎr‚1fmaÆlDQ„Ñ–ò‘Â$)–å TŽ`Ù×qpäy>\7†1yžbŒf||”­[·F}¦æŽsÉÅËØ1bì€[ŸãW¿0¸ù~nüÛøÔ5ïåÜÓ×¢£=Dqœ"’cÁÂùŒÍ™ ŸÔ¸ñÆ›øòW¾ÁêUk8~ÝZ^ö²3ù‡Oü-:¬ã۷ʾý»Q##dí”ñ±&a¶ ÇQØJâ¸Ë6E‘•±QÒÂY¢ˆâƒ‡REqŸR`ÙE”ˆãYÔIqýœ =†-Sæ.<‘™ýÏc{>3­”³_zÍq‹8˸ô5k™39Ž)Ýv›Æx…W¾ö•\ÿ™oqßOïåŒSV³ióóqÌ*ð<öÏ´p+u|Ï+wÑ’’’’’’’’’’’’’ÿkBüY=«Ñht—¦i†Î ##M¢¨¯×ê€f0‡‘E9S­V#MS<ß'M¢(¢×ëáy–RÄQ„q%ïcŒE’„ôû]„1(%°†%0B²4E ÛòÈuJ–i,Ë98æ/h]ä›Z¶5k`0‡ÎÚaîª0„•k­uå 4õzí€ãÙtÃWI¤6€A ‘!äA%Ï )JJ¤t:aN¤ƒP†,K„²Ô€T¸®{ð9Åqƒ`YA ”ú_²hk AÅBY’$‰Ãø Û7Ä#ÁHŒ‘ìÙ·¹‡Œrô‰§ñ‡î£Ûjñ›ßü”íÛóÌaûÓO299Ÿ?þâ*Xưìðqž}všF]°{‡áæ›îåG?|€Ã_ιçÈqë×áy.æ26üqO=ñkþýüá¡'Ø7¶€z£ÆEËÚu'sø‘GÐîìããû?½ëgL·þt¾í)X´ØbÍš ^ñ§qáÅg“Æ]öí~¿Ò #ž{n ýûOòܳ»ãå/µF…=»÷b9†ù Ðnkl§Êo}wþè~|ëÏ9öøãÙðÈ#lذ-[žÅ±%#Í*çœûÞõîw02Ò¤×í³cçsHisι§²ñ™‡¸úïþ‘k?óá¡ë:cÁÜù¼ûÝïâškþeËeÍÑ«h϶ɲ¤ÈÌÌ`ttœ_ýò—4F›<üû‡¹îºoPm8\xá¹w‰yÔj‚ªEà»´g§¤},µjÀ MÉ£ ¥‹œ_K*,×bfÔ‚&"JÑBð’W¾†ŸÝv+¿¿ýŽºä &Fº0è*Õ &8‚fšIl׳ì;°OÂ_ùçœw*½^ÌèÈãSH+¦5Óáê¿û~øƒWóÄã9íEÇC`s̺%Ü÷³{1Ýcc¿~;7l ¹äH°]cÈ’ŒªëF9Yf0¦(¤ò<)Ú¯]šÅ¤i‘Œ×±ñ½FqAC u(\×:Ë-²<ölÒ$;x¨¢,E’$„á€,Kp]‡Á`€m[4 ú³].ý‹WpØI0:gigÛ·mæ…í»xÓ»>•W~~òoÔý˜æø(:6´Z-LÞej•EŒ0ojž3Î÷¾sÿqË}H 'ž¶€W]ü:N?j>óÆçaµvc2-a'dÎøš!\dÍǯ¢x– ¨€±ŠkHÆpÐ1ïyE¹W‘…¬Áä¥éôÖ½ŠNë3»735.Ít«Gà Î<ëDxàI>ýéb|4%îÎ …`¶Óbåò5œú¢Cùþ·oåØùu<Ïabá¥pƒ `H“ʘՒ’’’’’’’’’’’’ÿKù¯œæø?V³T#Dá-ÜYEá’ëzDQHpœ¢ÆüOO"MSò<§53ƒã8…0Òÿì½w”že¡·{Ýí)o›’™ÉLzT’P¤éUEQ·Û¾íº-|ºÝ*¸í•-¶w@‘-‚J(*  [Dé:I¦¿åi÷}ù÷þéÞý¾fá¼a/YÆ¿üå!žzz?½}àÙgŸÆËYgžÂ‹Ï;“Öô^²v›8ªÑÊ-‰£5¶(ð-‡Ñ†")ý»2 ñ‚ÍgœÃMWÿ˜ý?ÙÇé¯<‡^mHç дƒKò¯}-fzŒ;¯ºŠ.8ƒG[Ÿh15ÕbåŠõ´;šO~ò ÌóÎw}Jléé…›n¾›7¾õBÂj…ãŽ=ŽïûvŒO°°·‡‹æó÷;ïdÅaÛ1«Ö“;°Íe"â°B^XlQ^dPÊPÖheÈÒœ4ë µ! *hUA E’vŒUâ!¡ÕnQÆh”ž+,I’†áÿj®çåÔèèêµF•ßþæ6~uåͼ¹g9+E/}µ ËDßœE\øê øâg®àÛßü.ïxÓKyjû(ƒD45jKúÀ(öïÚÉK^örN;ýå<üà<óÔSÜvçO¹ñ–ßññ‹?KƼþåk8róz肨˜¡È:iŽÖÆ´Öø¤|¬âݬƒ68pÜà¹æ|–¥t’6Z ‚¸‚”FøÜQ>¡3“!I5j`=¼á oæ§W¿–»îþ#'·‚H[â0&Ó!ðþ‹þ•w¼üBÎ9v%‡mZ•0•¤˜°B»Ù¡Udôô<^ÌžSFtéÒ¥K—.]þ÷ÃZûÿ©¡K—.]ºtù?f)R(Â0F)ƒs›DQ…8Ž(lyDþ¹fi”­4kí‡P”ädYFQÔêuæÄ¬EÙfMÓ”Þ¾^£°EÙzõ¢´ÁÈ©5Iš—C71ë, *Uéjµ¶lÕAyœ?ËröîÞMµZ¥R­”ŽKU®—­SI™ª  ïa|l!Ê$œ~¨pNaŒ,¿¾³Ã;RªAiÙÌ›]‰÷á-K7@ä³£TR”kêyžã¥'M | U¶mŠÈ½½=@yDº +]±Î9ŠÂ"…!Ž$í,grªI-X½r <ú[æÎõVؾc7{·Žñø£Oajðã+?ÏI'¯á‘GäêŸ|k®¾‹ÏöìkÒîäx"|§Æ³ÏNòô³xÐRcd-FÇ´ó„86ìßßæé÷ƒ¡Áh(æ k6næˆÃײfõrª±fåAËèïa›VW8rãjÞñæRï«ðÙOJ]±ä y¼ï¢sÑ:`hxml.‘ÂÐ××Ï`ÿvçá’‹/áeœÉÑÇNžÏà}‹fk'ãÏ`óŒá¹ÃxcãO‘¤9aTÅ{ÅûÞÿF.»ì;,_¶’Z­‡¸®Ù¿§ŸñBn½õ¯¼ç=àª+¿ó9ŽEiÅOúcN?ë,’N›04~ØFÖzÓÓ–ûüû×Ý3Æä„`bì'¬]³ŒózIÒ„jÔƒˆbŠ@c…ÀšÐ «……°‚U0Öœ¢±p'œ~Üþs¿ñfVžs²^§3ééLL±ct''¬_Îs#+îZÂéÇlæó?¼…»ï¾‡eK×ò_÷þ‰Ë.»‡eΜ¹\øÊwpÖ™çpë71ÓnS˜€ и Ô+ŒÌ›ËŽJ…ÝO<ÉâƒÖJ…wŽt¦ƒ¬³ú (r‡³)?;$7ë7V!A h:H¸µPF­4Æ(”Tdi†@Í6ÏËǃœ½HFY–½==è¸J_½Áßîåä“þ‰Áy†SŽ:Š—¿äLN~ÙkX0)ÃÃóéíégyß0clc×öí²déø«yðþ¿rùåWñÂNåÄã7ó’Wnæ3É=°‡¼å|÷edÁ0¢6—=NЈ˜3\Gi¾J–K²Ôa 0Z¸˜$„À9pÖ„R ²<£ÝnS©„TTÄ—Ÿ­?Ë¥ÿ~a (Ò)Šazb¿ÿßøÒWß‹¥—´>úçŸw éä.\‘ÑÎÚH±jÍzvîg¶íã”—žJG „‰‘Ò`L^Vg»téÒ¥K—.]ºtéÒ¥K—.Ï`5 ª8ï±90{Ø{‰-Ça‘xç!‡@˜ @àñ8’Ô’¦;wîfÉ’%(âg?朠(r¼göö¨r˜ªQ£“%´&›ÄZ¢e„Ó{E Bᑸ¼@ë)ËÆl'i£$ä6Ã…³Z!È: VàË1-£LXåg-Â{Œ ¸ %!¬U(Šœ<ÏÉs;«.8+I`Ê[JEÒÊÙ½{# €ÈÙŸJž­²c̰hm嫆ùá7¯æÙ= ËW6¸}Ë T‚}¬X¹‚"IùÇלÃ÷¿ó}FÇš¶a˜(ŒH­%ŒªtÒ6iÛÓjvH³‚,Ép®E(ÊïEžÁ†ƒë,Y4ÈÐP•k0²x.´ù æÐœ£WðN335ÁÞÝ{^@‡üúæ›ùÕõ bîØ IDAT·rÈÚCxç»ßH'›`ÿ¾”J%&T1üýqÎ<õ| _ŽÝ»·#± J”ì£ÒègÓáøþ4×^{)6O°v†8†žJÄÔÔyZ0>¾ŸÀh yš‘§)I6¬ÞÈñGÍ¿|às|û[ߥ5³“FOF»•rùæÔ“>ÈŽœ‹/ù(q5â+ÿþYV¬^Ǻõ«q6¡9ÕÄYKµÖG­ª9ò°U|ëë_ÄÙ‚Á¡cûvÓÛà½% 56K±xpç „eBÒ¬ƒ œËhµš„¡bûè3|âN ùý/o@ýöO,<6d^ß|öŽîçßþý6}ñ`ιðyòw³¢¿N½€§·îEŠ[ᅦ©vé2ýà{¿É >ŸÓN9™ßÝsi1AŸê!2„/¦IÛŽpáÁ,ü¡÷sâÉ'“¶ö`EÈ¡‡¿)~Éoû7¢Bc(:š"ƒJ_¬]P¤ãè<çð†jèíE9^× ¦Ä¥GºK—.]ºtéÒ¥K—.]ºtéòüV‰°¶lƒ:gÑq€k!ËJHzv!½\ÆÖZ£… ®Vü^)E—ÿù·Ö‘$¥74®Ôˆãy^BhPë=i+Céœj$K€µa *ÂD1SÓM¬Uxc0¦ô8,ÎKæÌ›C\©#¤C)IÛ˜0À;‡ó®Úц<óØ4§gd„¨ZA´ý} Cr ,D:&[d¤™CA`ðÞá}G‘¦¼/Ã!ðáÉ3K£^C ÎQd¶ð8›£„ È–´È‹õ9íNF­V;ÐøÃ;¢ ÄZÑ c‚ Ä9OUÂЦ“Ü¥kùÝ×Ãýì礗­ä¡G些bá|Ã%z ;¶?ÌÛÞü^þ²xã_RÓ|þsÿĞѽœtÚ 4æÌ!oí!/ZDa…½£-œS¤…eÇ®ÝLÏ´qyŽô-X:ÒÏpO•ÚPR椱`|bм=F‘´±2 °–,K˜;2Ÿí»vqÕO®¡¯·Ÿ÷}ð]¬Z¾d“v{?Æ$MÁчÏ}÷<ÆäþIÒl’ .è´žÅhÏÌL¥*tÒi^ùªÓxäÑû¹ùæ›xÙK_ÂÔX“æÄ>ÖôTzé(GF„‘ƺ % BìÏZ$mË+^zýõ ¾öåorÉg^ËÃ[ÿFï2æ ó­o~‚W¾â"Öò{úêl¹å^~~Ã÷ «–ññ zûja*#ËÚ_0§'$"Ú1úû¤(è4Õ¨c Kà „säENær¼òeÐê$ÆX\–Q®ðôÔ3¬\µ†MYÈo~ y‘³æŒ3šu˜¡ÆÀ ŽgzôQ¦Ÿh²¸ ÷þþ/ìO÷’Ö¾h-3ÛF·>É®§wÓS¯Rï1T{4>m³h^/ –02ÂÚƒëäë~Á³ÜϪ¥'£bZIB‰Ç ‘VamŽ+ p@ Œ*äHtáeŠ’Ž<Ïi·;D•Þ‰Yr„ó ¥«TjU¬w8W ”Yj?„‘ $i–SS´rÛÏØ¶,^>ÂQ'Éæ3æó¦÷Ò™nñèÖ‡içûhNmcý!«˜˜ØK­F11ŽM;ĺrAšŒrðAÃ|ó[—à|§†mÛFùö÷Äagý²¯}Å*/ê‡ö>ÚÍÂjABU)|i,RypS©á3K»Óbrr OÎÔÔ;· V¯YC¥…g-ÒÎ=ûl²Kküû¥_çü ÞÂñÇm䣿#Ž:„0ÉøêW¾Á 'œL߰ᜳOF½q„ YŠ|’æÄn>û±×±fãj°Š4Í‘•˜ÎÌ4(…šÕ†téÒ¥K—.]ºtéÒ¥K—.]žÁjQddYŽ¥×THG´Z-„œu–( (léV-×ÂËQcÌ÷ ðß<„–"OpÞSz¶égCI‡¢l‚YpÖ’åv‹¸ÖÀÖf†¥äs%Y¼wekKD^033Ͷ§ŸdÆu–Á„(­ÐÊåðU P1½½½ÔzzA€·!ÁÈ„ÇÚò¨\ h·gH’œ(*©²4¥R©”Ÿ+²Íy/y/­ŒùÉ5ß¡Ú`ÿèc4ú°­‰OÑÊ#¥$5A È²Ò+*äì[à­ Ës„XkIÓ”$IÊ‘²z}öyéæ4Z£2‡,62ô­\ÇqçkþøÇß0~Ûï8êÌóY0§ÂÄø^ÈÚ q»ì“¸:lݺ“׃,èmò¹Ë/åÐuk¹ì‡ßáï÷ý‹–ÑO1Q‡¾¾>Þ÷¾×S­6¶fÞ|–®8˜=»v±xûªóh¥Ó¥@ ”0¥çX„.Çßð„è@á­ÀþÀc @Îê4”’(­Éòã!®Ö Í(ÒJxŒ0›“å\îÁÈ€ƒñ)F÷<ÁQÇ Êñôýó]F. §žu4\xƒs–0=õ$(ƒÍ«˜XV*¤iJ”e˜Jé´6šý{÷144ÈòƒVqöy/cëcðõ/]Â[ÿñ|önÃSÒE†KZ¥×Y:¤—ØÂ’u,F Ò<#Ë ¬÷hm¢ˆ­[·R8G__?ÕF=Õ:é…7\ðò—ð‚läíïxwÿñÏœrÊ…|ü’·rÆYçáÜÖZjµƒsëxÛ!qÝÎE‡ËÖûîdÁ¢…T†F@Exé­\‘SàqÞ££î W—.]ºtéÒ¥K—.]ºtéò|@]ôÞ]üÜÖ¥1/2²´C”x_6Μå€Gô¹U)u`°É9w`Ô*/Ê6®DáI;åX¢\ÕŽ¢c4qEŠN§… ÆÒ,Ã…Ë‘lQÇ»ÒõƈÀušÔj5”*Gq´’8ëqÖ¢„B ‘”¸´Ã“[aÑ‚t•3!BH¥JŸ¤ð].¢ áR”ÞYk©ÄÒ4§Ìoyf1&¤Õn"„G ¾ ›â8¢Ùœ! „!Ê?wørÜ+yni]â¬Ã{ˆ¢kN2{ä×S¯×iµ¦(\‡Çå}™çE'ÍÇ¥ßûú-,[Zá+—¾ZO“æÌ4+W®æÅ/>á±Ç·qå¯äÎ;ï§V‡ùóçaCªÕ Ε#cR+r›‘tÚŒïe|ÿúê„:­I"oɨ0“DxÐß;Äßîˆo¼‰kv;vìâ”SOá-oùGY»-=yÚFiK£·Bjм@)eà}åUWrö9§a‹Œ8ŽÈ²‚¸ÚƒRÈ’œî¾ó6ò<áð#6QØ”FO-5IÒFª²ýh­ K!I ´ )\J’ÏPëS4æx¾øåë8õÔSéí[@¥ÖÏm·máߺdëSÎ:ëDÕˆFO/­V o3¬ÍR¢M¹t_º„3ªÕ ƈr¡AÆa­5ÖÚ#fJ)‚ 8Ðæ.I‡’XFämÀiLO-â7·ÝFÕTxð¾X³ú 6±"ÏÐÁ‡ð§žäî?ïfýÁK9bÝ1|õËßá—7ÞÀtg‚ûþ¶•éé.þØÛÙ°f-c»GZ²vý:d¨ñÎ!³¥5uÛ¶m¥‡4UÚí:¬"MˆÔ!ižã\A Jzðëù¬Ä)ø‚À¥@i„ÔH¡PRÓét°ÖE!I’ È¾@áðE>'Ð\Nj²É1´÷¸Ö ?p/ 6,§^ŸËå—]Éå?¼žÇŸØÊÍ7ßÎÛîåŒ3Ž$M[ôTçP$•´y扨ôöR™ÓO»(&BIoo?O=ñÿqÅ׸úªŸ0w¸—wþÓ?Ñ3ÔÏÝ·o¡¿3gÕA—£Ãh-$Jˆò¹ÁkTWb­iôöÐÛÓKÚIY¹z-Ynyö©gèë¤6gÞÒ,ah~/çœ{ ##ýüéÏr͵÷°å¦-lùõ]ìÜõ µ9‚W_x¡gYÆøø8CCCÝW·.]ºtéÒåÿžÛ ˜˜˜`ddäÿÕçh6›t:žwËÇ]ºtéÒ¥Ëÿ H)iµZ$IÂàààÿ}°úþw±›¢´‘xo)lN^¤e¸¤@ér´æ¹–jcRÎþ]AQäY9âdM–gdYJ¥R%®„äEQ:TEÙÔ”Rà½EPÒQB „*Gc”Ò¶@ ÊcøÎa´ÂZG¥ZCy–282›ufA9´åœG Ežç¤åsžÙö8 ç ££g=V 'J"ñxoI:Mò"CJQ†¡® „£(*½¨…+ªÒ ¤Æùï ”’¸ÙF­” ç,Qð³áZùo’¦i––#>a„÷e9 PR„!J)²,£Ýš)¨"áãÿ6¿»s7o{û‹X}ðF¾ú¥!ç?.ÿ+×ö0>õ8ÃsG˜œš$/RcxÑ‹Žã%çÍöqÕU¿äû?¸‘¿ü妦¦¨Õ]'zÈ:’ÑÑê•9ÌŸ»„FmYÇ14¸þžv>;Š ¶íØÏ­·ÞÁµ?»–›n¾‰åËâMo|=çœsóGXª±¡Ýœ@HKf;´ZÓ Õj !ÓÍ«7lే`Ç®œtú©4§§ÉòœžFRhâJ•;wÒÓSgéÒüèGßãŒ3O¥VÙ¹{'Ú@h$H‡÷ ‡Dˆ€0ª193ÃÀð\šIÚÙ‡¿àîûËÜuçV6wßùÞw¹ø’ï’–+¯þõF‹>ð9–-À‚z­s)Òj¶…] „¡)ÎSkÔ£ˆ4µ(©gµ9B*• aÒét\¸ðÞcÐLP£   û‡¨Uú˜ëðÓŸÞNîç¼úì™ØAÏÐAŒ57]þéϬ_µ‘î{­Û'µ4\ùÃOqâñÇ1¾{'µ8¢•¶P‘a&iš¶ªÑCºwÓSÌ©7¨ÌÃy‰Ô!ʲ<Ç–(Phå ½ey!Rx´Ò³,Y–FQyqŃ’ ©$ÖæÄQˆ–å6Ï)¬E›€‰ñqlžS‹"Њ?oÙÂîý{Ø´ù˜Þ%­ŒßÜ|'ÍÔ²bÅî¾óY6¬á/8žÏ줧ÖG29ÊÞOÑ72BØÓ`&K)„D ©Ô¸êßç‹_¸–¿þõI®¹æf}à.^vá…G›2lM“œÂf„‘Áúœ$IfÛ¹ çʪz½§þ „ÈIÓ‰OˆÂ)ZK´–cÚNñ¯—œÁ9§|€×¼òõ¤Mxç;Oäôsà™'ÿ@l*xW`´ræÌéEˆïoxýk8õäÙµkûÛƒÜùûǸáç¦9P¯R©VqÏ_H__Í©I|ž2h3ãûxè¿ácËÀâ~zz{Ù°q5oþ§×²jÕ ž~æIöîÛÍœÞFKÆ÷íÂ;G¥Z'k¦~Àœ™ÙK–8:©%Ï2Ž;þh>ýéË9åä)lV6Y…'ŠCœÍ¨a‹,dpî|.¿âk¼ímobpî0ÂH—‘¦9…m£TL %ÑÎjò¼B%îgzBrѿȋÏy=§Ÿñ*¶=“ðÂ.à½ï½€©æ('Ÿ¶‰?ý×£|ö³ßàšŸ}ïcfZ»‰"\ž÷Z3>1NáÊÁ±,¯#•¢ÕìÐÛS^dÈó€ (ïkÎt:9P6½+ÊÁ¢¸ykЏV%Kë6ŸÊ?ù5ÛvwØ÷»ûرíY†-£iSFæaBÉŽ}-þáíï#†‡œ|ÖRÎ{åq²j =|?‡¬^†ÉT;¶oGU\Q(E#ˉ†ærÐêUüñ÷¿å©fÕü…H<ív‹Š‰ˆÂvQ`½#T! #Tf)(µÚ›YõGÙtJ`ÅzOj k3T )œ" {Àz” .Eø¤˜Æ„1SÍœž~f2ÁÁ«#¬Ìcì™­uüz~ùë˸õÖ{9dÃá|â“_泟úGn:eËÖ¶ÆÈm›JµB¥ÓI:ĵ3IJk&A¢yå+_Êonþ Ûwlçøá—ÿùW>öþáü—œˆ/¦™™ikKš§äR£d…Ãyƒ’4OhgmjÕF€-/ÒÌ´i Î…N[XZíõžÂMÓiM"gÏèN"“sâ‹Nà—¼•}ôìÜ3ÃùgŸÂ;.:’¶õ­ý„™DdÛÿöW„w,Ú¸W‹Ù½o;B÷3ÓÌÙ÷Ô3õ0Ïð¾Ò}…ëÒ¥K—.]ºtéÒ¥K—.]ž'¨^tÚÅÞ[Ò,Æ„ôdYRŽ3N¡$q¥†”e­¼zZúT¥”³obö˜¼GµB8´Qxï0³¿j%QJá¼Çïþ±ï²â  ÌcÉŠåxRKr_>…&B:…ËAIžeA@T­3û|$pY×1Òz@àÈ‘&/çADVñ„x—päÑGqì1ëøÕõwpúi§òú7¾žBddIÊpÅ Æv1¹óY¯]K08 Fƒ”(/Ñ"dÎà|¤ÔëµòBŒé6V»téÒ¥K—ç+ÝÆj—.]ºtéò¿?ÿT|Ï §iFš¦H! ‚€fkf64µ‘¡^«¡¦ÕLfƒ¥˜¢Èét:Õ<ÏËðR)ò<›m­´6„¡.~Y2럔(¥ñN"DyôŸáñ8'Èó‚¼pÄqLše()Ë@ʘЀƒ(ˆp.'é”fÒéeqÏ+hmÊÏ›çH—³õñè©W™3<—#ÉZEŠÒ )Á[[“/J?­,ó6´ E–diŠYÿnŒuŽßüú÷lÞ| tšø+ûöíeá¢zûjDqÀÎÛ1ưpqO<ù 'Ÿz&Î êSÍ)P‡`ÿø4&ìAŠccpËÍÿÅ'>þU®ûÙml{f/kÖŽðÉO½‡_þòyÄZV,_ÊäÔ~ê:ÂIÎ=÷t~qÝ/¸á†-¼ô‚sè(ïÃJ¡¥`b|œÞÞz¬KARäÖ#”"k'äy~@R‚8FxO§S†ÊB:VÐÛ?HÖÙMB)Á?þéí|뻿ÄTª8<ûv޲zéÍЪÅtvíg`Á\tM`Š‚j×+mJ eÙDˆj•¾^òv›gŸy†¡ùÃÔ†F08¬w´ÛMªqD ËÇ]^X²\`­À»-Pê?¤d…ejjŠ(šUqˆrìË2¨ó‹>Ç~xC}ƒ¼úPr§IsI_ïRFG÷rÓÍ¿ãÚcÍšA6½ð:Í ¬Ólv7s‡É ˜?>¯}Í+xê©gx÷?_Æ©§m`é’…L<»•Jo]«ÐÌ2ÚIFïEî¨U{È;VoØ€6š ‡nä—¿¸’?Ýû(§vCÌÌÄQ½ŠðåsR!JOl%ÄÚœ,KHÚ-ò¢|^Û½gQX!®Ä¨ F:* çgˆÂ^´ŒñV‚p´étv±`á|ZS–_\÷+N;û0âjL%DµÇ™ÜúQ¥B}å:rS!Œ°hø++•xö"ŒZÒ V»téÒ¥K—n°Ú¥K—.]ºty>«ï}Ûæ‹³¬ ÈÝWª1Q’ç9PŽTµÚ RÚí„ °¶<EåDuQ³ãWe˜çÅlk³J’IÒ¡Óé” éŠÜ‚À„„"O3ªõ&iwâJv§ƒ¥¯ÔYðå׺å×[$ ËféôôalÐFQv‚Ñ% Ùlë Ÿ³w÷³ô÷Õé™K‘„Ö(£ tù†÷³#De˜ª¤ÆZ•¡Y–åEŒJ)(lF‘[²Ì’¥Îz¤ÐØÜÍ­¥È [Ž8 y d-‡¿ ¼w„a0ë k›Œ /dbºÆ—¿r_øÒ÷iÔàsŸº€W¼ì$î»ë¬X1ë& ð„ (JuÂs¾K)BzŠ"õÏZ —39=I£ÑNòÄcO‚‡þ&Æ'IÚ ÎzòÔ - šÓ£ÔkR@»Õ¢R«ƒ¤Iy\^IIž¥h¥Êæ­ÔH"eHTð@£§Š”ž©éI/ZÊ[Ÿdpp˜¸06¶Ÿžž ÌcßÞ½ìß· 1a•å¯çŸü&…õ}ôaLM?MܨâlL½±œ¬ÓÏŸÿ¸ƒo|íz¾ôÅïråÕwòÌ® YÓÇ>ôþLJÿ™“N>ž¤³O|â«üz†‡æÒiuÀ”HÔ IDATÒðâsOåÆ_ýëoØÂæãŽ`xp˜v³EhŒ<Ö;¬óX(QI»uÀ¬TÙ-lN§Ýbrj’Z­J^”0„‰iæ±J°í)°‡Ý{}èËìÚ?É{?ôÏ<ùø#Œï™á¡?ÿ…};v05Ýá×·ý5¹é¦ï°yÓ!L=ýãO?D__¡Þù=1JçDR£´œõç创œmQ A>=‰éí£'ŽݵcS‹᳌N³E¥#%EŽ+,6ThƒÄ϶Sœµ8ÎyªÖæåE!hw”©qâ‹N 4†«®º‘+®ø¸ÊâeËQ¡æµÇ21¶‡Û¶ÜÃääN^qá±Hà\•ùðgù·Oüãc»X³î`z{ ›_ÆM7náö[~Ï+O?žÎän*= ¢FH­~qݯylëV†††hô PäM–-ᦛîáŽ[ïæØM«Y¼z-3Í ¼„@xP¾|\;ïJM‡¤y‚õhçŽ0ÓlrÃõ¿`hî<”ÖLOïÇ“bdg $!ídhSÐììÃ;GkFóõoÿ‚ÓOÛÀÚËQ.aô¾;iOíg¸ê¹Šét2*JÄu¼78]#mO€³8:ì6V»téÒ¥K—n°Ú¥K—.]ºty^«ùÀi=»ð-%ÞC­ZÃ:K˜2MS„TaXŽ;%¥35Ž£Ùãþåê}9òãfßH¡Áƒµ`!ݘ% Rh¤PR“&m ›#¤Æ˜„¦ÝN¨Ôªå`‹,}x‡³Žë~~ëÖ¬¦^«¢$$I›¾ž^l^Ðiw˜šœDI…ð‚,+š‹QŽ,mS¯TJcd…+•B •Ä;s­ Q£e³Z‚òx¿øo·×qT-]”2$ c‚ ÂãË€T‰R5àr ë±–Ù`U`­ÅZ;;dÎê,•JT†­i ¸åöǸøS—ãdÁË/XÉÛßpU#ÉÆ¦Ø7¾ž¾9è`m4ÞK\Jh´ÒE^jE¹ø®µ@©²™V"ò¼ôà&„@+Œ‘´šM¼sx_ª œóTBë´1*À˜)⸇N’‘d9Ú(cp.CiI­ÑÀ˜ E.ÉsBá¥4éí«ÓI”4ÌŸ¿”‡zŒ5ëÖ •Â;AµZ%ítèë@ë¢0´šŽþþa¾vÙ5l:âÖ­_E^Dܶå~~ø½ßð•/\ÍÕWÝÁ_ï߯ÞÉœe‹%Ÿùô«¹ä“oä¸ã6ѨUØ·g/<酑𯛳Î8“¾y$íF—^Í ÿá,®¿þþóÚßòÊW½”¸£\s9i– •B(…ДÆ9/ ¢(Bq@PJ)´Ö´Z-Œ)U{÷NhÃÔä$ƒóW±Âó/¾Œ_Ýüw^ñªSøì§ÿéö±åֿӜʹ÷ÞGÙrËصwŠø Î:é(Dsš‘Z•™‰½lùù²æ-F·Ç±Þ’9V:{_¶ùžûÁ« ŒA” Ã<# C&&&èt:Ì\Éßïå'W_®8Vl¨sñ¿½©lÌžž†&Ö’JXŨ€")B‚ F)ƒsg˰[IC‰TžVkŠÝ»wðÄÖ§hδÑ*fþ¼TâIÇ’¥–(ªUŒŽ±NAÐ`Û ícúz†É2GžƒÑ/L<7Cxhea0…ª¸„–սä(µäJÏQK÷¯RŠ$Žˆ“cMå`ׂhñ3SáØEL<Ã¥ŸÁ·ý”Ï|ú-ìÛ3Ëð la‚OúÃPhº‹UÜ–cçó_ø,糞ÏþãOùÑ~N»½š‘‘éXæç'R@žåô£ˆ"Ï@?êó¿ùÛ·ßÄìünÞòÖO±wï8œsæsxù+Îç¶ßîàž»¢^Á÷!2'Ëb[¢þ"yž e‰%qqÔQ[¸æškX¹r%O=õ½nŽ«†«õ“éħŠ(­F9£<ôàŠ”Á“÷1ûÈý Oâ­XG¯Ÿ’•†P;4‚Æ6é'‚Ü”ù"EÓíõèõzƒnÀ€ 0`À€ øA½õ Ïú`Q”tPª!v”ƒ£+§£ÖŠ0¬F¸³ñïÜý‡'i­(¸öËofbx„tÆà™‚R ·8O½>Žã´˜íti †5La”a@½^ÇÚ*j *áQU)‘Ó Ù& ŽpPÂE¢½:®Ò2\]#¬£­Dd–é©y>ÃÓ#QŽ‹dyÆââ÷½ÿ*N?ó(„ˆX\˜'ég¨ÒÒj07s ¨a Áùç=›¯ýÇÍ<øÐœá9ÌÌO¡´@J…5/zÁ|ã›×ñÅk¿Î=‹†ë’f1Â¥Eiç8Ê¥„”¥¥Ès¤„0 °¶ õ(KËØ’°*¥¤®kÔk£<±gš×¼é¯ùÉîcåa+øòµŸd,œG™'évg9ñ”³8ãÜ—°~ýF¶Ï¿èÈôiÊhžñá1œz›8ÏXsÒ)L?º›»o½vXväádÆÅ…«rcR“æ9Ž®îϲ4hסéJºS3ÌÌÎ3¶r5ª^'O“*ûW9(ǯòB­Â)¾§–œÕ¶*ô2ÕçRÒíVùÌž_¹ÛíS÷Ž1xŽ&î-‚#8rÓ&^úâK9íÔãX½ÜåµW½˜3Î?ÎBLIIVt˜›ŠZMÓnrÃu·ràà>^ðüç³iËFNÞ:ÊIG®fnÏL®]CY«ƒti Ob­G–’8edt9'n=…âKØ÷ =÷B¼ EwjÞøk”.¸ü¥—!dAw , ½aK¤ç`0ÄqL^dØÒÔê¤I†TI–366†vë”iµ>•å"Q>] ½þ0Yêó…Ï}ƒ'wäÏ^·•‘΢`ì¤Ó0QºÈ2BÏãÐË$F¹x¾À$sh¯NnÀÑÚ[÷_.èÇê€ ð?ËÀ±:`À€üïç¿ãXuʲ¤V ±ÖG1žïbKƒv’¤*ij6kxž‡ @JU BVnQ¡BPóAÊ’¢(ˆú]¬MªŽïÕѮšk¡ßí@­5V$Âàj‰Òм(0&¢´¥‹„µ:ZÉ¥‘þåT9§ÚÕK9®’¢ÈI K e•MJ±J+”§ÈúÍÑ1Lì#víF•Õ8·´•è¦kó*#ÕB)%¹Í°¥Á 5®§‘H’,ÁæW»(Ï¡09ÚLÍíBH‡zØ +S²¬Àóª¸åT…\ *ǪPBiJ”'Aå$ù~S³ÿ4I¢Xµ| OîœæÚÏ_Ýù0ÊÕ|â½oä”õ›™Þ·›(žæ©¨Ëpͧ¿˜ÑÛ³‹µGOàN¶Ø=3ÅðÐ6/ñý:Z¸ˆÂA•[f”hj5M­EY²wÏ~æf;lÞ° G*l‘f EÙCê’ØDÔµ‹u-£«ÆHû}èFHãÐ& 2) ‹}в j(“’,öq›5†V¬$éÃb"¸÷îG¹ëw÷2=3Ks¨ÍP{ˆnw‘8IjpË-óÞwŽ(ÉØ±ý1|š86$iÁìLŠvJ$`-„Äi+^x:¯|å%œtüa~ e<§¿°€P.ÍFO‡¤Q<ЍÕCl™¡„¤5Ôâºï}Žó/¼‚~ôZ>ôá÷37¿ŸF}ˆng‹ =¾sݵ|ø}ÇË_ò7üàŸ§>\g~~7AÍÁæ1¡ïc3N“¨ß¡ß3´›AåØT°l¢ý¤‹ö=|„˜àñ§.¸øe<±'%à_}?Ë'-ý¤ƒ£Ûx¡CwÞ°iCÈÉÇœ‡ï f÷íb¨¹•;o¿…ÿüηØvò66nØRðÌ^ÄÊßr×]·Ñ)~ʶË/§tÝ´$‹ q7E{Cµ&iaË¡E•¼fõ2vÞööüþAÖœ÷œV^œàû>^‚DPs¦,év{UùX­Ž°O+’¼@9Š‘öJ;(åÒ‹{,fk—­šô߃32ÌùøÐßó£ëï@æe3^ñêˆ3/¿„°ÝFÄ–~wñ¡ó3ûØ|ä&&'‡¹ý·øÝ}?åää°Õ—àõö°¯Æ)pUÀÓOgÜó£;yæ³Ngdld,,ìeóæÃ9çÜS¹ñú;øöé?âe/»˜5c–Ë!îÍ‚pèÍ/ T‰S ˆ#ÊC(!KS”R¸ŽSeC+ ZH²$£6p$dÝOù(·ÀJCe„~ 7XFà/çàSstdRÃQ#+xè±»X»v-«<•4Ê€Üñè&·æàx†,È!ÉÁªy °Bö¸ 0`À€ 0àO§Ñh`ŒÀõ4ý~Ÿ±±±Cãꦰô{1%®v«lQ£PBQæ€S³'IŽv®ë`\¬P˜¥¬RJ‰5Š4Kðý€²,q‰v«ÑiÏ“eAÅU,€Ö GW柳ãHŠÂR–UÁV©$¦,±e HJéàx>Âqªò¦²Š'¥Eªª Êd)y”Ç Ö¹ÁÕ5¿N”f,v{Ô‚i–ãx.^ðÿKº¤”””¸ž‹åTãÐ%†(YÄ”®’X‘£”Kèù,vº¤EZéêºþXNerI–˜4§°Iž˜>B9lÚ|³Spí¿|››o½—¤„¿ç2Î;ãdî"OæÀéÑ^V§4Ðú)žÚ¾Éñe°|%®gÈÒE¢(ÆuI’Ñj´ð=…²”A--óý¬]½ŽV+dßî=Ôê>ZW‚²Òšùn¡ N- GÔGÚÌïbáñûi¯^ ¤(§ 6©!"/°‰…ÚS3 ú(×\óq¾ø¥ßà  ?¨Â††AØâï?ó-’lé„@çƒÖà×\7dÕd3N&GwÿÙ娣Vpþ…g/ôCYVŽÓ¢(ÐZ*Sr‡,ÉŠÄ–‚ÂJcqJ‹Öš<7©ÐBá²ÐEUЄ¨HÇ‘‡Æc´öˆã¸ÊlDa)ª\PûÇ"¬JŒ¬ÆØÍR†%hÇ­.ÚŠÂP9Eaqµ¬>‹­DaC‰(J¥]T½Žçû”€Ò¦È0I‚£=‚С\ß Ïh§WMQ’¦ ZkGPæK¥S”Ôj5G#„‚RR¢Ý¢0B–QNk0*©ŽD*…‹pB„# \Åž§º|ñ ßå{×?>|àÃñ—œÏÞ£—q: Èô²”Õ7òÀÔ4OíÛÃÊ#„A+‰çi<7#K3²<Å”•8VRR˜›”(?dÓÆ5´-’h×Mð\IšEH|\ÇAØœ"‰ðjCÄ‘¥9\GôºrŒõ‡­gÕÚIju‡‰eÃyÄ*Ö¶šÕ«‚:qaÓ¼äÅïàÈ#F¸àœ30…"îçäZÖš|)6Âõ]\×%+ R)¤ÄqŒ‹ÃªÕ«ø÷ÿ/å_$W]õ¢Å˜BöI’Yê-Á?üã[xÏ»?Ëé§_Å~óÓœ¸mS( 䤚E;!¾/8diAÔ/>y)I3&Æ·òÛÛïçÕ¯ùsÝ~Õ+áSŸz'o;†ý{#¬k´†N·C^<·r\Ïg±ÛÃq4ÙF‡[Ôu.¼äbö<ÀãîàèObô°õL6œ¦ ¿úáùÑg?Ï)§ŸÍ²N$'…PÑæ(KC?JÉÝ’Fk“ à¸-Ô¦öqஇqŒdhí2ÓÅØˆ¤H‰Ü˜Fâi)QÔ'Í ­É¡ˆŠÂ ´C„Ô‚¹2»0MS&ÔÚ%¹ˆØ´i3'œ´’û~ÿ4“>¼éÍÏãá]ÓüßÏ|Ÿ ¿Ìk^õ Ò>Åã“ôâ6õZ G•ìÝ»4ï±0k1E©‰bK&\|ù™}ÒQüæ×;øÄG¿ÀÏù+¾öÍÏÒõ9éÄU´‡=~óÛ‡xú©§ÙûôAŽ>îD6<ó4æfg°Ep—Ê«\¿®éÄW‘šj]4””Jµº&Í2úqkBzÔG‡˜ëîFf]š¦ÈRÎîab|3?ºå§,¨OqØ1ÇÐZ¾á…äI ¢œ„4šÁÕ@B„´Ô¹ )¦zè¦=ÊßûÏúàƒkÀ€ 0`À€ øSVûý>a"e%4yžwHXB,•Rå$iJZ(©ü¾ ¥Cžeô“íû Jâ,G)…1c«Â§8©ÄÚF£¶ä„­Ó?¾?Žƒï†¸®‹ã8‡ÊžòÌ*ËR $BT.XÇqQÂA8¥ÖVQy^¹Ì¬…Ò @Te:Æ%)®£@Jâ8¢Õn@‘g)­ †v\ú>®çQ˜‚^¿G­VCJIž§EUâõGÁWÊʹZ,t9Jâû.‰Š~?ª¾G+ÉŒYe%…ÉÐŽƒŠRxP:HRd†'vîç×·ßÏM?¸ZCñ‘_Ãó^x6‹s{ Õø ËúÄYŒ#¡È#jcmÜÑÝV™G1¹ÒÔkM¢´ƒD¡\‡¸ß§, ñwŸÀ1i֧Ȳ"&M+G´ÖŠoëzòBðÉ¿»–¸?ƒ”e)3fìeföq<"´æøà>óF>þ‰ÿàÙ§nÅÓ×m(Xìfh-ñÇÓĽ˜$¯¬°žçá8šÜd`-R–lÝzÿöåòú«ßÃäÄ8œ{Qdé-$¬;XQðù/üÿñ¥yÁóÞÁw¾óÏœrúi¤Ý]8R#DŸ¢ÌÏÏ277GͣÔÊ%Í&ÏqÚ ò”¬XdË– Üxÿóí/‰Ÿ\ÿ] å£û~ºyŸw¾ësŒŒrÆsާÝl‚ª#S”àyÄ)JhÆGÚœ?@=\ÉØø&æò å+ŽÛz'm=… οsO g=ç•<ºç§´Çí¶bz_Ÿ}û²lÙ æ§g!ê"„¡Õl"µ¡—e”I§ð©Õje5ùÒšRÐ"††< †™ùÇA)ÍLgžæÈ8^#Äæ)¶´I‚ëìÚõßÿÁàԳϤ½i+f~†bÁ+ȵA™ëädqáZ’Š>ª=Š?ÜÄ­7}“vkh°k 0`À€ 0`À€"¨·]ý¬þQDMÓ!Y–Á¡yž‡ëúH¥(-QåÇIB’T%7A¢¤"Ï ŠÂ"e5 UÉ•R†5Ê¥}¨Š`Š¢ Ks¤r((+·jžçdYŠ”²r¼–0S` Cš‡bLa±¦D».”TB¬rªÂ))QŽƒ“&xR275MX¯4ë8ÚEû!EQE1RVÁªœËV…^JR–ày>J98Ž^|CŽÚ,Ë)KAi!Ï YfÐÚÃqÜJÜ- ¬±äEÎââF JV­?ë€)KB¡™›ë’y.žôhMŒÑk“÷cÊ}Sh/Äk7@— J´ôÐÊ=ä¾v”K aˆ±–,MÂ"€4‹™ž_ÀU’2Jq=]÷˜[œf|¤Á©Ï9‡£V¬æñOqòÙgqÂ)'rã?á{ßý!kVsôQG§%>|õË×spf–óÏ?–­'Çž'¦øú—¿Ã¯þºÖddÙjš# Úi0ÒZËÊåGò‹_üŒíÛàŠ\Â/o¹‡šbÛÖÃ8níjv<ò0N=…Å…Y”V¸®Æ¸šÐñ ]’%«b¾Â,v{LMO14<Œµ–(Ip}í:ôã#@ Ãüì~”µLޝ@‰€k®ù?ÿå.6áó¡¿}7Zö°ÆRC’$ôz}¢8¡”"Ïr´rõ6vïAvüøÇüèŽ_pí·`Ë¶ãØ¸í¥ÿå‚>(¯0`À€þg”W 0`À€ÿûùo•W…aHš¦8Žƒïû,,,j«/Ë’$IPR‚R…%Ís„rT«ëz)ªqIÕ”¤8Ž Ö„¡·ôOFJ¸®KQ”e‰§=æûüPbŒ ,K¤Hé ¥À–¶jè–•H+e‰•àëk ,ÁÚ­ü $K´«Ès…19¥H+J#ju‚°FiD•ñYB)$R¹¸Ž‡” Ýp+×lžcL‰ï!0ÆŠG¨D‘nåŠt4RjLQb-¾‡ r³*Gáy5L‘“›¿ÖDûy*é÷b¢¨O­>DÜÿ´‡Þùγxr×~n¾ùfº”ÅyC A;¿áÓiâ‡×…m'Æá+GÈ¢I}¤Ïé—œN;êcQ8®G¿×C)ðcˆ¸O^¤žK£Ö"É|ú½.©…Ÿ`¾g˜™™eÕÊ D‘aÏîÄñ,Q¯G'Nxð¡ìÛ3ÅcÏÐ[Œ‰£ˆnÏ’ÈíÀº5uŽÜ¼žË/ygõ &WLPdóô£¦‡TЍŸe)ÚññüJA%¬ZÑæ/Þþ:þéÿ~”}øÃ´Úš8êb‹.Òó°&ÃQ†á¶Kg~/aØä}ïÏ»ôÍ|áó×ò†7ü9…„dYJ–õ@dx~ ÏõÉMõ÷QHš­6Ö¸®¦´½Î,Ï~ö)|äoßË_]ó·ôû^øÒË™}jÏS”6%Mvñ¢—_ƺu“¼ó]dçð¼©|\5C’NÊ@ûhæžÎùË·}’o_©5<ûŒI>ÿ/eÝa+0&bddˆfÃE©ßu—7*óâbåø$eÂc;Çw¤ ñ]Y ûV m¤7¿ÀØò•œwé%ì}h;ÝvñD7fÝÙ[¿àdÎ;z÷}÷üþ+ßfóÓ9ì´m$&íF4-bc©IŸæÐ8X¨iÆŸ³•'n¸™ƒ·ÝÁágžF£é ´À÷\<©I ƒç¸¾G–e$YF£Õ¢Ñ¨c³Jƒ) Á°ƒ‰À+}G³˜LÑhv†ÙOqÕ•˜˜_=ø0¯ç¹ú ¯ãíoþv?µ²tHÓ‚…éyâ8¦È¡´–"Í™˜œÄsêò•[¹è-ƒMnÀ€ 0`À€ øSÀÉójÌUkµ–0 ‚€~¿O¯×£ÝnW9¨~%8*é& a-¬WJ”Rô£¾çÓ¨7ñ½¼$­¥09½~†çyxžWåZº.RJ²,CHÉøø8Ž[•hi­ˆãíÊÊé*¡¤DkMY’$ÆTQÖÚ%¡6cq±Ckt”îÜ4qÓh4PJQŠÊIÚKRn@Xo27?Mctá»%DQŠ’)²¼j¯D^‰Öš,ˈ¢ˆ0 Éóœ~¿ëºÔ½¨K½Ö`jê Z¬Xµ t:¤”ôº=¡ÕtÐÚ’[Kž žÚ³?¨„òù9¸å—·qp‡Ûwrðà^|pz ²|ÒD ž” §¸ŽËŸw!Çž|k×­`rÍ8qw ÇÉÈÒ§q”!3=Œ‰H"A’¦ B7 ÌK²$Áq ¦§ö°õ”ãøÒ¿~‰»ï¾ƒF3dýúIF†ëeˆ;³¸ZSÕHx·3K»ÝâãŸxo}ó§8ç¼ ™˜˜Àu-Æ–ô"Ö¾’Îì"ã8äYA½^£(ÀŽÒ•Û2ËY˜áâ ÏdÓ†õœ{î«i5‡9ï¢ç2s`7®#H².qÏ8}_þÊG¹üò÷r`ÿ[øðGþŽ¡Ñ ”-PnAž)æSÞ÷îkøæwoB)xÕU§sÍ_ËÚÕ+YŒ)’×¥\:óóLN,ƒ2"7 …ÇäÄjúqBœEÔ‚€°æx&OȲŒ0¨Ñëö^€QŠúP›Í§n#ݼÈ?ü!OuÇ=ó$šëWrÒK.æî›~ÁΛog8öå/Æß¼–…§÷°¼6B°˜ö´Gi, é<ë.z6ÅOòÔ¯ï`õqGÑp?ã£ÃÄÝ>íÑeHÝÄæ–ÚHg<ã4®~ãnÞñ×ð­ëþ“¹ƒOÒh¸ÔêuÒ^R9›MI„·Š¢ˆã×óq”ÀQlAž',ÌO±îð•|û[ŸæÍoz6¸àyóô“÷"Ýd3ßaÙŠ>ro~ý»xÙK_Í?üÓ§Ù¸qI‘Pd†+®x¿ýÝA–hÞñ—Wñ¶w¼–(ÝËôÜ^„tÑR‘¦)Z9P:¤‰A”.R@e³tO•>®[=ýnk ¼zÈ|§ƒ£<ßÇ A‘[%bY“Ó^x)îý÷Þ|6odè¸-œòòW°÷Öß²ç®øéW¾Â‘§œÌaÛž ©Ñ+ ý¨SZ¼Ð'Ís¼u+X¡v<ü0C&ebýl?¦L3¼ÀCIq¨Ô²$Ï3( *1$QŒß!/bTVæÌÎui4pË‚°åóªW\Ƨ¿ð}[·‘×·}ôZF[Šù9—©ù†&VÓíuñÝÊ]¾lrœÅ¹)††G˜Úñ­fŸv»Ïe/=—ËÄ«yïû3~~Ëù·û&7ÿü‡|ê“ïæ/¹”×^ù~¦¦Þõ®ó8ê„ã`ïÓÄQ <×2>:D’jR$¥(iV‡9KÅUÊq¨7(í@i1EAž%(kiN½EŠVÙ_äþ{îe®ÓãÂóÎàE¯¼Ü åy(#™›ê0¹f ý~—ùÙ)–רù†ù{ïæ¾›†ã…¹a3Gœ~6¢5D<=ËH.xf}°k 0`À€ 0`À€"¨÷¼ýœþ1»G.‰£½^0 ÑZ/‰Š•{ÔP ™‚²¢°˜"¥Š”˜¢XÊ-±¶ I"²,ÃÚ¥lTSâûÅÒ8½”riôÙA»Õ¨½ë¹”ÖTQ¶z½RNÕd_cª¼S·*Ü2&ÇÚ’‹±ÙRŒ€DJÖ.E‘Sƒ)JjA€O vìØÎŠ5«ÑžŽGi% 0ù’(,ÕR~j% gYF½^?ô³µ•EAPpûA5¥-‰¢¨ºW¡”ÄóôR«Äs5íá&Ón·9öØ£Ô¯~ùwlß~7Ï9ý$&—’¦ qa²®*ð\ËáG®aÛiÇóÌgÀYçncëÉëÙ²eŒ#7 3·w/q>•`Jpèt,†kú½„½{™ŸïñÄ“388Ëþƒ1ÝN•_ë» |¯A–Fx¼øÅçðÚ«.ãµW^Æ«^{)¯|õ¹œyÖ&——lXã1sðAÊx­† HæñCT[ †ÚmÒ$#K-íö8×Âæ.&wq6’€^¯O³¥1Ö>ëÖmä[ß¾žñ±q6},OîÜŽ£ea¥,µö&µ$qFšæœpâÉüø'¿ãÁûËó^òJâþ4a ™™& ›ø^¸”l–ÜÈêнæºzé>ÏÕÌÍdÕºÃ9óôs¸úê7hÅigÉçq=A¯×Áó|Ò¸à‚K/aÇc;ùë|Œe˶ Õ ^øüWr÷½ûhÁ>ô2Þú¶?£·¸‡4ŠÉÒŒ(Á–ÌÎÌã:.ŽrQR“¥9¦×óR)®v(Ë‚¤Q–†0 0ÖR kHYåg™!M3,‚^Þ¥6Ôdhå*V®\‡YýåtX}ò±¬8çÙÔ¥bêŽ{˜½ç&&FaåÁPƒ¼¿ˆHsš~ 'ä ¼Ôê ¦þ°“2Mðk.A ¥Âƒ’ÜäØ%ÁÑš©¾öˆ‹%R&ÄY—(+™]‹,$ÇffßüŸ+ŸÇ×o¼™_üæÒ¤ Š,çs ¯yÍ ‘JñØŽ=|ñ‹×1>iyûÛ_Mš.Ò†){ûÉ{4Jò2gçî'¨7F8æ¨ãyî¥'rÉe' ]Ag!â÷wßÏÃ;þòM´Â²”taCËk8¡‹ç71Æc1Ï)’>­PSZE¢=$DqL¿ß¥»¸H™e´FÇHçæ)“ŒÚÄR;¨Î{¶o§ß[dÓÑ[h¾Ž,‰±‚F°^CkÇoæ%žÖ´FÚxOmçîo}…Ý¿¿M‡¯aÓ°üÙçrýoc¾lYWã‘{oaÓ+Y{ü‹þË}±:`À€üÏ2ÈX0`À€þ÷óßÉXUï~ÛÙücË}Õ|mé÷û‡rDÿ(€öû}°%%J‚c2Jkð=D&)YZ¹ZWQ˜´r³*‰ µ&IRLQ µ‹çyh­ ‚8I«Ò+Á’k1¦ Ž+qR ø£ƒTàžŒÉ±¥Y*Å2‡rQ³<,E‘£k!é÷Y†?4 YÂØ² P’œ**@;.ÊÑPÚC[À’“·zï4M)ËÇq–¾3Igq–4MPJõ#:E $ kKÎÙ*ïÓC‘xÚdž’Œ¹Ù¸Z¢ŸSO= HøÜ?þ–<;ÀÖO¢^ÇW דB™Ðé M¡ƒ„•k›±q˜óÎ?žK^t>—¶å-xùËÎcÛ)ëY9éQ«[V¯iÒ¨kJ£ \—áaá!Ÿ•ËëœtÒJÖ¬ªqì±+8íY'rÌÑDZëÉ}iÌØPÈÆ -¾ÿƒæ„“639"ݘBv0¢ƒ#»ÔA×ÌíÛC{Å$^«Igf¿Ù"cz½.ÆXŠÜÒïFX#È3ƒãhjaˆã¬-ÈM$ɉ#K£¹ ϯó¹Ï}ž /º×Ѭ\1‰vÂZ0lasE–Y|¯†…5œpâþúoþ…UËV­Z†5ív S”ªFÖó<_zP@k§:$0–$‰É³c šKa&׬dÅä8ŸüÔ?0:°eóJë „ÆÕÓÓáÏ>›ñÉõ¼÷}Ÿàúëná=Åò þöcWóú×½„é™Gñ0iFœÄ¥k9xàZ+<×…Ò"D‰ÒŠÂdDIŸRÊ"SRZC‘g˜ÂPZ‹1•ô0%Z{å¢D‰›¥$qŸ,ÏñG‡Ñë7°llœÙ™v<ô*ê³üøcY±n5s½n»ãVâÝ»i Ak¨°º *+é©’ÔSÔGGõšìßõ8B¤ÔÆGBÐïvI²­«¨²´DýI„ZX#Iˆ“†GGé,¦üìæŸrô‘ˆ§9øä£l9õ¼úïaïÌÿá)²8åÊ+/áÔgMn¾ùõïð“[àÒKNáŠ+Îa´í# Ÿù§aÿãwÑg¦3<¾’¡‘•Ü{ÿÝüŸ—^ÉÎíû9樓Y»v#<÷<Î=w+YÞ#ZX %fqÞ¢6T§Ä'KÆ÷qUAè @c-”RPXCœôɲ i-s3ÓÐÆP B°–î#ñÈÝwâ{›¶žH°rÊ‚éÅy¢,¡Õj’.,õû¨¡&%Îô<Ó×ßÈßú&5e8ö¼S:÷Ù°v5Vµùâß}“o|þ[œ²u ÃËWpì…ÏqØ@X0`À€Âê€ 0àO@Xuþè­D‘òÿg%. 7ÆT#íÆXLa®Å–ˆJl‹ DJpIiIilõ^RÊ(-–Uíh@玣I’GK_‰•ZkÀÁÅÁ kUN–Ve2¥¡(2”ªœ RV9¯¶¬œª¢(1–%1×%IS‹–?ð@   ß‹ðÚ Li(Qé diNQ8ÚÁÕDÉJHu–®Ÿ¥ŒXp”%ªH­ðKÏsA””˜jtØä(¥ÑJâ È‹“÷ ꚃûæ Ñä5W¾G4ù¿Æcþï½æj6y8SPš˜Àƒ4Ï«ï´,°Y,NY0)½}XqÄ6¯v)Õ þ†çCX§·ØÃ(‡(Éèöº(ž_eÔªÒ¡Ñ è%‹Œ/?Œûîy˜ì‹,iQ_5Âc=Êó/¿˜$ÚNoaQj„†°brIÚωrÅкm$ 3ícù±Cø¡fnz#+Ib‚½ÅE¢8%Í©Õj¸nNœí#/*§qQêõa²ÄÁZÁÅ—½˜Ÿýô¾ú•¯ñæ7^EÍ¡uÈÁýS µ'XXèÑE*‡RBiJ6¹¿|׼孟ç?¿þ÷ý9ƼW­ªZ·¾ÐÝô•nºih¡[EŒ€M0žˆ‰›gÇGs¶7‰š‹ò$FcÜI¼ÄˆDÅ[Ø1Fñ‚¨€Ê½é{÷êûZ«×ªU—yŸcœsÑÉþ°OγÏ9‰çyæïS}XUµjÖ¨5ßùþß÷Ä1Žüì¦öÿ˜í[VðÅÏ?Äc;wóëo»•"ËPÎÿ½“ºšššššššÿaõÿ}øùÇ©÷ôšššššš_ìý\ÅIŒ|ßÇqâ,¥9ÒÄ÷|° ]<ÏCJÈó’øÁqã7pí/]ÍŠå£ôû]&—­eîÔ<± вDHí:,œ:…6)oùßbØ/¸óÎOð…{·26±‚$M(É¡ÔxÛÆP2ì(st.ÐÚ%1Ží‘ç)ÂÝcËÖµ|ïû÷rã¯ÜÊíï¹›»ÿüϘ>þcËé #îÿüßó»>ÂÜ©½d+ACòžwßÊò%cÛù›É†GHƆ$Ù+*(ò ¿ÓfÉ’Q”t<Ç!Ë#ŠT3ÒjÒhúÄqŒ‘SS‡plŲ¥KP¶KgôC”T-ÉR”ŠæH‹¹™y©plI'hã6Cz½MÏaÓ¯`ÕÌQ{ì‡~ÏÝüêkoæ/=ʾò~ç–wqÿ÷P ,Eg94\²,ãÈîC´ÖžÈ-° Žeaã†<i£I) tž£-ƒÊuuÁÅóé>ýSæŽE[’ÎêõŒn;Ê KdeÓ›ž¦=PÄ9viáÊŒý=ÂÁÿ™þÑ#¬Ú~›^yþÖMÐï²ûGO2µ{/e 츘‹¯}=ÏMOñ»ïû2W¾þ×X²dõ¿ù¥nŒ!YÌŠ®©©©©©©ù÷?KÓôÿñã”eI’$ÿÃ]MMMMMMÍ¿–ežvþ7÷þùc`¤TyŽÛuéu»ÄqÄH{[J†ÃËJƒÖ%i–â{Aü‹B«e© ØŽ%4½þ,®[9#µ±°„Äó«6mÇñp}<Ï«ÜT-m¤%‘ÜÃp¸ÀÆ-›±¤M’‚` K(ò4ÂõªlÓçÝ¥–E~Zhu]›a4ÄhM–f8ŽF †è$¢ˆûtÚ ‚0D†# “’R8”EŠãˆJdËr”ª„·^¯m+\×A)!XÌ“ÍIÒK”t±,…ëz$i†%$E‘cYUnkYäXBc;6J*ò|1ÓÔo277c» 4­ö>òïyß'yö¹!W_±‰»îz7¾+vNšuA$E•1«„ƒmû%h†Gïÿ:«ÆÇY}ávR_rüûæ/þâ Üu×m\wÃkXX8ÁøÒÇ1xyµ.leÇ qœ1Òìàº.y^ba' ¾ßàØ±ãÌžš¥ÓêÐiÐë- ”ÍôÌI&''˜_BQfŒ¶É“!HÓ”¬(±]·*R£rKÏ?Éè’¥8aƒ“Ï<ÎÔÏĪv‡±e+P…ajçNžÛ¿áûlºàF·O$IJ\ ¯S03Í“=ˆÒk¶C°å,J­‰Š㸔aQöSly6Q9Ä)"F|ÿkàŒ´yá•W1ÛÒ™\Îvîâ[ÿøÿؽ\uÕÜóñ»hû ú'X˜Æ1½…FC˜!>±—öY;h®»ÜZÂ>rýÐÃ+J¤V§`Ë ×pï?Éh¡Ë˜®Ê×%ûðC¢î,çÜp ‘§û(' 7¿€ï5PbXôÐvNž$¸… a§ôžxŒé©¬]9†µõ"úí pË!v!”© ƒž™gö‰ÇùùCRvgXuîY¬½à<‚­[)•bxä(S{ö3(K&&'Ywö9”d‚Ql¿äWŸ8“÷Ýy;^ðºÿéúp8dçÎÿêÂRMMMMMMÍ¿7ÆÇaëÖ­ÿK÷Ÿ™™áàÁƒH)ëƒYSSSSSó„ÖšV«Å† þ¯…Õ“ßo,ËÂóŠ¢¬Š’Ê’<Ï Ã`1Ç´DI…‚$I°,k±õ^eÙ¿WK„€²LévgÃ&®ë“囼„ i4FH²”(ªF¢¥+)Ò×öpm,ÍÑC{yð¡osée—²bÕZ„ç6½~DÓsp}‡<¯Æö-K,:UÅbÁUECeaYdÕÈàù,œ<Á¡Ýϲ~õJÚc£hË¡p<±Á¶ JV.Óýº_> ª2¯²DkR6På®–hm°m›ý°h4F0ºÊ9öƒ&Ýn—~¿ëz8Žªr„³Œ(Šèt:ŒŽŽV)L\,z3T®îçÝëJ: ‡ëøØŽƒ+-%q·Kvü0 ÇNà+IÛqè-ô8qì8ÇfO¶;œwÉ%„çl­Ö}2À–ò”îî=Ý·Ñv‡±3Wâ¬XBT$¨æ¤»mèË’Œ;‰ â‚Çøï,Y·–É­ç’§’ÖHÓ°ÙùÌ€ Îð‘ß¿™[ßù_H‡Sä1䱦ߟCÙšñaºžãŒ—\E¬¢Ë¼3ØóÜ^øüø“?üS‚–áŸþ*+מItà9ÜEß/èHÅábxü›~ùÕ É1nˆ=X* _ü —EAž GBŒNz@|h7G§ö£löØÚ+7Àèj²q>K³å „Çð™ƒÌï:ÆÞþ„,pþE[9o-κհÐçØþ)íÙK?IÙ¼íVìØIJ22?ÐC[Çg=^~Ùë™™îõ¿y2WSSSSSSóÏÿê¿1æ´Q¤¦¦¦¦¦¦æ{?WžçaŒ!ŽcʲĶíÅÆôª=]ˆjS7 m° ­²,[t…ºX–uú‰žÃO“‚$ÉP*Å’6y®Q–ÆŠ¢¨œ­®ƒR6q” EY”XH„xž¢Ñlð²‹/fùŠËªŠ£°ªŒLaN‹›eYVíè@–åÿC¹”m;x¡‹°N’S”§)a06>޲íÓÿ·Öú´H+- c Y–.Ó²ÿöù;ÏßVJ.æ½JR/ŠËÕq(òjŒ§Ê®•8®Qe®æyBž•hm¡”\Ìõ(‹Ãa‚%.»ìRÖ®ÝÂíwÜÍWîŽ~ïvÞrÓ›¸êšËév§ÑE F“ç #­±¥éžš£5Ò¤39Áìì,öª¥ÄQL\fQ‚cID©0ÒBHŸ3VžI©[üÝg¿D«eaãŽM5´8þäãì}z';ü$˼ ^pÎ9,?g=òìUä'öðì·þ‰³CÍ&gŸ¿ƒöÄ8„M²™S`Ûxe­6F º½ŒÎÈn}ÛÛy÷»~ïÿ³“¸ššššššš_œ¸z?¯©©©©©ùÿò·\v§1 ¥Ä²ÀMžg§šJÙ‹¢¥¨ÆÙ¥K¢ H©°¤]T9i–“åç:€@ Èò˲ð\A¢4£ P­l\Ç#KS¤¾‡e<Ï%/JÊl'ÄuÊ"AH’˜¢ÈQ‹‚¯µ(ˆJ)O7ÀÛ¶¢?wŠ'NÐnaŒÁw]¾Bç²aƒ¢4(Çg0ì!ø—lT)+AêùÇ^D­UuZ +KCš&”¥>-L{¾‡eU±JI”£°m KV?–<ßÇs|ßžÏFHKâØ6q’2qÆ*^¼ãlöñè£S|çŸer²É™«ÖâyMfff ‚KJiLË÷ñlU¤<øÐ÷8ï—Sä]$•Ó²¥)qìLƒGyŽOê‹\|ñe|í«ßdz&ç?½õBnxÝÕè"âÐ=4BŸ…ù9,aÅ qaI]8¶ïù £!~ ÅÌÜ ’ßu™›Ÿ§9ÒFz!®çáz6ÊU%º0iš¡5XRVÂ9ðè#2??ÃáÇؼy yQ­[ Š<£QÒBƒÑšRâhÀYgmäì-+¹ãö»Ù²y+W­¡×í/¾§>²@Œ.(Å‚2¡2rÓìŒ1d ‡ ÂÆRþñosË­ïf°P²yóZÖ­kòÂí[غål¢d4Ž@t)(QØÊæªk¯bõªqÞ{Çr`ïsœwîÙ,?s=s'¦1F",,T¥^®ë¤J¡DX`´F) ß÷²ÊîØŽƒ.5Y–#¥ÂCŠ,'”²Éó‚²0XVu¥T•û% ®çÉP»„­QÊŠáp´ÃÊuë&ÇÉçç.tY¾é,Ö/™À›eúáG8úèã¤s¤`<4Û°o,$™›¡¿ë9öí#×;h"½¢ya‡!Ãgv2}ü8+_°Üu0¶OZjší6g¬8‹5g­å¾/}•ã3û¹þÚ+ÀÒxA€´m´U`)Czj'Ót6mcÆ–oâ _¾ŸÿãwðÀ׾ί¿ùF®¹þ þèîÏñ•¯™­çÉòõK1£Ž‡NJzSGYºöL¢aŸ…AŸ2‹iú>BküÖ$e3˜ÚÅÜþŸqxÏ“ÌÏM³áœí´7œ¡Iª%vØ&°5ƒ=OÒûÉÃûöwÙõ­ï1ª\οâr¶¿öJÜmë9>3ÅôÓ?gz×r²ú¼ Ø´ý…xK—c<(ÏCº.I^`)›¢Ôä9ŒŽ­áç?}‚ï|ûAÞýž÷Õ;WMMMMMMMMMMMMMÍ/‚°zëo_|'°ëâ!–äYŽà8.ÆTãÿeQÝ 8=n/§ÇÓ4=°ž¥®ã02ÒBJ…çù àû!¶íÐë÷Yèöx(iã¹>y–caPJ03wÏsp}[”Æ"ÍrÊ<Á² , ´®D`c Eñ¼ƒÕ:í,UÂpè𦦎066^•O•ƒ…yÊ,Ç<„rÈ@9>¾_96a!„$M30³8…k ”E5reå¢KÕBˆª°ÊCE8Ž}ú`k£)Ë !ÊEñZWb³©î_e¹JÇA‹Á`€6š4Ò|®¾êU?¶‡‡xŒï~÷§,[Öä‚ .Äu¼êÍT’‘ö¢ÔÈ4Æk59zä0žÐ¥9PJ¢)ªOÕ$Km>ó™ûÙ»wŽuk×ðÄÏÐ…»ï~–ËBwßv(²Œc‡0:6‰ë¹•(ìù¹F*Y½ÏGÚ.ÊV(NžðÁO0=“ó;o{5»çC\sÕ+¹ý]w±ó™gxíëÞŒ4?l’$ ¾§Èˈ™é¼ø¢óxå+·ñÅ/~ƒÏýí—˜è49oÇ¥tçæˆã¤rO ƒT‚¢LÉó”4èõúÄIL^hSEmx®‡”6Æ€’ Ûv«¼VÛA-F,h EQbLåžn¶Út•k \W!‡§=½ï=ÈS÷}žç|¨wŠuÛ6³á%ÛY±u NràÉÌì9€’’‰õ«Y±ccgžEs|–çC©ÑEI`Û)IóÇÉò’¢Ðh“ñ÷?Gïá–Ûî¨w®šššššššššššššš_aõöw½úNÛVäyFQæØ¶Äu=ò¼Êµm‡,Ëé÷û(YeVBj•3**›ëé\V¥TUèd ÊR ¦§§ !žç‚²ÌÂ"B|/¨ž£()ò[9`@CYf¤Y„T °–RŠh°€í(„Ueš£+ÎNgÅqL’$HI%Î:>­vAÃÉcGplA8:Jžår ¾çSY–WQžG–e§ÁžP+áÊR#„…çù8Ž‹œŽк_•RU–¬XdYvZL¢xQ„ €ª0«Ê½õñÀFèÑëu‰â!—_v9kV·xø¡|õË?åÔì¶oß±è¨`A‘FXºÀ‘à·Z=t˜3W­a8ŒÉÆõì*wVºd¥ÃÃ?zŠü³LŒ/eÿ¾ýÌÌF¼üÒsxÓ¯âèѽŒvˆ‡ËÎXAxŒM,Š´X(å"•$Ë ¢aLsb’,ŠÆ1#Måò8arÉ2ú  q<)%Ú”ÄÉm*go4È( CGaá¸N•ak æ» ,Y²„V3àcvo¼ñF”2U”°H“„<ËR’ça#$ÍR=ŒT6W]óFf¦wñ±?½—뮽a9Sø6i6Àó=l×%±¤a(µBÊ19³óúàó‰O|ÞPó{wÝÀ‡~ÿvÚ# %5¯½î>óéÏò…¿û,—\ö ÆFG M†6ާ‰ÒSŒO4¹ñÆ7õ†üÖo}’O?Äe—]J«Õ©{ªµo; ]†ñ€ÉÉ¥4Â&¶­£. X–"M2ǥѡÈ5išá:jq½ØÒÁ¶+×yÅÄIŒ”ÕÚMÓYdQ „AØZJ) :mrÊvßz.V‹Ò’c£dB²|b’1×ÅÌÌ2¿k'Ÿ|’…»èÄ)Âo ÎXŲõëYZtwÈñ©CL}{ŸåþûŸâ'?þ1/}Ùt–Œ‘FŒÉ(LŽ.3ÆZ#ìÛµ—<Éi´:¤ENØnǤtÈMƒ÷ßùQŽ‹85;äıí¶Í­·]Ïú³–1ÒtX˜ïÒ% pE0À’ !$ƒÁ¥\Jmðƒei^âù>Rjš¢Ðô1Î¥68®Ë0b)‹,O°¤D)‡<-Å|›…nD•PäEµ¾,ŹçncfæßøÆ7¸øâ‹Hã”Vk„0ñ\—…….R*¤²éú zƒ>R.zé¥|ÿ{?äK_|€_zÍÕtF;$I! ”4 z]¤å`´E©ÑТ5¶‘Ý;OðÎÿúûüõ§Àõï|× Ü~ÇmdÙ,yvŠ"]`b|)oxýØ»w/ô÷pÆêå¬Y» Û±ç0¦„²£±eÈ‹.|¯½áyä >ðÁâ‚Mgo"/ ò2CX0ˆz„ÍEfX¸®G–æÃa ÆZÌÖÄQŠ1‚ ðÑ‹n×¢¨ÊÕ„• — ò<Ãq†ó}#JP蔌; H!Ö -¤ÚÂ;8c“XËÎ@ž1É apÆ]ÂP0*5Í(!>x”ƒOîæäSû9ü“'‰Àv=ZKÎ`ÔÉæN1œ:ÂŒ‚±1zƒM; l/!°[4ÓŒìøQì(&›ïÑÝuçtwï¢{p?Éô æ÷dpð¦ÛÊ3¬Ì`')o~Ãë¸ø¢ðݾA:(yÕ+v°åœlÞ¸‚×]u)ãc´½iˆ(%zv's§8¸/Êw˜ž›£åµ8ûE/dã+¶Óÿš<Ï£,Kâ8Æ÷=Ò4[߯ ¸l[a;vÕš®5P•TyžGQ”ض¢,uåÖÔ†}ׇß}7ßüz0EG ‚Æ–q‰cŽòåû¾Ê{îø3ÞúÖ«¸å¶ß¦ßà)óß ð‚6E©À²ÈÒ”Ï|æ^>ýéO³nýZÞúŸ~…­çn$Ëz4F<Â0¤Èª2%­5 }‚ÅÏd·»€mW Œ¶È²a•2„e°„(Œ€U9Æ¡957ÍØXSjʲp™;1OèyH•¶mÇbŨ2£ˆ‡H§‰?º”~aa„,]¿¢Ccr’å¼;5àùôNÆ!bf×sˆ^—e¶âðO…8#nú¬¾þjT«…](ò¹„»÷Ñ=tŒÞÁ)&lÉ’1ŸÉ-ìq‰=‚™Ã (2“E4Î]Ã’3ÏÂr:»B’˜Œî°G‰!tá J í»” Š"£?èQ)£6J)Nž˜¦ÓÃ÷›ÄQAo¡ÇIJå\ÿš_¥Óiñùûž¨w®šššššššššššššš_þOÔæ„Õñ#IEND®B`‚gnuastro-0.5/doc/gnuastro-figures/epicycles.eps0000644000175000017500001766555413217200075016735 00000000000000%!PS-Adobe-3.0 EPSF-3.0 %%Creator: (ImageMagick) %%Title: (../gnuastro-figures//epicycles.eps) %%CreationDate: (2017-12-22T13:53:17+01:00) %%BoundingBox: -0 -0 1366 500 %%HiResBoundingBox: 0 0 1365.81 500 %%DocumentData: Clean7Bit %%LanguageLevel: 1 %%Pages: 1 %%EndComments %%BeginDefaults %%EndDefaults %%BeginProlog % % Display a color image. The image is displayed in color on % Postscript viewers or printers that support color, otherwise % it is displayed as grayscale. % /DirectClassPacket { % % Get a DirectClass packet. % % Parameters: % red. % green. % blue. % length: number of pixels minus one of this color (optional). % currentfile color_packet readhexstring pop pop compression 0 eq { /number_pixels 3 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add 3 mul def } ifelse 0 3 number_pixels 1 sub { pixels exch color_packet putinterval } for pixels 0 number_pixels getinterval } bind def /DirectClassImage { % % Display a DirectClass image. % systemdict /colorimage known { columns rows 8 [ columns 0 0 rows neg 0 rows ] { DirectClassPacket } false 3 colorimage } { % % No colorimage operator; convert to grayscale. % columns rows 8 [ columns 0 0 rows neg 0 rows ] { GrayDirectClassPacket } image } ifelse } bind def /GrayDirectClassPacket { % % Get a DirectClass packet; convert to grayscale. % % Parameters: % red % green % blue % length: number of pixels minus one of this color (optional). % currentfile color_packet readhexstring pop pop color_packet 0 get 0.299 mul color_packet 1 get 0.587 mul add color_packet 2 get 0.114 mul add cvi /gray_packet exch def compression 0 eq { /number_pixels 1 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add def } ifelse 0 1 number_pixels 1 sub { pixels exch gray_packet put } for pixels 0 number_pixels getinterval } bind def /GrayPseudoClassPacket { % % Get a PseudoClass packet; convert to grayscale. % % Parameters: % index: index into the colormap. % length: number of pixels minus one of this color (optional). % currentfile byte readhexstring pop 0 get /offset exch 3 mul def /color_packet colormap offset 3 getinterval def color_packet 0 get 0.299 mul color_packet 1 get 0.587 mul add color_packet 2 get 0.114 mul add cvi /gray_packet exch def compression 0 eq { /number_pixels 1 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add def } ifelse 0 1 number_pixels 1 sub { pixels exch gray_packet put } for pixels 0 number_pixels getinterval } bind def /PseudoClassPacket { % % Get a PseudoClass packet. % % Parameters: % index: index into the colormap. % length: number of pixels minus one of this color (optional). % currentfile byte readhexstring pop 0 get /offset exch 3 mul def /color_packet colormap offset 3 getinterval def compression 0 eq { /number_pixels 3 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add 3 mul def } ifelse 0 3 number_pixels 1 sub { pixels exch color_packet putinterval } for pixels 0 number_pixels getinterval } bind def /PseudoClassImage { % % Display a PseudoClass image. % % Parameters: % class: 0-PseudoClass or 1-Grayscale. % currentfile buffer readline pop token pop /class exch def pop class 0 gt { currentfile buffer readline pop token pop /depth exch def pop /grays columns 8 add depth sub depth mul 8 idiv string def columns rows depth [ columns 0 0 rows neg 0 rows ] { currentfile grays readhexstring pop } image } { % % Parameters: % colors: number of colors in the colormap. % colormap: red, green, blue color packets. % currentfile buffer readline pop token pop /colors exch def pop /colors colors 3 mul def /colormap colors string def currentfile colormap readhexstring pop pop systemdict /colorimage known { columns rows 8 [ columns 0 0 rows neg 0 rows ] { PseudoClassPacket } false 3 colorimage } { % % No colorimage operator; convert to grayscale. % columns rows 8 [ columns 0 0 rows neg 0 rows ] { GrayPseudoClassPacket } image } ifelse } ifelse } bind def /DisplayImage { % % Display a DirectClass or PseudoClass image. % % Parameters: % x & y translation. % x & y scale. % label pointsize. % image label. % image columns & rows. % class: 0-DirectClass or 1-PseudoClass. % compression: 0-none or 1-RunlengthEncoded. % hex color packets. % gsave /buffer 512 string def /byte 1 string def /color_packet 3 string def /pixels 768 string def currentfile buffer readline pop token pop /x exch def token pop /y exch def pop x y translate currentfile buffer readline pop token pop /x exch def token pop /y exch def pop currentfile buffer readline pop token pop /pointsize exch def pop x y scale currentfile buffer readline pop token pop /columns exch def token pop /rows exch def pop currentfile buffer readline pop token pop /class exch def pop currentfile buffer readline pop token pop /compression exch def pop class 0 gt { PseudoClassImage } { DirectClassImage } ifelse grestore } bind def %%EndProlog %%Page: 1 1 %%PageBoundingBox: 0 0 1366 500 userdict begin DisplayImage 0 0 1365.81 499.931 12 1366 500 0 0 DDD280E5DA88E5DA8ADACF7FDED384E4D98AE2D68AE6DA8EECE094ECE094E8DC91DDD187DACE84 E2D68CE8DC90E6DB8CE9DE8FEBE090DED381D6CC78DBD17CDDD27ED8CE7EDCD386E4DB8EE2D98C D9D083D7CE81D5CC7FD4CB7ED4CB7ED8CF82DED588DED588E3DA8FE6DD92EDE499EBE295E8DF91 F4EA9CF4EC9BF0E896E5DD8AE7DF8AEFE891EFE58EFCEF97FCEE96F5E790F4E68EF5E78FF1E38B F2E48CF5E78FF4E68EF8EA92F5E78FEDDE8BE8D88AEBDD8BF5E693F6E890F0E28AF3E58CEEE087 EDDF87F1E28CF2E38EFBED9AF0E490E2D682E8DD87E7D883E6D880E9DB83E7D87DF0E185F2E185 F3E384F2E283E5D679EFDF8BEDDE89E8DA81EBDD83F3E688F3E686EEE181F0E386E9DC80ECDE86 F1E28FEEDF8CEDDE8BE6D784EBDC89EDDE8BEDDE8DF0E191F4E496F6E698F3E395EDDD90ECDC8F F1E193F2E392F2E392F3E493F0E190E7D885ECDD89F0E18CECDD88EBDD85F4E68EF7E892F9EA97 F7E897F4E594F1E291EFE08FEFE08FEBDC8BF8E998F7E897F2E392F3E493F2E392F4E594F5E695 F5E695F6E796F5E695F6E796F7E897F2E392F0E190F0E190F2E392EFE08EEDDE8BF1E28DEEE089 F0E28AECDE85DFD178E7D981F1E28FE5D586DFCF81F7EA9CF5E597E7D685EAD987F1E08EEBDA87 EFDF8AF5E590EEDE88EEDE87F2E28BF3E38BF8E890EBDC86F5E491F8E795EDDC8AECDB8AF8E797 EBDA8AF1E092F4E395F1E092EDDC8FEDDB8FF5E496F0DF91F1E092FBEA9CF7E698EBDA8CE6D587 F0DF91FCEB9DF1E092F4E395F7E89CF4E99DEADE92F1E599F6EA9EF1E599F1E599F5E99DF6EA9E F2E69AF3E79BFBEFA4FEF2ACF9ECA7F5E9A1F0E499ECE092F1E697F5EA9AE6DB8DEFE399FDF0A9 F7EAA6F1E49EF3E799F0E498F3E79BF7EBA3FAEDA8FAEDA9F8ECA5F5E9A1F4E89BEBE191EFE491 FAEE9CF7EB99F3E697F8EB9CF9EC9EFAECA3FDEFA6F7E99FF0E396F3E697F8EB9CF6E999F8E6A5 FFF0B5FEEFAEF3E29AF0E092F2E38FF7E991FBED93F8EB8FEFE188F0E289F9EB93FAE99BFCEB9E F7E696F3E290F3E38EEFDF88F3E38CFDED98EDDD89EDDC8AECDB8AECE091F0E99BF3EDA3FAF3AC FEF6B5FBF3B5F6EDB2F5EDAFF7EFAFF2EBA4ECE69AF3EDA0F8ED9EF6E698F0E18FF1E28FF6E792 F3E891E7DB87F3E795F5E99CEDE499F2E8A1FBF2ABF9F1A9F3EDA4F6EFA7F7F0ACF3EBA8F3ECAA FBF4AFF5EEA7F1EB9FF2EC9DF6F2A0FCF69FF7E993F6E995FAEE9CFEF0A3FBEFA7F8ECA7FDF2B0 FCF3B2FEF5B4FCF4B3F6EFABF1E9B0F2E9BAFFF9C9F5EEBAE6DEA7F6EDB4FAF0B5FBF1B6FAF0B5 FAEFB6FEF3BBFCEFB8F9EFB1F4ECA8F2E9A6F7EEABFDF4B2FDF4B3F6EDACFCF2B2FCF2B3F6ECAE F5EBADF9F0ACF7F1A0F6EF9DF9F2A3FEF6ACFDF5AFFAF1AEF9F0AFFDF4B1FEF5AFFAF1AAFAF2A9 FCF4ABFBF3ABF6EEA6F9F1A9FEF7AFFFF9B1FEF7AFFCF4ACF6EEA6FDF7AFFBF3ABF4ECA5FEF6BC FFF4BDF9F1ACF6EF9FF9F39FFEF8AAFFF8B8F5EAB3FEF7C5F7ECB6D7CD8EEEE69EFAF5A4FBF6A4 FAF4A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDDD280E0D583DACF7FD5CA7ADACF7FE1D687E1D688E2D789E4D88CE7DB8FE6DA8ED7CB81 D8CC81E2D68BE3D78BDCD182DED384E6DB8CE1D684DAD07CDBD17CD5CB76CFC675D3CA7BD8CF81 DAD183D9D082D5CC7ED7CE80DBD284DAD183D9D082DED586E7DE91E9E095EAE196EBE297E4DB8E E0D789E9E091F0E897F0E896E7DF8DE6DE89EEE790F2E891F2E58DF7E991F4E68EF4E68DF1E38B EADC84ECDE85F2E48BEFE188EFE189F2E48BEBDC88E7D789EDDE8DEEDF8BEDDE87EFE189F2E48B EFE188F0E28AF3E48FEFE08BEFE08DEBDF8BE1D580E9DD87E8DA85E7D981E6D87FE0D176E6D77B E8D67BEBDB7CF2E283EFE084EBDB87F3E490EEE088EADC82EEE185F2E586F1E487F1E487EBDD84 EEE089F4E592F2E391EDDE8BEDDE8BF4E592F5E693F3E493EFDF90EADA8DEFDF91EFDF92EEDE91 EFDF92F2E294F1E291F1E291F4E594F5E695F1E28FF2E390F5E692F0E18CEDDE88F3E58EF6E891 F3E492F9EA99F9EA99F1E291EFE08FF4E594F3E493EEDF8EF1E291F2E392EFE08FF1E291EDDE8D F1E291F1E291F0E190F4E594F8E998F4E594F5E695F4E594F0E190EBDC8BEBDC8AF2E390F3E48F F0E28BF2E48CF0E28AE3D57DDCCE75E3D481F2E293F1E193E9D98CEAD98BE4D382EAD987EFDE8C EBDA88F2E28DF5E590F1E18BEFDF88EDDD86ECDC84F4E48CF1E18AEEDE87F3E28FF4E490F1E08F F2E190ECDB8AF1E090F4E394F5E495F5E495F3E292F0DF90F5E495EDDC8DEAD98AEBDA8BE9D889 EAD98AE8D788EAD98AF4E394F4E395F1E395F8ECA0F4E89CF4E89CEBDF93E5D98DEDE195F1E599 F2E69AEFE397F1E599F8ECA1F9EDA6F3E6A0F4E89FF6EA9EF2E898F5EA9BD9CE7FE3D88AF1E498 F3E79FF5E8A2FDF1A9F5EA9CF3E79BF4E89DF7ECA4F8ECA5F7EAA5F3E69FF4E8A0F6EB9DF2E798 F5EA98F9ED9BF9ED9BFCEFA0F6E99AEDDF94F7E9A0F7E9A0F3E59DF5E79BF8EB9CF8EC9CF5E998 FAE9A7FDEAACFAE9A5FBEAA2FDEE9FF7E894F5E78FF3E58CF4E68EF8EA91F5E78FEFE08BF6E596 F8E79AF4E393F2E28FF3E48DEFDF88F6E68EF7E791F0E08CFDEC9AF9E898F3E597F1EA9CF3ECA0 F7EFA9F9F0AEF6EDAFF6ECB0F9F0B2F8EFAEF2EAA3EFE79CEFE89AFBF0A1FFEFA1EEDF8EE5D784 F2E590F5E994E4D885F2E695F8ED9FF1E79FF0E6A0F1E7A2EDE59CF1EAA0FAF2AAF6EEA9EBE39E E8E09BF8F0ABF3ECA4F3EC9FF4EE9EF4EF9BF3EC98F9EB96FDF09DFBEF9FF8EA9FF8ECA3F9EDA7 F7ECA8F9F0AEFBF3B1FBF4AFFCF5B0F8F0B0F1E7AEFBF1B6F7EEB1F2E9A9FCF4B2FCF4B1FCF3AF F6ECABF3E9A9FAF0B2FCF2B4F4EBA9F2E9A5F4EBA7FBF2AEFEF5B1FAF1B0F7EEACFAF1AFFDF4B1 FDF3B4FAF1B2F9EFABF0E997F7F19EFAF3A2F9F0A7FBF3ACFEF6B2FAF1ADF8EFAAF3EAA5F1E9A1 F6EEA5FBF3ABFDF5ADFAF2AAF8F0A8F9F1A9FCF4ACF8F0A8F9F1A9F8F0A8FBF2AAF7EFA7F8F1AA FFF9BDFFF6BCFBF2ACF7F0A0FAF4A0FEF6A8FFF9B6FFF7C0FFF6C2FFF5BEFDF7B7FFF9B1F5F0A1 F7F3A5F8F3A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDBD07EDED381DFD484E2D787E1D686E1D687E9DE8FEADF90E0D489D8CC80D7CB7F DDD188DDD185E3D78BDED286D4C97AD9CE7FE8DD8DE6DB89E0D583DDD37FD6CC77D1C877D2C97A D3CA7BDAD182E1D889DCD384DAD182DBD283DFD687E2D98AE4DB8CECE394E6DD90E8DF94E8DF94 E3DA8DE4DB8DEDE495EDE594F0E896E9E18EE2DA85E6DF88EEE48BEDE187F3E58CF1E38AF2E48B F0E289EBDD84EBDD84EEE087EDDF86F0E289F2E48BEFE18CF3E494F9EA97F6E793F4E68EF3E58C F0E289F0E289F2E48CF3E48EEEDF8AEADB88EFE28EE6DA85EBDF89EADB86EEE088ECDE85E4D57A E6D67BE7D67AE7D778E9D97AEBDC80E5D581EEDF8DEEDF8AECDE85EEE087ECDF83F7E990F4E68D F2E48CF4E590F9EA98F7E897ECDD8AF2E390FAEB98F7E895F0E190ECDC8DE7D789EBDB8DEEDE91 F1E194F2E295F9E99CFAEB9AF7E897F6E796F6E796F6E794F1E28FF4E592F0E18CEADB86EFE18B F2E38DF7E895F9EA9AF7E897F2E392F4E594FAEB9AF6E796EADB8AF3E493F3E493EBDC8BF5E695 EFE08FEDDE8DEEDF8EF1E291F4E594F4E594F1E291F6E796F8E998F6E796F1E291EFE08FF2E390 F1E28FEFE08BEFE189EFE189EDDF87ECDD88F0E18FEFE091EBDB8DF0E093F3E294F2E190F3E290 EDDC8AE3D27FE6D681EDDD88EDDD88F0E089EEDE87F0E088FCEC94F2E28BEADA83EFDF88F3E38D EFDF8AECDB87F3E291F0DF8DF0DF8FF0DF8FEFDE8EEDDC8CECDB8BF5E494F2E191EDDC8DF2E191 F3E293EEDD8DE7D686E4D383EBDA8AEBDA8BE9DB8DF0E498F0E498F5E99DEDE195EADE92F1E599 F2E69AF0E498EADE92EADE92ECE095FFF4ACF7EBA2F8EBA0FAEFA0F1E696EADF8FDDD282F1E696 FAEFA0F2E69BF3E79FFDF1A7F9EDA0F6EA9EF6EA9EF8ECA3F7EAA4F4E7A1F2E69FFAEEA4FEF2A8 FAEFA1F4E998F5E997F0E492EADD8FF6E89CFCEEA3FDEFA6F7E9A0F9EBA2FDEFA5FDEFA2F9EC9D F7EA9BF9E9A3FFF1AFFFF0ABF7E79DF6E698F7E896F9EA95F5E691F9EA94FFF09DFDEE9BF3E491 F4E393F6E595F2E190F4E48EF7E68FF2E28BF1E188EEDE87EDDC86FBEA98F4E393F0E291F5ED9F F6EDA2F8F0A8FAF1AEF7EDAFF8EDB0FBF0B3F6ECA9F3EAA4F4ECA1EFE699EDE292FBEB9DF7E798 EDE18FF7EB97EFE391E5DA88F2E798F9ECA2F4EAA3F3E9A5F0E6A2E6DC94EEE59BF9F0A8F5EBA4 EDE49EF0E8A1FDF3ACF6EEA4F5EEA0F9F1A1F7F09DF4EC99F8EB99FCEF9FFCEFA1FAECA4FAEDA7 FBEFA9F7EDA8F9F0ABF7EFAAF5EEA7F7F0A9FDF5ACF6EBA0F8ECA1FDF1A5FFF6A8FFFCACFFF8A9 FFF9AAFBF3A7F5EDA4F8F0A9FBF2ADFBF2ADF7EEA9F6EDA8F9F0ABF8EFABF3EAA5FAF1AEF8EFAB FCF2AEFFF7B5FCF3B1F3EAA3FCF5A3FFF8A6FEF7A7FBF4A7FAF2A9FDF5ADFDF5ADF7EEA9F2EAA2 F4ECA1FAF2A7FFF7ACFEF6ADFEF6AEF8F0A8F3EBA3F6EEA6F5EDA5F6EEA6F3EBA3F4ECA4F4ECA4 F8F0A9FFF9BBFFF6B9FBF2ACF9F2A2FBF5A1FCF4A6FFF7B1FFF8BCF8EDB6F7EDB0FFF8B6F6EEA7 F2ECA2F6F2A9FAF6AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD9CE7CDED281E6DB89E9DE8DE1D686DBD080DFD485DED384DACF80DACE82 DDD185DCD084DBCF83DED286DBD181D9CE7FDDD282E3D888E2D787DBD07FDBD07ED8CC7BD5CC7A D6CE7CD3CB7AD8D07FE4DC8ADFD786D8D07FD3CB79DDD584EDE594EAE391E6DD8DDCD386E3DA8F E3DA8FDFD689E3DA8CEAE192EAE391EEE694EEE693E9E18CEBE48DF5EB92F1E58AF4E78AEFE286 F0E387F4E78AF0E387ECDF83EADD81EADD81F1E488F1E488EEDF88F6E795F6E794F5E792F7E991 EADC83E7D980ECDE85EDDF87EDDE89EFE08DEFDF8FF1E591E6DA85E3D781E3D47FEEE088EDDF87 E6D77CEADA7FEFDE82ECDC7DE7D778E8D87DE9D985EADB8AECDD8BF5E791F7E992EFE189F3E58E F2E48CF3E490F4E594F6E796F8E998F2E390F7E895FDEE9BF5E693EEDF8EEEDF8FEDDD8FEEDE90 F1E193F3E396F4E497F5E598F5E597F3E395F0E191F0E190F3E494EDDE8CF3E491F1E28DECDD88 EFE08BF4E590F9EA97EEDF8EE6D786EBDC8BF1E291F2E392F4E594F3E493FCED9CF3E493EBDC8B F9EA99F6E699EEDE91F0E093F7E799F6E698F1E193F3E395F5E597F6E698F5E597F3E395F2E393 F3E491F2E38FF2E38EEFDF8BEEE088ECDD88EDDE89F0E18EEBDB8CE4D487EEDE92ECDB8DEEDD8D F4E390F2E18FEEDD8AF1E18CEADA85EEDE88F4E48DF2E28BF2E28BFDED95F1E189EEDE86EFDF87 EDDD85E7D780E8D881F8E892F1E18CF0DF8DF2E18FF1E08DEDDC8AE6D583E9D886EEDD8BF0DF8D F0DF8DF3E290EEDD8BEFDE8CF4E391E6D583EBDB89F1E394EADE92E5D98DF3E79BF2E69AF0E498 F2E69AF1E599EEE296EBDF93EBDF93EDE195E8DC92E5D98CEEE394F7EC9DF3E898EEE391EEE390 F8ED9CFAEF9FF5EA9BF5E99CF7EC9FFAEF9FF7EC9FF7EB9FF8ECA2F5E9A1F3E79FF6EAA2F3E79D F2E69BF6EB9DFAEFA0F9EF9FF1E696ECE192F5E99CFAEEA4F9EDA5FBEFA7FCF0A6FAEEA4F6EB9D F3E999F3E999FBEEA5FBEDA5F6E8A0F7E99EF7EB9DEEE291F1E593F2E693F4E896F6EA99F5E999 F5E89AEBDC8BECDD8AE9DA85EEE089F0E28AEADC83E8DA81EDDF87ECDE87F4E592EEDF8EF3E595 F4EB9CF5E99FF8EDA6FAEEABFAECADF8EBACF9EDADF7E9A7F5E9A1F9EFA4F6EA9DE6DA8CF2E295 F6E99AF4E798F9ED9CF1E696EADF90EEE395ECE398EEE49EF5EAA6F3E9A5F5EBA0F7ECA0F9EFA6 F6EBA2F6EAA3FFF7AEFDF2A9F8EDA2F4EA9DF8ED9EFAF09EFAEF9EF8EA9EF6E89DF9EBA3F9EDA5 F3E6A1F0E4A0FBF1ABFAF1ABF9F1A8F9F2A6F9F1A5FBF09CEDDF84EADF82F0E488F5EA8DF9EE91 EDE488F3EB94F7F19DF9F2A2FFF8ACFFFCB1FFF9B0FAF2A9F5EDA5F7EFA7F9F1A8F7EFA7FAF1AB F7EFA7F8F0A8FDF5AFF8F0AAEDE59CF7F09FF3ED9AF5EE9EF7F0A3F5EDA2F2EAA0FAF2A8F6EEA5 F5EDA4F9F1A6FDF6AAFEF7ACFDF5ADFEF6AEF9F1A9F3EBA3F3EBA3F8F0A8FDF6AEF4ECA4F7EFA7 FCF4ACF7EFA7FEF5B4FDF3B4F9F0A8FAF3A3FBF5A2FAF3A3FDF6ADFCF2B2FCF3B5FCF2B4FAF1AE FFF8B0F5EEA8F9F4B0FDF8B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD9CE7ADFD581E2D785DED382DFD483ECE191E1D686D9CE7ED7CC7D DBD081DDD284DACE80D9CE80DED284DDD283DFD485E2D788E3D888E6DB8BE1D686E2D786E3D887 DAD17ED9D17DD2CA77D0C875DCD480DAD27ED8D07DD1C974DBD37FEAE290E2DA86DAD281E1D88B EDE499EDE499E8DF92EBE294ECE394F8F09FF3EB99F3EB98EEE691E8E18AEEE48BF3E78DF6E98D F1E488F2E589F4E78BF0E387EDE084EFE286EADD81EBDE82EEE185EFE18AF8E996F6E794F0E18B F4E68EEBDD84E9DB82F1E38AF1E38CF1E28EF8E997F8E899F7EA96EBDF8BE6DA84E6D782F5E78F F3E58CE8D97EEDDD82F5E488F1E182E9D97AEDDE82EFDF8DECDD8DECDD8CF7E895FDEE9AF7E892 ECDD8AEEDF8BF4E594F4E594F1E193F5E694F5E693F9EA97FBEC99F4E592F0E190F4E494F4E496 F1E193F3E396F6E699F6E699F5E597F5E597F5E597F3E395F2E394F6E796F0E18FF7E895F6E793 EDDE8AEFE08CF4E58FFCED9CF2E392ECDD8CF0E190F4E594F2E392F6E796F8E998F9EA99F3E493 F1E291F7E897F5E597F5E597F7E799F9E99BF7E799F5E597F5E597F5E597F4E496F2E294EFDF91 F1E192F2E393F3E491F6E793F0E18CEDDF89ECDD88E9DA85EEDF8DF7E798F3E396ECDC90EBDB8D EFDE8DF3E290F5E492F2E18EEDDD88F0E08BF1E18BF7E790F6E68FEEDE86EEDE86F0E186EDDE84 F0E187EDDE84E8D880EBDB83E7D77FE4D47DE8D882F0E08BF0E08CEFDF8BEFDF8BECDC88F3E38F F3E28EF0DF8BF8E894FBEB97F7E793F5E591E4D37FE2D27EF3E595EFE397E6DA8EF2E69AEDE195 EEE296EFE397EDE195EEE296F0E498F3E79BF6EA9EEFE395EEE393F6EB9BF9EE9EF3E896F2E795 F1E694F4E997F0E593F1E697F8ED9DF7EC9DF7EC9DF6EB9EF6EA9FF7EBA0F4E89FF1E59CF0E49B E6DA90E0D48AEDE196F8ECA1F9EEA0F7EC9CF7EB9FF5E99EF1E49CF7EAA4FCEFA8F7EBA3F2E69D F0E499F0E596EDE293F8EA9FF1E399EDDF94FAED9FFFF4A6F1E496E8DB8DEFE294F3E798F1E397 EDE094EEE193F0E18FEEDF8BECDD88F2E48BF3E58CECDE83E0D279E9DB83EBDD85EFE08DE9DB89 F3E496F5E99AF4E79DF6E8A2F8EAA6F6E8A5F5E6A5FAEBA9FAEBA8F5E7A1FCEFA3F8EA9EEFE394 F0E295F3E697F2E699F0E497F4E89BF1E69BEEE39AE6DC94E9DF9AF3EAA7F5EBA7F8ECA1F5E89B F6E99EF4E79CF2E49BF8EA9FF7EA9FF9ECA1F8EC9DF6E99AF8EC9DFDF0A2F6E9A0F9ECA3FCEEA8 FAEDA7EFE49FEDE29DFBF1AAF7EEA6FAF2A7FDF4A6F7F09FF3E78CE8D872EAD975ECDD78EDE07B F2E682ECE383F6ED92FAF39DF6EF9DF5EEA0F2ECA1FDF6ADF9F1A9F6EEA6FAF2AAFDF5ADFCF4AC F5EDA4F4ECA3F6EEA3FAF2A9F7EFA6F1E99EF5EE9DF4EE9DF7F0A0FCF5A5FCF5A7F9F2A5F9F1A4 F4EBA1F3EC9EF7EFA2F9F2A4FAF3A7FDF5ADFCF4ACFAF2AAF8F0A8F6EEA6FAF1A9FFFDB5FCF4AC FCF4ACFFF9B1FAF2AAFCF3AEF8EFABF6EEA5FAF3A4FDF6A5F7F09FFFFBB0FFF6B0FFF8B6FDF4B2 F4EBA6F8F1ACFBF4B2FCF6B8FEF8B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CE79E3DA84DFD482D9CE7CE9DE8CE7DC8CE6DB8BE8DD8D EBE091E9DE8FE4D98AE3D889E3D889E5DA8BE1D687E0D585DFD484DCD181E4D989E3D888E4D989 E4D989DCD381DCD47FD4CC77CCC46FD7CF7AD5CD78D8D07BD3CB76DCD47FE1D984D5CD78D5CD79 DED588EDE499F0E79CECE396F0E799F0E798E6DE8DE3DB89EDE593F2EA95F1EA93F8EE95F0E58A F7EA8EF5E88CF5E88CF3E68AECDF83F1E488FCEF93EFE286E5D87CEFE287F4E58EF4E591F4E58F E6D880EADC84EFE188E6D87FEADC83EDDE8AECDD8CF3E493F0DF92F1E493E8DC88E5D983E6D883 F5E78FEDDF86EFE085F1E186F7E68AF0E081E8D878EDDE82EEDD8CEFE08FEADB8AEDDE8DF6E797 F9EA97EDDE8EF0E190FBEC9BF8E998F3E493F5E695F1E28FF3E491F4E592EEDF8CEFE08FF6E697 F5E597F1E193F4E497F8E89BF8E89BF5E598F7E799F6E698F0E092ECDC8EEDDE8DEFE08FF8E998 F5E693EADB88EADB87EEDF8BF5E695F5E695F4E594F2E392F1E291F0E190FCED9CF7E897EFE08F F2E392F7E897F3E493EEDD90FBEB9DFDED9FF6E698F7E799FBEB9DF1E193F6E698F9E99BF8E89A F5E597F2E294EEDF8FF1E290F5E693EDDE89E8D984EBDC87EFE08DF5E696F2E295E9D98CEEDE92 E8D789E9D888EFDE8CF6E593F6E592EDDD88F0E08BF0E08AF7E790F7E790ECDC85E6D77CF1E286 EBDC80F0E186F3E489F0E087EEDE86E4D47CE3D37CE9D982F2E28BF2E28DEFDF8AF0E08BF0E08B F5E590F2E28DF0E08BF3E38EEEDE89E8D883E4D47FEDDD88EADA85F0E292F2E69AEEE296F3E79B E7DB8FECE094F4E89CF2E69AF0E498F3E79BF5E99DF6EB9DF1E696F2E797F8ED9EF7EC9AF1E694 F4E997F4E997F5EA98ECE18FEDE292F8ED9DFAEF9FF5EA9BF5E99DF6EA9EF7EB9FF3E79DF1E59B F7EBA1F8ECA2F7EBA1FDF1A6F8ECA4F4E89DEDE195E6DA8EF7EBA2FFF8B0FFF4AEFBEEA8F4E7A1 F1E49EF4E89FF5E99DEEE395E9DB90F8EA9FFCEEA3F1E496F4E799FEF0A5EDDF94F3E59DFBEDA4 FCEEA5F5E79FECDE94F0E18FEDDE8AEBDC87F2E48BF2E48BEADC83F0E289F1E38BF3E48FF6E795 ECDC8EF3E497FBEEA2F8EAA1F8EAA4F8E9A4F6E7A4F3E4A1FCEDAAFDEEA9F5E6A0FBEDA4F7E99D F5E89AF1E496F8E99FF8ECA0E8DC92EADE95F9EFA8F4EAA4EBE19CEDE4A1F6EDABF6EDA9F3E79D F4E79AFDEFA4FFF2A7F9EBA0F5E79CF3E59AFDF0A3FFF3A5FAED9FFBEEA0FEF1A6F0E49BFEF3AC FFF8B2FFF4B0FAF0ABFAF0ABF9EFA8F2E8A0F5EC9EF5ED9DE9E18DE5D77AE4D16BEBD973EADA73 E8DB75F0E381F0E686F8EF95FBF3A0F5EE9FF3EDA3F3ECA5FEF6AEFCF4ACFBF3ABFFF7AFFDF5AD F7EFA6F1E9A0F1E99FF4ECA1F8F0A5FAF2A7F9F2A4F9F2A2FEF7A7FFF8A8FAF3A3FBF4A5FEF7A9 FEF9ABF5EEA0F1EA9CF4ED9FF7F0A0F9F1A5FCF4ACF9F1A9FBF3ABFCF4ACF8F0A8F5ECA4FEFAB2 FEF8B0FBF3ABFCF4ACFAF2AAF9F1A9F5EDA5F4ECA2FAF3A5FDF6A8F8F1A3F6EFA1FAF1A7FBF3AB FFF7B2FFFCB7FFF7B6FFF8B9FEF8BBFBF5B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEC46ED8CE79DED47FDACF7CE9DE8CDFD482DDD281 DDD282E2D787E3D888DFD484E1D686DCD181D8CD7DD9CE7EE1D686E5DA8ADED383D9CE7FDCD182 DFD485DACF80DBD280D7CF7AD5CD78D8D07BD5CD78E2DA85DED681DFD782DDD580D6CE7ADAD27D E6DE8BE1D88BEAE197EDE499E7DE91E6DD8FEDE495F0E897FBF3A1F2EA98EEE691F5EE97F7ED94 EFE388EFE287ECDF83EBDE82F0E287F3E68AEFE286F4E78CF1E488F2E589F4E68BF1E38AF0E28B F0E28BEDDF86E9DB83EDDF86E4D67DEBDD84ECDD89ECDD8BFCEC9EF4E396E6D988F4E894EFE38D F0E18CEBDD85EEE088E6D77CE1D276EAD97DF3E384F1E182F1E286EBDC87F0E18FEDDE8DF2E392 FAEB9BF8E899F4E496F0E190F2E392F7E896F3E492EDDE8BF5E693F2E390F9EA97ECDD8AE3D483 F9E99AFAEA9CFFF0A2F8E89BF5E598F6E699ECDC8FF3E396F6E699F0E093EFDF91EADA8DEDDE8D F2E391F4E594F1E28FEDDE8BEEDF8CECDD8CF7E897F4E594F1E291F6E796F2E392EFE08FF6E796 FDEE9DF3E493F9EA99F6E796F6E698F9E99CF8E89BF4E497F2E295F4E497F5E598FAEA9DF9E99C F5E598F6E699FBEB9DFCEC9CEEDF8FF4E592F4E592F1E28CF7E895F4E592F0E091EEDE91F0E096 F5E49BE6D587E8D787EFDE8BF3E290F5E491F5E58FF2E28DF2E28CEFDF88F2E28BF2E28AE7D87E E9DA7FEDDE82EEDF84ECDD82EFDF87F4E48CF3E38BF1E18AF4E48DF2E28BEADA85E6D682EFDE8D EEDC8BEAD987F2E18FF2E18FEAD987EAD987ECDB89F1E08EF0DF8DEBDB89EFE192EEE296ECE094 F0E498F4E89CF0E498F3E79BF6EA9EF3E79BF1E599F5E99DF3E799F7EC9CF6EB99F4E997F2E797 F1E696F0E596F1E696EEE393F6EB9BF3E896EDE28FF2E796F5EA9BF6EB9CFAEF9FF6EB9CF2E799 F3E79BEEE297FBEFA6FAEEA6FCF0A9FCEFA9FBF0A7F7EFA2F0E79DF2E8A1F8EEA7F8EEAAF3E9A4 F9EFA9F8EEA7F3E9A2F6EDA3ECE497F8ED9FF8EE9EF8EE9FF3E79BEFE498FCF0A6F5EAA0F5E9A2 F5E8A1F8ECA4FBEEA8F8EDA3F3E696F6EA95EFE48DE6DB82E9DE85F2E78FEFE48CF2E690F1E693 F0E494F5E89AF9EBA1EEE098FEF0A8F8E9A3FCEDA8F1E29FF4E5A3FBECA9FBEEA9F9ECA6EEE098 FAECA3F4E79CF7EB9FF3EBA2F3E9A0F3E7A0F5EBA5F3E8A5F7EDAAF4EBA9EAE19F8C8442B9B16E FEF2A8F2E499FDF4A9FAEBA0F8EC9FF6E99BF4E69BF4E69BF4E69CFAEEA4F1E39AFBEEA5F3E9A2 F6ECA7FBF1ADF5EAA8F2E8A3F9EFAAF8EEA6FEF3ABFCF2A5F3E898EFE491E8DA80F3DF81F8E488 EFDE81EBDB7FF6E88DFAEF97FBF09EF7EFA3F1E8A2F0E9A6F8F0B1F8EFACFAF1ACF7EDA9F7EFA8 FDF5ADF5EDA4F2EAA1F0E89EF6EEA3F9F3A4F9F2A3FEF7A9FDF7ABFAF2A6F9F2A5FCF4A7F9F2A4 F5EEA0F3EC9BF2EB9DEEE799F4ED9EFBF5A6FCF4AAFEF6AEFEF6AEF7EFA7F1E9A1F2EAA2F5EDA5 F2EAA2F1E9A1F5EDA5F7EFA7F2EAA2F6EEA4F5EDA3F7EFA6FBF3AAF8F0A6F7EFA4F8F1A3F3EC9D F3EBA0FAF2AAFFF8B6FFF8BAFDF4B6FEF5B7FFF8B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD57FDFD57EE5DB84E6DC87E0D581DBD07E D7CC7AD8CD7BDDD282DDD282DCD181E2D786E2D785E1D685E1D686E6DB8BE6DB8BDFD485E0D586 E0D587DDD184D6CA7DD5CC7BDCD480D6CE7CD1C977E0D885E2DA88D6CE7DD4CC79D9D17EE5DD8C ECE490E8E08FE8DF92EBE297EBE297E9E093EAE193EDE495F5ED9CF4EC9AF4EC9AF2EA94EEE790 F0E68FF0E48AF2E48BF0E289F0E289F3E58DF6E88EF3E58CF0E38AF2E48AFAEC93FAEC94F3E58D F4E68EF7E991F5E78EF0E388EFE186F6E88FEDDF87E2D27EE6D785EDDD8FF3E396FAED9CF1E590 EADE88F4E691E7D980ECDE85DECF74DBCB70E4D377ECDC7DEDDD7EEFE083F4E48DF8E995F4E592 F1E291F4E594F5E595FCED9CF4E594F3E493F7E894F7E894F5E692F6E794EFE08DFBEC99F6E793 E8D988F3E394F1E193F9E99BF7E79AF8E89BF5E598F0E094F6E69BF6E698F4E497F5E598EDDD8F EFDF90EDDE8FEADB8AEBDC8BF4E594FFF1A0EDDE8DF1E291F6E796F6E796F5E695F8E998F7E897 F6E796FFF09FFBEC9BFCED9CF3E493FCEC9FF8E89BF8E89BF7E79AF6E699F5E598FBEB9EFEEEA1 FBEB9EF4E497F3E396F4E497F9E99CF5E597F1E28FE9DA87F0E18DFCED9AFAEB97F6E699F4E498 F3E398F3E29AF1E093F1E090F2E18FF2E18FF1E18EEFE08AF7E792F5E58FF1E18AF6E68FF5E58E E8D880EFDF87F2E28AF6E68EF6E68EF1E18AEDDD85E5D57EFAEA94F9EA94F2E28EF2E18FEEDD8B E8D787E9D888E7D685EDDC8CF4E392F0DF8FF2E191FBEA9AF8E797EFDE8EE9D888F2E596F4E89C EFE397EADE92EFE397FDF1A5F7EB9FFAEEA2F8ECA0F6EA9EF8ECA0F4E99BF3E898F3E896F2E797 F2E798F0E596EFE494F8EC9FEEE393F3E898F9EE9EF6EB9AF5EA97FAEFA0F0E596F4E99AF4E999 EBE091E8DD8FF0E498F7EBA3F6EAA2F9ECA7FAEDA8F8ECA6FAF2A8FBF2AAF5ECA5F0E7A1F3EAA7 F7EEABF7EEA9F7EEA8F3EBA3EFE69EF2EA9FF6EA9EF3E89BF6EA9EF6EAA0F4E8A0FBEEA7F4E7A1 F5E8A4F7EAA5F7EAA4F7EBA4FAEEA4F4E797F5E995F1E590E9DD88EADE89F0E48FF8EC98F4E797 EFE294EDDF94F1E39BF3E59EF0E29CF9EBA5FCEFABFCEEAAFFF4B0F7E9A6EDDF9BF6E9A5F4E7A3 F9EBA5FFF3ACF1E59CB9AD62BAAD65E8DD95FFF8B3F2E7A6F4EAABFAF2B4F6F0B25B5215352C00 DFDA98F6EBA3F9ECA2F1E59BF3E79BF2E599F3E79AF4E79BFCF0A5FAEEA6F3E7A0EFE19CFEF1AC F7EEA6F6EEA7FCF3ACF8EFABF5EBA6F7EDA8FAEFA7F9EDA5F6EA9DEADD8EF2E694FEF3A0FFF3A1 FFF2A2FEEF9FFEEF9FFFF2A2FCF0A3FFF3A9FEF5B0F9F0B0F7EDB2F8F0B5F5ECADFAF2AEFAF1AE F7EEABFAF2ACF8F0A8FAF2AAF4ECA2F8F0A5FCF4A8F8F1A4F8F0A4F8EFA8F9F1A9FCF4ABFBF3A9 F4ED9FEDE698F1EA9CF7F0A2F6EFA1F8F0A5F7EFA3F2EAA1F8F0A8FDF5ADF9F1A9F4ECA4F9F1A9 FCF4ACF6EEA6EFE79FEDE59DEFE79FF0E8A0F4ECA1F7EFA4FEF6AFFFF8B4F8F0A9F5EDA5F5EEA1 EFE898EFE79BFBF3ABFFFABAFFF9BEFAF0B2FBF2B1FDF4B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFBECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7EBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBF1F1F1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED47DE2D881E7DD86E7DD87E1D782 D8CD7BD2C775D7CC7ADDD282DFD484DFD482DDD280E1D683E2D785E1D686E3D888E3D888E4D98A E9DE90E9DD90E3D78BDDD185D7CD7FDCD483E3DB8AE8E08FEBE392E1D888DFD786DAD281D8D07F E2DA89ECE493EDE494EFE699EDE49AECE398ECE396EEE597EFE697F8F09FEDE593F3EB98F3EB96 EEE78FF7ED96EFE38CF3E48FF2E48CF1E28CF3E48FF5E68FF4E58FF2E38FEFE18AF6E790F7E893 F3E58DF5E78FF5E78EF2E58AEEE185EBDE82EEE187F1E38AEEDF8DEFDF90F6E699FBEBA0EDE190 EDE18DE9DE87F2E38FEDDF87EFE188F1E287EFDF84EEDD81EEDE7FEEDE7FEDDE81F4E48CF1E38A E8D984E4D583EDDE8DF8E998F9EA99F5E695F5E693F8E993F9EB92F6E890F7E894FCED9AF9EA97 E8D986E8D988FAEB9BF4E496FBEB9DF3E396F1E194F4E496EDDD91F3E398F4E497F0E093F1E194 EEDE90F1E193F3E395F4E594F4E594F2E392F0E190F1E291ECDD8CF5E695F8E998F1E291F7E897 F3E493F2E392FEEF9EF8E998F7E897F0E092F5E598F4E497F8E89BFDEDA0FAEA9DF5E598F6E699 FBEB9EF8E89CF2E296F3E396F4E497FBEB9EF8E89AF0E091EBDC89F1E28FFAEB98F9EA99F7E79A F5E69AF4E39BF3E29CEFDE91F0DF8FF4E391F6E593F6E593F5E590EFDF8AECDC86E9D982F2E28B F4E48CE5D57DFCEC94F8E890F8E890F7E78FEEDE88E4D47DD8C873F2E28DEDDC8BEAD987F1E08E EDDC8CE5D484F1E092F5E494F1E091EEDD8FF3E293FAE99AF4E395EEDD8EEFDE8EF6E598F4E698 F2E69AF3E79BEEE296EEE296F4E89CF6EA9EFAEEA2F6EA9EF5E99DF9EDA1F9EEA0F0E595F1E695 F3E899F3E89AF2E69AF1E59BF6EAA0F0E398EFE495F3E899F4E999F2E798FDF2A3F4E99AF8ED9C F7EC9CF1E696EFE494F2E799F8ECA2FCEFAAFCEEADF9EBABF3E8A4F5ECA4FCF4ACF7EFA9F1E8A4 F4EBA8F8EFACF5ECA9F8EFABF4EBA7E8E097EEE69DF8F0A5F4E89EF6EAA1FBEFA7F8EBA6F8EBA7 F4E6A5F4E8A3F8EBA7F6EAA3F4E8A0FAEEA2F7EA9BF6EA99F3E793EFE491EEE290EFE392FAEE9D F3E698EEE096EFE19BF5E6A3F7EAA7F6EAA9EDDF9EF9F1AEF2E9A4FEF8B7FEF9B6F6EDA9FEF4B3 F8ECA9F6EBA9EFE1A0A69A5385792FA69A538F85408F8443BCB074D8CE91D3C98C473F107F773A BFB778A69E5EFFFCB7F6EBA3ECE398FFF5ABF3E89CFEF9ACFCF4A8F7ECA3FEFBB4EDDF9DFBF5B6 F6EBA9FDF5ACF9F2A9FCF4ACFDF4AFF9EFAAF6ECA7FFF6B1FBEFA7F1E49AF6E99BFDF0A2FFF5AA FFF1ABFEF0AAFAECA6F6E8A0F7EAA2FBEEA8FDF3AFFFF7B8FFF5B8FAF0B5F7EEB5F8EEB2FDF3B6 FDF4B4F8EFAEF7EEABF8EFABFAF1ACF4ECA3F8F0A5FCF4A9F8F0A5F5EDA3FEF5B3FFF6B5FFF8B3 FEF7AFF9F1A7F5EEA1F9F2A4FFF8AAFFF7ACFFF7ADFAF2A9F3EBA3F5EDA5FEF6AEFBF3ABF6EEA6 FCF4ACFEF8B0FBF3ABF6EEA6F4ECA4F6EEA6F8F0A8FBF3A9F4ECA2F2EAA4F8EFAEF8EFAFFBF2AD F9F2A4F0E998EDE697F8F0A8FEF4B7FAEFB8F7ECABF9EBA4F8EBA3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2C6C6C6D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D0D0D0CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7C7C7C7D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3CCCCCC D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3C971DFD57EE4DA83DFD57F E8DE89DBD17BD4C976DACF7DDBD07ED8CD7BD9CE7CD8CE79DCD27DDED37FDCD17FDCD181DCD182 DED384E3D78BE4D88CE2D68ADFD389DCD285D5CC7DDCD384E5DC8DDBD283DED586DAD182DCD384 E1D889E4DB8CE6DD8EE9E091EAE195EAE196EAE196E9E093EBE294EDE495FCF4A3F0E896EFE794 EEE590EBE48DF5EB94EFE28DF4E491F4E591F1E28FF0E18EF0E18DF1E28FF6E794EFE08CECDD89 EDDE8BEFE08AEFE188EDDF86EEE086F1E488F4E78BF2E48AF6E891F2E391F5E596EFDE92A9994F C3B665E8DC88E7DB85E9DA85F3E58DEFE188ECDD82EDDE82EBD97EE9D97AEFDF80F1E183ECDD82 ECDE84EEE087F0E18BF3E491FAEB9AF4E594F4E591F3E48EF0E288EBDD83E8DA82F0E08DEBDC89 EBDC89EBDC89ECDD8CFAEB9BF8E89AFEEEA0EDDD90E8D88BF5E598EEDE92F4E499F7E79DF0E094 F0E093F3E396F1E193F1E193F2E294F4E594F3E493EFE08FF8E998F3E493F9EA99FBEC9BF4E594 F7E897EFE08FF3E493FFF09FF2E392F3E492F7E799EDDD91F1E196F5E59BF8E89DF1E196EDDD92 FAEA9FFDEDA2FAEA9FF3E398F1E197F6E69AFEEFA2F8E89AF5E596F6E797F4E591F6E795F4E594 F4E396F3E399F3E29BF4E39DEEDD8FF1E090F7E694FBEA98F8E795F4E48FF9E994F5E590EFDF88 F1E18AF1E18AE6D67EF3E38CEDDD86ECDC86EEDE88ECDC88EAD986EEDD8BF5E493EEDD8DEBDA8A F1E08FEFDE8FE4D385EDDB90F3E195F0DE92F0DE93F4E296EFDE91E6D489E7D68AF1E093F6E59A FBECA1F9EDA1F4E89CF3E79BF5E99DF6EA9EF1E599F2E69AECE094ECE094F5E99DF8EC9FF0E595 F3E898F7EB9DF8ECA1F7EBA3F6E9A2F3E7A0F6EAA1F2E69BEFE495F1E697F3E898F2E798F1E696 F4E999F0E594F1E694F6EB9AF0E598F6EAA0FEF1ACFCEEADF5E7A9F2E8A4F4ECA4F6EDA7F7EEAB F6EDAAF0E7A6EFE6A5F1E8A6FAF1AEFBF2ADF1E8A1F4ECA3FDF3AAF6ECA3F5EBA5F9EFABF6EBAA F4E9A8F5EAAAF0E5A3F5EBA5F5EBA4F1E89DF6EDA0F3E898F0E596F1E695F1E696EEE393EADF8F EDE195ECE097EDE09AF0E3A1F1E3A3EDE1A2EFE6A6F5EBACDFD594B7AD6CD5CA8AE4DA99D5CC8A D7CD8DDDD392E6DD9DE8DE9E8E843FBAB067FFF5AED5CA88ACA162A3995E978C50241A005A511C F9F1B4DEDB9D756E2FA59C57D9D08AE7DF97F1E8A0F1E99FF5ECA1F4EBA1F4EBA4F3EAA6ECE2A4 F2E7ABFAF4B4F3ECA2F4EEA3F5EFA6FAF2AAF9EFA9F3E8A3FDF4AFF7E8A2E8DA91FEF2A5FCEBA0 F6E9A4FCF0B3FEF3B4F7EBACF0E5A3F6EBA8F8EFABFAF1AEFDF3B4FDF2B5FAF0B5F8EDB4F3E9AE F5EBAFF9EFB2F7EDB0F4EBABF9F0AEF4EBA6F2E9A2F7EFA7FAF2A9F7EFA4F6EEA5FFF6B8FEF4B7 FAF1B1F8EFAAF9F1A9FCF4AAFBF3A8FCF4AAF8F0A7F8F0A8F8F0A9F4ECA5F9F1A9FFF7AFFDF5AD F8F0A8FAF2AAFBF3ABFAF2AAFDF5ADFDF5ADFCF4ACFCF4ACFDF5ABF2EAA0F1E8A6FCF4B7FFF7BB FBF1B0FAF2A8F4ED9DF2EB9BFAF1ACFFF5BBFDF1BCFFF4AEFCEEA1F5E798FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CFCFCFFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDF2F2F2CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D6D6D6FFFFFF FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFFFFFF E7E7E7D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CE75DBD178E0D67F DFD57EE0D67FDCD37ED5CA78DFD482DED381D6CB79DACF7CDCD27DDFD580DFD581DCD17FDCD181 DFD485E1D687DFD387E2D68BE6DA90E6DA90D7CD81D7CE81E8DF92EBE295DDD487DAD183D4CB7E DBD285E5DC8FE7DE90E3DA8DE0D78AE7DE93EDE499F0E79CEDE497EEE597F4EA9BEFE796F1E997 EAE28FE3DB86E3DC85E6DC85F4E794F7E897F7E897F3E492EFE08FEEDF8EF2E392F6E796F2E392 F0E190EDDE8DEADB86E7D980E7DA7EECDF83F2E589F3E68AEDE086EDDE89F0E18EFDF2A4FDF4A7 CBB971D6CA79F3E792EEE28CF1E28DF6E88FF1E38AE9DA7FEEDE83EBD97EEADB7BF6E587FAEB8C EEDF80E7DA7DEEE087F4E68EF2E390F4E592F6E794F4E591F0E38AEBDE83E7DA7CE8DA80F0E18D E4D581ECDD8AF9EA97F2E392F5E696F4E496F7E799EFDF92F3E396FDEDA0F6E69BF7E79CF5E59A F5E59AFBEBA0F8E89BF0E093EBDB8EEADA8CF0E190F6E796F9EA99F6E796F7E897F8E997FBEC9B FCED9CF6E796F3E493F0E190FDEE9EF4E594F6E796FDED9FF9E99CFBEBA0FBEA9FF7E79CF3E398 F4E499FDEDA2FFEFA4FBEBA0F4E499F2E297F4E498FEF0A3FCEB9DF9EA9AFBEC9BF4E594F8E997 F8E998F5E598F4E39AF4E39BF6E59FF4E396F4E393F6E592F6E593F6E593F6E691EFDF8AF2E28C EFDF88F0DF89F4E48CF1E189FAEA93F7E791F2E18EECDB89EBDA89ECDB8BF5E493F1E091F1E092 E8D789EADA8BF5E398E7D58BE7D58DEEDC93F1DE95F3E198F5E39AF1DF95F1DF97F4E299F6E49A F6E49CF0E297F0E498F0E498EDE195EDE195F1E599F5E99DF8ECA0F5E99DF3E79BF8ECA0F7EB9F EFE495F3E799F8ECA0FAEEA6F9ECA6F8EBA7F1E49FF6E9A2F3E79FF5E99CF9EE9FF4E99AF2E798 EEE393EFE494EDE290ECE18FF2E796F8EC9FF7EBA1FEF1ACFCEFAFF8EAADF5EBA9F3EBA3F3E9A5 F5ECA8F3EAA9EDE3A5EFE5A7F6EDACFAF1B0FAF1ADFDF4AFFBF3AAFBF1AAF4EAA3F3EAA4F5EAA8 F3E8A9F6EBADFAEFAFECE1A0F2E8A2F8EFA6F1E89CF2E99BF0E498EDE195F1E697F5EA9BF1E697 EADE91EEE296F2E59EF8EBA7F6E8AAECDDA2E1D69AE6DEA0C4BC7E51490A655D1DC4BC7DF4ECAD F8F0B1DFD798EAE2A3EEE6A8FAF3B6857B36CEC37BF0E7A0EDE1A0FDF7BAECE1A63D34125B521F C0B77FDDD79BBEB87AD9D495706827A29B56CAC37BD8D189F1EBA1FAF4A9F6EFA7FEF7B1ECE4A2 7A7134D1C78EFFFBBCF5EFA2FAF4A8F7F1A5F7EFA6F6ECA7F2E7A3FEF4B1F5E6A1F3E69EFDF0A5 F1E196F9EDACFAF1B9FDF4BAFBF3B6FAF2B3FDF4B3FBF2AFF8EFACF7EEACF8EFAFFAF0B3FBEFB4 FEF3B8F9EEB6FCF2B8FFF5B8FAF0B2FDF4B4F1E8A5F5ECA7FCF4ACF9F1A8F4ECA3F9F0ABFFF6BB FFF5BCFBF1B4F9F0AEFEF5AEFFFAB1FEF6ACFDF5ADF7EFA7F9F0ABFCF3AFFAF1ADFCF3ACFDF5AD FEF6AEFCF4ACFAF2AAF7EFA7F8F0A8FDF5ADFCF4ACF9F1A9F8F0A7FAF2A7F7EFA6FAF1B1FFF6BD FCF2BAF9F0B2FAF2A9F9F2A1F8F1A1F9F1ADFDF2BBFFF4C1FFF3AAFFF19DFBEB96FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5DA85DAD07A E1D780E4DA83D5CB74DAD079D7CD78E5DA88E6DB89E1D684E5DA88E3D786E4D786E2D685DFD484 DED383E4D88AE2D788DCD084DED287E3D88EE3D78DD3C97DDCD386DAD184C8BF73D1C87BD8D083 DED688E2D98CDBD486DED688DCD587DFD689DED587E7DE93EEE59AE8E196E5DD93F0EA9DEAE396 F6EEA0F1E999ECE391EEE390E9DE8AF6EA9AF8EC9DF7EA9CF2E596EDE192EDE18FF1E593F1E694 F2E694F7EB99F0E592E9DE88EEE389F1E38AF3E78EF5EA90F2E58CF0E38AEFE38DF1E393EEDF92 EBDD92F3E49BF7E797F5E894F0E18CF3E48EEDDF87E8D981F2E387F4E588EEDE7FEADA7BF2E282 F2E283FDF195ECDE82E4D67DEEDF88F3E48FFBEC99F7E895F5E692F4E68EF1E48BF3E68BF4E991 F5E897F9EA9AF7EA98F6EA96F2E490EFE290DFD381E2D482E8DB8AF5E999FAEA9CF8E89AF5E597 EEDE90F7E699FEF0A2F6E697EFDF91EEDE90EEDE8EF1E291F3E493F0E18FEDDD90F2E597F0E395 F6E699FBED9FF0E493F5E795E9DC8AF5EA95F6E894F8EA96F9ED9BF8E99DF9E99FF4E69BF2E499 F7E79DFAECA1F4E69BF9E99EF6E89DF2E499F3E399F3E398FCEEA1FEEFA2FAEB9BF9EA99F3E493 FAEC9BFDEE9DFAEB9DF7E79BF6E59DF9E8A1F5E598F2E492EFE190F3E494F5E695F9EA98F7E996 FAEC97F6E891F0E38BF0E38AF1E38BECDC89F0DF8EF1E08FEEDE8BEFDF8DF4E390EADA89EBDA89 F4E395E9D88AEEDC90FBEC9FEADA8CEBDC90F5E599F6E79BEFE094EFE094F5E59CF4E49CEEDD95 ECDB93F2E29AE4D58BE7DB8FF5E99DF4E89BEBE191EBE092F4E89CF9EDA0F9EDA1F8ECA0F6EAA0 EFE398EEE394F1E696F7EB9EFAEEA4F9EEA5F7EAA3ECDF99EFE29CF0E49CFAEEA4FDF0A6F2E69B FDF3A8F0E598F1E698F4E998EEE491EEE490F5EB99EFE396F4E89EF3E7A1F4E7A7F2E8A4EFE79D F2EAA1F2E9A2F2E9A5F2E9A5F6EDABFDF4B0F8EFAAF4EBA5FBF3ABF5EDA4F4EAA1F1E69EF2E6A1 F3E5A4F2E7A6F9EEABFCF3ACEBE298F1E89CF8EFA1F2EA9BF1E99AF5EA9AEEE494F4EA9AFBF0A0 F7ED9DECE195ECE197F2E79EF6E9A2F1E5A0DCCF8ED6CC8DF8EFB3EBE1A55950127D7536766C2E 7A7132B8B071BAB16FDCD391C2BA79A89E5E887E3CEBE19EE2D796F7EDAEEADFA04F4516756B2D E6DD9DE9E09DBAB26EEBE59DFAF4ABC2BB73817B349D9750B3AD67C3BC78E0D997F7F3B4C9C386 7C733A3C3300817744E4DB9FE1DC8DEEE795F0E89AF8F0A2FDF4A7FEF2A8FDEFA5F2E499F9ED9F F4E597E6D687FCF1ACF3EAB0F3EAADF8EFB0FEF5B4FDF3AFFAF1ACF7EEA9F5EBA6F7ECA8FBF0AC FFF3B1FFFCBCFEF3B5FBF1B3FEF4B5F6EDAEF1E8A7F3EAA7FAF1ADFEF6AFF7EFA7F3EBA2FAF2A9 FBF1B2FCF2B3F9F0AEF8EFACFCF3AEFFFAB2FCF4ACFCF3AEF6EDA9F8EFADFBF2B2FAF1AFFCF4AD FCF4ACFDF5ADFEF6AEFBF3ABF8F0A8FCF4ACFDF5ADFAF2AAF7EFA7F7EFA7FCF5AAFCF4ABFAF1AE F5EBAEF1E7AAFCF3B1FCF4ADFCF4AAF9F0A8F4EBABF4E9B4FAEEBBF7EAA2FBED9CFDEF9EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D587 DACF7EEBE18CE0D67FE2D87EDDD37AE2D880E3D983DDD280DFD483E9DD8EE6D789DCCB7EDCCE80 DDD082DACC80E5D88DDED286D7CF84D9D085DCD489D8CF84C7BC72DED188D7CF84C8BF75D2C97E CDC778D3CC7EE5DF90D6D180E2DC8CD7D381DFD988DBD283E6DD8FEAE397EBE59BD6D189D3D088 F0EDA5EBE59CF0E89CF2E698EDDD90EBDC8EF5EA9EF4EA9FF0E69BECE395EFE697F3E99AF0E696 EFE693EDE492F4EB99F0E892EBE28CF5EB93F4EA92EDE28BF1E78FF5EB93F0E690F5EA97F6EB9A F1E596F0E499EEE195F2E392F1E08EF2E28DE8D882EDDD86E6D67EE8D97EE6D77AEDDF7EE8DA79 F1E380EEDF80F1E288F3E28BDDCD76EFDF8AF2E38EF7E893F0E18EEFE38FF9EE99F5E994F2E693 FAEF9EF4E89BF6EB9CEDE292EFE591F3E893EBE18BE8DE87E6DB85EDE28DFBF19DFCF19FF8EA97 F8E796F2E08FEFDE8DF7E594F3E291EFDE8DF5E492F3E290F1E08EF7E694F4E492ECDF94F1E59D F8ECA2F9ECA1F4E99BF0E596F0E493F0E592F0E68FF3E891F5EB91F7ED97F5E99CF4E89EF0E49A F3E69DF1E49AFAEFA5FCF0A6F6E9A0F6EAA0F8ECA2F0E39AEFE196F8E89CFBEB9EF9E99BF5E695 F5E693F5E693F9EA98FDEE9FF6E79BF3E29AFDEEA8F9EC9EF3E895EDE292FDF1A2F2E697F0E596 F7EB9BF2E796F2E893F3E890F0E68CF1E78EEEDF8FEEDE91F0E191F3E491F3E491F1E28DF1E28E EBDC88F0E18FEEDE90FAEA9DE9DB8CE1D681E7DD89E6DC87EBE18CFAEE9DF2E797F1E598F3E69B ECDF93EDE094EFE298F2E69AEBE092E8DD8DEDE292ECE191EDE293F3E899EFE494F4E89CF8ECA2 F2E69EF3E79EEDE391EEE48EF2E894F6EB9AF4E999EEE395E6DA8FEFE39AF5E9A1F7EBA4F7EAA5 F3E6A2F4EAA5EEE49DEDE399F4EC9BF3EB96EDE68EF4ED97F4EC98F4EC9CF0E69BF1E8A0F6EDA4 FBF4A8F9F1A5EEE69BF5EDA2F7EFA5F5EDA4F7EFA5F2EAA1F1EAA0F9F1A8F7EFA6F1E699F9EBA0 FCEEA7F7E8A6F5E7A3F9ECA5F9F1A3EFE794F2EA95EDE693E9E293EBE495F4ED99E7DF8AF3EC99 F0E797F6EDA0EBE396E6DE93F8F0A3ECE395EAE192D3CB7BEAE098F0E5A9FFF7BD665A1FDBD093 E5DA9CCBC081A095548E843FA39953ADA35BC2B96FDDD291FBEFB3F5EAAEDDD7944B401979702D F3E99CF3EB9BD7CF7AE4DD86F3ED93E0DA80F0EB9ADDDA8DB8B46A9F9A579A9559716A32514A25 554F1B6D6634928B597C75448F864BEBE393F3EB96F0E794F5EB97EDE28FFEF29EF8EA96FFF19D F1E18BF9E993F3E38EFDF1A6F5E9A6F8ECA7F4E7A2F7EBA5F5EAA2FBF0A8FCF1A9FCF0A6F8EBA2 F8ECA2FEF2A7FBF1A8F8EEA5F3E9A2FBF1ADFEF5B2F0E5A3F4E9A7FBF0ADF6ECA6F1E7A0F5ECA2 F8F0A6F8F1A4F7F1A6F6F0A5F6F0A6FBF4ADFFF9B3FEF8B3FBF3B2F9F1B1F9F1B3FCF3B7FDF5B5 FEF8B0FFFAB2F9F1A9F7EFA7FDF5ADFCF4ACFAF2AAFBF3ABFCF4ACFCF4ACFDF5ADFFF9B1FBF3AA F7EFA6FAF2AAFAF2A9FCF3ACFFF7B0FEF5B2FBF1B3FAF0B5FBF0BBFDF2BDF7EDA9F8F0A7FAF2A9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DED385DFD485E4D986D6CC75E1D77EE1D77EDED47DE1D780DFD482DED383E4D888EADA8CE5D587 DDCE80DFD284DCCF81E4D78ADFD387CDC57AD4CB80E1D88DE3DA8FD3C87EE7DA90E4DC90DCD388 E2D98EDAD287D4CC81D4CD81DBD588DED88CDAD486E3DC8ECDC475E3DA8CF0E99DCCC67C8E8B42 959349E3DF96E8E399F5EDA2F3E79AECDC8EEADD8EE9DE93ECE397E7DE92E2D98CECE394F4EC9C EBE392EFE794EEE693F3EB98F4EC97F3EA95F4EA95ECE28DE5DB86EFE590F9EF9AF6EC99F7EC9A F6EB9BF0E595F0E596F0E596F4E595E9D886EEDE8AEEDE89F2E28BF2E28BEFE085ECDD7FEFE180 E3D574EEE07EF9EA8BEEDF84F0DF88E0D079E4D47DF2E38DE6D883EADE8AECE08EF8EC99F4E998 F2E797F9EE9FFAEEA2F4E99AF1E696EDE38FF0E691F6EC95F4EA93F0E68FEEE48DF3E896F0E593 F3E592FCEB99FBEA98F6E593F7E694F7E694F6E593F8E795F5E492F2E18FF4E391F0E18FF1E398 F3E79DF7EBA1F7EB9FF4E89BF0E596F2E796F5EA98EEE48FF1E791F7ED96F3E994F5EA9DF7EBA1 F3E79DEFE399F0E49AF6EAA0F7EBA1FBEFA5FEF2A8FDF1A7F9EDA3FAECA3FBEBA1F4E496F5E597 F9EA99F7E895F7E893FCED9AF4E595E9D98CF4E499FDEEA3F9EC9EFAEF9DEEE393F0E596F2E798 F4E99AF8ED9EF6EB9AECE18DEBE189F1E88DE9DF86F8E999F8E89BF7E897FAEB98FDEE99F7E893 F1E28DF3E490F4E592EADB8AF1E193E8DB8BEBE18CF1E694E5DA88E2D785EBE090F1E696EEE393 F2E798F7EB9DF8ED9EECE192F2E798F1E697E9DE8FE7DC8CEADF8DF6EB99F4E997F1E696F3E79A F5E99FF5E9A2F9EDA5F1E695EFE590F0E690F1E694F0E595EDE293ECE094ECE096F7EBA3F7EAA4 F1E49EF5E8A4EADF9EEFE5A0F7EDA6F0E79CEEE596F6EE9DF3EA9BF5EC9DF8EFA2F3E9A0F2E8A1 F3E9A2F7EDA5F4EAA2EFE59DFDF3AAF6ECA4F7EDA6FCF2ABF4EAA3EEE49DF3E9A2F9EFA9F1E59D F8E8A4FEEFACFDEFB2FCEEAFFFF3B0F2E89FEAE195F1E89AFCF4ABF4EBA4FEFAB5EFE69CEAE297 F1E9A0EFE79FF6EDA9E4DB98E7DE9AC6BD78C3BB73DFD78EDAD288F2E8A5F7EAB2E3D79D564A0F DFD497FCF1AFECE29DFEF5AFEFE59EF1E7A0F7EDA6F4EAA3F3E8A7D9CD90EEE3A23E3312736923 F6ECA3E5DC8FF2EA98E4DC88E2DB83F0E98EFEFBA1ECE796E7E197F7F0A7E9E29EB7AF70787032 857C43B8B074D7CF91D9D192D5CD8D6E67219F974CF4ED9FD5CE80E8DF91FFF3A7E8DD8DEADD8F F4E798F9EB9EFFF4A6F4E496FFFAB1FFF5B0F9EFAAFFF7B1F7EDA6F3E9A2FBF1A9FEF4ACFEF4AC F7EEA3F4EBA0FAF1A5FAF1A6FBF2A7FAF0A8FBF1ACFDF2AEF6EBA9F6EBA9FEF4B1FDF3ADFBF1AA FFF6ACFFF7ACF9F2A4F9F3A6F8F2A6F8F2A8FCF5ADFFF9B3FFF9B4FFF8B7FFF8B7FEF6B7FBF3B5 FBF3B2FFF8B1FFF7AFFAF2AAFBF3ABFDF5ADFBF3ABFBF3ABFBF3ABFBF3ABFCF4ACFDF5ADFBF3AB F9F1A6FBF4A7FCF5A9F9F2A4FBF3A9FAF1A8FBF2ABFDF4B2FDF3B5FDF3B7FCF1B6F7EEABF8EFAA FBF2ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBCF7FE4D886DBD17BD1C66EE1D67DDFD47BD9CF77DFD47EE4D985E3D887E5D888ECDC8E EBDB8DDCCD7FDFD384DCCF81E1D487E1D589D6CD81DAD185DBD287DAD186D5CA7FE5D98EE0D88C DCD388E3DA8FDBD389E2DA8FD6CF86CDC77DE5DF96DDD78EDAD38AD6D082CAC374A69F51918B3F 9E9A4FD5D287EAE59BEEE79BF9F2A3FDF2A2F2E794EDE090E5DB8EEAE194EDE496EAE193EBE293 EDE595EFE796F0E895EEE693EBE390ECE48FEBE28EE8DE8AEADF8EF0E693F6EC98F8EC9BF6EB9A F8ED9CF4E999EDE291EFE494F1E595F6E896E7D784F1E08EF3E38FF0E08BEFE088F4E48CEBDC80 EEE082E6D779ECDE7DF4E686E8D97EF2E28AEBDB84DECE77F4E48FEBDC87EFE390F1E694FAEE9F F8ED9EF3E899F4E89BEEE298EBDF93F0E596EADE8DECE28DF3E993F1E790F0E690EEE390F1E694 F0E594F3E592F9E996FAE997F2E18FEFDF8CF5E592F2E18FF1E08EF0DF8DEEDD8BEDDD8AEBDC8A F2E597F2E69BF4E89CF5EA9DF5E99BF4E99AF3E898F9EE9EEFE493F1E694F9EE9AF1E695F7EBA0 F7EBA1F9EEA4F5E99FF9EDA3F3E79DF3E79DF8ECA2F8ECA2F5E99FF6EAA0FBEEA5FBEAA2F2E297 F0E093F4E594F6E793EEDF8AF7E993F6E794EDDE8EF8E898F2E395F0E494F9EE9CF2E797EDE293 F6EB9DF5EA9CF9EE9FFBF0A0EADF8CEBE189F7ED94EBE289EFE291EEDF8FF7E998ECDE8AE6D882 FAEC96EEE08AF9EB97F9EB98F0E291EFDF91EEE293EFE494F0E596C3B869F8EF9FE1D687ECE191 F2E797E5DA8BE7DC8DF5EA9BF2E798F2E798F4E999F6EB9AF1E693E8DD8BEBE08EF0E592F3E896 F7EC9CF7EB9EF5E99FF5E9A0F6EB9AF7ED98F7EC98F5EA99F1E696EDE292F3E79BEBDF94F9EDA4 F7EAA4EDE09AF7EAA4F0E6A0EDE39DF6ECA5EBE19AE5DB95EFE69DE3D993ECE29BF6ECA5F6ECA5 F8EEA6FDF3ACF7EDA6F4E9A5F8EDA9F6ECA6F9EEABF9EEAAF9EDAAF7ECA8F1E6A2F2E7A3FBEEAB F5E5A4F8E9AAFEEEB2FEEFB4FDEFB4FCF0B3F9EEB0FDF2B2EFE3A4EFE6A8EFE5AAFAF0B5F7EEB0 E8DFA1E8E0A4F1E8ADEDE3AAB8B0779F965C71672CB1A96AD5CD8CBCB371CFC587C0B37E8B7E48 776C2EEEE3A1E4DB94F0E69CFBF1A8E6DC94EDE39BF7ECA8F9EEABEDE3A2F2E7A76D6225847934 FFFFBCF4EAA1F0E79AE0D788E1D987F6EE9AE9E28BEFE794ECE598E4DD94A19A5279702BBEB671 F1EAA4FAF1ABE8E096F2EC9FEEE797FAF4A0DBD484817832837B36CBC37DFEF5B0F5ECA6F0E39F F5E9A5EEDF9CF2E39FF4E6A2DECE8AE6D895FBF0ACECE19DF5EBA6FAF0A9F8EEA7F7EDA6FBF1AA FCF2AAF5ECA2F1E89EF4EAA0F7EEA3FCF2A8FEF4ACFAF0ABF8EEAAF9EEACFCF1AFFFF7B4FEF5AE FAF0A9FAF0A7F5EDA2F5EEA1F7F1A5F8F2A6F8F2A8FAF3ABFDF6AEFDF6B1FDF6B3FDF5B4FBF3B4 F9F1B3F8F0AFFBF2ABFAF2AAFAF2AAFFF7AFFDF5ADF9F1A9FBF3ABF9F1A9F9F1A9FAF2AAFBF3AB F8F0A7F6EEA3FAF2A6F8F1A3F3EC9EFAF3A4F7F0A1F7EFA4F8F0A7F9F1ACFAF1ADF9F0AEFBF2AE FBF2ADFBF2ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDBCF7CE8DB86DCD07BDDD27AE8DC83DDD279D6CB74DBCF79DFD27EDCD07EDDD17F E8D88AE5D587D8C97BD7CA7BD4C779DBCF82DFD388E3DA8DE8DF93DCD389D8CF84DACF83E5D98D D8D082D7CE82E1D88DDCD48CE6DE96BBB36D77702AADA661B8B06EABA45F8F873BAAA353A49F4E C7C173EEEA9CE1DE90ECE698E2DC8CECE492FBF09EF8EC97F0E591EDE495EEE597F6EC9DF8EFA0 F0E897E9E190F2EA99F0E895F1E996EEE693EEE694F2E896EFE494EEE394F4E999F5EA99F2E898 F6EB9BFBF0A0F6EB99EEE490F0E692F2E793FAEC99F1E28FF9EA98F5E691F0E18CEEE088ECDE86 E0D277EADE80ECDF82F0E384F2E586E5D67BF2E289EEDD85DACC74E6D783EFE290F5E997F5EA9A F8ECA0F7EBA0F2E69BEFE398EEE299EEE296F1E696EADF8DE8DD8AEBE18BEFE58DF2E893EEE490 F0E592F1E697F4E795F6E894F7E895F1E28FEBDC89F2E390F3E491F1E28FF2E390F4E592F2E390 F3E593F2E597F0E697F0E596F1E697F3E899F5EA9BF4E99AF7EC9DF5EA9AF5EA9BF6EB9BF2E798 F2E69BFCF2A8FFFDB3FBEFA5FDF1A7F0E49AF9EDA3F8ECA2F4E89EF1E59BF5E99FF8EAA1F6E59D F5E599F1E194EFE08FEFE08EEEDF8BF8EA92F5E68FEBDD86F3E38FF2E590F0E491F4E998F9EE9E F5EA9BFDF2A3F9ECA1F8ED9EFAEF9FEDE290EBE28BF6EC94F1E890F2E695EADE8EFAEE9BDFD37F CFC36CF5EA91EADF86F1E68FF2E691F4E896ECDF90F0E395E7DC8FF4E89CA09447E8DF90F3E899 F9EE9FF0E595E7DC8BE7DC8CF3E897F4E998F0E595EEE393F0E594EFE591E8DE89EBE18CEBE18C F4EA96FAEF9EF6EA9CF2E69BEEE297F0E592F4EA95F8ED9BF7EC9CF5EA9BF5EA9BF8ECA0F1E59B F8ECA2F6EAA2EFE29CF7EAA3F1E89EE5DC92EDE39CEEE3A0EAE09DEFE4A4EADF9EF0E5A2F6ECA7 F3E8A1F1E89EFAEEA9F0E2A0E9DB9AECDE9DD7CA87E1D392F5E8A5F7E9A7FCEFACFDF0ADF9ECA9 FBEEACFDEDAFFEEEB2FCEEB2FBECB1F8EAB0F5E8B0F5E8B2FFFAC5FDFBC7FFF5C1FFFECBFBF1BD E9E1AFF5EDBCEFE7B6E9E1B1F1E8B9C4BC8C625A293B33007E773FACA66A7F793B4D440A817442 AFA26D9E9355F4EAA4F6EDA0E3DB8BFAF2A2FAF1A6F3E9A2E6DB9AFCEFB2F7ECAB716721817732 FBF1AAF1E9A2EBE198DDD489F2E99BEEE596F2E99AF8EF9FF7EF9FB1A85D877D35ABA15AE0D58D F6ECA3FBF3A7F9EFA0EDE393EAE38CF2EA90E4DD7FFAF49CE1D9958F87487B7334BBB173EFE5A7 EBE0A3F8ECAFE6D99CDACD90BEB27587783D70652CE6DB99FAF1AFF0E5A2E9DF9AF5EBA6F9EFA9 FAF0A9F8EEA6F7EDA5F7EDA5F6ECA4F4EBA0F8EFA4FCF2AAF7EDA8F2E7A3F7ECAAFBF0AEFFF4B1 FCF2ABF9EFA8FAF0A7F4ECA1FAF3A7FBF5A9FAF4A8F5EFA5F2EBA3F2EBA3FAF3ADFAF3AFFAF3B0 FBF3B2FBF3B3FAF1AFF6EEA7F7EFA7FAF2AAFFF9B1FEF5ADF8F0A8FAF2AAF9F1A9F9F1A9F9F1A9 F8F0A8FCF4ABFAF2A8FAF2A8F8F1A5F5EDA1FCF5A6FCF5A6FBF4A5F9F1A5F9F1A8FBF3ABFDF5AD FFF8B2FFF6B1FBF2AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0D47EE6DB82D8CD74E2D77EDED37ADDD279D8CC76DBCF79DBCF7BDACE7A DFD27FE9DA89E2D382DBCD7CD5C879D3C677E2D687DFD484DFD689E7DE91DDD487D7CE81DACF83 E0D586D0C77AD1C87CDAD186D5CD84E1D892BAB16E5C5412585011847C3DB1A968CDC87ED3CD7E E9E493F4EF9EE5E08FFEFEAEE8E090E0D886E7DF8AF5EB96F4EA93F2E891EEE694ECE493ECE493 EFE796F0E897F1E997F1E996EBE390F1E996F2EA97F1E996F7ED9DF3E899EDE195F2E699EEE394 E8DC90F0E596F7EC9CF4E997ECE28EEDE38CECE38BF4E693F6E794F8E995EBDC89F1E28DF5E790 F2E48CE7D980F3E68BF1E38AF2E589FAED91EEE085ECDE85E4D67DDACC75CCBF6AE4D886F3E798 F0E498F1E59BF1E89EEFE59DEBE199F5E9A0F5E99DEDE393EDE290EEE391E9DF8AEBE18CF1E792 EBE08DEADF8FECE191F1E392F2E392F6E796F6E796ECDD8CEBDC8BF5E695F3E493F5E695F8E998 F4E594F6E998F7EA9BF2E797EEE393ECE191EEE393F0E596F4E99AF1E697FDF2A3FBEFA3F1E59A F5E99DF2E69DFDF0A6F6E99FD6CA80F3E79DF8ECA2FBEFA5FAEEA4F8ECA2F6EAA0F7EBA1F6E89F F3E29AF4E499F8E89BF6E796EADB8AEFE08CF8EA92F5E78FECDE85EBDD84F6EA91F7EB97ECE190 F8ED9DF8ED9EFAEEA0F6E99EFBEFA3FAEFA0F5EA9AEEE390EFE590F5EB96FBEE9DFBEE9EFEF29E EEE28EEADF87FFF49BEDE289E2D680DED27DF0E492E7DA8BEEE294F4E89FFCF0A8BBAF65B3A75B F7EB9FF0E596EFE495F3E898F3E897F6EB99F5EA98F3E897EFE494EEE391F2E894EFE590EEE48D ECE28CF8EE99FCF1A0F7EC9DF7EBA0F4E89DF1E696F3E897F2E797F1E696F5EA9AFBF0A1FCF0A4 FAEEA3F7EBA1F5E99EF4E8A0F4E89DEAE290E8DF8FECE396F3E9A1F4E9A7F1E6A4EDE2A2F0E5A3 F4EAA2EEE599ECE394F6EFA5FFF4AFF8EBA7F3E6A2EFE29CF2E5A1F6E9A3F2E59FF6E9A3FCEFA9 F6E9A3F3E6A0F8EAAAF7E9ACF8EAABF9EEAEFDF2B4FFF3B8FDF6C2DED2A0E5D8ABC0B587AEA472 827848A79F71E0D8AAF4ECBEF7EFC1FFFFD3DDD4A6645C2C8F8854A7A069878146958F51C2B87F FEF0C1AC9F6AC3B778E9DF96E2DB89F7F09BEDE591F1E89AEBE19AF7ECADFCF9C181753391873F FFF8B1E4DA92E8DE96E9DF97EFE69BEEE59AEEE599F9F0A3C5BC6F70671AA99D53EBDE94F1E59B D8CA80F0E397EFE495E8DC8DF7EB9AF3E994F6EA93E6DB82E4D988D8D08FD3CB8CCAC2838F8748 8880429A92549A9153776D3271672C897F448F834963591BE9DF9FFFFDBCFFF8B5EAE19EF5ECA9 FBF2ADF6EDA8F0E7A1F7EFA7FCF4ACF9F1A9F7EEA3F7EEA4FCF2AAFAF0ABF2E8A4F8EDABFCF1AF FEF3B0FAF0A9FBF1AAFFF6ADFDF4A9FAF2A7FDF5AAFDF5AAF7EFA6F2EAA2F0E8A0F0E7A2F5ECA7 FBF2ADFDF4B1FCF3B0FBF1AEFAF1AAFEF6AEFEF6AEFFF9B1FCF4ACF8F0A8FBF3ABFDF5ADFEF6AE FCF4ACF8F0A8FDF6B4FCF3B2FCF3AFFDF5AEFAF2AAF8F0A6FCF4A9FDF5AAFEF6ABFDF5ACFDF5AC FBF2ACFDF4B1FBF2B0F8EFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDBD075DED277DDD177E9DD84E1D57CDED279E0D37DDED17CDED17D E3D581E7D986EBDC8BE9DA89E4D585D8CB7BDACD7EE7DB8BE3D889DDD486E0D789DED587D7CE81 D4CA7BDED384D4CB7ED7CE83DDD58AD8D088D6CD8ADDD492B8B0706B63247E7638D0C889D8D389 DBD688DDD888E7E291EAE594F2EC9AEFE795EEE691F4EC96F5EC95F2E990F5EC95F3EB97EFE795 E6DE8DEAE290F6EE9CF8F09EF0E895ECE491EEE693F0E895F1E996F1E898F4E89BF4E89CFCF0A4 F6EA9EECE095EEE297EFE496EDE292E7DC88E9DF88E9DF85EBE08BEFE18EEDDF8CE4D683F1E38F F8EA95F4E690EBDE87F7EA91ECDF87E4D87EF3E68DF4E68DEBDE87F1E48EF3E692E1D582FDF1A2 F6EB9DF4E99FF7ECA2FAF0A8F8EEA7F3E8A1F6E9A2F4E89FEFE397F1E697F3E895EDE38FEFE590 EEE490ECE190F3E898F2E797EEE293EEDF8FF4E696F6E897ECDD8DE9DB8BF4E696F4E695F2E494 F0E291EFE191F1E494F8EE9EF3E898EEE394EFE494ECE192E5DA8CF1E698F0E497FDF2A7FBF1A6 F2E69BF6EAA0F4E89EF7EBA1E1D58BC4B86EEADE94FAF1A7F8ECA2FBEFA5F7EBA1F7EBA1F6EAA0 F1E39AF0DF97F3E398FBEB9FFCEC9FECDD8CE8D986F4E590FAEC93F4E68DEFE187F6EA8EF6EA95 EBE08EF4E898F4E99AF5E99BF5E99DF6EA9EF3E79BF0E597EBE08FE9DE8CF1E694EFE293F0E495 EEE291F1E690F5EA94F5EB93F7EC94EADF88E4D984F2E694EFE393F3E79BF2E69EFCF3ABEBDF96 B8AC62FAEEA2E7DC8EEDE293F4E999F0E593ECE18FEEE490F1E695EBE090EBE08EF1E793EDE38E E4DA84E7DD88F3E994F7EC9BF1E697F4E79CF8ECA0FBF0A1F6EB9BF2E797F2E797F6EB9BF8ED9E FAEEA2FBEFA3F6EAA0F6EA9FF6EAA1F1E698E9E289EFE890F1E996F3EA9CF4EAA1EEE59EE8DE97 E9E097EEE599F1E898F1E995F3E99BF9EDA5F4E7A2E9DC95F4E89FFAEEA5F3E79DF2E69BEFE399 F4E99DEBDF93E7DB90FEF1ADFCF0AEF4E8A0F2E99FFBF1AAFFF5B5CABE886A5E2E7267386F6535 3B33021910001B1300453E0C655E2F787142867E4D554E22615A27817A42FFF9BDFCF7B7EDE9A5 FFF8BBD9CD9A92854FE8DD9DF2E89DF7EF9EE8E08BEFE792F4EB9DFBF5AFEDE3A48F824A918745 EEE49CF6ECA4EFE59DF6ECA4F2E8A0F2E89EFBF1A7E3DA909D944A8A8037C4B86FFFF2A5FBED9E F3E496E7D98BEFE193F3E598EBDC91EADC91EEE095F4E59BF7E89EE7DA92D3CA86C2BA77ABA360 9088449992509D9554B1AA69ADA464B8AF70DFD698D1C889877D3FD8CF8FFBF1B1F9F4B5F5EDAA EFE6A4FDF5B2E5DC98EDE49FF1E8A4FAF1ABF9F1A9F6ECA4F6ECA2F9EFA7F7EDA8F0E6A2F2E7A5 F5EAA8F8EEABF4EAA3F3E9A2F8EFA5F6EDA2F6EEA4F9F1A7FBF3A9FBF4ABFBF4ABF8F0A8E8E09A F1E9A3F9F1ABFCF3AFFAF1AEF8EFA9FCF4ACFFFAB2FFFAB2FFFAB2FDF4ACF9F1A9FDF5ADFCF5AD FDF7AFFEF6AEFAF2ABFEF5B8FBF0B8F9EFB4FCF3B4F9EFAEF4EBA6F8EFA9FAF2ABFDF5AEFCF3AD F7EFAAF6EDABFFF6B7FEF4B5FBF2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D475D8CB6DE4D77AE4D67DE3D57CE5D77FEBDD87E2D37E DCCD78E1D27DE4D581E6D785E9DA89E6D887DFD381E6D98AE0D485E5DA8AE7DE90E5DC8DE9E091 DAD185CEC475DFD485DED588DFD68AE2D98EDFD78FD9D18BD5CC89E2DA98B3AA6C7A72349C9454 E1DD95DBD68CE1DB8FE7E192E6E08FE8E28FEAE28FEDE58FF4ED95F4ED95F2EB93FAF39BEEE690 EAE28DE8E08BEDE592F1E996F2EA97EFE794F0E895EDE592EFE793F9F19EF2E998F2E797F2E799 F6EA9FF5E99FF0E49CEEE299ECE095F3E898EDE38FF0E68EF6EC93EDE18CE9DD8BE7DB8AECE08C EFE38FF0E48FF0E490ECE08BF2E690F3E793EBE08AECE18CE7D884E3D683F1E592EDE08FE7DB8B FAEFA0F4E89CF3E99EF4EBA0F5EBA3F2E8A0F0E69EF3E79FEFE399F7EB9FF7EC9EF1E696F2E794 F4EA95DFD482E0D584F7EC9CF3E899F2E596F2E596F6E99AF7EA9BF0E394F3E697F8EB9CF9EC9D F3E697F2E596F9EC9DF7E99AF6EB9BF4E99AF5EA9BF8ECA0F3E79BE7DB8FEEE296F2E69BF6EAA1 F8ECA2F6EAA1F4E89EF1E59BF7EBA1F0E49AEDE197F0E49AF2E59BF7EBA1FBEFA5F0E49AF2E69C F3E79DEFE198F0DE97F7E79BF5E69AFAEA9FFAEA9CEADB8AF1E28EF5E691F3E58DF7E990F7EB91 F3E790F1E793F2E795F3E899F5EA9CF7EAA1F8ECA1F8EBA1F6EA9EF4E99AF5EA99F7EC9BF4E99A EDE293F1E696F3E995EFE58FEFE58EF4EA95F1E792F0E593EFE495F0E696EDE196F4E8A0D4C981 B7AB62F5E9A0ECE094EDE195F0E596F2E797F1E696F1E694F0E595F2E796EDE292EFE392F4E996 EFE690EBE18CEBE18BF4E997F9EE9EF3E79BF2E69BFAEEA4F3E899F4E999F3E899F2E798F3E899 F6EB9CFDF2A6F8ECA0F6EA9EF4E89CEDE197E6DB8AEEE78BEFE88DEEE78EECE48FEDE493F1E899 F6ED9FECE395E4DC8CECE491F8F09CF7EFA0EFE59DF0E39DF2E79FF6ECA1F5E99EEEE397F9EFA0 EEE395F5EA9BF4EB9AEFE495F6ECA4FAF0A8F3EB9CF0E894F8F0A0F3EBA1F9F4B99F9462281D02 B6AE79C2BB81CCC687C1BB7FAEA66DA29C62A09961AEA56D938D54A9A365696222E9E4A0EDE8A1 EDE89DF4ECA8AA9D66AFA368FEF4B2F7EEA2E8DF8FE5DD8AF8F09EE2D98DFBF3AD796E2E867A3F D6CB88FFF5ADE3D991F6ECA4F8EEA6EBE199FCF2AAECE29AA59B538E843CEEE49CF6EA9FEFE292 EDDE8CF3E393F7E799F2E294F0DF96FCEDA6FFF0ADECDA9AD0BD82B5A16899894BB3AB60C5BC72 CCC47AC3BB70DBD38AF1EBA2F4EDA6E0D992DFD891ECE5A0E3DC97ACA463877D3FF0E6A8FEF4B7 FCF1B3ECE2A3F7EEACEFE6A3F6EDAAFAF1AEFBF2ACF1E8A2F6ECA4F9EFA5FBF1A9FAF0ABF5EBA7 EFE4A3FBF0AEFFF6B3F9EFA9F4EAA3F8EEA5F7EEA3F8F0A8F7F0A7F5EDA4FCF4ABFFF9B0FCF4AB F1E9A1F5EDA5F8F1A8FAF2ABFAF2ABF5EDA6ECE49CF9F1A9FAF3ABFAF3ABFCF4ACFBF3ABF9F1A9 F6EEA6F7EFA7FBF3ABFCF4ADFEF7BEFFF4C2FDF1BDFDF2BAFDF3B7FAF0B2FBF2B1FBF2B0FDF4B2 F9F0AEF5ECABFCF2B3FEF4B6FDF3B5FAF0B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCD06DD5C868E1D476E3D67CE8DA81E3D57DE8D983 E9DA84DED078DCCE76E5D77FE0D07EDECF7CE2D481E5D987EEE290E5D988E3D888E4DD8BE3DA8A E4DB8CD8CF7FD5CA7DE5D98DE0D78AE2D98DE1D98EDDD58DE5DD94D7CE89D9D28DE4DD99A8A05F 7C7431ACA763CCC981DED98FDFD98DE5DD8FE4DC89F3E896EFE58FF0E68FECE58DE9E38BECE68E E8E189E4DD85F0E991EDE490ECE48FF8F09BEAE28FE8E08DEBE391EBE393F8F09FF8EF9EF6EB9B F3E899F2E69BF5E99FF4E8A0F3E6A0EFE39CEEE295EFE493F3E994F5EB92F3E792F1E593EFE391 F0E492EEE290EADE8CEBDF8DEBDF8BE4D885EBDF8DF0E491DED280EADD8EEBDE8FEBDE90E8DD8D EEE394FCF0A4EFE79AF1E89DEFE69BEAE297EAE297EFE59DF5E9A1EDE197F6EA9EFBF0A2F8ED9C F5EA98F8ED9BE7DC8DE9DE8FF9EE9FF3E79BF3E697F4E798FAED9EFCEFA0F6E99AF5E899F6E99A F3E697F0E394F7EA9BFBEE9FF1E395F2E69AF6EA9FFBEFA3FAEEA4F5E99DF3E79BF1E599F2E69A F4E89CF5E99DF6EA9EF7EB9FF8ECA2F8ECA2F4E89EF7EBA1F9EDA3F6EAA0FBEFA5F8ECA2F3E79D F0E49AF2E69CF6E89EF6E69BFBEBA0F4E49AF5E49CFDEDA2F3E297F1E194F0E091EEDF8BF5E78F F7EA92F5EA93F0E692EFE492F3E899F4E99BEFE399F5E9A2FDF1A7FEF2A7F5E99DF0E596F4E99A F0E499EFE397F1E697EDE293EBE08FF1E792FCF19FEDE291E8DD8EEEE396EFE398E7DB92F3E9A1 C9BD759F9349F6EAA0E9DD93F5E99DF1E599EFE497F2E798F6EB9BF9EE9FF1E697F0E597FAEFA0 FAEF9FEDE290E8DD8BEFE492F6EB9BF9EDA0F4E89EF3E79FF9EDA5F1E598FAEFA0F8ED9EEADF90 EBE091F9EE9FFDF1A6F4E89CEDE196EADE92E2D68ADACF7FF3EC93F1EA90EFE88EEFE88DF3EC94 F4ED95F1EA95F9F19EF2EA99F0E798F1E89AF5ECA2F4EBA6ECE29EF0E7A2F5EDA5F3E9A2E7DF95 F8F1A3F4EC9EEBE293EAE393EBE294FCF4ADFDF5ADF8EF9CF1ED91F4EE98F8F0A4F7EFB1CDC28F 2B2209888149FFFFC3ECE9A1FBF4AFF7EFACF2EAA8F4EAABFFFCBDFEF6B4C3BA77867D38FAF4A9 F0E99CE9E292E2D9908E8343ECE2A1F3E9A3DBD288F4EB9FF1E899E5DB8FFCF5AA998F49867B38 E1D696FBF1AEEAE099E7DD96E3D992EBE19AF9EFA8D8CE87928841CDC37BFFF7AFE3D991F4F3A8 F4E798F4E894EFE48FE4D887E5D98AF6E99FE1D28ED3C484AA9A5F9A8954B7A575D2C188ECE292 FAEF9FFCF4A3E7DF8EE9E092E4DC8FD6CE83DDD58CEEE79EE8E299EAE39BCEC7845951139E9658 EBE3A5FAFABCFBF3B4FEF5B7FCF9B8F9F2B1F9F1B0FEFDBBF8F0ABF4EAA2F7EEA3FBF1A9FCF2AD FAEFABF5EAA8FFF6B4FFF7B4FBF1AAF6ECA5F9EFA5F9F0A5F8EEA6F8EEA6F4EAA2F9EFA7FFF6AE FDF3ABFAF0A8FAF0A8FAF0A8F9EFA7F9EFA7F4EBA4EFE79FFBF3ABF6EEA6F4ECA4FCF4ACFCF4AC F9F1A9F9F1A9F8F0A8FAF2AAFEF6AFFFF6BDFFF3C1FFF5C1FFF7BFFEF5BAFAF0B2FDF4B3FBF1B1 FBF1B3F8EEB0F6ECAEFEF5B8FCF2B5FCF2B5FEF4B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CC65D8CC69E5D778E4D67AEBDC84E2D37B DDCE78E9DA83E8D981E0D179E4D57EDDCE7ADFD07DDFD07DDDD17EE9DD8BE8DD8BE8DD8CE1D988 DDD584E1D888DCD384D9CE81E1D58ADAD185DFD68ADED58ADCD48ADED68CDDD58CDED78ED9D38B DDD68E88833B64611DACA865D7D38CDED58DE8E093EAE191F4E996F3E994F3E993EFE892ECE692 EAE48EE3DC83ECE58CF0E991F0E892F3EB95F5EE98E7DF8BE8E08DEEE694EBE392F2EA99F3EA97 F3E994EDE292E9DE90F0E49CF3E6A0F6E9A4F4E7A1E6DA90ECE192E8DD8CE1D781F5EA97F4E997 F0E593F0E593F0E493EFE392EFE392EBDF8EE8DD8CEADF8EE7DB8ADFD384F4E69BFAEDA3F2E59B EADE93EFE498F1E79BF0E79BF3EB9EF0E89BEBE496EDE699F4EBA0F6E9A3EBDF97F0E49AF3E89A EDE292EBE08FF2E795EFE494F3E899F9EE9FEADE92F1E597F6EA9BF6EA9BF6EA9BF6EA9BF6EA9B FAEE9FF8EC9DF5E99AF6EA9BF6EA9BF4E799F0E49BF1E49EFAEEA5FCF0A7F3E79DEDE196F2E69A F3E79AF5EA9CF6EA9CF4E99BF4E89BF7EBA1FBEFA5F8ECA2F8ECA2FAEEA4F9EDA3F9EDA3F7EBA1 F9EDA3F2E69CF1E59BF9ECA0F6E69AF8E89EF7E79DF8E7A0F9E8A1F5E49DF7E69EF4E398ECDC8E ECDC8CF6E894F8EC98F2E894F1E694F8ED9EFAEFA1F3E79DEEE29AF4E89FF7EBA1F4E89EEEE296 EBDF94EEE39AF1E69DF2E79DEAE093E8DE90F1E798F7ED9EEEE496ECE296EFE49BF0E59EF1E69E EEE297F4E89DF0E499ECE095F9EDA3EEE297F2E69BF5E99EF2E69BEEE297F0E499F1E59AF0E499 F4E89CF5E99CEADF8FE3D888EFE595F3E79AF6EAA0F5E9A1F6E9A4F9ECA6F9EDA2F9EDA0F4E99B F1E598F1E698F5EA9CF3E89AF3E79AEFE496EBDF92EADF91EBE093EFE697F1E897F0E994EFE88F F0E98FF2EB91F0E990EAE290E6DC91F4EAA4F5EDAAEFE6A8F1E9AFF9EFB5F6EEB2EBE4A6EDE5A5 FBF3B2F1EBA7EDE6A0F4EDA6F6F1A9FAF2ABF9F0AFF1E7A4EEE696F1EC91EDE88EEAE496F0E7AB EBE2B16A6233413B08E0DD9AF0EDA2E6DE92F0E69CE9E197E6DB95ECE09AEDE49EA0964FABA058 FAF1A6E8DF91F4EA9AD6CD80ACA25AF6ECA5F6ECA5DCD28BF0E69FEEE49EFCF2ACB1A7609B9049 F4EAA4F9EFA8ECE29CE9E099EFE5A1F4EEA7F0E6A0B1A760A19750D3CA83FAF3ABF4EBA1F2E99F E5DC92F0E496F2E897FAF2A1F4E898D1C576B7AA5D9E9148B3A661CFC080ECDDA3FCECB6F9EAAB F4E897EBDE8BEFE390F2E895F1E596E0D687EBE295E1D98ED4CD82ECE59CECE59CEDE5A2B9B174 857C407B72369B9354B5AD6FC1B97AA59D5EE9E1A1EEE6A5F4ECABF6F0ACF6EDA5F8EEA4F9EFA7 FBF1ACFEF4B0FFF5B3FAEFADF8EDAAF5EBA4F5EBA4F7EEA4F9F1A5F6ECA4F7EDA5F3E9A1F6ECA4 FDF2AAFCF2AAFCF2A9FAF1A7F9EFA6F9F0A6FAF1A7FBF1A9FEF7AFFFF7AFF7EFA7F6EEA6FAF2AA FBF3ABFEF6AEFFF7AFFBF3ABF9F1A9FCF5ADFAF0B3F9EEB5FAEFB5FAF0B2F8EEAEF7EEABFBF2AD F9F0ABF9F0ADF5ECAAF4EBAAFEF5B6FDF5B8F9EFB3F1E7ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACD65DDCF6CE3D575DBCC70E2D27A E7D780DFCF78E6D67FEADA82E2D27ADECE77E2D380E8D986E2D481D8CC78E4D886E2D785DFD482 E1DA89E9E190EAE291E0D788DCD184DFD389D7CE83DFD68BE0D78CDFD78CE8E095DAD287E1DC8F CCC67AD5CF81B8B3678E8B487C7A3ABEBA76F7EEA9E9DE94EFE496EFE292F5EA96EFE792EBE390 EAE591E9E490E5DE85F3EC92EDE68CF2EB94F9F29AEFE890EEE691F3EB98F2EA98F0E897F4EC9B E9E08BEAE087E7DD89E6DB8DF3E79FF8EBA5EFE29EFEF1ADFEF1AAFFF7ACF0E495EFE491F2E795 ECE18FE6DB89E7DC8AEBE08EEDE292F0E595EDE292F5EA9AF1E696EBE08FF7EB9EEFE09AF9ECA8 F6E9A3F0E39CEDE39BECE498EEE59AEFE89BEFE898EEE797EFE898F2EB9EF2E69FEDE199F2E69C F2E799EEE394EEE392F3E896EDE292EFE494F2E797ECE094F3E89AF5EA9BF0E596EEE394F3E899 F4E99AF4E99AF3E899F4E99AF3E899F2E798FCF0A3F7EAA4F1E4A0FAEDA7FFF2ACF2E69EEBDF95 F1E599F5E99CF7EC9DF7EC9CF3E898F0E596F4E89DFCF0A6F8ECA2F4E89EF6EAA0F7EBA1F5E99F F9EDA3F9EDA3F5E99FF3E79DF7EA9DF1E193F6E69BFFEFA7FFF2ACFDEDA8F8E6A3F9E8A3F8E7A0 F1E096ECDC8FF7E89AF9ED99F5EB94F6EB99FCF1A2FDF1A4F8ECA2F3E79FF3E79FF6EAA2FAEEA4 F8ECA1F2E69CEFE69FF2E8A3F3E9A2EBE299E8E094F1E89BEEE69AEFE69BF1E79FF2E8A1F1E7A2 F1E69FEFE398F0E498E9DD91F1E599F6EAA0EBDF95EFE399F6EAA2F4E8A0EFE39BF1E49DF2E69E EADE96E8DC93ECE096EBDF93E9DD91F0E498EFE399F0E49DF5E8A4F8EAAAFAECA9F4E8A0EADE92 E9DC91F0E498F1E599E8DC91F2E798F6EB9CF6EB9CF2E798F4E999F8ECA2F7EDA8F9EEA7F6ED9F EEE692E9E288E4DD83E4DD85F1E899F4EAA5F4E8AED8CB96B0A474938B5C877F4F857D4C7F7745 7F7842817A42948F54CAC488D6D093D0CA8BE2DC9EF4ECB4E2D79CDDD689E8E28BEBE68FF9F3A7 E8DEA6F7EDC2BAB188292300C7C381E7E498E3D98AF1E498EFE397F4E79FF2E49FF9EDA7988B43 CEC17AE9DD92EBDF91EFE294B0A656D6CE7DEFE69AF9F0A7E3D895F2E7A7F3E8A9A69B5B877D3A F1EDA6ECE398E5DC90F4EAA4F0E4A2F0E5A3D3C886948A45B3A862F7EEA7F2E8A1F6EDA3F9F0A5 F1E89DF4EBA0FEF2A8FEF2A7E6DA8EB9AE5FACA151C3B867EEE392EADF91E6DA8FE7DB93F0E29E F6EAA1FBEC9AFDEF9BFAEC9AF2E494F3E697EBDD92F9ECA2EBDF95DCD28AE0D791E7DE99E8E09F F7EEB3DBD297B0A76CACA3689B9355898143696122827A3BD3CB8BF4ECABEAE2A0F4EAA3F3EA9F F2E8A0F4EAA5F9EEAAFCF1AFFFF6B4FBF0ADFBF1AAFCF2ABF9EFA6FBF2A7F3E9A2F8EFA7F6ECA4 F6ECA4FBF1A9FAF0A8F8F0A4F9F0A5F9F0A5FAF1A6FAF1A6FBF2A8FDF5ADFCF4ACF7EFA7FAF2AA F9F1A9F9F1A9FDF5ADFDF5ADF8F0A8F5EDA5F5ECA5F6EDAAF7EEACF8EEACF6EEA7F6EEA6F8F0A6 FCF4A9FBF3A9FCF4ABF9F1A9F8EFA9FEF8B4FFFBBEFBF1B6EDE3A8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD26AE0D36DE3D575DACB70 E5D57DE2D27CE8D882E4D47DE4D37CE4D57BE1D179DFD07BE2D37EE2D47FDDD27EE5D987E0D483 E0D583E3DB8AECE493E9E190DED685DFD486DFD389D5CC81DFD68ADED58ADED789E2DB8DE5DE90 CFC97AD5CF80C5C06FE2DE8FD6D2927F7B3F969050E5DC99F0E59DF1E497F1E495F7EC9AE9E08D DCD484E2DD8CEAE591ECE58CECE58AF0E98EF2EB92F0EA91EEE68FF0E893F6EE9BEBE390F1E898 F9F1A1E7DE89EDE388EEE48EECE190F9EDA2FAEDA7F3E5A3EFE29ED7CA85F5EBA2FBF0A1F2E797 F3E896EEE391ECE18FEEE393F0E595F0E595E9DE8EF4E99AF2E798EEE393F5EA9BF7EB9FF1E4A0 F6E8A7FBEEABF4E7A2EEE49CF5EBA3F1E89DEFE89BF1EA9AF1EC9BEDE896ECE596F3E7A0F5E9A1 F9EDA3F5E99CF3E899F4E999F5EA9AF2E797F5EA9AF5EA9BF1E598F4E89BF3E899EEE395EDE294 F5EA9BF1E697EFE495E9DE8FECE192F2E798EFE495EFE397FBEEAAF3E5A4F7EAA7F6E8A4EFE29B F9EDA3F6E99DF5E99CF4E99AF4E898F3E896F3E898F6EA9FF7EBA1F4E89EF6EAA0F5E99FEFE399 F4E89EF9EDA3F1E59BF6EAA0FAEEA4F8EA9EF3E395F9EA9FFFEFA7FCEBA6FDEBA9FBE9A8F5E3A1 F4E29FFBEAA5FAEAA2FBECA0F6EA97F6EC97F9EE9CF9EE9FF7EC9EF4E89EF7EBA3F9EDA5F8ECA4 F6EAA0F8ECA2FCF0A8F5EBA6F4EAA5F5EBA5F0E69FEDE39BF2E99FF0E69EEAE098EEE39DF5EAA4 F2E6A4EADF97F1E697F5EA9BE3D889EEE394F1E599F4E89EEEE29AECDF9AF2E5A0F8EBA6F4E7A3 F3E6A0F1E49EEFE29BEBDE95E5DA90ECE097F3E79EF0E49AEDE19AF3E6A2F7E9A8F6E8A7E7DB93 EDE096F0E498EFE398EFE397F1E599F2E798F0E596F4E99AF9EE9FF7EC9CF2E79EF9EDB3F7ECAF F1E79FE9E190E6DF88E4DD85EAE28FE4DB92A99E6174673652431B483C175D552E7E764F989168 8A835A7D774A7B7546635D2C635D2B88824EC7C28BC3BD879389598A7E4B9C9350B0AA58C0BB6A E8E29CF9F3BEF4EDC6FFF8D42C2500A8A465EDE79CFAEE9FF9E99BEBDC91F3E29AE7D691EDDD98 887833ECDA96F3E59EF6E7A0DBCA839A8D3EECE38EECE493E2D98FE5DB99EBE0A3BFB37882763B E1D695EFE49DEDE497E8E08FEFE59DFBF4B5BAAE6E786D2BCAC07BFDF3AEEBE19BF3E9A2F4EBA1 F6EDA2EBE295D4CB7FD1C780ABA159AAA156D9D083FBF3A1FFF9A2EEE78FECE58DEAE38CE8E08B EAE28FF3E796F2E192F4E394F1E093F0DF92F7E79CEADC93E5D990D4C882CABF7AB6AB68A49957 ACA365A9A066A0975D9D9359B2A96DC4BB7FBCB476B7AF71857D3E787031CBC383F0E8A7F0E69F F1E89EF3E9A1F5EBA5F5EBA6F3E8A6FBF0ADF5EAA6FBF1AAFFF5AEFAF0A7FBF1A7F4E7A0FDF0A8 FBEFA7FAEEA6FCF0A7FBEEA6F9EDA3FBEFA5FCF0A6FCEFA3F9EDA1F5ECA2F9F1A8FFF8B0FBF3AB F8F0A8F9F1A9FAF2AAFAF2AAF8F0A8F9F0A8F8F0A8F4EBA4F2EAA0F7EFA3FBF4A7FAF3A4F7F09F F8F29FFAF4A2FAF3A2FEF7A7FBF3A8F8F0A5FEF7B1FEF5B7FCF2B7FAF0B5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D674E5D677E1D276 E0D076EBDB83E5D57EEADA84E0D079E2D27BE9D981E0D17BD2C771DACD7BE3D885DED381E0D584 E3D788E7DC8DEADF92E2D78AE0D588E0D58AD6CD7EDBD281DAD281D7CF7FDAD182DBD384D4CC7E DFD78AD0C97DE0D78DDBD489E4DB93EDE5AAB6AF778A8145CAC17DEBE298EDE293EDE190F4E996 ECE08EE7DD8DF1E799F7EC9EF2EA97EBE38FF6EE9AF7EF9AEFE893EEE693EEE693EFE696E3DA8C F1E89DF7EDA4E8DF90EFE690EDE491EBE192EEE498ECE299EDE29CBAAE68A2984EE3D98EEEE595 EBE292F5EB9AF6EB9BF3E897EFE494F2E796F3E896F1E694F3E897F0E594EDE291F0E593F1E697 F2E49CF6E8A1F3E5A0F5E8A2F7EAA4EFE39CF1E79FF3EAA1F0E89DF3ECA0F5EEA1F1E99CF3E89D F5E99EF8ECA0F2E798F0E595EFE494F4E999ECE190F6EB99EDE291F1E696F6EA9FF1E49CF5E9A0 F1E59CF2E69DF1E599EEE294F0E596F4E999F2E798EFE492F2E797F7E9A4F6E7A5F5E7A3F0E09C F2E39DFFF3AAFCEDA2F8EA9EF6EA9BF1E293F6E897F5E99AF5E99FF4E89FF4E89FF9EDA2F5E99F EEE297FBEFA4F7EB9FF3E79CFAEEA2F9EDA1F3E79DF4E89FFAECA3F6E89EEBDF95EFE097F5E79E F3E69DF6E89FFFF1ABFFF3ACFCEDA6F7EB9EF8ED9FF6EA9CF3E79AF4E89DF4E89EF3E79EF7EBA1 F8ECA3F4E89EF6EAA0FEF2AAF6ECA6EEE49EF7EDA7F6ECA5F0E59DF6EBA3F4EAA1E9DD95EDDF99 F7E9A3F4E7A0ECDF94EDE292F3E899F0E596F1E697F6EA9EF2E69BECE097DED18AEFE29CF2E59F EBDF99F0E39AFCEFA5FBEDA4F2E29CECDF97ECDE98F6E8A2ECDE98F0E29CF1E39CF3E69DF9ECA3 ECE099F0E59EF3E8A0ECE19AF3E9A2F6ECA3EEE49BEADF95F1E79BFFF7A8F6ED9CEBE394EBE198 DFD889EAE48EE9E48DE4DF8BEAE399E0D99989824B5048145D572299915BA49D67A6A16AA39E67 96905AA09963C0BA82D7D199EBE6AECCC48C8B834A79713880773FA49B6ABCB481968F54A29C5B BFBB79B5AE73A49D69E9E0B3FFFED277713F75703EF5EDAAF6E89AECDC8DE4D487F5E59BF9EBA5 E7D792887834F7E7A5F3E6A1F9EBA7AB9E59CABD74F8F0A1ECE297E2D890F7EDA8CABF7D807536 D5CB89F4EAA6EDE39CF4EAA0FBF3A8E3D992AEA35F9E9350DFD591F6ECA8F0E5A2EEE3A0EDE29E F6ECA7F0E5A1C9BF79B1A75EABA450CCC56EE7E089F5EB99F7EA9BECDD91EDDE95F9F0ABEEE29F F0E5A3F5EBABDDD291CBBB78BEAF69B8A962B9AB63B5A960ADA056B7AC61B8AE62C4BA6FD3C980 CDC47CD5CA84E0D591E1D692E2D792DED38CFCF2ACF1E7A0ECE29CDFD994534706B9AD6CF5E9A7 EFE3A0F6EAA4FAEEA7F9EBA4F6EAA0F7ECA0F5E89FF7EAA1F7ECA4F8EAA6FEF1AFF3E5A4F5E8A4 FBF1AAFBF0A8F9EEA6FAF0A5FDF3A7FAEFA4FCF2A7FCF2A7FAF0A7FAEFA7F9F0A5F7EFA0F8F2A4 F5EDA1F5EDA3F6ECA4F6EDA5FBF2ABFDF1ABFDF2ABFEF3ACF8EDA5EFE59CF2EA9EFCF6A6FFF8A8 F7F09EF3ED9AF6EF9DFAF3A3FAF3A6F9F1A8FCF4AEFEF5B0FAF0AEFAF0B0FBF0B0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACB70D8C96E E2D27AE7D77FE3D37BE4D47DE8D881E0D079E3D37EE6D681DED07BDCD17EE2D785EDE290E3D888 DFD485E7DB8EEEE296EDE195E3D78DE5D98FDFD389CCC373D8D17AE2DA85D9D17EDDD582E2D98A E3DA8DDFD68AD8CE86DBD18AE4DA93E1D794E4D9A3D1C590958A4FBBB26FEEE59BF1E999F0E593 F5EB97F9EE9EFCEFA2FEF2A9FFF8AEFBF0A5F8EFA3FCF3A4F8F0A0F3EB98F5ED9AF3EB99EFE697 EEE59AF3E9A2F3E9A4F1E79EF2E999EFE697EFE698F1E89BF3EA9FEFE69BCBC277CCC376F7EE9F F6ED9EF2EA99F3E999F5EA9AF1E696EEE393F0E595EDE291EDE290ECE190F1E793F0E592EADF8C EEE391F4E799F4E69AEDDF94F4E89FFCEFA9F3E6A2EFE5A0F3EAA5F3EBA3F5EDA5F4ECA3EFE69B F7EB9DFBF0A1FAEFA0F6EB9CF1E696E9DE8EECE191E3D886EEE391EBDF8EFEF49FFCF0A5FBEEAA F9ECA8F0E39DF7ECA3F6EA9FF2E799F2E798EFE494EEE391F1E693F5EB98F4E39BF7E6A0F6E59F F3E29CF6E59DFEEEA3FDEDA2FCEC9FFAEA9DEDDD8FF6E696F5E899F6E9A1F5E9A1F2E69EF6EAA0 F8ECA2F5E99FF9EDA1F5E99DFAEEA2FEF2A6F9EDA1F0E49CF1E49EF6EAA2F6EA9FF6EB9CF7EC9C F8ED9DF4E999EEE395EEE297F2E59EF2E59FFAEEA6FDF1A7FAEEA4F8ECA2FDF1A7FBEFA5F3E79D F3E79DF4E89EF3E79DF2E69CF5E99FF2E8A0EEE49DFBF1AAF7EDA5EEE39BFAEEA6F8EAA2F1E39A F2E49BF8E79EF3E398E9DC8EECE090F2E797EEE394EFE495F4E89CF6EA9FF8ECA2FAEEA6F4E8A0 ECDF99F9ECA6DECF83F4E497F4E498F0E097F2E19BF0E19CF4E5A0F5E6A1F6E8A0E2D489E6D98B F6EA9BECE398EFE59DF8EEA6F5EBA6FAEFADEDE2A2F2E7A6FEF3B3EFE4A2EBE19BEEE49DFCF3AA ECE694E5DF87F3EE93E4E086E8E498F1ECAF9892633C370F716D40A5A56AACAD67ADAD63D5D28D E1DE99D7D390E7E2A1D0CB89ADA664BEB675F2EAABFFF5B7E1D7998F864778733AABA872CDC892 A6A06C9C9760C8C38DC3BC86B6AF79E6DFA9A49D69554C22F3E9ADEEE092EBDC8AEDDD8FF5E59B FCEEA7AC9D58A0914FF7E9A8F4E7A5EEE4A0ACA25DE1D792EBE199F6ECA5F2E9A2E1D790746A23 E0D68FE2D891EDE39CE7DD96FFF5AEDED48D786E26C9BF77FFFCB5DFD590EAE09BEEE3A1EBE09E F7ECABCDC2819F9454BCB170E3D894E8E387F5F08FF5EF93F8EC99F8E99EECD994FCE8ACF2DFA6 E0D09CBAAB78887C4A6F632F918549958A4BA39856B7AD66C7BD76D2C980E7DE92EFE699E8DF90 E6DD8EEEE496F2E69AFEF2A6FFF4A9F0E496C6B96AE4D788F7EA9BF2E499ECE29A6C5D19C8BA77 FFF9B8F7E9A8FCEDA9FEEFA8F9EC9EF4E798F3E793FFF3A1EFE294F4E69CFDEEA9F9E9A9FFF4B6 F7E9A7F5EBA5F5EBA3F7EEA4F9F0A3F9F0A1FBF2A3F9F0A5F8EFA4F8EEA7FAF0ABFAF0A7F6EF9C F4ED9CF4ED9EFBF3A8FBF1A9F6EBA4FCEFA9FCEFA9FBEDA6FCEEA5F6E89FF4E9A1F3EBA2F7F0A3 FBF4A5F5EE9EF4ED9CFBF4A4FFF8ABFCF4ABFBF2ADFEF5B3F8EFAEFCF2ADFCF2ABFAF0A9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCC71 E2D378E5D57DD4C36BBFAF57D5C56EE0D07BE0D07BE4D47FECDC87EADB87E3D884D7CD78D7CD79 D7CC7ADFD383EADF8FEADF90E4D98AE4D98CEBDF92DCD084D0C776E0D883E6DF89DDD581DBD280 DAD182E1D88BE0D78AD8CE86D7CD86DED48DD9CF8AE0D69AE0D69CAEA565A89F58ECE396F1E998 EDE28FECE18EFAEF9FFBEEA1F5E79EFCF1A9F2E79EF5ECA0F5EC9EEDE595EDE593F4EC99F4EC9A F1E899F6EDA0F1E79EF1E79FF4EA9FEEE695EDE495EEE597F1E89BF5ECA1F5ECA1F1E89DF0E79A F5EC9DF5EC9DF0E897F1E697F1E697EEE394F0E496F1E698E8DD8EE8DD8DEBE090F2E796F1E697 EBE08FEBE090F2E596E8DB8DE5D88CEADE94F0E49CF4E7A1EDE39EECE49CF5EDA5F4ECA3E9E197 E6DE92F1E599F8ECA0F0E598EFE495EBE090E9DE8EF7EC9DF0E592F0E592E8DD8BF2E795F2E699 F6EAA2F2E59EF8ECA3EEE297EBDF93F6EB9DEDE292E6DB8BEBE08EF0E592ECE18EF0E094F2E298 F4E39AF3E298F3E397F4E497F9E99CFAEA9CF7E799E7D789EFDE91F1E496EFE297F6EAA0F5E99F F4E89EF5E99FF3E79CF6EA9EF4E89CF9EDA1FBEFA3F4E89CEFE39AF3E6A0F6EAA2F8ECA1F9EEA0 FBF0A0F7EC9CF1E696EBE092EBDF95EDE199EEE19BF1E59DF7EBA1F6EAA0F6EAA0F8ECA2F4E89E F8ECA2F5E99FF1E59BF2E69CF3E79DEFE399EAE098EAE098F4EAA1EEE59BE8DD92F4E89EF3E59A F4E69AF5E79BF5E599F1E194EDDF91F0E594F5EA98F0E594F0E595F3E899F8ED9EF4E89CA99D53 E1D58AFEF2AAF2ECA3E3D389FDEDA0F9E99CF1E396F0E296EFE196EEDF97F1E49CF8ECA4EEE299 F7EBA3FFF3AAF5ED9DEFE997F8F1A3F5EDA5E3DA99B9AF73A29762A599678A7E4F8F83549B8E60 9D925FA89D60C0B773DDD58EEFE9A0F0EBAB97915B373005817B53B1AE7EC0BE83CECF88D4D389 C0BD76A6A35CA9A55FD9D590FAF3AFF4EEAAC4BE79C0B776D0C684FDFCBCF7F3B2B2AC7178733B 9A955CECE8B0B9B47B89824ACEC890C6BF88BCB57EBFB881342D00DCD396F5E797F1E290F2E294 E5D78CEFE199675913BEB26DE5D894F3E6A2BCB36DC6BC76F0E69FE4DA93E2D891E9DF98958B44 C0B66FF4EAA3F2E8A1F0E69FF0E69FB9AF688A8039C6BC75EEE59EEBE19AEEE49FF5EBA6EBE19C CFC580B5AB66AFA45FD1C783F5EBA6FCF7B2EDE599F1E99CFAF0A4FAEBA3E4D48ED1BE7AC1AF6C 9F8D4D968748A4975AC1B57BDFD598ECDF9EF1E3A2F4E7A4F3E6A0F0E39CECE196E9DD92E8DC91 DFD487E2D68AEDE194EFE398F0E49BF1E59BF9EEA2D5CB7CD7CC7EEADE91FBF0A5F6EAA190833F 9E9150F9EBABF4E6A3F6E7A1F8EAA0F7EA9BF3E793EFE48DDED27BF1E591F3E795FBF5A9F4E59D FFF5AFFCF0ABF4EAA3F3E9A1F8EEA4F8F0A3F5EC9DF9F0A1F4EBA0F3EA9FF6ECA5F8EEA9F8EEA5 F9F2A1F7F0A1F7F0A3FDF5AAFAF0A9F6EBA4FDF0A9FCF0A8F9ECA3FAECA1F6E89CFDF4A8F6EEA5 F1E99EF5EE9FF6EF9FF7F0A0F9F2A4F9F1A5F7EFA6FBF2ADFCF3B1F3EAA7FDF3AAFDF4A7FCF3A6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E1D279DFD178DECF76DDCF77DDCF77DECF77E5D681E0D17CDDCE79E3D480E7D884DDD27CDFD57E E6DC86E5DB87E1D682E3D887E9DE8CE7DC8DEADF90EEE394E3D789D8CF7DDCD47FE1D985E4DC8A E7DF8FE1D889DFD689E0D78ADCD389DED48CE5DB93E3D993ECE3A1E8DE9ED6CE89B5AD62DFD888 EEE693F0E691EBE08DFBF0A0F9EB9EEBDC95F0E49CF4E8A1F3EA9FF2E99BEFE696EEE695ECE492 EDE592F2EA99ECE394F0E79AF3EA9FEEE598EFE796F3EA9BF4EB9DF2E99CF3EA9FF5ECA1EEE59A E9E093E9E091E7DE8FEEE695F4E99CF1E598EADE92ECE096F1E599E9DD91EADF92EEE396F0E497 EEE295ECE093EADF90F4E798EBDE8EEDE092EEE297F0E49CF6EAA2EDE39BE7DF96F2EAA1F1E99F E8E096ECE497F6E99DFAEEA2EEE296EDE294EFE495EDE292EEE393F1E695F6EB99F4E997E6DB89 E9DE8EF5EA9CE9DE91F0E597E6DB8DE9DE8FF1E697EEE391ECE18FEEE391EDE290E9DF8CF5E595 F7E798F7E799F3E395F0E092F0E093F3E395F6E698F6E698E7D789EEDD90EFE294EEE096F9EDA3 F7EBA1F2E69CF0E49AEEE298F2E69BEEE297F0E499F3E79CF1E59BF2E69DFAEEA6FDF1A9F5E99E EEE297F2E798F5EA9BF5EA9BF6EA9EF9EDA3F9EDA3F5E9A2F3E79EF8ECA2F8ECA2F6EAA0F7EBA1 F0E49AF9EDA3F7EBA1F1E59BF4E89EF9EDA3F2E69CF6EEA2EBE297F0E79BF3EA9DF2E79BF8EC9E EEE193F0E295EEE192F0E091F3E395F5E695F3E895F7EB98F3E793F3E795F4E897F2E697FFF3A5 938639DCCF81EEE096EBDD93E8D98DF5E598F1E494F1E493F1E594F1E693FDF8A9F4E89DFCF1A9 F7ECA8ECE1A2ECE1A5EDE4A9F4ECB3DBD39B9187535E5522443B08493F0D72683569602D6B612C 776E367D733E605325766B386E652E7E743CAEA672797143958D65ACA47E9791609A965AA9A75F B0AF64CCC980ECE8A0E2DE95AFAB62AEA761D5CE89F3EBA3EEE5A1CDC37FD3CA85EAE29FFFF8BA D7D195746F329C9659F4EEB2DDD79C9E985CD9D398CAC48BB8B278504A11DFD798F8EA9AF0E38F F0E394EADC8FEDE0966A5D16DACD88E1D690DDD38C998F48DFD58EF6ECA4F2E8A1E6DC95AAA059 C9BF78DFD58EEFE59EF9EFA8EAE099A79D568B813ACCC27BECE29CF9F0ABF1E79FF9EFA9E3D993 AAA059AA9F59DDD38CEFE59DE7DD95F7EDA5F6EDA6FFF5B7E7DB9ED1C384B8A9679A8A4386752C C9B86EE2D389DFD087E8DC95F5EBA5E6DC93E9DD8CE4D886E5D986EBDF8CEEE18EEEE38CE8DD87 E0D57EDFD47CEADF88EDE28AE5DB8CEDE49CF1E79FFAF1A8EDE599F0E69BE7DD92EDE49BEFE59F C5BA77867C3BF5E9ABEFE29DEFE29AF2E699F5EA98F5EA93F1E78DEFE68BEAE186CEC36BFCF29F FCF5A5EDE496FBF1A9F9EFA8F7EDA5F4EBA0F6EDA0F8EFA1F2E99CEFE69BF0E79CF4EAA2F7EDA6 F8EFA7FAF3A7F7EFA4F5EDA4FAF2A9F6ECA5F5EAA3FFF3ABFFF3AAFAEDA0FBEF9EFBEF9EFEF7AB F8F0A7F0E89DF6EEA1F7F0A2F7F1A2F3EB9FF1E99EF3EBA3F9F0ABF9F0ACF5EDA7F2E99CF3EB9A F4EC9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDDCF76DACC73E7D980E9DB83DFD179E0D27AE1D27CDFD07BDECF7AE3D481E5DA85DFD47D DAD179D7CD77D9CF7ADED47FE3D983E6DB88E6DB89E6DB89E3D886DCD181D8CF7DD7CF7AD8D07D DED685E2DA89DDD485DAD183DDD487DDD489DFD68DE8DE96E9DF98EEE5A0DED690E8E095CEC879 D7CF7DE6DE8BF0E590EEE390FAEF9FFDF0A3F4E59CF2E69EFAEFA7FAF0A6F6EDA2F2E99BEDE594 E6DE8CF0E894F5ED9CEAE291F5EC9DF8EF9FEAE292EFE796F4EB9CF2E99BEEE598EEE59AF2E99E E8DF94EDE497FAF1A2EFE697F2E999F5EA9DF2E69CEADE94EADE94EFE39AECE096EBDF95F0E49A F0E49AEDE199EFE39AEDE196F1E494F1E494F0E394EFE495F0E499F0E49CF1E79FEEE69DF1E99E F1EA9DF3EC9EF7EFA2F6EA9EF7EB9FEFE397EBDE93F0E596F9EE9FF4E999F8ED9DEFE493E8DD8B C8BD6BD8CD7BFBF09EE1D683C6BB69E8DD8BEEE392ECE18FF2E795F6EB99F3E896F0E593EFE493 FAEB98FDEE99F9EA97EFE08DEFE08FF6E796F0E092F4E496FAEA9CF2E295F6E699F1E496F7EA9F F5EA9FEDE197EFE399F5E99FF4E89EEDE197EADE94ECE096F2E69CF6EAA0F9EDA3FCF0A8FDF1A7 F6EA9FF0E498F4E99AFDF3A4FDF2A3F7EB9FF7EBA0F8ECA2F9EDA5F6EAA0FAEEA4FAEEA4F9EDA3 F9EDA3F4E89EF3E79DF5E99FEEE298F0E49AF9EDA3F4E89EFCF3A6EBE294EDE495F6ED9EF7ED9E F7EC9CF3E796F0E393ECE08DECDD8AF0E18FF2E491EEE28EF1E591EEE28EEFE38FEDE18DE9DD8B FCF09EE8DB8CF0E394EFE293F6EB9BDCCD80EDDD8FEBDF8CF0E490EEE48CEDE38CF8ED9AEBE395 F7EEA8F1E5A9E8DDA6F4E9B9E5DBB89D937653492A4238157B734DA49D71CEC796F2ECB3EEEAAA E5E19BDAD88AD9D490F8ECC0DDD1A5C6BB8D8A7F5070683A574E238F865FC2B990FFFCCCDDDA9E BFBC77BBB86E9A964DA29E55D8D48BFFFFB8DCD58CAEA75EDBD38AF2EAA1E8DF96D1C77FDAD189 EDE7A2E7E2A0EDE6A4736D2B888341F0EAABCBC5879B9559E2DCA0A9A369585219D8D191F4E897 EFE28EEFE391F3E698C0B4697D7127F1E59EF8EEA7B8AE66AAA157ECE498EEE59BF1E7A09E944D B1A760F1E7A0E4DB94FEF4ADE2D891A39952958B44E1D790F8EEA7DED48EEEE49FF1E7A0BCB26B 8E843CC4BB71FEF7ACF7EEA3EAE196F9F0A4FBF8ADE6DD95A59862988A55928349AA9C5AD4C67D F1E495E8D98AF2E794F3E697E8DD8DE6DC8FEDE394F5E991E9DE84E0D57DE3D880EEE38BF3E88F EFE48CEDE189DCD177DACF75E9DE85F1E798EEE5A0E2D993F1E9A1F4ECA4F7EFA6EBE39BE3DB93 E1D894E0D7968E8444EBE3A4F6EDA8F7EBA3F6E99FF4E999F3E993F3E991F1E88DFAF095FFF9A0 FBF9A2D1C673C4B868F6EDA3F7EDA6F6ECA4F1E89DF1E89DF4EB9EEFE699F2E99EF3EAA0F3E9A1 F6ECA5F8EEA7F3EBA3F1E9A1F1E9A1F9F1A9FBF1AAF5EAA3FAEEA4FBEFA2F5EA99F7EB97FBEF9C FEF4A7F7EFA6F4ECA2F9F1A6F8F1A3F7EFA5F9F1A6F6EEA4F9F1A9FAF2AAF8EFABFBF3ADF6ED9E F6EE9CF5ED9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE5D77EE6D77EE5D67FDCCE76D4C66EE1D17DDECF7CDFD07DDFD07DDFCF7CDBCF7B D1C770D1C770CAC069CCC26BD9CF78E4DA82E1D780DDD37EE3D984E6DC87E0D582DBD27FDDD582 DFD786DAD381D6CE7DDBD283DAD184DED588DED58ADDD489E4DB91E5DB92E7DF94DAD286E6DE90 E7E08FE7E08EEBE38EE6DC87ECE18FF1E696F7EA9DF6E89EECE096F0E59AFDF4A9F8EFA4F1E89A F0E797EFE796F6EE9DF2EA97F4EC99F6EE9CF1E997ECE492F1E998F1E899ECE395EAE194F2E99E F4EBA0F2E99EF7EEA1F8EFA1F3EA9BF1E998F0E498F3E79DF0E49AEDE199EEE29AEDE199E1D58D EEE29AF2E59EF3E6A0F6E9A3F1E59CEDE08FF4E894E8DB8CE5DA8CEDE197E8DC91EFE59DF7EFA4 F0E89DEEE69AF4ED9FF5EDA0F0E49AF2E69CF7EBA0E9DD91EDE294F7EC9DE8DD8EF9EE9EEBE090 F2E798E9DE8EF1E793ECE28CECE28CDAD07AE4DA85F1E693EDE290EEE391EEE391EEE393EEE393 F0E594EFE18AF5E78FEEDF89E1D27DE6D783F9EA97E8DA88EDDD8EFAEA9CF9E99CFCEB9EEFE294 E9DB90EBDF93EDE195F3E79BF3E79BEEE297F7EBA1F6EAA0F5E9A0F6EAA2F7EBA3FAEEA5FAEEA4 F3E79DF6EA9FFBEFA2F7EB9FF5E99DF4E89CF6EA9DF9EDA3F9EDA3F5E99FF1E59BF6EAA0F7EBA1 F7EBA1FBEFA5FAEEA4EFE399F8ECA2EFE399EADE94F7EBA1F4E89CF0E898EDE494F0E897F4EC9B F3E998F1E694F3E793F0E491EFE38FF3E490F4E591F1E38DEADE88ECE08AECE08AEEE28CEADF88 E8DC88F2E692EFE390F3E794F8EC99F0E793DED181E9DC8DEADE8BF2E791EFE58CEBE389E6DF8A E7E193ECE5A2F6ECB5FCF2C3CDC39C6C634A433A26463E277F775AAEA785A29E73918D58A8A567 B1B267C3C470CCCE73DEDD8CE7DEA9F2E8B7FFF5C2F2E7B6D6CB9DAEA37573693C615829857D4A DDD79DF0E9ABEFEBA6EEEAA0D3CF85AAA55BBCB66BEDE59BDED68CB8B065DCD389F5EDA1EFE69A DAD185E8E39AE9E198F7EFA8DBD58F756E29AEA663E9E3A2AFA96BB6B072D0CA8E4C470CCAC283 FDF2A1F3E793ECDF8EFEF4A6978B40A99D53F8EFA7E5DC93A2994DBBB466A29B4DD8D086B9AF67 8B813AF1E7A0EADF98FCF8B1C3B8718D833CA99F58F1E8A1EAE099E2D891DFD58FBCB26CA39952 AFA55CE0D88BF0E79AF3E99BE7DE90DAD183BFB6699E9447978E44AA9E63C7BA81DCCF8FEDE199 F8EE9FEEE590E8DF89E3DA83E5DC87E2D788E4DB8EF2E89BE6DA8AECDF90E1D587DBCE81ECDF95 FEF0A7FBEEA6F8EAA2EADD93E4D78CE4D68AEBE099D9D191C3BB7BE6DE9CD5CE89E5DE97E8E19B E9E29CE6DF9AEEE6A5A49C5DC5BC7EF6EBACFAECABF5E8A4EDE097ECE193F4E997F2E892EFE48E E2D782CDC26DD9CE7CF2E797F2E99FF3E9A1F6ECA4F7EDA5F3EAA0F0E79CF1E89DFBF1A9F9EFA7 F0E69EF2E8A0F7EDA6F4EBA6EFE6A2EEE5A1F8EFABFCF2ADF4E9A2F6EA9FF8ED9DF1E693F5E992 FCF298FCF3A4F6EEA6F7EFA6F7EFA6F5EDA3FCF4ABF6EEA5F5EDA5FAF2AAF8F0A8F7EEA7FFFDB7 FAF1A4FAF1A2FBF2A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDFD47BE4D980D2C76EDED27BDFD37DDACE7AD6C975D8CC78DACD7BD9CC7A DBD07BD9CF79D5CB76D9CF7AE1D782E1D77FE0D67FE7DD86E4DA83E5DB84DDD37DD5CB75D9D07C D8D07ED9D081D7CF7FD3CA7BDAD181DAD184E9E093E4DB8EE7DE91DBD286E1D88DE7DF94E5DE90 EBE494F1EA99F3EB9AF3EC98E9DE8BEDE291F8ED9DFAED9FF7E99DF9EDA1EADF91F3EA9BFCF3A4 FDF4A5F7EE9FF0E797F4EC9BF0E897F5ED9BF0E895ECE491F1E997F4EC9BF4EB9CF3EA9CF3EA9D F4EBA0F7EEA3E9E095EFE699FBF2A4E9E091EBE393F5E99DFBEFA5F3E79DEBDF97EFE39BE5D991 EBDE98F2E5A0F7EAA6F3E6A1ECDE9CE8DB96FDF1A1F0E392EEE192F3E89AF9EDA2E4D890EFE59D F4EBA2F5EDA1F4EDA0F3EC9DF1E99CF4E89EF6EAA0F5E99FEEE296EDE195F5E99CEEE394F6EB9C F6EB9CEBE090F3E898F3E995F2E891F5EB94EBE18BE7DD88E9DF89E7DC8AEFE492EBE08EEADF8F F2E797EEE393E0D27AE5D77EEADC84ECDD88EDDE8AF0E18EF1E291F4E495F2E294F6E699FDEC9F F3E698ECDF91EDE293F6EB9DF7EC9DF0E498F2E69BFCF0A6F0E49CF3E79FFBEFA7F8EBA5F6EAA1 F8ECA1F5E99DF6EA9FFEF2A7F7EBA1E9DD93EEE297F8ECA2FAEEA3F5E99DF0E498F6EAA0F7EBA1 F1E59BF3E79DFCF0A6FAEEA4F9EDA3FCF2A8EEE298FAEEA4EDE197FCF2A6FAF1A1F2EA97EDE592 EAE290F2E895FEF49FF4E894EDE18BF1E58FF4E590F3E48FF5E691F3E48FF4E590ECDD88EFE08B F2E48FEFE08BEEE08BE9DA85EDDF8AF4E691EFE08CEFE290E0D384EBDF8CEDE38CEDE38CF1EA94 F4ED9BDCD68CF4EFB1FAF4C1AAA27848411A2621012B27003A36084D481B7E7A4B7773409F9C64 B7B579BBBB78ADAD6697984D969348A29C56D8D18FEFE7A8F7EFB2F5ECB4E0D69EEFE6AEACA36B 665C265D541DC2B780F0E9A9F1EBA3ECE79CEDE69CBFB76EA59D52F1E99CF4EEA1BDB466E6DC8D EDE293F3EA9BBBB265E9E094EDE59AFFF9B0C0B8715E5712D6CE8DEBE5A6A49E5FD8D2966E6930 BBB577FFF6A7F3E895F7EC9CEBE092998F44DFD48CEDE39BC2BA6FB3AB60DAD385E2DC8CCEC67A A59B54D6CC85FCF2ABF7EDA6C3B972817730C0B66FF7EDA6D7CD86EBE19ADDD38C8C823C938944 D7CD85EFE59BF3EA9DDBD284D6CD7EB5AD5CA89E4FAFA659C8BF74D9CF87F1E7A3EDE39EE2D990 DDD487EEE796E7E08EEBE491E3DC8BD9D184EEE39CEAE09BEDE2A1F1E4A9F6E7AFE0D39DCBBD8A CAB989C3B485B4A577B3A2739E8F5FA3946191814E7A6E3681793B99915381793968611D766F29 817A348C853F8D8642978F4F7D753691884BECE1A6F4E7ACE8DC9EECE1A0D7CD86D4C980D7CE82 DED586E1D88AE8DF91F4EB9EF2E89DF6EDA2F5EBA2F7EDA5FEF4ACFBF1A8F0E69EFCF2AAFFF7AF FEF4ACF7EDA5F7EEA3FAF0A9F9F0ADF8EFACF7EEACF4EBA8F8EEA8F6EBA4F9EDA1F7EC9DEDE18D F6EB92FFF49BFAF0A0F4EDA5F4ECA4F8F0A8F8F0A8F7EEA7F7EEA8F6EEA6F9F1A9FEF6AEFEF9B1 FFF9B2FBF1AAFBF2A9FDF3ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDFD47BE2D77ED3C870DACE77D6CA74D8CC78D7CB77DED27FE0D482 DED280DFD381E0D682D7CC7BDAD07BE4DA86E7DD89E2D881E1D780E3D982E8DE87E3D982DDD37C E4DB87DED685D7CE7FD2C97AD2C97AE1D889DBD285E8DF92DFD689E3DA8DE0D78BE7DE93E2DA8F E2DB8DEDE697F0E99AEDE595F2EB9AECE191EFE494F6EB9CF7E99BF3E698F7EC9DFFF7A5F8F09E F7EF9DF9F1A1F7EE9FF4EB9CF1E999EFE796F2EA99EEE694EDE592F3EB99F6EE9DF3EA9BF1E89B F3EA9DF6EDA2FBF2A7EEE59AF0E79AFAF1A2EBE293EBE393F5EA9DFDF1A7F3E79DE6DA92EBDF97 EDE199ECDF99F2E5A0F7EAA6F4E6A5F2E3A3F4E7A2F4E799FDF0A1F7EA9CE1D58AEADE96EEE29A EFE59DEDE59DEFE79EF1E99FEEE69BEDE597F7EBA1F1E59CF1E59BF4E89EF2E69AF1E59AEBDF93 F0E596F4E999EFE494F5EA9AF6EB98EFE590EFE591F5EB96F0E692F0E594EEE391F4E997EFE492 EDE291EFE494E2D786ECDD88F2E38CF7E893F9EA95F9EA97F9EA97F8E999F9E99AF8E89AF8E89B F9E99CF5E89AF1E597EEE494F5EA9BF7EC9DF5E99CF9EDA1FBEFA5F7EBA3F7EBA3F8ECA4F6E9A3 F3E79FF4E99CF2E69AF4E89EFEF2A8FDF1A7F2E69DF2E69CF2E69CEFE397EEE296F1E599F8ECA2 F7EBA1F0E49AEFE399F6EAA0F4E89EF0E49AF8EBA1F2E69CFAEEA4EFE39AF6EA9EF9F0A1EDE593 ECE491EDE592EEE492F2E793F5E995E8DC86E6DA84E7D883E7D883EDDE89F8E994F6E794EDDE89 ECDD88ECDD88EDDE89F2E38EF2E38EF2E38EF2E38EE7D982E9DD89F1E495FDF2A0EBE08FEFE795 F9F2A3E2DC93EEE9A7DBD89E6E6A3B2B28014A451F7C7940A8A669C6C488A4A269A09E6598965C 8C8A518C8A4D9F9E5EC9C885D8D892DBD98EC8C470918C39B1AC5FD3CC87E9E19EFCFBBAEFE6A4 F5ECADE6DC9FA79C64443804ACA267E7E099FBF4ACE9E299F1E9A0C6BE75B3A95EFCFCB0D9CF80 D0C576FEF7A8D3C879867A2BD6CD7EF0E698E1D78CEEE79E90874187803CF0E8AAA29C5FB4AE74 6F6931B0AA6EF2E89BE3D888F8ED9EBFB368A29850EAE098DED58E908840D8D186FBF4A7E7E193 B6AF63D9CF88F8EEA7E1D7909288418C823BE9DF98F1E7A0EFE59ED9CF889E944D9A9049CBC17B E7DD98FFFBB3EEE59BCAC173908738A49C4BC4BB6DE9E093E1D88DE4DA95F3E9A5F7EDA5DAD389 ECE69AE9E398E0DC91EFEBA3E7E39DE2DD9ADBD394C7BE81C8BE82A69C62968A538D804D766B3A 796C3F7B6C4274673C8F81598C7D53938759998D5C9F925FA99D679F965BB6AE70A69E609D9652 9F98539C954E9B944E9D96527B733178703152490B786D34C8BB86E0D49BE7DB9FFFF5B7EBE09F E4DA96F0E7A0F0E6A0EBE19AEFE59EF4EAA2F3EA9FF6EDA3F4EAA2EEE49CF2E8A0FEF4ACF3E9A1 F2E8A0F3E9A1F6EDA3F5ECA1F4EBA3F6EDAAF7EEABF7EEABF2E9A6F3E9A4F7ECA4FAEDA2F8ED9D F1E691F3E88FFAEF95F5EC9EF2EAA2F4ECA5F9F0ABF9F0ABF3EAA5F9F0ABF7EEA9F5EDA6F8F0A8 FCF4AAFEF6ADFBF1ACFBEFAEF9EEACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CE77DDD17BDCD07ADCCF7BD6CA76D8CC78DACE7BE3D785 E4D886DED280DED282DED382D6CB7BD9CE7DE2D785E6DB8AE2D884E3D984E5DB86EBE18BE5DB84 DFD57EE1D986DDD485DED586DDD485DAD182E2D98AE2D98CE9E093D8CF82D6CD81E2D98CE6DD90 E8E096E6DE94F4ECA3F5EDA3EBE397FBF2A4F7EB9DF6EB9CF7EC9DF5E899F2E596F5EA99F0E78E EEE68EF2EB94F8F09DF8F09FF4EB9CEFE698EFE698F1E999F0E897F0E898F5ED9CF7EF9EF3EA9B F0E799F3EA9DF7EEA3F8EFA4F2E99EEFE699F0E799ECE394EAE291F8EE9EF2E799E5DA8DEBDF94 F7EBA1EFE39AEFE29BF5E8A3F6EAA5F4E6A5F5E7A6F8EBA6EEE095F7EA9DF1E399DCD088EADD96 F2E5A0FAF0AAF1E7A3F2EAA3F9F2A8F8F0A6F4EBA1F8ECA4EEE29AF0E49BF8ECA1F9EDA3F5E99E EEE296F0E496EEE394F4E99AF6EB9CECE192E8DD8DEDE292F4E999F2E796F3E898F6EB9AF7EC99 F3E895F5EA98F7EC99E5DA88F4E593FAEB99FDEE9EF9EA9AF7E898FAEA9BF5E597F6E698FCEC9E FAEA9DF7E69AFAED9FF4E899F1E696F5EA9AF7EC9DF7EB9FF9EDA1FDF1A7FCF0A8F9EDA5F3E6A0 F0E39FF1E49CF2E798EFE397F0E49AF7EBA1F8ECA4EFE39BEFE39BF4E89EF4E89CF1E599EEE394 F6EB9FF6EAA0F1E59BEFE399F1E59BEFE399F5E99FFCF0A6FDF1A7F8ECA2FAEEA4F2E69BEEE696 E6DE8DEDE594F3EB9AF1E796EFE492F1E592E8DC88E4D783E5D581E6D782EADB88F1E290F2E394 EEDF8DECDD8AEBDC89EADB88EFE08BF6E792F7E992F6E890EADC85F2E590ECE08EEEE393EEE397 E6DE95E5DD9AE7E2A3E8E5AB8C8956525023A3A179B9B78ECFCC99C6C38DD4D29CD5D29CE4E2AA E9E7ACF3F1B4DFDE9AB4B46B939445939545B1B15AEBEB8BFDFBA1CFC978A09A4FB1A960E2DA90 EEE699EFEB9FF8EEA7F3E8AAB9AC77675D229C954FF3ECA8E9E19AF8F0A7EDE39BC9BF76C0B76B FBF0A2CBC071CFC475DBCD7ED8CB7BC6BB6AF2E797F2E69AEAE096DBD28C4F4704C1BA7CD7D195 B2AE755F5A249A945AF0E69DEDE196FBEFA67E742DCBC17BEAE09AB1A863BCB56EE7E198E7E195 9A9447CFC97EF3EBA3CEC47D847A33A79D56EFE59EF1E7A0DED48DAEA45D9F954EC2B871E7DF98 F6ECA6E4DA94C5BB73A69D51B6AD5FCFC776EAE192ECE395E4DA93DDD38EF4E9ABF1E7A8F3EBA6 E9E49DFEF9B6E7E5A7CBC991CDCC97AEAD7C7C7949817C4D756D3E978E5D9991599B944FA79F5A C5BF7CD4CC8ED7CE93DED59BE9E1A6E2D99DE9E1A0F4EFA8E8E198EFE6A4E6DDA1F3E8ABF4EAAB F4EBA8E1D893F3EAA3DDD58DF6EDA8E7DE9AF2E9A7D5CB8B978C53635920867C42CFC589E7DEA0 CBC183F5ECADF7EEADF6EDABF7EEAAF7EEABF0E9A1F2E99DEDE498F8EFA4F9EFA8F2E8A1F7EDA6 FBF1AAF5EBA4F5EBA3F9F0A5F8EFA2F5ECA2F6EEA9F8EFACFBF2AFF6EDA9F4EAA5F8EDA6F6EA9F F6EB9BF8EC99F2E68FF8ED94FAF0A2F8EFAAFAF1ABFCF3AFFAF1AEF6EDABFCF3B1FBF2AEF8F0A9 F4ECA4F6EEA4FDF5ACFBF0AFFBF0B1FBF0B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4CA73DAD079E5DA83DDD37DDDD37EE1D684DED280 E2D785E0D585DCD181DCD081D7CC7DD7CB7EDCD182E2D787E1D687E1D686E9DF8DE7DC89E7DE88 DFD57FD7CD78D7CD7DD7CE81E1D88BE5DC8FDFD689E0D78AE9E091E8DF90DBD283D4CB7CE3DA8B E8DF91EDE59DE8DF9AF0E7A2EEE59FE6DD95F8EEA6FBEEA4FBEFA1F7EC9DF4E798F5E898F4EA95 F3EB8EF5EF91FCF59BFFF8A2F9F1A0F2E99BF1E89DF2E99EF2E99CF4EB9CF5EC9FF4EC9CF3EB9A F4EB9CF5EC9EF4EB9EF3EA9FF3EA9FF2E99EEEE598EDE496F0E798EDE694EDE292E7DC8CE3D889 F0E596FAEEA2F0E49AE8DC94F5E8A1F7EAA4F4E7A3F5E7A5F0E3A0FBEDA3F7E99EF5E7A0F0E49E FEF0AEF8EAA9F6EBA9ECE3A2EFE6A3F9F1AAFAF2AAF5EDA4F8ECA4F4E8A0F3E79FF4E8A0FAEEA4 FCF0A6F5E99DF5E99DEFE496F4E99AF3E899E6DB8FF7EBA1FDF3A9F4E89CF8ECA0FAEEA1FAEFA0 F4E999F0E595F6EB99FBF09DF1E794F7E799FBEB9EFCEC9FF8E89BF6E699F8E79AF2E295F2E295 F6E698F4E496F1E193F4E798F4E898F5EA98F5EA98F6EB9BF2E69AF0E498F9EDA3F2E69EF1E49F F4E7A3F3E6A2F4E79FF5EA9BF1E499F1E59AF3E79FF5E8A2EFE29CF0E49CF9EDA5FDF1A5F5E99D E9DE8FF3E79AF3E79DF4E89EF3E79DF2E69CF3E79DFAEEA4F8ECA2F8ECA2EEE298F6EAA0F3E79B F2E99AEFE697F3EA9BF6ED9DF9EE9EFEF4A4F0E493F1E593EEE290EEDF8DEDDE8BEBDC8AE9D88A EDDB8FEFDE90EEDD8EEFDE8EEEDD8BEEDD8BF2E38DF3E38EF2E28DE5D67EF0E38CF4E894ECE193 ECE19AF1E7A9FFF9C3DFDAA8908D5D514F254C4A214F50252E2C0637320B372F0A433C14463F14 70693AABA670D4D192DFDC95F4F3A3F3F39ECACB6FADAE509A993BC8C772F2EEA2F5EFA8B2AA62 857D30E4DC88F0E692F0E594E6D992EEE0A4DBCF9269601D948B4AEFE5A2F1E7A2EEE49DF1E59E B9AD63E1D589C2B668B9AC5EF8EB9DFFF6A5E3D483D7C97BEFE397F4E89FF8EFA9AEA564938C50 FBF4BDB2AD76635E2B8D8851FEF4AFE9DF97E3D993867C38ECE29FF0E7A4908745C9C27CF4EDA5 B2AC61C2BF72FCF6AAC4BA73897F38CABF78FFF8B1E9DF98CAC079A69C55AAA059D9CF88F6ECA5 E7DD96C8BE77B9AF68B8AE65D3CA7DEBE292EAE291DAD282EDE499EDE29EDBCF93F5E9B0FAEFB9 FBF4BCB5B17B8582546764405E5C40595640504E39827E67B4B094CCC7A4DBD3ADF1EBB5DCD98D E9E698E9E79CD4D08ACEC987DBD796EFEBA7EFEBA2E8E599E7E694E4E28DF5EFA6EFE3A9E7D99D E2D697E5DA99D7CB86F5E9A3E8DE96F1E69EFFF4AEF3E9A4FBEFACF4EAAAE9E09FA49B5A443A01 7C7234DCD292EFE6A5FDF4B3F9F0AEECE3A0F0E7A3FBF3ABFDF4A8EDE498F2E99EF9EFA8FAF0AA FEF5B0F8EEA8F9EFA8F6EDA4F3EA9FF3EA9DF6EDA2F8F0A8F9F0ACFFF6B1FBF2ADF9EFAAFCF1AA F8ECA2F9EDA0FDF1A0F2E690F2E690FDF4A9FFF6B1FCF3B0FAF1B0F9F0AFFBF1B1FAF1B0FEF5B1 FDF5AEF8F0A7F6EEA2F9F2A6FCF2ACFCF1B0FCF1AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CF78DFD57EE8DE87D4CA75DFD580E5DA88 E0D583E3D886E1D686DBD07FDACF81DACE83DED286E3D78CE5D98CE1D688E0D587E7DC8DE3D888 E3D886DDD37FDACF7BDFD585DAD185DBD285DAD184D9D083E4DB8EE9E091DED586E3DA8BDBD283 E3DA8BEFE697EDE4A0EEE5A5F0E7A5EFE6A3EFE6A1F6ECA6F2E59DF7EBA0F2E798F1E495F4E896 F2E890ECE482E5DF7DE6E082EEE78FF5ED9BF5EB9DF3EA9FF5ECA2F2E99FF6EDA1F7EEA1F2E99C F0E897F3EA9BF5EC9EF3EA9DF0E79CF2E99EF0E79CEFE699F2E99BF0E798F0E897DED381E9DE8B F3E897EEE394EDE193F8EC9FDDD187EFE29BF3E6A0F1E4A1F6E9A6F1E4A0EDDF97F3E59EF6E6A1 EBDE9BF5E7A7F2E4A6F2E7A8EDE3A3EEE5A4F5ECA8F5ECA8F4EBA4F7EAA3F8ECA4F7EBA3F4E8A0 F6EAA0F9EDA3F2E69DF4E89BF3E89BF0E597F4E89AEFE39AEFE29CEADD97ECDF98F6EAA0F6EAA0 F7EC9DF1E697ECE191EFE492F1E794EEE491F3E399F2E19AF2E19AF3E29BF2E298F0E093F6E699 F4E497ECDC8FF0E092F3E294E8DC8AF2E694F4EA97F3E897F5EA9AF0E598EADE92F1E59BECDF99 F0E39DF8EBA7FBEEABF9EDA4F4E99AF4E99AF7EBA0F6EAA2F8EBA5FDF0AAFAECA7F4E89FF2E69B F1E697EDE393F1E599F1E59BF6EAA0F8ECA2F4E89EF8ECA2F6EAA0F4E89EF3E79DF5E99FEDE197 F6EAA0F4EC9EEEE596EBE294E8DF90ECE293F7EC9CF3E597F8EB9AF2E695F0E190EDDE8BE9DA8A EFDC91EEDC91EFDD91EAD98BECDB8DF1E090F2E18FF0DF8DEEDE89E9D984D2C36CDACB74F1E591 ECE194FBF0AFEEE3ADA2986A5B522C44401C4C49235F61377C7F518B8E5D8E8A5E9B93689D9669 787145554F1F534D1C46400A6C682BBAB673F5F2A8EDEB9EE0DF8ECECC7A9D9950C5C07CE3DA9E DBD291B8B065A9A24BEEE589F2E98EF4EA97DFD08CEFE3A3D7CD8D6F66268B8140F6EBA9E3D994 F7ECA4EADE97B6A95FE0D388CEC174DFD284EADB8BEDDD8BCEBD70E5D78CE1D68DEFE4A0DDD393 797135EEE7B0C6C08D827D4D8D8853FFF5B3FFF6B08D8240BCB170F9EFAFAAA060C0B777F8F1AD B9B26BC0BA71D9D58BA8A258978E46E9DF98F9EFA8D7CD86BDB36C9B914AC9BF78EDE39CEFE59E C6BC75A49A53AAA059D1C77FEDE399F0E79AE1D889EAE292E8DF92F2E8A1EDE2A2D1C48BCCBE8D BBAD817D754D322D0D3D3823575349454242302E3349464B6865635855477F7B607D7755504C1E 96935CCEC99295925E4F4A1B4F481C6561346D693C726D38C5C388DFDE9BDAD893DCD594E6D79C EDDEA1F8EAAAFAECA8DED18AE5D991FFF3ABEFE39AF8EBA4EDE09AF3E6A2F3E9A2E7DE98FFFAB4 C9C07B867D39D9D08CFEF6B3F2E9A5ECE39EF9F0AAF6EDA8DFD78FBDB466E6DD90F9F0A5F5EBA5 F9EFA9FDF6B2F0E6A2F7EDA7F7EDA5F3EA9FF4EB9EF7EEA2F3EBA2F3EBA2FAF1AAFAF2ACF9EFA8 FCF2ABFFF3A9FEF2A5FCF1A0F3E794ECE08CF7ECA1FBF2ADFBF2AFF8EFAEF8EEAEFBF1B3F8EEB1 F9F0AFFAF1ABF8F0A7F8F1A2F7F0A2FCF2AAFAF0A8F8EEA6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED47DE5DB84EBE18CCFC570E3D984 D7CC7ADACF7DE0D483DDD281D4C979D3C879E0D48AE0D489E4D88DE4D88CE2D68AE3D889E8DD8D DFD484E1D684DFD482DED382E8DE8FE1D88CDCD385D7CE80D3CA7CDFD788E2D98AD1C879E6DD8E DAD182D4CC7CE6DE8EE4DB97EFE5A6EFE6A4F4EAA9FBF1AEF0E6A1EBDF96F5EA9DF2E798F4E796 F9ED9AF5EB92EFE986E5DF7CE2DB7EE9E289EFE795F0E799F4EBA0F7EBA3F3E79EF6EBA0F6EBA0 F2E99AF1E998F0E798EFE697F0E79AF1E89CF2E99DE9E094ECE395F3EA9BE7DF8EE4DC8BEEE490 ECE28DEFE491F5EA99F3E898EFE495E3D78CF2E69DEFE29BECDF99F3E6A0EEE19BEDE099EDDF98 F9ECA5FEF2AEFFF6B6F2E3A4F3E8AAF1E8A9F0E7A5F0E7A5F0E7A3F2E7A2F9ECA7F6EAA3FAEDA6 FAEEA6F1E59BEDE195E5D88DEDE195F5EB9EEDE397F8EDA1FFF3ABCDBF7BB3A560E0D28BEEE199 ECDF94EFE395EEE292F0E492F1E592EFE38FEEE38FF6E69CEFDE98EEDD97F6E5A0F8E7A0F2E299 F2E198F4E498E5D589F3E496FFF3A4EEDF8FF0E492F3E796EFE493F4E898F7EA9EF1E599F6EAA0 FBEDA7F8ECA5F4E7A2F7E8A5F9ECA4F6EA9BF6EA9CF8EAA0EFE39BF0E29CF6EAA5F3E7A0EDE197 EEE396F3E898F6EB9CF2E799F1E49AF8ECA1F9ECA1F1E59AF7EBA0F1E49AF4E89DF5E99EFDF2A7 D4C87BE1D68BFEF3A7EDE396ECE294EFE596F1E797F4E999EFE394F6E89BEFE194EFDF8FF2E291 F1E192F2E094EDDB90EFDD91E8D78AEBD98CEFDE90ECDB8AEFDE8DF7E793F6E690D8C972D5C871 E0D583EBE097EBE0A28176412D2501352D0958542F7C795289885B9E9E6D9A9B649A96578E8847 A29C5DD7CF94E8E1AAD7D09C8F87556159294E4616726B3AB1A97AE8E1ABECE8A3CFCA8AB1AB72 988F57E7DEA1F2EBA0D0C972ADA647E2DA7CF3E892ECDF93E3D791E4DA98C8BE7E564B10A49959 F7ECA9E9DF97F7EDA3D6C97EDFD285E1D487CBBE71FAED9CF7E997D7C979EFE196E3D88FE2D793 ECE0A471672FCBC48ED5CF9D6A663593905AF8EFAECCC27D7C7230F4EAAACDC3858D8446D4CC8D BAB372C9C37FC6C27B716D23938E45E1D892F2E9A3BEB46E988F48C3BA73EAE098E2D891AEA45D A99F58C4BB73D4CA83ECE29CF9EFA9EEE49BF2E99DECE396F6EDA0DCD288B7AD668F8345746732 796B3C7A6C432018022E27115952476662636360694D49564C48544D4A4E55514A625E4A918F6F 7371505953372C2612453E28605847635B4B645C4B2B2416332C166F694E8C8867ACA881A2996A A1935997884BAC9D5FD5C586DBCD87F6E9A0FCEFA5EEE197F6E99EF1E39AF9EBA4F1E79BF8F2A3 F0E99BFCF4A9D4CB819A9249BFB56FE0D891FAF2AAF3EAA2CEC67CA8A055DED589F9F1A6F8EDA3 F3E8A1FAEFA8F5E9A4F5E9A4F6EBA3FAEEA4FAEFA3F3E99BEEE597F0E89CEFE69CF7EFA5FAF1A9 FCF2ABF9EEA6FCF0A6FDF2A5FAEE9FFCF09DF3E795EEE499F6EDA7FDF5B0FEF7B5FEF6B6FEF5B7 FEF5B5F9F0AFF5EDA6FAF2A9FEF7AAFEF8A9FDF4A9FBF2A7FAF1A6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD07BDAD07BD4CA75D6CC77 DED47FE2D883D5CB76E9DF8AE0D680D6CB79D5CA79DCD182DACF80CCC172D6CB7CE7DC8DDFD484 DBD080E4D989DACF7FD8CD7DE2D787DFD483E0D583D9CE7CD5CA7AE2D787E0D585E9DE8EE4D989 DED383E1D686DDD282D6CA7DD1C57BE3D891F5EBA1F5E89EEEE296EFE495F8ED9EEDE291F5EB97 FBF19CF3E992F4EA91F2EB93F3EB96EEE691E9E18FF0E596F6EB9CEEE395F8EB9DEADD8DECE08D FDF19DE9DD8BE9DE8FEFE495F6EB9CEADF90EBE091EFE494ECE191E9DE8CE4D987E4D987E9DF8B EEE590EFE58DEAE08AECE28DF0E593ECE18FE3D888E8DD8DE9DE8FEADF90F1E698F8ECA0E7DC8F F1E79AE7DE91E8DF93F4EBA0F2E8A0F3E9A2F1E7A0EDE39CEFE59EEDE39CEADF9BF2E4A4F9EBAA F2E5A1F9ECA4FBF2A5F3EA9BF1E899EDE495E4DD8DE5DE8EF3EB9CFFFAABB1A153C8B86AFCEC9C F8E998ECDD89F2E28EF1E38BEFE188F1E38AF1E487EEE187EDDD8FF7E69EF7E69EF7E69EF6E59D EBDA92F9E8A0F0DF97EBDA92F0DF99F9E8A3FEEDA5F7E89CF0E095F3E59AFCEEA2F6E69BEBDC91 F2E398F6E69BF3E499F2E398F9E99EFBEB9EF4E497F5E598F6E69AEEE095F1E296F9ECA0F0E395 E5D88AEEE292F8ED9BF4E997EBDF8FF3E596FAEB9EF8E89BF0E395EEE093F7E79CF9EB9DF4E798 FEEF9DF4E793CBBC6BEEDC92F5E498E3D47FF6EB91EDE38AF8F09DEADF97F3E4A0EADB95F3E297 F2E08DE2D07BEBDA8AEFDE90EBD88DEEDC94EDDB93EFDD94ECDA8FE6D584F2E28BEBDC7FDACB6D E4D788E7DE9BF2EAAA7F79381612005954199F9A62BBB67DE9E2A7E1D89AE9DE9DEADF9EDED48F DAD28AB2AC63AAA259B6B067E6DF98F6F1AEEAE5A9CAC58D75703F261F00797243E4DCA2E8DFA5 EDE4ABA39A5D978F4EF3EDA3EBE596E1DA89A19A49DAD383F3EC9CE1D885F1E693E9DD949E9351 352B00C8BF7FDCD48EEFE898E5DE87D3C976FAEF9FD5C77CF1E998F7EF9CD5CD7ADDD282EDE096 EEE19FF4E7B0A296659B9464CECB98585820ACAC6DEFEDA1797529BEBA73F1ECAB898346CFC98F A7A169B8B276C9C58663601EC5C27DF7F4AFD4CF8D95904E908A46F4EDA5C4BE74A39B4FBDB467 C5BC6DDED285F6EA9EF0E499E3D895F4EAADECE3A4F2E9A6CAC17B9A914CA49B5699904D9D9455 BCB279D6CB964A3E11736936C9C292DBD4A5E5E0B7D2CCA6C7BC9C93856B6A5D47413926413D2D 575D4DC9CDB3BBB4856A5F3143380CC3BA8EF2EBBCD1CB9BB3AD82716B47474122373214A29D7D DAD5ABC4BD87A49A5CAC9D689785559A8E4BA19949CDC876DDD78BF1EA94FFF5A0F8E7A1F4E79E E9DF93F6ECA1F4E8A0FEF6AFC5BB74A0934DA59A52A9A055B7AB5FCDC375E0D488FFF1ABFEF0A9 FBEDA4F2E498F2E597FCF09EF1E593EEE28EEFE38FEDE18EEDE18FF1E594F2E696F4E999F6EB9B F8ED9EFDF2A4FEF2A4FAED9FF8EB9DFCEFA1FFF2A3FBEE9FEBE192EEE598FCF3A7FEF4ACF7EDA6 FEF8B3FFF7B5FCF2ADFAF0A9FDF3ABFFF6ABFEF5AAF5EBA6FFF5B1FBF1ACFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD580DCD27DCDC36E CAC06BDCD27DE7DD88D9CF7AE6DC87DBD17CD9CF7ADCD27ED6CB7CDDD282E1D686E2D787E0D585 DED383DFD484D8CD7DD3C878DDD282E6DB8BDED47FE1D781E0D680D7CC78DFD582E6DB89DBD080 E1D687F1E696EADF8FEBE090E6DB8CE3D78BE3D78AEFE397F2E798ECE191F0E595F1E693EBE18C F1E790FAF099F6EC94ECE28BF4EC98F5EC9BEFE797EBE293F1E699F9EDA1F2E496EDE091F5E894 EFDF8BF8EA92F7EB98F2E798F0E596F3E898E8DD8DEBE090F0E594F1E694F2E892EFE590EDE38E ECE28DECE28CEFE58FECE28CE9DF8AEDE38EECE28EEADF8DE6DB89E6DB8AEEE394F3E898F1E696 ECE394F0E899E8DF90EAE192F2E99CEEE598F3EA9FF4EAA0F6ECA2F7EDA5F4EAA2F1E6A1F8E9AC F9EBADEFE29FF4E7A0F5ECA1F0E799EFE697EBE495E6DF91E9E394F7F0A4E3D686C8B765FBED9A F8EA96EBDB85EEDE88F2E28CEEDE86EBDB82EADB81ECDC82EADA81F6E698EEDE92F7E79BF9E99D F1E198FAE9A0EFDE98F4E39DF7E6A0F7E6A1F3E29CEFDE98F6E59DF8E7A0FBEAA1FAEA9FF9E99E FAE99EF7E79AF6E699F8E89BFAEA9CF7E799F6E598F5E397F2E094F5E497F2E194F2E293F4E697 F1E495EDE18FE9DE8DE9DE8DECE18FECDD8DEFE090F6E698F9E99CF6E699F3E397CABA6EEAD98C FBEC9BF7E894F3E48EF3E28FD4C078ECD98CFCEF97FCF090EAE184FCF4A0F1E89FF3E5A5EFDF9D F3E097F0DE8AE9D880EADC87EEDD8CEBDC8EEEDE95F0DE95EEDD94F0E194E7D786D9CB72E0D473 E4D775E7DE92F0E7AEA49E635F5A1EA3A060B1B072B3B070928E4DA39A57A19550AA9A55D2C17B E8DB96E1D790F1E89EE6DF90BCB564B1AB5CD6D186E5E19DE6E2A6EFEAB79490603029026F6734 D7CE95FEF5B9E8E0A1A7A05D968F49EAE49CE7E197BFB96DB8B265E5DF91E5DD86F2E88DF8ED9F C3B878554B0F6E662DE0DA93E5E08EDED97FCCC36CEFE495D1C47BE7DF90F3ED9AD9D27DE8DD8A EDE194DFD08FF7EAB3A29666999263D4D19E63632CB7BA7AD7D78D78772DEDEBA8C0BD80ABA76F DCD8A3A4A06C817D47666228C8C587DCD997C1BE7D999557959152BDB9779D9954837D36B7B168 DED78BF1E89DECE39AEDE19AF4E8A2F5EBAEDBD099BFB67B92884C938A4ABDB474E4DB9BD2C989 A89E61C6BB83958A55605620BCB275B4AD6BB8B370BEBA77B2AB69C7BB7FCAB783CFBE93AB9C7D 58543E353C2EB1B69CF7EFB7CBC0877F743D7D743BE7E1A3F0EAACECE6AFDBD7A9B3AE894D4728 474221B2AE86E2E0ADF4EBACE8D9A8F4E1B8E1D593BDB766ADAB579F9D52C8C369DDD379E0CF88 D6C87FD1C579F4E89EF6EAA2FAEEA6DFD28CF8EDA7EADE96DED286E2D68AF1E696FCF0A4FDEBA8 FEEEAAFFEFA7F7E79BF2E391F9E994F8EA93EFE189F5E68FF9E995F4E492F4E593FBEF9DFBEE9C F8EB9AF5E897F5E899F7EA9BFAEC9FFCEFA1FAECA1F7E99FFAEDA1F8ED9DEEE695F0E798FAF1A5 FAF1A6F6ECA5FCF2ACFBF1ACFCF2ABFEF5ADFDF3AAF8EFA6F5EBA8FEF3B3FAEFAFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7CD78DCD27D D3C974CCC26DE2D883E5DB86D9CF7AE0D681D5CB76DAD07BE2D884DCD181D9CE7EE5DA8AE2D787 DDD282E1D686E1D686DBD080D9CE7EDACF7FD2C776D2C873DFD57EDFD57ED6CC77DDD37EE4D988 E3D888DBD080E4D98ADFD485F2E699E8DC90E5D98DDACE82E4D88CE9DE8FE2D788EFE494F7EC9A F4EB96E9DF88EBE18AF2E88FECE28BEDE691F8F09FFDF5A4F9F1A2F5EA9DF4E89CF7EA9BF0E394 E7DA86F2E38FFAEC94EEE18EEDE293EADF90ECE191E6DB8BE9DE8EEDE291F0E593F4EA95F2E893 EEE48FECE28DEBE18BF1E792EFE491E6DB89E8DD8BEDE291ECE191E5DA8AE7DD8DEFE595F1E597 EEE295F3EA9DF1E89BE9E093EFE699F4EB9FEEE59AF2E99FF0E69DF2E8A0F0E69FEBE19AECE19E FBEBADFBEDAEF2E5A3F2E5A0F1E7A0EAE198E7DE94E7E096E7DF98EDE49EF7EFAAF9EB9FE6D483 EFDE8CE9D886FDED9AF6E592F1E08DECDB88E7D781E7D681EBDB85ECDB87FFEFA1F1E194F8E89B F8E89BEFDF93FCECA1EEDD93F3E29AF5E49CF4E39BF5E49EF7E69EF2E199F9E8A0FBEAA1F8E89D FCECA1FFF0A5FAEA9CF5E598F7E79AFCEC9EFDED9FFDEC9EF4E296EFDD91F4E397F5E598F4E496 F6E899FAED9DFBEE9FF2E797EEE393F3E898F0E394F4E497F9E99DFBEBA0F9E89FF8E79EEAD990 F4E497FFF0A2FDED9BEEDF8BEADB89EDDB90E0CF80F3E68EF5EB8DF1E78BF1E994FCF2A8F7E8A5 F5E6A1F4E297F2DF8CF2E28BEEE38AEFE28DECE18EECE092EBDD92E7DA8DE5D98AE6D987F0E58C F7ED8EDBD171E3DA92C5BD8857511988844C77753B929056B1B072B1AD6DB6AE6DA79E5A9F944F A1934F9A8D49ACA05BE7DD95F6EDA2F0E799DBD586B2AB60BBB56EC9C484DBD59CF0EAB6CAC491 433A0A5C531CCFC68CE9E1A4F4ECADBFB875BAB36DECE59CE7E196A49E52D7D185E7DF8BEEE389 F2E79AE2D896A096594F460ACFC982E0DB8AE9E38ECAC06CEBE091D8CA82DBD285EBE493CCC46F DDD37EE9DD8EEADE97EEE3A6B6AB788A8254C0BC8E5E5D2BD3D39D9C9D5BBBB97ADEDDA295935D BEBA887A7647615D2F999565CAC792B4B1788482469D9A5DA9A46B8781469E985CCBC687EDE8A8 EBE5A5F4EEADF3ECAEE1D99DC4BA80A79C64A19661A59D67BEB57FB2A970B4AE72B0A86C8C8347 A39C60B5AD74B3A974877F4BD9CF9AD2C78AD0C984E7E29BE3E197E2DD91F7EBA2F2E19EF7E6AB EADDAD8C8664242810656848E4DCA6FAEFB8C4B981554C13B8B277F3EDB3EAE5AEF9F3C2EFEBC0 C3BE97534F2A514E24B2AF7F999053726332A6936AC2B574F1EB9CEFED9DE1DE96E3DE87E5DB83 E3D18CE7D990E3D78BF6EA9FEFE39BF5E9A2FCEFA9F3E7A1F9EDA4FEF5ABFFF8ABF8ED9DE9DE8F FFEFABF9E8A4F7E69EF3E397F5E595FCED99FAEB97F2E38EFAEA96FEEF9CF7E897F2E694F7EB99 F7EB99F4E796F1E496F3E597F7E99EFDEFA5FFF1A9FCEDA6F9EAA4FCEEA8FBF1A4F1E998EDE496 F7EEA2FCF2AAF9EFA8FCF2ACFDF3AEFFF5AEFFF6AEFCF3AAF8EEA5F4EAA5FAF0ADFCF1ADFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCDC36E DBD17CE2D883D9CF7AE3D984E4DA85DBD17CE1D782D8CE79DED47FE6DC88DFD485D5CA7AE1D686 DCD181D9CE7EE0D585E3D888E9DE8EE6DB8BE1D686D7CC7BDBD07BE0D67DDBD178D9CF77DDD37C E0D581CFC474D2C777E8DC8FE5D98DE9DD93E4D88EE7DB8FE5D98DEEE296E8DD8EDFD484F0E595 EADF8DF6EC97EBE18AE1D780E8DE85E9DF88EBE38FF4EC9BFAF2A1F9F1A2F8ECA0F7EA9EFDF0A2 F3E698E3D682F3E48FF3E58DEBDE8BF0E495F1E697F3E899EFE494E9DE8EECE190EFE492F0E691 EDE38EEBE18CECE28DECE18FF4E997F0E595E4D989E5DA8AEEE394EADF90E7DC8DEDE195EFE397 EBDF94F1E49BF4EBA0F0E79CEDE499F3EA9FF6EDA4F3E9A1F8EEA7F1E7A0F3E9A2F2E8A3EFE5A0 F3E8A4F7E7A9FCECAEF9EBA8F5E9A3F2E59FECE09AE9DF98EBE09CECE2A1F1E8A7F8EEAFF6EAA0 ECDD8AF6E794EFE08FF8E998F0E190F7E898F3E494EEDF8FF1E291F8E899FDED9FEFDF91F4E494 F3E395F2E294F3E395EFDF92F4E497F2E297F0E095F2E297F7E79EFDECA3F6E59DF5E49CF7E69E FCECA1FFEFA4FEEFA3F9E99CF3E396EBDB8EEDDD8FF9E99BFCEC9FEFDD91EBD98DF2E194F3E396 F1E194EDDF92EDE092F0E395F0E496F0E596F2E798F1E496F8EAA0FCEEA4F6E89FF3E59EF7E9A2 FAECA5F3E59BF7EA9DFCEFA0F4E997F0E190F1DF93DECC7DD8CA72E3D87CF7ED92F2E893FEF2A5 F8EBA3F8EAA2F4E497F2E18FF2E58CE3DC82E9DF88EDE491ECE394ECE195F4EA9DE6DD8FD7CC7C DDD47FCBC46AB8B056AAA2616B6536322C08898552ADAA75DADAA1E3E1A6F5F3B6FAF6B7F2EAAA EDE4A1FBEEACC7B9788F823DA49850D8CD82F6ED9FE1D889E3DA8DB9B168AEA763E4DC9DE8DFA5 F5ECB5D1C890534A134A4109D3C990F0E8AAE4DC9C9E9754CDC582FBF4ADBEB86EA9A258DED582 F7EB95ECE192EBE09DD8CE906F67289E9751EDE79AF9F3A0BEB463D4C97AE1D389BDB469E0D98B D0C875E1DA82E0D984DFD789E5DA9BC7BD88716A3DB0AC82615F34B8B7885D5B28CBCA96787645 B3B084706D434A46209C9871AEAB80767444757340A3A26A84814AA29B68BBB480F8F1BBDED7A1 D8D39CD4CF99ACA6738C86568983569891669F9970969063B2AC7AAEA775C2BB86D7D29BBDB780 817A44A29C65D9D39F77703E7E7746BCB581D5CD8EEAE29BFCF9ACDBD788CCC671E0D67DF7E792 E2D083F2E2A3D2C8995B59394D4929CABF8EF7EEB7EDE4AB80773D68612ABDB680B9B47DB3AE77 BAB480DED7A79992661A1600838053C7BD8163542449360C4B3F02948D40D5D188F0EDABE8E390 FFF7A2FAEEAAFBECA2FDF2A3F4E89BE8DC91F4E89EF1E59DF3E79FF7EBA2F9ECA3F6EA9EF7EC9C FBF0A0FBEBA7F6E7A2F9ECA3FAEDA1FAED9EFCF09EEEE28FEFE38FF3E894F1E694EFE391F1E594 F4E999F5EA9AF4E999F3E899F7EB9FFAEEA5F8ECA5F4E7A2F5E8A6F7E9A8F6E8A6F3E99EF8F09F F8EFA1F1E89DF2E8A0FBF1ABFAF0ABFBF1ACFBF1ABFAF0A9F8EEA6F8EEA6F2E8A1F6ECA6FEF4AD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F2 FFF0E1FFEEDDFBEED9F3EED1EEEECCEEEECCEEEECCEEEECCEEEECCEEEECCEFEECDF7EED5FEEEDC FFEFDEFFF3E6FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFEEEFFF5E5FBEFDAF2EED0EEEECCEEEECC EEEECCEEEECCEEEECCEEEECCEEEECCEEEECCF2EECFFAEFD9FFF3E4FFFDEDFFFFF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF7F8FFF0EEFFEFE6FBEAD3F2E2BBEEDCAFF0DFB5F8E8CCFFF2E6FFFCF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D5CB76DFD580E6DC87E0D681E0D681E0D681D3C974D6CC77D2C873DDD37EE0D681DED383DBD080 E2D787DACF7FD5CA7AD9CE7EDED383E3D888DED383E1D686EADF8EE9DF89E3DB7FDCD279D9CF76 D8CE77D7CD78E4D988E3D888D5C97DC6BA70C1B56CF4E89FEEE298F5E99DF6EA9FEDE292E8DD8D EDE293E4D986F4EA95FAF099F2E891EFE58CF2E891F2EA95EEE694ECE393EEE596F4E99CF8EDA0 FDF1A2EFE293F1E591F1E28DE8DA82F5E895F1E697F3E899F4E999EDE292E1D686E9DE8DF0E593 EFE590EBE18CEBE18CEDE38FF0E595F6EB9CF0E596E5DA8BE7DC8DEEE395E9DD8FE6DA8FEEE297 F0E49BEADE95F2E69DF2E99EEFE69CEEE59BEFE69CF2E8A0F4EAA3F0E69FECE29CF6ECA6F7EDA8 F3E9A4FAECA7F6E6A1F8EAA4F7E9A1F2E69BF0E49AF0E49BF0E59DF0E6A1F2E7A6F4E9ABF5EAAC F7EAA1F0E18FE7D885DECF7EF0E090EFE091F6E699F1E195EDDD91F0DF94F5E59BFAE99FEADA8C F3E491F6E795F9EA9AFCED9DF7E898F8E89AF4E497F6E69AFAEA9EF8E89CF2E297FBEAA2F2E199 F3E29AFAEA9FFCECA1F9E99DF5E598F2E295EADA8DE5D587E9D98BF2E193F4E295F4E396FBEA9D F9E99CF9E99CF0E294EBDE90EBDE91EEE294F1E598F1E598F3E59BF5E79FF5E7A0F3E59FF3E4A0 F5E6A2ECDD99F4E69FF1E39AEEE093F2E597F6E99AEDDE91F2E495E0D47FDBCF77D8CE75DFD581 EFE495F5E89DF2E59AF1E295EFE291EDDF8DEBE48DECE591EEE696E4DB8FDAD187DAD188D9D087 E3DB90E6DE91CFC775DCD584C2BA803E360F6F683C97936484814F7E7D4696945C8E8C4FAFAB6D E9E4A5E7E0A0EEE5A6ECDE9DEBDC9BC7B975A0944CB3A85DDFD587ECE294EFE499D7CF85988D47 EFE5A3E1D799F2E9B0C9C088443B1069602CF7F0B6FBF4B7D1C88AB3AA6BEEE7A3E7E09A9F9850 CAC272E9DE88EADF90EAE099EAE19FA39B5C645C19D9D389F0E99CC3B96BB7AC5EEBDD93D7CB84 F2E99FD2C977E3DC83E4DD85E8E190E8DF99CEC68E696235A39E77807B577B78538E8C63908D64 B1AE88615D39726E4BB4B08E726E4B504E27656339939163979564C3BF8DD8CFA1BEB688A9A173 948C5D7B7545767045746F47847F5CA09C7DA9A489A49F858F8A65BAB585CAC595B6B181807B49 5A55226F6A37817D493A36074F4A266C6737625D297067289A924CD1CC82F4F2A0E2DE83D4CB6B F5E684E6D479EBD98DE0D39C746B48322C0BACA176E9E0AAECE4A7BCB3784A420D89814FB3AB77 AAA468B5B174BEB97ED5CF9D4D472A37330AEAE0A6DBCB9AD6C69AA093543E37007F7B34E5E0A4 EDE79BEEE292FCEAA6F1E398F9EE9EF5E99BFAEEA2FEF4ABF8ECA4F5E9A1F8ECA3F8ECA2F3E79B F1E698F4E89CF9EAA4F8EAA3FFF5AEFFF8AFFCEFA3F6E99BF6E99AF4E897F9EC9CF7EB9AF6EA99 F8EC9CF8ED9DF8EE9EF7EC9EF7EB9FFAEEA5FEF2ACFDF0ADF8EAA9F9EBACFBEDB1F9EBAEF5EAA2 FDF4A5FDF4A7F0E69EEEE39CF0E6A1F2E8A4F5EBA7F7EDA9F6ECA5F5EBA4F7EDA5F6ECA4F5EBA2 FCF2A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFCF9FDFBF6FCFBF5FBFBF4FBFBF4FBFCF5 FDEFDDFFE1C1FFDFBDF8E1B8E9E1ABE0E1A3E1E1A4E1E1A4E1E1A4E1E1A4E1E1A4E3E1A6F0E1B3 FDE0BFFFDFC1FEE5CCFCF7EDFBFBF4FBFCF5FBFBF4FCFBF5FEFCF7FFFDFBFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFFCFDFDF8FCFCF5FBFBF4FBFBF4FBFBF4FDFCE9FFF9D9FFEBC9F7E2B9E8E1AAE0E1A3 E1E1A4E1E1A4E1E1A4E1E1A4E1E1A4E1E1A4E0E1A3E7E1A9F6E2B7FFE9C7FFF8D8FDFBE7FCFBF4 FBFBF5FDFBF5FEFCF8FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEF0EDFDDFD5FEDABDF4D19AE4C476DCBD63E0C16DEFCE90FCDEBBFEF4E8 FFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDFD580E1D782E1D782E3D984E9DF8AEDE38ED4CA75D4CA75D5CB76E7DD88E8DE8AE5DA8A E0D585D9CE7ED4C979D9CE7EE1D686E7DC8CE6DB8BE1D686E5DA8AE8DD8DE4DA83E1D87BDCD378 D1C76DC9BF68CDC36DE5DA89C2B76794883CACA056AEA25BF2E69DE3D78CECE094E7DB8FE7DC8D F0E596E7DC8CF1E794E8DE89EFE58EEFE58EECE28AF4EA93F4EC98F4EC9AF6EE9DF3EB9CEFE397 EADE92F8EC9DF6E99AE5D884F4E590EEE088F1E592F3E799F4E99AF5EA9AF3E898E7DC8CE8DD8B ECE18FEDE38EEAE08BE8DE89E8DD8AF4E999F8ED9FF0E596E6DB8DEADE90EEE296ECE096E0D48A EADE94F7EBA3EEE29AF0E49CF0E89CEFE59CEDE39BE9DF97EAE099F1E7A0ECE29BEDE39EFEF4AF FBF1ACF0E6A1F5E9A0F9EB9CF4E799EFE392EDE190EFE392F0E596F1E697EEE59CF0E6A0EFE4A2 ECE1A1E9DC92F3E493DECF7DC2B364E6D688F0DF93FBEB9FF6E59CF1E099F1E09AF3E29CF5E49D EFDF91E6D784F3E491F7E898EEDF8EF8E997FCEC9EF0E092F0E093FCECA0FEEFA2F8E89CF5E39C EEDD95EBDA92EEDE93F1E196F0E095EEDE91F4E497F9E99CF5E597E6D688E4D385F0DF91F6E597 FBEA9DF5E598F5E598F7E99BF7EA9CF6E89DF0E498EFE397F3E79DFBEDA6F0E29BEDDE99FAEBA7 FEEFADF5E6A5F3E4A1F8E9A5EEE099F2E49AFCEEA2EBDE90FCEFA1F1E496EADE8BF0E691CAC06A D8CE79DED382EFE495E9DD91EBDD92ECDE94E0D587E1DA8BE6DF92EEE69DE4DC97DAD18FE5DC9A F8EFADF1E8A6D9D08CC0B771C1BA71726A3538300B655D36A59E71C4C090C9C590B9B57BA4A163 625E1F5955168A8647DFD89AEBDFA1F0E0A1E1D291EADD96C3B76E978B3FEBDF92FAEEA1EDE196 C3B76C9E924AFBF1ADECE3A8F6EDB5C3BA83322901887F45FAF2B9F4EBB0B1A96ABBB373E8E19C CEC780C7BE6FE4D884F1E697E2D88EDAD18CBFB7744F470EC7C07BF5EDA6E7DC919C9044D3C57B D6C983F1E49DCBC272E8E189E4DD84D6D17EEDE69EDCD69C746D3F7D785298926F74704D9B9875 72704D545130706D4D9390715F5C3B605D3B7E7C56AEAC84C0C09293926266623352471D4A4116 322900635B30655E3666623D6C67467571545B58413D3A285854438581604440134E4A1D8D895A B1AC7DD8D4A4AFAB7B8E8A5A504C1C807C4CD2CE9ED8D49FE3D99C887E3C7A732FD6D386D9D47C E2D977E6D66FECD977EDD885F5E4A9998B673C3115837750EDE4ADE7DF9FDFD79761572473683A D3C997B8B06FC0BC74C2BD7AE7DEA9716A411611009F965AEBDCA8FFF3C4EADD9A8F8741454000 8C864FECE59CEEE393EEDC97FEF0A3F8ED9BF6EB9AFFF5A6F5E89DFBF3ABF8ECA4F6EAA1F9EDA3 FDF1A5FCF1A3F6EA9EFEF3ADF4E59FF5E7A0F9EBA2F7E99FF5E79BFAECA1EFE195F5E89AFBEEA0 F8EB9DF4E99AF1E598F3E79BF4E89EF6EAA1FBEEA8FEF1AEFFF3B3FFF1B4F9EAAEF8E9AEFCEDB4 FCF1ACFBF2A3F8F0A3FBF1A9FDF4ADEDE39EEDE3A0F6EBA9FEF4AFFDF3AEF9EFA8F9EFA7FDF4A9 F6EDA2F8EFA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F4FEECD8F5E6C2E8E6B6E6E6B4E6E6B5 E6E7B5F1E1B3FDDCB4FFE7C1FCF1CDF5F2D4F1F2D7F2F2D7F2F2D7F2F2D7F2F2D7F1F2D6F2F2D7 F8F2DEFEEEDFFFE2D4F9DCC5EAE5B9E7E6B5E6E6B5E6E6B4EDE6BBFAE8CBFFF1E5FFFEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFBFEFFEBF3F4D0E8E8B8E6E6B4E6E6B5E7E6B5F1E6BAFDE8C0FFEEC7FCF1CEF5F2D4 F1F2D7F2F2D7F2F2D7F2F2D7F2F2D7F2F2D7F2F2D7F1F2D7F4F2D5FBF1CFFFEEC8FEE8C1F3E6BA E7E6B5E5E6B4EEE6BCFAE8CCFFF2E6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCEFDFF6DAB0EDC06CE3BC59DCC66AD8CD79DAC971E1BE5DEBBE63 FBDEB8FFF1E5FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE5DB86DCD27DDAD07BE0D681C1B762B7AD58EEE48FD7CD78DFD580D7CD78DFD581 DBD080E4D989E0D585D3C878D7CC7CDFD484E7DC8CEEE393DFD484D8CD7DE1D686DDD37DE0D67C DFD57CCEC46DC3B963CBC16CD8CD7CDDD282E8DC90EBDF95EADE93F0E49AE0D488EDE195F5E99D EDE293E9DE8EEFE494F1E693F7ED98F5EB94EEE48DEFE58CF4EA93EAE28EF6EE9DF6ED9DF3EA9B F5E99DF4E79BF6E99AF6E99BF1E591F1E28DF5E890F4E895F2E697EFE495F2E797F8ED9DEFE494 E7DC8AF1E694F0E691F2E893EFE590EFE591EEE393EBE091ECE192F0E596EFE395E8DC90EDE197 EADE94F6EA9FB8AC64DED28AF1E79FE8DF94F2E99DEDE599E8DF94EBE198EBE199E6DC95E8DE97 F1E7A0EFE5A0EAE09BEFE398F1E48DF1E28CEDDF86C7BB61CEC36AF8ED97F4E995FBF0A1F6EBA0 EAE098F2E8A1F4E79BEDE192F2E597F4E799EADE90EBDD92EEE097F1E39DF1E39DF4E5A0F8E9A5 F5E7A1EFDF91F2E390F5E692EEDF8EEBDC8BF3E493F5E597FBEB9DF1E193EEDE91FAE99CFEF0A4 F2E199F5E49CF0DF97ECDC91F2E297F8E89DF2E295F8E89BF6E699F9E99BFDED9FFAE99BE2D183 EFDE90F7E799FFF1A4F9E99CF5E69BF3E59AF7E9A0FAEEA4FAEEA5F7EBA4F1E59DF8EBA5F9ECA6 F7EBA6F8E9A9F2E4A3F2E4A3F7EAA5FDF1A9FBEFA5F5EA9CF3E899FDF2A3EDE294F2E798F9EE9F F5E998F1E593F3E795FAEE9EF9EEA0F6EAA2EBDE99EBE29EE8E09CEEE8A5F6EEAFD9D193B9B073 A39A6181783E6E652A564E114B4306443B063C330C4B431D5F562D756C3E98925FBBB57DEEE8AC E1DD9DEDE9AABFBB7C8D894A757133B8AD6FE6D899EEE1A0F1E4A0FAEDA6C5B96D978B3FD4C87A EADF90EDE093C0B266B8AC64EFE6A8F2E9AEEDE4AB9B9258140B00AAA165ECE3A9DDD597B8B071 E3DB96E5DE97B4AA5DEEE291EADF8FE9E093DFD78EC3BC777E7634A59D5DF8EFACF3E6A1BEB268 BEAF65DECF8AD6C983DACF81E3DB86E7E18AE8E393E4DD98C9C38C7D7649766E49706A465D5835 6C684547431F736F4B8B85657E7959746F4F66623E6B6740605D33605D305F5D2D7B7648A0946C B7AE85BBB2889E976D69623A615C37544F307A765B5C59435A5745110D035651319793669F9B6E C3BF92F5F5CB959163817D4E9894644F4B1B7F7C488E8B58DCD6A1DED195E4D7997E753775702E F2EC9EDAD176E4D670EDD977F0DB88ECDA9FD4C4A453452B80744DE7DEA4ECE59FE7DF9C695F2E 5C5027D1C695A8A15AC0BA69B5AF62C5BB819F976F312C0871682CF0E2AAEBDAA5F6EAA5F3ECA4 6D672A524C1BB3AB66F5E99AF4E29CF1E395F4EA95F5EA99F3E899F7EB9FFDF1A7FDF1A9FCF0A7 F3E79EF4E89CFBF0A2F8ECA0F8ECA3F1E59DF5E9A1F5E9A1F8ECA4FFF6ADFAEEA5F8EDA3F7EB9F F7EC9EFBEFA3FAEEA2F3E99EF8EFA4FCF2AAFAF0A9F5EAA6F4E9A7F0E5A5F5EAACFDF1B6F3E7AD F5E9AFFCF2ADFCF3A6FCF3A8F9EFA6F7EDA7FAEFACFCF1AFFFF6B4FEF4B0FDF3AEFEF4ADF4EAA3 FEF5AAF8EFA4F4EBA0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFF7FAFAECF6F6E2F5F6E2F8F1D8FCE9C7F5E5BAE8E6B3E5E6B2 E6E6B2E5E6B2F0E5BBFDE7C9FFF4D9FFFDE8FEFEF5FEFEFCFEFEFBFEFEFBFEFEFBFEFEFBFEFEFB FEFEFCFEFFFDFFFAF9FEEDEBF8E4D6E9E5BAE6E6B2E6E6B2E5E6B1EDE5B6F9E6BFFCECCFF6F4DE F5F5E1F7F5E5FDF5F2FFFAFAFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1 F5F5E2F5F5E1F9F5DCFCF4D2F3EEC3E7E7B5E5E5B1E6E6B2E6E6B2F1E5BCFDE8CBFFF5DAFFFDE9 FEFEF6FEFEFCFEFEFBFEFEFBFEFEFBFEFEFBFEFEFBFEFEFBFEFEFCFEFEF7FFFDEAFFF7DCFEE9CD F2E6BEE6E6B3E5E6B1EEE5B9FAE6C8FFEDDBFEF4E7F9F5E5F7F5E4FDF5EAFFFAF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFF7F7E8BEEDCD7FE8B95BE5C16BE5D897E4E6B2E4DFA2E5C772 E9B752F2C77EF9E1B7FEFAECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE5DB86DAD07BE4DA85E1D782988E39A19742EAE08BEAE08BE0D681D3C974 E6DC88DED384DCD181DFD484DCD181D7CC7CD9CE7EE0D585E4D989E1D686E1D686E2D787E3D984 E5DB83E4DA83DFD57FD7CC79CFC472CDC272DED383DFD485DFD486F0E497EFE396E8DC90E9DD91 EBDF93EEE394ECE192E7DC8DF4E997F7ED98F7ED96F2E891ECE28AEAE089E7E08BF3EB9AF4EC9C F5EC9DFBEFA3FAEEA2F8EB9CF2E596F1E490F0E08CF6E890F9ED9AF1E697EFE495F1E696F4E999 EBE090E0D584EDE290F2E893F7ED98F0E691EBE18DF0E594ECE192E9DE8EE8DD8EE6DB8CE2D789 E1D588F8EBA1C6BA6F74681FB4A75EF1EAA2E8DF92F2E99CEFE69AECE397EEE598EDE49AF0E79D EEE59DF3E9A2F2E8A1F1E7A1F6EA9CF4E68CEFE186E4D67BD1C468D8CC71F5EA90F6EB94F8EE9A F3E999EADF93F1E69CF7EA9FF4E798EDDF93ECDF92F4E69AF2E49AEFE198F3E59DF3E49FF3E59F F3E59FEADC95ECDC8EF0E18FF7E896F5E596F2E293F9EA9AF2E294F3E395EDDD91EEDE92F7E79B FAEA9FEFDE96F1E098EDDD94E8D88DEADA8FEDDD92EDDD90F6E699F5E597F6E698F5E597F6E597 E7D687F0DF91F4E496F9E99CF0E095FAECA1FCEEA4F9EBA3F5E9A2F5E9A2F7EAA4F3E7A0F6E9A2 F6E9A3F7EAA6F6E8A6EADB9BEADD9AF3E6A1FBEFA8FDF1A7F6EB9DF0E495F4EC9EECE298F0E59C F3E79FF0E398F0E394F3E796EBE08EFEF3A5F5EAA3ECE1A3F2E8ACF9F0B3DED89B918750504516 473D066157248177419F945CBEB37BD0C68ED4CA91D2C898D1C79BC3B98BA4996680763D6A6125 6158197B7434B7B272E5E1A2FFFDBFCBC98C9E94577D7335CBC181EADD9CEDE39DF7ECA4D2C77E 908439D0C577F8EB9EF4E899BEB369CFC785F2EAABE1D99CF1E8AF6B622C3A310CE2D99DF4EAB0 D6CF8ED7D08BF4EDA5C9C073E7DA8BEAE090EFE696EBE396D7D189827A3A847B3FF6ECAFF4E7A6 C7BA73B4A65BF5E7A1E7D892DED285EAE290ECE695E3DF93E8E2A497915C686235665F375D562E AFA980868057AAA47C9F9B747A744D6E6841635F358580568E885CA9A578D2CE9ED6D1A1D7D1A2 B1A77B8980549B9366A39A6F958F63B4AD857C7751534E2D615D3F5C583F98937BB3AE8AD4CF9F E9E4B67F7A4C827C4EC1BC8EA7A2737C77479E9A66C8C48D625E27DAD499E6D798FCEDB0D1C68E 6A6029B9B06FEFE695EADE7FEDDD7CF2E18CF2E0A5EADBBB584B33726743E8E0A1DED88BEDE69E 8E8253463914DDD1A2D5CD83CBC46CAFA855C4B97EBDB48C423D166D6425F3E6A9EFDEA4EDE297 EAE39AB3AD724A4315A19A56F1E595F9EAA0EFE391EFE58EF2E893F5EA9AF4E99BF5E99DEEE299 F7EBA1FAEEA4FCF0A4F9EEA1EEE296F2E69CF8ECA3FFF8B0FFF8B1FDF0A9FDF0A9FEF1ACFDF0A9 FBEFA6F9EDA3F8ECA1F8ECA3F7EEA6FAF1A9FDF3ADFCF3AEF9EFADF8EEADE7DD9DE0D697FAF0B3 FFFABDFAEFB2FCF2ACFDF4A7FBF1A8FAF0A9FCF1ADFEF4B2FFF5B4FEF5B4F9EEADF7EDA7FBF1AC F9EFA7FBF1A9F8EFA4F8EFA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFEFEFEFBFEFEF5FEFDE5F2F2CAE6E6B2E4E4AEEDEAB9F9F2CCFCF7DBF7F6E3 F6F6E4F6F6E3F6F6E3FAF6E7FEF7EDFFFCF3FFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFFFFF9FAFDF6F2F7F6E7F6F6E4F6F6E3F6F6E4F9F6DFFCF5D5F5EFC4 E7E6B2E5E5B0EAE5B9FAE4D8FEEEECFEFBF9FEFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFEFEFCFDFDF8 F1F1D5E6E6B2E4E5AFEEE5B5FAE6BFFCEDD2F7F5E2F6F6E4F6F6E3F6F6E3FAF6E8FEF7EEFFFCF3 FFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FFFDF4 FFF7EEFAF6E8F6F6E4F6F6E3F9F6E7FDF5E9FFEEDEFBE6C9EFE5BAEAE5B5FBE5C5FEF0DFFEFCF7 FEFEFDFFFEFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FEFCE2F0DA92E5B950EEC281F5D8B8F7EED9F6F9E9F6F3DE F6DFB4F3C981E7B54EEECF80FBF4CFFFFFF5FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDBD17CDED47FDBD17CE5DB86E6DC87DFD580E7DD88E1D782E0D681 D9CF7AE8DE89DACF7FD6CB7BDED383DFD484D9CE7ED7CC7CE8DD8DF4E999E1D686D2C777DED383 DFD483DACF7DDED481E3D986E3D785DBD07ED6CB7AE1D686DDD281DACF7FE6DB8BE2D786EFE397 EADE92EADE92EEE394EEE394E7DC8DF6EB98F5EB96F5EB94F3E992EDE38AE7DD86EEE692F5ED9C F2EA99EFE697F3E79BF2E69AF0E394F1E495FCEF9BF4E591EFE189F0E390EDE193EDE293F1E696 F7EC9CF0E595EADF8EF3E896EDE38DEEE48FECE28DEDE38EECE18FEBE08FECE192EDE292EADF8F E8DD8DE5DA8BE4D98AE4D88BECE094ECE095EBDF93EFE697F3EB9BEFE697EEE597F4EB9DF5EC9F F2E99CECE398E8DF94E7DE93E9DF97EEE194F4E58FF1E18AE6D77EE6D87FE9DB82F1E48DEFE28C F2E796F0E595E6DA8EE9DD93ECDE95F6E89CF7E99EF3E59AF9EBA0EBDD95E3D58CE8DA91EBDD94 EEE097F2E49BECDE94EADA8CEEDE8EF6E698F7E799F3E394F7E79AF8E89BF5E59AF3E398F7E79C FCECA3FDECA4F1E098F7E69EF7E79EF6E69BF5E59AF5E59AF2E295F8E89BF6E698F6E698F6E698 F2E293DFCE7EECDB8DF1E193F8E89BF4E499F6E89EF5E79EF4E69FF2E59FF3E6A0F9ECA6ECE098 F2E59EF5E8A2F7EAA6FCEFABFAEDA9FAEDA9F6E9A3F2E69CF2E699F4E999F2E999EFE79DF2E8A2 F4E9A6F6E8A8F7E8A4F9ECA2F0E493F1E593F2E799E7DD9AF3E8B1E8DCA7968C513E3304554A12 91864FC9BE86E5DBA0DAD093D6CC90DDD397E5DA9EECE2A6E6DAA7E5D9A9F1E5B1F5E9B1EEE0A3 E7DA9ADCD28E887F3A504806585313AAA668E8E5A8EFE9ADC2B97B706829B7AF6DF1E8A5D1C782 F0E69FDDD28A867A30DACE83F0E498EBE2979F9751E8E09EF8F0B1EAE1A5E3D9A0403708706737 F9F1B3E4DD9CC6BF78F8F2A8CBC175DED183F2E797F2EA97E7E090DFD98F82793B675E27FFF4BD F7EAAED3C67FB8AA5DFCECA3E6D690D7CB80E4DB8EE9E499E2DF9CDCD79F756F3E6962356B6436 989161615A26463E0E605928625C2B8C8453CBC393D7D1A0DBD5A1DED7A4CFC995B0AA76827B47 736B3BA39B6DD8D0A1FFF9C9ECE4B3948E5B4842116963338E875BB8B187E1D9B3B3AB87F8F0C5 958F5E857E4D776F40A09A6ABAB3848981538F8954C7C28BECE6AD4F4B0ECAC384F6E59FECDC9A EDE2AA968C5B90894EE0D890E7DA82E9DB7CF4E590F1E4A7F1E6C2443A1F5C522DEAE3A1E7E18F F9F3A6B9AC7E392A0AD6C99ED9D083CDC669CFC86FDED297E0D5AE4F4A22605816F2E5A3F1E2A2 EADF92E9E299DCD69B473F13827B37DBCF7FF4E397EDE08BECE289F2E890FAEF9DFAEFA0F5E99C F7EBA1F6EAA0F4E89EF5E99DF6EA9EF2E69AFFF3A9FEF2A9FEF3ABFEF1ACFCEFABFCEFABF8EBA8 FBEEAAFDF0AAFCF0A9FBEFA5F7EEA6F9F0ACF9F0ADFAF1AEFBF2AFFBF2AFFDF6B3FEF5B2FBF2B2 FEF5B5F8EFAEF5ECABF8EEA8F7EEA3F7EDA5F9EFAAFCF2ADFDF2B0FBF0B0F9EEAEF4E9A6F0E5A3 F3E9A4F7EDA6F4EAA2F4EBA0F7EEA3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFBFDFDEEF6F6DDF4F0D0FCF0CBF4ECC1E9E8B9E6E7B6EEEFC6FAFBE1FFFFF7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFEE F5F6D5E9EABCE8E7B8ECE5BBFBDBC6F9E3CDF3EFD5F9FAE5FFFFF4FFFFFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8F5F5E1F0F0D2 F0F0D2ECECC5E8E8B9E7E7B7EFE7BFFBE9CFFFF3E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5EBFCE9D0F1E7C0ECE7B9FBE8BFF8EBC9 F3F0D3F9F0DCFFF4EAFFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9EAF3E7B4E6C86CDFB245F3D2A9FFEEEFFFFCFFFFFFFF FFFFFFFFF3E8F9DEB7E1B44AE3C05CEFDF9FFAF5DDFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD17CE5DB86D7CD78DBD17CE5DB86E1D782DAD07BE1D782 E2D883DBD17CDFD580DACF7FDACF7FE1D686E0D585E0D585E1D686E1D686E6DB8BDCD181D4C979 E0D585DDD282DCD181E2D788E3D888E3D888E9DE8FE8DD8BE0D582E0D682E3D885DFD57FE2D883 ECE192EFE398F1E499EEE394EDE292EEE393F4EA97F1E792F0E68FF0E68FEFE58DEEE48DF5ED99 FAF2A0F4EC9BF0E798F4E99CF4E89BEDE091EDE091F5E894F1E28DE9DB83EBDF8CF1E596F0E596 F1E696F6EB9BF2E797F1E695F5EA98E9DF8AEDE38EECE28DE7DD88E5DB86E9DF8AEFE491EEE391 E9DE8CE5DA89ECE191E9DE8DDED383EDE293F0E497F5EA9BF3EC9AF4EC9AEEE695EFE796F7EE9E F7EF9FF0E797EDE496E8DF91EAE193F0E79BF2E599F7E699F6E597EEDD8CF3E292E9DA89EADC8B F2E696FBEDA1FCEFA6F0E49DEEE19CF0E39BFAEFA5F5E99FE3D78EEBDF95EFE497E6DA8EE7DC8F E6DA8EEBDF92F3E89BF4E89AF0E093F1E194F8E89BF9E99CF3E397F5E59AF5E59BF1E098F2E199 F4E39CF5E49EF7E69EF2E199F8E79FFBEAA1F9E99EF7E79CF6E69BF9E99CF8E89BF1E193F2E294 F7E799F7E697E3D282EEDD8FF0DF92F3E396F0E095F1E299F3E59EF7E8A3F6E8A4F4E7A3F5E8A4 F4EAA2FCF3A8F8EEA6EDE39CEEE59DF4EAA3FCF2ABF5EBA4F1E89DF3EA9CF6EE9EF6EE9EEAE399 F1E9A5F3E9ABF6E7ACF9EAAAFCEBA5F0E292E7DB8BE9DE93FAF1B2C9BD8B7064383E33009A8E52 FCF1B4E2D798D0C585E9DE9CE7DD99E4D995EBE19CE4DA95DDD28EF6EBAFF3E6AFECDFA3EEE0A1 EFDF9BF5E69FF7E8A0F1E49DEBE29D827C3C46420E727034BFBB7DFAF8BBCCC787726D2DB7B06F F0E8A6E6DD9BF8EEA9D6CC848F853DEFE39ADFD68BB8B168BFB870FBF5B4E5DC9EFEFAC1B4AA74 271E00C9C183F3EBA8AFA860D1CB7FC9BF73CCBE73F6EC9BF3EC98E4DD8BECE59B90884A7A703C FFF8C6EFE0A7CCC07ACDC071F5E599F1E098EFE299EDE39BEDE7A4FAF5BBC4BF8E7D794C413D11 4C46136761275C5718989256A79F64C7C185EAE1A6EDE4A9E5DEA2D4CC919C9359766E36918950 CDC48CE5DDA7EAE4AFD4CD9988814B5A541B7D773B969054B5AD74E1D9A0BBB27BE3D8A2C1B683 8F84509D96617E7541E8DFACC5BC8B544B18C0B682756D37E0DA9FFFFABB615B1ABEB770EBD987 ECDB8FF5E8ACC7BE8D6A632FE6DF9DE9DE8AE2D97AEBE188ECE3A0EFE7BD423D1C5E562CE7E29B E5E489EEE997CDC0923A2A0BC3B48BEBE090EFE684FEF499F9EAB0ECE0BA555027605814F3E8A0 F6E8A2F5EB99F5EEA1DBD59A625B307A722FDDD280FAEC9DF0E48CEDE489F0E68EF5EA98F4E999 EDE294FFF4AAF9ECA2F5E99FF4E89FF4E89DF5E99DFBF2A5F9F0A7F5ECA4F6ECA6F9EEACF9EEAD F4EAA9F8EDABFAF0ABF9EFA8F6EDA2F4EBA4F7EEADF7EEADF7EEADF8EFAEF9F0ADF7EEABF6EDA8 FAF1ADF9F0AAF6EDA7FCF4ADF8EFA6F5ECA1F9EFA7FEF4AFFFF6B1FBF0B0FFF4B4FFF5B5FFF5B4 FCF1AFF8EEA9FDF3ADF6ECA5F7ECA5F9EEA7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCFCFCF5FDFDE8F7F7D0EBEAB6E8E0AAFBE2BDFDEEDAFCFBF3FCFCF6FDFDF7FEFEFB FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFCFEFEF9FCFCF6FCFBF5FCF6EBFFE4CAF3DFB5E7E3ABF2F1C3FDFBDEFDFCEFFDFDF9FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFCF9FEFDF9F7F7E5E9E9BD E0E0A1E2E2A8EFEFCEFBFBF3FCFCF6FDFCF6FEFCF8FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFFCF9FDFCF6FDFCF0FEFCDF F2F0C3E6E3ABF3E0B2FDE8CCFDF5E8FDFEFAFFFFFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFAF7ECD5E3C575DEBB5EE1C16FF4E5C6FEFBF8FFFFFF FFFFFFFFFFFFFFFCFAF9F0DCE5C87CDEBA5DE0C068F1E0B7FEFAF6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD07BD9CF7ADBD17CE7DD88DCD27DE2D883E2D882 DFD580D3C974DBD17CE4D985E0D585DFD484E3D888E2D787E5DA8AECE191E2D787D4C979DDD282 E0D585D6CB7BD9CD7FE3D88BE9DD92E4D88BE2D788E9DE8EE9DE8DE3D984E2D882E6DC86E7DD85 E9DF88E8DD8DF0E498F4E89CF0E596EDE293F0E596EFE592F2E893F2E891EFE58EEFE58CF1E790 F3EB97F8F09FF4EB9BF3EA9BFBF0A3FCF0A4FBED9FF7EA9BF0E38FF5E692F4E58DF0E390F7EB9D F2E798EDE292F0E595EFE494F1E694F0E593E5DB85F1E792F3E994E1D782E9DF88EFE58EF2E891 F0E692ECE28EECE28EE8DC8BF7EC9BE7DC8AE5DA8AF8EE9EF8ED9DEDE692F1EA95EFE793F0E894 F1E997EDE592EBE392EEE695EBE392F0E798F6ED9EF6E99DFAE8A2F7E49EF4E19AF6E49BE6D58C E8D78EF1E19AF6E8A2F9EAA6F1E3A0F0E2A4E9DB97F0E49BF9EDA4F2E69DEBDF95E8DC90EDE193 EEE294EBE091ECE192F3E897F1E797F8E79AF5E599FAEA9EFBEBA0F7E69DF8E89FF7E69FF5E49E F8E7A1F4E39EF1E09BF8E6A0F8E69FFAE8A1FCEBA3FBEBA0F7E79CF4E498F8E89BF6E699EDDD90 EEDE90F3E395F2E293DFCE7EEDDC8DF1E093F7E79AF8E89EF8E9A1F9EBA4FDEEA9F8EAA6F0E2A1 EFE19FF1E79EF7EEA1F5EBA1F1E79FF5EBA3F7EDA5EAE098E8DE95EBE295F1E899F3EB99EDE695 F4EEA6F9F0B1F7EDB4FAEBB5FDEBB1F8E6A2F4E597ECDF8FFBF2A8CBC1844135152F2402C7BA7B FFFAB8E2D692E8DC95EEE39AD4C97DE0D688D7CC7EDED385D2C87AC8BD6EE3D791DDCF91E0D190 EEDE99EEDC93EFDD92F7E69AE1D288E1D791EAE1A1D7D294726E302D2B08BEBC7AFFFEBED1CD8D 7A7535BBB674EFE7A5DFD693F7EEA8A79E58CCC27AFCF3A9EAE398A39C54D4CD88FFF9BBE5DCA1 EEE4AA554C216A6222F0E9A4BFB96EBCB668E2D98CCEC077F5EB9AEBE38ED8D27DE6E094776F33 8B814FFFF9C9FDEEB7D3C680DDD080FEECA0EDDD93EDDF96FBF1ABE8E1A4C8C28F69653A231E05 514D207E7842B2AD6CD7D289E9E09AEAE19DEDE59FCDC480A09754A8A05DA79E5BB5AC6CD6CD8D F3E9ACF4EAADBEB57C6C6730605B22888347BEB979E6DF9FF5EEABDCD48EBFB570DBD18D988B49 83763682773BD8CD96E8DDA6A397637F74409B905B8A804A867D45FFF9BCEDE4A279712AA59B4F FDF192ECDA82F5E7A7EBE1B0716A38E4DE9FEEE793E2DA7BE2DC80E8E399D8D6A33F3B165F5732 DFDC8FD7D776E9E58FE1D5A646371ABFAF89F1E695EFE781F3E98CF0E0A8DBD0AB555126706821 FAEFA3F6E89EF6ED97FCF5A7E4DEA37D754B7A722FF0E691FAED99FAEE95F8EF93F6EC94F4EA95 F5EA99F7EC9CF9EDA3F6EAA0FBEFA5FDF1A7F5E99EF3E79BF3EA9DF8EFA5F7EDA5FAF0ABFDF3B2 F9EEAEF9EEAFFAEFAFFAEFADF8EEA7F4EAA2F3E9A4F8EEB0F9EFB1FAF0B1FAF1B0FAF1AEFBF2AE F8EFA8F3EBA4FAF2A9FFF9AEFEF6ACFBF2A7F8EFA5F8EEA6FEF4AFFFF7B3FEF3B4FEF3B4FDF3B4 FFF6B6FDF2B0F6EBA8FBF1ACFEF6AFFDF3ACFCF2ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8E8EEEECAEAEAB8EBECB8EEEEC5F3EFD3FDEFDDFFF7EFFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFFF3E6F8F0D9F2EFCFF9EDC9FAEBC5F1EBC4F1F1D5 FCFCF8FFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEFDEDDAF4EAC9EDECC5 EEEECAEFEFCEF0F0D1F7F7E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC FFFFF2F8F8E2F2F0D1FAEFCCF9EEC8F1EDC6F2F2D1FDFDE8FFFFF5FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFEF0EDF6DABBE0B550E4C371F0DFB5FAF5E8FFFEFD FFFFFFFFFFFFFFFFFFFFFFFEFCFAEFF3E7B7E7CA75E0B54DEFCD97FDECE6FFFAFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3C975F3E994EADF8DD8CD7AE3D984DFD481 E2D785E7DD88DFD581DED381D6CB79E5DA8ADBD080DED382E0D583E0D583E1D684D9CE7CD9CE7E E8DD8CE8DD8EDFD485DBCF82DDD187E2D68BE1D589DED384DFD485E1D685E9DF8AE0D680DDD37C ECE28BE4DA83E6DB8CECE096F1E59AF2E798EFE495EDE290ECE18EF5EB95F6EC95EFE58EECE28B EEE48DF0E895F4EC9BEFE796EEE596F7EB9FF7EB9FF4E99BFAED9EEFE390F5E993EEE28CE4D986 F4E999EEE394E9DE8EEEE393F2E797F7EC9BEFE492DACF7CEADF8CF6EC97E9DF8CE6DC87E8DE89 EADF8AE9DD89ECE28DF3E894FFF6A2DED37FE0D583EDE091F1E596EBE090E8DD8CF0E593F4E997 F3E997EDE392E0D887F6EE9DF9F1A1F4EB9CF6EDA0F6EDA2F3E69FF7E6A6F4E2A0F5E4A1FAE9A3 EEE099F0E299EFE19AF0E19CF2E4A0EEE09FF2E4A5F3E5A3EBE19AEDE19BEFE39CEDE197F2E69B E9DD91EADF90EBE091EDE293F1E697EDE092F4E69DF0E199F3E59CF8E79FF6E69EF7E9A0F5E59D F7E79FF9EBA2F2E19BEDDD97F5E7A0EFE094F2E395F4E799F8E99EF7E79CF3E59AF7E99CF8E89D EFE194EEE091F1E194F4E595E8D988F3E493F2E293F2E597F2E296F4E69CF7E9A0FAEBA5F3E59F ECDF9BEDDF9BF4EB9FF5EC9FF5ECA2FFF5AEFFF8B2F4EAA4F5EBA4ECE399E7DE91EDE495F4EB9B F3EA9DFAF2AAFBF2B0F5EAACF5E6ABF3E3A6E8D996EDDF94E9DD93DCD28E594F26201800CEC48F F7EAA8F0E39DF4E7A1D9CD84ADA155988C3FA99E4EB4A758CDC171C6BA68B8AC5AD0C37BC3B471 C2B36DD6C57EE1CF84EDDB90F6E49AE2D28AEBDE97E6DB99EDE3A6EAE4A58C88404F4D0DAAA665 FAF4B8BAB47B746B30D8D091F0E7A5DCD38ED6CD88ADA45FEAE39AE9E293B0AB60B6AD69EEE5A2 E7DE9AF0E7A5A59B5B312900D4CC8CDAD38EB1AB5FD9D084C7B971E5D98ADED580D4CE78E6DF8F 88803BB2A96EF3E8B2E7DBA2C3B779E8DB96E3D48FEEE19DEADE9BB7AD6F6F662D4A440E2D2702 888250C0B983FEF5B6EEE69FF1E9A0F0E8A1DBD28EABA35B7A72298D853AE0D88DDED68DF8EEAB F2E7A8BBAF747F723D473C05948D50DFDA9ADFD998D7CF8CD8D18AE1D991F1E9A1C8BE76635912 6F651EADA15BD0C686D9D095ABA26E574C188E834DC6BA87584D16C2B979E2D993FEF5B47D743D A09757F8E78FD7C972EDE29BD6CB946E6431DED699E7E08FE2DC7BE5E17EE7E296B6B381231D00 756D3FF3EDA1DAD67DF0EA98DED1A3372705C7B987EAE194F0E889F2E98CE1D296BEB18C524B24 7D752EFCF1A4EEE097ECE28FE8DF96E8DFA6756C456B6321F7EF9EF2E599F3EA90F4EB8CF3E98F F1E792F7EB9AFFF6ABF8EBA4F2E69EF7EBA3FAEEA6F7EBA0F9F0A3FEF5ABFDF3ABF4EAA3F7ECA8 FFF4B2FCF1B2F7ECACF9EEAEFAEFADFAF0AAF9EFA7F9EFAAFBF2B3FDF3B5FFF6B6FEF5B4FDF4B3 FAF1ADFAF2AAFAF2A9F7EFA6FAF2A7FDF7A8FEF6A9F8EFA2F1E89DF7EDA4FEF4AEFFF5B1FEF3B1 FCF1B1FEF3B1F8EDABF2E8A5FCF2ACFFFAB5FEF5B0FAF0ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFCFEFEF6F9FAEBEFEFCCE4E4A9DFDF9CE6E6B3F5F5E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFFEEDDF8E2BEEAE1AE E8E9BAF6F6E5FCF9F0FFFAF4FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF8FAEBFAECD5FCDFBFEDDDAA E8E7B7F6F6E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFEFF7F7D2EAEAB5EBE9B3FCF7D2FCF9E2FAFAEFFEFEFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F7FAE3D6F1C99ADEB240EBD28BFDFAF2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFEBF0DC95E1B445EBBD78F9DBC9FEF3EFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D989EDE291E8DD8DDED383E0D484 EEE393E3D888E2D786E0D585DDD282E1D686E5DA8AE3D887E2D884DDD37EDFD57DE1D780DBD17B E5DA88ECE191E1D589E0D48AE0D68BDAD284DED588DFD689D4CB7CD2CA7AD3CB7BD2CA78E0D885 DED682E1DA85E5DD8BE2D990F0E6A0F2E99FF7EEA0EFE795F2EA95EEE690EDE68EF7EF98F1E996 E9E18FF3EB99EDE592EBE391F4EC9CEAE194E8DF94F6EEA3EAE195EAE094EADF91F3E998F1E796 DED583E8E08FEFE796EEE695EAE291EBE392E7E08FEAE291EBE492EAE391F0E896F3EA9AF7EA9C F8EA9CF2E394E8D987E8DB87F7E993E8D982EFE18CE9DB88EBDB8DF4E597F3E499EEDE95F0E196 EDDE92F2E498F8EA9EF1E597F1E59AFBF1A7F4EAA3F0E5A1F6EBABF8ECACF5E8A8F5E9A5F0E49D EDE398EFE498F2E79AF3E89BEEE398EEE49AF1E79FF0E6A1F0E6A6F5ECADF3E9A7EDE39EEFE59D EEE69AF5E99DF3E79BF1E59AF1E29BF2E39EF3E4A1EADC98EEE19BF9EDA5EFE299EFE398EBE091 EBDF90F5E99CECE093EDE096F7EAA0F2E698F4E994EFE48FF8ED9AEEE393FCEFA3F6EA9FF6EA9F EADC93F2E69AC6BB6DE1D489F8EC9DECE18FEBDF8DF1E594F1E696F4E898F3E999F3E79AF6EA9F F3E79CECE095F2E69AF3EB99F4EC9CF2E9A0F3E8A8FAEEB1F9EDB0E7DD98FAF0A7F8EFA2F4EBA0 FCF3A9F9EEA7FEF1AAF6E89EFAEE9FF3E997ECE292F8EDA2E8DE9BF4EAAFAFA66F1D1500B4AD78 EEE7ACEFE29EE2D590B4A7629E914BCFC17BCABC75E0D18AECDA93EEDD95F1E097EEDD94EADB94 E9DA94EEE09AEBDD97DECE88D6C680D3C37DDCCE88F0E19CF4E6A2E9DA98EFE39BE8DF88A39C49 4B4100B6AA76FFF4C7AB9F6F8C8149F3EBA8E2DC95E2DC96A39B5CC7BF7BF2EB98E6DD93A0954E EEE49AEEE38FEDE28EEEE49A403408594E26F3EBB5B4B069E3DA90C9BB72E7DA8CE6DB87E2DB81 DAD47779731ADDD685DBD48DDDD497B5AA76E7DEAEE0D9A5A7A26D5B562159521D6D662D9E9555 D6CE84E3DA8CEEE293EBDE91E8D890DBCF8DACA16493894DA59C5ACDC57CE9E095F7EDA0ECE197 BBAE6C695A224E3C0C97845CE7D7A4F3E7A1E2D990E9E097E4DC93E4DC93DDD48EA79E59746C2A 89803FD3CB8BE1D999BCB975B4B2754C451D847B49AA9F68B5A778665A21F2E89EEAE28EFBF0B6 665A2D918753EBE2A0E3DB91EAE295ECE09D776931EFDFA8EEE098F1E788EBE680EAE294D6CBA8 3223048F833DF7E9A4E1D390F8EEA5DCCCA03C2E00CAC173E2D896EFE79AEBE58BE4DC93D4C79F 382B0FA09851FAF0A3DCD088F2E39FECDCA1EFE0AE7063387C7530B2AD64C1BB81FBF49FF3E987 F6EB90F7ED99FCF0A4F2E49FF8EDACF9EEAEFAF0ADF8EEA7F7EEA5F8EFA5FAF1ACF2E9A5F3EAA6 FAF1AFF9F1ADF4EBA7F8EFAAF2EAA3F3EBA4F9F2A9F8F0A7F5EDA6F8EFAEF9F0AFF7EDADFAF0B2 FAF0B2FBF2B2F9F0AEF3EAA6F9F1A8FEF6ABF9F2A4FBF4A4F5EE9DF5EE9DF9F2A1F4ED9EF3EBA0 FAF2A9FAF2AAFBF2ADFDF5B0FDF4B0F8EFADFFF4B2FEF3B1FDF1B0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFF0F9FAD5DEE298E2E59EF2F3C1F8F8DBF9F9EAFCFCF8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBF6FEF8EF F9F7E8F0F0D2E6E4B0F1E2B7FFE7CDFFF8F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F9EBDDE29CE6DAA4F9DCCA FBEAE0F9F7EBFDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDFDF4F9F8EAFAEFD7FCE4BEEFE2B1E7E7B7F9F9ED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6EBEDD6A4DDBE67D2C659E5E1A2FDFCF5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF1E1B1DFBB5EDDB457E8CB8FF7ECD7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E695E5DA89E1D684E2D786 D8CD7CDFD482E2D785E4D988DDD280D9CE7DE2D786E7DC8CDDD280E4DB85E9DF88E4DA81E0D67D DED57DE2D786E8DD8DECE094E5D98FE1D78BE0D78AE0D78ADCD384D0C778CCC374D5CD7CD9D180 E3DB87D7CF7CDCD481E9E08FE2D98FEBE199E9E094F0E798EDE593F4EC97F0E893F3EB95F1E995 F0E896F0E898EFE697F6EF9DF6EE9EF4EB9CECE397EBE299F2E8A0F1E89DEDE499F1E89AE9E190 EFE796F0E897F3EA9BF6ED9EF2E99AECE494EDE494EEE596EFE797ECE494EAE192F0E797F2E898 F5E79CF8E89BF2E393E7D887E4D581E8D984F2E38DF0E18DEEDF8CEBDB8EEBDB8FF2E297F7E59E EEDD94E9D98EF1E497F6E99CEEE095F6EAA0FAF0A8F6ECA7F4E9A8F6EBADF5EAAAF3E9A6EEE49E EBE199ECE397F0E79AEDE495E7DE8FEDE497F2E89FF6ECA5FBF1ACF5EAABF4EAACF2E9A8ECE39F EEE69DEFE59CF1E599F6EA9EF5EA9FEEDF9AEDDE99F5E5A3F6E9A5F5E8A3FAEEA6EEE29AEEE296 E9DE90E6DB8BF3E898F1E697F2E69AF4E89EEEE295F1E792F3E995F8ED9DF5EA9CFFF4A9F7EBA3 FBEFA7F1E59BF5E99EEBDF93F4E99AF1E696E8DD8CE4D989F4E99AF9EE9FEDE293ECE094EEE295 F2E69BF4E89EEFE399F0E498F5EC9BF6EE9DF2E8A1F3E8A9F7EBAFF4E9ACE4DA95F0E79EEEE598 ECE399F4EAA3F5E8A2FFF0ABF8EAA0FBEE9FF5EB95EEE693F7EEA3E9DF9DF2E9B03A3001686134 F8F3BBF1EAABC1B670958B43B8AD66E7DD94E0D48BF7EBA1F9EBA1F0E198F2E399FCEB9FF3E397 F1E297F4E89EFCEFA6F1E49BE0D48AE4D88FE1D389D5C77DD2C47AE8DA90F9EAA1F4E798CFC669 F1E890B3A8614B3E09C5B889FCF0BF877C43B1A966F4EDA5F7F0A9C2BA789B9450E9E290E4DA91 9F954ED6CA7FEBE087E7DB84FCF2A8877948261A07D8D09ECCC983C8C273CFC375FAEF9FE7DC8B F5EC9CCAC2736F671BD8D188DFD795F3ECAEA49D62A19B645C572058541D88824DD7D19BE2D99F F0E6A4ECE398F2E997EBDF8CCBBF71AA9B559B8B4ABCB26FE3DA98E6DD9BEAE0A2E2D69AB3A76E 64551C74652A8A7C40D7C788FBECABE4D691F3E69DE6DD92E5DC92EFE59DA19951675E188D8441 D7CF8EF6EEAED5CD8EB0A869A09E5D6565296E6737918759F4EAB7635523B5A96AECE298DED487 FAF0B362562B8A8055FDF5BBECE59ED9D186D9CB8687783EE9D8A1F0E29CEEE486F6F18CDFD68A BAAD8B261701B4A757F2E39EEFDFA0F0E39DD3C295473801DAD27FF1E8A6EBE39AEEE891E5DE91 CBC0932F2207C4BC70F6ED9DEDE199EEDF9BF2E2A8EBDAA8564A209E985497954C6C6631EEE79B F0E58CE1D684F8EC9FFCF1A8FBEEAAFBF0AFFBF0AFF5EBA7EFE59EF2E99FFCF2A9F7EEACF8EFAD FBF2AFFFF6B3FEF7B3FDF6B1F9F0ABFCF4ACF9F2A9F6EEA6F8F0A7F9F1AAFBF2AFFEF5B4FBF1B1 FCF3B2FAF0B2F8EEAFF9F0AEFBF2AEFCF4ACFBF3A8F6EFA3F6EF9FF7F0A0FDF6A7FCF4A7F6EEA2 FCF4ABFDF4AEFBF2ACFAF1AEFBF2B3FDF3B4FBF2B1F8EFACFBF1AEFDF4B1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFAF6FFF3E4FFF1D6FBEFC7E6E6ABEBEDBCFAFADFFFFFF5FFFFFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFEFEFEFCF7F8E9EDEBC5F5E2BAFDDEBBF4EBCBF6F5E3FDFDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEF1F7F7E0EEEECBE3E6ACECE5BE FBEAE1FFF5F6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF7EEFDEBD4F3E9BFEBEBB5 EFEFCAF6F6E4FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EBEBEB EBEBEBFAFAFAF0F0F0E7E7E7F8F8F8F5F5F4E8E8E8E9EBEEEDE6D5E3C781D9B64ED3CE85E0E0BC EFEFEBF1F1F2F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0EEEEEEE5E6E6E5D6BEE7C58CE0B455E4C16A F4E7C5F7F9FDE6E6E6F1F1F1FAFAFAE9E9E9EDEDEDF8F8F8F1F1F1E8E8E8F4F4F4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF6F6F6F1F1F1F1F1F1F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEADF8DE4D987E1D684 E3D886DFD482D5CA78DACF7DE2D785DED381D9CE7CDDD280DCD181D7CC7AE1D684E7DD86E3D982 E1D77EE6DC86E6DB8AE4DA8AEDE194E6DA90DBD185DDD487DED588DAD182D4CB7CD1C879E0D887 DED684E2DA87D9D17EDFD784EAE290E1D88BE8DF94E6DD8EEFE795EBE38FEFE792F2EA95F8F09D EDE594EFE796F8EFA1EEE598F7EE9EFBF2A3F5EC9FF4EBA0F8EEA6F7EDA5F4EAA2F3E9A1F1E99D EDE495F4EB9CF0E897EFE697F1E89AEDE495E9E091ECE394EFE697F0E798ECE394E8DF91EEE596 F1E899EFE296EBDB8EE1D183DECF7EE5D783F0E18DF5E691F0E28DF4E594EDDE90E3D385EBDC90 F6E59DF1E096F1E196F4E899F6E99BF3E697FAEEA3F9EEA6F8EEA7F7ECA9F5EAABF2E8A6F2E8A1 F3EAA1F8F0A4F4EB9FEEE598EBE293EEE597F5ECA2F7EDA6F6ECA7F9EDACF6ECABF6EDACF4EBA7 EEE5A1EFE79EF1E79EF5EA9EF8ECA1F7EBA1F3E59DF1E29EF7E8A5FAEDA9F5E8A3F9ECA5F0E49C F3E79BEFE495EBE090F4E999F4E99AF6EA9EF8ECA1F2E69AF1E696F8ED9EF6EB9DF8ECA2FCF0A8 F3E79FF9ECA5FCF0A8F6EA9FE9DC91EDE293F0E596EFE494F4E99BF6EB9CEEE296EEE296F1E599 EFE399F5E99FFBEFA5F8ECA2F5E9A0F3EB9AF5EC9EF3E9A3F6EBADFDF1B5FCF0B2E8DE98EFE59C EDE497EDE499F5EBA3F5EBA6FAEBA8F6E7A0F7E99CF2E795EEE595F4ECA1F4EBABBDB479171000 ADA66DE3DEA5CDC886928A40DDD489F0E79CEDE497F0E79AD2C67AC6BB6CB4A959AC9F51AB9E4F A09344A29647AFA759D2C97BECE094EAE090E5DA8AECE091F1E595E5D889DED182E9DC8CEFE08C CBC064E2D981FEFDB8BBAE736D612EDFD39FDAD09488803DE8E199EDE69EF3ECAA938C45E5DE8D F9EFA7BBB16CC8BC72EDE18BE2D780F5EAA1BBAD7C221600B7AE7ED2D089C0BC6AC3BC66E7DF8F E6DC93EEE5A1AEA469968D54F6EDB5DDD69A8A8546342F0055500A8F894ACFC98DECE4ABEBE2AA E6DDA1EAE19EF3EB9FC7BF6FA2994AA99D54CFC280F4E6A8F3EAA2E1D994E7DD9FD4C993847646 4133069D8C5AECDDA3F8EBA5F2E595F5EA90E9DD88EEE297F0E79CE0D78D948A42716921B3AB65 F1E8A5F0E8A7E6DE9EB6AE6F9E97588884495A5820ABA66BC2B78BACA0774E4212E4DA92E3D992 DCD18FFDF4AF6B602C8D815AE8DFA5E0D992CEC77CB4A6617E6F35F6E5ADE6D88FE7DD82E5DF80 D7CE84877A54150703DFD282EDDE99EDDE9EEFE29DC2B1824A3C0EECE493E3DA97ECE49CF5EF9A C0B86EB1A577322601ECE494F5EB99FAEEA6E7D894F2E3A7DFD29D4B400DDAD48BD8D48C484210 B7AE6EFFFCB3F0E49CF2E69FFBEEA9F1E49FFAF0A9FAF1A9F9EFA8F6ECA4F7EDA5F9EFA8FEF5B2 FFF7B4FEF5B2FBF2AFFEF4B0FFFAB5FDF4AFFDF5AEFCF4ACFBF3ABF9F1A8F7EFA7F4EBA8FAF1AE FAF1B0FDF4B2FAF0B2FAF1B0FDF4B2F8EFA9F1E9A1F1E99EF9F2A3FFF8ACFEF6ABFBF3AAF6EDA6 F6EEA6FCF3B0FFF6B3FBF2B2F9EFB1FBF1B4FCF2B6FDF3B6F6EDAAF7EFABF9F2AEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFE FDFCF8FDF2E4FFE2C4FFE1BFFEE5C6FAF3E0FBFBF0FEFEF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCFBF9F0FDEBD4FBDFB8E9E0A7ECEBC2F8F8EAFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFAFFFDEFFAFAD8EEEEBDE6E6B3F3F4DD FBF9F0FEFBFAFFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFBF4FCFAE2 F6F6CDE7E7AFECECC5F8F9EAFEFFFBFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 D6D6D6D6D6D6F5F5F5E0E0E0CDCDCDF1F1F1E9E9E9D0D0CFD0D1D3DDD5BCDDBC68DBB249DBD4B5 DEDFD7E2E2E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2DDDDDDC9CACADACDCAF2D3BFE9BA66 E4BB57F1E1B5EBEDEECDCDCCE2E2E2F6F6F6D2D2D2D9D9D9F1F1F1E3E3E3D0D0D0E9E9E9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBEBEBEBDEDEDEDDDDDDECECECFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CE7CE4D887 E0D583D7CB7ADFD482DBD07ED9CE7CE2D785E5DA88DFD482DBD07ED6CB79DBD07EE0D582DFD57F E1D780E7DD87ECE28DEEE391E7DC8DE9DE8FE7DB90DBD184DBD285DED589DED586E0D788E1D889 E7DF8EDDD584DED683DDD582E5DD8AE5DD8BE0D888E9E191E9E190F2EA98E8E08CE4DC87EBE390 F6EF9DECE393ECE395F6EDA0EDE498EFE698F1E89BEEE599EFE69DF2E8A1F0E69FEDE39BF3E9A1 E9DF95F0E799F6ED9FE6DD8FF0E79AF2E99CEFE699EEE598F4EB9EEEE598ECE396EBE295E9E093 EEE598EFE599F7EB9DF2E597EADD8FE9DD8BEBDF8CEBE08CEFE38FEDE18EF4E896F3E697ECDF91 F1E596EBDB90F2E297F7E79BF2E597F0E395F4E799EBDF94EEE49BF4EAA4F5EAA7F5EAABF8EDAB F8EFA4F3EA9EF8EFA1F6ED9FF1E89BF2E99DF5ECA2FBF0A9FAF0ABF6EBA9F5EAA9F4EBAAF8EFAD F6EDA9F0E7A1F1E9A1F2E9A0F5E99FF2E69CEFE399F2E49DF4E69FF2E39EFDF0ACF5E8A4F8ECA4 F0E49CF3E79BEDE293F1E696F0E596EEE394F2E69AF6EA9FF5E99FECE096F2E69DF5E8A0FBEEA8 F5E8A3F9EDA8F3E7A1EFE39BF2E69BEFE497E8DD8DF3E899EDE294EADE92F1E59AF3E79DF3E79D F2E79DF0E49CF5E9A1FCF0A8F9ECA6F8EBA4F5EC9FF6ED9FF3E9A3F5EAACFBEFB2F8EDADF2E8A2 F5ECA0F5EC9EF6EDA2F9EFA8FAEFAEF5E6A6F4E6A1F3E69CF0E595EFE697F2EAA1F8F0AF655D26 2C2507DAD69FD9D49B7A7533D2CF83F4EDA0DCD5889D96488881339F9647C3BB6BC6BE6DC9BF6F D1C674D5CA79D1C97ABCB568ABA454AFA657BFB666D6CA7AEBDF8CF1E591EBDC88E2D380DFD07B D5C66FC6BB5FE3DA82E2D98DF3E8AA9D9159897F47F3EAACA69F5AACA55DFCF5AEE5DE98ABA45C D5D080FAF1ABCDC380B6AA60F2E892EDE38BEBE197DACD9C2A1E00918962E4E29FB9B765CDC873 D4CE80CCC482EAE1A9B0A779B8B084958D5E3E380D353203919044D7D685FAF3AAFBF2B0EEE7A9 F8EEB2F2E8ACDCD3929D954DADA559C6BF73EAE09AF9EEB0E8DDA3F5ECACD3CA8B8C81485F541E 998B59E9DDA7F1E2A9F0E3A0EFE395EEE38BE9DE7EE8DE83EFE4999B92476F661CA0964ED6CE86 FBF2ADF3EAA7CBC382B4AC6CDBD394918A4C6A6631CBCA939D9957E6DBAD2519028E8348ECE395 EAE09BEDE0A9F9F1A962581E7F744DB4AC6FB1AA63C9C279B6A96587783CF1E1A5EFE199E7DD86 CBC36BD9D088645930463911F5E99BE8D994E2D492F7E9A7A2925F4C3D0EE3DA8DD7CE89F1E99F E4DD8DAAA25B988C5A4C4012F6EE99EFE691F9ECA2E6DB93FDF1B2ACA068534919DFD98EE1DD95 61592D7C703EDFD39BF3E8AEF6EBACE6DC99F4EAA3F4EBA1F7EDA3FDF3AAFFF6AFFDF3ABF7EDA6 F7EEACF7EEACF4EBA8F1E8A5F7EEAAFFF5B0F0E7A2EEE69FF6EEA6FFF7AFFEF6ADF8F0A7FCF4AC FEF6AFFCF3AFFCF3AFF8EFADF4EBA9F8EFACFAF1AAF4ECA3F1E99EF4EDA0F7EFA6F7EFA7F9F1A9 FCF4AFFDF5B3F5ECAAFEF5B4FCF2B5FAF0B3FCF2B5FDF3B8FCF3B6FAF4B0F7F2ACF4EFABFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBF3F1EFD1F0E3B8FDDCB6FFE4C9FFF1E3FFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFFDEFD9F3EEC0EDECBAECECC2F5F5E1FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6FEF0DFF7EAC5ECEAB4ECECBFF1F1D5 FDFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFF8FDFDEBF2F2D5E9EABCE4E7AEF2F3CAFFFFEDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F8F8F8E9E9E9E9E9E9FAFAFAEDEDEDE2E2E2F7F7F7F2F2F3E2E2E0DADDCCDAD4A4DABE67DFBB61 ECE5D5EFEEEFEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEBEBEBDFE0E0EBE5E7F9E8E2 EBC783E0BD5DE5D899E7E9D1E0E0DBEEEEEEFAFAFAE5E5E5E9E9E9F7F7F7EFEFEFE4E4E4F2F2F2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE8E8E8D3D3D3C6C6C6DEDEDEFAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D783 E5DA86E2D783DFD580E4DA86DBD17CD7CD78DBD17CDBD17CD9CF7BDCD27DDED47FE0D681E0D681 D9CF7ADDD37EE7DD88E5DA87E2D787E6DB8CE6DB8CE5DA8BDED587E0D78AE1D88BDDD485DFD687 DFD687DCD483D4CC7BDAD27FD9D17EDDD582DCD481CFC774DAD27FDFD783EEE691E8E08CE5DD89 ECE493FBF2A2F8EFA2F3EA9EF9F0A7FCF3A8F7EEA0F1E89CF5ECA2F3E9A1EFE59FF2E8A2EAE099 F5EBA4EFE69DEEE599F7EEA1F1E89CF8EFA4F5ECA1EFE69BEDE499F2E99EEEE59AEEE59AEEE59A ECE397EEE59AEBE397EDE093EADD8FEBDE8FF0E394F0E492E6DA88F6EA97F1E593EBDE8FEFE293 F5E89AF3E798EEDE93F0E094F4E497EEE293E9DC8DEEE193F5E99DF6ECA3F9EFA8EEE4A0E9DE9E F0E6A0F0E79AE4DB8CECE394ECE394EEE598F4EB9FF4EAA2F5EBA4F6ECA8F5EAAAF3E8A9F2E9A7 F6EDA8F5ECA7EFE69FF0E8A0F2E8A0EDE197EBDF95EBDF95EDDF96F0E299F2E39CF9ECA6F2E5A0 F5E9A1F0E49CF2E69AEADF90F4E999EDE293ECE192EFE297F1E59AF1E59DF7EAA4F3E69FFAEDA9 FBF0ADEEE19FFFF5B1F8EDA8F7EBA3F1E59AFEF6A8F1E696F4E99BEDE196E3D78DEFE39AF8ECA4 F3E79FF2E59EF3E6A0F9ECA6FBEEAAF7EAA6FCEFAAF7EEA1F7EEA1F4EAA3F4E9A9F8EDAFF5E9A9 F7EDA6F6EDA2F9F0A2FAF1A6F8EDA9F7ECACF7E8ABF8EAA8F6EAA1F4E99BF4EC9FF7EFA7FBF3B4 4942175C5521E1DCA58B884ECDC888FAF6AEA9A55A7F7A30A7A157D8D287EFE89CF5EDA1F4EC9E E7DE90DFD688DAD184F1EA9FEDE99FE3DD93DAD287C6BD72B5AC5EC0B566D8CA7BE9D989DACA79 D2C16EE3D37FE3D87EDAD179F5EC9EDFD590E2D7996F6528C0B678E0D99579722CE5DE96E5DE96 DFD98FACA658F7EEA9F1E8A6B8AF66EDE38CE3DA82E3DA90F9EDBB53482B746D47ECEBAAAAA75D C5C176BBB672E1DBA0FDF7C2777142322B034640106E6934C0BC7CFAF7AFECEA9BECE597FBF2A9 F0E6A3C3B87A9C9152938A47E2DA92F3ECA2E6DF97E6DF9BF5ECB1E6DCA78E824F6459249B9157 E7DE9CF3EAA2EFE699EBDF90E2D786E6DA8BECDF90EDE191D8CA7E786C22867D32D3CA80E6DC94 E4DC94F2EAA4ABA25FA29A59EFE7A7817939686022E0DCA785834FC2BE7D6C632E3C3206E1D691 EEE698E6DC98E5D9A1E7DE99574E11A09667D3CB8BC5BD76C9C17BAA9C5A948446EDDD9BECDF96 ECE08FDFD686D7CD8A2A1E0F776B39FAEDA0E6D88FE5D695FEF1B172622E6F6126EAE098DFD78F EEE69DCBC377C3BA757C703A90834DF4EE93ECE48DEBE196EEE49DF6EBAA5F5518817740F7F1A3 FCFBB4A79D74413410685A32B3A778FEF3BDF4EAAAF9F0A9EFE699F7EEA0F8EFA3F4EAA0F4EAA2 FAF0ABF8EFACF8EFADF7EEABF7EEABFAF1ACFBF2ADECE39EEFE79FF5EDA5FDF5ADFDF5ACF7EFA6 F6ECA5FBF2AAFCF2ABFFF8B3FFFAB5F8F0ABF6ECA7FDF3ACFDF4ACF9F0A5F5EC9FEFE79EF6EEA5 FBF3ABFEF6AFFFF7B3F6EDA9FCF3B1FCF3B3FCF3B3FEF4B6FEF4B7FBF2B3FAF6AFF8F6AEF6F3AE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FBFCF5F3F4D9EAE9B8ECE2ACFCE4C4FFF1E2FFFDFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFDF8FEFEE8F4F4CBE9E9B2ECECC4 F8F8E9FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCF8FFF1E2FEE3C5F4DEB0E8E5B3F2F2D8 FEFEFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFDFFFEFDEFF0CFDFE29DE7EAA9F7F8D2FDFDECFFFFFCFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBF3F3F3F2F2F2FDFDFDFDFDFDFCFCFCFEFEFEFEFEFFFAFAF5EBE7BFDECF81E0C46F E9CC8AF9F3E6FDFDFCFDFDFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFDFDFE FCF8F1EAD7A1DCC46DDDCE80E6E3B1F8F7EFFDFDFEFEFEFFFCFCFCFDFDFDFEFEFEFAFAFAF7F7F7 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EFEFEFE7E7E7DCDCDCCBCBCBE0E0E0FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5DB86DBD17CDDD37EE8DE89E5DB86DED47FDCD27DDBD17CD5CB76D8CE79E3D984E3D983DED47F DCD27DD7CD78D6CC78E0D583DBD07ED4C979E0D585E1D687DDD283DED487E3DA8DDFD689D5CC7D D5CC7DD3CA7BCEC675CFC776D7CF7CD4CC79D4CC79D6CE7BDFD782E4DC87E8E08BECE490E3DB87 E0D887EAE292F9F0A3FBF2A5F2E99FF6ECA3FFF6ABF8EFA1EFE69AF8EFA4F5EBA3F1E7A1F6ECA6 E6DC95F1E7A0F1E79EE4DB8FEFE699F9F0A4F8EFA4F2E99EE8DF94E0D78CE4DB90ECE398F0E79C F1E89DEFE69BEDE499E7DE92F5EA9BEFE294E8DB8CEBDE8FEBDE8FE5D887FFF4A5F5E89AE2D586 E4D788F0E395E7DA8CFBEB9FF0E093F2E295EFE293EADD8EEADE8EF7EB9DFAF1A5FDF3ABF3EAA3 F1E6A3F7EDA6EBE292E9E190F3EB9BF5EB9CF1E89BF4EBA1F3E9A2F1E7A2F3E8A6F4E9A8EEE3A5 EEE5A1F4EBA5F2E9A4EDE59EEEE69EEEE49CE6DB91EDE197EEE399EDDF96EDDF95F6E89FF0E39D EBDE99F2E59EEFE39BF3E79BEEE394F4E999EFE495F1E697F3E79BF1E59AF2E69EFCEFAAF0E39F F6E9A5F4E6A5DFD190F3E5A4F6E8A3FEF8B2E9DD92F2E799E8DD8DEEE395F6EAA0F5E99FF2E69E EDE199F1E59DF0E39DEFE29CF3E6A0F2E5A1EDE09CF6E9A4F5ECA0F5ECA0F5EBA5F8EDADFEF3B4 FCF2AEF6ECA4F3EB9CF6ED9FF9F0A5F5EAA6F1E6A8FBECB1FCEEADF8EEA6F7EFA1F8F0A6F7F0AA E1DC9D3E370C756F3BC1BC87A6A46CF3F1B47A7433827D3BE1DE99F0ECA6F6EFABDAD38CECE49D E8E099E5DC95E9DF98E8DE97EAE39DE6E19CE7E09BEBE29EE8E098E0D690CDC178C5B96ED0C175 DFCF83E6D689ECDC8EE9DD88E3DA84D7CE7EF7EDA5EAE09CD4CB8A7A7130EAE3A097904AB6AF69 FFF9AFDED88CB0AA5FF5EDABF7EEADB4AB63EFE58FEFE990E3DB92EFE5B45C533B433B19DCDB9D 999756D1CB91E7E2A8C1BC846B6733221D00706B38CDC88EE5E1A3F3EFB0D8D591E0DC96FEF8AC D5C97D8C823D877C3CC6BB7EEEE4A5EDE49FEEE79EECE59DF2EAA9AFA76D3F35006C602FDED39C FCF2B2E2DB8FE7DF8BEAE388E9DF85DDD37DF0E496E7D995A19153716221BFB36AFFFAAFF4EBA1 F7EDA5D8D088A9A15BCCC380F7EFAE7A72324C440BD1CA8BB5B17B8D8B5AD4CF9617100489803F E0D590E7DD95E7DD97F1E5A7E3D99C342A007E7444B5AE6BCBC47CD3CA87A09252AA9B59F8E9A3 EDDF95E4D78CE6DC95C1B678140900BAAE76F4E79AE3D58DEDDE9CFDEFB24F410A988A4DFFF7B2 E6DE95E4DC93C4BC74DFD6945C5118CDC183F5EE90EFE890E2D891F4EBA5BEB572463C00D5CE8E F3ED9DEEE89E988F674E4024382B0E564923C3B785FBF5BAF2EDA8EFE69BFAF1A2F2E99CE4DB90 ECE29CFDF4AFF8EFAEFAF1AFFAF1AEF8EFACF3EAA6F0E7A2FAF1ACFCF4ACFDF5ADF9F1A9F7EFA7 F8F0A6FBF1A6FBF1A6F9EEA6FCF1A9FDF2ADFAEFAAFAF0A9FBF0A9FAF0A6FAF1A6FAF1A4F8F0A4 FEF6AAFCF4A8F4ECA2F8F0A7FDF5ACFCF3ADFCF3ADFDF4AEFEF6B2FDF4B0F9F2ACF6F2A9F7F5AD FCF9B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FCFCF7F0EFD0EBEABBF0F0C0F8F4D0FEF5E6FFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FBFBE5F5F5CB ECECB9EBEBC1F6F6E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF9FEEFDEFEE4C7FEDFBDFAE4C4F6F2DD FAFAF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9EDF0F2D2E9EAB7EBECB7F7F7D2FFFFEEFFFFFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4DEDEDEDDDDDDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFEFBF4EDDA9DE1BD57 EBC779F7DDB6FEF8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCF6EBE6BADDCF81DCC671E6D494FCF8EDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3 ECECECF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE7E7E7D6D6D6E5E5E5F2F2F2EAEAEAF2F2F2FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDDD37EDAD07BDED47FE2D884E3D984E2D883DCD27DDFD580D6CC77D2C873DFD57FE4DA83 DBD17DE0D681E3D886D6CB7ADACF7FE6DB8BE6DB8BE2D787DDD282DACF7FDBD283DAD184D5CC7F CCC375D1C879D7CE80D1C978DDD584D3CB78E1D986D7CF7CE2DA86D3CB76D0C972E7DF8ADCD481 D8D07FEAE292EDE496FAF1A4F4EB9EECE397F4EB9EFAF1A5F2E99AF3EA9BF4EB9FF6ECA3F8EEA6 F5EBA4F3E9A2F6ECA5EBE197EEE598F0E799ECE396ECE398E7DE93E5DC91D8CF84DFD68BEEE59A E8DF94ECE398F2E99FE8DF94E9E094F3E99AEEE393EEE393F0E596EBE091EFE495F5E99CEFE495 EADF90F2E797F6EB9BEBDF8FF9E99CF4E497F1E193EEE193EADD8EE4D789F0E596F1E79BF2E8A0 F6ECA6F8EDABF4EAA1F0E795F7EF9EF0E798F3EA9CF3EB9FEFE59DF0E69FF2E8A3F8EDABF4E9A7 F1E6A5ECE39CEAE299EEE69EF1E9A1EFE79FEAE098EBDF97F3E79FF3E79DFAECA1EADC8FF0E397 ECDF99ECDF9BEDE199E7DB93E4D88CEEE394EDE292F2E798F7EC9DF3E79BF2E69BFBEFA7F4E7A1 EEE09BF1E4A0F9EBA9F8EAA9F2E4A1F5E8A3F5E8A1F5E99FECE192ECE191F5E99BF6EAA0F0E49A ECE097EEE29BF2E69EF7EBA4F4E7A1F4E7A1F5E7A3F0E3A0F9ECA7F4EBA1EFE69BF5EBA7FBF0B0 F7EBACF9EFAAF9EFA6F3EB9BF3EA9BFAF1A6FBF0ACF6EBACF9E9AEF7ECA9F8EEA6F6EEA3EDE69B E6DF9ADCD79A2821069E9967A09D6AEEEBB789864D837D41F0EAAEF9F5BADCD597C2BE7F928A4B 7C72336D64246C6222766B2B70662572692A847C3E9D9456C5BC7DF0E7A7F5EBABE4DA98F0E4A2 D1C480B9AB67D5C683E0D18BE0D485DAD17EE9E191E5DC8DE6DD94F3EAA6C2B7799D9455D8D091 8F8842ECE59AEFEA9EB4B166E6DE9FF1E9AAB9B069E6DD89F4ED96EBE39AE6DDAB71684B191300 A1A06694905BC7C0947872422621005F5B27B7B46BE3E097E3E197E4E29BDBD796DED99CDED99D 847B3B796F21BCB26DE9DEA0F4E9ADEFE5A7EEE5A2F4ECA5B2AB626D6625584F14B3AA70E5DB9B EBE39EDFD78CE8E291F3EB96DFD780F8EE99E8DD8EAEA15B7C6C30AF9E68DFD093EADD94F4EBA0 DDD389BAB068B5AD65DDD58FF0E7A4756D2B5A5212DDD595D2CB8D918E56FBF9C95851343A3402 CCC677E6DB95E5DA97EBE19BF4EAA3CFC48F403505C2B97CCCC57ECEC77FCAC180756627DACB88 EDDF95EEE093E9DB95FAF2B4897C4D322800E8DDA1E9DD90E7D98EECDD9ADFD095382A02C5B876 F2E8A6EFE79DD4CB83CAC07FDBD194473A04F1E4A1DED578E8DF8BE2D995EFE6A46E6623726A27 DED793DEDA86EDE79DB3A7804B3F253C3115392E0B564B1BE0DAA2F4EFAEF0E9A0FEF6AAF6EDA1 F6EAA1FFF4ADF9EEA9FAF0AEFCF3B0FBF2AFF8EFACF6EDA9F8EFAAF7EEA9F4ECA4F6EEA6F4ECA4 F4ECA3F9F1A5FAEFA1FCF0A2FBEFA5FBEEA6F9ECA5F5E8A2FBEDA8FFF3ACF9EDA4F7EBA1F7EC9F F5ED9EF8F1A2FBF4A4F8F1A2F5EE9FF7F0A3FAF3A6FBF4A7FBF3A8F6EEA4F5EDA2F4EEA2F3EFA5 F4F1AAF7F4AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFBF2F4F3DCE9E2B7ECE3B5F9F5D6FFFFF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 FEFEE8F2F2C4E8E8B0EEEEC9F7F7E8FDFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBFEF2EEF8E2C1F7DDB3FCE4C4FFF1E2 FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF1F1D7E9E9B7EFEFBDF8F8D5FEFEF8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3F3DADADAD9D9D9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFEFDFAEAECCE81 E3B13EF3CD8AFFEFE0FFFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAF1F3D9E4DC9EDFC268E6C676FBF6E1FFFFFBFFFFFFFFFFFFFFFFFFFDFDFD ECECECE1E1E1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF4F4F4DFDFDFD3D3D3EAEAEAFFFFFFF8F8F8FAFAFAFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9CF78D6CC75D8CE77DAD079DAD079E6DC85E4DA83E8DE87DFD57ED6CC75DCD27B E3D981D2C871DAD07CE7DC8ADCD181D9CE7FDDD283E1D687E5DA8ADBD080D9CE7DE3D98ADDD487 D2C97CCDC475D5CC7DDCD384D4CC7BE0D887D3CB78DDD582DCD481D8D07CD6CE79D2CB74D9D17D EAE291E5DD8CF5EC9EE5DC8FF3EA9DF5EC9FF3EA9CF3EA9BF2EA99EDE594FCF3A4FCF3A6F2E99D F4EBA1FCF2A8F6EDA3F1E89DEBE295F2E99AF1E998E8DF90E7DE91E6DD90E2D98CE3DA8DEEE598 F1E89BEDE497EFE699EEE598E4DB8EEAE295F0E596EADF8FEAE090EEE296EDE195EFE397E9DD93 F4E89CF4E89AECE192F0E595F5EA9AF2E295F3E395F6E698F6EA98F3E795EEE290E4D98AE9E092 F0E59EF1E7A1EFE4A3EDE39AEAE18FEBE392F0E798F0E79BF5EBA3F8EEA7F4EAA5F8EEA9F8EEA9 EFE5A1F3E9A4F0E79FEEE69BF0E89FF2EAA1F2EAA1F1E7A0F6EAA2DED28AE9DD93F6E89EEFE294 F0E296F0E39DF2E5A1F7EBA3F2E69EECE094EFE495F4E999F3E899F4E99AF0E498F2E69BFBEFA5 EEE29BECE098ECDF99EFE29EF1E4A0F1E4A0F4E7A2F7EBA3F7EBA0EEE395ECE191F1E598EEE296 EADE92E7DB90E8DC92E9DD93F1E59DF6EAA2F3E79FF3E69FF6E9A3F5E8A2F5EBA1F4EAA2F5EBA6 F2E7A7EFE4A4F6ECA7F9F0A5F5ED9CF5EC9CFAF0A8FCF1B0F9EDB1F4E9ABF9EEABF7EDA5F1E99D ECE69BEDE6A3CEC88E302904928E5FA9A677929060595521F3EBB3E6DDA4867E455F551A473D02 6D62258B7F43998D519A8D50A39558A09356978B4E877D426A5E244A3E045D5115ADA366EFE5A8 F1E7AAFFF9BCE5DA9DAEA266C9BE7FCEC279E3D88AF8EFA0D5CC7DB8AF63EFE6A0F5F2B5867C41 B5AD6F9E9654CCC67BFAF4A8B6B26CE7E0A1EEE6A7B2AA63DCD681EBE48EEDE59CEBE0B279704E 48421DBDBC8584804D251D09231C059F9A60E7E59CE6E392D8D681F2F09DDCD98CFBF4B1CAC187 7066319B914ECDC57BFBF2AFEFE5A8EEE4A9EFE5A9EBE29F827A333830008F873EDCD392FAF1AE EAE58DEAE48BF0EA96E7E093EDE39CFFFABACABB7D6D6022837435C4B574FDF0AEF8E9A4FCEFA6 D4CB80A89E54EADF97F2EAA2E8DF9A5E55124F470BE3DC9CF4ECAD80793AE4E0AAA3A073191200 6E6920CCC86FEBE199DACF8FE6DC95FFF9ADB6A97B2B2008B5AE6CB3AD63CAC37CB6AC6E615315 EEE6A0FDF0A2DCCE82EBDC9CFFFFCA4537167B7344F7EEABE7DB8EE7DA8BEFE09DB3A36C4F4200 F5E8A4EDE2A4EBE398CCC47CEFE5A99A9057716434FAEAA7E3DB7EEBE292F1E7A9B1A86A453D00 CEC985D0C981D9D57DC0BA6F9A8D67382F106B6240534C221D1500938B52FEF6B8F3EAA6F7EDA7 F9EFA7FBEFA7FDF1A9FEF4ADFAEFAEFBF2B0F9F0ADF6EDAAF6EDA8F7EEA9F9F0ABFCF4ADFDF5AD F5EDA5F8F0A7FEF6AAF7EC9AF6EB9BF6EB9DF7EBA1F8ECA4F3E79FF5E9A1FAEEA6F5E9A0F6EA9E F5EA9DF9F0A3FCF5A7FDF6A8F9F2A4F7F0A1F6EFA1FAF3A5FAF3A5F8F1A3F4ED9FF3EC9EF5EFA2 F8F4AAFAF5AFFCF7B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFDF2F1D4E6E2ADF0DCBBFBE5DAFEF6F1FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFF9FEFEE9F7F7CDEAEAB4E7E7B7FAF9EFFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF1EFFBE1D8EADCAEEAE4B5F8F4E0 FFFDFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBF6F6E2EAEABBE8E8B7 FAFAEFFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFF6FCF9D7 ECCE76E2B648F2DBA6FFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFEFFFFF4E8C5E5C163E5BE53FAF3C8FEFFEFFFFFFEFFFFFFFFFFFF FDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFEFEFEFFFFFFF5F5F5E7E7E7E9E9E9F6F6F6FBFBFBF8F8F8E5E5E5EEEEEE FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD9CF78D6CC75D6CC75D6CC75D8CE77E2D881DCD27BDED47DDBD17ADAD079 E1D77FDED47BC6BC65D0C570E7DC8AE5DA8BE7DB8DE1D687D9CE7FE3D889DED383D8CD7BE6DC8D E5DC8FDAD184D7CE80DFD687DFD687D9D080E3DB8AD4CC79D9D17EE0D885D3CB78D9D17CE1D985 E3DB89FAF2A1E9E092F1E89CF1E89CF4EB9EF6ED9EF4EC9BF0E996EDE591EFE794FCF4A2FCF3A4 F0E799EEE597F2E99CF5ECA0F1E89BEAE191EBE392EBE390E9E18EEFE699EBE295E3DA8CE8DF92 F0E799F1E89AEBE295EAE193ECE395EAE194EEE597F3E999EFE494ECE293EFE397EEE398EADE95 EFE49AF6EBA1EBE094DCD182E3D989F1E796EEE192F0E092F0E192F0E592F2E694F3E795E7DC8C E8DE91EEE59AEEE49CECE29DEEE49CE7DE8EE6DD8EF3EA9EECE29AEEE49DF9EFA9F3E9A4F6ECA6 F9EFA7F2E89FEEE59CEEE69BF0E89CF4ECA3F4ECA3F2EAA1F1E7A0F1E59ED7CB83EBDF94E7DA8C E1D485F0E394F0E49CF0E29EF4E8A0F3E79FEFE397F4E99AF0E595F0E596F4E99AF3E79BF4E89D FBEFA4F4E99BF1E599EDE196ECDF97EEE19AF0E39CF2E69EF5E9A1F6EAA0EEE296EDE293F1E697 F1E697F0E497EFE396F0E499F1E59AF4E89DF9EDA5F3E79FF0E49BF9EDA5F0E49DF2E8A0F8EEA6 FAEFACF4E9A9F1E6A3F8EEA7EEE598EDE594F0E797F6ECA4F9EFADF9EDB1F9EEAFF5EBA6F3ECA0 F4ED9FF1EBA0ECE7A4D0CB92322D086F6A40A7A47B454216D7D2A19C935A4B40056F64289E9357 D1C789E2D698F6EAABFFF4B4F9EAABFEEFAFF7E9A9F6E8A9F2E6A6EADC9FD5C98C9A8F52554A15 463C00877E42D7CE92F2EAAEDDD59AB9B175C0B573DACE85FAF1A3E2DA89B9B063F0E7A1FAF0B5 D5CC9670672FC7BF80B2AC63F7F1A6B4B06DE3DCA0ECE3A8B3AB65DBD580F0EA93DFD88FDFD7A7 7A72505A532F7472463E3B193A330EB5AF78C2BE7FE7E299D6D381DCD986DCD683DFD98A9A904B 74692BC8BD82FEF5B1F5EFA9E7DEA1F5EBB3E9DFA7958B543F360050470B9D954AF2E79FE8DE97 D4CA7FE7E286ECE78BDCD683F3EDA7E0D79B8A7C47786735B0A16AF6E8A9E9DB95F3E598E8DB8F B5A85ECEC57AE4DB91F6ECA4EBE59D807731706724EEE6A5F9F1B19F9758BBB375CFCB971D1A00 3E3719928D41D3CF75F2E89BEFE4A0DFD68FEFE59F52461C4F4320BFB874C9C377D2CB8583793C 938448FBEEA4DBCF7CE1D486F7E8ABD3C4942A1D00CDC485EEE69CF0E398DBCE7FF8EAA5766737 90833EF8ECA7F3E7ACDDD688C4BC73F8EDB6554914A1935BF4E5A4E8DF86F7F0A5EEE2AC574F1E 7C7740CBC780CDC67CD1CD73DAD486D5C7A0362E09ACA87D6C663A3931024F471CEEE6ADF9EFB2 F2E8A8F9EFABFAEDA8F4E8A0FCEFA8F7ECABF8EFADF8EFACF6EDAAF8EFABFAF1ACFAF1ACFBF3AC FDF5ADF9F1A9FAF2A9FEF7A9FCF19DF5EA97F2E797F5E99DFDF0A7FAEDA6F9EDA5FBEFA6F8ECA1 FAEEA2FBEEA2FDF3A9FDF5ACFEF6AEFDF5AEFBF3A9FAF2A8FEF6ADFEF5ACFBF3A9F8F0A6F9F1A8 FDF6ADFFF7B0FDF8B2FCF6B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFBF8FFF0E1F7E5C3F0DEAFF8E5CFFEF1EFFFFAFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFF8FCFCE6F4F3CBF1ECBDFCEDD5FFF5EBFFFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEFF7EED4EEDFBBECE6C0F2F1D7 FBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF5F3F3DA ECECC6EDEDC9F6F6E3FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E6E6E6E5E5E5FBFBFBFFFFFFFFFFFFFFFFFFF9FAE8 EFECBBE2CA70E2BD5EF2E1B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBCEE6C061DFB641ECE4A7F6F6DCFFFFFDFFFFFF FFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF6F6F6F0F0F0FAFAFAF9F9F9F2F2F2F5F5F5FEFEFEFFFFFFF7F7F7E1E1E1 EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD8CE77D5CB74D3C972D5CB74D9CF78D9CF78D9CF78DCD27BDCD27B D6CC76D6CC73DFD67BD2C871DDD37EEBE08FE1D687E4D98BE3D68BD5CA7ADED384E6DB8ADFD480 DCD382DCD386DBD285DCD385E1D889DDD485E3DB8AE6DE8DDBD380DDD582E6DE8BDCD481DED683 E5DD8CE2DA8AEDE496E7DE91F4EBA0FBF2A6F6ED9FF3EA9AEDE691E8E18AE9E289ECE58EF0E893 F2EA98F1E997EFE697EEE596EEE696F3EB9AEFE795ECE491F0E991F1E996EEE596EBE293E9E091 ECE394EEE596F1E899E9E091E4DB8CEDE495F5EC9DF2E99AEBE390E8E08EE5DC8DE9E094ECE298 E3D992E6DC94ECE399E9E093E4DB8DE6DE8DE8DE8CF3E697F0E091E9DA89E5D987EADE8CEFE391 E9DE8EE6DD8FEFE69BF2E7A0F3E9A4FBF1A8EFE698EFE698FBF1A7F1E7A0EFE59FF5EBA6ECE29D EEE49DF8EEA5F6EDA1EEE599E6DE90E9E294F1E99EF1E9A0EFE79EF1E7A0FCEFA9EADE96F1E59A EDE092EADD8CF0E493F3E79FF0E39FF4E7A0F6EAA2F5E99DFBF0A2E8DD8DECE191F4E99AF7EB9F F5E99EF7EB9FF1E794EDE291ECE192F2E699F8ECA3FAEEA6F5E9A1F7EBA2F7EBA1F0E498F1E696 F8ED9EF9EE9EF5EA9AF2E797F1E697F2E699F2E69BF5E99EF3E79DF4E89EFBEFA6F9EDA3F0E59D F8EEA7FCF1AEF8EDADF7EDAAF9EFA9E7DE8FEBE392F1E898F6ECA5F8EEADF8ECB1FDF3B0F1E89F F1EA9BFAF4A4F5F1A5EBE6A4E8E3AD342F0F534E287975506B67417B764850460EB3A868E4DA97 E8DE9AECE09DE9DC98EFE19CEDDF99EADC97F5E5A0F6E6A0E1D18BECDE98F7E9A4F1E29EF1E5A1 EFE5A2CEC5859A9254686324827D3FC7C488F5F1B5D5CA8CC2B671D9CF81FDF5A3EFE799ECE39D EEE5ABF9F0BD9F94619F965AA39C56EAE69CBDB876E0DAA1EDE7ACB3AC68D2CC77DDD780CCC57B FCFBCE7F7754251F03181700727034CFC989CAC584D9D39099924DDCD68DFEF7AFCAC27870681D ABA057E6DA91EFE59AF4EFA8E8E4A4FFFAC1CCC48F423712342A00998D54E1D78DF4EA9BE2D688 EBDE92EEE095D8D081F0E99CFCF4AC958C4D574B12958850D8C890F1E2A5F0E39FF7E99EE9DC8C B6AA5BE6DC91ECE398F7EEA4D9CF876B631BACA45EDED592E7DF9EB7AF6F989051F9F4B6625D33 0B07009B955C8E883FD9D47EEDE591E9DF93EFE6A3F0E8AA1C11009B9155D4CC8AC0BA6ECFC781 70662CD6C78CEDE095F1E58FEFE393FFF0B767582D42341EF0E8A6F6EFA1E4D68CE6D98AECDE9A 4B3A0ED8CC84F6EAA3E7DBA3B6AF5FE7E29AD5CB972C2100D7C992F3E2A3F4E995FEF4AF968B5C 524A16CAC588B9B66EB9B568D6D277DBD386B0A1781D1800B5B47DC0BC893C36043E370AD0C994 FEF3BDF3E8AFF7ECACFBEEA9F9EBA3FFF4AAF6ECA9F7EEACF7EEABF7EEACFCF3AEFEF6B1F6EDA9 F3EBA4F9F1A9FBF3ABF8F1A8F9EFA1F8EC97FCF09CFEF1A1FCEFA1F7E99FF7E9A1FDEFA8FDEFA6 FBEDA2FEF0A5FDF1A3FDF1ACFBF2B2FCF2B3FEF4B5FEF5B5FDF3B2FEF4B4FEF5B2FDF4B1FBF2AF FCF3B1FFF7B5FDF4B1FDF4B0FCF4B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFBFEF8ECFBE2C0FCDEB8FEE2C2FFF2E5FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEFEE8FEF5D3FFE2BEFFEAD8FFF9F7FFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5FBFBD9EFEEBCE5E4AEF3F3DB FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFBF5F5E0E5E5ADEDEDC8FAFAF0FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0D2D2D2D0D0D0F8F8F8FFFFFFFFFFFFFFFFFF F3F1D6E2DA97DCC46AE4C67AF4E7C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EDD2E6C56BDAB53FDED486EEECC6FEFEF9 FFFFFFFFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEEEEEEEE2E2E2F5F5F5FEFEFEFEFEFEFEFEFEFFFFFFFEFEFEF7F7F7 E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD17AD7CD76D5CB74DAD079E0D67FD2C871D5CB74D8CE77 DAD079D6CC75D2C86EDCD378D7CD76DBD17DDED382D7CC7DDBCF84E1D58ADED484DBD081E5DA88 DED47FD9CF7FDED588E1D88BDDD486DED586DAD182E8E08FE3DB8ADFD783DED683E4DC89E6DE8B EAE291E7DE8EEAE194E8DF92EEE59BF5EBA3F7EEA2F4EB9DF4EC99EEE691E9E287EEE78CEBE48B ECE58DECE48FEDE592F1E997F3EB9AEEE695F1E998F3EB97F1E992EFE890EDE58FE3DB8AE5DD8C EEE695EBE392EDE594EDE594E6DE8DE3DB8AE9E190F0E897EDE594EAE28FE8E08DE4DB8CE8DF94 EBE298DFD58EDDD38CE5DB92E9E093EAE194EDE594EAE08EEADD8EECDC8CE9DA89E7DB87EFE38F F6EA98EBE090E8DF91F4EBA0F4EAA2F1E7A2F8EEA6F0E79AEFE69BF1E79FECE29CEDE2A0F5EBA7 F3E9A4F0E69FF1E89DECE394EAE291EDE595F0E999F1E99CECE49AEAE299F1E7A0F8EBA5E8DC94 DACE84F7EA9DFDF4A1EDE090F5E9A1F3E6A1F7EBA3FAEEA5F5E99DF6EB9CEBE090EADF8FF0E596 F3E79BF2E69CF6EB9CF9EF98ECE28DE9DF8AF0E595F4E89CF4E89EF5E99FF4E89EF3E79CEDE195 F0E498F7EC9CF3E896EEE391ECE190EDE292F1E696F2E798EFE495EEE297F0E498EFE397F5E99E F1E79EF5EBA5F4E9A6F4E9A9F7ECA9F4EAA1E8DF90EEE794F6ED9DF8EEA6F5EAA9F2E6AAF7EDA9 EFE79CF1EA9AF7F2A1F2EEA2E9E4A2EBE6B16E693F3E3814524E2B393613454010D0C57EFDF1A9 F1E59BF5E99FE1D389ECDE93EBDB90E8D88DEDDD90EEDD91F3E194FDEB9FEBDB8EDBCC7FE6D88C ECE096E2D991EFE6A1EBE4A0D8D3927F7E3D5B5B1BD2D291F3E9ACDBCE8CC9C074D8D07FEBE395 D9D08AE7DCA4E6DAABEEE4B37970378E8741D3CF85CDC987E2DCA4F4EEB3B9B26ECBC570CBC66F CEC87EBAB2831008003B361CC5C493C6C681E6E392A7A153C2BC75C4BC7DB8AE71A5995D796E30 CABE78FFF7A9EADE89F0E58DE5E098F3F2B3A09D643931014E4616D8CC96FFFFBEF5EA9EF3E795 EEE18DEDDD8CE6D890F6E9B5DBCF9D6A5E2751470AB6AC66F4EA9FDDD183F2E898E9DE8FBAAC62 BBAD66FCEFA7E3D78DEEE59ACCC37960550D817931EDE59FD8CF8CEDE5A4898141F4ECADBEB779 130D005E5A33E4DF9F716B25D3CD7EEFE88DECE590F9EEADB5A776231900E6DF9BFFFDC0EAE498 BAB26C7D723AE6D79DCFC277E3D87FFBEE9FDBCB9228190094865AECE4A1F5ED9DE1D489F9ED9C B2A45E645323F2E69BE7DC93B8AC75B5AE5EF8F0A8837648574B18F9E8B4F3E0A4F9ED9DE0D394 4F4417958E5DE5E1A4EFECA5D2CF80D8D476D2CC7C998A5F1F1A00CACC8BFAF9BF696631413A09 A79F71FFF7C6F8ECB7F3E8ABF7EAA5FBEEA4FFF3A8FBF1AEFBF2AFF9F0ADF8EFACFBF2AEFFF6B1 F7EEAAFAF1AAFEF6AEFCF4ACFBF3AAFDF3A4F6EA94FBEF9BFDF1A0F9EC9EF2E499F3E59BFAECA3 F8EAA2F6E89EF9EBA0F7EB9EFCF2B3FEF3BBFDF2BBFFF5BEFFF6BEFCF2B8FAEFB7FCF2B7FDF3B8 FCF2B7FDF3B8FFF5B9FFF4B4FEF3B1FCF1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDFFFFF0FAF8D7E9E0A6F0E5BCFDF3E5FFFCF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF8FFF6E5FFDFBDFFDFCBFFE7E7FFF6F8 FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9ECE9E9B4ECECC0F4F5DE FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFCFCEFF5F5CBECEDBAE8E9BBF7F8E8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4DFDFDFDDDDDDFAFAFAFFFFFFFFFFFF FFFFFFF2E5BCE2C161E6BD5FF5D5A2FCEFDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F4E1E5D998D8C464DCC56EEDE1A9 FEFEE5FFFFF9FFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDE0E0E0F4F4F4FEFEFEFFFFFFFFFFFFFFFFFFFEFEFE F7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D780DBD27EDBD27EDFD581E1D683DCD27EDED37D D7CC76E0D67FE0D47DE5DB82DBD179D8CE78D5CC78D7CE7DDFD486E1D789DDD286E3D88CDDD283 DFD585D8CD7DD9CF83E2D78EE3D98FDCD284D8CE7DD8CF7BE4DC86DDD57DDDD47DDED67FE2DA83 E9E08BEAE291E6DD8EF0E799ECE396EFE699ECE396F2EA9BF1E998F4EC99F2EB94F1EA8FF6EF95 F2E994EDE491F0E794E7DE8DECE393F8EE9EF4EB9AEEE595EFE693F0E794EBE28DE7DE8BE2D985 E3DB87F0E893EBE28EEAE28EEBE290EBE291EFE695EFE597EEE396EEE497F6ED9EF6ED9CEDE393 EFE596F6EC9EE8DE91E1D78AE4DA8DE4DA8CE7DD8DEBE292ECE191EFE395F2E396EEE294EADE8F ECE090F0E496F3E799EEE498F7EDA3F5EAA2EDE29BEEE39CF7ECA4F3E8A0EEE49CEFE49CF1E69E EEE39BECE199F0E59DEFE59CECE298F3E99FF5EBA0F3EB9EEEE69AE6DE93E3DB91E8DE95E3D790 F2E79EEBE095E9DF91E9DE8FF3E799E6DA93EFE29EF1E49DEEE298E5DA8CE2D787EFE494EEE392 F2E797F0E596EEE395F3E899F4E997E9DF8CE8DD8DEFE398F3E79EF5E9A0F3E69FEFE39CEEE299 EDE196EEE296EDE292EAE08AE9DC8AEADF8DF0E594F5E999F7EC9DF1E599ECE196E7DC93E2D78E EBE097F2E89DF4E99FEFE49CEEE49DF3E99FEFE598ECE293F2E999F6EC9DF4EA9EF0E59EEBE09E F5E8ABF3E8A4F0E798EFE893F1EA96E6E196E6DFA3DCD4A46E68411C150036300DCEC896E8E2A0 ECE5A3F0E9A7E2DB99E0D897F8EFAFFAF1B1F7EDADFDF3B3F1E7A8EBE0A0E6DB98E1D692E6DD97 EBE298E2DA8DE5DE8EEDE89AE1DC8EEBE79CE4E098A7A35F696423968F50E6DF9DEAE399DDD487 DAD185E3D893DDCF96ECDEAAFCEFBB968B52867D38C1BA72BEBB77DDDB9AECE9AAA09B5BCEC787 C9C2876A6139140A0043391CA7A169E1DF91D3D47AB1B057F0EB9EB3AC6DACA36D655A2760571E DCD290EFE69CEDE293DBD181EDE498DDD793625B282B2300978F54EDE5A6F2E9A6F1E79DE9DF92 E9DC91F4E79EF0E19CDACB8DAEA1715A4D1B73682ED7CE89FEF5A8E0D885E9E08BCCC26EACA251 D6CB7FECDE97EBDF99EDE19DBEB26F524606B1A45BF4EA9CDFD48AF9F0A6A09B49C7C475D4CF94 3C341C130D00C1BC8CB2AE6C8C8640EDE597E8E183E1D885F0E3A672603D574912F9EFA5DFD685 FCF4A39C934B9E9353DFD494D5CA82E6DC91F8EDA68F82542D2000E1D59BE6DD93DFD788E7DE99 F9EEA66D621C92834CEFE398CBBF73B4A866E6DD8ED8D083372D08958E4FFFF6BCF4E7ADECE29F 7C7046534618D3C991A09852CFC87ADFD985DCD880E1DA93887C4E362F00EDE9A2F4F0AAB3AC71 3730037B724CFFFCD1FBF1B7F3EA9EF2EA96F5EA98F5E99FFCF2AEFAF1AFF7EEABF9F0ACF8EFAA FCF3AEF6EDA7FAF2AAFCF4ACF7EFA7F9F1A8FFF7ACFFF6A8FBF1A4F9EEA3F9EEA5FCF1ACFCF0AC FAEEABF9EDA7F9EEA8FDF2A9F9EEA6FCF1B0FAF0B5F7EEB1F8EFB0F9F0B0F7EEACFAF1B0FBF2B1 FBF3B3FDF4B7FEF5B8FEF5B8FFF7B6FEF6B5FCF4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEF9F8F8DBF0F0BFE9E9B8F2F1D5FDFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF9F2FFEAD5F9E1C8F5E0CA FBF3ECFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBF7F7E8F0F0D0E9E9B3F2F2D1 FDFDF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFF8FEFDE6F3EDC2EBE0ACF8ECDAFFF6F6FFFDFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E6E6E6E5E5E5FBFBFBFFFFFF FFFFFEFFFFFEF3E0A9E3B749EBC069FCE6C8FFF7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF0EDEBC6E2D38ADEBA58 EED998FEFEE7FFFFFAFFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E9E9E9E7E7E7EAEAEAF8F8F8FEFEFEFFFFFFFFFFFFFFFFFF FEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD783DED683E0D887DFD584D6CB7BE8DB8B EBDE8CD8CC76E1D27CD9CB72DFD57CD7CE7ADCD481DDD582DBD382DED586DED586DBD283DCD386 E0D78ADFD689D9D083DCD189E1D48EE3D68FE3D88AE2D785DFD57DE0D77DDFD679E2D97AE7DE81 E7DE82E6DC83E6DE8DE8DF91EFE697F0E798EBE292EDE594F1E996ECE490E9E18CEEE78FF3EC93 F5ED98EDE192FBF2A3FEF3A4EFE495F3E899F3E899F1E697ECE192E8DD8EEEE394F1E697EFE592 ECE28BE9DE88F0E68EEFE58CEEE48EEAE08BE6DB8AEDE293F4E89DF1E59DEFE29CF3E79DEFE494 E5DA8AE7DC8CEFE492E6DB88E9DF8BE8DE8AECE18FF1E696F1E697EDE194F3E79DF5E99FF4E89E F0E49AF0E49AF3E79CF0E49AEADE94EDE096F3E79DF4E89EF1E59DF5E8A2F9EDA5F9EDA3FDF1A5 F4E99BE7DC8EE8DC90EFE39BEEE29CEFE1A0F5E7A7F0E59FECE398ECE398F0E79CEFE69BE8DF94 E6DD93EEE69AE8DF94E0D78CE8DF94E8DE95E8DB95F1E59FEFE39AEDE195E2D788EEE393F0E593 EFE492F4E998F4E998EFE494EFE495F2E699F1E69BF0E49BF2E59FF7EAA6FAEDA9F7EAA6F2E5A0 F2E69EF4E89FF3E79BEFE393F2E490ECDD89ECDE8CEFE391F2E596F3E79AF3E79CF4EAA2F3E9A2 F2E8A1F2E8A2F1E59AF4E99AF2E799F3E799F4E99AEEE394EDE293F4E99AF4E99AF3E899F5EA9B F2E69EF2E2A9FAEBADFBEDA5F3E895F8F09AE9E290E2DA91EDE4A8C9BF8D180F009C926EFFFFD6 EDEAB2D7D49CB5B279999660817E497B78458A8754868252959262ACA979B8B484D3CF9CE7E3AB C8C387C1BE7AE8E69BE5E290E5E18ED8D380EAE394CBC377F1E7A1C7BD79868242757431E1DD96 F2EAA1D2C780D9CB88F8E6A8F6E6AAFFF3B6BAAD6E6F6420B5AE68BEBF77E1E29BADAE6BA8A56B C5BE923B31161A0E028A7D60A19663C4BE6FD4D269D0CF6BCFCD7CC4BF7BA49E642922009A9158 9F9756CDC67BDAD284EEE59CF1E7A8A0945A1D10065E5317C2B776FBFAB1E5DB8CEBE391EEE695 EAE093F7ECA8DFD397AB9D6A988B574E4206B6AB69ECE29CE7DD94F4EB9DE3DB8AB0A855BBB361 EAE192F2E99BF2E89DE7DD97A095575F5013B4A662E3D486FAEC9AE8DC8CC0B863A29D3FF7F7A2 8C8957030000625B3CDED89A79733798904ACAC370C5BC60E5D88AE5D59D493517A49263FFF4A6 EAE17AF4E8947A6F25D0C77DE6DD96CAC27DEBE3A3ECE3A6372D13938948FAF0A8E1D685E8DF91 E9E2A3DED695312900D0C57DE6D98DBEB162D6CA7CE9DD90B2AB62554F0DF0ECA3F0ECABFCF7BE BEB68443380FD0C38DE1D390CFC272EBE288DCD67CE3DD8FDDD89A817B4A655A1CF8EEA1FCF5A3 CBC37C3D34066B6042FFF5D0F3EDACF2EE90F4EE89F4EB94F8EDA5FDF3AFFAF2AFF7EEABFFF6B1 FAF1ACFDF4AFFCF4ABFBF3ABFBF3AAFCF4ABFDF5ACFEF6ADFCF3ACF7EEAAF7EEABFBF2B0FEF4B6 FEF4B6F8EEB0F6EDACFAF1AFFEF5B1FAF1ACF5EEA8F5EEA9F4EDA7F6F0A7F9F3A7FDF7A9FAF4A6 F8F2A7FAF3ABFEF8B5FFF9B9FDF5B6F9F4B2F8F3B0F8F2B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFAF1EFEEC7E7E7B0F4F5DEFBFBF3FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFFF9F3F2EBCC E8E2B0F4F2DBFDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF1EDEDC7E6E6AEF5F5C9 FBFBE5FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF8FCEED5F9DEBAFCDFCFFEEBE7FFF9F9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E7E7E7E6E6E6FBFBFB FFFFFFFFFFFAFFFFEDF1DE9AE3B747ECCA7EFDF5E7FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFDF9F8ECEFDEAB E0B447EDD490FEFBF1FFFFFEFFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFDFFFDFDFFFDFDFFFDFDFFFEFDFFFFFDFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFD FFFEFDFFFDFDFFFDFDFFFEFDFFFFFDFFFFFFFEFEFEFCFCFCFBFBFBFCFCFCFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFAFAFAFAFAFA FBFBFBFDFDFDFEFEFEFFFFFFFCFCFCEDEDEDCFCFCFE0E0E0F8F8F8FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFFFDFBFEFCF9FDFCF8FDFDF8FEFDFAFFFDFDFFFEFEFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D985E3DB88E4DC8BE3D988DACF7F E6D989E8DC8BD0C36DD9CA74ECDE85E2D77FDBD37FE2DA87E6DE8BE3DB8ADCD483DED686E5DC8D E2D98AE2D98BE2D98CDFD689DED38BE2D58FE3D68FE3D78AE8DD8BDCD27CE0D77CE2D97CE5DC7F E8DF82E9E083E5DB83DDD584E3DA8CEEE596F0E798E8E090E8E08FF7EF9CEEE692E8E08CEBE48C EEE78FF0E893EEE394F2E697F0E596F5EA9BF5EA9BEBE091EEE394EDE293EADF90EFE495F0E596 EEE393EEE490E9DF88ECE28AEDE38AF0E68FF1E792E8DD8BE6DB8CF3E79CF7EBA3F2E59FF4E89F ECE094E9DE8EE8DD8DE3D886E2D785EBE08EE9DE8DE9DE8EEBE092ECE093EADE94EEE298EFE399 EDE197ECE096EDE197F0E49AEDE197E9DD93E7DB91EADE94F2E69CF7EAA3F4E7A1EADE96E4D88E ECE095F5EA9BF2E799ECE094ECE098EADD98EDE09EF7E9AAF2E6A1EAE196EBE297F4EBA0F5ECA1 EBE297EAE196FEF5AAF2E99EE2D98EF1E89DECE398F3E79FE6DA92E6DA90EBE093DFD484F5EA9B F8ED9BEBE090EFE494F7EC9CF2E798EDE195EDE195F6EA9FF1E49BF3E6A0F7EAA6F3E6A2F5E8A4 F1E49EEEE39AF0E49AF1E599F2E595F9EA99F3E493EFE191EDE092F1E496EDE194EDE197F5EBA4 F9EFA7F7EDA5F5EBA3F1E69CF4E89CF3E79BF4E89CF6EA9EEFE397F2E69AF6EA9EF5E99DF5E99D F8ECA0F5E99CF9EC9FF3E69FF6E8A9F0E1A6EFE3A4E5DB94F1EB9BF8F2A4EAE3A0362F00D5CAAB 8A7E5D4C4309342B002E24054B420C685E25645A23534911524812453B09453A063F35042E2700 524D167B743AB1AB6CDED995DFD890E9E39AF4EEA3DED68EE8DF9BD0C783F4EEACDDD8987F7A3C 8E894AF8EEAEE9DD9ADED08BEDDF97E1D38BE4D88FCBC27B5E5511BFBA79D0D090E6E4A8C3C189 7F7C49251F00272011958D58CDC48ACFC784ADA45CDFD88AB4AE67E9E5A786814157530BACAA5A C7C271DCD686B7B165F8F3B2D3CA93675A31190A007B6E38DED392DFD48FE6DB94F4EB9EECE494 E1D889FEF9AFBCB16E8A7F41877A435A4D16BBB170E2D893E2D890F1E89CECE394A8A04FC2BA69 FCF4A4F0E798F8EFA3EAE196A89E594C4100C1B56CFBEFA5F7E9A3DFD189E2D781A8A242E4DF8D E3DFA9312C0E241F16ACA578D2C98B7D7433CEC67AE2DA86DED47FE4D790CCBC873D2C02E2D39E E9DE90F3EB8BD4C97B7C712AE7DE92EBE496DAD288F3EEAB938C5B2E2400E5DAA0F6EBA6ECE28E F1EA99EBE5A4746C304B4215F8EEA7DDD089D4C57DE7DA91EDE29A696132817941F3EEABF9F5B4 EAE5AA403801AEA46DFDF1B7F1E39FEBE08EECE289ECE68EEDE69ABEB87B504A199D9254FAEFA2 F1EA98DAD28A3E350972684CFFF9D1F0E9A8EDE98DF4EE8DF9F09AFBF0A9FFF6B2FCF3B0F5ECA9 FBF2AFF3EAA6F7EEA9F8EFABFAF1AAFBF3ABFCF4ABFEF6ADFDF5ACF8F0A9F7EEABF9F0AEFDF4B2 FDF3B5FEF5B7FCF3B5F7EEADF8EFADFBF2AFFBF2ADF3EBA6F2EBA6F6EEA8F8F2A8F8F2A6F7F1A5 F6F0A4F8F1A8FEF7B0FFFEBAFFFABAF8F0B2FAF6B1F7F3ADF5F0ACFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFFF8F2FDEFDBF3ECC3EEEFC0FCFCF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F7DBECEDB8ECEDC0F3F3DAFBFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFAFAE2E8E8B2E1E1A0 FAFADFFFFFF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5ECFEEAD6F3DDBEF3E5CFFBF8F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E6E6E6E5E5E5 FBFBFBFFFFFFFDFDF6F3F6D1E8D88BE0BB55ECD294FDFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC F4E4BFE1B752EECE8CFFF0E2FFFBF8FFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F7FFEFEFFFEEEEFFEEEEFFEFEEFFF7EFFFFFF2FFFFFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 FFFCF0FFF3EFFFEEEEFFEFEEFFF8EFFFFFF2FFFFFEF5F6F6E7E7E7E1E1E1E8E8E8F7F7F7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE4E4E4CDCDCD CCCCCCDCDCDCF0F0F0FDFDFEFDFDFFF3F4F5E5E6E7D9DADAEAEAEAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFAF7FEEFE0F5E4CAEEE0BBEEECBBF6F0D3FEF2F0FFF9FCFFFEFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D884DFD784DED686E0D585 DBD080E2D585E7DB89C1B55FC4B55FECDE85E1D67ED8CE7BDDD481E3D987E3DA88E1D887E2D888 E6DC8CE5DB8CE6DC8EE6DC8EE2D78BDED38AE6D993E4D990DFD386E6DB89E1D882DBD278DBD276 D6CD71D8CF73E2D97DE5DB82DCD483E0D789EBE293EFE796ECE493EFE796F6EE9BF3EB96F0E893 F0E892EDE68FEAE28DEFE495EFE495FCF1A2F9EE9FECE191FBF0A1F1E697F3E899EFE494EFE494 EEE393EADF8FEDE38FECE28BEBE189EAE087EBE189F3E994F0E493EDE292F3E89BF4E89FF5E9A1 F7EBA3ECE096F1E599F0E597E1D686E9DE8EEDE291ECE191EBDF91EADF91EADE94EBDF96EFE399 EEE298EDE197EEE298F0E49AF1E59BF5E99FF7EBA1F3E79DEBDF95EADE94EEE298F5E9A1EFE39B EADE94ECE094F1E698F3E89BF2E69AF1E59DEFE29CEFE29EF4E6A4F0E49DF0E69AF6ECA0F6EBA0 F2E89CF0E59AE7DD91F2E79CF6ECA0F2E79CF5EA9EF8EEA2F6EA9FF3E79BECE094F2E798EADF90 EFE494F7EC9BF1E696F6EB9DF9EDA1F3E79DF0E49BF7EB9FFDF1A7F2E69CF2E59FF7EAA6F4E7A3 F8EBA7EEE19BF0E49CF6EAA0F4E89CF1E397F9E99DF9E99DF6E79BF2E598F1E397F7EAA0F4E89E ECE299E9E096EEE49BF8EEA7F7EBA1F6EA9FF1E59AF1E59AF7EBA0F4E89DFAEEA3F7EBA0EFE398 EEE298F3E79CF0E598F1E69AF0E59CFAEEADF3E6AAF1E5A8E5DB9CF6EDA9E3DB97CEC9893E360D 382F0652462590844BC1B474DFD391EBDE9EEFE2A2ECE0A0E9DC9CF5E9A9E8DB9BE0D393D7CA8A B4A96D958E526D642D564D1159501BA09759D0C889C8C081D4CB8BEAE1A1FAF3B2D6CF8ED0C989 E7DFA3847A42978C54F0E2A6E9DB94F2E696EAE18BD1CA76DED88C6A6423C2BC82C3BE8AD2CD9C 7E794B1D1800554F27E5E39CF4F1A0BBB762D8D382CBC281B6AA77D9D0A055502476712DA19E49 F5F597B5B155E2DD8ED9D192988C5B3B2D0E30220D938560FBF0B3E6DC97F5EBA4E9DF97E8DF96 E6DD93D5CC84978C47A39856968B4C64581CC9BD7FE0D58FEDE39AE3D98FC1B86ABCB364D5CD7D E9E091E6DD8FE3DA8EE8DE95A89E555A500BB4A964F6EB9BF6EA9FF1E2A0F7EAA1A99F47D0C96D F0E6AA5F553A0B04008B8852D7D0979F9255B1A75CE7DE89F1E792E9DE91EADEA09384575E512C F9ECAEDCD486F2EA938578339E924EEEE499DCD685E5E195D6D18D1C1500968D62E1D5A0E3D995 F3E997DBD482D9D290312901B1A865DED391D9CC88EBDC99F8ECA9C7BC7A413803CFC786E8E2A4 E0DB9B554F1A8D844CF2E6ABDFD495F8ECA5F4E99AE3D985EFE795EAE199D6CD92413804D3C987 F9EE9FEDE694E7DE993F36098B8161FFFFD3F6EFADF2EE97F9F398F8EE9EF4EAA6FEF3B1FAF1AF F4EBA9FAF1AEF2E9A5F6EDA9FDF4AFF9F1A9F7EFA6F7EFA7FBF3ABFDF5ADFAF2AAF9F0ABFBF2B0 FBF2B1F9EFB1FAEFB1FAF0B3F9EFAEF8EFADF9F0ABF6EDA6F9F1ADF9F2B0F8F0ADF5EEA8F3ECA4 F0EAA1F8F1A9F7F0AAFAF3AFFDF6B6FAF2B4F1E9ABF7F3AAF8F4AAF8F5ACFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFCFDF0DFFBE3C0FCF0CCFDFEE3FFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEEFF9F9D6E7E7ABE7E7B6F7F7E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEECF6F7CEEAEAB4 E6E6B5FAFAEEFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCF9EFEAE7B9ECE9BDF9F5E5 FFFDFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E6E6E6 E5E5E5FBFBFBFFFFFCFAFAEBE6E4ADDDCE7DDDC26BECDBA9FDFBF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFDFAF3E9CAE0C370EBC985FADDB8FEF5EAFFFFFEFDFDFEEDEDEDE3E3E3F2F2F2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC FFFBF6FCFAF2FAFAF0FAFAF0FCFAF2FEF8F3FFEAE8FFDFDEFFDDDDFFDDDDFFDEDDFFECDBFEF9DB FBFBEAFAF9EBFAF7E6FCF7EAFFFAF6FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAFCFCF4FAFAF0FAFAF0FAFAF0FAFAEE FDFBE2FFF4DAFFE5DCFFDCDDFFDFDDFFEDDBFEF9DCFEF9ECDBD8D4B0AFAF9D9D9EAFAFAFD6D6D6 F2F2F3F0F0F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2F2F2E9E9E9BFBFBF 999999989898AAAAAAC2C2C2E1E1DBEFEEE6E9E7E0E9E5E3F7F7F7FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFDF5FBF6E4FBE9C8F7D7A6E9C98CDDC479DDD476EAD597F8D7C1FEEEE6FFFDF9FFFFFF FDFDFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D07CD1C976D5CD7C D9CF7FD4C979DACD7DE4D886BDB15BC0B25BE2D47BE1D67EDFD381DFD482DDD280DBD07EE0D585 E4D989E2D787E5DA8BE7DC8DE7DC8CE1D589DDD188E1D48DE1D58ADCD183DDD281E5DA87E0D67F DFD57BD6CD72D8CF74E8E084EDE38BEBE390E9E092EDE495ECE493EAE291F0E897EAE28EEEE692 F5ED98F9F19CF5ED98F0E894F8EC9DE1D686D1C676F8ED9DF4E999EADF8FEDE292F1E696EEE393 EEE393F0E595ECE18FEDE38EEFE58EEBE189EAE087E8DE85EDE38BF1E792F3E897F1E696EADE93 F0E49BF3E79FEBDF97F0E49BF0E49AE2D689E7DC8CE7DC8DEADE90EEE195EFE399F2E69DF7EBA3 F5E99EF1E59BF0E49AF4E89EF7EBA1F8ECA2F0E49AF8ECA2FAEEA4F1E59BEADE94E9DD93F1E59B F2E69DF5E99EF1E599F0E498F4E89CF5E99EF5E9A1F3E7A0F1E4A0EFE29EE9DD94F0E498F8ECA0 EFE397E8DC90EEE296EBDF93E7DB8FF4E89CFAEEA2EFE397F6EA9EE8DC90F5E99DEEE394F5EA9A F2E797E9DE8EE9DE8EF2E799FDF1A7FAEDA6F6E9A3FBEEA8F5E99EFAEEA3F4E89FF1E49EF6E9A5 FCEFABF6E9A5EFE29CF2E69EF9EDA3F5E99DF3E59BFAE9A1EFDE98EDDE96F1E49AF6E89FFAEDA3 F6EAA0F3EA9FF2E99EF7EEA3FEF6ABFAEEA4F7EBA1F0E499F0E499F8ECA2F9EDA3F5E99FF1E59B EADE94EDE197F4E89EF2E69DEEE49FF8EEAAF1E7A1E0D78FEEE5A0EEE4A7D6CA97564B1A261C02 706730B8B275E9E19EEFE09EF2E3A0EFE09DF1E29EF2E39FF3E49FF1E39DF5E7A0EEE098E9DB92 E8DB92F5EBA5FEF5B3F0E5A7E1D79CA99E67564C155F561FB8AF77B6AF74BDB878CCC784E3DE99 E2DB96D5CC8CD6C99271632FADA166EFE69CEFE98FE1DC7AEBE88BE5E295666128BCB586DBD4A6 4E461B0C0400716B3BF4F1B1F1EF9AEDEE8AE7E580ADA952FBF5B8B7A98561562F6E6931CFCB82 E7E58EB9B85CE8E391EAE2A29E93640A00005E5032E0D4A4F5E9ADDBD18BF1E89EE4DA92F9EFA8 D5CB86A79C59A19654D9CE8C746927766C27EFE4A0F3E9A3E6DD91DFD689B9B062C5BC6DEEE596 E5DC8DEEE596E4DB8FE9E095A1974E392F00C8BD74EFE496E2D68CE7DA93F0E39DAFA454C3BA67 FFFCB69A8D67120600483F1ECAC985CCC181908042EBDF8CE1D87BE7DE86DED48FF8EAB7362A00 ACA267F2EAA2E9E294BBB467615713D8CE88D8CF87E3DD92FBF5AE6D68242C2612ECE4A9ECE3A9 E1D794EEE296E4DC8E7C753B746D30D3C98BE5DA9CE8DA9CE1D396FCEFB35D5114786E36EFE6AC FCF4BA726A326D6624FFF9B6EDE2A1EEE4A0EBDE96F5EA9CE4D989E4DA8DD9CF8BB8AE744D410E E7DD97F4E998F7F0A0E8DF9B30270099906AFEF6C5F2ECABF3EE9DF9F19EF8ECA2F4E9A7FEF4B4 FBF2B1F6EDACFDF4B1F8EFACFBF3B0FFFAB4FCF3AEF6EFA6F7EFA7FBF3ABFEF6AEFFF7AFFEF5B0 FEF5B1FFF6B5FBF1B3FCF2B4FFF6B6FFF8B6FFF8B4FEF5B0FAF1AAFAF2AEF9F1B0F7EFAEF7EFAD F6F0ABF7F0ACFEF8B7FCF4B3FAF2B2FCF4B6FAF1B4F4EBAEEFEBA3F4F0A7FBF7B0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFDFDFDFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFDF9F5EED3EDE2B0F6F1D0FFFFF6FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFAFCFCE9E6E6B0E6E6ACF6F6D4FFFFF4FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF4F4D6ECEBB8 EEEEC7F5F5E0FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEF8F5F6D2F5EFC5 FCEBCFFFF2E6FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 E6E6E6E5E5E6FBFBFAFFFFF3FAF7D8E4D38BDBC772DDCE80EDE6BDFDFCF7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCF4F0D7E0D38CE2C87BEBCC8BF9EFDBFFFEFCFDFEFEECECECE2E2E2F1F1F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFCFCFCFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFDFDFD FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFCFCFCFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFC FFF6EDFDEBD3F3E9C5E9E9BCE9E9BCF2E9C5FCE8D1FFE1D8FFDCDBFFDBDBFFDBDBFFDCDAFFE2D0 FCE9C4EFEAC0E9E1A5EAD788F3DB9DFDEAD2FFF7EEFFFFFEFFFEFEFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFDFFFFF5FDFCE5F2F2CEE9E9BCE9E9BDE9E9BC EBE9BDF6EAC1FEE6CAFFDFD5FFDADCFFDCDAFFE3CFFCE6C3F3DDC2B0A2935F5B573D3E3D595959 949493BFBFBEBCBCBBBCBCBCBDBDBCBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB9B9B9 A4A4A4919191929292828282777774A2A289D3CEA7E9DABAF6E5D3FEFBF7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFBFFFFF1F8F1C6EDDB8DE8CB68E8C764E1C974DBCB80DBC672E1BA6CE9B776F6DFB7FEFCE9 FFFFFBFDFDFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3CB77CEC673 D7CF7FDDD383D4C979D4C777DFD381C6BA64DCCE77E0D279E3D87FE6DC86E9DF8ADFD581D8CD7B E2D785EADF8EE5DA8AE2D887E2D787E1D687DFD485E1D58ADCD085DFD388E8DD8FE2D787E8DD8A DDD37EE3D983E2D881E4DA82F0E68DE7DD85F0E895EEE695F0E897EDE594E9E18FEDE592E9E18E ECE491F3EB98F8F09DF5ED9BF0E895F8ED9DD4C979C0B565F5EA9AECE191E3D888F0E595F3E898 EEE394EEE393F1E696EFE492F3E995F3E992EAE088EBE188ECE289EAE089EDE38EF5EA98F4E999 ECE093EDE196EFE49BEBDF97EBDF96EBDF95E0D488DBD082DFD387E5D98DEADE94ECE098EDE099 EFE39BF0E49AEADE94EADE94EFE399F3E79DF4E89EF1E59BF4E89EF5E99FF4E89EF4E89EF4E89E F3E79CEEE296ECE094E5D98DE9DD91F2E69BF1E59BF0E49CF0E49CF1E49DEFE29CE9DC93ECE094 F1E599EBDF93E7DB8FEFE397F1E599EDE195EDE195F1E599F1E599EDE195EDE293EFE495ECE192 F0E595E5DA8AECE191ECE192F2E79AF9EDA3F6E9A4F4E7A4FBEEA8EEE297F1E59AF8EBA2ECDE99 E9DC98F4E7A3ECDF9BF2E59FF1E59DEDE197EDE296F4E69EFCEBA5F2E19CF6E7A2FAEDA6F4E69F EFE29BF0E49BF4EBA0F6EDA2F7EEA3F8EFA3F5EAA0F7EBA3F3E79FF4E8A0FAEEA6F6EAA3F3E79F F3E7A0F2E69EF6EAA2F7EBA3ECDF99E7DD9FE6DC9BEEE69EFFFAB1EFE8A39F96631E1200433716 B4A97BEFE6ABE0DA8FE2DA8FE9DC9AEBDF9BEADE99EDE09AE8DC95E4D991EADF95E9DE93EFE497 E2D68ADED286E3D78AE5D98EE3D791F8ECACF9EFB4E1D5A0837944504810B7B174D0CB89C5C37B BDBB6EE5DE8CE3D98FE6DA9CC5B8817C7133DED78ADAD679D1D06BE5E489BFBB78676135A09876 4E45251007007F7645F0E9B3FAF3AEDFDA85DDDA79F6F293D0CC79CEC68882764A686029E1DF95 B4B066D4D088ABA664D4CA956F6340190C00625335E2D6A1FAF3ADE3DA85DBD281E8DF92EAE097 CCC27D8C8140C7BC7DE5DA9A7C71309F9550E8DF98F7F2AAE9E094DFD687BDB565C8C070DDD485 F3EA9BECE394F2EDA1F1E89DAEA45D544A04C2B872DED389DFD482ECDF9BDBCE88CDC3718A8129 F7F2B1CEC19C271907261C04A8A368C6C376A29555B7A262F4E68DE9E17EECE38CFEF3B8A39668 3A310CE5DE97E5DF90E3DD8F756D26B7AE64FAF0A8D4CB88EDE5A9BEB77B231F00A4A15BEBE5A0 E4DD97E0D792E2D895C7BC7C312800ADA367D9CF92EAE0A4EDE1A7F0E5ACBBAF77180B00D2C78F FEF2BD877C46625817EEE59CE7DD95F1E79FE9E097EADE92EADE92F8ECA1E7DD94EDE2A1645A22 91864FEBE298E7DC8CEDE59AC8BF7F191100B4AC7AFDF6BFF3EDABF2ECA2F6EDA1F8EDA6FCF1B1 FCF2B1FAF1B0F4EBAAFBF2B1F4EBA8F7EEABFAF0ADF8EFAAF8EFAAF7EFA7F7EFA7F9F1A8FBF3AB FAF1ABFCF3AFFEF5B2FFF6B5FDF4B3FDF4B3FDF4B2FBF2AEFAF2ACFBF3AAF7EFACF7EFB0FBF3B4 FDF5B6FEF6B6FEF6B6FEF7B8FCF4B5FCF3B6FFF7BCFDF4BAF8EFB4F7F2AEF9F5B1FDF7B7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF6F6F6E8E8E8D4D4D4C9C9C9CDCDCDDEDEDEF9F9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3F3F3E1E1E1D2D2D2D6D6D6F8F8F8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4E1E1E1D4D4D4CECECECACACAC8C8C8CDCDCDDDDDDDEEEEEEFAFAFAFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDF9F8F8E9EDEDC5E7E8B1F3F4D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCF7ECECC6E9E9B4F2F2C4FBFBE1FEFEFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF4F0ECC6 E8E2ADF5F2DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFEE FDF4D3F9E3BBFAE9CFFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7E6E6E6E5E5E6FBFBFAFFFFF0FAF4CDE4C46DDEC469E3DC98F1F3D3FDFDFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF6F4E4E6DEA9DEC674DFBD62F5E9CCFFFEFBFDFDFEE9E9E9DCDCDCEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBF1F1F1E8E8E8DEDEDED4D4D4CDCDCDC8C8C8C9C9C9CFCFCFD4D4D4 DEDEDEF2F2F2FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EBEBEBD7D7D7CFCFCF E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFCECECECDCDCDCD2D2D2CBCBCBC8C8C8CACACAD5D5D5E6E6E6F6F6F6FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAFBFDF8F4 F9F6E9FAECD3FCDDB8EFDEADE2E2A8E2E2A7EDE2B2FBE2C3FFE3D6FFE3E2FFE3E3FFE3E3FFE3E2 FFE3D4FBE1C1EBDEAFE0CC76DDB83EEBC361FBE1B7FBF0D8F9F7E9FEF7EEFFFBF6FFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFDFDF3F9F9E9FBF7DEFBF5CFEEEBB8E2E2A7E2E2A8 E2E2A7E5E2AAF3E2B8FEE2CAFFE3DBFFE3E5FFE3E1FFE2D3FBDEC1EFD1B49A846C3429180D0A00 303026727265A3A393A0A090A3A39BA7A7A7A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A7A7A7A0A0A09898989595957474755A5955888561C8BA7AEAC98AFCD8AAFEF2E4FFFBF7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBFCFEF6EFFAEDC6EEDB8AE0C54FDDBE3CE2C859E3D787E3DEA7E3CB93DFB56EDEAC5BF0D9A2 FEFBE3FFFFF9FDFDFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2CA76 DBD380E4DC8CDFD585DACF7FDBCE7EE1D583D5C872D9CA74D0C269D1C36CD6CB75E0D480E4D985 DFD380E5D987E8DD8BE8DC8BE5D98AE4D889E0D384DCD081E2D689DFD388E4D88CEEE394E7DC8D E8DD8DDED382E4D986E5DB84E6DC85E3D981E9DE86EBE38FEDE593EBE390E9E18FEBE390EEE693 EEE693F2EA97F4EC9AF3EB99F1E997EFE796F3E897F2E796F9EE9DFAEF9EEBE08FF7EC9BF8ED9C F8ED9CF6EB9AEBE08FEADF8DF0E593F2E894F3E994EDE38BEEE48BF5EB92F0E68DF0E68FF3E995 F6EB9AF7EC9DEFE396EDE198EFE29CEBDF98E4D88EE1D58BDBCF83E0D488E9DD91EDE197E8DC94 E5D891E7DB93E9DD95F0E49AEEE298EDE197F2E69CF2E69CF2E69CF6EAA0F3E79DEFE399F4E89E F8ECA0F1E698EEE395F1E598EEE296E7DB91E3D78DE5D98FE9DD94EFE39AF7EBA2F2E69DECDF95 E6DA8DE7DB8DEEE194EEE294EFE395E7DA8DF2E598EADD90E0D386EADD90E7DA8DFCF0A3EADF91 ECE192F5EA9AEDE292F6EB9BF3E899EFE399F8ECA4F3E6A0ECDE9CF7EAA6F2E69BF4E89EF3E79D EDE09AE7DA96F3E6A2EFE29EE8DB95F1E59DEEE299F3E79BFAECA4F8E7A2F1E09AF7E9A3FEF1AB F6E7A0F0E39AF0E49AF5ECA1F7EEA2F4EB9FF7EFA1F3E79DF5E9A0F8ECA2F8ECA2F8ECA3F5E9A0 FBEFA5F7EBA1F6EAA1F9EDA4F4E89FE6DC93ECE79BE4DD97FAF4B6F0E7B15C5131180D00887D53 E9E0A8F5EDB0E3DC9AE8E29BE9E19CEFE6A6F4EBABF9F0ADF3EBA6F4ECA7F9F1AAF4ECA3F0E89F EDE69BD5CE81DBD487F2E896E3D683EADE8FEEE19AE3D997EBE0A5EFE4AABEB5785F5A15ACA861 E9E697C5C46FCCC668EBE18BE5DB92F1E5A6938A49A59E52F0EC94DFDE84C6C575BFBB825F5938 362B1F180E00A19564F7F4BDE9E09EE4DD94E7E294E9E396FAF5A9C1BA72433C00BBB372E2DE96 BDBB6ECEC888C0B985B1A87D3326182E210D8E8358F3E9AFE0D88FE4DD87DCD579E3DB87E0D788 A99F56998F4AEDE2A1C4B97A4C410AA59A59F4EAA5E8DE94F4EB9DCDC474AAA250CDC573EEE695 F1E899E2D98BE7DE92FAF1A6988E474F4500B9AF68F0E6A0DCD187EBDF90E3D991D1C7798C862B F1EA98F7EABC574736110200786E3DE9E597DAD487AE9D5DE3CD8BF4E589E7DC7BE3DC89EAE0A7 2E220E888049F5EEA5F3EC9BBAB3669A904CEFE793EDE497E3D99FF1E6BC413A20504A18EFECA3 E3E28CABA852EDE59FF3E6B0897C4A3E3310C1B876F2E8ABE4DAA0EDE0ABEEE1AE524622998C57 F7EBB7867A48413400D0C685F6EC9FEAE093DCD284EFE697F8EEA2EEE49AE7DD95E9E09DB7AC6C 352800E2D598FBEFA2F5EC9DF5EBA6A3985E181000D7D197FAF5B7F7F1AEFBF4ADFAEFABF8EBA9 FDF2B2F5EAACFCF3B4F8EEAFF8EFAEF3EAA8FCF3B2F8F0ADF5ECA9F7EEA9F8EFA9FBF4AEF7EFA7 F8F0A7FBF3ABFCF3ADFEF6B3FEF5B5F8EFAEF7EEADF9F0ADF8EEAAF3EBA3F3EBA2F6EEAAFAF2B1 FEF6B7FEF7B9FDF5B7FBF3B6FEF5B9FBF2B7FBF2B9FFF7BDFEF5BCF8EFB6FBF5B8FDF7BAFDF8BE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCDCDCA6A6A65D5D5D353535434343818181E9E9E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9D2D2D28F8F8F545454656565E4E4E4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD4D4D48C8D8C5C5D5C4848483737373131314343437D7D7DBDBDBDEAEAEA FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F6E3E8E8B8EAEAB2F8F8D1FDFDEDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFCFCF6F2F2D6E8E8B3ECECC2FDFDF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FFFDE4 FCEDC6FAE2BEFDF2E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFEF5F4DAE8E4AFEDEAC2FDFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F7F7E6E6E6E5E5E5FBFBFBFFFFFBFAF2DBE4BB56E6C562F4EBB4FDFFECFFFFFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFDF4F2F8DDCDEAC077E1B345F5E6C2FFFEFBFCFCFDDDDDDDCACACA E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEEFEFEFCACACAA5A5A58282825C5C5C414141323232363636494949 5D5D5D818181CBCBCBECECECFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7B3B3B36A6A6A 4A4A4AA6A6A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3F3B7B7B77A7A7A5555553D3D3D303030373737606060A0A0A0DADADAF8F8F8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFECEE F7E2D2E9E0B3EBDEA7FCDEB9FCECD5F9F9EDF9F9EDFBF9EFFEF9F3FFF9F6FFF9F9FFF9F9FFF9F9 FFF9F9FFF9F6FEF5EFFCE6DFEFC698E2A94CEBC370F8EFC2EDEBB9E7E0A9FAE1BDFFEEDCFFFDFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFEDF6F6CFE9E7B1EDDFABFCE4C0FCEFDAF9F9EE F9F9EDF9F9EDF9F9EDFDF9F0FFF9F4FFF9F7FFF9F9FFF9F9FFF9F6FEF8F2FFFAF5C1B398755D2A 63532485835EB2B280D1D193CFCF93DDDDBDEBEBE8EDEDEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EEEEEEE8E8E8CACACAABABAB979797A2A2A3BAB8B5DCCDB8EDC98FE8B14DE9AF49FBDAB0FFF0E1 FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFF1F1FBDBCDEAB65CE0B545DDCC6FE8E4A9F7F2D6F9F7E6F9F8ECF9F4E7ECE3D4E1D6C5 F0EBE0FEFDF8FFFFFEFDFDFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D7CF7BE0D885E3DB8ADED484E4D989DBCE7EDED280DCD07ADBCC76DFD178E3D67DDCD07AE3D783 EADE8AE4D884E8DC8AE2D684DCD07EE2D586E6D98AE5D889E4D788E1D586DFD387E7DB8FE7DC8E E2D788EADF90E6DB8CE6DB8AE3D884EAE08BE3D981E8DE86F4EC97F8F09DF2EA97ECE491EBE390 E8E08DF6EE9BF7EF9DF8F09FF8F09FF6EE9DF5ED9CF6EB98F3E896F5EA98F3E896F0E593F1E694 EFE492F2E795F4E997EFE492EEE391ECE18FE7DC8AEEE48EEFE58EEBE188EAE087E9DF86EBE188 ECE28CF0E592F5EA9AF1E597EDE198EDE199ECE096E8DC92E6DA8EE6DB8CE4D88CE7DB8FEBDF95 EDE199EBDE97E9DD95EADE94F3E79DEEE298EBDF95EEE298ECE096EEE298F6EAA0F3E79DEADE94 EDE197F4E89CEFE494EADF90EDE294F2E69AEEE298E8DC92E9DD93E8DC92E9DD93F3E79DF2E69C EADD90EFE294EDE092EBDE90F3E698F0E395F0E395F5E89AECDF91E6D98BEFE294F1E496EEE296 F1E59AF3E89AE2D787DCD180F6EB9BEDE195E9DD92F7EBA3F5E8A3F2E4A2FFF4AFE5D98EF1E59B F0E49AF1E49EE5D894EBDE9AEEE19DE2D58FEDE199F0E49BEFE397F2E49BF5E49EEEDD95F3E49C F7E9A0F1E39AF3E69DF1E59BEDE497E6DD90E3DA8DF2EA9DF5E99DF7EB9FFAEEA3F9EDA3F7EB9F F6EA9EF2E69CF0E498F7EB9FF8ECA2F0E499F0E69AF1ED9CECE8A2E8E1AC605638211500C2B68B FBF2B8ECE5A0F6F0A6E9E29BEEE6A4FFFEC4E0D99BB6B171A6A1609893518A8543938D499C9751 B0AC65DDD990EEEAA1E7E399EDE491E3D87FEADE89E4D88AD7CB83E6DC97E3DA95E6DD97C0B96E 5E5908B2B15BECEA8FDDD774DBD576E1DA87ECE39BBEB77067631AEBE89BCCC980CECA8AA59E71 22180F180C01A39766FEFCC4EAE19BE9E295E6DE95DED795F6ECB5C9BF89534A0FACA65ED1CC78 F8F6A5C3C07ECBC492877C57180D04392C14BBB17FFCF5AFDDD683E2DD82E1DB83F1EA97C3BA6B 968D40B9B066FCF2ADD8CD8B4A3F0CA29755EEE3A0DFD58DF1E89CD2C97BB5AC5CD8D07FEBE392 EAE192F9F0A2EEE59AEFE69B8F853D564C05CEC47DE7DD96D7CD85E7DC96EBDE98DDD584958F35 CEC971FEF4B9A699791203034C3F19CFC785D5CF7BC9C173C2B16BDDC982DFD077F9EE93F9F0A3 A79F68312900EAE3ACF4EDA2CEC77680772AD3C983EEE78FD6D080F3EAB5968C6F130B008D8757 B5B365D9D97BEEED90F9F3AAE1D5A5291A00AEA462E8DD9ADDD396F6ECB3E9DDA9BBB17F564919 FFF8C68D814E3D3200C9BC82FAEDA9E8DD8EEADF8FF7EE9BF0E897E7DE90E3DA92D3C984F2E7A8 5F5117857738FFF4B2EDE193EDE296F3E9AB665A253D3419E7E2A1F0ECA5EEE9A2F6EEADFAEFB1 F6E9AAF6EBABFCF1B4FDF3B5F8EEB0FEF5B4F9F0AFFFF6B5F3EAA7F5ECA9F8EFACF3EAA5FAF1AC F6EEA5F9F1A8F5EDA5F6EDA6FEF5B0FDF4B2F7EEADF9F0ADFAF1ACF8F0A9F6EEA5F8F0A7F1EAA4 F2EAA9F8F0B1F8F0B2F7EFB1F9F0B5FAF1B6FAF1B7FEF5BCFFF7BEFEF5BCF8EFB6FDF7BDFFFAC4 FFFDC7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCF6F6F6B3B3B36060602A2A2A171717252525686868E5E5E5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8C8C8C87C7C7C3D3D3D525252E1E1E1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8E7E7E7B8B8B88A8B8A6566655C5C5C6363635959594D4D4D3F403F4D4D4D707070 C6C6C6FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4DDE4E4ACE9E9B4FCFCE6FFFFF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5DFE5E5AEE8E8BAFCFCF7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAE8 F3F2C8F6ECC4FEEEDBFFF8F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9E7F0EFC3F3ECC2FEF1E0FFF9F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7F7F7E7E7E7E6E6E6FBFAFAFFF7EEFAE5C4E3B447E8C464F9EFC7FFFFFBFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAFBFDEAE3ECC67FE1B13CF5E5B3FFFDF0FDFEFCEBEBEB E0E0E0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCDFDFDF9595956A6A6A4E4E4E4747474949494F4F4F555555 5252524646464646466D6D6DA4A4A4D8D8D8F4F4F4FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2A5A5A5 5353533434349B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC F0F0F0D0D0D09E9E9E7878785E5E5E6464645E5E5E5252523F3F3F3E3E3E5B5B5B999999EFEFEF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8EAF2EED1 FAE1CBF9E0C9F1E7C6F2EBC9FDEDD7FFF6ECFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFDFAF4F4E7C6E8C98AE0B15EEBCB8DFAF6DAF3F3D4EFE7BFFCDEB8F8E4C0 F2EFD0F9FAEEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F0FDF0DDF4EFC6EEEEBDEDECC1F3EBCAFDEDD9FFF7EF FFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFEFFFCFAFFF6ECDCC594 AE8E38AA9758C5C3A7DDDDBCEBEBBFEAEAB4ECECB7F0F0C1F9F9DEFEFEF2FEFEFBFEFEFFFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFFFFFFFAFAFADEDEDEC5C5C5C2C2C2D1D1D2E6E4E3F7EDE4FAE0BDF2C47BECB256EFBC74 F7DDB3FFFDEEFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFCFFFEF0F7E6BEEFCB87ECB85FEBC474ECE0ACF4F5DFFEFDF9FFFFFEFCFCFBF2F1F1EDEDEC EDECEBF7F7F6FEFEFEFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD3CB77E0D885E7DF8EE3D988E3D888E5D888E0D483DDD17BDFD07AE4D67DE9DC83E2D680 E6DA84EADE88E5D983ECE08CE7DB88E6DA88ECE08EECE08FE9DC8DE6D98ADCD181DED383E6DB8B E3D78BDFD388EADE91E8DD8FE5DA8ADDD282ECE18EE8DE88E2D880ECE48FF3EB96F3EB95F0E893 F1E994ECE491F7EF9FF2EA99F1EA98F6ED9EF6ED9EF1E998F3E895F5EB96EEE48FEFE590F2E893 EDE38EEFE590F2E892F2E892F7ED98F4EA95EAE08CE6DB89E7DD88EBE18AEBE189E6DD82E1D87D DED57BE4DA81E7DD87E5DA88EDE291F2E69BE7DB93ECE096F2E69CEBDF92F0E595E7DC8DE3D889 E5D98CEDE196EFE399EADE96EDE197EFE399EFE399F1E59BF3E79DF0E49AF1E59BF4E89EF1E59B ECE096ECE096EFE397F1E694ECE190EDE193EFE396EDE197E3D78EDBCF88E1D58BE5D98EECE094 F0E498EADE90F6E99BF3E698E7DA8CF1E496EEE193F4E89AF1E496F0E395F5E89AF4E799EEE095 FBEFA5F4E89FF2E69BECE095E7DC8EF0E495F7EBA0EEE298F4E8A0F2E6A0EFE19FFCEEAAE9DD92 F1E59AEFE399F3E6A0EBDE99F1E4A0F5E8A4F2E59FF2E69EF6EAA1F3E79BEDDF93F4E498F2E296 F2E397F0E296EBDD91EDE194EBDF93E9E194E7DE91E7DE91F5EC9FF2E69AF1E697F3E899F3E79A F2E798F1E697E8DC8FEBE091F7EC9DEEE295E3D789F4EAA0F3EFACEBE6A94F4924130C00C1BB8C F6EEBEDFD9A1ECE4A7F0E9A4CDC77E8E8544615A15585313706C2C84803F84803E8B8744938F4C 908C4885823D75712B85823CB0AC66CCC576F2E893EDE390E7DC8BF6EB9BE7DE91DAD184DFD888 EAE393CDC97598933CD9D47AEAE486D0CA6ED5CF78DAD685F6F3A8706E2A7A763AC2BD88B1AA7B 332B151A0F03A79A72FFFFC8EBE199EEE696F3EB99EDE59BF3EAB0ADA0734B3F16C0B782EDE69D C6C567F4F2A7E1DAAE6A5F3F180E00504720D8D197F8F3A0E3E17CEAE77FEFEA8CE9E295BCB074 928744DBD18AFAEFA9B6AC64756B25C2B871F4EBA2EBE198EBE297BEB568B8AF62EDE496F4EB9B E7DE8FF6ED9FE7DE92F5ECA2A0964E524803C5BB73FDF6ADE5DC91DBD286D9CE8BEEE0A29A9338 BDB758F9F2ABE2D6B5281C15241B03CBC287EEE6A0C5BC6EAAA14EDECE80DECC7FE5D684D9D081 F8F0AB4B441A999360FEF8BDCDC67E6C6214BFB366EADC93D0C874F8F1A6D3CA94281E095B5330 726F3BA4A559AFB156E5E48BE3DD97483C1A857649FCF0ACE8DE98E3DA9AEAE1A6DAD19B443D11 D0C793948A54403600D7CF92F9F0AEE4D68FE9DB8DEFE390EEE58FE4DC89E8E191CFC780E6DD9E AEA16B4D3E09F6E7A4F2E399F4E898DBCF87E8DCA5281C00726937FCF8B2F3EFA3F0EBA3F6EEAF FDF0B6FAEDAFF4E9A6FDF2B5F3E9ABEEE4A6FFF4B7FCF3B3FDF5B4FAF2B1FCF3B1FAF1AEF1E8A5 FBF2ADFAF2AAF5EDA3F1E9A0F2EAA3FDF4AFFEF5B2F7EEABF5ECA9F2EAA4F0E8A1F2EAA1F8F0A6 F5EEA7F9F2AEFEF7B6FBF4B5F9F1B3FFF5BAF4EBB2FAF1B8FFF6BDFEF5BAF9F0B4F7EEB1FBF5BD FEF8C2FEF9C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7F7F7DFDFDF8787872A2A2A1818182221222A2A2A666666E5E5E5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8CCCCCC8A8A8A5858586C6C6C E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEE9E9E9C1C1C16262624748475E5F5E898989ACACACAEAEAE9D9D9D6C6D6C3A3B3A 2929299A9A9AEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEF5F3DAE6E6B0EBEBC0FDFDF6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6E3E7E7B5E9E9BCFAFAEF FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4F4DAE5E5AEEDEBC3FDFBF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFF4FDFBDFFCEEC7FCE4C3FEF2E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF6F6F6E4E4E4E3E3E4FAF9F7FDEDD8F6D6A0E2B13EE8C56DF9F0D7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F3EDD08AE0B23DF2E3A2FCFBE0FEFFF9 F9F9FAF5F5F5FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCD5D5D57474744F4F4F444444606060838383A1A1A1 A6A6A68B8B8B5B5B5B2E2E2E161616535353A8A8A8E4E4E4FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4 ADADAD686868515151AAAAAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4F4F4D5D5D59090904646464B4B4B6C6C6CA0A0A0AFAFAFA7A7A77B7B7B464646272727545454 DBDBDBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFCFCF6F0F0D0 E6E3AAF4DEB1FDE6CCFDF5E9FDFDF9FFFCF9FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFAEDE7E499DECE71E0C074EDD7AFFCFAF2FEFEF9FDF5E9FEE3C6 F2E0B2E6E3ADF1F2D6FCFCF5FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFCFCF5FDEDDAFBE0BCEADFA6EAE9BBF6F6E4FEFDFAFFFCFA FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF4FEE5CC EDCA83DBB849E4D18AF6F4E9FBFBF7FDFDEFFCFCDBF0F0B1E6E693F3F3BAFCFCDFFFFFF5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCEBEBEBE0E0E0F1F1F1F9F9F9FCFCFCFEFEFEFFF6ECFCE2C2F3C588 E3A84DEDCB83FBF6CFFEFEF2FFFFFEFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E4E4E4EDEDEDFCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFEF3FBF8D3EDDB86E3C24DF2CE85FBE2C0FCF5E9FCFDFCFCFCFCFBFBFCF6F6F7E6E6E6 EDEDEDFAFAFAFEFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD2CA76DBD380E4DC8BD6CC7CC3B868E6D989DED280E3D781E9DA83E9DB82EADC83 DACC74E2D47FECDE88E8D984EFE18DECDE8BF2E491F9EB9AF4E695F1E392EFE190E1D684DED382 E3D889E5D98CE4D88DE1D58BE4D88DE6DB8EDCD182E5DA88E8DE88EADF88EBE48DF0E992ECE58E E8E08BEAE28EE6DE8BFBF3A2F3EA9AF2E99AF8EFA0F8EFA2F3EA9BECE18EF9EF99F3E994F5EB96 F7ED98F0E691F2E893F2E893EDE38EF3E994EAE08BE3D885ECE18FE6DC86EAE089F0E68DEDE489 E5DC81E2D97EEBE188EDE38CE4DA84EDE28FF3E79BE7DB91ECE194F3E89AE9DE8EEFE493EFE493 EEE393EEE394F0E597F3E79CF4E89FEEE298EDE197F1E59BF5E99FF8ECA2F8ECA2FAEEA4F1E59B F1E59BF6EAA0F1E59BEADE91EEE490EDE290EBE191EBDF92ECE096EADE95E8DC94EEE298EFE398 ECE094EADF91E5D989E0D183E3D486EEDF91F3E395F5E597F8E99BF7E89AFCED9FFCED9FF3E395 F2E397F6E9A2F9ECA7FBEEA8F5E9A0F6EA9EFEF8ABF4E89CEBDF94F0E49AF3E79FF5E7A2FEF2AC F4E89DEEE297E3D78DEADD97EBDE9AF2E5A1F0E39FF8EBA5ECE098EEE298F3E79BEEE191F3E492 F1E190EFE190EDE18FF0E393F6EB9BF0E597F0E798F3EA9DEBE295E0D78AECE191EDE290EEE392 F2E798F4E998F3E897ECE191EEE392F5EA99E7DC8CDED281F4EAA2F4EDBF736E470D0A00A5A367 E8E5A7F3EEB3F7EFBBACA17151471A5B5311A49D53C9C272DBD48DE6DF98F3ECA5EFE8A2E6DE9A E4DC98F4ECA7FBF3AEE2DA96C5BD78A49C58877E36AEA65BDACF85F1E89AE2D989E3DB89DDD381 DFD583DCD481F6EE9BD9CF7DC4BA68F2EA9DE5DF90CCC776D3D27FE8E89E97965A6F6B3F97906B 20160D2A1F09BAB078F4E9A8E5D991F6EA9FF0E696F2E999F4EAA3A2995B786C39DAD09DECE3AB E9E49EE4E190DED89A5D542E0F0500736B40E6E0A2FAF7A7DEDB7AE8E77CEEEA85E3DD87A9A05E B0A370EEE2A8F1E7A48277326C621BD5CB80FAF1A4DED588F0E798A9A052BEB568EBE298E2D88F E2D98BDED587EBE297F2E99E91873F7A7029D9CF88F0E69FF1E89DF3EC9FDBD383EDE39BB5A766 B7AF59F5EE9EFAEFBB5D51380600009A945BE7E099F2E9A1998E44D4C973F7EA93EFE08EF3E59D E1D795BDB47A443F0BDCD799E9E4A2675F19B4A75FFBEB9EECDA8DF2E69FDFD6954F491E645E32 ACA8729E9C617E7E3BA09E56BEBB758F894F423712E5D99FE0D38AEFE49DDDD392FFF6BA534C1D 686232A19A6462591FCAC181EFE8A2D0C478F4E598ECDC8FE8D986ECE189F4ED95DCD586DCD38E F6ECAF4C3F09CDBE81F4E49CF4E595FAED9DE7DA96BAAD7A0E0100A2995FFAF7ACF1EE9AEFEA9F F3EBACFCEFB8FCEFAFF3E8A2FEF3B5F8EEB1F2E8ABFDF3B5FCF2B3FFFABBFDF6B5F9F0AFF7EEAC F1E8A5F6EDAAEDE49DEAE297F9F1A8FCF4ACFEF5AFFDF4B1FBF2AFFBF2AFF8EFAAF7EFA6F7EFA7 F8F0A5F8F0A8FDF6B0FFF9B4FAF2B3F6EEB0FBF1B7F7EEB5FBF2B9FCF2B8F5EDB0F3EBACF5EDAE F2ECAFF6F0B7F9F3BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEA5A5A5676867393A393A3B3A3C3D3C343534656565 E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECECECD5D5D5C4C4C4 CBCBCBF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEC7C7C7828282353535505050A1A1A1D7D7D7E4E4E4E7E6E7DBDBDBB5B6B5 5E5E5E1C1C1C6D6D6DC6C6C6F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFFEFE1FCECCDF5F0C5F7F8DAFEFEFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4F4F4DEEDEDC9 EBEBC4F5F5E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC FFFFF3F3F3CBE2E2A3EAEAC1FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFEF1F4EECAECE1AFF5F0D9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1D5D5D5D3D3D4F7F6F2EEEABEDED17CDAB547E7CA7FF9F1DE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF7ECD69BDEB851E4D88BF0F0C8 F9F9F0E8E8EADADADAEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE6E6E6AFAFAFA6A6A6AEAEAEBFBFBFD1D1D1 E0E0E0E4E4E4D3D3D3AEAEAE7575751616162C2C2C717171C8C8C8F9F9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F5F5E1E1E1C9C9C9C1C1C1E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0E0E09B9B9B505050323232777777C4C4C4DEDEDEE7E7E7E2E2E2C7C7C7838383333333 323232A9A9A9DFDFDFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF2EBEBC3 ECECBAF2F0C0FAF1D4FFF5E9FFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF8E8E4D573E2C85EEECD8CF9E4CBFEFCF9FFFFFFFFFDFB FFF4E9F9F1DEF1F0D3EAEABFEEEECBFAFAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FAEEEBEBC2F3E1B5FCDCB6F5E9C8F6F5E1FCFDF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF6EE EED2A9E4BF76E0BC62EEDCA7FFFDF7FFFFFFFFFFFEFFFFF4F9F9DEF1F1C5E9E9AFEFEFBCFBFBDD FFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8F5F5F5FEFEFEFFFFFFFFFFFFFFFFFFFFFEFDFEF6EC F4E3C0DEC473E1C764EBD67AFAF3D6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6F9F9F9 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAF4E0EBD891E1CF66DED05DF3E6B4FFF6EBFFFDFDF6F6F8E9E9E9E7E7E7E9E9E9 EFEFEFF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFCEC672CDC572DCD483D8CE7EC9BE6EE1D484D6CA79E1D47EE4D57FDCCE75 DDCF76DCCE76E4D680EDDE89E8D983EDDE8BEADB88F4E592F9EA99EDDE8DEBDC8BEADC8BE4D886 E2D785E2D787E6DA8DE9DD91E0D48AE2D68CEBDF95E0D587E1D586E6DC86EFE58FE8E189ECE58D EAE38BE8E08CEDE591ECE491F6EE9DF3EA9AF3EA9BF6ED9EF6ED9FF2E99AE7DC89F4EA95F7ED98 F5EB96F4EA95F1E792F4EA95F4EA95F6EC97F7ED98ECE28DE3D884E6DB89E9DF8AF0E68FEFE58D E3DA7FE1D87DE7DE83EDE38AECE28BE5DB84E9DF8BEFE494EBDF93EDE393EDE292E5DA88EAE08D EFE492EFE492F0E595F0E596F1E597F4E89DF0E49AEEE298F0E49AEFE399EFE399F3E79DFBEFA5 F2E69CF2E69CF7EBA1F2E69CE9DE8EE8DE88EEE391EFE493EDE194EFE399F5E9A0F3E79FECE096 ECE095EBE091F0E695F7E89AE5D587E5D587F4E496E9D98BE7D789F1E193F6E698F0E092E3D385 E6D688F4E699F1E29FEFE1A1EEE19EF0E39DF2E69DF4E89CF4E89CECE094EEE296F1E59CF4E8A0 FAEEA5F3E79BF2E69CEDE198F3E5A0EADD99EBDE9AECDF9CF0E39DE6DA92EADE95F1E599EDE18F F1E38BEEE088EDE189F0E490F4E895FBF09EF2E797ECE394F1E89AEEE598E6DD8FE9DE8EE5DA88 E6DB89EBE08EEFE492ECE18FF0E593F0E593F2E795EDE290EADF8CEFE69EC2BC931814089D9963 FDFBBDEFECAACECA8B676028413703A59C63FCF3AFEFE899E6DE8FF2E599EFE399EDE197EADD93 E6DA92E9DD95E7DB92D7CB83DED18BF8EBA5F5E8A2E7DE9CD2C88A9D9451B6AC66FEF5A8EEE694 ECE38EDED47FE5DA8ADCD182EADC8FD2C47D968C51D8D295F2EFA6BFC171B9BA73D1CF9D6E684B 0F0500201503CEC18CFFF7A8E6DD80EEE18FE1D687FAEDA2F1E59D9A8F48544A0FE5DC96E4DD98 EDE6A5EAE4A6E1DA9E342D100A0400968E57F9F5B0EBE995D7D378E7E483DEDA7FE0D987A29B51 CEC487FCEFB9E7DAA3685C254B410CFDF3ABF5F3A9E2DA87F9F19CB7AF5BC4BC6CF9F0A4E0D690 E2D892E0D78CE8DF93FDF3AB958B46524803DBD18AF3E9A1ECE298F0E799DFD686EEE693DAD27F A89C4EEFE59FFAEFBC988C690500005E572DE1DC97EBE59ACDC578B7AD5DEEE28DE1D579F1E58F F9EDABF3E7B23D370193904FE9E69F7C7731898040F3E4A2DDC97CEBD787E9DBA5827A4E423C00 E5E498BDBD72AAA965ABA972908B5B908A5B0B0400B9B275FFF6ADF3E79AECE097EAE19D9B9156 453E06A8A16A554F16BAB273F2EAA4EAE193F5E994E9D888EDDB8FEEE08CEDE288D0C96ED9D182 FFFEBA5E5418837441F6E4A3F0E093F4E48EE8DB8BF8EBAB6C5E362A1C00DDD49FECE99BEAE891 EFEB9EF2EAAEFCEFB8FFF4B4F9EFA7FEF3B5FEF5B9F7EDB0F7EDAFF1E7A9FAF0B2F6EDACF8EFAE FEF5B4F9F0ADF2E9A6DED58FE3DB90FCF4ABFDF5ADF7EFA7F7EEA9F9F0AEFBF2ADFAF2AAFBF3AA F9F1A8F5EDA1F4EDA3F6EFA7F7F0A9F7EFADF7EFB1FAF2B5FCF3BAFBF2B7F8F0B3F4ECADF3EBAA F6EEADF2EDABF7F2B0FAF5B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEFEFEFCBCBCB6D6D6D636463737473616361414241343434 656565E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9E9E9E9 D7D7D7CDCDCDC5C5C5C0C0C0C0C0C0C7C7C7CFCFCFD9D9D9E8E8E8F4F4F4FBFBFBF0F0F0D9D9D9 C6C6C6CBCBCBF7F7F7FFFFFFFFFFFFFFFFFFF7F7F7E8E8E8D1D1D1C9C9C9E2E2E2F1F1F1DADADA CACACABFBFBFC2C2C2CACACAD4D3D4E6E6E6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCEBEBEB9B9B9B4C4D4C3F3F3F7E7E7ED7D7D7FFFFFFFCFCFCFCFCFCF5F5F5 DDDEDD7878781D1D1D4A4A4A9F9F9FE1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF6F9E6C7F9E7C0FCF7D8FFFFF0FFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8 EFF0D0E2E2A8F0F0D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEF8F9F9D9F0F0C1E8E8B6F0F0D3FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF9F3EED0EAE2ADF5F1D2FFFFFAFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3DBDBDBDADADBF7F6F1E7E1A6D4C65CDEBE67EDD4A3 FBF4E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF8ECDEAEDCC36ADACB77 E8E2AEF6F5E8E6E7E9D7D7D7ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F6E4E4E4EAEAEAF6F6F6F9F9F9 FAFAFAFCFCFCFDFDFDF9F9F9E7E7E7B3B3B33131312222224C4C4CB4B4B4F7F7F7FFFFFFFDFDFD F7F7F7E8E8E8D9D9D9CCCCCCC4C4C4BFBFBFC2C2C2C8C8C8CFCFCFD9D9D9EAEAEAF6F6F6FEFEFE FFFFFFF7F7F7E5E5E5CDCDCDC2C2C2E1E1E1FFFFFFFFFFFFF4F4F4E4E4E4CCCCCCCECECEE6E6E6 EEEEEED4D4D4C6C6C6BFBFBFC4C4C4CECECEDADADAEFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFAFAFABEBEBE646464363636575757AEAEAEFBFBFBFCFCFCFDFDFDFAFAFAEEEEEEAAAAAA 424242232323828282C8C8C8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF9F9EDF2F2D6 E8E8BAF0F0C7FCFCE0FFFEF4FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF5DDE4C35DE7C05DF7D9A9FFF2E5FFFDFBFFFFFF FFFFFEFFFEFDFFFEFCFCFBF4EEEECBEAEAC0F2F2D6FAFAEFFEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF8F2F8EFDAE9E0B2F2E0B7FEE6CCFEF6EBFEFDFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FAF5E8E5C985DFBA6AE4C07DF2DFBEFDFBF7FFFFFFFFFFFFFFFFFEFEFEFCFBFBF2EDEDC8EAEAB9 F2F2C4FAFADCFFFFF4FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFDFBF7F6E5E7E3AFE0CC6DDFC14CEEE4AFF8F8E9FEFEFCFFFFFFFFFFFFFFFFFFFAFAFAEEEEEE F4F4F4FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCF8F8EAEFE5B8E0C25BE0CD68E7E498F7F6DBFCFBF8F7F7F8EEEEEFE6E6E6E5E5E5 EAEAEAF9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDAD17DD7CE7BDDD482DDD282D4C977E3D786D3C775DFD27DE3D47D D8CA71D9CB72DED079E1D37CE7D983E3D480ECDC88E6D883E9DB87EFE08FE1D382E3D583E9DA89 E4D884E7DC8AE4D988E1D587E9DD90EADE94E8DC93F1E49AE4D98BE5D989E7DD88E9DF88E0D982 EAE28BEEE790F0E893F3EB97F1E995EFE796F2EA99F4EB9CF3EA9BF1E89AF0E798EEE48FF4EA94 FAF09BF1E792EDE38DF4EA95EEE58FF2E892FEF49EF7EE98EDE28DECE28EEEE391EFE590F0E68F EBE188E1D87DE4DB7FEEE588EDE489E7DD84EDE38AF1E690E8DD8BF0E595F1E695E7DC8BE6DB88 ECE28DE7DD88E2D884E5DA87EEE393F0E596E9DD8FF0E499EFE398F3E79CEDE197ECE095F8ECA1 F0E499F5E99FF1E59BEADE94ECE096EFE395EEE48FF7EC9AF5EA9AEDE194ECE096F2E69EEEE299 E7DB91EEE296F0E596F0E595F8EA9BF8E99BF5E698F3E496EDDF91EDDD8FE1D082EEDF91EADB8D E0D082E9DA8CEEDF92F0E29EF1E3A2EEE19DECE099EEE299EEE298F4E89CECE095EDE196F0E49B F2E59DF3E79EF0E498F3E79CF4E89DFBEFA8EEE19BEFE29DF5E8A2E9DC95EFE39BF9EDA3F3E79B EADD8AEFE287EDDF86EFE38AF1E68EF0E48FECE18EE8DD8DEFE596F3E99CF1E79AF6EC9FF0E594 EAE08BE7DC88EBE18CECE28EE7DD88EEE58FEFE590ECE28DF1E793EDE38FD9D186555021383515 E7E4B9F4EFC3B5B07A3D390C797437E1DB8FF8F1A5E0D790E4DB9BEEE19DE8D98AECDB8CEADA8B EADA8BEBDA8DECDB8EE7D78BE1CF87E8D78FF3E29AF7E8A2F3E8ABF7EEB8D8CF93918845ADA55A E9E08FECE28EEEE490E5D988EEDF94E1D08AF5E4A5847A4E86814EE9E9A5A7A85FA9A96A817F51 1B140A1F150CA3977AFFF7B7EFE883E0D869EADF86F1E398EADB988B7E3C675D1EE7DF8DF7F29B EFEA95EAE7A0CFC98F332A142C240A9F995FF8F4A9F2F098EEED8DEEEA90EEE999CFC885988E52 BDB276FFFDBCE1D89471662974682FE4D898E9DE97E9E08EF3ED93B6B053D1CA72E7DF8DEFE59C F1E6A3E8DE9CE6DD95F0E79E918741594F0BC8BF79F5EBA5E2D890E0D68BE2D98BEFE794CEC770 9D9639D8CF76EADDAFB5A5901F130C251F02D0CC88E0DA96E9E19AA09847EBE08AEEE18ED1C56A E4D981FDF1B58377484A4218D5D48E979547777227E9DC9DE2CF91E9D48AF6E293B4A378392E0E ABA661A3A346D3D677BEC174A09E6E958E7031291759512AB8B467C9C36BEBE192F8EEA5B8AF6C 473E0E8C864C7F7A41B6B074F0E7A5E2DA8EF1E996E9DF85EADA89EAD88DECDD8BE1D77FD1C871 EDE597AEA660483D0FDFD297EFE09EEFDF90EFDF85E7DA8CDCCF952C1D106E603DF0E8B3E2DF90 ECEB91F5F1A1F5EDAEF7EBB3FCF0AEF6EBA3F7ECACFBF1B3F8EEB0FAF1B2EFE6A7F3E9A9F7EEAD FCF3B1FDF6B4F8EFABFCF3AFF1E9A1EEE69BFAF2A9F7EFA7F5EDA6F7EEA9F8EFAAF6EDA8F4ECA4 F7EFA6F9F1A8F5EDA2FAF3A6F7F2A7F5EEA6F8F1AEFBF3B3F7EFB1FBF2B6F9F0B4F9F1B4FDF5B6 FCF6B3F9F2ACF7F2AAFAF6AEFCF8B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7CCCCCC949494494949777777B6B7B67F7F7F353635 2C2C2C666666E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E4E4E4 B5B5B58484846A6A6A5959594D4D4D4F4F4F6262627574758E8E8EB8B8B8DDDDDDF3F3F3D8D8D8 9C9C9C686868767676E8E8E8FFFFFFFFFFFFFFFFFFE6E6E6B8B8B87575755C5C5C9F9F9FCECECE 9494946A6B6A4E4E4E5656566767677C7D7CADAEADEEEEEEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF0F0F0C7C7C76E6E6E2B2C2B686868B2B2B2EDEDEDFFFFFFFFFFFFFFFFFF F9F9F9E3E3E37C7C7C1B1B1B353535888888D9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBF3EBE5B6EDE7B8FAF8E3FFFFFEFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCF0F0D2E2E1A5F0EFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBF3EBEBBAEBEBBAF3F3D9FBFBF3FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFBEFDAF7E3BAFAF0CDFEFFE9FFFFFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF0F0F0F0F1F2FBF9F2EAD591DBB544EDC792 F8E1CFFEF8F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDE8C0DDD084 DAC166E7D597F8F3E2F5F6F9EEEEEEF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8CBCBCB4343432222223B3B3BAAAAAAF7F7F7FFFFFF F5F5F5DEDEDEB4B4B48989896B6B6B5757574B4B4B5252526262627272728D8D8DBEBEBEE2E2E2 FCFCFCFFFFFFEAEAEABCBCBC7B7B7B5E5E5EB1B1B1FFFFFFFFFFFFDFDFDFAEAEAE666666686868 ADADADC4C4C48383836060604C4C4C5959596F6F6F8E8E8EC5C5C5F4F4F4FFFFFFFFFFFFFFFFFF FFFFFFF9F9F9DEDEDE9494943F3F3F3D3D3D939393D4D4D4FFFFFFFFFFFFFFFFFFFDFDFDF3F3F3 AFAFAF4444441C1C1C6F6F6FBDBDBDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1EFEFCD E8E8B9F3F3DBFAFAEBFFFFF6FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F9F1CBE4B555E7BA69F8E5C7FFFDFCFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAEFF2F2D6EAEAC0EEEECAFCFCF5FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF5FEEDDAFBE1C6F7DEC9FAE8D9FFF6EDFFFDFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFDFAF3E1E3C765E5C060F2D099FBEAD6FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF9F9EF F1F1D2EAEAB6EFEFBDFCFCE0FFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFEFAF6F5E2E9D793DEBF54E1D487ECEAC1FAFAEFFFFFFFFFFFFFFEFEFEF4F4F4 D3D3D3E2E2E2FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAF0EDEAC2E1D584DEBF46E9D684F6F5D8FDFEF7F7F7F6EAEBEBEBEBEBF4F4F4 F6F6F6F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D884EDE18CECE18BDCD17AE1D37BE3D67FDCCF77E1D37B E8D984E9DB85E8D986E3D787E9DC8DE3D787DBCF7FEADD8BE4D886DDD17FE6DA86E5DA86E7DD86 E6DA84E6DC86EFE492E6DB89D9CE7CE4D987EFE392ECE090EFE592E3D984DCD27CE7DD86E5DC84 E9DE8CEFE493E5DB87EEE48FF2E891F2E890E5DB83EAE188F3EA94F4EA94F2E893F5EB97FBF39A F4ED93F3EC92F1EA90F0E68DF3E990F3E88FF1E68DF1E68DEFE58CEFE28AF3E792FCF09EF7E895 ECDF89EDE28AEEE188EADE82EEE487F2E68BF2E58DF2E78EEBDE87ECE18AF0E78DECE28AE4DA81 E3D980EAE088EBE18CE5DB87E4D988ECE192F2E798F3E899F6EB9CFDF3A2EADF8EE9DE8FF7EC9D EFE496ECE093F6EA9EF8ECA1E9DD93E9DD95F5E99EF5EA99F8EE9EF0E497F0E499EDE197F8EDA3 FAEFA4F4E99AF4E998F0E692EFE58FEEE293EFE398F2E49AECDE93EADE92F5E89BECDE90EEE394 F1E595ECE08EEBE08EF4E898F3E89AFAEEA4F5E99EE8DC90EADE93F7ECA1F0E39DE7DB95F4E6A4 FCEEAEF5E7A7F3E6A3F3E69DFCECA0F3E698F6E899F9EA9AF0E492ECDF8FEEDF8FF6E99BF6E99B F1E196F0E093F3E394F4E495F7E899F8E99AF5E698EDDE90EEE293F5E89CF2E599EFE196F5E79B F4E999F2E795F0E495F4E79AF8EB9CEFE391E8DC88EDE38DE3DD88EAE594E5DF95A29D5B181400 88845BF1ECBDB0AA742B26009C9553EEE898F4EA98E4DA88E2D588EFE29AF2E49CEDDF95E7D58C E1D288E6D78EE8D88CDFD085E5D68BEEDE93E2D386D9CC7FDFCE83E4D895F2EAAAEEE3A1EFE59C AFA657B5AE59E8DF86EFE58DE6DC84EFE38CE5D884F8ED9DCBCA866F722AC3C67BA2A1687C784F 110A0131290DCAC093CCC18BE9E097EEE87DDDD762E9E083FFF2AE695D217E7431F2E99FF0EA9B EBE69CF1EBADC9C191271E14322B00D0CC93EBE3A0E4DC88E6E081E3DE7EF1E999D2CB8299914A D5CE84FFF8AFD9D390534C1C8B813FEEE29BECDEA0EBDD9BE9DE8FC7BF5DD3CE67EAE483EDE493 D9D089F7EEA8E7E09BEBE5AA8F884B393000C4BD74F9F1A5E4D98BEADF91E2D587EBE091D1C774 B0A951D7D27EEFEDA8EFE8BC342A160C0000948B4BF1EB9AFFF8AD9E8F55C7B975F1E591E1D67F E8DF8BDBD187D2C78B342800A69E66C8C17B86822FDCD881F9F0A2E6DA98FAEAB4C7B67D150501 807333AFA760D0CC778A8B33C8CA7ACCCB9046412B2B2512ACA87BC0C1738485319F9D65C7C48D 3834026D642C655C1FD4CC89EADF9AF3E79CF4E999E8DE8AE5DB83EFE292E1D088DECE82E1D587 F4E89CE3D990413701B9AE6FFFF9B7EADC93FCED9AF9EB94FFF6BC9285631206004B411BDED8A4 E8E69DEEEE97EEEC94F7F29FF5EBA2EBE098EDE199F8EEA8FCF2ACFCF2ACF4EAA4F5EBA5FEF7B0 FDF3ACFAF0A9FBF1AAF8EEA6F9F0A8FDF3ACFCF3AFFEF6B4FAF1AFF5ECA9F8EFACFCF3AFFAF1AD F9F1A9FAF2A9FAF2A9F9F1A7F8F1A3F6EFA0F2EB9FF3EBA3F6EDA9F7EEAFFBF1B3FEF5B7FFF6B7 FCF3B0FDF5AFFFFAB3FEF7AFFDF6B0FBF4AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE7E7E79B9B9B5656565252529D9D9DE1E1E1959695 3939392C2C2C666666E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECECEC B8B8B87A7A7A4545453E3E3E3F3F3F3C3C3C4646465959595657565F5F5F9B9B9BCFCFCFEEEEEE C8C8C87474742B2B2B3F3F3FDEDEDEFFFFFFFFFFFFFFFFFFDDDDDD9B9B9B404040151515565656 9191917878785E5F5E4B4B4B5555555354534A4B4A6C6D6CBBBCBBE5E6E5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCE1E1E19C9C9C4F4F4F292929999999E1E1E1FDFDFDFFFFFFFFFFFF FFFFFFFCFCFCE6E6E67D7D7D1C1C1C3738378A8A8ADADADAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3E3E5AEE5E6B4F7F7E8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFBF5F0D6ECE1AEF6F0CEFFFFF6FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAF0E3E3AAE7E7B8F9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF5ECFEEBD2F8EEC6F4F5CD FDFDF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EEEEEEEEEFF1FAF8F1EDCE86E1AD39 F6D5B2FFEFEEFFFCFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCF3EDD5 E7D6A1DDB856E8CA81F7F0DCF4F5F9EBEBEBF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7CACACA4141412222223B3B3BABABABF7F7F7 FFFFFFE2E2E2AAAAAA7575754B4B4B4444443E3E3E3A3A3A4343434D4D4D505050666666A5A5A5 D6D6D6FBFBFBFFFFFFE1E1E1A1A1A14545451E1E1E919191FFFFFFFFFFFFD2D2D28E8E8E2D2D2D 1F1F1F6464648C8C8C6B6B6B5757574848484D4D4D4C4C4C535353898989CCCCCCEFEFEFFFFFFF FFFFFFFFFFFFF3F3F3B8B8B86B6B6B303030595959CDCDCDF4F4F4FFFFFFFFFFFFFFFFFFFFFFFF F6F6F6B1B1B14444441D1D1D727272BEBEBEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF9F9EEF1F1D3 EBEBBBECECBCFCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8F9E0EFE8B3E0B25CE7BE7FF8EDDCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAEFEEEECBE9EABEF1F2D7F9FAEEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDF9E6F6E6C0F5DCB4FEE7E2FFF4F6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFFFFF8F8FAE9D5E3C350E9C963FAE2B8FFF6EFFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9EDEDEDC8EAEAB6F2F2C4FAFAE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF4E8C1E7D07EDCC15BE6D389F8F4D7FFFFFFFFFFFFFEFEFE F4F4F4D7D7D7E4E4E4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFFF9F4DAE7D48BDCC154E7CF66F4E8B2FFFFFDFFFFFFF4F4F4E3E3E3E9E9E9 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCD79E4D67EEADC84E5D87CDDD174E7DA7EE4D67D DFD179E0D17CEADA87EFE392E6DB8CE0D488DCD182DBD080E7DC8CDFD483DCD17FDED480DAD07B DDD37DE3D982DCD17DE3D886E5DA88DACF7DDED480E2D883E3D984ECE28BE6DC84E1D77EECE289 EEE48CECE191F0E595E5DB87EEE48FF1E78EF1E78DF4EB90EEE58AEFE68BEDE38AEFE58DF6EC95 EBE489EEE78CF1EA8FF2EB90F6ED92F7EE93F3E88EECE187EDE288F1E38AE9DB82EADB86F9EA99 F9EA97F2E48DEFE088E4D77BE2D579E9DB7FE9DC81EDDF87F3E58DEDDF89EADF83E3DA7DDFD679 E2D97EE8DE85EDE38BEAE08BE6DB8AE6DB8BECE192F1E698F3E898EDE290F6EC97EADF8DEBE08E F7EC9CF5EA9AEFE495F9EDA0F7EB9FF4E89EE3D78DCDC177E2D789EDE195EADE92EDE197F0E49A F7EBA0F2E799F0E596EDE28EE8DE87EDE38AEDE192EDE199F0E49CEBDF96E7DB91EDE195F5E99D F4E99AF2E797F1E696EFE492EFE492F6EB99EEE392ECE191F2E798F1E699ECE097F5E7A2EDDF9D F7E9AAF9EBAFF1E1A7F3E5A6F3E299F7E79AF4E594F3E492F5E691F4E68DF0E18BEEDF8CF5E593 F4E496F3E398F7E79CF9E99DF7E69EF7E79EF7E79CF4E499F4E499F8E89DF8E89DF5E49AF3E398 F5E69AF3E697F3E896F1E397F3E29AF6E69BF2E295F7EB97F3EA95EBE693EEE99EDAD794747137 211C12EBE7B9969060282200A29B53FFFFB3EBE290E8DE89F9ED99EDDE8DD8C87AE1D285F0E29B EADD95E4D78DE5D78DE1D38AD7CA7EE1D486EFE293EADD8EE5D986E5D98AE1D78CF3E9A2E1D78E EAE194D8D07EB7B059DBD179EBE287EDE489DCD177E5DA80DCD47BE3E49571772DA2A464999669 0E06001D1500B6AF7CF5EEAEF8F0A5ECE492E7DF81E9E183F6EA9C7E742B817830F1E9A0E9E294 EAE39AF7EFB6A99F7B261C073B340DC3C184FAF2ACE9DB92F5EA98E2D883EDE28FC9C0729F974C FBF3A7F1EC9EE6E299504B0E5D5731F0E59AEDE092F1E39DE8D993BBAE5FE4DB7DEFEA86E5DF7F EDE690F2EAA1E3DA96ECE4A6B7B37C211C00AAA565FFF9B3E7DC8FFCF1A1E6D98AF4E798E3D888 9D9241C1B866FAF5AEE9E9B6827D570C0300544921E3D896EEE396BFB165B0A15EE5D593DED087 E7DE89E0D78CE8DF9D685E26796F33DBD28F8C833ADCD583EDE792CFC879EDE4A3CDC19221130D AC9E55F3E798D4CA7C948D40CECB808F8E479B9A652D2B02A5A378B1B07BA4A55FB4B4729FA173 212005605E2A817A40E5DA9AECDE97E9DB8EEBDE8FEDE18EE2D883DDD37FE2D686CFC175E2D58D ECDF9BEADF9F5C521D877D43ECE29BE9DE93FAEFA0F9ED9BF6E89BE9DCAE43351B2A20032A2300 CCC791F6F2AFEBEA98EEED92F6F297F7EF9BF3E79BF2E69EF1E69DF5ECA1FAF1A6F5ECA1F5ECA1 FEF4AAF7EEA4F4EBA0F8EFA4F5ECA1EFE69BF1E7A1F8EEAFFDF3B5FEF5B4FAF1AFFBF2AEFDF4AF FDF5ADFCF4ACFCF4ACFCF4ABFAF2A9FDF6A7FBF4A4F6EFA2FAF2A9FEF5B0FDF4B2FEF4B6FFF6B8 FEF5B4F8EFACF5ECA7FAF2AAFDF6B0FAF3ADF7F0AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3C7C7C76868682D2E2D8C8C8CCDCDCDEAEAEA A2A2A24F504F353635656565E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC DADADA7777774A4B4A3D3D3D6C6C6C939393A6A6A6BABABAC0C0C0929392727272A7A7A7D5D5D5 F0F0F0CACACA797979323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4A4A4A111111 2828285B5B5B9F9F9FBBBBBBC8C8C8D1D1D1A3A3A3565656373737676867B9BAB9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBD1D1D16D6D6D3C3C3C383838A8A8A8E1E1E1ECECECECECEC EBEBEBEBEBEBE5E5E5D1D1D17171711D1D1D4E4E4EA2A2A2E2E2E2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF9EFE7E6B2E9E9B9F8F8E9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFCFEF1E2FCE3C1FCEFCAFDFDE0FEFEF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAF0E4E4ACE8E8B8F9F9EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFBF8ECECEABF E5E5ADF9F9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1D6D5D5D5D5D6F7F2E8EDCF88 E1B242F5E3BFFEFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FDEEEAF7D7BFE3B14AE8C46CF5EACFE2E2E5D0D0CFE9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE3E3E3AAAAAA292929242424565656BABABA F9F9F9FCFCFCC5C5C5626262414141414141787878979797A7A7A7AEAEAEA3A3A38A8A8A858585 B3B3B3DBDBDBFCFCFCFFFFFFE2E2E2A4A4A44C4C4C262626959595FFFFFFFFFFFFD4D4D4929292 3737371313132F2F2F676767A6A6A6BEBEBEC4C4C4B9B9B9838383484848494949848484CECECE FFFFFFFFFFFFFFFFFFEDEDED8C8C8C4444442E2E2E6B6B6BD5D5D5EAEAEAEBEBEBEBEBEBECECEC E9E9E9E0E0E0A0A0A03F3F3F242424838383C9C9C9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8EFEFCE E4E4ABF0F0C1FDFDE2FEFEF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBEFEDC8DFD88FDCBE70E8CD9BF9F1E3 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFCFBF4F1F0D3E6E3AEF2EFD0 FFFDFAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFEDF8F7D0EBE9B3E8E5B5FBF8EFFFFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFDFDEDE8F7D9BEE2BE4FE8CF75F9F1D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDFBFBF4F0F0CFE6E6AFF1F1D2FDFDF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCE7F8EDBAE3B647E6BE58F6E8B1FFFFEEFFFFFC FFFFFFFCFCFCF5F5F5F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFCFFFFEFF6E8B3E7BC58E3B140F7EBB4FCFAE3FCFCFAFDFDFEF3F3F3E5E5E5 EBEBEBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2C26FD9CB73E3D57DE8DB80DDD074DFD276 EADC83EBDD84E4D581E6D783EADE8CE8DC8CDCD181DCD181E2D787EBE08EE2D785E9DE8CEFE492 E6DC88E2D883E3D885E3D886E7DC8CE5DA8AE0D584E6DB89E4D987E7DD89F0E691EDE38DE5DB85 E7DD86E5DB85ECE191EFE494E6DC88EEE48FEFE58CF1E88DF3EA8FF0E78CF4EB90F4EA91F2E891 F5EB94ECE58BF3EC92F1EA90ECE58BEFE58CF0E68DEBE087EADF86F3E78EFAEC94F3E58DEEDF8B F4E593F2E38EF1E28BF1E38AEBDE82ECDF83EBDE82E5D77EE8DA82F2E48CEEE08AEDE188E6DD82 E2D87EE7DD84EEE48CEFE490EADF8CE9DE8EECE192F0E498F3E79BF4E89BF3E897F6EB9AF1E696 E5DA8AE3D888E8DD8DFAEFA1F8ED9EF1E697F9EDA0E8DC8EC8BD6FE4D98AECE192ECE193EEE296 EADE94F0E399ECE092ECE192EDE290EAE08AF0E68FF1E697F2E69EF2E69EEDE197EBDF95EBDF95 EEE297EEE395EDE193ECE192ECE191E6DB8BE9DE8CEDE291F0E595EDE293EBE092ECE097F3E69F F1E4A0F8EAAAF5E7A9F1E2A6F7E8A9EFDE95EEDE90F2E393EDDE8CEBDC88F2E38EF0E18CECDD8A F1E291F4E496F6E69AF9E99DF5E597F3E397F6E699F8E89CF7E79BF4E49AF1E196EFDF94F0DF97 F3E29AF4E49CEFE392F4E897F2E597EEDD95F1E196F2E295FCF09EF1E894F3ED9EF0E9A3CECA8D 484513726E3DB8B280221D00C3BD7CF5EEA7DBD586EBE391F6EB99EBE090F2E596EEDE91CFC175 B8AD61B8AC61B4AA5DBCB164C3B76AC3B969CBC271D2C775D4CA76DDD47FE6DC89DDD388DED48D DAD186DDD486E9E18FE3DB86BAB05BC7BD66EEE48DE7DD87DFD580DAD181D7D792AAAA7A585434 1510010E09008E8950F4EEB4EAE29FEAE392FAF39BEDE19BFBF2BC857842807726FAF497EBE494 E0D98DEBE2A49A8E632B1F10463D1FD1D08DFEFBB7F5EFA2DFD482F0E49FECE2A2A79D58B8B05E EBE490F4EDA0DDD6974B4409726D2DE5E092EFE49CFBEDA2D8CC77BBB15AE2D786EBDF94EFE798 EEE78EE2DC7EE0DA86F5EBAEB0A5742925089B975BA59F63CAC080F1E59FEADE92F4E796D8CE7A 9E9342C5BB6FE0D690E6DFA5B2B0820B05001F1900BAB56EE7DC9FE2D499A89954CEC368ECDF92 D8C989DCD185EBE19E8076374C44059F974BA8A151D2CB7DD6CF84EAE19BE3D99AD0C6874D4316 867B44F7EAA3E3D784DDD57ECCC47DC0BB7FCBC891130F00838346D1D3869E9F5CCBC891939060 2A2907444211969159D6CE8FECE09EEADD94E6D689EADA8CF2E694EBE08EDCD17FD8CD7AEEE291 EFE19DEEE2AA62572A5249169A924DDDD785DED882EAE190DED18AFCF1B77C6F3E322606877E55 130C009E9863FDF9BAEEECA1F5F39FF3EF98F4EC9BF9EDA1F1E59DF3E79FF2E8A1FBF1A9FCF2AA FAF0A8FDF3ABF8EDA6F2E8A0F7EDA5F6ECA4EEE49CECE39DEFE6A4F4EBA9F9F0AEFBF1AEF8EEAA F5EDA6F6EEA6F8F0A7F7EFA6F6EEA5F5EDA3F9F2A6F5EDA1F1E99EF6EEA7FAF1ADF5ECAAF8EEB0 FBF1B3FAF0B2F6EDABF5ECA8F9EFABFCF5AFFAF3AEF8F1ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAD5D5D59191915A5B5A4E4F4EBABABAEBEBEB F0F1F0A3A4A3525352373737656565E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBCDCDCD4A4A4A414141666666A7A7A7CECECEDDDDDDE8E8E8EAEAEACFCFCFBBBBBBD4D4D4 ECECECF4F4F4C9C9C9797979323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F484848 1818184848488E8E8ECDCDCDE6E6E6F0F0F0F7F7F7C4C4C46C6C6C2C2D2C3839389E9E9EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAC1C1C14141411C1C1C1D1D1D565656707070747474 737373737373727272707070666666373737151515545454A7A7A7E4E4E4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5EBFDECD5F3EDC1F4F4D0 FCFCF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFFF9F3FDF0DDF4EDC5EFEFBFFBFBF0FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFAFAF0E4E4ACE8E8B9F9F9EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBF1 E9E9BDE2E2A6F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E8E7E7E7E1DBF9E6CE ECCB85E1BA5AF5E9CAFEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFFFFF7F6FAE4D2E4B54EE8BD5DF6DDB4EFE6DFE5E3E2F3F3F3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2B7B7B76C6C6C191919424242939393 D9D9D9FDFDFDFAFAFAB3B3B33B3B3B4242426F6F6FB2B2B2D2D2D2DDDDDDE1E1E1DADADACBCBCB C5C5C5DADADAEDEDEDFDFDFDFFFFFFE2E2E2A4A4A44C4C4C262626959595FFFFFFFFFFFFD4D4D4 9292923636361E1E1E5454549B9B9BD4D4D4E9E9E9EEEEEEE9E9E9AEAEAE636363333333515151 B5B5B5FFFFFFFFFFFFFFFFFFE8E8E86C6C6C2121211616163838386B6B6B747474737373737373 7373737272726D6D6D4E4E4E212121292929878787CBCBCBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDFDEA EDEDBDE2E2A4F1F1CCFFFFF5FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8EDE3A9DEC862E8C87FF4DBB6 FCF5ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9F2DEF1E0B2 F8E4C0FFEEDCFFFBF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF5F4D6EDEDBBEEEEC5F3F3DCFDFDF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFDF9F4EBCAE9D693DEBD5CE8D08EF9F3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F9E3F0F0C1EDEDBFEFEFCEFBFBF3FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FBF7DDE5CE7DE1C465E9D283F5EAC1 FEFCF7FFFFFFF6F6F6DEDEDEE9E9E9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFCF7F5EBC4E9CF80E1B758E5BD6AFAF3D7F5F5EDECECECEBEBEBECECEC EFEFEFF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCBD69D7C971DFD178DDD075DFD276 D8CB6FE5D87EEDDF86ECDD88E6D783E1D581DFD580E0D584E3D886E5DA88EDE290E3D886E5DA88 EFE494EDE292EEE391F0E595EFE494E8DD8DDFD485E3D889E9DE8EE2D787DFD484E4D987E5DA88 E4D987E7DD88E6DB88E6DB8BEADF8FE6DC88EEE48FECE289F3EA8FECE388ECE388F6ED92FAF097 F7ED95F6EC95F7F096F9F298EDE68CE6DF85ECE289EEE48BEEE38AF1E68DF2E68DEEE088E8DA82 EADB87ECDD8AE8D983EDDF87F3E58CF3E68AF3E68AF0E387E8DA81E8DB82F1E28DEDDF8BEDE18B F0E68DF1E790EFE58EEDE38EEFE591E8DD8DEBE091EFE396F1E59BF2E69CF3E79CECE192EEE394 F4E99AEDE293E8DD8DF0E595F4E999F1E696F1E696EEE393E9DE8EE8DD8EF2E797ECE192F1E698 F6EA9EEADE94ECE096E6DB8CE1D686EADF8DF0E591ECE28CF4E99BF8ECA4F0E49CEADE96EFE39B EFE399E7DB91F1E599F4E89CF1E599F4E99AF6EB9CF0E593F9EE9CFAEF9EEFE495EEE295F8ECA2 EBDF97F1E4A0F8EAA9F6E8A8F5E7A9FCEEADF3E297EEDE90F1E193E9DA88E5D683EEDF8CE9DA87 EADB8AF3E494F7E799F8E89BF5E697EDDE8DEEDF8FF2E293F6E698F6E698F7E79CF5E59AF2E199 F4E39BF8E79FF9E9A1EFE392F6EB9AF6E99BF0DF97F3E398F8E79BF7EB9BF1E797F4EDA2D7D091 B0AA75221E04A39D682F290AAEA86BFFFFBCE7E197DDD688F6EE9DFFF5A4E3D888ADA05396883C 9F9146B0A85BC6BC6DD2CA7AD7CF7FD1C978C4BC6BBDB665B8B05DB7B05CC2BC68C7BF6CD9D082 DCD387E6DD90E4DC8BE9E190EAE28EEDE591CFC776B4AC5BE2D98BEAE093DED48EB8B5848D886C 1B12080B0500726F30D5D286DAD38AEBE597E6E08CE8E091FFFFD076664482753FE7DE97DFD982 E8E387FCF3B69F936E180A01524B15DDD898FEF9BAE0DD97EBE697EADF8DE6DB9BA59862C1B57B FDF6AAF1EB9BD4CC84433B06867D48F7F1AADCD781FCF1A5D7CA7BBBB258C9BF65EEE394F3E9A3 E8DE97E6DE8CEFE98FEFE899A99F672A2103757333AAA665EDE7ADB8AC76CCBE82FFF5AEE7DD8B A89E47B0A554D9D18AF0E5ADE9E0B83B3626161200686423F2EDA1D9CE8FAEA064E2D38DE0D67B E1D67DDFD387E6D79EAEA26B302600857E31A8A14BDFD97FD8D17FEEE5A2EDE1AADBCF98251A08 6D6525EBE392E7DD89E6DA89E8DE94F4ECA8D3CD9F150F0C7E7B41D2D28AAAAB5DC3C575A49F6E 332B0826230A959054DAD293E0D794ECE098F1E299E7D78BE7D789ECDC8DE5D889E0D484E4DA85 F4EB99F4E9A98A7D50372D05AEA774C0BC7487862CDAD87BEAE394F1E5AAB9AA7E110401948A54 D8D0A01A1301807948FFFAC4F0ECABF5F2A5EEE998F1E899F9EDA0EFE399FEF3ABF6ECA4FAF0A8 FDF3ABFCF2AAFFF5ADFCF2AAF4EAA2F7EDA5F9EFA7F8EEA5F7EDA7EFE6A1F3EAA5FAF1ADFFFAB3 FFFDB5F9F4ABF7EFA6FBF3AAFAF2A7F7EFA4F7EFA4FBF3A9F7EFA6F6EDA6FBF2AEFCF3B2F6EDAD F5EBAEF6ECAFF9EFB1FAF0B2FBF2B1FEF5B2F6EFABF9F2AEFDF6B2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEBEBEBACACAC5A5B5A5E5F5E868686E0E0E0 FEFEFEF4F4F4A2A3A2525352373737656565E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBC8C8C8363636424242828282C8C8C8EDEDEDF8F8F8FCFCFCFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFF8F8F8C8C8C8797979323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F 464646222222747474CFCFCFF4F4F4FEFEFEFFFFFFFFFFFFD9D9D98585853333331C1C1C8B8B8B FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5B2B2B22121210707070F0F0F1919191D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1A1A1A1111110707070F0F0F5D5D5DAFAFAFE7E7E7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCEDD9FAE1B9FDF3D0 FFFEE9FFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EBEBC1E1E1A5F8F8E9FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFCF9FBF5E8E8E2B2ECE8C0FAF9EDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAF1EAEABDE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFDF7F6F4F5E9DB F7D7ABE9C87EDFC571F4ECD3FEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFAF3E1E4BD5AE6BA56F3D39AF7E8D4F5F3F1FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9D7D7D78282823434342121216F6F6F D0D0D0F7F7F7FFFFFFF8F8F8ACACAC2C2C2C4848488F8F8FD2D2D2EFEFEFF8F8F8FCFCFCFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2A4A4A44C4C4C262626959595FFFFFFFFFFFF D4D4D49292923333332E2E2E868686D8D8D8F8F8F8FFFFFFFFFFFFFFFFFFD1D1D18383832E2E2E 2D2D2DA0A0A0FFFFFFFEFEFEFDFDFDE0E0E05454540D0D0D0C0C0C1717171D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1D1D1D141414090909080808303030909090D0D0D0FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF0 F9F9D6EDEDB7E7E7B3F4F4DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF2EDD88CE1B93AF4D18E FEE9D1FFFAF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF4E9 FEE3C6FCDEB8FAE1BDFEF7EDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDF8F0EFE8C4E8E3B3F4F3DDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDF6ECE9ABDCD267DEC06EEBD4A7FAF5EAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF4FBFBDAEAEAB3E2E2A6F8F8EAFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EAEBC1DFD385DEC15D EBD390FDF6E9FEFDFCF1F2F2CCCCCCDDDDDDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFDF5EAECD294DEB757DFBC6FE8D2A6F5F1E9EAEAEADDDDDDDEDEDE EAEAEAF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0C16DD4C66FDACC74D6C86D D6C96DDFD276E1D379E1D37AE0D17DE3D380E1D581D9CE79E2D882E4DA85E1D684EADF8DE9DE8C EADF8EE1D686D7CC7DDDD282E5DA8CE3D78BE1D58AE5D98DEBE091E9DE90E0D586E8DD8DE3D888 DED383E3D886E4D988DFD484E7DC8DEBE090E9DF8BEFE590E9DF86F3EA8FF5EC91EBE287EDE489 F3E990F4EA92F7ED96F1EA90F3EC93E9E288EBE48AF7ED94F5EB92EFE38BF3E890F2E68EEFE089 F0E28BF1E28DE7D883E5D681EFE188EFE288E7DA7EE8DB7FEDE084EEE088EEDF89F0E18DECDE8C E8DC88ECE28BF0E692ECE28EEBE08FEFE494E7DC8DEADF91EEE296EEE298EFE399F2E69CEFE398 F1E698F5E99BF5EA9BF3E899F4E999F2E796F9ED9BFEF3A0F4E995EEE491F5EA97EEE392E7DC8D EFE495F8EDA0F3E79DFAEFA3EFE397E5DA8BF2E796F9EF9AEFE590F5E99BF8ECA4ECE097E6DA91 F0E49CEDE197E4D88EF2E69CF5E99DF0E498FAEEA2FEF3A5F5EA98F0E592EEE391F3E898F2E799 EADE92ECE096F4E7A0F9ECA8F8EAA7F6E8A7F6E9A4F6E699F4E496F1E192ECDD8CECDD8AEEDF8C E8D986EADB8AF4E594F6E697F3E395F1E291ECDD8AEEDF8CF2E391F3E492EEDF90F4E497F8E89C F5E49CF0DF97EFDE96EFDF97E4D887ECE18DEFE294EDDD92EFDF93F1E194ECDF90F0E698F6EEA7 CEC58CAAA3752C28056A663757521EEEE9A6E9E49BE5DE93F4ED9DDDD485A99F4F887D2FAD9F56 D8CB82DFD48AEAE297E9E295E4DD90E8E194F0E99AF0E99AEFE899ECE595E5DF8FE0D989D2CB7C BCB464BDB565CCC374DCD484F5EE9CEAE291E2D98AF0E79CC2B971B8AE69DACF8CC9C084968D71 2F2618100900595422E0DC99D3D17ECCC772D6D17BF0E99BEBE0A196875E6B5D30E7DF99F1E9A0 EBE39CF4ECA7B0A37D100200594D29E6E494FDFBA2E8E49AE9E4A6F0E8A4F1EEA39B904CAFA368 F5E8B0E7DDA2DCD295342B005D552BE8E198F6F0A1E6E289D1C870ADA24ECCC16FFBF1A2E3D98D E9E097F3EA9FEFE79BF2EBA0B9B070281D006D6535F9F6AEA4A15CB2AC72E4D8A7C6BB84C9BC7B B2A856C7BE67F5ED9CE7DEA0F5EABF7E74590C0400363106EBE89CF3ECA4B6AC66BEB169F9EB9F EBDF8CE1D87CDAD27FDACD9C5347196259149C9548D2CD73E4DF85E2DB8CEDE4A5D7CA974B3F16 5E541DE6DF91E8E288E7DD83E4D888E9DD9DEDE3AF574E265D562AB8B779C5C47CB8B86E95934F 3D370C2B220F9F9954F4ECA9D7CE89F4EBA3E9DB91E4D58AF2E295E3D285E0D083E4D387EEDE92 F5EA9BFBF6A893894E2A2100C2BB909E9965A5A45CB2B25BB1B157D2CC84E2D6A64234234E450D ECE5A7D2CD971F18014F481CC1BA89F1ECB0ECE7A4EAE499F1E89BF8EDA0F6EA9EFDF2ABF6ECA4 F7EDA5F7EDA5F7EDA5FBF1A9FBF1A9F6ECA4F6ECA4F4EAA3F8EEA6FFF6AEFEF7AEFCF4ACF8F0A7 F4ECA3F4EBA2F2EAA0F4ECA3FAF2A7F9F1A5F5EDA2F6EEA2F9F1A8FBF2AEFDF4B0FEF5B4FCF2B2 F8EEB1FBF1B4FCF2B5FDF3B5FCF2B4FCF2B3FAF1B0F2EAA9F7F0ACFDF6B2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBBBBBBB6A6A6A2D2D2D727272C9C9C9 F1F1F1FFFFFFF3F4F3A3A4A3535453383838656565E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCD3D3D35F605F3F3F3F464646828282B9B9B9DDDDDDF6F6F6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8C8C8C8797979323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE 9F9F9F464646252525828282E1E1E1F8F8F8FFFFFFFFFFFFFFFFFFE2E2E29F9F9F4C4C4C1E1E1E 7D7D7DE8E8E8F9F9F9FFFFFFFFFFFFFFFFFFFCFCFCE7E7E7A2A2A21F1F1F202120474847757575 8888888A8A8A8A8A8A8A8A8A8989897B7C7B505050252525161616787878CFCFCFF4F4F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF1EDCDE8E1A9 F6F4D9FEFEF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCF4EAEBC1E1E1A5F8F8E9FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF1E2FFE3C9F9DBC7FAE7DBFEF9F6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAF1E9EABDE1E2A6F9F9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F3D6D5D3 CDC1A7DFC076D8C566D5D275F2F2D5FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAF4E6E4C576DEC166E0D38DD3D1B0CFCFCBEAEAEBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDD6D6D68A8A8A424242232323727272 B7B7B7EEEEEEFEFEFEFFFFFFF9F9F9BBBBBB4A4A4A3737374C4C4C909090BFBFBFE2E2E2F9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2A4A4A44C4C4C262626959595FFFFFF FFFFFFD4D4D4929292323232333333969696E9E9E9FAFAFAFFFFFFFFFFFFFFFFFFD9D9D9969696 3B3B3B2A2A2A929292F1F1F1FBFBFBF3F3F3CECECE4A4A4A1D1D1D3F3F3F6C6C6C8585858A8A8A 8A8A8A8A8A8A8A8A8A8484845E5E5E2E2E2E1515153C3C3CB5B5B5E6E6E6FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6F6E0E9E9B6EBEBBEF7F7E5FCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFEFCE0EDCD75E1A82A F4DBA9FEF7EEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFDFBFDF5E9EFE8C0E7E1AAF9F7E9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5EBFFE7CFFBDCC5F9E1D3FCF3EDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFBF4ECDE93DFC347EFCC84F9E1C1FEF8F2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBECEAEABBE1E1A4F9F9ECFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFAFCF4EEE1A9 E2C354EBC76BFDE5C6FFF5EDFCFCFDF3F3F3F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF6EDFDE3C6EBB86EE2AC52EDD2A2F3EFE6E5E4E2DEDEDEDEDEDE EDEDEDF8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDCE7AD0C26ADCCE76 E2D479C8BB5FDBCE72E6D87FE4D67DD7C873D7C874DDD17CE2D77FE3D982E3D982E2D882EBE08E EADF8EEDE292E0D586DBCF81E5D98CE7DB8FDACE83DFD389E9DD93E4D88DE0D488EFE397F5EA9B E3D889DACF7FE5DA8AEADF90E4D989EFE495F2E797EFE591F1E792E7DD84F2E98EF0E78CE8DF84 EEE58AF5EA92F1E78FEEE48DF0EA92F3EC94E9E28AEEE890F6EC95EFE48EF2E690ECE08AEDE08B F4E590F7E893F8E994ECDE87E1D37CE9DC82EBDE82EADD81EBDE82F6E98DFEF098F7E893F1E28F E8DA89EEE290E9DE8BE4D987E6DB8BEADF90ECE191EBE093F0E498F2E69AF0E49BF2E69CF7EBA2 F0E49AF1E599EEE196F4E99AF4E999E8DD8DF1E693F2E793EBE18AF4EA94F8EE97EDE38DF5EA97 EEE393EEE494EFE495F3E79BFFF9ADF8ECA0F0E596F7EC9DF8ED9BF0E592F6EB9BFBEFA4EFE399 EBDF95F7EBA1EDE198E9DD93F1E59CEBDF96EADE94F7EBA0F3E89AE5DA88F0E691F6EB99F2E798 EEE393EEE394F7EBA0FBEFA6FCF0A8F8ECA5F0E29DE7DA93F8E89BFAEA9BF0E190F1E291F7E897 F5E694EDDE8DEBDC8BF1E291EFE08FEDDD8FEADB89E8DA83EFE08BF5E693F6E794F1E292EFDF91 F3E396F5E599EEDE94E9D88EEBDB92E7DB89F0E591F4E898F7E79AFAEA9DF8E89AE8DB8CEEE396 EFE7A3C0B780968F661E1704211C02C2BE77EFEBA3EFE99FF3EC9EC9C27282782BA79E50DED589 EBDF97E8DB94F1E7A1ECE59EE7E099DBD58DE0D98FEBE59BEAE39AE8E198EBE49AEBE49BEEE89E EAE39AE9E193D5CE7CC8C16FC6BE6DB6AD5DD8D081F9F2A6E3DB95DED5939A9053C5BB81B5AC79 291C16080000575322DCD894EAE69CDAD887E2DE82D6D07EECE2A28E82516C6029E7DF95E9E58C F5F09FFAF0BB9687711505004E4121DBD58DF6F498F5F38CE2DF86EAE2ABD9CE9C958A4AC0B66D E1D991F5EBAFBCAF83312300837844F2EA9EECE78FEEE98DC9C36DA59F3DDFD57AE8DB96EEE3A4 E8DE9AF2EA9AEDE793F4ECA5B6AC72352B0D83784AAAA368B0AF5FFBF9B1A9A367CEC292E3D6A4 887E3EB6AE5EE5DE8BE9E296F6EEB69D916F0A00000C0500C7C282F6F2AACCC37EC3B86AF4EA94 F7EC96EBDF91DBD17FDFD88A72663C392F03B4AC60DBD486DDD685ECE496F0E8A0E1D7953D3318 6A602BE7DF99EAE494DED87FE7DE85E8DD90F3E7AF5B4C2D6F6635F1EDA7C5C288A4A161ADA96B 443C105C5428DAD288E6DD93E0D689F1E69AE1D689EEE095E9DB90DDCD82D5C378E4D187F4E298 F3E199F1E59E8C843F2C25058C8552BDBA84A3A3649D9E579A9C4FDFDE95BBB57953491D2B1F0A D7CE91F9F3ACCCC68B322C01231C00968F62FAF5C1E9E4A5ECE69EF3EA9EF3E79AF8ECA0F6EBA3 F6ECA5FAF0A9F8EEA7F4EAA4F9EFA8F9EFA8FCF2ABFBF1AAF1E7A0F4EAA3FBF1A8F3EBA1FBF3A9 F9F1A6F2EA9FF2EA9EF1E99EF4ECA1FCF4AAFAF3A5F5EEA0F7EFA2F7EEA9FCF3B2FFF8B9FDF4B5 F8EEB1F9EFB3FEF4B7FEF4B7FEF4B7FEF3B5FBF1B3F8EEAFFCF4B5FAF2B2F8F0B0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCCBCBCB7E7E7E4747474D4D4D9E9E9E EEEEEEFDFDFDFFFFFFF4F4F49999994242422828285C5C5CE6E6E6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDE3E4E3999B996364634141415454546E6E6E8181819090909E9E9E B3B2B3CCCCCCF3F3F3FFFFFFF8F8F8C8C8C8797979323232464646DFDFDFFFFFFFFFFFFFFFFFFF DEDEDE9F9F9F4545452828288F8F8FF2F2F2FBFBFBFFFFFFFFFFFFFFFFFFE5E5E5A8A8A8545454 1E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFF8F8F8D9D9D99191911E1E1E3C3C3C7E7F7E B5B6B5CBCBCBCECECECECECECECECECCCCCCB1B2B15C5C5C2B2B2B232323919191E5E5E5FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCEEEDC9 E1E1A4F4F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EBEBC1E1E1A5F8F8E9FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF8EDD3F4DEB4FBE4D5FEF0EEFFFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFAF3F2E9C5EDE2AFFBF9E4FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F7 E0DFDCD4C6A1DBB555DDC26AE3D99EF7F4E2FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7EDEFD49DE5C87CDDCB7FD6D0A5DADAD5EFEFF0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CFCFCF9090904D4D4D3D3D3D545454 B1B1B1E0E0E0FAFAFAFFFFFFFFFFFFFBFBFBD5D5D58888885C5C5C4747475D5D5D727272848484 929292A3A3A3BCBCBCD9D9D9F9F9F9FFFFFFFFFFFFFFFFFFE2E2E2A4A4A44C4C4C262626959595 FFFFFFFFFFFFD4D4D4929292313131383838A5A5A5F8F8F8FCFCFCFFFFFFFFFFFFFFFFFFDBDBDB 9B9B9B3F3F3F2A2A2A8D8D8DEBEBEBF9F9F9E9E9E9BCBCBC4040402A2A2A686868A8A8A8C8C8C8 CECECECECECECECECECFCFCFC4C4C47B7B7B3535351E1E1E4F4F4FCFCFCFF4F4F4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3DBE3E3ABEBEBC1FCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFCEEF2F1C2E6C96E E0AE3CF4E3BAFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFCF7F3EBCAEDE1ADFAF7DFFFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF2DFF4E2BAF8E0C6FEECE8FFF8F8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAE8ECD185E1B340F5D7A2FEEFDDFFFCF9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF6F2F2CFEAEAB3F0F0CD F7F7E7FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3ECC5E2CF70E3C45AF2D38DFAECD0F9FAFCE6E6E6EFEFEFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEED7F2D39AE4BA64E0BB6DE9DAB9EFF0F3EAEAEAE9E9E9 EBEBEBF8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D581E0D27A E6D880E0D378DED175E6D97CE9DB82DED077DCCD78E4D582E5D983E0D57DDDD37CE5DB84DED47F DCD17FE3D886E4D989EEE394EBE092DDD185E0D488E7DB90E8DC92E1D58BDBCF84E4D88CE8DC90 F1E698EDE293DACF7FDACF7FEBE090E5DA8AE4D98AE4D989F1E793F2E893E8DE85F1E88DE2D97E EAE186F7EE93F4EA91EFE58DF4EA93EDE78FECE58DF1EA92F2EB93F3EA93F4EA93EADE88F8EC96 E8DB85E9DA85F4E590F5E690EFE189E7D981E7D97FECDF83EFE286EEE185ECDF83F4E68EFCEE99 F2E390E9DB8BF2E596ECE191E4D989E9DE8FEDE293E6DB8CF1E697EADF91E6DA8EEBDF93F3E79B F9EDA1F9EDA1F0E498E6DB8CD3C879EEE393F3E898F0E592E8DE89D5CB74DFD57DEEE48BE9DF88 F2E893F3E896EADF90ECE192F1E599ECE094EFE297F4E99AEEE393E9DE8CF3E895E8DD8DE4D98A EDE194EDE295EBDF93F3E79BE9DD91E7DB8FEFE397F4E89CF2E69AF6EB9DF0E593E9DF8BE8DD8B F0E593F1E695EDE293ECE193F9EDA1FAEEA4F2E69DF1E59DF2E69CEFDF90F1E291F1E291F9EA99 F5E597EADA8CEFDF91EFE08FEDDE8DECDD8CEDDE8DEEDF8BE8DA82E7D783F2E38EFDEE99F9EA97 F3E493F4E496F4E496F4E497F3E396F1E396E9DD8AE4DA85FAEE9DFEEEA1F7E79AEEDF8FF4E896 F2E79BF1E8A5BEB581918A620C0302615B19F9F2AAE8E298E8E095A0984D6C6517D6CE83E5DC91 E1D78FE2D892E0D691E7DC9AE8E19DF9F2AEF9F2AFE6DE9DEBE3A2EEE6A5E9E1A0F7EFAEF3EBAA EBE3A2E4DC9AE3DA8FF1E696EDE293F3EA9BD2C97CA59E53D7CE89E8E19EDED69BBAB07B9C9562 3830181C0F002B220CDFDD8DDEDA81DFDB85F3ED9EE0D98CFAF0B0B5A9773B3008D9D27FE6E37B D9D673FAF4ABA598751907063F311AC9C088E8E38CDCD97CDBD879CCC872F0E8AAA59A64BFB578 FBF3AAFAF2ACB6AC70271900877958E4D8A5E9E293F8F295DAD475979038D4CF6CE4DE81F1E7A2 F0E3ACEBE0A0EFE89BF2EB9BBDB46F22180362562AE7E4B2FFFCBEA1A04FAEAB5FFFFFC4BEB17E 91844FA89D5ED8CF84D4CD7EDCD691CEC995190F05090100847F51EFE7B8C4BD81ADA657F4EA93 E2D97FC5BB62DED47EF1E4A3948952352C02B4AD5EEDE793DCD589E1D895E3D99DE0D69842390C 564F11DDD688DDD688F0E99BE5DD90E9DD8FF1E4A5675B2952480FEFE8ABB4B071C8C57FF0E9B9 574C2C5C521EC3BB73DCD682D8CD7BE3D687ECE291ECE191DFD485E0D488D8CB81DFCE86F5E49C EDDC94F3E09B8B7D472116009D975ABEBA758B8B41CDCE8691914FC3C289B8B481736C3A0F0701 AFA56EF0E9A2F5F0A5CBC6872B25012E27008D865BFBF5C2EDE7ACE8E19CF4EAA2FDF1A5FDF1A7 F8EDA5F8EEA7F8EEA7F3E9A2F3E9A2F8EEA7FCF2ABFBF1AAFAF0A9FCF2ABF9EFA8F0E79EF3EB9E F7F0A2F6EFA2F1E99EF2EA9FF5EDA2F6EEA3F9F1A6FDF5AAFEF6ABFBF3A8F7EEABFFF7B9FBF1B3 FBF1B3FBF1B3F5EBADFCF2B4F7EDAFFBF0B2FFF9BBFCF3B5EAE0A2FDF5B6FFFBBDFDF6B8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2A9A9A94646462F2F2F777777 B9B9B9ECECECEEEEEEF1F1F1E0E0E08181812928291313134A4A4AD3D3D3F2F2F2F6F6F6FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4D4D4D4999A996060604848483C3C3C303030292929 3030304F504F808180D5D6D5F7F7F7F7F7F7C8C8C8797979323232464646DFDFDFFFFFFFFFFFFF FFFFFFDEDEDE9F9F9F4444442A2A2A9A9A9AFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFE5E5E5A8A8A8 5555551E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFF4F4F4CCCCCC8282821E1E1E555555 AEAFAEE2E2E2F4F4F4F7F7F7F6F6F6F7F7F7F2F2F2C9C9C94D4D4D282828383838A9A9A9F4F4F4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC EDEDC9E1E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EBEBC1E1E1A5F8F8E9 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAEFECC9E5E0A6F7F1DFFEFBFAFFFEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFBF6FCEBD2FBE3BBFEF7D6FFFDECFFFFFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFDFEF4F2EEE8D7AADFB041EAC27AF8E0D1FDF6F3FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF4FCE4C5F0CE91E1C26FE4D29FF1EFE9FAFAFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDD3D3D39090904949492A2A2A595959 9D9D9DE1E1E1F9F9F9FFFFFFFFFFFFFFFFFFFDFDFDEFEFEFCACACA9797976767674B4B4B3A3A3A 2E2E2E2828283737376161619C9C9CE4E4E4FAFAFAFFFFFFFFFFFFE2E2E2A4A4A44C4C4C262626 959595FFFFFFFFFFFFD4D4D49292923131313C3C3CB1B1B1FFFFFFFEFEFEFFFFFFFFFFFFFFFFFF DCDCDC9C9C9C4040402A2A2A8C8C8CEAEAEAF9F9F9E0E0E0ACACAC383838343434868686D1D1D1 F0F0F0F7F7F7F6F6F6F6F6F6F7F7F7E5E5E57F7F7F2E2E2E2A2A2A696969E2E2E2FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFEFFF4F2D9E5E4AEECECC5FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF6F6E1E4E0A0 DFC96FE2BE60F5E9C9FEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFAFCEDD7FAE3BCFCF5D2FDFDE8FFFFFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F2D8E6E2ACEFEAC7FDF9F6 FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5FBF7D2EBC77BE1A848F6E1C1FEFAF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFCE5F5F5C9 E5E5A9EDEDC8FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF4F3DBE4DE9CDCC75BE4C656F2E3AEF3F2F3CECECEDFDFDFFAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFF4E5BDE4C66FDEC569DED496E0DDC5E7E8EAF6F6F7 FAFAFAFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDD89 E7D981EEE088E3D57ADACD71E8DB7FE6D87FDDCF77DFD07BE8D986EADE8AE7DD87E0D680E5DB85 DFD581DFD482E6DB89DFD484E0D586E5DA8BE3D888E3D78AEBDF93EDE197EADE92E5D98CE2D78A E0D486E1D686E5DA8ADCD181DACF7EE9DE8EEDE291E5DA8BE1D686EDE28FF2E893EBE188F0E78C EAE186EBE287F4EB90F6EC93F0E68FF0E68FF4ED96F2EA93F5ED96F1EA93F0E690F3E993F5E993 F5E993ECDF8AEFE08BF6E793F4E58FEFE189EDDF86E5D87CE1D478E7DA7DEDE084ECDE85F2E38C FBEC98F8E898F5E698F1E495F2E797F2E797E7DC8DDFD484E8DD8EE2D788E7DC8CEDE292EFE496 EFE395EDE293EFE396EFE495E8DD8CE4D98AEEE392F0E592EBE18CEDE38DE2D881E2D881EDE38B F3E992F2E892EFE491ECE190EFE494F4E89CF4E89CF1E599F5E99DF1E697EBE091EEE392E9DE8D E9DE8EEEE393ECE190E9DE8FEEE394E8DD8DE4D98AE8DC8FEADF92EADE91EDE294F5EA97EDE38E E6DC89E6DB89E8DD8BE8DD8CECE192F2E698F2E699EEE395EDE196EDE194F2E292F4E594F5E696 FAEA9AF5E597EBDB8EF2E294F1E193F2E392F2E392F0E18FEDDE8AEEDF8BF4E591F5E692F3E490 F3E491F4E592F4E593F2E391F1E292F1E292F1E392F0E490E7DD88F4E897F4E597F1E293EFE08C F2E694F8EE9FE2DB96BDB37F8A825A0B0300B2AC68FAF4AAF9F7B2A39B52827A31E9E199EDE59C EAE19AE8DF99EFE6A1C9BE7CA1985A7F76357169286A61216B63246E66277067287A71338B8244 9F9658BFB678D9D091E7E099EEE395F4E89BE0D68AF4EBA1DDD58D948C49C7BE82F5EDB7DCD4A4 4D451E100800100500B2AB6DEAE591F7F58FDDDA76EDE894F1E7ADB8AB803F3205B9B06CF0EB8B E7E779CCCC72A09860190C00382C19D0C594EAE49DD7D27CE2DD89E0D98EE0D993A29A4BB0A85D F2EAA9F2E9A9C0B67C3F3403827643EADFAAEBE0A4E1D891D7CF7BAEA64DCCC467F3EC8FE9E28B D6CC80DED393DCD194F8F0B3B4AB69312A00686024C4BF85B8B17ABCB67BEAE89DB9B56BC3BB78 978D50C5BA7CE4D998E7DE99EBE3A0E8E3A74742190500004B4625E4E09AD4CB9CB5AB76D2CA7C D9CF74DFD677D9D074E0D687A499612E2400C6BF75E9E48CDDD782D9D18BEFE4ACC9BD89493E17 6B631DEAE490E1DC83DAD381E5DD93DFD696EDDEA681733C49400BE0D88BBFB972D0CB90EEE8B3 4F461D75693FEDE4A7EEE798C7BF67DCCF7AE9DD88DED280E6DB8BDFD587D2C77CE8DD94F2E49E DFD08ADECE878573384D3F0DBBB083DDD79AB8B668C2C56D929546BCBB7FAAA77A7D7656130A00 958E52EEE7A2EFE99AEFE99EB4AE6F645E2A635C316D663CFBF5C2F5EFB3F3ECA7F5EBA3F8ECA3 FAEDA5FAEDA7F9EFA9F7EDA7F4EAA3F5EBA5F9EFA9FFF5AFFAF0AAF5EBA4F8EEA8F9EFA9F6ECA4 F9F2A5FBF4A7F8F0A4F3EBA0F4ECA2F6EEA3F5EDA3F5EDA2F7EFA6F8F0A7F4ECA4F6ECACFFF5B9 F7EDB0F8EEB0FAF0B1F8EFAEFDF4B3FEF5B3FFF7B5FEF7B5F1E8A9DDD395F8F0B2FEF6B9F9F1B4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEEEEEE9C9C9C2D2D2D0A0A0A 3F3F3F5E5E5E7272727171717272726A6A6A3939390D0D0D0505052121216565658A8A8AACADAC E5E5E5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF4F4F4D6D6D6B4B4B4A0A0A08D8D8D757575 5C5C5C444444303130373837888988C8C9C8EDEDEDCACACA797979323232464646DFDFDFFFFFFF FFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5 A8A8A85454541E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFF2F2F2C7C7C77C7C7C1E1E1E 666666CDCDCDF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C3C3C3363636313131636363C3C3C3 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCEDEDC9E1E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EAEBC0E0E1A4 F7F8EAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E0E1A2F5F6E1FEFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDF9FFF5DFFFEDC8FFECC8FFF4E0FFFDFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F7F9E4E2E0D8C597DDAC36EFCA88FFEFEFFFFBFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8FFF6DEF4D898E1B957D7BE7EDEDCD6 F1F2F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBD3D3D38E8E8E4747472E2E2E535353 9A9A9ADCDCDCF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D6D6D6B7B7B7A0A0A0 8888887171715757574141413636364E4E4EA1A1A1D7D7D7FBFBFBFFFFFFE2E2E2A4A4A44C4C4C 262626959595FFFFFFFFFFFFD4D4D49292923030303D3D3DB5B5B5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCDCDC9C9C9C4040402A2A2A8D8D8DEBEBEBF9F9F9DDDDDDA6A6A6353535373737909090 DDDDDDFBFBFBFFFFFFFFFFFFFFFFFFFEFEFEE3E3E36D6D6D272727464646929292EDEDEDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFCFAFFF1E5FAEDCFF2EFC1F6F6D8FEFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF4EFD4 DFCE7FE4C877F0D092FAF0DBFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF6EDFDEED7F0ECBBF3F3D0FCFCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F2D6E1E2A6EBECC6 FDFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF9FAE1EDEAA6E2C672E0B265F6E9D2FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5 F9F9DEE1E1A0EAEABDFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFBF2F0EFD0E3D276E0BF40F0D691F9EBE1E3E0DDECECECFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFFF3EAF2D89CE1C051E5D37EEAEAC9E1E3D9E3E3E4 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E1D27EDDCF77ECDE86E5D87DDDD074E5D87CE2D47BDFD179E4D580E9DA86E6DA86E1D682DED380 E3D886E2D785E6DB89EADF8DE2D785E0D586E8DD8EECE190E9DE8EE9DE8FE6DB8CE7DB8DE8DD8E E0D585DFD484D7CC7DDCD180DCD17FD9CE7CE3D985E6DB8AEADF8FE2D787EAE08CF6EC97F3E990 F1E78DF2E98EF3EA8FF7EE93F6EC93F3E991F3E992F6EE9AF3EB96F6EE99F0E994EDE48FF0E691 F6EA96F1E591F0E38FEDDE8BEEDF8CF1E38DF2E489F2E589E8DB7FE2D577E5D87AEDDF84EDDF86 EDDE89EFE18EEDDD8EE8DA8CEDE091ECE192F2E797E8DD8DD9CE7FE6DB8BE4D989EADE8EEDE291 EEE393EEE393F1E694EFE492F5EA98EADF8BF5E998E9DE8CE8DD8BEBE18CEEE48FEFE590EAE089 ECE28CF6EC95F2E891EAE08BEDE390EDE292EFE397F5E99EF5E99FF4E89CF3E799F1E697EEE393 EDE28FEFE58FECE28CE7DC88E8DE8AEEE490EDE290E9DE8DECE191F1E696F0E595F2E798F0E593 EDE38EE9DF8AE7DC8AE9DE8DEFE492EFE495EADF90ECE192EDE393ECE192EBE090E4D583DECF7D DDCE7DEADA8CF8E89BFBEB9EF1E194EEDE90F3E394F5E694EEDF8CEADB88F4E592FDEF9DF8E996 EFE08DEEDF8CF3E48FF2E38FEFE08BEEE089F1E38CF5E892F4E894ECE18FF2E596EFDF91F0E190 F3E48DF5E992F8EE9CD7D087C0B7806E67461B1400E7DE9FFFFAB49087418A813BF7F4B2D5CC87 F8F0ABF6EDA99D94505C5314554C096960209A924CB3A963C2B973CCC37FCEC581CDC381C8BF7E ACA1608B81427C7333776C2E7D732DCABE73EFE298F3E99FE2D891EAE19DD9D192867F48DFD9A6 7F7749120D000400006F662DFFFAB2E1DA8DE2DD7BE5E17AEDE692E3D6A74C3D19B2A773FEFDAC DAD676EBE7909F9B591D1406251C04C1BC7AE7E193E3DD8CE8E395E6DD98D9CE979A8F57C9C366 DBD678FDF6AEB2A9732C2100786E3EFFF9B5E3DC90F0E89FD2C686B0A660DDD581ECE382E4DC88 E7DE8FE8E08DD1CA7EEEE3AAA79A69190F046A6327DAD7879F9C4DBCB6779E9661C0BB79E7E19A 5D560CACA459E2DA91E5DD96E5DC9FFFFCC5716A3C070300211D00DDDBA2D8D587B5AE6EDBD096 DBD18CDCD279EEE584FFF69DC0B674453A04AEA56BECE89DD9D481DBD484E6DC9C9F935B251903 82783CE7E094EAE58DCBC66BECE593E0D792EADFA964522B3D3006BDB761D1CB78F1ED9FEEE9AB 453B1B6B6133F9F1AFE9DF98D9D081EEE38DE7D882E0D47FE7DC8AD9D281DAD286E5DE95CDC47C D2C883DDD1886051223E2F00E1D49CF7ECBEABA463CCC976B1B158A3A557A4A26B757049150C00 92895DF3EEACE2DE8AE8E491E7E199847E3F7D7742645E3B544D27FFFCC4FDF7B8F5EEA9EDE39C F5E8A1FEF5B1FEF1ACFCF2ADF9EFAAF8EEA9FCF2ADFCF2ADFFF6B1FBF1ACF5EBA6F7EDA8FBF1AC F7EEA6F2EBA0F6EEA3F5EDA2F5EDA2FBF3AAFCF4ABF8F0A7F5EDA5F7EEA8F8EFA9F6EDA9F5ECAD FDF3B8F9EFB2FDF4B5FEF5B2FDF4B1F9F0ACF8F0A9F7EEA9F7EDA9FAF1AEFBF2B3F6EEB0FDF4B9 FBF2B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF3F3F3AFAFAF4D4D4D 1C1C1C2727272B2B2B2E2E2E2E2E2E2E2E2E2C2C2C1E1F1E0F0F0F0606060C0C0C2B2B2B545454 878887D9DAD9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F6F6F6EDEDED DCDCDCC3C3C39999995151511F201F444544979897E3E3E3CDCDCD797979323232464646DFDFDF FFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5E5E5A8A8A85454541E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFF4F4F4CDCDCD838383 1F1F1F656565CBCBCBF3F3F3FEFEFEFFFFFFFFFFFFF9F9F9D3D3D39494942626264A4A4A9A9A9A DEDEDEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCEDEDC9E0E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBF5EEEBC4 E7E1A9F9F8E5FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFDEBFEF6D5FAE2B9FBECD3FEFCF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF1F2F0D3D2C5C6B580DAAD3FEED495FEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEEF3DF9EE0B545CDAD5D CEC8B7EAE9E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3D8D8D88D8D8D505050313131515151 9F9F9FD7D7D7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F8 F6F6F6EBEBEBD8D8D8BEBEBE8B8B8B4545452323235D5D5DAEAEAEF7F7F7FFFFFFE2E2E2A4A4A4 4C4C4C262626959595FFFFFFFFFFFFD4D4D49292923030303D3D3DB5B5B5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDCDCDC9C9C9C4040402A2A2A8D8D8DEBEBEBF9F9F9E1E1E1ADADAD393939353535 898989D7D7D7F9F9F9FFFFFFFFFFFFFFFFFFEAEAEABCBCBC5050502E2E2E737373C3C3C3F4F4F4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFAF5FAE5C7FAE8C3FCF7D7FEFFEFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF6 F4E8C1E1BC5BECC87EFCE2C2FFF6EEFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9F8EBE4E3AAEAEABFFAFAF0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFBF7F4F0D3E8E7B1 F0F0CEFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF3F2CCE1D976DFC86EE6C589F8EEDCFEFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDF8F8E9E1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFAF2F0DFA1E6C457EFCB79F7DCB3F0EAE1F6F5F5FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F1FBE1B9EDCD79E1C352E9DB98F1F0E5E9EAEA E9E9E9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDFD07CD5C76FE0D27ADACD72D3C66AE0D377E0D278E5D77EE6D782E2D380DED27ED8CD7B DCD181E2D787E3D888E3D886E1D684E0D583E6DB89E7DC8AE5DB86E2D785E4D988E3D888E3D887 E4D989E2D785E6DB89DBD07EDBD17CDCD27DE1D782E6DC85E4DA84EBE090E4D989E9DF8BF5EB96 F3E990EBE287F0E78CF6ED92F4EB90EFE58CF1E78FF6EC95F5ED98F5ED98F8F09BF6EE99F3EA95 F4E994F1E490F6EA96F6EA96EBDC89E7D885EEE089EFE287EBDE82E9DC7EE9DC7EE9DC7EE5D77D E5D77EEADB86EFE08FF2E295EDDF91EFE293E5DA88E8DD8BEFE492EADF8DE9DE8BE8DD8BEBE08C EDE38EEEE391EFE591F1E792ECE28DEFE590E3D982F1E792E6DC87E6DC87F0E691EEE390F2E795 F0E592EBE08EEDE38EE9DF88E4DA84EADF8CEFE494EEE296F1E59AF2E69CECE094ECE093EEE394 EEE393E9DF8AEAE087E2D87FDBD17AE5DB84EAE089E3DA84E1D782E9DE8BF3E896F2E795F2E796 E8DE89EBE18CECE28DECE28DEEE390F0E593F3E896E9DE8CEEE393F2E797F0E595F1E694E8D985 F0E18DF8E998F5E597ECDC8FE9D98EF2E296EEDE90F2E394F4E693EEDF8BEBDC8AF2E392F6E698 F6E797F4E592EFE08DF4E590F2E48CEBDD85E7D980E7DA80EADE82EADE8AE9DE8CF2E596EDDE8D F1E28EF1E38AF5EA90EEE58DDCD689CCC3895E573A48411BFFF7BAC0B774635816F8EDACE1D796 FFF9B9B4AA6A473D0451480CA09755CEC685F1E8A1E3DA8DEADE91E3D98CDFD58AE0D489E0D68B EADF97F5E9A1F3E7A0E2D790C5B873A99D5573651E8B7E37C3B972EFE5A1EDE4A5E6DDA1D3CC97 8982521D16000C0600443E1CEFE99CEBE294FCF5B1DBD183E1DA84F5EE9D6F642E908554EBE2A0 EBE495DDD48DD9CE9D2B2111120C00A7A360FCF8B0DBD87BDEDB7BD1CB7DD7CB9B8D804DC2B96E D0C971E7E18EBAB5712E27006B623EFCF3B8DAD386E6DF8AE7DF8E968C45CABD78F7EC9BDFD679 F0E799D6CF85DED788F0E8A1AA9F671A0E064D4210E8E3A0E6E48FD7D77FACAA5FD5D195CDC68F 7F7834817C2BE8E288E7E18ADAD288F3EAB2A2996E0E0700120E00B5B584E6E6A6B1AD5EE5DF88 E7DF94E4D99DF3E898F5F099CABF72443702A19857E9E396D3CF8ADAD491F4EBAB91874A2A2000 9F9554E2DA95DFD88ADFD887E6E08EDCD489ECE4A2504515574713BFB374C3BC6DE8E28DE1DB97 2D2504595222E9E1A5D6CE86E5DC87ECDF90E2D587E6D783E9DC88E3D887EEE698EDE79DC6C179 E6DF99CCC581675E21574B0ADDD08AE7DB9DDDD499E5DF99B6B363E4E394B5B26F65602C160F00 665E32DED59EE8E295EAE589D8D284F0E9A6595327948E5A7E784B6B6635FBF7B9FBF6B1F7F0A8 F0E69FF6E9A5FFF3B2F9EDA9FBF1ACF7EDA8F9EFAAFCF2ADF7EDA8FCF2ADFEF4AFFBF1ACFBF1AC FDF3AEFBF1AAFEF6ACFDF5ADF7EFA6F1E9A0F3EBA3F8F0A8F8EFAAF7EEAAF9F0ADFCF3B0FDF4B2 F9EFB1FEF4B9FCF2B5FFF7B7F9F0ACF2EAA1FBF3AAFAF2A9F5EDA5F3EBA3F8EFAAFFF8B6F7EEB3 FDF4BBFDF4BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCD4D4D4 9898987878787B7B7B7A7A7A7A7A7A7A7A7A7A7A7A7575755859583131311515152323236D6D6D 959595B8B8B8E9E9E9FDFDFDFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFBFBFBFCFCFCFEFEFEFFFFFF FDFDFDF6F6F6EEEEEED0D0D07F7F7F363736303030838383DEDEDECDCDCD797979323232464646 DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9D9D9DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE5E5E5A8A8A85454541E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFF8F8F8DADADA 939393212121535353ABABABE6E6E6FBFBFBFEFEFEFFFFFFE8E8E89A9A9A4D4D4D282828707070 CFCFCFF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFCEEEDC9E1E1A4F4F3DDFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF7 F8EBCEF5E1B5FDF7DAFFFEF0FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1 FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF7FAF8E1EBE1ACF1EBC8FDFCF6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5EADDDBB5D0C179DBB856EEDAA5FEFEFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFEF3E1AAE1B547 DAB351E2D2A8F2EEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFACDCDCD919191454545373737595959 989898D6D6D6F1F1F1FFFFFFFEFEFEFDFDFDFDFDFDFEFEFEFFFFFFFEFEFEFDFDFDFBFBFBFCFCFC FFFFFFFFFFFFFCFCFCF5F5F5EDEDEDC1C1C16A6A6A2B2B2B3D3D3D979797F5F5F5FFFFFFE2E2E2 A4A4A44C4C4C262626959595FFFFFFFFFFFFD4D4D49292923030303D3D3DB5B5B5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDCDCDC9C9C9C4040402A2A2A8D8D8DEAEAEAF9F9F9EAEAEABEBEBE414141 303030797979C8C8C8F5F5F5FEFEFEFDFDFDFDFDFDC7C7C77F7F7F393939484848A4A4A4EEEEEE FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFAF2EDE3B5EFE7BBFBF9E4FFFFFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC FEFCE8F3E1A6E1AD39EDC980FEF2E4FFFDFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9EEE2E2A7E9E9BCFAFAF0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFECD9FAECC9 F6F2C8F9FAE2FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF9F2EABBE0C855E8C871F5D7ADFCF3E7 FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEF8F8EBE2E1A6EBEAC0FBFBF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAFAEACCF3D189EBC667E1C46CD3CDB9E5E4E3FBFBFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF5E3EDCF79E3C75FDDCE72E1DCAFE9E9E4 F0F0F2F7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE1D27FD9CB73E4D67EE1D478DED175E2D579E3D57CE7D880E1D27DDCCD7ADCD07F DBCF80DFD386E1D687E1D687DFD484DED381E7DC8AEDE38FE6DC87E5DB85E6DD86E7DD89ECE190 E6DB8ADFD482E8DD8AE9DE8AE1D782E1D781E4DA83E9DF86EAE088EAE089E9DE8EE7DC8CEBE18D F2E893EEE48BE2D97EEBE287EDE489E9E085EAE087F1E78FF1E790F1E995F3EB97F9F19EF8F09C F6EC98F7EC98F3E694FDF19EF8EB99F1E190EBDC8AEADB85EBDE82E7DA7CE7DA7CEBDD7FEEE183 EFE187F3E58CF2E38FF3E492F5E598EFE095EDE191EBE18DE7DD8AECE28EF3E895ECE28DE7DD87 E8DE88EDE38DF3E992F0E78FE9DF87EEE48CECE38AE9DF87EEE48CF4EA94F2E892F1E792F1E694 EFE492F2E796F0E594EADF8CE9DF86E2D881E2D783F3E897F6EA9EEDE196EEE298EDE196EBDF93 EADE91E7DC8DE7DD86EEE586EBE286E6DD81EFE58BEDE389E2D87FDDD37BE3D984F0E692F4E996 F5EB98EAE08BEAE08BEBE18CEDE48FECE28EE9DE8BEFE591E7DC8AF0E593F4E998F1E695F7ED99 F7E793F3E490F3E491F0E092F0E095F5E49AF4E498F2E295F2E392F2E391EFE08AEEDF8EEFDE91 EBDB8EEFDF90F3E491F2E390F4E68FF2E48BEADD82E4D77AE2D576E2D678E4D883E9DE8EF3E698 ECDD8CF0E18CEDE084F2E789ECE389E2DC8CCBC3856862387C754AF6F2B86B5F20DED899FFF5B9 EBE0A17D7243413600AAA466F5EEAEF9F1B0E2DA9AECE39ADBD17BD4CA72E3D881E8DD87E3D883 E1D582DACF7DD4C978D9CD7FE9DD8EECE091EDE097ECDD99C7BB76A79C59988D4DC1B77ADBD59C DFD7A23F3A1C130E002C2814C8C59AEEE699E4DC87DCD18EE1D59DEBDFA57C722C676017ECE78C E8E190EDE3A6E3D5AF2D20130F0501A49E6FFFFFB7E4E28EE3E186DBD77EDAD48699914DCAC17A EFE699E4DB95C9C07F2F2A0068632DE1DB97ECE59FEEE69BE6DE8F817927B9B05DF1E794DFD483 E8DC8DE2D989E7DF94EFE5A4D1C78F281D00342A0CE0DA9CE8E39CEAE798ECEB98BDBC6AC8C67B ACA5717C7535D4CF79DCD872D2CE6BE4DD8DC1B9831F14020C07018A8862DDE1A6A7A95FD7D380 E8E386DDD77FE4DA8FECDF9CBEB0714A3B00968C4AF3ECA0DBD888C3C07CE7DEA96A5C32514611 B1A962F7F0A2D2CB7AD8D182D0C87EECE3A0D1C885453C0E6D6325D7CE82E9DF96F7EEAECDC588 3C34047E773EF4EFA8EEE69CE1DA8DD8CC7BDFD285DDCE82DED17DE5DA88ECE494D7D184E8E49B E5E19BCDC9854743067C753CE7DE99DDD18BE2D88FDED58AEDE69CD3CD87AEA869827D47211C00 5C562BE9E2A9D4CD87F0EA95EEE88DDED78DE9E2A63F3809C9C38F8A85516B662DF3EFACF4F0A6 F7F1A7F8EEA8F7E9AAF4E6A8F1E4A2F6ECA7F3E9A3F7EDA8F9EFAAEEE49FF6ECA7FDF3AFFCF2AD FDF3AEFEF4AFFAF1A9FCF4AAFEF7AEFCF4ABF9F1A8FBF2ACFBF2ADF7EEAAF8EFADFBF2B1FDF3B4 FCF2B3FCF2B5FFF6B9FBF1B3FEF4B1F2E9A2EDE59BEFE79CF2EB9EF6EEA3F9F1A8FAF2AAFBF2AE F8EFB3FBF2B9F8EFB7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3F3DBDBDBCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D2D2D2C8C8C89192914D4E4D262626434343 B9B9B9DDDDDDECECECF9F9F9FFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E8E8E8CACACAD0D0D0E0E0E0 E9E9E9ECECECEDEDEDEDEDEDD8D8D88888883D3E3D2E2E2E818181DEDEDECECECE797979323232 464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9D9D9DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE5E5E5A8A8A85454541E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFFCFCFC E9E9E9A6A6A62929293C3C3C7B7B7BC9C9C9E9E9E9ECECECE4E4E4BCBCBC6363632525254D4D4D A1A1A1F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFDF2EDCEE9E1ACF7F3E0FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBF8FFEAD5FFDFBDFFEFD3FFF9E8FFFEFBFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3 F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7E8E0E1A4EAEBC1FCFCF5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F6E5E6DEA4D9C96ED9C467ECE0B1FEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E2B8 E2B954E2B84DEFD694F9EFD6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D9D9D99494944A4A4A1C1C1C3C3C3C 868686C9C9C9EAEAEAEEEEEEECECECECECECECECECEEEEEEF8F8F8FCFCFCF6F6F6E2E2E2C8C8C8 D2D2D2E3E3E3EAEAEAECECECEDEDEDEFEFEFC9C9C97373732F2F2F383838949494F4F4F4FFFFFF E2E2E2A4A4A44C4C4C262626959595FFFFFFFFFFFFD4D4D49292923030303D3D3DB5B5B5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCDCDC9C9C9C4040402A2A2A8D8D8DEAEAEAF9F9F9F4F4F4D1D1D1 5050502B2B2B5C5C5CA7A7A7E2E2E2EDEDEDE6E6E6D5D5D59292924B4B4B4141417A7A7AD1D1D1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E3E4ACE7E8B7F8F8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFEF6F7F6D3ECD98DDFA930EDCD88FEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EDE2E2A8E9E9BCFAFAF0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF9F2F7E2BC F9E8C1FEFADFFFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF2F3E2ACE1B642EFCA7CFFE9D2 FFF9F4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFAF8ECEAE1AEF0EAC1FCFBECFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF5EEFBE1BAE8C763D3B539C2BD93DBDBCF FAFAF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF9F3F9EACCE3BA4BDBBE54DBD598DFE1CB E8E8E6F7F7F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFECDD87E5D780EADC83E0D378DDD074EBDE82E8DA81E7D981DBCD76DACB76 E3D583DED282E1D486E0D586E5D98AE7DB8AE5DA88E8DD8BE7DB87DED37FE4DA83EBE08AE1D682 E9DE8CE6DA88DAD07CECE38EE9DF8AE3D983E9DF88EBE18AE4DA82DED47FE5DA86EDE292F1E696 F4E997F5EB96EFE58CE0D67DF1E88EE7DE83E2D97EF1E88DFBF198EFE58EE7E08BEAE28EF2EA96 F1E995EFE590F1E791F8EB96F9ED98F0E390F6E996F0E18FE4D780EDE284EFE284E8DC7EE7DC7D F3E688F1E489EEE289EBDD88EBDC8AF3E597F5E699E4D885F4EA93EDE38CDDD27CE7DC86E8DD87 FAEF98EBE18AE5DB84F0E48EF7EC95F4EA91EAE187E8DF84EAE186E1D77EF2E890E9DF88EFE590 FBF19CEDE290EEE392F8ED9DF4E998FAF19BECE28CDBD17FF5EA9AFAEEA2EADE93F5E99EFBEFA4 F8ECA0EEE395E7DC8CE0D67FEBE385F1E78AEFE58AF1E88DE1D67DE4D980DAD077DBD078E8DD85 F1E68EF8ED95F3E892EDE28CEAE089F1E590F3E892F0E690E8DC87E3D884F0E692F3E895F0E593 FAEE9AEFE38EEBDC88EBDE8CE9DB8BEEDE91F5E79AF0E294F2E194ECDF8DE9DC87EBDB87EDDE8B EDDD8FE9DA8AE6D786EBDC88F4E590F2E48BEEE087ECDF82ECE081EFE282F3E687EDE18BF2E894 FAEE9DEEDF8CF2E48EEFE188EFE588F5ED93DED787B8B372726E3C918A5FB6AF79897F44F2E9AC E2D8984A411A5E5518DFD696F2E8A8F3EBAAE7DE9BDFD694EEE599E3D97CE2D77BEDE287DDD277 E2D77DF4E990EBDF89E4D882E7DB87F0E490EBDE8BE8DA92D4C581D8C880E1D489D2C780A69D5D C0B98398946B0E0C00141100888458EAE5B1E1D98CE3DA85EAE098EEDFB3A6976D5A500FE4E178 EFED81DEDA85E3D6AF46362A0B0000746A4DE6DFAED4D087E4E486B9B566F4EDA5989242BDB95A F5F094E9E19BE4D6A7423715645D2BD7D389E3DD89D8D37FEAE198776C23C5BB6BF0E78DE0D77E EDE190E0D589F0E99CE6DE9BCDC28C24190D2B220CD8D08CF2EC9FD7D185EAE69DE7E49AE1DF8B ABA956605720D4CD89D2CE75D6D46DE0DC7DE1DC9249401A0800004A4124DCD9A9B6B771BFBE6B EAE58FDBD57DC4BE61D2C96FC7B97F291800988A56DAD284DED88AECE59FD6D18E493E1D504214 E1D697E0D888D8D37AE3DD86DDD58AFDFBBAC5BA7C392F077D7435E5DD92E8E289E8E194A59960 251909AAA16BE9E398F2EC96E0DA80D6CF78D8CC80E1D285F0E190DFD482DAD181E4DC91E2DA92 C9C580736F2E3C3900AAA661F7F0A7ECE397DBD384E8E190E9E596D9D48DC9C185645A22150C00 847C47F5ECAFE3DA94EFE796DED77FF1EA90ECE39EB9B07B332B00FBF6C660582E817B48FFFCB7 F1ECA1EAE396F0E59EF6EAA9F5E7AAEEE3A1F8EDABF5EAA8FBF0AEFBF1ACEBE19CF1E7A0FAF0A8 F9EFA8FAF0AAFDF3AEFBF2ACFAF2A8FEF6ACFDF5ACF8F0A7F8F0A9FBF3ADFCF3AEFCF3B1FFF6B3 FEF5B5FAF1B0FCF2B4FDF3B6F7EEADFEF5B1F8F1A8FBF6ADFAF2A7F6EFA3F5EDA3F8F0A8FCF4AC FDF4B0FFF5B7FDF4B8F6EDB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF8F8F8F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7EAEAEA9E9F9E515251343434 5E5E5EDCDCDCF8F8F8FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFCFCFCE9E9E9BBBBBB5C5C5C6C6C6C 999999B1B1B1B9B9B9B9B9B9B2B2B29394934D4E4D1B1B1B424242979797E3E3E3CCCCCC797979 323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9C9C9CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE5E5E5A8A8A85454541E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFF FFFFFFF7F7F7BDBDBD4141412C2C2C434343929292B8B8B8B8B8B89A9A9A6A6A6A454545484848 A8A8A8DBDBDBFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFDEDD9FBE1BEFEF3E6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFCF8FFEBD5FFDCBDFFDED2FFECE8FFFCFBFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6 E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2 FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F0DCE5CF8BD5BE56D2CE6AE7E8B5FEFEFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3E6C5E2C16FDBB34CE2C474F3E6C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCDEDEDE8E8E8E494949181818282828 5C5C5C969696B6B6B6B9B9B9BABABABABABABABABAB9B9B9C0C0C0E4E4E4F7F7F7E5E5E5A9A9A9 585858727272A0A0A0B3B3B3BABABAB8B8B8B0B0B08787874141411F1F1F5D5D5DAEAEAEF7F7F7 FFFFFFE2E2E2A4A4A44B4B4B252525959595FFFFFFFFFFFFD4D4D49292923030303D3D3DB5B5B5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC9C9C9C3F3F3F2A2A2A8C8C8CEAEAEAFAFAFAFEFEFE E5E5E56C6C6C2E2E2E3333336A6A6AB0B0B0BABABAAAAAAA7474744C4C4C3E3E3E808080C9C9C9 EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8F8F8EBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9ECE9E8B7DDD07ADEBA54EED8A1FEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EDE2E2A8E9E9BC FAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF9EF E6E3ADECE9BDFAF9EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDFBE1F2DA9CE1A846EECC93 FFFAF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFEF8F0FBE2C0FCEAC5FEFADCFFFFF3FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF2DBE9D177DABC3BD7CF82 E8E7C3FCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFEECD8F8D3A4E3A746DCB368DED4BC ECEEECFAFAF9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE2D47BE0D278E3D679E5D87CE3D67AEBDE82E2D579D7CA6EDCCE75 E1D47ADDCF76E5D97FE4D57FE5D881E3D680E9DA84EDE08BE7DB87E6D784E8DA87E6D987E8D989 E8D98AEBDE8FE6D886DDD17EE8DC88E0D37DE0D580E0D682E6DE8CE3DB8AD9D082EAE193EFE397 E9DE8FF0E596FAEF9FF3E996ECE28BECE28AF6ED93F5EC91F8EF94F3EA8CFBF297EEE38CEDE38C EEE48BF0E78CEEE589ECE385EAE183EEE688EAE185E0D77BEDE389EBE284ECE481E7DD7BD9D170 EAE182F1E78CEDE389E5DB84E9DD8AEBDF8FF0E595F1E596EFE28DFBEF96F1E48BDFD179E4D781 E4D781E9DA87E9DC89F4E795F4E594F8EA9AE9DC89EEE58BE2D97EE4DB80F0E68DEFE58CEAE087 EAE089EAE088EBE18BF3E995EFE592F9EE9CF2E699EBE092DACF81D9CD82EDE195F6EA9EE3D889 D5CA7BE3D889EEE393E8DD8CE8DC88EBDF86E8DB83E3D580E4D882F0E28DE4D581E9DE85EEE287 EDE083ECE181E7DC7CEFE187E1D57CEDE189F4E68DE9DD82EEE387E8DA80E8DB82E8DD84E6D883 E6D786ECE08EEDE190ECE08FF0E594F0E593EFE293F0E695ECE18FEADF8BEBE08BF0E68FF8EC96 F7EB91EDDF85DCCF76E9DB82FDF096EEE087EBDD84EADC84EADC83EEE088EEE087F3E58CE6DB7F E4D97FEEDF88F1E290EFE08EF4E592EBDF8AF7EE9BE8E2969B9657433E175D5B375F5D32C7C592 D1CE8E373300827C39F2EB9CEEE499E5D891E1D78FF1E7A2E3D992D1C878D2C76DCEC369CCC168 C5B961C8BD64D3C771CCC06DD6CA76D9CC7AE8DC8AD1C574E7D791E0CD88DFCD72BDA843E2D271 E7DF94AFAD801E220D0002004B4B1EE6DE99F1E48BF5EA98DFD586E8DE95D3C891584E1ABAB365 F0EF89E3E08BE6DEAB6F644C080200514D13ECE39EE6DD92DBD481D3CD78DAD190827A39AAA64F D5D271D8D57BD1CA8632240E4B3E27CBC188D9D47EEAE585DED37A9C8E418F7E31F9E99BECDE96 D5CB85E0DA88E5E281E8E4A6C9C69A26220F252008B6B069E7E092E7E18CE3DC89E3DC8EF1E9A1 D4CC876A631CD3C97BEAE38FE4DF8CC4C176EDECAD8A87570200001F1705C1B887C2B872DCD176 ECE383EBE38DE0D785D8D081A69D5241360093874EDFD29BD7CC8FDBD093ABA06C40350964581A ECE089EBE08BEDE38DD2CA78D6CD81E6DD99B6AC6A352D078B843CF6F2A8DBD58AEEE79E827B38 231B009D9351EDE49BDBD47ED8D272D9D26CDFD572E7DB80D3C56FE1D284DBD386DBD38BEAE19D BCB276463E04362D0AC1B772F4ECA0E9E38BE4DC7AE8E07AE1E18DB8BC80AFAD76635C282D2008 988848D6C383EAD892EAD98CEEE08DE3D87FF0E890FFF7B24A4114786D4EFAEDC8382C03ACA26F FDF4B3E9E194EAE290F8EFA2FAEFAAF7E9AAF6ECABFCF1B3FCF1B3FBF0B1F9EDACF1E7A0EAE193 ECE393EEE598F3E9A1FDF2B0FCF5AEF7EF9EFDF5A4FCF3A3F7EF9FF7EEA0F5EC9FF5EDA1FAF0A8 FBF1A8F9EFA7F9EFA7F9EFA9FBF1ABF8EEA6F6ECA4FEF4ADFFF5AEFBF0ACF8EEAAF3E8A6FFF4B3 FBF0AFFCF2B2FAF1AEF6EDAAF9F0AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3A2A3A2525352 363736646464E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0C4C4C45A5A5A 4C4C4C5959595D5D5D5C5C5C5C5C5C5C5C5C5A5A5A515151585858939393CACACAEDEDEDCACACA 787878323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9C9C9CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE5E5E5A8A8A85454541E1E1E787878E1E1E1F8F8F8FEFEFEFFFFFF FFFFFFFFFFFFFCFCFCDBDBDB8D8D8D5D5E5D4344435252525C5B5C5C5C5C5959595C5D5C707170 969696D9D9D9F3F3F3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFEEEFFEDD2FFE1C1FFF3E8FFFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FFFFF0 FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFDFAFFF4DFFFE9C7FFDEC7FFEADFFFFBF9FFFFFFFFFFFFFFFFFFFFFFFFFDFDFA ECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5FFFFF0FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4 EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EDD4E6C673DBB647E0D37FF0EBC3FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9EDD7EFD095E3B756E1BA59F2E1B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCD4D4D46F6F6F303030080808 1616163333335151515E5E5E5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B696969BEBEBEF6F6F6EFEFEF B4B4B45A5A5A5151515C5C5C5C5C5C5C5C5C5C5C5C5D5D5D585858525252636363A7A7A7D7D7D7 FBFBFBFFFFFFE2E2E2A4A4A44B4B4B252525949494FFFFFFFFFFFFD4D4D49292923030303D3D3D B4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC9C9C9C3F3F3F2929298C8C8CEAEAEAFAFAFA FFFFFFF2F2F2ACACAC6E6E6E4646464242425858585C5C5C5959594C4C4C5D5D5D808080BDBDBD EBEBEBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8F8F8EBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F5E3E7DA9CDFC66CEBCB82F6E3BFFEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EDE2E2A8 E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE F9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCF0F2F0C8E6D38CDFB05E EED3A9FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCF5FFF0D3FFEDC8FFEFCCFFF8E8FFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8ECF3DDA3E8C365 DEB95FEBD7A4FCF9F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF5F5D8B0EBB76CDFB55BE2CA90 EBE6D9F7F8FBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CB71DACC72E1D379E4D77DE2D57AE5D77DDFD177DACC72 E3D57BEADD82E6D97EDED176E3D57CE1D37AD8CA72DED079EBDB87E5D681E1D27FEDDE8CEFE08F E5D586E2D284EBDB8DE7D887DFD27FE8DC88E0D47EDDD37EE0D782DED786DCD386DED589E7DE93 DCD083E8DD8EF6EB9BF1E696E8DD8AECE28BF6EC95F4EB91EFE689F9F093F3EA8BF4EB8EF9EF97 F0E68DE9E084EAE185F4EB8CF9F191EAE380EFE687EEE586EAE185F0E78DEDE487E7DF7EE5DC7C EFE788F1E88CECE388EAE088F3E994F2E795F8ED9DF7EC9CF2E798F3E490EFE188E9DB82E5D780 E5D781E7D883E7D885EEDF8DF4E594E6D688EFDE91EEE291F0E68CEAE186E7DE83E9DF86EDE38B F0E68EEEE48DEEE48EEAE08AFAF09BF5EB96F1E695F7EBA0F1E59ACDC174C1B668E5DA8CFCF1A1 EADF8FE0D585E8DD8CF0E594F0E593EDDF8AE8D982E5D681EBDC89F3E391F5E695E4D583EADB86 EBDD84E7D97EEBDE7FF0E384EBDD84EADC84E4D67DE6D87FEFE187ECDE84F0E288EEE087F1E28B EDDE8BECDD8BF0E493EEE293F2E797F7EC9CF2E796EDE290EFE491E8DE89EBE18CEDE48DF0E690 F2E891F1E68CF1E489E5D77DEBDE83F9EB92EFE189F5E78EF3E58EEFE08AEADB87E6D881EFE08B E0D57AE5D97FF1E28DF2E392EFDF90F4E796F9ED99F0E896ECE69ABEB979706E40121000626037 EEEEBA3030096E6C2BEFEB96E8E28EDFD484DED287C8BC74B1A65EBFB56DC4BB6CD1C770D6CC74 D1C76FD8CD77D7CC77D1C673CFC473D6CB7AD2C677D9CD7ECCC071D5C580BAA95FE8D577DFCC62 E5D474F1EAA6615F3A0000001A1F08B0AF7CF6EC9FF0DF83F6E99BE4DA93EAE099847B348E8739 F1ED98DCD887F5EFB39E956C0F06004E4A1EE0DC92F7EF9DF6EE98EBE393EBE29E8D873CBEB76C D5D083C7C56BA7A352332C0E352B10CFC695E2DB93E7E093F9F09DC6BA64998A36CCBB6CFBEBA2 E4D68DD3C97DD8D17EF3EF9EC6C38C2E2B0D3B3711BBB677EDE79EDFD787D6CC78CEC672ECE493 CEC67C7D7531CFC77FEEE48ADCD27DD9D289DDD9A08D8A5A131100110E009A9560D1C989DED284 EADA83E9DB83E3DB88EBE393BEB6695E55109E9454ECE1A4EDE2A6EFE4A88277403C31079C905C DACF7BE1D875D1C76CCFC672DBD185E6DC97938A482D24009A9255E1D997DED894C7C17B605629 4C430FAAA35AE0D883E1DB7EDFD87AD8CE73D9CF77E5DA84DFD47ED8CB70DBD17CE1DA96E7E19E 87823F2B24005D561BD2CA7BEDE696D9D07FE2DA86E3DA84DDD57FB1AD6B7E7F4B2E2D123E370C CDBF79F5E398D8C372E6D17FE6D481DFCF7EEEE192F9F0A4C7BD7B261C00D2CA9EC0B48F312409 DACD9BF1E8A5ECE496EEE694FEF6A6FFF9B0F4E7A4F7EDAAFBF1B0FAEEB0FAEFB0FAF0ADF5EBA2 F2EA99FBF3A0FCF8A8FCF5ACFCF1B1FCF2AAF9F19EF5ED9AF6EE9CF8F09FF3EA9BF5EC9EF5EC9F F2E99EF6EDA2FAF1A6F8EEA6F3E9A0F7EEA4F8EFA5F9F0A6FEF4ADFDF3ACF7EDA7F9EFABF6EBA9 F9EFAEE5D999D4C989FDF5AEF8F0A8FAF1ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5ADAEAD 6668664E4F4E777777E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCDCDCDC 8081805859584142412F2F2F2626262626262E2E2E464646747474A9A9A9E4E4E4FBFBFBF8F8F8 CFCFCF8989894A4A4A5C5C5CE3E3E3FFFFFFFFFFFFFFFFFFE2E2E2AAAAAA5A5A5A444444A8A8A8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8B2B2B2696969383838888888E4E4E4F8F8F8FEFEFE FFFFFFFFFFFFFFFFFFFEFEFEF5F5F5DADADAA1A1A1656565383838262626282828414141737473 AFAFAFE2E2E2F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FFFEE0FFEDC9FFE1C0FFF3E8FFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFAE4 FBF7D2FBF6E2FCF9F1FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFCFFFEE9FFF7D3FFE1BDFFEAD4FFFBF7FFFFFFFFFFFFFFFFFFFFFFFF FDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFDE7FBFAD7FBF5DFFCF8EEFEFDFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8 E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBCAE6C060E1B33FF0D99CF9F0D5FFFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF5E9FCE0BBECBE63E2B445F1DDAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCD5D5D5747474414141 2121211F1F1F222222242424252525252525252525252525252525232323373737A7A7A7F7F7F7 FDFDFDD2D2D28585855C5C5C3E3E3E2C2C2C2525252727273131314D4D4D7D7D7DB4B4B4ECECEC FCFCFCFFFFFFFFFFFFE6E6E6AFAFAF6161613F3F3FA0A0A0FFFFFFFFFFFFD9D9D99F9F9F494949 535353BDBDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0A8A8A8565656424242999999EDEDED FAFAFAFFFFFFFBFBFBEAEAEAB8B8B87676764242422929292525253030305151518D8D8DCDCDCD F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8F8F8EBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F2DEE7D28DE4C36CF9DBB1FEEFDCFFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9ED E2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8E7E9E5B1DFD085 E1C482F0E0BFFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8FFFBE1FFEDCBFFE2C0FFF0E0FFFEFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FEE9D1 F6CE97E1A441EBC484FCF3E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4E9EAC487DAA13CDDCB7C EAE7BCF9F9F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CA71DACC73E0D279E2D47BDFD178E1D37ADDCF76 DDCF76E3D57CE4D67DE0D279DCCE75DFD178DED077D7C971DACB76E9DA85EBDC87E7D885F0E18F EEDF8EE4D584E4D485EBDC8BE4D583D9CD79E2D682DED27CDBD17CE2D883D7CF7DD5CC7DE4DB8E E2D98DDED383E8DC8BEADF8EDDD280DCD27DF2E88FEDE48AECE387E8DF82F2E98AF0E788F4EB8E EDE38BEFE58CECE388EAE186EDE485F0E788E7DF7DEAE182EEE589EEE58AF0E68DE8DE85E4DB80 E0D77BE5DC81E9DF86EBE18AF1E791ECE28DC9BE6CE9DE8DFCF1A1EFE493EEE08BE1D37BE5D77F EBDC87E3D47FF2E38DDCCD7AEEDF8DFCED9CEDDD8FEEDE90E9DD8CF3E98FF3EB8FEBE286E5DB82 EEE48CF5EB94F2E891E4DA84E8DE89F0E691EAE08BF8ED9CEFE495F2E798EFE496F3E899F6EB9B F7EC9CF7EC9BF1E695F3E896F0E692F0E593ECE18BE9DB83E8D985EBDC89EFDF8EEDDD8EE7D789 ECDD8BE8D986E0D17CE7D981F2E48BF3E48FF0E08BE7D981E5D77FEBDD84EBDC84F2E48CF0E18B F3E491F3E494F2E295F6E99BEDE292F2E797F5EA9AECE191E9DE8EEEE391EDE290EEE48FEEE48F EBE18CE8DE87E9DF87F3E58DECDE86F1E28CF8E994F4E590F7E894F4E592F4E594EFE08FEBDC8B F3E593EADE88E9DD85F0E18FF3E395F1E193F4E595EFE38FE7DD8CECE698E6E19EFAF7BE888656 77764962613B545314FFFFB1E1DC89F6F09AC6BB6A978C41AFA35CE0D68EFEF7ACDED586E6DE89 E6DB89E6DD8AF1E895F6EB9BEDE393E4DA8BE9DE91DFD489E0D78CE5D98EDBCE87DBCD82C5B65A DDCD6EEFDF92C1B8871E1A060B0C00676B3FD6D293E9DD90F1DF8FE9DA97E8DE9E9D934D5B5508 E7E386E7E38FF4EAB4B7AD86170E04292511CFCC87F2EE9FEDE68FDBD380ECE29CBFB578ADA755 F2EE99F2EBA5F3EFA7514C201D1500ADA66FEBE69BE4DF8AE3DA99C3B8759A8F40E7DB81EFE08F E2D489EDE391C6BF66E3DC8ED5CC931B170C373309C0BA82F7EFAFE3DB92EADF91E5DA8ADCD181 D7CE7F786F22C0B86FEAE396DAD277EAE292E8DFA3A7A1761F1A0A0F0F00515022CAC880D3CE7D DFD386D8C77EDECF84F3EB9BAAA355504803B7AE68E0D794D1C888E3D99B483E0A433916D7CD8F E0D697E7DF8CCDC769C9C36CCCC374E0D68F736736281D00B2A771DFD59DABA0686A6122211700 5A5016D0C684D6CD7EDAD378D7D171D9D374E0D580D3C67AD9D086DDD184F2E794ECE394C2BB7B 3F390D353101928D3AD0CB73DEDA7FDCD67FF1EA99CCC27AC1B677BBAF7760572E1A160059541C E3DA95F1E592D9CA6CDDCB6AF5E284DBCA74EBDA8FE3D595E8DDA13E340B89804AFFF9CB70643A 4C401DF1E6AEE2DA94F8F1A0EBE38EDDD584F2E89DFFF5AFF6ECA4FAF0A9F8EEAAFCF1AFFFF7B1 FDF4A9E4DC8AF0E895F7F0A0F9EFA7F7ECACF7ECA7F4EC9AF4EC99F6EE9CF8F09FF5EB9DF8EFA1 FBF2A5F6EDA2F6EDA2F7EEA3F9EFA6F3EA9DF5ECA0F7EEA2F9F0A5FFF6ABFEF5ABFDF3ABFEF5AE FBF1ACFEF3AFE6DC97D4C983FDF5ACF9F1A8FCF4ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB E2E2E2CACBCAC2C2C2D0D0D0F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F3F3F3D4D4D4C5C6C5BBBBBBB3B3B3AFAFAFB0B0B0B3B3B3BDBDBDD0D0D0E5E5E5FAFAFAFFFFFF FDFDFDEEEEEED7D7D7C1C1C1C6C6C6F5F5F5FFFFFFFFFFFFFFFFFFF5F5F5E2E2E2C6C6C6BEBEBE E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E5E5E5CBCBCBBABABAD6D6D6F6F6F6FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6E2E2E2CACACAB8B8B8B0B0B0B1B1B1BBBBBB CFCFCFE6E6E6F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5FFFEDEFFEDC8FFE1C0FFF3E8FFFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF7 F1E2B7E5CB7DE5CA82EFDFB5FCF8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFEAFFFAD4FFE2BCFFEAD3FFFBF6FFFFFFFFFFFFFFFFFF FFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8F0F0CBE5DE97E5C469F0D89FFDF9EFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFD F7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF9F7EBB9E6BF58E4B950F8EBCDFEFAF2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDF2FDF2CEEDCA70E2B546F1DDAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0CECECE BDBDBDB2B2B2B0B0B0B0B0B0AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAEAEAEB6B6B6DFDFDF FCFCFCFFFFFFF1F1F1D6D6D6C6C6C6B9B9B9B2B2B2AFAFAFB0B0B0B4B4B4C0C0C0D3D3D3E9E9E9 FCFCFCFFFFFFFFFFFFFFFFFFF6F6F6E4E4E4C9C9C9BCBCBCDEDEDEFFFFFFFFFFFFF2F2F2DEDEDE C0C0C0C3C3C3E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4E1E1E1C5C5C5BEBEBEDCDCDC F9F9F9FDFDFDFFFFFFFEFEFEFBFBFBEAEAEAD1D1D1BCBCBCB1B1B1AFAFAFB4B4B4C2C2C2D9D9D9 F2F2F2FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8F8F8EBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F5E4E6DEA5E4D894FBF0DCFFFAF5FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE F9F9EDE2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6E5F7E4AE F3DD97F5E9B8FAF5DFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF8FFEBE4FFE1CBFFDFBEFFF0DFFFFDFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFF7EFF7E4BDE1B741ECC56FFDE4C7FFF7F1FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF9F3FCE4C9DDB870C79F3D E7DDB0F7F7E7FEFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7C970D6C86FD9CB72D9CB72D7C970E6D87F E0D279E2D47BE0D279D7C970D6C86FE9DB82E2D47CE3D57DE0D27ADCCD78DFD07BE4D580E8D986 E6D784E0D17EE6D786EEDF8EEFE08FE3D482D7CA76DDD17BE3D781E1D77FE7DD88DBD381D8CF80 E8DF92E2D98CE9DE8EEAE08BE9DF8AE2D882E1D780EFE58CEBE288F1E88CECE386EFE687ECE483 F7EE8EECE28AF1E68EF4EB90F2E98DEFE687ECE384E9E081EBE285F1E78CF1E78EF1E790E3D883 ECE18EF0E693E4DA87EEE490F3E995EEE391E9DE8CC6BB69DED381EFE492E8DD8BF7E894ECDD88 F4E590F2E390E3D481FBEC99E0D180E9DA89F6E796F1E193F7E699EFE391EBDF89F0E68DE6DC84 E2D87EE9DF88EBE18AE8DE89F4EA94DED37FE6DB89EDE290EEE391F6EB9BEBE090E8DD8DF0E593 EEE391EADF8CEEE48FF0E691F1E892EAE089E8DF89E9DE86EBE087EDE18CE9DD8BE6D98BE9DC8E F0E396F4E699EBDE90E4D887EBDF8DF3E794F1E594E6D989EEE28FEFE38FE5D984F2E690ECE08B E9DE8AEFE391F2E598F2E59AF7E99EF1E697EFE495EFE495EADF90EADF8FEFE494ECE18FEBE08E EADF8DE9DF8AE8DE89E7DC87E9DD88E5D984EBDF8BEEE290EFE390EEE290EADE8DEEE193F0E395 E9DC8EEBDE8FF2E694E9DF8CEADD90F5E59BF6E69BF8E898EDE18EECE290F5EFA0EFEBA5FFFFC9 7E7C48474618232200C9C784F9F7A7E3DE89BBB55F908635E2D58BFFFEB6E3D991E4DC90DDD688 D1CA7BC3BB6DCDC578CBC377D1C97DE1DA8EE5DD93EAE298E3DA91E2DA91F0E69FE8DF97EDE595 DED57BDCCF7EE9DAA2625439070000302F0ECFD190DBD989E9DD8EFAE6A2FAEBB1D2C78B51490E C9C465EDEB8AE8E298E2D4B8413322130A00ACA856F0EF9CE1DF8BEDE98CF0E8A1C7BE7DA29B4F F9F3A9DED98AF0ED9D938A60120800706B38B7B468DEDC81E6E284D9D08F95894DDBCE88DBCF7B E8DB8AE2D685E3DA81F2EA95DBD2914135211B1404AAA663EDE5A5EAE19DE2D78FE2D48ADACC7F E6D98A746819988E3FECE494E9E291F3EC94ECE39CF1E9BA483F250B050025230FBFC076E0E188 DFDB80DCD184EBDA9DEEDFA19D95495D5508B6AE64ECE39DD9D08EB3AA6C3B320070662ADED58F EBE39EEAE29BC3BC6CD6D17BD9D385B8B0674E450A514710CEC38BEFE3AFD3C692786B3D2A1F0A A09459DDD483DCD37ED7CB7FEADD97D2C77DDCD481C9C267E4DE80E6E088DDD48ACDC385857B49 2825005B591AC2C06FE1DF8CCECD75CDCB74E1DC8ABEB870A69D5D9A8E5F36290A30240BA49B68 ECE2A3EADE8FE1D474E3D368E4D364EBDA73DCCC74D9CA85EFE1AB897C551B1100EEE6ABDED7A2 2217008A8049FBF1B6E4DC93F5EE9EE4DC87D2CA79E5DA8EF6EAA1F4EC9DF6EDA0F1E8A0F3E9A4 F7EDA6F4EB9DE8E08EEBE390ECE494F1E79EF9EEADFAF1ACF6EE9EFDF5A4FCF3A3F5EC9DF2E99A F0E799F2E99CF6EDA2F1E89DEFE69BF9F0A5F2E99CF0E798EEE597EEE598F7EEA1FAF1A4F7EEA2 F7EDA4F4EAA1FDF7AFFCF2AAFDF3ABF1EA9DF1EA9DF8F0A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCFAFAFAFAFAFAFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFBFBFBFAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FBFBFBFDFDFDFEFEFE FFFFFFFFFFFFFEFEFEFCFCFCFAFAFAFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFA F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFBFBFBF9F9F9FBFBFBFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFAFAFAF9F9F9F8F8F8F8F8F8 F9F9F9FBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5FFFEDEFFEDC8FFE1C0FFF3E8FFFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFCF9F2E5C2E6CB84DEB652E4C97CF1EBC9FBFCF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF8EAFFEFD4FFDFBCFFE9D3FFFBF6FFFFFFFFFFFF FFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F1F1D4E4DD9ED9BD4DE2C870F1E3BC FBF7EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFFCEBF7E4AEE7C161E5C169FBF4E5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9DEEDCF7CE2B444F2D69BFFF9F4FFFDFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FBFBFBF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9 FCFCFCFFFFFFFFFFFFFEFEFEFBFBFBFAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9FBFBFB FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFAF9F9F9FCFCFCFFFFFFFFFFFFFEFEFE FCFCFCFAFAFAFAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFAFAFAF9F9F9 FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBF9F9F9F8F8F8F8F8F8F8F8F8FAFAFA FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8F8F8EB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAEFEEEECBEDECC5FCFBF4FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF9F9EDE2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF9F9EEE2E3A9E8E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9ED FEEEC9FEEDC0FEFBE0FFFEF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F6FFE3DAFFDBC9FFDDC7FFF0E5 FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFDFBF7EED5E1C164E6C165F3D290FCEED6FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEF7F5F4F4E4D0F1C891DFB56B D5B56BF2EAD3FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCE76D9CB72DDCF77E0D27AE0D27A EFE189E5D77FE7D981E5D77FDFD179DFD178DFD179DECF79E7D983EDDE88ECDD88E9DA85E4D580 ECDD88E6D782DDCE79ECDD8BEFE08FEADB8AE4D582DBCE79E0D47EE9DD85E1D780E4DA84DCD481 D8CF80DFD687DCD385EADF8EE9DF89EDE48CEEE48CEAE087EDE489E8DF83EDE487E7DE82E9E081 E3DB7BE9E083F3E98FEEE48BF2E98DF6ED90F2E98AEEE586EEE587F0E78BF3EA8FF0E68FF2E893 E3D887E6DB8DF1E598E9DD8FEEE394F0E595EADF8EF1E696EFE493EADF8EE5DA88EBE18CF7E996 EDDE8AF0E18DEBDC8ADBCC7AEDDE8CE5D685E5D685EADB8AE7D888F5E696F3E693F0E48EF3E990 EDE38AF1E78FF4EA93E8DE89ECE28DF7EC99C4B966D7CC7AF3E896E6DB8AECE18FF8ED9BF5EA98 F0E692F1E692ECE38EE6DC86E9DF89EEE48BECE289EEE48BECE089EBDF89EDE18EEBDE8FEBDE90 EFE196F5E79DF4E69DEEE096EDE095F6E89CF7E99DF1E497ECDF91F6E99AF6EA9AF0E592FDF19F EBDF8DE7DA8BECDE92F0E29AF0E29AF3E59DF3E79AEBDF92EDE194EEE294ECE191EBE091E4D988 E8DD8CECE191EFE491EFE491EFE492F1E494EBDE8EF1E595F2E597F1E495F5E89BEFE195F1E398 F6E89EF1E399EBDD93F9EDA0F4EA9DF4E79DF1E39BE9D991E7D78AF5E997E9E08CF1EA9AF3ECA6 FFFFC299965D0A090072713AD8D58FE8E4939D97419C943FE1D889EDE398E6DC94BEB66BB4AC5F BBB568C4BD74C6BF76DAD28AD3CB83D1C981DCD58CD5CE87C8C17ABFB871C7BF78EBE49FDDD68B C2BC6AE0DA86F4EAA9B9AB871306000D05007B7749F8F9A6E1DD81E5D789E3CE97E9DBA48B8145 9C954CF4F092DED983FAF0B984756309000091894FFCFA9EE4E38AE3E08DF4EF99DAD1888C843E E7E49CE1DC8DE1DC94A6A0631B1200685F44E1DDA48F8F37A8A748D3CE779A9444CFC57FF0E4A2 DAD086E0D681D3CC70E4DC86DFD69442341024160ABCB477E7E097DDD48DE5D992F1E39CEADB94 EDDD947C6D2495873AFAF1A1DCD482DED885E3DC91E8DEA46C63360600002C280ECBCA93E7E89B E5E689DCD77CEBE195D2C3898D7E43877F36D3CC82F9F1A9E7DF999B9450585013BBB370F6F2AD E8E199D5CF84C6BF74D9D689F1EEA47A763C4640049D965FEAE1A5F0E5ACB5AA714E420C6B5D2A DFD291E6DA96EBDF8DD9CE78DDD07DDDD381EEE592C8C06ED6CF7EDBD386E1DA908E87493A3306 49440FACAC62E5E491E4E393CFCC82DAD591CDC887D2CB8EA39A5D453C0F362D00756B3EDACF94 F1E5A6EEDF95EADB85ECDD7BE2D267E8D86CD2C260DFD17CE5D897D3C7952B1E00A29863FFF7BF A9A0662C2200CFC98BFAF2B1F3EBA2F0E899EEE695F2EA9AF6EC9DF0E496F9F19DFAF2A0F4EB9F F4EAA2F5EBA2F0E89AF5ED9AF2EA97F0E898F1E79EF7ECACFAF1ADF9F1A2FCF3A5F9F0A2F5EC9E F5EC9EF2E99CF5EC9FFDF4A9F8EFA4F2E99EF5ECA1F4EB9CF5ED9CF3EA9BF2E99BFAF1A2FBF2A4 F9F0A1F4EB9FECE397F6EDA1F3EA9DF7EEA0EDE594EDE595F5ED9EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FFFEE0FEEDC8FEE1BFFEF3E8 FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDFBF7ECF4E6C4E3BA55DFBE58E3D893F0F0D1FCFCF6FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFEEE9FFE1D3FFDDBDFFEAD5FFFBF7FFFFFF FFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFAF1F1F0D0D8D378D7C766 E1C97CF1E3BEFCFAF2FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9FFEFDAF6D8A2E6C26EE5CA81 FBF6EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAEDEDD28AE2B242F0CB85FFEBD5FFFAF6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8 F8F8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBFAFAF1FAFAF0FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEF9F9EDE2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFAF9EFE4E3ABEAE9BBFAF9EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFAFFFAF0FFFAEDFFFFF8FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F2FEE2C8FEDCC6FFDFD5 FFF1EEFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF7F0E4E1C495DEBA63E4C256F3E5B3FDFCF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8F8E9E7E3E1CAA5E3AB56 EAB972F2D5ABFCF4E9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CA72D6C870DDCF77E5D77F E7D981E3D57DD6C870D7C971DCCE76DFD179E6D880E5D680E8D984EBDC87E6D782E6D782E8D984 E5D681EBDC87E3D47FD6C772E0D17CE0D17EDECF7CE0D07DDBCF79DFD37DE7DC83E9DF88EBE18A E6DE8BE2DA89E1D88AE2DA8BE9DF8AE3D981E3D980E5DB82E9E086F5EC91E7DE83E8DF82E7DE81 F1E88BEAE182E9E083E7DD83E5DC81EEE58AF5EC8FEAE182E0D778EFE68AF0E78CF0E68EEBE18B F0E593EBE092E8DC91E3D78DE9DD93EBDF93F2E69AF2E798EADF8FEFE494E9DE8CE8DE8BEDE38E F2E491E7D885E7D887E9D989E1D281E9DA89DBCC7BE3D483ECDD8CE5D685ECDD8CE7DB88F1E58E F2E88FEFE58CFAF099F9EF9AE4DA85E9DF8AF2E795F6EB99F8ED9BE6DB89E5DA88EEE391EFE492 ECE28FEEE48FEFE590ECE28CE4DA83E0D67DE3D980E4DA81E8DE85EEE38BEADE8AE6DA86E9DC8D EDDF94EBDD95EDDF99EBDD97E8DA93EEE099F8EAA1F4E69DECDE95F2E499EBDE91E6D98BEDE091 EEE192F0E394E9DB8FECDE95EFE19AECDD98EDDE99ECE095E4D88CEBDF93EFE397E9DD91E4D98A E1D687EADF90F1E696F1E697EEE393F0E495F6E99BEDDF94F3E59AF1E398EDDF97F6E89FEDDF96 EADC96F4E69FF4E69FEFE19BE2D88EEBE297F8ECA4F2E39EE7D890EFDF92F3E795F2E894F8EE9E E8E098ECE5A6B7B176110E04BCBB7CF0EDA6B9B6658B8431F9F19EE4DB8CA79D54A19950CEC77C DED88AE9E296F5EEA7F6EFA9DFD892AFA8628079337069236C651F5A530F524B075B5410837C37 8F8A3CD5D380E0DD92FCF5C14B412B090000170C00DDD89FE2DF80DAD571EBDD8FEFDBA8C7BA83 56500AD9D484DDD887E3DBA0BBAF8D120300574B29E6E096E1DE7FF8F39EE7E195E9E39A918A3B BEBA68D7D085EAE798C9C385281E0B504824948D63AFAA6FEAEA8FB8B55E5A5208BBB55BDCD580 E2D890DBD28CEBE48FE0D97FECE29A4F42161607039C8F62EFE6A1E0D988F0E597D7C980DBCC86 F4E39DA6954F82722BCABB71DBD081DED683E7DF93F1E9AE9E96640E07001D1807BBB888F9F9BC E3E398DEDD8AEBE594B6AD655E5215827638EAE49BF9F2AAC3BC745E5711726B27E6E29ED1CB85 D7D089E2DC92DCD68AEAE497BCB873474606646021C4BF80DED89AE9E1A3908648473E00938943 F9EDA3E5DA8AD7CD7CD9CC7EE3D685DDD37BEDE487D0C96FFDF7A6D5CD8791884A251E002D2604 8C864DEBE9A4D1D47DCECE7BD8D68DC8C487CBC48EB2AA79433C101E15005D5418D8D18CF0EA9E E9E091E6D786E2D27CEAD980E4D475E6D676EFDE82F9E993F1E498DDD191312800695F42E6DCA7 D7CE95584F22635B1CFFF8B6F3EAA2E8E094E8E092EEE695F0E897F2E898FCF19FEEE78EF3EB96 F2E99AF3EAA0F6ECA5F2E99CF6EE9CF9F19EFAF2A2F9EFA7FAEFAFFBF0ADF6EDA1EFE699F2E99C FBF2A5FEF5A8FDF4A7FCF3A6FEF5AAF8EFA4ECE398E1D88DEBE294F4EC9BF5EC9DF5EC9DF8EFA0 F7EE9FEFE697EEE596ECE394F9F0A1F5EC9DF6EE9EF1E996F2EA98F9F1A0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFEECF7EDC9F2E1B3 FAF3E3FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDF9EFF1D993E5C764DDC35DE3D791F0F0D2FAFBF2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFFEAE1FFDDCAFFE7C6FFF3DDFFFDF9 FFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCF4E8EEBF DED286DBBB5FE4C880F1E3BFFBF7ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF7F7E8E1E1A4EBEBC1FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF6F7E0BEEACA85DDC66E E1D690FAF8EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF5EDD69BE0B751E8C97BF3E4BDFDF9F1 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4AD E8E8B8F8F8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF9F9EDE2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9F1EFE2B5F2E8BEFCFAE5FFFFFAFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF8EEF2E2B5F6E2C3 FDEBE6FFF7F9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7F3EFE1D0C2DABE71DBBA37E6D989F2F2D7FBFCF6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F6EAEBEADFDED0D8C38A DCA93AEFC983FFF0E0FFFBF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCE76E1D37AE7D981 E0D27ADED078EBDD85E0D27AE3D57DE5D87FE2D47CE1D27CE7D884E5D682DECF7ADCCD78E0D17C E1D27DE4D580E6D782E2D37EE4D57FDECF79DACB76E6D784DDCE7ADBCE78DED37ADDD279E2D87F D9CF78D7CF7BE6DE8CE8E08FD6CD7DE4DA84E8DE85F1E78EEAE087E4DA81EEE58AEDE48AF3E98F F0E88BE9E084ECE387F3EA8EE8DE85E4DB80EFE68BEEE588E7DE81E9E084F0E78CF1E78FE5DB85 E8DD8BEFE492F2E79BF4E8A0EDE199F1E59BF5E99DF4E89BF4E99AEDE293F0E595F7EC9AEDE290 E9DF8BF0E291E5D686EFDF92F6E698E7D789F0E093E9DA89E8D988F5E695F4E594E8D988EEE18E E7DB85F3E992E7DD86E7DD88ECE28DDDD37EF0E594F0E593E5DA88EADF90F0E595E7DC8CEFE492 F1E694EBE18EEBE18CEDE48EEFE590EBE18AEEE48CEBE188E9DF86EDE38AE9E088F5EA96F0E594 E3D88AEDE196F1E59CE6DA94F3E6A0EFE29CE5D892EEE39BF2E69DF4E89EF4E99DD7CB7EC0B566 D8CD7EF9EE9FF1E697F0E598F9EDA3EDE19AF2E5A1F7EAA5EBDF97EDE198F9EDA3EBDF94F0E498 F4E89CECE193FEF3A5EFE495EEE394E7DC8DF1E599EDE196EADE94F0E49AEDE298EEE29BF7EBA4 EFE39BEDE09AF3E6A0EDE09BF5E8A4F0E79EEEE69CF0E59EF0E19EF0E19CF8EB9EE9DD8BEFE490 FAF1A1E1D992FFF7B9918B52383513E9E6A7C3C0778E8939DED784DAD28292893EB8AF68EBE39C E4DD93EFEA9DE7E496A9A25E6E67234E47045A531978712FA59F5ABDB671C9C27EC9C27DD0C982 AFA962878333585504B5B473A6A17A0400000D0301817656F0E7A2E0DA75EFE683EBDE93F3E4B2 5F5618ABA656EDE894E0D89CD7CAAC3B2D2130240DCDC77BF1EE91DCD880DED889E9E19EB2A96C C9C474EEEA90E6E492E8E4A0473E17403623958E66C7C38AA3A45CB9BB659A964B817838C1BB62 E7E386E4DF89DED78AEDE89AFAF3AB928656150800887952F3E8B0EDE499E4DB8AEADE8EF7ECA1 EADB92B5A45E7C6B26C3B36DE9DB94E4D990DDD588F4EBA7C7BE951E1607130C00928E55D2D094 CECD8DF2F1AFE6E19F847F3B585011B4AA66F9F0AACDC67E8C853F6A631E9F9754E7DE9ED7CF8D D6CF8AEAE39DEDE79DD5CF83878236433E0797945CDAD8A0DFDBA2918D514D4913706926D1CB7D F9F39FE3DD82EAE384E1D97AD2C675DBD081EAE08CE6DC86D2CB769A934A372E003E36118B854C CFC991D6D199D1CD8FCCC981C6C37CB1AD6C7E78464941143B3202645A27B6AE6DEBE39BE7E190 E7E088DFD678E2D373E8D97BF2E28AE6D685E1D084EBD994ECDB9AE4D794463D0760582FECE7A2 ACA36B998F59332B07CEC682FEFAB1F1E99DEEE899F1E99CF0E79AF4EB9CF6EB9CECE18FEFE88F F4EC96EFE698FAF0A9FFF5AEF3E99FF8EFA0F0E897F4EB9CFEF4AAFFF6B3FEF6B1FAF2A8EFE69C F3EA9FF9F0A5FCF4A9FDF4A9FCF5AAF7EEA3EEE599F7EEA1FAF1A4F2E99BF5EC9DF7EE9EF7EE9F F8EFA0EEE695FBF3A2F6EE9DEFE796F6EE9DF9F1A0E8E08FF2E794F0E692EDE18FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF0F0F0E2E2E2DFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE7E7E7F1F1F1FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAEFEDC9 E3E1A5F4F3DDFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9FEFCE1F2DF9BE4BF55DCC159E3DA97F4EFD3FFFDFC FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FDEBD4FBE1BBFEF6D4FFFDEA FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FDFEF9F1E5BFE3C67BDCB95DE3C67CF2E4C1FDFBF6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFBF8F7E5E3E1A5ECEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF9F1ECD49CDBBE60 D3C965DDE09AFAFAEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF6EEDAAADDBE64DDCA78E6E1AA FAF9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F6F6F6E8E8E8DEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE2E2E2EDEDED F6F6F6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1 E4E4ACE7E8B8F8F8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF9F9EDE2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF4FDE6C8FDEAC4FFF7D6FFFEEEFFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F8EBE4E2A8 ECE9C1FBF9F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F6E1DFDDDDCB8EDFBF49DDCC65E6E2A6F7F6E4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCEEEEEDE1E1D4DDD8B2 DCCA7AE1BF4EF1DDA0FFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECF7AE4D57F E7D983E0D17CDACB76EEDF89E7D983E2D47ED9CB75DECF79EBDB87EFE08DE7D885E3D481E0D17E D7C873D6C772E4D581E8DA83E0D27ADED078E3D57DDCCD77E4D582E3D37EE1D57DE0D57CDFD47A D9CF76D6CC73D8D17AE2DA87E3DA8AD7CF7FE5DB86E6DC84E8DE86E4DA83E6DC85F5EB94F4EA92 F2E890F1E78EF2E88FEFE58CECE288EDE28AEBE288FBF297F8EF92E4DB7EDED579EAE087F3E992 F0E591F4E999FAEF9FF4E89EEFE39BEDE199F1E59CF6EA9EF4E89CF8ED9EF3E898F1E696F2E795 E9DE8CEEE490F3E396ECDC8FF1E194EFDF92E4D487F5E597E6D788E7D888F2E392F3E493EBDC8B EFE38FE2D682F2E892E6DC87DFD580ECE18EEEE391EFE492EADF8EDCD180E0D585EEE393EEE393 ECE190F1E695F1E694E4DA87E9DE8BF8EE98F4EA95F4EA95EFE58DE9DF88ECE28AEBE18CEBE08F E0D586E6DA8DF5E99FEDE19AE6D993F3E6A0F2E59FEBDF98F2E69CF4E89FF9EDA3EEE297E6D98E E4D98AEADF90F2E798FDF2A3F0E498F3E79DEFE29CF6E9A5F5E8A4EBDE98EDE09AF5E9A0F2E69D F9EDA5F7EBA1F4E89CF5E99DEFE396EEE296E4D98CECE095E9DD93EFE39AF5E9A1F2E69EF1E49E F8EBA5F2E59FEFE29EF3E6A2EFE29EF6E9A6FBF3ABEEE89CEAE19AF9ECA8FDF0A9F1E399F8EB9B FBF09EFDF4A4EFE7A0F8EFB25F58205F5B27FFFFC195914B8D8638D5CC7C8D8437CCC27BEAE09D E5DD99F4EFA7A4A1513F3A0D484006AAA15DC7BE7ADAD18CDED590E2DA94E4DC95E1D991D7CF88 E5DD95EAE39BDED788C1BF719C9A6635321B130F02221A09DED5A1EEE595EBE181EFE58CE7DD97 A79E665A550FEBEA94FBF8A5F6F4C96E5F50020000A79F60FDFB9EEEEA87E3DC8EEEE59EAEA564 A59C63EEE9A1EBE991FFFFA66C65301C1303D0C8A2D1CC9FA5A362D6D88377792E554F15E4D999 B3AB62DAD67DD1CE6EDAD77EF6F0AFABA272110400827548E1D79EE4DA9AF5ECA2C6BF6EEBE79D F1E59AB5A75C94863FBAAB66EBDD98E7DB98EDE5A2F6F0ADDDD79D31280B000000706C42FFFDC3 BBBA7AB2B171BCB87E4C46106E682FEBE4A5D9D389958F44736E269C9652D6D18DD6D090D4CF8E DAD494FFFCBADFDA95A6A2596460157A762CD4CF91F4EFB9A5A1685C571A5D591AA29D5EE9E69A EBE894D9D57BD8D475ECE883E4E07BEDE58BDBD282C0B76E665C213D3300675F21ACA664D2CC81 D8D48DDBD59AD1CA98AEA678A19A68635A252A2108332C008A8341CEC67CDFD98AEEE895D9D17E D8D17DE0D683E8DD80EADD79E1D478DECF7EDFD08CE7D79CF8E7B3CEC088352904675F2BF3ECA3 D9D68AB8B0773C32056B6236FCFAB3EAE395F2EB9CF5EEA0F7EFA4F6ECA4F6ECA3F7ED9FEFE494 F3EB95FBF4A0F6EDA2F8EEA7FFF5B0FCF2AAFBF2A5F3EB9AF7EE9FFEF5A9FBF1AAF7EDA8FEF4AC FEF5ADFCF2AAF3E9A1F7EDA5FDF3A9FFFDB2F7EDA2E0D78BFAF1A4FEF9ACF7EDA0FBF2A4FBF2A5 F9F0A3FBF2A3F8EFA0F9F1A1FBF3A3F9F1A0FAF2A1FFF7A5FBF3A1FAF09BF3E895F2E795FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEAEAEAB6B6B6727272 666666676767676767676767676767676767676767676767676767676767666666666666666666 666666676767676767676767676767676767676767676767676767676767666666666666666666 676767676767676767676767676767676767676767676767676767666666666666666666666666 666666676767676767676767676767676767676767676767676767676767666666666666676767 676767676767676767676767676767676767676767676767676767666666666666666666666666 6767676767676767676767676767676767676767676666666666668C8C8CBCBCBCE8E8E8FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC EDEDC9E0E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF9FBF3D0F2DE9AE4C764E2C363F2D8A2 FFEFDFFFFBF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF5F3EBC8EDE1AEFBF8E1 FFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAF5E8F1E3BEE4C880DFBD67E5CA84F0E1B8FCF9F1FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFEF0FAF7D7EDE1A7F3EBC6FDFCF6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8EEEACC83 DAB749D7CA6BE2E6ADFBFAF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF6EEDCAFDDBC65DBBF66 E3D38FF9F6E8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F8F8F8D5D5D5929292636363676767676767676767676767676767676767676767676767676767 676767666666666666666666666666676767676767676767676767676767676767676767666666 666666666666666666666666676767676767676767676767676767676767676767676767676767 666666666666676767676767676767676767676767676767676767676767676767676767666666 666666666666666666676767676767676767676767676767676767676767676767676767666666 666666666666676767676767676767676767676767676767676767676767676767676767727272 A5A5A5D2D2D2F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAF1E4E4ADE8E8B8F8F8EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EDE3E2A8E9E9BDFAFAF0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7FFF4DAFFEECAFFECC8FFF4E2FFFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8EA E1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E2E5D6B3EDCD81E2C458E4D37CF5F0D1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBF6F7ECEBE6BD E1D07EE2C562F0D184F9E9C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECF7A DFD07BE1D27DDCCD78D6C772DCCD78E3D47FE8D984E0D17CE0D17CE7D884E6D786E6D784E9DA88 E6D784DECF7ADFD07BEADB86F3E58DF1E38AE8DA82E1D37AD8CA73E3D47FE5D680E3D77EE0D57C DACE74E6DC83E7DD84E5DF86E8E08DE8E08DE4DC8BE1D782E3D982E2D881E2D883E9DF8AF6EC96 EFE590F1E792F5EB96F7ED99F4EA96F0E690F7ED93EFE68BF1E88DEBE284E8DF82ECE387E6DC82 F0E691EBE08FF0E596F7EB9FF2E69BEFE399ECE095EADE92F1E697F1E696F5EA9AF2E798F1E694 F1E694EADF8DF1E793F7E89AF3E398F1E195ECDC8FE3D386E8D88AE9D98BE9D98AF1E291F2E392 ECDD8CEBDF8BE9DD89EDE38DEAE08BF2E893F4E996E5DA88E9DE8CE8DD8DE0D585E5DA8AF1E697 F5EA9BE9DE8EEADF8FF2E797E5DA89E5DA88F5EA98F2E894F4EA95F0E591EDE38CEFE591F2E896 E7DD8DD1C678D6CA80EFE39BF5E9A1E7DA94F1E59DF4E89FF0E499F5E99DF9EDA1FBF0A5EDE196 F0E498F3E899EADF90E9DE8FF4EA9BECE193EEE298E9DD96F3E6A2F2E6A2F4E7A1F8EBA5F6E9A3 EEE29AF6EAA2F1E59DE3D78DEADE94F1E599EDE195E0D489EFE398F2E69CF6EBA2F6EAA2F4E8A0 F5E8A2F1E49EEDE09AF3E6A2F7EBA7F3E6A2F3E7A5E7DF96EDE79BEEE69DE8DB97EADD96EFE198 F5E899FAEE9CF6EA9DF5EBA8F0E5AA342A0B7A733BFFFEC2A09955898037938A3FC5BB73F5EAA7 DAD190F6EEAD6E69293331018B863ADED48FFEF3AEE3DA93DFD68FD8CE86D4CB82D5CC83D7CD85 D8D084DDD589E0D78BDBD481F0E8A1C1BD9517140E0908005A5831EBE49AE5DB81EDDF88E8DC91 EDE6A34E4D14ACAA5CEAE995FCF8B1C6BC990B0000675940F5EEA6F5F192EEE98EE0D891CEC482 9D9453E5DCA1D9D48FDFDC8FAFAC5F0C05009E956EBBB585E2E0A7C8C8819698468586439F9B56 9B9148E5DC9BC8C274CAC96DE5E58CACA66D1006004B402DF2E9AADAD287D7CD86DBD38BDAD289 EEE59AA095498E8035B3A55BE5D790F4E8A3EBE0A2E0D79DEFEAB15A56270400004C4625FFFCCE F3F0B9C4C187545119514C19BDB682EEE7B0A9A465524B06756F28D7D38CF3EEAACEC988EBE6A6 F4EFAFE3DD9FA09B5B514C0A706C26E0DC95F7F3ABC6C08069642A474105A4A060F9F6B1DFDB92 D2CF82DBD887E7E591EDE991E0DF85D2CF77BBB667615A182C240160551DBEB67CD9D194D1CA85 DCD58ED5CE87978F5349410B271C001E110340330A91874EDBD28CE3DC8BD2CB70D5CF70D0CA6B D8CF75EBE08CDDD081DDD27CD5CA71CFC372E1D58DF3E4A9E6D9A6BEB07F1509005F5529DFD895 E1DC91CAC77A8D834B100500766E34FAF3A9E4DF8DEDE695F2EAA0F6EDA6F4EAA5F4EAA3F6EBA1 F2E797F2EB97F8F0A1F7EDA5F8EDADFAEFB0F5EBA6F9F0A6F7EE9FF5EC9DF5ECA0F5EBA4F6ECA5 FCF2ABFDF3ADFAF0A9F0E69EF4EAA2F9EFA6FDF4A9F2E99EE5DC90F7EEA1FEF7AAF6EDA0FAF1A4 F9F0A5F5EC9FF8EFA3FAF1A3F6ED9EF6ED9EF4EB9BF6EE9DFBF3A2F9F19EF9EF9AF3E995F3E896 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E2E2E2999999 393939272727282828282828282828282828282828282828282828292929282828252525212121 212121232323272727292929282828282828282828282828282828282828292929262626232323 232323282828292929282828282828282828282828282828292929282828262626222222212121 222222262626282828292929282828282828282828282828282828292929282828232323232323 272727292929282828282828282828282828282828282828292929272727232323212121212121 2525252828282929292828282828282828282828282828282828282828285B5B5B9D9D9DDDDDDD FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCEDEDC9E1E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEFBE0F0D68EE7B756 F0C377FADAADFEF1E3FFFBF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EAEBC0E1E1A4 F8F8E9FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFCF8F0E1B8E2C374DDB858E2C574F4EFD5FBFBF4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFFFAE3FDF3C9F7E6B2FAEFCFFEFCF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF7E6 EAC771DCB23EDCCB7AE7E9C5FBFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF7EEE0BDDDBF74 DBB659E4C473F9F3E2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF6F6F6C4C4C4676767232323282828282828282828282828282828282828282828292929 282828272727222222212121212121252525282828292929282828282828282828282828292929 262626222222202020222222262626292929282828282828282828282828282828282828292929 282828242424222222272727282828292929282828282828282828282828292929282828272727 232323212121212121252525282828292929282828282828282828282828282828292929282828 252525222222252525292929292929282828282828282828282828282828282828282828292929 3939397C7C7CBCBCBCF0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBF3E9EAB8ECEABCFAF4E2FFFCFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF9E8E8E2ACEEE9C1FBFAF1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEBFCF2CFF9E2BAFBECD6 FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE F8F8EAE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1ECDFD4F9DEBBE8C45DE3C75F F0E7B8FBFDF8FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F4F9FAE3 F1E8A3E4C952E7C355FCE1BBFFF3E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5D681DFD07BDFD07BDFD07BDBCC77DDCE79DACB76E0D17CE2D37EE2D37EE4D581DCCD7CE2D382 E8D988E1D27FE1D27CE6D782E1D27DE1D37BE4D67DE1D37ADBCD74DED079E9DA85E4D57EE4D87F E4D97FDBD076E6DD82E6DC83E1DB82E4DC88E7DF8CE9E190E8DD8AEAE08BE7DC88E4D987E6DC89 EAE08CEDE290F4E998F7EC9BF4E998F1E696F2E794F2E88EEFE68BEEE58AE2D97CE6DD80F6ED91 EEE48BF0E691E5DA8AE8DD8FF0E499F1E599F3E799EBE092E2D787E8DD8DEDE292EDE292E8DD8E ECE18FF3E896ECE18FEEE392F5E69AF1E197EFDF94F4E499F2E295E7D78AEEDE8FEDDE8FF1E291 F4E594F0E18FECDF8BEDE18DF1E792EBE18CEADF8DEFE492EDE290F2E797F4E999F4E999F4E99B F3E899F1E697EFE396E9DE90F5EA9BF0E596EADF8FEEE393E8DD8CEDE291EDE290F0E692F6EB99 F1E897F1E89AF0E79AEFE69BEEE49CE8DE96E6DC94EEE59BEFE799E9E090E8E18EECE493EFE699 E9E194ECE395EAE192E5DD8CEDE594E9E091EFE698F2E99DE9DF98F6ECA6F8EEA9EFE29EF4E7A1 F4E7A1E5D792EDE099EDE199D3C77EEADE94F4E89EF2E69CE8DC92F4EA9FEFE69BEDE499ECE299 F3E9A1F9EFA7F4EBA3F0E69FECE29EE6DC97E3D994E8DE98E9E197F6EFA3F7EFA6F0E49FF4E7A1 F9EAA1F1E496F8EC9DF2E69AFBF1AFF5E9B2453B0E6F6731FFFCC1A29A587169219E944CFBF1AB F4ECAEDAD192554C28312C05C6C47CF4EFA6E6DC94EADE97E3D78FECE098DED289DBD085D3C97B D8CD7FE6DC8DE4DA8AE0D585E7DC89E5DC99A39B7F0D0A030F1001999C52EAE784DFD573F0DF94 EADEA3BAB5784C500BDEE08CE9E79CE8E2AB32290C231706CDC38EF4EFA5F0E99BF9F1A7DFD591 928742D8D089E7E09FE3DF9ACAC4882A230D656027FFFAC2BAB7849FA054E1E3956F7030838345 D7D389B2A956BEB572E1DA97DDDA92CCCB861E1A0349431FDAD39ADBD589E6E08DEBE296E6DD99 DDD4938F8641A79E53B8AD60EEE395EEE39AE8DF9ADDD59AE9E3B0817C54080500333212D3D1A3 C6C3997B764E443D13665F39ACA771A29B625D571B8C8647CBC689E3DE9EEBE6A3E9E3A2E2DD9C BFB97B847E417D773A837D40D6D093F0EBABACA7667873314C46038A8440DDD690FAF5ADD1CD85 DCD891E7E59DE2DF99CFCC86A5A15F7675316562235E572B9A9260D1CB8CD7D18BC7C0789F9755 61572C4D421F3C30023B3208655E2D9C9348D6CA93DBCF96DED492DFD589DBD27DDBD275E1D879 D9CF71E8DC81E5D882DACA7AE8DC92DDD390DDD393EBE1A3BDB5775C52232C2503948D4FEAE4A4 D0CB89D0CB85A8A1643329002C2006797038F4EEA2ECE794ECE695F5EDA3FAF0ACF9EEAFF9EFAB FEF3A9FEF3A4F6EE9EF6EDA1F9EFAAFFF4B7F9EEB2EDE3A3FCF2ABFEF5A8F8EFA0F1E89CF6ECA3 FDF4ADFBF2ACF7EDA8F9EFA9F9EFA8FBF1A9FBF2A9F5ECA1F6EDA2FAF1A5F7EEA1F9F0A3F9F0A6 FBF1A8F8EEA6F6ECA3FAF1A6F9F0A4F7EEA2F4EB9DEFE698F6ED9DFAF2A1EFE896F8EC99F9ED9B F7EA9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8 DDDDDDB9B9B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B2B2B2A4A4A4 9696969393939F9F9FAEAEAEB4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B5B5ABABAB 9D9D9D9F9F9FB1B1B1B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B3B3B3ABABAB999999 959595989898ABABABB3B3B3B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B1B1B1A0A0A0 9E9E9EACACACB5B5B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4AEAEAE9F9F9F939393 969696A4A4A4B2B2B2B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BEBEBED0D0D0 EDEDEDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCEDEDC9E1E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFDF6FDE9DD F5CDA5EABA63E8B955FBDAB0FFEFE0FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EBEBC1 E1E1A5F8F8E9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF5F3E3BCE4BF60DBB542E2DB99F0F1D3FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFEDD7FFE6C0FDF5CCFEFBE4FFFFFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 FCF7D5EAC766DCB248DCCB99E7E9E4FBFBFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCEEECE7 DDD0AEDBB861E4BA54F9F1DDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEEDEDEDCBCBCBB1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 B4B4B4B3B3B3ADADAD9B9B9B959595979797A7A7A7B2B2B2B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3 B4B4B4A9A9A99A9A9A9393939A9A9AA9A9A9B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 B4B4B4B0B0B0A2A2A29A9A9AAEAEAEB3B3B3B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B3B3B3 AFAFAF9D9D9D959595969696A4A4A4B2B2B2B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4 B2B2B2A7A7A79B9B9BA7A7A7B4B4B4B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 B4B4B4B7B7B7C6C6C6DEDEDEF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEF9FAFBDCFBF1CAFEE7C7FFEFDFFFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFEEFEF9DAFAE2B9FBE9CEFEFAF4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFDF4F2D4E8E3AC F0EDCBFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF8F8EBE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBE9E7F9F0E0E9CE80 DDC260E0D78DECEECAFCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F3E4E4DE E1E2BDDFD782DEC44AE7CC68FBF3DEFFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFECDD88E5D681E3D47FE3D47FDCCD78E6D782DDCE79DECF7AE1D27DE2D37EE5D683E4D485 E1D281E9DA89E4D582E5D683ECDD88E3D57EDFD179E0D279DDCF76E1D479E3D57CE1D27ED4C66E DED379ECE187EADF83E2D87DDCD479DBD47CE2DA87E4DD8AE1DA89E5DA88E9DE8DE8DD8DEBE090 F5EA9AF7EC9CF4E999F5EA9BF7EC9DF7EC9DF4E99AF0E595EAE087ECE388F4EB90EBE284E3DA7F E9E085F0E68EF0E691E2D788E6DA8DEFE399E9DD92E8DD8BE4D989DDD280E9DE8CF1E694EDE290 E2D785E2D785EEE391EADF8DE7DC8BEBDB8FEDDC95ECDB93F0E095F8E89CF1E194E3D385E4D485 E7D887ECDD8CEDDD8BE7DB87DED27EF4EA95FAF09BF0E593EADF8CE7DC8AEADF8FE8DD8DEFE495 F7EC9DF4E99AF0E496F2E69BF1E59BF4E89BF4E89CF0E497EBE191E4D989EBE090ECE191EFE493 F6EB9AF2E89AF2E99EF2E99EEEE49BEEE49CF8EEA6F2E99FF3EA9FF3EA9CEAE290E7DF8AEDE592 EBE293EFE699EAE193E6DD8EECE493F3EB99F5EC9CF5EC9EF0E79AE5DB94F2E8A0EFE59EEEE19D E3D692F3E6A2E9DC97ECDF99F5E8A2EFE39BF7EBA3F1E59CF4E89DEBDF95F1E69BEBE297E4DB90 E6DD92F6EDA2FAF0A8F4EAA3F5EBA4F1E7A0E9DF9AEAE09BF3EAA4E6E093EDE799EBE399ECE29B F7EAA4F0E298F7EA9CFEF1A2EFE399F2E7A8ECDFAC63582A605722FFFEC4AAA261655C15BCB26C F1E6A3E7DD9F453A1B332B05C7C283D8D892ECE7A0E5D990ECDE96EDDF96F7E99FDDCF84D6C97B CEC172D0C474E3D785E1D581ECE08EEEE28FE9DEA1958B78100D021F2307D2DA7BE7E672D8CE67 E9D696F0E3B56E6E3598A151F6F9A3E3E09F948C641D15006D6933F4EFA0DAD38DF1E6AEF4EAB3 B0A663A79B52F8F0A1DBD789F3EDB3786E4D2C2311DED8A7C0BD7ADBDC8CD4D78A80813E939457 DBDB9FC3BE73DDD67CD1CB7AC4BD80FAF2C8514C2F272401C2C27EF8F6AAEBE698E8E190E3DA87 EAE19E8B82479A9150B5AD64B3AB5DE4DA8BEAE196DFD993D8D399A7A3741E19071A1700919256 76764065613C625A44928870524A244E471089843FB1AD65E1DE9DF5EFBAE9E4ADCDC98595914E 767331908C4DB8B477D5D096E4DFA5ABA66B524D114D490A9F9B5BD5CF86A69F4EBCB666E7E192 F1ECA2E3DF9AB8B474847F4555511E69653698956BB2AF86A5A071918C5C746E3D3630071F1901 2B240052490F7D7437A09755CBC179EAE296EBDF92E6DB8BE4D98BDACF82E1D489F1E49BF5E69C E5D588E5D686EAD984E2D377EEDF81FDF2AEEFE3B9ADA27249411A201C007A7534E1DD99EBE9A0 D0CD87D2CD8CC7C1824A4107897D54574B2B696136F5EFA3E8E390F9F3A1F3EBA2F9EFAFF8ECB0 F6EBAAFBF0A8FCF0A4FDF4A7FAF0A8FCF1B1FDF1B8F9ECB5F4E9ACFEF4AFFEF5A9FCF3A4F7EEA0 F2E99EF3E9A2F9EFACF7EDA8FDF4AFFEF5AEFDF3ACFDF3ABFAF0A8FBF2A7FCF3A7FCF3A6FCF3A6 FEF4ACFDF3ACF8EEA7FAF0A9FFF5ACF6ECA3F5ECA1F8EFA2F8EFA1FAF1A2FCF4A4F4EC9BF0E492 EFE392F0E293FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF6F6F6EAEAEAE8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7 DEDEDED3D3D3D2D2D2DADADAE5E5E5E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9 E3E3E3DADADADBDBDBE6E6E6E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E2E2E2 D6D6D6D3D3D3D6D6D6E2E2E2E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6 DBDBDBDADADAE3E3E3E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E4E4E4DADADA D2D2D2D4D4D4DEDEDEE7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9 EBEBEBF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFCEDEDC9E0E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FFF6F8FBE4D3F2CB8DEBBC5DEFC371F7D8AEFEEFECFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4 EBEBC1E1E1A5F8F8E9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF4ECCEEEE1AEF9F5DA FFFEF3FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF4E2F0DA98E5C661DEC563E5D998 F1F1D4FBFBF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF4F6EACAF3E2B3FCF8DEFFFEF2FFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFAE8F8ECBDE8C567DCB85CDCCEA9E7E8ECFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD EEEFF3DDD4BFDBB862E4B343FAE3C1FFF6EDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF0F0F0E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E8E8E8E8E8E8E4E4E4D8D8D8D3D3D3D5D5D5E0E0E0E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E9E9E9E1E1E1D6D6D6D1D1D1D7D7D7E1E1E1E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E9E9E9E6E6E6DCDCDCD7D7D7E4E4E4E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E5E5E5D9D9D9D3D3D3D4D4D4DEDEDEE7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E7E7E7E0E0E0D8D8D8DFDFDFE8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E8E8E8E8E8E8E9E9E9F1F1F1FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFCFFFFF2F9F3D4F3E3B7F6EBCFFEFDFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF7F6DAF2EFC0FBEBCFFFF2E4FFFCF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2D6 E3E2A8EDEDC7FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFCFFF6ECFBEED7EEEBB9F3F3D2FDFDF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBECFAF7EF F3DCABE7C475E0BF6CE8D49CFCF9F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6EFEFEFEFEFEFEEEEEF EAE9E0E1D797DFCA66E7C866F2D999FDF9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFECDD88E6D783E5D682E3D47FD9CA75E0D17CE0D27CE8D984E7D983E2D47EE5D682 E2D283D8C978E3D480E4D580E4D580E9DB84E6D880EBDD86EADC86DECF79DECF79E9DB83E5D87F D1C36AD7CB71E4D87EDFD37AE7DB83E4DA82E5DB86ECE18FEBE090E2D687F0E493F2E695ECE090 ECE090F5EA9AFAEF9FEADF8EE7DC8CEAE08FF2E898F1E697ECE191EEE58CEAE287F2EA8FF1E88E E3D981E1D77FF2E893F5EB99EDE292F0E598F7EC9FF6EB99F7ED98F4EA94E9DF8BECE18FECE190 EBE091E1D686DED383E9DE8FE8DD8BE2D886E1D488E9DB90E6D88CE5D58AEDDF95EFE197E0D084 E1D386E2D587EADB8DEDE08EE8DC8BF3E896EDE291ECE18FF2E795F5EA99EEE393F4E999EADF90 ECE192F1E697EEE394EADF90EDE194F2E69CF0E497EEE395EEE394EDE293E9DE8FEBE091EADF91 ECE193F0E49AEDE296EFE598EEE499E8DE93E6DB93E9DE96EBE197EDE499EDE496E8DF91E7DE8E F0E797F0E79BF6EDA3EDE499E9E091F2E999F1E999E7DF8EE4DB8BE2D88BE2DA8EF3EAA0F2E8A0 F4EAA3E2D691F6E9A3F4E8A1F1E49EF4E9A1EBDF97E8DC94DED28CEEE29DF1E49FF3E89FF0E69B E6DD92EAE096F9EFA4F6ECA4F0E69DF8EDA5FEF3ACF3E9A2E7DD95E4D992DBD289ECE69BEFE59D E7DC95F0E49CF3E69DEFE295F8EB9EEEE198F5E7A5F5E9AD988C572E2707D4CE96BCB679675F26 A29C5AFDF5B4958B58201800B7B36DDBD595DDD991EDE49CECDC99E1D38BCFC274D8CE7ACBC16F C0B96AB6AE65BEB570D1C77ECDC376DFD585EFE895ECE3A66B5F51020000313309DEE182DBD96F E2D97BE3D490E4D8A848450DBFC777DEE48DE4E4AA443C20150D04C1BC6DF1ED90DED38FE9DBA7 EBDEA8867D32E9E495ECE596E9E69ABBB388190E008B8264FCF6C4B1AF628B8C2BDCDB97656229 AFAA6BD4CF8DE2DD8FCAC36DDED78BDDD59F797053120800A49E65F7F5A4E3E289F4EF9FE2DA8F E7DE918E864991884FD9D18E918A3AEBE493E9E092E4DC97DED69ED3CFA13734140E0D0038370D 6C6D2D79773F847E576D654B483F2668603EA8A46FBFBC7BE1DE9AD9D799B8B37F86844F79773E 949259B3B17ACDCB9498935D4F4A15514D177A7542B0AB75E7E1ABEEE9B2E5E1A3C3BC7AB6AF6D AAA565726D2F49450B3A35005D592C8581578581605F5A3E2F2D0933310947471368673083814B B0AD73C6C285DAD590F7F2A7EBE495C0B96CC5BB72D7CF81DBD57BDCD47FD6CD80E0D48FE2D393 DECE91E2D493E7D994E7DB91E5DA8AD5CD7BA1995D50492137310A7E793ECAC786E8E69FDBD88F D1CF84BDB972B9B475413800837A4FE5DAAD443D15595428F7F4ABE9E494ECE696F7EFA6FBF2AF F7EDAEF4E9ABFAEEACFBF1ABFEF4AEFBF1AEF9EEB0F5EAAFF5EAAEFBF0B0FBF1ACF9F0A6FCF3A6 F8EFA3E9E096E5DB96F4EAA8FAEFADFFF6B1FCF2ADF8EFA7FAF0A7FFF8ADFBF2A7EFE79BFCF3A6 FDF4A8FCF3ABFBF1ACF6EDA6FAF1AAFEF4ADF2E8A1F1E79FFBF2A7FDF4A9FAF1A5FCF3A5F9F0A2 FBF0A2F6EA9DF7EC9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFBFBFBF9F9F9F9F9F9FAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFCFCFCFAFAFAFAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FCFCFCFAFAFAF9F9F9FAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FCFCFCFAFAFAFAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFC FAFAFAF9F9F9F9F9F9FBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FCFCFCFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCEFEDCBE3E1A5F4F3DBFEFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF7F1FCE4C6F4CC8BE3B445ECC27BFBDBCAFEF3EFFFFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBF4EBEBC1E1E1A5F8F8E9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDEEDAFCE3BC FEF4D0FFFCE6FFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7FCF8D9F3E19DE2BA4A DEC562E2DC9CF6F2DBFEFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1EBE9BFE5E2A9F9F9EAFFFFFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAF1D8F1DCA2E4C46CDBC075DCD2B5E7E8ECFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDEEEFF4DDD5C2DBB965E3B13CF6D59EFDECD6FFFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFAFAFAF9F9F9FAFAFAFBFBFBFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFDFDFDFBFBFBFAFAFAF9F9F9FAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFDFDFDFCFCFCFBFBFBFAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFCFCFCFAFAFAF9F9F9F9F9F9FBFBFBFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFDFDFDFBFBFBFAFAFAFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F3DBE8E3AFEEE9C2FDFAF4FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF4EDEDC6E4E3A8F8F5E3FFFDF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3DAE5E5AFECECC7FBFBF2FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFCF8FDECD7FCE3BEFCF6D1FDFDE7FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBECEC FCF9F5FFEBD5F3CB93E4AE57E6BC72F9F3E1FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9ECECECE1E1E1E1E1E1 ECECEAF4F1E0E5D177E4C355F3D28EFEE9D0FFFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE1D280E4D582ECDD8AE7D884D8C974E9DA85DED078E0D27AE1D37BE5D77E EEDF89E5D686DECF7CE5D681E2D47CDED077E2D47BE1D37AE5D681ECDD8DE8D88BDCCC80DCCD79 DBCE70DACD71DED077E5D77FE8D984E9D987E3D584E1D283E3D487E7D88BE6D78AEFE092EDDF8E EFE08FE8DC8AE8DC8AF4E896ECE190F0E795F7EF9CF2EA98F0E896F9F29DEEE78DF5EE94F2EB92 F0E993E5DD8AD6CE7DE5DD8DF3EA9BF2EA99F2EA98F1E996EEE68DEFE68BEFE58CEFE58FE7DC8A E7DC8DEADF91E9DE91E9DE90ECE192ECE191E9DE8EE0D686E4D98AE4D98AE7DB8FF0E49AF0E49B E4D78FE6DA91E5D98DE3D788E3D888E4D989ECE192EBE091ECE192EBE090F7EC9DEDE293F0E596 F5EA9BF1E697E8DD8EE9DE8FEFE495EDE293EEE395F2E797EBE090E5DA89E9DE8DF2E798EADE93 ECE097EEE19AE8DB96E9DD93EADF90EEE395EEE296EDE196EDE197EDE199EDE19AEDE19AEBDE98 E9DC96EEE19CEDE2A0EFE5A1ECE29CEBE198ECE396E8DF90E8E08FF2EA99F2E999E8DF90E7DE91 EFE69BF3E9A1F5EBA3ECE29AEEE59CF3EAA0EFE69CEAE098EDE39CEAE09CEBE0A1F6EBADF2E6A3 F4E89EEADE94F2E69CF7EAA0EFE399EFE298F1E59BFDF1A7F8ECA3E7DB92F0E39AE9DD95F0E49E F3E7A0F1E59DF7EBA3FAEEA5F4E89EF6EAA0EDE196F2E69BF0E399D6CC87464011635F2FE5E1AB 78744D9B9A5FD2D18F302B067E7A37EAE697D7CE8ADAD184EFE299D0BD82BDAF68D5CC76E5E383 E5E388C6C578B8B779BAB680CDC68FD3CD8DE3DD91E7E593F3F0B551453B0500005E5C15EEEB97 DFDA8EDDD98AE3DE8CAAA26460581DE3E198DFE794B3B680130D08504723EFE7A1E9E187F0E098 F7E7A8B1A360B8AF5BDFD886D9D58CDDDA9B3C341E3B311CDDD5A2FAF4B9E3DE90D4CF7652470D B6AA75FAF1AEB3A95BD0C97AD5CD88C5BC84857A4F100500968C5BFCF5B4E0DC8ADEDB81EBE692 F4EEA49D9455ABA46DE1DB9EA9A558D7D178CEC872E6DE93E2D6A2D4C8A5645C3C0000003D4020 A3A96F8483478D8951787240A9A2779F99719F9A73A19C736E6B3D73713D716F39727137767541 96946B86845B615F357371448B875A949162AEA97ABBB786A6A071938B5E78714768623C4A4624 2C280C2E2A04201D0034300B34300736330E1815021B16002C270C55512C8C8E4F999E54B9BC74 C5C781C0C179BCBD74C9C980B5B268A5A156BAB56ACAC37AD2CD81E1DF8FDEDB90D7D18FF0E6AB F2E4ACDFD297C3B879A49A5C7D773E4541263E3B0858572A81814ADFDE9DF7F7B5F0F0ACDEDB95 DFDB94D8D38E655E2B3B3200B3A96CF5ECB0CFC9923C38067F7C4BF1EEABEDEAA1F0ECA1F5EFA4 F6EFA6F6EDAAF6EBADF8ECB1FBF0B5FAF0B4F7EDAFFAF1B1FBF2B0F9F0ACFBF4ADF5EDA4F9F1A8 FBF3AAF0E8A0EDE49EF3EAA7F2E9A9FBF2B1FDF5B1FAF2ABF6EEA5F6EFA3FCF5A8FBF3A8F3EBA0 F7EFA4FAF2A9F1E8A1F2E9A4F8EFAAF8EFAAF5ECA6F2EAA2FAF2AAF7EFA6F5EDA4F8F0A7FBF3A9 FBF3A9F8EEA7FBF1ABFDF4AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8EDD4F3E0B2FBF4D4FFFFEFFFFFFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFFF6ECF6E5C1DFC96FE1BD5DEBBF6FF9E9C0FFFFF0FFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFDF6EAEBC0E0E1A3F7F8E9FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF8E5 FFF0CCFFEAC5FFF1D9FFFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FCF5D7 F2DD96E5C865DFBE56F5DAAAFFF0E2FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E9EABDE1E2A6F9F9EDFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4E7C6E6CB83DDC770DACF8EDCD8C0E7E7EAFBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDEFF0F3DED8C7DABF76DBB547DECF78EDE8BCFDFCF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF3E2F4E1B7F7DFB6FFEBD7FFF7EFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFDFDE7EBEBB9DFDFA0F6F7E6FEFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAF0F2F3D9EBECC4ECEDC9F7F8E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFCF8F2EAC7ECE0ABFBF8E2FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1 EBEBEBFCFBFAFFFAF6F6DEB8E4B964DEBB56E9E7A5F5F7DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5EBEBEBEDEDEDF0F0F1 F0F0F1EEEFDEE9E8BADEC663E3C463F6E1B6FFF9F5FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDFD07EEADB88EFE08DE4D581E0D17CE8D984E3D57ED3C56DCEC068 DBCD74E6D880E0D17FDBCC79E6D782E4D57EDED077E3D57CE7D980E7D883EADA8BF2E295E3D388 D8C975D7CA6ED4C66DD8CA72E3D57DEBDC87E3D482E1D281E2D284E7D78AEBDB8EEBDB8FE8D988 EADB88EEDF8CEADE8AE6DA86EDE18DEFE590F1E893F5ED98F1E994EEE691F4EC97EFE88EF3EC94 F2EB93F0E894EAE291DED587E6DD8FF6ED9EEAE391F0E896EBE390E1D881EFE58CEFE58DEEE48E E7DC8AEBE091EFE495F0E596EFE495ECE191E8DD8BE7DC8AEEE393EADF8FE5DA8BEADE91EFE399 E7DB93E0D48CE9DD94F0E499EFE495EADF8FE7DC8CEADF90E6DB8CE8DD8EE8DD8EF7EC9DF3E899 F3E899F2E798ECE192E6DB8CE8DD8EEDE293EFE495F2E798F6EB9CF2E797ECE18FEBE08FEDE293 EADE92F0E49BF4E7A1F1E4A0EDE197E6DB8CEEE394F2E69AE6DA8EF3E79BF0E49AECE096E9DD94 EADE96EDE19AEEE19BF0E6A1F5EBA6F4EAA2F2E99EF2E99CEDE495E8E08FEEE696EEE596EBE295 EFE69AF7EEA3F0E6A0F3E9A2F1E79FE9DF97EDE499F8EFA4F2E89FF1E7A0EAE09CE8DD9DEFE4A4 EBDF9BF3E79DEBDF95F2E69CF5E99FEDE197EBDF95E6DA90ECE096F3E79DEEE298F3E79DF2E69E E5D991EDE199F9EDA5F4E89EFCF0A6F4E89EF5E99DE7DC8DE7DC8DF6EB9CEFE59CCAC18D2F290D 696632868157BFBD857E7C4127210DD1CD88E7E094D9D089E6DB8BAA9E51CABA7AEFE39BDED685 D3D17BA2A04DB8B76DCECD8CECE6AFD3CE92CDC783B3AB61979543A7A56B2C201B0800009C9951 E8E594EDE99ED4D084EAE59259510E908849E8E39DE7EEA565693D000000B0A87BF7EEA7E5DB84 F5E7A1E8DF9E847830F8EF9CECE69AFBF6B69E985E060000BEB787F3EBBCEDE79FDED987A7A157 70681FBDB371D9CE8EECE393B5AC61EAE2A2B0A770190F005F5526FAF2B9E2DC95EDE897DCD782 F4EF9CA6A057928A49D6CE91C2BB78C6C170E7E189928C373D3408251803372C15070000393918 7E8355A6AC71A1A161D2D194A5A26B8A8755615C3178754C524E28646138454216706E3F959563 9594639D99707673487774488987575D59294A4714312E051D1702241E012822002E26003A360A 363204221E00302C0043400E64612D8B8854928F5B5B5828736F3F545022444213454310363600 5E5D2474733C3330062A28005D572169632E4F4914504A15423C07605921787834908D4C9D965D 857B43695E2851450B392F003E34004842085F5B28C2BE92FFFCCBFFFFC8EEECB0E6E3A5DAD696 D0CD87ACA86157530C5A5310CCC37EEEE5A0CFC683BEB87C292400A8A465FCF7B3F6F2A8F7F4A7 F3EDA1FAF3AAFFF7B1FFF3B4F9EDB2F5E9AFF5EBB0F5EBADFCF3B2FDF4B2FBF2ADFEF6AEF5EDA4 F8F0A7FBF3AAF6EEA6F7EFA9FDF4B1F7EDAFF6EDACF7EEAAF9F1A9F8F0A7F5EEA1F7F0A1F6EEA4 F3EBA2F8F0A7FCF4ACF0E7A1F1E8A3F7EEA9F6EDA8F3EAA4F1E9A1FAF2AAEFE79FF9F1A8FCF4AB EFE79DFBF3A9F3EBA3F5EBA7F6EDA8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEF2DFFEE7C2FFF0CAFFF9E0FFFDF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF8F6E7E7E4B2E0CB74DFBA4DEDD583F8EEC2FEFBF0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFCFAFDF4E8F0E7C3E8E1B3F9F8ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFEF0FEF9DCF9E4BAFAE9CBFDF9F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FFFEF5FDF9DBF0D78EE7B851F0C476F9DBAEFEF0E0FFFCFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBF1E9EABDE2E2A6F9F9EC FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1E0B5E0BE64E0C771E1D8A2DFDCC9E6E7E9FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDE9EAEDD7D2C6DCC48EE0C065D4C966E6E3ABFCFCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EDFDE8CFFADEB7F8E1BCFCF2E2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCE9F5F5C5ECECB6E8E8B9F9F9EC FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCF6F0EBC8EBE4B2F6F3D8FFFFFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFCFCF6F5F5E0ECECBFEAE8B4FAFAECFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 E1E1E1EBEBEBFCFCFCFFFFFFF8F0D8EAD48EDFC55AE0CE65F0E8B1FFFFF9FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEFEFEFE3E3E3F0F0F0 FEFFFDFEFEF8EFE8BEE0CE7DDFC565EAD58DF8F0D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D280E4D582DCCD7AD9CA75EEDF8AE3D47FE5D67FD3C56D D4C66EE2D47BE3D57ED6C774D7C875E5D681E6D880E1D37BE3D57DEBDC87EBDC89E3D483EFDF91 EADA8DDFD17CDDD176DBCD75DBCD75DED17AE3D581E2D482E3D584E6D688E9D98CEADB8EE9DA8D EFE08FEADB88EADA87E6DA86E8DC88F3E793EEE48FF1E893F1E994EDE590EBE38EECE48FEDE68F F1EA92F5ED99F5ED9CF3EA9BF0E79AECE397E9E094E1D88AE8E090ECE493E7DF8BE4DA83E2D882 E9DF8CE8DD8DE2D788EADF90F2E798F1E697EADF8DE4DA85E5DB86E9DE8CE6DB8BE5DA8BE7DC8F EADE92E8DC93E3D78FE8DC91F2E69AF3E999ECE191ECE191EBE091EADF8FF0E596EBE091EDE293 E3D889E5DA8AE9DE8FEEE394F0E596F1E696EFE495EADF90EDE293F4E99AF1E696EDE290EFE493 F1E696E5DA8BE4D88DEBDF97EDE09AEADD94EFE496F0E496EADE91F1E598ECE093F0E498EEE295 E7DB8EE7DB8EECE093E8DC90E3DA92EAE098EBE297ECE397ECE395E5DD8DF1E898ECE394E6DD91 E7DE92F1E89EFBF1AADAD08CE4DA95F3E9A2EEE49DE8DF94F0E79CF2EA9EF1E79EEAE09AEAE09A EEE3A0E8DD96F3E79DEADE94EADE94F2E69CEBDF95F3E79DEADE94E8DC92F1E59BEDE197EADE94 F9EDA3F2E69CF1E59BF0E49AE9DD93EBE093ECE093F4E999EBE091E7DC8DF2E797F2E89EF5EDB2 D8D39B504A1C2923008F8954504A185B5629FAF9B8E3DA93DDD488A19646BAAF5FF2E79ECDC47C B0A961BAB56FF1EEA8DBD893AFAB6A625E2A4A4401615813726A207471238B89511F130D090100 C2BE7BE3E08FDEDA8FDCD88CDFDA85292301BCB46EEBE6A1DCDFA62B2C11282307E5DFAAEBE398 E2D886F5E39FBFAF6AA09447EFE895F6EDACE0D9A5373216646027FFFABDF4EDB8E0DB8BE7E293 756E2EDBD481D5CE7DBEB471E0D78BE4DB98E6DCA74C421D332B09DDD694E3DB95CDC77BD9D386 E8E293ABA4598B843CEEE7A1BBB46EAFA85CDCD582DBD580E8E0939E95579B90692F25180A0300 6A6A4A606739BCC589CFD18FAFAE6F8989505755236260347F7B558C896494906C63603A6D6A42 737145626134514E1E48461445430F3935033C390B5452173E390C5D581B716C3278703A918A54 8C864DABA668BEBA7AC1BD7CC5C17EE2DE9AE1DE99EDE9A6D8D492CAC586A6A2638C884DA6A171 908B5D6864356964365550227772436D663C40390E3D350D221B0038320C46401252511A5C5A24 4F491F20170D3F3608786F319F9551C2B975D3CB8CDBD5A0D5CEA2D0CA9DD4D09ED5D19BB0AC71 959152433F035B57118C883EF5EEA5DFD88EE7E095D0C9807E7836302B0BD1CD8BF1ECA7F7F3A9 EFEB9FF5EEA2F8F1A6FAF1ABFAEFAFFAEEB1FCF0B4F3E9ACF4EAACF9F0AFF8EFACF3EBA4F5EDA4 F6EEA5F8F0A7F9F1A8F7EFA7F7EEA9FAF1AFF9F0AFF6EDACF6EDAAF9F1A8F9F1A8F9F1A5FCF5A7 FBF3A8F7EFA5F6EEA5F7EFA7F5ECA6F6EDA8FCF3AEFFF7B2FAF1ACEFE79FEFE79FEFE79FF9F1A7 F8F0A7F1E9A0FAF2A8F6EEA6F6EDA8F7EEA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFAEAFFF4D2FEE9C1FEEDD2FFF9F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F6F7E6E9E3AEDECD75E0BF52EBCF7F F8EFD4FFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDFFF5E9FDE6CCF9E0C8F7E2D2FDF8F4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFAFBFAEAEBE3B0EEE8BEFAF8EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFEF5FAE6C2F4CB87E9B956EEC36FF9DBAFFFF1E3FFFCFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF9EFEAE9BEE3E2A9 F9F9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF0DBA6E1B54AEAC470EED9B2E4DDD1E6E7E8FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCE1E2E3CEC8C2E1CBAAEFCE8DDBC064E9DBA4FCFAF3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFEF6ECF3E8C4EBE2AF F5F1D7FFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F5F5D1E9E99EEEEEBCF7F7E6 FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFAECD4F7E3BAFBF2D0FEFFECFFFFFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFDFBF4F3DDE9E8B8EFEEBEF7F7D3FDFDF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7F7F7E0E0E0EBEBEBFCFCFCFFFFFFFDFBEFF7EFC3EBD179E0B43CEED68AFEFDE5FFFFF9FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEEEEEEE3E3E3 F1F1F1FFFFFAFFFEE7EFD790E0B445EACF79F7EEC2FDFBEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D380E5D683DBCC79DACB77F0E18CE8D984EADC84 E1D37BE2D47CE5D77EE2D47DE2D380E0D17CEADB86E7D882DFD178DED079E4D580E8D986DDCE7E E3D385E7D78AE2D581E2D87EE4DA80E5D982E4D882E5D985E3D785E3D786E3D687E0D385DDD082 DDD082E7D887E7D885EDDE8BEDE18DE9DD89EBDF8BE6DC87EBE28DECE48FEFE792F2EA95F0E893 E9E18CEFE793F8F09FF8EFA1F8EFA3FBF2A7F0E79CE4DB90ECE398E9E093E4DB8EEBE192E5DA87 E2D784EFE394F1E696E3D889E4D98AEADF8FEBE08DE8DE89E8DE85EAE087E3D984E4D987E8DD8D EBDF91ECE094F5E99FE9DD93E7DB91EFE396EFE494EBE08FF3E895EADF8FE3D888EBE090E9DE8E F1E696F0E595EDE292E9DE8EEBE090F3E898F8ED9DF8ED9DF3E79BF1E697F2E798EBE090E7DC8A EADF8EF2E797EDE293F1E598F3E79EEEE29BF2E69DE4D88DE9DC91F8ED9EF0E596EBE090EDE293 F0E595EBE08FEBE08FF2E795EDE191E9E094EFE69AEFE698EFE698F0E898EAE291EEE597EFE699 F1E89DF3E9A0F1E8A1F0E5A2ECE1A1E7DC9AEEE49EEEE49DE9DF96EAE196E7DE91E9E095EBE197 F1E79FF8EDA6EDE29AF4E89EEBDF95E8DC92F2E69CEFE399F5E99FEEE298EDE197F5E99FEDE197 E8DC92F4E89DFBEFA4F7EB9FEDE195EBE092E8DD8EEADF8FF4E999F3E897F0E594F0E594EBE191 F0E6A3FDF5BCE9E0A8A0995C877F4B100900A19B57EDE5A8EFE5A4B2A857B0A452FCF3A1AEAA58 AAA35CDED89BF6EFB8A8A369433F134843028F894BCCC477DCD389EBDF99F5F0A6DCD9A3271A13 0F0600D0CB8DD8D584D2CF82E9E49AB6B05E2E2800D7D186FAF6B2AFAD850000006E6B44F3EDAA F0E899E6D98BF9F1AD96883EE8DF8FEAE393FAF2BB827953161200C6C27EEBE89CDAD690F6F0A3 AAA45B9C9454DFD980DFDA7FC7C071C3B971EADFA7796E3D0C03009A9352EEE999CCC771E0DB89 E0DA8EB8B16B8B843EEBE49CD2CC81AFA75ACBC371CAC26EDFD685EBE39CE4DCA8443B1C060000 534F3D989B7DA5AD80525B28595E20898B4DCCCC9591905FAAA97C58562F716F496A6843797750 6F6D46605E36545222615F275F5A225E5A1E979355A29F5D9E9956A5A05DBCB775C4BC7DD0C88B E4DA9DE1D994F2EC9EEFE99BEAE496E0DB89E6E08CE9E490DED986F2EC9BE9E395F3ED9FD8D289 A8A066B3AA7579703C847B4898915F8882518B8456A59F71A7A0746864371C1700262308676739 969469CAC79ABBB582A49D65B2AA687F782D766E227D7430645B20534817504818565321403A0A 625D25686426787339B5B16BAEAA61E9E399DFD98DE3DD91CAC3773B36097B7638FFFEBCE2DE96 EBE69BF7F1A6EBE398F3EBA1FAF2AAFBF0AFF9EEB0F9EEB0FBF1B3FAF1B1FFF6B4FEF5B0F9F1A9 FAF2A9EFE79CF8F0A7FBF2AAFDF4ACFBF2ADF7EEABF9F0ADFBF2AFFAF2ACF9F1A8F8F0A5FAF2A7 FCF4A9FDF5A9FBF3A9F7EFA6F9F1A8FAF1ABF7EEA9FAF1ACFFF8B3FCF3AEEAE29AEBE39BF5EDA5 F5EDA4F4ECA3FCF4AAF9F1A8F5EDA5F4EAA6F2E9A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF4FEFCE2F6E4B9F7E6C4FCF7ED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F6E2E7E3B0DDB950 E1B955EDD8A2F9F3E3FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFCFAF0DAF5DEB4FAE2CDFFECEFFFFAFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAF1E2E3AAE7E8B7F8F9ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFFFFF4EAFDE3C5EDC26FEBBA5AF1C476F9DAB5FFF1EFFFFBFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAF6FCF0E0F1E4C3 ECE2BBFBF9F0FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFF9F0D998E2B13CF1C87DF7E1CAE8E1DBE6E7E7FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE7E7E8D9D6D4EDDECEF9DBAFE2B959ECD498FDFAF3FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFDF3F4D7 E9EAB5EEEEC6F5F5E3FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF7F5F5E0EDEDB9E9E99EF5F5CE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF3E8FEEACFF7EEC5F5F6D0FEFEF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFCFEFEF4F2F4E7CCEBDFA8F5F0C8FFFFEFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF4F4F4D5D5D5E4E4E4FBFBFBFFFFFFFFFFFDFFFEEBF2E0A4E0B548E8C970F5EAB6FDFAED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF4F4F4ECECEC EBEBECF6F6F6FDFBEFF5EBB8E8CA6BE0B53BF1DE9AFFFEE9FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D381E5D683E8D986E6D782E2D37EE1D27D E6D881E7D981DBCD76D8CA71E0D27AE1D27DDECF7AEADB86E9DA85E4D580E2D37FDECF7CE5D686 E7D888E5D588E3D385E0D27EE1D57FE3D781E1D581E2D682E7DB89E1D583E3D685E4D788E3D688 E6D98BECE091E7D885E7D883F1E18CF2E690ECE08AEBDF89E1D780E7DF87E7E088EDE68DF1EA92 ECE48FE7DF8BEEE695F8F09FF5EC9EF2E99EF7EDA5EEE49CE7DD95EEE599F0E79BE8DF92E8DF8F EDE292E9DE8FEFE495EDE195EADE92EADF91E8DD8DE3D986E2D882E2D87FE0D77CE6DC86E2D785 E6DB8CEEE394EFE397F5E99FEEE298E7DB91EDE293EEE393E9DE8DF4E997ECE191E2D787EADF8F EADF8FF3E898F5EA9AEEE393EBE090EEE393F2E797ECE191E7DC8DF3E79BF0E596F3E899F3E898 F5EA98F4E997F0E593F0E595F7EB9EF8ECA2F0E49AF5E99EE4D88CE5D98EF4E99BE6DB8CEDE291 E8DD8DF1E694EFE491EBE18CF1E792EEE390DBD283E1D88BE2D98AE4DC8CEAE291E7DF8EEBE293 EAE194EDE39BF2E8A2F0E5A3EBE0A0F5EAABF6EBA9F0E6A0F0E69FF4EAA2F2E99DE9E093E9E093 EBE295F1E89CF5ECA1E8DE93F3E79DF1E59BEFE399F8ECA2F2E69CE9DD93E5D98FEFE399F4E89E E6DA90E4D88EEDE195E8DE8EEFE495F5EA9BEDE292EDE292F0E595ECE18FE7DC8AEDE290F3E994 F0E594EADE93EDE1A3EDE2A8FCF6B4A19969211500BBB46EE4DAA2DFD598978C39EEE390AEA551 A5A44EE8E49DE1DBA6847D520F0700797135DFD98FF4EE99E2DB86F7EC9FE0D18DDFD992CFCB95 120600180F00CAC58CD2CF7ED5D385DCD88E979146534D00EDE799FDF7B6747057000000A6A16C F3EFA0F0E795F4E69DCFC07D908338ECE493F3ECA2C4BA90221900686134E4DE96DCD882D8D578 DFD8936E6627D0CA7BEEE996E2DF82B0AD50FAF2ACA396681204046C6026EEE797DBD678D5D170 ECE691CEC67D8E8544E1D895D1C981A7A050CEC772D2C871C9C16FD3CB80EBE1A563592E070100 312C1A615F4F4448292B34073B440DC9CE98B3B6836D6F3E4D4F2164653B8E8F676B69416A683F 706F433B3A0B5252205A58208F8B4BB6B06E99954FAEAA61C5C178D8D288E5DF95E6DF96EDE49C E9E19BDED48EEBE295F2EA95EAE389F0E98EE5DD82E3DD80E9E287E9E287E7E085DCD57DE8E189 DFD785DBD284D9D185B0A85EB3AC62C3BC74928E47ACA763D4CF8ED5D190D2D291848444515219 38390E45461E8C8B5ECDCA96B7B475D2CD84D5D07DBFB964B8B162D7CE89C3B77D9D945DCAC58D A7A26AAFA96DA29D5DC0BB78C7C37D8E8A43C8C47BE1DD96E1DD96ABA65E0E0700B8B36AFFFFBB CAC379C1B86DE9E294EFE89AF3EBA1F8F0A7F8EFACF7EEADF8EFAEFDF4B3F8EFADFAF1ACF6EDA7 F2EAA1F3EBA0F0E89DFDF5ACFFFAB1FFFBB5FBF2AFF3EAA7FCF3B0FFF7B4FBF2ACF6EEA5FBF3A8 FDF5AAF8F0A5FBF3AAFDF5ADF7EFA7F9F0ACFCF3AEFCF3AEFEF5B0FDF4AFFAF2ACF9F1A9F9F1A9 F6EEA5F6EEA5F9F1A8F9F1A7FAF2A8F9F2ADF7F1ADF5EEABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBF0E7E5B1E9E7B8 F8F7E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFBF8F4E4 E7CF8DDEBB61DFBE68EBD6A0FBF6EAFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFBF1F0D3E4E1A8F1EDD0FFFCFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E5E5B0E9E8BAF9F7E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFFF7EEFDE3C5F2CA84E5B64FEBBF75FBDCCCFFF2EE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFEF1E0FDE1C4 FCDECCFCE4DFFEF9F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FEFEE4EFD88BE1B442F1D598F5EFE7E5E5E5E4E4E4FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F6F5F6FAF7F2F7E7C3E1B343ECCE84FDF7EC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FEFEEDF8F8D1EBEBB6E7E7B4F8F8EAFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF5F5E2E9E7B9EAE8AFF9F9D1 FEFEEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF7E9ECEABFE7E7B5F9F9ECFEFEFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFDFFF4F2FFE5E1FDDCCAFCE1C1FDF1DFFFFFFDFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF1F1F1C9C9C9DCDCDCFAFAFAFFFFFFFFFFFFFEFEF8F3F0D3E0D890DEC86DE3C76F F6EFD2FDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFEFEFEF4F4F4E8E8E8 ECECECFAFAFAFCFCF7F6EFD6E4C972DEC960E0D776F2F0C4FEFDF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECF7DDCCD7AE5D683E4D581D8C974 E6D782E8DA83EADC84DCCE76DACC73E6D87FE2D37CD8C974E1D27DE3D47FDFD07BE3D480E1D280 E6D786EFE090EDDE8FE2D383DED17FDDD27CDCD17ED7CB78D7CB78E0D583E6DA89E8DC8BE6DA8A E2D687E4D889EADD8FEEDF8CEFE08BEEDF8AEEE28CF3E791F3E791E9DF88EEE68EEDE68EF0E991 F2EB93EFE88FE8E08DEBE392F4EC9BF4EB9EF0E69DEFE59DEEE49DEEE49CEDE39AF1E89DEDE497 EAE091EBE090EADF90EDE194E7DB8FE9DD91F6EB9DF5EA9AEDE38FE8DE87E2DA7EDED57AE9DF88 E1D784E3D888EDE293EDE294EFE398EDE197E3D78AEAE090E6DB8BE9DE8CF0E692EADF8EE4D989 EFE493EADF8EEBE08FE5DA89E6DB8AE9DE8DEFE493F2E797E0D584D2C677F2E59AEADF90E9DE8F ECE191F1E694F5EA97F0E592ECE191ECE292EDE294ECE095F7EB9FF3E79BF1E599EDE294EEE394 F2E797E6DB89EFE492EFE590E4DA83E8DE87E3D982F2E99AF3EA9CEAE192ECE493F3EB9AE6DE8D ECE394DED588E0D68EE5DB95EFE5A3F5EAAAF6EBACFEF3B1F2E8A3E7DC95E7DE93E9E093F4EB9E F0E79AECE395F0E799F0E79BE5DB90EDE197EDE197EDE197F3E79DEBDF95E4D88EEBDF95F4E89E F5E99FE7DB91E2D68BF8ECA0E6DB8CECE192F5EA9AE0D585D4C979ECE18EE9DE8CDDD280E4DA84 F6EC97F4E996F2E696EDDF9DEBDFA3EBE39BA094630D0000A39C56FBF0BCBEB37BA39B47DED281 807A26DDDD88DCDA965E582F241C0FB5AB7EF4ECB3E9E296D9D279D9D179E7DC8DF1E5A1E6E09A D9D79E1D1305180F00B7B27DDCD989CBC87AD0CB837E77357D7828EFEA99E9E2A33A33241A1506 C3C081E2DF88DCD37DFBEEA4A89953C5BB6EE1DA8AFCF6B3766E48060000AEA568E9E398E7E486 EFED86ADA665867D43EDE896E6E18FD1CE72D7D473D8D190483C202E200AC4BA7CDDD782D8D56F F2EF88DED9808F873EC6BC7EEFE6A5ABA35ABBB461DCD57EE6DF89E0D989F0E7A4ADA570120A00 1E18088D88782E2D1E5B5F3F838A5D828A594C51295E603A73754E8F906A707048515126363606 3B3A0653541A5F60229D9D5BB2B16CBFBA73BDB56CC6C175DCD588DAD384DED786E5DD8CE1DA8A E9DF91E8DE90EBE095E9DD8CE2D780E0D57BE7DB7FE0D679EFE485F4E889EEE486D9CF72E5D87E E8DD85E1D67FE5DB7EE2DA7DDBD478D8D177D9D37BC2BD67B1AD58CDCB79C3C270B4B364CDCD7E B3B3704446182B2C03636433C2C18BBFBF7ED6D587CDCB72C6C266CDC771EEE598E3D994B6AE6B CDC985EFECA79D995495904AB3AE68BFBA76C5C07CA09A5ADDD89BCCC68B494319251E00CCC478 F8F0A5F2E99EEEE697F5ED9EF9F2A4F5EEA1F0E89FF0E8A2F7EEAAFFF5B2FFFBB9FAF1ADF6EEA6 F2EAA1EBE399E8E195E8E095FAF2A8FFF7AFFFF5B0F4EBA8EEE5A1FDF4AFFDF6B1FCF4ABF5EDA4 F7F0A4F9F2A7F7EFA3FBF3AAFAF2AAF7EEA8FAF1ADF8EFAAFCF3AEFBF2ADF5ECA7F6EEA8FCF6AE FFFBB3F3EAA2F6EEA5FFF7AEF7EFA6F9F0A7FDF8B2FEF8B4FFF8B4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3E5E5B0 E7E7B5F7F7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFCF7F5EACFE9D399E0C06CE1C170ECD8A6F7EFDAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF0F0D1E1E2A5F0F0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF6F2F3CCF4EEC4FCEDD3FFF5EBFFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFFF5EDF4E1B5E3C974E1BC5DEDC67F F8E5BDFFFFF1FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF6EED4 EFE0B2F7E7D0FFF2F4FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF1F0F0C3E5D281DFBA56F2DDACF1EFEADADADCD8D8D8 F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEBE0E1E2F0EFEDF7E9C9E1B23FEBC471 FCE8CEFFF9F4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFF9FDFDE9F4F4CDEDEDBAECECC2F4F4DFFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F3F3DAEDE8C3EEE0BDF5E8CC FEFCEBFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF7F4F4DEEDEDC8ECECC6 F5F5E1FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFDFAFFF2E4FFE7D3FFDFCBFFE2CFFFEFE0FFF8F2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF7F7F7E3E3E3ECECECFCFCFCFFFFFFFFFFFFFEFEFDF9FAF0EFECC7E4CF79 DEBF4CE7DFA1F3F2D7FDFCF8FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5ECECECEBEBEBECECEC EFEFEFF6F6F7FCFCF7F3F2D9E8DFA3DEBF4DE3CE70EEEBB6F9FAE8FEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D683E4D582E6D784E5D681 E0D17CE6D782E5D77FE8DA82E6D880E6D87FE9DB82DBCD75D2C36ED8C974E0D17CE2D380E6D785 E4D583EFE08FE8D988E6D786E2D382E3D785E2D785E3D886D9CE7CD4C977DED381E3D888E6DB8B E6DB8BE5DA8AE9DE8EF0E596E8D986ECDD88F1E18DF1E58FF4E892F6EA94ECE28BF2E992F5EE96 F4ED96F3EC94F2EB93E9E18DEEE694F9F0A0FCF3A5F1E89DE6DB94EEE49DF2E8A1F6EDA2EEE598 EBE295EFE595E8DD8DE9DE8EF4E99BEEE296E9DD91F0E497EFE494EEE390EBE18BE4DA80E3DB7F EBE189E9DF8BEADF8DEBE090EADF91F2E69AEADE92E3D88AE6DB8CDFD483ECE18EF1E792E3D886 E2D785E8DD8BE5DA88EDE190E8DD8BEFE492EADF8DEBE08FF5EA98ECE18FE0D485F9EDA2F0E498 E7DC8DE5DA88E0D583ECE28DF3E994F2E795EFE493EDE292F0E597EFE397E3D78BEADE92EEE395 EFE495F3E897F2E797E8DD8AE9DF8BE4DA84E7DD87E5DB87F6ED9EF8EFA2EEE596E0D788EDE593 FBF6A5E8DF90DDD487EDE39BEFE59FF2E8A5F2E7A6F3E8A7F6EBA9F2E8A3ECE39AF3EA9DF8EFA2 F1E899F0E798EEE597F5EC9FF5EC9FF1E69CF0E49AECE096EFE399F1E59BECE096E8DC92F3E79D F2E69CF4E89EEDE197E6DA90F1E599EBE091EDE293F1E697E9DE8EDFD484EEE392F9EE9CEDE290 E9DE8BF3E994E8DE87ECE089EFE298EFE3A2F7EEA7A297681104009A9252F3E8B8928651C4BC6C 837A29C8C372ECEE9E62611F231C09BCB38AF3E8BADFD699E6DF91E7E087E6DE89F1E99DD7CD8B B1AD67CCCA8E2D230D130900B1AB7BDFDC8CD8D686E4E09A625A26B5B060F9F4A2D6D0921A1205 403A24E8E69FE7E287E7DE88F6E89D887A32E7DF93E4DC92DFD79D282211463D1CF0E7A9E3DC8E F6F394E6E480726B25C2BA7CDCD68BDFDA89C9C46DDDDA83837D41170D00B0A374E4DB9BD8D27C E0DD78E7E38089832BC2BA6FEFE6A6B3AA67AAA257E7E18EE9E290D7CF7FFAF2ACD8D195221C02 0802009B977F9A98846161495D5F3E2E340B535A2D6D6E4F48482D2F31115656335B5A326C6B3C 6C6C355454157F7F37BCBC6EBAB968BDBA6ADAD386E2DB8DE4DD8DE9E18FEAE28EE9E28DECE28C E9E08BECE18DEEE290EEE292EDDF8CE5D681E5D780EEE086EBDF82E9DC7FECDF83E8DB7FE7DA7F E9DB82E9DB85ECDE87E3D97BE5DB7BE2DA7AE2DC7EDFD97ED5D074BCB75ECCC772CFCE78D1CF7C D3D17ED2D188A6A7722B2D071B1D06838449CBCC8AD1D384C8C970E2E083DBD87BDCD680DBD283 C6BF70C1BE6EECE99BAAA759ABA85CC2BE75B1AC67E8E3A3BCB57BE7E1AC6E6939352E04423A00 D8D081F0E899F3EA9BF7F0A1F2EA9BF9F2A4F6EFA2F3EBA0F5EDA4F9F0A9FDF4ADFAF3AEF5EDA5 F4ECA3F9F1A6F8F0A3F2EB9DEFE79CFBF3AAFFF7AFFFF7B2FAF1AEF2E9A6F1E9A2F5EDA6FCF4AB F8F0A7F4ECA1F6EEA3F6EEA3FEF6AEF7EFA8FBF2ADFFF9B6FBF2ADFCF3AEF9F0ABF7EEA9FBF2AD FAF2AAFFF9B1F9F1A9F9F1A8FEF7AEFBF3A9F6EEA5FCF5AFFCF5B1FBF4B0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 E9E9E9DFDFDFDADADAD8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 D9D9D9DEDEDEF2F2F2FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4 E9E9BCE9E9BBF4F4DFFDFDF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF6EDD6E7CE8DDDB95DDFBE68EDDAABFBF7ECFEFDFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEFAF3F2EFCFE6E6ADF2F2D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEAFDF2D0FBE3BDFCEBD5FFFDFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F6E2E6E3ADDCC565 E0B847EED687FBF5CFFEFCF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA EEEECCE2E2A7F1F0D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F7E9E2DEA1DBCA78DEC370F2E4BDEFEEEAD5D5D6 D3D3D3F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE0E0E0CECFD0E7E6E3F7ECCCDFB848 E8BE61F8D7A7FEF1E2FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8ECECEC E0E0E0D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9 DEDEDEF3F3F3FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFBFEFEEAF8F8D0E6E6A9ECECC2F8F8EAFDFDFAFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8F8F7E8E9E6B9E9DDB1F7E0CF FFECEEFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F7E6 E5E5B1EDEDC7F9F9ECFEFEF7FFFFFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFDFAFEF6EDFBE5C6FBDDB7FEE0C0FFEDDBFFFCFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFCFAF0 EEDC94E0C34ADCCC6CE9DFA9FAF4E5FFFEFDFFFFFEFFFFFFFEFEFEF9F9F9EDEDEDE2E2E2E0E0E0 EAEAEAF9F9F9FFFEFFFBF5EBE9E0ADDCCB6DE0BF49EED992FCF9EDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D582E5D683E6D784 E2D37FDDCE79E7D883E2D47DE9DB83EBDD85E5D77FE3D57CE1D37AE0D279E0D17CDDCE7BE0D181 E6D686DDCD7FE5D587DECE7FE2D382E2D480E3D785DDD282DBD080D8CD7EDDD283EDE292E4D989 E2D787E2D787E3D888E5DA8AECE190E4D580E1D37AEDDF87ECE288E4D980F1E68DF0E68CF3EB91 F3ED92EFE88EEBE48AEAE38AEAE28DF2EA96FBF3A2FBF2A4F2E99DEAE196E8DF94E4DB90E8DF94 EAE194EBE294EEE494E8DD8BE9DE8BF1E697ECE192EBE091EEE394EBE090ECE18EEDE38DE8DE85 E7DD84E9DF88E6DC88E7DB8AE3D888DFD484E5DA8BE7DC8DEBE092E1D687E4D987E3D884ECE28D E6DC87E6DC87EAE08BE5DB86EFE590EEE48FEBE18CE6DC87EDE38EF1E791EFE58FEEE392ECE095 EFE397EDE293E8DD8CDCD17FE7DD87EEE48DEAE08BEAE08CEEE392F1E696EDE194EADE92EFE397 EADE90EFE495EDE293F2E797EADF8FEDE291E8DD8CEEE391FBEF9FF2EA9DE5DC90F5EC9EF7EE9F E5DD8DEBE392EEE596E8DF92F9F0A5F8EEA6F5EBA5EEE49EF0E5A2F0E6A1F0E69FEFE69CEEE598 ECE394EDE495F0E798F2E99BF6ECA1F4EBA0F0E69BF0E49AEEE298F3E79DF6EAA0F3E79DF0E49A F5E99FF0E49AF6EAA0F5E99FF2E69CF2E69AF1E599F2E59AEEE296EBE092F6EB9CEFE494F4E999 F4E998F5EA98F3E896EDE38DEDE288EEE292FDF3ADFDF4B1BDB2820E0500665F34F8F0C1928954 B0A960847D2DFFFFB49D9B580702008F894FF5ECB8DED39BE7DD9ADCD385E1DB88D6CF80A8A25A B1A868C4C07AD7D6953E36170400009C9668E5E28FDDDA89E5DF9E635A21C2BD6CF4EE9CC8C086 0C0300575230EEEBA1E6E185F3EA94D6C97A928637F2E59DF5EAAD999164020000B0AB75F8F5B3 D8D27EEFE990A9A25266610FEFE9A1D3CB8DD0CE7CD8D685BFBA761711005D5430F9F7B9E0D68E DDD581EBE588A8A0479E9641E2D98BE8DE95978D45E7DE90DDD683DED68BF0E9A6D1CA8E292300 0F0A00716E4CAFAC8E4343263031115F613A73744947482017150038371C3736164F4C2659572A 605E2A8C8C4D9B9B51B7B664CAC970CECD70E0DB84DFD789E8DF90E6DE8DE8DF8AEBE18BE9DF87 E9DE85EBDF89EFE18DF0E18EE9DA89EEDE8EEBDA89E9D986EEDE8AEEDE87EDDD84EEDE86F0DF88 EEDE89ECDC87EEDD8CF1E18FEADE8AE5DB87DED480DED684E0D887DAD282C9C072D3CB7DD3CC81 D4CD82D7D086D4CF89D2D29654541C13130021210062632A9FA05BA2A454B9B960DAD87DD8D27C D6D07CDAD483B7B260D0CB7ADCD685CFC97ABBB76ECDC983CCC787E1DEA5433E0B564F21959062 6A6019F8ED9AE6DB8AF3E898F7F0A1F7F1A1FBF2A3FAF1A5F9F1A6F9F1A9F8F2A8F8F2A8F8F0A8 F7EFA6F5EDA4F4EDA0F4ED9FF5EEA0FAF2A5F7EFA6F4ECA4F9F0ABF5ECA9ECE3A0EEE69FF1E9A1 F9F1A8F8F0A6F7EFA4F9F1A6F7EFA4FDF5ACF5ECA6F8EFACFFF9B7FBF2ADFDF4AFFCF3AEFAF1AC FDF4AFFBF3ABFDF5ADFAF2AAFCF4ABFAF2A9F5EDA3F8F0A6FFF9B6FAF5B3F4EFADFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6D6D69192915B5B5B4141413C3C3C3C3C3C3B3B3B3A3A3A3A3A3A3A3A3A3B3B3B3C3C3C3D3D3D 3C3C3C3D3D3D565656BCBCBCEAEAEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCFAFAEFF1F1D3E9E9BBEFEFCEFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFBF6F7EFDAEAD59DDDBA60E0C06DE9D399FBF6E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F0FFEBD4FCEAC5F8F6CEFBFCE8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCF5F3D6E9E3AFF0EBC8FDFDFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F7F6E4 E9E3B0DDCC72E0C158EAC870FBF5E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCEEEECCE1E1A4F0F0D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8F3E2E2CB84DBC872DDD488F0EDCCFAFAF6 F5F5F6F4F4F4FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7F3F3F4F8F8F6F4F2D6 D6CE6BD7C35DE5C67BF6E8CCFEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9 9C9C9C6363634242423C3C3C3C3C3C3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3C3C3C3D3D3D3C3C3C 3D3D3D595959C0C0C0ECECECFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FDFDECF8F8CFEDEDB9E7E7B4F5F5E2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3DBE7E4B4EEDCB9F8E1D2 FDEFECFFFBFCFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDF9F7F7E7EDEDC7E7E7B3F6F6D0FEFFECFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF3E6FCE4C5EBDCA3ECE2B1F9F0DBFFFBF8FFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2D0D0D0E0E0E0FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFEFAFAF5D1F2E196DFB23AE9BD62FBDEB7FFF6EDFFFFFEFEFFFFF7F7F7E8E8E8EDEDEDF5F5F5 F6F6F6F9FAFAFDFDFDFFF6FBFBDFD1E9BD6FDFAA38F1C993FAE5CFFEFBF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD07EE2D380 EADB88E5D681D7C873E3D47FD9CB73E1D37BEADC84E7D980E2D47BDFD177E8DA82EDDF88E7D885 E9DA89EADB8CD4C477D6C678DACA7BEBDC89DDCE7BE3D886DCD282CEC474D3C979E2D889EDE394 EAE090E3DA8AE2D988E4DA8AE2D888E8DD8CE3D781E8DA82E9DB83E5DA81E9DE85F0E58CF5EB92 F3EB91EFE88EEBE48AECE58BEFE88DF0E990EEE790EEE692F2EA99F8EFA0FAF1A6F0E79BE7DE92 EBE294ECE394E8DF8FE8DF8CE6DC86E4DA84E8DD8BEADF8FF0E596F3E899EBE091E6DB8CE8DD8A E6DC86E7DD87EFE590E8DE88E7DD8AEEE393EDE292ECE192EDE293EEE394DFD484EDE290E4DA85 E7DD87ECE28DE9DF8AEBE18CE3D984EBE18CECE28DE7DD88E7DD88F2E893EDE38EEAE08BF2E796 F4E89EF5E99DF3E899F3E897ECE18FF1E791E9DF88E3D983E5DB87EDE28EEFE493E2D787E3D789 EDE294E6DA8DF1E698F5EA9CF0E597F8EC9FF4E99BE3D78AEADE91DFD487CAC379DDD38BF1E79C E9E094E7DD8FF6EF9FF2E999F0E799F7EEA2EEE59AF6ECA3FBF1AAF4EAA2EFE59CF0E69CF1E89B E8DF90E2D989EDE495F2E99BF6EDA1F6ECA4F4EAA2F4E9A1F2E69CEDE197ECE096EFE399F1E59B F4E89EF7EBA1EDE197F4E89EF7EBA1F3E79DF5E99FF3E79CF2E69CEEE297EBDF94F4E89CF3E79A EDE292F1E697F3E899EEE393EFE492F5EB90F1E790F1E79DF8EFB4DDD4A52018003A3217E1DAAD A49E68908B49C4BF74F2EDA8433C24423C17DCD398E6DC9ADBD288DCD386D6CD80ACA55AB3AC67 D0CB8AB1AF6E95954BB5B46F5A522C030000756F40E2E08CD9D685D3CD8E524816CAC474F1EC99 A29B610800006E683DE5E196E0DA84FDF59EB3A655ADA24CEFE39EF2E7B5504832212000DEDE98 EBE299E6DE8BF2EB9C6E6524ACA851FAF4A4DFD69BD4D185D8D48F4E4823262101DCD58DD8CE80 D2CA7BECE394CFC676877E31D1C979EEE696A09747D1C977E5DD8BD4CD7CDFD897E8E3AE686338 0602001C1B0042431F40411C4A4B2A6768404B4A21302C0545421C3A371443421D565429757343 8E8C56979457C6C37EC1BD70D4D17DEFEA90E9E387EAE28BE5DB8EDED284E0D483ECE18DECE18A E3D57EE2D67DEADB85EADB87E9D987EDDC8CF0DF8FEEDE8DEBDB88EBDB87EBDD85EADB83EBDC84 F0E089ECDC88E8D886EBDB89EADB8BE6DC8DE7DD8FE4DA8DE6DD90E7DD92DDD48BDED48BE9DE96 DBCF88C8BD76CDC27BD5CD88D0CC8D9F9D6621200024230B3030073D3F128F9150A4A55BB4B363 DCD987E9E595E7E194DDD68CDED78BD6D084B4AE64BAB76DF2EEA89894515C5728413D0BC8C490 95915BA2984DFFF79FDFD47EF4E895EFE695FFF7A7F4EC9DF7EFA0F9F2A5FBF3A9F9F2A8F8F2A7 F5ECA2F8F0A6F6EEA1F1EA9CF2EB9CF7F0A1FCF5A6FAF2A8F4ECA4F7EEA9FCF3B0FAF2AEF9F0A9 F8F0A7FCF4AAF8F0A5F7EFA3F9F1A5F8F0A4FCF3ACF3EAA6F7EEACFFF8B8FAF1AEFCF3ADFBF2AD F9F0ABFCF3ADFAF2AAF6EEA6F0E8A0F2EAA1F6EEA5F4ECA2F5EEA3FEF7B3F8F3B1F6F1AFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBDBDB999A994E4F4E191A191111111A1A1A3232323838383838383A3A3A2E2E2E1B1B1B 101010141414282828555555C0C0C0EEEEEEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3DCE4E4ADEAEABFFCFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF8F5ECD3E8D093E1BD63DFBB5AE8E2ADF4F5DD FDFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF5E7F5E5BFF6E8BEFDFCE4FFFFF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F2DAEAE3ACF0EBBF FEFDEFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFAF4F5E1E8E0AAE0C265E0B64DEEDBA9F8F0DDFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBF3F4F4DEEDEDC7EBEBC4F6F6E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8F0DBE2BF65E1C26EE8D8A5F7F1DF F8F7F5ECECEDEBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0E8E8E9F4F4F2 F8F5E2E3DA93DDC363DFBA59F2E2BCFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D8D8D89696964B4B4B1818181111111B1B1B3333333838383838383A3A3A2D2D2D1A1A1A101010 141414292929595959C4C4C4EFEFEFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FEFEEAF4F4D3EBEBC0EEEECBF5F1D8 FCF2E2FFF7EFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF7EFFCF2E1F4F2D8EEEEC5EBE9B6F6E7D0 FEEEEBFFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFCF4F4DDECEBC0F8EEC6FAF1CFF5F2D6F7F7E8FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFF6FBFCE7F4F3CFF8E7C7FCDEC3EFE3BBF0EECEFAFAEFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5DADADAE7E7E7FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFEFEEFFBF1CAEDBF67ECB55CF1C07EF9DCB8FFF3E7FFFBF9F5F6F7E1E1E2EDEDED FDFDFEFFFFFFFFFCFEFFF3F3FADDCDF1C293ECB565EDB963FADDC8FEF1EEFFFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECF7D DECF7CE9DA87E7D884DACB76E2D37ED5C76FD9CB73E0D27BDFD178DFD177DED175E3D57DEADC85 E6D786E3D385E4D486E4D487F5E597E9DA89E9DA87E2D47FE7DC8ADCD384D5CC7DDED586E7DE8F E4DB8CE4DC8BDBD382DCD483E2DA89DFD786E7DD8CDFD37DEBDD84E3D57DE4D980F6EB92F2E78E F5EB93F1E88FEBE48BE9E288EFE88EF5EE94F2EB91F0E991F1EA92F4EC98F5ED9CF4EB9CECE395 E7DE90EDE594ECE492E5DD8AE4DB85E6DC83E4DA82E3D984E7DC8AF1E696F1E697E5DA8BE1D687 E6DB8CE9DF8CEDE290E9DF8BE0D67FE1D782EBE090ECE192E9DE8FE8DD8EE6DB8BE1D685F0E593 F0E690EDE38BEDE38EE6DC87E9DF8AE4DA85EAE08BE4DA85E3D984EBE18CF5EB96F2E893F0E690 F4E998F9EDA3F3E79BEDE293EEE392ECE28DF2E891ECE28BE5DB84E2D882E3D984E3D886DBD080 DED384EADF90E4D88BECE094F8ECA0F6EAA0F2E69CEADE95ECE098F8ECA4D0C37B3E3500B0A65F F9EFA8F0E79BEBE295EEE597EBE392F4EB9BFAF1A2ECE397F3EA9EF6EDA2F3EA9FEDE497F0E798 F6ED9EF1E998EBE392EFE697F1E89BF5EBA1F2E8A1F3E9A4F8EDA6F5E99FEDE197E8DC92EADE94 EEE298F2E69CF5E99FEDE197F2E69CF1E59BEEE298F3E79FEFE39BF3E79FF7EBA2F4E89EF4E89E FDF1A7F2E69AEEE395EFE495EDE293EDE290FBF296F5ED91E1DA8BF4EBB8F8F1C06A653C060000 787349A09D64A39E63D0CE84CEC88A191000B3A87AEFE5A3F3EB99DCD27ACCC36EA1984CC2BA77 D3CD91504E1243430B94954ACACA81B7B17E1F16083B330AD0CE79E0DE8DD3CC8F4F4417C1BC6C ECE6968078400A02008A8552EAE499E0D987EDE38F80751DB9AE54F4E8A5D4C7A3130800787741 EFF19BEFE896F3E99FEADF9D5B5114E1DC8AF3EE9BDCD492FCF6B9A69F6C0801009D985EE8E494 D4CE6FE6DD8BE3DA918F8443C1B775DDD489C8C16EA0993FD4CD73E2DB83E1D98BE6E0AA96926C 0C08002A2A0A7C7E5B8789638E9166434618303100635F31575025635C32787645777743B8B780 ABA96EA19F5EC5C07AC0B970DFD889E5DE8CE0D782DFD680F0E493EFE196EFE294E4D787E4D985 F5E691F2E38DEADC84F0E08BEAD986E8D785F0DE8FEFDE8FEEDF8CECDD89E8D985E8DA82E4D67D E6D87FECDE85EADC86ECDD89F5E694EFE291E7DE8FE1DA8ADAD183DDD485E2D98BDDD488E4D78C DCD185D2C578D2C578D9CA7DD4C880D7D090CFC995332E0A282311434224212000313304525318 80803CC2C076E4E197E9E29EF6ECAEE8DF9FE4DB9AE3DC979A96506D6A22272400797632ADAB6B E5E4A46A6727DBD080FDF69DE9DE85EDE18BE5D986F9EE9EF3EA9BF3EB9CF5EEA0F7EFA4F8F1A6 F9F3A7F0E89DF5EEA1F5EEA0F4ED9DF7F0A0FCF5A6FCF5A7FFF9B0FAF2A9F8EFAAFDF4B3FFF6B3 FDF5ADFCF4ABFEF6ADFBF3A9FCF5A7FEF7AAFCF4AAFFF8B1F8EFABFCF2B1FFFABBFAF1AFFBF2AD F8EFAAF5ECA7FAF2ACF9F1A9FEF7AFF5EDA4F3EBA2F8F0A7F5EDA3F3ECA1F8F3AFF7F2B0F8F3B1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF0F0F0CACACA7878782829281E1E1E353535717171808080828282858585676767 343434171717262626575757959595DFDFDFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F5DEE5E5AFEBEABEFDFBF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF7EED5E9CA7ADBB238D5CC66 E4E4AAF9F9ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F3DFEAE4B4EDE8BEFDFCF3FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF3DFF3E5B4 F5EBB9FCFBDDFEFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFDF6F2DDE8D090DDB757E0BF6BEDDAAAFBF6ECFFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF5F5E1E8E8B8EAEAC1F9F9ECFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF8ECD2E2B64AE8BD6CF7DAC2 FFF4F3F2F1F0D8D8D8D6D6D6F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE2E2E2D1D1D2 E9E9E8FFF8EEF8E1BAEAC36DE0B241F2DEADFEFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE6E6E6B4B4B46464642525251E1E1E373737727272818181818181858585656565323232 1818182929295A5A5A989898E1E1E1FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDFDF5F8F8E8EAEBC0 EBE3B1F8E3BDFFEDD8FDFAF4FDFDF9FDFDF9FFFDFAFFFEFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFDFDF9FDFEFAFDF9F1FEEBD6F9E0BAE7E2ADEDEDBBF8F8D2 FEFAECFFFBFAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFDF8FAF7EAFEEACFF6E3B9EAE3B0EDEEC9FBFBF2FDFDF9FDFDF9 FFFDFAFFFEFBFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFEFCFFFDFB FEFDFAFDFDF5FEFCE6F8F6C8E7E698F0E0AFFDE0D5FBF0E8FBFAF3FEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2F6F6F6FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFCFEF8ECFBDDB6F1BF7CE7AB55F0BE7BFCDFBCFCF1E1F3F2EFE2E0DF EEEDECFEFEFBFEFFFAFDF4EEFCE0D4F0BF92E7AB5CF1BE7CFBDBB4FEF3EBFFFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E4D583DECF7CE1D27FE5D682E6D782EEDF8AE4D67FE5D77FE3D57DDCCE75DBCD74E3D57AD9CB73 DECF79E0D17FDECE7FE2D385E3D486D5C677AD9E4CB6A753C9BB66DFD382DED588DCD386D8CF81 DCD484E7DE8FE8DF90DBD283DCD483E3DB8ADFD785E6DC8BE3D87EE0D379E3D67CE9DE84E9DE85 E3D87FEFE68BEEE68BEBE489EAE388ECE58AF0E98EECE68AE7E086EBE48CF2EA96EFE796EAE291 EBE293E5DC8DE8E08FE6DE8CE2DA87E4DC83EAE186EEE48BEBE18BE9DE8CEBE090ECE194E6DA8D E6DA8DEFE495F0E595EDE291F0E691F0E68FF3E994F2E796EDE292F3E899E3D889E2D787ECE190 E6DB89EDE38EEEE48DEBE18CE2D883E8DE89EAE08BEFE590E4DA85E6DC87F0E691EEE490EFE591 EEE490E9DE8DEFE398EFE398EDE293EDE291E9DF8AEFE58FEFE48DEDE38DE9DE88E6DC85E7DD89 F0E595EFE496F7EC9EEBDF93E4D88CF4E89EF3E79FE9DD95F3E7A0F5E8A2F3E6A0EADC98CFC481 E8DD9AF0E69FEEE49CF3EA9DE3DA8BF2EA99F2EA99F7EE9DEFE697F2E99CEAE193EDE496E6DD8E E7DE8FF0E797F2EA99F0E897EFE798EDE497EEE59BEAE099F0E6A1F8EDA7F7EBA0F4E89DEFE399 EEE298EFE399EBDF95F1E59BEFE399F2E69CEDE197EBDF95F0E49CEEE19CF4E8A1F7EBA4F5E9A1 F9EDA4F5E9A0F0E49BEBDE93EFE398F6EA9FF1E697F1E78DEDE689E1DA8BF6ECBDFEF7C5D4D0A3 211A0F201D005D5C26898651D3D38CAFA973160800D7CA9EF1E9A0E7DF81D2C867A8A046C4BC72 C8BE8445400B5B5A23CFD094F3F6ABF4F5A6EAE6AE3A3218130C02A3A14BE1DE8FDAD49A574C23 ACA65AE5DF918077400A0301979358E8E295D8D180DCD27E786D12D2C96AF5E9AB9D8F720B0200 BBBB78E9EC8AF0E790FDF2B3AEA26B827936E5DD95E1DB8CE3DF8FE4DCAF3C3220463F1BD3D099 D3CF7BCFC860EEE38DA79A57A2945DF2E3AADED18B9C923DD5CD6DD5CD6FE1D780E4D98FD0C99B 28240F151302B8B89B9CA1804F552D2427004E521D6565307E7949797145736B3D8281449C9B58 CCCB87C9C680D0CC82BEB96EE3DC8EE9E093ECE192F3E799EDE093F1E497F0E297F2E596E6D988 E6D684F0E08BF4E490F1E18DEEDC89EEDC8AEFDE8CEDDB8BEAD987F0E18DF0E18CEADC84E8DA81 E2D47AE1D478E4D77EE1D47BEADB86F7E994EADD89E3DD86DFDB83D9D37CD7D178D6CF77CDC36C D8CC75D8CC74D5C76ED7C96FD8C96FD1C572C7BD7DDFD6A58F87650300002D291B34321E5C5C3D 484A1D3B3C064D4D0D62601B645C21726531675C264E440A443C00504A1075712ED4D286DDDD92 CACA7EC0C075767629F9F19BFEF398F6E890E0D47EEEE28FF2E797F9F0A1F5ED9FF2EB9DF2EC9E F6F0A3FAF4A6FBF3A8FAF2A5F7F0A2F4ED9DF4ED9DF5EE9EF7F0A2FBF3AAFAF2AAFBF2ADFAF1B0 F8EFABFDF6ADFAF2A9FCF4A9F9F1A7FAF3A6FCF5A8FAF2A9FFF9B1F9F0ACFAF1B0FFF8B8FCF3B1 FDF4AFF8EFAAF4EBA7FBF2ADFDF5ADFEF6AFFAF2AAF9F1A8F8F0A7F5EDA3FAF3A9FCF7B3F4F0B0 F4F0AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDEAEAEA9494943737373636365F605FB6B6B6CDCDCDCFCFCFD6D6D6 A0A0A04343431819184445448F8F8FD7D7D7F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAE9F2F1C7F5ECC3FFEFDCFFF8F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF6F5E5B2E8CC6A D6B93DDCCD70EBEABFF8FAEEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFFF3E9FBE7D1F2DFC0F3E8D2FDFCFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F0 FAF0D6F2ECBEEFEFC0F8F9E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFCF8F4E9CDE9D197DCB85DE1C375EDDBABF9F4E4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4DCE2E2A8E9E9BCFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFF3F3F9DEC5E2AE3DEBC171 FCE6D9FFFBFFF7F6F6E7E7E7E6E6E6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDED E3E3E3F2F1F1FFFCF9FFF0E2EFCB81E1B039F2DD9EFFFCECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6D9D9D98282823333333232325D5D5DB7B7B7CECECECFCFCFD6D6D69B9B9B 4040401F1F1F515151979797D9D9D9F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC F3F4DCF2EDC9FAECC5F8ECC5EDEBC4EBEBC3EFEBC7FBECD3FFF4E8FFFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F9FAE1EFEFCBEAEBC2EEE9C1F7E0B9FBDDB6F0E9C3F5F5D8 FEFFEEFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF3E8FAEDD6F0ECCBEBECC5EBEBC4ECEBC3 EFEBC7FBEBD4FFF4E1FFFEEEFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFF9E7 FEEFDAF4EBCDF0EBC5F8EBC4FBECC0EFECB7F5EDCFFEF0EEFFFAFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E0E0E0EAEAEAFCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFFF5EBF9DAB5F0BD78ECB156ECB960ECCD88EDDBB5 EFDED9F7F0EAFDFFEAF3F6CAEDDC9CEBBD72EBAE5FEFBB76F8D9B2FFF4EAFFFDFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEBDC8ADDCE7DDCCD7BE8D986ECDD89EDDE8AE2D37FE7D982E1D37DE0D17BEEE087DDCE76 C1B25CD8C874E8D983E4D481E9DA85D5C5709F903A7A6B128F8025B8AA4FDDD07DE3D989E4DA8A D0C677CCC270E2D887EAE08FE7DE8BE7DE8AE8DF8BE9E08CF0E690E5DB80E5DA7FE9DE87F3E795 EADF8DE8DC8BF3E992EFE68BF5ED91F0E78BF0E88DF0E88EE3DA81E6DD84E9E08AF0E694F1E797 EDE295EEE396EDE295F0E696EEE493E7DD8CE3DA82ECE388F3E990F0E68FF2E795EDE292ECE192 EDE292E9DE90EDE293F0E594EADF8DE9E08BE7DE88E8E08BE4DB88DDD483E4DB8BDED586EAE091 E0D788E5DB8DEFE597F1E695EEE390E8DC89EBE08CF0E693F4E998EDE292EFE696F2E899F6EEA1 F3EA9DEBE194E9DF95F5EAA5F6EAA6F7EDA5F0E69CEAE095F3E89DF4EB9DEFE597EEE496EDE495 F0E698F8EDA6F6EBA7F2E7A2EFE49CE7DD94F0E699F0E699F1E799F8F0A1EEE498E4DA8EECE296 F1E89FEDE29CEDE29BF5ECA2F8EFA3ECE397F6EDA0F0E79BF3E99EF6ECA2F4EBA2EAE195EBE091 E4DA8AE7DD8DF2E898F6EC9DF3E99AECE195F2E79AF3E89EEFE49CF3E8A1F4E89EF2E799F3E799 F3E89AF0E597EBDF94EFE398F4E89DF1E59AF2E69BEFE399ECE096E7DC97F1E6A1F7ECA8EFE49E F1E6A1F2E7A0E7DD95EFE49CEBE097EDE299E8DE94E7DB8FEEE390E8DE89E4DC8DF7EDB1F1E9AE FCF7C1AFA7851510011510003A3512AFAB868B82671B0A00DDD09FE9E394EAE685CAC66E969147 CAC4875A541B5E5823E9E5A7FAF7B6E6E598D1D080CCC986615C2B0602005C5A20DEDCA2E9E4B6 68613BA49F65FAF2B679713D090401A9A76BEEEA9AE2DB84E2D7837F7526E2DA8CFEF3C95C4E3B 2A2011DAD28BD5CC7AEAE08FF1E7A96D6223B6AF5FDBD585D3CB82F8F1B5988D650E0500A29C62 DBD697D9D388CDC670D0C67A766C26D5CC89E7DD9A9E964CC9C273DBD483D2CC80DDD791D6CE93 443F2009050167654F5050382C2E11464A274245186265336E6E3969662F746F388580459A9950 C1BF72CAC579CFCA7BE6DF8FE2D889E3D788ECE090E8DC8BECE190F2E696EADF8AF2E58AF2E58B ECDF86EADB86E6D783E5D886E2D483E8DB8AF2E594EEE292EBE08FECE089E9DE80EADD83EBDF88 E4D883DDCF7DDBCD7CDACF7DDFD380E4D782EEE38BE3D77FE3D97EE8DF83E6DD85E0D785D9CE80 CCC075DCCF84E2D687D7CC78C7BC62DFD475D0C76ED1C981E5DEA7B2AB86211A0E2A23190F0C00 35351C7A7B538B8E56AAAD68B2B56AA39E57A69A59B5A967C5BC75CCC37CDCD489E8E195F0E89D C3BD70C7C0739D984AA49F50F4ED9DF6EA9BF3E89AE5D98CF1E79AF8EEA3FAF0A6F3EAA0F0E69D F2E9A0F6EEA4F8F0A6F6EEA4F9F1A6FAF3A5F6EF9FF3EC9CF3EC9CF8F1A4FBF3AAFFF7B2FFFAB9 FFF6BAFCF2B3FEF5B2FCF4B0FBF3ADF9F0AAFAF2A8F9F1A8F8F0A7FCF4ABF7EEA7F6EEA6FDF4AD FEF7B2FFF6B2FAF1AFF7EEACF9F0AEFAF1AFFAF1AEFCF4AFFEF7B0F3EBA2EAE298FBF3A9FDF8AF F8F3ACF6F2AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F39696963334333F403F797A79DDDDDDF8F8F8F9F9F9 FFFFFFB6B6B6414141181818616161B5B5B5FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF5FDFCE2FBEEC8FAE3BFFDF1E1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFBE6 F8ECBAE6C260DFC25EE0D384F1EAC5FEF9F2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8FBE8CCFADFC1FCE1D4FEEDECFFFDFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFDFCF5F0EDCAE9E3AFF5EED6FFFBFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF7F7EED9E6CC89DFBD65E0BD63EEDCACFAF4E5 FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFDFBFCF4F1F1D5E7E7B6EEEECAFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFBEBE2F3D4B0DEB344 E8CD7FFBF4E5FFFFFFFBFBFBF4F4F4F3F3F3FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F6F6F6F2F2F2F9F9F9FFFFFFFFFDFAEED598E0B443EEDA8EFAF8D7FEFFF6FFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6EAEAEAD7D7D7D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D4D4D4DFDFDFF5F5F5 FCFCFCFFFFFFFFFFFFFFFFFFF0F0F08D8D8D3131313C3C3C797979DFDFDFF8F8F8F9F9F9FEFEFE B0B0B03D3D3D222222727272C0C0C0FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFEFCFEFDF3FDFCE3F4F3CAE5E5AFE3E3AAE8E2AEF9DDBAFCE8D0FAF5E6F8F9EDF9F9EC F9F9ECF9F9ECF9F9ECF9F9ECF9F9E9FEF9DEF6F2C9E8E7B2E1E2A8E7E3ADF4E2BAFFE7CFFDF8F0 FEFEFAFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFFDFCFCFCF6F2F2D8E5E5B1 E3E3A9E9E3AEFAE3BBFCECC6F9F7D1F9F9E1F9F9EAF9F9ECF9F9ECF9F9ECF9F9EBFAF9E8FDF9DC FFF1CFFDE6C2F0E2B3E9E3AFF5E4BCFFEAD2FDF9F0FEFDF9FFFDFDFFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3D1D1D1E1E1E1FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFCF0E2F6D9B5E8B966DEA937DDB149 E4BF75F3CCADF8DCBBF5E8B4E5DF8CDFC85FE3B343EFBD6AFBDDB8FFF1E3FFFEFDFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE4D584E1D281E4D584EADB88E7D885E8D986E0D17EE6D784E5D681E0D17CE6D782 E1D17CCEBE69DBCB76E7D781E3D37CE5D57EE4D47ACEBF63C6B75ACEBF60E5D679E6D982DCD181 E2D785D8CD7BD9CE7CE0D681E4DA85E7DD88E6DC85E4DA83E6DC85EBE189DBD273E5DC81E9DE8B F6EA9FF1E59CEFE395EEE48EEBE186F6ED8EF0E78AF2E88EF1E78EECE28AF0E68FEBE18CE9DE8D ECE192EBDF93EFE397ECE094ECE192EEE393EEE393E9DE89EBE287F1E78EEBE18BF1E792EBE090 EDE292F1E696ECE191EADF8EEFE492ECE28CE2DA85DFD782E7DF8AEDE592E5DD8BE2DA89E5DC8D E7DE90D1C87AE3DA8FEFE69BF4EB9FEADD8EE7DB89E5D987EFE494F7EC9DEEE394F4EB9FF4ECA3 F9F1A8F5EDA5EFE79FF0E7A3F3E8A8F0E5A5F3E8A8EEE3A2EBE09EF2E8A3F2E8A1EBE19AEBE199 EAE098F0E69EEFE5A3F0E4A8EDE2A3F1E7A4E8DE96E4DC8DE9E190EDE592F0E895EFE794EEE695 F2E999EFE699E8DF95EAE196F3EA9FF2E99EE7DE93F7ECA5F1E7A0F1E7A0F5EBA3F4EAA3F2E99E F2E697F1E696F5EA9AFAEFA0F8ED9EF3E799F0E498F5E99DF6EA9EF3E79DF1E59BF0E497F5EA9A F4E999F5EA9BF3E899EDE293F6EA9DF5E99DF1E599F1E59AF2E69CEDE198EEE49EEBE09EEADF9D FEF3B1F2E7A4ECE29DE6DC95F0E69FEDE39CEDE39BE2D890E3DA8FF1E297EEE295EFE396FBF2A9 EBE19CEFE7A9F7F0BAC6BF92413B1B080100342D1A1409001E0D00C6BD86EBE996F1F095B5B66B AAA86E767341312C04C0BB77F5EFA5C6BE76B9B365AFAC5BD6D28AA3A1622524000A08008B8963 F9F7D0A3A079514A1EFFFFDB8179480D0901B1AF74FBF7A8F1E78CE4D9868C823CEFE8A7ECE2C9 35281850451EEFDF97DAC984E5DA91D4C98A4B4000CDC771DFD981E6DD99E9DEB533270150481C D3CF85CCC882CDC685EAE1A0BFB67290883FECE499B6B062A09C4EE5E198C2BD7BDDD89EF2ECB8 7873450A04001E1A062624103F3F2745462B595D3A64663E4E50206D6E367171357D7B3989863F C1BE71CFCB7BD5D07FE5DC8DE8DC8DE7DA8BEADA8CD1C473D1C573E2D785F6EE9BF1E790EDE185 EADF85E9DC88F0E595F7EBA1FCF0ABF8EDABF5ECA8E6DE9AE1DA96F6F2AAF0E998ECE28BE8DE8A E8DD8EEBDE93DED185E2D68AE2D68AEEE392EAE08BE5DB81E3DA7DE4D97DE6D980DBCF7BD4C67C D9CB86DBCD8CD2C483E4D993D8CF80D9D17ADFD97CDDD87DCFCA77D8D291D3CDA0453F2E0F0900 3632251B1A032B2D0553581E858B43D4D989FEFCA9F1E797E9DE8EE3D888F4E999E3D889E8DC8D FEF8A9D3C879AA9E51584C08EBDF93F1E79FF6ECA4F8EEA7F1E7A0F0E69EF7EDA5F6ECA5F2E8A0 F1E79FF4EAA3F8EEA6F7EDA5F4EDA4F9F1A6F8F0A5F4ED9EF3EC9CF4EDA0FBF3A9F7EFA7FAF1AF FFF6B8FFF5BAFCF2B6FCF2B4FCF2B4FBF2B1FAF1AEFAF1ACF8F0A8F9F1A8FAF2A7F7F0A3F7F0A2 FBF4A5FFF6AFFFF7B6FFF8B7FDF4B5FBF1B3F9EFAFFEF5B4FAF1ADFDF4ADF6EEA5ECE498F6EFA1 FFFAAEFDF7ABFCF6AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F38E8E8E2626263C3D3C808080E4E4E4FFFFFF FFFFFFF9F9F9ADADAD3E3E3E2424247E7E7EC8C8C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEF2F5EFCCECE2B0F5F0D7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFF8FDFAE8F6E7C0E9CF84E1BF59EFD08EFDE9D0FFF8F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFBF3EFE6BBEFE3B8FAEEE0FFF9FB FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFDFCF9EED5F5DFB8FAE3CFFFEDEDFFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF5F5EBD0E9CC84DEB244E1BE63 ECD9A6F9F3E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFBF6EEEECBECEBC3F1F1D4F9F9ECFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF7F1E9CBE3D596 D5C65DE4DB97FAF9ECFFFFFFF5F5F5E0E0E0DEDEDEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDE7E7E7DADADAEEEEEEFFFFFFFFFFFEEFDBA9DFBB5AE1D17EEDEBBCF9FAECFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8DEDEDEB0B0B0696969595959585858595959 5959595959595959595959595959595959595959595959595959595959595757575D5D5D878787 D9D9D9F4F4F4FFFFFFFFFFFFFFFFFFF2F2F28585852727274444448C8C8CE8E8E8FFFFFFFEFEFE F8F8F8A7A7A73939392B2B2B888888CFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFF6FAFAE9F4F4DCF2F2D8F5EED7FDE0D1F6E1C6EBE6BBE7E8B8 E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9EBE8BAF9E8C0FAEBCAF5F0D5F2F3D9F4F2DAFAF3E1FFF6EC FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF0 F3F3DCF2F2D8F5F2D7FDF3D0F5EEC0EAE9B0E7E8B3E8E8B8E8E8B9E8E8B9E8E8B9E8E8B9EBE8BA F9E8C1FFECC7FEF1CDF8F3D4F5F2DAFBF3E2FFF6EDFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E9E9E9F0F0F0 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F2EFEADFD2E1CEA1DCC279 DBBA68DFB362E7AE65E8B266E6B966DEC06BE3C977EED68DF9E5B7FEF3E5FFFBF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDACB7AE0D180EADB8AEADB89ECDD8AEADB88E3D481E0D17EE7D885E6D782 DECF7BE4D582E4D583DECF7BE0D27BE3D57DE3D57EE7D980ECDE85EEE186E5D77BDFD278E2D680 DCD181D8CD7AD8CD7BE9DE8BE4DA85E4DA85E6DC87E7DD86E4DA83E2D881E3D981E4DB7EE7DD82 E2D784EDE195EBDF95EFE395ECE28CEBE287F6ED8EF1E88BF2E88EEDE38AF4EB91F8EE96EEE48E E8DD8CEFE495F2E798EEE394F0E596EFE494EDE290EFE492EDE38CEBE287EDE38AEAE089EFE58F EEE393E9DE8EEDE292ECE191E9DE8DEDE290EEE48FE4DC87E1D984E6DE89EFE794EFE794EBE392 E9E091EBE294EBE295F1E89BE0D78BD8CF83E7D98AE8DC8ADDD17FE8DD8DF3E898E5DA8BEAE194 F1E99DEBE398E9E198EDE59DEEE59FF0E5A2E9DE9BEDE29FEFE5A0EFE59FF2E8A1F4EAA2EFE69C ECE398E7DE93ECE398F0E5A1F0E5A7EBE09EF0E59FEBE296EBE394E4DC8BE4DC89E5DD8CE7DF8E EAE193EEE698EFE69CEADF98E9DF98F0E69EF2E8A0EEE49CF3E9A1F5EBA3F7EDA5F6EDA3F4EBA1 F3EA9FEADE8FF3E898FAEFA0F9EE9FF3E899F0E596F2E69AF0E498F1E59AF3E79DF0E49AEFE396 F9EE9EF7EC9CF8ED9DF5EA9BF2E798F6EA9DF1E599EEE296EEE298EEE298EFE39AEFE5A0FDF4B2 EDE29FE6DB96F2E8A3EDE39EF0E69FF8EEA6F3E9A1F4EAA2E9DF97E9E098F3E59DEFE29AEEE299 F7EDA5F0E89FF5EDA8F0EBAAFBF6BBE3E0A98E8B572E2A151F170B1E1200C3BD87EDEC9EEEF19B 9B9A5885824F29250389844BEEE9A6B9B365BFB76CE0D98AEAE493BFBB73D0CD8EAAA974171406 0100007D7B59C1BE93403C0FC7C18FA5A06E090700908E5AE7E197E1D983D5CA7D867C3AFFFBB9 C4BB9F150B00837B35FCF0A6E8D891E8DE94B9AD6E4F440CEAE491DFDB84E6DF9CA69A6E090000 7B7439C6C279E1DC99E2DB9CCBC184827935CAC37AE2DC908F8A3BD3D082EEEAA2CECB8BE4DEAA AAA2771B14060B05001C18031F1D0749492F47492A616541686A415C602D9EA0668D8D4EB0AE6A B9B670B7B36AB0AA62CEC880E9DF95EBDD96F7E9A1F2E298E7D88FECDF94E8DD8FEBE194EBE298 F0E6A3E3DA9AE4DA9EE6DDA6CABF8EA99F72988E648D855A8680559D976CB3AD7FBFB681D4C990 F0E6A9F4EAA7DFD58EE5DB8DF3EB98E5DE87ECE28BECE28BDBD178E7DD83EBDF87EDE28AE1D582 D6C97CDACD85E0D38EE6DC96EBE298D0C878CDC772B2AC54BFBB5FBBB75EB6B267D2CE96605C3A 0A05004846322A2A103F41197E834C757A36717528999747B4AC5DC8BF70D1C879DAD283CBC274 D6CD80E3DA8DCEC578544B01A69D4FFFF6ACF1E99DFAF1A6FFF6ACFAF0A7F2E99FF1E89DFAF0A8 F8EEA4F7EEA3F7EEA5F6ECA2F3E9A0ECE49CF4ECA2FAF2A7FAF3A5F8F1A3F9F2A4FEF6ACF7EFA6 F6EDABFCF3B4FEF4B8FCF2B6F9EFB0F8EEAFF7EEADF7EEABF7EEA8F5EDA5F7EFA6F9F1A6F9F1A5 F8F1A3F8F1A1F8F1A6FDF4B1FFF9B5FDF5B3F9F0AEF9F0AEFEF5B4F5ECA8F6EEA6FBF3A9F6EEA1 F6EFA0FEF8ACFBF5ABF9F3A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC8282821E1E1E444544919291E7E7E7 FEFEFEFBFBFBEAEAEA9C9C9C3939393434349D9D9DD9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF3F3DBE7E8B9EEEFCC F8F8E9FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5E0B4E9BA59EDBC61F6D29AFAEACEFDFAF2FFFEFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF2F4F4DEE8E9B5ECEDBFF9FAEA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFCFFF3E6FEE4CCF9DEC8F7E2D4FEF9F7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E3B2E6BF58 DCAF3AE1C068EFE4BBFAFCF4FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFAFBFCF2EBEBE1B0EDE6BAFAF8ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1E9E1AC D9CD72D8D280E8E6B6FBFBF2FFFFFFF2F2F2D9D9D9D7D7D7F9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCE3E3E3D3D3D3EAEAEAFFFFFFFFFFFEEFE3B9DDC674D8C870E4DCA1F6F4E1FFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6D1D1D19292923434341E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1C1C1C232323 5A5A5AC7C7C7EEEEEEFEFEFEFFFFFFFFFFFFEAEAEA787878212121525252A4A4A4ECECECFFFFFF FAFAFAE8E8E8979797353535393939A0A0A0DBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFFEBEDF4E5D0E7E3B3 E3E3AAE3E3ACE3E3ACE3E3ACE3E3ABE3E3ACE7E3AFF7E3BEFFEDDAFFFBF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFECF4F4CEE6E6B2E3E3ABE3E3ACE3E3ACE3E3ACE3E3ABE4E3AC E8E3B0F8E3C0FEEED1FFFCE3FFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF0F0F0 F5F5F5FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EFEFF0E6E7E6E4E6DB E5E1C6E5D2A5E4C082E4B060E3AC58E4AF5FE3BE7FEDD9ADFBF7DCFFFFF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD3C471DCCD7AEADB89E9DA87EADB88E9DA87E9DA87DDCE7BE1D280 E9DA87E4D582E4D785E0D481E2D583DBCF7BE0D37FE9DC87E6DA83E9DC86E9DE84E3D77EE6DA81 E6DB87DED383DCD17EDACF7DE8DD8BE4DA85E4DA85E5DB86E9DF88E8DE87E4DA83E7DD85EAE184 E9DF84DDD27FE5D98DE6DA8FECE091E6DC86E9E084F3EA8BEEE589F1E78EE9DF86E5DC81F1E88D EEE48CEBE18CF2E796F6EB9BEFE494F5EA9AF3E896EDE28FEBE18DECE28BEEE58AEDE38AEAE089 ECE28DEDE292E8DD8DEBE090ECE191E9DE8CECE18FEDE38EEEE592E9E18EE7DF8BECE493F3EB99 F4EC9AEAE192E7DE8FF0E798EAE194E3DA8DF0E799E3D785EFE390E1D583DFD483EDE293E9DE8F E4DB8EF1E99EEAE297E8E097EDE59CEBE39BEDE39DE7DD96EAE09AF4EAA2F7EDA5F6EDA3F5ECA0 F2E99DF0E79BEBE293EDE496F2E8A0F2E8A4E6DC96E9DF96E6DD91ECE394EEE596EBE292E8DF90 E8DF92EBE296EFE69CE2D892EBE19BEFE59EECE29BECE29AF3E9A1EFE69CF4EBA1F5ECA0F3EA9D F1E89BF1E89AE9DE8EF3E898F8ED9DF8ED9EF6EB9CF6EB9CF2E69AECE094F0E498F5E99FF2E69C EEE295F8ED9DF9EE9EF8ED9EF6EB9CF4E99AF6EA9DEFE397EFE397F0E49AEDE197F2E69DDFD58E 938945DDD38EFCFAB6FDF3ACF5EBA5F3E9A3F8EEA6F3E9A1F8EFA4F1E79DF2E8A0F6E9A5F0E39E ECE099EEE59CF8EFA5FBF4A7F3EFA5EDEAA0E1DF95ECEBA4DDDD96A4A06E130B009B9862E5E69D EDF0A3A5A66C3A3816302C0AF7F1BBC3BF79BFBA69D3CC7AEEE796DFD789C6BF77C7C182F0EBB5 B6B28674724A040300302D124745154D4A278F8C57050500787746EDE9A5E5DD90DDD48C888242 F3F0AFA6A181070101A8A259F9EEA1EFE298F7EEA59A8F54756B2DFCF5A8DDD885DDD594403622 494021BEB87E9A964FBEBA7BEBE4A98A8244A9A05EE6DF95888436C0BD6BD4D184C7C37EE0DBA1 948F6228210910080127210A1916013C3A20424324595B3A3E431C595C307E824D87894CB2B371 B7B66EBBB96FC3BE7AC5BF7ADAD38EE6DC98E6D895E8D995F7E5A1FEEFA9EADB95D7CA83DAD088 CAC07FB3AA75857E4D5951234B451A433D17342D0A251F00201A002822033C3917342F10191206 4338186B61389B915CE6DE9DF6EEA3E9E38FDCD67DE5DD82FDF59AE8DF86E5DB83E7DC87EFE390 E9DE8DDDD282D9CE80D5CC7ED8CF83C6BF72C8C172C5BE6DCBC673CDC872CDCB6FC6C573D3D292 6260330C080018160820200734350F888957AFB172B4B66CCDCC7EC2BC6DB0A85CCCC478D9D386 DCD488E8E095F4EEA1625A138F873DFFFEB8F9F0A5F4EA9EF9F0A3FCF3A6F6EDA0F0E79AEEE598 FAF1A4FBF2A5FBF2A6F9F0A4F6EDA0F3EA9DFCF5AAF9F1A7F4ECA1EFE89AE9E296E8E095FBF3A9 FDF5ADFCF3B0F9EFB0FBF1B4FEF4B6FBF1B1F7EEADF5ECA9F5EBA7F0E7A2F1E9A0F6EEA5F8F0A5 FAF2A6F8F1A3F5EE9FF5EEA3FAF2ABFCF3ADF9F0ABF7EEAAFBF2AFF9F0ABF5ECA7F7F0A7FAF2A8 F8F1A2FAF3A4FAF4AAF7F0A8F7F0A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7DADADA737373252525686868C0C0C0 F1F1F1FFFFFFF9F9F9DADADA8B8B8B353535454545C1C1C1ECECECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF7F7E7 EBEBC1E7E6B3FAF9EDFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEEDBF9D5A3EABA5AE6B950EED188F8EBC9FEFBF4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF0F0D2E5E5ABF1F1BDFBFBDC FEFEF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFDFDFAF6E8ECE7BEE7E3B2FAF9EEFEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAE5 F8ECB7E7C15ADEB848E0D182EBECC6FBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFEFEF0EFFDE0DAFBDBBCFCE7CBFEF8EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6E8 EACF84E0B346F2D1AAFBE9DEFEFBFAFFFFFFFCFCFCF7F7F7F7F7F7FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF9F9F9F6F6F6FBFBFBFFFFFFFFFFFEEFEDCBDED78ED9C166E5CE8AF6EFD8 FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E3E3E3BFBFBF8C8C8C808080 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E 8282829D9D9DD4D4D4EFEFEFFEFEFEFFFFFFF6F6F6D7D7D76B6B6B2727276E6E6EC6C6C6F3F3F3 FFFFFFF8F8F8D8D8D88787873232324C4C4CC4C4C4EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBFBFDFAF6 FBFAF1FAFAF0FAFAF0FAFAF0FAFAF0FAFAF0FAFAF0FBFAF1FEFAF3FFFCF8FFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDFDF6FAFAF1FAFAF0FAFAF0FAFAF0FAFAF0FAFAF0 FAFAF0FBFAF1FEFAF4FFFCF7FFFEFAFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1 CDCDCDDEDEDEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE6E6E6EAEAEAF6F6F6 FBFBF8FAF9F4FAF7EEFAF3E7FAF1E1FAF0E0FAF1E1FAF3E7FCF8EEFEFDF7FFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6C774DECF7CE9DA87E4D582DBCC79DFD07DEBDC89E8D986 E7D885E7D885E3D584E6D98ADCD07EE4D886DFD381E2D684EADE8BE2D683E6DA86E5D985E0D47F E8DC88E2D784DBD080EADF8CEADF8DE5DA88DDD37EE1D782DFD57FE3D982E6DC85E0D67FE8DE86 E0D77AE7DE82E6DB88F1E599EADF92EADF8DDCD27AE3DA7DEBE283EAE185F3E991EBE188E7DE82 F4EB90F5EC91F3E890F5EB96F5EA98F7EC9AF0E593E8DE89E7DD87ECE28BF2E88EF2E98EECE289 E7DD86E3D984E1D687E8DD8DEFE494EDE292EADF8EEBE08EE7DD88E7DF8BEDE592EFE794EFE796 EFE796ECE493E6DD8EE4DB8CF3EA9BE6DD90E9E093F6ED9EE2D683EADE8BE6DA88E3D986EFE493 F7EC9DE9E093F1E99EF0E89DEDE59CEFE79EEEE59CF0E79CECE397EBE297F4EBA0F8EFA4F5EC9E EFE698EDE497F2E99BF1E899F1E89AECE397EEE49CEDE498F3EA9DEBE294E5DC8DEEE596EBE296 EAE196EDE499F2E8A0F3E9A2ECE19FF8EDABFBF0ACEEE49FEBE19AF3E9A2F6EDA2EDE498E5DC8D E6DD8EEFE697F5ED9CEEE293EEE393F1E696F4E99AF7EC9DF7EC9DF5E99DF0E498F2E69BF4E89F EFE398E9DD90F4E999F8ED9DF8ED9DF2E798F0E596F8EC9FF3E79BF6EA9EF8ECA2F1E59BF6EAA1 E6DC94877D38D5CB85F0E69EF1E7A0F7EDA5F0E69EF2E8A0ECE399F4EBA0EFE69BF0E69EF6E9A5 F6E9A5F9ECA6EFE69DF3EC9FE8E191F3EE9BDCD986F8F6A2E7E592E5E491D6D597241F1544430F D2D68FF4F7B2B6B686110D00817D5CF6F5BD969147EAE68FDBD37EE4DA8AFDF6ABA19750DAD292 DBD49EEFECBDFFFFDAC9C8993D3A0C656331242204353305070702484728EFEAACE0D993DDD493 918B4FD3D391918E6A050100B8B666F0E997EAE196FBF3AC71672F958A53FAF3ACEDE79BCCC487 1A10039F966DD3CD94A9A661A8A4689E99617C7437E3DC9AB1AE638A8839E1DE8DCECC80DCD997 CBC79237320E0A02001E1608241F091D1A06403F216465453133123A4119898C5C83884F8C8F4E BDBE79BAB96FC8C77CB6B16DCDC685DFD894E7DC9BECDE9DDFD08DC8B674BFAF6D9F904B9B8E48 9389415E56154F4A126D673256521D464210524E204D481E3D3A10403D132F2C06201D00181501 241E091911000C06001C150057501BC0B978EDE79AF3EC9ADCD57EE7E087E1DA81E4DA84E9DE8F E8DE8EE0D585DBD080DED685DFD887D2CB7AC7C071D7D183CDC77CDBD58CC6C376D3D27CDDDB8F F2F1B26A683A0B0A001614042A2A13222103414214747537888A3EB5B468DAD48ADCD68CEDE89D DAD489E4DE94F4EEA2645E146A6424F5EFA3F7F1A5EEE89CF1EA9CF4EB9EF4EB9EF1E89BEFE699 F1E89BF3EA9DF7EEA1FAF1A4FAF1A4FBF2A4FCF3A6FDF5AAEFE79CE3DB90E4DE8FECE599F2EA9F F1E9A1FAF1ACFCF3AEF7EEACF6ECAEFAF0B1FDF4B1F7EEABF6EDA8F6EDA6F1E9A1F1E9A0F5EDA4 F6EEA3F9F1A4F8F1A3F2EB9DF8F1A5FAF2A9F9F1A8FAF2AAFDF4AFFFF6B1F6EDA8F9F1A9FBF3A9 F8F1A3F7F0A1FAF3A4FCF6ACFAF3ABFAF3ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBBDBDBD5D5D5D2626267A7A7A D8D8D8F6F6F6FFFFFFF4F4F4BABABA686868292929515151D7D7D7F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFBF4F4E9C8F0DEADFCEAD1FFF5EBFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F1FDEAD4F4D195ECC067E9C062EFCF8CFDE9E0 FFF7F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEFEEEEC2E1E1A1F2F2CB FEFEEFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF4F3F3D0ECECB8EEEEC7F6F6E3FEFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFF7FDFAE2F4E2A3E8CD72E0C562E1D080EDEBC4F7F8E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCF3EAD1EADBADF7E4C6FEF1E3FFFCF8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFD FBF6D9EACA74E1B03FF8DEC2FEF3F1FFFDFEFFFFFFF7F7F7E7E7E7E6E6E6FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE3E3E3F2F2F2FFFFFFFFFFFFF7F7DEECE7ADDFC05CE5C571 F6EBCFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2E2E2E2CCCCCC C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C6C6C6D2D2D2E9E9E9F6F6F6FFFFFFFFFFFFE9E9E9BABABA5656562929297F7F7FDADADA F7F7F7FFFFFFF4F4F4BDBDBD6B6B6B292929595959DADADAF9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7F7F7E0E0E0EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E2E2E2E9E9E9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7D782DBCC77E2D380EADB89E4D582E2D380E1D281 E7D887ECDD8CE9DA89E4D785E9DD8EEADF8FE3D888E5DA8AE8DD8DE7DC8CEFE493F5EA99F2E895 E8DD8AEDE291EADF8FD7CC7CE6DB88ECE18FE1D684E3D984E5DB86DDD37EE1D780E3D982DCD27B E8DD85ECE388EEE48CE7DC8BF1E697EFE496F4EA97EAE087EDE486F0E788EDE487F6EC95ECE28B ECE384F3EA8DF3EA8EF3E991F3E994F0E691F4EA95EBE18CE8DE89EBE18BEDE38BEEE58BEEE58A EBE188E9DF88E5DB86E3D889E7DC8CEBE090E9DE8EEDE291F3E896ECE28DE3DB89EDE594ECE493 E4DC8BE8E08FEBE392E6DE8DE1D989F0E798E7DE8FEFE697E4DC8BEDE18FE0D480E7DB87EEE391 EFE494F9EE9EF3EA9BEBE495EFE89AEEE69BEEE69DF4EBA0F5EC9EF5EC9EECE395EFE598F0E799 F2E99AF0E798E9E091F0E798F0E798E8E08FE5DC8DEAE192EAE193F2E99AEBE293E7DE92F0E79B EDE499ECE29AF1E79FF4EAA4F3E9A4F6EBAAF6EBABF4E9A7F0E5A1F0E69FF2E7A0F6EDA3EDE598 EBE293F1E998F3EB99F1E997F6EB9BF0E595EFE494F4E99BF4E99AF2E698F2E69AF2E69AF6EA9E F6EAA0F1E59BE8DC8FEEE393F6EB9BF6EB9BEFE495EBE091F5E99CF2E69AF8ECA0FCF0A5EEE298 F2E59CF4EAA2F1E7A0F3E8A1E3D992F1E69FF7EEA5F5EBA2F4EB9EEBE295F3EA9DEEE598EFE79A F8EBA4F7EAA3F9EDA4E9DF96F4ECA0E5DE8EE4DF8EF0EB98D5D27EE7E490F1EF9BCBC887514F31 0607005E642DD5DA99EEEFC6242207B4B08EC8C58CC5C174F6F299E5DE88DACF80B8AB63D3C984 E7DE9FECE5ADDAD6A2F8F6C78987556D6B3AD5D39EE7E5ACF0EEB8777751191902D3D093ECE4A4 F3E9AFA49E66BCBE7A7C7D54030200BFC06DF3EE9BDED68BF5EDA75D511CAA9F6CF3ECACEFE8A2 918B56231A00E7E0B3D5D195A7A45FAFAA738B854E868042D1CC89A7A45BDBD98DD8D689DCDA94 EDECB17A774C0E09002019091F160F2D2813221F055857385051302B2E08585E328D915E61652B A3A765C0C179C0BF73CAC87CCAC67FD4CE89E9E29BE7DD98DFD28DD0C17BCEBD77D2C37CD8CA82 E2D68DE4DA90C8C175D0CB7EE5E196DEDA8FDAD58ECCC881B7B26DA6A45FAAA6659B9856807D3A 7F7B3A6663343F3C192A26041612000401002B2506837D44DDD695E0D98FE1DB8ADFD983E1DA83 E8DF90E1D88BD7CE7ED8D17FDED783DAD580B8B360CCC778CFCA7FDBD58FD9D494DDD998DAD794 D5D295DBD9A586845D171601211F0D1D1C0A111000545426ADAE6FB2B365B9B76ADCD890D6D28A DEDA90DFDB91DDD98F87833A656127E7E69AF2EEA4EEEAA0ECE89DF2EB9DF3EA9BF3EA9BF4EB9C F5EC9DF7EE9FF5EC9DF9F0A1FAF1A2F7EE9EF7EE9FFBF2A4EDE59AECE499F1E99EF9F2A7FFF7AE FDF6ADF3EBA3F2E9A3F8EFAAFEF5B3FAF1B0F5ECAAFBF2ADF5ECA7F7EEA8FAF2AAF5EDA5F4ECA3 F5EDA4F4ECA1F6EFA2F7F0A2F3EC9EF7F0A1F5EE9FF5EEA2FEF6ADFFFAB1FBF3ABF9F1A9FBF3AB FBF3A9FAF2A5F8F1A3F5EE9FFEF8AEFBF4AEF9F2ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD9D9D9D4646462A2A2A 8A8A8AEAEAEAF9F9F9FFFFFFF0F1F09C9C9C4849482021205C5C5CE6E6E6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFBF7FEECD6FDDEB9FBDDB6FDEBD4FFFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFBF7FFECD8F6D39AE6BB57E5B759 F8D3B9FDECE3FFFEFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5FBFBDAEEEEBAE4E4AB F4F4DCFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFDE7F6F5CBE5E2A6EFEBC5 FDF9F1FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFAFFFFEAF6E8AEE7C45FDCBA4BE0D58AF0EBC8FFFCF8FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFDFAFAF1E7E9B5DADD8CF2F1D2FEFDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FEFFF2F8F2C5E9CA6DE1B548F8ECD2FFFDFBFFFFFFFFFFFFF1F1F1D5D5D5D3D3D3F8F8F8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE0E0E0CECECEE8E8E8FFFFFFFFFFFFFEFFF0FAF5CBE6C25C E5BF60F5E6C1FFFFFFFFFFFEFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFBFBFBFDFDFDFEFEFEFFFFFFFFFFFFDBDBDB9C9C9C4141412D2D2D8F8F8F ECECECFAFAFAFFFFFFF0F0F0A2A2A2525252242424646464E9E9E9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCF5F5F5F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6E5E5E5 EBEBEBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDCF77D4C66EDDCE79E6D783DFD07DE1D281 E4D584E7D787E8D88AECDC8EEBDE8FE3D787E2D787E0D585E1D686DDD282EBE090DFD485D8CD7E DED384DDD181D7CC7CDED383E0D585E6DB89DCD17FCBC06EE2D882E9DF8AE7DD88E9DF88E8DE87 DFD57ED7CD76EFE68CF0E68EE7DC8BE8DD8EEFE495EEE490EAE086F1E88AEEE586ECE286EEE48E E9DF8AEDE486EBE284EAE184EEE48BF4EA94F5EB96EEE48FF3E994F3E993EEE48DE8DE85EBE187 F2E98EEBE188E9DF88E6DC87ECE191F3E898EADF8FECE191EADF8EEDE290E8DE8AE0D786ECE394 EFE797E9E090EBE292EEE695EDE594E1D988E6DE8DE3DB8AEAE292EBE391EEE18DF0E48EE7DB86 E7DD88F0E592F0E595EEE596E8E092ECE598EBE298E8E096EFE799F3EA9AF2EA9AEAE191EDE594 F2EA99F3EA9AEFE796EDE495F2E99AF2E99AEBE292ECE493E7DF8CE5DD8CE4DB8CEBE293EDE498 F0E79EF2E8A0ECE29BF5EBA4F2E8A1EAE09BF6EBACEFE4A4E8DD9CE9DE9CECE29CEDE39BF8EEA5 F2E99CF0E798F0E897F0E896F7EF9CF0E495F0E595F1E696F6EB9CF3E899EBE092F5E89DF9EDA1 F3E79BF4E89FF7EBA1EFE396E6DB8BF0E595FCF1A1F3E899EDE292EFE497F2E69AF4E89CEFE399 ECE096EEE298F0E69EF4EAA3F3E9A0EDE49AEDE399F5ECA0F1E89BF7EEA1F2E99BF2E99AF3EA9C EDE496F0E698F6EC9FF9F0A3EEE59BF1E89DFBF3AAFAF2A8F3ECA2DFD78DE3DC92ECE69CE7E2A6 D5D2A33F3F09040800676930F5F4CE524E379F9A7A9E9C60E4E092CECA73ADA554CEC179DACC8A F0E3A4FAEFB3EAE4AAF4F0BAE7E4AE1D1A009C99619C9A60A8A467DAD89DDBDBB01C1B025B5620 CDC586FFF9C2C2BC86CDD08B7D8054020300CDD17BEEEC98E5DE94F8F2AB6F6532B3A97AEFE7AD DED996534C1C433C20D9D3A2BDBA7CE3E29ECECB945F5B24BAB6779A97549B9B53E7E7A0E4E3A0 E3E3A68C8A58201C011712011D150E241C192B26134744265251323A3B194D4F28373D11898D5A 686D319FA260D7D98FD2D184CFCE7FD2CF83DCD78BEBE59AE8DF93E2D68BE8D98FEEDE92F9EC9F EDE092E6DB8CECE494EBE390E8E189E9E289EAE38AEEE88FEEE48DE9DF89F4EE97E6DD88E0D884 DED783DAD17ED2D088B7BA7B7D7C473C390F1F1B000E0800130B015C5426E6DFA7DED78FE8E391 DBD67FE9E294EEE79BDDD686DBD483D8D381DAD582C1BD6CD4D085CFCB86DFDB9CEDE9AEE5DFAB D9D4A99F9A73ADA987949276171404110F051B170C26210F262409838242B4B35FE0DE8EE5E29A D3CF88B7B36C76722A3F3B018D893FE3DF95FFFDB1EDEA9DF4F1A4F0ECA0F2EC9EF3EA9BEFE697 EAE192ECE394F2E99AF9F0A1F5EC9DF5EC9DF8EFA0F7EE9FF1E899EFE79CF8F0A6FFF9B0FFFBB2 FCF4ACF7EFA6FAF1ACEFE6A1F6EDA8FFF7B3FAF0ACFDF7B0F9F1A8F7EFA7FAF2A9FAF2A9FBF3AA FCF4AAF8F0A5FAF2A7FCF4A9F7EFA3F2EB9DF3EC9CF7F0A0F5EEA0F6EEA3FCF5ACF8F0A8F5EDA5 F9F1A9FAF2A7FAF2A7FCF5A6F6EFA0FBF5ABF8F0A9F6EFA8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D1D1828382393A39 3939399F9F9FFBFBFBFDFDFDFFFFFFEFF0EF9899984B4B4B2D2D2D6A696AE9E9E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFDFFF8F0FAEED7EADEA6F1EABCFEFDE4FFFFF8FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFBF8F7EBCEE5D38A DCBD59E7B95EF4DDA5FFFFEDFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAECE9E9B4ECECBF F4F4DCFBFBF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF7FCF6E2F5DFB3 F9DFB9FFE8D1FFF7F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9E1F6E7ADE9CD6FDFBB4EEFD08EFFECDBFFFBF8FFFFFF FFFFFFFFFFFFFFFFFFFEFFFFF8F9EBE9EABDEAEBB2F0F2BBFAFBE9FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCF5F7DFE7E4A7E0C76EE2BE64F8EFDAFFFEFDFFFFFFFFFFFFFAFAFAF0F0F0F0F0F0FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3EDEDEDF6F6F6FFFFFFFFFFFFFFFFFBFCF7E3 E7C97BE4C067F0DAA2FBF3DDFEFDF9FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D38B8B8B3E3E3E3F3F3F A5A5A5FDFDFDFDFDFDFFFFFFEDEDED9191914747472D2D2D727272ECECECFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF4F4F4D5D5D5E3E3E3FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1E8E8E8 F0F0F0F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D77FDDCF77E1D27DEBDC88E9DA87 E8D989E8D989E6D786E5D588EBDB8DEEDE90E2D686E5DA8AE5D989DED382D9CE7EE2D787DFD485 E2D687E7DC8DE4D889E1D687D7CC7DD5CA7AE6DB89E9DE8CD0C573C3B964DAD07BE2D883E6DC85 E5DB84E2D881E1D780E8DE85EBE08BE9DE8EECE192F1E596ECE28CEBE286F0E886F0E788F4EB8F F6EC98F1E792ECE386EDE487EFE68BF1E78FF4EA94F5EB97F2E893F0E591EEE48FEDE38CEAE089 EAE187F7EE93ECE289E3D982EDE38EEADF8FEBE090E5DA8AEADF8FEADF8EEFE592EFE591EAE190 E6DD8EE5DC8DE9E091E9E090E7DF8EE4DC8BE1D988EAE291E1D988E4DC8AE9E18EE5D984EADE88 EADE88E9DF8AEDE28FEEE391EFE797F2EA9CF2EB9DE6DE93E1D98EE7E091E8DF8FE8E08FE6DE8D EFE796F6ED9DF3EB9AF0E897EEE596EFE697EEE596ECE394F0E896E7DF8CE9E18EE8DF90EAE194 EBE297EDE39BF4EAA2EFE59EF3E9A2EDE39BEAE09AFBF0AEF6EBABF3E8A6F2E9A3F3E9A2F3E9A1 F0E89CEFE69AF2E99AEFE697EBE392EFE796F5EA9AF3E898F0E595F4E99AF3E899ECE193F8ECA0 FCF0A4F5E99EF2E69CF1E59BEDE194EADF8FEFE494F5EA9BF3E899F2E797F5EA9DF7EB9FF5E99D F2E69BF3E79DF5E99FF4EBA0F2E99EEDE498E9E095EFE699FBF2A5EEE598F4EB9BF0E798ECE394 ECE493E3DB8AF8F09CF2EA99F2E99AEFE69AEFE59CF3E9A3ECE3A0FBF2B1FFF6B5FBF2B2EEE5A5 E3DBA0FBF4BED0CF8D5F5F201313006C6843746E4E48431CC8C486E3E091B3AE5EE4DC94E6D998 F8EAAEF5EAAFEFE6ADFAF3BCD4CF972F2C044C4A1ADCD89BD8D494DED894CFC987E4E2B08C8A56 150F013C32056E632DA29C66C6C8837D7F50050700AAAE58EDEB9BECE59DF6F0A7756C38B2A67C FFF8C2DCD6982E28008B8463F5F0BB94914FB5B56DD6D49F66642DA4A3608B8A47CECD8B9E9F5E C8C88FADAC792522000C0900070100252219494441292411413D206463445859384F522A3B4114 8589566E7337818443BCBD74E3E296D1D081DAD787E8E394EEE998ECE393EADE8FEBDE8FE8D888 EDE08EE5D987E7DD89E9E08DE2D984EBE089F5EA92F8ED95F1E58DE7DC83E1D47CF9EA92F3E58D ECDE86E8D984E1D27DEEEA91E1E58FDDDD94CCC992A5A0785A5336150B030B020051481ED3CD90 E3DF93DCD884DFD98BE3DB91D0CA7CD6D082DED88BD0CD81DAD68ED3D08DD9D597CECA91A49E6A 6460362F2813221B0629250E34321D0A0802120F0716120C3C37242925034E4D0B494903545201 5F5A15635F18534F08767229BCB86EFAF6ACF2EFA2E6E396EBE89BF7F4A4F6F2A3F6EFA1F0E798 ECE394EFE697F4EB9CF3EA9CF0E799F0E798F1E899F4EB9CF4EB9CF2E99CF1EA9FF6EEA4FAF1A8 FBF3ABF9F1A9F8EFAAF7EEA9F4EBA6F4EBA6FDF5AEFAF2AAFFF9B0FCF4ABF8F0A7F9F1A7F5EDA4 F5EDA3FBF3A9FAF2A7F9F1A6F8F0A5F3EAA0F5EEA0F4ED9DF6EF9FF7F0A2FAF2A6FFF8AFFCF4AC F5EDA6FAF2AAFAF2AAFAF2A9FCF4A9F8F1A3F6F0A6F4EDA5F3ECA4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C66A6B6A 3334334E4E4EB0B0B0FFFFFFFFFFFFFFFFFFEEEEEE8D8D8D4747473D3D3D7D7E7DEDEDEDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF9EEEBEAC0ECECBBF4F4C8FBFBEAFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9ED ECEAC1DFD282DABA46E6CC6DF6E7ADFDF9E2FFFFF8FFFFFEFFFFFFFEFEFBF8F8EAF0F0D2E9E9BC F1F1D6FDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFF9F2 FEE9D2F9E1BCF6E0B5FBF3DBFFFEF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FDFAE2F5E1A6E9BD5CEEC16CF6D299FDEBD5 FFF8F2FFFEFEFFFFFFFFFEFDFEF7F0F8EDD7EAE0B4F2ECC6FDFDE3FFFFF7FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFDFAF1EDCEDFD38ADBC772E1CC81F8F3E1FFFEFDFFFFFFFFFFFFFAFAFAEFEFEFEEEEEE FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F5F5F5FAFAFAFFFFFFFFFFFFFFFFFF FBF9EFE7D699E0C673E8CE86F4E4BAFDFBF5FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7727272383838 505050B4B4B4FFFFFFFFFFFFFFFFFFEBEBEB8080803E3E3E383838828282EFEFEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF4F4F4D6D6D6E4E4E4FBFBFBFFFFFFFDFDFDF7F7F7F4F4F4F3F3F3EDEDED EAEAEAF9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDD84EBDD85EADC84E9DA85 E6D784E2D382E6D788EADA8CE8D88BE6D689E5D687E1D582E9DD8AEDE18FE2D684E7DB8AE3D687 E6D98AECDF91ECDF92E7DA8CE6D98CE1D586D6CB7BD7CC7ADFD482D6CB79C6BC66CDC36ED9CF79 DED47DD8CE77D6CC75DBD17AE4DA83E9DF8AEEE392F1E697EEE392E5DB84EEE588EDE583EEE784 F5EB92F5EB99EEE391EFE58AF0E78CF1E88EF3E992F3E995F5E999F6EB9AF0E494EEE490F0E691 F1E790EBE189F0E78CE9DF86E5DB84F4EA94ECE191EFE494EADF8FEDE292EADF8EEADF8DECE28D F1E798DFD689E0D78BEEE596E9E091E9E091DBD382DDD584EAE290E2DA87E5DD8AEBE38EF0E48E EDE28AF2E691EBE28DE2D784E6DB89EEE695F5EE9EF4ED9DE7E092E5DD92EAE294E3DB89E0D886 E3DB8AF1E997F7EE9FF7EE9FFAF1A2F6EDA0F0E79AEDE497EBE295EDE593E3DB88EEE694F3EA9C EFE69AF2E8A0E8DE97F0E69FEDE39CF3E9A1EFE59CF0E69EF2E7A4F2E8A4F6ECA6F9EFA9F9EFA8 F6ECA4F7EEA3F1E89DF1E89AF0E799EFE697F3EA9AFBF0A0F9EE9EF6EB9BFAEFA0F8ED9EF0E597 F4E79CFAEEA2F5E99EF2E69CF2E69CEEE295EDE292EEE393EADF90F2E798F3E899F5E99CF4E89C F2E69AF6EA9FF6EAA0F4E89EEFE69AEFE699F1E89BF2E99CF1E89AEEE596F0E798F5ED9DF6EE9D F5ED9CF2EA98ECE490F6EE99EBE38FEEE694F2E99DF1E79FEFE5A1F3E8A8F2E7A8EFE4A6F0E4A8 F2E7AAEEE3A8E2D79AFCF7AFEBE699A19D58363113534E242A2600D9D594EDEA9FDED790E7DEA4 F5E9B3E2D8A0F3E9B2F0E8B0888349231E004C4720D4D08EF9F3B0F9F1ABF9F1A7E4DB93CCC98B CBC989BEB76FE0D494C6B7839A905BA3A55E696B3C0F1000919440EAE89BE8E19CFAF4A977703B 9E956BFEF6C3E0DC9E322E00969062EDECB0C2C27ACCCC837D7C478B8A509B9D538E8F4BC3C385 B9B883B8B6893E3B1C0F0D001512021A1609201D13231F181A17023E3A1C6E6D4E595A3931340D 40461980845153581D8E914FB8BA72B8B86BCECD7DCFCC7BE9E594E9E493EDE594F6EA9BEFE392 F4E593EFE28FE9DD88EFE58FEBE38EE5DB8AF2E39BF6E69DF1E298EBDC8FECDD8FEAD98AF0DF8F EAD889F2E093F4E196E1CE83EFE78CDFDE7DE7E590E9E5A3F1EAB9D8CFAD928969352C13221B00 554F18C5C27DDBD98CF6F2A3D7D184D4CF84DCD78FD8D38ED8D493D5D093C1BD8494925A3C3916 1612000B06000500000B060009060028250D191705110E07140F0A2821124A4620AFAB6BA7A54B A6A24FA8A25CB2AA65C9C27AFDF7AEF4EDA4F5EFA5F1EB9EF9F4A5FEF8A9EEE998F1EB9AFAF2A5 F3EA9DEDE497F3EA9DF7EEA1F3EA9DF3EA9DF7EEA1F9F0A3F6EDA0F8EFA2FDF4A7FBF3A8FAF2A8 FAF2A9FBF2ACFDF4B0FEF5B2FBF2AFFAF1ACF3EAA3FCF4AAF8F0A6F9F1A6F6EEA3F3EBA0F6EDA3 F4EBA1F5EDA2FBF3A8FAF2A7F8F0A5F3EBA0EFE79CF7EFA4F8F2A3F9F2A2FBF4A6FDF5ABFDF6AE F8EFAAF8EFAAFCF3AEFAF1ACFAF1ABFCF4ACF9F1A8FAF4AAF8F2A8F8F2A8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBCBCBC 5556552F302F626262BCBCBCFFFFFFFFFFFFFFFFFFECECEC7D7D7D3C3D3C464746898A89E8E8E8 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFBF9F9EDEFEFCBE8E8B2F3F3D7FDFDF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCF9F9ECEAE9BAD5CD67DABF4EE6C15AF7E9B2FDFBE4FFFFFAFFFFFFFAFAEEEDEDC9E8E8B8 F4F4DFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFCFFF8F2F3EBCAE9E1A9F4F1C6FDFDE5FFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8FDEFD7F7D299EDBF66E8B956 F8D4A0FDEAD3FEFAF3FEFFFFFFF9F2FFEBD7FDE0C5F8DECDFBEEE2FFFEF8FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFBFBFBFDFDFDFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFCF7F0E3BCDEC570DCCB79E3DDA1F8F7E8FFFEFEFFFFFFFFFFFFF3F3F3DADADA D9D9D9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1E9E9E9F5F5F5FFFFFFFFFFFF FFFFFFFCFBF4E9E5B4DECF81E0C570ECD69DFCF9F1FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B8545454 2E2E2E5F5F5FBDBDBDFFFFFFFFFFFFFFFFFFE9E9E9757575373737404040898989E9E9E9FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF0F0F0F5F5F5FDFDFDFFFFFFF7F7F7EBEBEBE3E3E3E6E6E6 EFEFEFF8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7D97FEBDD84E8DB82 E3D47EE2D380DECF7EE2D384E7D789EADA8DEBDB90EADA8BE0D17DE5D681EBDC88E2D380EEDF8C EADB8AECDD8CE7D789E7D789E9D98CE8D98CDCD181D8CD7DD9CE7CDDD280DED381D7CD78CBC16C D8CE79E4DA82DBD17AD4CA73D7CD76E0D681E4DA86EEE392F2E798EDE391E5DB83F4EC8EEFE784 F2EB88FAF097F7ED9BF1E794F4EB90F1E88EEFE58EF0E692F4E998F4E99AEEE394F3E899F2E796 EFE492F1E794EDE38DE6DD82E9DF86F1E791EDE38DEBE090F6EB9BECE191F0E595EBE08FE6DB89 E8DE8AEEE597E2D98EE9E093F2E99CE7DE90E9DF91E6DE8DDCD482E6DE8BE6DE8BEBE38EEBE38E ECE08AE5DA81ECE188EDE38CEAE08BF3E897EEE796EFE797ECE595ECE597EEE79AF0E89AE7DF8E DBD382DBD383E5DD8DECE396EAE194EBE297EBE297E6DD92E5DC91DED48BDFD787DBD380EBE392 F0E799EAE196ECE29BEAE099EAE099E5DB93F4EBA1F3EA9DEDE497E8DE96EBE19AF0E69FF5EBA3 F3E9A1EFE59DF2E8A0ECE29AEFE69BF0E79BECE498EEE597F6EB9BF7EC9CF9EE9EFEF3A4FBF0A1 F1E697EFE397F2E69AF1E599EFE399F3E79CF0E597EEE393F1E696EDE293F4E99AF3E899F1E699 EFE397F2E69AFAEEA3F4E89EEEE298E9E093EDE497F3EA9BF7EE9FF4EB9CECE393ECE493EEE696 F3EB98F4EC99F1E997EFE792F0E893EFE794F5ED9CF4EB9FEFE69EF2E8A1F0E39FF0E39FF0E39E EEE19CECE099ECDF99F3E5A1EEE193EAE18EFBF3A9DFD69FECE5B43C37109E9B53FAF7ADE2DC9F FAF2C6F0E6BAFCF4C2C9C28F3B35160D0800878247E6E0A2FBF5B3EDE59EFFF3A8F1E394ECE08F E4E195C7C378F0E89BE6D795F7EFBAFFFFCAF3F1ABA8A8770506025E601EE8E29BD7CF8EF2ED9F 8A824E7C7349FEFCCDFFFBC12B2700ACA974DEDD9CA2A356CED0825F5E2780804296994CE1E49E C9CA90BDBB914C49300B0800262314141105151306161408100F00211F073834193E3D1F3A3B1B 2729053C421674784670743BA3A565A7A861A5A459C2C073C6C374E5E092E3DD8FEAE194F9ED9F EEE193F8E89AF1E394E7DB8BE7DC8AE9E18DECE398F6EAACEFE4A5E7DB99E7DA94F2E39CF3E59C EFDE96EBDA92F5E39DF8E5A0EEDB96F2E694E1DB82DCD683D6CE85E8E0A1F5EDB6ECE5B2B4AD7B 6F69343B3901757337BBBA78E4E193D7D484E3DF95E3DE9CDBD79BC1BB86C5C08F4C481A121001 13110028250038350F1B160045412044451F3738110A0A011412052420172E251A4D4728B2AD72 ADAB57BEB867CEC580F0E7A1EEE59EF2EAA1F4EAA2FCF3A7F3EC9CEFE798F6EE9EFAF5A1F5ED9B F3EB9DF3EA9FF2E99EF2E99EF5ECA1F8EFA4F6EDA2FCF3A7FBF2A7F5ECA0F6EDA2FEF5AAF8F0A5 F8F0A6F8F0A7F8EFAAF9F0ADFAF1AFFFF7B4F8EFAAF4ECA4FFF9AFF8F0A6F4ED9FF0E99BEFE89A F4ED9FF6EFA1FAF3A5FCF5A9F8F0A5F8F0A5F7EFA4F2EA9FF6EEA2FAF3A5F8F1A1F9F2A5FBF3AA F9F1A9F4EBA7F9F0ADFCF3B0F9F0ADF7EEABFCF3AEFAF2ABFCF6AAF9F3A6F6F0A3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B1B1B13D3E3D202120666766C0BFC0FFFFFFFFFFFFFFFFFFECECEC8080803839383232325E5E5E ADAEADDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6E5ECECC5EBEBC5F3F3DA FBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF6F9E8E4E6ABDCC464DCAE37E9C96AF5E5B1FCFAEEF8FAF0EFEFCDEBEBBA EEEEC0FDFDF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F6E3EBECC2ECECB8F3F3C8FCFCE5FFFFF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9F5FEEAD4F3CF8F EAB958EFBF65F3D595F6EEC8FDF6E1FFEFD9FFE3C4FFDFC3FFEBE9FFF7F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDD7D7D7D9D9D9E9E9E9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFDFEFCEDF0DCA3DFBA57E4D189EEF0CFFBFBF3FFFFFEFFFFFFFFFFFFF5F5F5 E1E1E1E0E0E0FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECECECE1E1E1F1F1F1FFFFFF FFFFFFFFFFFFFDFDF7F2F5D2E6DA92DFBF5DE8CA82FCF8EEFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABABAB 3838382424246B6B6BC4C4C4FFFFFFFFFFFFFFFFFFEBEBEB8080803B3B3B2E2E2E5A5A5AABABAB DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F8F8F8FDFDFDF6F6F6EFEFEFEAEAEAE8E8E8 EBEBEBF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D379E1D37A E3D57DE4D57FE9DA85EADB8BE1D183DFCF81E6D68AF1E196F4E495E7D981E7D880EBDB86E9DA84 EDDD8AEDDE8BEBDB8AE7D688E4D486EBDB8EEDDD90E3D486E0D585D6CA78CCC16FD9CE7BE5DB86 C7BD68D1C772E1D780DFD57EDAD078DCD27BE0D681DFD581E8DD8DEFE495EEE391EFE58DE8DF7F E7DF7CF0E886F6ED93F5EB99F7EC9CF7ED95F2E891EEE490EFE493F2E798F2E799EBDF91EFE495 F0E596EDE291EBE08FE9DE88E6DD82E8DE85F4EA93E4DA85E3D888ECE191DFD484EBE091EEE392 E9DE8CF0E692EAE193E7DE93ECE396EBE295E2D98BE2D88AF1E998E1D987E7DF8CE8E08AEAE28D E4DD85EDE08AE5DA80E4D980E6DC85EBE18CEFE590F3EB99EFE898E8E191EAE394EEE799EEE696 F2EA99E8E08FE8DF8FE8DF90EAE195ECE397ECE398EAE097EAE098F3E9A2EEE49CE6DD90E9E190 F5EB9DEFE69AECE29AE7DD97EBE19AE9DF98E1D88EF1E89CF1E898E4DB8BECE398EBE299ECE39A EEE49BECE299E8DE95EBE199EBE199F6ECA4F9EFA7F0E69DE9E095EFE494F0E595F2E797F8ED9E F6EB9CEEE394EBDF93EEE296F1E599EBDF95EDE197F1E698F1E696F5EA9AF7EC9DF8ED9EF5EA9B F5E99CF1E599F6EA9EFBEFA5F0E49AEEE198ECE296EBE294EAE192ECE393F1E898F7EF9EF0E896 EEE694F0E895F0E895EBE38FEDE590F4EC9AF7EF9EFAF1A2F1E89CEBE198F2E89FF9EDA3F5E99C F7EB9CF3E996F0E58FF3E595FAE69DF6E490F2E58DE5DA89ECE2A4FFF9C2918C4D2F2C00898644 B6AF79BBB0938B8260585126241E003B3816A09D64F6F4BCF5F0B1E8E19BEBE296F7EA9AF5E591 F2E48DF3ED97ECE791ECE18EFAE8A3F0DDA6DBCF98E6E49CD3D2A11E1C043A3A0EE0D994ECE3A5 F0EC9DB5AF762017008A8352DBD69C383400A7A56DD2D18DDDE08F8E924143410A969655949747 C1C37EDCDCA78C8965000000120F06100B0624201A100F051C1B0A1D1E0B1E1C044B472C414025 3031123C3E1B6F764B858859787D46A6A96BA0A15DA9A85EE0DE91CDC980E9E39BE8E299ECE29B F6E8A1EEDF97F3E19BF1E299EBDD93E8DD8FEFE598F7EFA9F7EEB2F3ECADF1EAA7F1EAA2EFE69D E9DF93E7DC90F2E69BEBDF95E1D58CF5E49EF7E7A1EBDD96D9CC82E3D98CE9E190E0D989D5D285 E5E199CBCA864D4B1765642EB7B67DABA95CD7D484E2DE96D8D395D7D29E7B7447272200302C0C 4542187E7B4F929061B3B18496946A939662A2A56E92975E1C1E04131305221E131E160B4C4428 C7C18BCDC779E6DE90DACF89E8DE97F1E79FEEE49AE0D68AEAE192FFF6A6FCF5A3EFE693F6EE98 F8EF9AEFE699F2E89FF4EAA1F5EBA3F8EFA5FEF5ABFCF2AAFFF5ACFDF4AAF8EEA7FAF0A7FFF6AC FBF3A8FCF4AAFCF4ACFBF2AEFAF1B0FAF1B0FBF2AFF3E9A5F9F1A9FEF7ADF5EEA0FCF5A6F4ED9F F3EC9DF6EFA1F5EEA0F7F0A2FBF4A7F7F0A4F8F0A5FBF3A8F8F0A5F6EEA3F6EEA1F1EA9CF3EBA1 F9F1A9F9F0ABF9F0AEFBF2B1FCF2B2F6EDACF4EBAAFAF1AEF9F0AAFFFAADFBF6A5F8F3A2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB6B6B64B4B4B343534777877C7C7C7FFFFFFFFFFFFFFFFFFF1F1F1A1A2A1595A59343434 3C3C3C787978C3C4C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFAFAF1EBEBC3 E9E9BBF4F4DEFDFDFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFDFAF9EDEDDAA7DFBB5FDDAE36E8C670F5E8C4EFEDC9E7E7AF F3F3C6FEFEE4FFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFAFAEFEAEABFE9E9B3F5F5CAFEFEE6FFFFF9FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFAF5 FDE9D0F6D19DDFB14DD0B355CBC281DACCA2ECCFAFF1D2B3F3DBC3F3ECE8F3F1F1F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4CDCDCDA4A4A4A3A3A3BDBEBD DDDDDDF4F2F1FBF5F5FEFAFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFF6FBF9D8EDD584E1B442EED79BFDFEFBFFFFFEFFFFFFFFFFFFFFFFFF FCFCFCF6F6F6F5F5F5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE2E2E2F1F1F1 FFFFFFFFFFFFFFFFFFFFFFFBFFFFEEF3E4A6E4BC52E8C46CFCF7E8FFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B1B1B1484848404040898989D1D1D1FFFFFFFFFFFFFFFFFFF1F1F1A8A8A8636363363636383838 737373C1C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E3E3E3EDEDEDF9F9F9EAEAEAE6E6E6F4F4F4 FDFDFDFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACD71 E6D87EEBDD84E3D57DDFD07BEADB8AE4D586E2D286E5D589E5D58AE0D181DDCE77DCCD75E5D77E EEDF87E4D57FECDC88ECDC8AF0E090E6D686E4D385E7D789E0D283E5DA88DFD581D2C775DBD07D D9CE7BCABF6CD3C975DFD57FE1D781DFD57FE3D983EDE48DE4D984E6DB8AE8DD8CE7DD88EDE38A E7DE7EE8E17EF1E888F1E88EF0E593F6EB9AF5EB95F3E993F1E792EFE493EFE495F1E698F8ECA0 EBDE93EFE396F5E99AEADF8EDED37FE3D980E1D77EE9DF89ECE28EE4D989E7DC8CDFD484EEE392 EFE492E3D985EAE08CE4DB8DE5DC91E4DB90E6DD90ECE394EAE292E4DC8ADFD684EDE592EAE28E EBE28FE7E08BE9DF88E9DE87E2D881E8DE88F1E793EADF8CECE493F5EE9EECE595E7E08FEBE495 ECE496EBE294EDE496F2E99CECE396E8DF93EEE59AEEE59BE1D88EDED48DEFE59EEBE19BE0D78A EBE393F5EC9EE7DE93EDE39BE6DC95DDD38DE1D890E0D78DEEE599EFE696ECE493E6DD8EE4DB8F E4DB90E8DF94ECE398EDE39AF2E8A0E6DD95EAE19BF2E8A2F3E9A3F5ECA2F7EC9CF1E695ECE191 F2E799F6EA9DEEE295DDD187E9DD92F4E89EEEE298ECE096F3E79BEFE394F0E595F8ED9DF2E698 F2E797FAEFA0F3E89AF5EA9CF6EA9EE9DD92F0E39AEDE295EEE695EDE595E6DF8EE4DC8BEAE292 EFE794EAE28FEEE693EFE893EDE590F4EC9AF8EFA1F2EA9DF2EA9EEEE59AEEE599F8F0A3F7EB9C F2E795F6EC93F4E88EF2E789FBEB96F0D98FFDF29CF6E58EE9DB88EADE99E9E1A0F5EFAB9C9851 8984447E76417367496F6542888257BBB687EAE6B2FBF8C1F6F2B5F3EDABF0E8A0ECE294F4E696 F4E390FAEA94F2EB93F2EC92F4E993F2E099E7D49AEEE3ABDAD58FE3DFAF7A764E0C0900776E3A F2EAB0F5F1A8F3EEB78D8659AEA876B9B5782C2900838150EBEBA8A4A758A9AC5F44430C7B7D3E D0D688DBDE9F8C8D5E12100418140D070300211C1B201C171E1C1120210F2A2B13302F15403C21 3A391C4C4D2C6E704D7C7F555E62316C6F37969759A8A864CFCC84CDCA80D2CD89E8E19EEDE5A1 F0E7A3F5E8A4F4E6A2F2E29EF3E59FF4E7A0F0E49DF0E59EF3ECA6F0EDAAEBE8A2F1EFA6F7F5A8 F4F0A0EEEA98E4DE8CE8E190EDE696ECE495F7EDA2F4E4A6FFF3BBE9D997FAED9FEDE58AE5E080 EAE888F3F298F4F2A5E4E1A185824E9E9A69A8A75BB0AE5EC6C37CAEAA6D908B551B17043F3815 8D8862949066D8D5A7CBCA98D3D29BD8D89BB6B975D2D68FDCE19F3436080F1002262215352D23 554D32BCB380C5BF74E6DE91DACE85F3E69DEBDE94EDE194EFE495F1E697F8ED9CF6EE9BF6EA97 F8EE97F6EB96FCF3A9F8EEA7F5EBA3F9EFA8FBF1AAF6ECA5F9EFA8FAF0A8F8EEA6F7EDA6FBF2A8 FFF7AEFFF7ADFCF4ABF9F1A9F9F0ABFAF1AEFCF3B1FBF2B0F8EFAAFEF7AEF0E79DE4DD90FEF7A7 F7F1A2F6EFA0F8F1A3F7EFA3F8F0A3FEF7ABFAF3A6F4ECA1FCF4A9FDF5AAF8F0A6F9F2A6F3EBA0 F2EAA1F8F0A9F6EDAAFAF1AFFCF2B2FBF2B2F4EBAAF1E8A7F8EFADF8EFABFCF6A9F8F3A3F5F0A0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDDDDDDACACACA2A2A2C1C2C1E6E6E6FFFFFFFFFFFFFFFFFFF9F9F9D6D6D6B4B4B4 A0A0A0A1A1A1BBBBBBE0E0E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC F6F6E5EFEFCEECECC5F1F1D4FCFCF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF7F0DCEEDBABE0BA5BE0B852E8C771EDDD9A F2F0C1FAFAE0FFFFF6FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF6F6E4EFEFCAECECB9F2F2C4FDFDE6FFFFF5 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFF7EFF2E2CDC4AE7D90825268644279725C9F9180B5A798C0B6ACBFBEBCBFBFBFBFBFBF BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFC0C0C0ADADAD959595838483 848585969595B9ACAAE8C7C5F9E6E5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9FAEAEEEBBAE2CA69E0B23EF0D89FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6F6E3E3E3E1E1E1FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE2E2E2 F1F1F1FFFFFFFFFFFFFFFFFFFFFFFEFFFFFEF5E6B6E5BC55E8C262FCF6D9FFFFF8FFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBDBDBAAAAAAA8A8A8CBCBCBEAEAEAFFFFFFFFFFFFFFFFFFF9F9F9DADADAB9B9B9A1A1A1 9F9F9FB8B8B8DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBF8F8F8E8E8E8E5E5E5 F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFD372E2D575E3D679E2D57BE2D47CE9DA86DCCD7CDBCB7DE1D184E6D68BE8D989D9CE76E2D77E E6DB82E0D47EDED27EE6DA86F0E492EBDE8FE2D586E5D88AE7DA8BDDD27BDFD67BE2D880DAD17B D8CD7BDCD181D0C576D7CC7DE9DE8FE1D686EDE18FEAE08DEADF86E4D77EE1D67DEFE48BEADF85 EFE488EBE285E2DB7BF5EF91F6F093E9E288F1EA90EAE38CF2EA95F6EE99F3EB98ECE493E9E190 F4EB9CF3EA9BF1E899F1E899F0E798DED683EBE18AEFE58EE8DE89EBE08EE5DA8BE8DD8EEDE292 EADF8EEFE492F3E994E2D884E3D98BE0D88DDCD586E4DD8CF1EB96EBE58FE0DA84EEE893EAE490 E0D988E6DF8FF1E999F3EA9AF5EB9BE8DF90E0D788E9E091EFE697F2E99AEDE496ECE396EFE699 F1E89BF1E89DEFE59DEFE59DEDE498E7DE91E5DC8DEBE292EAE291DDD584E0D788EDE495E5DC8F E5DA8CF0E596F4E99AF1E598EFE397EEE296EBDF93E7DB8FE2D68AE8DD8EF3E899F1E697E9DD91 EDE195ECE096EDE197ECE097E4D890E4D792F5E8A4EEE09FE8DA99ECDE9DE7DA94EEE294F3E899 E7DC8EEFE398F6EAA2EBDF97EBDF97F4E8A0F4E8A0F4E8A1EFE399EADF96F3E9A1F7EEA2F1E89B F3EB9AF7EC9AF5E997F3E795F0E394EDE092EADD8FE9DA8EE9DD8CEFE591ECE18FEFE492F8ED9B F2E795F4E997EADF8EF2E797F0E595F3E897ECE192F4E7A2F4E7A2EADE96EFE399F8ED9EEFE495 F3E897F2E699FDF1A5FAEEA6ECDF99EADC97F3E59EECDF91ECE291F3E896EDE293E6DB8CEEE393 F6EB99F7EB9DF4E7A1FAECAEFCF1B2F3EAA7F1E8A5F1E8A5EBE29DEFE6A1F5EDA5F1E7A0EEE49C F4E8A0F3E79FECDF94F4ED9DE2DC8BEEE798EDE39DD9CF8FE2D89BE8E0A3FFFFCED8CFA45A5227 150A005A4E24B8B384D1CD9EDAD7A3DCDA9FB9B576484414484421EFECB5B4B27A8180474B4B17 AAB078858C57B9BD964240340400001C14150700001E1613100A032A26161918042B2A183E3E1D 2C2A066B6A435859306C6E3F7F814E54571E7C7D3FADAB68A29D59D1C982E2D994CBC27FE3DA98 F3EAA7E7DE99F8EEA9EBE19AF6ECA5F4EAA3F1E89DF3EAA1F4ECA1F0E99EF2EDA3EFEBA1EEEAA0 F4EFA5F2ECA2EFE99FECE69CF7EFA8F4EDA5FFF8B0EEE7A2FCF6B5E8E3A3FCF8B2EEEB9FEFE997 E5E08CEFE794F2E99BE8DB94EFE1A2E0CF96A2945FB4AC6BBAB770A09D58BEBB7859551E686426 ACA668DCD997F4F1ACD5D187C0BD71D0CA7CD9D17EE6DF8ED2CE87F0EEB644411D121000262316 2A2313544C2BA49C63D1CA7BE6DE8CE3DB8ADED685EDE393F2E795EADE89EDE18EF2E694F5E89A F6E699F4E69BFAEBA2FFF2AEF7EDA8FDF3AFF9EFA8FCF2ABF6ECA2FAF1A6F9F0A3FAF1A2FAF1A2 F9F1A0F6EE9DF9F2A2F4ED9EF4ECA1F8F0A7F9F0ABF7EEA9F3EAA6F9F1A9FFFAB1FAF2A8F2EB9D F6EFA2FCF4A9F7EFA6F3EBA2F6EEA6FAF1ACFDF4AEF6EEA6F4ECA3FCF4A9FCF5A7FCF5A7FCF4AB F5ECA9F1E8A5F3EAA7F9F0ADFFFAB7F4EBA8F6EDAAF6EDAAF2E9A6F3EAA5F8EFAAF6EDA8F9F0AB FCF3AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8EAEAEAC0E8E8BAF6F6E4FCFCF2FFFFF9FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF7EAE2CE86DCB74EE1B342 F1D588FEFADDFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7E8E9E9BDE9E9B1F7F6CC FCF8E2FFF9F4FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFFF0EFECB8B3A6635F551817162B2C2C676968909291A8A8A9A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A49C9C9C 7B7B7B6263636362618A7870D5A795F2D4C9FEF7F7FAF8F8FBFAFAFDFDFDFCFCFCF8F8F8F8F8F8 FAFAFAFEFEFEFCFCFCF9F9F9FEFEFFF5F2DBE3D894D9BE52DEB84BECD9A5FAFAFCFEFEFEFCFCFC F9F9F9FEFEFEF0F0F0D2D2D2CFCFCFF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDED E2E2E2F1F1F1FEFEFEF9F9F9FBFBFBFEFEFEFCFEFFF1E1C3E5BA68EAC06CFCF1CFFFFDF1FFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1E8E8E8F3F3F3EAEAEA EAEAEAF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE8DC7AE9DC7BE9DC7DE9DC7FE8DA81E8D984E5D683E9DA89EFDF91DCCC7FC5B968D8CD75 E0D67DDED47BDED47CE0D781DED37FD6CB78D0C574D6CC7CE8DD8DE8DD8DDED57CD5CC6FCDC469 CCC26CD3C877E8DD8EBEB265B0A457CFC475E3D888E8DD8BE9DF8BE6D87FE9DC81E8DA7FF1E78B EFE488F0E589F4EB8FF1EA8DEEE88BF3EC8FF7F194F6EF94F5EE97F1E994EDE591EEE693F1E996 F3EB99EFE796F4EB9CEFE697EBE293F2E99AE8DF8CECE28BE7DD89E7DC89EEE391E1D686E3D889 E7DC8CF3E896F1E793F2E893E4DA83E3D988E7E091E8DF8FE4DB89E7E089E8E188E8E087EAE38C F1EA96F0E696E9E092ECE396EDE498F2EA9DEDE497EBE295F3EA9DF6EDA1EAE194EAE194EBE295 EEE598F2E99CF3EAA0EDE39CEDE39BEAE195E7DE90EAE291E9E28EE5DD89E8E08CE9E18EE7DF8D EAE191F3E999F5EA9BF1E697E8DD8EE4D98AF0E595FAEFA0F9EE9FF1E697EDE293EDE293E5DA8B EDE195F0E498F0E49AF2E69CF5E9A0F0E49CE9DC96F7EAA6F3E6A1F0E2A1F5E7A5F1E49DF5E99B F5EA9BF0E496F2E69CF5E9A1F2E59FF3E6A0EEE19BE9DD96EEE298EFE399ECE098F0E59EF3EAA1 F1E89BF6EE9DF6EB98F1E591F1E591F2E694F5E596F5E598F4E599EDE18FEDE38DEEE48EEDE38E F0E692F3E896F3E897EFE494F8ED9DF3E899F6EB9BF1E599F5E8A5F9ECA9F3E6A0F7EB9FFAEF9F EFE494F0E595F5E99EFBEEA9F4E6A6EFE0A5F1E4A6EEE59EEEE59AEBE295E9E28FEBE08DE6DB86 E6DA84F6EA96FCED9CEFDF90EFE092FCF0A4F5EC9FF0E79BEEE59AEDE499F5EBA3F2E8A0E3D991 EDE39CFAF0ABEFE5A0F3EBA4EFE89BEAE497F3EDA3F6EFA7F2EAA7FDF5B6FAF1B8F4EAB4FBF2C2 DAD2A55F532D170F011713002D2800413D056B692A8F8B4CA09C62302C02918D5FFFFFDF8E8C60 2423029CA170949B714A4D300E0C01231E17352C2B170E0C1F160B1C1606141101312E1A3A3A25 3F3C1B47461B7574466B6D3E75774470743B65652A706F2FA3A05CAAA35FC9C079DFD58ED5CD8A E7DE9CE6DD9AD4CB86E8E098E8E098EBE39AF3EBA0F1E99EF4ECA1F8F1A4FBF3AAFFFAB9FDF4B6 F7EFB0FBF2B6F7F2B6ECE6AADCD399CFC68EA69D658D834D685F2E625F2A6667327A7940979454 E1DE96FCF4ACF2EAA1FCF0A6ECDC96E8D592FFEFB0D4C184AAA360BAB771B1AF6889863E827F36 DCD88EF3EFA5DBD88BC8C575D9D583E2DD8AD1CB75E4D87FDFD483CDC681DCD8A43937141F1E09 2E2C1B37331A767048A19A5DD6CF7EE2DA86E7DF8CE5DD89EDE48FF1E792EDE28CF4E895F6EA98 FBEB9EFDECA3FEEDA6FEEEA9F9ECA8F3E8A5FDF3AEFAF0A9FBF1A9F3EAA0F6EDA0F7EE9EF8F09F FAF29EFAF29EF9F19EF3EC9BF3EC9DF6EFA0FAF2A9F9F1A9F8F0A7FAF2ABF4ECA4F6EEA5F5EDA3 F4ED9FF7F0A2F1E99EF1E9A1FBF2ABF8EEAAF8EFACFCF3AFF4EBA7F2EAA3F8F0A6F7EFA2F7F0A3 F9F0AAFCF3B1FDF4B3FCF3B2FAF1AEFDF3B0F0E7A4F2E9A3F6EDA7F8EFA9F8F0A7F6EFA6FBF3AD FBF3AEFBF3AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFBF9F9EEF0F0D1E6E6B1F1F1C7FFFFE7FFFFF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F8EAD9D988DDCD75 F1D192FDE7C8FFFCF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBF9F9EDEEEFCC E6E3A9F2E2B4FFE7CEFFF9F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F2E6DDC5877E6C3C221E133D3E40919191CBCCCBEEEEEEEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBDFDFDF CBCBCBA3A3A38888898787849E9B7DCBC278E9D6ADFAE2E1E9E1E2EDECECF8F9F9F1F1F1E3E3E3 E2E2E2E9E9E9FAFAFAF1F1F1E7E7E7F6F8FDF4E7C3E3C261D9B844DBCE7EDFDBB8E7E8E9FAFAFA F2F2F2E7E7E7F4F4F4F4F4F4E2E2E2E0E0E0FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD EDEDEDE3E3E3F1F1F1F9F9F9E7E7E7EFEFEFFAFAFAECEFF0E3D1CAE5B3A0EFB8A4FDDFD7FFF3F0 FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1DEDEDEE3E3E3 F0F0F0F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE2D576E4D778E7DA7CEBDD83EDDF86E5D780E6D784E5D684EEDF8FE0D181C4B964 DAD076E1D77ED9CF76DED47AE3D982E2D882DED47FD1C773D6CB7AE2D785DBD080DDD47BD7CE6F D4CB6FDBD27ADAD07CE4D988DED384C6BB6BCABF6FD8CD7CDAD07CE2D882E8DA82F5E78EEEE087 EFE48AEADF85E6DB81F7EE93F2EA8FE7E085EDE68BF8F196F5EE94E7E089EBE38EEEE692F0E896 F0E895EFE795ECE493F2EA99EDE595E9E091F1E899EBE28EEFE58DE8DE88ECE18EF5EA98E6DB8B EBE090E1D686F1E694E2D783E9DF89ECE28AE7DD8AEEE394EFE594E7DD88E3DA82E4DB82F0E68D E4DA82E9E08AEBE08FE6DB8CF5EA9CECE395F4EB9FF3EA9DF0E79AF1E89BEEE598EBE295EEE598 EEE598EDE497F1E89BF3EA9EF0E69CF2E89EEEE598EDE595F0E895F1E995E1D984D4CC77E7DF8B E8E08DDED685E5DB8BE5DA89ECE191EFE494E3D887EADF8EEFE494F2E796F0E594ECE191EFE493 EEE393F3E79BF3E79CEFE399EFE39AF4E89EEFE39AF2E69CF8ECA3F2E69DEFE39CF1E59EECE097 EDE291ECE191F2E798F3E79CF5E9A1F7EAA3EBDE98ECDF99EFE29AF8ECA2F7EB9FF3E99EF8EFA5 F7EEA1F8EFA0F7EF9DF2E893F1E691F4E894F7EB9AF9EA9CF9E99EF7E79EF6EA98F2E993F6EC98 F3E896EDE290FBF09FE9DE8EEEE393F7ED9DEFE495F2E798EDE194F0E39EF4E8A2F1E59CF2E798 F2E796EADF8EF1E694F3E79AF3E79EEEE09EEFE1A4F1E4A4E8DE97EBE297ECE395E9E190EDE290 ECE18DE4D884F0E490FFF2A2F1E193EDDD90F3E79AEEE598E9E096E9E095EAE196F0E59EF4EAA2 E8DE96F3E9A2FDF3ACF2E7A0F5EDA4F0E89DF3EDA0EFE99EE8E199ECE4A0F2EAA9F2EAADF6EDB4 FBF3BDFCF4C1E3D9A7CCC290B5AE80B3AD77CCC88AECE9A6D5D192DBD89F7572422723088F8B66 71704B41411865693D343B110C0E000706000804031912070300000A04001D17040B09001B1905 2F2E1C43402056542A646236606233777A47757840909054929251B9B672C6BE79CDC57DD3C981 D1C884E2D997DBD28FC7BE79C9C179C5BD75C8C077C9C178C1B96FB9B166B3AB60A79E5C968C5B 94895A857A4B6F6536564B1E4035123A2E083C3006281C002B1F00261A002721001A18001C1800 1E1A03322D139E9752FFFEB9F2E79EE9DC92F9EBA1EFDF96FBECA4C5BF74B1AF63ACAA5DA3A157 CDCA80E9E59BD8D48AEFECA2E5E197DAD68BD9D389D0C87CD6CD7FD8CF85D9D492C8C58F232405 2A2A0C2B2A0F2221057A78489B9856ECE694E7E08CE8E08FE5DD8CECE28FF2E792EEE48FF6EA97 F5E997F6E99BFCECA3FEEDA5F9E9A3F3E6A2EFE5A0FBF1ABF8EEA7F6ECA3EBE297F0E79AF2E99B F4EC9BF3EB99F2EA97F2EA98F6EF9FF6EFA0F8F0A4FAF2A9FAF2AAF9F1A9F8EFAAF3EBA4F8F0A7 FBF3A9F5EEA0F3EC9EF1EA9DF2EAA0FFFBB2F6EEA7F3E9A5FBF2AFF7EEABF5ECA8F6EEA7F6EEA4 F6EEA4EFE6A0F6EDAAFDF4B1FAF1AEF8EFAAF6EDA7F1E9A2F1E9A1F4ECA3F9F1A8F9F1A8F4ECA3 F4ECA2F4ECA2F3EBA0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F7E9EDEDC7EDEDBEF2F0C1FBF0D6FFF6EBFFFDFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF6FEF2E3F7F0D8EEEECBE3E7AF EBE5B5FAE9CDFFF4E9FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC F6F7E6EEEBC5F6E2BAFCDFBBF3EBCAF6F6E3FDFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFBFEFEEEF3F4D4E9E8B6ECDC99B8AC80807D73919294C6C6C6EBEBEBFFFFFF FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE E2E2E2C2C2C2BCBCBCBEBEBFBFBFBCC4C6A6D1D181E2D090EDCFACE0D6CDE8E8E7F7F7F8EEEEEE DDDDDDDBDBDBE4E4E4F9F9F9EEEEEEDFDFE0E9ECF1E9D9B2E0B750E1BD55E7E2B3E2E2D1E2E2E2 F8F8F9F0F0F0E2E2E2F0F0F0F5F5F5E6E6E6E5E5E5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDEDEDEDE2E2E2F1F1F1F7F7F7E1E1E1ECECECF9F9F9E8EAEADED3D3E1C3C1EDCBC3FCE8DB FFF7F0FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEDEDEDEAEAEA ECECECF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDBCE71DCCF73DFD277E3D57CE5D77EDFD179E5D781E0D17CE3D481E5D582 DCD17CE6DC81E9E085E1D87DE2D87FE8DE85E6DC83E1D780DED47DE0D681E1D782DFD481DFD67B DBD273DED579E6DC82DFD57DDCD27EDED381E8DD8BE9DF8BEBE18CE9DF87E1D77FE4D67DF2E48B F1E289F5EA90F4E98FF5EA90F2E98EE8E085EBE489EEE78CEEE78CF4ED93EBE48CF2EA95F8F09B F8F09BF2EA96EEE693EDE592F0E897EFE796EEE695EEE596E3DA86EFE58CEBE18BEADF8CE8DD8B E0D586EDE292E2D787F1E694E1D782EAE088EEE48BF3E794F1E593F1E592F2E692EEE38CEBE086 E8DD84E2D67EE8DC88E7DB87E4D886FBF09FEEE596F6ED9EF4EB9CF1E899EEE596E7DE8FF0E798 EEE596EBE293E9E091E8DF90E8DF92EAE194F0E79AEBE291EAE28DE6DF89E7E088E7E088E4DD85 E8E18ADDD580E5DE8BE3D987DAD07BE5DB88F5EA97F1E792ECE28EEDE28FF0E691EBE18DE7DC8A EBE18CECE190F3E79BF2E69CEDE197ECE094F1E599EDE195F4E99CF3E79AEEE296EDE195EEE394 E9DE8FE7DC8BE8DD8DF1E697F3E79CF4E89FF9EDA5F9ECA7F9EDA5F6EAA1F7EBA1F2E69AF2E79A F7EE9FF5ED9DF7F09EF5ED9AF1E791F3E794F5E997F7EA9BFAEA9DF9E99EF7E79EF6E99BF2E795 F5EA9AF1E697E9DE8EF5EA9BE9DE8FF1E698F9EDA1F0E498F6EA9FEFE397F6EAA2F8ECA3F4E89C F4E998F5EA98F5EB96F7ED99F2E797EFE397F1E59DF0E3A1EDE09DEBE29AE8DF94EDE496ECE493 EBE08EF0E592E7DB87E6DA88FAEC9CF9E99BF2E394F0E497EFE699EFE699EFE69BF0E79CEFE69B EEE49CF4EAA2F3E9A1F3E9A2F6ECA5F0E79FEDE59CF4EEA4EEE89EE9E29AF2EBA4F7F1ACF6EEAD FBF3B5F3EAAFEEE5AAFBF2B9FCF3B9FAF3B9FAF2B4EBE6A1E6E29EF1EDADC2C08A59572D1D1A02 100F002322061617000E1000131600050700242306484323635E3E605A364B4721100D01030200 1816011F1E0D55523367653B7573476A6C3D80824E72763CA1A266A2A2619B9853B8B06ADED58D EDE39BE4DB96F5EBA6F3EAA5F5ECA7EEE69EE4DC94FAF2AAEFE79FE2DA91D9D188CAC277B5AC6B 9C925F968C5A89804E887E4E8A7F5094895AB1A678C4B98CC7BC91DDD1A6DED3A97B745A443E2E 302A12352F0B272008130B00847D3EFDF5ACF8EFA1FCF1A0FAEF9CF4E998DAD584A8A555726F20 BFBC6FF5F1A6DCD88FD8D38DE0DB97E5E09FE2DC9EE6E1A2F5EDAFEDE3A3E0D79ADDDA9EADAD77 16190331360D1315021D1F02686A35838340E3E28FE8E28FE4DC8BE0D887E7DF8CF2EA97EDE38E EEE491F0E593F4E799FDEFA5FFF4ABFEF0A9FAEDA9F4EAA5FEF4ADF9EFA8F7EDA4EBE298F2E99C F6ED9FF8F09FF8F09FF8F09FFBF3A3FDF6A7FCF4A8F9F1A6F7EFA6F8F0AAFBF2ADF9F0ACF7EFA8 FAF2A9FFF6ACF9F2A4F3EC9EF1EA9AF0E99BFFF7ADF3EBA3F2E9A5FEF5B3FDF4B4FCF3B2FAF1AE F9F0ACFBF2ACF3EAA4FAF1ABFCF3ADF7EEA8F8F0A8F5EDA4FCF4ABF8F0A7F6EEA4FAF2A7FAF2A7 F7EFA4FBF4A5F8F1A3F6EFA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAF0EDEDC7E6E1A7F8DEB7FDE9D3 FDF8EFFEFEFBFFFFFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFDFCF7FDF2E4FDE2C2F0E0B1E6E5B0 F3F4DCFBFAF1FEFCF8FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCFCF9F0FDEAD3FADEB7E7E0A6ECECC4F9F9EDFEFDFCFFFDFCFFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDFDFDF8FDFDEDF9F9D5E6E9A8DBDE8DF3F2BDF3F0D7EAE9E4ECECEEF6F6F6FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD8D8D8B2B2B2D1D1D1F1F1F2F5F4F2ECECD5DFDB9ADDC877DEBF72DDD3BCEAE9E7F8F8F9 EFEFEFDFDFDFDEDEDEE6E6E6FAFAFAEFEFEFE0DFDEDEDEDDDDCCA0DDB652E9C873F6F2E1EBEBEA E4E4E4F9F9F9F1F1F1E4E4E4F1F1F1F6F6F6E9E9E9E8E8E8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDEEEEEEE5E5E5F2F2F2F8F8F8E3E3E3EDEDEDF9F9F9EAEAEADFDDDEE0DBDAECE6DA FCF8E0FFFEF1FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC FBFBFBFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE0D279DED078DDCF76DBCD75DACC74D9CB73E5D67FEBDC86E0D17B DDCF78E3D880DFD57BE1D87CE2D87EDBD178DDD37AE4DA81E3D982E6DC84E7DD85DED47CDBD17B DBD276DCD375D8CF71D2C96EDAD076E0D67EE2D880EBE189DDD37CD9CF77DAD076E2D97FEFE188 E9DB83E7D981EEE389E4D97FEBE087EEE58BEAE287F0E98FF4ED93F2EB91F4ED93F6EF97F3EC95 F2EA94F0E893EFE793EFE793EFE794EEE694EDE593EEE695F0E797E3DA86ECE28AEBE18AE5DB85 DDD27FD9CE7DDFD484DBD07EEADF8DE8DE87EAE089DDD37AEFE48EE8DA86E6D983EEE18AEBDE87 E4D87FE2D67DE8DC84F2E58EF0E38CECDE8AF3E793F0E595F2E99AF1E899F2E99AF2E99AECE394 ECE394E7DE8FE7DE8FE9E091E6DD8EE2D98AECE394F1E999E9E18EEBE38CEAE48AE8E186E3DC81 DAD37BE6DF88EDE590E7E08DDED480DED47FE0D680E0D680E6DC86E6DC86E2D882E5DB85E6DC86 EBE18BF3E993F1E692EEE296EFE399ECE095EFE397F4E99CF1E697F2E798EBE08FEADF8EF0E693 F2E794F0E592ECE28FF1E696F1E696F4E89CF6EAA0F3E79EF8EBA4F7EBA3F1E59DF4E89CF9EDA1 F5EB9BECE492EDE592F1E995EFE793F3E894F5EA97F5E997F4E798F6E799F8E89CF8E99FF9EC9D F9EE9DF8ED9DF5EA9AF0E596F0E596E9DE90F0E497F4E89CEFE398F8ECA1EDE195F2E69BF4E99C F5EA9AF3E895F3E994F6EC96F7ED99F6EB9AF2E798F6EAA0F2E6A0EDE19AF0E79DEBE295F0E79A EAE192E9DE8EF0E593EDE18EE5D987EDDF8EF6E797F3E495ECE192EFE698F0E79AEFE69AF1E89C ECE398EBE198F3E9A0F0E69EEEE49CF7EDA6F3E8A1F7EFA6F6EFA6F2EBA2F0E8A0F2EAA3F7EFA8 EFE7A3F6EEAAF9F1ADEAE29DECE4A1DED591F2E8A3E9E098EAE299E0DC94C3C2828988547C7B56 3A381F2E2D1921210D0A0B000B0C00090B006B6B41A6A476B4B184E0DBA9DEDAA5EEEBB6A1A06E 29260C0806001A18093C391B4A49216B6A3F6F704285875371753B9B9D5FABAB68A19E58D2CB82 E8E196E4DB90DDD58EE9E09AE4DC95F8EFA9F7EFA8F6EEA6E5DD95EEE69EF2EAA1FAF2A9FFF9AF FFF7AFFFF8B4FFFDBBFFF9B6FFF8B7FFF7B6FAF1B0FFF6B5FEF6B7F7EFB0FFF6B7E8E0A4504A2C 2D2717241D075F5938D3CFA098925D373100ACA659F2EB9AF6ED98F4EB94F4EC96E4E08ED3CE7F 979244D9D68AEDE8A0ECE7A3E3DD9FEDE7ADE8E2ADCCC592BEB788C6BE92B7AD80BBB485DDDAA9 B0B18011130322270010160043461D686A38808242B7B96CCCC97ADED687E2DA8BE6DE8DEFE794 EDE390ECE28FF0E593F8EC9EFFF2A6FFF6ADFFF7B0FFF3ADF7EDA6FDF4ADF9EFA7FAF1A8F4EBA0 ECE396F3EA9CF8EFA0F7EF9EFAF2A1FEF7A7FBF4A8FDF5ABFBF3ABF7EFA7F6EDA8F8EFAAFDF4AF FAF2AAF5EDA4F9F1A7FCF5A7F7F09FEDE695EEE797F8F1A4F6EEA5F8EFAAFEF5B2FFF7B8FFF8B8 FBF2B2FDF4B2FFF6B3F9F0ABFBF3AAF5EDA4EFE79EF4ECA3EAE299F6EEA4F6EEA2F4ECA0F3EB9F F3EB9FF3EC9FFBF4A6F9F2A3F7F0A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7F7E7F2ECD0FCDECB F6DFC3EDE7BFF4F5D3FFFFEEFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3F0EFCFEFE2B5FCDCB4F7E5C2 F2F1D7FCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFFFFF7EEFCF0DAF3F0C2EDEDBAEBE9BEF5E8D5FEEEEEFFF9FCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAF1EEEECDE8E7B3E8E9AEE9EAB5EDEFC5FBFCE6FFFFF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEBEBEBD9D9D9EDEDEDFFFFFFFFFFFFFCF5EDF1DBBCE5C171DEB54CECDFC2F6F5F5 FCFDFEF8F8F8F1F1F1F0F0F0F4F4F4FDFDFDF8F9F9EFEEE7E1D4B1DAC581DBC56DEADC9EFBF9F2 F7F7F9F3F3F3FCFCFCF9F9F9F3F3F3F9F9F9FBFBFBF5F5F5F5F5F5FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF8F8F8F3F3F3F9F9F9FCFCFCF3F3F3F7F7F7FDFDFDF6F6F6F1F1F1F0F2F1 F6F7F1FEFFF2FFFFF9FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D37BE1D37BDFD179DCCE76DACC74DACC74DED078ECDE86 E0D27ADBCD75EADF86DAD075DBD178E7DD84DCD279DBD177E6DC83DDD37AE3D980EDE38AE4DA81 DED47BDCD378E6DD80DDD479CBC267DAD176E2D97EE7DE83E2D97EDAD077E3D97FD6CD72E7DF83 FBED95E6D880E6D880F1E68DE2D77EF2E78EE7DD84F3EB92EAE389F3EC92FEF79DF0E98FF1EA93 F5EE96F8F199F8F09BF5ED98F4EC98EFE794F0E895EAE28FE7DF8EF6EE9DEEE590EDE489EDE38A EEE48EEBE18CE8DD8BE8DD8BE7DC8AE8DE88EEE48DF1E78FE1D87DF5E78FEADB86E8DA82EDDF87 E8DA82E6D880EFE189EEE087E9DB83EEE088F3E48EECE08BEEE494EEE596EAE192ECE394EEE596 E8DF90EAE092E2D98AE8DF90F3EA9BF0E798E8E08FEBE391EEE693E1D984E8E187EFE88DE6DF84 E3DC81E6DF85E5DE87E7DF89DFD784DED581F6EC95F7ED96DED47DDDD37CDED47DD6CC75DBD17A E4DA83F2E891F7ED96E9DF8AEDE294EEE298EBDF93ECE094EFE495E9DE8EF5EA98E7DD89E7DD88 EDE38CEDE38CEAE08AE8DE89F3E895ECE191F5EA9CFBEFA5EFE399EEE29AFBEFA7F7EBA1F1E599 F1E697F0E695EDE590EDE590EFE792E9E18CF2E795FEF2A0FCF09EF6E99AF3E495F3E396F4E598 F4E798FAEFA0F6EB9BF1E697F3E899E5DA8BF2E69BF4E89CF4E89CF3E79DFFF5ABF2E69BE7DC8D EFE495F6EB9AF2E893EFE58EF1E790EAE08BF6EB9AF2E798F0E497EEE299EADF95E8DF93EEE598 F3EA9DE8DF90EFE494F7EC9CF6EA98F1E593E7D988F1E291F2E392F0E594F6ED9EF3EA9DEFE699 F4EB9EF1E89DF9F0A5F3EA9FF5EBA3F6ECA4F2E8A0FAF0A8F9F1A9F1E9A1F4ECA4F7EFA7F3EBA3 F8F0A8FAF2AAF2EAA1F9F1A6EFE79CF8F0A5E9E095EEE195EBE091F3EC9DD3CF858C894B858554 54543421200C2A28190C0D050D0F000A0A00777643DFDEA8999660C4C085A4A06184813EBFBC7A FFFDC477754B0B09000E0C0049462943411A4C4B205B5D2E8789568C90569698589B9B589D9C53 E5DF95E4DC8FD5CC7FE6DE95F6EEA6EAE29AF3EBA3E6DE96E8E098ECE49CF9F1A9EDE59DE1D990 E7DF96EEE798F0EB92F2EC96ECE78DECE68EF0EB92F2EC93F7F299EEE892EDE791F7F19BD5CE7C 5853221510000D09004E4A20D3D099F7F2B0DAD489A09B4AEFE995EDE590F4EC97EFE794F4ECA1 CFCA7FB1AA61DCD58FDCD895F0EBAEFFF9C3CDC6956A6238302709332A0C393013372E114C4624 A4A17CA5A67D141603232804161B033F44205256298F925A868B469E9C53DBD388EBE398E6DE8F E9E190EEE795EDE391F1E696F7EC9DF6E89DF2E49AF1E49CF7ECA5EFE59EF4EAA2F2E8A0F8EEA5 F6EDA3F6EDA0FCF3A5FDF4A5F7EE9FF6ED9EFBF2A4F1E9A0FBF3AAFFF7AFF9F0ABF3EAA7F2E9A6 F4EBA7FEF6AEFCF4ABFBF3A9F7F0A2F1EA99F6EF9EF9F2A2FCF5A9FDF5ACFCF3AEF9F0AFFEF4B6 FEF5B7F8EEB0FCF2B4FFF6B4FAF2ABFBF3AAF3EBA2F4ECA2FCF4ABEDE59AF2EA9FF8F0A5FDF6A8 FAF3A5F8F1A2F9F2A4F4ECA0F6EEA5F9F1A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFEF9F7 FFE9E9F5E4CFE9E5B8EDEEBBF6F6CEF7F7DDF9F9EDFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF6F8F8E9F7F7E7F2F3D9EAEABFECE3B3FCE4C6 FEF1E2FEFDFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFEF7FEFEE7F3F4CDE9E7B7F3DEC1FCE2D5FAEFE1 F9FAEBFEFEF6FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFCF9FEF8EFFAF7EBF2F2D6E9E9B6E3E3A5E6E6B2F2F2D7FDFEF9FFFFFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFDFDFDFFFFFFFFFEFEFFF6F7FCE2D9EBC47FDFB345EBE0AC F6F6E5FDFEFBFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFBFCFAEFE4E6C782DEC16AE2D793EFEFCD FDFCF7FEFEFFFEFEFEFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFEFEFEFEFEFEFFFFFFFEFEFEFEFEFE FEFEFEFEFEFDFFFFFEFFFFFEFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D57DE2D47CDFD179DFD179E0D27AE5D77FE1D37B E6D87FD7C971E6D77FE8DD84E8DE85D1C771E3D982D9CF78E2D881DED47DDED47BE1D77EE0D67D E4DA81E4DA81DCD279E0D77CD9CF76D3CA6FE5DC81EAE186E4DB80D6CD70DDD478E5DC81DBD277 DDD479EEE088DFD179E8DA82F5EA91F2E78EF2E78EECE289E5DC83E6DF85EFE88DF3EC92F3EC92 F7F096ECE58BEFE88EECE58DFAF29CE6DE89E8E08BEAE28FDDD582ECE491F3EB98EDE48DE9E085 EDE38AE3D980DDD37EEBE08EECE18FF3E895E2D882DFD57EEDE38AE9E085F2E58DEADC84EADC84 EDDF87E7D982ECDD89F1E28EF2E38EECDE86E6D77FE9DB83EDE08AEBE18FF0E897EDE594E5DD8C E8E08FF2EA99E4DC8AE4DC8BEAE291F1E998F2EA99EDE594E1D987DED682E6DE88E9E389EAE388 DED77CE4DD82E6DF86E4DC86E7DF8DEBE392EEE591F0E68FE8DE87E9DF88F2E891EAE089E0D67F E9DF88E6DC85D8CE77DDD37CEAE08AF9EE9FFEF1A6F4E89CF2E798E7DC8DE9DE8EEADF8DE8DD8A E5DB86EFE58EF4EA92EAE089E9DF8AEEE391EEE393F4E99BF9EDA2F3E79DF1E59BF5E99FECE095 EADE92F0E595FBF19FF1EA92EDE590F2EA96F1E997F6EB99F2E596F5E899F8EB9CF7E899FEF2A3 F5E697F2E594EDE290F2E797F6EB9BF1E696F8ED9EF0E596EEE395F2E69AFAEEA2F8ECA0F2E699 ECE191F0E593ECE38DF5EB96F8EE99EAE08BE9DF8AECE190F2E797F8EC9FF4E89CEEE396ECE394 F0E797F7EE9FF0E798F3E899FCF0A1F9EC9EF4E798F0E292F1E290F7E895F6EB9AF2E99AEFE697 EFE697F2E99AF6EDA0FAF1A5F7EFA3F3EA9FF0E69EF2E8A0F9EFA7EFE8A0F8EFA9F2EAA2EAE29A EFE89FF3EBA2F9F1A7EFE79CFEF7A9FCF6A7F0E99BFBF2A2F9EC9BF1E694EDE5959E994E8F8F52 43431538381B2E2D1B2C2C1F201D0E100F00504F2AD9D79E918F53C9C587F0EBA8E8E39ACBC67B 99974CE0E0A4D1CFA50D0C00272619474427626038615F355D5F309EA06D868A509B9D5B93934E 9C9A50D9D386BDB667CDC474E8E095E6DE95E0D88FE2DA92EDE59DF0E8A0F1E9A1E7DF97EBE39B E7DF97F3EBA3E7E08FF3EF90F0EB8DEFEB8AEDE988E8E483E8E483EFEB8AE7E382E2DE7DF1EE8C E6E283BFBB76625E2A585522C7C383F9F6AED3D082C4C06DEAE590EDE791D9D17DDED684F0E89A ECE49DE1D896A09855ECE4A5E4DDA0BAB37F837D4D2C25050800001009030D0401120900110A00 0400001814004C4C2E1C1D031B1E021316013C3F235C613C7E83537D8248A8A764E6E095EBE398 E7E091EBE493FCF3A3F5ED9DF5ED9CF4E899EFE396EFE397F0E49AFBF0A8F5EBA3EEE49CEDE499 F1E89DF4EBA0FCF3A6FDF4A7F9F0A4F3EA9DF1E89BF4EB9EF5EDA5F6EDA7FDF4B0FFFAB7FCF3B2 F1E8A6F8EFABFFF9B2F6EEA5F7EFA5F6EFA1EBE494EFE897F4ED9DFAF3A7FDF5ADFAF1ADFBF2B2 FEF8BAFEF5B8F9EFB1FAF0B2F8EEB0F8EFAAFBF3AAFDF5ACFBF3AAF8F0A6FAF2A7F2EA9FF2EA9F FCF5A7FFFAACFBF4A5FEF8A9FEF5AEFBF2AEFBF2ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFFFFF7F9FBF5EEF5F4DFEDEDC2E7E7ADE7E7B1ECECC7FBFBF2FEFEFCFEFEFCFFFFFDFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFEFEFCFEFEFDF4F4DEE9E9BAE5E5B0E9E9BDF1F0D3F8F5E4 FEF5EAFFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FBFBEEF7F4E0FBE6CEF9DFC0 EEE3B9EDEEC1FCFBDFFEFEF0FEFEFBFFFEFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFEFEFC FEFEFCFFF3E7FDE7CDEFE5BBEBEAB8F1F1C2F5F5D0F5F5E0FBFBF2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDF2EDEDD299DDB955 DAD178E7E8B3F9FAEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F2FBDFCFE6BA61E3C164EFE5B9 FAFCF4FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D279DED078DFD178E1D37BE4D67DE8DA82 D8C973D6C871F2E38DD7C972E5D984DBD07CDDD380D8CE79D8CE79DCD27CDDD37DE9DF87ECE28A E5DB84E4DA82E7DD85E3D983DFD57FDBD17AE0D67DE7DE84E3DA7FD4CB6ED8CF72DCD377E1D87E E7DD83DED57BEFE18BE5D781ECDE87F1E58EEBDF88EDE28AF4EA92EDE58DEAE38AECE58DEEE78E EDE68DEAE389F7F096F8F197E6DF85EFE891F0E892EAE28DE9E18CE6DE8AE9E18EF2EA97ECE38C EBE286E6DD83E4DA82E7DD85E9DF8AE8DE8AF3E994E6DC85DED37BE3DA7FE7DE83F2E78EEDE188 EFE28BEEE18AE7DA86F0E38EE6D986E4D682E2D57EE5D881EDE088F3E791E9DF8DECE493F0E897 F0E897EDE594EAE291ECE493EAE291E6DE8DE4DC8BE9E190EDE593E5DD8AE2DA85E6DE88E5DE85 E5DE84E2DB80EDE68DE5DE86DFD784E7DE8EEEE595EDE391EBE18CEAE08AECE28CEFE58FEEE48E EDE38DF1E791EAE08AE0D680E4DA84ECE28EE5DA8BF3E89AEFE496EBE091E3D888EBE090EDE291 EEE391E7DC89E6DB87EDE38DEEE48EF1E791F4EA96F1E694F2E798F1E699EFE398F8ECA2F3E79C F6EA9EEEE294E8DD8EF4EA98EDE592EFE793F3EB98EFE795F0E594F9EC9DFBEE9FF7EB99F3E491 F6E692E0D37DEADE8BEAE08CF1E793F5EA99F3E897F7EC9AF0E595EFE494EBE092EADE91EEE295 F5EA9BEEE393F4E996F0E692E6DC88E9DE8BF3E895EADF8DEBE090F0E595F4E999F3E79BEEE296 E9E090EEE596EDE496ECE395F1E598F5E99CF8EB9DF7EA9AF3E595F1E28FF1E38FF1E594F0E797 F2E999F3EA9BF4EB9CF3EA9CF5ECA0F3EA9EF2E99EF4EAA1F4EBA1F2E89FECE39BF1E7A2EFE69F EFE69FF7EEA6F9F0A7F6EEA3F1E99CF2EA9DF2EA9AEFE798F2E998FAEE9BF6EB97EAE393ADAB61 7273376B6D403638192D2D18252412141201070502A19D6DCAC586BDB877EAE4A2EEE69FF5EEA2 F8F2A4959047B8B6778280520E0D002826163835175D5B3469673D4244168E915D91955AA4A665 999A53AAA85DD9D483D5CF7DCBC372E6DF93E9E197E6DE95E9E198F1E9A1F3EBA3E8E098E4DB95 EAE19BEEE59FFCF4AEF5EDA1F0E994E2DC86E5DE88F0E993F3ED94F1EB93EEE78FE2DC83D8D279 D6D076CDC76DDFDA8BC6C37BD4D285E0DF8EC6C26CC6C26ADEDA81EFE88FEEE792E9DF8EEBE193 E6DC92EBE0A0D3C98AA3995BA79E63413A0B3B34045751204E472E8982626D664E2C24110D0500 1812095651392925161D1B0227260D191A052626125656434A4B2E5F6339727642979657D8D189 EDE79DEDE699DDD787EFE797EEE695EEE695EFE596F0E598F1E599F1E59BF3E99FF3E99FF3E99F F4EBA0F7EEA3FAF1A6F0E79BEEE59AEEE599EFE69AF3EA9EF6ECA3F5ECA7FDF4B0FAF1B0F3EAA8 F8EFAEFFF9B8F8EFABF9EFABF8F0A7EFE79BF0E999F7F0A0F2EB9CF5EDA1F8F0A6F9F0AAF7EEAC F6ECADF8EEB0F9EFB2F8EEB0FEF4B5FEF6B6FBF2AEFBF3AAFCF4ABF9F1A8F8F0A7FAF2A9F5EDA3 F5EDA1FBF3A7FDF6A9F8F1A5FAF2A7FDF4B1FBF2B1F9F0AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF3F3DAE7E7B7E6E6B2E9E9BCF1F1D4F2F2D9F4F4DCFBFBEB FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFCFEFEF2F8F8E4F2F2D9F3F3DAEDEDC5E7E7ACE4E4A9EBEBC3F9F9EC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF2E6 FAE8CAEEE6BAEDEAB9FBF1CAF9F3D3F5F3DBFBF3E2FFF7EFFFFDFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F7E9 F2F2D9F3F3DAF8E7CEFCDCC0EEE0B4EDECC0F9FADCFFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF9F2E6BD E4CD7BD3C14EE0D683F7F6DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE8DAF1CEA7E1B95AE6CB78 F8EFD6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8DB7EE1D478DFD277E1D37BE3D57C E4D67EA5964081721DB3A451E5D582F4E896E2D787D8CD7DDACF7FC5BA68DCD17FD8CD7BE4DA86 E9DF89E0D67FDDD37CE4DA83E2D784D9CE7ED9CF7CE0D67FDDD37ADBD177C9C065CEC568D8CF74 E2D87FEDE389ECE38BEBDC87EBDC87F3E38EF3E791F0E48EF6EA94E9DF88F2E992FAF39BFAF39B F3EC94EDE68EF2EB91F0E98FF5EE95F4ED92F6EF97F6EF97E9E18DE7DF8AF0E894E9E18EF5ED9A E9E089EDE487EAE186EEE58BF3E992EEE48FE7DD88EEE48FE6DC85E4DA80E3DA7EE4DB7EF2E78D F1E68DF4E893F0E490E8DC8AF3E795F0E394E8DC8AE6DA86E9DD88E7DB84E5DB83DED784E5DD8C EBE392EBE392E7DF8EE5DD8CF1E998EBE392E6DE8DE4DC8CE6DE8DE6DE8DE4DC89EDE592E7DF8A DED67FEBE48CEEE78FEEE690EDE590ECE493F1E89BEEE698F2E898F0E691F1E693F2E895E9DF8A EEE490E9DE8CEFE590EFE490EADF8DE8DE89E3D886E1D686EEE394ECE192EDE293E5DA8BECE191 EADF8FECE191EADF8FE9DE8EEFE494F3E896F5EB95F0E691EBE08EEEE394F5E99DF8ECA1F8ECA2 F5E99DF8EC9FFAEFA0F0E595F3E997EFE794F1E997F3EB9AEDE594EEE393F6E99AF8EB9AFAEE9A FCEF97F7E990D3C76CE9DD87E9DF88EAE08AEEE48FF0E692F2E893F4E997F1E694EBE090ECE191 F3E898FBF0A0F7EC9AE9DE8CF0E593F6EB99F3E896F8ED9DF5EA9AF5EA9BF2E798EDE393E7DB8F E3D889EEE695F3EA9BEAE192EDE497F5E99DF3E69AF5E79CF4E799F3E595F0E18EF1E38EF1E693 EFE796F2EA98F3EA9BF4EB9CF4EB9CF1E89BECE397EDE499F5ECA1F8EFA4F3E9A0F4EAA3F5EBA6 F3E9A4F7EDA6FCF2ABFAF0A8F3EA9FF4EBA0EBE295EEE598F5EC9DF1E697FDF09EF2E998D9D584 A3A05A7C7D436E7145474A29383820302E1313110237330DDED8A2AFA964D6CF89F2E9A5E8E098 E2DA90FAF3A797934ACCC98C5E5B2D060301322F1D1714015D5B337A794F6E6F41848652BCBF84 AFB16E9D9E56CDCB7FDFDA88D4CE79E4DC88E8E194ECE49AE9E198E8E097ECE49CECE49CF6EEA6 EDE49FEBE29DEBE29DEFE6A1EEE59FEDE39BEBE29AF0E69EF4EAA1EEE49BF4EB9FF2E99EE9E093 F6EDA0E8DF92C4BB6CB5AD5DADA8549F9944928D33BAB559EBE687E9E287F1EA91F4EA96EFE495 EFE397E9DC95F5E7A9EEE9AA948B4A8D844381783BD1CB8FF0EBB5E0DBADF8F3CE767153181200 0D07002D2818D8D4B2C0BD9D6460442A250F1A17062624153F3E2B37371C595C337E814E919052 BFB873E1DA92F2ECA0DBD587F0E999F3EB9BF3EB9AF6ED9EFAEFA2FAEEA2F7EBA1F6EDA2F7EEA3 F9F0A5F8EFA4F8EFA4FBF2A7F9F0A5F3EA9FF0E79CF4EBA0F8EFA3F7EDA5F7EEAAFCF3B1F0E7A6 DFD695E7DE9CF8EFAEF8EFABF4EBA6F4ECA3F1EA9DF3EC9CF8F1A1F9F1A5FAF2A9FAF1AAFAF1AD FCF3B2FAF1B1FAF0B2FBF1B2F9F0AFFCF3B2FBF2B1FAF1AEFCF3AEFBF2ACF8EFAAF8F0A8FAF2AA F8F0A7F6EEA5F7EFA5FAF2A7FBF3A7FAF2A8FFF6B3FBF2B2FAF1B0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF9FCFCF5FBFBF2F4F4DEE4E4AFE1E1A4E4E4AA F5F4CAFEFCE3FEFDF3FDFDFAFDFDF9FEFDFAFFFDFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FFFDFBFEFDF9FDFDF9FDFDF8FEFEEFFCFAD9EDECBAE0E1A3E0E0A3ECECB8F8F8D3FCFCE8FCFCF5 FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFDFBFEFCF7FCFAF3FDF3E3FDE4C3F0E1B0E6E1A8F6DEB6FEE9D2FEF8EFFDFEFBFDFDF9FEFDFA FFFDFCFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFDFFFDFCFEFDFAFDFDF9FEFEFBF9F9ED ECECC2E0E0A0E1E1A3EEDFBBFCE0D7FDF0EAFCFBF4FEFEFAFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FDFBE5F6ECB7E1BC4DE7C866F7EDBAFFFFEEFFFFFBFFFFFFFFFEFEFDFBF5EFDDB0E0C170DCCB78 E7E1AAF7F6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D374DDD071E1D476E6D97E E8DA81D9CB75BFB05DBEAF5D857525C1B161F5E89AEBDE94D7CA7FD5CA7B807527CCC072E5DA8A E1D685E6DB8ADCD27ED7CD78DAD07CDCD181DDD186DFD485DDD27FD8CE78E0D67DE6DD82DAD176 DFD57CE2D881D7CD77E2D882E5D681E9DA85EFE08BEEE28CECE08AF1E58FE0D67FECE38CF3EC94 F1EA92EFE890EFE88FF9F298F2EB90EFE88DEDE68CE9E28AF4ED95DFD880E2DA85ECE48FE6DE89 EFE792E1D980E9E083EFE68BF3EA90F2E890EFE58FE8DE89E7DD88E4DA82EFE68CEBE287E4DB7E F2E88EF0E78FF5EB96F2E795E8DD8EF3E899E9DE90E5DA8BEDE392F2E894EBE18AEAE089E0D884 EBE390EDE591E6DE8BE8E08DEFE794ECE491E5DD8AE9E18EF1E995EAE28FE2DA88E6DE8CDCD482 DDD581E2DA85EAE28DE5DD88EAE28FEBE292E9E093F0E69CF1E89DF2E799ECE190EEE393F0E595 E8DD8CEDE291ECE191EFE493ECE190E7DC8CECE190EFE494EEE393F1E696ECE191F4E999EEE393 EBE091EFE495ECE193F0E597F4E99BF1E698EFE494EEE48EEFE58FF2E895F4E999F5E99DF4E89C F0E498F7EB9FF1E598FDF2A3F8ED9DF5EB9BF3EB9AF4EC9BF4EB9CEEE597F4E89AF4E899ECE08E EDE28AF3E78BF4E788DCD170F3E88CF0E68DE9DF86EBE189F2E890F2E891F8EE98F0E690EDE28F F2E795F3E895EDE290EFE492E9DE8CF4E997F9EE9EF4E999F6EB9DE9DD90F1E599F5E99DF3E79B EEE296EAE090EEE695F0E798E7DE8FE9E093F2E69CEFE399EEE096EEE193ECDE8EEFE08CF3E58F F4E895F0E897EEE695EFE796F3EB9AF8EFA0F9F0A2F2E99CEDE497F2E99EF5ECA1F1E79EF7EDA6 F8EEA9F3E9A4F2E8A1F3E9A2EDE49CF2E8A0F6EDA2EEE69BF5ECA0FDF5A8F6ED9EF3E799F0E899 DAD78C9898539EA1675256297378544A4A2A35320F0A05008F8955EFE8A9BDB56CF3EBA3EFE5A0 ECE29DEBE29BDED68F87813ECFCB908380530E0A002B2915312D0F5F5D365C5B31A4A678747642 A5A96DA1A461AEB067E0DF90D4CE7CD3CD77EBE28FEAE396F0E89DECE499ECE49BEEE69DEDE59C F3EBA3EFE6A0EAE19DEDE4A1EAE19EEDE3A1ECE1A0F5EAAAF5EAA9EEE4A0EAE09BE1D691D8CE88 E8DE96F4EAA2E7DD95E3DA8FE9E092E5DC8AE4DC88E5DD84F4ED92EDE588DED578F0E78CF7EC98 EBDE8FE9DB90F4E7A0E4D795F0E5A1ABA15AF1E8A1EDE69DECE8A1E6E2A1DCD99DEAE7B3848156 2B280C1A1904686639EDEBB8CAC79A76724C130D001A14021E1A0C44412F59583C53562A72773D 999957C3BF79DED791F6EFA5E3DD90F1EA9AF3EC9BF1EA99F3EA9BF6EDA0F5EC9FEEE59AF3EA9D F6EDA0F6ED9FF4EB9EF7EEA1FBF3A6FFF7ACFAF1A6F8EFA4FBF2A7FCF4A8FAF0A8FAF2B0FBF2B3 F8EEB1F5EBADF8EEB1FDF4B3FEF5B1FCF3AEEFE79DF6EFA2F6EF9FE9E293F7EFA7F9F1AAF8EFAC F9F0AFFEF5B5FCF3B5FBF1B3FCF3B1F8EFAEF9F0ACF5ECA8F7EEABFBF2AFFCF3AFF9F0ADF8EFAB FAF1ABF8F0A9F6EFA6F4ECA3F8F0A8FEF6ADFEF5ACFFF9B4FEF6B2FDF4B0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF2F0F0D3EEEECB F0EECAFAEDC8F9ECC7F0ECC6EBECC5EEECC7F7ECD1FFF0E0FFFBF8FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFF6EDFDEDD9F2ECCBECECC6EDECC5F4ECC6FCECC8F5EDC9EEEECBEEEECAF5F5DAFDFDECFFFFF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFAF5FEF0E0F6EED3F1EBCBFBE0C9F8E1C8F0E9C6EBEDC5EFECC8 F8ECD2FFF0DEFFFCE9FFFFF4FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5F5FFEDEAFFECDFF9ECD3F0ECC9EBECC5 ECECC3EDEDBDEEEEBDEEEEC9F5EEDBFEF0EDFFF9FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFF6FAF6D9E4D07EE2C665EACF77F6E7B1FEFCE8FFFEF7FAF5E8EEDDB1E4C880DEBE67 E7DBA2F2F1D7FBFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D472DACE6CDCCF6F DCCF72D9CB72AD9E49C1B25EFFF09FD2C174968639DED085E0D38BD2C67EEDE196C8BC71D8CC81 D9CE7FD9CE7FE3D887E2D785E5DB88E7DC8ADACE82DCD088DDD184D6CB7BDBD17CE1D77FE6DC83 DED57BE2D87FE2D881DACF7BE3D985E9DA85EDDE89F1E28DF1E58FF0E48EEEE28CEEE48DF7EF97 F9F29AF4ED95F5EF96FCF59BEEE78CF6EF94F8F196F0E98FE3DC83F6EF96E7E088EFE891EFE892 F1E994F2EA95E7DF85E9E083EBE287ECE288ECE288EBE18AECE28BE9DF88E7DD84F4EB90ECE388 E9E082F3EA90ECE58EF0E994F2E998E8E090EDE597EBE196E6DD8FEDE695EEE592E4DD86E8E189 E8E08CF0E895EFE794EAE28FEBE390F1E996E5DD89E2DA87EAE28FF4EC99EBE390E4DC89E7DF8E DBD382E2DA87EBE38FEAE28EE0D885EBE392E9E091E0D78BE6DC94F1E7A0EFE498EADF90E8DD8E EADF90EDE293ECE192EADF8FEDE292E4D98ADCD181E5DA8BF3E898F1E696F1E695EADF8DF2E797 EDE292ECE192F4E89BF1E59AF5E99EF3E79FEDE199EFE396EBE18AF1E792FCF29EF9EE9FF0E498 EFE397F4E89CF9EDA2F6EA9DECE191E9DE8EF5EB9BF2EA9CF7EEA1F7EEA3F0E89BF6EA9DFBEFA0 F1E591ECE188EFE284F3E683ECE27CF5EB8CF2EA8DECE388EEE58AF6ED92F2E88FF8EE96F4EA93 F4EA94F7EE97F4EA93ECE18DEFE492FCF1A0FEF3A2F5EA9AF3E89AF7EBA0EFE399F5E99EF4E89E F0E49AEEE297F0E596F3EB98F1E998EDE495E9E193F2E69CF6E9A1F3E59BF4E69AF4E695F6E691 F9EB95F5E996EFE796EFE796F0E897F4EC9BF7EE9FFCF3A5FAF1A2F6EDA0F4EB9EF2E99DEFE59C FCF0AAFFF4B0FAEEAAF4E8A2F3E7A1F0E49EF2E69FF7EBA3F9EDA4FDF2A9FEF3AAF8EDA2F4EB9F F5EEA3EBE99FA5A7649EA26A656A3D636742242402252200292300D4CC8FE6DD96BEB669F0E49B EBDF9BAA9D5A6F6321625816978E50FDF8C0CAC79C1310001210024A4729797750737148999B6C 6466328B8F53B2B672D2D489E4E493D9D482EBE68DEBE38DEDE697F2EA9EEFE79CEFE79DF4ECA3 F3EBA2F6EEA6F5ECA6EEE4A0F0E7A4E3DA98EDE4A0F8EDA7F9EEA8F6EAA3F4E9A0F8EDA3FBF5A8 F6ED9FE7DC8FE7DD8FEBE091EEE394F8EEA2E4D78EE9DC8EF2E695EFE38EF6EC93E9DC83EFE28A F4E593EDDE90ECDD91F4E59DF7EBA2E5DA908B8234E2DA8BE8E28FDBD986E0DD8FCECE84BCBD7C BFBF869B9B678B8C53979854A6A5648F8E526D693A221D00362E19322A1B2C271350502F535624 6E753290924EC3BE7BD6D18AEAE49BDCD68BE3DD8EF0EA9AF4ED9CF3EA9BF6EDA0F6EDA0EFE69A EFE699F5EC9FF9F0A3F7EEA1F9F0A3FFF7AAF7EEA3F9F0A4FBF2A6FBF1A8FBF2A8FBF1A9FFFABA FEF5B6FEF4B6FFF6B9FBF1B3F4E9ACF7EEACFAF1ADF1E9A0F9F1A3FFFAAAF7F1A4F4EBA6F8EFAC F8EFADF5ECACFAF0B3FDF3B5FFF6B8FFF8B6FDF4B2FDF4AFF9F1A9F7EEAAFBF2B0FDF4B3FCF3B1 F8EFACF8EFABFAF1ADF6EDA7EFE6A0F3EBA5FEF6ADFBF3AAF8F0A6F6EFA2F5EEA1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FEFFFDFEFBF7FFEAD5F6E2BAE7E0A9DFE1A2E4E1A6F3E1B3FFE6C8FFF5EAFDFAF2FAFAF0FAFAEF FAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAF0 FAF9EFFCEBD8FBDEBCEBDFABE1E1A4E2E1A4EDE0AEFDE4C5FFF2E4FEFFFEFEFEFDFFFFFEFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFAF9FFE9EAF5E1CCE6E0AEDFE1A1 E5E1A7F4E1B3FFE7C3FFF6D2FDFAE1FAFAEEFAFAF0FAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEF FAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAF0FAF9EFFCEBE3FFDDD5FFDFC8F5E1B8E6E1A9 DFE0A1E5E5ABF3F3C8FFFFE7FEFEF8FFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFBFAF1E8E9BBDFCE77DEB947EBCE72F8EEBDFAF2D3F2E3BDE0C06CDEBC63 E3C67CF4EACEFEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCF71DACD6F DFD277E1D37BDCD07AA99D4ADCCF80D7CA7CE2D58866580DD1C37AE6DA92DED288D8CC82EBE092 D4C97ADFD485E6DB8CEADF90E7DC8BE5DA88DED47FD6CA7CDFD387DFD484DCD180E9DF8AE7DD86 DBD179E4DA81E5DB83E0D67FE5DB86E3D984E0D17CE4D580EADB86EFE38DF2E68FEFE48BD6CC75 EDE58DFAF39BF4EC95EDE590EDE590F8F09AF2EB93F8F199F6F199CCC56BCEC76DF0E98FF8F197 EEE78EF6EF97F0E991EFE68EF2E98EE8DE86E7DD86EBE18AECE28DF0E691F0E68FEDE38BF2E88F E6DD82EEE58AF3EC94E9E38EECE693F0E999E8E191EAE397E4DC91DFD88AE7E090E5DE8DE1DA88 EFE995E5DD8AE7DF8CE9E18EE9E18EE7DF8EE4DC8BE1D988E3DB8BEAE28FEDE592EAE28FE0D886 D2CA7AECE493E9E190D9D080E6DE8DE8DF8FECE394F4EB9EEAE195E7DE93EDE39BF1E69CF3E79B ECE094EADE93F3E899EBDF92E2D78AF0E595F1E697E7DC8DE7DC8DEEE394EADF90EFE494E7DC8C E9DE8FE6DB8CEEE394EEE296F0E499F4E8A0ECE098ECE099FAEEA4F0E590EEE28EF3E896F4E998 F6E99AFAEFA0F0E496F0E395F4E99ACDC272C7BA6BEDE292EFE699F8EFA2FAF1A4F3EA9DF4E89C F6EA9BF0E490F4E891F3E98BECE280E1D673EBE181ECE386EAE086F1E68CF7EE93EEE48AE6DB82 EBE18AF0E58FF1E58FF1E690F2E893F2E898F3E89AEDE495F7EC9DF9EDA0E9DD91F5E99DF4E89C F1E598EEE296F2E599F6EB9EF0E797EAE291EBE294E4DB8EEBDF95F3E69CEEE096F2E499F2E597 EFE391F1E28FEEE390EEE695F1E998F4EC9BF5ED9CF5EC9DF4EB9CF7EEA0FBF2A5F9F0A3F7EEA1 F6EDA2F0E69EFBF0A9F7EDA6F1E49EF0E59EF1E7A0F3E6A2F4E8A2FCF2ABFEF3ABF8ECA4F2E8A0 F6ECA6E7E09ADDDA95A3A463787A438C8F6047492243431D38350E2F2A00DED998DAD78FA9A053 F7EDA6EADE9D7E7031A29455B9B06FDBD392E2DEA1FFFFCF6A68420E0C003C3C1E6764437C7A55 7D7F507B7C486D6F31DADB96DCDB91DFDC8DE8E391EEE692EFE693F2EB9EF4ECA3EDE59CEBE397 EFE79CEEE69BF0E89FF4ECA4F0E8A0F6EDA8E8DF9CF5EAA4F5E99EF3E79BF3E79BF4E99BF1E696 DFD483E1D684F9EF9AF5EB96E9DF88E8DE87F1E496EFE198F2E497F3E697FCF19CF0E48FFAEB96 EFE38EEBDE8CF4E496F2E495EDDE93E5D98DFAF1A4898031C8C171E5DF8EDFDA86D8D681D6D483 95964AACAD689997599796559191457F7C34D2CE8F9F9B6A2C2604241E062D26143B36205E5C3A 595C29828746929350B7B26ED0CC85E5DF94DFD98BE9E292F1EA9AF2E99AF0E79BF5EC9FF6ED9F F1E898E7DE91EFE699F5EC9FF1E89BEBE295ECE396F4EBA0FAF1A7FCF2AAF8EEA8F6ECA7F8EDAB F8EEB0F7EDB0FCF2B5FFF8BAFEF5B5F9F1AFFFFCB8FFF9B2FBF2A9EDE699F4ED9FFDFBAEF8EFA9 FDF4B1FBF2AFF6ECAEF8EEB0FBF1B3FDF3B5FCF2B4F6EDACF3EAA7EDE4A1F2E9A8F9F0AFFFF6B5 FEF5B4FAF1B0F6EDABFAF1B0F6EDAAEBE2A0EEE5A2F8EFACF5EDA5F9F1A8F7EFA4F7EFA4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFDFFF9F3FCF6EAF8F5E4F5F6E3F7F6E1FBF5D8FFF2CEFFE7C8F3E3BBE6E3AD E3E3AAE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3AB E3E3AAE4E3ABF0DFBDFCDDD0F9ECDDF6F5E2F6F6E3F9F5E6FEF7EDFFFBF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF8F9FCF6F0F7F6E6 F5F6E3F7F6E0FCF5D7FFF1CCFFE6C0F3E3B5E5E3ACE3E3AAE3E3ABE3E3ABE3E3ABE3E3ABE3E3AB E3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3AAE4E3ABF1DEB4FEDEC2FFEDDEFCF5E8 F7F6E5F5F5E2F7F7E5FCFCEFFFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF9FAEEECE7BCDFD07EDEC056E3B949E3B74BE1B64FDCB553 E7CE8FF5EBD1FCFAF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECE79 D2C36EDED280E1D586D4C97D82772DC6BC73EFE79EC1BB715E570CD3CA81DACE88C1B569CDC270 E1D781EEE48DE5DA86D9CE7FEADE90D9CE7FE3D984DED47CDFD57EE4D985DBD17AD9CF79DDD37C E0D67FE4DA83E6DC85E8DE87E7DD86E2D881DDD37CE1D27DE5D781E8DA82E7DC82EBE086F5EA90 C8BE65E8E087EFE890E5DC89EAE190F5EC9FF6ECA2F4EB9FEFE696F3EB97F2EB93E6DF85F1EA8E F4ED91F3ED91EFE88DEFE88EF0E791F0E594EEE393EADF90EDE293E8DD8CEADF8DEADF8CE6DC88 E8DE89ECE28CEBE18BE3DB88E6DE8CEFE796EDE495E9E091F0E799ECE396E4DB8EEFE699E6DD91 E6DD91EEE598E8DD8BEDE290F4E999EFE494E8DD8FECE193F0E497F0E596EEE393EBE08FEBE08E EBE08EEBE08FE9DE8FE4D98AE4D88AEEE296F4E79DF3E69BEDE195E6DA8CECE191F1E595F1E699 F7EBA2EFE39AE5D990EEE297EBDF95EBDF96F0E498F5E99DECE094E2D68BF0E498F9EDA4F1E59D EFE39AEFE398ECE094E9DD90EDE195ECE095F1E59BF2E69FF1E59EF5E99FF4E695EBDC8AF2E593 F7E997EFDF90ECDE8EF5E797F1E292ECDE8EF3E694F7E897EFE392F5EA9AF5E99AEFE495FCF1A2 FAEF9FF4E999F5EA99F9EF9AF5EC94E6DC81E2D97BF8EC93F7EB92EBDE86F3E48CFFF39BF3E690 F9EA96EEE08DEDE08CEEDF8DEEE08EF6E89AF7EEA6F4EBA3EDE599F2EA9CF5ED9CECE492F3E895 F5EA99F4E999F1E497EFE196F0E398F8EC9FF3E79AEEE196EEE296F0E498EEE296EEE397F2E69A F1E699F1E598F3E79AE8DF90E9E18FECE593F0E897F4EC9BF1E998EAE191EBE293EFE697F6EDA0 F8EFA2F7EEA1F3EB9DF6EEA2FBF3A9F2E9A2EDE49EFBF2AEF9F0ADEAE09CEAE19CF6EDA6FAF1A9 F7EEA8EFE4A6F0E7A8E1DC9B8582445C5B228C8E5B70714734360D292902100F00CCCD91E9E6A4 B9B26AEAE09DE5DA9C74692C978C4BD1C881F7F0A6ECE89EE5E49FDBDC9F70713E222205343419 383815706F446766328A884CA7A361DFDB91E2DC90F6EDA0E8DF91EFE59CF1E6A2E9DE9BF2E8A1 ECE299F2E89CF4EB9DEDE495E9E094EDE498F3E9A1F2E8A2EEE49CF6E8A0F3E59CF3E59BFBEDA1 FBEEA0E5D888E2D684F9ED99F7EB95EBE087EADF86F4EA90EDE48CE2D980E7DD85F1E78FEFE58E EFE48EF2E893F6EB99ECE091E3D888F0E595F1E89BF0E8A0AAA25CA59B59F3EAA6E8E097ECE695 EEE896EAE491DBD487DAD28EC3BB76D0C77FDDD593F6F0B6A9A3771A15031915042F2B1629270E 54533154532779784686864BAFAC68CECA80EBE694F8F29CEEE58FE7DD8DEEE296F2E59CEFE599 F1E899F5EE9CF6F0A1F0E89DF4ECA2F5EEA0EEE699F3EBA0EEE69EF8F0A8F8EFACF7EDAEFAF0B4 FAEFB4F9EEB8FEF3BCF9EFB4F9EFAFFAF1AEF4ECA5FEF6ADFBF3A9FFF7ACFBF3AAF9F0A8FEF6AE FCF4ACF9F0AAFCF3AEFAF1ADFCF3B2FFF8B9FDF4B7FEF4B8FFFABFFEF3BAFBF1B8F4ECAEFAF2B3 FFFBBDFFF9BAF9F1B2F8F0B0FDF5B6F5EEADF1E9A9F5EDADF7EFAFF3EBABFFF9BAFFF7B8FCF5B3 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFDFEFEFDFEFEFDFEFEFBFFFEEFFFFAE2FFECD5F5E8C7 EAE8BCE8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9 E8E8B9E8E8B9E9E8BAF3E8CFFEEAE7FFF7F6FEFEFCFEFFFDFFFEFDFFFEFEFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFE FEFEFDFEFEFDFEFEFAFFFEEFFFF9E1FFECD4F5E8C6EAE8BBE8E8B9E8E8B9E8E8B9E8E8B9E8E8B9 E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E9E8BAF4E8C5FEEAD4FFF8F0 FFFEFCFEFEFDFEFEFDFEFEFDFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6E5EBE8BBE7D588E8C765E8C460E8C769 E8CE80F2E5BCFDFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D7CB64CEC160DFD479E3D885D8CC80706621E6DC9CC2B77E615820716A32EDE4A9E1D792E2D98C CBC36FC9C168DED67CE4DC87D2C879E1D88BE1D88AD5CC79DCD47BDDD47BE1D780DDD37CE0D67F E2D881DDD37CE2D881E6DC85E9DF88E9DF88E4DA83DDD37CEEDF8AEEE08AEDDF87E7DD82E9DE83 EBE086EDE489F4EC93EEE88FE7DF8DEBE292EEE598EDE39AF2E99FEAE192E8E08DF3EC94F8F197 ECE68AEEE78CEDE68BEDE68BEBE48CEDE491EBE091E5DA8BECE192F6EB9CEADF8FE9DE8DE9DE8C E4D987E8DD89EBE18CE8DE89E1D988E7DF8EEEE695E7DE8FDFD687E7DE8FEAE194E1D88BEBE295 E4DB90E5DC92F0E79AEFE491EFE492F3E898F0E596ECE094F1E599F8ECA0F3E89AEDE293E8DD8C E5DA88E5DB86E9DF8BEBE08FE9DE8DE8DD8EEFE397F3E79CF0E498ECE194EBE090F1E696EFE493 EDE194EADE93ECE096EBDE93E3D78CECE094F7EBA0F3E899EEE394EADE90E8DD8FF0E497F1E59E F1E59DEEE299EDE197EEE396F0E595F4E99BF1E598F2E69AEDE198EBDF97F1E59BF1E192F2E392 F7E897F2E392EDDE8DEEDF8EF4E594F6E796EFE08FF8E998F9EA99ECE08EECE08FF1E694F6EB9B F8ED9EF4E99AEFE495EFE494F5EA97F8EF98F0E68DE8DE85F2E48CF9EB93F5E78FF3E58FF9EA94 F1E18CF0E18FEFE08EF5E695F8E998EEDF8EE6D88AF2E9A1F3EBA3F0E89EEFE99AEEE695E7DE8B EFE491F1E695F2E797F3E698F6E89DF8EA9FF1E599F1E599ECE094E7DB8FE9DD91F0E498F0E498 EADE92EDE195F3E79BF4E89CEDE395EEE596EFE696EFE697F4EB9CF2E99BF4EB9DF2E99BF0E799 F1E89BF6EDA0FCF3A7E9E292EDE597F1E99EF0E8A0EFE7A2FAF1AEFDF5B2F1E8A6E8DF9AEBE29C F0E89FF2E8A4EBE0A3FFF6B9CECA89726F2F86854B8D8D5B6A6B424A4A242B2C0B000000ADAD76 E7E6A4C2BD74D6CE89F7EFADBDB474B2A966C4BC74CBC579F4F0A5EDECA8ABAB6F6D6E3B1A1A00 55543C4A4A284A481F6A693589874A87813FEBE69CEFE99EE8DF92EAE195F4EAA2F4E9A8EFE4A3 F7EDA6F0E69DF5EC9FF3EA9BEEE596EFE699EBE295E9E096EDE39CF2E7A0F6E7A1FAECA3F5E79D F5E79CF8EB9DFAEE9DFCF09EFAEE9AF6EA94F2E78DEFE48BEADF86E9DF86EBE188ECE28AECE28B ECE28BF3E993EEE38FECE18FECE191EADF8EECE293EDE497EDE59CC7BE7BAAA160F0E7A3E4DB93 E1DA8BEFE895ECE693DED787E8E097E3DB93E5DD93DCD391DAD49CA29C712F2A0B2F2C143C3A24 3D3B224C4A2A46441C6F6E3F7F7D45A5A25ED5D186EDE895E9E38BE7DD86EFE493F0E499F1E49C F3E99FF8F0A0FCF6A1FBF4A5F4ECA1EEE69BF2EB9DF6EFA1EFE89CF3EBA2F8EFA9F9F0ACFCF2B4 FFF5B9FAEFB7FAEFB9FCF1BCFCF2B7FEF5B6FAF1AEF1E9A0FDF5ACF4ECA3F7EFA6FAF2AAFBF3AD FFF8AFFEF7AFFCF4ACFBF3ACF6EDA8F5ECABFCF3B4FEF4B7FDF3B8FEF4BBFAEFB7FBF0B8FCF3B6 FCF4B3FCF4B3FAF2B1F9F1B0F9F1B1FCF4B3FAF2B1FBF2B2FEF9B8FFFBBAFEF6B7FCF3B8FBF3B6 FAF2B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFEF8FFFAF4 FCF9F0FAF9EDF9F9ECF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9ED F9F9EDF9F9EDF9F9ECF9F9EDFCF9F3FFFAFAFFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFEF8FFFAF4FCF9F0F9F9EDF9F9ECF9F9EDF9F9EDF9F9ED F9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9ECF9F9EDFCF9F0FFFAF4 FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBFAFAEEF9F4D5F9F0BFF9F0BC F9F1BFF9F3C7FCF9E2FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE1D764D6CB60E6DB7BE8DE86E0D488817736E4D9A24C4211776C40F8EFC7DBD0A0E5DB98 DBD288CFC774C3BB63AEA74ED3CC77DAD181D8CF84D6CD7FD7CF7DCEC76FD4CB74E2D881DDD37C E2D881E5DB84DDD37CE3D982E4DA83E4DA83E0D67FDDD37CD8CF77F2E38EF3E58FF4E68EF1E68C EEE389EBE086F0E78CEEE68CEAE38BF0E895F6ED9DF2E99CF6EDA2F8EFA2EDE495E5DD8AEDE68E F7F096EAE388E4DD82E2DB80E5DE84E7E088E6DD8AECE192F3E899EFE495EEE393EDE292EDE291 EDE290E8DE8BE6DC87E4DA85E5DB86D7CF7BDBD382EAE291EEE596E5DC8DE1D889EBE295E0D78A E9E093E0D78CE0D78DEBE295E5DA87E7DC8AEFE494F1E697F0E497F3E79BF4E89CEEE395ECE192 EADF8EEADF8EE9DF89E9DF86ECE28BECE28DEADF8EEBE091EFE397F1E699EEE393EADF8FEBE090 EDE290F3E899EFE495EADF90F1E697F4E99AEDE293F3E899F1E696F1E696F2E798EDE292E6DB8C E2D68CEEE298F3E79BEFE497EEE393EBE090F2E797F6EB9BFBEFA3F6EA9EF0E49AF2E69BF4E696 F7E897F9EA9AF7E897F1E291EEDF8EF0E190F2E392E7D888F3E493F6E897ECE18DEDE38EF1E792 FAEE9EF5EA9BF0E697F0E596EDE293EDE292F2E894F1E790EAE08AF0E58DF5E790F2E48CF1E28D F4E590ECDE89F3E491F5E694FCED9CFFF09FF3E493E3D687E4DB93EDE59DF3EBA0F3EC9EF2EA99 F0E895EFE392F0E595F0E495F0E395F4E69BF6E89DEFE397F1E599F0E498EADE92EEE296F4E89C F1E599EEE296F0E498F4E89CF5E99DF0E699F2E99BF2E99CF0E79AF6EDA1F8EFA3FEF5A8FCF3A6 F6EDA0F0E79AF1E89BF4EB9FEFE89AEFE899EFE79BEDE59DEEE6A0F3EAA7F1E8A5F7EEABF3EAA5 EFE6A0EEE69DEDE49FEDE2A5F0E6A8C4C07FA5A2618D8C528F905E69694240401C2D2C09141300 838251F0EEAFCECC7FACA55EDED691FFF8B5E1D892CFC77D9C964AD3D088E3E2A0888750353508 21210374745B6565433F3D154C4C186A692C9F9A58DED990EBE599F3EA9DF4EB9FEAE098F1E6A4 F0E5A2F5EBA4F0E69EF4EBA0EFE699F4EB9CF7EEA1EEE598E2D98EE9DF97F3E8A1F3E59EF7E9A0 F2E49AF1E398F3E698F2E597F1E594F0E492F2E692F5E994F6EA94ECE289E7DD85EDE38AF3E992 F2E891F3E992F3E994EFE590ECE18FEEE393F3E797F5EC9BF2E99AEEE69AC7BE78817835E7DE9A E4DC94DED786E9E38EE7E18BD7D080E3DC91E5DD94D8D082D0C782C5BF85A0996D2823031E1B03 35331D38361D45442453512C6F6E4179774093904CCCC97EEFEB98EAE58DE9DF88F5EB9AF3E79B F2E69EF6EDA2F4EC9CF2EC97F0E99AF2EA9FEBE398EEE799FCF5A7F6EFA1F5EDA2F8F0A7F9F0AC FFF6B5FFF9BBFBF1B8F9EEB8F7ECB7F9EFB4FDF3B6FAF1AFF4EBA6FBF3ACF3EBA3F3EBA3F7EEA8 F5ECA7F4EBA5FAF2AAF8F0A8FAF2ABF7EEA9F6EDAAFAF0B1FAF0B2F8EEB1F6EBB2F5EAB2F8EEB5 FAF1B3F7EFAEF5EDACF8F0AFF9F1B0F9F1B0F7EFAEF8F0AFFDF5B4FFFAB9FFF9B8FCF4B4FEF5BB FDF4BAFCF4B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFF4 FFFFF3FFFFF2FFFFF2FFFFF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE0D668D6CC64E4DA7CE5DB87E1D68D8A803F584E15786F406C64355F562CBBB280 DED494D9D086C6BE6CC4BC65BDB65EA59D4ACEC577DDD489DAD184E3DA8BDCD47FD5CC75E3D982 DBD17ADCD27BE0D67FE0D67FDED47DDBD17AD9CF78D9CF78DCD27BDED47DEEDF8AF0E18BF2E48C F0E58BEBE086E6DA80EFE78BEFE78EEFE890F5ED9BF6EE9DEDE496F2E99EF4EB9EF4EB9CF0E896 F1E993F6EF95F0E98FE2DB82E0D97FE8E187EBE48DECE290F0E596EFE494F1E696F4E999EDE290 E7DB8AEADF8DECE28DE7DD88E6DC87EEE48DE9E18DDCD483DDD684ECE394EDE495E4DB8CECE396 E5DC8FF1E89BEBE297ECE398F7EEA2E4D986E5DB88EEE393F1E798EEE296EFE397F2E69AECE193 EBE091EEE392EBE08FE8DE86E7DE83EBE287EEE58BF0E591F0E594F1E697F1E697EEE394E9DE8E E5DA8AECE18FEBE08FF7ED9AF7EC9AEADF8EF3E896EFE493E5DA89E5DA88E5DA88E8DD8CECE190 EADF8FECE094F4E89DF1E697EFE595F6EB9AF6EB9AEEE392EFE494F0E596ECE192F0E499FCF0A4 EEE192EDE091EEE192F1E596EDE091E5D889E9DC8DE7DA8CE1D485EADD8EEDE192E9DE8AEBE188 ECE28DF3E896F3E898F1E697F7EB9FF9EDA0F5E99BF4E99AF7EC9BF4E997EFE38FE8DC86E3D881 ECE18CF7EB97F4E994F8EC9AFAEE9CFAEE9DFAED9EF7EA9BEFE495E7DD95ECE49BF4ECA1F6EFA0 F4EB9CF5ED9CF3E898F2E797EEE393EBDE90EBDD92EEE095ECE094EBDF93EEE296ECE094F0E498 F3E79BF0E498F6EA9EF5E99DF1E599F4E89CF3E99DF6EDA2F4EAA0EDE49AEFE69BF1E89EF7EEA3 FAF2A6FAF1A6F5ECA1F2E99EF4EB9FF5EEA0F8F1A3F5EDA2F2EAA2F6EEA8FAF1AEF4EBA8FCF3B1 F5ECA7F3EAA4FCF4ABFDF7AFF6EBACF1E8A6D2CD8ACCC98766652A9898669E9E786A6949464525 292607393714E4E4A7EAE999C7C37AB1AB63DFD790EBE59CF2EB9F8F893DC4C078DCD89C585524 3C3A15302F132C2C1335341388865E6564316B6A2DA49F5DCECA80F2ECA0EAE093E1D88CFDF4AC EFE5A1F1E7A3F4EAA3EFE59DF7EEA3EFE699F2E99CF5EC9FF0E79AE9E095EFE59DF7EDA5F7EBA3 F9EDA3F7EBA1FAEEA3F8ED9FEDE393ECE190F6EB99F6EB97F2E993F3E995EEE48EE2D881E3D982 EEE58FEFE590F0E791F8ED9BFAEF9DF5EA98F0E595F3E898F4EB9BF0E998F8F0A3D4CC84706723 EFE6A2F2EAA1E7E08FE6E08AE5DF89DDD684E6DE92E3DB8EDED686D5CD82D1CC8DBDB88835310F 1B1801211F0C242209424022605E39605E357A78428E8B47B3AF64E1DC89EAE48CF2E891F7ED9C F2E69BF7EBA3FDF3A9F3EB9BECE692F0E89BF8F0A7F6EEA3F3EC9EFAF3A5FAF3A5F6EEA3F8F0A8 F9F0ABFDF4B3FFF7B8FAF0B4F9EEB9F3E8B2F4EAAFF6ECAEF6ECAEF8EFADF5ECAAF5ECA8F7EEAA FDF4B0F8EFACF4EBA6FCF4ACFBF3ABFEF5AEFAF1ACF9F0ADFAF1B0FBF1B3FAF0B3F5EBAEF5EBB0 FBF1B6F5ECAEF3EBABF7EFAEFAF2B1FAF2B1F8F0AFF9F1B0FAF2B2FDF5B4FEF6B5FCF4B3F8F0B0 FFFBC2FFF9C1FFF7BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFDFFFFFDFFFFFDFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0D37AD8CC78E0D484DFD388E0D68F635A21898146D0C888D3CE8F9B9759 4B4509C2B879D1C981CCC575D1CB74A19A43A9A24E8E8638C8BF75ACA4596B6415BEB765CDC46F DED47DD9CF78D4CA73D6CC75DAD079E1D780E1D780DED47DDBD17AD9CF78D6CC75EFE08BEADB85 E8DA82E9DE84EDE288EEE389E4DB80ECE48AECE58DEDE592ECE393E7DE8FF9F0A3F8EFA2F9F0A1 EEE694E8E08CEEE690ECE58EE1D984E3DC84ECE58CE9E28AE9DF8CEEE393E7DC8CEDE291F9EE9C EFE492ECE28EEFE590EEE48FF1E790F5EB95F7ED97F9F09DE7DF8EE0D887EDE495EEE596E7DE8F F0E79AE8DF92F3EA9DE7DE93E3DA8FE7DE91E6DB88DFD582E3D888E6DB8CE7DB8EE9DD91F2E69A EDE294EEE394F0E594EBE08EE3DA81E2D97BE4DB7EE7DE83EAE088E9DE8CECE190EBE090E9DE8E F2E797F2E795F0E593E9DF8BF1E790F4EA94EDE38EF1E790F0E692D3C975E5DB87F5EB96F3E994 EDE38FE3D887F4E99AF5EA9BE9DE8FE5DA8AEADF8DE2D883EBE18CE9DE8BE5DA88DFD485E4D98A F4E99AEFE293F2E596EEE192F1E495F4E798EDE091E8DB8CEADD8EF3E697F5E899F3E697F0E590 F1E78EF4EA93F2E794F6EB9BEFE495EFE396F8ECA2F8ECA1F3E79BF4E99AF0E596ECE08CE6DA86 E3D783E9DD8BF2E694F7EB99F5E899FAED9EF4E799F0E395F8EB9DFCEFA3F2EA9FECE49CF1E99E F4ED9FF1E99AF2E99AF1E696F2E797EFE494EDDF90EBDE90EEE194EEE296E2D68AE9DD91EADE92 EDE195F1E599EFE397F1E599F1E599F1E599F4E89CF1E69DF5EBA4F5EBA3ECE29BEEE49BF0E69E F1E79FF6ECA4F9EFA6F5EBA3F5EBA3FBF2A8EBE596F5EEA0F2EA9EEDE59DF5EDA7FDF4B1F6EDAA F9F0ADEAE19CEBE29CFAF2A9FDF5AEF7EDACFBF2B0E1DD97C8C58285854992926160603A525133 39371B403D1D1B1903BBB980D2D385EEEBA1A4A057A4A057FDF7ABF4EDA0868033CECB85ECE7AD 24200016120329260E1919044848268B89606A6935605F21A7A260B7B268ECE69AF4EA9DE7DE92 F4EAA2F1E7A1F3E9A4F3E9A2F1E79FFDF4A9F5ECA1EEE59AF0E79CF1E89DF2E99EF1E89DEFE59B F2E69EF8ECA4F5E9A1F5E9A0F6EA9EF3E79BF3E899F5EA9BF1E696EBE08EECE190F4EA96EFE58F EFE690F5EA97EEE391F2E795FBF09EFAEF9DF2E795F2E795F5EA98ECE391E5DD8BF2EB9CEDE59C 766D28DED591EFE79FE6DF8EE4DE88E6E08AE1DB88E9E193E7E090E2DB87D2CA7EDED997D8D3A1 3E3A17211D02302E193230194A492B565331424018716F3A817E3AA4A055E0DB89EDE78FF0E68F F7EC9BF3E79BFAEEA6FBF2A7EDE494EAE48FF1E99DF1E9A0F8F0A5F9F2A4F3EC9EEFE89AF4ECA1 FAF2A8F9F1A9F9F0ADFBF2B1F7EDAFFDF1BAF9EEB7F9EFB4F1E7AAEEE4A6F5EDABF3EAA9F8EFAE F7EEACFBF2B1FCF3B1F5ECA8F1E9A2F3EAA5F8EFAAF5ECA6F4EBA8F5ECAAFAF1B0FBF0B3F3E9AB F5EBAFFBF0B3F7EFAFFAF3AFFEF7B3FCF5B1F9F2AEFAF3AFFDF6B2FDF6B2FCF5B1FBF4B1FCF5B1 FDF5B5FFFAC1FFF8C1FEF7C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCCF83D7C980D6CA83D5CA85D3CA85554C09B2AB67E4E099DBD78F E7E59B817B3970672CE3DA95D3CC7EE2DC85DED880BFB9657E772991893F978F45554D0DC5BE6E C7BE6BDAD079D8CE77D4CA73CFC56ED6CC75DAD079DDD37CE3D982E1D780E1D780DBD27ADFD07B D9CA74DACC74E2D77DEBE086F2E78DDDD479EBE389EEE78FEEE693F2EA99F5EC9DF0E798F5EC9D F7EE9EEBE392EAE28FF0E896EFE793E8E08BEEE691F3EC95E8E18ADED581E8DD8CEEE393EADF8E EDE290F2E794F3E995EDE38EE7DD87ECE28BEFE58EEBE18BEEE693EAE291EDE594F4EB9CF0E798 E7DE8FE9E093E4DB8EEFE699E8DF94E6DD92E9E094E9DE8BE0D583DFD484E7DC8DEDE194F2E69A ECE094EDE193EEE394F1E695ECE190E7DE85EDE485EDE486EBE288E8DE87E4DA85E9DE8DE6DB8B E6DB8AF9EE9DFCF19FF4EA97EDE38CD9CF76D8CD76F0E68FF0E68FE1D780DED47EECE28DEEE48F E0D681DFD480E5DA87DED384EADF90E7DC8CEFE492F0E692E2D883E6DC86E9DF8CECE18FE3D888 DED383E3D889EDE091F3E697EEE192EDE091F5E899F3E697DFD384E5D98AF8EB9CF5E99AF1E495 F1E692F4EA91F7ED96EEE390EDE292E1D687E5D98FF7EBA1FDF1A7F7EB9FF4E89CEFE495F7EB9A F8ED99F7EC99F3E795F2E694FBEF9FF1E495F8EB9CF0E396EBDE90F6E99BFDF1A5F5EDA2EBE398 EEE69BF2EB9DF1E99CF3EA9BEBE091F0E596F2E797F1E495F0E394F3E698F2E69AE3D78BEADE92 EADE92EBDF93F2E69AEEE296E7DB8FEBDF93F1E599F1E599EDE39BF3E9A4F5EBA6F2E8A1F4EAA4 FBF1AAF3E9A2F6ECA4F8EFA6F4EAA2F3E9A1FAF1A7ECE597F8F1A2F5EDA2EDE59DF3EAA5FEF5B2 F6EDAAFCF3B0F2E9A4EFE6A0F5EDA4F3EBA3FDF3B2F8EFABDEDA93B3B06BA8A8698B8B5765653E 59583A413F235E5A3F191602555527DDDD95E7E7A1E5E29CC8C47CD0CA7EEDE897D8D284ECEAA4 D8D39D77724B19150138362236361C5454324C4A22868652807F41A19C5AB9B46BF3EEA2F5EB9E EAE195EEE49BF0E6A0F1E7A1F2E8A1F1E79FFDF3ABF8EFA4F3EAA0F1E89DF3EA9FF5ECA0ECE398 E5DC92F1E59DFAEEA6F4E8A0F1E59BF5EAA0FAEFA3F7ECA0F2E69AEFE496F1E696F5EA9BF8ED9C F5EB96FBF09EF6EB9AE9DE8DEEE392F1E694F1E694ECE18FF4E997FBF09EECE390EDE590EEE796 FCF5AB7D732FC2B976E9E19AECE597ECE591EFE993E4DE8BECE595EEE796D5CE79C5BE6FE5E09E E4DEAC3F3B15120F0026240D35331C4D4B2E4A47254341196E6C37716E2AA7A359EFEB98F1EB93 E9DF88F5EB9AF7EB9FF7EAA2F3E99FE2DA8AE4DE89F5EDA1EDE59CF8F0A5FDFCAEFAF3A4F2EB9C F1E99EF9F1A6F8F0A7F4EBA6F5ECA9F7EEACFFF6B9FFF6BBFFF6B9F3E9ACECE2A5F2E8ABF6ECAD FAF1B0F2E9A8F1E8A7F5ECABF2E9A5EEE69FF2E9A4F8EFAAFAF1ACF9F0AEFAF1AFFEF6B4FFF9B8 FAF0B2FCF2B4FFF7B8FEF6B5FFFAB6FFFAB6FBF4B0F7F0ACFCF5B1FCF5B1FBF4B0FAF3AFF8F1AD FAF3AFFFF8B6FDF6BBFCF5BEFDF6BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBBE6FD5CA7DD6CA81E0D690C4BB786C6425D3CC8CC9C383 C9C684ABA766746F32483D11B8AF6DC4BC71C9C36ECDC76FC9C26EBBB465877F368A823ACDC57C D6CE84CDC573E0D67FD9CF78E2D881DDD37CDAD079DFD57EDAD079E1D780D7CD76DCD27BD4CA73 D7C873DDCE78ECDE86F2E78DEFE48AF0E58BE7DE83EDE68CF1EA91EBE390ECE493F9F0A1EAE291 EBE392ECE493EAE291F5ED9CF1E998F6EE9DE8E08EE2DA86EAE28DE8E08BDFD682E8DD8BF3E896 ECE18FEBE08FF0E690EFE590F0E690F3E992EEE48CE6DC83F0E68EF1E995EDE594E6DE8CE6DD8D EBE293EDE495ECE396E7DE91E5DC8EEAE196EDE49AEEE598ECE18EEBE08EE6DB8BEADF90EEE296 E9DD91E9DD91F6EB9CE9DE8FE5DA89ECE08FE7DD85DCD376E8DF83EFE58CF0E690EDE390F1E695 E8DD8DF0E593F2E795E9DF8BF8EE99D4CB72D7CF74EEE58AE9DF85DFD57CE4DA83E4DA83E6DC85 E9DF89E8DD8BE8DD8BEBE08FEDE393EADF8FE0D585EDE291F1E694F4EA95EFE590EDE38FEADF8D EBE090F1E797F7EC9DE2D788E7DC8DECE192F1E697F6EB9CF6EB9CEFE495EEE495F1E697F2E798 F5EA9BF3E996EDE38CF1E790F4E997ECE191F1E598F2E69CF4E89EF7EBA1F6EA9EF4E89DF4E89B F1E696F6EB9AF8ED9DF2E797EEE393F0E596FBF1A1FAEFA1F2E69AF1E599F6EA9EF3E99EF3EA9E F6EEA2F0E89DEFE79CF4EB9EF3EA9DEFE396EFE495EEE394F2E595F7EB9AF8EB9CECE194F1E599 F3E79BEDE195ECE094F1E599EBDF93E9DD91EEE296ECE094ECE095F2E8A1F6EBA8EDE39DEFE5A1 F0E6A0F9EFA8F2E8A0F4EBA1F7EEA3F6EDA2F4EB9EF3EA9EF4ED9EF2EB9CF4ECA1F1E9A1EFE7A1 FBF3B0F9F0ADF5ECA9F6EDA8EEE6A0E9E198F1E9A1FBF1AFF3E9A5DDD990C4C27AACAD6BB5B67F 696B403D3C1D3A381D524E344B472A1413009E9F64F5F6B7F0EFAFB3B06CCDC97ED3CE7FEFE99B E4E09BF1EBB6C5C09A4D472E25230F2F2F163636144A481F868552888649ADA866B9B46BF4EEA3 EEE598F1E89CF0E79DEBE19AEDE39CF5EBA4F5EBA4F1E7A0F8EEA7F7EDA6F6ECA3F0E79CF4EB9E F8EFA2F6EDA1F5EBA3EEE49CEEE49DF3E9A1F4EBA0F5ECA1F4EBA0F5ECA1F8EFA3F2E99BEBE296 F0E596F2E796F8ED9DEEE393F0E596EDE292E7DC8AFEF3A1FAEF9DF7EC9AF7EC9AEFE794F1E994 E6E08EFDF5AB958C499B9251EEE59FE7DF94E8E291EAE48FE2DC88EBE494ECE595DED780C6BF6F DED997DDD8A4605C361310002F2D143E3C245554354E4C2763613885844E878541B7B369EBE693 E7E189EFE58FF0E695FDF1A5E8DC93F0E69CEAE192F1EB97F9F1A5EBE39AF0E89EF0E99BF2EB9C EFE898F4ED9FF1EA9DF6EEA4F4ECA4F2E9A3FAF1ADFCF3B2FCF3B3FDF2B5FDF3B5FAF0B3F8EEB0 FEF4B6FFF6B5F5ECABF3EAA8F6EDAAF6EDA9FBF2ADF9F0ABF9F0ABF9F0ABF8EFACF7EEABF9F0AD F9F0ADF9F0AEFAF1AFFCF3B2FBF3B0FBF4B0FCF5B1FCF5B1FBF4B0FBF4B0FAF3AFF7F0ACFCF5B1 FBF4B0F5EEAAFDF5B3F8F2B5F9F2B9F8F2B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCAC25FD9D073D8D17BD5CD82CCC380595015C5BE89 E6E0B0A29A6D524D1F150E00342A0AB9B072CDC67CC8C46EC7C36AD0CB76C5BF7098924879712B BDB66FDFD88FDAD282E0D67FDCD27BDFD57EEAE089DFD57EDBD17ADED47DDDD37CE6DC85DFD57E D8CE77E4D580F3E58FF5E68EEBE086EFE48AF4E98FECE388E8E086F3EC94F2EA97EDE595F9F1A0 F4EC99EFE794F7EF9EF0E797F8EFA0FCF3A4F2E99BE9E091E9E18FF6EE9BF8F09BEEE591EDE290 F1E694EDE38FECE28DEAE08BEFE58EEBE18AEBE189F0E68DEDE38AE6DC84F1E995EBE392E3DB8A E3DA8BE6DD8EEAE192E3DA8DE3DA8DE5DC8FEBE297EFE69BF0E79BF1E693F4EA98EFE494EDE293 EDE295EADE92EEE296F6EB9DEDE293E7DC8BE9DE8CE5DB83DBD179E1D780ECE28BF2E794EFE492 ECE191E7DC8CEFE492EDE390E5DB84E2D880CDC469EBE286FCF398E9DF85EEE48CF2E891ECE28D EBE18CE9DE8CEADF8FEBE090ECE191E4D88BD1C679EFE494E9DE8EF8ED9BF3E896E6DB89EDE291 ECE191E7DC8DEDE194F5E99DEDE293EEE394F2E798F5EA9BF0E596EBE091EFE495EFE495EFE495 F2E798F3E899F1E694EAE08BEDE38EF5EA99F6EB9CF7EB9FF6EAA0F3E79DEFE399ECE095EDE393 F5EA9BF2E798F3E899F3E899EDE293EBE091EDE195F5E99DF6EA9EF3E79DF5E99FF8ECA3EEE59A F6EDA0FAF3A4F6EFA1F4ECA1F7EEA3F5ECA1FDF0A6F1E698EDE293F2E594F5E997F4E997EDE295 F5E99DFBEFA3F3E79BECE094EBDF93EBDF93F5E99DF8ECA0F0E498F1E599EFE59EF8EDABEFE5A0 ECE29CF4EAA3F6ECA5F7EDA5F7EEA3F5ECA0F1E89BF2E99AF5EC9DFBF4A4F1E99BEDE599F0E8A0 F7EFA9FFF9B6F7EEABF5ECA9F9F0ABF9F0AAF5EDA4F5EDA5F8EEACE3DA96D2CF85CCCA7FBEBE7A C1C3897F81523E3E1A3735173B371A524F301C1B032F3104A9A976FFFFC9CDC98AD5D189D4D083 F0ED9EF1EDA7F0EBB57C77522B260D2E2C1731311825250555532A84834F7F7E40AEA967CEC980 FCF6ABF0E79AF2E99DEBE297EBE199F0E69EF8EEA6F7EDA6F2E8A3F4EAA3F4EAA2EFE59DE8DF93 EDE497F7EE9FF7EFA2F4ECA2F2EAA1F3EBA2F3EBA2F1E9A0F1E9A0F5EDA4F9F1A8FCF4ABF2EA9F EEE69DEBE094F2E798FAEFA0F2E798FDF2A3F4E999EBE090F4E999EFE492F2E795ECE18FECE391 F5ED98EAE492FFF9AFC0B67683793BFBF3B3E8DF98EDE698F5EE9DEDE695F0E999EAE393EEE791 E9E292E5E09EDFDAA7605C361F1C003C3A213B39205654345B58334C4B1E78763F93904CBDB96E E2DD8AF9F39BFBF19AEDE392F4E89CE7DB92F2E89EEEE595EFE996EFE79CEBE39BF6EEA4ECE597 EBE496F4ED9DFAF3A3F5EE9FF7EFA3F8F0A7F5EDA4F6EEA6F3EAA5FAF1ADFCF3B0F8EFAFF5EBAD F5EBADFBF1B3FCF2B2F5ECABF5ECA8F8EFAAF7EEA9F7EEA9F9F0ABF6EDA8F5ECA7F8EFABFDF4AF FAF1ACF7EEA9FAF1ACFDF4AFFAF1AEF7EFA9F8F1ABFCF5AFFDF6B0FEF7B1FFFAB4FFF8B2F9F2AC FAF3ADFCF5AFFAF3ADFCF5B0F7F2B2F6F2B6F7F3B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5CF62DDD672D8D177D2CA7CE1DA976A6133 1C1500534C2F4D462C302A13281F06887F4AE6DEA0D0C97FC1BD67C3BF69D2CE79CCC677B1AB62 A29B5579722DC0B973E1D989D5CC75D7CD76D2C871D7CD76DED47DD4CA73E2D881E2D881EEE48D D7CD76CFC56EE4D580ECDE88F5E68FECE187E8DD83F1E68CF6ED92E9E288F6EF97F5ED9AEAE291 F3EB9AF2EA96EBE38FF5ED9AE8DF90EDE497F8EFA2F1E89BEEE598EFE697F5ED9AEBE390E2D985 E8DD8AEBE08EF0E591F2E893EFE58FEEE48EE8DE87E4DA81EAE087E7DE84E3D980EBE38FE9E190 EAE291EBE293E3DA8BDED585EAE194E7DE91E5DC8EE4DB91E7DE93EAE195EADF8CF2E896F0E595 EADF90EADE91E8DC90F1E599F8EC9EF2E798EEE391EEE391EDE28EEEE490F0E594F8ED9CF8ED9E EBE092E6DB8CEEE393EADF8CE6DC86DED47BC3B95FD7CE73E6DD81E1D87EE2D980E6DC84EAE08A EBE18CE9DE8DEADF8FEFE494EFE496E9DD91F1E59BE4D88DF4E89BF5EA9BEEE393F2E796F1E694 F3E899F4E99BF4E99BF6EAA0F7EBA1EEE396EFE596F6EB9DFAEFA1F0E697E8DD8FEFE496EFE596 ECE293F0E597F2E799F0E595EEE391EBDF90F1E697F5E99EF0E49AF7EBA1F7EBA1F1E59AEEE294 EBE091F2E798F2E798F2E798F2E799F0E597F1E799F6EA9FEEE397EFE499EFE49AF7EBA2FDF1A9 F6ECA3F4ED9FFBF4A5F8F1A3F6EEA3F8EFA4F5EBA1F1E59CF6E99EF7EC9DF5E998EEE28EEBDF8D EEE396F3E79BF9EDA1F4E89CEDE195EADE92EBDF93F2E69AF6EA9EF4E89CF1E599EBE099FCF2AD F6ECA7F2E8A1F9EFA7F2E99FFBF2A7FAF1A3F4EB9CEFE797F2EA98F9F19FEEE797F3EC9EF7EFA4 F5EDA5F4ECA6F7EEABFCF3B0FAF1AEFBF2ADFCF3ADF5EDA4EEE69EFAF0AEF0E7A2D7D388BDBC6E A7A861A7AA6A8A8C595757304E4D2B4F4C2C5F5C3A40411C151704212100817E55DEDBA3F8F7B3 CFCC7FF0ED9EF9F5AFE6E0AB3B3510221C0A1F1D085A5A413F3E1D86845B7A7945929153B6B16E DCD78DF4EEA3E6DD90E9E094E3DA8FEEE49BF2E8A0F6ECA4F7EDA6F9EEAAFBF1ACF5EBA5F3E9A2 EBE297EBE294F1E899F3EA9DF6EEA5F4ECA3F3EBA2F2EAA1F1E9A0F6EEA5F8F0A7F6EEA5F4ECA4 F0E89FF5EDA6F6EBA2F2E69AFAEEA1F1E698F2E798F6EB9CF4E999F7EC9BF5EA98F8ED9BEFE492 F5ED99F8F09BF1E99BFBF3ADDAD094564C12F2E8ABEBE29FEFE79CF8F1A1F0E999ECE597DED787 CDC673CEC67BEBE6A4E9E4B2504C26201D003E3D214342255E5D3B616034585726737138999652 C4C176E6E18EF6F098F5EB94F2E796F3E79BECE097F5ECA1F2E999EEE895F1E99DEEE69EF9F1A7 F0E89DF0E99AF6EF9FFAF3A3F6EF9FF6EFA1FAF2A8F9F1A8F4ECA4EEE69CF6EEA5F7EFA9F4EAA8 F7EEACFDF5B6FBF1B1FAF1B0F7EEAAF6EEA7F6EEA6F5EDA6F6EDA8F9F0ABF4EBA6F2E9A4F9F0AB FDF4AFF7EEA9F3EAA5F9F0AAFEF5AFFCF3ADEEE6A0F0E9A3F7F0AAF7F0AAF9F2ACFDF6B0FDF6B0 F9F2ACF8F1ABFCF5AFFDF6B0F7F1ADFEF9B9FEFABBFFFBBCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD46FD9D374DFD782D7D085DBD392 A49D6239330A322C0A383315322D113D360C89804FB7AE73D5CE85D3CE7BCECA73E4DF8AD0CA7B DAD38C948D489F985489823DD3CB7DD7CD76CFC56ED4CA73D6CC75D2C871CEC46DDDD37CDCD27B DFD57ED9CF78D7CD76F1E28DEBDD87EDDF87E6DB81E5DA80F8ED93F1E88DECE48AF4ED94F5ED9A EFE696F1E998EEE690EBE38FF1E997E3D98BE7DE92F0E79CF1E89DE4DB90E1D88AECE493EEE693 E9E18DE9DF8AEBE18CF1E792F0E692EEE48DF0E68FEDE38CEBE187EAE187E8DF84EEE489EEE592 E5DD8CE6DE8DEBE292E5DC8DE8DF90EBE295E8DF92E3DA8DE0D78CE3DA8FE8E093E6DC89EFE492 EEE393ECE192ECE093E9DD91EBDF93F1E697F1E697F0E594EFE492EDE290E3D78CEDE195F7EBA0 F9EDA2ECE096E5D98EEFE495F1E695FAF19BEFE68DC4BB60C8BF64E3DA7FE1D77ED6CC74E3D982 E7DD89E8DD8CEADF8FEEE394F2E79AF1E499EADE94EBDF97F0E49CE8DC92FDF1A6E9DD8FFAEF9F F4E999EEE395EFE397F6EAA0F5E9A0EFE39AEFE69AF0E79AF5EC9FF7EEA1F0E79AEBE295F6EDA0 F6EDA0EFE69AF4EB9EF6EDA0F1E79AF1E598EEE296F2E69BF9EDA3F3E79FF7EBA1F6EAA0F4E99C F3E898E9DE8CEADF8DF3EA9BF2E99AEEE598ECE396EEE599F1E99EF1E89DF3EAA0F1E79FF3E9A1 F8EEA7F6ECA5F2EB9CF8F1A2F5EEA0F3EBA0F5ECA3F3E9A1F1E59CF4E89EF7EB9CF6E998F2E693 F1E592ECE194EDE195F3E79BF2E69AEFE397EEE296EBDF93EADE92EEE296F5E99DF0E498E2D78F F2E8A2F3E9A2F6ECA4FCF2A8F4EBA0F7EEA0F5ED9CF0E896ECE492EEE692F5ED99EDE695F8F1A3 F7EFA4EEE69EF0E7A2F7EEABF5ECA9F8EFACF8EFAAF8F0AAF5EDA4EDE59DFAF0AEE1D992D2CF83 CECD7FB7B96EB1B572B2B67F75764B78785166633E4A482143422533341E2625100A0800565423 D5D193E1DE93E4E192E6E19AE7E2AA5A532B3E371E413F28595940595937302E0F757440BDBB7E CCC785E6E197EEE89CECE396F3EA9EF3EA9FF4EBA0F6ECA3F2E8A0F0E6A1F5EAA8F6EBA8F2E8A2 F8EEA7F4EB9FF1E89AF2EA99F2E99BF6EEA6F4ECA4F0E8A0EFE79FF2EAA2F7EFA7F8F0A8F9F0AA FDF4AEF9F0AAF7EEA8F9EEA6EFE398F6EA9DF3E79CF0E497F7EC9DE8DD8DF7EC9CFAEF9DF9EE9C EEE491F3EA95F2EA98F3EC9FF1E9A6EBDFA7493E08DAD097F1E7A8ECE39DF1E99DEBE497E7DF93 D7D081D2CB79D6CE84C7C283C3BE8D4E4A251E1B01302F1236361751512B62613385855188874B 9F9C58C4C075EAE592E7E189E8DE87F5EA99F1E599F1E59DF5EBA1F1E898EDE794F9F1A5EFE79F F8F0A6F7EFA4F6EFA1F4ED9DF4ED9BF5EE9DF5EE9EF9F1A4F9F1A7F4ECA2F1EA9CF3EB9EF2EA9F F2E9A3FCF3AEFFFBB9FDF4B2F9F0ABF9F0A9F7EFA7F3EBA1F4ECA4F7EEABF9F0ABF5ECA7F4EBA6 F9F0ABFAF1ACF3E9A5F0E8A0F5EDA5FAF2AAF9F1A9F0E8A2F4EDA7FBF4AEF9F2ACF7F0AAFCF5AF F6EFA9F7F0AAF8F1ABFBF4AEFDF6B0F6F1ABFAF7B3FBF7B5FCF8B8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD586CDC477E3DB94BBB371 746C2F5E581B999459E3DEA4C4C286DBDB9E95915B403705574E139B944BD2CD7BCECA73D3CE79 E0DA8BD7D088B0A964B5AD6C7C7432999144DDD37CE3D982DDD37CE2D881D1C770D8CE77DED47D DDD37CD6CC75DBD17AC2B861D4C570EEE08AE6D880D9CE74EBE086F1E68CEBE387F2EA91F1EA92 F1E997F2E999EDE594EFE790F6EE9AF7EF9CEBE294F4EB9FF1E79FE6DD93E6DD92EAE193F1E998 E8E08DE3DB87EDE28DEFE590F3E993ECE28BEAE089EEE48CEAE087EAE087ECE389EBE287EDE489 F2EA96E7DF8EEAE290EEE596E5DC8DE9E091E6DD90E8DF92E7DE91E3DA8FE1D88DE2D98DE9DE8B EBE18EE9DE8EECE192ECE093E6DA8EE9DD91EDE294F1E697F1E695EFE492EEE394ECDF97F2E69E F6EAA2F3E79FEDE199E9DC92F1E697F3E898FDF39CEEE48CDCD377E2D97DEEE58AEFE58CE5DB84 F0E68FF8ED9AEEE392EEE393EEE295EADE94E8DC92E9DD95E3D690E9DE95ECE096F1E59AF0E498 F2E799FBEFA3F5E99DF4E89EF6EAA2F5E9A2F2E69EF7EEA2F5EC9FF3EA9DEFE699ECE396EAE195 F4EB9EF5EC9FECE396F1E89BF4EB9EEDE396F2E69BF1E59BF2E69EF9EDA5F5E9A1F6EAA1F4E89E F6EA9DF7EC9CEBE08DEDE28EFAF1A1F6EDA0F1E89BF0E79CF3EA9FF6EDA2F0E69EF9EFA7F9EFA7 F4EAA3F4EAA3F3E9A1F3EC9BF6EFA1F2EB9DF0E89EF4EAA3F3E9A2F8ECA3EBDF95EDE293F9ED9B F7EB96EEE390EADE91EADE92F3E79BF4E89CF1E599EEE296EDE195F0E498EFE398F3E79BF0E498 E8DD95F0E69FEFE59DF4EAA3F6EDA1F8EFA1F4EB9CF3EB9AF2EA96EFE792F0E991F4EC96F0E998 F7F0A2F2EA9FEEE69EF6EDA8F9F0ADF4EBA8FDF4B1FAF1ACF9F1ABFBF3ABF7EFA7F5EBABDCD48D D6D385D9D888BABD70ACAF6AACB0759395657B7B516E6C435250275C5B423E3E34343222322F14 151200575317DAD68FD8D588EEECA4EBE6AC474017463F2338361F3232195656342C2A0284834F BFBE80E9E4A1EDE89EECE69BF8EFA2F9F0A4FBF2A7F7EEA1FBF1A8F4EAA2F1E7A2F3E8A6F1E6A3 F4EAA4FCF2ABF7EEA3F1E89AF1E998F0E799F1E9A1F4ECA4F2EAA2EFE79FF1E8A3F7EEA9F4EBA6 F2E9A4FCF3AFFCF3B0F5ECA8F0E59EEFE399F1E59BF3E79BFEF2A5DDD283C1B666E8DD8CF6EB98 F4E997F0E592F3EA95F3EB98F6EEA1EEE5A2F7F4BD605421B9AE79FFF5B8EEE6A0F0E89DEFE79B F0E89FE2DA8FD2CA7BCBC37AABA668A6A06F4D492316130443432431301149492266663576763F 8B8A4CA9A762BBB76CE0DB88E8E28AE4DA83EFE493E8DC90F0E39BECE298EAE192ECE693F7EFA4 EEE69EF7EFA5F4ECA1F2EB9CEEE796EFE897F7F09FF5EE9EF3EC9EF4ECA0EFE79CF5EE9EF3EC9C F0E99BF3EBA3F9F0AAFDF4AFFAF1AEF6EDA8FBF3AAF9F1A7F4ECA1F6EEA4F9F0ADF9F0ABF9F0AB F8EFAAF8EFAAF8F0A9F8F0A8F7EFA7F7EFA7F7EFA7F7EFA6F6EFA8FDF6B0FFFCB6FDF6B0F8F1AA FBF4AEEDE6A0F7F0AAFCF5B0FDF6B0FFF9B3F9F4ADF5F2ABF4F4AFF7F6B3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEC77CAAA362C4BC84 66602B231F0096944E9E9C52C6C477C9C67FD5D190D5CF8FCCC4808F8741625B13B8B066DBD68A DBD589DFD98ECAC57AE4DE94868036B9B36A837D32B4AE5EE7E090D6CF7DD7CE7BD2C774DDD27F E0D582E1D784DACF7FD3CB7B9F9646A89E4AE6DB85E1D67FDACF77EAE188E1D880E9E087EFE78F EFE792EDE590EBE391E7DF8BE7E08AF0E993ECE591E5DE8BF0E797EFE696EFE696EDE491E6DD8B EAE18CE8DE87E2D882E8DF8AEDE48FEFE691EAE18AECE38CEFE690EDE48BEBE28BF2E991F2E990 EEE58DEFE792F0E895F3EB9AEDE495E0D789DDD487E7DE92EEE598EDE496E9E092E5DC8DDDD484 E9DF8EE7DD8DE4DA8BE8DE8FEBE092E5DB8DECE194F2E899F4EA9BF0E596EFE594F2E89BEEE29C EFE39EEBDF99ECE19AEEE399EDE295F2E896EEE48FEAE287DDD578E9E183FFF59DE5DE89DDD481 E9DF8CE7E08FF0E798F3E99AF5ED9EF1E89CE7DD92E7DE93F0E59CE9DD94E9DD94F6EAA0E8DC91 EDE194E4D98AEADE91E6DB8DE2D688E8DD90EADF92ECE194EFE796F1E998F1E999F1E89BF7EEA2 F9F0A6F0E79DF3EAA0EFE699EFE699F1E89AEDE396EFE599F0E59AF0E59AF4E9A0EEE39AF4E99F F1E69CF2E89AF6EC9DF1E896F7EE9BF6ED9FF2E99EEFE69CF0E69DF6EDA2FCF3A8ECE299F9EFA6 FDF3AAF5EBA2F3EAA1F6EDA2F1EA9CF7EFA2F2EAA0F0E89FF5ECA4F7EDA6F4E79FE8DC8FEADF8F F8EB98F3E890E7DC89EBE297EFE49BF3EAA1F1E89FF1E59DEDE49AEFE79DF7ECA3F3E9A0EEE69C EFE49CF3E9A0F6ECA4F3E9A1F6ECA4F4EBA1F9EFA6F9F0A6F6EDA3F9F0A6FAF0A6F3E99EF7EDA2 F1E99EF5EDA3F7EFA6F9F0AAFBF1ACF9F0ACF6EDA9FEF5B1FBF1ACF6EDA8F7EEA8F6EDA6F2E8A5 EDE69FE2DC92D7D387A6A65AA7A962AFAF719797626B6A387474445554274140204342301C190D 1E1906221E02151101959358D8D78FF5F5B3B9B87B88855296926C5B593D2A2A0E393715676539 85834FC3BF81F4F0AAEFE89EECE597F7EEA1F2E89AEEE498EEE59CF4EAA1F1E7A0EDE39CEFE59F F1E7A1F7EDA7FCF2AAF5EDA1EEE598EEE596F0E799F0E89EF1E99FF5EDA3F0E89DECE49AF4ECA2 F3EBA0EDE599EEE69BEEE69BF3EA9FF8EBA4FEEEAAFAEDA6F0E49CF4E99FAAA255D4CF7EF2EA96 FDF39DF1E790F6E990F6EB91F3EC93F1EB98EDE59CF4F0B07C713C92884DFFFDBCE8DF98EEE69C EEE69BEFE89FE4DB93CEC275B4AB5FB7AF6CBDB77F514F21110F0448482C403F2254532A7D7D45 7B7E388C8C41B3B168C1BE71D8D483E9E28FE6DD8DDFD485DDD185EBDE94E9DB8EE7DA89EDE390 F1E797F0E899F6EF9EEFE898EDE695EEE696F2EA9AF6EF9FF7EF9FF3EB9BEFE899EDE697F9F1A5 F1EA9EEDE69CF4EDA4F8F0AAF6EDA8F9F1ACF3EAA5F8F1A9F6EEA6F5EDA3FCF5AEFBF2AFFAF1AE FAF2ACFAF2A9F7EFA6F7EFA5F7EFA5F6EEA4F5EDA5F3EBA3F1E9A1F2EAA2FBF2A9FEF9B0FAF2A9 EEE79EEAE29AEAE39CF7F0AAFEF7B4FFF8B6FFF9B8FDF6B8F6F2B2F6F3B4FAF7B8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D07DCBC687 7E78493531049E9C5FC0C272BCBC63D0CF74C6C071D3C988CAC07CC3BE66CFC8778B823B594F0C CFC788CBC380D1CA80C9C777E1DF8CB9B765989547A7A55A6C6C23D0CB81D0CA7ED6CD80D7CB7B DCCF80EDE091EBE193E5DC90E0D98FCCC67BC5BD6CE8E08BEBE38EEBE38DE8E08BECE48FDCD47F DDD580E9E18CF0E893F1E994F5ED98E9E48EF1EB94ECE68EE6E089E7E087E6DF85EFE58DF2E98F EBE187EBE087EBE086E8DE85EAE28DEEE691F0E893ECE48FE7DF8AE7DF8AECE48FE6DE89EEE690 EEE791E9E18CEAE38CEDE591EBE391ECE394EFE69AE5DC91EEE59AEDE499E0D688DCD483E7DF8C E7DF89E4DB8DEFE699EFE699EDE495EDE495EAE192EBE293F2E99AF1E899EDE497EEE598F3EAA0 F4EAA6F1E7A2EAE099EDE49AF2E99CF0E797F1E995F1EA8FE4DE81D8D274E9E383F5ED99EBE397 E6DE92E9E195E8E095EBE398E5DD92EEE79BEFE79CE7DF94ECE499F4ECA1E8DC90EBDF92EFE495 E9DE8FE3D889E9DE8EE5DA8AE9DE8EF2E795F4E998E9DD8CE7DD88E8E08BF2EA98F5EC9DF3EA9D F3E9A0F4EAA4EFE59FEFE59DF2E99FECE396EAE192EDE495F1E89AEFE697F4EB9DF3EA9DE9E095 EDE499E8DF94E9E092EDE496EFE697F5EC9DF5ECA1F6ECA4F5EBA3F4EAA2F4EAA1F6EDA2F2E99E FAF1A5FDF4A7F6EDA0F1E89CF4EB9EF3ECA0F9F1A7F3EBA2EEE69EF5ECA4F9EFA7F7EBA2F3E799 EBE08EF1E68FF8ED93F6EC97FBF2ABFDF4AEF4EBA6ECE39DECE39EF1E8A3F2E9A4F1E8A3EFE6A0 E7DE99E9E09BECE39BEEE59BF3E9A1F6ECA5F8EEA7FCF2ADF9EEABEFE4A4F3E8AAF8ECB0F5E9AE FDF4B7F9EEABF8EEA9FCF2ACF9EFABF5EBA6F9EFAAFCF2ADFAF0ABFAF0ABFBF1ACFAF0ACFAF0AB F2E9A2E4DC94ECE59DDAD58CA29F57BAB773C4C382A2A2658B8A52666631807F4E5D5B31464325 443E322620102B27121811082C2B00959853818248787A38ECEFAEE5E2B59996751C1B00403D1E 716E4163612AC2BF7FE9E29AE8E195EFE699F6EB9CF2E697EDE194F6EBA4F7EDA6FAF0A9F2E8A0 F1E79FF8EEA6F8EEA6FBF1A7F6EDA2F2E99EF7EEA2FDF4A8F9F0A3F3EA9EF7EEA0F0E798EBE293 EFE696F2EA99F7EF9CF4EC9AEAE18FEBE290EDDE95F4E19EFAEBA5FCEFA8DBD288AEA65AECE896 F2EC97E6DC85EEE389FCEE93ECDF81E9E286F6F099E1D98DF6EDAA968D4C7A712DFFFAB5EFE89C EEE699F1EA9DF5EDA5E7DD95E7D789DBCD7ECFC67AD5D08D6664311A19003A3A214F4D3363633A 868647AFB15D9D9E48B1B05ED0CD7CDCD788E6E094DED68BD9CE84E5D98DF1E395EEDD8EE8D786 ECDC89ECE28AF2EB92F3EC94EDE592EDE593F2E99AF5EB9EF2E99BF6ED9EF5ED9CEEE694F0E999 F7F0A7F5EEA8F0E9A3F5EEA8FBF4AEF8F1ABFCF5AFF5EEA8F9F2ACF3ECA5F6EFA9FFFBB8F9F0AF F5ECA9F2EAA4F6EEA5FCF5A9FDF7A9F7F0A2F6EEA3FDF5ABFBF3ABF9F0ADF7ECA3FDF1A5FFF7AA F7EFA2EEE598EAE298F4ECA3F9F1AAFEF6B4FFF7B9FFF6BCFFF7BEFAF4BAF9F3B7FDF7BCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD37B EBE19A473D07766F3AC4BF7CD4D27BD1CD6CD4CF6ED0C66EDBCD84CABE77C2BC6DBEB86FBEB774 2119068D8546C6BE7AC0BA6DD9D382D0CB79E0DA889B9547BEBB729090488D893FD5CE84D7CE81 E0D687DACD7EE6D98AE5DB8CDDD486DED78BDED88BE1D986DFD782EAE28DE1D984E1D984E8E08B E5DD88E7DF8AE8E08BF0E893F6EE99F0E893EFE993F4EE98F1EB95F1EB93EFE890E9E28AE9DF86 EBE188F4EA91EFE48AE6DB81E6DC84E8E08BE8E08BEFE792F4EC97EFE792E7DF8AE8E08BE4DC87 EBE38EECE48FE4DC87EBE38EEDE590EDE593F1E899F3EA9DE7DE93E1D88DEDE498E9E091E4DC8B E9E18DE4DC89E6DD8FF5ECA0F4EB9EEAE192EAE192EEE596EEE596EDE495EEE596EFE699ECE396 EDE499F4EAA4EEE49FF0E69FEEE49AF1E89BF5ED9DF2EA98EEE691E3DC83DCD57AE9E288F1EA97 ECE499F0E89DF4ECA1EFE79CEBE398E6DE93EBE398ECE499EDE59AF2EA9FF4EDA2EDE195EBDF93 EBDF94E8DC90E8DD8EF1E697F9EE9EE8DD8DF2E798F2E797F2E796EDE290DFD787ECE396F4EBA1 F2E8A1F1E7A3F2E8A4F1E6A5EFE4A3F1E7A2EFE59EEDE499EDE498F1E89BEEE598F3EA9DF2E99C E9E095EDE499ECE398F0E79AF4EB9EEFE699EFE699F2E99EF4EAA1F5ECA1F6EDA2F4EBA0F3EA9F F0E79CF5ECA1F9F0A3F9F0A3F6EDA0F5EC9FF9F1A6FBF3A9F4ECA3EFE8A0F4EAA3F6ECA5FDF1A7 F6EB9CEEE391F3E891F9EE94F7ED99F6EEA5F8F0A8F3EBA2EEE69EF3EBA2F8F0A7F5EDA5F4ECA4 F1E9A1EAE29AEFE79FECE398EBE295F0E89CF3E9A0F4EAA2F5EBA5F4E9A6F4E9A9F4E9AAF8EDAF FAEEB2F9EEB0F8EDAAF5EBA4F6ECA5F4EAA3F1E7A0F6ECA5F4EAA3EEE49DF0E69EF7EDA6FAF0A9 F8EEA7F1E9A1E8E199F6EFA7D7D289B5B16AC9C782C6C6847C7C3E7F7F465B5B268383515F5F32 59593770695A2E29162C271119130C393811D7DA95C0BF87BBBB79919151525023171400252304 4D4B278F8C5F626027979453E9E299EFE89CF9F0A4F7EC9DEFE395F4E89CF8ECA3F6ECA4FCF2AA F9EFA7F1E79FF1E79FF6ECA4F7EDA3F3EA9FF1E89DF6EDA2FBF2A7FDF4A7FEF5A8F4EB9EF2E99A F1E899F2EA9AF4EC9BF4EC99F7EF9CEFE794EAE28FEADC8CF4E394F5E697FFFAABCEC576B3AC5B EEE898E3DC8DEEE495EADD8FF4E598FEEEA1F0E69AF1E9A2F0E6A9FEF2BCC8BD85322800DAD18C F3EC9FD5CE7DD9D283DBD387C6BD71D1C372DFD282D6CE81CAC88462602D161600282710323115 65653A8B8B4CA6A854969640C0BF6DEEEB9AE6E192E4DE90E7DF94F1E69AF6EA9EF8EB9BF2E491 ECDD88ECDD86EFE58CEEE78EEEE78FECE491ECE391EFE697F5EC9FF6ED9FF7EE9FF3EB9AF2EA98 F9F2A1F3EBA3FDF6B0F9F2ACF4EDA7F4EDA7F4EDA7F8F1ABF5EEA8F9F2ACF4EDA7F4EDA7FCF5B1 F8EFAEF2E9A6EFE7A1F4EDA4FDF5AAFBF5A9F6EFA1F9F1A6FCF4ABFBF3ABFFF8B5F6ECA4FBF0A1 FEF5A6F7EE9FF3EB9BFBF3A7FCF4ABFEF7AFFEF6B4FDF5B7FDF4BAFFF6BEFDF7BBFAF4B6FDF7B9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D0C565D5C7783B2E00A89C5BCFC67CDBD37BDAD371D7CE6AD9CB70E1D080CCBF78C2BC79CBC688 DFD99E342C1550490AC0BA72CBC575D1CB76D0CA75E2DA89C2BA6E9F9A53D7D4905A5610B4AD64 D7CF84D4CB7DDBD080DBCF7FDDD283DFD686D8D283CBC474E9E18EE3DB86ECE48FE2DA85F2EA95 ECE48FE5DD88ECE48FE9E18CEFE792F1E994E3DB86EDE792ECE691ECE690F3ED96F8F19BF3EB93 E1D77FE3D981F8EE95F2E78EE6DB81EBE188ECE48EEAE28DEAE28DEAE28DECE48FEBE38EEFE792 EAE28DF2EA95F2EA95EBE38EE2DA86E9E18EF0E997ECE394E7DE90EBE296E2D98CF0E799EFE697 E8E08FEBE390E9E18EEAE193EEE597E7DE90E5DC8EECE395F0E79AEFE698F1E89AF0E799ECE395 EBE294EDE499EFE59EEAE099F1E79FEDE399EEE59AF4EB9EF0E898F1E998ECE491E9E28EEEE692 F1E99BEFE79DF4ECA2F7EFA5F1E99FEEE69CF3EBA1F0E89EEDE59BEFE79DF2EAA0F3EBA1F2E69D F0E499F1E59AEFE398ECE094F2E79AE9DE90F6EB9CECE192DCD181F1E696F6EB9BECE196F3E89F F5E9A2F3E7A3F6EAA9F8ECAEF1E5A6F5E9AAF4E7A7F2E6A2F6EAA7F2E79FEBE196EAE094F1E69B F3E89DECE297EEE399EDE398F3E99DF4EA9EECE196E9DF94F1E89DF0E79BF0E79BF3EA9EF6EDA1 F6EDA1F2E99DF2E99CF2E99CF5EC9FF8EFA2FAF1A4F2EAA0F9F1A7F7EFA5F4ECA4F6ECA4F2E8A0 FAEDA2F6EB9DF0E592F1E590EFE48CEAE08DF1E89EF6EEA6F2EAA1EAE298E9E198EFE79EF2EAA0 F1E9A1F0E89FEDE59BF5EDA5F3EB9FF2E99BF4EB9EF2E99DF1E79EF1E89FEFE59EFAEFABFFF5B3 FFF6B6FFF5B5F7EBACF6ECA5F3E9A0F4EBA1F3E8A1F1E79FF9EFA6F4EAA3F8EEA6F9EFA6F6ECA4 F5EBA3F6ECA5E5DD95F6EEA6E3DC94DBD58DD8D48DD6D38FBCBB7A8C8C4E96955C81814C979765 6B6B3C5B5C36615D492C28112E2A12130D02333109E0E29DF7F6BDECECAAA8A86869663B4E4B29 403F1F6B68426B69396D6B32B0AD6CD4CD85E2DB8FF6EDA0F3E899EDE093FCF1A5F9EEA4F3E9A1 F8EEA6FBF1A9F6ECA4F4EAA2F0E69EF3EAA0F3EAA0F1E89EF2E89FF2E99DF7EEA1FCF3A6EDE496 F1E899F5EC9DF4EC9CF7EF9EF4EC99F2EA97EBE390EEE692F3E790EEE087F6EB92F9EE98E5DD89 A8A04FEEEA9EEAE198F4E8A3F3E4A2FFF6B6B5A5678F8349F6ECB7FAF0C0D2C5999083533A2E00 D8CF8DFEF7ABE3DC8BE3DC8BD9D282D4CB7BCEC26DD4C976CDC67ABEBB7B43420F0D0D04343517 6B6A4B6E6C418F8E50A4A253BCBA67D3D180EAE695E5DF90F0EA9CE8E092F0E598F4E999F1E591 F0E28BEEE186ECDF84F5EC91EFE98FF0E991F1E996EEE593F1E899F2E99CF4EB9DF2E99AEEE795 F2EA97F8F1A0F4ECA4FBF4AEF6EFA9F0E9A3F0E9A3EFE8A2F9F2ACF7F0AAFBF4AEF8F1ABF5EEA8 F9F1ACFBF2AFFAF1ABF8F0A8F6EEA5F6EEA3F3EB9FF3EB9FFAF2A8FDF5ACF8EFAAFCF4B0F4E99E F3E898F6EE9EFAF2A2FAF1A1F5EE9EFCF5A8FEF6ADFCF5AFFBF3B3FDF5B7FFF8BCFEF9B9F8F3B2 FAF5B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE5D777BAAA58453604C7B977E2D890D4CC77DAD273DAD06EDACC70D9C876CABE79D6D29B D7D4A07E7844140F00282202C3BD71D6D07CC2BB62D1CA72CCC271DDD186857C39B5B171BBB572 78712ADDD58CD0C77BD7CC7EDBD07FE0D583D7CF7CD2CB78E1DB88DFD784E6DE88E3DB86DFD782 EEE691DFD782E7DF8AEEE691EFE792EDE590E8E08BDED681EAE490F4EE9AF7F19DF9F39EF5ED98 ECE48FDCD27CDFD57DEFE58EECE188E7DC83E9DF89EAE28DF5ED98F4EC97ECE48FE7DF8AEDE590 F4EC97EDE590F4EC97F6EE99F1E994F0E895E5DD8BE5DD8CF0E798EEE597E4DB8FE4DB8EEEE597 E9E091E3DB8AE7DF8DE4DC8BE7DF8EEBE293EBE293EFE699F1E89BEBE295EFE698F4EB9EF2E99B EBE293EBE293EFE698EEE49BEBE199EFE59DEEE59AF0E79CF4EBA0F5EC9FF7EEA1F4EB9EF3EA9D EAE192F1E99DF4ECA3F4ECA3F2EAA1EAE299ECE49BF2EBA2EDE59CEBE39AF0E89FF2EAA1F7EEA6 EFE39BEEE29AF2E69CF1E59BEBDF95ECE094E5D98DEBE092D8CD7EECE192FBF0A0F5E99DEEE29A F9EDA5FDEFAAF7EAA7F3E5A4F3E5A7F9EBACFCEEB0F5E7A8F3E5A4F8EAA9F6E9A3F4E89EF0E49A F4E89EF5E99FEEE298EFE399F0E39AF5E99FF4E89EECE096ECE096F7EEA1F2E99CEDE497F0E79A F3EA9DF2E99CFDF4A7FBF2A5F6EDA0F2E99CF4EB9EF9F0A2ECE499F5EDA2F6EEA3F7F0A7F8EEA6 F2E99EF7EAA0F8ED9EF5EA9AF4E895EEE18DE4D988ECE496F6EEA4F6EFA2EDE698E8E095EDE699 F3EC9EF3EBA0F1E99DECE597F1E99EF5ED9EF4EB9CF4EB9CF2E99CF3EA9EF7EEA4F7EDA5FAF0A9 F9EFA8F2E8A1F1E7A2F7EDA7FBF1A9F7EEA3F7EEA3F2E99FEEE59AF2E99EF4EAA0FDF4A9FBF2A7 EFE69CEEE59AF4EBA0E9E198E7E098DED78FD9D48BCFCB84CECC879998578F8F518E8E55979762 8C8C5A7575455A5B3144422B3532193B371C120E005F5E2FFFFFBFD5D398EEEDACDEDC9C817B4F 423F1E4A49275452297E7D4C908E54EAE9A6D3CC84DCD589F1E89BF2E797EADE91FBEFA3F4E99F EBE199EFE49DF3E9A1F3E9A1F6ECA4EBE199F1E79FF5EBA3F3E9A1EDE39BE9DF97F0E79BF4EB9E E8DF91F0E798F5EC9DEEE696F2EA99F9F19EF8F09DECE491EBE38FF1E68CE6D97BF9EE92EDE288 FDFAA3BCB463C9C075FFF7B1F5E8A9DACA8F93814B74622EFBEDBCBCB081675A303C2E07322500 7E723DF3E9A9F7F0A4E9E291DFD887D8D180E9E18FDDD07AD5CA77D5CD83CBC78B33320620200E 3E3F207878565B582B8B874AA4A153DDDA88E8E594E5E08FE8E293F9F2A2ECE394ECE292EDE290 EADF88E9DD82E8DB7DE7DB7BF5EC91F0E990F5EE95F4EC99ECE391F1E899F5EC9FF5EC9EF0E798 EFE796F4EC9AF4EB9CF9F1AAFBF4AFF5EEA8F2EBA5F5EEA8F4EDA7FBF4AEF9F2ACFBF5AFFBF4AE F7F0AAF8F0ABFDF4AFF6EDA8F4ECA4F7EFA6FCF4A9FAF2A7F5EDA3FAF2A9FEF5AFF9F0ABF9F0AC FEF3A8F5EA9AEAE291F2EA97F9F19FF4ED9CFBF4A4FDF6AAFDF6AEFDF6B2FFF8B8FFFCBCFFFDB9 FAF6AFFBF6B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFBF7FDF8F0F9F8ECF8F8EBF8F8EBF8F8EBF8F8EBF8F8EB F8F8EBF9F8ECFCF8EFFFF8F2FFF8F2FCF8EFF9F8ECF8F8EBF8F8EBF8F8EBF8F8EBF8F8EBF8F8EB F9F8ECFDF8EFFFFAF6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEE088B1A5574B3E0DD2C78ACAC182C7C077D5CD7CDFD883DCD180D1C275D1C888 B5B18555522C18150018130047410DDFDA8ED7D17AD1C96FD7CD73D6CA78D8CA80B0A662837D3E E1D99799924D87803ACBC478DFD688D6CE7DD8D07DD7CF7CD0C872E1D983E7DF8CEBE390E6DE8B EFE794E8E08DEEE693EBE390F1E996F7EF9CEEE693E5DD8AEAE28FEDE695FBF4A3FBF4A3F5EE9C F1EA97EBE28EE5DB86E5DB86E8DE87E7DB85ECE08AEBE18BE2DA87E8E08DF0E895F1E997F0E895 EEE693EFE794E5DD8AECE491F0E895ECE491F7EF9EE9E190E5DD8CECE394E8DF90E1D889E7DE8F ECE394E3DA8BE1D988E5DD8CD9D180EAE291F2E999EEE596EBE295EEE59AF0E79CEEE59AEDE498 EEE598EEE596ECE493E9E091E9E095EBE296E7DE93EDE499F1E89DEFE59BF3E99FF1E89EF1E89D F4EBA0E8DF95EAE098EFE59DF0E69EF0E69EEAE098EFE59DE8DE96E6DC94EEE49CF2E8A0EEE49C F4EAA2EEE29AECE098F0E49CF2E69EEEE297EEE299EFE397DCD084D4C87CFFFCADEBE192F0E596 F1E59AF9EDA2F9EDA2F5E9A0F3E69FF5E8A1F9ECA7F3E6A1F1E49EF9EDA8FAEDA8F1E59DF4E8A0 F1E59DF5E99EF7EB9FF1E599F5E99DF6EB9EFAEEA3F8ECA2F2E69EF9ECA4F6EDA0F0E798EDE495 F3E99AF4EB9DEFE699F2E99CF8EFA2F8EFA2F1E89DEFE69BF5ECA2EFE79CF3EBA0F0E89DF3EBA0 F7EEA3F3EA9DF5E99DF8EC9EF6EB9BF9EC9BF5E997E9DE8DE1D889F0E79AF4EB9DF3EA9BF4EB9E F5EC9EF2E99AF5EC9FF5EC9EF0E798F4EB9DF8EFA0F5EE9CF1E998EDE495EFE697F6EDA0F8EFA4 F5ECA1F5EBA3E4DA92D9CF88EEE49CF8EFA3F6EDA0F7EEA1F3EA9DECE396EFE698F2E99CF3EA9D F0E79AECE396F0E79AF9F0A5F5EDA5DCD58DD9D28ADFDA91BDB972D0CD89BFBE7D969658828149 90905B6C6C3A787948535528414025413E233D3A19160F00605D2FEBEBA2EBE6AAE0DD99D0CB8D 60582C2F2C094F4F2E2B2A0969673788864BE7E4A1F4EDA5EFE79BFAF2A4F8EBA0E8DB90F0E498 F5E99FEDE599EFE69BF0E79CF0E69DF5EBA3F1E79FF3E9A1F4EAA2F2E8A1ECE29BEBE198F1E89C EEE598EBE294F1E899F3EA9BEFE797EEE695F2EA97F8F09DF1E996ECE390ECE18AE9DE83FBF098 F2E890F9EE98F0E5948074274F43005C4F0D5A4A0E92824BF5F0BCAEA26B43370A4E421A807446 E1D6A5FFF9C0F0E8A4EEE799F6EF9EEAE393E8E095E8DF91D1C76FD2CA78D8D38BC7C58A191705 31310E494A2A4A4A23767441BEBB7AC8C477D1CC7ADCD785E5E08FE0D989D7D081DDD484E6DC8B E8DE88E8DF85E7DD7EE6DC7AEBE17FEEE58AECE58BF6EF96F2EA97E4DC8AEDE494F5EC9FF2E99B EBE293EFE896F4EC9AEAE292F1E9A1FFF7AFFAF2AAF0E8A0F5EDA5FBF3ABFAF2AAF9F1A8F8F0A8 FAF2AAF7EFA7F3EBA3F5EDA5F4ECA4F6EEA5F9F1A8FCF4ACFBF3AAF3EBA3EFE79FF5EDA6F6EDA8 FAF1ABFDF4AAF9EE9EF0E897F5ED9AFAF29FF7F09DF8F1A0FAF4A6FAF4A9FAF3ACFBF4B0FDF6B2 FFFFB7F8F4ABF9F5ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FFEDDAF8E1BCE6E2ABE2E2A6E2E2A6E2E2A6E2E2A6 E2E2A6E1E2A5E4E2A8F2E2B7FFE2C3FFE2C4F4E2B8E5E2AAE1E2A5E2E2A6E2E2A6E2E2A6E2E2A6 E2E2A6E5E2AAF6E1B9FEEBD7FFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDED487D0C785372D00A09769DFDBA7D5D299E4E3A2C8C581A7A35FC9C27F DCD69D848259716D4E6A66407A7748BEB87CE8E39ADED882DDD379D5CA72DBCF7BD7C67AD6CB86 7E7737A79F5DD0C985403900A6A055E5DE91E2DA8AD3CC7ADED580DED57ED8CF78DCD481D6CE7D DCD483ECE492E6DE8CE9E18FEDE593EDE593F4EC9AF0E896E8E08FECE492F2EB9BF1EA9AF2EB9A F0E998F1E998F2EA98EBE08EEDE38FEEE290EDE18DEFE38EEFE591E6DD8CE5DD8BEAE290ECE492 ECE492EBE391E8E08EE2DA88DFD785D8D07EE6DE8CEDE494EBE393ECE494EAE292E9E090EBE292 F4EB9BE7DF8FE2DA8AAEA656B5AC5DECE493E9E190EBE291EEE596EEE598EDE39AEFE69DE8DE94 E5DC91E9E093F0E797EFE796EAE292E7DE92E7DE92E3DA8EEBE295ECE398EDE39AF2E8A0EBE19A EBE199E7DC95E7DD95EBE099EFE39AF5E9A0F6EAA1F2E79EF2E79EECE197F1E69DF3E89FF3E89F F2E69DE9DE95F8ECA4F1E59CEFE39AF3E79EF4E89EF2E69BECE094F2E699F5E99BECE596D0C575 EDE293F4E895F6EA98F9EE9CF0E492EEE291F4E898F0E495EDE194ECDF92FAEDA0F8ECA0EBDE93 F4E79FF0E39AF2E49AFAEDA0EFE394F1E596F3E798F1E598F2E59BF3E69DF8EBA3E6DD8EEBE391 F1E999F5ED9CF9F1A1F8EFA0E9E093F2E99CF5EC9FF4EBA0F4EBA0F1E89DF0E89DF1E99EF2EA9F F5EEA1FAF2A5FBF2A3EEE294F5EA9BFAEFA0FDF0A1F7EA9BEEE293EAE090EFE595EDE393F1E797 F7EC9DF2E898EEE394F1E797F1E797EFE595F4E99AF3EA9AF6EE9DF6ED9DECE394ECE394F3EA9C F3EA9EEBE296EAE195EEE599EFE69CF5ECA1F0E79AEEE598EDE497EDE497EEE598F1E89BFBF2A5 F9F0A3F4EB9EEDE497FEF9ACEEE69BFAF2AAD8D088E0D991D6D188CBC780CCCA85D3D2918C8C4E 74743B80804B5454227171404A4D1F48472A454222211E09161000716F3CF2F1A6F5F1B2E0DA96 F8F1B08C825425210015150056552B777541B5B477F2EEAAF8F2A8EDE699F1E99BF4E89CEFE297 F6EA9FF6EB9FF2E99DF1E89BF3EAA0F8EFA5F9F0A6F7EDA5F5EBA3F9EFA8FBF1ABF6ECA6F3EAA1 F9F0A3F0E79AF2E99BF7EE9FEFE697F1E898EBE392EAE28EF4EC99F0E895E8E08EE7DD8DF1E596 F7EC9CF6EA99F3E796F3E795E4D889CABD71D3C57DE2D893FAEFAEF8EAABD4CB84DFD691F9F0B1 FDF3B9F9F1B5E9DF9DD8D086E4DD8DF3EC9BEEE799E9E09AE4DA91DDD47CDCD484E0DA97B9B680 0907033E3E1B565635403F149A9961C7C37FDCD689D8D281E5DF8CE7E190E9E291E1D988E0D886 E3DA88ECE48CECE389E5DC7EEAE280EAE27FE4DD82E8E188EFE88FE8E08DDFD785E5DC8DE9E093 EBE295E8DF90EBE392ECE491DFD786ECE49CF6EFA7F2EAA2EEE69EF4ECA4F7F0A8FFF8B0FDF5AD FDF5ADFEF6AEF8F0A8F0E89FF3EBA1FCF4AAF9F1A8FAF2A9FDF6ADFBF3ABF0E7A1E4DC96EAE19B F8EFAAFCF3ADF5EA9FF5EA9BF5ED9CF4EC99F4EC99F7F19DF8F1A0F3EC9DF7F1A4FAF3ABF4EDA7 F9F2ADFAF7AEEFEBA1F5F1A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFBFCF4E3F7F1D6F2F0D2EFF0D2F2EFD0F9ECCAFBEAC3EDEAC1EAEABFEAEABFEAEABF EAEABFEAEABFEAEABEECEAC0F6EACBFFEAD4FFEAD4F7EACCEDEAC1E9EABEEAEABFEAEABFEAEABF EAEABFEAEABFEDE8BFF9DFC3FAE2C9F3ECCFEFF1D2F2F0D3F9F1DCFFF4E9FFFDFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFB F1FEF1D7F1D7BFE4BEC0E8BCD1F1CCF6FCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFDFBD9EED9BEE2BEBDE2BCCDEBCCECFCECF9FFF9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDFD895E9E3A84D47212F2C0F86845D87865B696B3B3A3D0877783E D3D397A2A16A615E324D4A215752299C9769E1DAA3D9D38ED7D081E4DD84D5CB71D7CB77DFD383 DED48DA8A15D837C38DED7927C752F696219D0C87DDDD688D8D07EE4DA85DFD57ED8CE77E2DA87 DDD584E3DB8AEAE291EBE392EFE796EDE594E9E190F0E897F3EB9AEEE695ECE493F0E999ECE595 EFE898EBE494E5DC8DE6DD8CF2E696EFE494F4E896F7EB99EEE290E3D786DFD786F3EB9AEEE695 E0D887ECE493EFE796EFE796EEE695EFE796EAE291DBD382E8DF90EAE192E5DC8DE3DB8AE8E08F F0E897E9E190DCD483E5DD8CAFA657B1A859E9E092D8D07DE8E08EF1E899F0E79BE9E097E6DC94 ECE29AECE398ECE396EAE191E5DD8AE2DA88E7DE90EAE194E5DC8FE9E093EEE59AF2E89FF2E8A1 EEE49CEFE59EE6DC94EEE49DF9EDA4F7EB9FF3E79CEEE297ECE094EFE398E6DA90EEE296EDE195 F0E49AFCF0A4F7EBA1F0E49AEFE399EFE399F1E59BF0E498EBDF93FBEFA2F2E798EBE090EBE091 E4D989F7EC9AE9DE86EDE288F1E68CEBE086EADF85ECE188E9DE85F3E791F2E691EBDF8BF0E490 F8EA9DFDEFA5F5E79EF6E99CF9EC9DE6DA87EFE38FF3E795F0E395F1E397F3E59CF7EAA0ECE191 F1E996F4EC99F3EB9AF5ED9DF5EC9DF9F0A3F8EFA2F2E99CF1E89DF7EEA3F7EEA3F8F0A5F7EFA4 F6EFA1F6EFA0F6ED9EF5EC9DF7EC9DF3E899F1E697F3E698F4E799F2E698F2E798F0E595EBE090 F1E696F8ED9DF3E898EEE393EEE393F0E595F4E999F7EB9BF3EA99EEE596EAE192F1E899F9F0A1 EFE696F0E79AF1E89BF1E89BF3EA9DF4EB9FF6EDA2F1E89BEDE497EAE194ECE396F0E79AF0E79A F3EA9DEFE699F8EFA2E8DF92FDF4A6F1E89DF1E9A0E2DB93EFE8A0D4CE86E3DF98DAD793BBBA79 8080428C8B53686933646432686A38484B1D4341254B49281D1A010E080079743FFFFFB9E9E4A2 E0DB92F2EAA4746A374D49206061399C9B6D8B8A52B0AF70EEEBA5F8F2A8EEE79AEEE698F3E79B F3E69CF9EDA3EEE296F3EA9DF3EA9DF5ECA1F6EDA2F1E89DF6ECA4FAF0A9FCF2ABF6ECA7F2E8A3 F2E9A1F7EEA1F0E79AF2E99BF6ED9EEDE495EFE797EBE392ECE491F1E996E8E08DE2DA88EFE49A EFE29CECE097F0E398F2E597F1E593D2C672E9DD8BEEE292ECE192F0E59AE5DC90DBD581F3ED9B EFE79DF5ECA5DFD690EAE298E2DB8BEAE392DED787DBD38ADBD291CBC27CC4BC66E7DF94DAD498 9C97690E0B01454524696A457E7C4CA8A569A09C54D5CE7FEBE492EBE591E0D989EBE392F2EA99 EAE291F0E895F4EC97EADF88DAD176DBD273D9D071E3DC80E3DC82E9E289E2DA87D9D17FECE394 E3DA8DE9E092E7DE8FE8E08FEBE391E7DF8DF5EDA3E5DD95E2DA92F4ECA4F7EFA7E6DE96F6EEA6 F4ECA4F4ECA4F4ECA4F3EBA3F2EBA0F7F0A2FCF5A7FAF2A8FCF4ABFBF3ABF1E9A2EFE6A1F0E7A2 F5ECA7FFF7B2FFF8B3FEF3AAF8ED9DEBE393E9E190F2EA97FBF4A3FDF6A4EFE899F3EDA0FDF7AD F9F2ABFBF4AEF2EEA5E8E49BF0ECA3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEFB FDFDF8FCFCF7FBF9EEF7E9C2EFE2ADE5E1A7E0E1A4E6E5ADF4F1C6FFFBE0FBFBEEFBFBF2FBFBF2 FBFBF2FBFBF2FBFBF2FBFBF2FBFBF3FDFBF5FFFBF6FFFBF6FDFBF5FBFBF3FBFBF2FBFBF2FBFBF2 FBFBF2FBFBF2FBFBF2FBF7EFFFE6E2F6E0C9E7E1AFE0E2A4E6E1A9F4E1B7FFE5CDFDF7EEFEFCF8 FFFDFAFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2FEF2D6F7D69FDBA071C36F73CA6B96DD8DE4F6E3FAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFEFBEBF7EAA5D8A570BF6F6CBE6B8BD08BCBF2CBEBFDEBFEFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEC887DED9A0ACA9771E1C04020200020500343615838659 6265335A5C223E3F0C0E0A001813021C1507120C00736C3CD2CA8AD3CB80D5CD79D8D278D6CD75 D7CE79D3CA7DCBC27C777029D5CE88D0CA834B4700B0AA60E2DB8EDBD484EBE18DDDD27CE2D782 E2D987DFD786E3DB8AE6DE8DE9E190F2EA98E9E190E4DC8BEDE594F4EC9BF0E897ECE394EFE89B F0E99BF6EFA1F1EA9BE5DC8EE3D98AEADF8FE6DB8BEFE393F7EA9AF1E493EDE291E8E08FE7DF8E EAE291E9E190EBE392EAE291F6EE9DF2EA99E9E190EFE896E7DF8EE4DB8CE7DE91E8DF90E5DC8C E5DD8BE9E18EEDE592E6DE8BF1E998DFD687E4DB8DF2E89AE0D885F4EC99F1E899EFE599F5EBA3 F2E8A1F6ECA4FAF1A8F6EDA0EBE292E6DE8AE7DF8DEFE697F0E798EBE293EAE194F1E89BF4EB9F F4EB9FF6EDA1F5EBA1EBE296F1E79DF7ECA0F4E999F0E496EDE193EBE191EBDF91E8DD8FEEE393 E8DD8EE9DD90F5EA9BF4E89BE8DD90EFE396F3E79AF0E597EEE393EDE293F8ED9DE6DB8BD8CD7A EADF8EEFE492F0E691E5DA7FE7DC80E2D77AE7DE7EEDE484EAE180E7DD7EE9DE83F2E78DE8DC85 E9DD86F3E697F2E49AF1E397F8EC9BEEE28DE1D67EEEE28BF3E790F3E793F1E495F1E397F3E69C F5EA9AF6EE98F2EA95EEE693F4EC99F5ED9CF6ED9EF7EE9FF0E79AEDE499F1E79EEEE49DF4ECA1 F2EB9EF0E99BEEE798EDE595EDE594F8ED9DF1E697EEE294F1E399F4E69CF5E79CF5EA9BF2E798 EEE394F1E697F6EB9CF0E697E9DE8FE8DD8EEADF90EFE495F4E99AF6EC9EF3EA9DF0E79AF6EDA0 FCF3A6F1E89BE2D98CF1E89BFCF3A6F4EB9EF0E79AF9F0A3F7EEA3F0E79DF0E79CF7EEA4F8EFA4 F2E99FEEE59AE8DF94F8EFA4EAE197F7EEA3FDF4AAF3EBA3FAF3ABE4DD95C7C279D5D18ACBC984 ACAB6A9292549E9E654F4F1A7575437476455B5E3041402456543532300B160F008E8B4FF5F3A2 EFE9A2F9F2A4E7DF939A8E56605C3098986E77764573723A999858F0EEA5F0EAA0EAE396EAE194 EEE296EFE298F2E69BE8DD8FEFE697EEE596EEE598F4EBA0F6EEA3EEE49CFAF0A8F6ECA5ECE29D EEE3A1F3E9A3F6EDA1F3EA9DF1E89AF3EA9BEEE596F2EA9AEAE291EBE390EEE693E5DD8AE9E18F F3E9A1F1E6A5F7EAA5FAEDA4F1E495E8D886F3E58FDBCD77DDD17BDDD37DF2E996BBB360E1DB83 EFEA94F6EF9EEFE79DF1E99FF4EFA1F1EA98F8F1A0E1DA8ADDD58EDCD294C4BB79D0C876F2EBA4 DAD5A074704A1C18014B4B2B4F4F26807F47A2A05BB5B263ECE592EDE590EAE28DE2DA87E9E190 F3EB9AF2E99AF5EC9CF0E896E9E28FE7E089E3DC83E3DD81EDE68CE8E187E8E289E1D985D9D17F EDE495E3DA8DEBE294E9E091E8E08FEEE694F4EC9AF3EAA0F4EAA2EFE59DEDE39BF3E8A0F5EAA2 F0E69EF0E69EEEE49CEDE39BF2E8A0F5EDA0F4EE9DF7F0A1F8F0A5F6EEA6EDE49EE5DC98F1E8A5 FFF7B4FFF6B3FCF3B0F9F1ABFCF2A9F7EBA0EDE497F0E799F8F09FF9F2A2FFFAAAF2EC9DF2ECA0 FCF6ACF9F2ACF7F0ABFDFAB5F5F0ABF9F5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 F9F9DEECECC3E9E9BDEBEABDF5EDBDF6EFC3F1EFCBEEEECDF1F1D2F9FAE4FFFFF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF4F7FAF0E6F2EFD4EEEFCDF1ECCDF8E1CAFADCC5EDE6BF F3E9C7FDEBD7FFF8F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBF2DBA0DAA06DC16D53B45155B95175C96FBDE5BCE4F5E4FCFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF5DBADE4A674C77052B3514FB14E62BB618FD38FCBEBCA FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED58FD5CD8ED6D199A39F6E6966421717001D1E03 1C1E004F5219B7BA799B9C59747035B6B074CCC4906C613B190F006A6032CFC882C9C373D2CC75 D5CF74C1BC62D3CA7AD2CA7F9C954CAFA860E5E2997370316C6821E2DC91D3CC7FEADF8FDDD27E E7DB86EBE090E2D98AE7DE8EEFE797EEE595ECE394ECE394E9E191F5EC9CFBF2A3F3EA9BEDE495 EBE497EDE599F5EDA2F4EDA0EDE597EEE497F7EC9EF2E798EEE293EEE192EFE293F3E999F2E999 F3EA9AEBE293E4DB8BEEE595E0D788E2DA8AF2E999EEE596DFD787E1D889E2D98CE7DE91EDE495 ECE493E5DD8AE1D985DBD37EDDD581E2DA88E1D889E8DF90E3D98BECE491F3EB97E6DD8EEBE296 FAF0A8F4EAA4EEE49EF4EAA3EEE598E5DD8CE9E18CF2EA96F3EA9BEBE293EBE294EFE697EEE596 EEE597F1E899F5EC9DF2E99BE9E092EBE293EEE493EEE391F0E493F5E998F5E998F1E594E9DD8B EEE291E8DD8BE9DD8CF3E796EEE291F1E797F7EC9DF8ED9EF1E696EEE392F3E897F0E593EDE38F DFD57EF1E692F3E995EAE089F1E58DF0E389E8DB7EEFE284F6EA8BEFE384F0E485E9DC80E9DC83 F2E48FECDE8CE0D082E1D185EBDC8EF5E794E3D57DE4D87CF1E487F4E78CF9EC95FAEB9AF6E699 F1E395F7EC99F5EE97EFE890EDE590F4EC98F7EF9EF1E899F6ED9FF5EC9FF4EBA0F5ECA2F0E69E F0E89DF1E99CF3EC9EF5EE9DF7EF9EF8F09DEEE392F1E696F5E99BF7E99FF2E49DEFE199F1E397 F3E69AF5E89CF6E89CF6E99DF2E599F2E498F6E99DF0E397EFE296F9ECA0F9EFA4FAF1A6F9F0A6 F5ECA2F5ECA1F1E89DE0D78CECE398F7EEA2F4EBA0F3EA9EFBF2A7F7EDA4F0E69EF3E9A1FCF2AB FDF3ABF5EBA2F7EDA6F2E9A1F3EAA1F3E9A1FAF0A8F1E7A0F2EAA2F6EFA7C7C078C6C078CBC77F AFAC68AFAE6D9F9F6178773E6C6D376F6F3D7E804F56582E3534194B492A312E0A100900A19D60 EEEC98F9F2A8DDD583EBE392AEA265433F0F63643847461478773EA1A15FDDDB93F0EA9FEFE79A EEE598F2E69AF4E69CF3E69BEDE393F2EA9AEEE596EFE699FDF4A9FFFCB1F5EAA3F7EDA8F1E7A2 F3E8A5F9EEADF8EEA7F9F0A3F3EA9DECE395EBE293EEE596F8EF9FECE493E9E18EF2EA97F0E895 F3EB99EDE49BF3EAA4F2E79DEDE091F7EB96F7E891E6D67FDBCE75E5DA82E9DF89EAE28FA9A150 D8D183E7DF93F1E8A0E4DA95E6DE97F0E99DF6EF9EF5EE9BEAE393DCD38BD8CE90DCD391DDD687 E0D897EAE4B64D482B28230C74745554532788884BA2A156BFBB67E3DD85DBD37AF1E791F2E894 EFE594F2E797F4EB9DF0E79AE4DB8BE2DA8AE9E18FE8E08EE6DF89F0E991F3EC93EAE38BE5DD8A EBE391E4DA8BE7DE91EEE598F1E899EEE695EFE795F6EE9CF4EBA1EDE39BEFE59DF4EAA2F0E69E EAE098FBF1A9F3E9A1F3E9A1F4EAA2EDE39BE6DE91ECE594F5EE9EF7F0A3F1E9A0EDE49FE7DE9C E9E09FF3EAA8F7EEABFCF3B0FCF4AEF7ECA5FBEEA7FDF4ACFDF4A9F8EFA1F1EB9CFAF4A5F8F0A5 F7F1A6F8F1A9F7F0AAFAF2B0FFFBBBFAF5B5FCF7B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF3F8F8E3 F7F7D3F1F1C2E6E6B2E4E4ADE8E7B4F7F6D1FDFDE7FEFEF6FDFDFBFEFEFBFEFEFCFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFCFEFDFBFDFEFBFEFAF7FEEDEAF9E2D5 E9E4B7F0E4B6FCE6C2FAF0D9F9F6E7FDF8EEFFFAF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFFFCFFBEE0BE6EBF6D60BA5F75C2746FC16E6EC26C84CD83BFE6BFF9FCF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFDFFFDBAE9B56ECD6664C45F73C57377C4776BBE6A5CB85B A7DAA6F5FDF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D686EEE598E0D792F5EDB3B9B682322F05 393609999860C9C986D1D284D9D887D9D487D7CF8DD7CE97E2D8AA716639160D00A59C5EE6E095 C8C46ED6D378C5C267D7D07CCCC376B9B2648B853BDCD88FB3B266363300AAA65CD5CE82E1D687 DED181DACD7BF0E595E4DB8CE7DE8FEFE697E9E091E0D788E4DB8CE4DB8CEDE495F0E798ECE394 ECE396F0E89EEFE79CF7EFA4F7EFA4F1E99CF1E79BF0E398F0E596EBDF91EADD8FF4E798F5EB9B E7DD8EF1E899F7EE9FF0E798EEE596EDE495E1D889DFD687E8DF90E1D889DFD687E7DE93E3DA8F E1D889E6DE8DE9E18EE7DF8ADFD782E5DD89E1D987E4DB8CE5DC91E7DE8FE4DD89EBE38FEBE393 F0E79BF0E69FE5DB96F0E6A0F0E69FE9E093E2DA89EAE28DF3EB97E9E091E2D98AEBE293F3EA9B F0E798EAE192E9E190EDE594EDE593EBE390EAE290F5EA96F3E791ECE08BEEE28DF3E791F6EA95 F1E591F5E993ECE08BE8DC88EEE28CE6DA86F3E896F7EC9AF5EA98EDE290EADF8DEFE490EDE38D F5EB94EDE38CF5EB94F0E68FEAE089FAEA97FAEB96F4E68EF5E78DF7EA8EF3E68AF4E78BFAEC95 EDDE8AF0E18FF5E599EADA8DE9D98BF0E190F5E790E5D87CE6DA79F4E786F3E686F7EA8FFCEE99 FCED9CF4E597F7EC96F5EE94EFE890EEE691F4EC97F1E996F6ED9EF5EC9DEDE497EEE59AF8EEA5 FCF2AAF2EB9FF4ECA0F4ED9DF5EE9EF6EF9CF7EE9BF5E997F1E696EFE397F0E29AEEDF9AEDDF97 EEE096F1E398F8EA9FF6E89DF4E69BF3E59AF3E59BFAECA1F5E79CF0E297F8EA9FF9EDA5EFE49D E5DB93EDE39BF6ECA4E8DF95EAE196EFE69BF3EA9FF5ECA1F5ECA1F3E9A0F3E9A2EFE59EEFE59E F6ECA5F6ECA5EFE59FFDF3ACF8EEA7EFE59EF8EEA7F5EBA4E4DA93F3ECA4E9E29AC8C179CDC87F C9C57E9C9A55B3B2719D9D5F5B5A228D8D5864643281845356582F3F3F26514F323C3915100901 B0AC6DF0EE97F5EEA0AFA852C8C069E3D796BCB9876162355E5D2A5E5E2271712FD9D78FEFE99D F1E99CEFE699F3E79BF6E99FF1E59AECE192F4EC9CF5EC9DF3EA9DF4EB9FF2E99EF7EDA6F2E8A3 EBE19CF3E8A6F4E9A9EBE19BF5EBA0F0E79AE9E093EBE292ECE394F9F0A0F2EA99EDE592F7EF9C F4EC99EFE794EDE695F2EB9BF1E895F1E68FF8EA91E7D87BD4C56AEDDE83EEE18AF5EA98E4DC8E 989146F3EAABF9F3B9F1E6ACFDFCC4A69C5E7D752EFFFAACE8E28FDCD584CCC578D4CB88F2E9A5 E1DA8FEFE9ABE5DDB3251F0F2C2714848365737344959653B4B261C9C46CE5DE83DED67CF2E88F E9DF89F0E592FCF1A1ECE497EBE295E1D88BD7CE82DED588EDE495F2E99AE4DD86E9E288E5DE86 E8E08DF1E896E3DA8BE9E093EBE295F1E799EEE695ECE491F1E997F3EAA0F0E69EF4EAA1F4E9A1 EFE49CF0E69EF9EFA7F1E79FF6ECA4FAF0A8EAE098DED687EBE592F5EE9DFAF2A6F5EDA4F9F0AB FCF3B1F5ECABF1E8A7F3EAA7FCF3B0F7EEA9FBEFABFFF4B0FEF5AFF6ECA5F0E79CEFE79CF0E89D F6EFA4FAF3ABF8F1ABFAF3ADFFFAB8F5EFB2F6F0B4F9F3B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFEFDFCFCF7F1F1D4 E8E8B5E7E7ADEBEBB9F2F2D8F4F4DDF5F5E0FCFCEEFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9F9 FDF4F0F6F4E2F9F4D8FCF3CEEFECBEEEE7BBF9E7C8FFEFDFFEFCF8FFFFFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEFAFBFAF0EEF0A3CFA251B35076C575BBE1BBA5D9A578C7774DB54B97D496F1F9F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFAEBFFEB99DC964BBA4775CD73B6E7B6C3E8C398D298 44B04289D288E3FCE3F8FFF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D57DE7D984DDD281E3D892655E1F 423B0DA9A469DAD695D8D688CAC86FD2D073D1CC75CEC77CCAC084E0D4A6D4C89E211700685F2E DEDA92D1CE7BD1D075D7D578CDC771E0D686D0C87A767025BCB86FCFCC83555113736E25EDE69C CDC377E0D384D8C97AE8DD8EE0D888E3DA8BE7DE8EE6DD8EE8DF90E9E091E5DB8DE2D98ADDD485 DFD686E9E093EBE399EDE59DF8F0A6F8F0A5F2E99EEFE69BEADD92EADF90EBDF90EDE192EEE193 EFE495E3DA8BE4DB8CEEE596EFE697ECE494EDE595EDE595DED686D5CD7DE3DA8BF3EA9BF1E89C E5DC90E1D88AEDE594EFE894E5DD86E1DA83E4DC88DDD583E4DB8DDDD589E3DA8CE4DC88EBE38E F0E896ECE397E6DC93E7DD97EFE59FEFE59DEAE195E6DE8CE9E18CEEE692E4DB8BE3DA8BEEE596 EFE697EBE393EEE695EEE693EAE28FEBE390EEE691E9E18DEEE48EEEE38BE9DD86ECE08AF2E78D F0E48CF5E992F8ED94EBE087E6DA83EFE48BEDE08AEAE08BF0E591F3E995EFE591EAE08BE8DE88 EEE48EEEE48EE9DF87F0E68EEAE087EFE58DF0E192F5E596FAEC9AF2E48FEFE18BF7E992EEE18B EBDC8AF2E394F5E599F7E69EF9EA9EF8E99AF0E18EF6E890F2E688E8DC7AF0E482EADF7EE6D97C EFE18AF7E996F3E594EDE38DECE58CECE68DF1E994F8F09CF3EB97F5ED9DF5ED9EF0E799F1E89D F9EFA6F9EFA6F5ECA1F3EC9FF1EA9AF0E999F0E895F0E893F8EC9BF6EB9BF6EA9EF6E9A0F4E5A0 F2E49EF3E69DEFE199F2E59CEFE299F1E39BF2E49CEBDE96EEE098F3E69CF7E9A0F5E79EF5E9A1 F4EAA3ECE29CE9DF98EDE39BEAE198EDE49BF0E79EF8EEA5FCF3A8FAF1A6F3E9A1FAF0A9F6ECA7 F2E8A2F0E6A1EEE49FEBE19BFCF2ADF6ECA7FAF1ABFBF3AEEBE19CEFE6A0EBE39BDBD58CE2DB93 C3BD74BFBC7393924CC0C07EA3A3657A7A4088885261613080825262663D43432B48462A42411D 171104B6B273F9F8A3E9E292D9D279CFC66FF0E3A0C9C5929C9C6D50501A7D7D41585619C9C77F EBE69AF0E99AEEE697F3E69AF6E99FEDE196EEE494F1E999F2EA99F3EA9CF2E89EEBE298ECE29C F2E7A3EEE4A0F4EAA8F1E5A5E2D893EFE69BF1E89CF4EB9EF7EEA0F0E799F3EB9CEBE393EFE795 F8F09EEEE694EAE28FF5EE99CEC970C1BA60E4DA7FEEE185E8D97DF7EC91F6E791F9EC9BCCC275 9D9552F0EAA8E5DBA7A69A6CAB9E728D81518A80498F8644F3ECA1E5DE8ED6CF7ED2CA7EE4DB94 F3EAA4EBE59BFDF7BD9C96700E0900403B265C5B3D84845382823EB8B664D4D075F5ED92E7DD82 F4EA91ECE28BE9DF8CF5EA99EFE698E8E093E7DE92DCD289E0D88DEDE69BDFD88BDAD27DD2CB71 E0D980E0D885D4CC7AE3DA8CEEE599E8DF93ECE395F0E797EFE795F6EE9DF7EBA0F4E89FF5EA9F EFE39AF2E59BFCF1A7EBDF95EEE298F7EBA0FDF0A5F5E89EEEE798F8F2A0F5EE9DF7F0A2F1E9A1 F2E9A4F7EEACFAF1B2F8F0AEF8EFAEFBF2AFF4ECA7F7EBA9F8ECA9F8EEA8FBF2ABFBF3ABFAF2A9 F5EDA4F8F1A8FAF3ABFCF5AFFBF4B1F8F0AFF8F3B6FBF5B9FBF4B8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFFF6EEFBF4E4F4F2DA EBEBC3E5E5B2E6E6B3EDEDCAFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFF7FDFEE5EEEFC4EDE6B5F8E5BBFBEAC9F5F3DBFAFAEAFFFFF6FFFFFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9FFF9EDFAEED9E5D990C78F4EB24D90D18FEFF8EED9F1D998D6983EAE3D7EC87DDAF0DA F9FDF9FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFF1FBF1C4EEC479CC7844B24391D791EAFEEAFAFFFA BFE3BE48B2477ACD79CBF4CAE9FDE9F6FFF6FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6C97AD7CB7BC4B967C3BB6C 5E550B938B45DDD68FCDC77CDCD881D5D270DAD871C9CA65CFCD78C3BE79D9D29ECDC499322909 3B3203DFD897D4CE82CECA77D1CC76D5CE7CDDD282D8D07F787121A39C4FD2CB83A59E5A3D3606 C9C27DD0C87DD2CA78DAD27AD6CF78D7CF7BDDD581E5DD8BEAE290EDE594E8E08FEFE697E8DF90 DAD182E3DA8CF8EFA2E3DA8DE4DB91E4DB8EEBE295EFE699EDE498EEE497EAE093E3DA8CE3DA8D E6DA8DE4D98AE7DC8CE7DC8CE1D686E0D583EBE08EEEE392F2E896F0E692EBE18DE3D985E9DF8C EEE394F4E99AEBE091E9DE8EF3E998E5DB8AE9DE8EDFD585E5DA8CE9DD91E5DA90F6EB9DE6DE88 EDE68DEAE38BDFD783E1D987EAE293EFE697F7EEA1EEE598E2D98BEFE69AF0E899E8E08EE2DA89 E3DB8AE8DF90EDE494ECE394EDE494F2E999EEE695EBE390E3DB86E7DE88E8DD88E9DF89F1E792 F0E68FECE28CF6EC94F2E790E9DF88EBE18AF4EA93FBF099EDE28FF1E694ECE18FEADF8FEEE390 EADF8DF2E795E9DE8BEBE08DECE18EEADF8CEFE491F3E79AF5E89AF7EC9CF2E697E9DB8DE4D989 EADF8FEEE192EADE90E9DC91EDDF94F1E498F7EC9CF5E996EEE28FEEE48EF0E48EF5EA93E7DD86 F0E48FF8EC99EFE492F5E899F1E696F3E997EEE491EFE590ECE38EF8EF9AFAF09CFCF29FFAF09E F8ED9FF8EC9FF7EE9FECE395F8EFA0FEF8A7F7EF9EEEE695F3EB9AF9F09FF0E897F2EA99FAF0A2 F8EC9EF0E69AF0E599EFE399EBE197E9DE97F3E6A0EEE39CECE19AF4E7A1F6EBA1F3EA9FEFE398 EBE199FAF0A9F7EDA6E0D78DE2D98DEFE698E9E092F4EB9DF1E89BF6EDA2FBF1A9FFF7B0F0E39D F6EBA3F8EEA7F7EDA6F3EAA2F1E9A0F2EAA2E7DE97FDF7ADFAF3ABE7DF97DED88EE0DA8EE0DA8E D1CE82CFCC80A4A257B9B96FBABB74B2B3729A9C5F686A329799637274437D7F542324063C3F22 4E5030121206C4C186F4EEA4E3DA8BE7DE8FF6EEA4B7AF71827F496463306E6D369C9A5FACAB69 ECE9A4F0ECA3F7F0A6F2EA9FF1E79CF1E79FEBDF95F8ECA0FFF6A9F2E99DF3E9A0FEF6AFF6ECA7 F2E9A5FAF1AFF8F0AFFBF3B2F6ECAEE9E19EF2EAA2F2EAA1F2EAA4FAF1ADF8EFACF7EEAAF2E9A3 F2E8A0EEE59AECE395EFE498ECE596EBE598BEB76CA9A057998F4C9D9251D7CF8DDFD695A09858 4D4706555113E8E6A3BEBC7E2623006A662BA6A163E9E3A2E3DB94DDD38BE3DB8ECEC778E6DE93 E4DD93EAE39DF4EFB2FDF9C447451D1916025E5C38504F2772713E918E50B8B36BD8D181F2EA95 F8EF9AFCF4A0F1E995EAE08AF6EC96F2E890F4EA93F7EF9CFCF5A4EBE496EBE89BE1DC8EC6C066 DED877DBD47BEBE38FE2D98DF1E79FF5ECA6E2D892EBE19AE6DD91E6DD8EF3EC9CEFE99FF3EDA4 EEE89EEBE29AF4E8A0F9EDA5EEE097F5E99EF9EE9FF6EE9EF4EB99F6EE9EFDF4AAF6ECA3EBE29A F2E9A3E8E19DF1EAA7EDE7A6F9F4B4FAF5B5FCF7B7F9F5B4F3EBAAF8EEABF4ECA5EFE79EF5EFA3 FEF9ABFBF4A7F8F2A5FAF4AAFBF4ADF7F0ABF3ECA8F4F0AAFAF5B1FFF9B6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFEF8EFFFE5CCF3E0B4 E6E2ACEFEFCEFAFAEEFBFBF4FCFCF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFAFCFCF7FCFBEDFDFADDF4F1C3E6E5ADF0F0C3FEFDE1 FFFDF4FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FEFEFEFDFFFDEEFFEED7FAD8B7E4B688CB876ABB69A5D6A5F4FAF4F6FBF6CBE8CA6DBF6B7AC779 AADDA9E1F3E1FBFCFBFEFEFEFDFDFDFEFEFEFCFDFCE1F2E183CA835FB95F64BA63B2DDB2F5FBF5 FAFDFAC7E7C769BD687CC87BACE1AACFF5CFE8FDE8FAFFFAFFFEFFFEFEFEFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED489CEC576D5CD7B E2DB894F4801837B36DBD48DC0BA6FC3BE6CCFCB71CDCD6DD5D577C1C06FCFCB8CC1B9895C5329 0100004B4215DED696D4CD84DBD384DDD685D5CC7BC9BE6EE2DB87A39B4982792BD3CA83CAC181 534A0C948D4DCCC67BD3CE78D1CE71D3CC72D8D179E1DA82E8E08BE6DE8AE0D885E5DD8CEBE393 ECE394E9E091EBE294EFE699E9E093EFE699EFE699F1E89BEEE598E6DD90EBE295EBE295E5DC8F E7DE91E8E092EBE192EFE495E8DD8BE3D886E3D886E5DC86EEE48EF0E691E8DD86EEE48DE7DD86 E2D881F4E996F1E696EEE392EFE493EEE393EBE091ECE192E4D88CE9DD91EADE91E5D98FF2E799 EDE68FEEE78DEEE78EEDE68CE9E28AE6DE89EAE38FE9E090E6DD8EE6DD91F5EBA3EFE69AEAE28E ECE493E9E190E8DF90EDE497E8DF92E1D88BE9E091EAE292EFE794F0E895E5DB88E0D583E6DB89 EEE48FEBE18CE9DF8AECE28CEAE089E6DC86E6DC85E7DD86E9DF8AE6DB89EFE495EDE292E9DE8E EFE494F3E898EFE494EFE494F6EB9BF5EA9BF3E898F7EC9DECE094F0E498F2E69AF2E69BF2E79B F2E69BF2E69AF7EB9FF2E69AF0E498EFE397EFE494F3E898F2E797EDE292EFE495F0E595EFE494 EBE090F3E898F2E797F4E999F3E898EFE495F2E798EEE392F0E594EAE08AF3E992F4EA93F3E992 F4EA94F6EB9BF7EC9CF8EC9DF5EE9DF4EC9BF0E897EFE796F0E897EDE594F0E897EDE594F2EA9A F9F1A0F5ED9DF2E99AF6EDA0F7EFA4F6ECA3F2E8A1FCF2ADF7EDA8EEE49FE5DB93E6DC94ECE398 EEE598F0E69EFBF1AAF5ECA2E4DB8EE6DD8EEBE392E7DF8EF1E998ECE395F4EBA0F6ECA5F4EAA3 F1E59DF2E79FF4EAA2F5EAA2F3EAA2F2EAA1DFD78EECE59CF5EFA5E8E298E9E399E4DE94E4DE91 DEDA8BCBC879B7B666BCBD6FBBBD71AEB068A3A762909354909458797C45676835434419343713 363B1E53593A151708D2CE97F2E9A5E9E093F5EBA2F2EBA6A9A56A8F8C574F4F1A818048C5C388 CECC8CE4E19DECE8A1F1ECA3F0E89FF1E79FF6ECA4F2E8A1ECDF95F5ECA1FFFFB4F0E69FFAF1AB F8EFACF7EDACF9F1B1F6EEAFFAF2B3F8F0B1F0E8A6F4EDA7F0E9A5EDE5A5F7EFB0F3E9ACF5EBAD F3EAAAF0E5A3EEE49EF0E79CF2E79AF0E89EF3ECA4E4DD9AF9F4B7D4CE958F88555B55246F6A35 7F7A43838144888745BAB9768F914C6D6E27DEDF96F5F2AAECE69DE3DB90EFE69BF4EBA0E2DA8F EEE69BE4DE93F3EEABF7F3BFCDCB9A211F002C2B106261354B4A1C63602D999459BCB673E4DD90 F8ED9DF3EB9BF8F1A2F3EA9CEBE28EF3E993F4E991F2E78FE9E28BF2EB9AF9F3A7F4F1A8ECE9A0 EFE994FAF499E9E18EF0E799F4EAA1FFF9B3E7DC9AE7DD99F1E7A0E0D78CDED587E8E190F0EDA4 F8F5ACF1EDA4ECE49CEFE49CF3E69EF8EAA1F8ECA0F6EB9CF2EA97F2EC98F2EB9BEAE098E7DD96 E3DA92F2E9A4F0E8A2FBF4B0F0EBA8F7F3B2F3EFAFF4F2B1F4F2B2EBE7A6F4EDA9F8F1AAF7F1A8 FAF4A8F9F3A5F8F2A4F6F0A3F7F1A6F9F2AAF9F2ADF8F0ADF7F3ACF8F4ACF6F2ACFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAF5F4DFF0E9C3FBDEB9 F8E2BDF1ECCBF7F8E8FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEF1F9F9E1EFEFCCEDEDBE F0ECBCFBECD0FFF3E7FFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB F2F2F2F2F2F2FBFDFBECFFECCEF7CE95D7947ABB797EAE7EBAD0BAF5F7F5F3F4F3D1E4D18FCE8E 6DC26C6BC26ABADCB9E8EBE7EEEDEEEDEDEDEDEDEDEAECEACAE0CA59B65860B65F95C795CCDDCC EEF0EEF6F8F6CBE9CB6DBE6C6ABE6988CC87C0E2C0E5F2E5F9FBF9F7F6F7F0F0F0F8F8F8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCD282D3CB78 DBD381ECE4968A823B3127009F965BDAD197D3CB8CD4CD87D4CE87DAD692E6E2A7ACA5755C5228 1D1100211600918851DFD790D6CF81D6D07DD6D17CD3C978CABF6FE1D986CCC472817829CAC278 E7DF9C8B81456B6428DBD58CDCD784D4D175E1DA82E1DA82E4DE85EBE38EEFE793F0E894EDE594 EBE393F0E798F3EA9BEDE496E3DA8DDDD487E1D88CE6DD90F1E89BF8EFA2F4EB9FF0E79AF1E89B ECE396EBE296E9E093E8DE8EE4D989DCD17FE2D785EADF8DE8DE89EFE590F1E792E7DD85F1E790 F0E68FE2D882EDE28EE7DC89E8DD8BECE18FE8DD8CEEE393ECE191EADF8FECE192E9DE8FE5DA8C EADE8FEFE792E4DD86E1DA82E8E18AE8E08BE3DB86EBE390DFD686E1D889E7DE91F0E79BE3DA8B E7DF8BEDE594E9E190E3DA8BE7DE91EAE194ECE397EBE293E5DC8CE7DF8CEBE38FE2D885DFD483 E7DC8AEAE08CE6DC87EAE08BE2D883E6DC88EBE18DEAE089E8DE87E6DC86EADF8DF1E696F0E595 EBE090EEE393F3E898E8DD8DF0E595F4E999F0E595EFE494F5EA9AEDE095F2E69AF1E599F0E498 F6EA9EFBEFA3F3E79BF4E89CF0E498F0E498ECE094E8DD8FEEE393EDE292EEE393F4E999EFE494 EADF8FECE191F4E999EDE292F3E898F0E595F4E999F6EB9CF3E897F7EC9AEFE58FF3E992F6EC94 F0E68FEEE490F3E898F4E99AF0E596F3EA9BF1E899E7DE8FF1E899F9F0A1EAE192F1E899F6ED9E FAF1A2F9F0A1F4EB9CF1E89AF1E89BF5ECA1F6ECA3F2E8A1F9EFAAF7EDA8F5EBA6EEE49CF0E69F F5ECA2F4EB9EF5EBA2F7EDA5F2E9A0F0E79BF6ED9FF1E998EFE796F2E99AE8DF92F3EA9EF9EFA7 FDF3ACEEE29AEDE29AEEE59DF4EAA2F6EDA5F5EDA4E7DF96EDE69CEEE89EE9E399EFE99FE1DB91 E6E094D1CD7FDDDA8BC4C275CDCE829FA055C2C37BAEB16E979A5CA8AC717A7D46787A47333308 6B6E4A383D2044492B16190AD1CD96F3EAA5EFE69AF0E69BF3ECA7E4E1A47C79433A39095D5D27 D7D59AD1CF8FE2DF9BE6E29BEAE49BEBE39AEFE59DF5EBA3F6ECA4E3D78CE8DD93F8F3A9FFF7B0 FEF6B1F4EBA6F4EBA8F3EBA9F2EAA9F5EDAEF6EEAFF3ECABF8F0AEEEE6A4EDE5A5F8F0B1F2E8AA F3E9ABF0E7A6EBE19BEFE59BF4EB9DF4EA9AF0E99BF4EEA3EEE7A1EEEAABCCC387A8A16ABDB781 DDDAA5C3BE83A7A666BDBC7994944E9D9D57CDCD86E6E39BE2DD93EFE79DD8CD82FCF0A5F8EDA2 EFE69BECE39BDED68CF4EDADFAF5C78F8C5F0D090043411D6462396F6E408C8955AAA668C5BE79 F7F0A0FBF09EEEE698F1E9A0F4EAA0EEE497F3E798F4E798F8EC9DF5ECA0F3EAA3F2EBA8E3DDA0 ECE7ABF6EEAAFBF1A9F2E8A1EFE4A0F4EAA6F5EAA6E6DC95F7EDA3FBF1A5E4DC8CE9E18DECE594 DBD88FE9E59EEBE7A0EEE69FF7EBA4FAEEA6FCEEA6F8EBA1F2E799EDE695F0E999F3EB9CF0E59A F5ECA1F8EEA5FAF0A8E4DB93F3EBA6F3EDA9F8F2AFF4EFADF8F4B4FBF7B7F4EEAEF6EEAEF5EDAC F7F0ACFCF5AEF4EEA4F6EFA5F7F0A8F6EFAAF8F0AEF9F1B0F4ECADF9F4B2F9F4B3F6F1B1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBF8F8EAECECC2E6E0A4 F9DFB7FEECD7FEFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFCFCF6 EEEECAE6E0A6F8DCB1FEE7CEFFF6EEFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7E7E7E7E6E6E6FAFBFAECFCECC8F0C873C6726BAC6B92A592CFCDCFF5F5F5ECEDECD4E0D4 B3DFB36CC26A3CAC3A94C793D2DBD1E0E0E0E2E1E2DFE0DFD3DCD2ACD0AA3FAC3D6DBA6CC7D8C6 E3E0E3E8E8E8F2F4F2CFEBCF73C27259B65765B964B8D3B8E7EAE7F9F9F9F1F1F1E7E7E7F4F4F4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF9F9F9F6F6F6FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3CB74 DAD37BD5CC78DFD78BD3CA89655A262A1E0053481C7C72439A905E9D94628F875A71683F2B2106 1006012216004E4420E5DC99DED788E0D886D5CD78D9D17EDCD281D0C575D0C977D7CF7B887F2F AFA75DE2D997B9AF716D6526E7E098D9D483DEDA81E9E28AE4DC88E3DB86E8E08BF1E995F5ED9A F4EC9BEFE796ECE493EEE596EEE596ECE394E8DF90E5DC8DE2D98AE8DF90F0E798F0E798F2E99A F2E99AEDE495EDE495EBE293ECE293EFE494E5DA88EADF8DEFE492E8DE89E5DB86ECE28DE6DC84 EBE18AE8DE87DED47DE0D680E9DF89E5DB86E1D782EAE08BE5DA87E3D886E8DD8BE9DE8DE7DC8C E8DD8DE8DD8DEBE38FE8E18DE8E08BEAE28FEBE390EAE28EE4DC8BE1D988EBE392F0E897F5ED9C EDE592F1E995EDE594EBE292EBE293EDE497EEE598F0E79AECE394E5DC8CE9E18EF0E895EEE590 EBE18CEDE38EEBE18CE7DD88F0E691E3D984E7DD88EEE48FF0E691EDE38EE9DF89F3E896ECE192 EDE292F3E898F2E797ECE191F5EA9AF9EE9EF4E999EDE292EEE393F3E898F2E59AF8ECA0F6EA9E F0E498F1E599F4E89CF2E69AEFE397E9DD91EBDF93EADD92E7DC8EECE192EDE293F0E596F6EB9C F1E697EFE495E6DB8CF2E798F2E798EADF8FF0E596F4E99AF3E899ECE191EEE391E8DE89F0E691 FAF09BF2E793EFE492F4E999F6EB9CF2E798F3EA9DEBE295D1C87BD9D083F4EB9DF6EDA0F2E99C FAF1A4FCF3A6F8EFA2F3EA9DF2E99CF0E799F5ECA1F6EDA3F2E8A1F7EDA8F1E7A2F1E7A2F6ECA5 F5EBA3F1E89DEFE699F4EBA2F2E8A0EEE49BF6EDA0FDF4A7F4EB9CF5EC9DF8EFA0ECE396EEE59A ECE298F3E9A2EDE199EFE49CF4EAA2F8EEA6F5ECA4F2EAA1EFE79EE4DD94F3EDA3EEE89EE6E096 E0DA90DED88CC5C275DFDC8FD7D588B9BA6DA2A359C7C882A5A86595985A777B4181844D676736 54552A585A3634391B3E4323131605C3BF88F6EDA8EBE294DED589F2ECA6EEEBAD9D9A65686731 6C6B34D0CE93CBC989D4D08DEFEBA4EFE9A0F1E9A0F2E8A0F3E9A1F5EBA3EDE096EEE499F5ECA1 E0D68EAAA25AFFFDB5F1E8A3F1E9A5F4ECACF6EEAFF4ECADF3EBACFAF2B3EFE7A8F0E8AAFEF6B8 FAF0B2F6EDABEFE6A1EAE097EDE496F3EB9AF3E896F0E997F8F0A6F0EAA0D5CD8BC7C081EEE9AC ECE6ACF2ECB0EDE9AAE3E09DE2DF99E6E39CECE9A2EBE8A0E8E299F3EBA0E9DF92F5E89AF9EC9F F0E298F3E79DEDE39BE1D88FF2EAADE0D9B444401A0A06014D4A2456542D7A794C9D9C65959151 C2BD73FAF3A1E6DC87E7DF91EAE39FECE39DF3E7A0F9EDA4F4E89FF1E49EFCF1AEFDF3B6F4EAB3 F3ECBBF5F2C2E7DCA9FBEEB8F8ECB3EEE3A5F1E7A4F5EBA4E7DE91F0E798EBE391DFD784F1E994 F1E998E3E199E9E5A1E5E19AE8E09AF2E69FF4E8A0F3E79EF4E89EF3E89BEFE798F0E99BEEE797 E1D788EFE496F7EC9EF1E79CD1C87DE8E097F4EBA6FBF3AEF8F1AFFDF5B4FDF6B6FBF3B4F9F1B2 F3EBABF4EDAAF7F0AAECE59EEEE7A1F5EEA8F8F1ACFBF3B2FDF5B6F4ECAEF2ECAEF6F0B3F9F3B7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5E2E8E8B6EDEDBB F7F5CCFDF5E3FFF9F3FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEFAF9EEF7F1D9FDDFBDFFDEBBFFE5CAFFF4E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F7F7E7E7E7E6E6E6FAFAFAECF1ECC2DCC251B35061B05FAEC3AEE8E3E8FAFAFAF9F9F9 F2F5F2E7F5E79AD49959B6578ACA88C3E2C3E8F0E8FBF7FBECF2EBB5E0AF7ACC714CB3498ACA89 E1EDE1FAF7FAF8F8F8F9FBF9DCF1DC93D39258B95646B044BCDEBCF4F6F4FFFEFFFBFBFBF9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEEEEEEDDDDDDCCCCCCE1E1E1FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DBD27AD5CE74DBD37FE3DB8FD1C789C1B48364582D3A2E0F291D00372C003428002B22070D0200 2A20135248239D9261C5BC7DE7DF93CCC572DCD47ED6CE7ADFD687E9DF90D8CD7ED4CD7BE4DC89 978F3E968F45D5CC8AD1C7897C7434C0B973D7D284DFDB85E9E18DEAE28EEEE691F1E994EEE693 EAE28FEFE795EAE291E9E190EDE495F5EC9CF9F0A1EEE596F1E899EEE596F0E798EEE596E7DE8F EBE293ECE394E9E091EDE495EEE596EBE192E8DD8DE7DC8AEBE08EEDE290EBE18CE4DA85EEE48F EDE38CEDE38CE9DF88E1D780E4DA82F2E891EDE38BE3D981EAE08ADFD57FDCD27FE7DC89E4DA87 E5DA89EDE291EADF8FDED683ECE491F4EC9AF2EA98EDE594ECE493F6EE9DEEE695F5ED9AF2EA95 F2EA94ECE48FF2EA95ECE493EBE392EDE495EFE699EFE699F2E99CEFE697E8DF8FEBE390EFE794 F3EA95F1E792EFE590EFE590ECE28DF0E692F3E995F2E793F2E893F5EA98F4E995EDE291F2E797 E6DB8BEBE090F9EE9EF8ED9DF0E595F8ED9DFAEF9FF1E696EDE292F0E595F0E595EEE296F5E99D F7EB9FF4E89CF2E69AF2E69AF3E79BF5E99DF0E498F0E498F1E599EDE194EFE495F2E798F2E798 F7EC9DF4E99AF5EA9BE7DC8DF1E697F1E697E5DA8BF3E899F5EA9CF8ED9EF0E596ECE18FE5DA88 F3E994F5EB96F0E692EFE492F4E999F9EE9FFBEFA1EBE296F3EA9EEEE598E9E093ECE396E9E093 EEE599F2E99CF4EB9FF4EB9FF5ECA0F5EC9FF0E79AF5ECA1F4EBA1EFE59EF4EAA5F1E7A2F4EAA6 F4EAA3EBE199E9E095F2E99CF7EEA2F1E79EECE398F1E89CF3EA9DEEE596EDE395EFE697EFE699 FCF3A8F6EDA2F5ECA3F0E49CF7ECA3F9EFA7F4EAA2EEE59CECE49AF1E99FF2EBA1FFFBB1E9E399 E4DE93F3EDA2D8D287CECB7EC9C679C3C174A4A459CBCB81BBBC76A5A765A9AC6E888B529DA06A 6363338283566366423E4324252A0B1E210BCCC98FF3EAA4E4DB8DE1D88CE9E29BB9B678605D27 61602AADAC74C8C68BCBC989DBD894EAE69FE9E49AEFE79EEFE59DEAE098EBE199F7ECA2D3C97F DFD78BCBC179887F36FDF5ACF5EDA6F2EBA5F7F0ACF7EFAFF4ECADF4ECAEF7EFB2F0E8AAF0E7AA FDF5B7FDF3B4FBF2AEF3EBA3EEE599EEE696F0E894F1E893EFE695EBE496ECE69AEEE79FEAE2A0 D9D292DCD697EBE6A7EAE6A4EAE7A1DFDC94D5D388DBD68FECE69DE1D98EEEE497E9DD8EEFE193 EDDF91E7D98DF0E299EADE97E8DE99EFE6AFA49C7C140E06231F0966643F6462396867377F7D44 878440D0CB7FF9F39FE1D780E7DF91E9E29EEAE19EF4EAA4FBEFA9F5E8A3F0E3A1F2E7AAFFF9C2 E5DFAEE3DDAFDFDCB34E4220A69867E1D49EF4E9AAE8DD98E8DF92E9E18FE6DE89E4DC87E2DA88 F5ED9AF3EC9FEBE9A4EDEBA9E9E4A0EBE39FF2E9A2F4E8A2EFE39BF4E89FF3EAA0F2EA9EF0EA9F F5EE9FF5EB9AF6EB9BF8ED9DF5E99CE0D78CF4ECA2F5EDA5FAF1ACF5EBA8F6EEACF8EEADF3EBAB F7F0B0F8F1AFF9F3AFF5EFA9E3DD96E8E29BF3EDA7F7F0ACFCF4B3FFFCBAFAF3B3F9F3B5FDF7BB FFFABEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF2F1F3D6EAEBC0EAEABE F5F5D3FEFEEAFFFEF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFDFEFAF5FFECD9FFE3CAFEDEC6F8E7CEF6F4E0FBFCF4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4DEDEDEDDDDDDF8F8F8ECEDECC1D4C043AC4260B75FC3DAC3F9F4F9FDFDFD FFFFFFFEFEFEFCFEFCBBE1BA77C5766BC16996D695D7F2D7FDFFFDE5F9E494D98E54C04C74C972 B2E0B2F0F9F0FFFFFFFFFFFFFDFEFDEDF8EDBEE6BE69C16638AD36B5E4B4F2FDF2FDFEFEF2F2F2 EAEAEAF5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F9F3E5F3E5DCF3DCD9F3D9 D9F3D9D9F3D9D9F3D9D9F3D9DCF3DCE5F3E5F3F9F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF2F2F2EBEBEBE2E2E2D5D5D5E6E6E6FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0D780DED77EDCD480D9D185DCD391CFC48EB0A577B8AC80A095678E8451AAA16FC6BE93 4A4118847B4FE3D9A6E0D698DDD58AD7D17AD5CD73D7D078D6CE7DD6CC83DDD188E1D687CEC674 DDD581CEC676746D21D7CE8BE4DA9C8880418B8440EAE498E7E290E8E08EE5DD8AE6DE8BEAE28F EBE390EBE390EBE390E7DF8DEBE392F5ED9CF7EF9EF2EA99F1E899ECE395E6DD8EE8DF90EBE293 E8DF90E9E091E8DF90E3DA8BE8DF90ECE394E8DE8EE7DC8CECE18FEADF8DE7DC8AEAE08BE6DC87 F1E792EEE48DEFE58EEEE48DE2D881E4DA81E9DF86EFE58CEEE48BE5DB83E5DB84DCD27DE9DF8A E3D984E3D886F1E694EEE390E5DD8AE7DF8EECE493EFE696F3EA9BF5EC9DF2EA99E1D988EBE390 F0E992F5EE95EDE68DEFE791F5ED9CF4EC9BEFE697F0E79AEFE699EEE598EFE697EAE192ECE491 EDE592EDE48FEAE08BEBE18CF2E893EEE490EADF8EF5EA98EDE290E7DC8CF1E696F7EC9BF2E797 F3E898E9DE8EF0E595F8ED9DF3E898F2E797ECE191F1E696EEE393F3E898F6EB9BEEE393EEE296 F0E498F4E89CF5E99DF3E79BEFE397E8DC90F7EB9FF6EA9EF2E69AF0E498EDE194F3E899F9EE9F F4E99AF6EB9BF8ED9EF4E99AF0E596F2E798E6DC8CEBE191F6EB9BF1E599FCF0A3F8ED9EEEE393 E2D785F4EA95F2E893F1E793EFE493EEE394F3E79AF8ECA0F6EDA2F3EA9FF7EEA3F5ECA1F0E79C F3EA9FF7EEA3F1E89DF0E79CF3EA9FF5ECA1F7EEA2F5EC9FF6EDA2F4EAA1EEE49DF5EBA6F2E8A3 F4EAA5F0E69FEBE199ECE398F0E79AF3EA9EF0E79CF0E79CF2E99CF1E89BF5EB9EFBF7AAECE295 DED588F5ECA1F8EFA4F3EB9FEADE94F5EAA0F5EDA2EDE499ECE398F4ECA1F8F0A5F4EDA1EEE89C DFD98DE5DF93DFD98DDDD78DE4E194CFCC7FC9C77C9E9E54C3C47CB1B26CBABC7B999B5F8B8F56 797C46777846838455525530464C2C3136171F2207CDCA90EEE69EE6DD8FE1D88BE1DA93D2CF90 B4B17C63622C5B5A22B4B277DDDC9BEBE8A4E5E19AE5E097F2EAA1F5EBA3EEE49CF0E79FF1E59A F5EBA1DDD489D8CF84F4ECA1FBF3A8F9F1A7EEE79FEEE7A2EEE6A4EFE7A8F3EAAFF4EBB1EFE6AB ECE3A7F6EEAFF8EFAEFDF4AEFAF2A8F6EE9FF1E997EEE691F1E791F0E795F0E99AF1EA9DEBE39A F7F0A8E9E29DD5CF8AEDE9A4EFEAA5EBE9A0D6D489DAD78DD4CC84E8DF97E5DA8FF3E699F1E395 EEDE90EADA8CF2E398F8E9A3EADD9BF2E7A7F8ECBB51493718110049442675724F8F8E647B7A46 807F43AAA761E8E395ECE692EDE38CEBE395EAE29DEFE7A1F4EBA4F5EBA3F7EBA4FCF1AEEFE4A7 F4EAB47A723D322B1B423C1D1E1300B2A56FF4E8AEFEF3B0D4CC80DAD380E5DD88E5DE89F0E896 EBE396F3EAA0F3EBA7E6E3A5ECE9AAECE7A6EFE7A4F2E9A3F2E7A0F4E8A1F6ECA4F4ECA3F2EBA2 F4EDA4F8F1A4F2E998F4E999FAF0A1F9EFA2E4DB90FBF1A9F7ECA5F7EDA8F0E6A3F6ECA9FDF4B1 F8F0ABF7F3ACF6F1AAF2EEA6F4F0A8EBE79EF3EFA6FBF7AEF4F0A8F3EFA8FFFBB3F7F3ADFBF5B3 FCF7B6FBF6B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFF2F4DAE1E4A5E2E5A9 F6F7E4FDFDF4FFFFFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBF6FFEEE8FDE1D6EFDDBAEAE6B9F5F4DFFFFFFEFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1F1F1D4D4D4D3D3D3F7F6F7EAECEABED3BD43AB4268BE68D3EAD3FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD1ECD195D4954DB64B61C260B0E8AFE1FFE1C6F2C674CC7245B641 A5E3A5DBF6DBFAFEFAFFFFFFFFFFFFFFFFFFFDFEFDE7F6E781CA8038AE37A6E3A5E5FCE5F8FDF8 E3E2E3D2D2D2EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDFCFDFCF7FCF7DDEFDDC2E3C2B1E3B1 ABE3ABAAE3AAAAE3AAAAE3AAABE3ABB1E3B1C2E4C2DEEFDEF7FCF7FCFFFCFEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2E8E8E8F0F0F0F7F7F7F0F0F0F6F6F6FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCEC573C9C16CDDD580E7E090E1D991C5BB7C7E753BDDD49ADCD495E7DF9ADBD48F D1C98D4C430A797132D8D08ACEC779D1CA72DAD374E1DB7EDFD680D8CD82D7C989D9CC87DBCF83 C9C070D9D17DC6BE6C888033DDD490EBE1A49C94566C6424E3DC93D6D083E0D887ECE493E3DB8A E4DC8BF0E897E4DC89E5DD8AEAE28FF1E996F3EB98EEE693E9E18EF8F0A0F1E998E3DB8AE9E190 F0E897E7DF8EE6DE8DEDE594EAE291E9E190EBE392E2D988ECE191EFE492F0E593F3E896EFE590 E5DB86E4DA85E5DB84F6EC95EFE58EE4DA83E3D980E8DE85F7ED94F9EF96EEE48BE8DE87E2D883 EDE38EE8DE89EADF8DF0E593DDD280E0D883E7DF8BE6DE8DEBE293F5EC9EF7EEA1EAE194E6DE8D E5DD8AEAE38CEEE78DEFE88FF1EA93F7EF9EEDE494E9E091EEE598EFE699EBE295E4DB8CE3DA8A E5DD8AF0E894F0E790EAE089F1E792F9EF9AEFE591EADF8DF8ED9DF7EC9CF8ED9EFBF0A1F6EB9C F0E596EBE090EBE090E8DD8DEFE494F5EA9AEBE090F1E696F1E696F4E999F0E595F1E696F8ED9D F4E89CF7EB9FEBDF93F5E99DFBEFA3ECE094EFE397F0E498EEE296EADE92EFE397F5E99DF1E599 EDE195F2E69AF9EDA1FBEFA3FEF2A6FBEFA3FEF2A6F3E79CF0E498F4E89CE5D98FECE093F8ED9E FDF2A2F7EC9AEDE290F9EE9CF1E695F0E595F5EA9BF3E799E9DC92E9E196FDF4A9F9F0A5F3EA9F F8EFA4F5ECA1F6EDA2F7EEA3EDE499F2E99EF6EDA2EDE498EEE597F6EDA2F5ECA2F0E69FEEE49F F6ECA7F4EAA5EAE098EFE59DF1E89DE9E093EDE497FDF4A7F6EDA0EAE196F6EDA2F2E99EF7EEA3 F6EDA2DBD288F7EEA1ECE396E6DD90F3E79BEEE397EDE497F3EA9DF7EFA1F8F1A3F3EC9EF4ED9F F4EEA0EBE597DED88ACBC579EEE89ED1CD83CFCB81C3C176BFBF749B9B54BBBC79B0B27197985D 9B9E67676A3590915F535425787A545D62412A300E15190BCBC88CF2EAA2E7DE8EF2E99BEFE9A1 DBD89889865053521C7271396A682DF6F4B4E5E29EEBE7A0EBE69DF1E9A0F1E69EEDE39BF0E69E E7DB93F1E79DF4EBA0DED587D7D082EEE799E0D88EE0D890FBF5AFFDF8B5F3EBADF6EDB3F4EBB3 E4DBA0E4DB9FF0E8A8F1E8A5F2EAA0EEE799F0E798F2EA98F1E994F3E994E8DF8DF0E798EDE497 EDE59AEBE39AE8E198DFD890ECE69EE9E59DE6E299ECE89EDFDB91E9E199E8DD95E9DD92F4E799 FAEC9DF1E193F2E294F0E198F2E3A0E7D99CFAF2B7D1C797140C00322B125651326C6A436F6D3E 74753A979655A19F54E6E193EFE996F1E792EDE697F1EDA3F5EFA3F1EA9DECE597F3EA9FF1E79E EAE19FEAE2A43029141E1808ACA878E7E0AAFDF5B6E7E09CF2EAA1D6D080C6C06DE7E18DDBD685 F0E9A0FCF3B1E5DCA0EAE3A9E1DFA6E7E3AADFDB9EF9F1B1FDF8B4EDE49CF4EAA3F3E8A2F1E9A1 F7EFA8EDE6A0F2EAA2EAE396EFE69BEBE398EBE198FEF5AEF1E7A0F4EAA5FBF2ACFBF0ADFDF2B0 F7ECA9F2EBA2F6F3A6F2EEA4FDF9AFE3DF95EDE99EFBF7ADF7F3A9F4F0A6FEFAB0F4F1A6FBF8AB FCF8AEFBF7AFF9F5AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF4F4DEEAEBC1E6E8B3 EEF0CAFEFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FBFEEEECF4E0CBEEDDB8F4E7C6FBF4E0 FFFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6E5E5E5E5E5E5F8F9F8DEEDDEAFD5AE52B2507CC77BDDF1DD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAF7EAC3E8C265C46049BB4365C7627AD07973CD7264C363 70C66ECFF2CFF4FFF4FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFF8FCF898D3984DB44B96DA95D1F2D1 F3FBF3EEECEEE0E0E0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F7F6E4EFE4CDEECDC7EDC7C5ECC5 C4ECC4C4ECC4C4ECC4C4ECC4C4ECC4C4ECC4C4ECC4C5ECC5C7EDC7CDF0CDE3FBE3F4FFF4FEFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE1E1E1D3D3D3F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6EFEFEFF7F7F7F9F9F9E3E3E3ECECEC FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD3C97ACFC774D9D17CDFD786DED689CFC77F6C6420C1BA73C9C375D1CC77 D4CF7AD9D4876D661A68611BD3CC7BD3CC74DAD576DFD977DCD576DBD27DDCCF87DBCC90D7C987 DCD084D3CA7AD7CF7CDAD27F9D9649BAB26EEFE5A7BDB579544C0CB3AC66E4DE94D6CD7FE2D989 E0D888DED685E7DF8DECE491E7DF8CE7DF8BE7DF8CE9E18DEAE28EEAE28FEDE594F6EE9DECE493 EAE291F3EB9AF2EA99EAE291ECE493E8E08FE9E190F4EC9BEAE190EBE090E9DE8CE7DC8AEDE290 EFE590F0E691EDE38EE4DA83EFE58EE9DF88E8DE87E5DB83DDD37BDDD37BE3D981E7DD87EEE48D E8DD89E1D783E4DA85F2E796E4D988B9AE5DBBB45DEEE790EFE793F1E898F6EDA0DCD286E7DE92 E7DE8FE9E18FECE48EE9E288E8E188F0E992F1E998F0E897F4EB9CEFE699E8DF92EAE194F0E798 F5ED9DF0E895ECE491F6EC96F2E891F0E691F7ED98F0E691E3D886F2E797F2E797F1E698F2E799 F1E59AEEE297E8DD8EEBE090EADF8FEDE292F4E999F1E696F3E898EFE494EFE494ECE191EFE494 F8ED9DE7DB90F1E599F1E599F3E79BF0E498E9DD91F2E69AF7EB9FF4E89CEEE296ECE094E9DD91 E5D98DEBDF93F3E79BF7EB9FF2E69AF6EA9EF3E79BF6EA9EF0E498F0E498F6EA9EF9EEA3F6EAA0 F0E597EEE393F3E897F9EE9CF1E694F4E998F9EE9EFCF1A2F9ECA2F0E49AF6EDA2F4EB9FEFE69A EDE499F1E89CF3EA9FF5ECA0F7EEA2EEE599F2E99DF6EDA2EFE69AEDE497EDE499F2E89FF5EBA4 F4EAA5F3E9A4F3E9A4F1E7A0F5EBA3F6ECA2EFE699E3DA8CEDE496F6EDA0F4EB9FF3EA9FEEE59B F1E79DFAF0A6ECE398FCF3A6EEE598F1E89AFCF0A4F7ECA0ECE396E5DC8FEBE396F8F1A3F9F2A4 F8F1A3F8F2A4F9F3A5DAD486F3EDA1E9E399DBD78DC2BE75DAD88EB3B369B9B9719FA05DAEB070 AAAB7192955D6C6E3C7F804E4F5121787A534E5432191F0225290DC6C388EDE49CE7DF8DECE394 F0EAA1ECE8A9C4C18A66652F6F6E36605E24FBF9B9F5F1AEEBE7A0E4DF96EAE299F3E9A1F2E8A0 F1E79FF1E59DEDE399F3EA9FEEE597E7DF8FEFE898E9E294E7E197F2EBA5F5EEADF2EAACF5ECB2 F7EEB5E6DDA2ECE4A6FBF3B2EFE7A0EDE59AE9E293E3DB8AE1D987E6DE89F1E695F1E897E1D88A EBE295EEE59AEBE398EFE79DD4CC84E5DE96F6F0A7F1ECA3EBE69DEAE49AF9F1AAF5EBA3F0E499 F7EA9DFBED9EF3E496F0E196F7E9A3ECDFA0F3E8AFF6EBB74D461E130C00676244706C47767548 85864F8687489E9F59ACAA5FE3DE8FE9E292F6EB9AECE597ECE99BEBE599E8E191E8E191F4EB9C F0E89DE2DA94F6EFAED8D296E2DFA7F8F6C2FEFDC2E9E4A4DFDB98E4E099D7D489D8D58AF2EFA6 FAF5B2E6E1A4C4BE89F7F0C0AAA476827F4ACFCD95686228DED799F7EEACF1E8A3EDE39EECE49C F1E8A4F6EFABEDE8A7F1EBA9F1EBA6EFE9A5F5EEAAF5ECA9EDE4A1F3E9A7F9EFADF7EDABF2E7A6 FEF4B2F4EBA8EBE59CF6F3A5E8E699FBF9AFEEEAA0E7E39AE7E39AFCF9AFECE99FF8F5A8F7F5A7 F5F2A3F0ED9DEDEA9DF4F0A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F8F8E9EAEABFEAEAC0 F6F6E3FEFEFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFBFEEDEDFBE1D3F7DEB9 F7E5BAFCF6E7FEFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F5F5F5F8FBF8CAE9CA95D29469BE6796D195 E4F3E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDECF8EBA5E29D69C96344B44532AA3540B13F 78C977B7E3B6EBF8EBFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF7A7D8A663BB618CD18B C2E8C1EFF9EFFAF8FAF3F3F3F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF4F4F4E9E9E9DCDCDCCED3CEBBD2BBABDEABC0ECC0 DCF7DCEDF8EDF3F8F3F4F8F4F3F8F3F4F8F4F3F8F3EDF8EDDCF7DCBFEBBFAAE1AABDECBDD7F6D7 EDF9EDF9FAF9FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFCFCFCF3F3F3CACACAAFAFAFDBDBDBEBEBEBEFF0EFF0F6F0EBF7EB E0F3E0D9F0D9DFF4DFEDFAEDFBFFFBFFFFFFFDFDFDFBFBFBFBFBFBFDFDFDFDFDFDF2F2F2D0D0D0 E0E0E0FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDFBFBFBFAFDFAFBFFFBFEFFFEFEFDFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD5CB7CD4CC79DAD37BDAD37FD7D07FD5CD82554E0A8F893CC2BD69 CAC76AC0BD5FD8D47C817B26534D13D2CC76CFC86DD3CD6FD0CB6ADAD073DFD480DFD38BDACA8E DCCE8CD9CD81D6CE7DD0C875DAD280AAA3559A924CEBE1A4E9E0A5645C1E827A38E5DF97E0D78A DFD687E4DB8CE2DA89E1D988EEE695EAE28FE7DF8BE3DB86E1D985E6DE89EAE28DE7DF8EF7EF9E EEE695E6DE8DECE494F2EA99EFE796ECE493E7DF8FE6DE8EF2EA99EEE594EFE495EADF8DE2D785 E5DA88E8DE89ECE28DEAE08BE3D982EEE48DE7DD86EDE38CEFE58EE2D882E0D681E7DD88E8DE89 E8DE8AE4D987E3D886EBE08FEFE494E8DD8DE4D987E1DA80EAE389E8E08BE4DC8CEFE698FBF3A8 E9E095EDE497F1E898F1E994EBE48BE6DF87EAE28DE9E190F0E797F8EFA0F4EB9EEEE598ECE396 EEE596F4EC9CF1E996F0E895F2E992ECE28BEAE08BF2E893F3E994ECE191ECE192EEE395F0E498 F3E79CF6EAA0F5E99EE6DB8CECE191EDE292EADF8FEFE494F5EA9AE8DD8DE6DB8BEADF8FEBE090 EEE393F6EB9BF5E99DF3E79BF4E89CEDE195ECE094F3E79BF3E79BFBEFA3F9EDA1F6EA9EF4E89C ECE094E9DD90F0E497F6EA9EF6EA9EF2E69AF6EA9EF2E69AF2E69AECE093EFE397F4E89CF9EEA3 F9EDA3F6EA9EF5EA9BF7EC9CFBF09EF0E593F3E896F3E899F3E79BF6EA9FFAEEA4F9F0A3F4EB9E FAF1A4F6EDA0EEE598F3EA9DF4EB9EF6EDA0EFE699F1E89BF5EC9FF3EA9EF6EDA0F1E89DF2E89F F5EBA4F4EAA5F1E7A2F5EBA6F7EDA6F7EDA5F7EEA3F4EB9EF2E99BEEE596F2E99CF8EFA3F5ECA1 F9EFA7F7EDA5FFF5ADF8EFA5FBF2A5EDE497F3EA9BF7EB9FF9EEA2F5ECA0EEE598EFE79AF7F0A2 EDE698F6F0A2F2EC9EE3DD8FF8F1A4E5DF93D7D087D4D087D6D289BFBD72BEBE76C6C680ACAD6A B5B778ACAD749DA069797B496B6C3A5759285D6039525835040A023F431BDDDA9EEEE69DECE592 EAE190EBE59CE3E0A0FFFCC5A5A46E83824A7C7A3FDEDE9EF1EFABEDE9A2E6E097ECE49BF4EAA2 F5EBA3F6EDA4E5D892F2E8A0F6EDA0E3DA8BDBD483E9E292FBF4A3EBE599E7E099F8F1B0FAF2B4 EEE5ABF9F0B6FAF1B4F9F1B1F8F1ABF1E9A0F0E99AEAE393ECE493EEE695EFE696F3E898EAE092 F6EDA0DAD184A2994DF2E99EDFD78CEFE79EEDE69DF3EDA3F3ECA4EAE49CF7F1AAF4EBA6F2E9A2 EEE49BF4E79BF6E99BEDE092F4E69EF5E9A5E4DA9DF4EAB68A82500904004B4421807C555D5A2E 8889537B7C3EAEB069A4A65BC2C073E9E598EBE497FEF2A7F1E89FF4F0A6EFE99EE8E193EAE394 F2EB9BF4ECA0F5EFA5F3EFAAEBE7A9E7E5ADF7F6C08180438B8A4DEBEAAFFDFCC2F7F5BBFEFCC3 7B7942E7E4B29D996C504B22CBC6A0474319221F023B3812161300D1CD8FF7F1B2F1E8A4F5ECA7 F3E9A6F7EFAEF2EBACE2DC9DEDE9ACE6E1A8F6F1B7F1ECB1ECE6ABF9F2B5E0DA9CE6DE9FEDE4A5 F3E9A9FBF1B0FAF1AFEBE69FE9E79BF5F2AAF4F2AD939049DFDB9AF8F4B2E9E5A3F5F2ACEDEBA4 F3F1A7ECEB9FF4F1A3EFEC9DFBF8ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF4F4DFEBEBC2EEEECA F5F5E1FCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FBFFEEE6 FCE3C4F8DEB0F7E7C0FBF3E0FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5E1E1E1E2E1E2F3F7F3B6DFB578C5777EC97D B0DEAFEBF7EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFADEF6D9B5E3B78BCD9A70C17E 79C87AAFDFAEE5F5E5F9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF7AAD9AA67BC66 89CF88BEE6BEEDF7EDEBEAEBDBDBDBEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDCECECE979797787D787B8C7B92AC92B9D3B9 CEE1CEDCE8DCE5E8E5E8E8E8E9E8E9E9E8E9E9E8E9E8E8E8E5E8E5DCE8DCCEE1CEBBDABBA1D2A1 A7D7A7C3E2C3DBE8DBE6E7E6E8E7E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E4E4E4D0D0D0B9B9B9A8A8A8ABAAABB5B8B5BCD4BC A8DDA87DCA7D63C06378D178ADE8ADE5FCE5F9FFF9F7F7F7EEEEEEF2F2F2FEFEFEFFFFFFF9F9F9 E7E7E7EFEFEFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF4F5F4E8EBE8E5F5E5EDFEEDF9FFF9FEFDFEF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6CC7AD7CF7AE1DA81DDD781D2CB7BDBD289756E287F7830 C5BF70D8D47CCBC66DE5DF8B938C3B544D12DAD183C5BD6BCDC56CDBD275E3DA80E3D884DDCF85 DACB88DDCF8BC9BD73CAC271CFC774D9D17EC6BF70B8AF69DED497EAE1A7ADA469867E3ED6CF89 EBE297DFD688E6DD8DEDE395E8DF90EDE594ECE491ECE490E9E18CE5DE86E7E088EBE38EEBE390 EFE794EBE38FE8E08DECE491EFE794E9E18EEAE28EEBE38FE5DD8AEAE28FE8DF8DF0E596F0E593 E8DD8BE7DC8AE8DE89E7DD88E2D883E3D982F5EB94E8DE87E4DA83EEE48FE6DC88E4D988E8DD8B E3D886DDD281E7DC8CEADF8FEADF8FDFD485E0D587F5EA99E2DB7FE6E082F5EE95F3EB99EBE295 F2E99EF0E69DF0E79CF1E89BF1E997EDE591EAE28DECE48FEDE594EDE594EDE495F2E99CF9F0A3 F6EDA0EFE697F1E898EDE592EBE390ECE38CEFE58EEFE58EEBE18CEAE08BEADF8FE3D889EBE092 EEE298EFE39BF2E69EECE097E8DD8EEFE494F1E696EBE090E9DE8EF0E595F5EA9AF2E797F7EC9C F4E999EEE393EEE393F4E89DEFE397F2E69AEBDF93EBDF93F7EB9FF0E498F2E69AECE094EEE296 EFE397F1E59AF7EBA1F5E99FF3E79DF3E79EF5E99FF9EDA3F1E59BF1E59BECE096F1E59BF7EBA1 E6DA92E9DD93F1E499F5EA9BF3E898EFE495EDE292F3E898F5EA9BF1E59AF1E59AF5E99FF1E89B F3EA9BFAF1A2F0E798EBE293F7EE9FF4EB9CF6ED9EF2E999F0E797F4EB9BF4EB9CF3EA9DF3EA9F EFE69CEDE39CEFE5A1F2E8A3F7EDA8F7EDA6F0E69EF2E99EF3EA9DFCF4A5EEE596E6DD90F1E89C EEE49DECE29BFAF0A9F8EEA6F3EAA0F6EDA0EFE698F1E999F2E798F0E596EDE495F0E798F1E99A F1EA9AE6DF8FF1EB9BDFDA89E4DF8EE6E190D5CF81DAD48BBBB66DD0CC83BAB86ED8D890B9BA74 B6B675B6B879898B529396607E804F464715676937585B334F5532252B06434819E8E7ABEFE79E E4DC89E1D888F0EAA1EDE9A9ACA97171703B84834BA4A267DDDB9BF0ECA9EAE69EEBE69CEFE79E ECE29AE9DF97F2E8A0DFD28CEEE39CF1E89BE3DA8ADAD380E1DB86EFE897F2EC9FE4DE95E5DE9D F0E8AAF0E6ACF2EAACEFE7A7F1E9A6F4EEA4ECE498EAE394E7E190F0E798F4EB9CF1E89BEEE296 EDE197E7DB91F1E49BD3C97EE5DC91C8BF74DDD58CCFC77EE0D991FDF6B0F5EEA8ECE69FEEE5A3 F1E8A4F0E7A0F3EA9EF3E79BE8DC90F5EAA2F2E8A8E6DEA5DDD5A5322C17252007746F456A6838 74733EA0A26391944DB2B669AAAB5DDAD88BF6F1A5F6EEA6FEF3ADF1EAA6F6F3AEF2EEA7EBE69D F0EAA1F4ECA1F4EEA4EEE79FE9E5A2E8E3A8E7E5ADD1D19E0E0D0617150A8F8D68BEBB9AAEAB8C 696648050200484527211E050604001D1B000805000B0A03080602454209F0EAAFDED696F4EDA8 EAE19CEEE7A3F8F0B0EAE3A5DAD599EDE9B3F1EDBEF9F8CCE7E3B2F8F3C0EEE9B2E7E2A9EDE7AE ECE6AAF1E9AAE2DA9BF9F1B0F9F4B4F2EEAFFFFFC3D1CC90181300BDB87FF4EEB7E6E0A9F3EFB3 68642BADA96BFEFBBAFAF6ADF7F3A8FEFAB1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F8F8E9EDEDC6E7E7AE F5F5DFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBF6FFECD8FBE0B8F4DCA4F8ECC9FFFEF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2D7D7D7D8D7D8F0F5F0A7D8A764BB63 8CD08BC1E7C1F0FAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F9FCD7EBED C1E3D4C3E8C6E3F5E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FCF8B2DDB1 73C27281CA80B5E1B4E9F5E9E6E3E6D1D1D1E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E1AFAEAF535253212C212E4E2E688768 BCC0BCD0CED0D2D1D2D2D1D2D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D2D1D2D3D2D3CBCFCB 97BD9786BA8695C495B2CDB2CDD1CDD2D1D2D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2C2C2C28080807271727B807B 8BAD8B7DC57D51B75132AD323CBC3C73D273B4E6B4E4F3E4EEEFEEE8E8E8EFEFEFFDFDFDFFFFFF FCFCFCF2F2F2F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFFFDF9FFF9D8E8D8B9D2B9C6E8C6E1FDE1F6FFF6FFFDFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CF79D7D077E0D97FDFD884D6CF82D7CE8B92894B 7C7436BFB873D6D085D4CE80D6CE829D944C4E450DD5CA86CDC37CCDC375D3C973D7CC74D5CA73 D7CA7BE2D48AE5D891DCD087D0C877D1C975D9D17DD4CC7E928943BDB376EBE2A9D5CB91797133 D0C986E8DE95E1D88AE6DD8EF0E798EEE696ECE493EFE794F1E995EEE691E9E28AEBE48CF2EB93 EEE593EFE794F0E895F2EA97F4EC99F2EA97E0D885E7DF8CF0E895EAE28FEAE28FE5DC8AECE191 F1E694EDE290EDE290F0E691EDE38EE2D883E3D982F9F099E8DE87DCD27CF2E794EBE090E7DC8B E8DD8CE5DA89E8DD8EDED384E2D689E5D98CEBE093EFE399E8DD8FD1CB6BE8E381EDE78CF0E895 EFE698E1D88EF0E69FEEE49DEFE699F0E798EEE693ECE490F1E993F1E998EDE595E3DA8BE8DF92 F7EEA1F9F0A3F5EC9DF8F0A0F0E895E5DD8AE2D882EAE089EFE58DECE28CEFE590F1E697EBE091 F5E99EF3E79DEEE29AF3E79FEEE29AEDE293F0E595F8ED9CF3E898EBE090EFE494EBE090EBE090 F4E999F8ED9DF3E898F1E696F2E69AF3E79BFAEEA2F8ECA0F5E99DF6EA9EF8ECA0F5E99DEADE92 EEE296EFE397EFE398F7EBA1F6EAA0F1E59BEFE399F1E59BF5E99FEDE197EFE39AEFE399F5E99F F9EDA3EEE29AEEE29AF0E499F1E798F3E899F4E999EADF8FF5EA9AFDF2A3FCF0A4F4E79FEFE299 EEE697F0E897EAE192E3DB8BEBE393F8EF9FF5ED9DF8EF9FF3EA9AEEE595F0E797F4EB9CF2E99C F5ECA1F3EAA0F1E7A0F5EBA6F4EAA5F4EAA6F3E9A2ECE29AF3EA9FF3EA9CF5EC9DF0E896EEE597 F6EDA2F1E79FE4DA93F3E9A3EDE39CF1E89EF4EB9EF5EC9CF4ED9BFFF5A6F6EC9DEEE596EFE697 F4ED9DF9F2A2EEE797E9E392E3DE8DF4EF9ECFCB79E8E294CBC47CE8E49BDEDA91C2C075A1A159 999954ABAC6AA6A7697C7E457A7D476F71405B5C2A67693743471D464D291F25074E5324EEEBAF E6DE94EFE794EEE695E6E095BEBB7A636028494812818048B7B57BEAE9A9D2CF8BE7E39CEBE69D EFE79EE7DD95DFD58DE4DA92F1E49EE4DA92E7DE91F4EB9BF1EA97E5DF88D9D280F5EFA0E8E299 D1CA89DCD496EEE6A9F0E8A9E4DC9AF0E9A3FFFAAEF0E99BEEE796F2EC9AF2E899F0E799F2E99E F6EAA1F0E49BEADE95F7EBA2F0E69CEBE298D9D086EDE49BD9D188DAD38BEFE8A2F3ECA7F0E9A5 F6EEAEF8F0AFF5EDA7F5ECA4F5EBA0EDE499EFE59EF1E9AAFFFFC876714A0F0B009D99719D9969 7C7A4598985B888B44B2B669A9AE5BB6B866EAE99AF2ECA4F9F0ABFAEBADF2E9ACEEE9ADEBE5A7 E6E09FF2EBA8F8EFA9F1E9A4F4ECA9F5F1B2ACA96CCAC992AFAF7E0A09000000000806000B0700 0806010000000300000000000001000302000B0D006B6C47ABAB7E969461E4E1ADDBD69BF6F2B5 F4EDA8F2E9A4F1EAA6F1E9A8D1CB8EC7C289EDEAB9E1E0B8565432595739EDECC2979563B5B27C FEFAC3F1EBB1E3DD9FD5CF8FF5EFAFEBE6ABF5F1BCFDFAC6B9B480080200B5B081FEF8CDF4EEC2 D1CB9908030075713BFEF9C0F6F1AEF6F2ACEBE7A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF8F8E9E6E6B3ECECB8 F8F8D2FDFDEFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFFFAF5FBF0DAF4E0ABF8EDBFFEFDE1FFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F9F8F9F5FAF5A7D8A7 65BB648BD08AC0E7C0F0F9F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFE F6FBFAF1F9F5F2FAF2F9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFA C9E9C992D2916CC06B99D297E3F2E3FEFBFEF6F6F6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2AFAFAF4C4A4C0E1E0E0D3C0D 3C6C3C8F978FAEAEAEBBBCBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BABBBAB4B9B493AF9370A47080A980B4B9B4BDBCBDBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBBBBBBAEAEAE7F7F7F656465 5C5F5C748B749EC19EC1E0C1C0E9C08AD78A61BC6157AC57B0CEB0E4E7E4F6F6F6FDFDFDFFFFFF FEFEFEF2F2F2CDCDCDDEDEDEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9FFF9E7FFE79CD49C5DAF5D99D799DDFBDDF8FFF8FFFDFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCD27BD7D075D9D278DDD582DFD78EDED493 80753C756C34D3CC8CDCD590D5CE85DDD58CBCB273483E04C2B77DD1C884CEC679DAD27CD8CE75 D7CC77D5C979D0C375D2C479EFE495D8CF7DD0C972E2DB84DCD4837B7329A99F5DECE3A7FFF8BA 8880429F9756E8E097EEE798EFE798EFE796EEE695E8E08FF3EB9AF3EB99EEE694E8E18CEFE791 F9F19CEFE793F7EF9CFAF29FF3EB98EFE794F1E995E8E08EEDE594F6EE9DEBE392E8E08FE6DD8C EFE494F3E795ECE08EECE18FF3E793F3E894E0D680DBD07AF9EE98EEE48BE4D982F1E592EFE494 F1E696EFE394E5D98AE5DA8BD7CA7CEADE90EADF90ECDF94F3E69BE4D98AE1D97CE4DE7EF9F297 ECE490DED586F3EA9DF0E79DF1E89EF5EC9FF6EE9EF1E997EDE591E9E18FECE493EEE696E7DE8F E8DF90F2E99BEDE595E9E191F0E897F0E896EEE590EDE28EF1E695F0E592EFE491F3E896ECE18F E9DC8DF3E799EDE194E8DB92F6E9A1FAEEA5EFE396F2E798FEF3A4FDF2A3F2E797F3E898F7EC9C F0E595F3E898F2E797EBE090EADF8FFFF3A7F6EA9EEEE296F1E598F2E69AF0E498F5E99DF5E99D ECE094F2E69AF4E89CEBDF94F1E59BF9EDA3F9EDA2F1E59AEDE195F4E99BEFE496F1E698EEE297 F1E59AF1E599F7EA9DF9EC9FF8EB9DF5E99AF1E594EDE291F3E897F3E899F0E697F1E89BF5EBA2 F7EDA3F2E999F7EF9FF0E897F1E998F6EE9CEFE796F8F09FF9F1A0F4EC99ECE492EEE693F4EB9B EFE697EAE194EBE296EDE39BE8DE98E6DC96EFE59EF1E8A1EFE59EF8EFA4F4EB9FECE396F3EA9C F6EDA0F2E89FF0E69EECE29BF2E8A2EEE49DFCF2A8F7ED9FF4EC9BF3EC9AF2E899F8EE9FF9F0A1 F3EB9BF4EC9DFBF5A6CFC779C4BD6FEDE799B8B263F2EC9DCAC77AE2DD97EAE59ED7D48CCCCA83 A2A15DA3A260BABA7A94955B9C9D678184515A5C2B63653467693952542F373C1B212604606332 F5F3B3E7E093F0E897E8E091E2DC92BBB771A4A36AA9A97378773FAEAD72E2DE9FC8C481EDE9A2 EDE59DF2E9A1EDE39BE3D991DFD58DFAEDA7EBE099E1D88CE7DE8EF1EB97F2EC97E4DD8AEAE395 EFE9A0EAE29EDCD295D8D192E7DF9DF4EDA9F6EFA8F4EEA4EFE79BF8F1A2F5EE9FF5ED9FF3EAA0 F3E9A1F4EAA3ECE29AF4EBA1EFE59CEFE59DF0E89FF1E79FEEE59DF0E89FF4EBA3F1EAA4EEE7A2 F1EAA6F2EAABF2EAAAEEE5A2EEE69DF6EEA5F6EDA6F4ECABFFFFC8B0AB7A0C0900514D2DAFAC88 A2A06BB7B77BB6B773999D52A8AB5ABABE6CC3C575EEECA0E5E098F3EAA7EFE3A3F9F1B5F1EBB1 E7E1A5DFD799EFE7A8F5EDADF9F1B1FBF4B8D1CD92211F0AA3A16EF7F7CDA7A898484749040208 000000020000333230504C47413F360E0D053E3E22CDCDACF6F7D4E6E4B3DEDDA7F1EEB6EAE7AC D3CE8FE1DB9AFBF3B2F4ECACECE4A5C6BF83C9C389FFFBC8B8B68B050300151200CDCA9F5F5C31 585436E5E3AEE8E2A9E0DB9CECE6A5F7F6B5DFDA9EEEEBB7F6F4C8B8B48C060000B2AC86F0EBC6 F6F2C9E1DEB21C18003A3524EFEDBEF9F4B8F9F4B5D6D294FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFEF3FAF6DCEFE1AF F4ECC4FDFCE8FFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFDF9F0F9EED1F3EDC1F1F0C3FAFAEBFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E8E8E8EAE8EAF1F7F1 99D39850B54E97DA95D0F1CFF5FCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFDFCDCECDBAAD5AA56B5557FC87EDAEEDAF4F0F4E4E4E4F2F2F2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAE9DAA9C5A97E897E5F715F 4B7F4B448E445294527DAE7DADC9ADCDD4CDD7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D9D8D9C1CCC19EBC9E9AB99AB6C7B6CAD0CAD7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D3D3D3BBBBBBA1A1A1939393 9493949D9E9DB0BBB0CDDCCDEAF2EAEBF6EBB7DDB773BE7349AB4991CA91CDE5CDF3F9F3FFFFFF FFFFFFFEFEFEF6F6F6DFDFDFEAEAEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEEBF8EBACE4AC75CB755ABD5AA7E0A7E9FCE9FCFFFCFEFDFEF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCF7FE2D884DED575D0C475C6BC75 E4DC8E8C8344766B31E2DB8ED4CD7EE2DB8BE7DE8ECBC185403505B8AF7CD0CA83DBD87DD7D671 D5D075DCD282D6C980D4C67BD7CA7BD7CB76D9CE77DACF77DCD278E6DD86968E3B857D2DD7CF85 E4DB97A9A05F7E7536DED68EE3DC8FEBE694EEE894ECE592F2EB9AE9E197EEE59DEDE39CF4EB9F FAEF9EF1E791F0E892F7EF9AF7EF9AF1E996EEE695EAE291DFD687E9E091EFE698F4EB9CF4EB9E EFE395E6D98AE6D688EDDF8FEFE290EFE08DEFE18CF5E993E7D982E3D57DEDE187F4E78FEFE08C EFE291EEE08EECDD8CEEE18FEFE191F1E193E4D586EADC8DE8D88ADECF80F0E392F0E691EFE58F EEE48FEEE391EDE291E9DE8DE9DE8EEFE493EFE493EEE392F1E694F3E898EDE194F1E499F4E999 EDE290EDE28FF2E892F0E68EF0E68FF4EA93EEE48FE7DD89EEE096F5E6A2FFF0A9FCEDA0EDE08E ECDE89F2E38DECDF89EEE08DF4E495F4E698F6E79DF4E79CEFE398E8DC91F8ECA0F3E899EBE091 F4E999F1E695F2E795F3E896EEE491E8DD8DF3E79CE6DA90F0E49AF3E79DE7DB8FE4D88CF2E69A EBE091E4D98AF1E697F1E697F6EA9FF2E69CF1E59BE5DA8CEEE493EFE490EBE18BEDE38EECE18C FBF09FF6EB9BEEE293FCEC95F4E287F4E38AEEE087F7E991F8EB95F1E792E4DB89EBE493F1EB9D ECE598F2EA9FF0E79AF2E89BF3EA9CF2E99BF0E797F0E897F2EA97EFE794F5ED98F1E994E8E08A E7DE89EDE191F2E796E5DA8AF0E595F6EA9EEBDF94F2E69CF3E79DEEE29AFDF1A9FDF1AAFCF2AB F6ECA6F2E8A2F5EBA4F4EAA2FCF2A9F4EBA0F6EDA0F3EA9BF1E998F5ED99F1E998F4EB9CF7EFA2 F3EB9EF2E69AF6EA9FFAF0A5F0E49BEAE299DCD68DD9D48AD0CC83C9C77EDEDC98BDBA78D2D18F BBBA7AA6A467D4D499B5B47C8888539493617574446A6C3B696C3E3B3D163B3A21373621262606 6F7034EEEDA1E4E290E1DB91DDD490E5DD95D1CC80D4D498787B448B8B53CECC91E8E3A3EDE6A3 F6EDA8EBE099DFD58CEFE59DEBE199E4DA93F1E7A3E1D792F0E69EF4EBA0F5EC9EEEE596EDE495 E7DE91EAE297EFE69EFFFAB2E0D792EDE6A2DAD38FE5DE99E4DD98FBF4AFF2ECA5F8F1AAF3EDA6 F9F1ACF2EAA5EAE19CF3EBA3EAE496EBE397EEE79BE4DE92E5DE93F3EDA3EFE89FEAE39BE4DE95 F2EBA4E9E29CF0E8A5F4EBA9EAE1A0F3ECACEDE7AAF1EBB2FAF6C2D2CFA21210002524185F5E46 545434A2A168B5B672BCBE74B5B869ACAD5FD4D58AD2CF88E3DE9BC8C37FE4DE96EBE699F2ECA4 F3EBA8E2DA98E2DC9BEDE8A8EAE5AAEEE9B1EBE8B4929061292600E7E6BBFFFFD7F7FAE4E1E5E3 22222C1C1F09565A377B7D5BFFFEDBEEEBCB1D1813807D44FFFCD4F9EFCFE8E4A4E0DD95DFDD9B E9E8A831300E858349F0EBB4F7F1BAE4DBA1D6CD8FE9E09EF9F2B3C1BD811F1C0F6B663FF5F1C2 D1CBA3261E00E0DAA8FCFCC5E5E19EE7E59AE5E392EDEAA1F4F0B2FBF4C6E3DABB130900B5AF8F E0DCAEF2F0B9FBFBC253511F181306D0CAABFEFDC9F1EEB4D5D19DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF9FDFCE5FCF4CF FCE3BFFEEED8FFFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCF7F0EFCBE5E5ACF3F3D9FCFCF5FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1D5D5D5D5D5D5 EAF3E986CD8539AE38A6E4A4E3FBE3FBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEECEEECC1D7C146AD456BC169D3EBD2E8E3E8CECECEE8E8E8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1EFD1A3DCA3B8D2B8 C0D2C0A0D1A068C16831A53158BA5896D896D1ECD1EDF5EDF8F9F8FAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFBFBFBF0F1F0DBE0DBC3D7C3BCDCBCDDECDDFBFAFBFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFCFCFCF2F2F2C6C6C6A3A3A3 B1B1B1CECECEEBECEBF7F8F7F9FBF9FCFDFCF6F6F6DAE1DA97CC975FBE5F74CB74ADE1ADEAF7EA FFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8FCF8D6EED66DC66D60C8607DD97DC7F1C7F8FEF8FFFFFFFEFDFE F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3C777DED27FDCD472CDC272 C4B772E6DE8BA49A596E6427DAD382D7D17ED8D27EE2D988CBC185372B00A89F6DD7D389DBDC7B D6D86FD1CB71CBC273D0C47BDCCB81DBCE7DDFD37DE2D680DBD179D9CF77E5DB83CDC56FA49C4B D7D084D0C87FD5CC8A6B6221A8A15BE6E195EAE595EBE691E8E38FE6DF8FF1E99FE7DE97F1E7A0 EEE59AEEE492FFF9A2EDE68DE9E18BF7EF9AEEE691E7DF8DF7EE9DE7DF8FF2E99BF7EEA0F1E89B F7EEA2F5E99BF6E798EEDE8EEFE08FF0E18FF2E390F5E692F5E691E2D47CE8DA81F3E58CEFE188 F5E691EADB89EFE08DF3E491E7D886EFE08EF7E996E8D987EADB89EADB89E5D683F3E693EEE28F E9DF8BE8DD8AECE28EF3E894F5EB97E7DD89EDE28FEFE591EFE591F1E793F1E696E8DD8FEDE294 F2E797EFE490EEE48CF4EA92F1E78EEDE38CEEE48DECE28CF1E693F6E79EF5E4A0F5E59EEFDE92 E7D785EDDE86EFE188EFE188F1E28DF5E694F5E598F0E196F5E79FF6EAA0F2E69BFCF0A4F7EC9F F5EA9BF1E696F1E695F3E896F5EA98F2E893EEE391EFE495F0E498F8EC9FF7EB9FF0E498F0E498 F3E79BEEE295EADF92F2E699F7EB9EF3E79DF0E49CE9DD92E9DE90F2E797F2E893F0E690F4EA94 F0E691F6EC99EFE494EEE393F6E68DEEDD7DF0DF83EDDE83F5E58DF4E891F4EA94EBE391F1EA9A F1EB9DECE699F3EEA1FBF2A6FDF4A8FDF4A7F8EFA2F1E899ECE493E8E18FEBE390F9F19DFCF49F F1EA93ECE38FF0E593F1E695F5EA99F1E696F2E798F5E99CEFE396F0E49AF7EBA1F5E9A0F7EBA4 FBF0A9F0E6A0EDE39CF5EBA3F7EDA5F5ECA1F8EFA2F4EB9EF7EE9FF8EF9FF1E998F3EA9AE9E293 F1E99CF4EB9EF2E69DF6EAA0FFF4AAEDE199E9DF98E8E199F2ECA4CBC97FE5E29CD9D995D1D08E D8D797A8A768ADAD71B3B27A72723BB5B5827A7A498485546062334B4E216266403836244A4836 161602767637F0F0A0ECEB98E3DF98D6CD8CE6DD98F5EFA2B8B87A4F541C7C7B44B4B276F3EEAD F3ECA7F3E9A4F4E9A2EBE098F0E69EE7DE96E5DC95F2E8A4F4EAA6F4ECA4E7DF95EDE598EAE295 EFE797F5EDA0E2DA8DCFC77BF5ECA3F7F0A8FAF4AFF3ECA8E0D995DED793F0E9A5FBF5B1F6F0AC EAE39FEFE8A5F2EBA7F1EAA6F0E9A1EFE89DF1EAA0F1EAA0EBE49AE3DC93F0E9A0EFE7A1F0E7A1 EDE59FFCF4AEF6EEA8FCF5B0F4EBA9F1E9AAE8E2A6F6F1BAF4F1BEE5E1B3423F261815003D3C1D 56563C7B7A57919155AEAF6A9B9D519FA052D3D487D3D289E1DE9BE3DE9ED0CB87E2DE95EBE898 FAF5A9F7F0AAE3DD99E7E2A0F5EFB1EFEBB0F1EEB7F7F4C12C2A0D615E3ADEDBB2D4D5ADA5A988 565C49010307636A417D83585D6038FEFEC8EEECBE2C27154D4B17FFFDCAE9DFB9F6F1AFEDE9A1 EDEAA7E9E6A72D2C183E3D0D8D8A55E8E5ACEEE9ABECE4A0F7EFA6F3EBA6EAE6A9D7D398DCD8A1 F8F4C3EBE5B7363105D1CD9AFCFBC2EBE9A7F6F5ABF9F9A9F1F1A1F1F0A8F8F5BDF3EDC5191300 7F7B56DFDEA3E8E9A1FDFEB8A5A5640200009F9C74FFFFC4FEFDBCF3F2B8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF5F0F0CA ECE9B5FCF0DCFFF8F1FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9E0F1F1C0E9EAB7EEEFCEFAFAF2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9FAEEEEEE EAEFEADEF8DE7BCD7A37AD36B7E5B6F2FDF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8D5E7D449B14868C066D4EDD4FBF7FBECECECF6F6F6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0F1D3A4E3A7 CDECCFEEF6F1E2F6E5C1EDC48FDB9165CD674FC55275CC76B6E3B6F5FCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEF4F5F4CFE8CFB0E1B0D8F1D8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE9E9E9 DADADAE3E3E3F1F1F1FFFEFFFFFFFFFFFFFFFFFFFFFDFCFDF2F4F2CDECCD9ADF9A4BB94B76C876 DBF0DBFFFFFFFFFFFFFEFEFEF4F4F4D7D7D7E5E5E5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFDFBE3F1E3B2DEB248BC4871CF71C1EEC1EEFCEEFDFFFDFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCBF6ED9CC77DED672 D4C977CABD77D6CF7BA096545A5012CEC875CFC973D2CC76E6DE8AD0C68A362B0098905EDCD88F D3D373DADC73DDD77DD0C778D1C57BD0BF74CFC171D6CA76D9CD78D3C974D3C972DCD27CD4CB78 8E8635D0C97EC4BB76DBD2905B5218605915DFD991EEE99AE2DD89DFD985E6DF8EDED68BEBE29A E1D88DE3DA8AF3E994EEE48BF1EA92DBD37DECE48FF4EC97EDE592F2EA98E6DE8DE7DE8FEFE697 EBE293F8EFA2E7DB8BE1D281EBDC8BEFE08EE9DA87EADB88EADB86F6E792F1E48BE7D980E4D67D F1E38AF6E791EBDC89EEDF8CF2E390ECDD8AF1E28FF5E693EDDE8BEDDE8BE6D784E0D17EEBDF8B F0E590E8DE89E5DB86E9DF8AEEE48FEFE590E9DF8AF4EA95FAF09BF6EC97EAE08BE5DA89EEE393 EFE494F2E794ECE28BE7DD86EBE189EEE48BF7ED96FBF19CF2E895EFE392F1E197F0DF98F2E296 EBDC8AE2D37EE7DA7FEBDE82EEE088F0E28CF0E190EEDE91E2D388EFE198F4E89CF3E79BF8ECA0 F2E798F6EB9CEFE493EFE493F0E593F1E694EFE591EEE391EFE494F8ED9DF8ED9EF4E99AF5E99D F9EDA1F0E498F2E69AEEE296ECE094F8ECA2EFE39AEEE19BE8DC94F0E499F4E99AF4E999F5EA98 FCF19FF6EB99F4E999EFE495F5E89CF4E48DEBDA7DEFDF83EDDD85F5E890F6EA95FAEF9DF8EF9F FBF4A4F6F0A2F2EC9FFAF4A8F6EDA2F9F0A5F9F0A5F9F0A4F5EC9FF3EA9AF0E797EEE695EFE794 F1E997F2EA97F1E896E9DE8CECE191F3E898EFE494EEE394F5EA9CF3E79BF0E49AEDE197EBDF95 EEE29BF0E59EF5EBA3FAF1A7F4EAA2EEE59AF6EDA2F7EEA1EDE497F5EC9FF9F0A3ECE396F2E99C ECE597F1EA9CF6EDA0F4E89EF7EAA0FFFAB0F3E79FEEE49DF4EDA5D2CC84E8E59BCBC881C8C884 C7C683B9B876CAC989C5C587919156B8B9809D9D69A7A875858756494B1C494B205B5F3C343220 484634060501929154E8E89AE2E18FEBE7A1E3DA9BEAE19DF5EEA4A2A3658F925B7F7F46B5B376 E5DF9FD4CD88DBD28DEFE59EF2EAA1F1E9A1E6DE95EAE19CF2E9A6F6EDA9EBE39BD7CF86E1D98E E0D98BE6DF8EEEE798E8E193DFD78CF2EAA1F4ECA4F6EFAAFFFBB7EEE7A3E6DF9BCEC783E9E29E FBF4B0F0E9A5EFE8A4ECE5A1EDE6A2F2EAA5F4EBA6E9E09BE1D893EDE49FF2EAA4EAE19CEDE49F EFE6A1E3DA95EDE49FEBE29DEDE49FE8E19DF0EAABECE5AFDCD5A4FFFFD5666242030000514E2D 5B5C3A9FA07F898A618F8F54A6A762B5B76BB4B568D3D488D2D188E8E5A1DCD797D3CE8AD6D288 DCD98AF2EDA2F3ECA5DDD894E4DF9DF5EFB1EBE7ABF7F3BCC9C69218150037340E595628414014 1E2102020700252913C6CE9664683E3C3E1BDADB9FC5C48E5F5C2F30300DD8D69CD3CD9AE5DD9C D8D08FDBD597E0DCA349461B232105B8B77EF1F1B4E2E09EE5E299E0DD8ED4D28BDAD89FCDCC96 C2C18BE9E8B2E1E0AA424110B5B47DEAE9B0DEDEA1DEDE9EDDDE9ACDCF85D4D591EAE8B2FFFFD6 3B37135D5B35F5F6B5F0F3A4F0F3A0E6E89D212100808053F5F6B3E8E9A78C8C52FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBF3F4F4DB ECECBDEBEBB9FBFAEFFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1FBFADBECE5AFEEE8BB FAF8E5FFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFB EFF0EFE2EDE2C6EFC66DC86C39AD38BFE5BEF9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEDEF1DD4DB54C64BD63CCE5CCF7F2F7EDEDEDF7F7F7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFDF2FFF7E6D0E6B7 A4D78FCAE5B6F0F3DCF3F4DEE9F4D6CFEFBB91D77D58BF464BB84677C677B4DCB5E1EDDDF5F6EE FDFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFACFEFCFA7E1A7D2F0D2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFCFCFCFCFCFCFEFEFEFFFFFFFFFFFFFDFDFDF8F8F8F8F7F8FCFDFCEFFDEFC7F1C74AB64A 5CBC5CBCE5BCF7FDF7FDFFFDFEFEFEF4F4F4D5D5D5E4E4E4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FAF4BCE4BC7FCD7F4FC34F91DB91EAF9EAFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCC06BD4C970 E0D972DED37FD8CC83D5CE789C9350514808CDC771C7C16AD0C972DED680CDC3853C320389804F DFDB92CDCC6DD8D973DCD77CD6CD7ED9CD84D8C77AD2C574D1C573D0C471D4C876D9CF7BDBD07E D9D080756C1ECEC67CDCD38EE3DA98B6AD6BA29959DFD793E3DD91E0DB89E2DD88DDD684DFD88A E9E195E7DE91EEE794F3EA91E3DA7EE9DF87F4E992EEE48DE5DB86EDE38EF7ED98E0D583DED382 EEE393EEE392E1D687C3B766BFB05DE1D27FEFE08DE4D582E0D17CE6D782F3E58CF1E38BEBDD84 E4D67DEEE087EDDE89F3E491EDDE8BEDDE8BFAEB98F3E491E7D886EFE08DF5E693EADB88E3D481 F0E38FF3E793EDE38EEDE38EF2E893F1E792EBE18CF2E893F4EA95F6EC98F6EC97F1E792EDE38E EADE8CEADE8BF0E48EF0E48CF0E48BF2E68DF2E78EF9ED98FEF2A0F5E899EEE192ECDD8FEFDF90 F9EA97F6E791E9DC81E7DA7DEEE184F4E68DF2E48DEFE08FEFDF91E0D186EBDD91F3E79BF1E697 F5EA9BEEE394F2E797F2E798F4E997F2E795F0E593EFE492EFE492F6EB98FAEF9CEEE393EFE493 F9EE9EF9ED9FF4E79BF9EDA4F2E69DEDE198FCF0A8F0E49DECDF9AF1E59DF5E9A0F2E69BF4E99A F1E696F9EE9EF3E898EFE395EFE397F7EB9EF2E48DE7D87DEADA82E9DA82F3E68FF7EB97F7EC9A F7EF9FF9F2A2F6EFA2F2EBA0F5EFA3F7EDA5F5EAA3F2E99FF3EA9FF6EDA3F9F0A4F2E99CF7EE9F F1E999EEE596F3EB9BF4EB9AEADE8FF2E797EEE394F5EA9BF7EC9DF1E698F8ECA0F3E79BE3D78C EFE399F7EAA0F2E89BF2E99BF1E89AF2E99CF1E89BE9E093F6EDA1EFE69BF7EEA3FBF2A8F2E99F F9F0A6F3EC9FF3EB9DF5EC9FF1E59BEEE298FBEFA5F8EDA5ECE29BEEE79FDBD58CEEEBA1E0DE94 DADA93BDBD76A9A865D0D18FA0A061909055C3C48B6C6F3A929562797B4A767849595C31292C0F 413F2F3F3C2D0504009E9D64F9F8ACE5E494DDD994D7CE91E6DD9CFCF5AD9A995C92955EB1B176 C0BE81D0CB8BCDC681DCD38EEAE39AE6DE96E2DA92DFD891EEE8A2F2E9A7E8DF9CE1D992DAD289 E3DB91E0D98BE2DB8DEBE496EDE698EBE398EFE69DEEE79FEAE39FF4EDA9F1EAA6E8E19DB8B16D C2BB77E0D995E7E09CE6DF9BDCD591DFD894EFE7A4F3EAA8E9E09DDDD492E9E09DF2E9A6E7DE9B F1E8A4F4EBA5DED590E3DA94E4DB96E2DC93E2DE99AEA86CD5CF9BB0A980888260241F05433F27 565332565630A5A77D797B4A7E7F42C4C481DDDF96CFD083CDCE81DAD991D6D390D1CB8CD2CD8C CBC77FD0CD7ED8D387CDC680B8B36FBEB977CEC889C2BE81DBD69DD8D49D85824A2B280E121000 1C1A0653561F666B2C95995DE8EEAA84865346441FB7BA78D1D396A1A072303007D1D294DAD99A E0D798D7CE8FE1DA9FEFEBB48280481E1D06DBDCA3E2E4A7BDBE7BCACC80DEE18FE6E9A3B9B988 A5A573B8B984FBFBC5F3F4BA65673A81834BEEEFB6F8F9C3FCFDC8F3F4C2D9D9A9D3D2A8C4C0A2 C6C1AC37321F322F17888855DFE1A2F5F8B3FFFFC76363367B7953FFFFD0FAF9D04B4729FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF1F1D6 E8E8B5EFEFBFF9F9D7FEFEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFBEFF9E5C3 F9E7BFFCF7D8FFFFF0FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4F4F4D9DBD9C2D2C2AADDA961C05F3BAD3AC2E5C1FAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0F2DF50B74F60B85FBBD5BBDCD9DCD4D4D4ECECEC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFDFEFEF9FEFDEBFEF9D7FFEABA D0D58DA3C66BC1D58DE2E4ADE7E6B2E4E6B0DDE5A8C5DC91A2CF7565BF5853B45161B25C9FC78D DFE4C7F6F5EAFFFFFDFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFBFEFBD0F0D0A5E2A5D0F0D0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEEEEEEECECECFCFCFCFCFFFCE1F6E1 6DC46D60C06097D997D4F1D4F9FDF9FFFFFFFAFAFAEEEEEEF4F4F4FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7F6E78FD88F4EC14E71D071B2E5B2F2F9F2FFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFC36C D5CA70E2DC73DFD57FD6CA7FE1DA83B2A9634E4604CCC76FC7C169CCC66CD5CE77CFC587473C0F 766E3EE4E096D4D375CCCD67C7C267CCC373D4C87DDBCA7CD9CC7CD7CA7AD5C979D9CE7EDFD483 E0D584DED58771691DC7C077F1E8A3D6CD89D4CB89857C40A59E5DEEE89FE7E291DFD985EAE490 EDE696E9E092F0E797F2EA94EDE587EFE688F1E78FE8DE87EAE089F0E68FE8DE89E1D783E8DD89 E3D985F0E592EDE28FCABF6ED4C874E6D783F6E792FFF09CF4E68FE8D982EBDD85EDDF87E7D981 F1E38BEEE088EADC83EEDF89F2E38FEBDC88ECDD88F8E994EEDF8BE7D883EDDE89F3E490F0E18D EDDE8AF4E892E7DB86E3D982E7DD87F0E68FEEE48EE8DE88F6EC95EEE48EEDE38DF3E993FAF09A FCF29CF5E994EEE18CEEE38BECE188EBE087F3E88EF3E88EEADE8BEEE292F0E395F1E397EADC8A EBDC86F4E68EF2E58AE7DA7CE8DB7CF1E486F8EB8FF3E58EF2E390F8E79AEDDF92F0E396F6EB9B F4E999F9EE9EF0E595F0E595F5EA99F7EC9AF6EB99F3E896F4E897F6EB97EFE58EEDE38CDDD37F E8DD8AF2E797E9DE90F0E498EBDF95E6DA91EFE39CF3E6A0EFE29DF1E4A1F4E7A1F1E59DF4E89E F2E69BECE093F6EA9DEEE396ECE093EFE397F4E89BF2E48FE6D77FE3D67FE2D57EF0E48FF7EC99 F8ED9DF7F09FF8F2A3FAF2A7F7F0A5F3EEA1FBF1A9F7EDA5F2E8A0F1E89FF4EAA2F7EEA3EFE69B F4EBA0F2E99CF5ECA0F8EFA3F3EA9CF2E797F5EA9AF5EA9AF6EB9CF9EE9FF5EA9CF7EB9FF8ECA0 EDE195F4E89DFAEEA2F8EFA0F3EA9AEDE494F6EE9DFEF5A7EDE497F3EA9FF2E99EF1E7A0F2E8A1 F1E7A1F4EAA3F4ECA1F0E89AF6EDA0F3E79DE6DA90E7DB91F4E9A1E8DE96E4DD95F8F1A9D2D086 EBE99FCDCD83C2C47BBCBC77C0C17E8F914F9B9C60A4A66E8E915B727543787B4B55582A6D7046 0E12013B392A28241901000098975EF2F1A8E4E395E4DF9DE2D99EE8DFA1F2ECA4B8B77A5F6229 AAAA6FC1BF82F7F2B2E5DE9BEDE59FEEE79FE0D990DBD48DD8D38DE6E19DEAE1A1D7CF8DE6DE99 EAE39AEDE69BECE599F0EA9CF5EFA2EFE99DE9E398EBE49BF7F0A9F3EDAAEDE7A5F3EDABE1DC99 D3CE8BD8D290EAE5A2EBE5A3EBE6A3E2DD9AE3DD9BE9E09EECE3A0F1E8A5EDE4A2E8DF9AEAE19D E7DE9AEAE29AECE49BDFD790E4DC93D9D389E1DD94E3DF9DDAD59CCBC598645E3B1611003A351B 656145625F3C8082588588588A8C57939357DBDB98D9DB91BEBF73D5D58BDFDF97DAD695DED79A E1DC9BD7D28BDFDC8FEEEA9EF2EDA6E0DB97E2DD9AEDE8A8E4DFA0E5E1A4E7E2A9ECE9B2E3E3AF A49F6ABFBC85D8D798DEDF99EFF2A8F0F2ADBEBC91161000919255FBFDC4B0B089171805D5D9A0 E3E4A2ECE39EE9DF9DF8EFB2FFFDC5ACAA740F0F02D1D29FF2F4BDD5D89AE8ECA8E6EBA2E0E2A8 696A421B1D0C4B4E28D9DCA8EFF4B9585C38525621E4E8B5B3B58AACAD8988886A5C5B41474533 1C171416110E000000090600020000BCBB86F3F4BAF7F7C372714A75744FFCFBC8EBEABB2C2914 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFB ECECC6E1E1A1F2F2C8FFFFF3FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFB FFEFE2FBECCCF4F0C4F6F8DAFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF5F5F5DCDEDCC1D3C1A0D69F66BF654EB34DC8E7C7FBFDFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEE3F3E263BD6265B964A9D0A8CDD5CDD6D7D6 EEEDEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFFF4F4F9F0E5F1F1D3F0F0C5F3EFBB FDEAB9D0D893A3C971C3D893E4E6B4E9E8B9E8E7B8E9E8B9ECE9BCE1E7B9A9D99F75BF6657A734 84B14CC8CE8CE5E4BBF5F5DDFEFEEEFFFFF9FFFFFFFFFFFFFFFFFFFBFDFBD0EFD0A6E2A6D1F0D1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEFEFEFEEEEEEFCFCFCFFFFFF EFF8EF9CD59C75C77579CD79B3E4B3F6FCF6FFFFFFF9F9F9E9E9E9F0F0F0FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9FBF9CFECCF6ECE6E3ABE3AA2E1A2CCE6CCE2E5E2 F4F3F4FEFEFEFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D2C66FD7CC73E2DB70DAD079CDC175DBD47BC2B972443C01C4BE64CAC56CC9C468DDD67DDDD394 53481B675F31E6E29AE4E386D5D770CBC66BD5CD7AD4C87CD2C273D5C876D8CB7CD9CC7DD6CB7B D7CC7CDBD082F1E79C797126A59D54DCD48BD0C782DBD28F9C935A847B3EEEE6A1F3EE9DE7E18C EBE58FE5DF8CF4ED9CDCD481DAD47BF1EA8AEAE280EFE58EE6DC85F5EB94E9DF88D8CE77E4DA83 F7ED97E8DE89E6DC86E6DC86CEC46FF0E38DE9DB83E3D47EF2E48CFBED95F6E890E8DA82ECDE86 F0E28AF1E38BE6D880ECDF86F7E892EDDE89EADB86EFE08BECDD88E8D984F3E48FEBDC87EBDC87 EEDF8AEDDE89E8DC86EADE88E3D982E6DC85EEE48DEEE48DE8DE87F0E68FF0E68FF4EA93F8EE97 F6EC95F3E992F3E88EEADF86ECE187F0E48AF2E78DF5EA90EADF86E1D580EBDE8EF0E395EFE195 ECDF8AECDF83EFE285EBDE80E6D97BF0E383EFE283F4E78CEFE18AF0E18EFDEE9EF7E99AF3E697 F7EC9BF5EA9AFBF0A0F1E696EDE292F2E794F4E997F4E997F2E795F5EA98F9EF9AEFE58DEBE18A E0D67FF1E792F8ED9BE7DC8CF2E79ADFD389E0D48BFAEDA6F0E39DF3E6A0F7EAA4F1E49EEADE97 F7EBA3F2E69DECE096FAEEA4F2E69BF0E498F4E89CF4E89BF5E995E7DB85E3D783E2D682F0E594 FBF09FF2EA99F2E99BF1EB9CF6EEA3F6EFA3EEE69BF4EAA2F3E9A1F2E8A0F1E79FF3E9A1F3E9A1 F7EEA3E8DF94E2D98EF1E89DF6EDA2F0E69BF1E597ECE192F7EC9DEBE092ECE192F8EC9FF5E99D FBEFA3FBEFA3EEE295ECE094E7DE8DF1E996F7EF9CEEE695EFE797F5EC9FFAF1A6FCF2AAF4EAA3 EFE5A0F4EAA6F3E8A5F4ECA1F0E99BFDF4A7FDF1A7E6DA90DCD086EADF97ECE19AF1EAA2F4EEA5 EDEBA1CCCC82C0C177DBDD94C0C17BA4A6627B7D3E717237BDC088676937797B4B74774A65683B 686B442327072F2C2118140B060500A8A770F2F2A9E4E297E8E2A1E2D99EE5DB9DF0E9A2D1D091 B7BB80C6C78ABEBD7DF5F1B0DFD996E8E19BF0E9A2EAE59CEAE69FD8D58FD6D38EDAD593CCC582 EDE6A0F4EDA7F0E9A0F3EDA1ECE69AE3DD91E3DD91EDE79DE3DC94E6E09BF1ECAAEBE6A4F2EDAB D3CE8CE9E4A2F4EFADF6F1AFE8E3A2EBE6A4EAE5A3EAE5A3E5DF9BE2D994EFE6A2F4EBA6ECE39E F4ECA5F5EDA5EBE39BE7DF96E7DF96ECE49AD1CA7FE8E59FE4E1A4FFFFCB6E69451712005B553F 45402C322D135653307A7C4E797B45ABAF74B1B075B2B371C5C77EB3B469EFEFA5F1F1AAE4E0A0 EAE4A6E6E1A0D9D48DE4E194EEEBA0F7F3ABE7E29EE6E19FEDE8A6E6E1A2E7E2A3EEEAADE6E0A6 ECE7AEF2EEB6FAF8C0E4E0A2DDDA94E5E499EBEBAAC0B99B0E06087D7D4BFFFFE0BAB89F161604 D3D4AAF6F8B9E0D88FE0D78DEEE6A5F9F6BCC0BE8A0A0D00A2A574A0A375797D4CCFD49DF7FDC1 DADDB027271D0304000609007D8152F9FEC77D824C484C1A9C9F79000000090800100E04010000 1311041B1A114743386A67543B3A2746451BF1F1BCF8F8BEEAEBAE646438706F42FDFEC2CECE9C 29270AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 F1F1F1EAEAEAEBEBEBF0F0F0FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCF5F5F5EFEFEFEDEDEDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFCFCFCF8F8F8F2F1F2EEEEEEEBEBEBE9E9E9E9E9E9E9E9E9EDEDEDF1F1F1F5F5F5F9F9F9 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F2F2F2 EEEEEEEBEBEBE9E9E9E9E9E9EDEDEDF3F3F3FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFD FBFBF2EDEDC6E5E5ACF3F3D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFEFEF6F2DBE8E5B2EDECC3FDFDF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF3F5F3D7EBD6A3DBA176C7746DC06BD1EBD1FBFDFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7F5E77FC67E71C1709CD59BD0E9CE F2F5F1FDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F4F4F4 F1F1F1EDEDEDEAEAEAE9E9E9EBEBEBEDEDEDEFEFEFF6F6F6FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFBFBFBF4F4F4EEEEEEEEEEEEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFBFBFBF7F7F7F3F3F3EFEFEFECECECEAEAEAE9E9E9ECECECEEEEEEF1F1F1F8F8F8FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF4F4F4 EFEFEFECECECE9E9E9EAEAEAECECECF3F3F3FAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEF9FDF3EEFDE4DEF2DEC3E3E1A9E1E2A3 E7E7B2FBF7E6D0ECC7A5DE9FCFECC8F8FAF1FDFCF7FCFCF6FCFCF6FCFCF5FAFBF4F4FCF4CDDFA4 A0BC44A3B439C2C469D7D790E9E9B4F8F8D1FDFCE7FFFCF8FFFEFEFFFFFFFBFEFBD0EFD0A5E2A5 D1F0D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFFFFFF FFFFFFF6FAF6CCE7CC91CF9164C06496D696F0FBF0FFFFFFF2F2F2CECECEDEDEDEFAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFCE2F0E2A9DAA964C76453C553CFEECFDBE0DB CDCDCDE6E6E6FDFDFDFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCD079D9CE74DCD56BDDD37DD5C97DDBD47CC3BB744E4602B3AE55D3CD75D2CD71D7D075 D3CA875B502650471DE7E39BD7D67AD2D36FD1CC71DFD785DDD283DACA78D4C673D0C472D8CB7C DCD081D6CB7CDACE82E1D78C8E853AA59D53E0D88ED6CE84F0E7A1786F35504711CDC680D5D07F E9E48DDED781E0DA83F2EB97E4DC87DCD57AEEE785F6EE8DEDE18AF5E893F7EB95EEE28CEBDF88 F1E68DF5EA91F3E790EBE087E1D57CE7DC85ECE087EFE188F2E48CEBDD84F4E58DF6E88FEEE088 F4E68EF1E38BF1E38BECDE86EDDF87F0E18CEEDF8AEDDE89EFE08BF2E38FF3E48FF4E590EFE08C EDDE89EFE08BEDDE89E4D882F8EC96EFE58EF6EC95E6DC85E8DE87F2E891EDE38CF4EA93EFE58F F7ED96F5EB94E3D982E7D981EDDF86F2E38BEFE287F2E589EEE085F1E38BE5D682F2E292FEEFA2 F8E89CF4E590F7EA8CF2E587E8DB7DEEE182F5E88BEEE185EEE086EBDD86EEDF8BF7E897F8EB98 F5E996F2E894F5EB97F9EE9CF8ED9BF2E795F4E997F1E694F2E795F4E997F4E997F1E792F3E991 EBE187FAF099F3E994F3E896F4E998F1E597F2E69BF6EAA1F6EAA2F9ECA6F9ECA6F2E59FF8EBA4 F9ECA6EEE19AF2E69EF6EAA2F0E49BF2E69CF4E89CEEE396EFE394EEE895F9F09CF1E795F0E594 F2E897F6ED9CFCF4A6F4EC9EF8F1A3F2ECA2F0E89EE8E098EEE599EFE69AF4EB9FF8EFA4E9E095 F1E89DF0E59EF7EDA6F5EBA4E8DE96EBE199F6EDA2EEE296F3E79BF3E79BF0E498F2E69AEADF92 EDE293F0E596F5EA9BEEE394E7DC8DE5DC8AECE48FF2EA95F6EE9DFCF4A3F3EA9DF3EA9EF7EDA5 F8EEA6F9EFAAFAEFAEF1E7A4F1E99EFCF4A7F8EFA2F1E59BEFE399E6DA90F5EAA2F2E9A2E6DF97 F3EFA6CFCD83B7B76DD3D489C3C77DBABE78919450707334ABAF738D9059767A477175457C7F54 8A8C634D50292B2F1038362A2A261B010000B1AF78EAE9A0D7D589E9E4A2EDE4A9F2E8AAEBE49D EEEDAE818348BCBC7EC8C686E8E4A2EBE6A3EBE49EEDE8A1E4E099F6F2AECDCB87E4E29FE8E2A3 E3DB9AE7E09AF2EBA4F3ECA3EEE89DE1DB8FDBD589DFD88EE8E199E8E19BF6F0ABF6F1B0EEE9A9 DCD797D8D393E3DE9EE8E3A3EBE6A6E2DD9DECE7A7EDE8A8F1ECACECE6A1F1ECA4FCF5AEF1EAA2 E7E199E3DD94F2ECA2F5F0A6DED98FE2DC90EDE89CF0EBA2EBEAACDDDCA46562380F0B004A442B 5954404C47324A462B6A68427D804E8D9157ACAF72ACAC71898A499E9E58B6B76BE1E197E9E9A2 F3EFAFF6F0B2DDD899DCD792E4E094EAE79BECE8A0EBE6A2EDE8A4E8E39FE9E4A3F4EFAFE2DC9D E3DD9FF1EAADE3DC9FE2DA9EEDE7ACF2ECAEE2DE9CFFFECAB0A693100407B3B18BD5D3B05E5A4F 0D0B01494C2D9DA069EBE69AF1EA9EE8E49FDEDCA2F3F3C35253281E22080207000000002C3018 979C73B3B69A202112040600000400080E00CCD2A1B3B787343B0E9B9F7F27291E18180F040304 0A09007D7D60E0E0C3FFFFDFFEFFD6F6F5C1FEFFBEF7FAB0E2E595F5F8A76F6F2DA7A766F8FAB9 C8C8931F1D08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF CCCCCC9E9E9E7676767A7A7A989898E5E5E5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDE9E9E9BFBFBF939393868686E0E0E0FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBEDEDEDCECECEA4A4A48F8F8F8181817474746F6F6F737373898989A3A3A3B8B8B8 D2D2D2F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFED5D5D5 A5A5A58E8E8E808080757575757575878787B0B0B0DADADAF5F5F5FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F8F8EBEEEECCECECBBF1F1C6F9F9E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAF4E3F3E4BBF5EAC1FEFCE8FFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF7F7F7E0E3E0BAD5B787D3806FCB6677CC70D5F0D3FCFEFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8F5E884C88374C37397D596 C6E3C6E9EDE9F9F8F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE8E8E8CECECE B6B6B69E9E9E8888887777777474747D7D7D898989979797BEBEBEE7E7E7F8F8F8FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBE2E2E2B6B6B68D8D8D919191EBEBEBFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9E0E0E0C7C7C7B0B0B09797978282827676767474748282828D8D8D9F9F9FCDCDCD ECECECFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE4E4E4 B3B3B3979797838383747474757575838383A9A9A9D6D6D6F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF7F0F2D5F2E7C4FADFC5F9E3CAF0EECE EFF0CFF2F2D9FDFDF8D0F0D0A5E2A6D1F0D1FBFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF7 E8DD9DC9B43BCBBE59E0DFACEAEAC5EEEFC9ECECB6F4EBC3FEEDD8FFF8F1FFFFFEFAFDFAD0EFD0 A6E2A6D1F0D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFDFBF0F7F0A1D6A14DB44D74C974DFF9DFF9FFF9F8F8F8E4E4E4EDEDEDFCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCF9C5E6C57ECA7E6BC86B7ED17ED3E6D3 E5E6E5E3E2E3F2F2F2FEFEFEFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE0D47EDACF76D5CE66D8CE78D7CB81D4CD76B5AC65332A00ABA54CCCC66EC9C467 D5CE6FDBD28E62572D413810CDC982D3D277D7D773D5CF74D8D07DE0D686E1D17CDBCF78D7CB78 D6CA77D5CA7AD1C677D1C579E4DA8E9A9144A49D4FD7D083DCD587EDE59AABA2673A3200B3AC65 EBE694DFDA81E3DE83E6E089EEE791EFE792ECE58AF2EA8BF8EF90F5EA92F4E892FBEF99F8ED95 F0E58CEEE38AF4E98FEFE48AEDE286E7DC81E7DC82EADE82EEE185F2E589EDE085F1E489EEE087 EEE087F9EB92E5D77FE3D57DF8EA92F2E38EE8DA83E4D67EE3D57EE7D982EEDF88F0E28BEDDF88 EEE088EEE089EEDF88EEE089EDE28AF0E58CF1E78EF1E78FE5DB83EDE38AE9DF87E9DF86ECE28A EFE58CF1E78FECE289E6DB83EADB84F2E48CEFE188E7D980F0E387F1E488F3E58CE6D881EBDC89 F2E393EEDF8EF7E892F6E98CE9DC7FE5D87BF0E386F7E98EECDE85EEE087EDDF87EEDF88F3E490 F1E48FF3E791EAE089E8DE87F1E792F7ED99F7ED99F3E896EBE08EEDE290F8ED9DF7EC9CEFE492 EBE18AE9DF87EEE48EF4EA95FAEF9DFAEF9DF7EC9CF2E799E9DD92EFE399F7EBA1F3E79EF1E59C F3E79EF3E7A0EFE39BF5E9A1ECE098E3D78FE7DB90EDE294EFE494F4E999F2EB9AE3DC8AF6EE9E F5EC9DF4ED9CFFFAABFCF5A7FDF5A8F2EB9FFAF3AAF1E9A0F1E99FF4EB9EF4EB9EEAE192EEE599 EBE296F1E89BF2E89EF0E79CF2E99FF1E7A0F4EAA2FAF0A8F3E79CF5E99FF3E69CE3D78BEBDF93 ECE194EFE495F9EE9FF6EB9BE9DE8EECE091EDE492F0E893F2EA97F3EB99FBF3A2FDF4A7F3EA9F F1E7A0F0E69FF6ECA6FCF1AEF4EAA7F2EA9FF6EEA1F5EC9FF6EAA0F4E89EECE096F3E8A0F8EFA8 F0E9A1E1DC94CFCD83E9E99FD8DB92CDD0889EA15D7D82408B8F53656930858955777A4C606439 73784F757853434721404423151306333024151401888750E3E198D3D283D1CC89EBE2A6EEE4A5 DCD68CC7C78667682CBCBC7DE1DD9DE4E19DEAE5A1F0EBA4EDE8A2E6E39DECEBA8D9DA97DFE09E EBE6A7EAE5A4E8E39FEFEAA3EFEAA1E2DE94DFDB8ED1CD82D4CF85E7E299EFEBA4FBF6B2EEE9A9 EAE6A6E0DC9CDDD898E5E0A0EBE7A7E6E1A1D8D494E9E5A5E1DD9DE1DD9CE7E49FF2EFA9F8F3AE EAE4A0D7D48EDAD692F6F1ADEDEAA5CEC988D9D492F3EEACFFFFBEC5C38F403F1A2A2805413E1F 423D25605B4649452C4845269D9B759B9B699C9D645C5D21BAB97FB4B574A8A962BCBC72F2F2A9 EBEAA5E8E4A4EEE8ACF1EBADF2EEA8EDE99FE5E198EAE7A2F0EDA8EBE7A2E9E4A0EFEAA7E1DB97 DED696DFD796E4DB9BE9E0A0E4DB9CE0DAA0F2EBB5F2EAB6FFFDCD847A67180C0C3B3618221E10 09050314110302010058582BF9F7B1F1EDA5F3F1B2C3C38ED7D8AE6F73520B0E005256422F3320 0000005D5E44D6D6C2C5C3B89F9D8E292A1A000000BBBF91A1A57835380EF9FADCD8D7C586837E 1E1B1D0401001211092C2C1764633BBAB989F1F1B8F1F2B0E9EAA1EDEDA0EFEEA1DEDB8EF4F0A8 F6F4BBE7E3B9241F0CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF D8D8D89393934646461111111818184A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFBD8D8D88F8F8F4444442F2F2FC8C8C8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6DBDBDBA2A2A2585A583F403F3131311F1F1F1818181C1C1C383838585958 707170979797D6D6D6F0F0F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF2F2F2DFDFDF A1A2A15F605F444544363636262626202020323232676767A6A6A6E7E7E7FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3D9E3E3A8EBEBB4FDFDE1FFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF6ECFFE8CFFCEAC4FAF8D4FDFDECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F2F3D1D3D0A1C29D6DC96364CC577BD56FD6F2D3FCFEFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAF6EA8DCE8C77C576 8FD08FB7D7B7DBE0DBF3F2F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CDCDCD 9A9A9A7171715050503535352424242323232E2E2E393939434343787878B7B7B7E0E0E0F4F4F4 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3A3A3A414141DBDBDBFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2BCBCBC8F8F8F6868684646462F2F2F2424242424243333333A3A3A4D4D4D 8C8C8CC2C2C2E7E7E7FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4DFDFDF B5B5B57272725050503939392626262121212D2D2D5B5B5B9F9F9FDADADAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF9FCFCF3F6F6E5E7E9BAEAE1AEF8E2BEFFEEDD FFFDFBFFFFFFFFFFFFFFFFFFD0F0D0A5E1A5CDF0CDF6FEF6FEFFFEFFFFFFFFFFFFFFFFFFFEFEF8 FBFDE0EED588E2AD38EDC981FDFAF2FFFFFFF7F7E8E6E5B2EFE1B0FDE4C0FBF1DCFAF8F0F5F8F3 CFECCFAAE1AAD3F0D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0DDB043B0435BC15BC7F3C7EFFEEFFFFEFFFAFAFAFCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FCF2A7DBA75ABB5A79CC79AEE2AE D5E1D5EDEEEDFDFCFDFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD8CD78D4C971D4CD67DBD07DDACE86D9D27CC7BD7A3B3100ADA751D4CE78 D2CD70D7D171E3DA94706638332B00B9B56DD3D278D6D772D9D378D6CD7AE5DA89E3D57CDDD178 E2D680E1D57FD9CD7BD5CA7BDDD284F3EA9D8C8336938D3EDAD383D3CC7BE4DC8EC8C0824C4309 9C964EEEE996E6E286EAE588E5E086E1D983EAE28DECE58CEBE285F3EA8DF3E790EFE38DF3E690 F1E68CECE188EDE288ECE186E8DC80ECE185ECE183E9DD81E9DE7FEDE082F0E387EEE185EFE286 E7D980EDDF86F9EB92E9DB83EDDF87FCEE96F5E691F0E28AECDE86E6D880E6D880E9DB83EBDD85 DFD179E7D981EBDD85EADC84EEDF87F4E990EEE38AF4EA91EBE188E5DB82F7ED94EDE38AEAE087 EBE188F3E990F1E78EF1E78EF7EB93EFDF8BF1E28DEDDF87E6D880F0E387F2E589F8EB8FEBDD84 EBDC86F1E28DEFE08DF2E48DF3E58CF4E68EF3E58CF0E28AECDD85ECDE86F2E48CF2E48CF0E28A F2E48CEEE28BECE08AE9DF88E6DC84E6DC87ECE28CF2E893F2E795EDE390EEE391F4E999F4E999 EFE492EFE590F2E893EFE591F5EB96F2E795F1E695F0E595F2E797E6DB8CEEE394F1E697EBE090 F0E498F0E498EFE399F0E49CF7EBA3F5E9A1EEE298EEE395F2E797F0E593F4EA97F4ED9DF6EF9F F8F1A1E4DE8EEFE89AA7A053635C0ED8D084E7DF95F4ECA3F9F1A8EEE69BF4EC9CF8F09FE8E08F F0E798F5EC9DF6EDA0F1E89CF3EA9FF7EEA3F3E9A1F1E79FF7ECA4F6EAA1FCF0A6FDF5ABEEE296 ECE094EADF91EBE091F6EB9CF5EA9BECE191F1E595F1E895F1E996F2EA97F0E897F2E89AF5EC9F F4EBA0F1E89DEBE19AF0E6A1F7EDA8EFE59FF3EBA0F0E99BF0E79AF6EAA0F5E99FF0E49AECE199 E1D790E3DC94CEC880D2D086C1C179C8CA84BFC37E8A8D4BB3B87A7D8047767943777A4A83865B 4346206266432C2F0F565A35151803302E1D504D3D01000096955AD9D98CCFCE7EB8B46FDFD698 E4DB99DDD78DA8A6646C6E2FCFD08FD7D394E9E6A2E9E4A0E3DF98DBD892EAE9A3E4E6A1D1D490 DDDF9DF0EBABF1ECAAE6E19DEAE5A0ECE8A0DFDB91DBD88CCBC77DC8C47ADAD68DE0DC95E8E3A0 E4E0A0EFEBABECE8A8E0DC9CE1DD9DEAE6A6E0DC9CCDC989E8E4A4E7E3A3F1EDADEAE8A8E7E6A6 E6E5A6EEEDAED6D599CAC88DBCBA81CDCB93D9D79FE9E6B1C0BE887B78452E2E050D0A00413E20 3C381C322E14423F23504C2E6E6C4864623980804D6162296B6C339D9D63AAAA6AABAC66C6C57C EFEFA7E2E19DEFEBABEBE5A9F1EBADEDE8A5E8E49AEBE89FECE9A4E6E39EE9E5A0EEE9A5DED894 CFC985DAD38CE9E09CE9E09AEAE09BF5ECA8CDC78AC9C28EE8E0B3F2ECB97B73560300000C0800 161103110B091A17080C0A0083815CECE9B1A19E67C1C091DDDEB8C6C9AC22240F4E5144F5F5E5 949782080A004040287978669F9D8F8A89751313032A2B0ADCDFB3B2B5870A0C021C1D00201F0B 353328181510100D020301000906000200001E1B04CCCA93E4E2A6EAE5A7F3EDADEFE6A7F9F1AF EDE4A3FCF8BDF9F4C4ABA67BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC F6F6F6B1B1B14C4C4C1414141B1B1B2222224A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBD7D7D78F8F8F4D4D4D3E3E3ECCCCCCFBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0F0F0C9C9C98383833E3E3E5454547777777272727070706E6E6E636363 4A4B4A303130363736747574BDBEBDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDC6C6C6 6C6C6C5455545959597C7C7C9192918E8E8E7576754D4D4D373737494949CECECEFCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F3D9E3E3A9EBEBBEFDFDF2FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFEF8EEF2EDCAE8E8B3F4F4DAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEF0F3F0C0DEBE6DC26960C5567AD46CD6F2D2FCFEFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F9F0B1E0B0 85CC8474C2749CCA9CD9DED9F3F2F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5 A8A8A85757573838383E3E3E5757577676768787877D7D7D6161613434342B2B2B404040969696 D3D3D3F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CACACA8181814444444F4F4FDEDEDEFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEE8E8E88989895151513838384141415F5F5F7B7B7B8989897A7A7A535353 2D2D2D262626585858A7A7A7E3E3E3FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6C8C8C8 7D7D7D4B4B4B5151517272729292929292927373734A4A4A2A2A2A484848B2B2B2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFE7F1F1C6E6E6B1F0F0D1F9F7E8FEF8EF FFFBF6FFFEFEFFFFFFFFFFFFFFFFFFCFEFCFA1E1A1BFF0BFE7FEE7F9FFF9FFFFFFFFFFFFFFFFFF FBFBF2EAECBEE0D07DDEBB53EDD598FDFBF4FFFFFFFDFDF9F9F8EBFBF7DEFBF5CFECE9B4E4E3BC E2E2D6CCDFCFB9DFB9DCF0DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFE5BF62C0625FC35FA8E4A8DDF5DDFBF9FBE8E8E8 EFEFEFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFF9E2FCE28FD18F4BAB4B8BD28B D7FAD7EFF7EFFAFBFAFFFEFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDACD7CD5C975DCD470E0D584D8CB85DAD27EDDD493524809989240 C7C16CCDC76CE1DB7AEAE29A7E75442C2300A29E56D0CF75CDCE6AD5CF74D1C873DDD380DCCE74 D1C56ADBD076DDD279D2C873D5CA79E6DB8CEEE496A1994A938D3ED6D07BE2DC85E0D986DAD293 463E0A817A36F3EF98E3DF81E2DD7DEAE58ADFD881E7DF8AEBE58CEAE186F1E88CEFE18AEEDF88 EEDF87E9DB83EBDC84F2E48AECDF83E9DC7FEFE284F2E585EFE283F0E383F1E484F1E486F2E587 F3E687EBDE82ECDE84F0E288EEE088F8EA91F0E28AEEDF8BF9EB93F5E78FF1E38BF0E28AF2E48C F3E58DE4D67EECDE86EFE189EADC84ECDD86F1E68DF1E78EF3E990E8DE85E6DC83FBF198F2E88F EDE38AF0E68DF1E78EEDE38AF1E78EFBEE99F8E896F5E493F3E28EF2E28AF6E78DF3E488F7E88C EBDC81EEDE85F5E58DF3E38DEBDC86EBDC86F5E691F4E590EDDE88F0E18CEBDC87F2E48DF3E58D EDDF86EDDF86EADE85E5DA81EEE48BF0E68DE9DF88EAE089F3E992F1E792F5EB97F3E896EEE393 EDE292F1E696EEE390F3E896F5EA98F9EE9CE7DC8AEFE492EBE08EF5EA98F1E595F6EA9AF1E695 EADF8EF2E797EFE495EDE195F2E69CF8ECA2FAEEA4F7EBA0F7EC9DF8ED9CF4EA93F4EA95F0E898 E8E294E6E092E3DB8FEBE398908741A8A055F1E89EF1E9A0F3E9A1F4EAA2FCF4A9EDE593F4EC98 E9E18EEFE795ECE493EBE293EAE092F5EC9FFBF2A5F3EA9FF0E79CF9EFA5F6EBA3F2E69CF3E79D EEE298F1E599F1E598F2E798F4E999F9EE9EF4E999F0E593F2E997F2EA99F4EC9BF4EB9CEEE596 E9E093F0E79CF0E69CEBE199EFE59EF6ECA4F2E8A0F6EEA3EFE79AEEE597F1E59BEFE399EFE399 EDE29AE3D991EAE39BE2DC94B6B46AC3C37CCACB87A6AB68B7BC7CA0A368969B646367348F9265 72764F6A6E4B4C4F3136391C191C031E23064846334744320C0B00A5A466D4D385BEBD6BBAB670 E6DD9DE5DC98E0DA8EC9C885969859B0B06FD1CE8CC4C17DCECA84D1CE87C2C079CDCD87C8CA86 B5B975DBDF9BE6E1A2E6E1A0E4DF9CEAE5A1F1EDA4EEEAA0F2EEA4E7E399DCD78EE2DE96DCD793 DCD896DAD697EEEAABF8F4B5E9E5A6E3DFA0E6E2A3DCD899D0CC8DE6E2A3DBD798D7D395D3D298 DCDCA6D7D6A2D8D7A4AEAD7CABA97CA4A277AEAB839E9B758A87635D593727250526260F363519 1817004D4C3057563938381738381377774E6261346666337878418E8F577A794099995AB7B873 BCBC72DBDB93E4E39EEFEBACF5EFB4F4EEB1EAE5A3EAE69CEDEAA1EEECA6F2EFAAF0ECA6E5E19A DBD48EDED68FE7DF97F7EEA7F0E69EDCD28AEFE69FE4E09AD3CE95F4EDC1F4F1B5BDBA815E5835 7C794CA19D73B6B18EBCBB80A5A46FDDD9B44B48271412002F2E184F503C4143350507003F4136 2C2D250B0D01000000000000000000000000000000323216A1A276FBFCCDDADCAC393A1D151600 1717011716071E1C0E2A251926201725200A29250F6D6941EFEAB5F1E8B4EEE5AFE7DCA7FFF8C3 F9ECB4E4D89CF2EDA3F2EFA7F6F2AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7CCCCCC8788874142412526253333332F2F2F4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE8E8E8BEBEBE999999919191E2E2E2FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F5F5DBDBDBB0B0B08787879D9D9DBABABABABABABABABAB8B8B8 ADADAD8081803B3C3B191919444544A1A2A1F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C9C9C9 8C8C8C3D3D3D585958939393BDBDBDCECECECECECEB9B9B9868686404140242424A3A3A3E1E1E1 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF5FFF5E9FAE9DDF2DDDAF1DADAF1DA D9F0D9E2F6E2EFFDEFFAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFBFFF6ECF8E9D0EEE0BBF3EBD3FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9EEEECBE2E2A7F1F1D4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9FAE5E8E5AACEAA54B55363C16594D899DFF4E1 FCFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FAF2 BDE6BC8ACF896CBE6B94C594D8DED8F3F2F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7BCBCBC8383837B7B7B888888A1A1A1BCBCBCCACACAC1C1C1A6A6A6747474393939171717 5C5C5CABABABE9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE0E0E0B6B6B69494949A9A9AEBEBEBFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEEDEDEDA4A4A48282827C7C7C8D8D8DA9A9A9C0C0C0CCCCCCBDBDBD 9696966565652020202A2A2A717171C0C0C0F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CFCFCF 8D8D8D4D4D4D424242878787B1B1B1CECECED2D2D2B7B7B78888883B3B3B282828888888E4E4E4 F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF5FCFCE4F3F3C6EDEDBDECECC4F8F8E9FEFEFC FFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFE3F6E3C3ECC3BAEDBACDF4CDEEFCEEFFFFFFFFFFFF FFFFFFFAF8ECE4DB9AE1CA76E8C879F4E1B8FEFCF6FFFFFFFFFFFFFFFFFDFFFFF4FDFCE4F4F2C4 DAE2AEBED4A6BBD7B5D4E9D4EDF6EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2ECD28CCF8C6CC46C89D389CBECCBFAF8FA E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9F8E9BDE6BD7AC37A5AAE5A 9CCF9CE4F4E4F8FCF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED182DBCF7CDDD673DFD485D9CC88DAD280E9DF9F6C6226 898332C7C06FCDC76DD8D370E2DA91877D492921008C8940CCCB70CDCD69CFC96ECDC56FD5CB76 DACB71CEC364D1C66AD1C66DCCC26CD5CA78DFD485DAD180D3CB7ABAB45FC9C36CD4CF74DFDA82 E5DC9C6961228B853AF2EE97E0DD7DDFDB7AE4DF84E2DC82E6DE89E8E18BE8DF86E7DD84EDDD88 E9DB84EDDF87EFE087EDDF86F0E387EEE184EADD7FEDE080ECDF7FEBDF7DF0E483F0E383EBDE7E EEE182F1E486F0E387EADC82EEDF87E8DA82EADC86E9DA85E9D985ECDE87EBDD84EBDD84EDDF86 EFE189EDDF87ECDE85EFE188F1E38AEDDF86EEDF87EFE48AF1E68CEEE58AEAE186E4DB80F0E78C E7DE83DED57AF0E78CEEE58AECE388F0E78CF3E790F4E393F4E393F1E18EEDDD86F3E38BF1E286 F4E588E7D87BEFE084F9EA8FF3E389F1E28DF0E08DF5E694F6E796F2E390FAEB99EBDC89F1E28C F0E28AE9DB82EADC82E9DE82EBE086F1E88DF4EB90F0E68DEDE38BEDE38CF3E994F5EA97F4E997 F0E595F0E595F2E797FCF1A1F4E999F1E696E5DA8ABFB462DACF7DF1E695F3E894F2E894F4E995 F2E893F1E792F4E996F1E696EEE395F6EA9EF9EDA3F4E89DF2E699F6EB9BF9EF9BF4EA92F2E990 F1EA99ECE69BECE79AE2DC90E6E094FAF8AEF1E9A0EEE69DF6EEA5FAF0A8ECE29AF0E79BF6EF9A F7F098F3EB96F6EE99EAE28EEEE693EEE695F2EA9AF9F0A1F6EDA0F4EB9FFBF1A7FCF0A8F4E8A0 E5D991E9DD93F7EB9FF3E89AF2E799F1E696F9EE9CF7EC9AF1E694F0E795E8DF90EBE293F5EC9F F0E79AE8DF92EFE69BF5ECA1F4EBA1F2E8A0F7EDA5F9EFA7EDE69AE9E294ECE396F0E49AF4E89E FFF2A8EEE29AECE29AF5EEA6BAB36BE0DD93E8E9A1B3B7749EA361858A4BA7AA718B8F5CA3A776 71744A6468455D614154593B060A011B1F00585C378A89762B291D090900BCBC7DDBDB8CB8B764 CCC880F3EBA9E8DF99D5D082EBEAA5A5A668D7D897D7D491D2CF8ACBC881D0CD86CDCB85B9BA74 C4C783B6BB79D1D694C6C484C8C384D5D28FDBD892D9D78DE0DD93E1DF93DFDD93CFCD83CCC982 C4C17CC6C380C0BE7EC8C787E0DF9FE1E0A0D4D393C4C283C0BF7EC4C382CFCE8EAEAD6D8D8C4E 767542797A4E6E6F457D7D555B5B37676645424124302E151613022C2915393623252211343321 1F1D0B4B4B34545439434322333310494A2152522565643480814E9C9C6879794496955E9A9A5B BABB76BBBB71D5D58CDEDC9AECE8AAF2ECB2E5E0A2E2DD9AE5E198E0DD95E2DF9AF2EFAAEFEBA5 D1CD86D1CA82E6DF97EFE79EF5ECA3EFE49AE7DB92EEE499DEDA8AD6D593C6C293EBEBA2F0F2A2 F7F6B6FDFDBBFCFAC4C9C692C8CA77FCFCB6A8A47D000000070400010000020100000000000100 00000003050032341D7F805E7C7A5586845F747250898763BBBA8DD4D5A4E3E3AFE9E9B3F0F0BC C6C695C0C093DBD9B3DDDBB8EEEACAEBE6C2E8E5B6F1EDB1E8E59FF4EFA7F0EAA2FAF1AAF9EDA8 F6E9A5E1D28CF5E9A1F5ECA7F1E9A9F5EDAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFCE9E9E99798976566655859585556554D4E4D393A394A4A4AD1D1D1FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAF5F5F5F1F1F1F0F0F0EEEEEEEEEEEE F0F0F0F1F1F1F4F4F4F7F7F7FBFBFBFDFDFDF8F8F8EAEAEADDDDDDDADADAF5F5F5FEFEFEFFFFFF FFFFFFFEFEFEFAFAFAF4F4F4EFEFEFF5F5F5FAFAFAF6F6F6F2F2F2EEEEEEEEEEEEF0F0F0F2F2F2 F6F6F6FDFDFDFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EFEFEFE7E7E7ECECECF2F2F2F2F2F2F2F2F2 F2F2F2F5F5F5C6C6C66262621C1B1C2F2F2F939393F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFE8E8E8 9C9C9C5353533535357F7F7FDBDBDBF6F6F6F7F7F7F6F6F6EBEBEBC1C1C15B5C5B181818737373 BDBDBDF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFCF9FDF9FAFCFAF3FDF2E2FCE2CCF4CCB6E5B5B2E2B1 B3E2B2B0E1B0BFEBBFD7F8D6ECFDEBF7FCF7F9FDF9FAFDFAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFBF6FDE8CDFCDFC5FBDFD2FDEEEAFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFBEFEFCEE4E4AAF2F0D2FFFEFD FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F3F4CFD3CF89B48837A73769BF77B7E0CF EBF6F2FDFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3FAF3C1E6C18BCE8A68BC6790C490D7DED7F3F2F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCE3E3E3CFCFCFDDDDDDE6E6E6EDEDEDF3F3F3F6F6F6F3F3F3E8E8E8C8C8C8686868 141414313131838383DCDCDCFFFFFFFFFFFFFDFDFDFBFBFBF6F6F6F3F3F3F0F0F0EEEEEEEEEEEE EFEFEFF1F1F1F3F3F3F6F6F6FBFBFBFEFEFEFFFFFFFEFEFEF5F5F5E7E7E7DBDBDBDDDDDDF9F9F9 FFFFFFFEFEFEFAFAFAF5F5F5F0F0F0F4F4F4FAFAFAF7F7F7F1F1F1EEEEEEEEEEEEF0F0F0F3F3F3 F7F7F7FCFCFCFFFFFFFFFFFFFFFFFFF8F8F8D8D8D8D5D5D5E0E0E0E9E9E9EEEEEEF4F4F4F7F7F7 F3F3F3DFDFDFB5B5B54141411C1C1C4545459B9B9BF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFEEEEEE 9D9D9D5353533C3C3C666666D4D4D4F0F0F0F7F7F7F8F8F8EAEAEAC6C6C6626262222222626262 B8B8B8F0F0F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDFDE6F5F5CAE6E6ACEEEEC8FAFAEFFEFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAECF9ECBCE9BCB5E7B5DEF4DEFDFEFD FEFFFEFFFFFDFAF5E3E3C976E7C471F6D5A2FEEDDAFFFDFAFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6 FBFCDFD2E7AE9FCC7FACD398ECF4E5FCFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6F4E6B8DFB87AC67A6AC36ABAE3BA FBF8FBE1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3ECD38ECA8E68B668 79BC79B1D1B1E7E9E7F9FAF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D078DAD078DAD076DED284DED286C8C068DAD18B 6C62257B732DC9C473CAC46AC9C265D7CF868F864F282000807B39CCCA77D4D474D2CD6ECFC86D D5CC72DDCF75D8CC71D4C96DCFC468D0C66BDBD179DAD07BE0D786C4BC6CA29C4ADBD57EE2DC81 DED97FDCD58BABA45DA9A452DEDA7DE3DF7CDAD674E2DD7FE7DF87EBE38DEEE48EEAE087E5DB82 E6DA84E3D882EDE38AF1E78DE9DF85E8DD82EBE183E8DE7FE7DD7CE1D876E0D675E8DD7CEBDE7E E2D575E8DB7BEBDE80EDE082EADD80F4E78BE6D87EDED177EEE087ECDE84E9DB81E8DB7FEBDE81 EEE285EDE084E9DC7FE7D980E9DB81EADC83EEE087EFE087F0E289EFE48BECE188ECE388E7DB82 E7DC82DDD479D3C86BF0E588EDE486F1E789F8ED90F1E58BF2E390F8EA95F5E790ECDE85F2E58B F3E78BF4E88CE8DC80EDE086F7E991F1E38BF3E490EEE290F1E392F5E795EDE28FEBDE8CEADC89 F1E691F2E68FECDE87EBE087EFE38AF4EA92EFE68EEEE48CF0E690EBE18BE2D883F5EB96F2E794 F3E895F5EA98F6EA97F2E794F3E895EDE291F9EF9CF7EF9EE2D784FFF4A2F2E795EBE18CEBE18C EBE18DF1E790F4EA96F4E997F3E898F0E596F8EC9FF9EDA3F4E89CF2E69AF5EA9BFAEE9EF1E794 F0E694F3EB9EEFE99DEEE79BF8EFA4F0E99DF0E79CF5EDA2EFE79DF0E89DEEE599F6EDA2F1E89B F6EE9DF2E996F5ED99F9F19FEEE695F5ED9DF6ED9EF2E99AF5EC9EF6EDA0F4EB9EF4EB9DF6EA9D F8EC9FE4D88BE7DC8DF2E897E8DE8EE9DE8EEBE192F1E798F0E79AF4EA9CEDE594E1D987E3DC89 F0E896F0E896EBE391F4EB9BFEF1A5FCF0A5F7EAA2F9ECA5FBEEA7FBF0A9F6EBA5F2E7A1ECE09A E9DE98F4EBA5EAE19AE9E29CC3BC77DEDB94E4E29AA7AA61B3BA749DA560909659999D689B9E70 9D9F788F906E696A4A6566471D1F052E30112F3216C5C99953533844422E2E2C07646425F1F3A2 C5C473D8D390F0E9ABE2DC95CECA77DCDB96E4E4A4DBDB9AD4D18ED5D28CDFDC94D8D58EE7E59D C8C982DEDE9AD1D38FCACA88CCC887CBC685DDDA97E1DC98D6D18BD8D48ED6D38AD9D48EC9C57F C3BF7BC0BA79C5C280C2C180B3B272C4C383C3C282A7A666A7A666B8B679B0AE71ADAB6EA7A569 A4A2669A98617271411E1C002322061E1C012524101E1C0824220A19180126250D39362253503D 3938255D5E484D4D355B5C414C4C2D6D6D4B66673F75744A626134908E5F787647979766B1B27F 8E8F58A3A566B8B975C9CA85C1C07ED5D292CFC98AC8C381DDD992EEEAA1E8E49CDEDB95E8E5A0 F3EFA8D4D189C5C178D1CB81DED88ED9D287DCD589EDE59AEAE398E8E69B9B9B5D4A4718D8D890 F4F6A6E8E99EECEDA4E5E4A3EFEEADE5E891F8F9AD807E4929241196917948452F1D1A1118150C 201C0F3E3C28777553C8C69DE8E6B6D5D29CFFFFCCFBF8C6F0EEBBD6D49ECCCB92CAC88ECDCC91 CAC88ED2D198F1EFB9F7F4C1E9E6B4E7E4AEFEFEC7EEECAAEEEBA2FFFFB9E9E597F2ECA0ECE39B F8EEA8F6EBA2EEE399F1E89DF5ECAAE9E1A2F5EFB0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7BDBDBD6161615C5C5C9292929898985B5C5B3B3C3B4A4A4AD1D1D1FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6D8D8D8B0B0B0929392818181747474 7070707E7E7E8F908FA5A6A5C3C3C3E0E0E0F4F4F4ECECECC4C4C49A9A9A8F8F8FE1E1E1FDFDFD FFFFFFFFFFFFF4F4F4D3D3D3A8A8A8818181B2B2B2E3E3E3BABABA909090757575727272838383 989998BABBBAF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE4E4E48282823131312A2A2A8D8D8DF7F7F7FFFFFFFFFFFFFDFDFDF4F4F4 C6C6C66A6A6A2F2F2F636363B0B0B0F7F7F7FFFFFFFFFFFFFFFFFFF8F8F8D2D2D2656465121212 4F4F4FA1A1A1EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAF7EACFECCFC9E9C8C5EAC4BDEABCB9EBB8BEEEBE C8EEC8CFEECFC3EEC2BBEDBBB9EAB9C0EABFC7EAC6CAEACAD7F0D7FAFDFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFAF2F0E3B7F2E2BDFCECE3FFF7FAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F8DFF2EFC1F9EDCB FFEFE1FFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4F6D4D7D48AB88A31A63073C87B CFF0DEF3FBF7FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6FAF6D5E5D691C99054B3537EBD7DD5DDD5F4F3F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF8F8F8F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 8A8A8A2323231E1E1E6C6C6CD4D4D4FFFFFFFEFEFEF5F5F5E3E3E3BDBDBD9E9E9E858585737373 7171717C7C7C8989899A9A9ABBBBBBDCDCDCF5F5F5FFFFFFFCFCFCE5E5E5BCBCBC959595999999 EBEBEBFFFFFFF9F9F9DADADAACACAC898989A6A6A6DEDEDEBDBDBD8D8D8D737373747474828282 9B9B9BC1C1C1EDEDEDFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5F9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDDFDFDF606060212121303030848484EDEDEDFFFFFFFFFFFFFFFFFFF2F2F2 D0D0D06969693535355A5A5AA3A3A3F3F3F3FFFFFFFFFFFFFFFFFFF8F8F8D9D9D96F6F6F1F1F1F 4D4D4D9C9C9CEAEAEAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF4F1F1CCEAEAB4EEEEC9F7F7E6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAC7E8C7ACDEACB9E6B9 D9F3D9FCFEFBFFFFF7FBF2CFE3B64BE9BE65FAE4C3FFFAF6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FCFEFBD8F3CFBBE1A5AED18CC1D598E8EBC4F8F8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FBF8DDEFDD80C88048B248 A8DBA8FEFAFEE1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDFBFFFBB3E3B358B658 59B759A9DCA9D5E9D5F3F2F3FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCDC963D3CC6DDFD485DFD385DCD27AC4BD59 D1CA786E66286D652FD2D17FC7C566D3CC76DBD38AA89F642018006A632AC9C57ED4D37BDAD674 D5CE6CE0D879E7D981DFD37BDACF73D6CC6CD6CE6DD9D070D6CC74DDD583C6BD707B7326CEC775 E0DA82DCD77AE6DF8CD3CC79BDB85CDCD775EAE580E1DB78E7DF82E4DA81ECE189EDE28AE9DE82 EBE286F0E690EFE792F2EA92F1E891E4DC82EDE68BECE489EAE385E7E081E5DE7EE7E07FE7DF7D EEE181E6D97AF0E384ECDF7FF0E384E4D778EEE182F6E98AF4E789F4E787EDE081ECDF7FE9DC7D EEE182F4E787EEE181E8DB7DECDF82E4D77AEBDF82E7D980F6EB92E8DB82F3E48EF1E28DEFE18B EEE188EDDF86ECDF83ECDF80F5E887E9DE7CEDE27EF4E883EAE07FE9E084EEE48AEEE48AEBE187 E9DF86EAE088EFE58DEEE48DE3D882E5DA85EDE28DECE18DEDE38EE9DF8AE7DC87EEE48FECE28D E9DF8AF2E893F8EE99F4E994F1E792F7EC98EEE593EBE391EAE290EDE694F2E997F5EA99F6E998 F4E894F5E995F9EB96F6E792EEE28DF5EB96F8EE99FDF39EFFF6A1F9EF9AEFE590F1E792EEE48F EEE48FF2E893F6EC97F7EC9AF3E899EEE394F2E798FAEFA0FDF1A5FCEFA4FEF5ABF6EA9FF6EAA0 EDE198F8ECA2F3EA9FEFE69CEEE59AEDE499EDE499F3EA9EEEE599EFE699F3EA9EF6ED9FF3EA9C EDE495F9F0A3F4EB9EF4EB9EF8EFA1F6ED9FF0E799E4DB8EECE396EFE699EEE598F1E89BF6EC9C F8EC98EEE28FEADF89EFE58FF0E690EFE692F2EB99F1EA9AF1E99EF1E9A1F1E9A1F2ED9DF2ED94 F5EF97F0EB93E7DF88EAE28BF3E895F3E697F7E99CFEEEA7FFF0ABFEECAAFBEDACF9EBABECE09F E5DA98ECE3A1F3EDAAE9E5A1E0DE99D1D18BD1D28CBBBD77A4A960ACB66CA8B36E98A266757B4C 9496727E7E606361433C3A21211F095E5B34727042A5A6685B5F1C929167D2CEAD231F0CA0A15C EBEC9DCDCE82DDD89EE6E0A7DDD993E5E58CF3F3A9E3E2A2E6E5A4E5E29EE9E69FE0DF95EFEBA2 E8E49BE9E69DEFE9A2EBE5A0E2DB98D0C984D3CC87DBD591EEE7A3EFE8A5DFD897E6DF9DE9E0A1 E0D99AD6CF8FD7CF91DBD696E3E19ED6D594CFCE8DD6D594D1D090D9D69ACCCA8FB1AF74908E55 9A986097955BA19E5FB3B0727D7B4F1C1A031C1B07373629161601000100383B156D6E47151400 2A280E4045244B502F464A2B515536474929797A5A48472762603D66643E615D3558552A868558 ACB081A4A876B4B880AEB173CFD290C0C17BD4D38CBCB871D4CF88F4EDA7F7F0ACE6E19CE5E29B E9E69FEBE8A1E0DE94DCDA91E5E398E2E096BDBC6FC1BF73CAC87CC8C67CD3D1976A683E050400 69672AE7E7A4F7F8B3E1E29AE6E89EE7E99EE6E89EF2F4ACA1A15EB1AC6DFFFFC8FEF7BBE3DFA6 D6D298DDD9A0EBE3A9F0E8AEE6DFA2DCD595EBE4A2E8E2A1EFEAABE6E1A3EBE6A7D5D091DBD696 E5E0A0DAD595E4DFA0EFEAABF4EFB1F2EDAFEAE6A0EEEAA1EEEBA3EFEAA4F9F4B0F2EDACF4EFAF F8F1B2FBF4B6F8F1B2DFD998BFB977C8C57FDEDA95F1EEA8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF9F9F9BFBFBF7D7D7D4D4D4D767676C6C6C6C1C1C16061603A3B3A4A4A4AD1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7D8D8D8A1A1A1666766494949414141 373737353535464646525352656665969696C9C9C9EBEBEBDDDDDD9494944A4A4A353535CACACA FBFBFBFFFFFFFFFFFFECECECB3B3B3696969232323636363AAAAAA898989606060424242414141 4F504F565756737473C7C8C7ECECECFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFAF7F7F7CDCDCD7878783839384040409B9B9BF8F8F8FFFFFFFFFFFFFBFBFB DDDDDD9A9A9A4949492E2E2EA0A0A0DADADAFCFCFCFFFFFFFFFFFFFFFFFFF8F8F8D1D1D1646464 1111114949499C9C9CEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFFFCF6FEF6EFF9EFD3EFD3B7E6B7B5E3B4B8E3B7B9E4B8C4ECC3 DCFBDCEEFDEEF6FDF6E7FEE7D1F4D1BDE8BCB6E3B6B8E4B7B9E4B9C5E9C5E4F5E5EEF8F1F2F9F9 FBFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E5E4ADE9E7B9F9F7EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFF2FDF9DB FAEAC4F9E3C2FEF9F2FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8F6D7E3D68EC48D34A933 7FD07FE1FCE2F8FFF9FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFBFAEEECEE9CCB9B45AD446EB86DD4DCD4F4F3F4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4F4F48E8E8E2727271C1C1C696969D3D3D3FFFFFFF9F9F9D9D9D9AEAEAE767676585858444444 3535353636364343434E4E4E5B5B5B8C8C8CC2C2C2EEEEEEFFFFFFF9F9F9CFCFCF858585404040 474747DCDCDCFEFEFEF4F4F4BEBEBE717171313131505050A2A2A28A8A8A5D5D5D4040403F3F3F 4A4A4A5656567F7F7FC1C1C1F1F1F1FCFCFCFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDE1E1E16565652424242E2E2E818181EDEDEDFFFFFFFFFFFFFFFFFF DCDCDCA3A3A34444443737378A8A8ADADADAFAFAFAFFFFFFFFFFFFFFFFFFF8F8F8D7D7D76E6E6E 1E1E1E4B4B4B999999E9E9E9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFFFCF9FEF9F8FAF8F8FAF8F9FEF9FCFFFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF6F5F5DEEBEBBCEAEAB8FAFAEEFEFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFADCEEDCBCE2BC A9DEA9B5E5B6E2F5E0F2F8DBF4EBB4E2AF3AE9BF68FAEED7FFFFFFFFFFFFFFFFFFFEFFFEF9FFF9 F1FCF1E3F6E2BAEABAB7E3AED1E1B7E1DEB0E6DFA9F4EDD3FFFAFBFFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F9F18BCD8B 3EAD3E99D399F2F4F2DFE0DFEBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9DFF8DF93D693 45B04566C166D2F4D2F3FEF3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3CE6AD4CE70DFD487DFD487DCD27B DFD875E7DF8F887F43635A28D7D586DBDA7AD6CF7ACEC67EAEA568261E01635C24CEC984D5D47C D3CF6DCEC864DBD273E6D780E3D780E1D67ADED475DCD472DBD273D7CE74DED684BFB6696F681D C8C171DBD57DD9D478EAE490B9B260858025CFC969E3DD7BE0DA78EFE589F3E990EFE58CEDE289 F1E68BF1E88BFCF39BF7F098EDE68EF2EB92EBE48AEDE68CF2EB90EDE68BEAE388EBE588EFE98B F0E688F3E688EDE084F2E588EADD7FF3E689E7DA7EEBDE80F3E689F7EA8DF4E789E5D87BE6D979 E7DA7AEDE080EEE183E8DB7DE8DB7DECDF83E5D87BF5E88BE6D87FEEE087ECDF85F2E38FF2E38E F0E18CEEE087ECDE85ECDF83EDE082EBDF7EEADE7CEADE7AE9DD78E6DC7BE9E082EAE184EDE487 EFE689EDE489EBE288EEE48BF0E68DF1E78FF6EC95F0E68FEFE58FEEE48FE9DF8AEEE48FF6EC97 F0E691EDE38EF1E792F5EB96F6EC97F1E892EADF8CEEE695EBE393EBE392F0E897F5EC9AF7EC9A F8EC9AEFE38FEFE38FF7E895F3E491E5D985DED37FF4EA95F1E792F9EF9AF9EF9AE9DF8AEBE18C F0E691F4EA95F5EB96F4EA95F8ED9CF6EB9BE9DE8EEEE393F9EE9EF9EE9FF0E596FCF0A4F8ECA0 F5E99FF2E69CFFF3A9FAF1A6E7DE91EEE598FBF2A5EDE497E9E092F2E99AF2E99AF1E899F1E899 F2EA9AF6ED9DF9F0A3FBF2A5F9F0A3F4EB9EF4EB9EF6EDA0F1E89BECE396EDE497F3EA9DF6EDA0 F6EC9CF3E793F1E593F3E893E5DB86E9DF8AF5EB97EFE796F0EA9AF1E99DEFE79EEBE39BEEE69E EDE59CF1E79EF3EB9FECE396E7DE8FEFE397F2E69AF7EAA2FCEDA8FCECA9F8E7A4E2D788E6DF8C E9E08FEDE595F1EA9BEBE79ADBD98ECAC97FC7C980BDBF79BEC17B868B48989F61A0A86E959B68 8083585B5B341C1C000A0B001E1C00C0BE8F6B6933BEBD846F7132929552EBE9BE999574070300 BABA79F0F1A4D8D98CD0CC8AD1CD8FC9C680E1E18DF2F2AAD0CF8FCFCE8CEEEBA6E6E39BEEEDA2 F6F2A8EEE9A0EEE79FF6EFA9F6EFAAF0E9A5DFD892DAD38DD9D28CE6DF9BEFE8A4E9E29FE4DC9C EBE3A2EDE5A4ECE4A5EEE6A7EAE5A5E1DF9CEDECA9E8E7A5E5E4A3CCCB8AA6A565A5A3669C9A5D ADAB6ED6D497DDDCA0D5D38FE9E5A3F8F3C29B9674201D05C4C3AADDDEBD75784D303201656436 C9C69F74714E444720212500494B247274508384617272505C5C3A8583607F7D57424019646238 979765B2B976ABB26AB1B970A5AB61F2F6ABD1D288E3E39CD7D290E4DD9FECE3A9F0E7AFE9E2A6 E3DE9AE6E19DE9E4A0E7E39CEAE6A1ECE9A1F0ECA5DFDB94DCD88FD4D087C3BF79C5C087DBD7A0 454218413E00FCFBB8DFDF97D9D78DDDDC92EDEDA3E2DF98F1EFA9EBE9A4F2EEA7F0E9A3EEE7A3 F2EAA8F1E9AAF1E9AAFCF4B4EFE7A6F7F0ACF7F0ABFCF5AFF5EEA9F6F1B0F6F1B1F7F2B2EDE8A8 F3EEAEF7F2B2F4EFAFF7F2B2F4EFAFF1ECACF7F2B1E5E19BEAE69FF0ECA6F2EDABFAF5B5F7F2B3 FCF6BAFCF6BAFFF9BBF8F3B3D4CF8FA19C5AE8E4A4E9E5A5EDE9A9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF9F9F9E5E5E58F8F8F434343636363A9A9A9E0E0E0C4C4C45F605F3A3B3A4A4A4AD1D1D1 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEA4A4A46768674344434D4E4D 6E6E6E797979808080868686727272656665929292C7C7C7EAEAEADBDBDB8D8D8D3F3F3F282828 C6C6C6FBFBFBFFFFFFFFFFFFEBEBEBAFAFAF6060601212122F2F2F646464898989969696979797 9D9D9D9191915E5E5E4343437A7B7ABCBCBCF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD FAFAFAFAFAFAF0F0F0E1E1E1CACACA9797974F4F4F3131316C6C6CB8B8B8FAFAFAFFFFFFFFFFFF F8F8F8C2C2C26F6F6F3B3B3B404040C0C0C0EBEBEBF8F8F8F9F9F9F9F9F9F7F7F7F0F0F0CACACA 6161611515155D5D5DACACACEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFFFBEDFEEDDCF9DCC7EBC7C4ECC4CAF2CAD8F4D7E0F3E0E2F4E2 E8F7E8F3FEF3FBFFFBFEFFFEF8FFF8EEFBEEE4F5E4E0F3E0E1F4E1E0F3E0D8F0D8C5E9C6C6E7D1 D0E9E5EEF6F6FDFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFAF0E4E4ACE8E8B9F9F9ECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FCFBEAF0E9BFEBE2AFFBF9EEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F8F0C5E4C47BC57A 33A93189D088F2FDF1FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFDFEFEFAFFA8D6A746AF446AB769D2DCD2F4F3F4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F9F9F9E2E2E27C7C7C1C1C1C262626767676D7D7D7FFFFFFF0F0F0ACACAC676767454545525252 6C6C6C7878787F7F7F8484847B7B7B6C6C6C909090C0C0C0EEEEEEFFFFFFF9F9F9CCCCCC7D7D7D 3434343B3B3BDADADAFEFEFEF4F4F4BABABA6969692020201F1F1F5D5D5D7F7F7F959595969696 9191918383835757575050507F7F7FBCBCBCF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3F3CECECE5252521F1F1F3A3A3A8F8F8FEFEFEFFFFFFFFFFFFF FFFFFFC3C3C37373732F2F2F454545A7A7A7F1F1F1F6F6F6F9F9F9F9F9F9FAFAFAEFEFEFD0D0D0 6A6A6A202020555555A6A6A6ECECECFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFEFDFDFEFDFBFEFBF0FFF0E6F9E6E5EEE5E5ECE5E6FBE6F1FEF1FCFEFCFCFEFC FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAF2F2D7EAEAB9EFEFBFF7F7D5FEFEF8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDF4F9F4 DCEFDCBCE2BCACDEADB8E6B4CFE6ACE2DD95DBB74AE6C97CF7F1DDFDFFFFFCFEFDFCFEFCF7FEF7 E8FEE8CFF3CFBBEABBBEEFBED2F4CFEBF3DFF6EAD0F5DEB6FAE2CCFEEBEAFFFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FBF6 9FD79F55B8558FCE8FD2E4D2D8DDD8EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F9F1B1DCB1 7AC27A60B66093CF93EAFAEAFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD875DCD57AD5C97DD9CD81 EBE18AE1DA77EBE2929D945C4B4119C9C77ADAD87BD2CB75CBC37ABDB577292108544E15D1CD87 D8D67FD2CE6CCCC662D3CA6CD9C975E0D47CE3D87EDFD477DCD372DCD374DCD379DED584C9C074 7B732AD0C979DCD67FD9D479E4DD8DBFB9685F5904B8B157E6E082E0DA7BDED679F0E78BECE488 EDE287F5EA8EF2E98CF5ED93FFFBA2ECE58BE5DE84ECE58BF7F096EBE48AEEE78CF0E98EEFE88E EAE389EBE187F7EA8FF1E38AF3E58CE5D77CF1E38AF5E78EF0E388EADC83EFE188F3E68BEDDF86 E9DC7FEBDE7EF1E485EFE284E8DB7DECDF82E9DC80F2E589EFE287F7E990AEA047E5D77EECDD88 ECDD88EEDF89F0E289F1E38AF2E589EFE284E4D777EADE7CE8DC79E1D571E4DA78EEE587EBE284 EDE486F0E78AECE388EEE589F3E98FEDE389E9DF87ECE28AEEE48CF2E893F2E893EFE590EEE48F EDE38EEAE08BECE28DEFE590F2E893F1E792EFE58FEDE28FF2EA99EFE697EEE595F0E897F2E897 F1E695F4E896EFE390EEE28FF3E390F2E390ECE08CE5DA86EFE590EAE08BECE28DF6EC97F2E893 DBD17CE9DF8AF2E893F3E994F2E893F4EA95F3E895EEE393F0E595F4E999F5EA99EDE293F3E899 F8EE9FFCF1A4E4D88CF3E69BF1E79AEBE293EFE697F7EEA1F5EC9CEEE596F0E798F4EB9BF4EC9C F1E898F3EA9AF9F1A0F2E99AF3EA9CF3EA9DF4EB9DF6ED9FF8EFA1F3EA9CF7EEA0F8EFA2F5EC9E F0E799EEE596F5E799F6E99BF3E796ECE28EF1E793F2E895E8E08DE5DE8DE6DF90ECE498F4ECA2 EDE59FEADD9DEDE29EF5EBA5F6ECA4EDE497F4E99CF2E79BF1E69CF3E7A0F7EBA4FBF1A7F1EA94 F3ED93EBE690ECE693E6E392D2D084C9C77ED1D28ED0D1909395569293578487509296653A3F15 292B041B1D020F100020210168693CDEDEA8B4B4779C9C5CBCBD7A494C12F4F7AFD6D4A9393425 1B1600DBDAA4E8E99FDDDF8CCCC97ECAC882B5B26AB9B76BB5B36FC3C180D0CE8CE7E49FDAD78F ECEA9FF1EDA3F2EDA3F3ECA3EEE7A0EBE39EE9E19BE8E19BE3DC96DED790E6DF9AECE5A1E9E29E EDE6A4F1E9A8F4ECABF3EBACF0E8A8E6E2A1C0BE7BB8B673B6B472BAB877C0BE7DBDBB7AE6E5A3 E7E6A3E7E5A3E2E09ED4D290E7E39CD6D08BE5DFA7F3ECC3777252615E41E7E6C0FAFACCC8C996 53531F7E7B4EF4F0C5EFEFC17475454041132525002323044A4A2B56552D7C7B546D6C457A794F 99986E7A7E48959C50ACB564B0B867BCC171E6E99BE2E497E5E69EE6E19EEEE8ABECE3ACE5DBA7 E2DA9EE3DD9AF0E8A5F4EDA9EFEAA6ECE5A2E1D997EEE8A5FAF3B0F2EBA8E8E29FE6DF9DEBE4A7 F1ECB0EFEBACE5E09FECE8A3E4E198E0DC93E4E197E9E69CDDD891EBE6A1F6F2ABE8E197ECE59B F8F1A8ECE59EF5EEA9F4EDA8E9E29DF3ECA7EFE8A1E9E299FCF6ABF4EFA8E7E2A1F7F2B2FDF8B8 F9F4B4F5F0B0F5F0B0F8F3B3F9F4B4F6F1B1F3EEAEF6F1B1F4EFACFAF5B2FCF7B6F6F1B1F8F2B5 F8F2B6FCF6BBF7F1B4F2ECAEF1ECACEEE9A6E7E2A0F7F3B4F2EDB2F1EDB1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEEBEBEBB1B1B16262622F2F2F8A8A8AD9D9D9EFEFEFBABABA5354533334334A4A4A D1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E56F706F3F403F464646 797979B3B3B3CACACAD3D3D3D1D1D1B0B0B0939493B0B0B0D8D8D8EFEFEFDADADA8F8F8F414141 2B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0636363141414242424575757A7A7A7D5D5D5 E9E9E9F3F3F3D4D4D47878782E2E2E373837909090F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFBFBFB E2E2E2C8C8C8B9B9B9A9A9A99797977C7C7C5959593F3E3F4F4F4FA7A7A7DADADAFCFCFCFFFFFF FFFFFFF6F6F6A8A9A84344432627263A3A3A999999B2B2B2B3B3B3B2B2B2B2B2B2B1B1B1ACACAC 9191914747471818186D6D6DB8B8B8F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFFFCEFFEEECFF6CCB5EDB2B9E7B7CDF0CDE5FDE5F8FFF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F9F0C4E8C5 B4DFC1B5DDCCDCEBE6F6F7F6FEFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCFAE9ECE3B1EFE8BFFAF8EDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAF2E9EABDE1E2A6F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF8ECB7E4B6 6CC56B30A92E8FD08EFCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0DFAF48B24662B761C6DCC5EEF3EEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEECECECB7B7B75A5A5A1313134848489A9A9AE3E3E3FFFFFFE8E8E88383832F2F2F3E3E3E 737373AEAEAECACACAD1D1D1D0D0D0BDBDBDA2A2A2B4B4B4D2D2D2F3F3F3FFFFFFF9F9F9CCCCCC 7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6B6B6B222222161616505050989898D7D7D7 E8E8E8E3E3E3C8C8C87575753F3F3F464646848484EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDCA2A2A23434342222225D5D5DB1B1B1F3F3F3FFFFFF FFFFFFFFFFFFADADAD4545451818183A3A3A868686B9B9B9B2B2B2B2B2B2B2B2B2B3B3B3ACACAC 9696964B4B4B1E1E1E5D5D5DB0B0B0EFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFDFAE5F6E5DEF4DEDCF4DCD5F5D5CFEFCFCEE2CECEE0CECFF1CFD6F4D6DDF4DD DDF4DDE8F8E8FAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0EBEBBCE2E2A2F3F3C9FFFFF1 FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6FAF6DAEDDAC0E5C2B3E3AEB9D98DC3CC6CC3BB57CDCD85DAEAC8DEF6E2DEF4DEDDF4DD DAF4DAD0F4D0BFEDBFB6E8B6D4F7D4EDFFEEFCFFFAFFF6EDFFE6D0F9DFC7F6E1CFFDF8F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7FCF7B5E3B573C87386C986ADD2ADD1D9D1EAEBEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFBE2F6E2 7CC27C61B56185C785C3E4C3F7FBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D073D2CB71D2C67D D4C77FDAD07BD9D26FE2D88BB0A7713C3208B9B76FCFCD72CAC26DCDC57BCCC48731290E4A4409 D0CC85D6D57DD4D06ED7D06EDDD477DFD07CDED17CDED379DBD174D8CF6FDAD172E0D77ED8CF7E D8CF84857D33CFC878DDD781D8D279D4CF7ED4CD80564F09968F3CE5DF88E1DA7ED7D175E8E182 ECE385EBE286EDE286E8DF84F4EC92F1EA8FE5DE83EEE78CEDE68CEFE88EE6DF85E3DC83E5DF86 EDE58EF0E891EEE38BF0E38AEDDE88F5E68FE6D87FF3E58EF7E891EDDF87E7D982EFE08AF1E38B ECDD87EEE183EEE181F3E688F2E587EDE082F0E387EDE084F1E489F4E58DD6C86FCBBD64EFE188 EBDC87ECDD87EDDF87EEE088EEE088F0E387F5E88BECDF81F2E584EEE280E7DB79EAE07FEBE182 EAE182EDE485F2E989F2E98CEEE588E9E084EBE288EAE086E5DB82E8DE85EFE58FF3E994F4EA95 ECE28DE1D781E4DA85E9DF8AEDE38EEFE590EBE18CEDE38EF6EB98F3EB9BF2E99AF1E89AF3EB9A F4EB9AF3E899EEE290F2E694F0E492EEDF8CF3E491F7EB97E5DA85EBE18CF3E994EEE48FF0E691 F7EE98E2D883EDE38EF1E792EFE590F0E691F0E691F3E994F9EF9BF8ED9AF4E897F5EA98FCF1A1 F5EA9AEFE494F2E798D4C97AEDE193EAE191F8F09EF2EA98E9E090F4EC9AEEE695EBE393F1E998 F6EE9DF5ED9CF3EB9AF4EC9BF8EFA0F2E99AF2E999F5EC9DF6ED9EF4EB9CF8EF9FFAF1A2F2E99A E9E091ECE394F3E99BF9EB9FF8EA9EECE091F2E797F0E595E8DE8CEDE592EEE796F0E999F2EB9D F3EBA0F4E9A1F2E5A0F0E39DF2E89EF5EC9EEDE595EFE695F2EA9AF4ED9DF2EC9EF0E99BEEE89B EFE99AF7F1A3F1EDA1EEE9A3E5E29FC8C688C6C489D6D5A08D8C5A413F133E3E142E2F1021220A 18180014150058582D636331ADAE73F9FABED7D7977A7B36F9FBB24A4D09B1B566F2F6AC838258 130D01120B00B6B386E4E59EE0E38CDBDA85D8D688B8B56EA4A15EAAA665D0CD8BDDDA96E7E49E E5E399D7D388E2DF92ECE89DF2ECA2E9E29AE5DD97E9E099E0D992E9E39BEDE69EF3ECA6F3ECA6 EDE6A0EDE6A2ECE5A2EFE7A6EFE7A6E9E1A0E0DA98C9C683C9C683E3E09EE4E19DE7E4A0E9E6A0 EDEAA4E5E29BEDEBA2EEECA3E2E097E9E397E5DD93E1D89AE3DBAAD9D3AA272405A6A379F0EFBD E4E2ACE6E4AC534E1988834EFEFCC3F0EEB59998615755229C9A6D4E4C261E1C00252607292A08 56572B76764C8082509BA15EB7BD76AFB36B8F9249DCDF94EDEFA5E3E298EDE9A2F4EFABFBF6B4 F3EBABEFE6A4F6EDA9F6EDA9F3EAA6F6EDA9FAF1AFF9F0AEF0E7A5EFE7A6F2E9A8F8EFAFEAE1A2 E2D998F3EDA8F7F1AEEAE29BF6EFA7F1EBA1EBE49AF2ECA3E9E29AEEE5A2FBF3B0F1EAA3EEE89A EEE998EBE598EBE59AFAF3AAEBE59CF2EBA3EFE99FEAE498ECE798F8F3A3E8E399EBE6A5F2EDAD F6F1B1F7F2B2F9F4B4F9F4B4F8F3B3F7F2B2F6F1B1F3EEAEEDE8A8F1ECACF7F1B2F9F3B5F8F2B5 FAF4B9FFF9BEEDE7AEF4EEB2F8F3B5F6F1B0F7F2AEFFFAB8F4F0B2F4EFB4F8F3B9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9CDCDCD5757574545455F605FBCBCBCF6F6F6F7F7F7ADADAD3D3D3D282828 4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E04E4E4E373837 6F6F6FB7B7B7E7E7E7F4F4F4F6F6F6F6F6F6F1F1F1ECECECF1F1F1F9F9F9F9F9F9D9D9D98F8F8F 4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0626262181818535353AAAAAAE0E0E0 F5F5F5FBFBFBFFFFFFE5E5E59192913F403F171717777777EBEBEBFFFFFFFFFFFFFFFFFFFFFFFF F4F4F4AFAFAF6465643737372626262121211818182828285D5D5D9E9E9EDFDFDFF6F6F6FFFFFF FFFFFFFFFFFFF3F3F39292921B1B1B0606060E0E0E212121262626262626262626262626262626 2424241D1D1D0F0F0F1717176F6F6FB9B9B9F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF3FFF3D4F9D3A3E79C8FDD86DCF3DAF5FCF5FBFFFBFDFFFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFC F4FBF4CFECD1B0DEB4C9DDCAE5E8E5F7F8F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEEEFEF9D9FCE4BCFCE9CDFEF9F1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAF1EAEABDE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF8ED B9E3B86FC46E33AA3190D08FFBFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0DEAF45B24451B750ACDCABE1F3E1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8CFCFCF6D6D6D313131202020898989D4D4D4F6F6F6FFFFFFE4E4E46F6F6F1E1E1E 696969ADADADE4E4E4F5F5F5F5F5F5F6F6F6F3F3F3EEEEEEF1F1F1F7F7F7FDFDFDFFFFFFF9F9F9 CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A2626263D3D3DA0A0A0D6D6D6 F8F8F8FAFAFAFAFAFAECECECA4A4A45656562C2C2C585858E3E3E3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8B0B0B05A5A5A1919193E3E3E9F9F9FE6E6E6FBFBFB FFFFFFFFFFFFFFFFFF9C9C9C2424240202020E0E0E1D1D1D272727262626262626262626272727 2424241E1E1E0B0B0B161616606060B2B2B2EFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFBFEFBECF9ECB7E7B7A4E1A4A4E1A4B1E1B1BCE0BCBDDEBDBDDDBDBCE0BCB0E1B0 A4E1A4A0E0A0BFEABFEAF8EAFFFFFFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FCFCDEEBEBB4E4E4ABF3F3D8 FFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFEFDF9FCF9F6FBF7EDF7E7C4D78A9FBA3B9EB75CA0C67FA2DA9BA3E2A5A3E1A3 A4E1A4A9E1A9BAE1BAD6EDD6F0FAF0F8FEF8FCFFFCFEFFFEFFFEFEFCF8EDEEE8C2E6E1ADF9F7EA FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9FDF9CAEDCA8ED58E7CC57C89C189CAD6CAEAEBEAFDFCFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDEDFDED C6F1C649B3494FB74FA8E3A8EAFDEAFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D176D0C873 D6C983D5C981D7CC7ADBD471DED588C1B78440350DBAB771D3D078D5CE78D2CA81D4CB8C3A3211 413B02CAC57FD9D782D5D071D8D270DCD378DDCD7BDCCF7AE0D57BE4D97CE1D879DFD679E1D77F DDD484E5DC917D752CC3BC6DE6E18BE0DA80E7E093CEC87E4C460991893DF1EA99DBD57EE8E286 E9E382F0EA88F2E88AEBE287ECE288EFE88CE3DD7FE5DF81F0E98EE6DF84E9E288ECE58DE5DD88 E7DF8AEFE793F1E996F0E592F1E28DECDD8AF8E995E8D984F1E28EF3E491EBDC87EADB87F2E390 F1E28DEEDF8BF0E388ECDF80EEE183F2E589EDE084EDE184EDDF86EADC83EFE188CFC169EEE088 EDDF86EFE08BEFE18AF1E38BF2E48CF4E68DF4E78BF6E98CF6E98BF6E98BF2E586F1E484F0E685 E9E07FECE482EEE685F0E788F4EB8CF3EA8CE9E083ECE386F3EA8EECE388E5DC81E9DF88EADF8D EEE391EDE290E4D987E7DC8AEADF8DEBE08EEDE290EFE492F2E795F3E795F2E99AF1E89AF0E798 F0E798EFE596ECE191F2E596F0E493EDE18FEEDF8EF3E392F4E896E5DA88F0E593F2E795EFE392 EBE08EE9DE8CEEE391F2E795EFE492EDE290F2E795F4EA95F2E892F5EB93F3E993F0E691EEE48F EFE592F5EA98E9DE8CEBE08FE7DC8CFBF0A0EEE691F8F09BF6EE99EEE693F1E995F1E996ECE491 EEE693F2EA97F6EE9BF5ED9AF1E998F5EC9DF4EB9CF2E99AEFE697F2E99AF5EC9DF3EA9BF0E798 EBE293E8DF90EDE495F2E89CF4E69EF3E59CF1E498F3E898EFE494EFE594F2EA97F3EC9BF2EB9B EFE898ECE496F5EB9BF9ED9BEFE591EAE28DF0E893EDE78FE6E08AEBE791F1ED9CF0ED9EEEEB9D EEEAA1EEE8B0FAF2C3EBE5B6D3CC9FB6AE868B866145401D3835151A1600221E062C280F171301 242109615F38B6B585B9B781A8A86AFEFEC0EAECA374762BBBBD7296984F5D5D17E7EA9FA2A65E 2A28001E1804150E0084805DF2F1B1E9EC95EDED90DCDB87C4C279BEBA7DD1CD8DE0DD9AE2DF9B DBD78EE9E59BDAD78AE6DF93E5DE91E4DC91E0D88FDBD38AD7CF87D6CE85E8E097F2EAA1F3EBA3 ECE49CE3DB93F8EEAAF2E9A4F5ECA9F8EFACF2E9A6EAE3A0E9E4A2E5DF9BF2EDA9FAF5AFF9F5AD FBF8AFE4E096DFDB91E7E397E9E698EBE79AF1E99AFEF5A8E8DF9AE9E2A6D0CA96938E5D2B2700 E8E5B1D9D49DE5E0A6E6E4AB433C08B4AF6EDEDA98FFFFC49E9960A9A671FFFDCBA1A0708C8C5F 75764922230124270235350A636238ABAA7DD2D09FABAA73D2D093EDECAADCD991ECE99CE1DE8E F1EF9CF1EC97EBE595F9EFA6FEF4ACF8EEA7F6ECA5EFE5A0F4EAA5ECE29CF8EDABFCF1AFFDF2B0 E1D794F3E9A2E9E198F3EAA2F5EBA3E7DF95F3EB9FEEE49CF8EFA7F1E8A0F8EDABF8EEACF2E9A2 DFDA88EBE693E9E593ECE698EEE89CF2ECA0E6E095ECE69AF7F1A2DDD886E7E290FBF6ABFCF8B7 F5F0B0F3EEAEEBE6A6ECE7A7F3EEAEF5F0B0F7F2B2F0EBABE9E4A4E8E3A4EAE4A7EBE5A9F2ECB1 FAF4BAFAF3BCF7F0BAEEE8AEF6F0B4FEF8BAFAF5B3F3EEA9F0EBA7FCF8B8FBF7B9FBF7BAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8F8D9D9D99B9B9B3030305051509A9B9ADEDEDEFEFEFEF9F9F9B4B5B44B4C4B 3030304A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3656665 3F3F3F5656568E8E8EC6C6C6E1E1E1F2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBD9D9D9 8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0616161191919656565C9C9C9 F1F1F1FEFEFEFFFFFFFFFFFFEEEEEEA7A8A7575857131313696969DCDCDCFDFDFDFEFEFEFFFFFF FFFFFFF7F7F7C6C6C6909090696A695D5D5D5858584141413233324242426D6D6DB9B9B9E3E3E3 FDFDFDFFFFFFFCFCFCE5E5E58282821616161919193738375353535B5B5B5C5C5C5C5C5C5C5C5C 5A5A5A4B4B4B2C2D2C1515151D1D1D8A8A8ACECECEF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFCE4F7E4C1EEC0B7EAB3C2ECBCF1FBF0FEFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEE1F7E0C2ECC2BBDFBBCBE6CBE4F7E3F6FFF6FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF6E3FFEDC9FFECC7FFF3DBFFFCF6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAF1EAEABEE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EEF4EEC0D7C080BB804EB24D9FD69EFBFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0DEAF45B2444EB74CA6DCA5DEF3DE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3F3CACACA8C8C8C3A3A3A3F3F3F696969BFBFBFEEEEEEFDFDFDFFFFFFE7E7E77E7E7E 2B2B2B4F4F4F878787C0C0C0E0E0E0EFEFEFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A2727274C4C4CBEBEBE EAEAEAFFFFFFFFFFFFFFFFFFF5F5F5B9B9B96767672A2A2A484848D4D4D4F7F7F7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEDEDEDBEBEBE727272323232424242818181CDCDCDFAFAFA FEFEFEFFFFFFFCFCFCF4F4F48E8E8E1E1E1E1919193D3D3D5252525D5D5D5C5C5C5C5C5C5C5C5C 5D5D5D4A4A4A2C2C2C0C0C0C1C1C1C767676CCCCCCF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEF9FFF9EBFDEBD8F5D8C8EDC8C9EDC9C8EDC8CAEDCAD2EDD2D9EDD9DAEDDADAEDDADAEDDA D2EDD2C9EDC9C8EDC8C8EDC8CAEECAD8F5D8EDFEEDF9FFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8E5F0F0C2ECECBCF0F0D2 F9F9EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1D9CE81BAAD2DC4CD8CC8E1BAC8EBC7C8EEC9 C8EDC8C9EDC9CDEDCDD8EDD8ECF6ECFDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFDFBF5F5EACAF0DEAD FCE9CFFFF4E9FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFDFBD8F0D89DD89D6CC46C66BD66C2D5C2EAEBEAFDFCFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFBEDEFED C9E4C99AD59A52B25270C070C8ECC8FBFFFBFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D27A DCD480DCD08ADBCE87E5DA87D8D16EDBD287C2B8853B310AB3AF6CD7D57ED2CB74CEC67BD4CC8C 4C44173E3806C9C57ED6D47FD5D071D7D171DDD479E5D584DDD07CDED37AE6DB80E2D87ADAD174 DACF78DFD688E3DA8F6F6723AFA859E2DC86DFD981E6E191D2CD84645E18837B35E5DE94EFE996 EFE98DE8E280F1EC88F4EC8DEFE68DF6ED95EEE88BEEE88BF0EA8DEBE48AE4DD84EEE78EEEE68F F1E995F0E894ECE492EEE595F1E593F6E895F4E592F5E693E9DA87ECDD8AF1E28FEFE08DEEDF8C F2E390EFE08DF3E490F3E58BE9DC7FE7DA7DF1E488F1E488E8DB80EDDF86EEE087E9DB82EEE088 E8DA83E5D680EADC86EADC85F0E28AF1E38BF5E78EF4E68DF1E489F5E98DF1E487F2E587F8EB8E F5EB8AEFE685EDE584EEE685F3EA8BF1E88AF4EB8EF4EB8FF0E78BEBE287E7DE84E6DC82ECE28D E9DE8DEADF8EEFE493F3E897ECE190ECE18FEADF8EEDE291F2E795F1E695F0E595F5EC9DF3EA9D F2E99BEEE596E5DB8CE2D788F4E798F1E494EFE292F0E190F3E393F3E795F5E999F6EB9AEFE493 F3E896F0E593E5DA89EDE290F2E796F1E695ECE190F5EA99F8ED9AF1E790EBE18AECE28CECE28D E8DE89E5DA87F3E896F0E593EEE393F4E999F1E695EEE691EBE48BECE48EEFE891EEE690EFE791 EBE390EDE592EFE795F3EB98F4EC9AF1E998ECE493EEE596F0E898EDE595EEE696F5EC9DECE394 EEE595F5EC9DF2EA9AECE393EDE396EFE09BEDDF98F5E89EF6EB9DF3E898F5EB9AF5ED9AF6EF9F EBE494F5EE9EEFE89AF4EA9AF2E996F3EA97EAE28FEEE795EFE899F4EFA1F4F0A8F6F3AFFBF6B7 FBF8BDF5F2BFDBD2AFB7AC9271674B443A212E26080D0600130E000C06003631164C472D5B563B 868261B1AD81C3C18EDCDAA2939251F0F1A9E0E294C3C6786F7125F2F2AA484814A2A063FFFFC1 585A1D3B39114C4730090200625D3DECEAB0DBDD8AF3F395DADB82D0CE85E4E0A7E5E1A2E4E19B E5E29BD6D289E3E093ECE899E8E293E4DD8ED9D285E4DB90E8E097DED58DDDD58CE6DE94F3EBA1 EFE79EE4DC94E2DA92F2E9A3EFE6A0EEE59FF3EAA6EEE5A1E4DB97EBE49FECE4A0EBE59EF0EAA2 EEE79FF0EAA0E3DF92F3ECA0F0EA9CE6E292F3EC9DF3EB9AECE091F3EBA1E6DF9CF5EFB3D9D49C 2C28057F7B43F7F2B9E7E1A3FBF4B3C4BC76454000D5CF88EEEAA5E6E2A37D783ED4D19ADDDCAA ACAB79D8DAA7AEB07DB2B58186875B3F39242F2A0A5853369E9B70ACA775EDE9B0EEEAA9EEEAA3 D8D586E6E48FE4E189E8E390F6ED9FF4EB9FF2E99DFDF8ADFCF3A9ECE299EAE097F4EAA1EDE39B F3EAA2F3E9A1E8DF93E9E092E7DE91F7EEA2F2E99EECE398EEE49CF7EDA6F6ECA7F6ECA7E9DE9C EBE29BF4EF9EE7E290E1DC8AF0EA9CE8E295F4EEA2F3EDA1EAE496F6F2A0E2DD8BE6E18CFBF6A9 F9F4B3F3EEAEF7F2B2F1ECACEBE6A6F2EDADF5F0B0F8F3B3F8F3B3EBE6A6EFE9AAF2ECAFEDE7AC F2ECB2FBF4BCF4EDB5E7E0A7F1EBB1F5EFB3F6F0B1FBF8B6F6F1ACF7F3ABF8F5AEF6F3AEF7F3B0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEAEAEAADADAD6565652626266F6F6FD2D2D2F6F6F6FFFFFFF9F9F9BEBFBE 5E5F5E383838464646D0D0D0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB 9192915656563B3B3B545454898989ADADADC9C9C9DADADAE3E3E3EBEBEBF7F7F7FFFFFFFBFBFB D9D9D98F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611A1A1A6F6F6F DBDBDBF8F8F8FEFEFEFFFFFFFFFFFFF1F1F1B7B7B76D6D6D181818626262CECECEF6F6F6FEFEFE FFFFFFFFFFFFFCFCFCEBEBEBD6D6D6C1C1C1BBBBBBB4B4B49192915C5D5C2E2E2E2C2C2C787878 BFBFBFF7F7F7FFFFFFF5F5F5D5D5D57474741B1B1B3A3B3A757575AAAAAAB8B8B8BABABAB9B9B9 BABABAB6B6B6949594535453262726272727A9A9A9E6E6E6FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEFCFFFCF9FEF9F2FAF1D3EFD2B9E6B8D9F2D9FCFEFCFEFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0FFEFDBFBDABDE9BDBBE8BACEF4CEE7FDE7FBFFFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFDEDD8FBE2BAFEF4D1FFFEE8FFFFFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFAF2ECE9C3E6E1ADFAF5EAFFFCFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEEEFEEC0CBC08AB38969BB67AFDDAEFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2DFB24BB44A4FB84CA1DB9F DBF2DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFAFAFAD7D7D7909090494949232323636363B9B9B9EAEAEAFCFCFCFFFFFFFFFFFFEDEDED 9C9C9C4E4E4E373737555555848484ABABABC5C5C5D8D8D8E4E4E4ECECECF7F7F7FFFFFFFFFFFF FFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A282828565656 D0D0D0F4F4F4FFFFFFFFFFFFFFFFFFF6F6F6C4C4C47474742F2F2F424242C6C6C6EFEFEFFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0F0CBCBCB7878783F3F3F2A2A2A7E7E7EC7C7C7F0F0F0 FFFFFFFFFFFFFFFFFFF8F8F8E3E3E38181812020203A3A3A7C7C7CA6A6A6BCBCBCB9B9B9B9B9B9 B9B9B9BDBDBD9292925353531A1A1A2828288F8F8FEBEBEBFAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEFAFFFAE7FCE7C7F5C7B0EAB0AEE6AEE8F8E8FAFDFAFCFEFCFCFEFCFDFEFDFDFEFDFDFEFD FDFEFDFCFEFCFCFEFCFEFFFEDFF4DFB6E7B6B5EBB5D5F9D5ECFEECFCFFFCFEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2D7E3E3AAECECC6 FCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF9F5E5E9C678DEA830F3E3BDFBFBF6FCFEFD FBFEFCFBFEFBFCFEFCFCFEFCFDFEFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8FEECD8 FDDFBBFBDCB5FCEAD3FFFBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFDFCE6F2E6ADDBAD5FC35F47B947BCD4BCE9EBE9FDFCFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8EFF0EF DDE2DDA1CAA16AB76A6BB86B9FD19FE3F2E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DBD47EE0D885E3D690DCCF86DFD67FDCD573DBD285C7BC89413610A6A261DEDC86D6D076D4CD7F D7CF8F5E561F221C02B7B36ADDDB86DED97AD8D173D9CF76DFCF7FDACD7BDCD178E0D57ADBD275 D8CF72DED47DD7CE80D7CD856D6527999246D8D17EDCD880D9D483CFCB836F6A266C6424D8D08C E5DE8FE6E185E8E481F2ED89F2EC8FEDE593F1E898EBE48AECE58AEEE78DE8E187E6DF87EBE48D F1E994F4EC99ECE492E5DD8DEBE292F0E592F3E491F6E794EEDF8CF1E28FF5E693F2E390EFE08D F3E491F4E592ECDD8AEEDF8CF9EB93F0E387E6D97DE9DC80ECDF83E7D980EBDD84EDDF86E3D57D DFD279EBDD86F1E28DEDDF87E8DA82EDDF87ECDE86F4E68DF0E289F1E38AF4E68DF0E387F1E388 F6E88FF4E98DF2E88AE7DE7FEAE182F6ED8FECE386EAE186EAE286EAE186DFD57CE3D980F0E68D F7ED99ECE191EEE393EEE393F1E696EFE494EDE292EDE292F2E797F2E797EEE393F8ED9DE7DE91 E5DC8EEEE598F3EA9DEBE193E9DE8FEEE192F6E99AF8EB9CF5E694F5E594F5EA97F1E596EDE292 F2E797EFE494E6DB8BE4D989EBE090F7EC9CFDF2A2F1E696F3E898F4E996F6EC95F5EB93F3E993 F1E792F0E691EFE591ECE18FECE18FF3E897F6EB9BEFE493F1E992F5EE94F5EE96F0E991F0E991 F7EF9AEFE794EEE694EFE796F0E897F3EA9BF6ED9EF7EF9EEDE594EFE796F3EB9AF0E897F3EB9A F6EE9DF2EA99F8F09FF4EC9BE9E18FEAE093F4E6A0EEE099F1E399F9EE9FF1E696D3CA79D0C877 FCF5A4EBE494F1EA9BEEE799F5EDA5EFE6A0F1E8A3FEF9B7FFFFC0FCF4B8F7F1B8EAE3B2C5BE94 958F6B696344433C21271C101E13082C2209271E041B130035300E5B532E777147AFAB7FD0CC9D F1F0C4F4F1BD9C975DD5D091918F49D4D287E4E494D7D888818234C7C780BFBE7D58561EFFFBCA D9D9A32F2F08747347A8A484120B02312C15CDCA97EEEEA3EDED91E2E38AD4D287E1DDA2ECE7A7 E5E19AE5E198EEEB9EECE899E2DE8CE6DF8FF2EB9BE3DC8CBAB164D5CC82EFE69CE3DB90E7DF94 EEE69CECE499E3DB92E4DC93E5DD95EDE59DEDE59DF8EFA9F7EEA9E5DC97D6CD88E8DF9AF1E9A2 EFE79FF1E9A0EAE399E2DA8FF2EB9EF6EFA1EEE897F0E998EDE393EFE495E8DF93EDE59DE7E2A1 FFFABE7D7641393312ECE9AFEDE7AAF5EDA8FCF5AC958F45928A43FEFCBAEFEAAAB4AF717D7940 F6F2BBA9A670BAB982CCCC94D6D79FCBCB99DBD6B1D1C9A77F7A562F270927200668622FB7B279 EAE4A8E8E3A2F6F1ACE4DF97EFE79DFAF1A4F1E89BE9DF92E9E295F3EA9DFAF1A4E6DD90E5DC90 F3EA9DEFE699F3EA9CF4EB9BF3EB9AE8DF90FCF3A6F7EEA4F3E9A2EAE099F4EAA5F1E8A2F6ECA7 EFE5A1F4ECA5EFE897F0EB98E0DB89F7F2A5F9F3A7E6E094F3EDA2F5EFA2F1EC9DEEE997EEE997 F3EDA1FAF5B4F7F2B2FAF5B5FDF8B8F7F2B2F4EFAFF6F1B1F0EBABEDE8A8F6F1B1F9F4B4FAF4B6 FAF4B6F8F2B7F8F2B6F1EBB0E9E3A8EFE9AEEBE6A7FAF5B4EAE6A2FDF9B2F6F2A9FAF8ABFAF8AD FEFCB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF8F8F8CBCBCB6E6E6E333333636363AFAEAFF6F6F6FFFFFFFFFFFFFFFFFF C5C7C56162612D2E2D363636D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F5F5CCCDCC9091905556553B3C3B3B3B3B3939393A3A3A434343636463919291D9DAD9FFFFFF FEFEFED8D8D88F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611A1A1A 7C7C7CEEEEEEFEFEFEFFFFFFFFFFFFFFFFFFF2F2F2B9B9B96F6F6F181818616161CDCDCDF6F6F6 FEFEFEFFFFFFFFFFFFFEFEFEFAFAFAF4F4F4EEEEEEECECECEAEAEAE1E1E1B5B6B5696A692F2F2F 323232878787E3E3E3FCFCFCEEEEEEC4C4C46464642121215E5F5EB0B0B0DEDEDEEBEBEBECECEC ECECECEEEEEEE7E7E7ACACAC444444242424393939C0C0C0F5F5F5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFFFCEEFFEED9F7D9C5EBC5BFEABFCEF4CEEAFBEAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFFFAF3FEF4EBF9EBD5F0D5BFEAC0D0EFD0F9FDF9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF2ECCCE9E0AAF8F5DCFEFEF6 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF8F9E8DCF7DBCBFDE3E1FFF0F1FFFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE1EFE19ACA9A66B7626AC761B3E4AEFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1E4C067BE6653BC4C 88D77FCEF0CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDD2D2D28A8A8A4545452828285C5C5CA5A5A5E8E8E8FBFBFBFFFFFFFFFFFFFFFFFF F7F7F7CFCFCF9C9C9C6464644A4A4A3D3D3D3838383A3A3A444444616161989898D3D3D3FFFFFF FFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB696969292929 606060E2E2E2FDFDFDFFFFFFFFFFFFFFFFFFF7F7F7C4C4C47575752F2F2F414141C4C4C4EFEFEF FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4BDBDBD7878782E2E2E3C3C3C6D6D6DBDBDBDEDEDED FCFCFCFFFFFFFFFFFFFEFEFEF4F4F4CFCFCF737373212121555555AAAAAAD8D8D8EFEFEFECECEC ECECECECECECF3F3F3AEAEAE4F4F4F171717383838A4A4A4FEFEFEFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFFFBE8FEE8ADEBAD6CD46C97E497D5FAD5F7FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FCF6E2F6E2C1ECC1B0E9B0CDF5CDEFFFEFFBFFFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F2D6E1E2A7 ECEDC7FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F8E8E7E5B4E0C76FE1B751F7EACBFFFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FFF9F2FAF0DBEADFA9F0EAC6FCFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFDFCCDE9CD60BE6031A731B9D2B9EAEBEAFDFCFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6DBDBDB CED4CED8EED87EC87E34A73484CF84CBEECBF3FCF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCD57FD7CF7CD8CB85DACF83E8DE84DAD36FDDD487D0C6933D32128C884ADFDD87D7D177 D2CB7CD3CB89787036292301B1AD65DFDE88DDD87BD9D375DDD47CDECD80DBCE7CDCD078D7CC71 D2C96CD7CE73E1D681D8CE81DCD28A7A722E8B8339E0D987E4E088D8D481E0DD927D7937605A1C D9D393DFD98DE3DD83EEEA86F1ED89F4EC94F7EEA2F5ECA2EFE892EFE88EF1EA92EDE68EEBE38E F1E994F2EA95E9E18EE5DD8AE6DE8AE3DB88E6DA87E9DA87ECDD8AEEDF8CEBDC89F2E390F8E996 F6E793F3E491F0E18EEADB87EBDC89EADB83ECDF83EDE084EADC83EBDD84F1E38ADDCF77EDDE88 EFE08BE6D782E8D984F0E18CEEE088E7D981EBDD85EADC84F5E78FF1E38BEDDF87F2E48CEEE088 EFE189F2E48CF0E58BF6EC90EDE487ECE387F3EA90EEE58BF1E78EEFE58DEAE088E3D982E8DE87 ECE28BF1E694E7DC8CF2E797EFE494E5DA8AF0E595ECE191ECE191F0E595EFE494EDE292F5E99A ECE396E2D98EE7DE93F4EB9EEFE599E4D98BEBDE90F3E697F8EB9CF7E799F5E597F4E798F2E596 FAEF9FFCF1A1EFE494E9DE8EEFE494EBE090EEE393F3E898EEE393F0E595EFE491F4EA95F8EE99 F3E996EFE492F3E896F9EE9EF4E999F1E696F7EC9DFAEFA0F5E99BEAE28CF0E990F7F098F4EC97 F0E894F3EB99ECE493E8DF8FEFE697F1E89AECE396F1E89CF5EC9DEDE594F1E998F7EF9EF5ED9C F2EA99F4EC9BF0E897EDE594F8F09FF9F1A0F1E799F5E79FF4E69FF3E69CF7EB9DF2E797EDE393 F1E898FCF7A7F2EB9DEFE79CEDE59DE9E0A8FDF4C8F6F3C7CFC69B8B825E685F3E372E1230260E 1C0F000500000C02011E130B3B321240370F655D326A62317A723ECBC68CD3CE8EEAE5A0F7F4AA F1EFA2F1EE9E868235BEBA70CFC97FABA85AEBE899EBE899D8D688868339FFFFC48F8B57959263 FFFDCEAFAB810E0B03747345FFFCD45A5630060100807B50FFFFC6DCDB88E7E790DCDB8CDEDA9A D2CE8AE5E198F5EEA5EEE89CEAE394F1EA99F7F09FE6DE8DE8DF90B5AC5DD2C97BE5DC8FEBE295 F2E99CEBE295E9E093EDE498E7DE93EEE49AF1E79FEEE49CF3E8A1ECE29BDDD38CD7CD86E8DE97 F1E79FF0E59DF2E8A0ECE399E7DE93F0E79CF4EB9EF0E79AF0E799EEE397E5D98EF1E99CEAE298 DDD993F5F0B3C1BE870B0700BCB680EFE9ACEAE59FFAF7AAEFE7A0736D2ADDD795EDE8A8EEE8AB 837E44DBD69EF0EAB0B9B77BE9E8AAECECADE6E4A5E1DD9DDED99BF2EDB4E9E3AC9D9561413910 2C240340370C756C44D2C99EE7DFB3EEE5ADEAE29BE6DE96F3EBA1F3EBA0DFD78CF3EBA0E9E196 E6DF91F4ED9FF1EA9CF2EB9BF5ED9CF9F1A0F0E798F4EB9FF0E69DEFE59DEBE19DF1E6A5EADF9D F1E7A2F3E9A4FAF2A9F3EC9EEBE695E0D98CEBE59AFEF8AFE7E198EEE79FF7F1A7FBF5A9F5F0A1 EDE897EDE79EFBF6B5FDF8B8FCF7B7F9F4B4F5F0B0F3EEAEF9F4B4F4EFAFEBE6A6F3EEAEF1ECAC E3DE9CF3EFACFDF9B8F6F0B2F2EDAEE7E2A4E8E2A4EDE7A9FCF7B6F1ECA8EAE69EF5F0A7F3F29F F6F5A3F5F3A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF4F4F4BDBDBD5151511111114F4F4F808080A6A6A6ACACACADADAD A7A7A78181813F3F3F1A1A1A1F1F1F878787B4B4B4CACACAE8E8E8FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBEEEEEEC7C8C79999997B7B7B6A6A6A5656564444443737373738374A4B4A959695 D4D4D4F0F0F0DADADA8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0616161 1B1B1B808080F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818616161CDCDCD F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFFFFFFE1E1E1959595 454645171617696969CDCDCDF5F5F5E9E9E9BCBCBC5E5E5E2323236E6E6EC7C7C7F1F1F1FDFDFD FEFEFEFEFEFEFDFDFDEFEFEFA5A5A5323132313131626262D2D2D2FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCF2FFF2D4F4D4B5E5B4BCE9BCE3FCE3F5FFF5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFFFFFFE2F4E2BAE5B9C5E9C5F8FDF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDECC7E1E1A4F5F5E1 FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFEF0EFFEE4E0FFDED3FFEBE5FFFCFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDCF1DB8ED1895FC1587CD273BEEABAFCFEFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6E6C673C272 51B84C78CD70C6EBC2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF1F1F1D0D0D08C8C8C4E4E4E3B3B3B515151A1A1A1D5D5D5FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCEDEDEDD4D4D4A7A7A78888886E6E6E5959594747473A3A3A393939525252949494 D7D7D7F5F5F5FFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB696969 2A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F414141C5C5C5 EFEFEFFEFEFEFFFFFFFFFFFFFEFEFEEEEEEEC0C0C07B7B7B4141413636366B6B6BB1B1B1E5E5E5 FBFBFBFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2C7C7C76D6D6D222222606060BBBBBBEAEAEAFFFFFF FDFDFDFDFDFDFCFCFCFDFDFDAAAAAA4040402222225D5D5DBBBBBBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2FDF2CEF4CE8DDB8D52BF5272CB72AADFAAD9EFD9F2F8F2FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9DCF3DCBDEABDBFEFBFD2F6D2F5FDF5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF9F6F2D3 ECE2AFF2ECCDFEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF3F0D4DFD58ADBC86DE0C975F6EFD6 FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDF8F7E9E2E1A6EAEAC0FBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEF1DE71C37138A638A7C7A7DDE4DDFBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAEEEDEE DBDCDBC7D5C7AEE2AE6FC86F4AB64AA9E2A9E7FBE7FBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE0DA82DCD480D9CD85DBCF81E4DB7FDBD56EE5DC8CD9D0993B301A716E32E6E48E E1DB7FDAD383D1C9878C85492E2801B0AC64DDDB86D7D276D6CF72E0D67FE5D487E2D584E2D680 DBD077D3C96DD7CE73D9CE79D0C77AE5DB93A9A15A928A3FE7E08ED7D27AC7C56FDDDA8D837F3D 474106C6BF82CFC980DAD57CE4E17EE1DD7AE8E28BFAF1ABFDF4B1FDF6A4F9F19DFAF29CF6EE9B F3EB97F6EE99EFE792EAE28EE9E18DEBE48DECE490ECE18CE8DA83EEDE8AF4E590EADB85EDDE8A F5E691F3E48EEEE08BECDD88EADC85EBDC87E9DB83F0E388F8EB90F7E990EFE188E9DB82EADC84 ECDE87E9DA85E3D47FE8D984F3E48FF2E48CEEE087F3E58CEFE189F4E68EEDDF87ECDE86EFE189 ECDE86EFE08AF6E791F3E88FF2E88EECE288ECE289F2E890F0E68EF3E992F1E791F4EA94F0E591 EADF8CEAE08CF1E695F2E798F4E999E5DA8AE7DC8DEBE091EADF90EFE495F3E898F0E595EFE495 F3E899F4EB9EF0E79CF1E89DF7EEA2F6EB9FEEE297EADD8FEEE193F1E495F3E294F4E496F4E798 F0E395F4E999F5EA9BEEE393EDE293F7EC9CF3E899EDE292F1E696F0E595F4E99AF2E797F5EB97 F5EA9AF6EB9AF7EC9BF7EC9BF6EB9CF2E797F3E899F6EB9DF4E99BF8EDA0F4EC98EDE68DEDE68F F7EF9BFAF29EF0E897EFE696EBE294F7EEA1F9F0A4EEE49BF1E89DF1E898F0E896F4EC9AF7EF9D F2EA98EBE391EDE593F5ED9BE9E18EEEE694F3EB99EAE091F3E59BF3E59BEFE395F3E898F5EA9A F3E999ECE394EDE59AF6EEA4F4EBA4FFF8B4E3DCAE827B5A3D35240C0500150D00231B064A4132 7368518D836D6B61505F54457F7360BAB282CCC587DCD597ECE6A5F7F2ADF4EFA4FCF6A6ECE792 F3EE95F9F499BEB95C959137FFFCAFBAB367EDE699EEE89CF3EEA4CAC67EC8C37FEAE6A6676327 C1BE87F8F5C28A86620904007F7D51FFFFCDBEBC891814002F2A0EE3DFAFF2EFAAECEB99E3E290 E8E59DDBD78FE1DB92E3DD92E9E395EEE897E7E18EF0E997EBE391F1E998F2E899EBE192F5EB9D F3EA9CEFE698EFE698ECE395F0E79AFBF2A6F6EDA2F4EBA1F0E79DF3E9A1F0E69FE7DD95E3D78F F0E59CF6EBA2F2E79EF5EAA2F1E69EF0E69CEDE299EFE59BEDE399EDE299F0E59DE3D990EDE599 DFDA8EEAE79EFAF7BAADAA7737330A797444E9E3AAEEEAA3F3EFA1EDE7A4AAA76A8E8A4BFBF5B9 F7F1B6BCB67C9A9459E4DE9F8F8B49EFEBA6F1EEA8E3E095EBE795E8E494E9E39AF2EDABF7F1B7 F3EBB8CBC2968A81603E35201B1201483E30A39A6BE4DEA2FEF5B9F2EAABEDE6A4ECE4A2EAE29F F7F2ACF7F1A9EEE69DF2EDA2E7E095F3EC9DF2EA9BECE498EFE79DF3E9A3EAE09CEAE09FF6ECAA F0E6A4F9EFAAF6EDA6F4ECA3F8F4A9ECE69BF2EBA1DCD68EECE59FF6EFAAEFE8A3F2EBA5F4EDA5 F5EEA5F5EFA3F4EEA7F7F2B2FDF8B8FDF8B8FAF5B5F8F3B3F5F0B0F1ECACF9F4B4FFFDBDF8F3B3 EFEAAACECA84E1DD94F6F2ABF6F1AFF4EFADDED998D8D394F1ECABEAE5A1F9F6B2B3AF67D2CD84 F4F4A2FEFCACFBFAADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5BFBFBF5454540909092020202E2E2E373737383838 3838383737372B2B2B1616160909090A0A0A2B2B2B5151517E7E7EC7C7C7F9F9F9FFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFCFCFCF2F2F2E4E4E4DBDBDBD2D2D2BEBEBEA5A5A58282824B4B4B232323 4A4A4A969696DADADADEDEDE8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0 6161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818616161 CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB AAAAAA5959591616165E5E5EBFBFBFF0F0F0EAEAEABDBDBD5F5F5F2323236E6E6EC8C8C8F3F3F3 FFFFFFFFFFFFFFFFFFF9F9F9DDDDDD8C8C8C2525254B4B4B969696E3E3E3FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFCFFFCDDF4DCB7E4B6C2E9C2F2FCF2FDFFFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F5E5BBE5BBC4E9C3F4FBF4 FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E0E1A3 F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFAFFF2ECFEE0C5FEEBD9FFFCF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDDF3DA90D8896CCB6397D793CEECCCFDFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9E7C9 78C47751B44E71C36FC3E6C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFDFDFDCFCFCF8E8E8E4646462F2F2F5B5B5B9C9C9CDDDDDDF5F5F5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCF5F5F5E9E9E9DFDFDFD4D4D4C2C2C2A8A8A8868686555555272727 515151959595E1E1E1FEFEFEFAFAFACCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB 6969692A2A2A646464EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F414141 C5C5C5EFEFEFFEFEFEFFFFFFFEFEFEF3F3F3C1C1C17979794040402F2F2F6E6E6EAFAFAFE7E7E7 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2C8C8C86E6E6E222222606060BCBCBCECECEC FFFFFFFFFFFFFFFFFFFBFBFBEBEBEB9494943232323939398D8D8DD3D3D3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7F8E7B5E7B586D18668BB6858B05860B360A3D2A3D1E9D1F2F8F2FDFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FDF8E1F5E1BDEBBDB3E8B3 EFFAEFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFEE7 FBF1CEF9E4BDFCEDD9FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF3E8C4DFC368DCC96EE2DC99 F6F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF8F8EBE3E2A7EBEAC0FBFBF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6F5E689CF894FB14F8EBB8EC8DAC8 F8FAF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0F0 E7E7E7E5E9E5C6E2C677C9776FC96F89D489D2F1D2F8FEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDED780DED680DFD38ADFD384E0D77AE2DC72DBD37FD8CF98564C2D6F6C2C E1DE89DDD77BE2DB8AD8D18E989154191300A6A258E5E38EDCD77BD7D073DED47EE4D387DDCF7F E1D57FE1D67CD9D073DCD378DACF7BD4CB7FE1D791B3AB646F671CD6CF7EDED981CECD73E0DE8F 9E9A58474009BEB67DDDD58FD6D279E6E380ECE886EEE895F7EDADFBF1B4FBF2A5F5ED9CF8F09C F9F19EF8F09DFAF29EF2EA95F3EB96EFE890ECE58DF0E992EFE58CE8DB83F1E38BF6E790F0E28A F1E38BECDE87E9DB83E9DB83EBDD86F3E58DF2E48CF7E990F4E68DF0E289F2E48BF2E48CEEE088 F6E990EADC85E3D47FE5D681EADB87F1E18DEEE088EDDF86F4E68DEFE189F0E28AE6D880F3E58D F4E68EEEE088EEDF8AF2E38EF0E48EEEE38CE9DF88ECE28BF6EC96F1E792EEE48FE9DE8CF5EA98 F5EA98EBE08FEBE090F5EA9BF8ED9EE8DD8ED2C778EADF90EFE495E9DE8FF2E798F4E99AF0E596 F1E697F3E899E9E095F1E89DF1E89DEFE69BF4E99EF6EA9EEDE092ECDF91EBDE90EFDF91F3E294 F3E697F7EA9CEFE495EEE394EBE091ECE192F1E697ECE192F2E798FCF1A2F7EC9DF2E798EFE494 F3E898EFE494F4E999F8ED9DF4E99AF0E596EDE195F3E79AF6E99FF0E49AF8ECA1F2E997F5EE96 F6EE99F1E996F1E998FAF2A2FBF2A5F6EDA2F2E89FF2E8A0F5EBA4F9EFA8FFF7A7FCF5A1F0E895 ECE491EFE794F0E895F0E895FEF6A3F1E996ECE491EFE793EAE191F2E597F1E496EDE192F2E797 F6EB9BF1E798F1E89BF0E89FEEE69FB1A8657A71324B4417110E004641217E7B56BBB68DCCC89B E7E0B3CCC696AEA878AEA879C2BB8DD7CF9FF7EFAFEBE49BE7E198EFE79CF3EC9EF5EE9EF0E997 EBE48FFAF39DEEE78E938D33EAE18CE5DC8FBCB46BF4ECA3F5ECA5E5DE99CDC684CFCA8AF1EDAD 625F1FE8E7A7F4F3B5534E35050000A2A176FAFBBBF0F0B04F4D230C050087815EF2EDB3ECEA9C DDDC89E5E493E2DD93DAD48ACDC77AD5CF81E2DD8BD8D27FD1C976E6DE8BDBD480F4E899D9CE7F F3E899ECE394EBE293FCF3A4F1E899E4DB8EF4EB9EF0E79CEDE499EFE69BF7EDA5F9EFA8F3EA9F E3D78DEEE298F2E69CF2E69CF9EDA5F4E8A0F5E8A2F1E49EF9ECA7F4E7A3E8DB97F1E6A1E6DD98 E4DF94E2DF92EEEDA4EDECAF8A885678744A524E21EFEAB3EFEBA7F1EEA2F1EDAED8D39C5D5820 E7E0A9FFFBC4E4DEA5706829F2EBA9948D48D9D388FEF7AAEEE796EFEB91F4F098B3AE5EC6C279 F7F2B1FEFAC2F2EAB9FCF4C7DED6ACAEA780544C261911002A220578703EE1D9A7FCF5C0EAE3AC F1EBB1F8F2B5FEF9B9F4EEACE3DE99EEEAA4EDE79DEAE297F3EBA3FBF2ACFCF4B1DAD190E7DE9D F7EEADF7EEA9FFF9B4FFF9B0F7EFA6FFF9B1FBF4ADF0E9A4F1EAA7FFF9BAF4ECACF2EAAAF5EDAC F8F1ACF8F1ABF2EBA5F1EAA5FAF5B4FBF6B6FBF6B6F5F0B0EFEAAAEEE9A9FDF8B8F2EDADDFDA9A FAF5B5FDFAB9E2DD95ECE99AF6F2A7F4F0A7F5F1AAE9E4A2EEE9A7ECE7A5E4DF9CD2CE87DBD790 DAD68DCDCB7DECEA9FFBF8B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAD6D6D68888884C4C4C4D4D4D4A4A4A494949 4848484949494747473C3C3C2625261010100C0C0C3838386161618D8D8DCECECEF9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCECECECD2D2D2828282 3535352828286D6D6DCBCBCBE0E0E08F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEB B0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818 616161CDCDCDF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EDEDEDA5A5A5525252141414606060C4C4C4F2F2F2EFEFEFC8C8C8676767222222666666BFBFBF F2F2F2FFFFFFFFFFFFFFFFFFE6E6E6A3A3A3535353242424727272D0D0D0F3F3F3FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF9FFF9D9F4D8B5E4B4C5E8C4F8FCF8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBF9EBCBF0CBC2ECC2 D7F0D6EDF8EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6 E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF8EDF1E1B4F6EBCD FEFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDF2DB91D58B73C36DA9CCA8D9E6D9FDFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D3ECD38FCF8E60B95F71C071C1E4C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9D3D3D38F8F8F4949493030305454549D9D9DDFDFDFFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEFEFEFD2D2D2909090 3333333333335F5F5FD0D0D0FCFCFCFAFAFACCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4 BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F 414141C5C5C5EFEFEFFFFFFFFFFFFFEDEDEDC3C3C37979793D3D3D3C3C3C606060B6B6B6E5E5E5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D4D4D4767676212121585858B3B3B3 E9E9E9FFFFFFFFFFFFFFFFFFF5F5F5B9B9B96969692C2C2C5F5F5FC4C4C4EDEDEDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE3F5E3ACE3AC99D899A8D4A884C18461B06167B3678AC48AB8DBB8 E7F2E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FBF3BCE8BC A5E1A5EEF9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF4 F2F3C9F5EDC5FDEDD6FFF5EDFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF3E0B5E0B143E4CA70 EEEFBEFAFBEDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFBF8EDEFE1B2F4EBC2FDFCE8FFFFFAFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF8ECA3DDA36CC36C7DB97D B8D6B8F5F9F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F6F9E9EBE9CDE3CD9BD39B55B95583CF83C9EDC9F1FAF1FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD4CD74D2CA72DBCF83E3D886E3DA7BD9D368E2DA86DAD197594E33 5E5A1DD5D37DD6D074D6CF7ED7CF8BA29B5D110B00A09C53E2E08AE0DB7FD7D074D6CC76D9C97D D2C575DFD37DE3D87FD9D075DDD37ADCD27FE0D68AE6DC95C4BC7561590ECFC877EDE891DBD97F DFDF8CB8B471514A13B8B278ECE8A2EFEB93F3F18FF9F595F2EB9BEFE5A8FBF0B8F6EDA1EFE697 F2EA99F4EC9BF3EB98F5ED99F0E893EEE78FEBE48CEBE48AEEE78DEFE58BF2E58CF5E78EEDDF86 EFE188F3E58CEDDF86EDDF86EDDF86EEE188F5E78EF1E38AEBDD84E8DB82E7D980EBDD84F2E48B F8EA92EADB86E6D782EDDE89F2E390EBDC8AE8D985EBDD84E8DA81EFE188EBDD85F1E38BE9DB83 ECDD88F5E691F4E590F3E48FF1E28DEBDF89F2E791EAE08BF1E791FCF19EF1E693F2E795F1E696 F2E797F5EA9AEDE293EADF90EBE090EBE090EEE394E5DA8BF2E798F7EC9DE9DE8FF2E798F3E899 EFE494F0E596EFE495EBE296F2E99DEEE599EAE196EFE599F0E497F0E297EFE194EFE294F2E395 F3E396F1E495F7EB9CF4E99AF3E899EDE293EEE394F3E899E4D98AEBE091F4E899EEE394EDE293 EADF90EEE394EEE394EEE294EDE293ECE094F5E99DEDE197EEE298FCF0A7F6EAA2F3E69DEDE493 EFE793EFE794ECE493EBE392F0E799F3EA9DFBF2A8F2E8A1F1E7A0F8EEA9F0E6A0F1E797FCF4A1 F4EC99EBE290F1E896F5ED9BF5EC9AFBF3A0F7EF9CF6EE9BF8F09EF6EC9CF5E799F5E89AF4E798 F6EB9BF3E898ECE293F4EB9DE6DE95EDE49FC2B97890874A63602C737447B0B07FF2F3BCF7F8B9 E2E39FDCDD92CBC97BCFCD7AECEA94F6F39DEFEB94F4ECA0F2E9A1FAF2A9F5EBA4E7DD96EEE49D E9DF98F2E69EF9ECA4DFD28CAC9E58FFFCB6CFC47ECCC27DFCF3AFF0E7A6EFE7A99A9354A9A464 BCB878797632F9F8B6EEEDA54844240000007C7B4EF4F6AEF4F5ADBDBA8C29220C30290FB9B281 F5F2A9DFE089E2E28BDAD688EAE49AE1DB8ECAC476D5CE7DE8E28FF0E893EDE591E7DF8CFDF2A2 F4E99AEEE495E9DE8EF1E696F4EA9AEEE394EEE293F5EA9BEBDF93EADE94EFE399F2E79CEEE298 ECE096E9DD92EEE296EFE398EEE298F7EBA3F4E7A0F5E8A2E6D895EFE19FF1E3A2EBDD9CF5E9A8 E4DB98E6E098F6F4A8D6D68EC7C6897D7C4B88865E37340FD3D09BF6F5B1E4E295DED99FE8E4AF 74713BA49E6AF9F3BBF5EEB4787031E0DB97C7BF76C4BB6EDDD584F4EC9BE9E391E9E494D7D086 E1DA93F7EEAED8D091E7E0A5FAF8BCF3EEB1FEFDBEFBF7B7CAC692756D441C140B251D0267603F B9B284E4DEADF0EBB6FBF6C0F4F0B5EBE7A9F1EDADF3ECA5EAE49AF2ECA3F1EBA6F6EFAECEC787 E6DF9FF2EBA8E8E29CF7F0A9FAF4ABF3EDA3F0E9A4F5EEABECE3A3F2EAABEEE5A7EFE7A9F4ECAE F5ECAFF8F0B0FAF3B0F5EEAAF3ECA9F7F2B1F4EFAFF5EFAFF1EBABE4DE9EE3DD9DF7F2B1EDE8A8 D9D494F4EFAFF5F0AFE4E096ECEA98F6F4A4EFECA1E9E59CF1EDA7F1ECA8DFDB96D4CF8BD6D28B F2EEA7B1AC64D2D087F6F3ACFFFEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CDCDCDB1B1B1B3B3B3B3B3B3 B3B3B3B3B3B3B4B4B4AFAFAF8C8C8C4D4D4D2323232323238E8E8EBEBEBED6D6D6EEEEEEFDFDFD FFFFFFFFFFFFFFFFFFFCFCFCF7F7F7E8E8E8E7E7E7EFEFEFF4F4F4F6F6F6F5F5F5F3F3F3EBEBEB 9FA09F4E4F4E2B2C2B656665C8C8C8E0E0E08F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFF EBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F 181818616161CDCDCDF7F7F7F8F8F8EFEFEFE8E8E8EAEAEAEEEEEEF1F1F1F1F1F1F2F2F2F0F0F0 EEEEEEC8C8C87C7C7C3435341A191A727272DADADAF8F8F8F6F6F6DADADA787878232323535353 A0A0A0E3E3E3F5F5F5F6F6F6F5F5F5BCBCBC5F605F292929454545A1A1A1F8F8F8FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFAE4FDE4CBF2CABAE7B9CEECCE F8FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FFF6E1FCE1 C4EFC3B5E3B5DAF1DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA ECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF8F7E8E3E1A6 ECEBC4FCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9EFD886CA8468B367ABC0AADAE0DAFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDFF3DFAADDA974C47374C273C1E4C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF4F4F4D8D8D88B8B8B4A4A4A2525254C4C4C989898D0D0D0F4F4F4F5F5F5F6F6F6F6F6F6 F6F6F6F9F9F9FDFDFDFEFEFEF8F8F8ECECECE5E5E5EEEEEEF3F3F3F6F6F6F5F5F5F4F4F4E8E8E8 AFAFAF4B4B4B3535354F4F4FCBCBCBFCFCFCFAFAFACCCCCC7F7F7F3737373D3D3DDADADAFEFEFE F4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4757575 2F2F2F414141C5C5C5EFEFEFFCFCFCF5F5F5C0C0C0797979363636292929636363A9A9A9E0E0E0 F2F2F2F6F6F6F7F7F7F6F6F6F7F7F7FAFAFAFEFEFEFFFFFFF9F9F9E7E7E7858585252525454545 979797D7D7D7FBFBFBF6F6F6EEEEEED3D3D3777777484848454545949494EDEDEDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0F5E0B2E5B2B8E6B8E7F5E7D1E8D1A3D2A35DB05D57AD57 72BB72AFDBAFE1F3E1F5FAF5FDFCFDFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FBF1 C3ECC3ADE5ADE7F6E7F9FCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FAFAEFE5E5AEEAE9BDFAF8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F2F3D8A5E1A933 EDCE7BFCFCDEFFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F2FDE2C6FEE8C6FFF7D8FFFEF0FFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FAF2BDE6BD89CF89 6EB86EAAD3AAF3F9F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDFCFBFC FAFAFAF3F9F3D1E9D193CD9363B96362C062A8DEA8F2FAF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D880D9CE79DACF7EE1D481E2D87DD5CC6AE5DC87E0D994 60573145400AD3CE87D8D17ADBD57ADAD480A49D57201600968D53DFD984D8D279D9D175DBD077 CFBF6FD4C772D8CD72DFD47ADDD379DDD37CD9CF7CD9CF82DED48BECE59D9E954FDAD289DCD487 E6DF8AF1EB9BD1C984554D0FB5AE71F9F3AFF4EF9FF2ED95EAE58AE8E08DEEE398EFE49BF4EB96 ECE28BEAE18AEEE58DEEE58DEEE48DF5EC92EFE78DEDE589E9E184EFE68AF5EB91F4E691F6E793 EFE08BF4E691F7E894F8EA95F5E691EEDF8BE9DB86EFE08BEEDF8AECDF87E6DC80E5DB7FE6DA80 E3D97FEADF87ECDF8AE2D782E4D885E5D888E6DA8AF8EB9BF1E38CE6D87FF2E48BF6E88DF1E488 F1E387EBDD83EFE18AF6E793F5E694F1E192EFE38FEDE38AEEE48CF1E78FF4EA93EFE58EEEE48E F2E892F5EB97F8ED9AF4E996F2E794EFE492EDE291F0E594F6EB9AF2E796F2E795F0E594F1E695 F7EB9AF1E594F2E796F1E695EBE192F2E799F4EA9BF3E99AF6EB9CF7EC9CEDE292F3E897F1E594 F6EA99F2E594EFE392E9DF8DEDE493F3EA98F0E797EEE595EFE696E5DB8CE9DF90EDE495EAE092 EAE193EBE192EEE593EEE595ECE392EEE494ECE393F6EB9EF1E799EEE498F5EB9FF5EB9FF1E79C F0E696ECE291F0E795F3E999ECE292EDE394EEE395F6EC9FF9EEA2F9EEA2F9EEA4F4EA9EF4E896 F4E995F4E995F7EB99F8EC9BF3E99AF9ED9EF5EB9BFAF0A0F3EA9AEBE292F2E697FCEE9EEFE090 F5E797FDF1A1F4E798EBE092ECE297E8DD96F4EBA4F0E7A3EEE7A6E6E2AEC4C5997D7F527C7D4B BCBD85F8F7BCECEBAAF1F1A9FFFDACE4E18CE4E288EFEB92F0E999E7DF95F7EEA4F4E9A0EDE19A F7E9A3F4E6A0F4E7A0F0E39DC7BC74CABF77F2E9A2BEB478D8D08CF8F1ADF2EAAFEBE6A3837E37 F4F0AB9B955C979154FFFCB9DFD99F544F2B110C015A5A23F0F1A9E1E094FBF8C1857C572A1F06 696038F4F0AFF2F29BE2E681E3E18AEFE99CE1DB8DE1DB8DE7E393DED788E4DE8DF1EB9BEEE798 E9E294F3EC9EEAE397EBE59BEDE59AF3EB9EE9E093EBE192FFF5A6E9DF91ECE294F2EB9EF6EFA2 F1EA9EEDE59BEDE39AF1E69EF3E99FF1E79CEEE497EBE195F2E89DE2D88EE2D890EDE29CF0E4A1 F1E6A2DBD08AD7CF88F2EDADD7D39BE2E1AA67672F6F6E3C25210C918C66F9F5B7CFCC76C8C279 F9F0ADC1B87772682AEBE1A4E7DD9CB4AA67C8BF76E3DA8CD0CA74D9D378E5DF86D1CE80D1CE81 E8E295E2DA8EE8DD97E0D492E7DC9EE5DB9ED6D190DEDA96EFEEA4F5F3A7FFFAB1DED996897F51 3D3215251B00554C31ACA481EFEAC1F8F5C3EDEBB1E1DFA0F5EFA6F3EC9EEEEA9FE3E398DEE198 CBD088DADD97E8E8A5E4E19EE7DE9CF1E4A3F2E4A3EDE1A1F4E8A9EFE2A5E0D396CFC485E7DC9E EEE4A3DED393EBE39FEFE7A1E9E19AEBE39DEEE4A2F0E7A5F0E7A5F3EAA8E4DC99E3DC99F1EAA7 F5EFACF7F1ADFDF7B3F2ECA8D7D38AE7E69AF5F6AAF1F2A9E4E69EECECA7E9EAA5E4E5A0CECE89 E6E59DD6D28B7F7C32E6E399F4F0A9FBF7B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEFEFEFE4E4E4E5E5E5 E5E5E5E5E5E5E5E5E5E7E7E7DFDFDFA3A3A34444442626263B3B3BBABABAE8E8E8F3F3F3FAFAFA FEFEFEFFFFFFFFFFFFFEFEFEF4F4F4DBDBDB9494948F8F8FAEAEAEC6C6C6CECECECFCFCFCBCBCB BDBDBD777777323232303130767676CECECEDFDFDF8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFF FFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B8 6F6F6F181818616161CDCDCDFAFAFAE4E4E4B2B2B2939393999A99AAAAAAB9B9B9B9B9B9B9B9B9 B4B4B49999996B6C6B3D3E3D2425243C3C3C949494EDEDEDFDFDFDFDFDFDEAEAEA9090902F2F2F 3939396A6A6AB8B8B8CDCDCDCBCBCBB1B1B17C7C7C454645474747939393D1D1D1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF7CDEFCCC3ECC3D5F0D5 ECF7ECFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFEFEFDFEFD FDFEFDFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFC F2FEF1CFEFCEB1E1B1D7F0D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFEFEFDFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8 E1E1A4EBEBC1FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1EBD16EC16D4EAF4DA1CBA1D7E8D7FDFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE1F4E1B0E0AF77C67673C173C1E3C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9CCCCCC9191914545452A2A2A3131316A6A6AA8A8A8C3C3C3D0D0D0CECECECECECE CECECECCCCCCDDDDDDF4F4F4FAFAFADEDEDEA6A6A6848484ADADADC1C1C1CDCDCDD0D0D0CCCCCC BCBCBC8585853232323B3B3B6B6B6BD4D4D4FDFDFDFAFAFACCCCCC7F7F7F3737373D3D3DDADADA FEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4 7575752F2F2F414141C5C5C5EEEEEEF2F2F2BFBFBF7B7B7B3C3C3C2222223E3E3E7C7C7CB5B5B5 CACACACFCFCFCECECECECECECECECED0D0D0E2E2E2FBFBFBFFFFFFFDFDFDF8F8F89B9B9B353535 2D2D2D666666A9A9A9D4D4D4CBCBCBADADAD8383834848485555558A8A8ACCCCCCF9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF3FFF3D8F5D8BBE5BBC8E8C8F7FBF7F1F8F1D8EDD8A7DCA7 7EC97E61BC6164C4648BD58BC5E2C5F1F0F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7FDF7D8F6D8C2EFC2CEEACEE5F3E5FCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF9F9EEE2E2A9E8E9BAF9FAEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6FDEDD9F2D196 E1B44AEED696FFFEF1FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F6FFE2D8FFE1C9FFE9C8FFF6E6FFFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FBF8D6E8D6 A2CEA255AA5595CA95EFF7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFDFEFDFCFEFCFCFEFCFCFEFCFBFDFBF7FAF7EAEDEA E6E8E6E0E6E0BADDBA85CE855CC05C5AC15A9ADE9AD0F1D0FCFEFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D882E4D884E8D986EADB86EBDD85E0D67BE3DA84 E7E1947D7739423C0ACAC48BD6CC7BCEC866DDD875BFB869281B007E7344D8D27ACEC671D8CF74 E2D878CCBC68D8CA71D4C96DD7CC72E0D57EE3D982DBD07FE8DF8FDFD68CE0D8907C732EACA361 D2C984CFC474F1E593C7BD733D3200B1A869F1EAA7EDE79CEBE591EAE48CF6EC95FCF09AF6EA94 F2E98BECE386E9E083EAE184E8DF84E6DD82EFE68BECE388EBE285E6DD80ECE386F4E991F0E18F F8E998F6E796F8E998F4E594EBDC8BEEDF8EF5E695F7E897F9EA99EBDD8AECE186E2D97AE2D97C E9E085E5DC81E4DA82E9DF8ADFD581DBD07FE8DD8EEFE396E2D788DDCE78D6C86FDED077E3D679 E4D779EDE080ECDF82EFE187F7E894F5E794F5E598F7EC98EFE589EAE186F1E88DFEF59AF7ED94 EAE087EBE188F0E690F0E68FEEE48DEEE48DF1E791F4EA95F0E691F5EB96EDE38EECE28DFAF09B F2E893F0E691F2E893FFF6A1F5EB96E2D787EBE090EFE495ECE18FEBE08EF0E593ECE18FF0E593 E9DF8AF1E792EDE38EEEE48FF2EA97EFE794F2EA97EFE794EDE594F0E897F2E99BEEE596EAE193 E6DD90E8DF92ECE393EFE794EDE592EAE28FEDE592EAE291E9E091EDE495F3EA9BF6EDA0F0E79A E5DC8EECE192ECE191F9EE9EF1E696EBE090ECE191F0E595F3E898F6EB9BF4E999F1E696F2E796 EFDF8CEEE08CF0E18EF5E695F8EA9BF9EC9EF7E99DF5E99DFDF1A5F4EB9EECE396F4E898F9E995 FFF19EFCED9BF9EC9CEDE093F2E69BFBF1A9EBE19AEBE29EFEF5B2FFF8B8FCF9C4F6F7CBF9F8CE A6A5793532064F4D1ED1CE9AFDF8BFECE7A5F7F3A9E6E292E8E392EEE797E2DA8EF3EA9FEFE399 EBDE95F7E69EF1E199EEE198EEE298BFB669D6CF7FEBE49DB2AC73D1CD86EEE9A2F6F0B6D4D087 A4A150F3EEA787804A9D9760FFFCBEB4AC811812002627013B3A11E4E39BEBE99EECE8A4FFF6C4 6154311E14007E7843ECEA9EF7F89EF1EF99E5E193D8D386E9E698E9E49BDDD990E0DC93D3CF85 D9D68AE1DE8FE5E292F6F3A6EDEAA4DEDA94DFD890D9D187DDD488F4EB9EEFE699E0D98BE4DE90 EFEB9EEBE99DE2DD95EADF9DF5EBA6F9EFA7F4EBA1EFE698F3EA9BFDF4A5EDE496E8DE94F0E69F F0E69FF5E9A2DACE84DFD68DEFE5ADCFC99BF8F5C33B3D1034340C2D2813736C53F2ECB6D6D279 E7DE8CEEE297CCC1785F520FECE1A1EDE2A2CFC783C6BE77E6DF91C7C26EE8E489D4D07ACDCA7F E3DD92EDE696DAD080E9DB8FF9EBA5F3E3A6F3E4A9E3D89BE3DF99EAE89DEEED94EAE587EBE593 FFFDBFF3EDBA928D6A2D2910120E00383716B3B58CF8FCC8F1F5B9E0DB98E4DD95ECE9A0EEF1A4 DDE295C4CB7DD8DF92E5E79DEBE8A3EEE5A4F4E7A9F9EBAEF2E8AAFBF0B3F7EEADF8EFAEEEE6A3 F3ECA6E4E098D0CC83DDD990E4E297E4E297ECE69EF4EAA5F7EDA8F5EBA6EDE49FDBD28DE9E09B FAF3ADF7F0AAF1EAA4F5F1AAECE59FDCDB93E9EAA4F7F8B3F0F4AEE9EDAAE5EAA7EEF1AEFEFFBD FAFAB5F0EDA8E5E298F7F3A9E6E299EEEAA2F5F1AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9AFAFAF3E3F3E2828284B4B4BD2D2D2FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0CBCBCB5B5B5B4747476969698383838A8A8A8C8C8C 8787877A7A7A4E4E4E2D2D2D5455549D9D9DDDDDDDDDDDDD8E8E8E4141412A2A2AC7C7C7FBFBFB FFFFFFFFFFFFEBEBEBB0B0B06060601A1A1A7F7F7FF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 B8B8B86E6E6E171717616161CDCDCDFCFCFCD6D6D6888888555655575857666766767676717171 7070706A6A6A4A4A4A2A2B2A232323383838757675BEBEBEFBFBFBFFFFFFFFFFFFF7F7F7B1B1B1 5555553838384040407B7B7B8B8B8B888888696A69525252525252828282D9D9D9F5F5F5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FBF5BCE5BBBFE6BF EBF7EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF8FDF8ECF8EC E2F3E1E0F1E0F5FBF5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFEFCD8EFD7B3E2B2D7F0D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAF1F7F7E7F7F7E7FAFAF1FEFEFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFD F7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBE9CB5CBB5A3CB03AA1DEA0D9F2D9 FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE5F4E5B7DFB677C3756ABE69BCE2BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF5F5F5AAAAAA5353531212121313133535356767678989898D8D8D8C8C8C8C8C8C 8C8C8C8C8C8C888888ADADADE5E5E5FBFBFBD0D0D07878783A3A3A6969697F7F7F8A8A8A8D8D8D 8888887A7A7A5757572D2D2D5A5A5A9E9E9EE3E3E3FEFEFEFAFAFACCCCCC7E7E7E3636363D3D3D DADADAFEFEFEF4F4F4BABABA696969292929636363EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 C4C4C47575752E2E2E414141C5C5C5EEEEEEE8E8E88E8E8E4242420F0F0F151515434343717171 9090908C8C8C8C8C8C8C8C8C8C8C8C8A8A8A909090BABABAF6F6F6FFFFFFFFFFFFFFFFFFB9B9B9 5E5E5E3030303F3F3F6E6E6E9090908888886767674747474444447F7F7FCECECEF8F8F8FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFBE3FBE3CEF0CEC6E3C6D7E8D7FAFCFAFFFFFFFCFFFC EFFFEFBAEBBA7BCD7B49BE4950C0508CCC8CCDE0CDF5F9F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFFFCEEFFEED7F7D7B6E0B6D1EBD1F8FCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF5EBF8DEBB EDC985E0C46BEEE1B2FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E3FFDBCBFFDDBFFFF0DFFFFDFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFD EBECEBB7D0B73C9F3C7EC27EE6F6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDF1FBF1E4F5E4DAF1DAD3EFD3CFEECFCAEACAC2E2C2 B0D1B0ABCBABA4C8A478BE7851B85152C1527AD77AD3F9D3F2FFF2FEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD47EE4D884E8D988E6D783E0D27AE2D87E DFD781EAE4979690513F3909BFB97FD4C979CBC563DAD572CEC7782417006D6233DAD57CD1C974 DCD378E6DC7DD3C26ED8C972D2C76BCFC46AD9CE77E1D780DBD07FE2D889D0C77CD0C980716922 A49B56E3D994D3C875E3D784CEC4783C310099914EF2EBA5F2ED9FEBE691F1EC91F6EC92F1E68F F2E78DF1E88AEFE689F0E78AEEE58AEBE286E9E086EAE087E8DE85EAE187E8DF85E9E086F2E690 F5E692F5E693F1E28FF1E28EF1E28FEFE08DF6E793E9DA87E7D784F3E490F5E793F1E68BE8DF80 E8DF82F1E88DEEE58AE3D981E6DC86E4DA86DBD07EE2D787EBE090DBD181D0C26BDBCC74DFD178 DFD275DFD274DFD274E7DA7EEDDF86EEDF8AE6D785E6D688EADF8BEEE488EFE68BEDE489F2E98E F2E88FEEE48BEFE58CEEE48DEAE089EAE089ECE28BE7DD87EDE38EEDE38EF1E792EDE38EF1E792 E9DF8AE6DC87EEE48FEAE08BF0E690E8DD89E4D989E8DD8DEBE090E8DD8DE9DE8EEDE292F1E696 F2E795E9DE8CF2E795EFE493F0E593F9F19EF1E996F0E895EDE592EEE695F2EA99EBE293ECE394 EBE294EEE598EFE698EDE494EEE693EDE592EDE592F1E996EDE595F5EC9DF5EC9DEDE495E9E093 EAE194ECE395EFE596EBE090F8ED9DECE191F5EA9AEBE090EADF8FEFE494F1E696F0E595F0E595 F1E695ECDD8AF4E592F3E491E9DD8BEADE8EF1E495F0E595F1E696F5EA9BECE394EAE192F4E997 EBE087EADE88F8EE9AF3E898EEE398F0E79FEFE6A4F7F0B1EDE3A7DED49AB7AE7768633A54531F 4947143E3C09383419211E081F1A009C9861F4F0B0F2EFA9E8E69CE9E699EEE89AEDE697F6ED9F EFE397F2E599F0E297F8EA9FF4E89CF9EDA1C3BA6DE5DE90F0E9A2B6B074D7D38AE3DF96EBE5AA A6A259B7B463F6F1A9A29B64B1AB73FBF5B7DED6A9211B00595937474513ADAB6EFBF9ADD7D38A FBF9BDD3C999473E1F1F17008E8856E9E7ACEDECA3DDDC8EDAD88DEDEAA4E6E2A0EDE8A7E5E09F D4CE88D5CF83E3DE8CEAE68FECE994F3F0A8E5E09DDDD792E0D890E6DC95EAE197EFE59CE8E096 E2DB92E4DF98EEEBA5F2EEA9EEE5A2F9F0AEF8F0A9F0E89EEEE79CF3EB9EF9F1A4EFE79DF0E8A0 F4EBA6EBE29DECE198F0E598EFE79ADBD599E4DFAFC9C6910C0C0563632F58523D423A27FEFACB E0DF8DDFDA8EF3EDA6F9F3B06F682BE9E3ABE5E0A8CDC891B4B075DBD99AB3B16DDDDC93E4E197 DFD58FE4DA90EADE90DFD284EDDF92F5E5A0F2E2A4EEDFA3E4D798EBE29BF0E89CEBE99EEDF0A8 E9EBA9E5E8ACF1F6C1FFFFD8DAE0B88E956F2B331C0D15003941269BA279F1F2C5E8E5B2EBE7AD E8E3A1D7D288E6E092F2EC9AF2EA9AF3EC9FECE69FE3DD9BE0DE9DE9ECA8F1F5AFEBEFA9F8FCB5 EDF4ABDEE59AD8E194DAE396E4EE9FE5F1A2D9E593D8DC90F0E8A4F5ECA9FDF4B1EBE3A0DCD491 F0EAA6FBF6B2FAF6B2F7F3AFF8F5B0EDE9A4F2EEAAEFEBA8FDF9B7F1EFAEEEEEAEDEDD9DBCBB7A E3E1A0EEEAA6F5EDAAF8F2ABF8F3ABF5F1A9F2EFA9F2EFAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8BBBCBB595A593738374A4A4AD1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE3E3E37F807F4B4C4B3738372A2A2A212121 1F1F1F2323233232325454547F7F7FBDBDBDE8E8E8F6F6F6DADADA8F8F8F4141412B2B2BC7C7C7 FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFF F1F1F1B8B8B86F6F6F181818616161CDCDCDFAFAFAE1E1E1A5A5A5727272595A59444544323232 2020201818181B1B1B3434345254526F706F999999D6D6D6F1F1F1FEFEFEFFFFFFFFFFFFFCFCFC E4E4E4B3B3B37777774243422727271F1F1F2423243D3E3D6D6D6DA5A5A5D5D5D5F4F4F4FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FBF5BDE5BC C0E6BFEAF7EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE6F5E6 B6E2B591D09089CB88DBF0DBFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFEFBD7EFD7B3E2B2D7F0D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF7EEEECBE1E1A4E0E0A2ECECC7FBFBF4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBE9CB5EBC5D49B847BFEFBE EAFCEAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F4F2D0DECF75BB744CB24BACDCABFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF4F4F4A0A0A04444441212120606060B0B0B1616161E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F171717606060D0D0D0FFFFFFE9E9E99D9D9D5656563F3F3F2D2D2D212121 1E1E1E2424243232324C4C4C787878B3B3B3E8E8E8F9F9F9FFFFFFF9F9F9CCCCCC7F7F7F373737 3D3D3DDADADAFEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF F6F6F6C4C4C47575752F2F2F414141C5C5C5EEEEEEE6E6E68080803838380C0C0C0303030E0E0E 1818182020201F1F1F1F1F1F1F1F1F1F1F1F1C1C1C272727787878ECECECFFFFFFFFFFFFFFFFFF E6E6E6BABABA7676764040402727271D1D1D2121213535355858589C9C9CCECECEF0F0F0FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCF9D3ECD3C4E0C4CFDDCFE6E8E6FBFCFBFFFFFF FEFFFEFBFFFBF1FBF1DDF2DDADE3AD77D17759C55978CF78E7F7E7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFEFAE3F7E3A8E1A8C6EBC6F7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F0E1 E9D09EDDC176DED58BEEEBC6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E2FFDBCBFFDEBFFFF0E0 FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7FAF7C3E2C32FA32F69C269D2F6D2F8FFF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF7CAEECA9ADB9A75CA755BC15B4AC04A38B238 2AA32A269F26249E24299F2944A94478BF78B6DFB6E6F8E6F5FDF5FCFFFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD27CDCD07CDECF7EDCCD78D3C56D D8CE74D8D07BE3DD90A19B5C352F00BEB97FDAD07FD6D06ED2CD6ACAC375291C00655A2BDFDA81 D9D17CD5CC71D7CD6ED4C470D4C66ED3C86CD5CA70D6CC74D6CC75D5CA79D8CE7FCAC174D6CE84 8F873E9D954EDED58EE0D680D8CD77E1D88A534905756D30E4DE95E7E290E6E189EEE98CEAE185 E6DC81F5EA90EDE587F1E88BF7EE92F3EA8FF0E78DF4EA91F2E890EEE48DEDE38EECE28CE7DC89 ECE18BF2E68EF0E38EEDE08AE9DD85EADE88E7DA84F5EA91E9DD87E7DB85E7DB83ECE08AECE286 E9E083E4DB7EE3DA7FE1D77DDCD279E0D67FD8CE78EAE08BF6EB99D9CE7DB5AB59DFD37CE9DD84 EBDF86E9DD81DED376CEC367E0D57BEADF86EBDE89E7DA88EDE08FF0E48FECE386F9F095EBE287 E5DC81EEE48BF2E88FF1E78EEDE38CEAE089EBE18AECE28BEBE18BF2E893E9DF8AE4DA85E0D681 E5DB86E7DD88D7CD78EDE38EF2E893E6DC87EDE28FF1E696EBE090E8DD8EEFE495F2E798EFE495 F1E697F4E999EDE292F7EC9DF1E696ECE191F1EA96EDE592EFE794EEE693EDE594EFE796EBE293 EFE697F0E798F1E89BEAE194E4DB8BEBE391EEE693F0E895F6EE9BF4EC9BF5EC9DF7EE9FF5EC9D F2E99BEEE598EBE294F6EC9DECE191EFE494ECE191FFF5A5F0E696E4D989EDE292EEE393F1E696 F7EC9CF7EC9CF0E190F4E695F6E997F4E896F4E997F7EB9AF7EC9AF5EC9AF4EC99EEE595EEE696 F4EC98E8DF89F1E592F8F09EE6DD90ECE49CFFF7B5F2E9AEC0B77E625A2F20170C211800484114 8C884BB1AD70BCB87DE2DDA4E3DFA77E794B070200857F52FFFFC0F7F6B4ECE9A4F0ED9FF8F3A1 FFF7A6F7EC9EFBEFA1F0E396EADD90EFE296F8ECA0B7AF61E1DB8EEFE8A0B8B374DBD88ADFDC8E E7E1A48E8A41D1CE7DDFDB939D9661CAC38DF5EFB1D7CFA2140E007373539E9C7254521EEEECA3 E5E196F6F0A9EDE5A9C6BE8E3F3615191006766F54E9E5B4E7E7A8D9D798E7E5A4EBE8A7EBE7A3 F0ECA4EDE89CDDD888DED886E7E18EDED887E6E39DEDE8A5E7E29FE8DF99EEE49DECE29BE9DE97 F4EBA5EBE4A0DED896EBE8A7FCF7B6F3EAA8F2E9A7F0E7A1EDE59CEDE59CEBE39AE9E198E0D88F EBE29CF2E9A4EBE29FEBE29AEAE394E4DF91E0DB9EE9E7B45D5A351F2000CAC9968E8870211809 BEB990D0CE82DEDD95E2E09EEEECAE68652DB8B5814F4D1CB4B182C6C597DDDCACCAC995B4B77F B7B579E6DC9AF2E79FECE496DCD584E8E393ECE69AE4DE98DDD694D9D18DEAE298F4EDA0EFE7A4 EEE4AEECE3ACEFE8ADF5EEB2E9E3A8F6EFB6FFFFCADFD9AA928D6640391F130B003E3B208D8A68 F3EDC1FBFAC5EADC98DFCF81FBEB99F1E48FE7E08ED6D488C1C37BBBBD7ADBD28EEFE29FEEE09D FCF3AEFCF2ACEFE79EEBE399E9E39AE4E094ECE89BF4F0A3F0EAA0E9E19DEEE7A3FEF6B2EAE5A1 E1DB97F3EEAAF4F1ACF7F3AFF3F3ADF2F1ABE8E6A1F2ECA9E8E1A1F9F2B3F0EAABEFECAECFC98B BDB87AF6EFAFF4ECAAF4E7A6FFF8B3FBEEA8E6E39CE5E49FECEAA7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDBDBDBA6A7A6919191999999E5E5E5 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2BCBDBC9A9A9A8989897C7C7C 737373727272767676828282A0A0A0C2C2C2E9E9E9FDFDFDFDFDFDEAEAEAC1C1C1959595888888 DFDFDFFDFDFDFFFFFFFFFFFFF4F4F4D3D3D3A7A7A7808080B8B8B8FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8D8D8D8AFAFAF7E7E7EA7A7A7E3E3E3FCFCFCEFEFEFD0D0D0B4B4B4A2A2A2919191 8383837777777171717575758A8A8AA3A4A3B9B9B9D3D3D3F6F6F6FEFEFEFFFFFFFFFFFFFFFFFF FEFEFEF7F7F7E2E2E2BCBCBC9596957A7A7A7272727676768C8D8CB0B1B0D8D8D8F4F4F4FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FBF5 BDE5BCC0E7BFEAF7EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F5F7DADCDA AAC7A870C26E6FC36E8CCE8BDDF1DDFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFDFBD7EFD7B4E2B3D7F0D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEF9F4F3D4E8E4A4DECA6CE3D489 EEEBC4F8F9EDFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEF9FEBFDDBE5AB75952BA51 D4F4D3F6FFF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF9FBE3EAE27DC37C44B143A8DBA7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9C8C8C89494947A7A7A717171707070717171727272727272 7272727272727272727272726D6D6D9A9A9AE1E1E1FFFFFFF6F6F6CECECEA4A4A48D8D8D7E7E7E 7474747070707575758282829A9A9ABEBEBEE1E1E1FDFDFDFFFFFFFFFFFFFBFBFBE3E3E3B8B8B8 8F8F8F929292EAEAEAFFFFFFF9F9F9D9D9D9ACACAC888888A8A8A8F3F3F3FFFFFFFFFFFFFFFFFF FFFFFFFAFAFADEDEDEB2B2B28B8B8B949494DEDEDEF6F6F6F0F0F0B6B6B68E8E8E7676766F6F6F 717171717171727272727272727272727272727272707070777777AAAAAAF3F3F3FFFFFFFFFFFF FFFFFFF7F7F7E6E6E6BCBCBC9494947C7C7C707070737373868686A3A3A3D3D3D3EEEEEEFCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFADBF3DBC9E7C9CAE0CADEE8DEFAFCFA FFFFFFFFFFFFFFFFFFFFFFFFF9FDF9DFF4DFB8E7B89BDD9BA7E1A7EFFAEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFFFDF4FFF4DDF7DDAFE1AFCBEBCBF7FCF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBF6ECF1E3C5EADCB1ECEAC3F6F6E3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E3FFDBCBFFDDBF FFF0E0FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFDFBCDE6CD45A44566BB66B4E9B4E9FBE9FDFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDF2DDB0E0B088D28872CA726BC76B68C66866C566 64BC6462B56261BF6167C26773C4738FCB8FB8DCB8E3F2E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D883DCD07CE1D181E4D583 DBCC77D5CA71D7CE79DDD78CA8A163262000BCB67CE3D888D4CE6CCDC866D9D2843E311253481E E3DE85DFD782D4CB70D1C868DECE7AD8C972DACF73DED379DACF78D5CB74D7CC7ADCD383DDD487 DCD48A938B436D651EDFD68EDBD17AE8DD84EEE5947A70287E762EDED88DE2DD89EBE68BEDE988 E7DE7FE6DB7EF0E589EEE589F2E98CF8EF92EDE58AE9DF86F5EB93FAF099F4EA95F1E694F3E898 EBE090E7DB88E9DE86F1E68DF5EA91EDE289E5DA81DED47AF5EA91EEE38AF1E68DDDD279EEE389 EEE488EEE588E4DB7EDBD277DED57ADFD57CDFD57EDED47EE7DD88CFC472B6AB58CEC371EEE28B E9DE85EADF85EADF84E4D97DE0D579EDE288F3E88FEEE38AEADE89EEE28EECE18AE2D97DE5DC81 E1D87DEFE68BF0E68DE4DA81E5DB82E4DA83E6DC85E9DF88E9DF88E7DD87EEE48FE2D883DFD580 E5DB86EDE38EF1E792C4BA65CDC36EE8DE89E9DF8AEBE18EF3E898E6DB8CE1D687EADF90F0E596 EBE091EBE091ECE192E8DC8EF3E899EADF90E3D889EBE492EAE28FEEE693EAE28FE6DE8DE9E190 F0E798EEE596E9E092F2E99CF2E99CEAE292EFE794F0E895F0E895F3EB98EEE695F0E798F3EA9B F0E798ECE395EBE295EDE496F6EB9CF3E898EBE090F4E999FAEF9FF4E999EDE292F5EA9AF1E696 EFE494F6EB9BF4E999EEE18FEADD8BEADE8CEEE290EDE290EBE08EFBF09EF5ED9AF4EC99F2EA97 F1E998EFE797E5DD8EEAE194ECE49AFBF8B1F7EEACA1995D4138010D0600231B02665E2EBAB285 D0C88EDFD88FEFE8A2F4ECAAFDF8B8F5F0B2FFFFC598945A28230073713AECEAB1F3F2B4F0EDA0 F5EF9DFBF4A3F2EA99F7EB9CF0E395EADE8FF3E89AFFF7AAC5BE70EFE99CFDFAB2CCC784EBE998 ECEA99E7E2A2918D44E3E08FE2DE968E8753C0B984F8F2B3E0D8AB251F075B5B39EBE8BC3F3B15 A6A164FAF6ACE5E094C3BC76E6DFA5BAB28A251A07190F09686246B8B58AEDEBB8ECEAADDDDC96 EBEA9BF0EE9CD3D07CD0CB79CEC778CDC579ECE49DE3DF99EBE7A2E1DD96DBD38CE8DE97F7EDA4 F4EBA3F1E8A3EEE7A3E9E5A4E3DF9FE1DC9BEAE29DE8E097EBE39BEFE79EEEE69DF0E89EE9E198 D3CB82DED68EECE49CEDE49FF6EEA9CFC881F0EEA5FFFBC2827E510000005B5B21FFFFD8AFAA8F 160D00A29C74C6C67ACECE84DEDE9AF1F0AF77753AC2C18D605D2E181500908E66B1AF86DFDDB4 D4D5AAD1CF9ECAC384D5CF86D5D383D6D882E1E38FD9DD8BE0E397D8D890D2CF87E1DF90EEE998 ECE59DF6EDAEF5EBABE6DD96E6DE90F4EC9AF2EA99F0E89BE6DD98F1E5AAD9CE9C9B8E6430280D 140F01564E29BDB181E3D496F9E9A1EFE092F0E593E3DC8BD4D484CCD185C9CA81DFCF89F6E29D F7E59FFEECA6F4E29DEDDD94F5E69FF3E59CEADD92E6D88EEBDD92EEE39BEEE7A3EDE6A2F5EFAB E6E19DDED995F5F1ACF8F5B0EFEFA9E8E8A2E4E49EE2E29CEDE6A6EDE5A6F9F2B4F6F0B3F8F2B6 D3CD91D6D092EEE5A6F7ECACF8E9A8EFDD98FDEFAAE8E39FE9E8A6EFEEADFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF3F3F3F0F0F0F1F1F1 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6F1F1F1EEEEEE ECECECEBEBEBEAEAEAEBEBEBEDEDEDF2F2F2F7F7F7FDFDFDFFFFFFFFFFFFFCFCFCF6F6F6F0F0F0 EEEEEEFBFBFBFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F3F3F3EDEDEDF5F5F5FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFAFAFAF4F4F4EDEDEDF3F3F3FBFBFBFFFFFFFDFDFDF9F9F9F5F5F5F2F2F2 EFEFEFEDEDEDEBEBEBEAEAEAEBEBEBEEEEEEF2F3F2F6F6F6F9F9F9FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFCFCFCF6F6F6F0F0F0ECECECEAEAEAEBEBEBEFEFEFF4F4F4FAFAFAFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5FBF5BDE5BCBFE5BEE8F5E8FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFBFEFBF4FDF4D8E3D8 A9B6A96F9E6F42AD416EC56DB0E0AEE9F6E9FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFEFBD4EFD4AEE0ADD5EFD5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFDE8F7EFBCE5BF55 DEC058E0D58AF0EDCBFDFAF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF3EEF3B2D0B155B254 58BB57E3F4E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F8F087CC8644B143A5D9A4FFFFFFFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7F0F0F0ECECECEBEBEBEBEBEBEBEBEBEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAF0F0F0FBFBFBFFFFFFFEFEFEF8F8F8F2F2F2EFEFEF ECECECEBEBEBEAEAEAEBEBEBEDEDEDF1F1F1F6F6F6FBFBFBFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB F5F5F5EFEFEFF0F0F0FCFCFCFFFFFFFEFEFEFAFAFAF3F3F3EEEEEEF3F3F3FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFAFAFAF4F4F4EFEFEFF0F0F0FAFAFAFEFEFEFDFDFDF5F5F5EFEFEFECECEC EBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBF3F3F3FDFDFDFFFFFF FFFFFFFFFFFFFEFEFEFCFCFCF6F6F6F0F0F0ECECECEAEAEAEBEBEBEEEEEEF2F2F2F9F9F9FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCEAFEEAD2F3D2C1E4C1D0E7D0 F9FCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFBF5FCF5F1FAF1F2FBF2FDFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFFFAE8FCE8D2F5D2BCE3BCD6EDD6F9FCF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCFDFBF7FCFAF4FCFCF7FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E0FFDCCB FFE0C1FFF1E1FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFDFCD7E8D768AA686BB66B97D897D9F3D9FBFEFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFCF2FAF2AEDEAE67C16758BC586BC66B88D3889FDB9F ADD8ADBED8BECCDDCCCCEFCCD7F6D7E7F7E7F0F8F0F5FAF5FCFDFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DD89DED280E2D284 E7D885DBCC77D9CF76D5CD78D8D287ABA466100900A6A066DDD382DCD674D8D370E2DA8C514425 463B16DCD77EDDD580DAD176DDD374ECDC88DFD179DBD074D8CD73D7CD75DAD079DED380D2C979 D8CF82D7CF84ADA55B5F5710DBD287DED47AE2D77BF0E8959F974B787128E5DF91DAD580E8E486 ECE986F3EA88F0E785E2D77BEDE48AF1E88EF9F095EEE58AEDE38AFBF198F8EE97F3E994F2E796 FCF1A2F6EA9FEFE391EBE086EEE389F2E68CEDE288EEE389ECE187FDF298E9DE84E8DD83C6BB61 F1E58CF5EC8FF0E78AE6DD7FE7DE82EDE48AE6DC83E9DF88D9CF78C7BD66BDB35DCEC46FF1E791 ECE088EBE087F6EB91F0E58AE8DD83F4E98FEDE288F0E58CE9DE85EBDF88EDE18BE7DC84E4DB7E EDE489E6DD82F1E88DF3E990E8DE85E9DF86EAE089EDE38CECE28BE4DA82E3D983EEE48FE4DA85 E8DE89F3E994F5EB96F6EC97E8DE89EAE08BEEE48FF7ED98F1E793EEE392EADF8FE5DA8BE3D889 EADF90F1E697F3E69BF0E498E7DB90F4E89CEEE297E8DC90E4DC8AE3DB88E9E18EEAE28FEAE290 EBE392E9E091ECE394EBE293F5EC9FF1E89BE5DC8CEAE28FEDE592EDE592F0E895EAE292EBE292 EFE697EDE495E9E092E9E093F1E89AECE192FEF4A4F1E696FCF1A1E3D888EFE494F1E696FBF0A0 F2E797EDE292F5EA9AEFE494F5E899F1E594EFE391EDE38EEFE58FF0E690F4ED98F0E894F1E997 F6EF9FF3EC9DEEE89DE9E1A1FAF1B2F5F0B2A6A1615952201711003C3517868044D2CB94F3ECB8 F6EFB9FBF2ADF7F1A0F3EE9FEBE297E3DC95EAE39FF7F0B2F7F5BCB7B177221E005A5832DEDCA3 F5F2A9ECE797F1EA9AE8E08FEDE493F4E999EDE292ECE292FBF2A3C9C274E6E194F3EFA5D5D18B EEEC98F1EF9CDED998959148DEDC8BFFFBB2AFA874BBB57FF8F4B3E4DCAD2F2B10606138FFFFD4 948F5D302B08E4DF9FE6E198D9D386E5E29AF4EFB9AFA7842F27150A03002F2B1A8B8A5FE7E6AC E8E9A1DBDC88D4D47AC2BF67C2BD6BCBC37BDAD090F4EBACEDEBA4E8E89DE2DE93D6D185DCD588 F1E99DF1E99EEDE69DE9E49CE4E19CD5D38FD1CD86E2DD8FECE798EFEA9CEAE597E8E394E6E092 DDD78AD0CA7EE7E196F0EBA0E5DE95DBD696E1DCA0E2DE9E857E4D151200393510AFAD6CEEEDB5 9C9674080000B0AC7BD9DA88E2DF8CECE899EEE9A0736D2AE4E1A5FBF6C050491F140E002A250C 7C7756A29E73CCC895F3EAAFEFEBA4E7E697ECED98F6F9A2E3E894E6E99BE7E89CE3E196EDE798 F4EC9AEAE790E8EA90E7EA8EE9EA8AEEED8AE9E681F4F18AF9F591F1EC8DF6F198EBE794F3EEA1 E1D9A1C9C0926254381D1100685F35BCB574EBE8A4F4F1AAE0DF94D4D386DEDD8ED8D787DED689 EBE496F2ED9EEEE89ACAC577BEBB6BE9E596EEEA9BEEED9BDCDB8AD2D17FDEDB8FF5EEA8ECE4A1 ECE6A1E6E09BDDD793EAE6A1EEEBA5F1EFAAEFEDA8E1E19BDBD994E9E5A3FBF6B5F3EEAFEFEAAC EBE9ABC7C587E5E2A3EBE7A7F1E9A7FCF5B4F9EBA6F8ECA5E8E4A1E9E8A8E3E2A1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF5FBF5BBE5BAB7DFB7DAE6DAF6F3F6FEFDFEFFFFFFFFFFFFFFFFFFFCFFFCE7FDE79FDC9E 6CBC6B65AC6571B4708DD58CB8E7B7E1F4E1F7FCF7FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFCC6ECC290DA89C6ECC2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF7FDF9E2 F5E4A6E8CD6FDFBD52EED08EFEECD8FFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E0E1A4EAEBC1FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2ECF2B0CEB0 53B15258BA57E5F4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FAF289CF8842AE419ACC9AF5F0F5 FCFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFAFFFADCF6DCB7E5B7 C0E7C0F7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF7DBF1DBC5EAC5CBF0CBE3F7E3FBFEFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE2E3A8E8E9BAF9FAEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F4FFE2D0 FFE5C8FFF0CFFFFAEAFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE1F1E18FCB8F7AC27A87C887CEE9CEFAFDFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAF7EAA2DAA277C47764B96492CF92BEE6BED1EED1 D5EAD5D2DED2E4E8E4F6F5F6F6FEF6FBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D582E4D787 E3D384E0D17FE6D782DACF77DBD27FDCD68BB0A96B1D1602958F56E1D786E2DC7ACFCA67E6DE90 685B3C3C310DD9D37AC7BF6ADED479E0D677DCCC78D4C56EDBD076DDD278D7CD75D4CA73DCD17E D7CF7ED6CD7ED8D182D9D284645C12D3CA7DE5DC81DCD275F8F09BAEA559696218DFDA8ADFDB85 ECE88AEBE885F3EA87F8EE8CEFE488EDE38BF1E790EFE68CEAE186E6DC82F5EC92F9EE97F4EA95 EDE291F3E899F5E99FEFE492F1E88EEFE68BF3EA8FE1D77CE7DE84FAF196EEE58AEDE388DAD176 DAD176EEE489F0E68BEDE489E9E084E5DC81E4DB80E2D97ED1C76ECAC067D7CD74EBE188EBE18B E7DD86DFD57CEEE48BEFE58CEAE087EDE38AF1E78EE1D77EEBE188F2E88FEDE389F2E88FEBE287 E5DC7FEEE58AF1E88DF1E88DEFE58CEAE087F3E990F4EA93EAE089E8DE87E8DE87ECE28DEDE38E EEE48FEDE38EEBE18CF3E994F2E893F2E893F0E691EAE08BE9DF8AEAE08AEFE492F1E695EBE090 E8DD8DEEE393F2E797EADF90E9DE91E3D78BF3E79CEFE399E9DD91EDE693ECE491E7DF8CE1D986 E5DD8CECE494F1E899E9E091DBD284ECE396F3EA9DE5DD8DE3DB88DFD784E3DB88F3EB98F3EB9A EBE293E3DA8BE3DA8BEFE698F3EA9DF1E89AEBE192F5EB9BEEE393E9DE8EE9DE8EE8DD8DF8ED9D F5EA9AF8ED9DF8ED9DF6EB9BFBF0A0FBEF9FF5EA98F2E795FAF09AFCF49DF4ED95F3EB97F3EC9A EDE696F2EB9EF6EFA4EBE3A2FBF7C8EBE3B269612F2019002821008A844CE0DA9CFBF6B7F2ECAA E7E09EE6DE9AF6EC9FF4EA95ECE38FEEE695F0E99CF2EAA1F2EAA7EEE9AAE7E1A7CFCA922F2A09 585329F2EDAAF2EEA3EBE498F3EA9CEDE393F2E797F2E797F4EA9BF5EB9CD1CA7CEBE799DCD88E BEBB72E0DF87EEEC98DDD7969F9B52DEDB8AF2EEA69F9862918A51F7F2AFE3DCA75552325B5E2A E8E6B4ECE7BC3B340E5F572FE8E1A1ECE69BDFDC8DE8E59BEDEAABC8C691514D261E1C01080701 62602CBFBF81DADA96D1CF88D2CF85C8C37BD9D48DD5CD88DFD791E7E59AE6E598DAD98AD2CF7E E3DC8CDDD686E1D98AFBF7A9F1EEA0C3C177C5C57BC7C579E3E08AF2ED9AEDE895F1EC9AE5E08E E4DF8ED3CE7DE4DE90E8E294E5DF92E9E397E3DCA4E3DCAE635D36060000463F18A7A16DEFEBA6 CAC788B2AA800C01018A854CD5D378EDE589FBEF98F5EA97706316E6D993FDF0B1D6C88FA39463 706338392C032A1F0026140EB2935CDFC287EACE8BE3C87EF0D689E1C77DEDD18BDABB7ABA9756 DBB873F2CE84E7C670D6B857D9BA5BD5B257DEB65FE7BD68E9BE69E7BC67F2C971F9D177EAC569 EBC86CF5D586E1C883FFEFAEB1A76B2E2B010E1000646B33DCE1A7E1E2A2E4DD95F9F0A3F5E898 EFE593F2E999F4EA9AF5ED9CEEE796E5DE8DEDE695F4ED9CEDE795E2DD8BEBE694F8F2A5F0E8A0 E3D994E6DE97E8E098DED591E2DC95EAE69EEEEAA4E4E099E8E69CBFBB75D1CE87D5D28EDDDA98 D3D392C2C482C0C380E0E2A0F2F3B1F1EFABF1EDA8FDF7B0F7F2AAE6E3A0BEBD7DD9D897FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7FCF7CFEDCEC0E2C0CBDFCBE4EBE4FBFCFBFBFFFBF5FEF5EDF9EDD0F1CFA6E4A6 67C56652B75172C171A3D9A3D5F6D5EDFDEDFCFEFCFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAE9F7E8BCEAB799E191CBF0C7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFEF8FFFEE7F4DFA1E8BE5CEDBE65F7D49EFDEAD3FFFBF7FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF9F7E9E6E1A7EEEBC3FCFCF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFBE8ECE8 A9D0A85BB65A66BF65E7F5E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FAF289CF883DAC3C89C587 DEE6DEF7FAF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1F5E1 B1E5B1B8E7B8F6FCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FBF5CEEACEB7E3B7DAF8DAEFFEEFFDFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF9F0EAE3B0EEE5BDFBF2E9FFFBFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8F0 F8E2BDFAEAC4FEFADFFFFFF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE6F4E6A1D7A178C4786EC06EC1E4C1F9FDF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDEDF9EDC5E9C569C3696CBF6C93CB93CBE3CBEEF4EE F8FBF8F3F4F3E7E8E7F1F2F1FEFEFEFEFFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD07C DBCE7FE0D082E1D282E4D582D8CD76D6CE7BE4DD95CCC5892E2707817A42D9CF7EDDD776D7D370 DFD8896D604141360DDCD77EC6BE68CDC469D3C96ADECD79DBCC76D9CE74D6CB71D2C870D2C871 D4CA75D2CA76D5CD7CDBD484D7D0815D5508CBC375DDD479E6DC7FF3EB97CDC4778F883DDAD585 EDE993F5F192F4F08DF3EB88F4EA88F6EB8FF4EA94EDE38FECE28BF0E68CE7DE83EDE489EEE48A ECE28AE6DC88ECE191EEE296E8DD8AF4EA90F7EE94E6DD83E8DF85E9DF85EBE287F2E98EE9DF85 DCD378F0E68CEBE287E6DD82E7DE83E9E085EAE186E5DC81E2D97ECBC168D1C76EE5DB82F0E68D E9E086E5DB82E7DE85E9DF86E6DC83EAE087F1E790EFE58EE5DB84E5DB82E9DF86E6DD82E8DF84 DDD477DCD376ECE388F2E98EEEE58AE7DD84E3D980EFE58CF2E891ECE28BEAE089E7DD86ECE28D EDE38EEFE590EBE18CE8DE89F4EA95F7ED98F7ED98F3E994ECE28DE9DF8AE9DF8AF3E994F2E893 E9DE8BE4D986EADF8EEEE392EEE394EADE91EADE91F7EAA0EEE298EDE194EAE290ECE491E9E18E E5DD8AEBE392EFE797EDE495ECE394E6DD8FECE396ECE396E4DB8BE4DC89E3DB88E2DA87EAE28F ECE494E6DE8EE5DC8DECE394F2E99BEFE699F1E89AEEE394EDE292EADF8FECE191F5EA9AF8ED9D FAEF9FF4E999F1E696ECE191EDE292FBF0A0F3E899F2E695EBE18CEDE48FF2EB93F2EA95F5EE9A EEE797E8E096F3EAA5E9E19EF8F3BACAC49B473E1B231B006D6633D3CC94F8F2B4F9F4B2FAF3AB E5DF93E1DB8BE5DF8DF1E795F5E996F2E894F3EA99F6ED9EF8F0A3F6EDA4E1D995F9F2B3FCF5BB BFB87F251D06716C34E3DE99EFE9A2E6DE95EAE092F9EE9EEBE190F2EA9AE6DF8FCAC677E2E092 E8E49AC2BE74E4E38BEBE995D0CB8B99954CE1DE8CFCF9AEBBB47C9C9659FFFFB6F0E9B27A7845 2A2E00E0DFAAFBF6C9D5CDA63D3408938B54E9E29CF6F3A2E6E68FE5E58FECEE9AECEDA58E9051 3F3D081E1B00191600817C54C1BA90EAE4B4E6E2A9ECE8A5E8E597E2DF8EDDDE93C8C77BCBC97A D3D081E8E493EEE897DDD787E9E695DAD788B4B466C0C175C5C575DAD780ECE992E2DE8BDCD786 E2DE8DE8E394E0DA8CECE69BDED88CEAE599FEFCB2CCC590352D0F0C0500675E38B0A37BC4BA84 E4DD94FFFCB9A296671103017A7234E9E485E4D475DFCA6FC8B45D695605D7C276D6C27C8F7A3B 9E884DA8945BD6C18CC0AA75331D081B0400301600C2A766C1A45DAC8C44DAB76FDBB671C9A263 B98F4FD9B16EF2CB82E8BD6AD8AA4FE4B15EE3AB5FF4BA74FBBE7EEFB174EDAF6EF8BA73F8C171 E9B55EE3B458E8BA5DCEA74EB79748BAA665C9C28B8989571419081011007B7344E0CF8FD1B76D DDC070DDC272EACF80F2D889F7DD8DF3DB8AEBD382FAE294FFF4A5FFF4A6FBE798F5E094F9E79C FAEEA6EDE199ECE098EFE29AEFE49CF2E79FEFE69DEBE299D5CE84E6DF95D9D388D2CD83C5C177 D6D58BD9DA93BBBE77B4B973DBE19DEAEFACECEEAAE7E9A3F4F4ACFFFDB5EEEBA8CDCA8ADDDB99 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F7F7F7F9F9F9FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFEFCF1FAF1D7EED7BEE2BECFE9CFF4FCF4ECFEECD7F7D7BEE8BD89D188 5BBE5965C2648FD28FBEE4BDE3F4E3F5FEF5FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBF7EBC9EBC8B8E9B5C4F3C1E4FAE3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFCFCEDD1F6D297ECBC5FEBBD60F6D49CFFECD9FFFBF7FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF7E9F0E1ADF5EBC7FDFCF6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCF9 D5ECD59BD29A6ABE687FC77EEAF6EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FAF28CCF8B3BAD3A 77C476C7E5C6F2F9F2FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAF6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7FAFAFAFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E3F6E3B2E6B2B7E8B7F2FBF2FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F9F0C3E8C3AFE2AFE8F9E8F9FFF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF3F8E4C1F9DFC2FDE4DBFFF2F2 FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FAF8ECE9E1ADEFEAC1FCFBEDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE8F2E8A8CDA86BBC6B4FBC4FB1E3B1F7FCF7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FCF4C9ECC994D8945CBF5C89CD89CDE5CDE3E8E3 EDEDEDFAF8FAFDFDFDF8F7F8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFD382DBCE7FE2D285E5D686E5D683E3D882D4CC79D8D189CDC78B302A0A625C25D7CD7CD9D371 D8D471DAD385817354362A00C6C068DCD47FDED57ADBD172D6C671D9CB74D7CC72CFC46BCDC36C CFC56ECFC570CCC470CEC673DBD484DAD383706919DBD383D4CB70EFE589EBE38FD0C77B7E772E C7C172F5F09BF0EC8EF4F08DF2E987EDE483F7EC92F8ED9CE8DE8BE8DE88F2E88EE6DD7FE9E080 F0E788EEE588E9E086E9DE89EADF8EE7DD88DED47BE8DE86E9DF86EBE188F2E78FE7DD84F5EA91 DFD57CE2D77FF9EF96E6DC84E0D77CE2D97EE7DE83EBE287E9E085E1D87DDFD67BDFD67BE3DA7F E5DC81E4DB80E6DD83E8DE85DFD57CDBD178E6DB85EBE18BE6DC86EBE18BE7DD85EBE187E8DF82 EAE183E0D779E2D97CECE388ECE388E7DE83E8DE85ECE289F3E98FEAE08AE9DF88EEE48DEEE48D E9DF8AE5DB86E9DF8AE5DB86E0D681EBE18CEBE18CEBE18CEAE08BE9DF8AE9DF8AEBE18BF7ED95 F6EC93EBE189E6DC84EBE18CEEE391F3E897E7DC8DECE192F4E99BE7DA8FF0E596ECE593EFE794 EDE592E8E08DE9E190EBE393EDE496F4EB9CF8EFA1F0E79AECE396EEE696EFE795F1E996EAE28F E5DD8AE5DE8DDDD585E1D889ECE394EDE496E5DC8FEBE395F9EFA0EDE291E8DD8DEEE393EEE393 F3E898F5EA9AF4E999F4E999F1E696EDE292EEE393FAEF9FFBF09DF1E792EBE48CF1E993F4EC98 F4EE9DF6EFA4F7F0ABEAE2A4FDF3BACEC7942C2309150D00A29B67E8E0AAF8EFB4E9E19EF0E89F F3EC9DF0E995F0EA92EBE389EAE08CF2E796F6EB9BF3EA9AF0E898F1E899EDE498F1E9A0DED590 D8CF8EFCF3B4C4BB7A130D00544F26E8E2A4FAF1AEF7EEA6E0D78AE9E190FAF2A1E2DC8BCCC779 D1CE81F1EFA4CECA82E3E18CE3E18ECAC5869F9B52EDEA99FAF8ADC7C286837E3EE9E598EBE6A6 9693580C0F00B5B47BEFEBB8F7F1C2C2BB8A4A410D978F50F3F0A8ECEC96DCDE7EE8EE87DCE07C FBFCA3BFBE79534F24160F000A0100382E25776F5AC3BE96F2EFB2F9FAA8F8FAA8E0E19AC7C782 D6D48DE1DE96E8E298E6E193E7E195E9E598DCDA8DC4C477CDCE82D5D587D2D07EEEEC9CEFEC9F D8D589DDD991DCD893D3CF8AE2DE99F4F0ACDEDA917B7639221C093128119D9662AFA377AFA174 C1B47AC1B66ABFB26D59491B120200695E22C6BE62D9C26AE1C670B59A4891772BF0E197EBD18B A58A49C7AD6FE0CE93E3C890EDD29BE0D8A2B3B47EA5A66CE0DB99F8EAA2FDEDA1FFEFA5FFECA7 FFF1B0FFF6B3FFEDA5F9E296EECD7EDBAD62D5A763CE975AD39D68DCA272D89F71D19564CD9158 D09E5CE0B56BF3CD7BFFDA79FFD676FFE691FAE6A1FFECB3FFFFD2D7D5AA93815B2C140087692A EDCE8CE1B76CE7BC6EEEC87BF2C579E7B96CDAAC60CFA257E2B66BEDC277EDC87EECC67BEEC67D EDCF86EFDD93FCEBA1FFF4AAFFEEA4FBECA1F9ECA2F7E79CF5E69BDFD185F0E196F5E79BE8DC8D D7CE7EDED786E9E597D3D287CACC83C9CD86D0D58FDBDF9ADEE19AE1E49CEEF0A9FDF9B5F3EEAB F3EFA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5DDDDDDABABAB9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9D9D9DA2A2A2BDBDBDDCDCDCF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4F5E4B7E4B6C1EAC0E6FBE6C8F0C89CDD9C74C873 5FBA5E60B65E97D196D1EDD1F6FCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3F4E3B6E3B5B9E8B9E8FDE8F8FFF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF8F1FEE9D2F2CC87EABA59EEC06BF6D69FFEF9E6FFFFFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FDF8E1F9E1B3FBEBCDFEFCF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7FCF7CBECCB94D49372C2718CCB8BECF7EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FAF398D397 4AB34976C775BBE5BAF0F9F0FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEDEDEDC4C4C49F9F9F9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9F 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9DA6A6A6C2C2C2E1E1E1F9F9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE9F9E9C2EEC2B8EBB8D6F2D6EEFAEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FAF5DEEFDEC2E4C2BCE2BCF2F9F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8FFEEDDFBE3CBF5DEC5 F8EDDFFEFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF8F8EAE0E1A4E9EABFFBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F5F1C6D8C676BE7640B340A1DEA1 EEFCEEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFEE2F8E295D8955CC15C77CE77ACD9ACDFE4DF E9E6E9EDEDEDF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBCF7FD7CA7CD7C77ADACA7ADBCC79D4C973DCD282D8D289CBC488342D0B4D4713DED483 D7D16FCAC562DCD486A6997A2F2300BAB55DE1D984D1C86CD8CF6FD9C974DBCC75D7CC73D3C86F CEC36CCEC46DD4CA73D3CB75C6BE69CCC672D1CA79766F1EC3BC6AEAE186C0B65BC3BB68E5DC91 787129B4AE62EEE995E1DC80EAE685F2E98AEEE585F3E88FFCF1A3F2E697EEE48FF2E98EEAE281 EFE784E7DF7CE9E17FE7DD7FE1D87CE0D67FE5DC85D5CE75DCD47FE8E089E1DA81EBE38DE8E08A EBE48BD7CF79E3DB85E8E088E1D983E6DC83E3DA7FE4DB80E9E085E8DF84E1D87DEAE184E0D77A D9D073DED579E6DD80E4DB80E4DD83E2DB82E3DC84E6DE89E6DD8AE6DE89E2DA84EAE389EDE68B E1DB7CE6E07EE3DC7BECE285EDE489E8DF84E4DB80E9DF86EDE38AEEE48BE5DB85E9DF88EDE38C ECE28BE7DD87E4DA85EAE08BEAE08BE2D883E7DD88E2D883E3D984E7DD88E9DF8AEDE38EF1E791 EFE68BF3EA8EEFE68BECE388F0E68DEEE48DF5EB97E7DC8AE9DE8EEFE494E3D88AF2E798F4EC9A F5ED9AF2EA97EEE693EBE392EAE191E8DF90EAE192F0E799E6DD90EBE295F7EF9FF3EB98F1E996 F1E996EDE592E7DF8EE0D888DED586E4DB8CE9E093EAE194EFE698F2E798E5DA8AE6DB8BF1E696 EDE292F0E595EEE393E9DE8EEBE090F3E898EEE393DED383ECE491EEE692ECE48FF0E991F0EA93 EAE490EAE395EEE7A1E9E1A3FFFBC6BCB483241B00332A04ABA268F6EEB0E2DA9AE8E09BFEF7AE F6ED9FEBE38FE8DE88EFE58CF0E68CEDE393F2E8A0F7EEA3F5EC9FEFE697EFE797ECE191F7EC9C E0D488F5E9A0ECE099FFF9B7C6BF8B0D0600756E41FBF1B4F4EAA6EBE297E7DE91FEF6A6EEE997 E0DA8CCCC97CEFEDA2D5D089D0CE7AD2D07FC8C285A19D55EBE899F4F0A5D3CD91726E28CBC975 D9D58DA9A6700A0B027D7B46FFFCC0DFDC9AF5F0AFCAC286271E006A6530F5F1ABF5F5A2D7D97C FAFA97E1E183E7E499F6F1BC968E6F2920110E06000B0501120E05434511929655B7BC78F2F0B9 E3E0ACDDDAA3E0DB9FECE5A6DED694E1D996E4DE9ADAD792C8C982CECF8BE9E8A1EBE79FEEE9A4 F2EDACE6E0A2E6DFA8EAE4ACF3ECB5CFC8916F682C150E051912004C45148E87519F96588F824B B7A871BBAB6BE0D083C1B06CC9B38B1D0702705F32EADB8FFEF2AAFFFEB7C5AB66C6AC67FFFBBA DEC184C4A76BF0D59BF1D79FE7CB99E7CB9AC8AC80C9AD8C9F7D539E7242B67B45C07941B3642E C16D3BC57041BA6B3A954C14813D057F3A03742A008538059443138B36078A3205842E02903D0E 9848187D34037833029252158D49079C5706B47324D49450E1A569E2AB74E9B583FFD9A5C3935D 401100C09353FFDB96FFEE9DFFFAA6FFF3A0FFE996FEEA98FDEE9DFDE594FEDD8CEECE7EDCBB6C CCAC5CC3A659CAAE64D2B76DD5BC71D7BE73E8CE83F9E296F5DF93F8E296F1DB8FFFEA9EFEEC9E F5E28FFDE993F4E08EFAEA9CF9EFA1E8E298C8C57EC0BE79CACA84DDDC99E8E9A5F4F4AEF0E9A5 F6EEAAEBE49CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE9E9E9B4B4B44646462A2A2A282828292929292929 292929292929292929292929292929292929292929282828272727272727282828292929292929 292929292929292929292929292929292929282828272727262626262626272727282828292929 292929292929292929292929292929292929292929282828262626272727292929292929292929 292929292929292929292929292929292929272727262626262626272727282828292929292929 292929292929292929292929282828272727262626262626272727282828292929292929292929 292929292929292929292929292929282828272727272727282828292929292929292929292929 2929292929292929292929292727273131316C6C6CAFAFAFEAEAEAFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F5E5BCE6BCB8E9B7C0EFC08FD48E59B758 3CAD3A74BE73BFD6BFE7EEE7F6FBF6FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFDFEFDE0F3E0BBE6BBC6EAC5F5FCF5FEFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1 FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9F4FEE9D3F6D197E8BC5AE6C15BF9EFBDFEFCE8 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFDE9FFF6D4FEE3BFFEECD7FFFCF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7FCF7C8EAC892D29173C37290CD8FEDF7EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FBF6 AAD9AA67BD6681CC80B7E4B5EFF9EFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8D8D8D87D7D7D2A2A2A 282828292929292929292929292929292929292929292929292929282828272727262626262626 272727282828292929292929292929292929292929292929292929292929282828262626272727 292929292929292929292929292929292929292929292929292929272727262626262626272727 282828292929292929292929292929292929292929292929292929282828272727272727282828 292929292929292929292929292929292929292929292929282828262626262626262626282828 292929292929292929292929292929292929292929282828262626262626262626282828292929 2929292929292929292929292929292929292525253A3A3A777777BBBBBBF1F1F1FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF5FEF5DFFBDFC0F0C0AEE3AED1EFD1F8FDF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF8FBF8DDEEDDC5E0C5CDDECDE0E5E0F8F9F8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFCF3F0D4 E5E2ADEEEDCBFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFCF9F8E9E4E1A7ECEAC1FBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F5F295CA9546A846 91D591DCFADCF8FFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF1FFF1BEEEBE62C16238AD38ADE5ADC6DEC6 C9CCC9E5E4E5FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE5D988E2D587E1D184E3D385E1D282E2D782DED484BFB970B5AF7437300A403A0F D8CD7BD3CD6BC8C360DFD789C5B7982A1E00ACA752E0D882C6BD62DBD172D6C571DBCC77DBD077 D8CD74D3C971D2C871D7CD76D7CE79C8C06BCFC975DDD6848E8836BFB864EFE68BC1B65DCDC474 EEE49C787029A19B4FEAE593E4DF85E8E484F1E889F2E88BF2E68EF6EA9EF1E598EBE08EEBE287 E7DF7DF1E983E7DF79EDE57FF0E886EBE283EBE286EAE18AE3DB87ECE48FEBE38FEAE28DEFE792 F0E893E6DE8ADED682E4DC87E1D984E1D984E7DE85E5DC80E4DB80EAE186EAE186E1D87DDCD376 DAD174DBD275E7DE80ECE385E1D87ADED77CE2DB82E8E188E2DA86DED682E3DB88E5DD87EEE78F EEE78BDED877E5E07CE4DE7CE2D97BE8DF84ECE388E9E085E5DB82E0D67DE2D87FE6DC85F0E68F EAE089DFD57DEAE08AEAE08BEDE38EF2E893EEE48FEBE18CEDE38EEFE590EFE590EDE38EEEE48F F3E893E4DB7EECE383ECE385EBE285EEE58AECE288F1E790ECE18DEAE08DF0E595E8DD8DF0E595 F0E995F1E996F3EB98F4ED99F5ED9CF3EB9BEDE495EDE495EDE496E8DF93F0E79AF6ED9DEBE390 EAE28FEFE794ECE491E9E190EBE293E7DE8FE8DF90F2E99CF4EB9EF6ED9FF4E99AEFE494ECE191 EFE494EEE393ECE191FAEF9FF0E595E8DD8DEFE494F4E999EADF8FE0D885E6DF8AEAE28DF2EB92 F3EC96EBE592E8E095E8DF9DF9F1BABFB989261C003A3317B1AA60FFF8ADEEE79CF4ECA0F3EB9E EFE596E9DE8EEFE391F3E692F2E591F0E48EF0E59BF1E9A5F7EDA6F8EFA6F8EFA2F8F09EFEF3A0 E7DC89FAEF9CF6E898F4E697F9E9A3FCF1C4918964090100928853FBF0B0F7EFA8E7DE90F3EB9B F6F19FF0EE9DD7D586EAE89EDFDB96CFCC79D9D687D7D194A7A35BE6E393E9E699E9E3A5848037 C7C66DCDCA80B7B38516140C5D5A29EDECA6F0F09CBCB967F3EDA9DED7A25249206D6737DFDA9F ECEBA2CFCA7CF6F0A2EFE9A1EEE8A9F3EEB9CCC89D736F4C1413061D1E13191B16000000232508 4D4A2B7F7A58B5B185D9D2A3EAE3B0D7CE97EAE3A8ECE8ABEBE7A8E2E1A3E0DFA1F7F6B8EDE8AB ECE6AFE2DBA6CEC696B3AB7F978E66564D2C140B001F160B463E1E847C4CA19B60B1AB62A59D50 D0C37EDDCC8CE9D58FB9A556B8A261D9BE9D1802026D5739EBD99CE2CB95DDC08B8768349C7D49 B1935E5F41137153217155243F25002D110062461C8469424F3318512C138752269D5325983D0F 932C01952803962C0597350BA44B1AB76730CD7D4CD17E54C67141BE662FB05618B65B18C86F2A AF5816964409A75C25B97341965122A65F23B36623994408933801A14100B35411A6490CD07C3E C2793D9E632B643309B084459C7120B98D38C29642C79C49DFB463F0C979F4D485F4D989FAE596 FFF1A4FFF1A4FFEFA1FFF0A3FFE99EF4DF91E4CB7DDEC376E2C678D6BA6AD9BE70D9BE70E6CC7B E5C97BF5D47FFCEC93FDE38EFFF19DFEED9FE8D88CF6EEA6E8E09BD8D28EE1DD9BF4F0AEFAF5B3 F1EAA6F9F1AAE9E098FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2F2F2D2D2D28A8A8A787878777777777777 7777777777777777777777777777777777777777777878787676766C6C6C696969717171787878 7777777777777777777777777777777777777878787575756B6B6B6363636464646D6D6D767676 7878787777777777777777777777777777777777777878787070706868686E6E6E767676787878 7777777777777777777777777777777878787676766E6E6E656565646464686868747474777777 7777777777777777777777777878787676766C6C6C6464646363636B6B6B757575787878777777 7777777777777777777777777777777878787171716868686C6C6C767676787878777777777777 7777777777777777777777777777777676767C7C7C9D9D9DC4C4C4EFEFEFFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FBF4DAF1D9A9DFA873CA7261BE60 63BA638ACD89BADFBAE9EEE9FCF9FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9DCF1DCC9EDC9C6EFC6DBF6DBFAFEFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDECC7E1E1A4 F5F5E1FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF8F3F8E7C8E7D085DEC35BEACD71 F5E5B6FEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8FFF3DDFFEBCBFFEEDBFFF6EDFFFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4FBF4B1DEB07FC97E80CA7FAADBA9F1F9F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6FBF6AEDBAE68BE6672C96C9FDF99EBF8EAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBE9E9E9AFAFAF 7878787777777777777777777777777777777777777777777777777777777575756A6A6A646464 6464646C6C6C767676787878777777777777777777777777777777787878777777707070676767 6E6E6E7777777878787777777777777777777777777777777878787777776E6E6E656565636363 6969697373737878787777777777777777777777777777777777777878787373736A6A6A696969 757575777777777777777777777777777777777777787878777777737373676767646464666666 717171777777787878777777777777777777777777787878707070666666626262686868727272 787878777777777777777777777777777777777777757575808080A3A3A3CCCCCCF4F4F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFFFCF1FEF1DBF1DBC0E0C0BFE4BFCDEFCDF2FBF2FDFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFFFFFFF2F9F2DCEEDCC5E2C5BFDFBFD9E8D9F4F3F4 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2D6E3E3A8EDECC7FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFDFFFEF2FCF8DDF2E2B2F6EACBFDFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F6F7DEDEDE91C191 50B0507FD07FC1EDC1EDFBEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9CDEECD87D2875BB95B5CB45CC0E0C0 DBE5DBE1E2E1F2F2F2FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDBD07ED6CA7ADFCF7DE3D482D9CA77D9CC7ADCD381CCC579D8D293524C1D 362E0AC1B767CBC564DAD673DED888CEC19D291D00A0994DDAD380C3BB60ECE283E3D47EE7D881 DFD279D7CB72D8CD76D9CE77D2C871CDC36DC7C06AD5CF7ADFD984918A38ADA655E4DB80E0D67E E5DC8DF6EEA69088447B742EEBE693F4EF97EFE98FE8E081EDE286EEE18CFAEFA3F0E498ECE18E F1E78EECE383F5EE89EAE27CF1EA85F6EE8AEDE583ECE385F4EB91EEE791F2E994FBF49EC8C16B BEB662EFE793EDE592ECE491E5DD8AEFE794E2DA86E2D87FE2D97EE7DE83F1E78CEEE58AE0D77C DDD478E1D97DDFD67AE0D779E7DF80E4DB7EE0D980DED780E5DE87E3DA87DDD581E1D985E1D983 DFD77FDED77BDAD473E8E27FE7E180DDD579DFD57AE4DC81ECE489ECE289E7DE85E6DE85E6DC84 EBE28BE4DB85E2D882F0E591E6DD89E0D683E9DF8BE9E18BE6DC87ECE28DEDE58EEBE28CE8DE88 E6DD87EAE088E8DF82ECE483EBE282E9E083EEE588EFE68CE0D67FEDE38EEBE18DF2E796E8DD8D E4D989E7DE8BE7DE8AE9E18DF0E793F5EB99F4EB9AF4EB9BF8EE9EF5EC9DF2E99AF1E799EFE797 F1E997F2EA98ECE492DDD582E0D887E8E08FE7DE8FEDE495F1E89BEDE497ECE396EDE293F1E696 E9DE8EE6DB8BF2E797F4E898FAEF9FFFF4A3F7EC9CF2E797F4E999EDE292E8DE8DF3E996ECE590 E6E087E9E38DECE697F4EFA9FFFFC5C2B988251C01685F38E3DCA3E6E18EE4DE89EFE894E6DE8A EAE08EEEE290E9DD8BF6E899F5E798EADC8CEDDD8FF1E69FECE3A3E8E09CECE49BF0E79BEFE595 F3E896E8DC88FFF39EF9EC98F9EA97ECDE92F5EAB8FBF6CD756D4A0C03008A804CFBF4B3F3EAA1 E5DF8FF2ED9AF4F09EDEDA89E2DF92D9D48FD4CF81ECE99DE9E2A7B2AC66ECE99AEAE899F7F2B0 949145CDCB71D1CE81D3CEA44A462E23200BD7D78BF0F094C7C76ADBD68AECE7B0F2E9C0AAA37C 69643874713DD8D199FDF3B9EDE4A5E1DB96EDEAA0F1EEA7FAF8B7B7B77FCDCEA4BEBFA5959689 979689534C3431270922180023190540362050482B7C74418A8551A09C67A19F6A7C7D4980804B 77733F676333332D1C1D170A150D001A110030260F6B6048A99E78C2B691CDC299E0D79AF8EE9D EADD87F9E698F1DA91C8AE64816819A98E507D5E411A010152351F7D653675592B846438715127 9D7B51A18257957751B19567D9BE90C4AA804225111800005F45234037210F000044250D8B5822 A059228F3E0AAF5224CA6E42D98557E79D69C48547AB6B34C98359BE7944B16A29D18A3BE69C44 F4AC4FC78127A76315D99D59FAC38BA97244CD8E5DE39A66CA763CCF6D2ECD631FBD4F07B04200 AB4708B96323DF9B60C9925C9D692FE6A95FE9B969E8B060D49649CF9548D49D51BB863B9D671D 975F15B67D33D7A25BE5B96EE9C775EECD7EFFE192FFEB9DFFF1A3FFF4A5F7E495F6EA9BF2DE8F EFCF80DBBB6CD9B661DEB860D9B35FF2D483E4C87AE7CF85FAE7A1FDECA8EEDF9DEDE19FFEF5B3 FCF0B0F7EDA9FAF1AAEAE199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E5E5E5E1E1E1E0E0E0 E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1DEDEDECECECEC9C9C9D6D6D6 E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1DCDCDCCCCCCCC1C1C1C2C2C2CFCFCF DEDEDEE1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1D4D4D4C7C7C7D2D2D2DFDFDF E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1DFDFDFD2D2D2C3C3C3C2C2C2C8C8C8DBDBDB E0E0E0E1E1E1E0E0E0E0E0E0E0E0E0E1E1E1DEDEDECFCFCFC1C1C1C1C1C1CDCDCDDCDCDCE1E1E1 E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E2E2E2D6D6D6C9C9C9CECECEDEDEDEE1E1E1E0E0E0 E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E6E6E6F8F8F8FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FBF6A5DAA443B141 4FB45185C88AE2F2E3FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDF0F6F1BDE4BCB6E6B5D3F7D3F0FFF0 FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF0ECCC E6E0ABF7F1DBFEFAF5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FAEEEAE9BCDDCF7A DBB43CE9CD80F9EFD8FEFBF6FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF5FBEAD0FAE2BFFEF9F1FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2FAF29CD39B6CBF6A87CF84BBE6BAF4FBF3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6FBF6B0DDAF65C06060C45888D77FE7F7E5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD EEEEEEE1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1DDDDDDCBCBCB C2C2C2C2C2C2CFCFCFDEDEDEE1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E0E0E0D6D6D6 C6C6C6D1D1D1E0E0E0E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E0E0E0D2D2D2C3C3C3 C0C0C0CACACAD9D9D9E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E2E2E2DADADACBCBCB CACACADDDDDDE1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E0E0E0D9D9D9C6C6C6C1C1C1 C4C4C4D6D6D6E0E0E0E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1D4D4D4C5C5C5C0C0C0C8C8C8 D7D7D7E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E8E8E8FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F4F5DEE3DEBCE1BCABE5ABDCF4DCEEF9EEF3FAF3 F6FCF6FAFFFAFDFFFDFFFFFFFFFFFFF9FCF9F3F9F3F1FAF1DEEFDEC6E1C6BBDCBBC9E4C9E7F4E7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF4F2D8E7E2ACF0E9C4FDF8F0FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFAFCFBE3FAF4CCFEE5C3FFEEDAFFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2CCCCCC 91C09161BE616DCA6DA2DFA2E1F5E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FBF2A4DCA453B75365B76593C293 CBD6CBEAEAEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD9CF74DED377DED26CDACC69E3D67AE4D687E2D881DED77CE1DB8A 685C313E3208B7AD62DFD979D4D06ED6D37CC9C28C362E05847C44E7DF95DBD37AE0D677D4C66B D5C568E1D172E2D279E2D17AE3D47FD4C970D2C96EC9C267D0CB71F5F09E928C40A09A50E8E186 E0D57FF2E8A0F6EFA19F96574D4511D8D582EFEB9AEBE496EDE688F3EB8EE8DE89F2E894F1E792 F4EA95F4EA91E9DF86E3DA7FEDE489F0E78CF7EE93F2E88EEFE58CF7EE91F3EB89DFD576E8DF81 D4CB6EC8BF65D7CF77D9D17CE9E38FE9E291E7E090D7D07ED5CE75E1DA7FE8E186E4DD83E2DB81 E6DB83E8DE85DED47BD2C76EE1D67DE7DC83F1E48EE6DE8FDCD586DDD685DFD984DBD57EDBD67B D4CF74DED97DE5E084DDD87DE9E489DDD87DE9E489DCD57BDDD87DE6E088E7E088DFD982EEE892 ECE48FE8E18CEBE591E4DC8AE9E090E0D98BDED687E4DC8BE5DF8BEBE48EE6DF88DFD97EE2DD81 EBE587E6E082DFD979EBE285F0E589E9DD81E5DA80EBE088EADE8AE7DB8AEDE092F5E89AF5E69C E7D992D9CB80ECE18BF4E891F6EC95F3E892ECE18CE9DE89EFE48FF5E997F2E795EDE290F0E492 EFE595EFE699F3EA9BEEE696EDE594E9E18EEDE591F0E897EDE594F2E99BFBF2A5ECE399E7DE92 EEE598F2E99AEDE594EBE492F0E893F4EC99F1E994F5ED9AEFE794E5DD8BEADF90ECDA93F6E59A FAF099F7F197E9E592DCD992F9F7C2C2BD92221E003C3615CEC987F5EFA3EBE391EDE592EAE28F E6DE8AEFE796F1E998E3D888E2D787D9CE7EF6EB9BEFE494E8DE93EDE39CF3E9A3F0E69FEDE39C F0E69FF4EAA3FCF0A6FDF1A5F4E99AF0E495F0E897F5ED9AF5EDA4F2EBB55C532E1A1200A0986C F3EEB2E9E699EFEB92E4DE83EBE38DD7CF7EE1DB8FDED68EE6DF9AF6EDB0BDB474DDD78EEEE89D F5EFA58C873CCECB7EF3EFA9EAE7ACA2A06A191802BEBC7AE9E9A2D6D68ACDCB7FD7D78DE2E29E E7E8ABE7E8AF78784347480FAEAF74F4F1B6F4EBB1E6DB9EE6D99CE9DEA0D7D08EC8C683CDD08B C6CF88DDE099EED795E9CB8DEAD094B09B645B4918392E021812000C08000C09000404000D0F01 0004010B100117190145451A6764398E8A5CB6AD7FC8BA8BCCBB88F7E3ADEDD89FFCE5ABE6C88D D1AA6CC69A579A6924784300623000926521825A207450201D0000906E40E2C28BF5DA96E3C183 CFA26FEDBA8DB786579E76406145059C8641A1844893693C9156382F0000160700110100220D02 967C2BB59A47FCD488FEEAADFEC291D28150AC6326AE742A340B00401D00C7A781FFF4C7FFEEB9 FFECAEFFE59FE9B56ABD8A40F4C684FDE3A8D5B984B08F53FDD597F2C889FDD092FACA8BF4C082 D49B5CBD7D419149129C4E18A6552198460CC97831FFB369FDB56BFDCA80FBCD80F4D281F0D380 E1C06EDFB263D19448D2863ECF8331C98827BE7B22B87624D08B3FDB9851D89951FCCF83FEEB9D FEF1A5FFF3A9FFEDA6FFECA2FAE095F4DA8FF9DD93D7BB72C0A25BCAAC66D3B56FE6C983FADE97 FFEEA6FFFBB4FFFFB9FCF6AEEEE89EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F8F8F8 F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F3F3F3F1F1F1 F5F5F5F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F2F2F2EFEFEFEFEFEF F3F3F3F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F4F4F4F8F8F8 FCFCFCFDFDFDFEFEFEFDFDFDFCFCFCFBFBFBFBFBFBF9F9F9F8F8F8F4F4F4F0F0F0EFEFEFF1F1F1 F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F3F3F3EFEFEFEFEFEFF2F2F2F6F6F6 F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F5F5F5F1F1F1F3F3F3F7F7F7F8F8F8 F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAC9E9C8 8DD08F93D0A4B5DCCCF0F8F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F2F3DFE4DFB3DBB2BBE5BAE4F7E3 FDFFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD FBECE3F8DCCBFDE0C6FFECDAFFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF8F8EB EAE8B9D3CB61D8BE4DE6C163F8EBCEFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF2EEE9C2E9E2ADFAF9EE FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2FAF29ED39E64BE616CCA65A0E199EFFAEEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7FCF6B3E5AD68C95E5DC05782CB7FE5F4E5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7 F2F2F2EFEFEFEFEFEFF3F3F3F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7 F5F5F5F1F1F1F4F4F4F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F4F4F4 F1F1F1F2F2F2F5F5F5FAFAFAFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFAFAFAF9F9F9F8F8F8F6F6F6 F2F2F2F2F2F2F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F5F5F5F0F0F0 EFEFEFF0F0F0F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F4F4F4F0F0F0EFEFEF F1F1F1F5F5F5F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F9F9F9 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDF4F8F4DDF7DDC4F3C4AFE7AFB4E2B4 C4E4C4D6F3D6E8FEE8F9FFF9FFFFFFFFFFFFE4F1E4C4E3C4AEE2AEB6DFB6CBDDCBE0E7E0EFF6EF F9FCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCF2E1F9E0BAFBDDB6FFE7CFFFF6EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCF6EEEFC9E7E7AFFAF3DFFFFAF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC F3F3F3BFE3BF85D38561C36185D085D5EFD5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFAE1FCE180D18033A7337ABB7A CAD5CAD6D9D6EAEAEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D87CECE283EDE277EADD73F1E285E4D589E3D77FDDD774 E0DA81695D34372A06B3AA61DCD77ACBC966D7D57DDAD5953B340F787144E5DC95D1CA72D7CF70 DED175E4D576E6D475DAC96ED5C56DDECF7AE1D47BDED57ADFD97BD6CF76EAE592A39D53817B35 DAD378DED57DDAD189E7E090B9B374524B18D9D783F4EFA2E9E29BF7F092F8EF93EDE38CF5EB93 F4EA92EEE48CE7DD86E7DD86EBE18AECE28BEAE088EFE58EF0E68EF0E68FEDE486ECE37EE9DF7D EFE684F0E888EDE487EAE388E1DA82E1DB87D5CE7CD8D180DCD585DDD781DDD67BDED77EE3DC83 E2DB82DBD27ADDD47BDCD37BD6CA75E0D57FE1D580E7DB89DED689D5CE81D7D080DCD681DBD57E DDD87DD9D477E2DD81E1DC82D5CF78EDE792E8E28CDDD77FDED880E4DE87E7E189E0DA85DCD680 EDE791E8E28FE6E08CECE692EBE493F5EEA0ECE598E3DC8DE1DB8AE1DA89E6E08BE8E28BE6E186 E8E386EAE588E4DF7FE3DE7FE4DB7FEDE288EBE086E9DD86F0E48FF3E795F2E596F3E798F3E59A F0E29AEDDF98EBDD92DDD17BEADF87F1E68EF0E48CF2E690F5E893F0E490F5E995F2E693EFE390 F3E796F5E99BF2E89CF0E79AECE393EDE592E9E18EEBE38FEEE692EBE391E8DF8FE8DF92EBE296 EFE69BF1E89DF1E89AECE394ECE493F2EA96EFE792EBE38EEEE691EFE794EAE291F0E595FAEDA6 F9EA9EF3E795F2EB97F0EB9FFFFEC0B8B5851A1600353012BEB97AFAF6A8E6E18CEFE796F1E998 F2EA99ECE493ECE493F2EA99EFE796EFE796F7F09FF2EA99D4CC7BE4DB8EEBE199F2E8A1F2E8A3 EFE5A0F2E8A4F1E7A2F4EAA3F0E69DE7DE93E5DC8FECE491F1EB8CF5EF99FFFABBDFD9B02A230E 342F1AC4C089F9F5B0DFDB87F4EE95E5DB83E9E08BE3DC8BD4CD83D9D18DEEE5A4C2BA78D3CC84 E8E394F3EF9CA8A455BDB96EF4EFABF2EFAEE9E9A94D4B0F757240DAD89ACFCD8AC5C579C3C373 D5D787DADC93EDEEADF3F3BAB0AE74716E315251179D9B60E3E1A5EEEAAEF0EAAAE5DE99EDE599 FAEF9EEBDF89FAEC94F0DB87E1CD7DD9C378C9B471CBB87DDECE9AB9AC7B958D6099956BACAD85 A6AA829FA174B6AE7DCEC492CBC08CAF9F68EDDAA0E8D194DEC382CAAC67C7A55D9A772C926B20 8960229D6E389F6A2F80440EC18F48F0BE7AF1C384E8C289AE9057280900937339B39358B7994F 96772EB49052CCA26FA9824DCCAC6DCFBC73E1CC81F0CC8BF7CA9AD6987A9E624E613F33826C45 C2AF70CFBC6FFFE192F5CD84CC9154A5632C9C5A20CF914EFBC476CEAA6B3323160A0100746F5A 9D997CA19370F0E1A8FCDD97A17F33F7DE97FFFFC0F3ECB2EDE7AAEBE5A5DDD491F9F1A7E3D487 E3D989FFF8ABFFDD94FFD28FDB9358AB5924BB632D993D08AB550FF5AB62F5C47AF5CC7EE1C270 E5CA77D9B968E4BB6AFFD787F5D183FBC06AFFBE5BF8B155F6B05EECAB5FC37B33B16E28C5893C AE782AA6782CC59D56DBBB79E0C783F5DF9BFFF0ACFFFBB4FFF2ABFCE79FF9DE95F1DD92DFC67C D6B86EE3C47ADFC175F0D689ECD686FBE896FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCF5F5F5DEDEDEC4C4C4 B4B4B4AAAAAAA1A1A19C9C9C9E9E9EAEAEAEC2C2C2D0D0D0E4E4E4F9F9F9FFFFFFFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFC DFF5DFB9E8BBAFE0BCB5DEC7D2EDD6EAF7E4FDFEF1FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCFDE6F3F3D5E7DCC6DEC7C3E3C2D6EED4 F2FAF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFF3F3FDE7E0F5DEB7F6E8C7FDF9F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFBF5F6E2E2E3A5DDC667DEB447EBD293F5EBD1FDFBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1EAEABEE2E2A7 F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F9F08DCE8D53B8506CC965A9E3A3F0FAEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8FDF9C5EBC884D1886AC16B7FC67EE5F4E5FEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFEFEFE F2F2F2E2E2E2D2D2D2C1C1C1B1B1B1A4A4A49F9F9FA5A5A5AEAEAEB7B7B7D1D1D1EEEEEEFCFCFC FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF1FEF1E0FBE0C6EEC6 C0E9C0C3EAC3C9EEC9CEF1CED2F1D2D5F1D5D4F1D4CDEDCDC4E9C4BEE9BECAE9CAE1EAE1F3F2F3 FCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF7EFFEEBD6F7E0B8F4E2BAFAF3E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFFCFDFCEBF3EBC3EDE1B1FBF8ECFFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9E6E6E6CBE5CBA5E2A555BD5567C067CAE9CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9F8E9BCE7BC6FC36F4AAD4A 9CCB9CEBE9EBE8E8E8F2F2F2FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD177E4D97CE4D870DCCF69DECF73E3D488E1D67E DCD675E2DB8472663E312402A79C55E5E084D5D271D9D77FD2CD8E342D06787142D9D089CBC46C DBD273DACD71D8CA6BE0D070E2D177DECE78D5C671C6BB61D6CC72DED679D1CB71DBD482BDB66C 7E7630D8D177E5DB84D5CD81E1DB87C5BF7A3A3405BDBA66F2ED9EE9E398F9F394F5ED8EF2E98F F7EE94FBF198F9F095F1E78DECE289EDE489F4EA90EBE188EDE48AF1E88EF0E68DECE284EFE682 EFE584EBE282EBE283E9E085EDE58CE3DC84DBD582D1CA78D9D281E7E090E0DB85D5D178D5D178 E2DC86E4DE86DED780DBD37DDAD27DCDC36ED5CB76E0D680F0E794DBD485D4CD7DD7D17EDDD781 DED87FE1DC81DAD57AE5E084E2DC84D2CC76E5DF8BE0DA85E5DF87E7E189E9E38BE8E28AE9E38D E9E38DEDE791E8E28EE4DE8AE7E18DE9E291F0E999E9E293E2DB8CE4DD8DE6DF8EEEE893EBE590 EAE48DEDE78EE9E488E3DE82EBE58ADCD27AEBDF89F1E68FEBDF89E8DC88E7DB89EBDE90EDE091 EFE294EEE194EBDD92E7D98CE2D681E8DC87ECE08AEEE28DF1E591F4E895F3E794F3E697EFE393 EEE192F2E597F3E99AEDE495E6DD8EE5DD8BEBE38FE8E08CE0D883E2DA85EDE593F2EA98EAE192 EDE497F6EDA1F5EBA2EFE69AE9E091EAE290F0E895F2EA95EDE58FECE491F1E997F5EC9CF8EFA0 E9DD8EF5EA9BF6EDA0EBE49BFDFBBFDCD89F332D02352F0ABAB47AECE7A3E9E394ECE491EEE695 EFE796F6EE9DF3EB9AEEE694EDE594ECE493DED685EBE392E0D887C2BA69F2E99DFDF3ABFFF6AE FBF2ABF6ECA7F3E9A4F2E8A3F3E9A1EEE59BE5DC90E5DC8DEDE593F6EE97ECE594EBE3A0FEF8C5 BFB78A0B07003F381DDAD498EBE39DE7DF90E4DA85E7DF8AD9D580CFC97ACFCA7FDED891C4BD75 BCB86BDEDC88EFED96D9D782B3B060E9E59CE9E6A4FCFABE82804E282402D9D49AE5E1A0D6D48B CAC878CAC777CCC97ED0CD87DDD89BF0E3A5F1E4A6CAC487747536585C1B868D4BCACF89F2EEAB F7E7A2EDD28EDDB673CEAB63B9B15EC0BF6BCAC575D5CC81DDD18CDCCC8CC3B375C0B477D2C88A EBE6A6E6E4A3FAEFAEFFECADF0D091E0BF7DCAA661A47E37876115A57C2EAD7F2DB48430E6B662 F4DC87FFE49EB99255AB7F3FC3924BC99D56B38641BD9757B4975C8770352E1A00BDA76BE5CB8E FAE7A0BDA45CE6D390EBDCA0D7C88BEED997FFF0AAF6D793BA8E51774616461103522015D7AE97 FFF2D0ECDDACF7E6ABCD9A5EB067309F541BE0A467E2B571FDDC93F7CB81FFE4AAE7DAB68D8973 393E2B272E191214003A3012A592529B853DA9975372672C2F2D147A7F48B5BA7FBFC27CD8D887 D8D476CEC05ED2BB58EECB6FF2C879E8AE6DF5BA83D08855A85419A75516AA5D19E5A660FFCC82 FFED9FFFDE8BDCB661E6C36DF2CD77EBC36EF9D179F5BE61F3BA63F0B666F7C176FFC478FDC676 F3C16EF1C36FE1B969D1AC63B99451A16E2CC18540BE8742C2964FE8C77DFFE397FFEB9DFFF2A3 FFEFA0FAEDA0F9F0A3F6E192FBE192E9C471E9C571FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E7E7E7B4B4B4 7A7A7A5858584545453434342A2A2A2E2E2E4D4E4D717271898989B4B4B4E4E4E4FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFFFDEFFEEFD5F8D5BCE9BFACDEAFB0E1B0D0EDC3F2FADAFBFDEEFAFDF8FCFEFCFEFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFCFEFCFAFDFAF8FCF9EBF5F3CAE4E2B9DFC8B7E0B8DCF0DB F4FBF4FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFCFCFBF6EDE7E2AEEBE8BBF9F9ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFEFBF8F8E8EAD8A0DEBB5EDEBB61E9D296F7EFD8FFFDFBFFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAEFEBEABE E4E2A9F9F9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDF8ED78C77741B04077C775BFE6BEF4FBF4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFDFCDAEDE8A3D4B875C17F7AC479E4F3E4FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEDFDFDFB6B6B69191916F6F6F5151513A3A3A3333333E3E3E4D4D4D5A5A5A8D8D8DC9C9C9 ECECECFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF9FEF9 F3FBF3E7FAE7D9F8D9CAEDCABCE3BCAFE2AFA6E2A6A9E3A9C0EEC0D9F9D9E9FAE9F2FAF2F9FAF9 FDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF9F2EFEAC4E8E4B0F3F2D8FEFEFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFEFFF0FDF9D8FBEAC4FBE3C3FEF9F1FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF2F2F2CCCCCCCCDDCCC0EDC04EBB4E4EB54EBCE2BCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3EBD38ECA8E65B665 78BE78C1DFC1FEFCFEFAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD07AE1D67EE1D670DCCF6ADACA72E1D287 DFD37DD7D171DDD7817669422517019F9550E1DC82D1CE6DDAD880E4DFA049411B746C3EDED58E D8D078DDD475DCCE73E1D375DFD071D8C96FD4C46FD6C772DCD177D7CE73D8CF72E0D980DCD684 BFB76E676019D5CE74DED67EDAD383E7E18BD8D38A544F0F9A9845F7F3A3F6F0A3F5EF90EAE281 EDE487F6ED90F4EB8FF5EC8FF4EB8FEEE58AE9E083EEE588EAE185EDE487F3EA8EF1E88DE9E081 DBD16FDCD271E3DA7ADED576E9E085ECE48BDFD880E1DB87E1DA88E1DA89DFD887DFD986D6D47E D7D57FDFDA86DFDB84E4DE89DAD480DAD580C8C06DCDC572DAD27FE8E08DE1DA88D8D27EDAD47E E0DA83E3DD83E6E186D4CF75E2DC85EAE48FDCD684E0D988D0C977E0DA82E3DD85E4DE86E3DD85 E3DD87E7E18BE5DF89E5DF8BE4DE8AE3DD89E3DC8BE7E08FE3DC8BDFD887E2DB8ADFD887E0D989 E4DD8CE7E18EEDE793E9E28FE5DF8BEFE895ECE28DEEE48FEEE490E9DF8AE9DE8CF0E593EFE492 E7DC8AE6DB8AECE191EBE091E6DB8AF0E592E9DF8CEBE18CF1E694EFE493EDE293F4E999F0E596 ECE192EADF90EBDF93EDE394EAE192E2DA89E2DA87ECE48FECE58FE3DC84DFD87FE5DD89F2EA96 F5ED9CF2E99BEAE195E9DF97E8DF93EAE192F0E896F8F09DF5ED98F1E994EBE390EDE594F3EA9A F5ED9DEEE992EAE392F8F1ABDAD19AF6F0BD514B1D221C03B2AC6DFAF3AEDED589E0D788EDE594 E9E091E8DE90F2E99AF6ED9EF4EB9CEDE495EEE596DFD687E2D98AF6ED9EE9E091F8EFA3F5ECA0 F8EEA6F8EEA7F7EDA6F7EDA9F2E8A2F6ECA4F4EBA1EDE497EBE292EFE796FAF1A3E1D88DF9F2A9 DFDA98FCF6BEAFA9740600006F673CFDFDC8F2E8A5F4EC9CE8E38CD9D981E6E391E6E596E9E79C E3DF95C2C170E1E18AE6E68CEBEB92B4B360D9D78AEBE7A5EDE8B0C8C28B221C00A39E69FDF7BA DFDB94DFD98BD1CA79D7CE7FDFD48CD1C682E7DD98F0E69EF6ECA8FAEDADE5D89978692B362501 523D017C672ABFA767E9D08FFFEBA9E9DD9AECE6A3D8D894CCCE8AC2C883B2B570B8B871BBB46C DECE87FBE29BE1C179DAB56FAF8440754A068056108D6119B88E43E4BA69FFD27FFEEF9CFBDE89 E7BA62AD7F296C47046E500FC8A55FE8C179EEC87DF5D28AE6CD8AF9E7AA807438291E00FAEFB0 ECDE9DE8D890CDC47AEAE7A1C6C884F0E7A7FFF0B4F3CF91B37C40683401AF8552AC9260241407 241707827455D8C7A4AB946D896738A87E46F0C483FCD68DFFE79AE8DC8CDEDE90FDF4B7AB9C6C A5A170ECF5C3DEEBBCD1D7AF42381D1000002705003C1A045E4423836F43260E0C4730017A6C2F BFBB76E2E79BF3FCAAE9ED9BF2EE9EEEDA91DEB974FCDA9BFFCE909C692A8F4C10BF652E9F3700 CB692BFDB76BCC9E478D771ACBBD5EE3CF74FCE792F0CF7BFEF09CFFF2A2FFDF92FAD384FFD687 ECC873D2AB52E7C069F3CE7CFDDB91FFECA9FFDD92FFD986CFA252B27F32BE893DB88137E1AB62 F6C97FFDEFA3FBE799F2D888FEF9ADFDEFB1FFECB4FFE9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D3D3D3 9797975C5D5C4F4F4F5151514949494242424343434748474B4C4B404040606060989998D2D3D2 F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEF9FFF9EEFEEEDEF5DDCEEECDC1EDC1C3ECBBC9EBBACBEAC2D3EFD2E5FAE5F6FFF6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6F5E6CFECCECAEACAC9E6CEC7DCD6CCE3D5D6EFD7 F2FBF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFBF1E2E4AAE6E8B7F8F9ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFDAECD9A7DEBD67DFBB5EE9CA7DF6E6C0FFFDFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFEFBE6 F5E9C1F1E1B5FCF9EFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEF8ED71C5703DA93C80BB80CDDACDF6F9F6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFCE0E5EAA7C5B667B46D61BC5FDFF1DFFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDBEBEBE7676764B4B4B3D3D3D3F3F3F4A4A4A5555555555554C4C4C323232414141 686868ABABABDEDEDEF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFFFBF0FFF0E5F6E5D9EED9CFEDCFC8EDC8CBEECBDCF7DCF1FFF1FDFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCF6F7DAEEEFBCECEDC0F0F1D4FCFDF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7D8EEEDABF7EDC2FFF1E5FFFCF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF3F3F3D1D1D1DCE2DCD8F3D85DC55D49B949A5D9A5EFF6EFFCFDFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDFBFFFBB2E2B258B658 5BB75BABDDABE0F3E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED281E0D480E4D875E5D775E5D57D EADA92E7DA86DDD779E3DC8882754E211300887D3BDBD57FDDDB7CD7D57EDAD595494118756E3E E6DE95E4DD84D0C768D2C56AE5D77AE2D476DDCF75D7C872CFC06DD0C56ED3C96DC5BC5ECAC368 CAC36ED5CE8190883FD3CC75E6DC84E1DB87E0DB81E6E2927A762E615E11DCD889F0EB9AE6E082 E7DF7DEDE583EFE686E7DE80E5DC7EEAE183EEE587ECE385E3DA7CE5DC7EE6DD7FEEE587F0E789 ECE283D9CF6FDAD070E1D77AE2D97CECE288E6DE86DFD880EBE591E9E391DDD685D5CF7EDAD885 D2D07CD1CF7CD0CE7CCBC975D6D37FD3D07CDBD582CAC572D1CB77D8D07DD6CF7ADDD780D3CD76 D6D177DDD87EE2DC83E6E187D5CF78E1DB86E9E290DED786E7E091D6D07EDDD77FE4DE86E9E38B E6E088DFD983E1DB85DBD57FDED884E1DB87DFD985E5DE8DDBD583D5CF7CD6D07DDED786DFD887 E3DC8BE4DD8CE6DF91EDE697ECE596E7E091EDE698EDE193E2D787DDD282E1D686EADF8EF8ED9C F4E997E6DB88D9CF7BDAD07CE5DA87EEE390EBE08FEADF8EECE190EFE494EFE595EFE497F1E598 EEE395ECE095EADE94EADE92EADF93EBE392E5DD8AE3DA87E9E28AECE58CEFE88FECE58CDCD47E DED683F3EB98F0E898EFE59BEFE59DEEE598ECE396EBE292E9E18EF1E996F4EC98EAE28FE3DB8A E9E091EDE595E4E287FEFCAFE8E3A7FDF8CE685F3E160E00736B33F6F1A8FCF6A6EFE492ECE090 EADE8FE8DF90E7DE8FEFE697F2E99AF1E899EFE697F6ED9EF2E99AE5DC8DF6ED9EE3DA8BF4EB9E F7EEA3F4EAA2F3E9A2F4EAA3F5EBA5F3E9A2F6ECA4F4EBA0ECE397EBE393F2E999F3EAA1F5ECA3 EEE699F2EC9FFFF9B5FAF4BD6F67421E1400BAB087F9F1B7F4EDA1EDE793DDDE86ECEC9AEBEA9C E8E89EF9F7ACC2C171EAE994E3E389E0E088BEBD6BCDCA7FE8E3A2CFC992E7E1AD6059373B340D E8E0A6E9E19DF2EA9CE3D886E1D483EEDE92EFDE96EFE095D9C97FE1CD87D4B877E1C182F1CF94 DFC084AE945C897844776E2E656321858847AAAC75C1C08CD7D4A1ECE5B4EADDACD3C390BCA872 B79E65B99E61A78A4A957634A28140CAA466E8C789FEDB9CFFE8A5FFF1ADC5A85F9F813B89691E 7C5E1283671A9A7F39CCB46AECD48FFBE097F6D88DF6DB90F0DB91F3E4A2EDE9AA6E6E37373602 F2EEAFEBE4A2D3D287BEC175EDEEA6ECE7A5FFECAFCEA36C7C3F09AB6933D4A76DFFEFB5EEF1B6 CED79C7D81590F09001A0B00190A002E25094E4711D1C57BFEE897F1DE8DDBD789E0F1A7E8EEAE D1CB964143195A6645AEB99CB4B29CB3A089653A23864831A9634CB77156C88568DD986D965529 65330C4A2E0031290D6B6F42BEC492ECF5BEF9F8C2DDD198F1DA9FEAE4A8F2DD9DBE8F55C26E39 CF5C2ABC480EBC5E17ECB55ED3BC5BD0C664EFE184CBAC59DCBF6FE9D287EDD58DF6DF97FCE79B FCE999FEEB91F9DF81F1D579EED27DE3C177DAB774EFCD7DF7DB80F7D67CFFE088FDDE88ECCC79 DAB767C59246B78136AA712BA26722C78B49E0B178FBD39DFFE7ADFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5 D3D3D3A7A7A78283828B8B8B9E9E9E9F9F9F9E9E9E9C9C9C8A8A8A6A6B6A292929262626505150 A6A6A6F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEFDFFFDFBFEFBF3FDF3DEFDDECBF2C9BAE6B8B2E2B0B8E8B8C9F2C9 DCF9DCEAF8EAEDF8EDEBF8EBE4F6E2E7F7E5E8F7E7CFEECFB5E5B4B5E3B5C2E3C2DAE2DCECEFED F9FCFAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1E9E3B1ECE8BAFAF9E8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBFAF4E6EAD49DE0BC5FDFB243E9CA7DF7EFD9 FDFBF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDEA FAF6D1FBEBC7FEE7CEFFFAF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8F8E76EC66D42A8418BB68AD7D5D7 F7F8F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE4E1E5A8BDA958AB574BB54ADBF0DAFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCB9B9B96E6E6E5454545E5E5E7A7A7A9D9D9DB3B3B3AAAAAA8F8F8F595959 2E2E2E1D1D1D616161B3B3B3E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEFDFFFDFCFEFCFBFDFBFAFDFAF9FDF9FAFDFAFBFEFBFDFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF0F9F8D4EDE8B4EAE3B2FBF5E6 FFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEF9F9F9E6EFEFB9E8E89AF3F2CAFFFEFEFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF7F7F7E0E0E0EBEBEBE8F5E878CF7855C0558DD38DD0EBD0F8FCF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEF9E0F9E092D692 43AF4368C268D2F5D2F4FFF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D486DDD17DDED16FE1D372 E2D27BDDCD86DDD17ED8D374E4DD888A7E57211300776B2CCDC773DBD77BD5D37CE1DC9D564F27 595223BBB369E0D980E0D878D9CA72E5D77BE3D678E5D67FE2D37FD3C370CEC36BD5CB6FCDC465 D1CB6ECFC771E2D98C7B722BB6AC59E5DC84E6E088DCD77CF2EF9A827F2E575408D1CC7EEDE896 DAD377E0D875E0D773E6DE7DEEE586F1E889F0E788F1E889F3EA8BECE384EBE283E2D97AE6DD7E ECE384ECE283E3D87BE4D97DDFD67AEFE68BF1E78EDED67DE3DB85F3ED99E8E18FD9D281E3DD8C E4E190D3D280D1D07ED5D482D2D07EDCDA87D7D582D9D683C6C16ED5D07CE4DE8AE5DF8ACEC870 C7C267CCC76CD6D176DDD87FE3DD85DFD984E2DC8ADBD483C9C272E5DE90E4DD8CE5DF87E1DB83 E1DB83E4DE86E3DD87E9E38DDFD982DED884DDD783DAD480E4DD8CE4DD8AE0DA86DBD581DFD987 E2DB8AE6DF8FE9E293E9E295EFE79CEFE79CE9E196EAE29ADFD68BDBCF82E3D889EDE293EBE091 EBE090F1E694F3E895E7DD86DACF79E3D982F4EA95E2D685EDE293EDE292E4D98AE9DD91F2E599 EDE195EDE197EFE399F0E49AEFE29AEADF93E9E090E6DE8CDDD581DFD780E2DB83EBE489F3EC92 E3DB84DCD480F4EC99EEE695E8DE95EBE19AEFE69CF2E99CF0E898EBE392EEE692F8F09DEDE593 E0D788E5DC8EEBE494EFF095E8E99EFFFCC6A49C7A281D02493D15D6CD8EFFFAA8F1E78DF8EC95 E6D688F1E596EAE192EBE293F0E797EBE292E6DD8EEDE495EFE697F3EA9BE9E091F2E99AE7DE8F F1E89BF1E89DEEE59AF2E89FF8EEA7FDF3ACF8EEA8F8EEA6F2E99DE9E091EDE593F8EF9FF5EBA6 EDE49BF0EA97EDE892EAE497F4EBAFE2D6AF3328152E2306E1DAAAEAE7A3EEEB9BE5E793E1E293 D3D38AD0D08AF1EEA9A9A75BE3E28FEBEA96E0DE8BCECA7EC1BD76E6DFA0CFC68FE6DDABB6AF7C 0B0300AFA569ECE2A1FBEFA4F2E594FEED9BF5E190E2CC81E2CA7FBEA359D0B069D5B36FF2D390 FFE6A7F4D698FFEDAFF0E5A7F3F1B1D4DB9997A06277774769623963532C69502D6745255C3413 724826774F28B69264DBBE8CF1D9A2F1D8A1E5CC98A58E5998824C7A652D5F4B105C4B107A6D30 B5A96BCEC484F7F0AFE3DC99DDD28BE9D88DE7D488FAE699E4D387E9DE95D9D796DFE3A66A713C 41470BEEEEAFE7E4A1B2B36ABFBC75E9DC999C80417B4F156A2F00DAA16EFDDFA8FED89AF7E8A7 CACF8AD6E19FCDCA961A0F08180A0499927DDEE2BFCED59FE8E89FFDED9EFBE79AFCEFACFAF5BD FFFAC2DBC68F7B6E481412001E1D0E070000200706663017974E2FB76544AF58368A3315953B16 A14D2692472396593993684F462B0C0F0402332F148D8E68E0E5BAF4FACCFDFCCDF9F5B9FBDFA4 E1A56DC96D36E37B3DBC5915B96C1DCD9B44FFE288F5DB82FBF19CFCEA9AF7EDA6FCF2AFFDF3AF F9EEA6FEF2A2FFFAA1FCED8EE8D376FBEC97FEE59BE4C480F8E590F9E483EBD878F7E485ECDA7C F3DD84F5D681EBBB6EE7A962E59857D0783DC0632BCB7B3FBD7131D18744FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBEDEDEDDCDCDCCECECED3D3D3DCDCDCDDDDDDDEDEDEDDDDDDD3D3D3B3B3B3494949212221 353635919191F1F1F1FFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFF9E3FFE3DFFADEDEF4DDD2F3D2C5F0C5 BBEBBBB9E7B9C0E7C0C2E7C1BCE6BAA3E19CA9E2A2BCE7BAC6EEC5CCF2CBD8F3D8E5F3E5F1F4F1 FAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF4F6E4C1F7E8C0FCF8DCFFFFF3FFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF8F1DEECD69FE0BB5FDFBA5C E9D295F5ECD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEFEFFFEFFFFFFFFFFFFFFFFFFFEFFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFB F4F4D7EBEAB6F6EECEFFF6EEFFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF7D8F7D765C46445AC4499C198 E6E0E6FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEEEAEEB6CAB55CB05B47B346DAF0D9 FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFED8D8D8B1B1B1B2B2B2BEBEBECCCCCCDCDCDCE7E7E7E2E2E2D2D2D2 AEAEAE5E5E5E171717343434868686D6D6D6FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFCFCFC FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCFDF9E8F7E8C4F6DDB1 FDE6C9FFF2E4FEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8E2EDEDB4EBEBA4F3F3BCFAFAE2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EDECEDEDF6ED95D19567C26779D179B1E9B1F3FBF3 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F8F1B2DCB2 7AC27A5EB55E93D093EAFAEAFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D688D7CB7ADFD373 EADC7BE6D67FE5D58EE5D983D5CF70E3DC8791855D2416006C5F25BDB666D4D076CECB77EFE9AA 686133524C17C7BF75E3DC83E0D878E5D77FDED278E0D579DFD47BD8CD78D9CD79E5D982D7CE72 E9E081E1D77BD6CE78DFD688948A43A09547F2E894E7E187D6D176F1EE93B0AF574E4B04CBC67A DBD684EAE38AE1DA77EDE67DEFE786EBE283EEE586F2E98AF0E788EEE586F1E889DDD475E2D97A E4DB7CE7DE7FECE285E9DE84ECE187EFE58CE4DA81E2D881E8DF8AE2DA85E2DC88E4DD8CDAD382 D6D07FD8D584E2E191DBDA8BD4D381E1E08EE6E292E4E28FE0DD8AD3CE7AD2CE79DED982DAD47C DAD579E2DD81D8D378D4CF75E0DA83E3DD87E1DB87DDD685DBD483DCD584D9D282D8D27FE4DE87 F1EB93ECE68EDED880DBD57FE1DB85D7D17BC8C26ED4CE7AD8D27ED5CE7DE6DF8CE5DF89DED882 DED883DCD584DFD888E8E193E6DF91F0E89DF1E9A0E4DC93E9E199E7DE93E8E093EEE598EFE697 E9E191E3DB8AF0E996E3DB87EAE38BF5EF96EFE88EE6DF87E8E091EAE192E4DB8CE6DD90EFE699 F1E89BF0E79CEDE49CE8DE97ECE29AECE29AE9E095F0E898EEE695EAE28EEFE891E1DA82DED77F EFE890E9E18DDFD784EDE594F3EA9CEDE49BF3E9A2F7EDA4F6EDA0F4EB9CF7EF9EF9F1A0E8E08F FEF8A7EAE192EEE496EDE898E6EA97FAFCB7C0BE8D20190033290BBDB183FFFCB8F0E892E9E083 F6EB92F9EC9DFCF0A2EBE195F1E89BF2E99CEEE598F8EFA2E8DF92F1E89BEEE598DAD184EBE295 F4EB9EECE396F8EFA2F6EDA2F7EDA4F4EAA2F9EFA9F7EEA6F2E9A0F7EEA1F1E899E0D887E7DF8E EDE39EE9DF97F5EE99F8F29AEDE694ECE4A3FFF7CCA79B7B0F04006D6639F8F7BDE1E198E0E294 E5E59BD1D08CEEEDADDFDB9CB3AF6AD7D386E5E193ECE599EBE49EA79E5EDCD394F1E7AAE0D59F EFE5B34C4211453B1CEDE3A3E1D68EE1D382D9C573BEA757D2B66AF8D68CFFE398FFE79AECD689 DACD7EE9E194EBE49AE6DE97E5D898EBDA9DF4DDA4F7DBA6F7CFA2BD90685F3910603F17786036 79663B7B663B8369408E6F4567421770441B5632065642116C5C2870612D9E915CB1A770F2EBB1 F5F0B6EEEDB1E5E5A7EFEFB1EDEFAFCECA83DACF83E4D88AE6DA8CE4DC92D9D592C9CF93E3EDB5 4D593051591FE9EBADEAE3A2DAC888FFEAACAF874B5F2D007F4818DDAD76FFE4A9FADB9DE6D490 E7D791EBDE95DEC584885A32250B021106059A9982EDE6C9F9EBC1FDE7AEFFEFABFFF2AFF6D8A4 D29172B25F3C913B0988480DC9A263F9E3ABC5AF8581655124090A301010532F22361E01B6A36A D0A573C6865AAB663AA45629AE5C33B76840C7835B91623B2C150E1213003C523599AC8BEDE2AE F7E4A8FFF1AECFAD64E3AA62FDAB63BE5814A64000D08036FFD987EDDD84E9E692F8F4B1F8F4B4 F6F3B4FBF8B4ECE99FF9F6A2FDF59CF8EC91F9E693FFEBA1FFE6A2F5F096EAF28AE4E27EE6D577 F4D37DFACB7DE1A75EEDAD67F2AF6DE6A362FFD091FFD292E78F4ED0722FCC712AFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9676767 2727272B2B2B868686F0F0F0FFFFFFFFFFFFFFFFFFEAEAEAD1D1D1C0C0C0B9B9B9B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B8B8B8B7B7B7B8B8B8C8C8C8EDEDEDFAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFAEAFFEAF2FFF2FDFFFDF4FFF4 DEFADEC6ECC6B8E3B7B9E4B8B8E4B7B2E2B095DC8D9CDD94B4E4B1D0F2D0E9FFE9F9FFF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FFECDAFCEBCAF7F3C9F9FAE1FEFEFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F0DDEAD39B DEB95DDEB958EBDAA3F8F9EBFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEF7FFF7F9FFF9FEFFFEFFFFFFFEFFFEF9FFF9F8FFF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FDFDFAEDEECBE1E1A5F0F1D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBFCEBC1EFC058C05647AE45 A1CAA1EFEAEFFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F0F4C0D5C061B56044B343 D2F0D1F8FFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5EEEEEEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF3F3F38F8F8F2525251B1B1B636363C7C7C7FFFFFFFFFFFFFFFFFFF9F9F9E1E1E1CCCCCC BCBCBCB7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B6B6B6BDBDBD DBDBDBF7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFEEDC FFE1C3FFDCB7FAE7C9F6F4E1FCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF9F9EDF0F0C9E9E9A5EFEFB1FEFEE4FFFFF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1ECECECF1F6F1B3D7B37AC67A66CD6692E392 EFFBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFBE1ECE1 7CBE7C63B56385C785C3E4C3F8FBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D789DFD380 E3D675E4D675DCCC75DECE86E1D57FD7D171E7E1889F93692A1C00645821BCB567DAD67DDAD782 E2DD9E716A3C47410CC5BD73E5DE85DDD475E2D37CDDD177D9D073D7CC74D5CA75DACF7AE3D882 DCD377DCD374E1D87BDDD47DDDD384C5BA71978A42E7DD8AEEE98BE2DD82F0EE8FE8E789413D00 BDB870F0EC9AF5EC9AE1DA78E0D96FE9E080E9E082EFE688F3EA8CEEE587EAE183ECE385EAE183 EFE688EAE183EBE284EFE58AE7DC83E9DE85EDE28BEBE189EFE58FEAE28CD9D17CD5CF7BE1DB88 E3DD8ADAD481DCD988D0CE7FC9C778D2D07FD9D685D4D07EDEDA87DAD47FDBD67FE3DE86E3DC84 DBD47CDBD67AE6E185E3DE83E0DA82E8E38DEFE896E5DE8CDFD887DAD382E7E08DEAE391DFD983 E4DE86E7E189F1EB93E6E088DDD781DED882D1CB75CEC874DFD985E2DC88DDD684E4DE88E5DF88 E7E18BE8E28EE3DD89E2DB8AF2EB9CEAE394EBE497F0E89CECE49AF3EBA1E7DF94DCD487D7CF82 E0D989E7DF8FE5DD8DDBD480EBE590EDE78FE9E38AE7E188E4DE87E9E191DFD788E1D98AEFE899 F0E89BE5DE90E9E194EEE59BE6DD93E4DB91E9E198EBE296ECE394E7DE8EE0D886EAE28FEDE58F E9E18BEEE691EDE592EAE291EFE696F2E99CF7EDA5F4EAA2EEE49CEDE499F1E89BF7EE9EE9E190 F0E898F1E899EAE194F4EB9EE9E198E9EDA7DDDFA33D3B101F1A007F7549F8EDB5F3E9A1F3E992 EAE085ECE18AEADE8EF4EA9BEFE699E7DE91E9E093F1E89BF1E89BF0E79AF1E89BEBE295EBE295 F7EEA1EFE699EFE698FAF1A3EEE599E7DE94E9DF95F9EFA7F6ECA4F8F0A4F9F0A2F3EA9BF0E896 F3EB99EFE69DE8DF95EFE794F3EC95F2EA99FCF3AEF0E5B2F1E7C04E44211C1502B2B07AFCFDBD E5E89CDDDE96D4D292E2DFA0DED99BBCB774C3BC73E3DC91E6DC94EBE19DCBC183E3D695DED08D ECDFA3FBEFBAA499661D13008E8551E1D791C5B669DFCC7DECD586F5DB8FF3E492F6E895F6EA95 EBE28BE4DD89EEE896ECE093F7E199E1BF7EBD9259A6713F935A25A37131C59F5EDCB677FFEDB3 FEDDA5E6C590DCBB87B1935EBBA16BCFB880E4CF97E5D096E6D298FFEDB1FFF8BAFEF1B3DFD393 FBF0AFEAE09DE4DE9AE2DE98DFDB95ECE8A1E9E59AEBE496E2DA8DE7DF94E3DF9ADCDEA0DDE5AF CCDAA71A250E202304CCC78EF0E5ACFFEBB6C9945F6F31008F5519EAC483F4E6A2D8D18ADDDF95 EDE99FEDD68FFFD48EC98D4EBF85569F7E5131270F080A003330195F533DEADBA8FFF9C2DCB885 A1653E9B4B34A35430CF925DEEC991EAD9A0FEFCC9FEF7CDF2E6C5B19B7E321D04160500362E00 D6D88CFFF7A8FFEFA2FBD289F3B471E19556B15921B86533CF885CE6B489BAA0797E7553120F00 77672EF7EDAAFCF9AFF5F2A2DEBF73CD8A44F79254D86228B95010D68F45FFE089EADC88EFE39C F5EDACF7F1B3EEECAEF7F8B6F4F5ACF1F0A0F3EE9AFCF3A4FDEAA2F9E49FFEF5A4FCF399F7E58D F4DF89F9E08EF4D788FCDA8FFEDE95E9C27CDAAA69FBCC8BE2AC6AD87A32F48A3DFFA756FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDE1E1E1 6262622727272F2F2F8A8A8AF0F0F0FFFFFFFFFFFFFFFFFFC0C0C07474743D3D3D252525222222 2424242626262626262626262626262525252323232323232222222929295B5B5BC9C9C9F0F0F0 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFBFFFBFCFFFCFEFFFE FDFFFDF9FEF9F5FCF5F2FAF2F2FAF2F2FAF2F2FAF1EDF9EBEDF9ECF2FAF2F6FDF7FAFFFAFDFFFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFCFBF4F1D6E7E6B0EEEEC8 FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFB FAF3E3ECD08CDEB443DECA71E6E7B6F9F9ECFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFE FDFEFDF7FEF7E4FEE4EAFEEAF8FEF8FEFEFEF6FEF6E8FEE8E6FEE6FAFEFAFFFEFFFFFFFFFFFFFF FFFFFFFDFDF8EFEDCBE3E2A7F1F1D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDF3DDA7DEA64BB749 47AE45A2CAA1EEE9EEFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F0F4C0D4C062B560 41B440BFEFBEECFEECFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFDFDFDA0A0A0363636181818575757C2C2C2FFFFFFFFFFFFFEFEFEEDEDEDA5A5A5 646464313131202020232323252525262626262626262626252525242424232323232323202020 373737929292E8E8E8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFBF8FFF2E5FEE0C0F0DEADE5E4ADF4F5DFFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFFFEFDFBFBF2E9E9BEE9E9BBF5F5DCFDFDF4FFFFFAFFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1ECEBECF5F8F5D2E8D28FD08F54C354 75D275EAF9EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEEEFEE C6D8C647AA4750B750A9E3A9EAFDEAFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D787 E4D885EADD7AE7DA76E0D078E4D589DFD37CD0CA67DDD77BACA074302204615420B4AC62D0CB75 D2CE7AD6D1928E8752423B02C7BF74EAE38AD8D070DACD75D5CA71D6CD72D7CD77D1C674D0C572 D9CF79D4CB6EE3DA7BE3DA7BD7CD76E0D484CFC27A564904D1C679E4DF81D9D479ECEB88EDED8B 56510FA39D59F3EE9FF5ECA0ECE484EEE77DEEE686EEE589F1E88CF5EC90F1E88CEBE285E7DE82 EBE287F3EA8EE8DF83E2D97EE9E085EADF86E9DD87E6DB85E6DC85EDE38EEDE48FE0D883D7D17D E0DA86E4DE8ADBD482C5C06FB6B364C0BD6DD2CD7CCAC573C4BF6CE8E28CD8D27ADCD57CE6DF85 E3DC81E3DC81EAE589E8E388E6E088E5DF89E8E18FEDE695EAE392DFD887DFD985E5DF88E7E189 E6E088ECE68EEDE78FECE68EE9E38BE4DE88E1DB85DCD680DDD783EDE793EBE691E7E08FE8E28D E9E38BF0EA94F3ED98EBE592EBE592EAE392E3DC8CE9E292F5EE9EEFE899E7E092F0E99BE9E293 E0D98AE0D989DFD887D5CE7DE0DA86F1EB96E8E28CE3DD87E8E289DFD984EDE696E1DA8AE3DC8C F4ED9DF0E99BDED789E0D98AE5DD92E1D98EE3DB90EBE398E9E095E9E093EEE598EBE293EDE594 EBE390E8E08DE6DE8BEBE393EFE697EBE295EBE295FBF1A9F2E8A3E9DF98EAE196EFE698F2E99A E7DF8EF8F0A0ECE394ECE396EFE69AECE59FF5F5BF7573422B2800534D17E7E6AEE6DC97F4E89C F5EA98F0E691EAE18FDFD686E9E091F1E89BE7DE91E8DF92F2E99CE9E093EEE598EBE295F3EA9D F4EB9EEFE699F7EEA1F6ED9EF8EFA0F2E99CF3EA9EF0E79CF2E8A0EEE59BF9F0A4F2E99BEBE392 F5ED9AF1E995F4ED9DEEE698EEE696EFE796F2E99BFDF3ABF7ECB0F9EEBAD3CC9D1F1B003B3A16 E0E0A9E7E89CD2D287D7D490E1DC9DE8E3A1D8D08ACFC77BEEE598E8DC91F0E29EEBDB9DDCCC86 ECDC8FDECF8CB5A86EC3B68249401B2D2500F5ECA9F1E49AF4E397E9D287EAD589DAD782D8DB82 EAE68EF8ED97F7E490F9DC8BD1AB5EA978328E56159C5D23D48F59FBD296FDDB88FFE088FAD180 DCB164AF8039D0A561EAC281DBBE7CEDDB96FBF2AAE4E599F0EBA1F9E7A2F0DD98F3E09BF6E49D E5D48CF4E499ECDC8FEDDE91F1E496EBDF90F1E496E5DD8EEFE99DF0E89DF8F3ABEDEAAAEAEDB6 F0F9C8E1E5C0222711050100B1A570FFF9C4C486577F350896561CFBCD8AF7E59BCCCB7BCDDB8B D5E495DDD88CFDD78FD18941C87E3BE7BD81D5BC84EDE2ACC1C3928A93620F14009E9668D6BB93 8F64407A452451170047210CDDCE94F7F6BF727C47576735BBC597EFECBFE5D7A8B49F68DCC989 E8DD92E5E48FD2D06CE3DC76E5D174F2CE7CFFDF96FFD596DC976094501C90501CCE9962FFF2B8 FAE9ABD7C27EF5EFA6FFFFBCB9B86BF4EA9FE1AE6AE29457FFB076D87132BA6621CF9041EAC373 F7E29AFCEAA8FBF1B6DFD8A1E2E2A9F3F5B8E7E8A4E9E89DF2ECA2F0E49CFAEAA5FFE39DFFE29B FFE59BFDE69BFEECA0F8EBA0F5EB9EFDF5AAFEF1A8FCE7A2FFF2AFEEC784F2A861EA9449E48F42 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEFEFEFDCDCDC B4B4B44545452B2B2B535353A8A8A8F3F3F3FFFFFFFFFFFFFFFFFFCBCBCB8585853A3B3A151615 1312132626264343434848484848484949493333331919190F0F0F1A1A1A3A3A3A787878D8D8D8 F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3D9E3E3AA EBEBC3FDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFCF8F7EAC2ECD381E2CC76DFD187EAE7BBF5F5E1FEFEFBFFFFFFFFFFFFFEFFFEF9FFF9 EDFEEDDEF5DDCFEDCEC3EDC2C6EDC6CEEDCED2EDD2CDEDCDC5EDC5CBEDCBE8EEE8F6F6F6FEFEFE FFFFFFFFFAF5FEF0E0F6E4BFF0E1B2F8F1DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAF1DAA3DBA3 5BBC5A5EB65CABCDABEDE8EDFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3EFF3C5D6C4 74BC7352B851A9E2A9DBF5DAFBFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCF3F3F39494942C2C2C1B1B1B606060C6C6C6FFFFFFFFFFFFFFFFFFEFEFEF B1B1B16868682626260C0C0C1A1A1A3535354A4A4A484848484848434343242424131313131313 242424535353A8A8A8F2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFAF5FFEFDFF6EDC8EEEDB9ECECC1F2F2D3FBFBE7FFFFF6FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFAF6FFF0DFF7EDD2EEEDC9ECECC6F2F2D8FBFBF3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBF9FAF9EFF7EFACDAAC 58B95866C366DBF7DBF9FFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEEEFEE D3E4D3A8D5A849B14965C165C5ECC5FCFFFCFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DBCF7FDBCF7ADED26ED9CC68D6C76CDDCE81DED278D7D26DDFDA7CB9AE7E2A1D00625423B3AB63 D6D17CCCC975D1CC8CA19A642F2900B9B166E4DC83CFC76AD2C36FD4C871DED57AE5DB85D6CB79 CABF6DD3C973D1C66AD2C869E1D779E7DB85DDD080D1C27B594B0DB3A85EE8E386E1DB84E5E480 F6F6928B85498C8546F5EFA3F6ECA4F2EA8DF3EC82F3EA8EEDE38AEBE288EEE58BEDE38AECE288 E7DD83E3D980EAE086E0D77DD4CA71DCD279E9DD86E1D581D8CD78D7CD78DAD07BE0D782E2DA84 DCD682DBD581DCD682D9D27FCDC877C9C372D3CE7DD3CC7AC8C26EDDD681DED781D5CE74E0D77C ECE287E9DF81E8E183E4DF85D5CF77DAD47FE3DC8AE4DD8DEBE494E7E08EDBD581E2DC85D7D177 D3CE72E5E083E9E38BEEE890D8D27ADCD67EE1DB85DBD57FDAD47EDCD682E7E18DE6E08BE8E190 EAE48EE7E189ECE690EFE993EBE58FECE691E8E28EE1DA88E3DD8BEEE896EEE795E4DD8BE5DE8C EBE393E3DC8BDED786E3DC8BE4DE8AE4DE8AE2DC88D5CF7AE1DB85ECE690DFD984EEE794EAE392 E9E291EFE897ECE595E3DC8CE3DC8CE2DC8DE1DA8CE8E193EAE395E5DC92E6DD93EAE196E8DF92 E5DC8EE2D98BE6DE8DE7DE90EBE294F0E79BECE399EAE097F4EAA3F0E6A1EBE19AEDE399EEE597 ECE394EAE192EEE596EEE596EDE497EAE194F5EDACCBC6A125210D211D00ADA661F9F1A4EEE694 F9EE9FF3E89AEFE598E6DF93D2CB7CD9D282EEE59AF1E89DEFE69BEEE59AE6DD92F4EBA0F2E99E F0E79CF0E79CEAE196F1E89DF5EC9EF5EC9DEDE498F8EFA3F8EFA4EEE49DF0E79DFAF1A5F0E799 E9E190F5ED99EFE792EEE892EFE995F2EA9AF4E79FF4E8A1F9EFA7EDE49BE6DE99FFFFCA878557 191700979764F5F5A4DEDD8BD1CD82DCD68EE3DB94DCD388CDC272F0E591F7EA97F3E398CFBE77 A79548C8B763BDAD62D1C484F1E8B0CAC48C292408777037E8DF98DDCE87E7D68DF5E29CFEF4A4 FBF29EF6E18ED8B566B38336A56A1FA6631ABE7D36E4A761FFDA96FEDF9CE1AD66D9AA57BD933D BF9A46B79B48C1AA59FEF3A3F4EA9BE7DE91C7BF72C0B76AC1B768E0D589E7DA91F8ECA3F7EBA2 EFE297EEDF92EDDE90E7D887E2D382E6D784F2E38EEFE08BE0D687D2CC83E3DC93F6F1AD9F9B5E AEAF7EB8BE95AFB69218160A403514F8E4BABF9B6C6A2F009D6329EECB86F8E290DDD47FF0F39F E0E495EBE89FF0D890D09E53B46B1BEBAF5EE4D98BC5B970EEE19AE4DF9CDCE7A81F2C01282613 351B062D08003A1C16665C30BBB783EBE9B3EEFAB5B6CB781D330B101C00544F2B6550365C412D 5A4629978E50E7EA97E1DD7ECAC464D6CF79F1EA9EF5E8A9FAEEB7F9F0BBF6CF9AB37A3E99520F C46D27FFD486FFFDAEF6EEA1EEE398E5D48EF9E4A3FFF0B0CC9C5DE7A565FFC280C46D28B75611 CF8539FEE798FFEEABEDD79FF2E6B7E4E0B3DDDDADD2D49DECECADEFEEA8FAF3ACFAEFA8E6D994 F7E8A3FFF5B2FFF1AFFFF0AFFFF0AFFFF8B6FCECABF3EBA8F2EDA7F6F7B2FCFFBFFFF8C1FCE2AE F4D8A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4EAEAEAE3E3E3D8D8D8C4C4C4 A4A4A47979792E2E2E3F3F3F858585CDCDCDF8F8F8FFFFFFFFFFFFFFFFFFE1E1E1B2B2B25A5A5A 2828282929295252528E8E8E9A9A9A9999999C9C9C6A6A6A2F2F2F1C1C1C3C3B3C777777B9B9B9 F1F1F1FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4DC E6E6B0EBEBC1FAFAEFFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFDFFFFF0FAF4CBEBD792DEC46CDDD283ECE5B9FCF8EEFDFBFBF9FBF9F5FBF4 EAFBE9D6F9D6C0ECC0B0E1AFAFE1AEAFE1AEB0E1AFB0E1AFB0E1AFB0E1AFBADFB9D1DED1E5EBE4 F3FAF3F5FCFBF8F1E6FCE2C4FEDCB5FEE3C4FEF3E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6EFD6 9FD89D6BC26976C074B6D1B4EBE8EBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2EFF2 C9D7C987C28664BC6399D798CDECCCF9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF5F5F5D8D8D87979791D1D1D2A2A2A797979D0D0D0FFFFFFFFFFFFFFFFFF F6F6F6D1D1D18989893B3B3B1C1C1C3838387171719C9C9C9999999999998C8C8C474747242424 2B2B2B555555999999D4D4D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFEFEEDFAFAD7E9E9B3E9E9B2F5F5CAFCFCE2FBFBF1FDFDF8 FFFFFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFDFBFEFBF7FCFAF2FCF3E4FEE1C1F1DEAEE5E4AEF4F4DEFDFDF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFF C7E3C766B46661B861C7F2C7EDFEEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F1F0F1 E1E3E1B4DCB485D4855CBF5C89CF89DCF1DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6CB79D5CA72D3C761C9BC57C6B75BCFC172D6CB6ED7D36ADCD775BBB17E1D0F006C5E2E ADA55EE2DD8AD1CD7AD4CF90A69F68231D00ACA457DFD87ED0C76AD5C672DBD078E1D97FE3DB84 DAD07FD3C876DAD079DBD074C1B757DAD06FEFE48BD4C878E6D7918E7F46938740E9E387E8E28D D8D772F6F791B7B0786B6328E7E296EFE4A1EBE387E6DF77F4EA90EDE38CEDE38CF2E890F2E890 F0E68FEBE18AE3D981E4DA82DBD17ADAD078E0D57FE2D681E0D481DCD17DE4DA85EDE38FE4DC88 E5DD8AE5DF8BE1DC88E4DE8AE3DD89DDD685D7CF7FD2CB7ACBC471CCC471E6DC86D0C76ED9D075 E3D87CE9DF83EAE080E4D97CEDE78DDCD681E3DD89E2DA8ADAD384E3DC8CE4DE8CE2DC89E2DC84 DDD87BDEDA7AE5E082E3DD84E4DE86DCD67EDCD67EDDD781DDD781DCD680DFD985E8E28EE5DF8B EBE493EBE58FE1DB84E3DD87EBE58EEAE48DE4DE87EAE48DE5DF88E1DB84E6E08BEBE58EE6E08B EBE591F1EA98E5DF8CDFD885E8E18EE7E18DE4DE8AE3DD89E2DC88E7E18DECE693EAE490E3DD89 E8E28FE5DF8CE4DE8AE6DF8FE6DF8EE9E292E8E292E5DE8EE9E292EBE496EDE49BEDE39CE5DB94 E5DC92EAE194EFE699EFE699F0E79AEEE599EEE49BF4EAA3F0E69FECE29DEDE39EEFE59DEFE59D EEE598ECE496F2E99AEAE192F3EA9BF4EB9EF9F0A3EBE2A34E483028220A767139FCF9ABE9E388 EDE589EDE390ECE299F1E7A3EEE7A0E3DF91EEE999EBE297F2E99EF0E79CE8DF94E9E095EDE49A ECE499E4DC91EBE398F7EEA4F7EEA3F5EC9FF6ED9EEAE194EEE599EFE69BEFE69CF1E89EF3EA9D EAE292E6DE8DEFE793EDE68FE7E284EFE992F3EA9EF4E5A4F5E5A6F8EBA4F7F09FFAF5A3F7F5AC D9D8A042421C2A290EBDBE62EAE78EDBD782EAE395E1DA8BE6DC88DED37AC7BA5DBDAD53CCBA67 D0BD6FDECA75EEDC80E7D885EDE19DCFC78EF2ECB67D7845130F00C2BD73EFE49FE5D691EAD493 E2AE70C58245A25F1DA5641DC8863CE7AB5CFBC979FFE392EFBE6DD6A256D7A155A6782DD3B368 EDD187F9EFA6EBD58ECFBD78FEF4AFEBE29CE3DD96CFCB82DEDB91D8D58ACECD85DADD99DFE09D E5E7A1CDCD87E7E59DF0EDA2DDD98CD8D185E0D98AEAE291EDE393DFD88BCAC47AD1CA83C7C180 1F1A000808000B0F000405003F3829E1D1B3DFC09C6D4519705016E5CE87F4F19EF1F092D9D67B EADC8BFDE7A2FEE8AAFAC685B27A2DEAB75BFFE486F1DE8CEDDF8CF8EB95F8E797E3CC8F654621 411C12956F6BD6BEACF0E8C4F0F7C3FFFFD4FFF7D2DEDEACC5CD8DDBE29DA59F6C78614348240B 3D170575583BA59658EFEEA1F5F0B4F0E9B8D1CE9BBEBE88A7A9726B6830B4AA6EFCECAFF9D697 D99A5A954A0BB26F28EAC97CFFF8ABF8ECA1ECE19BF9EEADFCEDAEFEEFB1D09A5DEAA867FDAC69 B54B06C16C1EDFB15EFFF9B4FFF7C0DBC89C6A5F3D2D2D0A1E20008B8D53F5F4B4E9E6A0F4EEA6 ECECA7F0F5B1FAFCBCF7F7B7F4F0B1F0EAABEAE2A3ECE3A5FAF4B6FFFBBBF7F4B4FBF8B9F4EBB2 FEF6BDFFFABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7BFBFBF808080595959424242 3C3C3C3232323131315353538E8E8ECFCFCFF4F4F4FDFDFDFFFFFFFFFFFFFFFFFFF7F7F7DADADA 6D6D6D343434424342808180D1D1D1E1E1E1E0E0E0E6E6E69090902B2B2B1F201F5F5F5FB0B0B0 EEEEEEFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCEBF5F5CDECECB8EAEAC0F6F6E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDEFF8F0C9EEDC94DEBB4DEBCA7DFBE3C7F3E8E4DEE6DC C6E5C6B5E4B4B5E6B4CCEDCBE1F4E1E2F4E2E2F4E1E1F4E1E1F4E1E2F4E2E0F3E0D4ECD3B7DDB6 B6DFB5BCE4C0C4E6DDD9E2D3F2DEB8FEE5C2FFF4E7FFFBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C5E5C47DC87B5EC2577ACA72B9D6B5EBE7EBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F2EFF2CAD7CA87C28765BC6399D698CCECCCF9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE9E9E99494944444441414145D5D5DB7B7B7EAEAEAFFFFFFFFFFFF FFFFFFFCFCFCF5F5F5A7A7A7474747262626555555A6A6A6E4E4E4E0E0E0E1E1E1CBCBCB515151 2525254848488F8F8FD7D7D7F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEF3F8F8E6F0F0CCE8E8B0E3E3A5E8E8B4 F4F5D2FFFFEEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF3E8FBE7CAEEE5B8EBE2AFFBDBB3F9E6C7F6F4DFFBFCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFC FFFFFFD4EAD483C1836CBC6CAAE3AADBF5DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5DBDBDB D6D4D6ECEEEC9EDB9E53C55375C975B2DEB2EBF6EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9CE7ADCD178DBCE6DCEC15DCABB5EE5D580DFD475D8D06BD6D075C6BA82241800 766B389E964DDAD57DCFCA75DDD692B1A8702F2903B0A95FE6E088DAD276E0D17CE0D67EDAD379 D4CD75D6CC79DCD17FE0D680E0D67ED1C86DD2C76ED6CA76D2C678EBDD97A192578C823CE5DE87 E2DD88DFDD78DBDB74DCD594595115DAD18FEBE29FF3ED90F5EE84E6DC80E6DC83EAE087EFE58C EEE58BECE289EFE58CE9DF86E5DB82DCD279E8DE85F5EA92F1E58FEDE18BE1D780E4DA83E8DE87 E4D984E5DD88E5DD88E4DB86E7DF8AE1D984DFD782D8D07BD5CD79DCD47FE1DA82E3D880DBD277 E4DB7FDED377DAD071E2D879E2D77AD9D379D7D17AE6E08CDCD585D1CA7AE2DB8BD7D07EE0DA86 D3CD74E1DC7FEBE786DBD679D6D077CFC971E5DE86DCD67ED2CC76DED882E1DB84E5DF89EBE590 E2DB87E4DE8AE8E28CE1DB83E3DD85F0EA90EEE98EE2DD81E1DC80E2DD82E5E085E9E489E7E286 DDD87DD9D37BE4DE85E3DD84E5DF88E7E18BD7D17BDED784ECE692F2EC98E3DC8BDCD584E4DE8A D8D27DE0D882DCD680DED782E4DC87E4DD87E5DF8AEEE695E8E190EAE395F5EB9FF3E9A0E6DC95 E0D68EE7DE94F0E79CF4EC9EF0E79AF5EC9FEDE49AE8DE96F8EEA7F3E9A2E7DD96ECE29CF0E5A3 EEE59AF1E694F3E993F3E898E5DC8DEBE293E9E295F9F1AABEB47D1C1300433A18D5CD8EF8F29E EEE688ECE387ECE28EF1E59CF1E7A0E7DD94DED988F4EF9EEAE294ECE396EBE295E5DC8FECE396 E4DB8EF3E89BF7EB9FEDE194EEE296F6EA9DF3E899FBF0A1F7EB9FF2E699EBDF95ECE197F8EDA3 F4EB9DEEE595EFE492F5EA98F7EF99EBE688F3EE94F3EC9CEDE49BEDE39BEEE797EBE691E1DF88 F3F1A3FFFFC9858156060300636121E7E28EE8DF8DF3E694CABC64BCB156BDB554C7BF5DDCD376 E3D57EC8B767E3D27DE9D880F4E392EADB91E5D795E3D79EEADEA7382D014E4021F1DFA1BDA869 7B5C1A9B5014BB5E22E59052FFBF7FFFD791FFE69AFACB79CEA34CC19A41D8B15AE1B962DBB866 E4D38BFDF7B4E7D897E9D99CD5C589D1C388F6E9ADF3EAAAD6D18DE2E09AEFF1A8DBDF99C0C685 B5BC79F1F7B4DEE49FE1E49FE1E19BCECE86D9D78CEDEAA0DFDC8FE0DD90CCC375E3DA8BE4DB91 EAE6A1B2B276B1B281D0CDA87D775AA39178FEE7CC886444724E25DDCD99FFFFC2D2D88BA9B35A C9C971EEDB8BFFDE9BFFDA9DB47A3BC39449FEEB92FEEB8DFBEE9DF6E594FFF7A5F5DF92A77134 A66940905741A681768575638585625C612A453D12291800362D0895915FEEE7B0F6E9AFFFF4C5 EBBF94C29665FDECBEEEDAA8B0AB728F8966413B211A16000A08000F0E0055531DE7E2A2FAE9A7 FEE09EFFE7A6D39F608E55159F641BF5CC7FFEE79BF9EFA6FDF5B2F3E8ABFBEDB0EBC286BD7C3D F7AF6AFCA254BB6E1EBE883FF7CE8AB3955A2009024D4019B5B48FC4C9A1ECECC0F8F2BFFCF5BA F8F9BAF2F8BDF7FECBF4FEC5F4FEC2F3FCBDE7ECACE9EBACEFECAFEFE7AAF4E5AAF8EAAEF7EAAD F3ECACF2EEACF3EEACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6BDBEBD7C7C7C525252 3E3E3E454545323232262726484848868686C8C8C8F1F1F1FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF E9E9E96C6C6C2E2F2E484948949494ECECECFDFDFDFAFAFAFAFAFA9696962727272C2C2C7D7D7D CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFF7FCFCE4ECECBAE3E3A8F2F2D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFDEAF8EDBFE8C25FECBF62EFCA87DAD6B4 C9DEC7C2E5C4BFE7BFC4E9C4E2F4E1FCFEFCFDFEFDFCFEFCFCFEFCFCFEFCFDFEFDFBFDFBEBF7EB C8E9C7C0E6C0C1E5C0C2DFC6C3DAB1C9DA9AE0E8BAFCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFBCE1BC6EC06D64C45D8BD284C0DABCEAE7EBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF1EFF1CDD9CD96CA9572C37188CE87C0E5BFF7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDE4E4E4B5B5B55454543636364343439A9A9AE1E1E1F9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFAFAFAF414141292929696969C0C0C0FFFFFFFCFCFCF8F8F8D9D9D9 4E4E4E2727275D5D5DAFAFAFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFF7F7E8ECECC4E5E6B2 EAE8B8F5EEC5FDF4D2F6F4DAF4F4DCF4F4DCF4F4DCF4F4DCF4F4DCF4F4DCF4F4DCF4F4DCF4F4DC F4F4DCF3F4DCF4F2DBFAE7D0FADFC2F0E3BAECE7BBFCE6C9FEF1E3FEFDFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEB FCFCFCFFFFFFE0EFE0A0D0A074C2747ED27EC1EBC1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 DEDFDED3D8D3D7EDD788D58849BE4998D698D6ECD6F6FAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE4D680D9CA74DBCB73D8C76BDDCE6EE4D674E0D473D1C86ED9D082D0C688 261D006C692EA09B49D3CD6DD6CD6FCFC47CCCC187332B09928E48DDD884E0D77DDDCE79DBCF77 D2CB71DBD47DD8D07BD8D07BD7CF7CDAD280DBD382DED487DACF85D5CB82E4DA92C3B977665E1B ECE499D7D179DCD972D6D468E1DB83625916BCB279E8E09BE9E582E0DD6EE7E181EAE487E5DF82 DDD77AEEE78BE5DF82E3DD80E1DB7EE0DA7EE6DF83ECE689EEE58AE9DE84E0D57CDCD178E6DB82 E6DA81EBE086EFE58BEBE187E3D97FDDD379E4DA80E9DF86E6DD80ECE286E2D97DE3DA7DE3DA7E DAD174DDD476E5DD7FE4DC7FDED578E2D97BDCD679D5CE73D2CB72CFC772CDC572CEC675D7CF7D D9D17EDCD57DD9D278D9D376E1DA7EE7DF87E5DE86E9E28AE6DF87DDD67EE1DA82E4DD85E5DE85 EBE38CE5DD87E6DE88ECE58AE0DA7BE4DE7FEDE789E4DE7FE7E182E6E081E7E182E3DD7EE4DE7F E8E283E0DA7CE7E481E9E583EDE889E3DC80E9E186E6DE85DDD37EE1D985DFD785E6E08CEEE994 DBD480AFA753D3C974E4DC83DFD779F1E88AE7DF80E7DF82EBE088F0E694E9DE91F4E7A0EBE298 E9E293E6E090E4DD8FE5DE90ECE597E8E094EFE79DECE49BE6DE95F5EDA4F3EBA2EBE593EFE79D F5E9ADF5EA9BEFE484E7DE76F4E891E8DE8EEDE695EBE795E5E0A64A4216211800A09749EEE698 F6EE9CF0E692F4E995F9ED9AF8EB99F9EC9AF6E895F0E38EECE18EE1DA89DBD483ECE494F1E999 E5DA89E2D685ECE08FF5E797F5E695F3E391FAEA98F2E192F5E496F9E89BF2E496F4E59AF6E89D F7E99DFEF2A3F3E697E8DC8BF3E795F6EA97F7F097EAE68AE9E88CEBEC8EE7E98BE9EE90E6E88D E8E692ECE89FECE6A7F2E7B3382E092C2605D0C387E9D48DD6BB68CFB85BD3C461E1DE7AD6DA77 D9DE81F1EF9AEEE696ECE096DBCC86F8E699F0DA89ECD384EBCD8BFFE1B0A5835E200000775329 A17D43A58036EAB764FAC673FFD589EDCB87DBAE6CD6A15EC59A4DCDAB57D1B55AF7E282EDDA7A EBDD83D6CE80D1CA81E6DE98F5EDA9EAE2A2DCD495D6CE8FCFC886F2EBA6E1DB93ECE79CE1DD92 D4CF86D0CB83ECE79FF7F2A9E6E298E4DF95CDC87FE8E399EAE49AD3CD83E4DD92D3C26EEBD97F F7F097D3D985E0EA9FECF0B1FFF9C77F6A4496775A815E44613F20BCA17FCABC9A7B75522E3203 7C8645D6DB92F8F2A6F0DB929E7E44583600D5BC7ABEB06EC3C277E1E491F3E49EF0D398CA945A 955914C2904BAB8A4E483727534B345954396F66408F8550ABA176B2AA7DD5D197F6EEA4E2CE7C FAD795C49A5AAF8839FEEEC6B5A59122240D37382265633686854FB6B37BDDD89DF9F2B6F4EAAB F5E7A4E9D893FAE69EFBE99FDCB369A34F0BAD6B1FFCEA99FCE89CFBE9A3FDF3B2FAFBB9FFFCBA BB8E49BE7A2EFFDF81DEA658834A24553414382100C3B479FFF8C9FFFFDAF5FDDBC8C4A9DFCCB2 F5E4BF8B905C3F4729787D5F989D72D0D29EFCFDC7E2E2A6EBE8ADFAF5BBF8EFB5EFE4A7F7ECAA F9F1ADFAF6B1F9F5B2FAF5B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDEDFDEBABBBA A1A1A19A9A9AA8A8A87D7E7D4A4B4A2929294B4B4B8E8E8ED0D0D0F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFE8E8E8606060232423494A499B9B9BF1F0F1FFFFFFFBFBFBEEEEEE8B8B8B262626404040 999899DCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFDFDF4EEEEC6E3E3AAF1F1D4FFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBF5DFEED897E6C264DCB64D BFC77BC0DEB3DCF0DAEDF9EDEDF8EDF7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFDFAEEF9EFECF8ECE9F4E2DDE4B8BBD88F9BD67BB7E6AAF3FBF2FEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB9E0B86BBE6A74C771A1D79FC9DCC8E9E7E9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF0EEF0D3DCD3ACD5AB87CE856EC06DACDBABF5FAF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEEEEEEB3B3B36E6E6E2828284949498F8F8FD2D2D2F6F6F6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A93535352B2B2B7B7B7BCBCBCBFFFFFFFFFFFFF3F3F3 CCCCCC4747472C2C2C707070C1C1C1F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F9F9EE F7F8E8F8F5E4FCECD0FAE4BCE9E4B0E4E4ADE4E4ACE4E4ACE4E4ACE4E4ACE4E4ACE4E4ACE4E4AC E4E4ACE4E4ACE3E4ACE5E3AFF2DFC0FCE1D6FBEEE2F9F8EBFEF8EFFFFBF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1 EBEBEBFCFCFCFFFFFFEBF5EBBDDFBD7BCA7B53C453A4E1A4FCFEFCFFFFFFFFFFFFFFFFFFFFFFFF FCFBFCF3F4F3DBECDBAAE2AA74CC745DC05DBCE4BCF1F9F1FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDDD077D6C870E1D17AE0D074E7D777ECDF7BE6D979D7CD75DFD48A DDD3963B330077763BB7B261D5CF6EDBD171D9CD83C6BC812E26098E8B45DFDB87D9D077DFCF7B D6CA73D2CB71DFD87FDFD87FE0D883E3DB88E4DC8AE5DB8DE9E093E7DE94E2D98EE7DD94DBD28D 817834D3CB82E0DA82E0DD74E1DE72EAE589807733857A43EFE6A3F3EF8DE1DF6FECE586E4DD82 E8E286E2DC80DCD67AEAE388E0D97DD7D175DDD67AE6DF84E2DB80DDD47ADED37ADACF76DED37A E8DD84E4D980E2D77EE4D980E6DB81E6DB82E2D77EDACF75E6DD82E1D87DE7DE83E3DA7FE6DD81 E0D77CE8DF83E0D77BE2D97DE4DB80E0D77BDCD377E6DF83E0D97ED3CC72D2CA76D4CC79CCC471 DAD280E2DA85E7E088E6DF86E4DD82E3DC81E1DA81E0D981E8E189E9E28AE8E189E7E088E1DA82 E6DF87EAE38BDFD880E2DB82ECE58AE6E081E2DB7FE9E386EFE98AF1EB8EE7E185E6E082E2DC7F E5DE82ECE688ECE588F0EB8BEBE686EBE486E3DB7DEBE285E4DB80E5DC82E8DE87E6DD88EBE28D F1E996E3DB88DDD581E2DA85E0D87EDBD476ECE686EAE484E9E285E1DA81E9E08EEEE599E9DE96 EBE298EEE797EEE797EDE697EBE496EAE395F1E99DE9E196ECE49BF3EBA2E8E097EDE59BEAE495 EDE69CEFE4A3EBE090EDE486FAF08CE8DD84ECE191E4DC8DFFFDB3A29C651C1503483F09D7CF7C F1E998E9E190F3E997F2E795FAEE9DF0E490EBDF8BF1E28FF5E693F4E995EDE695EEE796F0E997 EAE291EBE08EEBE08EEDE18FF6E796F4E594F3E392FAE999FBEA9BFBEA9CF7E699F3E396F8EB9D FCEFA1F3E899F8EC9EF4E899F3E697F7EA9BECDF8FF0E997EDE894F1EE96F2F093ECEA8BE9E788 F1EB91F8EF9AF1E295F8EAA3FFF3B393824A0C0600605426E2CC8BEACF7EF7DE84E3D573D6D26F E1E384EDF096E6E290E7DA8FF2E69FE6DE97F9ECA1FDF0A1FFE69BCA9F5EA16A3A844A276E381C 1E0000B9A364FFF6A9FFEB8FF4D073C7A552B58B41C29853E5BD75E2C073FEE38FF4E087DFD077 DED57DF0E896E3DD8FD8D287F1EAA2F5EEA9E9E1A0F2EAA9E6DE9ED9D28ED0C983CFC980F1EB9F E6E094E9E399FAF4AAF5EFA5F2ECA2EEE89EEAE49AD4CE84DCD68CEDE79DE5DF95DFD88DE7D884 F1E087F2ED94E3E792C0C679D7D794F2E3AC63471B5B350F1B00001F0300240D0A1405003E3811 939568EDF2BFF9FAC6B3AC76412C0B2B0E00C6A9859D8966281E005B5925BFB86BF8DD97F3C487 9E5D1ECF9045FFD887FFECA3F7EDB5EEECBCF3F1BEFDF6B7FDF2B3FFF6BCEAE2AAEDE6A4F9F19F F1DD81FFE095C99D55BF993DEFD4A4B2A387CFCFA9E4E6B6FFFFD1F7F5C1D9D69DE8E3A6FAF3B3 F0E6A2F1E69EF1E499EBDB90F0DF92FFF1A8D08744904A06BF8B41FFEEA5F6E39EF9EEAAF1ECAC FAECACE6C783A87728F4BA62F0DC915A2B0C451700946834F4D89BD8D099F6FDCEABB28F1B1203 5F4C3BFFF9D7B3B7872C30160406001819001A1B085E6027C1C086EFEAB2F2EDB3F3EBAFF0E7A6 F3EBA4F9F2A8FDF8B4FAF6B5F8F3B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 ECECECE2E2E2E3E3E3EDEDEDCBCBCB9596954344432F2F2F4C4C4C999999E7E7E7FBFBFBFFFFFF FFFFFFFBFBFBDCDCDC545454262726616161B3B3B3F3F3F3FFFFFFF7F7F7DCDCDC7E7E7E262626 585858B8B8B8E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF5F5E2ECEDC7EDEEC9F2F3DBFCFDF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF6F8EDD8E3B4C9CD7F BFBC55B8BA52CCD185F0F2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFCF7EAE6B1C5DD8FA4E190ADE8ADD6F0D6F0F9F0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFAEDCAD57B75670C46FA9D8A9CCDCCDE9E7E9FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF0EEF0D6DED6B6DBB68FD28E64BA63A3D7A3F3FAF3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEBEBEBB9B9B96E6E6E3333333737377C7C7CCECECEF5F5F5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFCFCFC9D9D9D2E2E2E3A3A3A969696D8D8D8FFFFFFFEFEFE E8E8E8B9B9B93E3E3E3636368B8B8BD8D8D8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFEFFF3E7FBE9D0EEEAC2EAEABEE9EABEEAEABEEAEABEEAEABEEAEABEEAEABE EAEABEEAEABEEAEABEE9EABEEBEAC1F4EAD5FEEEEDFFF9FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 E1E1E1EBEBEBFCFCFCFFFFFFF7FBF7DCEFDC8FD68F3EBD3E89D589E7F3E7FBFDFBFFFFFFFEFEFE F5F5F5F5F3F5F9FAF9D6F3D673D1736BC76B88CC88D9EFD9FDFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD176DACC73E6D67EDFCF73E0D070DED16FDDD071D8CE78 E3D88FE9DFA35148146D6C33ABA655CEC867D8CE6ED8CC83CCC186332B0B87843FEBE795E1D87F E7D885DED27DD5CD73D8D177D0C971D6CF77E5DC88E1D987E2D988E4DB8DE4DB8EE4DA8FE4DB90 F1E9A1A19854BAB168F1EB94ECE983EFEC81ECE78CB4AB65584D15E8DE9CF3EE8EEAE87BF5EE90 EFE88DE9E287ECE58ADBD479EAE388E6DF84DDD67BDFD87DE4DD82DED77CD9D177DED37AE2D77E E7DC83EADF86E6DC83E2D77EE4DA81E4DA81E3D87FE7DC83E4D980E4DA80D5CC71DCD378E8DF84 F0E78CE2D97EDBD277D8CF74DED57AE2D97EDFD67BDED479EDE78CF2EB91E1DA80DFD682E9E18D E1D986DDD582E5DD89E8E189EBE48BEBE489E7E086E6DF87E2DB83E6DF87E6DF87E8E189EBE48C E7E088ECE58DEBE48CDFD880E7E088EAE38AE8E086E8E187EEE78DF4ED92EAE389E4DE84E5DE83 E5DE83E5DE84E7E085E7E086F0E98FE9DE86E6DB83E0D77CEAE184E3DA7CD8CF72DFD67BE8DE86 EFE58EF2E792E0D885D7CF7CE9E18CE5DE84D5CF72DED87AE9E385EAE387E2DA83E7DF8DEEE599 E1D78FECE499EBE494E9E292E9E294EAE395E9E294E5DE92DCD489E8E097F3EBA2E3DB92E2DA91 EAE398EBE298E9E096E6DC8CE7DD85EBE185F3E993E7E08FE2DB92F0E7AB4F48241B15009D944B F1E998E3DA8AEDE594F8EE9CE7DC8AEDE18FDED27ED3C673DACA77E1D27FE2D783F1E997EDE695 E8E08FE3DB8AE7DC8AEBDF8DEDE18FF3E493F2E392F1E291F8E898F6E798F2E696EDE091ECDF91 F3E698F4E799EADF90F1E697F3E899F5E899F5E899ECE192F6F0A2EDE99AE9E292ECE38EF5E88E FDEE93F7E589F4DD85FCEF9AEDD282CDB064CBB675353111261E00D9C98BFFF9B0F1DC88DFCF75 ECE589E6E28AD9D481D5C87CE9D68FFEEEA9FFEEAAE9D38FCEB26DB28E4B946729A4753BE0B27D EFC69161411A352103C9BB7ACDBA64D0B859BDA34EE0C476E3C77EFFEEA4F7E191E6D480E9DD89 EBE494E3DF95C5C27AD9D388C3BD72CEC97EE2DB93EFE8A3FBF4B0EBE3A1F2EBA5DCD58DE3DE94 FBF5A9E1DB8FE0DA90F4EEA4F3EDA3ECE69CEAE49AECE69CDFD98FDFD98FEEE89EEDE79DD5CF84 E9DF8DF1E690E8E490E9E999C2C176E3D895B8A268805E2C9D78497C5A288E7541917F48B9B075 E9E5ABD2D29AC4C894B1B1820B020029160DB19778846B5029180076704FBDB587C0A463E6B975 9F661FA46217FDC577F3C878DBC677D2CF85DEE29CE0E29DD7D38BDCD389E9DF98DCD391DDD88F E3DB87E1CD72FAD58CB2873FCAA544C3A56B14070024270BADAD8996927356522E120E00201B00 5C571CE3DC98EEE49FFCF0A9F4E6A0EFDE9AFEE9A5FED394BD7B3F884607DDAF6DFFE8A2E9D893 F2DFA0E9D798E2CD89CDAC5FCF9243F7C67FD8C184A66632AB6431EEC288FFFFCCDCEBB3494E2A 0B0000221302958E6CF0F3C47A7D6204050198987E898A6005040044421FE9E6B0E7E2AAE9E3A7 FBF4B3FDF8ADF3EC9FF3EEADF4F0B4F5EFB4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFCFCFCFBFBFBFBFBFBFCFCFCF8F8F8DFE0DF878887404140212121656565D0D0D0F3F3F3 FFFFFFFFFFFFEEEEEEC5C5C5484848333333868686D6D6D6F8F8F8FFFFFFF2F2F2C3C3C36B6B6B 2424246F6F6FD6D6D6F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F8EAECE9BFE8E4B0FBF6E9FFFCFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFBE9F7E7B6E1AF ADDBA3B4D697C7BC56DEC15AF2E2A1FCFBDFFBFEF7FDFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F7F8E9E8E6B6DEE9B3D5F4C8BFEEC0B6E4B5DAF2DAFDFFFD FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA0D7A03EAE3C68C267B0DBAFD0DED0E8E6E8FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDEDEBEDD3DBD3B7DBB792D5915FBA5EA0D5A0F3FAF3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCECECECB9B9B96C6C6C3A3A3A2F2F2F7B7B7BBCBCBCF0F0F0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E6E6E68B8B8B2C2C2C505050B5B5B5E7E7E7FFFFFF FEFEFEDCDCDCA3A3A3333333414141A8A8A8F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFDFCFEFCF9FDFCF8FCFCF7FCFCF7FCFCF7FCFCF7FCFCF7FCFCF7 FCFCF7FCFCF7FCFCF7FCFCF7FCFCF7FDFCF8FEFCFAFFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFF4FBF4AEE4AE4DC34D75CB75BADEBAE6EFE6F9F9F9 FCFCFCEFEFEFE8E9E8E9F1E9BBE9BB4DC24D73CB73BAE0BAEBF5EBFDFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACE6FDDD074E9DA7FD9C96DD8C868D9CC6BDCCF70 DBD17BDBCF88DDD3974C43115D5B29999444CEC768D8CE6EDACE82DDD296463E10716E29E9E593 E1D77FDECE7DE1D37FDAD077DBD077D2C871D4CA73DBD17CD6CB78DACF7FDBD081D8CD7EDCD183 E1D78AE7DE94ABA35B958D45EBE591E7E37FE7E479E8E386E1DA91594F13C5BD79E6E184EDEA80 E8E184EFE88DE3DC81F0E98EECE58AE9E286E8E186E7E085E4DD82E6DF84EAE388E5DD83DAD077 E4DA81EAE087E9DF86ECE288E5DB82E6DC83E4DA81DBD178E3D980F0E68DE8DF85E6DD82EFE68B E6DD82E3DA7FDFD67BDAD176DFD67BE8DF84E7DE83E3DB7FEBE286DED77CEDE68BE3DC83DFD781 EBE38FECE491E9E18EECE48FE5DE86E6DF86E5DE83DED77DE8E189E3DC84E4DD85E2DB83E6DF87 EDE68EE9E28AEAE38BEAE38BE1DA82EBE48CF1EA92EDE68DE8E18AE7DF88E9E289E2DB83DFD781 E2DB82E9E28AECE48DE8E189E8E08AEFE394EADD8DEADE8AE6DA82EFE488E8DD7EDCD273DAD071 DFD478E6DB82F0E48EEADF8BE5DD8AE6DE8AE9E289EDE68AE6E083EAE387E7E086E7DF8BEBE293 EBE296E4DA92EDE59AE6DF90E3DC8CE6DF90EBE496EDE698E9E195E9E196E4DC93E0D88FE5DD94 E6DE96E9E19AE8E096EBE38DF0E894EDE493E0D688F3EA96E6DE90FDF4B6B9B084150D003D3606 EFE79FFDF6A7E9E091F4EC9BF6EC9CEFE494F2E693FAEF9DFBEF9DFDEE9BF6E794E8DD89EBE28F E8E08DE8DF8DF1E593F4E997F1E694F1E593F2E794F3E594F5E695FAEB9AF2E796F1E797F2E897 F2E797F5EA9AF1E696E9DF8FF3E898F8ED9EF4E99AF6EB9CFCF3A6E9E299EBE49AEAE093F1E08E FCE690FFEA90FADC82EECD72D3B359D8B962EFD27AFCE89DA2A16A0C09006B602AFFEEACE5D289 D9C878E7D986F6EA99E9DB8EF1DB95FEE1A2F7DF9FC9A76782591E996D35BE935ADCBB79F1DE92 ECEC99F2EE9FC6B46F2D1000532D10E5D187EBE187F3E997E4D78AD2C579ECDF91EDE392FDF6A3 E1DC8CCFCC84E9E8A9E7E5A7E6E298D3CD82C6C077E0D991F0E9A2E3DC95EEE7A1E7E099C3BD73 D1CB81E7E195DBD58AE0DA90E5DF95F2ECA2EDE79DE8E298E5DF95D2CC82E0DA90E6E096E4DE94 CDC77CE6E293F2EE9CE8E495EDE79CE1D58EEED7969A783E8A63288F682DE1C183FFFFC1F4E8A1 F7F5A1E4E392EDEFA6AEB1750D0C006A6246A999756B583524140098915DABAD70CFC88DFFDDA8 BB82428C4F04D99E4CFFD586F1CF82DFD182D3D680D2D981E9ED97F5F0A2F2EA9BECE394E2DD95 EBE89FF1EA9CF1E08CFFDE9DB88F4EC49F41FEEAAEC8C3945D62360E0D00000000040000595235 DAD7ADD2CC99EAE0A7F0E6AAEDE0A5F8EBB0FFF6BDF7E3ACFFEDB0FBCE969C521A9C6021FCE49F F1D692FEE7A7FAEEADE7DE96E3D085C0833FD5A561FFF7B1E29763BD6537D0975CA9A96B2F3C0E 4649308F815E4C432C050200302D17605E480000008A8871FFFDDB908F62100E006A6737E1DFAB FFFFCAE0DC9CF0ECA3FDF9AFEAE6A8F3EDB5FAF3BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0A6A6A65454541E1E1E535353BFBFBF EBEBEBFFFFFFFFFFFFDCDCDCA4A4A43838383939399A9A9AE7E7E7FBFBFBFEFEFEE9EAE99C9D9C 4D4D4D2020207E7E7EE8E8E8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF3F6E9C8F3DDAFFCE7CBFFF3E7 FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCF0FEF0D8F7D8 AFE1AEBBE6BDD5EBCBDCD691DFC766E6C969E9DC95EBF8DCF5FFF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF4F4DEEBEBC3EEEECCF2F6DEEEFBE9CDEFCDB1E2B0CCF0CC EEFFEEFBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9DD69C3DAE3B82CD81D2E8D1DFE3DEE7E6E7FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE4E3E4CAD0CAC1DFC1A0E0A048B3478FCF8EF0F9F0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE5E5E5B3B3B36E6E6E393939474747727272BDBDBDE5E5E5FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3C7C7C77272722727275F5F5FC9C9C9F0F0F0 FFFFFFFEFEFEC9C9C9828282252525474747BABABAFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFAFEFAC8EDC878D1786DC76D82C682BBCEBB E2E4E2F9F8F9FAF8FAE8F0E8C9E9C994D99451BF518ED38EE0F1E0F9FCF9FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4C967DACD6FE3D479D4C367D7C768DCCF6E DED173DDD37DD5CA82D6CC8E4C43125D5C2EADA759D8D072DCD273DED287E9DFA3625B2255520D DFDA89E6DD87DECE80E8DB87DAD077DCD279DAD077DCD279DAD079D1C772DFD482E2D785D7CC7C D8CD7DDED485E4DB8CBAB367817931E2DB89E6E281E6E37AD3CF70E8E09672682B948C48E3DE84 E6E27DE9E286EAE389ECE58BEDE68CF0E98FE4DD83E4DD83E8E187E9E287E9E288EFE88EEDE58C E0D67FDFD57EE9DF87EAE089EAE089D9CF78E2D881F1E790EFE58EEDE38CDFD57DE6DC83DDD37A E4DA81ECE288EDE38AD9CF76EFE58CEBE188E9E086E6DC83E2D87FE6DC83E3DC82E5DE85E6DF87 E7E088E9E18CE9E18CE7DF8AEEE691EBE48CF2EB92F1EA90E5DE85E8E189E7E088E6DF87E3DC84 E7E088ECE58DE5DE86E7E088ECE58DE6DF87EAE38BF2EA94EBE38EE9E18EE8E08DE3DB86EBE38F E2DA86E1D983E9E18DECE490E6DF89ECE291EFDE96F1E097F5E598EBDF8AEFE58AE5DC7DECE383 E2D879E1D67AE5D77EEADC86E5DA86F3EC99E8E28CE8E28AEFE990DBD67BE2DC83E3DD86E7E18D EFE899EDE599EFE79FEAE398E4DD8DE2DB8BE9E293EFE89AEEE799EAE397F2EA9FF6EEA5F3EBA2 F4ECA3EBE39AECE3A1EBE498EFEB8BF4EE98F3ECA0ECE39FE4DD8CE6DE94EAE0AA5D52340D0400 857F49FFF8AEF3EB9CECE394FAF1A2F5EB9BE8DC8DEFE293F4E796E8DB89EBDC8BF5E694F0E592 F3E994F3E994EFE591F3E896F1E694ECE18FEDE290EEE192EEE192F0E394F4E798EFE797F4ED9D F9F1A0F5ED9AF5EC99F5EA98F2E695F6EA98F8ED9EF7EC9DF8ECA1FEF5A9EDE497FAEEA0FDEC9B FBE290F9DB86F3D279E7C46AE5C369FBDF83FEEB8EF7E687EFE693D1D49A37360D211908C6B87C F3E3A2EAD991FDEA9EF8E599FFE89FF4D795B28E54895E22946829BD955DF7DBA5FFE3ABFFE6A3 C6A556AF8F38CBAF5CDBC67F9589530F0A006A682AEFEDA1E6E19BE4DF9AC1BD74D5D183F5F3A0 F2F09BF0EF9EECEAA1CDCC8FE4E0A4F0ECA3D3CD80C5BF73DCD68BF2ECA2EEE89FDAD38BE4DE95 E4DE92F8F2A6F1EB9FE2DC91DFD98FEEE89EEFE99FE7E197E2DC92DED88ECDC77DEDE79DE9E399 E7E197D2CC82E7E79BE5E99CE9E79BF5E9A1F4DD99DFBD7D956A2B7D5213C69E5AFFF4ACF9E99B F5ED9DFBF5ABEEE9A9CECB96191300362C26E7DACE3E2F280E0000281E011918070A1302696126 FACEAA9B6630946118EABC6BF8D38EEAD493EBE59DDCE28BD0D87BE3E38CF6ECA5F2E7A2D4CF86 CBC98CE4E4AAEEECAEEDE09FFFE6B9B58F60C4A456F9E5B3F7F2CAEFFAC0BCBAA428211E000000 5550307F7A4BDAD69AE6E09FEEE7A2E3DA96EAE1A1FDF1B5F3E7ADF1E8AAFFE7ACDE9B61975315 DAA860FFE79EFFE9A2FFF8B0F3F0A5E7D98EE3A969D0A25EF9F8ADFDD99DC9733A4C1306311E04 A09F63F5F5C9F9F5C9F4F4CAB3B489514924352E144B4634BAB699FFFED7E5E4B6333017070400 2C290D8E8A5BEDEAB5FFFDC2EFEBACF1EDB2F8F2B9FAF4BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F1F0AEAEAE5D5D5D212121505050 B8B8B8E9E9E9FFFFFFFFFFFFCACACA8383832C2C2C424242ABABABF6F6F6FDFDFDFEFEFEE3E4E3 7D7E7D3839382121218B8A8BF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFEDDAFEE0BEF9DCB1 FBEBD3FFFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEF9E0FAE0 C8F3C7BAE6B9D7F0D7F8FBF3F0F1D1E1D68BDABB4BD7C053DDE7AAEFF7DAFFFFF9FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFEF8EFF1E9C4E7E0A7F6F4E1FFFFFFFCFEFDDEF2DEBDE7BD C4EFC4D9F9D9F6FEF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFCFFFC99D6983FB03E9AD699EEF3EEEAE8EAE5E5E5FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE2E1E2CED1CED3E7D3B2EAB136AD357DCA7CE8F8E8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCF0F0F0BBBBBB7070703434342F2F2F707070BEBEBEF1F1F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEABABAB5C5C5C2828286F6F6FDADADA F8F8F8FFFFFFFDFDFDB8B8B86464641B1B1B4E4E4EC6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF5F5F5DBDBDBE7E7E7FBFBFBFFFFFFFFFFFFFCFEFCE2F6E2AAE2AA6FC56F51B051 92B792CBD6CBF4F6F4FEFFFEDCF0DC9ED99E6FC86F6EC76EB3E2B3FAFDFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5CA67D6C969DCCD72CFBF63D4C465 DACC6BDCCE71DBD17BD7CC81E2D8995B53225D5B33C5BF74DCD476DDD374E0D488E9DFA36E682E 3E3B08D3CF7DE9E08BE3D385EFE18FDCD279D8CE74D8CE75DFD57CE1D77FD6CC77E8DD88ECE28C E0D482DED380DFD482E3DB87C7C072797128DAD383E5E083E8E57EE6E280F7F0A3988E4F776E2B E3DD86D4D06ED8D177D5CE74E9E288EAE389EFE88EE5DE84E4DD83E7E086EBE48AE9E288E6DF85 EFE78EEDE38CDDD37CEAE18AECE38CE2D982E7DD86EDE48DE9E089E4DA83EDE48CE7DE87DED47C E8DE85F5EB92E8DE85E4DA81E6DC83E2D87FD1C76ED9CF76E3D980E9DF86F3E990EAE389E2DB83 E4DD85EEE78FE7E088E1DB82E6DE88EBE48CE5DE86E8E189E8E18ADCD57DEDE68EEBE48CE7E088 E3DC84E6DF87E8E189E1DA82E7E088F1EA92EBE48CEBE48CF0E894EDE592EEE693E6DE8BD3CB78 D2CA77E5DD8AE4DC89E6DE8BDFD784DCD481EAE18FEAD994F5E29DF9E89FE9DD8EE9DF89E1DA81 E1D87DDCD477E5DA7EDFD179D5C66ECCBD68D5CF7AE8E28DEFE994E8E28CDBD57FF2EC96E3DD88 E3DC8CF1EA9CF0E89FF4ECA4E4DC91E2DB8CE3DC8CECE596EEE799E8E193EDE599EBE398E9E198 E9E198ECE49BF4ECA3F3E9ABF2EA9FEFEA87EEE88FF1E8A2F2EAADF2EAA0F0E9A5BDB2851D1100 2A2200DBD699FBF9B2E7DE8FE6DD8FF7EFA0E2D889BCB161FAED9EFDF2A1F5E897F4E594F8E998 F2E492E9DE89EDE38EEDE38EF1E693F0E593EFE492F3E896F3E697F0E495F3E798F7EB9CF0E898 F1ED9DF4EE9EECE493F5EB99F5E997F6E997F2E694F3E797F8EE9FF7ECA0F6EC9FFAED9AFEEF9B F5E08AE8CE78E5C56EDDBC63FFE48BFAED92FEF99DF7EB8EECE88BE2E490E5E5AA85834D130E00 716837EEE1A8EDD999F5E7A1F5E89EB5954E734E0FA17840E3BD7FFFDD9BFFE8B0FFEAB8EFCA96 D2AB6B997424C19F44E3CB70F1E699F3F3B98A91620405007D7B43D3D199DCD79FE1DD9ECECB83 CECC7BDADA84CFCC79E7E398E2DD9AE1DB9BCBC47BC6C073DCD689E5DF92D9D386D5CF83E0DA8D D9D387DDD78BEAE498E0DA8EDBD589E6E096E6E096C4BE74C8C278EBE59BEDE79DCDC77DF0EAA0 ECE69CE7E197D5CF85D8DD91C7CE82D6D38BF1DF9BEFD18FC095547F5211926622F5D68DFBE395 E9DC8AE6E18DE9E59BEEEAAEA19A6C0A0000190A0538292C18080E7166629993802C2B11070E03 A8A373D4AC997C542CBB9A56EDD58BF6E3A8F3ECB9E8EAB3CCD488E2E691DFDB8CE2D09AE6D8A2 C9C78ECDCFA1E7EBC2DCDFB4C5BD92B499846A4930816732B2A17FBDBB9FE1EBBEFFFFEBB6B09C 2F2C1B181604484829DCDB91C4C073E6E391F3EE9DF4EFA2F9F1A8FBF6B1DADA9AE8D193FAC587 A55D1F9D5A16FFE196FDEFA3EDEF9FF1F3A6FFF1A8FFE2A2BA8C47F0D789FEECA58B4E24541705 8F6325FFF9C0FAF7BDDCE4AAF1F9C4D4D3A4F0E5BBFFF9D4FFFFE5FBFBCFE5E4B2EFEEBDC2C090 A19D754F4B2F040000343010A09D77F4F1C2FAF5BDF9F3B8F4EEB2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC9393934545451B1B1B 5C5C5CCBCBCBF1F1F1FFFFFFFFFFFFBABABA6869682C2C2C565656C1C1C1FFFFFFFFFFFFFEFEFE E3E4E37E7F7E424242333333959595F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAF5F8F1DC E6E0A6EFECC8FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FBF4 CCEDCCB9E6B8E3F5E3F5FBF5FDFEFCFDFDF9EEEDC8D9D47AD0BD43DDBB4BEFDE99FFFFE7FFFFF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF7EFFFE5CBFCDEB9FADFB9FDF4E7FFFEFDFEFFFFF9FDF9 E7F6E7C7EBC6BDE7BCF1FAF1FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFAEAFFEA8CD68B3CAF3B99D598EDF3ECE9E8E9E5E5E5 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F6F6F6F2F9F2C2E8C13AAE3973CA72 D6F8D6F8FFF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3F3B3B3B36969692F2F2F3535357C7C7CBEBEBEF1F1F1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEBEBEB9B9B9B575757373737868686 ECECECFFFFFFFFFFFFFDFDFDAEAEAE5555552323235D5D5DCBCBCBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF0F0F0C7C7C7DBDBDBFAFAFAFFFFFFFFFFFFFEFFFEFCFEFCDFF2DF80C380 3CA23C7DC67DBFE4BFEFF8EFE8F3E8ACD6AC66B66658B458B1E7B1DFF8DFFDFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD16CD8CB6CDBCC71DDCD72 D4C366E0D272E2D476D6CD73D6CB7EF1E7A56D6534403D1BBCB76DCCC568D8CE6FDED384E7DC9F 827B41383505D2CD7CE6DB89E2D285E1D280E0D57BE2D77DE3D87FE2D77EE0D57CD9CD75E4D881 E5D982E4D883ECE08AE5DB84DBD37BDDD685797128D1C97DE2DE82E5E27BEEEA89F2EB9BC8BF7C 645B17D7D17CECE789E1DA80E1DA80D6CF75D9D278D8D176D3CC72EFE88EE7E086EEE78DEAE388 DFD87DEAE389EAE38BE4DD85EDE68DDED77FDAD37BEFE890DED77FE1DA82E3DC84E2DB83E6DF87 E7DD86E9DF85ECE289E8DE85E4DA81EDE38AE7DD84CAC067E7DD84E6DC83E2D87EE9DF87E3DC86 E2DA84DCD57DDFD87FE7E087E5DE84E9E289E7E088D7D078D7D078EBE38DDFD881E9E28AE8E189 E2DB83E5DE86EAE38BE9E28AE1DA82E1DA82E9E28AE6DF87EDE68EEBE38EF0E895EBE390DDD582 E9E18EEEE693F0E895EDE592EAE28FD5CD7ADDD582F5EC9AE7D68FEAD893EADB94EBDF95EBE295 EFE998E9E28EE2DA85EADF89E4D780E7D780DDCF77E1DA86DAD480E6E08CDDD783DCD682EBE492 E5DE8DDFD789E9E196E2DA91EAE19BE9E197F1EA9AEEE797F1EA9BF4ED9FF0E99BF1E99DEAE297 ECE49BF3EBA2F0E89FEFE79EF8EDADF2E99DE8E481EAE68CEFEBA3F1EBB1F1EBA8F9F3B86F663C 180C00665C33F5F0AEEEE69BEDE497F1E89BE6DD90DFD485ECE192F9EC9DEFE293EDE091F7E897 F9EA99F6E796EFE48EE9DE87F2E691F3E793EFE593EDE291F0E595F2E797EDE292F1E697F2E798 E6E095F5F3A7E8E194F5F2A3F6EB9BFBF09EFBEB98F9E996F6E696FFF4A4FCF1A2FFF8A8F5E289 DDC66AD6BD62F2D87EFBE990F6DC82FDEA92EBDC84E2DB83E1E48BE3EB92E6EF9EDDDC9CCDC992 5D592A2C2407EAE1AEE6D499856A278C6C23A47E39D9B271F0C88FECCF8FFDE6A2D8B27AC19060 D2A070DDB374DFC572DED774E4EA86D8DB89DEDB9EE5DAB2898258201B007E774EE4DDB0D5CF9A D7D393EAE69BD5D37ED3CE77DBD582DCD487D0C77DCEC77DCEC87ADCD688CBC577CAC575E2DC8C E1DC8CE0DB8BE8E294E1DB8DE7E195D8D287E0DA90E9E399DAD48AD0CA80E9E399EBE59BD1CB81 DFD98FE9E399D7D187E5DF95E2E89DD9E197E2DC95FBE2A0F8D495A27334895818C69F59FFE99F E6D385EFE693E8E691E3E58CE4E394E3DBA17F714D0E00000500001F11124138373D392B3A3A23 B9BA92DCD7B849322E2712003C2F00463F0DD6D5A2E1E4BAC1C69CCBD195E2E1A0E1D59AFAE2BC FAEEC9E7E9BF9FA589535E482025190804001100001C00001A05000D00000809002031197A7E5F A7A480B6B587CCCB91EBEBA5E0E292D1D27CE4E38BF3F29BEEEC96DFDB89E4E294D1D694B8B26E F0CF8BC3823F9A4E0CFFD98FFDFAA9F3FBA8FFFFB3FEEDA8FFEDA9E8BC74E6BC6DFFEB9AD4B469 C58F50A15D28EAC288FAEEADDAE8A2DAE5A6ECEAB5F6E9BDF3ECB9ECECB1EFEFB1E5E5A8E7E7AE F5F5C5FFFCD9FFFFEDCDC8B4656255000000827F5FFFFFCFF8F5B9F1EBACFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F3F3F3C6C6C6B8B8B8B8B8B8C6C6C6D0D0D0D1D1D1D2D2D2CFCFCFB9B9B99595955252522D2E2D 2E302E7D7D7DDFDFDFF9F9F9FFFFFFFFFFFFABABAB4F504F3232326B6B6BCDCDCDFFFFFFFFFFFF FDFDFDE0E0E06C6C6C3F403F464746A4A4A4F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FAFAF0EEEECBEDEDC7F1F1D3FAFAEFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFA F3FAE6C7E9C1B5E2B4EEF9EEFEFEFEFFFFFFFFFFFFF8F8E9E8E9B8DBD279D7BF4CE3CD73F2E5B2 FCF9ECFFFFFEFFFFFFFFFFFFFFFFFDFFFEF3FBF5DBF2E0B1F7E3BDFEECD8FFF9F3FFFEFEFFFFFF FFFFFFF2FAF2C6E9C6B1E2B0E2F9E2F6FFF6FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEF7F6F7F5F4F5FEFDFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF4FCF4D1F4D186D18651B650A7DBA7EAF0EADEDDDE DADADAF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEEEEEEE6E5E6EFF1EEC7E9C63AAD39 69C36FC4EBD1F0FBF6FDFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEE1E1E1B6B6B66A6A6A3A3A3A2C2C2C5353539E9E9EC7C7C7E1E1E1 E1E1E1E1E1E1E1E1E1E0E0E0E8E8E8F7F7F7FFFFFFFFFFFFFEFEFEE6E6E67D7D7D474747414141 969696F2F2F2FFFFFFFFFFFFFCFCFCA3A3A34444442C2C2C6C6C6CD2D2D2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF6F6F6DDDDDDE9E9E9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFF4F9F4 B0D4B06FB56F63C3637AD27A94DB948CCD8C74BB746CB66C88C788D8F4D8F4FFF4FEFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD06DDED173E2D17A E3D379DECD71D4C666D4C767CFC66AD7CE7CF0E89F766E38423F19B8B36AC8C064D3C869D1C678 D8CE90857E43302D03C7C371E4DA89DECD82DECE7CD8CD73D6CB71DACF75DDD278DBD077D4C96F DFD47AE1D67DDFD47BE6DB81E5DB81DCD678E0DA868A8239B6AE64EFE991D7D36FEBE784ECE692 EBE29D716824BBB565FFFCA1E3DC84E9E28AE8E189D1CA72C8C169D8D179EFE890E9E28AE6DF87 E7E088E1DA82E1DA83DFD983E4DE88EBE58FE2DC86DAD47EE4DE88CFC973D4CD77DCD680D7D17B E4DD86EFE58EDBD17ADCD27BE4DA83DED47DEEE48DDBD17AE6DC85ECE28BE0D67FE9DF88E0D57E E9E18CE0D883E3DC84C0B961E5DE84E2DB80E5DE83EDE68CE7E088E4DD86EBE390DCD47EE5DE86 DFD880E5DE86DCD57DDED77FEFE890EBE48CE4DD85E9E28AE4DD85E5DE86E9E18DE6DE8BE3DB88 E2DA87E8E08DF0E895E7DF8CDCD481DFD784DED683E3DB88E0D685E5D588FAEAA1FCECA7F7EEA9 F3EBA7E7E29DDBD48FEBE39AE1D988E0D37EEFE086D4C76BE1DB85D9D482E3DE8CE2DD8BE3DE8C F0EB9AE5DF90C8C276E0DA90E7E098F0E9A3ECE59BFAF3A3EEE797E3DC8DF4ED9FF3EC9EEFE79B EDE59AF1E9A0F5EDA4F1E9A0EDE59CF0E5A3EEE49AEBE689EAE68DE9E59AEBE5A9E5E0A8E0DAAA 2D2512201803AEA874F1EAA5EBE399FFF6AAE9E095DDD487F5E99DFFF4A5F5E799F3E697F5E899 F9E99BF4E396EEDF8DEDDF88F2E38EF3E590ECE08CEEE290EDE291E5DA8AEBE091EEE497E9E093 EAE194EAE59DEFECA7E9E7A0DBD084FEF1A3F2E392FFEC99FFF5A2FFF4A1FFEF9DE7D988E3D684 D7C267EBD476FDEA8DFEEA90FAE58DFFF29AF2E38EEBE38FE4E28FEEF29FEDF3A3DCE091DFD690 FDFCC5B7B07F100A00756A3E695720A68B47E3C177FBD98FFFDC96E3BD7FFDD296DBAA6FA78249 C3AC70F8EDABE7E397E0DF87D3D073D2CB72C2B96CB9B070DDD4A0FBF3C590885F0E06009A926C EDE7B9C2BD84E2DE96DAD785DCD67FD7D076DCD17CF1E593D3CC7FCEC87ACBC577C3BE6DD1CC7A E0DB87D5D07EDDD886E9E494E5DF91E4DE92D4CE83DED88FEFE99FE5DF95DED88EE4DE94E5DF95 D6D086EDE79DE9E399CEC87EDED88EE1E69BEBF1A9F5ECA6F1D594E6BC7E8C5B1D85591AFBDA95 F3DF97EBDD93EAE499E4E291C6CE5EC8CD5DE6E186F3E7A262512040301009000004000045442F C0BEA9FEFBE07C7460010000969075FCFCCED3DBA4FFFFDBE0E8C0E7EECBDFE0B6D0CB9EDCCEA6 E9D0B5BFB0925A5A39000300070F033D4633858471C1B0B15A413C8D7851BBAC9F7B7C76505F42 24271005020027240D9B9875F2F0C4E2E0AECBCA91D2D096EEECB3E4DFA7EFEAB3F4F0B9C5C78C C3C784F8E9A4E7B170934E11E0B06DF3EDA2D9E195DEDB94F5DA9AFFF3ADEBC57CCE974CEFE38D F6EF9DF1CB87C77845CD8A50FEE8A2E8EE9FEAF1AADDDCA0E6DBA9E7E2A3D5D58BD7D78CC9C983 EAEAABE3E3B2ACAB8B74725F99958DD2CFC876766B030100908C5AFFFCBFF2ECAEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEE6E6E68B8C8B6B6C6B696A697E7F7E9090909191919090908C8C8C6565653A393A1C1C1C 2A2B2A575857A8A8A8F1F1F1FFFFFFFFFFFFFFFFFF9F9F9F3A3B3A3738377C7C7CD4D4D4FFFFFF FFFFFFFDFDFDDCDCDC5C5C5C3A3A3A515251A4A5A4EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDFCFCF6EFF0CEE6E6AFF2F2D7FCFCF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFD FDFEEFEDF8D5C7EABAB8E5B9F0FAF0FEFFFEFFFFFFFFFFFFFEFFFDFAFBF0EBECBFD6D376D8C566 E3C67AF5EBD0FDFAF3FFFFFEFFFFFFFFFFF6FCFCE2F4F3C6E6E3A8F0EDCAFEFBF6FFFEFEFFFFFF FFFFFFFFFFFFF5FBF5CCEBCBB2E4B1D1F7D1E9FDE9FCFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF5FAF5E7F2E7D9E4D8D7E1D7F1F7F1FAFDFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEEDF9EDB5E4B481CC7F69BF66B7E1B7E9EDE9 D5D4D5D2D2D2F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE1E1E1D1D0D1E4E6E4CAE9C9 3FAF3E63BC70B3DDCDE8F4F3FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDC0C0C07272722929291919193434346969699D9D9DAAAAAA ADADADADADADADADADADADADAAAAAABFBFBFE8E8E8FFFFFFFFFFFFFEFEFEE1E1E15E5E5E353535 4C4C4CA4A4A4F4F4F4FFFFFFFFFFFFFCFCFC9D9D9D3B3B3B3030306F6F6FC8C8C8FCFCFCFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF4F4F4F8F8F8FEFEFEFFFFFFFEFEFEFDFDFDFDFCFD F9F9F9E1E8E1B7D4B760C56044C04442BD423EAE3E54AC548DC68DC8E4C8F2FAF2FEFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED372E2D479 E2D27BE1D179DCCB70DCCF6ED6CA68CCC363D1C870DED688726B2F3C3912B1AA63C8C165DCD273 D5CB7CDCD1939A94582A2700B9B464E4DA89E2D089E5D584E1D57BDBCF75DCD076DFD379DDD277 DCD075DFD479E0D479E1D57BE1D57BD4C96EDED877E5DF89A69E557D752CF2EC97E7E37FE3DF7C F2EC96F9F1A8857C39A39B4EF4EE96EFE88FE6DF87E4DD85EAE38BE7E088DED77FE4DD85E9E28A E3DC84E1DA82D4CD75D4CE77DAD47EDFD983E4DE88E5DF89DDD781DCD680DDD781DAD47ED0CA74 DED882E3DD87DFD67FDAD079D6CC75D9CF78E2D881E9DF88D5CB74E2D881E1D780E2D881EDE38C E7DD86E2DB88E6DE8AE2DB83CEC76EE1DA7FE6DF84EAE388EAE389E3DC82E1D984ECE491E3DB86 E8E08AE8E189E6DF87DED77FDAD37BE1DA82E5DE86E3DC84EBE48CEBE48CE4DD85E7E089E1D986 E3DB87ECE490E9E18EEEE692F0E895E0D884DED682DED683E7DF8BE4DB88F7E996B9A95C594D06 726A3ECCC58EE1DCA5E9E4AEEAE5A6CBC47BDCD17DDDD073D8CE6FE5E08AE7E290E9E492E2DD8B E1DC8BE9E396E1DB8FCEC87EEBE49CEBE49CECE59FE9E298F1EA9AE5DE8EE3DC8DEFE89AEEE799 ECE498F2EA9FF8F0A7EFE79EE9E198F1E9A0F0E7A1EFE59CEDE893E7E38ADFDD8CE5E3A1F0EDBC 9893701D1600332C08DCD79AF4EEA6F1E99FF5ECA1E9E095EEE599F7ECA0ECE094FFF2A4F7EA9B F8EA9CF9E99BF8E89AF8E997F0E189EDDE88E9DA85E5D884E6DA87EDE190EEE393EEE394F2E99B E8E093EBE397F5EFACEFEAAC746B2F756724FFF7AAF1DA89FDE590FCE892F2DB86EBD883E3D37E E5D782FEEB97F1DB85F8E691FDEE9AF1E48FF1E693EFE894E9E290F8F1A1F6EEA1F0E79AF7F1A6 F8EA9FE5D697BAAF7B231C081B1000D0BE88F8DD99E5C172E3BE6DF5D086C1A05CBD9B5CDDBD7E F8E09FEFE29BE2DA8FF0EC9EF0EA9BDCD386E2D88BD3CC83C1BE75D5D48EE9E4A8F8F0BD77714D 130C009B976CD9D7A2CCC989D2CF83E3DE8AE0D980D7CD73E1D882D5CF7FDCD688D7D281CCC775 D2CD78CECA73D8D37FD2CD79D7D281DBD686D2CC7FC2BC71D7D188F2ECA2F1EBA1EDE79DDED88E DCD68CDAD48AF0EAA0EBE59BD0CA80D1CC82E2E59BE6E99EE4D790EECF8DDDB475734507AA8345 FFEAA9EEDF9CE6DF9EE9E5A6E3E29DDCE384E2E684E7E08DEBDA97D0BC89C5B48D9A8F71232013 000000130D00463D34483C340B01003F3A277173566A734434410C363F0F50542C4B49273D3415 403315281A010F04001D180B2F3123394026424A2D4B49284C3A2B270C03533D0B524229464334 46522E32341D0F0B040C07040000004F4A389F9A84A8A28AA39E83B4AD91D7D0B3E1DBBCDFDAB7 DADBA7FFFFC7FEF7B6FFE6AAB4844DA78048FDF4B9E9E8ACEFE7ADECD99EF3E6A3F2D48AE0A85A E9DE88E4E491F8E098F1AC73B46C30EBBC73FFFDACF1EEA1D7D795BFBC83C7C57FD1D080B0B060 CDCD82B9BA7A2B2B0439381A6F6D5C44423E14130F21231D090901130F00DAD69EF6F0B8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEE7E8E79293926768675151514949494141413434342C2C2C2E2E2E3333333B3C3B 474747737473AEAEAEE0E0E0FBFBFBFFFFFFFFFFFFFFFFFF8F8F8F1E1E1E292A297A7B7AD4D4D4 FFFFFFFFFFFFFDFDFDDFDFDF696969313131252525565756A0A1A0DEDEDEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9E1F0F0C0EAEAB7EFEFCEFBFBF3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFEFBE5F5DECAEBBDC5EEBFD0F4D1F5FDF5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFF9FBEEEBEBC0 E1CD82DCB75AE5CA84F2E4C0FDFCF5FFFFFDFCFCE1F0F0C0E9E9B4F0F0CFF7F8EAFEFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFDFBE8F6E8D2EFD2BDEABDD7F3D7FAFDFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF9FCEBECEBAED6AE70C16F61B86077C076BCE3BC E4F5E4FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE6F7E496DC8F70CD666ECA63BCE7B7 F2F6F2EFEDEFECECECFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1EBEAEBF1F3F1 D1EBD05BB85A6FC175ACDCB8E3F3E9FCFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCACACAC4D4D4D0E0E0E0000000E0E0E2727273C3C3C 3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D363636676767C7C7C7FFFFFFFFFFFFFEFEFEDBDBDB424242 242424535353AEAEAEF5F5F5FFFFFFFFFFFFFDFDFDACACAC4F4F4F202020343434727272BDBDBD F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D9D9D9E6E6E6FCFCFCFFFFFFFBFBFBEEEEEE E7E7E7E9E9E9EEEEEEE8F0E8B9E6B995D9957DCD7D7FCD7F9DD89DCAE9CAF0F7F0FCFDFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCD172 E1D37BE2D27DDFCE78D7C66CE3D675DED26FD6CE6BDCD478E7E18C8882442A2703A19A55C1BA5F DFD575D6CB7CDED494B3AC6F211E00A49E4FDED484E2D18BE0D081DFD178DCCE75DCCE75DFD178 E1D477E3D67AE2D579E5D87CEBDE82E8DB7FD6CB6ED8D36FE9E38BD2CA81685F19DFD986EDE886 F6F28DF1EB93FFFEB5B6AC6A7A7328E8E28EDDD57EEBE48CE2DB83E7E088EAE38BDAD37BE8E189 E5DE86DCD57DDBD47CD8D179E0DA83DAD47EE0DA84E0DA84DCD680E0DA84E4DE88D8D27CDDD781 DBD57FD4CE77DBD57FDED47DEFE58EE4DA83DAD079EDE38CE0D67FE1D780DCD27BD4CA73E5DB84 E7DD86E7DD87DED683EDE591E3DC84EBE48CE2DB80EBE48AE5DE83E6DF85E4DD83E2DA86EDE591 E2DA86E7E089F2EB93E9E28AEBE48CE6DF87DAD37BDBD47CE1DA82EEE78FF1EA92EAE38BEBE38E E7DF8AEAE28DF0E893E6DE89E7DF8AE0D883D9D17CDED681D7CF7AD9D17CDAD07AD7CC73F2E591 C7BD765852281F1B00373521B9B589F2F0BCCDC887DAD282DAD072DED473E1DC86EBE694E9E492 E1DC8CE2DC8FE5DF93E5E095E4DD95ECE59CDCD58DECE59FF0E99EE6DF8FDED787EBE495ECE597 E9E294F2EA9EECE499E2DA92E6DE95EEE69DE8E097ECE198EBE298ECE59ADEDB85D4D47CE2E399 F4F1C759523F0B0600666127F5F1A9F4EEA3F3EA9FEFE69BF1E89DEFE79CF1E69AFBF0A4FCEFA1 FAED9FFFF2A4F9E99BEFDF91F1E290F3E38BE7D981E6D881F2E28DEFE38FEFE391F2E797EEE596 F0E899EEE799F6EEA4FFFCBE756E3643370ACBB97AFFF7AEFDE597E8CC79EACF78E0C56FE9D57C F7E58EFFF19DF8E79BF7E39CF7E99FEDE399E6DF93F7F0A3F3EC9DFCF0A2FBE79BF9E79AFFE79C F9DD90BDA4559B86438B7D48534A26302500F0DDA7FAE19CFAD784E0BE67D3B260EACE85E8DF98 D1D68ED6D287E6D789F0D98CF6DC94F8E3A0EDE1A1E8E6A3DBDF94D8DE8DDAE187E4E494E1DE97 F9F6B8625F381A1800838551D3D398D2D38CD2D181D2CF7AD6D077E0D983E0DB8BECE798E6E18F D5D07CDBD77FDEDA81ECE88FCFCB75C2BD6AC9C472BBB567BCB669E6E096F0EAA0E8E298E9E399 E0DA90E2DC92EDE79DE9E399E2DC92D6D086D1CB81E4E599E8E69AEEDD95F1CE8CB38A4A795012 CFB071E4D394FBF6B8FDFBC1FFFECAF5F1BEE5E6B3BFBC88B9AA7A9A83574D32183520143C311E 252304282610362E1F2E1D151806001708003E33192D280A7D8050ADB3759CA163B9B786C8C2A1 D4CFB646412104000061592AD4CA94EDEBBDD2D4A6DADEAAD7D298E3CFA79274499F863ADCD5A9 D6CBABCDD2A0C8CAA7BEBCA5A7A490A39D8C262017030000130C09484132312A1A2D2712342E17 3834205B5E307D7C499C925CD6C995BAA17493784FFEF0CBFFFFD8F7EABFF3EAB4FFFABCFBE39B D39F52EDD585FFFFB2FBEDA5FED392CD8A48C5823AFFF2A1F0E293E2E59AB9BF7EE1E29ADAD889 D4D285D1D087B6B778303009333213908F7ECCCDC2C7CAC0484B3F0205010A05006A6241F3EABD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF0F1F0BDBDBD9A9B9A8181816B6B6B5858584949493F3F3F4343435F5F5F 808080979797BFBFBFEAEAEAFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFA8A8A85252525D5E5D9C9C9C DFDFDFFFFFFFFFFFFFFEFEFEEAEAEA9B9C9B6667664B4B4B5F5F5F979897D9D9D9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FBFBDDEDEDB9E9E9B6EFF0CEF8F9EAFEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFDFAD5EED3B4E3B2CAF1C9E9FFE9FAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFAF0EFDFB4E3C578DEBA61E8CD8CF5E8C7F9F5D6F3F2C5EBEBB9EBEBC3FAFAF1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFBE8F6E8B3E2B2C8ECC8F0FCF0FDFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4EFE4B4D4B373BD7247B34546B44459BD57 7CCA7BB9E1B9F2F6F2FEFDFEFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE2F5E083D47B6DCC667FD37D C7ECC7F5F8F5F3F2F3F1F1F1FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4F0EFF0 F5F6F5DBF0DB7FC77E7BC77A9AD59AD9F0DAFBFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDBFBFBF7676764D4D4D3E3E3E3D3D3D404040 4343434343434343434343434343434343433C3C3C6B6B6BC9C9C9FFFFFFFFFFFFFEFEFEE4E4E4 6D6D6D5B5B5B858585C8C8C8F8F8F8FFFFFFFFFFFFFEFEFECBCBCB8B8B8B565656505050717171 B2B2B2F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3D4D4D4E3E3E3FAFAFAF5F5F5ECECEC E7E7E7E4E4E4E7E7E7F3F3F3FCFDFCF9FDF9E3F2E3CAE7CACDEFCDE1FAE1F2FDF2FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E0D478E0D27AE2D17FDCCA76CEBD65D9CC6BDACD6AD5CD68DCD476E8E2899B9552332F03A49D58 C6BE63E5DB7BD5CA7CDFD594CCC588221F009D9849E0D588E5D48FD9C97BD9CB72DBCD75D8CB6F D7CA6EDDD074E1D478E2D579E7DA7CE8DB7DE4D779E3D878D5D06ADDD87DDFD78E786F2AC0B967 E9E583E6E37CE9E489F6EEA4D6CD8A615A0FDDD685D0C872EFE890F8F199F2EB93E9E28AE3DC84 EAE38BE3DC84E2DB83DFD880E2DB83F3EC95D2CC78D2CC79E4DE8AE6E08CEAE490DFD985D0CA76 DDD784E1DB87D2CC79D9D37FE2D982EBE18AE1D780E1D780EEE48DDBD17AD9CF78D9CF78CBC16A E2D882E7DD86E5DB86E5DD8BEEE692EEE78FE6DF86ECE58BECE688E5DE81E7E086E9E288E8E08B F2EA97E9E18EE3DC85EAE38BEAE38BE8E189E7E088E4DD85E4DD85E9E28AECE58DEEE78FECE58D EBE48CEBE48CE8E189DFD880D9D27ADBD47CE5DE86E7E088F1EA92EAE38BE9E28AE9E088E4DA7B D6CE76DED78DD4CF99827E55141302151205ADAA7EEBE7ABD8D283D3CA6BDDD573ECE791EBE694 E6E18FECE797EFE99DE9E299EBE49CDFD892E2DB95E5DE98EFE8A2E6DF94EAE394E0D989E4DD8E EEE799E9E294EAE397E7DF94E0D88FE3DB92ECE49BE5DD93E4D88CE8DF96F1E8A4E2E08AD6D87A EAEC9ED0CCA8221C0E171100B5B26FFBF7AAEFE99BEDE499F2E89DF5ECA1EDE499F2E79BFEF7AB F2E499F3E699FDF0A2F6E699ECDC8FF1E290EFE088E8D882EBDB85F7E893F1E591E9DE8BF2E696 F1E899ECE498F2EA9FFAF2A8CFC88A2B2102DBD59CFFF4B4FCF5AFE5C77AE2C46FF8DB83FAE187 FDE58BF3DF86E7D681FFF1AFFEF1B4F9F0B0F3EEACEFECA6EEEAA1F3E99EFFF5A9FFE79CFDD78B EDB46ABB87389A7522E8CE88F0E0AAABA176281D0198864DE9CE86B08F38C2A146FCF09AFEFDB2 EEDC97C6BC7AC4BE70D9D77FE8E98EF9F8A7E8E5A2DBD69EE4E0A7E2DD99DDDB86DCDA78DBDD79 EBEF92DFE295EEF2B47B804D0C10008A8F56B7BC7BCCCF84CFCF7FE0DF8BF0EB99E7E191D4CE7F D6D17FDED984E5E188DFDB82DAD67DD5D17AD3CE7BDBD684C8C274CEC77ADDD78DE6E096E3DD93 EFE99FF3EDA3DFD98FE8E298E0DA90DFD98FDFD98FD7D288DBD98DDFD98BFAE69DF0CC8A815818 926D30F1D89BCBBF84BCBB849B9B6979774B615B3724220B1E18021B0903573D195B40138A763D B5AF6DD9DB95DFE39ED6D293E9DBA4957F4B836B36F0DCB1EBDCB3FAF4BFE0E097CBC87CCCC689 FCF2CE807A600303006D763DEFEDA9F3E29CDBD294E2E09EDDDD91D0C875CEB877A78845B99B3A E6CC89D8CA95C9CB82DDE39BE3E8A6C7CA8EFDFECECFCFA44E4D23100D029B9971FBFACEDBDAA8 D5D59EA8AB757B7F5351461F3526052E2707342F072719018A6955BDA08BE2D6B5F4F6C6FAFAC2 F5E7A4B88B3EF5D085F3E097F3EDA2FEE69CDBA05AB4601BFFC779F9E897E7ED9FCBD894E3E7A2 E1DD94E7E49BDAD895EFEFB2E7E7B7CCCBAB5D5C492F3122111504262E181F250A120D00302717 CDC3A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE9E9E9DDDDDDD3D3D3CACACAC2C2C2BCBCBCB8B8B8BABABA C6C6C6D4D4D4DEDEDEEDEDEDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0C2C2C2C6C7C6 DCDDDCF4F4F4FFFFFFFFFFFFFFFFFFF8F8F8DDDEDDCACACABFBEBFC3C4C3D7D8D7F0F0F0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEF2FAF9DAEEEFB9E2E5A1E7EAB8FBFBF2 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFDFAD2EDD1B2E2B2D4F1D4F9FFF9FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFAF4E6F0E2BDDDC16FDABD66DEC87DE2D995E8E7B0F0F1CFF8F8EBFEFEFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEEBF8EBB2E1B1BFEBBFE2FCE2F7FFF7FEFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFFFFFFBEE2BD6ABD695EBA5D81CE8095DA94 8AD7894FB84D8BC88ADBE3DAF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFDFEFDDFF2DF78C87477C87E A0D9B2DBF2E5F0F2F1DEDDDDDBDBDBFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE5E5E5 D7D7D7EAEBEAE6F6E6A1D8A07EC97C7BC679C9E8C9FAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE8E8E8CFCFCFC1C1C1BBBBBBBABABA B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B6B6B6C7C7C7EBEBEBFFFFFFFFFFFFFFFFFF F5F5F5CBCBCBC5C5C5D5D5D5ECECECFCFCFCFFFFFFFFFFFFFFFFFFEEEEEED8D8D8C4C4C4BFBFBF CACACAE1E1E1FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAECECECF2F2F2F7F7F7DDDDDD D7D7D7EAEAEAF6F6F6F6F6F6FBFBFBFFFFFFFFFFFFFAFCFAF1F8F1F2FBF2F9FFF9FDFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE3D97DDFD37ADED17AD7C973C7BA61D9CD70D8CD6FDDD475DDD479DCD47BA29C573C390C ADA964CAC26BE5D97DD8CA7CDDD38AD6D08B2E27008C8542E0D782DDCE82E2D383E3D87FE3D67E DDD077DED47AE4D87FDDD077DED47AE2D77CDDD176D8CD73E0D579E5E079EBE787EFE79A928947 99914AE8E28ADFDB7AECE888E3DD87DDD58B5E5511BAB26BEFE993EFE98FEFE88FEAE28AEFE78F F6ED95F4EB93E9E189EBE489E2DC80DDD77AE8E28BE1DA89EAE392E7E08FD8D17FE2DB8BD9D381 D6CF7EE1DA8ADFD889DCD587D7D081E3DD8ADBD57ED9D27CE7E08BECE38DDFD57FE2D884ECE28C D9D27CDAD37FDDD680E0DA87ECE498ECE497F4EC9BDDD67FF1EA90EAE486EEE688ECE488E8E087 E7DE8AF4E899F4EB9AEEE690EAE48CEFE991E5DE87E1DA83E8E28AEAE48DEEE891EDE78FEBE48D EAE38CE6DD88E6DC89E1D783DDD27EE6DC89EDE48EEADF8BEAE28BEEE48EE9DE88EEE58FF1E68E F1E48BEBE088E2D988E5DF9EBEB9901E180D070200686543F6F3B1E1DF87E1DE7BE7E181EDE793 E3DC8BE0DA8BEAE397EAE498E0DA8FE3DE93E8E399E3E194DCD98BE5E394ECE796F6EF9EE6DE8E E2DB8CF7EFA2F5EDA0E4DB92EDE49AECE49AE6DD92E7DF92E4DB8EE1D586EDE094F4EAA0EFEC9A DFDF88F1F3A8A9A190010000343106EBE99DF2EF9FEFE89BEFE194F4E699F1E497F5E89EF4E89E F4E89FF0E59CEADD94F1E49AF5E69CF6E69BF7E99EEEE397F2E599F4E699F6E99AF0E493EBDE8E F0E495E8DB90E4DA8EE9E097F0EBA5594F17AB9E5EFFF4B2DBBB75E7C378E4C777F4E08EF8F19D EEE995E9E08DF2E292F9E599F4E09CFDEDAAF7ECA5F0E59CF9ECA1F9E399FFE7A1FEDB96D09E58 9A6921AA7B32DCB166FFDD92D8BA6DFDF4AEF2E9B1251707402F10CBB780D9C377F5E58BFDEF94 EBD88AF9E79FE4D18CE5D88AEEE894ECEC94E5E693E6E49AE5E09AE7E19BE2DB8CE1DC7EEEEB84 E9E783ECEA8DE3E18EE2E097F2F2AF78794B393C076C6E34E3E5A3FAFBB9E8E7A5DFDD96E9E491 DED882E6E288D7D277D1CC70E4E084E6E088E5DE89E1DB89E6DF92E2DA8FE7E095D5CE81E3DD90 E4DD94EDE69DEDE69FD3CD85DDD992E3DF97DDDA90DDDB90E4E398EAEFA9EDEEB1EFDDA6C4A572 4F2E07665126584E1F3E3D0441411059582A72733C828551BBB791DDD5ADF9E9BAFFF7C6B5975A DEBF76FEF9ADDFDE8BD6D982E0DE94FFEBA77B5A179D7F3CFDE4C1E8D4BF7E755A3C3C0BD8D898 F2EDBE9085670C0400727041EEF3B1E6E192F2E393EADE97E7E191EBE58CEADC87D8BE76906E23 BC9E3BDBC177DACA87DFDD8AC7C77BCBCA84CFCE87C8C682EFEDB1F3F0BD666238120C00BAB58D F9F6C8F2F0BAF5F2BBFFFED1F3E8BFEDE4B7D9D6A6C1B589593D17784A2B6E482E534520454A23 4446227D70448B7039D9C594ECE9BEF7F5CAF8ECBDF3C796B16C36CC8B4CF0CC86DDD68DE5ECA7 EAEEA7FEFEB7ECECA5F2F1B1FBFBC1DCDAA88C8C6D3F3F1F494A2672764FBBC095ECEFC54B4832 0000002A2614FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6F6F7D0E5E8A1E3E5A1 F1F2D4FAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFDFAD2EED2B3E2B2D4F1D3F8FFF8FDFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F7ECC2C87FA3B24C9AAF40BDC96FE6E8B3F9F9E7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEEBF7EBB2E1B1C0EBC0E2FCE2F7FFF7 FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFBEEF9EE9ED79D4BB34A6FC36EC6EBC6 E0FAE0C3EEC25CBE5A74BE73B0D1B0E6EFE6FEFEFEFFFFFFFFFFFFFFFFFFFEFFFEDCF1DC65BC63 79C683BBE4D1ECF9F8F1F3F2DEDDDDDCDCDCFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC E6E6E6D8D8D8EBECEBEBF9EBB3E2B275C67458B757BAE1B9FAFDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEBEBEBE6E6E6E3E3E3 D3D3D3DADADAF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE1D87DD8CF74D4CB70D3C96FCBC168D4CA70D3C972E0D67EDFD57DDBD179B2AB67 2A280095914FBFB764EDE087EBDC8CDAD07DDBD5874D401D746C32E3DC82D3C875DACF7BD6CC75 D8CD76D5CB74E3D982EDE38CD5CB74D8CE76E2D881E7DD86E2D881D6CE73D4CF67E5E27DF1EA98 C9C07C877E3DEFE89BE3DE81DDD975E8E483EBE4927A7032908649F2EE98F6F196F0EA8FEFE58C FAF096F6EB92F1E68DEAE186ECE589E9E585E7E483EAE68DEEE796EFE898E8E190E5DE8EE0D989 DCD585D9D282DCD588E0D88DD5CD84CCC57BC9C473C8C671D3CE7ADCD783DFD784E7DC8AE1D684 E5DB88E5DF8BDAD581D7D37FE4E290E4DB94E1D992E6DF91E3DC8AEBE48BE5DE82EDE486EFE68A EDE28AE9DD8AEBDE90EFE594EFE893EBE58FF0EA94E8E28CE2DC86E6E08AE5DF89E3DD87E3DD87 E4DE88E6DF8AEEE491E9DC8DE4D888E8DB8CE8DB8BE8DC89EADD8CF1E693EDE18DE9DD89F0E490 F2E693E9D98CE1D37FE2DB7CF9F29FE7E1A9383114040000453F25F1F1AEF3F399EBEB8BDAD67A EEE895E5DC8DE9E091EAE395E6DE93E6E094E6E294DDDA8AD9D985D7D981DCDF86E1DE88DDD683 E3DB8AECE395F5ECA1EFE59DEDE39BF5EBA3ECE397EFE698EDE594DCD381ECDB8FE9D78AE8DB8A EBE398E3E093FFFEB87A706F0600005F5C22FAF8A4EEE899F2E79EEAD98BF9E899F7E799FEF0A5 F6EBA2F4EAA2F1E7A1E9DF98ECE19AF5E8A0F3E29CE7DB97E3DB9DE8DF9DEDE29EF1E39BEFE195 EDDD8FEEDE90F6E69AEDE096F7EBA3CCC37E5E500BE6D186C2A558E5BE6EFFDE8BFCE694E6DD8D DEE395DDE79CEDEFA8FFFCB6FFFBB5F8E598F4E292EBD887E6CD7CFCD588F9C77ED59B559E601D B07735D5A965D8BD75FFE9A1FEE69EF6D985EDD984D6C67F7465391F110AC8BD97EDE4A2EBE58D F7F094EDE192E7D88CE4D387ECDB8FEADA90E9DB91E4D78CE9DE91F7EE9EEDE792D6D176DDD87A F7F593FEF79DF2E690E2D883E0D583F4ED9DEFE99CD7D18B3F3B0E413F0BD1CF98F6F4C4E5E3AA E3DE88E2DC7DDDD67BD5CE72DED77CF2EC93E6DE89E7DF8BEEE696F2E89AF1E79CF0E798E7E08C F8F0A1F6EEA0DBD48BDDD894E2DE9CE5E1A1EDEAABEEEDACFCFDBAE3E3A0A6AF7560663734220C 2007022108006A6338999F6FB3B77FDDD99EEBE7A6D6DA92C8D286ECE8A3FBEEA6EEDE92EEE29E A8843AE7B868F2E19BE2DA8AE1DD89E3E19FEDCC936E3E00AF8F3FF8DCBE412D2B070100000500 858B59C8C5A810080452491EF0EBA5E7E496E3DD88EAE088E6DC92EBE48EE9E180E9D789E1C57F 937628C7AC52F8E89DF2E199DFDA83E4DD9BEBE1A4E7DF99E8E097E0D993F2EBB0EAE2B5473D22 362C0DEDE6C2ECE9BBEDE4AFF2DFA9E6E0A5E3E4A6E8E6A5FDE1A49A682DD7A266FEEDB2E1CE9A D0D2A9A7AC909B987847380E2E260628280F464734988C77CEAE91A97951C58F60F5CB96E2CC92 E5E2A8E4E6A4CDCE89F4F4B3E1E1A666652F1816006C6A3FB5B381F0F0B9F8F8BCF0F1B0EAEAAE E8EBCF303326000300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1FAFBD9 F0F0BCE6E6AFF0F0D2FCFDF6FEFEFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFDFAD3EED2B0E2B0C8F1C8E9FFE9FAFFFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFFFDF4FBF4D8EED785C57A54B0464AAE3A9FD383F2F7D4FFFFF4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEBF7EBB2E1B1CAEBC9F4FCF4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDEFF8EFBCE4BB87CD866ABF69A2D6A2 EBF6ECF7FBF7E0F2E0A5DAA47DC77C74C173C5E6C5F4FAF4FCFCFCFCFCFCFFFEFFF8FAF8CEE7CD 45B0436AC56AC4EEC6F2FEF4FBFCFBF7F7F7F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF9F9F9F6F5F6F7F8F7E7F5E7B0E0AF64BF633BAD39AADBAAF4F9F5FFFEFFFEFEFEFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2CDCDCDC2C2C2 C6C6C6E3E3E3F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0D77BD6CD72CFC66BD3CA70D8CE75D4CA71DAD078D5CB74D6CC75E5DB84 C2BB76282800979251C5BD6ADBCD74D9CA79D3C974EDE7985E5130655D29E5DE84D7CC78D9CE7B DAD079DFD57ED6CC75DBD17AE5DB84E8DE87E0D67FDAD079E2D881E7DD86E4DC82D6D169DDDA77 DDD683F1E8A3827A35D5CE81ECE78BE6E27FF5F18FF9F2A0B5AC6C605718EBE792EAE48CE3DC85 E9DF88F1E690E7DB85E9DE85EBE088EAE388E4DE81E2E081E6E288EAE391EBE492E4DD8AE0D987 DAD382DBD483DDD686DCD585E0D98BE4DC90DAD386C8C372CDCA73D4D078D7D17BDDD580DFD580 DBD17CDBD27CE2DC86E6E28BE1DE86DFDD89DBD38BD7CF87DFD88AE0DA88E8E18DE3DB84EAE088 E9DF86ECE28BEFE290ECE08EE8DE8BE2DB85DFD983ECE690ECE690E9E38DEBE58FE3DD87DBD57F D9D37DE0DA84E3DD87EEE491E7DB88ECE08EF7EB99E7DB88E6DA88EADE8CEBDF8DEADE8CE7DB89 EADE8CEDE191E0D290E5DB8DE1DD76F2F284F2F4999B9A5F0702000B0400948E70CBC590DCD991 E3DE8DDFD682DFD783E7DF8EE9E191E3DB8DE2DC8EEEE99BE5E190DDDB88DEDE87E0DF88D8D47F DDD582EAE291EBE294ECE398EFE59DF0E69EF5EBA3F4EB9FF5EC9DE8E18FE5DC8AF6E79AE1D083 F1E594EBE397E4E196ECEAA9342A28140C00AEAB69F4F29EE9E392EDE298E5D586F7E798F6E99A FBF0A4F0E79DEDE59CF7EFA7F2E8A1F3E9A1F6EAA2F1E39AE9DD98E9E0A1E7DE9BECE19BF3E59B F5E497FAEA9CF3E395F9E99CECDF95FFF6AE8479378E793BDCC17C5F4A07F1E994F0E28BF0E48D F0E394ECDF98F0E4A2F7EEA9F4EBA5EFE89BE6E693E8DE8BEACF81FFD58BFBD38CCE8F477F4607 DBAE62FFEB9FFFEDA3FDE197FFF1A7F8DD8FDFC56AC1AD50DECF81DED0A00E02007F7853F4F0AB F9F59DEBE589F8ED9BEDDF95EBDE93F2E19AE8DA94E9DC98EEE19EE9DC99EEE49EEDE39DE2D88E E2DA8CE8E090EEE490E4D884EDE28EEEE390ECE493E9E295EDE69EC3BE793A3717141000A4A071 F1ECB4DFDA87E4DE86EAE48FE3DD8BDBD484E2DB8BEAE394E8E290F0EA95EFE992EAE58AE9E487 DFDC7DE4E085ECE893EFEA9EF4EFAEF1EAB1F4EEBCD5CFA1ABA37B7771493A32102D2F0A57551B C3A879956F42957446F6ECB8ECECB1D5D393D6CB8BE0D590D9D88BDAE090E4DB92F0E093E5D483 E3D38CA77F31EFBA69FBE59EEFE491F0E892EFE8A6FDD7A0865410B69638F7DEAC33230F0F0A00 050E007D86484E5028110E05D2CD90EFED9CE5E38DD4D276EAE489E5DE91DCD77DD9D571E4D685 EAD48AB19745BCA447F7E89AEFE497E2E185E9E496E4DF92F2ED99F1ED93EDEB94E7E497F6F0B1 C9C48C161006827F46F4F4B2F8F2A8E5D487CFC976D7DB84EAE591FFE795AA7627A86F23FDDA87 F2E292FBFBB4EAECB0F4EDABD1BA6DD6C783CFCA948B885D4939162F0D013A0B0075421ED6AF8B F0E8C9F0EDD0F4F5C7F8F7BFD5D49E504E1C32301BD3D19EFEFCCBFDFBC7E8E7ABEFF0ADFCFDB7 D7DA92E9EABA888862343413FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB FFFFF2F9F9E2EFEFCDE8E9BAE8EBB7F9FADDFFFEF2FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAD3EED2B3E2B2D0F1D0F3FFF3FCFFFCFFFFFFFFFFFF FFFFFFFFFFFFFEFFFEF9FFF9E4FBE4AFE2AF7BC77A60B9606EC06E91D190CEEBC5F9FDEDFFFFFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDEAF7EAB2E1B1CBEBCB F7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4D5E5D57AC67866C0657FC97E B8DBB8E6EAE6ECECECE2E8E2C6DDC67EC37D4CB34B97D596CAE4CAD8DFD8EAE9EAF7F6F7DBDDDB A3BDA235A53460B55EB8D5B8EEF2EEF4F5F4E6E5E6E4E4E4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDECECECDEDDDEE3E4E3DBE9DBAEDDAD61BF6032AA328FCF9CD6E9E4EAEDEFF4F3F3 FDFDFDFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E3E3E3 DDDDDDE0E0E0F3F3F3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDAD176D6CD72D1C86DD7CE74E1D77EDBD177E7DD85DAD079D4CA73 E4DA82C7C07C4241147D7838B7AF5BDACD73E8D986E8DE89F0EA9B5347274D451EE0DA7FD9CE7A DCD17DD4CA73DBD17AD6CC75DED47DE3D982DFD57EDAD079D6CC75D8CE77DCD27BDED67ED5D06A E7E380E6E08DF4ECA49E9550B3AC60F3ED94ECE886EFEB8BF4EE9BE4DB994F4604CECA77EAE48F E1DB84E5DB86EDE18CE8DC86EDE18AE6DC84E3DC83E3DE83E1DE82E3DE84E9E38BE8E28BE0DA84 DDD782DBD480D7D17FDAD481D6D07EDCD585EBE493E1DB8BD4CE7BCECC75D1CC75E0D883E9E08B D8CD78E0D681DED580E2DA85E1DB85D6D47CD3D17CDED68BDCD489E6DF92DFD88BE6DE90E8E090 EBE090E4D987E5DB87ECE08CEBE089E6DC85E2DB86DFD983EBE58FECE690E8E28CE9E38DE7E18B E6E08AE2DC86E1DB85E3DD87E6DD88E7DC87EDE28EEFE491EADF8CEBDF8DECE190E8DC8BE8DC8D EADE8FE7DB8CEADF93F1E5AEF1E9A8E4E389ECF082D3D96FEFF3A19E9D6C423C2B0200002E2713 BCB781DDD88DD6CE75DFD67EEFE68FF0E893E7DF8EE5DE8FEEE799ECE697E3DF8EE0DC89D6D27E D2CE7BE8E08EF3EA9AF2E99BF1E89CEEE49BE9E096EDE499EFE69AF2E99BE4DD8BEBE291F7E99B E5D588EEE492DED68CF1EFA7C9C78C0C040029220CE0DF9CF1EF9AF1EB99EDE196F2E494FAED9D EEE594F0E89AEEE69BF3ECA2F2EAA2EEE59DEDE39BF1E59BF3E59DF3E69EF3E7A4F3E7A2F3E49B F2E296F4E394F9E796FAE998F9E89BF1E298CABE765D500EE3D495C9B6747C7029F5F4A0DBD880 E4DC88EEDE93FAE3A0FFF3B4FFEFADEDDD96ECE192EFE090F9E093F6D78DCB9850AA72279F7122 F2D17FFEF19CF9E893FFEC9DFFE29AF5CB81CFB35ED6C062E4D476F6ED9CF6ECB33B3512494422 F1EFA7EAE893EBE78CE1DA88E6DE8EEDE394EDE296DFD48BDDD18CE4D895E7DC99E7DD9AE6DB98 F1E5A0F2E7A0DACF86DFD383E8DA86F3E692EAE08AEADF8DDFD788CEC67BE6E09ADFDA987E7943 2B2504696232E2DAA1F5EFB3E4DE9AD9D385E7E38BE8E78AE5E384E4E083E9E68CE9E590E5DF90 E1DC8FDEDA8EF9F3ABFCF8B3F8F4B4C0B9817A7240585027382F046B6138958D64BCB188EDE6A9 FDEEA7F2DA9E78470EBC935AF8EAAAD5CE88D2CA83E4D38DE9D890DDD587E0E08FEEE398F0DE8F FBE795E2D088976C1EF7C070F6DD98E2D283DED37FE1D796FFD9A6A06B27C3A03FFBE2A3C7B590 89875E97A161AFB97C1215017B7949E9E6AAD2D184D3D182D3D17DE5E191EBE6A2DDDB8AD9D77E E7DA93F2DD9DAB934DAE9945DACA84DED691DFE08DF1EFA1D6D484DFDD86E5E589EBEA90CACA77 D2D189EEEBAC717033151503DADB8FF2F0A2F6E799E1D98AEAEA9AF2E89DFFE39DB17833B6782F FEDE90F2DF8EE9E599E0DD9BF2DF96E7C36FF8DD92FCF2B0FFFCC2FEF1BBDDC089BC8E586E3D1B 4E2B054B3C1756593D999975D4D1A6F1EDC3E6E2BBFFFFD5F8F4CBECE9BBE5E3AEEBEAAEEAEAA6 E2E397EDEFA2EBE9A6FBF8BAECE9A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBF2E6E9B5DADE8BF2F3BDFBF9DDFFFAF1FFFDFBFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFBD6F0D6B9E6BAD7F0DAF8FBFCFDFEFEFFFFFF FFFFFFFFFFFFFCFEFCF3FAF3E0F7E0B6ECB668C76630AA2D5CB95AA4D7A4EBF6EBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFAE6F7E6B1E1B0 CBEBCBF7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE6ECE6B9D3B849AE4856B853 9AD69ACCE2CDDEE1DEE1E1E1E2E1E2DDE0DD8AC58A41AF3F70C66E9ECC9EB8C5BBD9D9DCEBF0EC BEC6BE7E9E7E35A03360AC61B0BEB4E9E6EBEEEEEED5D5D5D3D3D3F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCE1E1E1CACACAD3D4D3D7E2D7B7E0B66EC36C38AB397BC58FBADAD0D9E1E0 EEEDEDFCFCFCFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6CD71D7CE73D2C96ED2C86ED9CF76D5CB72DDD37CDBD17A D8CE77E2D880CBC480535225757132C0B764D9CC72DCCD7ADED47DE4DE8D6054304F471AE6DF84 E2D685D9CE7CCDC36DD5CB74D6CC75E4DA83EAE089D9CF78DAD079DBD17ADBD17ADFD57EE7DE85 DBD672E5E17FEEE894F3EBA3D8D088847D30EAE48DF0EC8DE8E385EDE793FAF2AB786F2AA7A251 F8F1A0EEE894EEE391EFE38FF1E590EEE18BE2D881DCD57DE3DD85E2DE85DBD67DDCD77BDCD77D D8D378DCD67EE0DA83DDD781DAD47ED6D07BD8D27DDFD983D9D37DC8C36DCBC770D8D27CDED681 DAD27DDCD27DE1D782E4DA85E5DD88DDD781D4CF79D8D47FDDD686D9D284E3DB90DAD289DDD48C E3D991EEE198E2D789DFD484E5D983E4D97FE2D97FE6DF89E5DF89ECE690E6E08AE3DD87EAE48E EDE790E6E08AE0DA84DED882E7E18BE4DC85ECE28BEBE18AE1D782E6DC87EADF8DEEE393E3D889 E7DC8EEDE195E7DB90EBE09AFBF3C09F9867878545F5F9A5D0D677E4EA8FF9FCB8F9F6CF554F39 241D0EC9C491E3DF96ECE489E8DF81EAE187EAE089EAE28EF0E898F0E99BE8E193E0D98BD5D07F D4CD7FD7D080DCD483E1D789E5DC8EEDE497EDE499E8DF94EBE297E7DE91EBE293E4DB8CE6DD8C F2E499EFE294EAE18FDAD389EFECAA807E4A060000474122ECE8A3EDE893F3EC98EDE296EBE08F F9F09EF3EC9CF5EEA0EFE99EF4EEA4EEE79EEBE39AE7DE94ECE095F6E89DFAECA2EFE19BF5E49D F5E498F2DF91F2E08EF7E593F7E593D2C071E6D58B8C7D38766A26FFFFC47670309D9A52E3DF8F F4EE9CFEF5A4FEF2A7FDE8A4EFD795E4C987EACE87FCE99EFFD892DDA7639D6B22A97F30F0D984 FEEF95E2D97CF6EE91FFEC94EFCB7ADAA45AE1AD62DCC56CFBEB8CEBE183E5DD8DF1EBAE817E55 161400D9D894E5E596F5F39FDCD98AE9E393ECE793F6F19EF2EC9BEEE798EBE395E9E094F1E89C EEE598E6DC8EE6DB8DEBDF90E5D984EDDF87EADF86DDD37AECE38BE9E18CD7CF7FEAE395DFD890 EBE4A1B1AC6C37300021160D968C6AFAF4BFE7E499C5C566DEE175DBDD70DBDB77E5E48EEFEBA6 F6EFB7F7F1BEE4E0ACCBC59278723E2721063B3301716937BAB37FF7F1BCFEFAC3EFE7ABE9E1A2 E9DC92F7DE8CE3BA726F3601CB9C58FFE9A0EBDE92D9CF82D5C077E5CF86F2E596EBE999FAF0A5 EDDC8EFAE895D4C07B8D5F14F9CA7CFBE09FE8D98BE8DD8DE4DB9FF9D2A0915D21B89239F7D99A E9D8AEC9C69FF8FFCE666F4724270DD9D7B0E0DDACFAF7B9BCBA7BE3E19FEBE6AAEEEABADDDB9D E9E69FFFFBC6FFF8CA99834FB39F5DF8E9B5EEE7B5FCFEBCDADA98DCD895E8E69CE8E79AE7E89B D7D78EEEEDACFFFEC3CDCC921A1900777945EBEBA7EEE39BE8E39BF0F0AAF4E9A9FFDFA8AC6F39 A36326FCD58FF2DD91E7DF92ECE49DFFEAA4E8BF72EDCC85FAE8A5ECDE9FF8E6A4FFE6A1ECBE78 B3843EDEBF7FEEDEA69296674D4C24181200332D159B9572EDE7C3FFFED7FFFBCEF0ECBAE0DDA4 E4E3A2E7E79FD4D286F5EFA1F4F0A0F3ED9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF8F8E9F0F1CEE6E7ACEEE3B0FCE5C6FFF3E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCE8FCE7CFF4D3CAEBDBD5E9ECF6FAFB FEFFFFFFFFFFFFFFFFF4FBF4CAEACA8CD28B4CBA4A47BB4163C75AB6E3B3E4F3E3FBFDFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFDEFFFEFD6F8D7 ACE1ABC9EAC9F6FCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFBD6ECD6A5D6A45CB75A 80C87FCFEBCFF4F9F4F5F6F5F6F6F6F7F6F7F5F6F5BEE2BD82CC816CC16A89C490BCCFD0DEE6F0 DBF6DDBAE0BA8DC48D56B3537FBC8AC5D1DCF0EDFCF9F9FAF3F3F3F2F2F2FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF6F6F6F0F0F0F2F3F2F3F7F3EAF6EA9ED59D5BB85A81CA85BAE1C0 E5F1E7FCFBFCFEFEFEFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5CC70D7CE73D6CD72D6CD73DDD37AD7CD74CDC36B D4CA73DBD17AE7DD86CFC883302F12746F31D5CD79D9CC70DDCE79E0D67EE9E4928D815B4B430D DCD57BE9DE8FDACF7CD8CE77DED47DD5CB74DAD079E4DA83E7DD86E1D780DBD17ADCD27BE4DA83 E9DF86E2DC79E4DE7DE5DD87E0D78CF1E79E8C8336D1C973F7F094EFE88CF3EC95FFF8ADB9B067 777223F5EE9EEBE493EDE290E2D783E0D47FE2D680E0D682DAD27DE0D984E1DC86DCD77DDED87A DAD377D4CD71DAD379E3DC84E6DF87E1DA82E0D982E3DC83DDD67EDCD57CD7D279CECA71DDD77F E7DF87D6CB75D8CB75E6DA84E8DE87EEE58EE8E28ADFDA81DFDB83E3DD89D2CB7BDFD78CE1D891 E1D794DED391ECDF9BE5D890E0D585E0D47DDBD073D9D074E2DC87E5DF8BEAE490DFD985E0DA86 EDE793ECE692E3DD89E6E08CE9E38FE2DC88E0D881E3D980E7DD84E5DB85DFD580EDE290EFE494 DED284E4D88DEFE399E6DA92EDE39FEFEAB52F2A1128220EDFDBB8ECEDB3E8ED9ED9DE8CF0F1AE 8A89540705003E3E10C4C170F6EE91EEE588ECE388E7DD87E7DF8CEDE595EDE497E8DF94EAE196 D6CE81D8CF84EAE194EAE192E2D98ADAD183E3DA8DEDE497E9E093EBE295DFD689E6DD8FEEE596 E6DD8EEEE195F2E697F3EB97F3EDA2E9E6A94642210C0600716D42F2EEA7EEE991EDE590F1E697 E9DF8EFAF2A1F6EF9FF5EEA0EDE79CEFEBA1F4EFA5F4ECA3EEE69AEEE294F5E89AFBED9FF4E399 F3E096FAE699FEE998F0DB87DDC874E1CE7CE5D385FFFAB18B7C36A09552FDFFC4556724C3C581 FDEEA8FFF0A5FDECA1F8E99EE9DF95E2D68EF6E198FFE29BEEC57FD58B4DA96626E3BA6FFFFDA7 F6EB8FE4DF7EFBEE91F7DF84D5B55FD4AF5CE6BF6EF4D582EFDE85EEE38AE7DE88F3EDA2FAF6B9 8885570B0B00C7C68AF9F9B8DFDD96D2D088DAD88BDDDB85DEDC86DCDB84E5E288E9E48BE4DE85 EDE88CEAE487DDD577DFD677EBE182E4D97CDFD479EBE083E6DD7FE7DE81E7DF84E1DA7FE2DC85 F5EF9CC7C071E2DC90D9D4955C5439120A0046431DADAB6AD8D885EBEF90DBDD7EE9E996F3F3AE E2DEABBFB79396916D3532042C280A666331A8A670E4DFA8F9F4B8ECE8A6E3DB94D6CE83E5DE8F FAF29FFCEC96FFE18BC894477F4400EEBF76F5DD90DFD586E1D789D9C67DDFCB83EDE198D1CF84 F0EAA3EBDF95F3E496D2C382A37933FBCF86EDD398E3D58FF1E89EEDE7B2F1CFA4814E19BC8E48 FFE3AEE8D3AED8D2B5D1D6B9262C14313422A19F878F896F8C87687B7654767251767352767159 626040706D4793866C907C6A664F3467512F8A7A61807961A0A277B8B58BCCC79CCAC698D6D2A0 DCD9A7DFDCACDAD8ABE8E7BCF9F7D05856342A2A16EEEDBAEEE99BE8E996E9ED9FF1E7A4FFDEA2 996126AC7331FAD989E5D77DD3CF73E5DE89FEE596E4B772F3D490FEF4B1F1E4A3F6E59BF8DB8A F6CA73C2913CC9A252FFF4AEFFFFC8FFFED0D8D3AA99946C504B25403B146F6A43A8A37BE2DEAF FDFBC7F4F3BBF7F7B8F0EEABE9E396EEE798ECE596FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAF1EDEDC8F2E9BFFBE9C4F8EECDF5F1DB FBF2EBFFF6F8FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF5FFF5E1FAE4C6EAD3C1E4D3 F4FBF8FFFFFCF9FDEECCEAC69ED79C7CCA7B66BE6566BA6481CC7CABE4A3E6F7E4FBFEFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FDF5CFF4CC B4ECAFC1E9BFDDF2DCFAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF5F5F5FAFAFAFFFFFFFFFFFFFFFFFFF8FCF8B3E1B272C671 6CC16BA2D7A0E7F5E7FFFFFFFEFEFEFEFEFEFFFEFFFDFEFDE2F4E1B6E1B564BE6270BB75B9D2C9 EAEDF8DFF7E1B0E1AF82CA8173C372A1D1A9DCE5EEF8F6FFFEFEFFFEFEFEFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFDFEFCBDE2BC7DC77B79C779 A7DAA7E3F3E3FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D074E1D87DE2D97EDFD57CE4DA81D7CD74 D1C76FD3C972DAD079E3D981E1DA96403E23666024CDC571D6CA6DD6C871D4CB71EFE996968965 393000D6CF75DDD183DCD17FD7CD76D7CD76D6CC75D7CD76E4DA83DCD27BE2D881DDD37CE2D881 E3D982D5CB73DED676E4DC7EE2D982E4DA8BF7ECA1C2B8699E9441F3EA92F7EE94EAE18BF7ED9D D2C87B80792CDFD889E8E190E9DE8DE6DA86E6DA84E1D57EE4D983E4DC88E3DC87E6E18EE6E085 E7E07FDFD877DFD77AE5DD82E7DE87E1D880E5DC85E7DE85E1D87EE1D87EDDD579DDD87DD5CF77 E2DB83EFE58EECE28BDFD27DEEE08BE9DE87E6DC85EFE890E9E38CE5E087E0DA84D3CC7BE3DC8F EAE29BE2D895DDD290E7D997E4D88FE6DB8ADCD17ADAD071E1D97DC5BE6BE0D987E3DD8BEAE391 EDE694F9F2A0F2EB99E2DB89E4DD8BEFE896E5DE8CD5CE77E4DC82E0D87FD4CB76DBD37EE8DF8D EDE494E7DD91E7DD93E8DE95E6DC94EEE49FD5D19148461C0B0500938D7AE6E2BAE2E3A3F4F7A9 E0E29CE8E7AD92935B4B4E1CB7B861EFEA8EE9E187F0EA92EEE593E1D889EEE599EBE198E8DF95 ECE299DAD087DED48BE8E093EBE295EEE598F4EB9DE1D88ADDD486EBE294EEE597E0D788EAE193 F1E89AE9E093EFE399EDE392E8E18DFAF6ABE0DBA5373218100B01A4A06CF7F4A9F2EB93E9E089 F7EC9BF1E998F7EF9FF4ED9DF7F1A3EDE99CF0EDA1EEE89DF4EDA2F2E99CE9DD8EEFE192FBEA9C F3E194F7E497FAE697E7D280DCC671E6D07BF7E290F6E598E7DA90473808E5DA99C8D8972E4504 DBDC99FBE6A3FFEDA6FBE098EBDA8FEBE296FEF7ABF5E297C0944A965A12B78039FCDD93FFF2A1 F5DB87FFEE97FFED97F3C673E0B15FE3BD69EAD57EE1DF83ECF091F1E993F6ED9EE1DA92EFEAA9 CFCC927E7B463C3B166E6E39FBFBC3FDFCC1F9F9BBE9E9A4E9E8A0E4E39BD4D387DEDC8CE9E692 DFDB84D6D177DDD879E2DC79E3DD78E9E27EF5EC8CEBE284EBE282E7DE7DDAD372D6D06EDCD677 E2DD7EE6E086DFD983E6DF8ADDD78AE4E0A6C6C48F5D5A331A1700514D23BBB789FFFED2D6D2A6 807C5139351549441A7D7B44B7B871DCDD94EDEEA5E9E9A0E5E399DDDA90DCD88FE1D88FE9E197 E1D98EE7DC91F6E594FFE492B9863B9A611CF7CB82EDD98DD9D486EBE69BE6D892CCBC79CEC784 DADD98EDEDACE7E39DFFF6AEE2D79BC29E5DFFD28EF8E2ADDCD292D6D38FBCBE8BB89F7768370D 6D39129A703D7B63387970526B6E58000000191C0D2A291038321E352D1B403823544F38504C34 524E39454328413E1F4F432D503C2F2F1700321E014635202B25112C2F062E2A08272003211B00 312B09332E12312D194340254B482F88846538381D1C1A0DB8B793F3F5AEEFF8ABF9FFB9FFFFC7 FDDAA8925D2AA47236F4DA8FF9F19CDADC84DBD383FEEA98E6C571F4DE8DF7EFA1EFEB9EF7EB9B FFE693FFD580D79F4DB58339FEE4A7FAECB8EFE5B2F6F1BEFFFFCFFCF7C7D2CC9FA19B71564F28 433D146D673EC3BE92F8F3C2FDFAC7EBE6A8F1EDAAF6F1AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFBFBF3FCFAE6FCF8D6EEEDBA EAE3B5F6E1CEFFE9E8FDF9F5FEFDFAFFFDFBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFAEFC5E7C9 B3DDB7E6F0E6F3F8E6E1F2C882C87542AE3F3CAD3B68BA67B5D2B4D7E8D6EDF9EBFBFEFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEFAED AFE7A991DD88DDF3DAF6FCF6FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1E4E4E4EDEDEDF8F8F8FCFCFCFFFEFEEEF8EE8ED08D 40B03F7DCA7CBDE4BDF1F9F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFADDF1DC64BF625CB55C A9CDADE8EAEBE2F3E29DD69D69BF688FD18FC2E5C4F1F7F5FFFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2EDD29CD79B 6DC16C89CC89D4EDD4FFFFFFFEFFFEFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED579DDD479D5CC71CBC268C5BB62 D6CC72D4CA73D9CF78E1D780DED47CDAD3903D3B226B6629D7CE7BD1C567D0C26AD0C76BEBE592 998D66393100D9D279DBCF82D6C97BD7CD76D9CF78D7CD76DED47DDFD57EDBD17ADBD17ADCD27B E5DB84DBD17AE1D77FDFD679E0D779E8DF86E9DE8DEFE495DDD284A19646E2D884F4EA93EAE089 F2E890E6DE8B8A8336B1AB5DDED685E1D683E9DD87E2D77EE8DC83E7DD84E8E18AE0D985E3DE8C E2DC80E1D975E0D876E4DB7DE7DD84E2D881E2D881ECE28BECE28AE3D97FE5DC7FE1D97ADED77D E5DF87EFE890E5DC85EADE88EEDF8AE5D681E3D57FDAD079E5DE86E6DF87E9E38BD5CF79CFC876 DED789E5DD93DAD089D7CD86E2D58EE4D88DE4D988E9DE86F1E789E6DD829E9644DCD584F6EF9E EEE796D4CD7CD2CB7AE6DF8EE3DC8BE2DB8AE9E291E5DE8DDED781E9E28ADDD67ED5CD78DED683 EAE191E2D98CDED588DBD287DCD28ADFD58EDED68EF3F2A2CFCE8D575228110B00110C003F3D08 6260239B9A65CECB9EFFFFD3EAEEACD7DB87E5E18FDCD785F6F0A2DED68CE4DC93DED590EEE49F E2D893EBE199E9DF97EEE49CE7DE94E8DF93ECE396F1E89AE7DE8FDFD687E9E091EEE596E6DD8E EEE597EFE699E8DF92F5E99FE7DE90EBE591F4F0A6B8B484140D06191601C2C080F3EEA0E9E388 E4D982ECE08DE4D989F8F1A1E9E292E6DF91E7E194EBE599F5EFA2F0E89BE9DD8EEDDF8FF7E696 F9E89AFFF2A5F3E091E3D07EDAC572F2DD88F9E997F4E191F1DF93C5B56E312300EEE5A592985C 475518FCF9B7DBC683F6D990F2D38AECD389FFEDA4E2CE84917227976C1FF2CE7FFFF7A5F8E691 FDE592FFF2A1FFD788DBA052FEC174F5C273F8D886F3EE93E0F391D8EC8DD5D483E4DD97F2ECAF 8F8A514C4A113633013F3E092C2900706F407E7B499E9D64BBB984CAC898CECA99E3DFA9ECE7AB E4DF9DDDDA90D6D082DCD784E0DA85E9E38AE5E085F1EA90F3EC91ECE58AE0D97CCECA69BEB959 C3BF5EE5E083E3DE82DAD57AE5DE88C1BD66D5D680EEEFA2FAF8BDC5C0984E463020160B4A4037 2D24175E563DB9B38DF6F3C1FCFDBDEAEE95DDE087DDE087E9EC93E7E791E1E08CE9E695EEE89A F6EEA5EBE39AEBE19CF6E69DF5D88F9B6A27A36F2EFFE29FE8DA91DFE195EAEBA3E5DD9BE4DA9C E9E5A7CDD293C9CF93C8C889C4C17D98925A63410978490B64521E534F1060631E6B72418F7D54 65360C804712ECBF7BE6CA8EEADEB378765C12160BB8BC98E4E2B9F8F3C9F8F0CBF9F2CDFFFFD0 F1F0BCF0EDC5EFEFB9FFFDBFFEF7CCF4E5C0B5A075D9C58DFEEFC6EDE6BEE6EAB2E7E5B8E6E0BC E9E3C0DFD9B7BFB994A7A37B9D9A6F5A592E43411A353215020100242306272C00485317636734 94855BAF8664905A37AE7E51FDF9BEF5F2ADDFE29EE8DFA4EFDE98E9D279E7DD86E2E293EAEDA1 EAE195F7DF92FFDC8DD99C51945A17FDD299FFEFC0ECDFA5EBE7A7EBE7A8E6E1A8F0EBB5F6EFBE FFFFD5E3DCB2867E572F2702453D1AAEA680F7F3C3FFFDCCF1EFBEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFFEE F4F6D8F1E9C8F9DFC4F9DEC4EEE9C4F5ECCFFFEFDEFFFBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F7F6 C2D3C299B3959DAF9293BE8381C77060A9575FA65D80C37FB5DFB5EEF1EEFFFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3FEF3B6E9B29BDE94EEFCEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBCECECEC4C4C4D1D1D1E5E6E5ECF3EBCCEACB 7CC77B49B148A8DBA7DFF3DFF9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F8EF90D28F 64BC626FBC6DA0D29FBCE2BB76C5764CB34BB2E0B2E4F5E3FCFFFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3F8E3 B6E8B55BBC5A5FBB5EADDDACEBF7EBFCFEFCFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED579DBD277D7CE73D5CB71 C8BE65D5CB72D5CB74DCD27BE3D982D9CF77D8D18E5755325B551ACAC26FD2C568DFD178E1D87B F3EE989B8F69231A00C0B962DFD287DDD182E7DD86E4DA83D7CD76E3D982E2D881F2E891C3B962 B8AE57E7DD86E6DC85E6DC84E9E084E7DE82F3E990EAE08BEBE08FF2E798BCB162B5AA5AEEE490 F0E68EF2E98DFDF69DADA7589B9446F2EB99E8DE88F0E58BEFE489EBE085ECE287E8E188DCD681 E3DE8BE3DD80E5DD79ECE482EFE688EDE389E8DE88ECE28DECE28BE8DE87E6DD82E3DA7DE5DD7E E7E084E2DD82E4DC82DED47BE9DE85EFE189D4C76EE2D57CE0D67DE3DB81DFD87EE7E188E5DE8C DFD787EAE393F0E99BEAE295E9E194EEE295EEE392E3D983EDE289F3E88DE8DF85E2DB89E9E290 EFE897E5DE8DF0E998E2DB8AE0D988E4DD8CE0D988E1DA89E2DC8AE1DB87DFD984DAD47FE4DE8B E2DB8AE0D988DED789DCD587DBD388DCD48ADED68CDFD88CDFDD85EDEB94EEEC9BBEB86E847F3B 65602D423B261E170C140F0054543ABDC38EDCE29FE6E4A0D3CF8CE2DC9CF5EEAEF1EAABDAD391 E8DF9EDCD391E7DE99E6DE96E8E097DED58CE4DB90E6DD91EAE193F1E899EAE290E9E190F3EB9A EEE596F2E99CEDE497E6DE93EDE49CDED687EBE793F2EEA4837F55070000353405E4E39BEEE999 E6DF84E9DD83E2D582E6DC8BF3EB9BDED686E6DF91EFE79BE8E095F4EB9EFBEFA3F5E698F6E394 F7E492F0DD8CDFCD7FD4C172E3D07EFDEA97FEEA97F7E290F7E396F2E399BFB16E6F6424FFFFCE 897F49756D35EEE4A4E0D48BFEF0A3FFEB9FF4DE95B18742906621D0AC61FBE18EFEEC93F2E98F F3E98FFFE895F7CC7EE6AB5EE0AE61FFDD8CFCE690F3EC93ECEF96E7EC96E0E590D1CF80DDD798 E4DDA99B9462A6A36955531852501824210E25220E2623091211000F0B001B14001A1300393117 4B43286059398E885CA59F67C9C285E1DA9BF8F3B5F2ECABDAD48CE0DA8BD5D080CDC875D8D47F E0DC85D6D27AD5D179E4E089E6E18DE0DA87EEEB98DFE08AE1E293DDDC9AA4A075453E233C342D 3F35292117097A7362DDD8B5F5F1C7EBE9B1DBDA92E2E094E7E597E1DF8FE0DD8AE5E38FD8D681 DEDA87ECE895EEEA97EBE595F4EDA5F6DC9D8D6026AA783FFFF3B6EEE69FDEE59DD6DD98B1AE6E 988F558F8D54666D324E561D4B4E10676323857F48755318C59556D8C591DCD897EDF0A7F6FFCA FFF3C7C49665985815F6CE77F7D983FFF9B857552A212510D5DA9DF5F6AFEEECA7F0E9ACEDE7AA E5E099D1CE81D0CE8ED6D788F0F098E1D791E2D091745F1AB7A552F8F3B3F3EEADEBEF9EF1F0AC F1ECB1F1EBB6ECE6B2E1DDA7DBD99EF4F3B4EAEAAAFFFFC5D4D29F1512007B7A57BEC195A5AC81 797754755D4351211341070056260A66512F848357A5A67CD0C3A3E5D3A5CCB871F9F3B1EEF2B7 E7EDB5ECE6ABF7DF9FF6C57FDB9F55AC732AFCD791FEEEADF1E49EF7F3A9F4F0AAE4DE9EE5DFA2 EAE3ADF1E9B8FCF5CAFFFFDDFCF5D2B6AE8D6358383A36136D6C48C2C19CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFDFEFFFDFEF8EFFEEAD3F6E1BBE7E3AEF1E0B2FDE1BFFBF1DEF9F8EAF9F9EDFCF9F2FFFAF9 FFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFFFAF5FFFBF2 EBEBE0B2B3AC757C714A5C3A36722A3691326492629CA79BCBD1CBE5EAE6E8E9E8EBEBEBECECEC ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEBEC E9E8E9D9E0D9B7D5B7ABD3A9DEE6DDEBEBEBECECECECECECECECECECECECECECECECECECECECEC ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC ECECECECECECECECECECECECECECECECECECECECECD4D4D4B5B5B5A0A0A0A2A1A2B1B3B1B3C7B3 9BD29A81CB7F80C97FD5EED5F9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FBF5 CBEACA87CE8649B34850B64F7BC97A5ABB5955B954D1ECD1F9FDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1FFF1CFF5CE69C5684DB64C79C978BBE5BAF0FBF0FDFFFDFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD67BDBD277DCD378 DFD67CD0C66DD8CE75D8CE77D6CC75D6CC75D4CA72DED795605E394A4409CFC674DACD70DACD72 D3CA6BF1ED95B3A780312800BCB55EDBCE84DED183E0D680DCD27BD6CC75D8CE77E3D982E0D67F D0C66FC5BB64D7CD76DCD27BEEE48CE7DC82ECE187EFE48BE6DB82F0E490EADE8FD5C87C908336 EFE392EDE28AF0E686F1E88CD2CC7C867F2FEFE993F1E78FE4DA7CF6EC8BEFE484EDE485E8E185 DBD57EE1DC88E1DA7EE3DA75EAE17FEAE084E8DD84E9DE8AECE08EE6DB88E4D984E7DC84E4DA7E E9E080E9E286DDD67CDCD279DCD178E7DC83E1D27BDECE77ECDF86E7DC83E3D980DED77DEDE68F E1DA8AD9D283DBD483E0DA88E3DC87E6DF87E5DB84E2D980E4DB81E5DA81E8DD84EAE18AE3DC8B E6DF8FEDE696E2DB8BEAE392E1DA8AE5DE8EE0D989DED787DFD888E0D989D8D180DCD583D5CE7D DED787E6DF8ED6CF81DAD385E1DA8CE4DC8FDCD487D9D185DFD88CDED784D6D074E0DC78DDD873 F3EC92E4DC94EAE1AFE2DAB87874590000001A2008A2A77DF1EEBCFFFAC7E1DDABC3BD88554F21 252012443E168E8948DBD290E9E19AECE59BE6DD94E4DB90E3DA8EEEE597EEE595E8E08EEBE390 F2EA97ECE393EDE497EAE195E7DE95E8DE96E9E393EAE692F3F1A6544F2A160D0757561CFAF9A9 EAE592ECE388F4E88DE8D984F7EC9AEAE091E6DB8CF5EB9EF0E69BEFE49AFAF1A5F1E194FFEEA1 FFF19FEED684DCC775E8D688FCEB9BF7E593F2DF8DF7E492FAE898EBDA8EF1E59DB4A96992884C F4EDB747351BAD985FFFF7B6FCEEA3FFFBABD3B76790681FA5742FE6C17CFFEA9EEED680F8E88B FAED93E8D07ADFBD6AEBC270FAD683FFF19BEFEB90E2E88CECF39CE6E492E3D289F5E299F0ED9E DFD99BDFD8A5E0D9A6F8F3B3A7A55DBFBB7ABCB785D2CEA2BAB785B1B06E999567726A4E60583A 31290A1A1200221B001611000C07001914052E2913595426868154B4AE77D6D195E9E5A7E5E19E DFDB96CFCC85E6E298D5D288CECB81F7F2ABF9F6B0E8E39FD7D392625F2C2D2A035D591DAEA972 F7F5C7F3EFC1ADA77B514A271E16045B5333B8B18CF4ECC1FBF1C3FAF7C2E3DCA0DBD793EDE99F E7E495ECEA97E2E08BDDDD86F1ED99FCF8B3FFECB6AC7E4CA77745AD90567A7231545B15646A25 858142A2995EB7B47BC8CE92D5D9A0CDCC8CE7E09DF1E7AEA77F41E8B26FFBE4AAEBE29AD8D888 D8DF9FE7D59DBC8A53884201DAA245FFE786EFE0984641141E2114DEE39BE1E48CDEDC86E5DD94 E6DF96EAE491E9E48EF1ECA1E1E188E9E786D8CC7DC8B56C6750029E882DC1B063DCD489E2E388 EEED99F0EDA1F4EFA9F8F3B1F0EBA8E0DE95DADA8BE1E090E3E399CDCC8D0F0B009C9A6FF6F6B8 E2E3A4F2EAAFFFF3C0CA9666A86C3AA97A41A593567C7E3D3A3C022E1F00371E134B3413857B4E B2B38CD8DCB9FEF9D5FFFFD1F4CC90D29D558B5A0CD8B563FFEE9DF1E79AECE89FE7E39BE8E39E F4EFAEF4EEB2F1EBB2F8F1BDF1E9B9EEE8BCFEF9CEFCFAD5DEDEBC908D693C3B16FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFBFFF7EEFBF3E2F4F2D9F9E7C7FCDEB8EEE4B8E8E8B8E9E8BBF3E7CD FDEAE7FFF6F5FEFFFDFEFEFDFEFEFDFEFEFDFFFEFDFFFEFEFFFEFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFFFFFEFFFFFEFFFFFEFFFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFFFEFFF7EFFEECD7 F8EAC5DAD9B09A9B88575956232D1C264421426D417487749C9C9CB3B1B3BCBBBCB9B9B9B9B9B9 B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B8B9B8 B5B6B5A6A7A696999697A397A1B0A1B3B6B3B8B8B8B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9AEAEAEA0A0A0979797878787717472 67826775BB7494D693BBE9BBECF9ECFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFEFCF1FAF1B5E0B565BE643EAE3C4BB54963BF628FD28DE4F5E4FEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFFFBE8FAE7A2DCA26AC36957BB5684D183DCF8DBF6FFF6FFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD478DDD479 DED57AE0D77DDAD077D8CE75DBD17AD4CA73CFC56ED3C971E5DE9C767450565016D4CC7AC9BD5F D6C96DD4CC6CE6E28AB7AB832E2500B7B05AE2D58CD3C678CDC36CD2C871DBD17AD8CE77DCD27B D4CA73E4DA83DFD57EDDD37CDDD37CDFD57EE2D77EEBE086EEE388E9DE85FAEE99EEE192F5E79C A7994FEBDE8FF2E78CF4EA89E6DE7CE9E4928B8433BCB65FFEF59AE7DD7CF0E683F2E885EBE380 E8E185DDD77EDEDA83DBD576DFD671E3D978E4D97DE4D882E8DC8BEBDE8EEADD8FEADE8AECE088 EFE487ECE283E4DB7FEBE389F2E88FDACF76DBCC75E3D37CF2E28BF2E38BDFD37ADAD077DFD67C F2EB95E9E295E4DC90E1DA89E4DE86E8E286EAE484DCD373D9D071E5DB7FE2D77EE5D983F2E995 E9E191E6DF8FDCD585E7E090F1EA9AEFE898DBD484DBD484E6DF8FE7E090DED787DCD586E7E090 D5CE7FD4CC7EE5DE90E3DC8EDFD88AE8E193EAE395E1DA8CDBD486E0D88AEEE29BE2D584DAD16F D4CB65E8DF82D9D081D1C985DBD897DEDFA55459330000002F3323E9E7C5B8B48E5B58320C0800 0C080328240C7F7941B9B376E9E3A0E5DF96E6E094EAE499EEE49CE9E095F1E89AE6DE8DE1D986 E3DB88E6DE8BE0D887E9E092ECE398EAE098F0E69EFBF6A7EFEC98E5E398302A09170D0C7D7B3F FBFAA3E6E08DF3EA8EF7E88EEFDF89F4E595F3E698F4E89AEBDF93DDD187F3E59AFDEEA2FAE79A F6E091E8CD7DE7CD79F5E190FEF2A4ECDB8BF3E191FFEE9CF4E392E9D98AE6D78EFFF5B0989051 9A945AD8D29D3B2B04DAC187FFF3B3F2D189C29B4D9D7526DDB56AFDDA91FFE79BFCDE8EFBE28B FFEC8FE8C772C8A653E2C56FFFF098F2E78CDFE083DDE78AD3DD85F2F5A1ECE39ADFCB87F6E49E F0ED9CEFEAABEAE3AFE6E0A9ECE8A0DCD987B7B468D2CB94E9E2B4D2CF99E8E89CF5F1ACE4DDA4 FAF3BBF0EBB2ECE8AED7D39A88864E67652F5A572639360D1210050B07010804002924005E5A2F 8F8B5DBBB883DDD9A2EDE8AFEAE5ACE1DCA3F0EBB2ACA66F635C273B35026D6831D0CC8EFFFFC6 F4F2A9DAD88CF2F0A7E9E5A3FFFCC2C2BC8B574F262F240147391C9C8F71EEE1BBE5D9ADD5CE98 EAE4A9EAE7A6EAE6A3EEEBA5EAEAA4E2DF9BBFB47AA6895947190063320992723BB3AB6ADDE39E DCE09AF5EDADFFF3B7E3DBA0D4D498D1D194DED795CEC17AD7C78ABB8E49D2964CE8CA8AE3D483 DDD97FE1E49AEBD492D59F6591410DB87B26F4CE71F5E09DB9B08C4D4B21D1D48DDBDE83E1DD86 E5DB92DED38BE0D788E7DF8EF4ECA5E1DA87DAD378D2C379D2BA78624600B09640F3DF98ECDF99 CDCB75F4F099EAE594DDD78DE6DF9AF4F0A8F6F3A7DBD986EBEA95FDFDB5DCD89A0B07009A9268 F5EFA8E2DB8CF8E89DE4BF78B37733B7742DE8BC6EFFF6A1FDFBABFAF7B6F5E1B4B596698B6E39 4D3E131815021D1F08625D449C8565B68F62E5B77B9B732FD1B76EE6DD91DDD990E9E3A0E6E19D E9E4A1F5F0AEEEE9A8F0EAABF5EFB3F2EBB2F0E9B2F3ECB6EAE3B1E7E0B6FFFCD4FFFFD7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E5FBE5C7EBE4B3E4E4ACE5E3AD F1DEBCFCDED0F9EBDBF5F6E2F5F5E1F5F5E1F6F5E2FBF5E7FFF5EEFFF6F3FFF9F6FFFEF6FFFFF6 FFFFF6FFFFF6FFFFF6FFFFF5FFFAF0FDF6EAF8F5E4F5F5E1F5F5E1F5F5E1F5F5E1F5F6E3F9F0D7 FCE7C3F6E6B1D8D69F9FA0855F65612539253249335B6E5B909890ABACABAEADAEACABACACACAC ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACADACAD A5A9A596A2968391827D877D979B97AFADAFACACACACACACACACACACACACACACACACACACACACAC ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC ACACACACACACACACACACACACACACACACACACACACACACACACACACACA4A4A49B9B9B979797828182 6264625B735B82BE81B8E7B9EAFFEAFAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0F1E09FD59F68BE675EBC5C90D28FCCECCCF3FAF3FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9FDFADAF1DAA1D9A16EC46D83D082D8F8D9F4FFF4FFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7CE72 DDD478DDD479DBD278DFD57CD7CD73DBD179DBD179DAD078D5CB72E1DA97807D564B4509CEC676 C6BA5ED8CC71DCD473EAE68CB7AD80251C00B2AB59EBDF96D5C97BD3CA72CEC46CD1C66FDED47D D8CE77D9CF78E1D780D6CC75DCD17BE0D67FE3D882E6DB83E2D77EEDE389E7DC82EBDF8AF5E899 F5E79BC9BB70C6BA6AF3E98DF3E985EFE784F1EC96CDC7738B842DEBE388EFE686F3EA86E5DC79 E1D977E8E282E5E086E5E088DDD779E1D873E5DC7AE9DE82EADF89ECE08FEADD8FF1E495F1E593 EFE48CF4EA8DE6DD7DE4DB7EEEE68AF7ED93E1D67CE5D67EEFE087EEDE86EFE087E4D87FE8DE84 E3DA7FE6DE88E3DB8FE6DE92E5DF8DE6E086E4DE7DE1DC77E6DE7AE2DA77E2D97AEEE28AF3E793 EBE190E1DA8AF0E998D5CE7EE7E08FD3CC7CE8E191E0D989DDD686E7E090E8E191E7E090E7DF92 E5DE91E0D88DE5DD92E1DA8DE9E294EBE397E9E294EBE494EDE697EBE494E5DD91E8D99AD0C07B DDCF7BF6E892F2E593E2D889D9D47ABFC25BCAD16FBDC785111509000102403E2E1C1902110E00 5F5B3EA09B6ED6D3A0F3EFB8E6E2A3EBE7A2E7E298F0EC9EEBE499F2E8A0F1E89DE9E092ECE492 ECE491E7DF8BE9E18DE5DD8BF2E99BF4EA9FE8DF96ECE39AEEE799F0ED99CDCB84272203120806 A2A261FAF9A0EAE490FDF49AF3E58BF3E38DEBDB8EF9EA9FF6E89BF6E79CECDD91EFE094F4E396 F3E092D7C171E5CF7EFDEC99FCE795F2E394F4E694FAEB98EDDC8AE8D786F7E797F4E79CF7EEAD 69622EB2AE77C9C697372D00FFF0B2E1BE7E99641FB1772EF5C97EFEE899FAF19FFAEC97FAE791 F9DF86E1BC64DFB965F8DD88FBF198F2F294EEF292EBEE91F6F19AEADD8EECDE93DFD58DD7D38D E8E89DDBDA87D4D08CE5DEA7ECE3A8E3DD8FEAE68CD1CD78D4CD8EBDB781DAD498D6D784D7D57D D2CE79DBD985E8E691EDEC99EFEE9FEFEFA6EDEDAAECEDB1DCDBA8C1C2939C9B7073704E524E32 39362329250825220244402A8E8B60D4D0A4B7B387716D42423E156F6845D8D298F3EEB0F5F1AE DDD890E0DB91F4F1A5EEEB9EF1EDA1E4E197F5F1ABF2ECA9C1B88076684142341D45370C544724 8D8558D2CC9FE8E6BACBC49A94906A6A67445F5938877951A182557D4B1FE1AD7EFFF5BDFFF7B4 E2E59CE1E29BEAE29EF1E1A2EBDFA0E8E5A3E0DB9AE9DD96DFCC81EED996DDAC63CC8D3EF9DA93 ECD781E4D97AE3DF8EEFD78BF5BD81AF5B359C5912DDB362F9E2ABF7E9CF585234C9C98CF2F0A0 E8E093F0E4A4EADD9DE2D791DED28EE9DCA6E9DE9BE9DE92E6D297CEB07C7B581FCEAF69F6E6AE EBD9A3CBC47DEDE89AF0EA9DEBE29FE8DCA0E9DEA1DCD591EEEA9EE3E092F8F5AEC2BD86190F00 BCB18DF0E4A5EEDC97FFF1AEC18D4CAA6422C9803BE6B86CFEEC9DF2EBA3F6EBB6FEE4C5CFA777 F8E091FFF9B6E4DFADB1B290837D655E4A35290500592E1358331CA59165E4E4B4EBE8B3F7F3B8 EFEAAEDCD699E7E2A2FBF7B6FCF9B6F6F2AFF0ECAAF2EDACF6F1B1FAF5B7F2EBB7F6EDBCE9E1B0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFEFAF5FBFAF1FAFAF1 FAF8EDFDECD9FBDEBCECDFACE0E1A3E1E1A3E1E1A3E4E1A6F4E1B5FEE0C8FFE1D9FFEBE1FFFCDF FFFEDFFFFEDFFFFEDFFFFFE0FFFCDDFFEECFF9E2BCEAE0ACE0E1A2E1E1A3E1E1A3E1E1A3E0E0A1 EAE9B4F9F5CDFFFCD6F5F4D2DADBCBADBEAE64A46254A25367AF66B7D5B6E9EDE9F1F1F1F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFF0EF F0F0F0D5E6D4B2D8B1AFDAAFCBE7CBE2EDE2F1F0F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1D6D6D6B5B5B59D9D9D 9F9F9FB6B6B6D0D4D0E4F0E4F2FBF2FAFFFAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9FCF9ECF7ECE3F3E2E1F2E0E9F7E9F5FBF5FCFEFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF7FCF7EDF8EDE4F4E4E8F6E8F8FEF8FDFFFDFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D9CE70DBD172DBCF73D9CC71D2C86CE6DA7EE2D67ADED378DED277DED175DBD282938F522C2600 CBC17FC1B56CEAE087D4CD69EBE48BD1C58C342800A39C58DCD48DE1D887E6DC82D7CA71C9BC63 D5CB72E1D47CDBCD77CDC16BD4C773E6D784E4D884EADB88EDDF8BEEE08CF1E28DE2D680DFD37F F2E692F4E897E1D682C8BF6BF3E991F2E98CE4DE80EFE88CF9F29C685F10DDD589E5DC8BF0E892 EDE585DCD771DBD671E3DE7FEAE38BEAE385E8DD78E7DB7AEFE287EDDE8BE8DC8AECDF91E8DB8C EDE38FE2D77FE3DC7EE3D97BDFD677E6DC7EECE186E6DB7FE4D97DEBE086EADB83EADF86DFD37C E6DA83E5D983E3D986F1E698EEE496E6DE8BE6DC84E2D97CD5CD6DE5DD7DECE485E3D97EECE28A F8EE98EFE591E7DF8BE4DD8AE1D987E9E18FE2DA87DDD684E0D887E4DC8BEBE392EAE291E3DB8C D8D084F8F0A6EBE39AE6DE95E0D88EE7DF94EFE79EE7DF94E8E095F0E89CEBE398DFD88AE8E088 E0DB75CFCB5DE8E67CD3D178E0DF96EAEBA0E3E892D8E08AEFF3B65858430500000400005F5431 DFD5A3F6F2B9EFE8A3F5EEA4EAE294E3DB8AE4DC8BE8E090E9E190E5DC8EE5DB93E5DC90ECE494 EEE693EEE690EFE890F4ED96EAE28EE9E18EEDE494F0E799F2E698F4EA9BF5F3A89D9C6A242406 161600C2C577E9E88EEFE79CF6E9A9EDE193E7DC82F6E29FFBE7A6F5E19CF3E096FAE899FDEC9A DBCA76D7C773EEDD8BFFF3A1FEF2A2FAEE9FF2EC9CE9E388F7ED97F3E195FEEE9BD7C26FE1CD84 F5E7AF6A602CBDBC86B3B18A786332C09D5E916D28CBA45CFDE99AF8E48FE8D77DF6E78AFFEC91 ECCE77DFB65FEBBD69FEE995FCEE98ECE18ADCD77EEFEC92F2ED96F6EE99FAEF9DE2D685DFD787 EBE494DCDB8CE3E099D8D394E8E3A3F1ECA8E1DB8DDED986F0EB98E3DC92CAC47DD6D088E1DB8C E5E08EDFDA88EBE795F1EC9AE2DC8DDAD88AD2CF84E4E199EDE9A5DBD695DEDA9CEBE8ABE5E5B1 E2E3B4B8BB86A4A36F9E9F726A68451F1B001A160D0E0A0254512EE2E1B5FFFFCBF1EBAAEEE69F E3DD92F5EE9EE6E08DF1ED97F1EC96EBE591EBE697F3ECA2E5DD94EDE5A9E7DFAFF6F2C7E6E0B8 887F5B2822001D18071F1B091C190B757150C6C5A4F1F1D0FFFBCCEFCD989B4F21C68B51F7DA93 D5C77BEAE198F1EDA5E0E299D6C986EEDF9AEFE79EEFE89BE4D78AF2E194FFE7A1EFC982BF9547 D1B264F6DD88E7D57EF7EC9EEADD94EAC482C17738A5631AAC7F31FFF4B0F9EAB2766E37C8C382 CECA81E2DE93E2E197DBDD91DEE295E5E69BEAE1A4E7DFA2F9F4B3F6ECB1BCA06ABF9861FFECAD DFD192F0ECB0DBD597CED290E6E6A6F2E7ABF9E3ACF1D99FF6E3A4F8EEAAF1EEA9FCFBBA9F9867 261700DDCFA5F0F1BEF9E4B0FFEFBBB56531B05E22D9974FF0D281F8F2A0ECE79AFFE9ABF2B688 B07B3BEFD97CFCE995F5E5A0F4EBB2FFFFCAFAF6C5CCB084C1936E64381A3C2100272406585938 A2A27EEAE7C0E1DFB1D5D59EECEBAFF1F0AFF4F3B1F7F4B3F8F4B4F4EFB0EBE4A6F1EAADE3DEA0 D5D091FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDFFF6EEFCEDD9F3ECCDECECC6ECECC6ECECC6EEECC6F8EDC6FEE8CDFFE0D6FFE1D5 FFECCBFFEEC8FFEEC9FFEEC9FFEEC9FFEEC9FFEDC9FBECC8F2ECC6ECECC6ECECC6ECECC6ECECC6 ECECC5F2F2D3FCFBE5FFFFEDFDFDEDF2F3EBDCE7D9B4DBA4A0D8969DDA9BBAE5BAD6F1D5E8FBE7 F5FFF5FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF6FFF6 E7FCE6C5EEC0B8E9B3BDECBBD1F4D2EBFDEBF8FFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8CDCDCD C5C5C5CFCFCFE2E2E2F3F3F3FCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFEFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE1D476E1D476E1D476E1D476DED173DED173E6D97BECDF81EADD7FE2D476DBD17AACA65D 322A00C5BB80BBB072EAE089D8D06DE4DB80DBD18F31270091894FE4DF99DED481D7CA6EE6D97C F2E48ADBCD74D7C971E1D37DDECF7AE1D27FE7D886E7D887E8D988EADB8AECDD8BF2E390EFE38F E8DC88EBDE8AE9DF87F5ED95B9B25AD9D27ADFD97FE7E085E8E280EFE890CAC173BAB06AFAF0AA E8DF8EE4DE81E3DE78E2DD76E5DF7FEAE28BEBE185E8DC78ECDF80F4E78CF1E38FF0E493F2E597 F0E394EDE28FE3DB82E7E183E9E382ECE383E9DF80E8DE7FEADF83ECE186EBE086EEE38AF3E890 E7DB85EDE18DF0E490F8EC99E9DE8FEDE292EBE08EEEE48EF0E78CE8DF82E0D77AEDE489EEE48A F1E791F4EA95EEE58FEAE48BEFE791EEE690EAE28DE7DF8CE7DF8CE8E08DE7DF8EE9E190ECE493 EAE192F2E99DCFC77EADA55CE9E198E7DF96E3DB92E1D98FE8E097E9E198E4DC93E2DA91DFD88B EAE482E7E47BDADA77EEEC99E7E7A9CCCB9CCDCFA1E2E5AFE3E8ABF2F2BBBFBD931F19091A0F00 C9BD89FDF3B3EDE39EE1D88CE9E291E7DF8EEFE796F4EC9EE1D88CDED58DEFE59FEFE59EEBE199 E7DE91ECE493EDE592E4DD87EDE68FE6DD8AE5DC8CE9E191EEE497F9ED9CF6EB9CF4F2AD71714D 121500272C01E3E692F3EF97F0E39EF1E1AEEBDE95E8DD82F1DE97FCE7A4FFEAA3FDE89BF7E291 EBD683D9C670F2E28DFDEF9DF1E596EAE194F2E9A0F2E89CF9F194F8EE95F7E89EDBCB7496882E E9DA8FF1EAB8665A27F7EFBB7D7354614517AD8743E2C37BFFFFB3F5DF8BF1E188F6E68AFFF293 EED67BDAB85FF4CD77FFE995F0DF8BF6EF9BF7EF9BD7CF7CDED683FFF8A3DAD27FF5ED99F5ED98 F6EE9BF9F19DECE598E5E0A2E8E3A4E9E4A1F0EBA4E9E398D9D485E0DB8AE9E291E3DC8CEAE394 E9E095E9E193E0DA89E4DE8DEBE496E0DA8BDED88BE1DB8EE7E195EBE599E1DB90DBD58CE8E39A E6E6A2E1E5A2E6E9ACDCDCA7A2A2745F6036312E0D4E4D266060373433083E3F1291905DEAE3A2 FFF7B1F9F2A8E5DE8FF3EC9BEEE895F9F3A1F1EA9BE9E296D4CC85D2C985F6EFB3C9C28EB5AE7D 8780524C471D7B774FB8B58DBEBB937A794F3B3C10606133878956C5C28DDBB986A94F27D29358 FEE198EBDC8EE1D38ADFDA90E0EA9CE1D88EE9DB8DEDE694EEE897F2EA9CF1E19AF1DD99F7DD9B D2B56ECDB265F2DA88E0CD7FE4D58DEAE2A1F4DB9CB67538D3965C8D6027D0B178FFFFCE948757 978C5EFEF7C8E8E3B0EEEFB6EFF5B8EAF2B3EBF3B2E9E0ABE9E1B3F3F2C4FEFED0E4CDA0A87F53 F0D9A7FBFAC9EDEFB9E1DCAFF1EDBAEEEAB3F3E9B4FCEAB5FDECB4F9EAAFFBF3B7F0EAB1FEFBC3 595324403719F8F9CDE9F1BEFAF6C5F1B7839A470EF6A866B47C31E7D47EE4E68EDDD885FFE79F F8B373BE8739F4E784FDEC92FFEFA0F4E9A0F3EEA7F3E8A4E5C688FEC893BF8959E8C493CEC694 79794B49492134350C5D5F35B9B88DECE9BDF1EEBFFEFCC9F9F7BFF7F3B7FEFEC2FFFFC0F5F1B1 EEEBAAE3E09DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFFFDFBFEFDFAFDFDF9FDFDF9FDFDFAFDFDF7FEFEE7FFF5DFFFE6DD FFDFD3FFE1C2FFE1BFFFE1C0FFE1C0FFE0BFFFE3C2FFF0CFFFFCE1FEFEF1FDFDFAFDFDF9FDFDF9 FDFDF9FDFDF9FEFEFBFFFFFDFFFFFDFFFFFEFEFEFDFCFDF5F8FCDFEAFCD9D7F9D5BEEABEBBE8BB CEF4CEE3FCE3F2FBF2F5FBF5F6FCF6FAFEF9FBFFFBFBFFFBFBFFFBFAFEFAF7FCF7F5FBF5F4FBF4 E6FBE5CDF6CB95E08C9DE395CBF6C8EEFFEFFBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 E3E3E3EDEDEDF9F9F9FDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDED173DED172DCCF71DCCF71D8CB6DDDD072D9CC6ED8CB6DDCCF71E3D677E5DC85 B9B46A2D2500B2A96DBDB270E1D780E3DC78DFD67BD5CB872D2304898049E8E39DD8CE7BDDD074 DED275E3D57BE2D47BE2D47CE2D37EE6D782DCCD78DACB78EBDC89F0E18EEFE08DEBDC89EEDE8C F1E591F2E691F4E892DFD57EF5ED95C2BB63CDC66EE3DC83DED77CF2EC8BECE68BF3ED9F847933 DFD58CE2D989DED87BE9E481EFEA86EFE989EEE68FEDE386E9DE7BEDE081F1E58AEDE18DECE08E E8DC8CF1E696E6DB87E4DD83E7E184E9E384F6ED8DEDE285E4D97DEADF83F1E68BEBE086E9DE85 F2E68EE6DA84E6DA87E8DC88F1E592E3D888E8DD8DEAE08CEDE38DEFE58CEDE489F3EA8EF1E88C F0E78DEEE48CEFE591F4EA94EEE78FF2EC94EDE68EE0D883DDD580E6DE8AEBE390E4DC89E3DB89 E7E08FEBE392EFE799E1D98ECEC67BEBE398E5DD92F0E79DEBE398E5DD92DED58BEAE297F4ECA1 DBD487E3DB87DBD38CFAF1C2B6AA925C55471D171026230E2F2E12595933969566D1D298DEDEA2 C5C081DED89BFAF5B6DFD999F2EDABE9E3A2E6E0A2F2ECB0F1EBB2E5DEA7C5BD87BBB274D1C783 F8EEAAF5ECA4E7DD93F1E89BE3DB8CEBE293E6DD90E8DF94ECE399EDE29BF8EB9EEFE498F3EFAF 4C4C280F11004D4F20F7F7A3F3EC94E7D992F1DBA4EFDD93F2E484F0E08AFFF2A0F5E28FDDC976 E6D07DFAE493FFED9CF9E698ECDB8FF2E299F5E89EF0DD97F3D992F6E289E3D57FE2D88CA5A148 AFAE52FAF7A9DFD5A04F420ECCB986291100907747F8E69CFFEDA1F7DF90F6D886FFE793F7D982 D8BA61D2B65EF1D67EFAE28BF4DF88F0E492E8E08FF9F19FE4DC8BDBD382FBF4A2D4CC7BE6DF8D F4EC9AF2EA98EEE695F0E99CE7E3A2BCB877DFDA96EDEAA0E0DA8DE1DB8BE7E391F0E998EAE392 EEE797E8DF91E7E08CDAD57CD5CF77DFDA82DED882DCD783DED987DFDA8BE2DF90DDDA8DD8D489 DEDB90DEDF94F7F8B4B8B77F3C382436330B9A986AC3C286D2D38CACAF639B9B5770703F2D2B00 3F380C8D854CDDD997F3EBABFFF8B6DAD490E9E29FEFE7A5F2EBABC9C1838B82457A73377A7438 948D52B2AC72D2CE96EBE7B0EEEDB4FBFBC0D8D89AC5C784DDE09AC6C8809F9C63AC8960964020 D59463FFE5A2EDDF96EBE098E1DF95E3EDA0DED88CDED585F1EC99DFE094F2F1ACEDE6A7E9DCA1 FFF0B4F4DE9DBCA760DECB80EFE095E6DA95DFD79ACCB582AC7353CE9B7E6F452C5E412D988370 49382A342218604F43463A29423F33353928414B2D363E1E352B193B33224746306865466F533D 4E281F5E402C494233585B3A736A4C715E407F6E46A39C64A3A76FC4CA92DCDEA7F7F4C4EFE3B7 DDD1A4050300788259F9FFD3FBFEC7E7D4998C5D20C18341FFCB83B38738ECDB86D7D47CEEE792 F4D989DCA157E3B866F7F395F1E791FEF0A3EFE49CF5EEA5FDEEA2E0BB71F1B36FA76624E7B570 FFFBB4FFFFB6FAFBB4DADA9DA09E6E7A755148422A5B543EA8A284F4ECC7FFFFCFFEFBC3F9F6B6 F6F4B8EEECB2F9F8BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFCF4 FFF6F3FFF3EFFFF3E8FFF3E7FFF3E7FFF3E7FFF3E7FFF4E8FFFAEEFFFFF6FFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF7FCFFF5F4FFF3E9F8EA D4F0D5BDE9BCB4E5B3BCE5BBBDE5BDC4EAC3DEFADDE7FFE7E9FFE9EAFFEAE0FCE0CBEECBBDE4BC BDE5BCB7E5B6B4E7B3C1EBBED7F4D4EDFCECFBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFAF6F6F6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD4C76BDED175E6D97DEBDE82E7DA7ED9CC6FDFD276E6D97DE8DB7FE6D97D E5DC85D0CA813027019E955BC0B571C9BF68DAD271E0D77BD9CF883A3011817743EBE69FD0C774 DCCF73DBCE72DCCF75E3D57CD8CA71DED078E5D77FDACC73DACB76ECDD88E1D27DE7D883EBDC88 ECDC88E7DC86EEE28DF9ED97EFE58EEEE68FF5EE96C3BC64EFE891E7E086E3DD7FF4ED93F9F1A1 BBB267A89F54FCF3A2DCD57BE0DA7AE9E382F0E98CECE58DEAE085EBDF7EE8DE7DEBE086ECE08C E1D684DDD281F2E797E8E18DEBE38CEBE488EAE485EEE688ECE287E3DA7FE3DA7FEAE186E8DE85 D9CF76E9DF86E6DC85EAE089ECE28CF4E996EBE090ECE190EEE48FEEE48EECE289EAE186ECE388 F2E98EFBF297F6EC93EFE58EF0E68FECE28AE8DE85EEE48BEDE38CEDE38CF1E791EDE48FE8DD8B E8DD8BECE18FEEE391EBE394F6EFA1EAE395E7E092EDE699EAE395D8D183E8E193EAE395DFD88A E2DB8DE7E092E0D788EADFA4E1D4B7231509000000625F45BBBB9AB5B39A0804032823132D2A0C 9E9D6CF7F7B3F1F1AADDDC9BFFFFC4E7E5ADFFFECCCAC6978C875D55502A2D270A0E08030C0300 251A009A8F4FE9DE9DE2D893E2D891E3D991F0E69EEAE097ECE29BEFE5A0EBE19CEDE195E3DB91 E8E4AB3A3A17151600626232FFFBA9F5E892F0DD94FFE7ACFAE496FBEA89FEF28FE9DC7CDCCD70 EBD980FCE792FAE393F0D98CFEE89CF1DC93F2E096FDEBA1F9E39BFBDE98E8D37AD8C572B7A860 837A24DCD57CFDF6ABE8DAA73E2D0092814C271000B8A86EFCEE9BECD484F4D584FFDC8BFFDA89 D6AB59D3AB58F4D581FFF09AEAE087EDE891F5EE9DE2D88AF5EC9DF3EA9BE8DF90F3EA9BFAF1A2 ECE394F1E899F0E798E9E091EEE79AD3D08AA5A15BDEDA91F1EDA2E4DE90F2ED9BF5F09EEFE995 E1DA87E6DF8EE7DF8EEBE48BDDD775D4CE6FE3DC80E5E085DFD982DDD883D9D784CFCC7CD4D284 EEECA1F5F4ABDFDB9E605D2B1714007B7640E3E1A3EEEDAADCDA90DEDE91C8C979C8C777ACAC5E A29F58746E372E27061D17048E8651E7DFAEFFFDCCF2EBB8CEC694635D29403A05857E47BCB779 F4EEA9FEF7B2E1DD97E7E39DF6F2ACDBD98FDDDE91E8E795E5E791DDE286E4E78DF4F7A7EDD492 A45621CD9050FFEDA2FBEFA4EDE4A1ECE8ACE8ECB3DBD5A0E7DCA7EEE8AFEDF1B3F2F6BAF3F2BA DBD49FC6BA85AB9C634D3D01423304483B03382E024138023E2A00401500673F1D674722271001 2B16007A6650351E0E6A55438E7F6B9893799B9C7D9CA6799DA772B3AA80AAA47F91936D77764D 7259335B35107D613678734464693B524B24573D0F372000292400182100243200101A0136370F 4039173B330D060700626F42A6B583D5CE98A28B52835F24FFE5A8E5C17FCBAB67FFF6AFE7DD95 F1E49BC2A45CC19247FFE695F3F59FECE597F2E8A1D9D189EEE79BFFF3A4DBAF5DF0A95BC87D2D EAAE58FFE187F2E492F2EEA5FFFAB8FEF9BEFCFBC6E9E2B59D956E524A26342B0A756D4BC9C19E FEFBD5FCF8CAEAE8B6EAE8B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFEFFFEFEFFFEFEFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFFFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFEFFFE FFFFFFEDF8EDCEECCEBCE6BCBFE6BFC0E7BFC2E9C4CDF1D5CDF4D4CBF3CDCEEECECBE9CBBEE7BD B8E6B6BFE6BEBFE6BEC6E9C5E8F7E8FAFDFAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDED175E2D579E4D77BE5D87CE1D478E5D87CE1D478DFD276E1D478 E6D97DE7DD86D6D285372E0290864CCEC47CCAC067D8CF70DFD57BEBE2975248246E6432E9E59B E4DB86D1C469CEC065DED177D5C76ED5C76EE2D47BE8DA82E4D67EE6D781E5D681CBBC67D7C873 EBDD85F1E28CE6DA83E7DB84EEE28CEDE48CE9E189FFFAA2AFA850CEC76FF3EC92F4ED91EAE38A E5DD8CD3CA7B655C0ED8D07FECE58EE5DE84E9E385F1EA8FEFE890EAE085E8DC7DEAE082ECE186 EFE38CE6DB89DED383E9DF8FEBE38FE6DF87E4DD83E6DF84E3DA7FEAE186E6DD82E2D87EE7DE84 E5DB82E5DB83F1E78FE9DF88EBE18AE7DD87E9DF89EADF8DE4D987E9DE8DEEE48EEAE089E6DC83 EBE188E6DD82DFD57BE3D980F1E78FF8EE95F2E88FE8DE85F4EA91F8EE96F3E992F3E992F0E690 EFE590F2E794F5EA97F4E997F4EA9AF0E99AF0E99AEFE89AEAE394FBF3A5E9E193E8E092EBE395 EAE294E6DE90EBE494DCD482EFE6A4B0A67E040000181400BABA84FFFFCC999974070300EFE8DD 6B6555100D00BBBD72DFDF937677314A480C423F0C3330041E1A001E18084844214E4924746E47 ABA26EA49959CBC07FFBF4B3FEF6B1F2E8A1E8DE97F0E69DE8DE97EBE19AEFE59EE9DF99F3E79B F0E7A3DBD6A43433142120007F7D48FEF6A5F4E58FF9E096FFE9A6EFD584E8D773D8CE64E1D670 EDDF7EFBEA90FEE995F4DD8FFFE89BF6DB91E4CC81EAD587EFDC8AE5D486F7E79DF2E086F8E492 C1A461AD9143FFFAA8DDC57F735A2D534317D3C8911E1700B0A567F4E48FF7E28EFCDC89EDC675 DCAF5EF4CD7CFFE392FDE490EFE08CEBE893DDDE89E9E192EEE496F5EC9EE9E091EEE596F8EFA0 FAF1A3ECE395F4EB9CF5EC9EEBE294E9E294DAD78EEAE69DF0ECA1E5E294DED988DFDA89EDE896 EAE490E2DC89ECE593ECE492F1E88FE8DF7EDED776ECE587EDE68CE6E18AF1EC98DCD989D9D88B FCFCB5E4E2997B7B3B251F054D4723C3BE7EFEFCAFDDDC88E1E08AE1E08FDDDB90E5E298E5E394 C9C873B5B462CCC88ECDC9976A66352620043B34178E8963716B44615B31A39F70E1DDACF8F3BF F0EDACE6E195ECE699E7E295D9D688E3DF91F2EE9EF5F3A1D3D37CD5D47AEDF092E8E98CE2E78C EBD7889E5B17C2893FFFF0A2F7EFA4F3ECADEFE9B9DDDDB4BCB895B1A888A59C7881854E5F662C 4748143F3A11584E2062551F7D6E32867733BDAD6BD8C889EDDEA8FFECB4A68646E6C889FFFDC1 AA975E665321E5CFA29980557F674AFFF2C5F5EEBCF9F9C5E6EFAFE8F1ACFAF4BAFAF8C2FCFEC6 F3F1B6E1C78FC49F65FFEDAEFFFDBBF4F9B8FFF9C2FDEFB4FDECB1F6EFB8E3E3B1D6DDB2BBC39D 909877797F5C030500505025696A414D471A220D002105004223008A6838826439856C3EDBC998 E7DAA8EEDBA5C9AC72E3C180F5E69EDEE295E8E49FECE3A3C6BE7DD4CD86F5E396F7CB7BF3AC5C B16512E2A64DFEDE80FAE99BF0E7A4F4EBA8EEE5A2F3EEABFAF4B4FFFDC4FEF9C7C9C49C655D3D 322913504830BCB893EFEFC6FDFCD4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFDFAF0F9F0E9F7EAEAF7EAEAF7EAE3F4E8CAE8E0BBE5CCB4E2B8B9D4B8C2D2C2 CBE8CBD8F9D7E7F7E7EAF7EAEDF8EDFAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6D97DE1D477DFD276E4D77BE3D67AE4D77BE0D377DCCF72 DBCE71DDD073DDD47CE5E1934A400C877D46CEC578C9BF65D9D073DDD47AE5DD8C5E532A675D2D D6D286E0D781DACC74CBBD64D1C36ADDCF76DED077E0D279DFD178DACC73DACC73DED077DCCE76 E3D57CF1E38BEFE188E4D97FEBE087F2E78EEDE38AF1E990F7F098E1DA82C3BC64F9F299F0E98E F5EE95F6EE9AF3EB998F8737ADA554F1E996E9E18BE7DF88E6DF86E7E088E2DA7FE5DC7DF3E88B EAE086E7DD85E8DD89E7DE8DE5DD8CF0E895E0D983E1DB82E9E38ADED67CE9DF86E9DF86E8DE86 EEE48CE3D982E7DD86EAE089DFD57EE6DB84E9DE87ECE18BEEE490E0D583E9DD8CF4EA94EDE38C E5DB83E7DD85ECE289D8CE75D2C86FD0C66DC6BD62D3CA6FD5CC71EDE58AF4EA91ECE289EEE48C E8DE87E8DE87ECE28CF0E791F2E893EFE493E9E091F1E899EDE495E6DE8FF3EA9BF2E99AE6DD8E EDE495F2E99AE5DC8EECE494F3EB95F5EDA1A9A263090200110F00C4C687EDF2B1A6A871070800 322F290C08024F4D26E8E795E3DF8ED8D68CAAA465BAB37DB1AA7AB6AE82CEC597E7E0B1F1EBB8 F4EBB6EEE5A8F0E6A1EBE19CE5DB94F1E7A0EFE59CE9E095EFE69AE6DD92ECE297F2E99CEFE69A F1E89BF6EDADC1BB90231F06211E009E985EFDF1A1F6E28DFDE396FFE79FE4C873D7C261E1D670 F4E986FDEE91FDEA94FDE695FBE194F8DD8EFDE594FCE28DF6DE84F0D97BE8DC83E6E594F3EC8F FFE999CCA266E4B16BD8A65F9D6D307D573079673CDFE0A30F1900C7BE7CFBEC97F9DF8BDEC06D D4B260F8DC86FFE692FBE793F4E28FECE190EBE694EBE898E2DB8CF0E79BE5DC8FDED588F7EFA2 EFE699F0E79AEDE498F4EB9EF5EC9FF2E99CF4ED9FD1CF80EBE89BEAE798DDDA8BDED988ECE795 F1ED9BECE593E2DC88EAE490E9E18EEFE68EE4DB7ED8CE73E2DA82E3DC88E0D988EDE79AF1EDA3 EDEAA396934E30300A605D26D5CFA1DDD5A3D8D491DAD885E2E186EAEA8ED9D785D9D58BDCD892 C7C37AD2CF81C9C77CE8E6ACE8E6B3AAA87949451E2B260B0905002C2709ABA77EF9F6C8ECEAB9 EAE8B2E0DD9DE9E496E0DA8CD5CF80DBD487EBE598E1DB8DDBD689CCC97CE1DD8FF1EE9FEDEA9B E7EA98FFFBAFB67A39A76E28CCB06498954B7B7739524C1C46431C44431F5E5B388B825DAAAB74 C2C48AD0D09DDDD7A6F3E9B8D6CA91E9D89BA89653B9A662EED797EFD89DFCE2A1BB9E4ACEB45E FAE894EED98C9D88407C621EB296543C1E00917A4CE7D996D7D28ADEE294C9CF7ECEC17CDDD490 D8D790E4E096D4B76F9E742BEECF81EFE696E2E394EAE39DE8E89FF6F6B0EFE6ACF2E5B6F8EEC9 F5F4D3FFFFE9465337151B00DDD7AEFFF1C9CAA881734F2DA88863C1A77F9D8760503D1F4D3A19 422C0C3C220A5C431E644B1FB29A62CCC986F3F9B4FFFCC0FFF9C3E2D7A2EFE8ADFAEDAAFBD18D E1A25BB57026E8B465EED680F5E89CECDF9DF8EEA8F3EBA2EBE499F7F1A8ECE7A3F8F4B7F4F1BE F8F4C8DFDBBA9D9777615D384D4B255C5A34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFEDEEEF0D0EADDC9E7CCCCDBCB D7DBD7E5F1E5F3FFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCD74E0D279E0D279DED077E6D87FE8DA81D8CA71 D3C56CDCCE75E0D178DAD178EBE7976258266D632DB5AD5BA59B42E7DE83EADF86EAE28E776D31 564B1CC8C477CDC56CDCCE75D1C36ACCBE65DFD178CCBD65D1C368E3D67AE8DB7FE1D478E4D77C E7DA7FEEE185EEE185F2E589ECE185EADF85F8ED93F6EC93ECE48CE9E28AF8F199B7AF59F7F098 F8F49EF5EF98E9E28AFFF9A4ECE491A29A49E9E291F5ED9CE2DA87E0D881EAE38BE7E084E2D97C EEE58AEAE086DBD17AE2DA85E9E18DF4EC99EBE591D7D17CDAD47CE3DF86EBE48CE5DE86E0D982 ECE48FF6EF97EAE38BE6DF87EAE38BD7D078E7E088E5DE86E1DB82E5DB86EAE08BE6DC87EAE08B E6DC87EDE38CEDE38CE8DE86F1E78DEDE489E9E085ECE388DDD277D9CE72D3C86CCEC368FFF69C EADF86F3E88FEDE289EADF87EEE28CEADE88ECE290F1E696F4E999F2E797F0E595F2E797F4E999 EEE393E9DE8EECE191EDE292E7DC8CE7DF8EF8F0A4C8C37E0F08000200009B977BE4E5BCE4E7AE AEB56A434800848939FBFCACF4EE96F0E791E9E092F2E7A0E6D899E7DA9EDDCF94EADC9CEDE29C F4EA9EE4D98AE9E091E6DD8EE9E093EBE293E9E091EBE293EAE191EAE291EFE794F2EA97F0E893 F2EA97F6ED9DF2E9A9A59E791F1A03231E04B8B16FFFEFA1F2DB89FEE798F0D384D4BA63FAE487 F7E88EF2E48BFFF29DFFEA9AFFE797FDE293FFE795FFE48CE8CF72DFC863FEEA7FF0E482EDEA9A F3EA8FFFEB9CB68C5193601DAD7732EDBE81C29D756A582BC7CB8A1B2604D8D08FFEE191DAB866 D3B864FFEA94F8EC93E0D67DE8DE85EDE38DF4E999F9EB9EFAEDA2EADE92EEE598F9F0A3F9F0A3 F1E89BF3EA9DF2E99CFAF1A4FAF1A4F4EB9EF6EDA0DCD687C7C575E6E393F6F3A1D2CF7EE1DC8C EDE897EEE997E9E291D6CF7EECE594F6EE9AE2DA88E0D887E2D98BD9D082DDD58CEEE69EF1EAA6 C4BF7D474214282300C5C189FFFFCCE7E2A1E4DD96EFE7A5EFE7A7F3ECA5E8E294ECE793E1DD86 D7D181DAD290D2C894D8CFA1A4A46B3F400B565620CCCC9AD9D8AB9695694443170D0C005F5F2C D4D49FFAFBC3DCDB9BEAE69DEBE79FB7B36AE7E39CECE5A2F1E9A7D3CB8BDED699FCF3BAF8EFB6 D3CA94A19E7080704A632B0D3E0100441E0269631F959151CBC68ADED99DDEE8A3EFF3ADF7F1A8 F1EEA9F4F0B1F0ECB1E3D9A4DED29BEEE0A3FFF0ADE7D288E7CD83D6B873F5D696FFE9A8D6B76C AF8C42FEE098E3C881EDCF8FB29156835D26956D39472502E4CE95F0E0A5DED896E4E199D4BF83 DFCE92F0E7A6E7DB95EFC987A97835EFCA81EDDE94E7DF98E7DA9BE1E397E3EB9ED0CB89DCCF9B FEF1C6FFFCD77C7A550302009E9467FFF7CBB6875A8F5A2DB58D62FCEDBEFFEFBDEFE5B1907F50 F7E4B9FFF2CED9BF9C9B83596955204D3F02322E014245066B6330BAAD80DDD4A9E4DEAEF7EAB6 FAD8A1DEA771AD773DF7D496EEE8A2F8F3A4FAF09AECE495E9E099F0E6A9F4EBB4F6EFBBF5EEB8 FBF7BBEEEDACE2E39AF8F8B1F6F3C3D3CFA9706C46FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDFDF9FCFAF8FCF8 F8FBF8FAFBFAFBFDFBFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7C971D8CA71DFD179E2D47CDBCD74E0D279 E6D880DCCE75D4C66EDED078E0D77EDAD6856B6032534918C3BC63BCB259E4DA82E4DA81DFD97E 80763A4B3F13CECB7CDCD47AD1C36AD4C66DE6D87FE3D57CD2C56ADBCD72E1D478DFD275E1D477 E9DC7FE9DC7EECDF80E9DC7DEFE285F1E78AF0E68AF3E88EF5EB92F4EC93E3DC84EBE48DC5BD67 C8C06BF4EC96F0E991FAF39AEBE48AF5EE97A59D4B9E9548E3D98FF2E99AF1E995DFD87EF5ED92 EBE288E9E086E9E088E4DB83E4DC88E2DB86EFE994E0DA86C8C26DDCD681DCD882D7D17CE0D884 E7E08BEFE893F3EC96EBE48DEDE68FEBE58DE7E189E1DA82DCD67DE3DC83E9DF89E7DD88E4DA85 EBE18DE0D582DCD27DEFE58FEBE18AEBE187EBE387EEE589F0E78AF8EE91EDE386E0D578C8BE60 EEE288F5EA8FF1E68DEEE38AEEE389EADE87E9DD86F1E592F1E695F1E695EDE292ECE190EFE493 F1E695E7DC8BE0D584E5DA8AEADF8EE9DD8EDAD089F2E9A3FFFFC4605926050000322B1FDDDBC6 F0F2C1E6ECA0E7EC97F3F7ACF5F3ACF0E591EADB85F5E795ECDD8FE2D186F8E99EE7D88BF0DF8E E9DC84EFE386EADD7AF0E588E3DC86E7DF8BEFE793EFE793EEE694ECE490EBE38EEFE790F1EA91 ECE68BEEE78CEEE691FCF3B5ADA5851A1503252108D4CF87F4E497F9E594E1C575DEC36EF9E188 F8E38BFAE898F1DD91F4DF92F5DC8EFFE493FAE08BF7DE86DDC265E3CA67FFED85F5E073FAEF8F F1DD92FDF49EE1CD7F5C3801B18D46E9CA7FFFF2B1BB9F736C5C2CBBB675231E09DBBE80D8AB5D DFBB6BFFEE98EDE188E5E487E2E688E5E88EEBE993F1E696F8E69BFEEBA4D7C97EE4DB8DF4EB9D F2E99CEFE699FAF1A3F4EB9DF8EFA1F2E99CE9E093F1E89BE3DD8CD2D17FE9E695EDEA99D8D584 EBE597F1EB9CF1EB9CE5DE8FDAD382E8E190E9E190E4DB8FD9D18CE0D692DBD390F6EDACE1D998 78703E302700817A50FBF3BBEBE5AEE0D8A0C8C47CD0CB7DECE6A1F2EBACF0E9A9E2DD96E3DF90 D7D283DCD78DC3BB828E835C5D542F646428BABB7AF5F5B8F7F8BDEFEFB7EFEFBAD8D8A381814A 4342153A390B9E9E66EBEAAEFEFBBCD1CB8DD0CB8DE4DFA2F8F4B9F4EDB6D5CD98ADA474897E5A 61552D463A1847412697856B8D583F8D4D29FBCF9EFDF9B7FAF7B5FFFCBCDFD790C3CF7CD6E087 DFDA83EBE494E9E098E8DF9DEFE4A8F1E4A7EADA98F3E198F9E597EBD081A28036E3C17BFFE3A1 DEB371BE9351F6D291E2C383FFE9AEF4D49DA5804F9B7344532D0D492A0DC8B07EF4EFB3DDD792 D9C185F6E3A7F1E6A4EADC95EAC47EAA7931DBB369DBCA7CF1E9A0F1E1A0E3E097DDE097D8D895 D5D096FAF1BEA4976D0C0000886E45EAC698B0824F834E1AA47239F9D99AFDE5A0F5E197E2D489 8B7932F6E0A0FCEEB3E3CA91E3CE92EEE19AFCF9A9E4E596BFBF828479476A5B32554923443F17 615633B194699B6D41825829D9C594E5EEB6EBEDA5F2E999F7EEA5F6EDACEEE6ADF8F0BBF6EFBB F8F2B8F0EDA8E9E999ECEF93E9EC93F6F4BBFBF9CDFFFFD5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1C36BDFD179DFD179DBCD75F1E38B E5D77FEADC84E3D57DE3D57DE4D67EDAD177E9E69193875B493F0DD2CC6FC6BC63D6CC76DDD37B DFD97A91874A382B02BBB869E9E085D8CA71D2C46BE7D980E3D57CE0D377E5D87DE4D779E1D476 E5D87AEADD7DE9DC7CEDE080EDE080F2E585F2E98AEEE486EADF83E9E086F3EB92EAE38BF1E995 F3EB96CFC771D4CC79F1EA93E7E085E5DE82E0DA81DFD7867B7128A89E57FCF3A9EFE796F3EC92 EBE388F3E990E6DC83EFE68EF5EE96EDE590ECE590DED882DDD884E3DE8AD9D480D4CF7BE1DB87 E6E18CE4DE8ADED984E0DA86DFD983DFD983C7C16ADCD67EDDD77FDAD57BD7D277E7DD86E9DF89 EBE18CF7EC9AE9DE8CE3D886F2E794F1E791E5DB82E4DA80E5DC80E0D778F1E789EFE586EFE687 D2C96AD3C96DF9EE92EEE388E8DE84F2E78DE8DD83E5DA81F1E590EEE391ECE18FE9DE8DEADF8D EDE291F1E694E7DC8AE0D583E7DC8AEBE08EE8DD8DE1D695E8DF9DEEE9A6DBD49C4A4424040000 797661F9F9D3C9CC964646193C3922847B57F0E398E9DA86EDDD8BEADB88EEDE8AF7E891EFE187 F4E689E4D776EADE7AEADE77F0E686E0D981E8E089F0E894F2EA96F5ED9AF1E995EDE590EEE78E F2EB90EEE88AEEE88AF7F096F5ECAB8D8465120B023D3912E7E295F2E295CBB367E7CC7CFDEF94 EFDC81E9D884F7E197FDE69DFCE398EED382EACF79DCBF64E2C466F6DB7AFAE17FF6E17DFFED87 DABC66FFEBA8FFE49385661F654D14FDF3A6F4EC9CF8F0A9AB9C6D685A2AC7B676270F03BB955A F5C97DF7DB8BE9D47FEEE88EE2E687E0E888E1E78BE6E790E9DE8EEEDC91F4DE97F5E79AF7EFA0 FBF2A3F0E798E8DF90F1E899EAE192F0E798F5EC9DF0E798F3EA9BE1DA8AE1E08DEEEB99E2DF90 DAD78AE9E398E7E196E5DF93CBC378DFD98AF3ED9DE6DD8EEEE69FD4CD92D7D095F9F3B89D9456 382F09685F2CBFB67BEEE4AADCD399EDE3A9DBD297C5C07BCBC77ED1CD84D0CB84E4E099E0DB97 FAF4B4B3AD726D662D3C3508867E51CFC997D7D796DDDE99DCDE97E4E5A1E7E7A3D8D896E8E9A9 E9E8ADD3D39A7B7A46110F003E3C1BA4A271F4F0BFF1EDBBC4C18DB5B07D665F2F312908382F02 817650C4B792D9CDA9E7E2BAFFFFDAD5A68186461DEFC18AF2EDA8D7D590E3DA97DECF8ED0DC8C C9D37EC2BA68DED580F3E897E6DC92DACF8AEDE39EFFF4ADE6D788E0CC7AE1C874AD8C3E896219 FFE19DDDB375A77436F3CC8BF6DA98FDE5A7F4DCA0FAE7B0D1B07C8160302709012C1308A49855 DEDB91F0DC9AE5D693E0D88FE7DE90EBCB7BAC7E2EDDBA66ECE08BE0DB8BE1D28ED8C98BCFC88B D2D296F0F4B885844D180700AA885FDBA979A36836723C04C49556E9C87FE7D380DDCB72EAD477 D6BD5DA8892BFFF29BE8CF7CBDA758E3D583DDD980ECED8DEEF299E7E5A4ECE1ACFBEEC3EEE4BD CEC79E9A8D688D7247390F002804004C3F1596A673E5EBB0F9F2B5E3DCA0D7D295EFEAACF2EEAE FEFBB8F5F2AAF3F2A4F4F3A1EDEE97ECED97FBF7BAEBE5B0ECE7B1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0C26AD8CA72E6D880E2D47C D4C66EDED078E9DB83E6D880E8DA82E6D880D9D077EAE892AEA279483D06CCC665B7AD54CFC570 E3D981E4DF7B9B9252291D00ADAA59DDD57ADCCE76CEC067D5C76EE2D47BE5D87CE3D678E5D87A E7DA7BE5D878E1D474E2D574E8DC7AF1E583F4E885ECE281EBE083ECE185F6ED92F4EC93F6EF96 EBE38EF1E994DCD481B3AB5AF7F099F1EA8EE7E181E6E085FEF6A5BAB06A635816CCC27CEBE394 EFE88EE4DD82F0E991E7E088F1EA92F8F199E9E38BECE690DBD57FDBD682E9E492DDD886D7D481 DCD584DED786DCD584DFD787E7E18DE9E38FD7D17BC2BC65DFD981DCD77CD6D175D7D277D7CD74 E3D981E8DE89EFE492E5DA8AE8DD8BE4DA87EAE08AE5DB82E9DF85ECE386E4DB7BEBDF7FE7DA7A EDE080E0D373C4B759F1E487F1E488E9DC80F9EB91F2E48BE7D980EEE28DECE08CE9DD89EBDF8A EDE18DEFE38FF5E995F2E691EFE38FF1E591F0E490EADF8DE4DB8FECE49ADED88EFFFFC7C4C28C 22200D090A00787855A4A3852923170400040B0000877A38EFE492F2E793DDD17CF5EB92F0E58B EDE287F4E98EE2D77DE9DF86E8DD85EEE58EE8E08BF0E895EDE594E8E08FF3E99BEFE698E8E090 E8E08DEFE891EFE88EF0E98EF3EC90EAE19F74674D0F0801484217DED887CCBC6FF0DC90FEE897 F1DE81E9DD80EFE18FFFE9A0FFE99DFADD8CE2C66EE5C86AE3C764FFEC88F8E080EFD57AF6DE88 E4CF7BFFE8A1D4A767855C0C8A6C20A08E4EFFFFB2EAED9AF6F7AFBAB57F74692EC3B070260A02 DBBD7FFFEC9EFBE797ECDA86EDE289EFEA8FEEEC92E0DD84D3CD78CDC674DFD485F3E798FAEFA0 EFE796EDE594ECE593EDE593F4EC9BF7EF9EF1E998F7EF9DF4EC9BEEE695D6CF7EE3E28FEFEC9B E3E091EBE79CF2EBA3ECE59DF6EFA7F8F0A8E9E198FAF2A5ECE397E3DC99F2EDB6D0CB9466622B 302A05938D4EF1E8ABCAC081CEC484EDE29FE3D895E8DE9AC1BB7FB5B171D0CE83D6D583CCCB7B DBD89368632D312A007E774ADDD7A1F9F6B3CDCB80CACA84C2C27AC9C97FE5E699E2E394C5C67A D8D891DBDA9BF1EDB8F0ECC0C1BC95201B002421035E5A38403D17312E025450208B8954CCC78F FDF9C1FFFFC9E1DAA3CDC78FE4E2A5EFE5A2E9C284834507C49250EDE899DAD890D6CA8BE2CE96 D5E09DB9C37ED0C27FE3D983EBE28BD9D283D3CD83E4DF96EBE69CCAC372D6CA76F5E18BEDD282 7957109F722BE6AD67B6823BEAC579F2DC8EF6EA9BEDE397EEE19AEFDD9AECD7998F793A352105 0502004A4E10CCC081EEE6A6E2E29BDDDC8EC2A95A9C7626D1B764E8E48FE0E394F2EBA8F7E8B7 E9DCB1BCB4846A663508000080673AC99F6B7E4914A36D34F9CC8AFFE9A1E9D889D6D077BDAF52 D3B656DAAF4ECFA140FBCE70C9A84ED2BE68F3EA93E5E58AE6E98BE1E48CE2E39CEDE3A8F7E8B5 FAEDBFFAF2C2FFF7C4F3D5A19F6F3FAE845065551D3E4B0F373C0D6D693FB4B181DFDDA6EAEAA8 E8E89FECED9FF2F2A4E7E59ADFDD94F0ECAAF3EFB0F3EDADEDE6A5E3DD9AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D57CD2C46BE4D67E DFD179A3953DD7C971E9DB83DFD179DDCF77E8D981E2D97FDEDB85C6BB944C410CCAC561B3AA4F DAD07BEBE289E3DE78AAA060211501AAA853D5CD72DED078DDCF76DFD178ECDE85EBDE82E2D577 DFD274E3D676E3D675DDD16FDDD26FE5D976EFE380EEE280E8DF7EEFE585F4E98CF5EC91EEE78D F5EE96F1E994EEE692F7EF9C9E9546C7C06AFDF99AE9E381FFFFA4EFE695F6EBA87C71328C813E E6DD8FD8D177EBE48AE8E18AECE48EEAE28BEAE38BE3DD85E3DE87E8E38DDCD783D7D381E8E592 E0DE8CD5CF7EDDD686E2DB8AE2DB8AE5DE8DE1DB87E8E28CE1DB84E7E189E0DB80D5D075E4DF84 DCD279E6DB84E5DB84ECE190E5DA89EADF8FE3D887E1D783DFD57BDDD478DDD374E2D977F8EB8A EBDF7DE0D372E7DA79C3B657DED173F1E486EFE286F8EB90F4E78CE6D87EEFE28BEFE38EECE08B EEE28DF0E48FEEE28DEBDF8AEEE28DEEE28DEADE89E7DA86E6DC84E9E080F0EA93F5F0ADBCB580 E4E1B0D7D6A357592B0405000000000200000D09002A2503BEB670EFE899EEE895DFDA83F1EC92 DDD87DE7E189EEE893DFD889EBE39BE8E09BEEE69BECE493F1E89CF0E69BE7DE94EAE199EAE199 E4DB90E3DB8DEBE292EDE590EDE68FDDD579E5DC976B5F440A0100413C19CFCB76F2E295FDECA1 F8E593E9DC7CEDE689FBF0A0FCEFA1EFD281ECCD75E6C867F9DA74FFE980F8DD78F6DC7FF7DD8A FFF2AAFFEFB1C5A66A906725CCA957E7D0859B8647FCEFA5EBE595F3EFA9CEC691645A1E867B36 2D1D14EDE5A3F9EE9DE7D787EEDD8BFDEA96F0DD88EFDC88EDDD89ECE18DEBE691E8E894E2E38F F5EF9DECE390E8E08CEBE391EFE794F7EF9AF4EC9AECE491F1E995F1E996F4EC9AE8E28FE0DF8C EBE898E4E094F1EDA4F2EBA5F9F2AEEDE6A1E7DD99EDE59DD3CB80E9E094F6F0AEB0AF7835350D 5E5C31DFDB9FF8F3B6E1DA99D2CA84E9DF96FAEDA2F5E698E9DB8DD8D38CC8C682D2D08BAEAC69 706D2E514E138D8A50CFCC93EDEBACD0CF86D0D17FD1D17FD5D38FD2D08CD3D286D1D17FD6D781 E2E38FDEDE90E2E09EEFEAB7DAD4B09C937A4C443327231D161307151403B2B085FFFFCFFEFFC3 F3F4B0E1E097EBE89CE1DF92CBC97BD4D48DE3DA96FBD99A9E5C20A16D28EBE795D3D485D1C27F DDC487CAD68DB0BA6ED0C077D5CC73EAE48CE6E290CDCC82CCCD84DBDE92C0C171D9D480E1D481 EDD88AE1C57C8E621E904F0CB37C36DAB96CDFD180DDDC89D0D583D1D485D6D28BC5BB79E9DD9E D9CD9057582F030F00201A015A5835979E6EBEC38BA8955DBC9B61E2CD91DADB9FD1DAA3C7C69A A59E7C5246372E1C022C11056947218B63308A6028CCAA6BFFEEA8FDECA1FAEA9DF8EE9FEAEA9C ECDF90EFCA77C18732D99845FDC976E9C978F5E394CBC578D0D084E0E095D4D88ADDE394F6F0AC FCEFB5F6EAB2EEE5AAF6E8AACDAB6BA16A2CF2C787F9E4A0DFE398B8BD83919162696A39565725 696834B8B783D8D79DF4F3BCF1EEB3E8E3A6FFFCBFF3EEAFFAF3ABF5EEA2E3DC91FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACB76E3D57D DED078DED078F5E78FE9DC83E4D67DD4C66DE2D57CEDDF87DBD177DFD986E0D3A94C410AC6C15F ACA54DDBD281E8DD88E4DD7AC6BB79190C049A9744D5CD72DED078E0D279DFD178E1D37AE7DA7E E9DC7FDCCF71DCCF6FE6DA79E5D878E3D775EFE381EFE381E6D979E6DC7BF2E888F1E689F0E78C ECE48CEAE38BF6EE9AE9E18DFAF2A1DBD586ABA34FE9E286FAF493EDE68BE8E08CF3E9A1DDD38F 7D732ED1C77DECE491E2DA83DFD881EFE792E5DE86E5DE84F2EC95E6E088E1DD86E6E08BEEE995 EAE593E0DB8ADDD787E9E292E8E292DDD685E2DB8AEEE994F2EC96D8D27CC5BF67E7E287E4DF84 E2DD82E1D97FE0D880DFD77FEFE793EBE291EBE392EAE290DDD582DED77EDBD47ADED77CECE284 E9DF80F0E686DDD273F1E589C9BE61C8BD60E8DC80F1E58BECE187E5DA80DCD076EFE38CF4E994 F2E691F1E58FF0E48EE9DD87EDE18BF5E993F5E993ECE08AEBDE88F6EA92F0E980F9F297EBE3A8 463F18454128F5F6C9EDEFC0ABAC84A6A47EA19F70949454CBCC7FF2EDA3DFD98EF8F4A2E6E18E E7E38BE9E58EE5E08DE9E396DBD48EEFE7A9EBE2AAEBE19FE0D789E8DD92F6ECA3F8ECA4EEE29C EFE39DECE099E9DD93EFE596F0E695EFE490F3E789F0E49D64573C0E06005E5A23F6F1A0F3E398 FCE89EFAE898EDDF81E5DE86EDE294EBCA78D1AD55EBCD6DF8DF79F3DA71EFD76CFCE27FFADB84 FFE69AFFEDADB0925B72551DE8D696F5DD8CAD964EB69B62FFEAA1F6E697FEEDA5AF9B6A574B1A B7B16C282505D7D793E8E692E5DC8AF4E392F0DA89FAE292FCE392F4DE8DE6D987E8E28EE4E992 E0E68FECE78FECE58EEDE590E9E18DE7DF8DF2EA98F2EA98F8F09EFFF7A5EBE390E7DD8ADFD887 E9E79AE5E396D7D588DBD78CCECA81D7D28CB9B370D1CA86D9D18CE9E19EE5DB9B676035282600 A4A366FAF8B5EEEAA4ECE99EE3DE90EFE899F1E999E0D789F1E496E7DC8EE3DC92E2E09B7B783A 342E009B9662D6D298F4F2ACE7E797D2D37DD3D47BD8D982ECEB9AE2E19BDEDD98E4E49DDBDB91 E4E49AFFFFBFF4F2B18782474F49184A4219746B49A79F83EBE7CDAAA78A221F09252204A6A471 E4E3A9F1F1AFE7E79AEDEE99DDDD83CBCB70E3DF99EFE1A9FBDEA5C288517C4608EEDC90E7DD90 EBDD93E9D88DE0EA94DCE389E8DB83EAE486E1DC81DFDC87D9DB8CD4D88AD8DD8EDADD8AD6D581 D8D27EEFE192E8D68CF0CF8AA66D3083510EC7A45CDECE81B6B76AADB76BA0A861C7C882C8C480 DED697F1E8B2E3E7BEACB59C5C56470605000004000D13041D0B05351509452F13343513181F0D 100F08050402110A0050381E8A6544A67C55DAB186FADFA3E5D693F1EBA4EDE699E7DF91F2EAA0 EDE9A9F9E7A8FFDC9ABC7834D4914AFFCD84FFE19CF7DF9FD5CA8CD9DA9AD1CE91DFDF99E1E696 ECE89EEBE29EF3E9A8F9ECA9FFE29FC2914EB57C36FFD68CEDD587EAE695E7E9A1F7FABAF6F7BD D9DAA8AFAE8265623B252106545028BCB88BF9F5C4F7F3BDFBF7BAF7F3A8F2EB9DEFE99AFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECD7C E8D884E6D681E3D27CD8C871E1D178D5C669D1C265D4C566DCCD6DE2D47AE7D78CD7C8954F4604 ACAC4BADA857CAC178F2E798E0D678D4CA822B20096C6B1FD3CE77D6CC6FDBD073EADF83DDD276 E2D579E3D67AE3D67ADFCF74E3D478F1E285ECDD81E0D375E3D677F3E689EFE587F1E68AEADF85 ECE389EDE58CF2EB93F6EE99F6EE9AF2EA99EBE497C3BD6AD5CF77F6F293FDFA99E8E483E2DD82 F5EE9BADA65B706823EAE09FE4DC91E5DE84E3DC83E6DF85E4DD82DCD47AE4DD82E3DD84E8E28A EBE58FE7E18DEBE491EDE494F1E899F3EB9AF0E897EEE695F1E996F6EE99E7DF89E5DE86DED77D D9D277E3DE83ECE78DE6E088E7E289E5E089E4DE8AE8E28EE9E291ECE695ECE695E2DC8BECE595 E9E291E8E08CF1E995F3EC97EEE891EFE992DDD67FCCC56EE5DF87EFE890EDE68DE6DF86EAE08C E5D889E2D684ECE08BEDE18BEEE389E7DC83E9DE85F1E68EE6DA84EEE28EFAEE9BF7ED9AE9E095 F9F3B59A976A0000006F7151F1F3CAF9FBCCFBFAC1E9E6A1FFFEADE6E18BDDD58AE5DD92EDE597 E9E292F8EF9FDAD180E4DB8BE3DA8CE5DB90E5DB94EFE3A0F4E99DEEE48EECE08CEFE291EDE090 E3D687ECDE8FF2E596F2E596F5E597F6E597F4E492FEE98CE8D28C4F3E27050000828152ECE9A2 EBDA94FBE39DF9E095FBEA92ECE390E5D187CE9445FCCB75FFE586E8DE78E9E47DF4E987FDE78D FFE290F8DE92BD8740986823F9DB9CFFF3B98B7C32AD9A5AAC9164FFE59EFADE85DDBB64A68649 7A662CBDB96F171804D5D190F3EB93E7DC85E9DB87E5D786E2D285E6D589ECDE8FEFE493F0E794 EFEA93E6E188F3EE91F2EB91EAE28DEBE393F1E89DEDE49CF2E5A0F6E9A2F6EAA1F4E89BF2E596 EFE69BEAE7A9E2E29DD0D182C3C270D5D484B8B76BC9C77EF0EEA9F6F3B79F996B251D0063592A CDC278E7DD8DE1D980F1EB8BDCD873E6E480E4E486E5E492F1EFABF9F6BCF0ECB9A89E6D594D18 6F642CE1D798FFF9B1EAE394E3DD87E5DF86E6E086DBD47DF2EB97E3DE8EDADE8DE2E49CEFEFB2 E5E3B6B9B592918B6E453F204C441B908A54E3DF98FDFAA8F4F1A1E9E3A2E9E3A8C5BD8A332A1C 160D00978D6DEBE3BBE7E1AEE0DC9BDAD88AE8E792E8D593F9E2ABF1EDADEBD194804C15D8A870 F0D08CECE795E8F097E5E78DEDE58CE6D97EF5F090EFEA89E4E083E5E488ECEB91E8E78FDFDE87 D3D17CD6D481E3DF8EE1DC8CF6ECA3EAD4957B5719B28740EAC580E3D195D3CE97C8C88EE6E19C F3E7A0F4EAA8EAE6B0D9DDAEECEEC5F5EACBCFC9A9A4A8887E80644A35202A0603240A03261D05 2A260C56492E867D4EBCB485C4B893D0C690E1D4A6C6B997BFB87DCDC990EFE9B7E3E09AE6E099 E8DD9CF9E9ACFFECB0C88E52B16A2EDCB771FAF5A9EBD795F1D099E3CD93DDE7A1F3EDA6ECE29A EDE99EE9E49AF0F0A4F9FAACF1DD95FFD598A1561DCD9E5DFFF7ACD8D98CE2D38EF5EAA4F1EDA7 D5D28DE5E4A1F7F5B8FBFABFDDDCA8868356302D093F3C1A837E62A6A381EAEAA9ECEDA1DEE094 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E4D380E8D882DFCF79E6D67FEADA82E0D176DCCD72D6C769D5C667DBCC6DE2D27AEAD98FDECF97 4F4809999A43BBB86AC0B871E6DB8EE4D97CE0D58933290A5C5B17CECA75D4CB70D6CD71E5DA7F DFD479DED277E1D47AE5D77DEBDC83EBDB82E7D77EE4D57BE6D97DE9DC7FF7EA8EF1E68CF2E78C E9DE84E8DE85EBE38AEDE68EEBE38EEAE28EECE492E7E091FBF4A4817B25CFCB70DDD979F2EE8E E8E386E9E38CD0C87A726924B1A868EDE59CE7E088E1DB81EDE68DE5DE84E8E187DAD379E1DA80 E4DD83E4DC85E1DA83EAE28CE8E08FECE493F1E998F0E896E9E18EE4DC89E6DE89E5DE88DAD37B DCD57BE7DF85DDD87DE0DA82E2DE86DEDA82D2CD78D8D37FECE793DDD886E3DE8CE1DD8BD8D382 E7E292EBE595E4DE8AEAE391EEE893EFE994EEE893E8E28CDFD983DCD681DFD985E4DE87E4DD89 ECE291ECDF90EADD8EEEE28FEDE18BF0E58BE9DE85E9DE85F3E891ECE08CEEE28FF0E491F0E68C E8E18AEDE89CE1E0A38485540103003B3D29B7B78BF8F6C5FBF5BAEEE5A1EEE59CD4CB80EFE69A F4EB9DE6DD8EEAE191F2E897EDE292EFE495E7DB90E2D68CEDE199F3E799EDE28DEEE28DEFE390 EFE390F0E18FF3E492F5E593F4E392EFDE8CF0DB8AF6E28EEFD97CDEC8844C3C2209030088875A FAF8B2F2E59EFBE59FFBE397E6D37CE9DE8DF3E295F3C571FFDB80F5D97CF7E988E4D878EAD87C F4D37FECC678A67729B68A3DFFEA9CFFF1ABDECF9483762CD2C081A88D5FFDE69CD2AF53E9C468 C6A3616D5A1BC2BD750E1000BEB978F3E78DEADE86EADE8AE7DB89E4D788E7DC8DF5EA9AF7EC9B ECE28EE9E088EAE189EFE98AEDE78BE8E08AECE394F6ECA3F7EDA7F6E8A6F5E8A3F6EAA1F6E99E F2E696EBE392EBEA9CEAE8A2DAD796CFCD8AC7C67BD4D486F0EEA8F4F0B7837E503E3811969060 EFE6A5CFC471E3D982EAE287EFE98DF0EB8FE9E58BEAE894F4F3A9F6F3B2A3A26A53501E7B733F BFB478F7ECACEAE19ADAD285F4EC9ADFD883ECE591EAE291ECE495F2E99FEAE29CF9FBBBDADA9E 91915A4846175A552D9D966FCEC79CF4EDBAF6F1B3EBE69DE6E08EDCD781E0DA85E9E297FCF6B7 E1D7A35249271006007F774EE1DBA9E7E5A5DCDC91D7D784F5E599EFDD95E9ED9DF9E99F966928 BE8144FEE49CE6DC86DFEC8DE4E88BC9C369D8CB76F4EC9FE9E199D4CC84D0C881E9E19CFFFAB7 F3EDABF6F1B1F0EBACDFDC9DD0CD8DE4DEA8E8DAB4B38F628B5B2D95653B795D3F7B6E534B4326 6D5F33836F3E806F42574F2F3A3B143939114031145B532E848560797B58422C1A2F0903351901 2920032F2B0D4C3F1E493C28584C32605737979061B0AA85817B62777245CEC89FC3BA96FBF7C2 FBF7BFFFFFC8FFEDB4FFDAA1DDA56EC2814AF8E29DD9DC93DFD597FDE0B0F7E3ADE1F0AAF4F2AC F7EAA7EFE7A5DBD891CED386EAEB9DFFF7AFE3AA6CA0561CDDB56FFEFBACEAF19FF2E69AF7ECA1 F5EFA4E3DF94EBE79DEBE7A0E8E5A0FDFBC0EFEDB7D6D4A6B8B58F7E7A5A3F3B1C423F1D898659 CAC79BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBCB74DCCC75D6C66FE2D27AE5D57DDACB70E0D176DACB70D6C76CDCCD72E0D079DDCC82 D9CA914C440F75752CC2BF70B2AA61E3D88AE8DD81E7DC9142390B464512CCC875D8CF74D1C86D DFD57BE5DA80E4D97FE4D67DE1D27AECDB83EFDF87E1D179E0D078E4D77BE4D77BF0E387EDE288 F4E98FF1E68CE8DE85EEE58DEDE68EE6DE89E5DD88E9E18CE1DA89EDE794C5BF69BBB65CF4EF94 E0DB80D1CB73E6E08CFAF3A3C7BF745C540CBFB669E1D985DFD882F9F29BE4DD85F0E991E9E288 EBE48AEAE389E5DE84E0D97FECE58BE0D885F0E897FAF2A2EBE390E5DD8AF7EF9DE4DC87E3DC86 DAD37BDFD87EE7E086D6D077E3DD87E3DE89DBD682CBC672CEC975E2DD89E2DD8CEBE694E6E18D D5D07FE1DC8AE6E18DE4DE86E1DB83E4DE87E5DF8AE1DB85E6E08AE8E28CDDD783E0DA86E7E18D EEE895F4EA9AF1E495EFE391EBDF8CE6DA84E8DC85F3E88FE8DD85EADE88E4D884E9DD8AEEE38D E7DF7CEDE885E6E38CDCDD96F1F3BCB5B78E4142260807006C6842A69D74B6AB7EE9DFA6D4CB7F F0E798EBE392F2EA98D9D17EDCD380F0E593EBE090E1D688E1D48AE8DC93EEE296F0E593F1E593 EBDF8DEADB8AF1E18FF5E591F1DF8BF5E38DFFEC96F8E28CD9C26CD6C26AF2E1A250412A0B0500 A8A77AF9F7B1ECE096EEDA90F0D88CBFAE56D4C874EEE392E7D175E8D072F0D97CFADE84FEE28A FFE894E9C171966E1FC1A150FFF7A5F7E996ECDE93CEBD7C726215F7E9A89E8451BEA257D3B356 FCE68ADCBC775F500DCAC885121700AEAB69F5EA90E6DB82E0D47EE7DB88F0E492F0E595FCF19F FBF19EEDE38DEAE087EDE489F0E98EEFE88EEAE28CF0E897FBF2A7FDF4ACF7EAA4FAEEA7FAEEA4 F5EA9BF3E995F2EB93F4F396EFEC9FF0EBAEE5DFA9E0DA9FE1DCA1D2CD933F37082E2814E6E2A6 F7F3A8EEEB96DDD67ED9D17EE4DC8DEDE59BE1D893F1E9A6FFFABADDD898454012474305C0BD7B E8E19AEDE79BEDE79CE5DD92DED78CE5DE94EAE298E6DE97DDD691F9F0AFEAE1A1D7D194777241 44410F5C5A23C9C68AFDFCC0F6F3B0FAF5AEE8E49BD7D088D8D18CE2DB95E8E192E9E489EEE691 E0D98EF8F1B1F3EAB2645E320903006E6C2CD5D493D9DB90CED181D4CF7FDAD281E8E794F4E295 9D7631894F13F2C483F1D991E1E393EEF5A4F9F7A9F6E8A2F3E6B2E1D4A8C9BC8FB9AC7FA19569 83774C6B5F346C6237564E223D370C332C024C431C5C49283C1804653409A876506C503364563C 898060BCAB81B7A070AD956CB9AD8EC8C79CD4D69DDED19EADA5739A9C6AB1B3838D7650876041 CCAE8AC3BB8DA5A4719A8F5DAD9F71A5966D7C704871653D5C532E352A0B2B21004136112A1E01 574A1C9B8F5C796C396D612BD4B682A47540C38D58FFF3B3F7FFBCE8E3ABFEEABCF9EBB9E5F5B5 F6F7B7FDF2B6E8DBA4D7D796EBF0ABE2DD95FEEAA9B47C3CBA7F3DFFE498FAF8A3ECEF94EEE893 F4EF9DF8F2A4F8F2A4FAF3A5EFECA0F3EFA6EFEAA6EEEBACF4F2B7FEFBC7FEFED0FFFFD7B7B195 4B452E1C1602FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFDFEFEFCFEFEFCFEFEFC FEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFFFEFDFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9CA6EDDCE72DFD076E8D97EDECF74DBCB73E4D47DE0D078DFCF78E8D780E7D781 DDCC80E0D293665F26706F27E2DF92BBB368DDD381E8DD83E6DC915E5418393910CAC574DAD176 CDC469D6CD72E5DC81E9DE84E7D980DCCE75E0D279EBDB83E6D67EE4D47CECDE83E7D97EEDDF86 E9DE84F5EA90F8ED94EEE48BF3EA92F1EA92EAE38BEAE38BEFE791F1EB95DED881FFFFB0B3AD58 A7A14CE1DB86DDD784D1CB77E4DE8AECE693867F2D857E2DE1D987E7DF8CE0D784EDE591F2EA95 ECE58DEAE38BE9E288E5DE84DFD87DE6DF84EAE38EEAE291E4DC89DBD381DCD480E5DD88E4DC87 DBD37DDDD67EE5DE86E3DC84DDD67FDED885D8D380DAD583DDD886DED985E3DE8ADBD682E8E38E E7E38CD3CF7AD8D37EDCD880E9E389E5E085E6E186E9E48BE8E28AE7E18AE6E08AE6E08CE9E390 E7E08FECE494EBE090E4D989E5DA88E7DD89E7DD86ECE38BF0E68DE3D981E9DF8AE7DC8AE6DB8B E7DC89ECE483E2DC7DF8F29FCCC985ABAB73F7F8CDD0D0AC7A78532C271E312B0C1309004F460F CDC77BEAE393D2CC7AE7E18BE0D883E7DF8AECE490E4D987DFD484EBDF91EDDF96E8DA91ECE193 EFE295EADC8CE9D988F1DF8CF9E791F9E58DF8E288F8E085F3DA7FE7CE73F3E38CE4D79C2D2012 0D0700C6C596ECEBA1E3DA8CD2C276EBD988EDDD82F1E58CCEC872EAEB8AF0EA88FDE58CF6D481 FFF1A3E7B86EB07F32C8A656FFF9A6EAE08BEDEC97F2EC9CD2C07A948236E7D895664D15C2A85C FDE187FFEA8FDAC17560530AD0CF8F151D008C8A4BF0E78BF1E78EECE28BEDE38EE8DE89E7DD8A ECE28CEDE38CEFE58DF3E98FEFE68BEEE78CF0E990EDE591F0E898F5ECA0F2E8A0EDE39BF7EEA3 F4EC9EEBE391ECE490F4EE96F2EF96F9F59CEBE796F4EEB1FFFCDBAEA08A2519126E642EF3EF9F F0ED92E9E58BEBE88FE7E18CF1EA9BE9E19BE8DFA3EDE3AEF0EBB99389553E3603A29A5BF3EFA5 F3EFA1DEDC87CDCB75D6D280DFDA8CD8D48CE9E3A0EFE8ABF7EFB5DDD69DAEA6725A531D322B0D 736D3CD7D19FF1ECB3E1DD99ECE79CEEEA99DDD886D3CD7BE6DF91E7DF95DFD690E5DC8DEEE78B FCF198E9E18EE6E092EFE9A1E6E29D5C592C12110078793DE0E2A0C8CA87D3D792E2E39EE8DD9E FFF5BCEFCC9A955F34F1BB93EED0A7B7AB7C969B6A87875F68583B3A2A0F312000271706322314 4839204E4026786B47877C55988F67B5AC84CAC199E5DDABEFE3A0AB8D3EC19945FFF3A3FFF9B1 E5DC97CCC77CEADA85F8E88EFFFAA5FBF0A8F0F0ABF1F1AFF9EBAEE0D698DEDD9EEAE5AAB99E69 A17745F5DAA4F4EDACE9E9A3FFF5B2FBEDAAFFF2AEF3E6A4F1E4ADEBE0A8ECE3A7EAE0ACE4D9A0 D7CC8A8D8041796A27685D235B572C6D5520441904451B00474102515F1E7F804EC0AD82D4CB9C CCDCA0EBEDB2FFFDC7F6EABAC9CD95C4CA8CC9BD80F6D195956526CBA15AFFF6A7F7EC98EEE88F F5F89EEDEB98EEE79AF9F1A4F5EEA0F3ED9EF9F4A6F3EEA3F1EDA4F1EDA7F3EFADF4F1B2F1EDB5 FFFFD6F7F2CDC6C19AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FEF4E7F7F2DEF3F3DA F2F3D9F3F3D9F3F3D9F3F3D9F3F3D9F3F3D9F3F3D9F3F3D9F3F3D9F2F3D9F3F3DAF6F3DDFDF3E6 FFF9F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDACB6DDECF71E0D173E7D87CD8C96EE3D37BE9D981E2D27DE8D783F0DF8C EAD986DFCF7FDED08D756E32666421EEEA9FC1BA6CD5CC76EBE086EBE1947B723329280BC0BA6D DFD87DD5CE73D7CD74E4DA80E4DA81E2D77EDED279DED077E4D67EEBDD85EADB83F0E289EBDE84 F0E289EBE087F6EB92F8ED94F2E88FF3EA91F2EB91F0E990F2EB91F3EC93EAE48BE7E18BF1EB97 DCD5848C8536DFD889D4CD7ECDC675E8E28CEDE88FEEE98F8A842D918838F5EC9CE9E190EDE594 F1E997F5ED98EEE78FEAE388E5DF82D9D373D0CA6BE0D882D8D07DD1C976DDD580E3DB86DCD47F DAD27DDAD27DDBD47EE0D983E4DD87DFD782E8E191D8D181DDD686E8E291E5DF8CDDD884DFDA84 EAE48EEDE790E0DA81E4E085E2DD82E4DE81E4DE81E5DF82E8E186EBE58BECE58FE4DC87E4DC89 EBE393E3DB8BE0D789ECE192EADF8FE6DB89E8DE8AE5DB86E6DC84E7DD85E0D67FF2E794F3E897 E9DE8EE7DB8DE6DA8DF7EDA3F6EEAB908A54100D009D9C73F3F2CAE0DEB6DAD8AAD5D19FCCC691 BCB678DDD88BCFCB7AC5BF6DEAE490E4DE88E0D983EAE38DE5DA88E2D785F1E596F1E398E6D890 EBDE96F1E399F1E295F0DF8FF5E28DFDEA92FBE48AEDD478E2C96CEED274FFE78AFFFAA8C9BE8A 1F1508171000CFCD99DDDD8BCDC776C7BB6CD8C776E5D679EEDE83E8DE86E7EF8DE5E080FFE490 FFE499E9AD67884C04D5AB60FFEF9EEFE590FCF8A2E7E48FE6DE8DD3C377806B1EC6B16C695314 DBC477FDE58CF9E086ECD7886D631CD2D49A1B23007F7E41F7EF95F3EB91E5DC84E9DF88E7DE87 F1E691F3E990F3E88FF4E98FF4EA90E8DF84EBE48CF1E993F1E996F1E999EEE59AE3DA90E8E095 ECE497ECE494E8E18EEBE48EEEE98EEEE88EE2DC87F4ECA5EAE0AB7B6D4525170EB2A380FEFCC9 E2DA8FF3EF92E0DD74E4E182DDD989F3EEA4EBE6A2FBF4B8AAA16942380A8D834DE5DB9EF1E8A5 E7E096E3DD8CD3D179D2D279DFDD8BE2E095E1DD9BF5F0B5EFE9B27F7949342E074E4915A09B66 DED89BF5EFAFE9E3A0C8C17FC8C27EE3DB95E9E297DAD387D7D081EDE696F1EA98F0E995FAF59F EDE28DF5EA98F4EA98E3DC8DF8F3A9E3DF9AF5F4B2817F471313009B9B69EAECBBD4E0A8F4FCC5 EEDCACC1AE8192744C52281355241F5B2513321900323510545638897964A29370C1B286D8CA9B E0D2A2EDE1AFF9EEB8FFF7C1FBF3BAEEE6ABE9E3A6D6D093D1CD8AF1E79AC9AD57BA9437F3CF73 F2DA89F3EB9AF3EE9ADFCF6EBFA744CAB254DBCD7DEEEB9FE6E39AEFDC98E3D38DE4DA91D9CE82 A985419B6B2BFAD58FE1D384E2DE8AF5E795F1E18EF1E48DF0E48DF5E8A4E7DE95E9E28FE8DEA0 D6CC84DAD179D7C97EF2E391F6ED9BF1F2B5F4EEBD9D7341926E39C1BF7E97A464838251695B2F 3E3608333D046D6D329D8F5BAA966BB9BD88CBCD94EEDAA3D9AE798D662AEAD28DFFF5ADFCE9A0 ECE095EEF4A3E7E89AECE39CF6EEA4E9E197F5EEA3F9F2A8F2EAA0F6F1A6F9F3A9F4EEA5F2EEA6 F7F3AEF0EEA9F0F0ADFAF9B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFFFDFCFEFDFAFDFDF9FDFDF9FDFDF9FFFDFAFFF0E0FCE3C1ECE0AD E2E1A4E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E2E1A4EAE0AB FBE0BEFEEEDDFDFCF7FDFDF9FDFDF9FDFDF9FEFEFBFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE1D372E3D574DDCE6FE6D77BDECF74E5D57EE7D782DFCF7AE7D684 EEDD8DE6D584E5D484D7CB83736B31514D12E0DC93BBB564D4CB72F2E78EF2E7998B8240131104 B5B066E8E188E4DD83E1D77EE8DE85E1D77EDDD279E6DB82E5D77FE2D47CEDDF87EFE189E7D980 E5D77EF0E289EEE38AF7EC93F7EC93F2E88FEFE78DEFE88EF3EC92F4ED93F4ED93EFEA8FF2EC93 E6E08AFFF8A7CFC87A8B8338D3CD7DDAD382E1DB84DDD87DEDE88AE6E2895A5108B1A858F2E99A F1E899EBE293EEE694E8E08BE9E289EFE98CE8E282DED876E3DD83EFE794F6EE9BEDE590E5DD88 E8E08BD5CD78E6DE89D7CF7AD5CD78E5DD88D5CD7AE1DA89D1CA7AD8D180EBE593EDE793E8E28C E8E28BECE68EEEE98EE5E085EAE58AE7E283E6E080E8E282E5DF80E3DC81E9E288EFE78FE2DA85 DBD380E9E090E7DE8FE0D789ECE292E9DE8EE5DA88ECE28EEDE38EEBE28AEBE18AE3D984F3E897 F0E596EBDF93F2E69DE4D697EBDEA4ECE1ACE6DEAD3C371D272400B8B588EDECBDD1D19DE9E8AF DDDB9FD9D793D6D388D2CF82DCD98AE4DF8DDCD682E9E28FE6DE8BE8DD8BE1D584ECDF90ECDF91 E9DB93F4E5A0F9EBA3FAE99DF5E495F5E08CFBE48DEBD477DEC468EED276FBDE80EFD276F2E79A E6E1B0574F3C2E270CE3E1A8E2E38DDED985D4CA7BDFD17FFFF194FEEE92F7E68EEAE78AF1DF87 FFEB9BE9B87095530DD8A157FFE496F6E291F2E893E8DD89EAD989F7E291D7C06F705A0DE1CE87 8C7935AF9C4FFFED9AF2DD86F3EB9B685F1BC4C5921D2507616228E5DE86F6EF98F3EA93F5EB94 EEE48CE4DA80EADF86F0E58BF5EA90F8ED92F1E68BEEE48DF5ED99F9F1A0F9EFA1F0E79ADFD78C EDE698E5DE90E8E191F0E997F0EC95EBE790F4EE97FCF3ACE7DCA153472A1E1200E6DBA3FFF5BD ECE1A6D1C982E5E088DDDA71E7E487EBE79FE9E59ED7D38E69641F3F3707CAC37EF8F2ABECE39C D7CF87F8F0A7F4ECA2E0DD8BE3E290EDEB9FF8F5B2D4D0948A85503D37034E4913ACA76FECE8AA F8F4B2DDDA93DAD487E0DA8DEEE89EE7DE9AD9D08DDAD18EC9C07ADCD48AEAE493F1EB95F3EE92 EFE893F8EBA3FAEEA6EBE29AF2E9A1E2DB96E8E3A3DAD49AF3F0BC68663E181500959475606F40 49531C1F0A00190000341C04492A07581F01BC8464F0D1A9FDFCC9F6F9C6F8EBBAF3E8AAF7ECAB F4E9A7F3E9A3F3EAA2EFE79DF2EA9EEBE596E1DC8AE7E390E3E18BE8E392E5D994D7BA6C99701B F6D07EEAD187E0D48DEEE69AFFF099FEE48AE7CB79A99751AFA65FCDC276E6C982E9D086F3E08E F3DC89A47629A3661DFFD889DAC56CEDE285EBDA80F8E693F9E895F0E38CE3D594D5C882E9E28C C4B880554A0EEFE58CF5E69FEDDB8EFAEE9CEEECACFEE1ABA1713DD7B678D9D791F0FAB6F9F6BD F6E8B7FFF9C6F4F5B8B2AC6E7F6D35624E203030012E29006D50217C5022977943F7F1B4FCF1B4 FFF0B8F5E5AAE9F1B0E5E5A5ECE2A5F0E7A6DCD391F1E8A5EFE6A1F8EFAAF2EAA2F1E8A0F6F0A6 F2ECA2E1DC93F2F1A1F3F5A2EBED9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF9F3FEEFDFF6EBCFEDECC6ECECC5F0ECCAFCECD6FFEDD1FDEECB F4EECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEDCB F3E8CAFCDEC9F6E4C7EDECC5ECECC5ECECC5EDEDC8F5F5D7FEFEECFFFFF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF FEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFFFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD16EDACC6BE3D475EADB7FE9DA7FE5D57FE2D27DE9D786 E7D687E6D587ECDB8BE0D07EE0D58798914B4C4809E9E59EC1BB67DED67ADFD47CF9EFA09F9653 110E01ABA660D9D278EBE48AE0DA7FE2DB81D4C970E4DA81E5DB82E6DC82E5DB81E5D980E9DB83 F2E48CF5E78FF5E78FEEE38AF9EE95EADF86EBE188F5ED93F1EA91EDE68BF2EB90F6EF94E9E488 E7E189E9E38DF1EA99F1EA9B958E3FB9B263E3DD8BE2DC85DFDA7DECE888EBE48ABFB765797121 D2C97BF8F2A5EFE598EBE393F0E895EAE28AE1DA7FECE686EFE987EEE78DF4EC97E3DB86E0D883 E2DA85E9E18CEFE792EDE590EAE28CE4DC8AE2DA87E5DD8AE3DC8BE1DA8AE3DD8BD9D280E0DA86 DED882D9D47CE1DC83E2DD82DEDA7EE1DC80E7E182E9E17FD7CE6FE9E081DED479E8DE85E2D880 E5DB85E8DD8BE9DE8EECE192EDE292EFE695E8E08DE5DD8BE9E18DE6DE89E4DD84DAD37DE4DC88 EBE392E7DE90E5DC91E9E098E9DB9CDDD095E1D79EFAF3BDC4BF88423F27161400838258DEDEAC EEEDBAEEEDB8FAFBC0EAE9A5F0EFA7E3E097DCD98DE2DD8EE3DC8CE9E190D2C777DACE7EEDE091 E6D98BEBDC93F1E09BFAE9A2EFDE92F3E18FFFEF98E7D27AC9B256EFD77AFBE185E9CF74F0D77F FEF5AC8A885C0A02007F7759E7E1A4F2F196E8E48CEFE796ECDF8DEDDC80F8E287F8DD87FDE591 FBE393DEAB60A1631BE2AA63FFE094F6E18FEFE28CFBED98FFE998FFE095F4CC80BFA5536E570E F3E29C8D7F3796873CFFF4A5EEDF89EBDD8B756E2F9A9A6E3F462466662CD7D17DF2EA95F1EA93 EAE38BF7EC94EFE48BFAEE94F3E58CF7E88FF2E48BE5D980F3E994F4E998F1E595EEE596EBE396 E1D98EE2DB8FE3DD8FF3EF9FEFEB9AE4E290FBF6A9FFFAB5C5BB7D40350F6C6234FDF4B0F7EFA7 EFE79CEEE69DE6DE92E4DE8CE5DF86EEE89AE5DFA09F9A58514D0F92903CEAE68DE2DE84E6E289 E9E290DDD58BE3DB95EDE4A4EFEBA6F6F4ACB0AC69524E2A2C270059542AB3AD77EFEAAFE6E2A0 D6D48BDCDB8AE1DF8CCBC575E4DD8FE4DC91D6CE87DBD28CD5CC86CBC37BE4DC93E7E193F3EF9C E8E38EEDE59CF3E4AEF8E9B3EFE3AAF6EBB2F4ECB1DAD399D0C9979590673B371F080400151106 27321B4D5929988544C9B574FBEBA7F2E5A2AF8346AC7639FAE29CF8F1A1E2E18DF2EB98E7DC8B E6DB89E7DD8AEBE490E1D983ECE58DF0EB90E7E385E8E486E4E180E6E382EFEA96F0E3A9E7C888 A77C34EFCC86E9D090E5D79CEFE5A6EDD88FF8DD93FFE4A2F5E0ACD3C688E4D98ED0AF67D1B265 BFA34FEDCC75AE7422B97324F9C976ECD074DAC86AE5CD76EED896E5D395B4A662332201A89966 FAEFAF5445214C3E1EEEE8A4F2E1ABF9E5AAECDF99F6EFADF6D2979C652ADDBF7AF6F3A7E1E599 EAE2A3EFE2A9F4E8ADFFF7B6FFFEBAFFFCBCFFEEB8E0D99FB6A46E7D5728330A003B2300373300 675C2D9F855FC5B08BE2E7BCFDFCCBF5ECB6F0E6B0F5EBB3ECE1A9ECE2A8FDF3B8FCF2B6F4EBAC F0E7A4F2E9A6F1E9A4EFEAA4FAF8B0F4F1AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFFAFCFCF5FAFAF0FAFBF1FCF2E0FDE5C4F1E0AFE3E1A5E1E1A4E8E1AAFAE1BDFFEECE FFFCE0FFFFF3FEFEFCFEFEFEFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFFFE FEFEFDFFF6F5FEE4E1F0E0C1E2E1A5E0E1A3E0E0A3E2E2A6EFECBAFCF8D6FCFAE6FAFAF0FAFAEF FCFCF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF EEEEFEE4E4FEE1E1FFEEEEFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBFBFFF1F1FFE1E1FFE3E3FE EAEAFEF8F8FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D472E1D371E0D172E4D578E8D97ED9C972E5D57F EEDE89EAD987E7D687EAD986DCCD75E5DA869E9753413C05DDD893B9B45ECBC264E8DD85F4EA99 BDB66F141000A19C5BDFD981EDE78FE7E087E8E189DFD77FE0D67FE3D982E2D880D9CD77DACE78 E6DA83F6E792EBDD87EBDC86F0E48EFBF098E2D77EEDE38AEFE68CEAE388EBE48AF1EB8EF1EA8F EAE589DBD57DDFD982E5DF8AE9E390DBD58297913ECBC56FF5EF98E7E287DED97DD4CE75EFE794 C3BB6A6B6214DBD386EDE498E4DB8EE6DD8EE9E18DDFD87FDBD577E5DF7FE5DE84EBE48DE1DA82 E5DE87E9E18AE9E18CF2EA95E3DB87E7DF8CE2DA87D4CC7AE0D885ECE592EAE290EBE38FDDD681 DDD580D6CF78D7D078DED87FE5DE84E9E388ECE68BECE589E5DC7DD8CF71E3DA7EE9E085EFE58C E0D67EE1D780E3D984E6DB89E9DE8CEDE290E8DF8DE2DB88E1DB85E1DA85DFD983E9E28CE5DF8A E7E18DE8E190E2DA8EE1D990E8DF96E9DE90E5DB8CDDD588E3DC94EBE6A5E9E7AC4F4C22030100 3D3A16686746858366A5A47FB8B67ED9D89DEEECADE2DE9AD9D58DE4DD92E4DC8FB1A657E6DA8B E7DA8CF8E99CF3E299F1DE9AF7E59DF6E497F5E390E6D37DDBC76EEAD47BE8D279EFD681EDD481 FAE492AAA65F1E1F050300005A4D2DFAF2AEF2EE8ED6D176FAF3A1EEE092F0DC82EFD177FEDC89 FFE397C9964BA06A20EBBB70FFE293F0D582EFDF88FEEF98F5E08BFEE090FFCE86CD9D51F3D888 7F6A27C6BA79BBB46B574C09FCF1A7E7DA8BF2E894867F406F6D4544472C4C4A1AC1BB6CECE594 EEE693E8E08AF0E68EEDE289FCF198F4E68EECDC85EADA83F5E68FF8EC99F1E696EDE292F1E89B F2EA9EE5DD91E7E197FAF5ABE6E298F9F6ABEBE99DFFFABA948A5C302700A19A57F3ED9EFFFDB3 DBD38BE9E395E5E189EAE68BE8E291DDD694DBD3984941165B540EE2E092F2F094E4E27DDDDB74 D1CF6BE7E28AD9D287F5EDAFF5EBB5B5AF703D3811130D005F592AD9D49CEBE7ABDDD899E6E19D E1DE92E4E28EDEDE82E3E28AE1D994E7DD9BF1E9A1ECE597E2DC8AD9D47FE4E08CEEE89AF2EEA5 E9E4A2ECE6AAF7F0BBFFFCD3FFFFD4FCF0C2CBC08D5B512118110C1C15003F370E706A4C5E573E C1BBA0D0D7A4CAD18DE7D499E3CF90DCD08AF4ECA3CDAD668C5E16C5974AFEEC96EEE386EBE385 EBE089E4D986DED381ECE18FEAE18DF1E995E1DA84E8E28AE4DE86DFD981E3DF87EAE592EEE29A F1D382B58C34EAC76FF3DC8CD4CB7ED3CD7DFEEE95FAE38AF4DC8BE8D898E9DF9DFFFDB6FEDB96 E7C478E1C06EF4CD75BD7F2DC4782AF3B664CFB057D0BE64DCC573EBD69AEEDEA6584A280C0000 A59A67D9D097322500615630FAF6B5DFD199ECDD9FECDF9AEEE49EEBBC7E9E5D20D5B368D5CD7C D9D988E9DE99E7DD9CF1E6A4F7E7A3F7E99FFDEEA8F8E5A6F0DCA1FEDEA7A87D4B9B7642D3C28E BDBB87A49A6E715A3A412D0F3336156B6A3FB0AA77EDE4B2FFFACAFFFCCCF7ECBBF6ECBAFDF2BD F5E9B3F1E6ADFDF4B7FCF4B8F3EDB0FBF5B8F6F1B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFAFEFFE6F1F1C7E4E4ACE2E2A9ECE9B7FAF2CBFCF6DAF6F6E1F6F6E3F8F6E5FDF6EB FFFAF0FFFFF6FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFCFDFFF7F7FAF6ECF6F6E3F6F6E2F5F6E3F6F5E0FBEDD1FBE4BDEEE3B1E2E3AA E3E3ABF0F0D2FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F0F0FEA9A9FC7474FC6262FDA5A5FFF6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFEAEAFFB7B7FF6464FE 6C6CFC9696FBDFDFFEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DB7AEBDC7DDECF70DDCE73EEDF84DFCF78 EBDB86EBDB86E3D280E4D380E9D885E1D279E5DB81A29A55292300BDB876A9A44CB4AC4AFAEF98 E1D885BFB86F1C18008B8548D2CC74E6E088E7E088E3DC84D8D179E0D77FE1D780DCD27BD7CB75 DDD17BEDE18BE3D480EEDF8AF6E792E8DC86F4E891FAEF96E9DF86EAE288EAE388EFE98DF0EA8C E7E085DFDA80DBD57DDFDA81E7E387DED97DF2EC93AFA951908A34E9E38DE7E18CF4EE9BD7D07B E1D984FAF29F999141595003EAE196F7EEA4DED589D9D17EE2DB84CEC76CD9D375D3CD72DCD57D DED77FEAE38BE8E189DBD37EE6DE8AE6DE8AEDE592EFE794EAE290F0E896E2DB85E5DD87E9E38A DDD57FDCD57DD5CE76E1DA82E2DA83E6DF87E9E289E6DF87E2DA80DFD679DED579DED478E9E085 ECE289E5DB83EBE18AE9DF88E8DE88EAE08BECE28CEFE692DAD480CCC670DAD47EE8E28CE9E38D DED883E6DF8EE9E293E0D88FE0D890EDE69AF6EC94E9E183E4DD83E4DE8AE3DE91E5E19FE7E5AF 9B986C25220A0302000200000807030F0C0A34320ACCCB96FEFCC4DED99BE6E09CF2EAA1ECE095 F7EA9EEFE295F7E79AF4E299F1DF97F4E096F3E092DDCA77DFCE77EBDB83F8E890EAD883ECD889 F9E499BAA75E141300161805190E0080724BFFF3ABF4EE89EEE78DEFE596F8E99DFEE791FFE692 FFDC8ECC91479C641AFFD185FFF5A4F7DE8ADFCC75EEDE86F5E18BFFE693EFC374E3AF62E2B76A FFEC9EA69258C5B97BE0DB91544D0AE1D894E4D98CECE38EA8A0655751315C5B42494517BFB96D E2DA8EE9E191EAE28FF1E791E5D983E6DA82E0D27AEEDE87F4E48FF8E895FBEF9EF7EC9CF0E596 F1E89BF3EB9FECE49BF0E9A2F0EEAAFEFBB7DCDA96FFFFBD72703A211900B8AF75FFFFC2EEEB9C E2DD8EEBE898ECEA98EEEA94EDEB98F0ECA29B9259312800AFA568FFFFBCEFE996ECE98DE7E581 E3E17ED6D376E3DF8DF1EAA5D2CC94645D2D100900463F17C8C184F7EEB3EAE4A4E7E19DE1DA90 E6E393E0DE89E7E389E3E184ECE792F2EAABD6CD8FDCD48DE9E295F0EC97EFEE95D6D480E5E197 E3E09FF2EEB9FCF8CDD2C9A39B926C5F5631362F031F17014E4712938C55BFB882F4EDBBFFFFD3 70673BBEB68AF2F2BCD5D496DFCE95F0DCA2EEE0A1EAE39DFFEDA8A179359A6322FBD08AFFE797 F7EA93EEE28EE5D987D8CD7CE9DE8FEEE595EDE495F5EC9EF1E99CECE497F1E99FF1EAA0E5DF94 D9CF80DABE65AC8524E3C363FFF79ED9D37FE2DF89E6D97CF7E386E7D480FEF5B3D9D594DCD48D F4D593FCE196FFEE9CFFDF88D19444DB9447FFE494FFE691F0E28EF2E193F0E3A4EFE3AB49402B 241B00EFE8B5A6A167080300A49F62D7D291DED693EFE79EF9F0A4FBF1A9E3AE6FC78043FCDC8F C9C16DD8D685EAE09ADED793EFE7A1F7E59EF1E496F9EFA1F0E19BFCDD9DCB9A6283511BF7DDA2 F8F1B5F2EFB6FFF8C7FFF4CCE5D8B3B6B5907473443734082B2600696434B3AB7EE8E1B3FCF7CA FFFFD3FBF3C2F3E7B4FAEFBBF0E7AFF8F2B5F7F1B2F6F0B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA FDFDEFF6F6E0F6F2D4FDF2CFF3EDC3E9E8BAE7E7B8F0EFC8FBFAE0FFFFF3FEFEFBFEFEFDFEFEFD FFFEFDFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFEFEFDFEFEFDFEFFFDFEFDFAFFF4E9FCEAD0F1E8C1 E8E8B9E8E8B9ECEDC7F2F1D6F8F2DBFCF5E6FEFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF EDEDFEC9C9FE6D6DFC3F3FFB3D3DFC8585FED9DAFEF6F6FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7FFE8E8FEE7E7FFF4F4FFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0FEC4C4FD8585FD 4141FC3C3CFB5C5CFBC4C4FEF3F3FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8C96BE4D578EDDE81EBDC80EBDC81 ECDC84EFDF87E6D67FE2D27DEBDB86EDDD87CCBE63DBD275BCB56F332C02ACA764C2BD63B2AB47 E3D782D8CE7ADFD88E312C09746D36CAC46DD5CF77D8D27AD8D27ADCD57DD9D27ADCD57DE5DB84 E9DF88E9DF88E7DB85ECDD8BF1E28FF6E795E5D983EBDF88F1E68DF0E78BF3EB90F4ED92F8F294 F4EE90E7E085E6E089E8E28BDFDB7FEDE888E0DB7AE7E281EDE989B0AB51938D38FAF4A6E0D88D F4ED9BE5DE83ECE58FF3ED9B867E3372691ED3C981EDE49AE3DB8BDDD581E6DF85DAD378DDD67C E5DE84DCD57BE1DA82DFD880D8D07BD3CB78E8E08DEAE28FEDE594F6EE9EEAE290E9E289E9E288 ECE58BE1DA81E2DC83DDD67EE4DD85E3DC86E4DC87E3DC86E0D984DFD67FE1D67CEDE288E3D87E E8DD83E7DC83ECE188EEE38AEADF86E9DE86ECE088F0E48DF2E993E5DF8BD8D27CD8D27CDCD680 E6E08AD8D27DE1DA8AE9E294E2DA91E4DB94F2EAA3E3D983E0D87CE4DD84E3DD88DCD787DCD891 DFDCA0FFFFD373724D000000020200A4A492EEEDCCBFBD99E8E6BDFEFACBEEE8B2F2ECAEEAE29E F2E59EE0D48BEADC91E9D98CF3E195F4DF95F6E193D6C371E2CF7AFBEF97FCED95E9DA85DCCC7D E3D48AF4E5A260522A37370C919267090000B4A278FFF2A5F4E981F6EE92E5DB8EF1DF98F3D785 FFE594BD893D986115EEC779FCE692F7E189F1E288F8E88DF3DC85FFE28EECCE79C39C48E6BD69 FFF09CFDE599CEBB87BBB178E7E49B5F5B1DD8D596F7EFA8EDE590D5CC91584F32635F45363003 BBB46ED9D28AF4ED9FF4ED9CF5EA98E5D985EADE88EADB85F2E08DEEDC8AF3E291F0DF92F4E798 F1E697ECE396F3EA9FF6EEA6F1ECA7EDE8A7EFECAEF9F8BD5C5A2E393810CAC780F9F6BBF0EAB1 E9E5A4F1EF9CEAEB8DE9E991F8F5AFD8D49C5E59205E5B1ED7D48BF6ECA0F0E698E4DC8CE0D886 EFE897E8E294E8E59BC9C5808984481D1900403B1BB5AC73F0E7A9EAE1A0E7DE99DCD58AE0DA8A DCD681DFD983D1CC75E0DA83E2DD86D5CF7DDED892E2DA97ECE69FE6E198ECE89EF5F1AAC2BF7B E1DEA1DCDBA4A29F716661423632102420005550369D9967D2CD92EFEAAFFCF7B9F8F3B2E8E29E EAE49DB5AD66DDD58EEFE5A6E6DAA0EBDCA3E4D39AE9DB9EEBE4A4FAF6B5E9CD909F632FC78150 FFDAA2EFDF9AF2E692EBDF88D6CA75E4DA87EFE494EBDF92E4DB91EDE29CEDE29FE6DD9DE8DFA0 EEE5A5DFD18DEED080C39A43E2B963DFCB7C908940DAD88DDCD381F8E798F8E7A4DFD7A63B3D12 989A5AEEDA9ADEC880F5DF8DFADE89C18C3DC8873DFFDC90F2E090DDDB8CE7E099F1ECB2EBE7B1 36311C2D2A00FFFFCC888855050600555623B9B97BFAF9ADE4E290F8F4A5FFFCB7C58B51D48C51 FFEFA2A19E49939242FDF4AEDFE19BECEAA5F8E7A4EEE398EFEA9BFFFEB5EFC68AA16028CB9358 FFFFB9E3DD94DCD892E0D596EAE0A6F9F4BCFFFBC5F7F6BEEBEAB0C3C28D8F8C606660374E481B 81794EB0A87BE0DCAEFFFDCDFFFFD2F5EBB5F8F6B5F9F5B0F5F0AAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFDFDF8 FEFEEBF7F8D3EBEBB9EBE2AEFBE4BFFCEED6F9F8EBF9F9ECFBFBF1FEFEF8FFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFEF9F3 FBF9EFF9F9EDF9F9EDEFEFCEE6E5B0EDE1AAF7E9C3FBF6E7FEFEFCFFFDFBFFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFFD4D4FE9C9DFD4646FD3535FB4D4DFA7A7AFCAFAFFEE1E1FEFFFFFFFFFFFFFFFFFFFEFEFF FFFEFFE3E3FEBCBCFDB6B6FED5D5FFEDEDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1FE9696FB 5F5FFA5555FA3B3BFC3E3EFDAAAAFEE4E4FFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D276E8D97EE3D479DCCD72 E5D67BE5D57DE9D981E4D47CE6D680EFDF88EDDD85DBCC70DDD374D6CF883D350F918C4BD4CF73 C4BD56E9DD88E4DB85EAE398524C2C6D6831CAC66ED2CD75D9D37BD9D37BE5DE86E6DF87E4DD85 E0D57EDDD37CE5DB84F1E68FF0E18EE7D886F0E08EF1E58FFBEF98F8ED94F4EB90F6EF92F2EC8E F3ED8FF0EA8AE7E085EDE792EAE48DE4DF82E7E380DFDC76E1DE76E1DD79E6E185918B37BDB66B FAF1AEE5DE8FE3DD80F5ED94E5DD8BFDF4A77E742D665C1ACEC37CFFFAADE1D888D9D17CDCD57B E6DF84EFE88DE1DA80DFD880DED67FDED581D9D17EE7DF8DE8E08FE9E190EEE596E6DE8CEEE58B E9E084E9E085DED57AE4DB81E1D87FE6DC85E9DF89E8DE89E5DB89E8DE8CECE18EE1D67DEEE28C E9DE85EEE38AE4D981F0E58CEDE288E8DD83E6DB81EBE084F0E68CE9E08AE8E28EF0EA94ECE690 E7E18BF5EF99E8E28EE2DB8AE0D88BE4DC93E8E099EAE29CE9DC97EEE39BE8DF96E0D98FE4DD93 EBE7A0D1CE8DD9D79DA5A874050800070B00C7CAADFFFFEAF6F3D8B7B493807B527973428D864C DAD192EFE29EEDE198EADD92E8D88BF0DC91F6DF94E4CF7FDDCA77FDEE98F9EC94F3E38DF3E694 DDD287EBE09CC5B97C2116008F915EC3C59C170900BBA679F4E393F8EA81F4E98DE2D78AF9E6A0 FDE093CE9F52925D11F2C778FFF09BF3E187FEF89AE3DC7CF5E488FFE38DF4CB77CBA24BE9CC72 FFFDA0F0DF86FFEFA4D4C292968C58FCFDB6767439AAA76BF2EBA4E9E18BEADEA74F432A4F492E 120C00ABA663C9C27BF1E99EEBE495F5E998F2E692F8EB97F7E694F8E696EBD788EEDA8DF1E293 F6EA9BF4E99AF1E89CF8EFA5F8F1A8E3DE9AF6F4B9F6F4B94A4818514F25EEEEB4FCFBB4F2F3A8 E6E69CE8E8A0E3E49CDFDE99FBFAB7B4B3712A2900919050F5F3B3F2EB9EFAEF97F6EA97EDE195 E0D491EDE3A7FEF5BE918A570D0900484519ACAB79E7E6ACEFE8AAECE29DF3EAA1F3EB9BD2CA75 D7D076DED77CE8E187E3DB85E2DA89E0D78AF5ED9EE4E087DCD982DAD78AE0DB9CEDE7B4E7E2B7 AAA67D3531120E0C04292802646432B3B47CE6E7ADEEEDB0E7E6A7DDDC9AE1DE99E4E297E2DD8D E9E38DDAD577F7F190F7F08EF4E68CE5D582D9D27EDFD481ECE191E6E391D0D380FCE99ECF8F55 A75221DEA068FFECA3F6ED8EEFE582CFC564DBD173F0E58DF0E691F2EA9AEEE599F6ECA5EDE4A0 E7DE9DF8EEB0F9EBACFFE69DBB903FCEA453F0DB93BCB875DEDE9CF0E79EE7D793FFF9C1AAA57F 060F00ACB97AEBE2A2E0D48CF5EA9AF0DC89B58A3BD09650FFDF97EEE49AF4FBB0F1F3B3EFEDC1 ACA78A17110555522DF7F7D839382A32330B81825776744EC7C88A6B6A2C4E4C0EBBB271A96F38 DD945DFFECA1E2E190F7FAADF0ECA7E3EDA9E4E9A5EEE19FE9E69BEBED9EEDE399AC6D33A65920 F9DC9AFAEC9DE2E08BE9E291F4E99AECE99AECEFA1F6F3A8ECECA7F8FABAF6F8BCF0F1B8F6F4BF E0DDAE8F8B5E574F23322B015D5426B3AB7BFBF1BDF9F4B7FFFFC3F4EFAFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8EB EEEECCEBEBB9ECECB7ECECBFF2ECCBFDEDD8FFF6EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F7E7EFEDC8F3EBBBF5ECBBF0ECC3F2ECCDFDEEDCFFF8F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFFCCCCFE9192FD4C4DFC4F4FFB6D6EFB6869FC7474FEC5C5FEFFFFFFFFFFFFFFFFFF FBFBFFE8E8FFB2B2FE7272FE595AFE7D7DFFBEBEFFF6F6FFFDFDFFFFFFFFFFFFFFFFFFFFD7D6FE 7474FC4E4EFB8A8AFC6666FC4949FB9696FDD1D1FEF5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFC362D7CB6CEBDF80 E5D77BDACB70DBCB73E1D179E1D17AE7D781E8D884E7D780EBDF87D8D17AD4CD8A3A3212837E3E DDDA85C0BB5CDCD37DE1DA87ECE59E5E55335E5826CCC872D9D57CE7E287E1DA7EE3DA7FDED47C E9DE88EBE18DE0D682DFD581E8DE8AE4D984E3D682EEE28DEBE089F5E993FAEF97FBF199F9F197 F5ED94F3EC92F3EC92F1E991F1E995F0E992F8F396EFEA87E4DE77E6E37AF1EC87EEE789D4CD77 867E31E5DA94F1EA9BFAF699DED77DD7D07AEEE897DCD388776F2B716920C2BB71FAF4A8ECE696 E1DB8AD8D27BE4DD83E5DE84E9E287E0DA7EDFD97CE1DA7EE3DC80E5DD82E4DD83E3DA81E8DE88 F0E590E8DE86E4DB81E0D67BE8DF83E9DF86DED47DE5DA85E1D782DBD17BE2D881EBDF87E0D57D E9DB82ECE086F0E588E5DA7CF4E98BF3E98BEBE084E7DC83E8DC84EDE28BECE390E7E090EDE595 F5ED9DEEE895E6DE8FF4ED9EE6DF90DCD488E3DB92ECE39CE5DB97EBDD9BEDDF9CE7DC94E5DB8F E3DB8ED8D183E3DF93E0DF98EBECAB4144160407002F310F66674F2E2E14090700070500181606 423B20DAD08CF8ECA2EADA8DE9D787FFF5A3EAD77EDDCA6FF0D98FFFEA9CF0DB85F6E38FF0DE8C FFF0A2ECDE95FFF7C096895B1E1500E8E9AEBCBD8E1F1400B19F79FBE8A6F8E88DF5E38DF4E193 FEEBA5CDA5587D4B00F7C571FEEC98F7E08AF8EA8FE8E286EADD82FFEE96F0DE8AC7A04CF9D984 FFF097F7E88BF8EF96FEF1A3F2E3AE877E47EAE8A29F9B65847E41EEE99CF3EB9DFFF6BC645A36 5E5634140E00A8A369C6C181E8E19AE4DD8FFAEFA0F9EC9EEEE191E9D98CFDEEA1FAEA9DE8D78A F5E597F2E595F1E694F1E695EBE398E7DF9FFFFAC0CFCB97302C00636336F0F2AFE6E8A2E5E59D EBEC9DEEEE9FEEEFA3F0EBACF2EDB68A844E45400AAAA65EEDEA9DF1EF9DF9F6A1E3DE86ECE695 F9F1AAF7F4B4B5AE792F290539330FA5A06AEEEBB4E6E4A9E1DFA0F1E7A2E6D990E6DC8CD9D17C EFE88FE3DC81E8E284D4CD72DDD881F2EA9AE1DA8DE4DF94E5E398DEDD95E9E6A5DEDCA497946A 443F1B1511005B582CA8A570E4E2A8EFEEAEFBFBBADFE29CDBDE98ECECA7DDDD95E0DE94F6F4A8 DED989E8E48DD4CF73E3DF7EEBE582FBEA93EDDA8AE8E28CEEE893EAE690E9EB95DFE48EF7ED9F F6CD8CB36832904F18EFD892FCEC8EF1E781CFC05AD6C461F4E384F8EB92E8E090C6C178D3CE8A F6F0ADEDE2A0EBDF9EF2E1A2FFF0ABB89044C19A4CFEEB9FF8ECA2D7D389F7EFA5E3DC9AFFFDCC 716D52232809C3C97EE4E193F8F0A6F2E49DF8E098B7893ED7A95BFBE69DEDE4A6F3F3BFB5B087 3F3921070300000000606242E1E2C814130E9D9D73DFDEB5C7C39FD6D6A09D9F66838148AA9855 AD773AEFB079F8E9A5E8E59CE1E49AECEDA8F2F6B2F2EFAEF4E4A8F6EFAEFEFCB3BAA45C8F5516 DC9D5FFFF3AEFCF0A1F4EF9FF1E99AF7EFA0F7F3A3F7F7A6F4EE9FF7F5AAF2F4ACF3F3B0F6F5B8 F3F1B7FBF7C2FFFFD4FFFECDD4D09E847D4B483F0D423B07968F5DD5D09CF6F3BEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFEF8FBFBF1 F0F0D0E5E5ACE1E1A1E8E8B8F5F5E0FEFEFCFFFDFBFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFDFDF6FFFEE9F7F6D1EBE9B6ECDFACFCDFBCFCEDD7 FAFAF0FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFFC7C7FE8F90FC6B6CFA7A7AFB9191FD5E5FFE4546FEA4A4FFFAFAFFFDFDFF FDFDFFEEEFFFB7B7FE7979FE4747FE2E2EFE4243FE8686FFCCCBFFF3F3FFFFFFFFFEFEFFFFFEFF C3C3FF5E5EFE4F4FFEBEBEFF9C9CFD6B6CFA8586FCB9BAFDEEEEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7CF67D4CC66 E0D773E5DB7ADDD274E5D77DE7D980E2D37FE3D280CCBB69C9BB69E8DF8EE5DC95D8D191433C19 787435D2D084ADAC56DFDD86D5D182F5ECAC74683C59511EDDDB8BD7D37CE3DE7FE0DB77D8CE6D E0D47AEFE18EE7DA8BD8CC80E0D687E5DD8BE9DF88E3D981E6DC85EAE089FCF49DFFF5A0EEE48F F1E792F7ED99F8EE9AF5EB97F5EB96FCF29DF9EF97FBF396F4EC8BE7DF7CE3DC77EDE682EAE182 F0E78DC6BC698F8334D4CE7BEDE78CEFE990EBE58EE0DC87EFEA98E8E496ABA85B69641A9A974F E7E49EE2DF97D7D181E5DD86DAD379EDE689E3DE7CE0DB75DBD36DE0D970DAD36AE1D873DFD670 E7DC7EF2E599EBDD90DFD37FE9DE83E6DB7FEBE086E2D67FE9DC8AE7DA86D9CE74E4DA7AE8DE7F F2E48BE5D67AECDF80F4E786F2E681E9DF78EAE07DEBE182EEE38CEADE8BEBDE90F1E79BE6DC93 E1D78EEBE198EDE39AEDE39BEBE299EDE49BF5EBA3ECE29AF0E59EEEE39AECDE93EEE091F0E491 EDE38DE3DB83DAD37DDDD884DAD689E4E29BD8D6976D6B3F50512D474B286D714D888B5AA8A86C CBC888F0EAA6F1E69CE1D382EBD982F9E58AEDD678DECB61EEDE75FFE8A6F4DD98F0D885F9E093 FEEDA0F3DF92E4D287B6A3762112015A5122F2F2B0BDBE881C1600D8CBADFCEEC1E6D28EF2D787 F9E596C0994E9D6D20E9C066F8D170E9D078E8D581F4E08BFBE894FDE893E7D17ED7B966EACE7A FCE793F1DE8BF9E894F1E48FF1E794F9EFAE7D7435D4CC88E2D8A36E6723F6F19BF3EEA7FFFBBB A29B6269623D1D18087A7748D6D099DED894F2EA9FF7ED9FE7D98EECDE95E6D890E4D78FEEE398 E8DC8EDFD281F3ED98E3D881F5EB97EBE29AFFFAC1DFD5A839310A878453F8F9B5D8DD85DFE48B DBDA92D7D48CE9E69CFFFFBBE1DA9A534C1F7D743FD9D096F1E8A4E6E188E9E67EEBEC8EE5E89C EBEDA6C0C27A4444262D2C008C8B52E2DDA0FFFFC3ECE9A5E3DF9AD6CF88E2D78CF1E396EADE8F F2E895E8DF8ADED880E6E18AE7E28BE7E38EECE596F1EC9EEEEBA7EFEEC4A3A37B606135242300 3636078D8C54CCCA81FBF6ADF8F2A9E9E29AECE39DE1DC93D4D58AC6C67DCCCC84C5C57DE1DE99 E2DF98E8E59CF1EEA3EBE899D4D07DDBD583F8EAA7F0DDA1EFE3A3FDF9B4EEF1A6E3E79ADFDF93 F3E79FFFEEABF4C489864C15A1682CFFF09FF7E98BD7C05EDBC05CF6DE7EF6E48FE4DE95D6D596 C2C388F7F3B5DBD18EC8B975CDBC79FEEAA8BE9E59B9954AFBE391FAE38BE8DD83F3F09EE2E2A2 F2F2C8312F18686035DCD378E8E785EBE493EED69CF9D7A4B5833AE7C269F9E99BFFFFD4978874 1400004C423445452E000000585F359FA57B0B0D00D6D29CEFE9B2DDD79FF9F7BBEBEEAFFFFFBE F5D68BAC7A34FFD496FCE6AAF2E5A6F1F1ACF0F2ABF6EEA9F6E6A6FCEDB4FCECB8D5BB82865D18 C19753FFEBA6F9E49FF9EBA4F3EBA5E8E09BE6E19CF0E9A3F9F1A9FAF0A9F7F1A7F1EDA3F3EFA7 FAF5B3F7F2B3F7F1B4F6F0B6FBF5BDFBF7C1FFFFC7ECE9AFB6AF7879724849441A4A4526FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFEFEF0FAFADE EDEDC3ECECBDF1F1C1F2F2CDF5F5DFFBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCFCEDF6F5DDF7E9CAFCDEBA F3E3B9ECECC5F9F9EDFEFEFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFFFFFEF8F8FFB5B5FD7777FB8080FBA0A0FCB3B3FD6D6DFE393AFE8183FDD3D4FC F4F5FEF4F4FFD7D7FF7B7BFE5656FD6364FC7071FC6B6CFC6465FE7878FFDCDCFFFCFCFFFBFBFF E0E1FD9D9EFC4E4FFD5858FED4D4FEBCBCFD8788FB7172FBA0A0FCE6E6FEFFFFFFFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFF FDFDFFFDFDFFFDFDFFFDFDFFFDFDFFFDFDFFFDFDFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6CE69 D6CE6BDED472E0D676DCD273E4D77CEDDF87E7D982ECDC87BEAE599E8F3CE5DC89E8E097E8E1A1 5A54206D6928D2D085979742E0DE87D9D584EDE5A18D80504C4310D0CD7ED4CF79E1DC7DE2DC78 D8CE6CE7DA80EDDE8CE1D486DBCE82E5DB8CE6DD8CE9DF8AE5DB83E5DB84EAE089F3E992D6CC75 E4DA83FBF29BFCF29BF2E891F0E68FEEE48DF6EC97F4EA92F5EC8FF2E988F2EA88F7EF8BEDE582 EAE182EDE48AFEF3A0CCC171736B18DAD47CE8E28CE8E28DDED884EAE593E1DB8EF8F2A6ACA85F 66641A9F9C55D8D58DD9D285FFFAA9E0D886E8E08BF5ED97E8E187EFE68BE9E083EBE285EDE485 DDD475F4EB8FEBDE91EFE295EADE88EFE489EDE285F5EA90E6DA85E3D784E0D482DBCF77E4DA7C E4D97BECE186E2D47BE4D97CEEE485DFD574E0D877E5DC7CEBE287F3E992EFE492ECE191ECE396 E4DB90E1D88DE8DF94E9E095E4DB90E9E095EAE196F5ECA1F3EA9FF5ECA1E7DC92EEE097F1E295 F0E394EEE391EAE08EE5DE8DE5DE8EEAE69CECE8A8F2EDB5EEEBB8EEECBCFAFBD4FCFDD4EFEEC1 FDFCCAFDF8BFF1E9A8E2D68FE5D685FBE891E0CC6FDBC464F1DF73FCED84F6DF9EDFC884F4DD8D FFEBA0E6CF84DECA81E2D38A3B2B182C1D05C7C180FAFBB6DBDCA22E2700E8D8B8FCE8B9FBE49F FFE793B793418E651AE9BE72FFE48CF1CD6DE6CF76EBD881FDE792FEEA96FFED99C3A955D8BD6C FDED9AF5E08FDFCE7DEFE08FE7DB8AEFE697F3EAA57F7536B4AA6EFAFABD676019D3CD7FEDEA9E F6F3B0C3BC855953282F2A1758552AD9D3A0C4BD7CF5EDA1FAF1A1F1E498FBEDA5F8EAA3E1D58B E2D78AFBF1A1FEF9A2E8DD88FEF5A7E2D891FEF7B9B9AF78221900A19B64F8F4B8E4E19CE6E798 D3D484DBDC92DDDC9AFFFFC3ACA76C2F2B019C9853E5E295C6C372EBE795F5F0A0DBD58BF9F7B6 E8E8AA808041272700626122CCCB89EAE7A3EDE9A2E9E59CEAE499F0EA9CE8E294D5CA7EEBE091 DACF80F1E696DFD786E5DE8EECE597E6E097E9E19BFFFAB8E7E1A29A955C262502090A00515323 C9C991F4F5B5EEEEA6E7E599DFDA8DD3CD81DFD78EDED68ECDC77FDAD98CD2D085C8C67BC6C57A E0DC95E4E09AEDE9A1E7E197DCD689E8E191F2EB9CE6D995CEBE82D9D08EFAF6B0F3F3A9EBEC9F F5F3A6F3E79DFDF0A9FFF5B6E0AD72854E12D19E57FFE491CAB051CBC057F7F38FDEDD82F3ECA3 FFF6BAFEF1BAF1E6A9F0EBA4FEF7ABFAECA4FFEDA7D1AF6AAB823BFDF9ABFDE28DFAEC97E6E092 FDFABDCCCA9F070300888151F5EF9FEAF096F4F3ADDDC999F1C89FB48847D8B967FFFCB2B6B488 170F009D8B7EF4EACDE3E0B7B0B185EFF1C04C4E27625F31EFE7A9E9DF9FDED593ECE6A2E8E5A1 FAEBA5DDAA61AC7C35FFE29FFFF7B8FFF0B3FEF1B3F0F0A6E8F2A5E7EB9FFFFBC0FFCA9F8F5223 AB813FFFE29EFFF8B4FDECA7EDE19DE2DA97DDD894DAD591DFD793F6EEA6FCF2ABF7F1A7F1EDA4 EFEBA2F2EDAAF3EEAEF7F1B4EEE8ADF8F1B8FAF4BAF9F3B9FDF7BBF4EDB2FEFECCDAD3A4AAA474 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF9FEF7EBFAF6D7 F2F2C2E6E6AFEFEFC1FCFCE1FFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EE FDE7CBF0E3B7E6E6B2EEF0CCF7F7E2FEFEF3FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBF2F2F2F4F4F2F4F4FD9F9FFC5A5AFA9292FDBFBFFBCCCCF88282FA3E3FF96366EF A4A7EAE4E5F3E3E3FABDBDFE5757FD4F4FFA8F8FF6BBBBF3A2A2F55657FA3637FEBBBCFFEFEFFF F4F5FDBDC0F0797CEC5254F66F6FF9D5D5EFC6C6F59697FC5959FB8686FCDEDEFDFFFFFBF8F8F8 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFF E9E9FFE4E4FFE3E3FFE3E3FFE3E3FFE3E3FFE3E3FFE4E4FFEEEEFFF7F7FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F6F6F6F6F6F6FAFAFAFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D1C966D7CE6DDDD272DCD273DCD274E3D67ACEC166AFA149D1C16AE5D57EDACD74D9D17BE2DA8E E5DD9B665F22534F10CECC80898931E4E388E3DE8AEBE39BABA067423900CBC87CDCD783E0DA7C E0DA77E1D776E3D67CEADC89EADD8FE5D98CE5DB8CE2DA88ECE28DECE28BE9DF88E7DD86EEE48D CFC56DE9DF87FEF79DFBF397F5EC91FAF194F3E98FEDE38CEEE48CEDE487EDE484F1E986F5ED89 E9E17FEEE586F3EA90F3E895F9F0A0BDB5637B741FDDD782E8E18ED9D281E0DA8AE9E394E7E194 E6E396E1DF93918F45635F169F994CC1B86BE7DE92E9DF95F1E89EF1E89EE2D78CDDD285E3D988 F8EE9BE9E08AE0D781E4D88AEADF8EE4D882E5DB80E5DB7EF2E78EEBE08CEBDF8FE8DD8BDDD27A E2D97BE0D779DDD47BEFE78EE5DC84DDD47CE7DF87EEE68EECE58DEAE18BE9E18BE8E08AE7DD8A E9E190E9E092E8DF91EBE294EAE193E3DA8CEAE194EBE294EEE597E4DB8DEDE496F0E598F3E59B F4E49CF1E497EDE294EBE193ECE397E2DB91E8E09DA49D62877F56D1CE9FE4E2B8D5D2B1C3BF9D C7C19CBDB68AC2BA85F3E8AAF5E8A2FAE99CE8D680D6C165EBD575F9E880F2E27DEFD897F1D997 FFED9FF1DB90DAC67DFFF1AAC0B67826180041360FE1DE9BE4E49DD7D398584E24F4DFB9FCE6B1 FFEEA2B99A408D6A13EBC77AFEDA90F1CF7BF9DB7FF1D980FCE58EFEE992FAEB96D7BC68EDD481 FFE897F5E090F7E697E9DA89DFD384E9DF90F9F0A5EDE59BACA264A49865F1EAA3827B39A59D5C FBF9A6EBE6A1E5DEA95853223A3512242003D3CE9C9D9858F4ECA0F3EA9AF8EC9CF1E498F2E59B F7EC9FF3E999F0E894FAF499EFE895EFE5A1F5ECB6B6AB7B271E00AEA663FFFCB5E2DF94ECE7A0 F5F1AEE7E6A5E5E5A0D1D0917F7D4B535018CBC885FEFEAEE6E789ECEC8DEEEC99E5E19FFEF5C5 BCB98F3C3A0B2724099C9A5AF4EFAEF5F4B0E2DE93E3E08FF4F09CF9F49FEBE692F0EA96D8D083 C9C076CBC276E1D88DE9E198D9D38BEAE4A0EFE8A7BAB47767613B342D042E281B868555E0E1AE FFFFD1EEEEB0E2E19EE4E499E1DF92E9E497E8E297E8E097D2CA82BBB66BD7D486DAD88AC7C57A CDC97FDAD68CDFD990E5DE94DFD88CDAD283DFD887E7DF8EE2D990CBC280D3CB86EBE69DE9E69A F3F0A1EAE394ECDF93E8D38AF7DA95FFF3B3D0A262904D0FD69951E4C46CD5CD69F0F491E2E98D EFEAA0F9E8ABF6E3A8C5B778DAD78DEDEA9AF1DF91F0D489F4DA959A712FF6DA96E0C47AEAD98E ECE39EEDEAB089855A0A0403ACA77CD8D999D9E499D0D69BDED1AAF2D4B3BA945CFBE497ACA969 202408090C06978E7AF4EBC5D8D19EECE6B0DEDA9F272300C3BB7AF3E8A1F0E39AE9DB92CABD73 CAC074EAD4889D651BB7833EE0BD78DBC383EAD899E0D793DDDD91E1E695FFFFB7E8C88AA0592D 9C592AECCB8AFFEEADF2DA97EADA98CAC07FBDB876D3CF8BE9E5A0E3DC96EEE69EF8EEA6F4EDA5 F2EEA8F1ECA7F1ECACF3EDAFF5EFB3F4EEB4F8F2B7F0EAAEE9E3A6F0EAABF8F2B4F6F1B6F9F4BB F6F2B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFFF3E7FCE3C3 EEE1ADE5E5ACF4F4DDFBFBF2FFFFF9FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFBFFFAF5FCF9F0F4F4DCDBDF95E4E7A4F8F9D4FFFFF3FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF1F1F1D5D5D5D7D7D4EDEDF88B8BFE3E3EFDA1A1FFD3D3F4D3D3E79898EE585AEE 5056CE737ABDCACBDBC5C5EEA1A2FC6969FC7777F3B4B4E6DBDBDFC0C0E36868F13232FE8B8CFD CCCDFFE9E9F99AA0D2636BC7797CE59F9FECBBBBCBB0B0E18F90FC3C3CFD6D6DFED6D6FDF7F7F0 E7E7E7F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFF EBEBFFB5B5FFA4A4FFA3A3FFA3A3FFA3A3FFA3A3FFA2A2FFA7A7FFC4C4FFE3E3FFF7F7FFFDFEFE FEFFFEFEFFFEFEFFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFBFBFBECECECE0E0E0E0E0E0EEEEEEFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFCCC465D7CE70E0D578DCD175DCD175E5D87CD4C76BAB9D41C5B55BEADB7FF0E386D9D176 DDD585DBD48F787133393402BDBB6D87872ED9D87BDEDA81E5DE90BAB06F302800B9B56CD8D480 D6D075DAD373E3D97AE4D77DEADB89E8DB8DDFD485E0D685E7DF8CECE28DECE28DECE28BE8DE87 F7ED94F4EB91EBE287F5EB8EEEE685F1E888F9F190F5EC8DF3E990F2E98FEEE588EDE584EDE583 E8E07DF6EE8CEBE284EAE187F4EA95DDD180FDF8A8CEC876867E2CD8D180FBF4A3EFE898EAE495 DDD789D8D385EFED9EE5E294A7A3576E6618362D00776D29988D4CBBB071D1C688E5D99DFDF2B3 F4E9A6E8DF96E3DA8DE9E090E2D889E8DD8ADED47BDED57ADED57AEDE38BEADF8FF1E598EFE494 DDD37EE0D67BDCD57AD7D27AE6E08BD9D380E6DF90ABA4529D9646DED786E1DA88E6DF8AEAE48C E2DD83E5DD89EAE291E8E090E8E08FE9E190E2DA8AE5DD8CEDE594F5ED9DE5DC8CEAE291F3EB9A F1E497F2E49AF0E197E8DC91E7DD91EBE297DCD38FFCF5B6B7AF782B2201150D0121190F150D08 160D01231B00271B0031240075672DF5E59FE2D183D4C16BF7E78DFEEF91E5D270EEDA7DFCE5A4 F8E3A2EFDC92E8D68AEFDF97F8ECA97E73470500006C673BEAEBA7FAF9AED6CE8E544516E3CC9F FEE5A9C1A04D866505EECC72EED082F4D98FFEE99AF6E38BEFD97EFBE389F7DF85D2B762E2C875 FDE595F0DC8BEFDD8EF2E294F3E999E7DF8FEEE59BF1E7A2EBE398CCC283756837EDE79CA8A15C 6A6026F5F29FDFDB93F1EAB46B67303C380C0A0500BCB886827E3ECDC77CFBF4A2F6EB9BEBE091 E6DB8DECE191EBE290E3DC86F2ED97F4EDA0FFFDC4BEB687322703C3BA81F5EFA5F2EE99EFEB97 E4DD95EBE2A9F3ECB9D6D69A53531E5F5F27E2E2A0E0E296D8DB84E9ED8EEEED96FCF9AFE6E1A9 6A613C241C06726C42E2DBA3EEE9AADAD68FDED98AECE892DED980D3CE74DCD67DDDD780F0EA95 E2DA90DBD48FDBD58FAEA762EFE9A5E9E4A2A7A15F453F19191300605A37B6AF88E4E0B1CCCB96 CECF94E9EAABD6D793C9CB81F2F0A4E4E293EBE597DFD98CDCD48BE7DF97E9E297E1DE8EEFEC9E E2DD90E7E297E4DC93DFD78DDBD487E3DB8EE4DB8BD2CB78D3CB77DDD88BDAD58DE0DA92E6E095 E2DB8DEAE393F4E99AEBDE8FEEDD91DDCA80F2DF97FDE7A2D79357834000B68B3DE8D47CF8F196 CECD76E4DE92EADF9AF7EAA7E0D590F0E99FECE494EDDC89F3D98DF4D7959D773DF6E0A7F0D79C E1CF93F0E7ABF5F3C14B4525130C09D8D3AFF4F8C8EDFABF424D2D3F3819F8DCC1A1814B604E1F 090C000B1600000200110F00C4BD8CF4EAADD7CE8EE3DB97D8CE84F4E99CF0E595F4E695F6E696 EAD789F2E192FFE396BA7F36D39855EFC684E1CD8BD9D692E5EB9EECEA9FFDF3A9F9CF8C9D6227 83430DF7C58EFFEAABECD89AE6D596F4E8AAD8D392CDC989E3E09DFFFAB7EBE59FE8E098FCF3AA F6EFA9F5F0AEF5F1AFF2EDAEF4EEB0F5EFB3EEE8ACF4EEB1F9F3B4F9F4B5F2EDACE8E2A1EDE9A7 F7F3B4F7F3B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFF1E4FFE6CC FDDEBAF4E5BFEFEFCFFBFBF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFBFBF1E9ECC0E8E9B2EEEEBAF8F7D6FEFEEFFFFFFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF7F7F7E5E5E5E6E6E3EFEFFB8686FE3939FEB2B2FFE8E8F8E8E8F0C5C5F4 8A8BF45559E0565BD5C1C2E7A1A1F46B6BFC6B6BFC9898F7D2D2EFF3F3EBDEDDEE9595F65656FD 5A5AFD9B9BFED0D0FC7F83E35257DC8F90EEC9C9F3D4D4DFC9C9EBA5A5FD3C3CFE6767FED3D3FD F5F5EDE3E3E3F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FF D6D6FFBBBBFFC4C4FFC5C5FFC5C5FFC5C5FFC5C5FFC5C5FFC5C5FFC4C4FFBFBFFFBEC0FDD4E1F3 DCEDE9DCEFDFDCEDDBDFF1DFE9F9E9F3FFF3FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF F0F0FFDEDEFFD1D1FFE4E4FFF3F3FFFCFCFFFFFFFFFDFDFDF3F3F3E4E4E4CFCFCFE2E2E2FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCFC66BDBD277E5DA80DCD175D9CE72D6C96AE7DA7CD8CB6BE0D173E2D374DFD272 D6CE70D5CE7CDFD790A49D5D312C01B2AF61A09E46D4D171DAD678E8E08BCCC0762B2300A7A35D D2CC7CD9D37AE3DD7DE4D97BE8DA81E7D886E4D887E1D686E3D887E7DF8AEBE18CE9DF8AFBF19A F6EC95F0E68DECE288F3EA8CF0E887ECE481EDE581F3EB86F8F08DF2E88FEDE489EAE184F4EC8B F7EF8DEFE785EEE585E3DA7DE2D97FEEE48EF3E896E3DA89EDE595DFD687C0B768BAB162FAF3A3 E9E292EAE594F9F4A3D2CE7DD7D483FBF7A7F4ED9DB9B0628A8139685D1D4D4106302300594D19 8F844EC9BF83EAE19DE0D88FDED78AE7DF8FEBE390E4DD84E7E085E5DE85EFE792E4DB8DE6DD92 E6DD90DDD582E1D980DAD57BD9D682D6D483E5E194C7C376261F007A7339DDD78CDFD98AE4DF8B ECE88DE5E084E4DD86EBE390E9E18EE5DD8AE8E08DE4DC89E4DC89ECE491F5ED9AE8E08DEDE592 F0E995EEE191F2E595F1E495EAE08FEAE090EEE497FBF9B3E0D696FCF3B7E9DFABB5AA7AA59C6D A2996BA89E6EB7AA79DED098E4D497DCCA87E1CF87E7D487E8D683F3E18CF5E38DEAD87DFAE68E FDE9A6E6D091ECDA92F4E499EFE49BFAF0B2584F28100B00D1CE9FEEEFA8E1DF92F5EBA67D6A37 F4D8A9D6B7757D5C07E4C562FDED91E9CD7FFFE9A4F4E69BF7E995FFEA8EF9E083E3CA70DDC46D FEF39FF6E190F0DE90FAED9FE8DD91EFE89AEAE395EDE49CE5DA999C944CD7CD8E665B26BBB46B D2CB87413801D3D082E9E5A0F8F2B78E8A4E5652281712008E895CAEA96CB3AD62F1EA98F8ED9B FBF0A0F1E597EBE392F4EC99EFE896E8E297F7F3B0C6C085342D00B5AD75F6EEAEF4EEA2E8E28F E0D988F1E8A3F4E8B1E5DEAF4E4E20797D43FFFFB9DCE28DE6EC94DEE28FF3F4ACFDFDBFBEBC85 322F0B35320AC9C28DFDF6C0E8DFA2D5CE88E2DC8EF0EA95EDE88DE4DF83E9E38AE6E08CDAD282 E5DD92EFE7A6C1BB7EE0DC9DE6E1A1BFBC7C504C0D110E02666221BAB57CDAD59EE2DCA9E6E3AC DEDF9FC5C682E5E59FEAEBA0E2E093FEFDACF0ED9DEDE799E6E092E5DF95E7DF97E5DD93E0DB89 ECE796E5DD8FE7DF93D3CA7FE3DA8FEFE79AE8DC8FD9CE7EDCD17FEAE08BD4D17FCECF81D1CF81 D8D181EAE190F3E796F4E896E7DB8AE3D888D4C97ADAD284F9EEA3FFE6A1DDA8658C5915BE8D46 FFE59BF0D98EF2E69BE8E499DBDD90E2DD92F0E69AECDF8FEBDF8BF6E399F5DB9DB69665F6D9AB F9ECBEECDDAEE2DCADD4D3A41C190F0E0905A29D7FDFE3BC596736121C000C0604160000220300 1C0A049CA059ACB98A37411F66673FC5C188F2EAA6F2E9A3F0E69EDDD184F8ED9DE4D987F3EA94 F4E693FFEE9CFFF0A0FAD789B0712AE3AD69FFE6A2F4EEA7CFD98DEAEDA0FFF1ABFFC081C67239 A0591EDBB573FFFBB9ECDA9CD3C588DED496EBE5A7D8D495D0CF8FD7D693EBE8A4EAE49EE9E199 F8EFA6F6EEA9F7F2B2F5EFB0EEE8AAF3EDB2F6F0B6F9F3B8F5EFB3F4EFAFF9F4B1FCF7B2FEF9B5 FFFBBAF3EEACF4EFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFCFFF3E7FFE4C8 FFDCB8FFE1C2FEF0DFFDFDFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEFAF2F2D5E6E6B0EEEEBAFBFBDAFEFEF0FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F8F8F6EEEEFE8585FE3B3BFEBFBFFFF8F8FEFDFDFD F0F0FEBDBDFD6464FA4445F9ACACFC7A7AFD3D3DFD7374FDB9B9FDEAEAFDFFFFFDF5F5FDC7C7FD 898AFD3B3BFD6A6AFEA9A9FF6A6BFB5354FAA5A5FDECECFEF6F6FBEAEAFDC1C1FF4444FE6767FE D0D0FDF2F2EDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFF E8E8FFB3B3FF9A9AFFE2E2FFF7F7FFF9F9FFF8F8FFF8F8FFF8F8FFF7F8FDECF0F8C0C7F59BA6F0 ABC4E4B7D6D4BFDFC5BFE1BEC2E5C2D0F2D0E1FCE1F0FBF0F5FBF5F8FCF8FDFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF ECECFFCBCBFFACACFF9A9AFFB7B7FFDADAFFF5F5FFFDFDFBF9F9F9FAFAFAEFEFEFC6C6C6DADADA FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD5CB73DCD279E2D77EDBD075DCD175DCCF71E0D374CCBF5FD2C463DCCE6D DED26FDFD673D0C873DED48EBBB2722823009B974AAFAE55D2CF6FE2DD7CE8E287DBD180413906 A49F5CDAD488E0D982E7E084DACF73E1D47BE0D27FE4D787E9DD8DE1D782D4CD75F5EB96EEE490 F5EB95F3E992F5EB91FBF295FBF294F8F08EF6EE8BF4EC87F3EC84F5ED8AFAF195F5EC90EBE285 F2E98AF0E887EAE181EEE588EBE287EBE288F3E992E4DA85E4DA89E2D889F2E999ECE293C1B868 989140E1DB8AEDE696EAE493D1CC7AE0DC8BEBE795E9E18CF9F09DE6DB8FDBD18CBCB07490864C 9B905A4E44124B42098A8241C9C47CE9E398F0E89BDFD786E5DF88EDE690DFD883F1E99BECE39A E3DA94EFE59DE8E190E9E389E2DE87ECEC9DD8D78BEBE8A09B984D0C0802C9C47AECE79EE4DE91 E1DC88E8E489E6E184E7E088EAE28EE6DE8AE4DC88E6DE8BE3DB88EAE28EE9E18DE9E18DE5DD89 ECE490EFE892E9DD87EADF88E9DD87E4DA85E8DE8BEAE090DBD285E9E099E1D795EDE3A6FFFAC2 F4E9AFE6DB9AF9EEAAFFF0ABFBEAA1FBE79DF1E194E9D587F0DC8DF8E596ECDA8AE4D385F4E390 F5E491ECD893E5D292F8E8A3F1E598ECE39BD0C98E191100484223F1F0BDEDEEA4E3DD8EDBCB85 745E29B79966866523E5CA70F7E480F7DB7EF7DF92FBE9A4F1E89EF3E996FDEC8FE0C86BD0B85E FEEB95FFEE9DF3E193FAEC9FF2E79BEBE296F4EDA1F3ED9FF4EDA4F9F0B0615717E6DE9D9C9453 6F6726FDF7B57D7535BCB875FBF7B5F4EFAEAFAC6C65603A252208615E38E9E5AAC4BC74DDD685 E5DC8AEBE191F0E697E7DE90F8F09FEEE899F9F1B3A09A663C3709BEB976F1ECA6E7E096E7E097 E5DD93F0E6A2FCF4B4B1A66A373100868752E3E8A5D1D889E2E792E8ED9DF0F3AFDDDCA6706B4C 1D18006C6A37E8E7A3F4F1AAF4ECA8F2EBA1EDE797EBE58FE7E287E1DC81DDD77FE9E291F0E99E EDE5A0E6DD9EF3EEB7DCD6A1AEA96F54502B3632006D6A32D1CE85ECE9A3EBE9A0C9C67FD6D38D DDDA94DFDE94E0DF94D9D98CDEDE8ED6D483C7C573EBE897E5DF91E4DE90F3EDA1F1EAA1E4DE92 E8E391F2EA9AE9E292E9E294D9D085DBD286ECE396F7EB9CE6DB8BE1D782EEE28ED8D582DADD8C D6D584D2CC7BF2E996FAEE9BD2C572E1D583E4DC8BE4DF8EECEC9CE6E596F2E194FBE7A1A77535 8C4E12B9793DFCDF9EFCE39DF0E396E3E191F7F6A5F0E89AEAE191E5DF8CF2E49EF8E9B27C613C 412A154C39249089628484592F331F101302110E0006010025230C24300CA9AE80ADA37F63422A 523013CCB76BFFFFC0E9F2C0E4EDBFE2E2ACEAEBAAD6D48EEAE39CEEE59BCAC073D7D07FCDC976 F2EE9AF0EA96EFE092FBE79CF2CB83B6712CF3CF88FFF3A7E7EBA0E5E49AFFE9A6F4BC80B95F26 A34E12D39D5BFFF9AEF4EDA5F7EDAEFBF2B5F2EBADDEDA9BDAD99CDAD999CDCC8ADBD895E7E49D E8E298EAE299F6EFABF4EFAFF1EBADEEE8ACF5EFB3FBF5BBF6F0B4F4EEB0F2EDACF2EDABF3EEA9 F4EFAAF2EDACEEE8A9FCFABBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF1E2FFE4C8 FFDDBAFFE2C5FFF2E4FFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3F3F3DBEAEABAEBEBB5F8F8D4 FFFFF2FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4DDDDDED8D8DDDBDBFA7B7BFE3939FEC0C0FFFBFBFF FFFFFFFFFFFFDAD9FE7E7EFD3C3CFD4D4DFE4646FD4E4EFBA6A6FDE3E3FFFAFAFFFFFFFFFDFDFF ECECFFC2C2FE5D5DFB4545FC4F4FFE5C5CFE8687FECCCDFFFDFCFFFEFEFFF9F9FFD6D6FF4C4CFE 6060FEC0C0FDE7E7EDE1E1E2F2F2F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFF E0E0FFBFBFFFC4C4FFD6D6FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FAF3D1E8D2ABD2BF 8CBAB9829ACFA6B4DDD5E3E2DCF6DACBF0CBC3EAC3BBE5BBB5E6B5BFE6BFD1EAD1F2F8F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFF EEEEFFBBBBFF5A5AFF4F4FFF5959FF5A5AFF9696FFE3E3FEEFEFE7D7D7D7EBEBEBF6F6F6D6D6D6 E4E4E4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDED47DDDD37ADFD47BE1D67BE8DD81EEE182F0E383E1D473DFD170 E3D572DBD06BDAD26DCFC56EE2D991B6AC6E2720009A964BA5A24CB1AD4EE5E07EDBD577E9DF8A 554D1B8D8749E4DD94DDD683DED77DE2D77CE5D87FE2D380E6DA88EAE08CE2D981DCD57BECE28C EEE48FE7DD87E7DD86F2E88FF8EF94F6ED8FF1E988ECE481F1E985F5ED88EFE784EEE587F6ED90 EFE689F6ED8EF5EC8DF7EE8FEFE688F0E78CEBE188EFE58DEDE38EDED380ECE18FF9EE9EEAE190 F5ED9CD8D07F746D20A8A150EEE796E5DF8EECE795E3DE8BD6D077E6DC83FFF5A3E7DE91EDE39E FCF3B2E4DC9EF0E8AACEC889A7A15F4945007B772DCAC37AF0E89EF1EB9CE6E08EE9E294E7E098 F3EAA7FFFBB9AFA85FD7D081DBD57DE2DF8A86853CB5B470EBE9A686833C302D03E1DE95EAE79B DDD887E0DB86E9E489E6E185E7E087E8E08BE5DD88E6DE89E6DE89E5DD87E8E08BE9E18CE9E18C E9E18BECE48FF2EB94EFE58BF0E58AEFE68BE4DB80F0E68DF2E891EAE290EBE394E6DD91E4DA94 EDE39FDCD088D5C874F8EC93E7D67EFBEA90DFC86FDBC36DF4DE89F1DC8CEEDB8DEFDD94EBDC95 F9E99DEFDE8FE3D188EADA97ECDF9BE8DF8FFAF3A8B8B17B0C03005F5738FFFFC8D9D98CDED283 F9F5AE856C36795D2BE3CA88FFEC93F7DE7BEFD87BE9D587F7E7A1F5EA9FF5EB94EDD679D4BC5F F3DD82FEEF9AF3E292FCEC9FF3E99CF8F0A4F3ECA1E9E397F5F0A2F4EBA1F4EBA8897F42BFB975 F4EEA35C541BDFD89AC2BB7467612BF3EDB1E7E39BD3D08E46411C2C2711302B19DFDAA2ABA65E B4AD5DD8D07FFAF4A5DAD184EBE296EFE79BFDF6AEB7AD78292208C4BF7AF5F2A2E3DF89DBD685 E5DE99EDEAB1FFFCC4AAA063665E18BDB973CFD38AD9E094CCD186D6DA93F7F8BBB6B481494619 322E07B7B586FDFDBCDDDE90E1DE8BE7E08DF2EC95F9F39AE2DD82DBD57DE1DA86EEE899EBE39C E9E1A3EDE5ADF9EFBDCFCA97817B4B37320067632EC7C381FFFEB7E8E798ECEC99ECEC96CBCB72 DDDB81CDCD74E3E290E7E596C6C475C4C170C6C371D8D683EFEC9BE7E293D0CA7CDAD488EAE49A E5DF92E9E492EDE897DED789CEC67ADDD388D6CD82CDC478E3D78AD8CD7DBBB05EC9BF6AD7D481 E6E896EDEC9AE9E491FBF29FF2E893F6EA96E9DF8DDED887E8E797F1F3A3E6EA9BE9E795DDCB80 ECC787D49C627D3C06AB6C33F7C987FFE89FF9E598E2DB8BDBDA8AEBEB9AE5E294EBE3A0F0E2AC 3A27140E0000150A00020000000000545B35D8DDB7B0B08F5951376F6845CBCE92EAE9B1D6C69B C8A17DA87F47F1D58CEEE69CD7D99DE5E6ADCBC783B3B871CACE88DDD892D4CA83BFB66DD8D485 C5C676E8EC9BE4E394D5C880F8E39FD5AB6AB0712AF4CC82E5DD8DEBE89EFBDE9DD49760A54C17 B66327F7BC79FFEBA1F1E89AF2EEA6F1E9A8F2ECADF7F2B3F5F1B2EFECADEDECACECEBA8EBE8A4 E8E49DE2DE94EAE59BEAE6A0E4DF9FF6F1B2FDF7B9F7F1B5EBE5ACF0EAAFF8F2B6F9F4B5F8F3B1 F9F4AFF3EFABF5EFB1EBE5A9FDF7BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFF3E7FFE4C9 FFDFBDFFE3C7FFEFDEFFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF7F1F1D4EAEABA F0F0C0F8F8D5FEFEF0FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F1D4D4D6C5C5D4C2C2F87778FE4A4AFDC5C5FE FAFAFFFFFFFFFFFFFFECECFEB0B0FC7878FB6363FD6F6FFC8F8FFBD4D4FDF9F9FFFFFFFFFFFFFF FFFFFFFCFCFFE6E6FF9F9FFC7575FC6767FE8B8CFEC0C1FEE9EAFEFFFFFFFFFFFFFEFEFFDEDEFF 4E4EFE5C5CFEB8B8FDE2E2EDE0E0E2F2F2F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFFD0D0FFA9A9FFD1D1FFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFF8FFF6E2F8E1CEF0CEC4E8C4 B8E4BAA9D4BA8391D8A9ABEDE7E9F8F5FFF2E2FAE2D3EED3C5E5C5B7E6B7BAE1BAC4DFC4D5ECD5 E8F7E8FAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2FFC8C8FF8A8AFF4242FF5656FF7171FF3C3CFF6262FCB5B5F5D7D7E1D5D5D6EBEBEBF8F8F8 E0E0E0EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D77EDCD279DED37AE6DB80E9DE82E6D97BE6D979E5D878 E3D474E4D675E6DA76D9D16BDAD078EBE19BB0A5692E2500B6AE68BFBA66A39E3FDBD673DDD575 EFE48C6F6623837D42E6DF99DED788E1DA81EFE48AEDDF87E9DB88E6DA88E0D682DAD179DBD579 E8DE87E8DE88E3D982E8DE87F2E88FF2E98FF4EB90F2E98BEFE685F5EC8BFBF291F7EE8DF6EC8E FAF194F3EA8DF8EF92F2E98CF5EC8FF3EB90F7ED94F2E88FEFE58BF0E68FEBE08CE5D984EBE08D F3E995F3E895F2EA97E5DD8BBCB463B1AA5AD2CB7BE2DB8BEDE896FFF9A0E1D77DF2E891E8E08E E9E091E4DC92F1EAA3E3DE99F3EEABB3AE6F322F0458551355500FA9A35FEBE69FE9E49AF1EBA5 DFDA99E2DB9EDFD8981E1900B1AD5EFEFBA2D9D888131300949257FBFAB9423F1B6A651EEFEA9F EAE594DAD381E1DA83EFE78FEDE58CEAE38CEFE795F1E996EDE592EAE28FEDE592ECE491ECE491 ECE491EAE28FEDE592F3EB97F4EB90E9E083EEE588DED57AEAE187E2D881E4DA83E2D783EBE08F E8DD8CEADF91E5D885EEDE80F3E17FFEEA88D7BF5CD8BD5DFFEA8DF6DD83EBD580E9D789EDDF95 F1E49EEADC93EFDD92F2E294F2E39FEBDE9BE8E18EF3ECA089824E0100006F6442FFFEC1EAE394 E9D988EFE59E553A1C5B4113FFEDB0E3CF7DF3E283F6E68CFBE99BF3E098FAE899F4E289D6C063 ECD77AFFF299F9E794EBDE8FFFF3A8F0E89CF6EEA3EEE79BE5DE8EF2EB9BF2EB9EF5EAA8C6BC7E 8B823AFFFFB1857C4480773AE5DE99544C20CFC991E1DD93F0EFAB4E4A26322E1A161102DDD9A1 C2BE79C6BF71F6EE9FDFD58AF8EFA9EBE39CFAF1ACAEA668201600BAB175FFFFB6E7E288E5E286 E7E28FE0DA98F2E8B1ACA26F5A5113DED88CEBEA94D6DC82C7CB7DD6D59BD5D2A788845F0B0600 56522DEBE6AAFFFFB8F4F2A6E8E599E2DF89E9E486EEE98CE6E185E2DC86E1DC8ADED88EC7C37E E8E1A5F5EEB8EDEDBF9C94652019067E7843CBC68FFBF7B8EAE7A0D6D284EAE892DFDD82C8C868 C0BD5BF2F18FF8F595E3DE8BE6E291C3BE6DC7C170C4BF6EE6E190ECE795EFE99ADBD587D7D183 DED88BDCD78AE0DD8CF3F0A1E8E295BCB76CCAC279D8D085D0C97BDAD184DFD686D0C875C8C06C D4D17EDCD887E9E593F3ED99F3EB98DED784EEE491E2DB88DFD988EFEE9EF7F9ACE2E396ECE897 EBE093F4E39CFFF4B6CEA369864C12995A1DE4AE6BFDE8A1F3DB90DFDE90E1E79AE8E599FFFBB8 A79766210E00998962C4BA949C9B6DB6BB88E7EFBDF6F9CCEAE7C0EADFBBE2D4A8F9F9B5E2DE9A C7B17ED9AB80B68649EDCC7EE5D98DD7D593E3E1A0DBD285B9BE73C1C781C6C17BCFC27CC7BB73 C1BC718C8F40AFB567DADC91D8C986F8D89DCAA164B58B3DF6D385FFDB95F8D396BF8750894610 AE6A2FFDCD8AFFFAB0FEF4A7F5EDA2F1EDA4F3EFA9F2EDAAF4EFACF7F3B2F9F5B5F9F4B4F1EEAB E1DE9AD3D089D2D086E5E398EDE8A3E5E09EEEE9A7EBE5A7EAE4A6F0EAAEF1EBAFFAF4B8FDF8B9 F9F4B4F4EFADECE8A7F6ECB2F6ECB4FEF5BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEF2E4FEE4C7 FEDDBAFFE3C6FFF1E2FFFBF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF4 F3F3DBEBEBBBEBEBB5FAFADAFEFEEFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F5DEDEE0C5C5DEABACF8797AFC6666FB CECEFDFBFBFFFFFFFFFFFFFFFAFAFFE7E7FED5D5FECBCBFFD0D0FEDDDDFEF3F3FEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9FFE3E3FED3D3FECDCDFEDBDBFFEDEEFEFAFAFFFFFFFFFFFFFFFFFFFF E0E0FF5151FE5D5DFEB5B5FDDFDFEDE0E0E2F2F2F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFFCECEFFA5A5FFD2D2FFFFFFFFFFFFFFFEFEFFFCFCFFFCF9FFDEF2E4ADE9B0A2E9A2 CDF5CDDDF7DDD9E8E79EA2F2B5B4FAEBEBFEFFFFFCF6FEF6F1FAF1ECF6ECE7F6E7DDEADDD0DED0 B6E1B6C5EBC5EAF8EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0E0FF9696FF6464FF7676FFA3A3FEBBBBFE5656FF4A4AF67D7DEABCBCE8EAEAF0F9F9F8 F7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CF75D1C86DD6CB70E3D87CE6DB7FE4D779E1D475 E9DC7DE6D778E4D577EDE17EE5DA75E1D780E6DA95C8BD85463D05A09857CCC776ACA74ADBD471 EBE382F2E78E7E7530565018C5BD7CD1C97ADBD47DE8DD84E6D882E9DA86E7DB88E0D681DDD47A DED87BE7DD85EBE18BEFE58EF7ED96FAF098F0E68EF3E991F8EF94F9F094FAF195F6ED91EDE486 F2E98BF3EA8CF0E789F3EA8DEAE185F0E78BF9F096F5EB92F2E88FF1E78EEDE38BF3E891E2D77F D4CA71F4EA93EBE18BDFD682E7DE8DF1EA99D8D0818F8839898233D8D184CEC470DDD27CE9DF88 EEE691E6DE8AEFE896F2EC9DE7E49AFDFAB76460265A5837EDEDB7908A523A3500ADA86AF4F0AE EFEBACEDE7AD827C4F312B0F454112D4D182EBEA92ABAA620A0700928F5BE4E3A7302D05ABA759 E3DE8AE2DC85DED77EE0D880E6DB84E6DB86E6DD8AEAE290EBE391E1D987DFD785E9E18FEDE593 E3DB89DAD281DED684E4DC8BE7DF8CEDE28DE4DA83F2E893E9DE89F2E792E8DD89E8DD89DBD07C F1E692F9ED9AF8EC99F3E48FF9E58BF3DC80DBC264DEC363EED070FCE687F3D87DF5DE88EEDD8B E9DD8FF4EBA3EDE198F3E397F1E28FECDF97EBE09CECE790F9F3A5958D59080000887751ECE09B F4E795FEEE9DA88C49947C4B2F1A01AF9E66EBE194E7DF87F8EC98F0DE92FFEEA3EDD27EC9B051 E1CD6FFEEE94F9E991EFE190FBEFA3FAF1A8F1EA9FEDE59AEEE799EFE897F3EA97E3D98BF7EDA9 E7DE9C857D31F1EB97E4DC9D655D20E1D99C9F966B837C47F8F7B5F7F5B17E7B560D0A01080500 ADAB79E4E19CB7B165ECE499FCF4ADE9E1A0FDF9BAA89F662A2100BAAF70FBF2AEEBE595E5DE89 F2EC97F4F1A9F9F5B37971365E5925DAD493EDEA9EE4E592D1D480E6E6A3CBC895484220494220 999465CBC787D9D689ECEB98EDEC9AE5DF96E8E38FE3E080EBE68AE8E28DD7D385DAD48FE8E2A5 EDE7ADDFD9A36D69473E3C0C7B7645D3CE97F6F0B5D3CE90E1DE99E2DD93EAE695D7D47DE3DF84 E4DE82E2DD7ED8D373969034DCD685E5DF8FC5BF6ED8D283D1CC7CD1CC7DDCD787DFD98BD3CD7F CEC87AD8D485DEDB8CE0DD8FEAE799D7D58AC5C077D6D187E3DD94EBE399E2DB8FE8E092E3DC8B C9C16FD2CC7BE6E08FEEE897EAE493EEE895D9D380E0DC88E5E090E6E092E5E095EBE69DEDE89E E3DB8ADCD685D7D389FEF7B6FEEDB0E1B97C99601F7D3D00B77B36F5CD89FFECAAD7CB84D1C77B F9EAA5CDB87D8C7443CEBA88FFFBC5F0EDB0E7E9A9DEE0A1E3E0A7EAE2B0E5D6A8CFC18DE6E497 E6E195E7D294E9C18DA1702FDEB96BEBDD91DCD796E1DD97EEE592DFE293DEE098D7CE88E9D692 E7D48EC6BD73CECF82B3B96BD2D086DCC987F3CA94BB8C51C5A251FFE397D795589D54208E521D B3874AFEE29CFAEAA0FCE69AF6E69DF1EAA2EBE79FF0EBA0F2EAA2F0EBA3F7F0ACF6F1ADEDE9A7 E2DE9BCECC86BEBC75C3C278D7D78BE7E39AE2DD98E9E4A0E3DE9DE4DEA1F4EEB2F0EAAFF7F1B6 F4EEB2ECE6A9EBE5A6E8E2A3F7EEB2F8F0B3F8F0B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFF4F8EECE F2DDADF9E2BFFFEFDEFFFBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCF6F0F0D2E9E9B8EFEFBDF8F8DEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F7E5E4E7C8C8E6A2A3F97C7DFB 7575FAD4D4FDFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFE3E3FF6464FD6666FDA9AAFCD2D2EDDFDFE2F2F2F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFFCECEFFA6A6FFD2D2FFFFFFFFFFFFFFF6F6FFE1E2FEB7BCFB92B2D684CC9E 9FEA9CE3FEE3FAFFFBF5F3FFB8B7FFBFBFFFE4E4FFFBFAFFFFFEFFFFFFFFFFFFFFFFFFFFF8F6F8 E5EBE5BEE8BEB7EAB7CCEFCCE7F7E7FCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFFFFFFFCACAFF6868FF4B4BFFB1B1FEDDDDF7E0E0F27F7FFB5555F75F5FEEA7A7F3F6F6FF FFFFFFF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3CA6ED1C86CDCD175E4D97DEADF83E4D779 E3D678EBDE80E9DA7CE7D87BEEE07FE7DC78E6DC86E5D996ECDFAA4E430E726A30C9C374A59F43 DED776DFD775EDE386948A46423B04DAD291E9E095E6DE89F3E890E9DA85EDDE8BEDE18EEAE089 E9E086E4DF80ECE289ECE28CE9DF88EDE38CF6EC95F6EC95F5EB94F6EC95F1E790F2E891F6EC95 F2E88FEEE587EEE586F1E889F7EE91EDE489F5EB91F5EB92EDE38AF3E990F8EE95F4EA91F5EB90 F6EB91E9DE85E3D97FEDE38CEEE48FE8DF8DDED684F3EA9DF6EFA3AEA65B6E661BA29849F7EA9A EFE591F5EE96FDFBA3E3DE86E8E693E2DF94EFEEAB262300918E60FCF9CEEFEABA5D572358531B C4BF86FFFDC4D8D29E1E18006C673CE3DF9FFCFBAFD9D87FC1BF760D0900C5C192AEAB75565210 D1CC7AE1DD82E3DE7EEBE183E7DE83E3D782E4D887E3D788E3DB8AE4DC8BDDD584DFD786EEE695 ECE493DED685D3CB7ADAD281E6DE8DEAE292DDD283EEE394F3E899E8DD8DE3D888F3E999E6D98A F0E394FBEF9DE7DB89E9DE8AF9E896FFEA9DEDD082C5A655E6C56FFDDB81FFE58AFDE086F8E088 E1D07BDED483F5EE9FF5EB9FF1E497F3E88FF2E89CEFE6A2E0DC81EBE695B4A8760C0000A7936C FFFFBCF8EF9C7D6413BFA563D3BD90180603615725E6E39CEBE997EAE291F4E296FBE092CDAB51 F2CF6DFDF092F3E38AF5E590EEE394E8DF93F5EDA4F0EAA0FDF6ABFBF4A3ECE390EFE38DECDF90 EEE29EFEF6AB9A9343D8D180EEE89F837A3F978C5CEAE2B4645D2AF2ECB0EAE8A3C0BD96020000 0D0A006B693CF3F0ABAFAA60E2DA92DED590F7ECB0B9AF74190E00C7C389FFF4A5ECE28DEFE696 F1E89DEEE59DEEE8A15D56157A7638FBFBB8EFEDA3F1F1A6EDEDA7EBE9AF8E8C54181400635C2F EAE5AFE4E0A0DAD78CF8F6A3E4DF8BEBE695F2ECA1E5E08EDAD67CE5E08DF2EFA2F6F1B0F3EDB4 EBE5B2ABA777221E004E4D22D8D79EEDEDB1D7D593E1DC98C1BD75DAD58BE0DB8CCCC775B8B25E D8D27EE5DE8AEBE08EE7DD8AD2C876D4CB7CEAE393C9C272C6BF71DCD587E5DF91DCD688D9D385 D6D082D3CE7ED4D180D7D484CFCD80CFCD82C5C378D3D187E6E19AE5E19AF3EFA6D8D287D6D083 E3DC8CD5CE7DE1D98BF4EC9EEFE797DBD584DFDD8ACBC976E2E08EE2E192E3DE93EDE69DF4E9A4 EADE97D5CD7AD0CC7AE6E39AE1DD9DD3CB8CF7E2A0EDCB83C6974E88530B915719DAA26DEDC086 CDB669EFD68BECD08FB49659A18849F7E69FE4DC8EE9E494EAE496E1D690F6E4A6F8E6B0DCCF96 DADA86CFCB77D5C27DE3B9819B6B28E6C274FBF1A6E1DC9BD9D68FE9E08ADCDD8CF0EDA3F0E099 F3D692ECD18AE3D186E0DA8DF9FBAFF4EEA5E6CA89FBC893C98B56CB9648BE7A328B3901A45926 E1B078FDF9B5F4F3A6EFEE9EF3EB9EFAEFA9F1E9A8E9E29CF1EA9DF4ED9FF0E89EF5EDA5F1E8A3 EAE4A0E5E09CD4D18CCBCA83D6D68CE2E297E3E297E5E198F7F3ABF5F0ADEFEAABF2ECAFF1EBB1 F6F0B6F0EAAFE7E1A7ECE6A9F4EEB1D8D091E2DA99F6EEAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF6FCFCDC EFEEBDE6E3ACF4F1D8FEFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFCFCF7F4F4DCE6E6ADEEEEC9FBFBF2FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F7E3E3E6C5C5E59C9DF9 7878FB7373FAD3D3FDFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7FE8080FB7272FC9898FBC0C1ECDDDDE3F3F3F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAFFCECEFFA7A7FFD2D2FFFFFFFFF5F5FFD6D5FFA8ABFC5468EC3B69C7 6AAE9FAAE7A3E1F5E1F4FCF4F2F4FDC5C5FFC3C3FFD8D8FFF0F0FFFDFDFFFFFFFFFFFFFFFFFFFF FEFEFEF8FCF8E6FDE6C7F3C7ABE6ABC0EBC0F5FDF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F6F6F6FDFDFD FFFFFFFDFDFFF0F0FFB1B1FF5353FF4D4DFFD9D9FEECECF0D8D8E6AAAAF67777FD5B5BFD9797FD F2F2FFFFFFFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFCFCFFFEFEFFFEFEFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCAC163D7CE6FE6DC7DE1D679E5DA7E DFD276E3D67AE4D67BE4D47AE5D67CE6D777E3D873E3D984E3D694F7E9B7554918655B2DDAD386 B0A94FDAD372E0D876E4DA7E9A904B272000CAC182E3DA90E0D885E5DA82EBDD87EFE18EEBDF8C E9DF88EDE489E4DE80EEE58AF2E890EEE48DEEE48CF6EC96F9EF9BF5EB96FAF09BF7ED98F6EC97 F7ED99F5EB94F7EF90F4EB8BF7EE90FBF295ECE388F1E88EEFE58CEBE188F1E78EF1E78EF1E88D FAF297F7ED91EEE387F2E78DEADF86F0E68FE3DA87E6DE8DE9E093F0E79BFBF3AAC6BD758A7E37 A3964DE3D888D9D07CDCD57CE5E087E2E08BECEA9EDDDB9A1C1900ADA9829C9879D8D2A9E4DEAF 918C5A8A8450A8A27277724C261F0ADAD4A0EEEAAEE2DF96F0EF97ACAA68201A00F4EDC3686235 807C3DDDD881E3DD7DEAE480EDE483ECE085EDDD8BEEDD91EADD90E9E091EAE293E6DD8FE5DC8D EAE192ECE394EBE293E6DD8EE1D889E4DA8BEBE194F3E7A1F3E9A4E1D58FFDF1AAEFE29CF8EAA2 DDCF84F2E598F5E89ADDCD7FE6D784F7E698EFD292DBBB7AFBD992CEA95ED2AC5CFEE892FFE891 EED57DD6C56DE4DA83E8E38EE7E091EADD91F3E78EF4E99CF0E7A2DFDB81F4EE9FBAAE7D2F170B BBA379FCEFA4A68F398D7222FFF0B0DED1A83C2D0A2D290BCED18FF0F3A4E6E191FEECA1CEAF60 E0B95CFFEE89FCEE92F2E38DFBF09BF3EB9CE5DD92EAE39AE8E198F4ECA1F4EB9BECE08DF2E68D E1D586B5AA64E1D988C5BE6DAEA65CF2EC9AD6CE915B4F29E2DBA78B845399925DF7F4B0E1DFB8 2825140400002F2D01D1CD8DB7B26AC7C079F7EFAEC4BC841D13009E955EFFF5BCEFE689E0D576 FAEFA1ECDEA0E8DDA2494103746F33F2F19DC4C771DADC8CF4F6B1E7E5B3776E551B120B89854C F5F1A9EEEB9AD0CD79E4DD8FE3DD92E3DA91DAD386D6CF7ED5CF7CDAD484E2DF93EAE5A4F3EEB6 A7A1743A360D4B481A9B9A66DBDCA2D0D28FDADD94EDEBA0F3EFA1D6D082D1CB7CDCD785CDC574 C7BE70E2D88BF0E49BF6E8A1F0E29EF6E8A3D6CD82E1D98BEDE799D7CF83E7DF93F1E99DE9E397 E3DE8FEDE899ECE796DAD685D2D280CDCE81CFCF85D3D38AD6D68EE3E09BDFDC95F1EFA5DEDA90 DBD88BECE797E4DE8EEFE497ECDD93E0D689D7D180D3D080BFC16ED5D787DBDB8CE8E499F9EFA8 F7E6A5DBCB88B8B661DAD984DBD48CBCB375CBC383DAD48CDED786ECDA87CFAB5E9B5C208C320C B16135D8B367EECC80EECD85AD8742AC8A41F4D989D4C36ACFC568DCD177E2D181F2DA94E2CC91 D7CC8FDEE18AE7E790E2D288C0995D8A5E1BDCBC6FEEE199D8D796DFDE99E4DD87E2DE8CEAE294 EED98EF9D992F0D188E8D084E4D78AECE797F2E69CFFE7A8E1AE78AC5A28B250129F4708CB8F51 F6D093F5DD9CEEDF99E6E79AEAF4A4D7E291DBDE96ECE2A4EBDD9CF1E999F1E89AE9E094EFE59D EDE39CEDE4A0EFE9A6DEDA95DBDA92EAEAA0ECEEA3EFEEA2EDE99FF9F6ADF6F1ADF1EDACF4EEB0 EFE9AEF6F0B6F1EBB1EAE4AAF3EDB3FFFABDE3DB97DDD690F8F1ABFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAEB EEEEBDEDEDC0F1F1D3FAFAF0FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBEDF1F1C5EDEDBEEDEDC8F9F8ECFEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F7E2E2E6B9BAE4 8081F76868FA7373FAD3D3FDFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE8E8FE8686FB7475FB9495FABCBDECDCDCE3F3F3F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFFCECEFEA5A5FDCECEFDEEEEFDBABAFF8C8CFF656AF94B6BE1 4589AE50B1756ACD6594D594C1EBC2E0F3EAC1C7F9C3C3FED7D7FFEEEEFFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFEF9FFF9D5F5D5AAE4AAB2E8B2E5FBE5F7FFF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFADCDCDCCACACA F0F0F0FDFDFDF9F9FED7D7FE9C9CFF6666FF7474FFE6E6FEF7F7F7EAEAF2D2D2FA8A8AFF4747FF 7F7FFFEFEFFFFFFFFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF1F1FFF0F0FFF9F9FFFEFEFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6CA6DDDD274E6DB7DE3D57A E1D278DFD077DCCD73E5D67EE3D37BDFCF78E9DB7DE7DB75D7CB7BE6DA95F0E5A6776A3E574E1B DED983AEA755E5DE83E4DC7BE5DA88B6AA69251D00B5AB6BE2D990D1C977E1D77EE1D57DE9DC83 EBDD86EBDD88EDE08BE3D783E6DB85EFE590FBF19BF5EB96EEE391F9EE9BF5EB98FDF2A1FEF3A2 F8ED9CF3E897F0E592F4EB90EFE68AF3EA8EF4EB8FECE388EEE58AF0E78BEEE58BEEE588EDE588 EFE689F2E98DF4EA90EEE489F0E78CF5EB8FF3EA8EE8DF86E5DB85F1E793EFE595EFE699F9EEA3 E9E294A6A04FBAB45DFCF6A1DAD484DED68CE1DA8FE8E49698984D2D2C01403C250000005D5B2D EFEDBEB7B38A130F000C08001A1900A19E66FAF5C8EEE7C0D1CC9FFFFFC06D6A2A676232E2DAAC 272000A9A354EDEA81DBD86CE4DB7EECDE8FF0E294E9D98FECDA97E6DA99E4DC96E7E194E5DD97 DED591DCD583E4DD87EDE593E1D68AECE38FDCD081ECDC9CFAEFBD8B7F527A6F37F7EFA9E7E094 E5DC8EE7DF90EEE495F3E595F0DF8EEDD985E1CD7AD3C075F1D98EFFE698F4D180CCA350CDA551 F2D17BF5D681F3DD88F1E58FE1DC87F3EE9EE5DA8DEDDB8DE7D487EADF8FF1EC9FE4DFA979684B 311102DEBF7DBDA0479D8430FAEC96EDDB91F9ECBE4B44201B1900A8A760FBF09CF6E392DEC17A CEAF67F8E08AF5DF7DF5E88CF5EB92F1E990F0E994F0E896EBE393EDE395E9DF90E9DD8EF2E594 EFDF8FE4D889DBD285DCD482F2EFA08E863DDBD388FFFABB847C4A746D37C1BB86474211F8F3B7 F7F6C5625F3D020000080600BCBB88C8C886A3A25FD4CF952D2500A79C6AF8F1B2EBE596F0EA8D E2DC84EFE89FEEE4B242380B9E9660F8F6A8E7E88AE6E889F1F1A5DAD7AC3A2F23403121C3B791 FFFFC4EDE995F1F093DFDE83D6D482D7D38AE7E39AD8D587B7B861CECA7DDAD293FAF3B5DDD598 524D2B48420AA9A46EEEEAADE8E5A2D9D790C2C077B9B96CDFDB8DE3DC8DE6E08FE0DB8AD3CE7C CFCB79CAC775E4E091EAE599E5E097E4DF98EAE69DDED789E7E090ECE697E1DA8AEAE393ECE595 ECE595E4DF8CECE794E6E18CE4DE89E3E18BDADA88DCDC8DD0CF84CBCA81DFDD93DAD88CE0DF8F DBD986DEDA89E3DF8ED1C97EE5D38BE8CF88E9D48DF2E39BE5DB91CFCA7FE4E196EEEEA2E8E69A EEEB9FF0EA9EE0DA8CDFD681F0E492EADE91E0D38DEBE199EDE69CE9E192F0E193F8DE95FACE8D BE824C7F3D077E4202965513DEA161D89456B17130FFD58FE9C67BD5C273CDC475D6CF84C0BA75 ABA162DBD392E2E794D9DC82F4E895EECD838D661CD8BA70DBD288CACD84DEDF94E7E08EDDD685 E9E395DAD88BE4DA91F3D796FDDCA2FEEAB2FFDFA6E7BC81C586509B4113A13A0EC87842FACA90 FFDEA0FFE7A6F3DD99DACD86DBD78CD5DD8FC8D586B7C27AC9CD8CE4E3A1E8E39FEEE8A4EAE19F F0E4A3F1E1A1F6E5A5ECDF9CDFD68FE3DF94E6E79AE7EB9BE6E599EEE99FF6F1A7F3EDA1EEE99C E9E497F0EAA0F4EEA6F8F2AEF7F0AFF5EEB1FDF6B8FEF7B8EEE8A7EEE8A7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAF1 F3F3DAE5E5B1EFEFCFFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FEFEE4F0EDBDE6E0A5F6EFD6FEFAF4FFFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F7E1E1E6 AFAFE36969F66161F97C7CFBD7D7FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEAEAFE8F8FFB7778FB8E8EFAB6B6ECDBDBE3F3F3F1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FEC6C6F19191E0ADADDEBDBDE47A7AF95054F73C4BEA 668DD775BDA858C06743B94153B95387D288B5E1C1A7B8E9B8BDFAD9DAFFF2F2FFFDFDFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3F5E3B6E4B6AEE3AECFF1CFEBFAEBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7C9C9C9 AAAAAAD5D5D5E7E7E6E4E4ECB7B7F68C8CFE8686FFA2A2FBE4E4F4F9F9F9FBFBFFF2F2FF9C9CFF 3F3FFF6D6DFFE4E4FFFCFCFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFECECFFDFDFFFE4E4FFF5F5FF FFFFFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDC81E9DA7FE7D87C E8D87FEBDB83E8D880E9D981F0E089E6D681DACA75E0D174E3D771E3D486F2E69EECE19885784D 463D0EDAD779A69F52DFD882E1DB7CF4E99CE7DD9D342B028F8646E7DD97DCD483E5DC82DCD175 DFD476E5D77DE9D984E9D889E6D688EBDF8DEAE08BF1E792EDE291ECE18FFEF6A4F6EB99FCF1A0 FBF0A0F6EB9BF4E999F5EA98FCF29AF6EC93F7ED94F1E78EE9DF85E9E084F2E98CE5DC7FEAE183 F4EB8CEEE586E6DD82EFE590F2E891EDE48AEAE184EEE588E5DC7FE1D87BF0E78DF0E690F1E695 F7ED9DEFE996EFED96918D32BDB765FBF2AAF1E5A4D4CC84E4DF91858436050300131101080503 4F4E1BF1F1BFB2AF8D0B070089884FE0E19BEEEEADD1CDA33A331A3D361CCBC79A414000AAA85D AAA2704A4210EDEBA0DEDC6CE6E476E7DD88E9DA96ECDC96F2E198F0DE9DE8DCA0E5E0A0E8E594 EAE49DE3DC97E4DE88ECE68BDED685F0E39FDED480E6D986EBDD9FDFD2A934290D6F6636F9F2AB E1DC8CE5E08CE3DA88F2E694EAD987F7E490F9E28BD1BD64F4EB92F2E48CECD57FFFEB95FFE28D D5A853B78D3BFEE290FEE794FCEB98E6DC8CE5DF8EE4DA8AFCE49FFDE497FAE895EAE8A3A8A383 251203492509BA933DA58423E9D684FFF397EDE28FF3EEB86F6B41040100706628FFF29FEFD080 D9B76FEED28CF6E694EDE789EEE68CF0E98FEAE389E8E187EDE48CECE28BF0E490F6EA97F2E594 FAEA9CF5E597F6E798FBEF9DFFFBABE7DD90A89E557D742FFFFEBED6D0944E490FC7C28B4F4C15 A6A36EFFFFC8AEAE7A0501000200008D8C6CE2E5AE8689452A2900908A5AFEFECCF2E9A2E2DC82 EEEC99EBE99FFCF8B9342F00948E59ECE8AAE2E094EFEF99F7F6A6C6C2872E25085E5139E6D7B1 F4E8B4F6EDAAF8F2A1EDEC92DFDF85EBEB96E2E393E9EA9DCCCC81C3C677EFECAAFFFFCCA89D67 372F007E7636E8E39CF3EFA6EBE599E8E294EDE799DED88AD0CA7CDED789EEE799EBE596EDE896 E8E391DEDC87BDBC69D0D07DDCDE8DDFE093D8DB8FCCCE82D4CE7DEDE695F7F09FEDE695DBD582 EDE793E0DA86DBD57FE2DC86E1DB83E7E189E1DC83E1DC86EFEA99E0DB90CCC87FD8D48AD5D382 D3D17BD6D27BE2DC87E7E090E0D68CD5C67EDECD85EADA94EDDF99E9E29AE1D993E4E097EAE69C E1DE91F1EB9DF6F1A0EDE694F2E392F7E695ECDF8DEADF8FF2E99BEFE799FFFAB0F2E49BE4D38B F7E29BFDE6A0EECA86C6874990450A8734009A4008BF6932E8A66DFFD79BF8D294DDC888D2C587 C1B77ABAAB6DD8C886EDEB9DDBD781E1D27BECC876A3782DE4C27AE7D98FE8E598E8E495E2D285 F3DF96F0E398DCDD92F6EFABFFEAB4FFC198EA9B75A65C33723301914916B15322B35524FFE0A5 FFEDAEF0D795FEEBA5F0E199DCD086E3DE92E3E196D2D58CC5CA83D5DA98EEF2B1EDEBB0EEEAAD EFE5ABEBDCA1FFF2B6F7E4A8E5D595E6DD95F0EBA0E7E898E1E493F0EDA2F7F0A8F0EA9EEEE997 F0EB96E7E38CF0EB97F3EE9DFDF8AAFFF8B2F8F0B0FAF2B3FAF5B5F1ECAAEAE5A3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF2 EDEDC8E6E7B4F4F4DEFBFBF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF7FBEDD3F9DDB3FDDEBBFFEBD7 FFF9F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F7 E1E1E6AFAFE36B6BF67777FB9FA0FDE2E3FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0FFB0B1FD8485FC7474F89C9CEAD9D9E3F3F3F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F9ACACC249497934346F39398B4A49E5546DD9 6899B8AFD0D4D5E8E3C2DDC79ACA9A6CB96C55AF554CA35F5683BC96A9ECE3E6FEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F6F2D7E3D7B7D0B7AECDAED9E8D9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC E3E3E3C2C2C2989898989896A1A1AB8A8AD98686FCABABFFC7C7EEC6C6CEE2E2E2FCFCFDFFFFFF BABAFF6464FF7171FFC4C4FFEBEBFEF8F8F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDADAFFB5B5FFC4C4FFE1E1FF F6F6FFFFFFFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DA7EE4D57A DACB70DBCB72E5D57DC0B058D9C972E3D37CE3D37CE3D37CE3D578E7DB75E4D486DFD48AE5DB92 B5A9785D5411DBD87BBBB465DDD77FE4DE7FE1D688E4DA9A3A31026B6125E2D990D4CC7AE3DA80 EADF84E2D779E5D77DE8D882E0CF7FE7D689E6DA86E1D780E6DC85E8DE89E9DF89F7EC97F0E691 F6EB97F6EC98F2E794F1E794F4EA95EEE48CF0E68DF8EE95F4EA91EDE489EDE488EFE689EEE588 EDE486EAE182EAE182E8DE84E9DF8BF3E992E9DF85DFD679E9E084ECE386E7DE81F3E98FF0E68E F0E690F4EB95E2DD81FBFAA5C1BC6B746B1FCFC679E8E091DAD285E3DF994240175A5734BFBEB0 05050677773EFBFAC32A270D2D2A0F5A5920EEF0A8ECEAA94D48281009000802002C280265632B EAE6A6352D02827A47F8F3ACECE88CE5DF82EBE38DECE091E5D987ECE18CEBDC8CE8DC9BE6DF9D E8E489E8E38CE4DE8AE8E386EFE794E9DE9DC5B9825E5616D9D075F6ED9DBEB583140D00B1AB6F FEF6ACE1D987E4DA85EBDD88E5D481F5E390ECD881DDC96EF0DE82F1E48CE3D47DF6E28BFEEE96 F7DD87EBC772BD9B47D2B15FFDE290F9E493ECDA8CF3E998ECE392F8E097F6DB8CF9E795E8E5A3 625D3C1204004D2D05936E1BE4C868F5DF8EE3D37AEDE18EEFE7A8BBB683110C004C4110E1CA83 DFC278F1D289FFEDA1EEDE8CECE58CE7E088EFE890ECE58DE7E089E9E08BE9DF8AEFE28EF4E895 E4D785EFE08EF3E493F1E391DCD07DCBBE6ED2C779E6DC939B924CBDB674F9F2B6B9B47B65622B D0CE9954521CE0E2A0FBFCC1312D1401000043402ED2D3A32225065E6027F0F1AEE9E1A2E1D894 ECE497F1EAA3D6D39B433C068B873DFBFAA7F2EF9DF6F2AEF6EEBCA69C77160B00847E49F4F0A0 F8F1A3DCD48CE2D995E8E09DDDD990DAD787EDED96F4F49DDADA8BF4F3B2F5F2BEC9C2915D541E 49411ABDB675F9F3AEF6F0A6EBE599E2DC8DF0EB9BF0EA9CE7E193D9D385D8D286F5F0A2E8E394 EDE897EAE895ECEA95DFDE8BCAC976C1C06FCAC87ACFCF83C9C77AD8D1839A9343B0A958EFE897 E9E38FEBE591E9E38FE6E08AE0DA84DED882E5DF89DFD880F2E791F5EC9AEFE59AE3DA92DAD389 D6CF81D7D27CD9D27CE4DC87DCD382DBCF84B6B96AA8B561B9C573BCC777B5BE70CACD82E1E096 F3ECA3F3E59CF3DF95EFD58BF9E094F7EB9AF5F09CE9E490E3E28FE7E794E1E18EDDDD8CDEDA8B EFEA9AEEE698E3D98CEDDB91FCDE98E0B472C18647A6581F903E068D3B03A3561EC07D45D2945E E5AA76FEC997FFD6A2FED699FFEDA5FEE99CFEE094F3C480B57939F7C686F4DB98F0D991FCE099 FFD794FBD699E5BE81CFB173B8935BAD714392401B963F199F5828B78449E4BF7BDDA862C18E47 F7F2A5E2EA9ADAE08FE5E998E7E897F8F3A5EAE397F2E8A0F4E5A2F5E3A5FFEDB2F6EAAFA39E61 BFB97DFFF6B9E4DA9CF4E7A9F6EBACEBE19FE7E09BE7E29AE7E49BF2F2A7F8F5ACF1EAA2E2DC91 E5E08FEEE996E5E18BEAE591F0EB9AFAF4A8FCF5AEF5EDADF2EAAAF5F1A6F0EE9DEEEC9CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFB FCFAE6F2E9BFEEE3B5FBF9EFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF4E9FDE9CFF4DEB1 F5E7C4FCF8EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F7E1E1E6AFAFE36D6DF67D7EFBAAABFDE6E6FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FFBABBFD8889FC6B6CF78D8DE2CCCCD6EEEEEC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F79D9DAD2424480808321515505453C1 6780B274A486A9C2A1C8CBBAC0C2B0A6B6957EA76F558D5634724E29607C5B889CA3C1B4D1DECE DFE1E0E1E1E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DBDBDBCDCECDABBAAB93B093BAC9BAE2E1E2 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 DFDFDFD4D4D4BBBBBB82828272727173737B7676B98A8AE8B2B2E7CFCFDCD5D5D8EAEAEAFEFEFE FFFFFFCDCDFF8484FF7575FFA4A4FFD9D9FEF9F9F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4C4FF8B8BFFAFAFFF DFDFFFF7F7FFFFFFFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEADB7E E9DA7EE4D67BE3D379E3D47ACCBC64E4D47CE0D078DFCF78E2D27CE0D174E6DA74E6D784DED387 E0D58BBDB17B4F4703DAD77BC1BA6AC8C26BE4DE7EE3D985E9DF9C4B4209473D18E2D98FDBD381 DCD279E2D77BD9CF70E3D57BEDDD86E5D383EEDE8FEDE18BE9DF86EDE38BEFE58DEEE48DF2E88F EFE58FF9EF97FDF39DF9EF99F7ED97F8ED97F4EA92F4EA90FAF097F8EE96F0E78CECE388ECE386 F6ED90F1E88AE1D879EAE182F2E990EBE08EEEE390E5DB85E3D980EEE589F3EA8DEDE485F3EA8C EEE488EDE389EFE58CF5EF8FDAD37AFAF1A6C0B46B9F9543E1DB80DED786D3CE9429230CC2BEAF 6262523A3D1EC2C2824B491C3D3A15D2CF9D525118A5A65DE6E4A33A360B00000005000056522B E0DCAA7972484F481ADAD49CE4DEA1FFF8B5EFE79EEAE490E0D87DE0D87BE9E080EBE081E7DC92 DED68FDFD976DFD978DCD679E2DD7ED8D085F9EDBB7365492A2200DBD676F9F59A817E4129260B E2DF9AEEE597EDE18BEDDD87EDD883FAE390E4CC78D7C369EBD779F4E184EFDE88EBD881FBE790 DAC46CD4BB63FFE992F3DE89DABF6BD2B564F8DD8FFDEA9DE8D786E4DB87F4DC8DF9DE8CF9E999 CAC7893C3919170A007F6130EBD080FFEB90F0DF90EADA84E5D680E7DE94E8E3A5474018281A00 87713BE3C889F9DE93F4E08EF2E58FE9E18DE1D986EBE390EBE38DE8E08DEBE08EE9DF8CF2E692 EEE28FDED27FF0E08DEEDF8DE7D884D3C571D8CA77C4B8689C9346E8E0987A722FECE5A7E7E2A9 5856209F9F6B7E7E4E8B8E4EFFFFC16E69510300001F19173434222A2D00C7CB74EEEE9BFEF8AF E6DE9AF9F6BADED3A7393200B5B264F8F6A0E1E186EAE895ECE6AE71654B2B1F08B2AB77F0ED9B D2D271E0DE7AE6E289E7E096DFD797DBD695DFDA93DEDC8DE7E596FFFFB9EAE5AF6F69452E2704 9E9759E9E29EF1EBA3F1EA9FE6E093EBE595DBD684EBE694EAE594ECE796E5DF92D3CE84EAE89C E3E192E9E795EAE996EFED9AE2E08BDEDC88D5D381CFCB7BCCC97BD0CB7DE5DF8FC2BB6BDDD686 F9F2A1EAE392C3BC6AD0CA76E9E38EE2DC88D6D07AE6E08AE8DF87F9E891FAEA9AE7D88EF0E49D E5D992D7CE81DBD380E2D882EDE28CE0D281DDCF82D5D583C4CE79C3CD7AC0C978BBC374CBD385 E6E89DE7E69AE5DE94FBF1A4F9EC9EEDDF90F2E697F2EB99EBE392EAE493EFE998E5E08FE9E391 E9E090EBE191EFE194F5E699FFECA0FFEEA3FFEDA7FFE8A7EEAB70A8541BB85F28A44C16AA551F A24F1A994413A64E21A54E20AC5C2BAB6C34C2884EC2814AC26F40A74B1FCF7E50C68956BD804A C07E47AC5A29B75D3596471F79411031090055240CD9A678EFC694F8D597F3CE89FFDF94DB9F54 D79A4FF3E395D2CE7EE0DB8BE6E291DBD887E3DF8EEBE89AEEEA9FF1ECA6EDE8A6E6E1A2E1DA9B E6DD9EEFE6A9F3ECADFEF9B9F5EFB0E7E3A0E1DE9CE9E6A2E8E5A0E4E29CEBE8A3F4EFA8F6EFA6 F0EA9FF0EA9CF7F2A1F4EF9CF6F19EF7F2A2F8F2A8F9F2ACFAF2B2FAF2B3FCF6B8FAF5B5FBF6B6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FEFFEEFCF8D6FBE9C4FCE5C7FFFAF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFCF8EC EAE5B3EBE8BAF9F6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F7E1E1E6ADADE36868F77E7EFCAFB0FEE7E8FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FFBCBCFD898AFC6A6AF78686DCC2C2CC E9E9E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F69C9CA925253E0E0E1F242433 706F9F798B917295678B9C739F9F869F9C869999818C93796C757148596623554A2F704956955A 8FB088BABDB3C3C2BEC4C4C2C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3BEBFBE9FAF9F82A282A2B2A2 C4C4C4C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C4C4C4C3C3C3BCBCBCACACAC8181816B6B6A6464697B7BA69B9BD5B5B5CFD1D1D1F0F0F1FBFBFB FFFFFFFFFFFFDBDBFFA1A1FF7777FF8484FFC7C7FEF9F9F6DFDFDFEAEAEAFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFB0B0FF6868FF 9E9EFFE0E0FFF8F8FFFFFFFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DECF72E0D174E7D87DE7D87DE1D277E8D780F0E088E9D981E6D67FEBDB85EBDC7FE3D673E6D882 E6DC8BDCD385BEB4763C3400C7C36DD3CC7BCBC56CE7E181E7DE85EDE59E7E753942380FD0C77D D1C978E0D77EE6DB7FE3D87AEDDF85F3E38CEFDF8AF2E28FF7EB95F1E88EEBE187EAE087F0E68D F8EF94ECE288F4EB91F8EF94F5ED91F3EA8FF5EC91F1E78EE7DD84EFE58CF6EC93F2E98EEFE68A EAE184E1D87BEBE284EDE485E9E081EBE289EBE090EADF8CE7DD89EBE188F3E990F2E98DE9E081 EDE485EAE182ECE384F0E88AE9DE82EADE87E5D88BF5EA9A877E24D0CA6AE0DA8D938B6331281D 57544B1919016C704040400A2D2C03D4D197F2F0B5706E2D909048EBE9A8DAD7A17671490E0900 C5C190F5F4CD3D3427A9A46CFCF8B7F8F1B9AEA377D9CF99F6EFA2DCD676DAD370EAE281DFD671 E2D786E0D68BE0DB73E0DA7ADCD57CE0DB84E7DD9DD7CBA22A1C15766E2EE9E98CEEEF934B4C08 686829F1EDA4E0D481F8E58FF4DD86FCDF8CEDD17EDEC46FECD57BF8E684EDDA7BF1DB84FFEB96 E9D57ECDBB64E0D078F9E991F9EA92FFEE9AC1A454D1B063FCD78DF2DB8AEBE087F6DB87F7DC89 F7E497B0AC742321050C0300C0A770FFE799F4DB85EFE295FAEA96EBDA82ECDF89F0E79E8F8554 12010076603AF1DEA6F3E094E3D37AFAED98DDD485E4DB8CE8E08FE8E08DEAE291ECE18FE7DC8A E8DC88E9DD89EFE28CFDEE99E9DA85D8C873E1D27CFFEF9CEFE18FA3974890873CB8B16A7C7737 F4F3B8D0D098515321BDBF8D545714DDDF9FBAB59E150D120C07073938207A7C3BC3C770EEF094 DDD788F6EFABEADFA8463A119D975CF8F69FE8E78BF7F5A2E4DF9C605831251B00CEC599FBF6AE E0DE8AEDEC8FE6E47FE4E182E0DC86E9E399E2DD9AD3CE8EEFEAAAFCFBC4BBB57E2F2809504B21 DED69FEFE89FE9E398DFD98CE8E392EFEA98E5E08EE5E08EE7E18FE8E392F2EC9CF1EB9ED8D68B CFCD83D8D68AE0DF8FE5E391E7E592DDDB86E9E592E3DE8CD0CA7AD1CA7BE8E193E8E191F1EA9A F5EE9EE8E190EEE796D7D07FCBC571E8E28EE9E38FD7D17BE3DD87E6DA83F2E188FFF19FE2D388 E3D692E7DD98ECE499ECE695EFE792F6EB97EEDF8EEADA8CD0C676D5D17FC8C574BFBE70E2E395 DBDE91D8DC90EAECA0DEE092DDDC8FE4E394ECEA99EEEA99EEE797E6DE8DEBE392FBED9EFAE89A FDE599FFE69CFDD58FF4C883E9B673CEA45FBEA25C946F2C9E6827AA6328B05E24A85219AC561D 93420892410992410A9C4814943D0E8F3C107634069055277937107C290A9A43228D3E196E2E03 7E42129C5528AE5731A3472D9E5035925A33220100290B00B08D5BE9C68EEFCD8BE5BF77E7B267 C87B32F9AF65FFE193F2E090FAE89BECDA8CE6D788E8DD8DE3DC8FE5E096EBE69EEBE9A3E2E09D E4DE9FFFF5B8EBE0A2E9E2A1EAE6A3D7D693EDEEAAE8EAA5EDEEAAEAE7A6EAE5A5EEE7AAF2EAA8 FCF5AFFFF9B0FBF5AAFCF6A8FCF6A6FCF7A6F9F3A6F1EAA1F1EAA4FAF3B0FCF4B5FAF4B7FAF4B9 F9F3B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFDF4F6D9EEECBCF7EECEFFF3E9FFFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFEF8F3F5CEF5EEC3FDECD2FFF3EAFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F7E1E1E7A2A2E54D4DF87D7DFDC7C8FFEFF0FFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FFBABAFD8889FC6E6EF89999ED DDDDE7F6F6F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFCC8C9C882847B6D6D5D 69696076759F69789E5F7C908392A6A09CBAA494BE9C8DBE928DBF9688B59687A18594715C9544 3D9329699F41B1B77AD1D0AEE1E1D4DFDFDFDFDFE0DEDEDEDEDEDEDFDFDFDBDDDBB6CFB692C192 B7CFB7DFDEDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDFDFDFD9D9D9B9B9B99B9B9B9595959E9E9EAEAEB0C2C2D3D2D2E8DCDCE5E9E9E8FDFDFC FFFFFFFFFFFFFFFFFFE4E4FFB2B2FF7171FF6363FFB6B6FEF6F6F2CDCDCDDEDEDEFAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF3F3FF9393FF 3F3FFF9595FFEBEBFFFEFEFFFEFEFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD5C668D4C569DDCE71E7D87DE9DA7FE4D579E5D57CE5D57DE5D57DE7D77FECDD81E7DA79 E3D57CE6DC87DBD180D9D189463F00AAA556E4DD8CD0CA71DBD576E4DB7EEAE295A39B5C473E0B C7BE73D3CB7AE6DD84EADF84EBE084ECDF83EBDB83EEDD88ECDC88EDE289EFE68BEEE58AECE388 F0E78BF5EC8FF0E78BF3EA8EF1E88AEEE587F2E98BF8EF92F2E98FDDD37AE5DB82F7ED94F6ED93 F0E78CE8DF81DED578ECE385EFE687EBE283E7DE86E2D786EBE08EEAE18BEBE189F3E98FF3EA8E E7DE7FE9E080E5DD7AE9E17EEBE280EDDF88F1E191DCCE7AE3D87B9E96369C963DFFFAB94F492C 0800000200000D0F050F120047461DD4D085ECE8A4D3CF8DC2BE799F9C56F1F1AFEFEDB35A562C 646038F9F8CA9D9974130E024C4C16F2F2A569643E170C00443919CFC980F2ED8EDAD576EBE589 E3DC7AE8DE89EADE8DEBE380E9E08FEAE09BE9E09BEFE6ADBDB28B201500B0AB6CEEED9CD5D686 3235009EA057EEEA98E1D47DF6E088F5D881E8C571DCB967F4D37EF8DF84EBD674F1DB7BF5DB87 ECD27EDBC872E9DA83F2E88FECE48AF0E48CFDEA96F2DB8AD2AE62CA9F58F6DA8AF8E88FF9DE85 F6DA87F2DD969C97670B0B00363008FAE7ADFFE59BF8E493F4EC9FF4E392FBEA90F5E988F0E390 D0C288200E03402C16CFBD8BEFE194DACE74EDE28FEFE39AF3EB9EEFE698EBE292F1E899F0E696 E6DB8AECE08DE9DD88F4E791F7E992DFD179E0D27AF8EA94F5E690F4E693E7DB8B8D8438B6B067 9A95537D7B3EF9F8C3A3A572696B3B787A416A6A34EEEAD0332D260D080585846793945CC3C678 E3E48DF8F5A5DBD6954D4206A29957FDF6B4E9E19EF6F4A3D9D08F312510473C22DED98FFAF69C F0EA9FE3DC939A9448656329BAB861EEEE91EBEA90DEDA8DE2DD9FD3CA9B675D3A3A320EB0AB79 F7F3B6EBE69DE6DF8EEBE492EBE490EDE791E7E089E3DD86EDE792DED884E5DE8DECE596E7E093 E9E79BB5B66BCFD184D8D787E3E28FE6E491EBE692EAE491E4DD8CD0C879D3C97BEDE497DBD386 DFD888D1CA7AE3DC8CE6DF8EF5EE9DE7E08FE7E18DF2EC98EAE490E7E18EE4D981EFDF85EEE08D EADE95E5DD9ADED896F3EEA8EBE798E8E390E9E18DF1E694F4E596EEDD8EE9D88AE2D587E5D98E E0D98FD0CB83D7D48BE0DE95B7B76DB3B267D5D387E4E195EBE89DEDE89CE4DA8EDFCD81D5BB71 C49D55C18F48BC7D3AB16729AF5A21B45821AA5E24997232A67A3ABE8547CC884DB1662ACF894A DEA05DD29751E9B56EF1C37CEDC17DDAAB6FD7AE7BE0C8989E8D5E1D07013712045D3314C4A278 CFBD8B6B5A2853371B7044217F5636B49478A78F6D200C001A0100654625835B2980521AB07939 B36F2B9E4E07C67830E2BC6EEED88BFDE89CFCDE93FDEAA0FBE197F1D993EFDA95F3E09BF9E7A5 FAE9A8FAE7A9F1DFA0EEDE9EEFE5A2E9E5A0EDEEA7F5F8B2EFF3AEF0F1AFECE9AAEEE6AAEEE4AA E4DC9DEDE6A0F5EEA8F7F0A8FCF6ABFCF6AAF8F2A5F4EEA4E9E29AEAE39EF5EEABF5EDACF8F4AD F6F1AAF3EEA7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA EEEEEEDCDCDCCDCDCDCECECED9D9D9F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF7F7F7E7E7E7D7D7D7D2D2D2F4F4F4FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF8F8F8E6E6E6CECECEC9C9C9C9C9C9C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9 D3D3D3EBEBEBF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 DEDEDED4D4D4CECECECACACACBCBCBD3D3D3E3E3E3F3F3F3FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFBFEF7EEF1E9C5EAE3AFF5F1D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFBFEFFEAFBF3D1F9E4BDFAEBD3FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F5DADAE19393DF3838F97C7CFEDADAFFF6F6FFFEFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4FFC5C6FE8B8CFD6465FA 9595F3E4E4F0FAFAF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7EEEEEE E5E5E5DCDCDCD3D3D3CCCCCCCACACACECECED3D3D3D9D9D9E9E9E9F9F9F9FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF4F4F4E4E4E4D5D5D5D6D6D6F8F8F8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFBFBFBEDEDEDDEDEDED4D4D4CFCFCFCBCBCBC8C8C8C9C9C9D0D0D0DADADAE3E3E3 F0F0F0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 E4E4E4D8D8D8D0D0D0CACACACBCBCBD1D1D1E1E1E1F2F2F2FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFDF4F8F7E9EBE7D3D8D2B8 C7C4AAB3B3A89696BF778AB9668AB393A6D8B8B3F5BCA9F9B4A2F9AEA9F7C4B5EADBC4D6DED7B8 A6C16B68A02182A830C5CA75E5E4ABF5F5D2F4F4E0F8F8F0FCFCFCFCFCFDFDFDFEF7FAF8CDECCD A4DEA4CEEDCEFDFCFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFDFDFDF5F5F5CECECEAEAEAEBBBBBBD6D6D6F0F0F1FAFAFCFAFAFDFCFCFDFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFEFEFFFC7C7FF7171FF4848FFA8A8FEF8F8F3D1D1D1E1E1E1FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF4F4FFD2D2FF 7C7CFF3B3BFF9F9FFFF5F5FFFFFFFFFEFEFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCDBE5FD3C465EBDC7DDBCC6FEEDF82E3D479DBCC71DBCC71E5D57DEADA82E7D87C E1D375E7D97EECE289E3DA88F0E89958520E9F9951DAD382DAD47CD9D277DCD473E2DA8BA9A160 443B07D7CE82DED685E6DC85DCD177DFD478E3D679EADA82F2E28BE8D982E7DC83F7ED93F6ED92 EEE58AF4EB8FF6ED90E9E081F1E889F9F18FF2EA88EFE785FAF193F9EF95F1E78EF4EA91F6EC93 F6ED92F6ED92E5DC7FE4DB7EECE385F0E788EEE586F0E68CF5EB96EFE590F7ED97F5EB94DED47A E3DA7EEBE283F1E888EDE582E4DC77EEE583FFF0A2E0CE82F0E385E6DC76DED677A29A4FD8CD9D 160F002A250C54512A3B3B1092935CDAD790E3DE91DBD88AE9E59AE8E49D8B8843C0BD7C7A7835 121002E4E4AFC5C2942B270C3E3B1A484A04DBDE8B232108080000140A00A49E5EECE792E1DB88 E8DF92F2EC98F1E794E7DD88E7E089F0E3AD90825CB5A97CEBE1B0877F57281F08E7E3A4EEEDA9 A09D621E2000D1D181E3DE88DFCF74F6DE82EFD076D2AE58FFDD8CF2CD79FEDE83EFD673FAE07F E3C36EB19643F7E48EFAF09AF0EA91E3DF86EBE48FF9EA97FDE697FFE69AD3A65EBD9C4DF5E187 FCDC81F9D785FFF0B06C633D000000615D2FFFEEAFFAE299F9E79AF0E99DF6E596F2DB81FBEF8A EADA81CFBB7F5C49291403007F7243E2D991E6DF8ACCC173CABD78E3DA91ECE396F6EDA0FAF1A2 FFF6A6EEE393EEE28FF3E793FBEE98E6D782E4D580F1E28DF9E894F6E592F2E491F8EC9CE5DC8D 969045DAD6918F8E4E9C9C63F3F6C16163337C7B4F4C4A2197937222200D01000044432DABAB7D BFBE81EFEEA4F6F1A461590FAAA259F2ED93F3EE9BFBF2B6CEC1A1231701776F38F6F2A1EFEA97 F9F4A1EBE693E6DF947E76370C080099974FF8F7A3F3F19CEDE99FA39D62241C00746B43ECE5B5 B9B476D0CD7EF2EE9AEBE690E9E38DE9E38BECE68CECE78CE8E388E8E28AE0DA85DDD685E8E190 F1EA9BEFECA1D2D387D4D286E5E293E8E593DFDA88E3DD89E5DE8BE8E08FEDE293CEC277D6CC81 E4DC8EE0D98BD7D082EAE394E6DF8FE2DB8BF2EB99E4DD8CE6DF8EECE692EDE793ECE48BEEE687 E7E08CE8E49ADAD897EFEFB0BBBD78EFF0A6D7D786E0DB87F2EA97E7DA89E9E18ECFC976E7E190 E5DF92DDD78DDED68FF3E5A3AF9E5D9B8546C0A567F7DA9DBD975BC38653B975439E5D2792561C A069298B5914A4752DB89045D2AD62E5C279F4D48BFAE097D8BB79F5CE8EECBC7BF4B97AA66A28 D8A45DFCD387CDAD5EE0CA77F0E18CEFE18FA292521C1105C5CB9CD9E4BC131800251B0B2B1E0B 3E3A125C67350A13000204000A00000B04003D3B1F9D9A7A6B65440A00008C7A54EDD2A2D9AD77 F0BC83D68C50A45111C46F2CB062219C5313AD6927B87B3BDFAC6BFFDB99FFE5A1FFE8A4F8E9A2 F6EEA7F3EEA5F0E4A0F9E2A1F7E3A2EDDE99F5EDA5F4F1A8F4F3AAEFF0AAF1EEACE5E0A1E8DFA4 FAEEB7F6EDB1F7EFADFBF3B1F3ECA6EAE39BF4EEA4F5EFA6F5EEA6EFE8A1F7F0ACFFFCB8F5EEA8 EBE79DF0ECA1F6F2A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EAEAEABEBEBE8585855656565A5A5A7F7F7FDFDFDFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCE4E4E4B0B0B07A7A7A6A6A6AD8D8D8FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFAE7E7E7ACACAC5959594B4B4B4E4E4E5050505050505050505050504F4F4F 535353737373BEBEBEE6E6E6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFA C9C9C98F8F8F7474746363635656565555556A6A6A9B9B9BCFCFCFF2F2F2FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFF7EEFEE9D2F9DFB8F6E1BAFBF2E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFFBF8F4D9EDE4B3F1EAC5FDFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF4F4F1CFCFD68585D43333F77C7CFEDEDEFFF7F7FFFEFEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFDDDEFF9394FE 4E4EFA7272E5CBCBD8EFEFEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE1E1E1 C1C1C1A3A3A38686866C6C6C5959595555555F5F5F6D6D6D7D7D7DACACACDEDEDEF5F5F5FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDBDBDBA4A4A4727272777777E6E6E6FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFBEEEEEEC2C2C28E8E8E7171716565655757574E4E4E4F4F4F656565818181 9C9C9CC2C2C2EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8 DBDBDBA0A0A07F7F7F666666555555565656666666939393C9C9C9ECECECFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFFFFEEF8F7D7ECEBC0EDE2C0 F5E1D2F0E6DBE7E7E2D9D8E8AFC9C98BBEADADC8D7CECDFDD3CAFFD6CEFFDFDDFFEBE5FBF6ECF2 F9F6EBD9D18EB5A72CC5BB52E5E4A5E9E9AEE7E7ADE8E8B5F3F3D7FEFEF9FFFFFFFFFFFFFBFEFB D0F0D0A6E2A6D1F1D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE0E0E0E7E7E7F3F3F3FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFE3E3FF7D7DFF3939FF9E9EFFFEFEFAEBEBEBF2F2F2 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFE7E7FF 9F9FFF7070FF6262FFB8B8FFF8F8FFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE4D576D4C666E7D879ECDD7FE2D376EFE084EBDC81E5D67BE3D37BE7D87F EBDB83E5D77CE0D375E2D97FDFD685EFE9956D65208D8645DBD484CBC470DDD67DD5CD6ADFD886 C8C07E4B4200BFB66BE1D988E3D982E7DC82E7DC80E1D477E1D179E8D880E3D57CE0D57CECE289 F0E78CEBE288EFE68CF7EE92F7EE90E9E07FECE482F7EF8DF9F28FFBF293F5EC92F1E78EF3E990 F1E78EEDE489F1E88DF5EC8FE9E083E3DA7DE8DF80EFE688F6ED91F6EC94E3D981E0D67FE9DF88 ECE289ECE288E6DD80E5DC7CE4DC7AE4DC77F6EE89EAD98FFFF1A9E1D674F3EC82F2EB92B6AD6E 1C13004F4629F7F3BEF5F3B6E7E6A7F5F2B6E3DE96D9D483CEC974DCD885E5E197A29F5C413D0D 1A1800BFBD7BE7E5AF2C2904120E06201F06969B50EFF3A2BBBB7F362F11160E00C8C288E5DF95 E1D994FFFEC262581AA1994BF9F5A3E3DA919F906F0A00009A8D6DFBF3C21B140068633ADDDC99 E3E0A655502C4E490BE8E491E3DA82F6E689F1D97CD7B95FDEBA66D7AF5EFDE693F7D077FEE485 FCDC7DD9B762E8CA78FFEC97EADC86E6E08ADFDD86E8E38DFFF4A0EBD484FBD98DF3C97FCCAD5C CDB35BFDE98AFFE797EBCE972217000B09009B9862FFFDB8F1DB90DECD81E2DB8FF4E392FFE68D EFD774CCB65CE3CE8BD0BE942011002C2502BDBA79D8D288E8DD97C1B372A89C53AAA154D9D082 CEC576D2C778FDF2A2EDE18FECE08EE0D380DFD07CF9EA97FAEC9AEFE08FF0E191E5DA88EAE18E F3EC9BD7D184918C44CBC886817F448F8E58D7D6A654512C95917116140073734D40401A262716 92906ADEDCABEBE9A8655E18777036F8EEA1ECE78BE5E28ECDC58F11030082774CF4EEA2F6F295 E6E189E8E293E1DC8BFDF8ADE5DE997C7835C6C281F1EEABEEE9A7868144251F00A6A063FFFFC5 EEE8A5C5C176CFCC7BEAE490EEE892E9E38BE7E187E8E287EBE589E7E287EBE58AECE68FEAE38F EEE695EEE897F3EFA2E8E698E4E192E5E190DFDC89DED987EBE591E4DD8CE2D98AF0E499DED389 E7DD93E4DC91EEE699E9E294E9E294D5CE7EC9C272DBD484DFD887D4CD7BD9D37FE6E08DE9E48A EEEA8CF4F29EDCDE96EEEFB2BEC389393E03CBCE89E7E79AE3DD8CEBDF8EEADC8BF1E694F2E797 DED385D6CB81E1D58EFAE9A8F2DEA1BCA26B5E3F0E7F5A26936A377C4C19722F05974F269C5929 DA9E69FFD395FFDC98FFE99DFFED9CF9EE9AEBE893DADC88D0D380D0CA82C8B772B39652C7A15C 8B621A957225FFE998DACB76D7D078DFDD86EBEB94DED6972A22152C3413E2EED0A3A78F221704 15040466603547502E000A001B1E09A09581817D68464532100C042C2B0E43461F484D1DE0DDA5 FFF0B7FFE3A9F6B477DB8E4FFFD999FFC684F6B777E5AA6AB97D3FA87133946225B18447BA9254 CEAD6CF0D290FFECABFFEEADFFEBACFFEAA7F8E39EFCEBA3F2E89DF1E89FECE39DF1E7A4F1E6A8 F3E8ADF9ECB5F4EBAFF2EAABF6EDAEF7F0ADEFE8A2EBE49EF7F0AAFCF5B0F7F0ABF7F0ACF8F0AC E4DD99EDE8A6F1ECABF7F1B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FEFEFECFCFCF7F7F7F3535350C0C0C131313444444CFCFCFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBD6D6D68A8A8A3F3F3F2B2B2BC7C7C7FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8DBDBDB8585850E0F0E0404041818183232323636363131312F2F2F 2E2E2E323232575757AEAEAEDFDFDFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E9E9E9 C5C5C58D8E8D5858584A4B4A4343433535352525252323235050508F8F8FE2E2E2FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBF2E2F6E1B9F9DEB6FFE9D2FFF6EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7E4EBECBBF0EBC1FEF4E7FFFBF7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F3CECEDC8484DB3434F88282FEE6E6FFFAFAFFFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFECECFF 9898FF4040FB6363E4C7C7D6EEEEEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8 C3C3C38787875E5E5E4545453535352F2F2F3131313838383B3B3B3838386262629A9A9ACFCFCF EDEDEDFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8CACACA7B7B7B3535353D3D3DDADADAFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8DEDEDE9E9E9E5757573B3B3B3939392C2C2C222222232323303030 4242425252527E7E7EBABABAE8E8E8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCEBEBEB C9C9C99B9B9B6565655151514646463636362B2B2B2C2C2C4B4B4B898989D1D1D1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAEFF5F4DCFCF4D3F7EFC4ECE8B8 F0E4C6FEE9E6FFF7F8FFFFFFFFFFFFD4F4D1A5E3A4C4E3D0E5E8FBEAEAFFF1F2FFFFFFFFFFFFFF FFFFFDFFFBF8F5D59BE8B03AF2CE76FBF7D5EFF0C8E4E4AFE5E5B1ECECC4F4F3DBFBF3E4FFF8F0 FCFCF7D0F0D1A5E1A5D0F0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5FF8B8BFF3737FF9191FFEEEEFAEAEAEE F3F3F3FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FF D1D1FF6666FF6868FF9494FFD5D5FFFBFBFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE1D372DBCD6CDDCE6FE3D374EADB7CE4D578EADB80E8D97EDFD075 DFD075E7D77FE9DA85DBCE70DBD278E1D888EDE88F958E44797136DCD489ADA555E5DE89E7E07C E1DA86E9E29C5E550DADA559ECE493DCD27BEAE086E9DD83E0D377DDCE73E5D67BEBDC83E4D881 E5DC85EDE38CEAE088E6DD83F4EB8FFBF296F3EB8BEEE684EDE583F4EC89FEF694F1E88EF3E990 F8EE95F5EB92F1E88DF2E98EECE386EFE689EDE487ECE384E9E081E5DC7FEAE186E9DF85EDE38A EFE48CE9DF86F0E78DECE387E3DA7CE1D877E2DA76EBE27FF1E297F1E198EADF80E2DB7BF9F3A2 443B18584F36DBD39DE6E29BE6E292E4DF94D2CC88DED48DE0D885D8D477D7D379474210171200 39340EC4C283EDECADA9A87034300CCAC7A3C6C799EEF3B4EAEEAAFFFFCE494619393617CEC991 E3DD9EECE7AC837A402D2304DBD38ED6D086E0D998392C1D0C000053472E5952332F2A01C8C484 E1DF97BBB57E150B00C2B979EFE591E3D67DF2E183DDC86AF2D77DF6D581AD8737BF9444F3C773 FAD277ECC266F7D682F3D381F2DA86EBDC89DDD682E6E18DDDD784EEE291F6E394F7DC8FF6D387 FCE497D6B763D2A749F9D589997748291906191500CCC88BFCF0A4F3DD91E2D388E7E293E7D382 FFE58EE9CC71D5B962F1DB91FFF0B7665D2E050400444514F6F2B7F1E4A7F8ECACEBE094DCD383 E7DE8FD4CB7CCDC273D8CD7DE4D787F6E999F5E898F5E595FCEE9FEFE292F2E899FFF5A6F1E997 E6DF8BEFE897EFEA9AE3DF95928F4AC6C2848A864E847F4DDEDAB52320041E1D00767845919266 0E0D007B795BE0DDB166632B6E6825FCF8B0E9DE9BFBF3A89F96592318008E8551F0EDA4EAE39B E7E091E3DE84EEE890ECE39DE2D991E1DB8FD6D490F2EDB4AFA977433C1658512BCEC884F2F1A2 ECEA92E0DC82E6E18EFAF5A9EBE496EEE692ECE48EE9E289E8E186E8E186E9E287EEE78DEFE88F EDE591F3EB98F7EF9FEDE697EDE898EDE897E6E08FE2DD8AECE692EAE392DED787D9D083E6DD94 E7DD96EAE19AB4AC62CEC67BD9D186DED789CCC577C4BD6FD7D080D9D281C6BF6ED9D281EBE493 DFDA82E1E082F0F19EE9EBA5FCFFC7C6CA960E1100C0C185E8E59FD7CB81E9D689F3D98EE8C67E FBDB94FFE19DF9DB9970541E907647957D467F6833230C00422A00957D4986703C826F3BB1A16A B2A266E2D291FCF4ADEDDC8FF0E191EBDE8CEAE18FEAE392E3DD8CD3D686C7D787CDD587E1DB8E D7C478B29A4E937B2CF0DF8EF3E895E4DF8ADEDA87E2DE8DF8F0B7B1A07F0500005B5947FCEDDC CFAE9AA58260FAE0B59994640708003F361EE2D0CCCBBAACFFFFEAD9C9B27F765B28300D627943 DDEFAEEFEAA8FEDC9CD4A161B17734FCE098FDEFA2EDE599F6EBA1FFECA8F9E8A7EAC98CD5A76D C48650AE6B36B6703BC77D48BF8C53DBC485FFEDACFFF5B1FCF3AAFDE69DFCE49AF6DF98F8E5A0 EDDE9DEBDDA1F6EBB0F6EDB0F1E9AAF3EBACFEF6B6FAF2B2ECE4A3EEE7A4F8F1ADF9F2AEF6EFAB F3ECA8E7DF9EF0EAB2F4ECB8F8F1BCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBEEEEEEA6A6A64343431111111E1E1E2525254A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDADADA9797975B5B5B4E4E4ED0D0D0FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8DDDDDD8888881B1B1B2C2D2C636463ABABABB6B6B6A9A9A9 A3A3A3A3A3A3A5A5A5B2B2B2D3D3D3ECECECFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE6E6E6 B7B7B75858584D4E4D6262628D8D8DA6A6A6A2A2A27A7A7A363636202020393939C4C4C4F8F8F8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F3DAE8E3AEEEE9C1FDF9F1FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF2FCFADCFCEEC7FDE5C6FEF2E5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FCDCDCF79393F73737FD8D8DFEF7F7FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFF ECECFF9898FE4444FD7979F9E7E7F6FDFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F5F5A7A7A75858583D3D3D4949496767678B8B8B9D9D9D9191917171713D3D3D2525252C2C2C 848484C9C9C9F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CECECE8A8A8A5353535E5E5EE0E0E0FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6D1D1D19999996666666A6A6A868686888888868686858585 6E6E6E4E4E4E232323303030676767B3B3B3F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEFEFEF BABABA6B6B6B3E3E3E575757808080A6A6A6A8A8A88787875858582828283A3A3AA6A6A6FFFFFF FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF9F0F0CFE6E2A9F5DFB1FDE8CC FCF5E8FCFCF8FFFBFBFFFDFDFFFFFFFFFFFFD2F0D2A7E2A8CDEDD0F4F8F8FBFBFFFCFCFFFFFFFF FFFFFFFFFAF5FFE7D1F1CF85E2BE48ECD88CFCFAEDFDFDF8FBFBF3FAFAF1EEEFCDE5E2AAF5DEB2 FEE8CFF7F4E8CFEFD0A9E3A9D3F1D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4FF9797FF4646FF8080FEC1C1F1 C1C1CDDDDDDEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBFE E6E6FEB2B2FF3333FF6464FFC1C1FFF0F0FFFDFDFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3C564E4D675DED06FD4C666EADB7CE1D275E5D679EFE083 EDDE83E3D478E3D37DEBDB8AE2D579DCD379DFD587E4DF83B1AA61675D29D8D0879D9548D9D081 E1D974DDD77FF3ECA66D651FA1984FF1E997E1D682ECE188ECE086E9DC80E5D679E5D679EBDD82 EBDF89E9DE8AF1E792EEE48FE8DE86F6ED92F1E88CF8EF91F5EC8DEDE683EEE784F5EC8DF3EA90 F7ED94FFF59CFBF098F7EE93F9F095F4EB8EEDE487E4DB7EE8DF80EEE586ECE484ECE482E1D879 E7DE82F1E88DEEE48BEEE48BEAE186E9E082E7DF7DE5DD7ADED674E3D983EADE8FE8DE8DF1E99E 746C36231B00BFB980BBB570D7D37FE7E287E2D982E8DD8EE9DD95D7D07BDBD777ECE78B958F45 6F6932ACA973E9E8A9EBEAA97E7D4A181500E0DDBEFFFFD9E6E6BFDDDEB376763E171702C3C281 E1DEA3FFFFCB9D975E292200BFB882F5EFB6FFFCBE4A46191B10000800001009001E1900C8C47C E9E4A4EAE79B716B393D3015F4E3A1ECDB86F5E48BD7C768DCCA6BFDE88CF5DC88EDCD7FBC9244 D9A656C18933EFBE65FFF29FF7DA88EED581FDEA99EDE18EF5EB9BF6EC9DE0D384978637D8C173 FFEB9CFCE194FAD585F3CF739B6820B68D672813042C2605E9E4A3F6E494F4DE92E8D98EE0DC8A FBEA95F2D37EDDBA68F2CF7DF8DE8CF4E599CECA8C2025000B0F00848053FEF2BFF0E1A1F7EC9E E8E18FDBD282E6DE8DFEF4A3E7DC8CCEC173DCCF81EBDD8FE5D588F3E396FAEDA2F2EAA0FAF2A6 F1EB9BE8E291F3EE9AECE795DDD78AF7F0A9A8A161A59F63C7C08A46422736340DCCCB99707241 2D2E07111000403D20636032737231E9E397E4DF9DFFFCCD96895D1D1300B2AD57FFFFAAE9E38B E2DC8CF3EBA0E9E193E4DE8AE8E28BDFD78FEEE6A8F8F5B6A19E651310008C8555E4E0A4DDDB8F DAD87EEFED89E8E485DCD581FDF6AEE8E095EDE592EFE892F0E991EBE48AE5DE83E9E287F0E98E EDE68DEAE28CF0E893F4EC99F1E996F2EA97EFE995EEE693EFE895F3EB98E9E291E7E092E5DD93 ECE39EF7EFABEEE5A0E8E097E9E196E7DF94ECE499DDD688DAD385DED786E0D989CCC575D8D180 E7E090DCD77FF1ED90E9E697CFCF8DE3E3AFE4E3B7110F00AFA978EFDFA2E8CF8DFEE8A3FFEAA4 FDC485F5B679B67B42A8763B2E07004B2E14BBA672E6DBA75A5627101200595E23B8C0865F632D 373B066E6F33A5A462E5E199DED88AF4EF9CF3EE9CF2ED9BEBE998E6E595DDE594D9EF9DD2E090 EFEDA0F5E599D8BE74866D21F1DE91EFE293D6CE7ED9D282E8E194F0ECB4A3A580000400020801 2420066F5833B79A68F4E5A7DCE29F2231110D130C4D4C4104080361633BF6F2D0FAE3BDD5C497 CAC68BF9F1B2E6D08EFFE8A3C7A25AC4B05DFEFBA5F2E89A8D82398D7E37F3E19FFDE9A9FCE0A1 FFE7ABFFECAEFDE3A6F6CB8CD19F5EA77C3C987839A98747C6A360FAD38DFFE9A1FFEEA6FEE19A FFE29AFFEBA6FFF3B2F9F0B0F5EDAFF6EEB0F7EFB0FBF3B5FCF4B6F7EFB0EFE7A8F5EDACF8F0AF F6EFABF8F1ADF7F0AAFCF8B1F6F2ACEFEBA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF4F4F4BFBFBF7E7E7E4445442526252424242626264A4A4AD1D1D1FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFDFDFDECECECCACACAACACACA6A6A6E7E7E7FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8DDDDDD8787871F1F1F4B4B4B989998D8D8D8E6E6E6 DFDFDFDBDBDBDBDBDBDCDCDCE1E1E1ECECECF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3 BDBDBD7C7C7C383838606160A6A6A6CDCDCDDBDBDBDADADABFBFBF8282823C3C3C1F1F1F969696 D8D8D8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFCFFFFF4F9F3D3F1E3B5F5EBCEFEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFDEEF6EECAF0E2B3F8F1DAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F7D3D3E68A8AE53636FA8F8FFEFBFBFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFFF9F9FFA4A4FF4646FC6B6BEBD2D2E1F4F4F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8C6C6C6959595949494A1A1A1B5B5B5CCCCCCD8D8D8D0D0D0B8B8B88A8A8A434343 1414144F4F4FA0A0A0E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE6E6E6C4C4C4A8A8A8AEAEAEEFEFEF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE7E7E7CBCBCBB1B1B1B7B7B7C8C8C8CBCBCBCACACA CACACABBBBBB9A9A9A424242232323404040929292EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 C2C2C27D7D7D4646464949499B9B9BC3C3C3DBDBDBDEDEDEC6C6C69999994444442525257D7D7D D9D9D9F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFAF0EFEFCEEDEDBFEFEDBCF9EDCE FFF3E5FFFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1F8E1C1EFC1C8ECC8E0F1E0F5FAF5FFFFFF FFFFFFFFFFFEFCF7EFF2D6ADE6C87EE0CB6DEDE4ADFDFCF5FFFFFFFFFFFFFFFFFEF7F7E6F0ECCA FBE1BCEFDBB6D3DBB5C5E1BCD0EECEEAF8EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFAAAAFF6161FF8080FE B1B1F7D2D2E2EBEBECFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F6 E8E8F0C9C9F79797FF3E3EFF7C7CFFDCDCFFFCFCFFFEFEFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCD6CE6D877E5D776E5D777D8C96AE9DA7DE3D476 F1E285F2E387E2D378DECE78E8D78BEFE286DED57CDBD184DDD87CB0A961403609CBC27CB4AB60 D7CE80E4DC77E0DA82F4EDA46F6729807735EAE190E6DB87ECE188EEE388F2E589EADB7EDECF72 E0D375E7DB87EDE291F4E998F5EA98F5EB95FAF097ECE388ECE388EFE688FAF192FAF290EDE485 F5EB91F9EF96FDF39AF6EB93F2E98EF7EE92F8EF92F3EA8DEBE285F0E788EAE182DFD774E5DD79 DFD775E9E081F2E98EEEE48BE2D87FE1D77EE7DE83EAE082EDE583E7DF7DE7DF7CDAD37AFBF4B2 A69D68171005B3AE708C8840C3BF6BC8C268EEE487E3D877E2D77AE5D88EDAD07BE7E27FDFD978 FFFEB3B0A973726B37E8E6A8F8F7B47C7B490603001010003132124947382E2C1D0C0E04A5A85A F9FCAFEEEDAE726B3B302B009E995DFFFEC7E0DCAB58552E232105A099716C643F57531CC9C67B F6F2AADAD495C7C172443D01988B57F8E098EDD381D8C369C3B354ECDE7DF4E588EFD883FFE394 FFD78BD49B4DBA7928C18632DFB965FFEC99F3D887F3DC8DF4E295EFE193EEE294F8EC9EC9BD6D E7D885F5E491F6DC8FFFEFA3CA933AAF7A37A77A581E05003F3511F2EBA4FCEB96EFD88AE9D98E E5E18DF9E58FE2C16FEFCA7DFFEA9BFEE893F3E58CD7D98CA3AB730F1605131000A39769F7E8A8 DDD282E7DF8AF3EB99ECE492EEE494E8DD8DF3E698EBDE91ECDE92D6C67CD2C177D2C67ECECA82 E5E096F3EEA1EEEA98E9E490E4DF8CF1EC9CE0D990EEE6A29B9253A297623F3B0CB2B180ABAB76 C2C2987F7D6316120B020000504F1CEFEF9AE9E491F9F2B7998869130500ADA463F6F09ADED97A ECE786E1DC7DE7E18AECE594E3DC8DEEE796F2E9A4EAE1A785814D312E07ABA96AF7F5B2E2E092 C3C26BEBEA90E9E58CF1EC96F4ED9DE6DD93ECE499E9E090EEE593F0E893EBE48CE5DD83E7DF84 EFE88DF1EA90EDE58DEAE28DE5DC88F6EB96F1E78FE7DD88E6DE88E8E08ADDD582DED786E7E093 E2DB92D8D18EF0E9A9E6DF9DEFE79DE7E094E6DE93F0E89DEAE395EFE89AE2DB8BEBE494E4DD8D D9D281E3DC8BF3ED97EBE48BE7DE93E3DDA0E6E0B3D1CCA5231A088A7A53FFF9C5F9DEA3DDB173 BC8647965A1C925419A56C35D8AC7689632D684C2BFEF9C6F6F3C07978451D24015F6832A4AF7B 696E3E26280272713AA6A265DDD791E4DC90E8DF90EBE291EDE796EBE798E9E598E3E599DCE598 EEEFA3E3D58CFAE49EFFE19AAD8E47EED78DF1E497E5DD91E9E397EAE49BE8E7AE9FA87E000400 081100766D48472A0D89682FFAE599F5F8AB88985A1A2216000000000D001D2A09D4C99AF5DBAB F0DEA7F0E7A5E6DA91EFD78FFBD088A27A2EE2CE78F1ED95E5DF94BFB973C8C17DFDF5B3E8DE9E F7ECAAF3E4A3FBEAA8F9E9A2F8E69BF0DF91EDD68DF2D696CAA7679C702DA3702CC28C44DFA960 F0C37AFFEBA4FFEEA8F8E9A3FFF8B5FAF2B4FAF2B5F7EFB2F6EEB1FBF3B6FAF2B5FEF6B8FCF4B5 F9F1B0F7F0ACF7F0ABFAF3ADF9F4AEF4F0AAEDE9A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9E2E2E2898A896060606262625354532F2F2F2828284A4A4AD1D1D1FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4EBEBEBE5E5E5E1E1E1DFDFDF DEDEDEE1E1E1E4E4E4E9E9E9F0F0F0F7F7F7FCFCFCF9F9F9EDEDEDE2E2E2DEDEDEF6F6F6FEFEFE FFFFFFFFFFFFFCFCFCF4F4F4EAEAEAE0E0E0ECECECF7F7F7EEEEEEE5E5E5DFDFDFDEDEDEE2E2E2 E6E6E6EEEEEEFBFBFBFFFFFFFFFFFFFFFFFFF8F8F8DDDDDD868686222222636363C0C0C0EEEEEE FDFDFDFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E1E1E18F8F8F4646463B3B3B8C8C8CEBEBEBFFFFFFFEFEFEFCFCFCF3F3F3CBCBCB616161171717 686868B4B4B4F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEF9FBFCDFFCF1CBFDE6C5FFEEDDFFFDFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF1EECEE7E2ABF3F1D2 FFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C5C5D57B7BD33333F78F8FFE FBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFAFAFFF4747FB5C5CDFBBBBCEE9E9E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDECECECE1E1E1F3F3F3FAFAFAFCFCFCFDFDFDFDFDFDFCFCFCF5F5F5DBDBDB 7474741616162929297A7A7AD9D9D9FFFFFFFFFFFFFCFCFCF7F7F7EEEEEEE8E8E8E2E2E2DEDEDE DEDEDEE0E0E0E3E3E3E7E7E7EEEEEEF7F7F7FDFDFDFFFFFFFEFEFEF7F7F7EBEBEBE0E0E0E1E1E1 F9F9F9FFFFFFFDFDFDF6F6F6EBEBEBE2E2E2E9E9E9F6F6F6EFEFEFE4E4E4DFDFDFDFDFDFE2E2E2 E7E7E7EFEFEFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFBFBFBFCFCFCFCFCFCFDFDFD FDFDFDFDFDFDFDFDFDE5E5E57070702B2B2B2C2C2C7D7D7DEDEDEDFFFFFFFFFFFFFFFFFFFDFDFD E9E9E98F8F8F4747473E3E3E747474E4E4E4FDFDFDFDFDFDFFFFFFF3F3F3D3D3D36B6B6B212121 5A5A5AAEAEAEEEEEEEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFBFBF4F3F3DAE5E5ABEFEFBDFDFDDE FFFEF4FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FFF2DEFBDEC1E8C1C5E5C5E6F5E6 FEFFFEFFFFFFFFFFFEFAF4E9E5C48BDEC279E1D996F0F1CEFDFDF9FFFFFFFFFFFFFFFFFFFFFFFE FEFBF6FFEBD3DDD4A6AFC385BCD1A3F5F5E9FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFBEBEFF7D7DFF 8080FFA1A1FCE2E2F5F8F8F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA F1F1EED8D8E6A8A8F37A7AFF5D5DFF9E9EFFEFEFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2C564E0D271E0D271ECDD7EE5D677EBDC7C E1D275EBDC7FECDD81E3D479E2D27FDECD81F6EB8EE3DA80E0D68AF0EB8EBCB46C2D2201BBB26D C0B76EC6BC72DED873D6CF77F0E9A1756D35665E21E2DA8BD7CE7BD3C971DCD176EADF80EBDC7E DFD072E7D97BE5D984F3E996F5EB98F4EA95F8EE97F3E990EDE487F3EC8EEEE788EFE888F8F18F F9F192EEE48AF5EB92F9EF96F3E990F2E88FF9F095F1E88CE8DE83E3DA7EF0E789E9E082DAD16F E8DF7AEEE784F5EC8DEEE78CE4DC83E8DF87EEE68EECE58AE7E080F0E785F2E986E6E07AF8F49E E6DDA522160991895EE0DC99A7A54FC7C266B8B156DBD076F1E581EADC7AE9DC8FEDE28DDCD674 EFE98DDDD68CD6CF964E4718DCD89BF0F0AAC0BF821B1800000000040400000000221D11C7C698 FAFFAEE3E79156562D201B00999460F9F4B4A29C622F2A18342F0DBEBB7AF8F4BCE6E3A9E8E69A E7E495D6D088EDE4A59E96466B641CE9DD94FBE094D8BD6ABFA950F6EA8DE5D878E4D67AF3E08A FFE594F9D387F9CA7DFBC979B47726A07625D8B565F8D889FCE597F9E194EDD98DE3D386F0E495 FAEF9FFFF7A5EEE492FDE69BD9A961A57118FFD5916F46261802005F5432FCF2A9FEF098F7DD90 FCF0A5ECE790DFCB73E1C06DFFE79DFBDE91F9E08AFBEF8FE3E591E5EDB48A906E110D001D1004 897B43ECE297E8E191EEE797EBE393EFE596E2D787EFE294EEE193F1E399F7EAA1FAEDA5E5DA93 D9D58FD4D189D0CC82CFCB7BDEDA83E4DF8AF1EC9DF5ECA5F7EDAEF3E9AD2015005D582194935A B3B27CBFBE97A5A38D5450430000007F7F3DECEE94F7F3A4897E4C2D1C09BBAF76FFF6B4E4DA97 ECE592E3DD7CEBE67EE7E27CEDE68DECE49BF8EDB1C7BD783F371F666131D4D096E7E69CDCDE84 DADB7DD9DA7DE6E390E3DD93E2DA92E4DB91F5ED9FE6DC8DE8DD8DEADD8EEADF8CE8DE87E7DC83 E9DF85EDE489EBE088E7DC85EBE18CEFE490F0E28DEDE087E4D781E5DB85EDE38FE0D886E1D98C E9E399D5CE88B5AE6CD8D293D7D091DCD38BE5DB92EBE399EEE79EE5DF94F2EEA2E0DA8ECAC678 E6DF90E9E193E1D989F2E793F5E891F8E8A56F612BD9CA9FF3ECC963504249300BBB9B68926930 815016A06A2ED2A464E4BE7EF7D79AFFF7BDDAC290332201E8DDADEAE2B358542A4D4919ABAA7B 7E7B4E635D329D95676D6432685D23CABD7DE4D48FF8E69FF0E196F2E69AF7EDA4EEE69DE3DA92 E5D994F5E39FFEE7A3FCE3A0D9B26DB38E48F0D58CF1E299E9E49BE6E59FE2E1A0E4E3AAE7E8B8 61663F050200D8C299DFB07DB78640FEE28DF4EB94FDFFC2B6BB980A0400263014BDC48EFAF0BD FEEBB3F0EAA7DDE596F5F5A5FBE394E1AE61AE7325EFC573F9E292E7E49AF4F6AEF4F6B1ECEDA9 E5E5A1EEEFAAEDEEA8EEEFA6E3E597E0E290E6E994F2EB9DFFEAA7ECCD8BF2CD89F2D793DEA862 BB843EB17F38BD934CD4B46EF7DF9AFFFEB9FEF8B8FEF5B8FCF1B4FDF4B6FFFCBEFCF4B8FCF3B4 F8F0B0F8F0AFFCF5AFFDF7B0FEF8B3FBF4B8FBF4BAF9F3B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDEDEDEACACAC5555555F5F5FA5A5A5A3A4A35151513535354A4A4AD1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2CACACA9596957071705B5B5B 4A4A4A4545455757576D6E6D888988B0B0B0D6D6D6F0F0F0E5E5E5AFAFAF767676666666D7D7D7 FCFCFCFFFFFFFFFFFFF0F0F0C5C5C58C8C8C595959989898D8D8D8A4A4A46F6F6F4C4C4C484848 5D5E5D787978A3A4A3EFEFEFFFFFFFFFFFFFFFFFFFF8F8F8DDDDDD868686232323686868C8C8C8 F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD EEEEEEB9B9B95D5D5D2B2B2B767676BDBDBDF7F7F7FFFFFFFFFFFFFEFEFEF7F7F7D0D0D0646464 1111114949499C9C9CEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBF3EBEBBCEEEBBFFAF3E0FFFAF7FFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFAEDD8F7E1B7 FCF1CEFFFFEDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEFABCBCF07172EF3030FC 8E8EFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFAFAFFF4848FD6767F4CDCDEFF2F2F7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4F4F48E8E8E2828281D1D1D696969D3D3D3FFFFFFFDFDFDF1F1F1D9D9D9A7A7A77F7F7F5F5F5F 4949494747475454546565657B7B7BA5A5A5D0D0D0F2F2F2FFFFFFFBFBFBDBDBDBA3A3A36E6E6E 737373E4E4E4FFFFFFF7F7F7CECECE929292636363888888D1D1D1A8A8A86B6B6B4949494B4B4B 5D5D5D7B7B7BACACACE5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF0F0F08484843B3B3B2E2E2E787878ECECECFFFFFFFFFFFFFFFFFF EDEDEDC5C5C55C5C5C333333696969B5B5B5F3F3F3FFFFFFFFFFFFFFFFFFF6F6F6D6D6D66E6E6E 1E1E1E4A4A4A999999E9E9E9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBF3EDEECAE7E8B1F3F3C2FAFADC FFFFF5FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCEFFCEFBBE7BBADE4AD D1F5D1F2FFF2FDFFFEFFFFFFFAF1E4E3B166E5BD6DF1E7B3FBFDE8FEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFDF3FCE7CEE3B5A6C382BAC58BF8E4C9FFF5EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FFC9C9FF 8888FF6D6DFE7474F3B6B6D2E0E0E1FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 EBEBEBF2F2EBE2E2F58A8AFB4E4EFF8686FFC2C2FFF6F6FFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCC6ADCCC6AEBDB7BECDD7EE3D475 E7DA7CD4C76BECDF83E0D479D6C96FEBDF8BE5DA88E6DE7BE4DF7FE6DD8ADDD975C0B86B1C0E04 A59F57B1AA64BFB771E7E284D5D07AEAE39B8C854E474007EDE79DDED888C4BF64CEC765DED370 CEC05DE8D876F2E182F4E78BF2E88BF2E78BF7EE91F7EF90E9E381EEE986F9F592F8F490F7F38F FAF893F8F491F3EC93EDE68EF3EC94F5EE96F7F098ECE58AF8F197F8F198ECE58BEEE78DF4ED93 EDE384FBF08DF5EB8BE9E187E9E38DEAE594E5E290DAD883E7E386EAE782E3DF73EFE97EE1D88F F9F7C2655B30534A10EEE6A3E8E293BFBA66C1BC69BCB662EEE892DED87DD9D277E8DF93E9E18E EAE68DEDE7A1ECE99CE3E0994A4417D3CF8DF6F3A6F4F0A8C8C3727670226D69268F8A52E4DFA7 F8F3B3E6E2993430042A2500BEB879FCFABEDCD4941B1300635927DFD58CFBF3A5DFD98EE2DB93 E3DD90D3CD81E2DC90DFD78DDCD182F0E38FF3E393DECC7AD3BF6BE7D67FEBDC81F5E68AEADB7E EEDC83DDC671EED480FFE693FFE594FFE498BC8B48A2702CCFA159FFDE91FFD989F6D481FDE28F F8E596E9DD90F6F2A7D8DB90E9D5939E621FE5BF60FFFCA9776C3B0000005D4F2DFFFFBCFBDE8C F2D587FFEA9AEAE282C0B053FFF096F7E18BFFEB92FBEB91EDE28AF3EC9EDDD899EDE8B98E8863 2219001B11004E4D19D4D49AF2F1B0E2DC97E5DD91F0E595F8EC9AEDE090F0E394F7EB9EFAF0A5 F9EFA7F2E8A3F0E7A2EDE4A2D0C87EB3AF4BC0BB5FD4CB88DCD39EF6EBC252471C827937E9E1A0 968D5668622F65632C7477421F2101020400575A28F8F7BC716B371F1403C3B77FF3E79CF7EC9A EDE290E5DB84EBE389ECE58BE9E48DE1DA8BEAE39DDCD4952E2808898343F9F1B1E5DD98DED88B EBE996F0EE97DFDD86D8D783EEE998F3EB9EEFE49AEFE196F0E397F3E697EDDD8FE7DA87F5E993 EEE088E8DB82E9DE85E5D782E0D17EE3D785EFDF8FF6E691EEDE8AE4D784FBF0A1E8DC92DFD78F D6CF8BE6DE9ED2C98BB5AD6EBAB173C7BD7FD2BE83DFCD90EADF9FE5E2A0D8DD98D3DA94E0E79E E2E59CF0EBA2F4EAA2F3E29BF8E796EAD885E2C8A02F1200E0C995F5D9B24B2D1B15000079601A B89F5ADBC184FFEAACFEEAAAF6E4A2DACB8EFDF2BAD8D29E1D1900E3E1B9EAE9C0939269212000 928F645C592D787542B5B27C88854E4E4911C0BB82D3CD92EAE2A4E5DD9DEBE4A0DDD691E4DE97 E6DB99F8E2A9E8DC9FEBE39FFFF4ABDBBC73966F24DFBB6EF9E59CE8E0A2EDEAB9E9E1BDEEE8B1 F7F5ABF3EDB3514625331600814218E1B169FFEC8EF4E687CAD082D7D9AB2F1E191712025E5C42 5546288A804FB9BD7BEAF6B1F8F2B4F6DC94EDB45CBB7D1EF9CF81F5DC9FFEF8AEF5F2A5F7F3A9 F0ECA2E4E096E3DF95EAE79BF1EEA1E6E394E6E394EBE897E9E796E5E392D6D484E8E096FCEFA7 FFF0ADFFF6B3F7D797D8B06F9B6C2A8B5614D9A361FDDA92FEF7AAFFF6ADFBE59EFEEAA3F8E7A1 F9EFA7F0E8A1F3EEA7FDF9B2FFFAB4FFFFBAF7F2ABF2EEA7F7F3ACFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF5F5F5B2B2B26B6B6B515151848484CECECEC2C3C25F605F3A3B3A4A4A4AD1D1D1 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5CACACA9191915A5B5A474747 4A4A4A464646464646555555585858626262929292C7C7C7EBEBEBDCDCDC919191454545303030 C8C8C8FBFBFBFFFFFFFFFFFFECECECB2B2B26565651D1D1D5252529494948787876D6D6D575757 5858585F5F5F565756646564B2B3B2DFDFDFFBFBFBFFFFFFF8F8F8DDDDDD8787871D1D1D414141 8080809D9D9DA7A7A7A9A9A9AEAEAEBFBFBFD9D9D9F1F1F1FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FAFAFAD5D5D58E8E8E454545343434ADADADE3E3E3FEFEFEFFFFFFFFFFFFFFFFFFF9F9F9D1D1D1 6464641212124E4E4EA0A0A0EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B9F9F8EAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF4E9 FDEACFF8EEC7F5F6D0FDFDF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E6FEA8A8FB6364FA 4242FC9A9AFDFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFE4747FE6161FDC1C1FDE5E5FEF7F7FFFDFDFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF1F1F18A8A8A2424241D1D1D6B6B6BD4D4D4FFFFFFF6F6F6CDCDCD9A9A9A676767545454 4C4C4C4545454747475252525858585D5D5D8A8A8AC0C0C0EEEEEEFFFFFFF9F9F9CECECE828282 3B3B3B424242DBDBDBFEFEFEF4F4F4BCBCBC6E6E6E2A2A2A4040408D8D8D8585856A6A6A555555 535353575757535353717171AFAFAFE4E4E4FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF7F7F7EBEBEBCCCCCC686868383838474747929292EFEFEFFFFFFFFFFFFF FFFFFFD5D5D59696963E3E3E3C3C3C959595E5E5E5FCFCFCFFFFFFFFFFFFFFFFFFF9F9F9D8D8D8 6E6E6E1F1F1F4D4D4D9D9D9DEAEAEAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAF5FBEFDBF0E4B8EDE4B0FBF9DC FFFEF1FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FDF8D4F0D4 BCEBBCBFEFBFD3F3D3EFF3EEFBF3EDFBE7CCE4B151E9C26CF9EFC8FFFFF9FFFFFEFFFFFFFFFFFF FFFFFFF5FAF5E5F4E4CFF3CFBFE8B8BBD7A5CED2A0EFDEB2FBF1DDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF DBDBFFA0A0FF6868FE5C5CF5B8B8D9E4E4E6FCFCFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6F6F4E4E4E4DADAE9BDBDFC7171FF4D4DFFAFAFFFE0E0FFFBFBFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8D975E3D371E5D575EADA7B EDDE7FEDE082E9DC7FE7DA7EE0D57CDDD279DED27EE4D989E2DD7BDFD979E1D986E1DD7AD6CE82 291B0D8B8440BEB674AFA867EAE68DD8D380E1D993999159413900EBE6A0DED98BE4DE86CDC764 D4CA65E1D471F6E585E4D176E1D374ECE181EFE585EDE382EDE584EAE482EBE583F3EF8DF1EE8C EFEC89F2F08DF3F091F4EE94F3EC94F7F098F5EE96F8F199EDE68EE9E28AF1EA92EFE890F3EC94 EFE890E9DE82E5D878EFE48AE9E18DF1EA9FE3DF99DDDA94F0EDA6F2EFA2DEDB84ECE78AF2EB8E FDF2BAA1956A322800D5CE88F3EE9EEBE692DCD785C7C270C3BE6DE6E18FE0DC85F1EC97D7CE84 D9D27EE0DA87E5E0A2E3E193D8D68A383105A6A160E6E393E9E198F2EB8DF2ED8EE9E396FDF7AB EDE79BF1EAA170692370682DD6CE87FFFFBEE1D996DED694BAB26FF5ED9EF6EB93D8CE7CE0D988 DCD585E0DA8DD3CD81E0D98ADCD281E3D482F4E38FDBC974C6B45FE6D780F5E58DF3E38BFAEA8E F3E488E3D278DDCB72EDDA84F8E590F2DE8DF6DC90FFDE9AE8C17DAF813AAE8034E4BC6BFFE290 FCDE8DF1D788F7E498ECDE96FFF7B09E7C3CD5A15BFFE985F1EC9191975E100D00584926DFC281 FEDC8AFBDD8EFCDC8ACBB657EBDA81DDCC77D8C771FFFFA8F7E992EFE391EAE193EEE39DF1EAAE FCF6C48A83571C160018180033340F9D9C62E6E19FFFFCB5EAE193F4E997F5E997F4E998F0E798 EAE495E9E195F1E49EEBE09FF1E6A1EBE392E1DC81F0EA95DDD38FE4DDB57B6D5532280FC0B972 CBC083D6CB95E8E0A5B4B1792A2B009BA06A1A1F0681825A8C88641B1400BAB171FCF4B0EFE494 DED37CFEF69FEBE28CE8DF8AEDE593EDE697ECE59BDAD38E5D581BB6B174FFFFC5F0E89DEEE699 E8E294ECE798E9E696DCD988CECC7AEBE494EEE595EADE90EFDE92F0E093E9DC8DEADB8CECDF8D E9DE88F4E691F6E991F5E993F7EA96F2E593ECE08FEADC8DEDDD8CEEDE8CE1D384EADF92E2D992 E0D995CDC888DCD797DAD393D7CD8EDED595DED492E0CF93D9CA8DDED596DCDB9AD6DB99DAE29D D4D791F4F4B0ECE09CF5E09EFDE0A0E8CC84FDECA1BFA182291001A68A4B7D5F2E573922130000 C1AA69FFF9B6F7EBA9F3EBA4F6ECA8CFC689D9D398DFDCA5F1EFBF333314676840ECEDC57E8053 100F00605D2E7674439F9E658281477C7B4254531B817F4785834BCDC890E4DFA4DFDC9CD6D18F E0DC95F1E6A4E4CD95E2DEA6EBECABDAD690FFF0A89B742CC29B50F3E29CF1EAAEC6C3992A1E0F 98925FECEB9CF2EAB0E1DBAACCB28BDB9A74D4A867FDEA91F4F09AC1C97F969B6E937F73584F44 2E271C2F2111241E0E6C7138DCE7A9F7EFBBFFE09FD8A046BF841FFFE093FFEFB6E9E198E8E296 EDE79AEEE89CF4EEA2FEF8ABEEE89CF2EBA0F0EA9DF0EA9DF2ECA1F1ED9DEDEB98EEEF9CEEEEA1 E6E39CEEE6A3F9ECADFDE9A9FFF3B5FCD594D39D5CBD813DB27A36C1904BDBB872F2E39AFFF6AC F2E297F7E9A0FFFBB3FAF3AAF4ECA5FAF9B2F1EEA6FEFAB1FAF5ADFCF7AFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF7F7F7DEDEDE8383833636366C6C6CB7B7B7E5E5E5C3C4C36061603A3B3A4A4A4A D1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB949594595A593E3E3E 5555558080809191919A9A9A9D9D9D8181816B6C6B959595C9C9C9EBEBEBDBDBDB8E8E8E3F3F3F 292929C7C7C7FBFBFBFFFFFFFFFFFFEBEBEBAFAFAF6161611212122525255454548D8D8DA9A9A9 B3B3B3BCBCBCA8A8A8656565393939646564AEAEAEF4F4F4FFFFFFF8F8F8DDDDDD8A8A8A1C1C1C 1616162929293232323434343535353C3C3C5D5D5D979797CFCFCFF3F3F3FDFDFDFFFFFFFFFFFF FFFFFFF8F8F8BBBBBB636463383838454545C3C3C3E9E9E9F1F1F1F2F2F2F2F2F2F1F1F1E9E9E9 C4C4C45F5F5F161616646464B1B1B1EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF0E3E3ABE8E8B8F8F9ECFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFDFCFBF6E9EDEBC0E7E7B1FAFAEEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFE9394FC 595AFA5A5AFAAAAAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1B1FE4949FE5555FEA9A9FED0D0FEEBEBFFFBFBFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF7F7F7DADADA7474741818182C2C2C7C7C7CD9D9D9FFFFFFEEEEEE9F9F9F5454543C3C3C 5656567D7D7D9191919999999C9C9C8D8D8D767676959595C2C2C2EEEEEEFFFFFFF9F9F9CCCCCC 7E7E7E3535353B3B3BDADADAFEFEFEF4F4F4BABABA6A6A6A2020201616164E4E4E818181AAAAAA B3B3B3ADADAD9999995C5C5C4747476D6D6DACACACF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FAFAFAF6F6F6F2F2F2EBEBEBD9D9D9BDBDBD9393933E3E3E3636366E6E6EBABABAF5F5F5FFFFFF FFFFFFFFFFFFBDBDBD6666662A2A2A484848AAAAAAF1F1F1F0F0F0F2F2F2F2F2F2F3F3F3E9E9E9 CACACA676767202020585858AAAAAAEDEDEDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFEF0DFFCE2C1FADFB8FAE6C5 FEFBF0FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7FCF7DCF4DCB9E9B9B5E2B6DBE1D8ECE0CDF2D8A8DEB946E5CC72F7F2D6FFFFFFFDFDFCFBFDFB FAFDFAF8FDF8E0F0E0C2E3C3ABE2ACB9E8B9DBEED4EAE9C8E7E2ACF2F0D2FEFEFCFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFFEFEFFFBDBDFF6A6AFF4F4FFBCCCCF1F4F4F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFCFCFFFBFBFFFBFBFFFBFBFF FBFBFFEFEFF3D9D9E5B2B2EB8181FD6161FF6B6BFFD4D4FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D26EE1D16FE2D272 E8D979F0E182EEE183E3D67AD4C76BDDD278E8DD83DDD17EDFD386DFD97BDBD579DDD583E1DC7F ECE39E50431D6F672BC6BE81A8A062E8E38EDDD787E5DC97ACA3632E2400D8D08EE4DD93E1D985 C7BE61D9CE6DE3D474E8D67BE8D37CDECF72F1E486F7EA8CEFE586EFE487F1E88BEAE286F0E98E F0EB8FF0EA8FF5F195F9F599F3EC94F7F098FBF49CF3EC94F7F098F3EC94F6EF97EBE48CE1DA82 E9E28AE8E189E8DD83E6DB80E2D8838D8436CBC582F8F1B9F9F3BDECE6B3EBE3AEFDF8BEFFFABB FFFDBDA0965E140A00A69D62ECE69DE6E18FE8E38FDFDA88CEC978CEC879E0DB89DBD683DED986 DFD689D2CB76D5D07CE5DE9DE8E69AE5E299231C0077723AEEEAA0EDE4A0E7E088E1DC82E9E294 E9E397E1DB8FE0DA90D1CB81FBF7ADF2EBA4DBD48CF3ECA6D7D08ACBC37EE5DE90ECE38EE8DF8C DDD685DDD687E9E393EEE798ECE493E5D785E6D682EAD882D8C56EEAD780FCEB94EBDA81EFDE84 F0DF84F3E386F5E48AE7D57EEBDA85F4E291F3E293F6E195FAE195FFE69AF9DE91D6B567AF8F3F B59344FBDA8DFEEDA0F7D488FFE8A0C4A35CAC8541FCDB92EDDE7AF5F79D7E86480000006D5C38 DAB97ADDB05FFFE99AEFC16EC9A54BF6DC8EDDCB81CEBC6FF7EA9BF1E491E8DC88F1E695F2EA9C F1E9A2E8DF9EF2EAB0A39D684645161211001B19015D5829E3DD97EAE093EADF8FF5EA97F5EA9A EFE797EDE698EDE597F1E49BECE19EF6EE9FFAF398F1E9A0F6EDA5F0E7A0E3D9B3302500D6CD8E EBE49EEDE2A9EBDFA9DDD7942E2903A8A77AFFFFD4676A3D1D1D0626220ED2CD93F8F0ABE1D791 E8DD90F1E694F0E493F7EF9DE4DC8AE6DD8DEFE89BB0AA5F494200D3CF8EEBE5A8F1E9A8DED688 E9E292EDE799ECE79BE9E59AE2DE93D7D489EFE79BEDE595EBE08FECDD8BEDE090E6DD8DE8DD8E F7ED9DF1E895EBE28BEFE58FF0E792F6EB99F5EA9AEAE192E6DB8CE7DB89F5E896EBDE90E5DE90 ECE69DEAE69FE4E19DE4E09CDCD793DFD894EAE29DECE49DCFC984BEBB76C8C782CACA85C2C17C CCC783D8CE8BF3E3A1F5D999FDE3A7FFDCA1E4C07FC0A7626E51302C140297833ED9C490D0B898 230D07A8965FFFF6B7DBCC88EADC90EDE3A0DDD69ED1CD97EFECBAC3C1930B0C000305004C4B2A C5C3928F8D5B4C4915504B1665632966652B8E8E5567652C8E8C53828148B2AD72CFCB8DC9C585 E2DD9ADCD891D5CB89B7A36B5A55198D9151D4D291D8C081B08C4BAF8D4AB9A764B6B378656638 06000082804EDCE0A0D0CE97444225A89667E8AF87D2AB71FCF0A5DCD68FBECC902E3A14281C12 6A6451ADA791D9CBB2D0C99ADBDFA6C5CE95E8E0B3EBCC92BF8E3BD6A746FFE899E3D195D9D18A E6DF96ECE69CE5DE95E4DD94EAE49AEEE79EEAE39AF1EBA1EEE89EEBE49CF5EB9EF4E494E7D98A E4D98FEBE29BF8EDABFEF3B4FBECABF2DD9CEBD08CF8D791FBDD97F8C487D99359A1682C9B7030 C6A663FBE9A4FDF8B4FCE7A1F8E9A2F9F1A8EEECA2F5F6ACF2EEA7F5ECA9F8EFACFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBEBEBACACAC6465643B3C3B989898E2E2E2F3F3F3C0C1C06162613B3C3B 4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E36162613B3C3B 545554909090C8C8C8DADADAE0E0E0DEDEDEC5C5C5AFB0AFC4C4C4E2E2E2F2F2F2DADADA8F8F8F 4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06262621515153232326E6E6EB8B8B8 E0E0E0F0F0F0F9F9F9DADADA7F7F7F3031302B2C2B888888EFEFEFFFFFFFF8F8F8DDDDDD969696 3838383030303F3F3F4949494545453A3A3A242424242424484848838383D1D1D1F0F0F0FEFEFE FFFFFFFFFFFFF6F6F6A2A2A23636361A1B1A2929296F6F6F818181818181808080818181808080 7D7D7D6A6A6A3434341717176C6C6CB7B7B7F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBF2E3E3ABE7E7B7F8F8EBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFBF3E9E9BDE1E1A5F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3FF A0A0FC6A6AFA6868FAB1B1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBFE5F5FFC5F60FCA3A4FDD1D1FEF2F2FF FCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7A2A2A24B4B4B1111115A5A5AABABABE9E9E9FFFFFFE6E6E67B7B7B272727 4D4D4D898989C4C4C4DBDBDBDFDFDFDDDDDDCFCFCFBABABAC7C7C7DEDEDEF6F6F6FFFFFFF9F9F9 CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6B6B6B232323212121676767ABABAB E2E2E2EFEFEFECECECD4D4D48383834444443C3C3C767676E9E9E9FFFFFFFFFFFFFFFFFFFFFFFF FAFAFAD3D3D3A4A4A48B8B8B7B7B7B6F6F6F5B5B5B4848484141416B6B6BB0B0B0E6E6E6FBFBFB FFFFFFFFFFFFFFFFFFA8A8A83A3A3A0F0F0F292929616161868686818181808080808080818181 7C7C7C6D6D6D3636361B1B1B5D5D5DAFAFAFEEEEEEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF5EBCDF1DEAFF9E6C6 FFF2E6FFFCFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4FCF4D5F0D5C2E4C3C5DAC2BED0A1B7C676B4B841CAD077E6F3D2F2F9F7E9EFE9 D6EDD6C8EDC8C7ECC7BDE3BDB5DCB5BBE4BBD5F1D6F4FCF3FBF9ECEDEECAEDEDC8F1F1D5FCFCF6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFFFEFEFFD1D1FF6767FE3939F7BBBBE3EBEBECFDFDFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FFEEEEFFE3E3FFE0E0FF DDDDFDD5D5F2C4C4EDAAAAED7777F45050FE7070FFA7A7FFECECFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCC69E3D371 EBDB7BEBDC7DE7D879EADD7FD6C96CD9CC70E6DB81E4D980DCD07EDED288E2DB81E1DA81E4DB8B E2DD82F5ECA86E6035433A0DDCD399A59D5FE2DD8AE2DA8BE7DD97C4B9792E2400BFB674E8E099 DED685CAC066E4D87BE2D376DCCA71EDD882EADB7EF2E586F5E88AF4E78BF2E78CEDE288E8DD84 EAE088E9E28AE8DE89E7DF8CEEE691F0E991F7F098FAF39BEFE890F3EC94EEE78FE8E189EBE48C EDE68EF5EE96E9E28ADDD57EE8DD8AD9D1833028052A2300746C43948E6BB0A987ADA484998F6E 736647281C01180D00978E51EDE6A3D7D183F2ED9AE5E08CD0CB7AE0D98DD1CB7FE0D98EE0DB8B DDD886E9DF92D6CF7AD8D27EE0D995DDDB8ED9D68F262001605A28F0EAA7F2E8A8EEE697DFD984 FAF7A7E7E193F3ED9FE1DB8EF7F1A5DBD589EAE499DCD68BEBE49BEAE39BEEE89EE9E393E9E38D E3DD89DFD886F3EC9BEFE897E9E18EE2D882E7DA83E4D37AD7C269E9D47BF8E38AEBD77EE5D176 F9E68ADFCD71D6C569F5E68CE5D57FE6D784F2E395F1E295EBDB8DECDE89EDDE8AEAD987FDEF9E EFD78AB2974BBB984FFAD58AFFE59CE9BA71AF782DFDD48CFFEA9DEAE481E5ED928D97580B0800 766242FFDD9FD9A656DB9F4ED19545F9CB77F7D992FCE9A8F0DE9AF1E196EFE091F1E491F8EE99 F2E793F8EE9EFCF9ADD2C97FFCFAB7E5E4B0706F391F1C013A351DE5DC97FFFEB4F2E99AF9F1A1 EFE796EAE291F0E999F2EA9DF4E79CEBE391EFE790F4EC98ECE49DF8EEB4FFFDC94F4511938B54 FEF7B1EEE7A1EDE29FFCFBC66E643A8C8952F1F2B9EFEFCA737254141400AFAD79F8F0BFE1D998 FBF4A0F7EB9FE7DC92EBE298EAE094F1E99CF8F1A4AEA75A655E14F3ECA6E4DD9AF6EEADE4DD96 E4DD8AF0E997EFEA99EDE89FE6E29BDBD693E2DE99ECE49CE9E08FEFE58FF1E389E6DC88E9E294 ECE396EBE394EBE494E8E08DEFE894EDE794ECE494EDE596E5DE91E7DE91E5DB8BF3E997EEE797 E1DB8DE7E498DCDA90C7C57BDAD992EAE89FECE89EE8E399E0DC92EEF2A6D9DF92E0E096E4E096 E1D791EBD796C0A566E2BF81FFF0B5FEDDA5B98750845C1A8F782E684E29311D0EB5A670CCBF92 E7DABA453917887F43FFF9B1F9ECA5EADC97F0E5ACF4EEBDF0ECBCFFFDCD6261344140205B5B27 585824F1F0BFFCF7BFD6D095BCB67ACBC98BBFBE829D9B607A783F6C68305B561EB2AD72DBD598 CBC686D9D491DFD993E6DD98FEEFB4E2E2A6BFC88C888B51C8B57F6542115B3905C0B07598985F 737A48050300242712E5EBBCDEE2B06D72381209016031048969389E955ECECB97BFD0A2ECFDDB 76715D1E1A0F211C08372B0F3E370DA0A270878D594B4520BFA576C19B53D4B055FCE797E0D292 DED58FF2EBA4F6EFA7ECE59FE8E19BECE59EF3ECA5EFE8A2F4EDA5EBE49DE6DF99F1E299F7DC8F F8DD93FAE59BFDEDA7F8EAA9F4ECAAFEF8B7F8F0ACEDE19CF5E59FF7E69EFDECA6FFF2B2FFE6AB DEA36DAE6834B5713DEFB77EFDEBACFFF2ADEAE098F4EEA2F2EEA4FEF6ADFBF1AAF5EBA4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF3F3F3CACACA6B6B6B5A5C5A717271C6C6C6F9F9F9F9F9F9BBBCBB5A5A5A 3738374A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0505050 3838386B6C6BB1B1B1E4E4E4F3F3F3F9F9F9FBFBFBF9F9F9F6F6F6F8F8F8FDFDFDFAFAFAD9D9D9 8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0626262181818595959B5B5B5 E7E7E7F9F9F9FDFDFDFFFFFFE8E8E8989898454645141414727272E7E7E7FFFFFFF8F8F8E4E4E4 B3B3B37879788383839C9C9CAFAFAFAAAAAA9696966B6B6B3D3D3D232323383838959595D2D2D2 FCFCFCFFFFFFFFFFFFF0F0F08D8D8D1818180808081414142525252A2A2A2A2A2A2A2A2A2A2A2A 2929292525251A1A1A0D0D0D181818757575BDBDBDF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFFF2F2FFF1F1FFF1F1FFF1F0FFF4F4FFF9F9FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFBF6E9E8E6B1EBEBBFF9FAEDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAF1E9EABDE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC E8E8FBAFAFFC7979FB6969FAB0B0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6FD7676FA6B6CFAA0A0FCD8D8FE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEEEEEEEBFBFBF5C5C5C313131313131999999DDDDDDF8F8F8FFFFFFE4E4E4717171 1F1F1F656565A7A7A7E0E0E0F4F4F4F8F8F8FBFBFBFBFBFBF7F7F7F8F8F8FBFBFBFEFEFEFFFFFF F9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A262626424242ABABAB DEDEDEFCFCFCFCFCFCFDFDFDF0F0F0ACACAC5B5B5B2A2A2A525252DFDFDFFEFEFEFFFFFFFFFFFF FFFFFFF7F7F7B7B7B76969693E3E3E2828282828282020202222224F4F4F909090D1D1D1F7F7F7 FDFDFDFFFFFFFEFEFEFFFFFF9898982121210505051616162323232B2B2B2A2A2A2A2A2A2A2A2A 2A2A2A2525251B1B1B080808171717656565B8B8B8F0F0F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDF9F1EFECC5E9E6B3 F5F3DBFFFEFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEF9FCF9E7F4E8C5E1C2A2CB838BB94D98B84FB3D183CFEEC3DBEDDD CFE0CFB5E0B5A3E3A3A8E2A8B3E1B3C5E3C5E5F3E5F8FDF8FEFFFEFFFFFFFAFAEEEAEAC0E3E3A9 F9F9E7FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCDCFF6767FE2A2AF2A2A2D0DBDBE0FBFBFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFE4E4FFCBCBFFB4B4FFA7A7FF A7A7FFA5A5FC9393EA8383EB7575F75A5AFF5858FF9C9CFFE1E1FFF8F8FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8D875 ECDC7AF3E383EBDC7DDFD071E6D97BE0D376EEE185EDE288DED37AD8CC79DACE81DAD379DCD67A E1D984D8D27BE9E19C8B7E4B1E1509D8CF928F8744D2CD78D8CF7DE1D48BD9CC87493E11A99F5D F0E89FD9D180B9AF56D0C366E1D276E9D77EEDDA83ECDD7FEFE281EEE181EFE283EFE386E7DB80 F1E68DF0E58EF2E691E9DE8BE4D887E8DE8CF0E892F5EE96F9F29AEFE890F1EA92EDE68EF6EF97 EFE890E8E189F0E991EBE48DDED582DDD587F4ECA5BAB2705F572E150D000600000C0400040000 030000000000281D0AA49A69FFF9BBE8E099ECE695E8E28DECE792D7D181CEC77CA59E55E8E198 E6DF92E9E292DFD787D7CF7BE2DC88EAE59AE6E297E6E29D342D0B544D1EF4EBAEE9DFA1EDE399 DDD584E5DE8DFAF8A8EBE493E6E08FF0EA9BE7E091E9E394E1DA8BE5DE90F4F0A3F4EDA0EAE393 D5D07BE4DF8BEBE591E1DB86E8E08BEEE38EE9DC85ECDD84E4D077D5BF64E9D176DCC66CEED87D F4DE83D1BF62CBB95CFDEC91E5D57EEADC87F2E796F8ECA0F0E59BE7DD8FF0E78DE8DF87F4EA96 EEE192F1DF94FDE79FE4C57FCEA059EBB86EAC6E21EDAB5CFFE599EBD788EDEA8BE5EB95B0B577 110B00695334FFF0B4F9CF7FA26712CD913DFFE596FDE19BF2DF9EF3E39FF9E89DEBDC8DEEE08D F3E791EAE08AF3E894F1E594F8EF9FE4DA90DDDAA5D5D39F3D3801ABA564F2ECAAE9E19AEAE196 F3EB9CECE493F0E797F8F1A0F7EDA1F5E99DE9E383E5DF81EEE599F3EAA6FFF7C992855F5A5311 E9E395EBE49BE9E29AFEF6B394894C4E4512E4DFA8FCF9C6A4A27F1E190015120BCECA98F2ECB3 F2EBA2F3ED96F9EEA6F1E5A3F0E5A1E6DD96F8F1A7958E43888035EDE69BFDF9B3F4EDA6F6EEAA E5DD94DFD880EAE48EE1DC8DF2EDA6F0EAAAD4CF91E2DD9CE8E098DBD383E5DC82F3E686E9DF8A E8E397EEE89DE7E194E3DF8EF1EC9AF9F4A2EDE998EBE596EEE89BE4DF95E8E195D6CE80D7D07F E5E08FE4E192F0EFA1E2E396CED183DCDD8FE5E498E4E196E7E395ECEA9CEFF4A3E3E698DDD98B E5D78FF3DC97FBDF9DEECC8DF0C488D7AF77A06E3682511DA17E35E6D379CEB7901C0900796C58 C0BA9DECEAC8504F1C58590DEFEB91E8DC93EDDBACB2A67C4D4B31A6A374C6C391121000B9B883 FFFFD0E5E4A9EFEBAEF1EBABD4CD8BF2EBA9ECEAAAF5F4B6D4D397B1AE726B662C989358F0EBAE E5E0A0C9C482CBC57FC4BE76AAA15BB5A86AC7CA8CAAB57B9A9F6BE3D2A59C7C5368491B756833 8C905777814D74784D2427113E4627C7CC99FDFFC7CDC780592E183F2309180E001410003B4F2F 5B6F4EA5A287F0ECC8D5D2AEA79D80716B4C2A2A0BB9BB8B645C3F38240B82682EF6E18DF3E99A E1D794DED793F1E9A6F4EDA8F2EBA8F8F0ADFBF4AFF5EDAAF9F2B0F4EDA9E9E19DE5DE9CEEDE95 FDDF93FFE79CF9E39BFBEAA4FFF9B4FCF8B5FDFBB9F2F0AEF0EEA9F5F2ABEFECA3F6F7B0EFEFAA FBF0B1FFF9BFFFDBA6E0A777BA6F3ECA8450EFBC84FFEDACFFFAB1FFF9ACFEF5A7FDF5A7F5EDA0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5F5CECECE919191393939616261ACACACE5E5E5FFFFFFF9F9F9B2B2B2 4646462D2D2D4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5 6F706F4343434E4E4E808080B8B8B8D7D7D7EBEBEBF8F8F8FCFCFCFEFEFEFFFFFFFFFFFFFBFBFB D8D8D88F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0616161191919686868 CFCFCFF4F4F4FFFFFFFFFFFFFFFFFFEFEFEFACADAC5D5E5D141414666666D8D8D8FBFBFBFBFBFB F4F4F4E0E0E0C9CAC9CFCFCFDBDBDBE3E3E3E1E1E1D8D8D8C7C7C7959595484848222222545454 AAAAAAF8F8F8FFFFFFFBFBFBE1E1E17E7E7E171717212121464746686868717171727272727272 7373737070705C5D5C3536351919191F1F1F929292D5D5D5F8F8F8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFFFDFDFFFAFAFFE9E9FFC9C9FEC3C3FEC4C4FEC2C2FECFCFFEE3E3FFF3F3FFFCFCFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF3E7FDEACFF5EFC3F7F6D6FDFDF4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAF1EAEABEE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FFFFF1E2E2EE9B9BF56565FB6565F9B0B0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8FD7878FA5D5DF98686FB CDCDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEEEEEBCBCBC7979793030304747477F7F7FCCCCCCF3F3F3FEFEFEFFFFFFE8E8E8 8585853232324747477A7A7AB2B2B2D5D5D5E8E8E8F6F6F6FDFDFDFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A2828284F4F4F C4C4C4EEEEEEFFFFFFFFFFFFFFFFFFF6F6F6BDBDBD6B6B6B2A2A2A454545CFCFCFF5F5F5FFFFFF FFFFFFFFFFFFFAFAFAD4D4D4A3A3A38383837171717272725E5E5E4848483838385B5B5B9E9E9E D9D9D9F9F9F9FFFFFFFBFBFBF0F0F08A8A8A1E1E1E2121214D4D4D666666737373727272727272 7272727474745B5B5B3535350F0F0F1F1F1F7C7C7CD5D5D5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFFFDFDFFFDFDFFFDFDFF FDFDFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEFEECD6F7ECC5 F4F4CDFAFBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FCF9E4EFDCC9D183B4BA40BCC775C1D7A0C3E4BD C4E2C6C3E0C3C1EAC1C5F2C5D3F1D3DCF2DCE6F3E6F7FBF7FFFFFFFFFFFFFFFFFFFCFCF4EBEBC1 E2E2A1F8F8D6FEFEF0FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0FF7272FF3939F9ADADE8E0E0F0FCFCFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFCFCFFF9898FF6C6CFF5252FF 5C5CFF6767FF6E6EFD5959F55959F66969FC8080FFA0A0FFD0D0FFF8F8FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EADA77E9D977EADA7AE4D475DCCD6EE3D678EDE084E9DC81E0D57BE3D87FE5D984E2D785DBD577 DED878E5DF81DAD47CE9E298D3C88F3A3101BDB5748A8438D3CF75D0C871E3D888DCD08752481A 988F49FAF2A8E7DF8DC5BE63D2C96ADCCF71E5D57BE0CE77EEE080F2E884F2E684EFE282F3E587 F1E486F1E68BF2E78EF9EE95F3E691ECE08BF2E891F2E992F3EC94F9F29AF2EB93F2EB93E8E189 EDE68EF2EB93F1EA92F5EE96EEE78FDED786E3DB91DBD48EE7DF9FDCD69CC1BA86B1A97CB2AB82 8D8561807954817A55C4BC92EFE5AEE0D794ECE498E4DD8AEBE58FEBE590EDE698B2AA62827934 FFF6B0E5DD93E1DB8DF6EB9BDED581DED681E1DA8BE4E095F3EEAC4D47252B2200DCD19BE3D89C F5E8A2E5DC90E8E090E7E191E6DF8EE5DE8DDFD887E1DA89E5DE8DE6DF8FD2CB7AEBE493EEE797 F3EE9BD9D480DFDA85D8D27DD4CD75E7DD85ECDF87E8D880D6C56BD6C26AEFDA7EF7DF85EAD278 E5CD72EED97CE3D072EAD87CD7C76FE0D37BEFE490F5EA99EEE599F1E9A0F8EFA1E9DF86E9DD86 EEE590EBDD90ECDB92F1D995FCE59FFCEDA5AE772DB57828FFCB77FFE797F4DC90E9DF88DFDB8C F7F4B61D1400533A1EFFECB3EEC473C29035D7A248ECBE6EF6D88FF3E097F5E498F5E294F6E593 F3E391F1E38FF2E390EFE290F9EC9DE5D98AECE29AECE7ADC3BE88807B43433D1FF4EEAEE4DD98 E5DC95F4ECA1EEE798F1E89AF0E798E6DD8FF7EB9FF3ED8BEDE787EEE49AEDE2A9C8BA92180900 DAD488EEE995DDD887E3DC95CFC5862A2000D6CF8DFFFFD0AAA37A2521069C98722F2807A69E74 F4EDABEAE591EDE692F4EAA7F6F1B4E9DE9EFDF4B0776E28928A41F6EEA3F4ECA3FEF6ADF2EAA1 DCD48DD5CD82D7D076DBD580C8C275E4DE99E1DB9FBCB67BE7E2A3EDE49FD2CA79D4CB6EEEE27F EEE68ED3CF85D4D086F4F1A5EBE899D9D686E2DE8DDDDA89E4E193EEEAA0E4E096E1DD94D7D184 C9C473D9D786E1E090ECED9DDCDF8FC2C574CCCE7EDDDE8EE4E293E7E495E9E697E5E394EFEA9C EBDE92F4DC94FFE5A1FFE09DCA9E5F8D602372470EAF854EE9C28CF5DC8DF1E683FAF3CA473534 0D040512100C868860A8AF6AAEB54FE4E57DEDE49AC5B09421160D0502000D0B031411082F2D07 EBEAB2E2E0A4F4F0B0F6F2AFE2DB96D4CC84DBD48DF8F5B2EAE9AAEBE9ACAEAA6DA9A568D1CD8E EDE7A9F3EEADF7F3AFF2EBA4ECE69CC5BD75807735ADB1737C8A50909665A09067C6A88194794D 7E7340B6BB8385925C8B9164A3A7865256371C1D099CA25AF3EE9ECEA05FD4B27DEBDDB2979075 7988682D3D1C020000B8B48BFBF7CEE6DFC1ECE7BDECE9B8F4F0C3F6F5DB38291C1F1100B4A95D FAF4A6DED791E6DE9DFBF3B2FFF7B6F8F0AFF1E9A8E7DF9EF0E8A7FEF6B5F0E8A7E4DC9BE5DD9C EBDF98FDE698F7E196F6E49CFAEFA8E9E09CE6E2A0F1F0AFD9D897EFEEADFDFCB9EDEEAAF9FCBB F6FFBFF2F9B7F9F7B7FFF6B8FFECB4FCE0ABF1AF7CB66F3CB57C44F0C788FFF7B2FFFAB1FFFAB0 F5EEA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE3E3E39D9D9D5656562F2F2F7D7D7DDDDDDDFBFBFBFFFFFFF8F8F8 AFAFAF3F3F3F242424444444D0D0D0FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EDEDEDA1A1A16262623C3D3C4A4A4A767676959595ADADADBDBDBDCCCCCCDADADAF1F1F1FFFFFF FCFCFCD8D8D88F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611A1A1A 737373E1E1E1F9F9F9FEFEFEFFFFFFFFFFFFF2F2F2B9B9B9707070181818616161CCCCCCF5F5F5 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE747474212121 212121868686EFEFEFFFFFFFF3F3F3D1D1D17070701E1E1E4949498C8D8CBDBDBDCBCBCBCCCCCC CCCCCCCDCDCDC8C8C8A0A0A05455542829282B2B2BB0B0B0EBEBEBFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFFE8E8FEDADAFED6D6FEC9C9FEB0B1FDAFB0FDB2B3FDACADFDB6B6FEC8C8FFDADAFF EAEAFFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBECD4F8E0B5FDF5D4FFFFED FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF2EFE9C3E9E2ACFAF9E7FFFFF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDFFFFEEDBDBE98888F25151FA6262F9B0B0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8FD7676FA4F4FF9 7070F8C2C2F7FFFFF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF2F2F2C7C7C77D7D7D3D3D3D2B2B2B737373C9C9C9F2F2F2FEFEFEFFFFFFFFFFFF EFEFEFA8A8A85F5F5F3C3C3C4E4E4E717171929292A9A9A9BBBBBBCBCBCBDCDCDCEFEFEFFFFFFF FFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A282828 585858D5D5D5F6F6F6FFFFFFFFFFFFFFFFFFF7F7F7C5C5C57676762F2F2F414141C4C4C4EEEEEE FEFEFEFFFFFFFFFFFFFEFEFEF4F4F4E5E5E5D5D5D5CBCBCBCBCBCBB2B2B28989893C3C3C303030 5D5D5DA7A7A7ECECECFCFCFCF7F7F7DEDEDE7D7D7D2121214242428B8B8BB7B7B7CECECECCCCCC CCCCCCCCCCCCD0D0D09F9F9F5757571B1B1B2C2C2C959595F1F1F1FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF7F7FFEDEDFFE6E6FFE5E5FF E5E5FFE6E6FFEEEEFFF7F7FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF1E0F8E2BB FBEDC6FFFEE7FFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF5E5EED583DFBE3EE4D99FDBE3C5 CBE3C8C4E2C5CBE8CBDCF6DCEEFFEEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF6 EFEFCFE7E7B0F3F3C2FAFADFFEFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3FF8080FF4949FDA9A9F9DCDCFBFBFBFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4FFD9D9FF9797FF5555FD3535F9 3030F94F4FFE6262FF6C6CFF5C5CFF6666FF8787FFB8B8FFE5E5FFF7F7FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE2D370ECDC7AEBDB7BE4D575E1D273E6D97BE8DB7FE2D579DFD47AE1D57CDFD47BDED47A DED877DBD670DDD870E4DF84DFD88AEAE29C352C00AFA862B9B460D7D473DAD577F2E993F0E698 82782F574E09F5EEA4E7E18FCEC86FD1CA6BE8DE82D5C86DE7D981F0E686E3DB78E7DD7CF0E685 EFE584F2E887F1E788EFE587F3E88BF0E588ECE184EFE68AEDE48CF6EF97F0E991F7F098F8F199 EBE48CE7E088EEE78FE7E088EDE68EEBE48CE4DC8BEDE79CF1E8A0E5DC97DAD28FE1D998EEE5A6 FAF4B4F9F3B4FFFFBFF1EEADE5E3A2E4DE99E5DE94D8D181DBD57EECE68EE9E38EE9E295CEC982 726924F8EFAAE9E199E1D98CE9DE8EF2E896E9E18CE9E38FF1ECA0E9E4A28B844D251B00B7AA75 FFFABDEADD9AEAE097DAD381E9E38FF4EE99E8E28EDBD581D6D07CE7E18CF2EC98E1DC87E5DF8B ECE692EFEA96E9E38FE3DD87EAE38DE7DC86E1D37CEBDC84EAD981C5B45BE3D077EBD77EFBE98F F6DE84E5CF74E5D075DECB70DDCB70D9C970F4E78FEDE28EEEE394EFE69AE7E097DFD588F1E08A F2E18CE8D687F4E197EBD790F6DE99FDE39EEDC67DA07427D9A856D29C47E9BA6AFAE39AF2DE91 F8EBA2EEE0A36A5A39321D04F5D8A0D9B966F7DE7DFDDE7FB89042E7CB7BF7E38EFDEB96EFDC85 F7E58FEFDD8AFAE998EFE091F3E297F4E69EEFE19BEBDE9AF0E9ABC2BC81BFB97D413B00B9B376 F6F1B1DFD895DCD48EF3EDA3E7E094EEE599E1D788F3E798E1DA82E4DD82F3EB9AFAECC6584A35 9E9260F8F1AFE4DF89ECE88EEBE4A2534818BDB377FFFFC4C0B883191200948E64FFFDD2524A29 5E563BF8F0ACE4DF8CEBE591F7EEADF4EBB0EAE0A3756C29989049FCF4ABEBE398F2EA9FF4ECA1 E3DA8FDFD58DD5CD7FEEE78DEDE792DED88BE9E3A1EFE9ACD2CC91ECE7A8F2E9A4E2DA89DED578 DCD16DE9E188DFDB91D2CE85DDDA8EDCD98ADBD889E3E091DAD789DBD88CECE99EEAE69ED4D089 D1CE81D4D182DCDA8BD7D683E5E794C5C975C6CB76D9DC89C8C777F0ED9ED8D385EFE69CE7D991 F5E19AFEE8A1FFE8A2D6B16C9A712C774C0BAF894BE4C587FFEBAFF6E2A8EADB90EFE88EFAEFC9 746867000000040500434A2FEBF3A9EAF18ED5D871FDF7AB8672613D3222BBB8974C4A29403D14 D8D4A0F9F5BAE2DF9BE7E19CD7D188CEC87DE0DA90EBE49BE8E5A2EFEAABC7C384AAA667C3BD7F E1DB9DE3DD9FE6DF9EEBE49EE5DD95E3DA91D2CA81988F49D2D69592A06392996585754C8B6D46 53370CA79B69656A326A77416267385455357E7C625E5A27888A3FE7DB86CE9A55CDA76DF4E1B5 FFF3D4EEF8D42D39132F2506464011C1BF945E5A3C4F4C23EEEAB4E3DCAACCBFA6282012000000 767732FFFFBAE8E19BF5EFAEFBF5B4F0E8A7FAF2B1E1D998D3CB8AEFE7A6EEE6A5DBD392D3CB8A DBD392E2D992EEE395E8DE90EDE69AE4DD95DAD790E0DC9AF2EEAEF0ECADECE7A8F1EDADF3EEAF FBF9BEECEEB2F9F6BBF8F0B5FCF6B8EEEEABEEEFA9FFFFB9F1DD99B48549B06430DE8E5FF4DAA5 FCF9C4FBFAC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF6F6F6C4C4C46161612828286B6B6BB3B3B3F0F0F0FDFDFDFFFFFF F7F7F7BBBBBB565756262526313131C9C9C9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F7F7D9DAD9A1A2A16364634141413636362A2A2A252525292929494A49797A79CCCCCC FAFAFAFCFCFCD9D9D98F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0616161 1B1B1B7E7E7EF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818616161CDCDCD F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF858685 323332161616737373DCDCDCFAFAFAECECECC0C0C0616161262626787878D3D3D3ECECECF3F3F3 F4F4F4F4F4F4F6F6F6EDEDEDADADAD3E3E3E252525414141C6C6C6F7F7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF3F3FEADADFC7979FA7575FA9393FCC9C9FEE2E2FFEBEBFFDBDBFFC4C4FEAFB0FD A8A9FDBBBCFDE3E4FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAEFECC9E5E1A7F7F5DE FEFEF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF5FCEAD0FAE2B9FEF9D8FFFFEDFFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFCDBDBF98989F95252F96363F9B0B0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8FD7777FA 5050FA7171F5C2C2EAFFFFE7FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7F7F7C2C2C27676763939392A2A2A6F6F6FB5B5B5F0F0F0FDFDFDFFFFFFFFFFFF FFFFFFF9F9F9DBDBDBB0B0B07575755252523939392B2B2B2525252B2B2B464646818181C5C5C5 FDFDFDFFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB696969 292929616161E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F414141C5C5C5 EFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFCFCFCF9F9F9F6F6F6F4F4F4F4F4F4EFEFEFDADADA8D8D8D 4B4B4B2D2D2D646464D3D3D3F3F3F3F3F3F3CCCCCC7070702121215A5A5AB2B2B2E0E0E0F6F6F6 F4F4F4F4F4F4F4F4F4FAFAFAB0B0B04B4B4B1717173F3F3FAAAAAAFFFFFFFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4FFE0E0FFBFBFFFA7A7FF A3A3FFA3A3FFA6A6FFC2C2FFE2E2FFF6F6FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F2D8 E7E3ADF0EDC7FDFDF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF5EDFDE1BFECCA6EE0C045F2E8BE F7F8EFF5FAF5F3F9F4F5FAF5F8FDF8FBFFFBFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFBFBF4F5F5DFE5E5ACEDEDC7FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6FF8C8CFF4C4CF87474E6B6B6EEF5F5FD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2FF9090FF5252FF4747F9 7777EBAFAFE8D3D3FBDFDFFFE1E1FFDEDEFFDFDFFFE6E6FFEFEFFFF9F9FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7D774E1D16FE1D171E6D778E4D576EBDE80ECDF82E3D77BDDD278DED37ADDD37A E1D87CD9D372DFDA71E2DE70E4DF84E1DA8AEFE79C51480F968F49C5C168C6C361E1DB7DE8E08B EAE294988F4B494404E1DB97DCD88CD8D582C0BB64CCC56CE0D682DCD27EE3DB82E6E085E8E085 E7DF83ECE488F3EB8EF3E98BFBF192E5DD7CDFD673EEE482EEE584ECE48BEFE891E9E28AEBE48C EAE38BE2DB83F7F098EFE890D3CC74E1DA82EBE48CDED686E1DA8FE8DF94EFE79AF0E89AE7DF8F E2DA89ECE592E6E18DEAE892E4E58CDDDD86DFD98BEBE295EAE390E5DE86E8E28AE2DB88EEE69B CDC37D7F7533E9E09BEAE197E7DE91F9EE9CE7DB8AE7DF8BEDE88DECE698F3ECABDFD9943C300B 483C18BCB26FDED08CEFE49AE7DF8EE7E08EEBE492E8E18FE5DE8AE9E18EE5DE8AE1DA85E5DE89 E4DC87E4DE87E5DD8AE7E08DECE38EECE18BE9DC85E6D67FE6D47EDAC972DECD76F2E18BE8D781 EBD984F2DE86E2CD76E9D77CEBD981EBDB82E0D278DDD27AF4E896F1E697EFE69AF1E89FE6D98D F1DC8BF5DE8DF4DD8FFCE29AF1D791FBE19BFFE7A172520AC7AA5CFFE896F7D27EBF9A48A9833B EAD18CFAE7A5F3DBA1C1AC7F1E0800C0AA77E8D381F4E581F6E888EDCF87B89D4AEBD378FDEA8F FDE890F8E48FFAE896F9E899FBE99EF7E69FE5D694E0D192EDE1A2EDE3A3FAF1AFD8D191868145 464109969153C2BC7DE4DE9DD7D08AE5DD97ECE39BE4DB8EE1D686EAE291ECE492FBF1A8BAAC83 55471FF1EAADF3ECA9ECE795FCF7A4776F307E743AFCF2BBDED49D302800746F41F3EBBAFFF8CD 8E8660433A16FAF8BFDFD890EEE996FBF3B3E1D99E706829ADA562FFFCB5F2E9A0EEE69BDAD286 E2D98DF1E89CFBF1A5EBE194EDE592E5DE8DEEE89CEAE4A1CCC687D0CA8CE8E3A1F2EAA1E4DC8A D8CF71E0D471F0E890E7E299DAD68DD2CF83C5C273C8C676DCD989C2BF6FCDCA7CC2BE74D3CF85 D1CE85BDB96DD7D586DAD889CECD7BE3E693B7BA67C1C372D7D787E8E698D4CF84EAE299DDCE89 F4D99AE8C98AE4CA8AA7803D78510C9B762FE3C37FEBD28FF5E19FE0D494C4BF81C8C583E2DDA0 726B480A03003937283233126C7140CBCF8FE0E398DCDE87E9E79B392C12908672FFFFE4C8C49D EEE9BAF4EEB7F1EBACE8E29BEEE89DDED88CD9D588EAE59ADDD98FDDDA95DFDC9ACFCC8ACDC889 DCD798E1DC9CDAD293E5DD9BE1D992E9E198F2EB9FD7CD81CABE75DBDF99BFCB89D8DDA5AF9D6F 6A4A2541210090844F878B52919A65696D40221E02585239A1996ABEBA72D8C874B47C35D2A769 E7D09DF2E1B994996B0006008D80529A93621918000302001F1E00E1DB9EF9ECB3EAE0C32C271B 040900969E64E8E7A6EDE3A2DCD493ECE4A3FBF3B2F7EFAEE8E09FDBD392F0E8A7F1E9A8CDC584 D7CF8EEEE6A5E6E19BEBE99CF5F4A8F7F6ACE4E39AE1DE9AEEEAA9E7E2A2DBD496F0E8AAF9F0B3 FAEFB4FAE6B3F9DDACFFEFBAEEF0B4E3F2AFD7EEA6D9F0A6E4EEA5FCF4AEFFF1B2F6C98FD1965E B78248D9A86EFAD196FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4BCBCBC5050500C0C0C4141416868688686868A8A8A 8B8B8B8787876868683333331515151818186C6C6C979797B4B3B4DEDEDEFBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCF2F2F2D4D4D4AEAEAE9595958585857070705C5C5C4949493A3A3A3D3E3D 808180C3C4C3EAEAEADBDBDB8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0 6161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818616161 CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E1 8B8B8B3738371212126C6C6CD7D7D7F9F9F9E9E9E9BCBCBC5D5D5D2626267A7A7AD8D8D8F5F5F5 FEFEFEFFFFFFFFFFFFFDFDFDECECEC9F9F9F2E2E2E3737376F6F6FD7D7D7FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEEEFED0D1FEA0A0FD6E6EFB5050FB6E6EFCCCCCFEE6E6FFEDEDFFEDEDFFE0E0FE D0D0FECACAFECCCCFED1D1FEDFDFFEF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDECC7E1E1A3 F5F5E1FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8FFF3DDFFECC6FFEEC9FFF6E1FFFEFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFF5DBDBF18A8AF65D5DFA7D7DFBC0C0FDFCFCFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3FE 8F8FFC6161FA7474F7C2C2F1FFFFF0FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE9E9E9BFBFBF787878434343414141646464B2B2B2DEDEDEFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF2F2F2DEDEDEBABABAA0A0A08989897474745F5F5F4C4C4C3E3E3E444444 818181C5C5C5EFEFEFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB 6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F414141 C5C5C5EFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 AEAEAE5D5D5D2424244C4C4CBFBFBFEAEAEAF2F2F2C7C7C76D6D6D222222616161BCBCBCEBEBEB FFFFFFFFFFFFFEFEFEFCFCFCFAFAFAA5A5A53C3C3C2727276A6A6AC2C2C2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFE5E5FFD1D1FFBEBEFFBFBFFF C4C4FFC4C4FFC4C4FFC4C4FFC7C7FFCACAFFCACAFFDDDDFFF6F6FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F8F2D6F0E2A8F5ECC7FEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFAEEDDEFCF9CE4BF6BE0C160 F6EDCFFEFDFBFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF8F8EAE2E2A6EAEAC0FBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9FF9898FF5959FB6A6AEFAEAEF4 F4F4FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFE9E9FFA9A9FF6363FF5C5CFF 8383F9ADADE8D7D7E4F6F6FAFDFDFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBDC78DDCD6ADECE6EEADB7CE7D879E0D375E3D67AE0D377DED379E2D77E E0D67CD5CC71CFC86DD6D169DBD868E2DC87E8E094F5EDA1847B45847C3CB3AF57BDBA5BDFDA82 C5BE70CFC7818982432B2604DAD69ADFDB9CEDEAA3E0DE91DBD589DCD589DCD38AD0C87FDFD98D E7E193E8E391EFE895EFE792E6DF85F3EC90EAE280E6DE7BEFE783EDE583ECE58BECE58DE9E28A EFE890EFE890EAE38BEEE78FE4DD85F0E991E6DF87E0D981E4DD8ADAD184D4CB7CDED380E9DD87 E7DC83EADF84F5EC8DEDE887EAE786EFEF8DE8E887EAE492F4EB9EEDE591DCD57DDFD880E7DF8D F6EDA2D2C8825B510DE1D890F7EEA3E9E191F4E896E1D585E5DB86E6E181E4DE8FECE5A1EDE69B 90854A0C00006E6127E3D58EF0E49AF0E697EFE697F5ED9CF3EB9AEEE695F1E995EEE693E8E08B EFE792ECE48FE6DF87E9E18BEFE590ECDF8BE4D67FE9D982EFDD87CAB861D7C571F4E390DECD7C D3C476DFD180DBCA77DDCB75F5E48EF8E890F1E38AE2D47CE1D57FDFD481F7EC9BF0E697DED388 EEE095EBD98AF3DE8FF7E094F8DD93FADC94FEE59DB89A52987C33FFE89CF8E392F6E492F3D788 D8B26A956F31C3A164FFE9AFE9DEAE392612705F33F6EA9CF3E883EBDD7EFEE9A7F3D787B6983D E4C86FFFE994FAE18EFFEA9AF4E195ECDA92E8D893EDE09FF4E9ABFCF1B0F5EBA3F7EEA4FDF4AF FDFAB9A8A465373300979256FDF7B9F4EFAFF4EBA9F7EEA9ECE299F3E899E2D98EFFF9B7DBD199 211501C3BD86F5ECB0D8D287F6EFA5A8A15B4A4213E0D79EDAD09B443A187D753DFAF3ACEAE3AA FFF7C4A19766312800FAF2BBF1E9AAF1EB9EFCF4B3655D1FE2DA9AF7F0AAEEE99FF5EEA0E5DE90 E7DF90F3EA9BEFE69AF2E79AEDE195EFE698ECE498EAE49AFBF5B0D4CF8BD0CB87E7E49CF1EA9C ECE491DED579E8DB7BF5EC96E3DF95CFC97FD5D083D6D382CDC978DFDA89CAC776CFCA7CBFBA6D B7B369C4BE75C8C276CFC97CDAD687DCD988D0CF7DAFB05DD1D080E7E497D1CB81E1D991D7CB89 D5C184F5DBA47E5921714D118D6B2BD6B771FEECA6EED78EDECF88E2DB93EAE7A4E1E3A2D6D8A3 8E8F6B0403004F4E31F1EFCAE2E3A0E8E9A5D3D09AE1DDACE9E9A4EDEDA43D37138D866AB5AF8C CBC59BE7E1AEDBD297E5DD99F3EBA1EFE89AD4D082DAD68CE2E097AFAE66C8C580D3D08DC3C17D B5B070CEC989EEE9A7FEF9B7E1D994CFC77FE8E096F8F1A1E1D788E4D68ACDCF83DAE49EDEE1A1 DAC691B693615E3C09918049787840717846716F494E482D685D48A2966DCDC686EAD88CA86D2A C99E5CFEEAAFE0CD9DACB17C070D00BAAA7BF5EDB7CFCF9C5B5B388E8D58F1E6A2F2DE9BF5E7C1 4B4839000200A1AD7EF7F4BEE9DB9EEFE7A6EFE7A6EFE7A6E7DF9EF5EDACE1D998E6DE9DE4DC9B C4BC7BD7CF8EFBF3B2F2EEA9E3E49BF3F5ABF4F5ACDCDC95D7D491E6E2A0F1E9AAEBE2A3ECE2A5 EDE1A5F7ECB1FFECBDFFDBB0F8E3B1F6F5BAE7F5B4CFE19ECDD994DCE09DF1EDA9FDF4B1FFF7B2 FFF6B1FDCB8ED58C50AC6529FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5C3C3C35C5C5C0F0F0F1B1B1B202020242424 2424242424242323231A1A1A0B0B0B0404040606061B1B1B404040717271C2C2C2F8F8F8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF5F5F5F3F3F3ECECECDADADAC1C1C19C9C9C565656 1F1F1F393939868686D5D5D5DEDEDE8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEB B0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818 616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DDDDDD868786343534141414707070DADADAFAFAFAEBEBEBBFBFBF6060602424246E6E6EC9C9C9 F3F3F3FFFFFFFFFFFFFFFFFFF6F6F6D6D6D6848584242424545454A5A5A5E7E7E7FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFFF7F8FFD7D8FEB2B3FDAAABFD8687FD4F4FFE5B5BFEBEBEFED9D9FFE5E5FFF6F6FF FBFBFFF9F9FFFBFAFFEBECFFC8C8FEBCBCFEEBEBFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6 E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFDE9FEF6D3FCE3BBFDECD6 FFFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFEDDBDBE78B8BF26868FB9899FCCFCFFEFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFDEFEA8A9FD7374FB7676F9C2C2F9FFFFFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF7F7F7C2C2C27A7A7A3838382F2F2F6A6A6AB1B1B1EAEAEAFBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7F7F7F3F3F3EEEEEEDEDEDEC4C4C49F9F9F626262 222222424242848484DBDBDBFDFDFDFAFAFACCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4 BBBBBB6969692A2A2A646464EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F 414141C5C5C5EFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3F3B6B6B6646464252525454545B3B3B3E3E3E3F3F3F3CACACA6F6F6F2222225F5F5FBABABA EBEBEBFFFFFFFFFFFFFFFFFFF9F9F9E2E2E28C8C8C2F2F2F4141419C9C9CDADADAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFEEEEFFC8C8FFB1B1FFAAAAFF D0D0FFF3F3FFF8F8FFF8F8FFF5F5FFDCDCFFBDBDFFA6A6FFBBBBFFE5E5FFFCFCFFFEFEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFDFCFEF1D5FDE5ADFEEECBFFFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF4E7CDE1C07ADEB96D E3C484F7EEDAFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF8F8EAE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDFFA7A7FF6C6CFE6B6BFD ABABFEF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF2F2FFC3C3FF8080FF4D4DFF 8080FEC8C8F6DBDBE9E7E7E6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEADA77E3D371E6D676ECDD7DEADB7CE5D87AE7DA7EE0D377DCD177 DDD279DCD179DDD37DDED683DDD776D9D46AD4CD81C3BA74E8E099B2A77B69602CD5D07CC8C46C D5CF81C7C17ED2CB92837D4C181402AAA7779E9B6C7472466464367673436D683C736D3EA19B65 B7B178D8D396F2EDAEFCF6B1FBF4AAE9E292E9E38CEEE98CEBE586E9E480F0EB89F0E990ECE58D EDE68EF4ED95F5EE96F0E991EAE38BE9E28AF8F199F1EA92E3DC84E7DF8BE9E18FE5DA87E5D983 EBDD83EDE083F2E484F4E988F2E98BEAE487F0EC90EDEB91EDE695F1E99BEAE28FDDD67EE2DA83 F2EA98E2D98FFAF0AA655B17CDC37AF2E99AF0E895EADD89EFE393EDE28EEAE680ECE695EBE4A0 E3DE8CDCD2965B4E15B0A357FBF2A8EFE398F1E799EEE598F0E799EFE696F0E797EFE796F1EA97 F5ED99F1E994F2EA95E9E28AEEE28DF4E491EDDD89ECD984ECD882E8D37DDBC572EFDE8BF3E496 D2C579E9DE94E5DB91F2E493F1E28DF7E894E9DA83E7DA81EBE087E3D781DDD17EEDE090EEE194 E6D98DEEE296E4DA8DF0E396F2DF92F3D78DFBDB91EBC87FA38037ECCF87F8E299E2D188E9DC93 F1DE91FFE99FD5B175B49359AA8D53F1DAA8715E4351441CFAF3A8D9D270FEF197FDE7B0FFE49E E2C16EB08E3DEACE80FFEFA3F2DB8FF9E49CF4E29BECDD97E9E098EEE6A1F0E8A0F9F0A1EDE495 E5DD94F6F0AFFBF9BC9B965D3D3A125A551F7C75496E6527C8BD7EF5EAA4FAEFA5F1E7A2FAF2C0 57482A79712AFFFFBEEDE3A4F4EFA0D8D28F504613E0D9A1F7EFBF463C1A524B25F5EEADF6EEAE EBE499F3EAA3CFC68D231800DAD293F6F0AECCC589605B1BD9D491F2EEA9DAD38AEFE89DF7F4A6 ECE393EEE695FBF3A2F2E797EEE295EBDF94EBE199F2E9A1E3DC94D7D289BEBA71D7D389D8D587 E1DB8AE6DE89E6DD83F2E58AF2E895F3EDA2EBE49AEBE496E6E090E2DB8BE3DC8BE3DD8BDAD383 E8E094BFB86DC7BF76E9E196E5DE92DAD587E4E08FDCDA88C4C371E4E192EAE59BD8CF8AB4A567 9B8A51C9B57D8A6B392D0E00BA9D65FFE6A7FDE8A3F0E196D8CC7FD6CF85DDDB92CCCD88D9DB98 C1C59A12171040432AECECCDDAD8A9DDDA8CF4EFA2FFFBC4CCC29CEEECAEE4E8A12523070D0800 110900776F3FF4EAB4FDF3B4F0E79EF1E99BF6EFA1E0DC8FD0CF85CFD089B1B36FC1BE79C5BF7B CAC581D9D592E6E09EE7DF9EE3DC99E6DE99F0E89FF0E79BE5DC8DECE091E3D183C2BF70D5DA8D DCDB95F5DE9DEAC98CAB874AC0AE6E7672384B4B1D645E3C5C543E39311D564B29A59E6BDFCE8E 9B6226C9A15FF8E8A4E6D89DD7E0A6182100BFB289F0E9B3DFDFACCDD0AAE6E6ADDFD287E9D384 E1CEA2565341000700364323837E4FE2D6A0F9EFADF1EAA6DDD692E5DE9AFFFAB6DFD894E5DE9A EFE8A4EBE4A0E7E09CE3DC97DDD895E3E19FE5E3A1EBE8A7DDD996D1CB89D0C887E5DD9CE9E2A3 EAE3A4FDF4B5F8EFB2F3ECB3F8F0BBFDF0BBFFECBAF2DDA9F0DEA7FBF3B8F3F3B3EAF4B0EAF6B1 EAF6AFECEEABFEF4C7FDE6C1DABB94FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDE0E0E0A0A0A06F6F6F7070706F6F6F 6E6E6E6E6E6E6F6F6F6B6B6B4B4B4B191919080808121212565656828282A8A8A8DADADAFBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3F3F3E3E3E3 9495944545452A2B2A686968C9C9C9E0E0E08F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFF EBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F 181818616161CDCDCDF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFCECECE7171712425241D1D1D818181EBEBEBFFFFFFF2F2F2CDCDCD6B6B6B212121626262 BABABAF1F1F1FFFFFFFFFFFFFFFFFFE8E8E8A4A4A45455542929297E7E7EDFDFDFF7F7F7FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFFF3F3FFCDCDFEC2C3FEC5C5FED7D8FFC2C3FE8B8CFE6F6FFD8D8DFCC3C3FEF3F3FF FDFDFFFFFFFFFFFFFFFFFFFFF7F7FFD8D8FFC0C1FEC2C3FEDEDFFEFCFCFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA ECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FAF8E1ECE1AC F2EBC9FDFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF7DBDBF48D8DF76B6BFB9B9CFCD1D1FEFDFDFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0E0FEABACFD7777FB7878F7C3C3EEFFFFECFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6BFBFBF7777773737373737376E6E6EB3B3B3ECECECFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5E1E1E1 A3A3A3424242343434565656CDCDCDFCFCFCFAFAFACCCCCC7F7F7F3737373D3D3DDADADAFEFEFE F4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4757575 2F2F2F414141C5C5C5EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6F6A1A1A14C4C4C1B1B1B4A4A4AC0C0C0EBEBEBF6F6F6DADADA797979212121555555 AFAFAFE8E8E8FFFFFFFFFFFFFFFFFFF3F3F3A6A6A65A5A5A2C2C2C6D6D6DD3D3D3F4F4F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFE5E5FFCCCCFFB8B8FFC0C0FF D5D5FFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3FFE1E1FFC9C9FFBCBCFFBCBCFFD9D9FFFAFAFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBF8FFEDDDFFECCCFFF1C6FFF9E0FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF2E7BEE0BE57 E7C16EF4D4A8FCF3E6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8EAE0E1A4E9EABFFBFBF4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FFC0C0FF8A8AFF 6262FFA2A2FFF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8FF7F7FFF5F5FFF 6B6BFEA5A5F2DADAEAEDEDEEF7F7F6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD06CEADA78ECDC7CE9D97AEDDE7FE8DB7DE9DC7FDED175 D7CC72D7CC73D7CB76EBDF91DDD389CBC46BD9D36DD9D18ECFC587D9D08F908362342A01645E13 999342DED891E9E2ACCCC495504924130D000D0A000D0B001F1D003634153A38151F1B001A1500 070100110C02322D1B6E6A36B5B076F9F3B3DFDA92EDE898EFEA94E6E084E6E082F2ED8FF5EE95 EBE48CEAE38BF1EA91EFE890EBE48CEBE48CEAE38BE0D981EBE48CE6DF87DAD27CE6DC88EADD87 EEDF87EDDD82E7D77CE9D87CE3D47AEFE18BE4DB89E3DC8CECE798F2E99EEFE498E8DE8BE1D880 DDD37DDDD382DACE86ECDF9A897C37968B3FF6EC9CEBE18CE4D884E7DB8DECE28EECE780E9E291 EAE19CE5E088F0E4A7D4C78EECE392EBDF90EBDD92EBE094EADE94E8DC90E3D98BEBE091EEE494 E9DE8CEFE593F1E793EDE38EE6DC87EEE08CEFDE8AF5E38FFAE591EAD17DE0C974F2DD89F3E192 D7C67ACFC57CF6EEA8E0D993DCD083E5D986F7EC98ECDF8BE5D982E4D881E1D57FF1E48FE9DB89 EEDE91FBEB9FEDE397E4E599EEEB9FF4E69AF9E195EBCB7DAF893CD3B167FFEDA6F9DD99E8D797 FAF1B1F9EAA2F3DB8DFFE2A5E3C58AD5BC80A18C5663512F473A17D7D28CFAF593F7E690F0D3A5 FFDBA0FFE89FDEBB749C7731E2C37DFFEFA7EBD58FF4E49BF3E99DEEE799F0EC9DF3EE9EE5DD86 EFE692EDE698F8F1AED9D597C2BF87BCBA84AEA977453E15ADA46AFFFBC0E0D48FF8ECA0F3E5B0 C5B893413112ECE2A2E6DF8FE9E290EBE49D514713C0B684F5EAB6594F36382F0EECE3A4F3EBA7 D5CE82E8E192EEE69BD4CB893F340FC6BC85E0D79F676028E1DC9BF0EDA6E1DE96F6F0A5E8E293 DFD887EDE594DDD382ECE292F1E697F3E698EDE197F3E8A5F3E9A6E2DB94B4AF66ADAA5DD6D383 DBDA86E2DC87DBD37CE6DC84FFF09AF3E798EFE59BE1D88DEDE496F7F09FEBE493F2EB98F6EF9C E5DE8DF8EFA1D7CE82C8BF74D5CD82EDE599DFD98AE5E08FE2DF8FC7C576D3CF82EBE39CFFF6B5 5A4A144833178A73417E64373C2500CDBA7FEBDC9EE9DF99D5D084D1CF7FE5E397E2E096D0CE89 D8D59491946B0002006F76607D7C61282014A19948F8ED99F2E5A4D8CC9EE0DE9CE4EAA55A5D49 0000001C1300C0B989ECE4AAEEE49FF6ECA0ECE494F4EE9DEAE79AD4D48CD3D591D9DC9BDFDC99 C9C47FC2BD79DCD594F1E9A8F2E9A9D5CD89CAC17AD7CF86F1E89DEBE294ECDE8FE4D081DFD987 DBDE8CE3E093F5DC94F0CC87A77F3CC1AE6BA49D637D7B4D54482B39301C110D07150D0359552B A08F5B98602FCCA768D9CB83D1CA87DBEAAB233200857957C9C28FC4C695C6CCA7C9C98CB6AA55 E8D177D5C18D727258040E020711059D966BFEEFBAF0E7A4EEE7A1E3DC97F1EAA5F0E9A3DBD48F ECE59FF0E9A4E7E09AEBE49EF0E9A3E9E2A0E0D699D7CD92E4DA9DE5DA9CDCD493DDD594E2DC9A C8C583C8C684EBEBA8F2F2B2F5F6B9EFF0B7E6E3ABFCF3BCEDE0ABD9CC95E0D39BEAE2A7F4F0B3 F4F0B3F2F2B1FAF6B7F8EDB4FEF5BFF7EAB4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5D8D8D8C1C1C1C2C2C2 C2C2C2C2C2C2C2C2C2C4C4C4BDBDBD8B8B8B3939391B1B1B2A2A2A9C9C9CCBCBCBE0E0E0F2F2F2 FEFEFEFFFFFFFFFFFFFFFFFFFAFAFAEFEFEFD1D1D1D0D0D0DEDEDEEAEAEAEDEDEDEDEDEDEBEBEB E1E1E19696964647462B2B2B686868C9C9C9E0E0E08F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFF FFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B8 6F6F6F181818616161CDCDCDF7F7F7F3F3F3DEDEDECBCBCBC9C9C9D6D6D6E3E3E3E4E4E4DEDEDE D3D3D3C3C3C3939393494949212121484848A2A2A2F7F7F7FFFFFFF9F9F9DEDEDE7E7E7E242424 4A4A4A929292D9D9D9EDEDEDECECECE3E3E3B4B4B46F706F4647465E5E5EAFAFAFFBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFFEDEDFFB3B4FDBEBEFEDEDEFFF6F6FFECECFFC5C5FE8B8CFD6060FBA6A6FD F6F6FFFEFEFFFFFFFFFFFFFFFFFFFFFBFBFFEBEBFFD0D1FEADAEFDCFCFFEFAFAFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF8F7E7 E2E1A5ECEBC3FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED7D7FD8080FB6262FBA7A8FDD9D9FEFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6E6FEB7B8FE7676FD6969F7BBBBEDFFFFEBFFFFFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDE9E9E9C5C5C5777777404040272727565656A0A0A0D1D1D1EEEEEEEDEDEDEEEEEE EEEEEEEDEDEDF3F3F3FBFBFBFDFDFDF0F0F0D8D8D8CACACADEDEDEE7E7E7EDEDEDEEEEEEECECEC DEDEDEA5A5A5444444353535555555CDCDCDFCFCFCFAFAFACCCCCC7F7F7F3737373D3D3DDADADA FEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4 7575752F2F2F414141C5C5C5EFEFEFF8F8F8DBDBDBD3D3D3D8D8D8DFDFDFE3E3E3E4E4E4E4E4E4 E3E3E3D6D6D6B8B8B8686868313131282828696969D5D5D5F5F5F5FAFAFAECECEC8A8A8A282828 3D3D3D8A8A8ACCCCCCF2F2F2ECECECDEDEDEBDBDBD676767494949575757A4A4A4F1F1F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFD2D2FFB3B3FFC3C3FF DCDCFFF5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F9FFECECFFC9C9FFA8A8FFC3C3FF F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFAF3F8E4C1F9E9C2FEF9DCFFFFF3FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF6F3F3DFAE E1BF45EDCD7BFEE7CDFFF8F2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF8ECE9E1ADF0EAC1FCFBEDFFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFD4D4FF 9F9FFF5656FF9696FFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFEFEFFFC7C7FF5151FF 5757FC9393F6C7C7ECE5E5EBF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7C765EADA78EEDE7EE5D675F1E283E7DA7BEBDE80 E8DB7FE6DC82EADF86E8DC89DDD386E0D691D5CC81E1DA87BBB07B615825453D005147183E3708 A5A061D1CA96E0DAAB756E41171100060101322E08848059C6C498E6E2B4E1DDABE9E3AEEFE9B4 CFC895AAA46F6D6732342E060D0502110B003F370BC5BF87F1EBABF3F0A4E3E18CE8E68AECE988 F3ED8DE7E085E9E28AEFE794F1E793EEE78FEFE88DE9E287F2EB90F2EC93E9E18CE8DF8EECE08F EBDC89F2E28DF8E78FF2E28AEAD981DCCC75F1E390EBDF91E4DB90F6ECA3F6EDA0ECE190E4DA83 E8DE87EEE48EF0E595F0E49AF2E59FC9BC75463A02DCD082F4E998EADE8CD8CC7CECE190F0EA87 E4DB8AEEE69DE9E28AE4D995E2D797EBE18ED8CB7CE9DC8EE2D589EDE295F1E599E5D98BE6DB8C EEE394E1D686E2D787F3E996E7DC8AE2D785F3E38FF1DD87F9E38EF9E18CE0C773E7CF7CFEE998 F9E798D7C87DDBCF87F2EAA5EBE29EE8DF94E4DB8BEEE392E6DB89E7DC86E7DB85E9DD87F4E690 F7E895EEDF8EEDDD8EF3EA9DEAECA1F4EFA4FBECA1FFEEA1DBB86A916E1DFFE799FEE297FCEDA7 F8E7A7EDE2A3E2D68BF2E190FAEAB2998352594612110000352612403311897D4AD8CB84EFDA98 FCDFB6FDE4B7FDE0AEF4D59DE3C183B99652EAC880FFE295F8E08EF1DE8CF6EC97ECE893CEC975 E6DD88ECE391EEE598E5DD96F0E8A8F4EAB1BDB37DB4A974C8BE895A4F18CDC28AFFFFC1F3ECAB FEF6CC463A159D925FFAF0B2F1EB99EFEB92A7A068665F36F6F3BEAEAB762B2200D1C590F9EFB5 E1D68AFDF1A0E0D487EBE09AF4EDAD48401A847E4B77723DE5E5ABF1EEA9EDE89EEEE89CE9E193 F4EC9CFAF1A1EEE592EADF8FFBF0A1F4EB9DF1E89CF1E89DE6DC98E6DD98D9D188DFDB8FF6F0A2 E9E694E7E28FE9E38DCBC56FD4CA75F4E997EAE191F8F2A1F6EF9EE6DE8DDED381E6DB89FBEF9D EEE391E3D989ECE396F2EB9DD4CD82CDC77BD7D48ADAD68EE7E196D1C877DDCD7DF0DC95FFF4B2 F1D7993A24003E2B0FBBAE7AE6DAA5261B00CDC18EFFFAB8E3E193D9DB88F0F2A5D7D894E1DF9D E1DD99F0E7A3A6A775040E00000700010000160C00827735C2B665C9BD71D3CA8DD7D594DADFA8 3D3E392A2711C6BE8EFCF3BBEAE1A1F0E89FE6DD8EF8F09DE4DD8DD8D388E2DF98E8E7A5E4E5A3 FAF5B1E0D993C7C27DCEC685DAD694E4DF9DD6CF8ADCD58ED8D085ECE596F3EB99F5E997E3D181 CFCB78D3D783D8D081DCC67AF6D58B88611ABA9D59E7D89BDEDCAA645F3A171200110F00181102 1510042614007E5016A8883EE6D886A59B54B4BB7D21290087805ADDD69FCDCC95D7DBACB2B371 C9BB6CE3C87BF2D9A54E482B0E1B0A182607898461F9E8BFEDE5A8DFDA97DFD892E1DA92C2BB73 CAC37BE4DC97F5ECA9E1DA96F1EAA4FAF3ADE8DE9DE5D99EDACE92EADEA2F4E9ABF4ECAAF6EDAB F6F1AFE9E7A4DEDD9AD6D793D8D897DFDD9FEBE9AEF0F0B4FFFEC5EFEFB2EFE9ABFFFCBFFDF1B3 F4E5A9F6E7AEF6E8B2EFE3ADE5DB9DE8DF9DF7EEABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5EFEFEF EFEFEFEFEFEFEFEFEFEFEFEFF1F1F1E9EAE9B1B1B1545554303130404040C3C3C3F0F0F0F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1D3D3D37E7E7E7676769A9A9AB6B6B6BFBFBFC0C0C0 BCBCBCACACAC6A6A6A2A2B2A3535357D7D7DD1D1D1DFDFDF8F8F8F4141412B2B2BC7C7C7FBFBFB FFFFFFFFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 B8B8B86F6F6F181818616161CDCDCDFAFAFADFDFDFA0A0A06D6E6D646464858585A7A7A7A7A7A7 979897808180676767464746272727323232888888CACACAFCFCFCFFFFFFFFFFFFEFEFEF979797 3434343333335C5C5CAAAAAABFBFBFBBBBBB9A9A9A6D6E6D4B4C4B5D5E5DAAAAAADDDDDDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFFECECFFAFB0FDC4C4FEEFEFFFFFFFFFFDFDFFEAEBFFA6A7FE4848FD 8888FEDFDFFFF8F8FFFEFEFFFFFFFFFFFFFFFEFEFFF8F8FFDFDFFFACADFDCCCBFEF8F8FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7F7E8E1E1A4EBEBC1FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF6969FD5454FDBDBDFFE8E8FE FEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0F0FFCACBFF7374FE4F4FFCAEAEF8FFFFF8FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8F8C1C1C17D7D7D343434232323363636707070A6A6A6BABABAC2C2C2C0C0C0 C0C0C0C0C0C0BEBEBED3D3D3F1F1F1F9F9F9D7D7D7939393686868999999B1B1B1BEBEBEC2C2C2 BCBCBCABABAB7777772B2B2B3F3F3F767676D7D7D7FDFDFDFAFAFACCCCCC7F7F7F3737373D3D3D DADADAFEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 C4C4C47575752F2F2F414141C5C5C5EEEEEEEBEBEB9A9A9A8282828B8B8B9C9C9CA6A6A6A7A7A7 A6A6A6A5A5A58383835757572A2A2A2929294F4F4F9A9A9AEAEAEAFDFDFDFEFEFEFCFCFCA1A1A1 3C3C3C2929295959599B9B9BC5C5C5BCBCBC9999996D6D6D4040405D5D5D9F9F9FDBDBDBFBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFC7C7FFA8A8FF DBDBFFF3F3FFFEFEFFFFFFFFFFFFFFFDFDFFFDFDFFFFFFFFFFFFFFFFFFFFFDFDFFD6D6FFAAAAFF C0C0FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFBF9F0E9E2B0EEE9BDFBFAE9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FAFDEAE3 F1D29DE1BE45EED88FFFF7EEFFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8F0F8E3BDFAEAC4FEFADFFFFFF4FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF E2E2FFADADFF4848FF8A8AFFEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FFCECEFF9595FF 4242FF6666F5B6B6EAE7E7EDF6F6F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECE6EEFDF7FE4D472D1C25FE4D675EBDF7D E8DB7CECDF83E1D77DEADE89DED47FDCD684D0C980ECE2A7ACA170261B07514B22BFBE6EF1F299 525306C9C698B3A8A3332B210A0500464323A7A565D1CD86E4E096E2DD91F0E89CE2D88CE7DC8E F5EB96EBE288EFE880E4DE78D3CC76B5AC6873673E2B1F14140A0067623DBFBE82F6F8ACDCE187 E5E983EDE97CECE380F9EF99EFE396EEE093E2D781F1E988F3EE87EDE885EBE68BE9E293ECE198 F8E7A1EDDD93F9E99CE9D988F8E993E7D880F4E68EEBDC87F4E693F2E493E9DC8CEDE38BF2EC8E E7E084DCD57BE9E28BF0E896F7EEA1EFE59BFFFCB68E843E645A19E3D892F0E597ECE191F3E898 F0E592EADE8EF1E797F2E797E9DE90F3E79AEBE090E1D686E7DB8BE3D686E2D786F3E897E6DB8B F3E898F6EC9CEDE594F1E999F2EA9AE5DD8DE0D888E6D580EFD57FFEE892DFC773CDB561E7D280 F2E08FE5D484D5C578F4EBA0EFE297F0E69DE5DD92ECE498E6DE90E6DE8AEFE48FEADF86F2E78E F7EC93ECE187EDE18BE8DC88E6DD8DE1DB91F6E8A0F4DA90F6D990876316E7CC7BF6E894ECE390 F2E99AE9DC94F0DB99E9D98DDCD484FAEFC1A39678120702190F007C714972644139251C2B1100 4125065C4221706850B7B79CEAE1BAFEE6B2E1C381D1A757EEC16AFFDD81F8DF83F3DE86F5EB96 E7E290F2ED9DF4EC9FEEE399EFDF98F3DF9BF3DD9BFDEBADE7D498D3C38891854B4F460BCCCA97 FFFFDF93936739390CD8D589E3DD93F9F1A9DBD591443E0DD7D8A8BDC58E1C2700A9A46BFFF2AE EDDA92F7E599F2DF93F6E4A0F8E7AAF2E4AB655F382C2C00E1E5A0EDF0A7EDE99DF4ED9FF6ED9F F5E99AF3E697F5E698F8EC9DF9ED9FF5EC9FEDE79DF0EDA3E0DD93E3DB91EEE69AE1DA8DDCD588 F6EEA0E6DF91F4ED9EF9F2A4E4DD8EDAD284E0D88AE8E591E4E58CE9E68EDCD47EE5D684E5D484 F7E496F6E497E8DC8EE4DD8FE4E393D5D886D5D987D4D78FC0BF86DCD390DECA78E7C069F9CF92 D4A4699F6C32523027474027EAF4B4E6EAAC393918A19B72FCF6B7E1DE84E4E587F2F2AEB8B684 B2AF7DE8E39FEEE493DAD695454C31585C484F4C39160F00D5CC9CE3DC97D4CF7EE0DD90E3E2A7 77765A000000969275E6E6AED7D593D6D48CE6E397D0CC7ADAD581E2DD8AE6DF90ECE399F0E7A1 E4DB96F3E9A1EEE49DC7C07AC6C17FCBC788D4D191D3D18ED1CF87D7D487E5DF8CEBE48CF2E68F EADC8CD5DA89C7CB7BC2B26AD5C479F0DA8D9A762CC1924FFAE3A1E6E8A79CA169282A02211E00 736951B1A28296804B8A6F20D5BC5AFFED8DE9D78BE1D69A8D86565D5832EFDF9CF4E9A2D3D392 E8E69AF2E1A3FADAB4DEBD9036250E000000A2AB8B5E5D46403629DBD8A6B3B073D2CE89DFD98E DED689E7DE94F0E7A1F4E9A8F0E6A5F3EAA6EEE79FF5EEA9FAF1B3F8EFAFF5ECABF2EAA7E9E29D F1EAA4E9E29DDDD793E1DB99E3DC9BD3CC8DDDD496EDE3A5F6EBB1FBF0B5FDF4B5F3EBA8ECE49B E2DB90E4DD96E2D89CE2D8A6E8DFB0E4D9A4E4DA9EEBE1A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFBBFC1BF5F605F383938484848D2D2D2FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3D0D0D05F5F5F414141555555656565676767 6868686666666161614B4B4B404040707170B1B2B1E4E3E4DBDBDB8C8C8C3D3D3D272727C6C6C6 FBFBFBFFFFFFFFFFFFEBEBEBAEAEAE5E5E5E1616167D7D7DF7F7F7FFFFFFFFFFFFFFFFFFFFFFFF F1F1F1B7B7B76C6C6C1313135E5E5ECCCCCCFBFBFBD8D8D88B8B8B4A4A4A3536354848485D5D5D 5454544849483B3C3B3132313131314040406D6D6DC6C6C6EBEBEBFEFEFEFFFFFFFFFFFFF9F9F9 BFBFBF6E6E6E4646463B3B3B5E5E5E6868686465644949494545456060609A999AE3E3E3F9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFB0B1FDC9C9FEF7F7FFFFFFFFFFFFFFFCFCFFC3C4FF 5E5FFE6A6AFE9B9BFFE2E2FFFDFDFFFFFFFFFFFFFFFFFFFFFEFEFFE7E7FFAEAFFDC6C6FEEDEDFF FBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FFFFF3FFFFF4FFFFF9FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCACAFF5D5DFE4C4CFEC8C8FF EFEFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEEEEFFC5C6FF6768FE4040FEA7A7FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF4F4F4A4A4A44949490B0B0B0A0A0A2626264E4E4E6868686A6A6A686868 686868686868686868636363949494DEDEDEFFFFFFD5D5D57D7D7D3A3A3A575757626262676767 6969696666666060604F4F4F3F3F3F717171B3B3B3E9E9E9FFFFFFF9F9F9CBCBCB7C7C7C333333 393939DADADAFEFEFEF3F3F3B9B9B9666666252525616161EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF F6F6F6C3C3C37272722B2B2B3E3E3EC4C4C4EEEEEEE7E7E78787875D5D5D5656565B5B5B5D5D5D 5656565050505050503D3D3D2A2A2A2A2A2A525252929292D0D0D0F9F9F9FFFFFFFFFFFFFFFFFF C5C5C57777774040403A3A3A5555556B6B6B666666535353454545595959949494DADADAFCFCFC FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFC2C2FF A4A4FFE9E9FFFFFFFFFFFFFFFFFFFFFDFDFFEFEFFFECECFFFCFCFFFFFFFFFFFFFFFFFFFFE1E1FF B6B6FFC1C1FFEEEEFFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF9F9EEE2E3A8E8E9BAF9F9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7EE F4E3C1E8CB82DFBD55EEDCA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFBF4FFEED0FFEDC8FFF1CEFFF9EA FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFEFEFFFBABAFF3838FF7F7FFFEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFABABFF 6363FF5959FF9090F6D8D8ECFBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECE6EEADA7AE5D573D5C764D6C865 DFD371E8DB7CE6DA7EDFD47ADBCF7ADED57FDED784E6DD9AB0A672190F00847D4AECE8A3E0DD93 E7E7A3635F2B5B552F130D08211C0A837D4FDEDAA0EAE6A0DEDB8CDFDA87D8D280E8E08FE0D584 E2D480E9DB82E2D777E0D86CE7E076CFC969E2DA8AFFF6B6D5CB95756E42150F00141209636229 DFE199F9FAABF2EB92E8E187EBE48CF3E994EFE590F3E991F3EA8EF2EA8DF1E98DF2EB91EDE690 EAE090F2E199EFDF94F4E495E6D785F4E590ECDE86FAEC93F5E78FEDDE88E3D481E7D985F1E78D EDE889E6DF84E0D97FE5DE87EBE38FE6DE8DEEE597E1D98FF1E7A0877C36655B14A99E4FE4D987 F6EB9AF1E694F2E795E6DB8AEEE391EFE492F2E695EFE493F0E594F1E694E5D987E1D583EFE391 F7EC9AF2E797F1E696EBE090EDE393EFE696EBE393F0E897F2DF8BFFEC97EAD17BDBC26ED9C370 E5D17FF9E697EFDF8FCAB96CC1B465DCCF82E4D88CE8DF93EBE295F0E596EDE390E8DD88E8DD84 EADF85ECE188E6DB82EEE48EEBE08DEADF8FE9E097F0DB94FFF1ABB69149BD974BFFF3A4F0E38E E7E08EF3ED9EF0E49BF0DC9AFBEBA5EFE8A3B5AB82201509160B00786F44E7DFA7FAEDB9E5D1AC B89F7EA4895CAF975F55492232280C25170D7F6937D0B577D2B26ED6B56AF2D585FFE694FBE695 F7E597F1E697EFE79AF0EA9DEDE698EFE79AF5EB9FF4E89DEFE49CF4E6A1F4E5A4FFF3B3A49051 50431298956F231F06BBB677F7F0ADEDE594EBE19D635627A39B65D1D09B1615059A9D5FF6EDA9 F4E59CF2E699E2DD8CE7E797D8DB91F3F3B2C2BF854B4115503E05FAE8ACF4E2A0ECE297EBE596 F0E798F4E999F4E696F1E191FFF7A8F7EA9DFEF5A8F0EAA1EDE9A0F3EFA5F2EB9EECE596EAE395 EDE698F4ED9FE5DE90F4ED9FF5EEA0E9E294E9E294E5DE90E4E18EE3E28ADBD77FDAD37FFCF19E E1D284DCCB7EECDF90F5EA9EEEE79BE6E496E0E092D3D886D2D38BDBD098CEB57DE9C67CCFA349 976124754309D6B079C4A9991B1200D5DAA0F5F5C13B3B21A39C77FFFEBFE6E28AF3F29CB6B477 161509595723FBF6B1F3E79AF6F0B4C7CCAE969A7F615F4D554F35DFD8A8E0DA98E3DF94E2DE95 FFFECA626046000000100E085F5C1CD8D593DAD68DD6D384CBC976DCD783E3DE8BE6DF90EAE196 F1E7A0EFE59EE7DD95E6DD95DED790D8D391D9D796C8C786D1D18DD8D78EEFEDA0EDE794E0DA82 F6EB94EDDF91DBE090DEE396E6D48FE7D68DF1DB90D2AE65C18E4CFFEEACD8DA97B1B77D707343 2A29025B52377C6B4C4F3910887120F0D979EFDB7BE8D58AEBDEA2EDE4AED6D294F6E69FF1E59A DDDC95E9E798F4E0A4FFE0C0E7C5971503000300007E8563FFFEE7837B6B4C4A20E3E0A5D8D592 EBE59BDED688F4EBA0F1E7A0F0E5A4EDE2A2F9F0ABF3EDA3F6EEA8FCF4B5ECE4A3ECE4A2F3EDA9 E9E29CEEE79FF5EEA8F6EEABF4ECAAF4ECAAF6EEB0EDE3A5EFE5A7F5EAB0FBF1B6FEF5B9F6EDAC F1E9A1F6F2A9EDE8A3F1EBB0F2ECBDE7DEB4E9E0A6EEE5A6EFE7A4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9C4C5C46E6F6E4B4C4B595959D5D5D5 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE8E8E88D8E8D5A5B5A434343333333 2828282626262B2B2B3C3C3C636363929292CDCDCDF2F2F2F9F9F9DCDCDC9898985151513D3D3D CCCCCCFBFBFBFFFFFFFFFFFFEDEDEDB7B7B76E6E6E2E2E2E8B8B8BF7F7F7FFFFFFFFFFFFFFFFFF FFFFFFF3F3F3BFBFBF7B7B7B2C2C2C6F6F6FD1D1D1FAFAFAE4E4E4AFAFAF8080806364634E4F4E 3C3C3C2929292C2C2C3A3A3A4E4E4E6C6D6C969796C4C3C4EEEEEEFCFCFCFFFFFFFFFFFFFFFFFF FDFDFDECECECC4C4C48989895253523131312727272828282D2D2D5D5D5DAAAAAAE3E3E3F8F8F8 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFB0B1FDC7C7FEF3F3FFFFFFFFFFFFFFFCFCFF DEDFFF9D9DFD6262FE5252FECBCBFFFBFBFFFFFFFFFFFFFFFFFFFFFDFDFFE6E6FFAEAFFDBFBFFE E1E1FFF6F6FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFDE9FCFBD6FCF8CEFDFAE1 FFFEF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBFF5F5FFE4E4EFE C9C9FFF0F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4FEB0B0FD595AFD4141FEA8A8FEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F5F5A7A7A75252522626261919191B1B1B222222262626262626 2626262626262626262626261F1F1F656565D1D1D1FFFFFFEDEDEDA9A9A96767674B4B4B373737 2929292525252C2C2C3C3C3C5A5A5A8C8C8CC3C3C3F2F2F2FCFCFCFFFFFFF9F9F9D1D1D18A8A8A 4848484E4E4EDDDDDDFEFEFEF5F5F5C1C1C17676763C3C3C717171ECECECFFFFFFFFFFFFFFFFFF FFFFFFF7F7F7C9C9C9818181414141515151CACACAF0F0F0EFEFEFB2B2B28484846262624E4E4E 3E3E3E2D2D2D2121212323233A3A3A585858787878A7A7A7DCDCDCFBFBFBFEFEFEFFFFFFFFFFFF FFFFFFEDEDEDCACACA898989505050323232242424292929414141676767ADADADDADADAF5F5F5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FF C3C3FFA4A4FFE8E8FFFDFDFFFDFDFFF7F7FFE4E4FFC7C7FFC7C7FFF6F6FFFFFFFFFFFFFFFFFFFF E7E7FFC3C3FFC3C3FFE0E0FFF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F8F7E2E9E4A0DFCE71E0C37AF0DFBCFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8FFFAE0FFEECBFFE4C1 FFF1E1FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9FFC5C5FF3030FF7474FFE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9FF 8989FD4242FC8E8EFEC9C9FEF2F2FCFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDCD6DDFCF6FEBDB79E6D875 D6C865DCD06EE3D778DED176E3D87ED9CD78E3D987E3DB90D0C6871E15006A6230ECE89CDCD98E E5E0A5E1D9B4514A33030000242108ACA86BEFEAB1F2ECAACAC77BD2CD7AE1DB84DCD480EADF8F E1D484E1D27FE6D97FF0E385E8DC78DDD46EE5DC79E1D87CD8D179F2EA9BFFFCB5CCC685555014 130E023A3611B9B37EEEE5A6F5ECA3F1EB95F0EA8DE1DC7CF6ED93F9EF9AF6EB9CF5EA97F8EF95 F0E787E9DF85EBDB8FF1E193EFE08FE5D781F0E28AEBDD84F1E38AF5E78EEEE087E9DA85EEE18B F4EA90EDE789EAE288E9E288E9E188EAE28CEDE592E3DA8AF1E898E1D88AF7EEA1C2BA6DCCC170 F2E894EEE48FE7DC89F2E894EDE38EEADF8CEADF8DE7DD87EDE28EF0E592EADF8CEEE290E9DD8B E9DD8BF6EB98E5DA8AE8DD8CECE191F0E595F2E696EDE594EFE393FCEC9AF7DE8ADBC370F1DB89 FAE592E4D17FF4E393AA9949A49544E1D484FBEF9FF2E897DACF80DDD283EEE391F1E792E9DF87 F1E68DE6DB82E5DA81DFD37EEEE490EBE08EE6DA8CEBDD97FDE7A4EFD38D9D7630FCE399F6DC8C EADC8BE2DD8CEFE99DECE19ADECD8DEFE1A5BFB581271D001C1100534926DBD499F0E8A3E0D68F FBF1B5FCECB1BBA762C1AA59FBE1A6E5CB9E9B845138210E1C07005B4817917F49B9A76AE9D796 FCEAA6F9E7A0F4E29AF2E099F5E69EF2E89CF5EDA0F3EF9FEBEB99F5F3A2ECE899ECE397EFE199 FFFCB7D7C58C382A18352906A89D5FCBC17FFEFDB1827637655927FFFAC4463B1B716833FFFEC1 EFECA6F9F5A6E3E392E8EB97DEE190E9EBA2B8B4776F6630AD9D6A3C2600EAD098F5DC9EF0E59A ECE697EEE898F4E999EFE493E8DA88F2E596F5E999FFF6AAF6EDA3F0E8A0ECE69CEBE397F4ED9F F3EC9EE9E294EAE395EEE799F2EB9DF6EFA1F1EA9CF6EFA1F3EC9EE2DB8BD5CF7CDED985DBD583 EFE796E7DF8EE1D788EBE295F7EFA2F1E99EEAE297ECE59AEAEA9AD8D289EBD497FFE3B4E4B273 71460A76510DD2B77CFFF4BF63543F0C0000BAB284EBECC1333018BEB68FF7EDADE8E091F1EDA3 5B583B34310CE9E7B2D5D088FAEDA7E5DEAD363A2300020000000099966EFFFDC4F6EFAECFCA86 E3DEA1D3D1A1302D0F0000000603006C6828F3F0ABD6D289DEDB8CEEEB99EEE995F1EB9AF3EC9D F0E79CEAE099E3D992EAE098E7DE94F2E9A3EBE4A0F0EBAAD1CF8CCECB87E4E099E6E094EBE492 EFE890EEE38FE4D689D1D688D5D98DE7D591EFDE96F8E498DEB972C08D4DFEE1A1E8E8A6D5D89F B7BA856C6C3B261F00180700110000644D16F1E68DF7E38BF2DF98E4D79AEDE5A9E8E39FF2E499 EDE197E4E39BEDEA99FAE9AAFFEEC9B28E5E190500191709242B0ED8DAC2F1E9D5201C00AAA671 F8F4B4EEE79DFEF6AAEBE298FAF1A9F3E9A6E6DC99F1E9A2F3EDA3F4EEA5F2EAAAEBE3A2F1E9A7 F6EFA9E5DE96ECE59DFAF3ABFAF3AEF7EFADF5EDACF9F1B2FAF0B2F9F0B2F6EDB1F9EEB6FEF6BC FBF5B6E9E5A2F0EBA8F4F0B0F4EFB9E2DBB1DBD3AEF7F0C0FEF8BFFDF6BDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE3E3E3BABBBAAAAAAAB0B0B0 EBEBEBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6CCCCCCB1B1B1A2A2A2 9898989090908F8F8F9292929D9D9DB5B5B5D2D2D2F0F0F0FFFFFFFEFEFEEEEEEECFCFCFADADAD A3A3A3E6E6E6FDFDFDFFFFFFFFFFFFF7F7F7DDDDDDBBBBBB9D9D9DC8C8C8FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9E1E1E1C1C1C19C9C9CBBBBBBE9E9E9FDFDFDF3F3F3DCDCDCC6C6C6B7B7B7 A9A9A99D9D9D9393939595959F9F9FACACACBDBDBDD4D4D4EBEBEBFCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFAFAFAEBEBEBCDCDCDADADAD9696968F8F8F909090969696B2B2B2DCDCDCF9F9F9 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFB0B1FDC0C0FEE5E5FFF9F9FFFFFFFF FDFDFFECECFFC3C4FE9091FE7A7BFED7D7FFFCFCFFFFFFFFFFFFFFFFFFFFFDFDFFE6E6FFAEAFFD C5C5FEECECFFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F4F3D3EBE5A6EAD179 F2DFA5FCF7EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCACAFF5F5FFE 5454FED8D8FFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDFEC2C2FE6666FE4242FEA8A8FEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAD4D4D4ACACAC9898989191918F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8B8B8BAFAFAFE7E7E7FFFFFFF9F9F9DADADAB9B9B9A6A6A6 9A9A9A9090908E8E8E9292929C9C9CB0B0B0CECECEEAEAEAFFFFFFFFFFFFFFFFFFFCFCFCE9E9E9 C8C8C8A9A9A9ABABABEFEFEFFFFFFFFAFAFAE2E2E2BFBFBFA3A3A3BBBBBBF6F6F6FFFFFFFFFFFF FFFFFFFFFFFFFBFBFBE6E6E6C4C4C4A5A5A5ACACACE5E5E5F8F8F8F8F8F8DEDEDEC7C7C7B4B4B4 A7A7A79E9E9E9595958E8E8E8F8F8F9E9E9EB2B2B2C5C5C5DCDCDCF6F6F6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFAEEEEEECDCDCDADADAD9898988D8D8D909090A0A0A0B8B8B8DFDFDFF4F4F4 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6F6FFC3C3FFA4A4FFE7E7FFF5F5FFE6E6FFBDBDFF9595FF8585FF9F9FFFEFEFFFFFFFFFFFFFFF FFFFFFE8E8FFC5C5FFC3C3FFDDDDFFF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBF7E7F4E5B4EEDB98F0E1AFF8F1D8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FFEFE2FFE4CB FFDFBFFFF0E0FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFFCBCBFF3C3CFF6B6BFFC9C9FFF3F3FFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFEBEBFF BABAFE6C6CF44343EEB3B3FAE9E9FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6D676DFCF70E0D06E E7D875EEE07DE4D876E0D374DACD71E0D57BD7CB76DDD186E8DE9E655E1D3C3610E4DF87DAD881 DBD691F5EDC58A7D6C160C00363015C9C874F5F1A6ECE6A2E0D88ED6D07DDDD77FE5DE85D7CC78 E1D583E2D384E3D37EDACA71DDCF70E4D779EEE182E9DD7BDED46CE6DE75F1EB83EBE386FBF3A3 FAF6B7978C5E3E32211509007E724FEEE6ABF6F4A6F3EF8FEFEC89F0EA8FF6EE9EF5E9A0F1E597 F3E78DECE279E7DB7BE8D988F7E894F2E38EEEE088F0E28AF0E289EBDF82F5E88DF8EA91F9EB93 F6E990EEE489EDE489E9DF86EBE188EFE48CE6DB84EAE08AEAE08AD3C974D8CD7BF4E996F5EF9D F0E58FECE28BEBE18AEDE38DEEE48DEDE38CEFE58FEBE18BEDE38CF7ED96F8EE97F0E690F6EA98 F7EB99F0E492F2E694EBDF8DF2E694F4E895F0E492ECE08DF0E491F9EA99FDEA9ADCC473E5CD7D EDD787F0DC8BE9D684CBBA68BDAD5ADFD07DF8EC99E8DC89E0D582D4C675DCCE7CECDE8AEEE08C E9DE86F2E88EE8DE87E6DC86DFD481EEE392E9DE8EE3D58BF4DF9CFFEFAE967431CAA863FBE399 F8E193F2E595E3DD90E4E096E8E09BE2D698E2D5A4756B48120600271C00958E5DD7D088E6DF8B E7DE87E7D98AF5E495F7E68EDDC768B9944AD4AC70FFE7AFF3E8B3BAA876635A3B241D01342D06 786F3DDACC94FFF0B5EFD99AFBDB9FFFE0A1FDE6A1FBEDA3F4EE9EE5E692E3E691F4F5A0EEED99 ECE795FAF0A1D6C98D473115D2C292BFAF73E3DA92CABB865E521DE9DC9E98865A5C4919F8EFAD F6E1A0E0DF94E7F19ECFD381E1DA89F7EEA3C3B072745822EADEAFD1C08F231600DED99AEEEBA6 EBE79AEDE797F1EA9AF5EC9BF3E795EDE18FE8DB8CF4E798F6E99CF3E89EFCF1A9E8DF96E4DC90 EFE89AF2EB9DF5EEA0EDE698EEE799F3EC9EFBF4A6F2EB9DF1EA9CF2EB9DE7DF91D4CC7CE3DC8D E6E191E2DF8FE6E393F1EEA0EDE99CEEE79BF0E69DF1E29BF5E69FEDDF93F9F5AAF1D08ECA906D 8D5524B38C33D3BB75FFF8BF9999660300001003003627146B6648140E00E1D7ACEFE39FF9F3AA EFE6AA251F04A6A47BE8E7AD8D873AD9CB8CA398750303000809002A2A16DDDCA1D9D592E3DD9B FEF7BCB7B08019150000000024230486844FE0DB9AEFEBA4E6E397FEFDB2EDE896EAE493E5DE8D E3DC8DE8DF94EAE099EDE39DE8DE96E6DD93ECE49DEAE49FF5EFACE0DC98D2CE8ACDC980D2CC7E DED885E1DA84EBE08DEBDD93E0E598DDE196E4D28FE7D690F5E197D7B36CBB8948AA88554C4A24 87874BC0C186D1D19677714C1003002411009A864CEAD688E8D688EADA95EFE4A4E7E09CE8E495 E8DC8BE4D98CE1DF96E5E38FFBE8A5FFDFB4AF8B570B0000928F75666E471B1B0720180E060300 7F7B4CF0EBAFEAE39CE5DF94E2D98DF4EBA3FDF3ADEFE5A0F1E9A1ECE69AECE59DF4ECABF3EBAA F2EBA8F3ECA7EFE8A0F6EFA7F5EEA6F3ECA6F4EDA9F4ECABF1E9AAF5EDACF8F2B2F3ECAFECE5AC EFEAB1F1ECB1F9F5B5E8E5A6FFFFC89C986A1C17022F270DDED9BCD4CFB0C6BF9DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFB0B1FDBBBCFEDDDDFFF4F4FF FEFEFFFEFEFFF6F6FFE2E2FFC7C9FEBCBDFEEAEBFFFDFEFFFFFFFFFFFFFFFFFFFFFDFDFFE6E6FF AEAFFDCDCDFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8EEEECBE0D78F DCB13BE6C369F5E6C2FDF9F2FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6FF 5E5EFE5959FEE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFDCDCFF7979FF4444FEA7A7FEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6FFC3C3FFA1A1FFD9D9FFD7D7FFB5B5FF7E7EFF5C5CFF6464FF9595FFECECFFFFFFFF FFFFFFFFFFFFE6E6FFC1C1FFC3C3FFE2E2FFF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF8F1FFEAD5FFEACAFFFCE0FFFFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F7FFE2DD FFDBCBFFDEC4FFF0E3FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFFD0D0FF4E4EFF6666FFACACFFE4E4FFFCFCFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6FB CECEFB8686FC5C5CEF5C5CE6D1D1F8FCFCFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDCD6DE0D070 EDDD7BE9DA78E2D471E9DD7BE7DA7BE7DB7FDFD57BE2D681DACE88CAC08B5650047D7A1EE5E37F D5CF81EDE2B1867A5D0A0000413821E3DD9DF5F39CDCD784E2DB8CE7DF8BE7E087E3DA7DE6DC82 D8CD78DECF7EDFCF80E2D27DD0C067CEBF60E2D378D5C56CDDD06FE5DA71DFD76BE5DE72EEE682 ECE48BF9F0A8F0E6AEF7ECC16658370400006F6737F2F0ABFEFDAAE9E88BF3EF96EFE796F3E79C F0E292F0E187EBDF78E7DA78DDD078F2E38CEEE088F1E488E7DA7EEDE084E4D77BEEE185EEE185 F1E488EFE287EEE389F5EB92E8DE85E3D980E8DE85CCC269F7ED94DCD27AEAE088DCD279EDE48A E8DF84EFE58CEDE38AF2E88FF2E88FEEE48BECE289EBE188ECE28AF5EB92F0E68DEFE58CF5EA94 EFE290F1E593EDE18FE6DA86F2E390F3E491F2E38EF1E28FECDC89F1E38EF9E896E9D585EFDA8A F6E192E3CE7FE2CF80DFCE7BBEAD5BDBCA78DDCE79E7DB85F0E48EEEE28CE2D27DECDD88EEE088 E9DB83EBDF88EEE48DEFE590EEE491E6DB8BF2E797EEE194ECDB93FFEDACBB9C5C8F702CFFEBA5 F2D68DF2DE91F5E899EDE59AE7E19AEAE5A2E5DC9FBFB48B3A2F171A0E003B3215E9E4A6F2EC9B F2ED90F1E98AF4E88FEFDF88EDDC7FF9E585FBE593C2974FBD9A56F8DDA1FFF9C3E4D7A5E9E2B3 70693B0B050039300DBBB07DFFF2C0F7E4ADF8E4AAF6E3A5FBEAA6FEEFA4F7E89AF5E596FCF4A5 FEF3A4F2E095F7E3997E5C26895637C39363C49765C099665735048E6B3C8863332B0802AF814C F0BF85FFD999FFE2A0E6CB84FDE39BFFFBAFC9B86E72611FEEE6ABFFF8C4A39E67090900B8BD79 EEF3ABEAE79AF0E999F2EB9AF2EA99F2E996F3E994ECE08FECDF91F2E597F4E69EFAECA4E7DB93 DAD286EEE799ECE597FAF3A5EDE698E7E092E9E294F6EFA1F2EB9DF2EB9DF1EA9CEDE396E4D88C F0E79CF5F1A3F7F7A9EEF1A2F0F2A5E8E59AEAE39AF7E8A2FBE6A1FEE3A0FEF0AAFDDF96AE813A 61280AC29062FCE187F3E6A1EEEDBB252918525130756B481002000801003E361FF1E5B2E8DC91 F0E79CD3C893292002C2C091CFCF87DCD883F6E8A9897C620000000404002E2F17E8E8A2D3D188 F8F6B8E5DEAD38300E0903008A885BDDDEA3F2EFAEF9F2ADE6E097EAE499E4DD90EEE797F0E998 E1DA89DBD485E1D98DDDD58DD9D188E4DC91EEE69CEBE39BF4ECA5F7F0AAF0E9A3EAE39DD4CC84 DBD486E0DA88D8D37DEADE8CEBDB92EAECA0EBEDA4F1E1A0F0E29BF8E49AECC981A77232BF9B5B 131000181500C0C07DDBDC98F2F1C4594C2C0E00005A4A0F72601BA69850F3E3A5F8ECABEDE89D EAE68FEBE08DEDE195E5E399E3E089FFEFA8F4CF9F865F252712005A583EFFFFDE9A9C814C4534 706C4CD4CFA1F0EBB3E9E19D9F964CA2994CE4DA91F1E7A0EEE49FFBF3ABF9F3A7F3EDA5FAF2B0 F7EFAEF3ECA7F3ECA6F4EDA5FAF4AAF6EFA6F6EFA9F7F0ABF5EEAAEFE7A6ECE5A4F7F4B1FCF7BA F2ECB5EFEAB3F1EEB6E8E6AAFEFDC2F9F8C44F4C21050000040000130B061B1404100901FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFB0B1FDC5C6FEEFF0FF FEFEFFFFFFFFFFFFFFFDFDFFF7F7FFF1F1FFEDEEFFF9FAFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFF E6E6FFAEAFFDCDCDFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFAFAF0 F2EBCCE0C069DEB247E3BA55F3DFAFFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF6F6FF B6B6FF5858FE5A5AFEE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDFF8585FF4646FEA7A7FE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6FFC3C3FF9797FFA8A8FF7979FF4242FF5353FF8C8CFFBEBEFFE6E6FFFAFAFF FFFFFFFFFFFFFFFFFFDEDEFFB1B1FFC1C1FFF2F2FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE2E3A9E8E9BBF9F9EEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFCFFFAF4FFFAF2FFFEF7FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F3 FFE2CAFFDBC8FFDDD4FFF0EDFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFD5D5FF6060FF6969FF9C9CFFDBDBFFFCFCFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF8 E6E6EBA6A6EB5151FC6C6CFBA5A5F9E7E7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8D878 F0E080E8D876DCCE6BE7D976DACE6CE2D576EADD81D7CC72E8DC87DFD38CA99F69A49F4EBDBC56 E0DD7CEDE5A2958A6310030053471CC5BD7FE6E293CBC571E7E08CE2D983E0D97EDCD376DDD376 E1D67EE6D887E4D486DCCD7EE1D27DDACA70DFD171E5D57CECDD84E6D77AE4D875EDE27CE9E07B EFE585EBE185EEE390EBDF96F6EDAAFFFBC29B93611C15062E2900ACA968F7F6ABEFED9DE9E490 F2EB96F3E68EF0E287F2E285ECDC80E0D376F2E58BF0E387F6E98DE9DC80EFE286E4D77BEDE084 ECDF83EEE185F1E489EEE289F8EE95EEE48BEFE58CFCF198DFD57BE8DF84E8DF83E1D77CD8CE73 EBE184E7DD80E0D77CEEE48BEFE58CEDE38AF0E68DF0E68DECE289F2E88FF8EE95E8DE85E3D980 F3E892EFE390EFE390EEE28FE2D682F4E491EBDC87EDDC87F4E38EF2E28BF2E28BE7D57ED5C271 FEEB9EF6E293E5D283E9D787C6B563D6C573F5E492EBDC87F3E791EDE18BE9DB86EBDB84F6E48D F1E089E9DB83EEE48CEEE48DEEE793F3E998EDE292F5E99AF2E498F6E19AF2D4958C6C2BE7CC88 FCE59DF7E194E9D78AEDDF93F5ECA2EEE8A1ECE7A6CFCA8E7C754F180D04221800867F48EAE49B E8E28BE6DD81F0E58AF1E28AE9D982EEDE88F0DD85FADC89FEDE8DDABC6FAD8F46DABF79EED696 DCC78DFFFEC9BCAF7B2118111A14027E7B50E4E8B2ECEDB2EBE3A7FDEFB1FEEAAAF7DB99EFCD8B E8BC7AB58949A077396A44073509006D39078C5A22936837431B026240198361382D0700714A1F A6773D9D672F9961209F6527B78146C79D5BD4B26D6C560DEBE09CFCF6B8EDEEB690915A8C9150 ADB36FDADD93EFE99AF3EB9AF3EA99F0E794F0E692F1E792EADE8CE3D787FAED9FFBEDA3EFE099 E3D78DDDD589FEF8AAF4ED9FF5EEA0F2EB9DF3EC9EF3EC9EFAF3A5F5EEA0F3EC9EE7E092E5DB8F F5E89FFDF5ABF0ECA0ECED9FE0E394E0E395E2E095EEE49BFEEDA8FFE8A5FFE6A4F5CF8FA7732C A073293F1000A38558FFF69DECE4A3A09C74040300C7C6A3C2C19B2D2A19211C0F958D65FEF5B9 E9DE8BE2D68AC0B581251D09CFCD98FAFAACE8E68AFCEFAFCCC0A47E79714646252B2B13D8DA8B E6E496EBE5A5C1B88A020000999367FDFAC2E0E198E9E69BDED78EF2E99FD0C87B948D3EE7E090 EAE392E3DC8CE6DF91EAE297DCD48BCDC57DDDD58AF2EB9EEBE399F6EDA4F3EAA2F1EAA2F2E9A1 EFE79CDFD78AE0D888DFD885D8D07FEFDE95E7E99DE4E69DEEDE9CEFE29AF4E196F0CC83CB9654 C9A563645C22C3BB81EBE9A4DCDC92EEE7B9EEE2C5726344160802302313847638FAECB2E2D998 DED889E5E183EBDF8CF3E79DE7E49ADEDA80FFECA1DFB884B28A4B422B07171400D2D9B0FFFFE9 B8B2A0D7D3B3EEE8BEDED9A2E8E09ED1C87ED2C97CEDE49AECE29BE3DA94F5EDA5F5EFA4F1EBA3 F5EEACF5EEAAF8F1ABF7F0A8EDE79DF4EEA4F4EFA4F5EEA6F7F0ABF3ECA8EEE7A6E5E09CF2EFAC FFFCBFF9F4BCF2EDB8EFECB5F6F4BBF3F1B9F5F4C09390668F8B69928F738F8A6DB0AB8EC4BF9F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFAFB0FDC2C2FE EAEAFFFBFBFFFEFEFFFFFFFFFFFFFFFEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF F5F5FFDBDBFFABACFDC5C5FEEEEEFFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFDFBF7ECEEDDAFE4C370DEB348E6C879F3E6C4FBF8EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7E8E1E1A4EBEBC1FCFCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFF F2F2FFB1B1FF5555FE5A5AFEE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FF8989FF4444FE 9E9EFEFAFAFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5FFB9B9FF7D7DFF6E6EFF5C5CFF5656FF8585FFC2C2FFE9E9FFFFFFFF FFFFFFFFFFFFFEFEFFF9F9FFD3D3FFA9A9FFC0C0FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9F1EEE2B4F1E9BEFCFAE5FFFFFB FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FCF8EFF4E2B8F7E1C3FDE9E3FFF6F7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFDADAFC7373F36B6BF78B8BFED2D2FFFBFBFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F7 E8E8EFC9C9EC8A8AF14B4BFD8888FFD6D6FFF5F5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DDCD6DDACA6AE0D06ED7C966E4D673DFD371E1D475E3D67BD7CC73E6DA85D4C97DA8A05CCAC575 E6E28CE4DE90A29A5C1D12006F6537CFC688E4DC91DFD987D2CA7AE6DD89DDD37ADED579CFC568 D8CD72DDD17CD1C476DBCD82E4D58AE9DA89E2D67BE5D878E4D679E9DA82E8DB81EBDC85F1E28C EBDD87EEE28BF1E68DE2D77AD8CE70EEE584E8E188F4EEABC6C0844842221310007F7D43E6E5A0 EEEC95EFE98CF3EB8AE5D67CE6D481EDDC86F3E588F1E487EBDE82EFE286F3E68AF9EB90EEE184 EADC81F3E68AF2E589EFE187F4E98FFAEE98F6EB92EDE289EDE288F0E48AEADF85F0E589F4E98D E8DD80DDD474E7DC80E7DE84E7DD84EFE58CEFE58CE9DF86E9DF86EBE188F0E68DEEE48BEFE58C EDE389E5DB85E8DC88EFE48FF1E491EBDB88F2E28DEFDE88F4E28BE6D57DF2DF88F1DE85D8C46C EFDD8AEDDC8DF4E293F6E595F0DF8FD5C371D7C875E7D885EEDF89E8DC86ECE08AF0E38DF2E08A EAD981F1E18AF0E38DF3E994E8E08CF0E895EDE392F6EA9BF5E698F7E598FEE9A0B29150BF9C5B FFF5AEFFECA0EBDA8DF5E799F2E498FBF0A8EBE29FE2DC9DB2AE7265603D1E1601231C05BAB470 ECE693E9E18AE9DE88E3D785E8D888EEDD8EECDA8DEBDA90EEDC8EEAD784FFEE9BEFD37DC8A44E BD9645FEE69BFFEEACFFEBB5DED0A36F674A000200334525C0CD8FFDF8BECEBA82C0945B9A5C26 8B4610904A168A4A18A9703D4515037D5525C1A565C8AE71D7C38D4F3E1CCFC18E281B017E7141 F5E2A0E2C885EDCF8CD8B56DC99B5AB8844996672E3F1800957730BFAC6AE7D79AFCF5BE837B42 E8E8AADFDA94F9F6AAF1E798EDE191E9DD8CF2E793FAF09BF3E994F3E994EEE291F9EC9DFBEBA1 F4E39BF7EAA0EEE699EEE799EEE799F5EEA0F4ED9FEBE496F5EEA0F3EC9EE6DF91EBE496EEE799 EEE398F5E9A1F3EAA2EDE89FE7E69BE8E89CE1DF92ECE69AF9ECA3EDD690FFEFABE8C280965C1D A56A24EAC3793E22085E5024F2F19BFAF6BB3B2F1A685B4AFFFFE1F8FFD5D8E3B4CECCA6F0E7BA C2BA79EBE289F1E794BFB67B1A1400B4B37BF8FBADE4E68AEEE4A4F6EBCBE0DBCC26250A4E4E1B DFE28FDBDA8AE6E1A3847B50180F0BDDD7ACE2DFA2D8D886E8E393E3DB8EE9E093ECE395DED586 E3D98ADDD686E7E090E3DD8EDCD489E5DD92EAE298E6DE93F2EA9DEFE79DEAE197EDE49AEBE398 F0E59BF1E89CEEE498EDE696EFE898EEE495EDDC93EAECA0E5E79DF1E29DF5E89FF9E899F0D082 BF8944EFCE8AFCF4B0E4DA9EE6E29BE7E79B635C2F7C725DE2D5BE988D66F3EAB4FFFFC6E9DFA8 DDD497E7E192EAE787E5DA86F0E59BDAD88DDBD67BF9E495C29861C19A56BBA26C060100787E54 E9E9D2312A1B312B1CD8D2A8F3EEB7E4DD9AEEE599E6DD8FEBE197EDE39BEDE49FF3EAA4EDE79E F7F0A9F4EDAAEFE8A3F6EFA9F1EBA2EDE79DF8F2A8E7E197DBD48CF2EBA5F6EFAAFAF2AFF4F0A8 F2EFA9F8F5B5FEF9C0FCF7C1F5F1BBF3F1B9F2F0B7F5F3BDFFFED2FFFFDFFFFEDDFFFFD1FFFFCB FFFFC9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9EFEFEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDECECECEDEDEDF3F3F3F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFEEEEFFB6B7FE BDBDFED8D9FFF1F2FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFFE6E7FFCCCDFEAFB0FEC2C2FEE2E2FFF6F6FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFCFCF9F2EFDFB3E1C06DDDB85AE5CA84F3E8C9FEFDFBFFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF8F7E6E3E1A6ECEBC3FCFCF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFFEEEEFFADADFF5454FE5A5AFEE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3FF8A8AFF 4141FE9393FEECECFFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4EDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECEEEEEEF3F3F3FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF4F4FFB4B4FF7070FF4545FF6060FF9797FFCFCFFFF1F1FFFDFDFF FFFFFFFFFFFFFCFCFFF6F6FFE6E6FFC5C5FFAAAAFFC6C6FFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF4FCE5C5FCE9C3FEF8D8 FFFFF0FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF9F8EBE5E2A9EDE8C0FCF7F0FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEDFDFF88585E56D6DEE7B7BFCC9C9FF FAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA EDEDEBCECEE9A2A2F47373FD6161FFAAAAFFF7F7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCCC6CE0D070E1D16FD7C966E7D976DED270E1D475CFC367E1D67CE4D883D7CE7893913B E0D992D6CD91A79E641E14005F5622F1EA9CE5DC91DFD68BDCD386E3DB89DED57FD4CA71D5CC70 D1C86DDCD27ADBD07FE1D58CE2D591DFD38BECDF90E1D77CE4DA79D0C665DCD176E7DB84EDE092 F1E397EADC91F1E494F7EC94E3D977DAD266F3EC78E8E272E2DD85F7F2ADE7E2AC423D24040200 6F6D2EE4E495EFEC90E7E181F5E88EE0CD80F9E793F4E788EEE181ECDF82F2E589F1E38AF7E990 F4E68DEBDD85EBDD84F3E58CF5E78CEFE38AF1E68DEEE38AE6DB82E2D77EDBD076E0D57BE4D97F E8DD82EFE488F3E88CEDE286E3D980E8DE87F2E891F2E891ECE28BEEE48DEDE38CF6EC95F2E891 EDE38CEAE089E8DD87EDE18DF2E390F6E794F4E48FF0DE8AE6D37DEAD67FF7E389F7E288CCB75C DEC76DEFDD87E4D582F2E390ECDD8AE1D27FE8D986DDCE7BE5D683EBDC89ECDD8AF1E28FF4E691 F0DE88EEDD85F7E991F4E892F3EA96E4DD8BF1E998EEE292F2E294F8E495F8EA9BE7CB81906C29 F4DB96FEEEA4F5E696F3E795F3E896F4E798E9DB92F3E7A2E5DD9EB9B579393417140D00433D0C DDDA89EAE589EDE58CEDE192F0DF97F6E499F7E59BF0DE96ECDB97F1E89CE2D987F5E38DFFEB92 F9D67BDDB056C1913EEAC076FFE6AAFFEEBFFFF8D3BCAE8C362704351E01AC8756885020833F0C 813805C47B48F2B37FFCCE9BC4A7732B1A00FEF6BBFBF5B0FFFCC4766D3A9D9862766E494A4420 DFD990F0E5A7FFF3ACF2E193FFF3ADFFEEAAF1DB987B621CBF9E58B78F4DA87B3E90622DBE9260 97713DFCF3B4FDE9A3FEEEA0F2E193F0DF90EDDE8DF7E895FFF59FFBF19AFEF6A1F7ED9CFCF1A1 F8EBA0EEE096EEE298EEE699E8E193EFE89AF4ED9FEFE89AEDE698F2EB9DF6EFA1E8E193E7E092 EFE89AF0E89CF1E79FF4ECA3F6EFA5F4EEA2EFE99DEFE49AF2E297FBE49BFCDF98D7B46E8A5F1D A76C2BFFD58FFFF7B35E512E3F401DF6F8AFC6C08F312003AE9D866E654BBAC297E3F3BCFAFCCB CEC8974D4306E0D57FE5DE87E5E19B2623080000006F742CEBED9BF3ECABF4EDC4635D41080500 B9B973E3E494CBCB7EECE8AC5E572A231814EFE7B9ECE7A8DCD987E9E190E6DB8CEBE091F3E899 ECE192F3EA9BE4DB8DE6DD90D2CB7DD2CA7FE9E197DAD489D0CA7EDCD688EEE799F4EB9EEFE397 EEE296E9DB90F3E79BF6EDA0F5EEA0F0EB9AEAE092F9E79EE8EA9EEDEFA3F5E8A0ECE095F3E190 E4C473A06A22EDC97FF2E8A0F9EEAFF4EEA79E9B52080300050000312613342B096F693AC0BA86 EEE5B3F5ECB1EFE99CF2EC8FEDE191F2E8A0DDDB92E3DE83FDE496C3965EC09651FFF2BB7E7654 00050022230D0802010B0500706A43EAE5ADF3ECA7F1E89CF5EC9DECE398F4EAA4F6EBA9F8EFAC F4EDA9FDF6B0F9F2AEF6EFA9F8F1AAEEE89EEFE99EFBF7AAF9F3A7F1EBA1F7F0A9F8F1ABF6EFAB F2ECA3F1EDA4F4EEADF7F1B6F7F2BAF7F2BAF7F2B8F8F7BCFAF8BEF8F4C4F7F3C9F9F5CDF6F5BD FAFABCF2F2B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEFEFEFCBCBCB7E7E7E6B6B6B6A6A6A6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6C6C6C6B6B6B6B6B6B6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6969697070709A9A9ACACACAF1F1F1FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF6F6FF DCDDFFC7C7FEBEBFFEE2E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6FFD1D1FEBBBBFED0D0FEE0E0FFEEEEFFFAFAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1 FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5E7F0E0B8E2C376DDBA61E6CC89F2E5C3FEFCF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF3FCF8DDF2E0B1F6EACCFEFCF7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9FAFFDDDDFF9797FE4A4AFE5A5AFEE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FF 8A8AFF4141FE9191FEE9E9FFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAE4E4E4A5A5A56B6B6B 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6C6C6C6C6C6C 6B6B6B6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6C6C6C6B6B6B 6B6B6B6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6C6C6C6B6B6B6B6B6B 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6C6C6C6B6B6B6B6B6B6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A686868767676A2A2A2D1D1D1F5F5F5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFD9D9FFACACFF6E6EFF7F7FFFB2B2FFE6E6FFFFFFFF FFFFFFFFFFFFFFFFFFECECFFD2D2FFB8B8FFB8B8FFCACAFFE6E6FFFCFCFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7FFF3D7FFEEC9 FFEDCAFFF5E4FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEF8F8EAE1E1A5EAEBBFFBFCF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEE4E4F79696E06F6FEB6B6BFC C0C0FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F6 EDEDEDEBEBECB8B8F26868FB5454FF9797FFD2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDECE6EE1D171E5D573D9CA67E5D774E4D876E2D577CEC165D1C66DDCD07CC0B75E 979539D2CB8AC1B78631270A463E10E3DD81DED979D8CF7BE0D68BD6CC82DDD482D7CD77D5CC73 D7CE76E5DC86E4D989E6DB91DED190E9DE9FE0D592E6DC8FD9D279D7CF6ED6CF6DE3DA7CEBE28A EBDE8EECE092F5E89CFDF0A0F1E68EFAF18FEFE77AEFE974F5EF7BF3ED87EAE390F9F6B4D1CC9B 4F4C2607050068682BE4E295EAE590EDE38FE6D586EDDE88F3E785E2D576EDE082F9EB92EDDF87 F0E28BF8EA93F1E28DE8DA82F0E289EDDF86E9DD84E5D981E1D57CE8DC83EDE189E3D77FEADE86 EBDF87E7DB82EBDF85F1E58CEBDF86F2E892E6DC87E7DD87EDE38EEEE38FF0E68FEADF8BF6EB97 F2E891EDE38DECE28EEBE18CE7DB87E9DA87F1E18EF4E48FE9D780D6C36CE8D37BFAE489E5CC72 D5BD60ECD377DCCA71E1D37DF6E892E6D884EADC88FBED99EEE08DEEDF8DEEDF8DEEDF8FEFDF90 EEDF8EF2E28CEEDF88F4E892EDE490ECE593E1DA8AE7DF8EFAEC9CE7D585FAE694FCE3909E7D2F C4A05BFFF1A8F3E192EBE28DE4DF8AF0E894F4E696DDCB82EDDC98D0C486B4B0741F1A000D0800 595717EAE88EE5E27DE7DC85EEDF96F4E39EF5E399F1E090E6D788E6D78FE0D98DE7E18FE0D17D E5CD75FFE38DFFE28FFFCD7FCD9853E0AD71D5A775B0845DD7AB83A26A40480F00520E00B46E38 D08E56FFC88CFFDB9FFFECAFF7F5BB68622B7F8A51FFFFC7F5E6ABEED2A0735428F3D2A951300A CEB482F0D294F0CD8CE2BD7BF2CD8BF3D398F0D295846A29C2A863FFFFB8FFE39EF8D293E5BC82 AD7C4597662FD5A366FED48EF7D486EED084F5DE91F4DF91EFDE8BF2E590F5EB94F4EC96EFE893 F3EC9BF6EB9DF1E69BF3E89EF8F1A3EEE799F8F1A3F7F0A2F0E99BF2EB9DF0E99BFAF3A5F7F0A2 F5EEA0F2EB9DEEE89AEAE69AEBE49AF0E79CF3E79DF1E097F1DC92F6DE93FFE79DCCAA637B550D A67E36FFDE91FEEEA4FFF3B4807C541F230FEAEFAC75704A0E02001E1100020000565B34EAF3B9 D9DCA38E8858605721ECE396E1DD86F8F9B075754806090122280ADADC98F7F4B8A29D70100B00 67652DEDEDA9E5E69AD5D48CE4E1A65F592720170FE3DBA7EFEAA9E6E292F3E998EDE090EEE193 F4E899F0E595F3E899EAE194EAE194E6DE91EAE297EBE398DAD488CAC476E0DA8BF5EE9FEADE91 DDD084F2E397F3E499F6E99DEFE698EAE295E3DD8FDFD587F6E49AE5E797EBF0A0EFE298E3D98A F0E48FF6DA87B58033F5CF84F0E497F9EAA8FDF4AD7B78320100003E3626484130151102111002 0A07007B7548F7F4C1E7DF99E8E28BEEE196E9DE9BE3DF9AE1DA80FEEA9CAB7B43C79B57FFF8C1 FFFDDC9298742F3025261F15080300231D00D7D299E5DE99F4EC9DE9E091ECE297F5EBA6F7ECAD F9EFB1F4ECACFDF5B4F7F0ACF5EEA8FBF4ABF2ECA2ECE699F2ECA0F9F3A7F8F2A8F3EDA4F6EFA9 F2EBA7F2EBA2F4EDA3F4EDA9F5EBAFF7F0B6FBF5BCFAF6B8FAF5B6F9F6B7F9F6BCF8F3C3F6F2C2 ECE9B3F0EEB6E4E2ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEAEAEABABABA525252383838363636363636 363636363636363636363636363636363636363636363636363636323232313131343434373737 3636363636363636363636363636363636363737373535353232322F2F2F2F2F2F323232363636 373737363636363636363636363636363636363636373737343434313131333333363636373737 3636363636363636363636363636363737373636363333333030302F2F2F313131353535363636 3636363636363636363636363737373636363232322F2F2F2F2F2F323232353535373737363636 363636363636363636363636363636373737343434313131323232363636363636363636363636 3636363636363636363636363636363535353E3E3E747474B2B2B2EBEBEBFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFFCFCFFDDDDFEC0C0FED3D4FEE9E9FFEDEDFFF3F3FFFEFEFFFFFFFFFFFFFFFFFFFFF9F9FF EFEFFFEDEDFFE2E2FEC9C9FEC5C5FEF0F0FEFBFBFFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E0E1A3 F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCF8EFEEDEB2E2C375DEBA5EE4C679F5EACE FCF8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFFFAE6FFF3D0FEE6C0FEEFD9FFFCF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7F8FFCECEFE8989FD4D4DFD6565FEE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2FF8A8AFF3E3EFE898AFEDFE0FFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8DBDBDB868686 3838383636363636363636363636363636363636363636363636363636363636363131312F2F2F 2F2F2F323232363636363636363636363636363636363636363636363636363636343434303030 3333333636363636363636363636363636363636363636363636363636363333333030302F2F2F 313131353535373737363636363636363636363636363636363636373737353535313131313131 3636363636363636363636363636363636363636363636363636363535353030302F2F2F303030 3434343636363636363636363636363636363636363737373333333030302F2F2F313131343434 3737373636363636363636363636363636363636363333334646467E7E7EBDBDBDF1F1F1FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFEAEAFFB4B4FFADADFFBCBCFFD6D6FF E6E6FFE9E9FFE9E9FFE7E7FFD5D5FFBFBFFFAEAEFFC4C4FFEBEBFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFE9 FCF1CEF9E4BCFBEDD8FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF8F8EBE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEE8E8F7A8A8E17171EB 5B5BFCB7B7FFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EFEFF0D8D8E2C8C8F09292FC4E4EFF5D5DFFCBCBFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD9C969DBCB6BE5D573DBCC6AE2D471EBE07DE9DC7DE6D97ED0C56BDCD07C A19743ABA857ABA564362F09473E11D0C97AEBE588DCD673EEE58ADACF7CF4E99ADBCF80E3DA87 E6DE8AE1D985E5DC8BDCD387E2D895F4EFB3F3E9ADD1C787DFD78CD8D37AE4DF7DD2CE6DE1DB7D F0E98DEFE78EEDE48DF6EB95EFE58DF5EB90F6ED8DF0E884F8F189EBE57AE6DE73F5EF8DE5DF8E FBF9B8E4E2AE807F5406060057551CE0DA97EDE595E4D880E2D577F2E684F3E686F3E68AEEE087 EFE08BEFE08DF1E28FF5E693F0E18CEFE189EEE087EDDF86EDDF87EEE088F6E890F6E890E3D57D F2E38DF0E28CEEDF89ECDD87EFE08BF5E994F1E693E5DA88ECE18EF6EB99F3E896EFE491EADF8C F2E795EFE491EDE290F1E694F2E794F6EA96F8E996F9EA95FBEC95F2DF88DCC770F5E086EFD87B D9BF62FBE689F6DC7FCFBD62DDD279EFE48BE5DA82F0E48FF2E693EADE8CE5D987E8D88AEFDF91 F2E295F4E496F4E592EDE18BEFE793E8E190EDE695E9E292F1E897F0E292FCE795FFF19ECFB461 997524FFE99FF7E195E6DA87ECEA90D9D87FF2ED95EFE190EED990F6E3A0C2B374A29B5E151100 1E1A01A1A15CECEC89DEDB70E9DF87F2E19AEDDA96EAD989ECDE82ECDE82EDE18CFAF19DF1E796 F5E99AFEF4A6FDE198FEDA95FFEBAAFFCA8FA86A32833F0B7930006D21019E4C1BAB5A29A35A25 F8C281FFF6ADFFE092F3DA8DFFFBB3C0BA7B3F4216F0F7C5F2E8B6EFCB9C7544178D5435652824 6B2C0397562B88461A7C3E0781430A8B4C1F86491E63280E87511BD8AA6DEECB86F7DD96FFF6B0 FFEEADF7E5A8DBAA6DBD8442C5863EEEB467FFDB8FFFEEA2FFE99AEBD784EBDD88F7EF97E2DC84 E3DD88EAE490F1E99AF4EC9EF7EEA3F6EFA1F6EFA1FAF3A5F4ED9FEEE799F2EB9DF4ED9FF1EA9C F0E99BF4ED9FF3EC9EF0EC9EEDEB9EE8E497EBE094F2E094F9DF95FDE69EFCD98FBD9A51734E05 BD974CFDE397F4E48EF0E395FFF9C2999269191606EAEBAF4644240A09004C4B2C322E204B492D EDF0ACF0F2B5595531857D54FBF2B2EFEC9AE4E69BD4D7AC222712272D11D2D6A65755290A0700 44421EEAE8ADDCDB99DDDC98ECEBA9ECE8AE827C46110800C4BE83F3EEACD9D388F1E697EDDF8D EEE391F4E798F0E495F2E798EEE597E9E093F1E99EF2EA9FE8E095F2EC9FF2EC9EF2EC9BF6EE9E F2E798EADC8EEEDE91F6E699F2E597E9DF8FE8E093EDE79AEEE498F4E295E8E996E6EC9AEBDE92 E6DE8CF0E28AFEDE86C59041BD9444F5E595FEFAB5FCF2AED3CE90191100413B32BEBAA97F7E5D CDCEA0B0AE86AEA97FF1EAB5F2EAA9F0E897E9DA94E9DF9FE4DF9DF1EA92FBE599A17037DDB06B E4D198B5AF8BECF1CFF3F5E6DDDAD5A19B7F9F9A6FF8F3BAF5EEA7EFE799F4EB9CF2E99EF7ECA9 F9EEB0FEF4B8F7EEB4FDF5B5F4EDA9EFE8A1FBF4ACF6F0A6EAE498EBE599F4EEA2F8F2A8F6EFA7 F8F1A9F6EFA9F4EDA1F7F0A3F9F1ABF7EEB0F8EEB4FDF5B9FEF7B6F6F1AEF6F1ADFCF7B8FCF8BE F4EFB9FBF6C1FFFDC8FDFAC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F6DDDDDDA4A4A4959595959595 9595959595959595959595959595959595959595959595959595959393938686868383838D8D8D 9696969595959595959595959595959595959595959595959191918686867C7C7C7D7D7D888888 9393939595959595959595959595959595959595959595959595958B8B8B818181898989949494 9595959595959595959595959595959595959595959494948A8A8A7E7E7E7D7D7D828282919191 9595959595959595959595959595959595959393938787877C7C7C7C7C7C868686929292959595 9595959595959595959595959595959595959696968D8D8D828282868686939393959595959595 959595959595959595959595959595959595949494989898AFAFAFCDCDCDF1F1F1FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3FEE1E1FECCCCFEC0C0FEC0C0FDD2D2FEF4F4FFFCFCFFFDFCFFFEFEFF E7E7FEC8C8FEBCBCFDC4C4FED6D6FEEAEAFEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDECC7 E1E1A4F5F5E0FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF6E9F0DEAFE3BE61DEB243 E6CA81F2E5C3FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7FEF0D9FEE9C3FFF1CEFFF9E5 FFFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F7FFCACBFE8D8EFC6263FB7E7EFBEAEAFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3FF8C8CFE3C3CFE7879FEC8C9FEF3F3FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEFEFEF C1C1C1969696949494959595959595959595959595959595959595959595959595929292848484 7D7D7D7D7D7D8787879393939595959595959595959595959595959595959595959494948C8C8C 8080808A8A8A9494949595959595959595959595959595959595959595959494948989897E7E7E 7B7B7B8484849090909696969595959595959595959595959595959595959696968F8F8F848484 8484849292929595959595959595959595959595959595959595959494948F8F8F8080807C7C7C 7F7F7F8D8D8D9494949595959595959595959595959595959595958B8B8B7F7F7F7B7B7B828282 8E8E8E9696969595959595959595959595959595959595959393939B9B9BB4B4B4D3D3D3F6F6F6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFE7E7FFDADAFFD0D0FF C2C2FFB7B7FFB6B6FFB6B6FFB7B7FFC3C3FFD0D0FFD8D8FFE7E7FFF9F9FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FFFFF9F6F2D3EBE2AFF2ECCCFEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCF8F8E8E2E2A7EBEBC1FBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEDEDF7BABAE1 7474EB4A4AFCAEAEFFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFDFFFBFBFFFAFAFFFAFAFFFAFAFFFAFAFF FAFAFFE1E1EFBABAE28181F16262FE6767FF9999FFE8E8FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDDCD6DE0D070E4D472D5C664DDCF6CE9DD7BDFD374DED176D8CD74 D4C874BEB26A9992562E28026C671CCBC576D6CF81E0D986E0D980E7E07CEBE280EADE87D2C57E A79D53CEC777E8E191E7DF93F4ECA5EEE5A6EDE4AB908752736A2EE7E096E8E68FDFDD7CDAD578 D5D073E1DD7DEEEA87EEE986ECE684E8E280EDE786EDE789EFE48DFCF19DF1E68CFFF78FF1E980 EDE987E6E593EAE9ADEEEDC15755330600006E6633E8E196FDF593DFD56FEBDF7DF3E686F5E88D EBDD85ECDD8BEEDF8EECDD8CF5E695F4E591ECDE86F0E28AF2E48CEBDD85EFE189FEF29AF4E58E BFB05BEFE08EE6D784F2E390F5E693EFE08EFBEF9DF1E593EEE393F2E797F4E999F3E898F6EB9B F2E798F4E999EFE494F1E696F5EA9AF3E895F4E693F7E893EEDF8AEBDB84E8D47DD7C36BF9E288 EFD679E2C96CFBE183EBCF71CFBD60D0C76AEFE68AEAE087DDD37BF2E691F2E693E6D988E9D98B F4E497F6E69CFAEA9EE9DD8BE7DB88EDE491E8E190F0EB9BF2EB9BF0E796E9D888FFEE9CF6E38F AC8832DDB865FFEDA3F7E191ECE38CE9EB8FD5D97BEEEB93F1E290EAD489FCE5A1DBCB8B9F975A 1A14002A270BE1E098EBEB85E7E477E7DD84F8E69FEEDB95E9D97FF0E47BEFE478EBE07CF3E38A F4E392EAD98FF5E2A1F3E1A5FFE7B2D9B2816933088E4819A44F1B993601AB4B0EB97835F7CD84 FDD887D0B75EE2D576FFFE9EFAF89EFFF5A4715C1C957549D8AE858665393625035742184C3010 5D381AA87D58B78C58C69B5BCBA65FAF8A47BE9D617150247E4D2198592882430D88490DAA6D2E C88D4FF9C88CFDF2B6FFDB9AFFD98ED7B15A936F15D2AE60EDCC81FEE293FAE591F7E893F7EF98 EAE38BE8E38DE8E38FECE796EFE99AEDE698E9E294F7F0A2F5EEA0EDE698EDE698EFE89AF3EC9E EEE799EBE496EAE395EFE89AF0EE9FEDEF9EECE89AEFE296F8E096FFE59DFFDE98C0964E7B5109 D1A95EFFEC9EFFE796E1E181ECF3A2FDF5C6C3B48D1C0E00D1CD9ABABA9FA0AB84F9FFD54B4B3C 4B4226F8F7B7F1F2B5434121837A5BFFFECBE9E69BF0F3A9D2D6AE14180E515545D6DAB711100A 4B4A16D0CC8DFCFBBBDEDD9BDFDE9DF0EEB1FAF7BDD1CC93160F00736C3CFDF9B9DDD48EE7DC8C F0E08DF8E896F6E99AF2E596F4E89BECE297EEE59AEEE69BE6E094E6E094F6F0A2F5EFA1F3ED9D F0E899F9ED9DFFF2A3FDEC9EF9E89AF7E89BEEE294EAE294EBE599ECE295FBE99BE7E996DDE28E EDE092EEE692F1E388FEDD83CC9845AE8634EDDF8CDCCA83F0E4A2FEFAC08F86681F1912070400 1616006D7045D3D5A5F9F5C8E7E0B0E7DEA1E5DC90E1D28ECEC488827E3DF4EA93E4C77BBB8850 FFD5906F512D020000080D0067675AE3DBD6FBFADFFFFCD0E9E4A8EBE49BEFE898F2E999FAF1A6 F6ECA9F8EDB2FFF7BFF9F0B9FCF4B7FBF4AFF6EFA7FDF6AEF7F1A7F3EDA1F7F1A3F6F0A4F9F3A9 FCF5ACF7F0A8F5EEA8F3ECA0F9F0A2FEF4ADFBF0B1F7EDB0FAF0B2FEF5B2FBF4ABFAF3AAFCF5AF F9F3B3F4F0B1EEEBA5F3F0A9F3F0AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF0F0F0EDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEBEBEBDDDDDDD9D9D9 E5E5E5EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEAEAEADCDCDCD1D1D1D2D2D2 DFDFDFEBEBEBEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEE4E4E4DADADAE3E3E3 EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EDEDEDE1E1E1D3D3D3D2D2D2D8D8D8 E9E9E9EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEBEBEBDEDEDED2D2D2D1D1D1DDDDDDEAEAEA EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEE5E5E5D9D9D9DDDDDDEBEBEBEEEEEE EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBECECECFAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFD7D7FFB9B9FEB0B1FDB7B7FDCACAFDD8D8FEE1E1FF E3E3FFCFD0FEB6B7FEAFB0FDC4C4FEE9E9FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFA F2ECCDEAE0AAF8F5DCFFFEF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF5E3EED389 E1B643DCB244E7D18EF5F4DFFCFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF4F9E9CBF6E1B5FDFADC FFFFF1FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8FFCACBFE9395FC7374FA8F8FF7ECECF5FFFFFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4FF9696FE4848FC7273FDB7B8FDF0F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6F6EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEAEAEA DADADAD2D2D2D3D3D3DDDDDDEBEBEBEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEECECEC E4E4E4D6D6D6E1E1E1EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE1E1E1 D3D3D3D0D0D0DADADAE8E8E8EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEFEFEFE9E9E9 DDDDDDDCDCDCEDEDEDF0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEEEDEDEDEDEDEDE7E7E7D6D6D6 D2D2D2D5D5D5E4E4E4ECECECEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEE3E3E3D5D5D5D0D0D0 D8D8D8E6E6E6EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECEAEAEAEEEEEE FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FF E7E7FFC8C8FFB2B2FFAEAEFFAEAEFFB1B1FFCBCBFFE9E9FFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF1F1D6E1E2A6ECEDC0FDFDF1FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCF9F9EBF1F1D4E8E8B1F0F0CCFCFCF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F7 CDCDE17676EB3939FC9E9EFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAFAFFEBEBFFD9D9FFCDCDFFC8C8FFC8C8FF C8C8FFC8C8FFADADF48585EA4D4DF55555FE9696FFD6D6FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DA7CE7D97BDED072D4C66ADCCF74E0D47BDBD07ADACF7B D5CA79A39949756A246E6224BAB063EFE791D6D074CCC76DE3DE86DEDA80DDD97FDFDA87D6D08C A79F6C271F00625B1F877D43988E55B1A872988E5F403518160B003B300DD9CF93EBE5A0DAD487 EFE58FE6DB80E0D779F0E787F5EC8BEDE483ECE383E3DB7FF0E790EAE091EEE499F6EB9BECE080 EEE480E2DB7AE6E186EBE799E8E3A4D9D3A139321309020085814BFDF7B3E1D986E9DB7DDDCF78 EADA8AF1E196E9D98CE7D985E4D77CE7DD7EEBDE86E3D886E1D388EEE090EFE38FEEE18FECDE8C ECE08EEDE18FF7E997EADE8BECE08BEBDE88D7CB75DDD27AF0E68DEDE48BEBE08BE4DA85E8DD89 F4EA96F2E797F1E695ECE192F2E798F2E797F3E597F0DF91F8E696F6E495F5E192FFEA9AEBD684 EED682CFB75FF1DC82F9E085D1B95CD4C06AC0B162D9CB7AEEE292EEE393F0E695F4EA9AEEE494 EEE394F4E899F4E79BF8EA9DEADA8AE5DA89E7E190E5E594F0ED9FF8EEA2F6E398F9DB93FFEFA5 D4B668BE9A48FFE490FFE898FFF2A0F8F09DEBEB96E5E38EF3EB97F7E695F6DE8FFAE296CEBA71 938541201400281F00EBE4A0E9E085E8DD7AE8D77FEDD98CEDD78CEDDA84F2E480F6EB7EE9E176 E3DD84F1EA9FEDE39DFDF1B5FEE7B0C29462783808813505984811A2551AECA362B97730B67E2B F3D98BFFE59DD7C472C9B457EEDB7AFEF197D6C084432900835F1984491B8A5D394E481E9C986E 322C03DAD09AFFF3BDFFF1B2FCE29BFBEEA9FFFFBCA79E597D7A3AFEF5B3F0DB95EBD08AC8A35E B5844297571E9E521DB0612DDA9A61FFDC99FFF9AADECB76AB883AC19149E4B26CFFE99BF6E996 F1E58EFAEC94EBE48CE9EA94EBE89AECE39EE7DD9BE2DA93F7EEA5F3EAA0F0E89BEFE799E8E08F F0E799F9F1A3F2EB9DEBE396E9E396E9E99DE0E497F1EBA0F3DE94FDE39CFDDE9BB38C4A7E5819 CEAD6EFFEFACFBECA4ECDD92E7EB91E5ED9BFBF6BCE2D8A71A0E006F6950F0EFE5E9EDDD737A5C 0B0B00A5A16AEEEB9BF3F6AF474625241E10C4BBA4C0BC9B94926E2B2D16000200AAAC8DDCDEB3 C7C594E3E1A6F7F6AFE1DE97E3DF99DBD690EBE5A1E7E19FFFF8BA746D39191300DED8A3F3EEB8 EBE19EF8EA9DFAEA9FF7E89CF4E59AF1E297E9DB8FF6E89CF4E99DE4D98EEAE092EEE499F6EAA3 F4E8A0F4E89CF2E798F6E89AFEEFA3F7E89DFCEBA1F8E99EF1E395F0E392F2E595F9EDA1E5E397 DFDD90F1E498F7E796F5DE87FDE18AE7B566E6C075B29C562F1C009C8E51F9F6BCF3F1C2E2DFB7 6056312C220E2B2C15161C004D4E27E6DCA3EDE19EE9E293F7EFB2A69D720E0600F9E8ABD8B475 B7844AFDDFA05346240C1901586D513E47321A14004A4131A59C76EBE1B1F8F1B6FAF1AEF9EFA8 FCF1ACF4E9A7F7ECACFFF6B7FBF0B2FAF0B0FAF1ADF8F0ACF9F2ADF0ECA5F2F1A8FCFAB0F2F0A7 F5F1AAFBF6B0F3ECA6F0EAA4F4EDA5F5EDA5F7EFABF8EFAFF8EEB0F8F0B0FDF5B3FCF6B2F8F2AD F6F0ACF9F2B2F9F4B3F1EEA1F6F4A3F7F5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAF8F8F8 F7F7F7F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAF8F8F8F6F6F6 F6F6F6F8F8F8FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF4F4F4EFEFEF EFEFEFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3F6F6F6F7F7F7F6F6F6F6F6F6 F7F7F7FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAF8F8F8F6F6F6F6F6F6F8F8F8 FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF9F9F9F7F7F7F8F8F8FAFAFA FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF8F9FFEEEEFFDADAFFB3B3FD8282FB9393FC AEAEFDADAEFDBBBCFED1D1FFE5E5FFF3F3FFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFCFDEDD9FBE2BBFDF4D1FFFDE8FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF5 FBF5D3F2DD93E0B440DEC362E3E0A4F5F5E0FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF2ECEAC0E6E2AA FAF9E9FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFC8C9FE9092FC7171F98D8DF1ECECE5FFFFF0FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5FFAAAAFC6767FB8383FBB8B9FDF0F0FFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB FAFAFAF8F8F8F6F6F6F6F6F6F8F8F8FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB FAFAFAF9F9F9F7F7F7F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB F9F9F9F6F6F6F6F6F6F7F7F7FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAF9F9F9F6F6F6 F3F3F3F0F0F0EFEFEFF1F1F1F1F1F1F1F1F1F3F3F3F5F5F5F6F6F6F9F9F9FBFBFBFBFBFBF9F9F9 F7F7F7F6F6F6F7F7F7F9F9F9FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF9F9F9F7F7F7 F6F6F6F7F7F7F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFFFBFBFFF6F6FFF2F2FFF2F2FFF2F2FFF2F2FFF6F6FFFBFBFFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2D8E3E3AAECECB6FCFCDFFFFFF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCF5EDEDC7E4E4A8F5F5C8FCFCE5FFFFFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F6F6F7DCDCE07878EA2929FC8888FFDEDEFFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F9FFE7E7FFBEBEFF8F8FFF6F6FFE6565FE 6262FE6363FF6363FF5252FD4343FB5252FD8888FFCFCFFFFCFCFFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CE72D7CB71DDD278E0D57DD6CC77E3D888EEE496 A9A05470671D9F974DC1B76FE5D58BE6D686D7CD72D5CE6FECE885DCDA78EBE98FFAFAAFDFDEA1 C9C89A605D3B070100766E41746C3F3F370A302800302500524721A69B6C483B25746734F4E8B5 D7CC93F0E190F3E389EEDE86F8E991F6E791FBEC99F1E493F2E796F6EB9BE9E192EFE798EEE694 EEE48CEEE589ECE387EEE387EEE58AEDE48FEFE69CDBD3951B1700151100A19E7CF7EEB4EBDD85 F2E295EBD994EBD998E3D387E8DC81E8DF78E8E177ECE384F1E597E7DA97ECE094EFE492EFE494 E8DD8FE4D98AE9DF8FE8DD8EF0E594E2D883EEE58CEDE389D5CC70E1D87CEAE286EFE58BECE289 E7DD86E6DC87E9DD8CE7DC8AE4D988EDE290E8DD8CEFE291FBE89BF6E396F5E296F8E499F5E196 F8E296C4AF5EE7D37DF1DD84E8D376D6C163DAC474E2CB86ECD990F0E096F5E89BECE293E3DB8B E5DE8DEAE392EEE695F0E897F7EB9BFEEB9EF2E496E6E291E7E999EEECA0F5E9A1F4D895FFE2A1 FFDC99997127E1C172FFEB99FAE995F8EC9BF2EB9DEEE99EF0E99FF5E99BFEEA9AF8DE8AF6DC89 D7BF70AE984E271700372B05ECDEA4EFE095E6D680F5E089F1D987F8E193EFD889CEBD66DCD16C E8E178DCDE8AE3E49FF2E7A9F2D59DAE7A46883E099C4309AA5112C97C39F5BF78FFF0ABF0D68B E0B354A67429D2A66FFFE9AEEEC174DFAA53A77E2A311308472F05B29A45F1D093B8906A6D6445 4C4A207D7B45EBE7A5FCF0AAF5E49FFCEBAAF7E1A1B8AC696F6C23E8EEA0DCE994E6F49CEEF5A0 F4EE9EFFE9A0FCDC9DD9945DA14F1D752800A26830E8C586FFE9A5FBDD96E8B06BAB6D2BDAB66E FFEE9FF9E992FEEF97F0E58BF0F09AEEEBA1F3E9AEEDE0A8E5DC9BF0E6A1EAE099EBE297E9DF90 E3D888F7EE9EECE394E5DD8FF1E89DEEE89EDFDE96F7F8B4F2E69FF1D68FFFE19CB68B4D7E561D DDBE8AE2D09BC5BD84F6F5B8EFF0AFE8E799E4E193B1AF68EAE8AF322E111410062C2724322D2B 0000005D5B34EFF0AADEE18AF1F4A69B9A64040000120C0B161015070503090600858558EAEAAF F3F1B3F8F3B8E7E1A2DFDD93EEEB9EDFD88CD6CF82EBE296DED58CECE29FE4DBA1322C183E3B0F FCF8D1EDE5ACF9ECA6F3E49EF4E69FFDEFA6FAECA1F1E195F7E99BFDF1A2E9DD8FEADE90F0E499 F4E5A3F8E8A6FFF6ADFFF8A9F7EE9EF6EDA2FAEEA7EEE19AE5D88EFCEE9EEBDA85F3E38FF5EDA4 ECE59EEBE29AF2E398FAE496FFE493FFEC9BDEB66DE0BE7F6D54211A0904BDB682EDE3A4D4D590 DED694D3BD82B69B65EBE5ACC7CF95A7A871EEDC9EF8E49BF4EB9BEFE7ADC8C2980D0600C5AF88 DDB783AF7E3EFFFCBF7F7F51000E00A2C09FF8FFDAD1CB967E75571309004D431DE8E1B2FFFDC7 FFFFC3FAF0AFF6ECA7F5EBA6FAEFA8FCF0AAFAEDAAF5E9A9F6EBABF8F0AFF2EFACEFEEABF5F4B1 FBFAB7FDFBB8FDF7B5FDF7B6FBF2B1FCF4B3F6F1AEF6F0AEFCF7B5FCF6B5FBF6B6F9F3B3F8F3B3 F4EEB0F6F0B2FDF7B9FBF5B6FEF9AFFFFBADFBF5A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF3F3F3C2C2C2 8C8C8C7B7B7B7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7B7B7B9B9B9BCBCBCBEEEEEEFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF0F0FFD6D6FFB7B7FD BFBFFDCFCFFECFCFFEDADAFEEAEAFFF7F7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDFFF6ECFEEED8FAECC2FBF3D3FEFCF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDFFFEF0FAF2CCEFD788E4C868DEC665E7DEA4F2F1D7FCFCF6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1EAEABD E2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5FEB4B5FD7979FB6767F98E8EF5ECECEFFFFFF6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F6FFAEAEFC6E6EFA8586FBB7B8FDF0F0FFFEFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E9E9E9 C2C2C2A3A3A39595958A8A8A8080807E7E7E838383999999AEAEAEC5C5C5E4E4E4FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9ECF0F0D0ECECBBF0F0C3F9F9E7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3EAEABFE1E1A2F8F8DBFFFFF3FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF4F4F3D2D2D27777E13131FB7F7FFFD0D0FFF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFE0E0FFA0A0FF7C7CFF6F6FFE6D6DF6 6E6EF06D6DF86D6DFF6D6DFF7575FF8383FF9F9FFFC6C6FFECECFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2C567D7CA6DDFD47AE1D67ED7CD78E0D584 DCD383C7BE70C9C075DED58AD6CD81DFD386DACF7DE3D983D6CE75DCD77ADDDA7EE8E690E0DD94 E1DFA0CBC8952623042E2800DBD390F7EFAEE8E09FDCD493D9D292E6DE9EF5EDAC8E87510D0500 9C9554DAD18CE7DD80E8DC79ECDF85F4E696E7D992F7E8A6F8E8A7F4E6A1F6EB9DEEE48DF2E98B ECE384F3E990F0E78DEEE58AEADF83E7DC82E6DC84F7F4A5ECE5A0AAA46A1410001E1B00C7C086 E6DB89F9EC9EF1E399EDDF93DFD381E5DA7CEFE682F3EA84EEE483EEE28CEFE293EADE88EFE48A F1E58FEDE18FEFE391F5E89AE4D789E8DB8EE5D88AF6E99AF4E897EDE291D2C575E3D786E2D685 DED180DBCF7DD1C573EFE390E8DC8AE4D884EADE8AE4D882E9DD87EBDD87F0E18BF6E792F5E590 E4D47EE0CF77C2B256F6E786F5E480EBDB72C5B44CE8D577F8E48CECDB83ECDD84E8DD85DDD47C E3DB85E9E18CEDE593F0E595F2E698F5E699FCEC9EF2E493E8E391E8E797ECE99AF2E299FBDF9A FFE8A3B88C48B48E45FFEB9CFAE491F1E08EF3E798ECE49AF0E9A3EFE7A0EBDD93FCE699FBE092 DBC072D7BE73C6B36D2C1E00352E0EEAE4AFEDE6A0F3E897EBDB87F1E08EF8E699F2E094D0C16E DFD479F4EB8BEAE592E8DE98FFDDA27036077B32017F3202AC6826CE974BF1C576FFE79CFFE6A0 FFE59CFEED8FF3D382BC7D42DB8A5DD283488642005E2F053E1F00E8D6A0FFFFBAECD698534010 32280B4C390CFFEEBAFADDA2F5D596FFE6A7FAE4A5E6DD9D796625F0DE99FFEDA5F1DB90FFF1A3 F7DF92FFE89DD9C075DDC177FFECA5F1CE8ACEA665875819683402C5894DFBDF9DFFE8A0CEAF62 C18C48D9AA60FEF4A0F9F596EDE187FFEE9CF3EEA2E6E0A1DDD599F1E6A6F1E6A2E7DD96E6DD92 E7DE90E6DE8EF5EE9CE4DB8CDED688EEE89CF1EBA1E8E19AF8F1A9F5E29BFFE79FBA944F7F5718 E0BF88DFC694251800120E00807F48EFF0B2F4F2A6D5D285423F00E1DEAF8F8B6C0A0600060100 060100383410DAD7A1F7F5B1DFDD8FDDDF8CCFD08E34320B0803020D09000E0B0454522BE9E9AD E7E6A0D7D38BE3DE9BDBD692DCD78EEEEB9EE6DF93DED586DCD386D9D086E4DB95E8DFA1D1CB8F 120F05737144E0D99EF7EAA4EDE19AE9DE95EDE297EEE296EDE495E8E090EEE997E1DD8BDCDB87 E0DD8CEDE49DF6ECA6EBE396E2DE8BE9E895E9E998EEEDA2F6F5ABF5F3A6ECEA97E0DD83ECE78C F2E594F6E99AF5E99AF2E493F6E18EFADF8BFFE190EACF85C3AE6E2B2110181707C9C194FFF4BC EDDD9A4F39066E4E17A7844DEBDEA2F0EFB4FFFFCAFFE5B3FFDEA8F8E8A7F4E8A4EEEDB04E4F33 2A2000A48850DBB26EFFF5AECEC1811C220F252E06D9D195FFF6B8FDFACED8D9AE535623A8A872 F4F2B6D9D695FAF5AFF8F0AAF5EBA4F5E7A2FAEBA6FBECA9EFE19FEFE1A0F7ECAAF6EEAAEDE8A4 F2EEA9FDFCBAFBF6B2FDF5B3F5E9A7EFE1A0FCF4B0F9F4B0FDF9B5FFFCBAFBF6B4F9F4B4F3EDAF F7F1B3F8F2B6F8F2B6F7F1B6EFE9AEF1E9ACF3EBAFEBE2A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E8E8E8 8A8A8A2323230808081616161F1F1F2424242020202020202020201B1B1B505050A3A3A3E1E1E1 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFCFCFF FAFAFFFBFBFFFCFCFFFCFCFFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFDF9F0F3E4B5F5E8C1FCF9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFDFFFFF5FDFAD8EFD788E0B845DCC869E7DFA7F8F4E2FFFEFEFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1 EAEABDE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FFA1A1FC6161F95E5EF98F8FFBECECFD FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FEADAEF76A6BF17E80F7B0B1FEEFEFFFFEFEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0 D1D1D18787875050503D3D3D2F2F2F1E1E1E1A1A1A2222224040405E5E5E808080B7B7B7E8E8E8 F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF6EEEBC6E7E3ADF4F0D5FFFDFBFFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBF8F8EAEBEBC3E5E5B1F9F9ECFFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF2F2F1CCCCCC7F7FDC4444FA7A7AFFC1C1FFEEEEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFE4E4FFB9B9FF5D5DFF4D4DFE6D6DFA 8D8DEE9B9BE69E9EF39D9DFF9D9DFFB7B7FFD7D7FFEFEFFFFAFAFFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D677E2D577D5C96DD8CD73E5DB82 E9DF89E5DC8AD8CD7EB8AF60BDB466DCD386DAD284CFC878E6DE8CDAD480E1DC87E5E18DD5D080 CEC980DCD8938C87470A0400A09955EBE394DAD384DFD789D4CE81CDC67BD9D288DED991DDD990 76702F201C01BAB66AE3DB82F1E689EADE8BEFE198F3E5A2FBECADF8EAA9F3E6A0F7EB9BF1E78D F6EC8AEDE582E2DA80E9DF86F2E98EF1E68AE9DE83EADF86DAD07EE8DF98EDE8A98B8752060300 575127E5DC93E2DA8DEFE595ECE38EEDE48AE6DC80EFE587F3E88AE9DE80E8DC7FEDE183F0E584 EDE282E5D97CE7D981EEE08DE9DB8CF6E89AE7D88EEBDB92EEDE95DFD084FFF6ABEDDD97FAEAA4 F1E199ECDC94EFE093E8D98BF1E391EDE08CEEE18AF1E48CE6D980EBE189E6E08BF6EC99F3E996 E9DF8CF9EC99CEC26DEADE84EDDE82E6D876E8DA75D9CB63E0CF67ECDA75D6C861E4D571ECE280 E7DC7EEDE58AF4EC93F4EB97F2E697F4E799F4E497EBDB8BECE18EEAE492E6E291EAE596F8E99D FFE59CF8D48D8B6319F3D385FFEF9CF9E490F6E495F5E89DEDE69EF6EFAAFAF0ACF2E39BFAE49A FFE79AD4B86FE3CB83DFCC8A3D3413131400DFDFAFF3F1B1EBE799EAE28FF0E693EBDE8FF6E79C F5E597EFE290EBDB86FBEFA2FDDA98A86D32742A04813403BB7739F4C77DFFEC96F4E48AFDED9B FDE69DFCE29BF6E794FFF09CFFC07BB05023832D00BA793E7E4F2C86622BFFEDAFFFF6C3878648 4D4A0F483517E5C393FAD09EF7C28DE8B680D9B67DBEA76B63511BB59C5BEDCF8EEDBF7BFFD08C FFE29EFFDE9AFFEAA3EACE85DDC97BEDEE9DEBEB9AF8F0A2F6DE97C69256894208A15B1BECC476 FFFEAFEDBD77BB8039D5AA59FFF699F8EB8FFEEA95F3E196EFEBA5EBEBA9F4EAA7F5EBA5F1E79F F2E99DF3EB9DEEE797F0E998F1EA9AE9E394E9E396ECE699F4EAA1F3E099FFEBA2C6A85F916E27 D3B172FEEAB3655624201A010D0B001C1C05D0CE96EEECA2C1C0743C3A01DEDAB2DDD8B78C8963 5C5A3876753FD2D18CFFFEB9DDD394DED692E0DF89E4E396BDBB838D896187845FB2B083DFDFA1 D9D98DE4E290E6E191F1EAA2DFD790E8E198F2EBA2F0E79AF2E899E2D889E1D88AECE49AECE49F F0EBACAAA76A34330EBDB673F3E99FEEE59AE6DE91E0D98CDDD789E9E494E0DE8CE5E692DEE08C DCDF8BE2E38EEDE097EEDF94F0E494F2E995F0EB97ECE999F1EFA7E2DD95E9E49BF5F5A7EFEA94 E9D780FFE08EFFD889F7D083EEC478E4B668DCAB5FDAAA62BC8F4F704C1C1B0600170A03927749 B58D47B1984F8262272E01002500004B331D51452A856C48C09267CB9863DFBB78E0BB77F2D69F D4C49A1F0C02351C00BD9562FFDFA3FFF0B5CFC78DA49D65E2D194EED998E2DBA6E7E6B0EFECB3 E8E6A8EBE8A5ECEAA7E9E79DF1EDA3EFEAA0EAE49BEDE69EF4E9A2EFE09BEDE09DF9EDA8FAF0AA EFE7A2F2EAA5F5ECA5E2D894F1E3A0D0C07BD0C07DF4EAA6F0ECA6F4F0AAF6F1ADF2EDABF6F1B1 F6F0B2F9F3B5F8F2B7F8F2B7F6F0B7EEE7B0E4DBA5EEE5B0ECE2ADFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 E7E7E78585851D1D1D1515154849487B7B7B9494948181817D7D7D7D7D7D7A7A7A969696C2C2C2 E8E8E8FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1E8E3AFECE8BBFAF8ECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5FAF2CCF2DE96E0BE4FE7C369F9DEB5FFF4ECFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFBF3E9E9BDE1E1A5F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FF9F9FFB5F5FF95B5BF98E8EFB ECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5FBA5A9DD555DC95F63E39191FDE8E8FEFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6E6E6BBBBBB7272725050505F5F5F6B6B6B6363636161615D5D5D4A4A4A3838383232325B5B5B A2A2A2DCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF9EBD2F7DDB3FCE1C0FFEDDBFFFBF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFDF4F5DFE8E9BCEEEECCF7F7E6FDFDF9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBF0F0F0AAAAF56969FD7D7DFFB3B3FFE7E7FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFBBBBFF7575FF5757FF7373F7 A8A8EBCFCFEBDEDEF5E1E1FBE1E1FFE0E0FFEAEAFFF5F5FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCF6EDDD070DED173DBD073 DDD278DAD078C7BD68CCC26EB9B15FA9A150C5BC6EBCB86CC2BC70D5CF82CDC77AD1CB7EBCB66C BAB46ACEC87E979148544F05766E29DAD083D8CD7CE4DB8AE4DC8BE8DF92EEE69CD0C982F4EFAB E5E2A0E1DD9F3E3C103A370DC7C079EEE69BE1D98FDAD188E5DC91E9DE90F7EC9EF5E999F9ED98 F3E98FF9EF94F5EA8FEEE68EE9E087F0E68BEEE388EFE387F4E990E8DF8BD8D183EBE49FFBF6BA 64612D1C1700BBB579E6DF99F6F19EE1DC81EBE589EAE18AEFE493F4E796F1E48DF3E786F6E982 F1E57EEADE7ADED170E1D478EDDF89E4D584F5E597EEDE90DDCD80EBDB8EECDC8FE0D085E5D48F F2E19CF9E8A2F5E59CEFDF93EDDE8DEFE08DECDE87F2E48CF5E78DE6D87FECE18FF9F2ABFFF9B3 F2EBA6E3DA95CEC480E0D68FF8EDA4B3A759DCCF7EDDCF78EADB83ECDE78F0E275E4D669EFE379 F9F089F3EB89EBE286F2E88FF1E791EEE290F5E899F7E798E9DA89EEE490EEE894E6E08DEAE08F F8E798FFE99FC5A559B79546FFE896F4DB87FFEE99EEDC8CECDF93ECE39BF0E8A2F5E9A3F9E79F FEE69AF9DF92D4B96DF3DB95F7E4A37C7646070C00AEB385FAFBC1E6E69CF6F3A0EEE795E3D888 EADC8EEBDA8FEDDA8EFFEDA3FFCD88A25B1A823A00B36D35B5773BF8C883FFEB98EFDE85E9E084 F8EE9AF1E196FEE6A3FFF1AEF7C777964E08984C15E6AA75AA7A4E471A00B58746FBCF8FD2B594 484E142E340084683CD4A26B955520914A16733603663C0F412A006F5F23896E2E82531098520E AE6A26B37431DE9E5CFFC582FFE39BFDEA9CE3E08BECF49CEAEC98F9E799FFE8A4FCC283A16E22 8F6112DEB064FFFCB4F5CE85B57C30C7A14BFBF193FFF399F3DA8BF4EDA2DBDF95E2D993EAE098 F1E89DF4EC9FF3EC9EF4ED9DF8F1A1E9E493E8E292F1EA9CF0E99BF6E99EFFEBA2D1B1669B792F E0C078FFF9B8DACD94272301E0E0B4AAAB82151305D6D0A0F1EDABC3C07E393504ECE9C0DCD9B0 ECEAB5DBDB94E6E691E7E38ADAD282F6E9A8E6D898E3DF86C7C56FD6D38DEBE8AEEFEDB4F2F1AE E7E797E2E188D6D277EFE894E3DA8FEFE59EECE29BF0E79CEEE497F4E99BEFE394E6DC8BEDE696 F0E89EE7E19AFEFEBBE7E5A4D9D48AF3EB9EF5EFA1EEE89AE0DA8CDAD788F0ED9EEDEA99ECEA97 E0DF8BE8E793EBE893F8E89AEEDD8EFBE998FFF7A2FCED9CF8E59DFFF8B6B69F61806222FCDC98 B7954BC09345E3A152C48235AA6A219F611897581191510A945513A0652B764719250700190402 8C673CBA8C488F6F28AA83478F5F32733F2432140022100014000064320E874E178A5915884E0A 9D683146210D1801001500004E230AF5C292E6B77DFFD89AFFEAADFFECADFEE7A9FBEDB2FBE5AB FEF0B1ECDA97FEF8B3EFE59DEFE9A0F5F3A8F3F4A8EDF0A3EDF3A6F4F2A8F2E69EF2E59FFBF1A9 FCF2ABF2E8A1F5EBA4FFFAB2F4E7A1F0E29CF0DF9AF4E4A0F8EEA7ECE89FECE8A1EFEAA5F0EBA8 F7F2B2F6F0B2FAF4B8FAF4BAFDF6BFFFFAC3FCF5BFF3E9B1FEF6BBFFF9BFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9E7E7E7868686232323353635838383C0C0C0DEDEDECCCCCCC8C8C8C8C8C8C7C7C7D2D2D2 E2E2E2F2F2F2FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF0E4E3ABE8E8B8F9F9ECFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFEF0FBF3CFEACA70E8BD5BF0C77CF9DDB4 FFF3E5FFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFAF6FCF3E1F1ECC2EBEBB9FBFBF0FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FF9F9FFB6565F96C6CFA 9F9FFCEFEFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F7FBB3B8E16970CF5E61E58282FCE5E5FE FEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFECECECCECECE9F9F9F909090A3A3A3B3B3B3B1B1B1B0B0B0AAAAAA9292925B5B5B252525 2A2A2A6E6E6EC5C5C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFFF3E6FCE6C9F7E0B7F6E5BD FEFAEBFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFEF5EAF5E8C7ECE1AFF5F0D5FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAF9E9E9E9B5B5F18080FD7B7BFFA5A5FFE1E1FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFE7E7FF9595FF5050FF7B7BFF AAAAF4CECEE4EAEAEAFAFAFCFDFDFFFCFCFFFCFCFFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CB6AE2D473E7DA7A DCD071D2C76AE8DD83D4C970CCC26BC0B5609287338A8332BCB96DBAB76DBAB66EC2BF78D2CB86 C0B974938C47716920A0984BD6CE7DC1B966AA9E52AA9B559B8D47A598537F75317F763781783D 868149A8A471D5D1A2CDCA9D201D0B544C2BB3AA77E9E1A4E6E095D9D57AE4DF7CEBE77FEEE784 F4EB8FEADD8CF1E299F0E299F7EE9AEDE48BF1E88DEDE287EBE182F4EA8EF4EA93E5DC8BDFD88D E1DE98EAE5A54C46174C461EC7C184E3E192EAE78FE0DA84EEE498F3E5A2F3E4A3F6E79AF9E98D EEE277DFD36CE8DB7BE7D97CE8DB7FF4E58EF1E28EEFE08CEFE08CE0D17DF2E48DF4E68EDCCE78 EBDB8DEBDB8DF8E898F2E291E7D884F1E28CF1E38CE9DB84F0E18AF4E68FEBDC85F8EDA4C6BD8B 59512D3C340D2A2000281D00594D25D8CB9AC8BB85493B0887783EF7E8A8EBDB86E6D773F6E685 F0E484EEE486EAE186E8DE86F1E791EEE28EEADB88F7E794F6E693EFE48FF0E691F2E792F3E793 F4E693F6E391EED688A98D3EF3DB8AF9DE8AF4DC86F0DC86E6D581E6DA88F2EA9BEDE59AEDE297 FBEA9BF4DC8AEACF7DDCC273F8E39AEDDD98B2AE7B1B1F0852572CECEFB4E1E29BF1EE9EE6DF8C E8DB89F5E193F7E196FFE69EF6D28EAA5A18A144089F5617EDBD79E4C67CFBEF9FFCED98F5E089 FDE791FAE695FDEFA3FFECAAEA9F6DA35813915F0DD5BB64FFFFCB846F4F4E2818C5894AC4874B 673B27242000302C027E5915865313905317A16329C5965C805C2BAE9860DACA8DD9BD7CAC843E E5A860BB84399A6B21834C048D500BB37731E0AF66FEED9FFFF6A5F8EC9AF4E292FEE699FDE697 FCE48FAE8131935111D1A25BFFE599F9C77BC48434D5AD54FFF296F8EA94D4CC7CC9C579D8CD84 E0D68EEDE499F1EA9DF2EB9DF2ED9CF4EF9EEEE797ECE494EEE596F4EA9BFFEBA0E0BB71AC873B DFBE72FFEEA3FFF1AFA3A1693C4010FFFFDF90946E1C1908D9D2A8F7F1BD908E5E393618DFDEAA DAD99EE0E098DFDE88ECEA8BDAD577EDE28EF4E39DE8D996E7E089E5E08ADAD789E6E29AE0DE93 F0F09DE7E68CF9F699E7E286E7DD89EEE298F4E6A0E7DA92F4E89EECDF93E7DC8DF7EC9CEDE491 F4ED9BDED887EAE698DFDA8EE3E095D8D587EBE795F3F09EEEEC9CDFDB8DE2DC8FEFE79AFAF0A1 F2E496E1D183F9E699FBEB9BF4E896FCEF9AF2E590E7D27FD0B166AB8544B6834D692C17450200 B76A37AA5621B66B2AD9A555CEA253D0A75ADDB367EAC176F4C87EFFD58EF7CD8EA07E472E1806 160705C2AC8EFFE9C5FFF2C1FFFFD0C59C65C39863FFEEB4EEE6AECCB682F8CFA2FFD0A1E6BE85 EAB968EABE6F5535181A010077573D7E4E2C85420DB05E1BA24700BF631BDF8641E9A464ECBA80 F7C58AFFDFA3FFE9A8FFF3B0F9E6A0FFF3AAFBF5A8F3F3A5ECF4A6EEF9ABF5FAAEF4ECA1F4EBA2 FBF3A9FAF2A7F3EBA1EAE398E5DD92E3DA91E4D990EFE399F8EBA3F9F1A9F0ECA3ECE8A1F2EDA9 F4EFABF5F0B0F5EFB1F9F3B8FBF4BCFDF6C0FEF8C3F6F0B8F4EEA7FAF3A8F9F2A8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9E7E7E7858585262626525252ADADADE2E2E2FBFBFBF4F4F4F3F3F3F3F3F3F3F3F3 F5F5F5F8F8F8FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF7F6F7F4F4F4F2F2F2F2F2F2F2F2F2 F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F5F5F5FCFCFCFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E5E5AFE9E8B9F9F7E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECF4E0ADEBC872E7B951 EFC373FCDFBBFFF2E6FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFCFEF1E3FDE6C7FAEFCAFAFAD9FEFEF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1FE9B9BFC6A69FA 8282FBB7B8FDF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FEC8CAF6898CEF6D6EF48080FB E5E5FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFAF1F1F1E5E5E5E1E1E1E7E7E7ECECECECECECECECECEAEAEAE7E7E79C9C9C 3E3E3E1A1A1A4F4F4FB6B6B6FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF6F6F6F3F3F3F2F2F2F2F2F2 F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F8F8F8FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCFBFAF4E4EDE6BB E9E4ABFAF9D4FEFEECFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6ECFFE7CFFCDEB9F9E0BBFCF1DFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3D1D1D1AFAFE08F8FFA7474FF9494FFDADAFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFEDEDFFC0C0FF7676FE4949FD ABABFEDCDCF3E2E2E5EDEDEBFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D371E5D776 E2D475E0D374DBCF70E1D579E6DB81DDD279E1D77FCEC46BA59E4C6B6A1F7D7C3364621E747032 8B85453F37006C6424B0A75EBCB364E0D781D1C86FBFB265D2C07CC9BA76D9CB88A89D5C9B9153 ACA3686C6731292401221F129B976EB1AE892019042E260FB6B078EEE99EDAD77BDFDD75F0ED80 E6E17AEEE78BEBDF91E7D998F0E29EF0E894F0E68EF4EA8FF3E88EF6EA8DF8ED92F1E78EF0E591 E6DF90E4DF95F0EAA4C3BE8D231E016F6B34D6D48EEAE797E6DF94ECE2A2EDDFA9EEDEAAEEDF9E E8D886E6D975EDDF82EEE18CE5D984DACD79EBDE8BEADD89F2E58FE6DA80E8DC7EF5EB8AEDE37E E1D674E2D77AE6DB7FE8DC81E6DA7DE4D87BE6DA7FEFE38AE5D883ECDF8CE4D688FBEDA0C2B576 1F14013F341A8C8162382D1106000032250E6F6139BBAE80A79A72473B0C766933C4B570ECDB8D FFEFA2ECE092EEE496E3D98CEDE396FAF2A2E7DB89F8E995EBDC85F8E890ECE28DEAE08DF5E896 F9E896F1DE8CFFEB99AC9543BEA853FFF09BE5CF79DCC771F2E088E3D47AE9DE86EFE892F1E895 F6E994FCEA94EDD57CDDC46AF4DC87F2E090F4E79DDBD59D413F180F0E03A5A56AF0EDADEAE499 E6DB8AFAEA97F1D988FFE79BFFE49EAE7936883400BA621EF4B86FECCD80EEE190F3EC97F0E28C F7E08AFDDE8CF6D589FFEAA2D7B172AB582BA1601FEAD374FFFFA4E3E4B2372111DEB795E1A76E 9C5E29572811331F00644D16D2AA63E5C57DFCDF97FFF0AAC0A865927B3DECD99FFFEEB2F5DC98 FEE698FFE08DFEE08DF6E190E5C97AC4994D96641B8A520BAE752EEBBE76FFE094F6D989F6E893 E8DF86FFF196F7D480AA7331733D00CD9E55FEE79AFBC373B37825DAB75DF9F99BCBC16CEEDE92 D8CB80E3D98DE6DD90F3EC9EE9E395F2EC9DE5DD8DEFE696ECE092F1E294F7E699D4B86BCAA256 E2BD6FFFE598FFEBA2F6EDA960602D565F30FFFFE3454A2C3D3A16EBDFBCE4DCB52C2807615F38 DADB96DDE091E4E790F0EE95DCD97FF0E993E4D988E9DA8BEDDE90FAF2A0DBD385E7E194EDEA9C F5F2A2D8D780F3EF95C9C46ADFD981EDE294E8D993E7D894EDDF99F7EBA1F2E699F0E595F7EE9D F5ED99EDE591F0E995DFD886D6CF7DE3DC8CD4CF7ECECC79ECE998F3EFA0F1EA9FF2E79EFDF5AE BBA35EEBCF8AF3D18BFCD690EEC27DDC9E5CD08949AD6926A162227D4513BD8950CA996782552E 451D00F9D59AFFE09DFBDA90FFEB9EFFEA9DFFF1A7FFF1A7FDE59AFFE89AFFE095FFEAA4BB9D60 74602B0B0000AF9C73C9B087CDC08FFFF6C7BE9C715A3719A89C6DEEF0BBDFD79FF7DD9FFFE79E FBEB95FFE692FFFEBAA59A6E07040044473A201A0D715A2FF5D395DCB063CCA053B59249946D2A 9658189D5B1BAE7030C79351E4BC7AFFE3A0FFECA7FFF1ADFAECA6F8F4ADFAF3ACF2E99FF8F2A7 F9F3A7FDF7ABF0E99DE6E094F3EDA1EEE79BEFE99DF4EEA2EDE89CF7F2A7FEF9B1EAE5A0F2EEA9 F6F1AEF7F3B2FCF8B9F4EEB2F5EFB6FAF3BCFEF7C1FDF6C0F8F2BAF6EFA5F5EFA0F3ED9EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9E7E7E7858585282828606060C2C2C2F3F3F3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDCB2B2B29696968A8A8A888888 888888868686868686868686868686878787898989898989878787898989A3A3A3E1E1E1F6F6F6 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF5F0F1C6F3EDC2FCEFD8FFF7F0 FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAFBF4E1F4DEAB EDC470EBB958F0C479F9DDBFFFF4FAFFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFDFBF7EDD4F1E1B2F9F1D0FFFFF3FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF8989FD 5858FC8384FCC2C3FEF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFC3C3FF8281FE6B6AFB 8282FAE5E5FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C2C2C25959591E1E1E424242AFAFAFFFFFFFFFFFFFFFFFFFF8F8F8D3D3D3AFAFAF939393878787 8989898787878686868686868686868686868888888989898989898787878B8B8BBBBBBBEEEEEE FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDF7 F1F3D7EAEBB8EDEEA9F6F6C8FFFFEFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5ECFFE9D2FFDEBCFFDFBFFFECD9FFF7EFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F6DEDEDEC0C0E99E9EFC6464FF7B7BFFD1D1FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFD9D9FF8282FE6262F6 6666EEC2C2EDECECEDEFEFEDF4F4F4FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCD6D EEDF80EEDF80E4D778E4D779E4D77BE6DB80E3D87EDED47BD9CF75CFC875AFAE6393934B878742 807D3ACBC686D3CC8AE0D792CCC27AD5CB7AE7DD86D1C76EDFD482E1D38AE2D48BE3D78DEAE098 DBD48BDBD48FEFEAABD1CE9373703B0C0A00AFAC7EE3DEB42C2507464113D3CF87E1DD8BF0EC91 E3DE80F2EE90F2EA94E1D88BE2D991F2E8A0DAD37DE5DC83ECE188EFE489F1E488F0E488F1E68D EEE28EEAE090EEE69AEEE69EFCF7C28B8760090500979454EBE8A4FDF7B6EEE3AEF8EBBEE3D4A7 D4C58DE3D58DE1D57FEDE091ECE097EADE95E7DB91F8EC9FF2E797F4E997EAE188E5DC7FE1DA76 DDD66CDFD870D9D16FDFD775E1D977E5DD7BE5DC7CDBD275F7ED94EDE28FEADF91F2E69FE8DA99 483A0474683CEEE1ACE4D8A4DED2A15F51234F4223CABF8D2F2300B8AD77DFD49E897E4683753B FEEEB4BFAF77EDE0A7F4EAADEBE2A3E8DF9DEBE199EEE495EEE28EF3E58BEDE186E1D984E6DE8C F2E493F4DE8FFFEB9AE5D07D96822CE6D57FF2E28BEADA83E5D480EDDD85F2E385E9DE81EEE68B EDE58CF2E58AFFEE8FE4CC6DE8D070F6E185F7EA96ECE396EFE9ABBEB887272100393318F0EAB0 FDF3B3EFDE96E2CB7DFFE595FFEB9FC5914B864D09C88438E8A758FECE80F8DC8EF8EC9BF0EA97 FDF39CF6E38DEBCB79FFE49AE8C07E814C0F884813FBD793EFED92EAF78E9A90676C4640FFCDA7 AB77413C0F00310C00593810B18C53FFE29DFFE499EDD584CFC1715E5206E1D48FFCEAACFCE7A7 F0DC94ECDA88EDDE82F5E48DF0DE8AF1DF8DFEEF9CF8DA8AD0A156A86A25985511D2934EFEE398 F8E28FE2DB81F8E68EFFEB97F3D285AD7230854C07F6C579FDE494DB9B49B7872FDACF71D7C570 E0CA7CF1E497E4DB8EDCD587EFE799E8E294EDE698E9DF90ECDC8FF8E598FFE89BD3B86BA6883A E2BE70FFE394F9DF93E4D288ECE6A2464A2E424B1CC5CFA50E120896926AFFFED7908765191400 A3A165E9EC9DDFE28AE7EA90C7C674EAE69BDCD58CE0D487E5D882E3D780F0E59AE7DF97D8D189 F3EFA4E3E092D7D482DDD883B2AB5AD5CD7EEADE95EBDC99E8D995EEE198F1E599EDE295EEE594 EFE796ECE490DED782EBE18CD3C873B8AC58E8DC89F0E794E5DE8DDDD686D9D185EADE96FBEAA7 FFF2B15D3E00AD8648D0A1639561228F5214AA531ABE6229DC8B4EC37D464D1400F6D5A0FFFAC8 AB9863130A00E6E79FF2F9AAF5F7A7F8E9A0EBDC96E8D994F5E59FF6E29BFBE298F2D086FFE39D E8C788DDC18D38240042301D251706262609CFC497B49B710D00000D0600A6B073E9ECA9F1E398 F2E389E9E67FF7ED99E5DB9CE6E5BA232F1A041009061109070D05CCC98EEDE094F0E998FAFDB5 F8F5B1FED289E4AF65A8742D8E5A178756147B490AA27336DAAC70FFD59AFFE5A9FFEFB6FEF7B6 FDF2A8F8F0A5F3EBA0F3EA9FEAE297E5DD92E5DF93F7F2A6FCFAADF6F4A7F9F7AAF9F5AFF1ECAA F7F2B0F4EFAFF2ECAFF7F1B4FEF8BEF8F2B9F9F2BBFEF7C0FDF6C0F7F1B8F7EFADF7F1A8F8F1A9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9E7E7E78585852525254E4E4EA1A1A1CACACADEDEDEDDDDDDDFDFDF E4E4E4F1F1F1F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0717271343534191919 1616161B1B1B2323232424242424242424241F1F1F1818181515151717172424245A5A5ACACACA F0F0F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFEE6FCF2CEFBE5BF FCEDD8FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFC FEF3E5FBDFBBEDC573E3B64EEFC78CFCE0D3FEF8F2FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFFFCFBFCF8FAF7F4FAF4F6FAF6FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFDF7F2EECCE8E2ACF3F1D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDFF 7676FE4242FD7E7FFEC9C9FEF5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FEB9BBFA6F73F6 5C5EF87A7AFBE3E3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA F9F9F9B4B4B45959592B2B2B525252B6B6B6FFFFFFFFFFFFFFFFFFF2F2F2AFAFAF6767672D2D2D 1212121717171E1E1E2424242424242424242323231C1C1C1717171616161818182B2B2B868686 E2E2E2F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDF8F5F5D9E6E699EEEEACF9F9D3FEFAEBFFFCF7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9FBF7EBFDE7CCFFDEBDFFE0C0FFECD7FFFBF6FFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DADAF7B3B3FE5454FF6060FF C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4FFBCBCFF4B4BFE 6363F19D9DE3CCCCE1E8E8EAF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E8D77AE3D276E4D579F1E286EDDE83E5D77EE1D47BE2D77DD7CC73D5CA71D9D27FC3C276C8C57E DFDC95C8C57FCEC986D3CD87D8CF88D8CF84DFD687C9C170DFD581EAE18CDAD07CE6DD87C9C26A D8D179CAC56DE1DC85CAC876DFDD90F4F0AC69672777753DF0EDA8BDBA714C491C2C2700B0AB6B E9E4A4E9E3A0E7E19BF6F0A4F4EE9EE7E18DECE790EEE98FEDE78CEFE68CF1E68CF4E68DF3E58D F2E48EF0E390EEE394F1E89CEBE39AF3EBB1EAE5B96C68372622076A652C7F78418E865AAB9F72 ADA171C8BC85E3D695EBE198F4EAAAF2E8ACF6EBB0F1E6AAF9EFB0F3EBA7DED58EDED689E5DE89 E9E389EAE487F2EC8EEEE88DE8E287E2DD7FE5DF82E8E286E4DE84F1EA96E5DC90E5DC97EADFA1 8E82473A2E09F0E090F3E295C1B165F9F1A8E9DE9980732FC6BB78938A474A4311DCD690E5DE98 73682F7567384B3F164C40157C7342C1B884E3E1A8E9E09FE8E097F2E897E8DE84F1E58BE6E28F F0E999F0E091F0D689FFEB9C9E8534B7A54FFEF39DF3E993F6E894EDDD8CF5E68FFDF291EAE080 EEE588EEE487F3E487FDEC8DD8BE5DEED977E7D276F2E592DBD488F0E9A7FFF9C4ACA376120900 5D5230D5C896FFEDB2EBD38EFFE69CE4BA6F794301965C1FF4CB76F6D67CFDDA88FFDD94FBDE95 F7E699ECE38FFAF097FBEA95F0C67CA05E208F4F13E8D58CFAFDB1DEE190F7F29B6D4222A0625A A46C43654214261200483613C5A3747A4D19B08343EAD086F1E895766F18ADA654F8EDA2EDDB98 EED996F3E399EBE48FE3E587F5E791F6DF90E8DC8AE6E28CF1EB95FFEB9BF4D186C48841995814 C48C42F8D283FBE593FFE691F3E18CFBED9DFBD69297591D925413FEDF8DFFE089CF9D45C59843 F0D17DD5C471F6EC9CF1E999EEE797EBE597F0E89DEEE699F6E69AF9E499FFEAA0F6D48BC69F53 CFAD60F6DC8DE8CF80E4CE80E3D38AE8E3A1ACAF75C3CB9C9BA47A0A0C00DED7AA9E8F68060000 4A4423D1CF90D2D485DFE38DE9EB9AE3E39FD6D296EAE3A7D3CA82CEC56DEEE58AD5CC89B2A96B E3DD9BDFDB94D7D58CDEDB91DDD98ED7CF86E5DC95E9DC96F1E29EE6D992EBE295EDE497E7DF91 E7DF8FE8E08EE9E08CE1D782ECDE8BF1E08DDDC975E8D380EFDB8BDECE80E1D185F7E7A0F7E4A1 DDC78AA3894E300E004F260688571DB17A3FDAA368EBC57FF7D98EFFF5ABEEDB96241200CBBB84 FFF7C4C6BD89191300D3CF8CE5E499E2DE92F2E49EEEE09EEFE3A3F0E1A2D8C481DEC581FFE39E FDDE9BD0A86CF9D6A3B69970100000020000030800746F46B5A1625F460DB6B35EE6F397E8F19B EBE797EBE79AE8F19FE0E793E1E292FFFCB97A78480508000B1005656036E6D096F1CB7DFCD685 FFE69CF0DA92EBD783F5E490FFEC9DFFE399E4BE7CC69C5EB27C43894B188B4817B66D3EDE986B E9C28AFAEFA8FFF4ACF7EAA2FDEDA5F2E199EDDF95F5EBA1F7F0A4EDEA9DEBEC9EEBEC9EEBE9A4 FBF5B7F2ECAFF4EDB0F6F0B4F4EEB1FBF5BBF7F1B7F4EEB4FAF4BAFDF6BEF4EEB7F8EFB8FBF1BC FFF5C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E7E7E78787872121212121214949495B5B5B646464636363 6C6C6C818181B4B4B4DCDCDCF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D08E8F8E404140 1718171515152E2E2E5353535A5A5A5A5A5A5B5B5B3F3F3F1C1C1C0F0F0F202020474747878787 DEDEDEF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF8F8F3D5 EEE3B2F3EBCAFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFCF9FEF2E4EFDEA9DFC76CE3BE65EEC881FBF2D0FEFDF0FFFFFDFFFFFFFFFFFFFEFFFE FEFEFEFEFEFEFDFEFDFAFBFAEDEEEDDBE9DACDE9CCD7E8D7EBEDEBF7F7F7FEFFFEFDFEFDFDFEFD FEFEFEFEFFFFFFFFF8FEFDE9F8EEC9F4E2B8F9F1DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EDEDFF7171FE4444FE9091FDDDDDFEF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FAFDCED9F2 899CEB565EF45F5EFDDFDFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFAFAFAEFEFEF DFDFDFC8C8C88484843B3B3B3A3A3A7C7C7CCBCBCBFFFFFFFFFFFFFFFFFFF5F5F5C1C1C1787878 3131310D0D0D1B1B1B3C3C3C5A5A5A5A5A5A5A5A5A545454313131161616151515292929595959 A7A7A7F0F0F0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCF1F3F3CEEDEDBBECE9B3F8E8C4FEEFDDFFFAF5FFFFFFFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFEFEFCF4F4DFEDE9BFF8DFB6FEE2C3FFEDDAFFF8F0FFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5DADADADCDCE7CFCFFB5555FF 5050FFBEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFDBDBFF9D9DFF 4040FF7D7DF8D3D3F2EBEBF0F5F5F5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDFCE74F3E287E6D57DD6C66DF0E088E0D17ADBCD75D3C56DD3C86FD7CC73CDC571A39F56 D6D38AC1BE75CECA81BDB76DAFA85DA7A156BCB368D7CF84DCD488E9E195DFD78ADCD585D1CA77 CEC871DAD67CD3CF73DDD97DCCC970DCD886D2CC80C9C57C7B782FD8D783F0EE9AD4D083A49F69 484112605829D0CA93ECE5ABD3CF8BD6D486F5F49DE7E589E5E085DFD87DDDD67BE8DD83F5E78E F8EA92F3E48FE9DA8BE3D789E8DF93E7DD95EDE7A2EBE7A8DDD99F221D06756F3EAFA9756E6737 574F1A362F002F260422190D352C165F5520776F39ABA26EC6BB89DCD4A2EEE6B4F2E7B5F7EFB8 FEF7BCFAF1B4EDE6A5EBE5A2E8E19EECE5A0E9E59CE6E095ECE79AF5F2A2DED88DE7E099EEE8A8 CDC5891D1204928642F7E286C4AD51F6E389ECDA85F8EA98D5CC7C443709EDE495514A217E782D F5F1A5DFD89C302600888052B8B0825E592B140F0026200CA19B5DD1CB86F4EB9FDFD482E5DB88 E3E090EBE497F0DC91FEE39AE7CD828D6F20F4E18DF4EB96F5EF99EBE28FE7DA8BF9EA97FAED91 F2E78BE8DE84F2E68EF8E88FECD77AE9CF71FEE789F1DD87E5D88BDCD792E3DD9DDACF97FCF1C4 7B71520200004E4324CFC095FFF2BCE1C1808D621C6E3A00F8C079D9C26BF3E789FEE695FFDE97 FEDF9BFFE49CF6E597F5E692FFEF9AAF81398B480AEEB373F8F8A1ECF3A4FBF3B3E2CE945B2605 7E4627926B3E46350D0D0801ABA060FFF5BCE6C5908B652A8D6C2881671BAF9847FEF4A2F3DE90 E6D38AE5D48DF1E79AEEE896E8E88CF7E794FBE497EDE192E2DE8CE3E28CEFE894FFEC9DFFE297 EBBC73A16A229B631AF7D98DFFEC97F7E693F2DD91FFECA3E8B876864607B48536FFF299FCE288 DF994BDFB060FAE691E6DD8AF1EA99FBF5A5F2ED9FF3ECA0EDE196F2DF93FEE098FFE19AD5A75F AD7C32DBB96CFBED9DF1E293F5E496E5D990DBD492D5D59CF4F9C84F532B6D6D3EE9E2AC4D4115 60562BCAC68BD9D897D4D590E5E6A2A1A2646262295E5C35E8E5ABD5D18ADFDA85E5DF8BDBD394 A79E63817B3DC6C280CDCA869F9D59D1CD8AEFEAA7DED692EFE59FEEE197F6EB9DEDE897F5ED9E F0EB9AEEE897EAE392E6DD8CF0E290F6E594F4DE8DF3D889F9DC8CFCE399E0BF77D7B9748E732E 957C4080682F9B834C3E2400624321EDCD93FFE2A6F9D797ECE196D6D687CBCB7DECF0A5383D12 92955EFDFFCDD8DBA7101200AEAE6CDEDF95DBDC8CD6D98CC4CB7FDAE39AE3EAA5DCDE97F3EEA6 EFE29BFFF5B1B7A66BAFA470FFF7CD9F9D842225140007006D6637B39656C5A057F7E594D0D17B DCDC8BEDE59BEAE89DF4FFB3AAAA6369571CEDCC92BE9C6C1D0500524A3BF0EAD1FFF4C8F9E1A1 FFEAA2F9E9A5F4F0ACDEDE87D3D279E7DF8BECDE92F6DE9AFFF4B6FFE5ADF2CE9BDA9D6DB16E41 8F4A1D753E09926F2FC9AD6BFADF9EFFE9A7FCDE9DFCE3A0FEE9A3F8E8A2F1E79EF7F2A7EDEBA0 EBE6A6F7F0B8E1DCA1F0EAB0FEF9BFF6F0B6E8E2A6EDE7ABEEE8ADF2ECB1F8F2B7F5EFB5F6ECBA FAF0BFFEF4C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E7E7E78F8F8F2C2C2C1212121D1D1D212121212121 1B1B1B1C1C1C2C2C2C696969A8A8A8DFDFDFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFE8E8E8BEBEBE 6161612C2C2C2F2F2F5E5E5EA1A1A1AEAEAEADADADB1B1B17777773131311F1F1F464646888888 C9C9C9F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F3DDE9E3B0EFE7C3FDF6F3FFFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCF3F5DFE3DEA1DCC25ADEB841F1E097FAF3D1FFFEFAFFFFFFFBFDFE F3F9F9ECF7F2EAF7EBE9F7E9E5F2E5D4E0D4C1DEC0B4E0B3C4DDC3DBE0DBE5EEE5EAF8EAEAF7EA EAF7EAEDF8EDF9FDFBFCFDEEF9F8D5FBEDC5FFE8CEFFF4E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEDEDFF7171FF4848FA9B9BF3E9E9F4FAFAFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFD DFEEF19FB7E8515DF34847FFDADAFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6E1E1E1CFCFCFC6C6C6 B6B6B6A1A1A1808080535353333333606060B1B1B1E3E3E3FFFFFFFFFFFFFFFFFFF9F9F9E1E1E1 9D9D9D4A4A4A1F1F1F393939787878AFAFAFADADADAFAFAFA3A3A35959592727272F2F2F5B5B5B A4A4A4D8D8D8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F2D8E7E3AEF6DBAEFCE3C2F9F1DDFAFBEFFEFEF7 FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFFFAF4FDF7EDF8F7E7EDEDC5E6E3A8F5E1B6FEEBD5FFF9F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2CFCFCFE1E1DEE5E5FA 5D5DFF4949FFB2B2FFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEFFB9B9FF 7C7CFF4F4FFF9E9EFFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6D57DBFAE56BEAD55DBCB73DACA72E1D17ADACC74D0C36BD6CB72DBD076CBC070 89833CC5C078DFDB90E2DF90D9D482E5E18FCAC475827A2F655D146C641DCBC37FCAC282D9D290 F1EAA4EBE59BD8D384D4CF7DD7D27FDAD584CBC578E5DE96E4DD98847C37F4EF9DE6E18EF5F0A4 F8F3AFC0B97D4F48132B2601878348DEDD9DEFF0A9D7D98BCFCE7CDED97FDCD57AE0D97EEADE84 ECDE86ECDD88FBEA99ECDC8FE7D78DEDE098EADD97E0DA8DDFDE8CFAF6AF78744C1E1800EDE7B4 E3DDA4E3DF9EEAE7A3C3BF7C8883474C4616181108100905130B000F0600191100362C0D4F4427 685E407D74547F75558F8665B5AC88C8C098DBD3A8E6E0AEDFD8A2DED89DECE9A7F4EFAEF4EFAF E1DDA1A59F651E1700E5D792DABD60C9A94DF6D981ECD27EEDD687B7A25653440D7A6E27BAB165 1C1400C1BD74FFFFC9B2B1774D49129D9A66DAD8A79D9B693E3C0D4A470F676325BAB16DFBF1A9 E9E194E8E69BEAE399F8E39AFFE8A1C39D54B6984AFFF19FF5EC96E2DD89DDD786F0E496E5D587 F7E894F9ED99E6DA87F3E593F0DF8BD0B963EACF78F1D783E0CB7AE1D58DF8F2B5F4EEB2EAE2A9 F4ECC3F8F0D98A82750200002E2313BEAD83AB90576B4506CC9E5CEFCB8ADDC971F8F396ECDD8C FBE29AFFE9A6FADB97FFE39AFFE395D3AE60805106C88D4BFFE59FECE98FE7E295FCE0B0A27458 431C008F7534D0C493221B0A56511FFAF0A8F3DF9CF7DEA4F7DAA4977133522601D6A65AFED384 FFE494FAE598F1E599EDE697E5DE8DE4D786ECDD8DEEDD91EFE092F3E698F1E897ECE291EEE08F F9E695FFF3A5E2B46AA1631DB67B32FDEC99FFF2A1F8E299F2E199FFEDAADBA9657F4F02DCB15A FFE992F5BA6DB57D30F8D887EDE28FD7D280E0DB8AF3EC9FE6DE92E0D187FAE39CFEE59EE0B26A AB762ECE944BFEE194F5F3A2E5DE8FF4EA9CF2E69EEEE6A5EAE7AFDEDEAC1D1D00C6C28AFDF3B7 DFD28FE9E297E4E196CFCC8CEEEDB8B9B78B363412090802B3B27DE8E9ACC5C57ECCCC7DD4D284 C2BC80DDD79EA6A2638E8B4BB5B473B7B676CECA8BEFE9ACECE3A2F4EBA2E0D585EEE693E6E08F EDE897EBE796EAE594E6DF8EE3DA89EFE092F3DE92FDE498FFE396F9D387F8CA84CF9C5D9D7037 1F00007C5D24AA935EE8D7A1685A2D50431FFAE9ABF0DF9EEADA96DFDE94BEC276B2B86CCDD58C 3C461E8B935DF4F9C8D0D2A1050800999A58DFE096C5C774C1C671A9B461B9C577BECB7FBEC87F E6EAA2E8E49FDED6989F9A640B08005A5E3CF2F6DCD0D7B9D1D9A8F4E8ABC09953BC883EFBE190 EBDB8ADBCE85E9DA99F6F0B094A05D0E1000B8A86FFCD699C7925C53290918070041402B34330E 6D662AC6BD77DCDD9AE2ECA8D6DA84F2F49DFBFAA7F7F0A6F0E5A0EBD99AE8D097FEE8B1FFF5BE FFFAC4F2CE99BD945B9C6D32713E048F6025CD9E62ECBF83FEDE9FFFE7A6FCE29FEDDA95E9DE96 E9E19AF5EEB2EBE4AFDAD39DEDE6AFFBF4BDEEE7AFE5DFA3E8E2A6E3DD9FE6E0A2F2ECADEFE9AB F6EDB4F8EFB7F9F1B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E6E6E6A3A3A35E5E5E5E5E5E7D7D7D8D8D8D 9090907B7B7B4E4E4E2626261A1A1A535353A7A7A7E3E3E3FBFBFBFFFFFFFFFFFFFFFFFFFBFBFB E1E1E1706F703435344648468A8A8ADEDEDEEEEEEEEDEDEDF2F2F2959595292929212221686868 BCBCBCF7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF3E5FAE1C0FCDCC4FFE5E2FFF4F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEFBF4F3DBDEDB8FD1C34DDEB63FEED591FDF9EFFFFFFF F0F8F8D0E9E7B9E0CEB3E1B6B2E1B1B1E0B0ACDCABBAE7B9CDF3CDD9EAD9D3DED3BFDFBFB1E1B0 B2E1B1B2E1B1BCE5BAE9F7EBF3F5DEE9E8B6EDEAC0FDF8EEFFFDFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEDEDFF7272FF4343F08B8BD5D7D7D4F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFBFFD7DBFB9398F94C4FFC4A49FEDADAFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9191914F4F4F 313131282828232323191919393939707070B4B4B4E8E8E8FAFAFAFFFFFFFFFFFFFFFFFFFEFEFE FFFFFFBABABA545454252525515151A5A5A5EFEFEFEDEDEDEFEFEFDCDCDC666666222222474747 909090DDDDDDF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF7FAF6E8FEE4C8F6DDB1E9E1AAEDEEBC FDFDE0FFFFF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FEEBD6F7E0B8E6E1A9ECECB9F8F8D1FDF9E7FFFBF5FFFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5FAFAF8 EAEAFE6C6CFF4E4EFF9898FFDEDEFFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1FF 9090FF5F5FFF7E7EFFBEBEFFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7D47EB6A44ECCBA64F1E18AD9C972E6D57EDECF79E5D680DED079DBCD76 E7DD8CBDB66E706A20CEC87BCDC876DFDA86CCC873F0EB99D5CF81CBC47B99924E8F8746675D28 574E1F7F7745898149C2BB7ECAC283D1C987F3EAABE6DCA1FCF1BBE0D6A44D4119ACA360FAF4AF EDE8A2E7E099F6F0AAF4F0ABB1AE696260274E4D10929155D9D99DF4F4B0F2EC96E8E387E9E287 F1E68DF1E28DEFDF8BF5E493EFDE91F0E296F4E69EE4D791DDD683E7E585E1DD8EE9E3A3261D03 8F8950F3EFAFCBC87EE0DF8EE7E59BF2F0B0FCF6C3E1DAA7C0BB89ADA77A8179514D4530372E1F 241910150B010B00000400000200000E04001B10062C241649422C605A3C807B50A29F6CC5C18B D7D49CF7F4BF7C784B635E2DFFFBBDE2C371F8D585F6D98EF0D289D5BB76C0A968C5B373524209 D5CB916C6531605C2BEAE8A6F2F2AE8585469F9F63FAFAC3FAFAC3CCC993605C25918B50595113 C8BF7CFBF2ACF2EFA8F6EEA7FFEEA9FDE19BA37F37EDD88AF7E593F8F29CDFDD88F2EC9BF0E498 E6D68CF1E394EFE294EBDE93F3E69CE7D68BD4BC71FDE196FAE59BB6A15DAFA2657C7744706D3F 6D68446A66487F7A6976716C18120E0700002011024F350C79551DFFE1A3F6D191F2D988FEF39B E8DF8FF1EBA0EFE09AF7DF9DFFD593F6CA879C641F9E6F26F7D58DFFE99FF7E18CFFF7B2C0986D 2907048E8746E7F5997986530F0D00D0C292FEF1A9F5E89DEFE2A1EBD4A07A4F1ABC8042AB6522 BF7D32F5C678FFE998FAEE9DEAE290EDDE91F7DE93F1E596EFEA99F2E397F2DC91F6DE93F8E599 EDE08FF2E794F5E28FFFE89AF8D087A16921968131F9EF9FFEE9A0FFE5A2FEEBA7FFE89FB5893D 955B0DFFCD7CF9E38ECE9548B27D34F1E18ED8D27FD6D07FE2DC8ECEC378E4D38AFFE59FDBB16B 9B6922CF934CFFDF99F8E49AE6E998DCDB8BF0E99AECE298F8EEADFFFFC7B1AE7D1F1C04D3CD95 EAE0A1EEE69DE8E48DEDEC9AEEEBB1847F5C28221513100786865DD4D6A0CDD08DD5D88FA8A963 6E6E3A9992589791588784486461229A9959BEBE816F6D318E894CECE5A1E9E294E9E28BECE78F E4E391E8E795E5E290E9E492EFE596F1E495F0DD8FEBD086F2D288C6A156A77D34A87232B2783F B9864D3913066C4F20F5E0ACE2D8A2716D3F414119ECF0AFE7EAA6EEF0A9D3D08AC7C37CD7D491 E3E0A1605E3C5B592AFAF7CBE3DEB0181100958D4FFCF4ACF1E796DED079E5DA89DAD487D0CC84 BBB56FBEB36FDDCD8DFFFBC47E6E490C0100211B0B42412F7F8167CACEA0FBE9ABD2A458CD923A FDD97EFBE08AF0DB94FBE7B3EEE6BC2C32186B7840FFFFC2EBCA7BBE883CF3CC8F80735856593F 50553B858346D6D084E9E79BD5D78CE4DD8DE3DB8AEDE698E9E299DED894E5E1A0E5E3A4F0EFB0 F3F2B1EAEBA9E7EAA7FBECADFFE9B1EEBD86BE844DA16A329B672EB48349DBAE72FEDFA1FFEDAC F3DA97EFDB97FCF2B6E1DDA6E8E2ABF7EFB9FBF4BCEEE7B0EFEAB0E4DEA3D0CA8DDCD698F4F0AF EEE8A6F9F2ACF8F0A9F5EEA7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1CECECEACACACAFAFAFC3C3C3 CECECED1D1D1C2C2C2A2A2A27979792E2E2E333333696969B9B9B9F6F6F6FFFFFFFFFFFFFFFFFF FFFFFFE9E9E96969692B2B2B484948969696EEEEEEFFFFFFFCFCFCF7F7F7939393272727313131 858585D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF8F2FEEDDCF7E2C6F2E1C6F9F2E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCF4EDEDC6E0D78CDDB548E5BF62E9D593 CEE4ABBFE5BEC3E0D1C9E0D7CBEACDCBEBCBCBEBCBCAEACAD7F3D6E6FBE6EDF5EDE5ECE5D6EBD5 CAEBCACBEBCBC3EBC3BBEABAB4E2B7C0DDA8D6DD9EEDEBC1FDFCF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFFE0E0FF6A6AFF4848F59E9EE3EAEAE2FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFFE3E4FFA5A6FE5556FE4949FEDBDBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5 DDDDDDB3B3B38E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8B8B8B979797C7C7C7F3F3F3FCFCFCFFFFFFFFFFFFFFFFFFE7E7E7ABABAB 7474745858585151514D4D4D3737373939395151518E8E8ECFCFCFF0F0F0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBDBDBD4C4C4C232323626262B8B8B8FFFFFFFFFFFFFAFAFADEDEDE616161232323 585858A9A9A9EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFFF1E4F9EBD1F0EBC6 F3EDC5FCEFCAF6EFCCEFEFCEEFEFCDF6F6DCFDFEEEFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFBFFF3E7F9EFD9F1EFD0EEEFCDF2ECCCF9E2C9FADEC5EEE9C5F4F4D6FEFEEAFFFFF8FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E3E3E3 EEEEEDEBEBFC8787FF6262FF8F8FFFCBCBFFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFF CBCBFF6C6CFF4848FFA2A2FFD8D8FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE9D981EBDD82F1E189F5E78DE9DC80E8DA82DDCF77E5D77EE3D57C DACC74DED37BCEC973A09B48ACA754CAC372E2DB8BD0C978E2DB8AE5E08ADED880E4DF86E0DA7F D1C979B7AD687D74356459234F45143328042D2307372E0D3C341561594351483C140A08110B02 A09C64DDD8A0CDC68DEBE2AAE9DFAAE2D6A7F2E9B9E9DFB09C95625550188E8947D3CE7EFCF7A3 E8E28BEBE48BF9EE96F2E890EADF89F4E995F0E594E8DD8EEADE94E9DF8DD8D279E4DD8CF2E9A0 8D833F483F14E9E098DBD386D6CF7FE1DA8AECE596F6EDA2F3E8A0EEE39CF7ECA7F0E4A1EBDF9D E7DB9BDFD195C8BB7FA7995F8F814874672F5346173C3214070000000000040100030100090801 111008221F0A55513B2D27135C5540BFB894E6DDA4FFF4C0F6E6B1CCBA7FB9AA61FBEDA0E8DA93 493F03B2AE71B1B46B343B00B6BA6AF9F7B2C5C27C4E4707EAE39CF4EBA5F9F1ABC7C0799A934D E3DC995A55149D9858BCB377928549E0D190C8B56FA7964AFCF29EEBE389EFE990EEE890F5EE9A EBE091F4E99AEEE598EDE599F2E9A0F8F0ABDBD095BBAD7C8272493827101506020E03000D0500 2220003A3C08575B2A4F4F2657502E594526896847693F1E5527005C34006E510E9F8C43E5D791 FFF9B5E8DF9AE5E89CE6E499F8DD9AFFDDA6D08D56774A09CEB96CFFF9A7FFDF90FFECA1EDCD87 4B30094A3822F2F0BFD9DFA01F200A6D643BFFFFC1FBECA3EADF88F9F1A46F602DC0A56FFFE4A6 DBA25BBA7A2BBF822EE2AC57FFE58FFCE18DF5DA8BF9E397FDEE97F3EA8EECE68FEBE696E7E197 EEE69BF3E59AF3E293ECDA87FAE593FFEF9CF0D9887A5D0DBE974DFFF3ADF8DF96FCE29DFFE9A3 F0DD92856119BF904CFFFEB3FBD38DB6843CD7B35FFEEE98E2DB88DEDB89DECD7EFFDE90F5BC6F BD762ABE7C31F9CE87FFEDA8FAE8A0EEE898EDE893F4ED95ECE490E9E199FFF9C1A49D73383024 EEE5C0D0C99CEBE2B1C3C28CA9A9804B4531100A02191304ACA672EDE7B5CFCB92A8A766DEDE9D 9592660C0501140C025F5834B8B4838C8C5396985A5B5E1B696B268F8E45C3BF72E2DB8AE6DB88 EAE896DEE99BD0D48AE9E18FF0DC83FFE39CFFE49BEDBF72CA965AC18F4D8A5E139F752CDEBB7F F8DFADFFFBC553481B372F0BDAD699E9E5A8948E5D2E2903F6F5BBEFF1B7BFC386CCCD7FDEDC91 DBDA9FF3F2C583815D14130242401BC9C98FB4B471DAD58AF2EB9BEDE693EBE391F5EDA3EEE6A1 EAE4A0E7E194DDD981D8D276E1DC84BEB671160D033A301BAFAB9B45473117130039271157390E 927427EAD48AECDF9CE2D999FFF6CB928662242200DEE69CFDF1A5E1AE6DA0672DF3D29FC1BF94 F4F9D7FFFFE0EFF4C1DFE4A2F3F0A7ECE197ECE499E8E096EDE59CE5DD95E1DA94DAD48EE7E39D F6F2AEF4F1AAF1EFA9F0EFA8E4DA95EAD595FEE5A6FFF0B2FADD9FF0C789B78B4C8E5D1EA57132 F3BD7EFFDB9AFDDC9BFBF5A9DBEA99D8D68FDDCF93DECE9BE5DCACEAE8B7D8D8A5D1CD97EDE4AB FFF8BCF1E9A8F8E9A8FFF0B0FEF0AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8F4F4F4F4F4F4 F7F7F7F9F9F9F9F9F9F7F7F7F2F2F2D5D5D55F5F5F2A2A2A3333338B8B8BEEEEEEFFFFFFFFFFFF FFFFFFFFFFFFE5E5E55C5C5C2222224B4C4B9E9E9EF0F0F0FFFFFFF9F9F9E8E8E8878787262626 464646A0A0A0DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFDFBF5F0EBC9E7E2AEF4EFD5FFFDFCFFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF5F4EDD1E0C676D8B54B CAB03999C14B97D280C3DCC1E9EAECF5F9F5F8FCF8F7FCF7F7FCF7F9FDF9FCFFFCFDFEFDFBFCFB F9FCF9F7FCF7F7FCF7E9FCE9CEF5CC8DD08992C878C2D68FEAECC3F9FDF5FEFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3FFD2D2FF6161FF4D4DFBB1B1F6FEFEF6FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFFF0F0FCB9B9F95E5EFB4848FED8D8FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD ECECECBCBCBC6B6B6B232323202020212121212121212121212121212121212121212121212121 2121212121212121212121211D1D1D343434909090E7E7E7F9F9F9FFFFFFFFFFFFFFFFFFF6F6F6 DEDEDEC5C5C5B1B1B1ADADADA5A5A58484845252522B2B2B4A4A4A979797D6D6D6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFB6B6B6404040232323767676C5C5C5FFFFFFFFFFFFF3F3F3CFCFCF575757 282828696969BDBDBDF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFEFDF9 FDFBF4FEF1E0FCE3C1EDE1AFE1E1A4E1E1A4EEECBAFCF9D7FEFCECFCFCF4FCFCF5FCFCF5FCFCF5 FDFCF7FFF8F0FFE8CEF5E2B7E6E1A8DFE1A2E6E0ADF5E0C8FFE6E4FDF8F2FEFDF9FFFFFCFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2 CDCDCDDEDEDDEDEDFAA2A2FF7777FF8787FFB9B9FFF5F5FFFFFFFFFFFFFFFFFFFFFEFEFEF9F9FC EDEDFBB0B0FC5151FE3F3FFFBFBFFFECECFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD074DED176BBAE52B4A74BEBDE82F0E387F3E68BE2D579 EADC81EFE286DAD176E9E589D9D47C7C762290893AEDE699D7CF84E1DA8CEDE491CCC66AE1DB7A EBE682D8D06FDED47ADAD182DBD18FB4A8718179468981535F582D423D18433D253A3525332E1E 312D193D3A14645F2B6A632C665B25716533897A4DB1A377DCCFA2F6EDB7D7D094B5B16C807A2D 534E00C2BE6AF4F19BEDE78DECE58BE9E388EDE38CF1E792F3E898EFE495E9DD8DEDE290E5DA8A E9DE8ED1C578766A1EE2D68AF0E596E6DB8BE8DD89EBE187F1E78EF6E891F2E38FF7E794EDDE8A EBDC88E6D783F4E590FEEF9AFCED98FAEB96FFF29DFFF8AAEFE5B3CCC69CA5A07983805E565639 3130181A1C0F0908030E0B00080200030000030000202000484327716A4C9D9265C8BD7CE7DB94 EEE2A2685F2E7D7B49AAAF6E7E8A366E7129F2EDA9F2EBA36D651E807329FAED9DE9DE8FF6EA9E 9C944AA69F59D2CE8D4E490AD2C28E695723796A2F5D510D968E43837E2EE0DC85E9E48DF0E997 EDE495F3E89CE2D691F1E8ACFAF1B5D9D19599925D4D451A0900000C02001F140F4E452C9A9375 E0DAB7F8F6C6EAEDAFF3F8BBFAFAC0FDF1BCFFEDBBF4CB9E9A6032A36B38F4CA8DCAB46C948E40 7B7434C9BE83F7EDACEAF0A3D6D98AF6DE98FFD8A3AE6833966F2FFAF5A5F6E791F9D485FBDE9F 9E7D3D210B009A915FFFFFD3A7A3780F0800E6DDA9E5DA9AF4E7A0F0E795C7C0757C753DFFF5BB FCE4A1F6D387E7B360D59A41B3781ECA953DF9DD88FFF29EF8E392EFE486E4E07EE7E189F2EA9C F0E9A1EFE69EF8EDA1FDF2A1EBE28BE8E089FBF49DFAED9BCFAD6185520BECC680FFEAA0F9E49E F4D995FCF8AED3BE7A795312D6BA77FFEAA7E7B570C38C3AFBE590F0E692F7F2A0FFEB9CFBCC7E CC8131C77F2DFFD687FFEAA0FCE9A5F1E5A0EDE194E6DC87F2EA91F5ED98E9E298E7DDA79F9570 170D06827A608C86686E6A451E1E00020100060000130D0295905BFDFCBCEEE6A6DBD496CFCC88 F3EFB2BBB59718110B0301006A6745FEFAC9EEEAB2CFC98C756F2C6C661E7873278F8B3DACA758 DFDC8BD0D284D0D68DDDD893EBDB8BEFD276FACB89D9A15AA76E23C28753BF8C4EE7C074FFECA4 FFFDBFCFC991D5D49C8C905720290CF4F5C1F4F0BD877E55403516F3EEB5F2F3B8BDC381CCCE7F F2F3A9EDEBB6E4E2BE5352360102001011009D9F5DECED9FE7E693D0CB77ECE793DAD788E9E59D EBE6A4E5E09FE5E194EBEA8EE4E47FDDDA7AF0EAA0837749070000524B3BEBEBD2A79E8B4B3C35 1B0A08342804D2CA86D9D59DE7E7ADEDE9C2393210564F2ED4D485DCC67AB5753ED59B6D624225 0000003F462570785C7C845C9AA570E5E19DFEF1A8EFE59EE7DF97F4ECA4F9F1A9F0E8A0D7CF86 E9E199EFE69EEEE69EEAE199E8DF97D6CF87CEC983DCD58FEFE19CF8E39FFEEAA8FFDC9AF7CC8B B88241844A0AB57336F1B272FADC91EFE898DCD488CDC684D8D399D7D3A0EBE8B7EFECBBE9E8B3 E1DEA5E7E3A5F8F1B0F3E8A1F4E69FF3E79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB7E7E7E3434341D1D1D6C6C6CDCDCDCF9F9F9 FFFFFFFFFFFFF8F8F8D7D7D75252522B2B2B6E6E6EBFBFBFF5F5F5FFFFFFF6F6F6D8D8D87A7A7A 2626265F5F5FC2C2C2EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF8EDD3F4DEB0FBE3C1FFEEDEFFFBF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FAF0E2EBBD B4CB798DB04198B340BCCB7BE3E7CFFBFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFFFBEAFBE6BCDB9CABD184B3D894CCEBBDE9FDE7F8FFF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3FFD0D0FF6060FF4444F49999DFE6E6DEFAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFDE8E8E7ADADDA5858EC4343FFC7C7FFF1F1FFFEFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDEFEFEFC9C9C98B8B8B545454525252525252525252525252525252525252525252525252 5252525252525252525252525252524F4F4F606060A2A2A2E2E2E2F8F8F8FFFFFFFFFFFFFFFFFF FDFDFDF7F7F7F0F0F0E9E9E9E7E7E7E3E3E3D6D6D69C9C9C565656313131515151AAAAAAF4F4F4 FCFCFCFFFFFFFDFDFDFAFAFAA9A9A93B3B3B333333979797D6D6D6FFFFFFFFFFFFEAEAEABDBDBD 4C4C4C303030868686DADADAF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF9F5FEF2E4F7F1DAF1F1D4F1F1D5F7EDCCFCE8C1F1E7BAE8E7B7E7E7B6E7E7B6 E8E7B8F4E7C3FFE9CDFFEECBFAF1CEF3F1D3F0F1D4F3F1D9FAF2E8FFF5F7FFFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9EAEAEAF2F2F1F2F2FDB3B3FF7E7EFF7070FF9C9CFFF0F0FFFFFFFFFFFFFFFFFFFFF8F8F7 E5E5EAC0C0E68686EB5050F75E5EFFD9D9FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D67DEBDD84D9CB72CDBF66E2D47BE6D880E8DA81 E6D87FE6D87FE9DB82E6DC83DFDB84DBD482E0D98A70681E857C35CBC37CE2DA91E6DC91E2DA89 D6CE78D8D079DAD271D3CD68CEC86CDAD381DED68BDDD78FE7E49AB9B76C85863F7A7A3AC0BF87 DEDEAAE3E1AFE5E2ACDCD79BDCD591DED691DBD28EC2B97AAA9E63867B40766E2FBCB570FDF8AD ECE697C1BA68C4BE69ADA750C3BC62D0C96FDED77DEFE58EF0E691EBE08FF4E698F8EC9CF8ED9B E3D888F1E696F3E899D0C478E9DC91EBE092E8DD8CE8DE8AE9DF87F4EA91FAEB96F3E491F8E996 F1E28FF1E28FEBDC89F3E491F1E28FEFE08DF2E390F8E895F4E796F1E7A3FBF5B5F1E9AFF0ECB4 EBE8B6CCCC9BD8D7AAB0AE8187815B665F3E4A401D281C040F02000600000400000B0000342611 4F4222D4C79E8F856B403A24ACAB82B5B9774D4C08D5D090FAF3ADC5BB73534803E4D78AEADE92 F2E69BE4DC935F5813C9C483B4AC6F7C6937DFCD9B85743C8A7B3EF5EAA6827A35797326E9E298 E7E098E8DF9DF9EFAEF5E8B3C7B8946354412C1D0E050000372A1365583AA69B6EDBD1A1E8E0AA F2EDABF0EFA3E8E79BE2E19CE8E5A3EEE5A6E5D398FFE6B0B07F4C6C3301DDA76FDCB372F5DE95 EEE697E0D995E2D798F5EAA6F0F3A6E5E294F7DB96EEAC748D4A11D1A864FFFFAFE9D37EFFE69C DCB27E6B461B3D2605E9E2A4F6F4C12F2D0E666430F1ECB8FAEEBBEADF9EEAE3A4605A1EDEDDA3 FFF8BAFFF4B0FFF6AAFFF09FF0C56FE0B65EC9A04BB99542DFC573FFF2A1F3F196ECEB8DF6E796 FFE8A2FFE3A1F4DD97F4EC9CF3F89EE8F093E6E68FF3E999F4DD93FFE198B68841A97533FFE29F FFEAA5F5E49CF0ECA2FFF4AF8D6624BC9654FFECA9FAC680B77428EFD07EFEF19EFBEFA1FFE7A0 E7A55EBC792BE7BA63FFF29BF3E697FFF4B1F6E9A7F6EAA2FFF5A6F6ED9BEAE192EFE8A2FDF3BE C0B7921108000801000802000C08000E0D000001003F3C2596926D827F48CCC882F6F2AAEBE89E DEDB93F0EDB3DBD6B02723121C2108D1D497EEE8ADF0E2A6E9D496F8DE9FE5CD8BCBBA75DFD78F C1C378D7E195DEE196EFE39DF9E2A0E9CE81D4B35BB48949A07330BE944AEEC693F5DC9EFFFDB4 F1E59BEADE95F2EEA8E4E3A9B5B788000400656346D6D1B4A4997C382C0DF7F3B5EFF3ABD6DE8F E2E49BD1D08DFFFDCAB9B7920E0D004C4C32959860E0E39EDDDE90DDDC8AF7F2A2DBD787D9D783 E4E095EEE9A6E9E4A5EAE39FF2EB9DF5F39FEAE292F0E4A77A68460E00000A0000141408423A2A C6B4A0C1AA8B90823CBEB46F817B40DBD99EDBD8B01D1700797543E0DF90F3D88BCE8F55C58857 2E0F00464727979C7A1E22102A2F0D010900888444FEFAB5F1E79FF3EBA3F9F1A9F1E9A1F4ECA4 EDE59DEAE29AEDE59DF4ECA4E9E199E9E199E7E199E7E59EEBE89EEAE39BEBDD97F6E39FF1D793 FFE7A4FFE5A4E0BA7AB88949936021AD672EEEB279FFF0AEEEF0AAECF3B1E8E8ADF9F0BAEFE7B0 E7E6AAE7EEACE6E8A6E1E09AE8E997E0E48DE2E68FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEBEA898A893F403F212121666666D2D2D2 F4F4F4FFFFFFFFFFFFEAEAEABDBDBD4444443535358C8C8CDBDBDBF9F9F9FFFFFFEFEFEFB9B9B9 626262232323737373DBDBDBF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF2E5FDE4C6F9DFB8F8E4C1FEFAF4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7FCF0 DEF3C3B3DE9F94C87EB6B95EDAC676EBE4B8F7FAECFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6FAF3E3EAE2B0D5DDA4C3E2B2C0ECC1D2F6D1EDFCEC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECFEC5C5FF6565FF5151F29B9BDBE2E2DAF9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE6E6E0ABABCF5656E74040FFBEBEFFEBEBFFFDFDFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF6F6F6E2E2E2C4C4C4A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6ADADADCBCBCBEAEAEAFAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFEFEFECDCDCD8383833333332B2B2B898989 E3E3E3F8F8F8FFFFFFFAFAFAE3E3E3929292353535424242B3B3B3E4E4E4FFFFFFFFFFFFDDDDDD A3A3A33D3D3D3636369E9E9EF3F3F3FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFFFEFDFEFEFCFEFEFBFEFEFCFEF3E7FDE8CCF0E5BAE6E5B2E5E5B0 E5E5B0E7E5B2F3E5BEFFE9CEFFF8DCFFFDEBFEFEF8FEFEFCFEFEFCFFFEFDFFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFAEDEDEDF4F4F3F5F5FDC9C9FF8C8CFF6060FF8484FFEDEDFFFFFFFFFEFEFEF8F8F8 F1F1F0DFDFE79D9DE46565EA6262F78D8DFFE9E9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8DA81DDCF76E6D87FEDDF86D6C86FE2D47B E1D37AEBDD84E5D77EE0D279E3D880DFD983D2CB7AEDE69AE0D8909C9350584F0E7F7635CCC37F ECE49DE8E095E1D98DE7E088DCD678D6CF78D8D280DAD384D7D381D3D37CCFCF75D4D77DA6AA55 7E81345A5B16EFEDB4E8E5ABD6D48DE7E291E8E48CEBE58DD6CA7AF2EDA4FEFEBCB9B167898336 9C9548DDD585EFE895EEE892EEE690F3EC92EDE68CD0C66DE3D982DDD37DD5C977E4D788F5E898 F5EA98E7DC8CF1E696E0D586EFE495EEE394EADF8FE9DE8DE6DC88E2D881EBE188EEE08AE8D986 F0E18EEFE08DF4E592F1E28FDECF7CDCCD7AE3D481EFE08DF1E28FEBDC87E7DB86E9E08BE8E08E E9E393F2EC9FF3EFA6DAD38DECE6A1E2D995D3CA86E0D390F2E0A6D7C0959B82656750384C381B 2115000C0200271E036E6352332B1A908A6ABEBC836B6527AEA768F5ECAAFFFAB48B8139A4984E FDF0A6FBF0A6F6EDA7D1C885625A1AE9DFA3BEA877957B4B846E3A78672FBDAF71FFFFC28D8543 827D3DF9F3B9FEFBC6C7BC8B52441E0F000012000074633CA29366E3D6A3FDF8C3FBF0B6EFE6A6 E2DA90DFDA83E3E17DE0DC82E5DD92EDE39CEBDC96F3D897F5D4978D5920945C21F1BE7ED5AF69 FFE99BE0D985F4E8A1EDE09CF3E8A1EAE99CEFE599FFEBA4C180439F6021F8DC93F1E08EF1E38F FED7908C5F373C17048B744BFFF8B88E8C50161501D2D285E8DFA8DDD2A4FFF7C1766D41BCB58F DBD9B18A855A837747715E2B866B37896A339A7941CBAB70E6C68DCFB279CAB175E3CE85F2DE8E F8E298F4DC98EEDA93EFDD92ECE08FDED880E8E48BF4EF9BECE699F5EAA2F5E198F2DC968A5416 D09E5FFFEDABF4ECA3F9F0A5FFEBA5CCA5629F6C2AF3DD96FDDE93BA712AC49549FFF1A4FEF0A5 FEC985CA8644E1A85DFFF8A0E4EC8FE8F19EF6E8A5F8E6A8F4E6A3ECE198F0E599F3EA9EE9E09D E8DFA8F2E9BF635A3B0600001813000F0A004C4D27B4B78CD0D0A1D3D1A04C491899965AEAE798 E6E492CBC87FE4E2AA46422B0A0700A5A669F5F4B0D6CF8BFFF6B3F9E3A0CFB674EAD18FF4E09E E5D995E3DE9BE7E9A7F3EAA6FFECAADEB779A27C348F6C19B99459DFBE80F3DB96F4DEAEF7EAB1 FCF7AEEEEAA3DAD68FE6E19EEEECB6979870090B00000000655B43DBD0AEA49868FDF8BAE5E8A0 F9FFB4737336060400726F4653512F2C2B15EEEEBBFBFBC1CFD188EFF0A2F2F0A2E5DF95E4E194 E0DF88E0DD8FEAE4A2F1E8AEF1E8ABF1E8A5F2E69FF9EAA7F9E9B3856E4E140000483D2EB2B18B 5D5236080000735B38C2B264C7BD73635E22DCDDA2A9A781060300908F55F8F5A7FCF1A5C18044 EFB27E432403514F2EF2F4D0FDFCE0D7D8B4C6CC9BD7D399F4E9A9F6EDA7FBF3ABFAF2AAEAE29A F4ECA4F9F1A9DBD38BE9E199F3EBA3DFD78FE3DB93E7E299DEDE94EAEAA0EBE89EECE59DEFE69F F1E49EF0DF9AF6E3A2FFF0AFEDD393E2C384A97139A05A27C47F4CFBC48EFFF3B6FCF8B5F1F3AD EFF1ABEFECA7EEE9A5E7EBA4DFEBA1EAEDA6ECEEA7ECF2A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE9E9E98889884446442D2E2D707070 D3D3D3F4F4F4FFFFFFFFFFFFD7D7D79B9B9B3434343B3B3B9F9F9FEBEBEBFCFCFCFEFEFEE7E8E7 9292924545451F1F1F828282ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFBF9FBF2E2EFE6BCEAE3B2FAF8EC FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFB F2F7E2D7E49BD1E6ACD3E7C3DACB88DCC269DCD380E6E9B4FAFAEFFFFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF2E4FDE4C7FADEB5F3E5C2E7F0DACDEFD0C0E9BF DFF4DEFEFEFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFEAFAFFD6C6CFC6F6FF7BABAEFF6F6EFFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEFEFE8B8B8DA5E5EED4141FFBABAFFE9E9FFFDFDFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCF6F6F6EDEDEDE5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E4E4E4E6E6E6EFEFEFF8F8F8FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D99494943A3A3A232323 7A7A7AD5D5D5F6F6F6FFFFFFF6F6F6C7C7C77777772D2D2D4F4F4FC6C6C6EEEEEEFFFFFFFFFFFF CDCDCD8383832B2B2B3A3A3AADADADFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FEF6EEF9F5E6F6F5E3 F5F5E2F5F5E2F6F5E2FBF6E7FFF7EDFFFDF4FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF4F4F4D4D4D4E3E3E3F6F6FBE5E5FFA2A2FF5A5AFF7272FFE9E9FFFEFEFEFAFAFA EBEBEAEDEDECE5E5F38A8AF65151F77C7CFCBCBCFFF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D47BE8DA81E9DB82E3D57DE3D57C DFD179EADC83DACC73DFD179E2D47BCBC067CFC871EAE48EDAD283D6CE84D3CB85DED694918847 50470B766D2FB0A764CCC47DDCD48ACFC67ACAC27DC3BA78C5BE7CCFCB85E0DE90DCDC89E2E490 E5E697B6B8720B0B00646131E1DFA3E7E49AE0DC83F1EC8AE6E17CE5DC7DE5DB83EAE28FFBF4A3 F7F1A0DDD8869C9643C9C26ED9D37DE0DA81E0D87FEBE289F0E68DEDE28BEDE28CEFE390EEE18F E9DE8CE8DD8BECE191EBE090F2E798F8ED9DE7DC8CE6DB89EAE08DEDE38CEBE18AF3E990EFE18D E6D784EEDF8CEEDF8CF2E390EDDE8BDDCE7BE8D986F3E491EBDC89E5D684F1E38BF2E584ECE07C EFE483E8DE7FE2D97CEEE58BEFE58EF6EA95EADC88E5D883EBDB88FFEB9CFBE4A0F4D6A0E2C999 EDDCABD9D095C2BC826F6B3F413A211F18048A825B9C9756928A4A746B2FFDF3B5F9F2AFBCB16B 6C6022F8F0A6EFE299EDE39DF6EAA8746A2ABAAC71FEECB98165359D8651FCECB37A6D30D0C788 FFFDC08680477D77456C633C130B004C3E249B885EE6D2A3FCEBB4DECE90F3E2A3FAEEAEF1E4A2 E8DA96F2E99CF1EB94EAE382EDE588F4E695EEDC8DF7DF93FFF0AACE9F5C784201E0A867EBBA76 FEE89EE9D482E2D983E2D488E9DB95E3DB92E9E59BF7EAA1F9D38F884C0DB57D38FFE090EFDC87 FFEF9EC59859764A272C0B00D1BC93EBE8B11E1D0D848645FFFFC1F9F2BDF2E8BAB5B086312A0B 554F382B250529221A3329216154374F3E26503B24472D1E3A1E075A3C1992724EAB8A5CCEA86F F2CD8BFFE5A3F9E8A2F2E69CF2E698FDEC9AF0DE87F1DE89EFE595E2E196E9EAA3FFF5ABFFE19A C49253A2612AFFE5A3F0F2A6F5EBA1FFEDA5FBDB95905715DDB56DFFEB9FFBC17ABA8A3FFFE097 FBD48EBE8243BE8140FCE095F0F298D4EB90ECFBAAE9DA97EFDC9CEFE29DF0E49CEAE096EDE39B F3EAA7E5DDA1F7F0BFDBD5A7A49F70B9B685E0DCAABBBB92919267ECEDB1E3E2A9373605A19E67 FCF9A8E0E08CFFFFB85F5B320A0500A19968FFFFC5EAE19EEAE19CCEC57FB5AC63D4C981ECDF98 F3E49DE7D492E9D293E4CA8EF1CD8ED09D5BA77539B38943DCC172FFECB7F0DEA78B82442C2403 A6A46FA9AD6A989E5A89864AA9A2706E6B4338381B090C012321018F8860F9F0BFFFF8C1E7E3A7 F2F4B6BDC0840B0900221E10020000141200AFAF79E6E5ABCFD18BD9DA8EDDDB8EEEEAA1F3ECA7 D6D288DCDB85E3E092E4DE9CEFE5ADF3E8B1F2E4A9E0D090FFF0B3FFF2BDC8AE87351701362817 EAEABEFFF8CFA38B68250D059A88316D62145C5617ECECAFA0A0790303009B9A64F4F1A4F5D78A B77639F8BF87B69D692827082D2A097D78609C9776C3C89DEAE8B6FBF4B9F9F0ABF2EAA1F9F1A9 FAF2AAFCF4ACEEE69EEFE79FF7EFA7F8F0A8E4DC94EBE39BEFE9A1F0EEA4EDECA2E5E298E9E69C E8E49DE9E29CF2EBA8FBF1B0F9EDAEF9EEAFFDF0B3FFF6BCE2AF7CAB6634AA602ECB8952F5D393 FDEEA7F8F3A8EEE89CEFEDA2FCFFB3E8EFA7EDE8ACF4EDB7F7F3BBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDFDFDF7979793C3D3C313131 7B7B7BDEDEDEF9F9F9FFFFFFFFFFFFC5C5C57B7B7B2B2B2B474747B2B2B2FAFAFAFEFDFEFEFEFE E3E4E37C7D7C3A3A3A2525258D8D8DF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDF7F0F1D4E9EABD F0F0D1F7F8E9FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFB E9F6E8D9EDC9D2E398E7F0C2FEFBEFF5E5BAE2CD77D6C254D8CE6DEAEBBFF7F9E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EDD3F4DCADFCE2C1FFF0E0FFFBF6E5F6E7 CAEAC9D2EED3E6F5E6F9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8FEA3A4FD7171FB7D7CF5BEBEECF3F3ED FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4EEC5C5E37070F04E4EFDADAEFEDEDFFF FBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D68A8A8A323232 2222227C7C7CD6D6D6F6F6F6FFFFFFF2F2F2B1B1B16464642F2F2F606060D9D9D9F8F8F8FFFFFF FFFFFFC0C0C06A6A6A222222434343B8B8B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF4F4F4D7D7D7E4E4E4F9F9FBFBFBFFB7B7FF5A5AFF6161FFD4D4FEEEEEF8 F0F0F0E9E9E9E9E9F1DADAFD7676FF4B4BFF9999FFE7E7FFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D57DE4D67EEFE189EFE189 E6D880E1D37BD8CA72D8CA72DED078E0D27ADAD076CDC668E2DC81D0C874DCD484AAA259DBD38C F0E7A3D9D08E9F985A665E1D4E46064C4315645823A99C6CC2B689D1C69AE7E0AEEDE8B0EAE5A9 E5E1A5D5D39DEBE7B86D6945080500C7C386F2EFA6E5E086E9E57FE9E57ADFD672EEE688E4DA83 F8F2A0F6F09FF9F3A2E5DD8799913CD5CE77E9E38BE6DD86E5DB84E4DB84F0E58FF0E48EE8DD87 E9D987E8DC89DFD482F0E595E6DB8BECE190F0E594F2E695EBE08CEDE38FF2E892EFE58EF1E88F F1E28FE7D885EDDE8BEEDF8CF2E390EADB88E6D784E4D582EDDE8BF2E390F1E28FF8EA93EDDE7D F0E17DF0E17EEEDF7EF0E181F4E586F7E689F1DE83D6C368EBD77EFAE58DFFE88AD6B651B1903A EDD386EEDE92F5F19EECEB9DF8F9B8C1BE93110B006F6932BDB666B8B0682D2401E9DFA1EDE2A1 F2EEA6655B11D0C379F9F3A9DED089FAF6B5AB9D618C7B42FFF5B99C8045664F11F0E1A1D6CA8A 6A6121ECE5A8E6E1A9484212231C0BB1A982F7EDBEFFF7B3F9E99DE3D382E7D683F4E492F9E99E F8E8A3F2E3A2F1E3A0F4E89FF6EA9BF5E895EFDE8AECD583FADB8CFFE19797641F854E0DFACC85 E5B86DF8DC8EFFED9AF3E68FF2E293FAF3A9E0DB90F5EDA6FFEFABCCA3637C4402DAB66AF9E08D FDE894F1CC80A27135663D1E492D0FF6E3B7CCC39D2F2F02E9E9B1FFF9D4FAF2C28C8250120905 2420005E5837C6BE96E8E0B7EBE2BCECE2BFF9EECCEEE0BDF3E2BEDAC49E876946431F004A2305 825521BA8F4EE5C588FEE9A5FDEFA8F5E698EFDB88FFED97FBE895EADD8FE8E59CDFE39CF4EDA3 FFF2ABF3C588A25926DDBB7BFCFEB3F8E9A0F4E097FFF0A7BA7C39BC8840FFF2A4FFE599BB8E43 E7B770D29B59A86E2EFDDA96FCF1A4E8F19DE7F9A5F5FCAFFCEAA8F2DF9CF6EAA0FAEEA3EAE095 EDE399FAF2ACF7EFAEE4DFA2ECE7ADECE9AFF1EEB4E9E7B16E6D431B1B07C3C682F7F7BF3F3D11 827E50DDDD90F7F6A9918D4B090100908961FFFFC8FFECB8FEEBB2E7DE9FC3C57D363E01F2FCAC EDED9FFDF7ACF8ECA7F2C889E5AC72AA6E30A9752EDEAE6EFFE7A0FFF2A6CEBE8E847D4BDCDAA4 1312008D8F61B4BA798184456D673A918768746F5200000091956FC8C89CB0AC70E9E3A0ECE3A1 EDE8B0F5F4C6585833403D27D8D3B08D8A67999765E6E5AAD3D28DC9CA7EE6E595D2D083EAE69E F0E8A8DCD894C9C877EAE79CE4DE9DEAE0A7F4E7B1EFDFA3FDF7B8EDDA99FFECADA68C54997B4D 110300B5B283FFFCCDFFF0CCAD9162AD9941897A2AD0C785C0C0825B5A3602030077794AFEFFBB D2B066AE6D31FDCC91FBF2B6D2D0977E79562F240B10080017190045431BC9C18BF3EBA7EDE59D F0E8A0EDE59DF9F1A9FAF2AAFEF7AFF7EFA7EFE79FE9E199F5EDA5F0E9A1F4EDA4F0E9A0E8E299 F5EFA7F3EDA8EDE9A5F2EDADF9F5B6F7F3B6F5F2B6F4F1B5FCEEB5FFEDB3FFE6ADE8B37AB66D36 AE6128E4A969FFEAA2FDF6A9EEE89AF8F5A9EAE09CFAE7B2FEEBBAFEF2C0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF5F5F5F3F3F3F3F3F3F5F5F5F7F7F7F7F7F7F6F6F6F2F2F2E1E1E1BCBCBC5757572A2A2A 3535358C8C8CEEEEEEFFFFFFFFFFFFFFFFFFB6B6B66162612D2D2D5C5C5CC5C5C5FFFFFFFFFFFF FEFEFEE3E3E37B7C7B424342383838999999F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF7 F5F5E1E5E5B0EFEECBFDFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4FBF4CBEBCBB4E4B1D4F5CBEBFCE6FCFEF7FFFEE9F4E5A9E4C259D6B73CD6D271E9EABAFDFDF8 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFBFBF2EEEDC8E6E2ACF6F2DBFEFCF8FFFEFE FDFEFDECF8ECC6EAC5B8E4B6F0F9EFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D6FE9FA0FC6F6FFD7372EDA5A5D4 DADAD5F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2F2EDC9C9E18686EE6363FB999AFD CDCEFEF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F3F3F3F3F3F3F5F5F5F6F6F6F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6B8B8B8616161 1D1D1D2C2C2C909090E9E9E9FAFAFAFFFFFFF0F0F0A0A0A05A5A5A3B3B3B777777EAEAEAFFFFFF FFFFFFFFFFFFB7B7B75B5B5B272727535353BEBEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF7F7F7FAFAFAFEFEFEFFFFFFC6C6FF6363FF5555FFADADFC CFCFEDE3E3E3F7F7F5E2E2FCB5B5FF6363FF5858FFB5B5FFFFFFFFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D67EE4D67EE7D981 EADC84F3E58DE4D67EE3D57DE1D37BD9CB73D8C972D9CE73CCC461CFC667D4CC6FDCD57CC6BE6D AEA658DED68DDDD78FE0D892EEE9A5CDC8849F975D44390B1C1000190C00291F00524823756C43 8F865BA19A70C7BE9FC2B8A18F846F0A020088824AD1CC87E9E38EF1EC8BF2EB86E9DF7DF4EA8E F1E691EBE493F4ED9EF9F2A1F1EA92FBF49BC5BE66D5CB74FCF29BF0E68FEADE88ECDD88EEDF8A EDDF87EBDC87EBDF8AEBDF8FEADF8DE4D987DDD37EE7DD88ECE28DECE28BECE28BEAE089EBE18A EFE58EF8EA96F1E28FF1E28FF1E28FE9DA87E7D885EFE08DF0E18EF2E390F4E592F1E28FECDD89 ECDB80EFDD81F6E387F0DD81EDD97EF7E287FFE78EE9D179D2BA62FFED98E6CF7AFCE280D4AF3B F3D06AFBE084EFDE81DBD573E0DE82E9E99CD6D49C1E1A04625D20B1AB55E4DC922D2200BCB274 F3E9A8EFE69E9F954CA0974AF5E99FFDF0AAF0E19DDDCE8E736022FEE6A2AF974F99843D66540C FFFFB9938C457B7333F7F6BBF1ECB4756F3BC6C090ECE3A9FAE996ECDB7FCEBE5EEEDF7EFFF195 F7E693F1DF97EBD999F0DE9FEFDF9DF4E59FF3E597DCCB78DBC170FFE192E9BA6E743F00AC772F FECE82FAD989F7DC8AFEED99F4E893F2E191FBEFA2E8E69DFBF1AEF7DA9EB07E4393611EF0D082 EFD884FFE394E0B671905E255430097D6342FFFACD433B20A6A47EF9F6D0DDD3C1786F460A0000 625B32D2D096FFFFBDF6EDA2E9E197EDE59DEBE4A1E5DD9DEBE3A4EEE1A2FAE7A4FFEDA7DAB870 A77F3563410D321400926D2FB98E55FFD99BFFEFAAF0DF8BF7EF95F4F196DFD987F8F2AAF5E9A8 EEE59AF4E49CFFE2A2AB632FAC8446FCF9AFF5E29AF5E49AFFFAAEDCA25FA36C25FFEA9BFFEE9C FFDD92B67833B2702EF2C47DFFF4AAF3F1A4E3E699EAE79EF2E49EFDEBA9FCF1A8F6EA9AEEE393 F0E799E5DC91F8F1A6E9E299F6F2A9E1DF95EDEDA6CFCE8CF5F3B5746F4C161209DCDC9EDDDBA9 4542217E7A59D9DA99B6B5710C08007B7251F4EBC3C3BA83BCAE80AFA373F1EEB7A1A76B212B00 E4ED9DF7F5A6FFF4A5E7C276AB742DB66F2DE3A45CFFDC90FFEFABFBE099FFF8B1A9A1793B3A21 FCFCD565634D535330C6C488B9B47884794E72674947412C32321ACFD2B2F5F5C8FAF6B9EEE9A1 F1E9A2CBC68CCFCEA335341AB2AE95F5F2D5D8D3AAE0DDA4F2F0ACD9D78AEBEA99DFDC8CE4E096 DAD691E4DF9FD9D491DCDB90F0EDA5EEE9A7E6DD9FF2E6AAF2E1A2EEDC96EAD78AF9E89BBAA055 BA9E56332600ADAA76A09565E6CDA7C0A271D8C167F9E794FDF9B469682E4A4A250405006C6F3D FBF5B2C9AB67B07339FEDFA4F8E1A2F8F8C2FDF6C8F4E6C3DBCDACBEBD95ABAB7CE0DCA6F6EDAA F2EAA2E8E098E9E199F2EAA2F5EDA5F0E8A0F5EDA5F0E8A0F5EDA5F5EEA5EADF98EADD94F2E69E F7ECA4F4EAA2F0E7A4EDE5A3ECE7A7EFEBACF2EFB4F1EFB6F0EEB5F3EBB0F6EAAEF5ECABFEF7B4 FEE7A5D49657A05418CB8245FBCE8EFFEDAAFCE5A0F8E6A1FFF0ABF7E7A4FEEFABFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEEFEFEFB6B6B6A3A3A3A3A3A3B3B4B3C0C0C0C1C1C1B9B9B9A4A4A48B8B8B6B6B6B2B2B2B 323232696969B8B8B8F5F5F5FFFFFFFFFFFFFFFFFFA8A8A8494A49343434707070CFCFCFFFFFFF FFFFFFFDFDFDDFDFDF6767673E3E3E4A4B4AA5A6A5F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFBFBEFF1F1C5F6EDC7FEEDD8FFF8F1FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2FAF2C6E9C6B1E2B0E2F9E2F5FFF6FEFFFDFFFFFAFCF5D6F2DF9CE4C862D8BF4BE1D385 EEEECCFBFAF1FFFEFEFFFFFFFFFFFFFFFFFFFEFEFCF7F7E6E6E9B6E9EABCF0F1D2FAFAF1FFFFFE FFFFFFFFFFFFEFFAEEB4E6AF99DD92E8F7E7FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9FD8585FB6060FB7878F3 B8B8E6EDEDE7FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2F2EDCACAE28A8AEE6868FB 9495FCCACAFEF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD5D5D5A6A6A6A3A3A3B1B1B1BCBCBCC2C2C2C1C1C1C1C1C1B9B9B9989898656565 333333272727575757B1B1B1F8F8F8FDFDFDFFFFFFECECEC848484454545414141888888EEEEEE FFFFFFFFFFFFFFFFFFAEAEAE4B4B4B2B2B2B616161C3C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEFEFEFF4F4F4FDFDFDFFFFFFD2D2FF7C7CFF5C5CFF 8C8CFCB8B8EBE1E1E1FAFAF7CCCCFF8989FF6464FF8080FFCDCDFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D780E9DA84 EADB84E7D982E9DA83E3D57EE2D47DE3D47EE0D17AE1D27CE8DB7EE2D974E2D976D6CE6DD3CB6E C6BF68A8A14EAAA254E5DF94DBD78ED3CF87DED996DFD89ADED69ECBC18D978F5F80784C807848 332A152D2504120B002016001A0F030C00000E0500666131E8E29FF7F09EEDE589F1E889EDE386 E7DC85EFE493F9EE9FF3EA9BEBE391F3EB91F7EF94ECE48AD4CA73A59B45F1E690F5E894F6E792 F6E791F3E58DF0E189F2E490F2E797F0E492EEE490EAE08AEFE48EF0E68EEEE48CEEE48CEBE18A E9DF88EAE189E4D682EADB88F4E592F1E28FE9DA87EFE08DEBDC89F4E592F6E794EFE08DEADB88 EEDF8DE6D684E8D685EEDA87EFD986F2D985FCE38FF8E793CCB15CE5C977FDE391FFF1A2E7C86A DAB647FFE683F8DF83E5D377E9E07CE9E687F4F0A4DED8A428220C4C4611868135F4ECA94C4009 8E8447F0E7A5F9F1A9B9B0656A6114F4EA9DEADC93E9D893F4E2A17C66259B8336D1BB6BFDEE9F 817022C6BC6DF8F3A7857F35B0AB67FDF8B7C0BC7D716C31D9CE8EFFF1A2EAD880D3C365F2E384 F9EA8EF4E48EF1DF91FAE9A1F5E49EFBEAA3F6E99DEDE192E2D483F5DB8EFFE69CB6843D834C08 DDAC61F9CF81F5D585F9E391F4E591EBDF8AF9E999F8EEA1DFE199E2D397FFF0BE945D2A875A18 FFEB9CEDD782FCDF95D5A76B91602A260A00C9BB86ACA1752C280FECEBD2CCC6B231271C030000 716533FFFFC0FAFAADE2DF88ECDF85ECE087F3EA94F2EB96EEE796F2E99AF5E898FAE695FDE591 F2D17DE5BF6AEFD182967B343B1602956731B2834BCDA866F4E091F1E690F0EB91F7EC99F7E196 FFEBA6F4E89CF6E89DFFF1AEC88951A07436FAEEA8FFEFAAF4E49AFDF1A4E8C07BA76A27F4C97E FFFDA7F4C87AA8641DCC8742FFF8ADF1EB9CF0F9ABF5EEAAFDE5A8FCDFA0EDDB96E3D787F6EC96 F7EC9CEEE496F7EEA4ECE49AF7F1A5E5E292EDEC9CEDEDA1F4F4ACCCCA8CBCB7960F09009B9967 FEFCD2908C68736F4CFDFCCA55522B4F4A24DBD2B5F2E9BEC9C58D6A6C42494B23C5C695A7A56C 362F00E1D38DF7E49BBF9D50AB8031C79444F7BE70FFDE8EF8DB8AFFEDA8FAEAA5F5EFABB2B08F 333318EFF0CCAEAB9748421BE2DA9ED8CD8DEADFA5BEB68A0C07005A58463335212F2D14BDB787 EFE9A9F4ECA6EAE6A7D2D1A03132196D6A4D645E43C7C393EAE8A7E5E395EFEB99ECE996ECE89A F2EDA5D6D18ED2CD8CE2DD9BE3DF98E4DE99E1D996DFD693F2E5A1F4E59EF5E397FBE997F3E28C DDC971D9C2693F35096A693B5E5226785F3BCCAD7EC3AC50F1DF8BD9CF87E9E5A3C7C69E363718 2F3013E8E3A7BCA164CD9961F7CD92DDCF8D616726A49D6AE1D3ABFFFDD9FFFFDDFFFFD2FDFCC3 ECE49FF3EBA3EEE69EECE49CF2EAA2F4ECA4FEF6AEFAF2AAEFE79FF4ECA4F7EFA7EDE19AEBDA92 FDEAA5FEEFA9FAECA6FCF0AFFBF2B1F5ECADF2ECAEF3EDB2F3F0B6F6F3BAF5F5B7F4F4B4F2F0AD F6F0AAF8EEA8F7DE97ECC483C07F43AC6129E49E66FDDFA3FFF4B2FFF3ABFCF9AEF5EFA3FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEE4E4E48484845C5C5C535453696A697D7D7D7B7B7B6D6D6D5353533E3E3E2C2C2C 1D1D1D515151A6A6A6E3E3E3FBFBFBFFFFFFFFFFFFFFFFFF9B9B9B3434343738377F7F7FD5D5D5 FFFFFFFFFFFFFDFDFDDCDCDC5B5B5B3839384E4E4E9C9C9CE1E1E1F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFF8FFFFE5FFEECDFFE0BFFFEEDCFFFAF4FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEFAEEC5E9C4B5E2B4EFF9EFFEFFFEFFFFFFFFFFFFFFFFF9FEFCE2F4E2A1E3BC4E DEC45FE1D891F7F0D8FEF8F3FFFAF9FFFCFDFEFEFDFAFAF0EEEFCADADE8CE9ECBAFDFDF9FFFFFF FFFFFFFFFFFFFFFFFFEEFAECAFE7A890DB87DDEEDBF7F8F7FEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBFD6C6CFA5858FA 8484F9CFCFF9FFFFFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF1F1EDCCCCE29091EE 6D6EFB8D8DFCC4C5FEF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFBABABA6868685B5B5B6C6C6C7979797F7F7F7A7A7A7979796E6E6E404040 242424202020494949919191D5D5D5FFFFFFFFFFFFFFFFFFE8E8E8696969303030484848979797 F0F0F0FFFFFFFFFFFFFFFFFFACACAC4848482C2C2C5E5E5EB1B1B1F0F0F0FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFDEDEFD9A9AFB 6767FC6868FCA6A6EFE5E5E6F8F8F8B3B3FE6262FF6F6FFFAFAFFFE2E2FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D37E E6D782E7D883E1D27DDDCE79EBDC87E6D783E6D782E4D580E4D581E8DB80E1D875E3D977DBD171 DCD376DBD47CD3CC78716B1A6C691EDAD68DD8D48FD0CE8AC8C47DC6C27AD8D391E5DFA2EBE4A8 E5E0A2C8C282C7C182989159675F35A2977D5F533E2C23027D7542EFE8A6DFD688F0E790F8EC93 E8DC86EADE8DF9ED9EF4E999E8DF8DF3EC93F1E78CF0E78CECE288F0E68FBFB35FF7EB97F6E794 F5E691F0E28AEEDD86E9DA80EADD87EEE292E8DD8BEBE18CE9DF89E9DF86E7DE83E8DF84EBE188 EBE18AEAE089ECE28BDDCF7CE7D885F5E693F1E28FEADB88F1E28FF8E996F1E28FECDD8AEFE08D EDDE8BE7D887EEE093EDDC90EFDD8FF5E090FCE494FFE897E4C976D1B461FFEF9DFEE797FBE395 CAAE57F3DA7AF8DA85EFD482F2DD88F8EA8DE4DB82EAE19BD8CEA12E25113D360C727031FBF3B5 7D7137696028E7DE9AEAE299DAD383484003DDD281F5E799E9D890F6E39FB09B564F3A00F2DD89 FCEC9AB7AA57837A28F3ED9DD3CE80716E23E2DE95FFFFBDCCC781736925F2DE9CD8C57CDCCA7A F8E891F1E089FFF29CEADA89EEDE90FFF3A5F2E391E5DA81EBE28EEBE198FAE39EFED693A3702F 9A6421F4CF87F8D387F4DB8BF9E897F1E592E8DD8CF5E496F6ECA3E3E8A6FFFFD0C6A078672C02 B38D4DFCF3A3F6E391FDF0ACBF8C5A7342153B2416ECE3B52B260D7A7C57D1D0BF221C11100900 3F3215E2D5A5EFEA99DDDD82E8E388F8E994FDEE9BFCF19DF4E997EEE493EEE394F0E091F0DE8F FDE999FFEEA0F1CE7ED5B466EECD85C6B6752B0A00987738D1B173B59952E3C77AFFF19DFDE390 FCE593F6E092F7EB9CF4E598FFF5ADE0B171805114F0C98AFFF3AFF7E99FF3E99BF6DF97A86727 DAA05BFFFFA9CB9F4F8E4803E9B86DFFF29FEFF4A1ECF7ABF8E9ADFCD9A2FFDEA1F8E89DEEE793 F2E992EDE293F4E9A1ECE19EFAF2ADF3ECA1F4F1A1F4F3A3F1F1A5D3D28F716F35F7F0D23A3320 6D694CFFFFDF807E606C694EDFDCB70E0B00A59F7EE5DDB9C9BF8BFAF8BF87966C4A5731EDEEC2 C5B483452702CEA668B58645A87931D2A858FDDE89FCDF86E7D279ECDE8BF2E7A2F2EBA9F0EEB1 C7C3A9161500D8D5B6CEC6B4332A03F1E7A4E0D38AF3E99F9B9656010000201E0D010100010000 A59E7DFFFFCDE6DD9AD1CD8DFAFBBF4C4F280A07000F0C00B9B77EF7F5ABE6E290ECE892FAF3A3 E1DA8FF3ECA8F5F0AECEC986E7E19EE0D994CBC47DF4EEA5E5DC92DAD083F1E596F5E696F0E18F E8D783D9C771C8B65F867F3F161700D1C79B3119099C7D51D0B85CFCE792E5D78FECE6A2FCF8CF AFAD89090A00979660856E39C1915FFFF6BDF1E8A4BEC8825750183E29066E58308B8656B6B781 EEEDB1E7E09BF4ECA4F1E9A1EDE59DF2EAA2F5EDA5F9F1A9FDF5ADF9F1A9F9F1A9F3EBA3EADF98 F3E29AFFEFA9FCEBA6F2E29DF3E6A3F4E9A8F5EAADF7F0B1F7F0B3F7F1B6F3EFB2F3F7B5F3FAB4 FBF5B3F4EBAAE7E29FEDEEA8FFF9B4FFF4B5E6B37BAC6531C47A46FFCA92FFF6B4F5ECA8FAF3AE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEE9EAE99E9F9E6161613535353030303131312424241E1E1E292929393939 4E4F4E747474A8A8A8DEDEDEFAFAFAFEFEFEFFFFFFFFFFFFFFFFFF8E8E8E1D1D1D2A2A2A7B7C7B D5D5D5FFFFFFFFFFFFFEFEFEE1E1E17273723334331B1B1B4142418C8D8CD6D6D6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFF8FFEED8FFDDBAFFDEBDFFEAD6FFF9F3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEF5FFF5DDFBDDBCE9BBB4E1B3EFF9EFFEFFFEFFFFFFFFFFFFFFFFFEFFFEF7FDF8DF F5E7ABE7C968E0B74AF7D8A6FFE3D1FFE6E4FFF4F8FAF9EFECEDC6E6E6ACF1F2BEF9FADEFFFFFD FFFFFFFFFFFFFFFFFFFFFFFFF7FEF7D8F8D6BFEABDC5CEC5E0DFE0FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBFC7070FA 7272FC9F9FF7CCCCECEFEFEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0EDD3D3E2 AAAAF08484FC7071FAAEAEFCF5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFCBCBCB8888885F5F5F4A4A4A3C3C3C2E2E2E1E1E1E1A1A1A1F1F1F 3232324B4B4B6C6C6CA6A6A6DCDCDCF4F4F4FFFFFFFFFFFFFFFFFFE5E5E55454542222224F4F4F A4A4A4F1F1F1FFFFFFFFFFFFFFFFFFBEBEBE6666662525252121215353539F9F9FEEEEEEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFEAEAF8 B6B6EB6969EC3636FC9595FBF7F7F8F1F1FD9F9FFF4F4FFF8888FFE1E1FFFAFAFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5D681E3D47FE4D580E2D37EDDCE79E7D883E1D27DE3D47FE0D17CDECF7AE2D47BE4D67BDBD074 DACF74DED47DD8D07BD4CC7DBCB66A5E5A11615E19ADAA67CCC989E1DF98E6E499CECC82C5C27D D6D38DD1CD84E7E497E7E497ADA8628E884CBFB686EFE5BCDBD3A1D9D297E4DC98DFD688F1E894 EADE8AF4E494EFE193F9EC9DF1E790E9E186F8F293F2E98AF3EA8FE7DD83EFE28CF4E894E7DB87 EDDE8BF1E18CEEDE87F4E48CF5E68BF2E58FEDE191E8DD8BEDE38EECE28CE9DF85E7DE83EAE183 EDE48AEEE48DEDE38CEFE590EADC88EDDE8BF0E18EEFE08DEEDF8CEBDC89F6E794F3E491ECDD8A E6D784E9D986EDE18EF2E899EEE295EFDF91F6E390FBE38FF8E089CBB159ECD27CFFEE98FAE48F D2B966DFC671FEEA92E6CD80F3DA8EF8E38FEFDC7DDCCD70E5D78DD6CA9C2C21113B36117C7B43 F8F2B6A99D60534A1BE3DC94E3DD91E9E39161590EA39845EDDF8EEEDB8EFFE9A1A99048483501 F8E895EFE090F3E896817828CCC575E8E294A49E51B1AB5EF7F0A4F4ECA0C0B46E8D783FD3BE7F E0CD85F2E191FFF09BEDDD89F0E18FEBDB8DFAEF9CEBDF88E4D980EAE595ECE8A6E3CF90CBA76A 7C4B0EAE7C3DFFD793FBDC91F9E799F2E596F8ED9DF0E496F6E599F6F0A8E9F1B3B2A276461900 723512CCAB6EFBF1A4F3E697FADEA1AA754C4F1F0475643AA29D7B0A0901B7BE9234361C130E08 706A339B8E5EFFF4BBE5DE86E6E588F6F09DEDDE99F4E5A1F3E5A0F2E69EF6E8A1F2E39DF6E8A2 FDECA8F2DE9CFBE4A4FFF1B4FADB92DEBB6AEED28AB2A0581B0B00B59D63E2BD80B2833FE4B267 FBDD8CFFEC96ECDA81F9ED99F2E695FCF1A4EFD28C7A4709E5A96FFFE7A7FAEFA5EBE99AFBEAA0 B16B31D18146FFDA8CBB8536B06E20F0BD6BE7D47DEFF19FEDF1AAF9E6ACFBDCA4FFE7A6FAF3A3 F4F09AEFE594F6EAA2FFF6B7E2D69DE3DDA07B7431F3EFA6F2F0A5FFFFBE8D8B50716D45FFFFE2 7E7563383222BEBB94646342747555D5D4B7000000433E213E3810423A19F9F7BDAAB285464722 F0E4B7F6DFB263391E552200B88447E8BD7AFFE499F5E290E7E28AEBE88FE7DF8CDCD391DAD395 FCFAC6DDD5C5130D02C0BAA1A59C8C443B14F4ECA1F9F29FFFFEAACFCB833A370841402A19190F 0B0700978F69B5AE74D5CD89E5E1A1F5F5BF54572A18160AA19F6CECEAA9E5E492C7C46CBDB861 E7DF8FD2C98288803FD3CE8CF1EEA7C4C077DFD88FE5DD92EEE796F4EC99F1EA94DCD180F0E395 F2E49AEEDD97E8D793CCBA77F2ECB75B5D35020000240E0058390FC4AB51F1DC86F6E59DE0D993 DAD4A6DFDBB457562F070700170800411D04E6CC93EEEEA8EDFBB2F2EBAFCCB684B29B6C423C0B 3E4014C1C282EFE9A4F4ECA4EFE79FECE49CF5EDA5F9F1A9F1E9A1F6EEA6F7EFA7F7EFA7F2EAA2 EDE49CF8EDA5FAEFA7F8EDA5F1E8A0EFE6A1F0E8A4F4ECABF3EBAAEEE6A7F3EBADF2EDAEF6F1AE EEEDA5F3F5B1FCFABAF4EDB0F7E9B0F8EEB4EEE8AAFDF9B9F3D79ABB7D47A45423CFA46FFDEEB6 FFEDB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF3F3F3CACACAA1A1A17E7E7E767676737373696969676767757575 8686869B9B9BBCBCBCDCDCDCF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B87171717A7B7A AEAEAEE5E5E5FFFFFFFFFFFFFEFEFEEEEEEEAEAFAE8283826B6B6B7A7A7AA8A9A8DFDFDFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF5EAFFE9D1FFDFBDFFE1C3FFEDDAFFF8F0FFFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFEE6FBE6CAF3CAC6EDC5D3EED1F6FCF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFE FFFFF8FDF8DDF2D795EABB5BEFC270F8CE9AFFDBC5FAE9D6F0EFCDECEDBCEFEFBDFBFBE0FFFFF3 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCEFFEEFDAF2DABACFB9D3DFD3F8FAF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3E9E9E9 F4F4F5FFFFFCFFFFF7F5F5F6DDDDFDC0C0FEABABFEB9B9FDD7D7FDF7F7FEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEFEFFED8D9FEB7B7FEAFAFFEBEBEFDDDDDFEFAFAFFFFFFFFFFFFFFFFFFFFBBBBFC 7272FA7B7CFCA7A7F5CBCBE6E9E9E6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0ED D5D5E2B2B3F08C8DFD6868FAA6A6FCF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3BDBDBD9F9F9F8B8B8B7D7D7D707070656565616161 6767678080809A9A9AB5B5B5DBDBDBF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFEFEFEF939393767676 959595CACACAF7F7F7FFFFFFFFFFFFFFFFFFDBDBDBA8A8A87979796C6C6C848484B5B5B5F2F2F2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFBFBFBF8F8F7 ECECEFD2D2EC8A8AF13838FD7171FFB4B4FEA0A0FF7979FF6161FFA9A9FFF4F4FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0D17CDDCE79DFD07BDFD07BD7C874EADB86E5D681E9DA85E7D883E0D17CE0D17EE2D37F D9CB79DFD381E8DC8CE0D889DCD48AF2EBA5ACA864716D2E8C874B6C6A2F6A672AAEAB69CECB8A D4D191E0DD9ADDD990E6E392DCDA87D4D182F5EFAA676027433916BCB579DED895DBD489E1D888 D3C775FFF6A4FEEDA0EFE092F0E491F6ED91F2ED87EEEA82F0E887F3E98CFEF59BE6DA83FFF29E F2E591F4E592F3E38EE7D780EBDC82EFE083EBDE87ECE191EADF8FEFE58FEBE188E8DF83EBE284 EEE587EFE68AEDE389ECE28BEEE48FEEDF8CF0E18EEEDF8CF0E18EF1E28FE5D683E5D683F5E693 F5E593E1D27FE3D380F6EA97F3EB99F1E996F0E68FF8E990F7E488ECD477DCC465F8E181F8E083 F8E286DFCB6FFCEB90EADA80F0DE8CF8E491F0DC7FE3D064E3D268EEDE87EBDDA52F2612444216 84884AF4F0B0C9BE803F3608DDD68DF1EB9BE8E490928B35918730FFF19DF5E193F2DD93B29850 695611CDBE71FFF8ADEADF928E8639958F42EEE89BEDE799746D1FE3DA8BFCF2A3FFF7AF806B2D 9B8744FFF4A8F1E28CF5E68FF7E795F8E89BFAEBA3F1E39AF5E89DF5E99BE9E7A1C8CA8D5E4F1C 3C1A006F3E08DEAB71F1C886FDE39BF5E79BEBE394F5ECA0F0E69AEEDD95F6F1ABCEDA9D221400 3E11067D4022D2B77EFFFFB4FCF6A8FAD59D8E58342F0100A3947F4A48334B4F2E737B570C1300 888B526F692CF0E5A0E1D489E2D885FAF69EEAE590EFE69FF3E9A1EFE59BF1E799F5E999F3E797 F2E799F0E59AEFE49EF4E8A7EFE3A2F6E694F8E68BC4AD5DF1D999A68A53452405F2D69CF3D794 CDA053C19641E2BE64FFE588FDE992F9EF9BF8F09DF7EB9D905A1DD78855FFE4A6F5EDA4E8EC9D F7EDA2C77E47C96532E8A55FE5A659F0BC69C99C42EEDA81E4DE8DECE7A4F8E8AFFFEDB3FDEDA8 EBEC96ECEA93FAEEA3F8EAAAF2E4AFFAEFC0BBAF7E483F06F3EDACF3EFADFFFFCA6D693A6E694D F9F0D0A99F89040000100E00676832B5B986F0EFD555523D020000433F1BADA767F4E9A7C0B083 574215EBD0A39D79472D0700996F34FFE5A7FDE3A1F8E8A1EFE89CDCDF8FD2D482D7D080E2D799 EEE5AEFFFDCE9084790100004038291D150E645F35F3F39FE8EA8CE9E592FEFCBDE3E0B578775C 040600666548C2BE85565109968F42FBF7B8B9B88C1213049E9C6FFFFFCAE5E39DE4E18BF7F498 EBE58CE7DD90E8DF9B9E965697904ECDCB82E7E398DFD78CDFD786F5EF97EFE98CEDE68AF2EA96 E6DB92F5E8A9EBDCA5756438897849FEF8D4EAEED160593E050000896943DBC069FEEC97EFDD93 F3EAA1F8F0BFF1EBC1DBDBA02C3016060000180000B3A068F4FAB5D4E59BECE6A8FFE9B4FFF4C0 F2EAB0E0E2A1F0F1B2F5F0A8F5EDA5EDE59DF0E8A0F8F0A8F9F1A8F4ECA4EFE79FEEE69EF1E9A1 F3EBA3F3ECA4F2EEA3F5F1A7F3EFA5F2EEA4F4EFA7F6F2ABF7F3ADEEE8A3E2DC99EEE9A5F7F1AF FAF1ABF4EAA2EFEBA7F3EEB2F0E9B2EFE3B2F4E7B8FEFCC8F8F4BAFBF0B2FAE4A3C49A5A814B0F C0884DFFD89DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4EBEBEBE3E3E3E0E0E0E0E0E0DDDDDDDDDDDD E1E1E1E5E5E5EAEAEAF2F2F2F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0E0E0E0 E2E2E2EDEEEDF9F9F9FFFFFFFFFFFFFFFFFFFBFBFBEEEEEEE4E4E4DEDEDEE1E1E1EBEBEBF8F8F8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFFF8F0FFE7CFFFDEBDFEE0BFFEEBD6 FFFAF5FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFCFDF2F5F2CDE6CDB3DDB4D0E9D4F0F5F7F7F8FDF9F9FFF9F9FFFBFBFFFDFDFF FEFEFFFFFFFFFFFDF6FCE8CBF6CF92E5B64CE6BD65ECD19EE8DCACE7E4AEF2F2C5FCFCE0FFFFF6 FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFBE7F6E7B0DCAECAE7C9F6FBF6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E6 CDCDCDE0E0E1F7F7EFF8F8E6E0E0E7AAABFA7070FE4747FD5C5CFB9C9CFBE3E3FEFFFFFFFFFEFF FFFFFFFFFFFFFCFCFFD2D3FE9C9DFD5D5EFE4C4CFD6666FBA9A9FCF1F1FFFFFFFFFFFFFFFFFFFF B9B9FC6E6EFA7D7EFDABACF5CDCDE6E8E8E5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F0F0EDD5D5E2B3B3F08B8CFD6262FAA3A3FCF3F3FFFFFFFFFDFDFFFAFAFFF9FAFFFCFCFFFEFEFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F1F1F1EAEAEAE6E6E6E2E2E2DFDFDFDCDCDC DBDBDBDDDDDDE4E4E4EAEAEAF0F0F0F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE8E8E8 E1E1E1E8E8E8F4F4F4FDFDFDFFFFFFFFFFFFFFFFFFF8F8F8EDEDEDE2E2E2DEDEDEE3E3E3EEEEEE FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EAEAEAF7F7F7 ECECECEAEAE9EBEBF4B7B7FD5D5DFF5858FF6161FF4B4BFF5D5DFF8888FFCBCBFFFAFAFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE8DA82E6D880E7D982E6D881DCCE76EBDD85E5D681E9DA85E2D37ED6C772D6C773 DED07FD7C779DACD7FDED283DBCF84DBD389D5CC87EFE8A6C3BC7E7A7439A9A36CA19C64726D35 56511858531C504B118F8C489F9B58B4B06CD4D188E7E1A4E9E2AA4C44222D2804C4BF75DED78A F8F09FC9C06DDACF7BF3E795FBEE9CF4E893EEE486F0E884F2EC83FCF390EBE181F2E88AE7DC83 F6E890EFE08CEFE08BEEDE89E3D27BEDDD83F6E78AF1E48BEEE391F0E593F4EA93EEE48AEAE286 E4DC7FE4DB7DE5DC81E4DA80E7DD86EDE28EE1D581E9DD87EFE28DF1E28FEEE18EE2D481E9DA87 E8DB87ECDF8CF2E390EFE18DE8DB87E9E18EE9E38CEAE087F4E588EFDC7DDCC663DCC461E5CE6A FEE682F9E37FFAE383E1D071E4D97EF5E78FE8D87AF3E178F1DF6EEAD96CEDDD7EF3F1AC382E14 575627939854E9E4A1D9CE903B3000CBC37DE8E593E5E288D7D17C6A610FE3D385FFEC9FDEC376 C7AC609E8C44978A44EEE49DE8DE96DAD28A787129EBE59AF9F3A9C8C07491853AEFE298FFF0A5 CFBC716C590CDCCC77EFE18BFAEF99ECE394EFE59FF5EAABFDF2B4F6EBADECE2A3E7E5AD646531 0E00004F281075400BF3CB8CEFD791FCE69CEEDD91ECE297EBE399E9DE97FAE9A5ECE6A75B643E 0C00006F412374391AFADAA8D3C986B1A960D1B0775F2F11512514BAADA3101007646A49151C00 5E662D65691EA09959F2E799EFE48FF8ECA2E7E08FEFEB97E9E494EDE897EAE391EEE791EFE58F EBE28CEFE793F4ED9DF6F0A3EEE79FE6E29AE8E48CFEF798F2DB8BBE9C5BEDC68E714A2983612D FFF9B5FDE496E0BF6B997017E5B75FFFE38FFFF29EF3E792F6E899985C1FB55F2CFFF2AFEFE599 E8EA9AF4F5A5D8945DB74E1ED48846FCE295F9DA84C0963DECD17BEFDF91E0D690EBDC9FFBF2B1 F3F2A6E9EC97F2EF9DF2E89FEEE1A7F8EBBBFFFAD14B401E7A744BFFFBBEE8E5A9FFFECB7F7B58 2D251CD5C9B67A6F5D090200000000C4C784EDEEB5DED7BCDED6B8C5BD8BEAE694F1EC9AEBDE9D E8CDA03A1507916D479E7C49856632B69B62FDEAADEDDE9AE2DA93E0DF98DEDF99D8D88CD2CB7E E2D896FDF3B9FFF6C85F52442014060C0300332C15CCC999F9FCAFE7EC92F3F4A8EEEBB495916E 18160B292A0DD5D4A0F4F3A4E6E48BD8D482E5E1A7827E6308020026240B9A9959ECEBA1E8E691 E4E087E4DD88F8EEA3F5EBA9F9F1B1D9D390F3EFA5E5E196CBC479DBD381EFE88CE7DF7EE6DE7E E3DC85F1E8A0F9F0B7C2B687211308110300444129A1A48BC9C0ADA08977B89970D1B75FFAE490 FFF1ACCCC07FE2D9AEA6A179F5F2C0C3C59A362D0A886D44F7F6BEE8EBA5E5F2A6F3EEABF8E4A9 EAD49BF7EFB0EFEEABF2F3AEFAF2AEF5ECA6EFE6A1F6EDA8FAF1ABF4EBA5F4EBA6F3EAA4F6EEA6 F6EEA7F3EAA4EEE9A0EFEFA4F5F2ABE9E69FDCD992E0DD96EBE8A2F6F4B0F5F2AEECE9A7F4F0B0 F2EDACEFE7A2F9EEA7FEF1B1F5EBB2F2ECB7F5F0C1FEF4C7F4E3B5F9E4B2FCECB1EDF0A7F9FDB1 F3D692A86727965717FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF5ECFDE9CEFADEB3 FADFB5FFECD7FFF8F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE6E6E4B7B8B68E9C8C899F8FAEB9CFD0CFFFCDCDFFCCCCFFD0D0FFE2E2FF F4F4FFFFFFFFFFFFFFFFFFFFFFFBF4FFECD1ECCD7ABBC05B94BF60B9CC8CEFE2BFFFF8E3FFFFFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8F9E697DD91BAEAB6F7FFF6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ECECECCFCFCFC5C5C5CBCBC6D3D3CBBCBCDB7E7FF66465FC5050FD3232FC6666FCB9BAFEEDEEFF FDFEFFFFFFFFFDFDFFF0F0FFA5A5FE5A5BFE5354FD4748FD3F3FFC7C7CFDE2E2FFFBFBFFFFFFFF FFFFFFACACFD5656FC7F7FFEBEBEF6D5D5E6E8E8E5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF0F0EDD5D5E2B1B1F08283FD4848FC9393FEF2F2FFFFFFFFF3F3FFDBDBFFD7D8FFEBEBFF F7F7FFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1E3E3E3 EAEAEAECECECF3F3F2F9F9FBE4E4FFAFAFFF8585FF6565FF5757FF8383FFC2C2FFECECFFFDFDFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDDD074E9DC7FF4E78AEEE086EDDF86E0D279E6D880DFD178E5D77FCBBD64 8E8128DCD278DDD27ACCC36AD5CB73D2C872E1D784DED584CEC579E5DA93C1B572968A4CCCC68C F8F6B9DFDE99BFBD866D6A37807F3E49441E352E103C380954502C7571527775420B0A00807D32 E0DD92E2DE8DCFCA76C7C067F2E88EEBE086F3E68DF7E991F3E58DF3E588F8EC84F1E57EF0E480 EADE7CE8DC7EEFE288E8DA82EADC84F0E289F0E489F1E488F0E288EFE28BF7EB94EDE38AE6DF84 F5EF94F7F195E3DC81E5DE85F2E893E2D786E7DB8AE9DD88E6DC83E6DC84EEE28BEEE48DE6DC85 D1C571E6DC87E6DC87DDD280E3D886E5DA89F1E596E8DB8BFAEB97FEEE98EAD479D9C063DABE5E CDB04EFEE987EACE6AE4CA66DFC96DF3E392ECDF83DFD269DFD361ECDD7EEADC85EFE490F7F2A8 534A244A45257A7C3AE4DE96ECE1A34A3D0EC2BC7EF1F19CDDE07BDEDA87706426D5C088FFF5AF A3802EDFBF6BD8C480716326F6EAABD9CE8FF0E8A76E6623BFB875F0E8A5F7EDAB918242DACB8C FBE8A3DDC56ED0BA62736410E5DC8DEDE9A1E7E9A7F3F5BAF2F5BDF3F6BEEFF1B7FCFBC2C3C097 1A0E09361D13B37949A05B20FFE493E7D178F9E890EBCB82F4E09BF0E5A4F1E0A5FCECB1DBD19D 19120079673B7F5A2A855122F0C19E432604A1955EBBAE66472902876549636051131806454922 1D1F08888948585410EEE5A4F7EDABFCF2ADF5EDA7F1E99FEBE597E7DF8FE8E092F6EDA3EFE59E E9DE99F1E8A4FEF4B1DBD18EE7DD99F1E7A3E9E09AFAF2A5EDE591FDEB9CF3DA8EC7A964B59957 382000DAC88AF7E9A7FFF0A6E9D1819F7F2AD5A653F9D886FFEC9FFDE19CBA7338B0662BFFF1A3 F9E796F3E593F1F6A3D59F64974513D9B268FFF3A1FDE191DCA258FDDA8BFEEB9BE8DB8BF2E498 DCD98BDDE494F6ECA2F4E99DF7F4A9F7F2B6FAF8CBA59F77332E06D9D89DE5E5A5E1E4A6F6F5C8 918E7800000009000802000035370E83902ED5E184EAE7A7ECDBB0EBD49CFFEB9CE7DB7EEAE694 F6F0B5C9B28D2C160F4D3127CCBA87FFF1B4ECDBA3ECDEADE3DB94EDE897F2ECA7E3DF9ADAD88D EFEE9EECEC97DEDD91E0DBA6150D00ABA684E5E1B4F4EEC9FDF7D495906688874BFFFFBDC4C98E 151401000000958F7BFFFDC7EDEB98D1D073DDDB8CF4EEBC6B644F030000140D00BCB771EBE6A0 F7F0A7ECE69BF8F2A5F1EA9FF3ECA5E9E29DF6EFABF3EBA8E8E3A1D4CF8FF2E9A1E8DD88EADD80 F3E888EEE98DE9E798F5F5B5A9A6750500006D613B45402D110F050400005E45389E814CDCC466 FDED98E5D5990800006E664D231D07565036989162AEA365F3E5A7F8EFAAF6EFA6F3EEA2EFE79D EDE098EFE39BEBE19BEDE49EFCF4B0FEF6B6FBF3B5FCF5B6F8F0AFF5EDADFAF2B1EFE8A4F2EBA7 F2EBA6E9E29DEBE4A0F4EEAAF4EFABF1EBAAF9F3B3F4EEAFF2EDAEF8F1B4F9F2B7F9F5B9F5F0B6 F6F1B8FCF8BEF3EFB0F5F1AFF2ECADE7E1A6EDE8B0F6F1B9F4EEB8F2E9B3F2EAB2F6EFB1F4F1B1 F5F1AFFFF7C0F7D9A7AD8C59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6E8 F8E8C2F9DEB0FDDFBDFBEDD6F9FAEEFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFFF8F8FFBCBCC76C6D704547455659638082AFA3A4ECA0A2E8A0A1E8A4A4E8 B6B6E2C8C9E3D6D8EAE3E4EEE9EAEAE3E5DDD6DCC4C1D28A80B7564A9F3A8CAF7ADFCFC6ECE1E0 EAEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEAEBE8EAE8CEE3CC7CD073A0D89A DEE7DDEDEBEDEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEADEDEDECBCBCBACACAC9C9C9A99999D8C8CBB7373F08B8BFC9797FD4E4FFE5253FD8383FD C5C6FBF3F3F9F9F9F8ECECFACBCBFD7B7BFD3F3FFD8181FD7E7FFD4A4AFD6161FDBEBEFDE5E5FB FAFAFAFFFFFE9F9FFE4141FE8686FFD5D5F7DFDFE6E6E6E5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDEFEFEDD7D7E2B9B9F08586FE3232FE8080FBE9E9F8FFFFF8DEDEF9B2B2FCAFAFFE DADAFFF1F1FFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1 DCDCDCDFDFDFF1F1F1FDFDFCFFFFFFFDFDFFF0F0FFC7C7FFA2A2FF9E9EFFC1C1FFEEEEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7DA7CDED172E4D77AEDE084E4D77BDBCD75E1D37ADED077E2D47C E8DA82D2C76EDBD177D5CB71DAD076D8CE74D1C76EE2D981D9CE7CDCD081DCD086E7DA94AB9F5D 514A11949256D1D189EEECB5EAE7B5CBCB8ACAC5A5CCC6AFBAB78C9792735451374A49202A270A 342F0DBEB980FFFDBDE1DC93E0DA87E9E38AF2EA8FF7ED91EEE287EADE82F4E88AE4DA7AE7DC7D F0E689F2E68DEADE87E7DC87E8DC89EADD8BEADE89E8DD87E7DA84E9DE88F4E991F7EC94F1EA91 EEE98DF5F097EFEA90E7E289E3DC86E5DB86E9DD8AEADD8DE8DE88EFE58DF1E78FE9DF87E0D680 DCD27CE7DC89EFE491E8DD8AE2D786E5DA8ADED383F4E798EEE190F8E794EFDC86E5CE75F2D97C EACD6EF9DD7CD7BA58E4C865E8CC69F8E087F4E397F3E58CEADF72EBDF6DF1E38AF2E695E6DD8B EFE89B574F29413A1E898947E3DD93F1E6A852431ABBB57BEDED98E4E77EFCF9A9897B42B19A67 EBCD898E6D18EDD37DFFF1AD625519D7CC8EF1E8A8FDF4B3AAA36179722FF0E8A5F5EAA9CABB7B CBBB7DEDDA96CDB263FFFDB19C8943908547FCF9C4BBBC8D6F734A8C8F69B2B391D3D3B3D9D7B7 5A5741171000B8A17AB27C4DAD6A2CFFEC96F6F090E3D980F4D88FE6D691E0DD98F4E9ABFFFDC8 766E451E1805E4D5AB7A5C2B82542467391B4A2D17EFE9B2A7A3641E0A00CCB2955C5D49262D16 1B1E00878950696628CDC784F0E7A4F9F0B0F5ECABEEE5A1EDE69FECE699EBE293EBE295F3E9A1 EDE39EEADFA0F5ECAEEDE2A5C8BD7EDDD291F6EBA9EFE59FE5DC94E9E094F6E69AFFEDA1EDD48B DAC27F4431057B6C2DFDF3B4EDDD98FFF3A6F6DF8DD5A957C39544E5BE74FFEBA7B97539B56C31 FFED9DF7E893FCE996FDF6A7AC7137914713EFD589FFF2A1FCE395CF924EF5C77DFEF4A3F6EA97 FEF4A5E4E291DCE596EEE19AFFF3ABE9E69DF1ECB2FFFCCE555129696736E9E8ADEDF1ACDFE1A1 EAECBE3C3B22000000020000454028D1D090EDEC98DDDA85E9E29EF0E3A8F3E4A2E5D182FFE794 E6C77CA6864A816B411907011100003C2C0FEBE09CF5EAACE8DDA9E6DE96E8E38FE7E195ECE49D F0ECA78F8E49999B48F4F5ABC8C592191400B1AC81FBF9C5EFEBBEF9F3D13B3516413E14D2D793 899157000000070100868067FEF9BEF0EE99ADAC52EFEBA4FCF6C85C533E040000817941F4EDA8 F7F0AAE5DE98F2EBA3EAE49AF5EFA5FCF5ACF7F0A8E8E19BE9E19EE5E0A0F6F1B1E5DC95E5D888 EBDD83F2E78BF4EE98E4E497F5F6B6CBCB95130D0550452EE9E3BFD0CBB49E8C8C5D423A593F09 E1CC6EFFF9A6EADBA21409007E7661E1DFCA60584B100500281C065B5021AA9F63ECE2A0ECE39C F7EFA5F7EEA4F2EA9EEDE49AF0E79EF7EEA7FAF2B2F8F0B2F8F0B2F2EAABECE4A5EFE7A8F4EBAB FDF7B3F4EDA9F8F1ADF9F2AFEEE7A2EFE8A2F3ECA8F7EFACF8F0AEF4EEAEF5EFB0FAF4B6FCF7BB F9F5B9F3EFB4EDECB0F2EEB0EFEBACE8E4A7EFEAAFFAF5BDF6F1BAF0EBB3F3EEB6F9F4BBFCF9BC F8F4B4F0EBACFBF2BAFFF2BEF6E7B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFDF8FCF5E6FDE9CEFDDEBAF2E2B7EBEBC3F9F9EEFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF7F7FFD5D5FF8C8DB73A3B4913141F2B2B47676885989AB89798B69798B7 9596B48C8C9E8487A0848AB6959AC2AAADB194A28C75986461AE4B509A424D7F4A818F7BB1ABA9 B9B4B5B7B8B8B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B8B7B8B6B7B6A5B9A36CBD68 85BB82AFB8AFB9B7B9B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B2B2B2A9A9A99D9D9D84848369696C65668D8A8BEAB8B8FDD0D1FE9192FE6263FE 5152FC9292F3DDDDE9E6E6E8CDCDED8F8FF96565FB5959FBB3B3FEB1B1FE6C6DFC5656FC8787F9 BEBEEFECECEBFDFDFA9D9DFE3F3FFE9292FFE5E5F7E6E6E6E6E6E5FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDEEEEEDDCDCE2CCCCF19D9DFF3333FE7575F4D8D8E9EFEFE6C6C6EC8E8FF6 9393FDD5D5FEF1F1FFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 E2E2E2DCDCDCDFDFDFF2F2F2FEFEFEFFFFFFFFFFFFFEFEFFEDEDFFDCDCFFDCDCFFEBEBFFFCFCFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7DA7CDFD274DFD277E7DA7EE5D87CE7D980EBDD84ECDE85 DCCE76E1D27AE0D47EE6DB84D8CE77DED47ADDD37ADAD077E5DB85D7CC7AEADF8FEEE296D2C67D E5D993DCD59A76733B9998545E5C2446430E8E8D4B817D56B2AD8ED1CF9ED6D2ACE8E6BAE8E6AF B4AC872B220B3B32118A8251DBD497ECE59EEEE896DED881E4DF84F5EE93F9F093F5EC91F5EC98 E6DB8BDFD687E6DB8EECE095ECE398F0E69BEFE397E9E090EBE392F1E696EDE491F1E894F8F09B F5EF99EBE790E6E28AE6E089E3DD87E3DA85E7DB87EADB88ECDD8AE0D480E2D881E8DE8AE5DB86 E1D782E7DC89EFE492F0E593EBE090F0E595F2E797E2D787E4D885ECDC8AF3E18DDAC66ED8C165 FDE487FEE082F1D476C1A446F0D375F2D576F0D782E9D88FEEE088ECE078F0E475F2E48DE9DD8C DBD27DE9E2935E572B514A2A90904CD0CB7EF4E9A9574923A69D67EAE795DFE079FDF6A7AFA267 98814EBBA05AAB8A36FFED97FBE8A4695D24BEB376F7EEADF1E9A5D9D28C706923EFE69EE3D690 FCEDA8988843B7A35EEAD38EF7E09FF3E0A6A59967504A210503000706000402010402011E1810 120A030000003B3E27FFFFDB92663BCF9563FFF8B1DADA8CDAD991FAE5ABE9E3A8FDFFC5EDECB4 ADA87C0B08009C9E78DED6AB695022562E091F0000998555FDFBC89F9F6E2214006853392C2C17 5F6347181A016969308E8C4AFDF8B4F4EAA7F9F0AFF2E9A8EDE3A0EDE69EEFE69BF2E99BEFE69B F1E69FE9E09AE8DD9BE6DB9CDFD496F4E9A9F3E8A7EBE09EF1E7A2E8E19AF9F0A7F0E29AFDE9A2 FCE5A1FDE8A98A773B463613F9F4B8EFDD99F7E194FFE693FEF4A1DFB568B98B46D5B873AF7639 B86C33FFE398F6E691FBE592E8C47C995019A25820FFEDA1FCEE9FFDE498CE9551EDC37BFDF2A4 FBEE9DFFF7A9EAE799E3EC9EE3D491F0E29FFDFCBEF2ECB6FFFFDA59542C696534E8E7AAE8E9A3 FDFEBE6F6E380909068F8B779C9F77DFDEA8FCF4BBE6D496F1DE9EC2B773E9E29CEAE19BF6E29B D7AE69AD6E2EBC7D422E14002010021A08008A7E46EDE49BDBD38BE2D89CEAE199EFE994EDE78F F1E99FF3ECB05E5A26A09F5BFFFEBFD4CFA10701001B170095935CFDFAC8DFDAB3221C03B3B079 F0F4B7D5D9A6B4B3940F0903B7B18CFDFCBADBDA85EEEC9BFEF8BB8D86590A0400958E66FCF7BA F5F2ACECE59DECE59DEBE59BF1EB9FF4EEA4F3EDA3FBF4ACF0E9A3F1EAA6E5E09DE4DF9DE0D790 D0C474E5D582EFE290D8D283E9E8A3E5E4ACEAE7B8928C600900002E280E848166E6D7D4FDE8D4 BFA56EE1CD73F3E392FDF3B95F573D030000C6C1ACFDF7E89C92757668435F5127B2A676FBF0B9 F6ECAFF1E8A5F9F1A8F4ECA1F1EA9CF8F1A3FAF2A8F6EEAFF8F0B2FCF4B6F8F0B1F3EBACF6EEAF FBF3B2FFF8B4F7F0ACFCF5B1FCF5B1EFE8A1F6F0A4F9F3A9F2ECA2F7F0A8F4F0A9EDE9A3EEE9A5 F1EEABF4F0AFEFEBABEAE9A8F0EDADF7F3B6F9F4B9F3EEB6F3EEB7FAF5BEF3EDB9F7F2BAF9F4BD FCF7BDFCF8BBF5F1B2F2ECAEF3ECAEFAF0B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF6EEFDE6CCF0DFB4E7DEADF1EFD1F9F8EBFEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF0F0FFADAEFF6C6DB83535500E0E37181A625E69809FAD99ACAFA9 B0B0ADACACA99595907E80906F75A56E74AD70788E4D724E2F741E3E9E3A5E9C5E838D839E9A9F ABACACADAEAEADADADADADADADADADADADADADADADADADADADADADADADADADADADACAEACA0B19F 77BB7688B789A7AFA7AEADAEADADADADADADADADADADADADADADADADADADADADADADADADADADAD ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD ADADADADADADADADADA0A0A09292929191918585846F6F717A7A91B6B7EDE1E1FFF5F6FFCDCDFE 7A7BFE3434FC6768F1C3C4E5D5D5E4B4B4EA5959F76060FA8B8BFBDDDDFEDBDBFE9C9CFC5E5EFB 5656F79B9BE7E1E1E0F3F3F89898FE4040FE9A9AFFEEEEF7E9E9E6E5E5E5FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE0E0E2DEDEF1B5B5FF3838FE7070F3CCCCE6E3E3E3B1B1EA 6E6EF57D7DFDDADAFFF5F5FFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9E9E9E9E5E5E5E7E7E7F5F5F5FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED174E7DA7FE5D87CDED077E8DA81EBDD84E9DB83 F1E38BE3D57DE6D781E8DC87E6DB87DDD27ED8CE77DDD37CE4DA83E2D881EEE490D5CA7ADCD183 E8DC91CFC37AD3CB90F8F5BED0CF8E4E4B1985834A6867255C582A221C0073703A928F5D787540 6D6B2D9890694F43276A6039241C0F2F2903858046C8C47BE0DB8DF6F2A4F4EFA2EFE99DF7F0A5 EDE59EE4DB95DED691E3D996E4DA96DCD48FDCD38CE4DB92E4DD8FE9E290E9E28FE2DB89E9E390 F5F09CF3EE9AE6E08DDDD985E1DC88DAD47EE8DF8BFCEF9BEADB88E7D583EFE28FE4DA86E3D886 E8DD8BE5DA88E6DB8BEEE393F2E797F2E797F8ED9EFAEFA1E7DC8DDDD07AF0E088F3E189DCC76D DEC76AFDE487F9E082E7CA6CE8CC70E5CC6FEBD176E3CD7AEAD990ECDD8CEBDE7BEDE076EBDC89 E4D887E4DC84F8F29D726C3E312B088B8B46D3CF7FF9EEAB665937948A59FCF7A5EFEC89E6E08E CFBF827E6630886D27DBC270FFF09EFEEDA9A29558A19656FEF5B4F4ECA8EEE7A17D752CCEC67B F9EFA4F0E194B7A559725E15FDEBA6F1DE9DF9ECB16F633A2D24165D573746432D2D291C19140D 1A130F211916040400141B12ADA69588614F6A3A27817050E4E9BFE2E5C2E5D9C0DFDDC0899270 303417080700111209BEC496E5E2B45C471F2B0700735321E8DAA4F5F9C8B9BD9C342A0F190700 201C1048492C2A2A004B4A13E0DE9CF2EEA7F1E7A5F7ECACF3E8A7EFE6A2F0E7A0EDE59CEDE49A EEE49AEDE39CEAE09AECE19FF4E9A8E5DA9AE5DA9AE6DB99F0E5A3F6ECA7EBE5A1FEFCB7F5E9A5 F6E39FFCE8A5FFF3B6DCCA913A2900BDAB6DFFECA9F9E195FCE08EF4E18BFFF3A7F5D18DC0AA65 7F4F11CA7D45FFE49BFCE492FFF19EE6A764B05A25BD743CFFEFA5F2EA9AFADF95CB9553E0B973 F7E095F6ED9EFDEEA6EBE89EE8F0A5D7C787E8D99CEBE4A8F1ECBBE1DDB3271F02868250FDFCBD F0F2A8AAAB670E0D006B6A38FFFCDAFCFDBDF4F4A8F0E5A5EDDBA3EAD59ED9C68BEEE8A4F9E9A0 E3C27B9B6224C6743EB4673738200FC6BE92AA9D74E0D6A0E4DD90E9E390EAE19BE8E09BEFE896 F4EF8CFAF1A5F2E8B8463F21C1BD8CFFFFD3A29E7302000007040098975AFFFFD2D7D3AA1D1801 D4D19BE7E9B3FFFFD89A987A171300DEDAA5EFECA3FAF7A7EFECA4D7D09D1B1300807C52FCFCC8 F2EDABF2ECA5F4EDA5F8F2A9E6E095F3ED9FEEE89BDDD78CEFE99EFFFAB2F3ECA6E1DD96EEEAA4 FCF5ABF4E799F0E195E7DA90D5CE8CEEEBB3E7E6B7F4F0C6FFFFD9807346534B30211C0C120200 4B3423674E24D0BE67FEF2A4FAF5BDD2CDA42A27181917043D383163584ABEAF94F6EAC9FFF4CB FCF1C3F7ECB4F4EAACFAF2ACFBF3A9F8F1A2F9F2A2FCF4A8F6EEAFF8F0B2FCF4B6F8F0B1F3EBAC F7EFB0FEF7B6F6EEABF6EFABF3ECA8F1EAA6F5EEA6F6F0A2F5EFA2EEE89BF5EEA4F5F1A7F2EFA6 EEEBA3ECEAA4F2EFAAEFECA8EEEDABF3F0B2F3EEB4F7F2B9FAF5BDF9F3BEF9F3BFF8F2C0F8F2BE F2EDB6F4EFB7FEF9C0FDF9BDF7F6B5F2F1B0F5F2B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF8F4FCE9E1F6DDCAE6DFACEDECC7FAFAF1FFFFFFFFFEFD FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFFE9E9FE9292FF7575D376769E4D4CAB2E35D26A87BCB3DAB2 E3EBE3F0F1F0F0F0F0ECEBEBDFE0E1C6CBD2969CBF54689B337A58399F379CC59BCDDBCDE5E7E5 EEEDEEF0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1EEEFEE DCEADCA8DBA7C0E3C0E9EFE9F3F1F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F2F2F2CACACA9E9E9E909090A7A7A6CECECEEAEBEEF1F2FCF9F9FFF8F8FF E5E5FF9292FE3F3FFE5758FBA4A5F9C2C3FAA8A8FB3E3EFC7272FEC7C7FEF2F2FFF1F1FFD0D0FF 7F7FFE4141FA8B8BEADCDCE2E0E0F88B8BFE3F3FFE9B9BFFEDEDF7EAEAE7E6E6E6FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE4E4E3EBEBF2C5C5FF3D3DFE7171FDCCCCFBE4E3FA A5A6FB5454FC6D6DFEE7E7FFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFBFBFBFAFAFAFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACD70DED175DED076D9CB72DED077EADC84 E5D77FE7D981DBCD77DFD07BDED27ED8CD7DD9CE7EDFD581DED47FE8DE87DED47DE8DE88EBE08E EADF8FDCD082D0C578D6CF93DFDDAB4D4B1982804FDDDB9F959451AAA5705B56249F9B61C9C68B C6C383C3C178A09A5F413A04B1AB70E2DD9DA5A061696628262300312D106C6A2DC0BA81EDE7B4 F6EFB7EFEC9EF1EC9BE9E594EAE595EAE493DEDB86D5D279DEDA7DD8D874DFDF77E1E076D8D475 D4CF7DD3CE7CDBD787EAE695F2EF9DF1ED9BDDD685D4CB79DFD17EDECF7CF3E08DEFE391DFD483 E2D786F0E594EEE393EEE393E9DE8FF2E69AF0E498F1E599F4E99EEBDF91E9D983F4E48AEBD87D E4CF72F3DA7DFDE384E9D072DEC266F4D97EE5CC73DFC76ED9C473F1E098EFDF8FE9DC7DEDDF79 EBDD8CEADD8CDFD77DE5E0879D975D2F2A05656620BEBD6AF5EDA5796D49766A3CFFF8ACF1ED8C F1E896ECDC9E685122816822F4DA88F2D888E9D893B9AE6D6B601EFDF4B1F5ECA7F3EBA4B5AB63 93893CF7EC9DEBDB8BEBD986584600DCC87BF0DF95EBDD99D8D296B7B179B1AE7FF2F1C9DFDBB5 C6C29ED6D3B2C4BE9C0C0F00000100100D092B0D0A2600001207042E3426242920362922262420 131C07545845090702151601C7CE96E6E1AE2510006B4626F6EBADF6F4B4EEF3C17E826B251B0A 311F08403A24343219181500A09E61F3EEABF0ECA4EEE5A1F3E8A6EFE4A2EFE59FF1E7A0EEE59C F1E79FF6ECA5F4EAA4F3E9A4F8EEAAF7ECA9EEE3A2F3E8A6EBE09EEFE5A1F8EEA9EBE5A4F1EDAD F1E8A7F0DFA0FEEBACF9E5AAFFF6BF5B4B176E5C2CE5CF8CFEE499FFE393F8ED9AF5E095FEF0AF F4E7A37C5013A9652ACA944CFEDD8DDFB365D08241C46530BD723AFFEBA2EAE294FDE69EC89252 E0B774FFF3A9F1E79BF5E7A0E8E59CE7EFA7DECD8FD9C890EBE3AEFBFACD61593E0D0600C9C48E F2EFAFECEAA06E6E2958561AE5E3ABF4EDBDF2EAA8EFE899E0D98CECE39EF6E9ADE6CF99FFEBAD C6A055865608B37936FFC69C581D0B3D2C16D6D29FE4DEACDAD3A0DEDB8EE1DF85ECE59DE4DA9F E5DD93EBE581F4EAA3F2E5C3493E33BAB492E5E1B6332E182A250776733CDDDD96E7E5A7B8B484 252000E2DFA9FBFBCBB3B28A06030057542AE4E19EEEEC99ACA757E8E3A6A19D75362E0CF1EEBA E8E8A2E7E39DD9D28BD3CC84EAE49AF5EFA2E0DA8CE9E395D0CA7DCDC77DE0D890ADA55FA8A45D F4F0A7F2EBA0EDE196D9CB85D5C989D6CE96A8A475DAD8B0FFFDD6D7CDA4807343DCD6A7DCD9B2 A694816650384D3308CEBD6BFFF4ADEAE1A8F2EFC06A6A3E0000000701000D01000C0000403218 A69A6DECE1B0EFE5ADEDE5A6EAE39EF1EBA2EBE59ADED88AE6DF95F1E9A9EFE7A9F0E8AAEBE3A4 E7DFA0ECE4A5F9F1B0F6EEABF3ECA8EFE8A4F1EAA6F3ECA5EAE497E8E295EAE499EBE59CEDE9A0 F3F0A8ECE7A2E6E39EECE9A5E7E3A2E6E6A4EEEAAEE4DFA6E5E0A9F8F3BDFAF4C2EDE7B6F6F0BF FAF4C2F1ECB8F1ECB5FCF7BFF6F3B9EBEBACEDEDACEEEDACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF5F4FCEDE6F1EDD0EDEDC8EEEDCAF7EDD2 FEF1E2FFFAF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFFE7E7FECDCDFEB5B5FEB7B7EABABAD48484DF494DF16475DF 9DB4D6E9EEF6FEFEFFFCFCFCECE9ECC4D5C490C29165A57751887E54918471AC97CADBD5F1F2F2 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFB E9E9E9D4DED4C3EAC3DAF4DAF9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8CDCDCDC4C4C4D4D4D4F0F0F0FFFFFFFFFFFFFFFFFF FCFCFFF5F5FFBABAFE7070FD5454FD6061FD6E6FFE6969FE4444FC8C8CFDE4E4FFFCFCFFFBFBFF E9E9FF9F9FFE5353FA8485F3BFBFEFC0C0FA8585FD5555FCA8A8FEF2F2FBF5F5F3F2F2F2FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F6F2F2F1F4F4F8D0D0FE5858FC7576FDB4B4FE C6C6FE8E8FFE4647FE6A6AFEEAEAFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDE084E1D478E2D47BEADC83E1D37A E0D27AEBDC85EEE088E2D37EE2D27DD6CA76BCB062C5BA6AE2D785D3C975D9CF78E3D982E1D77F E1D685DED382F2E797EBE093D5CE94A9A777151200A6A466C9C8875453109994596863289B9759 D1CE8BD4D189E0DD8EECE89D5A56179F9C56F6F2A8DBD88DCCCA7FBFBC777774342B2805110D00 3731106864389F9A5BC5C07DE1DC97E5E09DD5D089C7C37AE3E090D5D27FC3C267CDCC6EE0E07E E7E58BDCD785BBB869C0BD6EDCD98CECEA9DE7E296E2DC8EE1D889E4D887EEDF8CF2E18FE8DB89 DDD282E5DA8AF0E595E7DC8DE5DA8BE2D68AEDE195E9DD91E6DA90F1E59BF2E699F0DF87F1DE82 D9C467E3CC6EFBE283F7DD7ED0B558FAEA8FFCE389DAC46BDEC872FDEA98E9D88DE5D685E6D87C EEE07FF2E295EBDE8EEFE889EAE6869792552C27006E6F2BC0BF6BFAF4A88E8158625626FAF0A7 EDE587EFE292EDDA9A604A23AD9750FFF0A1F7DF92E1D38CDAD08C6A601BFFF7B2E1D892EDE59C D9CF84968A3CEADB8AF1E08AD8C46DC0AC569B8B3DF7E89DEADE94F0E8A0D3CE8B6A6626E8E7A6 D4D294E3E2A1E8E5A5FCF9B98085550812040A060324020027030227170329311B0810050D0001 0000005F6544F2F2D05E5740ACA784F2F5B4CEC58B321A00AF8958FFE8A0F7EAA1F1F3BF3B3C28 2D201016010082785F231D10403C0EEEEAACF4F1ABE9E29AF1E9A2F0E6A3EBE09DECE29CF0E69E EFE59DF2E8A1F7EDA8F2E8A3EDE39EEFE5A0F0E6A1F4EAA4F0E5A3E6DC97EDE39EFBF1ACFBF6B7 F2EEB1F3EAACF0E0A2FFF5BAFDEAB1F4E7B27E7140655426B8A15FEBD288FFEA9BF0E595F8EAA1 FFECACDFBE81774A0FE2AC6FCF9954BB863ABF8035FFB575C0662FDC9259FFF8B0EEE59AFDECA4 B07A3CC69D5AFFF6ADE7DC94F0E19CE5E19BE7EFA8F0E1A5E2D19BFBF3C2B2AA7C0D0500675E30 EAE5ACDEDB99EBE99EF6F3A6FFFBB3DEDB98DDD69AEEE0A2EBE097D8D484E1DE91F4E7A6FFF4BB CA9A5B9D6816B8842CFFD792CBB28E1C07061208006D6A47FAF8C5F7F0C2E7E49BE4E18DEDE5A2 EFE4B3F4EAABF2EB8EF3E7ABEDDFC73C302C6E674C676249080200CAC59CF9F9BEE3E497DEDD99 928F5C241F00E7E5ACBDBA8A0E0A0023200BB2AE72F6F4A5DEDD81C3BE70EBE2A9978E6D4F4723 FDFBC3E8EA9ADEDA91D6CE88F3ECA4EEE89EECE698E7E193EEE89AE9E396E5DF95FBF7AFC7C07A D8D48BF1EDA4EEE79CCBC079D4C783F7EBB0E6E0AE38341A3C3917D9D6B0D2C89D1D0C003D310E C2BB8EFFF5D9F8E3BDB29A5FCFBA6FF8E8A5F2ECB2E7E5AF535520050503554D4771674A928658 3F351B1B1100CDC488F8F0B1F9F1B0F0E9A4FDF6AFF6EFA7E2DB93EFE8A4F7EFB0F6EEB0F8F0B2 F5EDAEF5EDAEFAF2B2F0E8A7FEF7B4F1EAA6F3ECA8FAF3AFF5EEAAF4EDA6F3EBA4F9F2ABF3ECA6 EFEAA6F6F1AFEDE8A8E9E5A5F1EDAEECE8ABE9E7ABEFEBB2F1ECB4FAF5BEFDF7C5F6F0BEF6F0C0 F3EDBDFAF4C4F7F1BEF4EEBBF8F3BCEBE6AEEEECB1F5F1B7F3EEB2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFDFEFEFDF2F2D9E6E4B0 F1DDAEFDE3C6FCF1E2FCFCF5FEFBF6FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFCFD0FEB1B1FDDFDFFFF9F9FEF4F4FBBABAFA7172FA 5E60F8787AF8D9D9FEEFF4F6E6F1E6C4CFC48AB5894EAB4D3EAC3E65B27284ABB9AAB0F5E7E8FC FDFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6F7F6D3D8D3BDCABDD6F3D6EBFEEBFCFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFAFAFAFCFCFCFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0E1FEACADFD696AFD3838FE3030FE3D3DFD6565FBB0B0FCF6F6FFFFFFFF FFFFFFF7F7FFBBBBFD7272FB7F80FA999AFB999AFC8081FB7272FBBBBAFDF8F8FEFFFFFEFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFEFCFCFED9D9FE7979FB7A7BFB 9394FC9899FD7374FD4849FD7676FEECECFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDD84EDDF86E0D279DFD179 E8DA82EADC83E5D781E3D47FE6D784E0D17ED6CA79D7CB7CDACF80DBD07ED6CC78D8CE77DFD57E E6DC86F0E593E1D686E3D888DCD184DCD59BA19E701F1D00B7B677DDDC98736F30CDCA88A5A15F 807A3AE5E096D4D080E3DF8CE6E393636021807E38F2EF9DDBD986E5E492E8E79AE7E59FDDDC9E 9D9962534E2D251F0F0C00000B00001D120625190D3125154036234A4029665C379B93666A6333 97905CA49F5CD5D07FE0DA8BB9B467B8B46BD7D58BE3E097DFDA90E2DA8FF3E89BEADC8EEEE090 EEE293EADF8FE8DD8DE3D888EFE495E1D687D9CE80EFE397E5D98DE5D98FF6EAA1E7D98CE7D37C E0CA6ED4BD60FFEB8EF9E183C1A748BFA548F5DE81F7E88EDDC971EAD781E6D582BDAD5F716210 CBBD62E7D87CEEDE95DBCE7EEEE886E8E583B9B474231D028D8D4CC9CA74EFEC9AACA071594C1A FFF4B0F1E489F0DE8FEEDA97614B18BEA960F7E496EAD88CF8EBA4ECE39C6F6620D5CC86E7DE98 E3DB93EAE095918435E3D380F5E18BE5D077FAE69282712CE8DC9BEBDF9CEFE6A1FAF5ADA29E55 B9B66CF2EEA1E0DE8DDBD883ECE993F1F5AAC4CD8CBAB2737D5620C2905DDED49BE8EDB5DCE1AD 7D6C473E3921919551EAE8A3FDEEC5FFF9CCE7E398F9EAA6B293589A6C34FFE698F4E798D9D79D 130F002B1A07391F06B0A188150A0090895AFEF8B8E4DD95F2ECA1F7EEA7F3E9A5F3E8A5F6E9A4 F6E9A1F6E9A2F6EBA7F3E8A6F0E6A2EDE39EEAE09BEBE19BEBE19AE9DF99EDE39EF4EAA5F9EFAA F3ECADF3EFB2F5ECAEF6E9AAFAEAADF4E5ABFFF7C19F935D897B41EBD99AD7B66EE2C678FFEFA2 F8ECA4FFFBBAD2A26E774510F7DB99FFF4AEE5A35BBB7029D18644AB551AFBB579F7E8A2F0E399 FBE8A3A1692BD3AA68F9E199F0E69EF7E8A3F4F0AAE8F0A9F7E8ABF4E3ADC4BC86241C03554D26 EFECB7E9E3A5DBD591EAE59BF1EC9FEFE89DEFEBA0ECE4A0E6DEA0DAD293EFE6A3F1E39FFCE6A2 BF9851976413BF8D34FFE18BEEE3A4423E2111160D5D5D48D0CE9EB1AF7F817C53BFBC7AF1F0A2 F5EFB7938860B5AC78F6F2A2F6EAB9E8DBCC3024210B040005000075704CF8F6CBEFEEAEDBDC8C E8E8A16D6A36383406E1DFA6A19D6B5A5538C2BD89FDF9B6F4F19DEBE789ECE697FFFBC5A19B7A 2B2307EAE8ADF9FBA9EBE69DE1DA94FBF5ADF2ECA2F6F0A3E7E193EFE99CF5EFA3F7F0A7FCF5AD FEF7B0EFEAA2EFEBA2F5EFA5E2D991EADE9DF9EEB6ECE6B78C8A60282518322B0FDDD2ABC4AD81 3526111B100054412EB69C72AB9352D9C47EFBEEAEEEE7ADF6F5B5A7A96B0F0E00413834AAA179 FFF8B8F0E8A6CDC883EBE39FF5EEA7F4EDA5FDF5B0EFE7A4E2DA98EBE3A2F4EBAEEBE3A5F9F1B3 F6EEB0F8F0B0FFF8B9FEF6B7FAF2B1FDF6B2FBF4B0F1EAA6FAF3AEF8F0AEFBF3B4F9F1B1FBF3B5 FFF7BAFAF4B8F6F0B5F7F1B9F8F3BBF7F1BBEEE9B4EAE7B2EAE6AFF5F0B8F7F2BBF4EEBAFCF6C5 FDF7C7F6F0C0ECE6B5FCF6C3FCF6C1FAF5BDF9F4BDFCF2BFFEF5C4F8EFBCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3 F6F3E0FBE4D5F9DDC8EDE1B9ECE5B6FCE7CAFFF3E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF8F8FFE5E5FFC1C2FEADAEFDE4E4FFFFFFFFFEFEFFEEEEFF BABAFF6767FF4444FFA5A6FFA8C5CE8AC88E59B0574DAC4C67BD668CCC93AACBC7AAB6E9B0B0FF EAEAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6FAF6CCE3CCB6D8B6E7F7E7F8FFF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F7FFE4E4FFC0C0FF9999FF8081FE8687FDC1C1FDE4E4FDFDFDFF FFFFFFFFFFFFFAFAFFCFCFFE8E8FFC7979FB7171FB7171FA7A7AFB8F90FCCECEFEFAFAFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFE3E3FF9B9CFC 7E7FFB6C6DFA4D4DFC4B4CFD6A6CFDABABFEF3F2FFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D67DE4D67DE5D77F E8DA82EADC84E0D17CE7D884E3D480D8C976D7C875DACE7AD7CB7AD3C877D3C974D1C771DBD17A E2D882D8CF79E0D483E8DD8EEBE093E0D489E0D9A1817E521A17009E9D5CD9D8919E9A5CCAC67F A8A45C5B5314D5CE81E2DD88DAD482F4EDA9716C4048430CFBF7ACF1EE9DEEED98E4E28CEEEC99 FDFEABF1EEA0ECE99CE8E39FC5BD8C89825760582E514920383004231B005C55247C753FA29C60 9B9655AAA5629C954BBBB464C5BE6EA39D51827E3597954EBEBB76D1CD88F7F2AAE5DD94EBE195 EEE194ECE191ECE18FEADF8DE1D684ECE18FE7DC8CF6EB9BF4E99AE7DC8DE6DB8DEADE93DCCD80 F5DF87D7BF63DCC266FCE487F6DC7F987E1FDDC366EFD77AF0DB80E4D179EEDD86E6D881CABB69 A49541DACB72E6D67DF1E099E8DB8BF1EB88E9E681D0CC8A2C2606717033C3C36CEBE992B9AD7F 47380AF4E5A4EDDC85FBE99AEDD6915B450EA28F44F4E296F3E39CF1E59BFCF7AC736B21A79F57 F8EFA9E5DD95F3E8A0928337CAB969E8D37EDAC26AFFEC9D9D8E59B3A475F7ECB9F0E5AEE5DAA0 E8E5A49F9853F2EBA1F2EC9DF0EA98F5EF9AE4E394EEEFA4F2E49D895C1FC89154FFECA9E5E6A2 F6F8B7FBEAB0EBE09DF2F0A3E4DA8BEDDBA1F0DFA5E5DD8EFFEEA2D3B06D814E11FFD78CFFF0A6 928A4D0B0200442F1447290FAC997F1A0C00948B59F6EFADE8E299F6F0A4F4EDA4F2E8A3F6EBA6 FEF0ABF9E9A3F1E39DF6EAA9F4E9A8F0E5A2F5EBA6F1E7A0EAE099EFE59EF5EBA3F7EDA6F7EDA6 F8EFAAF4EDADF4EFB1F6ECAEF4E6A7F4E6A7ECE1A5F3EDB67D753E95894FFFF5B6F1DF98B9974A EAD288FFF5AEFFF8B69A5C2D915F29FAECA6FDD991E49E59F5AC69E09C57A45C1EE7AB6DFFF8B2 FBEAA2FAEBA6985B1FCA9D5CFFF0A9FCEFA6FDEEAAF5F2ACE9F1AAEFE2A5EDDFA69B935D6C6634 D8D095F5EEB2DFD796E9E19CECE49BECE599EDE498F0E99BEDE69BE1E69ED3D598B09E73F5CFA5 D9A96D8B5A04C59D3AF3D87DFFF7B3AFB389081400A5B694EFF0C9B5B0891A16060401008E8D56 F4F2B1E4DFAE1C140B9C9363FFFFC5F0E6C06E63540B01000300004D481BE2DEB1F1EEBFE7E7A5 E0E191E6E69D5A5832605C2EF6F5B7EDE9B0EAE5AFFBF5BDE9E39DFAF6A0EBE688E3DE8CEFE8AF E3DDB9120900919052FAFDAEECE7A0F4ECA8FDF6B0EEE79FE9E399F1EB9EE8E298EDE89DEDE69E E8E19CEDE6A2F8F2ADEEEAA2F2ECA3F8F0A8F3E9A7EBE4A9E8E5B3F5F5CFADAA870000005C4C2D D6BD94D8C58DC6B679644D271C01003E2007D0BB74F7E7AAD1C98CD5D78CFDFEBB6C6A40010000 423A0BEAE69BE4DF96FFFEB5F5F1A7EDE89EEDE9A0F0EBA5E9E4A1E6E0A2EEE8ADF4EDB3F4EBAF F4ECAEEBE3A5ECE4A5F4ECADF7EFB0F9F1B0F5EEABF6EFABF3ECA8FCF5B1F8F0B0FBF2B6F8EFB4 F5ECB2F7EEB4F9F2BBF6EFB9F0E9B4FAF5C1FFFCCAF5EFBFF3F0BFF8F3BEF1ECB2F7F2BBFFFAC3 F4EDBAF7F1BFFEFECFFCF6C3F7F1BCF6F1BAFDFBC3FDF7C0FEF2C3FFF5C9FDF1C3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFCFBFFF0F1FAE7DDEFE6C4EEE3B7FCDEC2F9E8D0F4F3DCF3F3DCF7F7E9FDFDFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F9FFE7E7FFC3C3FFAEAFFEE3E3FFFDFDFFFFFFFF FFFFFBE2E1F3847FEB4640E57779E468999D4DAE544BB6486EC66CA2DBA2CEE7D5D9DFF5BEBFFC AFB0FDE9EAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF4FBF4DCF1DCBCE4BBB4E1B3EEF8EEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBFBFFF0F0FFDBDBFFC7C8FEC8C8FEF1F1FFFCFCFF FFFFFFFFFFFFFFFFFFFCFCFFE6E6FFB4B5FD7475FC4343FA4343FA6F6FFCAAAAFDE0E0FFFCFCFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECEDFF BBBCFE7F80FC4949FB2E2EFB5152FD999AFDD9D9FEF9F9FFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D77EE7D980 EADC84ECDE86F0E28AEBDC87DFD07DE1D280E5D683DECF7CD6CA76DBD07BD9CF7AD9CF78D7CD75 DED47CE2D881D9CE7BE0D585E5D98CDFD389EBE098B4AD776360372725006D6D2FE5E59B726E32 CCC97EBDB96C484003CFC87BE9E28CE3DA8DE1D8A09C9566312B00F0EBA7EAE699EDEB95DEDD80 EBE88AF2EF8FE6E282F1EC8DF9F399F4EFA1FFF9B1FBF7AEFCF6AFF6EFAAE5E09AF4F0A7F3EDA1 F2EEA0F6F2A1FFFBA9F5EF9AF4EC98DED585E3DC90AEA65E4E4A06726E2EB3B16ED8D592EEE8A3 DED88EDAD388E5DB8CE0D681E2D885DFD482EADF8DE6DB8AFAEF9EF1E696EDE293F0E596F1E697 F2E493EFD782CCB158ECD176F0D278BEA145BFA546F7DE81F9E486F5E284ECDC81EADC83E6D980 F7E991EADB86F7E990EEDE86F4E39DF2E595F7F18CEBE881DFDA992E270B47460FBDC168EAEB90 CBC292433307F1DEA2F6E28EFFEC9EBCA55F7A6420766418FFF0A5F0E49DF0E79AF7EFA1938B3F 8C843BF6EEA7E6DC97F7E9A3A8984FA69447E7CF7ED9BF68FFE89EE8DAAD867851F4E7BDECE0B2 EADEABF9EDB5A49A5EA49B59FDFAB4E3DA90FFFBB2EBE59FEDE6A4F2DE9B936024BB7E43FFEAA6 DEDC96E0DD9AEED59CE6D695E8DF95F0DF93E8D38EEDDC95F6EB9DFFE99DEBC67F794606EFC280 FFEDAD645D23241D078B765552341A523C220900009E925FFFFFBEF0EA9FEAE496ECE69BEFE69E F2E7A2F5E6A0F3E29CF0E19EF6EAACF3E8AAEBE0A0F3E9A5EFE59EE7DD94F0E69EF6ECA4F2E8A0 ECE29BEEE5A0EDE5A3F1E9A7F4E7A6F0E19EEFE1A0E9DFA1F4EEB49B965EB4AD71F5E0A2FEECA4 ECCA7FCCAD65EEDC97E3C788773002D09F68FFEBA5D3A35EDF9B55FFDB97D89653945B1AB88B48 C6A761F6EBA2F4CE8C96551AE6B474FEEFA8FBEEA5FEF0A9EFEDA4DDE59ED7CB8DEBDDA1FEF7BB FFFEBEECE5A4E5DE99E6DF99E9E29AEAE19AE6DC93EAE094EFE698EDE697ECF3A5CFCE9851361D 93624AA06A36BF943BE9D06DCFC679C4C89C8A957645562DF2FAC7ECECBDB3AE8B0803011C1A00 B4B374EBE9AD9C98701F1A00DFDCACF6F3BC9A9472000000564F346F6C35D3D197DBD7A5C5C190 F3F2B0E5E696F0F0A94946298E8A5CF9F8BAEEECA7E7E4A0EDE9A7F1EAA4E9E491E0DB7DDAD581 D6CE90FBF3CA6D683E3C3C19E7EAA0EFE9A6F3EBABEDE6A3EDE6A0E5DE96ECE69CE8E19AEAE39C ECE59FE1DA97E2DA99EFE7A6E1DD98EDE5A0F5EDA5F3E9A4E1DC9BD6D59DFFFFD574724B0A0100 150200DABD9AD1B980FBF3ACFFEAB1BD9F616F4F0CD4BF7CFDF0B4E8DF9FDBDD89FBFCB0BFBA8C 0B00006A6137F8F5ABEFECA4DEDA92FDFAB1F0ECA3F2EEA6EFEBA6EFEAAAF2ECAEF3EDB2EEE8AE FEF6BAF0E8AAE8E0A2EAE2A3F3EBACFAF3B4E8E09FE1DA96EAE39FEFE8A4F9F3AEF3EBAAE7DFA1 EBE2A6F3EAB0FAF1B7F3EDB5E6E0A9ECE5AEF8F2BEF6F0BDF9F3C1F9F6C5FBF7C0F8F3B9FDF9C0 FFFDC5F9F4BDFCF6C2FBF5C3FAF4BFF7F2BAFAF5BCFEF9BEF2ECB4FFF3C3FFF7CAFFF4C7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFBFCFDF8F6FAF7EDFAEFE2FDE0D5F1E0C0E5E4ADE3E3A8ECECC4F9F9EC FEFEFDFDFDFAFDFDFAFEFDFAFFFDFBFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5F5FDCACBFCADADFAE1E1FAFBFBFA FEFEF9FFFFEFEFEBDFADA0CF6F61C15A62B7407E7438A63F7DD27ABDECBCE1F6E1F6FAF7F1F1FE C8C8FFAFB0FDE8E8FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFEFADDF2DDB8E3B7ACDFABB9E4B8F0F9F0FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF8F8FFF2F2FFF2F2FFFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFCFCFFDBDCFF7D7DFE2B2BFD2B2BFD7070FEC4C4FFF0F0FF FDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF F5F5FFD7D8FF8787FE3D3DFC3D3DFB7A7AFBC9CAFDFAFAFFFDFDFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDF87 F0E28BEADC83E3D47EECDD88EDDE88E1D27FE6D784E6D787E1D181DFD37FDDD27BE3D980E8DD84 E1D77EE0D67DE8DE87E6DC89DFD484ECE095E6DA93DED18E8F89548B8960413E149D9C59D2D287 5F5A21CFCB7ECEC97A4A4006C5BC71DCD37EE5DA8FE2DCA4C3BD8A282300D8D38FF1EDA0F4EF9A E6E286EBE688F4EE8EF1E889F6EC8DEAE184EFE990F6F099EEE994EFE896FBF3A5FCF6A8F4F1A3 F1EA9AF3EC9BECE692EFE994F5ED96F0E38BEEE18FF4EA9CFFFDB5CBC583514D173F3D11878546 B8B674D4D18CF0ECA4F7F09EEAE089E2D882DED47EE9E08BEAE08CF2E795F3E896F2E796EFE494 EEE494F7E998DDC26DE3C470F9DB84FBE68CC1A448EFD679F3DA7AF3DE7FE5D374E0D174E0D478 E8DE80EFE185F5E78EF5E68CEFDF88F5E49EEBDE8EE1DB76E8E57EF0EBAB48411F292808B1B45D E7E88CD4CB9B47360CE2CD91FCE693F7DE8F997F38BEA864594900FFF5A8E4DA94DDD586E5DF8D A39B4F615912F7EDA8E7DD99ECDD9BDDCC87948036D8C072E4C876FFEDA4F5EAB68D8352ACA270 FFF4C2F0E3ADF7EAB2DBCF95706527E2D798F2E6A7EFE4A5F2E7AFEFE3B0F2D8A498622EBF804B FDEEAEDDD996E5E1A1FADDA8ECD89FE2D694F3DF9AF6E396EDDD91F6EAA2FBE99CF8DB918F5E1D A37541FFEAB73E381A4846188B7A5474573F4C351B170500766833F7EFABEAE397E3DE8EEEE89C F8EFA7F7EBA6F0E19BF7E59FFEEEAAF9ECB1F4E8ABECE1A0EDE39DEAE099EAE098F2E99EF5EAA3 F1E7A0F0E69FF8EEA9F1E7A3F3E7A1F5E7A0F0E19BF1E5A0F2E8A9EFEAAF666229ADA76BFBEBAB F9E49DFFEBA1F4DB93D4B06DA172377E3708F1C990FFF0AAE4B16EFBCE88FFD891A25E1FB28A46 F3D993BC9B55BE9E58D8AC689C581DDFAA69FEF1A9F9E89EFFEFA8F1EFA5DCE69CD8CE8DE7DA9B E2DD99EBE49DE9E399E0DA8EECE499F5ECA4F1E7A0EFE29CF3E79EF6EA9CFAED9DF3E9A1E9DBA7 3D1F162B0700BA9465ECD188D6CA8193905E313222151709898D53E4E79AEAE7AEDAD4B2100902 4A471EF2F2B4F5F4BD4340298E8B63FCFBC8B3B2841D1908171306C1BE8BE4E49ECECD87CCC98F E5E3AEE3E2A0E7E899E5E59F302D0DB1AD7FFCFBBAD9D788ECE997F1EBA5E6DE98F6EEA0ECE78B DDD780E1DB94F2EBBAE7E2B8202000D0D290EFE9ABECE4A5ECE4A4F5EDAAE7E09BCFC881F0E9A4 EFE8A3F1E9A7F1E9A9F1E9AAF0E8A9ECE8A8FCF4B0F5EDA4F2EBA0E2DF97D0D091FDFECE9A996F 050000443016F7DDBEAF945BEDD688FDE5A2FEE6A3B4924DE8CF8EFAE8ADD6CD88E4E48AF1F299 D9D29F1807095A502FB4AE74857F45FFFABEF6F1B2F5F0AEF5F0AEF0EBAAF3EEAEF9F3B4F3EDB0 EBE5A8FCF6B8EAE2A4ECE4A6F3EBACF9F1B2FFFBBCEDE5A4E4DC99EEE7A3F1EAA6F7F0ACF6EFAB EEE7A5E4DC9CF0E8AAFFF8BBF6F0B4E3DDA2F0E9B0F3EFB6E5E0A9FCF7C1FDFAC5EFEBB0F8F4B6 FBF7BAF5F0B6F6F1B9F8F3BCF8F2BDFAF5BDF4EFB7F3EEB2F3EFB1FAF6BAF9F1BBFDF7C3FBF5C1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFEEDEDF4EAD5EAEABDE9E9B1EBEBB7 EDEDC6EEEECDEEEECCEFEECDF2EED0FCEEDBFFF6EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2CBC6E6A69BD9D3D0D0 ECECCDF0EFCCF7F0CAF7E7CAD9C9CCA6A4BF59818A4993675EBA61B7E8B4F2FFF2FFFFFFFFFFFF F9F9FFCBCBFEACADFDDCDCFFF3F3FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFFFDF0FEF0C9EEC9A8DEA7B9E4B8D7EFD7F6FBF6FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5FFB3B3FF7979FF7878FFA9A8FFE2E2FF FAFAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFFEFEFFFB9B9FF8787FE9090FDBCBCFCECECFEFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6D880EDDF86E6D782E0D17CEBDC87EADB88DECF7CE5D683E7D887E2D382E2D681DCD278E0D77C E5DC81E2D97EE7DD84F0E68EEBE08ED8CD7FEADE94EDE09ACEC27F4C46114F4D2439350D92914D C2C3764D480FC1BC6ED7D28351450FB9AD63E5DA86EBDF95EBE6A5DCDA97312F0CB8B468FBF7A7 FBF5A1F2EA94F3E894FCEF9FFEF2A4FEF0A6E5D688F9F194EDE789EEE78CEEE88FE8E08DE6DE8E E6DE8DECE394F5ED9CEDE594EAE391E5D983FCEF97F7E894FBF1A5E7DF97E0D99AEBEAAF97975E 17170040400D9A9B58BCBB75CFCA77D3C96FDFD57BD9CF76DED47DE6DC85EDE38EF3E994F0E691 EDE290EBE18FE6D986D4B866F8D885F9D984FEDF87E8CA6FECD274E5CC6CF5E081F4E484F4E686 E7DD7EEFE485E6DA79E9DC80E7D97FE9DA82E7D691EBDF8FECE680DFDC75E5E0A05F5839191702 A5A850F0F193E5DCAB58461DCBB57BFFF09FBFA456A68C43ECD68F5B4B01E6DC8FEEE5A1E6DF8F EFE895D2CB7C504803E9DF9BEBE09EE9DA99E3D18E725B15C6AC61FFE597F6DF91EBE69CC2BE77 78712AF8F0AAE7DD97F3E9A3FFF2AFA59757B7A969FFF6B7EBDDA0EFE5AAF0E4A9FDEAABA26D31 A56A27FBE795DDDF8AEAE998FFE7A1F4E499EFE394FDEB9AF8E991E4DA87E8DF9DF1E098FEE095 BF9150764A23CDB38E1D1B0AA7AB6E7B6F489B7F6D462D12281306453600F5EBA8F5EFA0EFEA98 E6E094F5ECA4F7E9A3F0E09AF4E19CF8E6A4EBDFA5E8DCA0E9DE9EE4DA94EBE19AF1E89EE9E095 E9E096EAE098EDE39CF1E7A2F0E49EF5E7A0F5E59BEFDE95F2E49DF5EEAAF2EFB1343400B2AE72 F8EBAAF1DC95FDE097FFEEA5E7C07F793A099F5C2BFFE5ABDCC882CA9352FFDF95E4B86D8B4609 D1B36EE3DA90F1D48EFBD993B17F3E8D440FFBC786FFEEA6FCEA9FFFEEA6F2F0A6E0EA9FEDE3A1 EADD9CE7E299EBE599E8E292E8E190E7E091ECE39AECE09BEEE19DF1E39CEFE195F7E598FFE1A7 C79F743A1C080E0000A59D6AEAE6B6EBE4C274665A1302005A4928D7CD86D7D277F8F4B1857D5B 201600AEAD6AF8F9B3E0DFA738350FD5D59FCFD29964663A0A0A0074754ACAC989868734A9AA5A B8B677D9D69FEAE9A7DFE094CACA87221F00D0CC9CF4F3AFF3F299E2DF82E2DA90ECE2A0F6EDA3 EAE38AE4DE83EEE89BEDE6B1FFFDD15F5D2F96965FFCF5B9EAE2A4E9E1A2E8E0A1FDF5B4F4EDA9 E9E1A0EBE3A2DED697E5DD9EF4ECB0EFE6ABE5E0A3F7EFACFAF3AAF2EB9DE3E195DADC98F7FBC2 EAE9BB372E14543D25E1C2A5C9AB72FAE693FFDF96F3D38AB8944CF6DB99FFF0B7DBCF8AD2D171 E8E88ACBC18C1C0A0B473A24E5DDB4474014D2CA9CFDF9C5DBD59CDAD699D6D192E1DD9DF1ECAC F8F3B4FEFABBEEE6A8DBD395EAE2A4F4ECADF3EBACFDF5B6F7EFAEEEE7A3F7F0ACF2EBA7F5EEAA F7F0AAF3ECA4E4DD97EDE6A1FDF6B2F6F1AFE7E2A1E5E0A0E2DEA0DFDB9DECE8ABEBE9AEE1DE9F E5E1A1EBE7A8E0DBA1D6D197E5E0A8F1ECB4EEE9B1DDD89FC9C588BBB778DCD798ECEAADF2F1B6 F0EFB4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFDFEFCFAFCFCF4FDFDE4 F4F4CAE7E7AFE1E1A5E2E2A6E2E2A7E9E2ACFAE2BBFFEDD8FFF9F2FCFBF4FBFBF1FAFBF1FBFBF1 FBFBF1FBFBF1FBFBF1FBFBF1FBFBF1FBFBF1FBFBF1FAFBF2FBFBF1FCFCEAF9F6D9C6BACB9F8CBE C9C3AEDFDFA7E4E3A8EFE1B1FDE5C7F8ECE2D7E7DC82C18880C4859ED7A1D1EDD2F1FAF2FDFFFD FFFFFFF8F8FFCACBFEAAABFDD2D2FFECECFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEF8FCF8ECFBECDAF9DAC1EEC0BAE5B9DBF1DAFBFEFBFEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF5F5FFEEEEFFEEEEFFF3F3FF FBFBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFFFDFDFFF6F6FFF0F0FFF0F0FFF6F6FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD8CA75E0D47EE6D883E5D882EDE28BECDF88D2C470E0D580F3E694E9DB8ADED27DDED278 DBCF75DDD278DFD47BEADE86F0E690F1E693E3D889E9DD91EDE198DBCE885E58242C2B06403D20 4E4E15D9DA905D5919D1CA85EFE8A4605320ADA252EBE08AE0D58BE6DE99EEEAA24C471B959143 F4EE9EF8F0A0F7EB9AFCF1A1FAEB9FF1E199FCEAA4F7E89BE8E084E5DE80EDE68BEFE78FEBE28D F2E994EEE692EEE593EAE18FF0E794F8F09CEFE390F1E28EEEDF8DF2E697F5EAA0EDE49DE9E4A0 FBF6B4D4CF8C4C461E231E00726D308E884AAAA362D1CC81DDD984DDDA7DE4E083E3DD84EBE08D EDDD8EF5E397FAE69AE3CC7EE4C476FCE192FCDD8DD8BA68EED27FEAD37BE9D37BE7D67CE1D377 EADF81E9E082F6ED8DE9DE7DE8DA82E9DA87F2E191F0DF98EFE28FEAE480E1DE78F1EDA8807B54 0E0B00969442F7F598EBE7AE5F5223AE9A5FFFF09EA88632DCC275FFEFAA6C621ACAC07BFAECA7 EAE091E2DA88FAF3A5615912D1C884FCEEACF5E29FFFEFA978611B9D863CFCE59BECDB8FE9E292 E3DE8C817B2ADDD486F6EDA0F1E79DF1E59DDCCF8B9F914FE9DB9CF4E6A9ECE5A4EDE8A0FFF6B2 B6864783490BF9D98CF0E48FEBE88DF2E48EECE48EEBE48FF2E393EFE489ECE58FF6EBA9F2DFA0 F7DB96F0CF877453276A5836353306A5A876635D2E74643B856C464A30131A0800D3C582EDE49C E7E197E9E39BF5EBA5F9EBA8F5E5A2F6E3A0F5E3A3FAEBAFF4E5A8F0E5A4E1D693E6DB95F5EBA4 F4E9A2F3E69FF3E59EF5E7A0F3E39DF1E19CF1E29FF3E2A0EAD996E7DB9AF6EEB1ABA569262209 E1D99BEFE4A2FDEEA5FAE59AFDDF9AC89F63803F09D48D59ECB57BBB914EFCCA86FFE69BBA9647 9A6220FDF2AAFBF1A6F8DC98FFDC96E5B36F944F0DC99149F2CC81FBE89BFFEFA2EDE798E0E190 F6E99EE4DE90E0E290E3D88CE2D289E8DA94EFE5A0F2E3A1E9D999EBE29EEBE39CEDDB96FEDE9A C89054854F1A60441E0B0800232E1BD9E5CDF2F1E3594B455D4632F8E3B5F0E69FECE995DFDB96 352D176F6743FFFFC5D5D397F6F4C22E2C0FA8A975F3F6BA6E70436A6C38D3D69ADEE097D0D481 CBCF80C0C181D3D099E6E4A9EBEBAAC0BE86322F07E7E4AEEEEDAAE5E18EE7E28AEFE79DDBD28B E2D98EE5DE89EBE58EE9E497F3EEB1FBF7C3BAB886615E26F4EFB1ECE7A5F6F1AEE4DD9BF2ECA9 EEEAA7EBE5A3EBE5A5D2CD8DD7D092EDE6AAEDE4A9DFD69AEEE5A5F8F0ABDFDB93CBCB85CFD190 CACE94EAE9B9C9C2973426191A030074551FFADE89FEEC9DF1D38DB08241F0D18FFEEAA9FEF0A9 E5DF89FBF7A8E0CD973C261B0B0000B5B1954F49396B6740F3EFBEDAD59CD9D597D2CE8ED9D595 E0DC9DEEEAADF8F4B6E8E2A7DBD398EBE5A7F8F1B3F4EDAEF9F4B4EEE8A8ECE5A4F3EEAAEEE8A4 F1EAA6EFE8A5E5DE9CE5DF9DEFE8A7F8F0B0F1ECAEECE6A8E3DCA0DDD99DE9E4A8E6E1A8E0DBA2 E7E3A6E4E0A1ECE8ACE4DFA5CDC890E0DBA3EFEAB3F1ECB4E9E5A9D7D396C7C383EDECACF0F0B6 F8F9C0EFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFF7FBFBE8F3F3D8F0F0D2F0F1D3F1F1D3F4F1D1FDF0CDFFEDCFFDEAD1F1EAC6EAEABFE9EABE EAEABEEAEABEEAEABEEAEABEEAEABEEAEABEEAEABEEAEABEEAEABEEAEABEEFEBBCF3E6BAC7BBCB A69DDCD5D2D7EEEED3F2F1D3F7F0D9FFF3E5FFFAF4F2FBF2C9E8C8B9E0C1B4DEC5BCE3C4D3EED4 F0F9EFFFFFFFF7F7FECACAFDADAEFDDDDEFFF5F5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF7FCF7D7EFD7C3EAC3BDEABCC7ECC6DDF2DCF2FAF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDFD481E5DB85E7DD86E1D77DDFD67BE3D97FE2D87FECE28BE9DF8AE0D583E5D883 E4D57CDDCE76E3D47CE4D67EE2D380E4D784EFE391E8DB8CEADE8FF1E597DFD4885C5722302F14 2D29175B582EB4B47268661AC9C187E8DEA96358347D7320EADF87E5D88FFBF1B1E7DD9E797133 5E570BF2E99FEAE193F3E897F7EC99F4E995F9EC9AFDF09EF6EA96ECE28CF0E690F1E790FBF19A F4EA93F4EA91ECE28BEFE58EE8DE88EFE590F0E691EEE292F3E899EFE394F2E796F8ED9AF7ED98 FAF19DEDE394F6EBA2F1E9A89B8D553325002E28117F7D5AA5A771ADB165D1D77CE9EB8CDFD980 E6DA87ECD68CF4D791FFE29DE2BC74EECA7FFFE699DDBF72CBB065E9D386ECDD8CEDE08EE5D986 EDE58FEEE68EE2DB82E1D77CE9DE82EDDE8DF2E198EFDE99F3E396F4E98EF5EF89E8E382F7F2A4 A7A36F0E0800897F39FEF79BECF0AB76753B7F702FF6D682A67C22FEDF8BF9F0AA868548BDB376 FBE7A1F7E698ECE192F6EEA3665D18A89F5AF9E9A4F8E298FFF8AC947C30816E25FAEDA5F1E8A0 E8DF91F8EE9EB2A758BBAF63F4E89EF3E69DF6EAA2FFF4B0AC9E5DDCCE8FF5E7AAEFEEA5E4EA96 FEEAA7BD93606D3305F3C18BF9DC94F1E48BE9EA8BE7E98FE7E393E8DC95ECE690F0E992F4E39E FFE5B5F6D89DFFEE9C9E8B542C20018A85637572524141089F9B4FE0C7925F42122D1600877537 FBEFB1F1E9A8F0E9A6F4EBA9EFE3A1F1E09FFBE7A6EFDC9AF1E09FF4E5A5ECDD9DEDDF9FF2E4A5 EFE1A0F1E4A1F2E29DF0DE99F7E39AF8E29AF3E09BF8E7A9EADAA0E1D29BF5EAB4EBE1AC483F1E 544A18FAF2B2EBDD99FFF1A8FFEEA4E2C687663C01B87C42F5CE94B76D2FB66F2CFFD991E8BD71 9A7426B9984AFFEFA2F7E197F5E29EFFE8A3C1944CAA6F24F8CC7DE2B061CCAA5AEAD989FCEE9B F3E690F6E38BEFEE92DCE38CEEDC96FBE7ACF0DBA5E8D9A1F5E2A9F0DEA0E3DC97E8E39CF7DD9D D596629B590ECA974CCFB984060502010B0267766DD1D5C3231D09978961E2D79DD5D193E9EAAB ABA772393308D8D2A2F2EDC1F6F3CBCCC7A0181400B0AD7BDBDCA0CFD08DCED287CED387BCC176 CBD088C5C986C2C387D5D5A0DAD9A6EFEEBD5E5B2C4E4C2AE1DFA4E8E7A6EEE7A3F4EBA3F1E9A0 E5DD91DED787EBE694E8E393E7E296E9E4A1EBE5A9E0DBA22F2907B4B169F4F2A7F5F3A9F1EFA5 D9D690EBE8A3F6F3B0EFEBAAEBE7A8EAE5A9E7E3A7E6E0A4DBD092EDE3A4F8F2B3F1EFB2E7E6AC BEBF861F2300BCBC8AF9F6C7E7E5B9A99F74A7854EFBE491F4ED98DCB776A96B35F1D490F5E49B F1E49AEBE29DFFF3BAD2B483AC9066665E4C0F100614130D4A4822F5F3C0D2CF92D6D18FD8D391 E2DC9DD7D29AEAE6B3E4E1ADD4CF96D4CF95E4DFA4EFEBAEEFEAACEEEAABEFEBABF3EFAEF5F2AF F5F2ADF3F0ABF2EEAFF7F0B8F5EEB7F3ECB5F7F1BAFAF3BDFAF3BEFDF8C3F7EFBDF7EFBDF6EEBD EFE8B6F1ECB5F0EBB0F0EBB3ECE7AFDFDAA3D6D09CECE7B0F4EFB7E8E4A8E7E3A6E8E4A4F3F0B2 F1F1B9E7E7B5D7D6A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFE8FFF2D6FCE4C3ECE1B1E3E2A8 E2E2A6E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E8E3A9EFDFB3 CAC1D7ADAEFCDDDEFFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8F3F5C7E4DFAADCB5 B3E2B4D8F0D7F1F7EFE9EAF0C4C4F7AFB0FDEAEAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F8F8F8F1F7F1E2F4E2B6E3B5A8DDA7B4E2B3D7EFD7FBFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE2D783E9DF8AE3D982DDD47AE4DB80DED57AE5DB82E7DD86E0D681E1D684 E8DB87DECF76E2D27AE6D77FE3D57DE2D380E6D986EDE18FEADD8EE5D98AE2D788E9DE918F8A56 3C3B1C332F12403D0F696929545116E8E0A4EBE2AB837941655A0CE8DE89D2C67CEDE39EF7EEAB A69D562E2605EAE292EDE594F0E593F2E893F9EF9AF9ED99F7EB98FAEE9CF5EA98F8ED9BF7ED99 FAEF9CEBE18CE9DF88EDE38EF4EA95EDE28EECE18FECE18FEADF90EBE091E4D989E5DA88ECE28D EFE58DE3D983EFE492F2E799EFE29CF7E9ABDED196605C25121200575627A5A373B9B780C2C080 EBE59BD8CD7ADBCA74F1DA88EDD185DFC075FEDE8BECD079BFA44FF5E08AE4D37CF2E38EEDE28C E0D683F5EA9AEFE494E2D788EDE28EEEE489F5E695F7E79EEEDD98EADA8DEDE187F2EC89EDE788 F0EB9FCCC896120B006F662BFBF49CE8ECA7A8A86D655513D3AE5CC19940FFE592F3EAA4969459 90864AF7E39EEEDC90F6E99DFAF1A98B813D847A38FCECA6FAE498FFEDA0BDA658705E16EEE299 FFF7AEEFE697F1E89BE3DA8D8C8336EDE499E7DE94F4EAA3F1E7A2DED392ACA060FFFEC0EBE99F DADE8AFEECA8DEBA85662C01D2A16CFBE099FBEB94F0EF91E5E68CF2EE9EEDE19BE4DC88F4EC95 F2DF9AF9DDADF9DEA5FDF09FE3D3A0190F009893704037175E571FE1D689F7DFA8775E2D4E3803 3E2F13E7DCA0F5EDAEEDE6A5EFE7A0F5ECA1F1E297F0DF91F1E095EFDE98F0E19EE6D895E5D796 F0E5A3F2E7A5F1E5A1F1E39DEEDE98F2E096F3E197F0DA8EFFF7AEE7D590F5EBAAEBE8A8B9BA7A 070800B4B273FCF3B5EEDC9CFEE5A4F5D594835C2264370DF0D699FCE5A5BD7A36AB6521F6AE68 AC6B22915C12E5C576F6E293F9E99DFAE4A2FFF1ADAC7E37AE772DFEEEA0F8CC7BD5B768CCB96A DFCF7EF5E390F2DC86EEDD86FAF3A1F0EA9FD7D08ED7CE93EDE1A7EEE2A5F8EFACEBE19AFEE7A5 DAA770904214C38139FCD385FBE9B31B1C040004000914052D30141F1703D7C88ECBC080D9D895 D2D595363300ADA978E7E3B4DFDBAEDEDAAD322E01393620CAC88FD2D092C8C781D4D48ADDDE95 C8CB8ACBCC90D6D79FCCCC99D0CE9EEEEABDA09C6C0E0A00A7A36BE2DDA4D5D194EAE2A2F4E9A7 F3ECA3EBE398EBE596F6F2A0EBE596E9E398E5E09AE5E0A0E9E3A9736F33464105F2EFA5E2DE95 FAF6AFE3DE99EBE6A2F6F1AFF0EBABEDE8A8EDE7A9EEE8AAEFE7A9E1D897ECE2A4F7F2B4E8E7AA DFDEA5C0C1880C0C00B2AF7FFAF6C9EFEAC0EDE5BBF1CE90FDE38DEFE98ED8B26AAE7035F3D791 F8EAA1F8ECA6E7DE9FB39F6B6A4F22C1A980F7F0D9747766040500504E27F8F6C2E1DDA0E1DB99 D6D18FDFD99BDCD79DDBD6A1D2CC9AD2CB93D1CB91F2ECB2EEE8ACEBE5A9ECE6A8E0DA9BDED999 EDE8A6F4EFADF2EDABF8F2B3F4EEB3DFD8A1E5DEA7ECE5AEEDE6AFF1EAB4F9F2BCF3ECB8F4EDB9 F8F1BDFAF4C0FCF7C0F7F2B8F7F2BAF6F1BAEDE8B1EBE4B1ECE7B0F2EDB5EEEAAFF4F0B3F0ECAD F0ECACFBF9C0D4D29DDBDAA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFFFCF6FEF9F2FBF9EE F9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECFBFAEC F9F5EECECBF6AAABFCCCCDFFE9E9FFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFCFDEBF6F1 BFE6C1A9DEA8AEDEADB9D7B7BFC3C5B1B0E4AFB0FDEAE9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFEFF F7F7F8E4E5E4CAE1CAB2E0B1A4DCA3BAE4B9E0F3E0F8FDF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDDD27FDDD37CD9CF78DCD378E3DA7FF2E98EEEE48BE3D980DCD27D DACF7DD9CD78E0D179E6D67EE3D47CDFD178E3D481E4D683E2D684ECDF90ECE091E4D98AE3D88B CDC7915955304A491A7170378D8B4A5B5816E0DB9BD6CD90ADA363564C08E8DD93E5DC8FDCD48B EBE29BBAB367665E20E7E08FEDE591EDE38DEDE38EF9EF9AF8EC99F0E492F9ED9CF3E897F3E899 EFE494F0E596E1D685E4D988F5EA99F9EE9EEFE495EBE090EEE393EFE495EEE296EEE393F0E594 EFE58EE9DF87E5DB83EAE08AF0E594EDE296EDE199FAF2AFFAF7AE999754262006241D07837B5E B8B18DD6CC97C1B66FE2D681F9E991C5B15CE5CD79F8E084C5AD4FC2AF50EFDE7EDFD272E5DB7C EBE287E7DC88EDE292EADD94E7DA94EEE192ECE287E6D886EADA90ECDB94EADA8BEADD85EDE385 EAE488E2DD95ECE6B5201904544C1FF0EB99E3E6A4D5D499524303AB8B3BE3BE67FDEE99ECE39B ABA86A655D20FCEBA8F2E298F7EA9EFDF4ADDAD18E857A37F7E7A1F7E195F5DD8EE0C878776517 D5C97FEFE79DEDE396EAE194F1E89B877E32CEC57AEBE099F6ECA6ECE19FEADF9E877C3CDDD193 F4F1A5E2E28EFAE69FF8CE968D5724B8844BFCD893F4E28FEEEA8DEBE991F3EC9CF4E69EE9DD8D F2E492F5E29DFCE2B3EDD69FF5E79CC5BA8A160E005149212D1E059B8954FFF4ADF8E2A9E1CD99 6A59251C10009A915DFFFAC0E8E3A4EEE8A1F7F0A1F6EC98EBDE84F3E38EEEDE92F5E49CEDE097 E9DC97F0E6A0F7EEA8F2E9A3EBE29AEDE199F0E098EADA8FF2DB8BF4DB89F8E999EEE99CF6F8B1 4F581B78803DF2F2B4E2D89DFAE5ABF4DAA1966C33592A00DCB072FFE09EE6B670CF974EECB26B CB7B35914300DE9E56FFF5A6E9DC88FAF0A1FFE4A4FFDD9E8A5C18C7994DFFE496F6D384EFD88A D9C97CCDBD6FCFBD6CF2DC87FFED9AFFEB9CE8EA9ACAD087D1D390E2DC9CE7E6A1E6E69AFFEFA9 EBB67C964A1BB96A3DFCC881FEE79DFFEFB745471E091404282E1A221E0CA79B5EF6E7A3E2D992 E8E79FA4A766423F11D5D1A6F4F0C38D895F1A16001D1A04ADA969DAD696D6D08DD7D28BDAD58C D5D291CFCE9AC6C594D1CFA2D8D6ACD5D1AAA8A37B140F00504B2AF5F1BBE3DEA4E3DEA1E8DFA2 F3E8A8F6EEA8F3EBA2F4ECA0F5EFA0F4EE9FEBE59AF0EBA5E6E1A1E1DDA0E9E6AA98934FFBF8B0 DFDB95F6F2ABE9E49FE5E09CF0EBA9ECE7A4EDE8A7F2EDACF5F1B0F8F0B0E2D996DDD593E6E2A2 D8D597D6D59CD5D59C2A2A11605D2FEFEBC1F5F0C8FAF1CDC4A366EBBE65EEE584EAC172C68545 F1D58FEFE39CF2EAA9E6DFA4503D160E00002B1B013E3B266E6F5E212006A4A279FFFFD0F3F0B3 F4EFADEAE5A2F0EBABECE7ADDDD7A2DAD4A0E4DDA5C8C288ECE6ACE6E0A5E9E3A7E8E2A6E5DFA2 E0D99CE6E1A1E1DC9CE2DD9BECE7A8DED89BD3CD92E3DDA2E2DCA1E2DBA3E8E1A9E7E0AAE3DCA5 F5EEB9FBF4BDE4DDA8F1ECB4F3EEB4F4EFB7F9F4BDF7F2BCF9F3BFEAE4AEF2EDB6F5F0B7FEFABD EFEBABDFDB9CE3DEA4E1DEA4EFECB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFE FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFDFDFEE3E3FDC9C9FEC1C1FED0D0FEE8E8FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFDFADEF3DEC9EDC7BDE8BEAAC8C3939AD198A6D4A8C1D5CAE3D6D5EED6D6F0D6D6EFD6D6EFD6 D6EFD5D1E9D0C5DEC5C6E3C6CAEACAC8EAC8DAF1D9F4FBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7DD89E7DD86E8DE85E2D97ED8CF74DBD378D7CD74D4CA71 E8DE88EFE492E3D782E9DA81ECDC84E5D57DE3D57DEBDC89EDDF8CE8DC8AECDF90ECE091EFE495 E5DA8DEDE6AE504D1E4746056C6C276F6E2B625E20E8E49FE8E29EC6BC7E382E00E5DB9BE9E193 F2EB9EE7E093D0C97AE2DB89F5EE9AF5ED97ECE28CEBE18BF3E994F5E997F0E394F2E596ECE292 EEE295EEE296F7EC9FF1E69AF6EB9FFCF0A5FAEEA3F1E598EDE194F2E699F2E69AEADE92E9DD90 EEE392F4EA93F3E992EAE087EBE189E9DF8AE5DA88E9DE90E9DE91EBE593FFFEB2D4CB936B5F44 0E0000382B1A988B67BCB17EC8BF7ABFB665B7AD54EEE083F8E689C8B857F4E582E1D56FE4DB74 DCD671E5DD7DF0E68EE6DB8AE6D891EAD997E4D58BE9DF85E1D581EBDD91F2E197E6D688E0D37D E7DD83E4DC87DED792FEF7C74F47303C360BD0CE82DDDE9FE8E4AA554608866A1DF3D27FFEE996 F5EA9FD8D390625C1DF3E7A4F1E29BF4E69EF2E8A4EAE1A0736827EADA95FDE69CE1C97AE4CE7B 9C8A3ABAAF62EFE79CEBE295EAE194E8DF93B1A75DA1974FEEE49FEBE19CF0E5A3F0E5A3A99E5F A29757FAF5A9E9E593F8E39BFFE0A2A4713A8A581EF1CC88EAD686EAE18BF2EB96EDE595F4E59B F8E89AF0DF91F1DD98F8E1B2E6D5A0F3E9A4635D341D16075E5429251007E4D4A1FFEAA6F7E0A4 FBEAB0DED09A706635171100A7A16AFFFFC8EEEAA7DFD88CFAF19BF3E88DEFE088EDDC8DF3E395 F2E598EADF95E7DF96F0E8A0EEE69EE7DF96EFE69EF5E99FEFE297F0DB8AEBD67FE1D481FFFDAD 9B9D52626A22ECF3B0E4E2A3FBF4B9F2D8A299703D613201C8965EFFDFA0FFE4A0C49B53D5A75C FFDD94AA5610B25F1AF6B16AFFEB9EFDF39EE0D586FFE6AAD1A566764904E6C679FBDC8CFFE89A EBDC8FDCCF85EDDE94DDC87CCBB061E8C97AFFE396EBE999DADE94CCCE88E1E39BE1EC9DEAE99A F2C682A85422BA5F34FCC08FFFE4A1F8E5A0EBE2A8545627272D1FDDDDACC5BC82FFF5B1F1E196 E3D98DF0F0A6575B1A7B7952FFFFE0CDCA9E272300545024A9A563EDE8A2E1DB93E7DF97E6DE96 EEE59CE2DB9FEAE5BBF5F1CAE2DFB9AFAB845A54300F0A05373114DCD7A6F7F5C1EFEAAFD3CD8E E2D99BEEE3A5F4EBA9F3EBA4F6EEA4ECE699EBE597F3EDA2E5E198DDD894E1DC9CEFEBABF7F2B0 F3EFAAEDE9A5E1DC98D8D38FE6E19DF4EFABEFEAA6EEE9A5F1ECA8F3EFABF6EFACEFE6A3DCD493 E1DA99DFDB9BE5E0A6F6F3BD7371430D0A00BFBB8F7E78556E6442CDAC73E8BB62F2E57EE9BC65 C5843DE7CF88FFF9B8E5E2A7D7D29A24150F2F1E0CC0B99AA8A692484A360A0A00525027E6E2AF F1EDB0F3EEACF5F0ADF5F1B0FAF4B9EFEAB2F7F2BCF7F1B7CEC88EE0DAA0D3CD93DED99DE6E1A5 F4EEB2F4EEB0ECE6A8E0DB9CE4E0A0ECE7A7DED89AE6E0A3F0EAADE5DFA3E0DA9EE3DDA2ECE6AD F0EAB1F1EAB3EBE4ADE6DFA8EFEAB2EBE6AEEEE9B2F6F0BCF8F2BEF9F3BFF6F0BDF8F3BCF1ECB3 F9F4B9F1EDAFF0ECACB0AB6CB0A96BF6F0B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFFEDEEFFC1C1FEBCBCFED1D1FFE8E8FFF5F5FFFAFAFFFDFDFFFEFEFF FEFEFFFBFBFEF4F7FBE8F5EFD4EEE1AAC1E27E85EC8FA9CFABDAB2B1E0B2B3E1B2B3E1B2B3E1B2 B3E1B2B3E1B2B1E0B0B2DFB1D2EDD2F4FBF4F7FCF7F9FDF9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8DE89EAE089EDE48AEAE186DED578E2D97BDBD377 D2C870E5DA83E9DF8AD6CA74E6D77FECDC84E7D880EBDD85F1E28FEEE08DE9DD8BEDE091E4D889 F0E596E0D587C7BE825A571EA4A251BEBC6DADAA686E682FCEC982D1CD84CAC387302502BAB179 ECE597D6CF7FEBE494C2BB68C7C16DE9E38CEDE68CF2E88FEFE58DEDE48EF6E998F6EA9AECDF90 F7EB9DF7EBA1F6EAA0FBEFA6F0E49DF5E9A1FCF0A9F7EBA3F4E89EF1E59AF2E69AF5E99EF4E89C F2E69AF5E999F5EB95EFE58EEAE186F2E98EE8DE85DDD37BE5DB86DACF7DDFD387E6DA91EEE4A0 E3D79B8F8252281A080B0000796C4FC1B58D9E955AA9A453CDC86BBCB159BEB157EBE183DCD573 DDD873DBD871E0DA78E5DD80E1D680E3D487EFDC97F4E698E5DE84E4DA85EADE8FE9DC8EE5D587 E5D882EDE38CE2DA88DFD695FBF3C27C73581B1700A1A05EDEDDA1F1EAB176652A765D27FADF8F EDD883EBE090F5EEA5706A29D7CE8FEFE19AEFE29BE8DF9BE5DC9B6D6221D4C37EFFEAA0D3BA6A EAD380CEBC6C928739EDE59AEBE496EBE398EEE69BD0C980746C26E2D996E9E09DE3DA97F3EAA7 DBD28F8F8643E3DD91F1EA98F4DF93FFE3A1D5A56B6F3F05DBB573F2D78EEEDF90EEE393F1E696 F1E295F1DD92F6E397F0DD95F1DDABE9DDA8D2CF8F29260639352653481D412706CDA97BFFE7A4 F4DE9AE5D393FDFCBFF3E9B64E48241C1901C1BD8AF9F3BBE7DFA0F8EEA3F2E695EDDD8BEFDE8D EFDF91F2E598E9DF94E1D990E6DF97E9E29CEAE39DF0E8A0F0E69EF2E8A0EDE094F8EB9EE0D68C CCC47E403A06E9E5A6EAE1A4EFE1A7E2CE948E7039502B00B48A53FFF2B3FBD996ECC781A87A31 F5C378CB873CA0530BF3AB63E2A45BEFC678FEEF9EF5E297FFDDA4A470338F611CFADB8DF1DA8A F4E799E8E196CAC37BDCCC87FEF2AAEED288BB9E51D2B76AFAE79CF9EAA4E7DE96DADC8EE8ED9A E7D386BB7739BA5C2BFFB787FEE7AFF3E1A4F5ECB0FFFDC98385522E2F19DBD79DF1E3A1F1DD95 ECD98DE5D990EAE79F2528069997727D7A5967643BDEDBA5EFECABEDEBA0DFDA8CDCD584E7DE91 ECE298F8EBA3BCB2798F89646E68463731100D08000E0601272008AFA778F7F1BBF1EBAEF5EDAC E3DC97E3DA9AEADFA1ECE3A1EDE4A0F5EDA5ECE69BE1DB90EEE99DE4E097E2DE96E4E09BE0DD99 DBD594D7CF8DDFD894E0D995E3DC98F8F1ADF4EDA7EFE8A2EDE6A0EEE7A0EFE8A2EFE8A2EDE49F F2EBA6E5DD9DD0CC8CDED99FECE6AFAAA5732F2A061C160B2822070D030195733CE2B45EF8E87F ECBB5DC98639E7D38BE0DEA2DDDDA8FFFBC84C3B1D2B1D0ACECDB1EDEFD9FFFFEBD6D6B4BEBD92 FFFFCDF2ECB0FBF3B1FCF5B2EDE5A6F9F3B5F5EFB5F6EFB8FEF4BBF0E7ACEFE6ABC2B97ED0C78C EFE6ABE3DA9FF3EAAFEEE5A9F0E8AAF7EFB1F0E9A9EDE8A8F4EFAFF3EEADEBE5A7E5DFA1E2DC9E F0EAAEF7F1B5F0EAAFEAE4AAF3EDB3F7F2B9EEE9B1EFEAB3F8F3BEF8F2BEF5EFBEEEE8B4F3EEB7 ECE7AEF5F0B6F4F0B2FBF6B7BEB675A9A15DE5DE9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFFE5E6FFCDCDFEBABAFEB7B8FEC6C7FEDCDDFFF1F1FF FFFFFFF8F8FFEAE9FFD2D1FFC1C4FCB9C3F5B7C0F6BEC1FACDDAEADAF2D8D9F1D8D9F0D8D9F0D8 D9F0D8D9F0D8D9F0D8D8F0D8DAF1DAEDF8EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD37DE1D77EE5DC81E7DE82E5DC7FDDD477 DDD478D9D075EADF87EFE590E0D37DDCCD75E7D77FE6D77FE4D67EEEDF8CE9DC89E6DB88F1E496 EADE8FEDE394E0D588F2E9AAC6C180D2D074D8D881F4F1AC827B43BCB872E3DF96EEE9B030270E 39320A96914CE5DE8FE5DE8DE2DC89DCD680F2EC94F8F197F5EB92F2E890F1E790F6EA98F5E999 F0E394EFE496F7EC9FFAEEA4FAEEA7F4E7A1F6EAA4F6E8A3F0E49CF5E9A0F1E59AEDE194EFE497 EEE296EBE091F0E594DBD17AC3B961DFD57BECE388EBE286E9E086E8DE87E9DF88EADD8FDDCE84 E3D686EDE190F4EAA0CBBF855C4D271103001F12046B633FC4BE81D2CD85998F47A49A4FB4AC5D D5CF78D6D276E0DC7CE1DD7DE8E384EBE187E9DD86EDDD8BEADD8AE3DC85E0D782E3D786E1D484 E7D987ECDF8AF1E692E4D98BE1D694EEE3B0958C6A161300909054E0DAA3FBF1B68E7A41624B23 FCE99AE4D07CE2D27EEFE6987D7731C3BC7DEDDF98EEE099F0E6A2F3EAA97E7331BDAC67FDE79B D3BB6BF7E18EE5D385776C20D5CD82E9E195E9E196F2EAA1E4DB9669601ED0C785F7EDACE9E09E EDE4A1F5ECA89F9651C7C074F4EA9AF4DF94E9CD88FFE0A1744A0EBA9557FBEAA7F1DC94EBDC90 F3E697F0E294E6D289FCE89EF5E397F2E2ACEDE3AF959459020100545231443A0C876B43754A19 E6C180FDE99DFAE79EEEDE9EFDF1BBD4CC9A2D280F2A230BC3BB90FEF3C3F9EEB6F8E9ADE9DA95 F2E092F0E092EFE296EDE399E7DE97E4DC97E4DC97E8E09DEEE5A1E9DE98E7DC97E9E4A3FDFBC0 C8C1864C4018D4C28CFFF2BFF6DAA7DBBD88755822553900A68E50FCECABFBE29DFDE19BBE924B DCA15DD7934C914B02C8893BFFE696ECC374D5B365DCBB6FFFF2AEFACC968D5216AE823CFFEE9F F4E594F4EE9FEAE79DE2DB97E9DD99EDD893FAE197F7DE92C3A95DC4A55DEDD591FFF1ABF0E297 FFECA0BA853DA35819EBA46AFCD89DF4E8A9DAD6A1E9E6B6E3E3B246452144401DF2EBACE3D08B F6E299E8D68CE2D690EAE5A43C3B0C0A0700000000332F14D6D296E9E79ED1CD7CDED884E0D884 E5DB8AF1E599F5E5A0998E581913000E0800332E19675F3EB0A976D5CE98E1D9A0DFD998ECE5A0 DBD489E8E295E0D692EDE3A5EAE2A0EAE19FF8EFAAEBE59CF3EDA3F2ECA1EFEBA2EBE79EDEDB93 E8E59FE7DF9DE9E29FDDD692EEE7A2F1EAA5F4EDA7F9F2ACF5EEA7F1EAA3EFE8A0F2EBA2F4EDA5 EEE6A1EBE49FE7E09CDDD796F6EFB1E6E0A7DBD4A2DCD5A74F492A10090006000064461CD0A555 FDEF85FAC865DB9747B9AA63CFD199E9EBBCFAF1C2867244392B1D2B2E155A5C4A717160CAC9A5 F2F0C3F4F1BCF7F2B5F8F0AFF3EBA8E9E19FFCF4B6FAF3B7F2ECB0F6EDB0FDF4B8F7EFB1C8C083 C7BF82EDE4A8F2E9ADFDF4B8FBF4B7FDF5B6FEF6B8F4EDAEF8F3B1F9F4B3F4EFAFF4EFAEF1ECAD E7E1A3EFE9ABF4EEB1F7F1B5FAF4B8F9F3B9F6F1B8F9F7BFF5F0BAF4EFBBFAF4C1F7F1C0F6F0BD FAF4C0F9F4BDFBF6BCF0ECAFEBE6A7FFFEBAFAF1AAFDF4AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFFFFE6E6FEC4C4FEB1B2FDB4B5FEC3C3FE D4D4FFE3E3FFDCDCFFCECEFFC1C1FEB7B8FDB4B6FCCACBFDF2F2FEFAFCFDFBFEFBFBFEFBFBFEFB FBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD37BDCD279DCD378DDD477DCD376 E5DC7FDCD378D3CA6FD9CF76E4DA83E8DB85E7D880E1D179DBCB73DCCE75EFE08DEADC89E0D482 E9DC8DEFE394EEE394EDE394ECE39EE8E29BDEDB7DD2CE78DFDB938B854C807B35FCF9B6D0CA96 251D08252008535009908A3EE5DE8DF9F29FEBE590EEE891F4ED93F8EE95F5EB93F9EF9AFAEE9C F5E898F9EC9DECE290F3E898F7EA9FF8ECA3F9EDA5F9ECA6EEE29BE6DA92F1E59BF2E698ECE191 EADF90EADF90EEE393F7EC9BE8DE89E0D67EF0E68DEFE68AEDE489F1E88DEFE68CECE389EFE391 EADA8AE8DA83EBDE82EADF87F6E99CE2D496A1926336280808000023180651491FBAB07AE0D59B CAC184B7B36DBEBA6FABA852E2DF87F4EF94ECE488EAE082F6EB8DF7EC92E4DE89F0E895F0E794 DBD07CDCD07AE6DA84EDE18EE2D68AE2D995EFE5AAC9C08F1D1B08706E3DE2D6A0FEECB2937E40 544006D9C678DDCA73DAC66EECDC8A90893FB7B373EBDF97F1E49AF2E9A3FAF1AE9C914E978641 FAE398D0B768FEE898EEDB8E93883EC1B96FECE398EEE69DDED68EF0E7A59E955693894BEAE0A2 EFE6A5E8DF9CF2EAA3C0B8719B9348F0E697EBD88CE2C67FFFE6A29C7839755317FFEAADF6DD9E F7E49FF7E89CECDF90F1DF96F9E79CF4E494F0E1A5F0E8B56566330201005250325F5722FBEAB9 8D6630815511E0C877FFF9AAF3DD97F0DDA3F5E9B7D2C79D423917150B03847650F1E1BCFFECC6 EEDDA7F1DF98EEE096EFE19AE4D794E8DD9DF4EBAAECE2A3E1D698E2D395E9D899F4E5A6E7E6B0 909668413C12A69269FFFED8F8CDA8B28359683B0D64420CCBB271FDF2AAF0E79BF3E79DEBCE86 CB9753C87E3F9C4E0BCC8940FFE593F1D982FAE891F2DC8ED1A962EAB475E7A56C864A0AD3AA60 FFEB9AEAE18EEAE799E7E59EEBE3A2F0E3A2EFDC98F2DD94F4DD92FCE79CE0BC78BB9B58C5A762 FFE6A2DF9C5D9B4405C98644F9DD95EFEBA3F7F8BAF3F4C6EBEDC570703F030000A49C60FAECAB E7D690F7E49DF8E6A0DFD291FAF2B697915E1A15007E7A52E8E2AFF7F4B3DDD88CDFD985DED681 E3D984F2E796F2E49AF3E29CE5D89CD9D29ED6D19BE9E3ADE5DFA7F7F1B6EBE5A6DFD894E7E198 EBE396ECE594ECE693E7DE95F3E8A9E6DD9BEDE4A0FDF4AFEBE49BDFD890F9F3AAF7F4AAEDE9A0 F5F3ABF3F1ABEEE7A1F0EAA5ECE5A0F4EDA7EFE8A2E7E09AF4EEA6F9F2AAF9F2AAF3ECA4EEE89F EEE79FEEE7A1F2EBA5E7E09ADDD691FBF3B2C5BD80EAE3ACFAF2C4E9E1B8BFB693665F45B3976E DEB772F4DF79F5BD59D48F3D51430A363C13AEB087FEEFC09C8153C7B48CC8CDAE5F624A363419 1512042C280CD8D29CFAF2B6F8EFAEEAE19EE8DF9DF1E9A9F5EEAFF7F2B2F8F0B1F8F1B0FBF3B3 F3EBABE5DD9DFAF2B3F2EAABEEE6A8F9F2B3F9F1B3F3EBADE9E2A2F2EDABF7F2AFF6F1AFF6F1AF F3EEAEE7E1A2ECE6A8EFE9ABEFE9ACF5EFB3F9F3B7EAE5ACF4F0B9F8F2BEECE6B3F5EFBEF0EAB8 F6F0BEF6F0BDFBF5BFFAF5BCF3EFB3F4EFB1F9F2ADF7EFA7F7EFA7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE9E9FED9D9FEC9C9FE BBBCFEB3B4FDBABAFDB7B7FDB7B8FED2D3FEDCDCFFD4D4FFDEDEFFFCFCFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6DC84D5CB72D3CA6FDCD376 D7CE6FE9E081E3DA7CD7CE73D8CE75E5DB83EBDE88E3D47CEEDE86E2D37BDED078EEDF8DECDE8B EBDF8DEDE091EFE394EFE495E7DC8DE9DE95E5DD91F3ED94E1DA86E8E298B1AB6A110D005C561E 494519110C00868352E6E3A67A742ADCD587F7F0A1EEE796ECE591EDE68FFDF29CFCF29DF7ED98 F9ED9BF6E999EADF8CF1E790EEE38FF4E999FBEFA4F6EAA1EFE39BEDE199E2D68CF0E496F7ED98 F1E791EBE18DE9DE8FF7EC9CECE190EADF8BF5EB96F2E891ECE289EBE188EFE68BEDE489F0E78C F1E88AEEE487F0E48BF2E38FF3E38FF9EA94EFE08AFFF4A4C7B876706134140404120100201301 887D55D5CD9DE1DAA8B2AD72191600AEAC60CDCB7BDFDB82ECE787E4DD79EAE285E8E390E1DB87 EAE28BECE289ECE188EDE28AF0E48FE6DB8CE9E098F1E8A5E7E0A137372238360CCDBC86D7BD82 907736604C1597863DDEC970C9B150E8D378948A3E848241F2E69BEBDE91E6DD94FCF3AECBC07D 6C5C16FCE59AD1B86CFEEB9DF2DF94B5A9628B833CF6F0A5F1EBA0E8E199F3ECA9E6DEA06A6124 DCD497E5DD9EEFE8A3E8E19AEEE99E82792EEEE397E0D084F2DD92FDE39CD5B877684911C1A26D FFF5BFF0DB9CE5D78EF3E998F6E9A0EFE093EFE38DE4D999E5DDA84E4C211E1C0D404024827D42 FFFFC8F0CF927D56146F4A0AEECB7DFFE39CFFF7B7F8E4ADFBECBCE8DCB2675A32130501524025 978267E7D3A8F5E3A4FFF0AFF8E9A9E9DDA0EDE2A8E9DCA4E9DAA2F1DFA8F8E3ABFBF8BEDAC38A 7E784B151809AAA17EE5CDADB99270764623541F02A87A47E8C588FFF7B1F3E798ECE796EADD91 E4C37DBD8142AA5A20A85B1CFDD387FCEC97E9E78CEFED96F9E498F6CB8BD290569B5318A26622 FFE79AF0DB87E5DE8AE4E093E8E49EF3E9A9F3E7A7EBDD99E6D98DE8D489F8DC95EFD490DFC983 C19F5BD6884DBD4B16E67B43F4C77EF2FCA9CAE192CAC58BA8A77D595B3A020200615B25F0E6A9 EBDE9BE2D58EE9D893F2E39FE6D99AF3E8AEE7DDA7E2DAA7EDE7B1EAE4A7E7E29CE1DC8CD0C975 DFD782DDD280F3E799E8DA92E3D28FE4D798E7E1A4DFD99AE3DC9DE4DC9AF5EEA9E4DD95F2EAA1 E2DB8CD2C979EAE28FECE490EDE499F4EAA7EBE29EEEE5A0F0E7A2F1EAA4ECE59FA39D57CFCB84 EAE69FA6A35CE8E49DEDE69FE9E19AEEE69EF7EFA6F0E8A0E6DE96E9E199EDE59DF1E9A1F0E8A0 ECE39CEAE19AF2EBA5ECE59FE5DE98EAE19BF0E6A1C8BF7EF1E8AC988E5B5D552CF4F2CDF4EECB F0D9B6C8A66EFCE686F5BB59E8A352CFC5841B231245441EE0C99944200C432804CFCFAEFAFBDB FDFBDCCAC7A19A9668E7E1ACF7EFB3F7EEADECE39FE9E09DEBE4A1F2EAA8FDF5B3F3E9A6F2E9A5 F2E9A5F8EFACF3EAA6FBF2B1F2E9A7FAF0B1F5EBADDED496E7DC9EECE5A5EAE5A3F3EEAEF7F2B2 F8F3B3F9F3B5EDE7A9F0EAACF0EAAFEFE9AEF7F1B4F9F3B7FFFEC5EEE9B2F8F1BDFFFFD0F4EEBC F6F0C0EFE9B7F0EAB8F4EEB8F2EDB5EFEAB0F8F2B5EEE7A3EEE5A0EFE6A1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FF E6E6FFCECFFEBDBEFDBDBEFDBDBEFDC5C5FEEAEAFFF9FAFFF2F2FFF1F1FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEE48CDFD67BDFD679 E3DA7CD8CF70DFD677E0D779DED578DFD67CDCD27BCDC269B8A850EBDB83EBDC84DCCE76EADB88 E8DA88EBDF8DEDE092E6DA8BE7DC8DECE191EEE495D9CF7FF3EA99E7E08FE2DB8EE8E3A0645E24 231C0029250A292603CCCA9AEAE9B3ACA664A59D54E6DF94E6DE91F5EE9EF5ED99EEE48FFCF29C FBF19CFEF3A0FEF6A5F7EB98EDE488F5EC92FDF39CFDF2A2F5EA9DEEE297F0E498ECE092F1E793 F2E98EF0E78BF2E890E9DE8CF3E896EFE494E4D987EBE08EECE18EE9DF89EDE38DF2E890E9DF87 E9DF86F3EC8BEEE788EDE38CF6E897FBE997F6E48BF7E583ECDD7ADAC772FEEDAFB09971422D1A 0900000A0000251C0A857E57C8C39B45411AAAA773C6C384B3AF64CBC770D6D273E2DC81E7E291 E3DD89E5DE85E8DF83EADF84EFE489F3E791F0E594F4E99CE9E296E3DB935D5D2E0C0900B29C65 CFB073AB8E4D8D7B45604F05E9D47AD8BA55E5CB6BB0A2525C5C1BF4E999E9DD8BE7DF91EFE7A1 DFD58E6A5A13E3CC82E8CF83FEE79CF2E19AE3D99669601DDDD78DE1DA91ECE5A0F0E8A9FEF6BB 857C42BEB67AECE4A6EBE3A0EFE9A0F5EFA3A0974ED0C47CF3E69BF2E497F5E499F3E2A1765724 A08253BFA676D4BF86FDF0A9E5DE8DF0E79EECE392E7E082EBE19BC0B6833D38122B251C201F03 A8A768F7EAA7FFF6B0E4C4799667257F500BE6C07BF8D995F7E2A1FEECAEFDF0B8F9EBBAA8986B 4331171701003F2A197C6B3ABBAA71D4C48DF4EAB6FBEFBFEEDCACE1CD9CD1BA89C1A6727E5F30 3C1E0165522DA0946E8A7954654C284929008A6438DDBE8AFEDA9FFFE8A7F4DC93E8D78AEEDE90 F5DB95C09455733600B1692CFCCE8AFFE597EBE188E1E88DECF19AF9E49BFEE8ACFFBD84894204 D2974FFFF09FF7E690E1DA86E8E396F3EAA6F6E9ACECE0A0E6DD97E8E596E8DE91F1DC97FFEAA7 FEF0AFFFECAEC1672FB2430CE6884AFFE293ECF8A434420B1E11000500000D0F00656235DDD699 F4EBA7DDD48AE2D88DE1D78EE8DD9AF1E6A6F1E4A8EFE2A7E6DD9EF1E9A6E9E19CE0D88DE4DC8D EAE08EE0D785E3D889E8DC92E1D48EE8DA98E0D392DAD38FEDE7A0F0E9A2E5DD95E2DA91C7BF74 EAE296EEE599E9DF91F0E698EDE393E9DF94F4EAA3FBF3AAF2E9A2DBD28CEAE39DF3ECA7B9B26D D0CB86FFFCB9C0BB78DAD690FAF3AAE5DD93EDE59BF0E89EF3EBA2F1E9A0F3EBA3ECE49DE7DE98 E8DF99EDE4A0F2E9A6F0EAA5E3DC96DFD891E7DE96EDE29AECE29CF0E6A6B5AC73160F00746B44 BCB78EF5E4C5DDBE95F9E48EE6AA4CE79F51BBB17B08100044421DEBCB9B9D6E36513115171500 5B5C43959472DBD9AFF6F3C4FFFCC6F2EBAEF7EEADF1E7A3F4EBA6F7EEAAF1EAA5EEE7A2F6EEA6 F3EBA3F4ECA3FCF4ACF2EAA3F4ECA5F5ECA8EEE5A1EEE5A3E7DE9CF3EAAAF5EDACEDE7A8F2ECAE F2ECADF5EFB0FCF6BAF4EEB1F6F0B3F7F1B6F7F1B7FDF7BCFAF4BAF6F2BAF7F1BBF7F1BEEAE4B2 615B2ED8D4A3F9F2C2F5EFBDF5F0BAF2EDB6F1ECB3FCF8BBF1EBAAEFE8A6EDE7A4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFFBFBFFF8F8FFF5F5FFF5F5FFF5F5FFF6F6FFFBFBFFFEFEFFFDFDFFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5DC82E9E085 EEE588ECE385E4DB7DEAE182E5DC7EE1D87BE1D87DD8CE75CCC168D6C66EDECE76E0D078DDCF77 E7D885E3D582EADE8CEFE293DFD384DFD485ECE192EEE491D5CA78E2D68FDFD58ACEC779FEF8B1 726A3A27210DC7C29EC3C292E5E4B2D9D8A9413B05645B29EEE59FF6EEA5F6EEA1F2EA99EADF8C F5EB96F9EF9AFCF09CF8ED9AEEE28CE8DF7FF9F090FEF599F5EB96F0E595F1E697F5EA9BF6EC97 F3E98FEDE486ECE483F0E68BE5DB88EFE492FEF3A2F2E797F1E696F0E594EADF8DF4E996FAF09D ECE28DECE38DF2ED92ECE78CE9E08AF4E590FCE993F5DF84EAD373F5DD7BEAD174F0D785F6DC97 F1DAA1918252271A000F05001C12011D1606241E049C9776FCFCD2F6F4B8C7C378A7A550A6A14B BFB96BD6CF7EE9E289EDE486ECE183EADF82EADF86E6DC87EEE592EEE694EFE9989C9C650C0600 947A43BE995BC6A464D3BF7C4A3B01D0BB5CE9C75DE0BF5ACCBB6755540FE5DA88F2E691F1E99A E2D991E0D78F7D6D25A89148FBE297F9E098F4E4A0FFF7B982783ABCB66DF2EBA4E0D996F4ECAF FDF4BB857C467B723EEEE6A8EAE3A0F4EDA4E1DB8FC9C077A19750F6EDA2E5DC8EF0E499FCE9A9 C9AF7D5E3E15250800B09A6AEEE19EDCD887E6E197ECE793E4DF7BF6ECA381774A5B5439211A15 1A1805D3D58DEBE59CF3E598FBDF95F5C586955B1D7B4B08CDA55CFFECA1FFEA9DF6E9A0EDDB97 FFF2B6F0DFA9AB9767503C112A18002312002E1D0447360C5D4A1F5D471D462E064124043F1F03 3F1B005C370A58360B381A02503608715A26C2AD74FFEFB3FAE7A7F0DB97F7E199E4CA83FEE59C FFE8A3C494587D440A9F6328F4BC7CFFEDA5F8E493EBEB93EBF39CE3E592F9E59FFFE1A7BB7E46 934E0BD0984BD8B561FFF49BF2EA95EDE599F1E5A1FAEAAEEEE2A1E7E39AE7EF9CDADE8EEEE6A0 E8D492FFE3A8BF7D44A7541BD58845DBA157CCAC5DCCBA7373642A776336787346A8A673F2EDB1 EBE39CE5DD91EEE896E0DD8CEBE79BEAE39BE7DE97F3E3A0F5E49FFAEDA1E6DB8DE6DE8EEBE091 E4D98AE5DA8BEADE92EBDF94DCD088D4C783E4D594E1D792ECE59DDAD48AF1EAA0FCF4ABDCD489 AFA75CD3C980E9DF97F0E59CE2D58FE0D38CE9DF95E9E096EAE297F2EAA0DFD78FD8D18BFBF4B0 E5DE9AECE7A5F0EBA8B5B16ED4CF8CEBE598D9D284F5EEA0F1E99EF0E89EEFE79EF1E9A1F4EBA5 F1E8A3ECE3A0EDE4A0EFE6A3E4DE9AEEE7A1DED68EEAE098F5E9A1E7DB93D9CC89FDFCBF918852 332E00231E01322212674B2FDECC7DF6BC62D48A40BDB47D060E00696443E8C18FB57B40EABD82 A09A68716F493332140F0C00524C1DA9A16BE1D79CFAEFAFEDE29FEEE49FF5ECA7F3EBA6F2EBA3 EBE397E9E296F2EAA0F7EFA5E9E198F5EDA4DAD28ADCD38EEFE6A1F6EDA9F7EFACF0E7A6F3ECAE F2ECAEECE6A8EFE9ABFCF6BAF6F0B4F5EFB3F5EFB5F6F0B6FBF5BBF6EFB8F0E9B4FFFFCFFFFBC9 E4DFAC0D0700BBB989FFFECFFAF3C1F4EFB9F2EDB6F3EEB6FCF8BCF8F2B4F6F1B0F5F0AFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD177 E3DA7FEAE183E2D97BE6DF7CD3CB6ADFD678E4DB7FE9E084E6DC82E1D57CE3D47BDDCE75EADB82 E4D67DE7D884E7D986F0E491F1E595E1D586E0D586E2D687E3D783E7DB89DFD190E0D58ED5CE7E EFEA9FC2B98F211906655F41D4D39FBCBF8867663E120B00B0A763EEE5A3F5EDA5EBE398F0E798 F7EC9BECE18EF6EC97FBF19DE9DD89D6CB71ECE480F5ED8AF5EC8EEFE58DF1E793F7EC9BFAEF9E F6EC95F2E98DF0E787ECE47FE0D778E2D882ECE18FF0E594F2E696ECE091F6EB9CF1E696F6EB9A FAEF9FE9DD8CECE290ECE598EFE89CECE38DECDF80F4E382F8E183FADF87D9BC68E7CB76F3D87B E6CC66EDD975F6E8A5D0C4916C613822180D120900060000201B0D817C5FD3CFA2F8F7BBF3F2A8 DDDA8DC3BF73BDB766BFB960D3CC6EE8DE80ECE185ECE188E5D985EBE28DF2EB93E8E38AD3D39A 211B00573B0B977131E8C683FCE8A25A490EA18B2AECC95ED9B84FD6C46B5D5C14BAB15BF3E990 F2EB98E5DD91F4EBA28E7E3778611BFFE89FF8E09AF8E4A3FFF2B6B4AA6D7A732BE4DD96E0D996 E9E1A4B5AD742118005B532EF0E8ABF0E9A6E6E097EBE498E0D78F988E4AE4DC93E5DF8FEAE297 F2E4A6E0C99817000046291CF3E6B5F5E6A6E4DF8EE1E194E6E58FE5E27DF4ECA1473B089E9571 261D17322F19DADE93E7E597E7E18FEFD78BFECA91FFD89FA36C2B6D4001A3802FE6CC74FCE790 F5E590E3D184EFDC97FFF0AFEFDDA6E1D0A2A7956A78663C544221432F1647300F553A14583911 613E1588603393693D946634C4995FD5B277FFECA9EFE69DEFEDA1E6E597ECE798EEDD92FFE49E EFCB89B68044853E0B995522FDCA8DFBE19BEDD88BEBE491EEF29BC6C975EBE698FFEFABE6C68C 7D490EB67A34F1C474C9A851DBC96FF3E691EFE295F0E09DF8E5A9E6DB98DEDF94E3EF9ADFF09D DCE39AF5E1A4F1B986933F0BB87737F5DD8BFDEB94D8B067C38950EBB98AFCEAB9FFFFC8F3F0B1 E7E09BE0D98BE2DB88E6E38EE7E693E0E190E9E79AE1D88DEEDE94EBD98BE3D57FECE089EFE590 E8DC8BE9DE8FF6EA9EEDE198E8DE97E3D994CFC582D9CF8CE2D893ECE69CF1E9A0E3DB92CFC77E F2E8A0F4EAA2EDE39DF5E7A4EDDF9EEBDD9EF6E7A9EFE49DEAE195E0D98CE9E197E5DD95E3DD97 E2DB97F2EAA9D7D292989352BBB776CBC683DBD387CFC677FAF2A2F0E79AF0E79DF3E9A1EAE099 F7EDA7F8EDABEDE2A2ECE0A1F0E8A7D0CA88CCC681E7DF97E6DB92E8DA91EDE197E4D993C3BA78 FEFCC3E6E2AB9995634738201B0604513D03DB9F48CD873EEBE1AE2B321F362D15CEA36DB97B3A FFDA98FCF3BCF9F6CDE7E5BEB6B488615B2B3F381DDED598FAEFAEF4E9A5F3E9A2F3EBA2F1EAA2 F7F0A7EFE79AE6DD90EEE598E2D98DD1C87DF3E99FE5DC94EEE49DF9EFA8F1E7A1F4EAA6F1E8A6 EDE7A8F0EAAEEAE4A8EBE5A9F8F2B9F7F1B7F6F0B7EEE7B0EDE6AFF6EFB8F5EEB7F3ECB8F8F2BE F1EAB8FAF4C3322C00908960FFFCCEF3EDBBE9E4AFEEE9B1F2EDB4F8F3B9F9F5B8F7F3B4F6F3B4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E3D97FDDD278E7DD80EBE184E1D877CDC464D5CB6CDDD475E3D97BE3DA7CD8CD6F978C2CBAAF4F D0C565D4C869E3D87AF0E587EEE389ECDF87E0D27DE0D582E7D988E8DD88E9E08DE2D88FE5DB91 E4DB8FE3DA94F2E8B4A3976F1B100031290B231B0910070082783CEEE49EE9E098DED389EFE497 F1E798FBF09FEFE493EDE28FF6EC99F6EA98EAE088F2EA8BF5EC8EF0E68DF1E790F7EC99F9EE9C F7EC99ECE28CEAE088F4EB8EF3EA8BE2D97CE1D77EE9DF87EBE189EEE48DEEE38FF3E894EFE490 F0E590F3E894ECE18DE5DB87E7DF8FEBE090EDE18AEDDF81F1DF7FFAE384EACF75F0D27AEECF76 F3D579F4D673F4DA75DEC974E9D78CE9DA96C4B87D716943221C02040000020000211F12686746 C4C59DF8FAC0F6F9A7DFE18CC1C16BB0AD57ABA651C1B967DCD382F0E594E9DE8AE6DA84E4D980 E7E69A4C4813220B00886835FFE59EFDEC979785385B4713EAD27FDFC96BD9CB6E8B863285842F EEED90E3DD79F2E789FCEB9EBBA366634A14F0DD9EFFF4ABEFE399F0E6A7E9DFA180772CDDD58B F0EAABF1EDB56964310400005D562CEAE1B0EADFA5EBDF9BEEE196F5E89DA49B54BAB268EDE79E E9E19EE4D9A094834D13000052340CCDAE75FDE09AFBE08FEAE18AE6E489E4E58BC9C390342D0B B0A9821A0E035A5029F1ECA0E3DD95EDE69BE9DE90F0D089FFE49EFEDA96BB98547555115F4105 AD8D46F9D995FFF1AEF8DF9DFAD797FBE1A0F5E5A7F2E3A6EEDEA4E5D69BDCCD91E0D096D8C98C D8C78AE3D192E7D494F3DF9FF6DB95FCDE95F9DB94FCE29AEED78DF1DB92F7E198FFEDA5F7D490 C390519C571D994711A54D16D99B5CFFEAA0EBE795DDE08DE6E495E4DA8E998A42EBD28DFBE9A9 A37236633300DBC775FFF4A1EECD79D2AC5BD9B162FFEEA0EDD98CEDDF94E2DE8FE0E190F7FCA8 DFE79AEFF0AEFAD196994510BF682CEFBB70F7EC97D7D885ECD893F3CD92CDA268B39A5AECD993 F6E59CE7D88CDCD280E8E18EE2DF8CE9E797E4E194E2DC93E7D993F4E09CEDD690E7D886ECE08C EDE18EF1E495EEE295E5D98DEDE197EEE39AEADE97E6DA95EEE29DEDE39DE7DD95F2E8A3F0E79F E6DD95F0E6A1E6DC96E1D792E4D995E1D593EEE2A1F3E7A7EEE49FE9E19AEFE7A0E2DB94E3DC95 F6EFA9F7F0AADED791E4DD97D2CC83DFD991F4EFA6EFE89EC7C075F8F2A6F0E89DE5DD92F1E99F EEE59DF6ECA5F7EDA9EADF9EECDFA0F3E9A9E2DA97D6CF8BF0E7A5D9CF8CDAD08EF0E5A4C1B774 211900CCC583FFFCBEF7F2B2F3E9B9AD9162A78341DDB16CBF9A66FFFFD59F9E712712003E1507 B48842FFF4AAEEE0B0DED4A4EDE4B1F4EDB8F4EDB2EEE8A8FDF6B5F3ECA5F7EFA8FAF4ACF6F1AA F2EEA9F8F4AEFCF6B1F6EEA8F7F0A8E8DF98DCD48CF3EAA2FBF3AEFAF1AEF9EEAFF9EFB1F9EDB3 F1E7AAF1EBA9EEE9A8EFE9AAF5F0B4F3ECB4FAF3BCF6EFB8EFE8B0EDE7ADF1EBAEF3EDB1F6EFBB F2ECBBFAF6BFFFFBC66A663C605A44FBF9DCF9F8D1EBE9B3F4F2B4F6F1B5FBF7BEF7F4B8F3F2B3 F4F4B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD2C76DDED379E4D97DE1D67AEADF83EDE384E3D97ADDD372DCD271DBD170DBD170CEC662 BFB850D3CC64CCC55DE0D772E6DC79EDE384F3E68AF1E28BF4E592F4E695E8DD8BE2DA89E3DA8A E6DD8FE8DE96E5DB96DBD08FE6DA9E5B4E203427005F511FAC9F6BE6D993E2D68AF1E697F7EC9D ECE192EFE495EEE393F1E696ECE18FF0E593F9EE9CF9EF9AF5EC92F5EB91F0E68DF3E995F8ED9B F6EB99F6EB99EAE08BE7DD86F1E78EF4EB90F0E78CF2E98EF4EB90F5EC91F4EB90F4EA91F5EB92 F2E88FEFE58CF0E68FF2E891F2E891EEE48FECE28BEEDE88F1E086F4E183F5DD80E7CD6EFCDE81 F2D376F1CF75E8C66CD9BA5FEFD375EAD273E1CF73F7EA97F9F1ADCECB981817000E0D01070800 030500080A00646841B4B679E5E7A6FFFFC2F2F3B0D2CE85CAC57AB4AE60B0A657C7BB6AE1D583 EEE08DFDF9A6888542070000856F46F7E098EFDB7AE0CC804E3C03C5B778E1D781E5DC7CB1A94E 5F6117E2E592E9E47DEADA76FCE194D2B480472D06E1D193DED786F8F29FF1E7A1F7EDAC887E36 BBB371F2EDB4E7E4B324220B575430B7B38FC2BA8CF4E7AFE4D490F3E093EEDF8F9F974B99924D DED89EF6EEBEE5DCB22B1D13503B0F8C703D947033FFDC95F8E392EAD479E1DC7FECEB9F8C8968 28261978764A150800776839FDF5A7E2D796EFE8A4EEEA99ECE08EE9D989F8E69BFFF0ADE1C489 A6854F633D09744A15BA8C55F8D094FFDB9DFED691FBE59DF5E198EAD78DE4D187E9D98EF9EA9F EFE196E6DA8EE5D98DE5DC8FE5DC8FEDDE8EE7D281FADF91F3D28AFFDC96FFE9A6FFE3A2C29756 804910894409BD6D34DE844CB86122F4C278F6EA96DBEA90E2F29DEFEFA3F4E09CEDCB8BFFF9BC CE9E616E3406A37936F0F09CFBF29DFEE190EFC173DAA65AD4A556FCDC89F3E38EE3DD86E8E590 E2DF8FF2EDA5FFF7BBC6854B9E490BDE8E47FFE292E9DD8BDEE295E9E6A2F8E7A6F9DD98E0C176 A7873ADCBF6FF9E090EAD888E6DB89E6DF8EDCD688EAE399EAE199F0E09EF8E3A3EDDA96EBDB8F F0E494EEE192ECDF91E9DD90E4D88CEBDF93EADE94E2D68CE2D68CE8DC94E9DD95ECE29DF2E8A3 EBE19CEFE5A0F5EBA6EDE39EEEE49FECE29DEBE19CE7DD98E9DF9AEFE8A3F1EAA6FFF8B4F6EFAB EAE39EE7E09AF8F1A9F3EDA4EEE89DFFFFBAEEE899F3ED9FE2DA93B5AE68E6DF97EFE99FECE599 F4ECA1EAE29AF1E8A0DED48DD9CF8BF2E5A5F4E9A7EFE7A2EAE39EF4ECABDFD798E7DFA1F4ECB1 F8F0B44A4202A09856FEF9B4EFE8A0FEEFABD3B26FEDBF6DCCAD73574822B5BF8FFFFFD4DBBF90 6E4716B89F4EFFF7AAEFDAAF7D6D389E9050F1E6A5DED590EEE69EF4EDA5F8F2A8F2EEA5EEEAA1 F1EEA7F6F4B0F9F6B3FDFBBBEFE8A8F3EBAAFFF8B4F8F1ADEDE6A2F9F0ADFEF4B6FCF2B5FBF0B7 F9ECB7F2E9ABF8F3ACFAF5B1F3EDADEDE7ADF1EAB3FDF6C0F7F0BAF1EBB3F0EAAFF2ECAEF6F1B1 FEF6C2FAF4C4F6F2B8FFFFC7B3AF883B3626F7F5E3F7F4D2EFEEB6F7F6B3F1EEAEFDF8C0F6F3BE F3F2BCF8F6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEBE086EDE288E9DE85E6DB80E9DF82EADF83E0D678D9CF70D8CE6FD9CF70D8CE6D CEC561C4BB56DED570B0A742B1A843C9C05DE7DE7EEDDF85EADB85EADB88E8D989E6DA8CE6DD91 E8DF93E9E195E9E095E5DB92EAE197DDD389B8AF65D3C981E2D990F3EAA0FDF7ABE7DC8CF3E897 FCF4A4EDE191EEE491F4E997FAF09DF7ED97F1E792F4EA95F6EC95FBF197F5EB92F0E68DF6EC97 F8EE9BF2E795F3E896EFE590E9DF88ECE289EEE58AEEE58AF0E78BEDE489EDE489F0E78CF2E88F F2E88FF2E88FF1E78EEEE48BF1E78EFAF099F5EB96F5EA93EFDF89F0E086F8E486ECD477E0C667 F9DB7DEACB6EEACB70ECCD72DCBE61EFD674ECD773E7D776EADE84EDE699E6E1A54D4A1CB2B08D 67674826260C000100060300120905473F328F886CCAC597E8E3A8FAF6ADEFE999D7D17DAFA757 8F8638AB9F55DAD58DE8E5AD1A0B00604C2CF2DE9BF5E485FFF0A07665259A8C4FF6EC9AEFE588 DAD17D4D4C15CCC88EF5EA9AE6D17EFFECA5EBCB9678602BBEB06AECE891ECE88CEEEA99F9F0AC CAC4898F8854FFFBCE97956D0505009596728282613D3818C7BF7FEDE496F0E38EF1EA8FD9D784 736E32EEE6C4DDD2C3695D540E0000E1D0ACD5C48F5839049F7935FDD38DF9DF8DE8DC85F5EEA6 5D58385655384444280D0401978C59FFF6A7E2D893F1E9A3F3EC9DE1D782F1E492F7E699F6E59F FFE8A9FFE6ACC9AB728A632A7A5115865A1DA77837CEA460E6C37FFBE09CFFE6A1FFE19DF9DA96 FADE99F3D792EED08AEED38DF4DC95F5DB94FFE69CF9D98FFDE49CE8C37DDAB16DB68F4C77520E 6744018C621FE2B673FFD795DE9E5EA66921FFDF91FFED9DEAEA95ECF3A0E5E498FBE5A1FFE4A8 F5C9918D541C815213F8DC97F5E99AF1E592FDEC99FAE28DF9DC89BC9544DBB766FFE999F2DF8F ECE28FEDE998FAEEA7DFB77C86490BB06C25FDC478FADD8BE0D080DCDB90E3DF9AF1E29FFCEAA6 FFE59CE9CC80C49F53BA994CF4E295FBE799FAEA9CF1E397EFE59AE4DC91E5DA92ECE19AE9DD95 E3D88BECE192E9DF90E9DF8FF1E598F4E89CF4E89CEEE296EDE195E5D98CE4D88DECE198E2D994 E0D792F3EAA5E9E09BEDE49FF6EDA8F2E9A4F2E9A4F0E7A2DED590DCD38EEAE39FF3ECA8F2EBA7 FDF6B1F1EAA4E2DB95F5EEA7F1EAA2938E44D4CE81F3EDA0CFC97DE9E29ACCC57EE6DF97F0EA9F F4EDA1EDE698D9D286ECE399D3C982D7CD88FBEEABF1E6A3EBE39DEDE69FFAF3AEEDE5A4F0E8AA E7DFA1FBF2B59E96575D5514C8C17CF5EEA7F6EBA7E6CC84F8C974CBA45F150000595B31F8F4C9 FFFBD69E7D54DCC980FFF2A4FDEDBCAFA065C0B673FEF4AFF3EBA5E6DE96DCD68CF9F3A9F6F1A8 EEEAA1F4F1AAF9F6B2EAE7A4F7F2B0F3ECAAF2EAA9FBF5B5FCF5B5EEE6A6F0E8A9F5EBADF5EBAC F6ECAEF4EAABEEE5A4ECE7A1FAF5B2F1ECADE5DFA3F9F2BBFDF6BFFBF4BEF8F2B9F6F0B5F9F3B5 FEF9BAFAF2BFFFF9C8FBF8BDF9F8C0E6E3BB1E1903CCC7B3FFFCD8F7F6BCFAFAB4EDEBA7F7F1BA FBF5CFF8F2D2FEF7D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFDFFFFFDFFFFFDFFFEFDFFFDFDFFFDFDFFFEFDFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3E48FE9DC83EDE088F4E78FE5D77EDED177E4D87CE9DC80EADE81EADE81 EADD7ED5C967B5AA47BFB351C6BA58C1B653E0D472E6DA7BF1E38AEBDD87ECDD8BF5E598F0E399 E8DE97E7DD95E4DB91E2D98DE3DB8BDAD27FF4ED95F0E98FD1CA6DDCD677E8E185E4DA86EEE391 EDE38FF0E594F6EC97EDE38DEFE591F3EA93F8EE96FBF19BFCF29BFDF39AFDF499F5EC92F0E68D F7ED98F8ED9BF0E593F2E795F6EC97F0E68FEEE48CECE388EBE288ECE288E9DF86EAE087EFE58C F1E78EEBE188EEE48BF5EB92F1E78EEDE38AF0E68EF7ED98F7ED96F1E18AF1E087F8E285E7CF72 EED475FDDF81E4C568E5C76CF0D377E9CE70E3CD68E2CF68E9DB74EBDF7EE9E28CF0EAA266602A A49E6EF5F0C1D4CF9B8885532822000000000C00000E04021B120D50462A857C56BBB382F2EBB0 FDF4B4E6DE97D1CB80BAB574C8C3971B0D0137270DC2B578ECE188EEE28FAFA25C6D5F20FEF6A7 EEE38EF2E999625D2DA8A06EEFE19AF4DA8DFFE69FDEBF82A48D527C6F2AF4EF9FE7E492FFFFC1 FBF6BCEBE8BE6D6744E5E1C25A5846000000101200090B00060800807E3BF8F3A4DFD882EBE793 DCDC9868633A4E4539261B210C0104100600776A40F9EBB1A28A4E644410876032E0C07BF8E090 DFD190322C0B898A6A272C190D0C01B3B075F6EF9EE9DE97F4EBA2EDE596E9E08BF4E996EEE092 EBDA90F7E29EFFEBACFFEBAEF7E0A1E2BC7CA47D3C744C086E44008456169A692AAE7E3ECA9C5C DEB06FEFC182F4C787F0C181EDBE7EEDC080E5B878C99E5AC7A05AA4783474470B6B3F037E5A17 A98A45D9BF77F8DE95FEDF94FDDE95AD7C31C8A758FEEB9AF9DE8FEDDC8CE7E192EBE699F2DB98 FFE4AABA7541844710D2AC6BFFF5ADF9E196EFDE8EEDE791ECE88FFBF099F3DF8BB99446C99E53 FFEDA3EED88AFCF2A2FBDE999F62278B530EDFAE5FFFEA94E7CA75F3E191E0D98EE6E39BF5ECA6 EAD792F9E199FFE69DFBE79EC6A056BC994ED8BA6FFBE499F7E195EDDD91E5D98BE6E091E8E394 DEDA8AE4DC8EE5DC8FE4DD8FEDE396F0E799EAE192EFE597EEE394F3E89AE6DB8CDDD283DDD489 C1B772CAC17CEEE5A0E7DE99ECE39EF1E8A3F2E9A4F5ECA7E9E09BEAE19CE7DE99E7DF9BE9E29E D9D28DEDE6A0EEE7A1EBE49CE8E199E7E097D9D38ADBD58BDBD58BBCB66BD2CB83CFC881D9D389 DFD98DECE698E8E191D4CD7EE6DD90E7DE93E4DA93ECDF99E3D992E5DE93E8E298F2EBA4EEE7A3 EAE2A1E4DC9DEBE3A4F8F5B6888040928A49E5DE99FFFCB9F5DF97F9C770E6B76B3F1A00221B0D DDD7B3D2C2A9543E1CE2D793FCF1A3F6E1A6D9CA89F8EFA8E8E098F2EAA1DCD58AE3DD92E2DC90 ECE79CECE89FF0ECA5F1EDA7E1DE99E3DD9AF8F1AFF2EAABEBE3A4F1E8ACF1E8ACEFE7AAEDE4A6 EFE7A3F4ECA6F6EFA7F6EFA9ECE7A4F1ECAAF0EBACEBE5A9F5EFB6EAE4AAF0EAB1F2ECB2EFE9AE F3EDB0F4EFB2F1EAB6F0EAB7FCF9BFF2F1B8EAE7BC37322546412CF1EEC9F0F0B3F4F4ABF3F1AA FAF4B8FAF5BFF8F3BEFDF7C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDFFFFF3FFFFEDFFFFEEFFF5EDFFECECFFECECFFF4EDFFFEEFFFFFF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCCD78E5D681E5D77FD9CB73DED078E6D87FEDDF86F2E589EFE286 EADD81E5D879D1C463F6EA88E2D674BBAF4DACA03ED0C363D7CA6EEADB83E8D985E3D483E4D588 E7DA92E9DF98EADF98E8DF95E7DE8FE9E18EEEE78EE4DE7FD9D371D1CC66E3DE75DCD870EFE58C E6DC87EEE48FFDF39EF8EE97ECE28AEEE48DEDE38AF6ED91F8EF95F6EC93F7EE93FBF297F6ED93 F1E78EF4EA95F6EB99F2E795F6EB99FAF09BF5EB94F4EA92F1E88DF1E88DF3E990EFE58CF1E78F F2E88FEEE48BE9DF86EFE58CF5EB92F1E78EECE289EBE188F5EB93F2E690F2E28CF6E28AF3DD80 ECD275F4D779F9DB7DEACB6EEED276EFD377EAD172ECD976E2D16BE2D56DE1D672E0D87BE9E191 8E854B595018F0E7ABE7DF9FFAF3AAE0DA9E9A8F6E483B251B0F041003000F02000800001F1103 473C227E784EC4BF88E0DD9BF7F2BCE1D8B7392C211B0D00B0A670EDE793E9E28CD8CD7F574A05 D8CC82F8EC9DF5ECA09E97628C824BF6E59BFFE894F5D888BA9D57E4CE8E5E5212EBE6A5E9E5AA 817B4D8F8966E0D9BE908A74716F5B090901565947CED1BB373C2C090C00A4A66AF4F5AEE0DE8E B5B3742E2D060400010E09090E0707040000000000686128FDF3B1FFF0BB573B18200000C89F6A FFF3ACCBBF852A20017C7D5D0910001C1F02D0D092F0EB9AF3EA9FF4EBA0EDE495F0E892EFE68F EBE08EF1E396F6E49DF1DD99FCE19FFEF2B0FEF2AEFFEAA3EAC981C69F59AA793A8F5C1D7A4607 6D3A00673400753F007D45087C4407783E027C4105763B006D3D00825917774B0AAA7F40CDA767 E4C481F8DF98F8E69AF4E092EED384F3D887AD8736E4D681F8EB99F9DF92F8DE93E9D68BF2DF96 FFEAA8CF9760803905A5692FF8E5A0FAECA0FAE096E6D688E1DD89E6EC93E0DF88FFF49FF3D386 B98A42E0B36BFFE89EFFF0A5CB945399490CAA752CFFE992E3D477ECDB84F4E292F8ECA2F3EEA5 EEE9A0F0E39CFBE19BF7D88FFBD88EFFE59BF2CF85B08C43CBA961FEE39AF3DA8CE2D180DBD07E DBD883DFDD8AE2DC8CE0D98CE4DD8FF0E99BF1E99AE5DC8DE8DF90EEE495F0E695E9DE8EE1D686 DAD183D6CD87ECE39EE5DD98EEE5A0F2E9A4DFD691EFE6A1ECE39EDED691EFE6A1EDE49FEBE39F EBE4A0E7E099EDE6A0E8E199E5DE95CAC47AC1BB71E1DB91D1CB81ECE69DF0E9A1C9C27AD7D188 D7D185DCD68AE9E393EAE393ECE595EAE193F7EEA1ECE399E5D892EAE198EAE495E6E094E3DD93 E5DE97D6CF8AECE4A2DCD494FFFBBCE4DC9D837B3A494100D7D290E5D58AD19B44FFCA7AB48443 3725013B3023332719040000918E55FAF1A6FDE6A3F3E39EF6EEA6EFE79EF3ECA0E3DB8FC4BE70 E5DF93E4DE93E6E298EDE9A0F3EEA9F7F2AEE3DC95EEE7A2F1E9AAF4EBAFF3EBB2F0E7B0EDE4AB E5DD9FE9E29DEBE79CEFE99BEDE99EE1DC9BE5DFA0F1ECADF8F2B4F3EDB1E7E1A7EEE8AEF0EAB0 E7E1A7EDE7AEF2EBB2F5EDBBD8D29EECEAAAF8F7BCF5F3C579765C000000BFBC93F8F9B8EDEEA2 F3F2A9F9F3B3F2EFACF0EDA7F4F1ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEF8FBFBF1F8F8EBF9F9ECF9F9ECF9F9EC F8F9ECFAF9E6FDF9DBFFF9D5FFF6D7FFE9DAFFDDDDFFDCDDFFE7DAFFF5D8FCF9E2F9F9EBF9F9EC F9F9ECF9F9ECF9F9ECF9F9ECFCF8EDFDFBF1FFFEF8FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E18CE9DA85E1D27EE0D27BE3D57DEEE088EFE188EBDD85 E9DB82EEE185EEE082CABB5BD2C362E8DA79DDCF6EE8DA79CCBE5ECEC163D7C970DDD07BE6DA88 E6DA8CE2D68CE5DB94EDE39AEAE196E4DB8CDFD883EBE48BEEE88BEBE585E2DD78E7E27BEFEA83 F0E78CF0E68FF0E68FF5EB92F4EA91EBE187F0E78CF4EB90F9F093F0E78BEBE286F6ED91F6ED92 F7ED93F0E68EF1E792F6EB98F5EA98F6EB99EFE590E9DF88EEE48CF2E98EEFE58CEDE38CEFE58E F5EB93F4EA91E9DF86ECE289EFE58CEAE185E5DC81E8DF84F0E78DF3E992EADD88F3E38DFBE78E F0D87BF3D67AFADF82F7D87BEED072F5DA7DEFD679F5DE81EBD97BEEDE7EF0E280ECE07EEBE084 EFE390C5BA702D2100D8CF8AE4DB92E1D988ECE592ECE596EEE5A2C6BB8A75684A46372E211511 090000040000030000150F00403B1F6B61458C7D61594B3D130A007A7648E0DE92EAE58EE7DE8C 8375309A8C49F7ECA4F5EDA2CBC6816D641AF0E18BEDD375F6D97FCEB361F8E19F8A7D47CAC197 7C765B0800000600002A241854503E0B0A010D0F07616357696D5E333728646847B0B389DFE2AC E2E2A64E4A30000001231D1B817E7287866A37381B5A5B2ECACA7FFFF9B5D9CB9C2510052E120C 8E6538E1B97BA18857493C1B7A7B5A0A1100222602E2E29FEDE997F4EB9BECDF93F1E697EBE28C EEE690EAE08DEADE90EFE196F0DD97D9C57FF0D992F2DA93F6DE94FAE297FFE098FFDA99F9D08E EECB8AD4A867BD8E4DBD8F4FB98748BF8B4CB88345C58F51CC9659CFA664C6A462D8B472FFE8A9 FFEFAFFBE39DF7E49BE2D184FAEA99FFE695CAA755A5822FE2DB85F0EA97F7E496F7DC92F2D58F FCDB98E8B97A85460D894A12F5D193F1DD96EFE79BF7E297F1E296E4E28FE7EB96EBED98F1E996 FDEEA0ECC77DBF914BDAAE67FFE59F9A4D16A84B0EEEBD6EF1E589D5D878E8DF88F1DF90F8E59C EEE89EE6E399EFE59EF5E19CF5E197F4DE93F4DA90FFE59CFFE098C59D54BA944ADABA6CEED583 E4D37EDDD27AEAE28BE9E293E9E194E8E093ECE597EEE596E8DF90ECE493F2EA99EBE392EEE392 F1E694E8E092E1DA93F1EAA4F3ECA6E6DF99EBE49EE9E29CE5DE98DCD58FDFD892EEE7A1F0E9A3 EFE8A4EBE49FF8F1ABF0E9A2E9E39AEAE399E1DB91DDD78CE5DF95F3ECA4ECE59ED9D28CD9D28C E0D991D9D388E5DF92EAE395EAE393DAD382DBD282EAE193E7DE93E6DA92EBE397EEE796F4ED9D ECE596E0D88DA59D55E8DF99ECE3A0D9D08EF8F2B3DDD79C8C8244D8D692E0D388C78C35FBB55F F7BE75B6A4771205000200000400005B5D2EFDF7AFF9E39BFFF1AAF1EAA1FCF5ACE3DE91DCD687 E3DD8FF3ED9FE0DA8CECE69BF6EFA7EDE8A2EEE8A2ECE59CF1EAA5FCF5B6F6EDB3EDE6AFF3ECB7 F0E9B2E8E2A6EFECA7EFEDA0E8E694DEDB90D6D092E5DFA2ECE6A8E9E3A5DAD496E7E1A4F0E9AD EBE5ABDBD59CE7E0A9F4EDB7E8E0AECEC893E2DFA0F1F1B2FFFFD2BCB89B0C0804626038FEFEC1 E2E395EAEA9FF9F4B4F0EAAAF0EBAAF7F1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFEFEFDFEFEFCFFFFF4FCFBE2F0F0CAE7E7B7E8E8B9E8E8B9 E8E8B9E7E8B8EEE8BBF9E8C1FFE8C3FFE7C5FFE1D1FFDBDBFFDBDCFFE0D3FDE6C6F2E8BDE9E8B9 E8E8B8E8E8B9E8E8B9E8E8B9EAE8BAF2E7BEF9EFCCFEFAE0FFFFF2FEFEFBFEFEFDFEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8AE7D782E8D881E5D57EECDC85EFDF87E2D27A E5D67BE6D77CE2D378E3D476ECDC7BF3E17FECDD7BDECE6DDACC6ADFD070EFE183EEE088EFE28B EEE28EE9DD8CE5DA8BE4DB8FE5DC8FE4DB8DE3DB8AD8D07EE1D985E7DF8BE2DA84DDD67DE6DF86 ECE68CEFE58BEFE58CF1E78EF5EB92F4EB91EDE489F2E98DF4EB8EF8EF92F9F091F8EF90F8EF92 F9F196F7EE94F6EC93F0E691F1E694F5EA98F4E997FBF19CE9DF88E8DE86EFE68BF0E68EF5EB95 F0E691F1E790F7ED96F2E88FEEE58AECE388EDE489EEE589E8DF82EBE286EDE38CE9DC87EEDE87 F7E38AE0C66AF9DE84F8D87BF3D477F1D375F2D97CF1DB7DEAD678E6D77EEADD82EADD80EFE284 EDE086E2D382E6D78C342508AFA35CF6EAA0E8DD8BECE38AE3DC7FE8DE86F4EC9CEEE59FE4DBA3 D5CC9F908864453C231B14000700000200001200001A04021406050D06002E2E08BDBF7BF6F49E DAD37DC5B66E574909DED491F3EFA2F6F3A96A621CCCB869FDE78AF6DA7CCEB25BFFF9B1B2A36F 2A210D0600000D0300010000030000040100000000050700040600424439DCDFD1DEDFCC5C5E45 4A4929A9A984E7E0D7796E7F0601000A0905535721E5E99DDFE393E6E69DEFEAAE736638110003 978066633A0B91673253370F736545727151181D102C2F02E7E69FF5EFA0EEE391F2E696ECE192 E9DE8BE9E18DF2EB97EEE393F2E699F3E49AEDDE93F3E197F4E298F5E195F3DF93F1D98FF1D58E F7D993F2D58FF8D993F8D590FBD894FDD895FFDF9BFEE29FFFDC9AFFD895F6DA95F4E19AF6DF99 F1D894F4DC98E9D38BEEDD93DCCC7EE8D384FFE393CDA554BD9243EFDF8FDED787E4D88AF0D88E FFE4A0F8C1829556198B5114F3C887FDEDA9E6D78EE9E095ECE296ECE297E5DD8FE8E191E6E290 ECE796F5EA9AE2CA7FF1CB83CB9450BD7A39A5480CD47432FFDF8EECEA8DE3ED91F3F09CF1E193 F1DE93E8DE93E8E69AEEE9A1F1E09DE6E094E7E492EFE495F4E094FCE196FDE399E8C176C09B4F DDBC6BEACD7AFCE690E3D17CE7D98BECE293E3D889E9DE8FEFE495E1D686EDE292EEE595EFE796 F0E895E7DF8CD9D083D7D089E4DD97DBD48EDDD690E4DD97E7E09AEBE49EE1DA94D8D18BDFD892 EBE49EF9F2AEE4DD99E4DD96F5EEA6ECE69CEAE497ECE698E5DF94E3DD93E8E199DED791F3ECA7 C9C27DE3DC96D8D18ACBC57BDDD689DED787F0E999E8E090EBE293E9E093E7DB91E5DD90F0E797 ECE595F2EB9BF5EE9FE5DD92DAD289D5CD87C9C07EF4EBA9E9E1A0FDF7B9E8E7A3DED588D49744 F5AA51D99D4DFFF2C2AB99872D241C29260FA8AD7AFFFEBDEDDB93FBF0AADFD994FEFBB3C7C177 BDB76BF7F1A5EAE496FAF6A9E9E397FAF4ABD5CE86DFD78FEFE79EFCF7B0FFF8B7F7EFB3E6DEA8 F6EFB9F6F1BCF5F0B6F0F0AEECECA3DCDD8FEAE9A2E2DCA3EAE4A9E4DEA1E3DD9FDFDA9ACEC989 FCFBBDDCD69BDAD39CDED7A2F3EBBAE1D9A6E1DCA4DBD896E4E4A5E0DEADF4F0D429250C1F1D0E CECE8DEEEFA3EEEDA4FCFABDFDF9C0E6E1A9E5E0A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFBFEFEF3F8F8E7F5F5E2F6F5E0FBF6DAFBF3CCEEEAB9E3E3ABE3E3AC E3E3ACE3E3ACE2E3AAEBE3B3F8E3C1FFE3C9FFE4CBFFE4D9FFE5E5FFE5E5FFE4DAFDE4CAF0E3B8 E5E3ADE3E3ABE3E3ACE3E3ACE3E3ACE6E3ADF0E3B2F8E9BCFDF2CBFBF6D9F6F5E0F5F5E2F7F7E8 FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA FEFCF4FAEDEAFBF0F0FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FCF3F3FAEBEBFDF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E38DF2E18AF4E48DEADA82EDDC84E9DA80 E4D479ECDD82EFE083E6D77CE1D071D9C664D6C460E7D570F7E782F2E37DE3D572DED06FE1D478 E5D97FE8DD86E9DE8AEBE290EBE392E5DD8CE1D988E5DD8CDFD786E0D788E5DC8EE1D88ADED587 E6DD8FECE496EBE18CEAE087EDE38BF5EA91F8EE94F4EB90F8EF93FCF396F9F093F4EB8CF7EE8F FEF598F0E78CF2E88FF4EA91EEE48FEDE290F5EA98F7EB9AEFE590EDE38CFAF097FBF297F4EA92 F7ED98F0E691EDE38DF6EC95F9EF96F7ED93F0E78CF0E78BF3EA8DEFE689EEE589F6EC95F5E892 ECDC85EAD37BE0C469FFE78CEDCC6FEDCC6FFCE182F7DE81E3D070F3E285E2D380EEE08BF1E38A F2E48BF5E690F1E194F8E6A083742F615214F3E79FF4EC9CEDE38CE7DE7EE4DB7BECE386E6DE84 E2DB88ECE59AF6EFAEF4ECB8E1D8AFBDB6948D8469735C3630130B392613161006020400676C32 DCDD87F5EF96E3D38A4E3D04C2B97AE6E497F0EDA99C9253A89552FFE999E5C76ED8BE63F0DE8E EBE3A6211709746D4CDCD4B9A9A38177734E65623C4D4C2D0706000000003535277B7C704D4D42 0301000000001F1D0C746D6C71676F0904002B2A03C5C97CD6D989D9D993DCD9A0D9D2A21C120B 726631FFFBC2D1AC766B42143F22007262417B775721210F515010EAE499E6DC8FE7DB86EADD8B F5EA9BF2E795EFE794F6EE9BEDE293F0E497F0E498EFE196EFE297F2E297F1E195EFE095F0E196 F4E69BEADA8FEFDE93EAD88EE7D389F5E097EED990EDD78EF1D890EFD68EF2D991E6D98DE7E195 E9DE93E5D68FF0DE98F3E29AEFE196E7D78AEFD789F1CD7FBE8C40EABE72FCDF97F6E699E9DE8F F7E398EABF7C914F14823E0CDDAC6CF8DE96F0E399EBDD94F6EAA0ECEB9DE6E094EDE097FAEBA3 EDDF97E7E193E6E392F8EC9EFCE198FAC281A34E13BA5718FDCA84FAE192E9E38EEEF8A2E1E08F F2E497EBD98DE5DB8CE6E294ECE79FF0E5A1E5E799E2EA97E8E896EFE696F3DF92F5DA8DFDE298 F5D285C7A454C6A252ECCE7CFFE796EAD88AF7E597FAE99BEFDE90E9DB8CEEE192E9DE8EE8DC8C E8E08FEDE593EBE392E2DB8DD3CC85D3CC86D8D18BE8E19BE6E09AE3DD97E2DB95CDC781BEB771 C3BC76DDD791E5DE9AE5DE98EEE6A0F3EDA4EEE89CE9E395EFE99AEDE79AF4EDA4ECE59FD0C986 A9A161F2EAA9CFC885CFC883E9E29ADDD68CEBE396F1EA9CE7DF90EBE293EFE699EEE298EEE298 F2EA9BEFE798F0E898EAE393DBD485C9C176F3EBA2E9E09AEBE29EFAF2B0ECE2A1E2DF9CFFF9AF DEA355E29A42DEA451FFE9B8DFCBB6847568C8C29FF6F9C8ECECB0F1E5A2E6DE9EF6F1B1FAF3B1 EAE39EF0E9A1F1EBA0EAE498E8E295F6F0A3FAF4AAEBE49AEFE79EEDE59CF5EEA6F7F0ACFAF1B3 F2EBB2FFFBC4E8E4ADE4E2AAF9F7BDECEDADFBFCBADBD99CF4EDB8EFE8B1EFE9ADF8F3B3E7E29F E5E09FF6F1B0DCD69BF6EFB9DFD7A6CCC495D8D09DE9E5A7F0EFA9E5E5A3D8D6A6E5E2C66B674D 05020086864AFEFDBAF1EFAAEFE7B1F3EDBEF0E9BDFFF9CDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFEFEFEFCFFFEEEFBFAD8E9E9B5E1E1A5E2E0A4EFE0ADFCE4C2FCF1DEFAFBF1 FAFAF0FAFAF0FAFAF0FAFAF0FBFAF1FEFAF4FFFAF5FFFAF5FFFAF8FFFAFAFFFAFAFFFAF8FFFAF5 FCFAF2FAFAF0FAFAF0FAFAF0FAFAF0FAFAF0FBFAF0FCFBF2FEF2E1FDE5C5F1E0AFE3E1A4E1E1A4 E7E7B7F9F9EEFEFEFCFEFEFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FFFDEDFCF0D7EEBFB7F1CBC9FBF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFBFBF4D5D4EDB9B9F9E5E5FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E189ECDB82F1E086E9D87EEBDA7F E6D679DFCE72E4D375ECDB7DEFDF81F3E180F5E17BE3CE68DFCC64E5D46CE8D870EBDC76F0E37D EBDE7DE6DA7CE7DC82EAE089E6DD88E6DE8AE7DF8BE5DD8BE5DD8CDDD485EAE194EEE599E9E095 E6DC93ECE29BF1E89EE6DB89E5DB84E9DF89F1E78FF2E88FEEE48AF4EB91F7EE92F1E88BE9E083 EFE689FAF194F2E98EF4EA91F5EB93F0E691F0E593F4E997EEE391F4EA95F0E68FE7DD84EFE68B F6EC95F5EA98F9EF9BF6ED97F6EC96F1E78FF4EA90EEE58AE8DF82F0E789F4EB8CF1E88AEBE28A F6E994F1E089E0C770DFC268F9D97FC8A549E5C568E3C869D5BE60E0CF6FEDDF81E5D886EFE18E F2E48CF2E18AF4E38EF5E497F9E9A3D0C17D2D1F00D4CA82EDE69AE8E08DE6DA7DE8DC7DECE285 E7DD82E4D982E4DB87EBE392ECE498E2DA92EEE7A2FFFAB7CCB073AD8750F2DEB38078590E1200 3A3F16C8C977F0E88FF5E49E786631827A3CEFF1A3DFDEA3CFC5956A5625FFE8AADFC273E9D074 FBE990F2E59F7C733BBBB482F1EBB0EFECACF4F0B9FFFECBE3E0B14B471E49462E37341C000000 1A17092F2B1D3E3B2C1A170B080300261F09807B4D676521D7D58AF9F6B3F4EDBDEBE0BD55492F 342A0AEBE598EAE383FFE8A4A7825B371B00352605B4AB8A1C130F807836FFF3A6EADA8EF3E68D EAE08BEFE597F3E898EEE293F3E899EADF90EFE396EFE497EFE397EFE399F0E399EEE198EDE098 EAE195EEE799DED688CEC577E2DA8CE8DF92E7DE91E9DE92EADF93EEE296EADF92EBDE92E5E192 E9EA98EBE797E5DB8FEFE198FBEDA5F0E297EBDA8EFAE298EFC87DAB772DF3C47DFFDB9AF3D18D FEE9A1E1C67D84541486460DE3A767FFDF98ECE092F2F0A0E8DC92E3D58CE6E99CE5E196DDD088 DECA85DBCB86E6DD94E7E396E9DE91FCDF96CB8F4D994107BD6423EFBE73FCDD90F2E69AEAEB9F DDDB91E8DF94E6D78BE4D889E8DD92EBE39CEFE8A5E2E799DFE895E3E895EAE896EEE495F0DE90 EED78AFDE496FAE394E0BF71B69446DDBE71FFE898FDE494F3D989F7E191FBE796ECDC8BF5E799 ECE192EBE393ECE495E8E192E3DC91D6D28BDDD992E4E099E1DD96DFDB94DEDB94D8D48DDAD68F D9D58ECDCA83D9D58EE7E19DECE59FEFE8A1ECE69CEBE597E9E493DDD789DED98BEBE49BEBE4A0 F0E8A9BEB578AEA666C4BC7DCEC684F1EAA4E3DC94EEE69DFCF4A7F3EB9EF1E89CF0E79CEDE29A EEE299DDD588E6DD8FEDE495EEE596EBE293D8CF81F0E79ADCD389B2A861F7EEAAEEE3A3F6F2AC F4E79FEBB06CD99645DBA952FFFECB8F795E15000046381D9C9964BEBE88FBF7BEEDE8AEECE7AE EBE5A9F2EDADE3DE99E8E199EDE79CE8E194FFFAACF7F0A3F8F0A5F4EBA1F2EAA1F4ECA3F5ECA5 F7EFADF3EDAEFBF7BBE6E3ACDAD8A3E8E7B5F4F4C3F9F8C8EDEAB9E2DAA8E9E2ACF2ECB0DCD797 EAE5A2F7F2AED9D492B2AC6FE8E1ABF4ECBCC8BF93EBE3B0E3DF9FECEAA2EDEDAAF5F3C3FEFAE0 DBD6BF1F1C0A504F29F3F1B0F1EEB0F0E8B9E5DEBBFBF5D7CEC9AAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFCFFFFF2FAFAE2F0F0CEF6EEC9FCEDC8F2EDC8EDECC6EDECC7F5ECCEFEEFDDFFF8F1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F3FEF0E0F7ECD0EEECC6 ECECBBEDEDB9EDEDC6EDEDC9EFEFD0F9F9ECFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFBFAF6D6CCECA696E2726DEA9393FAD7D7FFFBFBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBFBFEEAEAEFA6A6E27070E99797F3C8C8FCF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDE83F5E488FEEE91ECDC7F E2D273F1E182E4D475DBCB6BDECE6DE2D272E2D06BDDC75FE1CC63EDDB6FEDDC70E7D66CE4D66C E5D870ECE07DEFE484EEE387EFE68CE7DF89E8E08FECE493ECE493EEE695EAE291EEE695EEE695 E6DE8EE2DA89E7DF8EE7DF8EEBE18CEDE38EF4EA93FCF29BF9EF98F0E68DF8EE95F7ED94F6ED92 F6ED91F9F094FCF398FDF499FBF198F8EE96F2E893F2E795FBF09EF9EE9CF1E792F7ED96F7ED95 EFE68BEAE08AEFE492F9EE9CF8EE9AF5EB97EEE48DEEE58AE8DF84E2D97CEDE485F7EE8FF2EA8A EBE189FDF19BFEEC95E9D079EFD47AF5D97FC9A449EBC96DDBBF61CEBA5BE7D877E3D678ECE189 E9DC85EBDE82F0E184F1E189F0DF8DF5E59CF7EAA54A3F00908B43ECEA9FE3DD89E4D77AEFE285 F5E790F1E290ECDC8EE7DA8CE2D685D9CF7AE1D87DE7DF7EFFFB99C2A049B07F3AFFE3A8BEB590 0508007B7E51DADA8BEFE68DF9E6A1C0AF7C4D470FE3EA96E9EBAAEBE4B368582BCCB07AE3C77C E1C76BEFDD80FDF1A5A2995E776E32EBE699DED986E2DC96EEE9A8E9E3A6868047F2EEBAF4F2C3 B8B489DBD8B095916DBFBC97C3C19CC2BD92F4EBB4FEFEC3B3AB66ADA462FFF4BED1C49E3F3011 281A0BC3B97CF9F49CE7E279FFEBA3CAAC862109003B2B098273541503009C8A47FFF4A7DFCB80 E5D77BEBE28AE4DD8FF3E599EBDC90F0E297EBDD92F1E49AF2E49BF3E79DF3E79FF2E69EEEE49D EDE39CEAE198ECE397D7CE81BCB266E3D98CF3EA9DECE396EAE194EBE496EEE799E8E193E7DE91 E5E18FEAE895EFE797E8DC8DEADA8FF1E297F0E297EDDE93FFEDA1D7B469A5762EFDC783F2BB80 FFE9AEDEB574885E197E4F0CD3A25CFEE69DE5CF82EFE898E3E091E9DE94EEE59AD9D88DDDDB91 D0C880C9BE7AD0C681EAE099F4E6A0F5DB93ECCA8581430BB56427E8A65EB28938D3B067F8E09F EDDFA1EAE3A3E2DF96E2DB8DE7D889EDDE92EAE09AEAE5A1E5E69BE6E797DFE090D1D080CDC978 D6CF7EDFD587E5D788F8E799E7D084E2C97CBDA052BD9C4AF6D684FFEE9CF6D987EFD585FBE698 F8E89AF3E697F6EDA0EEE89BDDD78BD3D086D4D088E1DD96E6E29BD6D28BCECA83CBC780C9C57E DBD790E4E099D9D58ED9D58EE3DD98CBC47ECBC57DE8E296EAE496E6E190E5E08FD8D284E3DC92 F5EDABF3EAAD81783C231A04CAC185C0B87BCDC583FFFAB6E6DE96E7DF96ECE39AF0E69EE9DF97 EBDE98F5E9A1D8CF85E1D88DE6DD8FE7DE8FEDE594E0D887E3DA8AEDE495D0C67BF8EEA7F0E69F EFE9A0FCEBA5F7CF95BD8434542D02AF9B63C5AC8A65461F563D01190F000B0A014B4B1ECCC898 F8F3C3F6F4BFC5BF85E2DB9CEBE39EE3DC94FDF7AAF3EC9EF0E79AEAE193E7DE91F7EFA7F0E89F EAE299E7E099EFE9A5FCF8B9ABA96EC8C593F4F2CADEDCBB9D9C7FC8C4A2FFFCCFFBF4C0ECE5AC ECE7A6E2DD99E4E098EDE8A5D2CC8FC9C38CCFC799A1986EF0E8B4E9E5A5EEEDA2F5F6B2E9E7B7 E9E5CBFFFFEC5E5B44474621FEFEC9EBE6B0F8F6D0FFFDF1AAA19B181110FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFBFDFDF7FCFBEFFDFADFF6F3C8E6E4ACF0E1B2FEE5C6FEF5EAFDFDF8FDFDFAFEFDFAFFFDFC FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFCFEFDFB FDFDF6FDFDE6F7F7CEE6E6ADE1E1A3E3E3ABF1F1D5FAFAEFFBFBF4FCFCF7FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF7F7EDA9A8DD5655D72F30E36161F5B5B5FEEBEBFFFCFCFFFFFFFEFEFEFCFBFBFCF8F8 FDF6F6FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDF6F6FDF7F7FFFAFAFFFDFDFFFFFF FFFEFEFEF1F1FACCCCE97879D83334DA4646E89090F9E3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D276DACB6BEBDC7C EDDE7EF1E180E9D978EBDB7BEADB78EEDE7CF0E07EEDDA73E0C95FCEB94DE0CB5DEFDC6DEDDD6D E9DB6EE2D56BD6CB64CDC25FD5CB6BEBE185EAE28DE8DF91E7DE8FE4DC8BEAE290EFE793EFE791 EDE68EE6DF84E4DD82EAE486E9E386E9DF8AECE28EF4EA95FCF29DFBF19BF4EA93FAF099FAF097 FBF198FBF198FBF297FBF297FCF398FAF096F8EE95F0E691EFE491F4E997F6EB99FBF19CF7ED96 F4EA91F6ED91F4E993F0E596F0E593EEE390F5EB96F5EB93F1E68EEDE489E7DE80EEE586F9F190 F2EA89F2E890F8EC96F2E08AE5CC75FDE187FEE086F5D277F9D77AFADE80F1DE7FE8DA79EDE07F ECE186E5D97CE8DC7BF0E280F2E385F5E58FF1E295FFFAB4877F404A481BEAEC9FE5E090E7D888 F2E291F4E48FEDDE85E7D97EECDF80F0E586E2D576EEE184E8DA7FF7E68EBC9239E8B35DFFEAA1 E2D6AC101103292E089E9C51FCF09AF0DC99EFDFAE625C1EC7D277D8E18FE4E2A0AB9D6680682B E1C676EDD574F9E78AF9E9A2E8DCA66F642EDDD689F7F09AEEE798E0D88DF5EEA49A924BB5AD69 F1EAA9E4DE9FF9F5B8939055939257E2E0A8EAE5A8DFD492E1D593B4A8698E7F45FFF0BF6E5C31 54451FC7B782FFF5B2E0DA84E1DB7CEBDB98A7926D0B0000847453614E300F0000BEA55FFFF0A0 F0D78DE0D172EAE489E9E394F6E79DEEDC94F4E499F0E096F4E69CF2E49BF5E89FF4E8A0F4E8A0 F0E69FEEE4A0EEE09AEDDC92EEDB91FBECA2FAEBA1E5D68BEDE094F0E397E8DD91E8DE91EAE094 F3EA9DEFE795F0E592F5E695F2DF91EEDC90F0E095F0E499F5E79CFFF1A6A3863CB18C45FFE5A2 FFCF97CF8D587D3C05915519E1B671FFEC9FF7EC9AE1D785EDE594E7DE91F3ECA0E3DC91D6CD84 D8D38ADBDB91E6E69FDFDD96EADD99ECCF8DFFE1A2C58C4C854503C98743FFE697D7C26CAC8B46 D1AC75F6DBA8ECE3A8E6E6A0DDDA8BE5D687F3E095EDDF98E1DE9AE8E097EDE295E2DC8ECFCB7C C9CA79D5D986D2D482CCCB7AE5E191D1C879EBDF92F6DF93D1AB59AF8733D4AF5CFEDE8CFBDE8D F4DD8DEAD88AE8DA8FF3EAA0EDE69CDBD68DD7D38BD9D58EDBD790E2DE97E5E29BD8D48DCCC982 CECA83C8C57EC4C079CFCB84E0DC95E9E39ECBC47ECBC47DEEE89CEAE593DDD886C5C06EDDD78A EDE69CDCD493E0D79AAAA1684A4011AEA56E4B420B413904DCD592F8EFAAEAE29AF1E89FF3E9A2 E7DE97E3D791EADD98E2D790E6DB94EAE095EBE193EEE594E0D786DFD785F4EA9BEEE597E9DF95 EFE59CEBE097FDF4B0D69E6BB280364427033E2E1AC8AC82B38B57FFF7A9D2C3898E8D663C422C 0D0B003F38139E986CC1BA85E8E1A7E4DD9BDCD58DF5EDA3EFE89AF2E899EEE596EFE699F7EDA6 AFA75FB2AA60E9E497F2EEA3D1CE88A2A164D0CF9E9895721E1C0A0000002C2514AFA77EF7F0BD E4DDA4FAF5B4E8E39EE9E59DD5D08BD0CA8DE8E0ADFAF1C4CFC69CDDD5A1EBE8A3E5E498F3F4AE F4F2C0FEFCE4DDD8C6161201787651F8F4BEF7F4C5EAE2C16B655716130A3D3A2BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFF9FEFEE8F0F1C9ECE6B6F7E5BAFCE9C7F5F1D7F9F3E1FFF5EAFFFCFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFF9FDFDEFF5F5DFF3F3DBF2F2D6EAEAC1E5E5B2E6E6B5EFEFD1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDF5F5EA9292D83335D83839DE5656E68181F3C3C3FEF8F8FFFFFFF9FBFBEAF0F0 EBDBDAF0CECEFBEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F9F2D1D1F6D5D4FEE8E8FFF7F7 FFFFFFFEFCFCF8DADAE99191E06262D94040D62B2CE47373F8DADAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D97ADDCD6D EADA7AE4D473E1D16FE0D06DE1D26DDBCC67E0D16CEBDD76EBD971E4CF64E6D064F1DD71EAD76B E6D669E3D568DBCF64EBE077EBE17DE0D676D8CF73D9CE7DE6DD92F0E79AEFE697EBE391E2DB86 E8E289E7E184E2DC7CE4DE7CEDE884EEE885F2E891EFE492EFE492F6EC96F8EE99F3E993F9EF99 FDF39EFAEF99F0E68EF2E890FBF199F0E88CF6ED93FCF299F3E994EBE18DF0E593F9EE9CF8ED9A E8DF89F0E890F8F197F6ED96FAEF9CF4EA96F1E792F4EA94EDE38BEDE38AF2E98EEDE486EEE587 F5EC8DEBE284EBE188E8D983E5D27BE3C971FFE68CFDDB81FFDF85FFE185EDD375E0CD6DEBDE7D F1E785EEE282E8DC7AE9DC78E6D874E8D978F3E58ADCD07EEEE69BC3BD791F1F00BEC078E8E39D EBD997F3E198EDDD86E8DB76E8DC6EE6DC6BF1E679E8DB79ECDD88ECD992F4DA9EA8792AF3BF62 FFED9AF1E4B23B381E181804676522FCF2A1E7D592FFF4C26E6A2EA0AA54C8D371DFE189DDD28B 6C5712BFA554FAE487F4E28BEDDF9EEBDFB07B6F3FB9AF6BE4DC8AEDE594DED685F0E897BCB365 786F23E7DE93E9E198E0DB91CCC9807C7930E8E79ECFC982D7CA86E6D799D5C48C9F8E58EEDCA5 D0C086E9DC9AF2E4A0EEE29AE7DC92DED48CFFF3BB827350281906E2D4ADB5A081230500694B0F CAAB5DFFEFA7FAED92F3E58DEEE397E9DC93E5D68FF2E49CEFE399F6EBA0F3E89EF5E8A1F3E7A0 F4E6A1F0E39EEEE19EF3E09CFDE69EF2DB92EDD88FF1DC93E7D38AEAD78DE8D78CE8D98EEFE095 F2E599FBEDA1FBEE9FF7E997F3E595F1DE91EDDB90EEDD94EDDD96F1E097FFF0A79D7D37D3B46F FFE2A0B68045803F09BC723BF5C184FFE49EF1E594E5E68EEAE994DED485E5D88DD3CF82D8D588 D4C57FDFD890DBE097DCE59DDEE19CEEE39FFAEAACFFC78EA35A20A76425F8C980F4E08DF8F09C CCAD6A976D39E4C291F8E9AFE2E099D8D485E0D082F7E297EDE09ADAD995EEE19BF2E097E6DB90 DBD488D3D385D6DB89DBE18FDBE190C1C575D0D082E8E598EDE092EDCB78DCB561A88331BC9948 FBDB8DFBE699E9D286E1D086ECE299EAE39AE1DD96E0E098DFDE98E7E69FDAD992DFDC95E0DD96 DCD791E2DD97D3CE87C3C079DAD68FE2DF98E3DE96D8D189CCC57CD5CE83DDD68AD8D283D1CB7E E9E297E5DE96CEC783E7DFA1E0D69CB8AF78D8CF98A39A646C6331B5AD6CDFD692EBE29CE7DD97 EAE099E5DA97D7CC89D3C584E3D592E7DA94F0E49AF2E699EEE294D8CD7CF0E596F7EB9DF7EB9F E3D78EF2E59DF9ECA4E6CF8EB28151C499589F85362312006B4D23C09860F9D989FBECB1F3F5CC EFF7D1C5C29D756E4C3029008C8550ECE6ADF3EAAED8D18EC0B76EECE596E3DB8BEEE495E8DE94 F2E9A4DAD18AE3DB90F1EA9FF0EDA1DFDD96E6E6AAADAD800806000401000000000801001F1703 B8B184FCFAC4E4E09EE2DF99D2CE89D5D190E9E4ACF2EDBC7872442017089C9661FEFEB9E3E19B FDFDC0F2F0C4A5A2862E2A230F0C02B5B289FEFDD3E8E2B94841310000003E411AE5E5BDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC FFF6EEFBF4DBF4F3C8EBECBBECE7BAF7E7C6FFEEDBFEFBF6FEFEFDFFFEFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFEFEFCFEFEFDFCFCF5EFEFD0E7E7B4E6E6ADE9EAB7EFF1CF F8F9E5FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDEBEBE98484D82C2DDC5757DD5D5DDD5B5CEDA2A3FEF5F5FFFFFFF6E9E9 E0B1B2DE9192E48787EEB1B1F7DADAFDF6F6FFFFFFFEFCFCF9E4E4F2C0C0E68C8CEA9494F4B6B6 FCE3E3FFFFFFFEFCFCF3C7C7DF6262DD5C5CDD6060D72B2BE4696AF8D8D8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D97A F0E080F5E585E9D978DDCD6BE3D46FDDCE69E5D66FF9EB83D6C85FDCCE65D6C45EE3D16FEDDA7C F6E587F8E889FCF08DF1E57FECE07CEFE385F2E690EEE291E8DD90E2D68AEADE92E3D78BEBE091 E7DC8DE6DB8BE6DB8BE3D786E8DC8BF2E795ECE18FF1E996F3EB98F0E895EAE28FEEE693FBF3A0 EEE693F2EA98F6EE9DF9F2A1F7F09FF3E994F4E98FFCF197F3E88FEFE38BF6EB94F8EF9AF5ED9A EEE695ECE594F8F1A0F9F2A1EBE48EE9DE84F1E68BF7EC91FEF399F6ED92EFE58CF3E990EFE88E EDE68CF2EB93F5EC94F2E288FBE68AD8C164EFD67AEBD276F0D77BF1DA7DEBD879E9D97BEDE080 EBE281E7DD7CF5E589F5E387F2E187EDDC82E9DA7FEBDD84E8DD84DCD37FEBE4963F3916746E3A F0E7A7EADA8FEBDB86F9E88CF7E884F9EC87E2DA76D6D071E6DC86DBCC7DFBE199EFD7909E7929 F9D77EF2D985FFF5B57A6F452A2316736D3EC0BC7BF4EFA3F6EFA89590536C662BE6E992E7E48F F3E4A49D864E937A40FDEFACF5E6A2F2EAA8EFEAAB9A94549D964DEEE596EAE393EDE697D8CF85 ECE49B746B26DBD290EDE4A1F9F0ADDAD38D79722BE6DF97D4CC81D9CF87EAE09BE1D497A4955A E2D497D9CC88E8DE96EADF94E9DF96E3D993ECE1A4E5DCB6403D1E504C29F4EEB7B6A882281000 876B38694704AE8741FFD38EFFDC99FFDD97EDE89CD1D585BABD6EE1E294EEED9FF3F0A3EFE89C F3E69DECDA94F4DF9AFAE19EEFD791F1DD94F8E49BF3E097F0DE94EFDD93EAD88EEDDB91F5E399 F5E399EFDF94F2E196ECE799DCE18FDADF90E9EB9FEDE8A0E4D591F1D494FFDA9EFFE2AAA5692D DB995C9C5C1F6B4102C6A15BFEE59FFAD890E5CE82F3E598EAE393E2DC8DDED88AD4D185CACB7D CECB7EDDCE82D4C780E4DB99F0E8AABDC17FDEDF9AFBE9A4D48650A94211D98850EEE896D0D784 E8DC94F7E19FCDB272A38545D5BE79F4E199ECDC91DCCF86E5DC94E6E4A0D8DB97D9D68FE4DD95 F4EDA5D9D58BDDD98FDCD88CD9D689D6D385D0CD7ED5D283DDDA8BE0D989C9BE69EADA85F0DA8A DABE70C2A058F9D78FF6D690EBD28CECDA95EBE39AE3E197DCE198D7DE9AD4DA94DEDE99E8E29C EFE49FF2E49EEEDF9AF1E49FF2E9A4E5DE9ADDD893DAD686E1DA86E7DD90E4D696E7D79CEFDEA7 EADAA0E8D99AE7DB97E3DA97DFD996E0DB99DCD493DFD597E0D699ECE2A7C6BC7FE5DC9BEDE49E E0D890E3DA95EAE1A1E5DBA2E0D49CDFD491E4DA95E2D893DDD38EE3D994DDD38FE3D895EADF9D EFE4A4EFE4A6EBE0A2EDDEA2F9E5ACDEBC8AB48E5AD9B581614223210600897346EFE5ABDEDD9D E2EAA5EDF8AEF4EFB9FFF9C5E4DC98F3ECA6DED598EBE0AFC9BF8CB5AE6AE2DC8AE0DC85D9D387 F1E9A9F5EFB5EDE59EEFE699F7E9ABFBF0B3FEFABFFBFACD58583E0D0F07999A6E9190652D2712 010000ADA98BFCFACACFD08FBEC17ECECF95DBDAADDEDCB74A492D0405003B3B18DEDD94DFDC96 FCF5CFA49D8A373224000000040900555A2FFAFADDB9B7A03A382A191801B4B289E0E0B4D8D9AD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC FEF9F1FFE9D2F4E4BAE9E5AEEEEFC9F8F6E5FDF7EEFFFAF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFAF1F8F8E2F6F6D0EBEDB1 DEE298EDEFBAFFFDE5FFFEF6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFFFDFCFCFDF5F5FCD9D9E97879D92F30E17878DF6B6BDB4646E98C8DFCF1F1FDFBFB F4CDCDDD5E5FD84041DB4344DF6060E99B9BF6DFDFFEFFFFFBEFEFEEB0B0E16D6EDA4949DC5152 E37676F0C1C1FAF7F7FDF8F8F2B9B9DC4445DF5F5FE38382D93535E36767F7D3D3FEFFFFFCFCFC FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFFCFCFFFBFBFFFAFAFFFAFAFFFAFAFFFBFBFFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DBCB6BE4D474EDDD7CEBDB79E5D573DFD06BE3D46DDACB63DCCE65D2C459F1E37AF9EA86EFDF80 EDDC83ECDB84D4C56BD0C264D5C965DACE6DDED275E7DB86F3E699EEE196E6DA8EF0E498E5D98D E4D88CDFD387EBDF93E4D88CECDF94F4E79CEBDF93F1E698ECE493EDE592EEE693F1E996F2EA97 F0E896FCF4A2F8F09EF0E897ECE393EDE595F3E895F2E68CF6EB90EEE389ECE187F6EB94F9F099 EEE693EEE796F2EC9CECE798EFE99BF3EB97EFE587F2E78BF3E88CF9EE93F4EB90EDE389EDE38A EAE28AE7DE89ECE48FEEE590F5E186EED476D8BE60FFEA8EEFD77AF3DD80ECDA7CEADB7CECDE7F ECE282EFE686F1E889F8E68AF2DD86F0DB86F1E08CF4E48EF3E58CE7DE81E8DE86F0E898887E43 281D00D2C78BEFE291E8D881FBEA8DEBDB7AF1E483EBE387D9D37DF1E898F3E094FFE89DE4BF71 B18F3EFCE68EEDD882FAE8A0AF9F6B3A30106D653F98965CE1E092E7E493D3CD8C5B501DEAE699 E1DC8CF5E7A8BCA4716D5422F8E5ACEBE2A0E4DE9BEAE7A1D2CD86837B32EAE195E6DF90E0D98D EEE69DEEE6A079702FA3995AEEE4A7DFD695DFD592645B17CFC77EE3DA8FDDD488E2D891DFD594 9B9051CCC280E9E099F1E89BE4DB8EE1D78EE0D691EAE0A5DBD5B51917007C7C48FFFFC8A5996F 362307F0D9ABC6A666734B067F4D11D1A365F4D492FAE79EF1E59BEDDF96F8E9A0EEDD95F5E39B F4E29AE7D88FECDD94EBDF95E9DF94EBE196E5D88DECDF94EBDE93EBDD92E5D88DDDD085E2D58A F1E499F5E89DF0E398ECDF94ECE299EEEAA0ECE9A0E4E29AEBE29DF7E0A2FEDAA0FFE4AEE7A772 944E188D480FA36628DCB972DCC57AF6E69AFBE99CDECE81DACD7FE7DB8FDFD98CE0DC8EDBDA8C D8D98ADDDA8BDED182E9DA94DACC8CD9CD91C4C484E5E49FD2BA75A14F18B54A1AFDB87FDCE391 D0DF8ED9CC86EBDA95EFDA94BBA15AB1964CE1C67DF4DD95E2D38BD7CE87D6D48EDBDC97D1D28C CECC85D0CF87C5C179D9D58CEBE59CD7D086D4CC81CCC579CFC87BD7D183D5D281C8C572D0C876 EBDC8CEFD78CDABC74A3823BBF9E59F2D791EFDC94D5CA81CCC87DCCCD85D4D994D4D794E2E09C E3DD96E7DA94E8D993E4D48EECDE99EDE39FE2DB98DFDA96E6E193E6E08DE3D98FE8D99AF1DFA4 EBDA9DEDDC9DD9CB87D9CF88E1DA94D0CB8BC4C081CCC679ECE696F3ECA0DED78DE1DA8EEDE796 ECE790D9D47CD9D37FEAE397F9F1AEF1E7ACEBE4A7F1E7A8E2D799E5DB9BDFD595DACF8EE9DE9D E4DA97E4DA98F2E8A6F2E8A6EFDDA1FFE9B3E4C68E875A1FDFB073DFB67B5C381269541AADA368 D8D494DAD992ECEAA0F3E9ADE9DDA0FFF8ABE1DA8CE5DC9AEEE3AFD9CF99D4CC89E3DE8AD2CE76 CBC77AF3EEADF1ECB2EDE69CEEE393EADAA0E7DA9EE9E4AAF6F5CD2B2B1B2B2D17F5F7C3F0EEB5 D0CAA61C15136F6B4DE1E2AECBCD8CCDD292CACC9BD3D2B185846D030300707149E7EBB4E7EAA0 F8F5B3D3CDB21F1615000000282913656B3AE9EDC693957D0907002E2D21B5B491FFFFD3EEECB3 E2E0A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE F7F6E5F2EECDFCEAC5F6E9C0EDEBC3F5F6E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF0 F4F6CFE5E7AAF0E9B5FFEFCCFFEFDAFFF6EDFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8F8E8E7E7E5D6D6F1BCBCE56A6ADA3334EB9595E77E7DDC3F40E17C7DEFE2E2 F3E2E1EDA9A8DA2F30D82E2EDB4647D93838D96666DEBBBBE9EBEAF1CCCCE47C7CD43A3BC95051 CD4748D44647D18E8EDAD4D4F0E5E5F4ADAEDC3738E46B6BEDA2A1DC4041E05B5BEEB5B5EAE0DF E4E3E2F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFF4F4FFE2E2FFD2D2FFCECEFFCECEFFD0D0FFDADAFFEEEEFFFAFAFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF9F9FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEBDB7BE6D677E3D370DFCF6DD9C967D9CA65D9CA64D8C962E0D369CBBE54C9BA53D8C865 F0E081F6E58AEDDC84DFD075DCCE6FD5C965E7DA79EEE285EDE18BEDE093E5D88DDED287EDE195 EADE92EFE397E7DB8FEBDF93E4D88DEEE296F0E498E4D88CF1E597E9E190EBE390EEE693F1E996 EEE693E8E08DF5ED9AF1E994F4EC97F5ED99F2EA97F4EA94F3E78CF5EA90F0E58BEFE48BF5EB94 FBF19CEFE794E5DE8DF1EB9AF6F1A0EDE799EDE590F4E98DEFE488EBE085ECE187EAE286EEE48A F3E990F0E68FECE28DEDE38EEBE08AEED77BFADD7FE2C768F3DA7DE5CC6FEDD87BECD87AEEDC80 EBDC81E7DB7EE6DB81ECE084ECDA7EE8D47CE2D07AE8D682F0E18BF1E38BEDE288E8DD86EBE394 E2DC96281D049F9454F4EA9DEADA87F0E086DCCD6EE1D574E5DD81D6CF78E9DE8EF1DC8FFFE194 CFA657D0AC59FFEE94ECD87FEBD98EE3D49B3127019790688F8C52E0DE8FE7E493F3EEAB9A905B D7D48BE5E094E2D593E5CF965B430AF3DFA2F1E6A1E5E098E1DF96E2DD966F6721D5CC84F4ECA0 DBD38AEFE69EEFE6A1A89F5C776E2EEAE0A2DBD291F5ECAA6C631EBAB16BEAE296D4CB7CDED48B F0E5A2A69B59B0A663E8DF96EAE193E9E091E6DD92E4DA94ECE2A6CFC9A61A1700A3A35DEEEBAB 9F956B3C2A0DF2DCABFFE9A7E2C177A37A3A7646078F5E1CC08F4FFEDA9CFFE8ABFFDB9DFFD596 F8D291F5D995EBD890F4EA9FEFEEA0E1E897E2E495E0D88DE3D88EE2D98EE5DC91DFD489DCD388 E3DB90E5DA90E3D98EE4DB90EDE196F3DB97FDDC9CFADD9DFBE5A5FFF2B2FFE4A7E8BD84AE7941 83491283490ED39D5DFAE29FFEE298D6C377E3CF83FFEEA1F7E89AEBDE90E2D68BE0D78AE5DE90 E5E091E3E091E8E493F8EE9EFAECA4EADD9DEDE4A6E7E1A2EDDD9CB2874992430BDF8C55FFD292 D0D183DFE899E4DA92D9CB84EDDC93F7E197BFA65CAF954BECD48AFCEAA2E5D790E1D690DBD690 E9E7A1E2E29CDBDB93D5D28BDFDC94E9E59BD3CC84DDD78CE3DD91E6E093E2DC90D9D384D5CE7D DFD887E1D485DECB7EFAE298E0C67DB69C53B59E54C2AF63D9CA7EE2D689DED68DDAD490D2CB88 E0D892E0D890E0D68EEEE39CF1E69FE8DF9AE5DC9AE5DD9CE7E2A2E3DD97E3DC94E2D995E7DD99 F3E69FECE093E9DE8BE3DA87E0D98AE4DF9CE1DCA4D4CF99D4D181FFFFABEDE991ECE792DCD97D DDDA79D3D16BBCBB55DEDB7BE5E18CEEE79DFAF2B2D5CC94D7CD94EAE0A4E8DEA0F4EBAAF5EDA8 EDE59DE7DF95ECE598E7E090EAE293FDF0AEFFE5AEF2C788915B12E9AF5EF7D481A57A27B79B4E B6A15EE4D598FFEFB9F3DFA7837737E3DB93E8E095EBE399F3ECA5DAD292F2EAA8F6EFA8E7E193 F1EC99F2EE9EEBE79DE7E1A2E5DF8FEDE38EF4E4A4F5E8AAF7F0B3E9E7BA242313282915DFE1A7 D9D49CE4DEB3312D263F3E11B2B478A6A866CACE93AAAB7FFAF9DD4B4839100E004D4D2BA3A577 EFEEB2FFFAC2ECE8CC4E4739100E04AAAB86FAFDD5C4C7A50B0D02403F2DDCDCC1FDFDD4E9E8A6 EEECA3E8E79EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCFDFEF7 F7F8E8ECECC2E7E6ACF9F7D0FDFCE6FDFDF4FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFDFEFEFAFCFAF0FDEDD7FFE1C0FFDEBBFDE9D0FCF7ECFDFEFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2D6D4D4CEBBBAE4A4A3E06161DC3E3EF4AEAFEF9595DE4B4BD97677 E0C5C5E4B1B0E37D7CDA3B3CE06262E58E8DDF5353D15354C68C8CCEABABE29191DE5D5DD34445 C59595CB7777D14445B76363B89E9EDFBBBBF29A9ADD3D3EEB7F80F7BDBDE15152DF5455E59797 D8BDBCCFCCCBE9EAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFFF1F1FFE0E0FFC4C4FFABABFFA5A5FFA5A5FFA7A7FFB7B7FFD5D5FFE7E7FFF5F4FFFDFDFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF7F7FBEBEBFBD0D0FBD5D5FBEBEBFDFBFBFFFEFEFDFDFDFAFAFAF8F8F8FBFBFBFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEFDF7EE6D674E5D573E8D874E3D46FE9DA75E3D46EE1D26BEFE079E5D66FD5C65F DDCD6ACDBD5DCDBC61DECD74E1D277E9DB7BEADE7BE7DB78E8DD7FEFE38CF7EA9DF5E99CEADF90 F1E696EEE393F2E797E0D586EADF90F3E999F2E798E9DE8FEDE292F3E899EFE796F4EC9CF5ED9C EEE693EBE38FEEE691F8F19BECE58CF2EB92F7F096EEE88DEAE187F1E68CF4E990F5EA91F0E68D EFE58EF0E692F1E996FDF6A4F4ED9CEEE797F4ED9DF6ED97F1E68BEDE288EADF85EADF85EFE48B F0E58CF4E990F5E993F3E791F4E892F0E38DF3DB7FEDCF6EF3D677FBE184EBD275F1DC7FF0DB80 F2DF86F1E188ECDC86EADB84ECDE85F0DE84F6E48BEDDB85E9D884F3E48FFAEC94F4E98FE4DA80 E0D886FFF8B273692A3A300CCFC77EE5DA8BE1D47FE9DB7FEEE486E6DE82E0D983EBDE8CF4DD8E FFDD8FC39747D9B45FF7DF85F0DC80EBDD8BF9F6B63E34187A734C8A884EC9C878E8E693DFD892 978C548B8345FAF1AEE8D794EFDA98624B0ED4C07FFDF1AAE5E096E4E297E9E49C9F95549D9251 F8F0A6E3DB92E0D88FEBE29DD6CD8A675E1CE3DA99E6DD9CF0E7A57C732E978E49E9E295D5CD7B E0D78AF4EAA4B8AE69A09650E6DD91E6DD8EEFE697E7DE92E5DB94F6EBAE9389641A1504BEBE74 ECE8A8ABA2773C2E10C5B481F8E6A0F1D98BE6C582D9B471A06D2B7E2F00954311CE8750F8CD92 FBECACFFE3A0FEE8A2F4E29BE9D790EDDB93EAD790E0CC86ECDA94EAD792E8D691EEDC96EDD995 EFDD98F5E39EEDDA95E5D28DE7D58FF0DB97FED495FFD398FED297EEC185C69C5F91652C78470D 79450C7F4D11BF9251FFF3ADFEE49DF3DD94FEEDA3F6E69BE6D78CEADC91F4E69BEBE191E9E091 EDE495ECE595E8E090EBE493EEE696E4D98FE8DB98ECE3A3F9EBAEF2CF94AA6A32A1551BFFC98A EDD38ADDDB8EDADC90E5E096E4DC93E2D489F7E498F8E297B1984CBAA056E9D187FDE99FEAD78F EEDD97F1ECA5EBECA6E7E7A1EBEBA3ECEBA4F4F2A9E0DC93EDE89EF2ECA2F1E9A0ECE39BE2D98E EDE394EBE192E0D586E9DC8ED2C375D4C476FEEEA0D2BF72AC994CCDBA6DFBE99BFDEBA1E2CF8A D2C07BD8CA82E2D78DE6DE93E0DA8FD7D088DFD892EDE8A5EDE8A8DBD295CEC78AE0DA9DEAE2A3 E5DD96EBE395ECE68EEEE98BE3E082EBE894E8E4A4E2DEAFFBFAD3EAE4A768611E928B45E8E299 DBD587DBD782C5C167C9C56CE1DC8CE5DE9AF6EDB6D5CB9A261A00ADA170FDF2BDF3E9AEA3995F A9A05CF3EBA1E6DF8FE1DB86EAE48CE4DF84F2E59CFFE3AAE6BD7EA06A20FDC675EABB67B08635 FEE19AEBDA9BC9B9848A754D2D1502453A03DAD585D5CE86E9E29CE7E198DBD689F1EC9FF0E9A0 EBE49DE4DE95E1DC8CFAF5A3E8E49DDFD884E7DD84F6E7A3F8EBA7F4EDACE5E2B2191710393816 E4E5A9F3EDB1EFEAB5514F2D3C3C06D9DB9CC9CB8BD6D6A27D7B56BCB7A2403A2F060000030000 8C8B5DF8F5C6DDD5ABA29C803D371E13120AD0D1A8E6EAC54D4F36030100030100818059EFEFB4 F9F6B0FDF7AEECE89FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFEEB F3F4CDE4E8ACE9EAB2F3F3C6FCFCE6FFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFFF7EFFFEDDAFFDFC0F7E1B9EEE9C2F4F5E1FEFEFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F9F9E9E7E7E0CBCBE5A3A2E06F6FDF5C5CF6C7C7F1B0B0E06666 DC7878E1A0A0DF7877DE5555E06A6AEBA09FF2C9C8E99594DA6B6ACE5C5CCF5556DB5555DF6262 E17E7EE1BBBBE1A5A5DE7777CA6A6AC77575DC8282E67575DD5353ED9B9CFAD5D5E36E6EE36E6E EEABABEBD4D3E6E2E2F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFFE5E5FFD1D1FFC9C9FFCACAFFD0D0FFD2D2FFD1D1FFD1D1FFCDCDFFC6C6FFC1C2FFC7C7FE EDEEFEFCFDFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFCFCF4D2D2EAA0A0EA6D6DEA7B7BEBACACF3DEDEFAF7F7F2F2F2E5E5E5D8D8D8E8E8E8 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE2D270D6C664DBCC68E4D570DCCD68E2D36EE9DA75D9CA64D7C862EBDC76 E9DA74ECDC78ECDC7CDBCA6FCDBC62C6B75AD1C362D2C661DED26EE6DA7BE8DC85E7DA8CEBDF91 E6DB8CEEE394EBE091F6EB9CEFE495EADF90F0E596EFE495E8DD8EE9DE8FEADF90F3EA9AF8F09F F8F09FF1E996EFE794F4ED95F0E98FE4DD83ECE589F4EE8FF2EC8DF7F192EFE58BF2E88FF8ED94 F3E991EDE48FF0E893E8E08DD4CD7BE7E08EF6EF9EF1E999EFE691F0E68BF0E68CF1E78DEFE48B F5EA91F1E68DEFE48BF0E28CEFE28BF5E891F7E890FFF093E7C565FEE181F2D77AEFD679ECD57A EAD57CEDD983F0DE89F1E08CEEDB8BEBD987E5D47AF2E188E9D884E2D17FEADA86ECDE86E8DE83 E6DC82E7DD8AFFF6ABD2C787292000958F4EE9E097E3D986EEE48BF0E68CE1D77EE0D580EBDA88 F4DA89F6D17FAC7C28DFBA63EED77DF7E585EEE18AF6EDA8605736534C22B2AF75B2AF61E5E08E F4ECA3B8AD72463D05EDE3A6FFF1AAE0CB80846E2A97833DFFF7AEE3DD91E5E294EEE79FC2B878 4A3E07F1E89FF2EAA1E9E198EFE7A0F1E8A4736A26C9C07EEAE19FE3DA98A09754887F3BFEF6A9 DED780E5DD8DE9DF95CAC0789B9149EDE498E9E190EDE594E3DB8DE7DD96F7ECAF807751474218 D6D68AEEEAA89B94685D5134CDC18BD8C87FF7E596F5DC95FFE6A0F0CA84DFB779985F258B5318 8E561BA56F33C08D50EBBD7FF5CC8DFFDC9CFFECABFFE3A1EFD38FFBE9A4F7E7A2F1E09BEDDC97 E8D792EBDA95F7E6A0F8E8A2F9E8A2F6E59FF4E19CEDC386DB9D64B0753C814E1573450A895A20 C18C53EAC68AA57838E5C17BF7E398F3DE92EDDD92EBDD94E4D68CECDF94F4E79CE7DA8FEDE192 EBDF90ECE393EBDF90E6DA8AE5DD8CEAE592E4D98FE7DB96E5DB9AFEEDB1EAB880AA5824C37D41 FFDB93E6DF91F1EA9FE5E197E1E091DDD88AE9E192ECDE90F2DE91F6E195C2A85DB0944BF2DC93 FFE9A1EED48CEEE59EEBEAA4E1DF99E6E69EE0DF97EAE9A1EFEBA2EFEAA1E6DF96DFD78EE5DA93 E8DC93E1D288E5D78BE2D88AE2DB8BC8C070D6CE7DE2D987EDE08EFAEA9AC3AB5BB79A4AE7CF84 FEE09CF6DC97E4CF87E4D68CE6DF93E1DD91DEDE92DCD990DDD895DFDB9AD3CB8DCDC68CDBD69C DCD69AD8D190E5E097E4E18FE4E28ADCDB84D8D78AF3F2B3D9D7A86C6851342B13463E21C3BC8D E3DBA4E9E3A4D5D28BEBE69AECE79EE5E0A0F0E7B7ECE1C0706344605436EFE4B1ECE2AED7D093 0F0600ABA35EEEE69ED9D286E0DA8BB6B05EBBB561E9E49CFCF2B5EACF9392672BF7C488E5BC81 A9874FA593614F4930242000332A14897D49C9C376E9E896E6DF9FE1D99EDAD490E3DF8EF4F09F E8E19BF4ECB1E1D99CE0DA8FE1DC8AE4DF97E1DA84EDE488F9E8A2F7EAA3F4EBA8DFDCAA1C180F 2D2A0FB9B779D0C98BE8E3AC494A2854561DE8EAAECDCE95ECEBBDDCD9BA46422E000000040000 0B0800D4D2A1C0BB943F35200000000F0C00838456F9FAD3F2F4D5646450373429100D00A8A676 FFFFC3FBF6BAF4EEB6F4EEB6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCFEFDEE F8F9D3E9EBABDBDF90ECEFB8FFFFE9FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6FFE9D3F4E2B6E7E3A9ECEDC5F8F8E9FDFDF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFDF5F3F3EDD3D3E59C9BE17F7EE3807FF7DCDCF3C9C9 E38585E07676E17373DB4343DA3B3CE8A09FF5D9D8FDF4F4F3D6D6E79191DC4647D72223DB3E3F E48080EFC0C0FDDADAF8D2D1EDB4B3E27979DB5151DA4B4BDC5657E37676F1BBBBF9E5E5E48686 E68080F3B1B1F6DCDCF4F0F0FAFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF FBFBFFEBEBFFCDCDFFB7B7FFC0C0FFDCDCFFFBFBFFFFFFFFFFFFFFFFFFFFEDEDFFC8C8FEA8ACF7 9DA4F1CDD4F1E3EDEEE9F6EBEAF8E9EAF8EAEAF8EAEBF8EBF0F8F0F8FBF8FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEF3F3EDAAAADD5A5ADF2E2EDF3D3DDD6E6EE5B3B3EDE7E7E7E8E8DADADAC8C8C8 DDDDDDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7D775D9C967E4D56FF0E17CE6D772DECF6AF8E984F2E37EEADB76 EBDC77D0C15CD1C25CDACA6AE5D577F1E086F0E184F1E383EBDF79F6EA86EFE485E4D980E6D98B E9DD8EE7DC8DF1E697E5DA8BEDE293F6EB9CF2E798E8DD8EF5EA9BF8ED9EE4D98AE6DB8CECE394 EDE494EFE797F3EB98F2EA95EEE78EEDE68CF2EB8FFEFB9BFAF493EDE785F6F090F6EC92F4EA91 FBF198F9EF98F6EE98FEF6A1DDD582B9B15EEDE592F5EE9DEFE796FFF7A1F7ED92F6ED92F5EB91 E9DE85E9DE85F5EA91F5EA91EEDF87E5D77FEFE189F9E890EED175EFD06EF3DB7DA88A2EEBD57A F5E38AF3DF88F2E08BF7E494FAE798F2DF92E6D483E5D47BF0E087EAD986EBDA8AEFDF8EE6D87F E7DC81EBE186E5DA85EFE397FDF0AC584F1D58542CE0D995E9E193EBE28CF0E68EECE38CEBE08C F2E18FFADE8DFFD987BC8B36DFBB64D6C166EADA77E9DD81EEE49A9B925F1F1700B3AF74B2AC62 E1DA89F9EFA3EDE1A34C4112BEB47AFDEEA3DAC670BDA7576E5A11E7DA94E5DE92E3E08FEBE499 D5C78B53450CD9D28CE8E198EDE59CEAE29AF7EEA98C833EB9B06DF6EDAAEAE19EB6AD6A675E1B F8F0A3D6CF78EBE391E7DE92DCD28A988E46E8DF91E2DA89EDE592EFE698F4EAA2F2E7AA524920 6F6939EAE89AE6E39D8B855A5E5438DFD69DA79C51EFE18EE9D68AF1D990FFECA1EDDC93F9E9A3 EDCF8BB88E4FA87438894E147E3F0782430BA86C33C89156D7A468DDB273DABA7AE9C98AEECF8F F1D292F1D192E5C585D5B676C9A96AB595569D7E3E8867287C4D0F733900845113B68749DBB275 FCDEA0FFE7AAF4D293A07834F4D78EF7E394E3D786ECDF94EADE94EFE399EADE94EADE93FCF0A4 F1E496F1E495F6E99AF4E898F0E394EFE594F2ED9AEADF93E9DA96F5E9A7FFE1A6BD7843AD521E FCC986F4E999E2ED98E6DB93D4CA82D7D687DEDB8CE0D98AF0E798F8E99BEBD78BFADF94C3A65C B09148F5D58DFFE9A1E2D58DE8E59CE5E198EFECA5DEDD93E6E49AE4E298E8E39BE1D991DDD48D E6DA94ECDE97EDDC94E5D68BE9E093D7D181DCDA87C8C673CFCB76DFD480E5D481F9DF8EDBBB6A AD893EE7C17BFFDF98E5CB81E2D184E9E192E1DD8FE5E396E7E59BDFDC97DFD798DBD195D4CD90 CDC98CBFBA81CEC991EAE5ABE0DD9DD9D895D1D08BD9D99987864B0E0C022B270CAAA482F2ECC4 C5BD96E8E1B4D9D39EFEFDC4D2CE8CADA968D8D39CF4ECC6B6AB94100602C2B988E7DCA8F4ECB6 443B214E4512FCF3B7F8F0B2C5BD7DB8B06EF6EFAAF6EFAAE4E8A8F0F6BCD8C89468431576461F 592D15180102261F0158603FB9C599E5EAB8F3F1BACFD081E3E196BBB580F1EBBAEFE9AEE6E397 DFDC8FFFFFC6D4C998938857EEE7A3E1DC8BDDD992EBE590F6ED92F1E29CE7DA94E9E19EF5F1BF 383317282413EAE7A8EFE7A9E9E4AC37381E868856F1F2C0F2F1C3E0DEB8AFAC8C130F07363018 615D3D7D7A4DFBF9C1827C580901019A9573DAD9AAF2F2C1F7F8CEF5F5DAD1D0BD4945331A1500 F9F8C3EDEDACF3EFBFFDF8D0B5B089FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFEF F7F7D1E9E9B1E8E8B6F5F5DEFBFBEFFFFFFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFAF5FDF9E4F8F7CEEBEBB4E8E8B9 F5F5E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F3F3D5D1D1C9A3A3DA7574E1807FE8A3A2F9E7E6 F6DADAE8A1A1DE6161D93234D72425DE4C4CF5CECEFCF4F4FEFCFCFDFAFAF2C1C1E27373DC5C5C E48D8BF1C4C3FCF0F0FEF6F6FDF6F6F8DFDFE67B7BD82C2DD72627E15556F4B2B2FCE1E1FAE7E7 E58686DE6565DF7171D19898CDC6C6E9EAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFFE7E7FFC7C7FFBBBBFFC1C1FFE5E5FFF6F6FFFEFEFFFFFFFFFFFFFFFFFFFFFDFCFFEEEFFD BECDDF91AEC489A6C393BCB8A1D8AAA6E3A4A5E1A5A6E1A6ADE1ADC0E2C0E0F0E0FDFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFFF9F9FEE0E0ED8A8AE04343F07777EF7171E05050CD7373CBC1C1E4E6E6F8F8F8 F3F3F3F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D671E3D46FE8D974EDDE79E7D873DCCD68E1D26DE8D974 EADA78EBDB79EEDF79D5C65FC6B654C1B153D5C469DCCD6FD3C662E0D56CEBDF79E2D777EADF86 E8DB8CE2D687F0E595F3E898E6DB8BE4D989EDE292ECE191ECE191E4D989E5DA8AF4E998F4E999 EDE495F3EA9AF5ED9CF6EE9BF5ED98F0E990EBE48AF3EC90F2EC8CECE685EEE886F5EF8FF6EF96 F7F099FBF49CF9F19DEBE38EE2DA85FFF7A2FFF4A2F3E896FEF3A1E6DA88D1C771ECE289F6EC93 EFE48BFFF59CF8F097DFD179F9EE96E3D27BF4E48CE5D47CF7E58CD9BC60FBD87BCFB054B89E41 FFEC90F1DD83F2E18BF6E692F5E493EFDC8FF1DE92FAE799E7D880E9D981ECDE8AEADB8BE6D785 EBDC87E9DE83EBE084F0E58CE5DA88DACE85C8C0801F1D00BFBA79F2E99FE0D584DED47DE8DE88 F3E895EBD987FFE794E1B864AC7A25FFDE89E5D277EADB77E4DA78EDE696B0A86E130B00A39E66 89843CDDD685DCD285FAEBAC6F6237958851FFF29FC2AD4EEBD580523D06D3C584E6DE95E2E08D DED888FAEDAF786930A89E59F4ECA4DFD78FE2DA92F6EEA5C9C17AA09752EBE29FECE3A1D0C786 685F1ED6CE81EBE48AE2D987DAD184E7DD95C3BA6EDFD688F0E897DFD686E9E094ECE29CD7CC8E 231706A9A26EDDDC8BF3F0A8837D53655D42F8EFB5A19A4CC4BB65EFDF93F1DF94FDEA9EF8E29A EAD58EF7E49DFFF1A8FBE8A1E1CA84BD9F5CA77C3C874F14853E0A91410E8E3C0B863907974716 9749189244139949189A4C1B843705813102934514934514A25422BA8546DBB670FDDC95FFE39F FBDE9AF2D08DFDDF9DEEC98799752FFADE94EEDB8AD4C875D7CF7FE3DA8DEDE496ECE396EBE194 ECE094E8DB8DEADD8FEBDE90F0DF93F0DF93ECE191ECE894DDD285F2E49DF8E5A3FCD0958E430D C66B35FBCC85E9E692CFE18CF0E49EEFE29AE4E293DFDC8DD9D587DED789ECDF93E3D285EDD68B F0D58BC5A45AB79349EFD087FDEBA0E5DB92EEE59CDDD68DE3DE94E5E197E9E69BDCD78DF9F1A8 E7DD95F0E39BE6D891E6D58DEBDB92E4DA8DE2DD8FCFCD7BCECD7AE3E08BE1D883E0CE7CECD280 FEDD8FFBD88EC19C56C8A75FF4DA8FF5E395F0E495E7DE8FE9E296E4DF96E5DD9AF0E6A8EDE3A6 E5DF9BE6E19EAEA96F837F4FE4DFB7EBE6C1E9E6BCCECB9C9796650A08007F7D46E2E0B0F0ECBC D8D5A5D4D1A1E2DFAEFCFAC2AAA96B232300ACAC68FCFABFE4DFB24640235D5430F7EFBBEAE1AA A096611E1500CCC491F8EEBAEFE5B2E2D8A5928755C2B786F4EBBAC1C3949094663E2B062D0100 370A0540170A7E603CE0DBB6ECF6C8DCE9B3BDC588A7A663D8D98FE5E5A4D0CBA0A49F7AB7B17E F9F6B2DEDA957067390F0200201409D4CA8CEAE49BEBE9A7E2DE8CF9F29BEBDC9AF1E4A1E7DE9F E1DDAD262110302B12EBEBB0DED497E1D9A63C3B1DC0C09CEDECC8A19E7B211E04070300171200 E2DDB6FDFAC8FCF9BDFDFAB6B4AE8A342C18D5D1AB9C9C71D6D6A5FAFAD75351390D0A00070300 B2AF85FAF7BDE6E5A3E1DEB2F8F6D47B7857FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF9 F5F5D3EFEFBEECECC0F2F2D8FDFDF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FDFDE8F4F4CA ECECBAEEEEC7F4F4E0FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8F8E2DEDED5ACACDB6C6CE18080EAADAD F9E8E8FAEBEBF3CDCCEC9999E77273E77576ED999AFBE9E9FFFEFEFFFFFFFFFFFFF9E3E3EFB5B5 ECA9A9F1C9C8F9E7E7FFFEFEFFFEFEFFFFFFFDF3F3F2AAAAE87070E76C6DEE9192FBDADBFFF4F4 FBEDECE99E9EDF7070DC6767D89494DCD4D4F0F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFFD9DAFFB3B4FFC2C3FFDDDEFFF7F7FFFEFFFFFFFFFFFFFFFFFAFDF9EAF5E9DBEFDB D0EED2C6E0D3B6CBD58DA1D597B3CDB6DCC3C2EDBFC0EAC0C0EAC0C1EAC1C5EAC5CAEDCAD3EFD3 E6EFE6F4F4F4FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFDFDFBE9E9F1B5B5E57878E05757F5ADADF39696E24D4DD65F5FDCB6B6EFE4E4 F8F9F9E4E4E4EEEEEEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCC66D9CA64DECF69E3D46FDECF6AF1E27DE3D470 E0D06DE3D371DDCD6CD8C965F2E37BE9D977DACA6CD8C76BE0D171E4D773E9DE75EFE47CF5EA88 F8ED94F0E493EDE192EFE494EBE090EBE090F0E595E9DE8EEEE393EADF8FE2D787EADF8FF4E999 EADE8EEBE392F1E999F3EB9AF0E895F5ED9AFFFBA3EEE78EEFE88EF2EC8FF5EE91F5EF90F3EC90 F6F098F6F099F6EF98F4EE98F3EB96EFE792EEE590FDF39FF8ED99F3E894F0E591EBE18BF3EB93 F9EF98EADF88F4E992DED1789D8F37DACA73FCEB94F5E38BEEDB83F7E38AE2C56AFFE388BEA046 E3C96FFAE48BF3E28AEDDF89E9DC88E8D988EAD98BF4E296FFEC9EF1E28AECDD86EFE08CF0E092 EBDC8CECDD89E8DE83F2E78BEBE085D9CD79E5D88BEFE7A35C5725534E16EBE29BE5DB8BDCD17E E4DA86EADF8CE9D787F3D785D1A956C08D3AFFE08DF7E48DF0E37EE0D873DDD783C7BF841B1404 A29D68928C48B4AB5DEFE395F8E9A8A3966E625521F4E68BCEBA55F3DC86776122BAA772EAE09D E6E18EE6E08CF2E5A398894F837935EFE79FE3DB93ECE49BF3EBA2CFC77F827A33DFD692E6DD9B D7CE8D5E5515C9C173E4DD83E9E18FE3DA8EDED48C9E944BD4CB7EE4DB8CE6DD8EE6DD92E4D997 CBC0831E1102C5BE88E4E390E2E0948C87576C6543F3EAAEC8C274E3D984EBDE90F1E094F9E89B EFE297E8DC92F3E29AF7E49DFFE8A2F8DB97FFE6A3FFE1A0FAD595F0C586DFB072CD9B5FC79357 CE9A5ED09C61CB975CC38F53C89459D39F63E0AC70F5C58AFED195FFDC9FFFE29BF6E596EFE092 E8DA8CEBDA91EFD68FF2D38EE8C57FB39049FBDF93E0CD7BD2C670DFD785D5CD7DDBD383F0E597 EFE496DCD183EADC90EDDF93EDDF93EBDC92EEDD93EEE293EEEA95E3D989EEDC95FFE3A2BD854B A95D24F1A76BFFE194DFE28CD4E491E4D695E7D894E8E396E1DC8ED6D185E0DA8DE5DE93E1D48A E2D287FCE69AFBE195D3B167C29E52EDD288FCE99EE3D388EDE196ECE498E8E395E4DF92DDD78D F5EDA3EAE096F1E39BE6D990EFDE96F0E097EAE195ECE799DAD889D5D381E3DF8DE7DF8DE6D687 EBD386F5D88AFBDB92EBCC84B3954BA58A40D9C377F7E799E7D789E8DA8EEBDF97EDE39CE6DC99 E7DD9CE8E197DDDA8D736D3E221D0F332C2238322338341E2825180805007F7C4AF7F5C0E7E5B0 FAF7C7E6E3B9F6F2C9BBB78E7370420F0D006E6C41CFCE99CDCA9AE7E5C0332D16BCB693FFFCC3 D1CA8D1A1300A09762FFFFD3D9D09FD4CB9EFFF5CBADA379362B193F3423332C14B8AE89B18B63 A96B3DC77C4ACD8C53EAC384ECE19DE5E9A4F0F5B2DDD997CDBE7ED2CE90DDDDA75E593C000000 878456EBE8B0524B1900000033260FB3A67BF8EEB6E7E1A0DFDEA7DCDB93D7D083F6E8AEF0E4AA FCF5BBEEEAC0221D13221E10E3E1A7DBD297E4DDB0A9A88AECEBD1605E430F0C001813001C180C 4A4620FBF5C5D5D095D9D591EEEBA3F7F5D0BBB39E2A270A000000B6B684A3A380120F050F0B06 918D6AF1EDBBEBE7ADEBE7AAE8E8B5EFF2C3D3D5A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC FAFAEFEAEABDE9E9BAF5F5DFFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFA FEFEE9F6F7CEEBEAB5E9E8B9FAF9ECFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFEF5F1F1EABFBFDE6E6EE17F7F EAAEAEF9E7E7FEFAFAFDF6F6FCDFDFFBD1D1FBDDDDFCEEEFFEFCFCFFFFFFFFFFFFFFFFFFFEFBFB FCF3F3FCF1F1FDF7F6FEFCFCFFFFFFFFFFFFFFFFFFFFFBFBFDE1E1FBCCCCFBCBCBFCDADAFFF6F7 FFFDFDFCF1F1EDB9B9E38484DD6868E59D9DF2E9E9FAFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDF8F4F8CFC8F6AAA1F6CEC7F6F8F2F6FBF5F6FEF9FAFEFBFEF8F7FEE4EFEBC8E4CB B1DFB0ADE3ACCEEDD1E5E9F6A7ABF8B4B9F6E1E8F4F5FDF3F4FBF4F3FBF3EDFBEDDDFBDDC1EFC1 AEE3AEC5DEC5E1E8E1F5F8F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFBFBF5D5D5E38181DE6F6FE27F7FF7D7D7F3B2B2E35858E55D5DF5B1B1 FAE1E1F2F4F4CECECEDEDEDEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCD66D9CA63D4C55ED5C660D7C863EFE07B F1E27FECDC7AE2D270D9C968D2C25FE0D26AEFDF7DF6E686F2E283EADB7CEEE07CF6EB82F5EA81 FCF18FF4E98FEFE392EDE191E6DB8BE3D888EEE393F8ED9DECE191F4E999E9DE8EDDD282E4D989 EFE494F1E595E1D988E7DF8EF1E998F3EB98F1E995F6EE99F4EC96F4ED95F6EF97F8F197F6EF95 F2EB93F4EE98F6F09AF4EE98EFE993F4EC97F8F09BE9DF8AE6DC87F1E792F9ED99F4E894F2E691 EFE78FF7ED96EBE089CBBF69D1C36BECDD85FEEF98FCEB93F5E18AFFED96E1CC73DBBC64F6D882 A2852FFBE38BF4E48CF8ED94EAE089E3DA85E0D481E5D789F0DF91F7E696F5E78EECDD86EFE08E F4E497F1E193EFE08DF0E58AEAE082ECE186EDE18AEADE8BEAE19CB6B2750D0400C0B66CECE092 F3E896EADF8EE9DD8DF2E092F6DA8AAE8634CE9E4AF4D182E9D783E0D470DBD36ED7D17AE7DFA5 4D461B7972449F9556A9A055F7EA9DF2E1A0D4C69F3E3000DDCF6DC9B749F2DC87937944917E52 F9F0B1E5E08DE3DE84ECDF96BDAF706A601DEBE29DE6DF96EFE79EEAE299E0D88F898139DDD48F E3DA96E3DA99615718C0B76CE0D980E7DF8CE7DE91E4DA92A39952E4DB91E4DB8EF1E89CEBE299 E7DC9CB4A86F2E2100D7D198ECEA94E8E799817C49847C59EDE5A6E4DC8DF3E992E9D98CF6E499 F5E598ECE195EBDD94F6E29BF6DC97F8D895EBCA87FBDB98F6DA96EFD892F0E097F3E79DF0E69B F4E89DF7EBA1F8ECA0F4E79CECE096EFE398F7EB9FF6EAA0F2E69BEEE296E4D88EDDD384E3DB88 EBE594F1EB9AF5EA9BF6E197F4D78FD0AD66B8954CF2D788E3D07BE6DB83D7CD78DED582E7DC8A E9DE8EEBE091EEE394EADC91EFE197EEE097E9DB94EADC95EEE095E9E28FEAE090F4E098FCD999 915218B97337F9C884F7E291CCD17BDBE192E6D796EFDD9BF0E79EEAE299DED990E9E59BE2DE94 D4CC83D6CD82DECD82F5DD92F7DB8CB69548B19145F2D68AF3DA8CE5D486ECE090EBE393EEE797 E2DC8EE6DF91E1D488EEE197F1E39AE9DA92E8DB91DCD388DED789D8D284DFD98BE0D98BE9E194 EBDC91ECD98FF1D98FECD48AE0CA7FF6DE94E0C87CAA9045BEA457F3D98DF8E096E4CF87E3D18B F3E6A0E9DF99DFD789C1BB6D80793C322B011C160004000003000035320EAFAC7FE7E4B0EDEBB3 B2AF7883805395906E5C573B150F00060000010000C1BC9CBBB696B8B3939E997D0C05015F583A F2ECB2655F2029230FE6DFA4EBE4B0EFE7B7FDF6C7978E6310070042381C766C49635634EDD5AE FEDAAECE7E45CA6F29BD6F1DE7B65CCBB75BEDEB95C9C67BF2E6A5EDD7A0E0D6A55B5A34000000 736F4BFDFAD06B67360A0300685F35EFE4B7FCEFBFECE1A9E7E0A8F5F5C9ECEDB2B5B06FF9EEC1 EFE6B4EBE6B7ECECCC2A2617110E07C3C08AEFE6AEFFF9CFFFFFE8D1CFBA040200100C00ACA787 BFBB92A9A674F6F1B8D8D394DBD694FDF7B6D5CDA62E270C1E1C08A2A1708C8A660E0D0137321C 25210EDBD8A5ECE8ABEBE4AAEDE5B0ECEAAFDFE0A3E0E2A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F5E2EBEBC3ECECC6F4F4DDFCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFAFDFDE8F5F5CCF1EDBAF7EBC6FBF5E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F7F7DFDCDCD4AAAADB6D6D E18080E9ACADF9E6E6FFFEFEFFFFFFFFFBFBFFF8F8FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F9FFF5F5FFF5F5FFF8F8 FFFFFFFFFFFFFCF2F2EEC0C0E37F7FDA4E4ED47A7ADACFCFEFF1F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAF0EEEBC7CACB92B8B474BBCE98BBEBBEBBEABDBAF6D4DAF9E6F9C2C6EB9CB8CB 9FCFB1B3E5B0D0F0D0EBF9EBF4F3FFBDBCFFC1C0FFE2E1FFF9F7FFFFFFFFFFFFFFFDFFFDF3FFF3 E2F8E2CEEECEB5DFB5BFE5BFDFF7DFF6FFF6FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF4C1C1E04747E66D6DF3B5B5FEF1F1F4C6C6E27272E06060 ED9797F7D4D4F9FBFBE7E7E7EFEFEFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CA61E0D269DECF68E3D46EEEDF7A EADA79E2D270E7D775FBEC8DF9EA8AE4D571D0C258BFB04ACCBC5DE3D374E4D576E3D671E6DB71 E6DB73EADF7DE2D77DEADE8DEADE8DE6DB89E8DD8BEBE08EF1E694EDE290F0E593ECE18FEBE08E EFE492F3E896F8ED9BF2EA97EAE28FF0E895F9F19EF6EE9BF6EE9BF0E895F6EE99F9F19DF8F09C FAF29EFCF5A0EFEA96F4EF9BF1EC98EBE692EFE792F6EE99F2E893E8DC88F2E692F7EC98F5E690 EFE48EEDE590F2E893EFE48EDBCF79E5D77FFEF69EFBEC94FCE791F7E48BFAE68DE3CB73F1D480 F0D07CB19541FBE590F2E48DF5ED95E6E18BE4DE88E4DE88EBDF8DF2E392F4E392F7EA90ECE18A EEE291F0E395EADD8EE7DB89F0E288E9DC7EEBDD80F4E68DF3E48FEADE97F9F2BA6C6222433711 E7DA8BEFE392E6DD8BE2D888F3E396FDE295906B1AD7AA59EFD184E5D382DDD16DE2DD75E2DD86 F5EEB56C643D4C451AB5AB71958B45F1E397EEDD9BF7E8BF5C4E0ED3C55DCFBA4AF5E38EB99F71 5B4525F1E5AED9D380D9D375EEE293DDCE8B605613D6CD88E3DB93E8E098E2DA8FEBE3988A823A D2C984EDE4A1F4EBAB746A2CB7AE63DDD67EE4DC8CE5DC92E6DC95A39954E1D78EDBD287E7DD94 EAE09AF4E9AC9C905B3C3005E9E3A8E0E089E9E89978733F88805BF1E9AAE8E090EEE48DE4D487 F3E094EED68AFFE29EF2D28FF1D590F0DC95FAEBA2F0E59BE4DC91E9E397EBE196EDE297EFE198 E8DD91E0DB8AE5E091E3DE8DE1DC8BE6E192E5E08FDFDB8ADDD889DBD686E3DE8DE3DE8EDDD784 E1D883E5DE8BE6DD8EEADD8FF9E399FFE69DB5914AC09D53F4DA8AF0DE89E9DF85DED47CE9DE87 EDE18CE7DB88E6DA89EEE394EADF93EFE39AF0E49CEDE09BECDE9BEBDF97E5D988EDE191FAE39B D9AE728A440BC08242FBDA8CEBE48CC9C975DED68DE8DA9CF1E0A1EEE09AECE29CE6DD98E8E49E DCDA93CECB83D8D389DFD688E4D486EBD586E5CA7AB68F43C1994DFADD8FF0D889E2D080F1E594 EBE492E6DF8EDFD988DFD485E7DB8DEADC90E2D589EDE196E9DD93E5DB91DED48AE8DE94DED48A E9DD94EADE95ECDE98EFDF9AE9DB93DACF84E1D187FFEEA3EFD58CD3B167D8B46BDCB970EFD288 F4DE94DED086E5DA90EBE294CDC47AECE2A2C4BD89B3AE809F9C6E878553C2C089F4F3B9ECEAAF F7F1B98B844F1512051F1C0D302B266E685D211B180B0400302A225D574C2C2717030000030000 0F0900726C311C1600888241ECE6ADE3DCA4E3DCA5C7C0892F2700BEB783E2DCA9F9F1BFA89D6A D8C08AFFCD92C6722DCF7022CC7A22EEBB5EBFAD51CBCC79D6D791D9CE94FFF6C8A19A6F000000 6D7048DDDDAECBC89C1D180C564F2BEFE7B5FBF2B6DED493AAA061E9E1ADCBCCAB696A453A3710 A39974D7CEA7D7D2AAA1A0850D0B060807019F9E6BEEE7B2D5CFA68A896D8D8B734745300A0800 DDDAB2FDFACDF7F2BCF8F2B7E4DCA1EAE2AAFCF5C153492B282306BFBC8AFFFFDE3E3A1A868471 E3DEC91C1900D4D391F3EEA9F1E7AFEBDFB5F5EDB2F7F2AFEBE6A4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA F8F8EAEEEEC8E8E8B2F4F4DBFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFF9FEFDE8FAF4CCF4E1ACF9E9C8FFF7EEFFFDFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F5F5D9D5D5CD9E9E D95F5FE47F7FEFB9B8FAEAEAFFFDFDFFFFFFFFFEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFFFEFE FFFEFEFFFFFFFFFFFFFCF2F2EEBFBFE37B7BD94848CF7272D3C7C8ECEEEEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFCFCFAEAEAF2CFD0E6AEB8CB83ADB76BAECE8DAEE5AEAEE0A3AEE0A9C3D2ABD68285CC 5782AB6DB08EA1DC9DE1F2E1F7FBF8F5F5FFC7C6FFC3C3FFD7D7FFEFEFFFFDFDFFFFFFFFFFFFFF FEFFFEFCFEFCF2FBF2C6EBC6B8E9B8C6F2C6E2FBE2FCFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F5AEAEE13737E87676F5D3D3F7F3F3F0CECEE69191 DE6A6AE27E7EF2C6C6FBFEFEEEEEEEF4F4F4FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2C45BDBCE64DECF68D7C862 D4C560F5E583FAEA89E9D979DECE6EDCCC6DD5C562DDCF65ECDD78EADA7ADACA6BDFD071F1E47E F2E77DF2E77EEFE481E9DE83EADE8DEADE8DEDE290EFE492EADF8DECE18FF0E593EBE08EE5DA88 E8DD8BF0E593EEE391EDE290FAF29FE9E18EEAE28FF0E895F0E895F6EE9CF4EC9AF4EC9BF6EE9C F9F0A0FCF3A3FEF7A5F9F49FFAF5A1F7F29EF4EE9AF8F09BFBF39EF6EC97F8EC98F3E793F1E58F F7E893F3E892F8F09CF7EE99F8ED98FFF6A0F7E991FCEC94F3E28AF7E28AFEF59CFEF59CE1C76E FDEF9CD6B665DAC26FFAE795EBE08BEDE791E5E18AE7E48DE9E48EE9E08CEDE18DF3E38FF2E78D EEE48CF2E596EFE294E6D98BE4D886E8DB81EDE082E4D777E5D87BF7E78FFAEDA6F5EDB6E9DEA2 2B1D00B3A65EF7EA9BEFE594ECE192F2E398FDE79A9C7829F2C87AFADF95F1E092EDE27EEBE67E EAE78FEFE9AFA49C76372E0AC5BA83827832DACB81E4D290F2E3B9796C2EB5A93CCFBB48F6DC8B DFC39B675038E5D6A6E0D986DFD875E8DD87E7D993605713BBB26EE2DB93E5DD94E2DA8FEEE69B 877F35BBB36BF1E8A7F1E7A87A7032A69D54E5DE87EAE292EDE39BEDE29FA89E5BE1D790ECE29A E8DE98E4D997F3E6AC76694652471EF8F2B7CFCF76EEED9C6E69347A724DFEF6B6E6DD8CF8EA94 F3E093F6DF94F0D98DEFDA92EFDB94F9E69FF3E29AF0E098E0D48AF5E89FF5EAA0EDE197ECDF96 EFE198EFDF94EBDC8CECDE8FEADC8CEADC8BEDDF90EBDC8DE3D584E3D586E7D889E9DB8AE9DB8C E9DA88ECDD8AF3E694F7E999F1DE92F3D88EFFEAA1A7813ADAB86CF7DE8CF2E38CE1DA7FF4E98F F1E48AEFE28AF0E48FEEE390EADE8FEBDF94ECE19AF2E7A2F5E9A8F0E4A4E9DC97F0E191F1E595 FDE29AB77B41974C13E1AA67FBED97E8E88ED9D381E7D58FECDE9FEFDFA1F0DD9BEDDF9DEBE2A0 E3E09DDFE09BE7E8A2D1D088D1CD80EBE092E7D786ECD583FADD8FC29143CAA354FEDF8EFAE794 E4D582E9E08CEFE895E9E38FEEE293EDE091E9DD8EDCD286EADE93EDE197F2E39AE7D68FE8D892 F4E39FEEDF9BE7DA96E5DA97E0D592D7D38BF0F0A3EFE89CEBD98EFFE298FFDE95F4D189D0A45B C8A45BF1D78CF4E397DFD486DDD389D8CC86E9E09FD5CD8ECBC888D5D48FE1E399EDEFA4DBDB92 CAC685EEE6B1F6EFBCB1B174DADAA3ECEBC2F5F1D75651400000000000000E0B00716E4F9D9C72 47452045431C928E569D975DF6F4BDE6E1A6F4EFB2DDD99A4A4616747131F4F1AEEFECA8C5C37C E0E095E4DB8CF6CB80C17731C46A27D68746FFDE9DF4E8A77B894AA5B27AD7DAA9E3D6A9201B0E 3D3F1EE5E8B0E5E6ACAAA878171100E7DFBAEAE4AED5CE83E7E091F4EDA8F8F0BE373823010400 0402004C4330EDE8C9D8D5B51819090504010404003F3F1BD4CD9DD2CBA131311C919271DAD9B6 171508B7B584F6F2BDE8E3AAE0D9A0E8DFAAFFF9CDD3C5A0181002A6A275FEFDCFF4F2C949452B C2BDB2F4EED92E2B00D1D184EFECA2FEF5C0EEDEC0EFE0B0FCF2B8F4E7ADFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFC F9F8EBEAE9BDEDECBBF5F4CAFCFCECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF7FCF5DDF4E1ACF7E0B4FEE8CEFFF7F0FFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFCFCEEE9E9 E1A7A7DB4949E97E7FF9D0CFFDF2F2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCF2F2EEC0C0E38584DC5E5EDF8F8FEAE0E1F7F9F8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFCF2F2EEB7B7ECAAB0EDB9CFCEA7E1AC8DDFCDB3DFECD1DFDAB0DFBB86C19460A1 5851AC3A679A44936972BF6DBDDFBDE3F1E3F0F2FAC6C6FEC4C4FFD7D7FFEFEFFFFDFDFFFFFFFF FFFFFFFFFFFFFFFFFFFDFEFDEDF9EDD0F1D0B7EAB7C9EFC9F6FCF6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FDD5D5F39999DF4C4CE08989E6D9D9E6E7E7EBD2D2 F1ACACE87676E16D6DF0BBBBF5F8F8D6D6D6E4E4E4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D169E9D870F5E47E E4D26ECFC05BE5D573EFDF7FF1E181F3E384E3D374CBBB5AD0C15AD3C361EADA7BF4E388EDDE7F E9DC7AE6D974E7DB78EDE082EFE48BEBDC8AE6DB89EDE38EEEE391EBE18EF2E795F6EB99FAEF9D E7DC8ADCD17FE6DB89EDE290F1E593F0E593EAE18EF1E996F3EA97EBE290F0E897FFFBAAF6ED9E F2E99AF8EFA0F9F0A1F2EB9BF8F2A0F4EF9BF0EB97F1EB96F9F19CFCF49FF4EA95F3E793EEE28E F6EA96FBEC99EEE38FF0E893EEE691F4EB96E7DB86E5D882F3E38DF4E28CEFDA84F2DA83F7DD86 D4B962FFEA9AAA8A3DE9D687FBE998E6DB86ECE790E9E58EEAE690E7E28EDED683E1D483E8D886 E5DB81EBE08AF3E895F1E495EBDF8EECE08BE8DA81EADD80E4D779E8DB7EF3E38BF5E69AEBDEA1 F6EBAE85774751450CF3E899E5DA89F8EC9DF0DC95F5D892AA843AFFD885F8DC8FEFDE90F3E788 EAE17EEEE690ECE4A6DFD8A80E0700B4AB74948B49D7CA7FF4E49BE5D6A181723A978730CFBA4E EDD580F7DCAE725C3DC7BA85E4DE8BE7E082E6D884F0E1996E6429B2AA64EBE398E7DF94E5DD92 EBE29B7E74339C944CE5DD97EAE0A28D8348A79F55E3DC82E2DA8AE6DC95F1E6A4B9AE6CD7CE86 EAE196E0D88DD7CD8DE9DEA95E503B756A42F7EFB0CCCA74FFFFB75B54277C7152F4EAACD7CE7D F6E995F6E39AF0DB8FF1DD8EE9E091ECE496F2E69AE6D98EEFDF94EFDF93EDDB93F9E8A0F9E89F EFDF97E4D68DE2D186EFDD8EEBD687EAD688EBD88BE4CE83E4D084EAD78AF1DC90FBE69AF3E093 EFD98DE9D384DCC97AE0CF7FEFDE90F4E194FBDF94FFECA4A17C32E9C77BEFD684F0E089EFE88D E6DB82EDE188EDE18AE8DC86EADD8CF1E495ECE094EBE198F3E9A1FAF0ACF2E7A5E8DB97ECDD91 EDDA8EF9D28E9E551A985415F8D286F4EC96E4E089E3DD8EECE099F1E7A5ECDD9DE5D694E3D695 E4DB98D9D490E0DF9BE5E59FE0DF97DCD78DDAD285E2D485F0DC8CFEE293FADA8EBC9847CBAC5A F5DC88F5E08AEBDA85EDE18DE0D784E4DC8CE7DE8FE8E093E8DF92E2D78CE0D289F0E199EEDD96 EDDC96E8D692E1D291E0D593EAE2A1EBE3A2DBDA93DDDE92E2DE94E3D78DF5DF98F1D38CFAD58E FBD68FD5B169B6984FE4CC80F6E094E2CE83EFDC94DBCB85EDE39EE0DC95CED085CFD485E3E79B 7F8138241E00DBCF9BC6B888E4E199DFE197CECD8FD7D5A4D5D1A8A8A47E928F63E1DEAED7D69D CECE91E8E8AAF1ECAFFFF9C5FFF9C4E8DCA3E8E1A4EEE9A97E7C3E4A4708E3E09BE2DE97EFEBA2 C8C177E0E08CE9E48CFCD68DC87F3AB06018ECAE65F9D99EF9F4C2D2E0ADA7B882A6AF7B57563F 030300ADB181ECF0B9FCFBCF747156454223F8F4C3EAE5ADEFECA7F2EDA5FFFDC179714B040500 696B4B5D5E372A2316EBE9CB8F8C6D0000000B0B05060500141400E4E0B1FEFFD575775192926E E2E1BB251F17656030E5DEAADCD59CE9E3A9E6DDABEDE1B8CDC4A1221D00D3D2A4F7F6C4F5F4CA 211C02C0BBA9FAF3D73D3602D4D290F8EFA8D3C492EBD7B5FAE3ADF6E3A3ECD394FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC FFF7EEF9ECD4EADDA6F2EBBEFEFEE6FFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF8EDF7EAC6F4E0B2F4DEB2FCF4E5FFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFCFC EEE9E9E1A1A1DA393AEB7E7FFFDEDEFFF7F7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF5F5F4CDCDE89190DD6362DF9090EBE1E1F7F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF4F4FDDEDEEDA5A4EFABB1F6D1E9D0C8FFA0A3FFB4B8FFC5C3FF9B8AFF805CCC 6A3F916252A15C779D55986E5EB15B80BF7FAAD5AAC9DED4B3B8F4C2C1FFE0DFFFF5F5FFFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8F9E8BEECBEBDEABDE4F3E4F6FAF6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEAEAF6B1B1E77A7AD36262DA9F9FE5E2E2E5E8E8 EFDDDDF9C3C3EF7979E35555F0AEAEF5F9F9D6D6D6E3E3E3FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D06AE0CB66 EDD976EFDB7AFFF18FDDCA6BDBCB6CEFDF81F5E488F3E287E6D679E6D878CBBC5DD2C367E6D77C EDDE82FBEB92F2E28AEEDE85F5E58FEBDC87E2D17FE7DB86E8E189E6DF87E8E089EFE791F2E893 EEE28EF0E490E5D987E3D685F2E493ECDE8DECE08DF3E893E5DA85EFE590F8ED9AF8EC9AFAF2A1 F2EB9AF7F09FF8F1A1F3EC9CF7F0A0F2EB9BF7F09FF6F09CF7F19CF8F09AF5EE96F5EB94F3E994 F2E894F6EA99F0E395EBE08DEAE28CECE48FF5ED99F0E794E7DA8AEEDF8FF5E392EDD784F9E38F EFD17DDEC16DF3CF80A48336FFE89AF9E795F1E391DED683DFD986D9D381EDE594E4D789F8E79A EBDA8BD5CA74EDE38CEBE18BE7DB86EBDF89E7DC82EADC84E8DB80E3D67BE5D67BEBDB83EEDE87 F2E194F3E7A8D5CD932D2906838131FDF4A4F9E59AF7D89ADAB77BA07833FFE68CF1D682F1E090 EFDE85F2E286E9D983E9DE94F1EBAF36340085824E928B4CACA257E7D785F1E596A79659775F29 DBC66EF6E085EFDB92877843A89F5DF5EF9CD5CB79E9D989F3E19C988E59999347EDE892D4CC7D E7DD8DEBDE9EB9A97CA69C55EFE79BE9E1A29991569F9949DFD675E1D987DED48EF0E4A6A09853 D8D182D9D37DE2DD8AE9E19FE2D8AA3E3023857749F4E9A1E4DC8DF6ECB1665A3985795BF5EDA8 E3DC8AE4DB8BEEDF9AEAD98DECDD86E6DB89F2E798F0E595E2D788E3D788EDE193EDE194EFE296 F2E59AEBDF93E7DB91EADE91E7DC89ECDF8FEEE193EDE095ECDD96ECDE97F3E59EFAEBA3F6E99F EDE194EADC8FE7D689EBD98BEDDC8EF5E698EADA8CF4DE90FFE89CA38137ECD083F0D785F0E08B F4E993EBE18EE2D787E9DE8DEFE494E9DE8FE8DD8EF1E697F2E69AEFE398EBDF94EADE94EAE199 EEE4A0FBDD9BF5BB7BA64F0ECEA151F9E78FF0E28EF2DA91E3DE92D4E594E4DE93E3D790D6CE8B E1DB97E0DA95DAD38DE7DE9AE6DE98E7DE96E1D68FDBCE86DFD189E4D48CEEDC92F3DF94F0D889 CFB362CCAB59FBDF8DF9DB88EFD683F5E594E2DB8DE6E69BDBDC91E7DD92F0E297E7DA8FE8DB91 F0E29AE7DA93E2D590EBDF9CE6DC9AF0E7A4F3EBA9E6E09CE8E29BE9E49DE1DC95D8D38CDFD791 EDE19AF8E79FFFE9A1E6C880B69148C8A054C9A253FDDD8CEDD789EBDC95E5DF9EDADC9FD7DCA2 D3D6A026240E0A00009F905CD5C48FDCD38BE5DF91E6E097DBD591E4DE9DF5F0B0E4E1A1E1DD9C 827E3CC0BC77E4DF9AC8BB7DEACE9EEBD09EFEEBB5FFFBC2B0AA6C2422009B9A5FFBF7B6E3DB9A F2E8A7E8D796E9DD93E7D489FFD39EDB9047A45B00D8AA35F9E893F6EEB7F4F2BDFFFFC0D5D79A 111300666D38FFFFD0F0F2C7F3F0E9322D28757449F9FAB5EFEFB8E4E1BB949363979272130F02 A2A289FFFFEACCCEA9060500C6C7A09FA177141100C8C7A24A4A23020000B3B088F9F8CC696A43 696643EEE6C64E42203F2F0AAE9F71DACD99F1E8B0E0DAA4F9F7C59594690305002D2F0BE9EBBD D1D0A1191500CFC99DFDF6C72F22009F8D61F2E7B2F0DBA7EFD69EE2C577CFA954C6A04BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFAF5FEEAD3FCDDB8FBDEB8FDEDD5FFFDF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF3EFECC8E5E2AAF4F3DC FDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1F3F3D4CECEC68787D63637EB7F80FEDEDEFFF7F7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9FFE6E6F09898DC4849CA6667CCC1C1E9EBEB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFEFEDEDEFDC1C1FCC8C7FEDEDEFAEEF6D1CFFF9894FB827DFA6B66FA3430FF 4440DC6E69B5A68FB0BEB0B3B0C8AA85C5854DA74D5EAE5F7DB58E889BD9B5B9F8EAEBFEFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FEF3DDFBDDC8EFC8C5E4C5E3F2E3FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9DEDEE88888D45252C47070DDB5B5F9F7F7 FCFEFEFDF3F3FCD6D6EE7373E23838F19F9FFDFFFFF5F5F5F9F9F9FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0CB65 CEBB54BEAB45D2BF5BE3D16EF6E383EEDD7EEADA7BDDCD6EE8D87CF2E285F9EA8DE7D87CDECF73 DACB70E0D077F8E890FFF29BFDED98ECDC87F0E08AF0E08EF7EB96E5DE88DCD47EE9E18BE7DF89 EDE38EF1E591EEE28EE4D884E7D886F1E28FE8D986DED27EF4E894F0E490EFE590F2E794F6EB99 F9F1A0F0E998F3EC9BF7F0A0F5EE9EF3EC9CEAE393F6EF9EE9E38FE8E28EF3EC94F3EB93F2E890 F6EC97F4E996F4E799EFE294E8DD8BF5EE96FBF39EEFE794F2EA97F2E694F9EB9BFAE795F0DA88 FFE996D5B562F0D27FB69647CAAB5EFFE798EBD987EDDF8CDCD381DDD685E8E190F3E898F1E496 F6E598F1E093DCD07DE2D983F1E892F2E691EBDF89F1E58FF5E690FBED94E8D981E1D179EDDD86 F4E38FECDA8CF1E49CF7F1AD868542221F02D6CA84F4DE9DFFE2A2C6A25EAA8436FFE58FF2D986 F1E291F1DF88EFDE84E5D67FE6DC90FAF4B65754246F6E44BAB5779A9147E4D581F7EB96B7A669 694F20DCC671F5E183F5E39496884E9A914DF3ED99E3D98AEEDE8FE8D792A39966A39E52F5F098 D1C879DFD585EADC9DB19F77978C45EEE699F0E7A8A39D61AAA354E1D878ECE491E5DB95E8DD9D 958D48DAD284DDD780E3DE8CE1D997ECE1B53A2B169B8E5AF6EAA0E7DF91FFF6BE766948766A4A FDF4AEEAE392EAE294F2E29FEADB8EE8D981EADF8DE7DC8CE2D787E0D585E1D687E2D788E5D98D E2D68AE8DC90E9DD93E8DC92E9DE90E6DC87ECE191F0E496F0E499EEE19BEFE29CF1E49EEDE199 E7DB92E6DA8EECE093EEDF92F0DE92EDDF90F1E495E9D98BF6DF90ECCD829C7A30F7DD90F3DA8A F0DF8CEFE48FECE18FECE191E5DA8AE0D585E3D889E7DC8DE6DA8EEADF92ECE094EADE94EADE93 E8DF97E1D794FDE1A2D58C4D9F4806D2A856FCEE96EBDA8AF1D48FE0D88FCEE290E1DB8FE3D78F D7D08AD9D28DD5CD88D6CD88EAE19CE6DD97E8DE99EBE09BE7DD98EADD96E7DA95E8DA94E5D88D FEF0A5FBE191C8AA59D3B05FFFE291FCE492E7D385ECE095ECE89FE6E39AE8E096F0E59BE6DB93 E5D991ECDF99E8DE97E6DC95E8DE98E8DE9AE9E09BE6DE99E4DB97ECE49DEDE49FECE7A1D6D18E DDD991F1EAA3EBE098F2DF97FFEAA1EBC77DC59C51AB8031E7BF70FFE89CFBE5A0DDD190EBE5AA E3E2A9D0CF982321005B5525C6BE85E9DFA1E1D48EF7EBA0ECE29AF7EEA7D1C984DBD391E3DB9C EFE8A8E3DB9CECE5A5EDE6A6EEE8A7D1D091DBD9A7807E5D46432C120F03656237E8E2A4FCF4A5 EFE18BF4E08CEBD085E9D995EDE3A3FACD93E39E59894400D7AF52FFFCB3E6DAA9F9EFCCFFF8D8 7A6A4F1E1407E2E2ABF8FBBAF8F6C96C635A0F0800BEBA81FBFAADFDFAC0C8C29F201D024F4A2D 3F3929EAE9CEA5A780ACAC860C0A00A0A076F8F9CEC0BCA0F4F2C4ACAB780E0B00545124FFFFDE 62613765613CFFFFE76C623E4A3D15E8DAABE2D7A0E4DC9FC2BC83E5E3AED6D4A41617093F431C F2F3CCE4E3B7211D00C2B987FFFCC865541FC0A873FFF2B9DEC186C4A769D2B370EED08CFCEAA6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFAF1F3E8C5F0DFAEFCEBD5FFF6ECFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7F7E6EEEECC ECECC4F2F2D7FBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8FAFAE6E0E0D99999D93A3BEB8889FEECECFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFEBEBF1999ADD4546D76F6FE1D4D4 F3F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFDF6D2D2EFB0B0F9D5D5FFF3F2FBF6FBD2C3F09671D87A49CD6D3FD0 7267F57788D787A2ACB7A39FDAB4B1DBD8CAC0E6C28BCD8C6DB5775A9E7A5484AD8BACD1D6EAE7 FAFFF6FEFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFBEFFEEFCCEFCCB2E1B2D8F0D8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D3D3E66A6ADA4040DE9A9AEED3D3 FEFCFCFFFFFFFFFCFCFDE7E7EE8484E23E3EF09696F7ECECDFDDDDEAEAEAFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6C25BD9C65ED9C660DECB67B6A440E4D270F2E181F5E586DECE6EE7D679F1E285EFE085EEDF84 F6E78CF2E388E3D37CEFDF88F1E18AE2D27DE2D27DF4E590EFDF8DEBDF8DF2EA97E7DF8CE1D986 EFE692E6DC88ECE08CE8DC88E2D782EADC88F3E48EEADB86DDD17CF6EA96F6EA96F8EE99F6EC98 F5EA98FBF3A2F1EA99F1EA99F8F1A1F8F1A1F4ED9DEFE898F8F1A0E9E38FEBE590F3EC94EAE38B F2E891F8EE99F7EC99F9EC9DFBEEA0F4E997F5EE96FCF49EF0E893ECE490F4E896F0E190FFF7A5 FCE693F5D986DDBE6BFFE18EA17F30EACB7DFEE696F4E18FE3D583E8DF8CE2DB8AF4EC9BF0E998 F4E799F1E194F4E397F6EA9AF1E694EFE492F1E593F1E591F1E58FF7E794F7E893F4E68FEADA85 E8D884F0DE8EF7E598E4D985E2DE89EDEDA13D360460522EF3DBA5FFE6A1C29F4EC09F47FFE493 EED889F2E392F2E28CF1E086E8D881EBE195F6F0B27A794A4C4B2BDAD599887E37E9DC8AF4E998 C6B5784C3505D4BE69FCE78BFFF8AA9A8B53817935F0EB99E8DE8FEDDD8EE6D590A99F6D9A9548 F8F49BDCD484E8DD8DF1E3A4AE9D7480752EEEE699F0E8A8908A4EA59E51E9E083E2DA89E5DA95 EFE4A48E8540D3CB7DD8D27EE3DE8CE0D997E7DCB0302203BBAF78EFE497DFD787FCF2B6877A55 726643FEF5B0E7E08FDED688E9DA97EFDF95F6E792E7DC8AE7DC8CEADF8FEBE090EEE393EEE394 F0E498E8DC90E6DA8EE4D88EECE096F3E79AE3D887E6DB8BE8DD8FEBDF95ECE099EADD97E7DA94 E5D991E5D990EADE94F0E49AECDC90ECDC8FE8D98BEADD8FE8D789F9E294C3A459906D23FFE296 F3D98AEEDE8BEDE38DDFD484E8DD8DE4D989E2D787E6DB8CDBD081E6DA8EEADE92EDE195EDE197 EDE197EDE199E3D493F9CB8DA55B1DB45F20E3BB6BEFE08AF1DF91F7DA96E6DD96D5E494E7DF96 E9DC95DED78EE9E098E4DB96DFD691E4DB96D8CF8ADFD590E8DE9AECE19FF0E5A4EFE5A3EEE5A1 ECE29BEFDE96FDEA9FF5D98CB29242D7B667F8DB8CF8E195E3D187F1E49CEAE199E7DF97F0E7A0 EBE39AE6DD96E7DE97E7DD96EDE39CEAE099EFE59EEBE29BE3DA95E9DE97F2E8A1F3E9A4EEE5A1 E1DB97E6E19BEDE59EEADF97E7D68DFAE399FDDE95FFE298D3A95CB18638CBA55CF1D28ED8BF80 E4D496E5DB9FF6F2B4BCB97AF8F7B6FAFAB7DBD992E5DB94FDEFA9EDE09AF4E7A4EBE0A0CEC486 DBD195E9E0A7F8EFB7F1E9B3F2E9B3FEFFC9D9E4A8676F470006000F100B3F3F24ACAB7CE5E29D E2DC89F2E893EFE094EFDC9EC8BF87E7DFA4F9CF93D79454874100DFB674F7E2ABF9EEC8D0BFAC 604B410B0000867762F7F2B7F4F2ABC2BB87080000796C4FFAF3B3F6F0A1F7F5BAAEA983211C00 2D28171510001916021512009D9B730702008A875FFEFBC8F6F1CFF4F0BBF4F2B746422C59521F F2EFBA77744757542AFFFFE3958E67332C09F5EEB7F9F3B5D5D190D2CD8ED4CF96F6F0BFA5A477 BFC39AF2F3C9F5F2C4171000938759FFF8C2EBD49AE9D091CDAE6DCFAF6CE6C886FAE2ABFFF0BD F8E4B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFDFDFAF6F6E5EAEAC0E7E7B6FAFAF0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FBFAF1E9E5B4EBE7B9F9F8E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFFFFF6F0F0E9A9A9DB3D3EEB8E8EFEF6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFEFEFF19C9DDF4749E67A7A F9E5E5FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF0CECEE6A8A8F5D9D9FFFAF9FBF8FCD9BCE2A45CB6892699 872899BDA7E0B2CEC59DCF94BBA985DFACA3F0DBD2EFFBEAD0E9D08FBAA2508C7B34798263A29A ADDDB7E2F8D7F8FAEFFEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFACFEFCFA6E2A6 D1F0D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFEFEF4C2C2E55454E43D3DFAC4C4 FEEFEFFFFEFEFFFFFFFFFFFFFDF4F4EE9999E24E4EF09191F2D6D6CDC5C5DDDCDCFAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD2BF56DCC960EAD770F5E37CDCCA64DED06BD2C260DBCB6AE2D473F0E182F0E184E7D980 D3C56CE2D47BF4E68DECDE86F4E68FF6E792F3E48FF6E793F4E592F8EA97F2E796ECE494F0E897 EFE795E7DF8DE3D786E3D783DDD17CD7CC75DCCE77E0D37ADACC74E7DB85F6EA96F3E793FEF49F FDF39FF1E694FBF3A2F6EE9DF3EC9BF8F1A1FBF4A4F9F2A2F9F2A2F8F1A0F2EC98F7F19CF4ED95 E8E088F7ED96F5EB96F1E693F6E99AFBEFA1F8ED9AEFE78DF2EB93F4EC96E5DE88EFE392FBEC9A F6E492F8E390F9DF8CD5B661F0CF79AD8F3EFFF1A2FCE595F6E492F5E794F2E997EBE493F4ED9C F0E796EEE193F0E194F4E497F3E698FCF1A2F1E697F3E697F5E999E2D683EDDE8DE1D280F9EA96 FCEB99F1E08DF7E594F2DF90EAE081E0DD7CF6F6A4B5AD79261603D2B88BFEF7AFAA8A31CBAD51 FEE896EEDA8CF3E897F0E08AEEDD84E4D57EE4D98DF7F1B3A2A06F34320BDAD59B7B732ED6CB7C E8DE8ED5C5884B3405D2BC68FCE98CFEF0A3B1A26B716927E4DF8DD3CA7CE2D384F1E39DABA16F 837E32F2ED95E6DD8EE9DE8EEFE1A2B9A77E675D15EAE295F8F0B0938D51A0984EDFD67DEAE292 ECE29CEDE2A0928942D4CD7ED9D380E3DE8EE4DC9DBCB1851D0F00CBBF85E5DA8ADFD684F5EBAF 897C5A584C2BF4EBA7E4DD8DE0D78BEBDB9CF0E098EEDE8BEBDE8EF4E999F4E999E8DD8FE4D98A E7DC8DF0E498F4E89EF3E79EE9DD93E7DB91EDE194ECE191E9DE8FE8DC90EBDF95EFE39BEDE19A E8DB95ECE097F0E49CF1E59CEEE299EEDE93F4E497EDDF91EEDF91EDDC8EFDE59AB494499D792F FFE399F5DC8CE9DA87E8E08CE8DD8DE6DB8ADFD484E6DB8DEFE495E5DA8AE8DC90EBDF94EBDF95 E9DD93E9DD93ECDF98FFECAEEAB57A914408C17331F4CF7EEFDF8DF4E197FADD9BEADF99D8E196 E8DF97EBDE96E5DC92EDE39BE8DE96E6DC95E9E09BDBD28EE0D894E7DE9DEAE1A2EDE7A6EEE6A7 E8E1A1F0E9A7ECDF9BF1DC97FBE299EDCE83A08033CEB065FFEAA0EFD58BFAE59DE9D890E7DE98 EDE59FEEE7A0EBE49EE6E098E2DB93E9E299E8E097ECE39BEBE199E6DC94E5D992EDDF99F3E4A1 E1D692E4DB98E5DE9ADCD48FE9E099E2D58CEBD98EE8D085EFD487EDC97CD2A85EB78E48CDA865 DFBE7DF9DE9EEED899F1E3A0F5EEA8F1F0A6E1E494C8CC7DE6DC96CDBE7CEBDC9CE1D395ECE1A5 EFE5ABD2C791DAD09CC8BF8DDBD4A6C6BF92A9A37A58563E181604938F61DAD69FF2F0AFE1E097 DBDC92DBDD9BE1E5AEC9CEA4898F712F3009C7B57BFFE5AFCC8149924B10E6B87CFBE6B9786F52 140904000000423723E5DFC3E4E0A0E7E199AEA46F170800E1D5AFF0EAA5D7D080F2EDAF837E57 26220B8E8B6E4743361410005D5933EEEBBD160F00989464F7F2B8F2EBC1E6E1A4E9E3A1DBD39B D0C98BF3EEB2948E5C36310AFCF9CCA09E6E1E1E02EAEAABE9EAA4E5E29AEAE5A1EFE6A9F2E7B3 F3ECBEF4F1C6E7E2B4FFFDCF4B410E7F6F45EDE1A5E2CA89CEB370DFC279FFEDA4FFF2ADF8E8B4 F9F3C5FAF1C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFBF2F2D7E8E8BBEFEFD0F8F8EBFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFBF5F8E4C2F9E6BEFEF8DBFFFFF3FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F5F5D8D3D3CA8C8CD73739EB8283FEE3E3FFF9F9FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFFF1ABACDE4849 DF5D5DEFB9B8F9E8E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAD7D7F7B5B5FDD2D2FFEEEEFEF7F9F5D9E5DF8FAF BD3E71A31D59A587B09CB1999ABD68BEA364DDA77EE4CC9CDBD7B4BFB0BB9B8DAF7779975F946A 51A34B58AE4299C970E0E6B6F8F7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFBD0EFD0 A5E2A5D1F0D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAFAF1D9D9E39494DE4B4BE55353 FBDBDBFFFBFBFFFFFFFFFFFFFFFFFFFDF6F6EEA4A4E25C5CF18D8DFDCDCDF0E5E5F5F4F4FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6D569DBCA5ED3C258D5C35BECDD76EADB76E2D470DECF6DD3C564E7D977F4E589 F7E991DECF7AE1D37BEADB86E8D984F0E18DF5E693FAEB98E8D986E2D380EEE08DF5EA9AE7DE91 E8DF91EFE697E3DB8AE5DA88E0D581DBCF79DACF77DDCF76E2D579E7DA7FECE08AF3E793EBDE8B F6EC97F8EE9AEFE492F6EF9EF9F2A1F3EC9BF3EC9CFBF4A4FCF5A5F5EE9EEEE797F2EC98F2EC97 ECE68EECE58DF2E890EBE18CE8DD8AEFE293F2E597F1E693F2EA90EFE890F2EB94EFE792F2E692 F6E794F8E694FBE491DDC26EF5D680D7B861BCA04EFFF2A2F3DE8DECDB89F0E28FE8DF8DEDE594 EBE291F4E999ECDF91F8EA9CF3E396EBDE92F5E99DF2E69AF4E69AF5E89AEDDF90F4E496DCCC7E D8C978E1CF81DDCC7CD6C572DECB74EBE17FE9E785E5E492F3EDB47060455B4218FFEBA5A78B35 D6BC60FFE894F5E597F0E596EADB86EEDD85E7D780E5D88DE6E0A2ABA874262500D6D49B928C4A BDB468E8DF90E6D699543D0FCAB562FBE98CF5E598C1B27C675F1EE0DB89CAC274D9CA7BF3E4A0 B2A876787327EFEA92E8DF8FE4D989ECDE9FC7B58C625811EEE799FCF4B49E985CAEA65EE5DC86 F2E99BE6DC96DBD18C8B833ADBD485E5DE8DE8E298F4ECAD92865C251807DBD093E4DA89E7DF8D F3E9AD8D805E4B3F1FEFE7A3E9E192E9DF96F2E2A4F1E09AE5D583E5D889EFE495F0E595E5DA8B E3D78AE8DC90EBDF95EEE298F6EAA0F3E79FE8DC94E5D98FEBE091E9DD91E7DB90E6DA90E7DB93 E8DC94E9DD95E7DA94EADD97EBDF97E7DB93E9DA8FF3E398ECDF91ECDD90ECDA8EFBE196AE8C44 AA843CFCDA90F7DD90EADB8AF0E895F2E797E6DB8CE1D687E2D788E3D88AE6DA8DEEE298ECE096 E7DB91E2D68EE2D68EE6D590F4D699C1824AA04F15E39C58FFE393E6D787EFDC94F3D999E4D695 D4D78EE0D68FE9DB93E9DD91ECE096E2D78EE6DC94EAE19CDCD48FE2DA99E9E2A3E9E3A5EAE6A7 E6E2A5ECE7AADDD99BE6DC9DFAE8A5F8E29CFEE19CF9DB94B39249C2A259FFE39CF6D68EFAE29B ECE19DE5E09CE9E39FECE7A3E8E49BE2DE95E2DD93E6E096E3DB90E8DF93E7DC92DED188ECDB96 FAEBA8EADD9AE0D794E4DD99D8D18CDED68FD0C57DDBCE83E2D185EAD68AE0C77BFADB92E8C881 CFAB67B5924EDCBA77FFE6A4F0D791EEDD92EDE595E9E793C1C26FF7F0AC8E8346BAB072F2E8AB E8DEA2ECE3AAF6EDB7C7BE8C221B06140E070C07040D0600483E17CBBF8FE6D9A1E4D598D6C88B FDFAC3D1CB9C888865868E70495B3E42583A393E0DC8A969FED6AEC16C3CB16523EDC378E9D8A9 0C0A00050600383E0DCBD597D6E2AFCED089E7E19AB7AC770F0100B3A677E9E19AD7CF84F6F1B6 A29D7826250EDBDFC6A4A78C2E2902AEA874EEE9B5382F06C0BA7FF9F1B1DBD1A2EEE7A2DCD48B E7DCA0DFD790F9F1AFA0975F292201D7D3A0A6A470818247E2E6A2CCD084E7E498E3DC93F6E9A8 DECE94A89761F7E9B3F7E7B1FFFDC362521E5E4A2AC4AF6ED5BF7CFDECA6FEE9A3F5DD94FAE59F FCF7B8F0F0B4F0EFB3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAEDEDC9E3E3A9F1F1D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFCF9FFEEDEFAEBCBF5F1C7F7F8DDFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F0EFD9C3C3CB7B7BD73636EB8586FEE7E7FFFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B0B1 DE4A4BDA5C5CE6B8B8F5E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFE8E8FDD0D0F6C3C5F7D2CEFCE7DCFBE5D2 EBB19ECD5755B22537A67B9D9C928E989167AE8F81C09DA4C2B4B5C3BEC3C4B0CFBDA8CFB4A8C6 A7C4A086BE606DAC2B99B646D8D28DEDE8BFF8F4E2FFF4F0FFFAFAFFFFFFFFFFFFFFFFFFFCFFFC D1F1D1A7E3A7D2F1D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEBDBDBDBE3E3E3F1F2F2FCF6F6EEC2C2DD8080DB5E5E E57B7BFAE7E7FFFFFFFFFFFFFFFFFFFFFFFFFDF7F7EEAFAFE16B6BE98989F3BCBCF1E5E5F7F7F7 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF4EFEFEADFDFF4E7E7FEF5F5FFFCFCFDFEFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0DE72ECDB6FE4D36ACCBD54E2D36CF5E782EDDE7BF5E784EEE180E4D675 D0C366E1D27DE6D885F2E490F1E28EECDE8BF7E996FBED9AF4E693E5D683F2E491F1E390ECDF91 F0E79CE4DB8EDCD384EBE392E9DE8CF4E894F2E68FEFE48AEBDD84EADD81F3E58BECE08AF2E692 E8DC88EEE48FF2E894EEE391F2EA99F9F2A1F3EC9BF0E999F8F1A1FDF6A6FAF3A3F2EB9AF7F19D F2EC97F0E992F9F29AF2E891EEE48FF0E692FAED9EFBEEA0F4E996F4ED93F0E991EEE68FF9F19B F7EB97F7E895F4E28EF9E48DDAC069FFE78FCCAE57DAC06EF6E291F3E08FF4E491DDD27EE9DE8C ECE392E6DD8CF7EC9CEEE193FBEFA1F0E395F9EBA0F1E599F1E599F0E297F5E79AFEF2A5F5E598 E1D183BBAB5DBBAA5CBCAB5BAB9B43DBC968E1D777DFDA81F5F2A6F4ECADE2D59B331A05987C3F 9D823AEFD784F4E18AF0E493E5DC8EE7DA85EFE088F2E28BEDE095FFF7BABAB783100E00AEAB77 A0995BBAB168ECE395EDDEA2513B11BEA955FBE88DFCEB9EBDB17C66601FF1EF9EE0D88AE3D487 F2E39EB3A9767B7529F3EE96E7DF8FE6DC8CEDDFA0C3B1895F550DEAE396F0E8A8878145B3AB66 F1E697E4DB8FE4DA93E5DB94A0984FE1DA8EE1DA8DE3DC95F5ECB1706638322513E9DEA0EADF91 E6DE8DEFE5A9958863544924F3EAA7EEE698E6DD93EEDE9FF1E19AEFDF8DEFE394F4E99AEEE394 E3D889E1D689E5D98EEEE298E6DA91EBDF96F5E9A1F2E69EECE096ECE094EEE296ECE095E8DC92 E3D78EE8DC94ECE098E6D993E7DA95EEE19BEFE29CE8DB93EEE095EBDE91F2E396F3DF93FFE59C BB964FC09A53FFE198FDE396EBDD8CEFE995F1E89AEFE495F1E597E9DE8FDDD285E0D488F3E79D EDE197E4D88FE1D58EE2D78FE6D490FFE3A7A45C259E4C13EFBC77FEF2A3E3D688EDDB95ECD597 E3D698D5D18EDED48EE5D990ECE095EFE49AE6DD94E5DD95E5DD98D9D18FE1DC9AE5E0A1DBD89A D3D093C7C588D6D499E1DCA2EFE7AAF1E4A3EDDA98F3DB96F2D58FEACB849A7830E8C780FFEAA2 FFE4A0F1E5A2E3DB98E4DF9BECE7A2E9E69FE6E499DFDB91E7E195E0D98DE6DD8FEADF92DFD088 EAD993FBECA9F0E2A0D9CD8CE0D794E0D995EFE8A2ECE49CE7DD93E1D68AE8DB8FEADD91E6D78C E2CE85FEE49CBF9E59A07D38CDA964F0CF88FFE79DF1DE91EFE492F2EA9BC6C18368642D8D894E EAE3A5EBE4A5F2EAAEEBE3ACDDD7A234301D322F1A706E4BCAC8A0FAF4C5FBF2C2EBE0B4F8E6BF ECD6B0A9926C715F3C22160033310F29301B1F2A112E2D0BD0B275FFE0C6C26E479E5512DBB564 D3C597141400070C00BEC97CD9E791768544A4A862B8B5759289580E0300A79B67C0B973F8F1AA FFFFCA82825F282B14C7CFB80C120057512AF9F7C1D0C9911C1200BBB271FCF4AEEADDAAE0D88F F6EE9FE0D593EBE196F1E8A19E9459685F26E9E4ADD7D59CEAECABDFE198E1E292E2DE8DE6DC8F F0E09BEAD498FBE5A6FDE3A1F3DE9CC8AD6C9B8441B8A45FFFEDABF5E7A4FDFBB8FAEEAAF0E4A1 EFE6A3EFEDAAEAEBA6F1F2ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDFAFAFAF5F5F5F1F1F1F1F1F1F4F4F4FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F4F4F4F2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF7F7F7F3F3F3F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBF6F5F6F3F3F3F2F2F2F1F1F1F0F0F0F3F3F3F7F7F7FCFCFCFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFCFCF5ECECC7E4E4ADF2F2D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFFFCFAF6F2D9EAE7B4EEEDC6FDFDF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EDEDE4BABAD67271D83435EB8E8FFEF6F6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1B1B1DD4B4CD76969E1CCCCF3F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFAFAFAF7F7F7F5F5F5F3F3F3F1F1F1F0F0F0F1F1F1F3F3F3F4F4F4F8F8F8FDFDFDFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F4F4F4F4F4F4FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAF5F5F5 F1F1F1F1F1F1F5F5F5FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCF7F7F7F4F4F4F2F2F2F0F0F0F1F1F1F2F2F2F6F6F6FBFBFBFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9FCEBE9E9B8B5EAB3A8F6CDB4 F4DEB3DEBE8AC16642A92F23A6758D9B758A926576977BAD9C92DD9F9CE7AEACE9CCC7ECDDD7ED E7E3EBE6EDE3C7D595A8B53DB5AE40D3BE76DCD195E3DDB2F2DBD3F6E7E6F6F5F3F8F8F8FAF9FA F5F7F5CAE9CAA1DBA1CBEACBFAF9FAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF2F2F2C9C9C9A7A7A7B7B7B7D2D3D3EAE3E3E7ADADDC7B7B DD8282E7ABABFBF0F0FFFFFFFFFFFFFFFFFFFFFFFFFDF8F8EEBABADE7979DE8383E1A5A5E1D5D5 EEEEEEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEE5D5D5CEAFAFE6C5C5FDE5E5FFF8F8FDFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD0BE54D5C45BF4E67EF5E67EE0D16BDFD26CEDDF7BF3E684E1D573 EADD7DEDE085E9DD8AE9DD8DEDE18FF5E997F9EE9BFBF09EF2E795E7DB88F4E894F4E894DFD380 DBCF80EAE195EDE497E0D788E2DA89E8DD8BE9DD8ADFD37DEBE087EEE087F0E487F5E78DF5E993 F6EA96F4E894F5EB96F7EC98EEE391EFE796F4ED9CF5EE9DF1EA9AF2EB9BF7F0A0F5EE9EF1E999 F4EE9AF3ED98F0E991F1EA92F4EA93F0E691F3E895F7EA9BF5E89AF1E793ECE58AE7E086E8E188 EDE78EF5E995F5E691F4E28DF0DB85D3B962FEE188BB9A42F5E08BF3E190EBDA88E6D985E7DB88 F2E795F0E595F1E696EFE494EFE294F2E395F5E799F7EBA0FAEEA4F5E99FF6E89DF8EA9FF4E69B F6E699FFF0A3F8E89BF5E496FAE99CFAEB90EFDF76EDE386F1E99BF1EBA4EEE69DF9ECA6B29B5A 3116008F743EF3DF9AF3E58DD7CF7CCFC87AF5E995E7D87FF5E58EF7E89EF5EBAED3D09D211F0B 828051C7C187ACA460D1C97DE8DC9F452F10BCA956FBE98EF7E89CB1A670635E1DEAE898E1D98D E2D689E7D994A39967807B2FF0EC93E0D788E8DD8DE9DB9CC4B38A574D05E9E194F5EDAD6E682C C1B876F1E59AD7CE83ECE298C8BE76A9A158E6DE94E0D88FE8E19DD8D0973C32043B2F1AE2D799 F0E498D9D080EADFA58D805D382D0CEDE4A0F2EA9AE3DA8EE4D594E6D68CF8E995ECE091F7EC9F EDE195DFD387E1D58BE8DC92E3D78CF3E79FE6DA92E7DB93F2E69EEDE199F2E69DF4E89EEEE298 EBDF95E8DC92E9DD94F3E79FEBDE98F1E49FECDF9BEEE19CF0E49BECE094EDE195FBECA1EED98F FFE69EA27C36BD9750FFE8A1F5DE90EBDF8DE9E491EFE697EDE294E9DD91E8DC90E7DB90E5D98F F0E49AF1E59DE8DC94EADF96E7DC93D9C582E2B77C964813AC5921F6D08AEFDF90EDE498F3E09F ECDA9EF0E2A7DCD494E6DE99E2D891E8DD95F0E69EE9E098E4DD96E6DE9AD7D08EE2DD9CE7E2A3 DFDC9FE1DFA3DAD99EDAD89EE5E0A6ECE5A8EAE0A1EDDF9DF7E4A0F1D892FBE79EE1C37BAC8A42 E0BD76FFEAA4EBDA99E9DF9DE2D996E7E19DEAE79FDCDA90D1CF84DDD78DE7E195E2D98CEEE197 E8D991F4E59EF9EAA5E4D793DDD290E7DE9AE7DF9BF4EDA8F8F2AADFD88EDED88BE7E094E6E598 E6E599E1DA8FEBDA91F9E098E2C27BC19E57B5924BDBBA74FBE7A0F6E099F9F2AFC4C1882B2D00 AFAD75E8E4A6C0BA7AF1EAAAE6DFA2EEE8AFE9E5AFE1DEB1E5E4BDE2E3BACED1A3999674A89F8C 8C766A5C42302A0E0052390DBDA569EBE3ABF7EBC2E5E0C8EAE8C2FFFCCDBF8C7D9F593CB7773F E1BE79FFF9D17D7A633C3A1CDED992FAF6A4C1BE7BC5C6845F5E27645D360D0400B2A870F6F1B0 F6EEADF6F2BB6F6F4B090D0521291C161E04DBD6A4FFFEC1BEB578180C00D4CD88F7EFA7E0D39C E4DB90E8DF8FE8DA96EBDF93E8E095DBD292E8DFA2F3ECB2DCD79BE1DE9BDCD98DDBD585E6DE8A F0E293F5E19BFDE5A4E0C47DC6A051CDA85BD7B56BF6DF96F3DD97FBECA9F1E7A6E8E2A5E9E8AC F3F4BAE3E5AAE5E5A3F4F2ADF3F1ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF3F3F3D6D6D6ADADAD8787878B8B8BA5A5A5E8E8E8FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECECECC7C7C79F9F9F959595E3E3E3FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEAEAEABDBDBD9495947F7F7F7A7A7A7B7B7B7B7B7B7B7B7B7B7B7B 7A7A7A7C7C7C7E7E7E7F7F7F838383B5B5B5EAEAEAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDFDFDFB0B1B09898988A8A8A808080808080949494BDBDBDE5E5E5F8F8F8FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9EDF0F0D2ECECC5F0F0D0F8F8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F4E3F0E2B6F4E9BFFFFDECFFFFFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0EAEBCFB3B3C16969D53233EB9091FEFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF1B0B1DD4C4DD66F70DFD7D7F2F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDEDEDEDD9D9D9C3C3C3ABABAB9494948383837F7F7F888888959595A4A4A4CBCBCBF2F2F2 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE6E6E6BFBFBF9B9B9B9E9E9EEDEDEDFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4D4D4D4 AAAAAA868686878787AFAFAFE6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEEEEEBEBEBEA1A1A18C8C8C7F7F7F828282919191B7B7B7E0E0E0F5F5F5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCF7E5E5BF9FE0A182 E79E86E8AC90CCA17D8B533857180C593B47604B566C586280779D8B8BC68E8FCB999AC9B1B2C8 C0C1C8C9CAC6CCCBC3B7AE7E9D8B30A18C40B1A177B3AC87B2AE91B2A29CB1A79FB4B3A4C0C0BB C7C6C9C4C5C59FB69F7AA87A9FB69FC7C6C7C6C6C6C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C7C7C7C1C1C1A5A5A58D8D8D8E8E8E8D8E8E938B8BB77575 DA7C7CE8ADADF3DEDEFDF9F9FFFFFFFFFFFFFFFFFFFFFFFFFDF9F9EEC5C5DC8585D97474DA8585 DAC8C8EAE9E9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFCFCF0F2F2DCBEBECE9191E8B2B2FDDEDEFFF6F6FDFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D46BE3D46DECDD77EDDF79EBDD7AEFE17EF1E483F0E383 DCCF70D6CB6CF7EC93FEF2A2FBEEA0F2E496FDF3A5FAED9EE6D98AE8DC8AEDE18FF4E896F0E492 EFE390EADF8FECE394EDE495EAE291EFE796EADF8DE4D985DDD17BEBE088F3E58DF6E88FF3E58C F4E892F6EA96F5E995F6EC97FAF09CF4E997F6EE9DF4ED9CF2EB9AF1EA9AF2EB9BF3EC9CEEE797 F0E998F9F39FF9F39EF3EC95F4EC95FDF39CFDF39EFFF5A2FFF2A3F7EA9CF1E692F1EA8FEDE68C EEE78EF2EB93F6EA94FBED97F0DE88EDD881D1B75FFDE890C8A84EFDEA93F2E391EADC89EDE18D F1E591F7EC9AEDE292EEE393EEE393EFE294F1E496F6E99BF0E498F5E99DF5E99DF8EA9FFAEC9F F6E99BFDEDA0F7E799EBDB8DEEDD8FFAE99AFEEE93F6E67CF6E793F0E59FEDE59FF1EA99F8EB9A FCE6A0896D42523621FAF8C1DED082DDD788E6E094F6EC99E6D77FF9E993EDDF93E6DDA0E8E2B1 2F2D1B636134D0CC959F9857E8E095E6D99C3D2711BFAC59F8E78DF1E398B5AB74706C2AEDEC9C E7E095E0D589E9DC968C8456827D33E7E38AE7DE8EE9DE8FECDEA0BEAC83635911F0E89BF4ECAC 655F23CCC383EBDE98DBD289E9E095A2994EC8C075F6EEA5F3EAA5EDE5A6D3C9925A4F1F53481E DCD195EADE94EAE094FCF1B89C8F67544920F7EEAAF0E897E7DF91F1E29FEBDB8FF6E790F2E598 F6EA9EF0E498ECE097F2E69CF4E89EEDE199F6EAA2E8DC94E8DB95F4E7A1F0E39DEDE099EDE199 EADE95ECE096EEE298E5D98FEADE96DCCF89E5D893E3D594F3E5A3EFE49DEEE59AF3E79DF7E89E EED88FFFE7A0976F2AC09954FFE29AEDD589E4D788E8E693EFE697EBDF93E9DD91EDE198F1E59B F1E59BEEE29BF9EDA5F5E9A1F3E6A0ECE09AE5D08DE0B87C9D4917D07C45FCD58CEBE292F0ECA2 E6D799E3D79DE7DA9FD5C98CBEB977DBD68EE5DD95F3EBA3EBE49EE6DF99E8E29EDFDA97E1DC9C DFDB9CE0DC9DEAE6A7E2DEA1E3E0A3E2DC9EE8E2A3EBE3A2E7DE9AF1E49EF6E59DFBE59CFFE59B CCAF65A7883DE6C87FFFEAA8F4E19FECDF9BECE29DE4DE96DBD78ED9D88DDBD58BDFD98FD4CB81 EFE29AE7D992F0E39BEEE19BE5D894D9CE8CE2D998EDE5A4E8E19DEAE5A0E7E39AD6D288D7D48A DEE398E0E69EE3E39AE6DD95F2E098FFEAA4F5D794CCAD6A9A7B3BD6B87CFFE9B0FFF7C14B4819 4C4E2BE4E2ABEFE8ACA59C59E0D790E1D48FE4D695E5D99DD1C691C8BF8FDDD3A9D1BF9F3E290E 2C1400110000381D009A7F4FF5DCA1FFF7BAD9C594B7A588A594898488767F8B725A42326A3B23 8552309D8057D0C3A3FEF6E1E3CDB8FDF6D2FFEEC1FFF8C5F9F1BAE7E6BAC2BB9E0D0200D4C78C FFF6B5DDD292FFF9C279754C000000030A00828A5AFFFDC8EAE29FC4BC7B4C4010EBE29DE8E096 E5D9A1EEE59AEBE293F1E3A2F4E89EEBE399DFD795E5DD9FE5DA9EF1E6A9F1E3A1E6D98EE4D585 ECDB89FEEC9DE7D288B49B58AB883BCCA651F9D481FFE99CFEEFA4EED992EADF9CE8E2A4DBDBA1 D8DDA7E5EFBACFD8A4E4E1A9F2EAB1F3ECB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDBDBDB999999525252202020262626565656D4D4D4FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDBDBDB9595954E4E4E3B3B3BCBCBCBFBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC9191915152513132312B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2C2C2C2626261818180E0E0E1A1A1A7A7A7ADFDFDFF9F9F9FEFEFEFFFFFFFFFFFFFFFFFF FCFCFCF4F4F4E2E2E2A7A7A76869684F504F4141413333332D2D2D3E3E3E717171ADADADEAEAEA FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3DBE4E4AEEBEBC2FBFBF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF5ECFDE8CDFBEAC4FAF8D6FDFDEEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEAEABFB1B0B16A6AD33C3CEC9697FEFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF1B0B1DD4B4CD7696AE1CDCDF3F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFAD0D0D09F9F9F7979795A5A5A4141413131313030303A3A3A4444444D4D4D818181 BCBCBCE3E3E3F6F6F6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CFCFCF8787874545454C4C4CDDDDDD FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFADDDDDD 9292924F4F4F1E1E1E1F1F1F696969D0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF6F6F6E2E2E2BABABA7A7A7A5A5A5A4444443232322E2E2E393939656565A6A6A6DDDDDD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFCFCE7F7F3CAE8D49D E2B188E29588E79897CB94916A4E4B1811101A16183642355C755B8595889CA1A2A2A3A8A4A4A9 A7A7A9A8A8A9A9A9A3A6A78B988C56896E2B948056A5A299A7A6A3A0A09D918F8E8C8B7B8F8F70 9C9C88A2A3999DA39B8496856F8B6F8C9A8CAAA9AAA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A8A8A8A2A2A2979797808080636464575151 996363DE9797F6D5D5FEFFFFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFDFAFAF1D1D1E29191DD6666 DB6666DBC2C2EBEAEAFCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF7F7FDF4F4 FBF6F6FCFCFCFAF9F9E8E1E1DFA3A3DD7373F0A9A9FEE3E3FFF9F9FDFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDF78F3E37FECDE7AE4D573E0D272EFE181E5D879 E4D779F6E98CE6DA7FEEE38BEFE295F2E59AFAEEA1FFF8AAF2E698E3D787EFE394F5E997FAEE9C F5EA98F7EB98F0E896EFE796EEE694EBE391ECE490EADF8CEBDF8BE4D884EBDF8AEFE08CF6E790 F2E38CF1E590F6EA96F6EA96F8EE99FEF3A0FCF19FFBF3A2F6EE9DF3EC9BF5EE9EF7F0A0F7F0A0 F4ED9DF2EA9AF6F09CF4EE99EDE68EEDE68EF6EC95F6EC97FCF19EFEF2A3F9ED9EF2E893EFE88C F0E98FF3EC92F3EC93F2E690F3E58FF8E690F5DF88F6DE85F1D278D9BD63FBEA93EFE691F0E490 F5EA95F4E995EBDF8DEEE393EFE494EEE393EEE193F0E395F5E89AE7DC8FF0E497F1E598F5E89B F8EB9DF3E698F0E092EFE091EFE091F4E393F7E696F9E68FF1DF80F1E291F2E79EF1E99DF0E793 F0E38EEDD990F4DCA92A1200887546FAF1B1E8E49DF4F1A5EAE18EE8D981F0E089E5D689EBDFA5 DCD7A8383623474519ACA975767132FEF8AEE1D4983F2B10C3B05DE7D67CEEDF96AAA06C746F2F F1F0A0E7E397D8CD80E7DA97807745A49F53E6E28AE1D889DDD383E8DA9B9F8E657F752DE0D98B DBD393565014E4DA9DE5D896F3E9A2DFD68B948B3DE4DD91E7DF97E5DC9AE2DA9FB3A9734D4212 5C5129EBDFA6E9DD96EAE197F3E8B186785C281C00E3DA96DBD482DCD483EDDE98E4D584EBDD83 F5E89AF1E599E9DD92EADE94EDE198EADE94EADE96F2E69EEADD96ECDF99F3E6A0EEE19CE5D892 E5D893E6DA91F0E49AF6EA9FF6EA9FEDE196E0D38DEEE09DEFE1A0DCCE8FF0E59FE7DF94EBE096 F0E197F1DA92FBDE99835A16C89F5AFFDF99EDD589E0D384E5E38FE1D88BEBDE93F0E498EEE298 EADE94EADE94EEE29AEEE29AE4D891E4D792F2E59FFEE8A5C6945AA44A19E29058ECCE85D6D484 D2D48AD0C587C6BF86D8CD95EDDFA5C6C481DDDC96DEDB95E1DE97DFDA95E3DF9BE8E4A1DBD696 DFDA9ADAD697D1CD8ED7D393E3DC9EDBD495E1D898F2E9A8F2EAA8E3DD97EAE29AF4E99FE2D489 E4D285FFF0A3E0C7799E8338E3C785FFE9A8FCEAA5E9DA96E6DE96E7E299E5E198E2DB93E3DD94 D8CE87F8E9A5ECDF98E2D990E0D48EE1D892D5CB88DCD392EEE5A4E0D898E6E19DF3EFAAD8D78D D6D58BE2E39CD6D794D7D590EAE39CEFE49CEEDD98FBE6A4FAE7AAE4CB93AD9462E4CA9ECBB487 120B00A9A678FEFBC8E9DB9EF3E19DECD68BF4E094FDE9A0F0D895E4CC8EE8D39AEDD39DE2B98A D9B0829973469E7B4EC2A47DA288637E69454C3D201C12000000000704000E1809081408261606 2600002802001200000500001D16075E49417E574EB0806DCDA383B2A375F0EAC58E80692B1800 EDDA99F2DB99F8ECA9F3E0A36D602E0B01004A4829F9FCC1EBE5A8E8E19BF0EAA5E1D6A0F5EDA6 F5EDA3F3E7B0F1E7A0EDE499FDF3B6F7EBA6EBE49CEBE8A4E4DC9DEADCA1F7E3A9F2DA99F5DE96 FFE697F5DE8CCBB263A68F44BCA560EDD285FFE998FAE797FEE598FAE79CEDDF99EAE2A1D7D496 E1E3A9E8EEB7E2EBB6E0E7B2EAE5B0F3E9B4F7EDB8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCF4F5F4B7B7B75C5C5C2121211919191E1E1E484848D0D0D0FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBD8D8D89292924F4F4F3F3F3FCCCCCCFBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5AEAEAE848584777877747474757575757575 7575757474747878785D5D5D2323230000001A1A1A838383EBEBEBFDFDFDFFFFFFFFFFFFFFFFFF FCFCFCEDEDEDCCCCCC8484846768675E5E5E7272727E7E7E7777776363634949494243425D5D5D D1D1D1FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F2D8E3E3AAEBEBC4FDFDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FEF4E8F4EDC8ECEBB9F6F6DE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3EBEAD9B7B6CB7A7AD95758EDA5A6 FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1B1B2DE4B4CDA5B5BE6B6B6F5E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6B2B2B26A6A6A4B4B4B4848485353536666667272726D6D6D5B5B5B3A3A3A 3E3E3E595959A3A3A3D8D8D8F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CCCCCC848484474747505050 DEDEDEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEBEBEB B8B8B84E4E4E2727271818181515155E5E5ECDCDCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF4F4F4CECECE9292926464645C5C5C6D6D6D7F7F7F7A7A7A6262624646463535355A5A5A B9B9B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FEFEE8F4F4CBEBE9B3 EFE8C1F2DECAF2D1CCF6D3D4E0C7C88D82834446474647476675668DAE8DADCCACC3D6C2D2D9D1 D9D8D8D8D8D7D7D7D7D4D4CBC6C699BCAE6EB89A58C6B28FD6D4D1D8D8DAD4D4D5CCCCCCCACABA C9C9A6C5C498B9C099ACBFA2A5BAA6ADB8ACC4C8C4D8D7D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D5D5D5CACACAB6B6B6949494848484 898787BFA8A8EFD2D2FDF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBFADCDCF09F9F E46060DA5252DBBEBEEBE9E9FCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFDFFEDEDFDD6D6 F4C9C9ECD2D2F5E7E7FCEFEFF4CBCBE87E7EE14747F19F9FFEEEEEFFFEFEFDFEFEF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D471E2D270E8DA79ECDE7EE9DA7BE0D476 E3D67AD1C46AE5DA7FF2E78DF4E892EADF92E5D98FF3E79CF5E99CEEE396F2E798F4E999EFE495 F3E897EFE492E8DD8BE2D986E4DC87E3DB87E2DA86E5DD88EBE18CEFE38FE8DC88E7DB87E2D380 EBDC89EDDD8AF7EB97FBEF9BF7EB97F3E994F7EC99F6EA98F7EF9EF5ED9CF3EC9BF5EE9EF7F0A0 F8F1A1F5EE9EEFE897F0EA96EFE994EEE78FF0E991F0E68FEDE38EF1E693F6E99AF4E799EDE38E E9E284EDE68BF1EA8FF0E98FEDE18BECDE87FBEA92E9D37BFDE48BC0A248EFD278F6E78FEBE48F E8DF8AECE28DF3E894F1E593F1E495F1E495ECDF90E6D98BE4D889E4D98AE7DC8DEDE293EDE293 F2E496F4E798F0E394F3E493F1E291F3E493F3E290F6E593FCEA98F7E092EBDC8BEBE28EF5EE98 F8EE9BF9EA9BFEF3ACF3DA9E856F3E140500A29765F1EEB2F6F4A9E3DB89F0E18AE9D982F1E194 ECE0A6E8E3B3524F34333206B2AF7C6C682CE2DE94DACE9238230BC0AF5DFCEF95F3E69C9D945F 888444F0EF9FE6E197EEE398F2E5A2635A28C6C175E7E28ADBD283DDD282E9DB9D7D6B42A89E57 FCF5A7AFA6675E571CFFF9BDE5D799F5EBA6C0B66CA59C4DEFE89AE5DC95EAE0A2EDE4AC978D59 3F35045F5536F0E3ACE3D595E7DD97F7EBB7958769211600CFC681D7D07DD8D17EE5D78CDED07B E2D577EDE191E9DD92E5D98FE9DD93EBDF97E4D890E4D890ECDF99EBDE98EDE09AF0E39DEDE09B E9DC98E6D993E5D990EEE298F0E498E9DD92F2E69BE0D38DFEF0AE9A8C4B7C6E30FCF2ADE3DB90 E4DA90E9D991F0D892EBC984835814DDB672FFEAA4F6DE92E0D585DEDB89E2D98CECE095EEE298 E9DD93EBDF96F3E79FEEE29AEBDF98E3D690E1D48EECE099F9E3A09B692DAE5221F1A069EAD588 CDD282B6BA71AFA669C7C48BACA36DD8C890E0E09ED5D993D9D794DBD997E1DD9AE3E09DD5D28F CFCB8ADFDA9AE1DC9CD1CA8BCEC787E3DB9CDFD594E8DF9AF2E9A3EBE49FE5E198F1ECA3DDD98C DAD285E8DC8DE9DA8CF1E08ED8C173BE9C59DBBD7CFFEBA8F8EEA9EADE98EBE39BDFDA91E2DC95 E5DD97E1D792EEDF9CE8DC97DCD58BDAD28AE1D993D8CF8CD9D190E5DD9CDCD493DCD795DEDA96 C9C67ED1D189D5CF8DD0C689D3CA8ADDD491E5DB96EAE29DEBE2A2EDE1A7FFFAC9E6D6AE6A5839 24140B190C00574827DBCC9DECD399F6D792FFEB9DFFDD8DE9C475DBB567CAA35EBB9756C29757 B4813BA7753380551A7854255539171D09080F0100221B1254533E939670C4CC94CCDCABD9E0C0 9F8566764624B48452866F409F9A73656350372B1F0D000029080854372995855D9485611E0500 6D5420C6A962D8B56FF3D38CFFE7A274581F3E270DD0C291E4DD96DFDA98DAD58EF5F1AAE8DEA6 ECE59DE1DB92EADFAAEDE39EE5DB95E7DCA5D8CE8FE1DB96E4E49EE6DD9FDFCF93F7DCA5FFDEA0 F4D08CD8B367B18E3FBFA254EEDA90FDF2ABF6E69EEEE197EADF96EEE39AF3EAA3DDD693E7E3A4 E2DEA0D5D59AD4D59AEAEBB3E6E8ADEFEAAFF2E9AFF9F1B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8D7D8D78E8F8E3939391718172C2D2C2C2C2C4A4A4AD1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE2E2E2AFAFAF828282797979DBDBDB FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2D8D8D8CACACACDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCCCCCCCACACA9999993D3D3D0A0A0A3E3E3E9F9F9FF9F9F9FFFFFFFFFFFFFFFFFF FFFFFFF8F8F8D2D2D29697963838384A4A4A7F7F7FB1B2B1CBCBCBCBCBCBB2B2B2797979353635 202020ACACACEAEAEAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9F4F6F0D4EAE8B5F0F0CDFDFDF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFBEDEECCE1E1A5 F0F0D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBECECEFBCBBE48786DF6C6C EEB0B0FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2B7B7DF5555DB5050E89898F5D7D7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5F5AFAFAF6969695B5B5B6E6E6E8E8E8EB4B4B4C6C6C6B9B9B9979797 5C5C5C272727101010616161B2B2B2EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAD9D9D9A5A5A57C7C7C 858585E7E7E7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5 CDCDCD8B8B8B2F2F2F2222222B2B2B202020606060CDCDCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFADBDBDB9999994C4C4C323232707070A3A3A3CBCBCBD1D1D1AFAFAF7979792D2D2D 2424248F8F8FF1F1F1FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FDFDEAF7F7CDEDEDBA E7E7B6F7F7E7FFFFFFFFFFFFFFFFFFF4F6F6C0C1C1939393949394ACB7ACC6E1C6CAF3CAD7FAD7 F3FFF3FFFFFFFFFFFFFFFFFFFDFBEFE6E0A1E1CE83E7C888F5E2C2FFFFFAFFFFFFFFFFFFFFFFFF FFFFF7FFFFE3F2F0C2D4E2AAB5D8A2BDDABAE6E9E5F8F7F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE8E8E8CDCDCDB6B6B6 BABABACCCCCCEAEBEBFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFE7E7 FBADADE95B5BDA4040DBBABAEBE9E9FCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFEF2F2F9D8D8F7B8B8 F59999E98B8BDF9494EAAAAAF7B3B3F79191EF5F5FE84444F4A9A9FEF7F7FFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF7FEDDD7DE6D778E7D97BE7DA7C D8CB6FEBE085ECE188E4D980EADF86E6DA88F8ECA3F2E69CE8DC92E5D98EE9DD91EFE495EDE293 E8DD8CF0E594F1E693E9DE8CE6DC89E1DA82E1DA82EBE48CF0E991EFE590EEE28EEEE28EEBE08E DED07FE8D988EDDE8DF4E895F9ED99F5E995F0E691F3E995F4E997F6EE9DF9F2A1F8F1A0F4ED9D F4ED9DF7F0A0FAF3A4F3EC9CF7F19DF6F09CF7F098F8F098EEE38CECE28DF0E591F4E798F2E597 EEE48FEDE689EBE489EDE68CF0EA90F4E892F4E58EF9E890E8D37BEAD076BB9D43FFE68CF3E58C ECE690E7DF8AE7DD88F0E591F2E694ECDF90ECDF90EADD8EE5DA8BE5DA8BE9DE8FECE191EFE494 EDE292F0E394F3E697F0E492F1E292F2E390F2E390EAD987EADA85F6E298FAE3A0F2E18FEFE586 F4EE8DFAEF9DF6E69FFDEFAEE7D18EC5B4759385511C120CC5C28FFBF9B0E3DB8AFAED96F6E690 E9D98DEEE2A8F9F1C3666443201E00B8B584676328E9E59CCABD83412D02D2C272FFF69CFAEEA3 756D37A7A363EBEA9ADCD78DFCF1A7C5B8754F4715DDD88CEBE68EE4DB8CEEE494E5D79968562D C9BF78EEE79A655D1D90894EF6EBB2E7D99DE5DB95BDB367D1C879E5DE90EAE19AE7DD9FDFD69F 807643615726645936F5E8B1E9DA9DE8DE9AEDE1B0908267090000D3CA85F0EA94EAE38FE8DA8F E4D67FE4D776EDE191EEE299EDE197F0E49AF1E59CEBDF97EDE198EFE29CEEE19BF0E39FF4E7A3 F2E5A2EEE09EE9DC96E5DA91EBDF96E8DC90E3D78CEEE298F4E7A1E5D8943F3102AC9F60FFF5B1 E6DE93EDE398EDDD95F7DF99EBCD887B4F0EE3BB7AFFE7A1FCE49AEDE293EBE896EAE094EADE94 E9DD93EADE94EBDF96EADE96E9DD95EBDE98EEE19BF0E39FF2E6A2F8E29F845115AE5221F8A971 DDCE81B1BC6AB0B86EC9C287DEE0A6BCB47EAB9A63DEE09ED6DC97DBDD9AE3E2A2E8E7A6E6E5A4 D7D393D2CD8CDDD896E5DD9CE6DD9CE1D897E0D695E0D38EECDD98E7DE96E4DD95E8E59ADFDE93 CFCD80DAD989D8D282EDE594D7CB78FBE898ECC882B48F4DDFC07DFFF1AAEFE199E7DF96E4DE95 DED790D4CC89DCD18FDDCF8EEADF99DCD78DDFD890E3DD96DBD490D4CC8BC5BD7DC4BC7BD6D18F CECA86C2BF79CECC85D6C68AE3CC94E7D49AE5D799EEE6A3F1EBAAF1F1B1EFEDB68E8C60262200 100A061B1003100100432B19DFC197FDE5ADEFCC87C59547CB9744C28E3AB78232BB873DE0AE68 FDD18FA984478E6C3C5E411F1F0C00140405584F2DADAA7DEBE8B3FFFAC1FFF3BEEDDEADEDE2A9 FFFFC99C6746985323FFDC90BDA24AF0F0B5F3FCDFF1F6DDB6B88E61603A0907032B1E00432B10 341409CEAC75CFAB60B3893D9A6E23C2994ED4AF6DF2D1ABFFEFB5E5D785F0E9A3E6E299F6F2A9 D9D39AEBE59ED6D088EFE5B1EFE5A3D4CA88AFA36F8D8148BFB977EBEDA7E6E1A1FAE6ACFCDAA4 DBB076A97A39C8994FECC478F7D78AFFF0A6FCEEA8EAE5A1E7EBA8F7F8B6D9DB99DDDE9DE7E7A7 EBE7A8E7E3A4D6D293D0CA8CE9E2A4E5DF9EEAE79FE8E69CF1EEA6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F6768675253524D4E4D4A4B4A393A394A4A4AD1D1D1 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEF9F9F9EEEEEEE4E4E4E1E1E1 F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFDFDFDFEFEFEFDFDFDFCFCFCFCFCFC FCFCFCFCFCFCFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F4F4F4F4F4F4F4F4F4 F4F4F4F4F4F4F5F5F5F0F0F0D8D8D89595953C3C3C1E1E1E757575C0C0C0FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFECECECA2A2A25859583131317A7A7AD7D7D7F2F2F2F4F4F4F3F3F3E7E8E7BDBEBD 5A5A5A1A1A1A797979C1C1C1F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFE8D1FDE9C7FBF5D0FCFDE8FFFFFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEEEECC E2E2A7F1F1D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAECEBEDBBBAE28585 DE6A6AEEB0B0FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C5C5E17070DA5050E27A7AF3C8C8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE0E0E0CACACAD8D8D8E1E1E1E8E8E8EFEFEFF3F3F3F0F0F0 E4E4E4C2C2C2656565131313343434878787DDDDDDFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFD FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFEFEFEF7F7F7EBEBEB E2E2E2E3E3E3FAFAFAFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFDFDFDFEFEFEFDFDFDFCFCFCFCFCFC FCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5E5E59797975A5A5A5E5E5E525252424242262626616161CDCDCDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2A4A4A45757573A3A3A606060CFCFCFECECECF4F4F4F6F6F6E7E7E7C3C3C3 606060232323666666BCBCBCF1F1F1FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFEE9F6F6CCE5E5A9 EDEDC6F9F9EDFEFEFBFFFFFFFFFFFFFFFFFFFDFDFDF2F2F2E8E8E8E9E9E9EEF0EEECF6ECBEEABE B7E8B7E2F6E2FFFFFFFFFFFFFFFFFEFAF5E5E3CB7CE6C675F5D4A2FDECD9FFFDFAFFFFFFFFFFFF FFFFFFFFFFFDFEFEF9FFFDF7D3E7C39ACC81A9D396EFF5ECFEFDFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9DADADAC5C5C5 E3E3E3F0F0F0F5F5F5FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD FFF2F2FABCBCE95757DA2F2FDBB6B6EBE9E9FCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFEFEFFBCECEEA7575 E14747DF3D3DDE3D3DDC3A3ADF3030E12626E12020EB5454F89898FDDADAFFFBFBFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7D776DBCB6BE3D474EEDF81 F0E385DBCE72DDCF75EDE188EBDE86ECDF88E4D886EDE296F1E59AE3D78BEDE195F4E89BEFE496 F8ED9EF3E898F0E596F2E796EFE494EDE290E7DC89E5DA86EBE08DEEE390EEE28FEFE18EF0E28F F0E390E8D987EDDE8CEFE18EF1E690F3EA91F0E790F0E791F4EB96F2E895F9F19DFCF5A0FBF4A0 F6EF9BF5EE98F9F19FFBF3AAF6EEA5F9F0A4F9F2A2F5EC9AF1E996F0E692F2E994F3EA95F3EA98 F3E796F1E691EBE289E5DE84E8E388EEE98DF3EA8FEFE086F9E88FE9D177DEC269C5A74FFFEB92 F2E28AEBE28AEADF87E8DE85E9DB87E5D885E8DB8BEDDF91EEE091EADB8FECDF92F6E99CEFE493 EDE392EEE494F2E898F5E99BF5E89AE3D688E7DC8CF0E494ECDF8DEEE18EFAE999F3DC91F9EA93 F3EB8EEEE88FF1E596F4DD95FFF7B2BC9C53C4AA66FFF1B760532C3A3517D6D693F4EFA8F0E799 ECE391F6EDA0EFE6A2EEE9AE746F43252000BBB5896C6536EBE3A0AC9F6259450FEFDC8FF8E695 F4E89D433C07BCBB74E7E89CDFDA91FAF0A8716523797232F6F1A1F1ED98E1DA8DF5ECA1C4BA79 887B47EFE5A1D9D18C5D5519DCD699E6DD9DE3D995C8BE79BEB56BEFE796D8D17CE3DB8AE0D793 DCD4A173693A70693979733FE9DEA2EADC9DE5DA98F0E5ADA1976A191000C1BB77EFE89AEBE395 EBE194EBDF8BF0E48BEADE8FEEE297E6DA8DE7DB90E9DD92ECE095F0E499ECE096E6DA91EADD95 F1E49CF2E5A0ECDF9FE3D791E4DD8EECE592E6DE8DE5DE91DCD38EF4EAA98577494F411EFEEFAB F3E49CE9DD92EFE59BEDDD95F2DD97E8CF878E5715EEBA74FDE596F2E492F0E796EEE293F2E095 EBDF91E5E292EBEA9CEDE59BE2D28CEDDA95EBDC98ECE29FE6DC9CF2E6A8EDC98C944A0DB4682B F9CA85DFD688CBCA7DC7C77CBAB973C1C47FC3BD7CA09052C2BF7ECACB85D2D18AE2E09AE3E19E E9E5A4E2DD9CD8D392D1CD8ADCD895EEE8A4E3DF97E0DB92DCD38BE6DC93E3DB92DBD58BE8E399 CECB81D1CF83D0CD80EBE697DBD486DBD284DFD287F4DA98E6C684B3924DCCAB64FFE79CE2CC7C F0E191EAE092E3DB91EBE39DDAD391DBD796F1EFB0F5F3B3EFEDAFE1E0A1E8E7A7C3C281A9A766 D8D695D5D390C9C782EBE7A3E1D4A7F2E0B9F3EAB2F4F0B9ECECC1C0C0A18688602B2C10171400 7A7045DFD6A8A78E649C6F49B58055AF7B429B6424B78232CA9540D8A653F1C377F8D391FFE3AA DFBD899676486C55284933191A060063543BCBC59FF5F0BFFDFCBCE8E59EDED890DAD08FD6CA91 E6D69AF5D69D95532F95571BFDCC76B2832FEBDB8EDCE3A2DBDDABEFF3B7F6F8C3D3D1B05C583D 000000281811CAC0A1FFF6CDFADCABD2B073DEB76DBD9448B28547C89B53FCD180F4CD88FCE099 F3E39AE2D896E4E39BE0E09BDDD8A2D5CE92E5DB9FEBE0AEE5DDA6F1ECAFD0BF78CDB571D5BA7A B7985AB39253C7A966F3D68FF5E59EF2DC97F4E29EF2E2A2ECEAA6E8EEA8EAEDACEBECB0F3F2B9 E7E3AFF9F3BFE6DEA8EFE6ACEDE5A6EBE29FEDE69DF9F6A6F2F09DF6F4A2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE9E9E9C2C2C26C6C6C606060888A888B8C8B5859583B3C3B4A4A4A D1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF5F5E6DBDBBEBBBB A3A4A49797978D8D8D8A8A8A969696A2A2A2B3B3B3CCCCCCE5E5E5F6F6F6EEEEEECACACAA5A5A5 9A9A9AE5E5E5FDFDFDFFFFFFFFFFFFF6F6F6DBDBDBB6B6B6939393BBBBBBE4E4E4C5C5C5A4A4A4 8E8E8E8D8D8D9A9A9AA9A9A9C3C3C3F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7C5C5C57575752E2E2E2D2D2D9F9F9FD9D9D9FCFCFCFFFFFF FFFFFFFDFDFDF4F4F4C9C9C97373733738375D5D5DA9A9A9F2F2F2FFFFFFFFFFFFFDFDFDF5F5F5 CECECE636363141414575757A7A7A7EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF3F2E4BBF4E8BEFCF8E0FFFFF7FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFB F6F6DDF0EDBEF7EDCCFFF2E6FFFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E5E4EAA4A3 DE6D6DDE6767EEB0B0FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C7C7E27878DC6161E58D8CF4D0CFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4EEEEEEF9F9F9FEFEFEFEFEFEFEFEFEFFFFFF FEFEFEFBFBFBE9E9E9828282202020222222717171D6D6D6FFFFFFFDFDFDF5F5F5E4E4E4C5C5C5 ADADAD9A9A9A8C8C8C8B8B8B9393939D9D9DABABABC5C5C5E1E1E1F7F7F7FFFFFFFCFCFCE7E7E7 C2C2C2A0A0A0A3A3A3EEEEEEFFFFFFFAFAFADFDFDFB9B9B99A9A9AB1B1B1E0E0E0C6C6C6A2A2A2 8D8D8D8D8D8D989898AAAAAAC8C8C8ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC EBEBEBB8B8B86E6E6E5252529E9E9E8080804B4B4B272727616161CDCDCDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF3F3F3D4D4D47272723C3C3C575757999999ECECECFFFFFFFFFFFFFFFFFFF5F5F5 D5D5D56C6C6C202020515151A2A2A2ECECECFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF4F4F4D1EDEDB9 EDEDC5F5F5E1FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFF9FDF9 D2F4D2BCEDBCC5EEC5DEF4DEFAFEFAFFFFF6FAF2D2E3BA54E8BF68F9E1BDFFF8F1FFFEFDFFFFFF FFFFFFFFFFFFFFFFFFFAFDFADEF4DEC0E8BAACDE9DBEE0A4E9EECCF9F8EBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEAEAEA DEDEDEF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFFDFDFACDCDE95C5CDA2727DBA8A8EBE0E0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF7CCCCED9292 E15D5DD65353CE6363D77979E98484EC7676EC6A6AEC7575F4A0A0FDD1D1FFF1F1FFFEFEFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDE7DF1E181DCCC6C D4C568E5D679F3E489EADC82F1E38AF5E78FEFE189EDE18CF4E99AE6DB8DDDD283EDE293F6EB9C EBE091EDE293F3E899EEE394EBE091ECE192EEE091EFDF91F3E395F2E393ECDE8DF0E291F0E18E EEDF8CEFE08DF2E38EF2E38FEEE18AF4EB91F4EE91F1EA90F2EB93F4ED96EEE691EFE792F5EE97 F6EF98F1EA90F4ED90FAF29EFFF4B1FBF0B0FCF2ACFCF3A9F6ED9FF0E896F1E996F3EB96F0E893 F0E893F1E893ECE18CE3D783E2DC83EBE78CF0ED8FEAE485F4E486FFEB8EE2C46DDDC069DEC46D FDEA95F2E288E9DC81EBDD84EFE189E8D983E5D683EBDC8BF5E595F7E79AF0E095F1E097F9EAA0 EDE392E7DF8DE7DF8EEDE496F2E99EF2E99EECE298E9E093F3EA9BEEE695E8E08DF2E48DF7E288 F9EB92EFE893ECE896EEE193F3DF93FFF1A6C99F55DFC078FFF0ADEDDF9F564E1A322C0EE0DC9D E4E09DDFDC94E5E096DEDA90F0EBA78780471E1300A298714E421FF0E6AA8274337C6A29E9D58F FFF3AEC3B66D463F07E3E397E5E59CE5E19CD4CA89393000C1BB69E3DE8CE3DD8FEAE49BEBE49F 847C3B908749FEFEC4A1995A8B8244E6DEA0E9E29DFFFAAC817833C1B871ECE494D6D071EDE68B DED68DCABF8F716840635F2F7C7A3DEAE29FE9DB9BE1D796FFF9BCB6AE70211A00ADA867ECE6A1 E8E299EEE598E9DF8EEEE290E3D889ECE192E5DA8BEBE091E8DD8FEDE193F3E799F2E798EADF91 EBE092F2E798EEE29BDFD494E1D98FE1DC87DDDB81DAD781E3DF92ECE6A6D2C78E443600CDC07D F4E39BEDDC90E9D98EEADF95EDDB96EAD792E4CD82A15C1BF3B268FAE990ECE78DF4EB98F5DF94 F4D98EE9DD8CDBE18BE0E996EFEB9EEEDC96F5DA9BF4E2A2F4ECABE8E2A3FDEFB5DAA9719F3E00 BA8338F1E190E0DA8DF1E29BE1D68CD9DB89C5CA77D1CC80E5D793D1C689BAB36DC5BF73DFD98F E1DC95E8E39FE4DF9DD2CE8DDDD999EDEAA6EDECA4E6E69CDFDF93E3DF95E4DE94E9E399DAD48A E9E399E2DC92E3DE94DFD98FDFD98ED4CE84E3DD92EDE69EECE09EF7E3A1DFC17DC9A259D6AF61 FED988FBE28EDCCF7BE1DA8EC8C681C1C181F2F2BDD1CFA886845C57552C494A1E777849ACAF7C D6D6A3EAEAB7D1CE9B756F3CCDC7969C967AC3C1A4C0C589757E4A313A21090C0B0000007B7753 D9CE91FEE7A8FFE9AAFFDA9EE5A16EB36830BA752EAD6B1AC1852BFFE18BFFDC8FFEE2A5FDE2B4 CDBA9865583A70624725160336270CA59671FAEFBEF8F0B7DCD595E4DF99DEDA93E1DE96DCDA94 D3CE8CEADFA3E3C5959B5633A06F2EF2CE79B36D30E3C067ECE987E2DA96EEE7A4D9D196F5EBC1 6F71431E24052628160B0706726960FCEFDAF4E0B3E4C885F9DB88EDBC68E4AE5DC88C429F5B18 DDA563FFDE98F7E29DE5E09BCFD18DD3D596DDDBA0E2D8A0DBCD98FAE9B4FFF3B9DBB06CC29B55 C3A35DE3C983E9D892E7DB96E6DE9ADAD190DFD597EBE0A3E9DDA2EAE5A0E8EA9FCECE8ADEDA9F E7E1AEE5DDAFF6ECBFE1D6A7E3D9A2DDD496DED993EFE89EF5EEA3EBE498E4DD92FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBC7C7C78888884A4A4A6D6D6DC1C2C1C0C1C05F605F3A3B3A 4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F8F2DCDCBBA8A8 726D6D494A4A3B3B3B2C2C2C2828283B3B3B4D4E4D676767989898CACACAEBEBEBDDDDDD959595 4C4C4C373737CBCBCBFBFBFBFFFFFFFFFFFFECECECB5B5B56B6B6B2626266D6D6DB7B7B78A8B8A 5757573434342F2F2F4141415353537C7C7CD5D5D5F4F4F4FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4A5A6A54D4D4D242424424242C1C1C1EDEDEDFEFEFE FFFFFFFFFFFFFBFBFBE0E0E0A0A0A04B4B4B2A2A2A979797D3D3D3FAFAFAFFFFFFFFFFFFFEFEFE F6F6F6CFCFCF636363101010464646999999E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E5E4ADE9E8B9F9F9EAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDFEFFF0FDF9D8FCEAC5FCE4C5FEF9F3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7DCDC E68C8CDA5555DD6363EEB0B0FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C7C7E27A7ADE7372E9A8A7F6DDDCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5F59090902A2A2A1C1C1C686868D2D2D2FFFFFFFAFAFAE0E0E0B9B9B9 8080805B5B5B3E3E3E2B2B2B2A2A2A3838384848485B5B5B8C8C8CC3C3C3EFEFEFFFFFFFFAFAFA CFCFCF868686434343494949DCDCDCFEFEFEF4F4F4BFBFBF727272343434595959AFAFAF8C8C8C 535353313131313131414141565656878787CBCBCBF9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF F5F5F5C5C5C5818181555555636363D7D7D7A6A6A6505050262626616161CDCDCDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE1E1E1ABABAB474747333333828282D3D3D3F7F7F7FFFFFFFFFFFFFFFFFF F6F6F6D6D6D66D6D6D1E1E1E494949979797E9E9E9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCF7F7E6EAEABF E8E8B6F9F9EDFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFFFCEBFFEBCEF6CEB2E9B2B9E9BAEAF8E9F6F9E1F3EAB5E1AD37E8BD63F9EDD4FFFFFFFFFFFF FFFFFFFDFEFDF8FCF8F3FBF3E8F8E8B9E9B9B3E9B3CCF4C7DDEFBEE3E3AAF3EFD1FFFCFAFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFADCDCE96565DA2525DB9696EBD4D4FCFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4EEA5A5 DE5959DC6464D28686C8ABABD9D2D2F9EAEAFDDFDFFDD7D7FDEAEAFEF4F4FFFAFAFFFEFEFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEADA7AF0E080 F4E485EDDD80E5D679F5E68BEDDF86F0E289EFE58BF0E48DF2E693EFE495EDE293F2E798F4E99A EDE293E6DB8CEBE091FAEFA0FBF0A1ECE192E9DE8FF0E193F0E092F4E496F6E696EEDF8EEEDF8E EFE08DEFE08DF0E18CF4E590F5E691F2E68FEFE68BF4EE90F3EC91F1EA92F4ED96F3EB96EEE691 F7EF98F6EF96EEE78CEFE98CF7F098FDF3ACFEF4AEFFF5ACFDF4A7FAF2A1F8F09DF2EA95EBE38E EEE691F5ED98F6ED9BF4E996F2E692E8DE87DFDB80EEEB8CF8F192FDF395EAD175EBCB74CBAD56 F8DF88F9E28CF6E68CF3E68BF4E68DF2E48CF0E28BF5E693EFE08FF5E696F9E99CF7E79CF5E59A F5E89AF1E696ECE492E2DB89E9E091F2EA9EEDE499EFE69BEAE194F4EB9CF1E998E5DD8BE9DB85 F4DF86EEDF8AEBE492EDE899ECDF91F1DD91FFE59AB1873AE3C075EFD58EFDF0ACE4DDA3433D0E 353010D7D395DFDB9CDFDB9BDEDA9DE3DEA78C8656383008BCB492504626D9CE96534708A69453 EFDA99EEDA97695B18A19A52E9E8A3CFCF8CF6F2B26F6629766B2AF3ECA2F4EDA2E3DC95F8F0AE B0A869433B07E9E1A5D7CD92665D22F2EDB2E9E1A3F3ECA7CBC57B887F3FE6DC99EEE497E5DF83 E5DE85E5DD95C0B5868D845D575323848243EFE7A4F3E5A4ECE2A2F0E6A8A59E603832008B8646 EDE7A4E6E097EBE294ECE292EBE08EE7DC8DEBE091E7DC8DF1E697EBE091E7DC8DDDD283EADF90 EADF90EADF90EFE495ECE196EDE39DF1E99EE8E38FE2DF89DDDB89E3DF98FFFBBE7267375E512D EFE29CE9D98CECDB8EE2D288E6DA91EEDD98F2DF9AEFD88DA45E1DEEAC62FBE88EEDE98EEDE491 F7E096F6DA90EBDE8FDCE28DDFE794ECE79BF2DC98FEE5A5F8E6A7FAF2B1F0EAABFCEBB1C9955A 9F3F00CE9B4EFCED9CE7E295F4E39DECE096E4E595E1E692E9E496F5E3A0EADF9FDED792D8D286 E4DE94E9E29CE4DD99DED998D4D090E4E0A0E3E09DD5D48DDCDC93DBDA90F4F0A7EDE69EEFE8A0 E4DD95DFD890E4DD95D9D28BE2DB93E7E098E2DB94ECE59DDFDB92E0DD98EFE49FFEE9A2EACC83 AA893ED8B96DFFEA9EEADF99F0EBADD8D7A1F2F0C19591771B15150200000500000A0101000000 0D05052B211E281E1B3F35321D14113F37331411030C0E000005000A12011E23106B6B59FCF4E5 8C7E5EA7945AF5DC97D1AD6E9A6A38AB7240D3985DFDD38BFFE090B0812DB18838E9C683F8DDA7 CFBA917164426A6144130E003A341FD5CFA1FFFAC8E1DBA2E6E0A2E2DB98E0D793DDD38FE3D998 F3E8AAEADDA2EBDDA6E7C99C7636157A4D10E5C777C9864EF4D681E5E182D4CD8AEAE2A2F3EBB2 ADA3790301008A8A60EBE9CC6E6B570500006B6249F7EBBDE5D698F2DD92FDE593F2D381F1CC7C BD8E4DA67438B48349E6BE83EED396E9E09CEDF1ABE2E59EEAE19EFFE2A4EAB37CC58B51AF8444 E3BF7CF5D996FFF3AFEFE19CE5DD99F0EBA9DAD596D5CE90EFE6ABF5EAAFEAE5A3D0D089C9C887 E7E3A8FDF8C1F7F0BCFFF9C8D7D19BBBB57CE1DB9DF1EEAAEFE9A5F4E6B2ECDDACE5D7A6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEDEDED9494944141415C5C5CA3A3A2DFDFDEC5C7C5606160 3A3B3A4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECEBEB9A8F8F 5D55553C3A394546466464646F6F6F7575757C7C7C6868685C5C5C8B8B8BC4C4C4E9E9E9DBDBDB 8D8D8D3E3E3E282828C6C6C6FBFBFBFFFFFFFFFFFFEBEBEBAFAFAF6060601212122C2C2C5F5F5F 8282828E8E8E8D8D8D888888757575505050444444828382C2C3C2F7F7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F48686862B2B2B3030306C6D6CDCDCDCF9F9F9 FFFFFFFFFFFFFFFFFFF9F9F9C6C6C6767676404040444444CCCCCCF9F9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D66767671414145C5C5CAAAAAAEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E2E4ABE7E8B7F8F9EBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFCFCFBE9F1E9C0ECE2B0FBF9EEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7DCDCE58989D95050DC6060EEAEAFFEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C7C7E27A7ADF7776EAAFAEF7E0DF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCEBEBEB8181811C1C1C1F1F1F6F6F6FD5D5D5FFFFFFF1F1F1B0B0B0 6C6C6C4242424B4B4B6161616D6D6D7575757A7A7A717171626262888888BCBCBCEDEDEDFFFFFF F9F9F9CCCCCC7D7D7D3434343A3A3ADADADAFEFEFEF4F4F4BABABA6969692020201D1D1D595959 7979798D8D8D8C8C8C8787877A7A7A515151515151858585C4C4C4F4F4F4FFFFFFFFFFFFFFFFFF FBFBFBE5E5E58B8B8B454545646464A4A4A4ECECECACACAC505050262626616161CDCDCDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC7C7C7797979323232494949B1B1B1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDDDDDD717171212121545454A6A6A6ECECECFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFCF2F2D9E9EAC0 EEEFCEF6F6E5FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFAFFFAE9FDE9CEF6CEB9EEBAB6E6B3C2DAA2D0C986D9B042EBC87BFDF3E2FFFFFF FFFFFFFFFFFFF6FAF6D5EBD5B5E7B5A0E7A0B0EEB0CDF6CEE9FCE7F5F0D5F4DEB0FBE1BEFFECD9 FFFAF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAE1E1E97272DA2F2FDB8787EBC8C8FCF8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5F5FFD6D6 EE8080DC4040D98686DDC1C1E5E1E1F1F6F6FEFFFFFFFBFBFFF9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDB7B ECDC7CF2E384F4E588F1E285EFE286F0E288EFE38AEEE38CEFE38DF1E591F4E999ECE192F0E596 EFE495ECE191F2E797F5EA9AF6EC9CFBF1A1EFE495EDE292F5E798EFDF8FE8D889E7D887E6D786 EDDE8BEEDF8CEEDF8CF0E18BF4E590F5E691F3E78FEAE186F1EB8EF2EB90F1EA90F6EE98F7EF9A FCF49FFAF29CF7F096F5EE93F3EC8FF1EA91F1E89BF5EC9FF6EE9EF5ED9BF7EF9AFAF39DF9F39C EBE38DEEE691F4EC97F3EB99F0E491F1E591F4EA93EBE78CF3EF91F5EC8FF4E385D3BA5EF0D47C B79B44FEE68EF6E18BEEDE85EEE086EBDD84E5D77FE6D881F2E38EF1E290F2E293F2E294F3E396 F4E498F2E597F1E795F3EA97ECE392F3E99AFBF0A3F1E69AF3E89CE5DB8CE6DC8DEAE08FE9DF8D EEDF89F3DF88F1E28EF0E998F1EB9DF4E799F8E093FFEC9FB3893BE2C578FEF0A4EEE19AF2E9AC C6BE88352D123F391BCCC58EF2ECB9E1DBACE8E3B8696447201B008E886A6A64438C844C453910 D5C387EBD79AB09D605E4F16F2EBA8F1F0AEEAEAAB828047574E1CE1D69DECE7A5EAE5A2E3DE9E DBD5984D450CA59F66D3CD945D551DBAB479EEEAAEF8F1B5CFC887867E3AE5DB9FF4EAAADDD38A E5DE86D8D07BE6DD97ADA174B9B0895C58288B8947DED691E9DC98E9DF9EEFE5A7B8B071342E02 777132F6F0AEE4DE96E7DE92ECE293EBE090F2E798F1E598E1D588E4D98BE8DC8FF1E598E3D88B EEE295F0E497EFE396ECE093E7DC90F6ECA2EEE798E4DF8CE9E694E2DE93F7F2B2CDC78B201400 C3B677EEE299E8D88AEFDE90ECDB93E6DD95EFDF9BF6E39FF5E097A45E1CE9A65EF7E68CE9E58B E6DD8BF5DE96F4DA90E9DD8EDEE28EDCE491E6E094F1DC97F7DF9FEFE1A0F1E9A8F1E8A9FFECB4 CB945BA24302E6B466FBF19FE3DE92E6D690E8DC94E5E395EAEE9AEAE598EFDE9AECE2A1EBE39E DAD38ADFD890EFE8A4EAE39FDDD899E0DB9CE6E1A1E4E1A0DFDD99DDDC95E3E19BEAE6A1F2EBA4 EAE39DE2DB96E6DF98EAE39CE2DB96E8E19AE3DC96D7D08BE8E19BE7E39DD7DC94DBDA90EAE097 FEECA5D6BF7897803BCCBC7CF2E9B0F9F5C3DAD6AF59544305000048473297927D8C85714E4532 2319081106000000002F28140600000000000203001A1D051F2504373C1C848653AAAA75FFFFDC AE9C8B270E0080642FA1813AB28C5176492AB68E58FFE8A7EED68FFDDE92F8DE92CCB16C9E864C 9885566457307B7253090500605E3ED5D49EE7E8AECECD90D2D290F1EDA8E2DA96EEE3A1DCD091 DECE93FCE9B4FDE9B7F4E2B3EFD3AA8F533780571EFFF7ACEDB27DDFBF71EDE890CBC789D8D094 F6F1BA48402A312A13F3EABDEFEAC1F8F1CA7C785507040057522FEEEAB3E0DB9AEDE79CE1DA88 EAE08EF1DF9BF3D79BD9B37AB38650966832BE9257EBC385FBD794E1BA74D3A55DCA954EDBAB67 F4D596FFE1A4F3DC9CEDDB9AEDE4A3F1ECABF1ECADD8D494CCC589E8DFA4EDE2A7DCD597CECB8A DFDA9BE4DFA3E4E0A5EEEAB0EEE9AFDEDAA0C2BF81DEDB9CE9E7A7EEEAABF7EEBAF3E7B9EEE4B5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0C2C2C2707070363636858685CECED1E6E6EDBABBC0 5F60603A3B3A4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2 5D5C5C302F2F424242777777AAAAAABDBDBDC5C5C5C5C5C5A8A8A8919191AEAEAED6D6D6EFEFEF DADADA8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0636363141414292929 5E5E5EA5A5A5CCCCCCDADADAD8D8D8B4B4B46A6A6A333333414241979797F1F1F1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7D8D8D86666662020204C4C4C9A9B9AEBEBEB FEFEFEFFFFFFFFFFFFFFFFFFF6F6F6ACACAC4A4A4A292929383838999999B3B3B3B6B6B6B6B6B6 B6B6B6B6B6B6B1B1B19595954848481717176A6A6AB5B5B5F0F0F0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFCFAEAEBE3B0EEE8BEFAF8ED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFAF0EAEABEE3E2A8F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFFFFF7D4D4E58787DA5959E07373EFBAB9FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C7C7E27878DD6A6AE79B9B F5D7D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEEEEEEBBBBBB5E5E5E141414454545969696E2E2E2FFFFFFE9E9E9 898989383838424242717171A5A5A5BDBDBDC4C4C4C4C4C4B4B4B49C9C9CB1B1B1D1D1D1F2F2F2 FFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6B6B6B2222221A1A1A 575757979797CDCDCDDADADAD5D5D5BDBDBD7272724343434F4F4F8C8C8CEDEDEDFFFFFFFFFFFF FFFFFFE8E8E8B8B8B85F5F5F3B3B3B878787D9D9D9F4F4F4ABABAB505050262626616161CDCDCD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0B04C4C4C1B1B1B393939868686BABABAB6B6B6B6B6B6 B6B6B6B7B7B7B0B0B09A9A9A4D4D4D1E1E1E5B5B5BAEAEAEEEEEEEFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDF2F2ECC6 EBE3B3F6F2DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8FFF8E9FDE9D2F7D4B9E6B4B5CE85BAB85CC1B34ECECA82DBEAC9 E0F7E4E0F5E0DFF4DFD8EED8C6DFC6AFE1AFA4E8A4C9F6C9E8FEE9F9FEF7FFF4EAFDE6CAF9E0B9 F7E2BDFDF9F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE3E3E97E7EDA3E3EDB8383EBC2C2FCF7F7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE2E2 F69D9DE86F6FDD6060E1B1B1ECE6E6F8F9F9FFFFFFFFFFFFFFFEFEFFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EFDF7FEFDF7FEDDE7FEDDE80EADB7EEFE287F0E48BEEE38BF2E690F2E58FEDE18EF0E595E9DE8E E7DC8CE9DE8EECE191F4E999F7EC9CEBE090EDE292EEE393EFE494F1E493ECDD8CE9DA89EDDE8D E9DA89EADB88EBDC89EADB86ECDD88EFE08BF0E18CEEE188EAE184F0EA8DF3EC91F5EE94FDF69C FDF5A0FCF49FF3EC93F3EC92FBF599FAF496F1EA8FF5ED98F5ED98F6EF97F7F097F9F297FAF398 F7F196EAE389EAE38CE6DE8AE7DF8EE9DD8BE6D986F3EA92F5EF95F1EC8EF2E78AF5E285DAC165 E5C66FCCAF58FFF9A1F8E68FE4D37BECDE85F0E289E9DB83E5D780E3D47FEFE08DEFE08EF0E091 F2E294F8E89AFBEE9FEEE290EEE390F2E795F9EE9EF9EEA1F5E99DF3E79BEFE496F2E797F5EA98 F3E994F4E48EF8E38DF6E796F3EC9DEFE99BF3E499FBE396FFDD8DA77D2DE8CA79FFEB9DF0E498 EFE6A3F6EDB2CBC28A2A2109241C089F986BF2ECC7D9D4B123200D403D1E615E3E34310B171000 ACA063C3B179BCA76D5C480DE6D99BFDFCBDC6C68757581B3D3A0CC5BD89FBF1BBDDD89CE5E1A6 F7F2B897925B928D56C3BE8778733CAEA871F3EEB6E2DEA2DBD79A928C4CD1CA8AE7DCA4F6EAB0 D5CA86ECE490E4DB89E4DB988E8256BDB38D4E4A19969551E7E098ECDF9AE2D995E8DF9EBEB779 393301645E22F5EFAEE1DB93E8DF93EAE090EDE292E7DC8DF1E599E7DB8FE8DC90ECE094F8ECA0 EDE195F7EB9FF6EA9EF5E99DF5E99DEDE195E5DD8DF0E998E2DC8DDDD98EEAE5A3E7E1A53F3814 6F642EFDF5B5E6DB91DECF7DF0DF90ECDE95E5DB94EBDB98EFDE99EBD58D995615E7A45DF2E289 E4DF86E6DE8CF5E197F3DB91EDE191E6E995E1E694E5DD93F2DF99F2DD9CE6DA97E6E19FF1E6A9 FFEAB4C68751A44807F6C97BFDF4A2EAE79CEBDB96FCEDA6F3F2A3E7E996EBE497F9E8A1EDE39E E4DB95D7CF87DAD38DE9E29DE6DF9BDBD494D4CE90E3DD9FD5D191C7C383DAD794D0CC8BDCD493 F3ECA8E6DF9CE3DB99ECE5A2EEE7A3EBE3A2E9E29FE4DD99CEC785D9D18EE1DF9CD4DD96DAE096 E8E49DE9DA97F8E4A4CEBC7E988B52A097665E5A30191102190E00B9B490F4F8BBDEDFA0F2F0B4 ECE7ADF6EDB7DDD29DC5BB88C9C58FB1B27B9DA26A90985FC4C98FC4C491D5D1A6D9D19A9E9456 E7D6A154391B260C08977744CBAB68D3B17A240400B59F63F1DF97FEEBA2DDCC81EFDD97ECDB9F DCCC9B50431A655C340B0600706D43BDBD85D9D997CECF8ADCDE95CDCD83D9D58CE7DF99E1D795 D3C489DAC994F3DFB1ECD7ACF4E0B6C3A882996449BE9C66D1BD77814F1EBB9D56E5DE8DDAD79E F4ECB4A99F6D191500BEB186FBFAC9DDD39BEBE5AAF9F5BD83824D0A0900626436D9DDAADCE2A4 D7DF92CCD480E1E19BEDE5A4FFEFB3F8DAA1D69A67CA7D4BA95520B26027BF7936E3B061F6D57C FFE595F6DB9FEBD296FCE9ACEDE1A3EAE2A3E3E1A1EAE9A9DCD899D6D194E3DDA1DDD499D4CB92 CDC78BE7E1A4FFFEC1FAF6B6EEEDACE5E4A3EBEAA9DAD999D8D797DCDA9DDDDCA0E5E5A9E1E1A6 DDDEA2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFADADADA8686865E5F5E5A5B5AB4B5B3E9E9F1E4E4F7 AEAFBF5E5F603A3B3A4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFDFDF4B4B4B303131646464ABABABDDDDDDECECECEFEFEFF0F0F0E6E6E6DDDDDDE6E6E6F3F3F3 F7F7F7D9D9D98F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0626262171717 4A4A4A9B9B9BD6D6D6F1F1F1F8F8F8FAFAFADCDCDC8A8A8A3C3D3C1B1C1B7A7A7AEBEBEBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFA7A7A7464646272727707070C3C4C3 F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF3F3F39595952222220D0D0D171717383838414141414141 4141414141414141413E3E3E323232191919181818707070B9B9B9F1F1F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEFFDF9DBF8E4BBFAE9CB FEF9F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1EAEABEE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFDFFF5F5F7C7C7E68383DC6666E59291F2CCCBFEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C9C9E27A7ADA5A5A E27F7FF3C9C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8D3D3D37878783939392020207F7F7FCACACAF3F3F3FFFFFF E4E4E4737373212121616161A1A1A1DADADAECECECEFEFEFEFEFEFEAEAEAE1E1E1E7E7E7F0F0F0 FBFBFBFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A252525 363636929292CBCBCBF3F3F3F8F8F8F7F7F7E5E5E59D9D9D5252523030305F5F5FE5E5E5FFFFFF FEFEFEFFFFFFC9C9C97C7C7C4848485B5B5BB0B0B0FAFAFAFBFBFBABABAB505050262626616161 CDCDCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E9E9E292929060606181818323232434343414141 4141414141414141413E3E3E343434171717181818606060B2B2B2EFEFEFFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FDFCE2 FAEBC4F8E4BFFCF3E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF9FFF9F2FDF3E5F3DCCCD285B5B53DAAB65AAAC882 ADDEA5AFE6B1AEE5AEAFE4AFB8E2B8CFDECFD7E9D7DFF6DFEFFDEFF9FFF9FEFFFDFFFCFBFDF5E8 F0E7BFE9E2ADFAF7E9FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE6E6E98B8BDA4F4FDB8383EBC0C0FCF6F6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8F8 F6C8C8E65F5FE06D6DE09F9FEEDBDBF9F8F8FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEEDF80EEDF80F4E588F8EB8FF4E78BF0E289E9DE85E6DB82EDE48DF0E691E6DC88EBE090 F2E797EEE393F4E99AF2E797ECE191F5EA9AF3E898EFE494F6EB9BFAEF9FF4E796ECDD8DECDD8C F1E290EFE08DEEDF8CE8D984E6D782E7D881EADC83EADC84E6DA81E7DE81E9E384ECE689F5EE94 FDF69DFAF39BFBF59CF5EE95F6EF95FBF498FAF495F4EE90FDF69BF6EF94F3ED90F6F091F2EC8E EEE889EDE78AEAE389EAE28BDDD582E5DD8CF7EC9AF1E591F0E78FF0EA90E5E082F2E68AF5E386 EFD479D6B860E3C770FEF39AF4E38BF0E289F6E88FF2E48CEADC84EADC85E7D783F0E18EF3E491 F5E694F3E493F2E392F5E896F2E692E5DB88F1E694F6EB9BF0E597F8ECA0F2E69AF6EB9CF4E999 F5EA97F4EA95F5E48FF2DD89E9DA89EDE597EEE99BEFE195F9E698F2D0809D7422F3D885FCE594 F2E799E3DA90F2E9A4F3E9AAE6DCA1413819080100352F13433D23322F092725003B3C136E6E40 E2DCA5CEC28A77652F56400A98844CBEB075ADA56B626227414212ABA770FAF1BEE7DDAAE0DAA3 C8C38C817C4949430F837D4A8C8652E1DBA6F0EBB3CDC98FBBB7798C884A9C9657C5BD7FBAAD7A EFE2AEEFE4A3EDE597DDD588E8DE9E8A7E55B2A983353100A1A05CEFE89FEADE96EBE19DE7DE9C AAA266474206494308E5DE9FDBD48FEDE499E9DF8FEDE292EDE293F2E59AE9DD91F1E599F3E79B F9EDA1E3D78BF5E99DEBDF93DED286E8DC90F2E797E1D986F0E998EBE599E5DF9BF2EBAF958E5B 3A3303EEE4AAECE09EE2D68AE7D884F2E395ECDE98EAE19BF4E4A3F4E2A0E7D18A9D5919F0B069 F6E58DDCDA83E5DD8EEED893F0D890EDE093EAEC9BE3E597E2DA90F0DC97F6E2A1DDD490E1DC97 F5E7A9FAD49F995420B05715F9D889F7F19FE8E69CE5D492FAEAA5EEED9FEDEE9CE8E191ECDB92 EEE49DEAE39AE1D991E6DD98DED591D8D08CDBD391E6DF9FE8E3A3DCD598DBD798E8E4A4DFDB9C DBD395EAE2A2E3DB9BE7DFA0DCD494EAE2A2DED697DBD393EEE6A5E2DA9BD8D091DAD897D8E19D E1E7A2E0DB9AE5D596E3D194EDDA9F80723E1B1300473D1F887D55F1E1C2F4EBB9D3D987E0E392 E4E396DFD78FDED28FE5D998F0E5A6E5E1A0C3C381CBD18CBAC37DC5C485EFE2ADF1DFB1CCB67E EED798896F381D00007E5E32F2D6A4FFF8BE6E57352C1800E6DB99F0EB9BE5E092E4DD95D1C988 F6ECB6574C21999066110800433C16AAA66A989450E0DC8FB4AF61D0CB7DD9D185D9D288D8D089 D2C989C5BA80D7CB98E6D9ADDCCEA6DBC9A1C7AA85B9896D7B5E352A1A00411F0EB89D59DCD085 E3E2ACFCF2BD372B08535135F9F3C5E3D29BDDD48ED7D085E6E399F8F8BB908E5F040400B1B28E F3F9C6CBD490D2DA8CD8D98EDCD890F4E6A1FBDC9CFFD49BF3C08BB95B26AF531AD58945F5CA78 FDEA8DF3E18FF5E0A4EAD79CF7E9ADE6DC9FFFFCBEEAE7A9E7E5A8E7E5A8F2EDB0EDE7ABD8CF95 EBE1AADDD49DC4BC80E3DE9EE3E19DEFF0A9F6F7B0E9EAA4E0E19EDCDC9CEEEDB2DCDBA2D8E09C D4E09AD3DF99FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE2E2E2ADADAD4748475A5A5A939493DBDCDBF9F9FF EAEAFBB0B1BF5F5F613B3C3B4B4B4BD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE2E2E25B5B5B3B3B3B5F5F5F9F9F9FD6D6D6EFEFEFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCD8D8D88F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0616161 191919656565CACACAF4F4F4FFFFFFFFFFFFFFFFFFEFEFEFA6A6A6535453101010696969DEDEDE FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5C5C57272722A2A2A373737969696 E9E9E9FAFAFAFFFFFFFFFFFFFFFFFFFEFEFEE9E9E98383831213120F100F2626263939393E3E3E 3F3F3F3F3F3F3F3F3F3D3E3D3333331D1D1D0D0D0D1B1B1B848484C9C9C9F5F5F5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF8F7DCF3F0C1FCEBCC FFF1E2FFFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAF2EFEAC1E9E2ABFAF9EEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFDFFF7F7F7CACAE68484DD6C6CE7A2A1F4D5D4FFFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D3D3E58D8D DB5E5EE07171F2C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9D7D7D79999993A3A3A343434595959BABABAEFEFEFFDFDFD FFFFFFE5E5E5767676242424585858969696D1D1D1EEEEEEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A 2727274D4D4DBFBFBFECECECFFFFFFFFFFFFFFFFFFF7F7F7BABABA656565272727474747D6D6D6 F9F9F9FAFAFAE7E7E79999994545454B4B4B939393D7D7D7FFFFFFFDFDFDABABAB505050262626 626262CDCDCDFFFFFFFFFFFFFFFFFFFDFDFDF8F8F88F8F8F1C1C1C0F0F0F2B2B2B3939393F3F3F 3F3F3F3F3F3F3F3F3F4040403232321C1C1C050505191919707070C6C6C6F3F3F3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAE7 F4F2C8F8ECC5FFEEDAFFF8F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEAE3D17DC4AE2ABDC781 BBDAACBAE5B8BAE9BABAE8BABBE8BBC6E8C6E4EAE4F7F4F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFEF9F2F3D1ECEBB6FBEFD7FFF6EEFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE9E9E99898DA5E5EDB7C7CEBB9B9FCF5F5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F9 F5DFDFE9A0A0DC3939E17878EBD5D5F9F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF3E485EDDE7FE8DB7DF3E68AEEE387E9DD84F1E58EEBE189EEE48FF4EA95EFE490 F2E795EEE391EBE08FEEE392F1E694EDE290EDE291F1E694F2E796FBF09FF7EC9AF3E594F1E28F F1E290F2E390EDDE8BEEDF8AEBDC87EDDE87ECDE86EDDF86F0E289E8DB81E8DF80E8E383EFE98B F6EF94F8F197F7F096F6EF95F8F197F6EF95F3ED8FF5EF90FAF494F6F091EFE98AF6F08FF0EA89 E8E280EFE988F3ED8EF7F095EEE790E2DA86EEE695F8ED9BEADD8AF4EA93F6EF95ECE487F2E489 E9D578EDD277D5B75FF6E48DF3DF86F6E990F0E289F5E78FF5E78FEADC84E9DB83F1E38BE6D783 ECDD89EEDF8AEDDE8BEDDE8CE9DA87EEE28EECE08CEEE391F1E495F1E496F1E597EFE395EEE192 F9EC9DEFE390E7DC88F3E38DF4DE8AEEDE8DEDE697F0EB9DF3E698FAE495E8C4749D7321F9DF8C F9E38FF4E998EAE18FEFE795F1E89DF5ECABEAE1A86960340A03002E2A096E6C3E4F4F1CC3C690 E7E8AFDFD69FC2B47B523E089C854D6B561D5A4A0F564F13706E3496965B76713C5E54266E632F 4C46193631076C6634C6C08DC7C18EC4BE8A8E8952645F265C581E2C290044410085803F675E22 5A4E1A675B279F9456DBD287E2D88EFBF8BB90835BC8BE97231F00ADAC63CAC376C6BA6FEDE39D F2E9A8C2BB7F4F49103D3701D5CE90E4DD98EBE296EAE090F2E797F2E79AEFE398E9DD92F2E69B EFE399E2D68CE2D68BEFE399E3D78CE3D78CF3E79CE8DD8FEDE591E3DC8DE9E19AE5DFA0DED79F 443D0CA9A36CF4EBAEE5DA95F3E79BEDDD8DF3E297EEDF9AEAE29FF8EAAAF2E09FECD891945213 F7B974EFE48DDFDD89E4DE90E5D08DEFDB93F1E599E9E799E5E497EBE097F0DD97F6E6A1DCD58F DEDA94F0DFA0EBBC888B400BC8722EFDE190F2EE9DDCDC92E8D796F0DF9DEDEA9EE4E393E6DD8D ECDA8FE5D990DDD48CE5DC94DBD18BE2D992D3CA85D6CD89DCD493E3DC9CEAE5A6E9E3A5E0DA9E E1DC9FE5DD9FE0D899DDD596E0D899E4DC9DE8E0A2CBC384D4CC8DEAE2A4EFE7A8EFE6A7DFDA9B DBDF9FE4E3A6D6CD91E1D095D9C58BDAC88BDACC8FBCAF72B4A56BEFDDA7FFFACAD9C78BD3D185 E0DE94E3DC97E8DD9DEADCA1EBDCA5DBCE99DAD09AADA770B9B87D9E9F63C9B881E3C490F5DBA5 AF8D559A773E3213005A3D17F7DFA4F8E5B2E1D5A72B2400868356FCFBB1DCDB89E5E395D2D086 E6E0A3756D3B968B614035203B3110D3C98EB9B16BB1A859DBCA7DE5D285E7D88BE6D78DE9DD95 DDD48EE4DC9DDDD79FDCD7A4E1DDB0F7F4CAEBDCAF806032380D0B351701B2A362D9B987AE9153 F5E59FF0EEBBAB9E640C0002B9BA8CDDD7A2EBE0A1E1D98CE9E38DDAD482EBE5A1FAF1C4605539 493F23B0A881C2BE87EAE59EE1D185EDD78BE6CA81C7A660C59E5ACFA661F4CA87F5CC85D8AC64 A6772DC9964AFBD48FEDD79CEBD89EEBDEA1EBE0A3F2EBADDAD596E0DD9DEAE6A8EBE6A8FCF7B8 E9E2A5EEE3AAFAEFB9FCF4B9F1ECABC4C47ED3D48AEBEDA3EEF0A7ECECA8E3E0A1E9E4ABE5DFA8 E3E1A6E7E6AAE7E6ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECB2B2B26D6D6D2B2A2B6E6E6ECCCCCCF4F4F4 FFFFFFF8F8FABCBEBD5E615C373936474748D1D1D1FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEAEAEA8B8C8B5151513C3C3C5A5A5A919191B5B5B5D0D0D0E1E1E1EAEAEAF0F0F0 FAFAFAFFFFFFFBFBFBD8D8D88F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0 6161611919196E6E6ED9D9D9F7F7F7FEFEFEFFFFFFFFFFFFF1F1F1B6B6B66B6B6B181818636363 CFCFCFF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFADADAD4545451A1A1A4C4C4C B5B5B5FFFFFFFEFEFEFFFFFFFFFFFFFFFFFFF6F6F6D8D8D87676761B1B1B3738376F706F9F9F9F ACACACAEAEAEADADADAEAEAEAAABAA8C8D8C4F4F4F242424252525A5A5A5E3E3E3FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCFDF7F7FDF6F6FDF6F6FDF6F5FDF8F8 FFFBFBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEEEEC9E3E3A7 F6F4DDFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF3F7E9C8F4E1B3FDF6E9FFFDFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7D9D9E68A8ADD6B6AE7A09FF4D3D2FFFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7DFDF EAAAAADF7574E17676F2C2C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDDCDCDC9898985151512424245E5E5EAFAFAFE5E5E5FBFBFB FFFFFFFFFFFFECECEC9797974848483939395A5A5A8B8B8BB2B2B2CCCCCCDEDEDEEBEBEBF1F1F1 F9F9F9FFFFFFFFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB 6A6A6A282828545454CDCDCDF3F3F3FFFFFFFFFFFFFFFFFFF6F6F6C2C2C27272722E2E2E434343 C7C7C7EEEEEEEBEBEBAEAEAE6565653232326D6D6DCFCFCFF2F2F2FFFFFFFEFEFEACACAC505050 2323235F5F5FCDCDCDFFFFFFFFFFFFFFFFFFF8F8F8E5E5E58282822020203535357474749B9B9B B0B0B0ADADADADADADADADADB1B1B18989894F4F4F1818182626268B8B8BE7E7E7F9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3D8E5E5ADEEECC6FDFBF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5FAF6CFE9C76BDDA82E EEE0B7F6F8EFF6FCF7F6FCF6F6FCF6F6FCF6F8FCF8FBFCFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFBFDFDE8FCF6D2FCE3BEFDECD6FFFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAECECE9A5A5DA6A6ADB6D6DEBADAD FCF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9EDEDE9B2B2DD7171DF4343ED9393FBF1F1FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3E485EEDF80E8DB7DE3D77AE1D67CE5DA81F0E68EE9DF89EAE08BEBE18C E5DB87F0E594EADF8DECE18FEBE08EEADF8DF0E592EDE290E8DD8BF0E593F6EB99F3E896F3E693 F3E491F5E693F6E794EFE08BEBDC87EBDD86F4E68EF3E58DF0E289F2E48BECE085F8EF90F3EE8C F3ED8EF4ED92F5EE93F8F197F7F096F3EC91ECE58AE9E385F1EB8AFBF593FCF696FAF494FEF896 F3ED8BEDE785F5EF8DF4EE8FFFF89DF8F198EBE48EEDE592F4E996EEE28FF5E992F1E88FECE487 F5E68AE5CE72E9CE73BA9D44F7DE85F6E68BF5EB90F1E78DF6E890F7E991F3E58DF1E38BF2E48C ECDD88F3E48FF2E38EEFE08BF0E18DEFDF8BEBDF89F2E691F3E793F5E997F4E799EFE294F2E597 F2E596F9ED9BEFE38FEADE89FAEA93FDE791F5E693EEE797EFEA9CF5E89AFCE696E4C26E9A711F F5D380EED784EFE492ECE38CF2E88FEEE491EFE59BFEF6B5CCC287534B1469642D434109828244 9193508283409C9254736327604A0EDAC286F6DFA3FFF3B5FBF2B1F1EEADDBDA9AB0A96E70642E 5B4E1949420A5C561E847F477F794167612A565118686327676123544F0FB7B36FFAF6AFE7E29C ECE4A4F1E5B2C6B987716629655C12B8AE66F1E7AC7F734CCFC59F262300484719E0DA89E0D587 EEE59CF0E7A5DAD396746D35383101CDC688F4EDAAF1E79EE9DF8FEADF8EF5E99DF1E59CECE096 F0E49AF1E59BE6DA90E2D68CE1D58BF0E49AEFE399F5E9A0F6EB9EE7DF8DDBD38AF7F0AEFFF8BD 4E47136A6436FCF8BBDDD492E0D58EEADE94E3D287FCEBA4E9DC98E7DF9EF8EAABFFF2B0E7D590 884609E9A966EFDF8CE2E18EE1DB8FEEDA97EFDB94F2E69AEBE89BE8E598F0E49BF2DF9AE7D994 E9E69EF3F0A9FAE6A9EAB4829F4C19D78741FFE693F5F5A3E7EAA1F3E4A5EFDD9CE9E59AE6E394 E9E090F4E195FAEEA2EFE69CF4EAA2E7DD96E8DF97DED68EDFD68FD5CE89E3DB9AF0E9A9EBE5A6 E4DEA2EAE4AAECE4A6E3DB9CEDE5A6EDE5A6ECE4A5E0D899CEC687D4CC8DE4DC9DEAE2A3F1E9A9 E4DD9FDADB9FEDE9AFEFE3A9F3DFA5E5D094E1D08FE2D390E9DA95D0BF78AF9750E2C47EEED690 E6DC96F0E7A4F3E9AAE4D59BE9D9A6FCECBCE5D3A5F6E8B9F0E3B3D7CB99E8DCA9FEE8B7FDCE9C CCA063986F398C6437411E04DCC47AEBDB93F8F2BC9F9B77090D00C2CC8BD0D185E6E495E7E599 F8F5B1A9A3696C64349A8E6A1E1200BAAE7CFEF2B3E5DA8CD9C775AB8F44C1A45CFDE39AEEDA94 E6D691EFE5A4E2DB9ED9D89FF7F8C3D3D9A674794A291B0323000077471BCCAD70FEF4ADEEE1AF B39455FEE6A3DCD9A42A1B1163531EF6FDCDE3E2A8F1EAA3E6E08EE9E38BDBD47EDACD87DBCA9A E5D3B0301B1255411EF5EDC0FFF3B7FCEDA1D4AF5FB08C40B6964CD5C175F3EE9FE4E797E8E89B F1E098DDB572CB8C4FC38D53D5BE81EFDD9FE8D89ADBCF8FF0E5A5E1D998E0DA98EAE5A3E1DC9C EDE8A8E8E3A3ECE2A6EEE1AAE9E0A3EDE7A6E8E5A0F0F1A9F3F6ADF5F5AEF5F3AFF8F0B2FFF7BE E6D8A1E0CA95FFF2BEFCE7B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAD2D2D27B7B7B3C3C3C5151519A9A9AE6E6E6 FAFAFAFEFEFEF6F6F5B7BEB1515F45283022383839CACACAF9F9F9FEFEFEFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3F3C1C2C18788875455544747475454545A5A5A6161616A6A6A818181 A2A2A2DBDBDBFCFCFCFCFCFCD9D9D98F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEB B0B0B06161611A1A1A787878EAEAEAFDFDFDFFFFFFFFFFFFFFFFFFF2F2F2B9B9B96F6F6F181818 616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF2F3F29696962E2E2E1E1F1E 636463C4C4C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0C8C8C8686868222222636463B5B5B5 D7D7D7E1E1E1E2E2E2E2E2E2E3E3E3DCDCDCA7A7A7474747272727393939BDBDBDF2F2F2FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCFAECECF3D0CFF1CAC9F1CACAF1C9C8 F6D5D5FDE6E6FFF5F5FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6 E0E0A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF8FCE9DAFBDEC4FEE7D1FFF3E7 FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7DBDBE68B8BDD6A6AE7A09FF4D4D3FFFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7E2E1EBB0AFDF7978E17676F1C1C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8D5D5D5989898585858343434535353989898DEDEDEF8F8F8 FEFEFEFFFFFFFFFFFFF5F5F5C5C5C58E8E8E5E5E5E5151515454545959596060606A6A6A808080 A8A8A8D6D6D6FCFCFCFFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4 BBBBBB6969692929295D5D5DDEDEDEFBFBFBFFFFFFFFFFFFFFFFFFF7F7F7C4C4C47575752F2F2F 424242C4C4C4E3E3E3D1D1D16868684646465757579F9F9FE7E7E7F9F9F9FDFDFDFAFAFAA9A9A9 4D4D4D171717525252C6C6C6FFFFFFFDFDFDFDFDFDF4F4F4D4D4D4767676212121505050A1A1A1 CECECEE4E4E4E2E2E2E2E2E2E2E2E2E7E7E7A8A8A8505050191919383838A1A1A1FAFAFAFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F1D6E3E2A8EDEDC7FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF8F9E6EBE8AFE3C669 E1B54CF7E9CAFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFF6FBF8E1EEE1AFF3EAC8FDFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEFEFE9B1B1DA7676DB5F5F EBA2A2FCF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8DFDFE78B8BDF5656ED7878F7BBBBFFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE4D87AEEE183EFE286E4D97FF2E68CF2E88FEDE38BE3D982E8E08B EFE794ECE491F3E994ECE28DEEE48FEDE48EEDE38EF3E994EBE18CE5DB86F6EC97F5EB96EEE48F F4E793F0E18EEFE08BF5E691F1E28DEADC85ECDE86F6E890F8EA91EEE088EDDF86F3E68CEAE182 EDE785F0EA8BF0EA8EEEE78CE8E187F5EE94F2EB90F0E98DF1EB8CF2EC8BF3ED8BF6F091FEF899 F9F393F4EE8CF6F08EF7F18FF5EF8FFBF499F7F097F0E892EDE592F2E794EEE28EECE08AE7DD84 E7DD81F1E085E1C96DFADD83BFA249F2DB82F4E68BEDE68BEEE48AEBDD85E7D981ECDE86EEE088 E9DB83EEE088F2E48CEEE088EADC84EDDF88EEE088EADF86F3E791F4E894F5E997F4E797EDE191 FAEE9EFBEF9FF1E593EDE18DF1E68FF6E68EFDE990F3E58EEDE693ECE896F2E596FCE898E8C673 A9802EF4D17EF3DB8BF4E999F1E890EDE387EDE38BE6DC89E8DD93E4DA95D7CF8CE2DC99C3BE7A EBE69FCBC97DD8D589CEC37DA49250B59E5CDEC482FFE8A4ECDA93F2E89FE5DF98E5E29DF7EEAE E8D99CCDBE809C94539A92519C96559F9757AAA1639F9958807938968E4ADBD58FEFEAA0E0DA8D E4DD92EEE6A2ECE1A9F4E8B1FDF4B6CEC57AA39951887D4371653EE3D9B2141100999852F1EB9A EADF8FD8D085DFD694D1CA8E6D6630312A00B1AA6FF2EBA9ECE29AE6DC8CE8DD8CF5E99EF5E9A2 EEE29AEBDF97F0E49CF4E8A0EADE96EEE29AF3E79FEEE29AF2E69EECE197F2E99DE5DC98F2E9AA 81794F221B04DDD897FBF6B1D7CF85EAE097E5D992E1CF8CEFE09CE7DA97F7EEAFA89A5DBBAB6D E9D6928B490DE2A361F5E997E2E18FDAD48AEAD796EBD994EFE39AEDE89EEEE69DF2E39DF1DE9A FCF0AAEAEAA1E7E49DFBE4A4DD9F6D9F4714E4964FFFE694EDF19FEBEEA5EDDEA0E7D596EDE79F F2EE9FEFE595EAD78BEADE8FEBE295F7EFA3EAE197EBE297F3E99FE5DD92D9D188E5DE97F2EAA9 F1E8AAE9E0A6E6E1A6EAE2A5DFD798EFE7A8EFE7A9E5DD9EDED698E7DFA0DBD394E2DA9BDFD798 E6DE9FE7E1A2EBE6A9EDE5ABEEE0A6EFDCA2E8D69AF8E7A4E5D991F6EA9EECDC8CD5BD6AAA8936 E2C675FDEC9FF5E79DEDDF9ADED190D8CA8EEFE4AAEFE0AAF5E3AEF3DEA6EDD69DFEE6ADD9AE7C 8C5A28956529EAC08F7653298B6F46FAF0A3DED688F3EFB92F2E17424825DBE69CF7F6AEDFD994 DBD593EDE8AB5A541FCBC597261D09746749EDE1B0DCCF8EE7DC8CF8E897F6DA95BA9B5AAF9250 E1D293E8D698DFD294EBE4A8D8D79B5C5F2F292F00303818766235A87738B78550D1AE69ECD68A FAF1B8BE9A59FFE39FA19D6C251100E4D29AEBF2BFE3E7A5EEECA0EDE999F6F09EEFE496EAD994 F9E4AEFFEBC0B0966E1D0400BDAD86D9BE8ABF994CB59240D6BA6AF7E798F0EA9CE1E596DEE498 D9D990ECE19EFFE9AAEDC48ABC975AAB914DCBB470F9E8A4DFCD89E4D490E2D490E4D995F3EAA6 F6EEABF6EEACDFDA98DDD294EDE1A4F0E6A8F0EAA8E7E4A2D8D693FDFDB9EFEAA8FDF6B6F7EBAD FAEAAEF7E0A6FEE1A5F7CB8EDBAD70FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4BCBCBC4F4F4F151515666666A0A0A0 CACACAD1D1D1D1D1D1CACBC9939E8B3A4F2915210D242424A3A3A3D3D3D3E1E1E1F1F1F1FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEEEEEEC1C1C18788876060604A4A4A3434342323231C1C1C 2B2B2B515151A8A8A8E4E4E4F5F5F5DADADA8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFF EBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F 181818616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D4D5D4797979212021 323232858585D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEABBBBBB5D5D5D272727818181 E3E3E3F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF4F4F4AAAAAA3434342C2C2C575757D1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBFBFEF7F7FBEEEEF5D7D7EDB4B3EBAFAFEBB2B2 EBADADF1B9B8F9CDCCFDE5E5FFF7F7FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA ECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFFEDEDFFE0D7FDDCB9 FEEAD4FFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D8D8E68484DE6663EAA7A0F6D9D5FFFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7E1E1EBAFAEE07978E07576EEBEC2FBFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7DFDFDF9C9C9C5454543030303D3D3D969696D1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEDEDEDD1D1D19A9A9A7070704E4E4E3535352525251E1E1E 2B2B2B585858A2A2A2E6E6E6F9F9F9FFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFE F4F4F4BBBBBB6969692A2A2A646464EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4757575 2F2F2F424242C3C3C3DBDBDBBCBCBC3434342B2B2B676767A7A7A7CBCBCBD1D1D1D0D0D0CECECE 8B8B8B3E3E3E0A0A0A3B3B3BA1A1A1DCDCDCDFDFDFEFEFEFF2F2F2C7C7C76D6D6D222222616161 BDBDBDECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0B04444441D1D1D545454B8B8B8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFA FFF3F3FBEEEEF9EBEBF8EBEBF8EBEBF9EBEBFCEEEEFFF3F3FFFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFFBFCF4EDD5E8E1ADF0EDCBFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF3F1D6DFD78E DEC870E6C776F8EED6FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8EAE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF2F2EDBFBFDF8383 DC5050EB9696FCF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFDFCF7F7F3C3C3E56B6BE44D4DFAB2B2FFE0E0FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDF81ECDE80E9DE82EDE287F3EA8FEBE189F2E993FAF19C FEF7A4F3EB98E7DE8BF5EB96ECE28DEDE38EEDE38EEEE48FF3E994E8DE89E4DA85F9EF9AF6EC97 EFE590F4E792EBDC87E5D681ECDD88F0E18CF0E28AECDE85F2E48BF5E78EEBDE82E9DC81F4E88B E0D877EBE583F3ED8DF6F092F4ED91E9E287EFE88DF2EB90F8F294FAF494F6F08FF0EA88EEE88B FAF398F2EC8DF2EC8DFAF493F7F191F4EE8EF6EF94F5EE95F4ED95F5ED98F8ED99F2E692F3E791 EFE48BF4E88CF7E289F1D57BFDDF85D8BD65FDE990EADD81E7E186E9DF85E9DB83E8DA82EADC84 EEE088F0E28AEFE189ECDE85E8DA82F0E289F9EB92F4E68DEDE087F2E48DF0E28FF2E493F4E596 F1E193F2E294F4E595E9DB8AF6E793FAEC94EBDA81EDD97DE8DA81E8E28CE5E18DE7DA89F3DB8A DBB766B68D3BF4D180ECD485F0E496F1E693FAEE97FFF6A0F4E894F4E897EEE294EBE093E0D789 F0E89ADDD586EEE698FDF5A6D5C67ACDB96FCAB168DBBE76F4DB8FF1DC8FEFE292F3EC9DEAE396 DFD58CE2D18DDFCF8AD5CC82DCD48ADFD78DDFD790E4DA93D4CC84DBD28AE5DC92DFD88BE8E091 F2EA98ECE696EBE59BEBE0A4E6DBA0E4DA99ECE397F9F6AEBFB47C5347229B906B100D00AEAD63 ECE693F7ED99E7DE93E7DE9BD8D1956E673147400B958D55F2EAABEBE199EEE494F4E996F1E49B F5E9A1F2E69EEBDF97ECE098F2E69EEFE39BF9EDA5F0E49CEADE96F1E59DDFD48CE6DC97EBE0A3 C4BB80191100B6B172FBF7B3EBE799EAE393EBE194EADD9AEEDAA0F9E8ABF1E3A2E7E0A155481A 857538F4E29F86460ADB9D5CEDE191CECE7EE6E198F7E4A4EBD893EDE199EFE99FF0E79FF2E29C F3E09CE5DC95D9DB90E2E197FFF1B4CD895A953706EDA55EFFEF9CE9EF9CE7EDA5EBDCA0EEDB9E E2DA93EBE597EDE292E7D687DDD280D8CF80E7DD8EF5EA9CF1E798E1D789E0D788EDE598EEE69D ECE5A1E9E1A1E3DB9EDED69BEDE5A6DFD796ECE4A4EBE3A3E5DD9DEDE5A5EBE3A3E1D998E6DE9E DFD796E3DB9BE4DF9DE3E39FE9E4A1F1E7A6F1E4A6E2D494EBE19CD0CB81DCD587E8DE8CF0DD89 DABE6A97792AF1D790FAE4A0EBDA9AE5DB9ED5CC94EAE1ABD7CA97C3AC7AFCE3B2FFEAB9D5AA76 794B12A0743CDFBA86FFEABFC6AC80DBCC90E6DE92E3E198C5C28E080400999A61E3E499E9E1A7 FAF1BBF2EBB4B7B17E7E7A4B6F6B411B160FEAE6BFD2CA9BDBD195E2D98EDECF85FFEDB0FFE9AF C7AF748E783ECAB880EFE1A76D62301B16053C3907AEAD74D1D296E5C885CE954DECB675DEB667 FBEA95FCEAA9BD9752F1CC87615C368F7847FFFCC2E1E9AFE2E79FECE99DF3EEA4F2E9A2F2E49F F4E3A0EFDB9BEDD99FB7A16B513B153C2613C5AD7FF9DE96FAE697EBE190E2E092E5E398E3DB94 F3E0A0F9E1A5F4DB9FF2E2A2E7DF9BE1D48CE0C2789E8035CFB36BEDD48BF7E29AEDDB93EADC95 DCD18BC8BF78EAE39DE9E59EDBD28DE2D794E9DF9CEBE6A5E4E0A1F2EFB2FAF5BAECE3A7FDF0B3 F7E3A4F9DFA1FFE7A8FDD78DCC9B4FDAAA5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4BCBCBC4D4D4D000000161616 2424242F2F2F3131313131312F2F2F2224200D12090508030808082525254A4B4A787978C5C5C5 F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF0F0F0E1E1E1D8D8D8CFCFCFBABABAA0A0A0 7C7C7C4646462121214D4D4D9A9B9ADCDCDCDDDDDD8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFF FFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B8 6F6F6F181818616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEE8E8E8959595484848 1A1A1A616161C2C2C2EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEABBBBBB5D5D5D242424 737373D0D0D0F4F4F4FEFEFEFFFFFFFFFFFFFBFBFBE4E4E49393932424244646468E8E8EE1E1E1 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF0F0FBDAD9F2C2C1F0BBBAF8CECEFADFDE FAE8E7FBD8D7F5C3C2EFB5B4F5C7C6FFE5E6FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAF9FDF1E5 F7E0B2FAEBCCFEFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6CFCFE46A69E1554BF7BFA6FDE9DBFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7E1E1EAAFAEE07978DD7277E0B0C2E9ECFFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D89696964848482A2A2A545454959595D9D9D9F4F4F4 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF3F3F3E5E5E5DCDCDCD1D1D1BEBEBEA3A3A3 8080804F4F4F2626265353539B9B9BE2E2E2FEFEFEFAFAFACCCCCC7F7F7F3737373D3D3DDADADA FEFEFEF4F4F4BBBBBB6969692A2A2A646464EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4 7575752F2F2F424242C3C3C3DBDBDBBBBBBB3636360B0B0B151515262626303030313131313131 3030302121210E0E0E0202020D0D0D282828474747757575C1C1C1F3F3F3C7C7C76C6C6C222222 616161BDBDBDECECECFFFFFFFFFFFFFFFFFFFBFBFBF2F2F29A9A9A323232333333868686D0D0D0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFEAEAFDCACAEFB2B2E3A7A7E1A6A6E1A6A6E3A7A7F0B5B5FECACAFFEFEFFFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFBFBFFE9EBFDE0D0F9DEBAFBEDD6FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF2E9C6 E0C66FEACA7EF8D9ACFDF4E8FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8EAE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF5F5FACBCB F18F8FE04242EB8A8AFCEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF8F8F0C5C5E28383DD5B5BE46E6EFAD9D9FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E98BEBDE80E5DA7EEFE68BE7DD84F0E68FEBE28D EDE590F0E896EBE491E7DE8BF0E691E7DD88E7DD88E8DE89E9DF8AF2E893EEE48FE6DC87EDE38E EFE590F3E994F5E893EADB86E4D580E9DA85EDDE89F3E58DEFE188EBDD84ECDE85EBDE82EBDE82 F2E689F1E987F4EF8BEEE887EEE88AF5EF92F2EB90F4ED92F3EC90F2EC8EF2EC8BF5F08CF7F190 F5EE94F9F298F2EA90F2EC8FF7F193F1EB8BEEE889F9F297FDF69CFBF49BF7EF9AF9EE99F6EA97 F9ED97F6EB92FAED91F1DB82F7DD83D2B359D9BD64FCE68DF1E68AE0DC7FE5DB81ECDE86F0E28A EDDF87EFE189F7E991EFE188ECDE85E9DB82F4E68DFCEE95F8EA91F1E38BF3E58FEFE08BF1E290 F7E798F5E597FBEB9DF9E999EBDC89F1E28DEBDD85D8C76EE6D273E2D578E7E188E2DE89E1D583 F3DC8AD7B361C69D4CFFE291F3DB8FF4E79CEEE396F4E896F5E998E4D884ECE08CE2D581E4D783 FBEF9CE2D585F7EA9BD5C779F2E596EDDC8BFCE797D6BB6BECCD7CF4D986FCE590EADB85EDE38E F0E895EADE8FF4E197FAE89BF1E794EEE390EBE291E9DF8EF8EC9FF2E89AEBE192EADF8FF1E896 EEE590E9DF8AE8E18DE3DD8FE5DC99F3E8AAFBF0AEEDE498EEE49CDFD49C4B3E1A6C613E252200 A9A860E2DD8AEBE18CE2DA8ED5CC89D3CB8F605923625B28746C34F2EAABE7DD95EAE091E5DA88 F1E59CF0E49CF5E9A1F2E69EEEE29AF0E49CECE098E9DD95F9EDA5E8DC94E8DC94F1E49FEADE9F FDFDC3483E1B756D42F2ECADE4E194DEDC87E7E18BE4DB8CFBEEAEBFAA79CDBC83F6E8A9E3DC9C 4D3F18827536FFF2B196551BDB9E5EE4D787B7B868E5E098F6E3A4EDDC97ECE098F0E89FF1E69F F1DF9AF5E19EE0D890E7EA9EE7E59BFFEAADC07346AE4D1DE8A25AFFF19CE3E996E5EBA5EADBA0 F6E3A7DDD38CDAD486E1D685E8D586E3D785E5DC8ADBD080DED382F1E897F3EB98DFD786F3EC9B F0E89CE7E09AE8E09EEAE2A4E8DFA4E2DA9BDFD795EFE7A6EBE3A2E7DF9EEDE5A4E0D897E3DB9A E6DE9DE1D998EDE5A4E9E4A0DFE193DCDD90DCD88FE4DD97D8D38FDAD893D3D58EDCDE93E6E396 EFE091FEE498C9A85ED3B16AFDE19EFCE9A8F6EAACE9E4A9FAF8BFCBC08ABDA670FFDBA8BE8B57 743907865A1CFFE7A7E5D9B1CEB791FFFAC8E0DC95E1E199FEFDC1726C41393103E8DEA1EEE39C F9EDBF9B90697A72485E5930A6A47B19190680805CDEDCBAE8E6BBDCD9A1F4F1ACEAE39EB7A870 CABA84FFFAC5E3D39DC4B57F3526003A2C04BEB077FFF8BCF3E8ABD5C98CD2A861C38030F8BC71 D2A54DFEEA8EEAD58FBC9149E3B871A5A063DFC68BFEF0B4E4EEAFD9DC91E3DF93F6EFACEFE5A9 F4E4AAF7E6A6F4E49DB5A65C4B3F067B6F36342700EADDB3F7E7A6FAF1A8EAE59DE3E39CE7E19D E2D395FAE3A8FEE9AFFDE5A8F3E5A2E9E59CEBDC90FFEC9BFFDC8EC3A253C9AB5FE9CC82EBD48A E7D58CE3D58CB6AB63D4CC84E4DE97F5ECA4F4EAA1F2E9A3FFF9B9F0EBAFEBE5AFECE2AEFBECB7 F6E2A9FFF1B4FFF4B4EECD87A88539D3B160FEE999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9D3D3D3828282454545 4A4A4A4B4B4B4C4C4C4C4C4C4C4C4C4A4A4A3D3D3C2324231010100D0D0D3B3B3B6364638F8F8F CFCFCFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFAFAFAEEEEEE DDDDDDC3C3C37979793233322F302F747574CECECEDFDFDF8F8F8F4141412B2B2BC7C7C7FBFBFB FFFFFFFFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 B8B8B86F6F6F181818616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEDFDFDF646464 2F302F3031308A8B8AE2E2E2FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFC7C7C7676767 222222676767BFBFBFF1F1F1FFFFFFFFFFFFFFFFFFEDEDEDBABABA6A6A6A2929296C6C6CC5C5C5 F0F0F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF9DCDCF4C8C7F2C8C7F5D4D3FDE6E6 FFF4F4FFFBFBFFF0F0FAE0E0F3CECDF0B6B6F1B1B1F4C9C8F8E5E5FEF9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FAF7E9EDE1ABF3EBC6FDFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6CCCDE36262E25049FAC7B4FFEEE4 FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBEAE4F2BFB3E4786FDD6062E4ABB9EFF3FFFCFCFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8D7D7D7989898555555373737515151929292D2D2D2F5F5F5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF1F1F1 E0E0E0C4C4C48686863333333A3A3A696969D3D3D3FDFDFDFAFAFACCCCCC7F7F7F3737373D3D3D DADADAFEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 C4C4C47575752F2F2F424242C4C4C4E3E3E3D3D3D37272724C4C4C4949494B4B4B4C4C4C4C4C4C 4C4C4C4B4B4B3737371E1E1E0707071515153C3C3C6363638D8D8DCCCCCCF6F6F6D4D4D4757575 222222585858B3B3B3E8E8E8FFFFFFFFFFFFFFFFFFF4F4F4BFBFBF7070702F2F2F5B5B5BBBBBBB E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFA FFE9E9FFD2D2FEBCBCF3BABAEBBFBFEABFBFEABFBFEBBFBFF5C2C2FEC8C8FFD8D8FFEBEBFFFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFAF5F4E4CDF6E1C6FCE8D1FFF5EAFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF9 F3E1B7E1B44CEECA83FEEBD6FFFAF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF8EDEDE1B1F3EAC2FDFBE9FFFFFBFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8 FED8D8F7A0A0E14040EB8686FCEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F4F4F4F7F4F4FBE8E8EC9D9DE05E5EE56969F09A9AFCEBEBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E88BECE287EBE086EBE087D9CF77E9DE87 E5DC87E9E18CECE290E9E28EEAE28EF2E794E8DE8AE8DE8AE9DE8AEBE08CEDE38EEDE38EF0E691 EEE48FEDE38EE8DE89EDDF8AEDDE89EEDF8AEEE089EBDE85EFE189F3E58CE5D77EE2D47BEEE185 F1E488F1E688F0E886F5F08DECE685EAE486F4EE91EEE78CF7F095FCF69AFBF597F3ED8DF2EC89 F6F090F6EF96EFE890F1EA90F6EF93F5EF92F1EB8EEAE387F2EB90F2EC91EDE68DF1E791F5EA95 F2E792F4E992F5E990FCEE93F1DC82E7CC71A4852BF1D87FF8E58CFDF297D7D377E3D880EADC87 F0E18AEEDF88EBDD86EFE089EBDD85F4E68DF0E28AEADD83EFE287F3E58AECDE85F1E28CEFE08B F1E290F4E494F0E092F6E798FBEC9AF0E18EEDDE89ECDE86E8D87CF0DE7EE8DB7EEEE78DE5E28A E6DA85FAE591CEA958BD9343FFE193EED78CE7DB92EBDE96EBDC92F0E395E6DA89E9DD89E8D884 EADC85EDDD89EFDF8CF5E496E3D284E4D285EEDA88FAE38ED8BD69F6D784FFED98FCE78EECDD84 E7DC84F6EC95E9DC8AECD88AF4E08FEFE289E8DD83F3E890EFE48FEEE28EE6DB89ECE08EE8DC89 E8DD87F0E58EF0E58CE6DE86E7E18FF1E9A3EAE0A0DED491DED589F6ECA5CABF873E3210B3A984 322D01A3A25EEAE494EAE18DEFE79AD9D18DE2DB9E5A531D8B844F615924EFE7A8E1D891F4EB9B F3E796EBE097E2D78FEBDF96F5E9A1F2E69EEFE39BECE098EEE29AF3E89FE8DC94EDE099F0E5A3 FAEFB68F8449382E0AD5CF94F5EFAEDDD98AD4D27AE0DA81ECE293FFFABD836E43897843F2E5A5 EBE5A65A4E1A7F7035FFF7B89D5F25D59B5BF5EB9CD0CE7FE2DD94DECE8EF1E29CECE199EFE89E EFE59EEEDD98F5E29EEDE59EE8EBA0DAD98FFFE7A7B96737B65322E19E54FFEB97DCE391E3E7A1 D9CA8FEAD69BEBE19BECE699F1E494F2E090EADF8EE8E08EDDD282DCD17FE2D885FBF59EEAE38D F3EB9AEAE394E3DB93EAE19FF2EAACEFE6AAE2DA99E7E09BF1EAA5E6DE9AEBE49FEDE6A1E4DD98 ECE5A1E1DA96D8D08CF3EBA7EAE59DE9EC9AE3E795D7D98BEBE9A0E8E7A2DBDE9BDEE49FD9DC99 CCCB84E0D58FE3CE8AF3D68ECBA95BC0A155ECD58AFAEDA3F0EDA3E9E7A0F7EEA7FEE6A39F7535 834C0DC28747FFE496CCBA6F604B30C2B593DEDBA5E0E598E5E7A8D2CF9F261C01AFA06BF2E0A0 FFECAE958763372B19A59D7F575432878764060802171B082C2E14D4D5B2F9FCCBE4E6A77C7C47 272100C1B986F5EBB9FFFCC990844C322407BEAE76E7D69CEDDDA1ECD698F1D998C59346CA832B F5B563D5A448FEE686F5E396B4893EE1B26BF2E8AAFBE7AAFBE5A7D4DF9CCFD184D5CC80F0E5A6 ECDDA9EADCA7DACB8DC5BB6FD7D17EC0BD6BAEAC6B3633187F7C55FFFFC7EAE1A1F1E6A8F1E2A5 E8DC9EF0E7A7E0DB99EFE9A5F2E7A2F0DB96F9DA98FFE099FBDF8EFEE696BE9D4CAF8F40A9893B E9CB80EFD58AF5E096DFD289E9E098DAD38AD0C87BE9E093F5ECA6F5F1B1F5EDB5EEE5B1F3E7B5 F7E5B0EFD59DFFF3B5E4C27EC19D57CFBB77F6ECA6FFF9B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFC6C6C6 A5A5A5A6A6A6A6A6A6A6A6A6A6A6A6A7A7A7A3A3A38585854D4E4E2424241F1F1F838383B3B3B3 CECECEEBEBEBFDFDFDFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF2F2F2F2F2F2F6F6F6FAFAFAFAFAFA F8F8F8F5F5F5EDEDEDA2A2A25050502B2C2B656665C8C8C8E0E0E08F8F8F4141412B2B2BC7C7C7 FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFF F1F1F1B8B8B86F6F6F181818616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFF9F9F9D0D0D0 3D3D3D282828545554B0B0B0F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6D7D7D7 757575232323565656A7A7A7E6E6E6F9F9F9F9F9F9F8F8F8CECDCE858585464746414141999999 F4F4F4FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFCF2F2F2C9C8F0C1BFF7E0DFFEF9F9 FFFBFBFFFCFCFFFBFBFEF7F7FCF0F0F8DFDFEBA3A3E27979E69595EFC4C3FCF3F3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEF8F7E8E3E1A5ECEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6CCCCE36162E24F4FFAC8C4 FFEFEDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEF2E7F9CFB8E87564DE4B4BEDA9ADFDFFFFFEFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E0E0E09696965252522626264646468F8F8FCCCCCCF5F5F5 F9F9F9FAFAFAFAFAFAF9F9F9FBFBFBFEFEFEFEFEFEFBFBFBF4F4F4F0F0F0F6F6F6F9F9F9FAFAFA F9F9F9F6F6F6E9E9E9B0B0B04C4C4C3535354F4F4FCBCBCBFCFCFCFAFAFACCCCCC7F7F7F373737 3D3D3DDADADAFEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF F6F6F6C4C4C47575752F2F2F414141C5C5C5ECECECEFEFEFBEBEBEA9A9A9A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A5A5A5777777404040101010303030818181BABABACFCFCFEAEAEAF9F9F9E4E4E4 8383832525254949499E9E9EDCDCDCFEFEFEF9F9F9F5F5F5DDDDDD8181814949493E3E3E8B8B8B E8E8E8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFF4F4FDCACAFDBCBCFEBEBEFDDADAFBF0F0FBF3F3FBF2F2FBF1F1FDE6E6FFD6D6FDC1C1FDD1D1 FEF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFAF9F0E6E3B0EBE7BDFAF6E9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFAF2F0D9A5E1A934EECC88FFFAF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF8F1FCE2C2FDE9C5FFF9DAFFFFF2 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBFBFFE5E5F7B0B0E14040EB8585FCEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFAE6E5E5EBDADAF6C8C8EA7979E24F4FF08585FDC9C9FEF5F5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDE86EFE189F4E68EEBDD87DACF7A E9DB88E4D986F1E593EEE192E9DC8DF0E495F1E695E7DC8CE6DB8BE7DC8CECE191F2E795EADF8D ECE18FF4EA96EAE08BE4DA85EDE08CF3E490F2E390EEDF8AECDD88F0E18BEDDF87F0E289F2E48B ECDE85EADC83F3E78CF7EE8FEDE785E9E384F0EA8CF7F095F6EF94F8F196F9F298FCF698FAF496 F7F18FF5EF8FF9F499F7F297F5F095F2ED93F5EE95F6EF96FAF097F8F095E7DE82F6ED90FEF79C F0EA8EE1DD84F0E890F7E68FFFE68FF2D57DDBBF66BAA147FDE990F1E289F4E990E8DF86F0E48E F3E992E3D683E2D583F5E898ECDF8FEFDF90E7D885EFE08BF5E58EF0E087F3E489EBDD84F0E28A F4E590E7D885EDDE8CEEDF8EEDDE8DFAEB98E7D885E6D881F6E890F4E68CF4E98AF7E48CF1E38C EBE68CEDE58AFCE98FCD9F4BD4A44FFFE18CE9DC8AEDDF97EFE397EDE293EEE391EEE28FF2E691 EBDF89F5E691F4E591E7D883EADA85F2E28DF4E390E6D27CF0D885CCB161FBDE91CEB56A8E7B2E EBDE8FEBE392F0E797ECDF91EEDA8BF2DD8EF0E18DF4E591EEDF8BEADB89E9DB89E2D284E6D688 F6E798F2E394EEDE8FE8D88ADED483ECE494DFD58FEEE4A6E1D69DE8DDA3FCF1B8B2A970655B32 ECE4B2251D00B2AD75F4EBAEEEE3A3EBE19EEFE8A2E7E09B4F4B169B9758524B11E7DFA2EAE19F EFE59EEAE194F4ECA1E0D88CE9E093F0E399EDDF96F9EBA2EADD95EADD96EEE09AE8DB96FFF5B0 EDE2AEADA6800F0D00B8B36EEAE2A5EEE4A6DDD28DE7DA92F0E299E2D588FFF7B36F5A38938652 F4EDA7E0DB9B675E237C6D33FFEEB3956C30A17938FFF5ACEFE095EBE399E7DF99F2EBA5ECE19C F1E59EEBE59AE6DD94F3E29DF8E3A4E3D894EEE79FECD68DBB7133B45C1EE4B76CF5E394EAE59A E6E59EDDD594E6DA9CEFE3A2F4E7A2F3E49EE8DB91EBE395F2EB9AE9E18EE4DB88E0D982E4DD84 EEE78DF4ED96EAE292F0E79EF6EBAAEBE1A6F1E6AEF6EDA7F2EA9FF4ECA1EAE099E1D991F0E8A0 E6DC95EAE19CD6CD88E4DA98EAE09EF5ECA9F6F2AEECE8A3F2EEA9ECE59EDBD58DEEE8A1EDE79F EAE39BE7DF98E5D995E6D894E2D591E6D891D1AB6BB88545FBDF98E1CE7FBAAE5CFFF2A69E6B2C 834711F3BE8AFFFAC2CCC077151106BCB57CE0D8A4BFBB82CECB8DDDD8A4575026686141F7F0CA FFFDD6AEA78419130346443B9390776665485C5B420404000202003A3928FEFEE7D1D0AE323116 010000221B08E4DAABF8ECB9D7CE94221905ACA666F1E9AAC8BE7ABEAD65F0D486FEE996BC8D30 EDB554EEB157EDAF58FED57EEDEC94D6B86ECD9C5AEFDC9BF6DF9FEBDB99D5DA92D9CD7BF3DE8B EFD991C0AC6CBAA769E3D391FBEFA8FBF6ADD0CC89E8E6AF807D58252100F6F2BAE9E3A2E7DC96 E8DD93E3D78CEBE097E3DA94E4DC98ECE3A0EEE19FF7E6A3F7E09FF9DD9EE9E098EBE99CF8EE9E CAA65EC48E4AFFCF8CFCE29BEAD288E3D98DD7D085F2EAA1F7EDA8E8DF9CE1D799F1E8ADF5EBB1 FAEBB1FEF7BAFFEAA7D7B46BC99E4FF0C677FFF2AEFFF9B8F8F0AFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC EEEEEEE4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E6E6DFDFDFB0B0B05E5F5E333333393939B9B9B9 E7E7E7F3F3F3FAFAFAFEFEFEFFFFFFFFFFFFFEFEFEF4F4F4DCDCDC9A9A9A999999B9B9B9D2D2D2 DADADADCDCDCD8D8D8CACACA7D7E7D3030302728276D6E6DCCCCCCE0E0E08F8F8F4141412B2B2B C7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFF FFFFFFF1F1F1B8B8B86F6F6F181818616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFBFBFBDBDBDB A3A3A3272727363636818181CFCFCFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD E9E9E98A8A8A2626263636366F6F6FC3C3C3DBDBDBD4D4D4A6A6A66F6F6F4747474C4C4C8B8B8B CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E9E9F3CFCEF2C1C0F7CFCFFCEFEF FFFFFFFFFFFFFFF7F7FEEAEAF6D8D8EEB0B0E88382DF5F5FDB5F5FE28686EDBBBAFBF1F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDF7F7E8E1E1A4EBEBC1FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6CDCDE36163E24F51 FAC8C8FFEEEFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEAE4F2BEB0E2645BDD4343F0A9AAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAD1D1D19A9A9A4A4A4A2C2C2C3131316E6E6EB1B1B1D1D1D1 DFDFDFDCDCDCDCDCDCDCDCDCDADADAE6E6E6F6F6F6FAFAFADFDFDFABABAB8B8B8BB8B8B8CDCDCD DADADADDDDDDD9D9D9C8C8C88C8C8C303030323232616161D1D1D1FDFDFDFAFAFACCCCCC7F7F7F 3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFF FFFFFFF6F6F6C4C4C47575752F2F2F414141C5C5C5EFEFEFFBFBFBECECECE5E5E5E4E4E4E4E4E4 E4E4E4E4E4E4E5E5E5E2E2E29D9D9D4E4E4E1D1D1D4F4F4FB5B5B5F2F2F2F3F3F3FAFAFAFDFDFD F7F7F79595952C2C2C2A2A2A6B6B6BB4B4B4E1E1E1D9D9D9B8B8B88A8A8A4343434B4B4B818181 C8C8C8FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFBEFEFEEB3B3F3B9B9FCD9D9FFF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFCE7E7F0B3B3 F1BFBFFBECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE2E3A8E8E9BAF9FAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBF3F0EECEE3D188DEB142EED499FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F5FFE2D6FFE2C9FFEACA FFF7E7FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFEF2F2F7BEBEE13434EB7B7BFCEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFEFEE3DBDBE1AAAAE77979E15252E16464F3AFAFFFEFEFFFFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDF8AEADC86E9DA85EADB87 ECDD89F5E693F1E291F1E190ECDD8BE8D789E6D98AE2D688E0D586ECE192F1E697E9DE8EEDE291 F0E593EBE08EF1E693EBE18CEDE48FF1E491F2E390F5E692F3E48FF0E18CF2E38EF1E38CEEE088 EBDD84E7D980E5D77EE3D67CF0E788E9E484EAE486F1EA8FF2EB91EDE68CEFE88FF4ED92F7F095 F7F193F6F091F7F191F9F496F4EF94F3EE93F4EE96F4EC97F4EB96F7ED96F8EE96FCF297EEE485 E6DC7BECEA8BEEEF95EFE78DFAE48EFFE38DF7D57ECCB158B6A146FFF196F7EC92F7EB93F3E590 F5E993F6EC95EDE290F0E394FCEFA1F1E497ECDC90E5D586E9DA88ECDC87E8D880F2E288F0E289 F2E48CF8EA92F1E28FF9EA98F8E998F0E190FAEB99EADB86E7D982F4E68DF2E88EEBE186F5DF8A EDDB87E4DF85EFE98AFFE88DCC953ED9A750FFE68DF0E892F6E89DF1E597F2E794F5EB96F5EA96 F7EB96F1E58FEFE18BF3E48FE6D87FEBDB84EEDE86EEDE85FBE791EED682D2B768E9CD83A2893F 7D6B23F3E89EEDE79BEDE698ECE091F1DC8EF7E091EADA8AF0E190ECDD8CEDDE8CEEDE8FEBDB8D EFDF91F3E295EFDF92EDDD90EEDE91EEE292F4EB9DE9DF99E8DDA3DED29ED9CE9CEDE3AE4D440F 7C7437F7EFB7554E19918858E0D4A3F1E6B2E7E2A6D7D08AEDEAA0666423A5A161615D1FE5DDA0 F0E6A8EFE5A0F0E79FEDE69AEBE596E8E193ECE094EFE296EFE195F2E199E5D78FF8EAA4EEE39D E9DE9BF6EFBE413D2B838340FFFFB9EEE8ABEBDF9EE9DB98F0E1A0E2D294EEE197FAEEA8A1906F 6E6531EFEBA4EBE6A6867C43796B34FFE9B0AD90509E7E3AFFE9A2F0D990F1E59CF1EEA6E5E29B EDE39DF2E59CE9E394E5E092EDDF99F0D598F3E3A1EFE99FDDCB7FBD7933B56623EACD82F8E89B EEE399EAE59EE5E09EEFE7A6E8DC9DEDDA9DF0E19EEADF99E8E097EAE495ECE492E6DE8BD8D17A DAD37AE8E187E7E089E0D988EEE59AF2E7A5F6EAAEF5E9B1EAE09AE8DF92E2D98EE6DD92F0E79D EDE39BE9DF98F2E9A2E2D993E8DD9BE5DA98EEE5A3D2CA8CC1BA7CC4BC7BDBD28DEAE199E4DB90 EEE59AECE098EDE39CF3E8A3EFE4A2E7E29ED9D492E9CC8EEFC281DBA660E4B66BF3CA7B9E7126 703A0DE9B880FFE0ACF2EAB33E3F216C6D33F9F5C2FBF5C4CCC493E6DBAE988E620A0100676042 A5A1864D4D351012000506041615080D0C006C6B5935332A040000030000423D318C87772F2A19 4A472A9E9A73BCB389F8F0C2FAF8C6756A36554C10FFFFCAEEECAFF0E8A9EFDF99C1A458E7BC6C C4973CF6C260E9A951D79040FFDA8BF2F59BD8BD73AF7D40F1D392EFD694F3E39EE9E79CE5D480 D8BE69D2B86AE5CE88F3E09EF0E09DEDE49FEBE2A1DAD499FEFACCB1AD880C0800BCB47BE6DD9C EDE59CF2EA99E5DB88EDE091F0E29BF2E6A4FDF2B3F5ECACF2EBA7ECE3A3F1E3A9E0E19FE0E59E F7F2A9FFE39FE3AF6ECF9051F1BE7AFFE89FF1E294D8D284E8E29DF2EAADF0E5A8ECE0A2FDEEAD FDEDAAFDE7A2F3DD95C7A75CBD9A4EF2DA8AFFF4A7FFF0ACFDF6B5F6EEADFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEF5F6F5BCBCBC5E5F5E383838464646 CECECEF9F9F9FFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1CECECE646464525252717171 8989899090909191918D8D8D808080535453303030525252999999DBDBDBDDDDDD8D8D8D3F3F3F 292929C7C7C7FBFBFBFFFFFFFFFFFFEBEBEBAFAFAF5F5F5F1818187E7E7EF7F7F7FFFFFFFFFFFF FFFFFFFFFFFFF1F1F1B8B8B86D6D6D161616606060CCCCCCF6F6F6FEFEFEFFFFFFFFFFFFF6F6F6 BCBCBC727372181818494949AAAAAAE8E8E8FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF5F5F5ADADAD525252393A394546458181819191918989895959593E3E3E4A4A4A7E7E7E CECECEEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5DAD9ECB5B3F4C6C5FDE5E5 FFF7F7FFFFFFFFFCFBFBDDDDF5BBBBEAA2A2E47C7CE15A5AE16161E37F7FE69897EDBBBAFCF1F1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFBFBF2F7F7E6F4F6E0 F8F9ECFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFFF6C6C6E35F60 E25050FAC7C7FFEEEEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E7E6EFB6B5E0605FDD4445EFA9AAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6AEAEAE5C5C5C1A1A1A151515313131636363888888 9090909191919191919191919191918D8D8DB1B1B1E7E7E7FCFCFCD3D3D3808080464646717171 8585858F8F8F9292928D8D8D8080805C5C5C313131575757989898E1E1E1FEFEFEFAFAFACCCCCC 7D7D7D3535353B3B3BDADADAFEFEFEF4F4F4BABABA686868272727626262EAEAEAFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6C4C4C47474742D2D2D3F3F3FC4C4C4EFEFEFFEFEFEFDFDFDFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFDFDFDFAFAFAA8A8A84E4E4E2323235E5E5ECACACAFFFFFFFDFDFDFEFEFE FFFFFFFFFFFFB5B5B55A5A5A3131314444447373739595958E8E8E6F6F6F5050504848487A7A7A C4C4C4F1F1F1FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEF9EDEDE3A8A8EABDBDFBEEEEFFFFFFFDF7F7FAE5E5FAE1E1FEF5F5FFFBFBFBF0F0 E5AEAEE8B8B8F8EAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F8E6E6E5ABDDCF76E3C36BF2DFB2FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E1FFDCCB FFDFC0FFF1E1FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFAFAF7C7C7E13232EB7474FCE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F9FAE8E8F7D7D7 F7CACAF3C7C7ECC0C0DFA5A5DC7575DC4C4CDF5C5CE79898F6D7D7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E58DF1E38AEDDF86 EDDF88F1E38CF4E591F7E894ECDD89EEDF8CF3E491EBDF8CECE091E4D98AEBE091EFE494E9DE8E E6DB8BE6DB89E9DE8CEFE591E7DD88E4DA85E9DC88ECDD8AEFE08BEFE08BEFE08BEFE289F1E38B EFE188EADC83EEE087F1E38AEADE83EFE687EEE889F2EC8EF5EE93F2EB91EBE48CEEE78FF4ED93 F5EE93F1EB8DF1EB8BF4EE8FF9F498F5F195F5F095F7F199F7EF9AF5ED98F6EC95F8EE95F1E78C ECE185E6DC7CE2DF80EEED93EEE28AFBEA94FEE28CF7D57ED4B85FD3BE63FFFEA2FCF299F2E68E E9DA85EFE48DEDE38EEFE492F6E99AF6E99AECDF91FBEB9DF3E493F5E692F7E792F6E68EFFF095 F2E48BEEE088F4E68EF2E390F8E998F2E392F3E493F5E693EDDE89E6D781EDDF86F2E88DEEE488 F7E18BEEDD86E0DC80ECE688FFE98CD29B42DDAB51F8DD83EDE58EF4E699EFE395F5EA98F8EE99 F5E995F6EA95F2E790EADC87F0E18BE7DA81F0E089F3E38BF2E28AF2DE87FBE48FCFB463E9CC80 F5E297F2E397EDE395EBE595E8E190E7DA89EDD988F1DB89ECDD89EEDF8BEADB87E9DA87EADB89 EDDE8DF1E291E7D888EADA8DE8D88BEBDB8DF3E697E5DC8EE9DF99EBE0A4DACE99F0E6B2B2A971 3D3403948F51F9F3B9726B35958C5CF0E4B6E6DAA66A6025C7BF7EE0DC9883803C868244625D27 C4BD84EEE4A5E6DC97ECE49BEDE59AEEE79BE9E294EFE397F2E698EADD8FEDDD92F7E89EEBDF96 E9DF98EEE59FBFBC87413E1DEBECA9BDBB75ABA569EAE19AE9E093E9DE98F9ECB3F3EAA7F6EEAC C2B690413904FAF5B2F7F2B482793F867841FFF3BAB59657916F2AFFE9A0FAE499F2E79CE8E49A E1DB93F0E59CF2E297EBE493E9E494E2D68DF1D797F8E9A6E7E299EFDF93E09F59BB6E2AEFD388 F6E79AE8DF95E7E39BE6E3A0F0EAA9E7DA9CE8D799EEDF9CEEE39CE5E095E4DE92F2EB9CF3ED9C DFD985D8D27BD3CD76E0DB85EEE796F3ECA0D5CC87EAE1A2FAF1B5E7DF9AEEE69CE9E198E6DE96 F0E89FF0E89FE1D991EAE29AE3DB93E6DD96E4DB95E5DC98CFC7899F9757A29B58AFA662CFC77F E8E197E5DD92E5DC93E6DF96EBE39DE5DC99DFD493DACC8CE5DE96EEE196D1AE63D6914EC97937 A35F1ED0AC65EFE39EF2F3B1CFC68D1A1403645F43F0E9CDF6EDD0C3B997978A7011040041351D 130B00100A003A371EA7A68B25211C0000000F0C0A0A07060F0B07322D273D3931020000221D0F 847E67F8F3D1F9F6CEF3EDC1FEF5C5A29764322901D2CC96EBE7B3E4E1AFEEE5B7FFF0C1DCBC88 B48950B9873CE9B056F7B565E5984EFEDB90FFFBA4D3B26A9E6529FBDA9BFCEAAAFAE9A3D7CF84 C8B765DFCB78F6E69AFFF3ADFFF3B0F7EBA7F3EAA5F4EEABF0ECAEEDEAB7DAD7AE191405918B52 F5EDADF5EDA5F0E796DCD27FE9DE8FF8EBA3EDE2A1EEE3A5E4DB9CEBE5A3EBE8A5E6E4A2ECE5A4 F2E4A2F1DD9BFAE3A2FFE7A5D4AC6ABA8D4BDDB670FFF6A9E8E290E9E8A6E9E6AFF2E7ACFFEEAE FFEAA2FFE79AEACC7DB79345D0AF63FDEAA1F5E8A3F8EAA8FCF1B3FDF5B6FAF2B3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAC1C2C1656665404140 505050D3D3D3FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9DEDEDE7A7A7A4E4E4E 4747474343433D3D3D3C3C3C3F3F3F474747575757707070A9A9A9D9D9D9F0F0F0DBDBDB929292 474747313131C9C9C9FBFBFBFFFFFFFFFFFFECECECB2B2B2656565212121838383F7F7F7FFFFFF FFFFFFFFFFFFFFFFFFF2F2F2BBBBBB7373731F1F1F666666CECECEF6F6F6FEFEFEFFFFFFFFFFFF F4F4F4ACADAC5B5C5B1919195E5E5ECDCDCDFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFBDADADAA2A2A26D6E6D4647463F3F3F3C3C3C3D3D3D4242425F5F5F909090 C5C5C5EFEFEFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D7D7EBB1B0F5D0CF FEF3F3FFFCFDFFFFFFFEF8F8F2BEBEE68484E07575E68282F09C9CF5BABAF2C4C4ECB5B3EDB9B8 FCF1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F1F1D5E5E5AF DCDF95E8EAB9FAFAEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF8F8F6BABA E35A5BE25152FAC8C8FFEFEFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF0F0F7C9CAE66D6EDE4647EFA9AAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4A4A4A44C4C4C1818180F0F0F1B1B1B2F2F2F 3B3B3B3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C353535757575D6D6D6FFFFFFE4E4E4979797545454 4C4C4C4444443D3D3D3B3B3B3F3F3F4747475353536D6D6DA3A3A3DADADAF5F5F5FFFFFFF9F9F9 CECECE8282823C3C3C434343DBDBDBFEFEFEF4F4F4BDBDBD6D6D6D303030686868EBEBEBFFFFFF FFFFFFFFFFFFFFFFFFF7F7F7C6C6C6797979353535474747C6C6C6EFEFEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEAEAEAE5555552C2C2C666666CFCFCFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDDDDDDA9A9A96A6A6A4545453C3C3C3C3C3C3D3D3D4444445858588C8C8C BEBEBEEAEAEAFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFEF9ECECE2A7A7E9BDBDFAF1F1FFFFFFFAE6E6EEAAAAEC9898FBD8D8FEF2F2 FAF1F1E4AEAEE7B7B7F8E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7F7E1E6E5A0E2D67EF2D69CFAEACFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E3 FFDBCBFFDDBFFFF0E0FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF7CCCCE04040EB7474FCD6D6FFF9F9FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E3E3ECAEAE E57A7AE45757D95151D05252D95454DB5555DD6060E89999F5D6D6FCF3F3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7DA7EE7DA7F E9DB80E8DA81E5D77EE5D77FEEE088E5D77FEFE18AFBEC97F2E693F8EC9EEFE494EADF8FE5DA8A E7DC8AECE18FEDE290F3E994F4EA95EAE08BE2D881E8DB85EBDC87EADB86EBDC87EEDF8AF1E38B E7D980EEE087F1E38AF1E488F9EB90FAEE92F5EC8DF5EF90F7F193F5EE93F3EC93F3EC94F2EB93 F5EE95F5EE93F1EB8DF1EB8CF4EE90F5F095FAF49BF9F39BF5EF99F8F09BFCF39EFFF59EF9EF96 F0E78CFCF196FCF394EEEA8DF6F59BF6EB92FDE791F1D37EE9C770D4B85FE9D479FDF094F6EB91 F3E990EADE88F5EA95F1E793F1E694F6EA98F6E998F2E697F1E193EBDC8AEEDF8AF7E791F6E68E F2E28AF6E88FEFE188F3E58DF2E390F7E897EEDF8EF7E897F7E896F2E38EEBDD86EEE087F2E88D EFE589F5DF89F4E38CE4E084E4DD7DFADF82D49E44E4B357FCE386EFE88DF1E493F0E493F4E997 F1E792EBE08CECE08CEBDF89EDDE89F2E38EE7D981EEDE87F2E28AF2E189F3DF86E6CF79E0C772 F2D585F2D98AF3E191EFE595EDE896EDE793EEE18FF0DD8BF0DB88F5E790F3E58DEFE189EADB86 E9DA85ECDD8AE9DA87E5D683EDDE8DE9DA89E5D685EBE18FEAE394E2D993E3D99CDDD29CD6CD96 716A30756F31908A4CE4DFA457521B8C8555FFF3C796885F443910C9C183D8D4938C8848605B21 716B3E9E9864FCF2B5E8DF9AE8E095F1E9A0DCD489E5DE90F2E699EEE193EFE293EDE091F9EBA0 F3E79DFCF3ABF7EFA64C4812908F67FDFCB975733C615A2AD7D287E8E290F4EDA4BDB383A8A26D F4EFB6CCC89C423C07DED999FBF5BA8C824C64571FF7E5AACAAD6D87661EFEE194EFD98DE4DA8C E8E49AECE49BF2E499F1DF92EFE895ECE794D9CC80F7E09DF7EAA7DDDB91EEE395E4A55FAB611E EFD58AFBEB9EF1E99EEFECA4E8E5A1EDE7A6F2E5A6F4E4A6EEE09CE8DF97E8E298E6E196EFE79E F6EEA2F5EE9FF6EF9EEAE490D7D17DE4DD8DF3ECA0E5DC97F4EBA9E4DA9DE8DE9AE0D88FE9E198 F1E8A3E9E199EFE79FEDE59DE7DF97E4DC93E9E198F2EAA2EAE19CF3EAAAE9DFA0F3EAA7CEC782 CCC57EE5E197DED98FE8E298E0DC92DCD78ED9D28CD7CB88EBDB99E1E398E2E192DABA709E4B11 96320BE09052F7DC93B7BD6EDFEEA2B5B272150D000A0301201805342A0E10060313060081754E BDB284DBD2A3DCD5A2F8F3BFF7F4C4A3A2875856451E1D092522103F3D2BF6F6DCCDCAAABAB790 E6E4B5F3F1BDCCCC91DEDDA5E7E6B689834E0E06006D6635ECE6B6F8F3CADCD8B4FFF9DBE5CEB2 4A28146A3B18BC884CCC9140CC7C33DC8945FFEBA3FCF4A3ECC27DD4965BFFE3A3FFEBABEACE88 C7B96EE8DC8AFBEF9DFFF2A7F7EAA4F9EBAAFFF5B2EFE8A2EFEBA8EBE7A7CDCA94F4EFC44A451C 67612DFCF5B6F7EFA7F1E899E6DC8CF3E89AEADD97F5E9A9FFFBBDF8EFAFF4EFADEDF1AAE0EB9F F5E8A5FFF2B6FFEAB0F8E7A8FAEFADFAE9A4EBC987C19853EFCE82FFF6A3EBE6A8FBF6C3FDEFB5 FEE5A1FFE99ADEB05BB68832ECC872FFF5A7E9D893D5CF94F4F3BBF5EFB5FBF1B6FEF6B8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBD3D3D3929392 797979838383DFDFDFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1AFB0AF 8485846A6A6A5757574C4C4C4A4A4A5050506161618A8A8ABBBBBBEBEBEBFFFFFFFFFFFFE5E5E5 B3B3B37D7D7D6E6E6ED9D9D9FCFCFCFFFFFFFFFFFFF2F2F2C9C9C9929292636363A7A7A7F9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6CFCFCF9C9C9C616161929292DCDCDCF9F9F9FEFEFEFFFFFF FFFFFFF6F6F6BDBEBD808180595959939393E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF9F9F9E3E3E3B1B2B17D7E7D5656564A4A4A505050707170A2A2A2 D6D5D6F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D7D6EBB2B0 F5D1D0FBF1F4F7F5FDF7F9FFFCF7F8F1C1C1E68B8BE58888EFADADFCDFDFFFFFFFFCF4F4F0C7C6 ECB7B6FCF1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F0F0D2 E1DF9ED2C758DCD481EFEECDFBFCF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF8F7 F6B9B9E35A5BE25455FAD1D1FFF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FDD8D8EB7878DF4748EFA9AA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7BBBBBB7B7B7B5C5C5C5050504E4E4E 4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4444447E7E7ED9D9D9FFFFFFF5F5F5C4C4C4 9191917070705A5A5A4C4C4C4848484F4F4F606060818181B5B5B5E1E1E1FFFFFFFFFFFFFFFFFF FBFBFBDDDDDDA8A8A87676767A7A7AE6E6E6FFFFFFF7F7F7D1D1D19898986D6D6D959595F1F1F1 FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9D7D7D7A1A1A17070707D7D7DD7D7D7F4F4F4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDC6C6C68787876A6A6A939393DCDCDCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E7E7E7B2B2B27C7C7C5959594747474C4C4C676767909090 D0D0D0F1F1F1FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEF9ECECE2A7A7E9BDBDFAF1F1FFFFFFF7DCDCE68888E06969F1B7B7 F9E2E2FAF0F0E4AEAEE7B7B7F8E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9E8EEEDB7EEE5A7FDE9CEFFF4E9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8 FFE2E3FFDBCBFFDDBFFFF0E0FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF4CFCFD74A4AE57171FBC5C5FFF0F0FFFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF9E0E0EEAFAF E07575D94747D83535D23D3DCF4C4CE05C5CE67777E89C9CF4D5D5FFFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D778 DED173E2D577E8DB7FEBDE81E2D57BEADC82E4D67CEADB83F0E28AE8DD87EDE192EFE494EEE393 E4D989E4D987EEE391F6EC99F4EA95ECE28DE5DB86E8DE87E8DB85E4D580E3D57FE6D782E9DB82 E9DB83DFD178EFE188F2E48BE9DC80EEE185F2E68AF3EA8CF6F091F6EF94F1EA91F1EA91F6EF98 F3EC95F2EB92F3EC93F7F195F9F395F8F294F0EB8FF2ED94F4EE96F4EE98F5ED98F7EE9AF3E994 EAE08AFDF399F5EA8FECE283F1EE91F1F096F5E990F9E38DF6D782F2D079D2B65DF8E489EFE287 EDE389F2E88FE7DB85F5EA95F6EC97EEE391EDE18EF5E996F2E694EFE08EEEDF8CEFE08CF4E48C F3E38BF0E088EEE087EADC83EFE189EEDE8CF4E593EDDE8DF0E190F7E895F0E18CEDDE88EEE087 E8DD83E3DA7DEED882F6E48EE6E286E1DB7AF2D373C0882DDDAD50FFED8DF0E98CECDF8DEFE493 F2E795EDE38EECE08CEEE28EE7DB85EFE08BF5E691E7D981EADA83EADA83E6D67EEFDE84F0DB82 E2C873E5CA76FFEB99F3E08EEBE08BE9E38CE9E38DEEE28CF0DD89F0DD87F6E78FF4E68EF6E890 F1E38AEEDF89F1E38CEADC87EDDE8AEEDF8CEBDC8AE9DB89E8DE8CF4EE9FE8E099E9E0A2E8DFA6 857C448A834A756F31969151F2EDB266612A90895ADBCFA31A0D00382D084C460DE7E3A7BBB77B 4E49128D88546E6730FFFBBCE9E09BE3DB90EDE59CD7D085E5DB8FEFE396EADD8EF0E494E8DC8C F3E898EFE69ADCD68BF9F3AA716D29A7A765FFFFC855512B484221E4E399ECEA99E4E19D1E1600 120C00A7A577EAEABF393509C8C284FFFDC4837A43887A43FFF0B4DBBE7D826118FCE799F9E498 E3D88ADFDB91F0E89CEFDE93EFDD8EF0E892EAE48EDFD283EED791F4EAA3E2E398ECE496E2A763 BE7733EBD185F7EA9CF0E79DEEEBA3E2E09CE7E1A0F5EBABFDEDAFEEE29DE5DB93E9E49AEFEAA1 EDE69FE9E199EEE79BEEE799ECE595E5DE8DDFD889CDC67BDAD38ADCD48FB9B16FD7CE8CC4BB79 D6CD89F8EFABF1E8A3E9E19BF5EEA6E7DF97E3DC92DFD78DEFE79DE9E299E2D999CDC484C7BE7D E6E09BF1EDA6C6C37AD5D288E2DF95DAD78DD4D187D4D189D1C681D6C280DFD68EE4D48AAA833B 974C0DCC793ADA9654C8AA5FAAAB5AC2CD7DAFB269565230342D18211B1040381C61592AABA169 E6DEA1C7BF7BEFE7A1E6DF95E7E193DCD88FEDEDBCB7B89253542D75765240401F858559CFCE9C C1C088C8C988D2D38FECEDA6E9EAA95654271A170987814AF1EABAF8F3C7EAE6C2DFDBBCA99D85 654E3C190000461505DAA873FFD58BCE7D3CAD5F1FDEA560F8E99BFFDC98DA9D5FF3BD7EF3CB86 E3C981EEE194E0D988F2EA9CF1E8A0DFD795E4DC99EEE7A3EFECA5E1DE97DBD795CECB94F8F3C5 60592D37311AEDE5A8EDE6A0E8DF93E3D98AE2D78CD8CE87E1D696EFE5A8E1D998E6E09EEDF4A8 E6F5A3ECDD97FBDBA0FDDFAAF7E9AEF5F4B5F9FBB9F8EBA7D3B068C7A153E7C876FBEBAAF3E3AE FFF3B6FFEFA7E4BA6ACB9D47F7D079FFE996FFEC9FF3EAA8FAFBC3EAF0BDEEE9B1F3EAAFFAF2B7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 ECECECE9E9E9EAEAEAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC F1F1F1EAEAEAE6E6E6E3E3E3E1E1E1E1E1E1E2E2E2E5E5E5EBEBEBF3F3F3FBFBFBFFFFFFFFFFFF FBFBFBF2F2F2E9E9E9E6E6E6F9F9F9FFFFFFFFFFFFFFFFFFFDFDFDF6F6F6EDEDEDE4E4E4F0F0F0 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF7F7F7EFEFEFE4E4E4ECECECF9F9F9FEFEFEFFFFFF FFFFFFFFFFFFFEFEFEF4F4F4EAE9EAE3E3E3ECECECFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F1F1F1E9E9E9E4E4E4E1E1E1E3E3E3E7E7E7 EFEFEFF7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5DAD9 ECB4B3F6C5C3F6DBE2EAE1F6EAECFFFCFBFEFDF5F5FBECECFBEBEBFCF1F1FEF9F9FFFEFEFAECEC F0C5C4EDBAB9FCF1F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCF6F5EED0E2BD54DDC057E1D891F0F0D1FCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6C7C8E36061E25A5BFAE1E2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FDD8D8EA7878DE4648 EEA8A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4E8E8E8E3E3E3E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E0E0E0EAEAEAF9F9F9FFFFFFFDFDFD F5F5F5ECECECE7E7E7E4E4E4E2E2E2E1E1E1E2E2E2E5E5E5EAEAEAF2F2F2F9F9F9FFFFFFFFFFFF FFFFFFFEFEFEF9F9F9F0F0F0E8E8E8E8E8E8FBFBFBFFFFFFFEFEFEF7F7F7EEEEEEE6E6E6EDEDED FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8EFEFEFE7E7E7E9E9E9F8F8F8FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5EAEAEAE6E6E6ECECECF9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1E8E8E8E3E3E3E1E1E1E2E2E2E6E6E6 ECECECF6F6F6FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF9EDEDE3A8A8EABDBDFBEEEEFFFFFFF8E3E3E79C9CDC7373 E09696EFCACAFAEDEDE6AFAFE8B8B8F8EAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFBFCFCF3FCFBF0FFFBF6FFFDFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF8F8FFE2E1FFDCCBFFDFC0FFF1E1FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF0CFCFC74A4ADA6868F8B3B3FFE8E8FFFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCEDEDEB9999 E06060DD5858DC7070DEA0A0EBC6C6F7E2E2FAE4E4FBE8E8FBEDEDFDF7F7FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E9DC7CEADD7DE4D777E5D879EDE082F0E386F0E387EDE084ECDE83E8DA81E5DA82F0E494E8DD8E E9DE8EE6DB89E3D886E8DD8AF1E792F5EB96EDE38CE5DB84E6DC85E7DA85E9DA86EDDF87F3E58D F1E38BE8DA81E4D67DF5E88EF5E88CE9DC80EDE084ECE084EFE689F7F194FBF499F4ED93F1EA93 F7EF9AFBF39EF2EB93F3EC92F9F397F9F396F3ED91F4EF94EAE48BF2EC94FEF8A2F9F19EEDE491 ECE18DF1E790EDE289E8DD83EDE386EEE88CE1DE85F5EA91FFEE99FFEB96EDCA73BCA047FFF195 F3E58AF2E88EF6EC93E9DF88F0E691F9EF9AEBE18CE4D884F4E894EADE89F0E18EF7E894F2E38E E7D780E8D881F2E28AF5E78EF1E38BF5E78FEDDE8BF2E391EBDC8BF3E493FEF29FF4E590F7E892 F8EA91E6DB81E0D77BF2DC87F8E790E2DE82E2DB7BFCE181CA9437DEAF50FFEE8EEAE385ECE08C F3E896F1E694EFE690F8EC98FDF19DEBDF89E8D984F2E38EEBDD84F1E18AF0E089E8D880EDDC82 ECD87DE9D079DCC06DF7DE89EAD680EFE38BE7E086E6DF86ECE189F4E38CF7E58FEFE087EFE188 F4E68DEDDF86E8DA82EDDF87F0E28BF2E38EE6D782E5D682F0E28FF0E594E6DE91F1E8A3FDF4B7 BBB277272107C2BC7D6F6A2AA6A262FCF7BB534D188F8859463B22564924786F3B282200E3DFA5 E5E2AA423F0C9A96623B3600FCF5B8E7DF9AE6DE94E8E097EFE69DEFE699EEE394F1E594EFE492 EEE492F0E697DFD78AE5DF96FAF6B08583419D9C5FFAF8BF7A7650352E12CAC989E6E89D727137 2922140F0A096A6745E6E6BC524E1DB3AD70F3EDB5655B259B8E54FFEDAFEACC8A77570DF6DC8F FCE79BEDE296ECE89EEAE097E9D88EF1DE8FEAE189E2DB85ECE08EFDF2AAF1E89FE8EB9EFAF4A4 E0A764B97431F0D98DF6EA9CE8E096E9E9A0E4E3A0EAE6A4EFE5A5FBEDAEEEE29EE8DF97E7E399 EBE79FEBE3A1EAE39EEFE8A0DFD98EDFD98CEBE597FBF5A9E3DD92E5DF96C6BF77C4BE78CFC786 DBD393EEE7A5F7EFAEF4EEA9F4EDA7F0E9A3E9E29AE8E299D4CE83E9E497EEE69DE5DA99DAD08F CDC484DFD995EBE8A1E4E19ADADA91E1E197DAD88EDDDA91DBD88ED4C982E1C583F9D594C89A59 9C6825E1B06AFFE09AB78D45AF8A42FFE79EF4EDA3E4E49AECEBABDBD59DD9D599F0EDACEDE79F EFE99BF3EC98F2ED94EDE68BEBE687EBE585F1ED92E3E4A4C6C9952B2C0B2A2B07535334A09F71 C2C28D737338D5D598FFFEC0FFFFCC706F381D1B08D4D3A9F1EDBDF8F3C3B9B4865F5C39221F17 0A0000090000361500794B2DE5B780FFECA7BF73359B5515663600CEB96CFFE19AB27C3CF2C383 FFE19AFBE99DEDE393ECE898F3F0A4E8E29DDFD998EAE6A5EDE9A7EBE8A3E4E29BDFDB9AE1DCA3 FEF7C88D86592B2512E8E2A7EAE2A0ECE599F4EEA0EEE59AEFE49FEFE5A6F3EBADD5CE8FD5D28F E1E69AE7F29EF2E79FF3D79AF7D7A2F5E5B0EEEEB3F3F8B6FBF6AFFCF0A5F3CC7DCC9C4DF4CC86 FEE5A7F5D28FBC964EBF9A4CF5DB8BFFEB9CF7E396F3E69FF1EDACEDF0B4E7ECB5EAE8AEEFE9AE FBF5B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAEDEDF4D5D5F3C4C2F1C9CDEFE0EDF3F5FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF9E8E7 F3D0CFF3C6C5F6CFCFFDF6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFCF7E9F2DD9BE7CB6EDEC460E3D68FEFEDCCF9FAEFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFFCFCF6BEBEE35C5EE25C5DFAE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFDE5E5EB8182 DC4546E49D9EF1F6F6FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF0F0F1B7B7F5BABAFDD4D4FFF3F3FCE9E9F2B4B4 E78383DF7575EDACACFCDFDFF2B7B7F4C3C3FCEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFF8F5FFE2D3FFE3C8FFEDCCFFF8E9FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF3D3D3D25959D96868EBA2A2F9DFDF FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8FCBEBE E86868E15656E88989EEBDBDEFD9D9F7F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCD06EDCD06EE6D879E4D777DBCE6EDBCE70EFE284EADD7FE8DB7FEDE084E6DB82E2D684 E2D785EADF8DEFE392F2E893EEE48FE8DE89E9DF88F3E992F9EF96ECE289E5D880E5D77FE9DB83 EEE087F0E289F0E289E9DC80E9DC80E9DC80EEE183F3E688F0E586F3EA8DEEE88BF0E98EF7F096 FAF29CF7EF9AF3EB96F9F29BF5EE94F7F095F9F295F2EB90F7F298F1EB95E9E38DF3ED99FCF4A3 F8F09DFBF09DF5EB94F3E990EDE288EDE286EFE88DECE78FF0E189F7DC88ECC975DFBD66CAAE55 F7E488F6E98EF0E58CEAE389ECE68DECE28DF2E795F4EA95ECE18BECE08AFAEF96E8D984F4E68D FAED95F3E38CECDC85ECDC85F0E389F1E38BEBDD85EADB88F0E190F1E291E6D786FEF3A1FAEB96 F7E992FAEB93ECE187F1E78DF9E38EF1DF8CE4E085ECE585FFE887C89336DCAD4EFFED8CEDE688 F1E48FE0D482E5DA88F5EB96F4E894EADE8AF0E48EF0E18CE9DB85F0E38AF5E58EEDDD86F3E28B F8E98EFCE990E8CF78D0B55EF7DE87F6E289EBDE84F0E98EE3DC81EEE38BF5E791FAE892F3E48B F4E68DF2E48BF4E68DF0E28AE7D981EBDD85F4E590D9CA75F4E590E3D481DFD685DED78EE7E19E F0E8AD3F3806585223F3EEAF666222A4A062FAF8BE6662304A4516120600DACD9E7E764A211B00 CFCB92FFFEC8575323A6A271312B07CDC689EDE5A0E0D88FE9E199E8DF97ECE396F2E797F1E694 EEE391EBE190E9E293DFD990E0DD98FFFDBD5E5D22888652FFFCC99D97791B1502C8C694E9EAAE 403F129089828C857A9693758D8A66585320E0DA9EEFE9B0665C24A69A60FFF2B3FFE49E84631A E2D285FBE59AEADF96EEEAA3E8DE9AF3E29AE7D589E7E08AE1DD85EBE18EF5E098ECE49BE6EA9D F4EE9FD7A15CB6722FFCE196F6E99AFDF6ABE8E79ED8D894DBD794E7DD9DEADD9EF9EDA9EEE79E E4E096F0ECA3D3CB8AD6CE8CF4EDA8EBE49DE3DD93E1DB91EAE49AE8E298F0EAA1E3DD93C5BE77 D5CD8CE9E1A2F6EEAEDFD796CEC783EAE39DE1DA94EAE29BEBE59CE7E197E6E195EEE69DCDC37E E3D996DAD38FE8E19DF4F0ACDADA92E5E69EF2F1A7F2EFA5DED98FF4EFA5E9D58FF8E1A1FEBD83 A15C22D29C5CFFEBA0EAE190E8D98C98742EB98B4BFBD694E8DA93E5DD94E9E199ECE499EEE696 E3DC8BF7F19AD6CF74E5DE83F6EF94F0E78AE8DF82F2EA95DCDC9FD4D6A81F1F0F0D0800746F58 FDF7DEE0DCBDD8D3B0DAD4B1B7B1935B533B0A0403A5A27FFEFBD3F4F0C27D7847120E001B1A02 545224766D41B19C6EE3BF8EB68752ECC484FFF3ADD08C50D69B5DA4823BDECE81FEE398BF944F EDC583EED68EEDE494F0EC9BE7E598E5E59BE9E5A2EAE6A7ECE8A9F0EDABEFECA7E1DE97DDDA99 C7C188EEE8B7B2AB7E27200FD3CD94E4DF9FE2DB91F7EEA3F2E8A1F2E8A5FEF6B8FCF4B6FAF4B5 EEEAA8E5E299F4F5A6EAE69DFBEDAEF7E3ABF5DFAEF9EEB7E6E7A7E8EEA5DCD386FFDF8EE6A85C D7994FE5AF64B4843ACEA760FFE49CFFF5B0FEF5B0F8F2AFF5EFADECE8A8E8E4A4F0ECACEDE7AB FCF6BAF8F2B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDF6F6F2CACAEFBCBCF5D6D7FCF0F0FEF8F8FFFDFDFFFEFEFFFCFCFEF8F8FBEFEF F3CECDEFB9B8F7CDCDFFE8E8FFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1 FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFF9FFFFE7F3E09CE3BD51DCC158E3D995F4EFD3FFFDFCFFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF8F7E5E5E1A8EEEBC4FCFCF6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFCFCFFF2F2F6B1B2E35759E25D5EFAE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF2F2 EB8C8CDA4445DD9394E8E9E9FAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF4F4FECECEFFBDBDFFBCBCFCD8D8FAE1E1 F9C1C1F08B8BE05353ED8989FECBCBFFC4C4FED3D3FFF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF9F0E7E3B2ECE7BD FAF6E8FFFEFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFEF8F0FBE2C0FCEAC5FEFADDFFFFF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF6D8D8DC6B6BD86A6ADE9292 F2D6D6FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCBCB F88888E64A4AE56767F5C6C6FFFFFFFEFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6DA79DFD371E9DC7CF1E484F0E384EBDE80F2E587EADD7FEBDE82EEE085E6DB82 EEE390E9DE8CE8DD8BEEE491ECE28DE3D984EAE089ECE28BEEE48BEBE188E4DA81EBDE86EBDD84 E8DA82E6D87FE6D87FE6D97FE3D57AEADD81EFE285ECDF81E9DB7DE9DE7FECE386E7E084EAE389 F1EA92F5ED97F2EA96F8F09CFBF39EF7F098F6EF94F6EF94F0E98EF9F49AF8F29CF7F19BFDF7A3 FFF7A6F9F1A0F4E998EEE490F1E78FF0E58BF0E589F1EA8FF3EE95F8E890FDE490F1CF7BDEBC65 DBC067FFED91F3E78BEFE88DF5EF94EAE38BEEE491ECE18FEAE08BEBDF89E9DE84E3D97FEFE189 F4E68EF2E58CEDDD86EFDF88F9E992F1E38AF6E88FEDDF87E7D885ECDD8CF0E190EADC8BEEDF8C F6E792F6E891F1E38AEDE289EEE38DF8E291F1DF8EE4DF87E9E285FBDC7EC1892DDCAC4EFDE787 EAE485F2E691EBE08DEBE08EEEE48EEBE08CEBDF8BF4E892EBDC87E3D47FE2D47CEBDB84EEDE86 E9D981EADB81F7E58CF2D982DDC26BFBE58DF8E48AE9DB7FE5DC81F2EB91F3E891D9CB76E1D27E F1E38AEDDF87F4E68DF4E68DE9DB84E6D881F4E590EFE08BE9DA86EDDE8BE7D886EDE295E9E29C F3ECACA8A164120B00CAC488E1DC9F4F4B0DB2AE72FAF7C0A29E71020000837951F1E7B690894F 151000C2C084FCF9C5585424A09C6B332D16A59F64EDE7A5ECE59CEEE69EEBE29AEAE194EFE495 F2E795F2E795EBE394E8E196E9E59FE3E1A2EEEDB3747147474425EEEBBCACA68B1B14079B9975 FFFFDB5B5835352D2A514B431D1806201B00ABA577F0EAADE9E3A8CAC087D4C88BFFECACFFF3AB 89681DDAC276F7E095F3E7A1ECE7A5F4ECAAE6DC97F6E89DE3DC89F7F49DE0D785FEEAA2EDE59B E2E799F5EE9FDDA662BB7633F1D68AF0E495E9E298D5D58BD5D592DFDC9AEAE2A2DFD595EBE19C EEE79EEBE89EF2EFA7EAE3A3E8E1A0DDD694D9D38EE4DF97E8E29BF3EEA4E5E097E4DE96E9E39B E4DE97E6DF9DDDD797DDD696E9E2A1F0E9A7ECE5A1EBE5A0ECE6A0E7E19ADED991E1DC92EDE59C DDD28EF1E6A3ECE5A1ECE6A3EAE7A3D8D892ECEAA4EEEAA4F7F1A8DFD68DECDF97FEE6A1F3C285 BD753AB9773BFBD693F0E599ACB363808233F0D693B68B4DDFB175A18040C0AA65CEC078F0E297 DBD183ECE393EDE796ECE393CAC272EFE899F1E59AB4A75FE7DB96A4A367D8D9A8272612070200 746E5BCFC8B50D07000F08000400001B1201342927AEA597FCF9DDD9D5AE534E30312B06AAA670 E4E3ADFEFCC6FFF5BCFCEEB1F7D794AA7C33E3C77DFFE4A0945920BB8C4CF1DD93FFF7A9FFF0A3 B6924BD3A25FDFC97FE3E291E2E392C7C579E0DF97EFEBA9E4E0A1E3DEA1E0DD9CFCF9B5E8E59F E3DF9ECDC890E5DFB08C845B3D3714E8E3AEE1DB9EE2DB94F1E9A0F2E8A1ECE3A0E9E1A2F3EBAE F1ECADF0EDAAF5F0A8EEE59DE4E29BE6E5A3E6DBA0EAD4A0F3DFAAEEE5A8DEE39AE3DE90FFE295 F3AE67B96E1FAF6C18E7B566FFEFA7FBE8A6F1E8AAF6F7BCEEF3B6ECEDAEEDE8A8F5EAA5FFF6B0 F7EFAFF7F2B5F7F2B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFCFCFCE3E3F4BBBBEA9897ECA0A0FCDCDDFFF5F5FFFDFDFFEFEFF9D7D6 F1C1C0F2BFBEF9D0D0FDE7E7FFF9F9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3 F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFCF6D9F5E5A6E4C65FE2BD57F4D69FFFF0E3FFFDFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFEEFDF8D8F7E1B6FAEBD0FEFCF8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFCFCFFF2F2F6B2B2E35859E25D5EFAE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDF3F3EA8C8DDD4345EA9293F8E8E8FDF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF1F1FFD6D6FDB9B9F0AEAE E5AAAAE39B9BE16D6DDC2222ED5757FEA6A6FFD7D7FFF0F0FFFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F6F7E3D4 F9DEC8FEE4CDFFF3E6FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFAF8ECE9E1ADF0EAC2FCFBEDFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF1DDDDCA7C7CCC6C6C DC8282F2CDCDFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5AFAFE75555DD5555E39191F5DBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE2D575DFD272E8DB7BECDF80EADD7FEDE082E8DB7FE6DA7DF0E388F1E38A E7DC83F3E795F2E795E9DF8CEFE590EDE38FE2D882E8DE87E9DF86EAE087E6DC83E5DB83ECE087 EBDD84EADC83E9DB82E8DA81E9DC80E1D478E8DB7FF2E586F3E688F0E385F5EA8AF3EA8DEEE78D F0E98FF6EE99F9F19DF6EE9CF2EA97F5ED99F4ED95F6EF96F7F095F6EF94F1EB93F6F099F7F19D F8F1A0F7EF9EF5EC9BF6EB9AEEE491F3E992F8ED94F6EB91F3EC91F5EF96F7E68FFFE893F2D07C CBA751E1C36BFCE98DE6DC7FE2DC81F5F095EAE48DF5EB98F0E592EDE38DF5E993F7EC93EFE489 ECDF83F1E489F3E58CEFDF87EEDE87F2E28BF6E88FF7E990EFE189ECDD8AF1E290F2E392F2E392 E9DA88F2E38EF5E790F3E58CF3E890F0E692FBE497F6E395E9E48EEBE389F9DA7FC68E35E8B95D FDEC8DEEE78BF7EA97F7EB9AF6EB99F0E691EEE38EF5E995F8EC96EFE08BF1E28DEDDF87F0E089 F6E68FEADA82EBDD84FAEA93FDE590E4C974FCE18AF1D97FF5E68CE2D87EEEE78DEFE58ED6CA77 E8D988EEE089E6D87FF4E68EF3E48EE8D983EDDE8AE8D986B5A653D8C978E7D887EADB8AE5DA90 E5DD9CE5E0A33F381C766F3EF9F4BCFBF6BC4B460CB6B479FFFFD6908B631F1B0AD6CEA0EDE4AD AAA5660E0C00C6C486FEFCC87E7C4C8986586964386E6930E9E3A1EEE7A0E0D890DFD78DE1D88C EBE090F1E694F3E898ECE498F3ECA6DEDA9BE6E3AEF3F2C22F2E075A5538FAF8C7C5C1A0140E0B 343314A7A7825653340000000C040048421CCAC399FDF9C3EEE9A9E1DB9EFAF1B4E2D697F7E19D FFEFA6AB8B3FB4954AFFF8B1E3D593F8F6BCBAB4794D4011D8C883F1EC9CEBEA96E4DD8CF8E49C F0E99FECEFA0FDF9A9E0A865B36D2BEFD689F1E596E2DD91D4D68CE3E4A0E7E6A3E8E0A0E3D898 EBE19CEFE89FE9E89DE9E89EEDE8A6F0EBA9EBE6A3E8E39FDDD994D3CE8AE8E49CDDD993D8D38E E5E19AE7E29EE6E19DE7E29FDBD695DAD593E8E3A0EAE5A1E6E19DECE8A3ECE8A1E2DD99DCD792 E0D993F4EAA5EADF9CECE5A1F4EDACE3E09DCBC985E2DE9BF0E8A3F8EBA5E3D48EE7D28CFCD390 AC6629B37434EFC17EF5DC96DAD78DD0D68C8E924AD8CF8CD5BB7D9B7339B88B53D9B87BEFD897 EEDB98FBEAA5E6D892FAF0A9FFF6B3DACF8DE5DA9CFBECB2E3D39CECDDA7DBDA98C5C7881A190A 040000746F5DE5DFC288835F807B5488835DB7AE8DEDE2CFFBF3E0C2BD992621143A3408DCD9A5 F5F0B7EDEAAEEFECAEEADF9DF4E19AEDCC7CC0903CF7DE8DFBEAA5B17C42B99151FFF2A8F2E698 FAEA9CC4A65DDBAA6AEEDC92E6E99AE8EA9BE7E499F4EEA6EDE8A5D9D193DBD599F7F2B3E2DF9C E2DF9BEEEAAAE5E0AAF4EDC080784F1D190CD4CF9BD2CD93EFE9A4F7EFA7EAE29ADBD190DCD496 EBE5A9EDE9AAE8E6A4EFE7A3F4E4A4E9E9A5DEE4A1E6E6A6F6E1A8F5DAA2FEEBAEF2EBA2F6E99E EECE86D39450B26919CB8631F4C170FCDA91FDE9A6F2EEB2EFF4BAEAF0B6ECEEB1EFEAAAF2E4A0 F9E9A3EEE7A6E4E0A1EDE9AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F6E0E0E0B3B3B3A8A8A8A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A7A7A7A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6ABABABC4C4C4DFDFDFF7F7F7FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF3F3F9D4D4EFADACEFA9A4FCD4C9FBDED7F7DCDCF7CECE F4C7C6F2C6C5F7D4D3FEE7E7FFF6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6 E0E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FDF8DCF1D68FEABD5FEFC372F7D6A2 FEEFDCFFFAF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFFF7E9FFEED3FEDFBBFFEBD4 FFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFBFBFCE6E5F0A3A3E05152E25D5EFAE6E6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF3F3EA8C8CDE4445EF9393FFE9E9FFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEFEFEF CACACAA8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8 A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7 A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8 A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8 A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8 A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6AFAFAFC8C8C8E4E4E4F9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECFDD3D3 F2C2C2E9BABAE7B5B5E79A9AE86666F38787FEBDBDFFEAEAFFFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFB FFEDEDFAE3D0F5DFB9F9EED5FEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF8F8EBE2E2A6EAEAC0FBFBF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF2E2E2CE8F8F CE6F6FDC7272F2C4C4FEF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8F8 F5E3E3E38C8CD34040DC7676ECC0C0F9EDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE2D577E0D375E7DA7CEBDE82EBDE82EADC82E8DA81EADC84F4E68E F2E48CE6DB83E8DD89EFE590E5DB86E1D783E2D881E4DA83ECE28BE7DD84EDE489EAE186E5DC81 E9DC83E8DA81ECDE85EEE186ECDF83E8DB7FF0E385ECDF81EDE082F0E383EBDE7EEBDF80F6ED90 F0E98FEFE88EF4EC97F5ED99F0E895FDF5A2F8F09CF5EE96F0E990EBE489EBE48AF5F098F8F29E FAF4A0F5EE9DF7EE9FFCF3A4FAEE9DF2E795F2E790F8ED95F7EC92F1E98EEFE68EEEDD86FFE893 F6D380BE9A44E5CF77FFEE92EEE487DED97DEDE98EF3ED96F2E896EEE391EAE18AEFE38DF4E98F F4E98EF2E588F5E88AF4E78BF0E088EDDD86EEDE87FAEC93F4E68EEFE189F6E794FAEB9AF5E695 ECDD8CF2E390E8D984E9DA84F3E48CF2E78FF0E596F9E29AF7E39AECE696EEE68EF5D57EBA822C DEAD54FAE487E5DE83EDE090F0E494F3E896EFE590F1E691F6EA96EDE18BDFD07BEEDF8AF2E58C EFDF88F1E18AEBDB83E5D780F3E38CF6DF89E1C26FF7DA84F3DA83EFDF85E8DC82E0D981ECE390 F0E495FFEFA1EFE08CE8D984F5E692F2E390EDDE8BF8E998F1E291C2B262E7D789F3E395F2E294 E2D68EFDF6BAB3AD76211A00CEC997E9E3AFD9D69C504E13BBB880FFFFD95A56314C4731E8E1AD EBE4A4C3BF7B141300D0CE8FFFFFC9B2B080706D40B1AE7D312C06F5F0B0E7E19AF1E8A0EEE59B EEE598F0E495EDE292E9DE90E3DB91D7D190E2DDA7FBF7CB9C9A7200000087825FF6F5BECAC89C 1B160B0604000B0900080400443C21E0DAA8FBF3B1EBDEAAE4DA9FF3EEABE7E2A0EAE1A3F0E5A2 F5E09BFFE39AD1B166A7893FFCEAA7EADCA0F8F2BA453F11332913EADC9EF7F4A9E5E393ECE495 F0DB93EEE69DE9EC9DFAF2A4DEA460AF6625EFD388EFE394E4DF94DFE197ECEDA9EBE9A7EEE6A6 EFE4A4E8DE99E5E097E7E59AEDECA2F5F0ACF1ECA8F1ECA8E6E19DE0DB99DBD694E7E29FE2DD9A E0DB99EBE6A2EBE6A4E8E39EF4F0A9E8E39FD1CC88D7D28DE5E09CE9E4A2EEE9A7ECE7A4E2DD9C DCD796DFD894FDF3ADF2E8A2EFE8A4EFE8A7E4E09FDCD896E7E19EE8DE9AEAD995FFEAA7E3C682 CCA15BB67B35E9C078D2BB71DAD187ECE8A2BCBC7AD3D694898B4BC4BD7FA58F56754E18C09B62 FBE0A4ECD193F2DC9BF8E6A3F5E7A3F3E8A5EBE19FD9CF91E6DA9FFDF0B8E9DDA2F4F5AAE3E79F 717138151100645E48F4F0C3E2E1A4E4E29CF0EEA6FAF6BADDD7A89E9976302E12585126E8E1AB F1E7ADD5CD8FE2DC9DDDD495EEE19DFFEDA5DFB96BAA7522EBD081FBEDA7D29D63D1AB6AFEF0A5 E6D488FEEFA3DCBF76DDAA6DFEEAA3E8EB9FE5E499F1EB9FEDE49CF6EEABF2E8ABDDD597EBE5A6 E7E2A0ECE7A6F4F0B3EBE5B0F9F4C97D78511F1A11E8E3B2DAD59DD9D491E7DF98E5DC97D5CC8C DDD597E0DA9EEEEAAAEFEEABEAE2A2F6E5ABE8E2A4D7DA97E1E4A1F1E5A5E8D193F9DD9DFFF3B1 ECD491A47D38CB9A58FBC77DEBB161BE8B3CF6D388FFF6AEFCEFABF4F2B0EBEAAAECE8A9F0EAAD F7ECAEFFF4B5F4F0AEEDE9A8F3F0ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEAEAEABABABA535353393939 373737383838383838383838383838383838383838383838383838383838383838373737363636 373737383838383838383838383838383838383838383838383838383838373737363636363636 373737383838383838383838383838383838383838383838383838383838373737363636373737 383838383838383838383838383838383838383838383838383838373737363636363636363636 383838383838383838383838383838383838383838383838373737363636363636373737383838 383838383838383838383838383838383838383838383838373737363636373737383838383838 3838383838383838383838383838383838383838383636363F3F3F767676B5B5B5EBEBEBFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFEF4F5FBE8E7FBDFD5FDDBC3F5C9BBEDB7B7 ECB1B1F1C7C6F9E6E5FDF6F5FFFAFAFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA EDECC8E2E1A5F6F5E0FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCF5FCE8CBF5CE8FEABB5D EABC5DFAD9ACFEEDDCFFFCFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFEEDE6FEE0D0FFDEBF FFECD8FFFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDF8F8F4D4D4E78F8FDD4C4DE36162FAE6E6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDF3F3EA8C8DDE4344EF9191FFE6E6FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8 DBDBDB868686393939373737383838383838383838383838383838383838383838383838383838 373737363636363636373737383838383838383838383838383838383838383838383838383838 373737363636373737383838383838383838383838383838383838383838383838383838373737 363636363636363636373737383838383838383838383838383838383838383838383838373737 373737373737383838383838383838383838383838383838383838383838383838373737363636 363636363636373737383838383838383838383838383838383838383838373737363636363636 363636373737383838383838383838383838383838383838383838343434484848818181C0C0C0 F2F2F2FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFB FFF4F4FBEEEEF9ECECF8EBEBF9E4E4F9D6D6FCDFDFFFEDEDFFFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFFBFDF4EED5E7E1ACF0EDCAFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8F7E9E3E1A6EBEAC0FBFBF3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF5E6E6 DA9F9FD66F6FDE6262F2BBBBFEF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFC F7E9E9E6B0B0D36D6DC74545E29F9FF8EAEAFEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D87BDDD073E1D477EBDD82EFE187F1E38AF1E38AF1E38B EFE189ECDE87E9DD88E9DE8AE9DF8AECE28CE5DB85E2D881EAE089F3E991EDE48BF2E88EE8DF84 E1D87DE8DC83E9DB82EDDF86EEE185EADD81E4D77AF0E385EADD7FEEE182F4E787EFE181F1E687 F6ED90F0EA8FF1EA92F5ED98F6EE9AF2EA97F7EF9CF2EA96F4EB97F3EC93F1EA8FF5EE94F1EB94 F5EF9BF6F09DEEE796F0E798FBF2A3FAEF9EF4E997EDE38CF3E88FF7EC91F0E88EECE48CF0DD87 FFE490F5D17EC29F49F2DB82F4E185EEE386DAD579D4D075E1DC85F0E895F2E795EFE590EFE48B EEE388ECE283F3E688EFE283E8DB7EE4D47CE7D781ECDC85EDDF87ECDE85E6D880EADB88F0E190 EFE08FF2E393FBEC9AF2E38EEADC85F3E58BF5EA95EDE195F5DD97F3DF98EDE697F0E793FDDE88 BC822ED7A650FFEF95F0E98FF5E799EEE293EEE391EAE08BE9DE89F0E490E5DA83DECF7AE8D984 F3E58CF2E28BEFDF88F2E38BE4D883F2E18EF7DF8CE3C471FADF8BFFE992F5E189FBF097E9E28A EBE290ECE092F0E193F2E391F7E796F9EA98F2E390F1E191F6E697F8E898F9EB9DF8E89BF5E597 ECDC8FF3EBA8F3EDB3433B12524C2BA29C6BDDD7A4BDBA83413F05BEBC86B5B2820A050057523F E7E1ACE9E59FC2BF77202000CBCA88EEEEB6CAC999545125CECA9A1B1500DAD593E6DF99F0E79F EEE59BF0E798F4E899F1E797EDE496F3ECA3E9E2A5EEECB9B0AD830E0E00060300656043EEEFAF D7D6A01E1B1000000009070049452BDFD6ADFDF8B1E6DD88FCEDB1E6DD9EF1ECA7E5E09DDED694 F9EDAAF2DD97FEE49BE5C479AC8D47EAD091FAEEB5928E57000000AEA670FEF5BCE0DF98EAEB9D E9E396F2DD97F0E79EE1E294F1E599DFA15FB76D2CEFD58AEEE293EAE59ADCDE94E3E5A0EAE9A6 F8F1B1F4E9A9E1D792E1DC93E8E89CDDDD91E7E49BF4F0ABF2EEA9E8E49FE8E4A2EBE7A6E5E1A0 DBD695E6E2A1EDE8A8EDE9A7EDE9A2EDEAA1EAE79EE3DF99E1DD98E7E39EE0DC9AE3DE9CE1DC9B DFDB9AEAE6A6FBF5B4ECE29CF9EFA9EEE7A1E0D998E3DF9FEEE8A8F1E7A7DFCF90E1CC88FFF0AD CAA864AA843BD9B464F7E090F3E899CDCB7FEBE8A5EAE9AAB2B375A9B073B8BA7EBAB4799F8952 755618AC8948F7DB97E3CA83F8E59BECDE8FE9E190EAE292E8E193E4DB90E4DB90EEE49DE7E7A2 D5D49D67643D000000484130E5E0B8D6D497DDDC92E2E092E0DD985A541B2E280CA29F6BF9F5BE E2D99EEEE4A5EDE4A4E9E0A2E9DEA1F0DEA1FCDF9CCB9E58B47B30F8D88DE3D38EA77038C39C5B FCEEA3E6D085F7E79AD6B870C3864CFBE29FEEEEA4EDE9A1EDE49AE7DB91EADF9CEDE2A4E3D89C E1D99AE8E0A1E4E0A0E2DEA3DDD6A5F1EBC36B65412E291AEDE8BBD2CD95AAA564D8D18CEDE6A1 E0D898D9D297D5CF93E9E5A6F6F5B2F5EEAFF4E6B0E5D9A0DBD697E3E49FE8E7A0F4EBA4FFE8A7 E9B679B0783DCC9B5FF8D897F2CD88FFE198DEB268DEB86BFDE699FBE99BF7E79BE9DE95E4DB99 E9E2A5F0EBB4FCF9C1E9E7A6F0EFAAF6F5B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0F0C9C9C9757575 6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E545454 5252525A5A5A6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6060605D5D5D5454544C4C4C 4D4D4D5555555E5E5E6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F606060585858505050 5656565E5E5E5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E5757574E4E4E4D4D4D 5151515C5C5C5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6060605E5E5E5555554D4D4D4C4C4C545454 5D5D5D6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6060605959595151515454545E5E5E 5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E6565658C8C8CBCBCBCEDEDED FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6FEEDDCF8DBD1 F2CCCCF1CBCBF7E0DFFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFDFBF5ECD0EFE0AFFAF6D9FFFFF3FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF7F2FCE5C7 F2CB85EBB959EEBF69F7D6ADFFF0F0FFFBFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF6F5E9D4F1DDBE FCE9D2FFF4E9FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F1CCCCE48D8DDD5B5CE47575FBE8E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDF3F3EB8D8DDD3F40E88182F6D2D3FDF5F5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FAFAFAE4E4E49F9F9F6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F 5D5D5D5353534D4D4D4D4D4D5454545E5E5E5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F 5F5F5F5959595050505757575F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F 5757574E4E4E4C4C4C5252525B5B5B6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F606060 5B5B5B5353535252525D5D5D5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5B5B5B 5050504D4D4D4E4E4E5959595F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6060605858584F4F4F 4B4B4B5151515A5A5A6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5D5D5D6A6A6A949494 C5C5C5F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1F2D6E1E2A6EBEDC7FDFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFF5F5FCEAE1F0DDAFF4E9C8FDFBF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD F3E7E7D2A4A4D26969DD4F4FF2B2B2FEF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFE F4F4F4E9D0D0DD7373D96060DB7373F1C7C7FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDF83EBDE82EEE185EEE187EBDD84F1E38AF3E58C EEE087E4D67EE7D981F0E28DE2D682D9CE79F0E48FF2E690E9DE85ECE188F0E58BF4E990F5EB91 E5DA80E5DA80EFE389EDDF86EEE088EEE186EEE185ECDF81ECDF81EADD7FF4E788F1E485E0D373 E5DA7BF0E78CECE58BEEE78FF6EE99F8F09CF6EE9BFAF29EF3EB97F7F098F6EF95F3EC91FAF398 EBE48CF4ED96F7F09BECE492EBE392F7EF9EFDF2A2F8ED9BEEE38EF3E791FDF19AF7EE95F7ED96 FAE58FFBDC88E7C16DC29D47FBE58EEEDD82F6ED93ECE78CD8D479E5E086F3EA95F3E896F6EA95 FAEF96F5EA8FE7DC80EEE183F1E486F3E68AF3E28BEFDF87EDDC86EFE188F9EB92F1E38BE7D784 EEDF8CF8E996F5E795F1E591FAEE9AEBDF87E6DB82F8EC98F1E396F4DF97F2E299F1EA9DF5ED98 FFE793B88532CE9E47FFF098F0E592ECE092F2E797F7EC9AEFE38FE8DC88F4E894F0E48FF5E692 EEDF89F2E38EF6E691EEDE88F2E38BEDE18CF8E892F7E08BDABE67EFD27BF4DB83EFDE88F6ED97 EEE893EFE695F0E496FDF2A4EFE390FFF7A3FDF19FEFE292EBDE8FE8DB8DE8DA8CF8EA9FDFD185 F5E89CEBDE93F9EFB0A9A16E110901615A272D2701CFCA93F7F3BE54511FAFAD7C4B4825464122 413C1CD4CE96DED78EBCB76F444100DAD796EBEAB0EAE7B54E4A1BE6E2B34C48149E9C60F8F5B3 F6EFA4F1E99CECE496EDE598EDE59AECE4A2F9F5B9FFFFCE97936A0502002D2D11635F45342E15 EEEDB7EDEDB7302E17585537C5C19ED8D2A6F5EFB4DED784F3E88BF7E6A2F5EAA7E2DC94E7E39B E5E198E8DF97F5E29DFFE9A0EDD0848D6D23FBF7B7E6D6A4292114494519F7F1BBF4E9AEF0EEA6 E3E396E9E297EEDF96FDF4A9F4EFA1FCEDA0E2A764B87230E9CD7EE6DA8AE1DE90C4C77DCCCC86 E4E09EF8EFAEF4ECA7E5E099ECE99FE7E89DE0DE95FBF8B0E3E09BD2CF8AE9E6A2E5E1A1E6E2A2 DAD696D5D191F1EDADEFEAAAE3DF9EE4E19CE5E29BEFECA5EBE8A1E0DD96ECE9A3ECE9A4EFECA9 EAE6A6E1DD9DE0DC9EE7E2A2F5EDA7F5ECA6EAE19CF1E7A7F6EEAEE5E1A1D7D593E1D391E5C886 F4CC89A9813BB3944AD9C879A89E4ECBC67AB9B56FD7D695CCCC8DA5A66AA9AE717A7C41525416 BEB97CC9B06F88611DA3833BFBE095E5D17FECE089E7DF85E5E185F3ED94FAF49CF3ED96F5EF9F F9F5B9EFEBC29A937A0800002E251CEEE7CBDFDCA8E8E8A3E4E399E2DE9BECE7AEE5DFABFAF7BB F4ECAEF7ECACEBE09EEDE2A2F1E7A9F3EBACF5E6A8FFDEA0CF9859C4904AFFEEA7FFF2ADBE8546 BF9651EBD98DE8CF85E3D084D0B16BBB7E44E9CF89CDCB80D6D08CE8E097F9EFA5EFE4A2EBDFA4 F3E9ADDBD292D7D08DD3CF8AD4D092D0CC9BD5CFAB2D290C505128E4E1B3D7D09ABFB777F5F2B0 F8F0ACE6DF9FD2CD8ED7D696E0DF9FE8E5A3EFEDAFE6DEABDDCF9BE9DB9FF5EAA5F5EFA1FBEB9E C39E58C6894BEFB479FEE7A9F6E3A1FBE4A4FFE8A6F5DC90C29C4DD0A154FDDA8AFFEF9FFBECA2 F5F0AEF2F2B8E8E9B4E4E2AFDAD998EEEFA8EEEFA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2F2F2 D8D8D8D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0 C1C1C1BCBCBCC9C9C9D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3CECECEC0C0C0 B3B3B3B4B4B4C2C2C2D0D0D0D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3C8C8C8 BCBCBCC6C6C6D2D2D2D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D2D2D2C6C6C6B7B7B7 B4B4B4BBBBBBCDCDCDD2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0C2C2C2B4B4B4B3B3B3 C0C0C0CECECED3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3C9C9C9BCBCBCC1C1C1 D0D0D0D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D7D7D7E1E1E1 F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFB FEFBFAFEF9F9FDF9F9FEFBFBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFCFEEFDBFDE4BEFFF3CEFFFBE4FFFEF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF7EFFDE5C8F3CD8CE2B649EBC27AFAD9C4FEF4ECFFFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1EBE9C0 E4E1AAF9F7E9FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F1CCCCE59494DF7070E68A8AFBECECFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDF3F3EB8D8EDC3D3CE37774F1C6C1FCF2F1FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFAE6E6E6D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2 D2D2D2CFCFCFBEBEBEB5B5B5B5B5B5C1C1C1D0D0D0D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2 D2D2D2D1D1D1C8C8C8BABABAC5C5C5D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2 D1D1D1C4C4C4B6B6B6B3B3B3BDBDBDCCCCCCD3D3D3D2D2D2D2D2D2D3D3D3D4D4D4D4D4D4D3D3D3 D4D4D4CCCCCCBEBEBEBDBDBDCFCFCFD2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1 CBCBCBBABABAB4B4B4B7B7B7C8C8C8D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C7C7C7 B8B8B8B2B2B2BBBBBBCACACAD3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3 D9D9D9E4E4E4FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF4F4DAE7E6B0EFECC6FEF9F2FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFBFCEBE5FADDCEFCDFC1FEEDD9FFFCF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFDFDF1E8E8C8A8A8CB6565DC4242F2ACACFEF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBEAE2E2DCB0B0DB4B4BE86B6BF8B1B1FEE6E6FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7D77FE7D67FE8D97EDECF74EBDC81E3D479 E8D97EE3D478D8C96DD9CA6FE2D27BE2D382E2D280E9D986E1D37BE3D57CEFE285F2E486F4E688 F4E789F2E488ECDF83F0E387EDE084E7DA7EECDF83EFE286E8DB7FECDF83F3E68AECDF82E8DB7F F3E689EFE488F8EE96F3ED95F1EA92F1E995F6EE99FBF39EFEF8A2F4ED93F0EA8EF7F192F2EC8B E6E07DFAF494F7EE90F7EF94F1E78FF1E693FAEF9FF8ED9DF4E99AF6EB9CF6EB9BFEF4A2F7EF99 F1E88FFBE68EF0CF76D0A64EC79F48FEEB94F4E590ECE792F8F59DEBE68BEBE085F6E992F1E490 EFE08BF1E28DF0E28AE9DB83F6E88FE8D981EEE088F6E990EFE188F1E48AF1E38AF0E28AF2E48C F1E68DECE08AE7DB85F7EC97F3E994F2E993F3E995F1E893F1E490F5E391E7D982DFD686EBE39A F8EC91FEE38DBE9246C79E42FFEB96F8E297F0E697F2E697F2E594F5E695F8E998F4E594F5E694 F9EA99F4E592F5E693F4E593EDDE8BE8D986F9EA8EF1DF7FFDE788E6CC6CF1D97BE4D078E8DE8B EBE597F0EA9CECE496F2E394F8EB99EEE88DF1EA91F3EB97F5EB9AF1E69AF1E59CF3E9A1EFE69F 948E44D3D083E4E295E9E3B14439233A3417ADA7700F0B00EAE9A1EDE9BA3D37198985602E290D CAC4AA2B2801D7CE8FFEF3AAE9DD95F0E5A0E5D998F5EAACEEE4AA605822E2DEA97A7A456D6F41 EAEDAFF4F09FEEEB98F1F0A1E4E29FF4F3BCECECC1C5C3A35D5B412D2A13141100BFBD8BDCD8B3 130A039189797B755B120C00B4AE79F5F0B0EDE69DF1E89CF5EB99EFE391EBDB91F3E19CEFE39B E7E392E4E593E7E69AE9E09AF4DE94F6E592967A23F9E7A48F7D5C070000DBD298F3E99EEBE197 E2D98EF1EC9EEDEB9BE2DD8FEBE495F7E698FFEA9FE3AC65A86C24E8CA78FAEF99E2E391D0D78B C1BC75DACE89E7DB95E5E497D7DD8FD2D88DDCD894E1DC9BDBDA99DCDB9BCFCE8DC9C887CECD8D D3D292DCDB9BE2E1A1E7E6A6EFEEAEF4F2B2E8E4A2ECE7A3F0ECA6F0ECA5EFEBA1EEEAA2EEE9A2 E6E29BE8E3A0E8E3A3E2DC9FE5E1A1D4D28AE5E199F3E6A2F7DCA1E7D69AD1D793C2DB8DD6D389 FDE4A1BA7A3AAF7E36D0B770D5CE90494508979456666426908F4FA6A565ACAB6BA3A360959650 AAAA65C8C581E9D093F1C8907D581AAD8E4EFAE49CE6D68AF0E798E8E192DED98AEAE498FBF5AB F5EEA5F0E8A3FCF3BBD7CDA5110700130C00D0CCA9E0DFACE6E7A6E1E39BE7E6A4F9F8BBECEBAC E2E499FBECA5F6E3A1D6CD8AD8C88AE3D899EAEDA6EAE79DFFDB98C98041E7BF70FCEEA3F2D892 D7A04CE8C06CF4E295F0DF93F8E99DE4C884BC874AE6D27CBABB65CCC68AE3E19CEDEBA5F6F0B3 F7EDB8EFE5ADE4DB97CEC97BD2D07DD4D48BC9C893AFAC8E0B0D055C6A33D3D99DC7C088E1CD95 F8E2A8FCECB0EAE4A2DDDF9ADBE09AD5D68FDAD38DDDDB9FE2E5B6EEE7B2EDDB9FFFF7B3F2D488 BF9645BE9041E2B96EFFF2ABFFF3AEF4ECABF9E9ACFEF3AFF5FCA4E8BD6CC5752EFBC07DFFE9A4 F6F6B4EDFBBDE6FABEE7EAB2EDDEAAF0ECAEDCDE9DDBDE9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF6F6F6F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 F3F3F3ECECECEAEAEAF0F0F0F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F3F3F3 ECECECE6E6E6E6E6E6EDEDEDF4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F2F2F2 EBEBEBE5E5E5E9E9E9EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEBEBEB E7E7E7E6E6E6EAEAEAF2F2F2F4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F5F5F5F3F3F3EDEDEDE6E6E6 E6E6E6ECECECF3F3F3F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F0F0F0EAEAEA EDEDEDF4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F4F4F4 F5F5F5FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFDFFF8E6FFF1CEFFEAC3FFF0D7FFFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFCFEF5EBF5E5C0E0CC76E2BF64EAC273F8E9BEFEFCEAFFFFFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1 E9EABDE2E2A6F9F9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F1CCCCE59595DF7272E68D8DFBECEC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF3F3EB8D8EDD413FE98577F9D7C5FDF6F2FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 F4F4F4F5F5F5F3F3F3EBEBEBE7E7E7E7E7E7EDEDEDF3F3F3F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4 F4F4F4F5F5F5F4F4F4F0F0F0E9E9E9EEEEEEF4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 F5F5F5F4F4F4EEEEEEE7E7E7E5E5E5EBEBEBF2F2F2F5F5F5F4F4F4F3F3F3F2F2F2F0F0F0F0F0F0 F1F1F1F3F3F3F1F1F1EBEBEBEBEBEBF3F3F3F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 F4F4F4F1F1F1E9E9E9E6E6E6E8E8E8F0F0F0F4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 EFEFEFE8E8E8E5E5E5E9E9E9F1F1F1F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 F4F4F4F4F4F4F6F6F6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAE9F5F3CBF8ECC5FEEDD7FFF7F0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF5F2EACFEDDFB6FBEDDAFFF7EFFFFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF4EDEDD6B8B8D46D6DDD4141F2AAAAFEF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAF4F4E8C9C9DA9191DB4F4FEB8787FDD9D9FFF9F9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDD83EBDB81E4D57AD8C96EE5D67B EADB7EE3D477E2D375E5D679E4D578E0D178E0CF7DE7D684E1D17BDBCB73E5D67BF1E285F3E487 F4E587F5E689F5E68CF7E78EF4E68CECDF85E8DA80EADC82EEE187EBDE84F5E78DE9DC82DFD177 E5D77DF0E288F4E88EF5EB92F3EC93F4ED95F5ED98F6EE99F7EF9AF9F299F2EB91EEE88AF1EB8D F3ED8CF2EC89F0E885F6ED8EFCF396F7ED93F4EA94F7EC9BF2E797F4E99AF5EA9AF1E696F9EE9D EEE793EFE68DFCE78EF5D47BC79B42CAA54FFFF39EF5E693ECE894F3F099E7E186E8DC80EEE087 F0E18CF5E691F9EA95F4E690EBDD85F4E68EEFE189F5E78EF5E78EEFE187F8EB8FEADC83EADC83 EFE189F4E990F3E891EEE28CECE28BFBF39EFDF7A2F6EE99F3EB98F8EC98F0DF8AE7DC82EFE996 EBE39BF0E588FFEF98BF974CC49F41FFF5A0F5DE96EBE292F7ED9BF0E18FEBDC8AF7E895F7E896 EEDF8DEBDC8AF0E18FF0E18FF1E28FF2E392EADB88ECDC83F5E384FEE887DBC160E5CE6FF1E188 EBE18EF5EFA1EEE89CE4DC8EE8DA89E9DA87E5DD86EBE490F1EA98F3E99AEFE59AECE29BFFFBB7 D4CD8B292500BABA77EAEBAABFBC880A01028C8652E7E2B1211E04C0BF79F9F6C6898662504E27 0F0B002A261E130F007A7034F2E49AF1E39AF3E59EF6E7A2E1D592FDF8B97B7341AFAB7ABCBB8C 404423EEEFC1EEEBAAEFECA7F8F7B6FCFCC4CCCDA06667421B1A0E000000151200B2B082F4F2B5 F1ECB9453D29020000050000736A38F8F6B8E3DB91EFE797F4E998F7EB9CF6E89CF2E399F7E49C F2E397EBE598E8E99BE7E99BE8E296F5E396F8DF90AA8E43A6905415050070654EFBF2B2FBF0A0 F4E899EBE295E8E396EBEA9BDFE091EAE394FBE99CFFEEA4E7B56DA66F24F2CE7CF3E490F0F29F E3EB9ECCC67FE3D58FDDD288CCCD7DC3CD7CCCD488D9D392D6CF91D3D18FDDDA9AD8D594B6B472 BEBC7BECE9A9E8E6A4DBD897E4E1A1EEECA9E9E5A5EAE5A3EAE5A3E1DD97D4D089D6D289E7E39A DDD990E1DC95E6E19DE0DB9CDAD496DDD899D5D68CE4E199F7EBA6FFE5A9EDDEA0D5DB95D9EC9E EBE199EFC381B67635D5AB5FEFDD95E3DEA5928E56C1BD84928E54A4A164C7C585B5B26FB4B16E AAA862E9E79FCECA84EDD99DFBD7A0CDAA6F785A1AC8B06DDDCA82ECDF92F4EB9DF0E89DEAE49A EBE69DE6E198E5DE94ECE3A2FFFBCB433A1B030000989472F8F8C7D7D89CE2E39FECEBA8D3D090 E2E19CDDE08FEDDD93F0DB96CDC57FD4C283E9DF9DE6EBA1F5F2A8F8D491BC6F31E6C374FFF5A9 E8CF87C78F34EAC36CF5E596F2E598EDE196FDEFA9C99559EDDB80CDCE73D8D298DEDB9CE4E3A1 EFEBAEF7EEB5F1E8ACDDD58FEBE597E6E394DFDE97D2D19D92906F020000A4A366D8D593D6D291 E2DC9BF1E7A8F0E4A7F6EAACF1E7A9F0EAAAF3F1AFE0E5A1D2D496E1DCA4F4E8ACFFF7B8EECB85 BE9448C39547F6D588FFF7ADF5E29EF4ECABEAE9ADE4DAA0FDF7B2EDF19EFFED9CEDA45BF5A968 FFDFA0FCFFC1E9FCBDE7F8BDF3F4BAFFF2BBF5F0BBEDECB7EEEDB8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 E0E0E0D0D0D0C6C6C6C2C2C2C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C6C6C6 DBDBDBF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFF1FEFBDEF9E3B9FAE7CAFDF8F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEF7F9EAE7E6B5DFCA70DEB844EED783F9EEC3FEFCF1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAF1E9EABDE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F1CCCCE59292DF6868E58282 FBEAEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF3F3EB9495DF4E4AED917FFCDEC7FEF7F3FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1E0E0E0CACACA C7C7C7CFCFCFEBEBEBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FFFDE6FBEBC4F8E2BDFCF2E3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCFAFCF4E6EFE7BDE8E2ABF9F9EDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF7F2F2E2CACADC7676DE3D3DF2A7A7FEF7F7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFCFBFBF4E1E1E6A4A4DC7272E26E6EEFACACFDF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE085EEDF84EDDE83DFD075 E4D57AE8D97CE2D376E4D578EFE083F1E285E7D87EE5D580E4D480D7C770DFD076E7D87BE5D679 EBDC7FECDD80EFDF86F0E089F1E18AF2E38BEEE087EADC83E8DA81EADC83EBDD84EDDF86E3D57C E7D980F0E289EADC83ECE086EEE48BEFE88FF3EC94F2EA95EDE590E9E18CF3EC94F3EC93F4ED92 F4EE90F9F391FCF694F4EC89F9F18FFBF293F9F094FBF199FDF39EF0E592F7EC9AF8ED9BF2E894 F7ED98F4EC96EFE58CF5E188FFED94C99E44C59E48FFEE98F7E895EFEB96F3EF99F0E98EF4E68A F9EB92F8E994F7E893F5E691F7E892FAEC94F4E68EF1E38BF5E78DF5E78EF0E389F6E98DF3E58C EEE087F0E28AF5EA91F3E790ECE08AE2D881F7EE99FFF7A2F7EF9AF4EC99FAEE9AF8E692F2E78D F4EF9CE9E299ECE084FEE48DB38A3FBB9436FFEE99FBE59CF7EE9EFCF29FF2E38EEDDE8BF9EA97 FAEB96EFE08CF0E18DECDD88F4E590FAEB98F3E48FF3E490E4D47DEBD97EFBE487EDD574EED778 EFDD84F1E693F2EC9DE8E294EAE291F5E792EEDF8CE8DE90EDE295F1E599F3E79BF2E69CEEE39E F0E7A7E8E2A528240062613CFDFCCE58553B363306F8F6BDC6C1961E1A03B1B171F1F0BA6F6F3D 484A0D1C1B001B17000A0500312800F1E69BFFF5AAEADC91E8DA8FF4EAA0FFF7B2958E50817D47 E6E3B72B2C05D6D7B3FBF6CFEDE9BCB4B1836C6B3C2C2C08040400030100504E2DCFCCA0FFFFC7 E3DF98EBE3A2B6AD77837A42B1A86AFCF3AFEDE59CE6DD90EFE698F0E596F1E497F0E298EADB92 F4E395F4E496EDE59EEAE6A0E4E499E2DD8BE9D988F5DC96DEC28C2F18042E1F12E2DAA7F9F1A9 F5EB9CF1E599EFE69BF0EB9FF5F3A6F2F3A5E9E496F1DF93FFE69DEEBE78A87227E5C16FFFEF9A F2F2A0DBE193CEC881EFE19BEEE399DBDC8CD3DB8CE0E79CEBE5A4ECE5A5DCD894C8C582DDDA96 D9D691D4D18EE3E09DE6E39EDEDB98C9C683C3C07BD4D18EDBD694E1DC9AE4E09AE1DD96E3DF96 E9E59CF0ECA3E8E49DE1DC98DED999E0DB9DE4E0A0EEF0A8EBE69FF3E4A1F8E7A7F3EBA8F0F0AA CFCB84B89959BC8E4C9D6D28C5A85AC8BA70C1BB82CBC68ECCC78D969256ADA96ABAB676908D4A 84813E9A9750E5E29BDFDA94EDDB9BDBBE82FFF9BCBEA8676E5711D1BB74D3C175ECDD90F2E89B F0E89DF0E9A0D7D388E1DC8BE3DF97F8F2BCA19C79000000464221F1EFC4DEDEA5CFCE8DDDD996 D5D08ED0CE86BFC16FE3D587E4D38AE5DB94F1E29FEBE29DE0E399F5EDA2F0C281BD7335F6D486 FFF6ABF5DB94DBA349F9D67EFBEEA0EADE92F1E69BFEE5A0BC894CF5E288F8F79DE8DFA5EFEAAE F0EEAEF5F1B1FCF7B5FAF2AEE5DD96E4DD95F9F6B1F1EFB2EFEDBD6260451B1400F1DC9CE4D68E E6E499E1E69BE6E8A1E6E2A0F4E4A8FFF0B8F1DEA9E9E3ACE0E9ACD7D897F8E3A1FFE9A4C9AB64 A58238DCB76EFFE79EFFEDA5FEEFADF7EAAEF4F3BAEBF1B9F3F1B8FDF5B4E1D489FCF19EFEDA8C E6A461EEBA7EFFF8BEF1FBBFE7EDB1F0ECB0FBF3B8F8F2C2F3EDC1F5F1C4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE E7E7E79394935859583232322828282A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929262626 3232327C7C7CD8D8D8F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFAECE8E4AFEBE8BDFAF9EDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF9F9ECEAE5B6DDCF7ADEB945EACB79F9F0D9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAF1EAEABEE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F2CECEE48A89DD4E4F E46667FAE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF5F6EDA8A9DE6867E48A85F0C2BCFCF2F1 FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C7C7C78A8A8A 3F3F3F353535525252B3B3B3F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF4EEEBC4E8E3AFF4F2DBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF3E6FEE2C5FCDEB8FAE2BFFEF8F0FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7F6F6E1DCDCDB7878DE2C2CF29E9EFEF6F6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFCFCF1E7E7E2B4B4DD6D6DE15151F4ABABFCDCDCFFFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DA7FE7D87DF4E58A EADB80E4D57AE2D378E6D77CE3D47AE8D97EE9DA7FE1D177E6D67EE6D67FE7D77EEEDF82CBBC5F BEAF52EEDF82F1E288F3E38CF2E28EEEDE8AEEDF88EEE087ECDE85E6D87FE4D67DE6D87FE9DB82 E9DB82F0E289EFE188E6D87EECDF86F0E78CF1EA8FF3EC93F0E893EAE28DE4DC87EBE38DF1EA91 F5EE93F5EF91F5EF8EF7F18FF0E885FCF491FEF595FAF195F7EE94F5EB93F0E691F4EA95F6EC97 F2E891F5EB93E6DD85F9EF96FFF299F8D27AD1A84EE9C36CFFE791F5E995EDE995EDEA94F0E88E F4E58AF3E48CF4E590F3E48FEDDE89EADC86EEE088F4E68EECDE86EDDF86F3E58CF1E389EBDE82 F9EB92F4E68DF3E58DF4E990F3E790EEE28CEDE38CF2EA95F7EF9AF6EE99F0E895F0E590FCEA96 F8ED93ECE693EDE69DF4E98CFFE790C9A156CAA346FFE691FEE69DF2E999EDE390F0E28AF2E48D F7E892F2E48CEFE089F5E690E3D57DEFE189F9EA94E4D67EECDD88F2E38FF5E38DF5DE85E8CF72 EBD275FEEC91EFE48EE1DA88D9D382E8E08BF5E890EEDF8AF4E69EF0E19BEDDF96EFE195F1E59A F1E8A0F4EBABEBE6B0666341131300ACAD93161700848449F3F3B5C7C49B150F05808046FFFFCE 85864D9EA458CCCE9CE6E4CA252219817845FFFBB0F3E89AEFE492ECE28DEAE18EEEE599D7D08D 6F6C37BCB9910B0A002B29194F483B322C170F0C00000000141206434127999768DFDBACFFFDC8 EDE5A5F6EDA4E4DC8BECE38FE8DE8AF5EF9DF0E897DDD383EFE495EFE496EBDF91EDE195EDE297 E8DC91F3E392F4E393F1E5A3F0EAA9EEECA1EDE994E6D98CFFEDB6A089661D04009C8D55FFFBAF E7DF92F4EB9FEFE399EAE197F3EDA4EEECA1F1F1A6E5E093EFE093FFE69CF6CA86AC762ED5AC5A FFEC97E7E694E6EB9EE8E29CF4E6A0F3E89EEBEC9CE2EB9AE7EDA1F1E9A8F1E9A7E9E69EDAD791 EEEBA5FFFDB5E7E49EE7E49DEDEBA2E3E099C9C680C4C179DDDA94DBD693DAD593E0DC96E8E49D E7E39AE1DD94F3EFA6E6E19ADFDA95E9E4A4F0EAACE7E3A4EDEFA7E8E09AEADB98E4DE98E2E59B F2EDA6FFF3B4D1A1669A6727B5944D958636ACA85DAEA96ECEC98FBEB97EC8C487BEBA7B848041 A3A05E8A8743A6A35EC2BF7BD5D28BF7EDAAF6E5A4DBC985E4CE8AB9A25D897029E8D086E6D187 D9C87EDBD186E8E095E6DF92D9D780D9D787E2DE9FE1DCAF2A2413161100D9D5ADE9E5B2E3DEA0 D7D08DDCD58EE1DD91D0D17BD1C977EEE294EFE69CEFE09AF6EFA7E5E79BF5E79DDFAE6CCF884A FFE596F5E69BF8DD96E5AD53F4CD76FCEEA1F4E99DF9EFA6E0C683B88649E8D378FEFDA0F0E5AA F0E8B2EEEAAEEDEAA6F4F0A4F7F3A5EAE49AF8F2B0E6E0A8ECE9B8DBD8AB22210E787140FFEDA5 EEDA8CEAE394DEE292DBDF93E6E5A0F8EBAFF3DFA9DBC896EAE1ADEBEBB8DFD594F4D383C9A456 AE893CCDAB61F6D790FCE29EEFDA98EADFA4F4F1B9EDF2BCD4DDA8EBEEB6F9F0B3F5DE9DD9D181 EEE290E9BC78CD935AFCD8A0F9FCBDE7E0A3EFE9AAF5F2B2EEE8B3E5DDADEBE4B2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEEAEAEA9F9F9F7373735959595353535454545454545454545454545454544A4A4A191919 060606181818757575DFDFDFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF0E4E4ACE8E8B8F9F9EBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF5F5E1E9E5B3D9C65EDCC563EAD89F F7EFDAFEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFFAFDFBE6F3E9C1EFE2B4FCF9EFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F2CDCDE58E8E DE5B5BE47474FAE9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6EDAEAEDF6E6EE38888EDBBBA FBF0F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCE0E0E0909090 4242421E1E1E191919343434A5A5A5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF5F5E0EDEDC8EEEECA F3F3DAFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF8F0D9F1DFB1F8E5C2FFEFDFFFFBF7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F8F8E1E1E1DB8080DE3434F29797FEEBEBFFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFF3F3 FFFCFCF5F7F7E4E2E2DCB8B8DB8383DB5F5FE26666F9CDCDFFF2F2FFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D679DECF72 EEDF83ECDD80E5D679EADB80F2E388EEDF84EFDF87EBDB82E0D077EDDE83E0D176E1D275EEDF81 E0D172D5C668E8D97EEBDB83EEDE87EDDC89E9D888ECDD89F3E58CF5E78FF0E289EBDD85EEE088 EDDF87EFE189EBDD85E5D77EE9DB83F1E58CF5EC91F3EC92F4ED93F3ED95F2EA94EFE792F3EB96 F6EF97F8F197F9F297F7F292F5EF8DEBE37FF9F18EF9F08FF6ED8FF3EB8FF0E68DF1E78FEFE58F F3E990F3EA90F4EB90ECE389F5E991FFF198F1CE75B0872DF1D17AFFF099FBF09BF1ED99EBE891 F3E990F6E68BF0E088F7E893FBEC97F1E28DEADB85EBDD85F8EA92F5E78FF3E58CF7E990F7EA8F F1E488F4E68DF5E78EF4E68EF1E68DF1E68FF3E791F4EB93F1E993F4EC97F6EE99F0E995EEE38E F7E691F1E68CEEE895F3EBA3F9ED91FFED97CDA75CCCA548FFE793FFE89FF2E999EBE18DF1E38A F6E990F9EB93F3E58DF4E68DF8EB92EFE188F1E38AF4E68DEBDD84EDDF88E9DB8BFDEB9AFFED97 F4DB80E3CB6EF8E489F7EA93E2DA87E3DD8AECE38EF0E489F4E48EFAE9A4F5E39CEEDF92EEE190 F2E894F0E79AF0EAA7EBE7B3A2A07A0A0900292B1F181902D2D492F1F1B4E9E6BF242107434320 F4F5C3626433A3A765FCFDD179785F030100A89F6BFFFDB3F1E899E7DD87EAE087EEE78DF0E896 DDD79157521C9F9A760E0B00060300080300020000000000383810989762F4F4BFF4F2BBE8E1A6 F8EFB1EAE09CFEF9ADE4DA82DACE6CDBD06EEEE386EFE38DFFF4A5E7DA8FF3E69DECE097F1E59A F5EA9CF2E697F1E192EEDD90ECDF9BEFE6A1F0EBA1F2EC9EE4D797D2BF952F1707200900E8D896 F8F095ECE595F0E79EF0E59DEDE39BECE59EE1DE94E8E89FE4E096F6E79EFFECA5FFDA95B48139 D6AA59FFE794EAE595EFF3A6E7DF98E7D992F1E499ECED9DE3EC9AE6EC9FF2EAA7F2E9A4F0ECA2 E6E39AD8D48BE2DE94EEEBA2EBE79EECE99EF2EFA6F6F2A9EFEBA1E2DE95EAE5A0E3DE9CDBD791 DDD992E1DD94E2DE95ECE89FE6E29BE5E09CF3EEAFF8F2B4E7E3A4DFE09AE7DD98F1E39FDEE196 D6DE91F0E49DF8CC93C4814ADAA668F6E499DFDE8CB4B56BD0CA8EABA56ADDD799E1DB9DCCC788 DBD898E7E2A1938E4A908C47A29E5A7B783197954E9F9A54EDE29BB7A761A78F4BC0A35E967A35 EAD189F5E198CEBE73E4DA8EE8E292EAE98DE0DF88ECE9A3E9E6B38B87620702007E7850F8F6CB EEE7AFE7DF9DFBF5AEE5DE8EEBEA93EEE994E2D989F5E89CFFF4ACEFE89DE7E598FDE79EC79151 CD8D4DFFE596F3E69CFEE39CE6AD55EBC46FEADD91E8DF94F3EAA2F3DA97C69356D9C569F9F597 F1E4A9F3EAB6F2ECB4EFECA4F0ED99F1EE99E7E399ECE5ADEFE8BCFFFFE199956E252301D8D698 F5EA9FF1E494E5D88BEAE096E3DB92F1ECA8ECE8A7F9F3B6F1E5ADFAEDB8FFEBBCE5C487B28B39 B6913EE4C373FFE89FFCE6A1F3E2A2F8EEAFF1EDB3E6E5AEEEF0B8EEF1B9E7E8AFF5ECB2FFF0B4 D8D98ED4DD8AF7DF99CB8F59DEAA74F2DFA0CFC485EAE4A1EEECA6EFE8A6E5DD9CE8E19DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF3F3F3C7C7C7B5B5B5B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0ACACAC949494 2F2F2F0F0F0F2C2C2C8C8C8CEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1E6E4AFEAE8B9F9F9E9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F8E6DDDF97D5CB6C DCC26AEBD5A1FAF4E7FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFDFDFEEEFCF8D6FCEAC6FDE5C9FFF9F3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8F7F1C8C7 E48F8EDF6D6DE68A8AFBECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6EDAEAEDF6F6FE38888 EDBABAFBF0F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0F0C0C0C0 616161151515212121222222353535A4A4A4F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8E9 EBEBC0E7E7B4F8F8E8FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFBFBF3F0EFCFE6E4AFF2F0D3FFFDFC FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F8F8E1E1E1DB8A8ADE4343F29191FEDCDCFFF8F8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDF8F8FBF0F0FBE6E6FBD7D7 FBCDCDFEE1E1E9D7D7CCB5B5C98181D95B5BDE6969E69393F9E5E5FFFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DA7D DDCE71E8D97CEADB7EE9DA7DE6D77CEFE085F0E086F7E78FF1E189DFD077E7D97EE5D679E2D376 E4D576E3D475E3D476E7D87CE7D77FE9D884EAD987ECDB8DE6D784EADC84F1E38BEDDF87E9DB83 EDDF87E8DA82ECDE86E6D880E7D981F1E38BEEE288F4EB8EF2EC8EF3EC91F4ED95F7F099F9F19C F8F09BF3EC95F3EC92F4ED93F4EE91F1EB89F5ED89F5ED89EBE381EDE486FAF196FFF59BF6EC93 EFE58BF4EB90F8EF93F8EF92E8DF85E7DB82FFE68EE7C36AC1973EFFE58DF7E28BF2E893EBE793 E4E18BF1E68DF7E58BF6E68FF9EA95F6E792EBDC87EADB85F6E890F1E38BF5E78EF3E58CF0E289 F0E288F1E488F4E68DF7E990F5E78FEBE187ECE089F1E58FE7DD86EBE38EF1E994F6EE98F5ED9A F7EB97F5E48FEBE086F7F29FF2EAA2EFE487FFED96C29B50BF973AFFE691F3DB92EAE190E8DF8A EADC83EFE188F4E68DF2E48BF0E289F2E48BFBED94F0E289EBDD84F7E990EBDF87F5EA9CF0E192 ECD782F7DD83EED579FEE88DF4E58EE6DC87F0EA94EEE68EEADE83FBEB94FBE9A2F9E79EF7E695 F5E891F7EC92F7EF9BECE79EF8F5BEB1AF8A0607000B0C046C6C51C8C7907F7F45F4F3C6615F37 1C1C0EE8E7C072724F9A9D6AA7A9840000000605009D9562FBF1A8EFE798E0D67FE7DE82E3DB7F D8D27CFFFFBB56501CA5A07C6660490704011B180B5E5B3FA6A47CF8F8C1FCFCBAF1EEA8F1EBA7 FFF8B4EFE6A0FFF7B1E0D38AF7EB96F1E381E2D575F0E289E7D788F0E298FEEFAAFCECA8F1E59D F3E89BF6EB9BF1E691F8E99CF6E49DF2E59BF0E89AF1EB9FF0E7A7FFFFD7817056120000543F10 E7D589F6E889F6EE9DE1DA91EEE49DF8EEA9EBE39FE6E39CF1F0A9E9E49CF2E79FFDE7A2FFE19D BD8C44C48E3FFDDF8CF2EC9AE3E597D7D088ECDF97ECE095E5E794DFE795E8EC9FF4EBA8F1E8A3 E8E49AF0ECA2E5E197DDD98FEDE99FECE89EE9E59BE5E197E4E096EBE79DF4F0A7F0EBA6EEE9A6 E9E59FE7E39CEDE9A0F8F4ABEBE79EE6E29BDCD793E0DB9BE8E2A5E1DC9ED7D793E1D893EAE09B D5DD8FD3DB8BF8E49BE8A971AA5F28F8C98AEAE79BCFD686E8EDA3E7E2A4888244A9A366DAD595 F6F1B1FAF5B4E1DC9AFDF8B4B0AB67918C48928E47B9BA71C9CB82DCD88FCBBE798B7732ECD290 7E611F977A36ECD68EFFF3AAE0D186FAF3A4EBE78CE1E087EAE99CF4EFB7EBE7B9231F0D17120A CAC298F3ECB8F6ECAEEEE49EF6EF9EF3EF9AECEC96EEEB99E7DA8DE0D287E2DB8FECE597FFF2AD C58A4BD29757FFF1A3FFF4A9FCE19BE8B059FDD784EDE096E3DB93E8DF98FFEEABB98548CFB85D FDF89AE7D89BD0C391D2CC92DDD98EE4E28DEBE993E8E59CF8F2BFEEE7C3E5DEBF58552C919058 F6F7B4E9EEA1F3F0A6E2D68EFCE9A5F3E3A0FEF6B1ECEBA6E7E7A0F0E7A6FFECB3E3B381AE7F40 C5A151E3C473EFD689F3E09AEBDE9EE4DC9EE3DFA2ECE7ADF9F5B8F8F4B7F8F1B5F3F0B4F4EAB1 F5DEA5F3F5AFDDE89DF8F7AEE3B378D79963F1C78BC1B470E9E69FEFEBA3ECE499E4DD8FDFD88A FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBECECECE8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E7E7E7D2D2D2 A6A6A63333332424245B5B5BB1B1B1F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF3F5E3BCF7E7BEFEF9DF FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF3F7DD E7DCA2DDBF67DEBC65EAD49DF7EFDAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFBF4F4D9ECEBB9F6EECFFFF5EDFFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F4 EDAFAFDF7272DD6364E68E8EFBECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6EDAEAEDF6F6F E38989EDBCBCFBF0F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDCECECE 8282825757573D3D3D3D3D3D303030373737A3A3A3F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDF6F6F6D4EEEEB9E9E9B9F3F3DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9EDEDEDC7EAEABFF2F3D9FAFAF0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1DB9494DE5454F28C8CFFCECE FFF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6F6EFD0D0E79C9CE86060 E74B4BE74949E86161DF6363D25656D04545DC5353E99797F5D9D9FDF7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5D677E4D576EDDE7EEBDC7FD9CA6DE8D97EE8D880EEDE86E8D880E4D47DE8D880E6D77DE3D478 DACB6DE5D677E7D879E9DA7CE6D77BE9D981ECDC87EBDA88F3E293EDDD8BE9DB83ECDE86E9DB82 E6D880E9DB83EEE087F1E38BE5D77FF1E38BE8DA82F0E48BECE386EEE88AF2EB8FF3EC92F5EE97 FAF29DF7EF9AEEE790F1EA91FCF69BFCF599F3ED8EEEE684ECE482ECE483F4EB8DFBF297FCF299 F3E990E9E085EEE58AF5EC90F7EE90F7ED92F9EA93FDEA93DCB85FC59D42FFE890F8E28BFBF39E E4E48EC9C56FF5EA91F6E389F1E089F7E893F4E590EFE08BE3D47EF0E28AF3E58DF0E289F1E38A EFE188EEE086F5E88CF2E48BECDE85FBEC94FCF198F2E690F4E892F2E890EFE791EFE792F1E994 EEE693EEE38EF4E38EFAEF95F5EF9CE7DF97ECE084FFE891D5AD62BB9336FFE48FEDD68DF3EA99 E6DD88F7E990F9EB92F0E289F2E48BF1E38AF3E58CF2E48BF1E38AF2E48BF1E38AEEE18AF0E799 F1E598E5D37FFEE78DE1C76BFCEA8CF8E68DECE089EBE38EF1E68EEEE286EBDB83EDDB8FFBEA9A F6E78FEEE385F0E786EDE78CF6F2A1E7E6A7C9C89D1C1C130A0C06B9B8A23B361624230BEFEDB9 C0BE8D08090047442B403C303E3D220604002A291A5354256C672CFAF1A9E5DE90E9E28BE6E084 E8E286E1DC86F0E9A08A844A686339FFFFE5272211A7A684FFFFD4FFFFC4F2F3A9DAD987E9E692 EEE697E9E196D2C780B5A761E0D48DE3D687F3E38EFAEB98F1E295F0E09BF5E6A5F6E7A8FCEDAB F5E8A1F1E698F0E690EEE48BF6E8A1E4D695F0E592F4EE98E7E197FCF4C5C2B69A2E210C90815D A69253AA9241FFE790E7DD90F1ECA5F2E9A4F2E9A7F4EBAACAC682D6D691F6F4ADEBE09AFCE8A4 FFE19EB88943D19748FFE996F7EB9ADCDC8EDED78EECDE97EEE296EBED9AD9E08DDFE296F5E9A5 F6EBA5E8E39AE4E096E2DE94E3DF95ECE89EEAE69CEEEAA0E7E399ECE89EEAE69CE5E197EEE9A5 EDE8A6EFEBA5F2EEA7EFEBA2EBE79EE5E198EFEBA4F4EFABE0DB9BE7E1A4F1ECAEE7E5A4DCD490 DAD48BC8D181D9DA89FFE69EDB8E54E59A62FFE3A3E5E599E4F0A2C6CB83FAF6B5B7B27246410C 9F9A59948F4EEEE9A7ECE8A6DCD793D0CB87DAD591F2EEAAC8CA81C0C47AD1D189F4ECA8D6C582 DFC887FFE8A8B39655A58A46F1E6A0F8ECA5F2E297E7E189F3F199F4F2A4EBE7A6FCF8C3BBB78A 100B00564E33FFFFD6E3D8A1F7EFAFF0E89DF2EC9CEEF39FEFF09EFAECA2EEE096EDE597F5EA9D FFDA98BD7F40F0BC7BFFF2A2FCF2A7FEE39BDFA750F3D07CF7EFA4F4EDA6F3ECA6FFF0AEE0AC6F D8C165FBF494F9E8A9F7ECB4D7CF90D8D487DDDD88E8E896E3E29FEDEAB9FCF7D467614428230F D5D397EEF0ACE5F0ABF6FAB8EDE8A7F7E9A9F2E3A2F1E6A0F5ECA3F4EEA5F8E29BE5C582A66B2D DDAB6AFDE69CFBE89FEEE19AECE3A0EDE7A9E8E6A8E6E3A5F0E9AAFCF2B0FDEDAAFCEBA6FDF2B3 F1E9AEEAE0A6F0ECAFF7FDBBF0FAB2FCE2A3D1915BEBAE76F1E09BF2F1A8F0E7A1EBE39AD4CC81 D2CA7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEF9F9F9 CDCDCD8D8E8D272727353535868686D1D1D1F9F9F9FFFFFFFFFFFFFFFFFFEBEBEBD3D3D3C3C3C3 BCBCBCBBBBBBBBBBBBBABABABABABABABABABABABABBBBBBBBBBBBBBBBBBBBBBBBBCBCBCCBCBCB EEEEEEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FEEBD7FBEBC9 F7F3CBFAFBE3FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6EED5E9D297DFBE68E0BF6CECD8A5F8F2E0FEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFEFBEEEFCDE3E2A8F1F0D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCF2F2EAA0A0DD6666DE6B6BE99E9DFBEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6EEAFAF DE6C6CE17C7CEAABABFBEEEDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE3E3E3 9E9E9E5858586D6D6D838383565656383838383838A3A3A3F6F6F6FFFFFFFFFFFFFFFFFFFFFFFF F9F9F9E3E3E3CFCFCFC0C0C0BBBBBBBBBBBBBBBBBBBABABABABABABABABABABABABBBBBBBBBBBB BBBBBBBABABAC0C0C0DDDDDDF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFBFEFEEBF7F7D2E9E9B2EDEDC4F6F6E2FCFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEF4F9F9E2F1F1CCEAEABCEFEFCEFCFCF6 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1DB9E9EDD6464EB8686 F7BFBFFDECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F9F9D9D9E79C9CDB6464 DC4A4AE14646E44A4ADF4F4FDE5353E25858E36464E78686F4C8C8FFFDFDFFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE4D675E1D372E5D677E9DA7CE5D679EADB80E7D77EE5D57DE2D27BEBDB86F5E58EE3D47B E4D47CEDDE82ECDD7FEADB7DF7E88BEDDE83ECDB84EBDB85EAD987F1E08FF3E390F1E38DF0E18C EBDC87E9DA84EEDF8AEDDE89EFE08BE7D883EDDE89EADB85F5E891EFE687E9E384ECE589F3EC92 F7EF98F3EB96F6EE99F1E994F3EC94F9F298F2EB91E7E183EAE181DAD171F1E88BF8EF95ECE289 EFE58DF5EB92F5EB92F8F094F4EB8EF3EA8BF6ED91F6E68FFDE38CD4B057C59D42FFED94FCED95 FFFAA5CCCB76B0AB56FBF097F7E289EDDC85F5E691F5E691F9EA95EDDF89F1E38BE7D981E7D981 EDDF86F1E38AF3E58BFDF094EADC83E7D980F2E48CF6EB92F5E992FCF09AF7ED96EFE791EFE792 F3EB96F0E895EEE38EF5E38FF1E68CEEE895EBE39BF4E88CFFF39CDFBA6FBB9235FFE38EF4DD95 F8EF9FEFE591F5E78FF6E890F2E58CEDDF87F1E38BFBED95FAEC94F7E990F5E78EF5E78FF5E892 ECE597F5EC9EF5E38FFEEF95E6CC6FFAE385F9E68CF2E58EF4EA95F1E78FE9DC83E7D981EADC8A F7E894F4E88EEEE483ECE383ECE689E6E08EE4E0A0D4D3A230301B06080374715719110E4A460F F4F0B8F2EFB95756240100000E050001000043402FC8C6A4C6C78D4F4A0AF1EAA5EDE59BEDE593 DBD37CF3EB95EAE38FF6EFA4C3BD7E2A240BFBF6D1635F3D696735F3F2B6EDECA2E7E590E8E48A E8E288F0E794E8DD90E6DA92D7CD86F1E79FF4E79DF4E69DF9EAA3F6E9A4F8E9AAF6E8ABF1E3A5 F5E6A6F5E9A1F8EC9DEFE58EF1E78FFCF1ABFCF2B4EFE693F9F29EEDE6A3DFD8B3211A16312910 F2EFB8DDC97EA0812EFCE197F9EDA5E1DC97FEF9B7EEE5A4F0E8A84F4A11AAA967EAE8A4E7DE99 FBEBA7FFEFAECB9C58CA8D3EFEE895FDEFA0EAE79AE9E299EFE298F2E79AF0F29EE2E894E4E799 F7E9A5F4E8A3EFE99FF1EBA1DDD78DD8D389DED88EE2DC92E3DD93DAD58BEBE59BF3EEA4ECE69C F1ECA8EFEAA8ECE8A2ECE8A1ECE89FEAE69DF0ECA3EFEAA3F6F1ACEEE9A9F1ECAEEFE9ABF3EFAE F1EBA8F2F1A8E4E797F6EA9BE3BB73C0793BFAC485FDF1ADDFE096D8E099D5D793F8F3AFEFE7A6 A9A25FBFB875A69F5CCAC380F1EAA6E8E19DEEE7A3EAE39FE7E19DDADA94E1E29BDFDE98EAE3A1 E6DA9AE1D293F0DA9DD9C081BBA363977E3CF5DF9CFEE9A3F2E696F0E796E1DA8CF5F0A8EBE7AA FFFAC9918C670A03009D936CFFFFD2F9EFB7FDF5B5F1E9A1EBF3A4E7EC9EFFF0AAF8EAA3F0E89C FFF6AAFBC686BC7A3EF3C785F5E896F5EEA1FCE399DEA74FEFCC79F0E89EEDE9A3F8F1ADFFF3B2 EDBE82E2CA6BF5EC89F9E4A2E2D794FEFCB4D9D589D8D688EBE9A1ECECB0FDFACDBEBA941B1700 BAB685FFFDC2E4E3A2E5E5AAE2E3A8E2E6A6EBEDABF6F0ADEEDE99FCE39DFFE29ED2A45EB08138 CC9D53FFEFA7FFF8B3FFF9B4EEE8A7E4E2A1E9E8A8E7E7A7EAE6A4FAF0ADFFF0ABFAE7A0FFE8A0 FDEFAEF6F1B3F1F1B6F6EBB6F3EEB5EBF8B3FFFDBBF3D194CC894FFFF1AAFCF8B0FBEFAFE0D69C B8AD75E5DA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBB4B5B4626362191A19454545A8A8A8EAEAEAFCFCFCFFFFFFFFFFFFFFFFFFC9C9C9868786 5656564141413D3D3D3F3F3F4242424242424242424242424141413F3F3F3E3E3E3E3E3E454545 707070D1D1D1F2F2F2FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9F5 F6F0D4EAE8B4F0F0CDFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFBF5F7EED8EAD49BDFBD67E1C170EAD499F9F4E6FEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFCFEFCFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFB FDFEFDFFFFFFFFFFFFFFFFFFFDFCF8EEEECBE3E3A8F1F1D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCF2F2EA9D9DDE6B6BE18080EDB5B4FCF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6 EEB0B0DD6666DD6666E68F8FFAE8E7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 B5B5B56E6E6E4D4D4D939393C3C3C36767673A3A3A383838A3A3A3F6F6F6FFFFFFFFFFFFFFFFFF FFFFFFF0F0F0B1B1B17878784B4B4B3B3B3B3F3F3F4141414242424242424242424242423F3F3F 3E3E3E3E3E3E3C3C3C515151A1A1A1EBEBEBFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFF9FDFDEBF7F7D0EEEEBDE9E9B8F6F6E1FDFDF9FFFFFEFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFCFEFEF0FBFBDAECECABEAEAADF2F2D3FBFBF2 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1DBA7A7DC7474 DF8080EAB0B0F8E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFE3E3F7AEAEE66D6D D95858DB9898E8B1B1F2B9B9E3A0A0E59D9DF1ABABF7BFBFF8D6D6FCEFEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE4D674E4D675E6D878E6D779E2D376DCCD72E4D57CE4D47CDECE78DFCF7AE2D27D E2D27CEADA83D6C66EE0D175E1D275DECF72DFD073E5D67BEBDB84E6D681E3D37EE7D883EFE08B F6E792F3E48FEBDC87E8D984EBDC87EDDE89E8D984E5D681E7D883F1E48DF0E788ECE684EEE98A F4ED92F7F097F6EE98F4EC97F1E994F6ED99FCF59CF9F298F2EB90EEE588E3DA7DF2E98FF8EE96 ECE28CEAE08AF4EA94F2E891F7ED93F5EC90F2E98CF6EA90F9E791FEE78FD7B158CFA84DFFE990 FAEB92F2EC96B0B05ADCD882EADE85FAE58CF4E48CF3E48FECDD88F6E792F4E590F5E78EEDDF87 ECDE86F0E289EFE188EEE086F4E78BF8EA91ECDE85E9DB83E7DC83EEE28CF9ED97F5EB94EEE690 F0E893F3EB96ECE491E8DC87F2E18CEDE188EBE592F0E8A0F8ED90FFEF99DBB56AB1882BFFE18C FAE39AFBF2A2F6EC99F1E38CF2E38DF2E38EE9DB84F1E28DF1E28DF4E68EF6E891F6E793F7E891 F8EC97E7E193F2EB9CF8E994FEEC8EE5CB6BF2D87BF6E388F2E48DF4EA95F0E590ECDF87EFE08B EEE392F5E997F4E990EFE48AEEE58BF0E991E3DC8EF7F2B2C0BE8A0F0E020303000A0700171000 C9C487EFE9AEF8F3BDA29E641610030B05012D2715D7D2AFFFFFD4DBDB983B3701E5DD9BEBE39D F2E99DE9E091EBE392ECE395FCF3ABF5EFAC332C04D3CF9DB6B481312E0BE7E49EE7E397F1EC95 F7F096F6EB93F0E593E5D98DFCF0A8FFF7AEFEF9ADF7EFA5F7EEA8EEE4A2E8DD9DEEE3A3F1E6A5 F2E4A4F4E7A3F0E49BF8ED9FEFE591EEE48FF2ECA3EBE4A2FBF3A8E9E098FFFFCBADA684201D07 9D996DFFFDB9DEC777A1782AF4D792ECDC98F7F4B0F2EBABF2E9ABF0EAAC433E0A9F9F5EF6F7B5 E0DA96F0DF9DFFF1B0E1B470C78739FCE290FDED9BECE99AEBE29AEDE096EBDF92EAEB98E2E894 E8E89BF8E8A5F5E6A2F0EAA0F4EDA5DED78FDED88EDCD68EC4BD75D6D087EAE39BF6EFA7F2ECA2 F2EBA3F0EBA7EEE9A7E6E29CE4E099EAE69DE8E49BF2EEA5E6E29BF1ECA8F3EEAEF3EEB0E9E2A7 E3D99BEBEAA6F4F6ABF3F0A1FFEA9EC5934BC48845FCD48EFAE59EF0EFA8DADC9AD5D291E1DA96 E4DD99EEE7A3EAE39FB1AA66ACA561EDE6A2F2EBA7E9E29EC9C17ECFC985F7F2AEEBE9A7D8D695 D9D494DAD294F9EFB3FAEBAFEDDA9FF7E0A3A48B4B917333F3D695E7D591F3E69CF4EA9DDED68B F8F2ADF0EBB1EFEBBC463F2D080100BEB991F6F1C2F4EBB4FAF0B1E9F5ACE6EEA4F7E3A1EFDF9B F5ECA3FEF5ACEDAF72C78045FCDE99ECE390ECE69AF7DE96E0A851F0CD7BF5EEA5F3EEABF0EBA7 FFF9B8E7C184CAB052FFF792F9E69FE6D98FF1EA9BE6E297E8E2A0E7E5A9EFEDB9DFDCAF33301A 89865EFFFDC9EBE7AFF0EAAEF8EEB5E4E1A4F2F3B2DEE19DF5EDA8FFF9B7F0CD8DBA8342B8823E E6BD72FFE290F2E295E9E3A0EFECACEFECACE6E7A4E2E19FE6E4A0F0EBA7F8EFACF9ECA7F5E39F F5E39EFAF1ACF8F7B6F8F8BDFFEFBEF9EBB7EEF7B8F3EEA8FDF3AFD69B5EEECE8BFFF3AFFFF8BD E6DAAAA3976BF9F3C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9FAF99999993637361C1D1C616161C7C7C7FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFC2C3C2 7575752B2C2B0808080404041212122828282C2C2C2C2C2C2D2D2D1D1D1D0A0A0A0202020A0A0A 242424626262D0D0D0F3F3F3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F3D9E2E2A7EAEAC1FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF6EED6E8D091DFB95BDEB957EDE6BCF8F8E9FFFFFEFFFFFF FFFFFFFFFFFFF2FAF2DEF2DDD9F0D9D9F0D9D9F0D9D9F0D9D9F0D9D9F0D9D9F0D9DAF0D9DAF0D9 DBF1DBEDF8EDFFFFFFFFFFFFFFFBF9FFF4E6F5ECC8EDECBCF6F6DEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDF2F2EA9E9EDE6A6AE17C7CECB0AFFCF2F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDF6F6EEAFB0DD6262DB5959E37F7FF9E4E4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFD C7C7C77777774C4C4C6C6C6CBBBBBBE3E3E36E6E6E3B3B3B383838A3A3A3F6F6F6FFFFFFFFFFFF FFFFFFFEFEFEEDEDEDA6A6A65A5A5A1818180000000A0A0A1E1E1E2D2D2D2C2C2C2C2C2C282828 1212120505050505050F0F0F3B3B3B999999EEEEEEFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEDF4F4CCEAEAB0EDEDB9F4F5D0FCFDE9FFFFFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFFF3E6F8F1D0F0EFBBE9EAA5EFEFBCFBFBED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1DBB1B1 DA8484D87A7AE3A2A2F6E0E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8F8C3C3EE8383 E26161DA7272DCD0D0EDF5F5FCFFFFEFE6E6F1E0E0FCECECFFFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDFD16EE6D875EFE180E9DA7CE1D275E3D479EBDB83EBDB84E9D984EADA85 EBDA87F5E491ECDC89DECE78DDCD74D6C76BDCCD70DBCC6FDCCD70E3D479E4D47CE5D47DE4D57E E6D782EBDC87EBDC87ECDD88F1E28DF4E590EFE08BEEDF8AE5D681EBDC87EDE089E9E081EDE886 F0EA8BEEE78DF0E990F6EF97F4EC97F0E893F2EA95FAF39AFCF59BF9F297FBF298FEF49AF7ED95 F9EF9AFBF09DF5EA97F4E997E8DE88EFE58CF5EC91F2E98EF1E58CF4E18BFEE68FD3AC54E0BA5F FFE48BFCEA91E9E48D888933E7E38DE7DB82FCE88FFAE992F5E691E5D681EDDE89F5E691F8EA92 F6E890F5E78FF7E990F4E68DEFE287F3E68AF4E68DF1E38BF0E28AEBE087EBDF88EFE38DF4EA93 F3EA95F6EE99F5ED97ECE491E7DB87ECDB86EBE086E9E390EEE79EF2E68AFCE68FDCB56AAD8427 FFE18CFAE49BF5EB9CF7ED9BF5E692F3E491F4E592F0E18DF6E794EFE08CF3E490F9EA96F8E996 F5E692F3E694EDEA9BF0EB9AF7E991FCE788E6CD6CEBD373F1DC82EBDB85EDE08CEDE18EEFE08D F2E693F4EA9CF3EA9BF3E999F0E693F1E794F3EA9DECE49CFCF4B86D683D0B080035311B130E00 989156FFFFC8F2E9B2E4DBACDFD89DC9C4987C754F8C8748F4F0B9EBEAAEDEDD95322D03CDC887 F7F0AFEBE29DF1E99FEBE197EAE097FDF4ADFFFFBB918C4A9E9B5CFCFBBF413B07C4BC7DEDE59D F1E899ECE18FECE090F3E59BEFE29BF4EAA1F0E99BEFEC99F4F19FEFEBA3EDE9A1EDE79FF5EEA5 F3ECA3EDE59AEDE499EADE93F1E498EFE195E8DB8EF1ED9FECEDA3F3EBACFFFBCAD5CCA61E1A04 818256F7F7BDFAF7AEFFECA4AD7C37E6B878FCEDACEEECAAFAF6B7E7DDA1FFF6BB5F5B1C787737 FCFDBDF6F1AFFBEDADFFEDADE2B772C17F32F9D382FCEB99EEEB9CEEE49BF9EBA2F4E99BEBED97 E7ED98EDECA0F8E8A3F5E7A4F1EAA3F5EEA8EDE6A0F2EBA4EDE6A0D8D18BE5DD97ECE59FF5EEA8 ECE59EE1DA94EDE8A5EEE9A7E5E19BE4E099EFEBA2EEEAA1E5E198D9D48DE9E4A0F1ECADF2EDAF ECE4A9F0E3A7EAEDA8DFE89AF5EA9CFED68DCE954EE8BB71FDE89AE6E095F5EEAADFD89ADED696 E6DF99E8E19BDFD892E3DC98E5DE9AE4DD99EFE8A4E4DD99EDE6A4E5DD9DE3DB9AF2E9A9F0E8A9 EAE6A8E4E1A3E0DEA2C7C588E9E2A9EDE0A7F1DDA4F9E3A7B39054CFAF72FCE6ABFAEAAAE9D98F F6ED9DFCF6ABE0DB9AEBE7B5E9E3BC332D1C28220BD7D0AAFFFDD1F4E9B3D4E29FE0EAA7FFE8AC EBDC9AF0E9A0FFF4ADE19C62C87F44FFE49CF3EE9AF4F1A4FDE49CE3AC55F3D080FAF3ACF1EFAB F1EEACFEECADEAC688CCB153FFF693F5DF98F4E792EEEA92FCF8B0F0EBB1F9F8CBF1EEC33A391C 25250AE0E0A7FFFFCBEBE6AFFFF7BFF7E7A9FAEDAAFEF3B0F5EEAAFBE5A3DDBB7ABE8C4EBC8949 EDC380FAE198F6E99BDDD78BD3CE8DD9D591E3E09AE8E69EECE9A0EEEBA2EFEBA3EFE9A5F1EAA8 F7EDADF5EBAEEDEEA7E5EBA2EEEAAFFEEDBEFEECBDFAF5BBEEF2ABFBF4AAE2BE78C79A5BFFE8AB FAF3B8F4EDBE9B9165F1E8BCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEEEEE7E7E7E1919193939398A8A8ADEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFDFDFADADAD5656562626262626264C4C4C8484848E8E8E8E8E8E9090906363632D2D2D1B1B1B 3737376F6F6FB0B0B0EEEEEEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4DCE5E5B1EBEBC3FBFBF1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDF8EFD7E9CA79DDB540DED180E9E8BDF5FAF0 F7FDF9F8FCF8F4FBF4DDF2DCB7E4B5B1E1B0B3E1B2B3E1B2B3E1B2B3E1B2B3E1B2B2E1B1B0E1AF AFE1AEB1E2B1D2EED2F4FBF4F7FDFAF9F3E3FBE6C6FCEAC4FCFADBFEFEF0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFFFAF2EFE99F9EDC6362DD6666E89898FBEEEEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF6F6EEB3B3DE6969DC5D5DE38181F9E5E5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA E8E8E89B9B9B4242424A4A4AACACACDDDDDDDDDDDD6D6D6D3B3B3B383838A3A3A3F6F6F6FFFFFF FFFFFFFFFFFFFFFFFFF5F5F5CDCDCD8484843939391A1A1A3434346868689191918E8E8E8E8E8E 8282824343432222222828284E4E4E909090CFCFCFFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCFEFEEBF9F9D1E9E99DEBEAA1F8F6C9 FFFDE9FCFCF4FEFCF8FFFDFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFAFCFCF6FCFBF4FDF5E8FEE5C7F1E1B1E6E4ACF3F3D6FCFCF3 FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1 DDBBBBDD9494DB7474E49393F6DADAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF1F1EE9E9E DF6363D97878D9A4A4DED5D5EEEEEEFDFDFDFDFBFBFDFAFAFEFBFBFFFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDED16CE7D975EADC7BE6D779E6D77AE0D176E2D27AE0D079E5D580 E7D684E4D381EDDC8CE2D17FE8D882E8D881DFD075EDDE80EEDF80E6D778E7D87BE7D87DEBDB81 EADB83E8D984E8D984E6D782ECDD88F7E893F5E691E9DA85EDDE89E5D681F0E18CE8DB84EBE283 EBE583EDE787EEE78CEFE88EF2EB93F0E893EFE792F3EA96F8F199F9F29AF6EF97F6EC95F6EC95 F5EB96F4E996F7EC9CFCF0A1F9EE9DEFE590F2E891F5EC91F4EB90F4E78EF9E690FCE48DC5A148 F0CA6FFFE98FF3E389EDE992C6C771F6F29DFEF098F8E48BF8E58EFAEB96EBDC87F2E38EF6E792 F4E68EF0E28AF0E289F4E68DF2E48BEDDF85F0E387E9DB82F2E48CF5E78FF2E78EF1E68FF1E58F F6EC95F6EE99F5ED98F1E994EEE693EFE48FF2E08BF2E78DEAE592ECE49CEFE487FAE48EE2BB70 AE8628FDDD88F2DB92EAE191EFE593F3E493F0E190EFE08FF4E594F4E594F0E190F4E594F6E796 F3E492F2E392F6E998F3F2A0EEEC97F8EB91FAE686EAD16FE4CA6BFBE88DF1E18CF3E795F5E898 F2E492F1E495EFE79DEFE79DF3EBA2F0E59DEBE199F1E7A2F5EAABEFE6AE282100353013EEEAC5 C0BB82EBE494EEE79BF5E9B6F5E9C3EFE7ADFFFEC9B5AF7556551CF9F7A6E4E19BF7F3A845410E 9B9556FFF8B9EDE4A3F7EDAAF5EAA6E6DC96EBE29AF8F1A9C7C47C686624FDFCB8938B56827741 FDFABBEADC97F7E9A2F9E8A3F4E49FE7D996E6DD94F8F2A1F3F298EBEB93EEEF9EF0F1A1EEEF9C EDEB97E5E28ED8D280E7E08FF7EB9DF7EA9FF9EBA3F3E49DEBEA95E7EC99ECE4B3ECDFC5584D35 2A2912D3D998F2F8ABF5EEA6FFE9A8BC854AC68A4CFEF1AF8E8C4CD7CF91FEF4B9FDF4BA656022 413F15E6E6A4F4EFADFEF0B0FCE5A6E5BB78B47124EDBF6FFDEB9AEBE898E5D98FFAECA1FAF0A1 E5E891E5EB95EFEFA0F5E49FF0E19EEBE49EF4EDA7F2EBA5F1EAA4F1EAA4F0E9A3F5EEA8EEE7A1 F5EEA8F4EDA7ECE59FE7E2A0EAE5A3E2DE98E4E099F2EEA5F2EEA5ECE89FE1DD96F2EDA8F2EDAD F0EBADF3EAAFF0DFA7EDF3ADDCE999FFEDA1DFA760CA8B44F8D887F0EC99E2E496F6ECABECDDA4 F7EAAFE3DC97D7D08AEEE7A0DDD690E7E09AF5EEA9F7F0ACF9F2AEF0E8A6E6DE9DEEE5A4F5E8AA D8C98EEFE7ABF0EDB2B3B27997985DFDFDC8CEC88FE7D69CFBDEA6EFD79F885F27977746EFDFA5 FFEFA8EADF8CF1E898FDF9B1ECE7B2E8E4BED2CDB01510003D3820C3BB96FFFCCDF8FECBECF9B7 FFE8AFF3E4A5F1E8A2FFF0A8E29861CE8449FFDD94F1EE97F8F5A7FFEBA2DBA54EE9C776F6F2AB F0EEAAF6F3B1FBE7A8EBCB8DC7AB4CFFF58EFFECA1F9ED90F7F294EDE7A0FDF7C6EDE9C463603B 3D3C0DCCCD94F8F8B9F4F2B6EEE7B4F9F2BDFCF4AAF8E69AFFDE97FFEAAAECBB7DB07D41D8AB6D FCE4A2FFFDBAEDE098EAE29AE9E29CDBD48FD8D189D4CE84D4CC82E7E093F2EBA1EBE79DE6E4A0 E0E0A2E7E7AEEAEBB5E4F0A9DCE79BEDE3A9FEE9BBFCE7BCFFEEBBF4FAB3E9EF9FF4E094DEA16A FFD8A1FCFCC1E0DEA4DCD69DFDFBC2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDEEEEEEC0C0C05F5F5F171717606060AFAFAFECECECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3F3D2D2D26868683030303D3D3D777777C3C3C3D2D2D2D1D1D1D5D5D58787872D2C2D 202120595A59A5A5A5E3E3E3F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAF0F2F2D7ECECC5EEEECBF8F8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF1F5E6B4EBD077DEC057D4D085 CCE6BFCAEBCBCAEBCACBEBCAC8ECC7C5EFC4CCEFCDD5EFD6D6EFD6D6EFD6D6EFD6D6EFD6D2EFD2 C8EFC8C1EFC1C2EFC2C6EDC6CAEBCAC9EBCBD4E5BCE5DFADF4EAC2FEFDECFFFFFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF7FFF8ECF2E1E19D95DD6867E07878EBACABFCF1F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDF9F8F1C5C5E28484DD6A6AE38080F9E5E5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1F1F1B1B1B16E6E6E444444717171D6D6D6F1F1F1DDDDDD6D6D6D3B3B3B383838A3A3A3F6F6F6 FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEEEEEEA0A0A04444442424244F4F4F9C9C9CD5D5D5D1D1D1 D1D1D1BDBDBD4F4F4F252525434343848484CACACAECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FDFDEBF4F4CEF4EEC2 FBECC4F7EBC4EFEBC4F7EBCEFFEFDEFFFBF7FFFEFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFFFFFEFFFFFEFFFFFFFDFDFBF5F5DFECECC5EBEBC1F0ECC4FCEFCAF7EFCCF2F1D4FAFAF0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 E1E1E1E4C5C5ECA4A4E26E6EE58484F6D4D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FCE1E1 EC8484D95252CE8282D1C0C0EBE7E7F7F7F7FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D36FE3D672E0D271E0D171E9DA7DE4D57AE5D57CE6D57E EDDC86E5D47FD7C774F3E291EFDF8CE1D27BEDDD85E2D479D9CA6FDCCD71DECF73EBDD81EFE086 EBDC82EBDD85EFE08AF2E38DEEE08AEBDC87EDDE88F3E48EEDDF89EEE08AEEE08AFCED98EFE28A F2E98AEEE787EFE88AF3EB91F4EC93F1EA92EEE691F1E994F6EE96FAF29AF9F197F6EE93F3E98F ECE289F7ED95F6EC94F2E892FEF6A0FBF09BFAF09AFAF098F5EB91F3EA8FF6EA90FDEC93FBD781 BA8E37EBC76EFAE589EBE086EBE48CFEF8A1EEE78FE9DB82F7E389F2E289F9EF94F3E88DF7EA90 F2E78DEBE085F3E68BF0E589F3E98CF1E588EADF82F3E88BF1E48AF2E68DEDE38AEEE38AF6EA93 F9ED97F3E992F4EB96EFE691EAE28DEEE592F4E997FBED99FAEE95F1E592F0E69AF3E88CF7E58D E4C372AC8229F9D27DF0D586E9E08BEDE590F7EB99F5E795F0E290F6EB99F7EA98EBDD8CEDE290 EEE190EEDE91EEE291F8EC9DF4F19DEFEB94F4E98EF8E589E8D075DFC66CFFEA97F6E292F5E396 F8E79BF2E195E7DA8CE9E094EDE397F5ECA0F0E69DE1D898E9E0A7FFFBCD958E620000007F7A51 FCF9C5F0EAA5F1E895F1E799F0E4A4E3D79FE8DF9BEBE1A0C4BC7576721FEFEA98DCD78DFCF6AF 635D236C6732F4EEAFF4EDA8FBF5B2F4EAABF1E5A4E5DC95EEE699D4CE83504C12E6E2A5D6CE9C 524814F9F7C3DDD195F1E6A3F4E6A0F1E59CFEF8ABF8F0A0F2EC9AEEE894EDEA97EFEEA1F0ED9F EDEA9CEFEC9BF2EC9DDDD787E0D789F9EFA1F7ECA2F8E9A4F4E6A1F4F39CEAEC9EFFFFE28A806B 060000989A57EEF3ABDFDC9CFBEDB0FEE4A2EBC582B57E3FFDEFB2584D276A612EFFFDBBEEE9AE 928D58504A12EDE6ACEBDFA7EADC98EBDD95E3C378B97727EDBC6DFFF3A4F2EDA1E0DA91F4E99E F0E795DEDB84E0E28BEDE99BF1E29EEEE19CEDE69DF9F2A9F8F2A9F0E9A0F6F0A8F2EBA5FCF5AF FAF3ADF2EBA6E6DF9AE7E09CE1DB99E6E09FE0DA98E3DE98EEEAA1EEE9A0EFEBA2E8E49BF4EEA9 E7E29FE0DA9AE2DB9CEFE7A9D9E299CED282FCD08AC88440D09D52FAF19BE0E18EE6E398F9ECAB E9DA9EEADDA0F4ECACF5ECADECE3A4E0D798F6EEAEEEE6A6E9E1A1F0E8A7EFE8A5ECE5A0EEE7A3 F0E4A9F2E5ACFFFBBCE7E2A1D2D195EEEDBADFDCABE9E4ADF0E3A4F6E3A4FDE4AAFFE9B6CEB285 A68654F4EAABF7E69BECE091EBE399F7F1B2F1EBBAF2EEC7B7B38F211E100D0A006B6548CBD2AC F1F1C8F5E1B7F7EEB6FFFBB5FDF1A8E8AC6CE2A769FFE69FF1ED9DF5F1A6FFE7A0D59E4AE6C174 FAEDA7F7EFA7EBE49EFAE8ABDEBD88A48334FFEB94FEF5AFF9F7AAFAFCB3FCFDC5BBB387201500 382F10F1EBBFFFFFCEF2F2B7E7E6ACF4F4BCFFFDC2FCEEA5FFF3AAF9E19BDAA463B78445EBC081 FFF7B7FFF4B2F9F0ACF4EFAEF3ECADE1DA99EAE4A1E8DF9CDAD28BCFC77FE1D992F2EBA4F4EFAC EFEBADE2E0A5E5E4ADE6E8B4E6EEABDFE59EEFE4AAF0E1AEE8DAA6F2E4ADEBEEADEDF2A8FDF7AD F0BC7FDFB173F5E5A1FAF5B6FCFABCEEEAA7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCDADADA8A8A8A4242422222228A8A8AD1D1D1F5F5F5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBEBEB7070703333334C4C4C979797F0F0F0FFFFFFFEFEFEFFFFFF9B9B9B 2727272828287A7A7ACECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDEDC8E2E2A7F1F1D2FFFFFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFEEAF7EEBCE1BF57 C6C15DAECF84A4D799A6DCA3B0E1AFC4ECC3DFFCDFF2FFF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFFFAEBFFEBE1FFE1E0FEE0CAF0CAB3E1B1ACDDA3B6D799CAD399E5E4C2FCFCF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3FFF4E4F1D9DC9689DD6866E48B8CEFC3C3FCF4F4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFAFAEDD4D3DB9B9ADA7676E48080F9E5E5FFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7DADADA7474744A4A4A5F5F5FA4A4A4F3F3F3FEFEFEDCDCDC6D6D6D3B3B3B383838A3A3A3 F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2B2B24545452A2A2A676767C1C1C1FFFFFF FFFFFFFEFEFEE0E0E05050502626265C5C5CB0B0B0F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF6EEFEE7CEF2E0B3E7E0A9F3DEB3FEE1C6FAF3E2F9F8ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9EC F9F9ECF9F9ECF9F9ECF9F9ECF9F9EDF7F7E8EDEDC5E2E2A4E1E1A2E9E9B4FBFBD9FFFFEFFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7F7F7E1E1E1ECCFCFF9B3B3E86464E57171F5CCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECEC F8C5C5E97070D85353CC9393D3D9D9F7F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD06BDFD570E5D977E9DC7BEADD7DE5D679DFCF74 E4D379F1E088E8D780D7C770EADB84E9DB84E3D57DE6D880E7D981E5D77FE4D67EE9DB83F2E48C E6D880E3D57CE7D981E9DB83EDDF87EEE087EEE088F0E38AE9DB83F4E68EEFE088DDCF77C7B961 F9EC93F3E98EF7EE91F7EE92F1E78FF0E690F3E994FEF49FFDF39DFAF098F5EC92F3EA8EF3EA8D FBF293F6ED8EF5EC8DF7EE8FEDE487F5EC8FF6ED91F5EB91F0E78CF1E88CF2E98EF1E889FCEA8A F9D27FAC7221F4D983F1E98EF0EA8EF9EA92FDEA93F3E78CE8DF82E7D67AE1D577ECE483EBE282 E9E081E2DA78E7DF7EE9E081E7DF7EEDE584E7DE7FE2D979F6ED8DF0E68AF5EB91F2E88FF4EA91 F5EB94EEE48DF0E68FF4EA94F0E691F3E993F5EA98F1EA96F6F09AF6E591F3DE8BF8E692F2EA90 EDE387FBE38CBA903BF7CD79F9DA81F5EB8BEEE78CF6EC97F2E893E8DD8BEDE290F5EA98ECE090 F0E595F1E697F1E597EEE394F2E999F3ED96F3ED96F0E790FCEE9AECD685E0C676F6DB90F7DD93 F0D88EF3E097F8E69FECDD92F3E696F1E592F1E695E1D98EDED89BF9F4C7B4AD8C1E1903211C0E D2D095F9FAAFDBD689F4E79FEBDF90F4E896E7DE88F5EC98F4EB9ED6CD85766E2AF1E8A5E8DF99 FFF8B3A09A70504C24F4F2AFF2EFA2EFE79FF7EDB1EFE3A6EBE298E5DF86EDE9945C5514DAD3A3 E5E1B0292504C6C18DFBF6BDEBE5A3E9E498EEE791F2EB90EDE68DEEE492F0E59BF0E5A0F4EAA8 EEE4A3EDE29FF2E8A4F6ECA6F7EDA7F0E79FEEE49BF5EBA1F3E99FF3E99EF0ED98F7F7BBD6CEC4 1D1612686A31F4F99AF8F4B5E5D7AEFAEDBEFFE699E6C97B875C20F0CE95B49D6A50450AEFF2A5 F8FABDB8B485342905DFCB9AEED7AAE5DA8DF0EF98ECD882C58833DEAB5CFFEEA5F6F0ABEAE9A3 E9E59AE7DF8CE8E087F0E790ECE495F5E8A2F4EBA4EDE699F2ECA0EDE79BEEE89DF9F3A9F1EAA2 ECE59EEDE6A1F2EBA7EDE6A2DDD694EDE5A6F2EAABE9E29FEAE39DE9E29BF2EAA3F7F1A7F1EAA1 F2EBA3E2DA94E5DE99ECE8A5D8DB98C2CD81F6E698FFBE7ED68D48E7C876EAF99FE9E89BF7E7A2 F6EAA6F1E8A2E4DC9AF0E8ABF3E9AFE5DBA2E9E0A7F6EFB6E6DDA3D1C88CD5CD8FEEE6A5E5DE99 EBE49EEEE6ACF3F0B9E9E49DE5E298D0CB8CEEE5B9C3BB92C4BD89F3EDA6E4DF93E1DA96FFF8C5 FFEEC4D1B083C1A26CFFECACFFF2ABF9E99FF0E79DECE5A3E8E5ABFDFBCCD5D3A9666A52060C01 2319156753454E3A2D827D53ECEDB1FAEEA8B48C46D8AD68FFE6A0EAE89FF0E9A3FFE8A2DEA556 F4CE86FFF6B3F7E599E5D88EFCECB1EAD9AEB28A51FCDA98F6F5B4EBF7C5CAD6AD54573D0C0400 574726DFCCA3FFF5CFFAF2CAF2EFC2DEDDA8D8DB9ECAC281FFFBBBF7D291C09754B79450E8CD87 FFECA7F7EAA5F4EAA9F4ECAEF6F0B5F8F1BAF8F1B8F4EEB0EBE4A6E9E2A3F1EAABF3ECAFF9F3B6 FAF4B8F3EDB1F8F2B7F8F3B8EAE5ACF6F2B9E9E7ABFBF5B8F3EDAEEEE8A9F5F1B4E8E7ABEBE7A8 FAEDACEED087D2A85AFEDE8EF1E8A7DFDF9FEAE6A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBC7C7C75353532B2B2B373737B1B1B1EFEFEFFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE9E9E9616161222222454545979797EFEFEFFFFFFFFBFBFBEFEFEF 8D8D8D2626263C3C3C949494D9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9ECECC7E2E2A2F2F2C4FFFFEDFFFFFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F7FBE9 E2EFBED6D079CAB748AFC875B5E1B1D8F2DCF2FCF3F7FEF7FCFFFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFAFFFAF7FFF7F7FFF7F1FBF1E8F4E1D8E5AFC0C894AEAF96CAC9C2FAF9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFEF5EEE7E47D7ADC4A4AE37F7FEFC4C4FCF4F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAF9F9D1CECEB09292C67272E58181F9E5E5FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFED9D9D99F9F9F393939424242969696DDDDDDFBFBFBFDFDFDDCDCDC6D6D6D3B3B3B393939 A3A3A3F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAA353535292929767676C9C9C9 FFFFFFFFFFFFF3F3F3CECECE4848482B2B2B6C6C6CBEBEBEF6F6F6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFBFFF9F3FCF8ECF9F4E6FBE6DAF9DBCAE7E1B0E2E2A8E2E2A7E2E2A7E2E2A7E2E2A7 E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E3E3A9EDEDB8F6F6CDF8F8DEF9F9EDFEFEF5FFFFFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF7F7F7E2E2E2ECD9D9F9C2C2E84F4FE55353F5C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4D2D2E69393DD6767DF7979E9C0C0F5F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED571E0D674E9DD7BE6D979DED171E3D477 E2D277E1D076E7D67CE7D67EE1D179ECDD86E1D37BE4D67EE7D981EADC84F2E48CEEE088E8DA82 F1E38BEEE088E8DA82E9DB83E9DB83E6D880E3D57DE5D77FECDE86F1E38BF2E48CFAF098C4B65E 978931F7EB91EDE288F1E88BF2EA8EF0E68FF0E690F3E994F5EB96FCF29CFBF198F5EB92F4EB8F F7EE91F9F093F3EA8DF6ED90FDF497ECE388ECE388EFE68BEAE087E9DF86EEE48BF6EC93F5ED8F F6E381F8D27FA86B1BF9EA93F6EF93F2EC91F6E68FFBE891F6EB8FEFE588EADA7EE0D576E5DC7D E0D779E7DE81E5DC7DE7DE7FECE386ECE385EEE586EFE689ECE385E9E083E8DF84F0E68CEFE58C EEE48BF2E890F2E891F6EC95F5EB95F2E893F7ED98F8ED9AEEE793EDE892F8E692FAE491F9E791 F1EA90F1E88CFCE58DBF9541F5CC78F7D77EEEE483F1E98EF2E893EBE18CE6DC89EFE492F6EB99 EBE090E7DC8CEEE393E8DD8EEADF90E9DF90ECE595ECE594F7EC9BFDEE9BFAE792D5BF6AF3DD88 F5DF8BF0DB8AEAD98AEEE092F4E99BF4EA9EE6DD90F0E89DDDD792F6F1B9DFDBB0282215060100 726F42FEFEC6EAE89BEAE497F1E39CEDE192F3E893ECE289F3E995F6EC9FE6DC957F7735EFE6A4 EAE19CFDF5B0CDC79E302D07E4E4A3F9F6A9EFE89FF7EDB2F3E7ABF5EBA1ECE68EF7F29F7B7438 969060FFFFCD6A6736807D46FDF8BEFAF5B3EDEA9DECE58FF2EB91EFE890F3E799F7EBA3F2E6A2 EDE2A0F1E6A4E1D694EDE39FF5EBA6F0E6A0F0E69FECE29AF1E79EF5ECA1F9F0A5F7F3A4F8F4B8 574F471A1500DDDF9BFEFFABD5D198CEC19BFFECBAF4DF8CEFD284BB9763C9AB75DED9A12D2404 BDC276FEFFC3E2E2AB2C2200C1AF79FAE6B1E7DD8DE8E98CFAEB8EDCA14DC39244FFE9A0F2EAA4 E4E09AE8E699E6DF8CE4DA83FBF19BF1E598EEE49EF8EFA8F1EA9FECE69CE1DB91E2DC92F3ECA4 F1EAA2F0E9A1F2EBA5F5EEA8F1EAA4E6DF9AEFE7A6EFE7A6E6DE9CDBD48ED6CF87D8D288F2ECA2 ECE69DF5EEA7EEE7A3F1E9A7F3EFACDCE09CC9CE83FFFDB0EE9B5CC47F39FFE995CDDC83DCD88E FFF2B1F6EAA6EFE69FE9E29BEEE7A1F8F1AD766E2E7F7739FFF8BAF6EDB3E9E0A5EFE6ABF3EBAD EAE2A3EAE2A3E2DBA2FAF4BAF9F6B1FDF9B4D1CB8EE9E2B1CFC79999925CE5E09CFBF7AEF7F2B0 FBF1B9FDE5B7FCE0B0EACE99C8AF71DEC580FEF5ABF8E99EFBF1AAFEF6B8EEEAB3FFFED3EDF1C6 A3AD84201907120000200C003F3A1DABA681FFF4C4BB9560E6C285F7E19CF4F6A8FFFDB3FFECA3 DEAE5DF5D88EFFF9B0F3EC9AFAF9ABFFF7B7EDE3B3A68246F4D68FF3F6B39197653539104D4B1D AEA675EFE4B0EFE6B5F5EEC0EDEABBE5E1B2E3DBA5E0D296C0A868E3BB7CB38B4ACFAC6AFEE5A0 FFEEA9FAE9A3FCF0ACFBF2B1FAF2B4F8F2B7F9EFBAFBF3BBFFFEC3F1EAAEE0DA9EEDE7ABF7F1B5 FFF9BDF9F3B7F4EEB1FEF8BBF4EEB0EFEAAEFEF9BEF2F0B5F9F3B6FAF3B4F9F4B4F2EEB0F3F1B6 E8E2A8F5E9AAFEE49FC69C4FE8BE6FE4D797D3D190D8D18BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B2B2B23434342727274D4E4DC4C4C4F9F9F9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDDDDDD5656562626265E5E5EB0B1B0F3F3F3FFFFFFF7F7F7 DEDEDE7F7F7F262626545454B3B3B3E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF4F4DFEBEBC0EEEEBEF4F5CEFDFDF6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFE F2FCF1CEF3CCD2D88FDCBE59C6BE59C9CF84E8E6BFFEF8ECFEFEFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFFFEFFFFFAFAF2E6E6B1CDD29CB9C5A9C1D3C1DAEFD9 EAFBE9F5FFF5FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEDEDE77575DA4647DF8B8BECD5D5FCF7F7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFBE0DCDCC6A3A3CF6B6CE36B6CF9E1E1FFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFCF0F0F0AAAAAA5F5F5F3E3E3E6D6D6DC4C4C4FAFAFAFFFFFFFFFFFFDFDFDF6E6E6E353535 2D2D2D9F9F9FF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFCFCFC9E9E9E2F2F2F383838929292 D7D7D7FFFFFFFEFEFEE9E9E9BCBCBC3F3F3F353535878787D4D4D4F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFCFBFEF2F0FBE9E0EDE9C6EAE9BEE9E9BDE9E9BDE9E9BD E9E9BDE9E9BDE9E9BDE9E9BDE9E9BDE9E9BDE9E9BDEBEBC0F4F4D2FDFDE9FFFFF6FFFFFEFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF4F4F4D5D5D5E3DBDBF8D1D1E84F4FE54444F5B2B2FFFFFFFFFEFEFFFFFFFFFFFF FFFFFFF2BFBFE06D6DD96565E19A9AF3D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D774DED472E3D776E5D878E5D878 E8D97CE6D67BE4D379E9D87EE5D47BDDCD76ECDD85E1D37BE9DB83E9DB83E8DA82F0E28AEDDF87 EBDD85F3E58DF2E48CECDE86ECDE86EDDF87EADC84E7D981E7D981ECDE86F1E38BF4E68EEFE189 E4D67EE6D981F0E48AEFE48AF3EA8EF5EC91F2E891F0E690F3E994F0E691FAF09AFCF299F4EB91 F4EC8FFBF295F2E98CF0E78AF3EA8DF9F094EDE48AF2E88EEDE48BF1E78FF7ED96F2E892ECE28C E5DD80EFDD7CFDC572E8AE5EFDD985EEE98DF2EC92F9EA92FAE790F8ED91F5EF91F6E689F3E78C F0E88CE6DD82EFE68CEDE488E7DE82F6EC92EFE68AE5DC81EBE288F3E98EE9E085E8DF84EEE58B EFE58CEAE087ECE28BF3E992FAF099F4EA94EFE590F3E994F0E593E5DE8AECE791F7E692FBE592 F7E58FF0E98FF6EE92F9E28AB58B36E9BD6AF8D87EEAE07FF1EA8DF1E791EAE08BE7DC89E8DD8A E7DC8AEADF8EE9DE8EF1E696EBE091EEE393E1D78AEAE199F1E99FF7EB9DE6D783F6E38BE3CF73 E9D578F9E78CFCED95EDE18EE5DC8CEBE397E0D993F3EDA7E1DB98F4F3B5B5B37E2C2A12070200 0E0A00C3BE8FE3DE9EE7E695EEE597EADC95EBDE8FECE28DEDE38AEEE48FF3EA9CEFE59E7C7331 E8DF9CF0E7A2F7EFA9EAE4B82D2800C4C080EEE89CF9F2ABEDE3A4F6EAABECE397E2DB84F3EC9A BFB876574E1BF8F4BDCCCB94353205E3DEA3F5F1AEEFECA0E7E08DEFE891EFE693F4E89CFAEDA7 F7EAA9F2E8A5EFE4A1ECE29DF4EAA5F7EDA7F7EDA5FAF0A9F5EBA3F4EBA1F6EDA2F7EEA3FBF5AB C1BC85050000827E59FAFDB9F1F7A55451227A704EFFF4BEECDE89FFF6AEA68A5F8A7144FCF1BB 393517626827FFFFC5DFE1A42B2500AC9F64FFF9B9EEE796E8E98CF7EA8AEABD6BB28133FFE29A F6E7A1DFDB94E4E295E3DE8BE3D883F2E795F4E89BF6ECA5EEE6A0E9E399EDE69FEBE59CEBE49C F2EBA3ECE59DEDE69EEEE79FEBE49DE8E199DFD891E8E19BE9E29DEFE8A1E1DA91DCD68BDCD68B EAE49AE7DF98F5EEA9F3EBA9F4ECACEFEBABEDEEABDDDF95FDF0A5C87C3CD5964DFEFCABD1DD87 E1DE94F9EAA7F2E7A3F0E8A0EBE59AF7F1A3F6F0A4D2CC83DED894F9F3B4EDE4A7F2E9B0FCF3B8 F2E9AFEDE4AAEBE1A7EFE9ACE4DE9FF1EBACEBE4A8F3EFB5F1EDB5E4DDA5D0C990E7E1A5F2ECAD F0EBAAF2EAACF9E9B4EBD6A4FFF3B9D6BE7FB49A55EFDD95FFEEA6FBEBA5FAEEADEFE7ABEEEBB4 EDF0B8F0F7BCF1EEBC8071502A1A0F20180B5F5841B3A17E9B794DF2D8A4FFF5B5F6FAB2FAFFBF F2E4ACCFA666F4DBA0FAF3BDF4F4B1FAFABBFAF9C7EBE4C2A5855283673B444215100B00A29B6B FFFFCDFFFDC3FAF8B8EAEBAEEDF1B5F5F6BEEDE6AEFCEFB7FFF0B5E8C0838D6929C1A05EF2D491 FAE49EF7E59FFCF1ABF3EAA6F6EEADF6EEB1F3ECB1F3E9B3F2EAB3FAF3B8F2EBB3E2DCA1E6E0A5 E1DB9FDFD99CF0EAACF8F2B4F8F2B3F3EEAEF5F0B0F7F2B7F8F3B9FEF7BAFFF7B8FEF7B9FAF4BA F9F7BEEFE8B0F5E6AAFFFBB9DEB56CC79D52F0E19EE8E19FE3DB96FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9DDDEDD9696962121213030306C6D6CD0D0D0FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0C9C9C94A4A4A323232818281D1D2D1F8F8F8FFFFFF F2F2F2C9C9C96F6F6F2525256C6C6CD2D2D2F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBF7F7E6EBEABEE8E6B1 FAF8EBFFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFEFCEAF8EBB8E3B9CADBA3E8D38DE0BB54DEBA52EBD188F8EAC7FEFBF4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF9F9ECE8E6B4DCE5AED4ECC6C1E9C3 B6E4B5CAF0CAE5FCE5F9FEF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEDEDE77374D84A4BD99B9BE6E7E7 FBFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF7EEEDEAB8B8DE6465E05253F9DCDCFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF8F8F8E0E0E07E7E7E2727274E4E4E939393D1D1D1EFEFEFEDEDEDEBEBEBCCCCCC656565 2A2A2A1C1C1C8A8A8AE3E3E3F3F3F3F6F6F6FEFEFEFFFFFFFAFAFAEAEAEA8E8E8E2D2D2D4D4D4D B2B2B2E5E5E5FFFFFFFEFEFEDEDEDEA7A7A7353535404040A4A4A4EDEDEDFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFEFAF9FBFAF3FAFAF1FAFAF1FAFAF1 FAFAF1FAFAF1FAFAF1FAFAF1FAFAF1FAFAF1FAFAF1FAFAF1FBFBF1FDFDF6FFFFFBFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF1F1F1CBCBCBDCDCDCF6E0E0E85A5AE54343F5A4A4FFF2F2FFFCFCFFFFFF FFFEFEFEFEFEF0AAAADF5050DA6C6CE4BABAF5E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D775E7DD7BE8DB7BE5D878 E4D777F0E184ECDC7FEAD97DEEDD83E5D47AD8C96FEADB83E7D981EDDF87EADC84E7D981E7D981 E8DA82F1E38BF2E48CEDDF87EDDF87ECDE86ECDE86EEE088ECDE86EBDD85EBDD85EDDF88F1E38B EFE189F2E48CF4E78FF3E78DEFE489F4EB8EF6ED92F1E791EFE58FEFE590F9EF9AFFF59FFFF59C F9EF95FAF195FFF79AFBF298FAF296F7ED94F7ED93F1E78EFEF49CF6EC94F6EC96FCF29CF2E893 EBE18CE8E083E1D170FBCE7CD99E4EFEE994E7E085F6F297F8EA92F6E48EF3E88DF1EB8DF6E78C F8ED93F6EC93ECE28AF8EE96F5EB92EEE48BF3E991E8DE85E0D67DE9DE87F5EB92F7ED94EEE58A F0E68CF2E88FEDE38AEDE38CF5EB94F4EA93F2E893F0E691F6EC96F6EB99ECE591ECE891F5E490 FEE795FBE993F5EF95FCF498FEE78FB88E39DEB35FFFE58BF2E887F0E88CEEE48DEFE590EFE590 EAE08BE7DC8BEFE492F0E593E0D586E7DC8CF2E797F1E599F8EDABF2E7A4F4E79BF4E590FAEA8D DFCF6DE2D170F6E889F5EA92E7E08FE3DE93E0DC99E6E3A5E5E2A7E0DEA589874F1716070E0C00 08040049441FE2DCA9EBE4A0E2DE8BEFE698F0E39CF3E697EEE48FF6EC93F2E893F3E99CF9EFA8 7B7230E1D895F5ECA7F2EAA4FFFFD0403B0D9D9959F8F2A9F4ECA5F2E8A6F8EAA7E9DE93E9E18E F6EF9FF9F1AE423B07CECA8EF4F2B73938039B975BF5F1B1F2EEA5F3EC9AF8F09DF4EB9AF5E99F F7EAA8F7EAAAF6ECA8EDE39EF6ECA5F6ECA5F3E9A2F6ECA5F6ECA4F3E9A1F2E89EF5ECA0F2E99F F9F1AEC4BE89030000797749FFFFBCEDF3AB4D4A25585331FFFBC0EEE692DACF8B301C0D271507 CAC293949559232609ECEFB4E8EBA8322D00908650FFFEB5F0EA9EECEE92F0E584F2CC79B38337 EBC880F8E39CDDD78CDCDC8ED9D583E1D686E5D889EEE197F4EDA5EAE59EEFE8A2EBE49EEDE6A0 F0E9A3F2EBA3EEE79FF4EEA4F7F1A8F2ECA2F4EEA3F0EAA1F5EFA5E6E096E3DD93CFC97DE4DE92 FAF4A8FFF9AFF1EAA2EFE7A5E6DE9FF0E8AAF8F2B4DADC98F5F1A8F1D28AC98542FAC379FFF4A4 E9F4A0BEBD73E2D491F3E7A5ECE49CE8E498F4F09EFBF5A5F9F3A7FDF7AFF0E9A6F4EFB3F2E8AD FBF2B7F2E8AEF2E9AFF6EDB2DAD590EAE6A0F6EFB5FBF3C0C2BC85A19C5CEAE5A4E8E2A6EBE3B0 FFFFCEF0EAACF3EEA8FFFABFFFF8C1F1E0A5FFF1B2ECD795B79A55E7CD87FFF3ADE6D690F6ECA9 EFEAABEDEDABDFE59CEEECB0F4E9BAEAE1BC837B601F17001605002D110A785E33AFA573C8CC99 B9BF96DBD2B3E3C097E2CCABDDD9BAC7C99D93976E6D6D512F271D1B01003213007C7655D1C595 F8EAB4E4D69AFBF9B4F7F8B0F5F9AEE2E9A3E9EAA9FDF2B6F8DDA1C193569B692AC8A968F9E6A3 FFEFAAFDEDA8FFF6B0F6ECA7EBE3A0F1E9A9F2EAADF0E6AEF2E8B3F0E6B1EEE7AFFBF4BDFDF6BE EFE9AFD0CA8EC8C285EFE9AAFEF9BAF1ECAAF6F1AEF4EFACE8E4A6F2EDB3FAF1B5F9EFB1EBE4A5 F5EFB4F9F7BEFFFCC5FBEFB6FFF2B5F5D38FD8B169FAE5A2FEF7B3FAEEAAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECB1B2B16263621414144F4F4FA6A7A6E5E5E5FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFA9A9A9393939383838989898E6E6E6FBFBFB FEFEFEEAEAEAA0A0A04F4F4F1F1F1F7D7D7DE7E7E7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF4F5E7C6 F2DCACFDE8CFFFF4EAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFDF3FFF3DDF3DDB4CDB4CED8BFF2E8C9F6D295EDBF65E8BD59EED388FEFBE3FFFFFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5F6E2EBECC6EDEDC9F0F5D9ECFCE6 CAF0CBA8DBA7B6D7B6D3DFD3F5F8F5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEEEEE87475D34849CA9393 D6DEDEF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCECE9E9D9B0B0D65B5CE04A4BF8DBDB FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF7F7F7DADADA6D6D6D0A0A0A2222224949496363636E6E6E6C6C6C6B6B6B5D5D5D 2D2D2D1111110A0A0A3C3C3C6F6F6F8D8D8DB9B9B9F3F3F3FFFFFFF4F4F4CCCCCC757575272727 5C5C5CC7C7C7EFEFEFFFFFFFFEFEFECCCCCC868686252525464646B9B9B9FFFFFFFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E6E6E6EEF0F0F9EAEAE87373E65656F69F9FFFE2E2FFFAFA FFFFFFFEF7F7F0D6D6E58585DE4242E58181F1DCDCFAF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD574E1D776E4D676 E1D474DED171F1E285F1E084ECDA7FE9D87BE5D478DECF74E4D57DECDE86E9DB83E8DA82EBDD85 EDDF87ECDE86E6D880EDDF87F5E78FEDDF87E6D87FE8DA81EADC83E9DB82E8DA81E9DB82F2E48B EADC83F6E88FE8DA81DFD178EDE188EFE488F4EB8FF8F094F5EB94F3E993F4EA95FBF19CFAF09A F7ED94F3EA90F5EC8FF9F093FEF59BF7ED94F4EA94F9EF98F2E891FBF19CF3E994F3E896FCF19F F6EB99F2E795F5ED92ECDC7CF7C876C38738FDF39EE9E489EDEA90F5E691FBE993F6ED93F3EC8F F9EB91F5E892F4EA94EEE48EFAF09BF7ED96F0E68FEFE590E8DE88EFE58FF2E893F1E792FDF39D EEE48AEAE187EFE58CF0E68DEFE58EF5EB94EFE58EF3E994F2E893F6EC97FAEF9DF4ED9AEAE690 F1E08CFDE794F7E590E9E288EDE589FFEB94C99F4BDBAE5AFFE990F5EB8AF2EB8FF2E891F6EC95 F6EC96F0E691F5EB96EBE08EF6EC9AD0C572E7DC8CECE191EBDF91FAEFADF4E9A6F1E498FFF29C F6E788E7D775E9DA78F6EA8FE5DC8DE6E09EF3F1B8E9E8B3D9D8A2C1C18E49491D000000212202 44441D060300A9A578E9E3A9EAE29BE6DD8AF8EC9EEDDF98F0E394E6DB86F2E88FEBE18DEAE193 FFF8B1807735D4CB89ECE39DECE49EFFFEC868643676713EF7F0ACF2E9A2F0E69FFFF8B0F2E69A F4EB9AF2EB9EFFF7B2706A2A858243FFFFC8A3A1654E491EEBE7A6EEEAA0F9F2A2FCF4A3F6ED9F F6EAA2F7E9AAF5E8A7F6ECA6F8EEA7F1E7A0EEE49CF1E79FF2E8A0F3E9A1EEE49CEAE098F1E7A0 F3E9A2FCF4B8E1D9A8645F3A383800E7EBA1F8FDC0525131292613EDEDB0FFFFB4847D44271803 0C0100766F47D3D29F111201CCCE93FBFFBB524D2A6C663AFDF7ABE5E19BE3E38DF5EB8FFCD888 C4944CD5AC65FBE199E4DC8EE5E796D8D886E9DE8FF7E69CEFE298F1EBA3EEEAA5F2EBA7E5DE9A EBE4A0F1EAA5EDE69EE5DE95EDE79DF2ECA1EAE498EEE89AEFE99CDCD68ACEC87CDCD689C6C072 D7D183E6E093EDE79DEEE79FF9F1AFECE4A6EBE2A6ECE6AADDDE9BF3E7A2E4BF79C48943CDA158 D6C777C9D080929048E4DA98F9F0ADE4E097ECEA9FEBE89AF2F0A3F0ECA3F3EFA7EEE9A6F8F3B1 F7F2B2F8F3B3EFEAA9EEEAA7F3EEAAF3F0A3E5E399E6E0AAC2BB8D403A05C5C27DF8F5ADF3EFB2 FCF5C8A9A275716D32EDEBA0F7F7B7EAE7ACFCF3B5EEDB9DFDE2A3E0C483937431E2C883ECD891 ECDE97F2E9A1F9F5AEE1E09EE0DBA0F0E9B2F9F2BBFFFEC7F7EFB675662D3822082D1908080000 0000000004022016003514002A14001311000D12000D1104201E095F534A9B775CC7A37CFFFDD4 FEF5BFFDFAB9F0E19BF4E698FFF5A5FFFBACF9F2A8FFFEB7EBDA97BC9B5BB58645E7B976FFFAB7 EBDE9AEFE39DF0E6A2F3E9A4FDFDBAF9F2AFFBF6B6F7F1B3F0EAB2F3ECB6F7F0BAF9F2BCF2EBB5 EEE8B0D5CF95BAB478C5BE81E1DC9CE9E4A1ECE7A3F3EFA8EBE7A0E9E4A5EFEAB0F2E9ADF1E7A9 D4CA8CE2DB9FFAF7C0F6EFBBF9EEB9FFEDB5FAE5A6D9B370F4DA94FFF9B4FFF1AEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE8283823233321F1F1F777777D9D9D9F7F7F7 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC8788872E2E2E414141A9A9A9F4F4F4 FDFDFDFEFEFEE4E5E48383833C3C3C212121898889F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7 FEECD9FCE0BDF9DEB4FBECD2FFFDF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFAFFFFFEFFFEFDFFFAFA FDF8FDF4F9F9E0F8E3CDEECEC5CFC6DEE0DDFAF6F1FFEDDAF6D49DE8BE5DE8C460F7E8AEFCF8DC FFFFFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFEF8F0F1EAC7E8E1ACF5F3DDFEFDF9 FAFEFADDF3DCB9E0B8B4CEB4C4CEC4F2F4F2FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCE8E8E87171D44849 CC9494D8DFDFF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE5E6E5CEAAAAD1595BE04C4D F8DCDCFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF9F9F9E3E3E38888882D2D2D2424242B2B2B2E2E2E2F2F2F2F2F2F2F2F2F 2A2A2A1717170A0A0A0505051919193939396060609F9F9FEFEFEFFFFFFFEFEFEFB0B0B0606060 2828286C6C6CD8D8D8F7F7F7FFFFFFFDFDFDBBBBBB6868681D1D1D4D4D4DC4C4C4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEFEFEFF5F6F6FAEDEDE78C8CE36868F09393FCCDCD FEF7F7F7F7F7EDE1E1E1A9A9DC6C6CDD4A4AED9A9AFCF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4DA7ADED474 E2D576E6D97AE8DB7CF0E183F4E486EDDC7FE5D577E4D476E2D378E1D27AEADC84E4D67EE5D77F F0E28AF0E28AEFE189F5E78FEEE088E9DB83E9DB83EBDD85EBDD83E9DC81E9DC81E9DB81ECDF84 F7E98FEBDE84EFE287EADD82F0E388ECE086F0E589F4EB8FFCF398FDF49DFAF09AF7ED98FEF49F FDF39DF7ED94F5EB92F8EF93F9F093FEF49BF9EF98F9EF98FBF19AF7ED98FBF19CFAEF9AFAEF9C FFF7A5F9F19FF2E795F0E88EFEF192E9B462CA9244FFE996E4DF84E5E188FAEC97FCEC96EDE48B EAE589EADD84EEE18BF3E995F2E893F8EE99F6EC97F1E792ECE28DE6DC87F8EE99F2E893EAE08B F1E790EEE48BEBE187F1E78EF6EC93F5EB94F6EC95F2E891F8EE98F3E994F2E893F7EC9AF4ED99 F0EC96F1E08CFDE895F3E28DE5DE84E8DF84FFEE96DDB35EDCAF5CFFED93FAF090F1EA8DF4EA92 F5EB93EEE48EE8DE89F0E691F3E894FBF6A3E9DD8BF5EA99F0E594EBE091EDE39CF4E9A4F0E495 F5E78EEFDF81F7E786D4C56ACCBF6ED1C882D8D29EBEB99395916B4646250608000D0E00535435 92926D6D6D4B292702E1DBA6E1DB9BE7DE92EBDF8DF6E99CF0E29BEFE394E0D580E6DC83E5DB87 E5DB8EFEF7B07E7533BEB573ECE39EE7E098F3EDB29C9664645E2DEDE3A4F3EAA4F4EB9FF4E99D EBDF92EDE194F0E79EFBF3ABC4BE774C4A0BEEEDB0E5E3A647420FD5D192EBE7A1F6EFA2F3EA9B F5EB9EF6E9A1F3E5A6EFE2A2F3EAA1FDF5ADECE299ECE299F5EBA2F2E9A0F6ECA4F1E79FE7DD95 EFE59DF3EAA3F1E6B1FFFDD2C2BD87171500DADD96FFFFD08C8C6C171805CDD094FDFFB65C5B27 B3AB9E41392A3F3A27E0DEB2191400BFBD89FFFFC17B7454635E32FDF9B0E9E4A5EBEA9CF2E892 FFE79CCCA059B88944FFE69EECE091EEF19EE0E292F0E49AFFF1ABF3E39CEAEA9EE9E8A1E7DF9F E5DF9AF1EAA6F3ECA7ECE59FF2EBA2F8F2A8F6F0A4EFE99BF6F0A2F7F1A3B0AA5DD1CB7EF1EB9D E7E192E3DE8FE8E293EAE498ECE59DF4EDA9EFE7A8F2E9ADE7E1A4D4D390FEF4AFC39855C3914A E2C578BFB566C7CA7DE8E6A1E2D896ECE19DECE79EE2DF95E8E39FEEE9A6F3EEACE7E2A1E7E2A1 ECE7A6ECE7A5ECE8A1E0DD91E1DE91E8E597DEDD8AC5C47AC2BD8A5F592E928D5AE5E39DEBEAA0 E5E2A68C865C0D0700868151F3F4AAE5EAA7E1E3A5E6E1A3F3E5A8F4DEA2FFF3B6D4B879BBA05E F3DC97FEEDA4F4E599F0E69EEAE2A1CAC487E6E4A5EDE9AAF6EDACFCF0AECDBC7FD9C6908D7F59 130B005D5D53C8C9B1A4986C7A58309D8758A1A075ABAE76CFD29BE9E7BBFDF3D4E6C090C69D5F FDEFADDCD893DFD98FEDE092F3DD8AF9E08CF4D889F9E096EFDB95AA914E9C7E3AE3BF79EAD18A C6B974D7D38FE4E09CF0EAA6E1DB97D6D08DDCD796E8E2A4E8E2A7EAE3ABE5DEA8F7F0BAF9F2BC F1EAB4EFE8B0C8C288A8A266C4BF80DCD795DED995F1ECA6F3EFA8EBE79FF1EDAEF2ECB1EFE6A7 F0E5A4DBD290E0D99DF5F0B8E7E2AEF3E9B6FFF4BEFDF0B5D4B272E6C57FFFF1ABFFF2AFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D06061601A1B1A4141419A9A9AF1F1F1 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDBDBD6C6D6C2C2D2C535353BDBDBD FFFFFFFFFFFFFEFEFEE3E4E37C7D7C3F3F3F303030949494F4F4F4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFCFFF7F0FAEED7EBE0ABF2EBBEFDFCE2FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF2FEFDE8FEFDF6FFF5F4 FDE9EAF5E4F1E1E4F0C8E3CEBFE4BBE0E7DFF2F2F2FEFCFCFFFAF7FBEACFF0D492E8C463E8C664 F3E2A3FEFDE6FFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF7EFFFE9D1F9E1BCF5E0B7FCF5E7 FFFFFEFEFFFFF4FBF4DCF0DDBFDEBFB9D8B9EFF7EFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FCD9D9E76868 DB4E4FE1A9AAEEF5F5FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF4EDEDE5B6B6DC5F60 DF4B4CF8DADBFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3F3F3BEBEBE8686867D7D7D7E7E7E7D7D7D7C7C7C7D7D7D 7C7C7C6E6E6E4040401D1D1D0F0F0F474747818181A3A3A3C9C9C9F6F6F6FFFFFFECECEC9C9C9C 575757343434828282E9E9E9FEFEFEFFFFFFFDFDFDB0B0B05757572222225A5A5ACACACAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4D7D7D7E5E6E6F8EDEDEA9F9FDF7070E47D7D F0B1B1F8EFEFE4E4E4D1C0C0D88A8ADA6A6ADE6767EFB1B1FEF7F7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D97A E8DF7FEEE183EBDE80E6D97BF0E182F2E283EFDF80EBDB7CEBDB7CEDDE82EFE088E5D77FE3D57D EADC84EDDF87EEE088F3E58DF3E58DF3E58DF1E38BF0E28AEDDF86E8DB7FEADD81EEE185E8DB7F E5D87CECDF83E9DC80E6D97DE8DB7FF0E387F6EA8EF0E589EDE488F1E88DF8EE97F9EF99F8EE99 F8EE99FDF39DFBF198F8EE95FAF194F8EF92F9F096FBF198F8EE98F6EC95F9EF98FDF39FFEF6A1 F7EC9AF6EB99FAF09EFBF09EF5EE94FEF394E9B665C58F42FFEF9EE0DB82EDE990F9ED97F7E792 E9E087E6E186EBDF85E3D780ECE28DF0E691EAE08BECE28DEFE590F3E994E5DB86F5EB96E9DF8A EEE48FF7ED97EAE087E9DF85E7DD84E9DF86F0E68EF7ED96F1E790F6EC96F5EB96FAF09BFCF19F F5EE9BF9F49EF0DF8AFFE996F2E08AEEE88EF0E78BFBE48CE6BD68D7A855FFE68DFCF291EEE789 F3E990F4EA91ECE28BEBE18AF4EA95F1E792F1E792F0E593EDE290EEE391F5EA99E8DF94F1E79C F2E694F2E48CF6E68AF3E287E1CF7B63541D170A04271D0A20180708030000000036360FA2A377 F4F4CDBAB893232200615E36F9F4B9E3DC96EBE193EDE18FF5E89BF0E29BE8DB8CEADF8AEAE086 E2D883DED487FBF1AA918846B0A765FCF3AEE7DF98F3EDADBAB57A585018ECE2A5F0E5A0E3D889 E7DB8AEFE294F5E9A0F7EBA4F7EEA4FFFCB0474502CFCD90FFFFC96C6738918B58FEF9B7F8F0A6 F6EDA0F8EFA2F9EDA5FBEDACF5E7A5F0E79DF9F0A6F3EA9FF4EBA0F7EEA3F4EBA1F6ECA4F6ECA4 F0E69EF3E9A1F6ECA6F4E9B6FBF3CAD4CE98131103B8B876FDFECEB9B8970001009CA168FFFFC9 5F6034A4A0935953472C250D7C7449180A01C7BC8BF3EBACA9A07C4F4B19F9F8B4F3EDB5EDEAA6 F8EFA1FFEAA0D6A864BD8643FFDB93FBEB9BE0E490DFE596FAECA6FDEAA9EDDB97EAEEA1ECEFA5 E6DF9BE7E09CF7F0ADF6EFA9E8E199EBE59BECE69CEAE499EAE498F1EB9DE8E295A6A052F1EB9C EFE99BDFDA88DDD887F0EA9CF3EDA2F3EDA4F3ECA6EEE6A6EEE6A8CFC98BDAD894FFE6A4A37130 CAA158F7E395F0EA9CE4E49ACBCA86C2BC7CE8DD9BE3E095DFDE97EEE8AEEEE7AFF4EEB3E5DFA3 D2CC90DFDA99D9D58FDEDA90E4E190DDDB85E5E48BE7E893D7D78FC9C592454016E1DDACE2E19F EDEDAAF4F2B9544F35373211F3F0BBFCFCB8E4E9A6F0F4B4E9E8AAFFFAC1FCEBB4FFF8C0FFF5BC D4BA7E947D37DAC680FFFEB4EBDB8EF8EAA4F4F0ABE1E2A1E9E7A8FFF6BAFDF0B6A28B4F32220E 362D11AEAC8DF6F5E1F9F6CDF7E8A2D2AC5CF7DC94EDE9A4E0E090E9E99BFDF7B2FAE7AEEBBE74 B68A30F5E489E3E594E4E798ECDE8DFDE491FEDD8BFFE295DDB26BA37F3BB59855FAE7A1FCE99F EADB91EBE6A5D2D190CCCB8AFBF7B6F7F3B1EBE6A4E5E0A0E5DFA3E9E3A8F7F0B9E6DFAAEBE4AF EDE6AFF4EDB6FBF5BCE9E3A7D6D092E3DE9DE8E3A1E9E4A0F6F2ACF4F0A7EEEAA2F6F2B1F6F1B2 F9F0ACFBEFAAF9EFABF4EDADF3EEB3F9F6C0FCF5C2FFF6C2FFF2BBEDCE91CFA85FFEE19AFFEFAC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5B4B5B44646461717176C6C6CBBBBBB FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEAEAE535453303130686868 CDCDCDFFFFFFFFFFFFFEFEFEE1E1E1717271424242444444A2A2A2F6F6F6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9FAEFE9EABEECECB9F4F4C8FCFCEBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF1E4F8E3CDF8E3DB F8DAD9F6CDCEEDC8D6D9C5D5C3BBADC3C19FF5ECE5FFF6F6FFF7F7FFFDFFFEFAF2F8ECCCEBD189 DEB94AE8CC6FF6E8AFFDF9EBFFFFFFFFFFFFFFFFFFFFFDFCFFF7EFFFECD9FFDDBAFFDFC0FFE8D3 FFF8F1FFFEFEFFFFFFFFFFFFF5FCF5C7EBC7B1E3B0E6F9E6F8FFF8FEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6EDEDEDF6F6F6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FCCFCF E66263DC4E4FE5ADAEF3F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF6EEEEE9B8B8 DE6061DF494AF8D1D2FFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBD4D4D4D1D1D1D2D2D2D2D2D2D2D2D2 D2D2D2D0D0D0B8B8B86666663131312020207D7D7DCFCFCFE7E7E7F2F2F2FDFDFDFEFEFEE7E7E7 8383834B4B4B404040959595F3F3F3FFFFFFFFFFFFFDFDFDA5A5A54747472A2A2A6A6A6AD2D2D2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3D4D4D4E2E2E2F8EFEFF1B4B4E37E7E DD6D6DE49696EEE3E3DDDDDDCCB7B7D76F6FDE6C6CE68E8EF4CDCDFEF9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E2D67BE3D87CEEE183E8DB7DD9CC6EEFDF80EEDE7FE8D879E3D373E7D777ECDD7FEFE088E6D880 E6D880E9DB83E9DB83EADC84EADC84E9DB83EEE088E9DB83EADC84ECDE85E7DA7EE7DA7EE8DB7F E3D67AE3D67AE9DC80E9DC80E7DA7EE6D97DEBDE82F0E488ECE185ECE387EFE68BF5EB94FAF09A FAF09BF5EB96F8EE98F7ED94F9EF96F9F093F1E88BF7EE93F4EB90F5EB92F7ED94F8EE95F8EE97 FBF29BF2E893EEE48EEFE58FEDE48EEDE78CFDF091F4C170DAA356FFF5A2F0ED94EDEB93ECE08C EDDF89EFE98FEBE68BF3E88FEADE87F1E792F2E893E8DE89EAE08BF2E893ECE28DE9DF8AF3E994 E8DE89EAE08BF8EE97E8DE84ECE288EAE087E8DE85F0E68EF8EE97F1E790F0E690F5EB96FFF6A1 FBF19EEEE793FAF69FF4E28EFEE996F5E48EEBE48AEAE186F6DF87F1C772D2A450FEDE85F8EE8D F4ED90F6EC93F4EA91ECE289E7DD84EDE38CECE28CECE28DEBE18CECE18FEFE492F4E998F1E899 F4EB9BF5EA96F8E991F7E68DEEDC86EEDC8BE0CD87BDAE767C714D3B2E16706842B4B276ECEBB3 FBF9C9E7E4BC8480581D1A00AAA76BF0E8A6EEE59AEBE191F8EB9AEFE094ECDE98E8DB8CECE18C E5DB82E6DC88E3DA8CF3E9A2B0A7659A914FFCF3AEE9E299F3EEA8DDD8994F4711D6CC92FAEEAA DDD17FF8EC95F1E596F7E9A3F1E5A0ECE396FFFFAE7673309B9A5EFEFEC7AAA475423C0EF4EFAF F2EAA0F8EFA2F6EC9FF6EAA1F4E7A2EDE19BEAE194EFE699FAF1A4F7EEA1F3EA9FF5ECA1F0E79B EEE49CF4EAA2F3E9A1F3E9A3F6EDBAF2EAC3DAD7A617140697965CFAFBCBF7F7CF444421414222 F6FACA838467110F020B04000900000500008A7348FFF4C0FEF6B9D2C6956B672FFCFCBEF8F6BD E1D99AE5DA94E9D993E6B977C78A48F1C97FF2E08EDADF8BE1E798FCEDABFDE6A9F6E4A3F0F4A7 EBEEA2EDE6A0E9E29CEEE7A1F0E9A3EFE8A0E9E19AE4DE94E5DF95E8E298ECE69AD4CE84B6B064 FFFAAEF1EB9DDED88AE8E294FAF5A6F4EEA2F5EEA5F6EFA8EEE7A3EEE5A5D7D291E3E09DFCDA9D A66A2FE9CB81EFE596EBE99CB3AE68D5D493F2EDADE0D693DCDC90E6E7A1ECE7AEE9E4ADEBE6AE DED9A0D0CC8FDAD697D4D18DE0DE93EEED9CE9E992E4E48BEAEA9AFCFAB99D9A68444011ECE9B8 F2F0B8FDFBC4CECA98171102B4AF89FFFFD5EDECB1EEF0B0EEF0B0EEEFB3D7D29B746D3DF5EDBC FFF7C496834E2D1A00A8924CDAC17AFFF8ABF2E393F6F3A7FDFFC0FFFFCCE4D1A7B1926E2F1103 62501DDEDBA4FFFFD3EDECB7F7EFB3EED88EC89B47F1D086EDE19BE6E18FF0EB9BF1E6A0FDE5AB DEAB5FA77318F8DF83EFEF9CEDF0A0ECDA8AFFEE9DFFE697DCA75B92611CD2AD6BEFD795FCF5B0 DEDA91FCFDB5F3F5B4E9E9ACE0DFA0FAF6B6F4F0B0EFEAABF1E8AAF6F0B3F5F0B4F2EDB5F3EDB9 F1ECB5F3EDB3FEF8BDFCF6BAF9F3B5F2EDAEF6F1B0F7F2B0F3EEAAFBF7B1FBF7B0F8F3ADF6F2AE F5F0ADF9EFA8F9EEA3F7EBA2F1E8A4F0EAAFF8F5BEFCF8C3FFF4C0FFF2BCF8DB9FC89B4FFDE095 FFF8B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8CFCFCF8282823333332C2C2C9A9A9A D6D6D6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0A0A03D3D3D373737 7B7B7BD4D4D4FFFFFFFFFFFFFDFDFDDCDCDC5B5B5B3B3B3B525352A9AAA9F1F1F1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFBFBF3EFEFCBE5E5ADF3F3D9FDFDF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9F4D6D3EBB3AF EBB0AFEBB0B0EAAEAEE8AEAFE1A3A4DA8984DC8780F2C9C7F9D9D9FADEDEFDF2F2FFFDFCFDFBF3 F1EDCDE0D68BDEC159E4BC54F7EBCCFEFCF8FFFFFFFFFFFFFFF9F2FEEAD2FEDDBAFFDEBBFFEBD7 FFFAF5FFFEFDFFFFFFFFFFFFFFFFFFF4FBF4C9EAC9B0E3AFD3F8D3EBFEEBFCFFFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4CCCCCC E2E2E2F9F9F9FCFCFCFCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFFFEFEFFFFFFFFFFFFFFF2F2 FCD0CFE86464D34546C99191D5DCDCF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE2E4E4 C9A8A9CF5859E04445F8C1C1FFECECFFFDFDFFFFFFFFFEFEFEFDFDFEFDFDFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7F6F6F6F6F6F6F6F6F6 F6F6F6F7F7F7F4F4F4D5D5D56B6B6B3838383434349C9C9CEEEEEEFCFCFCFCFCFCFFFFFFFEFEFE E1E1E16262623737374A4A4AA2A2A2F4F4F4FFFFFFFFFFFFFCFCFC9C9C9C3A3A3A303030737373 CFCFCFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F9F9F9FEF7F7FED0D0 F39797E36868DC7D7DE2D3D3EDEAEAF2D4D4E05656E76D6DF6BBBBFEEDEDFFFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBD075DBD074E5D87BEBDE80E9DC7EE3D475EADA7BE9D979E6D676EBDB79F0E083ECDD85 F2E48CEFE189E1D37BE0D27AEBDD85EADC84ECDE86F2E48CE6D880E0D27AEFE186EEE184E8DB7E E5D87AE4D77AEDE083EFE285EEE184EBDE81E8DB7EE8DB7EEBE082E8DD81F1E88CF7EE93FAF099 FBF19BF4EA95FBF19CF8EE98F4EA91F8EF95FBF296F4EB8EFDF497F4EB8FF3EA8EF6ED92F2E98E ECE388F1E78EF6EC94FAF098F8EE98EEE48EE8E286F3E688EDBB6BE1AB5EFFED9AF0ED94E8E78F F2E793F4E591F1E992F3EF94EFE48BE9DF87EEE48CEDE38CECE28CEEE48CE9DF87E4DA84EFE58D F6EC94ECE28CE4DA83EEE48CE7DE84ECE288F4EA91F7ED94F2E891ECE28BF2E891F3E994F4EA95 F8EE99F6EB99EEE793FBF7A0F7E591EED886FFEF99F2EB91E9E185FBE38BF9D37ED1A34FFDE288 F4EA89EFE88AEFE68BF4EA90F1E88EE9DF86EBE18AEDE38CEEE48EEFE590EEE490ECE18DE7DE8B EFE897EDE694F3E894FAEB94F9E68FF2DD87EBD584ECD78CF4E8A6FAF0B6ECDDABFAF1BAF5F2AD F5F2B4EBE6B2F2ECC04D471D251F0DDBD694E7E094ECE393EEE290ECDC8EF5E69CF4E69FF7EA9B E3D883CDC36AE7DC88F5EB9EE9DF98B6AE6C736A27FBF2ADECE59CDBD78CF2EDA95D54289A8D58 F1E6A2F1E590F8EB93F1E495EDDE9BF2E4A1F8EE9FF7F09BC0BD7C5D5B24F6F2BCE8E2AD2E2710 A9A363F1E8A2E5DC8EF0E698F9EDA1F2E69EEEE299E6DE8EE3DA8CF4EB9DEFE698EAE195F3EA9F EDE499EBE199F6ECA4F4EAA2F3E9A3F1E8B4FEFBD4948E6B0D0800615E2AF4F2C1FAFACC898961 05050092917166654C0300001C120045341543290AE1C38AF8E6A8F6E2A1F3E4A4C5C081ECEAAB E3DE9EE9E09FCDC281DDD38EF4C887B57331E9C075F3DD89E7ED97E4ED9FF3E4A4FDE1A7FFECAE E9F0A2CDD385DDD88EF2EBA3EFE9A0E7E098ECE59DECE59DE4DD95DED78EE2DB93EBE49BCDC67E CAC37BF7F1A6ECE69AEDE79AEAE496F9F3A5EEE89AECE69BF0EAA0EDE69FF5EEAAEBE5A2F3EDA7 AD8044B4743AEFD68BDEDC8CF4F6A9DCD290E4E2A1EEECACE0D693E9EA9EDEDF96F4F0B3F5F0B5 F1EDB1E2DDA2D1CD90CDC98BD5D291ECE9A5E5E399F2F1A3F2F1A2E2E09CF5F3B84C4B1C9A9867 EFECBBE9E6B8FFFDD47A7654403C21F8F6CAF5F1C4F8F7C7EEEBB0E6E6A9EFEFB76D6D41272813 EDEEC0EFE9BC3C312061501CE1CF929E813FF4E59EFFFCB2F7F5AEF2F8B9A4A277402B1F320E00 8B6643FFFCC5FCFAB5E8EA9FF4EEA3FEF5B1EED08EC69148F2CB8BF2E1A7EEE5A1FEF6B2F4E4AB FFEDC0EAB676A97122F3D584F2E49CF8ECA6FFF1A5F6D486C69547B7863CEED18BFFEFADFBEEB0 F3EEACEFF1ACEAEDA9E3E5A8E7E8ACE7E5A8F5F1B3EBE5A6E4DD9EF3EBACE6DFA3ECE6ACF1EEB6 E8E6B1D1CE94F4EFB0FEFABBEAE5A6ECE6A6F3EEADFAF5B3FDF8B6F5F0ADF8F3B0FBF6B1F9F4B1 F4F1ABF3EDA5F1E99DEFE295EDE295EEE69EEEEAABF7F5BCFCF9C5FFF4BFFFF6C2FFF0B4CB984A F7D388FFF9B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5B7B7B76363632828283C3C3C C1C1C1EDEDEDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9595952A2A2A 3233327E7F7ED6D6D6FFFFFFFFFFFFFDFDFDDFDFDF6A6B6A3839383435346C6D6CB3B4B3E6E6E6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7E7EEEECCECECC5F2F2D7FBFBF2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF1F1F4D6D5F3C8C7 F3C2C2F3CCCCF4D1D1F1D1CEDDCABBCBBEA4D1B49DD1A89AB29C99AA9898B2A3A2DFD9D9FCFBFC FFFFFEF9FAEEEDEAC3E3CA79DEB44AE8CF8DF3E7C8FDFAF3FFFFFAFBF8E0F3E7BCF1DFB1FDEBD5 FFF6EDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFAFDF9E3F4E2CBEDCBC1EDC1DBF5DAF9FDF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9 CECECEC6C6C6C7C7C7CACACADBDBDBF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFAEBEAF5D9D8FAEBEBFFFFFFFFFFFF FFF2EBFCD0C0E7635BD84B4BD9A2A2E6EDEDFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD EEF4F4DCC0C1D86364E04243F8BDBDFFEAEAFFFDFDFFFFFFFCF2F2F6DEDDF7E1E0FEFBFBFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDDCDCDC6D6D6D3B3B3B383838A3A3A3F6F6F6FFFFFFFFFFFFFFFFFF FEFEFEDEDEDE4D4D4D2E2E2E565656AEAEAEF5F5F5FFFFFFFFFFFFFDFDFDABABAB505050292929 464646898989CDCDCDF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E0E0E0EBEBEBFCF7F7 FFE4E4F6A0A0E55353E06060EDCACAF7DBDBF9BDBDE24949E97272FAD2D2FFFCFCFFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE8DD81EADF83E9DC80E9DC7EEADD7FE5D677EEDE7FEBDB7BE4D474E7D775EDDE7F EBDC85E6D880F2E48CF1E38BE8DA82EDDF87F4E68EEFE189ECDE86EEE088F3E58DF0E388EDE082 F1E486F0E385E9DC7EEDE082E9DC7EE6D97BE5D87AE8DB7DEADD7FE9DE7FECE185F2E98DEDE489 ECE28BF6EC96F5EB96FFF5A0FAF09AF3E990F6EC92FCF396FAF194F8EF92F3EA8DF4EB8EF9F093 F5EC91EFE68BEEE58AF1E78EF4EA91F5EB93F5EB92EFEA8EF8EB8DE5B465E6B367FFEB98EFEC95 E8E78FFAF09BFCEF9CF1EA93F9F59CF1E68DE5DB82E4DA81E3D980EAE088ECE289DBD178E9DF86 F2E88FEAE087E7DD84E2D87FF0E68DF3EA8EE8DF85E8DE85F1E78EF2E890EAE089EEE48CF7ED98 F6EC97F4EA95FAEF9CF8F19DF5F19BF1DF8BD3BD6AF4E38DEFE88EF1E88CFFE991F9DB86CE9F4B FDE68DF1E786EDE687ECE388F3EA8FF7ED94EDE38AEDE38CEDE38CEDE38CF1E792F3E994EFE48F E7DE8AE1DA89E1DA8AEDE290F7E794FAE792FFE994EAD47FEBD580F5E08EEFDF8EEFE292EADF8E ECE693EEE69FFBF2B9A9A06D0D0500878045F2EAA4EFE796E8DF8AEFE391E0CE82F8E79FF4E6A0 F7EA9BE8DD88DCD279E1D783EEE496E7DD96C8BF7D655C1AFDF4AFEEE79DDFD98BF5F0AA8D834F 706330FCEEACF1E68FE8DB7FFAEB9BF1E3A1E9DB99F2E997F0EA91ECE9A8484516D6D3A0FFFFCF 7E7742332D07F1E8A1E2D98BE5DD8CF1E697F6EA9FF4E89DF0E897E7DE8FEFE697EAE192E6DD90 F0E79BF0E79CEDE39BF1E79FF1E79FF3E9A4FDFAC9F0EBC52F2912100A00161108DAD8A5E8E6AE D4D2A21F1C0A0E0A02030200383618E5D9A9EFD8A4B29258C6A254FFE69CF5D891F6E893F3EDA5 F0EFAFE2DD93F2E7A1E8DE9CDCD692FACE8FCB8544D8964BFFFCA6DEE48CE0EB9DFCECB0FDE2AC F0D99CDAE293D0D988DBD68ADAD48AD9D389DCD68CD8D189E4DD95E4DD95DBD48EE0D993EEE7A1 C7C079E4DD96EEE79EDBD48BEDE79BE5DF92F7F1A3F1EB9DEAE497EEE89CEDE79EF5EDA6EBE7A0 F6F0A9A47037B16C33BAA85ADEE493F0F3A6E5DA99E5E3A3FCFCBAE3D996E0E195D9DD8EE4E298 EFECA7F0EDAAE9E5A5DEDA9BEAE5AAEDE8AEF6F1B6F3EFB2EDE9AAF4F0B1FDFDCBD8D6A3222200 DDDCA1E8E6B5FFFAD7BDB899171300989667FEFED2F7F6CFE9E5C0F2EBB4F0ECB1FAFAC5484C1B 687149F9FCDCC9CFA4161500BCAF7DFFF9C3E6C68BA17E43D8BD858681482227032423009A7E59 DAB188E2BA85FCEBA4FEFAABF1F29EDDD180F5E39CF2CF90CE9653FFD79CFEECB7EAE1A3FDF7BA F6E9B6FFF5CFFFD299B77F38EED388FFEDACFFF7BAF0CE8BC49D52C69E51F6D88CFEEFA6F2E5A2 E7E5A5C0C182D6D899FBFBBCF4F3BAF5F3BAEBE6ACEDE6AAF1E8ABF4EDAEEDE4A7D6CF95DAD59C F5F1BAE7E6B0CBC88DE5E09FF5F0AEE5E09EEAE5A3EFEAA8F4EFADFBF6B4F1ECAAF1ECAAF6F1AF F3EEACF2EDA6F2ECA0F0E798EEE290F3E796FCF2A8F5F1B0F9F7BDFBF9C3FBF1BCFDF3BFFFF1B5 E8B05FF2C77BFFF3B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5B3B3B36566653D3D3D 5F5F5FE1E1E1FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D9D9D 3A3A3A4748478E8F8EDBDBDBFFFFFFFFFFFFFEFEFEE7E7E78E8F8E525352313231474847888888 D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF3EAEAC0E7E8B9F2F3D9 FCFDF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF8E4E4EBB3B3 F3C2C2FDE0E0FEF4F4FFFAFBFAF7F4D2E5CEB0D6ABC2DAB5BEC5AE6C6D675353525F5F5EB0B0B0 E6E6E6F1F1F1F2F2F3EEEBE3DFCD9DD4B15BD9B351DFC989E5E3CEE9ECDCE5E5C1DBDAA7DBDAAB EDECE2F1F1F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1EEF0EEDBE8DAA5D2A2BFDCBCE9EEE9 F3F2F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 E4E4E4CECECEA8A8A88E8E8E8C8B8BAEA7A7EFE0E0FDF5F5FFFFFFFFFFFFFFFFFFFFFEFEFEF9F9 FCF2F2FBEDEDFCEFEFFEFCFCFFFFFFFFFFFFFFFFFFFEFAFAFAEBEAF1C4C3EAA5A4F2CBCAFDF6F6 FEFDFDFEEFE2F9CAB1E56457DE5656EBB5B6F8FFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFAFFFFF0D5D5E27272DF4748F6B7B8FDE6E6FEFBFBFEFBFBF6D9D9ECAFAEEFB8B8FCF2F2 FFFEFEFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE1E1E1808080535353525252AFAFAFF7F7F7FFFFFFFFFFFF FFFFFFFEFEFEE0E0E0595959454545757575C0C0C0F7F7F7FFFFFFFFFFFFFDFDFDC3C3C37C7C7C 3D3D3D3636365C5C5CA5A5A5F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1CDCDCDDDDDDD F9F6F6FEF1F1F2A6A6E44646E54D4DF7BCBCFABCBCF59797E14949E98181FAE2E2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0E58BEDE288E8DB7FE5D97BE7DA7CE8D87AEDDD7DE7D777DFCF6DE5D573 F0E182EDDE86E4D67EEADC84E7D980E6D87FEADC84EEE088EBDD85E2D47CEFE189F5E78EEADC82 E9DC7EEFE284EEE283E8DB7DECDF82E8DB7EE1D577E0D375E9DC7EECDF82E4D87AE4D87CEDE488 E9E085E9DE87F4EA94F3E994F6EC97FAF09AF4EA91F2E88EF6ED90F7EE90F4EB8CF4EB8DF8EF90 FBF293FAF194F6ED90F2E88CF2E98EF2E98EF1E88DF3EA90F1EB8FFFF296DBAA5AE3B568FFE795 E6E58DE6E58FEDE18FF3E491EDE68FEEEA91F5E991EEE48AECE388E9E085EEE58AF2E98EE9E085 E3DA7FEFE68BE4DB7FECE288E6DD82EFE68BFBF297EEE48AE6DC83EAE087EFE58DEFE58EE7DC85 F4EA94F4EA95F3E893F4E896F0E895EEE992FBEB98EBD582EEDE87DFD87DF7ED91FDE48CF9DD89 C59642FDE289EEE383F4ED8FEEE68BF0E78DF4EB91EBE189EFE58DF5EB94F1E790EFE58EF1E793 F1E792EDE390E3DC8BE2DB8BEAE091F0E28FF3E08BFEEA93F7DF83D8C062F1DD7AF4E47FEBDE75 E9E07AEEE58BE9DF93FEFEC08277472E2400DCD395EFE79CF0E895E5DC84EADE8BF0DE92ECDB94 F4E69FF2E597E7DC87EEE48CEDE28EE3D98CF1E79FDFD6945C5311F0E7A2F8F1A7F2EC9CF3EFA8 C0B883473A0BFCEFACF9EE95F5E98CF2E594F1E2A2EEE1A0EBE290EAE48BFAF8B66C6839868152 FFFCCBE8E1AC1E1700B9B169F7EEA1E9E190EBE090F9EFA2E6DB8EE9E190E8E08FECE493EEE496 F0E69AF3E99EF6ECA2F1E79EE8DF97EDE49DF6ECAAE3DCA55753371C1606989172140E0085804F FFFFC6BFBC89140D013F362A78735CD9D5A8FCF7BAFFE9A8CDA864885F07FFE48FFFE699EBDD7B F5EF9EF4F2AEEDE998EAE094F3E9A4E5E2A0FAD494EAA462C57F35FBEA95E5EB93E4F0A2FDEFB3 FFECB7F2DC9ED9E494D5DF8CE0DB8CD9D387D5CF83DED88CE0DA90DDD78EDCD58DDBD48FE8E19D F1EAA6BAB36FD6CF8BEAE39DD8D189EDE79CEFE99DFBF5A7F4EE9EEAE595F3EDA1F4EEA1F1EBA1 DED990F0E8A2D7A066924C134D3E0C8C9642B7BD71EEE1A2DCDA9AE3E1A1EEE4A0E3E597C3C775 D1D380E0E293E7E79CECEAA5ECEAA9F2F0B4E4E0A9E9E7B3F9F6C3FFFECCE3DFAFE8E4BA777546 494924F3F3B4EEECBBFDF9DE48422E1A160CCDCB9BFDFBC9928F6949432D998F5CE6DFA6E2E1AC 2A32099CA97FEAFBD56A754F575932FFF5C7FDF4C2FFF2BCDCBE8D58371B4338187F8355DFDEAB FFFDC5D9AE6CC2994DFFF59BE6E387EDEB96F5E69DFFEEA7F7D78CCA9544F5D48DFFF0AFE9E398 E7E39BE8DFA1FEF0BEFFE09DB78432E7D582FFE7ABEDC28DBB8F4ED1AA62FBDF92FCEB9BF9F5AA EFF3AEDFE4A7E9E9B1E3DFA8E5DFA8E8E7AEF6F6BFF9F3B9EDE6AAEDE3A6F0E6A9EFE5AAD7D096 C5BF86E4E0A9E3E2ABE8E6ABF0EBA8E5E09CDBD692E8E39FEDE8A6EEE9A8F8F3B2EFE9AAEEE8A9 F5F0B0F1ECACEFEBA4F0EB9DF0E897ECE08DEDE28FF5EC9FF6F2AEF4F3B6F4F2BCF5EEB8FAF2BC FFF0B5FDC677ECBC6FFFF1B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE5E5E5CBCBCB BFBFBFCACACAF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFDFDFBEBEBEC2C2C2DADADAF3F3F3FFFFFFFFFFFFFFFFFFF7F7F7DADADAC6C6C6BABABABFC0BF D5D5D5EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF9F9EEECEEC8 E0E4A3E7EAB6FDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF8E3E3 EBB0B0F3CCCCFEF4F4FFFEFEFFF9F9FDEBE8CECDC4A6AC9DBC9588B6766D4A3D3B232322202120 595A578B8C89A6A6A4B0B0B1ADACACA9A393AF9C70D4A539B69B3F858C5C78836F87887A999988 A7A798ACACAAAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEADADAC9CA3976584567D9173 A6A9A4AFAFB0AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE AEAEAEABABABA2A2A28181815C5D5D4B4848725151D48686F4CACAFFFFFFFFFFFFFFFFFFFFFEFE F7E4E4EEBCBBE99F9EECA7A8FCF2F2FFFFFFFFFFFFFFFFFFF8E1E1EBA2A2E06565DD5252E68C8C F2CFCFFCF4F4F8E2DCEEB5ABE26F6AD66767CFA4A5DBE0E0F9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCE5E9E9CFBABAD37878DF5E5EEBA3A2F6D5D5FDF4F4F5DDDEE99F9FE06262E87878 FCD8D8FFF5F5FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D4D4D4C6C6C6C6C6C6E5E5E5FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFF5F5F5C7C7C7C1C1C1D1D1D1EBEBEBFDFDFDFFFFFFFFFFFFFEFEFEECECEC D4D4D4BEBEBEBBBBBBC6C6C6DFDFDFFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEFEFEF F6F6F6FDFCFCF0EFEFE2B0B0DC5F5FDE5858E59B9BE58787E36969DC6969E8A5A5FAECECFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEBDE83EADB80EEDF84F3E589F1E387E6D77BEBDC7EE9DA7CE6D779 ECDD7FF5E68AF0E089D5C66EE3D47CDDCE72D8CA6EEEDF82EADB7EECDD80E9DA7EEDDF83F3E58B F5E68BE7D97CE9DB7FEADB80E7D87CF0E186F0E188E4D57DE8D982E8D981E7D881E7D881E2D374 F3E586F7E98EF3E68DF6EB96F5EA97F1E995F5EC96F4EB91F3E98CF6EC8CF9EF8FFBF297FAF399 FEF79EFEF9A3FBF39CF4EC95F6ED98F7EF9AF9F19CF9F09BF5ED9AF3E890FFF79EBE9240DEB764 FBE58FE2E185EBE28AFAEA95F8E995E8E48EDEDB86F3E292F0E38DEDE38AF2E88FF6EC95F3E990 F2E990F1E78FEDE38AEFE68CEBE189F0E68DE8DE87F6EB94F5E891EDE28AEDDF8BF3E692F6EB96 ECDE8AF9EB97F0E590F2E592F3E592E9DB8AF5E495FBEE9DF6EA95E5DE85E3DE82FBEC91FEE48D FADC89C39846EECD79F9ED95F1E892EAE48EF3EC99FCF7A4F3EA97F0E796F6EC9BFDF4A3F8EEA0 EEE294EFE395F1E596F1E492EBDF8BECE18FEBE08EF3E690F3E18AF4E081EED778E5CF70F5E285 FCEE93F5EB91EDE790F2EB9FF2EBAD2E230C7E7445FFF9BDE3DB90E5DD88E6DE84E4D883F3E395 F1E29AF7E9A2F8EAA0E9DD8EF8ED9CFAF09FE9DF91EFE69CE9E19A5A510CE3DA95F9F0ABEDE39E F9EFAEE3D99F302601D3CA88F5EFA1E8E18FEEE597F2E8A0F5EBA0F3EA98EEE790FDF9B1BFB88C 382E0BEEEAACEDE7A87C723A635936F5ECA5F1EA99F8F0A3F5ECA3E8E193E8E38CE9E28BEFE492 F3E49CF8E7A9F9E8ACEBDE9AFDFBB1E1DD96F9F8C2EDEBC8545037040000564F2EFFFFE15A5337 151000868355302C14595337F4F1CAE7E2B1F8F3B7E3DB9EFDE9ADF5C886925E11DFB760FFF19B F1EB8EF6F1A3F8F1AFEAE094E7E192E3E091F4F2A8FAECA1ECC178CD843FF3CB7AF9FA9FDBEC92 FBE9A1FFEAA9F8E7A2CFD98AD3DB8BE7E295EFE99CEBE599F6F0A4EDE79CE5DF93E7E097ECE59D E8E199F5EEA5ABA55DBCB570F4EDA7D5CE87E1DA92F6F0A6F9F3A7ECE69AE6E092F4EEA0F6F0A2 E8E395E1D58AF9DB97A97732D1A159EEE39CDBDA8EA9AC5D9C934CEEE9AAF3ECACFAF3A5FBF8AD E2E29AE5E5A1EFEEA7E8E49DE5E299F2ECA6F6F1AEFCF6BCECE8B7FFFED7AEAD8C403D25333026 2322043F3E24C7C698FCFCD4C4C2A70C09064B4836FAF8E08A8A6F09090000000036310AFFFFD4 8181533F4418E2EAB8E0E8B3161C00ABAD78F6F0BBF8EAB7FCEEBCF5E5B7583512AB8966EDCCA2 FEDBA8FFD598A26D26CAA251FFEC99F8EEA2E4DB9EE6D4A7F8EAB2FFE79DD8A850F3CC7AFFEEA3 F9F7AFD9DB91D7D693FBF5BEFFEBB3C18A49F5BA71D4A260B28849D9B571F8DC95DDCB83F6EFA9 ECECAAEFF3B5F8FAC2FCFBC5EDEAB5E9E3AFEEE9B1F8F3BAFAF4B8F3EDB1F0E7ACF1E8ACFFFBBE EEE8ABD0CA8FCBC78BCBC88CD6D293F5F0AED6D18EC8C380F7F2B1EFEAA9F7F2B4F6F1B2F2ECAF F4EEB2F2ECB1EDE7ABF9F4B3F6F3ACF2ECA4EDE59BEDE49AECE79FEEEBA7F7F4B5F7F3B8F0EBB2 F4EEB5FDF0B6F9CE89E7BB75FDEFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD FBFBFBFAFAFAFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCFAFAFAFAFAFAFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFAFAFAF9F9F9 FAFAFAFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F6E1E5E8B3E4E7AEF2F3D7FAFAEAFFFFF7FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5 F8DBDAEBB0B0F3D1D0FEFBFBFFFFFFF5EBF1E0C4D2C3959EB5706FC5625FBE5A596A55553B3A3A 28292C4E4F637D7D969F9FAEB4B3B4B7B6ADB2B1B0AEAB9FB3AB4D80942A497D2A60815B939791 ACABAAB7B7B6B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B8B6B6B6A5ADA16E8F61 869C7DAFB3AEB9B8B9B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7A8A8A8949494818181747575726F6F916D6DD47979EBA3A3F5D2D2FDF4F4FDF6F6 F8E2E2EDAEADE27979DE6767E27878F0BCBCF9E4E4FEFAFAFBF3F2F0B8B8E0696AD73838D8393A DE5D5DE89494FAE7E7F4D0CFE69694DF6766D97373D5AEAEDEE3E3FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDE9ECECD5C2C2D78585DE6767E69A99F3CFCEFBEDEDEDACACE16F6FDE5858 E97F7FFCD1D1FFF1F1FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBFAFAFAFAFAFAFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAFAFAFAFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFBFBFBF9F9F9F9F9F9FAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 E9E9E9E6E6E6E7E7E7E7EBEBE7C7C7E68989E26363DC6161DB5555DD5A5AE39898EFCDCDFCF5F5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEADB80EADB80EFE085F3E489EFE085EADB80EBDC81EADB80 E9DA7FEADB80EDDE84EDDD86DFCF77E9DA7FEEDF81E4D576EDDF7EEDDF7EEFE180EEE080E7D879 EADB7EF5E689E8D97CECDD82ECDD82E9DA7FF6E68FF7E790F0E08BF5E590EEDE8BF0DF8DEEDE89 EBD879F6E583F8E98BFAEA93FBF09AF8ED9BECE490F2E993F4EB90F4EA8AF4E985F3E987FDF49D F9F19CFBF39EFBF3A0F2EA97ECE493F7EF9EF3EB9AF3EA9BF6ED9EF6ED9EFAEE9AFFF8A3A47C29 CFB05AF2E388EDEA8BF1E289FEE892F7E894EBEA94E7E592F9E599F3E392ECE28BF3E992F8EE97 F3E992F4EA93EEE48DE7DD86F2E891ECE28BF4EA93E8DF87EFE08DEDDE8BEFE08DF6E793F9EA97 F8E996FDEF9CFCED9AEBDC89F2E390FBEC99F5E493FFEBA0F9EA99F1EC95E4E588E6E185F7E58A FFE68EFDE391CBA151E5C372FFF7A6FEEF9FF3EE9DF1EC9BF2EC9DECE597F1E89BF1E89CF2E89D FCEFA5FFF4AAFAEEA4F6E99DFDEB97F5E48DEBE08BE1D986EFE993F2E88EFDE98DF3DB7EF4DC84 FFEB98F2E195EDE195E7E393FBF6B2A39D67150D00C7BD8DFCF4B8E4DC90E7DF8AE6DB82E9DD87 F3E295F0E197F1E39CF3E59CE9DD92F1E59AEEE393E9DF92E6DD90EFE79F665D18C4BB78F8EFAE F8EBADEEE0A4FFFABC54490B928B49F2EEA8EAE69FF0EBA0E8E393E6DD8EF1E895F7EE9BFFF9AE FDF5C83B310E999451DBD58DD7CE94463A0FE8E7A9F6EEA2E2DB8EEDE59DF7F0A5E9E492F2EA97 FCF0A3FAEAA4F7E3A4F9E6A8FAECA9F4EEA9FAF8C0E9EAC777786B070200201602DDD6A3F6EEC5 D6D0AC302B190601001A1607B7B17EFFFEC6EEE8A2D3CF84FAF5B9FFF3BAFFDE9FBA8036AC812D FCF59DE2DE8BE6DF97FAEBA8ECDE98E7E796DDE18CEBE799EBEF9BFFEEA1CB8644CE9A4FFDF9A1 D9E686F7E895F5DD92EFE397D2DA8CDDE497F0EB9FEDE79CF1EB9FECE69AF0EA9EF1EB9FF0EA9E FDF7ABF4EDA1FFFEB2D3CC81CEC77FFBF4AED8D18AEDE69EE8E298EDE79DEFE99DE9E397F0EA9C E9E493DEDA89EFDE91F7D290B08133E0C16FFDEFAEE1DA91B9B866CBC87BF1EAAAEFE5A5F1EB97 EDE79CEBE6A8F4EFB6FBF5B9EEE9A7E7E099EDE59CEEE6A0E7E0A3FBFAC87B78521210010A0902 141301060500030100202001EDEDC98686670706003D3E2EFAFAF197968A0000001113020C0C02 7C7D5B23250D737447FFFFDC8E8F5668672EECEAB2FEFBC6ECE5B7F9F1CA4B3F1860472FDAAF7D A16434F2A976FFBF84B57D37D3B260EDDE8DEEE69DECE2A9F1E0B5FEEEBCFDE39CDDB15AF9DB83 FFF2A2EFEEA9EEEFAAEBE5A1FDF5BDFFEDBFBA804DCE722EBE873EE9CB83FFFAB2F6E39FDFD393 EDE8AAF7F7BBF1F1B9F6F6C0F6F3C0FBF9C7F8F2BFF9F2BAFBF5BAFAF4B8F6F0B4F6F0B4FAF4B8 F9F3B5FFFABCF6F0B2EBE5A7EBE5A6E8E3A3F6F1AFE9E4A2DAD594FCF7B7F3EDAFF3EDB0EEE8AC F9F3B9FDF6BEF7F0B9E8E1A9F7F3B7F7F3B4F1EDAEECE8A8EEEAABEEEAAAF2EEAFF4F0B2E9E5A8 E0DBA1E8E3AAF7EBB1F9D89BE1BB79FBEFA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDF8F7F7E6EDEECAE7E7B5F2F2C8FEFDE4FFFDF7FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFA FEE9E9F8CECDEBAEAEF3D1D0FDFBFCFEFFFFDDD6ECB296C3AA587FC13B49D04E51CF706FA89493 7B78775A585E7776A49FA0DABFC0E6D7D8DFE0E1D2D1D6D6B5C6C785B86E54A73B3C9E3287BB85 D7DDD7E9E7E9EAEAEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE7E9E7D5E1D3 9EC999B6D4B3E1E6E1EBEAECEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAC7C7C7A0A0A09D9D9DB1B2B2C9C6C6DCC1C1E29898E38484E58A8AF5DBDB F5DEDEEDB3B3E27070DB4546DB4F4FDD6363E17373EEB6B6FAEDEDF2D1D0E68C8BDB4747D83536 DA4C4CDA4343E05959F8D7D8F1BEBEE07778D85959DC7C7CE7C4C4F3F8F8FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7FBFBECD9D9E29191DD6666E49494F1C9C9F8E0E0E67878DC4F50 E17777EEADADFDD8D8FFF1F1FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F3F3F3D1D1D1C7C7C7CBCBCBE6E9E9F7E4E4F8B7B7EE7474DF3636DC3F3FE16A6AF2C8C8FAF0F0 FEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDF84EDDE83ECDD82EDDE83EBDC81E9DA7FE7D87D EADB80EFE085F1E287EFDF85EBDB85ECDC84E5D67BF4E587F3E484EBDD7CE8DA77F2E483F2E484 E7D879E3D477EBDC7FE6D77AECDD82E5D67CE3D47AF6E78CF0E187F1E189F1E188E8D882F4E48E EDDE86EFDC7DF1E07EF2E284F9E992FBEF99F7EC97EDE690F4EB94F9F095F6EC8CF3E884F0E684 F5ED93F1EA91F3EC93F7EF99F5ED97F2EA96F5ED99EFE894EEE695F1E998F3EB99F8EA96FFF29D BC9542EBD079F2E587EDEB8AF2E389F8E28CF2E38FEEEC96ECEA98F9E59AF4E492EEE48DF0E68F F2E891F1E790F3E992ECE28BEAE089F4EA93F3E992F4EA93EFE58EEEDF89E9DB85F0E18BF9EA94 F5E691EFE08AFDEE99F7E893EADB85F2E38EF9EB95F3E291FCE79BF3E492EFEA93ECEB8FE9E287 EEDC81FBDB83FFDD8BC9A150D3AF5EFFF0A0F5E595F1EA9AF3EC9CEEE799F1EA9CF8EFA2FDF4A7 F0E699F3E79BE8DC90D7CB80F5E59AF2E28AEFE188EBE28EE0DA89EDE695F1E591F8E38DECD47B F0D77FFCE793F1DF8EF2E699F0EBA3F5EFB1362F074C4429FAF3BDEAE2A1ECE596F1E991EADF87 F3E795F7E79BEDDD95EEE097F3E59CF3E79BF3E79BEEE394EEE496E5DC90F7EFA77A712B918845 FEF6B5FCEFB1DFD194F5EBAD83793B58511CEBE6A1ECE8A1ECE79CE6E192E7DE8FF3EA97FDF4A3 EEE7A3FFFFC7948D594A4012D9D091FFF9BA6C63378D844DF9F2ADEAE393EBE39AF8EFACFDF2B1 EFE2A5F4E6A5F8EB9EEEE589F7EF92EAE395E4DBAAEAE3C4716E58000000191305BFB875F8EFB4 E9E3ACF5F0BED1CC9D9A9663B3AF78F4F0B3ECE6A2F2EBA1E6E094D0CB8AE3D092FFE39EF1C375 8F640FECD983FAEFA0EEE29BF6ECA7F4ECA5EDEC9EE6E694EAE499DDDD8FFAEDA1D9A15DBB863F FCE190E1E489F5ED98F7E699F4E89EE7EB9FDDE094EEE99FF3EDA3EEE89EEBE59BF0EAA0EEE89E EAE49AF7F1A7F2ECA2FCF7AEF7F1A7A49D55F1E9A1EAE39BE8E198EAE499F7F1A5E3DD91EAE497 F5EFA1EAE594E0DC8BF8E79AF4C785B28234EBCC7AF4E2A1D9D189D2D17FEEEC9EE9E2A2F2E8A7 F7F19DEBE59AF1EDACF6F3B5FBF5B6F2ECAAECE5A1EBE29FE8E0A0FAF4B7B9B382201C049F9D7B D8D8BBA6A38489865F5B5733A4A379F7F6CB6160430402000B0A03595749BAB8A23C3D2829291E 464532100F0A3A3820EEEECDBAB991131100A4A172F4F0C4F3EEC6FFF9D6B2A9880300009D9C53 FFFBB4E4B173C47D46D08C52B0813CD8C773EFF297DBE387DDDB87E9DB8FFFF2B2F4D090C2953E EBCC72F3E895EBEDA4E3D590F7E2A2FFF9C4E8C4948E581EC0772AFBD890FFEDA7F4E19CECDB9A F2E9AAE4E1A4E4E4A9E9EAB1FDFDC7F9F6C1EAE5B0D0C993F9F3B8F0EAAEECE6AAEEE8ACF2ECB0 F4EEB2F0EAACF6F0B2F6F0B2F9F3B5F8F2B4F6F1B1F6F2B0DBD697E2DD9CFDFBBEFFFFC2FBF5B8 FAF6BAFAF4BBEBE5ABF2ECB2EEE7B0F8F2B9FAF6BAF6F2B6F3EEB3F9F5BAF9F5BAFCF7BEF1ECB4 E1DCA5E0DAA5F0EBB5FEF8C1FADA99D1AB65F9DF97FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8EBECEDC5ECECB9F1EEBFFBEEE3FFF5F6FFFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF8F8FEE4E3F8C7C6EBADADF4D2D0FAF8FCE3E4FFB4B0F18170D67035AA8B2D87BB718DDFB9A7 DCD4D1C0B2B1A68C91BAADCFCCCFFBCFDBFBD4DEF5D1D8E9A6CCBB77BF8959B66261BD6481CD82 C8EBC8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF7 E1FCE1B3E6B3CEEFCEFAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE9E9E9CCCCCCCECECEE4E4E4F9F7F7FEE8E8E9A7A7DF6969D85051 DBB9B9DEB0B1DE7474DD5353DD5959DF6A6ADE6767D94141E28F8FECDCDCE6ACABDE6C6CDA4546 E05A5AE78080DF4E4FDD3D3EF8C7C8F0B0B0DC6D6DC46161C18989D4C1C1EAEDEDFBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F3F3E0CDCDDC8989DC5E5EE07B7BEAA8A8F0BCBCE05354 D94747DF9797EDD7D7FCE9E9FFF7F7FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF6F6F6DDDDDDD5D5D5D9D9D9F0F2F2FFF7F7FFE2E2F9B2B2ED7D7DEC8989EFADADFCEBEB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDE83EDDE83EADB80E8D97EE9DA7FE6D77C E3D479E7D87DEFE085F1E287F0E086F4E48DEEDE86E7D87CEADB7CE7D978E7D977E1D370EEE07F F6E787ECDD7EE6D77AEADB7FE9DA7FF0E186E4D578E0D174F2E387ECDE81EDDE82EADB7EE1D176 F6E78BF5E689EFDD7BF1E07EF3E386F5E68CF5EA93F9EF99F6EF98FBF299FBF296F8EE8FF7EC88 F5EB89FEF59AF8F095F5EC92F3EA90F1E88FF0E68EF3EA93F0E690F0E692F1E793F0E792F7EA94 FFEA93B28B39EDD47DEFE284DFDC7BECDE82FDE791F4E58FE7E58FE2E08DF4DF94F2E290EEE28C EDE18BEDE18BEFE38DF0E48EEFE48DE8DC86E5D983E6DA84E7DC85F1E58FF5E78FF0E28AF4E68D F2E38CEDDF87F0E289F6E890F4E68EEEE087F6E78FFAEC95F4E38DF3DD8EF1E28FEFE78FEDE98E EDE68BF4E489FADD86FDDA86CDAB5AC5A250FFE998EFDE8EF3EC9CFFF9A8FBF3A4F5ED9EEFE697 EBE092EDE294FDF4A6F0E396D1C477EFE293F0E387EAE083EEE691EEE89AF7F0A4EDE192FBE797 F9E18CE3C972F1DA83F6E38DEBDE90F6F0B39892580D0700ADA671FCF5B8F0E79FEFE893EFE58C F3E890F2E595F0E29AEEDF99EBDD95F0E297F4E79BF2E799F0E596F0E799F1E89DFCF4AB958C46 6A611EFFFBBAEADC9DEEE1A2EFE5A5E5DC9C554E0ED7D28EEAE69FEBE69DECE799EFE697F2E895 F6ED9EEAE1A5F3ECA7F8F4AC695F30DBD29DFBF3B4C5BE7A312703E6DEA3F9F6ABF7EFA8F7ECAF F2E2A9F9E8B0F4E7A7EEE695E4E182EBE98FFFFCBBEFE6C550483C040000282506C7C687FAF1AA F5ECA6E5DE99E1DC9BEAE7A5FEF9B8F8F5B0EFEAA3F6EEA4F1E89BEEE598E7DF9BDED18BD8BF73 FEDF8DB18532C79B4CFFEDA4F8E6A0ECE7A1F0EDA5ECEBA0E9E59AD9D189C9C47AD8C97FF0CB84 DAA55FF2CB80F3E793EFEC99F9F1A3F1E29BF0EFA5E1E196EBE59BF3EDA3E9E399F4EEA4EAE49A EDE79DEAE49AECE69CEFE99FF2ECA2FAF4AAC8C278CBC57BE3DD93EAE49AF2ECA0E5DF94E1DB8D E7E093F6F1A1F6F1A0EDE997FAE99DF2C786B38033EECE7CEEDA9AD9D189E0DF8DF2F0A2F3ECAC F5EDACFDF7A2EEE89DE8E3A0F1EEAAF0EDA9EAE5A3EBE6A5EFE6A8F2E8ADEDE6AE241F00656347 F2F2C2EAEABDE7E4B7E3E0B1E3DEABEAE8B1D3D09BBBB8861613000100000805000401005A5A33 E0DFB9F3F3DAD0CEB5F1F1D6B1AF8E0D0B0074724BFBFAD2FBF9D2EDE9C3A6A07A1B140B55552C E3EF9DD0C87CF5D798E7BA86A87644A58048D7C783F1F29FCDD577DDE07DE8E27EFCEAA0F7C98E C79643F1D77DF3EC98EBE79EFAF5B1FFDEA0D9A974AF814D986623DEAC53FFFAAEFCE6A3F0DE9C F0E5A6EAE3A5EFEDB1DEDFA5DBDCA3E9E8B0E8E5AFEFE9B2ECE6ACE8E2A6E9E3A5E4DEA1E1DB9D E4DEA0E9E3A6EEE8ACEAE4A7EBE5A9FAF4B7FFF9BCF9F3B5F2EEADE7E2A2D4CE8FCEC889ECE7A9 F9F3B6FFFABEFDFABFECE6ABF1EBB0E1DBA1EDE8AFF6F1B8F3EEB5F1ECB4FBF6BFFAF5BDF9F3BF EDE7B3E6E0ADF0EAB8FBF5C3FFF9C4FEEAAAD8B067F9E193FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFAF1EEEDC9E7E1ADF9DECDFDE9E0FBF7EEFDFEF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFAFAFEE8E8F8CCCBEAADADEDCBD0E8E8FBC0C5FC9A9EF87878F64840F33F36EA8F93D9 DFEBD5F4F2EFEDCECDE2ADADF2D6DBE6EEEFBFDEDCA4BFDB92A0DD609E873DA53D5DB75C9DD49D DFF1DFFBFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFB EAFCEAD0F3D0ACE0ABCAEBCAF7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF9F9F9F9F9F9FBFCFCFDFBFBF8E6E6EBAFAFE06666 D33A3BC48888C87677D54647E16465E89F9EE9A4A3E58686DB4344DA7677DCAFAFDB7B7CDC5E5E E06A6AEC9C9CF6BABAE66A6BDD3B3CF5B3B3EE9E9EDA6666B87171AB9898BBB8B8D9DADAF9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE3E6E6CCBBBBD38686DD5F5FDC6060E28282E69797 DC4C4CD95757DFAFAFEDEFEFFCFAFAFFFEFEFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFBFBFBFAFAFAFBFBFBFDFDFDFFFEFEFFFBFBFEF5F5FDEFEFFDF0F0FDF4F4 FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D277E8D97EE6D77CE6D77CEEDF84 E6D77CE5D67BE4D57AE6D77CE7D87DE5D67CE3D37BE5D67BF3E486F2E385E9DB7AEFE17EE4D673 E8DA79F1E383EEDF80E6D77AE6D77CE7D87DEFE085E2D376DECF72EADB7DEADB7CE6D877E6D876 E1D371F2E482F7EA86F2E07EF3E281F6E78AF6E78CF2E78EF8EE95F6EF97FAF297FAF194F7ED8E F7EC8AF7ED8BFAF191F6ED8FF4EB8DF2E98BF2E98DF2E98EF2E98EF0E68DF0E68DF0E68DEFE58E EEE188FBE38CCAA350F8DC84E1D376E1DF7DF3E589FFEC96F6E791E4E28ADCDB85F0DC8FF0E08E EFE38DECE18AEADE88EEE28BECE089EEE28CE8DC86DFD37DE6DA84E3D781F8EE95F2E58BEEE086 F2E588EFE187EDDF85F9EC90F2E58AEEE086E3D67AE8DB80F4E78DF9E891F6E391FAEA97F0E78F EBE58BF0E78CF9E98EFCE38CFADB86D9BA67BD9847FFE593F4E091ECE595F4ED9DF8EFA0F5EC9D F6ED9EF2E798EEE394F5E99AF9EC9EEFE293ECE08EF8EE8FE8E080E3DD88E4E193F1EBA3E7DB92 EAD589F9DF8DDCC26BEDD57DF9E78EE2D588E8E0AC342D15383213ECE4AAE3DA98F2EB9BEBE38B E6DD82EDE28CE6D98CE8D995F1E39DF1E399F0E297EBDE91EFE495EEE394F1E799F7EEA3F7EFA7 C3B976544B0AF9EFB2EEE1A0F3E5A4E5DC9AFFF9B8423B00B6B170FBF6B2F1ECA3EBE598EAE191 EBE28FF2E99AF2E8AEEEE89CFEF9A6A99E70A89D6EF7EFB1FEF8AC453C177D7541FCF9B6FFFCB7 E5DB9AF5E1A5FFFBBBF4E8A2E7E398FDFBB4F4F3BAC4C09A231C07070000413909C8C079F6EB9E E4D88CECE194F0E99AF1EB9DF5F1A4E3DD90E8E295EEE799FEFBB0EFE297F5E99EF5EBA2E8E092 CDC36FFFEC98EECA7BAF7830FDCF8BFFEDA8E9E49DE1E49BDEDD94DBD48CDBD18DDAD18AE3D991 E9D78CCA9753D8A45FFFF3A6F1F09DEFEE9FEBDC95F1EDA7F3EFA7E6E197E9E399F1EBA1E8E298 E4DE94F0EAA0EDE79DEAE49BF1EAA1F1EBA1F6F0A6FFFBB1E6E096B9B369908A3EF5EFA3F6F0A4 F3ED9FE9E494EEE998F5F09FF1ED9CFFEEA1EFBB7BB27D31F7D483F8E4A4EFE79FF5F4A2F0EFA1 F6F1B1EBE3A1F6F09CF2ECA1EBE7A0F2F0A5EEEBA4E6E29FE8E2A4EEE8AFFDF9C3B1AB720B0500 BDB97DF0EFB5EBEBAEEFECB3D6CF97DED89BDED899E3DF9FD5D297B8B481736E427E7A508E8B5E EBE8BBFBFACAEBE9C1F1F1CBF2F3CA3A380E505026E0DFAEF0EEBDE9E6B7716E44090400686342 FEFDCEE9EFAEEDEEAFEFE7B1FFF0C2B99E773F23006D5325EEDB9FF3EB9EDEDC80D8DC74F2E193 EDBC86BE893CF1D781FFF9A4FAEEA6FEDD99DBA262B47841D1A26BDCB166DBA949FFEDA0FFF5B5 F7EBABE8E0A2E8E5A9ECECB0FFFFCAF3F3BAE6E4ABD4CF96DED89EE6E0A4ECE6A8F0EAACEEE8AA E9E3A5EAE4A6EFE9ABF0EAAEEDE7ABEFE9ADF5EFB3EAE4A8DFD99DF0EAABF3EEAEE5E0A0D6D092 E8E2A4F2ECAFF4EEB2EFE8ACDFD99EE9E3A9DCD69CEBE6ACF9F4B9F6F1B9F1ECB5FEF9C2FBF5C1 F8F2C0F0EAB8F4EEBAFEF8C5FDF7C3FEF0B9FEF2AFE4BA6CFAE08DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F7E8F3EDD1FCDFC8F6E1C1EDE9C2 F4F5E0FEFDFAFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFDFDFEF3F4F8D9D9E9AEB0D5B3D0C1C2F7B3C4EEB6C5EFB3B8F96F6FFF3436F8 7070DCBFB9CBF1DDE3F4C9C9ECB2B2F9DDDDDCEDDB9BD0A96FA19E6879BA64849070A370A9D1A8 D7ECD7F9FCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFCFBE7F1E7CDE5CDADDEACCBEBCBF7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF5F5F5D8D7 E78B8BD74849CD5151CF4D4DD84F4FE99090F5D2D1F6CFCEF0B1B1E47D7DDC6B6CD86060D74041 DF5D5DEDA3A3F9DFDFFAD8D9E77778DB3838EB9999E67D7DD9494ACC6B6BCDA8A7DBD1D0ECEEEE FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F4F4E5D8D8E2A8A7E17A7ADC6060E07979 E59191DE5F5FE07575ECC8C8F7FEFEFEFEFEFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D479EADB80E7D87DE5D67B F0E186E4D57AE9DA7FE9DA7FE9DA7FECDD82EFE086E5D57DE2D379E7D87BF0E282EADC7AEEE07D E2D56FDCCE6BEADC7AEFE180E7D879E3D477E3D479EEDF82E5D679E3D476E9DB7AE8DA78E0D26F E8DA76E5D871E9DC75ECE078F4E280EBDA7AEFDF81F5E68AEEE389EBE287F4ED92FAF296FEF597 FCF292F9EE8CF5EA88F4EA89F4EC8BF5EC8CF5EC8CF8EF90F9F092F6ED90EFE68AEBE286EDE589 F0E68CF1E489F2DA83B7903CEBCD75E8DA7BECEB87F4E789FFEA93F3E58DECEA92E7E691F2DE90 F1E18DF2E88EEFE48BECE188F0E58CEADF86EFE48BF2E78EEBE087F1E68DE0D57CF0E68CF1E488 E5D87BEEE183F3E689EFE285F3E688F5E88BF7EA8DEEE183E9DC7FF1E486F7E88EF6E590F8E994 EDE18AECE188F0E58BF2E389F9E48BFADE87E2C26DB08C38FFE390FCED9CEBE293EBE193F0E898 E8E08FECE191F1E696FCF1A0F4E997F2E695FEF2A0F1E38FF1E785E9E382EAE690E7E498EEE9A2 E5D994F1DD95F3D98BDBC16DEED67FFDEB91F6EA9EB5AF820F0900A7A16CFAF2B5E5DC91E4DB87 F0E78BECE388E0D681E2D78BEEE19DF0E39CF4E79BEFE295E1D586F0E596F4E99AF5EC9FEDE49A EDE69EF5ECA9433A00E7DD9FFDF2B0F9ECA7F1E7A4FFFBBB6C652E86824EFAF5B2EFE9A3ECE69B EEE595ECE290F4E99BEFE5AAEEE698F5EF98D7CF9B514618E4DBA4FFFCB0AFA966221B01E1DBA3 F1ECAAEFE59DF7E49CFCF4A2F5EE9FFBF8BEF2EED1847F74201A13040000554D20E5DB8DF8F09D E2D381FCF2A3E3D686FCF2A0EDE692EDE794F0EA98ECE594F9EFA2E0D38AF4E59FF6E7A1F4E79A EFEC98EDEE95F1E48DFFE597B57933D09856FFECA6F0EBA1E8EDA2EBE8A1E5DA97F3E7A7FAEEAC F0E8A0ECE89ACA9B58B37132F9DA94F8F5A3E6EA9AF5E8A0F4EBA5DDD790D9D28AEDE69EEEE79F EBE49CE8E199E7E098F1EAA2F0E9A1F0E9A2EAE39BF0E9A0F4EEA4E5DF93D9D387A6A054E2DC8F F4EE9FECE698E8E294F0EA9CF8F2A5F2ED9FFFECA3EFB576C0873DFFDD8DFCE7A7F2ECA3EFF19E F2F2A4F0EBACECE4A3F5EF9BEDE79DECE79EF2F1A1F4F2A7EAE6A4F0EBB0F9F3BEFCF8C5645E2D 35300EEEEBABEDEDA6F2F2A8E4DF9CF6EDADEEE7A0EFE9A0DDD88ED2CD88E2DDA0FFFFCBEFEAB7 DFDBA5E0DCA0EAE8ABF4F4BCECEDB7FBFBC7CECF96F4F4BCDDDEA4F4F3BB97965D0706009A9964 E9E9B7EDE7BBFFF6DBB9B4956F754F788258433F2B170000210000C18E6DFFF0C0F2E79FDDE890 F2EAA4E8BE89B57E35EFCE7CFFF5A5E8CE8AC09552D39A59F8C68CFFF7BBFBD88CD8A544FEF5A8 FEF7B7F3ECACE6E1A3E1E0A3E8E7AEF1F1B7F4F4B9F2F1B5DAD599DFD99CE7DFA0F6F1B2EFEAAB F0EAACF7F1B3FBF5B7FBF5B7F8F2B7F5EFB3F3EDB1F3EDB1E1DBA1D3CD91E6E0A3E6E0A2EBE5A7 F6F0B1F2ECAEF2ECAFEAE4A8DFD99DD8D296E4DEA2DAD498E9E5A7F8F4B5F3EFB3EDE8ADFAF5BC F4EFB8F1EBB6EAE4AFF1EBB5FBF5BFF9F5BCFDF1B6FEECA6E2B867F4CF77FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFE9D3F4E3BA E7E4AFEDEEC9F8F6E5FDF7EEFFF9F4FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBE8E7EBB8BBC2A1CDA19DE8B7C6E0DBE7E4EDECF2A5A1FD 4947F6594BD99175C4E3BBCBF0BFC0E5B8B4D8D5C4AFDBAB73C076549971647BA68086B0A9A6BB EBE8F0FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9FAF9E1E9E1C8DBC8BBE1BAD6EFD6F9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFAFAF0BDBDE37777DC4646DD4C4DE37575F2BCBCFEEEEFFFECECFBDADAEFBEBEE47C7CDB3D3D DC3637E87879F9D8D9FFFFFFFBECECE98C8DDB4748E28181DE5D5ED93132E26B6AF1BBBAFCEBEB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF6F6F4CCCBE79796DD5C5C DE6666E37F7EE37979EB9C9CF9DFDFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDF84ECDD82E6D77C E7D87DEEDF84EDDE83F1E287EDDE83E6D77CF9EA8FF1E187F5E58DEADB81DCCD70DED06FDED06D DACD67EADD77F1E47FE3D573DED06FE5D776EADB7DE8D97CEADB7EE8D97BE9DA7BEDDF7EEBDD7A DFD16DDED16BE3D66EE4D76FEBDE75F6E482EFDD7EF3E485FCED90F3E88BE8DF83E0DA7DF2EA8D FEF597FDF392F8EC8BF6EA88F8EE8CF2E886F3E987F4EA89F8EF8EFDF493F6EC8DF0E687EDE384 F5EA8DEFE488F5E78CFFEC92A57E29F0D178F8EA8AEAE985EEE182F8E38AF7E990EEED94EAE993 E9D587EBDA86F5E88FF1E38BF0E28AF0E38AFAEE96F7EA92EADC84EBDD85FBEE96E2D57DF8EA92 F4E788EEE181EFE282E6D979E5D878F6E989EADD7EF5E888EFE282EEE182F5E888F8EA8EF6E68F EDDD86EEE189F3E78EF0E58BEFE289F8E78FFBE58CEFD17AA6812CF5D27EFFF3A3E9E091EEE695 F0E696E5DA8AEDE290F1E593F6EA96F1E28EEDDE8BF3E591F0E28CF4EA88EBE481E7E48CEAE799 EEE9A2F2E6A0FFEEA6F5DD8FF7DD89E7D17BECDB84F6EAA3605A3F36320FE7E2AAE5DE98EAE291 F3E98FEFE48AF0E58CE6DB88E7DB90EDE29CEADC95E9DC8EEBDE90E4D888EDE292F5EA9BEEE498 EEE49CEAE29BFFFBB9665C1EB0A669EFE39EFEF2AAEEE59FFDF4B1B7B072474205FAF5B5EFEAA6 EBE59CEAE194F8EF9DF6EA9BEEE4A1F5EDA0F2EA98FAF7B344391AB5AA7AFFFFB8FFFFB9524B18 968E68FBF7B9EEE697FAEA9AEBE08FEFE6A5ECE7C07E776D050101000000777441F4F3A5F6EB92 F4E38FEFDF91FAEA9DFBEFA0FCF1A0E8E08FEEE896EAE393F5ED9FEEE39BF1E29EF6E9A9FFF3B1 DFD384E4E58AE7EF91F0EA91FFEB9EFCC27EA46827F4E39CF1E89BEAEDA1E3DD96FBEDACF6EDAC FFF5B4F9F1ABF3F5A6F3C885995417E9BE7CF6EC9CEBEB9CF9EBA4F2E8A1E3DB93DDD68EF4EDA5 E9E29AECE59DEAE39BEBE49CF1EAA2EEE79FEBE49CEBE49CE5DF96F6F0A6EEE89CEFE99DF2ECA0 E0DA8EEFE99CE3DD90F0EA9FF7F2A5F2ECA2F2EDA1FFF5AEE2A366BE8138FFE797FAE1A2EDE79E E7E996EDEFA0E7E2A3EAE2A0F1EA96E5DD94EBE59CFDFCADF3F1A6F6F4B1A8A66BBFBB89F0ECBB 2C280C868148DDDA97E1DF93EEED9BF6F0A5ECE29BECE497F0E999F3EC9CF1EB9FEDE6A2F6F1B2 EDE7ACE3DE9FEDE8A4F5F2ACECEAADF1F0B8F4F3BCFBFBC4FFFFCAF8F7C5ADAD781E1E04676637 EFEEBCECEBBAF5ECC9C0AAA219100E000100000C000202001E0500875235C98C6FD6A580E9D29C D9DD96F5F0B3DEBF8ACB974DFFD68ADDB16AA27D3ECA9E5BFCDA94FFEEB0FFF1B3FBD98ECD953B FBEA9FFEFAB9FFFEBEF3F1B4E9E7AAEDEBB1EBEAAFF9F9BFE1DE9FF3EEAEEBE4A3EBE3A3F6F1AF F6F0B0F2EDAEF7F2B2FBF5B7F8F2B4FAF4B9F6F0B6EDE7ACEAE4AAF2EBB4E6E0A5EAE4A8F0EAAE F7F1B5EFE9ACDBD599EBE5A8F2ECAEEBE5A8F2ECAEF6F0B2E0DB9CEBE8A5F3EFA9EDEAA6EFEBAB F8F4B6F4EFB4F2EDB5EBE6ACE3DFA3ECE8ACE5E1A3E7DE9CFCDC93DBB35FEAC56BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFAF6 FDF9F2F8F7E8EAECC4E8E2ADF6E1B9FFEAD5FFFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF2F1F8D4D6C5A5C8A089C2D5BED2F6DCDCF8DCE2 CCBBEE8381FA4F4CF55241E1CB96B7E4BCBED0CCC077BC7348B14654B55380C785B4D8C8AFBCE1 ADAEEEE9E9FBFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4FAF4CDE9CDB8E1B7E3F4E3F5FBF5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFCF0F0F6D7D6E9A1A0ECA2A1F6BDBDFDD5D5FFE4E4FFF1F1FEF7F7FCEFEFF0C1C0 E79796F1A8A7F9CCCCFDF0F0FFFFFFFCF4F4F0BCBBE38383DE6F6FDA4647DA3032EB8182FAD3D3 FEF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFCDFDFF2A7A7 DD4041D82B2BDC3F40ED8F8FF9CFCFFEF3F3FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDF84F2E388 EFE085EFE085F0E186ECDD82E4D57AE7D87DE9DA7FE9DA7FE6D77CEBDC82E8D97CE2D374E4D674 E2D471DDD06AE3D670E7DA74EDDF7ADED06ED5C766E4D575E5D679E3D477E1D273E3D475EADC7B E9DB79E4D673E3D671E7DA75E9DC74E7DB74F1DF7DF3E082F1E283F4E587F5EB8BF4EB8BE5DF80 EDE686F6ED8EFAF08FF5EA88F0E482EEE583F1E785F8EE8CF6EC8AF1E786F1E786F4EA89F2E889 F3E98AF7ED8EEDE286F5E68AFFE98FA37D27F6D97EF8EA8AEAE985F0E384F9E489F9EB93F4F298 F4F39CF8E495ECDB86F8EA92F9EB93F8EA92F1E38AF4E68EF0E28AF6E890F0E28AFAEC94EFE189 F5E78FF2E586F4E787F3E686EEE181F0E384F9EC8CECDF7FF6E98AF5E889F6E989F9EC8CF6E98B F5E68CEFDF88F2E28BF6E78FF6E890F1E78CF3E78DF7E78DFFEA93BB973FE7BD69FFF0A0EFE697 F4EB9AF4E999F1E694F8EE9AF3E793F3E690F3E48FF2E28DF3E58CF2E48AF7EA86EFE785ECE78E ECE998EDE99EF0E79DEEDC90FEE99AFFEB9AD6C270E9D98AE5DC991C1A0287865CF7F4B4DED98B E6DC85EAE184EDE187F2E691ECE08FE8DF93EDE39AEFE49AF6E99AF4E798E9DD8DF0E595F5EA9B F1E89BE1D78FE3DB95FCF3B27B7134887E43F9EDA8EADE94EDE39DF0E7A4E5E0A2423C05C6C081 F3EDAAF4EEA5F0E799F2E897F8ED9AF2E99EF7EDA4F1E89CF9F0A28B7F495B5025F8F1B1F4F0A5 DBD79D2B2209DEDAA1F6F2A5E8DD91FFF4B6E9E3B85E573F0000001B18028A8853F6F3ACF0E895 EDE18EFFF0A5F8E89EF8E89DE9DB90F3E69BFEF6AAC8C075EDE59BE7DE97EDE19DEFE09FF0DFA1 F1E09EF6EA97F3F397ECF398E5E18EFAE498FFDF9ACF9955C7A055FFF8A9F3EB9EF3E7A2F1E6A4 FDF6B5EFE0A2EADF9AF1F2A3FFDD96B37634DE9C5BFFEA9FF4ED9DEEE397EEE49CEBE49CF0E9A1 F1EAA3E9E29BEEE7A0F5EEA6EEE79FF1EAA3F6EFA7F7F0A8F4EDA5E8E199EDE79DE5DF93F5EFA3 FDF7AEF0E9A0ECE69DF2ECA3EDE69FE7E099E7E098E8E29AF9E29EB7763AB4732BFFEA9BFCE6A8 F2EBA3E5E794F0F2A3EDE8A8F1E9A8F6EF9BEEE69DF1EBA1EBE997F1EFA4E8E8A4CBC98FCBC996 9F9B6B221F00E4E0A3F5F2ADE6E394D8D581D8D184D6CC84F4EC9DF4EE9AE5DF8BEDE597F4EDA6 FBF4B1F7F2B2F1ECA7F3EFA4F2EEA5FBFBC77674451B19002D29053C3916302B0C161300221F08 D6D5B2FFFFDBFCFAD5C1B99F140402584B37AAA77B939051897C38AB8F52FAE2B1C29067BA8F63 DFC18DD8C98DE7E0A7A28B55C58F4AC78A409A6422D4AD70FCEFADFAEDA7FFECADFCEBB1FCDF9C E0A351FDE79DF4EFABF3EEADF3EFAFEEECADEDEAACEAE6A9E5E1A1F0ECACFBF6B3F8F3AEF2EBA6 E9E4A1F5F0AFF7F2B1F3EFAEF5EFB1F4EEB0F7F1B5FDF7BDF8F2B8F0E9B0F3ECB5E9E2ABEFE9AE F3EDB1F9F3B7F5EFB3E8E2A6EEE8ABEBE5A7E8E2A4F2ECAEF3EEAFEEE9AAF5F1ABE6E49AE0DD96 ECE9A6F2EEAFF6F2B5EDE8AEEAE5AAE2DE9FE8E4A3DCD996DDD48FFFDF96DEB865F5D176FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAF3F4DDF0ECC6F8EBC4FBECC8F1EECDF7EFD6FFF1E2FFFBF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAF9FBE9ECC9B8DFA591D2D7B0C6F2C1C2 F2BFC1DDA6BBA979BA604DC9403ECC8A70AD919A957FBA7C51B84B55BC5088CE87BBE1C0CFE5E5 BAC3F5AFB0FCE9E9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFAFFFAE6FBE6C1E9C1B4E2B3EEF8EEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFDF6F6F4D7D6F6D6D6FDE5E5FFEBEBFFEEEEFFF8F8FFFFFFFFFDFD F8E6E6F4D1D0FADDDDFEEEEEFFFBFAFFFFFFFEFAFAF7DEDEECAEAEDE5959D72E2FD92D2DED9191 FDE6E6FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEEEEE F5B8B9DC3A3BD61A1BDA2E2FF0A0A0FDE9E9FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DA7F F0E186F4E58AF1E287EDDE83F2E388F0E186ECDD82F5E68BEDDE83F7E88DECDD82EDDE82EDDE7F ECDE7CE6D974E4D771ECDF76E8DB75DACD68C0B24FD2C463E6D778E0D172DECF70DECE70E3D475 ECDE7DE2D574E5D775E6D876E7D977EBDE7BE6D876E4D172F0DE7FEADB7CE9DB7CF1E886F0E886 EEE887F2EB89F8F08EFBF190F8EC8AF3E785F2E886F1E785F6EC8AF3E987EFE584F2E887F6EC8B F0E687F1E788F6ED8DF5EA8EFDF094F6DF859D7820F9DA7FEDE07EE2E07BEEE181F8E388F5E78E EEED92F2F198F9E595F4E38DFBEE94F5E78EF1E38AE9DB82EBDD84F2E48BE9DC82EADD83F3E58C ECDE85F8EA91EEE184F3E688EBDE80ECDF81F4E789F0E385F1E486F4E789F4E789F4E789EFE284 EADD7FEFE186F0E088EFDC85F1DE87F4E58EF3EA90F2EA8FEFE186FFF49BC9A34BCC9E4AFFE595 EEE394F1E696EDE290F2E795F5E995F4E591F1E38CF5E78FF9E991F3E48AF5E68AEEDF7FF0E485 EFE88DF0EC99F1EC9CEEE695F8E897F7E291ECD788DDCC82F3E7A2928C510C0B00D1D098F0EEA5 ECE591EFE78BEADF83EDDE88F7E899EEE195E5DB8DE5DE8EE2D989E6D98BEFE392EEE390F4E998 F2E797FAF0A3E5DB93E8E099F7EDAEB7AC7172672FFBF3ABE8DD90FAF2A9E0D794F7F3B45A5422 979152FFFBBAF0E9A2EEE598EBE290E6DC87F7ED99F8EBA4F5E9A3F1EA97E3D8992D2300C4BC84 F8F4AFECE9AE544D32898650FFFFC3FFFDC3DFD7B4534A380D04003E3A0DC6C675FDFC9EF1EE9A F4E99DF2E3A1F4E4A1F7E69EFBEDA1FAEDA2F5E9A2FBF4AE857C38DFD594CEC484F2E6A6F2E3A4 F3E3A3F6E7A1EEE38BEFED90F4F59FDFDD8CEEDB91FFEBA3F4D186A88032FCE897FCEB9FF8E7A0 F5EBA8F3F3B0EEE1A1F5E6A1EFE99AFFE89CDAA962B27130FED68DFCED9FE8E091EDE69AE9E298 E8E19BF0E9A3FDF6B0F8F1ABEBE49EEDE6A0F4EDA7F5EEA8F5EEA8F8F1ABF2EBA5F8F2A9EBE59C FDF6AEF1EAA2EFE8A1E3DC96E5DE98F0E9A5F0E9A6ECE5A2EFE9A5FFEEACB8733ABF7C34FFEA9C F6DC9FE8E199D7DB87E0E293E7E4A4EEE8A6F1EB96ECE299F7F0A8EBE99ADBDB91D6D693C9C88E EBEAB37A794D5E5C26FFFFCDE7E19DF1EB9FE2DC8BF7EEA3EBE199EEE698E6E08CD6D07CC7C172 EFE89FF8F1AEF7F2AFF4F0A8F2EEA2EDE99FFBFAC8928D6A3E38241E1909241E0F3F382E827C72 DED8C6F8F5E3CCCBB48382680F0E054C4C30E8E1B5FFFFC3FFE69AC3A151DBBB6FE3CB866C581C 725C23BB9E64C7A266937A43534008542100B67A30F1CE8BFFF0B2BDA9656D5F2BAFAC6BFAF2BF FBEEB7D2964FFBE39AF7F1A9F1EBA4FDF7B3FCF6B4F5EEAEFCF5B6F3EEADF7F2AFF4EFABFDF8B2 EAE69FE9E4A0FAF5B2FFFAB8FEFABAFFFABCFFF9BCF8F2B6FDF8BEF9F3B9EEE7B0FAF3BDF4EDB6 E9E3A9F2ECB2F9F3B9F5EFB3EBE5A9F2ECAFF5EFB1EFE8ABF5EFB0EAE5A5EAE5A5E8E59DF1EFA5 F2EFA9EEEAA8FCF8BAFBF7BEFAF5BDF8F3BAEDE8ADEDE9A9E5E2A0F1E8A3FEE7A0DDB867EFCC73 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFBFDFCF2FDFBE2F6F4CAE6E4ADF0E1B2FEE5C5FDF4E5FCFBF4 FCFCF6FDFCF6FFFCF9FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9FDCECCFAABA2EDD4A9C1 E8AFACE8AAA2E59089C86D79825A944A50AC4E53A741797239A63E51C0478CD883D0EECEF1F3FB DCDFFBBCBDFDAEAFFDE6E7FFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFFFDEFFEEFD5F8D5BEEABDBCE5BBF0F9F0FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFEFAFAFFFCFCFFFCFCFFFDFDFFFEFEFFFFFF FFFFFFFEFCFCFEF9F9FEFBFBFFFDFDFFFFFFFFFFFFFFFFFFFEF8F8F6D1D1DF5454D92D2EDD3C3C EFA5A5FDF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEF9F9F6CBCBE04D4DDA2C2BDE413EF2B3B2FEF6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E9DA7FEBDC81EFE085EFE085ECDD82EEDF84E0D176D0C166F2E388EBDC81DFD075E8D97EE5D679 E7D878E6D876E3D670E6D971EFE27AE4D76FEBDD79F5E784EBDD7AE4D674E3D574E6D877E7D978 E7D978ECDD7EE2D374E3D475E3D475E5D677EBDC7DEDDE7FEAD779F4E283F5E686F8EA89F6EC8A E8DF7DE2DD79F1EA87F7EF8CF2E886F1E584F5E888F6EA88F3E686F5E888F2E585F1E486F4E789 F5E88AF0E387F3E68AF4E78BF1E488FFF094F4DD81A27C25FEE388F2E584EAE984F7EA8AFFEA8F F6E98EEAEA8DEBEA90F1DD8DE8D580EEDF87ECDC84F2E28AF3E38BFCEC94E1D179EADA82F5E58D FAEA92F9E991E6D67EF5E88CF8EB8FEEE185F2E589FEF195FAED91F4E78BF2E589F2E589F2E588 EFE286EDE184F2E687F7E68CF2DD85F2DD86F4E48DEFE68DEAE58AECE184FFF196D8B159BA8731 FFE493F3E898F5EA9AF0E493F7EB99F5E994EFE08BEDDF87F1E188F2E388EFE083F2E286ECD97B F2E385F0E58CEDE890EEEA93EBE48BE7DB82F6E690E0CE80E0D38ECAC0862F290050512FEBECA8 E5E392F1EC90EBE283F4E68CEBDB8CF7E79CEFE198E8DE8FE7E18BE6DE8AEEE290F3E795EFE391 F4E997F0E595EEE496E8DE96E5DD99EAE0A1F5EEB37D7238F6EDA4F6EB9BF5EDA2E6DD9AEDE5A7 989255443E03ECE5A6E7E09AE1D88AF1E796EADF89F5EA92F5E99DF7EAA4F4EC9EFFFCB6867D43 6F6641EDE8B0F5F0B9BCB8860C0A00DEDCAADBD8B338331C07000048401AE8E397F4F392F4EF86 EEE48BEDE197F7EAA6E3D78FE4D789EADE8CECE194E7DD95F9F0AD908749C5BD7FC1B97BEDE2A2 E8DE97E9DC92F3E697E7E183E8E387FBF4A2ECE79DEAE399FEF0A3FAE191CAA553BD9444FFF1A6 F5E09AF9F3ADE3E9A4E7DC9BFFEBA7FAE99EFCEB9BEECD7FB1732EE9AA65F9E69BEAE693EAE796 F2EBA2E8E19BE2DB95EFE8A2ECE59FE5DE98ECE59FF0E9A3EEE7A1EFE8A2F5EEA8F5EEA8ECE59F E5DE98F3ECA6E6DF99FFF8B4FFF8B6F1E9A8FCF4B4F7EFB0F2EAABF2ECADFFE8ADB36B33B56F28 FFDC8FEED496E7E098DDE18DD3D587E2DF9EE8E2A0E4DE89D8CF86DDD58FE1DE93DADA92E1E09E A9A96CD2D39941411AA9A874F8F4B6EAE4A1FFFCB4F5EBA3E6DD97E3DB93E7E095EBE494F7F2A0 D4CF80EBE49DEEE9A6EFEAA8EBE8A3EAE89CEFEEA1D2CD94F8F4C4FEFCD1E0D9B7DBD4B9F9F3DD DAD5C2605D4926240D070602040500858A64EDF3BFFBF1AFFFE89EE0B364CB9B4EFFEEA8FFFABC 7E7941362C068A71338A611C7D5C235A40085B2C04DFBA6CFFFCB2F6E8A8DCD49161571A0B0800 5D5937FFF5C9D9AA6CE6CF87F8F1A4F2EA9FFCF4ACF3EAA3F0E7A3E9E19EF3EDA9F1EAA6FCF7B3 E5E29BF7F4ADEEE9A6F0EBA7EEE9A6F2EDABF1EBADE8E2A5EDE7ABF1EBB0EEE7B1E6DFA9F6EFB9 F9F2BCF1EAB4F5EFB5F5EFB5F1EBB1ECE6AAEEE8ABF0EAACEDE8A7FDF9B9F6F1B1F1ECAAFFFBB7 F4F1ACFCF9BDFFFFCBF1EBB4F3EDBCFFFAC9FFFDCDFFF9C6FFFEC5F9F4B9FDF9BAFEF0ABD7B366 E5C56CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FBFBE9F3F3D8F8F1CFFBF0C8EEEABC E7E7B7E8E7B8F2E6C1FEEBD5FFF7F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFD0D1FFAEADFA DCCCD9ECD3B8E4C89BE4B887E2A584C08E918E72A04A4FA24F7D8A70BD77A4DF9ED3F1CFF4FCF3 FFFDFFEDECFFC4C4FEABACFDD6D6FFEFEFFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEDFF5DFBFEABECDEDCCE5F5E4F9FDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF9E4E4E68888E67C7C EF9696F9D3D3FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFDFBE6E6F2A3A3F09286F19D88FAD9CFFFFCFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEDDE83EBDC81EADB80EDDE83F1E287ECDD82F7E88DE9DA7FE4D57AECDD82F0E186E6D77A E3D475E9DB7AEADD78EBDE78F2E57DFDF088EEE179E8DB73F0E27EEBDD7AEADC7AECDE7CEEE07E EBDD7CE8DA79E7D879E9DA7CE5D679E6D77BE9DA80E8D87FF3E589F1DE80F2E081F9EA89FBEE8C F0E684E9E07DE8E37FF7F08CF8F08DF0E684F3E686FDF090EEE280F1E484F8EB8BF4E788EDE082 EDE082F2E587F3E68BF9EC90F0E287E2D579F3E488EDD67AA37E25FFE489F7EB89F4F38EF5E787 FBE688F2E48AE5E588E5E48BEBD786E9D681F4E48BF7E78EFDED94F4E58CF2E289E6D77EF7E78E DDCD74CBBB62F7E88FECDC83EEE185F2E589F2E58AF3E68BF9EC91FDF196F5E88DF5E88DF9EB90 F7EA8FF8EA8FF9EE91F7ED8DFEED92F7E088FAE38DFAEB94EBE389DFDD80F0E88DFEED92F4CD73 B7812BFDE18DF0E595F4E999F6EA99F6EA96F6E995EFE28AF1E38AEBDC80E7D87BEFE083F0E083 F1DD82F9E78CEEE388E6E185EAE689E7E182EBE181F2E48AE9DA8CFAF2B288824B040300A7AA66 F0F4A7EBEC93E6E181D9CF70F3E48DEEDC8FF3E29CEEE199EDE694EFEB8FEDE68DEDE18EE6DA88 E2D784F3E896FCF1A1F1E89AF6ECA4E3DA97DFD597F7F1B66D6228E8DC92F2E897E1D98EF3EAA7 EEE7A9DCD698272200C7C180F5EFAADED589EFE694F6EC95F0E58BF3E797F3E7A0F4EAA3FBF8AD E7E09B39300BD8D0A5F3EDBBF9F8B96B68363F3D25242515000000534E23EAE5A7FBF4A6EBDE87 FAEE96F9ED9AECE08FE7DF8DE4DE88EAE288F3E990E8E08DF2EAA0F1E9A9574F17C1B980EFE8A9 FAF1ADF6EDA1EFE792F1E78DEDE887E9E086F5E79AE9E19AE7E69EECED9DF6E893ECC973996818 FBD387FBE8A0F1EEA5E8F3AAD7D18BF2D895FEE299F8EF99FAE490D2984ED38645FDD58CEAEA93 E8E894F0EC9FEAE39DE9E29CEEE7A1E7E09AE1DA93E3DC95EAE39DEFE8A2F3ECA6F6EFA9EEE7A1 E6DF99E7E09AEBE4A0F2EAA7F3F0AEBFB774FBF3B4F7F0B2F0E8ABFBF3B6FFFCC2FFECB4BD733D B26923FEE397FCE4A6F0EAA1E7EC97E4E899EDEAAAEFE7A5E6DF8BD6CC84DED691E8E59CD0D08A E3E4A1F2F3B4D8DA9D353600EAEAB0F0EEB0F1E9AAF0E6A4E6DC98DCD390EBE29EF0E9A0DED98A EDE898EFEA9EECE8A1EEE9A9EEE9AAE5E29DE0DF94EDEC9FEBE99FE3E19BDAD798DDDAA5E8E4B7 EFEBC3817F5E1A190A3A3B26757748CCCF9EFBFFC9EAF1AAE2D78AFFEEA1D7A960A6773A644013 7967457A7251B8AF8496824A997932EAC78C8A6734966D23F9E693F5F3A3E9F3AEF7FABDFFFFCE 9A906C1710075D4B30C9A66DDDC980FEF6A4F4EA9BFDF0A6EDE29AEDE19BF4EAA5F2E9A6F9F2AC F8F6AFBAB76EDBDA8FEEEAA3EAE5A1EBE6A2F6F2B0FBF6B7F5EFB1EDE7ABF4EDB6FCF5BEF3ECB6 F9F2BDFAF3BDF4EDB6EDE7ADE4DDA4E5DFA5EFE9ADE9E3A6F0EAACF0EBABFCF9B9FDF8B7F5F0AE F1ECADF6F3B7F8F4BCEAE3B0ECE5B7FFF8D0F7F0C8FCF5CCFDF8CDFFFED1FAF5BFF8EDB4FEF2B2 D2AF64DFC06AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFDFEFEFBFEFEEFFCFBDD ECECBFE6E6B2E6E5B1F2E5B7FCE7C5F9F0D6F5F6E3F6F6E2F6F6E2F6F6E2F5F6E2F8F6E5FDF6E9 FFF6ECFFF6ECFFF6ECFFF6ECFFF6ECFFF6ECFEF6EBFAF6E7F6F6E3F6F6E2F7F7E2F2F2E3C8C5E6 AAA3E6E1D6D8F3EBC5EBE6B4EBE1AFF2DAB4EBC5B7CCA8BA8483BB7DA2A494D196D1F0CEF8FDF7 FFFFFFFFFFFFF7F7FFCACAFEABACFDD4D5FFEEEEFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFAFFFAF3FDF3E8F7E7CDEDCDBFE9BEDFF4DEFEFEFEFEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF1F1F0C3C2 F4C6C6FCDBDBFFF2F2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFEFFF7F7FEE2E2FDDDD1FEE0CAFFF3E9FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFECDB81EBDB81E6D67CE9D97FF0E086E7D77CD3C367F3E387F1E085ECDC80E6D67B EBDC7FE9DA7BF1E382EEE07DEADD77F2E57DF4E780E8DB74F1E37EE7D975DCCE6CE8DB78E8DC79 E8DB79E7DA79E9DB7BEDDD7EF0E182E1D276EADA7FECDD82DECE74EEDF84F8E78BF3E182FAEA8B F4E686EADF7DFBF591FBF490F9F28EF3E987EEE581F6EA87FEF291F6E989F1E484F3E686F2E587 F1E487F8EB8DF9EC8FF3E689F6E98DEFE188ECDE86FEF297F4DD80AB852DFFE388FAEC8BF6F48F EBDE7DF3DF83F0E287EAE88CF1ED94F6E492ECDB84F2E488F0E286F7E98DF3E589F4E58AF7E88D ECDD82ECDD82C0B154D2C366FBEC90E8DA80EFE188F6EA90ECDE85E2D57CECE087F2E58CF6E88F F9ED93EFE289EADC84EEE387EEE484F2E285EDD77FF5DF89F6E790EDE58CE5E286EEE589ECD77C FFD980B07C28F7DA87E9DD8AF1E594FBF09CF5EA96F7EB94F1E38BF9EB92E6D67DDBCC72F1E386 F0E185EDDB80F6E48DEBDD88E6E084F1EC8EF1EB8AECE481EFE388F0E399ECE4AF413C232B2B00 E6E9A2E2E692E9E98DE7E281E3D97BF1E28BF4E297EEDD98E7D88FE9E08DE9E487E4DD81E7DB86 E4D883E3D783F3E896F8ED9CEEE597FAF0A6E7DE99F4EAABF8EDB1786E32D6CB83ECE292EAE193 E9E29AEBE5A1FFFFC2544C118F874ADCD393E0D68EEDE396EEE390EEE38DF3E596ECDE97EDE2A2 FBF4A6F7F3A7776F3E928B69FFFFD6CCCD894B48210000000000003E421DD2D28FF1EDA3EFE09B FAE7A8EEDA99ECDD8EECE287FBF594FCFA9CE0DA7CFEF69EE8E18FF0E9A1ECE4A4282100ABA36E FFFDBEEAE29CF9F09FF2EA8FE6DF7FEBE787F3E992FFF0A6F4EBA7F1F3AAE9EE9DFFFAA4FFE691 CB9646BF8D41FFEDA2F7F0A3F2FEB2F1EBA3FBDE9BECCC84E7E48EFFF59DE5AD62C77332FAC87F EBE893F3F39FEFEB9EEBE39EE7E09ADED992E2DC98F0EAA5EEE7A3EEE8A3EDE5A1EDE6A2F5EEA9 F2ECA7F2EBA7F3ECA8E7DF9DFCF5B7C9C1851E1600CCC586F2EBABFEF7B9F8EFB4F8F1B8FFECB2 D98E58B56A25FEE599FCECADF1EDA6F2F4A6F8FAAEF6F3B3F5EEAEF5EE9EEDE49AF5EEAADBD894 F1F0AEE8E8A6F8FABAA9AD6E5B5E25F7F7BBECEAADF4EFAFF6EDAEECE2A0E7DF9FE5DD9CF4EDA6 E8E196DAD488E9E59CEAE6A2EEE9ABEFEBACDFDB9AD4D18AE1E094FBFCA4ECEC95EBEA99DBDA91 D0D08EECEAAFE5E5ADE3E4ADF5F7BBF8FCBDF8FDBBD8DC95E8E79EFEF5A9FAE398D7B06EB18B5A 9F81642A14070D00006E5E46CDBE92F1DE9EF8DBA2F6D09DEBC67DFDF2A5F6F9BAE2F6B5E7EDAE F8F0BBFCEFCBC2BB9D0E02004C350DDBC77EFFF6A4F2E595FEF1A5F2E69CF0E59EE8DE98EFE7A0 EEE7A0E5DF97EEEBA3E8E69DEBE7A2F1ECA9F0EBA9F5F0AEF9F5B5F8F2B5FBF8BAF8F2B7FBF5BD F3ECB6FCF5C0FAF3BDE7E1A9ECE6AFE9E3AAECE6ABF3EDAFE0DB9CF1EBADF5F0AEF6F1AFF8F3B1 F9F4B2F9F5B6EEEBB0FFFDC9AFA87B3B351D948E69FAF9D5FAF4CFECE5BCF5EEC2F3EDBDFBF1BE FEF3B6D1B168EBCC78FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB FEFEF4F8F8E8F6F6E3F6F5E1FBF6DBFBF3CEEFEBBDE5E5B0E5E5B1E5E5B1E5E5B1E4E5B0ECE5B8 F9E5C4FFE5CBFFE5C9FFE5C9FFE5C9FFE5C9FFE5CAFDE5C8F1E5BCE7E5B2E5E5B1E6E6B1E2E2B2 BBB2BCA390C6DFC7C3F9E9CDF9F5DDF8F8E6FBF6E7FBEEE7F1E4E8D6D6E8AAD3B38ED888CBEFC7 F8FDF8FEFEFEFFFFFDF7F8FECBCBFEADAEFDE1E2FFF8F8FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFAFEFAECFFECD7F6D6C4EBC3C1EBC0D2F6D2EDFCECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFB FAEEEDFCF0F0FFF7F7FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF9F9FFF8F4FFF9F0FFFDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE8D47CEAD67DF0DB83F2DF84F2DF83E1CE71AD9A3CD5C264FEEA8BE9D775 F0DD7EF0E183EADB7CECDE7DE8DA77E1D370E5D873E7D976E4D675EFE181EADB7EE4D67BE1D579 E8DD81EADF85E0D579DFD576E7DA7BEADD7DE7DB79E8DC7AF1E380EDE07CDED06DF4E485EDDD7F F2E185F7E68CEDDE83E7DA7EF1E486F1E785F7EE89ECE37BF0E87DFEF58CEDE081F1E486F3E688 F8EB8AFCEF8FFDF090F3E686EEE181F2E587F9EC90FAED91FDED94F0D881A78933FFE990F6E587 EBDF7FEFE384F0E385F1E78BEFE78DF0E68FFAED99F6EB90F7ED8EF1E68AEEE389F2E78DECDE86 F1E38AF8EB8FECDF81F3E485C5B757EEE080E7DD7FE8DE81EEE588EFE58AE8DD83E2D97EE7DC83 F7ED94F4EA91E7DD84ECE08AF8EC93F4E38AF3E288F1E189F8EC92F7ED94EFE88FF0E68FFBEC94 F9E28EFFE796D5AC5EE2C673F5E78EEFE68DEEEA8FEDE98EF1EC91F3E98FEFDF8BF6E591FEED99 F5E794F0E590E8DD84F3E797F1E59EDED383EFE895F9F29CF4EC88ECE58AFFF7BBC0B1A0130B03 838134FFFEABEAE48EF3ED95F5EE96F2E994E6DB8AE7DA8CE9D98CE9D98BF1DF8EF2E28BE6D87E E3D679EFE188F3E88EF7EB95F2E893E3DA8AF4EB9EEAE29AEDE6A0F5EDAC847C41A1995BFEF7AF EBE690DCD97CEFEC90FFFCAA978D4D594D26F8EDBCE1D49CE2D895FDF4ABF6E1A6F8E5A9EFE09F EEE4A0F1ECA1E6E69DCFCE924341158580621812031005020702004C4D1EFCFDBAE7E1A1E5DB99 DDCE8BEDDC92ECDB87F4E78BEEE389F1E996ECE39AFDF5AEE6DD99F6EDAEF4ECB2B6AC78231900 D6CC94F4EAACF4EBA4F4EC99F8F094DED576EEE591FBF0A2FCF0A5F4EAA2F1EAA1F0E99CF3E596 FFEFA0F7CF7FBA8A3AF1D080F7DD88DFEC90FFF9A9F8DA97F3E19CDCE08FF1EE99FFE697D38940 C68B40FDEA9EF1DF9AEADD98EADF98D4CD87DBDA93ECEDA9EEECACF5EEB0E9DFA2EEE3A5FAF1B0 F4ECABF3EFACF1EDA9DED78EE4E097FFFFCD80785E241F00E7E6A4DFDD8FE9E399F4EBB1F8EFAE FFF0A9DF9D5EAA5B13FEDA8CF5EBA4F3FABDF1F1B5F4E6A6F3EEAEF3F1B6F3EDB1EDE9A1EAE79F E9E6A9E8E6A9F5F3B6E5E4A76666288D8D4FEAE9A9E9E9A8F5F3B3F2EEAEF0EBACF8F3B2F2EDAB E4DF9DE6E19DEEE9A5E5E09DEDE8A8EAE4A7FDF8BAF5EFB1E4DEA0E2DD9CE5E198EFEBA3F0ECA5 DDD895D3CF8EDCD798E8E4A5F3EFB2F0ECAFE7E3A6EDEAABE8E4A5EBE5A4E8D891FFE79ED39854 B69551FFFFC9EEECC0917B621B0B002C2B0DDAD1A3FBE9B1D4B876614708A89771EEE7D1F0F5CF FEFFCFECEEB1ECEBB6FFFEC6A19A6E000000AB9353FFF39FF6E496FEF4ACE5E098F8F4ADEFE99F EDE59AF0E89DEBE39AFEF9B3EBE8A5F4EEB0EDE7A9EEE8AAF7F2B2F7F2B2F3EEACF3EEACEDE8A8 F2EDADFBF5B7F4EEB1EAE4AAF5ECB5F4EBB4ECE5AAE7E2A2F0EEAAEBEAA4F5F3ABF1ECA8F6EFAD FEF9B8F8F0B1FDF8B0ECE9A3F8F7C1DAD6AD1713001E1A08EBE8BDEFEDBAEEECB5F2EDB6F6F0BD F2E6B7FEE5ACDABC75F7E08DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCFDE4F0F0C9E6E6B5E7E7B6E7E7B6E7E7B6E6E7B5 EDE7BCF9E7C8FFE7CAFFE7C1FFE7C0FFE7C0FFE7C0FFE7C0FDE7BFF2E7BBE8E7B6E7E7B6E8E8B6 E4E3B7BCB3C0A391CADFC9CDFEEEDFFFFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6F5D0AAE4A1 C1EABDD8F0D8DEF2DDECFAE9F7F9FDCCCCFFAFAFFFEBEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAF9FAEDF2EDD2F2D2BFEEBEB9EAB8CAF2CAE9FEE9F8FFF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEAD57DF6E188FDE88FF8E489FBE68BEDD87BC2AE50A99536D8C563 F4E17EF1DF7FEBDB7EE8D97DECDD7EE8DA78E2D471E2D471EBDD7AE6D877E0D174F4E589EADA82 DFD37AE5DB82EBE188EADF86E1D67AE0D778DFD373E1D673E6DA76EADD77ECDF77ECE078F5E584 F7E789FBEA8FF4E389EBDB82F0E186E7DA7EF1E584F4E784EAE178F0E87BF2EA7FF9EC8EF7EA8C F4E789F5E888F6EA88F7EB89F3E785F1E484F6E989FAED8FF7EA8EFBEA92EBCE7B977D25F9E68E FFEF93F3E384F1E485F0E687F0E78CF1E58EF0E38EF3E792E9E084EDE485EFE689F3E88EF3E88E EADF86ECDE85F1E488EEE182FDF091D3C563EADE7BE5DB7DEDE487F1E88BF6ED92F3EA8FE9E085 ECE289F1E78FF4EA92F4EA93F4EA93F6EA91F6E48CF6E48CEEE287F1E88CF1EA90F5ED94F7EC95 F9E692F8DF8EFFE597C9A558DBBF6BFAE88DF1E689ECE88AE9E78AEDE88DEFE48CEFDE89F4E18F F5E494EDE290ECE492F4EA90F4E89AEDE09CF3E79EF3E79BE4DB8BF2EC8EE3DD89FEFBC764564F 292202D1CC77EDE189FBED97ECE18BF0E594F2EA99EAE291EBE091E9DC8DE7D786EBD988EAD884 E2D37AE2D87BEADE83EFE48CF6ED96F4EA95ECE492F5EC9EEBE398F0E89FFBF4ADAFA962716925 F7EFA6EBE68FECE887F1EC92F1E99FE0D69F55491ECFC297ECE0A7EFE89BE7DD89F7EBA5F1E09F F5E8A8F1E8AEE6E0AAE3E1B2B7B58B23210D0000000F0900373123A8A17D47440BC2BF7CEEE7A3 DED68DFDF0A4E7DA88DDCF7BF6EE9AE7DB89EDE596F4EBA1EAE2A1F9F0B7F0E7B0F4EFB72E2406 706441FFFCC1EDE3A2F1E79FF4EC9CE0D87FF2E98EEBDF8DF2E89BF0E89CEBE397EFE79BF3E79B FEECA0FCE195FFE796D7AD5BB88432FFE088EDEE8DFCF19EFBE8A2FAF1ADE9EAA0EEE799FFF7A6 E9AF61AA6F25F0C680FFF5B3F5E19FF6ECA5EFE8A2F1F2ACEFF3ADE2E2A2EDE8ABF0E6A9F6EAAD F9EDAFEDE6A4F0EDA9F9F5AFE8E198E9E69EF8F4C72E280F747053F9F8B8EDEE9EEFED9EF5EBAC F8EDA9FEF0A5F0B572BF6F26FFD78AEEE79EEAF3B9F7F5BEF7E4A6EEE8A8EDEDB1F4ECB9F0EDA4 EBEBA0F4F1B5F8F5BAE9E7ACFCFABD555315BCBA7AF4F2B2EFEDADF5F3B1EFEDABEEECAAF1EDAB F6F1AFF5F0AEF0EBA9F3EEACF3EEAEF1EBADDFD99BECE5A7F5EFB3F6F0B4F2ECAFE6E1A2ECE6A5 EDE8A7EBE6A4E3DE9DD2CD8CF0E9ACEDE7A9F3EDAFEFE8ADF2EBB0F3EDB2EAE0A9FFF9B9F1D593 C58344F0D38CF7F8B3F2F7C1FFF3D3BAAA880409006D693FFFF8BCD0B972543F16382513211309 332F1B6367499DA368E7EBB4FDFDBEF8F5C1483A2B5E4405FFED9AFEEEA2F3EBA3F9F7B2EDEAA4 F8F4AAF7EFA3FAF1A3F1EA9FEFE9A4FCFAB9FCF6BBFCF6BBF9F3B5F6F0B2F5F0AFF7F2B0F9F4B0 F3EEACF3EEACF7F1B2F8F2B5F6EFB4F6ECB6F5EFB5EEE6AAEFEBACF0EFADF5F5B0F5F5AFF3F0AC F8F1B0DDD593E6DD9BF3EFA6FEFDB7F3F1B9EAE6BF1D1A005F5E46F7F6C7EFF0B5F5F5B5EFEAAF ECE6B2FCEFC2F8DEAEC39F63EAC680FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDFDF7FCFCF5FCFCF5FCFCF5FCFCF5 FBFCF5FCFCF6FEFCF6FFFCEDFFFCDDFFFCDAFFFCDAFFFCDAFFFCDAFFFCDCFDFCE9FCFCF4FCFCF5 FCFDF5F8F8F5CECEF5B0ADF6DDDBF7F8F6FAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9 EBF8EAC9EBC8B3E1B2B2E0B1C9E7C9E4E9F1C4C7F7AEB3F6E3E8F8F6FBF8F8FDF8F8FCF8F8FCF8 F8FCF8F8FCF8F7FBF7E9EDE9D6E0D6BADFB9BCE9BBD1F7D1E9FEE9F9FFF9FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D077F2E187F7E38AEBD87DEFDD81F1DE80E7D475D5C464 D1BF5EDBC966F4E385E8D97FE8D97DEDDE80EEDF80EFE07FF3E581ECDE7BE1D272E1D273E5D679 E3D478E2D67CDBD077E4DA80EEE488E2D77BE3D97AE0D374E7DA79EFE380EFE27EEADD76E5D972 E8D876F0E081F5E586F0E082EFDF83FAEB90E8DB7DF6E98AF3E784EAE27BF8EF86F0E77FFBEE91 F6E98BEFE284ECDF7FEBDF7DEEE280F5E986F4E787F7EA8BF9EC8EF6E98DFAE68EF1D380A68C34 FDE48CF5E286F2E383F2E586EFE586EFE78CEFE48DF0E48EECDF8BF3EA8EF3EA8BF0E78AF0E58B EFE48BEBE087EADC83F2E48AEFE284F7E888D7C967ECE07DE3D97AEDE487ECE386F4EB90F9F095 EEE589EFE58CEDE38CF3E992FAF099F8EE97F2E68DF0DF86F3E489EEE286ECE386F0E98EF6EE94 F2E78EEEDE87F8E08DFFEB9BD4B263D6B862FDE589F7E789EEE586EEE98BEEE88CF4EA8FF3E28C F2E08CF5E492F1E793EDE690F6ED91F6EB98FCEFAADFD18FE6DD92F4ED9CE6DF8CFEF6B0CCC28F 180E00928C57EFE899E2D37CF3E38CF1E38EEFE491E2D787E5DE8DE5DC8BE5D98AE2D684E7D986 E9D984E8DB85EDE58CECE18CEDE38EF5EA97F0E895EDE594ECE394E5DC8EE9E096F3EBA0D4CC80 4A4202ECE497EBE491EEE893EBE497EEE6A9FEF5CB716542978D61FFFEBBECEA90E5E37DE9E182 F5ED9AF1E9A9FBF3C6CBC3A9696153120C05080300070200868353F0F0BDFAF4C27E7650413B0D F8F0A9EAE38EDED37BEFE390BAAD62DACD86F8EEA5EEE695EDE991F3ECA7EDE3B0E2D8A2524726 0E0502D4C98CF1E7AAEEE5A1F1E79EF0E799EDE492F2E794F5E997F8EC9DF1E798ECE696F4EC9F F8EFA2F6E799FFEEA1FCE293F5D180B18735D5B15BFFF59AF3E994FCF7AAECE5A2E4DB98FBECA4 FEF2A2FED98AB47D33D39A56FFF2ADFDE8A5F9EDA6F3F0A9F2F4AFECF2ACE8EAA8F2EDAFF6ECAE FBEFB1FAEFAEEFE9A3F2EEA7F8F4ABEBE6A0F9F4B59F9B6B110C01D3D2A9F8F6BAF0EDA4EFED9F F2E9A2F2E9A2FEEDA4EDB671C7792DFFD989F7F3A9EBF2B6F5F3BAFFEEABF3F0ABECEDAEEDE7AF E9E59CE9E89BECE8A8F5F1B4F0EDAEE3DF9F595516F2EEAEF3F0AEF1EEABF7F4B1F0EDA9F1EEAC EBE7A5EFEAA8F3EEACF1ECAAF5F0AEF9F4B4F9F3B5E6E0A2ECE6A8F3EDB1F9F3B7F7F1B4F6F1B1 F6F1AFEDE8A6F2EDABF7F2B1E5E0A0F9F3B5E0DA9CEFE9ABF3EDB1EEE8ACEDE8B0E7E0B0BBAC78 512B077E410EB89D60F7F7BDFCFFD5FBEAC8FFF7D28285544B480CF4E5A4DBBF7DC7AF69F1E8BA CDC0A394906A67693E3639061C1B0B625E2CFCF6C3AFA683856928FFEA99FFF1A7F8EFA9EEEBA6 C5C27CEFEBA2FCF4A9FDF4A9FAF2A9E3DD97F8F5B5FAF4B8FBF5BAFBF5B7F9F4B4FAF5B4FCF7B5 F7F2AEFDF8B6FCF7B7F6F0B1F5EFB3FAF5B9F6EFB2F3EBB0FAF4B9FDF8BDFDFCC1F5F4B8F9F7B9 EFEBACFAF6B5FAF4B0EBE29DF4EFA8FDFCBAEFECBBFFFCD75E5C3F4A4934FAF9CAF4F5BAF6F6B5 E5E1A4D3CE98EBDCADFEEEC3C99966F5CB8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFF1FFFFEFFFFFEFFFFFEFFFFFEFFFFFF0FFFFF8FFFFFF FFFFFFFFFFFFFDFDFFE0E0FFC4C4FFC5C5FEDADAFEF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFEFCE6F6E6D1EBD1C3DDC6B0C3C59BA6CD9CB1CDA8C7CBC2E2CBCBEACBCCEBCBCBEBCB CBEBCBCCEBCCCCEBCCCBEBCBC4E3C4C0DEBFCDE8CCDDF3DCEBFCEBF7FFF7FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D379ECDE82F1E186EADA7EEFE184EEDE7FDACA6B EFE180FAEB8AE0D070E8D97BF0E18AE8DA83E8DB81E8DB7EEEE280F7EB88F3E783E7DB77DED270 E2D575ECDF7FEDE185E1D77EE7DE83F1E78BE8DD81EBE182F1E485F0E382EFE380EFE27FEBDD7A E3D671E4D56FE7D873EADA7AF1E181F8E98BFAEB8EF3E789F9EC8FF2E485E9DF7EFDF390F3E987 F8EA8EF3E689EEE183EBDE7EEADD7CECE07EF7EB88F4E787F4E788F7EA8CF8EB8FFDEC94F6D986 AC913AFDE48CF5E286F3E484EFE183F0E687F4EB90F4E992F6EA94F1E590F1E88CF0E788F1E88B F1E78DEBE087E5DA81E4D67EFAEC93FDF092F0E182D6C866E8DC79EEE388EFE68BEAE187EFE68B F6EC93F0E68EEEE48BEFE58EF1E790F4EA93F2E893F1E58EF5E589F7E88BF5E98BF0E687EFE98B F7F092F7ED92F3E28AF9E28CFFE794DFC06EC5A34DF3D379FCE487EFE081F1E788F1E889F7EA90 EFDE87E8D680F1E18CF3E992E5E086F4ED8AF9F198FFFBB481763A968C48E9E292F1E9A5F5ECB8 7166381D1504D2CB86F5EBA0D8C36EFAE992FEEC98F4E391EDE292F2E797EDE594ECE493ECE290 F2E793F3E894F2E894F3EC9CF0E898EEE696F3EB9AF1E998F5ED9CF2EA99EFE494EEE293F2E899 ECE193574D09D4CA86FCF4AAF2EB9BE6DF93EEE6A6FAF2C0A19A6B514B18FFFFBEEFEF99F7F996 E6E385F3EFA0EDE8ACA0987731281B0200000A03017E776667633BA09C62E9E79AF4EEB0E9DCBB 170B07A59B58E1D987F4EA91E4DA86EFE69AF3E9A4E7E099F1EFA1E5E390EDE6A8F6EABD786E3C 0E0500877E3FF4EAABF5EDA9FEF7AEECE298DFD68BF3E99DF1E699F4E896F4E996EAE290E7E08F EFE898F2EA9AF5E99AFFF3A6E8D184F5DA8BDFBF6E997322F9D883EFE991EEF4A3F1EEAAF9E8AA F5E3A3F2E99CFEEB9EE2B46BBF813DFECC87FFF4AFF2E6A2EFEBA7EFF2ACE9F0AAF0F5B1F3F1B0 F1E9A8F4E9A8F9EFAAF6EFA7F2EFA4E3E095EAE5A4FCF8C22F2C005C592EF3F1B9F7F2B8F2EEAB F4F1A5F4ED9DF0E89EFEE9A6F1BC76C47A2BFEC877FCFCADEDF1B1F2EFB3FEEFA9FAF9B0F1F4B2 E8E2A8E6E396EBE899F5F2B0EAE6A7F4F0B0D4D18EA3A05DF7F4B1F8F5AFF6F3AEF6F3ADE5E29B DDDA95EFEBA8F4EFADEFEAA8F0EBA9F8F3B1F4EFAFF4EEB0F6F0B2FFF9BBF2ECB0F0EAAEF6F0B3 F6F1B1FCF7B5F5F0AEF3EEACFBF6B5FDF8B8EAE4A6CBC587E4DEA0F9F3B7F7F1B5F5F0BAF8F4CA F6E5BBA17D563403052910011B1B00757C53F3E8CAF8F6CEE6E7ACF3F3AAFFFEBDD6B878C4AA5E FDEFB1FEF1C1FFFFCDF0F0BAFFFFDBB1AD91595327BAB27DE7D7AABA9E5AFFE595F7E39AEDE49F ECEAA6D4D18DDAD68DECE59BE6DD92EFE79EE8E29EF0ECACFAF4B8F4EEB2F7F1B3FEF9B9FFFBB9 FCF7B2F2EDA9F8F3B1F7F2B2F4EEB0F8F2B6FCF5B6FBF3B2E7E0A2928D54ABA571FEFED0F8F5C3 FEFBC7FDF8C0F9F5B5FAF3ADFAF2A9FFFEBAE2E0A4F8F4C9FFFFE2C0BDA2151400D5D4A6FAFBBF F2F2AEEDE9AADBD49CF1E0AEF6C891B07C3CF6C680FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFFF0F0FFD9D9FFB0B0FDB6B6FDD8D8FEF2F2FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F5F8D8D9E7A2A6CF6D78B88AA9B2B1E1B0AEE1ACACDFABACDCAB ACDEABADE1ACB0E1AFB2E1B1B2E1B1B2E1B1BBE5BAE8F6E7FDFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D67AE2D67AEADD81EFE285EDE283F4E788 F5E789E5DA7AEADE7EEADC7DEEE185F4E592ECDD89E7D881E1D478E5D879EADE7BF3E783E7DB77 CDC15DE7DB77EBDF7EE0D679E5DB81EAE186EADF83E2D77BE3D97BF2E688F0E382E9DD7CEADB7B EDDF7DF0E280EDDE77EADB74E8D975F2E27FFBEC8BF5E688FCEF91F7EA8DF5E88BE9DF82F9EE90 F2E889F9EC90F8EB8DF6E98AF3E686F1E483F0E482F2E684F3E686F4E788F8EB8DFDF094FFF49C F3D7849E832CF8E38BFFF297F8E889E8DA7CF2E889FBF398F6EB94F8EC96F5E894E9E085E9E082 F4EB8FFBF097F2E78EEADF88F7E991EEE087DBCE71D3C467DBCC6CF4E886FAEF94F1E88DF4EB90 F5EB91F3E990F6EC93EFE58DF0E690F3E993F5EB95F3E994F2E58EF0E284F1E485F5E98AEEE586 E9E082EAE184F1E78AF7E68DF6E08AFAE18CF4DA85BC9841F0C96FFFEB8EF8E485F6EA89F4EB8B F8EC8EF5E58CF0DF88F4E38CF6EC94EAE489EAE580F8F194FFFBB36356255E562CEAE599F0E8B2 D2C7A11C1300635E1EF6F0A3F1E29CE2CA74EEDA83FFEB96ECD987F7E997EEE493F2EA99EFE796 EBE492EFE693EEE590EAE292F0E99EF4EDA2F0E99DF2E99DF2E99BF7ED9DF4EB9AF1E594EBDF8F F5E996F9EB9C75662D8B7D49F8EDAAEFE898EAE48FEDEA97F6F2ACD0CD8F302D01BCBA81FAFBBD EAEBA8FBF9B7E2E1A576733F0E0A000A0400332D16AFAB8FF6F3CFE1DBAB3A3504EAE6A3F3EEAF FFF0C7C7B98A372B00E0D692F8F0A5EDE695EFEA98F7F2A3EDEA9FF4F2ADF0EDB0F0EAB97F7348 0E03005C521FF3EBACF7EEA9E7DF95E6DE92EBE297F0E79DEEE39DECDF98EFE391F1E590EBE38E ECE490F1EB98F0EA99F0E897F0E495F1E093F9E89AFFEEA1D1A95BC38B3CFFF9A3F6FBAAE5E69E FFF3B8FCEAADEEEAA3F1E79AFCDC91C88D46D99B55FFECA8EFE09CF0EAA3F4F5AEEBF1AAEDF2AB ECECA7EDE8A2F1E7A1F4EBA2F4EEA2EFEB9DF4F1A6F3EEB0A7A06F030000B8B675FAF9B7E4DEA6 E4DEA2EFE89DF2EE97F6EFA3FEF4B2F8D58CCD8634F6B864FCF6A5E7E9A6F3EEAEF1E298F1F1A5 EFF5AFEFEAAEECE598EBE596F6F2ADE2DE9DF0ECA9F5F2ACFFFCB6EDE9A3EBE79FEFECA4F1EEA6 E3E096DEDA92F7F4AEFAF5B3F0EBA9F3EEACF9F4B2EDE8A8E4DEA0EDE7A9FDF9BAF3EDB1F0EAAF F3EDAFEBE6A6EAE5A3F2EDABF5F0AEF3EEADF7F2B2FBF5B7E5DFA1F4EEB0FBF5BAFAF4B8F8F5BE F3F3C7FEF2C7ECCDA2B380569F865B8C8B674F54394C4227A59973F8F4BEE4E498FFF9B7E6C387 CAAE5AFCEB9EF6E9A6F7F1ABE4E2AAC3BE9DD6CFC3FFF5D1FFFFCEE6D9A7B89C56FFE799F4E29A D9D08BF3F0AFE3DF9CDFDB93E0D88FE1D78FE6DE96EEE8A5F4F0B1FAF4B6F4EDB0F4EFAFFBF6B5 FBF6B2F6F1ADFBF6B3F8F3B3F8F3B3FCF6B9FDF7BCFAF6B6F7F3AFFBF8B7958E5E201C02908B60 FCF8D1FFFCD3F9F3C1FCF6BCF8F4AFFAF4AAF5F1AFF6F6C5C0BD96A19D81FAFAE23434258F8F61 FFFFC4F1EEAAFFFCBBF7EFB4FFFDC7F0BF80BC843CF9D789FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFECECFFB8B9FD9394FC8889FBB8B8FCF8F8FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECFDC1C1F7ABACF1B9BDEBD3DCEAE5F7E4D3F8D3CDECCD CCE0CCCCE9CBD2F5D2E0F7E0EAF7EAE9F7E9E9F7E9ECF8ECF8FDF8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEADF83E1D57AE7DC80F0E587E4DA7B E8DE7FE9DF80E2D878E5DB7CE3D97AECE088F0E091EFE08FEEDF89E6D87DE7DA7CF4E786F6EA86 E3D773E0D470E8DC78DCD06ED2C96AE4DB80EFE68BEAE084E6DB7FE4D97DE0D375EBDE80F5E889 F0E182EBDC7DEDDF7DEADB74ECDD75E8D972EFE07BFBEC88F6E887FFF595F7EA8DFDF094EFE48A F6EB91F2E78DFAED91FBED90FBEE90F8EA8AF2E684EFE381ECE07EF3E686F9EC8DFCEF91FFF296 FFF199F4D784A58A33F9DF87FCE98DF6E787E3D677EDE384FBF297F0E58EEEE28CEDE18CE7DE83 DDD477DDD479E5DA81E6DB82EEE28CF8EA92E1D27AD8CB70ECDD80F6E788EBDD7DFAEF93EFE68B FDF499FBF198EEE48BF7ED93F2E891EEE48FF4EA95FEF49FFBF29DF4E891ECDD7FEFE282FDF191 FCF293F5EC8DEEE587F6EB8FFEF195F0DE85E9D37DF9E08AAE8630E6B961FFE78BF4DE7FEDE07F EADF7FEDE182F8E98DF7E68EEFDF87EEE58BEBE689EFEA85FAF798FEF7AB867C49534C1AECE9A3 ECE3B86A5F46060000CECB65E6E08EF3E39EDCC06B92761DF5DE87F1E18DF1E28FF3E896F1E898 EEE796E9E391EDE793ECE48FE6E092EEEAA3F9F2AAF1EAA1EBE39AEBE196F4E99BF6EB9BF0E492 E9DB88FEEF9CFFF5A4BBAA796C5D33F3E8AAE3DD8AE5E283E2E482E3E68FF2F3AB4C4C1767653C FFFFDED6D5B58785643330170B090025250084834FF1F1B7F2F1B2F3EFB2F2EDB0726C34877E46 FFF8C0F2E6ACFFF2BF645836857950F4ECACECE79CE6E590F8F8A2E3E39BFFFFCFD9D5AE4F4729 0F0301463C15E7E1A7E8E09EEEE69DF6EEA1F2EB9BEAE195ECE29AF7EBA8F3E5A2E7DB88ECE188 ECE28BF0E894F5F09BF1EC98F1EA99F6EE9FF9EE9FF3E597FAEA9DFDE89DC28237DEBF6EFDFDAD EBEFA3EBE0A2E7D79CEDE3A4E3DF96FAE89BD4A85DB9732DFAD18BEEDC97EAE098ECEAA2E8EDA3 EDF3A9EAEBA3F4F0A7FAF1A7F4ED9FF2ED9CF3EF9FEBE8A1F0EAB55B523D342F00ECE9A1F0EFA0 F6F0B5F1EAB0F3ECA3F0EC91F2EB9DFEF3B3FADC91DB9845FCC06AFCF8A7E4E19FF1ECAAEADC8F E5E797ECF3ACF8F2B6EEE599E4DC8DF6F0ACEAE5A1F6F2ADE8E49DF1EDA6F2EEA6E9E59CEAE69D EBE79DDEDA90DEDA90EAE5A0ECE7A5EAE5A3F0EBA9F5F0AEEAE5A5DCD698DDD799EDE7A9F3EDB1 F7F1B5E7E1A4F6F1B1D5D08EDCD795F2EDABF1ECABF4EFAFF4EEB0F5EFB1F9F3B5EEE8ACF1EBAF F5F4B9F8FAC3FFF2BEBB95658F6439442F0581805DBDC2AAEBE5D1D7CCACFAF8C7F2F1ABFBEAAC EDC68BD8BA61FEF297F9ED9AF7F3A1F7F2B84F482C160A0A4A4021CBC08CF6E6AFB89C55EED286 F7E39DE6DD9CF3F0B0D6D391DDD893D1C882EFE59EDED590D1CB89D5D192F0EAABF0EBACF0EBA9 F0EBA9F2EDA9F5F0ACF3EEACF4EFAFFBF5B8F9F3B7E2DCA2D7D190E3DE95EBE6A4F8F7C56A653B 0B06007E7859F7F3D1FDFDD5EBE6AFF2EDABFAF4AAFEFDC0D9D8AA120E001916049B9982464531 5D5D2EFFFFCAEDEBA5FFFDB9F8EFB3FFFEC6F3C084CA9551FCE49EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFD6D7FEB2B3FD9A9AFCAEAEFDD5D5FE DADAFED4D4FEC4C4FDCCCCFDD8D8FEDBDBFED4D4FECBCBFDCFCFFDE4E5FEF3F4FDFAFEFAECFFEC E8F6E8E7EDE7E7F4E7EBFDEBF6FFF6FEFEFEFDFEFDFDFEFDFEFEFEFEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7DE7FEAE282ECE387EAE184 E6DD81E0D77AE7DE81E4DB7EE4DB7EEAE285EDE48AF0E493E3D785E8DC88E8DD84E5DA7EE8DE7D DFD674DDD371DED472E0D675E3D977D8CF70D3CA6FE2D97ED5CB71DFD47AF3E88CEDE084EADD7F EBDE80ECDD80ECDD80F7E88AF1E27BE8DA70E4D66DD7C861E7D874F5E785FCEF8FFDF093FCEF93 FEF49AFBEF97EDE289FAEC92FFF698F8EB8DF8EB8BF8EC8BEFE381F3E785F7EA8AF7EA8BF7EA8B F9EC90FDEB93EFD07D997E27FDED94FDEB8FF6E787F2E586F8EE8FF5ED92EFE48DF2E690F4E893 EEE38BEAE186F3E990E9DD87DFD37DD5C973E3D47FF0E28AFEF196EFE084DACA6BDFD173F4E990 E5DB82E8DE85F1E78EF1E790EDE38CF3E995FEF49FFDF49FFAEE9DF5EA98F0E48DF2E487F7EA8C F5E98BF9EF90F8ED91F0E58AEBE086F2E38AFBEA93F7E38DF0DB85D2AB55DDAD55FFEF93F0D679 F3E483F7EC8CF7EB8DF7E88CF1E189F2E28AEBE086ECE48AF0EA89EEE98BFBF5A7BBB4803B3604 E0DEA1E4DFBC251B0F3D360AF1EE85F3EC95EFDD98E5C870E0C46AFFE68EF6DF89FFF19FF4E794 F6ED9AEDE695EDE795F4EE9AF1EB95FAF3A5ECE7A0EBE49CEFE89FEDE59CF1E89DF1E698E4D989 E7DA89F5E794F0E28FF8E998FBECB34C3F0DD7CD8CECE495E4E189E7E78EF1F3A3F4F5B6ABAB7C 1C1B0352503F211F1500000014120E54532CCFCF96FFFFBDD7D887E7E691E3E092E6E29CC1BC86 342900ECE2ADF3EAA7F5EBAFD2C78F201600BEB87FF5F2B1E5E59DF0F1A9F3F3B8CFCCA23F3925 040000574D1CE7DEACFFFABDF0E9A4F4ECA1E7E192F5EE9EECE397EEE49CF1E6A2FCEFABF6EA98 F3E890F8EE97F8F199F5EF98FAF49EF0EB97FBF5A4F1E899F0E79AFDF3A7FFEEA4E8BC74C3994C F0DD8FEAEA9DE2DF9BE3D698F5E1A8EEE7A2F6F0A4FAE091D9934DCE944FFFE6A0F4E199EBE59B DCDD92F1F4A8E9E99FF2EEA5F3EAA0EDE698F1EC9BF0EC9DF3EFAECDCA99140F02A5A066FFFFB1 EEEC97F8F0B1F4ECB0F7F1A7F5F196F6F1A1FDF4B3FBE093C38531F0B35DF9F6A5E4DE9AECE4A0 E5D687E7EC9BEDF7ADF6F0B4EFE398F6EC9DF8F4ACF5F1AAF2EEA7F3EFA8F4F0A7F3EFA6F3EFA6 F7F3A9F3EFA5E2DE94DDDA8DECE7A1E4DF9DEAE5A3F0EBA9EEE9A7ECE7A7DCD698DED89AE6E0A2 E6E0A4DFD99DE2DC9EF8F3B3E3DE9CEAE5A3F6F1AFF0EBABF3EEAEEAE4A7ECE6A8F5EFB1DDD79B D1CB8FE8E8A7E6EAA5FFECABC59F64A8834DC9B588262305000000494939BDB39FF5E6C3FFFFCD FCEAB5DBB279D1B153F8E180ECDE84ECE78FEFEAAD30290F040000190E0B23170094844F9C803B FBDF94F3E09BF7EDADE5E1A3D2CE8FE0DB99EAE29BE9DF98D8CF8DCEC789DEDA9BF3EEAFE9E4A4 F2EDABF5F0ADEFEAA6F1ECA8EFEAA8EEE9A9F0EAADF5EFB4E5DEA7D7D190E0DD94FAF5B5F1ECB8 FFFFD78B86681A1700736F57EAE7C0FAF6C4EAE6A7E0DC95F1EFB7C0BE98100D0024220F000000 0807004E4E20FFFFC1F9F7B0F4EDA9FCF1B7FEEDBADFAB7EB27D50FAEEC0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF7F7FFE6E6FFD1D1FEBFBFFE B5B5FEB1B2FDA6A6FD8484FB9495FCAEAFFDB1B2FDC2C2FEE2E2FEF7F7FFFBFAFFFEFDFFFFFFFF FCFFFCFBFDFBFAFBFAFAFDFAFBFFFBFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8DF80E5DC7DEAE084 ECE286E9DF83E4DA7FEAE085E8DD82E7DD82E9DF85E9DF86ECE08DDCD07FDBD079DED379E1D67A E8DE7FDED473DBD170E4DA78E1D878E5DB7CE6DC80E0D77CE3DA7FDBD076E4D97FE9DF84F2E589 EBDE82E8DB7EECDD82EBDC81EBDC7EF6E783E7D970E0D169D9CA63EBDD76F8EA87ECE07EF1E485 F6E98DFCF197FDF19AF2E78EF7E98FFFF395FAED8EFAED8DFBEF8EF4E886F5E987F9EC8CFAED8E F4E789EDDF84F4E38BFCE08D987D26F3D981F7E387F3E485ECDF80F3E98AF9F095F8ED95F7EB95 F2E691F4EA92F5EC91FBF198F6EA94F8EC96EDE28DD3C46FDFD07BF4E68DF5E68BE8D97BEDE081 EBE087E6DC84E8DE87E8DE87E8DE88EDE38DF0E691EEE390E9DE8BECE18FEEE392E9DC88E0D277 ECDF82EEE185EEE187EBE085E8DD84E9DE84EFE088F6E791F5E48FF3E18CDAB35EC2903AFFEA90 F1DA7EF1E484FAF091E4D97CF9EB91E8D880F1E38AECE18AE6DE86F7F098D6D179BBB867E7E3A6 44420BDAD8A6928D71000000B9B377F7F28DECE28FF1DE98F7DC83E5C76CF3DA7FF6E089FAE894 F6E896F3E795ECE493ECE493F2EA97EDE692F2EA9CE8E198ECE59CF2EAA0EEE69BECE398EEE498 F0E698EEE293EEE392F0E594F0E294FFFAB4605A18C0B975F2EBA8E3DE9DF9F6BBE3E1AD9B996B 4746210000000000001E1D0B6C6B56C5C49FF7F7C9F3F2B5E9E79DE2E08EEBE793DDD989F8F0A9 F3EAAD756B366A612DF4EAADE7DFA0F0EAAA908C4F282507E6E4ADFAF8C8ECE9BE7F7B511B1708 080200686134DCD29EFBF2BAEFE7A8E4DD97FDF8ADF5F1A3ABA353E6DD8FE4DB90F8EEA5FAEFA8 FBF09EF3E993F1E791EDE68EECE58EF1EB94EAE48FF6F09DF4ED9DF8F0A3FDF7ABFCEEA5FFECA5 B28640BE9E54F5EC9DECE99EF8ECA8FAE1A6EDE2A1E6E59AFDF2A2ECB169AD702AECC47DFEEEA5 ECDE91EBE699DDDD90DFDD92E6E397EFE79CEBE496E6E190E8E597FFFFCA8D8A65181300E4E09F F7F4A2F3F097F8F0AAEFE7A5E8E198EEEA95F6F1A3F5E8A3FFE293D19642D69943FFF3A2EFE6A1 E8DE9AE3D584D4DC88DBE79CF0EBAFECDD94EEE194E9E39DEEE9A3F5EFA9F8F2ACF8F2ABF6F0A9 F8F2A9F9F3ABF2EDA3F4EFA5E0DB90EFEAA5F8F3B1F6F1AFECE7A5EDE8A7EFEAAAEEE8AAECE6A8 F1EBADF5EFB3F2ECB0F4EEB1E7E2A2EDE8A5F7F2B0F8F3B1F4EFAEF6F1B1F1EBADF2ECAEFAF4B6 F2ECB0E7E1A5E7E4A3E0E294F5D88FBD934FDDBD7AFAE8B169643C0000000108000600007F6E56 E9E6BAFFF7C9DDB278D1B255FFED8CFEF096F2ED95FFFFC29D9879271D19A59B7CA79E6D2B1D05 5C4009EED68DFDF1ADF1E6A8FAF7B9EFEBACF2EDACF7EFAAF9EFA9FAF1B0FBF4B7FBF7BAFEF9B8 F9F4B3EDE8A6F3EEAAFDF8B4F4EFABEEE9A7F5EFB1F4EEB2F5EEB5F6EFB8F2ECAFFBF8B5E2DEA0 F6F1BFEEE9C2FEFBDFC4C2A9231F0D282313D9D5A6FEFDC7E1DB9AF2F0BDF6F6D123210F2D2B1B 0100002F2E1EC3C393F8F8B9EFECA6F5EDADF3E9AFFEE8B6B28251BC8C5EFEF2C6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF3F3FF E2E2FFD2D3FECFCFFEC8C8FEB3B3FDBDBDFDCDCDFECECFFEDCDCFEF5F5FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4DA7BF1E788 F7EC91F5EA8EEFE488E9DE84EFE58AEFE48AF1E68DF1E68DEDE18BEBDF8BECE08CEDE18AEADF83 E1D778DCD272DCD271E9DF7EE7DD7EDFD478DDD276DDD379E3DA7FE6DD82E5DB80ECE187EDE288 EBDE82EFE286F4E78BEEDF84E6D67CECDD82F4E484E9DA74E9DA73E7D871F6E882FBEE88F1E581 F3E786F2E587F4E990F6EB94EFE48BF5E78DFDF092FBEE90FDEF8FFDF18FF9ED8BF6EA88F1E484 F0E384F2E587F2E589F9E68EF7D9868F741DF2DB82FBE78CFCED8EF6E98AEFE586EFE68CF2E790 F7EB95FCF09BF1E78EEFE58BF1E78EF0E48EFCF09BEBDF8CFFF39EE4D57FD7C970DECF73E0D174 E4D779EFE48AE9DF87EBE18AEAE089EAE08AEFE590F1E792F3E895F7EC9AFDF2A0F4E998E5DB85 E4D77EE8DA81F0E289F6E890F1E68DF1E58EF3E791F1E28DF2E38FECDD8AE8D884F7D27EAD7D28 F4D279F7E386FAF192E8E182EFE68BF8ED93F4E58DE9DA85EEDF8AC9BE6AB1A859E2DD8BC7C572 FAFAB3676732999870282308403D1BF5F1A9DED77DEFE293ECD88CFEE387ECD172EBD275FCE68D EFDC86F2E48FF1E694EADF8FE7DF8DEEE391ECE18FF0E696E6DE90EEE599F4EB9EF5ECA1F3EA9F ECE398EAE196EEE197EDE096EBE297FAEFA5F6F3A693914C81804CFEFED1F4EEC7B9B495383419 00000024230A47472A30301FE0E1BAF9F8C7ECEAB4E8E6ACF1EDABF3ECA5EDE59BEDE599EAE097 F2EAA2EEE4A3EBE3A3494107D3CC98E8E2A8DEDB9AFFFFC451501984825AC0BCA22D2714110B00 1E1700858045F2EFB1F5EDAFE1D899D8D08DE4DD97F0E99F7A72279C9446F9F0A1D3CA7BFAF1A2 F4E99AF6EB99F4E996F6EC97F2EB95ECE68DEEE78FEEE792F3EC98F1EA99F3EC9CF2EB9FECE098 FDEBA7F2CA89A9803AEADA8DFDF3A3FFF2ABF9E1A3F0E2A3E1DD96F2EB9DF4CB81B58037D09E52 FFEA9FF7E396F3EA9BE3DE90F0EEA1E9E397E8E095F5EFA1F6F3A4F0F0A3FFFFD3666240767245 FEFEC0F2EE9AE9E68EE9E293F6EDA4EFE8A0EAE598F0EDA0F0E89BFFEA9AD8A14EBD7F2CFFED9E F7ECA8F4E7A2DFD281D3DC87E1EDA4F7F1B7F3E29DF8E79EF5EDA9F7F0ACF8F1ADF6EFA9F3ECA6 EBE49EE5DE96F8F1A9F8F1A9F8F2A8E4DD94F3EDA8FDF8B6F2EDABE7E2A0F0EBA9F2EDADF7F1B2 F0EAACF0EAACF5EFB3F3EDB1F4EEB1DDD898F1ECA9FBF6B4FAF5B3FDF8B7FBF6B6FEF8BAF6F0B2 ECE6A8EFE9ADF6F0B5F4F2AEE9E797F2CD80A27226DCBD70FFEEABB1AB7848502B252F16756F5B 170403504C23E3D5A4DFB478C9A94DF2DB81F3E493F2EB97F1EFADEBE7C2FFFDF0FFFEDFFAF9C8 A296631F0501BEA458FFFAB9FAF0B3FDFABDEBE7A9FAF4B4FAF1AFF5EAA8F9EFB1FCF5BAF0ECB0 F5F0AFEFEAA8E5E09CEEE9A5FBF6B2F7F2AEF1ECABFEFABCFFFCC1FDF6BEF9F2BCF8F1B8EDE8A8 FEFEC9D3D0A0F8F7D3F2EED0F7F5DCE8E5C8403B22353216E9E3B1F4EEB7FFFFCFF2F1D0A09D86 08060311100064634CFCFACAE7E5A7EDE9A5E5DB9DDACD98D1BA89B58649D4B173FFEBB2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF FDFDFFFBFCFFFAFAFFFAFAFFF9F9FFF7F7FFF8F8FFFAFAFFFAFAFFFBFBFFFEFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE284 FAED8EF5E88CEDE084EBDE82F4E68DF6E88FF3E48DF3E38FF1E18DE8DB85E7DC85EBE18AEBE287 E6DD80DBD273D6CD6EEAE182F3EA8CDBD276DCD378E0D67ED6CD73E6DD80E6DD80E3D87EE1D67C DFD57BE9DB82E4D57DE9DB82F6E68EF1E189E6D77EEBDB7DE8D877F1E17EEDDE79EEE07AE5D871 F8EC86F4E886ECDF80EADF85EFE48AEDE289F4E68CFAED8FFBEE90FCEE8EFCF08EF9ED8BEDE17F E7DA7AEBDE7FF1E486F0E387F6E38BF7D9868D731BF6E58CF5E287EDDE7EF7EA8BF0E687F0E78C F3E890F3E791F2E691F2E890EEE38BF0E68FF0E490FBEF9BF2E792F6E693F3E58FF3E58DE8D87E DFD073EFE286F3E990E9DF89ECE28BF1E790F0E691F1E692F2E695E4D987DCD180E9DE8EEFE495 EDE18FEEE38BE5D780EFE18AFDEE9AF9EA96F7E794F7E896F2E793F7EB98F5E998F6E998FFDF8D AA7D28DDBC63F3E085F1E98CE5E083EEE88DD9CE76F8E893E4D280FAEC99C5BA6A554B07E9E299 F4F29EE9EA9B93935F27260C080500A1A15EEAE796F2E9A0F1E39BD7C474FFE888F0D676DDC769 F4E085F2E089FAEC97F4E895E9DC8DE5D989EDE08EEDE08EF5E897EDE492F0E493EFE494F2E699 F0E79AE8DF94E4DA93EFE69EF6EDA6E9E19AF0E8A4FFFEBED6D69E5A582BC8C3A4645E4D0B0502 020000322D1D928F6DDBD9AF3D3D12CFCF99E3E39FDEDC94E8E29BF6EEA6F8EDA8F2E7A0F0E29D FBEDA8F4EAA5EEE59FFEF7B287814978734AECE9B9FAF9C6E6E8B7979871121100090600110B00 585334D5D094E9E69AE8E398F4EFA9D2CB83F8F3AEDFD892726924ADA55DF2EAA0F8F2A2E5DD8A E5DD88F3E992F3EB9AEFE595F0E692F3E893F5EB95FDF29CFDF49DFBF19DF7EE9CF6ED9EF6EDA1 F1EAA2F8EEB1FFF6B7D8AE68B58C3DFDE895FFEFA2FAECA6FBEDACF8ECA9F0E69DFDEEA0E6BF72 AD7326E6B96CFFEC9CF8EA98F6ED9EFCF5A8F8F2A6F5EDA2F4EDA2F3F0A3FAF9B1CDCAA5241F07 C0BE84F8F4AAE6E290E9E38FE9E28BECE594EDE69EF5EEACF3F0A6E5DF8EFFED9DDBA655AE6F1F F3DA8EF9EAAAFEF0AEF8EB9AE0EA97E1F0A8EFEAB1F2DF9CFFF0A9FAF1AFF5EDACF1E9A8F1EAA7 F4EEA9D9D28DB6AF69E6DF98F8F1AAECE59DEBE49DF5F0ABEEE9A7E4DF9DE8E3A1F5F0AEF1ECAC FEF8B9F7F1B3F5EFB1F7F1B5F4EEB2F3EDB0EAE5A4F2EDABF6F1AFF9F4B2FBF6B5F8F3B3F3EDAF F4EEB0EBE5A7ECE6AAFAF4B8FDFBBAFBF6ABF0C37DB77F35F7DB89FBE89DCDC688B6BF8E83946E E9E5CB8B7355020100AD9F69E6BC7DD6B55DF5DC8CEEDF96EFEA9BEDECA9EAEABBB3AD97B8B38D F8F7CAFBEFC870541EB89C54FFF2B1F8EEB1F2EEB4F4F0B4F9F3B5FBF2B1FCF1AFFDF3B5FDF6BB FAF5BCFCF9B8EFEAA6F2EDA9F2EEA8ECE7A2F2EDA9FDF8B7FCF8BAFDFBC0FDF8C0FCF5BFF9F3BC F1ECB3FDFDCA312D057E7A55EFF0CEFCFBDDECE9CBD5D2B0241F0B858054FFFFD6F7F5CCE8E9CA BFBEA8656353878673262606E7E5B5EEECAFFEFAB9EAE0A4EFE2B2E0C999A9792DE2C373FCE89D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EADB7EEEDF82F0E287F1E289F1E289F6E68FF4E48EEFE08AF0E08BEEDE8BE7D883ECE189EBE189 E5DC80E5DC80E6DD7EE7DE7FEAE183E8DF84E0D77DE3D981E8DE89DBD278E6DD80DDD577E2D87D E8DD83E9DE84F0E38ADED078DDCF77F6E68FFAEA93E7D780F4E387F4E485FBEB8BF0E07DEFE17A E9DC74F2E680F3E784EEE080ECE186F2E78EF2E78DF6E88EF9EC8FFBEE90F9EC8CF7EB89F7EB89 F1E582EDE180F6E889FEF092F6E98DF6E189FFE08E90751EF0DC84FDE98EF2E384FAEC8EF2E889 F4EB90F9EE97F0E48EE7DB87F1E791E7DD84EFE58EF1E591F4E894F9EC9AFFF6A3ECDC87E8DA81 F4E48CF0E185E8DA7EF2E88FEBE18AEFE58EF2E893F3E994F7ED98FDF4A3E9DE8CDBD07EE7DC8D F9EE9FFBF19FEEE28DE7D885F1E28FF8E997F7E896F9EA99F9E99AF3E797F6EA9AF3E898F3E697 FFE191CCA24FD3B45FEBDA81DAD579E2E083E9E48BD8CF78EEDF8BEAD988FAEA9AD1C47861561B C2BB79E2E48CFBFBA7B7B9830908043B3A17DDDF93DFDE85E2D599E1D08EFBE895F8DF7EF2D978 D8C163E7D478F6E58DFAEA96F5E694EDDE8FEBDC8DF1E192EEDE8DF6E793F1E590F1E38EEBDF8C EEE393ECE193F0E59DF1E7A0EBE29DF9F0ACFDFCBDFBF3B6CDCAA396967D1B180C1F1B0F000000 3B3825A3A081EBE9C3F9F8CBFFFDCD5D5C395D5A27E8E59CEAE596EFE898F6EB9CF4E899EBDB8E F9ECA0ECDF96EDE29BF8EDABEFE7A6EBE9AE3C3815C6C49CA5A38B403E2F17150F000000141300 A09E75D3CF92E9E69AF1EB96F0EA98D9D587FEFCB3AEAA5F5B540FB9B270F8EFAAFAF1A8E1D889 F5ED96F3EB8FECE386EEE694E7DE8FE6DD8CE9DF8CEFE48EF9EF96F9EE95FAEF99F9ED9BF7EB9B F8EC9FF8F1ACF1F1B7EEDFA0FBDA92BA8335E9BD6BFFEF9CEEE99BF3E6A3FBE6A9F2DE9CEBF1A2 FFEC9ADC9C4DC79141FBE08EFCE896F4E998EFE899FBF4A9FCF4AAF0EAA0F6F2A7FFFFBC706C4C 161209DBDA99EBE99DEDE698F9F1A0F1EB8DE1DB82E2DB93F2E9B0EFECA4EEEA92F7E796EDB96A AD6E1EE1C57CFFEEAFF2E3A1F1E494CFDB88D2E29BE7E1ACF0DB9BFEEEAAF0E8A8EBE3A4E9E1A1 EEE6A5F6EEACEEE8A3D1CA85F1EBA6FCF6B0F5EEA8ECE59EEFE9A4E5E09EE6E19FF3EEACF3EEAD F1ECACFAF4B6F7F1B3F9F3B5F7F1B5F2ECB0F4EEB1FBF6B6F7F2B0FCF7B5FDF8B6F8F3B2FBF6B6 F8F2B4FDF7B9FCF6B8F3EDB1EDE7ABF0E8AAFAEEADE7B074C28540F1CF7CF6E08FEDE79F586332 3E522095936DEFE5C3ACAC7EE0D197E1BA77DAB864FDE59AF8E9A8F0EBA0F3F5AFF0F2BE9D9B7E 343307403D29C0B592CAAE75C5A964FFF7B6FFFCC1F2EDB4ECE7AEE4DEA0DED596ECE1A1F4EAAC F1E9B0F8F3BAFBF7B6F3EDAAF5EFACF2EEA7E9E5A0EAE5A0FDF8B7F2ECAEF2ECB2F1EAB4F3ECB8 F9F2C0F0EAB6FDFACAB8B68B0D0B002C2D21B4B490F2F2D0FFFFE0C7C29BA9A47BFFFED4F7F7CF C9CAAA1E1D0C2A29193C3B28171601CDCB9CF2F0B3FCF6B6FCF2B9FFF8CBD8C195AB7830FBD68B FFF4B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7D878EADB7CF4E587F1E286E5D67DF2E28AF0E089EEDE87F3E38EF6E691EFE18BE9DE85 EFE389EAE185EDE386EFE488EDE487D7CD71D9CE74F6EC91EEE48CE5D984E5DC82EDE487D4CB6E DACF73E3D87CDFD478ECE083EADD80EBDD83EFDF86F0E088FBEB91F7E88BF6E78AFAEC8BEDE07F F5E884FAEF89F1E581F7ED89F5EB8AF6EC8DF9EE93F6EB91F4EA8CF8EC8DF9EF90F6EB8AF3E686 F3E987F1E686E7DA7AEDE284FBF094FEF195FCEC92FFFAA2A1812BEBD078FFF196F9ED8FFBEF91 F4E78BEEE488F1EA8FF0E78DF3E690F4E990E3D980F1E58FF4E793F1E591FEF5A2F6E693E9DA84 F0E289FAEB90F3E487EEE182F0E58CF3E991F6EC95F2E890F4EA93FEF59EF4E994F8EE98F9EF9A FEF2A0FAEF9DF2E893EFE38EF0E48EF7EA94F4E891F6E794FAED99F7EA98F5E997FAEE9EF8ED9E F6EC9DFFE899E0B866C5A14AF7E185EEE58AF2ED9AE6E081F1E687E4D885F3E997F4E794EBD98B 5D5115B8B473E8E99AEEF1A7696740050100848350F2F59FF3F296F3E7ADF1E39FEADA83F4DE7F FFEB8CEDDB7DF2E086FFED97F5E493F3E395F0E093F2E295F3E397EBDC8EF1E28FEFE189F2E38F EFE392F4E99BF2E79EECE39DFDF4B2F6EFB2F4EEB7EFE8BB99926E302A130D0A00030000070300 3B382A6E6B5B8B8971A2A182A3A37FD0D0ACD2D1AF44441AD8D699E4E19DE2DE98E6DF98F1E8A2 EEE5A0F9EFADF1E7AAFEFCC3EFEBB7E6E0B1CCC89D5A572F0100000D0A000702000D0B07757457 33320D7C7C3FF6F4A9DED88BF0E99AEFE89AF6EFA2B1AA5C423A00E0D88FF3EBA3FDF6ADE3DA8E ECE494E8E08BE9E189F6EB93EFE794F0E998F9F1A0FCF1A1F4E997F3E695F6EA99FBEF9FFDF0A2 F5EA9BF4EA9CF5F2A8E7F2AFF3EFA7FFE297F5C67BB27B2EF5D485FDF5A7F8EBA5FBE8A9FDEBAA E6F1A1F8F4A2FFD384AA7221E1B965FFE993F5ED9BF8F4A2FBF4A3EDE593E7E297F0F0ACDCDBA3 16140C57532BF0EFAEE7E599F2EC9BF1EB97DED881D8D280D7D088CDC887D1CF84F9F8A6E9E29F FED38FB8762ADBB96CFFF8B2E4D792F5E69FD7DD8FE3EEA5F1F1B1EADA95F3E29DF6EDACEEE6A5 EBE3A2EBE3A2EFE7A6F6EEADE3DB9AEBE3A2EEE6A4FBF4B0E3DC99E7E1A0E8E3A1F2EDABFDF8B6 F0EBA9F2EDADF9F3B4F9F3B5FEF8BAFCF6BAF8F2B6FEF8BAEFEAA8ECE7A3F8F3B1F6F1AFEEE9A8 FCF7B7F6F0B2F7F1B3FFFBBDFDF8BCF7F1B5FCF3B8FFE9AED39B5DDA9E59FEEE9FF2E399E9E39D 80823E1A2806212311C4B692FFFDCBFFF8BDE2BC77D2B360FDE5A1FFF5BFFDF9BBF9FBBAE8ECB1 FEFFD4E2E3AD2323005C523FDEC08CC2A058FAE29CFBEDADF3EBB1EBE7ABF3F1ADE1DB97F1EAA8 FDF6B8F4EDB0FDF8B7EDE8A3F3EFA8EFEBA4F9F5B1FFFCB8F6F1AFFFF9BAFEF8BCFEF8BFF3ECB6 F0E9B5F9F2BDFEF7C2E5DFAAFFFFD0CDCCA13B38170000009F9D86F7F3DAFCFBE1F4F0CDFDFDD8 FFFFD9A5A58407080000010003010048432EF4F2C0FCFDC6E5E5AAFAF1BAFFF8C5CFB17DB1823F FFE6A3FFF8BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE8DD74E6DA75E5D976ECE081F6E98DF0E289F2E48BE2D47BD8CB72E5D77DF1E389 EADD83E8DA81F1E48BE4D77EE1D27AE8DB82E6D980EFE188F0E389EDE188EADC84E6DB81E3DA7E DCD375DAD170E4DA78DFD572DFD370E9DD79EFE380E5D776CABB5BE3D677EFE382EDE482F3EA89 ECE383F3EA8AF2E889EDE484F1E989F6ED8FF4EB8EF1E88BF4EB8DF8EF8FF7EE8CF9F18FFAF18F F2E988EBE282EBE283E0D779E6DD81F4EB90F1E78DF0E287FFEB909C7621EED57EF4E58AF4F193 FAEC92FAE58DEBDE82DCDC7BE4E382F0DF84F0E089E9DC87EFE08DF7E795F5E693F8E895F2E38F E6D882F1E38AF8EB8EEADD7EE8DC7BEEE389F5EC92F1E88EE5DC82E7DD83F1E78DEFE58BEDE389 F1E88EF2E98EF3EA8FF7EE94F0E78DF0E78CEBE286EEE587F0E689ECE387EBE288EFE58DF3E994 EEE392EBDF91F8E494FFE493C18B34F4E280F5E68BEFE5A2F0E278F2E571E6E08DE3E894E3DF88 FFEB976C621E7D7C3EF1F0B4DBD7B7180E05130900A7A561F2F297ABAA51B5B06ADBD788EDE78C F4E88BF3E58AE9DB81E0CF7AF0DE8DFEEFA1EDDC90E0D085F2E69BE4D98FECE399F2E894ECE187 F0E592F4EA9EEEE49FF0E8A6F6F3B6FCF8C0E2E0B3949174322D2100000019150067643D5B5842 0A07010E0A030501000000000000010B0B0C0E0E0A48494126281D6C704BBCC296C5C89EC0C199 CBCCA4B9B992B6B491A6A4847E7B5E514D372A2516110B010C060008030016120644411EB0AE7A DDDB9CB1B0660D0900BDB970E9E19EE3DB9AE5DA9BB0A3635C500CD3C97FF4EA9CEDE393E5DB87 F0E593EBDF90EFE397FEF1A8F3E9A0F3EE99E9E68EEDE694F4EB9EF4E7A1F6E4A2F4E2A3F4E4A3 FFF7B1EDE59AFEF9ABEDF29FE1F499E6E793F6DF91FFE39BE0A966BA8C48F4D891F5E59DEDE59B F1ECA2F3F3A7FAF4A8FFF5A8D5A151AD7B28EBCE79DFDF8BE0E48FE3E085E5DE7EE0DF8DF3F4C1 97947D0E0A00C4BE7EEEE9B0EAE799DFDE82EFED8EE8E29FEBE3A8E2DE97EBE993F0ED9BF2F1B4 82855EEDD1A1DA944DC98F38FEEC9AF9F0A9F7EBB1F4ECA9E5E697E4EC96EAE798E5DE96F6F1AB F3EFABF0EBA8ECE7A5ECE7A6EBE6A7EBE6A6ECE6A8F2ECB0F3EDB0ECE6A9E8E3A2F1ECA8F3EEAC EFEAA8F4EFADF8F3B1F5F0B0F6F1B1F1ECACF6F0B2ECE6A8F2ECADEFEAA6F5F1ABF5F1ABF3EEAA E6E19EF8F3B0F3EEAEF8F2B3F8F2B4EDE7A9F1EBAFFFFDC3FFEEB4BF8F46D8AC62F9E6A7F5F6C0 ECEAB1F0E2A1E7E6AE292F0F172004E7E0B1FFEFB7E4B976C6A855FCE7ABD9CEA7ACA97BD7D79F FDFFC0F4F3B5FFFFBFADAE7B010000916E42C89D52FFEE99F4E196F5E8AAF0EAACE6EB9BE9EE9D EBECA7F5F2B7FBF7B2F1EE9EF6F3A8E5E197F3EFA8FAF5B2FCF7B8F0EAADFDF7BCF9F3BAF5EEB6 F0EAB1EDE7AFEDE6A9E2DA9BE1D999ECE6ABFFFFCFF4F1D08680700400006964645E594E423F2F D2D1A6FFFCCEB9B28D050900000000141208655A3EFBF8C3F3F9BFE8F6C1EDEAB4FFE8A9D09750 C6A360FFF7B9FFEFB4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBE076EADE78E7DB78E7DA7BE9DC80F0E289EBDD84DFD178E1D37AEADD82 EBDE82EDDF87F9EB92E7D980E6D87FE8DA81DED077DCCE75E3D57CEADC83EDDF86EBDD84ECE188 E9E084E2D97DE0D677DFD573E1D874E3D773E5D975E5D976E2D474D3C466E4D678ECE283EFE686 FEF595EFE788EEE586F9F091F3EA8DF2E98CF5EC8FFAF194F8EF92F0E788F5EC8CF6EE8CFCF492 FFF697FAF192F4EB8CF9F092F3EA8DF4EB8EF5EC91F4EB90F1E489FFE98EA9822DEED37CF4E78B F5F294FDEF94FFEC93F7EA8EE7E785E9EB88F9E78CF2E18AEFE18AF7E893FBEC98F3E490ECDD8B E3D481E8D983EDDF86EDE083EBDE7FECE282F5EA91F1E78EECE289E9DF85EBE288F0E68DEFE68C E5DB81DDD37AEFE58CF5EC92E8DE84F1E78EF4EA91F1E98DF4EB8DF2EA8CF1E88BF9F094F3E990 E7DD87EDE290F7EB9AF4E190FFEE9CBF8931E9C25FFFF297F7EAA6F6E77CFEEF7DEBE693DFE794 ECE994F3DA87D1CA84404102EBEAB65E583E1B120C7A73545E5B16D7D77EB1AF58CAC47AF0EB9F E7E08EF3E894F1E38FFBEB98DFCF7AE3D07DFFF5A3F8E896ECDD8DE9DE8FE6DC8EEFE89AEBE392 ECE490ECE48FECE593EAE299FAF3BAECE4BE8F876E2D2717080501141300595B36B8B597EFEBD3 DEDBC62F2B170200000000000502000806011A180D0E0D010E0F030B0C0006090014160A12130C 17180B21210F0E0D09100C090D08050B0501020000000000100A00504C306C6746282500C5C48D DEDD9DDAD893FBF8B0746F334C4715DED798E7DEA46A5F23776C27D1C67EE5DD8EDED581E3DB83 D8D176E7DF86F1E994EDE494E9E093EAE296EDE896E8E58FEDE694F1E79BF6E9A1FFF0ACF7E7A5 F5E7A5FFF6AFF3EBA1FEFBAEF2F2A1E9F29AEBEB97EBDE8EFFF6ACFEE09ABF944FC9A35DFFE79F F0DD93EDE397F4F1A4E9E696FBEC9EF9EB9AC39042C58F46FFDF95E6E08CEAF494DBDF80E2DA91 F4E8BD29231A5D5827DCD694EAE4AAE6E395E3E383E6E586DDD897ECE5AEE7E39EEEEC96F5F2A1 D5D3980C0E01CEBD8FF9B873B0711CF5DF8EFFF5AFEFE5AAEBE39FD9D787E0E58CEBEC9BE6E399 ECE8A1F1EDA6F5F1ABF7F2AEF5F0ADF3EEACF4EFAFF3EEAEEAE3A6E6E0A2F0EAACF3EDABF4F0A9 F2EEA8F2EDA9F7F2AEF5F0ADE8E3A1E9E4A3E7E2A2F1EBADEEE8AAF6F1B2E7E29EEFEBA3EEEAA3 E8E29FD7D28FE7E2A0FCF8B8FFFCBDFBF5B7FAF4B6E9E3A7CABF84F4DBA5C19654E7C381FFFFCA EDF0C4E5E3B4F2E2A8FFFDCC474B2D0000007A7044FFF7C1D7AB69D0B35FFFF1B3D4CBA489855D 5555219D9E61D2D191FFFFC17E814E0000007F5C33B0843BF5DD8AFAE49AF8E9AEECE6ABE9EB9F EEF3A4F3F4B1F8F5C0F6F2B1EAE497E6E298E6E299E3DF98E9E4A1F8F3B4E9E3A7F5EFB6EFE9AF F1EBB2F3EDB3EBE5A9E2DD9BE6E095F5F0A0F0EDA1F2EEAAFDFCC7FCFAD9A19C89241F0F110E00 0000009FA169E7E0AEF8F7CE5F654F43483993927A251B00ECE6AFF5F9C1E4EFBBF7F1BCF2D693 B3772CE0C37DFFF0B2F8E9ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE0D56BE2D66FE4D776E5D87AE6D97DE6D87FEFE188EEE087ECDD85 E8DB80E3D57AEADC83F2E48BDED077DFD178EBDD84E4D67DE0D279E5D77EE6D87FE4D67DE7D980 EADF86E2D87FE0D67DE2D77CDCD273E5DB7AF7EC8AF1E483E4D776EEDF80EBDC80EEE082F0E688 E8DF81F6ED8EEEE587EEE587FBF293F7EE91F9F093F8EF92F9F093F8EF92F1E889F1E888F2EA88 F8F08FFCF394F6ED8FF2E98AF8EF92F5EC8FF9F093FCF399FBF297F7EA90FFF096BC9540ECD079 F2E489EEEC8DF9EA8FFEE98FF5E88DEEEF8DF3F592FBE98EF8E88DF4E68DF3E68DF4E68EF2E38E EFE08DE9DA87F0E18DEEE088EDDF86F1E488ECE185F0E58CEFE58CF2E88FF6EC93F1E78EEAE087 F2E88FF2E88FF2E88FF6EC93F3E990EFE58CF2E892F3E992EFE68CF2E98DF3EA8DF3EA8DF8EF92 E5DC81CCC26ADED47FF7EC97F6E28FFFEC97D09E44E4BC5CFFE88EF2E39CFEEF88EADE70EDEA97 E4EB98DCD986F8E394FDFDBB65662F79764C0F0A004D4732ECE7BE9F9B59D1CF7DDDDB83F8F3A3 EFE89FEFE49EEDE195F4E496FFF6A4ECDC85DFCE76F6E58CF5E68EF6E791F1E793DFD685EEE798 EFE69EF2EAA5EEE6A2F3EDABF6F0B78C865C2C250C110A000A0500454521ADB176F9FEBBFFFCE0 E4DED7615B4C0601002C2916A2A07965623B3835121613081110030F0C001C19070703000F0B02 110D021B17090B0800211B07161100140F0527210E423D1C807A5ABBB78FD0D099F1F1B66E6E3A 6D6D36DFDE9CE2E09CE4E19CFAF6B64641186F6935655B2C766D35E9E195EAE293D9D17CE6DF84 DAD477E3DD7EE8E284F1EB8FECE58CE3DB88E9E291F0EB99F0ED9BF4EF9EF1E899EFE599FCEEA4 F5E7A0F1E79EF8F0A7F5EEA4FAF5ACF1EDA1F2ED9CE9E492F6F29FF1E695FDF4A7F7E29AB28844 CEA460FFE9A2F9E69AF8F3A2F0EC9AF5EE9AFEF3A5F1BF7BB96D31E5A364FCE997E9F393DEED94 FEFBBA9180590C0000C0B981FAF6B0EFE9ACF1EE9EF3F394E9E88BF8F2B1EAE4ACF5F0AEF3F0A0 F9F7AEE9E6B0242301B69A6DFFD894B17725EDC476EBD790DFD998D0CA85D7D184E5E390E9EA9B E9EA9EE8E49CEBE7A0F0ECA5F4EFAAF4EFABEEE9A6EFEAA8F5F0AEEDE8A8E7E2A1EFEAABF6F2AC F5F1A6F0ECA3F3EFA5F8F4ADF2EEA8DFDA97E2DD9CDFDA9AEDE7A9F0EAADF7F2B3ECE7A3E8E49D E2DD97E2DD99D7D28FE4DF9DEBE6A6EEE8A9F1EBACF5F0B28F8A490900001C0700401B009A7947 D7CA9FE5E7C3FEFCD8FFF4C4D5CFA211150003090071683FFFF5C2D4A664D4B662F3DFA1FFF7CF F7F3CC91916046470EAFAD73F1F2AC848754170F0CDDBA91D4A964F4E391FFF4AEFAECB3F4EDB5 E2E49BEBEEA4F2F2B3F8F5C3F9F2B8F0E9A2BEBA70E2DE95F6F2ABEEE9A6F8F2B3FCF6BBEEE8AE F0EAB0F7F1B7FBF5BAF5EFB4EEE9A5E8E394ECEA95FDFBA7FFFDAEF2F0ACEBE9B4FFFFE0C0BD9A 111002444616D2D59EDEDAA4E8E4B7E3E7CBE9EED7D0CFB3180F00D2CA94FCFCC5E9EDB8FFF4BD E9C581BB8135F1D690F0E3A3EFE4A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D670E4D873E8DB7BEBDE80ECDF83E6D87FF2E48BEEE087 E8DA80EADD81E8DB7FDED077EBDD84EFE188E6D87FE9DB82EEE087ECDE85F0E289E5D77EDCCE75 E2D47BEBDF89E6DC86E3DA83E5DA82E1D67BE8DE7FE0D474EDE081F0E385F5E68AEEDE85EDDE84 E8DD83E1D87BF2E98CF7EE91F3EA8DE3DA7DEEE588FBF295F8EF92F7EE91FAF195F8EF90F7EE8E F5EC8CF6ED8EF8EF90F3EA8DF0E78AF7EE91F0E78CF7EE93FFF69BF8EF94F2E48BFFEA92BE9744 E4C570F5E78BEBE987F8EB8DFDE88DF1E489EDED8DF2F393F2E086EBDB80EEE184F1E387F3E58C F2E38DEADB88ECDD8AEDDE8AEEE089F4E58FF6E890EEE389F9EF96F5EB91F1E78EF1E78EF1E78E F0E68DEEE48BEDE38AF2E88FD9CF75D5CB71F1E791F7EC99F0E592E5DB84E5DB82E7DE82E8DF82 F6ED90F8EF92F0E78BF6EC94F4EA92EFDF88FFE790D3A74DC09B3AFFF096F5E296EBDC78DBD069 E2DE8CCFD284D6D184F2E299EFEEB2B1B28A1B1804090500343019E0DDA6E4E09FEAE799EEEA92 EFE991E0D68FEBE0A2EFE19BEFDF94F1E190F1E18AEADA7EEADB7DFFF598EADD84F2E894E7DE91 F4ECA3F7EFB3F7F2C5FAF2CEB3AD90443A2B080200090400504E33ACAE78E5EBAAFFFFBEEEF3AE 9F9B82261C1A000000393419605C2FFFFFC7FCFAB9EDECACCCCB8CAEA9727C764E5B5440413935 0E0605463E373C352D605A4B807A5B928E62B8B47DE3E0A2EBE8A2E9E69CF2F2A4E6E999DADB8E E2E2962C2D01ACA861F4F0B0F3EFB2D6CF956760250C0500847A3FFBF2ACD4CC7CDCD380D4CC73 DCD677DDD776E4DE7CE3DD7BE3DD7EE6DF84E9E289EFE993EDE898F1EDA1F9F3A4F4EB9CEEE595 F5EC9BF4E99BF4EA9DF7EFA4F7F1A8F6F2AAF7EFA6FFF4A9F4ED9FFAFCA9DEE591ECE695FCEFA4 F0CB86AA7836D9B06BFFF5ABF7E898F7F69DF9FBA2EEE29AFFE5ADEFA573CD7439FBD285F9F9A3 EDFAB0CDD1981D1200584329F2E8AAF9F6AFEDE8A5F6F3A3F3F298ECEA93E6E1A0E9E2A9FAF4B8 F2EDA6EFE9A5FFFFCD474122715F36FFF2ADBE893BC7974CFADF98DAD38FC4C077E1D78CECDE91 D9DC8DE2E69AE8E59CE5E197E8E49BF0ECA4F5F1AAF6F2ACF6F2ACF1ECA9EBE5A2E8E3A0EEE9A7 EFEBA1ECE99BE8E499EBE79DF2EEA4E9E59DF2EDA9F7F2AFECE7A7F1EBADEFE9ACEAE4A7EFEAA7 E9E49FE8E39FEEE9A5D9D491D6D18FECE7A8F6F0B0EFEAAAF8F4B6E9E6A8B8B078695642432714 240B000E04002C2F1D727157E0D9B1F9F4CD6A6B4B01040050461FFFEFBAD7AB69C5A852B4A160 817852918D63A09F70A9A875F0EDB8F3F4B2D6D9A42A2419563720A27A35F1DC8BFAE6A2FBEBB3 F9F0BAE9E9A2EFF1A9F3F2B7F7F1C4FBF3BDF7F0ACD6D289D8D48CFDF8B3FCF8B6F9F3B5FEFABE F2ECB2F9F3B9FBF5B9F9F3B6F7F1B4F8F3B2F8F5AEF5F1A5F3F0A0ECEA99E8E79CF0EFB0EAE9B6 EBEAC1262514A1A37BFBFDD2E8E7B6DCDBA7E6EAC5DFE4C3BEBD990B0300A39C6BF7F2BBE4DEA7 F2DCA1D3A663D59E52FFF2ABF5EEACF7F0B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D772E6DB78EADD7DE8DB7EE4D67DE5D77FE9DB82 E5D77EE7DA7EEEE185EEE185E3D57CECDE85F4E68DEBDD84E7D980EDDF86EBDD84E9DB82E6D87F E6D87FECDE85EADF89E7DC8AE4DA87E6DB83EADF85E6DC81E8DB7FECDF83E5D87DF8E88FF9E992 E0D179F1E68CEDE489F2E98EF2E98EEDE489C4BB60EFE688F8EF92F4EB8EF6ED90FBF294F4EB8C FEF596F8EF90F5EC8DF7EE91F4EB8EF2E98CFBF297F9F095FCF398FDF39AF4EA91F3E68DFDE590 BC9542DDC06AFFF497F3F18FF4E787FDE88BF4E78AEAEA89ECED8CF3E089EEDE80F3E687F6E98C F8EA91FAEC95F0E18CEBDC89EBDC89F4E592F6E794F1E28DF4E892F6EB94F6EC94EEE48DE8DE87 F0E68FFCF29AFBF19AF7ED96F8EE97E5DB84E7DD86FCF19DF1E696EFE492E9DF8AEEE48BF4EB90 F2E98CEFE688EBE283EEE588F3EA8FF2E98EE1D37BF8DF85EBCA709E7B1EF5D87FFCE794F5E787 E3D97AECE999D9DB90E8E39CEDE1A0FDFCCFA6A89214110A110F00494721E0DFA0E9E5A7F0ECA0 E6E288E9E582F6EEA0FEF5B7F1E49EEEE194F1E592FCED95F3E688E6D979F0E287E9DD8AF3E89D EEE4A3FDF2B9FFF8CBC3BC9D524A33130C040200002F2B10A7A57BDEE1A8FBFEC2FFFFCCC5C699 4B4C280D090206000037301BE2DDB47A773FCAC583E7E39AE9E599E7E298E1D894EAE0A1F7EEB4 EAE5B24D4A1AA7A470FCFAC6F2EDB6F0ECB1F0ECADEBE6A4E9E59CE8E296E6E190E3DF8CD7D881 F4F3A1E7E59AA29F59221E06DED89C7B743E57501AB0A872AAA46B322C00BCB36AE4DD8CD3CD7B F5EF98DDD87DE6E183E4DF80E7E284E4DF81E2DD81E7E189E1DA86EAE49AECE59EF2ECA0F1EA9B ECE693F1EB97F0E795F6EF9FF5EEA0F7F0A8F3ECA8FAF1ACF6E79FF7F0A4F3F6A5EFF8A6E5E894 EDDF91FFF7AEEBC0789F712AF2CB81FEEC9EF1EB90FEFFAAFDEBAAFFE1B0FFD6A4D38544CC8B42 FFE59EF5FCC3495F25070E05C8BB88FAF1B1F1EEA7EAE7A0F2F19FE5E48FECEB99E1DE9BF1ECB3 B1AC71EFECADF9F8BCFFFCC68C82623C3309FEF5B3D4A55EA26C25F6D18BE4DB90E3DE92F3E69C FBE59EEEEFA2EEF6A8E9E69DE2DE95E3DF96EAE69DEFEBA2F1EDA4F3EFA6EEEAA3E3DF99DFDB94 E4DF9AE3E094E3E08FE1DE90E5E294EBE79DE6E29AECE8A3F5F0ADEFEBABFAF4B6FDF7B9F5EFB2 EEE9A9F1ECAAF6F1AFF7F2B0E3DE9CE6E09EE5E09EFCF9B8FEFCBCF6F1B1F9F4B3FFFCC4DBCAA4 C3AD88E9D7B4B7B0935D5D440909002F2B10D2CEA8F9FAD6AEAE84635A29F4DDA4D5A967C2A54D AC9855352C000400001D1B044D4C1E848050BEBE7FEAEDB8E6E0CE77582EA27D35EBCE7AF9E29A FAE9AFECE2AAEEECA1F3F4A9F3F2B3F5EFC0F7EFB8F2EBA6F4F1A7DFDB93F2EDA9F8F3B2FAF5B6 F9F3B7FBF5BBF8F2B6F5EFB3F6F0B3F7F1B3F6F0B6F7F1BEEBE5ACEEE9AAFCF8B5EFEAAAF7F3B9 F6F4C2ECEAC428251AA5A48EFFFFF0EEECC0FDFDC8ECEFC0FEFFD9CDCEA31E1905958D60FFF7C2 EADBA3E4C689B88B44DEAD62FFF0A8F6F3AFFDF9B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D875EBDE7EF2E587ECDF85E4D67DE0D27A E2D47BE5D77EEFE286F0E385E9DC7FF0E289ECDE85E2D47BDFD178E9DB82F1E38AF7E990EADC83 E1D37AE4D67DE3D67CDBD07BDED383DED481E3D882EFE48BE7DC82E1D479EADD82E1D37AE3D37C F0E08AFAEA96FBF098F6EC92F3EA90F4EA90FDF499E5DC81F5EC8FF7EE92F2E98CF7EE91F7EE90 E8DF80FEF697F6ED8EF3EA8CF5EC8FF4EB8FF2E98CF1E88DF6ED92F7ED93F1E78EEEE48CF2E58D FBE590BD9645D8B962FEF395EDEC87EADC7CF8E386F9EB8EE9EA89EAEB8BFDE992F7E789F6EA88 F1E486F1E389F6E890F4E590F0E18EF1E28FFDEE9BF5E693E8D985F2E690E6DB84F0E68FF1E790 EDE38CF3E992FFF59EEDE38CF1E790F5EB94F7ED96F5EB94F2E894EFE494F5EA9AEDE38EF0E68E EDE28AEBE285EBE283EAE182F0E789F5EC8FEFE68BEEE085E7D378F1D37BAF8E36ECCD73F3DB84 F1E188ABA34ECACA7CD5D48EB0AB6CB6AF799191752D2C280B050D110E04929262E7E7A8E6E4AC E0DC96E5E187EFEC84EDE795E5DA99E4DB92EDE395F9EF9CFCF29BEEE38AE0D57DF7EC99EDE19A F1E6ADEDE3B4BFB38D645E411A1700000000242209888760EAE8C1FFFFD5F7F5CDCACAA666644C 1411040100000C0700524F2BC7C390F1EEB78983489E9857EBE39EDDD68DE7DF94E6DC91E3DA8D E6DE92F1EDA7949053413D00FFFEB8E5E099DDD98FE0DB8EDDD885DED982E7E287EDE888E5E085 C9C774F2EEA1E4E19CCBC78A4640082C25007B7343D2CB97EDE7AEE7E2A386824948410FEFE89B EBE497E5DE8DE7E08CE0DA84D4CE78E3DD87EBE58FE9E38EEFE997E6E08FECE5A0ECE4A1EEE7A0 EBE599E9E393EBE693E5DF8CF1EB9BF2EC9EF2ECA3EFE8A4F5EDAAF2EAA2F6F0A7F7F4A8F2F0A4 E2E091F9F1A2FEED9FFFF4ABD8B66CB1863DF7D892FEF39EEAEC91FAEAACF9E2AEFFF0B8FAD38D C9843EDCA368C3C18D071305526628FFF6BAF9F1B3F1EFACF0EEA6F3F3A4E4E393EFEEA3F9F5B6 D3CF941A16019C975FFAF5BCEEE8B3DBCFA91D1B00DDD699F6D390A46C27E2B46BFBEFA0FEF8AA F9E8A1F6DE9BF0F2A5E9F0A2EDEAA1E5E198E3DF96E3DF96E0DC93DDD990E7E39AF3EFA5EEEAA1 E3DF97E3DF97E5E296EDEA9BF0ED9EEFEC9FF5F1A7F3EFA7EAE5A1F0EBA8EDE8A8FAF4B6F9F4B7 F3EDB0EFEAAAF6F1B0F7F2B1F5F0AEF1ECAAFFFFBFFDF7B5EBE6A5E9E4A3F8F3B3FFFBBBF5EFB6 BCAD83AFA07AEEE7C4FAF5D5FCFBDECECEB03A3B29B4B38AF7F6C6FFFFD0FFFCC2FFECB0DDB16C DCC165FFFAB3F3EBBDB9B58D65633C363321201B0818170052542AD1CEB6FFFFD1C5A056C8AE57 FEEB9FFDEDADEFE6A6E5E593EDEE9DF1F0ABEEE8B3EFEAACECE69DEAE69DF0EBA6F3EEACEDE8A9 F8F2B6FCF6BAF9F3BAEEE8ADEDE7ABF7F2B2FBF6B6F9F3BDFFFCD4F4ECBFE5DEAAF1EAB0EDE6AA F0EAB1FAF5C3F6F3CE5553394442384B4B4351502BFBFBBEE4E5AFF8F9CCF4F5C83F3D278E865A FFFFD2FEECB2F7D493CA9F57FBDC91FAF2AAF6F7B2FAFAB8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD070E3D677F1E388F3E58CECDE86 E4D67EE8DA82E4D67DE4D77BE8DB7DE9DC7EEEE088EFE188E0D279D6C86FE9DB82E7D980ECDE85 EFE188E4D67DE2D47BDFD279D9CD78DBD080DCD27FDFD47FE8DD84E5DB81E3D57CDFD178DDCF76 E6D67FF3E38EFBEC97F9ED97F0E68FF7ED96F4EA93F8EE95F6ED92F2E98EF6ED91F7EE91FBF293 F8EF90EFE687F7EE91F9F093F3EA8DF5EC8FF7EE93EFE68BF4EB8FF4EA91F7ED94F3E990F3E992 F7E892FFF39ED2AB5AD4B55FF5E788E9E883ECDE7DF4DF81FAED8EEBEB8AE7E789F8E58FF4E487 F2E685F5E88BF8EA90F6E890F1E28DFCED9AF7E895F7E895EFE08DECDC88F0E48EF3E892EEE48D EAE089ECE28BF4EA93FBF19AF8EE97F0E68FEFE58EEFE58EEFE58EF1E692EEE394F4E998D7CD77 E9DF87E7DD83EBE285F1E889F3EA8BF2E98BF7EF93F1E78DE8DA80FAE890F9E68FAE913DB6943F FBDE84FFF0A16761189A9953EBE5A63D39016563391B190B000000150F1A161205828155BDBC84 F4F0BDEEEAACDAD985E1E07EECE995DED992F1ECA3ECE599DDD688E7DE90FCF2A5E5DB92DCD191 C4B884786C453A2F200E050000000023230C7A7A54D9DAA4FFFFCBD1D3A2959372524C3E1B1214 0500010200002B211CA6A46CE6E596EFEDA4EBE6A5CAC3866C632AEBE0A7EFE5A6EDE39EE5DB8F E1D683E6DE8DE4DC9FEBE5AC2F29009C9656F4ECACD9D28BE1DA8DDBD580E0DB7DE9E480F3EF84 F6F192D2CC8388803F6B6328726B36ADA5755B532BA79F71FEF7C1D6D094D2CD89D2CE83484207 776E2AEFE6A2E9E099F7F0A5EBE499F4ECA1ECE499EAE397F5EDA2E7DF95F9F0A9FBFAB8FAF2B1 F3ECA8E8E49BEFEA9FE6E497EFEB9CEAE699F3EEA3EBE49EF1EAA6F6F2AEF0F3AAEDEAA2F5EBA3 F7E9A2F2E59DEEE79AF7F2A4F7F0A2F9E69BC9A25BB57E3EEED286FAF09DF0E6A1ECE6A7F8EFAC FFEBA1E4AF6CBF8751634A2B131A00D1DFA2F8F6B1D5D396EAE8ACE9E9A1DEDF95F0F0A9F5F4B1 EFEDAFE6E5AD1F1C11433E18E6E3B0F3EDB8EAE5BC292A1291925CFFF9BCC08A48B27F34FFED9B FAEA9DFEEDA9F9E7A5F1F1A7E6EA9EF1EDA6F5F0ABF5F1AAECE89FE1DD95D9D58CE0DC93EEEAA1 EEEAA1E8E49BEAE69DE9E59BF4F0A5F5F2A7EFEBA1F5F1A7F2EEA7F4EFABEDE8A6E5E0A0EEE8AA E7E1A4EAE4A7EDE7A9F3EEAEF3EEAEEBE6A7F1ECABFEF9B7FBF6B4FBF6B5E4DF9DE3DE9CF4F1B0 C6BD811A0A001A10042E281C48442F67633F91936FE1E8C1FAF9D2F0EEB5FDF6B4E8E59EFFEAA9 DDB16CCAAD51EBD98FE4DCACF8F4CFE6E2C3E7E3C3C0BB986E6C4330330D4B4629F6E7B7DBBA70 D0B75FFCE99BFDF0ACEAE29EDBD882E5E48CEAE89CDED89CEAE5A2EFEC9DEBE79FEEE9A6EEE9A8 ECE6A7EDE7AAF1EBAFF1EBB1E5DFA3E5DFA1EFEAAAF7F2B1F4EFB7E2DFB5F8F2C4EEE8B4E7E1A6 F8F5B5F3ECACF0EBAFFFFECDAFAD8D0B0B00000000000000D0D090FEFDC0F9FAC1FAFACE7F825D 3E390FFFF7C8FFF4BAE2BB77D2AA5FFFE79CFAF5ADF2F4AFF3F4B0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD071DFD275EADC81F4E68D F7E991E2D47CEEE087E8DA81E2D679E6D97BE9DC7FF2E48CEDDF86E3D57CE7D980E8DA81F2E48B EEE087E4D67DF0E289EEE087E4D77EE8DD88ECE191E6DC89E3D884EADF86EFE48BEADD82E8DB7F EBDD84F2E28BF7E790F8E994E9DD89EDE38EF0E68FE9DF88F3E990ECE289F4EB90F7EE92F6ED90 F9F091FAF192F4EB8CF5EC90FFF699F3EA8DF6ED92FCF398F3EA8FF4EA91F6EC95F9EF98F4EA93 F3E992FBEF9AFFF5A1CDA554D0B15BF9EB8CEEED87F1E581F5E182FBEE8FECED8CE9E98BF7E48E F2E288F0E385F1E487F7E990F9EB94F9EA97F6E794F1E28EF3E48FEEDF8AF0E289F9ED94F6EA95 EEE590E9DF8AEAE08BF3E994FAF09BF9EF9AEFE590E8DE89EAE08BF0E691F2E893EEE391EADF8D D9CF79EFE58CF1E88DF3EA8DEAE184EAE184FBF296F2E88FEDE38AF7E990F4E48DFCED9BCFB267 96701FEBCD70F0E0992F2A009C9B5EFFFFD1302A0821230E0301000B0604040000140E00030000 232200716E44C7C491F5F4B4F0EEA0E7E49DDFDB9CCCC888D7D292EAE5A5F0E8A9DBD0979D935F 2B2100170E00060000160E0557504A989585D5D6B8E4E5C5B3B3945554381A15020D0600070000 080000130B00534B25CDC792F6F5A2F0EF90EAE894E0D992F6F4BC7B713DF3E7B5F6ECB7E7DDA1 EEE69DF2EA9AE8E28DF7F2A7F3EEA98B86443B3518F1EEB4EDE3AEEEE2AEE0D4A0EADFA8E3D69E 9C90547A7031564D0D7E7437D1C78EF8EEB8FEF6C39D9461322B00E1DB9EC5C17EEDEBA1DBD98C DAD490453D00A09859F0E8A7DCD493E7DF9DEBE4A0EDE6A2EBE4A0E5DE98EDE6A0DAD38EE5DC9B CBC382E5DD9CEDE8A6E9E6A2EFEEA9EBE8A3EAE7A1F9F5AEFEF7B1F6EDA8EDEBA4F3FBB2F6F5AF FEEFABFDE6A4F9E7A3F6EEA6F7F9ADEDF0A3F5F2AAFFE8A6B27D41B88242FEE79FF6F3A8E3EC9F F5F4A9FBE59DFEDE9DD9B47F2707009B865EFFFFC8E7EF9E3B3A07A19E6BF5F5B0DDDC9BE2E0A5 E3E0A9E5E3A8F5F2BC5853270E0804BCB88AF6F4BEF2ECBE40442D5E6231FFFFD4EBC27F925A0D EECB77FFF4A7FFF3AFFDF2B1F3F0A7EBEAA2EDE8A4F5F0AEF9F4B0F7F3ACF1ECA8F3EFA8F6F2AB F2EEA5F1EDA4F4F0A7F3EFA6F5F1AAF8F4ADF0ECA5EEE9A5F9F4B0F7F2AFF1ECAAF1ECACE8E3A3 EFEAAAEBE6A6F2ECAEF4EEB0F3EDAFF0EAACEDE8A8F0EBABF5F0B0F2EDABF1ECA9F8F3AFD9D490 DAD691DFD5956B5A234F461E4E4B28332C0A0C04000202002E371DB7BD8FFFFDC0FDF5A8E0DE91 FFEBA7DFB36EE6CA6CFEF0A4F3EAB995916D302D125E5A41948D72BBB985F0F3BEEEEACCFFEFC2 E1C17CC5AC57FFF9ABFBEAA7FEF5AFE1DE84EBEA8FF0ED9EE4DF9FEEEAA1F3F09FEFEBA4F2EDAA F1ECACEFE9ABF0EAADF1EBAFF4EEB2F1EBAFF4EEAFF8F3B3FBF6B4FDFABBF0EFB6FFFBC1C9C486 CEC681FFFEBAE6E091EBE89AEDEDAAF5F7C71C1F040407005E5F31E7E6A4FFFEBBECEBACFBFFCC D4DBB20F0E05BEB184FFEDB2C09A53EACC80FFEFA4E5E39CECEEAAF5F6B2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDF82E8DB80EADC84 EFE189F2E38CF2E48DEADC83E7D980F0E387F0E385E6D97CF4E68CE8DA81E3D57CF4E68DEFE188 FAED94F5E78EE6D87FE4D67DECDE85E8DA81E1D580E7DC8AF0E592EFE48DE9DE84E4D97EE5D87D E8DB7EEFE187F6E68FF8E891F4E48FEADE8DF2E796EFE591E5DB86F7ED96F1E78FF2E98EF5EC90 F3EA8DF5EC8DF9F191F6ED8EF5EC90F5EC90F8EF93F6ED92F8EF94FDF399F3E990F4EA93F6EC95 F2E891F1E791F9EB97FFF09FDBB363D9B963FFF391ECEA83F5E883F7E382FBEE8EEEEE8DEBEB8E F8E590F3E38AF0E388EEE187F2E48CF5E692F7E895E8D986E9DA87F3E48DEFE289ECDE84EFE48A EBDF89EBE18CF0E691F4EA95F5EB96F3E994EDE38EF1E792F2E893F5EB96F4EA95EDE38EEEE48F F7EE98F4EA91F7EE93F1E88BEAE184E8DF82E5DC80F2E88FF1E791EDE28CF6E892DCCE7AF4EE9F FFEBA59B7426DEBC5FA59453120D01B7B775E2D7A64640230000000B0A000F09032E2914080300 120E010A0600100C002420064C492A949263C9C996D1D19DDBD9ABACA97C827D584F482C1B1200 0500000A010018100D554F4186827CAFADA6A09F905A59491411060000000200000200000A0300 251F04544E19A7A257F5F29DF0EB90E0DC7FE9E78EE4DE8CBBB46C61581A3C32008D8350DFD59D ECE4A8D6CD8ADAD389F5EFA5E8E3A5EDE9B3F3ECB8413909A69B72DAD1A8AB9F767C70475C5021 62552372662FB9AE73E8DF9BF8EFACECE2A1DCD393DED598E4DC9E746D2B5E5922E9E59EEBE99E D6D488F2ECA7B4AC6E3A320FC3BB7FF2EBACE3DB9DE3DB9AECE4A3E8E0A0F7F0ACBBB36FCAC580 A79E5B362D00423C06908A4EC5C287F0EEB5F5F4B9FFFDC0F0EDACEFE8A3F3EBA3FAF7ADF0F6AD F0EDA9F9EBABFDEAAAFDECADFDF5B1F3F4ADFAFAB4FBF2AFFDE9ABF6D299B38046C9985AF5E99B F8F9A5EBE696EBDA95F6E6AAEFDEA9381600AC8052FBE5A2D1D280120F073E3A17E8E7A8D1D094 E3E0AEF8F4C7FAF8C0E9E6B2D5D1A90A0300908B61FAF7C0F6F6C572774E31340AFEF2C2FAD592 C89140D39C48FFECA2FFF1AEF7F0B0EFEAA3F7F1AAEEE9A7F1ECADF4EFAEF7F2B0F9F4B1FBF6B2 F9F5AFF1EDA7ECE9A0ECE8A0EDE9A1EDE8A6F4EEAFF9F4B4F9F4B4FAF4B5F5F0B1F1ECADF8F3B3 F4EFAFF8F3B3F4F0AFF9F4B4F4EEB0F5EFB1FAF4B6FDF8B9F7F2B3EEE9A9EAE5A3F1ECA9EEE9A5 DED994EDE8A3E2D896C5AE76EDE8C2FFFFE5FAF1CFDDD3AEBAB6941B2414222807E4DF9EF2E897 F1F2A3FDEBA6CEA25DCDB050FFF7A8FDFAC9AFAA873833260A04000200000402003D401C939078 D3BC93EDD096C9B063FEF5B0F9ECAEF2E7A6F8F29DF6F298F7F3A5F2ECAEFBF7AFF3F09FF9F5AF F9F4B3F8F3B3F6F0B3F5EFB3F4EEB2F3EDB1F9F3B5F9F3B5F6F1B0F7F2AEF7F5B1F1F2AFF1F0B0 F8F4B3EAE3A0EDE599FFFBA9FDFBA7E9EA9EFFFFC85E643D202612E8E9BEFCFBB9F8F1A9EEECAA EBF1BBFBFFE14C4D2B6D5A31F2CC92C8A259FFE99CF9F2A7ECEDA7ECEEA9F0F0ACFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8DA80E9DB82 EFE189F2E38DF1E28DEDDF89F1E38BE9DB82E7DA7DEDE081EFE285F3E68CE8DA81E2D47BEFE188 ECDE85E9DB82EFE188F5E78EEADC83F1E38AECDF86E0D57FE6DC87EDE38CEADF85E0D579E3D87C DFD274DFD274E4D87BEDDD85F0E088EEDE88F3E795F3E898EFE592E6DB89F7ED97F4EA91F0E68C F5EC90F2E98CF2E98AF6EE8DF4EB8DF8EF93F4EB90FFF99EFAF297EFE58CF5EB92F7ED94F7ED96 F9EF98F4EA93F3E994F9EA97FFEF9EE0B869C7A851F9EC8BE8E77FF5E882F3DF7EF4E787E8E987 E8E88CF7E392F0DF89ECDE86ECDD86F1E28CF5E691F6E794F7E895F2E48EF5E78FF1E488F1E486 F8ED91F4E892EDE38EECE28DF1E792F3E994F3E994F5EB95F7ED98F3E993F7ED98F9EF9AEDE38E EBE089F2E88FF2E98EEAE184EEE588EAE184F8EF93F4EA91E9DF89F4E996F0E592EBDD8AE7DB88 EDEA9DFFE7A5C99F57DBB2523E2A102D2A10DAD99FDCCFA647402A000200181600747144BBB983 413C1B0400000A03000D09001411050803000D0903201F113434162523181210060B0600040000 0B01000C05010E0406201B153936302A2B1F141811080A020908000C070104000200000033291D 867E5AA39E5DCECA71F5F28AF0ED80E6E277B0A856ECE49F867D39625B17CAC27FB3AC6A2D2700 48420B585313615C1C6662215D581D4E461E473E1B443C18382C131B11056A603A766A3F9A915D C7BF7FDED68DD4CD7FF0E998EAE28FE1D888D3CA7AECE594DFD789E2DC8EE6E091454200AEAC60 E5E499E3E098E8E29FEEE6A69A9255302801DAD391EBE3A4E3DB9BEEE7A4F2EBA8D4CD8A847D37 F2EFA8E7DF98C6BE7D8C864D5D57236E6A3A7E7B4D605D2D65622AB0AC6FFFFDB9F4EFA3F4EDA3 F9F5AFEEE8A6F1EBA9F6EEADF3EAA9F2EAABF7EEB0F6ECAFF9EFB2FDF0B6F5E6ACEFC993A57037 B59145FDE992FBEA97F4EDAAEAEAB2FFFFCFB4935EB9854BBE8B48FDE19937280A19160CD9D89D F8F6C2EEEDC67C785293925BFFFFD0F3EFCD191300464226F3F3BAFAFECAAFB28B121300E2E0B1 FFE5A1E4AF5BB6721EF9CF85FEF7B3F2F5B3ECE49FFAEFABF7F0B1F2ECAEF1EBADF4EFAFFAF5B5 F7F2AFF4EFABF5F0ACEBE6A2E4E099E8E49EEFEAABF8F1B9FCF5BCF4EEB3F2ECB1F6F0B5FBF5B9 FCF7B9EDE9A8F0EBABF5F0AFFCF8B7F7F1B3F3EDB0F2ECAEF9F3B5F9F4B5F5F0B0E9E4A2FAF5B2 E3DE9AEBE7A0F9F6AEADA160624617C7BD99EEE9D2FFF5D9FFF2D2EEE6CC747F6A00060080793C EBDD8EC9CB80DECB88DCB069E8D06EFFFCABE9E2AEFFFEDCF6F2DCCCC6B8ADA4966A673F1E2100 121000200D07816231B79E5FFEECB1FFF4BFF9ECB2F5ED9EECE693F0EAA1F5EFB3FFFBB7F2EFA1 F2EEA8F2EDADF6F1B1F9F3B7F8F2B6F6F0B4F4EEB2FBF5B7F5EFB0ECE7A6F0EBA7F6F4B1F3F4B5 F8F6BBF7F1B9F5ECB4F6EBACF6EEA6F8F4A8F4F2ACFCFEC8C0C6A2070B00ACAE85F0EBABF8EFA6 F7F3AFF1F7C2F5FFE1BFC3A72A1800BA9558EDC77EFCEB9CEAEAA0EFF1AAE5E5A1E1E19BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D479 E3D57CF0E28BF5E692F3E48FEADB85F5E78FF2E48AEEE184F0E383F1E486EFE187EEE087EBDD84 ECDE85EDDF86E4D67DF0E289F0E289E4D67DE6D87FF2E58CF3E890F0E691ECE28BE2D77DD9CE72 E9DF82E9DD7FE6D97AE6D97BECDE82F3E48AF5E690F7EB99EFE494F4E998F0E593F4EA94EFE58D F0E68DF7EF93F5EC8FF2E98BF5ED8BF4EB8CFCF397F2E98EE9E085F4EB90F9F096F3E990F8EE97 F9EF98FAF09AF4EA95F3E994F9EA98FFF0A1DFB769B59540FAED8BE5E47CF3E680F3DF7EF1E484 E6E587EBEA8EFCE898F8E793F4E591F5E692F7E895F9EA97F9EA97F7E893F2E48DF4E68DEFE386 F0E283F8EE8EFDF19CF4E997F2E795F8ED9BFAEE9DF7EC9AF2E795F4E997ECE18FF2E795F8ED9B EBE28BE6DD82ECE387FCF396F2E98BF4EB8CE7DE81F8EF94F7ED95E7DD87F0E593F2E697F4E594 EADF8FDDDB91F9E1A3F2C681C99E4155410F3E3A19BDBD86A79873211808050E00BCBB8AFFFFB4 D6D788E8E4AF928B731C130C04000003000002000807001402010400010000000004020409040B 08010C10051506000D0F09120C070B000000000200010600060A000808031F1F0750501F85844A AFAD6DBAB671E1DA94F5ECA3DFD688E3D986E8DD8AE6D9A057491D645A27EAE0A2F4EDA5EAE699 9F9D4EA3A154B9B972A8A868A5A36AA7A46FB8B581CDC797C4BD8EC2BC8E433C0FBEB684F7F0B8 F2EBABF1EAA0E5DF8EDCD87DDED879DBD373F3EA8BE0DB7AD9D372D1CC6DD8D478D7D37BB7B563 4A4800D1CE87DDDA96ECE7A3DAD38EE2DB95564E24494205EFE7A5E1DA96E5DE98E8E29B7D762E C5C179EAE69EEEE69DFAF1AEF4EEB2E6E0AFB4B08643411A2C29071C1808544F17DBD691F7F0A1 EFE699FFF5B2FAF0AFF6F6B3F3F7B4F1F3B1F8F0B2FEEDB5FFE8B2FFF3BCFCF6BCE2E4A7F0E6AD E4B880BB762ED79D49FEEA96F6FAB7E1EAB6F6EEC0987C43D7AA669E631AE4A5687F6246090400 9E9D65FBF9C8BAB6920F0B030D0B00A6A572FFFDDD645D4D201C03E6E9B0EFF8C0B5B88F100D00 DEDEB1FFF2ABFDC972C87C28E0AB62FFF3AFEBF5B2EAE29DF3E2A2F5EEB1F1EBAFF0EAAEF0EAAD F2ECAEF2EDADF3EEADF6F0AEEEE9A5E8E3A0EEEAA4F0EAAFEFE8B4EFE8B2F0E9B3F3ECB5FAF4BB FEFABEFEFCBEF1ECACF6F1AFF9F3B2F6F1B1F7F1B4F1EBAFEFE9ABF4EEB0F6F1B2F4EFAFF0ECAA F4EFABE9E4A0FBF6AFFFFFBABEAE6E3316000B0000201A0565523DBAA287FEF6E3909A8B000600 989157FBECA0ECEEA6D9C585BF934CEBD06EF8EA98FDF6C1D3CEAB686351A8A297E9E0D2FDFCD2 F1F4BFCAC7A7452D131F03009A7E49FFF8C8E4CDA2EADBAAFDF3ABF8F1A3F8F0AEF2EBB5F9F4B5 EFEBA1F4EFABF3EEADF6F1B1FAF4B8F7F1B7F4EDB3FAF4B8FDF7B9EFEAAAE2DD9CECE7A3FAF7B9 8C8C5967623BF7F3CEFCF2D1F8EBC2FFF8C7F1E7B2B3AD7C403F1C3D3F2C000000848663FFFFBF F8EFA5F5EFA9E7EDB8E9FBDBE7EDD50F00009B7443FFE79EF6ED9FEBF2A9F1F4AFEAEAA5E5E39E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E9DA84E7D983EDDD8BF0E190F3E493E9DA87F2E38EF3E48DF6E98EF1E388E4D77BE7DC83F1E48B EEE38AEEE389F3E78EE8DC83EBE087EEE188EDE289E7DD83EADE85EEE48CEEE48DEEE48DE4D982 D9CE76E4D981EDE28BE9DE87E8DB86EBDE89F0E38EF5E893F9EB98F5E894F8ED99F5EB98F4EB96 ECE58FEBE48EF0EA93F6ED95F7EF95F8EF94F7ED92F4EC94EBE28ACEC56CEEE58CF7F097F2E98F F7EE95F6ED96F2E993F1E893F4EB97F8EA9BFCECA0E5C575AC8F38EFDD7FEEE17EF7E688F5E388 EEE38BECE791F3ED99FBEA9BF6E594F8E997FAEB99F6E794F0E28DF3E48DEEE187F3E68AF5E88B F2E686F3E784F2E586F5E894F4E796F5EA99FDF0A0FCEE9EF3E797F0E492F3E694F1E690F7EB95 F8EB95EEE48BF2E98CEEE587F7EE91EDE488EBE286E7DE83F6EC95F6EC97EDE290F3E898F5EA9B EDDF92D1C677EAE393F9E49EDEBF83A5874C392E14575925E0E59E5F572D03000026270E7A763C C6C175ECE89BE8E0A8F1E7C0322813050000372F183F362038331D3F3B1F3634152F2A14241E0B 1D1807171001150E010D0600150D001007002F250D4F432265592D8B8349A4A260C8C67DE3E290 D7D47DE1DD87E0DB8BD4CC83CBC17EE3D99AEAE2A1A29958574A14837440EFE2A3E6DC92E0D88B EAE294A6A057797331EDE7A7E9E6A3E9E6A1D0CD84D2CD81E7E299EAE49FF4F2B175703E352F0A E1DB9ADED692DBD385E4DC85EBE285DCD372D6CC6EE1D877E6DD7BE0D977D4CC6CD3CD71CBC471 E6DE9488804C4B4210E7DDAEE1DA93E8E288DED787EBE49D3127126F643AEFE5B7F8F0BF878147 A39F5BF2EFA2F0EC9AE4DD8EECE39AF7EFABF2EBAFEAE3AEDED9A6DCD6A2F1ECB0DED797EEE69D F6EF9EF6ED9DFCEFABF7EFAAF6F4B1F1F3ADF2F0ADFBF5B4F7EAACFCEFB2FAF1B6EFE8AAE9EBAA D3D48EF8F9AFFACD87BC8039DAAA60F7E59DFBF6B8E5DFAC1B0D00B69968EBBC79C8833EA5744B 1600007E784FFDFFCB76865A0001000103001B150CE6DEC5ABA291252503DFE59FF7FBBFBBBE89 111100DDDFA3F8E8A1FFE697E5A156C79049F5D792F0F0A5E4DF91EFE89CF2ECA7F3EEACF0ECAD ECEAABEAE5A7EDE6A4F5ECAAF7EDA8EFE7A3EDE8A6F0EEADEFEAACEDE6A9F2EBAEF9F2B5F8F1B5 FCF8BCF4EEB2F8F2B6F7F2B5FCF6BBF5EFB4EAE6ACF1EEB6F0EDB5F4F1B7F8F5BBF7F5B8F3F4B6 F9FBBBF6F4B4F2ECADFFF3B7FFFCC3DABE84A88B51C3B68C9B8F746355483B2C1B2D2615313724 161803C8C68CFFF5ADEBE59BFFEDA7DBAB64EECF79FFF5A7FFFBBFD4D0A05E5B423B3424201A04 3F3B246C6D4FE7E8CD9E8A6D100000684E28FEF4BBFDEFB9F6E4AEFBF2B1FAF5B5F3EFB4EDE8B0 F9F4B1F7F2A9F6EDACF8EFB1FAF1B2F7EEAEF6EEADEFE7A5FFF8B4FFFDBAF5ECA8ECE49EEBE39C FAF5B5AEAC79181301433B2BBCB39EFDF7E2F8EDCAEEE8B9E3E1B342402F0000000809008B8B68 FBF6C3F4E9A5FEFAB5EFF0B4EBF4C9EDE8C443260AB1804DFFF7AEF9F3A9EAF7B6F8FCBAFDFAB8 F9F6B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEEDF8CEBDC8BEADA8AEBDB8DF4E496EADB8CEFE08EE9DA85E7DA81EADB83E4D97FE6DC83 EAE087E7DD84EBE188F2E88FF1E78EEEE48BF2E88FF5EB92F5EB92F1E78EEEE48CE6DC86E4DA84 EDE38EEDE290E8DD8CEDE292EADF8FE9DE8EE8DD8DE4D888E7DC89F2E48BF3E68BF5EA91FBF19A FBF4A0F9F39FEAE593EDE796F5EF9BFBF49DFBF29BF9EF98F5EE9AFEFCA7F4EC97F5EE95FAF399 EDE68BF7F095F5EE94F0E891F2EA95F7EF9CF3E99BF5E59BF4DE8EB49A42F0D377FDE588FDE88F F8E895EFE595F4EB9EFAEFA0F8E99AEFDF92F0E190F6E795F5E692EFE189F2E48CE7DA7EEDE082 ECE07FECE07EEDE17DE8DB7AF6E892F6E796F7E897F9EA9AF6E699F1E392F3E493EFE08CEFE189 F0E28AF0E287EBE182E4DB7CF0E788F8EF92F0E78CEDE38AEFE48DF3E994F8ED9AF2E796F9EE9F F7EC9EF3E79DE7DC8DEFE389F0DF93F1E0AE66573C0905007C823BB5BD720E0D02201B05A79F6A 8B82402F2600847A3FE7DDA0F4EAB2BCB17AA49A64E7E1A3F5F4B6F0E99EEBE593F3EC9DDDD592 DBD395D4CF92B8B579AAA86FA8A36AAAA266B4A667D5BF79EDCE84F9E495FBE690F4EF91E2DE82 DED87DD3CC73DED683DAD384CEC67BE2DA96C6C0806C682A7D783CC9BF81F1E29DF1E497DCD27E E1D784E2D68CDFD495746830DDD397D6CD87DCD683C7C265CCC664DAD578DDD882E1DD91CDCA85 4C480E989250ECE4A0DDD186D8CB75E3D479EBDD82E2D680EBDF88F2E78CEFE586E3DA7CE4DB82 D0C777DED491DFD29D5D4F287B6B48FCF2A6D2CD64E4DD86FFF7B5CCC19424180A9C9079AEA486 423B10F0EDB0F9FAADE7E891F4EE9AF9EF9FFBF2A5F1E9A1EBE29DF1E8A4F7EEAAEDE59DF0E89D F2E999EDE391EBE392F9F1AAF4EDA7FAF3ADF7F1ABF2ECA6F5EEA8F4EDA7F5EEA8F6EFAAF4EDA7 EDE7A1DFEC98D8EA90FFF5B1EEC78EAE7538D5A65BFFEFA5FAF5B81B1A00A99974FFF3B7DDA551 BA8145350B00473A1CE9F8B56E8C512B432B1E2623070100CCBEACBAAF9C323408EAF4A3F6F4B5 D9D8992D3300DEE49AF2E8A0FFF2ABFACF8CB87E3CD7AA62FFF8A6F4F39AE9EB94F3EC9EF2EEA5 F0F1ACEEEEAEE9E7A6EBE3A0F5EAA2F8EAA3F3E8A4F5F0B0F0F0B2F3F0ACF2ECA2F5EEA7F4EDA9 EAE3A0F2EDACF1EBADF3EDB2F7F2BAFAF5BEF8F3BFF4F2BFF1F1BDEEEFB9F5F4BCF8F7BFF5F5BB F4F9BAF9FCBDEFEEAFFBEFB3FFE8B2FFE0AFC79D68C7AE6AFFFAC2FFFFDDFFFFF2F6F1E7CECCBD C4C7A8B8B887F6F2B4EEE49EFDF0A7FBDF95D8A45BF7D388FFF0A8F8EDA8F9F4B8F8F6C3F6F5CF D4CFB0B3AE994F4E3C1A190B483B176E57288D753AFEEAA6F3DE99FAE9A7FCF2B8FCF8C3EFEEB9 EFEDB1FBF7B0F9F2A8FEF7B8FDF1B5F3E8AAE3D897E2D892D3C981D4CA82FDF4ACFFF6AEFDF3AC FBF0A9FDFABAFCF8C5A8A38539331D0F09044D4635CAC6A7FFFED3F5F6CDD4CFC8130E0C242611 D8D7ACFEFCD3FAF2B7FEFBB8FDF8B5F9F3B9EDD7A0CBA46AF5D593FFF4B1F2ECA9ECFDBFEFF0B1 F8F3B4FBF7B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEADB86E4D581E5D684E5D685ECDD8BF2E391E7D886E8DA84E9DB82E9DC80ECE185 E8DE84E5DB82E8DE85E7DD84EDE38AF2E88FEDE38AF0E68DF2E88FF1E78EEFE58CECE289E2D77E E0D67DE9DF88ECE28DEADF8BECE28FEADF8DEAE08EEBE08EE5DA88E5D986ECDF85E3D57AECE188 FAF099F7F19AFCF6A0F1EC98F4EF9AF8F29BFBF39DFAF199F5EB94F5ED99FFF7A3E7DF89C6BF66 F5EE93EEE78CF7F095F6EF95F3EC94F7EF9AF7EF9CF1E798F9E99EF9E897C4AA52FCE287FEEB8E FDE88EF9EA95F4EA9BF4EC9DF7EC9CF7E999F8E998EEDF8BEEDF8BF6E792F3E58DEDDE86F1E488 EFE285F5E889F6E989F0E482F0E383E9DA82F0E28DF8E995F7E895F4E594F4E593F3E492F5E691 F2E48CF2E48BF5E88CF4E98DEBE283F3EA8DF7EE92F5EC90F8EE95F7ED96F3E994F5EA98EFE493 F6EB9BFCF1A2ECE093F1E693F3E98AF7E7A9CDBB952C210E121100C0C38B5857380703005B5624 DFDA88DDD689B4AC5F4A42144239008A8044D8CE92FAF0B2E6DC9CE4DA95E4DC92DFD889E1DB87 DFDA84DFDA86E7E592E6E494EFEDA0EFED9DDFDA88EDE28CD0BD62C3A94BFFEE8CF3DD85FAF1A3 EEE798E1DA8BE3DC8EEDE699D5CD81B3AB646D651F575009A09A55E3DD98FBEEA9EDDF96EDE190 F2E890EAE08BF0E498F6EBA9968B518F8549F2E9A3D7D17FE3DE83CFC86CD8D279E3DE8DDDD990 FFFCBBB1AD6F534C1EDFD692DCD086D3C674E1D17ADECE7ADDCD83E8D88AF1E38FEFE489E4DC7A DED776EAE488DCD583EFE79FC6BE7E322803C1BB6EE0DC82E6DF94D6CD90FFFACBBFB590100500 342C09DCD6A6FBFBC4E7E49DF5F5A5F2EA9AF1E998F5EC9EF3EBA0F1E9A1F7EFA7F1E9A1EBE39A EEE79BF4EC9CF1EA97F0E798F3ECA5F4EDA7F7F0AAF0E9A3E8E19BE9E29CF6EFA9F7F0AAF5EEA8 F2EBA5F2EBA5E2E696DAE28EFCF2B6FFEEBBEBC892B28F4BC3AC66FBF6B9372D0A98875EFFEDAD F3DA86C3A263331800221501EEF3C2828E66475345D0D8D50005005F6049312E1A4D4C2AE1E29C EFEAACEAE9AA9FA561E9EFA8F3ECA4FFF2ACFFE9A7D9A461C19048F6DB8AFFF69EE9E48CECE697 EBE99FEEEFAAEEEFAEE9E8A7ECE7A0F3E8A0F5E79FF7EDA6FBF6B3F4F3B4F2EFABF2ECA2F3ECA4 F3ECA7ECE5A1F2EDACF4EEAFF7F2B6F1EDB5F6F1BAFFFCC6F8F5C0F0EEB4F1EFB3FAF5B8FBF4B7 F2EFAEF0F0ACF6F6B1F4F0AAFFF7B5FFEFB3FFD6A0B08544E8D77FFFFDC0DFCFB35347464E484B 949384EAECC3FFFFC8F1F0A5EEE7A3FAEBB2FFE8AADFAE65F0CC81FFEAA2FDF4AEEFEDAEF3F2BC DFDCAEEAE5C3F7F3D8FFFFEDDAD8C0726541DAC494C5AD73FDEAA8F5E09AF6E5A1F4EAADF5F2BB EFF0B7F1EFB3F8F3B0F2E9A5FEF6B9F6ECAFEDE3A6E0D796E4DB97D9D189B4AC64D0C880E1D992 ECE7A1FBF2AEF4ECB1F0EBBFFEF8D5DFDAB6494525120D000F0B008E8C68D7D7B9D2CDCF100B09 30321AEDEEB9FDF9CAF2F0BBF6F1B5F8EDACFFEDA9C8A563E4C280FFEBACFFF7B9F1EEAFEDF2B2 EDECACF4F0B0F6F2B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBDD85E5D780E9DA86EBDC89F0E18DECDE89E3D47EEDDF86EEE185EADD7E ECE284E8DD84E4DA81ECE289E9DF86EAE087F1E78EF0E68DF2E88FF0E68DEBE188EAE087E6DD83 E7DD83ECE388EBE287E4D981E7DD84ECE28CEBE18BF2E892F6EC98F2E894F4E893F8EB8FE4D779 ECE285F8EE94F0E991F5EF98EFEB93F3EE96F2EC94F6EF96F8EF95F2E88FF9F19DFDFAA5ECE38B E5DD84F0E88DF6EE93FAF296F6ED94F2E991F7ED98F8EE9CF6EA9BFAEA9EF7E291BAA148F9DD80 FFED8FFFEA90FEEF99FAF0A0F9F1A1FAEF9FFBED9BFEEF9AF4E68FF2E38CF5E790F2E48BECDE85 F8EA90ECDF85F1E487F3E689ECDF82F3E689E3D679EADD82F5E88DF6E791F7E893FEEF9BECDD89 F7E893F5E78FF4E68DF6E98DF3E98CEFE688E9E083EBE286F1E88DF2E88FF3E992FBF19CF5EA98 E9DE8DEBE090F3E898FCF1A2EBE08BEBE281CBBE7E4032170900004F4B1B85805B0D03032C240B D2CD81E4E278D4CF72EBE491E9E291C6BE7481793B51470B685E2EB3AA65E6DD97EAE299EBE396 F1EA98E6E087E1DD83E6E58DE1E18AE0DE8BD5D37EC8C26BEEE388E6D575CBB450EDD06BEAD682 E5DB9AE8DF9FF6ECABBDB47189813B5B520D6B621EB1A963EAE295F1E99BEEE598EFE296F1E493 FDF29BFDF499EFE58EF2E797F5EBA5C5BB7B4F4607ECE49CDED687E9E38DD6CF78E0DB87E4DF8F E0DC95E9E4A3E1DC9D5F571A9A914EEFE59CDDD281EDE08AE9D986DBCB7AE3D484EADC8BE9DD8B E0D582D7CE78E4DE87DCD77EDDDA81DDDD82959541373606D1CF8AEBE8ABEAE6AFB1AD78514C2B 302A0B2F2A03D0CB95F3EEB4FBF8B8EDEBA3EEE798ECE592F2EA9AF6EFA0F7F0A4FEF6ACF2EAA0 F9F1A7F8F1A2F1E899F1E999F6EFA1FAF4ADFBF4AEF6EFA9EFE8A2ECE59FEDE6A0F7F0AAFBF4AE FBF4AEF6EFA9F2EBA5EEE99FEDE79EEFE2AAF7E6B6FFFBC9E7D1928E7B39CFBD83574319A18E5F FFF2B0F9EE9AF4EDAA5D5532040000A79E82C9C3AE1A1916282C27060F020008000A0D00ABAA7F F5F0B8DFD49BE5E2A4EDF1AFEDF7AFEFEFA7F9EAA2FFEDA8F9C984BC8B41E3BC6CFFE790EADB85 EFE799EFEDA3F0F2ADE8EBA8E6E7A3EFEBA4F4EBA1F4E89EF2E8A0F1EBA8F3F0B1EFEBA7F0EAA0 F7F0A8FAF3ADF5EFABF4F0AFF6F0B2F9F3B8ECE7ADEEE9B2FEFAC3F3EFB9F4EEB0F4EDADFAF1B0 F9EEADF5EDA8F8F2ABF7F2A9FDF8ADF8E79EFFEAA7FDD596AC8036E6DA7DFFF8B5847659000000 01000001000051552AF1F3AFEAEA9FFBF3B4F6E7B7FDDFA6CFA258E9C77CFEEBA1F3EBA3F2F1B0 F3F2B8F9F7C5CFCAA27A7451635F47B5B393FFF3D1FBF1C4A58D56E3C988FFFCB5FBEEA6FBF3B0 F9F8B9F4F5BAF6F3B8FAF4B5F7EEAFFCF1B8FCF5BBFDF6B9F4EAABFAF2B0F9F0ACCFC581F6EFAB E5DF9BCAC17FF3EAABFFFEC8F6F1C8F3EEC6FFFFCEF1F0B39A976B1E1C09000000262117372F37 080301282D0EE5E6A1FAF8C2FAFBCBFAF6C1FDEDADF6CC7ED6AA59F2D388FFF5B8F6F4BCDBDAA0 DED897F4EFAFF9F5B5FBF7B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE8DB80E4D67DE7D982EADB85F1E38BEDDF87E4D67DE3D67AE5D879 E9DD7BEDE383E1D77EE4DA81EDE38AF1E78EF2E88FF3E990F2E88FF3E990EDE38AE7DC84E6DC83 EBE287E3DA7FE1D87CF0E78CF3EA8DE8DF84EDE489EDE38AF4EA92F7ED96F3E992F4E992F9EC8E EADD7DECE282F3EB8EF0EA8FF5EF97EEEA91F1EC94EAE58BEFE88EF8EF94F2E88FFFF7A2FFF8A3 F0E790FFFBA5F4EB90FCF398FAF196F9EF96F1E78EF2E892F7EC9AF1E695EEDF91F5DF8CB89F44 F5D87AFEEA8BFCE78CFAEC93F6EC9BF8F1A0FBF09EFAED99F4E58DEFE188F2E48BF5E78EF1E38A F1E38AFCEE95EFE188EBDE85EFE189F0E28AF4E68DE9DD7CE8DB7BF1E486F1E489F0E28AF9EA95 F0E18CFBEB97F8EA92FAEC93FBED94F1E68AE9DF83E2D97CE5DC80F2E98EF1E78EECE28BF3E994 F7EB9AF6EB9AF3E898EDE292EADE8DF2E690E8E080584E1B0D0300746B428A805F190D00150600 B7AA7DEBE68ED5D55DECE980DBD778DDD87DD7D07DEEE699EFE79E8E863F463E05362E025D550C 958D42CFC87BDFD88EE6E097E0D994C9C682E1DC99F6EEABEDE49EE7DA91FCECA0F5DF91D6B967 DEC882C0B57A90864B6F64274C43028D8442D8CE88EEE59AEAE092ECE190F9EE9AE9DD88EDE18C E9DF86E8DD82F3EA8DFCF299F8ED9BE8E095FFFCB78077329A934BFFFCAFE8E190D9D37FEBE594 E9E395EDE9A0D0CB86E7E29EC4BD78524A02E9E195EFE494D3C974E2D67DE5D57DE4D67EE6D887 E5DA8BE3D88CE4DB8ED4CF7DECEB94D8D97AD0D56FE6EC845C5E185A592CDEDDAE81804C191700 2F2D12D4D2978E8C5A251F00AEA96ED1CC94ECE7A9EBE599ECE594F2EB9AF3EC9CF3EC9CF9F2A4 FCF5A7F4ED9FF4ED9FFEF8A8FEF8A8F3ECA1F9F2ABF9F2ACF2EBA5F1EAA4F8F1ABF9F2ACEFE8A2 F5EEA8FCF5AFFDF6B0F6EFA9F7ECA8F7E9A9F8EBB5F3E8B4F4EAB4FFF5B7D2C289C1AC7D352009 665632FFFFC8E4E595FBFFC3999E7804000029190CA7968E332526080700000800000C00AAAE85 EBEABFDED4A0EADDA5DCD899E7ECA9DDE9A1ECF2A8F8EEA6FFEAA1FFE7A1D6A359CEA051F9D07E FEEE9BF4E99CF3EFA6F4F5AEE8EBA6E4E5A1F1EEA5F6EFA2F6ECA0F1E79DEBE49EF0ECACF0EDA7 F2ECA2F8F1A9FAF3ADF5EEA9EEE9A7F9F4B4FBF5B8F1EDB2F2EDB5FAF6BEF3EFB6FCF6BAFCF3B4 FEF0B3F8EAABF2E8A6F9F2AEE7E099EFE79EFFEFA6FFF0A9C99D5AA17A30F5E68DFFFFC1BDAF87 170E06000000262613000000A7A770FFFFC5E2DAA1FBECBDF4D59ACBA057EBCC82FBEA9FEAE49A EAEBA7EFEEB1FEFECF8C85580F07000802000804005B4E2CFFF8D1A9925FD0B87AFDE8A1FDF2A7 FFF9B0F9F8B3F5F6B5F5F3B9FAF3B8FEF3BBF9EDB8FDF4BDFFF9BEEFE5A8EDE3A5F0E8A7F8F5B3 FBF2B0F7EDAFFAF2B5FDF3B6ECE3AFFBF9D1F3EFC0EBE9AAFEFEB7FFFFCBB9B7881C1A04050000 050007030000373D19F1F3A7F6F7BCF0F0C0FEFBC8FDE2A0CB9643E0B056FFF19EFBFEBDE5F0B8 F8F6C0FAEDB0E4DD9EF0EDAFFBF7BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7DA7DE5D77EE3D57CE4D67EEEE087F1E38AF4E78BEADD7E E7DB79EADE7BE5DB7AEAE085E9E085E7DE83F2E98EF5EC91EEE58AEDE489F1E88DEBE287E5DC81 E8DF84EEE589E3DA7DDDD476EAE183F2E98AEFE688EBE385E9E183EDE489F1E78EEEE48BF0E58D F4E787F0E482EAE080EDE487F1EC90F4F094F6F297F6F196E9E489EDE68AFAF294F5EC91FBF19B F5EB95ECE38BF0E68CF9F196F2E98CF5EC8FFDF499F4EA91EFE58DF3E994F3E897F7E89AFCE995 B89F44F0D473FFE887F7E284EEE087EBE28DF1EA97F7EC9AF2E58FF3E68AEFE285F4E78BFAED91 F6E98EF2E48BFDEF97F8EA92EFE08BF2E38FF9EA96F2E48CEDE07EE8DC79F5E988F8EB8EF1E389 F5E78FF7E991F8EA92F0E28AF8EA92FDEF96EFE48BE9DF85EFE68BEEE58BF4EA91F7ED96F2E891 ECE28BEBE18CF3E895F5EA98F1E694F1E68FF3E990D5CF774E4C1E898449D6C9BD32211E120100 7E6D41FFF8B2E0D578DEDA67EBE77CE0DB77E0DB78EAE388EFE792EEE597F0E79BD4CA80BAB066 8B813A584F1B473B0D3B2D05483A1A5245255046256F6142807253746343735E3C8E744F81623A 56350B553E08695D1A786D2A9E9550D4CB85FCF3ABDCD488D8D081EBE08FF1E591E7D980E6D77E F3E88BE7DC7FE8DD80EEE588E6DD83E0D581D7CE7EE3DA8FBDB56B433B00DFD78CDBD486DAD584 EBE693F1EC9BEFE99AE5DF92E4DE91E0DA8D67611D7E7729E7E08DE8E08CE9DF88EBDD82E4D67D E2D57DE5DB86EAE18CEAE390E8E391EAE898D3D484DADD8CD8DB8ED2D3A4212005262608050700 45471CB5B772C5C680D2D38C585832363107E0DCA7EBE6B2DEDA90E6E291F0EB9AEEE796EEE695 F9F0A0EAE192E6DF8FE4DD8DEEE89AF0EB9DE5DF94F5EEA6F7F0A8EDE69EEDE69EF7F0A8F8F1A8 EDE69EECE59DF5EEA6FBF4ACF4EDA5F0E6A5FAEFB3FEF5B6F3EAA6FDF6B1F9EFB2FFFECFB3A687 140700201700E3DEAAF9FCB7EFFCBCADB7920907020D04010400000B000020160E64612FB5B96C E1E1AFC0C08FECE9B1F1E4A9DFD799CBCF8CCEDA92DBE49AE8E79DF6E198FEF7AFFACC81C18E41 D7A354FFEB9BF6E99BECE59BF6F4AEF0F2ADE6E7A2EEEDA3F8F1A4F9F0A2FCF3A8F4EDA5F0EDAB F2EFA9F6EEA7F6EFA7F8F1AAF9F2ADF6F1AEF6F2B1F6F1B3F8F4B6F9F4B9F7F3B8F6F5BAF8F4BD FFFAC3FFF7C2FBEDB9F4E8B2FAF1B9DFDCA0ECE7A9F0E3A4FFF7B8BC975BC6A363FCF0A7ECE09C F5EDB5CAC699868262B2B1963435242F2C13DDD9AFFFFBCBF8F0B8EFD290D5AB61F5D68BF2E296 F3EEA4E6E6A0DFDE9FF1EEB5E4DDAA453C25282008665F34190C037D6B4BD0BB8CCFB77EF0DB96 F9EC9EF2EDA0EDEFA4F0F1AEF3F1B3F8F0B8FDF1BDF2E8B3EFE7AEFBF2B7F4ECB0F4ECADEFE7A8 F1E8A9FFFDC0FBF4B7F8F0B4EFE6ACF9F2BAFCF7C3EAE4B0ECE9A9E6E79CEEECB2FAF9C79E9B6C 1C180D010000544C45BFC27BE7F0A6E3E8A8EAE2AAFFEAB2E1B36FCC9541FEE187FDFDA7E2E9A0 E3EDB2EBEAB3D6C891DCD598EBE8A9FAF6B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E385E9DC7EDFD277E1D37AECDE85EFE286EBDE80 EBDE7EE4D875DED26EE2D976EFE689EEE589E7DE81EBE286F0E78AEDE488EFE68AF2E98DF0E78B EBE286E9E084ECE387E4DB7EE1D878E9E180ECE483F2EA88EDE584EFE685F1E88AEFE68BEBE188 ECE189EBDE7EFDF18EF3EB89F1E88BFEF99DF7F398FAF69BF9F59AEEE98DF4ED91FBF396F0E78C F4E993F8ED97FBF197F5EA90FFF69AF3E88CF0E689F9EE94F9EF95F0E58EF0E591F9ED9DFAEC9C FEEC95BDA346DFC361FEE784F6E484EEE085EBE28DEDE591EFE590EEE18AF0E388F7EA8CF9EC8E F8EB8FF7E98EF3E58CF0E28AF9EB96F4E591F2E392F7E896EBDC87F6EA88E8DC78F2E683FCEF91 F7E98EF5E78EF8EA92F8EA92EADC84EADC84F3E58CF3E88EF3E990EDE389EFE58BF8EE95FAF099 F6EC95F3E992EDE38EE8DE89EEE490ECE18CE3DA7AEAE282E8E198D7D791F6F4C76154510C0000 281102D9CB73DFCD72E2D474D5CC63DDD66CE8E178E1DA74E6DF7EECE389E6DD89E5DB8AEDE395 F1E59AEFE499E9DD91DCD389C1B872C9C17ECDC683ABA562A39A588D8442978B479E904AB29F58 C7B168C0A75EBBA757EBDE88EDE28BDED680E4DD89E6DF8CE6DE8CEEE693F1E692EDDF89EEDE87 EBDB81F3E687E5DC7BE9DE80E8DF83DDD37AE9DF88E7DF8BDFD786F1E99B716923ACA45BEAE299 EDE895E6E28CE3DF89EAE690EFEB94E6E18BEEEA93E6E18A3D3900A8A44ED3CE79E0D886E2D485 EBDE8AE7DD82E1DA79E6E27DF0ED8DE8E690E6E39CE6E5ADDCD9B08B886A3C392A0C0B01000000 4F512AEFF3B7E9EDA7EAEDA1E4E69BE9E9A2645F34322C11D9D19EEAE6A4E5E296E3DD90EDE697 E3DC8BF5ED9CEBE393F1EA99F5EE9EF1EB9EEFEDA0F5F3A8F4EEA6F7F0A8F6EFA7E9E29AF0E9A1 F3ECA4F7F0A8EBE49CE6DF97F6EFA7F4EDA5F8F3B6EDE9AFFFFDB3FAEF99F3E691FFFEBCEBE4BF 313020010000010100646137FFFBBFF4F8BECCD4AF181C140A0B020200000D0000B49B75FFFFBB F2E18DDAD091CACC90DCE0A0E6DB9CE2DB9BD6D792D3DD94DAE399E8EBA0F6EA9FFDEBA2FEE39A D5A256BD8739E6BD6EFFF8A8F1E499F3EFA9F6F6B0D3D38CECEA9DF8F2A2FAF1A2FDF5AAFBF6AE F9F6B4F5F2ACFDF6AEF9F2ACF5EEA8FFFAB4FDF8B4F9F4B3FBF7B7FDFABBFEFABBEEEAAEF5F3B9 EBE9B8888457ECE4BAFFFFD8FCF4CCEFEBC1F7F8CBF1F0C0958F5E6B59317E612FD7BC88FFF6B4 FAF1ACF4EEAEFBF9C1F9F7CCFAF9D9C2C1AA332E202A2412BDB788F8EFB6E8CC89D5AA61F9DB90 F8E99CEAE69AE2E39AE4E4A1EDEBAEFAF2BCEDEABCBCB486DFDBB1AEA37A140500988454CFB983 FFF0AFFBEFA6F8F2A5EDEFA2F0F2AAF8F6B6FAF1BAF9ECBBF8EFB9EEE5ADFAF1B8FFF9BEFFF7BA FBF3B5F7EFB0F9F0B4F9F6BEFAF0B8F4EBB3F4EEB1FAF7B5F5EFB6F6F2B7F6F3B4F1EFBAF4F2B8 FFFFCAC8C59819130B7E766EFFFFD5EFF8B7E3E8A8FEEFAEFFD996E0AB64F5CB7DFFEB9AFEF9A4 F0F3A4ECEFADEFEDB7F5EFBFEAE5ACF7F3B6FAF5BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDE081E4D779DACD71DFD177EBDD84E1D478 E6D97BE6D979EBE07CF1E581EDE47FE3D97CE4DB7EEEE588E8DF82E3DA7DEAE184EEE588EBE285 EFE689F0E78AE7DE81ECE387EBE287EAE184F0E886ECE482E9E17DE7DF7CECE382F1E88AEFE58C EEE48EF3E992EFE282F5E987F2E889ECE386F0EA8FFCF79CF4F095F9F499F2ED92F9F297FFF99B F7EE93FDF19BF8ED94F1E68DF7EC91F3E88CEDE286F7EC90FCF197FDF298FBF197FBEF99F9EE9A F7E896FCE890B79F3EDABE5AFFEA86F5E281EEE185EFE68FF1E994F2E891F3E68DF2E589F7EA8C F4E789EFE286F1E489EFE188F0E18CF9EA96F4E591F0E190F6E797F0E18DFAED8CEADE7BECDF7F F6E98CF8EB91FBED95F5E78FFBED95F1E38BF0E289FAEC93FEF399F6EC93EEE48BF1E78EF9EF96 FAF099F9EF98ECE28AE6DC87F4EA95EAE08BE7DD87F5EA84D4CA68F0EAADF1F1C7727057020000 341F0B937C43C9B050EBD66DD0BE5AE3D578DFD671E0D96FDCD46FDFD776E7DE81E7DD84DBD17C E3D888E9DE8EE7DC8DE7DB8DE6DE8BECE786E5E27EEFED89E0DE7AF2EF8BECE684F1E886F1E581 F3E780F5E780DBCA62C9B84FE4D66CEBDF77E2D975DBD574DCD679E4DE85EBE48CEDE28CE7DA82 E8D881EADA80F0E383E9E07FEDE286EAE087DDD37CDDD27CE2DB83E3DC87F3EC9AAFA85C665E1D E4DC95DFDB87B5B158B7B35AEDEA8EFEFB9DFAF79AD9D579E4E086ADAB54868432F0EF9FE6E293 F1E998DFD782E3DD84E0DB7FCFCC70E4E38DE8E59CD4D19C9792703B3422120903060200333119 9D9D7B292A02C2C387FBFBB8E2E598F0F3A6EDECA6F6F3B5443E13403913E7E5A8F8F7B3F0EDA6 F2ECA1EEE697E0D787F5ED9AF3EB9AF3EE9DEAE899E7E79BEFF0A4EBE59DECE59DF6EFA7F1EAA2 F6EFA7F6EEA6FCF8B0F4EDA5E4DD95F8F1A9F7F0A8EEEEB0FDFDC4F8F4A2F7F291FCEE92FFFCBB 99997B000200050B0B0106041D1806B7AA7CFCFBCDE9EAC7262B210007004E5429756741B2905C E0B76BFFF49BE3C882EAE6A0E7EFA1EBE19AF1E7A2ECECA4E4E8A1E0E89EE8EBA1F3EEA3FEECA3 FFF2A9FEDB8FD8A75AC19345F6E08EFFF8ACFEF3A8F7F3AADBD98FEEEA9EF9F2A2F8F0A1F5EEA2 F2EDA9F2EEAFF2EEA9FBF4ACFAF3ADF8F1ABFDF6B0F7F3AFE9E4A2FAF5B3FAF6B6FDF9BAFBF8B8 FDFBC0F6F8C9333419322E0FAEA788FAF6DAEFEED1ECEED0FFFFE9B3B08D453B200D00009C8859 FFFFC0F3ECA5F0EBADD8D49EFBFACDF5F5D3F6F6D9F2EED36C6753020000C3BE8AF6E5A6D4A95E F0D284F8E99AE5E194D9DA91F0EFADEAE8ABFEF8C2F0E8B6FFFDCDF3F1C3FFFACF3C2F0C342208 C8B482F9F6BDEDE19EFAF6ACF1F3A5F0F2A6F3F2B0F7EDB6F5E9B7FEF6BFF3EAB1F0E7ACEFE6AA F2EAACF9F1B3DFD899F4EBB0FFFAC0FFFBC5FBF1BCFDF9B9F9F7AAFFFAC0FEF8C4F9F2BEF5F1C2 F2F1B3EFEFA4F7F7B97D765F2D251BDDDEABEFF6BAFBF9B8FFEAA1EFBC6EEFBD73FFEBA5FAF0A9 F7F4A6F8F4A2F6EFA7F2EDB7F0F0C5F2EFB8FEFABEFFFAC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6D97CDFD276D8CA71DCCE75E4D67D E7DA80EEE184E5D879E8DC7AEBDF7CE1D775E4DB7DDAD175EAE184E6DD80E2D97CEEE588EEE588 E8DF82EFE689F4EB8EECE386E7DE82E8DF84EBE285EBE382E3DB79DED672D9D16EE0D876E6DD80 E6DC84EAE08AF4E995F8EB8EF1E384FCF294F9F094EAE489FCF79FEEEA91F6F098F2EC92F3EC93 FAF197F4EB91B2A651EADF87F4E990F9EE93E8DD80F1E888F8EF8FF6EC8FF0E58BFAEF96FDF19C F5E995FCEE9BFCEA90C3AB49E0C55EFFF089F6E481EEE183EFE78DF3ED94F8EE96FBEE95F6E88E F3E68AEFE287F0E289F3E58DF0E38AF4E590F8E995F0E18EECDD8CF4E594F4E591F3E688EADD7E E5D87BE7D97FEDDF87F6E792F2E28EF8E995F6E890F3E58DF9EB91FAEF95F3E991F3E992F3E992 F4EA93F4EA93F4EA93EBE18AE7DD86F4EA93F4EA93EFE58DEFE47CFAEF8FE4DEAA78766A000000 0F0C00AA9A5BF5DF92AD8B37F2D669DEC95FE5D57FDED475DFD773D9D16FDAD271E3DA7CE7DE82 E3D980E4DA83E2D881E0D582E1D684DFD882D5D174EBE78AEDE88BC2BC5FDAD475F7EF90E3D97B E2D576E8DB7AE9DA7BE2D271D9C65CD2C04DEBDB6AE8DB6FD7CD66E3DD7CE3DE81E0D980E6DC85 E9DD85E3D47CEADA81E5D77AE7DD80ECE08AEDE28FEBE08FE3D985F0E98FEBE48AE0DA82E6DF90 827933C8BF7CDCD987B5B25BC5C166F6F194E5E082DBD679E0DC80E7E58EEDED9F3B3C0291924F F4F3A4E3E07EEAE98BE4E090EFEBAAD9D29FA9A17A61573C27200A040000000000352E1095906E DBD9B4FFFFD58C8B56292900D0D08AF1F0A8E7E69EEAE7A2F0EFB0E9E4A7484323484620DCDB9E FEF9BAEEE6A2F5ECA0EFE494F3E896F0E896EEE998E9E798E8EA9DF0F0A6E5E096E9E399F4EEA4 F5EFA5F8F2A8F3EDA2EEE89EE1DB91EEE89EEEE89DEBE59BEDEEAEE9F0B3F9F5A2F5E98AFFF29D E6E1AA353520000700728176161D1407020034210B837250A7A0821E22180E1C00E4EEB1E8DCA5 BE9659BD8637EFCE76FFDB97FAEFA4F3F39DF7EC9FF7EDA2ECE79EE3E39AE4E69FE7EAA1ECEBA2 F7ECA3F6E196FFEEA3FAD386C69949E3B964FFF7A6FDEFA1F1E59AF0E99DF1EB9DF1EA9AF2E99A F3ECA2F6F1AFF7F7B8FAF6B5FCF5AFFFF9B2FFFAB4FCF5AFF7F3AFEEE9A7FFFDBBF9F6B3F8F4B4 FAF7B7F1F0B3F6F9CAD5D8B08A8864423D2A342F19989780E1E4CBF3F8DEFFFFF0918A700C0000 443411F8F2A3F7F1AAF1ECB65E59322F2B16807D5AE5E6BEFBFACDE5E4B2292614342C11EDD099 D7AC62EDCE81FAE99BF2EC9DE7E89FEBEBA8EEECAFA6A170A49F6EE7E4B3FBFBCFF9F5C3BCB380 2E200C3A260CD4C08DFFF9C0EFEBA5EFF1A5EFF2A6F2F1ABF7EEB3F8EDB6F9F0B8F9F3B9F5F0B3 EBE6A6EBE7A7F6F2B1FFFCBEECE7ABA7A165E9E5AFF5EFB9EBE6A5F1EEA0FDF6BEFBF4C6F1EBBA ECE5B8F3F0B1E5E695EDECA5AAA486030000B8B684FEFCC2FFF8B5E8BF6EE1AE5AFFDD91FDEFB1 F6F2B6EDEAA8FCF2A6FFF9B3F7F2BAF1F5CBEAE8B0F4EFB4F7F2BAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEE085EBDD83E6D880E3D57C E2D47CF0E28AECDF84EEE183E9DC7BE2D674E2D877E9E081E0D778DDD475E9E081EEE586EBE283 EDE485EBE283ECE385EEE587EEE586E9E085EAE088EAE086E7DE80E5DD7BE7DF7CE4DC79E7DF7D E9E083E9DF87EBE08EF2E695EEE087EBDE80F4EA8EFBF298F2EC94EDE791F7F49CFCF7A0F9F39B F7F097F8EF95F4EA91827620E3D47CF8EA91FBEE92E9DD7FFEF193F8EB8DEEE185E0D378F0E38A F7E994F0E38EF5E792FCE88EE4CC69DCC159FAE27BF9E682F0E383E9E186ECE58BF4EA91FBEF95 F7E990F3E58CF5E78EFAED94FAEB96F5E690F8E994FAEB97F5E693F1E28FF1E290F0E18DF7E990 F9EB92F5E88EF1E28DF6E793FCED9AF6E793FCED98FBED95F6E890F4E78BF3E88FF0E590F4EA95 F4EA94F1E790EFE58EF0E68FF4EA93EFE58EEFE58DFBF198F3E990ECDF82F8ED9CA8A37C101108 060A005F6127EEDF88FCE48FCEA454CBAB3DE3CB61E8D686E7DA81E2D77CDBD075DDD277E4D97D E1D77AE4D97EDFD57BDED47AE3D87FE5DA81E3DA80E3DF82E2DE80E1DD7CC9C365D7CF70ECE482 DCD272DED172E2D575DDD070DDCF6FE5D169D9BF51E7D063ECDA72E3D572ECE286DED87DD7D279 E2DC82EBE188E5D87CEADD80F3E88BF2E78FEBDE8EE7DB8EEADE91E5D988E0D97FF5EF91E1DC81 E6DF8DCFC781A09857E8E599D2CE7DCAC572EBE68EE1DA7FEFE990EBE68FE5E193DEDB979E9D64 2B2A03C1C37FFFFFA6EFF0A0A6A3686C6642312717140A07090000020000251F0299955CE8E599 FBF7B5F9F4BEE7E1A8F9F9BF9692574C490CE9E5A4F9F9BBE9E6A3F1EEABE6E4A1F0F0AD4D4C25 413F21F7F6BFFBF9B9FBF0A8F3E899ECE28FF0E895F0EB99EDED9DEAEEA1EBEDA2E7E298F0EAA0 F3EDA3ECE69CF2ECA2EEE89EF1EBA1EDE79DE2DC92EDE79DEBE59BD6D393E5E5A8E0DD95FFFEB7 EBE7A9625D3C000000575D45ECF5CE83875C0000000E0100110200170B07000000808749FDFDB5 F3E09FF1C787CA9549975F0CF5C988FFF8AEFDEB93F7EA96F1E797E5DC90E4DE95EEEBA4F1F1AB DFE199F6F4AAF8EFA3FFF0A4FFE699EFC775D5A34DE8C16EFFE898F5E496F6EC9DFBF3A3F9F0A1 F7EEA1F6EEA7F5F0B1F5F4BAFAF7B7F8F1ABF9F2ACFAF3ADF4EEA8F3EFABF6F1ADF7F3B0F4F1AD FCF8B6F3F0ADF1F0B0F7FCC1F7F8C5F4F2C4F7F0CBB0AA8C3936181517104F53356B6D4C151108 160900332600F1EEA4EDE9A5EDE8B3C6C29C6864470000006D6C45FFFFD0EFEEBB46431E100B07 D4B781DDAE65F2CF84FDEB9DFBF3A5F5F5ACEFF0AEFCFBC0807C480D0B003B3A21C6C897FDFDC7 FBF7BDB3A97D200C004A3826ECDFAFE7E2A3EFF1A6F2F5A8F4F4ABFBF2B3F8EEB2F1EAADFBF5B7 FFFBBCFEFABAFAF5B4F6F1AFF5F0AFD0CA8C767034DED79FFBF4BEF7F1B4F3EFABF6EFBBF9F1C0 F9F2BBF1EBB6F5F1B0F3F1A5F9F8B78C856B110900908D52FFFFBCFBD18ACA9D4DF5D180FFF6AC F4EAACF1EDB4E9E2A9F8EBABFCF0B3F1EAB4F8F9C7F9F7BEFDF7BEFFFAC2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDD83EADC83EADC84 E5D680DFD07BEEE088E6D77FEDE084E5D879DDD070E2D877E0D677E6DD7EE0D778EDE485EDE485 E2D97AEAE182E9E081E7DE7FE8DF80EAE183EFE58CEEE490E5DB83E0D77BE6DF7CEBE381F0E885 EEE684ECE387EDE38EEDE293E9DE8EECDE85EEE085E5DA81EDE48DFAF39CF1EB95F3EE9AF5EF9C F8F29DFBF39EFCF39CFAF097FFF29CFFFCA5FEF198FDF094ECDF81F0E385FDF091F2E589E9DC81 F4E68DF9EB93F7E995F7EA93FDEB8EF8E885DEC35AF8E079FCE985F0E383E5DD83E7E087F3EA8E F8EC91FAEC94F8EA92FAEB97FBEC97F3E490EFE08BF7E893F9EA96FAEA97F5E693F1E28FF0E18C E7D883F3E390F3E491F1E290F5E695F7E897EEDF8DF2E38FF9EB93F5E78FF2E589F2E78DF1E691 F4EA95F5EB95F3E992F0E68FF6EC95EFE58EEAE088F6EC94EAE087EAE087FFF4A9CABB85504A2D 141B062C390DDFE48BEADB85FFE08EDDB258D4AF3FEDD26CEDD98CE3D481E4D883E1D67EE0D57C E2D77EDFD478E5DA7EE2D77BE5DB7CE5DB7EDACF72CAC164BFBA60D6D176E5E085E4DD81E1D87C E4DB7FD6CB6FE6D97EE8DB80E2D479DACD72E5CD6FEAC865E4C666F0D97BF4E48AE6DC84D9D37D DCD67EE1DD81E5DD80E4DA7AEADE7DF7EC8FEFE38EE8DA8DE9DD95EEE299F0E494F1EA90E6E07F E6E183FCF5A2EDE59F766E2FD2CD89EAE79FD7D184F4EE9CECE592F0E896D8D184E3DE9BF1F0B8 F8F7CE44441E3E40176A6B362828000E0B00050000090100170D04362D148F875BEBE7A4FBF9A6 EBEB8AF2ED99F4EBA2F7EFACEEE5A5FCF5B758522C4D4714F4EFB2EEEBAAF4F1ACF4F2A9F2F3AC FFFFD443402558522DE7DEA4F6EDA9FFFCAEF5EA9AF9F29EF5F09EEEEF9FE7EB9DDFE397ECE69C F4EEA4F0EAA0E9E399F6F0A6F5EFA5DED88ED7D186F8F2A8E7E197E3DD93ECE3A1F1E7ACFFFEC2 D9DCAD4F55340000004F4D3BFFFFD8F1EDA8F6F4AF6E6C3C1815070C03020E03020A00009E9455 F6E798FEE7A2FED696FED38CCB974CAD753DE8B773FFE790EFE188F2E994F0E495F4EBA2FBF6AE F6F3AEECEFA8E5E89FEEEEA4F9F1A5FEF1A3FFE895E2A84FC99944F6D684FFED9DFBEC9EFAEFA0 F6EC9FF7EEA3F7EFABF5F1B4F3F3BBF8F4B5FCF4AEF8F1ABF5EEA8F7F0AAF4F0ACF9F4B0EFEAA6 EBE9A3F9F6B3EFECA9F5F5B1EDEEA9E3E2A0F8F0B6F4E7B7FFF7CDFFF9D3A6A47F35362221210B 130D05271A00C0B384F1EAA9E0DB9BEEE9B0F1F0C0FFFFDA474523000000B6B38EFFFED9595628 120F05C3A669D8A65BF4D084F8E598F0E99BF1F0A7F0F0AEF1F1B5FFFFCDE6E4B5282903353823 E2E2A5FFFBBDF8EBBC7D6A480D0000BAAA84F3EEB6F7F9B3F3F6AAF4F4A8FBF4AEF2E8A9FEF7B7 F9F4B4F5F0AEF9F5B2FCF7B3F7F2AEECE7A5FCF6B7F2ECB0FAF3BBDBD49EEBE4AFF9F2BDF3EBBA F7F1B6FBF6B2F2EFB1EFEBA8F2EFAAFCFCCB6158450D0500939148FFDE8CE8A85BDCB366FCECA2 F3EBA5EEE9A9FBF2B8F6EBB6F5E9B9F1E8B4ECE7B0F7F4B9F5F0B5F0EBB2F3EEB6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D77EE3D57D E9DA84EADB86E7D982EEDF89EEE088E9DC81ECDF80EEE182E7DC7CDDD474E3D979E6DC7DE8DF80 E9E081EEE486EFE586E6DD7EE8DF7FEEE585EDE485F1E790F0E593E1D780DED57AEEE585F0E887 F5ED8CEFE687ECE288F4E996F3E898E7DB8CEDDE86F2E589F2E78DF0E890F5EE99FBF5A0F0EA98 EDE795F4EE9AFDF5A0FDF49DF9EF98F9ED94F9EC93F8EC92F9ED91FAEE90F2E685F5EA8BF5EA8C FBEF94FDF197FAED95F7EA94F5E790F1DE81F2D976D7BD55F9E178F8E57EEEE280E9E183EFE88C F8EF93FAEE93F5E690F0E28DF2E490EFE08CE6D884EBDD87F3E38FF3E68FF5E891F4E590F1E38C F4E790F2E390FCEE9BF6E997F4E594F8E898F5E795F1E391F3E490FBEF96FAED94F7E98DF8ED91 F5EA94F6EB97F8EE99F9EF99F6EC94F4EA90EEE48AECE287E8DF85E1D880EBE18DDAC78F5E4B2D 241E0C2B3705C5D777E9EF94E2D189F7D587E9C457D2AB3AEBCA69F0D589D6C578EDE18FF1E591 E5D984E4D880EAE085F3E98DE8DE80E5DB7CEBE082E6DB7DDAD175CFC977E0DA88DBD483E3D986 E5D987E6DA86E8D986EDDD8CDFD280E6D887EADE8EECD380ECC770D3B05AE2C472FDE697EEDE8F E6DC8CE9E38EDFDB81D4CE6FDED773E8DE79EBE085DED382E8DC92F7EBA9F8EDAAFFF6ADFFF8A4 F2ED94F9F39CF4EDA0FBF3B1948C526E6930FFFDC1FEF8B7FCFAB8ECE59EE5DD97C8C17FA49F66 7E7A4C43402A28260F0401000D080C0500000100002E2B196A6740ABA869EBE79FFDF9A9F5F19C EAE590E2DD87EDE48EFDF8A5E8DF91F4EBA6F5ECAFEEE6AB423A196E6937F6F4B5E1E19AEDEEA2 F1F2AAF6F5C8F3EFC94C4929352D0CDED897FBF0A8F1E798F6F09CF1EF9BF2F4A2F3F7A8EDF0A5 F8F4AAF5F0A5EEE89DEDE79BFBF5A9F6F0A3DFDA8CDAD487FEF9ADECE79CE9E499F6E8A8FFF2BE DDDBAB3F482D0002001C221BD4D1B6FEF2B6FAEC8EEBE38BDFDEA6BCBFAF87847E80746C99856F 9D8546C8AC5EF9DB95FFE4A5F5D692FFEAA6C18753A15F20D59C49FAE68CF0E48DEADB8BF0E399 FBF1ACF3EFABF0F1AEE3E7A1ECEFA6F0EFA3F6EFA0FFF19EFED278D69F4AD2A756FDE697FFF5A6 F7EB9BF7EC9FF8F0A5FAF3B0F7F3B8F3F1BCF2EEB1FFF8B2FDF6B0F7F0AAFEF7B1F5F0ACF3EDA9 F2EDA9E1DE99EDEAA5F5F3AEF4F3ACEDEE9FF4F0A2FAEDA9FEEEB5F5E6B3FAF3C4F8F4CAF0EDC5 C4C198898154BDAE82FFF8CAE9E1B0E3DEA4E2DF9BD7D68DF6F5B8AEAC8108040047442DF8F5D7 D1D0A5A6A569E8CD87CE9C4FFAD688F8E89CF4EAA1FFFFBDF5F5BCEDEBB5EEECBAFDFCD1C5C8A1 060A005C5C25F8F7BBFFFACAB19C791500006A5A3EFFFECAFCFDBAEDF0A3F0F1A4FFF9B3F9EEAD FDF9B6F8F6B2EDEAA7EEEBA6F5F1ACF4F0ABF9F6B4F3EEAFF4F0B3EFEBB2FAF4BDF7F2C2F7EBC3 F6EBBDF5EDABEEEC99E5E39BE6E3A1F5F1B7F2EFC944382E070000B5AE5AEDB75BF4AB57FDE39A F9F4B2E9EDABEBE5A4FDF2B6F9EBBAEBE4BBEBE9BDF2F0B7F1EAA6F8F4B9EFECB5F5F2BCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D67D EEE087ECDE85E3D47DEADC83ECDE86F1E38AE6D87FE6D97EF4E78BF5E889E8DC78EADE7CE5D978 EADD7FF0E487F2E58AF3E68BF1E586F3E785EFE381E4D874E2D67DE4D989E9DE8CEEE48FECE28A ECE38AE5DB81E5DB82E5DC82ECE28AF1E78FE5DC84E9DF81F3EA88F6EF90F1EB8CF2EB8FFAF399 EAE38AF4EE96F9F19CF7EF9AF6EE99F9F29AF3E98FF8EF94F7EE93FAF094F6EC8FEBE283F4EB8D F6ED8DF8EF90F8EF90FBF293FAF496F1E98CFFF296FCE989D8BA58FCE07BFDE881F0E37BECE17E F4EC8AF6ED8EF2E68AF0E48AEFE48CEDE28AEBDF87ECE289F2E98EF5E991EDE389EBE187F1E68D F4EA90F0E78BF5EB8CE6DC7CE7DE80F3E88DF2E78DECE189F3E890FCF198FFF599FAF092F7ED8E F7EC8FF6E892F6E794F7E896FBEF98F9EF8FEEE77DF6F282DDD96DD5D170F2EB9BD1C8866B5E36 201403231A08B5B170FCFAA1E7E083D8C86ED7BE61E9C95FC79D34DFAD4AFFDA80F6DE87D8CD79 EADE8AE3D483EBDC8CF0E192F4E596EBDD8EE6DA88EAE08DF1E692F1EA92EDE991D2CC78C0B969 EADE92EEE095ECDC8DE5D685E4D880E1D77FDDD57DE9E38DEAD97EFEE485E5BC65E5B768FFE39B FEDE98F4D991E4D586DBD47DDED77AE1D473E0D06EE6DE84EFEE9EE7E39EE9E3AAB8B082837A51 6E663E7C774E8D875F807A5177724988825C2B26067975566F6D5049462B312F0F28260C201F08 0D0B01120F00140F00120D000E0A00050300585640B7B58EEBE6AFF4EEA8F4ED9CEFE68EF2E98F F3EC95F8F29DF1EA9AEAE08EF8EE9BF3EB9BF2EAA0F5ECA8FDF7B7F0EAAE3834017D7B4FFFFFCC EDEEB3FEFEC4F1EFAEE3DFA2F8F7C37C72513B311AEFE5B1FBF7B4EAE696F3F19AF1EF99FCFCAA F1F1A8F9F8B8EBE9A9E0DC9AF0EAA3F7F1A5FAF3A3F7F19CF8F3A0F3F1A0F1EFA3F0EFABF7F0C2 DBD2BA241F07020200090B00C3C398EEEAB4F3EAA5F7EF9EF2EDA2DEDCA3E5E4B9F1EDC5F9F3C6 E6D9A7F7E7A5C0AC62A1873FD9BC77FFE19CFFECA7FCDD9EDDA967A8742AC69847FEE998FDE89B F0E19AF5E8A9EADBA2EFE2A9F4EDAFEDE8A5EEE79FF7ECA0FDEC9DFFF1A1FCD790D99A57E0B26A FFF9A9FBFAA6EFF19EF7F9ADEBEDA8EDEDB1F8F1BBF5EDB0F2EBA5F5EEA8FEF9B4FFF7B2FCF5AF F4EBA8F6EFABF4EEACF7F3B0FAF6B6EEEDAADFE79BFFFFBEFFFFCCF3DBAFF7EEC1E2E2B5616444 18130A1A0E0B1D0C057B6F4AFFFFD0F3F1C0EAE8AEDFDB94EDE798E5E19ED8D4AA211D120C0D02 C2C592F7F8BAF2EEB7F9E29ACEA84FF7DA84FDEBA5DCCF9FAAA186E5DEC6F8F3D0FDFCCAEDECB6 EFF2C54B503A0E0B00A39C72FFF8BFD0B1773B1A00614E2BFFFFCEF0EDAAF0F0A2F4FCACF6F2B4 F9E9B7FDF8B7F2EFABF0EDAAF6F1AFF6EEADF3EBACFCF2B4F8EFB1F2E8ADFBF2BAFFF6BDF4E7B9 FBEAC1FEF0B9FCF2A8EDE893EFEBA2F5F4BAFEFCD4E7DCC2352017200500E1C175C29C40E2BC60 FFEA9EFCEEAEF6ECB4F1E9B2F0EAB4F6F5BEEFF2BBE9EDB3EDEDB0E5E5A6EFF7C6EAF5C9EDF6CA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1E38AEEE087ECDE85E9DB82DFD178F4E68DF5E78EE6D87FE3D57CE9DB82E8DB7EEEE07EEFE17E E9DB7BEDDE82EFDF87F2E38BF5E58DEBDD81F0E182F5E785ECDE7BE6DA80E3D888E7DC8BEEE391 EADF8DE3D985EBE18AEAE089EEE48BF3EA8FF0E78CECE386E8E280EFEA86F1EB89EFE987F4EE8F FEF89AF0E98EF9F298FDF69EF9F29AF8F19AFAF39BF2EC91F5EE93F3ED92F7F095F5EE93EFE98B F5EF91F6F092F4EF8FF2ED8DF4EE8EF6F192EEE689FCEC8FF7DF81CFB150FADD7BFAE37EF6E87F FBF08BF1E985E6DC7EF1E589E9DE84EDE58AF4EB90F1E88DEFE68BF4EB90F4EB90F3EA8FF5EB91 F8EF94F7EE93F3EA8DEBE37FE3DB76E9E17EF1E988F4EB8EF6EE91E8DF84ECE489F3EA8DF8EF91 F7EE8FF6EC8DFDEF95FAEA97F4E593F4E891F0E685E6E175E6E472DEDC71FEFBA1EBE5A16B6131 251E001813009C9353FCF2A5EEE386E2D871D8CC62E7D66DF9DF7ACCA23FBF8623F8C362F6DD7E DED476E4D77CD9CA73E9DA86E8D986F7E695F3E491EEE28CEEE18BF2E68EF3EC90F2EE8EC1BD5F E0D781F9ED9CDFCF7FEADB87EADB82F0E585F3EA8AE2DD7FEAE68AEEE487F2DB7DF1CF75E0B45F EFBF6CFFDD8CF4D985E7D981E6E38BF1EC95F2E791F0DF8FF0EAA4DADA9CE7E6B0656239010000 0100000801000800001009000F09000F0900201B01292510080600000000000000020300090B00 0E10001516061E1C103B351B7C7556A9A58838382584825BFFFFD2F6EFADF3EC9EF2E993F8ED93 F4E990E9E08BEEE594F3EC9EEDE394F6EB9BEEE596EFE79BF5EFA5FBF5B1FFFCBDD5D0961F1D00 A5A573FFFFD5ECEDB7ECEAA0E9E59AFEFCC1EDE5B45F563838310EDFD89FF8F4B1FBF8AAF0ED9D F9F5A6ECEA9EF4F6AFF2F1AFDDD99AF3EDACFBF3ACF2EC9BEFEA90F8F49BF8F8AAE8E9A9F4F2C0 D9D7BA2A2819070000150F00C3BC87FFFFBEE7E097F2EDA2F1EEA5EEEBA9E5E1A3E4E2A9E7E3A3 F8F3B2EBE5A1E8DF9AFCEEA6BEAB6290762CE2C67DFBE29AFFE9A3FEDC98E6BE79AC762ABD8B3E F9E9A0FAEAA6E9D89AFCEDB4F8E8B0FFF4B9F4EAA8F7EFA8F5F1A3E7E194FBEAA3FFF2AEF2C582 C79752F2D287FFFBACEBEC99DEE696E7EBA5EDEDAEF5EFB7F8F0B2F3EDA7F5EEAAF5EEA8ECE49F EAE19DF6EDAAFCF3B0FCF3B2F9F3B4F7F2B2EBEAA9E8F1AFFEFABFFEEBB3F1DAA7F8EEBEA7AB82 0000001A110D1102002C1510030000737243FDFDCCEAE9B1E6E19DF7F29FE4DC9ADBD5AC2C2A23 0305019EA365FFFFBEFCF5C2F4DF9AC6A847F4DD83F0E19B98915F0B01000E07006D634CD6D09F F6F6BEF9FDCA9DA37A080201615839FCF8B8DEB871AD8541D1BE84FCF6BEE3DF9DE8E498E9F7A8 EDEAB2F0DDB4F6EFB0F5F2AEF8F3B1F2ECAAEBE2A3E7DD9FF1E8AAF9EDB3FAEFB5F7ECB4F7ECB4 EFE3B2DED1A6EEE0A4F2EA9DEDE792F1EEA5F8F7C2F0EECEBEB59E1603004A2B00CEA862E6CF7D F7EA97FFF3AAFFEFB0FFF3B7FAEEB4F6F0B1F7F7B3F7F9B4EDEEADEDEDB3FEFCCAFFF9CDFFF9D1 F0DFB6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6E88FF1E38AEEE087EBDD84DBCD74F0E289F5E78EEDDF86EFE188F3E58CEDE083E8DC79 E9DC7BE7DA7CE9DC7FE8D980ECDE85F1E38AE6D87EECDF81F5E888F3E784EEE389EADF8DEBE08E EEE490E9DF8AE7DD87ECE28BE6DC85EFE58CF3EA8FE7DE83EBE186E7E183EDE787EFE98AEDE788 F2EC8EFCF698F1EA8FF8F196FBF49AF8F197F5EE94F5EE94F7F097F7F097F5EE94F3EC92EFE88D EBE489F5EE93F6EF93F3ED8FEFE98BEFE98AF0EA8DEEE78BFFF195FFEB8DD6B958F9DD7BFCE882 F3E47CF3E883F5ED8AEFE689F0E389E4D87FE9DF87F4E991F6EC93F3E990F1E78FEAE087EFE58C F3E990F4EA91F1E78EF0E78CF6EE8AEFE784F0E887F1E88AF0E78BF5EB91F8EE95F4EB91F5ED90 F9F093F6ED8FF3EA8AFAEF90FAEC93F6E995F8EC9AF7EC97F1EA8FF2EE91EFEA94E1DB947D7641 1B10031B180097974BF2F09BE1DA7BE6E077E0DA6EDDD66BE1D66EEDD973EAC865BC8C2AD8A945 F4DE75E8DD72EDE078EBDE78F2E480ECDD7AF1E17FEEE07CEBDE78EADE77EADE76E8DE75EBE67F EAE37EFAF090F2E689E5D577F1E181EADB77F2E57FF9EE89E3DB7AE6DE80F1E991E9DA85F7E189 E1C368CAAC4AF5DD77FDF18BEFED8BEAEF95F3F6AAF2ECAFEDE2AFBFB89087836047422E0D0700 040000261F142C25151D160A1710021611001611001C18001A16000A06002A28154D49386A6951 7575558C8D67B4B484D6D5A2F4ECBFFDF5CBF4F1C8BBBA8D141200ACA96EF5EEAFF0E8A1E7DD8E EDE28FF7ED98F7ED9AF2EA98F0E998F3EB9AFCF1A1F0E798F2EA9EF7F0A7F2ECA8F8F5B5F2EEB3 C2C08C1F1F009D9D69FEFECDF4F0AEF0ECA3F6F4AEF9F4AFEFEAA768623A1F1800C7C18DFAF9C5 F4EDAFFCFAB8EDEC9BF6F99CF9FAA6E5E19BF5EDB0F5ECACE8E197F1EE98F3F39DEBEAA4FFFFDA C7C4AB2A2817020100201C00ACA879F8F4B5E6E299F0EC9CF7F2A2E8E596E3E197EAE7A4EDEBAD F3F2B1EAE6A6EEE9A6DCD28DFCF1A9C9B86EDAC479C9AF65BE9E57EBD18BFFF2AEFFEAA5E8C176 AA772EB07C37E7BC7BFFEEAEFAEEADF8F2B0F2EAA7F1E9A4E9E59DE4EB9CF1F0A5F8E9A5FBFFB5 FBF5ADD2AF68DA9D5DF6CF89FCEFA1E3E394E4E49BE5E09EE3E6A5F0F0AFF7F2AFF9F4B2EFEAA7 E5DF9BE9E4A0F1EAA7F2EAA8EEE6A5EFEBA9F9F4B3F6F3B4F1F7BEEBEAAAF9ECA2FCEAA1F7EFB4 D0D4AC32341C0200001B08009983626F644D05030098986BFCFAC9F5EFB1F3EEA1FBF2B3EFE9C3 38352E07080083884BF8FAB2E8E2B0E5D08EC2A74CEAD481E9DE93E5E2A1C5C58B8C8965161000 2B240ED0CDA1DEE1A9D1D69718140828200EE0D89CC39C5ADAB574FFF9C0EDE6ACE1DB99E9E59A EBF8AAF3F0B6FBE9BBECE6A5F0ECA8EEE9A7EAE5A3E7E2A2E6E0A0EBE4A6FCF4B8F5EEB2EAE3A7 E8E1A8E9E3AFEAE5B7DCD899DEDA8CE8E591E9E89EDADBA5F1F1CF757259060000564411EFD690 FEF0ACFFF7B6FAEFAFFAF0AEFDF7AFF3E99BF9EE9BF9ED9BFAEEA5FCF1B6F7EEC0FAE6BEFFF4C2 FFCF9AC27F4AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEBDD84F5E78EF3E58CE5D77EE2D47BECDE85F5E78EEEE087EDDF86EEE087E5D97C DED575E1D778EADF83F2E78CF4E990EFE38AE6DB81EBE086ECE185ECE283EFE586EBE087E7DD88 E6DC87E2D883DED47FEBE18AEDE38CE6DC83F0E68DF4EB90E5DC81EBE287EFE88DF5EE93F9F297 F7F095F6EF94F7F095F7F095FBF499FEF89AFBF599F9F296F7F095FBF49DFEF5A1FFF9A1F9F29B F1EA92EDE68CF0E98FF3EC92F1EA8FEEE78CEEE78CECE58AE8E287F9E98EFFED90D6BB5AF0D471 FFED88F3E47DEAE27CF9F18EFAF194EFE289EADF86E6DC83E8DE85F3E990F5EB92EEE48BE6DC83 EAE087EDE38AEEE48BF0E68DF3EA8FF2E989E8E07FECE386F4EB90F5EB92F6EC95EDE38BF2E890 F3E992F3EA90F8EF94FAF191F6EE8BFBF094F8ED98F7EEA1F7EDA5F3EBA1EFE89ECDC585918A56 322A04261D06ABA67FFDFCC3EFEAA8EBE497F3ED98EDE78DE4E184E8E384E9DE7AF4DD75C2A033 DDB948F1E06EDFD665E3D96AEFE478E8DD71EADD74F4E77EE8DC71E7DB6DEEE170ECDF6DE2D666 E8E07AEAE27DE9DF7AFAED88FFF18CEBDB74F0E17AE9DC76EFE382E3DA7DDFD57CE4DE8FE3E096 EDE397F8E696DBC972D7C970F0EB93D2D583A9B16B889059595A332A250B150D020D0501050000 150D005A523BE4E0C5E2DCBCDBD6B1D7D1A9D1CDA0CAC697C9C693CECB96797545747146FFFFE0 F6F4CCFEFED5FDFDC9FFFFC3ECE7A8E0D99BE7DEA5E8E3AAECEDB4A4A36B353312EAE3A4F1E8A6 EDE39DEDE499E9E093EEE595F6EE9BFAF5A0F1E997F4EC9BF0E798F9F1A5FDF5ACF2EDA6F8F3B3 F4F0B2F8F6BCC1BE87282800B6B47FFFFAC0F5F0ACEAE697F4F29BEDEB97FFFDB8A39B6A1C1300 C8BF98FFFFD4F8F2B5F1EEA0F7FA95F4F395F5F29FF6EFA6E9E29CF3ECA6EAE4A0F6F1B6F7F7CD 8F8E70231F14040300181A00CDCB96F3F0B4F2F0A7E2E090E4E18BECE891DDDB87DEDC8FE4E19B E5E5A0F4F3B2EEEDABECE8A5EDE6A0EDE49AE5D88DFAE89CFBEDA2D3B96FB39650CBAB67F9DB96 FFEFA0F5CB84CD8648CB7C44D2995CFFF9B4F8FEB3DCE999DCE597F5F7ACF0F0A6E1E19AF0F0AD EAF6ACEEF3A6F8E79DE4B471DDA160FED794FEEFA6F3ECA1DEE195DCE097EAEAA6F5F1B1FAF6B6 F1ECADEDEAA7F4F1AFF5F0B0E4DF9DD2CD8BDDD594F1E9A6F0ECACE9EEB7E6E5A5FDF5A5FDF09E F1ECA6FBFFCBE4E5BF8F845D48330A99835BF6EACA625F420E0F00AEAB7FEFEAB0FFF8AFFFFBBF F1EBC83A372E0E0F007B7F44FBFBB7FEF5C7E7D198CEB168FFEAAAEDE5A4ECEDA7F5FBB2F9FBC2 D5D1AF1B1108130C00EBEFBBEEF7AA28240B130A03C6BE85DBB475CAA062FFEFB3EEE7A9F0E9A7 F2EEA4E6F2A4EAE8ABF7E4B3F7EFB0F3EEACEEE9A7EDE8A6E8E3A2DAD696EBE7A7F9F4B5E1DD9E E5E1A2E8E4A7D5D59EE3E8B4E3E5A3E1E092E6E490E2E096E0DFA7D2D2AD28260B030000908853 FFFFC6FCEEB2F8E7B3EFEAAFEAEFABEDF4A6EBED96EDE58AFFF09AFFE89EFFE4ABFFF4C9FFF3C9 FBC87EBB7D27CB8C38FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE6D87FF2E48BF3E58CE5D77EE4D67DE2D47BF4E68DF1E38AEFE188F5E78E F3E68DEAE084E4D97EE8DD82E9DE85E5DB82E2D77EE5DA81F1E78DF1E68CE9DF83E8DE82EBE189 E9DF8AE7DD87E3D984E3D981F1E790EEE48BE8DE85ECE289EEE58AE5DC81E2D87FEAE38CF0E892 F4EC95F3EC94EFE88FEDE68BF4ED92F7F194F9F395FAF494F6F091F3EC90F0E992F5ED98FAF29E F6EE9AF1E995F4ED96F2EA92F5EE95F6EF96F3EC91F2EB90F2EC91EEE88EF0E186FEE98DD8BC5E EED472FFEE89FDEE89F8F08CF4EC8CEDE487F0E58CF3E991EBE189E8DE85F0E68EF5EB92F0E68E F2E890F1E78FF3E991F6EC94F6EC94F5EC92F2E98BE7DE80E8DF84EDE38AECE28BEBE18DF1E793 F5EB97F4EA95F0E68EF2E78FF1E88BE5DD7AF1E88CF2EA96F4ECA3F4EBAAF2E9ACE0D99F8D8752 35300B050000211A066A66506661488A825C93895BA89F69C7C185D5D291D9D791DED78BFCEE96 CEB858A48B22E7DA73ECE47EE1D974EBE380E8E07FF1E988F3EB89E7DD79E2D872E9DE75EADE74 E5DB75E7DF87E6DD86F2E98DEDE382F8ED8BF5EA8AF1E588EBDF87E9DF8CF0E699EDE49AEFEBA9 EBEBB0DCD79DD4CB93AEA06B776D39716C3A4F4F221F2502080B000000000000000C0500241C0F 807A58BAB48EFDFACBF4F2BCF9F6B9FBFAB9FCFCB8FDFCB8FDFCB6FFFCB7F8F3AFDEDA9A555117 DCD9A5FAF7C4EBE7ADF0EEAAEBE99DF4EFA2FDF8ACF7EDA4E8E29BFBFCB8EDEDAB6661276E682F F8F2B5F1E7AAEDE2A2ECE39CF5ECA0F4EC9CEEE892EBE391F1E898E8E091E8E095E6DF96D9D28A F5F0ADE9E4A4EEEBAEFCFAC0C1BE872D2900B4AE78FFFFBFF4F0A3EDEC92EDEB94F5F1A6FCFAC7 A49C72271D00A29A6FFFFEC7FAF6B1F3F09CEEEC90F9F798F7F498EAE595F9F4B5FFFED4EDE6CA 7B7562100C030302002B2C0DD1D49AFBFBC1E3E29CD5D386EDEA98E6E28CEBE791EDEA97F5F3A5 E7E59CDFDF9AE5E6A4F7F8B4E4E29DECE8A1EEE89EF1E79EEDE195DECE81F5E198E9D28AA98F4B BA9B57E4BD79FFF7B4FFE5A0E3AC6AB07635C6944FE8CA80FFFCB0EBF4A3EDF4A6F8F3ABDAD895 DFEBA7EBEEAAE0E098FBFAAFFFECA0E9BB77F2AF6FFDD694FFF1A7EEEE9DE5EA99ECECA6F5F1B1 F5F1B1F0ECACF2EEAFF2EFAFFCF9B9EDEAA9D9D492DCD591E7DF9BE4DF9AD1D598E1E0A0EEE09B FBEFA3FBF9ABE9EEA6FCFCBFFFFFD3CFB48C907553F8F3D1DFE0BC2829171B1701A49E6AFEF7B3 F9F2B8E6E3C0312C26080900898C51F8F8B4DED4A788714B6F4F2BBCA778E7DEACF7F8C0F3FBB9 FBFFCAFBF7DCA79E9A1C14095C5A34F8FDBD514D290800009F9563EDC48AB5894CFFF6B6E8DE9C EFE8A4F6F1A9EBF7ABF4F3B3FFF1BAFAF0B1F9F1B0EDE8A6E9E5A2DAD796C4C180E8E6A5EEEBAB DDDC9CE7E6A6ECEBAAD5D79CD9E0A8E1E3A2D0CE81DED786F9F1A9EFE9B15C5934000000272708 DDDDA5F3F0A9F5ECABF2E6ACE8E0A5DDDB9DDBDE99E2E698E7E894EEE692FBEA9CFFF3B3FDD8A7 D89D70A07836472500B4904CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF0E289EBDD84EFE188EDDF86DDCF76E0D279F8EA91F3E58CE9DB82 F2E38AF2E68DE6DC82DDD479E5DC82E7DD85E6DC84E8DD85E9DF86F2E88FF3E98FEBE287E3DA80 ECE28AE9DF87E5DB83EDE38AEEE48BECE289F5EB92F4EA91F0E68DEFE58CECE188DBD179EAE28E EDE593EFE794F1E995F1EA93F1EA90F2EC90F5EF91F9F393FAF492F8F290F4EE90F8F19BF6EE9B F9F19EF4EC99F6EE99FEF7A3F8F09BFDF69EFDF69EF8F199F5EE94F4EF95F0EA92F2E48BFFF499 E1C669EDD172FFEE8AFCEE8AF8EF8CF3ED8EEFE78DF6EB94F8ED97F8EE97F7ED96F2E891F2E891 F8EE97F9EF98F6EC95F8EE97FCF29BF4EA93E8DE85F0E78BEBE285EDE48AEAE089E8DE8AF1E694 F2E797F1E694F4EA97F7ED99F4E994EFE68BEDE888F6F095F1E998E9E09ADFD698EAE2A9D6CF9B 5E58244542147B764E5A573524200A1711030900001205001709021F160A2F29183733193D3919 756C3A99884D937E3BBFB168FFFFB3FCF5A8FAF5ABFEFBB2F3EFA6F6F2A6EFEA9EE8E193E4DD8C EDE492F7EFA1EFE9A9E4DD9CEBE79CDDDA89DCD788C8C375E5DF9ADBD597BEB77FB5AE79ABA26D 9C99656F6E3F55512930271524190C1B0F020E0300080000020000070400221F0C4A492F9B976E DEDAA7F7F5BEF3EFADF2F0A5EEED99F6F59CEFEF94E9E98DEEED95F5F59FF5F4A0F0E998FBF5A8 C9C37D726B2CF4EFB0FAF7B2F1EDA0E9E590F6F097FBF59CFBF099FAF29FECEB9DF6F5ABE1DE98 332D0693894FFCF2BBEDE2A7EDE4A4EFE69DE9E090E9E18AF0E995F8EFA0ECE597EAE397EBE399 E7E19AF3EDA9EFEAA9EEE9AAF0EBADFFFCBEB2AF7A322B00A9A369FFFDBAE1DD91E8E497ECE99F EEE9A8FBF9C2C6BE8B3C350B7F7846FEF7BFFCF3B9F9F3A5F1F08FF1F389EAEA91F5F4BAE7E2CF 5C53550702030000003E4119D5DAA0F7FBBBF8F8B7F6F5ADF1EFA2F4F2A1F5F09EEEE997EFEB9E F5F2A9D9D791DCDB99DDDE9CD2D590DADB94E6E59EEEEBA0F7F1A6F4EC9EFBF2A7EFE197FEECA6 F0DE99D5B372D78F5ADDB070FFF4A6F9F59FF7D98CC78640B46A2BDEAE69FFEAA1F7F3A8F1E6A1 E7E5A4DEE8A5F6EDAFF9F1AEF9FAAFEFF7A5FFFAADDDAB67DB995AFFDB96FBE99AEFEE9AF7F5AC FEF7B6F7F3B3F7F4B5FDFCBCF7F6B6F4F3B3FAF9B8FAF7B5F8F1ADF8F0AAF5EFA7EDF1ABEAE7AB F5E6B3FFF3B8F1F1A2F6FBA2FCFAABECD69F30140E2D1105524829B9BE9492927D040000867E50 FDF6B7F2EBB4D6CEAF28231D040400888A4FF4F1AFF5EDC08F7557411F082009001F160E434422 757C4BB4B68EF6F4DAF7F3E82018183B371CFFFED6676242030000908559FBD49EB58649F5DE98 EADF96EBE19BEEE8A3EAF6ACF3F3B0F3E4A9FFF8B8FDF6B5E9E4A2E8E3A1F0EEABEBEAA8F1F2B0 F0F1AFF8F7B6F2F0AEEEEBABF3F4B5F2F5BAEDE8A4ECDF94FAF1A4F6E49F90824F0A03000F0B00 908F64E1E2A9E4E4A0F3F5AAF1F0A7F2E5A7EBD7A2E3D19DDBD397D4D790D9DE8EFBF2A2EBC883 BE793EAF6231D6BB8F60594339300CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDD84EEE087F4E68DF2E48BE7D980F0E289EDDF86E1D37A F1E38AE9DA81EDE288E8DE85E0D67DDED47AE8DF84EAE186EAE185EDE489E7DE83EFE58BF8EE95 F3E990EEE48BE9E085E1D87EE1D87DE8DF84EFE68BECE289F2E88FF2E88FECE289EDE38AF1E78F F5ED9CF2EA99F7EF9CEEE693F3EC95F2EB92F5EE92F4EF91FEF898FDF795F2EC89EFE989F6EE99 F8F09DF7EF9CFAF29FF6EE99F0E994FFFDA8F2EB93E9E28AF6EF97F8F197F7F298F3ED95E7DC84 FFFAA2EBD277DBC162FAE584FBED8AF4ED8CE9E387ECE58CF8ED98F2E891F5EB94F4EA93F4EA93 F9EF98F3E992E9DF88F3E992F1E790EDE38CF3E992F3E890E7DE83F3E990DDD379E2D882FDF5A2 FDF2A2EEE393F0E595E8DD8BEFE490FFF8A3F6EC95F7F096F5ED98EEE696DFD88EE3DC98D7D094 8580484E4910D4D398F8F7B7FCFCBCEAEAB1D5D3A28F88573D320C201304160D03100901060200 0F0902070000100000220E004739146B6336888054989469B1AF84C4C398CFCEA3E2E0B2CDCB9B BFBA8BCEC896D3CD9FCECBA7C9C69DA9A977B1B279B7B880A6A67585845D6E6B4E48442B312D10 040000100B000A0400120B000B02000C01001303020F010044332295856CC4BA98E4DCB3FDFBC9 F4EEB3F8F2ADF2EEA2F6F19FF0EE93EBEA89EEEB8AE6E483E6E587F3EF96F4F09EEEE897F2EC93 E6DF8BFFFAAD67601BC1BC76CECA80F1ED99FCF79CFDFA99F4EB89FAF08EF6EE92EFEC97E9E698 F1EEA7BCB7772C2503D8D099EFE7B0F5EDAEF2EBA3DED686FDFAA2EEE794F6EFA1F0E99BEBE397 F7EFA4F3EBA4F0E9A3F3ECA8F0EAA7EAE5A5EFE9AAFFF9BCDBD49D211A00B8B17BFFFCC7EBE4A9 F2EDAAEAE79DF2EEA3FFFEB4DBD5922C260C675F2EEBE4BCFCF8BCF4F1A1F7F99DECEDA0E5E3B3 605A4B050000080300626140DEE1A5FEFFC1F0F5B3ECEDAAF2F1AAF4F2A8E5E197FEF8AFF5EFA5 F0ECA5F7F3B0F2EEAFE7E5A7DEDF9DDDDE99E7E9A1F0F0A8EDEBA0F1EBA0FBF4A9EFE79DF1E8A0 FBEFA9FCEFA9FFEDAAF8DD9CBE9352C19551F1D085FFF3A1FBDF8DC8944CBB682ECC713EFBCE96 FFF8B6E1DC99F8E7ACF8EEB0EBEAA3F4F6AAEEF3A3EFF09CFFF6A5FBC884DF9F5CFDCF88FDF7A5 FDF9AFF9EEACEEE5A4F2EDACFBF8B8FCFBBBF3F2B2FBFAB9F9F6B2FBF4B0FFFEB7FAF6ADF6F9B3 F8F3BBF5E4B8FAEDBAF2F0A8F0F49DF0EB98F2D6A04D2306260500483D19040803787A6614110E 2F2A10EEE5AAFFF9C4D9D1B21B1611080701ABAA70FFFFBEE7D8ADF0D4ACC5A177EDD4A6AFA476 797A512E32180204003A3A16A2A0768D89613E3B1BD0CCB31D1808161106C5BA88FFD9A5A77736 E5CA7DF4E99AE4DA91DDD490EBF3ADEAE8A4E0D190F4E7A7FAF2B1FFFAB8F4EFADE7E5A2E8EAA5 EEEFABFCFBB8F9F8B5F5F0ADEEE9A7DDD796FBF1B4F5E5A2F9E89FFFEBA1D4B874A89057605121 958B5DE8E3B4DEDBA4F3EDADF8F3ACEDE9A0E9E3A2F8EEB2D7CB90F4E3A7FFE5A4F5D48EC29951 A5732EAA7533D7A46BD4B993B9A7891B0C08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E38AF1E38AF1E38AEEE087E5D77EDED077EADC83 E6D87FEEE087ECDE85F6E88FEBE087E3D87FDFD57AE7DE82EAE185E8DF82E9DF84EAE085F0E68C F3E98FF1E78EF3E98EF0E78CEAE185E7DE83E9E085E9E085EAE187EAE086ECE289EBE188E9DF86 F4EA92F7EF9EF5ED9DFCF4A4F4EC99F8F09CF7F098F5EE93F2EC8FF7F191F9F392F5EF8DF8F292 F1E994F3EB98F4EC98F9F19DFAF29EF6EE98FCF59DF3EC93EFE890F9F297F3EC92F4F097FAF59F F3E690FFEC95E4CA70C4AB4EF6E282FBEF8DF8F091EEE98DEDE68EEFE590EFE590F3E992F3E993 F6EC96FBF19AF5EB95EFE58FF4EA93F2E892F3E993F9EF99F8EE97F5EC90F4EB90E9DF86F2E891 FFF5A2FBF09FF7EC9CF8ED9CF0E593EEE390F9EF9AECE38EF8EE9CEEE592DFD685EBE395E7DF95 7E77351C16005F5C27ECEBA8DEDE94DDDF8FEAEDA0E6E79FF3EEA9FAF2B1D8CD92B3AB7D7C785A 3F3D2A1512070700000D00000F00000900000C0000030000080300060300070600181905212209 111100131100302C1039351C2927183C3C294447272A2F121A1F061B1E09070903000000000000 0200000807000D06001C10002A2010453D26786E42AC9E6EB8A470C1AA73FEECB2FCEFB2F7ECAB F4EBA6F9F2ABE8E197E4DE91F2EC9AF7F29BEFEA91EBE68DF0EB95F0E99AEBE39DF1E8A8FDF4B0 EBE48CF7F19AFEF7A8ABA45E706B27EFEBA0EDE894F8F296D0C967E6DD79DDD06EEDE486EFE994 E7E192FCF9B3F5F0B39690594B4415F5F2BDE3DB9CF0E8A2E9E292F6EE9AEDE694F4ECA0FAF2A5 F7EFA3F7EFA4EAE29AF0E9A2F7EFA9F7EFAAF0E8A3EBE4A2EFE8A6FDF8B9CCC48D3A3104B6AC84 FFFED1E3DDA0E5E393EAE990EFED94F3F0A1FFFDBD6D6434473E1FD7D4ACFDFAC6F5F6BEE8E7BB 3836170000001813058B8866FCFBCBF2F4B0E9EDA6EAEFACEFEFADEBEAA6F0EDAAE5E09BF7F0AC F6EEABF2EDABEDE9AAEAE6AAF3F1B4F0F0AFF6F6B2F5F6AEEAE9A2E8E69CF4F2A6EAE59AEEE89E F8F0A8F9F1AAF5ECA8F5EEA8F6F5AAFAE9A1E2B875C08A48E5B46EF6E499FFF1AAE4B172C77C44 B66E36DEA56BFFDDA6FFE0AAFFECAAECE9A0E9EC9FEDEB9DF5F5A4F8F1A0FFEA9FFACD88D7A55E E8CC81FFEFA6F7E39DEDDC97F9EEABFEFAB9F7F4B3F8F7B7FBF9B8F4F1ACF4F0A9FEF6ADF2ECA4 FAF9C0F5EFB7F8EDB7F8EFB5DFDE9BEFF1A8F5EAA4FFE5ACAF81563C1C09695F3F686D51000100 1410031E1809D8D49AFFFCC8CCC5A5231C12070701C3C386F1EDA8F8EABBE2C490D4AF6CFDE49B FFFEBCFFFFD9F3F7D3B1B48B5356345C5E2CE8E9A4E2E2B04742300703007E7A47F1ECB8FFD19C 9E6D29EAD47EFBEF98FAEEA2F2E7A7EBF3AFE9E9A0F2E49EF9ECACF9EFB0FBF6B4F7F3B1F3F2AF F6F7B3F6F6B1F9F7B4F4F1ACF7EEAAFDF2AEF2E3A2FBEDADFAE8A4FCDD94D0AB63BE9C57F2D798 FFEFB7FFF5C2E8DEAAEDE2ABF6EAAFE6DDA0FFFCBFF4F1B2E7DE9CEFE19BFFEBA4EEBA71BE742D C27B37CD9858F4D89CF5E7ADECD29AE7C993644714FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E38AF0E289F0E289F1E38AECDE85D9CB72 EBDD84EDDF86EFE188EFE188F1E38AEBE187E8DD83E4D97DE9DE81E9DF81E5DB7AE8DE7FECE284 EBE084E9DE84ECE188EDE387E6DD7FE2D97CE2D97CE2D97CE2D97FEEE58AE8DF85ECE289EDE38A E4DA81EDE38DF7EF9EF7EF9EFFF8A7F8F09DFCF4A0F8F09BFEF79EFBF49AF8F294F4EE8FF1EB8B F3ED8EF9F19BF8F09BF3EB94F4EC97F6EF98F3EC92F9F298F8F197F5EE94FCF59BF3EC91EFEB91 F1EC97FDF29CFFF09AF8E086B89F43F2DF80FBEE8EF9F396F2EC93EFE993ECE290F2E893F4EA95 F4EA95F4EA95F4EA95EEE48FFAF09BF6EC97F1E792F0E692F1E792EAE08AF8EF93EFE68AF4EB90 F7ED95F4EA95F6EB99ECE190F4E997F7ED98F5EB96FEF49DF4EA96F5EA9BF8ED9BFBF39EF3EB94 FDF5A4ECE5988E87451710005A5621DBDA8EF5F6A2E8EA99DEDF92E5E091F5EC9DEDE295F4EEA8 F0EFB2D2D3A0B6B88B9491687B73496D5E36291400110000120000070000030000090700010100 0E11000D0F00100F001511000C08000906000000000A0C000106000003000609000E0F0E0F0E14 010000080700605F459B9372C0B189D7CD9BEDE8A6F4EE9FE9E085F5E181C7AE4DE1C465FDE68C F6E18AFDF09DFDF4A9F0E9A1FBF3A9EFE79BEDE599FEF7ABFDF5ABF4EBA6EFE5A6F3E8B1F4E8B5 ECE2A7F9F29EF5EF99F9F3A8F4EDA95C5717BBB671FEFCB1DAD47CD9D374DED474F0E385EDE288 F9F5A3EDE498ECE59FE9E3A4F1ECB356512E78723DFFFFCBEEE8A1F5EE9EE2DA87F1EA9BFAF2A7 FBF3A8F5EDA2F5EDA2F1E9A1EFE79EF7EFA7FDF5ADF7EFA8F4ECA5F8F0AAE8E19AF7F4B7DAD2A2 322900A1986BFEFDC9EEEB9DF2F197E4E386F2F09BF1EDA8F8F7BC79754A292303ABA68FD5D1C1 34301D03020011120093945EFFFFCAF1EFADEAE7A5E3E39FDCE29CE5E6A3D5D493E8E4A4EAE5A5 F3ECADEEE6A7EDE8A9F3EFB0F0ECAEEBEAAAF3F2B0F3F3ADECE9A3EAE89FF3F1A6F0EFA4F8F4AA F5F0A7F6EFA8F1EAA6ECE4A1EEE9A5E6EA9AFBFAABFFF5ADFBDB9CF8BD83CF9157D8B170FCE6A0 FCF6B0E5B476CB723ED27544FFC18BFFF2B1FEFEB5EEEA9CEEE397FFF4A8F9E99CF7EC9DFFF7A9 F6DA90D9A765EBC47DF9DE93FCE79EFFECA7FBF0ADFAF4B2F4F2AFF5F4B1F1EEAAF0ECA5F9F4AA FDF5AEF1EFB5F6F0B5F9F0AEEFE9A4DDDD9EFDFBC3FBEEB5EEC586BA894CD6B27C453A17151A0B 030501010000565132FBF6BCFFFCC5C0BA980D0703202000E3E3A6E3E199FDEEBCEECD8DDCB257 F5D878F5EA95D7D695F1F3C7FFFFDAF5F9BAF6FBA5F4F8A5DCDDA05D5C397B7A4AEFEFB5FFF7C0 FFDEA7C7954BE9CE6FF6E889FFF3A3F5EAACE2E9A8E1E199F8ECA0F7EAABF6ECAFFDF8B8FAF7B4 ECEBA8E6E6A0E1E09AECE5A1FFFFBBF4E4A1F7E3A1FFFAB8FFF8B6FFE19BE0B870CDA55BEECD84 FFF6B0F9EAAAFAF1B6FAF4BBFDF7BEFEF5BCF6F1BBF3F1BCFAF6BCFFFDBCFECF84CB8734BE6C15 E79440FDD084FFF2B4A89B6BBDBD8EFFE99FCAA856C09E51FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E289EEE087F0E289F3E58CEDDF86 D8CA71E3D57CECDE85EFE188F1E38AE6D87FE8DA81EBDD84EADD80EBDE7EE7DB79E5D976EEE27F EFE282E6D97CE1D478E9DC82EFE587E6DE7CE3D97BE5DC7DE4DB7CE8DF82E3DA7FE2D87EECE289 F3E990F0E68DF7ED97EEE693EEE696F8F09EF2EA97F5ED99F3EB96EFE890F7F096F8F196F6EF93 F6F092F5EE94FDF69EFCF59DF4ED93F2EB92F3EC92F1EA8FF4ED92F1EA8FEDE789F4EE90EFE98B F2EE95EFEB96EEE38EF7E38EFFF29CDBC267FBE88AFBEE8EF5F093F2EC93F5EE99F3EC99F2E994 F1E792F2E893F3E994F0E691EDE38DF2E893EDE38EEEE48FF3E994F3E994F1E791E5DD7FE3DA7C EEE589E8DE85DFD57FEAE08BF5EA98FAEF9DFBF19CF2E892F5EB94F0E591F9EC9EFCED99FAF095 E4DA7CF6EC92F4EC9DFBF3B1928A500B04006E692FE7E29CF3F1B0F0EBAEF3EBA5F4E89AF0E48F E3DA83DDDA84DCDF8AE5EB98E3E492F6F39EFFFFB2E4C591947148B0946B938158675933433C17 403D193433111F1E0D201C0C2C280D2E290E3731134F4C254B491D5556296669476466531A1916 100C0C1D1710383417FFFDC6FFFCC6F8ECB1E9E29DE7E792EAEB89EDE77AFCED7EEED567D5B249 F9E783FEF394EEDD83FDF6A5EFE69AE9E094E9E095E7DD95E7DD96F0E6A1EDE2A0F2E7A8FDF1B6 FCF0B6F2E7AAF0E998EAE493E8E19BFBF5BAB2AE744B4709EEECA7EAE496FDF69EF2E98DFBF195 FEF39DF9EFA3EDE39BF4EBA8EFE9AAECE8ABD3CF91262300AFAB69EBE69DEEE799F8F09FF1E99A F8F0A5F5EDA2F0E89DF2EA9FF3EBA0F6EEA3FAF1A7FBF0A8F1E79FEDE39BEFE79EF5EFA2F2EEA4 FFFFBFB3AD75352E00ADA76DF8F3B0F4F0A7EDEA9BF5F2A2DEDA8DFFFCB7F5F6C4A5A586222014 2A26270300021D1C0E9D9F71FFFFC0EAEB9DF4F1A5ECE59FDEDC96D9DE96DFE09AC3C27EDAD894 E9E4A2EEE7A5EFE7A5F1ECAAEEEAA7E5E39FE7E8A1ECE9A3EFEBA7ECE8A2E7E39AEAE69DECE89E EFEBA1E7E399EAE69FF2EDA9F0EBABF2EBA7F2E499EEE697F0E89DFDF5AEFFFCBDFFDBA0D8B278 C4A163E3C17EFEEBA9FFD091D69656AD7130CD9352F3C984FFEAA0F7E499FBDF98FDDE99EEE89A EFF6A4FEFCADFFD897DCAF66EBC775FEED9DFFEDA3F2E19BEEE49FF6F0AEFCF9B6F5F2AEE8E49D E8E399F2EEA3FCF8B7F1ECA6ECE69AFFFBB3DFDEA1AAA66DFFF2B6EDCD89BC8A42F4D898FFFFD0 6F785D0F120F0200008C8867FDF8BEF9F8C5857F5A020000605E37F4F3B3FFFAAEFFF0BDE5C27C C79634EDCB6CDDCB77ECE6A2FFFFD0CED0A23C3E0E767540E3E2A7FFFFC9F7F9C8FFFFBFF1F2AE EEE4A7FFE3A6E0AE5EEBCF69FBEC85FCEF9CF2E4A7E7EEAFEAEAA0FBF1A1F9EDABF5EAADF8F3B3 F5F3B0E7E7A1E0E09AE2DE98D5CD87EADB97F1DC99FFE8A7FFEFADF2CA86CFA259DFB468FFE294 FFF3A3FFF3A5E7E096E6E29EFFFABAF7E8ACF4E3A9F8FBC0F4F6BAFBE1AAE89E65BC601DCE7625 F5B857FFEC89FEFEA4FCFBBC6E593C3C220FD4BB82E1CB87FFFEBEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDE85E9DB82F0E289F2E48B E9DB82D9CB72E1D37AE9DB82E9DB82F2E48BE3D57DE3D47CE9DA7FE7D97BE7DA78E5D875E5D873 EFE27EF1E482EADD7EE5D77BEBDC84EEE285E2DA78E3DB7BEAE182E4DB7CE4DB7EE8DF84EDE389 EDE38AEEE48CF2E891EFE58FF2EA98F2EA98FAF29FF5ED99FAF29EFAF29DF9F29AFFFCA5FFFBA2 FCF59BFAF398F6EF95F9F298FCF59BF7F095F6EF94F9F297F7F194F9F395F5EF91EEE889F5EF90 F4EE8FF4F197EBE795F0E593FFEE9AFFF49DE5CB70F0DC80F7EC8DF2ED90F1EC93F6F09DF6EE9E F0E594ECE18EF0E692F6EB98F4E996F3E895F4E996F1E793F6EB98F6EB98F0E592F1E791E9E082 E9E080F0E78AECE388E7DD85F1E791F5EB97F9EF9AFAF098EFE58DF5EB92F5E893FDEC9FF8E991 F5E886F6EC86FFF897E8DE8BF4EBABF6EAB9968B5E31270349411AC3BD84E9E5A8F2E9A1F2E591 F9EB8FE9DF7EE8E483E2E386E3E58CDDDB85E6E18BEAD986FFECA5BE8F4EBD9757FFEAABFFF4B7 F3E6ABF0E9AFE6E1A9D9D59CDCD59DE3DDA6E5DFAAE8DEAEF5EDB7E9E5A9FFFFCACFCDA058553C 322C253E36291911018C854EF7F39FEBE38EECE293EAE793F1F69CEEF194E7E084F2E287FFF79F E6BD64E5C269FFF194F6E788EBE186FEF8A2F6EF9AFFF8A7F3EA99E9E192E9E093F4EB9EFAF1A3 F4EB9CEFE796F1E997ECE594F6F0A5F0E8A9F9F3BBFFFECC6E69318F8C4CFDF7ADF4ED9BF7EE97 E4D881F5E898E5D891F5EBA5F7EEACF3EDACEEEAABF9F7B69B9A531E1B00C6C174FFF9ACE7DD8F F4EC9FECE599F0E89DF7EFA4F7EFA4EEE69BEEE69BF5ECA1F8EFA4F4ECA1F5ECA0FCF4A9F2EE9B ECEA96EEEC98FAF9AACFCA82302A007E784BF5EEB9F1EAB0EBE6A0E9E693F5F4A8FFFFDAC0C1A4 12130C000000000000B5B6A4FFFFE0ECECAEEAE79DCFC97AE8DE91ECEA9CDAE192E6E89DCECD84 DBD892E5E19BEBE59FF4EDA8F5F0AAE4E198DAD98DEEEEA2F2EEA6F4EEA9F9F3ADEDE89FE3DD94 F4EFA4EDE99FECE89FF5F1AAFDF7B6F5F0AFEFE7A3F7E799F4E998F3EEA2F1F0A9FAF9BAF8EEB3 FFF3B9FDE7ACD7B071BF9650DCBF73FFE596EDC679BB7B35B26E2DE3AA6AFDD796FFEFAAFBEBA3 E9E399EDECA2F6F1A8FDF2ACFFEA9AF2C670D6B05CEBCE80FFEDA3F3E7A0F2EBA7F5F1AEF1EEA8 E9E59EE9E59BF5F1A3ECEC93F1EE9CE9E29BF2EEAEE7E7A7D3D18CD7C177D8AC64B9803EFFE3A4 FDFBBAD4DEB420251F00000075714FFFFFD17570371510002A2415CAC8A0FFFFC1F3EFA0FFEFB8 FAD996DAA14BFFDF91FDE9A5DACF95C3C190F1F1D3A6A39321191D292314D5D2B0F9FBC5F7F9AF DEE195F7EEACFFE6A7DAA754F0D668FFF186F7E794EBDCA1ECF3B6F1F2A7FAF09FFEF4B1F4EBAC F2EDADF1EFACEFEFAAF6F2ADF8F2ACF5E9A5F8E9A6FFF6B6FFECADE6BA78CE9D53EDBD71FFE696 FDE694FBEC96F0EA94EDF09CE6EB9EE7E59FF8EDAFFAECB3FFE4A9DDAA6EB07439AF6E2FECAB66 FFD686FFFBA2FBE388DFCC79C1AA6CA284581A0000A0925CFFFFCCFBF9C6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFCFCFCF1F1F1CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D6D6D6FDFDFD FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFDFDFD E7E7E7D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D67CE1D67CF2E48B F8EA91E9DE84E6D97FEFE188EFE389E0D479F1E38AE6D87DE1D379E4D579E0D171E2D473E6D874 E6D874EDDF7CF6E887F5E787F0E184F1E287E5DA7BD9CF6EE5DB79F4EA89EAE183E8DF81E8E083 F1E88EE7DD84E3D980F6EC94F2E791F1EA93F0E893F6EF9AF1E994FBF19AFEF49CF3EB90FEF79D FCF59AF9F298FCF69DFAF49CFAF299FFF89EF9F298F8F197FAF398F8F196F8F196F6F092F0EA8B F5EF90F4EE90FAF69CF8F4A0F2E893F7E996F1DB86DCC56EE2D075F6E88AF4EA8FF2EB92F4EE99 F0E898F2EA98EFE591F4EA96FAEE9CF3E995F4EA96E8DD8BECE18EF7ED98F8ED9BF1E793F8EE98 F0E78AEAE182EEE588F3E98FF3E991F3E994F8EE99F7ED98F7ED98EBE189F3E992F6EB97F2E393 EFE089FFF999F1E783F6EC8FF0E696EBE0A0F4E9B5F9EDBFCEC494473B0E322C00878344EBE29E FDF2A3EDE189EDE284E0DA7CE9E58BF0EF99DFDB8AE7DF91F3E195FFEE9CE1C16D936615FED687 ECD585F0E392E9E294EBE69BEDE59DF0E69FF4EBA2F5ECA2F5ECA6F3EBA2E5E096FAF7B69F9D69 0F0A00514B35231B03231A03D3CB84ECE687EBE381ECE68BE7E78DEDF19CE6EA98E2DD91F3DE98 FFE9A3FEE298E7C474E7CE76F4E384FBF095F3E98FABA149D5CB74F3EC97FBF39EF0E892EAE28C EBE68BF6EF95F5F093EAE589F8F3A3F5EEA7FFF8B9F8F2BCF3EEBBF3EEB74D480BDED996FAF3A8 EDE698FAF1A3E8DE92F6EBA6F2E8A3F6EEAAF8F4B0E4E19DECE9A4FDFDBC908D4F46410DEFE9A1 FAF2ABF2EBA3E9E59AECE59BF8F2A4FEF7A9F6EFA1EBE295F2E99EF7EEA3F3EA9DF2E89CF6ECA0 F8F1A3EDE994EFEB92FBF79CFAF7A4F1ECA84B4418726946FFFFDBE9E6AEFCFBBAEEF0B0A4A685 2828110000003B3A2D454630303014CFCDA7FFFFD1F9F4B5E2DC92E0D886E2E08DD6DB87EFF2A2 E5E496E9E79DEAE69DF3ECA5EEE89EEAE69CF2F0A5F0EEA1E7E599EDE8A3CFCA87D5CF8BEEE7A2 E7E29BEBE69EDEDA93E2DD97EBE6A2EFEAA8F2EDACFCF5B2EAE092F0E396F6EEA5E9E7A1EFF3B1 F6FBBCF1EDB0FEEFB2FFF6B5F5E19AC1AD5FA68F3DEBC372FEE79CF4AD6CCF773DCA8044D7AE69 F0DE94FFF8B1FFF0ACFCEBA6EDEDA2F1E090FCD785EAC576D1AD62D8B870F8E098FEFBB3FDF3AD F6F0A7F3EFA5EFEDA2EDEC9CF3F392FAF49FFCF2B2F5F1B6DFE19BEBE895FAE08BC4934ACA9454 FFE8A9FFFFBA7E844A000000000000423D20F0EEC2AAA773565129C6C2A5FAF9CBE0DF9FDAD48A FFF9BEF4CE88E7AC5CFFE49FFFFCC4B7B07F0D0F00A4A38DFDF5F45C505E050000434129F2F7BD EEECA3F7F3A7F5EDA7FFF2AED4A14ED4B049FFF891F8EC96EBDEA0F2F5B8F7F5AFFAF0A7F9EFB2 F5EEB1F6F4B4F3F5B0EFF0ABF4F4ACFAEFAAFEEEAAFFF6B3EFCA83DDAF68DBB16BDFBD77FFEDA3 FFEA9DFFEB97FCF09CE2DA86F2ED9EE9E299EEDF9BFFE8A9DDB479BD7335B05819CE8C48F6D189 FFFEB1FFF1A1D9C274BB9C50B89550EBCA8EFFF9C27A6E3A15110AE7E8B8FEFFD8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CDCDCDF3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4EAEAEACECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D3D3D3 F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F5F5F5E2E2E2D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE688F2E98C EEE487EFE58AF4EC91E6DC81DDD377EBE385F0E688E5DB7EE7DD7EE7DA7DE5D87ADED273E7DA7B F1E485F1E485F1E485F5E889F2E587E6D97BEBDF80EDE07EDFD36AE6DA73E8DC77E6DB79E8DC7C F0E589EDE286F3E88EFAF196F5EC91F2E98EF1EA8EF1E98FF6EC94F9EE97FCF197DBD172D0C663 F7F18DF9F492F1ED91FBF7A4FDF8A8F8F19EFFF9A4F8F29DF4EE99F8F39DFAF49EF6F099F5EF98 F6F099FDF79EF2ED93F1EB91EBE48BF1EA94F1E995E7DD8AE5D580E1CC73F2DC7FFCE78AFFF298 F4EA95F1EB9BEEE794F4ED95F2EB94ECE58FF0E992F2EB94E4DD87E9E28BF0E991F4ED97F5EE97 F4ED96F2EB91EAE48AECE58BF0E892F2EA96F9F19EF1EA98F3EB9BEFE796F1E999F3EB9CF0E797 F2E895F7EE9AFBF19EF6EC9BEFE597F7EEA4E5DC93EBE19AEBE298FAF2A6C5BC70403B0B161300 605928E2DBA2EBE2A3EEE79EE7E18EE7E286E3DE81E1DC80E5DD86EAE28FE9E690F6E28FC19142 DFA556FFDE8AF8E78DDFE28AEFF09DEDE498EDDE92EFE796E7E48BEEE788EAE58DDFDC93EEEFB6 3E3F172C2B16615E41141001504C25F3F1B2D6CE7EF1E794F2EB98F1EC9BE1DF8DEEEF9DDEDC8C E6E090FDF4A4FFF3A2FCE38FE1C66FF4D983F7E498F6EDA4807127CFC175FBEFA0F2E796F1E999 F6EF9FF9F4A4F6EFA1F0EAA0EEE89EF3ECA4F9F2ACFBF4B2F8F0B4F7F0B7FDF6BF9A93627E7842 FAF5B6FBF7B5EBE7A5ECE9A2E6E49AEDEAA0F5F1A8ECE59CE9E19BECE4A0E7DE9DF5EDB03C3517 635E32F0EBB6F3EFB4EEECA8E1DE94F6F4A3F3EF9AF6F29DF5EE9DF1EA9CF5EDA2FCEFA4F8EC9E FCEFA4FCF1B1F4EAA9F6EEA3FEF9A9F4F09DFBFBB3E7E5A837361C585934EBEECFEBEFD26C6F58 000000040100423E23E3E2B2FFFFCC8A8657221E00A4A071F4F4BFE5E5A7F9FDB2E1E493EFEE9B EBE996EDEB99F2EF9EE9E696E0DD90EEEAA1F5F1A8F0ECA5F2ECAAE9E4A2F2EDAED8D395C4C081 D5CF92E1DD9ED3CF8FD7D394C1BE7DD7D492ECE8A9E8E5A3FBF7B3F6EFA8F6F0A8EFE9A1E9E59E EEECA5F7F5AEF8F5B0FCF5B1E7DC9AF9F3B2FFFEBEE8D38ECAA255E8B266FBCB82FFC781E19E58 B97C34BA853DE2B870F4E8A2FFF3ACF7EBA5EEE8A6F8F0B2FEECAEFED798D09B57D49951F5C97D FFF4A3FCF2A1F2EE9EF1F4A5EEF2A5F8F3A7F5E6A0FAEAAAF4F2AFEAEFA4F0EB9AFEDC8EC08E44 C69C54FCE39DE8D392F9E9ACC0C0857B7858120B005B5446EFEBC8FFFFD1F3F2B9E4E1ADDDD8A4 CFC98FDDD38EE8CC72DFB44EEFDA83FCFDBCF7FFD37B8B670C1103140D00170B04181100434721 EBF3BCFDEBB2FBE8A9EBECA3FFEAA0DDAD65D39D51FFF19CF5F29DF6F8ADFBF3B6FFF9C0F1E8B1 FAF0BDFEFAC1F3F6B3F1FBAEECF3A6F3EFA7FFF4B1FFEBAAF1BC76DB9E4DFDBB60FFE89BF2F8C2 F2F2B6F9EFABFEEAA1FFEEA7FFE7A6FFF1B7FDDCA6E9AD76B87135B56120D38F46F5C275FFEFA2 FCF3A6F1D78BD3B269C7AF66DCC57CFFEEA8FCEEA9FFF9B4FFF8B8333710474C2FC6CCACFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4CBCBCBCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCCCCCCD2D2D2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA CACACACDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCBCBCBDADADAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E081 EBE283F3EA8DEFE68AE6DD80E3DA7DDED578E9E082EBE283E8DF80ECE284F0E284F0E385E8DB7D EADD7FF3E688F4E789EEE183EEE183F2E587EFE284F0E384EDE07DDDD068E8DB75EFE27EE9DD78 EADD7DE5DA7DEFE488FBF096F3EA8FE9E085F0E78CF3EE8FEFE78CF6EC94FDF19BFDF399E2D475 A19832E1DA72FDF894FEFA9EF9F5A3EBE899F8F09FFFF9A5FAF4A0F6F09CF8F29DF9F39EFBF59F F8F29CF7F19BFAF49EF0EA93F6EE95F8F095F0EA92EFEA95F9F29EEADB86CBB55CEFD579FFE88B FDEA91F9F099EDE798F2EC97F6EF97F2EB93F2EB93F6EF97F3EC94F3EC94F4ED94F4ED95F3EC94 F0E991EEE78FF2EB94F2EB93F6EF97F3EB97F1E996F6EE9BF1E998F2E99AF4EB9CFAF1A2F3EA9D E6DD8EEFE792F3EB98F4EB9BEEE598ECE399FAF0A7F0E79CF0E89AE3DB8AF5ED99FCF7A4B7B16E 55501C1A1400605A28D4CD96FFF9B8EDE79AEBE590EFEA90EDE68DE4DC84E2DB86DDE48EFDF29F F1C374C08131FFD37DECDC7EECEF95F0F09DE8E093EBDC8EEFE795ECE88CE5E07DDFDA82ECEAA3 B4B5811515007C7D5C32321F060400A4A067EEE5A3FFFFB7F3E898EBE291EEE797EAE695F2F19F E9E896F4F3A1EBE691F7EA96FFF09BF3D882EFD07BFFF0A4FEF3AAEDE097F1E398F8EBA0EEE295 F4EB9DF2EA9FF3EDA1F6F0A5F7F2A9F6F2AAF7F0A8FBF4ADFAF3AFF5ECAEF4EDB0F7F2B8F1EBB4 3C3603D0CC90F9F5B7EAE9A8EEEDA9E1E397E3E196ECE99EF8F2A8F7EFA7ECE39FFAF1B0EFE7AB DFDAA3241D007D7A4BF9F7BFE0DEA0F5F3ACE5E395FCF9A6E5E08CF0E998F4EC9FF7EEA3FAEEA2 FAEFA0F9ED9FEFE5A1F7EDA7F7EDA1F3EC9BEEEA9BF2EFA7F9F8BDECEBC1777B5C393E2F454939 00020003020074724DEEEDBCEDECABF4EFADFFFFC1B4AF7D312A065B582FDDDCADFDFFC9F0F0AC F2F09FEEEB9AE5E292F1EE9EF6F3A4EFEC9FE3DF95E3DF97EFEBA5EEE9A7F2EDABFBF7B8EBE7A8 DEDA9BE5E1A3EBE7A7E6E2A2E0DC9CD6D292E7E3A3F9F5B5F4F0B0F1EFACF4EFABF0EBA7EFEBA4 F2EEA7F3EFA7F3EFA7F7F2ADECE7A3ECE8A4F3EEADF8F4B3FFF7B5FFF8B2F6E8A2F0CF85E1B56D EAB970FABF76ECB068D4964FBA823CC5924DF4D18CFFFDB9FCFAB6FAF2AAFFF5ADFFF0A6EFCA81 D4A75EE6B76FF9D68CFFF2A3F5EE9BF9FBA9F9F4A8FEF0ABFFEEAAF2F1A7ECF1A2F1E999FBE095 C7964CDEB96EF4E69CEFDF9FFEEDB0FDF9B5D4CEA90700000300008F8767FFFFD2F8F4B4F3EBB4 EEE2B2E1D5A0E5DA94F2D177E2B04FFDEA98F4F4B6F0F7CFFAFFEAD5D7C68B7E6F1B0701251600 E1DCB1FEFED0F4DDA8FBEBACEEF4A8FFF7ACE2B670D79D58FFF2A4F4F29FF3F9AAF8EDADFAF1B7 F5EFB6FAF4BBF7F0B7F2E8ACFDF6B7FCF4AFFFF2A3F6D37DDBB55BDFBA63EFCD7AFFEA9FFFFCBF F9EDC0FAF0B6F1EBA2FEFAA8FFFBB0F4D090E3A976BF6E3FB96733EBA260F9D182FFF4A2FFE595 E5C377C69E53B9964CE3C67FFFFBB4FFF3ADF7E8A2E6DC96F7F0A9F5F2B1DCDEB91D200F080A01 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1E889F0E788EAE184E7DE81EBE285E5DC7FE0D77AE5DC7FE6DD7EE7DE7FEBE283ECE082F1E486 EADD7FE4D779EBDE80F2E587F0E385F1E486F2E587F0E385F2E587E9DB79D5C862E1D46EEADE7A E4D876E8DA7BEEE485EBE084EFE48AF4EB90EDE48AE7DD84EAE388E7DF85F1E78FF7EB95FFF399 EEE181DED670FBF68EFEFA96F7F397F6F3A0F2EFA0F8F19FFEF8A4F7F19DF3ED99F8F29CF9F39D F5EF99F4EE98F8F29CFBF59FF5EF99FEFAA0FFFFA4FEF79FFAF49FF5ED98F5E590DEC970F3DA7E FFE88BFEEB92F7EE97E9E393EFE994F5EE96F1EA92EBE48CECE58DEAE38BEFE890EFE890EEE78F EDE68EEDE68EECE58DF6EF97F9F29AFCF59DF5ED98F0E894F7EF9CF3EB9AEFE697EAE192F0E798 F1E89BECE492EFE890F0E893EBE390E6DD8DE4DB8FF0E79CECE399F8EFA1EDE496EAE291F7F09F F9F3AED9D399565126100900534C13B5AD70FEF8B3EEE89DEDE696EDE594DFD785EDE695E4E893 EDDF8DFCD181D19746EBBF69F0DD81E7E58CE3E28FDFD687E5D88AECE492EBE78EE6E386FAF7A5 F7F5B45A582E2424027B7D5D121200131000DBD89CFFF8B1EFE697F3E898E5DA8AF7EF9EFDF7A6 F3F09FE4E190F5F1A0E7E08FF6E997FDE997FCE28EE8CE79E0CC7AFFF8AAFEF4A6FEF0A5EDE095 FAEEA3F0E79CEDE59AEEE89CF3ED9FF5F1A2F3F0A1F4EDA4F7F0A9F3ECA8F2EAA9F6EFB2F7F1B7 FCF6BC9F9A5F353008E5E3A5DEDD9DF6F5B1E6E79BE4E297E4E196F7F1A7FBF2AAF2E9A3EAE19E EBE4A5F6F4BDCCC78F171400A7A46CEEECB3E2DE9DF2EFA9F1EFA4FBF6A9F3EC9EF7F0A3F5EDA0 F7EB9FFDF2A2F9EE9EFDF5A2F1E995F3ED99F4EF9EF8F5ABFAF8B7F0EFBBFCFCD6A3A389030600 010400040702989A6EF9FBC3F3F3B2FAF9AFDCD891EDE7AAFEF6C4F7EFC87570521C1900B3B188 FFFFC9ECE8A0EBE79EFFFFB6F4F0A6F4F0A6F9F5ABECE89EE9E59CEFEBA2EFEBA2F8F4ABF4F1AC EDEAA7E9E6A3EFECA9EFECA9E9E5A4E2DE9EE4E0A0E9E5A5F3EFAFF5F1B1F1EDADEDE8A5F0EBA7 F4EFABF8F3AEF7F3AEF6F1ADF9F4B0F4EFABFCF7B3F2EDA9EAE5A3F2F1B0F3F7B6E3E4A2FBF6B2 FFFCB7EBC881CA9E56ECB46AFFC980EEAC64C9833DB6712BC4893FE5B86BFFF3A3FBF1A2FEF9AC FFFCB6FFEFACDEBB78CCA45DF3CE81FBDE8AFCE68FFFFAA9FFF3AAFFEBA4FCF6ACFEFCADFCEE9D F5D487CA994EFFE093F8F1A5ECE8A6E8E3A2E8E6A3D6CFA64D42300B000099916DFFFFC8F1EAAC F4E9B3F5E8B5EADDA5E8DD97EDC875C88E39FFE399F9EEB7E7E9C3F2F6E2E9E4D7FFF9ECB39C8B 2611035D5130DBD5ACFCEBB5F8F1ACD5E091FFF5A9EDC981C8924EFFF5A9F4ED9CF0F3A1F3EAA3 F8EFABF5EDACF4EEAEFFF3B7FFECB3FFEAAEFBCD87F0BC68D9A848E5C05BFFF095FFFFB9E9F4B7 EBE5B2FFEBBAFFFABDFEEFA4E5CC78C1A04F986821B17036E29A62FCC686FFEFA4FAD77FD5AF5C BD9B51C9A85EEFD088FFE59CFFF0A9F9E6A1F9EBA6FFF4ADFFF7B2FEFAB3EEECADEDECD08D8D82 070605FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFECE386EDE487EEE588ECE384EAE182E2D97ADED577E1D87BE7DE81E9E083EAE184EDE286 F1E68AEDE387E6DC80EBE084F0E58AF1E68AF6EB90EDE286E8DD81EDE285F3E585E4D674E3D572 E0D472E4D876EEE081ECE282ECE283F0E488EFE68BEDE389F4E990ECE58AEEE68CF6EC95F0E48E FAEF94FEF192F0E880FDF78EF8F48FF4F093FAF7A4FDFAA8F7F19BFBF59FF1EB95EEE892F7F19B FAF49EF9F39DF5EF99F9F39DF6F09AF0EA94FCF79EF0E98EDFD87EFCF6A1F7F09BFFF19CFAE68A F4DB7EFAE386FFF298F7ED96F4EE9DE5E08AEEE78EEFE890E9E28AEDE68EF3EC94F3EC94F3EC94 F3EC94F3EC94F4ED94F3EC94F1E994F2EA95F4EC98EDE590EBE390F3EB98EFE796F7EF9EF2EA99 EFE697F4EB9CF4ED9BF6EF97F5EE96F0E893F3EB99F3EA9AFAF1A4F3EA9DEDE497EDE497EEE597 F8EFA0EFE9A0F9F9BADFDA996862292822002C2303ABA368EBE3A4F4ECAADBD38BE7DF92ECE596 DCDF8BF3E895FFE192ECB865AA7F28FCF297EDE68FE6E18EE5DB8CEDE191EEE792E9E68DEDE994 F3EFA8BFBC862D2A0666654622220A040500716F39FAF6B4FAF3A8D5CB7AF0E492DBCE7CEBDF8F EAE292E5DF8EE6E394EBE696EFE897FBF0A0F1E290FFEC99F6E38DD6C56EEDDE88FEF09EECDF90 F9EDA2FCF5ADF8EEA6F9F1A8FAF4A7FAF5A4F7F4A0F3F29DF1EB9FF3EDA5ECE5A0EDE5A4F3EDAE F2ECAFF4F1B5948F55534E197F7B40D8D699E2E19EE7E89DEAE89BE3DF93EDE79BF8EFA4F3EBA2 EDE49EE9E2A0E6E1A2FFFABFB4B27C2B2801B7B47DE9E7AEDFDB9EEBE8A4FBF7AFF8F3A8F7EFA4 F5EC9EF3EA9DF8EFA0FCF29FFDF79AF2EE8EFFFEA6EEEA9CE8E4A3F1EEB9FBFAD2B3B1911A1A07 0201002B2C223A3C1F9F9F71F9F8C3ECEDABECEAA3E4DF99E6E0A2EFEBB7F8F1C4FFFFD4ADAA7E 2C2B0C747142DFDA9AFFFFC0EDE7A5EFEAA8F2EDA8E6E29BF4F0A7F5F1A7EAE79AF0ED9EF3F0A1 F4F2A6EFECA4F0EDA5F8F5AFF6F3ADE8E5A1E6E39FEAE7A5E7E3A3E7E3A4F1EDAEFAF8B8EFEAA9 F9F4B2FAF5B3F4EFACF2EDACF6F1ADF0EBA7F6F1ADF2EDA9F2EEA8F5F1ABEDF0B0E5F1BAEFF9C0 F2F4B9F4EDADFAECA8FFE8A2FFE49AFAC57BE9A95FF3BE74F8AE64E6873DCF651ECC7730DCA25D F0D38EF6EFAAFBF9B7FFFFB7EDE495E8C776E4AB58E1A550EBCD7AFAEA9FFFF2ACFDEA9EF8EA9B FFF7A7EFBA6EC69045FFE99CF6F4A6F0F3AFE5E8A6F3F7B4FFFFD3C7C6A31310023D3B15EFECB4 F0EDAEFAF5BAFAF3BCF0EAACEEE7A0E6C476DDA355FFEBA7F1E2AEFFFFE0A1A8903B3E31534D41 E2D4C0CFC3A72017102D290CC1B97FF6F9ACD9E895FEF4A7F3D691CF9654FFE79DEFDF8FE0DD8B E6DD8EFCEFA5F9ECA6FFFCC0FCF2B2F1D18BE6BB6AD39F4AD09B43F9CD79FFEB9CFEEDA5F7F4B2 F5FFC4FAF7B9F0CC8BE9AC6AD98A47B86620CE873EE5BD72FFE89BF7F1A2E0C676D9AE5CD39B48 CFA85DE6D08AFFF0AAFFF8B3FEF6AFFCECA8FEF1ACFEF5B0F6EFAAFCF7B3F9F5B1EEEBAFFFFEE0 9592820C0902FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6DD81E9E083F6ED8EF2E98AE4DC7BE5DD7BDCD374DFD677E9E083E8DF84E1D87C E4D97CE6DB7FEADF83E5DA7EE7DC80ECE185F1E68AF4E98DE9DE82E6DB7FE9DE82E8DA7DEDDE7E F6E787EEE080F1E484E3D676E7DD7CF2E88AF6EB8FE4DB80D9CF76E6DC84F1EA8FF3EB92FCF29C F1E590F7EA91FEF192E2DA72F7F086FEFB93FEF99DF9F7A2F4F2A0F2EC95F8F29AF1EB93EDE78F F2EC95F5EF98F3ED97F1EB95F7F19BF5EF99F1EB95FAF298D6D072BCB65CEFE992F9F29BFDEE97 EFDB7FEED579FDE687FFF095F6ED96F9F3A2F8F29EF9F29CF3EB95EFE791EFE792EAE28DEEE691 EFE792F1E993F1E993EFE792EDE58FE9E18EEAE28EF0E895EFE794EBE390EEE693E4DC8AF3EB99 F2EA99F0E898F0E898EFE793F3EC92EFE88EECE58EF7EF9CF3EB98F3EB9BF7EE9FF4EB9EF6EDA0 F3EA9DE9E092EAE397EAE69DF0EAA4F6EFAE766E32170D002118019F965FFCF4BDF2E9ACECE49F EFE89DF3F3A2F4EA99FCDE8CFCDA85B89039E2C972F7E894E8DD8CE6DB8CEDE291EBE48DE5E08A EBE89CE9E4A77672452D2A136C694D1816001F1F00D5D495F8F4ABEAE393E8DC8CE8DA89C7B766 EBDE90F1E898F3EC9CF4EFA1EBE599F0EA9BF2EA9BF9EE9EFFF2A2FEEF9BEEE084D6C86BF9F29C E5D889FAEDA3EFE39EF9EFA9FDF5AEFBF5A9F4EF9DF1ED96F3F19AFAF4A7FAF3ABEEE7A1F1E9A4 F9F4B2F4EFB0FDFBBFECE8ACD9D5993C3706C2C086EAE9A8E8E99FEAE89DE5E296E3DD91EDE59A F8F0A6F7EFA6EFE8A3DCD795F7F2B3FAF9BC8482501B1900CBC792E7E4AEDDD89EECE7A7FAF3AC F1EB9FF7F09FFBF3A2F3EA9AFAF29FF8F492F2EE8DFCF9A7EFEAA9FFFAC7F5F2C86B6846131104 0000006F6D4CE0E0BDD8D7B33834146F6B40FFFFD5F8F3BAF7F4B6E6E2A4F3EEB1F0ECB0E2DFA1 FFFFBEDADA9553511F3E3909B3AD71FFFFCBE7E2A7E3DE9FE8E5A2EEEBA3F4F2A6EBE999E8E694 E6E490DFDD8EDEDC90E2E096EBE99FF1EFA6F4F1ABF0EDAAECE9A7EDE9A9EFEBADF2EEB0FBF8BA F9F4B3FCF7B6F9F4B4F2EDADF1ECADF5F0AFFFFCBBFBF6B2EEEAA5F2EEA7FAF6ADF6F2B6F5EFC0 FAF3C4F3EFBBF1EBB2F6EFAEF8ECA7EEDC91FFE99DF9E89BDBAC5ED7A254F5A658F38D42DD7331 C66026B25821C07940E4B072FBD995FFEDA2FFF2A2FEDA87FCC06CD0A352CCA255E9B972FAD88E FFE698FFF5A8EAA55CD8964DFFE59AF2EA9EF0F3AEEEF4B2EDF9B3E6F0B6EFF7C5C0C596606130 8F9055E1E2A1F3F2B2F6F5B6F1F1ADF9F7ADEFD889D5A556F6D995F7ECB5DDE4B9263318091501 4B533921230EE5E6C5C9CEAA060C00545418E0E394E1E897F2E298F6CD89CA8A4DF6C27EFDE196 F8EA9AF2E393FFED9FF2D38BEEBF84E1B26FC9A353DBC163F6E98AFEF6A6FFFCB4FFF2B7FFE6B0 FFDBA4ECAE73C67C3DB36323C47933F1B167F9C577FFD385F8D286DAAF67D3AB63DDBB6FF0D885 FDEE96F9EA9FFCF1B0FFF8B6FFF5B2FCF1ADF6EEAAFAF4B0FDF7B3F2EEABFDFBBAF5F3B2EDEBAE F4F3C16F6D50211E04FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0E78CF1E88BEEE586ECE483EDE582F0E886E1D879E0D778E9E083E2D97E D4CB70E0D57AE0D579E8DD81E7DC80E6DB7FEAE084EDE286EDE286E6DB7FEADF83E8DD81E6DA7E EDDE82E5D678D3C566EDE080F0E383EBE080EBE180F1E789F4EB8FEFE58CEFE58EEAE38BEAE28B F8EE99F4E894F6EA91F7EA8BE5DC74F1EA7FF5F28BF9F596FAF8A1FBF9A4ECE68DF7F297F5F095 EFE991EFE991F1EB94FBF59FF5EF99F7F19BEDE791E7E18BF3EC91ECE687DBD47AF4EE97F7F098 FDEE96DFCA6EECD474FFEF8FFAE98DF4EA91F1EC99FDF7A4F8F09AEFE792F4EC97F9F19CEBE38E E7DF8AEBE38EEFE792F1E994EFE792EDE590E8E08DEAE28FF5ED9BF8F09EF2EA97EEE693EEE693 EEE695ECE493F2EA99F8F09FF6EE9AF6EF96ECE58CE9E28AF4EC96E9E18EE6DE8CF7EE9FF5EC9D EFE699F3EA9DF6EDA0F9F3A5FDF7A9E8E296E5DF97F0E8A7A49A62281D0814070075693DE7DDA9 F1E8ACF2EAA5F2F0A3EFE694F7E08CFFE088E4C76FC8A953FEE694E8D687E2D787EEE491F2E891 EDE794E6E49EADAB752825003F3B21332F15100E0058562CF3F0A9DAD786F5EF9DE5DA8AFFF5A5 EEE08DFFF4A2F2E798F2E99CF7F0A5F4EEA2ECE69AE5DD91FCFAADF7EC9DEFE493FCEF93EDE180 EEE086FFF3A0EFE197EFE29DFAF0ABFEF5AFFAF4A9EEE997EDEA93F8F69EEFE99CF1EAA2E6DF97 ECE59FF8F3AEF4EFADFCF7B7E3DFA2F5F1B4A7A16747450AF3F1B3F1F1A8E9E79DE9E59BDFD98E E1D98EEFE79DEEE69DF9F3ABE3DF99D0CD89E8E7A7FFFFD6787644343013DDD9AADEDAAAE4DFA5 F9F2ADEEE89AFAF5A4FFFBAAF0E797F7EF9EF7F297F1EE96F9F6B1FEF9C7EAE8C3757254090600 000000838254FFFECDFFFDC9EFEDBCE5E0BC4C46214E481EE2DFB0FFFBC5FDF8BDF6F3B1F1EEA6 EFEEA1EDEF9CF7F9A5FFFFBF948E590C06005C5629E3DEA8F2EDB4EDE9ABECEAA7F1EFA5F3F2A1 DEDD8AD7D781F1F09FF3F1A4EFEDA1E7E59BEBE9A0FAF7B1F7F4B1EAE6A6F1EDAEFCF8BBF3EEB3 F0ECB0FBF6B5F5F0AFF2EDADF7F0B3F9F3B5F9F3B5F3EDAFEEE9A7F1ECA8F0ECA6EEEAA1F5EAAC FFECC0FFEBBEFDEEBBF8F1B8F5F1B2F3F1AFFAF7B0F7EFA6FCF0A6FFFBB0F7DD91F3C377FDBB6E E79852F09152E47B40D1652CC96328CB7030D68542FBB26BFDCF85FDE296FFE698FDC077F1AC69 DCA45CD7A55AFBC87CEE9651F1A55FFFEDA3FAE49AEDE3A1EFEBACECEEAEE6E6AAF0EDB5F2EDB5 FFF8C1EEE2A7F2E6A9FFF7B8FDF1AFF3E7A0FBEDA3EFD184EDB76AFFECA6FFF8BEEBE9B7323A12 1C2602949E730A1000909871F7F9D639432D3D3E02E2DE91E9E396FCE399FDDA99D98C50B96E31 F0BF79FFE496E5CD7DD6B86AA77E33C5944EE5B66CFFDC8DFFFEAFFFF7ABFEEBA2F9E3A2E5BD83 CE9259C46F34D36A2EE27939F49C59FFCA82F6D082CFAC5EC5A559D0AA63D3A865FED996FFF7B0 F8E89CF5F6A4F9F8B2F2ECB0F4F0B1F3EFAFE6E4A0F6F3B0F5F2AFF1F0ADE4E2A1F5F4B4EDEBAF EAE8ACF4F4B44A4A27706F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEBE287EAE184F1E989EBE281EEE683F0E886E6DE7DE9E081EFE68A F5EC93E9DF85F0E78CE2D97EE8E084EEE58AE1D87DE8E084ECE388F3EA8FEEE58AE6DD82EBE287 EFE289F5E68CEFE086E8DB7CECDF7FF5E987EDE382EEE483E9DF81F2E98DECE289EDE38DF7F098 EEE590F4E997F7EB98ECDF88F0E384F4EB84EDE67BF3F088F2EE8DF7F49DF3F19BF3EE93F8F397 F8F397F5F095F7F297FAF59BF9F39BF5EF99F9F39DECE690E5DF8BF7F096FAF395F4ED92ECE78F EFE991FBEE96EEDD80CCB454FDE685FDEC8EF5EC93F3EE9BF9F39FF9F19CF9F19CF2EA95EDE590 F5ED97F3EB96F2EA95ECE48EF7EF9AEEE691F1E994F5ED9BEBE392F0E897F5ED9DF2EA98F1E995 F0E895EEE693F7EF9CF1E996F2EA97ECE590F3EB94F2EB94EBE48CEEE78EF1E994ECE490ECE492 F1E997F3EB9BF0E798EAE193F5ED9FF1EB9AF1EB9AE6E192E8E299FBF2B7C9BF8E4B3F1D0F0300 44381CD6CD97F5F2B1ECE79EECE593EDE18AF4DD83FFE187C09E49DABA69EDD789E0D383F2EB96 E9E087EEE693E5E4A44A471D201C041C17070F09001F1B05ABA969F3F2A2F4F19AE5DF8BF5EA9C F0E394F5E794EDE18FF1E797F2E99CE8E095F2EBA2ECE69DF1EBA1FAF1A8F1E99FF8EFA2FDF298 F6E98AEEE086E9DD8AFDF0A3F3E79FFCF2ACF2E9A2F8F2A7EDE897EFEC98F7F5A1EEE89BEFE99E EFE99FDED78FEBE69EF7F3AEF5F0AEF3EFB0F6F2B6FCF7BE8C8951737136F0EFAAE5E29CF6F2A9 F5EFA6F3EBA1E2DA8FEBE39AF5EFA7DFDB93CBC882CBCB87E8E8ADEBEBB8514E2A443F20DEDAAF F2EEBBEDE8A7EEEB9CF8F39FEFE994F2EA9BF3EA9EF2EC9BE7E29AFFFFCCD8D3B1595441050300 0E0D017F7F54FEFEC5F8F8B5F6F4ACEEE9A5FEF8C8FCF5CB817A503B3414B8B786FBF9BFFDFCBA ECEA9EECEB9CECEA99F1F09DFDFAB9FFFDCDD7D5A5635F3827230194925BE8E6ABE5E4A5E6E69F EDEEA0D9DB87E3E690E6E596EDEB9FF5F3A8E8E59CEAE79FE7E49FEFEBAAEBE7A7EBE7A8EAE5AA EDE8AFF8F4B8F7F2AFF1ECA8EDE8A7F0EAABF5EFB3F8F2B6F0EAAEEEE9AAFAF5B3F0EBA6F5F1A9 EADC9DFEE3AFFFEBB7FAEAB2F3EDB1F9FABBEFF4B4EBF3B2EFF3B1F5F4B4FAF5B4FDF4B3FEEEAB FFEDA7F6DD92E7C371EBB35FE99746EB8035E86E2AD6591BC8571DCB662FC76D34DA8945F0AB66 FFC282FFBC7AE59E57E5954DC35B17DD7633F8C47EEBC880F9DA9AFFF2BAFFF5C3FFE6B0F1D097 F6D49DF4D5A1E1B483E8C491E3B77DE0B474E1B772DDAF6ADAA056E29B52F2BA76FAD399F7D6A1 F4DFACC6BD886D6331342D15AAA678FBFBCEC4C699D3CB8DEFE8A2FCEDA6FFEDA9FFD99AE2884C BB5B20B56B28DEB065CBAC5FDFBA73ECD389FFF79FFFF5A7F7DCA0F0BC91E08B64D07646D27C3C E19045D58D3EE29449FFBE7BFABB74EEC272E6B368D7A560E7BD7CF2D797FAE8A7F3E5A0E9E19B F1E7A3F6EAA7F8E6A7F7F0B5F1F1B8E9EAAED7D999D4D594EAEAA8F3F3B2D4D594E3E3A3F0EEB4 EEECB3E9E7AEEEEDAC3B3A06B3B07AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE68CE7DE81E8DF7FDFD774E2DA75E7DF7ADDD573E2D87A EBE286F4EA91E9DF86F5EB92E7DD83E5DB82EAE086E6DC83F2E88EEEE58BF2E88FEAE087E4DA81 EAE087E9DC85F2E28CF4E48DF0E386F1E484EEE280F2E886F4EA89EDE385F2E98EEDE38BF1E792 F4EC97EEE591F5EA98F9EC9AF1E48EF4E788F8EF89F4ED82F7F48BF1ED8CF2EF97E8E68FF2ED90 F8F396FAF597F5F093F3EE93F4EF95FDF79FFBF59FFCF6A0FDF8A3F5EF9BFAF398FBF495EFE88D EDE88EF2EC92F9EB92F6E285CEB656F7E07EF7E588F7EE93F7F29DF7F19DF6EE9BF6EE9BF2EA97 ECE491F2EA97FAF29FF7EF9CEEE693F7EF9BF0E895F4EC98F6EE9DEDE495F2E999F7EF9EF4EC9B F2EA99F2EA97EFE792F7EF9AF3EB97F8F09BF5ED99F8F09CF6EE9BF1E994F3EB96F4ED95EEE78F E9E18CECE490ECE491EAE291E8E08FEDE498EAE296EEE795E9E38CEDE795F4EEA7F8EEB9D4C8A2 655A3B0F06004B4411918C50F9F0ABF3EE9DE9E58BE7DA7FFDE188D8B05DB18A3BF5D98CEEE290 F1EA93E7DE83E7DF8DB8BA7D1D1D0637341B110B04130D00474219E7E49FF1EF99E8E489E8E18C F9ECA4F2E79AF1E792F0E593F3EA9AF3EA9CE9E196EEE79EEAE19CF5ECA7FFF7B2F3EBA3F1EBA0 FBF09BFBEE92F5E78EECE08CFDF1A0FAEEA1F6EDA2ECE49AF2ECA2F1EB9FF8F3A6FBF8AAEDE79B F0EA9EEDE79CE0DA8EEDE99FF6F2AAFBF7B4F1EEAEF2EEB2FBF7BEFEFDC859571DBAB978F5F2AF E5E19BEFE8A1F6EEA6F2EAA0F7EFA5F8F2AAEEEAA2E1DE97CCCC86D5D596C0C188DAD9AB2E2A14 5C5831FCF9C8F1ECACEEEB9AF8F49BEFE993F2EA9BF3EBA2F3ECA4FCF7BCD0CAA2312C17030000 0A0900959671FCFDC8EDEFA7ECEB99F2EE9AFCFAA8FEF9AFF5F0ADFDFBBFABA5702623058B884E FAF9BAEDE9A8ECE9A6E9E4A3F2EAADFAF4BDF6F1C1F6F3C3F0ECBC928E64332F05565327BBB97F E8E7A6E2E198EEEFA0F9FAABF5F4A9F5F2AAF3F0A8E4E19BEEEBA7F7F3B2E7E3A3ECE8AAF6F2B5 F5F0B7EFEAB0F0ECADF1ECA7F2EEA6F4EFACF4EFB0F3EDB1F3EDB3FBF5BBFBF4BAFBF5B8E8E3A2 FBF6B2FAF3B0F7EEABFBF4B3F5F1B2EFF2B3F5FBBDEEF4B8EEF2B9F2F3BAF8F3BDFEF4BEFEF0BD FDF0BEFFFCC4FFFEBCFEFCABFFFA9AFFEA7EF7C860FFB75BF7994CE4763BD96335CE592ED3672B D56325DA692FCD6F2FED9853F39751DC6725EF7B3AF99C57DB9E5AD9A165B67A4CC88666BE764C B36734AE5C27B1582E9F401DAA4825AD4C1DB85C22BE6224B2581BB65515B24C0AB55217BE642F B16031B36E3CCB925ED4A76FE0BD85FAF0BFFFE9BEFFF1C7F1DEAAF7DEA0E2B778E3A968FCAE6C DF7737DF6E31D67B3AF6CC84FADB93FFD797FAC58FD19F6CC18052B36034C86537DF7840F5944F FAA852FFBB5DFFBB5EEA9E4FEE9C5AD99650E5C471FCE397FEE9A8FFEEB4FFEFB7F7EEB1E7E3A3 E4E3A2EFEAACF5EBB2F9E8B4F7F1BBF4F5BBF0F1B5E3E5A7DFE1A0F1F2B0F5F6B4DEDE9EEFEDB1 F8F6BEEFECBAE1DDACF6F6C647441F58552EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF end %%PageTrailer %%Trailer %%EOF gnuastro-0.5/lib/0000755000175000017500000000000013217220466010772 500000000000000gnuastro-0.5/lib/gnuastro.pc.in0000644000175000017500000000044412765554423013521 00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: Gnuastro Description: GNU Astronomy Utilities URL: https://www.gnu.org/software/gnuastro/ Version: @VERSION@ Requires.private: wcs cfitsio gsl Cflags: -I${includedir} Libs: -L${libdir} -lgnuastro @LIBS@ gnuastro-0.5/lib/wcs.c0000644000175000017500000006474513216276304011673 00000000000000/********************************************************************* Functions to that only use WCSLIB functionality. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /************************************************************* *********** Read WCS *********** *************************************************************/ /* Read the WCS information from the header. Unfortunately, WCS lib is not thread safe, so it needs a mutex. In case you are not using multiple threads, just pass a NULL pointer as the mutex. After you finish with this WCS, you should free the space with: status = wcsvfree(&nwcs,&wcs); If the WCS structure is not recognized, then this function will return a NULL pointer for the wcsprm structure and a zero for nwcs. It will also report the fact to the user in stderr. =================================== WARNING: wcspih IS NOT THREAD SAFE! =================================== Don't call this function within a thread or use a mutex. */ struct wcsprm * gal_wcs_read_fitsptr(fitsfile *fptr, size_t hstartwcs, size_t hendwcs, int *nwcs) { /* Declaratins: */ int nkeys=0, status=0; struct wcsprm *wcs=NULL; char *fullheader, *to, *from; int relax = WCSHDR_all; /* Macro: use all informal WCS extensions. */ int ctrl = 0; /* Don't report why a keyword wasn't used. */ int nreject = 0; /* Number of keywords rejected for syntax. */ /* CFITSIO function: */ if( fits_hdr2str(fptr, 1, NULL, 0, &fullheader, &nkeys, &status) ) gal_fits_io_error(status, NULL); /* Only consider the header keywords in the current range: */ if(hendwcs>hstartwcs) { /* Mark the last character in the desired region. */ fullheader[hendwcs*(FLEN_CARD-1)]='\0'; /*******************************************************/ /****************************************************** printf("%s\n", fullheader); ******************************************************/ /*******************************************************/ /* Shift all the characters to the start of the string. */ if(hstartwcs) /* hstartwcs!=0 */ { to=fullheader; from=&fullheader[hstartwcs*(FLEN_CARD-1)-1]; while(*from++!='\0') *to++=*from; } nkeys=hendwcs-hstartwcs; /*******************************************************/ /****************************************************** printf("\n\n\n###############\n\n\n\n\n\n"); printf("%s\n", &fullheader[1*(FLEN_CARD-1)]); exit(0); ******************************************************/ /*******************************************************/ } /* WCSlib function to parse the FITS headers. */ status=wcspih(fullheader, nkeys, relax, ctrl, &nreject, nwcs, &wcs); if(status) { fprintf(stderr, "\n##################\n" "WCSLIB Warning: wcspih ERROR %d: %s.\n" "##################\n", status, wcs_errmsg[status]); wcs=NULL; *nwcs=0; } if (fits_free_memory(fullheader, &status) ) gal_fits_io_error(status, "problem in fitsarrayvv.c for freeing " "the memory used to keep all the headers"); /* Set the internal structure: */ if(wcs) { /* CTYPE is a mandatory WCS keyword, so if it hasn't been given (its '\0'), then the headers didn't have a WCS structure. However, WCSLIB still fills in the basic information (for example the dimensionality of the dataset). */ if(wcs->ctype[0][0]=='\0') { wcsfree(wcs); wcs=NULL; *nwcs=0; } else { /* Set the WCS structure. */ status=wcsset(wcs); if(status) { fprintf(stderr, "\n##################\n" "WCSLIB Warning: wcsset ERROR %d: %s.\n" "##################\n", status, wcs_errmsg[status]); wcsfree(wcs); wcs=NULL; *nwcs=0; } else /* A correctly useful WCS is present. When no PC matrix elements were present in the header, the default PC matrix (a unity matrix) is used. In this case WCSLIB doesn't set `altlin' (and gives it a value of 0). In Gnuastro, later on, we might need to know the type of the matrix used, so in such a case, we will set `altlin' to 1. */ if(wcs->altlin==0) wcs->altlin=1; } } /* Return the WCS structure. */ return wcs; } struct wcsprm * gal_wcs_read(char *filename, char *hdu, size_t hstartwcs, size_t hendwcs, int *nwcs) { int status=0; fitsfile *fptr; struct wcsprm *wcs; /* Check HDU for realistic conditions: */ fptr=gal_fits_hdu_open_format(filename, hdu, 0); /* Read the WCS information: */ wcs=gal_wcs_read_fitsptr(fptr, hstartwcs, hendwcs, nwcs); /* Close the FITS file and return. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); return wcs; } /**************************************************************/ /********** Utilities ************/ /**************************************************************/ /* Copy a given WSC structure into another one. */ struct wcsprm * gal_wcs_copy(struct wcsprm *wcs) { struct wcsprm *out; /* If the input WCS is NULL, return a NULL WCS. */ if(wcs) { /* Allocate the output WCS structure. */ errno=0; out=malloc(sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `out'", __func__, sizeof *out); /* Initialize the allocated WCS structure. The WCSLIB manual says "On the first invokation, and only the first invokation, wcsprm::flag must be set to -1 to initialize memory management"*/ out->flag=-1; wcsini(1, wcs->naxis, out); /* Copy the input WCS to the output WSC structure. */ wcscopy(1, wcs, out); } else out=NULL; /* Return the final output. */ return out; } /* Using the block data structure of the tile, add a WCS structure for it. In many cases, tiles are created for internal processing, so there is no need to keep their WCS. Hence for preformance reasons, when creating the tiles they don't have any WCS structure. When needed, this function can be used to add a WCS structure to the tile by copying the WCS structure of its block and correcting its starting points. If the tile already has a WCS structure, this function won't do anything.*/ void gal_wcs_on_tile(gal_data_t *tile) { size_t i, start_ind, ndim=tile->ndim; gal_data_t *block=gal_tile_block(tile); size_t *coord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "coord"); /* If the tile already has a WCS structure, don't do anything. */ if(tile->wcs) return; else { /* Copy the block's WCS into the tile. */ tile->wcs=gal_wcs_copy(block->wcs); /* Find the coordinates of the tile's starting index. */ start_ind=gal_data_ptr_dist(block->array, tile->array, block->type); gal_dimension_index_to_coord(start_ind, ndim, block->dsize, coord); /* Correct the copied WCS structure. Note that crpix is indexed in the FITS/Fortran order while coord is ordered in C, it also starts counting from 1, not zero. */ for(i=0;iwcs->crpix[i] -= coord[ndim-1-i]; /* printf("start_ind: %zu\n", start_ind); printf("coord: %zu, %zu\n", coord[1]+1, coord[0]+1); printf("CRPIX: %f, %f\n", tile->wcs->crpix[0], tile->wcs->crpix[1]); */ } /* Clean up. */ free(coord); } /* Return the Warping matrix of the given WCS structure. This will be the final matrix irrespective of the type of storage in the WCS structure. Recall that the FITS standard has several methods to store the matrix, which is up to this function to account for and return the final matrix. The output is an allocated DxD matrix where `D' is the number of dimensions. */ double * gal_wcs_warp_matrix(struct wcsprm *wcs) { double *out; size_t i, j, size=wcs->naxis*wcs->naxis; /* Allocate the necessary array. */ errno=0; out=malloc(size*sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `out'", __func__, size*sizeof *out); /* Fill in the array. */ if(wcs->altlin & 0x1) /* Has a PCi_j array. */ { for(i=0;inaxis;++i) for(j=0;jnaxis;++j) out[i*wcs->naxis+j] = wcs->cdelt[i] * wcs->pc[i*wcs->naxis+j]; } else if(wcs->altlin & 0x2) /* Has CDi_j array. */ { for(i=0;icd[i]; } else error(EXIT_FAILURE, 0, "%s: currently only PCi_ja and CDi_ja keywords " "are recognized", __func__); /* Return the result */ return out; } /* According to the FITS standard, in the `PCi_j' WCS formalism, the matrix elements m_{ij} are encoded in the `PCi_j' keywords and the scale factors are encoded in the `CDELTi' keywords. There is also another formalism (the `CDi_j' formalism) which merges the two into one matrix. However, WCSLIB's internal operations are apparently done in the `PCi_j' formalism. So its outputs are also all in that format by default. When the input is a `CDi_j', WCSLIB will still read the image into the `PCi_j' formalism and the `CDELTi's are set to 1. This function will decompose the two matrices to give a reasonable `CDELTi' and `PCi_j' in such cases. */ void gal_wcs_decompose_pc_cdelt(struct wcsprm *wcs) { double *ps; size_t i, j; /* The correction is only needed when the PC matrix is filled. */ if(wcs->pc) { /* Get the pixel scale. */ ps=gal_wcs_pixel_scale(wcs); /* The PC matrix and the CDELT elements might both contain scale elements (during processing the scalings might be added only to PC elements for example). So to be safe, we first multiply them into one matrix. */ for(i=0;inaxis;++i) for(j=0;jnaxis;++j) wcs->pc[i*wcs->naxis+j] *= wcs->cdelt[i]; /* Set the CDELTs. */ for(i=0; inaxis; ++i) wcs->cdelt[i] = ps[i]; /* Correct the PCi_js */ for(i=0;inaxis;++i) for(j=0;jnaxis;++j) wcs->pc[i*wcs->naxis+j] /= ps[i]; /* Clean up. */ free(ps); /* According to the `wcslib/wcs.h' header: "In particular, wcsset() resets wcsprm::cdelt to unity if CDi_ja is present (and no PCi_ja).". So apparently, when the input is a `CDi_j', it might expect the `CDELTi' elements to be 1.0. But we have changed that here, so we will correct the `altlin' element of the WCS structure to make sure that WCSLIB only looks into the `PCi_j' and `CDELTi' and makes no assumptioins about `CDELTi'. */ wcs->altlin=1; } } /* The distance (along a great circle) on a sphere between two points is calculated here. Since the pixel sides are usually very small, we won't be using the direct formula: cos(distance)=sin(d1)*sin(d2)+cos(d1)*cos(d2)*cos(r1-r2) We will be using the haversine formula which better considering floating point errors (from Wikipedia:) sin^2(distance)/2=sin^2( (d1-d2)/2 )+cos(d1)*cos(d2)*sin^2( (r1-r2)/2 ) Inputs and outputs are all in degrees. */ double gal_wcs_angular_distance_deg(double r1, double d1, double r2, double d2) { /* Convert degrees to radians. */ double r1r=r1*M_PI/180, d1r=d1*M_PI/180; double r2r=r2*M_PI/180, d2r=d2*M_PI/180; /* To make things easier to read: */ double a=sin( (d1r-d2r)/2 ); double b=sin( (r1r-r2r)/2 ); /* Return the result: */ return 2*asin( sqrt( a*a + cos(d1r)*cos(d2r)*b*b) ) * 180/M_PI; } /* Return the pixel scale of the dataset in units of the WCS. */ double * gal_wcs_pixel_scale(struct wcsprm *wcs) { gsl_vector S; gsl_matrix A, V; int warning_printed; size_t i, j, maxj, n=wcs->naxis; double jvmax, *a, *out, maxrow, minrow; double *v=gal_data_malloc_array(GAL_TYPE_FLOAT64, n*n, __func__, "v"); size_t *permutation=gal_data_malloc_array(GAL_TYPE_SIZE_T, n, __func__, "permutation"); gal_data_t *pixscale=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &n, NULL, 0, -1, NULL, NULL, NULL); /* Write the full WCS rotation matrix into an array, irrespective of what style it was stored in the wcsprm structure (`PCi_j' style or `CDi_j' style). */ a=gal_wcs_warp_matrix(wcs); /* To avoid confusing issues with floating point errors being written in the non-diagonal elements of the FITS header PC or CD matrices, we need to check if the minimum and maximum values in each row are not several orders of magnitude apart. Note that in some cases (for example a spectrum), one axis might be in degrees (value around 1e-5) and the other in angestroms (value around 1e-10). So we can't look at the minimum and maximum of the whole matrix. However, in such cases, people will probably not warp/rotate the image to mix the coordinates. So the important thing to check is the minimum and maximum (non-zero) values in each row. */ warning_printed=0; for(i=0;imaxrow) maxrow=fabs(a[i*n+j]); } /* Do the check, print warning and make correction. */ if(maxrow!=minrow && maxrow/minrow>1e4 && warning_printed==0) { fprintf(stderr, "\nWARNING: The input WCS matrix (possibly taken " "from the FITS header keywords starting with `CD' or `PC') " "contains values with very different scales (more than " "10^4 different). This is probably due to floating point " "errors. These values might bias the pixel scale (and " "subsequent) calculations.\n\n" "You can see the respective matrix with one of the " "following two commands (depending on how the FITS file " "was written). Recall that if the desired extension/HDU " "isn't the default, you can choose it with the `--hdu' " "(or `-h') option before the `|' sign in these commands." "\n\n" " $ astfits file.fits -p | grep 'PC._.'\n" " $ astfits file.fits -p | grep 'CD._.'\n\n" "You can delete the ones with obvious floating point " "error values using the following command (assuming you " "want to delete `CD1_2' and `CD2_1'). Afterwards, you can " "rerun your original command to remove this warning " "message and possibly correct errors that it might have " "caused.\n\n" " $ astfits file.fits --delete=CD1_2 --delete=CD2_1\n\n" ); warning_printed=1; } } /* Fill in the necessary GSL vector and Matrix structures. */ S.size=n; S.stride=1; S.data=pixscale->array; V.size1=n; V.size2=n; V.tda=n; V.data=v; A.size1=n; A.size2=n; A.tda=n; A.data=a; /* Run GSL's Singular Value Decomposition, using one-sided Jacobi orthogonalization which computes the singular (scale) values to a higher relative accuracy. */ gsl_linalg_SV_decomp_jacobi(&A, &V, &S); /* The raw pixel scale array produced from the singular value decomposition above is ordered based on values, not the input. So when the pixel scales in all the dimensions aren't the same (the units of the dimensions differ), the order of the values in `pixelscale' will not necessarily correspond to the input's dimensions. To correct the order, we can use the `V' matrix to find the original position of the pixel scale values and then use permutation to re-order it correspondingly. The column with the largest (absolute) value will be taken as the one to be used for each row. */ for(i=0;ijvmax) { maxj=j; jvmax=fabs(v[i*n+j]); } /* Use the column with the maximum value for this dimension. */ permutation[i]=maxj; } /* Apply the permutation described above. */ gal_permutation_apply(pixscale, permutation); /* Clean up and return. */ free(a); free(v); free(permutation); out=pixscale->array; pixscale->array=NULL; gal_data_free(pixscale); return out; } /* Report the arcsec^2 area of the pixels in the image based on the WCS information in that image. */ double gal_wcs_pixel_area_arcsec2(struct wcsprm *wcs) { double out; double *pixscale; /* A small sanity check. Later, when higher dimensions are necessary, we can find which ones correlate to RA and Dec and use them to find the pixel area in arcsec^2. */ if(wcs->naxis!=2) return NAN; /* Check if the units of the axis are degrees or not. Currently all FITS images I have worked with use `deg' for degrees. If other alternatives exist, we can add corrections later. */ if( strcmp("deg", wcs->cunit[0]) || strcmp("deg", wcs->cunit[1]) ) return NAN; /* Get the pixel scales along each axis in degrees, then multiply. */ pixscale=gal_wcs_pixel_scale(wcs); /* Clean up and return the result. */ out = pixscale[0] * pixscale[1] * 3600.0f * 3600.0f; free(pixscale); return out; } /**************************************************************/ /********** Array conversion ************/ /**************************************************************/ /* Some sanity checks for the WCS conversion functions. */ static void wcs_convert_sanity_check_alloc(gal_data_t *coords, struct wcsprm *wcs, const char *func, int **stat, double **phi, double **theta, double **world, double **pixcrd, double **imgcrd) { gal_data_t *tmp; size_t ndim=0, firstsize=0, size=coords->size; for(tmp=coords; tmp!=NULL; tmp=tmp->next) { /* Count how many coordinates are given. */ ++ndim; /* Check the type of the input. */ if(tmp->type!=GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "%s: input coordinates must have `float64' " "type", func); /* Make sure it has a single dimension. */ if(tmp->ndim!=1) error(EXIT_FAILURE, 0, "%s: input coordinates for each dimension " "must each be one dimensional. Coordinate dataset %zu of the " "inputs has %zu dimensions", func, ndim, tmp->ndim); /* See if all inputs have the same size. */ if(ndim==1) firstsize=tmp->size; else if(firstsize!=tmp->size) error(EXIT_FAILURE, 0, "%s: all input coordinates must have the " "same number of elements. Coordinate dataset %zu has %zu " "elements while the first coordinate has %zu", func, ndim, tmp->size, firstsize); } /* See if the number of coordinates given corresponds to the dimensions of the WCS structure. */ if(ndim!=wcs->naxis) error(EXIT_FAILURE, 0, "%s: the number of input coordinates (%zu) does " "not match the dimensions of the input WCS structure (%d)", func, ndim, wcs->naxis); /* Allocate all the necessary arrays. */ *phi = gal_data_malloc_array( GAL_TYPE_FLOAT64, size, __func__, "phi"); *stat = gal_data_calloc_array( GAL_TYPE_INT32, size, __func__, "stat"); *theta = gal_data_malloc_array( GAL_TYPE_FLOAT64, size, __func__, "theta"); *world = gal_data_malloc_array( GAL_TYPE_FLOAT64, ndim*size, __func__, "world"); *imgcrd = gal_data_malloc_array( GAL_TYPE_FLOAT64, ndim*size, __func__, "imgcrd"); *pixcrd = gal_data_malloc_array( GAL_TYPE_FLOAT64, ndim*size, __func__, "pixcrd"); } /* In Gnuastro, each column (coordinate for WCS conversion) is treated as a separate array in a `gal_data_t' that are linked through a linked list. But in WCSLIB, the input is a single array (with multiple columns). This function will convert between the two. */ static void wcs_convert_list_to_array(gal_data_t *list, double *array, int *stat, size_t ndim, int listtoarray) { size_t i, d=0; gal_data_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) { /* Put all this coordinate's values into the single array that is input into or output from WCSLIB. */ for(i=0;isize;++i) { if(listtoarray) array[i*ndim+d] = ((double *)(tmp->array))[i]; else ((double *)(tmp->array))[i] = stat[i] ? NAN : array[i*ndim+d]; } /* Increment the dimension. */ ++d; } } /* Prepare the output of the WCS conversion functions. */ static gal_data_t * wcs_convert_prepare_out(gal_data_t *coords, struct wcsprm *wcs, int inplace) { size_t i; gal_data_t *out=NULL; if(inplace) out=coords; else for(i=0;inaxis;++i) gal_list_data_add_alloc(&out, NULL, GAL_TYPE_FLOAT64, 1, &coords->size, NULL, 0, coords->minmapsize, wcs->ctype[i], wcs->cunit[i], NULL); return out; } /* Convert world coordinates to image coordinates given the input WCS structure. The input must be a linked list of data structures of float64 (`double') type. The top element of the linked list must be the first coordinate and etc. If `inplace' is non-zero, then the output will be written into the input's allocated space. */ gal_data_t * gal_wcs_world_to_img(gal_data_t *coords, struct wcsprm *wcs, int inplace) { gal_data_t *out; int status, *stat=NULL, ncoord=coords->size, nelem=wcs->naxis; double *phi=NULL, *theta=NULL, *world=NULL, *pixcrd=NULL, *imgcrd=NULL; /* Some sanity checks. */ wcs_convert_sanity_check_alloc(coords, wcs, __func__, &stat, &phi, &theta, &world, &pixcrd, &imgcrd); /* Write the values from the input list of separate columns into a single array (WCSLIB input). */ wcs_convert_list_to_array(coords, world, stat, wcs->naxis, 1); /* Use WCSLIB's wcsp2s for the conversion. */ status=wcss2p(wcs, ncoord, nelem, world, phi, theta, imgcrd, pixcrd, stat); if(status) error(EXIT_FAILURE, 0, "%s: wcss2p ERROR %d: %s", __func__, status, wcs_errmsg[status]); /* For a sanity check. { size_t i; printf("\n\n%s sanity check:\n", __func__); for(i=0;isize;++i) printf("(%g, %g) --> (%g, %g), [stat: %d]\n", world[i*2], world[i*2+1], pixcrd[i*2], pixcrd[i*2+1], stat[i]); } */ /* Allocate the output arrays if they were not already allocated. */ out=wcs_convert_prepare_out(coords, wcs, inplace); /* Write the output from a single array (WCSLIB output) into the output list of this function. */ wcs_convert_list_to_array(out, pixcrd, stat, wcs->naxis, 0); /* Clean up. */ free(phi); free(stat); free(theta); free(world); free(pixcrd); /* Return the output list of coordinates. */ return out; } /* Similar to `gal_wcs_world_to_img'. */ gal_data_t * gal_wcs_img_to_world(gal_data_t *coords, struct wcsprm *wcs, int inplace) { gal_data_t *out; int status, *stat=NULL, ncoord=coords->size, nelem=wcs->naxis; double *phi=NULL, *theta=NULL, *world=NULL, *pixcrd=NULL, *imgcrd=NULL; /* Some sanity checks. */ wcs_convert_sanity_check_alloc(coords, wcs, __func__, &stat, &phi, &theta, &world, &pixcrd, &imgcrd); /* Write the values from the input list of separate columns into a single array (WCSLIB input). */ wcs_convert_list_to_array(coords, pixcrd, stat, wcs->naxis, 1); /* Use WCSLIB's wcsp2s for the conversion. */ status=wcsp2s(wcs, ncoord, nelem, pixcrd, imgcrd, phi, theta, world, stat); if(status) error(EXIT_FAILURE, 0, "%s: wcsp2s ERROR %d: %s", __func__, status, wcs_errmsg[status]); /* For a sanity check. { size_t i; printf("\n\n%s sanity check:\n", __func__); for(i=0;isize;++i) printf("(%g, %g) --> (%g, %g), [stat: %d]\n", pixcrd[i*2], pixcrd[i*2+1], world[i*2], world[i*2+1], stat[i]); } */ /* Allocate the output arrays if they were not already allocated. */ out=wcs_convert_prepare_out(coords, wcs, inplace); /* Write the output from a single array (WCSLIB output) into the output list of this function. */ wcs_convert_list_to_array(out, world, stat, wcs->naxis, 0); /* Clean up. */ free(phi); free(stat); free(theta); free(world); free(pixcrd); /* Return the output list of coordinates. */ return out; } gnuastro-0.5/lib/type.c0000644000175000017500000004632413121462410012037 00000000000000/********************************************************************* Type -- Type information and basic operations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include /************************************************************* ************** General info *************** *************************************************************/ size_t gal_type_sizeof(uint8_t type) { /* Allocate space for the array to keep the image. */ switch(type) { case GAL_TYPE_BIT: error(EXIT_FAILURE, 0, "%s: bit types are not currently supported, " "please get in touch with us to implement it", __func__); /* The parenthesis after sizeof is not a function, it is actually a type cast, so we have put a space between size of and the parenthesis to highlight this. In C, `sizeof' is an operator, not a function.*/ case GAL_TYPE_UINT8: return sizeof (uint8_t); case GAL_TYPE_INT8: return sizeof (int8_t); case GAL_TYPE_UINT16: return sizeof (uint16_t); case GAL_TYPE_INT16: return sizeof (int16_t); case GAL_TYPE_UINT32: return sizeof (uint32_t); case GAL_TYPE_INT32: return sizeof (int32_t); case GAL_TYPE_UINT64: return sizeof (uint64_t); case GAL_TYPE_INT64: return sizeof (int64_t); case GAL_TYPE_FLOAT32: if( sizeof (float) != 4 ) error(EXIT_FAILURE, 0, "%s: `float' is not 32 bits on this machine", __func__); return sizeof (float); case GAL_TYPE_FLOAT64: if( sizeof (double) != 8 ) error(EXIT_FAILURE, 0, "%s: `double' is not 64 bits on this machine", __func__); return sizeof (double); case GAL_TYPE_COMPLEX32: if( sizeof (float) != 4 ) error(EXIT_FAILURE, 0, "%s: `float' is not 32 bits on this machine", __func__); return sizeof (gsl_complex_float); case GAL_TYPE_COMPLEX64: if( sizeof (double) != 8 ) error(EXIT_FAILURE, 0, "%s: `double` is not 64 bits on this machine", __func__); return sizeof (gsl_complex); case GAL_TYPE_STRING: return sizeof (char *); default: error(EXIT_FAILURE, 0, "%s: type value of %d not recognized", __func__, type); } error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can find " "the cause of the problem. Control should not have reached the end of " "this function", __func__, PACKAGE_BUGREPORT); return -1; } char * gal_type_name(uint8_t type, int long_name) { switch(type) { case GAL_TYPE_BIT: if(long_name) return "bit"; else return "b"; case GAL_TYPE_UINT8: if(long_name) return "uint8"; else return "u8"; case GAL_TYPE_INT8: if(long_name) return "int8"; else return "i8"; case GAL_TYPE_UINT16: if(long_name) return "uint16"; else return "u16"; case GAL_TYPE_INT16: if(long_name) return "int16"; else return "i16"; case GAL_TYPE_UINT32: if(long_name) return "uint32"; else return "u32"; case GAL_TYPE_INT32: if(long_name) return "int32"; else return "i32"; case GAL_TYPE_UINT64: if(long_name) return "uint64"; else return "u64"; case GAL_TYPE_INT64: if(long_name) return "int64"; else return "i64"; case GAL_TYPE_FLOAT32: if(long_name) return "float32"; else return "f32"; case GAL_TYPE_FLOAT64: if(long_name) return "float64"; else return "f64"; case GAL_TYPE_COMPLEX32: if(long_name) return "complex32"; else return "c32"; case GAL_TYPE_COMPLEX64: if(long_name) return "complex64"; else return "c64"; case GAL_TYPE_STRING: if(long_name) return "string"; else return "str"; case GAL_TYPE_STRLL: if(long_name) return "string linked list"; else return "strll"; default: error(EXIT_FAILURE, 0, "%s: type value of %d not recognized", __func__, type); } /* Any of the cases above should return this function, so if control reaches here, there is a bug. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "address the problem. Control should not have reached the end of " "this function", __func__, PACKAGE_BUGREPORT); return NULL; } uint8_t gal_type_from_name(char *str) { if( !strcmp(str, "b") || !strcmp(str, "bit") ) return GAL_TYPE_BIT; else if( !strcmp(str, "u8") || !strcmp(str, "uint8") ) return GAL_TYPE_UINT8; else if( !strcmp(str, "i8") || !strcmp(str, "int8") ) return GAL_TYPE_INT8; else if( !strcmp(str, "u16") || !strcmp(str, "uint16") ) return GAL_TYPE_UINT16; else if( !strcmp(str, "i16") || !strcmp(str, "int16") ) return GAL_TYPE_INT16; else if( !strcmp(str, "u32") || !strcmp(str, "uint32") ) return GAL_TYPE_UINT32; else if( !strcmp(str, "i32") || !strcmp(str, "int32") ) return GAL_TYPE_INT32; else if( !strcmp(str, "u64") || !strcmp(str, "uint64") ) return GAL_TYPE_UINT64; else if( !strcmp(str, "i64") || !strcmp(str, "int64") ) return GAL_TYPE_INT64; else if( !strcmp(str, "f32") || !strcmp(str, "float32") ) return GAL_TYPE_FLOAT32; else if( !strcmp(str, "f64") || !strcmp(str, "float64") ) return GAL_TYPE_FLOAT64; else if( !strcmp(str, "c32") || !strcmp(str, "complex32") ) return GAL_TYPE_COMPLEX32; else if( !strcmp(str, "c64") || !strcmp(str, "complex64") ) return GAL_TYPE_COMPLEX64; else if( !strcmp(str, "str") || !strcmp(str, "string") ) return GAL_TYPE_STRING; else return GAL_TYPE_INVALID; /* Any of the cases above should return this function, so if control reaches here, there is a bug. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "address the problem. Control must not have reached the end of this " "function", __func__, PACKAGE_BUGREPORT); return 0; } /* Put the minimum (or maximum for the `gal_data_type_max') value for the type in the space (that must already be allocated before the call to this function) pointed to by in. */ void gal_type_min(uint8_t type, void *in) { switch(type) { case GAL_TYPE_UINT8: *(uint8_t *) in = 0; break; case GAL_TYPE_INT8: *(int8_t *) in = INT8_MIN; break; case GAL_TYPE_UINT16: *(uint16_t *) in = 0; break; case GAL_TYPE_INT16: *(int16_t *) in = INT16_MIN; break; case GAL_TYPE_UINT32: *(uint32_t *) in = 0; break; case GAL_TYPE_INT32: *(int32_t *) in = INT32_MIN; break; case GAL_TYPE_UINT64: *(uint64_t *) in = 0; break; case GAL_TYPE_INT64: *(int64_t *) in = INT64_MIN; break; case GAL_TYPE_FLOAT32: *(float *) in = -FLT_MAX; break; case GAL_TYPE_FLOAT64: *(double *) in = -DBL_MAX; break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } } void gal_type_max(uint8_t type, void *in) { switch(type) { case GAL_TYPE_UINT8: *(uint8_t *) in = UINT8_MAX; break; case GAL_TYPE_INT8: *(int8_t *) in = INT8_MAX; break; case GAL_TYPE_UINT16: *(uint16_t *) in = UINT16_MAX; break; case GAL_TYPE_INT16: *(int16_t *) in = INT16_MAX; break; case GAL_TYPE_UINT32: *(uint32_t *) in = UINT32_MAX; break; case GAL_TYPE_INT32: *(int32_t *) in = INT32_MAX; break; case GAL_TYPE_UINT64: *(uint64_t *) in = UINT64_MAX; break; case GAL_TYPE_INT64: *(int64_t *) in = INT64_MAX; break; case GAL_TYPE_FLOAT32: *(float *) in = FLT_MAX; break; case GAL_TYPE_FLOAT64: *(double *) in = DBL_MAX; break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } } /* Since linked lists need a different process than arrays, for functions that work on both, it is convenient to simiplify the check with this function. */ int gal_type_is_list(uint8_t type) { return type==GAL_TYPE_STRLL; } int gal_type_out(int first_type, int second_type) { return first_type > second_type ? first_type : second_type; } /************************************************************* ************** To/from string *************** *************************************************************/ /* Write the bit (0 or 1) contents of `in' into a string ready for printing. `size' is used to determine the number of bytes to print. The output string will be dynamically allocated within this function. This can be useful for easy checking of bit flag values, for example in an expression like below: printf("flag: %s\n", gal_type_bit_string(&flag, sizeof flag) ); */ char * gal_type_bit_string(void *in, size_t size) { size_t i; char *byte=in; char *str=gal_data_malloc_array(GAL_TYPE_UINT8, 8*size+1, __func__, "str"); /* Print the bits into the allocated string. This was inspired from http://stackoverflow.com/questions/111928/is-there-a-printf-converter-to-print-in-binary-format */ for(i=0;iINT8_MIN) { i8=d; ptr=&i8; *type=GAL_TYPE_INT8; } else if(d>INT16_MIN) { i16=d; ptr=&i16; *type=GAL_TYPE_INT16; } else if(d>INT32_MIN) { i32=d; ptr=&i32; *type=GAL_TYPE_INT32; } else { i64=d; ptr=&i64; *type=GAL_TYPE_INT64; } } else { if (d<=UINT8_MAX) { u8=d; ptr=&u8; *type=GAL_TYPE_UINT8; } else if(d<=UINT16_MAX) { u16=d; ptr=&u16; *type=GAL_TYPE_UINT16; } else if(d<=UINT32_MAX) { u32=d; ptr=&u32; *type=GAL_TYPE_UINT32; } else { u64=d; ptr=&u64; *type=GAL_TYPE_UINT64; } } } else { /* The maximum number of decimal digits to store in float or double precision floating point are: float: 23 mantissa bits + 1 hidden bit: log(224)÷log(10) = 7.22 double: 52 mantissa bits + 1 hidden bit: log(253)÷log(10) = 15.95 FLT_DIG (at least 6 in ISO C) keeps the number of digits (not zero before or after) that can be represented by a single precision floating point number. If there are more digits, then we should store the value as a double precision. Note that the number can have non-digit characters that we don't want, like: `.', `e', `E', `,'. */ for(cp=string;*cp!='\0';++cp) if(isdigit(*cp) && *cp!='0' && fnz==-1) fnz=cp-string; /* In the previous loop, we went to the end of the string, so `cp' now points to its `\0'. We just have to iterate backwards! */ for(;cp!=string;--cp) if(isdigit(*cp) && *cp!='0') { lnz=cp-string; break; } /* Calculate the number of decimal digits and decide if it the number should be a float or a double. */ if( lnz-fnz < FLT_DIG || ( dFLT_MIN ) ) { f=d; ptr=&f; *type=GAL_TYPE_FLOAT32; } else { ptr=&d; *type=GAL_TYPE_FLOAT64; } } /* Allocate a one-element dataset, then copy the number into it. */ out=gal_data_malloc_array(*type, 1, __func__, "out"); memcpy(out, ptr, gal_type_sizeof(*type)); return out; } gnuastro-0.5/lib/txt.c0000644000175000017500000012470213211076737011707 00000000000000/********************************************************************* txt -- functions to deal with plain text files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include /************************************************************************/ /*************** Get table information ***************/ /************************************************************************/ /* Format of table. Currently these constants are internal to this library, we don't want to crowd the name space of the user by having them in the header file. */ enum txt_formats_code { TXT_FORMAT_INVALID, TXT_FORMAT_TABLE, TXT_FORMAT_IMAGE, }; /* Return one of the `txt_line_stat' constant values. */ int gal_txt_line_stat(char *line) { while(*line!='\n') { switch(*line) { /* Characters to ignore. */ case ' ': case ',': case '\t': break; case '#': return GAL_TXT_LINESTAT_COMMENT; default: return GAL_TXT_LINESTAT_DATAROW; } ++line; } return GAL_TXT_LINESTAT_BLANK; } /* Remove the spaces around the values, and if the final/trimmed string has no length, return NULL. */ static char * txt_trim_space(char *str) { char *end; /* If str doesn't point to anything, just return the NULL pointer. */ if(str==NULL) return NULL; /* Remove the spaces before the start of the string. */ while(isspace(*str)) ++str; /* If there was nothing in the string, then just return the ending `\0' character. */ if(*str=='\0') return NULL; /* Remove the spaces at the end, and write a possibly new `\0'. */ end = str + strlen(str) - 1; while(end>str && isspace(*end)) --end; *(end+1)='\0'; /* Return the string. */ return *str=='\0' ? NULL : str; } /* Each information comment should have a format like this (replace `Column' with `Image' for 2D arrays): # Column N: NAME [UNITS, TYPE, BLANK] COMMENT TYPE has pre-defined values, and N must be an integer, but the rest can contain any characters (including whitespace characters). The UNITS, TYPE, BLANK tokens are optional, if not given, default values will be set. But if there are comments, then the brackets themselves are required to separate the name from the comments. Any white space characters before or after the delimiters (`:', `[', `]', `,') is ignored, but spaces within the values are kept. For example, in the two following lines, NAME will be set to `col name' (even though there are extra spaces in the second line, The column unit will be set to `col unit'. # Column 2: col name # Column 2 : col name [ col unit, type ] Column comments. When the column type is a string, the number of characters in the string is also necessary, for example `str10'. Without an integer attached, the line will be ignored. In the case of an error or mis-match, the line will be ignored. This function will make a linked list of information about each column that has information in the comments. The information on each column doesn't have to be in order, for example the information of column 10 can be before column 7. */ static void txt_info_from_comment(char *line, gal_data_t **datall, char *comm_start) { char *tailptr; gal_data_t *tmp; int index, strw=0; size_t len=strlen(comm_start); int type=GAL_TYPE_FLOAT64; /* Default type. */ char *number=NULL, *name=NULL, *comment=NULL; char *inbrackets=NULL, *unit=NULL, *typestr=NULL, *blank=NULL; /* Only read this comment line if it follows the convention: */ if( !strncmp(line, comm_start, len) ) { /* Set `name', `inbrackets', and `comment' in the first pass through the line. */ number=line+len; while(*line!='\0') { switch(*line) { case ':': if(name==NULL) { *line='\0'; name=line+1; } break; case '[': if(name && inbrackets==NULL) { *line='\0'; inbrackets=line+1; } break; case ']': if(inbrackets && comment==NULL) { *line='\0'; comment=line+1; } break; case '\n': *line='\0'; break; } ++line; } /* Read the column number as an integer. If it can't be read as an integer, or is zero or negative then just return without adding anything to this line. */ index=strtol(number, &tailptr, 0); if(*tailptr!='\0' || index<=0) return; /* If there was no name (the line is just `# Column N:'), then ignore the line. Relying on the column count from the first line is more robust and less prone to human error, for example typing a number larger than the total number of columns. */ name=txt_trim_space(name); if(name==NULL) return; /* If this is a repeated index, ignore it. */ for(tmp=*datall; tmp!=NULL; tmp=tmp->next) if(tmp->status==index) return; /* If there were brackets, then break it up. */ if(inbrackets) { unit=inbrackets; while(*inbrackets!='\0') { if(*inbrackets==',') { *inbrackets='\0'; if (typestr==NULL) typestr = inbrackets+1; else if(blank==NULL) blank = inbrackets+1; } ++inbrackets; } } /* If `typestr' was given, then check if this is a standard type. If `typestr' wasn't specified, then the default double type code will be used (see the variable definitions above). If the given type isn't a standard type then ignore the line. Just note that if we are dealing with the string type, we have to pull out the number part first. If there is no number for a string type, then ignore the line. */ if(typestr && *typestr!='\0') { typestr=txt_trim_space(typestr); if( !strncmp(typestr, "str", 3) ) { type=GAL_TYPE_STRING; strw=strtol(typestr+3, &tailptr, 0); if(*tailptr!='\0' || strw<0) return; } else { type=gal_type_from_name(typestr); if(type==GAL_TYPE_INVALID) return; } } /* Add this column's information into the columns linked list. We will define the data structur's array to have zero dimensions (no array) by default. If there is a blank value its value will be put into the array by `gal_table_read_blank'. To keep the name, unit, and comment strings, trim the white space before and after each before using them here. */ gal_list_data_add_alloc(datall, NULL, type, 0, NULL, NULL, 0, -1, name, txt_trim_space(unit), txt_trim_space(comment) ); /* Put the number of this column into the status variable of the data structure. If the type is string, then also copy the width into the structure. */ (*datall)->status=index; (*datall)->disp_width = type==GAL_TYPE_STRING ? strw : 0; /* Write the blank value into the array. Note that this is not the final column, we are just collecting information now. */ gal_tableintern_read_blank(*datall, txt_trim_space(blank)); } } /* In the case of a table, the input might not have had information in its comments, or the information might not have been complete. So we need to go through the first row of data also. In the case of the image, this is necessary, because we need to find the second dimension value. This function will return the number of tokens in the first row of the given text file. If the file is a text table with string columns, the contents of the string column will be counted as one token.*/ static size_t txt_info_from_first_row(char *line, gal_data_t **datall, int format) { gal_data_t *col, *prev, *tmp; size_t n=0, maxcnum=0, numtokens; char *token, *end=line+strlen(line); /* Remove the line termination character(s) from the end of the line. In Unix, the line terminator is just the new-line character, however, in some operating systems (like MS Windows), it is two characters: carriage return and new-line. To be able to deal with both, we will be checking the second last character first, the ASCII code for carriage return is 13. If the last column is a string, and the given length is larger than the available space on the line, we don't want to have the line's new-line character. Its better for it to actually be shorter than the space. */ if( *(end-2)==13 ) *(end-2)='\0'; else *(end-1)='\0'; /* Get the maximum number of columns read from the comment information. */ for(col=*datall; col!=NULL; col=col->next) maxcnum = maxcnum>col->status ? maxcnum : col->status; /* Go over the line check/fill the column information. */ while(++n) { /* When we are dealing with a text table, check if there is information for this column. For a text image, only the number of tokens is important (as the second dimension of the image), so just assume there no information. */ if(format==TXT_FORMAT_TABLE) for(col=*datall; col!=NULL; col=col->next) {if(col->status==n) break;} else col=NULL; /* If there is information for this column, then check if it is a string, and if so, don't use `strtok_r' (because it might have delimiters). So manually go ahead in the line till you get to the start of the string, then increment the line until the end of the space set for the strings. */ if(col) { if( col->type==GAL_TYPE_STRING ) { /* Remove all delimiters before the string starts. */ while(isspace(*line) || *line==',') ++line; /* Increment line to the end of the string. */ line = (token=line) + col->disp_width; /* If we haven't reached the end of the line, then set a NULL character where the string ends, so we can use the token. VERY IMPORTANT: this should not be `<=end'. If the given width is larger than line, there is no problem, the `\0' of the line will also be used to end this last column.*/ if(linestatus=n; } } } /* When looking at a text table, `n' is the number of columns (elements in the linked list). But when looking at an image, it is the size of the second dimension. To unify things from this step forwards, we will thus keep the value of `n' until this point in another variable (that will be returned finally), and for an image, change `n' to 1. This is necsesary in case the user has for example given two column information comments on an image plain text file. Note that `n' counts from 1, so the total number of tokens is one less than `n'.*/ numtokens=n-1; if(format==TXT_FORMAT_IMAGE) n=1; /* If the number of columns/images given by the comments is larger than the actual number of lines, remove those that have larger numbers from the linked list before things get complicated outside of this function. */ if(maxcnum>n) { prev=NULL; col=*datall; while(col!=NULL) { if(col->status > n) /* Column has no data (was only in comments) */ { /* This column has to be removed/freed. But we have to make some corrections before freeing it: - When `prev==NULL', then we still haven't got to the first valid element yet and must free this one, but if we do that, then the main pointer to the start of the list will be lost (we will loose all connections with the chain after leaving this loop). So we need to set that to the next element. - When there actually was a previous element (`prev!=NULL'), then we must correct it's next pointer. Otherwise we will break up the chain.*/ if(prev) prev->next=col->next; else *datall=col->next; tmp=col->next; gal_data_free(col); col=tmp; } else /* Column has data. */ { prev=col; col=col->next; } } } /* Return the total number of columns/second-img-dimension. */ return numtokens; } /* In the steps above, we read/set the information for each column. But to enforce minimum standard requirements on the user, things were allowed to be read very loosely, for example some columns can be not defined (and will thus be read as a double type), or they don't necessarily have to be given in the same order as the table (in which case, the first non-commented line provides basic information like how many columns there are). So we just pushed each new read/set column into a linked list. With this function, we convert that badly orderd linked list into a clean and ordered array for much more easier random access during the selection/reading of the data in the columns. After this function, the list is freed. */ static gal_data_t * txt_infoll_to_array(gal_data_t *datall, size_t *numdata) { size_t numc=0, ind; gal_data_t *data, *dataarr; /* First find the total number of columns. */ for(data=datall; data!=NULL; data=data->next) ++numc; /* Conversion to an arry is only necessary when there is more than one element in the list. */ if(numc>1) { /* Now, allocate the array and put in the values. */ dataarr=gal_data_array_calloc(numc); /* Put each dataset/column into its proper place in the array. */ while(datall!=NULL) { /* Pop the top element. */ data=gal_list_data_pop(&datall); /* The `status' value is the number of the column (counting from 1, not 0). */ ind=data->status-1; /* Put all the information from `data' into the respective part of the array. About the pointers, instead of having to allocate them again, we will just set them to NULL so `gal_data_free' doesn't remove them.*/ dataarr[ind].name = data->name; data->name=NULL; dataarr[ind].unit = data->unit; data->unit=NULL; dataarr[ind].array = data->array; data->array=NULL; dataarr[ind].dsize = data->dsize; data->dsize=NULL; dataarr[ind].comment = data->comment; data->comment=NULL; dataarr[ind].type = data->type; dataarr[ind].ndim = data->ndim; dataarr[ind].size = data->size; dataarr[ind].disp_width = data->disp_width; /* Clean up. */ gal_data_free(data); } } else dataarr=datall; /* Return the array of all column information and put the number of columns into the given pointer. */ *numdata=numc; return dataarr; } /* Return the information about a text file table. If there were no readable rows, it will return NULL.*/ static gal_data_t * txt_get_info(char *filename, int format, size_t *numdata, size_t *dsize) { FILE *fp; size_t numtokens; int firstlinedone=0; gal_data_t *datall=NULL, *dataarr; char *line, *format_err="empty", *comm_start; size_t linelen=10; /* `linelen' will be increased by `getline'. */ /* Set the constant strings */ switch(format) { case TXT_FORMAT_TABLE: format_err="table"; comm_start="# Column "; break; case TXT_FORMAT_IMAGE: format_err="image"; comm_start="# Image "; break; default: error(EXIT_FAILURE, 0, "%s: code %d not recognized", __func__, format); } /* Open the file. */ errno=0; fp=fopen(filename, "r"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: couldn't open to read as a plain " "text %s in %s", filename, format_err, __func__); /* Allocate the space necessary to keep each line as we parse it. Note that `getline' is going to later `realloc' this space to fit the line length. */ errno=0; line=malloc(linelen*sizeof *line); if(line==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for line", __func__, linelen*sizeof *line); /* Read the comments of the line for possible information about the lines, but also confirm/complete the info by parsing the first uncommented line. */ dsize[0]=0; while( getline(&line, &linelen, fp) != -1 ) switch( gal_txt_line_stat(line) ) { /* Line is a comment, see if it has formatted information. */ case GAL_TXT_LINESTAT_COMMENT: txt_info_from_comment(line, &datall, comm_start); break; /* Line is actual data, use it to fill in the gaps. */ case GAL_TXT_LINESTAT_DATAROW: ++dsize[0]; if(firstlinedone==0) { firstlinedone=1; numtokens=txt_info_from_first_row(line, &datall, format); if(format==TXT_FORMAT_IMAGE) dsize[1]=numtokens; } break; /* We also have the case of GAL_TXT_LINESTAT_BLANK. */ } /* The final dataset linked list can have any order (depending on how the user gave column information in tables for example). So here, we will convert the list into a nicely sorted array, note that this function frees list as part of the process. */ dataarr=txt_infoll_to_array(datall, numdata); /* Clean up. Note that even if there were no usable columns, there might have been meta-data comments, so we need to free `colsll' in any case. If the list is indeed empty, then `gal_data_free_ll' won't do anything. */ free(line); /* Close the file. */ errno=0; if(fclose(fp)) error(EXIT_FAILURE, errno, "%s: couldn't close file after reading plain " "text %s information in %s", filename, format_err, __func__); /* Return the array of column information. */ return dataarr; } /* Get the information of each column in a text file */ gal_data_t * gal_txt_table_info(char *filename, size_t *numcols, size_t *numrows) { return txt_get_info(filename, TXT_FORMAT_TABLE, numcols, numrows); } /* Get the information of a 2D array in a text file. */ gal_data_t * gal_txt_image_info(char *filename, size_t *numimg, size_t *dsize) { return txt_get_info(filename, TXT_FORMAT_IMAGE, numimg, dsize); } /************************************************************************/ /*************** Read a txt table ***************/ /************************************************************************/ static void txt_read_token(gal_data_t *data, gal_data_t *info, char *token, size_t i, char *filename, size_t lineno, size_t colnum) { char *tailptr; char **str = data->array, **strb; uint8_t *uc = data->array, *ucb; int8_t *c = data->array, *cb; uint16_t *us = data->array, *usb; int16_t *s = data->array, *sb; uint32_t *ui = data->array, *uib; int32_t *ii = data->array, *ib; uint64_t *ul = data->array, *ulb; int64_t *l = data->array, *lb; float *f = data->array, *fb; double *d = data->array, *db; /* Read the proper token into the column. */ switch(data->type) { case GAL_TYPE_STRING: gal_checkset_allocate_copy(txt_trim_space(token), &str[i]); if( (strb=info->array) && !strcmp( *strb, str[i] ) ) { free(str[i]); gal_checkset_allocate_copy(GAL_BLANK_STRING, &str[i]); } break; case GAL_TYPE_UINT8: uc[i]=strtol(token, &tailptr, 0); if( (ucb=info->array) && *ucb==uc[i] ) uc[i]=GAL_BLANK_UINT8; break; case GAL_TYPE_INT8: c[i]=strtol(token, &tailptr, 0); if( (cb=info->array) && *cb==c[i] ) c[i]=GAL_BLANK_INT8; break; case GAL_TYPE_UINT16: us[i]=strtol(token, &tailptr, 0); if( (usb=info->array) && *usb==us[i] ) us[i]=GAL_BLANK_UINT16; break; case GAL_TYPE_INT16: s[i]=strtol(token, &tailptr, 0); if( (sb=info->array) && *sb==s[i] ) s[i]=GAL_BLANK_INT16; break; case GAL_TYPE_UINT32: ui[i]=strtol(token, &tailptr, 0); if( (uib=info->array) && *uib==ui[i] ) ui[i]=GAL_BLANK_UINT32; break; case GAL_TYPE_INT32: ii[i]=strtol(token, &tailptr, 0); if( (ib=info->array) && *ib==ii[i] ) ii[i]=GAL_BLANK_INT32; break; case GAL_TYPE_UINT64: ul[i]=strtoul(token, &tailptr, 0); if( (ulb=info->array) && *ulb==ul[i] ) ul[i]=GAL_BLANK_UINT64; break; case GAL_TYPE_INT64: l[i]=strtol(token, &tailptr, 0); if( (lb=info->array) && *lb==l[i] ) l[i]=GAL_BLANK_INT64; break; /* For the blank value of floating point types, we need to make sure it isn't a NaN, because a NaN value will fail on any condition check (even `=='). If it isn't NaN, then we can compare the values. */ case GAL_TYPE_FLOAT32: f[i]=strtod(token, &tailptr); if( (fb=info->array) && ( (isnan(*fb) && isnan(f[i])) || *fb==f[i] ) ) f[i]=GAL_BLANK_FLOAT64; break; case GAL_TYPE_FLOAT64: d[i]=strtod(token, &tailptr); if( (db=info->array) && ( (isnan(*db) && isnan(d[i])) || *db==d[i] ) ) d[i]=GAL_BLANK_FLOAT64; break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, data->type); } /* If a number couldn't be read properly, then report an error. */ if(data->type!=GAL_TYPE_STRING && *tailptr!='\0') error_at_line(EXIT_FAILURE, 0, filename, lineno, "column %zu " "(`%s') couldn't be read as a `%s' number", colnum, token, gal_type_name(data->type, 1) ); } static void txt_fill(char *line, char **tokens, size_t maxcolnum, gal_data_t *info, gal_data_t *out, size_t rowind, char *filename, size_t lineno) { size_t i, n=0; gal_data_t *data; int notenoughcols=0; char *end=line+strlen(line); /* See explanations in `txt_info_from_first_row'. */ if( *(end-2)==13 ) *(end-2)='\0'; else *(end-1)='\0'; /* Start parsing the line. Note that `n' and `maxcolnum' start from one. */ while(++n) { /* Break out of the parsing if we don't need the columns any more. The table might contain many more columns, but when they aren't needed, there is no point in tokenizing them. */ if(n>maxcolnum) break; /* Set the pointer to the start of this token/column. See explanations in `txt_info_from_first_row'. */ if( info[n-1].type == GAL_TYPE_STRING ) { /* Remove any delimiters and stop at the first non-delimiter. If we have reached the end of the line then its an error, because we were expecting a column here. */ while(isspace(*line) || *line==',') ++line; if(*line=='\0') {notenoughcols=1; break;} /* Everything is good, set the pointer and increment the line to the end of the allocated space for this string. */ line = (tokens[n]=line) + info[n-1].disp_width; if(linestatus-1]') is not NULL and points to the blank value. For strings, this will actually be a string. */ switch(out->ndim) { case 1: for(data=out; data!=NULL; data=data->next) txt_read_token(data, &info[data->status-1], tokens[data->status], rowind, filename, lineno, data->status); break; case 2: for(i=0;idsize[1];++i) txt_read_token(out, info, tokens[i+1], rowind * out->dsize[1] + i, filename, lineno, i+1); break; default: error(EXIT_FAILURE, 0, "%s: currently only 1 and 2 dimensional " "datasets acceptable", __func__); } } static gal_data_t * gal_txt_read(char *filename, size_t *dsize, gal_data_t *info, gal_list_sizet_t *indexll, int minmapsize, int format) { FILE *fp; char *line; char **tokens; gal_data_t *out=NULL; gal_list_sizet_t *ind; size_t maxcolnum=0, rowind=0, lineno=0, ndim; size_t linelen=10; /* `linelen' will be increased by `getline'. */ /* Open the file. */ errno=0; fp=fopen(filename, "r"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: couldn't open to read as a text table " "in %s", filename, __func__); /* Allocate the space necessary to keep a copy of each line as we parse it. Note that `getline' is going to later `realloc' this space to fit the line length. */ errno=0; line=malloc(linelen*sizeof *line); if(line==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `line'", __func__, linelen*sizeof *line); /* Allocate all the desired columns for output. We will be reading the text file line by line, and writing in the necessary values of each row individually. */ switch(format) { /* This is a table. */ case TXT_FORMAT_TABLE: for(ind=indexll; ind!=NULL; ind=ind->next) { ndim=1; maxcolnum = maxcolnum>ind->v+1 ? maxcolnum : ind->v+1; gal_list_data_add_alloc(&out, NULL, info[ind->v].type, ndim, dsize, NULL, 0, minmapsize, info[ind->v].name, info[ind->v].unit, info[ind->v].comment); out->disp_width=info[ind->v].disp_width; out->status=ind->v+1; } break; /* This is an image. */ case TXT_FORMAT_IMAGE: if(info->next) error(EXIT_FAILURE, 0, "%s: currently reading only one image (2d " "array) from a text file is possible, the `info' input has " "more than one element", __func__); ndim=2; maxcolnum=dsize[1]; out=gal_data_alloc(NULL, info->type, ndim, dsize, NULL, 0, minmapsize, info->name, info->unit, info->comment); break; /* Not recognized. */ default: error(EXIT_FAILURE, 0, "%s: format code %d not recognized", __func__, format); } /* Allocate the space to keep the pointers to each token in the line. This is done here to avoid having to allocate/free this array for each line in `txt_fill_columns'. Note that the column numbers are counted from one (unlike indexes that are counted from zero), so we need `maxcolnum+1' elements in the array of tokens.*/ errno=0; tokens=malloc((maxcolnum+1)*sizeof *tokens); if(tokens==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `tokens'", __func__, (maxcolnum+1)*sizeof *tokens); /* Read the data columns. */ while( getline(&line, &linelen, fp) != -1 ) { ++lineno; if( gal_txt_line_stat(line) == GAL_TXT_LINESTAT_DATAROW ) txt_fill(line, tokens, maxcolnum, info, out, rowind++, filename, lineno); } /* Clean up and close the file. */ errno=0; if(fclose(fp)) error(EXIT_FAILURE, errno, "%s: couldn't close file after reading ASCII " "table information in %s", filename, __func__); free(tokens); free(line); /* Return the array of column information. */ return out; } gal_data_t * gal_txt_table_read(char *filename, size_t numrows, gal_data_t *colinfo, gal_list_sizet_t *indexll, size_t minmapsize) { return gal_txt_read(filename, &numrows, colinfo, indexll, minmapsize, TXT_FORMAT_TABLE); } gal_data_t * gal_txt_image_read(char *filename, size_t minmapsize) { size_t numimg, dsize[2]; gal_data_t *img, *imginfo; gal_list_sizet_t *indexll=NULL; /* Get the image information. */ imginfo=gal_txt_image_info(filename, &numimg, dsize); /* Read the table. */ img=gal_txt_read(filename, dsize, imginfo, indexll, minmapsize, TXT_FORMAT_IMAGE); /* Clean up and return. */ gal_data_free(imginfo); return img; } /************************************************************************/ /*************** Write to txt ***************/ /************************************************************************/ /* Make an array of 3 strings for each column (in practice a two dimensional array with 3 columns in a row for each input column). The columns are: Column 0: Printf format string. Column 1: Gnuastro type string (in plain text format). Column 2: Blank value string. */ #define FMTS_COLS 3 static char ** make_fmts_for_printf(gal_data_t *datall, int leftadjust, size_t *len) { char **fmts; gal_data_t *data; size_t i=0, num=0; char fmt[2], lng[3]; /* Allocate space for the output. */ for(data=datall;data!=NULL;data=data->next) ++num; errno=0; fmts=malloc(FMTS_COLS*num*sizeof *fmts); if(fmts==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for fmts", __func__, FMTS_COLS*num*sizeof *fmts); /* Initialize the length to 0. */ *len=0; /* Go over all the columns and make their formats. */ for(data=datall;data!=NULL;data=data->next) { /* First allocate the necessary space to keep the string. */ errno=0; fmts[ i*FMTS_COLS ] = malloc(GAL_TXT_MAX_FMT_LENGTH*sizeof **fmts); fmts[ i*FMTS_COLS+1 ] = malloc(GAL_TXT_MAX_FMT_LENGTH*sizeof **fmts); if(fmts[i*FMTS_COLS]==NULL || fmts[i*FMTS_COLS+1]==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for fmts[%zu] " "or fmts[%zu]", __func__, GAL_TXT_MAX_FMT_LENGTH*sizeof **fmts, i*FMTS_COLS, i*FMTS_COLS+1); /* If we have a blank value, get the blank value as a string and adjust the width */ fmts[ i*FMTS_COLS+2 ] = ( gal_blank_present(data, 0) ? gal_blank_as_string(data->type, 0) : NULL ); /* Fill in the printing paramters. */ gal_tableintern_col_print_info(data, GAL_TABLE_FORMAT_TXT, fmt, lng); /* Adjust the width if a blank string was defined. */ if(fmts[i*FMTS_COLS+2]) data->disp_width = ( strlen(fmts[i*FMTS_COLS+2]) > data->disp_width ? strlen(fmts[i*FMTS_COLS+2]) : data->disp_width ); /* Print the result into the allocated string and add its length to the final length of the overall format statement. The space in the end of `fmts[i*2]' is to ensure that the columns don't merge, even if the printed string is larger than the expected width. */ if(data->disp_precision > 0) *len += 1 + sprintf(fmts[i*FMTS_COLS], "%%%s%d.%d%s%s ", leftadjust ? "-" : "", data->disp_width, data->disp_precision, lng, fmt); else *len += 1 + sprintf(fmts[i*FMTS_COLS], "%%%s%d%s%s ", leftadjust ? "-" : "", data->disp_width, lng, fmt); /* Set the string for the Gnuastro type. For strings, we also need to write the maximum number of characters.*/ if(data->type==GAL_TYPE_STRING) sprintf(fmts[i*FMTS_COLS+1], "%s%d", gal_type_name(data->type, 0), data->disp_width); else strcpy(fmts[i*FMTS_COLS+1], gal_type_name(data->type, 0)); /* Increment the column counter. */ ++i; } /* Return the array. */ return fmts; } static void txt_print_value(FILE *fp, void *array, int type, size_t ind, char *fmt) { switch(type) { /* Numerical types. */ case GAL_TYPE_UINT8: fprintf(fp, fmt, ((uint8_t *) array)[ind]); break; case GAL_TYPE_INT8: fprintf(fp, fmt, ((int8_t *) array)[ind]); break; case GAL_TYPE_UINT16: fprintf(fp, fmt, ((uint16_t *)array)[ind]); break; case GAL_TYPE_INT16: fprintf(fp, fmt, ((int16_t *) array)[ind]); break; case GAL_TYPE_UINT32: fprintf(fp, fmt, ((uint32_t *)array)[ind]); break; case GAL_TYPE_INT32: fprintf(fp, fmt, ((int32_t *) array)[ind]); break; case GAL_TYPE_UINT64: fprintf(fp, fmt, ((uint64_t *)array)[ind]); break; case GAL_TYPE_INT64: fprintf(fp, fmt, ((int64_t *) array)[ind]); break; case GAL_TYPE_FLOAT32: fprintf(fp, fmt, ((float *) array)[ind]); break; case GAL_TYPE_FLOAT64: fprintf(fp, fmt, ((double *) array)[ind]); break; /* Special consideration for strings. */ case GAL_TYPE_STRING: if( !strcmp( ((char **)array)[ind], GAL_BLANK_STRING ) ) fprintf(fp, fmt, GAL_BLANK_STRING); else fprintf(fp, fmt, ((char **)array)[ind]); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } } static FILE * txt_open_file_write_info(gal_data_t *datall, char **fmts, gal_list_str_t *comment, char *filename) { FILE *fp; gal_data_t *data; char *tmp, *nstr; size_t i, j, num=0; gal_list_str_t *strt; int nlen, nw=0, uw=0, tw=0, bw=0; /* Make sure the file doesn't already eixist. */ if( gal_checkset_check_file_return(filename) ) error(EXIT_FAILURE, 0, "%s: %s already exists. For safety, this " "function will not over-write an existing file. Please delete " "it before calling this function", __func__, filename); /* Open the output file. */ errno=0; fp=fopen(filename, "w"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: couldn't be open to write text " "table by %s", filename, __func__); /* Write the comments if there were any. */ for(strt=comment; strt!=NULL; strt=strt->next) fprintf(fp, "# %s\n", strt->v); /* Get the maximum width for each information field. */ for(data=datall;data!=NULL;data=data->next) { ++num; if( data->name && strlen(data->name)>nw ) nw=strlen(data->name); if( data->unit && strlen(data->unit)>uw ) uw=strlen(data->unit); } for(i=0;i tw ? strlen(tmp) : tw; if( (tmp=fmts[ i*FMTS_COLS+2 ]) ) /* If it isn't NULL. */ bw = strlen(tmp) > bw ? strlen(tmp) : bw; } /* Write the column information if the output is a file. When the output is directed to standard output (the command-line), it is most probably intended for piping into another program (for example AWK for further processing, or sort, or anything) so the user already has the column information and is probably going to change them, so they are just a nuisance. When there are more than 9 columns, we don't want to have cases like `# Column 1 :' (note the space between `1' and `:', this space won't exist for the 2 digit colum numbers). To do this, we are first allocating and printing a string long enough to keep the final column's `N:'. Then, for each column, we print only the number into the allocated space and put the `:' in manually immediately after the number. Note that the initial `asprintf' put a `\0' in the allocated space, so we can safely over-write the one that `sprintf' puts with a `:' for the columns that have the same number of digits as the final column. */ i=0; asprintf(&nstr, "%zu:", num); nlen=strlen(nstr); for(data=datall; data!=NULL; data=data->next) { /* Print the number into the number string, then add the `:' immediately after the number. */ sprintf(nstr, "%zu", i+1); for(j=1;jndim==1 ? "Column" : "Image", nstr, nw, data->name ? data->name : "", uw, data->unit ? data->unit : "", tw, fmts[i*FMTS_COLS+1] ? fmts[i*FMTS_COLS+1] : "", bw, fmts[i*FMTS_COLS+2] ? fmts[i*FMTS_COLS+2] : "", data->comment ? data->comment : ""); ++i; } /* Clean up and return. */ free(nstr); return fp; } void gal_txt_write(gal_data_t *input, gal_list_str_t *comment, char *filename) { FILE *fp; char **fmts; size_t i, j, num=0, fmtlen; gal_data_t *data, *next2d=NULL; /* Make sure input is valid. */ if(input==NULL) error(EXIT_FAILURE, 0, "%s: input is NULL", __func__); /* Currently only 1 and 2 dimension datasets are acceptable. */ if( input->ndim!=1 && input->ndim!=2 ) error(EXIT_FAILURE, 0, "%s: only 1 and 2 dimensional datasets are " "currently supported. The input dataset has %zu dimensions", __func__, input->ndim); /* For a 2D dataset, we currently don't accept a list, we can only print one column. So keep the next pointer separately and restore it after the job of this function is finished. */ if(input->ndim==2) { next2d=input->next; input->next=NULL; } /* Find the number of columns, do a small sanity check, and get the maximum width of the name and unit string if they are present. */ for(data=input;data!=NULL;data=data->next) { /* Count. */ ++num; /* Check if the dimensionality and size is the same for all the elements. */ if( input!=data && gal_data_dsize_is_different(input, data) ) error(EXIT_FAILURE, 0, "%s: the input list of datasets must have the " "same sizes (dimentionality and length along each dimension)", __func__); } /* Prepare the necessary formats for each column, then allocate the space for the full list and concatenate all the separate inputs into it. */ fmts=make_fmts_for_printf(input, 1, &fmtlen); /* Set the output FILE pointer: if it isn't NULL, its an actual file, otherwise, its the standard output. */ fp = ( filename ? txt_open_file_write_info(input, fmts, comment, filename) : stdout ); /* Print the dataset */ switch(input->ndim) { case 1: for(i=0;isize;++i) /* Row. */ { j=0; for(data=input;data!=NULL;data=data->next) /* Column. */ txt_print_value(fp, data->array, data->type, i, fmts[j++ * FMTS_COLS]); fprintf(fp, "\n"); } break; case 2: for(i=0;idsize[0];++i) { for(j=0;jdsize[1];++j) txt_print_value(fp, input->array, input->type, i*input->dsize[1]+j, fmts[0]); fprintf(fp, "\n"); } break; default: error(EXIT_FAILURE, 0, "%s: a bug! input->ndim=%zu is not recognized", __func__, input->ndim); } /* Clean up. */ for(i=0;indim==2) input->next=next2d; } gnuastro-0.5/lib/timing.c0000644000175000017500000000423213121462410012335 00000000000000/********************************************************************* Functions to report timing in verbose mode. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include /* Micro-second based timer, which can be used to generate random numbers. The type of `tv_sec' and `tv_usec' is `long int' (from the GNU C Library manual), so this function will also return long. */ long gal_timing_time_based_rng_seed() { struct timeval tv; gettimeofday(&tv,0); return tv.tv_sec + tv.tv_usec; } /* Used to report the time it takes for an action to be done. */ void gal_timing_report(struct timeval *t1, char *jobname, size_t level) { double dt=1e30; struct timeval t2; if(t1) { gettimeofday(&t2, NULL); dt= ( ((double)t2.tv_sec+(double)t2.tv_usec/1e6) - ((double)t1->tv_sec+(double)t1->tv_usec/1e6) ); } if(level==0) printf("%s %-f seconds\n", jobname, dt); else if(level==1) { if(t1) printf(" - %-*s %f seconds\n", GAL_TIMING_VERB_MSG_LENGTH_V, jobname, dt); else printf(" - %s\n", jobname); } else if(level==2) { if(t1) printf(" ---- %-*s %f seconds\n", GAL_TIMING_VERB_MSG_LENGTH_V-3, jobname, dt); else printf(" ---- %s\n", jobname); } } gnuastro-0.5/lib/tile.c0000644000175000017500000012506113161316532012016 00000000000000/********************************************************************* tile -- work with tesselations over a host dataset. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /***********************************************************************/ /************** Single tile ******************/ /***********************************************************************/ /* Calculate the starting coordinates of a tile in the allocated block of memory. */ void gal_tile_start_coord(gal_data_t *tile, size_t *start_coord) { size_t ind, ndim=tile->ndim; gal_data_t *block=gal_tile_block(tile); /* If the input tile is actually the same as the block, then the start is at 0 (in all dimensions). */ if(block==tile) memset(start_coord, 0, ndim*gal_type_sizeof(GAL_TYPE_SIZE_T)); else { /* Calculate the coordinates of the first pixel of the tile. */ ind = gal_data_ptr_dist(block->array, tile->array, block->type); gal_dimension_index_to_coord(ind, ndim, block->dsize, start_coord); } } /* Put the starting and ending (end point is not inclusive) coordinates of a tile into the `start_end' array. It is assumed that a space of `2*tile->ndim' has been already allocated (static or dynamic) before this function is called. `rel_block' (or relative-to-block) is only relevant when the tile has an intermediate tile between it and the allocated space (like a channel, see `gal_tile_full_two_layers'). If it doesn't (`tile->block' points the allocated dataset), then the value to `rel_block' is irrelevant. However, when `tile->block' is its self a larger block and `rel_block' is set to 0, then the starting and ending positions will be based on the position within `tile->block', not the allocated space. */ void gal_tile_start_end_coord(gal_data_t *tile, size_t *start_end, int rel_block) { size_t *s, *sf, *h; gal_data_t *block=gal_tile_block(tile); gal_data_t *host=rel_block ? block : tile->block; size_t *hcoord, start_ind, ndim=tile->ndim, *end=start_end+ndim; /* Get the starting index. Note that for the type we need the allocated block dataset and can't rely on the tiles. */ start_ind=gal_data_ptr_dist(block->array, tile->array, block->type); /* Get the coordinates of the starting point relative to the allocated block. */ gal_dimension_index_to_coord(start_ind, ndim, block->dsize, start_end); /* When the host is different from the block, the tile's starting position needs to be corrected. */ if(host!=block) { /* Get the host's starting coordinates. */ start_ind=gal_data_ptr_dist(block->array, host->array, block->type); /* Temporarily put the host's coordinates in the place held for the ending coordinates. */ hcoord=end; gal_dimension_index_to_coord(start_ind, ndim, block->dsize, hcoord); sf=(s=start_end)+ndim; h=hcoord; do *s++ -= *h++; while(sdsize, end, ndim); } /* Put the indexs of the first/start and last/end pixels (inclusive) in a tile into the `start_end' array (that has two elements). It will then return the pointer to the start of the tile in the `work' data structure. */ void * gal_tile_start_end_ind_inclusive(gal_data_t *tile, gal_data_t *work, size_t *start_end_inc) { gal_data_t *block=gal_tile_block(tile); size_t ndim=tile->ndim, *s, *e, *l, *sf; size_t *start_coord = gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "start_coord"); size_t *end_coord = gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "end_coord"); /* The starting index can be found from the distance of the `tile->array' pointer and `block->array' pointer. IMPORTANT: with the type of the block array. */ start_end_inc[0]=gal_data_ptr_dist(block->array, tile->array, block->type); /* To find the end index, we need to know the coordinates of the starting point in the allocated block. */ gal_dimension_index_to_coord(start_end_inc[0], ndim, block->dsize, start_coord); /* `end_coord' is one unit ahead of the last element in the tile in every dimension. To have less potential for bugs, we will remove that extra value, so we get the coordinates of the last pixel in the tile (inclusive). We will finally, increment that value by one to get to the pixel immediately outside of the tile.*/ e=end_coord; l=tile->dsize; sf=(s=start_coord)+ndim; do *e++ = *s + *l++ - 1; while(++sdsize, end_coord); /* For a check: printf("\ntile_dsize: %zu, %zu, %zu\n", tile->dsize[0], tile->dsize[1], tile->dsize[2]); printf("start_coord: %zu, %zu, %zu\n", start_coord[0], start_coord[1], start_coord[2]); printf("end_coord: %zu, %zu, %zu\n", end_coord[0], end_coord[1], end_coord[2]); printf("start_index: %zu\n", start_end_inc[0]); printf("end_index: %zu\n", start_end_inc[1]); exit(1); */ /* Clean up and return the pointer in the work array that the tile starts from. */ free(end_coord); free(start_coord); return gal_data_ptr_increment(work->array, start_end_inc[0], work->type); } /***********************************************************************/ /************** Series of tiles ******************/ /***********************************************************************/ /* Construct a list of tile(s) given positional minimum(s) and maximum(s). The output is an allocated an allocated array that can later be freed with `gal_data_array_free'. The minimum and maximums are assumed to be inclusive. The array keeping the minmium and maximum coordinates for each label will have the following format: | min0_d0 | min0_d1 | max0_d0 | max0_d1 | ... ... | minN_d0 | minN_d1 | maxN_d0 | maxN_d1 | */ gal_data_t * gal_tile_series_from_minmax(gal_data_t *block, size_t *minmax, size_t number) { size_t ndim=block->ndim; size_t *min, *max; size_t i, d, ind, size, width=2*ndim; gal_data_t *tiles=gal_data_array_calloc(number); /* Fill the tile information. */ for(i=0;idsize, min); tiles[i].array = gal_data_ptr_increment(block->array, ind, block->type); } /* For a check (put all the objects in an extension of a test file). { gal_data_t *copy; for(i=0;iblock!=NULL) tile=tile->block; return tile; } /* Return the increment necessary to start at the next series of contiguous memory (fastest dimension) associated with a tile. 1D and 2D cases are simple and need no extra explanation, but the case for higher dimensions can be alittle more complicated, So we will go over some examples. The notations below are: `n' number of dimensions (same in tile and block). `t[]' size of the tile in each dimension. `b[]' size of the allocated block in each dimension. It is just important to see the output of this function as an increment from the the last patch of contiguous memory associated with the tile. So when the increment number is `t[n-1]' (the first 2D slice of the tile has been parsed), simply incrementing by `b[n-2] * b[n-1]' will take us to the last row of num_increment coord increment ------------- ----- --------- 1 (...0,0,0) b[n-1]: fastest dimension of the block. 2 (...0,1,0) Similar to previous . . . . . . t[n-2] (...1,0,0) (b[n-2] * b[n-1]) - ( (t[n-2]-1) * b[n-1] ) t[n-2] + 1 (...1,1,0) b[n-1] . . . . . . 2 * t[n-2] (...2,0,0) b[n-2] * b[n-1] t[n-2]+1 (...2,1,0) b[n-1] . . . . . . t[n-3] * t[n-2] (..1,0,0,0) b[n-3] * b[n-2] * b[n-1] */ size_t gal_tile_block_increment(gal_data_t *block, size_t *tsize, size_t num_increment, size_t *coord) { size_t n=block->ndim; size_t *b=block->dsize, *t=tsize; size_t increment=GAL_BLANK_SIZE_T; if(n>3) error(EXIT_FAILURE, 0, "%s: currently only implemented for at most 3 " "dimensions", __func__); switch(n) { /* A zero-dimensional dataset is not defined. */ case 0: error(EXIT_FAILURE, 0, "%s: zero dimensional input is not acceptable", __func__); /* 1D: the increment is just the tile size. */ case 1: increment=t[0]; if(coord) coord[0]+=increment; break; /* 2D: the increment is the block's number of fastest axis pixels. */ case 2: increment=b[1]; if(coord) ++coord[0]; break; /* 3D: The increment depends on which dimension we are reaching. */ case 3: if(num_increment % t[1]) { increment = b[2]; if(coord) ++coord[1]; } else { increment=(b[1] * b[2]) - ( (t[1]-1) * b[2] ); if(coord) { ++coord[0]; coord[1] -= t[1]-1; coord[2]=0; } } break; } /* Return the final increment value. */ return increment; } /* Write a constant value for each tile into each pixel covered by the input tiles in an array the size of the block and return it. Arguments --------- `tilevalues': This must be an array that has the same number of elements as that in `tilesll' and in the same order that `tilesll' elements are parsed (from first to last). As a result the dimensionality of this array is irrelevant. Note that unlike `tiles', `tilevalues' must be an array. `tilesll': This will be parsed as a linked list (using the `next' element). Internally, it might be stored as an array, but this function doesn't care! The position of the tile over its block will be determined according to the `block' element and the pointer of its `array' as fully described in `gnuastro/data.h'. This function will not pop/free the list, it will only parse it from start to end. `initialize': Initialize the allocated space with blank values before writing in the constant values. This can be useful when the tiles don't cover the full allocated block. */ gal_data_t * gal_tile_block_write_const_value(gal_data_t *tilevalues, gal_data_t *tilesll, int withblank, int initialize) { void *in; int type=tilevalues->type; size_t tile_ind, nt=0, nv=tilevalues->size; gal_data_t *tofill, *tile, *block=gal_tile_block(tilesll); /* A small sanity check. */ for(tile=tilesll; tile!=NULL; tile=tile->next) ++nt; if(nt!=nv) error(EXIT_FAILURE, 0, "%s: the number of elements in `tilevalues' (%zu) " "and `tilesll' (%zu) must be the same", __func__, nv, nt); /* Allocate the output array. */ tofill=gal_data_alloc(NULL, type, block->ndim, block->dsize, block->wcs, 0, block->minmapsize, tilevalues->name, tilevalues->unit, tilevalues->comment); /* If requested, initialize `tofill', otherwise it is assumed that the full area of the output is covered by the tiles. */ if(withblank || initialize) gal_blank_initialize(tofill); else { /* Copy the flags. */ tofill->flag=tilevalues->flag; /* If we have more than one dimension, then remove the possibly sorted flags. */ if(block->ndim>1) { tofill->flag &= ~GAL_DATA_FLAG_SORTED_I; tofill->flag &= ~GAL_DATA_FLAG_SORTED_D; } } /* Go over the tiles and write the values in. Recall that `tofill' has the same type as `tilevalues'. So we are using memcopy. */ tile_ind=0; for(tile=tilesll; tile!=NULL; tile=tile->next) { /* Set the pointer to use as input. The `if(o)' statement is set because GCC 7.1.1 complained about the possiblity of the first argument of `memcpy' being NULL. Recall that `o' is a pointer. */ in=gal_data_ptr_increment(tilevalues->array, tile_ind++, type);; GAL_TILE_PARSE_OPERATE( tile, tofill, 1, withblank, { if(o) memcpy(o, in, gal_type_sizeof(type)); } ); } return tofill; } /* Make a copy of the memory block and fill it with the index of each tile in `tilesll' (counting from 0). The non-filled areas will have blank values. The output dataset will have a type of `GAL_TYPE_INT32'. */ gal_data_t * gal_tile_block_check_tiles(gal_data_t *tilesll) { int32_t *arr; size_t i, dsize=gal_list_data_number(tilesll); gal_data_t *ids, *out, *block=gal_tile_block(tilesll); /* Allocate the array to keep the IDs of each tile. */ ids=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &dsize, NULL, 0, block->minmapsize, NULL, NULL, NULL); /* Put the IDs into the array. */ arr=ids->array; for(i=0;iarray, gal_data_ptr_dist(block->array, tile->array, block->type), other->type); } /* To use within `gal_tile_full_blank_flag'. */ static void * tile_block_blank_flag(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; gal_data_t *tile_ll=(gal_data_t *)(tprm->params); size_t i; gal_data_t *tile; /* Check all the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { tile=&tile_ll[ tprm->indexs[i] ]; gal_blank_present(tile, 1); } /* Wait for all the other threads to finish. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* Update the blank flag on the tiles within the list of input tiles. */ void gal_tile_block_blank_flag(gal_data_t *tile_ll, size_t numthreads) { /* Go over all the tiles and update their blank flag. */ gal_threads_spin_off(tile_block_blank_flag, tile_ll, gal_list_data_number(tile_ll), numthreads); } /***********************************************************************/ /************** Tile full dataset ********************/ /***********************************************************************/ /* The user's specified tile size might not be an exact multiple of the parent's size. This function is useful in such cases. It will give the starting tile's size along each dimension. The line below can be the length along any dimension and the tile size along that dimension. You see that when we start with the tile size, we will end up with a last tile that contains the remainder elements. | tile size | tile size | tile size | tile size | remainder | | | | | | --------------------------------------------------------- The remainder will always be smaller than `tile size'. So, we will merge the last tile size with the remainder and move that tile to the start. In this way, the size of the first tile will always be between between one and two times the size of the regular tile: | first tile | tile size | tile size | tile size | | | | | | --------------------------------------------------------- When there is only a small remainder (for example one or two pixels), then this layout is fine. But when the remainder is significant compared to the regular tile size (like the example above), then it will make more sense to cut the first tile into two halfs (`f-half' and `l-half') and put them at the start and end of the full length: | f-half | tile size | tile size | tile size | l-half | | | | | | | --------------------------------------------------------- So in any case, knowing the size of the first tile, will allow us to parse all the tiles. We just have to make sure we don't go over the full input's length. */ static void gal_tile_full_regular_first(gal_data_t *parent, size_t *regular, float remainderfrac, size_t *first, size_t *last, size_t *tsize) { size_t i, remainder, *dsize=parent->dsize;; /* For each dimension, set the size of the first tile. */ for(i=0;indim;++i) { /* It might happen that the tile size is bigger than the parent size in a dimension, in that case the analysis in the comments above are useless and only one tile should cover this dimension with the size of the parent. */ if( regular[i] >= dsize[i] ) { tsize[i]=1; first[i]=last[i]=dsize[i]; } else { /* Calculate the remainder in this dimension. */ remainder=dsize[i] % regular[i]; /* Depending on the remainder, set the first tile size and number. */ if(remainder) { if( remainder > remainderfrac * regular[i] ) { first[i] = ( remainder + regular[i] )/2; tsize[i] = dsize[i]/regular[i] + 1 ; last[i] = ( dsize[i] - ( first[i] + regular[i]*(tsize[i]-2) ) ); } else { first[i] = remainder + regular[i]; tsize[i] = dsize[i]/regular[i]; last[i] = regular[i]; } } else { first[i] = last[i] = regular[i]; tsize[i] = dsize[i]/regular[i]; } } } } /* Cover the full dataset with (mostly) identical tiles. The regular tile size is determined from the `size' array. If the input data's size is not an exact multiple of `size' for each dimension, then the tiles touching the edges in that dimension will have a different size to fully cover every element of the input. For a full description of tiling in `gal_data_t', please see `data.h'. Inputs ------ `input' is the gal_data_t which you want to tile (only used for its sizes). `regular' is the size of the regular tiles along each of the input's dimensions. So it must have the same number of elements as the dimensions of `input'. `remainderfrac' is the significant fraction of the remainder space if the width of the input isn't an exact multiple of the tile size along a dimension, see `gal_tile_full_regular_first'. `out' is the pointer to the array of data structures that is to keep the tile parameters. If `*out==NULL', then the necessary space will be allocated. If it is not NULL, then all the tile information will be filled from the given element, see `multiple' for more. `multiple': When the `*out' array is to be allocated, allocate `multiple' times the necessary space. This can be very useful when you have several more identically sized `inputs', and you want all their tiles to be allocated (and thus indexed) together, even though they have different `block' datasets (that then link to one allocated space). See the `gal_tile_full_two_layers' below. `firsttsize': The size of the first tile along every dimension. This is only different from the regular tile size when `regular' is not an exact multiple of `input''s length along every dimension. This array is allocated internally by this function. Output ------ The returned output is an array of numbers (the same size as the input data structure's dimensions) keeping the number of tiles along each dimension. Implementation -------------- In the most general case, to set the starting pointers for each tile we need the following sizes. If the input array has no parent/block, then both these sizes are equal to it's own size: 1. block-size (or `bsize'), which is the size of the allocated block in each dimension. 2. parent-size (or `psize') which is the size of the parent in each dimension (we don't want to go out of the paren't range). */ size_t * gal_tile_full(gal_data_t *input, size_t *regular, float remainderfrac, gal_data_t **out, size_t multiple, size_t **firsttsize) { size_t i, d, tind, numtiles, *start=NULL; gal_data_t *tiles, *block=gal_tile_block(input); size_t *last = gal_data_malloc_array(GAL_TYPE_SIZE_T, input->ndim, __func__, "last"); size_t *first = gal_data_malloc_array(GAL_TYPE_SIZE_T, input->ndim, __func__, "first"); size_t *coord = gal_data_malloc_array(GAL_TYPE_SIZE_T, input->ndim, __func__, "coord"); size_t *tcoord = gal_data_malloc_array(GAL_TYPE_SIZE_T, input->ndim, __func__, "tcoord"); size_t *tsize = gal_data_malloc_array(GAL_TYPE_SIZE_T, input->ndim+1, __func__, "tsize"); /* Set the first tile size and total number of tiles along each dimension, then allocate the array of tiles. */ gal_tile_full_regular_first(input, regular, remainderfrac, first, last, tsize); numtiles=gal_dimension_total_size(input->ndim, tsize); /* Allocate the necessary space for all the tiles (if necessary). */ if(*out) tiles = *out; else *out = tiles = gal_data_array_calloc(numtiles*multiple); /* It is possible that the `input' dataset is its-self a larger tile over a region of the allocated block. In that case, we need to account for the block's dimensions when calculating the position of this block. */ if(input->block) { start=gal_data_malloc_array(GAL_TYPE_SIZE_T, input->ndim, __func__, "start"); gal_tile_start_coord(input, start); } /* Initialize each tile. */ for(i=0;indim, tsize, tcoord); /* The coordinates are currently in units of tiles, not pixels. Convert them to the coordinates of the first pixel in each tile. */ for(d=0;dndim;++d) { /* Convert the tile coordinates to pixel coordinates within `input'. See the comments above `gal_tile_full_regular_first': The first tile in every dimension can be different from the regular tile size. */ coord[d] = tcoord[d] ? first[d] + (tcoord[d]-1)*regular[d] : 0; /* When the `input' data structure (that is to be tiled here) was itself a tile over a larger allocated array, a `start' array has been allocated to correct the coordinates so they refer to a physical position on the allocated block of memory. */ if(start) coord[d] += start[d]; } /* Convert the coordinates (that are now in element/pixel units on the allocated block of memory) into an index. */ tind=gal_dimension_coord_to_index(block->ndim, block->dsize, coord); /* Now that we have the index of this tile's starting point compared to the allocated block, put it in to the tile's `array' pointer. */ tiles[i].array=gal_data_ptr_increment(block->array, tind, block->type); /* Set the sizes of the tile. */ tiles[i].size=1; /* Just an initializer, will be changed. */ tiles[i].ndim=input->ndim; tiles[i].minmapsize=input->minmapsize; tiles[i].dsize=gal_data_malloc_array(GAL_TYPE_SIZE_T,input->ndim, __func__, "tiles[i].dsize"); for(d=0;dndim;++d) { /* The size of the first and last tiles can be different from the majority of the `regular' tiles that have the same size. When a tile is on the edge in one of the dimensions, then its `coord[d]' will be either 0 or the last. */ if( first[d] != regular[d] && ( tcoord[d]==0 || tcoord[d]==tsize[d]-1 ) ) { if( tcoord[d] == 0 ) tiles[i].dsize[d] = first[d]; if( tcoord[d] == tsize[d]-1 ) tiles[i].dsize[d] = last[d]; } else tiles[i].dsize[d]=regular[d]; /* Set the size value. */ tiles[i].size *= tiles[i].dsize[d]; } /* Set the block structure for this tile to the `input', and set the next pointer as the next tile. Note that only when we are dealing with the last tile should the `next' pointer be set to NULL.*/ tiles[i].flag = 0; tiles[i].block = input; tiles[i].next = i==numtiles-1 ? NULL : &tiles[i+1]; /* For a check: printf("%zu:\n\tStart index: %zu\n\tsize: %zu x %zu\n", i, tind, tiles[i].dsize[1], tiles[i].dsize[0]); exit(0); */ } /* Clean up and return. */ free(last); free(coord); free(tcoord); *firsttsize=first; if(start) free(start); tsize[input->ndim]=-1; /* `tsize' had ndim+1 values, we will mark the */ return tsize; /* extra space with the largest possible value: */ } /* -1, see `gal_tile_full_sanity_check'. */ /* Make sure that the input parameters (in `tl', short for two-layer) fit with the input dataset. The filename and HDU are only required for error messages. Also, allocate and fill the `channelsize' array. */ void gal_tile_full_sanity_check(char *filename, char *hdu, gal_data_t *input, struct gal_tile_two_layer_params *tl) { double d; size_t i, ndim=input->ndim; /* Check the tile's dimensions. */ for(i=0;tl->tilesize[i]!=-1;++i) { /* Not equal to zero. */ if(tl->tilesize[i]==0) error(EXIT_FAILURE, 0, "`--tilesize' must be larger than zero, " "the given value for dimension %zu was zero", ndim-i); /* If the tile size is larger than the dataset size in this dimension, then quietly change the tile size to the dataset size along that dimension. */ if( tl->tilesize[i] > input->dsize[i] ) tl->tilesize[i] = input->dsize[i]; } /* Make sure the number of tile sizes (tile dimensions) are the same as the dataset's dimensions). */ if(i!=ndim) error(EXIT_FAILURE, 0, "%s (hdu: %s): has %zu dimensions, but only %zu " "value(s) given for the tile size (`--tilesize' option).", filename, hdu, ndim, i); /* Check the channel's dimensions. */ for(i=0; tl->numchannels[i]!=-1; ++i) if(tl->numchannels[i]==0) error(EXIT_FAILURE, 0, "the number of channels in all dimensions must " "be larger than zero. The number for dimension %zu was zero", i+1); if(i!=ndim) error(EXIT_FAILURE, 0, "%s (hdu: %s): has %zu dimensions, but only %zu " "value(s) given for the number of channels", filename, hdu, ndim, i); /* Allocate space for the channel sizes. */ tl->channelsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "tl->channelsize"); /* Check if the channels are exactly divisible by the input's size along each dimension and set the correct size. */ for(i=0;idsize[i] < tl->numchannels[i] ) error(EXIT_FAILURE, 0, "the number of channels in dimension %zu " "(%zu) is more than the size of the `%s' (hdu: %s) in that " "dimension", ndim-i, tl->numchannels[i], filename, hdu); /* Also check the tile size. */ if( input->dsize[i] < tl->tilesize[i] ) error(EXIT_FAILURE, 0, "the tile size in dimension %zu (%zu) is " "more than the size of the `%s' (hdu: %su) in that dimension", ndim-i, tl->tilesize[i], filename, hdu); /* First check. */ d=(double)input->dsize[i]/(double)(tl->numchannels[i]); if(ceil(d)!=d) error(EXIT_FAILURE, 0, "%zu (number of channels along dimension " "%zu) is not exactly divisible by %zu (the length of `%s' " "(hdu: %s) that dimension). The channels cover the input " "dataset, hence, they must be identical", tl->numchannels[i], ndim-i, input->dsize[i], filename, hdu); /* Put the channel size into the output. */ tl->channelsize[i]=d; } } /* A dataset can be tiled with two layers that are related: Channels: A tesselation of larger tile sizes that all have the same size (`channel_size' must be an exact multiple of `input's size along every dimension. In astronomy images, this can be seen as CCD amplifiers, that cover large parts of the image. If `*channels!=NULL' then it is assumed to be already present and will not be allocated. Tiles: A combined tesselation of each channel with smaller tiles. These tiles can be used to calculate things like gradients over each channel and thus over the whole image. */ void gal_tile_full_two_layers(gal_data_t *input, struct gal_tile_two_layer_params *tl) { gal_data_t *t; size_t i, *junk, *junk2, ndim=tl->ndim=input->ndim; /* Initialize. */ tl->channels=tl->tiles=NULL; /* Initialize necessary values and do the channels tessellation. */ junk = gal_tile_full(input, tl->channelsize, tl->remainderfrac, &tl->channels, 1, &junk2); tl->totchannels = gal_dimension_total_size(ndim, tl->numchannels); for(i=0;inumchannels[i]) error(EXIT_FAILURE, 0, "%s: the input and output number of channels " "don't match in dimension %zu: %zu and %zu respectively.", __func__, ndim-i, tl->numchannels[i], junk[i]); free(junk); free(junk2); /* Tile each channel. While tiling the first channel, we are also going to allocate the space for the other channels. Then pass those pointers when we want to fill in each tile of the other channels. */ tl->numtilesinch = gal_tile_full(tl->channels, tl->tilesize, tl->remainderfrac, &tl->tiles, tl->totchannels, &tl->firsttsize); tl->tottilesinch = gal_dimension_total_size(ndim, tl->numtilesinch); for(i=1; itotchannels; ++i) { /* Set the first tile in this channel. Then use it it fill the `next' pointer of the previous channel's tiles. Note that `gal_tile_full' set this `next' element to NULL. */ t = tl->tiles + i * tl->tottilesinch; tl->tiles[ i * tl->tottilesinch - 1 ].next = t; /* Fill in the information for all the tiles in this channel. Note that we already have the returned value, so it isn't important.*/ junk=gal_tile_full(&tl->channels[i], tl->tilesize, tl->remainderfrac, &t, 1, &junk2); free(junk); free(junk2); } /* Multiply the number of tiles along each dimension OF ONE CHANNEL by the number of channels in each dimension to get the dimensionality of the full tile structure. */ tl->numtiles = gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "tl->numtiles"); for(i=0;inumtiles[i] = tl->numtilesinch[i] * tl->numchannels[i]; tl->tottiles = gal_dimension_total_size(ndim, tl->numtiles); } /* Usage ----- Make a permutation to allow the conversion of tile location in memory to its location in the full input dataset and put it in the input's `permutation' element. If a permutation has already been defined for the tessellation, this function will not do anythin. If permutation won't be necessary, then this function will just return (the permutation must have been initialized to NULL). */ void gal_tile_full_permutation(struct gal_tile_two_layer_params *tl) { size_t *ch_coord, *tinch_coord; size_t i, p=0, t, ch, ind_in_all, ndim=tl->ndim; /* If the permutation has already been defined for this tessellation, then there is no need to do it again here. */ if(tl->permutation) return; /* If there is only one channel or one dimension, return NULL. The permutation functions know that the input and output indexs are the same when the permutation is NULL. */ if( ndim==1 || tl->totchannels==1) return; /* Allocate the space for the permutation and coordinates. */ ch_coord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "ch_coord"); tinch_coord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "tinch_coord"); tl->permutation=gal_data_malloc_array(GAL_TYPE_SIZE_T, tl->tottiles, __func__, "tl->permutation"); /* Fill in the permutation, we use the fact that the tiles are filled from the first channel to the last. */ for(ch=0;chtotchannels;++ch) { /* Get the coordinates of this channel's first tile. */ gal_dimension_index_to_coord(ch, ndim, tl->numchannels, ch_coord); for(i=0;inumtilesinch[i]; /* Go over all the tiles in this channel. */ for(t=0;ttottilesinch;++t) { /* Convert its index to coordinates and add them to the channel's starting coordinates. */ gal_dimension_index_to_coord(t, ndim, tl->numtilesinch, tinch_coord); for(i=0;inumtiles, tinch_coord); tl->permutation[ind_in_all] = p++; } } /* Clean up and return. */ free(tinch_coord); free(ch_coord); } /* Write one value for each tile into a file. IMPORTANT: it is assumed that the values are in the same order as the tiles. tile[i] --> tilevalues[i] */ void gal_tile_full_values_write(gal_data_t *tilevalues, struct gal_tile_two_layer_params *tl, int withblank, char *filename, gal_fits_list_key_t *keys, char *program_string) { gal_data_t *disp; /* Make the dataset to be displayed. */ if(tl->oneelempertile) { if(tl->ndim>1 && tl->totchannels>1) { /* A small sanity check. */ if(tl->permutation==NULL) error(EXIT_FAILURE, 0, "%s: no permutation defined for the input " "tessellation", __func__); /* Writing tile values to disk is not done for checking, not for efficiency. So to be safe (allow the caller to work on multiple threads), we will copy the tile values, then permute those. */ disp = gal_data_copy(tilevalues); gal_permutation_apply(disp, tl->permutation); } else disp = tilevalues; } else disp=gal_tile_block_write_const_value(tilevalues, tl->tiles, withblank, 0); /* Write the array as a file and then clean up (if necessary). */ gal_fits_img_write(disp, filename, keys, program_string); if(disp!=tilevalues) gal_data_free(disp); } /* Smooth the given values with a flat kernel of the given width. */ gal_data_t * gal_tile_full_values_smooth(gal_data_t *tilevalues, struct gal_tile_two_layer_params *tl, size_t width, size_t numthreads) { size_t *kdsize, knum, i; gal_data_t *kernel, *smoothed; struct gal_tile_two_layer_params ttl={0}; int permute=tl->ndim>1 && tl->totchannels>1; /* Check if the width is odd. */ if(width%2==0) error(EXIT_FAILURE, 0, "%s: %zu not acceptable as width. It has to be " "an odd number", __func__, width); /* Prepare the kernel size along every dimension. */ kdsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, tl->ndim, __func__, "kdsize"); for(i=0;indim;++i) kdsize[i]=width; /* Make the kernel. */ kernel=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, tilevalues->ndim, kdsize, NULL, 0, -1, NULL, NULL, NULL); knum=gal_dimension_total_size(tl->ndim, kernel->dsize); for(i=0;iarray))[i]=1/((double)knum); /* Permute (if necessary). */ if(permute) { gal_tile_full_permutation(tl); gal_permutation_apply(tilevalues, tl->permutation); } /* Do the smoothing. */ if(tl->workoverch) smoothed=gal_convolve_spatial(tilevalues, kernel, numthreads, 1, 1); else { /* Create the tile structure. */ ttl.tilesize=tl->numtilesinch; ttl.numchannels=tl->numchannels; gal_tile_full_sanity_check("IMPOSSIBLE", "IMP_HDU", tilevalues, &ttl); gal_tile_full_two_layers(tilevalues, &ttl); /* Do the convolution separately on each channel. */ smoothed=gal_convolve_spatial(ttl.tiles, kernel, numthreads, 1, 0); /* Clean up. */ ttl.tilesize=ttl.numchannels=NULL; gal_tile_full_free_contents(&ttl); } /* Reverse the permutation. */ if(permute) gal_permutation_apply_inverse(smoothed, tl->permutation); /* Clean up and return; */ free(kdsize); gal_data_free(kernel); return smoothed; } size_t gal_tile_full_id_from_coord(struct gal_tile_two_layer_params *tl, size_t *coord) { /* This function only works for 10 dimensions. */ size_t i, tr, chid, tile[10]; /* Host channel's ID. */ for(i=0;indim;++i) tile[i] = tl->totchannels == 1 ? 0 : coord[i] / tl->channelsize[i]; chid=gal_dimension_coord_to_index(tl->ndim, tl->numchannels, tile); /* Find the tile within the channel. */ for(i=0;indim;++i) { tr=coord[i] % tl->channelsize[i]; if( tl->firsttsize[i] != tl->tilesize[i] ) tile[i] = ( tr <= tl->firsttsize[i] ? 0 : 1 + (tr - tl->firsttsize[i]) / tl->tilesize[i] ); else tile[i] = tr / tl->tilesize[i]; } /* Return the tile ID. */ return ( chid * tl->tottilesinch + gal_dimension_coord_to_index(tl->ndim, tl->numtilesinch, tile) ); } /* Clean up the allocated spaces in the parameters. */ void gal_tile_full_free_contents(struct gal_tile_two_layer_params *tl) { /* Free the simply allocated spaces. */ if(tl->tilesize) free(tl->tilesize); if(tl->numchannels) free(tl->numchannels); if(tl->channelsize) free(tl->channelsize); if(tl->numtiles) free(tl->numtiles); if(tl->numtilesinch) free(tl->numtilesinch); if(tl->tilecheckname) free(tl->tilecheckname); if(tl->permutation) free(tl->permutation); if(tl->firsttsize) free(tl->firsttsize); /* Free the arrays of `gal_data_t' for each tile and channel. */ if(tl->tiles) gal_data_array_free(tl->tiles, tl->tottiles, 0); if(tl->channels) gal_data_array_free(tl->channels, tl->totchannels, 0); } gnuastro-0.5/lib/threads.c0000644000175000017500000002625613121462410012512 00000000000000/********************************************************************* Functions to facilitate using threads. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* from Gnulib, in Gnuastro's source */ /*****************************************************************/ /********* Implementation of pthread_barrier ***************/ /*****************************************************************/ /* Re-implementation of the example code given in: http://blog.albertarmea.com/post/47089939939/using-pthread-barrier-on-mac-os-x */ #if GAL_CONFIG_HAVE_PTHREAD_BARRIER == 0 /* Initialize the barrier structure. A barrier is a high-level way to wait until several threads have finished. */ int pthread_barrier_init(pthread_barrier_t *b, pthread_barrierattr_t *attr, unsigned int limit) { int err; /* Sanity check: */ if(limit==0) { errno = EINVAL; error(EXIT_FAILURE, errno, "%s: limit is zero", __func__); } /* Initialize the mutex: */ err=pthread_mutex_init(&b->mutex, 0); if(err) error(EXIT_FAILURE, err, "%s: inializing mutex", __func__); /* Initialize the condition variable: */ err=pthread_cond_init(&b->cond, 0); if(err) { pthread_mutex_destroy(&b->mutex); error(EXIT_FAILURE, err, "%s: inializing cond", __func__); } /* set the values: */ b->limit=limit; b->condfinished=b->count=0; return 0; } /* Suspend the calling thread (tell it to wait), until the limiting number of barriers is reached by the other threads. When the number isn't reached yet (process goes into the `else'), then we use the `pthread_cond_wait' function, which will wait until a broadcast is announced by another thread that succeeds the `if'. After the thread no longer needs the condition variable, we increment `b->condfinished' so `pthread_barrier_destroy' can know if it should wait (sleep) or continue.*/ int pthread_barrier_wait(pthread_barrier_t *b) { pthread_mutex_lock(&b->mutex); ++b->count; if(b->count >= b->limit) { pthread_cond_broadcast(&b->cond); ++b->condfinished; pthread_mutex_unlock(&b->mutex); return 1; } else { /* Initially b->count is smaller than b->limit, otherwise control would never have reached here. However, when it get to `pthread_cond_wait', this thread goes into a suspended period and is only awaken when a broad-cast is made. But we only want this thread to finish when b->count >= b->limit, so we have this while loop. */ while(b->count < b->limit) pthread_cond_wait(&b->cond, &b->mutex); ++b->condfinished; pthread_mutex_unlock(&b->mutex); return 0; } } /* Wait until all the threads that were blocked behind this barrier have finished (don't need the mutex and condition variable anymore. Then destroy the two. After this function, you can safely re-use the pthread_barrier_t structure. */ int pthread_barrier_destroy(pthread_barrier_t *b) { struct timespec request, remaining; /* Wait until no more threads need the barrier. */ request.tv_sec=0; request.tv_nsec=GAL_THREADS_BARRIER_DESTROY_NANOSECS; while( b->condfinished < b->limit ) nanosleep(&request, &remaining); /* Destroy the condition variable and mutex */ pthread_cond_destroy(&b->cond); pthread_mutex_destroy(&b->mutex); return 0; } #endif /* GAL_CONFIG_HAVE_PTHREAD_BARRIER == 0 */ /*******************************************************************/ /************ Thread utilities **************/ /*******************************************************************/ size_t gal_threads_number() { return num_processors(NPROC_CURRENT); } /* We have `numactions` jobs and we want their indexs to be divided between `numthreads` CPU threads. This function will give each index to a thread such that the maximum difference between the number of images for each thread is 1. The results will be saved in a 2D array of `outthrdcols` columns and each row will finish with a (size_t) -1, which is larger than any possible index!. */ void gal_threads_dist_in_threads(size_t numactions, size_t numthreads, size_t **outthrds, size_t *outthrdcols) { size_t *sp, *fp; size_t i, *thrds, thrdcols; *outthrdcols = thrdcols = numactions/numthreads+2; errno=0; thrds=*outthrds=malloc(numthreads*thrdcols*sizeof *thrds); if(thrds==NULL) error(EXIT_FAILURE, errno, "%s: allocating thrds", __func__); /* Initialize all the elements to NONINDEX. */ fp=(sp=thrds)+numthreads*thrdcols; do *sp=GAL_BLANK_SIZE_T; while(++spparams); size_t i; for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { THE INDEX OF THE TARGET IS NOW AVAILABLE AS `tprm->indexs[i]'. YOU CAN USE IT IN WHAT EVER MANNER YOU LIKE ALONG WITH THE SET OF VARIABLES/ARRAYS in `prm'. } if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } --------- High-level function --------- int higher_level_function(float *array, size_t num_in_array, int value1) { double value2; struct my_params; size_t numthreads; my_params.value1=value1; my_params.value2=value2; my_params.arary=array; gal_threads_spin_off(run_on_thread, &my_params, num_in_array, numthreads); return 1; } For real world applications of this function, you can also inspect the Gnuastro source. There are also many cases in Gnuastro where we benefit from this function. Please run the following command from the top source directory of Gnuastro to see where: $ grep -r gal_threads_spin_off ./ */ void gal_threads_spin_off(void *(*worker)(void *), void *caller_params, size_t numactions, size_t numthreads) { int err; pthread_t t; /* All thread ids saved in this, not used. */ pthread_attr_t attr; pthread_barrier_t b; struct gal_threads_params *prm; size_t i, *indexs, thrdcols, numbarriers; /* If there are no actions, then just return. */ if(numactions==0) return; /* Sanity check. */ if(numthreads==0) error(EXIT_FAILURE, 0, "%s: the number of threads (`numthreads') " "cannot be zero", __func__); /* Allocate the array of parameters structure structures. */ errno=0; prm=malloc(numthreads*sizeof *prm); if(prm==NULL) { fprintf(stderr, "%zu bytes could not be allocated for prm.", numthreads*sizeof *prm); exit(EXIT_FAILURE); } /* Distribute the actions into the threads: */ gal_threads_dist_in_threads(numactions, numthreads, &indexs, &thrdcols); /* Do the job: when only one thread is necessary, there is no need to spin off one thread, just call the workerfunction directly (spinning off threads is expensive). This is for the generic thread spinner function, not this simple function where `numthreads' is a constant. */ if(numthreads==1) { prm[0].id=0; prm[0].b=NULL; prm[0].indexs=indexs; prm[0].params=caller_params; worker(&prm[0]); } else { /* Initialize the attributes. Note that this running thread (that spinns off the nt threads) is also a thread, so the number the barriers should be one more than the number of threads spinned off. */ numbarriers = (numactions Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include /************************************************************************/ /*************** Error messages ***************/ /************************************************************************/ void gal_tableintern_error_col_selection(char *filename, char *hdu, char *errorstring) { char *c, *name, *command; /* Set the proper pointers. */ if(gal_fits_name_is_fits(filename)) { asprintf(&name, "%s (hdu: %s)", filename, hdu); c=hdu; while(*c!='\0') if(isspace(*c++)) break; asprintf(&command, *c=='\0' ? "%s --hdu=%s" : "%s --hdu=\"%s\"", filename, hdu); } else command=name=filename; /* Abort with with the proper error. */ error(EXIT_FAILURE, 0, "%s: %s\n\nFor more information on selecting " "columns in Gnuastro, please run the following command (press " "`SPACE' to go down and `q' to return to the command-line):\n\n" " $ info gnuastro \"Selecting table columns\"\n\n" "To define a better column selection criteria, you can see " "the list of column meta-data in this table, with the following " "command:\n\n" " $ asttable %s --info\n", name, errorstring, command); } /************************************************************************/ /*************** Formats ***************/ /************************************************************************/ /* Return the type of desired table based on a standard string. */ uint8_t gal_tableintern_string_to_format(char *string) { if(string) /* Its not NULL. */ { if(!strcmp(string, "txt")) return GAL_TABLE_FORMAT_TXT; else if(!strcmp(string,"fits-ascii")) return GAL_TABLE_FORMAT_AFITS; else if(!strcmp(string, "fits-binary")) return GAL_TABLE_FORMAT_BFITS; else return GAL_TABLE_FORMAT_INVALID; } else return GAL_TABLE_FORMAT_INVALID; } char * gal_tableintern_format_as_string(uint8_t tableformat) { switch(tableformat) { case GAL_TABLE_FORMAT_TXT: return "txt"; case GAL_TABLE_FORMAT_AFITS: return "fits-ascii"; case GAL_TABLE_FORMAT_BFITS: return "fits-binary"; default: error(EXIT_FAILURE, 0, "%s: code %d not recognized", __func__, tableformat); return NULL; } } /* In programs, the `searchin' variable is much more easier to format in as a description than an integer (which is what `gal_table_read_cols' needs). This function will check the string value and give the corresponding integer value.*/ uint8_t gal_tableintern_string_to_searchin(char *string) { if(string) /* Its not NULL. */ { if(!strcmp(string, "name")) return GAL_TABLE_SEARCH_NAME; else if(!strcmp(string, "unit")) return GAL_TABLE_SEARCH_UNIT; else if(!strcmp(string, "comment")) return GAL_TABLE_SEARCH_COMMENT; else return GAL_TABLE_SEARCH_INVALID; } else return GAL_TABLE_SEARCH_INVALID; } char * gal_tableintern_searchin_as_string(uint8_t searchin) { switch(searchin) { case GAL_TABLE_SEARCH_NAME: return "name"; case GAL_TABLE_SEARCH_UNIT: return "unit"; case GAL_TABLE_SEARCH_COMMENT: return "comment"; default: error(EXIT_FAILURE, 0, "%s: code %d not recognized as a valid search " "field", __func__, searchin); return NULL; } } /* For programs that output tables, the `--tableformat' option will be used to specify what format the output table should be in. When the output file is a FITS file, there are multiple formats, so to simplify the coding in each program, this function will do a sanity check on the value given to the `--tableformat' parameter. */ void gal_tableintern_check_fits_format(char *filename, int tableformat) { if( filename && gal_fits_name_is_fits(filename) ) { /* When `--tableformat' was not given. */ if(tableformat==GAL_TABLE_FORMAT_INVALID) error(EXIT_FAILURE, 0, "`%s' (output file) is a FITS file but the " "desired format of the FITS table has not been specified with " "the `--tableformat' option. For FITS tables, this option can " "take two values: `fits-ascii', or `fits-binary'", filename); /* When `--tableformat' didn't have the correct value. */ if( tableformat != GAL_TABLE_FORMAT_AFITS && tableformat != GAL_TABLE_FORMAT_BFITS ) error(EXIT_FAILURE, 0, "`%s' (output file) is a FITS file but " "is not a recognized FITS table format. For FITS tables, " "`--tableformat' can take two values: `fits-ascii', or " "`fits-binary'", filename); } } /************************************************************************/ /*************** Printing information ***************/ /************************************************************************/ /* Fill in/adjust the basic information necessary to print a column. This information can be used for printing a plain text file or for FITS ASCII tables. The `fmt' and `lng' should point to pre-allocated arrays. The best way is: `char fmt[2], lng[3];' in the same function calling this. The width and precision, which are also necessary for printing, are updated in the data structure's `disp_width' and `disp_precision' elements. */ void gal_tableintern_col_print_info(gal_data_t *col, int tableformat, char *fmt, char *lng) { size_t j; char **strarr; int maxstrlen, width=0, precision=0; /* First do a sanity check, so we can safly stop checking in the steps below. */ switch(tableformat) { case GAL_TABLE_FORMAT_TXT: case GAL_TABLE_FORMAT_AFITS: break; default: error(EXIT_FAILURE, 0, "%s: is only for plain text or FITS ASCII " "tables. The input `tableformat' code %d not recognized", __func__, tableformat); } /* Set the formats and widths based on the type of the column. Initialize the characters and blank pointer. The long prefix is not necessary for most types, so just initialize it once up here.*/ fmt[0]=fmt[1]=lng[0]=lng[1]=lng[2]='\0'; switch(col->type) { case GAL_TYPE_BIT: error(EXIT_FAILURE, 0, "%s: printing of bit types is currently " "not supported", __func__); break; case GAL_TYPE_STRING: /* Set the basic information. */ fmt[0] = tableformat==GAL_TABLE_FORMAT_TXT ? 's' : 'A'; /* Go through all the strings in the column and find the maximum length to use as printing. If the user asked for a larger width (through the data structure's disp_width element), then set that. */ maxstrlen=0; strarr=col->array; for(j=0;jsize;++j) maxstrlen = ( (int)strlen(strarr[j]) > maxstrlen ? (int)strlen(strarr[j]) : maxstrlen ); width = col->disp_width>maxstrlen ? col->disp_width : maxstrlen; break; case GAL_TYPE_UINT8: case GAL_TYPE_UINT16: case GAL_TYPE_UINT32: case GAL_TYPE_UINT64: /* For the FITS ASCII table, there is only one format for all integers. */ if(tableformat==GAL_TABLE_FORMAT_AFITS) fmt[0]='I'; else switch(col->disp_fmt) { case GAL_TABLE_DISPLAY_FMT_UDECIMAL: fmt[0]='u'; break; case GAL_TABLE_DISPLAY_FMT_OCTAL: fmt[0]='o'; break; case GAL_TABLE_DISPLAY_FMT_HEX: fmt[0]='X'; break; default: fmt[0]='u'; } /* If we have a long type, then make changes. */ if(col->type==GAL_TYPE_UINT64) { lng[0]='l'; width=( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_LINT : col->disp_width ); } else width=( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_INT : col->disp_width ); precision=( col->disp_precision<=0 ? GAL_TABLE_DEF_PRECISION_INT : col->disp_precision ); break; case GAL_TYPE_INT8: case GAL_TYPE_INT16: case GAL_TYPE_INT32: fmt[0] = tableformat==GAL_TABLE_FORMAT_TXT ? 'd' : 'I'; width = ( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_INT : col->disp_width ); precision = ( col->disp_precision<=0 ? GAL_TABLE_DEF_PRECISION_INT : col->disp_precision ); break; case GAL_TYPE_INT64: lng[0] = 'l'; fmt[0] = tableformat==GAL_TABLE_FORMAT_TXT ? 'd' : 'I'; width=( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_LINT : col->disp_width ); precision=( col->disp_precision<=0 ? GAL_TABLE_DEF_PRECISION_INT : col->disp_precision ); break; /* We need a default value (because in most cases, it won't be set. */ case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: /* Set the format. */ switch(col->disp_fmt) { case GAL_TABLE_DISPLAY_FMT_FLOAT: fmt[0] = tableformat==GAL_TABLE_FORMAT_TXT ? 'f' : 'F'; break; case GAL_TABLE_DISPLAY_FMT_EXP: fmt[0] = tableformat==GAL_TABLE_FORMAT_TXT ? 'e' : 'E'; break; case GAL_TABLE_DISPLAY_FMT_GENERAL: fmt[0] = tableformat==GAL_TABLE_FORMAT_TXT ? 'g' : 'E'; break; default: fmt[0] = tableformat==GAL_TABLE_FORMAT_TXT ? 'g' : 'E'; break; } /* Set the width and precision */ switch(col->type) { case GAL_TYPE_FLOAT32: width = ( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_FLT : col->disp_width ); precision = ( col->disp_precision<=0 ? GAL_TABLE_DEF_PRECISION_FLT : col->disp_precision ); break; case GAL_TYPE_FLOAT64: width = ( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_DBL : col->disp_width ); /* CFITSIO doesn't recognize the double precision defined here for ASCII FITS tables. */ precision = ( col->disp_precision<=0 ? ( tableformat==GAL_TABLE_FORMAT_TXT ? GAL_TABLE_DEF_PRECISION_DBL : GAL_TABLE_DEF_PRECISION_FLT ) : col->disp_precision ); break; } break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, col->type); } /* Write the final width and precision into the column's data structure. */ col->disp_width=width; col->disp_precision=precision; } /* Use the input `blank' string and the input column to put the blank value in the column's array. This function should later be generalized into a function to read a string into a given data type (see `gal_data_string_to_array_elem'). It is only here temporarily. */ void gal_tableintern_read_blank(gal_data_t *col, char *blank) { /* If there is nothing to use as blank, then don't continue, note that the column data structure was initialized to mean that there is no blank value. */ if(blank==NULL) return; /* Just for a sanity check, the ndim and array elements should be zero. */ if(col->ndim || col->array) error(EXIT_FAILURE, 0, "%s: the number of dimensions, and the " "`array' element of `col' must be zero", __func__); /* Read the blank value as the given type. If successful, then `gal_data_string_to_type' will return 0. In that case, we need to initialize the necessary paramters to read this data structure correctly. */ if( !gal_type_from_string((void **)(&col->array), blank, col->type) ) { col->dsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, 1, __func__, "col->dsize"); col->dsize[0]=col->ndim=col->size=1; } } gnuastro-0.5/lib/table.c0000644000175000017500000004512513211616535012154 00000000000000/********************************************************************* table -- Functions for I/O on tables. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include /************************************************************************/ /*************** Information about a table ***************/ /************************************************************************/ /* Store the information of each column in a table (either as a text file or as a FITS table) into an array of data structures with `numcols' structures (one data structure for each column). The number of rows is stored in `numrows'. The type of the table (e.g., ascii text file, or FITS binary or ASCII table) will be put in `tableformat' (macros defined in `gnuastro/table.h'. Note that other than the character strings (column name, units and comments), nothing in the data structure(s) will be allocated by this function for the actual data (e.g., the `array' or `dsize' elements). */ gal_data_t * gal_table_info(char *filename, char *hdu, size_t *numcols, size_t *numrows, int *tableformat) { /* Get the table format and size (number of columns and rows). */ if(gal_fits_name_is_fits(filename)) return gal_fits_tab_info(filename, hdu, numcols, numrows, tableformat); else { *tableformat=GAL_TABLE_FORMAT_TXT; return gal_txt_table_info(filename, numcols, numrows); } /* Abort with an error if we get to this point. */ error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s so we can fix " "the problem. Control must not have reached the end of this function", __func__, PACKAGE_BUGREPORT); return NULL; } void gal_table_print_info(gal_data_t *allcols, size_t numcols, size_t numrows) { size_t i; int Nw=3, nw=4, uw=5, tw=4; /* Initial width from label's width */ char *name, *unit, *comment; /* Set the widths to print the column information. The width for the column number can easily be identified from the logarithm of the number of columns. */ Nw=log10(numcols)+1; for(i=0;inw) nw=strlen(allcols[i].name); if(allcols[i].unit && strlen(allcols[i].unit)>uw) uw=strlen(allcols[i].unit); if(allcols[i].type && strlen(gal_type_name(allcols[i].type, 1))>tw) tw=strlen(gal_type_name(allcols[i].type, 1)); } /* We want one column space between the columns for readability, not the exact length, so increment all the numbers. */ Nw+=2; nw+=2; uw+=2; tw+=2; /* Print these column names. */ printf("%-*s%-*s%-*s%-*s%s\n", Nw, "---", nw, "----", uw, "-----", tw, "----", "-------"); printf("%-*s%-*s%-*s%-*s%s\n", Nw, "No.", nw, "Name", uw, "Units", tw, "Type", "Comment"); printf("%-*s%-*s%-*s%-*s%s\n", Nw, "---", nw, "----", uw, "-----", tw, "----", "-------"); /* For each column, print the information, then free them. */ for(i=0;iname; case GAL_TABLE_SEARCH_UNIT: return col->unit; case GAL_TABLE_SEARCH_COMMENT: return col->comment; default: error(EXIT_FAILURE, 0, "%s: the code %d to searchin was not " "recognized", __func__, searchin); } error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "address the problem. Control must not have reached the end of " "this function", __func__, PACKAGE_BUGREPORT); return NULL; } static gal_list_sizet_t * make_list_of_indexs(gal_list_str_t *cols, gal_data_t *allcols, size_t numcols, int searchin, int ignorecase, char *filename, char *hdu, size_t *colmatch) { long tlong; int regreturn; regex_t *regex; gal_list_str_t *tmp; gal_list_sizet_t *indexll=NULL; size_t i, nummatch, colcount=0, len; char *str, *strcheck, *tailptr, *errorstring; /* Go over the given columns. */ if(cols) for(tmp=cols; tmp!=NULL; tmp=tmp->next) { /* Counter for number of columns matched, and length of name. */ nummatch=0; len=strlen(tmp->v); /* REGULAR EXPRESSION: the first and last characters are `/'. */ if( tmp->v[0]=='/' && tmp->v[len-1]=='/' ) { /* Remove the slashes, note that we don't want to change `tmp->v' (because it should be freed later). So first we set the last character to `\0', then define a new string from the first element. */ tmp->v[len-1]='\0'; str = tmp->v + 1; /* Allocate the regex_t structure: */ errno=0; regex=malloc(sizeof *regex); if(regex==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for regex", __func__, sizeof *regex); /* First we have to "compile" the string into the regular expression, see the "POSIX Regular Expression Compilation" section of the GNU C Library. About the case of the string: the FITS standard says: "It is _strongly recommended_ that every field of the table be assigned a unique, case insensitive name with this keyword..." So the column names can be case-sensitive. Here, we don't care about the details of a match, the only important thing is a match, so we are using the REG_NOSUB flag.*/ regreturn=0; regreturn=regcomp(regex, str, ( ignorecase ? RE_SYNTAX_AWK | REG_ICASE : RE_SYNTAX_AWK ) ); if(regreturn) table_regexerrorexit(regreturn, regex, str); /* With the regex structure "compile"d you can go through all the column names. Just note that column names are not mandatory in the FITS standard, so some (or all) columns might not have names, if so `p->tname[i]' will be NULL. */ for(i=0;iv[len-1]='/'; } /* Not regular expression. */ else { tlong=strtol(tmp->v, &tailptr, 0); /* INTEGER: If the string is an integer, then tailptr should point to the null character. If it points to anything else, it shows that we are not dealing with an integer (usable as a column number). So floating point values are also not acceptable. Since it is possible for the users to give zero for the column number, we need to read the string as a number first, then check it here. */ if(*tailptr=='\0') { /* Make sure the number is larger than zero! */ if(tlong<=0) error(EXIT_FAILURE, 0, "%s: column numbers must be " "positive (not zero or negative). You have asked " "for column number %ld", __func__, tlong); /* Check if the given value is not larger than the number of columns in the input catalog (note that the user is counting from 1, not 0!) */ if(tlong>numcols) error(EXIT_FAILURE, 0, "%s: has %zu columns, but you " "have asked for column number %ld", gal_fits_name_save_as_string(filename, hdu), numcols, tlong); /* Everything seems to be fine, put this column number in the output column numbers linked list. Note that internally, the column numbers start from 0, not 1.*/ gal_list_sizet_add(&indexll, tlong-1); ++nummatch; } /* EXACT MATCH: */ else { /* Go through all the desired column information and add the column number when there is a match. */ for(i=0;iv, strcheck) : !strcmp(tmp->v, strcheck) ) ) { ++nummatch; gal_list_sizet_add(&indexll, i); } } } } /* If there was no match, then report an error. This can only happen for string matches, not column numbers, for numbers, the checks are done (and program is aborted) before this step. */ if(nummatch==0) { asprintf(&errorstring, "`%s' didn't match any of the column %ss.", tmp->v, gal_tableintern_searchin_as_string(searchin)); gal_tableintern_error_col_selection(filename, hdu, errorstring); } /* Keep the value of `nummatch' if the user requested it. */ if(colmatch) colmatch[colcount++]=nummatch; } /* cols==NULL */ else for(i=0;i Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /**************************************************************** ******** Simple statistics ******* ****************************************************************/ /* Return the number of non-blank elements in an array as a single element, uint64 type data structure. */ gal_data_t * gal_statistics_number(gal_data_t *input) { size_t dsize=1; uint64_t counter=0; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_UINT64, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* If there is no blank values in the input, then the total number is just the size. */ if(gal_blank_present(input, 0)) /* `{}' necessary for `else'. */ { GAL_TILE_PARSE_OPERATE(input, NULL, 0, 1, {++counter;}); } else counter = input->size; /* Write the value into memory. */ *((uint64_t *)(out->array)) = counter; return out; } /* Return the minimum (non-blank) value of a dataset in the same type as the dataset. Note that a NaN (blank in floating point) will fail on any comparison. So when finding the minimum or maximum, when the blank value is NaN, we can safely assume there is no blank value at all. */ gal_data_t * gal_statistics_minimum(gal_data_t *input) { size_t dsize=1, n=0; gal_data_t *out=gal_data_alloc(NULL, gal_tile_block(input)->type, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* Initialize the output with the maximum possible value. */ gal_type_max(out->type, out->array); /* Parse the full input. */ GAL_TILE_PARSE_OPERATE(input, out, 0, 0, {*o = *i < *o ? *i : *o; ++n;}); /* If there were no usable elements, set the output to blank, then return. */ if(n==0) gal_blank_write(out->array, out->type); return out; } /* Return the maximum (non-blank) value of a dataset in the same type as the dataset. See explanations of `gal_statistics_minimum'. */ gal_data_t * gal_statistics_maximum(gal_data_t *input) { size_t dsize=1, n=0; gal_data_t *out=gal_data_alloc(NULL, gal_tile_block(input)->type, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* Initialize the output with the minimum possible value. */ gal_type_min(out->type, out->array); /* Parse the full input. */ GAL_TILE_PARSE_OPERATE(input, out, 0, 0, {*o = *i > *o ? *i : *o; ++n;}); /* If there were no usable elements, set the output to blank, then return. */ if(n==0) gal_blank_write(out->array, out->type); return out; } /* Return the sum of the input dataset as a single element dataset of type float64. */ gal_data_t * gal_statistics_sum(gal_data_t *input) { size_t dsize=1, n=0; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* Parse the dataset. Note that in `gal_data_alloc' we set the `clear' flag to 1, so it will be 0.0f. */ GAL_TILE_PARSE_OPERATE(input, out, 0, 1, {++n; *o += *i;}); /* If there were no usable elements, set the output to blank, then return. */ if(n==0) gal_blank_write(out->array, out->type); return out; } /* Return the mean of the input dataset as a float64 type single-element dataset. */ gal_data_t * gal_statistics_mean(gal_data_t *input) { size_t dsize=1, n=0; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* Parse the dataset. Note that in `gal_data_alloc' we set the `clear' flag to 1, so it will be 0.0f. */ GAL_TILE_PARSE_OPERATE(input, out, 0, 1, {++n; *o += *i;}); /* Above, we calculated the sum and number, so if there were any elements in the dataset (`n!=0'), divide the sum by the number, otherwise, put a blank value in the output. */ if(n) *((double *)(out->array)) /= n; else gal_blank_write(out->array, out->type); return out; } /* Return the standard deviation of the input dataset as a single element dataset of type float64. */ gal_data_t * gal_statistics_std(gal_data_t *input) { size_t dsize=1, n=0; double s=0.0f, s2=0.0f; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* Parse the input. */ GAL_TILE_PARSE_OPERATE(input, out, 0, 1, {++n; s += *i; s2 += *i * *i;}); /* Write the standard deviation into the output. */ *((double *)(out->array)) = n ? sqrt( (s2-s*s/n)/n ) : GAL_BLANK_FLOAT64; return out; } /* Return the mean and standard deviation of a dataset in one run in type float64. The output is a two element data structure, with the first value being the mean and the second value the standard deviation. */ gal_data_t * gal_statistics_mean_std(gal_data_t *input) { size_t dsize=2, n=0; double s=0.0f, s2=0.0f; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* Parse the input. */ GAL_TILE_PARSE_OPERATE(input, out, 0, 1, {++n; s += *i; s2 += *i * *i;}); /* Write in the output values and return. */ ((double *)(out->array))[0] = n ? s/n : GAL_BLANK_FLOAT64; ((double *)(out->array))[1] = n ? sqrt( (s2-s*s/n)/n ) : GAL_BLANK_FLOAT64; return out; } /* The input is a sorted array with no blank values, we want the median value to be put inside the already allocated space which is pointed to by `median'. It is in the same type as the input. */ #define MED_IN_SORTED(IT) { \ IT *a=sorted->array; \ *(IT *)median = n%2 ? a[n/2] : (a[n/2]+a[n/2-1])/2; \ } static void statistics_median_in_sorted_no_blank(gal_data_t *sorted, void *median) { size_t n=sorted->size; switch(sorted->type) { case GAL_TYPE_UINT8: MED_IN_SORTED( uint8_t ); break; case GAL_TYPE_INT8: MED_IN_SORTED( int8_t ); break; case GAL_TYPE_UINT16: MED_IN_SORTED( uint16_t ); break; case GAL_TYPE_INT16: MED_IN_SORTED( int16_t ); break; case GAL_TYPE_UINT32: MED_IN_SORTED( uint32_t ); break; case GAL_TYPE_INT32: MED_IN_SORTED( int32_t ); break; case GAL_TYPE_UINT64: MED_IN_SORTED( uint64_t ); break; case GAL_TYPE_INT64: MED_IN_SORTED( int64_t ); break; case GAL_TYPE_FLOAT32: MED_IN_SORTED( float ); break; case GAL_TYPE_FLOAT64: MED_IN_SORTED( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, sorted->type); } } /* Return the median value of the dataset in the same type as the input as a one element dataset. If the `inplace' flag is set, the input data structure will be modified: it will have no blank values and will be sorted (increasing). */ gal_data_t * gal_statistics_median(gal_data_t *input, int inplace) { size_t dsize=1; gal_data_t *nbs=gal_statistics_no_blank_sorted(input, inplace);; gal_data_t *out=gal_data_alloc(NULL, nbs->type, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* Write the median. */ statistics_median_in_sorted_no_blank(nbs, out->array); /* Clean up (if necessary), then return the output */ if(nbs!=input) gal_data_free(nbs); return out; } /* For a given size, return the index (starting from zero) that is at the given quantile. */ size_t gal_statistics_quantile_index(size_t size, double quantile) { double floatindex; /* Some sanity checks. */ if(size==0) { error(0, 0, "%s: `size' is 0. The quantile is not defined for " "a zero-sized array\n", __func__); return GAL_BLANK_SIZE_T; } if(quantile<0.0f || quantile>1.0f) error(EXIT_FAILURE, 0, "%s: the input quantile should be between 0.0 " "and 1.0 (inclusive). You have asked for %g", __func__, quantile); /* Find the index of the quantile. */ floatindex=(double)(size-1)*quantile; /* printf("quantile: %f, size: %zu, findex: %f\n", quantile, size, floatindex); */ /* Note that in the conversion from float to size_t, the floor integer value of the float will be used. */ if( floatindex - (int)floatindex > 0.5 ) return floatindex+1; else return floatindex; } /* Return a single element dataset of the same type as input keeping the value that has the given quantile. */ gal_data_t * gal_statistics_quantile(gal_data_t *input, double quantile, int inplace) { void *blank; size_t dsize=1, index; gal_data_t *nbs=gal_statistics_no_blank_sorted(input, inplace); gal_data_t *out=gal_data_alloc(NULL, nbs->type, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* Find the index of the quantile. */ index=gal_statistics_quantile_index(nbs->size, quantile); /* Write the value at this index into the output. */ if(index==GAL_BLANK_SIZE_T) { blank=gal_data_malloc_array(nbs->type, 1, __func__, "blank"); memcpy(out->array, blank, gal_type_sizeof(nbs->type)); free(blank); } else memcpy(out->array, gal_data_ptr_increment(nbs->array, index, nbs->type), gal_type_sizeof(nbs->type)); /* Clean up and return. */ if(nbs!=input) gal_data_free(nbs); return out; } /* Return the index of the (first) point in the sorted dataset that has the closest value to `value' (which has to be the same type as the `input' dataset). */ #define STATS_QFUNC(IT) { \ IT *r, *a=nbs->array, *af=a+nbs->size, v=*((IT *)(value->array)); \ \ /* For a reference. Since we are comparing with the previous. */ \ /* element, we need to start with the second element.*/ \ r=a++; \ \ /* Increasing array: */ \ if( *a < *(a+1) ) \ do if(*a>v) { if( v - *(a-1) < *a - v ) --a; break; } while(++atype!=value->type) error(EXIT_FAILURE, 0, "%s: the types of the input dataset and requested " "value have to be the same", __func__); /* Find the result: */ switch(nbs->type) { case GAL_TYPE_UINT8: STATS_QFUNC( uint8_t ); break; case GAL_TYPE_INT8: STATS_QFUNC( int8_t ); break; case GAL_TYPE_UINT16: STATS_QFUNC( uint16_t ); break; case GAL_TYPE_INT16: STATS_QFUNC( int16_t ); break; case GAL_TYPE_UINT32: STATS_QFUNC( uint32_t ); break; case GAL_TYPE_INT32: STATS_QFUNC( int32_t ); break; case GAL_TYPE_UINT64: STATS_QFUNC( uint64_t ); break; case GAL_TYPE_INT64: STATS_QFUNC( int64_t ); break; case GAL_TYPE_FLOAT32: STATS_QFUNC( float ); break; case GAL_TYPE_FLOAT64: STATS_QFUNC( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, nbs->type); } /* Clean up and return. */ if(nbs!=input) gal_data_free(nbs); return index; } /* Return the quantile function of the given value as float64. */ gal_data_t * gal_statistics_quantile_function(gal_data_t *input, gal_data_t *value, int inplace) { double *d; size_t dsize=1; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); size_t ind=gal_statistics_quantile_function_index(input, value, inplace); /* Note that counting of the index starts from 0, so for the quantile we should divided by (size - 1). */ d=out->array; d[0] = ( ind==-1 ? NAN : ((double)ind) / ((double)(input->size - 1)) ); return out; } /*********************************************************************/ /***************** Mode ***********************/ /*********************************************************************/ /* Main structure to keep mode parameters. */ struct statistics_mode_params { gal_data_t *data; /* Sorted input dataset with no blank values. */ size_t lowi; /* Lower quantile of interval. */ size_t midi; /* Index of the mid-interval point. */ size_t midd; /* Maximum CDF distance at the middle point. */ size_t highi; /* Higher quantile of interval. */ float tolerance; /* Tolerance level to terminate search. */ size_t numcheck; /* Number of pixels after mode to check. */ size_t interval; /* Interval to check pixels. */ float mirrordist; /* Distance after mirror to check ( x STD). */ }; /* Macros for the mode finding algorithm. */ #define MODE_MIN_Q 0.01f /* Mode search lower interval quantile. */ #define MODE_MAX_Q 0.55f /* Mode search higher interval quantile. */ #define MODE_GOOD_LQ 0.02f /* Least acceptable mode quantile. */ #define MODE_SYM_LOW_Q 0.01f /* Lower quantile to get symmetricity. */ #define MODE_GOLDEN_RATIO 1.618034f /* Golden ratio: (1+sqrt(5))/2. */ #define MODE_TWO_TAKE_GR 0.38197f /* 2 - Golden ratio. */ #define MODE_MIRROR_ABOVE (size_t)(-1) /* Mirror is above the result. */ /* Given a mirror point (`m'), return the maximum distance between the mirror distribution and the original distribution. The basic idea behind finding the mode is comparing the mirrored CDF (where the mirror is a test for the mode) with the original CDF for a given point. The job of this function is to return the maximum distance, given a mirror point. It takes the index of the mirror that is to be checked, it then finds the maximum difference between the mirrored CDF about the given point and the input CDF. `zf` keeps the value at the mirror (zero) point. `i` is used to count the pixels after the mirror in the mirror distribution. So `m+i` is the index of the mirrored distribution and mf=zf+(zf-a[m-i])=2*zf-a[m-i] is the mirrored flux at this point. Having found `mf', we find the `j` such that a[m+j] has the nearest flux to `mf`. The desired difference between the input CDF and the mirrored one for each `i` is then simply: `j-i`. Once `i` is incremented, `mf` will increase, so to find the new `j` we don't need to begin looking from `j=0`. Remember that the array is sorted, so the desired `j` is definitely larger than the previous `j`. So, if we keep the previous `j` in `prevj` then, all we have to do is to start incrementing `j` from `prevj`. This will really help in speeding up the job :-D. Only for the first element, `prevj=0`. */ #define MIRR_MAX_DIFF(IT) { \ IT *a=p->data->array, zf=a[m], mf=2*zf-a[m-i]; \ \ /* When a[m+j]>mf, we have reached the last pixel to check. Now, */ \ /* we just have to see which one of a[m+j-1] or a[m+j] is closer */ \ /* to `mf'. We then change `j` accordingly and break out of the */ \ /* `j' loop. */ \ for(j=prevj;jmf) \ { \ if( a[m+j]-mf < mf-a[m+j-1] ) \ break; \ else \ { \ j--; \ break; \ } \ } \ } static size_t mode_mirror_max_index_diff(struct statistics_mode_params *p, size_t m) { /* The variables: i: Index on mirror distribution. j: Index on input distribution. prevj: Index of previously checked point in the actual array. mf: (in macro) Value that is approximately equal in both distributions. */ size_t i, j, absdiff, prevj=0, size=p->data->size; size_t maxdiff=0, errordiff=p->mirrordist*sqrt(m); /* printf("###############\n###############\n"); printf("### Mirror pixel: %zu (mirrordist: %f, sqrt(m): %f)\n", m, p->mirrordist, sqrt(m)); printf("###############\n###############\n"); */ /* Go over the mirrored points. */ for(i=1; inumcheck && i<=m && m+iinterval) { /* Find `j': the index of the closest point in the original distribution that has a value similar to the mirror distribution. */ switch(p->data->type) { case GAL_TYPE_UINT8: MIRR_MAX_DIFF( uint8_t ); break; case GAL_TYPE_INT8: MIRR_MAX_DIFF( int8_t ); break; case GAL_TYPE_UINT16: MIRR_MAX_DIFF( uint16_t ); break; case GAL_TYPE_INT16: MIRR_MAX_DIFF( int16_t ); break; case GAL_TYPE_UINT32: MIRR_MAX_DIFF( uint32_t ); break; case GAL_TYPE_INT32: MIRR_MAX_DIFF( int32_t ); break; case GAL_TYPE_UINT64: MIRR_MAX_DIFF( uint64_t ); break; case GAL_TYPE_INT64: MIRR_MAX_DIFF( int64_t ); break; case GAL_TYPE_FLOAT32: MIRR_MAX_DIFF( float ); break; case GAL_TYPE_FLOAT64: MIRR_MAX_DIFF( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, p->data->type); } /* printf("i:%-5zu j:%-5zu diff:%-5d maxdiff: %zu\n", i, j, (int)j-(int)i, maxdiff); */ /* The index of the actual CDF corresponding the the mirrored flux has been found. We want the mirrored distribution to be within the actual distribution, not beyond it, so the only acceptable results are when ij' are acceptable. So, only when `i>j+errordiff' the result is not acceptable! */ if(i>j+errordiff) { maxdiff = MODE_MIRROR_ABOVE; break; } absdiff = i>j ? i-j : j-i; if(absdiff>maxdiff) maxdiff=absdiff; prevj=j; } /* Return the maximum difference */ return maxdiff; } /* Find the mode through the Golden-section search. It is assumed that `mode_mirror_max_index_diff' has one minimum (within the statistical errors) in the function. To find that minimum, the golden section search algorithm is going to used. Read the Wikipedia article for a very nice introduction. In summary we will constantly be finding middle points in the given interval and thus decreasing the interval until a certain tolerance is reached. If the input interval is on points `a' and `b', then the middle point (lets call it `c', where c>a and chighi-p->midi > p->midi-p->lowi) di = p->midi + MODE_TWO_TAKE_GR * (float)(p->highi-p->midi); else di = p->midi - MODE_TWO_TAKE_GR * (float)(p->midi-p->lowi); /* Since these are all indexs (and positive) we don't need an absolute value, highi is also always larger than lowi! In some cases, the first (standard) condition might be satisfied, while highi-lowi<=2. In such cases, also jump out! */ if( (p->highi - p->lowi) < p->tolerance*(p->midi+di) || (p->highi - p->lowi) <= 3) return (p->highi+p->lowi)/2; /* Find the maximum difference for this mirror point. */ dd = mode_mirror_max_index_diff(p, di); /*------------------------------------------------------------------ { static int counter=1; char outname[500], command[1000]; char histsname[500], cfpsname[500]; sprintf(outname, "%dcmp.pdf", counter); sprintf(cfpsname, "%dcfps.txt", counter); sprintf(histsname, "%dhists.txt", counter); gal_mode_make_mirror_plots(p->sorted, p->size, di, histsname, cfpsname); sprintf(command, "./plot.py %s %s %s", histsname, cfpsname, outname); system(command); } -------------------------------------------------------------------*/ /* printf("lowi:%-5zu\tmidi:%-5zu(midd: %d)\thighi:%-5zu ----> " "dq: %-5zu di: %d\n", p->lowi, p->midi, (int)p->midd, p->highi, di, (int)dd); */ /* +++++++++++++ Start of addition to the golden section search. The mirrored distribution's cumulative frequency plot has be lower than the actual's cfp. If it isn't, `di` will be MODE_MIRROR_ABOVE. In this case, the normal golden section minimization is not going to give us what we want. So we have this modification. In such cases, we want the search to go to the lower interval. */ if(dd==MODE_MIRROR_ABOVE) { if( p->midi < di ) { p->highi=di; return mode_golden_section(p); } else { p->highi=p->midi; p->midi=di; p->midd=dd; return mode_golden_section(p); } } /* End of addition to the golden section search. +++++++++++++*/ /* This is the standard golden section search: */ if(ddmidd) { if(p->highi-p->midi > p->midi-p->lowi) { p->lowi = p->midi; p->midi = di; p->midd = dd; return mode_golden_section(p); } else { p->highi = p->midi; p->midi = di; p->midd = dd; return mode_golden_section(p); } } else { if(p->highi-p->midi > p->midi-p->lowi) { p->highi = di; return mode_golden_section(p); } else { p->lowi = di; return mode_golden_section(p); } } } /* Once the mode is found, we need to do a quality control. This quality control is the measure of its symmetricity. Let's assume the mode index is at `m', since an index is just a count, from the Poisson distribution, the error in `m' is sqrt(m). Now, let's take `b' to be the first point that the difference between the cumulative distribution of the mirror and actual data deviate more than sqrt(m). For a scale parameter, lets assume that the index of 5% of `m` is `a`. We could have taken the distribution minimum, but the scatter in the minimum can be too high! Now, the "symmetricity" of the mode can be defined as: (b-m)/(m-a). For a completly symmetric mode, this should be 1. Note that the search for `b` only goes to the 95% of the distribution. */ #define MODE_SYM(IT) { \ IT *a=p->data->array, af=0, bf=0, mf=0, fi; \ \ /* Set the values at the mirror and at `a' (see above). */ \ mf=a[m]; \ af=a[ gal_statistics_quantile_index(2*m+1, MODE_SYM_LOW_Q) ]; \ \ /* This loop is very similar to that of */ \ /* `mode_mirror_max_index_diff'. It will find the index where the */\ /* difference between the two cumulative frequency plots exceeds */ \ /* that of the error in the mirror index.*/ \ for(i=1; ifi) \ { \ if( a[m+j]-fi < fi-a[m+j-1] ) \ break; \ else \ { \ j--; \ break; \ } \ } \ \ if(i>j+errdiff || j>i+errdiff) \ { \ bi=m+i; \ break; \ } \ prevj=j; \ } \ \ /* bi==0 shows that no point with a larger difference could be */ \ /* found. So bi should be set to the end of the search region. */ \ if(bi==0) bi=topi; \ \ bf = *(IT *)b_val = a[bi]; \ /*printf("%zu: %f,%f,%f\n", m, (double)af, (double)mf, (double)bf);*/ \ \ /* For a bad result, return 0 (which will not output any mode). */ \ return bf==af ? 0 : (bf-mf)/(mf-af); \ } static double mode_symmetricity(struct statistics_mode_params *p, size_t m, void *b_val) { size_t i, j, bi=0, topi, errdiff, prevj=0, size=p->data->size; /* Set the basic constants. */ topi = 2*m>size-1 ? size-1 : 2*m; errdiff = p->mirrordist * sqrt(m); /* Do the process. */ switch(p->data->type) { case GAL_TYPE_UINT8: MODE_SYM( uint8_t ); break; case GAL_TYPE_INT8: MODE_SYM( int8_t ); break; case GAL_TYPE_UINT16: MODE_SYM( uint16_t ); break; case GAL_TYPE_INT16: MODE_SYM( int16_t ); break; case GAL_TYPE_UINT32: MODE_SYM( uint32_t ); break; case GAL_TYPE_INT32: MODE_SYM( int32_t ); break; case GAL_TYPE_UINT64: MODE_SYM( uint64_t ); break; case GAL_TYPE_INT64: MODE_SYM( int64_t ); break; case GAL_TYPE_FLOAT32: MODE_SYM( float ); break; case GAL_TYPE_FLOAT64: MODE_SYM( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, p->data->type); } /* Control shouldn't reach here! */ error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s so we can " "address the problem. Control must not have reached the end of this " "function", __func__, PACKAGE_BUGREPORT); return NAN; } /* Return the mode and related parameters in a float64 `gal_data_t' with the following elements in its array, the array: array[0]: mode array[1]: mode quantile. array[2]: symmetricity. array[3]: value at the end of symmetricity. The inputs are: - `input' is the input dataset, it doesn't have to be sorted and can have blank values. - `mirrordist' is the maximum distance after the mirror point to check as a multiple of sigma. - `inplace' is either 0 or 1. If it is 1 and the input array has blank values and is not sorted, then the removal of blank values and sorting will occur in-place (input will be modified): all blank elements in the input array will be removed and it will be sorted. */ gal_data_t * gal_statistics_mode(gal_data_t *input, float mirrordist, int inplace) { double *oa; size_t modeindex; size_t dsize=4, mdsize=1; struct statistics_mode_params p; int type=gal_tile_block(input)->type; gal_data_t *tmptype=gal_data_alloc(NULL, type, 1, &mdsize, NULL, 1, -1, NULL, NULL, NULL); gal_data_t *b_val=gal_data_alloc(NULL, type, 1, &mdsize, NULL, 1, -1, NULL, NULL, NULL); gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* A small sanity check. */ if(mirrordist<=0) error(EXIT_FAILURE, 0, "%s: %f not acceptable as a value to " "`mirrordist'. Only positive values can be given to it", __func__, mirrordist); /* Make sure the input doesn't have blank values and is sorted. */ p.data=gal_statistics_no_blank_sorted(input, inplace); /* It can happen that the whole array is blank. In such cases, `p.data->size==0', so set all output elements to NaN and return. */ oa=out->array; if(p.data->size==0) { oa[0]=oa[1]=oa[2]=oa[3]=NAN; return out; } /* Basic constants. */ p.tolerance = 0.01; p.mirrordist = mirrordist; p.numcheck = p.data->size/2; /* Fill in the interval: Checking every single element is over-kill, so if the dataset is large enough, we'll set an interval to only check elements at an interval (so only 1000 elements are checked). */ p.interval = p.numcheck>1000 ? p.numcheck/1000 : 1; /* Set the lower and higher acceptable indexes for the mode based on quantiles. */ p.lowi = gal_statistics_quantile_index(p.data->size, MODE_MIN_Q); p.highi = gal_statistics_quantile_index(p.data->size, MODE_MAX_Q); /* Having set the low and higher interval values, we will set the first middle point and also the maximum distance on that point. This is necessary to start the iteration. */ p.midi = ( ( (float)p.highi + MODE_GOLDEN_RATIO * (float)p.lowi ) / ( 1 + MODE_GOLDEN_RATIO ) ); p.midd = mode_mirror_max_index_diff(&p, p.midi); /* Do the golden-section search iteration, read the mode value from the input array and save it in the `tmptype' data structure that has the same type as the input. */ modeindex = mode_golden_section(&p); memcpy( tmptype->array, gal_data_ptr_increment(p.data->array, modeindex, p.data->type), gal_type_sizeof(p.data->type) ); /* Convert the mode (which is in the same type as the input at this stage) to float64. */ tmptype=gal_data_copy_to_new_type_free(tmptype, GAL_TYPE_FLOAT64); /* Put the first three values into the output structure. */ oa[0] = *((double *)(tmptype->array)); oa[1] = ((double)modeindex) / ((double)(p.data->size-1)); oa[2] = mode_symmetricity(&p, modeindex, b_val->array); /* If the symmetricity is good, put it in the output, otherwise set all output values to NaN. */ if(oa[2]>GAL_STATISTICS_MODE_GOOD_SYM) { b_val=gal_data_copy_to_new_type_free(b_val, GAL_TYPE_FLOAT64); oa[3] = *((double *)(b_val->array)); } else oa[0]=oa[1]=oa[2]=oa[3]=NAN; /* For a check: printf("mode: %g\nquantile: %g\nsymmetricity: %g\nsym value: %g\n", oa[0], oa[1], oa[2], oa[3]); */ /* Clean up (if necessary), then return the output */ if(p.data!=input) gal_data_free(p.data); gal_data_free(tmptype); gal_data_free(b_val); return out; } /* Make the mirror array. */ #define STATS_MKMIRROR(IT) { \ IT *a=noblank_sorted->array, *m=mirror->array; \ IT zf=a[index]; \ *mirror_val=zf; \ for(i=0;i<=index;++i) m[i] = a[i]; \ for(i=1;i<=index;++i) m[index+i] = 2 * zf - m[index - i]; \ } static gal_data_t * statistics_make_mirror(gal_data_t *noblank_sorted, size_t index, double *mirror_val) { size_t i, dsize = 2*index+1; gal_data_t *mirror=gal_data_alloc(NULL, noblank_sorted->type, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* Make sure the index is less than or equal to the number of elements. */ if( index >= noblank_sorted->size ) error(EXIT_FAILURE, 0, "%s: the index value must be less than or equal " "to the number of elements in the input, but it isn't: index: " "%zu, size of input: %zu", __func__, index, noblank_sorted->size); /* Fill in the mirror array. */ switch(noblank_sorted->type) { case GAL_TYPE_UINT8: STATS_MKMIRROR( uint8_t ); break; case GAL_TYPE_INT8: STATS_MKMIRROR( int8_t ); break; case GAL_TYPE_UINT16: STATS_MKMIRROR( uint16_t ); break; case GAL_TYPE_INT16: STATS_MKMIRROR( int16_t ); break; case GAL_TYPE_UINT32: STATS_MKMIRROR( uint32_t ); break; case GAL_TYPE_INT32: STATS_MKMIRROR( int32_t ); break; case GAL_TYPE_UINT64: STATS_MKMIRROR( uint64_t ); break; case GAL_TYPE_INT64: STATS_MKMIRROR( int64_t ); break; case GAL_TYPE_FLOAT32: STATS_MKMIRROR( float ); break; case GAL_TYPE_FLOAT64: STATS_MKMIRROR( double ); break; } /* Return the mirrored distribution. */ return mirror; } /* Make a mirrored histogram and cumulative frequency plot with the mirror distribution of the input with a value at `value'. The output is a linked list of data structures: the first is the bins with one bin at the mirror point, the second is the histogram with a maximum of one and the third is the cumulative frequency plot. */ gal_data_t * gal_statistics_mode_mirror_plots(gal_data_t *input, gal_data_t *value, size_t numbins, int inplace, double *mirror_val) { gal_data_t *mirror, *bins, *hist, *cfp; gal_data_t *nbs=gal_statistics_no_blank_sorted(input, inplace); size_t ind=gal_statistics_quantile_function_index(nbs, value, inplace); /* If the given mirror was outside the range of the input, then index will be 0 (below the range) or -1 (above the range), in that case, we should return NULL. */ if(ind==-1 || ind==0) return NULL; /* Make the mirror array. */ mirror=statistics_make_mirror(nbs, ind, mirror_val); /* Set the bins for histogram and cdf. */ bins=gal_statistics_regular_bins(mirror, NULL, numbins, *mirror_val); /* Make the histogram: set it's maximum value to 1 for a nice comparison with the CDF. */ hist=gal_statistics_histogram(mirror, bins, 0, 1); /* Make the cumulative frequency plot. */ cfp=gal_statistics_cfp(mirror, bins, 1); /* Set the pointers to make a table and return. */ bins->next=hist; hist->next=cfp; return bins; } /**************************************************************** ******** Sort ******* ****************************************************************/ /* Check if the given dataset is sorted. Output values are: - 0: Dataset is not sorted. - 1: Dataset is sorted and increasing or equal. - 2: dataset is sorted and decreasing. */ #define IS_SORTED(IT) { \ IT *aa=input->array, *a=input->array, *af=a+input->size-1; \ if(a[1]>=a[0]) do if( *(a+1) < *a ) break; while(++a *a ) break; while(++a=aa[0] \ ? GAL_STATISTICS_SORTED_INCREASING \ : GAL_STATISTICS_SORTED_DECREASING ) \ : GAL_STATISTICS_SORTED_NOT ); \ } int gal_statistics_is_sorted(gal_data_t *input) { /* A one-element dataset can be considered, sorted, so we'll just return 1 (for sorted and increasing). */ if(input->size==1) return GAL_STATISTICS_SORTED_INCREASING; /* Do the check. */ switch(input->type) { case GAL_TYPE_UINT8: IS_SORTED( uint8_t ); break; case GAL_TYPE_INT8: IS_SORTED( int8_t ); break; case GAL_TYPE_UINT16: IS_SORTED( uint16_t ); break; case GAL_TYPE_INT16: IS_SORTED( int16_t ); break; case GAL_TYPE_UINT32: IS_SORTED( uint32_t ); break; case GAL_TYPE_INT32: IS_SORTED( int32_t ); break; case GAL_TYPE_UINT64: IS_SORTED( uint64_t ); break; case GAL_TYPE_INT64: IS_SORTED( int64_t ); break; case GAL_TYPE_FLOAT32: IS_SORTED( float ); break; case GAL_TYPE_FLOAT64: IS_SORTED( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } /* Control shouldn't reach this point. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can fix the " "problem. Control must not have reached the end of this function", __func__, PACKAGE_BUGREPORT); return -1; } /* This function is ignorant to blank values, if you want to make sure there is no blank values, you can call `gal_blank_remove' first. */ #define STATISTICS_SORT(QSORT_F) { \ qsort(input->array, input->size, gal_type_sizeof(input->type), QSORT_F); \ } void gal_statistics_sort_increasing(gal_data_t *input) { switch(input->type) { case GAL_TYPE_UINT8: STATISTICS_SORT(gal_qsort_uint8_increasing); break; case GAL_TYPE_INT8: STATISTICS_SORT(gal_qsort_int8_increasing); break; case GAL_TYPE_UINT16: STATISTICS_SORT(gal_qsort_uint16_increasing); break; case GAL_TYPE_INT16: STATISTICS_SORT(gal_qsort_int16_increasing); break; case GAL_TYPE_UINT32: STATISTICS_SORT(gal_qsort_uint32_increasing); break; case GAL_TYPE_INT32: STATISTICS_SORT(gal_qsort_int32_increasing); break; case GAL_TYPE_UINT64: STATISTICS_SORT(gal_qsort_uint64_increasing); break; case GAL_TYPE_INT64: STATISTICS_SORT(gal_qsort_int64_increasing); break; case GAL_TYPE_FLOAT32: STATISTICS_SORT(gal_qsort_float32_increasing); break; case GAL_TYPE_FLOAT64: STATISTICS_SORT(gal_qsort_float64_increasing); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } } /* See explanations above `gal_statistics_sort_increasing'. */ void gal_statistics_sort_decreasing(gal_data_t *input) { switch(input->type) { case GAL_TYPE_UINT8: STATISTICS_SORT(gal_qsort_uint8_decreasing); break; case GAL_TYPE_INT8: STATISTICS_SORT(gal_qsort_int8_decreasing); break; case GAL_TYPE_UINT16: STATISTICS_SORT(gal_qsort_uint16_decreasing); break; case GAL_TYPE_INT16: STATISTICS_SORT(gal_qsort_int16_decreasing); break; case GAL_TYPE_UINT32: STATISTICS_SORT(gal_qsort_uint32_decreasing); break; case GAL_TYPE_INT32: STATISTICS_SORT(gal_qsort_int32_decreasing); break; case GAL_TYPE_UINT64: STATISTICS_SORT(gal_qsort_uint64_decreasing); break; case GAL_TYPE_INT64: STATISTICS_SORT(gal_qsort_int64_decreasing); break; case GAL_TYPE_FLOAT32: STATISTICS_SORT(gal_qsort_float32_decreasing); break; case GAL_TYPE_FLOAT64: STATISTICS_SORT(gal_qsort_float64_decreasing); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } } /* Return a dataset that has doesn't have blank values and is sorted. If the `inplace' value is set to 1, then the input array will be modified, otherwise, a new array will be allocated with the desired properties. So if it is already sorted and has blank values, the `inplace' variable is irrelevant. This function can also work on tiles, in that case, `inplace' is useless, because a tile doesn't own its dataset and the dataset is not contiguous. */ gal_data_t * gal_statistics_no_blank_sorted(gal_data_t *input, int inplace) { int sortstatus; gal_data_t *contig, *noblank, *sorted; /* If this is a tile, then first we have to copy it into a contiguous piece of memory. After this step, we will only be dealing with `contig' (for a contiguous patch of memory). */ if(input->block) { /* Copy the input into a contiguous patch of memory. */ contig=gal_data_copy(input); /* When the data was a tile, we have already copied the array into a separate allocated space. So to avoid any further copying, we will just set the `inplace' variable to 1. */ inplace=1; } else contig=input; /* Make sure there is no blanks in the array that will be used. After this step, we won't be dealing with `input' any more, but with `noblank'. */ if( gal_blank_present(contig, inplace) ) { /* See if we should allocate a new dataset to remove blanks or if we can use the actual contiguous patch of memory. */ noblank = inplace ? contig : gal_data_copy(contig); gal_blank_remove(noblank); /* If we are working in place, then mark that there are no blank pixels. */ if(inplace) { noblank->flag |= GAL_DATA_FLAG_BLANK_CH; noblank->flag &= ~GAL_DATA_FLAG_HASBLANK; } } else noblank=contig; /* Make sure the array is sorted. After this step, we won't be dealing with `noblank' any more but with `sorted'. */ sortstatus=gal_statistics_is_sorted(noblank); if( sortstatus ) { sorted=noblank; sorted->status=sortstatus; } else { if(inplace) sorted=noblank; else { if(noblank!=input) /* no-blank has already been allocated. */ sorted=noblank; else sorted=gal_data_copy(noblank); } gal_statistics_sort_increasing(sorted); sorted->status=GAL_STATISTICS_SORTED_INCREASING; } /* Return final array. */ return sorted; } /**************************************************************** ******** Histogram and Cumulative Frequency Plot ******* ****************************************************************/ /* Generate an array of regularly spaced elements. Input arguments: * The `input' set you want to apply the bins to. This is only necessary if the range argument is not complete, see below. If `range' has all the necessary information, you can pass a NULL pointer for `input'. * The `inrange' data structure keeps the desired range along each dimension of the input data structure, it has to be in float32 type. Note that if - If you want the full range of the dataset (in any dimensions, then just set `range' to NULL and the range will be specified from the minimum and maximum value of the dataset. - If there is one element for each dimension in range, then it is viewed as a quantile (Q), and the range will be: `Q to 1-Q'. - If there are two elements for each dimension in range, then they are assumed to be your desired minimum and maximum values. When either of the two are NaN, the minimum and maximum will be calculated for it. * The number of bins: must be larger than 0. * `onebinstart' A desired value for onebinstart. Note that with this option, the bins won't start and end exactly on the given range values, it will be slightly shifted to accommodate this request. The output is a 1D array (column) of type double, it has to be double to account for small differences on the bin edges. */ gal_data_t * gal_statistics_regular_bins(gal_data_t *input, gal_data_t *inrange, size_t numbins, double onebinstart) { size_t i; gal_data_t *bins, *tmp, *range; double *b, *ra, min=NAN, max=NAN, hbw, diff, binwidth; /* Some sanity checks. */ if(numbins==0) error(EXIT_FAILURE, 0, "%s: `numbins' cannot be given a value of 0", __func__); /* Set the minimum and maximum values. */ if(inrange && inrange->size) { /* Make sure we are dealing with a double type range. */ if(inrange->type==GAL_TYPE_FLOAT64) range=inrange; else range=gal_data_copy_to_new_type(inrange, GAL_TYPE_FLOAT64); /* Set the minimum and maximum of the bins. */ ra=range->array; if( (range->size)%2 ) error(EXIT_FAILURE, 0, "%s: quantile ranges are not implemented yet", __func__); else { /* If the minimum isn't set (is blank), find it. */ if( isnan(ra[0]) ) { tmp=gal_data_copy_to_new_type_free(gal_statistics_minimum(input), GAL_TYPE_FLOAT64); min=*((double *)(tmp->array)); gal_data_free(tmp); } else min=ra[0]; /* For the maximum, when it isn't set, we'll add a very small value, so all points are included. */ if( isnan(ra[1]) ) { tmp=gal_data_copy_to_new_type_free(gal_statistics_maximum(input), GAL_TYPE_FLOAT64); max=*((double *)(tmp->array))+1e-6; gal_data_free(tmp); } else max=ra[1]; } /* Clean up: if `range' was allocated. */ if(range!=inrange) gal_data_free(range); } /* No range was given, find the minimum and maximum. */ else { tmp=gal_data_copy_to_new_type_free(gal_statistics_minimum(input), GAL_TYPE_FLOAT64); min=*((double *)(tmp->array)); gal_data_free(tmp); tmp=gal_data_copy_to_new_type_free(gal_statistics_maximum(input), GAL_TYPE_FLOAT64); max=*((double *)(tmp->array)) + 1e-6; gal_data_free(tmp); } /* Allocate the space for the bins. */ bins=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &numbins, NULL, 0, input->minmapsize, "bin_center", input->unit, "Center value of each bin."); /* Set central bin values. */ b=bins->array; hbw = ( binwidth=(max-min)/numbins )/2; for(i=0;i onebinstart) break; if( i != numbins-1 ) { diff = onebinstart - (b[i]-hbw); for(i=0;istatus=GAL_STATISTICS_BINS_REGULAR; return bins; } /* Make a histogram of all the elements in the given dataset with bin values that are defined in the `inbins' structure (see `gal_statistics_regular_bins'). `inbins' is not mandatory, if you pass a NULL pointer, the bins structure will be built within this function based on the `numbins' input. As a result, when you have already defined the bins, `numbins' is not used. */ #define HISTOGRAM_TYPESET(IT) { \ IT *a=input->array, *af=a+input->size; \ do if( *a>=min && *astatus!=GAL_STATISTICS_BINS_REGULAR) error(EXIT_FAILURE, 0, "%s: the input bins are not regular. Currently " "it is only implemented for regular bins", __func__); /* Check if normalize and `maxone' are not called together. */ if(normalize && maxone) error(EXIT_FAILURE, 0, "%s: only one of `normalize' and `maxone' may " "be given", __func__); /* Allocate the histogram (note that we are clearning it so all values are zero. */ hist=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, bins->ndim, bins->dsize, NULL, 1, input->minmapsize, "hist_number", "counts", "Number of data points within each bin."); /* Set the minimum and maximum range of the histogram from the bins. */ d=bins->array; binwidth=d[1]-d[0]; max = d[bins->size - 1] + binwidth/2; min = d[0] - binwidth/2; /* Go through all the elements and find out which bin they belong to. */ h=hist->array; switch(input->type) { case GAL_TYPE_UINT8: HISTOGRAM_TYPESET(uint8_t); break; case GAL_TYPE_INT8: HISTOGRAM_TYPESET(int8_t); break; case GAL_TYPE_UINT16: HISTOGRAM_TYPESET(uint16_t); break; case GAL_TYPE_INT16: HISTOGRAM_TYPESET(int16_t); break; case GAL_TYPE_UINT32: HISTOGRAM_TYPESET(uint32_t); break; case GAL_TYPE_INT32: HISTOGRAM_TYPESET(int32_t); break; case GAL_TYPE_UINT64: HISTOGRAM_TYPESET(uint64_t); break; case GAL_TYPE_INT64: HISTOGRAM_TYPESET(int64_t); break; case GAL_TYPE_FLOAT32: HISTOGRAM_TYPESET(float); break; case GAL_TYPE_FLOAT64: HISTOGRAM_TYPESET(double); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } /* For a check: { size_t i, *hh=hist->array; for(i=0;isize;++i) printf("%-10.4f%zu\n", f[i], hh[i]); } */ /* Find the reference to correct the histogram if necessary. */ if(normalize) { /* Set the reference. */ ref=0.0f; hist=gal_data_copy_to_new_type_free(hist, GAL_TYPE_FLOAT32); ff=(f=hist->array)+hist->size; do ref += *f++; while(fname); free(hist->unit); free(hist->comment); gal_checkset_allocate_copy("hist_normalized", &hist->name); gal_checkset_allocate_copy("frac", &hist->unit); gal_checkset_allocate_copy("Normalized histogram value for this bin.", &hist->comment); } if(maxone) { /* Calculate the reference. */ ref=-FLT_MAX; hist=gal_data_copy_to_new_type_free(hist, GAL_TYPE_FLOAT32); ff=(f=hist->array)+hist->size; do ref = *f>ref ? *f : ref; while(++fname); free(hist->unit); free(hist->comment); gal_checkset_allocate_copy("hist_maxone", &hist->name); gal_checkset_allocate_copy("frac", &hist->unit); gal_checkset_allocate_copy("Fractional histogram value for this bin " "when maximum bin value is 1.0.", &hist->comment); } /* Correct the histogram if necessary. */ if( !isnan(ref) ) { ff=(f=hist->array)+hist->size; do *f++ /= ref; while(fnext'. If `bin->next!=NULL', then it is assumed to be the histogram. If it is NULL, then the histogram will be calculated internally and freed after the job is finished. When a histogram is given and it is normalized, the CFP will also be normalized (even if the normalized flag is not set here): note that a normalized CFP's maximum value is 1. */ gal_data_t * gal_statistics_cfp(gal_data_t *input, gal_data_t *bins, int normalize) { double sum; float *f, *ff, *hf; gal_data_t *hist, *cfp; size_t *s, *sf, *hs, sums; /* Check if the bins are regular or not. For irregular bins, we can either use the old implementation, or GSL's histogram functionality. */ if(bins->status!=GAL_STATISTICS_BINS_REGULAR) error(EXIT_FAILURE, 0, "%s: the input bins are not regular. Currently " "it is only implemented for regular bins", __func__); /* Prepare the histogram. */ hist = ( bins->next ? bins->next : gal_statistics_histogram(input, bins, 0, 0) ); /* If the histogram has float32 type it was given by the user and is either normalized or its maximum was set to 1. We can only use it if it was normalized. If it isn't normalized, then we must ignore it and build the histogram here.*/ if(hist->type==GAL_TYPE_FLOAT32) { sum=0.0f; ff=(f=hist->array)+hist->size; do sum += *f++; while(ftype, bins->ndim, bins->dsize, NULL, 1, input->minmapsize, ( hist->type==GAL_TYPE_FLOAT32 ? "cfp_normalized" : "cfp_number" ), ( hist->type==GAL_TYPE_FLOAT32 ? "frac" : "count" ), ( hist->type==GAL_TYPE_FLOAT32 ? "Fraction of data elements from the start to this " "bin (inclusive)." : "Number of data elements from the start to this " "bin (inclusive).") ); /* Fill in the cumulative frequency plot. */ switch(hist->type) { case GAL_TYPE_SIZE_T: sums=0; hs=hist->array; sf=(s=cfp->array)+cfp->size; do sums = (*s += *hs++ + sums); while(++sarray; ff=(f=cfp->array)+cfp->size; do sum = (*f += *hf++ + sum); while(++ftype); } /* Normalize the CFP if the user asked for it and it wasn't normalized until now. */ if(normalize && cfp->type==GAL_TYPE_SIZE_T) { /* Find the sum, then divide the plot by it. Note that the sum must come from the histogram, not the CFP!*/ sums=0; cfp=gal_data_copy_to_new_type_free(cfp, GAL_TYPE_FLOAT32); sf=(s=hist->array)+hist->size; do sums += *s++; while(sarray)+cfp->size; do *f++ /= sums; while(fname); free(cfp->unit); free(cfp->comment); gal_checkset_allocate_copy("cfp_normalized", &cfp->name); gal_checkset_allocate_copy("frac", &cfp->unit); gal_checkset_allocate_copy("Fraction of data elements from the start " "to this bin (inclusive).", &cfp->comment); } /* If the histogram was allocated here, free it. */ if(hist!=bins->next) gal_data_free(hist); return cfp; } /**************************************************************** ***************** Outliers ******************** ****************************************************************/ /* Sigma-cilp a given distribution: Inputs: - `multip': multiple of the standard deviation, - `param' must be positive and determines the type of clipping: - param<1.0: interpretted as a tolerance level to stop clipping. - param>=1.0 and an integer: a specific number of times to do the clippping. Output elements (type FLOAT32): - 0: Number of points used. - 1: Median. - 2: Mean. - 3: Standard deviation. The way this function works is very simple: first it will sort the input (if it isn't sorted). Afterwards, it will recursively change the starting point of the array and its size, calcluating the basic statistics in each round to define the new starting point and size. */ #define SIGCLIP(IT) { \ IT *a = nbs->array, *af = a + nbs->size; \ IT *bf = nbs->array, *b = bf + nbs->size - 1; \ \ /* Remove all out-of-range elements from the start of the array. */ \ if(sortstatus==GAL_STATISTICS_SORTED_INCREASING) \ do if( *a > (*med - (multip * *std)) ) \ { start=a; break; } \ while(++a=bf); \ else \ do if( *b > (*med - (multip * *std)) ) \ { size=b-a+1; break; } \ while(--b>=bf); \ } gal_data_t * gal_statistics_sigma_clip(gal_data_t *input, float multip, float param, int inplace, int quiet) { void *start, *nbs_array; double *med, *mean, *std; uint8_t bytolerance = param>=1.0f ? 0 : 1; double oldmed=NAN, oldmean=NAN, oldstd=NAN; size_t num=0, one=1, four=4, size, oldsize; gal_data_t *median_i, *median_d, *out, *meanstd; int sortstatus, type=gal_tile_block(input)->type; gal_data_t *nbs=gal_statistics_no_blank_sorted(input, inplace); size_t maxnum = param>=1.0f ? param : GAL_STATISTICS_SIG_CLIP_MAX_CONVERGE; /* Some sanity checks. */ if( multip<=0 ) error(EXIT_FAILURE, 0, "%s: `multip', must be greater than zero. The " "given value was %g", __func__, multip); if( param<=0 ) error(EXIT_FAILURE, 0, "%s: `param', must be greater than zero. The " "given value was %g", __func__, param); if( param >= 1.0f && ceil(param) != param ) error(EXIT_FAILURE, 0, "%s: when `param' is larger than 1.0, it is " "interpretted as an absolute number of clips. So it must be an " "integer. However, your given value %g", __func__, param); /* Allocate the necessary spaces. */ out=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &four, NULL, 0, input->minmapsize, NULL, NULL, NULL); median_i=gal_data_alloc(NULL, type, 1, &one, NULL, 0, input->minmapsize, NULL, NULL, NULL); /* Print the comments. */ if(!quiet) printf("%-8s %-10s %-15s %-15s %-15s\n", "round", "number", "median", "mean", "STD"); /* Do the clipping, but first initialize the values that will be changed during the clipping: the start of the array and the array's size. */ size=nbs->size; sortstatus=nbs->status; nbs_array=start=nbs->array; while(numarray); median_d=gal_data_copy_to_new_type(median_i, GAL_TYPE_FLOAT64); /* Find the average and Standard deviation, note that both `start' and `size' will be different in the next round. */ nbs->array = start; nbs->size = oldsize = size; meanstd=gal_statistics_mean_std(nbs); /* Put the three final values in usable (with a type) pointers. */ med = median_d->array; mean = meanstd->array; std = &((double *)(meanstd->array))[1]; /* If the user wanted to view the steps, show it to them. */ if(!quiet) printf("%-8zu %-10zu %-15g %-15g %-15g\n", num+1, size, *med, *mean, *std); /* If we are to work by tolerance, then check if we should jump out of the loop. Normally, `oldstd' should be larger than std, because the possible outliers have been removed. If it is not, it means that we have clipped too much and must stop anyway, so we don't need an absolute value on the difference! */ if( bytolerance && num>0 && ((oldstd - *std) / *std) < param ) break; /* Clip all the elements outside of the desired range: since the array is sorted, this means to just change the starting pointer and size of the array. */ switch(type) { case GAL_TYPE_UINT8: SIGCLIP( uint8_t ); break; case GAL_TYPE_INT8: SIGCLIP( int8_t ); break; case GAL_TYPE_UINT16: SIGCLIP( uint16_t ); break; case GAL_TYPE_INT16: SIGCLIP( int16_t ); break; case GAL_TYPE_UINT32: SIGCLIP( uint32_t ); break; case GAL_TYPE_INT32: SIGCLIP( int32_t ); break; case GAL_TYPE_UINT64: SIGCLIP( uint64_t ); break; case GAL_TYPE_INT64: SIGCLIP( int64_t ); break; case GAL_TYPE_FLOAT32: SIGCLIP( float ); break; case GAL_TYPE_FLOAT64: SIGCLIP( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } /* Set the values from this round in the old elements, so the next round can compare with, and return then if necessary. */ oldmed = *med; oldstd = *std; oldmean = *mean; ++num; /* Clean up: */ gal_data_free(meanstd); gal_data_free(median_d); } /* If we were in tolerance mode and `num' and `maxnum' are equal (the loop didn't stop by tolerance), so the outputs should be NaN. */ out->status=num; if( bytolerance && num==maxnum ) { ((float *)(out->array))[0] = NAN; ((float *)(out->array))[1] = NAN; ((float *)(out->array))[2] = NAN; ((float *)(out->array))[3] = NAN; } else { ((float *)(out->array))[0] = size; ((float *)(out->array))[1] = oldmed; ((float *)(out->array))[2] = oldmean; ((float *)(out->array))[3] = oldstd; } /* Clean up and return. */ nbs->array=nbs_array; if(nbs!=input) gal_data_free(nbs); return out; } #if 0 /* Using the cumulative distribution function this funciton will remove outliers from a dataset. */ void gal_statistics_remove_outliers_flat_cdf(float *sorted, size_t *outsize) { printf("\n ... in gal_statistics_remove_outliers_flat_cdf ... \n"); exit(1); int firstfound=0; size_t size=*outsize, i, maxind; float *slopes, minslope, maxslope; /* Find a slopes array, think of the cumulative frequency plot when you want to think about slopes. */ errno=0; slopes=malloc(size*sizeof *slopes); if(slopes==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for slopes", __func__, size*sizeof *slopes); /* Calcuate the slope of the CDF and put it in the slopes array. */ for(i=1;i Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include /************************************************************************/ /******************** Info **********************/ /************************************************************************/ size_t gal_dimension_total_size(size_t ndim, size_t *dsize) { size_t i, num=1; for(i=0;i1) for(i=ndim-2;i>=0;--i) out[i]=dsize[i+1]*out[i+1]; /* Return the allocated array. */ return out; } size_t gal_dimension_num_neighbors(size_t ndim) { if(ndim) return pow(3, ndim)-1; else error(EXIT_FAILURE, 0, "%s: ndim cannot be zero", __func__); return 0; } /************************************************************************/ /******************** Coordinates **********************/ /************************************************************************/ void gal_dimension_add_coords(size_t *c1, size_t *c2, size_t *out, size_t ndim) { size_t *end=c1+ndim; do *out++ = *c1++ + *c2++; while(c1 b[i]) ? (a[i]-b[i]) : (b[i]-a[i]); return out; } gnuastro-0.5/lib/qsort.c0000644000175000017500000000726313121462410012225 00000000000000/********************************************************************* forqsort -- Functions used by qsort to sort an array. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include /* Initialize the array for sorting indexs to NULL. */ float *gal_qsort_index_arr; int gal_qsort_index_float_decreasing(const void * a, const void * b) { float ta=gal_qsort_index_arr[ *(size_t *)a ]; float tb=gal_qsort_index_arr[ *(size_t *)b ]; return (tb > ta) - (tb < ta); } int gal_qsort_uint8_decreasing(const void *a, const void *b) { return ( *(uint8_t *)b - *(uint8_t *)a ); } int gal_qsort_uint8_increasing(const void *a, const void *b) { return ( *(uint8_t *)a - *(uint8_t *)b ); } int gal_qsort_int8_decreasing(const void *a, const void *b) { return ( *(int8_t *)b - *(int8_t *)a ); } int gal_qsort_int8_increasing(const void *a, const void *b) { return ( *(int8_t *)a - *(int8_t *)b ); } int gal_qsort_uint16_decreasing(const void *a, const void *b) { return ( *(uint16_t *)b - *(uint16_t *)a ); } int gal_qsort_uint16_increasing(const void *a, const void *b) { return ( *(uint16_t *)a - *(uint16_t *)b ); } int gal_qsort_int16_decreasing(const void *a, const void *b) { return ( *(int16_t *)b - *(int16_t *)a ); } int gal_qsort_int16_increasing(const void *a, const void *b) { return ( *(int16_t *)a - *(int16_t *)b ); } int gal_qsort_uint32_decreasing(const void *a, const void *b) { return ( *(uint32_t *)b - *(uint32_t *)a ); } int gal_qsort_uint32_increasing(const void *a, const void *b) { return ( *(uint32_t *)a - *(uint32_t *)b ); } int gal_qsort_int32_decreasing(const void *a, const void *b) { return ( *(int32_t *)b - *(int32_t *)a ); } int gal_qsort_int32_increasing(const void *a, const void *b) { return ( *(int32_t *)a - *(int32_t *)b ); } int gal_qsort_uint64_decreasing(const void *a, const void *b) { return ( *(uint64_t *)b - *(uint64_t *)a ); } int gal_qsort_uint64_increasing(const void *a, const void *b) { return ( *(uint64_t *)a - *(uint64_t *)b ); } int gal_qsort_int64_decreasing(const void *a, const void *b) { return ( *(int64_t *)b - *(int64_t *)a ); } int gal_qsort_int64_increasing(const void *a, const void *b) { return ( *(int64_t *)a - *(int64_t *)b ); } int gal_qsort_float32_decreasing(const void *a, const void *b) { float ta=*(float*)a; float tb=*(float*)b; return (tb > ta) - (tb < ta); } int gal_qsort_float32_increasing(const void *a, const void *b) { float ta=*(float*)a; float tb=*(float*)b; return (ta > tb) - (ta < tb); } int gal_qsort_float64_decreasing(const void *a, const void *b) { double ta=*(double*)a; double tb=*(double*)b; return (tb > ta) - (tb < ta); } int gal_qsort_float64_increasing(const void *a, const void *b) { double ta=*(double*)a; double tb=*(double*)b; return (ta > tb) - (ta < tb); } gnuastro-0.5/lib/polygon.c0000644000175000017500000003341213121462410012537 00000000000000/********************************************************************* Polygon related functions and macros. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /***************************************************************/ /************** MACROS ******************/ /***************************************************************/ /* The cross product of two points from the center. */ #define GAL_POLYGON_CROSS_PRODUCT(A, B) ( (A)[0]*(B)[1] - (B)[0]*(A)[1] ) /* Find the cross product (2*area) between three points. Each point is assumed to be a pointer that has atleast two values within it. */ #define GAL_POLYGON_TRI_CROSS_PRODUCT(A, B, C) \ ( ( (B)[0]-(A)[0] ) * ( (C)[1]-(A)[1] ) - \ ( (C)[0]-(A)[0] ) * ( (B)[1]-(A)[1] ) ) \ /* We have the line A-B. We want to see if C is to the left of this line or to its right. This function will return 1 if it is to the left. It uses the basic property of vector multiplication: If the three points are anti-clockwise (the point is to the left), then the vector multiplication is positive, if it is negative, then it is clockwise (c is to the right). Ofcourse it is very important that A be below or equal to B in both the X and Y directions. The rounding error might give -0.0000000000001 (I didn't count the number of zeros!!) instead of zero for the area. Zero would indicate that they are on the same line in this case this should give a true result. */ #define GAL_POLYGON_LEFT_OF_LINE(A, B, C) \ ( GAL_POLYGON_TRI_CROSS_PRODUCT((A), (B), (C)) > -GAL_POLYGON_ROUND_ERR ) /* >= 0 */ /* See if the three points are collinear, similar to GAL_POLYGON_LEFT_OF_LINE except that the result has to be exactly zero. */ #define GAL_POLYGON_COLLINEAR_WITH_LINE(A, B, C) \ (GAL_POLYGON_TRI_CROSS_PRODUCT((A), (B), (C)) > -GAL_POLYGON_ROUND_ERR \ && GAL_POLYGON_TRI_CROSS_PRODUCT((A), (B), (C)) < GAL_POLYGON_ROUND_ERR) /* == 0 */ /* Similar to GAL_POLYGON_LEFT_OF_LINE except that if they are on the same line, this will return 0 (so that it is not on the left). Therefore the name is "proper left". */ #define GAL_POLYGON_PROP_LEFT_OF_LINE(A, B, C) \ ( GAL_POLYGON_TRI_CROSS_PRODUCT((A), (B), (C)) > GAL_POLYGON_ROUND_ERR ) /* > 0 */ #define GAL_POLYGON_MIN_OF_TWO(A, B) ((A)<(B)+GAL_POLYGON_ROUND_ERR ? (A) : (B)) #define GAL_POLYGON_MAX_OF_TWO(A, B) ((A)>(B)-GAL_POLYGON_ROUND_ERR ? (A) : (B)) /***************************************************************/ /************** Basic operations ******************/ /***************************************************************/ /* Sort the pixels in anti clock-wise order.*/ void gal_polygon_ordered_corners(double *in, size_t n, size_t *ordinds) { double angles[GAL_POLYGON_MAX_CORNERS]; size_t i, tmp, aindexs[GAL_POLYGON_MAX_CORNERS], tindexs[GAL_POLYGON_MAX_CORNERS]; if(n>GAL_POLYGON_MAX_CORNERS) error(EXIT_FAILURE, 0, "%s: most probably a bug! The number of corners " "is more than %d. This is an internal value and cannot be set from " "the outside. Most probably some bug has caused this un-normal " "value. Please contact us at %s so we can solve this problem", __func__, GAL_POLYGON_MAX_CORNERS, PACKAGE_BUGREPORT); /* For a check: printf("\n\nBefore sorting:\n"); for(i=0;i in[ ordinds[1]*2 ]) { tmp=ordinds[0]; ordinds[0]=ordinds[1]; ordinds[1]=tmp; } /* We only have `n-1' more elements to sort, use the angle of the line between the three remaining points and the first point. */ for(i=0;i=GAL_POLYGON_MIN_OF_TWO(Aa[0], Ab[0])-GAL_POLYGON_ROUND_ERR && o[0]<=GAL_POLYGON_MAX_OF_TWO(Aa[0], Ab[0])+GAL_POLYGON_ROUND_ERR && o[1]>=GAL_POLYGON_MIN_OF_TWO(Aa[1], Ab[1])-GAL_POLYGON_ROUND_ERR && o[1]<=GAL_POLYGON_MAX_OF_TWO(Aa[1], Ab[1])+GAL_POLYGON_ROUND_ERR ) return 1; else return 0; } else return 0; } /* Clip (find the overlap of) two polygons. This function uses the Sutherland-Hodgman polygon clipping psudocode from Wikipedia: List outputList = subjectPolygon; for (Edge clipEdge in clipPolygon) do List inputList = outputList; outputList.clear(); Point S = inputList.last; for (Point E in inputList) do if (E inside clipEdge) then if (S not inside clipEdge) then outputList.add(ComputeIntersection(S,E,clipEdge)); end if outputList.add(E); else if (S inside clipEdge) then outputList.add(ComputeIntersection(S,E,clipEdge)); end if S = E; done done The difference is that we are not using lists, but arrays to keep polygon vertices. The two polygons are called Subject (`s') and Clip (`c') with `n' and `m' vertices respectively. The output is stored in `o' and the number of elements in the output are stored in what `*numcrn' (for number of corners) points to.*/ void gal_polygon_clip(double *s, size_t n, double *c, size_t m, double *o, size_t *numcrn) { double in[2*GAL_POLYGON_MAX_CORNERS], *S, *E; size_t t, ii=m-1, i=0, jj, j, outnum, innum; /* if(n>GAL_POLYGON_MAX_CORNERS || m>GAL_POLYGON_MAX_CORNERS) error(EXIT_FAILURE, 0, "the two polygons given to the function " "gal_polygon_clip in polygon.c have %zu and %zu vertices. They cannot" " have any values larger than %zu", n, m, GAL_POLYGON_MAX_CORNERS); */ /* 2*outnum because for each vertice, there are two elements. */ outnum=n; for(t=0;t<2*outnum;++t) o[t]=s[t]; while(i0) ++outnum; o[2*outnum]=E[0]; o[2*outnum+1]=E[1]; ++outnum; } else if( GAL_POLYGON_PROP_LEFT_OF_LINE(&c[ii*2], &c[i*2], S) ) if( seginfintersection(S, E, &c[ii*2], &c[i*2], &o[2*outnum])>0 ) ++outnum; /* { size_t k; printf("(%.3f, %.3f) -- (%.3f, %.3f): %zu\n", S[0], S[1], E[0], E[1], outnum); for(k=0;k Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include /*********************************************************************/ /*************** Permutation info *******************/ /*********************************************************************/ void gal_permutation_check(size_t *permutation, size_t size) { size_t i; for(i=0; iarray; /* If permutation is NULL, then it is assumed that the data doesn't need to be re-ordered. */ if(permutation) { /* Necessary initializations. */ width=gal_type_sizeof(input->type); tmp=gal_data_malloc_array(input->type, 1, __func__, "tmp"); /* Do the permutation. */ for(i=0;isize;++i) { k=permutation[i]; while(k>i) k=permutation[k]; if(k>=i) { pk = permutation[k]; if( pk != i ) { memcpy(tmp, &array[i*width], width); while(pk!=i) { memcpy(&array[k*width], &array[pk*width], width); k = pk; pk = permutation[k]; } memcpy(&array[k*width], tmp, width); } } } /* Clean up. */ free(tmp); } } /* Apply the inverse of given permutation on the input dataset, see `gal_permutation_apply_inverse'. */ void gal_permutation_apply_inverse(gal_data_t *input, size_t *permutation) { void *tmp, *ttmp; size_t i, k, pk, width; uint8_t *array=input->array; if(permutation) { /* Initializations */ width=gal_type_sizeof(input->type); tmp=gal_data_malloc_array(input->type, 1, __func__, "tmp"); ttmp=gal_data_malloc_array(input->type, 1, __func__, "ttmp"); /* Re-order the values. */ for(i=0;isize;++i) { k=permutation[i]; while(k>i) k=permutation[k]; if(k>=i) { pk = permutation[k]; if(pk!=i) { memcpy(tmp, &array[k*width], width); while(pk!=i) { memcpy(ttmp, &array[pk*width], width); memcpy(&array[pk*width], tmp, width); memcpy(tmp, ttmp, width); k = pk; pk = permutation[k]; } memcpy(&array[pk*width], tmp, width); } } } /* Clean up. */ free(tmp); free(ttmp); } } gnuastro-0.5/lib/options.c0000644000175000017500000021006013216276304012551 00000000000000/********************************************************************* Function to parse options and configuration file values. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /**********************************************************************/ /************ Option utilities ***************/ /**********************************************************************/ int gal_options_is_last(struct argp_option *option) { return ( option->key==0 && option->name==NULL && option->doc==NULL && option->group==0 ); } int gal_options_is_category_title(struct argp_option *option) { return ( option->key==0 && option->name==NULL ); } void gal_options_add_to_not_given(struct gal_options_common_params *cp, struct argp_option *option) { gal_list_str_add(&cp->novalue_doc, (char *)option->doc, 0); gal_list_str_add(&cp->novalue_name, (char *)option->name, 0); } void gal_options_abort_if_mandatory_missing(struct gal_options_common_params *cp) { int namewidth=0; gal_list_str_t *tmp; char info[5000], *name, *doc; /* If there is no mandatory options, then just return. */ if(cp->novalue_name==NULL) return; /* Get the maximum width of the given names: */ for(tmp=cp->novalue_name; tmp!=NULL; tmp=tmp->next) if( strlen(tmp->v) > namewidth ) namewidth=strlen(tmp->v); /* Print the introductory information. */ sprintf(info, "to continue, the following options need a value "); sprintf(info+strlen(info), "(parenthesis after option name contain its " "description):\n\n"); /* Print the list of options along with their description. */ while(cp->novalue_name!=NULL) { doc = gal_list_str_pop(&cp->novalue_doc); name = gal_list_str_pop(&cp->novalue_name); sprintf(info+strlen(info), " %-*s (%s\b)\n", namewidth+4, name, doc); } sprintf(info+strlen(info), "\n"); /* Print suggestions, way to solve it. */ sprintf(info+strlen(info), "Use the command-line or a configuration file " "to set value(s).\n\nFor a complete description of command-line " "options and configuration files, please see the \"Options\" and " "\"Configuration files\" section of the Gnuastro book " "respectively. You can read them on the command-line by running " "the following commands (type `SPACE' to flip through pages, type " "`Q' to return to the command-line):\n\n" " info gnuastro Options\n" " info gnuastro \"Configuration files\"\n"); error(EXIT_FAILURE, 0, "%s", info); } static char * options_get_home() { char *home; home=getenv("HOME"); if(home==NULL) error(EXIT_FAILURE, 0, "HOME environment variable not defined"); return home; } /**********************************************************************/ /************ Parser functions for common options ***************/ /**********************************************************************/ void * gal_options_check_version(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { /* Check if the given value is different from this version. */ if( strcmp(arg, PACKAGE_VERSION) ) { /* Print an error message and abort. */ error_at_line(EXIT_FAILURE, 0, filename, lineno, "version mis-match: " "you are running GNU Astronomy Utilities (Gnuastro) " "version `%s'. However, the `onlyversion' option is set " "to version `%s'.\n\n" "This was probably done for reproducibility. Therefore, " "manually removing, or changing, the option value might " "produce errors or unexpected results. It is thus " "strongly advised to build Gnuastro %s and re-run this " "command/script.\n\n" "You can download previously released tar-balls from the " "following URLs respectively:\n\n" " Stable (version format: X.Y): " "http://ftpmirror.gnu.org/gnuastro\n" " Alpha (version format: X.Y.A-B): " "http://alpha.gnu.org/gnu/gnuastro\n\n" "Alternatively, you can clone Gnuastro, checkout the " "respective commit (from the version number), then " "bootstrap and build it. Please run the following " "command for more information:\n\n" " $ info gnuastro \"Version controlled source\"\n", PACKAGE_VERSION, arg, arg); /* Just to avoid compiler warnings for unused variables. The program will never reach this point! */ arg=filename=NULL; lineno=0; option=NULL; junk=NULL; } return NULL; } void * gal_options_print_citation(struct argp_option *option, char *arg, char *filename, size_t lineno, void *pa) { struct gal_options_common_params *cp=(struct gal_options_common_params *)pa; char *gnuastro_acknowledgement; char *gnuastro_bibtex= "Gnuastro package/infrastructure\n" "-------------------------------\n" " @ARTICLE{2015ApJS..220....1A,\n" " author = {{Akhlaghi}, M. and {Ichikawa}, T.},\n" " title = \"{Noise-based Detection and Segmentation of Nebulous " "Objects}\",\n" " journal = {\\apjs},\n" " archivePrefix = \"arXiv\",\n" " eprint = {1505.01664},\n" " primaryClass = \"astro-ph.IM\",\n" " keywords = {galaxies: irregular, galaxies: photometry, " "galaxies: structure, methods: data analysis, " "techniques: image processing, techniques: photometric},\n" " year = 2015,\n" " month = sep,\n" " volume = 220,\n" " eid = {1},\n" " pages = {1},\n" " doi = {10.1088/0067-0049/220/1/1},\n" " adsurl = {http://adsabs.harvard.edu/abs/2015ApJS..220....1A},\n" " adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n" " }"; /* Print the statements. */ printf("\nThank you for using %s (%s) %s.\n\n", cp->program_name, PACKAGE_NAME, PACKAGE_VERSION); printf("Citations and acknowledgement are vital for the continued " "work on Gnuastro.\n\n" "Please cite the following record(s) and add the acknowledgement " "statement below in your work to support us. Please note that " "different Gnuastro programs may have different corresponding " "papers. Hence, please check all the programs you used. Don't " "forget to also include the version as shown above for " "reproducibility.\n\n" "%s\n\n", gnuastro_bibtex); /* Only print the citation for the program if one exists. */ if(cp->program_bibtex[0]!='\0') printf("%s\n\n", cp->program_bibtex); /* Notice for acknowledgements. */ asprintf(&gnuastro_acknowledgement, "Acknowledgement\n" "---------------\n" "This work was partly done using GNU Astronomy Utilities " "(Gnuastro) version %s. Gnuastro is a generic package for " "astronomical data manipulation and analysis which was " "initially created and developed for research funded by the " "Monbukagakusho (Japanese government) scholarship and ERC " "advanced grant 339659-MUSICOS.", PACKAGE_VERSION); printf("%s\n", gnuastro_acknowledgement); free(gnuastro_acknowledgement); /* Print a thank you message. */ printf(" ,\n" " {|'--.\n" " {{\\ \\\n" " Many thanks from all |/`'--./=.\n" " Gnuastro developers! `\\.---' `\\\\\n" " |\\ ||\n" " | |//\n" " \\//_/|\n" " //\\__/\n" " //\n" " (http://www.chris.com/ascii/) |/\n"); /* Exit the program. */ exit(EXIT_SUCCESS); /* Just to avoid compiler warnings for unused variables. The program will never reach this point! */ arg=filename=NULL; lineno=0; option=NULL; } void * gal_options_read_type(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; if(lineno==-1) { /* Note that `gal_data_type_as_string' returns a static string. But the output must be an allocated string so we can free it. */ gal_checkset_allocate_copy( gal_type_name( *(uint8_t *)(option->value), 1), &str); return str; } else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Read the value. */ if ( (*(uint8_t *)(option->value) = gal_type_from_name(arg) ) == GAL_TYPE_INVALID ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "`%s' (value to " "`%s' option) couldn't be recognized as a known " "type.\n\nFor the full list of known types, please " "run the following command (press SPACE key to go " "down, and `q' to return to the command-line):\n\n" " $ info gnuastro \"Numeric data types\"\n", arg, option->name); /* For no un-used variable warning. This function doesn't need the pointer.*/ return junk=NULL; } } void * gal_options_read_searchin(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; if(lineno==-1) { /* Note that `gal_data_type_as_string' returns a static string. But the output must be an allocated string so we can free it. */ gal_checkset_allocate_copy( gal_tableintern_searchin_as_string( *(uint8_t *)(option->value)), &str); return str; } else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Read the value. */ if((*(uint8_t *)(option->value)=gal_tableintern_string_to_searchin(arg)) == GAL_TABLE_SEARCH_INVALID ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "`%s' (value to " "`%s' option) couldn't be recognized as a known table " "search-in field (`name', `unit', or `comment').\n\n" "For more explanation, please run the following " "command (press SPACE key to go down, and `q' to " "return to the command-line):\n\n" " $ info gnuastro \"Selecting table columns\"\n", arg, option->name); /* For no un-used variable warning. This function doesn't need the pointer.*/ return junk=NULL; } } void * gal_options_read_tableformat(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; if(lineno==-1) { /* Note that `gal_data_type_as_string' returns a static string. But the output must be an allocated string so we can free it. */ gal_checkset_allocate_copy( gal_tableintern_format_as_string( *(uint8_t *)(option->value)), &str); return str; } else { /* If the option is already set, then you don't have to do anything. */ if(option->set) return NULL; /* Read the value. */ if( (*(uint8_t *)(option->value)=gal_tableintern_string_to_format(arg) ) ==GAL_TABLE_FORMAT_INVALID ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "`%s' (value to " "`%s' option) couldn't be recognized as a known table " "format field (`txt', `fits-ascii', or " "`fits-binary').\n\n", arg, option->name); /* For no un-used variable warning. This function doesn't need the pointer.*/ return junk=NULL; } } /* The input to this function is a string of any number of numbers separated by a comma (`,') and possibly containing fractions, for example: `1,2/3, 4.95'. The output `gal_data_t' contains the array of given values in `double' type. You can read the number from its `size' element. */ gal_data_t * gal_options_parse_list_of_numbers(char *string, char *filename, size_t lineno) { size_t i, num=0; gal_data_t *out; char *c=string, *tailptr; gal_list_f64_t *list=NULL, *tdll; double numerator=NAN, denominator=NAN, tmp; /* The nature of the arrays/numbers read here is very small, so since `p->cp.minmapsize' might not have been read yet, we will set it to -1 (largest size_t number), so the values are kept in memory. */ size_t minmapsize=-1; /* Go through the input character by character. */ while(string && *c!='\0') { switch(*c) { /* Ignore space or tab. */ case ' ': case '\t': ++c; break; /* Comma marks the transition to the next number. */ case ',': if(isnan(numerator)) error_at_line(EXIT_FAILURE, 0, filename, lineno, "a number " "must be given before `,'. You have given: `%s'", string); gal_list_f64_add(&list, isnan(denominator) ? numerator : numerator/denominator); numerator=denominator=NAN; ++num; ++c; break; /* Divide two numbers. */ case '/': if( isnan(numerator) || !isnan(denominator) ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "`/' must " "only be between two numbers and used for " "division. But you have given `%s'", string); ++c; break; /* Extra dot is an error (cases like 2.5.5). Valid `.'s will be read by `strtod'. */ case '.': error_at_line(EXIT_FAILURE, 0, filename, lineno, "extra `.' in " "`%s'", string); break; /* Read the number. */ default: /* Parse the string. */ tmp=strtod(c, &tailptr); if(tailptr==c) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the first " "part of `%s' couldn't be read as a number. This " "was part of `%s'", c, string); /* See if the number should be put in the numerator or denominator. */ if(isnan(numerator)) numerator=tmp; else { if(isnan(denominator)) denominator=tmp; else error_at_line(EXIT_FAILURE, 0, filename, lineno, "more " "than two numbers in each element."); } /* Set `c' to tailptr. */ c=tailptr; } } /* If the last number wasn't finished by a `,', add the read value to the list */ if( !isnan(numerator) ) { ++num; gal_list_f64_add(&list, isnan(denominator) ? numerator : numerator/denominator); } /* Allocate the output data structure and fill it up. */ if(num) { i=num; out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &num, NULL, 0, minmapsize, NULL, NULL, NULL); for(tdll=list;tdll!=NULL;tdll=tdll->next) ((double *)(out->array))[--i]=tdll->v; } else { /* It is not possible to allocate a dataset with a size of 0 along any dimension (in C it's possible, but conceptually it isn't). So, we'll allocate space for one element, then free it. */ i=1; out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &i, NULL, 0, minmapsize, NULL, NULL, NULL); out->size=out->dsize[0]=0; free(out->array); out->array=NULL; } /* Clean up and return. */ gal_list_f64_free(list); return out; } /* The input to this function is a string of any number of strings separated by a comma (`,') for example: `a,abc,abcd'. The output `gal_data_t' contains the array of given strings. You can read the number of inputs from its `size' element. */ gal_data_t * gal_options_parse_csv_strings_raw(char *string, char *filename, size_t lineno) { size_t i, num; gal_data_t *out; char *c=string, *str=NULL; gal_list_str_t *list=NULL, *tstrll=NULL; /* The nature of the arrays/numbers read here is very small, so since `p->cp.minmapsize' might not have been read yet, we will set it to -1 (largest size_t number), so the values are kept in memory. */ size_t minmapsize=-1; /* Go through the input character by character. */ while(string && *c!='\0') { switch(*c) { /* Comma marks the transition to the next string. */ case ',': if(str==NULL) error_at_line(EXIT_FAILURE, 0, filename, lineno, "a string " "must exist before the first `,'. You have " "given: `%s'", string); *c='\0'; gal_list_str_add(&list, str, 1); str=NULL; /* Mark that the next character is the start */ break; /* If the character isn't a coma, it is either in the middle of a string at the start of it. If `str==NULL', then it is at the start. */ default: if(str==NULL) str=c; } /* Increment C. */ ++c; } /* If the last element wasn't a comma, the last string hasn't been added to the list yet. */ if(str) gal_list_str_add(&list, str, 1); /* Allocate the output data structure and fill it up. */ if(list) { i=num=gal_list_str_number(list); out=gal_data_alloc(NULL, GAL_TYPE_STRING, 1, &num, NULL, 0, minmapsize, NULL, NULL, NULL); for(tstrll=list;tstrll!=NULL;tstrll=tstrll->next) ((char **)(out->array))[--i]=tstrll->v; } else { /* It is not possible to allocate a dataset with a size of 0 along any dimension (in C it's possible, but conceptually it isn't). So, we'll allocate space for one element, then free it. */ i=1; out=gal_data_alloc(NULL, GAL_TYPE_STRING, 1, &i, NULL, 0, minmapsize, NULL, NULL, NULL); out->size=out->dsize[0]=0; free(out->array); out->array=NULL; } /* Clean up and return. Note that we don't want to free the space of each string becuse it has been passed */ gal_list_str_free(list, 0); return out; } /* `arg' is the value given to an option. It contains multiple strings separated by a comma (`,'). This function will parse `arg' and make a `gal_data_t' array of strings from it. The output `gal_data_t' will be put in `option->value'. */ void * gal_options_parse_csv_strings(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { size_t nc; char *c, **strarr; int i, has_space=0; gal_data_t *values; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Set the pointer to the values dataset. */ values = *(gal_data_t **)(option->value); /* See if there are any space characters in the final string. */ strarr=values->array; for(i=0;isize;++i) if(has_space==0) { for(c=strarr[i];*c!='\0';++c) if(*c==' ' || *c=='\t') { has_space=1; break; } } /* If there is a space, the string must start wth quotation marks. */ nc = has_space ? 1 : 0; if(has_space) {sstr[0]='"'; sstr[1]='\0';} /* Write each string into the output string */ for(i=0;isize;++i) { if( nc > GAL_OPTIONS_STATIC_MEM_FOR_VALUES-100 ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s so we " "can address the problem. The number of necessary " "characters in the statically allocated string has become " "too close to %d", __func__, PACKAGE_BUGREPORT, GAL_OPTIONS_STATIC_MEM_FOR_VALUES); nc += sprintf(sstr+nc, "%s,", strarr[i]); } /* If there was a space, we need a quotation mark at the end of the string. */ if(has_space) { sstr[nc-1]='"'; sstr[nc]='\0'; } else sstr[nc-1]='\0'; /* Copy the string into a dynamically allocated space, because it will be freed later.*/ gal_checkset_allocate_copy(sstr, &str); return str; } /* We want to read the user's string. */ else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Read the values. */ values=gal_options_parse_csv_strings_raw(arg, filename, lineno); /* Put the values into the option. */ *(gal_data_t **)(option->value) = values; return NULL; } } /* Parse the given string into a series of size values (integers, stored as an array of size_t). The output array will be stored in the `value' element of the option. The last element of the array is `GAL_BLANK_SIZE_T' to allow finding the number of elements within it later (similar to a string which terminates with a '\0' element). */ void * gal_options_parse_sizes_reverse(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { int i; double *v; gal_data_t *values; size_t nc, num, *array; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Find the number of elements within the array. */ array = *(size_t **)(option->value); for(i=0; array[i]!=-1; ++i); num=i; /* Write all the dimensions into the static string. */ nc=0; for(i=num-1;i>=0;--i) { if( nc > GAL_OPTIONS_STATIC_MEM_FOR_VALUES-100 ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s so we " "can address the problem. The number of necessary " "characters in the statically allocated string has become " "too close to %d", __func__, PACKAGE_BUGREPORT, GAL_OPTIONS_STATIC_MEM_FOR_VALUES); nc += sprintf(sstr+nc, "%zu,", array[i]); } sstr[nc-1]='\0'; /* Copy the string into a dynamically allocated space, because it will be freed later.*/ gal_checkset_allocate_copy(sstr, &str); return str; } /* We want to read the user's string. */ else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Read the values. */ values=gal_options_parse_list_of_numbers(arg, filename, lineno); /* Check if the values are an integer. */ v=values->array; for(i=0;isize;++i) { if(v[i]<0) error_at_line(EXIT_FAILURE, 0, filename, lineno, "a given " "value in `%s' (%g) is not 0 or positive. The " "values to the `--%s' option must be positive", arg, v[i], option->name); if(ceil(v[i]) != v[i]) error_at_line(EXIT_FAILURE, 0, filename, lineno, "a given " "value in `%s' (%g) is not an integer. The " "values to the `--%s' option must be integers", arg, v[i], option->name); } /* Write the values into an allocated size_t array and finish it with a `-1' so the total number can be found later.*/ num=values->size; array=gal_data_malloc_array(GAL_TYPE_SIZE_T, num+1, __func__, "array"); for(i=0;ivalue) = array; gal_data_free(values); return NULL; } } /* Parse options with values of a list of numbers. */ void * gal_options_parse_csv_float64(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { size_t i, nc; double *darray; gal_data_t *values; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Set the pointer to the values dataset. */ values = *(gal_data_t **)(option->value); darray=values->array; /* Write each string into the output string */ nc=0; for(i=0;isize;++i) { if( nc > GAL_OPTIONS_STATIC_MEM_FOR_VALUES-100 ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s so we " "can address the problem. The number of necessary " "characters in the statically allocated string has become " "too close to %d", __func__, PACKAGE_BUGREPORT, GAL_OPTIONS_STATIC_MEM_FOR_VALUES); nc += sprintf(sstr+nc, "%g,", darray[i]); } sstr[nc-1]='\0'; /* Copy the string into a dynamically allocated space, because it will be freed later.*/ gal_checkset_allocate_copy(sstr, &str); return str; } /* We want to read the user's string. */ else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Read the values. */ values=gal_options_parse_list_of_numbers(arg, filename, lineno); /* Put the values into the option. */ *(gal_data_t **)(option->value) = values; /* The return value is only for printing mode, so we can return NULL after reading is complete. */ return NULL; } } /* Two numbers must be provided as an argument. This function will read them as the sigma-clipping multiple and parameter and store the two in a 2-element array. `option->value' must point to an already allocated 2-element array of double type. */ void * gal_options_read_sigma_clip(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; gal_data_t *in; double *sigmaclip=option->value; /* Caller wants to print the option values. */ if(lineno==-1) { asprintf(&str, "%g,%g", sigmaclip[0], sigmaclip[1]); return str; } /* Caller wants to read the values into memory, so parse the inputs. */ in=gal_options_parse_list_of_numbers(arg, filename, lineno); /* Check if there was only two numbers. */ if(in->size!=2) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the `--%s' " "option takes two values (separated by a comma) for " "defining the sigma-clip. However, %zu numbers were " "read in the string `%s' (value to this option).\n\n" "The first number is the multiple of sigma, and the " "second is either the tolerance (if its is less than " "1.0), or a specific number of times to clip (if it " "is equal or larger than 1.0).", option->name, in->size, arg); /* Copy the sigma clip parameters into the space the caller has given (as the `value' element of `option'). */ memcpy(option->value, in->array, 2*sizeof *sigmaclip); /* Multiple of sigma must be positive. */ if( sigmaclip[0] <= 0 ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the first value to " "the `--%s' option (multiple of sigma), must be " "greater than zero. From the string `%s' (value to " "this option), you have given a value of %g for the " "first value", option->name, arg, sigmaclip[0]); /* Second value must also be positive. */ if( sigmaclip[1] <= 0 ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the second value " "to the `--%s' option (tolerance to stop clipping or " "number of clips), must be greater than zero. From " "the string `%s' (value to this option), you have " "given a value of %g for the second value", option->name, arg, sigmaclip[1]); /* if the second value is larger or equal to 1.0, it must be an integer. */ if( sigmaclip[1] >= 1.0f && ceil(sigmaclip[1]) != sigmaclip[1]) error_at_line(EXIT_FAILURE, 0, filename, lineno, "when the second " "value to the `--%s' option is >=1, it is interpretted " "as an absolute number of clips. So it must be an " "integer. However, your second value is a floating " "point number: %g (parsed from `%s')", option->name, sigmaclip[1], arg); /* Clean up and return. */ gal_data_free(in); return NULL; } /**********************************************************************/ /************ Option actions ***************/ /**********************************************************************/ /* The option value has been read and put into the `value' field of the `argp_option' structure. This function will use the `range' field to define a check and abort with an error if the value is not in the given range. It also takes the `arg' so it can be used for good error message (showing the value that could not be read). */ static void options_sanity_check(struct argp_option *option, char *arg, char *filename, size_t lineno) { size_t dsize=1; char *message=NULL; int operator1=GAL_ARITHMETIC_OP_INVALID; int operator2=GAL_ARITHMETIC_OP_INVALID; int multicheckop=GAL_ARITHMETIC_OP_INVALID; gal_data_t *value, *ref1=NULL, *ref2=NULL, *check1, *check2; int mcflag = ( GAL_ARITHMETIC_NUMOK | GAL_ARITHMETIC_FREE | GAL_ARITHMETIC_INPLACE ); /* Currently, this function is only for numeric types, so if the value is string type, or its `range' field is `GAL_OPTIONS_RANGE_ANY', then just return without any checks. */ if( option->type==GAL_TYPE_STRING || option->type==GAL_TYPE_STRLL || option->range==GAL_OPTIONS_RANGE_ANY ) return; /* Put the option value into a data structure. */ value=gal_data_alloc(option->value, option->type, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); /* Set the operator(s) and operands: */ switch(option->range) { case GAL_OPTIONS_RANGE_GT_0: message="greater than zero"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; operator1=GAL_ARITHMETIC_OP_GT; ref2=NULL; break; case GAL_OPTIONS_RANGE_GE_0: message="greater or equal to zero"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; operator1=GAL_ARITHMETIC_OP_GE; ref2=NULL; break; case GAL_OPTIONS_RANGE_0_OR_1: message="either 0 or 1"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=1; operator1=GAL_ARITHMETIC_OP_EQ; operator2=GAL_ARITHMETIC_OP_EQ; multicheckop=GAL_ARITHMETIC_OP_OR; break; case GAL_OPTIONS_RANGE_GE_0_LE_1: message="between zero and one (inclusive)"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=1; operator1=GAL_ARITHMETIC_OP_GE; operator2=GAL_ARITHMETIC_OP_LE; multicheckop=GAL_ARITHMETIC_OP_AND; break; case GAL_OPTIONS_RANGE_GE_0_LT_1: message="between zero (inclusive) and one (exclusive)"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=1; operator1=GAL_ARITHMETIC_OP_GE; operator2=GAL_ARITHMETIC_OP_LT; multicheckop=GAL_ARITHMETIC_OP_AND; break; case GAL_OPTIONS_RANGE_GT_0_LT_1: message="between zero and one (not inclusive)"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=1; operator1=GAL_ARITHMETIC_OP_GT; operator2=GAL_ARITHMETIC_OP_LT; multicheckop=GAL_ARITHMETIC_OP_AND; break; case GAL_OPTIONS_RANGE_GT_0_ODD: message="greater than zero and odd"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=2; operator1=GAL_ARITHMETIC_OP_GT; operator2=GAL_ARITHMETIC_OP_MODULO; multicheckop=GAL_ARITHMETIC_OP_AND; break; case GAL_OPTIONS_RANGE_0_OR_ODD: message="greater than, or equal to, zero and odd"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=2; operator1=GAL_ARITHMETIC_OP_EQ; operator2=GAL_ARITHMETIC_OP_MODULO; multicheckop=GAL_ARITHMETIC_OP_OR; break; default: error(EXIT_FAILURE, 0, "%s: range code %d not recognized", __func__, option->range); } /* Use the arithmetic library to check for the condition. We don't want to free the value or change its value, so when dealing with the value directly, we won't use the `GAL_ARITHMETIC_FREE', or `GAL_ARITHMETIC_INPLACE' flags. But we will do this when there are multiple checks so from the two check data structures, we only have one remaining. */ check1=gal_arithmetic(operator1, GAL_ARITHMETIC_NUMOK, value, ref1); if(ref2) { check2=gal_arithmetic(operator2, GAL_ARITHMETIC_NUMOK, value, ref2); check1=gal_arithmetic(multicheckop, mcflag, check1, check2); } /* If the final check is not successful, then print an error. */ if( *(unsigned char *)(check1->array)==0 ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "value to option `%s' must be %s, but the given value " "is `%s'. Recall that `%s' is \"%s\"", option->name, message, arg, option->name, option->doc); /* Clean up and finish. Note that we used the actual value pointer in the data structure, so first we need to set it to NULL, so `gal_data_free' doesn't free it, we need it for later (for example to print the option values). */ value->array=NULL; gal_data_free(ref1); gal_data_free(ref2); gal_data_free(value); gal_data_free(check1); } static void gal_options_read_check(struct argp_option *option, char *arg, char *filename, size_t lineno, struct gal_options_common_params *cp) { void *topass; /* If a function is defined, leave everything to the function. */ if(option->func) { /* For the functions that are defined here (for all programs) and need the last pointer, we must pass the `cp' pointer. For the rest, we must pass the `cp->program_struct'. */ switch(option->key) { case GAL_OPTIONS_KEY_CITE: case GAL_OPTIONS_KEY_CONFIG: topass=cp; break; default: topass=cp->program_struct; } /* Call the function to parse the value, flag the option as set and return (except for the `--config' option, which must always be unset). */ option->func(option, arg, filename, lineno, topass); if(option->key!=GAL_OPTIONS_KEY_CONFIG) option->set=GAL_OPTIONS_SET; return; } /* Check if an argument is actually given (only options given on the command-line can have a NULL arg value). */ if(arg) { if(option->type==GAL_TYPE_STRLL) gal_list_str_add(option->value, arg, 1); else { /* If the option is already set, ignore the given value. */ if(option->set==GAL_OPTIONS_SET) return; /* Read the string argument into the value. */ if( gal_type_from_string(&option->value, arg, option->type) ) /* Fortunately `error_at_line' will behave like `error' when the filename is NULL (the option was read from a command-line). */ error_at_line(EXIT_FAILURE, 0, filename, lineno, "`%s' (value to option `--%s') couldn't be read " "into the proper numerical type. Common causes " "for this error are:\n" " - It contains non-numerical characters.\n" " - It is negative, but the expected value is " "positive.\n" " - It is floating point, but the expected value " "is an integer.\n" " - The previous option required a value, but you " "forgot to give it one, so the next option's " "name(+value, if there are no spaces between them) " "is read as the value of the previous option.", arg, option->name); /* Do a sanity check on the value. */ options_sanity_check(option, arg, filename, lineno); } } else { /* If the option is already set, ignore the given value. */ if(option->set==GAL_OPTIONS_SET) return; /* Make sure the option has the type set for options with no argument. So, give it a value of 1. */ if(option->type==GAL_OPTIONS_NO_ARG_TYPE) *(uint8_t *)(option->value)=1; else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "correct it. Options with no arguments, must have " "type `%s'. However, the `%s' option has type %s", __func__, PACKAGE_BUGREPORT, gal_type_name(GAL_OPTIONS_NO_ARG_TYPE, 1), option->name, gal_type_name(option->type, 1)); } /* Flip the `set' flag to `GAL_OPTIONS_SET'. */ option->set=GAL_OPTIONS_SET; } /**********************************************************************/ /************ Command-line options ***************/ /**********************************************************************/ /* Set the value given to the command-line, where we have the integer `key' of the option, not its long name as a string. */ error_t gal_options_set_from_key(int key, char *arg, struct argp_option *options, struct gal_options_common_params *cp) { size_t i; /* Go through all the options and find the one that should keep this value, then put its value into the appropriate key. Note that the options array finishs with an all zero element, so we don't need to know the number before hand.*/ for(i=0;1;++i) { /* Check if the key corresponds to this option. */ if( options[i].key==key ) { /* When options are read from keys (by this function), they are read from the command-line. On the commandline, the last invokation of the option is important. Especially in contexts like scripts, this is important because you can change a given command-line option (that is not a linked list) by calling it a second time, instead of going back and changing the first value. As a result, only when searching for options on the command-line, a second value to the same option will replace the first one. This will not happen in configuration files. */ if(options[i].set && gal_type_is_list(options[i].type)==0) options[i].set=GAL_OPTIONS_NOT_SET; /* Parse the value. */ gal_options_read_check(&options[i], arg, NULL, 0, cp); /* We have found and set the value given to this option, so just return success (an error_t of 0 means success). */ return 0; } else { /* The last option has all its values set to zero. */ if(gal_options_is_last(&options[i])) return ARGP_ERR_UNKNOWN; } } } error_t gal_options_common_argp_parse(int key, char *arg, struct argp_state *state) { struct gal_options_common_params *cp=state->input; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Read the options. */ return gal_options_set_from_key(key, arg, cp->coptions, cp); } /**********************************************************************/ /************ Configuration files ***************/ /**********************************************************************/ /* Read the option and the argument from the line and return.*/ static void options_read_name_arg(char *line, char *filename, size_t lineno, char **name, char **arg) { int notyetfinished=1, inword=0, inquote=0; /* Initialize name and value: */ *arg=NULL; *name=NULL; /* Go through the characters and set the values: */ do switch(*line) { case ' ': case '\t': case '\v': case '\n': case '\r': if(inword) /* Only considered in a word, not in a quote*/ { inword=0; *line='\0'; if(*arg && inquote==0) notyetfinished=0; } break; case '#': notyetfinished=0; break; case '"': if(inword) error_at_line(EXIT_FAILURE, 0, filename, lineno, "Quotes have to be surrounded by whitespace " "characters (space, tab, new line, etc)."); if(inquote) { *line='\0'; inquote=0; notyetfinished=0; } else { if(*name==NULL) error_at_line(EXIT_FAILURE, 0, filename, lineno, "option name should not start with " "double quotes (\")."); inquote=1; *arg=line+1; } break; default: if(inword==0 && inquote==0) { if(*name==NULL) *name=line; else /* *name is set, now assign *arg. */ *arg=line; inword=1; } break; } while(*(++line)!='\0' && notyetfinished); /* In the last line of the file, there is no new line to be converted to a '\0' character! So if value has been assigned, we are not in a quote and the line has finished, it means the given value has also finished. */ if(*line=='\0' && *arg && inquote==0) notyetfinished=0; /* This was a blank line: */ if(*name==NULL && *arg==NULL) return; /* Name or value were set but not yet finished. */ if(notyetfinished) error_at_line(EXIT_FAILURE, 0, filename, lineno, "line finished before option name and value could " "be read."); } static int options_set_from_name(char *name, char *arg, struct argp_option *options, struct gal_options_common_params *cp, char *filename, size_t lineno) { size_t i; /* Go through all the options and find the one that should keep this value, then put its value into the appropriate key. Note that the options array finishs with an all zero element, so we don't need to know the number before hand.*/ for(i=0;1;++i) { /* Check if the key corresponds to this option. */ if( options[i].name && !strcmp(options[i].name, name) ) { /* Ignore this option and its value. This can happen in several situations: - Not all common options are used by all programs. When a program doesn't use an option, it will be given an `OPTION_HIDDEN' flag. There is no point in reading the values of such options. - When the option already has a value AND it ISN'T a linked list. */ if( options[i].flags==OPTION_HIDDEN || ( options[i].set && !gal_type_is_list(options[i].type ) ) ) return 0; /* Read the value into the option and do a sanity check. */ gal_options_read_check(&options[i], arg, filename, lineno, cp); /* We have found and set the value given to this option, so just return success (an error_t of 0 means success). */ return 0; } else { /* The last option has all its values set to zero. If we get to this point then the given name was not recognized and this function will return a 1. */ if(gal_options_is_last(&options[i])) return 1; } } } /* If the last config option has a value which is 1, then in some previous configuration file the user has asked to stop parsing configuration files. In that case, don't read this configuration file. */ static int options_lastconfig_has_been_called(struct argp_option *coptions) { size_t i; for(i=0; !gal_options_is_last(&coptions[i]); ++i) if( coptions[i].key == GAL_OPTIONS_KEY_LASTCONFIG && coptions[i].set && *((unsigned char *)(coptions[i].value)) ) return 1; return 0; } static void options_parse_file(char *filename, struct gal_options_common_params *cp, int enoent_abort) { FILE *fp; char *line, *name, *arg; size_t linelen=10, lineno=0; /* If `lastconfig' was called prior to this file, then just return and ignore this configuration file. */ if( options_lastconfig_has_been_called(cp->coptions) ) return; /* Open the file. If the file doesn't exist, then just ignore the configuration file and return. */ errno=0; fp=fopen(filename, "r"); if(fp==NULL) { if(errno==ENOENT && enoent_abort==0) return; else error(EXIT_FAILURE, errno, "%s: to be read as a configuration file", filename); } /* Allocate the space necessary to keep a copy of each line as we parse it. Note that `getline' is going to later `realloc' this space to fit the line length. */ errno=0; line=malloc(linelen*sizeof *line); if(line==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `line'", __func__, linelen*sizeof *line); /* Read the parameters line by line. */ while( getline(&line, &linelen, fp) != -1 ) { ++lineno; if( gal_txt_line_stat(line) == GAL_TXT_LINESTAT_DATAROW ) { /* Get the option name and argument/value. */ options_read_name_arg(line, filename, lineno, &name, &arg); /* First look into this program's options, if the option isn't found there, `options_set_from_name' will return 1. So the condition will succeed and we will start looking into the common options, if it isn't found there either, then report an error.*/ if( options_set_from_name(name, arg, cp->poptions, cp, filename, lineno) ) if( options_set_from_name(name, arg, cp->coptions, cp, filename, lineno) ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "unrecognized option `%s', for the full list of " "options, please run with `--help'", name); } } /* Close the file. */ errno=0; if(fclose(fp)) error(EXIT_FAILURE, errno, "%s: couldn't close after reading as " "a configuration file in %s", filename, __func__); /* Clean up and return. */ free(line); } /* This function will be used when the `--config' option is called. */ void * gal_options_call_parse_config_file(struct argp_option *option, char *arg, char *filename, size_t lineno, void *cp) { /* Call the confguration file parser. */ options_parse_file(arg, cp, 1); /* Just to avoid compiler warnings, then return, note that all pointers are just copies. */ option=NULL; filename=NULL; lineno=0; return NULL; } /* Read the configuration files and put the values of the options not given into it. The directories containing the configuration files are fixed for all the programs. - `SYSCONFIG_DIR' is passed onto the library functions at compile time from the command-line. You can search for it in the outputs of `make'. The main reason is that we want the the user still has the chance to change the installation directory after `configure'. - `USERCONFIG_DIR' is defined in `config.h'. - `CURDIRCONFIG_DIR' is defined in `config.h'. */ static void gal_options_parse_config_files(struct gal_options_common_params *cp) { char *home; char *filename; /* A small sanity check because in multiple places, we have assumed the on/off options have a type of `unsigned char'. */ if(GAL_OPTIONS_NO_ARG_TYPE != GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can fix " "the problem. `GAL_OPTIONS_NO_ARG_TYPE' must be the " "`uint8' type", __func__, PACKAGE_BUGREPORT); /* The program's current directory configuration file. */ asprintf(&filename, ".%s/%s.conf", PACKAGE, cp->program_exec); options_parse_file(filename, cp, 0); free(filename); /* Common options configuration file. */ asprintf(&filename, ".%s/%s.conf", PACKAGE, PACKAGE); options_parse_file(filename, cp, 0); free(filename); /* Read the home environment variable. */ home=options_get_home(); /* The program's user-wide configuration file. */ asprintf(&filename, "%s/%s/%s.conf", home, USERCONFIG_DIR, cp->program_exec); options_parse_file(filename, cp, 0); free(filename); /* Common options user-wide configuration file. */ asprintf(&filename, "%s/%s/%s.conf", home, USERCONFIG_DIR, PACKAGE); options_parse_file(filename, cp, 0); free(filename); /* The program's system-wide configuration file. */ asprintf(&filename, "%s/%s.conf", SYSCONFIG_DIR, cp->program_exec); options_parse_file(filename, cp, 0); free(filename); /* Common options system-wide configuration file. */ asprintf(&filename, "%s/%s.conf", SYSCONFIG_DIR, PACKAGE); options_parse_file(filename, cp, 0); free(filename); } static void options_reverse_lists_check_mandatory(struct gal_options_common_params *cp, struct argp_option *options) { size_t i; for(i=0; !gal_options_is_last(&options[i]); ++i) { if(options[i].set) switch(options[i].type) { case GAL_TYPE_STRLL: gal_list_str_reverse( (gal_list_str_t **)(options[i].value) ); break; } else if(options[i].mandatory==GAL_OPTIONS_MANDATORY) gal_options_add_to_not_given(cp, &options[i]); } } /* Read all configuration files and set common options */ void gal_options_read_config_set(struct gal_options_common_params *cp) { /* Parse all the configuration files. */ gal_options_parse_config_files(cp); /* Reverse the order of all linked list type options so the popping order is the same as the user's input order. We need to do this here because when printing those options, their order matters.*/ options_reverse_lists_check_mandatory(cp, cp->poptions); options_reverse_lists_check_mandatory(cp, cp->coptions); /* Abort if any of the mandatory options are not set. */ gal_options_abort_if_mandatory_missing(cp); /* If `numthreads' is 0, use the number of threads available to the system. */ if(cp->numthreads==0) cp->numthreads=gal_threads_number(); } /**********************************************************************/ /************ Printing/Writing ***************/ /**********************************************************************/ /* We don't want to print the values of configuration specific options and the output option. The output value is assumed to be specific to each input, and the configuration options are for reading the configuration, not writing it. */ static int option_is_printable(struct argp_option *option) { /* Use non-key fields: - If option is hidden (not relevant to this program). - Options with an INVALID type are not to be printed (they are probably processed to a higher level value with functions). */ if( (option->flags & OPTION_HIDDEN) || option->type==GAL_TYPE_INVALID ) return 0; /* Then check if it is a pre-program option. */ switch(option->key) { case GAL_OPTIONS_KEY_OUTPUT: case GAL_OPTIONS_KEY_CITE: case GAL_OPTIONS_KEY_PRINTPARAMS: case GAL_OPTIONS_KEY_CONFIG: case GAL_OPTIONS_KEY_SETDIRCONF: case GAL_OPTIONS_KEY_SETUSRCONF: case GAL_OPTIONS_KEY_LASTCONFIG: return 0; } return 1; } /* For a given type, print the value in `ptr' in a space of `width' elements. If `width==0', then return the width necessary to print the value. */ static int options_print_any_type(struct argp_option *option, void *ptr, int type, int width, FILE *fp, struct gal_options_common_params *cp) { char *str; /* Write the value into a string. */ str = ( option->func ? option->func(option, NULL, NULL, (size_t)(-1), cp->program_struct) : gal_type_to_string(ptr, type, 1) ); /* If only the width was desired, don't actually print the string, just return its length. Otherwise, print it. */ if(width) fprintf(fp, "%-*s ", width, str); else width=strlen(str); /* Free the allocated space and return. */ free(str); return width; } /* An option structure is given, return its name and value print lengths. */ static void options_correct_max_lengths(struct argp_option *option, int *max_nlen, int *max_vlen, struct gal_options_common_params *cp) { int vlen; gal_list_str_t *tmp; /* Invalid types are set for functions that don't save the raw user input, but do higher-level analysis on them for storing. */ if(option->type==GAL_TYPE_INVALID) return; /* Get the length of the value and save its length length if its larger than the widest value. */ if(gal_type_is_list(option->type)) { /* A small sanity check. */ if(option->type!=GAL_TYPE_STRLL) error(EXIT_FAILURE, 0, "%s: currently only string linked lists " "are acceptable for printing", __func__); /* Check each node, one by one. */ for(tmp=*(gal_list_str_t **)(option->value); tmp!=NULL; tmp=tmp->next) { /* Get the length of this node: */ vlen=options_print_any_type(option, &tmp->v, GAL_TYPE_STRING, 0, NULL, cp); /* If its larger than the maximum length, then put it in. */ if( vlen > *max_vlen ) *max_vlen=vlen; } } else { vlen=options_print_any_type(option, option->value, option->type, 0, NULL, cp); if( vlen > *max_vlen ) *max_vlen=vlen; } /* If the name of this option is larger than all existing, set its length as the largest name length. */ if( strlen(option->name) > *max_nlen ) *max_nlen = strlen(option->name); } /* To print the options nicely, we need the maximum lengths of the options and their values. */ static void options_set_lengths(struct argp_option *poptions, struct argp_option *coptions, int *namelen, int *valuelen, struct gal_options_common_params *cp) { int i, max_nlen=0, max_vlen=0; /* For program specific options. */ for(i=0; !gal_options_is_last(&poptions[i]); ++i) if(poptions[i].name && poptions[i].set) options_correct_max_lengths(&poptions[i], &max_nlen, &max_vlen, cp); /* For common options. Note that the options that will not be printed are in this category, so we also need to check them. The detailed steps are the same as before. */ for(i=0; !gal_options_is_last(&coptions[i]); ++i) if( coptions[i].name && coptions[i].set && option_is_printable(&coptions[i]) ) options_correct_max_lengths(&coptions[i], &max_nlen, &max_vlen, cp); /* Save the final values in the output pointers. */ *namelen = max_nlen; *valuelen = ( max_vlen < GAL_OPTIONS_MAX_VALUE_LEN ? max_vlen : GAL_OPTIONS_MAX_VALUE_LEN ); } /* The `#' before the `doc' string are not required by the configuration file parser when the documentation string fits in a line. However, when the `doc' string is longer than 80 characters, it will be cut between multiple lines and without the `#', the start of the line will be read as an option. */ static void options_print_doc(FILE *fp, const char *doc, int nvwidth) { size_t len=strlen(doc); /* The `+3' is because of the three extra spaces in this line: one before the variable name, one after it and one after the value. */ int i, prewidth=nvwidth+3, width=77-prewidth, cwidth; /* We only want the formatting when writing to stdout. */ if(lennext) { fprintf(fp, " %-*s ", namewidth, options[i].name); options_print_any_type(&options[i], &tmp->v, GAL_TYPE_STRING, valuewidth, fp, cp); options_print_doc(fp, options[i].doc, namewidth+valuewidth); } /* Normal types. */ else { fprintf(fp, " %-*s ", namewidth, options[i].name); options_print_any_type(&options[i], options[i].value, options[i].type, valuewidth, fp, cp); options_print_doc(fp, options[i].doc, namewidth+valuewidth); } } } static void options_print_all(struct gal_options_common_params *cp, char *dirname, const char *optionname) { size_t i; FILE *fp; time_t rawtime; char *topicstr, *filename; gal_list_i32_t *group=NULL; gal_list_str_t *topic=NULL; int groupint, namelen, valuelen; struct argp_option *coptions=cp->coptions, *poptions=cp->poptions; /* If the configurations are to be written to a file, then do the preparations. */ if(dirname) { /* Make the host directory if it doesn't already exist. */ gal_checkset_mkdir(dirname); /* Prepare the full filename: */ asprintf(&filename, "%s/%s.conf", dirname, cp->program_exec); /* Remove the file if it already exists. */ gal_checkset_writable_remove(filename, 0, 0); /* Open the file for writing */ errno=0; fp=fopen(filename, "w"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: couldn't open to write " "configuration file in %s", dirname, __func__); /* Print the basic information as comments in the file first. */ time(&rawtime); fprintf(fp, "# %s (%s) %s.\n" "# Written at %s#\n" "# - Empty lines are ignored.\n" "# - Lines starting with `#` are ignored.\n" "# - The long option name is followed by a value.\n" "# - The name and value should be separated by atleast\n" "# one white space character (for example space or tab).\n" "# - If the value has space, enclose the whole value in\n" "# double quotation (\") signs.\n" "# - After the value, the rest of the line is ignored.\n" "#\n# Run `info %s' for a more elaborate description of each " "option.\n", cp->program_name, PACKAGE_NAME, PACKAGE_VERSION, ctime(&rawtime), cp->program_exec); } else fp=stdout; /* Parse all the options with a title, note that the `Input', `Output' and `Operating mode' options are defined in the common options, while the (possible) other groups are in the program specific options. We will only be dealing with the `topics' linked list in this function and the strings in `poption' are statically allocated, so its fine to not waste CPU cycles allocating and freeing.*/ for(i=0; !gal_options_is_last(&coptions[i]); ++i) if(coptions[i].name==NULL && coptions[i].key==0 && coptions[i].doc) { /* The `(char *)' is because `.doc' is a constant and this helps remove the compiler warning. */ gal_list_i32_add(&group, coptions[i].group); gal_list_str_add(&topic, (char *)coptions[i].doc, 0); } for(i=0; !gal_options_is_last(&poptions[i]); ++i) if(poptions[i].name==NULL && poptions[i].key==0 && poptions[i].doc) { gal_list_i32_add(&group, poptions[i].group); gal_list_str_add(&topic, (char *)poptions[i].doc, 0); } /* Reverse the linked lists to get the same input order. */ gal_list_str_reverse(&topic); gal_list_i32_reverse(&group); /* Get the maximum width of names and values. */ options_set_lengths(poptions, coptions, &namelen, &valuelen, cp); /* Go over each topic and print every option that is in this group. */ while(topic) { /* Pop the nodes from the linked list. */ groupint = gal_list_i32_pop(&group); topicstr = gal_list_str_pop(&topic); /* First print the topic, */ fprintf(fp, "\n# %s\n", topicstr); /* fprintf(fp, "# "); i=0; while(i++program_name, optionname); free(filename); } /* Exit the program successfully */ exit(EXIT_SUCCESS); } #define OPTIONS_UINT8VAL *(uint8_t *)(cp->coptions[i].value) void gal_options_print_state(struct gal_options_common_params *cp) { size_t i; unsigned char sum=0; char *home, *dirname; /* A sanity check is necessary first. We want to make sure that the user hasn't called more than one of these options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) if(cp->coptions[i].set) switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_PRINTPARAMS: case GAL_OPTIONS_KEY_SETDIRCONF: case GAL_OPTIONS_KEY_SETUSRCONF: sum += OPTIONS_UINT8VAL; } if(sum>1) error(EXIT_FAILURE, 0, "only one of the `printparams', `setdirconf' " "and `setusrconf' options can be called in each run"); /* Print the required configuration files. Note that simply having a non-NULL value is not enough. They can have a value of 1 or 0, and the respective file should only be created if we have a value of 1. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) if(cp->coptions[i].set && OPTIONS_UINT8VAL) switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_PRINTPARAMS: options_print_all(cp, NULL, NULL); break; case GAL_OPTIONS_KEY_SETDIRCONF: asprintf(&dirname, ".%s", PACKAGE); options_print_all(cp, dirname, cp->coptions[i].name); free(dirname); break; case GAL_OPTIONS_KEY_SETUSRCONF: home=options_get_home(); asprintf(&dirname, "%s/%s", home, USERCONFIG_DIR); options_print_all(cp, dirname, cp->coptions[i].name); free(dirname); break; } } gnuastro-0.5/lib/match.c0000644000175000017500000006313213216276304012160 00000000000000/********************************************************************* match -- Functions to match catalogs and WCS. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include /**********************************************************************/ /***************** Coordinate match custom list *******************/ /**********************************************************************/ struct match_coordinate_sfll { float f; size_t v; struct match_coordinate_sfll *next; }; static void match_coordinate_add_to_sfll(struct match_coordinate_sfll **list, size_t value, float fvalue) { struct match_coordinate_sfll *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: new node couldn't be allocated", __func__); newnode->v=value; newnode->f=fvalue; newnode->next=*list; *list=newnode; } static void match_coordinate_pop_from_sfll(struct match_coordinate_sfll **list, size_t *value, float *fvalue) { struct match_coordinate_sfll *tmp; tmp=*list; *value=tmp->v; *fvalue=tmp->f; *list=tmp->next; free(tmp); } /********************************************************************/ /************* Coordinate matching *************/ /************* Sanity checks and preparations *************/ /********************************************************************/ /* Since these checks are repetative, its easier to have a separate function for both inputs. */ static void match_coordinate_sanity_check_columns(gal_data_t *coord, char *info, int inplace, int *allf64) { gal_data_t *tmp; for(tmp=coord; tmp!=NULL; tmp=tmp->next) { if(tmp->type!=GAL_TYPE_FLOAT64) { if(inplace) error(EXIT_FAILURE, 0, "%s: when `inplace' is activated, the " "input coordinates must have `float64' type. At least " "one node of the %s list has type of `%s'", __func__, info, gal_type_name(tmp->type, 1)); else *allf64=0; } if(tmp->ndim!=1) error(EXIT_FAILURE, 0, "%s: each input coordinate column must have " "a single dimension (be a single column). Atleast one node of " "the %s list has %zu dimensions", __func__, info, tmp->ndim); if(tmp->size!=coord->size) error(EXIT_FAILURE, 0, "%s: the nodes of each list of coordinates " "must have the same number of elements. At least one node of " "the %s list has %zu elements while the first has %zu " "elements", __func__, info, tmp->size, coord->size); } } /* To keep the main function clean, we'll do the sanity checks here. */ static void match_coordinaes_sanity_check(gal_data_t *coord1, gal_data_t *coord2, double *aperture, int inplace, int *allf64) { size_t ncoord1=gal_list_data_number(coord1); /* Make sure both lists have the same number of datasets. NOTE: they don't need to have the same number of elements. */ if( ncoord1!=gal_list_data_number(coord2) ) error(EXIT_FAILURE, 0, "%s: the two inputs have different numbers of " "datasets (%zu and %zu respectively)", __func__, ncoord1, gal_list_data_number(coord2)); /* This function currently only works on 1 and 2 dimensional inputs. */ if(ncoord1>2) error(EXIT_FAILURE, 0, "%s: %zu dimension matching requested, this " "function currently only matches datasets with a maximum of 2 " "dimensions", __func__, ncoord1); /* Check the column properties. */ match_coordinate_sanity_check_columns(coord1, "first", inplace, allf64); match_coordinate_sanity_check_columns(coord2, "second", inplace, allf64); /* Check the aperture values. */ if(aperture[0]<=0) error(EXIT_FAILURE, 0, "%s: the first value in the aperture (%g) cannot " "be zero or negative", __func__, aperture[0]); if(ncoord1==2) if(aperture[1]<=0 || aperture[1]>1) error(EXIT_FAILURE, 0, "%s: the second value in the aperture (%g) " "is the axis ratio, so it must be larger than zero and less " "than 1", __func__, aperture[1]); } /* To keep things clean, the sorting of each input array will be done in this function. */ static size_t * match_coordinates_prepare_sort(gal_data_t *coords, size_t minmapsize) { gal_data_t *tmp; size_t *permutation=gal_data_malloc_array(GAL_TYPE_SIZE_T, coords->size, __func__, "permutation"); /* Get the permutation necessary to sort all the columns (based on the first column). */ gsl_sort_index(permutation, coords->array, 1, coords->size); /* Sort all the coordinates. */ for(tmp=coords; tmp!=NULL; tmp=tmp->next) gal_permutation_apply(tmp, permutation); /* Clean up. */ return permutation; } /* Do the preparations for matching of coordinates. */ static void match_coordinates_prepare(gal_data_t *coord1, gal_data_t *coord2, int sorted_by_first, int inplace, int allf64, gal_data_t **A_out, gal_data_t **B_out, size_t **A_perm, size_t **B_perm, size_t minmapsize) { gal_data_t *c, *tmp, *A=NULL, *B=NULL; /* Sort the datasets if they aren't sorted. If the dataset is already sorted, then `inplace' is irrelevant. */ if(sorted_by_first && allf64) { *A_out=coord1; *B_out=coord2; } else { /* Allocating a new list is only necessary when `inplace==0' or all the columns are double. */ if( inplace && allf64 ) { *A_out=coord1; *B_out=coord2; } else { /* Copy the first list. */ for(tmp=coord1; tmp!=NULL; tmp=tmp->next) { c=gal_data_copy(tmp); c->next=NULL; gal_list_data_add(&A, c); } /* Copy the second list. */ for(tmp=coord2; tmp!=NULL; tmp=tmp->next) { c=gal_data_copy(tmp); c->next=NULL; gal_list_data_add(&B, c); } /* Reverse both lists: the copying process reversed the order. */ gal_list_data_reverse(&A); gal_list_data_reverse(&B); /* Set the output pointers. */ *A_out=A; *B_out=B; } /* Sort each dataset by the first coordinate. */ *A_perm = match_coordinates_prepare_sort(*A_out, minmapsize); *B_perm = match_coordinates_prepare_sort(*B_out, minmapsize); } } /********************************************************************/ /************* Coordinate matching *************/ /********************************************************************/ static double match_coordinates_elliptical_r_2d(double d1, double d2, double *ellipse, double c, double s) { double Xr = d1 * ( c ) + d2 * ( s ); double Yr = d1 * ( -1.0f*s ) + d2 * ( c ); return sqrt( Xr*Xr + Yr*Yr/ellipse[1]/ellipse[1] ); } static double match_coordinates_distance(double *delta, int iscircle, size_t ndim, double *aperture, double c, double s) { /* For more than one dimension, we'll need to calculate the distance from the deltas (differences) in each dimension. */ switch(ndim) { case 1: return fabs(delta[0]); case 2: return ( iscircle ? sqrt( delta[0]*delta[0] + delta[1]*delta[1] ) : match_coordinates_elliptical_r_2d(delta[0], delta[1], aperture, c, s) ); default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The value %zu is not recognized for ndim", __func__, PACKAGE_BUGREPORT, ndim); } /* Control should not reach this point. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return NAN; } /* Go through both catalogs and find which records/rows in the second catalog (catalog b) are within the acceptable distance of each record in the first (a). */ static void match_coordinates_second_in_first(gal_data_t *A, gal_data_t *B, double *aperture, struct match_coordinate_sfll **bina) { /* To keep things easy to read, all variables related to catalog 1 start with an `a' and things related to catalog 2 are marked with a `b'. The redundant variables (those that equal a previous value) are only defined to make it easy to read the code.*/ int iscircle=0; double r, c=NAN, s=NAN; size_t i, ar=A->size, br=B->size; size_t ai, bi, blow=0, prevblow=0; size_t ndim=gal_list_data_number(A); double dist[2]={NAN,NAN}, delta[2]={NAN,NAN}; double *a[2]={A->array, A->next ? A->next->array : NULL}; double *b[2]={B->array, B->next ? B->next->array : NULL}; /* See if the aperture is a circle or not. */ switch(ndim) { case 1: iscircle = 0; /* Irrelevant for 1D. */ break; case 2: iscircle = aperture[1]==1 ? 1 : 0; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The value %zu is not recognized for ndim", __func__, PACKAGE_BUGREPORT, ndim); } /* Preparations for the shape of the aperture. */ if(ndim==1 || iscircle) dist[0]=dist[1]=aperture[0]; else { /* Using the box that encloses the aperture, calculate the distance along each axis. */ gal_box_bound_ellipse_extent(aperture[0], aperture[0]*aperture[1], aperture[2], dist); /* Calculate the sin and cos of the given ellipse if necessary for ease of processing later. */ c = cos( aperture[2] * M_PI/180.0 ); s = sin( aperture[2] * M_PI/180.0 ); } /* For each row/record of catalog `a', make a list of the nearest records in catalog b within the maximum distance. Note that both catalogs are sorted by their first axis coordinate.*/ for(ai=0;ai= a[1][ai]-dist[1] && b[1][bi] <= a[1][ai]+dist[1] ) ) { /* Now, `bi' is within the rectangular range of `ai'. But this is not enough to consider the two objects matched for the following reasons: 1) Until now we have avoided calculations other than larger or smaller on double precision floating point variables for efficiency. So the `bi' is within a square of side `dist[0]*dist[1]' around `ai' (not within a fixed radius). 2) Other objects in the `b' catalog may be closer to `ai' than this `bi'. 3) The closest `bi' to `ai' might be closer to another catalog `a' record. To address these problems, we will use a linked list to keep the indexes of the `b's near `ai', along with their distance. We only add the `bi's to this list that are within the acceptable distance. Since we are dealing with much fewer objects at this stage, it is justified to do complex mathematical operations like square root and multiplication. This fixes the first problem. The next two problems will be solved with the list after parsing of the whole catalog is complete.*/ for(i=0;inext) printf("%lu: %f\n", tmp->v, tmp->f); } */ } } /* In `match_coordinates_second_in_first', we made an array of lists, here we want to reverse that list to fix the second two issues that were discussed there. */ void match_coordinates_rearrange(gal_data_t *A, gal_data_t *B, struct match_coordinate_sfll **bina) { size_t bi; float *fp, *fpf, r, *ainb; size_t ai, ar=A->size, br=B->size; /* Allocate the space for `ainb' and initialize it to NaN (since zero is meaningful) in this context (both for indexs and also for floats). This is a two column array that will keep the distance and index of the closest element in catalog `a' for each element in catalog b. */ errno=0; ainb=calloc(2*br, sizeof *ainb); if(ainb==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for `ainb'", __func__, br*sizeof *ainb); fpf=(fp=ainb)+2*br; do *fp++=NAN; while(fpf ) { bina[ai]->f=r; bina[ai]->v=bi; } } else match_coordinate_add_to_sfll(&bina[ai], bi, r); } /* For checking the status of affairs uncomment this block { size_t bi, counter=0; double *a[2]={A->array, A->next->array}; double *b[2]={B->array, B->next->array}; printf("Rearranged bina:\n"); for(ai=0;aiv; printf("A_%lu (%.8f, %.8f) <--> B_%lu (%.8f, %.8f):\n\t%f\n", ai, a[0][ai], a[1][ai], bi, b[0][bi], b[1][bi], bina[ai]->f); } printf("\n-----------\nMatched: %zu\n", counter); } exit(0); */ /* Clean up */ free(ainb); } /* The matching has been done, write the output. */ static gal_data_t * gal_match_coordinates_output(gal_data_t *A, gal_data_t *B, size_t *A_perm, size_t *B_perm, struct match_coordinate_sfll **bina, size_t minmapsize) { float r; double *rval; gal_data_t *out; uint8_t *Bmatched; size_t ai, bi, nummatched=0; size_t *aind, *bind, match_i, nomatch_i; /* Find how many matches there were in total */ for(ai=0;aisize;++ai) if(bina[ai]) ++nummatched; /* If there aren't any matches, return NULL. */ if(nummatched==0) return NULL; /* Allocate the output list. */ out=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &A->size, NULL, 0, minmapsize, "CAT1_ROW", "counter", "Row index in first catalog (counting from 0)."); out->next=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &B->size, NULL, 0, minmapsize, "CAT2_ROW", "counter", "Row index in second catalog (counting " "from 0)."); out->next->next=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &nummatched, NULL, 0, minmapsize, "MATCH_DIST", NULL, "Distance between the match."); /* Allocate the `Bmatched' array which is a flag for which rows of the second catalog were matched. The columns that had a match will get a value of one while we are parsing them below. */ Bmatched=gal_data_calloc_array(GAL_TYPE_UINT8, B->size, __func__, "Bmatched"); /* Initialize the indexs. We want the first `nummatched' indexs in both outputs to be the matching rows. The non-matched rows should start to be indexed after the matched ones. So the first non-matched index is at the index `nummatched'. */ match_i = 0; nomatch_i = nummatched; /* Fill in the output arrays. */ aind = out->array; bind = out->next->array; rval = out->next->next->array; for(ai=0;aisize;++ai) { /* A match was found. */ if(bina[ai]) { /* Note that the permutation keeps the original indexs. */ match_coordinate_pop_from_sfll(&bina[ai], &bi, &r); rval[ match_i ] = r; aind[ match_i ] = A_perm ? A_perm[ai] : ai; bind[ match_i++ ] = B_perm ? B_perm[bi] : bi; /* Set a `1' for this object in the second catalog. This will later be used to find which rows didn't match to fill in the output.. */ Bmatched[ B_perm ? B_perm[bi] : bi ] = 1; } /* No match found. At this stage, we can only fill the indexs of the first input. The second input needs to be matched afterwards.*/ else aind[ nomatch_i++ ] = A_perm ? A_perm[ai] : ai; } /* Complete the second input's permutation. */ nomatch_i=nummatched; for(bi=0;bisize;++bi) if( Bmatched[bi] == 0 ) bind[ nomatch_i++ ] = bi; /* For a check printf("\nFirst input's permutation:\n"); for(ai=0;aisize;++ai) printf("%s%zu\n", aisize;++bi) printf("%s%zu\n", bisize' elements (pointers) and for each, it keeps a list of `b' elements that are nearest to it. */ errno=0; bina=calloc(A->size, sizeof *bina); if(bina==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for `bina'", __func__, A->size*sizeof *bina); /* All records in `b' that match each `a' (possibly duplicate). */ match_coordinates_second_in_first(A, B, aperture, bina); /* Two re-arrangings will fix the issue. */ match_coordinates_rearrange(A, B, bina); /* The match is done, write the output. */ out=gal_match_coordinates_output(A, B, A_perm, B_perm, bina, minmapsize); /* Clean up. */ free(bina); if(A!=coord1) { gal_list_data_free(A); gal_list_data_free(B); } if(A_perm) free(A_perm); if(B_perm) free(B_perm); /* Set `nummatched' and return output. */ *nummatched = out ? out->next->next->size : 0; return out; } gnuastro-0.5/lib/list.c0000644000175000017500000005206413121462410012027 00000000000000/********************************************************************* Functions for linked lists. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include /**************************************************************** ***************** String ******************** ****************************************************************/ void gal_list_str_add(gal_list_str_t **list, char *value, int allocate) { gal_list_str_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); if(allocate) gal_checkset_allocate_copy(value, &newnode->v); else newnode->v=value; newnode->next=*list; *list=newnode; } char * gal_list_str_pop(gal_list_str_t **list) { char *out=NULL; gal_list_str_t *tmp; if(*list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_str_number(gal_list_str_t *list) { size_t num=0; gal_list_str_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } void gal_list_str_print(gal_list_str_t *list) { gal_list_str_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("%s\n", tmp->v); } void gal_list_str_reverse(gal_list_str_t **list) { char *thisstring; gal_list_str_t *correctorder=NULL; /* Only do the reversal if there is more than one element. */ if( *list && (*list)->next ) { while(*list!=NULL) { thisstring=gal_list_str_pop(list); gal_list_str_add(&correctorder, thisstring, 0); } *list=correctorder; } } void gal_list_str_free(gal_list_str_t *list, int freevalue) { gal_list_str_t *tmp; while(list!=NULL) { tmp=list->next; if(freevalue) free(list->v); free(list); list=tmp; } } /**************************************************************** ***************** int ******************** ****************************************************************/ void gal_list_i32_add(gal_list_i32_t **list, int32_t value) { gal_list_i32_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->next=*list; *list=newnode; } int32_t gal_list_i32_pop(gal_list_i32_t **list) { gal_list_i32_t *tmp; int out=GAL_BLANK_INT32; if(*list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_i32_number(gal_list_i32_t *list) { size_t num=0; gal_list_i32_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } void gal_list_i32_print(gal_list_i32_t *list) { gal_list_i32_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("%"PRId32"\n", tmp->v); } void gal_list_i32_reverse(gal_list_i32_t **list) { int thisnum; gal_list_i32_t *correctorder=NULL; if( *list && (*list)->next ) { while(*list!=NULL) { thisnum=gal_list_i32_pop(list); gal_list_i32_add(&correctorder, thisnum); } *list=correctorder; } } int32_t * gal_list_i32_to_array(gal_list_i32_t *list, int reverse, size_t *num) { size_t i; int32_t *out=NULL; gal_list_i32_t *tmp; *num=gal_list_i32_number(list); if(*num) { out=gal_data_malloc_array(GAL_TYPE_SIZE_T, *num, __func__, "out"); i = reverse ? *num-1: 0; if(reverse) for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i--]=tmp->v; else for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i++]=tmp->v; } return out; } void gal_list_i32_free(gal_list_i32_t *list) { gal_list_i32_t *tmp, *ttmp; tmp=list; while(tmp!=NULL) { ttmp=tmp->next; free(tmp); tmp=ttmp; } } /**************************************************************** ***************** size_t ******************** ****************************************************************/ void gal_list_sizet_add(gal_list_sizet_t **list, size_t value) { gal_list_sizet_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->next=*list; *list=newnode; } size_t gal_list_sizet_pop(gal_list_sizet_t **list) { gal_list_sizet_t *tmp; size_t out=GAL_BLANK_SIZE_T; if(list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_sizet_number(gal_list_sizet_t *list) { size_t num=0; gal_list_sizet_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } void gal_list_sizet_print(gal_list_sizet_t *list) { gal_list_sizet_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) printf("%zu\n", tmp->v); return; } void gal_list_sizet_reverse(gal_list_sizet_t **list) { size_t thisnum; gal_list_sizet_t *correctorder=NULL; if( *list && (*list)->next ) { while(*list!=NULL) { thisnum=gal_list_sizet_pop(list); gal_list_sizet_add(&correctorder, thisnum); } *list=correctorder; } } size_t * gal_list_sizet_to_array(gal_list_sizet_t *list, int reverse, size_t *num) { size_t i, *out=NULL; gal_list_sizet_t *tmp; *num=gal_list_sizet_number(list); if(*num) { out=gal_data_malloc_array(GAL_TYPE_SIZE_T, *num, __func__, "out"); i = reverse ? *num-1: 0; if(reverse) for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i--]=tmp->v; else for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i++]=tmp->v; } return out; } void gal_list_sizet_free(gal_list_sizet_t *list) { gal_list_sizet_t *tmp, *ttmp; tmp=list; while(tmp!=NULL) { ttmp=tmp->next; free(tmp); tmp=ttmp; } } /**************************************************************** ***************** Float ******************** ****************************************************************/ void gal_list_f32_add(gal_list_f32_t **list, float value) { struct gal_list_f32_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->next=*list; *list=newnode; } float gal_list_f32_pop(gal_list_f32_t **list) { float out=NAN; gal_list_f32_t *tmp; if(*list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_f32_number(gal_list_f32_t *list) { size_t num=0; gal_list_f32_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } void gal_list_f32_reverse(gal_list_f32_t **list) { float thisnum; gal_list_f32_t *correctorder=NULL; if( *list && (*list)->next ) { while(*list!=NULL) { thisnum=gal_list_f32_pop(list); gal_list_f32_add(&correctorder, thisnum); } *list=correctorder; } } void gal_list_f32_print(gal_list_f32_t *list) { gal_list_f32_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) printf("%f\n", tmp->v); return; } float * gal_list_f32_to_array(gal_list_f32_t *list, int reverse, size_t *num) { size_t i; float *out=NULL; gal_list_f32_t *tmp; /* Find the number of elements: */ *num=gal_list_f32_number(list); /* If there is actually anything in the list, then allocate the array and fill it in. */ if(*num) { /* Allocate the space: */ out=gal_data_malloc_array(GAL_TYPE_FLOAT32, *num, __func__, "out"); /* Fill in the array. */ i = reverse ? *num-1: 0; if(reverse) for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i--]=tmp->v; else for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i++]=tmp->v; } /* Return the created array. */ return out; } void gal_list_f32_free(gal_list_f32_t *list) { gal_list_f32_t *tmp, *ttmp; tmp=list; while(tmp!=NULL) { ttmp=tmp->next; free(tmp); tmp=ttmp; } } /**************************************************************** ***************** Double ******************** ****************************************************************/ void gal_list_f64_add(gal_list_f64_t **list, double value) { gal_list_f64_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->next=*list; *list=newnode; } double gal_list_f64_pop(gal_list_f64_t **list) { double out=NAN; gal_list_f64_t *tmp; if(*list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_f64_number(gal_list_f64_t *list) { size_t num=0; gal_list_f64_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } void gal_list_f64_print(gal_list_f64_t *list) { gal_list_f64_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) printf("%f\n", tmp->v); return; } void gal_list_f64_reverse(gal_list_f64_t **list) { double thisvalue; gal_list_f64_t *correctorder=NULL; /* Only do the reversal if there is more than one element. */ if( *list && (*list)->next ) { while(*list!=NULL) { thisvalue=gal_list_f64_pop(list); gal_list_f64_add(&correctorder, thisvalue); } *list=correctorder; } } double * gal_list_f64_to_array(gal_list_f64_t *list, int reverse, size_t *num) { size_t i; double *out=NULL; gal_list_f64_t *tmp; /* Find the number of elements: */ *num=gal_list_f64_number(list); /* If there is actually anything in the list, then allocate the array and fill it in. */ if(*num) { /* Allocate the space: */ out=gal_data_malloc_array(GAL_TYPE_FLOAT64, *num, __func__, "out"); /* Fill in the array. */ i = reverse ? *num-1: 0; if(reverse) for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i--]=tmp->v; else for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i++]=tmp->v; } /* Return the created array. */ return out; } void gal_list_f64_free(gal_list_f64_t *list) { gal_list_f64_t *tmp, *ttmp; tmp=list; while(tmp!=NULL) { ttmp=tmp->next; free(tmp); tmp=ttmp; } } /**************************************************************** ***************** void * ******************** ****************************************************************/ void gal_list_void_add(gal_list_void_t **list, void *value) { gal_list_void_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->next=*list; *list=newnode; } void * gal_list_void_pop(gal_list_void_t **list) { void *out=NULL; gal_list_void_t *tmp; if(*list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_void_number(gal_list_void_t *list) { size_t num=0; gal_list_void_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } void gal_list_void_reverse(gal_list_void_t **list) { void *thisptr; gal_list_void_t *correctorder=NULL; if( *list && (*list)->next ) { while(*list!=NULL) { thisptr=gal_list_void_pop(list); gal_list_void_add(&correctorder, thisptr); } *list=correctorder; } } void gal_list_void_free(gal_list_void_t *list, int freevalue) { gal_list_void_t *tmp=list, *ttmp; while(tmp!=NULL) { if(freevalue) free(tmp->v); ttmp=tmp->next; free(tmp); tmp=ttmp; } } /**************************************************************** **************** Ordered size_t ******************** ****************************************************************/ /* We want to put the nodes in order based on the 'tosort' value of each node. The top element should always have the smallest radius. */ void gal_list_osizet_add(gal_list_osizet_t **list, size_t value, float tosort) { gal_list_osizet_t *newnode, *tmp=*list, *prev=NULL; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->s=tosort; /* *list points to the smallest value in the queue!*/ while(tmp!=NULL) { if(tosorts) break; /* No need for else, it will only come here if the condition above is not satisfied. */ prev=tmp; tmp=tmp->next; } if(tmp==NULL) /* This is the largest value so far. */ { /* '*list' only changes if it is NULL. */ newnode->next=NULL; if(prev) prev->next=newnode; /* 'prev' is not NULL! */ else *list=newnode; /* Only for initial node. */ } else { if(prev) prev->next=newnode; else *list=newnode; /* 'tosort' is smaller than all. */ newnode->next=tmp; } } /* Note that the popped element is the smallest! */ size_t gal_list_osizet_pop(gal_list_osizet_t **list, float *sortvalue) { size_t value; gal_list_osizet_t *tmp=*list; if(*list) { value=tmp->v; *sortvalue=tmp->s; *list=tmp->next; free(tmp); } else { value=GAL_BLANK_SIZE_T; *sortvalue=NAN; } return value; } /* Add the elements of an gal_list_osll to a gal_list_sll. */ void gal_list_osizet_to_sizet_free(gal_list_osizet_t *in, gal_list_sizet_t **out) { gal_list_osizet_t *tmp; while(in!=NULL) { tmp=in->next; gal_list_sizet_add(out, in->v); free(in); in=tmp; } } /**************************************************************** ****************** Two way, Ordered SLL ******************** ***************** size_t ******************** ****************************************************************/ /* Doubly-linked ordered size_t list can be visualized like this: largest pointer | NULL <-- (v0,s0) <--> (v1,s1) <--> ... (vn,sn) --> NULL | smallest pointer Where s(n)>s(n+1) for all n. */ /* Very similar to Ordered SLL, but now it is two way. */ void gal_list_dosizet_add(gal_list_dosizet_t **largest, gal_list_dosizet_t **smallest, size_t value, float tosort) { gal_list_dosizet_t *newnode, *tmp=*largest; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->s=tosort; newnode->prev=NULL; while(tmp!=NULL) { if(tosort >= tmp->s) break; /* No need for else, it will only come here if the condition above is not satisfied. */ newnode->prev=tmp; tmp=tmp->next; } if(tmp==NULL) /* This is the smallest value so far. */ { /* '*largest' only changes if it is NULL. */ newnode->next=NULL; *smallest=newnode; if(newnode->prev) /* 'prev' is not NULL! */ newnode->prev->next=newnode; else /* 'prev is NULL, Only first. */ *largest=newnode; } else { if(newnode->prev) { newnode->prev->next->prev=newnode; newnode->prev->next=newnode; } else { (*largest)->prev=newnode; *largest=newnode; /* 'tosort' is larger than all. */ } newnode->next=tmp; } } /* Note that start has to be initialized. */ size_t gal_list_dosizet_pop_smallest(gal_list_dosizet_t **largest, gal_list_dosizet_t **smallest, float *tosort) { size_t value; gal_list_dosizet_t *tmp=*smallest; if(*smallest) { value=tmp->v; *tosort=tmp->s; *smallest=tmp->prev; free(tmp); if(*smallest) (*smallest)->next=NULL; else *largest=NULL; } else { /* If `smallest' is NULL, `largest' should also be NULL. */ if(*largest) error(EXIT_FAILURE, 0, "%s: `largest' and `smallest' pointers must " "both be non-NULL or both be NULL. However, in this call, " "`smallest' was NULL while `largest' isn't NULL", __func__); value=GAL_BLANK_SIZE_T; *tosort=NAN; } /*printf("Popped v: %zu, s: %f\n", *value, *tosort);*/ return value; } void gal_list_dosizet_print(gal_list_dosizet_t *largest, gal_list_dosizet_t *smallest) { size_t counter=1; /* We are not counting array elements :-D ! */ while(largest!=NULL) { printf("\t%-5zu (%zu, %.4f) \n", counter++, largest->v, largest->s); largest=largest->next; printf("\t\t\t\t(%zu, %.4f)\n", smallest->v, smallest->s); smallest=smallest->prev; } printf("\n"); } void gal_list_dosizet_to_sizet(gal_list_dosizet_t *in, gal_list_sizet_t **out) { gal_list_dosizet_t *tmp; while(in!=NULL) { tmp=in->next; gal_list_sizet_add(out, in->v); free(in); in=tmp; } } void gal_list_dosizet_free(gal_list_dosizet_t *largest) { gal_list_dosizet_t *tmp; while(largest!=NULL) { tmp=largest->next; free(largest); largest=tmp; } } /*********************************************************************/ /************* Data structure as a linked list ******************/ /*********************************************************************/ /* Add a new data structure to the top of an existing linked list of data structures. Note that if the new node is its self a list, all its nodes will be added to the list. */ void gal_list_data_add(gal_data_t **list, gal_data_t *newnode) { gal_data_t *tmp=newnode, *toadd; /* Check if newnode is itself a list or not. */ if(newnode->next) { /* Go onto the last node in newnode's existing list. */ while(tmp->next) tmp=tmp->next; /* Set the last node as the node to add to the list. */ toadd=tmp; } else /* Its not a list, so just set it to `toadd'. */ toadd=newnode; /* Set the next element of toadd and update what list points to.*/ toadd->next=*list; *list=toadd; } void gal_list_data_add_alloc(gal_data_t **list, void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, char *name, char *unit, char *comment) { gal_data_t *newnode; /* Put all the input information into a new data structure node. */ newnode=gal_data_alloc(array, type, ndim, dsize, wcs, clear, minmapsize, name, unit, comment); /* Add the new node to the list. */ gal_list_data_add(list, newnode); } gal_data_t * gal_list_data_pop(gal_data_t **list) { gal_data_t *out=NULL; /* If list is not empty. */ if(*list) { /* Keep the top pointer. */ out=*list; /* Move the list pointer to the next node. */ *list=out->next; /* Set the next poitner of the out pointer to NULL so it isn't interpretted as a list any more. */ out->next=NULL; } return out; } void gal_list_data_reverse(gal_data_t **list) { gal_data_t *popped, *in=*list, *reversed=NULL; /* Only do the job if the list is not NULL and has more than one node. */ if( in && in->next ) { while(in!=NULL) { popped=gal_list_data_pop(&in); gal_list_data_add(&reversed, popped); } *list=reversed; } } size_t gal_list_data_number(gal_data_t *list) { size_t num=0; while(list!=NULL) { ++num; list=list->next; } return num; } void gal_list_data_free(gal_data_t *list) { struct gal_data_t *tmp; while(list!=NULL) { tmp=list->next; gal_data_free(list); list=tmp; } } gnuastro-0.5/lib/interpolate.c0000644000175000017500000003662313121462410013405 00000000000000/********************************************************************* Interpolate - Fill blank values in a dataset This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /*********************************************************************/ /******************** Nearest neighbor ********************/ /*********************************************************************/ /* These are bit-flags, so we're using hexadecimal notation. */ #define INTERPOLATE_FLAGS_NO 0 #define INTERPOLATE_FLAGS_CHECKED 0x1 #define INTERPOLATE_FLAGS_BLANK 0x2 /* Parameters for interpolation on threads. */ struct interpolate_params { gal_data_t *input; size_t num; gal_data_t *out; gal_data_t *blanks; size_t numneighbors; uint8_t *thread_flags; int onlyblank; gal_list_void_t *ngb_vals; struct gal_tile_two_layer_params *tl; }; /* Run the interpolation on many threads. */ static void * interpolate_close_neighbors_on_thread(void *in_prm) { /* Variables that others depend on. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct interpolate_params *prm=(struct interpolate_params *)(tprm->params); struct gal_tile_two_layer_params *tl=prm->tl; int correct_index=(tl && tl->totchannels>1 && !tl->workoverch); gal_data_t *input=prm->input; /* Rest of variables. */ void *nv; float pdist; uint8_t *b, *bf, *bb; gal_list_void_t *tvll; gal_list_dosizet_t *lQ, *sQ; size_t ngb_counter, dist, pind, *dinc; size_t i, index, fullind, chstart=0, ndim=input->ndim; gal_data_t *median, *tin, *tout, *tnear, *nearest=NULL; size_t *icoord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "icoord"); size_t *ncoord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "ncoord"); size_t size = (correct_index ? tl->tottilesinch : input->size); size_t *dsize = (correct_index ? tl->numtilesinch : input->dsize); uint8_t *fullflag=&prm->thread_flags[tprm->id*input->size], *flag=fullflag; /* Initializations. */ bb=prm->blanks->array; bf=(b=fullflag)+input->size; dinc=gal_dimension_increment(ndim, dsize); do *b = *bb++ ? INTERPOLATE_FLAGS_BLANK : 0; while(++bngb_vals; tvll!=NULL; tvll=tvll->next) { nv=gal_data_ptr_increment(tvll->v, tprm->id*prm->numneighbors, input->type); gal_list_data_add_alloc(&nearest, nv, tin->type, 1, &prm->numneighbors, NULL, 0, -1, NULL, NULL, NULL); tin=tin->next; } gal_list_data_reverse(&nearest); /* Go over all the points given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ fullind=tprm->indexs[i]; /* If the caller only wanted to interpolate over blank values and this value is not blank (we know from the flags), then just set the output value at this element to the input value and go to the next element. */ if(prm->onlyblank && !(fullflag[fullind] & INTERPOLATE_FLAGS_BLANK) ) { tin=input; for(tout=prm->out; tout!=NULL; tout=tout->next) { memcpy(gal_data_ptr_increment(tout->array, fullind, tin->type), gal_data_ptr_increment(tin->array, fullind, tin->type), gal_type_sizeof(tin->type)); tin=tin->next; } continue; } /* Correct the index (if necessary). When the values come from a tiled dataset, the caller might want to interpolate the values of each channel separately (not mix values from different channels). In such a case, the tiles of each channel (and their values in `input' are contiguous. So we need to correct `tprm->indexs[i]' (which is the index over the whole tessellation, including all channels). */ if(correct_index) { /* Index of this tile in its channel. */ index = fullind % tl->tottilesinch; /* Index of the first tile in this channel. */ chstart = (fullind / tl->tottilesinch) * tl->tottilesinch; /* Set the channel's starting pointer for the flags. */ flag = gal_data_ptr_increment(fullflag, chstart, GAL_TYPE_UINT8); } else { chstart=0; index=fullind; } /* Reset all checked bits in the flags array to 0. */ ngb_counter=0; bf=(b=flag)+size; do *b &= ~(INTERPOLATE_FLAGS_CHECKED); while(++bnext) { memcpy(gal_data_ptr_increment(tnear->array, ngb_counter, tin->type), gal_data_ptr_increment(tin->array, chstart+pind, tin->type), gal_type_sizeof(tin->type)); tin=tin->next; } /* If we have filled all the elements clean up the linked list and break out. */ if(++ngb_counter>=prm->numneighbors) { if(lQ) gal_list_dosizet_free(lQ); break; } } /* Go over all the neighbors of this popped pixel and add them to the list of neighbors to be checked. */ GAL_DIMENSION_NEIGHBOR_OP(pind, ndim, dsize, 1, dinc, { /* Only look at neighbors that have not been checked. VERY IMPORTANT: we must not check for blank values here, otherwise we won't be able to parse over extended blank regions. */ if( !(flag[nind] & INTERPOLATE_FLAGS_CHECKED) ) { /* Get the coordinates of this neighbor. */ gal_dimension_index_to_coord(nind, ndim, dsize, ncoord); /* Distance of this neighbor to the one to be filled. */ dist=gal_dimension_dist_manhattan(icoord, ncoord, ndim); /* Add this neighbor to the list. */ gal_list_dosizet_add(&lQ, &sQ, nind, dist); /* Flag this neighbor as checked. */ flag[nind] |= INTERPOLATE_FLAGS_CHECKED; } } ); /* If there are no more meshes to add to the queue, then this shows, there were not enough points for interpolation. Normally, this loop should only be exited through the `currentnum>=numnearest' check above. */ if(sQ==NULL) error(EXIT_FAILURE, 0, "%s: only %zu neighbors found while " "you had asked to use %zu neighbors for close neighbor " "interpolation", __func__, ngb_counter, prm->numneighbors); } /* Calculate the median of the values and write it in the output. */ tout=prm->out; for(tnear=nearest; tnear!=NULL; tnear=tnear->next) { /* Find the median and copy it. */ median=gal_statistics_median(tnear, 1); memcpy(gal_data_ptr_increment(tout->array, fullind, tout->type), median->array, gal_type_sizeof(tout->type)); /* Clean up and go to next array. */ gal_data_free(median); tout=tout->next; } } /* Clean up. */ for(tnear=nearest; tnear!=NULL; tnear=tnear->next) tnear->array=NULL; gal_list_data_free(nearest); free(icoord); free(ncoord); free(dinc); /* Wait for all the other threads to finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* When no interpolation is needed, then we can just copy the input into the output. */ static gal_data_t * interpolate_copy_input(gal_data_t *input, int aslinkedlist) { gal_data_t *tin, *tout; /* Make a copy of the first input. */ tout=gal_data_copy(input); tout->next=NULL; /* If we have a linked list, copy each element. */ if(aslinkedlist) { /* Note that we have already copied the first input. */ for(tin=input->next; tin!=NULL; tin=tin->next) { /* Copy this dataset (will also copy flags). */ tout->next=gal_data_copy(tin); tout=tout->next; } /* Output is the reverse of the input, so reverse it. */ gal_list_data_reverse(&tout); } /* Return the copied list. */ return tout; } /* Interpolate blank values in an array. If the `tl!=NULL', then it is assumed that the tile values correspond to given tessellation. Such that `input[i]' corresponds to `tiles[i]' in the tessellation. */ gal_data_t * gal_interpolate_close_neighbors(gal_data_t *input, struct gal_tile_two_layer_params *tl, size_t numneighbors, size_t numthreads, int onlyblank, int aslinkedlist) { gal_data_t *tin, *tout; struct interpolate_params prm; size_t ngbvnum=numthreads*numneighbors; int permute=(tl && tl->totchannels>1 && tl->workoverch); /* If there are no blank values in the array we should only fill blank values, then simply copy the input and abort. */ if( (input->flag | GAL_DATA_FLAG_BLANK_CH) /* Zero bit is meaningful.*/ && !(input->flag | GAL_DATA_FLAG_HASBLANK) /* There are no blanks. */ && onlyblank ) /* Only interpolate blank.*/ return interpolate_copy_input(input, aslinkedlist); /* Initialize the constant parameters. */ prm.tl = tl; prm.ngb_vals = NULL; prm.input = input; prm.onlyblank = onlyblank; prm.numneighbors = numneighbors; prm.num = aslinkedlist ? gal_list_data_number(input) : 1; /* Flag the blank values. */ prm.blanks=gal_blank_flag(input); /* If the input is from a tile structure and the user has asked to ignore channels, then re-order the values. */ if(permute) { /* Prepare the permutation (if necessary/not already defined). */ gal_tile_full_permutation(tl); /* Re-order values to ignore channels (if necessary). */ gal_permutation_apply(input, tl->permutation); gal_permutation_apply(prm.blanks, tl->permutation); /* If this is a linked list, then permute remaining nodes. */ if(aslinkedlist) for(tin=input->next; tin!=NULL; tin=tin->next) gal_permutation_apply(tin, tl->permutation); } /* Allocate space for the (first) output. */ prm.out=gal_data_alloc(NULL, input->type, input->ndim, input->dsize, input->wcs, 0, input->minmapsize, NULL, input->unit, NULL); gal_list_void_add(&prm.ngb_vals, gal_data_malloc_array(input->type, ngbvnum, __func__, "prm.ngb_vals")); /* If we are given a list of datasets, make the necessary allocations. The reason we are doing this after a check of `aslinkedlist' is that the `input' might have a `next' element, but the caller might not have called `aslinkedlist'. */ prm.out->next=NULL; if(aslinkedlist) for(tin=input->next; tin!=NULL; tin=tin->next) { /* A small sanity check. */ if( gal_data_dsize_is_different(input, tin) ) error(EXIT_FAILURE, 0, "%s: all datasets in the list must have " "the same dimension and size", __func__); /* Allocate the output array for this node. */ gal_list_data_add_alloc(&prm.out, NULL, tin->type, tin->ndim, tin->dsize, tin->wcs, 0, tin->minmapsize, NULL, tin->unit, NULL); /* Allocate the space for the neighbor values of this input. */ gal_list_void_add(&prm.ngb_vals, gal_data_malloc_array(tin->type, ngbvnum, __func__, "prm.ngb_vals")); } gal_list_data_reverse(&prm.out); gal_list_void_reverse(&prm.ngb_vals); /* Allocate space for all the flag values of all the threads here (memory in each thread is limited) and this is cleaner. */ prm.thread_flags=gal_data_malloc_array(GAL_TYPE_UINT8, numthreads*input->size, __func__, "prm.thread_flags"); /* Spin off the threads. */ gal_threads_spin_off(interpolate_close_neighbors_on_thread, &prm, input->size, numthreads); /* If the values were permuted for the interpolation, then re-order the values back to their original location (so they correspond to their tile indexs. */ if(permute) { gal_permutation_apply_inverse(input, tl->permutation); for(tout=prm.out; tout!=NULL; tout=tout->next) gal_permutation_apply_inverse(tout, tl->permutation); } /* The interpolated array doesn't have blank values. So set the blank flag to 0 and set the use-zero to 1. */ for(tout=prm.out; tout!=NULL; tout=tout->next) { tout->flag |= GAL_DATA_FLAG_BLANK_CH; tout->flag &= ~GAL_DATA_FLAG_HASBLANK; } /* Clean up and return. */ free(prm.thread_flags); gal_data_free(prm.blanks); gal_list_void_free(prm.ngb_vals, 1); return prm.out; } gnuastro-0.5/lib/git.c0000644000175000017500000000475313121462410011641 00000000000000/********************************************************************* Functions to deal with Git version controlled directories. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include /* Return the result of Git describe and */ char * gal_git_describe(void) { char *describe_return=NULL; /* Only actually work on Git if the library is present. */ #if GAL_CONFIG_HAVE_LIBGIT2 == 1 git_buf buf={0}; git_repository *repo; git_describe_result *describe_result; git_describe_format_options format_options; git_describe_options describe_options = GIT_DESCRIBE_OPTIONS_INIT; /* Initialize Git's global setup. */ git_libgit2_init(); /* Initialize the descriptions. */ git_describe_init_format_options(&format_options, GIT_DESCRIBE_FORMAT_OPTIONS_VERSION); /* Set some values manually: */ describe_options.show_commit_oid_as_fallback=1; format_options.dirty_suffix="-dirty"; /* Open the Git repository. */ if( !git_repository_open_ext(&repo, ".", 0, NULL) && !git_describe_workdir(&describe_result, repo, &describe_options) && !git_describe_format(&buf, describe_result, &format_options) ) { /* Allocate space for and copy the description. */ errno=0; describe_return=malloc(strlen(buf.ptr)+1); if(describe_return==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes to copy " "Git's describe", __func__, strlen(buf.ptr)+1); strcpy(describe_return, buf.ptr); } /* Clean up. */ git_repository_free(repo); git_libgit2_shutdown(); #endif /* Return */ return describe_return; } gnuastro-0.5/lib/fits.c0000644000175000017500000025250513211076737012040 00000000000000/********************************************************************* Functions to work with FITS image data. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /************************************************************* ************** Reporting errors: *************** *************************************************************/ void gal_fits_io_error(int status, char *message) { char defmessage[]="Error in CFITSIO, see above."; if(status) { fits_report_error(stderr, status); if(message) error(EXIT_FAILURE, 0, "%s", message); else error(EXIT_FAILURE, 0, "%s", defmessage); } } /************************************************************* ************** FITS names *************** *************************************************************/ /* IMPORTANT NOTE: if other compression suffixes are add to this function, include them in `gal_checkset_automatic_output', so the compression suffix can be skipped when the user doesn't specify an output filename.*/ int gal_fits_name_is_fits(char *name) { size_t len; len=strlen(name); if ( ( len>=3 && strcmp(&name[len-3], "fit" ) == 0 ) || ( len>=4 && strcmp(&name[len-4], "fits" ) == 0 ) || ( len>=7 && strcmp(&name[len-7], "fits.gz" ) == 0 ) || ( len>=6 && strcmp(&name[len-6], "fits.Z" ) == 0 ) || ( len>=3 && strcmp(&name[len-3], "imh" ) == 0 ) || ( len>=7 && strcmp(&name[len-7], "fits.fz" ) == 0 ) ) return 1; else return 0; } /* IMPORTANT NOTE: if other compression suffixes are add to this function, include them in `gal_checkset_automatic_output', so the compression suffix can be skipped when the user doesn't specify an output filename.*/ int gal_fits_suffix_is_fits(char *suffix) { char *nodot = suffix[0]=='.' ? (suffix+1) : suffix; if ( strcmp( nodot, "fit" ) == 0 || strcmp(nodot, "fits" ) == 0 || strcmp(nodot, "fits.gz" ) == 0 || strcmp(nodot, "fits.Z" ) == 0 || strcmp(nodot, "imh" ) == 0 || strcmp(nodot, "fits.fz" ) == 0 ) return 1; else return 0; } /* If the name is a FITS name, then put a `(hdu: ...)' after it and return the string. If it isn't a FITS file, just print the name. Note that the space is allocated. */ char * gal_fits_name_save_as_string(char *filename, char *hdu) { char *name; if( gal_fits_name_is_fits(filename) ) asprintf(&name, "%s (hdu: %s)", filename, hdu); else gal_checkset_allocate_copy(filename, &name); return name; } /************************************************************* ************** Type codes *************** *************************************************************/ uint8_t gal_fits_bitpix_to_type(int bitpix) { switch(bitpix) { case BYTE_IMG: return GAL_TYPE_UINT8; case SBYTE_IMG: return GAL_TYPE_INT8; case USHORT_IMG: return GAL_TYPE_UINT16; case SHORT_IMG: return GAL_TYPE_INT16; case ULONG_IMG: return GAL_TYPE_UINT32; case LONG_IMG: return GAL_TYPE_INT32; case LONGLONG_IMG: return GAL_TYPE_INT64; case FLOAT_IMG: return GAL_TYPE_FLOAT32; case DOUBLE_IMG: return GAL_TYPE_FLOAT64; default: error(EXIT_FAILURE, 0, "%s: bitpix value of %d not recognized", __func__, bitpix); } return 0; } int gal_fits_type_to_bitpix(uint8_t type) { switch(type) { case GAL_TYPE_UINT8: return BYTE_IMG; case GAL_TYPE_INT8: return SBYTE_IMG; case GAL_TYPE_UINT16: return USHORT_IMG; case GAL_TYPE_INT16: return SHORT_IMG; case GAL_TYPE_UINT32: return ULONG_IMG; case GAL_TYPE_INT32: return LONG_IMG; case GAL_TYPE_INT64: return LONGLONG_IMG; case GAL_TYPE_FLOAT32: return FLOAT_IMG; case GAL_TYPE_FLOAT64: return DOUBLE_IMG; case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_STRING: case GAL_TYPE_UINT64: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: type %s not recognized for FITS image " "BITPIX", __func__, gal_type_name(type, 1)); default: error(EXIT_FAILURE, 0, "%s: type value of %d not recognized", __func__, type); } return 0; } /* The values to the TFORM header keywords of FITS binary tables are single letter capital letters, but that is useless in identifying the data type of the column. So this function will do the conversion based on the CFITSIO manual.*/ char gal_fits_type_to_bin_tform(uint8_t type) { switch(type) { /* Recognized by CFITSIO. */ case GAL_TYPE_STRING: return 'A'; case GAL_TYPE_BIT: return 'X'; case GAL_TYPE_UINT8: return 'B'; case GAL_TYPE_INT8: return 'S'; case GAL_TYPE_UINT16: return 'U'; case GAL_TYPE_INT16: return 'I'; case GAL_TYPE_UINT32: return 'V'; case GAL_TYPE_INT32: return 'J'; case GAL_TYPE_INT64: return 'K'; case GAL_TYPE_FLOAT32: return 'E'; case GAL_TYPE_FLOAT64: return 'D'; case GAL_TYPE_COMPLEX32: return 'C'; case GAL_TYPE_COMPLEX64: return 'M'; /* Not recognized by CFITSIO. */ case GAL_TYPE_UINT64: error(EXIT_FAILURE, 0, "%s: type %s not recognized for FITS binary " "table TFORM", __func__, gal_type_name(type, 1)); break; /* Wrong type code. */ default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } error(EXIT_FAILURE, 0, "%s: s bug! Please contact us so we can fix this. " "Control must not reach the end of this function", __func__); return '\0'; } int gal_fits_type_to_datatype(uint8_t type) { int w=0; switch(type) { /* Recognized CFITSIO types. */ case GAL_TYPE_BIT: return TBIT; case GAL_TYPE_UINT8: return TBYTE; case GAL_TYPE_INT8: return TSBYTE; case GAL_TYPE_FLOAT32: return TFLOAT; case GAL_TYPE_FLOAT64: return TDOUBLE; case GAL_TYPE_COMPLEX32: return TCOMPLEX; case GAL_TYPE_COMPLEX64: return TDBLCOMPLEX; case GAL_TYPE_STRING: return TSTRING; /* Types that depend on the host system. The C standard says that the `short', `int' and `long' types are ATLEAST 2, 2, 4 bytes, so be safe, we will checking all of them for the 32-bit types.*/ case GAL_TYPE_UINT16: w=2; if ( sizeof(short) == w ) return TUSHORT; else if( sizeof(int) == w ) return TUINT; break; case GAL_TYPE_INT16: w=2; if ( sizeof(short) == w ) return TSHORT; else if( sizeof(int) == w ) return TINT; break; /* On 32-bit systems, the length of `int' and `long' are both 32-bits. But CFITSIO's LONG type is preferred because it is designed to be 32-bit. Its `INT' type is not clearly defined and caused problems when reading keywords.*/ case GAL_TYPE_UINT32: w=4; if ( sizeof(long) == w ) return TULONG; else if( sizeof(int) == w ) return TUINT; else if( sizeof(short) == w ) return TUSHORT; break; /* Similar to UINT32 above. */ case GAL_TYPE_INT32: w=4; if ( sizeof(long) == w ) return TLONG; else if( sizeof(int) == w ) return TINT; else if( sizeof(short) == w ) return TSHORT; break; case GAL_TYPE_UINT64: w=8; if ( sizeof(long) == w ) return TULONG; break; case GAL_TYPE_INT64: w=8; if ( sizeof(long) == w ) return TLONG; else if( sizeof(LONGLONG) == w ) return TLONGLONG; break; /* Wrong type. */ default: error(EXIT_FAILURE, 0, "%s: type code %d is not a recognized", __func__, type); } /* If control reaches, here, there was a problem with the host types. */ if(w) error(EXIT_FAILURE, 0, "%s: this system doesn't have a %d byte integer " "type, so type `%s' cannot be written to FITS", __func__, w, gal_type_name(type, 1)); else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "fix the problem. Control must not have reached the end for the " "given type `%s'", __func__, PACKAGE_BUGREPORT, gal_type_name(type, 1)); return -1; } uint8_t gal_fits_datatype_to_type(int datatype, int is_table_column) { int inttype; switch(datatype) { case TBIT: return GAL_TYPE_BIT; case TBYTE: return GAL_TYPE_UINT8; case TSBYTE: return GAL_TYPE_INT8; case TFLOAT: return GAL_TYPE_FLOAT32; case TDOUBLE: return GAL_TYPE_FLOAT64; case TCOMPLEX: return GAL_TYPE_COMPLEX32; case TDBLCOMPLEX: return GAL_TYPE_COMPLEX64; case TSTRING: return GAL_TYPE_STRING; /* Sizes that depend on the host system. */ case TUSHORT: switch( sizeof(short) ) { case 2: return GAL_TYPE_UINT16; case 4: return GAL_TYPE_UINT32; case 8: return GAL_TYPE_UINT64; } break; case TSHORT: switch( sizeof(short) ) { case 2: return GAL_TYPE_INT16; case 4: return GAL_TYPE_INT32; case 8: return GAL_TYPE_INT64; } break; case TUINT: switch( sizeof(int) ) { case 2: return GAL_TYPE_UINT16; case 4: return GAL_TYPE_UINT32; case 8: return GAL_TYPE_UINT64; } break; case TINT: switch( sizeof(int) ) { case 2: return GAL_TYPE_INT16; case 4: return GAL_TYPE_INT32; case 8: return GAL_TYPE_INT64; } break; case TULONG: switch( sizeof(long) ) { case 4: return GAL_TYPE_UINT32; case 8: return GAL_TYPE_UINT64; } break; case TLONG: /* ==TINT32BIT when in a table column. */ if(is_table_column) return GAL_TYPE_INT32; else switch( sizeof(long) ) { case 4: return GAL_TYPE_INT32; case 8: return GAL_TYPE_INT64; } break; case TLONGLONG: return GAL_TYPE_INT64; break; /* The TLOGICAL depends on the context: for keywords, it is int32, for table columns, it is int8. */ case TLOGICAL: switch( sizeof(int) ) { case 2: inttype=GAL_TYPE_INT16; break; case 4: inttype=GAL_TYPE_INT32; break; case 8: inttype=GAL_TYPE_INT64; break; } return is_table_column ? GAL_TYPE_INT8 : inttype; break; /* A bug! */ default: error(EXIT_FAILURE, 0, "%s: %d is not a recognized CFITSIO datatype", __func__, datatype); } error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can fix " "this. Control must not have reached the end of this function.", __func__, PACKAGE_BUGREPORT); return GAL_TYPE_INVALID; } /* When there is a BZERO or TZERO and BSCALE or TSCALE keywords, then the type that must be used to store the actual values of the pixels may be different from the type from BITPIX. This function does the necessary corrections.*/ static void fits_type_correct(int *type, double bscale, char *bzero_str) { double bzero; int tofloat=1; char *tailptr, *bzero_u64="9223372036854775808"; /* If bzero_str is given and `bscale=1.0' the case might be that we are dealing with an integer dataset that just needs a different sign. */ if(bzero_str && bscale==1.0f) { /* Read the `bzero' string as a `double' number. */ bzero = strtod(bzero_str, &tailptr); if(tailptr==bzero_str) error(EXIT_FAILURE, 0, "%s: BZERO value `%s' couldn't be " "parsed as a number", __func__, bzero_str); /* Work based on type. For the default conversions defined by the FITS standard to change the signs of integers, make the proper correction, otherwise set the type to float. */ switch(*type) { case GAL_TYPE_UINT8: if(bzero == -128.0f) { *type = GAL_TYPE_INT8; tofloat=0; } break; case GAL_TYPE_INT16: if(bzero == 32768) { *type = GAL_TYPE_UINT16; tofloat=0; } break; case GAL_TYPE_INT32: if(bzero == 2147483648LU) { *type = GAL_TYPE_UINT32; tofloat=0; } break; /* The `bzero' value for unsigned 64-bit integers has 19 decimal digits, but a 64-bit floating point (`double' type) can only safely store 15 decimal digits. As a result, the safest way to check the `bzero' value for this type is to compare it as a string. But all integers nearby (for example `9223372036854775807') get rounded to this same value (when stored as `double'). So we will also check the parsed number and if it equals this number, a warning will be printed. */ case GAL_TYPE_INT64: if( !strcmp(bzero_str, bzero_u64) ) {*type = GAL_TYPE_UINT64; tofloat=0;} else if( bzero == 9223372036854775808LLU ) { fprintf(stderr, "\nWARNING in %s: the BZERO header keyword " "value (`%s') is very close (but not exactly equal) " "to `%s'. The latter value in the FITS standard is " "used to identify that the dataset should be read as " "unsigned 64-bit integers instead of signed 64-bit " "integers. Depending on your version of CFITSIO, " "it may be read as a signed or unsigned 64-bit " "integer array\n\n", __func__, bzero_str, bzero_u64); tofloat=0; } break; /* For the other types (when `BSCALE=1.0f'), currently no correction is necessary, maybe later we can check if the scales are integers and set the integer output type to the smallest type that can allow the scaled values. */ default: tofloat=0; } } /* If the type must be a float, then do the conversion. */ if(tofloat) *type=GAL_TYPE_FLOAT32; } /**************************************************************/ /********** HDU ************/ /**************************************************************/ fitsfile * gal_fits_open_to_write(char *filename) { int status=0; long naxes=0; fitsfile *fptr; /* When the file exists just open it. Otherwise, create the file. But we want to leave the first extension as a blank extension and put the image in the next extension to be consistent between tables and images. */ if(access(filename,F_OK) == -1 ) { /* Create the file. */ if( fits_create_file(&fptr, filename, &status) ) gal_fits_io_error(status, NULL); /* Create blank extension. */ if( fits_create_img(fptr, BYTE_IMG, 0, &naxes, &status) ) gal_fits_io_error(status, NULL); /* Close the blank extension. */ if( fits_close_file(fptr, &status) ) gal_fits_io_error(status, NULL); } /* Open the file, ready for later steps. */ if( fits_open_file(&fptr, filename, READWRITE, &status) ) gal_fits_io_error(status, NULL); /* Return the pointer. */ return fptr; } size_t gal_fits_hdu_num(char *filename) { fitsfile *fptr; int num, status=0; /* We don't need to check for an error everytime, because we don't make any non CFITSIO usage of the output. It is necessary to check every CFITSIO call, only when you will need to use the outputs. */ fits_open_file(&fptr, filename, READONLY, &status); fits_get_num_hdus(fptr, &num, &status); fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); return num; } /* Given the filename and HDU, this function will return the CFITSIO code for the type of data it contains (table, or image). The CFITSIO codes are: IMAGE_HDU: An image HDU. ASCII_TBL: An ASCII table HDU. BINARY_TBL: BINARY TABLE HDU. */ int gal_fits_hdu_format(char *filename, char *hdu) { fitsfile *fptr; int hdutype, status=0; /* Open the HDU. */ fptr=gal_fits_hdu_open(filename, hdu, READONLY); /* Check the type of the given HDU: */ if (fits_get_hdu_type(fptr, &hdutype, &status) ) gal_fits_io_error(status, NULL); /* Clean up and return.. */ if( fits_close_file(fptr, &status) ) gal_fits_io_error(status, NULL); return hdutype; } /* Open a given HDU and return the FITS pointer. `iomode' determines how the FITS file will be opened: only to read or to read and write. You should use the macros given by the CFITSIO header: READONLY: read-only. READWRITE: read and write. */ fitsfile * gal_fits_hdu_open(char *filename, char *hdu, int iomode) { int status=0; char *ffname; fitsfile *fptr; /* Add hdu to filename: */ asprintf(&ffname, "%s[%s#]", filename, hdu); /* Open the FITS file: */ if( fits_open_file(&fptr, ffname, iomode, &status) ) { switch(status) { /* Since the default HDU is `1', when the file only has one extension, this error is common, so we will put a special notice. */ case END_OF_FILE: if( hdu[0]=='1' && hdu[1]=='\0' ) error(EXIT_FAILURE, 0, "%s has only one extension/HDU but you " "have asked for the second HDU (hdu number 1 in CFITSIO)." "\n\n" "To fix the problem please add `--hdu=0' (or `-h0') to " "your command when calling Gnuastro's programs. For " "library users, please give a value of \"0\" to the HDU " "argument.\n\n" "FOOTNOTE -- When writing a new FITS file, Gnuastro leaves " "the first HDU blank (with no data) and writes the " "outputs in the second HDU. In this way the keywords of " "the the first HDU can be used as meta data of the whole " "file (which may contain many extensions). This is the " "recommended way in the FITS standard. As a result, " "Gnuastro's default HDU to read an extension in a FITS " "file is the second. This error is commonly caused when " "the FITS file wasn't created according to this " "convention.", filename); break; /* Generic error below is fine for this case */ case BAD_HDU_NUM: break; /* In case an un-expected error occurs, use the general CFITSIO reporting that we have already prepared. */ default: gal_fits_io_error(status, "opening the given extension/HDU in " "the given file"); } error(EXIT_FAILURE, 0, "%s: extension/HDU `%s' doesn't exist. Please " "run the following command to see the extensions/HDUs in " "`%s':\n\n" " $ astfits %s\n\n" "The respective HDU number (or name, when present) may be used " "with the `--hdu' option in Gnuastro's programs (or the `hdu' " "argument in Gnuastro's libraries) to open the respective HDU.", filename, hdu, filename, filename); } /* Clean up and the pointer. */ free(ffname); return fptr; } /* Check the desired HDU in a FITS image and also if it has the desired type. */ fitsfile * gal_fits_hdu_open_format(char *filename, char *hdu, int img0_tab1) { fitsfile *fptr; int status=0, hdutype; /* A small sanity check. */ if(hdu==NULL) error(EXIT_FAILURE, 0, "no HDU specified for %s", filename); /* Open the HDU. */ fptr=gal_fits_hdu_open(filename, hdu, READONLY); /* Check the type of the given HDU: */ if (fits_get_hdu_type(fptr, &hdutype, &status) ) gal_fits_io_error(status, NULL); /* Check if the type of the HDU is the expected type. We could have written these as && conditions, but this is easier to read, it makes no meaningful difference to the compiler. */ if(img0_tab1) { if(hdutype==IMAGE_HDU) error(EXIT_FAILURE, 0, "%s (hdu: %s): is not a table", filename, hdu); } else { if(hdutype!=IMAGE_HDU) error(EXIT_FAILURE, 0, "%s (hdu: %s): not an image", filename, hdu); } /* Clean up and return. */ return fptr; } /**************************************************************/ /********** Header keywords ************/ /**************************************************************/ /* Return allocated pointer to the blank value to use in a FITS file header keyword. */ void * gal_fits_key_img_blank(uint8_t type) { void *out=NULL, *tocopy=NULL; uint8_t u8=0; /* Equivalent of minimum in signed with BZERO. */ int16_t s16=INT16_MAX; /* Equivalend of maximum in unsigned with BZERO. */ int32_t s32=INT32_MAX; /* Equivalend of maximum in unsigned with BZERO. */ int64_t s64=INT64_MAX; /* Equivalend of maximum in unsigned with BZERO. */ switch(type) { /* Types with no special treatment: */ case GAL_TYPE_BIT: case GAL_TYPE_UINT8: case GAL_TYPE_INT16: case GAL_TYPE_INT32: case GAL_TYPE_INT64: case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: case GAL_TYPE_STRING: case GAL_TYPE_STRLL: out = gal_blank_alloc_write(type); break; /* Types that need values from their opposite-signed types. */ case GAL_TYPE_INT8: tocopy=&u8; break; case GAL_TYPE_UINT16: tocopy=&s16; break; case GAL_TYPE_UINT32: tocopy=&s32; break; case GAL_TYPE_UINT64: tocopy=&s64; break; default: error(EXIT_FAILURE, 0, "%s: type code %u not recognized as a Gnuastro " "data type", __func__, type); } /* If `gal_blank_alloc_write' wasn't used (copy!=NULL), then allocate the necessary space and fill it in. Note that the width of the signed and unsigned values doesn't differ, so we can use the actual input type. */ if(tocopy) { out = gal_data_malloc_array(type, 1, __func__, "out"); memcpy(out, tocopy, gal_type_sizeof(type)); } /* Return. */ return out; } /* CFITSIO doesn't remove the two single quotes around the string value, so the strings it reads are like: 'value ', or 'some_very_long_value'. To use the value, it is commonly necessary to remove the single quotes (and possible extra spaces). This function will modify the string in its own allocated space. You can use this to later free the original string (if it was allocated). */ void gal_fits_key_clean_str_value(char *string) { int end; /* Has to be int because size_t is always >=0. */ char *c, *cf; /* Start from the second last character (the last is a single quote) and go down until you hit a non-space character. This will also work when there is no space characters between the last character of the value and ending single-quote: it will be set to '\0' after this loop. */ for(end=strlen(string)-2;end>=0;--end) if(string[end]!=' ') break; /* Shift all the characters after the first one (which is a `'' back by one and put the string ending characters on the `end'th element. */ cf=(c=string)+end; do *c=*(c+1); while(++cnext=keysll[i+1]; \\ Put a name and type for each element. gal_fits_key_read_from_ptr(fptr, keysll, 0, 0); \\ use the values as you like. gal_data_array_free(keysll, N, 1); If the `array' pointer of each keyword's dataset is not NULL, then it is assumed that the space has already been allocated. If it is NULL, then space will be allocated internally here. Strings need special consideration: the reason is that generally, `gal_data_t' needs to also allow for array of strings (as it supports arrays of integers for example). Hence two allocations will be done here (one if `array!=NULL') and `keysll[i].array' must be interpretted as `char **': one allocation for the pointer, one for the actual characters. You don't have to worry about the freeing, `gal_data_array_free' will free both allocations. So to read a string, one easy way would be the following: char *str, **strarray; strarr = keysll[i].array; str = strarray[0]; If CFITSIO is unable to read a keyword for any reason the `status' element of the respective `gal_data_t' will be non-zero. You can check the successful reading of the keyword from the `status' value in each keyword's `gal_data_t'. If it is zero, then the keyword was found and succesfully read. Otherwise, it a CFITSIO status value. You can use CFITSIO's error reporting tools or `gal_fits_io_error' for reporting the reason. A tip: when the keyword doesn't exist, then CFITSIO's status value will be `KEY_NO_EXIST'. CFITSIO will start searching for the keywords from the last place in the header that it searched for a keyword. So it is much more efficient if the order that you ask for keywords is based on the order they are stored in the header. */ void gal_fits_key_read_from_ptr(fitsfile *fptr, gal_data_t *keysll, int readcomment, int readunit) { void *valueptr; char **strarray; gal_data_t *tmp; /* Get the desired keywords. */ for(tmp=keysll;tmp!=NULL;tmp=tmp->next) if(tmp->name) { /* Initialize the status: */ tmp->status=0; /* For each keyword, this function stores one value currently. So set the size and ndim to 1. But first allocate dsize if it wasn't already allocated. */ if(tmp->dsize==NULL) tmp->dsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, 1, __func__, "tmp->dsize"); tmp->ndim=tmp->size=tmp->dsize[0]=1; /* When the type is a string, `tmp->array' is an array of pointers to a separately allocated piece of memory. So we have to allocate that space here. If its not a string, then the allocated space above is enough to keep the value.*/ switch(tmp->type) { case GAL_TYPE_STRING: errno=0; tmp->array=strarray=( tmp->array ? tmp->array : gal_data_malloc_array(tmp->type, 1, __func__, "tmp->array") ); valueptr=strarray[0]=malloc(FLEN_VALUE * sizeof *strarray[0]); if(strarray[0]==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for strarray[0]", __func__, FLEN_VALUE * sizeof *strarray[0]); break; default: tmp->array=valueptr=( tmp->array ? tmp->array : gal_data_malloc_array(tmp->type, 1, __func__, "tmp->array") ); } /* Allocate space for the keyword comment if necessary.*/ if(readcomment) { errno=0; tmp->comment=calloc(FLEN_COMMENT, sizeof *tmp->comment); if(tmp->comment==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for tmp->comment", __func__, FLEN_COMMENT * sizeof *tmp->comment); } else tmp->comment=NULL; /* Allocate space for the keyword unit if necessary. Note that since there is no precise CFITSIO length for units, we will use the `FLEN_COMMENT' length for units too (theoretically, the unit might take the full remaining area in the keyword). Also note that the unit is only optional, so it needs a separate CFITSIO function call which is done here.*/ if(readunit) { /* Allocate space for the unit and read it in. */ errno=0; tmp->unit=calloc(FLEN_COMMENT, sizeof *tmp->unit); if(tmp->unit==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for tmp->unit", __func__, FLEN_COMMENT * sizeof *tmp->unit); fits_read_key_unit(fptr, tmp->name, tmp->unit, &tmp->status); /* If the string is empty, free the space and set it to NULL. */ if(tmp->unit[0]=='\0') {free(tmp->unit); tmp->unit=NULL;} } else tmp->unit=NULL; /* Read the keyword and place its value in the pointer. */ fits_read_key(fptr, gal_fits_type_to_datatype(tmp->type), tmp->name, valueptr, tmp->comment, &tmp->status); /* If the comment was empty, free the space and set it to zero. */ if(tmp->comment && tmp->comment[0]=='\0') {free(tmp->comment); tmp->comment=NULL;} /* Strings need to be cleaned (CFITSIO puts `'' around them with some (possiblly) extra space on the two ends of the string. */ } } /* Same as `gal_fits_read_keywords_fptr', but accepts the filename and HDU as input instead of an already opened CFITSIO `fitsfile' pointer. */ void gal_fits_key_read(char *filename, char *hdu, gal_data_t *keysll, int readcomment, int readunit) { size_t len; int status=0; char *ffname; fitsfile *fptr; /* Add hdu to filename: */ errno=0; len=strlen(filename)+strlen(hdu)+4; ffname=malloc(len*sizeof *ffname); if(ffname==NULL) error(EXIT_FAILURE, errno, "%s: %zu characters", __func__, len); sprintf(ffname, "%s[%s#]", filename, hdu); /* Open the FITS file: */ if( fits_open_file(&fptr, ffname, READONLY, &status) ) gal_fits_io_error(status, "reading this FITS file"); /* Read the keywords. */ gal_fits_key_read_from_ptr(fptr, keysll, readcomment, readunit); /* Close the FITS file. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); /* Clean up. */ free(ffname); } /* Add on keyword to the list of header keywords that need to be added to a FITS file. In the end, the keywords will have to be freed, so it is important to know before hand if they were allocated or not. If not, they don't need to be freed. NOTE FOR STRINGS: the value should be the pointer to the string its-self (char *), not a pointer to a pointer (char **). */ void gal_fits_key_list_add(gal_fits_list_key_t **list, uint8_t type, char *keyname, int kfree, void *value, int vfree, char *comment, int cfree, char *unit) { gal_fits_list_key_t *newnode; /* Allocate space for the new node and fill it in. */ errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->type=type; newnode->keyname=keyname; newnode->value=value; newnode->comment=comment; newnode->unit=unit; newnode->kfree=kfree; /* Free pointers after using them. */ newnode->vfree=vfree; newnode->cfree=cfree; newnode->next=*list; *list=newnode; } void gal_fits_key_list_add_end(gal_fits_list_key_t **list, uint8_t type, char *keyname, int kfree, void *value, int vfree, char *comment, int cfree, char *unit) { gal_fits_list_key_t *newnode, *tmp; /* Allocate space for the new node and fill it in. */ errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocation of new node", __func__); newnode->type=type; newnode->keyname=keyname; newnode->value=value; newnode->comment=comment; newnode->unit=unit; newnode->kfree=kfree; /* Free pointers after using them. */ newnode->vfree=vfree; newnode->cfree=cfree; if(*list) /* List is already full, add this node to the end */ { /* After this line, tmp points to the last node. */ tmp=*list; while(tmp->next!=NULL) tmp=tmp->next; tmp->next=newnode; newnode->next=NULL; } else /* List is empty */ { newnode->next=*list; *list=newnode; } } void gal_fits_key_write_filename(char *keynamebase, char *filename, gal_fits_list_key_t **list) { char *keyname, *value; size_t numkey=1, maxlength; size_t i, j, len=strlen(filename), thislen; /* When you give string arguments, CFITSIO puts them within two ''s, so the actual length available is two less. It seems this length also didn't include the null character, so, ultimately you have to take three from it.*/ maxlength=FLEN_VALUE-3; i=0; while(i0;--j) if(value[j]=='/') { value[j+1]='\0'; break; } if(j==0) error(EXIT_FAILURE, 0, "%s: the filename `%sP has at least one " "span of %zu characters without a `/`. It cannot be " "written to the header of the output fits file", __func__, filename, maxlength); /* Convert the last useful character and save the file name.*/ gal_fits_key_list_add_end(list, GAL_TYPE_STRING, keyname, 1, value, 1, NULL, 0, NULL); i+=j+1; } } } /* Write the WCS header string into a FITS files*/ void gal_fits_key_write_wcsstr(fitsfile *fptr, char *wcsstr, int nkeyrec) { size_t i; int h, status=0; char *cp, *cpf, blankrec[80], titlerec[80]; /* Set the last element of the blank array. */ cpf=blankrec+79; *cpf='\0'; titlerec[79]='\0'; cp=blankrec; do *cp=' '; while(++cpvalue) { if( fits_update_key(fptr, gal_fits_type_to_datatype(tmp->type), tmp->keyname, tmp->value, tmp->comment, &status) ) gal_fits_io_error(status, NULL); } else { if(fits_update_key_null(fptr, tmp->keyname, tmp->comment, &status)) gal_fits_io_error(status, NULL); } /* Write the units if it was given. */ if( tmp->unit && fits_write_key_unit(fptr, tmp->keyname, tmp->unit, &status) ) gal_fits_io_error(status, NULL); /* Free the value pointer if desired: */ if(tmp->kfree) free(tmp->keyname); if(tmp->vfree) free(tmp->value); if(tmp->cfree) free(tmp->comment); /* Keep the pointer to the next keyword and free the allocated space for this keyword.*/ ttmp=tmp->next; free(tmp); tmp=ttmp; } /* Set it to NULL so it isn't mistakenly used later. */ *keylist=NULL; } void gal_fits_key_write_version(fitsfile *fptr, gal_fits_list_key_t *headers, char *program_name) { size_t i; int status=0; char *gitdescribe; char cfitsioversion[20]; char *cp, *cpf, blankrec[80], titlerec[80]; /* Before WCSLIB 5.0, the wcslib_version function was not defined. Sometime in the future were everyone has moved to more recent versions of WCSLIB, we can remove this macro and its check in configure.ac.*/ #if GAL_CONFIG_HAVE_WCSLIB_VERSION == 1 int wcslibvers[3]; char wcslibversion[20]; const char *wcslibversion_const; #endif /* Set the last element of the blank array. */ cpf=blankrec+79; *cpf='\0'; titlerec[79]='\0'; cp=blankrec; do *cp=' '; while(++cpnext) { /* Recall that the order is the opposite (this is a last-in-first-out list. */ if(key->status==0) { switch(i) { case 4: if(unit) {str = key->array; *unit = *str; *str=NULL;} break; case 3: if(name) {str = key->array; *name = *str; *str=NULL;} break; case 2: bscale = *(double *)(key->array); break; case 1: str = key->array; bzero_str = *str; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. For some reason, there are more " "keywords requested ", __func__, PACKAGE_BUGREPORT); } } ++i; } /* If a type correction is necessary, then do it. */ if( !isnan(bscale) || bzero_str ) fits_type_correct(type, bscale, bzero_str); /* Allocate the array to keep the dimension size and fill it in, note that its order is the opposite of naxes. */ *dsize=gal_data_malloc_array(GAL_TYPE_INT64, *ndim, __func__, "dsize"); for(i=0; i<*ndim; ++i) (*dsize)[i]=naxes[*ndim-1-i]; /* Clean up. Note that bzero_str, gets freed by `gal_data_free' (which is called by `gal_list_data_free'. */ gal_list_data_free(keysll); } /* Read a FITS image HDU into a Gnuastro data structure. */ gal_data_t * gal_fits_img_read(char *filename, char *hdu, size_t minmapsize, size_t hstartwcs, size_t hendwcs) { void *blank; long *fpixel; fitsfile *fptr; gal_data_t *img; size_t i, ndim, *dsize; char *name=NULL, *unit=NULL; int status=0, type, anyblank; /* Check HDU for realistic conditions: */ fptr=gal_fits_hdu_open_format(filename, hdu, 0); /* Get the info and allocate the data structure. */ gal_fits_img_info(fptr, &type, &ndim, &dsize, &name, &unit); /* Check if there is any dimensions (the first header can sometimes have no images). */ if(ndim==0) error(EXIT_FAILURE, 0, "%s (hdu: %s) has 0 dimensions! The most common " "cause for this is a wrongly specified HDU. In some FITS images, " "the first HDU doesn't have any data, the data is in subsequent " "extensions. So probably reading the second HDU (with `--hdu=1' " "or `-h1') will solve the problem (following CFITSIO's " "convention, currently HDU counting starts from 0)." , filename, hdu); /* Set the fpixel array (first pixel in all dimensions). Note that the `long' type will not be larger than 64-bits, so, we'll just assume it is 64-bits for space allocation. On 32-bit systems, this won't be a problem, the space will be written/read as 32-bit `long' any way, we'll just have a few empty bytes that will be freed anyway at the end of this function. */ fpixel=gal_data_malloc_array(GAL_TYPE_INT64, ndim, __func__, "fpixel"); for(i=0;isize, blank, img->array, &anyblank, &status); if(status) gal_fits_io_error(status, NULL); free(fpixel); free(blank); /* Read the WCS structure (if the FITS file has any). */ img->wcs=gal_wcs_read_fitsptr(fptr, hstartwcs, hendwcs, &img->nwcs); /* Close the input FITS file. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); /* Return the filled data structure */ return img; } /* The user has specified an input file + extension, and your program needs this input to be a special type. For such cases, this function can be used to convert the input file to the desired type. */ gal_data_t * gal_fits_img_read_to_type(char *inputname, char *hdu, uint8_t type, size_t minmapsize, size_t hstartwcs, size_t hendwcs) { gal_data_t *in, *converted; /* Read the specified input image HDU. */ in=gal_fits_img_read(inputname, hdu, minmapsize, hstartwcs, hendwcs); /* If the input had another type, convert it to float. */ if(in->type!=type) { converted=gal_data_copy_to_new_type(in, type); gal_data_free(in); in=converted; } /* Return the final structure. */ return in; } gal_data_t * gal_fits_img_read_kernel(char *filename, char *hdu, size_t minmapsize) { size_t i; int check=0; double sum=0; gal_data_t *kernel; float *f, *fp, tmp; /* Read the image as a float and if it has a WCS structure, free it. */ kernel=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, minmapsize, 0, 0); if(kernel->wcs) { wcsfree(kernel->wcs); kernel->wcs=NULL; } /* Check if the size along each dimension of the kernel is an odd number. If they are all an odd number, then the for each dimension, check will be incremented once. */ for(i=0;indim;++i) check += kernel->dsize[i]%2; if(check!=kernel->ndim) error(EXIT_FAILURE, 0, "%s: the kernel image has to have an odd number " "of pixels in all dimensions (there has to be one element/pixel " "in the center). At least one of the dimensions of %s (hdu: %s) " "doesn't have an odd number of pixels", __func__, filename, hdu); /* If there are any NaN pixels, set them to zero and normalize it. A blank pixel in a kernel is going to make a completely blank output.*/ fp=(f=kernel->array)+kernel->size; do { if(isnan(*f)) *f=0.0f; else sum+=*f; } while(++farray; do *f++ *= 1/sum; while(farray; for(i=0;isize/2;++i) { tmp=f[i]; f[i]=f[ kernel->size - i - 1 ]; f[ kernel->size - i - 1 ]=tmp; } /* Return the kernel*/ return kernel; } /* This function will write all the data array information (including its WCS information) into a FITS file, but will not close it. Instead it will pass along the FITS pointer for further modification. */ fitsfile * gal_fits_img_write_to_ptr(gal_data_t *input, char *filename) { void *blank; int64_t *i64; fitsfile *fptr; uint64_t *u64, *u64f; long fpixel=1, *naxes; char *wcsstr, *u64key; size_t i, ndim=input->ndim; int nkeyrec, hasblank, status=0, datatype=0; gal_data_t *i64data, *towrite, *block=gal_tile_block(input); /* If the input is a tile (isn't a contiguous region of memory), then copy it into a contiguous region. */ towrite = input==block ? input : gal_data_copy(input); hasblank=gal_blank_present(towrite, 0); /* Allocate the naxis area. */ naxes=gal_data_malloc_array( ( sizeof(long)==8 ? GAL_TYPE_INT64 : GAL_TYPE_INT32 ), ndim, __func__, "naxes"); /* Open the file for writing */ fptr=gal_fits_open_to_write(filename); /* Fill the `naxes' array (in opposite order, and `long' type): */ for(i=0;idsize[i]; /* Create the FITS file. Unfortunately CFITSIO doesn't have a macro for UINT64, TLONGLONG is only for (signed) INT64. So if the dataset has that type, we'll have to convert it to `INT64' and in the mean-time shift its zero, we will then have to write the BZERO and BSCALE keywords accordingly. */ if(block->type==GAL_TYPE_UINT64) { /* Allocate the necessary space. */ i64data=gal_data_alloc(NULL, GAL_TYPE_INT64, ndim, towrite->dsize, NULL, 0, block->minmapsize, NULL, NULL, NULL); /* Copy the values while making the conversion. */ i64=i64data->array; u64f=(u64=towrite->array)+towrite->size; if(hasblank) { do *i64++ = ( *u64==GAL_BLANK_UINT64 ? GAL_BLANK_INT64 : (*u64 + INT64_MIN) ); while(++u64size, i64data->array, &status); gal_fits_io_error(status, NULL); /* We need to write the BZERO and BSCALE keywords manually. VERY IMPORTANT: this has to be done after writing the array. We cannot write this huge integer as a variable, so we'll simply write the full record/card. It is just important that the string be larger than 80 characters, CFITSIO will trim the rest of the string. */ u64key="BZERO = 9223372036854775808 / Offset of data "; fits_write_record(fptr, u64key, &status); u64key="BSCALE = 1 / Default scaling factor "; fits_write_record(fptr, u64key, &status); gal_fits_io_error(status, NULL); } else { /* Set the datatype */ datatype=gal_fits_type_to_datatype(block->type); /* Create the FITS file. */ fits_create_img(fptr, gal_fits_type_to_bitpix(towrite->type), ndim, naxes, &status); gal_fits_io_error(status, NULL); /* Write the image into the file. */ fits_write_img(fptr, datatype, fpixel, towrite->size, towrite->array, &status); gal_fits_io_error(status, NULL); } /* Remove the two comment lines put by CFITSIO. Note that in some cases, it might not exist. When this happens, the status value will be non-zero. We don't care about this error, so to be safe, we will just reset the status variable after these calls. */ fits_delete_key(fptr, "COMMENT", &status); fits_delete_key(fptr, "COMMENT", &status); status=0; /* If we have blank pixels, we need to define a BLANK keyword when we are dealing with integer types. */ if(hasblank) switch(towrite->type) { case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: /* Do nothing! Since there are much fewer floating point types (that don't need any BLANK keyword), we are checking them.*/ break; default: blank=gal_fits_key_img_blank(towrite->type); if(fits_write_key(fptr, datatype, "BLANK", blank, "Pixels with no data.", &status) ) gal_fits_io_error(status, "adding the BLANK keyword"); free(blank); } /* Write the extension name to the header. */ if(towrite->name) fits_write_key(fptr, TSTRING, "EXTNAME", towrite->name, "", &status); /* Write the units to the header. */ if(towrite->unit) fits_write_key(fptr, TSTRING, "BUNIT", towrite->unit, "", &status); /* Write comments if they exist. */ if(towrite->comment) fits_write_comment(fptr, towrite->comment, &status); /* If a WCS structure is present, write it in */ if(towrite->wcs) { /* Decompose the `PCi_j' matrix and `CDELTi' vector. */ gal_wcs_decompose_pc_cdelt(towrite->wcs); /* Convert the WCS information to text. */ status=wcshdo(WCSHDO_safe, towrite->wcs, &nkeyrec, &wcsstr); if(status) error(EXIT_FAILURE, 0, "%s: wcshdo ERROR %d: %s", __func__, status, wcs_errmsg[status]); gal_fits_key_write_wcsstr(fptr, wcsstr, nkeyrec); } /* Report any errors if we had any */ free(naxes); gal_fits_io_error(status, NULL); if(towrite!=input) gal_data_free(towrite); return fptr; } void gal_fits_img_write(gal_data_t *data, char *filename, gal_fits_list_key_t *headers, char *program_string) { int status=0; fitsfile *fptr; /* Write the data array into a FITS file and keep it open: */ fptr=gal_fits_img_write_to_ptr(data, filename); /* Write all the headers and the version information. */ gal_fits_key_write_version(fptr, headers, program_string); /* Close the FITS file. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); } void gal_fits_img_write_to_type(gal_data_t *data, char *filename, gal_fits_list_key_t *headers, char *program_string, int type) { /* If the input dataset is not the correct type, then convert it, otherwise, use the input data structure. */ gal_data_t *towrite = (data->type==type ? data : gal_data_copy_to_new_type(data, type)); /* Write the converted dataset into an image. */ gal_fits_img_write(towrite, filename, headers, program_string); /* Free the dataset if it was allocated. */ if(towrite!=data) gal_data_free(towrite); } /* This function is mainly useful when you want to make FITS files in parallel (from one main WCS structure, with just differing CRPIX) for two reasons: - When a large number of FITS images (with WCS) need to be created in parallel, it can be much more efficient to write the header's WCS keywords once at first, write them in the FITS file, then just correct the CRPIX values. - WCSLIB's header writing function is not thread safe. So when writing FITS images in parallel, we can't write the header keywords in each thread. */ void gal_fits_img_write_corr_wcs_str(gal_data_t *input, char *filename, char *wcsstr, int nkeyrec, double *crpix, gal_fits_list_key_t *headers, char *program_string) { int status=0; fitsfile *fptr; /* The data should not have any WCS structure for this function. */ if(input->wcs) error(EXIT_FAILURE, 0, "%s: input must not have WCS meta-data", __func__); /* Write the data array into a FITS file and keep it open. */ fptr=gal_fits_img_write_to_ptr(input, filename); /* Write the WCS headers into the FITS file. */ gal_fits_key_write_wcsstr(fptr, wcsstr, nkeyrec); /* Update the CRPIX keywords. Note that we don't want to change the values in the WCS information of gal_data_t. Because, it often happens that things are done in parallel, so we don't want to touch the original version, we just want to change the copied version. */ if(crpix) { fits_update_key(fptr, TDOUBLE, "CRPIX1", &crpix[0], NULL, &status); fits_update_key(fptr, TDOUBLE, "CRPIX2", &crpix[1], NULL, &status); if(input->ndim==3) fits_update_key(fptr, TDOUBLE, "CRPIX3", &crpix[2], NULL, &status); gal_fits_io_error(status, NULL); } /* Write all the headers and the version information. */ gal_fits_key_write_version(fptr, headers, program_string); /* Close the file and return. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); } /**************************************************************/ /********** Table ************/ /**************************************************************/ /* Get the size of a table HDU. CFITSIO doesn't use size_t, also we want to check status here.*/ void gal_fits_tab_size(fitsfile *fitsptr, size_t *nrows, size_t *ncols) { long lnrows; int incols, status=0; /* Read the sizes and put them in. */ fits_get_num_rows(fitsptr, &lnrows, &status); fits_get_num_cols(fitsptr, &incols, &status); *ncols=incols; *nrows=lnrows; /* Report an error if any was issued. */ gal_fits_io_error(status, NULL); } int gal_fits_tab_format(fitsfile *fitsptr) { int status=0; char value[FLEN_VALUE]; fits_read_key(fitsptr, TSTRING, "XTENSION", value, NULL, &status); if(status==0) { if(!strcmp(value, "TABLE")) return GAL_TABLE_FORMAT_AFITS; else if(!strcmp(value, "BINTABLE")) return GAL_TABLE_FORMAT_BFITS; else error(EXIT_FAILURE, 0, "%s: the `XTENSION' keyword of this FITS " "table (`%s') doesn't have a standard value", __func__, value); } else { if(status==KEY_NO_EXIST) error(EXIT_FAILURE, 0, "%s: input fitsfile pointer isn't a table", __func__); else gal_fits_io_error(status, NULL); } error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can fix it. " "Control should not have reached the end of this function", __func__, PACKAGE_BUGREPORT); return -1; } /* The general format of the TDISPn keywords in FITS is like this: `Tw.p', where `T' specifies the general format, `w' is the width to be given to this column and `p' is the precision. For integer types, percision is actually the minimum number of integers, for floats, it is the number of decimal digits beyond the decimal point. */ static void set_display_format(char *tdisp, gal_data_t *data, char *filename, char *hdu, char *keyname) { int isanint=0; char *tailptr; /* First, set the general display format */ switch(tdisp[0]) { case 'A': data->disp_fmt=GAL_TABLE_DISPLAY_FMT_STRING; break; case 'I': isanint=1; data->disp_fmt=GAL_TABLE_DISPLAY_FMT_DECIMAL; break; case 'O': isanint=1; data->disp_fmt=GAL_TABLE_DISPLAY_FMT_OCTAL; break; case 'Z': isanint=1; data->disp_fmt=GAL_TABLE_DISPLAY_FMT_HEX; break; case 'F': data->disp_fmt=GAL_TABLE_DISPLAY_FMT_FLOAT; break; case 'E': case 'D': data->disp_fmt=GAL_TABLE_DISPLAY_FMT_EXP; break; case 'G': data->disp_fmt=GAL_TABLE_DISPLAY_FMT_GENERAL; break; default: error(EXIT_FAILURE, 0, "%s (hdu: %s): Format character `%c' in the " "value (%s) of the keyword %s not recognized in %s", filename, hdu, tdisp[0], tdisp, keyname, __func__); } /* Parse the rest of the string to see if a width and precision are given or not. */ data->disp_width=strtol(&tdisp[1], &tailptr, 0); switch(*tailptr) { case '.': /* Width is set, go onto finding the precision. */ data->disp_precision = strtol(&tailptr[1], &tailptr, 0); if(*tailptr!='\0') error(EXIT_FAILURE, 0, "%s (hdu: %s): The value `%s' of the " "`%s' keyword could not recognized (it doesn't finish after " "the precision) in %s", filename, hdu, tdisp, keyname, __func__); break; case '\0': /* No precision given, use a default value. */ data->disp_precision = ( isanint ? GAL_TABLE_DEF_PRECISION_INT : GAL_TABLE_DEF_PRECISION_FLT ); break; default: error(EXIT_FAILURE, 0, "%s (hdu: %s): The value `%s' of the " "`%s' keyword could not recognized (it doesn't have a `.', or " "finish, after the width) in %s", filename, hdu, tdisp, keyname, __func__); } } /* The FITS standard for binary tables (not ASCII tables) does not allow unsigned types for short, int and long types, or signed char! So it has `TSCALn' and `TZEROn' to scale the signed types to an unsigned type. It does this internally, but since we need to define our data type and allocate space for it before actually reading the array, it is necessary to do this setting here. */ static void fits_correct_bin_table_int_types(gal_data_t *allcols, int tfields, int *tscal, long long *tzero) { size_t i; for(i=0;inext) { /* Allocate the necessary data structure (including the array) for this column. */ dsize=numrows; gal_list_data_add_alloc(&out, NULL, allcols[ind->v].type, 1, &dsize, NULL, 0, minmapsize, allcols[ind->v].name, allcols[ind->v].unit, allcols[ind->v].comment); /* For a string column, we need an allocated array for each element, even in binary values. This value should be stored in the disp_width element of the data structure, which is done automatically in `gal_fits_table_info'. */ if(out->type==GAL_TYPE_STRING) for(i=0;iarray; errno=0; strarr[i]=calloc(allcols[ind->v].disp_width+1, sizeof *strarr[i]); if(strarr[i]==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for " "strarr[%zu]", __func__, (allcols[ind->v].disp_width+1) * sizeof *strarr[i], i); } /* Allocate a blank value for the given type and read/store the column using CFITSIO. Afterwards, free the blank value. */ blank=gal_blank_alloc_write(out->type); fits_read_col(fptr, gal_fits_type_to_datatype(out->type), ind->v+1, 1, 1, out->size, blank, out->array, &anynul, &status); gal_fits_io_error(status, NULL); free(blank); } /* Close the FITS file */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); return out; } /* This function will allocate new copies for all elements to have the same length as the maximum length and set all trailing elements to `\0' for those that are shorter than the length. The return value is the allocated space. If the dataset is not a string, the returned value will be -1 (largest number of `size_t'). */ static size_t fits_string_fixed_alloc_size(gal_data_t *data) { size_t i, j, maxlen=0; char *tmp, **strarr=data->array; /* Return 0 if the dataset is not a string. */ if(data->type!=GAL_TYPE_STRING) return -1; /* Get the maximum length. */ for(i=0;isize;++i) maxlen = strlen(strarr[i])>maxlen ? strlen(strarr[i]) : maxlen; /* For all elements, check the length and if they aren't equal to maxlen, then allocate a maxlen sized array and put the values in. */ for(i=0;isize;++i) { /* Allocate (and clear) the space for the new string. We want it to be cleared, so when the strings are smaller, the rest of the space is filled with '\0' (ASCII for 0) values.*/ errno=0; tmp=calloc(maxlen+1, sizeof *strarr[i]); if(tmp==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for tmp", __func__, (maxlen+1)*sizeof *strarr[i]); /* Put the old array into the newly allocated space. `tmp' was cleared (all values set to `\0', so we don't need to set the final one explicity after the copy.*/ for(j=0;strarr[i][j]!='\0';++j) tmp[j]=strarr[i][j]; /* Free the old array and put in the new one. */ free(strarr[i]); strarr[i]=tmp; } /* Return the allocated space. */ return maxlen+1; } static void fits_table_prepare_arrays(gal_data_t *cols, size_t numcols, int tableformat, char ***outtform, char ***outttype, char ***outtunit) { size_t i=0; gal_data_t *col; char fmt[2], lng[3]; char *blank, **tform, **ttype, **tunit; /* Allocate the arrays to keep the `tform' values */ errno=0; tform=*outtform=malloc(numcols*sizeof *tform); if(tform==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for tform", __func__, numcols*sizeof *tform); errno=0; ttype=*outttype=malloc(numcols*sizeof *ttype); if(ttype==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for ttype", __func__, numcols*sizeof *ttype); errno=0; tunit=*outtunit=malloc(numcols*sizeof *tunit); if(tunit==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for tunit", __func__, numcols*sizeof *tunit); /* Go over each column and fill in these arrays. */ for(col=cols; col!=NULL; col=col->next) { /* Set the `ttype' and `tunit' values: */ asprintf(&ttype[i], "%s", col->name ? col->name : ""); asprintf(&tunit[i], "%s", col->unit ? col->unit : ""); /* FITS's TFORM depends on the type of FITS table, so work differently. */ switch(tableformat) { /* FITS ASCII table. */ case GAL_TABLE_FORMAT_AFITS: /* Fill the printing format. */ gal_tableintern_col_print_info(col, GAL_TABLE_FORMAT_AFITS, fmt, lng); /* We need to check if the blank value needs is larger than the expected width or not. Its initial width is set the output of the function above, but if the value is larger, `asprintf' (which is used) will make it wider. */ blank = ( gal_blank_present(col, 0) ? gal_blank_as_string(col->type, col->disp_width) : NULL ); /* Adjust the width. */ if(blank) { col->disp_width = ( strlen(blank) > col->disp_width ? strlen(blank) : col->disp_width ); free(blank); } /* Print the value to be used as TFORMn: */ switch(col->type) { case GAL_TYPE_STRING: case GAL_TYPE_UINT8: case GAL_TYPE_INT8: case GAL_TYPE_UINT16: case GAL_TYPE_INT16: case GAL_TYPE_UINT32: case GAL_TYPE_INT32: case GAL_TYPE_UINT64: case GAL_TYPE_INT64: asprintf(&tform[i], "%c%d", fmt[0], col->disp_width); break; case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: asprintf(&tform[i], "%c%d.%d", fmt[0], col->disp_width, col->disp_precision); break; default: error(EXIT_FAILURE, 0, "%s: col->type code %d not recognized", __func__, col->type); } break; /* FITS binary table. */ case GAL_TABLE_FORMAT_BFITS: /* If this is a string column, set all the strings to same size, then write the value of tform depending on the type. */ col->disp_width=fits_string_fixed_alloc_size(col); fmt[0]=gal_fits_type_to_bin_tform(col->type); if( col->type==GAL_TYPE_STRING ) asprintf(&tform[i], "%d%c", col->disp_width, fmt[0]); else asprintf(&tform[i], "%c", fmt[0]); break; default: error(EXIT_FAILURE, 0, "%s: tableformat code %d not recognized", __func__, tableformat); } /* Increment the column index. */ ++i; } } /* Write the TNULLn keywords into the FITS file. Note that this depends on the type of the table: for an ASCII table, all the columns need it. For a binary table, only the non-floating point ones (even if they don't have NULL values) must have it. */ static void fits_write_tnull_tcomm(fitsfile *fptr, gal_data_t *col, int tableformat, size_t colnum, char *tform) { void *blank; int status=0; char *c, *keyname, *bcomment; /* Write the NULL value */ switch(tableformat) { case GAL_TABLE_FORMAT_AFITS: /* Print the keyword and value. */ asprintf(&keyname, "TNULL%zu", colnum); blank=gal_blank_as_string(col->type, col->disp_width); /* When in exponential form (`tform' starting with `E'), CFITSIO writes a NaN value as `NAN', but when in floating point form (`tform' starting with `F'), it writes it as `nan'. So in the former case, we need to convert the string to upper case. */ if(tform[0]=='E' || tform[0]=='e') for(c=blank; *c!='\0'; ++c) *c=toupper(*c); /* Write in the header. */ fits_write_key(fptr, TSTRING, keyname, blank, "blank value for this column", &status); /* Clean up. */ free(keyname); free(blank); break; case GAL_TABLE_FORMAT_BFITS: /* FITS binary tables don't accept NULL values for floating point or string columns. For floating point is must be NaN and for strings it is a blank string. */ if( col->type!=GAL_TYPE_FLOAT32 && col->type!=GAL_TYPE_FLOAT64 && col->type!=GAL_TYPE_STRING ) { blank=gal_blank_alloc_write(col->type); asprintf(&keyname, "TNULL%zu", colnum); fits_write_key(fptr, gal_fits_type_to_datatype(col->type), keyname, blank, "blank value for this column", &status); gal_fits_io_error(status, NULL); free(keyname); free(blank); } break; default: error(EXIT_FAILURE, 0, "%s: tableformat code %d not recognized", __func__, tableformat); } /* Write the comments if there is any. */ if(col->comment) { asprintf(&keyname, "TCOMM%zu", colnum); asprintf(&bcomment, "comment for field %zu", colnum); fits_write_key(fptr, TSTRING, keyname, col->comment, bcomment, &status); gal_fits_io_error(status, NULL); free(keyname); free(bcomment); } } /* Write the given columns (a linked list of `gal_data_t') into a FITS table.*/ void gal_fits_tab_write(gal_data_t *cols, gal_list_str_t *comments, int tableformat, char *filename, char *extname) { void *blank; fitsfile *fptr; gal_data_t *col; size_t i, numrows=-1; gal_list_str_t *strt; char **ttype, **tform, **tunit; int tbltype, numcols=0, status=0; /* Make sure all the input columns have the same number of elements */ for(col=cols; col!=NULL; col=col->next) { if(numrows==-1) numrows=col->size; else if(col->size!=numrows) error(EXIT_FAILURE, 0, "%s: the number of records/rows in the input " "columns are not equal", __func__); ++numcols; } /* Open the FITS file for writing. */ fptr=gal_fits_open_to_write(filename); /* prepare necessary arrays and if integer type columns have blank values, write the TNULLn keywords into the FITS file. */ fits_table_prepare_arrays(cols, numcols, tableformat, &tform, &ttype, &tunit); /* Make the FITS file pointer. Note that tableformat was checked in `fits_table_prepare_arrays'. */ tbltype = tableformat==GAL_TABLE_FORMAT_AFITS ? ASCII_TBL : BINARY_TBL; fits_create_tbl(fptr, tbltype, numrows, numcols, ttype, tform, tunit, extname, &status); gal_fits_io_error(status, NULL); /* Write the columns into the file and also write the blank values into the header when necessary. */ i=0; for(col=cols; col!=NULL; col=col->next) { /* Write the blank value into the header and return a pointer to it. Otherwise, */ fits_write_tnull_tcomm(fptr, col, tableformat, i+1, tform[i]); /* Set the blank pointer if its necessary, note that strings don't need a blank pointer in a FITS ASCII table.*/ blank = ( gal_blank_present(col, 0) ? gal_blank_alloc_write(col->type) : NULL ); if(tableformat==GAL_TABLE_FORMAT_AFITS && col->type==GAL_TYPE_STRING) { if(blank) free(blank); blank=NULL; } /* Write the full column into the table. */ fits_write_colnull(fptr, gal_fits_type_to_datatype(col->type), i+1, 1, 1, col->size, col->array, blank, &status); gal_fits_io_error(status, NULL); /* Clean up and Increment the column counter. */ if(blank) free(blank); ++i; } /* Write the comments if there were any. */ for(strt=comments; strt!=NULL; strt=strt->next) fits_write_comment(fptr, strt->v, &status); /* Write all the headers and the version information. */ gal_fits_key_write_version(fptr, NULL, NULL); /* Clean up and close the FITS file. Note that each element in the `ttype' and `tunit' arrays just points to the respective string in the column data structure, the space for each element of the array wasn't allocated.*/ for(i=0;i Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /*********************************************************************/ /************* Size and allocation *******************/ /*********************************************************************/ int gal_data_dsize_is_different(gal_data_t *first, gal_data_t *second) { size_t i; /* First make sure that the dimensionality is the same. */ if(first->ndim!=second->ndim) return 1; /* Check if the sizes along all dimensions are the same: */ for(i=0;indim;++i) if( first->dsize[i] != second->dsize[i] ) return 1; /* If it got to here, we know the dimensions have the same length. */ return 0; } /* Increment a give pointer depending on the given type. When working with the `array' elements of `gal_data_t', we are actually dealing with `void *' pointers. Pointer arithmetic doesn't apply to `void *', because the system doesn't know how much space each element has to increment the pointer respectively. So, here, we will use the type information to find the increment. This is mainly useful when dealing with the `block' pointer of a tile over a larger image. This function reads the address as a `char *' type (note that `char' is guaranteed to have a size of 1 (byte)). It then increments the `char *' by `increment*sizeof(type)' */ void * gal_data_ptr_increment(void *pointer, size_t increment, uint8_t type) { char *p=(char *)pointer; return p + increment * gal_type_sizeof(type); } /* Find the distance between two void pointers with a given type. See the explanations before `gal_data_ptr_increment'. */ size_t gal_data_ptr_dist(void *earlier, void *later, uint8_t type) { char *e=(char *)earlier, *l=(char *)later; return (l-e)/gal_type_sizeof(type); } /* Allocate an array based on the value of type. Note that the argument `size' is the number of elements, necessary in the array, the number of bytes each element needs will be determined internaly by this function using the datatype argument, so you don't have to worry about it. */ void * gal_data_malloc_array(uint8_t type, size_t size, const char *funcname, const char *varname) { void *array; errno=0; array=malloc( size * gal_type_sizeof(type) ); if(array==NULL) { if(varname) error(EXIT_FAILURE, errno, "%s: %zu bytes couldn't be allocated " "for variable `%s'", funcname ? funcname : __func__, size * gal_type_sizeof(type), varname); else error(EXIT_FAILURE, errno, "%s: %zu bytes couldn't be allocated", funcname ? funcname : __func__, size * gal_type_sizeof(type)); } return array; } void * gal_data_calloc_array(uint8_t type, size_t size, const char *funcname, const char *varname) { void *array; errno=0; array=calloc( size, gal_type_sizeof(type) ); if(array==NULL) { if(varname) error(EXIT_FAILURE, errno, "%s: %zu bytes couldn't be allocated " "for variable `%s'", funcname ? funcname : __func__, size * gal_type_sizeof(type), varname); else error(EXIT_FAILURE, errno, "%s: %zu bytes couldn't be allocated", funcname ? funcname : __func__, size * gal_type_sizeof(type)); } return array; } static void gal_data_mmap(gal_data_t *data, int clear, size_t minmapsize) { int filedes; uint8_t uc=0; char *filename; size_t bsize=data->size*gal_type_sizeof(data->type); /* Check if the .gnuastro folder exists, write the file there. If it doesn't exist, then make the .gnuastro directory.*/ gal_checkset_mkdir(".gnuastro"); /* Set the filename */ gal_checkset_allocate_copy("./.gnuastro/mmap_XXXXXX", &filename); /* Create a zero-sized file and keep its descriptor. */ errno=0; /*filedes=open(filename, O_RDWR | O_CREAT | O_EXCL | O_TRUNC );*/ filedes=mkstemp(filename); if(filedes==-1) error(EXIT_FAILURE, errno, "%s: %s couldn't be created", __func__, filename); /* Make enough space to keep the array data. */ errno=0; if( lseek(filedes, bsize, SEEK_SET) == -1 ) error(EXIT_FAILURE, errno, "%s: %s: unable to change file position by " "%zu bytes", __func__, filename, bsize); /* Write to the newly set file position so the space is allocated. To do this, we are simply writing `uc' (a byte with value 0) into the space we identified by `lseek' (above). This will ensure that this space is set a side for this array and prepare us to use `mmap'. */ if( write(filedes, &uc, 1) == -1) error(EXIT_FAILURE, errno, "%s: %s: unable to write one byte at the " "%zu-th position", __func__, filename, bsize); /* Map the memory. */ errno=0; data->array=mmap(NULL, bsize, PROT_READ | PROT_WRITE, MAP_SHARED, filedes, 0); if(data->array==MAP_FAILED) { if(minmapsize<10000u) fprintf(stderr, "\nIf the processing involves many small mappings " "(along with larger ones), the following error may be " "corrected with a larger value to `minmapsize' (minimum " "number of bytes to use mapping instead of RAM for each " "patch of memory), for example 10000. In this way, mapping " "will only be reserved for larger sizes. The current value is " "%zu.\n\n", minmapsize); error(EXIT_FAILURE, errno, "couldn't map %zu bytes into the file `%s'", bsize, filename); } /* Close the file. */ if( close(filedes) == -1 ) error(EXIT_FAILURE, errno, "%s: %s couldn't be closed", __func__, filename); /* Keep the filename. */ data->mmapname=filename; /* If it was supposed to be cleared, then clear the memory. */ if(clear) memset(data->array, 0, bsize); } /* Initialize the data structure. Some notes: - The `status' value is the only element that cannot be set by this function, it is initialized to zero. - If no `array' is given, a blank array of the given size will be allocated. If it is given the array pointer will be directly put here, so do not free it independently any more. If you want a separate copy of a dataset, you should use `gal_data_copy', not this function. - Space for the `name', `unit', and `comment' strings within the data structure are allocated here. So you can safely use literal strings, or statically allocated ones, or simply the strings from other data structures (and not have to worry about which one to free later). */ void gal_data_initialize(gal_data_t *data, void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, char *name, char *unit, char *comment) { size_t i; size_t data_size_limit = (size_t)(-1); /* Do the simple copying cases. For the display elements, set them all to impossible (negative) values so if not explicitly set by later steps, the default values are used if/when printing.*/ data->flag = 0; data->status = 0; data->next = NULL; data->ndim = ndim; data->type = type; data->block = NULL; data->mmapname = NULL; data->minmapsize = minmapsize; gal_checkset_allocate_copy(name, &data->name); gal_checkset_allocate_copy(unit, &data->unit); gal_checkset_allocate_copy(comment, &data->comment); data->disp_fmt=data->disp_width=data->disp_precision=-1; /* Copy the WCS structure. */ data->wcs=gal_wcs_copy(wcs); /* Allocate space for the dsize array, only if the data are to have any dimensions. Note that in our convention, a number has a `ndim=1' and `dsize[0]=1', A 1D array also has `ndim=1', but `dsize[0]>1'. */ if(ndim) { /* Allocate dsize. */ errno=0; data->dsize=malloc(ndim*sizeof *data->dsize); if(data->dsize==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for data->dsize", __func__, ndim*sizeof *data->dsize); /* Fill in the `dsize' array and in the meantime set `size': */ data->size=1; for(i=0;i= data_size_limit / data->size) error(EXIT_FAILURE, 0, "%s: dimension %zu size is too " "large %zu. Total is out of bounds", __func__, i, dsize[i]); /* Print a warning if the size in this dimension is too large. May happen when the user (mistakenly) writes a negative value in this dimension.. */ if (dsize[i] >= data_size_limit / 2) fprintf(stderr, "%s: WARNING: dsize[%zu] value %zu is probably " "a mistake: it exceeds the limit %zu", __func__, i, dsize[i], data_size_limit / 2); /* Write this dimension's size, also correct the total number of elements. */ data->size *= ( data->dsize[i] = dsize[i] ); } /* Set the array pointer. If an non-NULL array pointer was given, then use it. */ if(array) data->array=array; else { if(data->size) { if( gal_type_sizeof(type)*data->size > minmapsize ) /* Allocate the space into disk (HDD/SSD). */ gal_data_mmap(data, clear, minmapsize); else /* Allocate the space in RAM. */ data->array = ( clear ? gal_data_calloc_array(data->type, data->size, __func__, "data->array") : gal_data_malloc_array(data->type, data->size, __func__, "data->array") ); } else data->array=NULL; /* The given size was zero! */ } } else { data->size=0; data->array=NULL; data->dsize=NULL; } } /* Allocate a data structure based on the given parameters. If you want to force the array into the hdd/ssd (mmap it), then set minmapsize=-1 (largest possible size_t value), in this way, no file will be larger. */ gal_data_t * gal_data_alloc(void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, char *name, char *unit, char *comment) { gal_data_t *out; /* Allocate the space for the actual structure. */ errno=0; out=malloc(sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for gal_data_t", __func__, sizeof *out); /* Initialize the allocated array. */ gal_data_initialize(out, array, type, ndim, dsize, wcs, clear, minmapsize, name, unit, comment); /* Return the final structure. */ return out; } /* Free the allocated contents of a data structure, not the structure itsself. The reason that this function is separate from `gal_data_free' is that the data structure might be allocated as an array (statically like `gal_data_t da[20]', or dynamically like `gal_data_t *da; da=malloc(20*sizeof *da);'). In both cases, a loop will be necessary to delete the allocated contents of each element of the data structure array, but not the structure its self. After that loop, if the array of data structures was statically allocated, you don't have to do anything. If it was dynamically allocated, we just have to run `free(da)'. Since we aren't freeing the `gal_data_t' its-self, after the allocated space for each pointer is freed, the pointer is set to NULL for safety (to avoid possible re-calls). */ void gal_data_free_contents(gal_data_t *data) { size_t i; char **strarr; if(data==NULL) error(EXIT_FAILURE, 0, "%s: the input data structure to " "`gal_data_free_contents' was a NULL pointer", __func__); /* Free all the possible allocations. */ if(data->name) { free(data->name); data->name = NULL; } if(data->unit) { free(data->unit); data->unit = NULL; } if(data->dsize) { free(data->dsize); data->dsize = NULL; } if(data->wcs) { wcsfree(data->wcs); data->wcs = NULL; } if(data->comment) { free(data->comment); data->comment = NULL; } /* If the data type is string, then each element in the array is actually a pointer to the array of characters, so free them before freeing the actual array. */ if(data->type==GAL_TYPE_STRING && data->array) { strarr=data->array; for(i=0;isize;++i) free(strarr[i]); } /* Free the array. */ if(data->mmapname) { /* Delete the file keeping the array. */ remove(data->mmapname); /* Free the file name space. */ free(data->mmapname); /* Set the name pointer to NULL since it has been freed. */ data->mmapname=NULL; } else if(data->array && data->block==NULL) free(data->array); data->array=NULL; } /* Free the contents of the data structure and the data structure itsself. */ void gal_data_free(gal_data_t *data) { if(data) { gal_data_free_contents(data); free(data); } } /*********************************************************************/ /************* Array of data structures ******************/ /*********************************************************************/ /* Allocate an array of data structures and initialize all the values. */ gal_data_t * gal_data_array_calloc(size_t size) { size_t i; gal_data_t *out; /* Allocate the array to keep the structures. */ errno=0; out=malloc(size*sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for `out'", __func__, size*sizeof *out); /* Set the pointers to NULL if they didn't exist and the non-pointers to impossible integers (so the caller knows the array is only allocated. `minmapsize' should be set when allocating the array and should be set when you run `gal_data_initialize'. */ for(i=0;iarray, **outstrarr=to->array; /* Sanity check. */ if(from->type!=GAL_TYPE_STRING) error(EXIT_FAILURE, 0, "%s: `from' must have a string type.", __func__); if(from->block) error(EXIT_FAILURE, 0, "%s: tiles not currently supported (`block' " "element must be NULL). Please contact us at %s so we can " "implement this feature", __func__, PACKAGE_BUGREPORT); /* Do the copying. */ for(i=0;isize;++i) { /* Set the pointer. */ switch(to->type) { case GAL_TYPE_UINT8: ptr = (uint8_t *)(to->array) + i; break; case GAL_TYPE_INT8: ptr = (int8_t *)(to->array) + i; break; case GAL_TYPE_UINT16: ptr = (uint16_t *)(to->array) + i; break; case GAL_TYPE_INT16: ptr = (int16_t *)(to->array) + i; break; case GAL_TYPE_UINT32: ptr = (uint32_t *)(to->array) + i; break; case GAL_TYPE_INT32: ptr = (int32_t *)(to->array) + i; break; case GAL_TYPE_UINT64: ptr = (uint64_t *)(to->array) + i; break; case GAL_TYPE_INT64: ptr = (int64_t *)(to->array) + i; break; case GAL_TYPE_FLOAT32: ptr = (float *)(to->array) + i; break; case GAL_TYPE_FLOAT64: ptr = (double *)(to->array) + i; break; case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: copying to %s type not currently " "supported", __func__, gal_type_name(to->type, 1)); break; default: error(EXIT_FAILURE, 0, "%s: type %d not recognized for to->type", __func__, to->type); } /* Read/put the input into the output. */ if(to->type==GAL_TYPE_STRING) gal_checkset_allocate_copy(strarr[i], &outstrarr[i]); else { if( gal_type_from_string(&ptr, strarr[i], to->type) ) data_copy_to_string_not_parsed(strarr[i], ptr, to->type); } } } /* Macros for copying to a string. */ #define COPY_TO_STR_INT(CTYPE, BLANK, FMT) { \ CTYPE *a=from->array; \ for(i=0;isize;++i) \ { \ if(a[i]!=BLANK) asprintf(&strarr[i], FMT, a[i]); \ else \ gal_checkset_allocate_copy(GAL_BLANK_STRING, &strarr[i]); \ } \ } #define COPY_TO_STR_FLT(CTYPE, BLANK) { \ CTYPE *a=from->array; \ for(i=0;isize;++i) \ { \ if(isnan(BLANK)) isblank = isnan(a[i]) ? 1 : 0; \ else isblank = a[i]==BLANK ? 1 : 0; \ if(isblank==0) asprintf(&strarr[i], "%f", a[i]); \ else gal_checkset_allocate_copy(GAL_BLANK_STRING, &strarr[i]); \ } \ } /* Convert any given type into a string by printing it into the elements of the already allocated `to->array'. */ static void data_copy_to_string(gal_data_t *from, gal_data_t *to) { size_t i; int isblank; char **strarr=to->array, **instrarr=from->array; /* Sanity check */ if(to->type!=GAL_TYPE_STRING) error(EXIT_FAILURE, 0, "%s: `to' must have a string type", __func__); if(from->block) error(EXIT_FAILURE, 0, "%s: tile inputs not currently supported " "(`block' element must be NULL). Please contact us at %s so we " "can implement this feature", __func__, PACKAGE_BUGREPORT); /* Do the copying */ switch(from->type) { case GAL_TYPE_UINT8: COPY_TO_STR_INT(uint8_t, GAL_BLANK_UINT8, "%"PRIu8); break; case GAL_TYPE_INT8: COPY_TO_STR_INT(int8_t, GAL_BLANK_INT8, "%"PRId8); break; case GAL_TYPE_UINT16: COPY_TO_STR_INT(uint16_t, GAL_BLANK_UINT16, "%"PRIu16); break; case GAL_TYPE_INT16: COPY_TO_STR_INT(int16_t, GAL_BLANK_INT16, "%"PRId16); break; case GAL_TYPE_UINT32: COPY_TO_STR_INT(uint32_t, GAL_BLANK_UINT32, "%"PRIu32); break; case GAL_TYPE_INT32: COPY_TO_STR_INT(int32_t, GAL_BLANK_INT32, "%"PRId32); break; case GAL_TYPE_UINT64: COPY_TO_STR_INT(uint64_t, GAL_BLANK_UINT64, "%"PRIu64); break; case GAL_TYPE_INT64: COPY_TO_STR_INT(int64_t, GAL_BLANK_INT64, "%"PRId64); break; case GAL_TYPE_FLOAT32: COPY_TO_STR_FLT(float, GAL_BLANK_FLOAT32); break; case GAL_TYPE_FLOAT64: COPY_TO_STR_FLT(double, GAL_BLANK_FLOAT32); break; case GAL_TYPE_STRING: for(i=0;isize;++i) gal_checkset_allocate_copy(instrarr[i], &strarr[i]); break; case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: copying to %s type not currently supported", __func__, gal_type_name(from->type, 1)); break; default: error(EXIT_FAILURE, 0, "%s: type %d not recognized for `from->type'", __func__, from->type); } } #define COPY_OT_IT_SET(OT, IT) { \ OT ob, *restrict o=out->array; \ size_t increment=0, num_increment=1; \ size_t mclen=0, contig_len=in->dsize[in->ndim-1]; \ IT ib, *ist=NULL, *restrict i=in->array, *f=i+in->size; \ size_t s_e_ind[2]={0,iblock->size-1}; /* -1: this is INCLUSIVE */ \ \ /* If we are on a tile, the default values need to change. */ \ if(in!=iblock) \ ist=gal_tile_start_end_ind_inclusive(in, iblock, s_e_ind); \ \ /* Constant preparations before the loop. */ \ if(iblock->type==out->type) \ mclen = in==iblock ? iblock->size : contig_len; \ else \ { \ gal_blank_write(&ob, out->type); \ gal_blank_write(&ib, iblock->type); \ } \ \ /* Parse over the input and copy it. */ \ while( s_e_ind[0] + increment <= s_e_ind[1] ) \ { \ /* If we are on a tile, reset `i' and `f' for each round. */ \ if(in!=iblock) \ f = ( i = ist + increment ) + contig_len; \ \ /* When the types are the same just use memcopy, otherwise, */ \ /* We'll have to read each number (and use internal */ \ /* conversion). */ \ if(iblock->type==out->type) \ { \ memcpy(o, i, mclen*gal_type_sizeof(iblock->type)); \ o += mclen; \ } \ else \ { \ /* If the blank is a NaN value (only for floating point */ \ /* types), it will fail any comparison, so we'll exploit */ \ /* this property in such cases. For other cases, a */ \ /* `*i==ib' is enough. */ \ if(ib==ib) do *o++ = *i==ib ? ob : *i; while(++isize \ : gal_tile_block_increment(iblock, in->dsize, \ num_increment++, \ NULL) ); \ } \ } /* gal_data_copy_to_new_type: Output type is set, now choose the input type. */ #define COPY_OT_SET(OT) \ switch(iblock->type) \ { \ case GAL_TYPE_UINT8: COPY_OT_IT_SET(OT, uint8_t ); break; \ case GAL_TYPE_INT8: COPY_OT_IT_SET(OT, int8_t ); break; \ case GAL_TYPE_UINT16: COPY_OT_IT_SET(OT, uint16_t ); break; \ case GAL_TYPE_INT16: COPY_OT_IT_SET(OT, int16_t ); break; \ case GAL_TYPE_UINT32: COPY_OT_IT_SET(OT, uint32_t ); break; \ case GAL_TYPE_INT32: COPY_OT_IT_SET(OT, int32_t ); break; \ case GAL_TYPE_UINT64: COPY_OT_IT_SET(OT, uint64_t ); break; \ case GAL_TYPE_INT64: COPY_OT_IT_SET(OT, int64_t ); break; \ case GAL_TYPE_FLOAT32: COPY_OT_IT_SET(OT, float ); break; \ case GAL_TYPE_FLOAT64: COPY_OT_IT_SET(OT, double ); break; \ case GAL_TYPE_STRING: data_copy_from_string(in, out); break; \ case GAL_TYPE_BIT: \ case GAL_TYPE_STRLL: \ case GAL_TYPE_COMPLEX32: \ case GAL_TYPE_COMPLEX64: \ error(EXIT_FAILURE, 0, "%s: copying from %s type to a numeric " \ "(real) type not supported", "COPY_OT_SET", \ gal_type_name(in->type, 1)); \ break; \ \ default: \ error(EXIT_FAILURE, 0, "%s: type code %d not recognized for " \ "`in->type'", "COPY_OT_SET", in->type); \ } /* Wrapper for `gal_data_copy_to_new_type', but will copy to the same type as the input. Recall that if the input is a tile (a part of the input, which is not-contiguous if it has more than one dimension), then the output will have only the elements that cover the tile.*/ gal_data_t * gal_data_copy(gal_data_t *in) { return gal_data_copy_to_new_type(in, gal_tile_block(in)->type); } /* Copy a given data structure to a new one with any type (for the output). The input can be a tile, in which case the output will be a contiguous patch of memory that has all the values within the input tile in the requested type. */ gal_data_t * gal_data_copy_to_new_type(gal_data_t *in, uint8_t newtype) { gal_data_t *out; /* Allocate the output datastructure. */ out=gal_data_alloc(NULL, newtype, in->ndim, in->dsize, in->wcs, 0, in->minmapsize, in->name, in->unit, in->comment); /* Fill in the output array: */ gal_data_copy_to_allocated(in, out); /* Return the created array */ return out; } /* Copy the input data structure into a new type and free the allocated space. */ gal_data_t * gal_data_copy_to_new_type_free(gal_data_t *in, uint8_t newtype) { gal_data_t *out, *iblock=gal_tile_block(in); /* In a general application, it might happen that the type is equal with the type of the input and the input isn't a tile. Since the job of this function is to free the input dataset, and the user just wants one dataset after this function finishes, we can safely just return the input. */ if(newtype==iblock->type && in==iblock) return in; else { out=gal_data_copy_to_new_type(in, newtype); if(iblock==in) gal_data_free(in); else fprintf(stderr, "#####\nWarning from " "`gal_data_copy_to_new_type_free'\n#####\n The input " "dataset is a tile, not a contiguous (fully allocated) " "patch of memory. So it has not been freed. Please use " "`gal_data_copy_to_new_type' to avoid this warning.\n" "#####"); return out; } } /* Copy a given dataset (`in') into an already allocated dataset `out' (the actual dataset and its `array' element). The meta-data of `in' (except for `block') will be fully copied into `out' also. `out->size' will be used to find the available space in the allocated space. When `in->size != out->size' this function will behave as follows: `out->size < in->size': it won't re-allocate the necessary space, it will abort with an error, so please check before calling this function. `out->size > in->size': it will update `out->size' and `out->dsize' to be the same as the input. So if you want to re-use a pre-allocated space with varying input sizes, be sure to reset `out->size' before every call to this function. */ void gal_data_copy_to_allocated(gal_data_t *in, gal_data_t *out) { gal_data_t *iblock=gal_tile_block(in); /* Make sure the number of allocated elements (of whatever type) in the output is not smaller than the input. Note that the type is irrelevant because we will be doing type conversion if they differ.*/ if( out->size < in->size ) error(EXIT_FAILURE, 0, "%s: the output dataset must be equal or larger " "than the input. the sizes are %zu and %zu respectively", __func__, out->size, in->size); if( out->ndim != in->ndim ) error(EXIT_FAILURE, 0, "%s: the output dataset must have the same number " "of dimensions, the dimensions are %zu and %zu respectively", __func__, out->ndim, in->ndim); /* Write the basic meta-data. */ out->flag = in->flag; out->next = in->next; out->status = in->status; out->disp_width = in->disp_width; out->disp_precision = in->disp_precision; /* Do the copying. */ switch(out->type) { case GAL_TYPE_UINT8: COPY_OT_SET( uint8_t ); break; case GAL_TYPE_INT8: COPY_OT_SET( int8_t ); break; case GAL_TYPE_UINT16: COPY_OT_SET( uint16_t ); break; case GAL_TYPE_INT16: COPY_OT_SET( int16_t ); break; case GAL_TYPE_UINT32: COPY_OT_SET( uint32_t ); break; case GAL_TYPE_INT32: COPY_OT_SET( int32_t ); break; case GAL_TYPE_UINT64: COPY_OT_SET( uint64_t ); break; case GAL_TYPE_INT64: COPY_OT_SET( int64_t ); break; case GAL_TYPE_FLOAT32: COPY_OT_SET( float ); break; case GAL_TYPE_FLOAT64: COPY_OT_SET( double ); break; case GAL_TYPE_STRING: data_copy_to_string(in, out); break; case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: copying to %s type not yet supported", __func__, gal_type_name(out->type, 1)); break; default: error(EXIT_FAILURE, 0, "%s: type %d not recognized for `out->type'", __func__, out->type); } /* Correct the sizes of the output to be the same as the input. If it is equal, there is no problem, if not, the size information will be changed, so if you want to use this allocated space again, be sure to re-set the size parameters. */ out->size=in->size; memcpy(out->dsize, in->dsize, in->ndim * sizeof *(in->dsize) ); } /* Just a wrapper around `gal_type_from_string_auto', to return a `gal_data_t' dataset hosting the allocated number. */ gal_data_t * gal_data_copy_string_to_number(char *string) { void *ptr; uint8_t type; size_t dsize=1; ptr=gal_type_string_to_number(string, &type); return ( ptr ? gal_data_alloc(ptr, type, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL) : NULL ); } gnuastro-0.5/lib/cosmology.c0000644000175000017500000001770313173367042013104 00000000000000/********************************************************************* Cosmological calculations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /**************************************************************/ /************ Definitions *************/ /**************************************************************/ /* These are basic definitions that commonly go into the header files. But because this is a library and the user imports the header file, it is easier to just have them here in the main C file to avoid filling up the user's name-space with junk. */ struct cosmology_integrand_t { double o_lambda_0; double o_curv_0; double o_matter_0; double o_radiation_0; }; /* For the GSL integrations */ #define GSLILIMIT 1000 #define GSLIEPSABS 0 #define GSLIEPSREL 1e-7 /**************************************************************/ /************ Integrand functions *************/ /**************************************************************/ /* These are integrands, they won't be giving the final value. */ static double cosmology_integrand_Ez(double z, void *params) { struct cosmology_integrand_t *p=(struct cosmology_integrand_t *)params; return sqrt( p->o_lambda_0 + p->o_curv_0 * (1+z) * (1+z) + p->o_matter_0 * (1+z) * (1+z) * (1+z) + p->o_radiation_0 * (1+z) * (1+z) * (1+z) * (1+z)); } static double cosmology_integrand_age(double z, void *params) { return 1 / ( (1.0 + z) * cosmology_integrand_Ez(z,params) ); } static double cosmology_integrand_proper_dist(double z, void *params) { return 1 / ( cosmology_integrand_Ez(z,params) ); } static double cosmology_integrand_comoving_volume(double z, void *params) { size_t neval; gsl_function F; double result, error; /* Set the GSL function parameters */ F.params=params; F.function=&cosmology_integrand_proper_dist; gsl_integration_qng(&F, 0.0, z, GSLIEPSABS, GSLIEPSREL, &result, &error, &neval); return result * result / ( cosmology_integrand_Ez(z,params) ); } /**************************************************************/ /************ Final functions *************/ /**************************************************************/ /* Age of the universe (in Gyrs). H0 is in units of (km/sec/Mpc) and the fractional densities must add up to 1. */ double gal_cosmology_age(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) { gsl_function F; double result, error; double o_curv_0 = 1.0 - ( o_lambda_0 + o_matter_0 + o_radiation_0 ); double H0s=H0/1000/GSL_CONST_MKSA_PARSEC; /* H0 in units of seconds. */ gsl_integration_workspace *w=gsl_integration_workspace_alloc(GSLILIMIT); struct cosmology_integrand_t p={o_lambda_0, o_curv_0, o_matter_0, o_radiation_0}; /* Set the GSL function parameters. */ F.params=&p; F.function=&cosmology_integrand_age; gsl_integration_qagiu(&F, z, GSLIEPSABS, GSLIEPSREL, GSLILIMIT, w, &result, &error); return result / H0s / (365*GSL_CONST_MKSA_DAY) / 1e9; } /* Proper distance to z (Mpc). */ double gal_cosmology_proper_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) { size_t neval; gsl_function F; double result, error, c=GSL_CONST_MKSA_SPEED_OF_LIGHT; double o_curv_0 = 1.0 - ( o_lambda_0 + o_matter_0 + o_radiation_0 ); double H0s=H0/1000/GSL_CONST_MKSA_PARSEC; /* H0 in units of seconds. */ struct cosmology_integrand_t p={o_lambda_0, o_curv_0, o_matter_0, o_radiation_0}; /* Set the GSL function parameters */ F.params=&p; F.function=&cosmology_integrand_proper_dist; /* Do the integration. */ gsl_integration_qng(&F, 0.0f, z, GSLIEPSABS, GSLIEPSREL, &result, &error, &neval); /* Return the result. */ return result * c / H0s / (1e6 * GSL_CONST_MKSA_PARSEC); } /* Comoving volume over 4pi stradian to z (Mpc^3). */ double gal_cosmology_comoving_volume(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) { size_t neval; gsl_function F; double result, error; double c=GSL_CONST_MKSA_SPEED_OF_LIGHT; double H0s=H0/1000/GSL_CONST_MKSA_PARSEC; /* H0 in units of seconds. */ double cH = c / H0s / (1e6 * GSL_CONST_MKSA_PARSEC); double o_curv_0 = 1.0 - ( o_lambda_0 + o_matter_0 + o_radiation_0 ); struct cosmology_integrand_t p={o_lambda_0, o_curv_0, o_matter_0, o_radiation_0}; /* Set the GSL function parameters */ F.params=&p; F.function=&cosmology_integrand_comoving_volume; /* Do the integration. */ gsl_integration_qng(&F, 0.0f, z, GSLIEPSABS, GSLIEPSREL, &result, &error, &neval); /* Return the result. */ return result * 4 * M_PI * cH*cH*cH; } /* Critical density at redshift z in units of g/cm^3. */ double gal_cosmology_critical_density(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) { double H; double H0s=H0/1000/GSL_CONST_MKSA_PARSEC; /* H0 in units of seconds. */ double o_curv_0 = 1.0 - ( o_lambda_0 + o_matter_0 + o_radiation_0 ); struct cosmology_integrand_t p={o_lambda_0, o_curv_0, o_matter_0, o_radiation_0}; /* Set the place holder, then return the result. */ H = H0s * cosmology_integrand_Ez(z, &p); return 3*H*H/(8*M_PI*GSL_CONST_MKSA_GRAVITATIONAL_CONSTANT)/1000; } /* Angular diameter distance to z (Mpc). */ double gal_cosmology_angular_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) { return gal_cosmology_proper_distance(z, H0, o_lambda_0, o_matter_0, o_radiation_0) / (1+z); } /* Luminosity distance to z (Mpc). */ double gal_cosmology_luminosity_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) { return gal_cosmology_proper_distance(z, H0, o_lambda_0, o_matter_0, o_radiation_0) * (1+z); } /* Distance modulus at z (no units). */ double gal_cosmology_distance_modulus(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) { double ld=gal_cosmology_luminosity_distance(z, H0, o_lambda_0, o_matter_0, o_radiation_0); return 5*(log10(ld*1000000)-1); } /* Convert apparent to absolute magnitude. */ double gal_cosmology_to_absolute_mag(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) { double dm=gal_cosmology_distance_modulus(z, H0, o_lambda_0, o_matter_0, o_radiation_0); return dm-2.5*log10(1.0+z); } gnuastro-0.5/lib/convolve.c0000644000175000017500000005207013136321727012717 00000000000000/********************************************************************* Convolve -- Convolve a dataset with a given kernel. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include /*********************************************************************/ /******************** Utilities ********************/ /*********************************************************************/ /* See if the tile is on the edge of the hosted region or not. It doesn't matter if the host is the allocated block of memory or a region in it (a channel). */ static int convolve_tile_is_on_edge(size_t *h, size_t *start_end_coord, size_t *k, size_t ndim) { size_t *s=start_end_coord, *e=start_end_coord+ndim, *kf=k+ndim; /* If the starting point of the tile is smaller than the half-kernel length along that dimension, then the tile is on the edge. If the end of the tile in this dimension added with the half-kernel length along that dimension is equal to or larger than the host's size, then the tile is on the edge. */ do if( (*s++ < *k/2) || (*e++ + *k/2 >= *h++) ) return 1; while(++kcprm; gal_data_t *block=cprm->block, *kernel=cprm->kernel; size_t *dsize = tocorrect ? block->dsize : pprm->host->dsize; size_t ndim=block->ndim; size_t *kd=pprm->k_overlap->dsize; size_t *pp, *ppf, *hs, increment, size=1; size_t *h=dsize, *os=pprm->overlap_start; size_t *p, *pf, *od=pprm->i_overlap->dsize; size_t *k=kernel->dsize, *ks=pprm->kernel_start; int full_overlap=1, dim_full_overlap, is_start, is_end; /* In to-correct mode, the pix position needs to be relative to the block. */ if(tocorrect) { hs=pprm->host_start; ppf=(pp=pprm->pix)+ndim; do *pp += *hs++; while(++pppix) + ndim; do { /* Initialize the overlap for this dimension (we'll assume it overlaps because this is the most common case usually). */ dim_full_overlap=1; /* When the tile is on the edge, some pixels in it can have full overlap. So using the `dim_full_overlap', we will do the same thing we do for the tiles that don't overlap for them. When `tocorrect!=0', then only pixels that are on the edge of the tile will get to this point, so it must always be checked. */ if( tocorrect ? 1 : pprm->on_edge ) { /* See if this pixel is on the start and/or end of the dimension relative to the kernel. */ is_start = *p < *k/2; is_end = (*p + *k/2) >= *h; if( is_start || is_end ) { /* Overlapping with the outside. With the start: assume that in this dimension, the pixel is at position 2, while the kernel is 11 pixels wide (or 5 pixels in half-width). As seen below, the kernel should start from pixel `5-2=3' in this dimension and the overlap size should decrease by the same amount. image: 0 1 2 3 4 5 6 7 8 9 ... pixel: p kernel: 0 1 2 3 4 5 6 7 8 9 10 With the end: Similar to above, but assume the pixel is two pixels away from the edge of a 100-pixel image. We are no longer worried about the overlap or kernel starting point, it is the width that we need to decrease it by: 97 + 5 - 100 + 1 : The `1' is because we want the pixel immediately after the end. image: ... 92 93 94 95 96 97 98 99 | 100 101 102 pixel: p kernel: 0 1 2 3 4 5 6 7 8 | 9 10 */ *ks++ = is_start ? *k/2 - *p : 0; *os++ = is_start ? 0 : *p - *k/2; /* We will start with the full kernel width, then decrease it if the pixel is too close to the start or end along this dimension. Note that the host array/image might actually be smaller than kernel, so both cases might occur. */ *od = *k; if(is_start) *od -= *k/2 - *p; if(is_end) *od -= *p + *k/2 - *h + 1; /* Put the overlap size into the kernel's overlap `dsize' also and then use it to update the total size of the overlap. */ *kd++ = *od; size *= *od; /* Increment and finalize. */ ++h; ++k; ++od; full_overlap=0; dim_full_overlap=0; } } /* There is full overlap for this pixel or tile over this dimension. */ if(dim_full_overlap) { /* Set the values. */ *ks++ = 0; size *= *k; *kd++ = *od = *k; *os++ = *p - *k/2; /* Increment. */ ++h; ++k; ++od; } } while(++pi_overlap->size = pprm->k_overlap->size = size; /* Make correction. Normal mode (when `tocorrect==0'): add the host's starting location (necessary when convolution over the host/channel is treated independently). In this mode, until now we were working as if the the host/channel is the full image so the edges don't get mixed. But from now on we will be working over the allocated block to look at pixel values, so we need to convert the location to the proper place within the allocated array. To-correct mode: The boundaries were calculated with respect to the block, so we don't need to correct `overlap_start'. But we need to correct the pixel position back to its original state (relative to the channel). */ hs=pprm->host_start; if(tocorrect) { ppf=(pp=pprm->pix) + ndim; do *pp -= *hs++; while(++ppoverlap_start) + ndim; do *pp += *hs++; while(++ppdsize, pprm->overlap_start); pprm->i_overlap->array=gal_data_ptr_increment(block->array, increment, block->type); /* Set the starting point of the kernel overlap tile. */ increment = ( full_overlap ? 0 : gal_dimension_coord_to_index(ndim, kernel->dsize, pprm->kernel_start) ); pprm->k_overlap->array=gal_data_ptr_increment(kernel->array, increment, kernel->type); return full_overlap; } /* Convolve over one tile that is not touching the edge. */ static void convolve_spatial_tile(struct per_thread_spatial_prm *pprm) { gal_data_t *tile=pprm->tile; int full_overlap; double sum, ksum; struct spatial_params *cprm=pprm->cprm; gal_data_t *block=cprm->block, *kernel=cprm->kernel; size_t j, ndim=block->ndim, csize=tile->dsize[ndim-1]; gal_data_t *i_overlap=pprm->i_overlap, *k_overlap=pprm->k_overlap; /* Variables for scanning a tile (`i_*') and the region around every pixel of a tile (`o_*'). */ size_t start_fastdim; size_t i_inc, i_ninc, i_st_en[2]; /* These variables depend on the type of the input. */ float *i_start; float *in_v, *in=block->array, *out=cprm->out->array; /* Starting pixel for the host of this tile. Note that when we are in `convoverch' mode, `host' refers to the fully allocated block of memory. */ pprm->host=cprm->convoverch ? block : tile->block; gal_tile_start_coord(pprm->host, pprm->host_start); /* Set the starting and ending coordinates of this tile (recall that the space for the start and end coordinates is stored in `p->pix'). When `convoverch' is set, we want to convolve over the whole allocated block, not just one channel. So in effect, it is the same as `rel_block' in `gal_tile_start_end_coord'. */ gal_tile_start_end_coord(tile, pprm->pix, cprm->convoverch); start_fastdim = pprm->pix[ndim-1]; /* See if this tile is on the edge or not. */ pprm->on_edge=convolve_tile_is_on_edge(pprm->host->dsize, pprm->pix, kernel->dsize, ndim); /* If it isn't on the edge and we are correcting an already convolved image (`tocorrect!=NULL'), then this tile can be ignored. */ if(cprm->tocorrect && pprm->on_edge==0) return; /* Parse over all the tile elements. */ i_inc=0; i_ninc=1; i_start=gal_tile_start_end_ind_inclusive(tile, block, i_st_en); while( i_st_en[0] + i_inc <= i_st_en[1] ) { /* Initialize the value along the fastest dimension (it is not incremented during `gal_tile_block_increment'). */ pprm->pix[ndim-1]=start_fastdim; /* Go over each pixel to convolve. */ for(j=0;jtocorrect && full_overlap) ) { /* If we are in correct mode, then re-calculate the full-overlap and all the other necessary paramters as if the channels didn't exist. */ if(cprm->tocorrect) full_overlap=convolve_spatial_overlap(pprm, 1); /* Initialize the necessary values. */ sum = 0.0L; ksum = cprm->edgecorrection ? 0.0L : 1.0L; /* Parse over both the overlap tiles. */ GAL_TILE_PO_OISET(float, float, i_overlap, k_overlap, 1, 0, { if( !isnan(*i) ) { sum += *i * *o; if(cprm->edgecorrection) ksum += *o; } }); /* Set the output value. */ out[ in_v - in ] = ksum==0.0L ? NAN : sum/ksum; } } /* Increment the last coordinate. */ pprm->pix[ndim-1]++; } /* Increase the increment from the start of the tile for the next contiguous patch. */ i_inc += gal_tile_block_increment(block, tile->dsize, i_ninc++, pprm->pix); } /* if(pprm->id==2053) printf("... done.\n"); */ } /* Do spatial convolution on each mesh. */ static void * convolve_spatial_on_thread(void *inparam) { struct gal_threads_params *tprm=(struct gal_threads_params *)inparam; struct spatial_params *cprm=(struct spatial_params *)(tprm->params); gal_data_t *block=cprm->block; size_t i; size_t ndim=block->ndim; struct per_thread_spatial_prm *pprm=&cprm->pprm[tprm->id]; size_t *dsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "dsize"); /* Set all dsize values to 1 (the values within `overlap->dsize' will be changed during convolution). */ for(i=0;icprm = cprm; pprm->pix = gal_data_malloc_array(GAL_TYPE_SIZE_T, 2*ndim, __func__, "pprm->pix"); pprm->host_start = gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "pprm->host_start"); pprm->kernel_start = gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "pprm->kernel_start"); pprm->overlap_start = gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "pprm->overlap_start"); pprm->i_overlap = gal_data_alloc(NULL, block->type, ndim, dsize, NULL, 0, -1, NULL, NULL, NULL); pprm->k_overlap = gal_data_alloc(NULL, cprm->kernel->type, ndim, dsize, NULL, 0, -1, NULL, NULL, NULL); free(dsize); free(pprm->i_overlap->array); free(pprm->k_overlap->array); pprm->i_overlap->block = cprm->block; pprm->k_overlap->block = cprm->kernel; /* Go over all the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Set this tile's pointer into this thread's parameters. */ pprm->id = tprm->indexs[i]; pprm->tile = &cprm->tiles[ pprm->id ]; /* Do the convolution on this tile. */ convolve_spatial_tile(pprm); } /* Clean up, wait until all other threads finish, then return. In a single thread situation, `tprm->b==NULL'. */ free(pprm->pix); free(pprm->host_start); free(pprm->kernel_start); free(pprm->overlap_start); gal_data_free(pprm->i_overlap); gal_data_free(pprm->k_overlap); if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* General spatial convolve function. This function is called by both `gal_convolve_spatial' and */ static gal_data_t * gal_convolve_spatial_general(gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, int convoverch, gal_data_t *tocorrect) { struct spatial_params params; gal_data_t *out, *block=gal_tile_block(tiles); /* Small sanity checks. */ if(tiles->ndim!=kernel->ndim) error(EXIT_FAILURE, 0, "%s: The number of dimensions between the kernel " "and input should be the same", __func__); if( block->type!=GAL_TYPE_FLOAT32 || kernel->type!=GAL_TYPE_FLOAT32 ) error(EXIT_FAILURE, 0, "%s: only accepts `float32' type input and " "kernel currently", __func__); /* Set the output datastructure. */ if(tocorrect) out=tocorrect; else { /* Allocate the space for the convolved image. */ out=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, block->ndim, block->dsize, block->wcs, 0, block->minmapsize, NULL, block->unit, NULL); /* Spatial convolution won't change the blank bit-flag, so use the block structure's blank bit flag. */ out->flag = ( block->flag | ( GAL_DATA_FLAG_BLANK_CH | GAL_DATA_FLAG_HASBLANK ) ); } /* Set the pointers in the parameters structure. */ params.out=out; params.tiles=tiles; params.block=block; params.kernel=kernel; params.tocorrect=tocorrect; params.convoverch=convoverch; params.edgecorrection=edgecorrection; /* Allocate the per-thread parameters. */ errno=0; params.pprm=malloc(numthreads * sizeof *params.pprm); if(params.pprm==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for `params.pprm'", __func__, numthreads * sizeof *params.pprm); /* Do the spatial convolution on threads. */ gal_threads_spin_off(convolve_spatial_on_thread, ¶ms, gal_list_data_number(tiles), numthreads); /* Clean up and return the output array. */ free(params.pprm); return out; } /* Convolve a dataset with a given kernel in the spatial domain. Spatial convolution can be greatly sped up if it is done on separate tiles over the image (on multiple threads). So as input, you can either give tile values or one full array. Just note that if you give a single array as input, the `next' element has to be `NULL'.*/ gal_data_t * gal_convolve_spatial(gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, int convoverch) { /* Call the general function. */ return gal_convolve_spatial_general(tiles, kernel, numthreads, edgecorrection, convoverch, NULL); } /* Correct the edges of channels in an already convolved image when it was initially convolved with `gal_convolve_spatial' with `convoverch==0'. In that case, strong boundaries exist on the tile edges. So if you later need to remove those boundaries, you can call this function, it will only do convolution on the tiles that are near the edge, not the full area, so it is much faster. */ void gal_convolve_spatial_correct_ch_edge(gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, gal_data_t *tocorrect) { gal_data_t *block=gal_tile_block(tiles); /* Some small sanity checks. */ if( gal_data_dsize_is_different(block, tocorrect) ) error(EXIT_FAILURE, 0, "%s: the `tocorrect' dataset has to have the " "same dimensions/size as the block of the `tiles' input", __func__); if( block->type != tocorrect->type ) error(EXIT_FAILURE, 0, "%s: the `tocorrect' dataset has to have the same " "type as the block of the `tiles' input. The given types are `%s' " "and `%s' respectively", __func__, gal_type_name(tocorrect->type, 1), gal_type_name(block->type, 1)); /* Call the general function, which will do the correction. */ gal_convolve_spatial_general(tiles, kernel, numthreads, edgecorrection, 0, tocorrect); } gnuastro-0.5/lib/checkset.c0000644000175000017500000003521513211076737012661 00000000000000/********************************************************************* Functions to check and set command line argument values and files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include /**************************************************************/ /********** My String functions: ************/ /**************************************************************/ int gal_checkset_string_has_space(char *in) { do switch(*in) { case ' ': case '\t': case '\v': return 1; } while(*(++in)!='\0'); return 0; } char * gal_checkset_malloc_cat(char *inname, char *toappend) { char *out; size_t inl, apl; inl=strlen(inname); apl=strlen(toappend); errno=0; out=malloc(inl+apl+1); if(out==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes", __func__, inl+apl+1); strcpy(out, inname); strcat(out, toappend); return out; } /* Copy the input string to the output (and also allocate the output. */ void gal_checkset_allocate_copy(const char *arg, char **copy) { if(arg) { errno=0; *copy=malloc(strlen(arg)+1); if(*copy==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes to copy %s", __func__, strlen(arg)+1, arg); strcpy(*copy, arg); } else *copy=NULL; } /* This function is mainly for reading in the arguments (from the command line or configuration files) that need to be copied. The set argument is for making sure that it has not already been set before, see the main.h files of any program. */ void gal_checkset_allocate_copy_set(char *arg, char **copy, int *set) { /* Incase *set==1, then you shouldn't do anything, just return. */ if(*set) return; /* The variable was not copied, copy it: */ errno=0; *copy=malloc(strlen(arg)+1); if(*copy==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes to copy %s", __func__, strlen(arg)+1, arg); strcpy(*copy, arg); *set=1; } /* The dataset may be alone in a file (for example a table in a text file) or it may an extension of a FITS file. In error messages in particular, we need to differentiate between the two. This function will check the filename and if it is FITS, it will return a string with the filename and HDU in parenthesis. If it isn't a FITS file, it will only return the filename. Note that the output needs to be freed, although when used in an error message, you can leave it to the system to free the space. There is no problem. */ char * gal_checkset_dataset_name(char *filename, char *hdu) { char *out; if( gal_fits_name_is_fits(filename) ) asprintf(&out, "%s (hdu %s)", filename, hdu); else gal_checkset_allocate_copy(filename, &out); return out; } /**************************************************************/ /********** Set file names and check if they exist ************/ /**************************************************************/ /* Given a filename, this function will separate its directory name part. */ char * gal_checkset_dir_part(char *filename) { char *out; size_t i, l=strlen(filename); /* Find the first slash from the end. */ for(i=l;i!=0;--i) if(filename[i]=='/') break; /* If there was no slash, then the current directory should be given: */ if(i==0 && filename[0]!='/') gal_checkset_allocate_copy("./", &out); else { gal_checkset_allocate_copy(filename, &out); out[i+1]='\0'; } return out; } /* Given a file name, keep the non-directory part. Note that if there is no forward slash in the input name, the full input name is considered to be the notdir output.*/ char * gal_checkset_not_dir_part(char *filename) { size_t i, l; char *out, *tmp=filename; /* Find the first `/' to identify the directory */ l=strlen(filename); for(i=l;i!=0;--i) if(filename[i]=='/') { tmp=&filename[i+1]; break; } /* Get the length of the notdir name: */ l=strlen(tmp); errno=0; out=malloc((l+1)*sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for notdir", __func__, (l+1)*sizeof *out); strcpy(out, tmp); return out; } /* Check if a file exists and report if it doesn't: */ void gal_checkset_check_file(char *filename) { FILE *tmpfile; errno=0; tmpfile = fopen(filename, "r"); if(tmpfile) /* The file opened. */ { if(fclose(tmpfile)==EOF) error(EXIT_FAILURE, errno, "%s", filename); } else error(EXIT_FAILURE, errno, "%s", filename); } /* Similar to `gal_checkset_check_file', but will report the result instead of doing it quietly. */ int gal_checkset_check_file_return(char *filename) { FILE *tmpfile; errno=0; tmpfile = fopen(filename, "r"); if(tmpfile) /* The file opened. */ { if(fclose(tmpfile)==EOF) error(EXIT_FAILURE, errno, "%s", filename); return 1; } else return 0; } /* Check if a file exists and can be opened. If the `keep' value is non-zero, then the file will remain untouched, otherwise, it will be deleted (since most programs need to make a clean output). When the file is to be deleted and `dontdelete' has a non-zero value, then the file won't be deleted, but the program will abort with an error, informing the user that the output can't be made. */ void gal_checkset_writable_remove(char *filename, int keep, int dontdelete) { char *dir; FILE *tmpfile; /* If the filename is `NULL' everything is ok (it doesn't exist)! In some cases, a NULL filename is interpretted to mean standard output. */ if(filename==NULL) return; /* We want to make sure that we can open and write to this file. But the user might have asked to not delete the file, so the contents should not be changed. Therefore we have to open it with `r+`. */ errno=0; tmpfile=fopen(filename, "r+"); if (tmpfile) /* The file opened. */ { /* Close the file. */ errno=0; if(fclose(tmpfile)) error(EXIT_FAILURE, errno, "%s", filename); /* See if the file should be deleted. */ if(keep==0) { /* Make sure it is ok to delete the file. */ if(dontdelete) error(EXIT_FAILURE, 0, "%s already exists and you have " "asked to not remove it with the `--dontdelete` " "(`-D`) option", filename); /* Delete the file: */ errno=0; if(unlink(filename)) error(EXIT_FAILURE, errno, "%s", filename); } } /* If the file doesn't exist, we just need to make sure if we have write permissions to its host directory. */ else { /* Separate the directory part of the filename. */ dir=gal_checkset_dir_part(filename); /* Make sure this directory is writable by this user. */ errno=0; if( access(dir, W_OK) ) error(EXIT_FAILURE, errno, "cannot create any file(s) in the " "directory `%s'", dir); /* Clean up. */ free(dir); } } /* Check output file name: If a file exists or can exist and can be written to, this function will return 1. If not (for example it is a directory) it will return 0. Finally, if it exists but cannot be deleted, report an error and abort. */ int gal_checkset_dir_0_file_1(char *name, int dontdelete) { FILE *tmpfile; struct stat nameinfo; if(name==NULL) error(EXIT_FAILURE, 0, "%s: a bug! The input should not be NULL. " "Please contact us at %s so we can see what went wrong and " "fix it in future updates", __func__, PACKAGE_BUGREPORT); errno=0; if(stat(name, &nameinfo)!=0) { if(errno==ENOENT) /* ENOENT: No such file or directory. */ {/* Make the file temporarily and see if everything is ok. */ errno=0; tmpfile=fopen(name, "w"); if (tmpfile) { fprintf(tmpfile, "Only to test write access."); errno=0; if(fclose(tmpfile)) error(EXIT_FAILURE, errno, "%s", name); errno=0; if(unlink(name)) error(EXIT_FAILURE, errno, "%s", name); } else error(EXIT_FAILURE, errno, "%s", name); return 1; /* It is a file name, GOOD */ } else /* Some strange condition, ABORT */ error(EXIT_FAILURE, errno, "%s", name); } if(S_ISDIR(nameinfo.st_mode)) /* It is a directory, BAD */ return 0; else if (S_ISREG(nameinfo.st_mode)) /* It is a file, GOOD. */ { gal_checkset_writable_remove(name, 0, dontdelete); return 1; } else /* Not a file or a dir, ABORT */ error(EXIT_FAILURE, 0, "%s not a file or a directory", name); error(EXIT_FAILURE, 0, "%s: a bug! The process should not reach the end " "of the function! Please contact us at %s so we can see what went " "wrong and fix it in future updates", __func__, PACKAGE_BUGREPORT); return 0; } /* Allocate space and write the output name (outname) based on a given input name (inname). The suffix of the input name (if present) will be removed and the given suffix will be put in the end. */ char * gal_checkset_automatic_output(struct gal_options_common_params *cp, char *inname, char *suffix) { char *out; size_t i, l, offset=0; /* Merge the contents of the input name and suffix name (while also allocating the necessary space).*/ out=gal_checkset_malloc_cat(inname, suffix); /* If there is actually a suffix, replace it with the (possibly) existing suffix. */ if(suffix) { /* Start from the end of the input array*/ l=strlen(inname); for(i=l-1;i!=0;--i) { /* We don't want to touch anything before a `/' (directory names). We are only concerned with file names here. */ if(out[i]=='/') { /* When `/' is the last input character, then the input is clearly not a filename, but a directory name. In this case, adding a suffix is meaningless (a suffix belongs to a filename for Gnuastro's tools). So close the string after the `/' and leave the loop. However, if the `/' isn't the last input name charector, there is probably a filename (without a "." suffix), so break from the loop. No further action is required, since we initially allocated the necessary space and concatenated the input and suffix arrays. */ if(i==l-1) out[i+1]='\0'; break; } /* The input file names can be compressed names (for example `.fits.gz'). Currently the only compressed formats (decompressed within CFITSIO) are listed in `gal_fits_name_is_fits' and `gal_fits_suffix_is_fits'.*/ else if(out[i]=='.' && !( ( out[i+1]=='g' && out[i+2]=='z' ) || (out[i+1]=='f' && out[i+2]=='z' ) || out[i+1]=='Z' ) ) { out[i]='\0'; strcat(out, suffix); break; } } } /* If we don't want the input directory information, remove them here. */ if(!cp->keepinputdir) { l=strlen(out); for(i=l;i!=0;--i) /* Find the last forward slash. */ if(out[i]=='/') {offset=i+1; break;} if(offset) for(i=offset;i<=l;++i) /* <= because we want to shift the */ out[i-offset]=out[i]; /* '\0' character in the string too. */ } /* Remove the created filename if it already exits. */ gal_checkset_writable_remove(out, cp->keep, cp->dontdelete); /* Return the resulting filename. */ return out; } /* Check if dirname is actually a real directory and that we can actually write inside of it. To insure all conditions an actual file will be made */ void gal_checkset_check_dir_write_add_slash(char **dirname) { int file_d; char *tmpname, *indir=*dirname/*, buf[]="A test"*/; /* Set the template for the temporary file: */ if(indir[strlen(indir)-1]=='/') tmpname=gal_checkset_malloc_cat(indir, "gnuastroXXXXXX"); else tmpname=gal_checkset_malloc_cat(indir, "/gnuastroXXXXXX"); /* Make a temporary file name and try openning it. */ errno=0; file_d=mkstemp(tmpname); if(file_d==-1) error(EXIT_FAILURE, errno, "cannot write output in the directory " "%s", indir); /* errno=0; printf("\n\n%s\n\n", tmpname); if( write(file_d, buf, strlen(buf)) == -1 ) error(EXIT_FAILURE, errno, "%s: writing to this temporary file to " "check the given `%s` directory", tmpname, indir); */ errno=0; if( close(file_d) == -1 ) error(EXIT_FAILURE, errno, "%s: Closing this temporary file to check " "the given `%s` directory", tmpname, indir); /* Delete the temporary file: */ errno=0; if(unlink(tmpname)==-1) error(EXIT_FAILURE, errno, "%s: removing this temporary file made " "to check the given `%s directory`", tmpname, indir); /* Remove the extra characters that were added for the random name. */ tmpname[strlen(tmpname)-14]='\0'; free(*dirname); *dirname=tmpname; } /* If the given directory exists, then nothing is done, if it doesn't, it will be created. */ void gal_checkset_mkdir(char *dirname) { struct stat st={0}; if( stat(dirname, &st) == -1 ) { errno=0; if( mkdir(dirname, 0700) == -1 ) error(EXIT_FAILURE, errno, "making %s", dirname); } } gnuastro-0.5/lib/box.c0000644000175000017500000002342713216276304011657 00000000000000/********************************************************************* Box -- Define bounding and overlapping boxes. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include /* IMPORTANT NOTE: All the axises are based on the FITS standard, not C. */ /* Any ellipse can be enclosed into a rectangular box. The purpose of this function is to give the height and width of that box. The logic behind it is this: All the points on the circumference of an ellipse that is aligned on the x axis can be written as: (acos(t),bsin(t)) where 0=0.5 ? 1 : 0 ); /* Set the first and last pixels in this dimension. */ fpixel[i]=tmp-width[i]/2; lpixel[i]=tmp+width[i]/2; } /* For a check: if(ndim==2) { printf("center: %g, %g\n", center[0], center[1]); printf("fpixel: %ld, %ld\n", fpixel[0], fpixel[1]); printf("lpixel: %ld, %ld\n", lpixel[0], lpixel[1]); } else if(ndim==3) { printf("center: %g, %g, %g\n", center[0], center[1], center[2]); printf("fpixel: %ld, %ld, %ld\n", fpixel[0], fpixel[1], fpixel[2]); printf("lpixel: %ld, %ld, %ld\n", lpixel[0], lpixel[1], lpixel[2]); } */ } /* Problem to solve: We have set the first and last pixels of a box in an input image (fpixel_i[2] and lpixel_i[2]). But those first and last pixels don't necessarily lie within the image's boundaries. They can be outside of it or patially overlap with it (see examples below). The job of this function is to corret for such situations and find the starting and ending points of any overlap. It is assumed that your output (overlap) image's first pixel lies right ontop of the fpixel_i[0] in the input image. But since fpixel_i might be outside of the image, in this function we find the fpixel_o[2] and lpixel_o[2] in the overlap image coordinates that overlap with the input image. So the values of all four points might change after this function. Before: ======= fpixel_o and lpixel_o are not shown. fpixel_o and lpixel_o point to the same place as fpixel_i and lpixel_i, But in the coordinates of the overlap image. -----------------lpixel_i | overlap | | image | | | ----------------------|------ | | | | | | fpixel_i ----------------- | | | | | | | Input image | ----------------------------- After ===== ----------------- | overlap | | image | | | ----------------------|------lpixel_i | | | | | | fpixel_i ----------------- | | | | | | | Input image | ----------------------------- So, in short the arrays we are dealing with here are: fpixel_i: Coordinates of the first pixel in input image. lpixel_i: Coordinates of the last pixel in input image. fpixel_o: Coordinates of the first pixel in overlap image. lpixel_o: Coordinates of the last pixel in overlap image. NOTES: ====== - lpixel is the last pixel in the image (not outside of it). - The coordinates are in the FITS format. Return value: ============= 1: There is an overlap 0: There is no overlap */ int gal_box_overlap(long *naxes, long *fpixel_i, long *lpixel_i, long *fpixel_o, long *lpixel_o, size_t ndim) { size_t i; long width; /* In case you want to see how things are going: printf("\n\nImage size: ["); for(i=0;inaxes[i]) { lpixel_o[i] = width - (lpixel_i[i]-naxes[i]); lpixel_i[i] = naxes[i]; } } /* In case you want to see the results. printf("\nAfter correction:\n"); printf("Input image: ("); for(i=0;inaxes[i] || lpixel_i[i]<1 ) return 0; /* The first and last image pixels are within the image, so there is overlap. */ return 1; } gnuastro-0.5/lib/blank.c0000644000175000017500000004101113156610402012135 00000000000000/********************************************************************* blank -- Deal with blank values in a datasets This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include /* Write the blank value of the type into an already allocate space. Note that for STRINGS, pointer should actually be `char **'. */ void gal_blank_write(void *ptr, uint8_t type) { switch(type) { /* Numeric types */ case GAL_TYPE_UINT8: *(uint8_t *)ptr = GAL_BLANK_UINT8; break; case GAL_TYPE_INT8: *(int8_t *)ptr = GAL_BLANK_INT8; break; case GAL_TYPE_UINT16: *(uint16_t *)ptr = GAL_BLANK_UINT16; break; case GAL_TYPE_INT16: *(int16_t *)ptr = GAL_BLANK_INT16; break; case GAL_TYPE_UINT32: *(uint32_t *)ptr = GAL_BLANK_UINT32; break; case GAL_TYPE_INT32: *(int32_t *)ptr = GAL_BLANK_INT32; break; case GAL_TYPE_UINT64: *(uint64_t *)ptr = GAL_BLANK_UINT64; break; case GAL_TYPE_INT64: *(int64_t *)ptr = GAL_BLANK_INT64; break; case GAL_TYPE_FLOAT32: *(float *)ptr = GAL_BLANK_FLOAT32; break; case GAL_TYPE_FLOAT64: *(double *)ptr = GAL_BLANK_FLOAT64; break; /* String type. */ case GAL_TYPE_STRING: gal_checkset_allocate_copy(GAL_BLANK_STRING, ptr); break; /* Complex types */ case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: complex types are not yet supported", __func__); /* Unrecognized type. */ default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } } /* Allocate some space for the given type and put the blank value into it. */ void * gal_blank_alloc_write(uint8_t type) { void *out; /* Allocate the space to keep the blank value. */ out=gal_data_malloc_array(type, 1, __func__, "out"); /* Put the blank value in the allcated space. */ gal_blank_write(out, type); /* Return the allocated space. */ return out; } /* Initialize (set all the values in the array) with the blank value of the given type. */ void gal_blank_initialize(gal_data_t *input) { GAL_TILE_PARSE_OPERATE(input, NULL, 0, 0, {*i=b;}); } /* Return 1 if the dataset has a blank value and zero if it doesn't. Before checking the dataset, this function will look at its flags. If the `GAL_DATA_FLAG_HASBLANK' or `GAL_DATA_FLAG_DONT_CHECK_ZERO' bits of `input->flag' are set to 1, this function will not do any check and will just use the information in the flags. If you want to re-check a dataset which has non-zero flags, then explicitly set the appropriate flag to zero before calling this function. When there are no other flags, you can just set `input->flags' to zero, otherwise you can use this expression: input->flags &= ~ (GAL_DATA_FLAG_HASBLANK | GAL_DATA_FLAG_USE_ZERO); This function has no side-effects on the dataset: it will not toggle the flags, to avoid repeating parsing of the full dataset multiple times (when it occurs), please toggle the flags your self after the first check. */ #define HAS_BLANK(IT) { \ IT b, *a=input->array, *af=a+input->size, *start; \ gal_blank_write(&b, block->type); \ \ /* If this is a tile, not a full block. */ \ if(input!=block) \ start=gal_tile_start_end_ind_inclusive(input, block, start_end_inc); \ \ /* Go over all the elements. */ \ while( start_end_inc[0] + increment <= start_end_inc[1] ) \ { \ /* Necessary when we are on a tile. */ \ if(input!=block) \ af = ( a = start + increment ) + input->dsize[input->ndim-1]; \ \ /* Check for blank values. */ \ if(b==b) do if(*a==b) { hasblank=1; break; } while(++adsize, \ num_increment++, NULL); \ else break; \ } \ } int gal_blank_present(gal_data_t *input, int updateflag) { int hasblank=0; char **str, **strf; size_t increment=0, num_increment=1; gal_data_t *block=gal_tile_block(input); size_t start_end_inc[2]={0,block->size-1}; /* -1: this is INCLUSIVE. */ /* If there is nothing in the array (its size is zero), then return 0 (no blank is present. */ if(input->size==0) return 0; /* From the user's flags, you can tell if the dataset has already been checked for blank values or not. If it has, then just return the checked result. */ if( input->flag & GAL_DATA_FLAG_BLANK_CH ) return input->flag & GAL_DATA_FLAG_HASBLANK; /* Go over the pixels and check: */ switch(block->type) { /* Numeric types */ case GAL_TYPE_UINT8: HAS_BLANK( uint8_t ); break; case GAL_TYPE_INT8: HAS_BLANK( int8_t ); break; case GAL_TYPE_UINT16: HAS_BLANK( uint16_t ); break; case GAL_TYPE_INT16: HAS_BLANK( int16_t ); break; case GAL_TYPE_UINT32: HAS_BLANK( uint32_t ); break; case GAL_TYPE_INT32: HAS_BLANK( int32_t ); break; case GAL_TYPE_UINT64: HAS_BLANK( uint64_t ); break; case GAL_TYPE_INT64: HAS_BLANK( int64_t ); break; case GAL_TYPE_FLOAT32: HAS_BLANK( float ); break; case GAL_TYPE_FLOAT64: HAS_BLANK( double ); break; /* String. */ case GAL_TYPE_STRING: if(input!=block) error(EXIT_FAILURE, 0, "%s: tile mode is currently not supported for " "strings", __func__); strf = (str=input->array) + input->size; do if(!strcmp(*str,GAL_BLANK_STRING)) return 1; while(++strtype); } /* Update the flag if requested. */ if(updateflag) { input->flag |= GAL_DATA_FLAG_BLANK_CH; if(hasblank) input->flag |= GAL_DATA_FLAG_HASBLANK; else input->flag &= ~GAL_DATA_FLAG_HASBLANK; } /* If there was a blank value, then the function would have returned with a value of 1. So if it reaches here, then we can be sure that there was no blank values, hence, return 0. */ return hasblank; } /* Create a dataset of the the same size as the input, but with an uint8_t type that has a value of 1 for data that are blank and 0 for those that aren't. */ #define FLAG_BLANK(IT) { \ IT b, *a=input->array; \ gal_blank_write(&b, input->type); \ if(b==b) /* Blank value can be checked with the equal comparison */ \ do { *o = *a==b; ++a; } while(++oarray, **strf=str+input->size; if( gal_blank_present(input, 0) ) { /* Allocate a non-cleared output array, we are going to parse the input and fill in each element. */ out=gal_data_alloc(NULL, GAL_TYPE_UINT8, input->ndim, input->dsize, input->wcs, 0, input->minmapsize, NULL, "bool", NULL); /* Set the pointers for easy looping. */ of=(o=out->array)+input->size; /* Go over the pixels and set the output values. */ switch(input->type) { /* Numeric types */ case GAL_TYPE_UINT8: FLAG_BLANK( uint8_t ); break; case GAL_TYPE_INT8: FLAG_BLANK( int8_t ); break; case GAL_TYPE_UINT16: FLAG_BLANK( uint16_t ); break; case GAL_TYPE_INT16: FLAG_BLANK( int16_t ); break; case GAL_TYPE_UINT32: FLAG_BLANK( uint32_t ); break; case GAL_TYPE_INT32: FLAG_BLANK( int32_t ); break; case GAL_TYPE_UINT64: FLAG_BLANK( uint64_t ); break; case GAL_TYPE_INT64: FLAG_BLANK( int64_t ); break; case GAL_TYPE_FLOAT32: FLAG_BLANK( float ); break; case GAL_TYPE_FLOAT64: FLAG_BLANK( double ); break; /* String. */ case GAL_TYPE_STRING: do *o++ = !strcmp(*str,GAL_BLANK_STRING); while(++strtype, 1)); /* Bad input. */ default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, input->type); } } else /* Allocate a CLEAR data structure (all zeros). */ out=gal_data_alloc(NULL, GAL_TYPE_UINT8, input->ndim, input->dsize, input->wcs, 1, input->minmapsize, NULL, "bool", NULL); /* Return */ return out; } /* Remove blank elements from a dataset, convert it to a 1D dataset and adjust the size properly. In practice this function doesn't `realloc' the input array, all it does is to shift the blank eleemnts to the end and adjust the size elements of the `gal_data_t'. */ #define BLANK_REMOVE(IT) { \ IT b, *a=input->array, *af=a+input->size, *o=input->array; \ gal_blank_write(&b, input->type); \ if(b==b) /* Blank value can be be checked with equal. */ \ do if(*a!=b) { ++num; *o++=*a; } while(++ablock && input->ndim!=1 ) error(EXIT_FAILURE, 0, "%s: tiles in datasets with more dimensions than " "1 are not yet supported. Your input has %zu dimensions", __func__, input->ndim); /* If the dataset doesn't have blank values, then just get the size. */ if( gal_blank_present(input, 0) ) { /* Shift all non-blank elements to the start of the array. */ switch(input->type) { case GAL_TYPE_UINT8: BLANK_REMOVE( uint8_t ); break; case GAL_TYPE_INT8: BLANK_REMOVE( int8_t ); break; case GAL_TYPE_UINT16: BLANK_REMOVE( uint16_t ); break; case GAL_TYPE_INT16: BLANK_REMOVE( int16_t ); break; case GAL_TYPE_UINT32: BLANK_REMOVE( uint32_t ); break; case GAL_TYPE_INT32: BLANK_REMOVE( int32_t ); break; case GAL_TYPE_UINT64: BLANK_REMOVE( uint64_t ); break; case GAL_TYPE_INT64: BLANK_REMOVE( int64_t ); break; case GAL_TYPE_FLOAT32: BLANK_REMOVE( float ); break; case GAL_TYPE_FLOAT64: BLANK_REMOVE( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } } else num=input->size; /* Adjust the size elements of the dataset. */ input->ndim=1; input->dsize[0]=input->size=num; /* Set the flags to mark that there is no blanks. */ input->flag |= GAL_DATA_FLAG_BLANK_CH; input->flag &= ~GAL_DATA_FLAG_HASBLANK; } /* Print the blank value as a string. For the integer types, we'll use the PRIxNN keywords of `inttypes.h' (which is imported into Gnuastro from Gnulib, so we don't necessarily rely on the host system having it). */ char * gal_blank_as_string(uint8_t type, int width) { char *blank=NULL, *fmt; /* Print the given value. */ switch(type) { case GAL_TYPE_BIT: error(EXIT_FAILURE, 0, "%s: bit types are not implemented yet", __func__); break; case GAL_TYPE_STRING: if(width) asprintf(&blank, "%*s", width, GAL_BLANK_STRING); else asprintf(&blank, "%s", GAL_BLANK_STRING); break; case GAL_TYPE_UINT8: fmt = width ? "%*"PRIu8 : "%"PRIu8; if(width) asprintf(&blank, fmt, width, (uint8_t)GAL_BLANK_UINT8); else asprintf(&blank, fmt, (uint8_t)GAL_BLANK_UINT8); break; case GAL_TYPE_INT8: fmt = width ? "%*"PRId8 : "%"PRId8; if(width) asprintf(&blank, fmt, width, (int8_t)GAL_BLANK_INT8); else asprintf(&blank, fmt, (int8_t)GAL_BLANK_INT8); break; case GAL_TYPE_UINT16: fmt = width ? "%*"PRIu16 : "%"PRIu16; if(width) asprintf(&blank, fmt, width, (uint16_t)GAL_BLANK_UINT16); else asprintf(&blank, fmt, (uint16_t)GAL_BLANK_UINT16); break; case GAL_TYPE_INT16: fmt = width ? "%*"PRId16 : "%"PRId16; if(width) asprintf(&blank, fmt, width, (int16_t)GAL_BLANK_INT16); else asprintf(&blank, fmt, (int16_t)GAL_BLANK_INT16); break; case GAL_TYPE_UINT32: fmt = width ? "%*"PRIu32 : "%"PRIu32; if(width) asprintf(&blank, fmt, width, (uint32_t)GAL_BLANK_UINT32); else asprintf(&blank, fmt, (uint32_t)GAL_BLANK_UINT32); break; case GAL_TYPE_INT32: fmt = width ? "%*"PRId32 : "%"PRId32; if(width) asprintf(&blank, fmt, width, (int32_t)GAL_BLANK_INT32); else asprintf(&blank, fmt, (int32_t)GAL_BLANK_INT32); break; case GAL_TYPE_UINT64: fmt = width ? "%*"PRIu64 : "%"PRIu64; if(width) asprintf(&blank, fmt, width, (uint64_t)GAL_BLANK_UINT64); else asprintf(&blank, fmt, (uint64_t)GAL_BLANK_UINT64); break; case GAL_TYPE_INT64: fmt = width ? "%*"PRId64 : "%"PRId64; if(width) asprintf(&blank, fmt, width, (int64_t)GAL_BLANK_INT64); else asprintf(&blank, fmt, (int64_t)GAL_BLANK_INT64); break; case GAL_TYPE_FLOAT32: if(width) asprintf(&blank, "%*f", width, (float)GAL_BLANK_FLOAT32); else asprintf(&blank, "%f", (float)GAL_BLANK_FLOAT32); break; case GAL_TYPE_FLOAT64: if(width) asprintf(&blank, "%*f", width, (double)GAL_BLANK_FLOAT64); else asprintf(&blank, "%f", (double)GAL_BLANK_FLOAT64); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } return blank; } gnuastro-0.5/lib/binary.c0000644000175000017500000005177113216276304012356 00000000000000/********************************************************************* binary -- Work on binary (0 and 1 valued) datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include /*********************************************************************/ /***************** Erosion and dilation ********************/ /*********************************************************************/ static void binary_erode_dilate_2d_4con(gal_data_t *input, int dilate0_erode1) { uint8_t f, b, *pt, *fpt, *byt=input->array; size_t i, j, ind, nr=input->dsize[0], nc=input->dsize[1]; /* Do a sanity check: */ if(dilate0_erode1!=1 && dilate0_erode1!=0) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "fix this problem. The value to `dilate0_erode1' is %u while it " "should be 0 or 1", __func__, PACKAGE_BUGREPORT, dilate0_erode1); /* Set the foreground and background values. */ if(dilate0_erode1==0) {f=1; b=0;} else {f=0; b=1;} /* Check the 4 corners: */ if(byt[0]==b && (byt[1]==f || byt[nc]==f) ) byt[0]=GAL_BINARY_TMP_VALUE; if(byt[nc-1]==b && (byt[nc-2]==f || byt[2*nc-1]==f)) byt[nc-1]=GAL_BINARY_TMP_VALUE; if(byt[(nr-1)*nc]==b && (byt[(nr-2)*nc]==f || byt[(nr-1)*nc+1]==f) ) byt[(nr-1)*nc]=GAL_BINARY_TMP_VALUE; if(byt[nr*nc-1]==b && (byt[nr*nc-2]==f || byt[nr*nc-1-nc]==f) ) byt[nr*nc-1]=GAL_BINARY_TMP_VALUE; /* Check the 4 sides: */ for(j=1;jarray; size_t i, j, ind, nr=input->dsize[0], nc=input->dsize[1]; /* Do a sanity check: */ if(dilate0_erode1!=1 && dilate0_erode1!=0) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can fix " "this problem. The value to dilate0_erode1 is %u while it should " "be 0 or 1", __func__, PACKAGE_BUGREPORT, dilate0_erode1); /* Set the foreground and background values: */ if(dilate0_erode1==0) {f=1; b=0;} else {f=0; b=1;} /* Check the 4 corners: */ if(byt[0]==b && (byt[1]==f || byt[nc]==f || byt[nc+1]==f) ) byt[0]=GAL_BINARY_TMP_VALUE; if(byt[nc-1]==b && (byt[nc-2]==f || byt[2*nc-1]==f || byt[2*nc-2]==f) ) byt[nc-1]=GAL_BINARY_TMP_VALUE; if(byt[(nr-1)*nc]==b && ( byt[(nr-2)*nc]==f || byt[(nr-1)*nc+1]==f || byt[(nr-2)*nc+1]==f) ) byt[(nr-1)*nc]=GAL_BINARY_TMP_VALUE; if(byt[nr*nc-1]==b && ( byt[nr*nc-2]==f || byt[nr*nc-1-nc]==f || byt[nr*nc-2-nc]==f) ) byt[nr*nc-1]=GAL_BINARY_TMP_VALUE; /* Check the 4 sides: */ for(j=1;jndim, input->dsize); /* Currently this only works on blocks. */ if(input->block) error(EXIT_FAILURE, 0, "%s: currently only works on a fully " "allocated block of memory, but the input is a tile (its `block' " "element is not NULL)", __func__); /* Set the dataset to work on. */ binary = ( (inplace && input->type==GAL_TYPE_UINT8) ? input : gal_data_copy_to_new_type(input, GAL_TYPE_UINT8) ); /* Go over every element and do the erosion. */ switch(binary->ndim) { case 2: for(counter=0;counterndim); } /* Clean up and return. */ free(dinc); return binary; } gal_data_t * gal_binary_erode(gal_data_t *input, size_t num, int connectivity, int inplace) { return binary_erode_dilate(input, num, connectivity, inplace, 1); } gal_data_t * gal_binary_dilate(gal_data_t *input, size_t num, int connectivity, int inplace) { return binary_erode_dilate(input, num, connectivity, inplace, 0); } gal_data_t * gal_binary_open(gal_data_t *input, size_t num, int connectivity, int inplace) { gal_data_t *out; /* First do the necessary number of erosions. */ out=gal_binary_erode(input, num, connectivity, inplace); /* If `inplace' was called, then `out' is the same as `input', if it wasn't, then `out' is a newly allocated array. In any case, we should dilate in the same allocated space. */ gal_binary_dilate(input, num, connectivity, 1); /* Return the output dataset. */ return out; } /*********************************************************************/ /***************** Connected components ********************/ /*********************************************************************/ /* Find connected components in an intput dataset. */ size_t gal_binary_connected_components(gal_data_t *binary, gal_data_t **out, int connectivity) { int32_t *l; uint8_t *b, *bf; gal_data_t *lab; size_t p, i, curlab=1; gal_list_sizet_t *Q=NULL; size_t *dinc=gal_dimension_increment(binary->ndim, binary->dsize); /* Two small sanity checks. */ if(binary->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: the input data set type must be `uint8'", __func__); if(binary->block) error(EXIT_FAILURE, 0, "%s: currently, the input data structure to " "must not be a tile", __func__); /* Prepare the dataset for the labels. */ if(*out) { /* Use the given dataset. */ lab=*out; /* Make sure the given dataset has the same size as the input. */ if( gal_data_dsize_is_different(binary, lab) ) error(EXIT_FAILURE, 0, "%s: the `binary' and `out' datasets must " "have the same size", __func__); /* Make sure it has a `int32' type. */ if( lab->type!=GAL_TYPE_INT32 ) error(EXIT_FAILURE, 0, "%s: the `out' dataset must have `int32' type" "but the array you have given is `%s' type", __func__, gal_type_name(lab->type, 1)); /* Reset all its values to zero. */ memset(lab->array, 0, lab->size * gal_type_sizeof(lab->type)); } else lab=*out=gal_data_alloc(NULL, GAL_TYPE_INT32, binary->ndim, binary->dsize, binary->wcs, 1, binary->minmapsize, NULL, "labels", NULL); /* Initialize the labels array. If we have blank pixels in the byt array, then give them the blank labeled array. Note that since their value will not be 0, they will also not be labeled. */ l=lab->array; bf=(b=binary->array)+binary->size; /* Library must have no side effect, */ if( gal_blank_present(binary, 0) ) /* So blank flag should not be changed.*/ do *l++ = *b==GAL_BLANK_UINT8 ? GAL_BLANK_INT32 : 0; while(++barray; b=binary->array; for(i=0;isize;++i) /* Check if this pixel is already labeled. */ if( b[i] && l[i]==0 ) { /* This is the first pixel of this connected region that we have got to. */ l[i]=curlab; /* Add this pixel to the queue of pixels to work with. */ gal_list_sizet_add(&Q, i); /* While a pixel remains in the queue, continue labelling and searching for neighbors. */ while(Q!=NULL) { /* Pop an element from the queue. */ p=gal_list_sizet_pop(&Q); /* Go over all its neighbors and add them to the list if they haven't already been labeled. */ GAL_DIMENSION_NEIGHBOR_OP(p, binary->ndim, binary->dsize, connectivity, dinc, { if( b[ nind ] && l[ nind ]==0 ) { l[ nind ] = curlab; gal_list_sizet_add(&Q, nind); } } ); } /* This object has been fully labeled, so increment the current label. */ ++curlab; } /* Clean up and return the total number. */ free(dinc); return curlab-1; } /* Given an adjacency matrix (which should be binary), find the number of connected objects and return an array of new labels for each old label. */ gal_data_t * gal_binary_connected_adjacency_matrix(gal_data_t *adjacency, size_t *numconnected) { gal_data_t *newlabs_d; gal_list_sizet_t *Q=NULL; int32_t *newlabs, curlab=1; uint8_t *adj=adjacency->array; size_t i, j, p, num=adjacency->dsize[0]; /* Some small sanity checks. */ if(adjacency->type != GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: input must have type `uint8'. However, the " "input dataset has type of `%s'", __func__, gal_type_name(adjacency->type, 1)); if(adjacency->ndim != 2) error(EXIT_FAILURE, 0, "%s: input must be 2-dimensional (a matrix)." "However, the input dataset has %zu dimensions", __func__, adjacency->ndim); if(adjacency->dsize[0] != adjacency->dsize[1]) error(EXIT_FAILURE, 0, "%s: input must be square (same length in both " "dimensions). However, the input dataset has a size of %zu x %zu", __func__, adjacency->dsize[0], adjacency->dsize[1]); /* Allocate (and clear) the output datastructure. */ newlabs_d=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &num, NULL, 1, adjacency->minmapsize, NULL, NULL, NULL); newlabs=newlabs_d->array; /* Go over the input matrix and apply the same principle as we used to identify connected components in an image: through a queue, find those elements that are connected. */ for(i=1;i new labels ===\n"); for(i=1;indim, __func__, "startcoord"); size_t *dsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, input->ndim, __func__, "dsize"); /* Set the size of the padded inverse image and the coordinates of the start. We want the inverse to be padded on the edges of each dimension by 2 pixels, so each dimension should be padded by 4 pixels. */ for(i=0;indim;++i) { startcoord[i]=2; dsize[i]=input->dsize[i]+4; } /* Allocate the inverse dataset and initialize it to 1 (mainly for the edges, the inner region will be set afterwards). PADDING MUST BE INITIALIZED WITH 1: This is done so the connected body of 1 valued pixels (after inversion) gets a label of 1 after labeling the connected components and any hole, will get a value larger than 1. */ inv=gal_data_alloc(NULL, GAL_TYPE_UINT8, input->ndim, dsize, NULL, 0, input->minmapsize, "INVERSE", "binary", NULL); memset(inv->array, 1, inv->size); /* Define a tile to fill the central regions of the inverse. */ startind=gal_dimension_coord_to_index(input->ndim, inv->dsize, startcoord); tile=gal_data_alloc(gal_data_ptr_increment(inv->array, startind, inv->type), inv->type, input->ndim, input->dsize, NULL, 0, 0, NULL, NULL, NULL); *outtile=tile; tile->block=inv; /* Put the input's flags into the inverted array and the tile. */ inv->flag = tile->flag = input->flag; /* Fill the central regions. */ in=input->array; GAL_TILE_PARSE_OPERATE( tile, NULL, 0, 0, {*i = *in==GAL_BLANK_UINT8 ? *in : !*in; ++in;} ); /* Clean up and return. */ free(dsize); free(startcoord); return inv; } /* Fill all the holes in an input unsigned char array. The basic method is this: 1. An inverse image is created: * For every pixel in the input that is 1, the inverse is 0. * The inverse image has two extra pixels on each edge to ensure that all the inv[i]==1 pixels around the image are touching each other and a diagonal object passing through the image does not cause the inv[i]==1 pixels on the edges of the image to get a different label. 2. The 8 connected regions in this inverse image are found. 3. Since we had a 2 pixel padding on the edges of the image, we know for sure that all labeled regions with a label of 1 are actually connected `holes' in the input image. Any pixel with a label larger than 1, is therefore a bounded hole that is not 8-connected to the rest of the holes. */ void gal_binary_fill_holes(gal_data_t *input, int connectivity, size_t maxsize) { uint8_t *in; uint32_t *i, *fi; size_t numholes, *sizes; gal_data_t *inv, *tile, *holelabs=NULL; /* A small sanity check. */ if( input->type != GAL_TYPE_UINT8 ) error(EXIT_FAILURE, 0, "%s: input must have `uint8' type, but its " "input dataset has `%s' type", __func__, gal_type_name(input->type, 1)); /* Make the inverse image. */ inv=binary_make_padded_inverse(input, &tile); /* Label the holes */ numholes=gal_binary_connected_components(inv, &holelabs, connectivity); /* Any pixel with a label larger than 1 is a hole in the input image and we should invert the respective pixel. To do it, we'll use the tile that was defined before, just change its block and array.*/ in=input->array; tile->array=gal_tile_block_relative_to_other(tile, holelabs); tile->block=holelabs; /* has to be after correcting `tile->array'. */ /* If the user wants to only fill holes to a certain size, then remove those with a larger size. */ if(maxsize<-1) { /* Allocate space to keep the size of each hole: */ sizes=gal_data_calloc_array(GAL_TYPE_SIZE_T, numholes+1, __func__, "sizes"); fi=(i=holelabs->array)+holelabs->size; do ++sizes[*i]; while(++iarray)+holelabs->size; do if(*i!=GAL_BLANK_INT32) *i = sizes[*i]>maxsize ? 1 : *i; while(++i1 && *i!=GAL_BLANK_INT32 ? 1 : *in; ++in; }); /* Clean up and return. */ tile->array=NULL; gal_data_free(inv); gal_data_free(tile); gal_data_free(holelabs); } gnuastro-0.5/lib/arithmetic-plus.c0000644000175000017500000000361113215601241014161 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_plus(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), + ); } gnuastro-0.5/lib/arithmetic-or.c0000644000175000017500000000345113215601241013620 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_or(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, || ); } gnuastro-0.5/lib/arithmetic-ne.c0000644000175000017500000000345113215601241013602 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_ne(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, != ); } gnuastro-0.5/lib/arithmetic-multiply.c0000644000175000017500000000361513215601241015061 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_multiply(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), * ); } gnuastro-0.5/lib/arithmetic-modulo.c0000644000175000017500000000414013215601241014473 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include /* `BINARY_SET_LT_INT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_modulo(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the modulo operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), % ); } gnuastro-0.5/lib/arithmetic-minus.c0000644000175000017500000000361213215601241014332 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_minus(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), - ); } gnuastro-0.5/lib/arithmetic-lt.c0000644000175000017500000000345013215601241013616 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_lt(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, < ); } gnuastro-0.5/lib/arithmetic-le.c0000644000175000017500000000345113215601241013600 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_le(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, <= ); } gnuastro-0.5/lib/arithmetic-gt.c0000644000175000017500000000345013215601241013611 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_gt(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, > ); } gnuastro-0.5/lib/arithmetic-ge.c0000644000175000017500000000345113215601241013573 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_ge(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, >= ); } gnuastro-0.5/lib/arithmetic-eq.c0000644000175000017500000000345113215601241013605 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_eq(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, == ); } gnuastro-0.5/lib/arithmetic-divide.c0000644000175000017500000000361313215601241014444 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_divide(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), / ); } gnuastro-0.5/lib/arithmetic-bitxor.c0000644000175000017500000000414013215601241014503 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include /* `BINARY_SET_LT_INT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_bitxor(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the bitxor operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), ^ ); } gnuastro-0.5/lib/arithmetic-bitrsh.c0000644000175000017500000000414113215601241014470 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include /* `BINARY_SET_LT_INT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_bitrsh(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the bitrsh operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), >> ); } gnuastro-0.5/lib/arithmetic-bitor.c0000644000175000017500000000413613215601241014320 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include /* `BINARY_SET_LT_INT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_bitor(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the bitor operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), | ); } gnuastro-0.5/lib/arithmetic-bitlsh.c0000644000175000017500000000414113215601241014462 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include /* `BINARY_SET_LT_INT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_bitlsh(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the bitlsh operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), << ); } gnuastro-0.5/lib/arithmetic-bitand.c0000644000175000017500000000414013215601241014435 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include /* `BINARY_SET_LT_INT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_bitand(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the bitand operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), & ); } gnuastro-0.5/lib/arithmetic-and.c0000644000175000017500000000345213215601241013743 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include /* `BINARY_SET_LT' is defined in `arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate `.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_and(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, && ); } gnuastro-0.5/lib/arithmetic.c0000644000175000017500000017212113215601241013203 00000000000000/********************************************************************* Arithmetic operations on data structures This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include /* Headers for each binary operator. Since they heavily involve macros, their compilation can be very large if they are in a single function and file. So there is a separate C source and header file for each of these functions.*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /***********************************************************************/ /*************** Internal checks **************/ /***********************************************************************/ /* Some functions are only for a floating point operand, so if the input isn't floating point, inform the user to change the type explicitly, doing it implicitly/internally puts too much responsability on the program. */ static void arithmetic_check_float_input(gal_data_t *in, int operator, char *numstr) { switch(in->type) { case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: break; default: error(EXIT_FAILURE, 0, "the %s operator can only accept single or " "double precision floating point numbers as its operand. The " "%s operand has type %s. You can use the `float' or `double' " "operators before this operator to explicitly convert to the " "desired precision floating point type. If the operand was " "originally a typed number (string of characters), add an `f' " "after it so it is directly read into the proper precision " "floating point number (based on the number of non-zero " "decimals it has)", gal_arithmetic_operator_string(operator), numstr, gal_type_name(in->type, 1)); } } /***********************************************************************/ /*************** Unary functions/operators **************/ /***********************************************************************/ /* Change input data structure type. */ static gal_data_t * arithmetic_change_type(gal_data_t *data, int operator, int flags) { int type=-1; gal_data_t *out; /* Set the output type. */ switch(operator) { case GAL_ARITHMETIC_OP_TO_UINT8: type=GAL_TYPE_UINT8; break; case GAL_ARITHMETIC_OP_TO_INT8: type=GAL_TYPE_INT8; break; case GAL_ARITHMETIC_OP_TO_UINT16: type=GAL_TYPE_UINT16; break; case GAL_ARITHMETIC_OP_TO_INT16: type=GAL_TYPE_INT16; break; case GAL_ARITHMETIC_OP_TO_UINT32: type=GAL_TYPE_UINT32; break; case GAL_ARITHMETIC_OP_TO_INT32: type=GAL_TYPE_INT32; break; case GAL_ARITHMETIC_OP_TO_UINT64: type=GAL_TYPE_UINT64; break; case GAL_ARITHMETIC_OP_TO_INT64: type=GAL_TYPE_INT64; break; case GAL_ARITHMETIC_OP_TO_FLOAT32: type=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_TO_FLOAT64: type=GAL_TYPE_FLOAT64; break; default: error(EXIT_FAILURE, 0, "%s: operator value of %d not recognized", __func__, operator); } /* Copy to the new type. */ out=gal_data_copy_to_new_type(data, type); /* Delete the input structure if the user asked for it. */ if(flags & GAL_ARITHMETIC_FREE) gal_data_free(data); /* Return */ return out; } /* Return an array of value 1 for any zero valued element and zero for any non-zero valued element. */ #define TYPE_CASE_FOR_NOT(CTYPE) { \ CTYPE *a=data->array, *af=a+data->size; \ do *o++ = !(*a); while(++andim, data->dsize, data->wcs, 0, data->minmapsize, data->name, data->unit, data->comment); o=out->array; /* Go over the pixels and set the output values. */ switch(data->type) { case GAL_TYPE_UINT8: TYPE_CASE_FOR_NOT(uint8_t); break; case GAL_TYPE_INT8: TYPE_CASE_FOR_NOT(int8_t); break; case GAL_TYPE_UINT16: TYPE_CASE_FOR_NOT(uint16_t); break; case GAL_TYPE_INT16: TYPE_CASE_FOR_NOT(int16_t); break; case GAL_TYPE_UINT32: TYPE_CASE_FOR_NOT(uint32_t); break; case GAL_TYPE_INT32: TYPE_CASE_FOR_NOT(int32_t); break; case GAL_TYPE_UINT64: TYPE_CASE_FOR_NOT(uint64_t); break; case GAL_TYPE_INT64: TYPE_CASE_FOR_NOT(int64_t); break; case GAL_TYPE_FLOAT32: TYPE_CASE_FOR_NOT(float); break; case GAL_TYPE_FLOAT64: TYPE_CASE_FOR_NOT(double); break; case GAL_TYPE_BIT: error(EXIT_FAILURE, 0, "%s: bit datatypes are not yet supported, " "please get in touch with us to implement it.", __func__); default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, data->type); } /* Delete the input structure if the user asked for it. */ if(flags & GAL_ARITHMETIC_FREE) gal_data_free(data); /* Return */ return out; } /* Bitwise not operator. */ static gal_data_t * arithmetic_bitwise_not(int flags, gal_data_t *in) { gal_data_t *o; uint8_t *iu8 = in->array, *iu8f = iu8 + in->size, *ou8; int8_t *ii8 = in->array, *ii8f = ii8 + in->size, *oi8; uint16_t *iu16 = in->array, *iu16f = iu16 + in->size, *ou16; int16_t *ii16 = in->array, *ii16f = ii16 + in->size, *oi16; uint32_t *iu32 = in->array, *iu32f = iu32 + in->size, *ou32; int32_t *ii32 = in->array, *ii32f = ii32 + in->size, *oi32; uint64_t *iu64 = in->array, *iu64f = iu64 + in->size, *ou64; int64_t *ii64 = in->array, *ii64f = ii64 + in->size, *oi64; /* Check the type */ switch(in->type) { case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: error(EXIT_FAILURE, 0, "%s: bitwise not (one's complement) " "operator can only work on integer types", __func__); } /* If we want inplace output, set the output pointer to the input pointer, for every pixel, the operation will be independent. */ if(flags & GAL_ARITHMETIC_INPLACE) o = in; else o = gal_data_alloc(NULL, in->type, in->ndim, in->dsize, in->wcs, 0, in->minmapsize, NULL, NULL, NULL); /* Start setting the types. */ switch(in->type) { case GAL_TYPE_UINT8: ou8=o->array; do *ou8++ = ~(*iu8++); while(iu8array; do *oi8++ = ~(*ii8++); while(ii8array; do *ou16++ = ~(*iu16++); while(iu16array; do *oi16++ = ~(*ii16++); while(ii16array; do *ou32++ = ~(*iu32++); while(iu32array; do *oi32++ = ~(*ii32++); while(ii32array; do *ou64++ = ~(*iu64++); while(iu64array; do *oi64++ = ~(*ii64++); while(ii64type); } /* Clean up (if necessary). */ if( (flags & GAL_ARITHMETIC_FREE) && o!=in) gal_data_free(in); /* Return */ return o; } /* We don't want to use the standard function for unary functions in the case of the absolute operator. This is because there are multiple versions of this function in the C library for different types, which can greatly improve speed. */ #define ARITHMETIC_ABS_SGN(CTYPE, FUNC) { \ CTYPE *o=out->array, *a=in->array, *af=a+in->size; \ do *o++ = FUNC(*a); while(++atype, in->ndim, in->dsize, in->wcs, 0, in->minmapsize, in->name, in->unit, in->comment); /* Put the absolute value depending on the type. */ switch(in->type) { /* Unsigned types are already positive, so if the input is not to be freed (the output must be a separate array), just copy the whole array. */ case GAL_TYPE_UINT8: case GAL_TYPE_UINT16: case GAL_TYPE_UINT32: case GAL_TYPE_UINT64: if(out!=in) gal_data_copy_to_allocated(in, out); break; /* For the signed types, we actually have to go over the data and calculate the absolute value. There are unique functions for different types, so we will be using them.*/ case GAL_TYPE_INT8: ARITHMETIC_ABS_SGN( int8_t, abs ); break; case GAL_TYPE_INT16: ARITHMETIC_ABS_SGN( int16_t, abs ); break; case GAL_TYPE_INT32: ARITHMETIC_ABS_SGN( int32_t, labs ); break; case GAL_TYPE_INT64: ARITHMETIC_ABS_SGN( int64_t, llabs ); break; case GAL_TYPE_FLOAT32: ARITHMETIC_ABS_SGN( float, fabsf ); break; case GAL_TYPE_FLOAT64: ARITHMETIC_ABS_SGN( double, fabs ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, in->type); } /* Clean up and return */ if( (flags & GAL_ARITHMETIC_FREE) && out!=in) gal_data_free(in); return out; } #define UNIFUNC_RUN_FUNCTION_ON_ELEMENT(IT, OP){ \ IT *ia=in->array, *oa=o->array, *iaf=ia + in->size; \ do *oa++ = OP(*ia++); while(iatype) \ { \ case GAL_TYPE_UINT8: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(uint8_t, OP) \ break; \ case GAL_TYPE_INT8: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(int8_t, OP) \ break; \ case GAL_TYPE_UINT16: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(uint16_t, OP) \ break; \ case GAL_TYPE_INT16: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(int16_t, OP) \ break; \ case GAL_TYPE_UINT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(uint32_t, OP) \ break; \ case GAL_TYPE_INT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(int32_t, OP) \ break; \ case GAL_TYPE_UINT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(uint64_t, OP) \ break; \ case GAL_TYPE_INT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(int64_t, OP) \ break; \ case GAL_TYPE_FLOAT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(float, OP) \ break; \ case GAL_TYPE_FLOAT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(double, OP) \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: type code %d not recognized", \ "UNIARY_FUNCTION_ON_ELEMENT", in->type); \ } static gal_data_t * arithmetic_unary_function(int operator, int flags, gal_data_t *in) { gal_data_t *o; /* If we want inplace output, set the output pointer to the input pointer, for every pixel, the operation will be independent. */ if(flags & GAL_ARITHMETIC_INPLACE) o = in; else o = gal_data_alloc(NULL, in->type, in->ndim, in->dsize, in->wcs, 0, in->minmapsize, NULL, NULL, NULL); /* Start setting the operator and operands. */ switch(operator) { case GAL_ARITHMETIC_OP_SQRT: UNIARY_FUNCTION_ON_ELEMENT( sqrt ); break; case GAL_ARITHMETIC_OP_LOG: UNIARY_FUNCTION_ON_ELEMENT( log ); break; case GAL_ARITHMETIC_OP_LOG10: UNIARY_FUNCTION_ON_ELEMENT( log10 ); break; default: error(EXIT_FAILURE, 0, "%s: operator code %d not recognized", __func__, operator); } /* Clean up. Note that if the input arrays can be freed, and any of right or left arrays needed conversion, `UNIFUNC_CONVERT_TO_COMPILED_TYPE' has already freed the input arrays, and we only have `r' and `l' allocated in any case. Alternatively, when the inputs shouldn't be freed, the only allocated spaces are the `r' and `l' arrays if their types weren't compiled for binary operations, we can tell this from the pointers: if they are different from the original pointers, they were allocated. */ if( (flags & GAL_ARITHMETIC_FREE) && o!=in) gal_data_free(in); /* Return */ return o; } /* Call functions in the `gnuastro/statistics' library. */ static gal_data_t * arithmetic_from_statistics(int operator, int flags, gal_data_t *input) { gal_data_t *out=NULL; int ip=(flags & GAL_ARITHMETIC_INPLACE) || (flags & GAL_ARITHMETIC_FREE); switch(operator) { case GAL_ARITHMETIC_OP_MINVAL: out=gal_statistics_minimum(input); break; case GAL_ARITHMETIC_OP_MAXVAL: out=gal_statistics_maximum(input); break; case GAL_ARITHMETIC_OP_NUMVAL: out=gal_statistics_number(input); break; case GAL_ARITHMETIC_OP_SUMVAL: out=gal_statistics_sum(input); break; case GAL_ARITHMETIC_OP_MEANVAL: out=gal_statistics_mean(input); break; case GAL_ARITHMETIC_OP_STDVAL: out=gal_statistics_std(input); break; case GAL_ARITHMETIC_OP_MEDIANVAL: out=gal_statistics_median(input, ip); break; default: error(EXIT_FAILURE, 0, "%s: operator code %d not recognized", __func__, operator); } /* If the input is to be freed, then do so and return the output. */ if( flags & GAL_ARITHMETIC_FREE ) gal_data_free(input); return out; } /***********************************************************************/ /*************** Where **************/ /***********************************************************************/ /* When the `iftrue' dataset only has one element and the element is blank, then it will be replaced with the blank value of the type of the output data. */ #define DO_WHERE_OPERATION(ITT, OT) { \ ITT *it=iftrue->array; \ OT b, *o=out->array, *of=o+out->size; \ if(iftrue->size==1) \ { \ if( gal_blank_present(iftrue, 0) ) \ { \ gal_blank_write(&b, out->type); \ do { *o = *c++ ? b : *o; } while(++otype) \ { \ case GAL_TYPE_UINT8: DO_WHERE_OPERATION( uint8_t, OT); break; \ case GAL_TYPE_INT8: DO_WHERE_OPERATION( int8_t, OT); break; \ case GAL_TYPE_UINT16: DO_WHERE_OPERATION( uint16_t, OT); break; \ case GAL_TYPE_INT16: DO_WHERE_OPERATION( int16_t, OT); break; \ case GAL_TYPE_UINT32: DO_WHERE_OPERATION( uint32_t, OT); break; \ case GAL_TYPE_INT32: DO_WHERE_OPERATION( int32_t, OT); break; \ case GAL_TYPE_UINT64: DO_WHERE_OPERATION( uint64_t, OT); break; \ case GAL_TYPE_INT64: DO_WHERE_OPERATION( int64_t, OT); break; \ case GAL_TYPE_FLOAT32: DO_WHERE_OPERATION( float, OT); break; \ case GAL_TYPE_FLOAT64: DO_WHERE_OPERATION( double, OT); break; \ default: \ error(EXIT_FAILURE, 0, "%s: type code %d not recognized for the " \ "`iftrue' dataset", "WHERE_OUT_SET", iftrue->type); \ } static void arithmetic_where(int flags, gal_data_t *out, gal_data_t *cond, gal_data_t *iftrue) { unsigned char *c=cond->array; /* The condition operator has to be unsigned char. */ if(cond->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: the condition operand must be an " "`uint8' type, but the given condition operand has a " "`%s' type", __func__, gal_type_name(cond->type, 1)); /* The dimension and sizes of the out and condition data sets must be the same. */ if(gal_data_dsize_is_different(out, cond)) error(EXIT_FAILURE, 0, "%s: the output and condition data sets of the " "must be the same size", __func__); /* Do the operation. */ switch(out->type) { case GAL_TYPE_UINT8: WHERE_OUT_SET( uint8_t ); break; case GAL_TYPE_INT8: WHERE_OUT_SET( int8_t ); break; case GAL_TYPE_UINT16: WHERE_OUT_SET( uint16_t ); break; case GAL_TYPE_INT16: WHERE_OUT_SET( int16_t ); break; case GAL_TYPE_UINT32: WHERE_OUT_SET( uint32_t ); break; case GAL_TYPE_INT32: WHERE_OUT_SET( int32_t ); break; case GAL_TYPE_UINT64: WHERE_OUT_SET( uint64_t ); break; case GAL_TYPE_INT64: WHERE_OUT_SET( int64_t ); break; case GAL_TYPE_FLOAT32: WHERE_OUT_SET( float ); break; case GAL_TYPE_FLOAT64: WHERE_OUT_SET( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized for the `out'", __func__, out->type); } /* Clean up if necessary. */ if(flags & GAL_ARITHMETIC_FREE) { gal_data_free(cond); gal_data_free(iftrue); } } /***********************************************************************/ /*************** Multiple operand operators **************/ /***********************************************************************/ #define MULTIOPERAND_MIN(TYPE) { \ TYPE p, max; \ size_t n, j=0; \ gal_type_max(list->type, &max); \ do /* Loop over each pixel */ \ { \ n=0; \ p=max; \ for(i=0;itype, &min); \ do /* Loop over each pixel */ \ { \ n=0; \ p=min; \ for(i=0;i p ? a[i][j] : p; ++n; } \ } \ else { p = a[i][j] > p ? a[i][j] : p; ++n; } \ } \ *o++ = n ? p : b; /* No usable elements: set to blank. */ \ ++j; \ } \ while(otype, dnum, __func__, "pixs"); \ \ /* Loop over each pixel */ \ do \ { \ /* Initialize. */ \ n=0; \ \ /* Loop over each array. */ \ for(i=0;iarray, *of=o+out->size; \ size_t i=0; /* Different from the `i' in the main function. */ \ \ /* Allocate space to keep the pointers to the arrays of each. */ \ /* Input data structure. The operators will increment these */ \ /* pointers while parsing them. */ \ errno=0; \ a=malloc(dnum*sizeof *a); \ if(a==NULL) \ error(EXIT_FAILURE, 0, "%s: %zu bytes for `a'", \ "MULTIOPERAND_TYPE_SET", dnum*sizeof *a); \ \ /* Fill in the array pointers and the blank value for this type. */ \ gal_blank_write(&b, list->type); \ for(tmp=list;tmp!=NULL;tmp=tmp->next) \ a[i++]=tmp->array; \ \ /* Do the operation. */ \ switch(operator) \ { \ case GAL_ARITHMETIC_OP_MIN: \ MULTIOPERAND_MIN(TYPE); \ break; \ \ case GAL_ARITHMETIC_OP_MAX: \ MULTIOPERAND_MAX(TYPE); \ break; \ \ case GAL_ARITHMETIC_OP_NUM: \ MULTIOPERAND_NUM; \ break; \ \ case GAL_ARITHMETIC_OP_SUM: \ MULTIOPERAND_SUM; \ break; \ \ case GAL_ARITHMETIC_OP_MEAN: \ MULTIOPERAND_MEAN; \ break; \ \ case GAL_ARITHMETIC_OP_STD: \ MULTIOPERAND_STD; \ break; \ \ case GAL_ARITHMETIC_OP_MEDIAN: \ MULTIOPERAND_MEDIAN(TYPE, QSORT_F); \ break; \ \ default: \ error(EXIT_FAILURE, 0, "%s: operator code %d not recognized", \ "MULTIOPERAND_TYPE_SET", operator); \ } \ \ /* Clean up. */ \ free(a); \ } /* The single operator in this function is assumed to be a linked list. The number of operators is determined from the fact that the last node in the linked list must have a NULL pointer as its `next' element.*/ static gal_data_t * arithmetic_multioperand(int operator, int flags, gal_data_t *list) { uint8_t *hasblank; size_t i=0, dnum=1; gal_data_t *out, *tmp, *ttmp; /* For generality, `list' can be a NULL pointer, in that case, this function will return a NULL pointer and avoid further processing. */ if(list==NULL) return NULL; /* Do a simple sanity check, comparing the operand on top of the list to the rest of the operands within the list. */ for(tmp=list->next;tmp!=NULL;tmp=tmp->next) { /* Increment the number of structures. */ ++dnum; /* Check the types. */ if(tmp->type!=list->type) error(EXIT_FAILURE, 0, "%s: the types of all operands to the %s " "operator must be same", __func__, gal_arithmetic_operator_string(operator)); /* Check the sizes. */ if( gal_data_dsize_is_different(list, tmp) ) error(EXIT_FAILURE, 0, "%s: the sizes of all operands to the %s " "operator must be same", __func__, gal_arithmetic_operator_string(operator)); } /* Set the output data structure. */ if(flags & GAL_ARITHMETIC_INPLACE) out = list; /* The top element in the list. */ else out = gal_data_alloc(NULL, list->type, list->ndim, list->dsize, list->wcs, 0, list->minmapsize, NULL, NULL, NULL); /* hasblank is used to see if a blank value should be checked for each list element or not. */ hasblank=gal_data_malloc_array(GAL_TYPE_UINT8, dnum, __func__, "hasblank"); for(tmp=list;tmp!=NULL;tmp=tmp->next) hasblank[i++]=gal_blank_present(tmp, 0); /* Start the operation. */ switch(list->type) { case GAL_TYPE_UINT8: MULTIOPERAND_TYPE_SET(uint8_t, gal_qsort_uint8_increasing); break; case GAL_TYPE_INT8: MULTIOPERAND_TYPE_SET(int8_t, gal_qsort_int8_increasing); break; case GAL_TYPE_UINT16: MULTIOPERAND_TYPE_SET(uint16_t, gal_qsort_uint16_increasing); break; case GAL_TYPE_INT16: MULTIOPERAND_TYPE_SET(int16_t, gal_qsort_int16_increasing); break; case GAL_TYPE_UINT32: MULTIOPERAND_TYPE_SET(uint32_t, gal_qsort_uint32_increasing); break; case GAL_TYPE_INT32: MULTIOPERAND_TYPE_SET(int32_t, gal_qsort_int32_increasing); break; case GAL_TYPE_UINT64: MULTIOPERAND_TYPE_SET(uint64_t, gal_qsort_uint64_increasing); break; case GAL_TYPE_INT64: MULTIOPERAND_TYPE_SET(int64_t, gal_qsort_int64_increasing); break; case GAL_TYPE_FLOAT32: MULTIOPERAND_TYPE_SET(float, gal_qsort_float32_increasing); break; case GAL_TYPE_FLOAT64: MULTIOPERAND_TYPE_SET(double, gal_qsort_float64_increasing); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, list->type); } /* Clean up and return. Note that the operation might have been done in place. In that case, the top most list element was used. So we need to check before freeing each data structure. */ if(flags & GAL_ARITHMETIC_FREE) { tmp=list; while(tmp!=NULL) { ttmp=tmp->next; if(tmp!=out) gal_data_free(tmp); tmp=ttmp; } } free(hasblank); return out; } /**********************************************************************/ /**************** Binary operators *****************/ /**********************************************************************/ /* See if we should check for blanks. When both types are floats, blanks don't need to be checked (the floating point standard will do the job for us). It is also not necessary to check blanks in bitwise operators, but bitwise operators have their own macro (`BINARY_OP_INCR_OT_RT_LT_SET') which doesn' use `checkblanks'.*/ int gal_arithmetic_binary_checkblank(gal_data_t *l, gal_data_t *r) { return ((((l->type!=GAL_TYPE_FLOAT32 && l->type!=GAL_TYPE_FLOAT64) || (r->type!=GAL_TYPE_FLOAT32 && r->type!=GAL_TYPE_FLOAT64)) && (gal_blank_present(l, 1) || gal_blank_present(r, 1))) ? 1 : 0 ); } static int arithmetic_binary_out_type(int operator, gal_data_t *l, gal_data_t *r) { switch(operator) { case GAL_ARITHMETIC_OP_PLUS: case GAL_ARITHMETIC_OP_MINUS: case GAL_ARITHMETIC_OP_MULTIPLY: case GAL_ARITHMETIC_OP_DIVIDE: return gal_type_out(l->type, r->type); default: return GAL_TYPE_UINT8; } return -1; } static gal_data_t * arithmetic_binary(int operator, int flags, gal_data_t *l, gal_data_t *r) { /* Read the variable arguments. `lo' and `ro' keep the original data, in case their type isn't built (based on configure options are configure time). */ int32_t otype; gal_data_t *o=NULL; size_t out_size, minmapsize; /* Simple sanity check on the input sizes */ if( !( (flags & GAL_ARITHMETIC_NUMOK) && (l->size==1 || r->size==1)) && gal_data_dsize_is_different(l, r) ) error(EXIT_FAILURE, 0, "%s: the non-number inputs to %s don't have the " "same dimension/size", __func__, gal_arithmetic_operator_string(operator)); /* Set the output type. For the comparison operators, the output type is either 0 or 1, so we will set the output type to `unsigned char' for efficient memory and CPU usage. Since the number of operators without a fixed output type (like the conditionals) is less, by `default' we will set the output type to `unsigned char', and if any of the other operatrs are given, it will be chosen based on the input types.*/ otype=arithmetic_binary_out_type(operator, l, r); /* Set the output sizes. */ minmapsize = ( l->minmapsize < r->minmapsize ? l->minmapsize : r->minmapsize ); out_size = l->size > r->size ? l->size : r->size; /* If we want inplace output, set the output pointer to one input. Note that the output type can be different from both inputs. */ if(flags & GAL_ARITHMETIC_INPLACE) { if (l->type==otype && out_size==l->size) o = l; else if(r->type==otype && out_size==r->size) o = r; } /* If the output pointer was not set above for any of the possible reasons, allocate it. For `mmapsize', note that since its `size_t', it will always be positive. The `-1' that is recommended to give when you want the value in RAM is actually the largest possible memory location. So we just have to choose the smaller minmapsize of the two to decide if the output array should be in RAM or not. */ if(o==NULL) o = gal_data_alloc(NULL, otype, l->size>1 ? l->ndim : r->ndim, l->size>1 ? l->dsize : r->dsize, l->size>1 ? l->wcs : r->wcs, 0, minmapsize, NULL, NULL, NULL ); /* Call the proper function for the operator. Since they heavily involve macros, their compilation can be very large if they are in a single function and file. So there is a separate C source and header file for each of these functions. */ switch(operator) { case GAL_ARITHMETIC_OP_PLUS: arithmetic_plus(l, r, o); break; case GAL_ARITHMETIC_OP_MINUS: arithmetic_minus(l, r, o); break; case GAL_ARITHMETIC_OP_MULTIPLY: arithmetic_multiply(l, r, o); break; case GAL_ARITHMETIC_OP_DIVIDE: arithmetic_divide(l, r, o); break; case GAL_ARITHMETIC_OP_LT: arithmetic_lt(l, r, o); break; case GAL_ARITHMETIC_OP_LE: arithmetic_le(l, r, o); break; case GAL_ARITHMETIC_OP_GT: arithmetic_gt(l, r, o); break; case GAL_ARITHMETIC_OP_GE: arithmetic_ge(l, r, o); break; case GAL_ARITHMETIC_OP_EQ: arithmetic_eq(l, r, o); break; case GAL_ARITHMETIC_OP_NE: arithmetic_ne(l, r, o); break; case GAL_ARITHMETIC_OP_AND: arithmetic_and(l, r, o); break; case GAL_ARITHMETIC_OP_OR: arithmetic_or(l, r, o); break; case GAL_ARITHMETIC_OP_BITAND: arithmetic_bitand(l, r, o); break; case GAL_ARITHMETIC_OP_BITOR: arithmetic_bitor(l, r, o); break; case GAL_ARITHMETIC_OP_BITXOR: arithmetic_bitxor(l, r, o); break; case GAL_ARITHMETIC_OP_BITLSH: arithmetic_bitlsh(l, r, o); break; case GAL_ARITHMETIC_OP_BITRSH: arithmetic_bitrsh(l, r, o); break; case GAL_ARITHMETIC_OP_MODULO: arithmetic_modulo(l, r, o); break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to address " "the problem. %d is not a valid operator code", __func__, PACKAGE_BUGREPORT, operator); } /* Clean up if necessary. Note that if the operation was requested to be in place, then the output might be one of the inputs. */ if(flags & GAL_ARITHMETIC_FREE) { if (o==l) gal_data_free(r); else if(o==r) gal_data_free(l); else { gal_data_free(l); gal_data_free(r); } } /* Return */ return o; } #define BINFUNC_RUN_FUNCTION(OT, RT, LT, OP){ \ LT *la=l->array; \ RT *ra=r->array; \ OT *oa=o->array, *of=oa + o->size; \ if(l->size==r->size) do *oa = OP(*la++, *ra++); while(++oasize==1) do *oa = OP(*la, *ra++); while(++oatype) \ { \ case GAL_TYPE_FLOAT32: \ BINFUNC_RUN_FUNCTION(float, RT, LT, OP); \ break; \ case GAL_TYPE_FLOAT64: \ BINFUNC_RUN_FUNCTION(double, RT, LT, OP); \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: type %d not recognized for o->type ", \ "BINFUNC_F_OPERATOR_LEFT_RIGHT_SET", o->type); \ } #define BINFUNC_F_OPERATOR_LEFT_SET(LT, OP) \ switch(r->type) \ { \ case GAL_TYPE_FLOAT32: \ BINFUNC_F_OPERATOR_LEFT_RIGHT_SET(float, LT, OP); \ break; \ case GAL_TYPE_FLOAT64: \ BINFUNC_F_OPERATOR_LEFT_RIGHT_SET(double, LT, OP); \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: type %d not recognized for r->type", \ "BINFUNC_F_OPERATOR_LEFT_SET", r->type); \ } #define BINFUNC_F_OPERATOR_SET(OP) \ switch(l->type) \ { \ case GAL_TYPE_FLOAT32: \ BINFUNC_F_OPERATOR_LEFT_SET(float, OP); \ break; \ case GAL_TYPE_FLOAT64: \ BINFUNC_F_OPERATOR_LEFT_SET(double, OP); \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: type %d not recognized for l->type", \ "BINFUNC_F_OPERATOR_SET", l->type); \ } static gal_data_t * arithmetic_binary_function_flt(int operator, int flags, gal_data_t *l, gal_data_t *r) { int final_otype; gal_data_t *o=NULL; size_t out_size, minmapsize; /* Simple sanity check on the input sizes */ if( !( (flags & GAL_ARITHMETIC_NUMOK) && (l->size==1 || r->size==1)) && gal_data_dsize_is_different(l, r) ) error(EXIT_FAILURE, 0, "%s: the input datasets don't have the same " "dimension/size", __func__); /* Check for the types of the left and right operands. */ arithmetic_check_float_input(l, operator, "first"); arithmetic_check_float_input(r, operator, "second"); /* Set the output type. */ final_otype = gal_type_out(l->type, r->type); /* Set the output sizes. */ minmapsize = ( l->minmapsize < r->minmapsize ? l->minmapsize : r->minmapsize ); out_size = l->size > r->size ? l->size : r->size; /* If we want inplace output, set the output pointer to one input. Note that the output type can be different from both inputs. */ if(flags & GAL_ARITHMETIC_INPLACE) { if (l->type==final_otype && out_size==l->size) o = l; else if(r->type==final_otype && out_size==r->size) o = r; } /* If the output pointer was not set for any reason, allocate it. For `mmapsize', note that since its `size_t', it will always be Positive. The `-1' that is recommended to give when you want the value in RAM is actually the largest possible memory location. So we just have to choose the smaller minmapsize of the two to decide if the output array should be in RAM or not. */ if(o==NULL) o = gal_data_alloc(NULL, final_otype, l->size>1 ? l->ndim : r->ndim, l->size>1 ? l->dsize : r->dsize, l->size>1 ? l->wcs : r->wcs, 0, minmapsize, NULL, NULL, NULL); /* Start setting the operator and operands. */ switch(operator) { case GAL_ARITHMETIC_OP_POW: BINFUNC_F_OPERATOR_SET( pow ); break; default: error(EXIT_FAILURE, 0, "%s: operator code %d not recognized", __func__, operator); } /* Clean up. Note that if the input arrays can be freed, and any of right or left arrays needed conversion, `BINFUNC_CONVERT_TO_COMPILED_TYPE' has already freed the input arrays, and we only have `r' and `l' allocated in any case. Alternatively, when the inputs shouldn't be freed, the only allocated spaces are the `r' and `l' arrays if their types weren't compiled for binary operations, we can tell this from the pointers: if they are different from the original pointers, they were allocated. */ if(flags & GAL_ARITHMETIC_FREE) { if (o==l) gal_data_free(r); else if(o==r) gal_data_free(l); else { gal_data_free(l); gal_data_free(r); } } /* Return */ return o; } /**********************************************************************/ /**************** High-level functions *****************/ /**********************************************************************/ char * gal_arithmetic_operator_string(int operator) { switch(operator) { case GAL_ARITHMETIC_OP_PLUS: return "+"; case GAL_ARITHMETIC_OP_MINUS: return "-"; case GAL_ARITHMETIC_OP_MULTIPLY: return "*"; case GAL_ARITHMETIC_OP_DIVIDE: return "/"; case GAL_ARITHMETIC_OP_MODULO: return "%"; case GAL_ARITHMETIC_OP_LT: return "<"; case GAL_ARITHMETIC_OP_LE: return "<="; case GAL_ARITHMETIC_OP_GT: return ">"; case GAL_ARITHMETIC_OP_GE: return ">="; case GAL_ARITHMETIC_OP_EQ: return "=="; case GAL_ARITHMETIC_OP_NE: return "!="; case GAL_ARITHMETIC_OP_AND: return "and"; case GAL_ARITHMETIC_OP_OR: return "or"; case GAL_ARITHMETIC_OP_NOT: return "not"; case GAL_ARITHMETIC_OP_ISBLANK: return "isblank"; case GAL_ARITHMETIC_OP_WHERE: return "where"; case GAL_ARITHMETIC_OP_BITAND: return "bitand"; case GAL_ARITHMETIC_OP_BITOR: return "bitor"; case GAL_ARITHMETIC_OP_BITXOR: return "bitxor"; case GAL_ARITHMETIC_OP_BITLSH: return "lshift"; case GAL_ARITHMETIC_OP_BITRSH: return "rshift"; case GAL_ARITHMETIC_OP_BITNOT: return "bitnot"; case GAL_ARITHMETIC_OP_ABS: return "abs"; case GAL_ARITHMETIC_OP_POW: return "pow"; case GAL_ARITHMETIC_OP_SQRT: return "sqrt"; case GAL_ARITHMETIC_OP_LOG: return "log"; case GAL_ARITHMETIC_OP_LOG10: return "log10"; case GAL_ARITHMETIC_OP_MINVAL: return "minvalue"; case GAL_ARITHMETIC_OP_MAXVAL: return "maxvalue"; case GAL_ARITHMETIC_OP_NUMVAL: return "numvalue"; case GAL_ARITHMETIC_OP_SUMVAL: return "sumvalue"; case GAL_ARITHMETIC_OP_MEANVAL: return "meanvalue"; case GAL_ARITHMETIC_OP_STDVAL: return "stdvalue"; case GAL_ARITHMETIC_OP_MEDIANVAL: return "medianvalue"; case GAL_ARITHMETIC_OP_MIN: return "min"; case GAL_ARITHMETIC_OP_MAX: return "max"; case GAL_ARITHMETIC_OP_NUM: return "num"; case GAL_ARITHMETIC_OP_SUM: return "sum"; case GAL_ARITHMETIC_OP_MEAN: return "mean"; case GAL_ARITHMETIC_OP_STD: return "std"; case GAL_ARITHMETIC_OP_MEDIAN: return "median"; case GAL_ARITHMETIC_OP_TO_UINT8: return "uchar"; case GAL_ARITHMETIC_OP_TO_INT8: return "char"; case GAL_ARITHMETIC_OP_TO_UINT16: return "ushort"; case GAL_ARITHMETIC_OP_TO_INT16: return "short"; case GAL_ARITHMETIC_OP_TO_UINT32: return "uint"; case GAL_ARITHMETIC_OP_TO_INT32: return "int"; case GAL_ARITHMETIC_OP_TO_UINT64: return "ulong"; case GAL_ARITHMETIC_OP_TO_INT64: return "long"; case GAL_ARITHMETIC_OP_TO_FLOAT32: return "float32"; case GAL_ARITHMETIC_OP_TO_FLOAT64: return "float64"; default: error(EXIT_FAILURE, 0, "%s: operator code %d not recognized", __func__, operator); } error(EXIT_FAILURE, 0, "%s: a bug! Please contact us to fix the problem. " "Control has reached the end of this function. This should not have " "happened", __func__); return NULL; } gal_data_t * gal_arithmetic(int operator, int flags, ...) { va_list va; gal_data_t *d1, *d2, *d3, *out=NULL; /* Prepare the variable arguments (starting after the flags argument). */ va_start(va, flags); /* Depending on the operator do the job: */ switch(operator) { /* Binary operators with any data type. */ case GAL_ARITHMETIC_OP_PLUS: case GAL_ARITHMETIC_OP_MINUS: case GAL_ARITHMETIC_OP_MULTIPLY: case GAL_ARITHMETIC_OP_DIVIDE: case GAL_ARITHMETIC_OP_LT: case GAL_ARITHMETIC_OP_LE: case GAL_ARITHMETIC_OP_GT: case GAL_ARITHMETIC_OP_GE: case GAL_ARITHMETIC_OP_EQ: case GAL_ARITHMETIC_OP_NE: case GAL_ARITHMETIC_OP_AND: case GAL_ARITHMETIC_OP_OR: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_binary(operator, flags, d1, d2); break; case GAL_ARITHMETIC_OP_NOT: d1 = va_arg(va, gal_data_t *); out=arithmetic_not(d1, flags); break; case GAL_ARITHMETIC_OP_ISBLANK: d1 = va_arg(va, gal_data_t *); out = gal_blank_flag(d1); if(flags & GAL_ARITHMETIC_FREE) gal_data_free(d1); break; case GAL_ARITHMETIC_OP_WHERE: d1 = va_arg(va, gal_data_t *); /* To modify value/array. */ d2 = va_arg(va, gal_data_t *); /* Condition (unsigned char). */ d3 = va_arg(va, gal_data_t *); /* If true value/array. */ arithmetic_where(flags, d1, d2, d3); out=d1; break; /* Unary function operators. */ case GAL_ARITHMETIC_OP_SQRT: case GAL_ARITHMETIC_OP_LOG: case GAL_ARITHMETIC_OP_LOG10: d1 = va_arg(va, gal_data_t *); out=arithmetic_unary_function(operator, flags, d1); break; /* Statistical operators that return one value. */ case GAL_ARITHMETIC_OP_MINVAL: case GAL_ARITHMETIC_OP_MAXVAL: case GAL_ARITHMETIC_OP_NUMVAL: case GAL_ARITHMETIC_OP_SUMVAL: case GAL_ARITHMETIC_OP_MEANVAL: case GAL_ARITHMETIC_OP_STDVAL: case GAL_ARITHMETIC_OP_MEDIANVAL: d1 = va_arg(va, gal_data_t *); out=arithmetic_from_statistics(operator, flags, d1); break; /* Absolute operator */ case GAL_ARITHMETIC_OP_ABS: d1 = va_arg(va, gal_data_t *); out=arithmetic_abs(flags, d1); break; /* Multi-operand operators */ case GAL_ARITHMETIC_OP_MIN: case GAL_ARITHMETIC_OP_MAX: case GAL_ARITHMETIC_OP_NUM: case GAL_ARITHMETIC_OP_SUM: case GAL_ARITHMETIC_OP_MEAN: case GAL_ARITHMETIC_OP_STD: case GAL_ARITHMETIC_OP_MEDIAN: d1 = va_arg(va, gal_data_t *); out=arithmetic_multioperand(operator, flags, d1); break; /* Binary function operators. */ case GAL_ARITHMETIC_OP_POW: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_binary_function_flt(operator, flags, d1, d2); break; /* Binary operators that only work on integer types. */ case GAL_ARITHMETIC_OP_BITAND: case GAL_ARITHMETIC_OP_BITOR: case GAL_ARITHMETIC_OP_BITXOR: case GAL_ARITHMETIC_OP_BITLSH: case GAL_ARITHMETIC_OP_BITRSH: case GAL_ARITHMETIC_OP_MODULO: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_binary(operator, flags, d1, d2); break; case GAL_ARITHMETIC_OP_BITNOT: d1 = va_arg(va, gal_data_t *); out=arithmetic_bitwise_not(flags, d1); break; /* Conversion operators. */ case GAL_ARITHMETIC_OP_TO_UINT8: case GAL_ARITHMETIC_OP_TO_INT8: case GAL_ARITHMETIC_OP_TO_UINT16: case GAL_ARITHMETIC_OP_TO_INT16: case GAL_ARITHMETIC_OP_TO_UINT32: case GAL_ARITHMETIC_OP_TO_INT32: case GAL_ARITHMETIC_OP_TO_UINT64: case GAL_ARITHMETIC_OP_TO_INT64: case GAL_ARITHMETIC_OP_TO_FLOAT32: case GAL_ARITHMETIC_OP_TO_FLOAT64: d1 = va_arg(va, gal_data_t *); out=arithmetic_change_type(d1, operator, flags); break; /* When the operator is not recognized. */ default: error(EXIT_FAILURE, 0, "%s: the argument \"%d\" could not be " "interpretted as an operator", __func__, operator); } /* End the variable argument structure and return. */ va_end(va); return out; } gnuastro-0.5/lib/Makefile.in0000644000175000017500000023503613217217706012773 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ subdir = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libgnuastro_la_DEPENDENCIES = \ $(top_builddir)/bootstrapped/lib/libgnu.la am_libgnuastro_la_OBJECTS = arithmetic.lo arithmetic-and.lo \ arithmetic-bitand.lo arithmetic-bitlsh.lo arithmetic-bitor.lo \ arithmetic-bitrsh.lo arithmetic-bitxor.lo arithmetic-divide.lo \ arithmetic-eq.lo arithmetic-ge.lo arithmetic-gt.lo \ arithmetic-le.lo arithmetic-lt.lo arithmetic-minus.lo \ arithmetic-modulo.lo arithmetic-multiply.lo arithmetic-ne.lo \ arithmetic-or.lo arithmetic-plus.lo binary.lo blank.lo box.lo \ checkset.lo convolve.lo cosmology.lo data.lo fits.lo git.lo \ interpolate.lo list.lo match.lo options.lo permutation.lo \ polygon.lo qsort.lo dimension.lo statistics.lo table.lo \ tableintern.lo threads.lo tile.lo timing.lo txt.lo type.lo \ wcs.lo libgnuastro_la_OBJECTS = $(am_libgnuastro_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 = libgnuastro_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libgnuastro_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)/bootstrapped/build-aux/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 = $(libgnuastro_la_SOURCES) DIST_SOURCES = $(libgnuastro_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(pkgconfig_DATA) HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib \ -DSYSCONFIG_DIR=\"$(sysconfdir)\" # Define the main compiled library file, its Libtool version and also link # with Gnulib's compiled library for this system. We are doing this so the # Gnuastro library functions can also benefit from Gnulib's many great # features. This also avoids the need for the programs to link separately # with Gnulib, they only need to link with the Gnuastro library. lib_LTLIBRARIES = libgnuastro.la libgnuastro_la_LDFLAGS = -version-info $(GAL_LT_VERSION) libgnuastro_la_LIBADD = $(top_builddir)/bootstrapped/lib/libgnu.la # Specify the library .c files libgnuastro_la_SOURCES = arithmetic.c arithmetic-and.c arithmetic-bitand.c \ arithmetic-bitlsh.c arithmetic-bitor.c arithmetic-bitrsh.c \ arithmetic-bitxor.c arithmetic-divide.c arithmetic-eq.c arithmetic-ge.c \ arithmetic-gt.c arithmetic-le.c arithmetic-lt.c arithmetic-minus.c \ arithmetic-modulo.c arithmetic-multiply.c arithmetic-ne.c \ arithmetic-or.c arithmetic-plus.c binary.c blank.c box.c checkset.c \ convolve.c cosmology.c data.c fits.c git.c interpolate.c list.c match.c \ options.c permutation.c polygon.c qsort.c dimension.c statistics.c \ table.c tableintern.c threads.c tile.c timing.c txt.c type.c wcs.c # Installed headers, note that we are not blindly including all `.h' files # in the $(headersdir) directory. Some of the header files don't need to be # installed. headersdir = $(top_srcdir)/lib/gnuastro pkginclude_HEADERS = gnuastro/config.h $(headersdir)/arithmetic.h \ $(headersdir)/binary.h $(headersdir)/blank.h $(headersdir)/box.h \ $(headersdir)/convolve.h $(headersdir)/cosmology.h $(headersdir)/data.h \ $(headersdir)/dimension.h $(headersdir)/fits.h $(headersdir)/git.h \ $(headersdir)/interpolate.h $(headersdir)/list.h $(headersdir)/match.h \ $(headersdir)/permutation.h $(headersdir)/polygon.h \ $(headersdir)/qsort.h $(headersdir)/statistics.h $(headersdir)/table.h \ $(headersdir)/threads.h $(headersdir)/tile.h $(headersdir)/txt.h \ $(headersdir)/type.h $(headersdir)/wcs.h # Files to distribute in the tarball. These are internal headers and don't # need to be installed. Headers are only mentioned within the source files, # and if they are not explicitly mentioned somewhere in the Makefile, they # will not distributed, so we need to explicitly tell Automake to # distribute them here. internaldir = $(top_srcdir)/lib/gnuastro-internal EXTRA_DIST = gnuastro.pc.in $(headersdir)/README $(internaldir)/README \ $(internaldir)/arithmetic-and.h $(internaldir)/arithmetic-binary.h \ $(internaldir)/arithmetic-bitand.h $(internaldir)/arithmetic-bitlsh.h \ $(internaldir)/arithmetic-bitor.h $(internaldir)/arithmetic-bitrsh.h \ $(internaldir)/arithmetic-bitxor.h $(internaldir)/arithmetic-divide.h \ $(internaldir)/arithmetic-eq.h $(internaldir)/arithmetic-ge.h \ $(internaldir)/arithmetic-gt.h $(internaldir)/arithmetic-internal.h \ $(internaldir)/arithmetic-le.h $(internaldir)/arithmetic-lt.h \ $(internaldir)/arithmetic-minus.h $(internaldir)/arithmetic-modulo.h \ $(internaldir)/arithmetic-multiply.h $(internaldir)/arithmetic-ne.h \ $(internaldir)/arithmetic-or.h $(internaldir)/arithmetic-plus.h \ $(internaldir)/checkset.h $(internaldir)/commonopts.h \ $(internaldir)/config.h.in $(internaldir)/fixedstringmacros.h \ $(internaldir)/options.h $(internaldir)/tableintern.h \ $(internaldir)/timing.h # Definitions for Gnuastro's the pkg-config file (inspired from GSL's # Makefile.am) pkgconfig_DATA = gnuastro.pc pkgconfigdir = $(libdir)/pkgconfig CLEANFILES = gnuastro.pc gnuastro/config.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu lib/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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}; \ } libgnuastro.la: $(libgnuastro_la_OBJECTS) $(libgnuastro_la_DEPENDENCIES) $(EXTRA_libgnuastro_la_DEPENDENCIES) $(AM_V_CCLD)$(libgnuastro_la_LINK) -rpath $(libdir) $(libgnuastro_la_OBJECTS) $(libgnuastro_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-and.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-bitand.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-bitlsh.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-bitor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-bitrsh.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-bitxor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-divide.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-eq.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-ge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-gt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-le.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-lt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-minus.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-modulo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-multiply.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-ne.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-or.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-plus.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binary.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blank.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/box.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolve.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cosmology.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/data.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dimension.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fits.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/git.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interpolate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/match.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permutation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polygon.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qsort.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statistics.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tableintern.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threads.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/txt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcs.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-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) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || 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)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -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." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgconfigDATA install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgconfigDATA \ uninstall-pkgincludeHEADERS .MAKE: install-am install-exec-am install-strip .PHONY: 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-exec-hook install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-pkgconfigDATA \ install-pkgincludeHEADERS install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-libLTLIBRARIES uninstall-pkgconfigDATA \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Build `gnuastro/config.h' based on the information in the Makefile after # the Makefile has been built. gnuastro/config.h: Makefile $(internaldir)/config.h.in rm -f $@ $@.tmp $(MKDIR_P) gnuastro $(SED) -e 's|@VERSION[@]|$(VERSION)|g' \ -e 's|@HAVE_LIBGIT2[@]|$(HAVE_LIBGIT2)|g' \ -e 's|@HAVE_WCSLIB_VERSION[@]|$(HAVE_WCSLIB_VERSION)|g' \ -e 's|@HAVE_PTHREAD_BARRIER[@]|$(HAVE_PTHREAD_BARRIER)|g' \ -e 's|@SIZEOF_LONG[@]|$(SIZEOF_LONG)|g' \ -e 's|@SIZEOF_SIZE_T[@]|$(SIZEOF_SIZE_T)|g' \ -e 's|@RESTRICT_REPLACEMENT[@]|$(RESTRICT_REPLACEMENT)|g' \ $(internaldir)/config.h.in >> $@.tmp chmod a-w $@.tmp mv $@.tmp $@ # Build Gnuastro's pkg-config file similar to `gnuastro/config.h'. gnuastro.pc: Makefile $(srcdir)/gnuastro.pc.in rm -f $@ $@.tmp $(SED) \ -e 's|@prefix[@]|$(prefix)|g' \ -e 's|@exec_prefix[@]|$(exec_prefix)|g' \ -e 's|@libdir[@]|$(libdir)|g' \ -e 's|@includedir[@]|$(includedir)|g' \ -e 's|@LIBS[@]|$(LIBS)|g' \ -e 's|@VERSION[@]|$(VERSION)|g' \ '$(srcdir)/$@.in' >> $@.tmp chmod a-w $@.tmp mv $@.tmp $@ # Remove the two local directories we needed during installation from the # library search paths of the installed `libgnuastro.la'. # # Note that this hook is executed after every installation command # (including `make uninstall'). So we should only do it if the library # actually exists. install-exec-hook: if [ -f $(libdir)/libgnuastro.la ]; then \ $(SED) -e 's/ -L..\/lib//g' -e 's/ -L..\/..\/lib//g' \ $(libdir)/libgnuastro.la > libgnuastro.la_tmp; \ mv libgnuastro.la_tmp $(libdir)/libgnuastro.la; \ 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: gnuastro-0.5/lib/Makefile.am0000644000175000017500000001535713215601241012751 00000000000000## Process this file with automake to produce Makefile.in ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary flags. ## ## $(top_srcdir)/bootstrapped/lib: only necessary for the libraries since ## the Gnulib functions will be statically linked to the Gnuastro ## library so linking to Gnuastro is enough to access them also. ## ## SYSCONFIG_DIR: only necessary in `options.c' to get the system ## installation directory. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib \ -DSYSCONFIG_DIR=\"$(sysconfdir)\" # Define the main compiled library file, its Libtool version and also link # with Gnulib's compiled library for this system. We are doing this so the # Gnuastro library functions can also benefit from Gnulib's many great # features. This also avoids the need for the programs to link separately # with Gnulib, they only need to link with the Gnuastro library. lib_LTLIBRARIES = libgnuastro.la libgnuastro_la_LDFLAGS = -version-info $(GAL_LT_VERSION) libgnuastro_la_LIBADD = $(top_builddir)/bootstrapped/lib/libgnu.la # Specify the library .c files libgnuastro_la_SOURCES = arithmetic.c arithmetic-and.c arithmetic-bitand.c \ arithmetic-bitlsh.c arithmetic-bitor.c arithmetic-bitrsh.c \ arithmetic-bitxor.c arithmetic-divide.c arithmetic-eq.c arithmetic-ge.c \ arithmetic-gt.c arithmetic-le.c arithmetic-lt.c arithmetic-minus.c \ arithmetic-modulo.c arithmetic-multiply.c arithmetic-ne.c \ arithmetic-or.c arithmetic-plus.c binary.c blank.c box.c checkset.c \ convolve.c cosmology.c data.c fits.c git.c interpolate.c list.c match.c \ options.c permutation.c polygon.c qsort.c dimension.c statistics.c \ table.c tableintern.c threads.c tile.c timing.c txt.c type.c wcs.c # Installed headers, note that we are not blindly including all `.h' files # in the $(headersdir) directory. Some of the header files don't need to be # installed. headersdir=$(top_srcdir)/lib/gnuastro pkginclude_HEADERS = gnuastro/config.h $(headersdir)/arithmetic.h \ $(headersdir)/binary.h $(headersdir)/blank.h $(headersdir)/box.h \ $(headersdir)/convolve.h $(headersdir)/cosmology.h $(headersdir)/data.h \ $(headersdir)/dimension.h $(headersdir)/fits.h $(headersdir)/git.h \ $(headersdir)/interpolate.h $(headersdir)/list.h $(headersdir)/match.h \ $(headersdir)/permutation.h $(headersdir)/polygon.h \ $(headersdir)/qsort.h $(headersdir)/statistics.h $(headersdir)/table.h \ $(headersdir)/threads.h $(headersdir)/tile.h $(headersdir)/txt.h \ $(headersdir)/type.h $(headersdir)/wcs.h # Files to distribute in the tarball. These are internal headers and don't # need to be installed. Headers are only mentioned within the source files, # and if they are not explicitly mentioned somewhere in the Makefile, they # will not distributed, so we need to explicitly tell Automake to # distribute them here. internaldir=$(top_srcdir)/lib/gnuastro-internal EXTRA_DIST = gnuastro.pc.in $(headersdir)/README $(internaldir)/README \ $(internaldir)/arithmetic-and.h $(internaldir)/arithmetic-binary.h \ $(internaldir)/arithmetic-bitand.h $(internaldir)/arithmetic-bitlsh.h \ $(internaldir)/arithmetic-bitor.h $(internaldir)/arithmetic-bitrsh.h \ $(internaldir)/arithmetic-bitxor.h $(internaldir)/arithmetic-divide.h \ $(internaldir)/arithmetic-eq.h $(internaldir)/arithmetic-ge.h \ $(internaldir)/arithmetic-gt.h $(internaldir)/arithmetic-internal.h \ $(internaldir)/arithmetic-le.h $(internaldir)/arithmetic-lt.h \ $(internaldir)/arithmetic-minus.h $(internaldir)/arithmetic-modulo.h \ $(internaldir)/arithmetic-multiply.h $(internaldir)/arithmetic-ne.h \ $(internaldir)/arithmetic-or.h $(internaldir)/arithmetic-plus.h \ $(internaldir)/checkset.h $(internaldir)/commonopts.h \ $(internaldir)/config.h.in $(internaldir)/fixedstringmacros.h \ $(internaldir)/options.h $(internaldir)/tableintern.h \ $(internaldir)/timing.h # Definitions for Gnuastro's the pkg-config file (inspired from GSL's # Makefile.am) pkgconfig_DATA = gnuastro.pc pkgconfigdir = $(libdir)/pkgconfig CLEANFILES = gnuastro.pc gnuastro/config.h # Build `gnuastro/config.h' based on the information in the Makefile after # the Makefile has been built. gnuastro/config.h: Makefile $(internaldir)/config.h.in rm -f $@ $@.tmp $(MKDIR_P) gnuastro $(SED) -e 's|@VERSION[@]|$(VERSION)|g' \ -e 's|@HAVE_LIBGIT2[@]|$(HAVE_LIBGIT2)|g' \ -e 's|@HAVE_WCSLIB_VERSION[@]|$(HAVE_WCSLIB_VERSION)|g' \ -e 's|@HAVE_PTHREAD_BARRIER[@]|$(HAVE_PTHREAD_BARRIER)|g' \ -e 's|@SIZEOF_LONG[@]|$(SIZEOF_LONG)|g' \ -e 's|@SIZEOF_SIZE_T[@]|$(SIZEOF_SIZE_T)|g' \ -e 's|@RESTRICT_REPLACEMENT[@]|$(RESTRICT_REPLACEMENT)|g' \ $(internaldir)/config.h.in >> $@.tmp chmod a-w $@.tmp mv $@.tmp $@ # Build Gnuastro's pkg-config file similar to `gnuastro/config.h'. gnuastro.pc: Makefile $(srcdir)/gnuastro.pc.in rm -f $@ $@.tmp $(SED) \ -e 's|@prefix[@]|$(prefix)|g' \ -e 's|@exec_prefix[@]|$(exec_prefix)|g' \ -e 's|@libdir[@]|$(libdir)|g' \ -e 's|@includedir[@]|$(includedir)|g' \ -e 's|@LIBS[@]|$(LIBS)|g' \ -e 's|@VERSION[@]|$(VERSION)|g' \ '$(srcdir)/$@.in' >> $@.tmp chmod a-w $@.tmp mv $@.tmp $@ # Remove the two local directories we needed during installation from the # library search paths of the installed `libgnuastro.la'. # # Note that this hook is executed after every installation command # (including `make uninstall'). So we should only do it if the library # actually exists. install-exec-hook: if [ -f $(libdir)/libgnuastro.la ]; then \ $(SED) -e 's/ -L..\/lib//g' -e 's/ -L..\/..\/lib//g' \ $(libdir)/libgnuastro.la > libgnuastro.la_tmp; \ mv libgnuastro.la_tmp $(libdir)/libgnuastro.la; \ fi gnuastro-0.5/lib/gnuastro-internal/0000755000175000017500000000000013217220466014446 500000000000000gnuastro-0.5/lib/gnuastro-internal/timing.h0000644000175000017500000000357113121462410016023 00000000000000/********************************************************************* Functions to report timing in verbose mode. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_TIMING_H__ #define __GAL_TIMING_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ #define GAL_TIMING_VERB_MSG_LENGTH_V 50 #define GAL_TIMING_VERB_MSG_LENGTHS_2_V 65 long gal_timing_time_based_rng_seed(); void gal_timing_report(struct timeval *t1, char *jobname, size_t level); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TIMING_H__ */ gnuastro-0.5/lib/gnuastro-internal/tableintern.h0000644000175000017500000000605113121462410017037 00000000000000/********************************************************************* tableintern -- Internalfunctions for table input and output. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_TABLEINTERN_H__ #define __GAL_TABLEINTERN_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* Includes `gnuastro/data.h' and `fitsio.h' */ #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /************************************************************************/ /*************** Error messages ***************/ /************************************************************************/ void gal_tableintern_error_col_selection(char *filename, char *hdu, char *errorstring); /************************************************************************/ /*************** Formats ***************/ /************************************************************************/ uint8_t gal_tableintern_string_to_format(char *string); char * gal_tableintern_format_as_string(uint8_t tableformat); uint8_t gal_tableintern_string_to_searchin(char *string); char * gal_tableintern_searchin_as_string(uint8_t searchin); void gal_tableintern_check_fits_format(char *filename, int tableformat); /************************************************************************/ /*************** Printing information ***************/ /************************************************************************/ void gal_tableintern_col_print_info(gal_data_t *col, int tableformat, char *fmt, char *lng); void gal_tableintern_read_blank(gal_data_t *col, char *blank); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TABLE_H__ */ gnuastro-0.5/lib/gnuastro-internal/options.h0000644000175000017500000002607313216276304016243 00000000000000/********************************************************************* Function to parse options and configuration file values. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_OPTIONS_H__ #define __GAL_OPTIONS_H__ #include #include #include /**********************************************************************/ /************ Common options ***************/ /**********************************************************************/ /* Type for options that don't accept an argument/value. This macro is defined to help make the definition and processing of these options easier and less buggy. Please use this macro for such options. */ #define GAL_OPTIONS_NO_ARG_TYPE GAL_TYPE_UINT8 /* When printing the option names, values and comments, we want things to be clean and readable (all the comments starting on one line for most, ideally all, lines). But in some cases, option values can become too long (for example the `--polygon' option in Crop, which takes many coordinates). So simply using the maximum option length is going to make the whole thing unreadable and we need to have a maximum so this rule only applies to them. */ #define GAL_OPTIONS_MAX_VALUE_LEN 10 /* Statically allocated space for printing option values. */ #define GAL_OPTIONS_STATIC_MEM_FOR_VALUES 2000 /* Standard groups of options. From the Argp manual (in GNU C Library): "In a long help message, options are sorted alphabetically within each group, and the groups presented in the order 0, 1, 2, ..., N, -M, ..., -2, -1." We want the Operating mode group of options to be the last and the input and output groups to the be the first. So first we set the operating mdoe group code to `-1', and benefit from the definition of the Enumerator type in C, so each field afterwards will be one integer larger than the previous. The largest common option group is then used to build the codes of program-specific option groups. */ enum options_standard_groups { GAL_OPTIONS_GROUP_OPERATING_MODE = -1, GAL_OPTIONS_GROUP_INPUT=1, GAL_OPTIONS_GROUP_TESSELLATION, GAL_OPTIONS_GROUP_OUTPUT, GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Key values for the common options, the free alphabetical keys are listed below. You can use any of the free letters for an option in a program. Note that `-V', which is used by GNU and implemented by Argp, is also removed from this list. a b c d e f g i j k l m n p r s t u v w x y z A B C E G H J L O Q R W X Y */ enum options_common_keys { /* With short-option version */ GAL_OPTIONS_KEY_HDU = 'h', GAL_OPTIONS_KEY_OUTPUT = 'o', GAL_OPTIONS_KEY_TYPE = 'T', GAL_OPTIONS_KEY_DONTDELETE = 'D', GAL_OPTIONS_KEY_KEEPINPUTDIR = 'K', GAL_OPTIONS_KEY_QUIET = 'q', GAL_OPTIONS_KEY_NUMTHREADS = 'N', GAL_OPTIONS_KEY_PRINTPARAMS = 'P', GAL_OPTIONS_KEY_SETDIRCONF = 'S', GAL_OPTIONS_KEY_SETUSRCONF = 'U', GAL_OPTIONS_KEY_IGNORECASE = 'I', GAL_OPTIONS_KEY_TILESIZE = 'Z', GAL_OPTIONS_KEY_NUMCHANNELS = 'M', GAL_OPTIONS_KEY_REMAINDERFRAC = 'F', /* Only long option (integers for keywords). */ GAL_OPTIONS_KEY_MINMAPSIZE = 500, GAL_OPTIONS_KEY_LOG, GAL_OPTIONS_KEY_CITE, GAL_OPTIONS_KEY_CONFIG, GAL_OPTIONS_KEY_SEARCHIN, GAL_OPTIONS_KEY_LASTCONFIG, GAL_OPTIONS_KEY_TABLEFORMAT, GAL_OPTIONS_KEY_ONLYVERSION, GAL_OPTIONS_KEY_WORKOVERCH, GAL_OPTIONS_KEY_CHECKTILES, GAL_OPTIONS_KEY_ONEELEMPERTILE, GAL_OPTIONS_KEY_INTERPONLYBLANK, GAL_OPTIONS_KEY_INTERPNUMNGB, }; /* Conditions to check */ enum gal_options_range_values { GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_RANGE_GE_0_LT_1, GAL_OPTIONS_RANGE_GT_0_LT_1, GAL_OPTIONS_RANGE_GT_0_ODD, GAL_OPTIONS_RANGE_0_OR_ODD, }; /* What to do if option isn't given. Note that in each program's `main.c' the main program structure is initialized to zero (or NULL for pointers). */ enum gal_options_mandatory_values { GAL_OPTIONS_NOT_MANDATORY, /* =0 in C standard. */ GAL_OPTIONS_MANDATORY, }; /* If the option has already been given a value or not. */ enum gal_options_set_values { GAL_OPTIONS_NOT_SET, /* =0 in C standard. */ GAL_OPTIONS_SET, }; /* The structure keeping all the values of the common options in Gnuastro's programs. */ struct gal_options_common_params { /* Tessellation. */ struct gal_tile_two_layer_params tl; /* Two layer tessellation params. */ uint8_t interponlyblank; /* Only interpolate over blank values. */ size_t interpnumngb; /* Number of neighbors for interpolation. */ /* Input. */ char *hdu; /* Image extension. */ uint8_t searchin; /* Column meta-data to match/search. */ uint8_t ignorecase; /* Ignore case when matching col info. */ /* Output. */ char *output; /* Directory containg output. */ uint8_t type; /* Data type of output. */ uint8_t dontdelete; /* ==1: Don't delete existing file. */ uint8_t keepinputdir; /* Keep input directory for auto output. */ uint8_t tableformat; /* Internal code for output table format. */ /* Operating modes. */ uint8_t quiet; /* Only print errors. */ size_t numthreads; /* Number of threads to use. */ size_t minmapsize; /* Minimum bytes necessary to use mmap. */ uint8_t log; /* Make a log file. */ /* Configuration files. */ uint8_t printparams; /* To print the full list of parameters. */ uint8_t setdirconf; /* To write the directory config file. */ uint8_t setusrconf; /* To write teh user config config file. */ uint8_t lastconfig; /* This is the last configuration file. */ /* For internal (to option processing) purposes. */ uint8_t keep; /* Output file can exist. */ void *program_struct; /* Host program's main variable struct. */ char *program_name; /* Official name to be used in text. */ char *program_exec; /* Program's executable name. */ char *program_bibtex; /* BibTeX record for this program. */ char *program_authors; /* List of the program authors. */ struct argp_option *coptions; /* Common options to all programs. */ struct argp_option *poptions; /* Program specific options. */ gal_list_i32_t *mand_common; /* Common mandatory options. */ gal_list_str_t *novalue_doc; /* Mandatory opts, no value */ gal_list_str_t *novalue_name; /* Mandatory opts, no value */ }; /**********************************************************************/ /************ Option utilities ***************/ /**********************************************************************/ int gal_options_is_last(struct argp_option *option); int gal_options_is_category_title(struct argp_option *option); void gal_options_add_to_not_given(struct gal_options_common_params *cp, struct argp_option *option); void gal_options_abort_if_mandatory_missing(struct gal_options_common_params *cp); /**********************************************************************/ /************ Parser functions for common options ***************/ /**********************************************************************/ void * gal_options_check_version(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_print_citation(struct argp_option *option, char *arg, char *filename, size_t lineno, void *pa); void * gal_options_read_type(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_read_searchin(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_read_tableformat(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); gal_data_t * gal_options_parse_list_of_numbers(char *string, char *filename, size_t lineno); gal_data_t * gal_options_parse_csv_strings_raw(char *string, char *filename, size_t lineno); void * gal_options_parse_csv_strings(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_parse_sizes_reverse(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params); void * gal_options_parse_csv_float64(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_read_sigma_clip(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); /**********************************************************************/ /************ Command-line options ***************/ /**********************************************************************/ error_t gal_options_set_from_key(int key, char *arg, struct argp_option *options, struct gal_options_common_params *cp); error_t gal_options_common_argp_parse(int key, char *arg, struct argp_state *state); /**********************************************************************/ /************ Configuration files ***************/ /**********************************************************************/ void * gal_options_call_parse_config_file(struct argp_option *option, char *arg, char *filename, size_t lineno, void *cp); void gal_options_read_config_set(struct gal_options_common_params *cp); /**********************************************************************/ /************ Printing/Writing ***************/ /**********************************************************************/ void gal_options_print_state(struct gal_options_common_params *cp); #endif gnuastro-0.5/lib/gnuastro-internal/fixedstringmacros.h0000644000175000017500000000611213121462410020261 00000000000000/********************************************************************* Fixed strings for use in all utilities. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_FIXEDSTRINGMACROS_H__ #define __GAL_FIXEDSTRINGMACROS_H__ #define GAL_STRINGS_SHORT_COPYRIGHT \ "Copyright (C) 2015-2017, Free Software Foundation, Inc." #define GAL_STRINGS_SHORT_LICENSE \ "License GPLv3+: GNU General public license version 3 or later." #define GAL_STRINGS_COPYRIGHT \ GAL_STRINGS_SHORT_COPYRIGHT"\n"GAL_STRINGS_SHORT_LICENSE"\n" \ "This is free software: you are free to change and redistribute " \ "it.\nThere is NO WARRANTY, to the extent permitted by law." \ #define GAL_STRINGS_TOP_HELP_INFO \ "\n"PROGRAM_NAME" is part of "PACKAGE_STRING".\n" /* This is fixed for all the packages. */ #define GAL_STRINGS_MORE_HELP_INFO \ "\nFor more information, please run any of the " \ "following commands. In particular the second contains a very " \ "comprehensive explanation of "PROGRAM_NAME"'s invocation: expected " \ "input(s), output(s), and a full description of all the options.\n\n" \ " All options and their values: $ "PROGRAM_EXEC" -P\n" \ " Inputs/Outputs and options: $ info "PROGRAM_EXEC"\n" \ " Full section in manual/book: $ info "PROGRAM_NAME"\n" \ " Full Gnuastro manual/book: $ info "PACKAGE_TARNAME"\n\n" \ "If you couldn't find your answer in the manual, you can get " \ "direct help from experienced Gnuastro users and developers. " \ "For more information, please run:\n\n" \ " $ info help-gnuastro\n\n" \ PROGRAM_NAME" options:" \ /* This can be used in the end of error messages related to option values. */ #define GAL_STRINGS_HOW_TO_CHECK_VALUES \ " You can check all the input values with the `--printparams' " \ "(-P) option." #endif /* __GAL_FIXEDSTRINGMACROS_H__ */ gnuastro-0.5/lib/gnuastro-internal/config.h.in0000644000175000017500000000540013125235120016377 00000000000000/********************************************************************* Functions dealing with general aspects of all Gnuastro. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_CONFIG_H__ #define __GAL_CONFIG_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* The restrict keyword might not be present on some systems, so we are redefining it here based on the checks in `configure.ac', see there for more comments. */ #define restrict @RESTRICT_REPLACEMENT@ /* Configuration macros: */ #define GAL_CONFIG_VERSION "@VERSION@" #define GAL_CONFIG_HAVE_LIBGIT2 @HAVE_LIBGIT2@ #define GAL_CONFIG_HAVE_WCSLIB_VERSION @HAVE_WCSLIB_VERSION@ #define GAL_CONFIG_HAVE_PTHREAD_BARRIER @HAVE_PTHREAD_BARRIER@ #define GAL_CONFIG_BIN_OP_UINT8 @HAVE_BIN_OP_UINT8@ #define GAL_CONFIG_BIN_OP_INT8 @HAVE_BIN_OP_INT8@ #define GAL_CONFIG_BIN_OP_UINT16 @HAVE_BIN_OP_UINT16@ #define GAL_CONFIG_BIN_OP_INT16 @HAVE_BIN_OP_INT16@ #define GAL_CONFIG_BIN_OP_UINT32 @HAVE_BIN_OP_UINT32@ #define GAL_CONFIG_BIN_OP_INT32 @HAVE_BIN_OP_INT32@ #define GAL_CONFIG_BIN_OP_UINT64 @HAVE_BIN_OP_UINT64@ #define GAL_CONFIG_BIN_OP_INT64 @HAVE_BIN_OP_INT64@ #define GAL_CONFIG_BIN_OP_FLOAT32 @HAVE_BIN_OP_FLOAT32@ #define GAL_CONFIG_BIN_OP_FLOAT64 @HAVE_BIN_OP_FLOAT64@ #define GAL_CONFIG_SIZEOF_LONG @SIZEOF_LONG@ #define GAL_CONFIG_SIZEOF_SIZE_T @SIZEOF_SIZE_T@ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_CONFIG_H__ */ gnuastro-0.5/lib/gnuastro-internal/commonopts.h0000644000175000017500000002463713164537456016764 00000000000000/********************************************************************* Common parameters between all programs. IMPORTANT: This header must only be included the programs, not libraries. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_COMMONOPTS_H__ #define __GAL_COMMONOPTS_H__ /* Common options for all programs. IMPORTANT NOTE: This header should only be included in the programs, not the libraries, and in particular `options.c'. Because we want each program to have its own allocation of the common options structure. If it is included in options.c, then it will be shared between all the programs. */ struct argp_option gal_commonopts_options[] = { { 0, 0, 0, 0, "Input:", GAL_OPTIONS_GROUP_INPUT }, { "hdu", GAL_OPTIONS_KEY_HDU, "STR/INT", 0, "Extension name or number of input data.", GAL_OPTIONS_GROUP_INPUT, &cp->hdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "searchin", GAL_OPTIONS_KEY_SEARCHIN, "STR", 0, "Select column(s) in: `name', `unit', `comment'.", GAL_OPTIONS_GROUP_INPUT, &cp->searchin, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_searchin }, { "ignorecase", GAL_OPTIONS_KEY_IGNORECASE, 0, 0, "Ignore case in matching/searching columns.", GAL_OPTIONS_GROUP_INPUT, &cp->ignorecase, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Tile grid (tessellation) options. */ { 0, 0, 0, 0, "Tessellation (tile grid):", GAL_OPTIONS_GROUP_TESSELLATION }, { "tilesize", GAL_OPTIONS_KEY_TILESIZE, "INT[,INT]", 0, "Regular tile size on dim.s (FITS order).", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.tilesize, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, { "numchannels", GAL_OPTIONS_KEY_NUMCHANNELS, "INT[,..]", 0, "No. of channels in dim.s (FITS order).", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.numchannels, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, { "remainderfrac", GAL_OPTIONS_KEY_REMAINDERFRAC, "FLT", 0, "Fraction of remainder to split last tile.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.remainderfrac, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0_LT_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "workoverch", GAL_OPTIONS_KEY_WORKOVERCH, 0, 0, "Work (not tile) over channel edges.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.workoverch, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checktiles", GAL_OPTIONS_KEY_CHECKTILES, 0, 0, "Tile IDs in an image, the size of input.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.checktiles, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "oneelempertile", GAL_OPTIONS_KEY_ONEELEMPERTILE, 0, 0, "Display 1 element/tile, not full input res.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.oneelempertile, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "interponlyblank", GAL_OPTIONS_KEY_INTERPONLYBLANK, 0, 0, "Only interpolate over the blank tiles.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->interponlyblank, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "interpnumngb", GAL_OPTIONS_KEY_INTERPNUMNGB, "INT", 0, "No. of neighbors to use for interpolation.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->interpnumngb, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Output:", GAL_OPTIONS_GROUP_OUTPUT }, { "output", GAL_OPTIONS_KEY_OUTPUT, "STR", 0, "Output name.", GAL_OPTIONS_GROUP_OUTPUT, &cp->output, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "type", GAL_OPTIONS_KEY_TYPE, "STR", 0, "Type of output: e.g., int16, float32, etc...", GAL_OPTIONS_GROUP_OUTPUT, &cp->type, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_type }, { "tableformat", GAL_OPTIONS_KEY_TABLEFORMAT, "STR", 0, "Table format: `fits-ascii', `fits-binary'.", GAL_OPTIONS_GROUP_OUTPUT, &cp->tableformat, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_tableformat }, { "dontdelete", GAL_OPTIONS_KEY_DONTDELETE, 0, 0, "Don't delete output if it exists.", GAL_OPTIONS_GROUP_OUTPUT, &cp->dontdelete, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "keepinputdir", GAL_OPTIONS_KEY_KEEPINPUTDIR, 0, 0, "Keep input directory for automatic output.", GAL_OPTIONS_GROUP_OUTPUT, &cp->keepinputdir, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Operating modes:", GAL_OPTIONS_GROUP_OPERATING_MODE }, { "quiet", GAL_OPTIONS_KEY_QUIET, 0, 0, "Only report errors, remain quiet about steps.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->quiet, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "numthreads", GAL_OPTIONS_KEY_NUMTHREADS, "INT", 0, "Number of CPU threads to use.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->numthreads, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minmapsize", GAL_OPTIONS_KEY_MINMAPSIZE, "INT", 0, "Minimum bytes in array to not use ram RAM.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->minmapsize, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "log", GAL_OPTIONS_KEY_LOG, 0, 0, "Information about output(s) in a log file.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->log, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Internal (before control goes back to the program). */ { "cite", GAL_OPTIONS_KEY_CITE, 0, 0, "BibTeX citation for this program.", GAL_OPTIONS_GROUP_OPERATING_MODE, NULL, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_print_citation }, { "printparams", GAL_OPTIONS_KEY_PRINTPARAMS, 0, 0, "Print parameter values to be used and abort.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->printparams, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "config", GAL_OPTIONS_KEY_CONFIG, "STR", 0, "Read configuration file STR immediately.", GAL_OPTIONS_GROUP_OPERATING_MODE, NULL, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_call_parse_config_file }, { "setdirconf", GAL_OPTIONS_KEY_SETDIRCONF, 0, 0, "Set default values for this directory and abort.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->setdirconf, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "setusrconf", GAL_OPTIONS_KEY_SETUSRCONF, 0, 0, "Set default values for this user and abort.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->setusrconf, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "lastconfig", GAL_OPTIONS_KEY_LASTCONFIG, 0, 0, "Do not parse any more configuration files.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->lastconfig, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "onlyversion", GAL_OPTIONS_KEY_ONLYVERSION, "STR", 0, "Only run if the program version is STR.", GAL_OPTIONS_GROUP_OPERATING_MODE, NULL, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_check_version }, {0} }; #endif gnuastro-0.5/lib/gnuastro-internal/checkset.h0000644000175000017500000000654713211076737016350 00000000000000/********************************************************************* Functions to check and set command line argument values and files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_CHECKSET_H__ #define __GAL_CHECKSET_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include #include #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /**************************************************************/ /********** Check fixed strings ************/ /**************************************************************/ void gal_checkset_known_types(char *optarg, int *type, char *filename, size_t lineno); /**************************************************************/ /********** My String functions: ************/ /**************************************************************/ int gal_checkset_string_has_space(char *in); char * gal_checkset_malloc_cat(char *inname, char *toappend); void gal_checkset_allocate_copy(const char *arg, char **copy); void gal_checkset_allocate_copy_set(char *arg, char **copy, int *set); char * gal_checkset_dataset_name(char *filename, char *hdu); /**************************************************************/ /********** Set file names and check if they exist ************/ /**************************************************************/ char * gal_checkset_dir_part(char *filename); char * gal_checkset_not_dir_part(char *filename); void gal_checkset_check_file(char *filename); int gal_checkset_check_file_return(char *filename); void /* keep==0 && dontdelete==0: file will be deleted if exists.*/ gal_checkset_writable_remove(char *filename, int keep, int dontdelete); int gal_checkset_dir_0_file_1(char *name, int dontdelete); char * gal_checkset_automatic_output(struct gal_options_common_params *cp, char *inname, char *suffix); void gal_checkset_check_dir_write_add_slash(char **dirname); void gal_checkset_mkdir(char *dirname); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_CHECKSET_H__ */ gnuastro-0.5/lib/gnuastro-internal/arithmetic-plus.h0000644000175000017500000000213413215601241017641 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_PLUS_H__ #define __ARITHMETIC_PLUS_H__ void arithmetic_plus(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-or.h0000644000175000017500000000212613215601241017277 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_OR_H__ #define __ARITHMETIC_OR_H__ void arithmetic_or(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-ne.h0000644000175000017500000000212613215601241017261 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_NE_H__ #define __ARITHMETIC_NE_H__ void arithmetic_ne(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-multiply.h0000644000175000017500000000215013215601241020533 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_MULTIPLY_H__ #define __ARITHMETIC_MULTIPLY_H__ void arithmetic_multiply(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-modulo.h0000644000175000017500000000214213215601241020154 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_MODULO_H__ #define __ARITHMETIC_MODULO_H__ void arithmetic_modulo(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-minus.h0000644000175000017500000000213713215601241020014 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_MINUS_H__ #define __ARITHMETIC_MINUS_H__ void arithmetic_minus(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-lt.h0000644000175000017500000000212613215601241017276 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_LT_H__ #define __ARITHMETIC_LT_H__ void arithmetic_lt(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-le.h0000644000175000017500000000212613215601241017257 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_LE_H__ #define __ARITHMETIC_LE_H__ void arithmetic_le(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-internal.h0000644000175000017500000000477213215601241020504 00000000000000/********************************************************************* Arithmetic -- Preform arithmetic operations on datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_ARITHMETIC_INTERNAL_H__ #define __GAL_ARITHMETIC_INTERNAL_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* When we are within Gnuastro's building process, `IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular `GAL_CONFIG_ARITH_CHAR' and the rest of the types that we needed in the arithmetic function) is kept in `config.h'. When building a user's programs, this information is kept in `gnuastro/config.h'. Note that all `.c' files must start with the inclusion of `config.h' and that `gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro).*/ #ifndef IN_GNUASTRO_BUILD #include #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ int gal_arithmetic_binary_checkblank(gal_data_t *l, gal_data_t *r); char * gal_arithmetic_operator_string(int operator); gal_data_t * gal_arithmetic_convert_to_compiled_type(gal_data_t *in, int flags); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_ARITHMETIC_H__ */ gnuastro-0.5/lib/gnuastro-internal/arithmetic-gt.h0000644000175000017500000000212613215601241017271 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_GT_H__ #define __ARITHMETIC_GT_H__ void arithmetic_gt(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-ge.h0000644000175000017500000000212613215601241017252 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_GE_H__ #define __ARITHMETIC_GE_H__ void arithmetic_ge(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-eq.h0000644000175000017500000000212613215601241017264 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_EQ_H__ #define __ARITHMETIC_EQ_H__ void arithmetic_eq(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-divide.h0000644000175000017500000000214213215601241020121 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_DIVIDE_H__ #define __ARITHMETIC_DIVIDE_H__ void arithmetic_divide(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-bitxor.h0000644000175000017500000000214213215601241020164 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_BITXOR_H__ #define __ARITHMETIC_BITXOR_H__ void arithmetic_bitxor(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-bitrsh.h0000644000175000017500000000214213215601241020150 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_BITRSH_H__ #define __ARITHMETIC_BITRSH_H__ void arithmetic_bitrsh(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-bitor.h0000644000175000017500000000213713215601241020000 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_BITOR_H__ #define __ARITHMETIC_BITOR_H__ void arithmetic_bitor(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-bitlsh.h0000644000175000017500000000214213215601241020142 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_BITLSH_H__ #define __ARITHMETIC_BITLSH_H__ void arithmetic_bitlsh(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-bitand.h0000644000175000017500000000214213215601241020116 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_BITAND_H__ #define __ARITHMETIC_BITAND_H__ void arithmetic_bitand(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-binary.h0000644000175000017500000003135513215601241020151 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_BINARY_H__ #define __ARITHMETIC_BINARY_H__ /************************************************************************/ /************* Low-level operators *****************/ /************************************************************************/ /* Final step to be used by all operators and all types. */ #define BINARY_OP_OT_RT_LT_SET(OP, OT, LT, RT) { \ LT lb, *la=l->array; \ RT rb, *ra=r->array; \ OT ob, *oa=o->array, *of=oa + o->size; \ if(checkblank) \ { \ gal_blank_write(&lb, l->type); \ gal_blank_write(&rb, r->type); \ gal_blank_write(&ob, o->type); \ do \ { \ if(lb==lb && rb==rb)/* Both are integers. */ \ *oa = (*la!=lb && *ra!=rb) ? *la OP *ra : ob ; \ else if(lb==lb) /* Only left operand is an integer. */ \ *oa = (*la!=lb && *ra==*ra) ? *la OP *ra : ob; \ else /* Only right operand is an integer. */ \ *oa = (*la==*la && *ra!=rb) ? *la OP *ra : ob; \ if(l->size>1) ++la; \ if(r->size>1) ++ra; \ } \ while(++oasize==r->size) do *oa = *la++ OP *ra++; while(++oasize==1) do *oa = *la OP *ra++; while(++oaarray; \ RT *ra=r->array; \ OT *oa=o->array, *of=oa + o->size; \ if(l->size==r->size) do *oa = *la++ OP *ra++; while(++oasize==1) do *oa = *la OP *ra++; while(++oaarray; \ RT *ra=r->array; \ OT *oa=o->array, *of=oa + o->size; \ if(l->size==r->size) do {*oa = *la++ OP *ra; ++ra;} while(++oasize==1) do {*oa = *la OP *ra; ++ra;} while(++oatype) \ { \ case GAL_TYPE_UINT8: BINARY_SET_OUT_INT( F, OP, LT, uint8_t ) break; \ case GAL_TYPE_INT8: BINARY_SET_OUT_INT( F, OP, LT, int8_t ) break; \ case GAL_TYPE_UINT16: BINARY_SET_OUT_INT( F, OP, LT, uint16_t ) break; \ case GAL_TYPE_INT16: BINARY_SET_OUT_INT( F, OP, LT, int16_t ) break; \ case GAL_TYPE_UINT32: BINARY_SET_OUT_INT( F, OP, LT, uint32_t ) break; \ case GAL_TYPE_INT32: BINARY_SET_OUT_INT( F, OP, LT, int32_t ) break; \ case GAL_TYPE_UINT64: BINARY_SET_OUT_INT( F, OP, LT, uint64_t ) break; \ case GAL_TYPE_INT64: BINARY_SET_OUT_INT( F, OP, LT, int64_t ) break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " \ "address the problem. %d is not a usable type code", \ "BINARY_SET_RT", PACKAGE_BUGREPORT, r->type); \ } /* Set the right operator type. */ #define BINARY_SET_RT(F, OP, LT) \ switch(r->type) \ { \ case GAL_TYPE_UINT8: BINARY_SET_OUT( F, OP, LT, uint8_t ) break; \ case GAL_TYPE_INT8: BINARY_SET_OUT( F, OP, LT, int8_t ) break; \ case GAL_TYPE_UINT16: BINARY_SET_OUT( F, OP, LT, uint16_t ) break; \ case GAL_TYPE_INT16: BINARY_SET_OUT( F, OP, LT, int16_t ) break; \ case GAL_TYPE_UINT32: BINARY_SET_OUT( F, OP, LT, uint32_t ) break; \ case GAL_TYPE_INT32: BINARY_SET_OUT( F, OP, LT, int32_t ) break; \ case GAL_TYPE_UINT64: BINARY_SET_OUT( F, OP, LT, uint64_t ) break; \ case GAL_TYPE_INT64: BINARY_SET_OUT( F, OP, LT, int64_t ) break; \ case GAL_TYPE_FLOAT32: BINARY_SET_OUT( F, OP, LT, float ) break; \ case GAL_TYPE_FLOAT64: BINARY_SET_OUT( F, OP, LT, double ) break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " \ "address the problem. %d is not a usable type code", \ "BINARY_SET_RT", PACKAGE_BUGREPORT, r->type); \ } /* Set the left operator type only for integers (integer operators can't take floating point types). So floating point types must not be in the list of possibilities. */ #define BINARY_SET_LT_INT(F, OP) \ switch(l->type) \ { \ case GAL_TYPE_UINT8: BINARY_SET_RT_INT( F, OP, uint8_t ) break; \ case GAL_TYPE_INT8: BINARY_SET_RT_INT( F, OP, int8_t ) break; \ case GAL_TYPE_UINT16: BINARY_SET_RT_INT( F, OP, uint16_t ) break; \ case GAL_TYPE_INT16: BINARY_SET_RT_INT( F, OP, int16_t ) break; \ case GAL_TYPE_UINT32: BINARY_SET_RT_INT( F, OP, uint32_t ) break; \ case GAL_TYPE_INT32: BINARY_SET_RT_INT( F, OP, int32_t ) break; \ case GAL_TYPE_UINT64: BINARY_SET_RT_INT( F, OP, uint64_t ) break; \ case GAL_TYPE_INT64: BINARY_SET_RT_INT( F, OP, int64_t ) break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " \ "address the problem. %d is not a usable type code", \ "BINARY_SET_LT_INT", PACKAGE_BUGREPORT, l->type); \ } /* Set the left operator type. */ #define BINARY_SET_LT(F, OP) \ switch(l->type) \ { \ case GAL_TYPE_UINT8: BINARY_SET_RT( F, OP, uint8_t ) break; \ case GAL_TYPE_INT8: BINARY_SET_RT( F, OP, int8_t ) break; \ case GAL_TYPE_UINT16: BINARY_SET_RT( F, OP, uint16_t ) break; \ case GAL_TYPE_INT16: BINARY_SET_RT( F, OP, int16_t ) break; \ case GAL_TYPE_UINT32: BINARY_SET_RT( F, OP, uint32_t ) break; \ case GAL_TYPE_INT32: BINARY_SET_RT( F, OP, int32_t ) break; \ case GAL_TYPE_UINT64: BINARY_SET_RT( F, OP, uint64_t ) break; \ case GAL_TYPE_INT64: BINARY_SET_RT( F, OP, int64_t ) break; \ case GAL_TYPE_FLOAT32: BINARY_SET_RT( F, OP, float ) break; \ case GAL_TYPE_FLOAT64: BINARY_SET_RT( F, OP, double ) break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " \ "address the problem. %d is not a usable type code", \ "BINARY_SET_LT", PACKAGE_BUGREPORT, l->type); \ } #endif gnuastro-0.5/lib/gnuastro-internal/arithmetic-and.h0000644000175000017500000000213113215601241017415 00000000000000/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __ARITHMETIC_AND_H__ #define __ARITHMETIC_AND_H__ void arithmetic_and(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif gnuastro-0.5/lib/gnuastro-internal/README0000644000175000017500000000071513121462410015240 00000000000000GNU Astronomy Utilities internal header files --------------------------------------------- The `.h' files in this directory are headers to Gnuastro's internal libraries: libraries that are only available to Gnuastro's programs. These are functions that are mainly to do with running a program, for example the common options to all the programs, functions to manage options and configuration files, timing and etc (the names are hopefully descriptive enough).gnuastro-0.5/lib/gnuastro/0000755000175000017500000000000013217220466012634 500000000000000gnuastro-0.5/lib/gnuastro/README0000644000175000017500000000127312774162326013446 00000000000000GNU Astronomy Utilities library header files ============================================ This directory contins Gnuastro's installed library header files. Once installed, these headers will be installed in the specified '$(prefix)/include/gnuastro' directory (the value of '$(prefix)' can be set at configure time, see the "Installation directory" of the Gnuastro book for more). Inside of Gnuastro, the directory is given the same name to make Gnuastro's internal code similar to what a user would use in their own programs once the header files are installed. The headers that are not installed are kept in the parent directory of this directory mixed with the actual library `.c' source files.gnuastro-0.5/lib/gnuastro/wcs.h0000644000175000017500000000611513174213260013520 00000000000000/********************************************************************* Functions to that only use WCSLIB's functions, not related to FITS. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_WCS_H__ #define __GAL_WCS_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include #include #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /************************************************************* *********** Read WCS *********** *************************************************************/ struct wcsprm * gal_wcs_read_fitsptr(fitsfile *fptr, size_t hstartwcs, size_t hendwcs, int *nwcs); struct wcsprm * gal_wcs_read(char *filename, char *hdu, size_t hstartwcs, size_t hendwcs, int *nwcs); /**************************************************************/ /********** Utilities ************/ /**************************************************************/ struct wcsprm * gal_wcs_copy(struct wcsprm *wcs); void gal_wcs_on_tile(gal_data_t *tile); double * gal_wcs_warp_matrix(struct wcsprm *wcs); void gal_wcs_decompose_pc_cdelt(struct wcsprm *wcs); double gal_wcs_angular_distance_deg(double r1, double d1, double r2, double d2); double * gal_wcs_pixel_scale(struct wcsprm *wcs); double gal_wcs_pixel_area_arcsec2(struct wcsprm *wcs); /**************************************************************/ /********** Conversion ************/ /**************************************************************/ gal_data_t * gal_wcs_world_to_img(gal_data_t *coords, struct wcsprm *wcs, int inplace); gal_data_t * gal_wcs_img_to_world(gal_data_t *coords, struct wcsprm *wcs, int inplace); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_WCS_H__ */ gnuastro-0.5/lib/gnuastro/type.h0000644000175000017500000001254413125235120013703 00000000000000/********************************************************************* Type -- Type information and basic operations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_TYPE_H__ #define __GAL_TYPE_H__ #include #include #include /* When we are within Gnuastro's building process, `IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular `GAL_CONFIG_SIZEOF_SIZE_T' that we need below) is kept in `config.h'. When building a user's programs, this information is kept in `gnuastro/config.h'. Note that all `.c' files in Gnuastro's source must start with the inclusion of `config.h' and that `gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro). */ #ifndef IN_GNUASTRO_BUILD #include #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /************************************************************* ************** Constants *************** *************************************************************/ /* Macros to identify the type of data. */ enum gal_types { GAL_TYPE_INVALID, /* Invalid (=0 by C standard). */ GAL_TYPE_BIT, /* 1 bit */ GAL_TYPE_UINT8, /* 8-bit unsigned integer. */ GAL_TYPE_INT8, /* 8-bit signed integer. */ GAL_TYPE_UINT16, /* 16-bit unsigned integer. */ GAL_TYPE_INT16, /* 16-bit signed integer. */ GAL_TYPE_UINT32, /* 32-bit unsigned integer. */ GAL_TYPE_INT32, /* 32-bit signed integer. */ GAL_TYPE_UINT64, /* 64-bit unsigned integer. */ GAL_TYPE_INT64, /* 64-bit signed integer. */ GAL_TYPE_FLOAT32, /* 32-bit single precision floating point. */ GAL_TYPE_FLOAT64, /* 64-bit double precision floating point. */ GAL_TYPE_COMPLEX32, /* Complex 32-bit floating point. */ GAL_TYPE_COMPLEX64, /* Complex 64-bit floating point. */ GAL_TYPE_STRING, /* String of characters. */ GAL_TYPE_STRLL, /* Linked list of strings. */ }; /* Define system specific types. For example `size_t' is 4 and 8 bytes on 32 and 64 bit systems respectively. In both cases, the standard defines `size_t' to be unsigned. A similar case exists for `long', but it is signed. During `./configure' the sizeof `size_t' and `long' were found and are used to define an alias for these system specific types. Note: we are not using `else'. This is done because by any chance, if the length of these types is not what is expected (4 or 8), then the aliases are not defined and the compiler will crash. */ #if GAL_CONFIG_SIZEOF_SIZE_T == 4 #define GAL_TYPE_SIZE_T GAL_TYPE_UINT32 #elif GAL_CONFIG_SIZEOF_SIZE_T == 8 #define GAL_TYPE_SIZE_T GAL_TYPE_UINT64 #endif #if GAL_CONFIG_SIZEOF_LONG == 4 #define GAL_TYPE_LONG GAL_TYPE_INT32 #elif GAL_CONFIG_SIZEOF_LONG == 8 #define GAL_TYPE_LONG GAL_TYPE_INT64 #endif /************************************************************* ************** General info *************** *************************************************************/ size_t gal_type_sizeof(uint8_t type); char * gal_type_name(uint8_t type, int long_name); uint8_t gal_type_from_name(char *str); void gal_type_min(uint8_t type, void *in); void gal_type_max(uint8_t type, void *in); int gal_type_is_list(uint8_t type); int gal_type_out(int first_type, int second_type); /************************************************************* ************** To/from string *************** *************************************************************/ char * gal_type_bit_string(void *in, size_t size); char * gal_type_to_string(void *ptr, uint8_t type, int quote_if_str_has_space); int gal_type_from_string(void **out, char *string, uint8_t type); void * gal_type_string_to_number(char *string, uint8_t *type); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TYPE_H__ */ gnuastro-0.5/lib/gnuastro/txt.h0000644000175000017500000000454413175442274013561 00000000000000/********************************************************************* txt -- functions to deal with plain text files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_TXT_H__ #define __GAL_TXT_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Macros.*/ #define GAL_TXT_DELIMITERS " ,\t\f\v" #define GAL_TXT_MAX_FMT_LENGTH 20 /* Status of a line: */ enum gal_txt_line_status_enums { GAL_TXT_LINESTAT_INVALID, GAL_TXT_LINESTAT_BLANK, GAL_TXT_LINESTAT_COMMENT, GAL_TXT_LINESTAT_DATAROW, }; /* Functions */ int gal_txt_line_stat(char *line); gal_data_t * gal_txt_table_info(char *filename, size_t *numcols, size_t *numrows); gal_data_t * gal_txt_table_read(char *filename, size_t numrows, gal_data_t *colinfo, gal_list_sizet_t *indexll, size_t minmapsize); gal_data_t * gal_txt_image_read(char *filename, size_t minmapsize); void gal_txt_write(gal_data_t *input, gal_list_str_t *comment, char *filename); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TXT_H__ */ gnuastro-0.5/lib/gnuastro/tile.h0000644000175000017500000005677013156610402013674 00000000000000/********************************************************************* tile -- work with tesselations over a host dataset. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_TILE_H__ #define __GAL_TILE_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /***********************************************************************/ /************** Single tile ******************/ /***********************************************************************/ void gal_tile_start_coord(gal_data_t *tile, size_t *start_coord); void gal_tile_start_end_coord(gal_data_t *tile, size_t *start_end, int rel_block); void * gal_tile_start_end_ind_inclusive(gal_data_t *tile, gal_data_t *work, size_t *start_end_inc); /***********************************************************************/ /************** Series of tiles ******************/ /***********************************************************************/ gal_data_t * gal_tile_series_from_minmax(gal_data_t *block, size_t *minmax, size_t number); /***********************************************************************/ /************** Allocated block **********************/ /***********************************************************************/ gal_data_t * gal_tile_block(gal_data_t *tile); size_t gal_tile_block_increment(gal_data_t *block, size_t *tsize, size_t num_increment, size_t *coord); gal_data_t * gal_tile_block_write_const_value(gal_data_t *tilevalues, gal_data_t *tilesll, int withblank, int initialize); gal_data_t * gal_tile_block_check_tiles(gal_data_t *tiles); void * gal_tile_block_relative_to_other(gal_data_t *tile, gal_data_t *other); void gal_tile_block_blank_flag(gal_data_t *tile_ll, size_t numthreads); /***********************************************************************/ /************** Tile full dataset ********************/ /***********************************************************************/ struct gal_tile_two_layer_params { /* Inputs */ size_t *tilesize; /* Tile size along each dim. (C order). */ size_t *numchannels; /* Channel no. along each dim. (C order). */ float remainderfrac; /* Frac. of remainers in each dim to cut. */ uint8_t workoverch; /* Convolve over channel borders. */ uint8_t checktiles; /* Tile IDs in an img, the size of input. */ uint8_t oneelempertile; /* Only use one element for each tile. */ /* Internal parameters. */ size_t ndim; /* The number of dimensions. */ size_t tottiles; /* Total number of tiles in all dim. */ size_t tottilesinch; /* Number of tiles in one channel. */ size_t totchannels; /* Total number of channels in all dim. */ size_t *channelsize; /* Size of channels along each dimension. */ size_t *numtiles; /* Tile no. in each dim. over-all. */ size_t *numtilesinch; /* Tile no. in each dim. on one channel. */ char *tilecheckname; /* Name of file to check tiles. */ size_t *permutation; /* Tile pos. in memory --> pos. overall. */ size_t *firsttsize; /* See `gal_tile_full_regular_first'. */ /* Actual tile and channel data structures. */ gal_data_t *tiles; /* Tiles array (also linked with `next'). */ gal_data_t *channels; /* Channels array (linked with `next'). */ }; size_t * gal_tile_full(gal_data_t *input, size_t *regular, float remainderfrac, gal_data_t **out, size_t multiple, size_t **firsttsize); void gal_tile_full_sanity_check(char *filename, char *hdu, gal_data_t *input, struct gal_tile_two_layer_params *tl); void gal_tile_full_two_layers(gal_data_t *input, struct gal_tile_two_layer_params *tl); void gal_tile_full_permutation(struct gal_tile_two_layer_params *tl); void gal_tile_full_values_write(gal_data_t *tilevalues, struct gal_tile_two_layer_params *tl, int withblank, char *filename, gal_fits_list_key_t *keys, char *program_string); gal_data_t * gal_tile_full_values_smooth(gal_data_t *tilevalues, struct gal_tile_two_layer_params *tl, size_t width, size_t numthreads); size_t gal_tile_full_id_from_coord(struct gal_tile_two_layer_params *tl, size_t *coord); void gal_tile_full_blank_flag(gal_data_t *tile_ll, size_t numthreads); void gal_tile_full_free_contents(struct gal_tile_two_layer_params *tl); /***********************************************************************/ /************** Function-like macros ******************/ /***********************************************************************/ /* Useful when the input and other types are already known. We want this to be self-sufficient (and be possible to call it independent of `GAL_TILE_PARSE_OPERATE'), so some variables (basic definitions) that are already defined in `GAL_TILE_PARSE_OPERATE' re-defined here. */ #define GAL_TILE_PO_OISET(IT, OT, IN, OTHER, PARSE_OTHER, CHECK_BLANK, OP) { \ IT *i=IN->array; \ gal_data_t *tpo_other=OTHER; /* `OTHER' may be NULL. */ \ gal_data_t *tpo_oblock = OTHER ? gal_tile_block(OTHER) : NULL; \ \ size_t tpo_s_e_i_junk[2]={0,0}; \ IT b, *tpo_st=NULL, *tpo_f=i+IN->size; \ size_t tpo_i_increment=0, tpo_num_i_inc=1; \ size_t tpo_o_increment=0, tpo_num_o_inc=1; \ int tpo_parse_other=(OTHER && PARSE_OTHER); \ gal_data_t *tpo_iblock = gal_tile_block(IN); \ OT *tpo_ost=NULL, *o = tpo_other ? tpo_other->array : NULL; \ int tpo_hasblank = CHECK_BLANK ? gal_blank_present(IN, 0) : 0; \ size_t tpo_s_e_i[2]={0,tpo_iblock->size-1}; /* -1: this is INCLUSIVE */ \ \ \ /* A small sanity check: if `OTHER' is given, and it is a block, */ \ /* then it must have the same size as `IN's block. On the other */ \ /* hand, when `OTHER' is a tile, its must have `IN's size. */ \ if( tpo_parse_other ) \ { \ if( OTHER==tpo_oblock ) /* `OTHER' is a block. */ \ { \ if(gal_data_dsize_is_different(tpo_iblock, tpo_oblock) ) \ { \ /* `error' function, is a GNU extension, see above. */ \ fprintf(stderr, "GAL_TILE_PO_OISET: when " \ "`PARSE_OTHER' is non-zero, the allocated " \ "block size of `IN' and `OTHER' must be " \ "equal, but they are not: %zu and %zu " \ "elements respectively\n", tpo_iblock->size, \ tpo_oblock->size); \ exit(EXIT_FAILURE); \ } \ } \ else \ if(gal_data_dsize_is_different(IN, OTHER) ) \ { \ /* The `error' function, is a GNU extension and this */ \ /* is a header, not a library which the user has to */ \ /* compile every time (on their own system). */ \ fprintf(stderr, "GAL_TILE_PO_OISET: when " \ "`PARSE_OTHER' is non-zero, the sizes of `IN' " \ "and `OTHER' must be equal (in all " \ "dimensions), but they are not: %zu and %zu " \ "elements respectively\n", IN->size, \ tpo_other->size); \ exit(EXIT_FAILURE); \ } \ } \ \ \ /* Write the blank value for the input type into `b'. */ \ gal_blank_write(&b, tpo_iblock->type); \ \ \ /* If this is a tile, not a full block, then we need to set the */ \ /* starting pointers (`tpo_st' and `tpo_ost'). The latter needs */ \ /* special attention: if it is a block, then we will use the */ \ /* the same starting element as the input tile. If `OTHER' is a */ \ /* tile, then use its own starting position (recall that we have */ \ /* already made sure that `IN' and `OTHER' have the same size. */ \ if(IN!=tpo_iblock) \ { \ tpo_st = gal_tile_start_end_ind_inclusive(IN, tpo_iblock, \ tpo_s_e_i); \ if( tpo_parse_other ) \ tpo_ost = ( OTHER==tpo_oblock \ ? ( (OT *)(tpo_oblock->array) \ + ( tpo_st - (IT *)(tpo_iblock->array) ) ) \ : gal_tile_start_end_ind_inclusive(tpo_other, \ tpo_oblock, \ tpo_s_e_i_junk) ); \ } \ \ \ /* Go over contiguous patches of memory. */ \ while( tpo_s_e_i[0] + tpo_i_increment <= tpo_s_e_i[1] ) \ { \ /* If we are on a tile, reset `i' and `o'. */ \ if(IN!=tpo_iblock) \ { \ tpo_f = ( ( i = tpo_st + tpo_i_increment ) \ + IN->dsize[IN->ndim-1] ); \ if(tpo_parse_other) o = tpo_ost + tpo_o_increment; \ } \ \ /* Do the operation depending the nature of the blank value. */ \ /* Recall that for integer types, the blank value must be */ \ /* checked with `=='. But for floats, the blank value can be */ \ /* a NaN. Recall that a NAN will fail any comparison */ \ /* including `=='. So when the blank value is not equal to */ \ /* itself, then it is floating point and is a NAN. In that */ \ /* case, the only way to check if a data element is blank or */ \ /* not is to see if the value of each element is equal to */ \ /* itself or not. */ \ if(tpo_hasblank) \ { \ if(b==b) \ do{if(*i!=b) {OP;} if(tpo_parse_other) ++o;} while(++isize \ : gal_tile_block_increment(tpo_iblock, \ IN->dsize, \ tpo_num_i_inc++, \ NULL) ); \ \ /* Similarly, increment the other array if necessary. Like */ \ /* the above, when `OTHER' is a full block, we'll just use */ \ /* the same increment as `IN'. Otherwise, when `OTHER' is a */ \ /* tile, calculate its increment based on its own block. */ \ if(tpo_parse_other) \ { \ if(OTHER==tpo_oblock) tpo_o_increment=tpo_i_increment; \ else \ tpo_o_increment += gal_tile_block_increment(tpo_oblock, \ tpo_other->dsize, \ tpo_num_o_inc++, \ NULL); \ } \ } \ \ /* This is done in case the caller doesn't need `o' to avoid */ \ /* compiler warnings. */ \ o = o ? o+0 : NULL; \ } #define GAL_TILE_PO_OSET(OT, IN, OTHER, PARSE_OTHER, CHECK_BLANK, OP) { \ switch(tpo_iblock->type) \ { \ case GAL_TYPE_UINT8: \ GAL_TILE_PO_OISET(uint8_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT8: \ GAL_TILE_PO_OISET(int8_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT16: \ GAL_TILE_PO_OISET(uint16_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT16: \ GAL_TILE_PO_OISET(int16_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT32: \ GAL_TILE_PO_OISET(uint32_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT32: \ GAL_TILE_PO_OISET(int32_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT64: \ GAL_TILE_PO_OISET(uint64_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT64: \ GAL_TILE_PO_OISET(int64_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_FLOAT32: \ GAL_TILE_PO_OISET(float, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_FLOAT64: \ GAL_TILE_PO_OISET(double, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ default: \ { /* `error' function might not be available for the user. */ \ fprintf(stderr, "GAL_TILE_PO_OSET: type code %d not recognized",\ tpo_iblock->type); \ exit(EXIT_FAILURE); \ } \ } \ } /* Parse over a region of memory (can be an n-dimensional tile or a fully allocated block of memory) and do a certain operation. If `OTHER' is not NULL, this macro will also parse it at the same time . Note that OTHER must either have only one element (for the whole input) or have exactly the same number of elements as the input (one value for one pixel/element of the input). See the documentation for more on this macro and some examples. */ #define GAL_TILE_PARSE_OPERATE(IN, OTHER, PARSE_OTHER, CHECK_BLANK, OP) { \ gal_data_t *tpo_iblock = gal_tile_block(IN); \ gal_data_t *tpo_oblock = OTHER ? gal_tile_block(OTHER) : NULL; \ \ /* First set the OTHER type. */ \ if(OTHER) \ switch(tpo_oblock->type) \ { \ case GAL_TYPE_UINT8: \ GAL_TILE_PO_OSET(uint8_t, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT8: \ GAL_TILE_PO_OSET(int8_t, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT16: \ GAL_TILE_PO_OSET(uint16_t,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT16: \ GAL_TILE_PO_OSET(int16_t, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT32: \ GAL_TILE_PO_OSET(uint32_t,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT32: \ GAL_TILE_PO_OSET(int32_t, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT64: \ GAL_TILE_PO_OSET(uint64_t,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT64: \ GAL_TILE_PO_OSET(int64_t, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_FLOAT32: \ GAL_TILE_PO_OSET(float, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_FLOAT64: \ GAL_TILE_PO_OSET(double, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ default: \ { \ fprintf(stderr, "type code %d not recognized in " \ "`GAL_TILE_PARSE_OPERATE'", tpo_oblock->type); \ exit(EXIT_FAILURE); \ } \ } \ else \ /* When `OTHER==NULL', its type is irrelevant, we'll just use */ \ /*`int' as a place holder. */ \ GAL_TILE_PO_OSET(int, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ } __END_C_DECLS /* From C++ preparations */ #endif gnuastro-0.5/lib/gnuastro/threads.h0000644000175000017500000001043713121462410014353 00000000000000/********************************************************************* Functions to facilitate using threads. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_THREADS_H__ #define __GAL_THREADS_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include #include /* When we are within Gnuastro's building process, `IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular `GAL_CONFIG_HAVE_PTHREAD_BARRIER' that we need below) is kept in `config.h'. When building a user's programs, this information is kept in `gnuastro/config.h'. Note that all `.c' files must start with the inclusion of `config.h' and that `gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro).*/ #ifndef IN_GNUASTRO_BUILD #include #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /*****************************************************************/ /********* Implementation of pthread_barrier ***************/ /*****************************************************************/ #if GAL_CONFIG_HAVE_PTHREAD_BARRIER == 0 /* Integer number of nano-seconds that `pthread_barrier_destroy' should wait for a check to see if all barriers have been reached. */ #define GAL_THREADS_BARRIER_DESTROY_NANOSECS 1000 typedef int pthread_barrierattr_t; typedef struct { pthread_mutex_t mutex; pthread_cond_t cond; size_t count; size_t limit; size_t condfinished; } pthread_barrier_t; int pthread_barrier_init(pthread_barrier_t *b, pthread_barrierattr_t *attr, unsigned int limit); int pthread_barrier_wait(pthread_barrier_t *b); int pthread_barrier_destroy(pthread_barrier_t *b); #endif /* GAL_CONFIG_HAVE_PTHREAD_BARRIER == 0 */ /*******************************************************************/ /************ Thread utilities **************/ /*******************************************************************/ size_t gal_threads_number(); void gal_threads_dist_in_threads(size_t numactions, size_t numthreads, size_t **outthrds, size_t *outthrdcols); void gal_threads_attr_barrier_init(pthread_attr_t *attr, pthread_barrier_t *b, size_t limit); /*******************************************************************/ /************ Run a function on multiple threads **************/ /*******************************************************************/ struct gal_threads_params { size_t id; /* Id of this thread. */ void *params; /* Input structure for higher-level settings. */ size_t *indexs; /* Indexes of actions to be done in this thread. */ pthread_barrier_t *b; /* Pointer the barrier for all threads. */ }; void gal_threads_spin_off(void *(*worker)(void *), void *caller_params, size_t numactions, size_t numthreads); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_THREADS_H__ */ gnuastro-0.5/lib/gnuastro/table.h0000644000175000017500000001257613211616535014027 00000000000000/********************************************************************* table -- functions for table input and output. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_TABLE_H__ #define __GAL_TABLE_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* `printf' default formattings. Note that the string type shouldn't have any precision and for the width, */ #define GAL_TABLE_DEF_WIDTH_STR 6 #define GAL_TABLE_DEF_WIDTH_INT 6 #define GAL_TABLE_DEF_WIDTH_LINT 10 #define GAL_TABLE_DEF_WIDTH_FLT 13 #define GAL_TABLE_DEF_WIDTH_DBL 18 #define GAL_TABLE_DEF_PRECISION_INT 0 #define GAL_TABLE_DEF_PRECISION_FLT 6 #define GAL_TABLE_DEF_PRECISION_DBL 14 /* Particular display formats for different types: Integers or floating point numbers can be printed in various display formats. The values here are stored in `gal_data_t' when necessary to help in printing of the data.*/ enum gal_table_diplay_formats { GAL_TABLE_DISPLAY_FMT_INVALID, /* Invalid (=0 by C standard). */ GAL_TABLE_DISPLAY_FMT_STRING, /* String/Character. */ GAL_TABLE_DISPLAY_FMT_DECIMAL, /* Integers: signed decimal. */ GAL_TABLE_DISPLAY_FMT_UDECIMAL, /* Integers: unsigned decimal. */ GAL_TABLE_DISPLAY_FMT_OCTAL, /* Integers: octal. */ GAL_TABLE_DISPLAY_FMT_HEX, /* Integers: hexadecimal. */ GAL_TABLE_DISPLAY_FMT_FLOAT, /* Floats: with decimal point. */ GAL_TABLE_DISPLAY_FMT_EXP, /* Floats: as exponential. */ GAL_TABLE_DISPLAY_FMT_GENERAL, /* Floats: general (%g in C). */ }; /* Formats of table storage for input or output, as strings and integers. */ enum gal_table_types { GAL_TABLE_FORMAT_INVALID, /* Invalid (=0 by C standard). */ GAL_TABLE_FORMAT_TXT, /* Plain text table. */ GAL_TABLE_FORMAT_AFITS, /* FITS ASCII table. */ GAL_TABLE_FORMAT_BFITS, /* FITS binary table. */ }; /* When the desired column is not a number, should the string match or regular expression search be in the name, units or comments of the columns? */ enum gal_table_where_to_search { GAL_TABLE_SEARCH_INVALID, /* Invalid (=0 by C standard). */ GAL_TABLE_SEARCH_NAME, /* Match/search in names. */ GAL_TABLE_SEARCH_UNIT, /* Match/search in units. */ GAL_TABLE_SEARCH_COMMENT, /* Match/search in comments. */ }; /************************************************************************/ /*************** Information about a table ***************/ /************************************************************************/ gal_data_t * gal_table_info(char *filename, char *hdu, size_t *numcols, size_t *numrows, int *tableformat); void gal_table_print_info(gal_data_t *allcols, size_t numcols, size_t numrows); /************************************************************************/ /*************** Read a table ***************/ /************************************************************************/ gal_data_t * gal_table_read(char *filename, char *hdu, gal_list_str_t *cols, int searchin, int ignorecase, int minmapsize, size_t *colmatch); /************************************************************************/ /*************** Write a table ***************/ /************************************************************************/ void gal_table_comments_add_intro(gal_list_str_t **comments, char *program_string, time_t *rawtime); void gal_table_write(gal_data_t *cols, gal_list_str_t *comments, int tableformat, char *filename, char *extname); void gal_table_write_log(gal_data_t *logll, char *program_string, time_t *rawtime, gal_list_str_t *comments, char *filename, int quiet); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TABLE_H__ */ gnuastro-0.5/lib/gnuastro/statistics.h0000644000175000017500000001250313121462410015107 00000000000000/********************************************************************* Statistical functions. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_STATISTICS_H__ #define __GAL_STATISTICS_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Maximum number of tests for sigma-clipping convergence. */ #define GAL_STATISTICS_SIG_CLIP_MAX_CONVERGE 50 /* Least acceptable mode symmetricity.*/ #define GAL_STATISTICS_MODE_GOOD_SYM 0.2f /* Enumerators */ enum is_sorted_outputs { GAL_STATISTICS_SORTED_NOT, /* ==0 by C standard. */ GAL_STATISTICS_SORTED_INCREASING, GAL_STATISTICS_SORTED_DECREASING, }; enum bin_status { GAL_STATISTICS_BINS_INVALID, /* ==0 by C standard. */ GAL_STATISTICS_BINS_REGULAR, GAL_STATISTICS_BINS_IRREGULAR, }; /**************************************************************** ******** Simple statistics ******* ****************************************************************/ gal_data_t * gal_statistics_number(gal_data_t *input); gal_data_t * gal_statistics_minimum(gal_data_t *input); gal_data_t * gal_statistics_maximum(gal_data_t *input); gal_data_t * gal_statistics_sum(gal_data_t *input); gal_data_t * gal_statistics_mean(gal_data_t *input); gal_data_t * gal_statistics_std(gal_data_t *input); gal_data_t * gal_statistics_mean_std(gal_data_t *input); gal_data_t * gal_statistics_median(gal_data_t *input, int inplace); size_t gal_statistics_quantile_index(size_t size, double quantile); gal_data_t * gal_statistics_quantile(gal_data_t *input, double quantile, int inplace); size_t gal_statistics_quantile_function_index(gal_data_t *input, gal_data_t *value, int inplace); gal_data_t * gal_statistics_quantile_function(gal_data_t *input, gal_data_t *value, int inplace); /**************************************************************** ******** Mode ******* ****************************************************************/ gal_data_t * gal_statistics_mode(gal_data_t *input, float errorstd, int inplace); gal_data_t * gal_statistics_mode_mirror_plots(gal_data_t *input, gal_data_t *value, size_t numbins, int inplace, double *mirror_val); /**************************************************************** ******** Sort ******* ****************************************************************/ int gal_statistics_is_sorted(gal_data_t *input); void gal_statistics_sort_increasing(gal_data_t *input); void gal_statistics_sort_decreasing(gal_data_t *input); gal_data_t * gal_statistics_no_blank_sorted(gal_data_t *input, int inplace); /**************************************************************** ******** Histogram and Cumulative Frequency Plot ******* ****************************************************************/ gal_data_t * gal_statistics_regular_bins(gal_data_t *data, gal_data_t *range, size_t numbins, double onebinstart); gal_data_t * gal_statistics_histogram(gal_data_t *data, gal_data_t *bins, int normalize, int maxhistone); gal_data_t * gal_statistics_cfp(gal_data_t *data, gal_data_t *bins, int normalize); /**************************************************************** ***************** Sigma clip ******************** ****************************************************************/ gal_data_t * gal_statistics_sigma_clip(gal_data_t *input, float multip, float param, int inplace, int quiet); /****************************************************************/ /************* Identify outliers ****************/ /****************************************************************/ void gal_statistics_remove_outliers_flat_cdf(float *sorted, size_t *outsize); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_STATISTICS_H__ */ gnuastro-0.5/lib/gnuastro/qsort.h0000644000175000017500000000612513121462410014070 00000000000000/********************************************************************* forqsort -- Functions used by qsort to sort an array. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_QSORT_H__ #define __GAL_QSORT_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Pointer used to sort the indexs of an array based on their flux (value in this array). */ extern float *gal_qsort_index_arr; int gal_qsort_index_float_decreasing(const void * a, const void * b); int gal_qsort_uint8_decreasing(const void *a, const void *b); int gal_qsort_uint8_increasing(const void *a, const void *b); int gal_qsort_int8_decreasing(const void *a, const void *b); int gal_qsort_int8_increasing(const void *a, const void *b); int gal_qsort_uint16_decreasing(const void *a, const void *b); int gal_qsort_uint16_increasing(const void *a, const void *b); int gal_qsort_int16_decreasing(const void *a, const void *b); int gal_qsort_int16_increasing(const void *a, const void *b); int gal_qsort_uint32_decreasing(const void *a, const void *b); int gal_qsort_uint32_increasing(const void *a, const void *b); int gal_qsort_int32_decreasing(const void *a, const void *b); int gal_qsort_int32_increasing(const void *a, const void *b); int gal_qsort_uint64_decreasing(const void *a, const void *b); int gal_qsort_uint64_increasing(const void *a, const void *b); int gal_qsort_int64_decreasing(const void *a, const void *b); int gal_qsort_int64_increasing(const void *a, const void *b); int gal_qsort_float32_decreasing(const void *a, const void *b); int gal_qsort_float32_increasing(const void *a, const void *b); int gal_qsort_float64_decreasing(const void *a, const void *b); int gal_qsort_float64_increasing(const void *a, const void *b); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_QSORT_H__ */ gnuastro-0.5/lib/gnuastro/polygon.h0000644000175000017500000000435612772171231014424 00000000000000/********************************************************************* Polygon related functions and macros. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_POLYGON_H__ #define __GAL_POLYGON_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ #define GAL_POLYGON_MAX_CORNERS 50 #define GAL_POLYGON_ROUND_ERR 1e-5 /***************************************************************/ /************** Function declarations ******************/ /***************************************************************/ void gal_polygon_ordered_corners(double *in, size_t n, size_t *ordinds); double gal_polygon_area(double *v, size_t n); int gal_polygon_pin(double *v, double *p, size_t n); int gal_polygon_ppropin(double *v, double *p, size_t n); void gal_polygon_clip(double *s, size_t n, double *c, size_t m, double *o, size_t *numcrn); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_POLYGON_H__ */ gnuastro-0.5/lib/gnuastro/permutation.h0000644000175000017500000000443113121462410015265 00000000000000/********************************************************************* Permutation -- Work on permutations (arrays of indexs). This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_PERMUTATION_H__ #define __GAL_PERMUTATION_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /*********************************************************************/ /*************** Permutation info *******************/ /*********************************************************************/ void gal_permutation_check(size_t *permutation, size_t size); /*********************************************************************/ /*************** Apply permutation *******************/ /*********************************************************************/ void gal_permutation_apply(gal_data_t *input, size_t *permutation); void gal_permutation_apply_inverse(gal_data_t *input, size_t *permutation); __END_C_DECLS /* From C++ preparations */ #endif gnuastro-0.5/lib/gnuastro/match.h0000644000175000017500000000340213211076737014024 00000000000000/********************************************************************* match -- Functions to match catalogs and WCS. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_MATCH_H__ #define __GAL_MATCH_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ gal_data_t * gal_match_coordinates(gal_data_t *coord1, gal_data_t *coord2, double *aperture, int sorted_by_first, int inplace, size_t minmapsize, size_t *nummatched); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TABLE_H__ */ gnuastro-0.5/lib/gnuastro/list.h0000644000175000017500000001770413121462410013700 00000000000000/********************************************************************* Functions for linked lists. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_LIST_H__ #define __GAL_LIST_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /**************************************************************** ***************** String ******************** ****************************************************************/ typedef struct gal_list_str_t { char *v; struct gal_list_str_t *next; } gal_list_str_t; void gal_list_str_add(gal_list_str_t **list, char *value, int allocate); char * gal_list_str_pop(gal_list_str_t **list); size_t gal_list_str_number(gal_list_str_t *list); void gal_list_str_print(gal_list_str_t *list); void gal_list_str_reverse(gal_list_str_t **list); void gal_list_str_free(gal_list_str_t *list, int freevalue); /**************************************************************** ***************** int32 ******************** ****************************************************************/ typedef struct gal_list_i32_t { int32_t v; struct gal_list_i32_t *next; } gal_list_i32_t; void gal_list_i32_add(gal_list_i32_t **list, int32_t value); int32_t gal_list_i32_pop(gal_list_i32_t **list); size_t gal_list_i32_number(gal_list_i32_t *list); void gal_list_i32_print(gal_list_i32_t *list); void gal_list_i32_reverse(gal_list_i32_t **list); int32_t * gal_list_i32_to_array(gal_list_i32_t *list, int reverse, size_t *num); void gal_list_i32_free(gal_list_i32_t *list); /**************************************************************** ***************** size_t ******************** ****************************************************************/ typedef struct gal_list_sizet_t { size_t v; struct gal_list_sizet_t *next; } gal_list_sizet_t; void gal_list_sizet_add(gal_list_sizet_t **list, size_t value); size_t gal_list_sizet_pop(gal_list_sizet_t **list); size_t gal_list_sizet_number(gal_list_sizet_t *list); void gal_list_sizet_print(gal_list_sizet_t *list); void gal_list_sizet_reverse(gal_list_sizet_t **list); size_t * gal_list_sizet_to_array(gal_list_sizet_t *list, int reverse, size_t *num); void gal_list_sizet_free(gal_list_sizet_t *list); /**************************************************************** ***************** float ******************** ****************************************************************/ typedef struct gal_list_f32_t { float v; struct gal_list_f32_t *next; } gal_list_f32_t; void gal_list_f32_add(gal_list_f32_t **list, float value); float gal_list_f32_pop(gal_list_f32_t **list); size_t gal_list_f32_number(gal_list_f32_t *list); void gal_list_f32_reverse(gal_list_f32_t **list); void gal_list_f32_print(gal_list_f32_t *list); float * gal_list_f32_to_array(gal_list_f32_t *list, int reverse, size_t *num); void gal_list_f32_free(gal_list_f32_t *list); /**************************************************************** ***************** double ******************** ****************************************************************/ typedef struct gal_list_f64_t { double v; struct gal_list_f64_t *next; } gal_list_f64_t; void gal_list_f64_add(gal_list_f64_t **list, double value); double gal_list_f64_pop(gal_list_f64_t **list); size_t gal_list_f64_number(gal_list_f64_t *list); void gal_list_f64_print(gal_list_f64_t *list); void gal_list_f64_reverse(gal_list_f64_t **list); double * gal_list_f64_to_array(gal_list_f64_t *list, int reverse, size_t *num); void gal_list_f64_free(gal_list_f64_t *list); /**************************************************************** ***************** void * ******************** ****************************************************************/ typedef struct gal_list_void_t { void *v; struct gal_list_void_t *next; } gal_list_void_t; void gal_list_void_add(gal_list_void_t **list, void *value); void * gal_list_void_pop(gal_list_void_t **list); size_t gal_list_void_number(gal_list_void_t *list); void gal_list_void_reverse(gal_list_void_t **list); void gal_list_void_free(gal_list_void_t *list, int freevalue); /**************************************************************** ***************** Ordered size_t ******************** ****************************************************************/ typedef struct gal_list_osizet_t { size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_osizet_t *next; } gal_list_osizet_t; void gal_list_osizet_add(gal_list_osizet_t **list, size_t value, float tosort); size_t gal_list_osizet_pop(gal_list_osizet_t **list, float *sortvalue); void gal_list_osizet_to_sizet_free(gal_list_osizet_t *in, gal_list_sizet_t **out); /**************************************************************** *********** Doubly linked, ordered size_t ************** ****************************************************************/ typedef struct gal_list_dosizet_t { size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_dosizet_t *prev; struct gal_list_dosizet_t *next; } gal_list_dosizet_t; void gal_list_dosizet_add(gal_list_dosizet_t **largest, gal_list_dosizet_t **smallest, size_t value, float tosort); size_t gal_list_dosizet_pop_smallest(gal_list_dosizet_t **lartest, gal_list_dosizet_t **smallest, float *tosort); void gal_list_dosizet_print(gal_list_dosizet_t *largest, gal_list_dosizet_t *smallest); void gal_list_dosizet_to_sizet(gal_list_dosizet_t *in, gal_list_sizet_t **out); void gal_list_dosizet_free(gal_list_dosizet_t *largest); /**************************************************************** ***************** gal_data_t ******************** ****************************************************************/ void gal_list_data_add(gal_data_t **list, gal_data_t *newnode); void gal_list_data_add_alloc(gal_data_t **list, void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, char *name, char *unit, char *comment); gal_data_t * gal_list_data_pop(gal_data_t **list); void gal_list_data_reverse(gal_data_t **list); size_t gal_list_data_number(gal_data_t *list); void gal_list_data_free(gal_data_t *list); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_LIST_H__ */ gnuastro-0.5/lib/gnuastro/interpolate.h0000644000175000017500000000367613121462410015256 00000000000000/********************************************************************* tile -- work with tesselations over a host dataset. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_INTERPOLATE_H__ #define __GAL_INTERPOLATE_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ gal_data_t * gal_interpolate_close_neighbors(gal_data_t *input, struct gal_tile_two_layer_params *tl, size_t numneighbors, size_t numthreads, int onlyblank, int aslinkedlist); __END_C_DECLS /* From C++ preparations */ #endif gnuastro-0.5/lib/gnuastro/git.h0000644000175000017500000000322313014150571013502 00000000000000/********************************************************************* Functions to facilitate using the Git library. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_GIT_H__ #define __GAL_GIT_H__ #if GAL_CONFIG_HAVE_LIBGIT2 == 1 #include #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Only make the Git definitions if the system has LIBGIT2, */ char * gal_git_describe(); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_GIT_H__ */ gnuastro-0.5/lib/gnuastro/fits.h0000644000175000017500000002023313211076737013676 00000000000000/********************************************************************* Functions to convert a FITS array to a C array and vice versa. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_FITS_H__ #define __GAL_FITS_H__ /* When we are within Gnuastro's building process, `IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular `GAL_CONFIG_HAVE_WCSLIB_VERION' that we need in `fits.c') is kept in `config.h'. When building a user's programs, this information is kept in `gnuastro/config.h'. Note that all `.c' files must start with the inclusion of `config.h' and that `gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro).*/ #ifndef IN_GNUASTRO_BUILD #include #endif /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include #include #include #include #include #include #include #include #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Macros. */ #define GAL_FITS_MAX_NDIM 999 #define GAL_FITS_KEY_TITLE_START " / " /* To create a linked list of headers. */ typedef struct gal_fits_list_key_t { int kfree; /* ==1, free keyword name. */ int vfree; /* ==1, free keyword value. */ int cfree; /* ==1, free comment. */ uint8_t type; /* Keyword value type. */ char *keyname; /* Keyword Name. */ void *value; /* Keyword value. */ char *comment; /* Keyword comment. */ char *unit; /* Keyword unit. */ struct gal_fits_list_key_t *next; /* Pointer next keyword. */ } gal_fits_list_key_t; /************************************************************* ************** Reporting errors: *************** *************************************************************/ void gal_fits_io_error(int status, char *message); /************************************************************* ************** FITS names *************** *************************************************************/ int gal_fits_name_is_fits(char *name); int gal_fits_suffix_is_fits(char *suffix); char * gal_fits_name_save_as_string(char *filename, char *hdu); /************************************************************* ************** Type codes *************** *************************************************************/ uint8_t gal_fits_bitpix_to_type(int bitpix); int gal_fits_type_to_bitpix(uint8_t type); char gal_fits_type_to_bin_tform(uint8_t type); int gal_fits_type_to_datatype(uint8_t type); uint8_t gal_fits_datatype_to_type(int datatype, int is_table_column); /**************************************************************/ /********** HDU ************/ /**************************************************************/ fitsfile * gal_fits_open_to_write(char *filename); size_t gal_fits_hdu_num(char *filename); int gal_fits_hdu_format(char *filename, char *hdu); fitsfile * gal_fits_hdu_open(char *filename, char *hdu, int iomode); fitsfile * gal_fits_hdu_open_format(char *filename, char *hdu, int img0_tab1); /**************************************************************/ /********** Header keywords ************/ /**************************************************************/ void * gal_fits_key_img_blank(uint8_t type); void gal_fits_key_clean_str_value(char *string); void gal_fits_key_read_from_ptr(fitsfile *fptr, gal_data_t *keysll, int readcomment, int readunit); void gal_fits_key_read(char *filename, char *hdu, gal_data_t *keysll, int readcomment, int readunit); void gal_fits_key_list_add(gal_fits_list_key_t **list, uint8_t type, char *keyname, int kfree, void *value, int vfree, char *comment, int cfree, char *unit); void gal_fits_key_list_add_end(gal_fits_list_key_t **list, uint8_t type, char *keyname, int kfree, void *value, int vfree, char *comment, int cfree, char *unit); void gal_fits_key_write_filename(char *keynamebase, char *filename, gal_fits_list_key_t **list); void gal_fits_key_write_wcsstr(fitsfile *fptr, char *wcsstr, int nkeyrec); void gal_fits_key_write(fitsfile *fptr, gal_fits_list_key_t **keylist); void gal_fits_key_write_version(fitsfile *fptr, gal_fits_list_key_t *headers, char *program_string); /************************************************************* ****************** Array functions ***************** *************************************************************/ void gal_fits_img_info(fitsfile *fptr, int *type, size_t *ndim, size_t **dsize, char **name, char **unit); gal_data_t * gal_fits_img_read(char *filename, char *hdu, size_t minmapsize, size_t hstartwcs, size_t hendwcs); gal_data_t * gal_fits_img_read_to_type(char *inputname, char *hdu, uint8_t type, size_t minmapsize, size_t hstartwcs, size_t hendwcs); gal_data_t * gal_fits_img_read_kernel(char *filename, char *hdu, size_t minmapsize); fitsfile * gal_fits_img_write_to_ptr(gal_data_t *data, char *filename); void gal_fits_img_write(gal_data_t *data, char *filename, gal_fits_list_key_t *headers, char *program_string); void gal_fits_img_write_to_type(gal_data_t *data, char *filename, gal_fits_list_key_t *headers, char *program_string, int type); void gal_fits_img_write_corr_wcs_str(gal_data_t *input, char *filename, char *wcsheader, int nkeyrec, double *crpix, gal_fits_list_key_t *headers, char *program_string); /**************************************************************/ /********** Table ************/ /**************************************************************/ void gal_fits_tab_size(fitsfile *fitsptr, size_t *nrows, size_t *ncols); int gal_fits_tab_format(fitsfile *fptr); gal_data_t * gal_fits_tab_info(char *filename, char *hdu, size_t *numcols, size_t *numrows, int *tableformat); gal_data_t * gal_fits_tab_read(char *filename, char *hdu, size_t numrows, gal_data_t *colinfo, gal_list_sizet_t *indexll, int minmapsize); void gal_fits_tab_write(gal_data_t *cols, gal_list_str_t *comments, int tableformat, char *filename, char *extname); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_FITS_H__ */ gnuastro-0.5/lib/gnuastro/dimension.h0000644000175000017500000005212613176441456014730 00000000000000/********************************************************************* multidim -- Functions for multi-dimensional operations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_MULTIDIM_H__ #define __GAL_MULTIDIM_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /************************************************************************/ /******************** Info **********************/ /************************************************************************/ size_t gal_dimension_total_size(size_t ndim, size_t *dsize); size_t * gal_dimension_increment(size_t ndim, size_t *dsize); size_t gal_dimension_num_neighbors(size_t ndim); /************************************************************************/ /******************** Coordinates **********************/ /************************************************************************/ #define GAL_DIMENSION_FLT_TO_INT(FLT) ( (FLT)-(long)(FLT) > 0.5f \ ? (long)(FLT)+1 : (long)(FLT) ) void gal_dimension_add_coords(size_t *c1, size_t *c2, size_t *out, size_t ndim); size_t gal_dimension_coord_to_index(size_t ndim, size_t *dsize, size_t *coord); void gal_dimension_index_to_coord(size_t index, size_t ndim, size_t *dsize, size_t *coord); /************************************************************************/ /******************** Distances **********************/ /************************************************************************/ size_t gal_dimension_dist_manhattan(size_t *a, size_t *b, size_t ndim); /************************************************************************/ /******************** Neighbors **********************/ /************************************************************************/ /* Purpose ------- This macro will allow you to do a fixed operation on the neighbors of an element. The identifier for the element is its dimension-agnostic index (distance from start of array). It is defined as a macro (and not a function) it is often necessary to loop over a very large number of pixels/indexs and the number of neighbors differs (in different dimensions and on the edges of the image). Usage ----- The inputs are: `index': The index of the desired point. `ndim': The number of dimensions in the dataset. `dsize': The size of the dataset along each dimension (C order). `connectivity': The connectivity of the neighbors. This is a single integer with a value between `1' and `ndim' (it is irrelevant for a 1D dataset). Below, the case for 3D data is shown. Each `dn' corresponds to `dinc[n]'. See `dinc' below for the `dinc' values. `1': At most ONE addition/subtraction. In 1D: only the first line should be used. In 2D, this is 4 connectivity. In 3D all the elements that share an 2D-face with the cube at index `i'. i - d0 i + d0 (1D, 2D & 3D) i - d1 i + d1 (2D & 3D) i - d2 i + d2 (3D) `2': At most TWO additions/subtractions. In 2D: 8 connectivity. In 3D: all elements that share a 1D edge with the cube at index `i'. i - d0 - d1 i - d0 + d1 (2D & 3D) i + d0 - d1 i + d0 + d1 (2D & 3D) i - d0 - d2 i - d0 + d2 (3D) i + d0 - d2 i + d0 + d2 (3D) i - d1 - d2 i - d1 + d2 (3D) i + d1 - d2 i + d1 + d2 (3D) `3': At most THREE additions/subtractions (only for 3D and higher dimensions). All cubes that share a 0-D vertex with the cube at index `i'. i - d0 - d1 - d2 i - d0 - d1 + d2 i - d0 + d1 - d2 i - d0 + d1 + d2 i + d0 - d1 - d2 i + d0 - d1 + d2 i + d0 + d1 - d2 i + d0 + d1 + d2 `dinc': An array keeping the length necessary to increment along each dimension. You can make this array with the following function: size_t *dinc=gal_dimension_increment(ndim, dsize); Don't forget to free it afterwards. `operation': Any C operation. `nind' is a `size_t' type variable that is defined by this macro and will have the index of each neighbor. You can use this `nind' for any processing that you like on the neighbor. Note that `op' will be repeated the number of times there is a neighbor. Implementation -------------- To be most efficient (avoid as many `if's as possible), we will start parsing the neighbors from the fastest dimension. When-ever the element is on the edge of the dataset in any dimension, we will store it in a bit-wise array (one bit for each dimension, to mark if it is on the edge (either side 1, or in the middle 0). Far many more elements will be in the middle, so there is no problem to check the edge. The good thing with a bit-array is that it can take one register on the CPU and stay there until the end. But if we want to have an array of values, multiple registers will be necessary. The bit information is in two two-byte spaces, so in theory, this works for 16 dimensions. */ #define GAL_DIMENSION_NEIGHBOR_OP(index, ndim, dsize, connectivity, \ dinc, operation) { \ uint32_t gdn_bitstr=0; \ size_t nind, gdn_ind=index; \ uint8_t gdn_D, *gdn_is_start, *gdn_is_end, *gdn_is_edge, gdn_one=1; \ \ /* A small sanity check. */ \ if(connectivity>ndim) \ error(EXIT_FAILURE, 0, "%s: connectivity value (%d) is larger " \ "than the number of dimensions (%zu)", __func__, \ (int)connectivity, ndim); \ \ /* Initialize the start/end. */ \ gdn_is_start=(uint8_t *)(&gdn_bitstr); \ gdn_is_end=(uint8_t *)(&gdn_bitstr)+1; \ \ /* Start with the slowest dimension and see if it is on the edge */ \ /* or not, similar to `gal_dimension_index_to_coord'. In the */ \ /* process, also fill the `connectivity==1' neighbors. */ \ for(gdn_D=0;gdn_D1 && ndim>1) \ { \ /* Finalize `is_edge' (bit value 1 for respective dim.). */ \ gdn_is_edge=(uint8_t *)(&gdn_bitstr)+2; \ *gdn_is_edge = *gdn_is_start | *gdn_is_end; \ \ /* Shared between 2D and 3D datasets. */ \ if(*gdn_is_edge) \ { /* NOTE: these are bitwise operators, not conditionals. */ \ if( !( *gdn_is_start & ( gdn_one | gdn_one<<1 ) ) ) \ { nind=(index) - (dinc)[0] - (dinc)[1]; {operation;}; } \ if( !( *gdn_is_start & gdn_one ) \ && !( *gdn_is_end & gdn_one<<1 ) ) \ { nind=(index) - (dinc)[0] + (dinc)[1]; {operation;}; } \ if( !( *gdn_is_end & gdn_one ) \ && !( *gdn_is_start & gdn_one<<1 ) ) \ { nind=(index) + (dinc)[0] - (dinc)[1]; {operation;}; } \ if( !( *gdn_is_end & ( gdn_one | gdn_one<<1 ) ) ) \ { nind=(index) + (dinc)[0] + (dinc)[1]; {operation;}; } \ } \ else \ { \ nind=(index) - (dinc)[0] - (dinc)[1]; {operation;}; \ nind=(index) - (dinc)[0] + (dinc)[1]; {operation;}; \ nind=(index) + (dinc)[0] - (dinc)[1]; {operation;}; \ nind=(index) + (dinc)[0] + (dinc)[1]; {operation;}; \ } \ \ /* Only for 3D datasets. */ \ if(ndim>2) \ { \ /* Connectivity == 2. */ \ if(*gdn_is_edge) \ for(gdn_D=0;gdn_D<2;++gdn_D) \ { \ if( !( *gdn_is_start & ( gdn_one<2) \ { \ if(*gdn_is_edge) \ { \ if( !*gdn_is_start ) \ { nind=(index) - (dinc)[0] - (dinc)[1] - (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_start & gdn_one) \ && !(*gdn_is_start & gdn_one<<1) \ && !(*gdn_is_end & gdn_one<<2)) \ { nind=(index) - (dinc)[0] - (dinc)[1] + (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_start & gdn_one) \ && !(*gdn_is_end & gdn_one<<1) \ && !(*gdn_is_start & gdn_one<<2)) \ { nind=(index) - (dinc)[0] + (dinc)[1] - (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_start & gdn_one) \ && !(*gdn_is_end & gdn_one<<1) \ && !(*gdn_is_end & gdn_one<<2)) \ { nind=(index) - (dinc)[0] + (dinc)[1] + (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_end & gdn_one) \ && !(*gdn_is_start & gdn_one<<1) \ && !(*gdn_is_start & gdn_one<<2)) \ { nind=(index) + (dinc)[0] - (dinc)[1] - (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_end & gdn_one) \ && !(*gdn_is_start & gdn_one<<1) \ && !(*gdn_is_end & gdn_one<<2)) \ { nind=(index) + (dinc)[0] - (dinc)[1] + (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_end & gdn_one) \ && !(*gdn_is_end & gdn_one<<1) \ && !(*gdn_is_start & gdn_one<<2)) \ { nind=(index) + (dinc)[0] + (dinc)[1] - (dinc)[2]; \ {operation;}; } \ \ if( !*gdn_is_end ) \ { nind=(index) + (dinc)[0] + (dinc)[1] + (dinc)[2]; \ {operation;}; } \ } \ else \ { \ nind=(index) - (dinc)[0] - (dinc)[1] - (dinc)[2]; \ {operation;}; \ nind=(index) - (dinc)[0] - (dinc)[1] + (dinc)[2]; \ {operation;}; \ nind=(index) - (dinc)[0] + (dinc)[1] - (dinc)[2]; \ {operation;}; \ nind=(index) - (dinc)[0] + (dinc)[1] + (dinc)[2]; \ {operation;}; \ nind=(index) + (dinc)[0] - (dinc)[1] - (dinc)[2]; \ {operation;}; \ nind=(index) + (dinc)[0] - (dinc)[1] + (dinc)[2]; \ {operation;}; \ nind=(index) + (dinc)[0] + (dinc)[1] - (dinc)[2]; \ {operation;}; \ nind=(index) + (dinc)[0] + (dinc)[1] + (dinc)[2]; \ {operation;}; \ } \ } \ } \ } \ \ /* For a check. */ \ /* printf("\nEdge bit flags: "); */ \ /* gal_data_bit_print_stream(&gdn_bitstr, 3); printf("\n"); */ \ } __END_C_DECLS /* From C++ preparations */ #endif gnuastro-0.5/lib/gnuastro/data.h0000644000175000017500000002765213161027175013652 00000000000000/********************************************************************* data -- Structure and functions to represent/work with data This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_DATA_H__ #define __GAL_DATA_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include #include /* When we are within Gnuastro's building process, `IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular the `restrict' replacement) is kept in `config.h' (top source directory). When building a user's programs, this information is kept in `gnuastro/config.h'. Note that all `.c' files in Gnuastro's source must start with the inclusion of `config.h' and that `gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro). */ #ifndef IN_GNUASTRO_BUILD #include #endif #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Flag values for the dataset. Note that these are bit-values, so to be more clear, we'll use hexadecimal notation: `0x1' (=1), `0x2' (=2), `0x4' (=4), `0x8' (=8), `0x10' (=16), `0x20' (=32) and so on. */ /* Number of bytes in the unsigned integer hosting the bit-flags (`flag' element) of `gal_data_t'. */ #define GAL_DATA_FLAG_SIZE 1 /* Bit 0: The has-blank flag has been checked, so a flag value of 0 for the blank flag is trustable. This can be very useful to avoid repetative checks when the necessary value of the bit is 0. */ #define GAL_DATA_FLAG_BLANK_CH 0x1 /* Bit 1: Dataset contains blank values. */ #define GAL_DATA_FLAG_HASBLANK 0x2 /* Bit 2: Sorted flags have been checked, see GAL_DATA_FLAG_BLANK_CH. */ #define GAL_DATA_FLAG_SORT_CH 0x4 /* Bit 3: Dataset is sorted and increasing. */ #define GAL_DATA_FLAG_SORTED_I 0x8 /* Bit 4: Dataset is sorted and decreasing. */ #define GAL_DATA_FLAG_SORTED_D 0x10 /* Maximum internal flag value. Higher-level flags can be defined with the bitwise shift operators on this value to define internal flags for libraries/programs that depend on Gnuastro without causing any possible conflict with the internal flags or having to check the values manually on every release. */ #define GAL_DATA_FLAG_MAXFLAG GAL_DATA_FLAG_SORTED_D /* Main data structure. mmap (keep data outside of RAM) ------------------------------- `mmap' is C's facility to keep the data on the HDD/SSD instead of inside the RAM. This can be very useful for large data sets which can be very memory intensive. Ofcourse, the speed of operation greatly decreases when defining not using RAM, but that is worth it because increasing RAM might not be possible. So in `gal_data_t' when the size of the requested array (in bytes) is larger than a certain minimum size (in bytes), Gnuastro won't write the array in memory but on non-volatile memory (like HDDs and SSDs) as a file in the `./.gnuastro' directory of the directory it was run from. - If mmapname==NULL, then the array is allocated (using malloc, in the RAM), otherwise its is mmap'd (is actually a file on the ssd/hdd). - minmapsize is stored in the data structure to allow any derivative data structures to follow the same number and decide if they should be mmap'd or allocated. - `minmapsize' == 0: array is definitely mmap'd. - `minmapsize' == -1: array is definitely in RAM. block (work with only a subset of the data) ------------------------------------------- In many contexts, it is desirable to slice the data set into subsets or tiles, not necessarily overlapping. In such a way that you can work on each independently. One option is to copy that region to a separate allocated space, but in many contexts this isn't necessary and infact can be a big burden on CPU/Memory usage. The `block' pointer in `gal_data_t' is defined for situations where allocation is not necessary: you just want to read the data or write to it independently, or in coordination with, other regions of the dataset. Added with parallel processing, this can greatly improve the time/memory consumption. See the figure below for example: assume the larger box is a contiguous block of memory that you are interpretting as a 2D array. But you only want to work on the region marked by the smaller box. tile->block = larger --------------------------- | | | tile | | ---------- | | | | | | |_ | | | |*| | | | ---------- | |_ | |*| | --------------------------- To use `gal_data_t's block concept, you allocate a `gal_data_t *tile' which is initialized with the pointer to the first element in the sub-array (as its `array' argument). Note that this is not necessarily the first element in the larger array. You can set the size of the tile along with the initialization as you please. Recall that, when given a non-NULL pointer as `array', `gal_data_initialize' (and thus `gal_data_alloc') do not allocate any space and just uses the given pointer for the new `array' element of the `gal_data_t'. So your `tile' data structure will not be pointing to a separately allocated space. After the allocation is done, you just point `tile->block' to the `gal_data_t' which hosts the larger array. Afterwards, the programs that take in the `sub' array can check the `block' pointer to see how to deal with dimensions and increments (strides) while working on the `sub' datastructure. For example to increment along the vertical dimension, the program must look at index i+W (where `W' is the width of the larger array, not the tile). Since the block structure is defined as a pointer, arbitrary levels of tesselation/griding are possible. Therefore, just like a linked list, it is important to have the `block' pointer of the largest dataset set to NULL. Normally, you won't have to worry about this, because `gal_data_initialize' (and thus `gal_data_alloc') will set it to NULL by default (just remember not to change it). You can then only change the `block' element for the tiles you define over the allocated space. In Gnuastro, there is a separate library for tiling operations called `tile.h', see the functions there for tools to effectively use this feature. This approach to dealing with parts of a larger block was inspired from the way the GNU Scientific Library does it in the "Vectors and Matrices" chapter. */ typedef struct gal_data_t { /* Basic information on array of data. */ void *restrict array; /* Array keeping data elements. */ uint8_t type; /* Type of data (see `gnuastro/type.h'). */ size_t ndim; /* Number of dimensions in the array. */ size_t *dsize; /* Size of array along each dimension. */ size_t size; /* Total number of data-elements. */ char *mmapname; /* File name of the mmap. */ size_t minmapsize; /* Minimum number of bytes to mmap the array. */ /* WCS information. */ int nwcs; /* for WCSLIB: no. coord. representations. */ struct wcsprm *wcs; /* WCS information for this dataset. */ /* Content descriptions. */ uint8_t flag; /* Flags: currently 8-bits are enough. */ int status; /* Context specific value for the dataset. */ char *name; /* e.g., EXTNAME, or column, or keyword. */ char *unit; /* Units of the data. */ char *comment; /* A more detailed description of the data. */ /* For printing */ int disp_fmt; /* See `gal_table_diplay_formats'. */ int disp_width; /* Width of space to print in ASCII. */ int disp_precision; /* Precision to print in ASCII. */ /* Pointers to other data structures. */ struct gal_data_t *next; /* To use it as a linked list if necessary. */ struct gal_data_t *block; /* `gal_data_t' of hosting block, see above. */ } gal_data_t; /*********************************************************************/ /************* Size and allocation *******************/ /*********************************************************************/ int gal_data_dsize_is_different(gal_data_t *first, gal_data_t *second); void * gal_data_ptr_increment(void *pointer, size_t increment, uint8_t type); size_t gal_data_ptr_dist(void *earlier, void *later, uint8_t type); void * gal_data_malloc_array(uint8_t type, size_t size, const char *funcname, const char *varname); void * gal_data_calloc_array(uint8_t type, size_t size, const char *funcname, const char *varname); void gal_data_initialize(gal_data_t *data, void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, char *name, char *unit, char *comment); gal_data_t * gal_data_alloc(void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, char *name, char *unit, char *comment); void gal_data_free_contents(gal_data_t *data); void gal_data_free(gal_data_t *data); /*********************************************************************/ /************* Array of data structures ******************/ /*********************************************************************/ gal_data_t * gal_data_array_calloc(size_t size); void gal_data_array_free(gal_data_t *dataarr, size_t num, int free_array); /************************************************************* ************** Copying *************** *************************************************************/ gal_data_t * gal_data_copy(gal_data_t *in); gal_data_t * gal_data_copy_to_new_type(gal_data_t *in, uint8_t newtype); gal_data_t * gal_data_copy_to_new_type_free(gal_data_t *in, uint8_t newtype); void gal_data_copy_to_allocated(gal_data_t *in, gal_data_t *out); gal_data_t * gal_data_copy_string_to_number(char *string); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_DATA_H__ */ gnuastro-0.5/lib/gnuastro/cosmology.h0000644000175000017500000000620413173367042014745 00000000000000/********************************************************************* Cosmological calculations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_COSMOLOGY_H__ #define __GAL_COSMOLOGY_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Age of the universe (in Gyrs). */ double gal_cosmology_age(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0); /* Proper distance to z (Mpc). */ double gal_cosmology_proper_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0); /* Comoving volume over 4pi stradian to z (Mpc^3). */ double gal_cosmology_comoving_volume(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0); /* Critical density at redshift z in units of g/cm^3. */ double gal_cosmology_critical_density(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0); /* Angular diameter distance to z (Mpc). */ double gal_cosmology_angular_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0); /* Luminosity distance to z (Mpc). */ double gal_cosmology_luminosity_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0); /* Distance modulus at z (no units). */ double gal_cosmology_distance_modulus(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0); /* Convert apparent to absolute magnitude. */ double gal_cosmology_to_absolute_mag(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_COSMOLOGY_H__ */ gnuastro-0.5/lib/gnuastro/convolve.h0000644000175000017500000000377513136321740014571 00000000000000/********************************************************************* Convolve -- Convolve the dataset with a given kernel. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_CONVOLVE_H__ #define __GAL_CONVOLVE_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ gal_data_t * gal_convolve_spatial(gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, int convoverch); void gal_convolve_spatial_correct_ch_edge(gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, gal_data_t *tocorrect); __END_C_DECLS /* From C++ preparations */ #endif gnuastro-0.5/lib/gnuastro/box.h0000644000175000017500000000426613216276304013526 00000000000000/********************************************************************* Box -- Define bounding and overlapping boxes. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_BOX_H__ #define __GAL_BOX_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* IMPORTANT NOTE: All the axises are based on the FITS standard, NOT C. */ void gal_box_bound_ellipse_extent(double a, double b, double theta_deg, double *extent); void gal_box_bound_ellipse(double a, double b, double theta_deg, long *width); void gal_box_border_from_center(double *center, size_t ndim, long *width, long *fpixel, long *lpixel); int gal_box_overlap(long *naxes, long *fpixel_i, long *lpixel_i, long *fpixel_o, long *lpixel_o, size_t ndim); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_BOX_H__ */ gnuastro-0.5/lib/gnuastro/blank.h0000644000175000017500000000663013121462410014010 00000000000000/********************************************************************* blank -- Deal with blank values in a datasets This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_BLANK_H__ #define __GAL_BLANK_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* When we are within Gnuastro's building process, `IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular `GAL_CONFIG_SIZEOF_SIZE_T' that we need below) is kept in `config.h'. When building a user's programs, this information is kept in `gnuastro/config.h'. Note that all `.c' files in Gnuastro's source must start with the inclusion of `config.h' and that `gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro). */ #ifndef IN_GNUASTRO_BUILD #include #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Macros: */ /* Blank values: Note that for the unsigned types or small types (like char), the maximum value is considered as a blank value, since the minimum value of an unsigned type is zero and zero is often meaningful in contexts were unsigned values are used. */ #define GAL_BLANK_UINT8 UINT8_MAX #define GAL_BLANK_INT8 INT8_MIN #define GAL_BLANK_UINT16 UINT16_MAX #define GAL_BLANK_INT16 INT16_MIN #define GAL_BLANK_UINT32 UINT32_MAX #define GAL_BLANK_INT32 INT32_MIN #define GAL_BLANK_UINT64 UINT64_MAX #define GAL_BLANK_INT64 INT64_MIN #define GAL_BLANK_FLOAT32 NAN #define GAL_BLANK_FLOAT64 NAN #define GAL_BLANK_STRING "n/a" #if GAL_CONFIG_SIZEOF_SIZE_T == 4 #define GAL_BLANK_SIZE_T GAL_BLANK_UINT32 #else #define GAL_BLANK_SIZE_T GAL_BLANK_UINT64 #endif /* Functions. */ void gal_blank_write(void *pointer, uint8_t type); void * gal_blank_alloc_write(uint8_t type); void gal_blank_initialize(gal_data_t *input); char * gal_blank_as_string(uint8_t type, int width); int gal_blank_present(gal_data_t *input, int updateflag); gal_data_t * gal_blank_flag(gal_data_t *data); void gal_blank_remove(gal_data_t *data); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_DATA_H__ */ gnuastro-0.5/lib/gnuastro/binary.h0000644000175000017500000000717313156610402014214 00000000000000/********************************************************************* binary -- Work on binary (0 and 1 valued) datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_BINARY_H__ #define __GAL_BINARY_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include #include /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* The binary functions will be working on a `uint8_t' type dataset with values of 1 or 0 (no other pixel will be touched). However, in some cases, it is necessary to put temporary values in each element during the processing of the functions. So if your input datasets have values other than 0 and 1 that you don't want these functions to work on, be sure they are not equal to this value. It is chosen as the immediate value before the maximum value for this type (which is the blank value for this type), so blank values will also not be touched by this function. */ #define GAL_BINARY_TMP_VALUE GAL_BLANK_UINT8-1 /*********************************************************************/ /***************** Erosion and dilation ********************/ /*********************************************************************/ gal_data_t * gal_binary_erode(gal_data_t *input, size_t num, int connectivity, int inplace); gal_data_t * gal_binary_dilate(gal_data_t *input, size_t num, int connectivity, int inplace); gal_data_t * gal_binary_open(gal_data_t *input, size_t num, int connectivity, int inplace); /*********************************************************************/ /***************** Connected components ********************/ /*********************************************************************/ size_t gal_binary_connected_components(gal_data_t *binary, gal_data_t **out, int connectivity); gal_data_t * gal_binary_connected_adjacency_matrix(gal_data_t *adjacency, size_t *numnewlabs); /*********************************************************************/ /***************** Fill holes ********************/ /*********************************************************************/ void gal_binary_fill_holes(gal_data_t *input, int connectivity, size_t maxsize); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_DATA_H__ */ gnuastro-0.5/lib/gnuastro/arithmetic.h0000644000175000017500000001377713215601241015065 00000000000000/********************************************************************* Arithmetic -- Preform arithmetic operations on datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_ARITHMETIC_H__ #define __GAL_ARITHMETIC_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include /* When we are within Gnuastro's building process, `IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular `GAL_CONFIG_ARITH_CHAR' and the rest of the types that we needed in the arithmetic function) is kept in `config.h'. When building a user's programs, this information is kept in `gnuastro/config.h'. Note that all `.c' files must start with the inclusion of `config.h' and that `gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro).*/ #ifndef IN_GNUASTRO_BUILD #include #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Arithmetic flags. */ #define GAL_ARITHMETIC_INPLACE 0x1 #define GAL_ARITHMETIC_FREE 0x2 #define GAL_ARITHMETIC_NUMOK 0x4 #define GAL_ARITHMETIC_FLAGS_ALL ( GAL_ARITHMETIC_INPLACE \ | GAL_ARITHMETIC_FREE \ | GAL_ARITHMETIC_NUMOK ) /* Identifiers for each operator. */ enum gal_arithmetic_operators { GAL_ARITHMETIC_OP_INVALID, /* Invalid (=0 by C standard). */ GAL_ARITHMETIC_OP_PLUS, /* + */ GAL_ARITHMETIC_OP_MINUS, /* - */ GAL_ARITHMETIC_OP_MULTIPLY, /* * */ GAL_ARITHMETIC_OP_DIVIDE, /* / */ GAL_ARITHMETIC_OP_MODULO, /* % */ GAL_ARITHMETIC_OP_LT, /* < */ GAL_ARITHMETIC_OP_LE, /* <= */ GAL_ARITHMETIC_OP_GT, /* > */ GAL_ARITHMETIC_OP_GE, /* >= */ GAL_ARITHMETIC_OP_EQ, /* == */ GAL_ARITHMETIC_OP_NE, /* != */ GAL_ARITHMETIC_OP_AND, /* && */ GAL_ARITHMETIC_OP_OR, /* || */ GAL_ARITHMETIC_OP_NOT, /* ! */ GAL_ARITHMETIC_OP_ISBLANK, /* Similar to isnan() for floats. */ GAL_ARITHMETIC_OP_WHERE, /* ?: */ GAL_ARITHMETIC_OP_BITAND, /* & */ GAL_ARITHMETIC_OP_BITOR, /* | */ GAL_ARITHMETIC_OP_BITXOR, /* ^ */ GAL_ARITHMETIC_OP_BITLSH, /* << */ GAL_ARITHMETIC_OP_BITRSH, /* >> */ GAL_ARITHMETIC_OP_BITNOT, /* ~ */ GAL_ARITHMETIC_OP_ABS, /* abs() */ GAL_ARITHMETIC_OP_POW, /* pow() */ GAL_ARITHMETIC_OP_SQRT, /* sqrt() */ GAL_ARITHMETIC_OP_LOG, /* log() */ GAL_ARITHMETIC_OP_LOG10, /* log10() */ GAL_ARITHMETIC_OP_MINVAL, /* Minimum value of array. */ GAL_ARITHMETIC_OP_MAXVAL, /* Maximum value of array. */ GAL_ARITHMETIC_OP_NUMVAL, /* Number of (non-blank) elements. */ GAL_ARITHMETIC_OP_SUMVAL, /* Sum of (non-blank) elements. */ GAL_ARITHMETIC_OP_MEANVAL, /* Mean value of array. */ GAL_ARITHMETIC_OP_STDVAL, /* Standard deviation value of array. */ GAL_ARITHMETIC_OP_MEDIANVAL, /* Median value of array. */ GAL_ARITHMETIC_OP_MIN, /* Minimum per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_MAX, /* Maximum per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_NUM, /* Non-blank number of pixels in arrays. */ GAL_ARITHMETIC_OP_SUM, /* Sum per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_MEAN, /* Mean per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_STD, /* STD per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_MEDIAN, /* Median per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_TO_UINT8, /* Convert to uint8_t. */ GAL_ARITHMETIC_OP_TO_INT8, /* Convert to int8_t. */ GAL_ARITHMETIC_OP_TO_UINT16, /* Convert to uint16_t. */ GAL_ARITHMETIC_OP_TO_INT16, /* Convert to int16_t. */ GAL_ARITHMETIC_OP_TO_UINT32, /* Convert to uint32_t. */ GAL_ARITHMETIC_OP_TO_INT32, /* Convert to int32_t. */ GAL_ARITHMETIC_OP_TO_UINT64, /* Convert to uint64_t. */ GAL_ARITHMETIC_OP_TO_INT64, /* Convert to int64_t. */ GAL_ARITHMETIC_OP_TO_FLOAT32, /* Convert to float32. */ GAL_ARITHMETIC_OP_TO_FLOAT64, /* Convert to float64. */ GAL_ARITHMETIC_OP_LAST_CODE, /* Last code of the library operands. */ }; gal_data_t * gal_arithmetic(int operator, int flags, ...); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_ARITHMETIC_H__ */ gnuastro-0.5/lib/gnuastro/config.h0000444000175000017500000000523613217220212014163 00000000000000/********************************************************************* Functions dealing with general aspects of all Gnuastro. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_CONFIG_H__ #define __GAL_CONFIG_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* The restrict keyword might not be present on some systems, so we are redefining it here based on the checks in `configure.ac', see there for more comments. */ #define restrict __restrict /* Configuration macros: */ #define GAL_CONFIG_VERSION "0.5" #define GAL_CONFIG_HAVE_LIBGIT2 1 #define GAL_CONFIG_HAVE_WCSLIB_VERSION 1 #define GAL_CONFIG_HAVE_PTHREAD_BARRIER 1 #define GAL_CONFIG_BIN_OP_UINT8 @HAVE_BIN_OP_UINT8@ #define GAL_CONFIG_BIN_OP_INT8 @HAVE_BIN_OP_INT8@ #define GAL_CONFIG_BIN_OP_UINT16 @HAVE_BIN_OP_UINT16@ #define GAL_CONFIG_BIN_OP_INT16 @HAVE_BIN_OP_INT16@ #define GAL_CONFIG_BIN_OP_UINT32 @HAVE_BIN_OP_UINT32@ #define GAL_CONFIG_BIN_OP_INT32 @HAVE_BIN_OP_INT32@ #define GAL_CONFIG_BIN_OP_UINT64 @HAVE_BIN_OP_UINT64@ #define GAL_CONFIG_BIN_OP_INT64 @HAVE_BIN_OP_INT64@ #define GAL_CONFIG_BIN_OP_FLOAT32 @HAVE_BIN_OP_FLOAT32@ #define GAL_CONFIG_BIN_OP_FLOAT64 @HAVE_BIN_OP_FLOAT64@ #define GAL_CONFIG_SIZEOF_LONG 8 #define GAL_CONFIG_SIZEOF_SIZE_T 8 /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_CONFIG_H__ */ gnuastro-0.5/.autom4te.cfg0000644000175000017500000000176012722534072012452 00000000000000# Configuration file for autom4te # =============================== # autom4te is used to create the familiar `./configure' script from # configure.ac (hand written by Gnuastro developers). autom4te is # called during the bootstrapping process (see README-hacking, or the # "Bootstrapping" section in the manual). # # To speed up the process, a directory (`autom4te.cache') is created # which keeps cache information which can speed up its next call. But # this directory is built in the top Gnuastro directory which just # redundantly fills it up with a non-edited directory. So through this # configuration file, we are asking autom4te to make its cache # directory within the bootstrapped directory to keep things on the # top directory clean. # We are using the Autoconf manual's "Customizing autom4te" and # "Invoking autom4te" sections as a reference for this file. begin-language: "Autoconf-without-aclocal-m4" args: --cache=./bootstrapped/autom4te.cache end-language: "Autoconf-without-aclocal-m4"gnuastro-0.5/tmpfs-config-make0000755000175000017500000000665413213252016013404 00000000000000#! /bin/sh # This script will configure and build Gnuastro in parallel within a # temporary tmpfs directory in the RAM. Please see the "Configure and build # in RAM" section of the Gnuastro book/documentation for a full # explanation. # # Original author: Mohammad Akhlaghi # Contributing author(s): # Mosè Giordano # Copyright (C) 2016, Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Set the variables: NUM_THREADS=8 TMPDIR=/dev/shm debug_noshared=0 # Check if TMPDIR exists if [ ! -d $TMPDIR ]; then echo "$TMPDIR doesn't exist. Aborted." exit 1 fi # Keep the address of this source directory (where this script is being run # from) which we will need later. srcdir=$(pwd) # Set the build directory name in tmpfs. If the .version file exists, use # it to allow multiple version builds there (which might happen during # development). basedir=$(basename -- "$srcdir") if [ -f .version ]; then build_dir=$TMPDIR/"$basedir"-$(cat .version) else build_dir=$TMPDIR/"$basedir" fi # Make the build directory in tmpfs (if it doesn't already exist). if [ ! -d $build_dir ]; then mkdir $build_dir fi # Make a symbolic link to the tmpfs build directory for users to easily # access the built files and also follow the progress. We are first # deleting any existing symbolic link and remaking it since the possible # deletion of $build_dir during the development can complicate the # pre-existing symbolic link. build_sym=build if [ -h $build_sym ]; then # Delete a harmless symbolic link, if present. rm $build_sym fi # Create the link only if the symbolic link doesn't exist. if [ ! -e $build_sym ]; then ln -s $build_dir $build_sym else echo "$build_sym already exists here and is not a symbolic link." echo "Aborted." exit 1 fi # Go into the build directory to start the configure and/or build: cd $build_dir # If a 'Makefile' doesn't exist, then configure Gnuastro. # # FOR DEBUGGING: uncomment the second half of this line. Gnuastro uses GNU # Libtool to build shared libraries for highly portable and maintainable # usage on a wide variety of systems. While this is great for binaries, # shared libraries can be a pain when debuggin. For this reason, # compilation of shared libraries can be turned off by specifying the # --disable-shared option to configure. With static libraries, compilation # (the `make' command) will also significantly speed up. Also, by default # (in `configure.ac'), we have set optimization flags which have to be # cancelled in debugging. if [ ! -f Makefile ]; then if [ x$debug_noshared = x1 ]; then $srcdir/configure --srcdir=$srcdir CFLAGS="-g -O0" --disable-shared else $srcdir/configure --srcdir=$srcdir fi fi # Build Gnuastro in that directory with the specified number of threads make -kj$NUM_THREADS gnuastro-0.5/.version0000644000175000017500000000000413217220023011611 000000000000000.5 gnuastro-0.5/.dir-locals.el0000644000175000017500000000151013121462410012561 00000000000000;; This files contains Emacs Directory Local Variables. ;; ;; Emacs is an extensible, customizable, free/libre text editor. It ;; allows specification of certain settings that will be applied to ;; all files in current directory and its subdirectories. This is ;; useful in order to automatically enforce certain coding conventions ;; for all contributors of Gnuastro, like the maximum length of lines ;; or the number of spaces to be used for indentation. ;; ;; For more information see (info "(emacs) Directory Variables") ((nil (indent-tabs-mode . nil) ;; No tabs as indentation (fill-column . 75)) ;; 75-character wide lines (c-mode (c-basic-offset . 2) ;; 2 spaces of indentation (c-file-style . "gnu")) ;; GNU style for braces (makefile-mode (indent-tabs-mode . t)) ;; Real TABs are important in makefiles ) gnuastro-0.5/genauthors0000755000175000017500000000627413121462410012251 00000000000000#! /bin/sh # # Generate a list of authors from the git repository, it will only # actually do anything if a .git file exists. Run like this: # # ./genauthors top/bin/dir # # Note that some authors might have changed their email addresses over # the course of their contributions to Gnuastro. Fortunately Git has a # great tool for that: the .mailmap file. It has already been included # in the source code and if any author changes their email address or # would want their name to be printed differently here, please use # that file. See the git-shortlog manpage for a complete explanation # of all the possible ways to do this. # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2015, Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # Gnuastro is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gnuastro. If not, see . # Initial settings: set -o nounset # Stop if a variable is not set. set -o errexit # Stop if a program returns false. # Only do the job if a .git directory exists (recall that this script # is also present in the tar-ball with no .git directory and might be # run from there) if [ ! -d "$1/.git" ]; then echo "There is no Git repository in the source directory." echo "AUTHORS cannot be generated." exit 0 fi # Print a status report, since this will be run along with the large # number of bootstrap operations, it is best to tell the users since # it might take a few seconds. echo "Generating AUTHORS from the version controlled source..." # Make sure the .mailmap file is present in this directory, so Git can fix # the different email addresses and names of one person. Note that while # this is in the top source directory, it is possible for the source and # build directories to be different, and we have to be prepared for that. if [ ! -f .mailmap ]; then ln -s $1/.mailmap .mailmap fi # Set the version number. Note that this script is also run at the start of # the bootstrapping process. At that point we don't have the `.version' # file, so we will just rely on `.git describe'. Later during `make', this # scripot will be run again to set it using `git-version-gen'. if [ -f "$1/.version" ]; then gnuastroversion="Gnuastro "$(cat "$1/.version") else gnuastroversion=$(git --git-dir=$1/.git describe) fi # Print the top of the AUTHORS file. echo "GNU Astronomy Utilities (Gnuastro) authors ========================================== Generated for $gnuastroversion. Ordered by number of commits in the Git project history. " > $1/AUTHORS # Generate the aggregate list git --git-dir=$1/.git shortlog --summary --email --no-merges \ --numbered >> $1/AUTHORS gnuastro-0.5/THANKS0000644000175000017500000000637113215601241011056 00000000000000GNU Astronomy Utilities Acknowledgments ======================================= The following people and institutions who contributed to Gnuastro indirectly (not by actually submitting code) are listed here. For the list of Gnuastro code/documentation authors (people who have contributed actual code/text as commits in the version controlled history of Gnuastro), please see the `AUTHORS' file in the same directory. People ------ The following people provided valuable feedback (suggestions, ideas) to the authors of Gnuastro. We hereby gratefully acknowledge their help and support in Gnuastro. The list is ordered alphabetically (by family name). Marjan Akbari mrjakbari@gmail.com Roland Bacon roland.bacon@univ-lyon1.fr Karl Berry karl@gnu.org Leindert Boogaard boogaard@strw.leidenuniv.nl Nicolas Bouché nicolas.bouche@irap.omp.eu Fernando Buitrago fbuitrago@oal.ul.pt Adrian Bunk bunk@debian.org Rosa Calvi rcalvi@iac.es Benjamin Clement benjamin.clement@univ-lyon1.fr Antonio Diaz Diaz antonio@gnu.org Thérèse Godefroy godef.th@free.fr Madusha Gunawardhana gunawardhana@strw.leidenuniv.nl Stephen Hamer stephen.hamer@univ-lyon1.fr Takashi Ichikawa ichikawa@astr.tohoku.ac.jp Raúl Infante Sainz infantesainz@gmail.com Brandon Invergo brandon@gnu.org Aurélien Jarno aurelien.jarno@univ-lyon1.fr Lee Kelvin l.s.kelvin@ljmu.ac.uk Mohammad-Reza Khellat moha.khe@gmail.com Floriane Leclercq floriane.leclercq@univ-lyon1.fr Alan Lefor alefor@astr.tohoku.ac.jp Guillaume Mahler guillaume.mahler@univ-lyon1.fr Francesco Montanari francesco.montanari@openmailbox.org William Pence william.pence@nasa.gov Bob Proulx bob@proulx.com Yahya Sefidbakht y.sefidbakht@gmail.com Alejandro Serrano Borlaff asborlaff@ucm.es Lee Spitler lee.spitler@mq.edu.au Richard Stallman rms@gnu.org Ole Streicher olebole@debian.org Alfred M. Szmidt ams@gnu.org Ignacio Trujillo trujillo@iac.es David Valls-Gabaud david.valls-gabaud@obspm.fr Christopher Willmer cnaw@as.arizona.edu Teams ----- The members of the following teams also provided great help and support. GNU French Translation Team: https://savannah.gnu.org/projects/www-fr Institutions ------------ Host institutions of Gnuastro's developers. Ministry of education, culture, sports, science and technology, Japan. Tohoku University, Sendai, Japan. University of Salento, Lecce, Italy. Centre de Recherche Astrophysique de Lyon, France Centre national de la recherche scientifique, France gnuastro-0.5/NEWS0000644000175000017500000011737213217176176010666 00000000000000GNU Astronomy Utilities NEWS -*- outline -*- * Noteworthy changes in release 0.5 (library 3.0.0) (2017-12-22) [stable] ** New features Manual/Book: An extended tutorial is added showing some general applications of almost all the programs. This may be a good place to get a feeling of how Gnuastro is intended to be used and some of the programs. New Program and library: Match is a new program that will match two given inputs (currently catalogs). Its output is the re-arranged inputs with the same number of rows/records such that all the rows match. The main work is also done with the new low-level `gal_match_catalog' library function which can also be used in more generic contexts. All programs: a value of `0' to the `--numthreads' option will use the number of threads available to the system at run time. Arithmetic: The new operators `filter-median' and `filter-mean' can be used to filter (smooth) the input. The size of the filter can be set as the other operands to these operators. BuildProgram: The new `--la' option allows the identification of a different Libtool `.la' file for Libtool linking information. BuildProgram: The new `--deletecompiled' option will delete the compiled program after running it. CosmicCalculator: all the various cosmological calculations can now be requested individually in one line with a specific option added for each calculation (for example `--age' or `--luminositydist' for the age of the universe at a given redshift or the luminosity distance). Therefore the old `--onlyvolume' and `--onlyabsmagconv' options are now removed. To effectively use these new features, please review the "Invoking CosmicCalculator" section of the book. Fits: when an extension/HDU is identified on the command-line with the `--hdu' option and no operation is requested, the full list of header keywords in that HDU will be printed (as if only `--printallkeys' was called). MakeCatalog: physical nature agnostic WCS column names. Previously the first WCS axis was always assumed to be RA and the second DEC. So for example even if you had a spectrum (with X and wavelength as the two WCS dimensions), you would have to ask for `--ra' and `--dec'. The new `--w1' and `--w2' options are now generic and don't assume any particular type only their order in the FITS header. MakeCatalog now also uses the CTYPE and CUNIT keywords to set the names and units of its output columns. The `--ra' and `--dec' options are now just internal aliases for `--w1' or `--w2' which will be determined based on the input's CTYPE keyword. Also the new `--geow1', `--geow2', `--clumpsw1', `--clumpsw2', `--clumpsgeow1', `--clumpsgeow2' options replace the old options `--geora', `--geodec', `--clumpsra', `--clumpsdec', `--clumpsgeora', `--clumpsgeodec'. No alias is currently defined for the latter group. MakeCatalog: the new `--uprange' option allows you to specify a range for the random values around each object. This is useful when the noise properties of the dataset vary gradually and sampling from the whole dataset might produce biased results. NoiseChisel: with the new `--convolved' and `--convolvedhdu' options, NoiseChisel will not convolve the input any more and use the given dataset instead. In many cases, as the inputs get larger, convolution is the most time consuming step of NoiseChisel. With this option, you can greatly speed up your tests (to find the best parameters by varying them, for a given analysis). See the book for more information and examples. NoiseChisel: with the new `--widekernel' option it is now possible to use a wider kernel to identify which tiles contain signal. The rest of the steps (identifying the quantile threshold on the selected tiles and etc) are done on the dataset convolved with `--kernel' as they were before. Since it is time consuming, this is an optional feature. NoiseChisel: with the new `--qthreshtilequant' option, it is now possible to discard high-valued (outlier) tiles before estimating qthresh over the whole image. This can be useful in detecting very large diffuse/flat regions that would otherwise be detected as background (and effectively removed). NoiseChisel: the finally selected true detections are now grown based on signal contiguity, not by blind dilation. The growth process is the same as the growing of clumps to define objects. Only for true detections, the growth occurs in the noise. You can configure this growth with the `--detgrowquant' and `--detgrowmaxholesize'. With this new feature it is now possible to detect signal out to much lower surface brightness limits and the detections don't look boxy any more. Cosmology library: A new set of cosmology functions are now included in the library (declared in `gnuastro/cosmology.h'). These functions are also used in the CosmicCalculator program. `gal_table_read' can now return the number of columns matched with each input column (for example with regular expressions), a new argument has been added to allow this feature. `gal_fits_key_img_blank': returns the value that must be used in the BLANK keyword for the given type as defined by the FITS standard. `gal_txt_write' and `gal_fits_tab_write' now accept an extension name as argument to allow a name for the FITS extension they write. `gal_box_bound_ellipse_extent' will return the maximum extent of an ellipse along each axis from the ellipse center in floating point. ** Removed features Installation: The `--enable-bin-op-*' configuration options that were introduced in Gnuastro 0.3 have been removed. By managing the arithmetic functions in a better manner (a separate source file for each operator), compilation for all types (when done in parallel) takes about the same time as it took with the default (only four) types until now. MakeCatalog: `--zeropoint' option doesn't have a short option name any more. Previously it was `-z' which was confusing because `-x' and `-y' were used to refer to image coordinate positions. NoiseChisel: The `--dilate' and `--dilatengb' options have been removed. Growing of true detections is no longer done through dilation but through the `--detgrowquant' and `--detgrowmaxholesize' options (see above). ** Changed features CosmicCalculator: The redshift is no longer mandatory. When no redshift is given, it will only print the input parameters (cosmology) and abort. MakeCatalog: when the output is a FITS file, the two object and clumps catalogs will be stored as multiple extensions of a single file. Until now, two separate FITS files would be created. Plain text outputs are the same as before (two files will be created). `gal_binary_fill_holes' now accepts a `connectivity' and `maxsize' argument to specify the connectivity of the holes and the maximum size of acceptable holes to fill. `gal_fits_img_read' and `gal_fits_img_read_to_type' now also read the WCS structure of the extension/HDU in a FITS file and have two extra arguments: `hstartwcs' and `hendwcs'. With these options it is possible to limit the range of header keywords to read the WCS, similar to how they are used in `gal_wcs_read'. `gal_txt_write', `gal_table_write_log', `gal_fits_tab_write' and `gal_txt_write' don't have the `dontdelete' argument any more. The action they take if the file already exists depends on the file: for FITS, a new extension will be added and for text, they will abort with an error. `gal_tile_block_write_const_value' and `gal_tile_full_values_write' now accept a new `withblank' option to set all pixels that are blank in the tile's block to be blank in the check image. `gal_wcs_pixel_area_arcsec2' will return NaN (instead of aborting) when input is unreasonable (not two dimensions or not in units of degrees). `gal_wcs_world_to_img' and `gal_wcs_img_to_world': Until now, these two WCS conversion functions would explicitly assume RA and Dec and work based on input arrays (so for example it was also necessary to give the number of elements and etc). They now accept `gal_data_t' as input for the input coordinates, thus their API has been greatly simplified and their functionality increased. ** Bug fixes ConvertType crash when changing values (bug #52010). Arithmetic not accounting for integer blank pixels in binary operators (bug #52014). NoiseChisel segfault when memory mapping to a file (bug #52043). CFITSIO 3.42 and libcurl crash at Gnuastro configure time (bug #52152). MakeCatalog crash in upper-limit with full size label (bug #52281). NoiseChisel leaving unlabeled regions after clump growth (bug #52327). Arithmetic crash with no input tokens (bug #52422). Libtool checks only in non-current directory (bug #52427). * Noteworthy changes in release 0.4 (library 2.0.0) (2017-09-13) [stable] ** New features All programs: `.fit' is now a recognized FITS file suffix. All programs: ASCII text files (tables) created with CRLF line terminators (for example text files created in MS Windows) are now also readable as input when necessary. Arithmetic: now has a new `--globalhdu' (`-g') option which can be used once for all the input images. MakeNoise: with the new `--sigma' (`-s') option, it is now possible to directly request the noise sigma or standard deviation. When this option is called, the `--background', `--zeropoint' and other option values will be ignored. MakeProfiles: the new `--kernel' option can make a kernel image without the need to define a catalog. With this option, a catalog (or accompanying background image) must not be given. MakeProfiles: the new `--pc', `--cunit' and `--ctype' options can be used to specify the PC matrix, CUNIT and CTYPE world coordinate system keywords of the output FITS file. MakeProfiles: the new `distance' profile will save the radial distance of each pixel. This may be used to define your own profiles that are not currently supported in MakeProfiles. MakeProfiles: with the new `--mcolisbrightness' ("mcol-is-brightness") option, the `--mcol' values of the catalog will be interpretted as total brightness (sum of pixel values), not magnitude. NoiseChisel: with the new `--dilatengb' option, it is now possible to identify the connectivity of the final dilation. Library: Functions that read data from an ASCII text file (`gal_txt_table_info', `gal_txt_table_read', `gal_txt_image_read') now also operate on files with CRLF line terminators. ** Removed features ** Changed features Crop: The new `--center' option is now used to define the center of a single crop. Hence the old `--ra', `--dec', `--xc', `--yc' have been removed. This new option can take multiple values (one value for each dimension). Fractions are also acceptable. Crop: The new `--width' option is now used to define the width of a single crop. Hence the old `--iwidth', `--wwidth' were removed. The units to interpret the value to the option are specified by the `--mode' option. With the new `--width' option it is also possible to define a non-square crop (different widths along each dimension). In WCS mode, its units are no longer arcseconds but are the same units of the WCS (degrees for angles). `--width' can also accept fractions. So to set a width of 5 arcseconds, you can give it a value of `5/3600' for the angular dimensions. Crop: The new `--coordcol' option is now used to determine the catalog columns that define coordinates. Hence the old `--racol', `--deccol', `--xcol', and `--ycol' have been removed. This new option can be called multiple times and the order of its calling will be used for the column containing the center in the respective dimension (in FITS format). MakeNoise: the old `--stdadd' (`-s') option has been renamed to `--instrumental' (`-i') to be more clear. MakeProfiles: The new `--naxis' and `--shift' options can take multiple values for each dimension (separated by a comma). This replaces the old `--naxis1', `--naxis2' and `--xshift' and `--yshift' options. MakeProfiles: The new `--ccol' option can take the center coordinate columns of the catalog (in multiple calls) and the new `--mode' option is used to identify what standard to interpret them in (image or WCS). Together, these replace the old `--xcol', `--ycol', `--racol' and `--deccol'. MakeProfiles: The new `--crpix', `--crval' and `--cdelt' options now accept multiple values separated by a comma. So they replace the old `--crpix1', `--crpix2', `--crval1', `--crval2' and `--resolution' options. `gal_data_free_contents': when the input `gal_data_t' is a tile, its `array' element will not be freed. This enables safe usage of this function (and thus `gal_data_free') on tiles without worrying about the memory block associated with the tile. `gal_box_bound_ellipse' is the new name for the old `gal_box_ellipse_in_box' (to be more clear and avoid repetition of the term `box'). The input position angle is now also in degrees, not radians. `gal_box_overlap' now works on data of any dimensionality and thus also needs the number of dimensions (elements in each input array). `gal_box_border_from_center' now accepts an array of coordinates as one argument and the number of dimensions as another. This allows it to work on any dimensionality. `gal_fits_img_info' now also returns the name and units of the dataset (if they aren't NULL). So it takes two extra arguments. `gal_wcs_pixel_scale' now replaces the old `gal_wcs_pixel_scale_deg', since it doesn't only apply to degrees. The pixel scale units are defined by the units of the WCS. `GAL_TILE_PARSE_OPERATE' (only when `OTHER' is given) can now parse and operate on different datasets independent of the size of allocated block of memory (the tile sizes of `IN' and `OTHER' have to be identical, but not their allocated blocks of memory). Until now, it was necessary for the two blocks to have the same size and this is no longer the case. ** Bug fixes MakeProfiles long options on 32bit big endian systems (bug #51341). Pure rotation around pixel coordinate (0,0) (bug #51353). NoiseChisel segfault when no usable region for sky clumps (bug #51372). Pixel scale measurement when dimension scale isn't equal or doesn't decrease (bug #51385). Improper types for function code in MakeProfiles (bug #51467). Crashes on 32-bit and big-endian systems (bug #51476). Warp's align matrix when second dimension must be reversed (bug #51536). Reading BZERO for unsigned 64-bit integers (bug #51555). Arithmetic with one file and no operators (bug #51559). NoiseChisel segfault when detection contains no clumps (bug #51906). Correct size checking when allocating gal_data_t (bug #52544). * Noteworthy changes in release 0.3 (library 1.0.0) (2017-06-01) [stable] This is a full re-write of Gnuastro. Most importantly, Gnuastro now has a new generic data container (`gal_data_t'). This new container can now deal natively with all standard numeric data types, work in RAM or HDD/SSD, keep data in any dimensions and has enabled many other very useful features. Some of the most prominent of the new features are discussed below. It is strongly recommended to review the respective section of the Gnuastro manual/book for a better feeling of all the new features. As discussed below, some program names have changed, if you have a previous version of Gnuastro installed from source, it is recommended to uninstall it first (with `make uninstall' using the corresponding tarball), then install this new version. Building Gnuastro can be slow, so please build in parallel with Make's `-j8' option (to build on 8 threads). ** New programs or library features Library functions that deal with datasets now use this generic data container for inputs and outputs, significantly simplifying their API. Nearly all library functions have been re-written with much more clear names, argument lists and individual purpose. Some example library functions are shown below, also see the "Library demos" section of the book for some complete working example: -- `gal_table_read' and `gal_table_write' will read and write data to plain text, FITS ASCII and FITS Binary formats. -- `gal_fits_img_read' and `gal_fits_img_write' can read a FITS image to memory or write a FITS image from memory. Gnuastro now defines a simple comment line format to keep basic information in a plain text table, see the "Gnuastro text table format" section of the book. In short for every column, a comment line like below can be used to give a name, units, comments, or a type to a column. This allows a FITS binary table for example to be written to plain text and converted back to binary without loosing any information (except for very small floating point errors if not enough decimals are printed). # Column N: NAME [UNIT, TYPE, BLANK] COMMENT The new Fits program replaces the old Header program. But besides reading/checking FITS header keywords, it can now also work on FITS extensions/HDUs. For example with no options, it will list all the HDUs in a FITS file along with basic information. It can copy a whole HDU to another file, or delete a HDU from a FITS file. To get the previous behavior of listing all the keywords in a FITS HDU, you can run it with the `-p' option. All programs now write data into the second HDU of a FITS file to allow a clean first HDU. Note that following CFITSIO, HDU counting still starts from zero, so FITS images and tables written by Gnuastro in a new file can always be accessed with the `--hdu=1' option (which is now the default). If any program is run within a Git version controlled directory, a `COMMIT' header keyword will be added to the created FITS files, see the "Output headers" section of the book for a discussion on the usefulness of this new feature. BuildProgram: a new program to easily compile, link and run a C program you have written with Gnuastro's libraries without having to worry about which libraries (Gnuastro dependencies) your program needs. Debugging (`-g'), optimizations (`-O'), warnings (`-W'), include search path (`-I'), link search path (`-L'), and linked libraries (`-l') compiler options are also supported. BuildProgram will greatly facilitate the easy usage of Gnuastro's libraries. ** Removed programs or library features The following program names have been renamed: ImageCrop --> Crop ImageWarp --> Warp ImageStatistics --> Statistics Header --> Fits SubtractSky has been removed. The Statistics program now has tools to estimate the Sky value and it can be subtracted with Arithmetic. ** New features All Gnuastro programs that read and write tables can now do so in plain text table format or in FITS ASCII or FITS Binary tables. Depending on the filename or with the new `--tableformat' common option to all programs. The option management system in all Gnuastro programs has been completely re-written with many new features, some of the most important ones are listed below. For developers, you will notice that there is no more usage of macros and adding new options has become much more easier. -- All programs will now also look for a `gnuastro.conf' configuration file to keep common options for all programs in every directory. -- The `--lastconfig' option can be used on the command-line or in any configuration file to stop parsing any further configuration files. -- The `--config' option can now be used to identify any arbitrary file to be parsed as a configuration file. Any file that is given to this option is parsed immediately. -- The `--printparams' option now also prints the short documentation of each option (same description in `--help') after its value. It is now possible to choose columns in tables based on column names as well as column numbers. It is also possible to search for columns based on searching in their units or comments. When using column numbers, counting now starts from 1 (one), not 0 (as before). See the new "Selecting table columns" section for more on these new features. Where relevant, all programs now accept a `--type' option that you can use to specify the numerical datatype of the output. With the new common option `--minmapsize', you can specify a minimum size of an array (in bytes) to store data in SSD/HDD and not in RAM. This can be instrumental when you are dealing with large datasets, or even smaller ones, but when your RAM is getting full. Making a log file is now optional and users have to explicitly ask for it with the `--log' option. Slower building of Gnuastro: Binary operators (e.g., plus or multiply) are now done in the native type of the input dataset. Doing so for all the different combinations of types, greatly slows down the initial compilation of Gnuastro (after running `make'). So for every type there is now a `--enable-bin-op-*' configure time option. When the dataset's type isn't compiled (only for the binary operators), it will be converted to a compiled type and then converted back in the end. Arithmetic: all operations are done in the native data type of the dataset. Until now, it would convert the data internally to double precision floating point, do the requested operation and write the data back in the proper type. So this new implementation is much more efficient. Arithmetic: two new classes of operators: type conversion operators to all standard types and integer-only operators (all C bit-wise operators and the modulo operator). ConvertType: can also print the input dataset to the command-line (`stdout'). To use this feature set the output filename to `stdout'. Convolve now has the `--minsharpspec' option to specify the minimum spectrum value to use in deconvolution (matching PSFs). Crop: when in WCS mode it can still only work on aligned images. However, very small floating point errors in writing the WCS (for example 10e-13 degrees) are now acceptable. Until now these would cause Crop to complain and abort. Crop: the name of the crop can be pre-determined based on the values in a given in a table column. This allows your object's IDs to be directly used as the crop's file name for example. MakeCatalog now also reports the surface brightness in mag/arcsec^2. Until now, MakeCatalog would only print the dataset's surface brightness in units of magnitudes/pixel. But that is not nicely comparable to other datasets. Hence, using a simple calculation (from the pixel projected size, fully derived in the book), it now also reports the surface brightness in magnitudes/arcsec^2 also. MakeProfiles: Profile codes now start from `1' (until now they started from `0'). MakeProfiles: now accepts the radial function of profiles as human-readable strings instead of a code for each profile (which was very cryptic, although codes are also still acceptable). For example in the profile column you can now write `sersic' instead of the code `1'. NoiseChisel: the new `--cleandilated' option will remove dilated objects that have a low S/N (it is mainly useful on very clean or mock images). For non-clean noise, it will result in a decrease of completeness. With this new option, NoiseChisel will also print detection S/N values when run with the `--checkdetsn' option. Statistics: now reads table columns as well as images and does basic operations on them. It can also only work on a certain range of the data (instead of the whole set). Alternatively, you can define the range on another reference column, but use values of the main column. Statistics: all its single-valued measurements can now be done on a tessellation (tile grid) over the input dataset. Statistics: can now estimate the Sky value on the input dataset using the mode's quantile similar to what NoiseChisel does to find its initial threshold. Statistics: has several new single valued calculations: `--quantile', `--quantfunc' (quantile function), `--mode', `--modequant', `--modesym', and `--modesymvalue'. Warp: align the image with the celestial coordinates using the `--align' option. Warp: standard modular warpings can now be requested without an input matrix, using the following options: `--shear', `--flip', `--project', `--rotate', `--scale', `--translate'. Any number of these transformations (along with the `--align' option) can be called on the command-line and they will be applied in the same order to create one warping matrix. By default the WCS will also be corrected. ** Changes in behavior Mask image options have been removed from all programs. Instead, all programs can work directly on data with blank values. So when some pixels must be masked, the Arithmetic program's `where' operator can be used to select special pixels and set them to blank. In particular bit-wise operations are now available in Arithmetic to use bit-mask images. Managing all these different choices in every program would only confuse the user (with too many options). Arithmetic: the `x' letter is now used to represent the multiplication operator. Previously it was `*' which needed quotation and was thus very inconvenient. Convolve: the old `--frequency' and `--spatial' options have been removed and are replaced by `--domain' which accepts values of `frequency' and `spatial'. Convolve: the old `--viewfreqsteps' was changed to `--checkfreqsteps' to fit with the general style of such check images in all Gnuastro's programs. Crop: `--section' syntax is now inclusive in both bounds. Crop: only checks if the center of a crop is filled when the crop was defined by its center (for example with `--ra' and `--dec'). The verbose outputs of Crop are also not cryptic 0s or 1s. The are human readable text. Crop: doesn't have separate `--imgmode' and `--wcsmode' options any more. There is now a single `--mode' option which accepts values of `img' or `wcs'. MakeProfiles: the old `--inputascanvas' is now called `--clearcanvas'. MakeProfiles: until now, it would abort with an error when the input columns had blank values. But for masking, it might happen that you set a blank magnitude. So this check has now been removed when reading the magnitude column. NoiseChisel: default value of the `--minskyfrac' option (new name for the old `--minbfrac') is now 0.7 as opposed to 0.5. This will allow much better estimation of noise properties (by default). It may be slightly too high for a crowded field, but the users can change it on the command-line (or in a configuration file) for such datasets. NoiseChisel: when it is run with any of the `--check' options, it will abort after all the check images have been created. This is very useful for checking your parameters until each step and not be distracted (or have to wait) for later steps to finish. Statistics: will not make a histogram and cumulative frequency files, or calculate sigma-clipped results by default (with no options). It will just print some basic information. Table: Previously, if a column was requested, the `-i' option would be ignored. But it often happens that the users forget a column name after already typing several of their desired columns. So the opposite behavior is preferred. Because when more than a couple of columns are needed, you will probably forget the column identifiers of the last few and having to retype everything is very frustrating. Something like how `--help' takes precedence over all other options. Table: to select column(s) by regular expression searching, the name now has to be put in `/ /' (similar to AWK). If a value isn't in `/ /', the programs will only select a column with the exact match. Warp: when a 2 by 2 matrix is given, the FITS pixel positions (which define the center of a pixel as an integer) are automatically implemented internally, see "Invoking Warp" in the manual for more. Warp: the old `--nofitscorrect' option has been changed to `--centeroncorner' to be more clear. The new option is now more general than before and also works on warping with a matrix, not just on modular warpings. Warp: the old `--nowcscorrection' option has been given a more clear name of `--keepwcs'. With this option, Warp will not apply the warp the input's WCS structure. Warp: the old `--maxblankfrac' option has been changed to `--coveredfrac'. Until now, Warp would only look for the fraction of input blank/NaN pixel area over the output pixel. But this would be useless on the edges of the image. So the new `--coveredfrac' option takes the acceptable fraction of output pixel area that must be covered by input pixels in order to give that output pixel a value. You can use this to set edge pixels that are not fully covered in the new grid to blank and have a flat warped image. ** Bug fixes Using `%zu' to print `size_t' variables for clean build on 32-bit systems. Crash in Table for some operating systems due to memory is now fixed (bug #49347). Table's man-page is now created and installed (bug #49418). Fixes in the documentation (sr #109170, bug #49419). Check for malloc returning valid pointer (bug #49459). Segfault in mesh interpolation corrected (bug #49588). Corrected bad status usage in calls to wcsp2s and wcss2p (bug #49752). Stricter checking in Crop's polygon point list (bug #48978). Correction in alignment and getting pixel scale (bug #50072). Decomposing PCi_j and CDELTi matrices in output WCS (bug #50073). Using image naxes[n] when checkcenter is larger (bug #50099). Memory leak in MakeCatalog corrected (bug #51118). Fix copy-paste error in MakeCatalog flag arrays (bug #51130). * Noteworthy changes in release 0.2 (library 0.0.0) (2016-10-03) [stable] ** Bug fixes Linker errors on some operating systems have been fixed (bug #48076). Several memory allocation, checks or redundancies have been fixed: bugs #48453, #48516, #48603, #48611, #48571, #48650, #48657, #48692, #48770, #47866, #48899, #49049, #49007. ImageCrop no longer crashes with very long output file names (bugs #46241 and #45380). ** New programs or headers Table: a new utility to read and write FITS binary and ASCII tables. It can also print the column information or select columns using regular expressions (task #13579). Shared libraries and headers are now installed. The libraries can be used in C and C++ programs. This release includes the following headers: `gnuastro.h', `array.h', `box.h', `fits.h', `linkedlist.h', `mesh.h', `polygon.h', `qsort.h', `spatialconvolve.h', `statistics.h', `threads.h', `wcs.h', `txtarray.h' (task #13765). Gnuastro now comes with a script in its top source directory (`tmpfs-config-make') to configure and build it in the tmpfs (on the RAM), for those systems that have it. See the new "Configure and build in RAM" section in the book for more (task #14100). ** New features MakeProfiles also accepts WCS positions (task #13566). Flat profiles in MakeProfiles can be given a profile specific value. The new `--mforflatpix' option MakeProfile will use the value in the magnitude column as a fixed value for each pixel. This can be very useful in defining a mask, or creating segmentation maps or labeled images (task #14115). MakeProfiles can now use input image as canvas. Instead of specifying the WSC and image size parameters manually. With the new `--inputascanvas' option, MakeProfiles will get this information (along with blank pixels) from an already existing image (task #14116). Type of output in MakeProfiles and Arithmetic can be specified with the `--type' option. Magnitude error column in MakeCatalog with the `--magnitudeerr' option. Arithmetic now has new conditional (task #13870) and logical operators (task #14153) along with an operator for actions only when conditions are true: `where'. The new `isblank' operator will also enable you to select blank, or masked, pixels (task #14146). The `--noerodequant' in NoiseChisel enables it to detect small and sharper profiles by disabling erosion on pixels above a certain quantile (task #14139). MakeCatalog can also calculate the upper limit magnitude for each given object in the image by randomly positioning the object's footprint over undetected regions of the image (task #14167). The source tarball is now also distributed with Lzip for a much better compression ratio and more robust archival file format. ** Changes in behavior The two MakeProfiles options `--setconsttonan', `--setconsttomin' have been removed (see `--mforflatpix' above for their alternative). MakeCatalog makes clump catalog only when asked (when the `WCLUMPS' header exists in the objects HDU). This can be very useful in cases like aperture photometry, when the object labels are not generated by NoiseChisel and so a clump image doesn't exist (task #14122). Default cosmological parameters in CosmicCalculator set to Plank 2015 results: A&A (2016), 594, A13 (arXiv 1502.01589). The `--envseed' option (to read random number generator type and seed from the environment) to MakeProfiles and MakeNoise can also be given in the configuration files. * Noteworthy changes in release 0.1 (2016-05-30) [stable] ** Bug fixes MakeCatalog's problem in checking the sizes of all input images is now fixed. NoiseChisel's problem with reading the `--kernel' option is now corrected (bug #46750). lib/mesh.c's problem in correctly calculating the mesh sizes was corrected (bug #47611). `make check' will not look into system utility configuration files. In the previous release, if Gnuastro was already installed, the configuration files already present on the system would also be read. Now only configuration files in the tested package are used (bug #47833). Ghostscript's version is now checked at configure time after its existence. ConvertType uses the `-dPDFFitPage' option to Ghostscript which was introduced in version 9.10, so older versions would pass configure but at `make check' time, the PDF test would fail. Now this test is skipped (bug #47868). Most tests would fail when `make check -jN' was run (to do the checks on N threads). A dependency structure has now been defined to fix this problem and greatly speed up the testing process (bug #47957). ** New utilities Arithmetic: For arithmetic operations on the pixels of input images. With this utility, it is now possible to add multiple images with each other, or easily calculate a median image. It as a large set of other arithmetic operations and some functions which can be done on the input image(s). An unlimited number of input images can be given, the images will only be loaded when necessary and will be freed as soon as they are no longer necessary. CosmicCalculator: For doing cosmological calculations at a given redshift. ** New features All the utilities that would produce a log file now have a `--nolog' option to avoid printing a log file. The tiled image compression convention (.fits.fz, created with `fpack') files can now be used as input in the utilities. ImageCrop can now also crop a polygon from the input image. The polygon vertices can be given in the world or image coordinates. The simple `--polygon' option will keep the insides of the polygon while the `--outpolygon' will keep the outside of the polygon. ImageCrop and ImageWarp can now read the WCS information of a FITS header from a specific region with the `--hstartwcs' and `--hendwcs'. In some older FITS images, when the WCS distortions were not as standardized as now, there were cases which would confuse WCSLIB. NoiseChisel can now save the grown clumps image instead of the original clumps image in the output with the `--grownclumps' option. Convolve can now do deconvolution with the `--makekernel' option. MakeProfiles now has a `--setconsttonan' option which will fill the constant profiles with a NaN (blank) value, not a number, allowing the creations of elliptical masked regions for example. Header can now import a keyword directly from a string with the `--asis' option. MakeCatalog can now output the geometric (average position independent of pixel flux value) positions of the objects too. MakeCatalog can now produce the object's elliptical parameters (for example semi-major axis, semi-minor axis, and position angle). This can also be done both in standard flux weighted and geometric methods too. MakeCatalog now has a `--threshold' function to only use pixels above a given threshold in each object or clump. This is useful to avoid diffuse regions in calculations. MakeCatalog now has a `--noriverbrightness' option. With this option it is possible to calculate the clump flux without subtracting the river pixels on its circumference. The number of CPU threads is no longer a configuration option, it is now determined at run-time for each program. Therefore it is now easily possible to built Gnuastro on one system to use on another (commonly done in the GNU/Linux package managers). Therefore ./configure no longer has a `--with-numthreads' option. Every commit in Gnuastro's history (after implementing this feature) can now be given a unique version number. Since the version number is printed in possible outputs, this feature can help reproducibility, even when the an official/stable release isn't used. The AUTHORS file is now automatically generated from the version controlled history. Also all the authors that have contributed to Gnuastro are included in the second (copyright) page of the PDF book. All the bootstrapped directories are now moved with a new `bootstrapped' directory in the top source directory. This significantly cleans up this directory, allowing users to more easily find the hand-written Gnuastro source files they like. A `bug-gnuastro' Info page was created so users can easily go to that page for information on how to submit bug reports. It is accessible on the command line with the command `info bug-gnuastro'. ** Changes in behavior The separate utilities no longer have a separate version number. With the introduction of unofficial version numbers generated from each commit in Gnuastro's history, the utility version numbers would cause confusion. MakeProfiles will now add a suffix to the individual images and put them in the output directory if specified. NoiseChisel and MakeCatalog now use the median mesh standard deviation to define the over-all depth of the image. Previously they used the maximum value (or the least depth). NoiseChisel no longer outputs a sky subtracted image. This job can now be done with the new Arithmetic utility. NoiseChisel's `--segsnhistnbins' option was renamed to `--clumpsnhistnbins'. ** Improvements NoiseChisel's default quantiles were changed to 0.95 from 0.99. Since the old value was too severe. NoiseChisel's S/N thresholds are now found from the distribution of pseudo-detections and clumps from the full image, not within each large mesh. This was done to increase the accuracy of the S/N threshold. There were commonly not enough points in large mesh sizes and this would add scatter. With ImageCrop's polygon capabilities, it is now easily possible to cut out the region that has uniform noise properties (depth and correlated noise). Therefore the old `--checkdetectionsn' and `checkclumpsn' options are no longer present. When building from the version controlled source, the whole bootstrapping process is done with one script. In the previous version, all the separate operations should have been done by hand (as instructed in the old manual). All the build steps now report what was done and suggest the next step. This feature can be disabled with the `--disable-guide-message' at configure time. gnuastro-0.5/INSTALL0000644000175000017500000003661413217200067011202 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. gnuastro-0.5/ChangeLog0000644000175000017500000012014312771240103011711 000000000000002016-05-27 Mohammad Akhlaghi Following the discussions in task #13779, the ChangeLog has not been updated since 2015-11-05 (previous log). Instead, the commit messages are very descriptive. Git's blame tool can be used to check the history of any part of the code very effectively. Gnulib has scripts to generate a ChangeLog from the commit history so building this file automatically is possible and will be implemented (task #14007). Once this ChangeLog is automatically generated, it will be removed from the version controlled source. Until then this file will remain unchanged. There is also a discussion for adopting the ChangeLog format in the commit messages in task #14008. * ChangeLog: no longer updated. 2015-11-05 Mohammad Akhlaghi * doc/gnuastro.texi (Why C): Clarified explanations. 2015-11-04 Mosè Giordano * .gitignore: Add new regexps to the list of ignored files. * doc/gnuastro.texi (Arguments): Mention new accepted extension. * lib/fitsarrayvv.c (nameisfits): Add "fits.fz" to the list of accepted extensions. Fixes task#13767. (nameisfitssuffix): Ditto. 2015-10-18 Mosè Giordano * bin/imgcrop/imgcrop.c (imgcrop): Do not use modefunction to set the function, run the functions manually instead. Fixes bug#45380. 2015-10-16 Mosè Giordano * ./*: Change in many files the name of the package from "gnuastro" to "Gnuastro". Fixes bug#46212. * doc/forwebpage.sh: Use canonical path for bash shell. * doc/plotbin/conversions.sh: Ditto. 2015-10-02 Mohammad Akhlaghi * bin/noisechisel/noisechisel.c (makeoutput): Added a "raw" term in the comments of the noise statistics so emphasize that this is from the raw mesh grid and not the interpolated and smoothed grid. * bin/mkcatalog/mkcatalog.c (makeoutput): As explained below. * doc/gnuastro.texi (Depth and limiting magnitude): Changed the sigma which representes depth from the maximum to the median. The maximum has a strong scatter and even one mesh can completely push to unreasonable values. But the median is not affected by such minor mesh variations, so it is a more robust measure of the dispersion. 2015-10-01 Mohammad Akhlaghi * bin/imgcrop/ui.c (checkifset): Removed the hstartwcs and hendwcs options as mandatory arguments. * lib/fitsarrayvv.c (readfitswcs): Now applies the hstartwcs and hendwcs options. * include/fitsarrayvv.h: readfitswcs now takes the hstartwcs and hendwcs values as arguments. This was done so all programs could take in these options. 2015-09-23 Mohammad Akhlaghi * doc/gnuastro.texi (Depth and limiting magnitude): Updated explanations in for the depth and limiting magnitude to be more realistic. * bin/mkcatalog/mkcatalog.c (makeoutput): Removed the limiting magnitude calculation that was previously defined since it's physical meaning is very unclear (it was mainly put as a test). Also changed the surface brightness limit to a per-pixel basis (independent of the projected area of the pixel) as explained in the manual. 2015-09-17 Mohammad Akhlaghi * bin/mkprof/mkprof.c (mkprof): Only print a log file if the `--nolog' option is not called. * bin/imgcrop/imgcrop.c (imgcrop): Only print a log file if the `--nolog' option is not called. * bin/mkprof/main.h (mkprofparams): Removed the p->dir0file1 parameter from the main structure. * tests/mkprof/mosaic1.sh: Corrected the name of the first output for the new individual name configuration (where the output file name is suffixed to the row number). * bin/mkprof/ui.c (sanitycheck): Now everything based on the situation the basic information for the next steps is set here. * bin/mkprof/mkprof.c (saveindividual): Removed the name checking here. All the necessary information is now set in ui.c. 2015-09-13 Mohammad Akhlaghi * bin/imgwarp/imgwarp.c (imgwarponthread): Now calculates the fraction of area that is blank (NaN) and if that fraction is larger than a user defined value, then the output pixel will be blank. Before the blank fraction was ignored. * bin/imgstat/imgstat.c (reportsimplestats): Now uses the value to the `--mirrordist' option instead of the fixed value of 1.5. (reportsimplestats): Report the `NOT ACCURATE' warning in a separate line to make reading by AWK easier, also removed comma between outputs for the same reason. * bin/*/ui.c (readconfig): Now uses macros for common options. (printvalues): Similarly uses macros for common options. * lib/statistics.c (sigmaclip_converge): Removed commas between the outputs to make reading by AWK easier. (sigmaclip_certainnum): Similar to above. * include/fixedstringmacros.h (GNUASTROBIBTEX): New name from ASTRUTILSBIBTEX. Also the content was updated to the full ADS BibTeX output after the paper was published. * include/configfiles.h (CHECKSETCONFIG): Now checks for the version of the program and also has a more cleaner/readable path for reading/writing to the user configuration directory and reading from the system configuration directory. 2015-08-16 Mohammad Akhlaghi * bin/noisechisel/thresh.c (snthresh): The check on the number of objects in finding the S/N threshold is now done before sorting the S/N table. * bin/convolve/convolve.c (removepaddingcorrectroundoff): When the maximum radius is smaller than the input images, then the final kernel will be shrinked to have no only-zero column or row. 2015-08-05 Mohammad Akhlaghi * bin/convolve/convolve.c (frequencyconvolve): Divide the arrays when the kernel should be made, multiply them when convolution is to be done. (frequencyconvolve): When in deconvolution mode, it will go to another function to make the final product. 2015-07-31 Mohammad Akhlaghi * bin/convolve/convolve.c (makepaddedcomplex): Added a check to make the padded image size an even number in both dimensions by adding one pixel if it is odd. This was done because FFT operations work much faster on even sized arrays. 2015-07-22 Mohammad Akhlaghi * bin/noisechisel/thresh.c (snthresh): Had mistakenly used `p->detquant', for both detection and segmentation! This is now corrected. * bin/mkcatalog/mkcatalog.c (secondpass): Sets the river flux to Sky for when the grown clumps are used, see the explanation bellow. * bin/mkcatalog/columns.c (brightnessmag): Corrected the definition of brightness. It was incorrectly dividing the total brightness by the area when the user asked for brightness. (sncol): Can now work accurately when grown clumps are also included. In a grown clump image, full detections that aren't harmed by deblending are are fully labeled. So there is no river pixels there and the S/N equations had to incorporate this. 2015-07-18 Mohammad Akhlaghi * bin/noisechisel/segmentation.c (nextavailablelabel): Now accounts for the `--grownclumps' option. * bin/noisechisel/args.h (options): Corrected the type of output for `--gthresh'. I had forgot to include any for it! 2015-07-17 Mohammad Akhlaghi * lib/fitsarrayvv.c (pixelareaarcsec2): Previously called pixelsteradians. Changed the units to arcsec^2 because it is more useful. * bin/noisechisel/detection.c (detlabelsn): Now using a new sum of pixel values for flux weighted center of profile. The values are stored as one column in the 2015-07-07 Mohammad Akhlaghi * bin/mkcatalog/mkcatalog.c (firstpass): Use only positive (after subtracting sky) fluxes as weights for the flux weighted center. Also calculate the geometric center (irrespective of flux), so in case there are no positive pixels, the geometric center is output instead (after all, the object should be represented by some position and the NaN values that were used before are not useful). (secondpass): Similar to the above. Also I had simply replaced the getclumpinfo method of NoiseChisel's clumps.c here. But I had forgot that over there, all the neighboring clumps were within one detection. But here, two clumps could be one river pixel appart but belong to separate objects. So the wngb array has to have two values for each clump, not one, see the comments for more. Also I had to check the object IDs from the neighbors, not the river pixel. (setcpscorr): Removed. The minimum and maximum Standard deviations are now stored by NoiseChisel into the header of the standard deviation image. MakeProfiles then gets the value from those header parameters, so there was no need for this function. (makeoutput): The magnitude and S/N information is printed even if the user has not asked for magnitudes and S/Ns. * bin/mkcatalog/columns.c (sncol): Renamed variables to fit the clumpsntable function in bin/noisechisel/clumps.c. Also, the river flux is subtracted here, not before. * lib/fitsarrayvv.c: The numblank variable did not actually store the `number' of blank pixels, it was only a 0 or 1 value to specify if there are any blank pixels or not. It is now changed to `anyblank' to be more clear and not confuse the readers. All the Gnuastro programs that used this variable, were also corrected. 2015-07-06 Mohammad Akhlaghi * bin/noisechisel/noisechisel.c (noisechisel): After dilation, 4 connectivity was used to find the labels of the connected components. However, when we are looking around the river pixels in the segmentation process, we are looking in their 8-connected neighbors. So when two 4-connected labeled regions are separate, they can still be 8-connected and this will mess up the river flux association functions where the flux of a river is given to the clump that is touching it. It took me several frustrating hours to find this very simple bug! * bin/noisechisel/clumps.c (oversegment): NaN (masked) pixels are no longer fed into this function. So the conditions to check for them, especially in setting the top index are removed. (getclumpinfo): Now uses a different number for the sum of flux when trying to find the flux weighted center of the clump. This sum is made of only positive values. Negative values cannot act as weights and will mess up the center calculations. The new number for each column is stored in a third column to the xys array. Also, the xys array is no longer needed outside this function. 2015-07-05 Mohammad Akhlaghi * bin/mkcatalog/columns.c (brightnessfluxmag): Previously fluxmag. Now this function gives the brightness, flux and magnitude depending on its input parameters. * bin/mkcatalog/args.h (options): Corrected all usage of "flux" and "brightness". * doc/gnuastro.texi: Corrected all usage of "flux" and "brightness". * doc/forwebpage.sh (thismonth): Removed type=\"text/javascript\"" from the string since it seemed to be interfering with LibreJS. 2015-07-03 Mohammad Akhlaghi * lib/fitsarrayvv.c (readkeywords): Now reads multiple keywords. 2015-07-02 Mohammad Akhlaghi * bin/mkcatalog/mkcatalog.c (firstpass): Now accounts for blank labeled pixels. (setcpscorr): Now finds both the minimum and maximum of the STD, maximum for finding the 5sigma magnitude. * bin/mkcatalog/main.h (CATUNITMAG): Changed unit for magnitudes. 2015-06-26 Mohammad Akhlaghi * bin/noisechisel/thresh.c (qthreshonmesh): Only sort and find the quantile if there actually is any pixels! (applydetectionthresholdskysub): Now accounts for blank pixels. * bin/noisechisel/segmentation.c (segmentation): Now only works on non-blank pixels. * bin/noisechisel/label.c (BF_concmp): Now accounts for blank pixels in both unsigned char and long arrays. (labareas): Accounts for blank pixels. (removesmallarea_relabel): Accounts for blank pixels. (labindexs): Accounts for blank pixels. * bin/noisechisel/detection.c (detlabelsn): Now also removes detections in the sky area that cover a detection after filling holes. (removefalsedetections): Changed to applydetsn. (detsnthreshonmesh): Changed to detectpsedos. Practically this function just fills the holes in each large mesh and opens the binary result then puts the field back into the main p->dbyt array. It does not calculate anything any more. Such calculations have now become full image wide to find one S/N value over the full image. (detsnthreshongrid): Changed to detsnthresh. This function now does the image-wide calculations that were previously done by detsnthreshonmesh. (dbytolaboverlap): Now accounts for masked unsigned char and long arrays. * bin/noisechisel/clumps.c (clumpsntableonmesh): Previously clumpsnthreshonmesh. Moved all the countings and conditionals to another function to find the S/N threshold from one distribution over the image and not in the large meshs. (findclumpsn): Previously clumpsngrid. Now it collects all the S/N values from all the meshs into one array and uses that to find the S/N threshold using a fixed function for both detection and segmentation (snthresh in thresh.c). * bin/noisechisel/binary.c: The fixed value of 2 is changed BINARYNAN which is defined in binary.h. This makes managing the special values to use more easy, especially now that FITSBYTEBLANK is also being used from fitsarrayvv.h. (fh_makeinv): Replaced the old functions to fill the inverse array with new ones that don't use an index variable but pointers. It is much more cleaner, faster and easier to read now. It also now accounts for blank pixels and completely ignores them. (fillboundedholes): Similar to fh_makeinv. * bin/noisechisel/: The mesh based signal to noise calculations are now gone and one value is calculated for the full image. This allows for much better accuracy. Most of the steps in NoiseChisel were modified to take this into account. Also blank pixels are now included in the binary and labeled images too. * lib/fitsarrayvv.c (arraytofitsimg): Moved the BLANK keyword before EXTNAME. 2015-06-25 Mohammad Akhlaghi * bin/imgcrop/args.h (options): Changed inpolygon to outpolygon. Everywhere that inpolygon appeared, it is now outpolygon. * bin/imgcrop/wcsmode.c (wcscheckprepare): Check for both axises having the same pixel scale now incorporates floating point errors. * bin/imgcrop/crop.c (imgpolygonflpixel): Now gets the vertices and their number instead of the cropparams structure. This was done to make it be more general and use it in both Image mode and WCS mode. (onecrop): Allocation of the crp->ipolygon array was moved to the cropflpixel function. 2015-06-13 Mohammad Akhlaghi * lib/fitsarrayvv.c (fileorextname): New name for the setmaskname function. This was done to be a generic check, for all kinds of input, not just the mask. * bin/ : All the functions to make a copy of an input and print string values were changed. These were mainly in ui.c and args.h for each program. Until now, for each option, I would allocate, check and set the proper values, but now, I wrote a small function in checkset.c (allocatecopyset) which does the job. This makes reading the code significantly more easy and less bugy. 2015-06-12 Mohammad Akhlaghi * bin/subtractsky/args.h (options): Removed the --checkinterpolation option. * bin/subtractsky/subtractsky.c (subtractsky): Similar to below. * bin/noisechisel/thresh.c (findapplyqthreshold): Similar to below. * bin/noisechisel/sky.c (findavestdongrid): Similar to below. * bin/noisechisel/detection.c (findsnthreshongrid): Now using meshvaluefile from mesh.h instead of checking its self. Once the --meshbasedcheck was added, doing all the checks in each function was too long and repetative. So I just made this function to do the job with one call and not distract the readers. 2015-06-11 Mohammad Akhlaghi * bin/noisechisel/args.h (options): `minbfrac' and `minnumfalse' options moved under the `Input' category from the detections category. This move was because these two options are used by both the detection and segmentation steps and thus keeping them under detection would be confusing. Also `checkthresh' was changed to `checkthreshold'. Also, the option `numerosion' was changed to `erode' to be consistent with the opening and dilate options. 2015-06-10 Mohammad Akhlaghi * bin/mknoise/astmknoise.conf: Default background magnitude changed to -10 and zeropoint to 0.0. 2015-06-09 Mohammad Akhlaghi * bin/noisechisel/clumps.c: All functions now use the clumpsthreadparams structure as input instead of a list of arguments. (oversegment): ctp->topinds now keeps a good value when the clump has NaN pixels over it. * lib/mesh.c (imgindextomeshid): Corrected to work correctly when the pixel might be lying on the last mesh that might be larger. 2015-06-08 Mohammad Akhlaghi * bin/noisechisel/thresh.c (applydetectionthresholdskysub): Similar to below, uses p->imgss for sky subtracted image. * bin/noisechisel/sky.c (subtractskyimg): Does not touch the input image, puts the sky subtracted value in p->imgss. * bin/noisechisel/noisechisel.c (noisechisel): Removed the allocation of the mesh structures to ui.c * bin/noisechisel/detection.c (detlabelsn): Uses p->imgss for the sky subtracted image. 2015-06-07 Mohammad Akhlaghi * bin/mkprof/oneprofile.c (randompoints): The random number generator is now allocated (cloned) with the build thread and for every profile the seed is independently set once. Before each pixel would allocate and seed the random number generator individually! * bin/mkprof/astmkprof.conf: Changed default zeropoint magnitude to 0.00. * bin/mknoise/mknoise.c (mknoise): moved the random number generator to ui.c to make things faster and more easier to understand. * bin/mknoise/args.h (argp_option): Removed the `backgroundinmean' option, because I couldn't figure out what use it would have. If it is needed we can add it again later! * bin/imgstat/args.h (argp_option): Changed `binonzero' option to the more general `onebinvalue' option. * bin/convolve/convolve.c (removepaddingcorrectroundoff): Corrected bug: would return *d in both cases! It is corrected now. 2015-06-06 Mohammad Akhlaghi * lib/mesh.c (chbasedidfromgid): Chaged the old setmeshid to chbasedidfromgid along with a new function (gidfromchbasedid). The explanations on top of the first clearly explain everything extensively. The old function (my understanding) was not yet mature enough but now it seems to be very nicely working. All the functions that used this were also changed. * bin/noisechisel/astnoisechisel.conf: Changed default lastmeshfrac to 0.51 from 0.6. 2015-06-04 Mohammad Akhlaghi * bin/subtractsky/subtractsky.c (avestdonthread): No more need for setnan. Since all the meshes are initialized to NaN anyway. * lib/mesh.c: Previously, the garrays would be allocated and freed on every set of operations that were done on the mesh grid. I made some modifications so there is no more need to allocate and free them every time. A new prameter was added (ngarrays) so that on each use of the garrays, the number of garrays that are needed are kept here. All checks to work on the second garray are now done through this parameter. In this fashion, when multiple operations are to done on each mesh, there is no need to repeatedly free and allocate the garrays. Nearly all the functions in mesh.c were corrected to account for this. 2015-06-03 Mohammad Akhlaghi * bin/noisechisel/astnoisechisel.conf: Changed default dthresh to -0.1. * lib/statistics.c (histogram): Corrected the function. Until now, there was a problem when an element was on the last bin: it would go onto the next bin and thus would not be counted. This issue is now corrected. (cumulativefp): Same as above. 2015-06-02 Mohammad Akhlaghi * lib/mesh.c (operateonmesh): mp->indexs is now allocated in makemesh. Because all the programs that will need threads on meshs will need it, so it is best to set mp->indexs once and for all in makemesh. (meshinterponthread): Removed the naninds array, a new option was added to interpolate only on blank pixels when needed. (preparemeshinterparrays): Similar to the above. 2015-06-01 Mohammad Akhlaghi * lib/statistics.c: Removed all isnan checks in the comparison functions for the minimum and maximum values. NaN values will automatically fail all comparisons. * lib/timing.c (reporttiming): Removed the `in' from reporting seconds. * include/timing.h (VERBMSGLENGTH_V): Changed to 45 from 40. 2015-05-27 Mohammad Akhlaghi * bin/convolve/args.h (options): Remove the `noedgecorrection' option. Since it was useless. Also changed the old short option for spatial (`s') to `p'. Because `s' is now needed for the mesh size option. Also changed the old short option for khdu (`H') to `U', to make it similar to all the other programs that do convolution. * include/mesh.h (meshparams): the garrays are now only pointers. The allocated arrays are either cgarrays or fgarrays and based on the user's will, garray will be set equal to one of these two options. All the functions in mesh.c were changed to accomodate this change. 2015-05-25 Mohammad Akhlaghi * lib/mesh.c (operateonmesh): New name for `fillmesh'. Now the function that will be spinned off from each thread can be specified from the outside. 2015-05-24 Mohammad Akhlaghi * bin/imgcrop/crop.c (sectionparser): When only a `*' was given with no positive or negative following number, a segmentation fault would happen. This bug is now fixed. * lib/spatialconvolve.c (sconvonthread): No convolution will be attempted for a NaN pixel. 2015-05-23 Mohammad Akhlaghi * lib/mode.c (modesymmetricity): Corrrected topi to account for the case when 2*mi is larger than size. * bin/subtractsky/args.h: --numnearest and --kernelwidth moved to the `Mesh grid' part of the help output. --checksmoothing and --checkinterpolation also moved to the `Mesh grid' part. * lib/mesh.c (checkgarray): Modified to show both the full, or contiguous over full image, garray and the default one which is contiguous only over each channel. 2015-05-20 Mohammad Akhlaghi * lib/mode.c (modesymmetricity): Corrected topi to the end of the mirror distribution. (modesymmetricity): If no diff point is found, the end of the mirror distribution is used. Before it was the end of the data! (valuefromsym): af set to the quantile of the mirror distribution. 2015-05-18 Mohammad Akhlaghi * bin/convolve/convolve.c (complextoreal): Changed the two states to three to add only conerting the real part of an array. 2015-05-15 Mohammad Akhlaghi * bin/convolve/convolve.c (removepaddingcorrectroundoff): The limit to check for floating point errors is now set by a macro and changed to 1e-10 instead of 1e-17. * lib/statistics.c (sigmaclip_converge): Now, there is a limit on the number of times to try for convergence. * lib/mode.c (makemirrorplots): All the output paramters are now given as arguments so the output can be fully configured from the outside. Also, the method that it sets the plot ranges is now better configurable. * include/mode.h (MODESYMGOOD): Changed to 0.2 from 0.15 based on new simulation tests. 2015-05-11 Mohammad Akhlaghi * lib/statistics.c (setbins): Changed method to find the bin that has the value zero within it. Before it would just choose the first bin with a positive value. But now, it will check the signs of the two interval sides of the bin and when ever the multiplication becomes negative, that bin is chosen. (histogram): Changed so the last bin is a closed bin, not half open like the rest of the histogram bins. This also includes floating point rounding error. (cumulativefp): Same as the histogram function. (sigmaclip_certainnum): Printing is now an option. (sigmaclip_converge): Printing is now an option. * lib/mode.c (makemirrorplots): New name for the old savemodeplots. * include/mode.h: Changed input arguments to modeindexinsorted. Plots can now be made through the separate makemirrorpolots function. 2015-05-05 Mohammad Akhlaghi * bin/subtractsky/ui.c (preparearrays): Moved the function that reads any input as float and incorporates the mask into it. * include/fixedstringmacros.h (MOREHELPINFO): Removed long explanation about help-gnuastro. Instead an info link to the part of the manual that introduces it was included. 2015-05-03 Mohammad Akhlaghi * include/fixedstringmacros.h (MOREHELPINFO): Corrected to include help-gnuastro mailing list. * doc/style.css (a:hover): Changed to bright orange color. (a:active): Changed to dark orange. 2015-04-24 Mohammad Akhlaghi * bin/mkprof/oneprofile.c (makepixbypix): When in circumference mode, if the truncation radius is reached, it is filled with the profile value. This is done so very elongated profiles can at least show a one pixel circumference. * bin/mkprof/main.h (MINCIRCUMWIDTH): Changed to 0.5f. * lib/checkset.c (doublelvalue): Corrected bad value report when options are called. 2015-04-21 Mohammad Akhlaghi * bin/mkprof/ui.c (freeandreport): Avoided double-free by only freeing mergeedimgname when it is not equal to output. * bin/mkprof/oneprofile.c (makepixbypix): Will only do monte carlo integration when the profile is not a constant value. (setprofparams): Changed the function of point to `Fixed'. * bin/mkprof/mkprof.c (write): Changed to replace and read from an image and add profiles on that. * lib/statistics.c: All float and double functions can now work with NaN too. * bin/mkprof/ui.c (setparams): Catalog is always given, no need to check. * doc/gnuastro.texi: Removed all "Future updates ..." subsections in the manual. They are now managed in the Gnuastro project webpage on Savannah. 2015-04-13 Mohammad Akhlaghi * lib/fitsarrayvv.c (updatekeys): When no value is given, it will use fits_update_key_null. (readwcs): Uses fits_free_memory instead of clib's free. 2015-04-06 Mohammad Akhlaghi * bin/mkprof/mkprof.c: Corrected condition when a thread would finish `build' profiles but the last set of its profiles wouldn't pass onto `write'. * bin/mknoise/: Changed background flux unit to magnitudes, not flux. * THANKS: Added institutions which also helped. 2015-04-03 Mohammad Akhlaghi * lib/fitsarrayvv.c: Changed all occurences of `nul' or `NUL' to `blank' or `BLANK'. The FITS standard defines a BLANK keyword for integer types. (copyrightandend): Will now right extra headers. (arraytofitsimg): Can now accept header to write to output. * include/fitsarrayvv.h: Changed all `NUL' macros to `BLANK'. 2015-04-02 Mohammad Akhlaghi * lib/fitsarrayvv.c (changetype): Round floating point input types for integer output types. (arraytofitsimg): Added numblank as a variable, to deal with blank pixels. * bin/imgwarp/imgwarp.c (imgwarppreparations): Coorected the point (1.0f, 1.0f) to be center of the first pixel, not zero. * lib/fitsarrayvv.c (copyrightandend): Removed the Copyright notice of Gnuastro from the output image header. Since it might be confused with a copyright on the data its self. 2015-04-01 Mohammad Akhlaghi * bin/imgwarp/args.h: Temporarily removed the wrap option. Will be added later. 2015-03-24 Mohammad Akhlaghi * bin/imgcrop/ui.c (preparearrays): Aborts if in WCS mode and the wcsprm structure could not be started. * bin/imgcrop/crop.c (firstcropmakearray): Only adds WCS headers if the wcsprm structure is defined. * lib/fitsarrayvv.c (readwcs): If any error occurs, a warning message will be printed and the returned pointer will be NULL. 2015-03-17 Mohammad Akhlaghi * tests/convertt/: If libjpeg is not present, the tests will be skipped. * bin/convertt/: libjpeg is now optional. * configure.ac: Changed libjpeg to an optional requirement. So if it is not available, Gnuastro can still be built. 2015-03-16 Mohammad Akhlaghi * bin/convolve/ui.c (preparearrays): The flip parts was missing a -1. * doc/gnuastro.texi: Changed all `gnuastro' occurrences in the text to `Gnuastro'. 2015-03-14 Mohammad Akhlaghi * bin/convolve/convolve.c: Added frequency domain convolution. 2015-03-12 Mohammad Akhlaghi * bin/mkprof/ui.c (setparams): Added condition for no output given. * bin/mkprof/astmkprof.conf: Removed output. * bin/imgcrop/ui.c (sanitycheck): Moved check of reentrancy in cfitsio to the end so if numthreads is set to 1, there is no problem. * bin/convertt/ui.c (sanitycheck): Added check if output is not set. * bin/convertt/astconvertt.conf: Removed output. * lib/spatialconvolve.c: First version complete. * configure.ac: Removed sqrt and pthread tests (they are done by Gnulib). Added the AX_PTHREAD macro from Autoconf archives. 2015-03-11 Mohammad Akhlaghi * bin/convolve/: Adding new functions and steps. * ./: Copyright transferred to the FSF. Copyright notices in all files changed. 2015-03-10 Mohammad Akhlaghi * tests/imgcrop/*.sh: Set --numthreads=1 for all the tests so if CFITSIO is not installed with reentrancy, there is no failures. * tests/Makefile.am: Made the fitstopdf result conditional on if GPL GhostScript is installed. * include/astrthreads.c: Removed the old function and structure for replacing the pthread_barrier type and functions that was copy and pasted from another webpage and replaced it with my own implementation. * configure.ac: bug report email set. pthread_barrier checked. GPL GhostScript checked. 2015-03-09 Mohammad Akhlaghi * include/astrthreads.h: Added a temporary function so the pthread_barrier type and functions can be run on systems that don't support it. I have contacted the author and it will only remain if he clarifies the license. I have also asked the Gnulib people to try to include it so this issue can be completely fixed. * configure.ac: Added checks for nproc and gs along with warnings. 2015-03-02 Mohammad Akhlaghi * bin/convolve/: Work started on Convolve. * lib/fitsarrayvv.c: Changed array types from intXX_t to short, long and LONGLONG. Unfortuantely this is how CFITSIO works. 2015-02-22 Mohammad Akhlaghi * doc/gnuastro.texi: Added index, changed "Science and its software". 2015-02-20 Mohammad Akhlaghi * doc/gnuastro.texi: Removed list of programs at first, added a programs index. Added an examples chapter along with some one line examples of each program. Moved the Why C and design philosophy subsections to the Developing chapters. * src: All 'error' functions are now called with a string literal and not a string variable. Also all 'system' function calls now check the return value. * lib: Similar to above. * include: similar to above. 2015-02-18 Mohammad Akhlaghi * lib/Makefile.am: Changed all static libraries to libtool static libraries. * doc/gnuastro.texi: Updated. * configure.ac: Added Libtool checks. Corrected cfitsio and wcslib dependencies and removed FFTW as a dependency. 2015-02-17 Mohammad Akhlaghi * bin/convertt/eps.c: Functions for binary image added. * lib/fitsarrayvv.c (nameisfits): Check length. * doc/gnuastro.texi (Internal libraries): Removed details of libraries. * README: Details removed. 2015-02-16 Mohammad Akhlaghi * lib/statistics.c (dminmax): Works with NAN values too. (fminmax): Similar to dminmax. * doc/gnuastro.texi (ConvertType): Updated. 2015-02-13 Mohammad Akhlaghi * bin/convertt/args.h (argp_options): `convert` changed to `change`. Since the program name is also convert this could cause confusions. * doc/gnuastro.texi (Invoking astconvertt): Option explanations. * bin/convertt/jpeg.c (savejpeg): Corrected the pixel ordering. * bin/convertt/convertt.c (doubleto8bit): Find minimum and maximum for all colors to set the scale, not just one color. * lib/fitsarrayvv.c (arraytofitsimg): Will not remove comments. * include/fixedstringmacros.h (SHORTCOPYRIGHT): Corrected year. * lib/fitsarrayvv.c (nameisfits): Dot no longer included. (nameisfitssuffix): Added. (changetype): Corrected input and output pointers. * doc/gnuastro.texi (ConvertType): Added explanations. (Future updates): Chapter removed. 2015-02-11 Mohammad Akhlaghi * bin/convertt/ui.c (preparearrays): Added. * bin/convertt/jpeg.c (preparejpeg): Added. * doc/gnuastro.texi (Files): Added chapter (ConvertType): Added section (FileInfo): Added section 2015-02-08 Mohammad Akhlaghi * bin/convertt: Started working on ConvertType. * lib/checkset.c (intsmallerequalto): Function Added. * include/fixedstringmacros.h (ASTRUTILSBIBTEX): Corrected article name * include/checkset.h: Added intsmallerequalto. 2015-01-25 Mohammad Akhlaghi * ./*: In all files, the name `AstrUtils` was changed to `gnuastro` and the `astr` prefix was changed to `ast`. 2015-01-20 Mohammad Akhlaghi * tests/imgcrop/makerandomcat.py: Removed, because now the points are very specific. * tests/imgcrop/*.sh: Corrected the inputs to the outputs of MakeProfiles tests. * tests/Makefile.am (TESTS): Added tests for MakeProfiles. * Makefile.am (EXTRA_DIST): Moved the distribution files for each folder to the Makefile.am in that folder. 2015-01-19 Mohammad Akhlaghi * bin/mkprof/ui.c: Steps for reading and checking WCS parameters added. * bin/mkprof/oneprofile.c (ispsf): Added for a fixed place to check if a profile is a PSF. (makeoneprofile): Finding mkp->xc and mkp->yc moved here. * bin/mkprof/mkprof.c (preparewcs): Added. (build): Removed finding mkp->xc and mkp->yc. * bin/mkprof/args.h (argp_option): Added WCS related options. * bin/imgcrop/imgcrop.c (imgcrop): Number of barriers, corrected for when the number of jobs was less than the number of threads. * lib/fitsarrayvv.c (addwcstoheader): Changed the WCS structure to the WCS header string as input. (arraytofitsimg): Convert the WCS structure and remove the comments CFITSIO in here. (atofcorrectwcs): Added. * doc/astrutils.texi: Updated. 2015-01-18 Mohammad Akhlaghi * bin/mkprof/mkprof.c (writelog): Added. (write): Completed. * bin/mkprof/args.h (arg_option): Added `--nomerged`. * lib/txtarrayvv.c (doformatting): Added option to use `f` in printf or `g`. 2015-01-16 Mohammad Akhlaghi * bin/mkprof/mkprof.c (builtqueue_addempty): Added. (saveindividual): Added. (build): Is working until the profile is built. * bin/mkprof/ellipse.h: Function taken to `box.h`. * bin/mkprof/ellipse.c: Function taken to `box.c`. * bin/mkprof/args.h (argp_option): added `--numrandom`, changed `mginimg` to `psfinimg`. * bin/imgcrop/main.h (imgcropparams): iwidth is now a 2 element array. * bin/imgcrop/crop.c: Removed `borderfromcenter` and `correctflpixels` to `lib/box.c`. * lib/stats.h: Changed to `statistics.h`, all non-used functions removed. * lib/arraymanip.c: Removed all non-used functions. * include/stats.h: Changed to `statistics.h` and all non-used functions removed. * include/fixedstringmacros.h (ASTRUTILSBIBTEX): Added. * include/commonargs.h (argp_option): Added `--cite` option and added the `main.h` and `cite.h` header for each program to use their names. * include/checkset.h: function name `nameiswritable` is changed to dir0file1 which is much more descriptive. * include/arraymanip.h: Removed all the non-used functions from the past. New functions will be added as they are needed. * doc/astrutils.texi: Updated. 2015-01-13 Mohammad Akhlaghi * bin/mkprof/ui.c (preparearrays): Added. (setparams): numthreads initialized to configured value. * bin/mkprof/mkprof.c (build): Added. (write): Added. (mkprof): Parallel jobs configured. * bin/mkprof/ellipse.c: Added * bin/mkprof/args.h (argp_option): Changed psfprofsinimg to mginimg. * bin/imgcrop/imgcrop.c (imgcrop): Used attrbarrierinit. * lib/astrthreads.c (attrbarrierinit): Added. * doc/astrutils.texi: Updated. 2015-01-12 Mohammad Akhlaghi * bin/imgcrop/imgcrop.c: Using pthread_barrier_wait for synchronizing threads instead of the mutexes and conditional variables before. * lib/txtarrayvv.c: When the value couldn't be read as a number, it would be saved as the lowest possible double value. Now it will be saved as a NaN. * lib/fitsarrayvv.c (nultovalue): Convert blank values in images to a given values. (changetype): Change the type of an image. * lib/checkset.c (nameisawritablefile): Corrected to accurately check if the given name is usable as output. * lib/arraymanip.c (converttofloat): Removed conversion functions. These were mainly for converting a FITS image type to the desired type. Now there is one function in fitsarrayvv.c which will do the conversion. * include/checkset.h (CHECKCOLINCAT): Added to check column number and all values within a column. * doc/astrutils.texi: Updated the text, changing names and explanations. * configure.ac: Changed MockGals, mockgals, name to MakeProfiles, mkprof. * Makefile.am (EXTRA_DIST): Moved the library header files to the Makefile.am in lib/. 2015-01-06 Mohammad Akhlaghi * bin/mockgals/args.h (parse_opt): Removed the check below. * bin/imgcrop/args.h (parse_opt): Removed the check below. * include/commonargs.h (cparse_opt): Added check for not calling `--setdirconf` and `--setusrconf` together. 2015-01-05 Mohammad Akhlaghi * doc/formath.texi: Added. A set of macros to write equations nicely in TeX, HTML (using MathJax). * bin/imgcrop/astrimgcrop.def: renamed to bin/imgcrop/astrimgcrop.conf. * lib/defaults.c: renamed to include/configfiles.c. * lib/checkset.c (stringhasspace): Function added. * include/fixedstringmacros.h (SHORTCOPYRIGHT): 2015 added. (MOREHELPINFO): Corrected info explanation in help output. * include/defaults.h: renamed to include/configfiles.h * include/commonparams.h (commonparams): Similar to the change in commonargs.h. * include/commonargs.h (argp_option): `--dirdefaults` and `--userdefaults` changed to `--setdirconf` and `--setusrconf`. * doc/astrutils.texi: Included formath.texi to display math equations, updates to the text. * doc/Makefile.am (headers): Used a shell '*' instead of calling each program separately. This was enabled with the new file structure. * configure.ac: Changed all default names to configure for a configuration file, not a default file (only name). * Makefile.am: MockGals conditional compilation added. 2014-12-30 Mohammad Akhlaghi * tests/basicchecks.sh: New file (common tests for all tests). * tests/Makefile.am (AM_TESTS_ENVIRONMENT): Corrected test environment. * bin/imgcrop/ui.c (setparams): Moved all similar actions to the CHECKSETDEFAULTS macro in defaults.h * bin/imgcrop/Makefile.am (AM_CPPFLAGS): New (previously in AM_CFLAGS). * lib/defaults.c (addhomedir): Now returns char *. (writelocaldefaultstop): Informs the user of how to make the needed directory with `make -p`. * include/defaults.h (SAVE_LOCAL_DEFAULTS): changed addhomedir. (CHECKSETDEFAULTS): A new macro to read defaults. (END_OF_NOTSET_REPORT): Added some extra information. * doc/astrutils.texi: A lot of updates in the text! Listing them all would be too much! * configure.ac: `--with-numthreads` and `--enable-progname` were created along with all their necessary checks. * Makefile.am: Set conditional subdirectories. Added `basicchecks.sh` to the files to be distributed. 2014-12-28 Mohammad Akhlaghi GNU Astronomical Utilities created with the ImageCrop as the first package. Other packages will be added in the next few days. gnuastro-0.5/COPYING0000644000175000017500000010451312720642724011206 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gnuastro-0.5/AUTHORS0000644000175000017500000000062113217220023011200 00000000000000GNU Astronomy Utilities (Gnuastro) authors ========================================== Generated for Gnuastro 0.5. Ordered by number of commits in the Git project history. 883 Mohammad Akhlaghi 29 Mosè Giordano 18 Vladimir Markelov 7 Boud Roukema 1 Lucas MacQuarrie gnuastro-0.5/config.h.in0000644000175000017500000024172013217217704012176 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* CPU and C ABI indicator */ #ifndef __i386__ #undef __i386__ #endif #ifndef __x86_64_x32__ #undef __x86_64_x32__ #endif #ifndef __x86_64__ #undef __x86_64__ #endif #ifndef __alpha__ #undef __alpha__ #endif #ifndef __arm__ #undef __arm__ #endif #ifndef __armhf__ #undef __armhf__ #endif #ifndef __arm64_ilp32__ #undef __arm64_ilp32__ #endif #ifndef __arm64__ #undef __arm64__ #endif #ifndef __hppa__ #undef __hppa__ #endif #ifndef __hppa64__ #undef __hppa64__ #endif #ifndef __ia64_ilp32__ #undef __ia64_ilp32__ #endif #ifndef __ia64__ #undef __ia64__ #endif #ifndef __m68k__ #undef __m68k__ #endif #ifndef __mips__ #undef __mips__ #endif #ifndef __mipsn32__ #undef __mipsn32__ #endif #ifndef __mips64__ #undef __mips64__ #endif #ifndef __powerpc__ #undef __powerpc__ #endif #ifndef __powerpc64__ #undef __powerpc64__ #endif #ifndef __powerpc64_elfv2__ #undef __powerpc64_elfv2__ #endif #ifndef __s390__ #undef __s390__ #endif #ifndef __s390x__ #undef __s390x__ #endif #ifndef __sh__ #undef __sh__ #endif #ifndef __sparc__ #undef __sparc__ #endif #ifndef __sparc64__ #undef __sparc64__ #endif /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to the number of bits in type 'ptrdiff_t'. */ #undef BITSIZEOF_PTRDIFF_T /* Define to the number of bits in type 'sig_atomic_t'. */ #undef BITSIZEOF_SIG_ATOMIC_T /* Define to the number of bits in type 'size_t'. */ #undef BITSIZEOF_SIZE_T /* Define to the number of bits in type 'wchar_t'. */ #undef BITSIZEOF_WCHAR_T /* Define to the number of bits in type 'wint_t'. */ #undef BITSIZEOF_WINT_T /* Configuration file post fix. */ #undef CONF_POSTFIX /* Configuration file name format. */ #undef CONF_SHOWFMT /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if the C locale may have encoding errors. */ #undef C_LOCALE_MAYBE_EILSEQ /* Define as the bit index in the word where to find bit 0 of the exponent of 'double'. */ #undef DBL_EXPBIT0_BIT /* Define as the word index where to find the exponent of 'double'. */ #undef DBL_EXPBIT0_WORD /* Define as the bit index in the word where to find the sign of 'double'. */ #undef DBL_SIGNBIT_BIT /* Define as the word index where to find the sign of 'double'. */ #undef DBL_SIGNBIT_WORD /* Define to 1 if // is a file system root distinct from /. */ #undef DOUBLE_SLASH_IS_DISTINCT_ROOT /* Define this to 1 if F_DUPFD behavior does not match POSIX */ #undef FCNTL_DUPFD_BUGGY /* Define to nothing if C supports flexible array members, and to 1 if it does not. That way, with a declaration like 'struct s { int n; double d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 compilers. When computing the size of such an object, don't use 'sizeof (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)' instead. Don't use 'offsetof (struct s, d[0])', as this doesn't work with MSVC and with C++ compilers. */ #undef FLEXIBLE_ARRAY_MEMBER /* Define as the bit index in the word where to find bit 0 of the exponent of 'float'. */ #undef FLT_EXPBIT0_BIT /* Define as the word index where to find the exponent of 'float'. */ #undef FLT_EXPBIT0_WORD /* Define as the bit index in the word where to find the sign of 'float'. */ #undef FLT_SIGNBIT_BIT /* Define as the word index where to find the sign of 'float'. */ #undef FLT_SIGNBIT_WORD /* Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string. */ #undef FUNC_NL_LANGINFO_YESEXPR_WORKS /* The executable to call GNU Libtool */ #undef GAL_CONFIG_GNULIBTOOL_EXEC /* libgit2 is installed on the system */ #undef GAL_CONFIG_HAVE_LIBGIT2 /* System has pthread_barrier */ #undef GAL_CONFIG_HAVE_PTHREAD_BARRIER /* WCSLIB comes with wcslib_version */ #undef GAL_CONFIG_HAVE_WCSLIB_VERSION /* On 32bit will be 4, on 64 bit, will be 8 */ #undef GAL_CONFIG_SIZEOF_LONG /* On 32bit will be 4, on 64 bit, will be 8 */ #undef GAL_CONFIG_SIZEOF_SIZE_T /* Define if gettimeofday clobbers the localtime buffer. */ #undef GETTIMEOFDAY_CLOBBERS_LOCALTIME /* Define this to 'void' or 'struct timezone' to match the system's declaration of the second argument to gettimeofday. */ #undef GETTIMEOFDAY_TIMEZONE /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fscanf shall be considered present. */ #undef GNULIB_FSCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module lock shall be considered present. */ #undef GNULIB_LOCK /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module malloc-gnu shall be considered present. */ #undef GNULIB_MALLOC_GNU /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module msvc-nothrow shall be considered present. */ #undef GNULIB_MSVC_NOTHROW /* Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__" */ #undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU /* Define to 1 to add extern declaration of program_invocation_name to argp.h */ #undef GNULIB_PROGRAM_INVOCATION_NAME /* Define to 1 to add extern declaration of program_invocation_short_name to argp.h */ #undef GNULIB_PROGRAM_INVOCATION_SHORT_NAME /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module scanf shall be considered present. */ #undef GNULIB_SCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror shall be considered present. */ #undef GNULIB_STRERROR /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror_r-posix shall be considered present. */ #undef GNULIB_STRERROR_R_POSIX /* Define to 1 when the gnulib module accept should be tested. */ #undef GNULIB_TEST_ACCEPT /* Define to 1 when the gnulib module bind should be tested. */ #undef GNULIB_TEST_BIND /* Define to 1 when the gnulib module btowc should be tested. */ #undef GNULIB_TEST_BTOWC /* Define to 1 when the gnulib module cloexec should be tested. */ #undef GNULIB_TEST_CLOEXEC /* Define to 1 when the gnulib module close should be tested. */ #undef GNULIB_TEST_CLOSE /* Define to 1 when the gnulib module connect should be tested. */ #undef GNULIB_TEST_CONNECT /* Define to 1 when the gnulib module dup2 should be tested. */ #undef GNULIB_TEST_DUP2 /* Define to 1 when the gnulib module environ should be tested. */ #undef GNULIB_TEST_ENVIRON /* Define to 1 when the gnulib module fcntl should be tested. */ #undef GNULIB_TEST_FCNTL /* Define to 1 when the gnulib module fdopen should be tested. */ #undef GNULIB_TEST_FDOPEN /* Define to 1 when the gnulib module fstat should be tested. */ #undef GNULIB_TEST_FSTAT /* Define to 1 when the gnulib module ftruncate should be tested. */ #undef GNULIB_TEST_FTRUNCATE /* Define to 1 when the gnulib module getcwd should be tested. */ #undef GNULIB_TEST_GETCWD /* Define to 1 when the gnulib module getdelim should be tested. */ #undef GNULIB_TEST_GETDELIM /* Define to 1 when the gnulib module getdtablesize should be tested. */ #undef GNULIB_TEST_GETDTABLESIZE /* Define to 1 when the gnulib module getline should be tested. */ #undef GNULIB_TEST_GETLINE /* Define to 1 when the gnulib module getpagesize should be tested. */ #undef GNULIB_TEST_GETPAGESIZE /* Define to 1 when the gnulib module gettimeofday should be tested. */ #undef GNULIB_TEST_GETTIMEOFDAY /* Define to 1 when the gnulib module ioctl should be tested. */ #undef GNULIB_TEST_IOCTL /* Define to 1 when the gnulib module iswblank should be tested. */ #undef GNULIB_TEST_ISWBLANK /* Define to 1 when the gnulib module listen should be tested. */ #undef GNULIB_TEST_LISTEN /* Define to 1 when the gnulib module localeconv should be tested. */ #undef GNULIB_TEST_LOCALECONV /* Define to 1 when the gnulib module lstat should be tested. */ #undef GNULIB_TEST_LSTAT /* Define to 1 when the gnulib module malloc-posix should be tested. */ #undef GNULIB_TEST_MALLOC_POSIX /* Define to 1 when the gnulib module mbrtowc should be tested. */ #undef GNULIB_TEST_MBRTOWC /* Define to 1 when the gnulib module mbschr should be tested. */ #undef GNULIB_TEST_MBSCHR /* Define to 1 when the gnulib module mbsinit should be tested. */ #undef GNULIB_TEST_MBSINIT /* Define to 1 when the gnulib module mbspbrk should be tested. */ #undef GNULIB_TEST_MBSPBRK /* Define to 1 when the gnulib module mbsspn should be tested. */ #undef GNULIB_TEST_MBSSPN /* Define to 1 when the gnulib module mbstok_r should be tested. */ #undef GNULIB_TEST_MBSTOK_R /* Define to 1 when the gnulib module mbtowc should be tested. */ #undef GNULIB_TEST_MBTOWC /* Define to 1 when the gnulib module memchr should be tested. */ #undef GNULIB_TEST_MEMCHR /* Define to 1 when the gnulib module mempcpy should be tested. */ #undef GNULIB_TEST_MEMPCPY /* Define to 1 when the gnulib module nanosleep should be tested. */ #undef GNULIB_TEST_NANOSLEEP /* Define to 1 when the gnulib module nl_langinfo should be tested. */ #undef GNULIB_TEST_NL_LANGINFO /* Define to 1 when the gnulib module open should be tested. */ #undef GNULIB_TEST_OPEN /* Define to 1 when the gnulib module perror should be tested. */ #undef GNULIB_TEST_PERROR /* Define to 1 when the gnulib module pipe should be tested. */ #undef GNULIB_TEST_PIPE /* Define to 1 when the gnulib module pthread_sigmask should be tested. */ #undef GNULIB_TEST_PTHREAD_SIGMASK /* Define to 1 when the gnulib module putenv should be tested. */ #undef GNULIB_TEST_PUTENV /* Define to 1 when the gnulib module raise should be tested. */ #undef GNULIB_TEST_RAISE /* Define to 1 when the gnulib module rawmemchr should be tested. */ #undef GNULIB_TEST_RAWMEMCHR /* Define to 1 when the gnulib module select should be tested. */ #undef GNULIB_TEST_SELECT /* Define to 1 when the gnulib module setenv should be tested. */ #undef GNULIB_TEST_SETENV /* Define to 1 when the gnulib module setlocale should be tested. */ #undef GNULIB_TEST_SETLOCALE /* Define to 1 when the gnulib module setsockopt should be tested. */ #undef GNULIB_TEST_SETSOCKOPT /* Define to 1 when the gnulib module sigaction should be tested. */ #undef GNULIB_TEST_SIGACTION /* Define to 1 when the gnulib module signbit should be tested. */ #undef GNULIB_TEST_SIGNBIT /* Define to 1 when the gnulib module sigprocmask should be tested. */ #undef GNULIB_TEST_SIGPROCMASK /* Define to 1 when the gnulib module sleep should be tested. */ #undef GNULIB_TEST_SLEEP /* Define to 1 when the gnulib module socket should be tested. */ #undef GNULIB_TEST_SOCKET /* Define to 1 when the gnulib module stat should be tested. */ #undef GNULIB_TEST_STAT /* Define to 1 when the gnulib module strchrnul should be tested. */ #undef GNULIB_TEST_STRCHRNUL /* Define to 1 when the gnulib module strerror should be tested. */ #undef GNULIB_TEST_STRERROR /* Define to 1 when the gnulib module strerror_r should be tested. */ #undef GNULIB_TEST_STRERROR_R /* Define to 1 when the gnulib module strndup should be tested. */ #undef GNULIB_TEST_STRNDUP /* Define to 1 when the gnulib module strnlen should be tested. */ #undef GNULIB_TEST_STRNLEN /* Define to 1 when the gnulib module strtod should be tested. */ #undef GNULIB_TEST_STRTOD /* Define to 1 when the gnulib module strtok_r should be tested. */ #undef GNULIB_TEST_STRTOK_R /* Define to 1 when the gnulib module symlink should be tested. */ #undef GNULIB_TEST_SYMLINK /* Define to 1 when the gnulib module unsetenv should be tested. */ #undef GNULIB_TEST_UNSETENV /* Define to 1 when the gnulib module usleep should be tested. */ #undef GNULIB_TEST_USLEEP /* Define to 1 when the gnulib module vsnprintf should be tested. */ #undef GNULIB_TEST_VSNPRINTF /* Define to 1 when the gnulib module wcrtomb should be tested. */ #undef GNULIB_TEST_WCRTOMB /* Define to 1 when the gnulib module wctob should be tested. */ #undef GNULIB_TEST_WCTOB /* Define to 1 when the gnulib module wctomb should be tested. */ #undef GNULIB_TEST_WCTOMB /* Define to 1 when the gnulib module wcwidth should be tested. */ #undef GNULIB_TEST_WCWIDTH /* Define to 1 if you have 'alloca' after including , a header that may be supplied by this distribution. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the header file. */ #undef HAVE_BP_SYM_H /* Define to 1 if you have the `btowc' function. */ #undef HAVE_BTOWC /* Define to 1 if nanosleep mishandles large arguments. */ #undef HAVE_BUG_BIG_NANOSLEEP /* Define to 1 if you have the `catgets' function. */ #undef HAVE_CATGETS /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define to 1 if you have the `chsize' function. */ #undef HAVE_CHSIZE /* Define if the copysignf function is declared in and available in libc. */ #undef HAVE_COPYSIGNF_IN_LIBC /* Define if the copysignl function is declared in and available in libc. */ #undef HAVE_COPYSIGNL_IN_LIBC /* Define if the copysign function is declared in and available in libc. */ #undef HAVE_COPYSIGN_IN_LIBC /* Define to 1 if you have the header file. */ #undef HAVE_CRTDEFS_H /* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. */ #undef HAVE_DECL_ALARM /* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_CLEARERR_UNLOCKED /* Define to 1 if you have the declaration of `copysign', and to 0 if you don't. */ #undef HAVE_DECL_COPYSIGN /* Define to 1 if you have the declaration of `copysignf', and to 0 if you don't. */ #undef HAVE_DECL_COPYSIGNF /* Define to 1 if you have the declaration of `copysignl', and to 0 if you don't. */ #undef HAVE_DECL_COPYSIGNL /* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FEOF_UNLOCKED /* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FERROR_UNLOCKED /* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FFLUSH_UNLOCKED /* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FGETS_UNLOCKED /* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FPUTC_UNLOCKED /* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FPUTS_UNLOCKED /* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FREAD_UNLOCKED /* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FWRITE_UNLOCKED /* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETCHAR_UNLOCKED /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETC_UNLOCKED /* Define to 1 if you have the declaration of `getdelim', and to 0 if you don't. */ #undef HAVE_DECL_GETDELIM /* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you don't. */ #undef HAVE_DECL_GETDTABLESIZE /* Define to 1 if you have the declaration of `getline', and to 0 if you don't. */ #undef HAVE_DECL_GETLINE /* Define to 1 if you have the declaration of `inet_pton', and to 0 if you don't. */ #undef HAVE_DECL_INET_PTON /* Define to 1 if you have the declaration of `isblank', and to 0 if you don't. */ #undef HAVE_DECL_ISBLANK /* Define to 1 if you have the declaration of `iswblank', and to 0 if you don't. */ #undef HAVE_DECL_ISWBLANK /* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you don't. */ #undef HAVE_DECL_MBRTOWC /* Define to 1 if you have the declaration of `mbsinit', and to 0 if you don't. */ #undef HAVE_DECL_MBSINIT /* Define to 1 if you have the declaration of `program_invocation_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_NAME /* Define to 1 if you have the declaration of `program_invocation_short_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_PUTCHAR_UNLOCKED /* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_PUTC_UNLOCKED /* Define to 1 if you have the declaration of `setenv', and to 0 if you don't. */ #undef HAVE_DECL_SETENV /* Define to 1 if you have the declaration of `sleep', and to 0 if you don't. */ #undef HAVE_DECL_SLEEP /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R /* Define to 1 if you have the declaration of `strncasecmp', and to 0 if you don't. */ #undef HAVE_DECL_STRNCASECMP /* Define to 1 if you have the declaration of `strndup', and to 0 if you don't. */ #undef HAVE_DECL_STRNDUP /* Define to 1 if you have the declaration of `strnlen', and to 0 if you don't. */ #undef HAVE_DECL_STRNLEN /* Define to 1 if you have the declaration of `strtok_r', and to 0 if you don't. */ #undef HAVE_DECL_STRTOK_R /* Define to 1 if you have the declaration of `towlower', and to 0 if you don't. */ #undef HAVE_DECL_TOWLOWER /* Define to 1 if you have the declaration of `unsetenv', and to 0 if you don't. */ #undef HAVE_DECL_UNSETENV /* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you don't. */ #undef HAVE_DECL_VSNPRINTF /* Define to 1 if you have the declaration of `wcrtomb', and to 0 if you don't. */ #undef HAVE_DECL_WCRTOMB /* Define to 1 if you have the declaration of `wctob', and to 0 if you don't. */ #undef HAVE_DECL_WCTOB /* Define to 1 if you have the declaration of `wcwidth', and to 0 if you don't. */ #undef HAVE_DECL_WCWIDTH /* Define to 1 if you have the declaration of `_putenv', and to 0 if you don't. */ #undef HAVE_DECL__PUTENV /* Define to 1 if you have the declaration of `_snprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNPRINTF /* Define to 1 if you have the declaration of `__argv', and to 0 if you don't. */ #undef HAVE_DECL___ARGV /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the 'dup2' function. */ #undef HAVE_DUP2 /* Define if you have the declaration of environ. */ #undef HAVE_ENVIRON_DECL /* Define to 1 if you have the `fcntl' function. */ #undef HAVE_FCNTL /* Define to 1 if you have the header file. */ #undef HAVE_FEATURES_H /* Define to 1 if you have the `flockfile' function. */ #undef HAVE_FLOCKFILE /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the `funlockfile' function. */ #undef HAVE_FUNLOCKFILE /* Define to 1 if you have the `getdelim' function. */ #undef HAVE_GETDELIM /* Define to 1 if you have the `getdtablesize' function. */ #undef HAVE_GETDTABLESIZE /* Define to 1 if you have the `getexecname' function. */ #undef HAVE_GETEXECNAME /* Define to 1 if you have the `getlocalename_l' function. */ #undef HAVE_GETLOCALENAME_L /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getopt_long_only' function. */ #undef HAVE_GETOPT_LONG_ONLY /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `getprogname' function. */ #undef HAVE_GETPROGNAME /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the `inet_pton' function. */ #undef HAVE_INET_PTON /* Define if you have the 'intmax_t' type in or . */ #undef HAVE_INTMAX_T /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_INTTYPES_H_WITH_UINTMAX /* Define to 1 if you have the `ioctl' function. */ #undef HAVE_IOCTL /* Define to 1 if defines AF_INET. */ #undef HAVE_IPV4 /* Define to 1 if defines AF_INET6. */ #undef HAVE_IPV6 /* Define to 1 if you have the `isblank' function. */ #undef HAVE_ISBLANK /* Define if the isnan(double) function is available in libc. */ #undef HAVE_ISNAND_IN_LIBC /* Define if the isnan(float) function is available in libc. */ #undef HAVE_ISNANF_IN_LIBC /* Define if the isnan(long double) function is available in libc. */ #undef HAVE_ISNANL_IN_LIBC /* Define to 1 if you have the `iswblank' function. */ #undef HAVE_ISWBLANK /* Define to 1 if you have the `iswcntrl' function. */ #undef HAVE_ISWCNTRL /* Define to 1 if you have the `iswctype' function. */ #undef HAVE_ISWCTYPE /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define to 1 if you have the header file. */ #undef HAVE_LANGINFO_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define if the ldexp function is available in libc. */ #undef HAVE_LDEXP_IN_LIBC /* Define to 1 if you have the header file. */ #undef HAVE_LIBINTL_H /* Has libjpeg */ #undef HAVE_LIBJPEG /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LINEWRAP_H /* Define to 1 if the system has the type 'long long int'. */ #undef HAVE_LONG_LONG_INT /* Define to 1 if you have the `lstat' function. */ #undef HAVE_LSTAT /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if your system has a GNU libc compatible 'malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC_GNU /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define if the 'malloc' function is POSIX compliant. */ #undef HAVE_MALLOC_POSIX /* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and . */ #undef HAVE_MAP_ANONYMOUS /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the `mbrtowc' function. */ #undef HAVE_MBRTOWC /* Define to 1 if you have the `mbsinit' function. */ #undef HAVE_MBSINIT /* Define to 1 if declares mbstate_t. */ #undef HAVE_MBSTATE_T /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if defines the MIN and MAX macros. */ #undef HAVE_MINMAX_IN_LIMITS_H /* Define to 1 if defines the MIN and MAX macros. */ #undef HAVE_MINMAX_IN_SYS_PARAM_H /* Define to 1 if you have the `mprotect' function. */ #undef HAVE_MPROTECT /* Define to 1 on MSVC platforms that have the "invalid parameter handler" concept. */ #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the `newlocale' function. */ #undef HAVE_NEWLOCALE /* Define to 1 if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO /* Define to 1 if you have the header file. */ #undef HAVE_OS_H /* Define to 1 if you have the `pipe' function. */ #undef HAVE_PIPE /* Define if program_invocation_name is defined */ #undef HAVE_PROGRAM_INVOCATION_NAME /* Define if program_invocation_short_name is defined */ #undef HAVE_PROGRAM_INVOCATION_SHORT_NAME /* Define to 1 if you have the `pstat_getdynamic' function. */ #undef HAVE_PSTAT_GETDYNAMIC /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD /* Define to 1 if you have the `pthread_atfork' function. */ #undef HAVE_PTHREAD_ATFORK /* Define if the defines PTHREAD_MUTEX_RECURSIVE. */ #undef HAVE_PTHREAD_MUTEX_RECURSIVE /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT /* Define if the POSIX multithreading library has read/write locks. */ #undef HAVE_PTHREAD_RWLOCK /* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader. */ #undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* Define to 1 if the pthread_sigmask function can be used (despite bugs). */ #undef HAVE_PTHREAD_SIGMASK /* Define to 1 if you have the `raise' function. */ #undef HAVE_RAISE /* Define to 1 if you have the `rawmemchr' function. */ #undef HAVE_RAWMEMCHR /* Define to 1 if accept is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ACCEPT /* Define to 1 if accept4 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ACCEPT4 /* Define to 1 if acosf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ACOSF /* Define to 1 if acosl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ACOSL /* Define to 1 if asinf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ASINF /* Define to 1 if asinl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ASINL /* Define to 1 if atanf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ATANF /* Define to 1 if atanl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ATANL /* Define to 1 if atoll is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ATOLL /* Define to 1 if bind is declared even after undefining macros. */ #undef HAVE_RAW_DECL_BIND /* Define to 1 if btowc is declared even after undefining macros. */ #undef HAVE_RAW_DECL_BTOWC /* Define to 1 if canonicalize_file_name is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME /* Define to 1 if cbrt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CBRT /* Define to 1 if cbrtf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CBRTF /* Define to 1 if cbrtl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CBRTL /* Define to 1 if ceilf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CEILF /* Define to 1 if ceill is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CEILL /* Define to 1 if chdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CHDIR /* Define to 1 if chown is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CHOWN /* Define to 1 if connect is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CONNECT /* Define to 1 if copysign is declared even after undefining macros. */ #undef HAVE_RAW_DECL_COPYSIGN /* Define to 1 if copysignf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_COPYSIGNF /* Define to 1 if copysignl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_COPYSIGNL /* Define to 1 if cosf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_COSF /* Define to 1 if coshf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_COSHF /* Define to 1 if cosl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_COSL /* Define to 1 if dprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DPRINTF /* Define to 1 if dup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUP /* Define to 1 if dup2 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUP2 /* Define to 1 if dup3 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUP3 /* Define to 1 if duplocale is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUPLOCALE /* Define to 1 if endusershell is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ENDUSERSHELL /* Define to 1 if environ is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ENVIRON /* Define to 1 if euidaccess is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EUIDACCESS /* Define to 1 if exp2 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EXP2 /* Define to 1 if exp2f is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EXP2F /* Define to 1 if exp2l is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EXP2L /* Define to 1 if expf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EXPF /* Define to 1 if expl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EXPL /* Define to 1 if expm1 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EXPM1 /* Define to 1 if expm1f is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EXPM1F /* Define to 1 if expm1l is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EXPM1L /* Define to 1 if fabsf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FABSF /* Define to 1 if fabsl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FABSL /* Define to 1 if faccessat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FACCESSAT /* Define to 1 if fchdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FCHDIR /* Define to 1 if fchmodat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FCHMODAT /* Define to 1 if fchownat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FCHOWNAT /* Define to 1 if fcntl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FCNTL /* Define to 1 if fdatasync is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FDATASYNC /* Define to 1 if ffs is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FFS /* Define to 1 if ffsl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FFSL /* Define to 1 if ffsll is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FFSLL /* Define to 1 if floorf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FLOORF /* Define to 1 if floorl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FLOORL /* Define to 1 if fma is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FMA /* Define to 1 if fmaf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FMAF /* Define to 1 if fmal is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FMAL /* Define to 1 if fmod is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FMOD /* Define to 1 if fmodf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FMODF /* Define to 1 if fmodl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FMODL /* Define to 1 if fpurge is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FPURGE /* Define to 1 if frexpf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FREXPF /* Define to 1 if frexpl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FREXPL /* Define to 1 if fseeko is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FSEEKO /* Define to 1 if fstat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FSTAT /* Define to 1 if fstatat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FSTATAT /* Define to 1 if fsync is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FSYNC /* Define to 1 if ftello is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FTELLO /* Define to 1 if ftruncate is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FTRUNCATE /* Define to 1 if futimens is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FUTIMENS /* Define to 1 if getcwd is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETCWD /* Define to 1 if getdelim is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETDELIM /* Define to 1 if getdomainname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETDOMAINNAME /* Define to 1 if getdtablesize is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETDTABLESIZE /* Define to 1 if getgroups is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETGROUPS /* Define to 1 if gethostname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETHOSTNAME /* Define to 1 if getline is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLINE /* Define to 1 if getloadavg is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLOADAVG /* Define to 1 if getlogin is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLOGIN /* Define to 1 if getlogin_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLOGIN_R /* Define to 1 if getpagesize is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETPAGESIZE /* Define to 1 if getpeername is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETPEERNAME /* Define to 1 if gets is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETS /* Define to 1 if getsockname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETSOCKNAME /* Define to 1 if getsockopt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETSOCKOPT /* Define to 1 if getsubopt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETSUBOPT /* Define to 1 if gettimeofday is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETTIMEOFDAY /* Define to 1 if getusershell is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETUSERSHELL /* Define to 1 if grantpt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GRANTPT /* Define to 1 if group_member is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GROUP_MEMBER /* Define to 1 if hypotf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_HYPOTF /* Define to 1 if hypotl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_HYPOTL /* Define to 1 if ilogb is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ILOGB /* Define to 1 if ilogbf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ILOGBF /* Define to 1 if ilogbl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ILOGBL /* Define to 1 if imaxabs is declared even after undefining macros. */ #undef HAVE_RAW_DECL_IMAXABS /* Define to 1 if imaxdiv is declared even after undefining macros. */ #undef HAVE_RAW_DECL_IMAXDIV /* Define to 1 if inet_ntop is declared even after undefining macros. */ #undef HAVE_RAW_DECL_INET_NTOP /* Define to 1 if inet_pton is declared even after undefining macros. */ #undef HAVE_RAW_DECL_INET_PTON /* Define to 1 if initstate is declared even after undefining macros. */ #undef HAVE_RAW_DECL_INITSTATE /* Define to 1 if initstate_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_INITSTATE_R /* Define to 1 if ioctl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_IOCTL /* Define to 1 if isatty is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ISATTY /* Define to 1 if isblank is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ISBLANK /* Define to 1 if iswctype is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ISWCTYPE /* Define to 1 if lchmod is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LCHMOD /* Define to 1 if lchown is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LCHOWN /* Define to 1 if ldexpf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LDEXPF /* Define to 1 if ldexpl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LDEXPL /* Define to 1 if link is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LINK /* Define to 1 if linkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LINKAT /* Define to 1 if listen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LISTEN /* Define to 1 if log is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOG /* Define to 1 if log10 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOG10 /* Define to 1 if log10f is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOG10F /* Define to 1 if log10l is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOG10L /* Define to 1 if log1p is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOG1P /* Define to 1 if log1pf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOG1PF /* Define to 1 if log1pl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOG1PL /* Define to 1 if log2 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOG2 /* Define to 1 if log2f is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOG2F /* Define to 1 if log2l is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOG2L /* Define to 1 if logb is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOGB /* Define to 1 if logbf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOGBF /* Define to 1 if logbl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOGBL /* Define to 1 if logf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOGF /* Define to 1 if logl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LOGL /* Define to 1 if lseek is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LSEEK /* Define to 1 if lstat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LSTAT /* Define to 1 if mbrlen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MBRLEN /* Define to 1 if mbrtowc is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MBRTOWC /* Define to 1 if mbsinit is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MBSINIT /* Define to 1 if mbsnrtowcs is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MBSNRTOWCS /* Define to 1 if mbsrtowcs is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MBSRTOWCS /* Define to 1 if memmem is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MEMMEM /* Define to 1 if mempcpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MEMPCPY /* Define to 1 if memrchr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MEMRCHR /* Define to 1 if mkdirat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKDIRAT /* Define to 1 if mkdtemp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKDTEMP /* Define to 1 if mkfifo is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKFIFO /* Define to 1 if mkfifoat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKFIFOAT /* Define to 1 if mknod is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKNOD /* Define to 1 if mknodat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKNODAT /* Define to 1 if mkostemp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKOSTEMP /* Define to 1 if mkostemps is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKOSTEMPS /* Define to 1 if mkstemp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKSTEMP /* Define to 1 if mkstemps is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MKSTEMPS /* Define to 1 if modf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MODF /* Define to 1 if modff is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MODFF /* Define to 1 if modfl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MODFL /* Define to 1 if nl_langinfo is declared even after undefining macros. */ #undef HAVE_RAW_DECL_NL_LANGINFO /* Define to 1 if openat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_OPENAT /* Define to 1 if pclose is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PCLOSE /* Define to 1 if pipe is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PIPE /* Define to 1 if pipe2 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PIPE2 /* Define to 1 if popen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_POPEN /* Define to 1 if posix_openpt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_POSIX_OPENPT /* Define to 1 if powf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_POWF /* Define to 1 if pread is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PREAD /* Define to 1 if pselect is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PSELECT /* Define to 1 if pthread_sigmask is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PTHREAD_SIGMASK /* Define to 1 if ptsname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PTSNAME /* Define to 1 if ptsname_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PTSNAME_R /* Define to 1 if pwrite is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PWRITE /* Define to 1 if qsort_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_QSORT_R /* Define to 1 if random is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RANDOM /* Define to 1 if random_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RANDOM_R /* Define to 1 if rawmemchr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RAWMEMCHR /* Define to 1 if readlink is declared even after undefining macros. */ #undef HAVE_RAW_DECL_READLINK /* Define to 1 if readlinkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_READLINKAT /* Define to 1 if reallocarray is declared even after undefining macros. */ #undef HAVE_RAW_DECL_REALLOCARRAY /* Define to 1 if realpath is declared even after undefining macros. */ #undef HAVE_RAW_DECL_REALPATH /* Define to 1 if recv is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RECV /* Define to 1 if recvfrom is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RECVFROM /* Define to 1 if remainder is declared even after undefining macros. */ #undef HAVE_RAW_DECL_REMAINDER /* Define to 1 if remainderf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_REMAINDERF /* Define to 1 if remainderl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_REMAINDERL /* Define to 1 if renameat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RENAMEAT /* Define to 1 if rint is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RINT /* Define to 1 if rintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RINTF /* Define to 1 if rintl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RINTL /* Define to 1 if rmdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RMDIR /* Define to 1 if round is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ROUND /* Define to 1 if roundf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ROUNDF /* Define to 1 if roundl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ROUNDL /* Define to 1 if rpmatch is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RPMATCH /* Define to 1 if secure_getenv is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SECURE_GETENV /* Define to 1 if select is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SELECT /* Define to 1 if send is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SEND /* Define to 1 if sendto is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SENDTO /* Define to 1 if setenv is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETENV /* Define to 1 if sethostname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETHOSTNAME /* Define to 1 if setlocale is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETLOCALE /* Define to 1 if setsockopt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETSOCKOPT /* Define to 1 if setstate is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETSTATE /* Define to 1 if setstate_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETSTATE_R /* Define to 1 if setusershell is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETUSERSHELL /* Define to 1 if shutdown is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SHUTDOWN /* Define to 1 if sigaction is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SIGACTION /* Define to 1 if sigaddset is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SIGADDSET /* Define to 1 if sigdelset is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SIGDELSET /* Define to 1 if sigemptyset is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SIGEMPTYSET /* Define to 1 if sigfillset is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SIGFILLSET /* Define to 1 if sigismember is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SIGISMEMBER /* Define to 1 if sigpending is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SIGPENDING /* Define to 1 if sigprocmask is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SIGPROCMASK /* Define to 1 if sinf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SINF /* Define to 1 if sinhf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SINHF /* Define to 1 if sinl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SINL /* Define to 1 if sleep is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SLEEP /* Define to 1 if snprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SNPRINTF /* Define to 1 if socket is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SOCKET /* Define to 1 if sqrtf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SQRTF /* Define to 1 if sqrtl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SQRTL /* Define to 1 if srandom is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SRANDOM /* Define to 1 if srandom_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SRANDOM_R /* Define to 1 if stat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STAT /* Define to 1 if stpcpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STPCPY /* Define to 1 if stpncpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STPNCPY /* Define to 1 if strcasecmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRCASECMP /* Define to 1 if strcasestr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRCASESTR /* Define to 1 if strchrnul is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRCHRNUL /* Define to 1 if strdup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRDUP /* Define to 1 if strerror_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRERROR_R /* Define to 1 if strncasecmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRNCASECMP /* Define to 1 if strncat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRNCAT /* Define to 1 if strndup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRNDUP /* Define to 1 if strnlen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRNLEN /* Define to 1 if strpbrk is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRPBRK /* Define to 1 if strsep is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRSEP /* Define to 1 if strsignal is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRSIGNAL /* Define to 1 if strtod is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOD /* Define to 1 if strtoimax is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOIMAX /* Define to 1 if strtok_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOK_R /* Define to 1 if strtoll is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOLL /* Define to 1 if strtoull is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOULL /* Define to 1 if strtoumax is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOUMAX /* Define to 1 if strverscmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRVERSCMP /* Define to 1 if symlink is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SYMLINK /* Define to 1 if symlinkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SYMLINKAT /* Define to 1 if tanf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TANF /* Define to 1 if tanhf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TANHF /* Define to 1 if tanl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TANL /* Define to 1 if tmpfile is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TMPFILE /* Define to 1 if towctrans is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TOWCTRANS /* Define to 1 if trunc is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TRUNC /* Define to 1 if truncate is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TRUNCATE /* Define to 1 if truncf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TRUNCF /* Define to 1 if truncl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TRUNCL /* Define to 1 if ttyname_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TTYNAME_R /* Define to 1 if unlink is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UNLINK /* Define to 1 if unlinkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UNLINKAT /* Define to 1 if unlockpt is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UNLOCKPT /* Define to 1 if unsetenv is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UNSETENV /* Define to 1 if usleep is declared even after undefining macros. */ #undef HAVE_RAW_DECL_USLEEP /* Define to 1 if utimensat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UTIMENSAT /* Define to 1 if vdprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_VDPRINTF /* Define to 1 if vsnprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_VSNPRINTF /* Define to 1 if wcpcpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCPCPY /* Define to 1 if wcpncpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCPNCPY /* Define to 1 if wcrtomb is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCRTOMB /* Define to 1 if wcscasecmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCASECMP /* Define to 1 if wcscat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCAT /* Define to 1 if wcschr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCHR /* Define to 1 if wcscmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCMP /* Define to 1 if wcscoll is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCOLL /* Define to 1 if wcscpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCPY /* Define to 1 if wcscspn is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSCSPN /* Define to 1 if wcsdup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSDUP /* Define to 1 if wcsftime is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSFTIME /* Define to 1 if wcslen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSLEN /* Define to 1 if wcsncasecmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNCASECMP /* Define to 1 if wcsncat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNCAT /* Define to 1 if wcsncmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNCMP /* Define to 1 if wcsncpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNCPY /* Define to 1 if wcsnlen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNLEN /* Define to 1 if wcsnrtombs is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSNRTOMBS /* Define to 1 if wcspbrk is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSPBRK /* Define to 1 if wcsrchr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSRCHR /* Define to 1 if wcsrtombs is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSRTOMBS /* Define to 1 if wcsspn is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSSPN /* Define to 1 if wcsstr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSSTR /* Define to 1 if wcstok is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSTOK /* Define to 1 if wcswidth is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSWIDTH /* Define to 1 if wcsxfrm is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCSXFRM /* Define to 1 if wctob is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCTOB /* Define to 1 if wctrans is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCTRANS /* Define to 1 if wctype is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCTYPE /* Define to 1 if wcwidth is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WCWIDTH /* Define to 1 if wmemchr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WMEMCHR /* Define to 1 if wmemcmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WMEMCMP /* Define to 1 if wmemcpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WMEMCPY /* Define to 1 if wmemmove is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WMEMMOVE /* Define to 1 if wmemset is declared even after undefining macros. */ #undef HAVE_RAW_DECL_WMEMSET /* Define to 1 if _Exit is declared even after undefining macros. */ #undef HAVE_RAW_DECL__EXIT /* Define to 1 if 'long double' and 'double' have the same representation. */ #undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Define to 1 if the system has the type `sa_family_t'. */ #undef HAVE_SA_FAMILY_T /* Define to 1 if you have the `sched_getaffinity' function. */ #undef HAVE_SCHED_GETAFFINITY /* Define to 1 if sched_getaffinity has a glibc compatible declaration. */ #undef HAVE_SCHED_GETAFFINITY_LIKE_GLIBC /* Define to 1 if you have the `sched_getaffinity_np' function. */ #undef HAVE_SCHED_GETAFFINITY_NP /* Define to 1 if you have the header file. */ #undef HAVE_SEARCH_H /* Define to 1 if you have the header file. */ #undef HAVE_SEMAPHORE_H /* Define to 1 if you have the `setdtablesize' function. */ #undef HAVE_SETDTABLESIZE /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `shutdown' function. */ #undef HAVE_SHUTDOWN /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define to 1 if you have the `sigaltstack' function. */ #undef HAVE_SIGALTSTACK /* Define to 1 if the system has the type `siginfo_t'. */ #undef HAVE_SIGINFO_T /* Define to 1 if you have the `siginterrupt' function. */ #undef HAVE_SIGINTERRUPT /* Define to 1 if 'sig_atomic_t' is a signed integer type. */ #undef HAVE_SIGNED_SIG_ATOMIC_T /* Define to 1 if 'wchar_t' is a signed integer type. */ #undef HAVE_SIGNED_WCHAR_T /* Define to 1 if 'wint_t' is a signed integer type. */ #undef HAVE_SIGNED_WINT_T /* Define to 1 if the system has the type `sigset_t'. */ #undef HAVE_SIGSET_T /* Define to 1 if you have the `sleep' function. */ #undef HAVE_SLEEP /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define if the return value of the snprintf function is the number of of bytes (excluding the terminating NUL) that would have been produced if the buffer had been large enough. */ #undef HAVE_SNPRINTF_RETVAL_C99 /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_STDINT_H_WITH_UINTMAX /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchrnul' function. */ #undef HAVE_STRCHRNUL /* Define to 1 if you have the `strerror_r' function. */ #undef HAVE_STRERROR_R /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strndup' function. */ #undef HAVE_STRNDUP /* Define to 1 if you have the `strnlen' function. */ #undef HAVE_STRNLEN /* Define to 1 if you have the `strtok_r' function. */ #undef HAVE_STRTOK_R /* Define to 1 if `decimal_point' is a member of `struct lconv'. */ #undef HAVE_STRUCT_LCONV_DECIMAL_POINT /* Define to 1 if `sa_sigaction' is a member of `struct sigaction'. */ #undef HAVE_STRUCT_SIGACTION_SA_SIGACTION /* Define to 1 if the system has the type `struct sockaddr_storage'. */ #undef HAVE_STRUCT_SOCKADDR_STORAGE /* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */ #undef HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY /* Define to 1 if `st_atimensec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIMENSEC /* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC /* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC /* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC /* Define to 1 if `st_birthtimensec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC /* Define to 1 if `st_birthtimespec.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC /* Define to 1 if `st_birthtim.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC /* Define to 1 if you have the `symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the `sysctl' function. */ #undef HAVE_SYSCTL /* Define to 1 if you have the header file. */ #undef HAVE_SYSEXITS_H /* Define to 1 if you have the `sysmp' function. */ #undef HAVE_SYSMP /* Define to 1 if you have the header file. */ #undef HAVE_SYS_BITYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_CDEFS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PSTAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSMP_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the `towlower' function. */ #undef HAVE_TOWLOWER /* Define to 1 if you have the `tsearch' function. */ #undef HAVE_TSEARCH /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `unsetenv' function. */ #undef HAVE_UNSETENV /* Define to 1 if the system has the type 'unsigned long long int'. */ #undef HAVE_UNSIGNED_LONG_LONG_INT /* Define to 1 if you have the `uselocale' function. */ #undef HAVE_USELOCALE /* Define to 1 if you have the `usleep' function. */ #undef HAVE_USLEEP /* Define if you have a global __progname variable */ #undef HAVE_VAR___PROGNAME /* Define to 1 if you have the `vasnprintf' function. */ #undef HAVE_VASNPRINTF /* Define to 1 if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the `wcrtomb' function. */ #undef HAVE_WCRTOMB /* Define to 1 if you have the `wcslen' function. */ #undef HAVE_WCSLEN /* Define to 1 if you have the `wcsnlen' function. */ #undef HAVE_WCSNLEN /* Define to 1 if you have the `wctob' function. */ #undef HAVE_WCTOB /* Define to 1 if you have the header file. */ #undef HAVE_WCTYPE_H /* Define to 1 if you have the `wcwidth' function. */ #undef HAVE_WCWIDTH /* Define to 1 if you have the header file. */ #undef HAVE_WINSOCK2_H /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if O_NOATIME works. */ #undef HAVE_WORKING_O_NOATIME /* Define to 1 if O_NOFOLLOW works. */ #undef HAVE_WORKING_O_NOFOLLOW /* Define to 1 if you have the header file. */ #undef HAVE_WS2TCPIP_H /* Define to 1 if you have the header file. */ #undef HAVE_XLOCALE_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ #undef HAVE__SET_INVALID_PARAMETER_HANDLER /* Define to 1 if the compiler supports __builtin_expect, and to 2 if does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include #endif /* Define to 1 if you have the `__xpg_strerror_r' function. */ #undef HAVE___XPG_STRERROR_R /* In building, not usage */ #undef IN_GNUASTRO_BUILD /* Define as the bit index in the word where to find bit 0 of the exponent of 'long double'. */ #undef LDBL_EXPBIT0_BIT /* Define as the word index where to find the exponent of 'long double'. */ #undef LDBL_EXPBIT0_WORD /* Define as the bit index in the word where to find the sign of 'long double'. */ #undef LDBL_SIGNBIT_BIT /* Define as the word index where to find the sign of 'long double'. */ #undef LDBL_SIGNBIT_WORD /* Define to 1 if 'lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ #undef MALLOC_0_IS_NONNULL /* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ #undef MAP_ANONYMOUS /* Define if the mbrtowc function does not return (size_t) -2 for empty input. */ #undef MBRTOWC_EMPTY_INPUT_BUG /* Define if the mbrtowc function has the NULL pwc argument bug. */ #undef MBRTOWC_NULL_ARG1_BUG /* Define if the mbrtowc function has the NULL string argument bug. */ #undef MBRTOWC_NULL_ARG2_BUG /* Define if the mbrtowc function does not return 0 for a NUL character. */ #undef MBRTOWC_NUL_RETVAL_BUG /* Define if the mbrtowc function returns a wrong return value. */ #undef MBRTOWC_RETVAL_BUG /* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif /* Define to 1 if open() fails to recognize a trailing slash. */ #undef OPEN_TRAILING_SLASH_BUG /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define if exists and defines unusable PRI* macros. */ #undef PRI_MACROS_BROKEN /* Define to the type that is the result of default argument promotions of type mode_t. */ #undef PROMOTED_MODE_T /* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE /* Define if the pthread_in_use() detection is hard. */ #undef PTHREAD_IN_USE_DETECTION_HARD /* Define to 1 if pthread_sigmask(), when it fails, returns -1 and sets errno. */ #undef PTHREAD_SIGMASK_FAILS_WITH_ERRNO /* Define to 1 if pthread_sigmask may return 0 and have no effect. */ #undef PTHREAD_SIGMASK_INEFFECTIVE /* Define to 1 if pthread_sigmask() unblocks signals incorrectly. */ #undef PTHREAD_SIGMASK_UNBLOCK_BUG /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'ptrdiff_t'. */ #undef PTRDIFF_T_SUFFIX /* Define to 1 if stat needs help when passed a file name with a trailing slash */ #undef REPLACE_FUNC_STAT_FILE /* Define if nl_langinfo exists but is overridden by gnulib. */ #undef REPLACE_NL_LANGINFO /* Define to 1 if strerror(0) does not return a message implying success. */ #undef REPLACE_STRERROR_0 /* Define if vasnprintf exists but is overridden by gnulib. */ #undef REPLACE_VASNPRINTF /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'sig_atomic_t'. */ #undef SIG_ATOMIC_T_SUFFIX /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T /* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'size_t'. */ #undef SIZE_T_SUFFIX /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if the `S_IS*' macros in do not work properly. */ #undef STAT_MACROS_BROKEN /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if strerror_r returns char *. */ #undef STRERROR_R_CHAR_P /* Define to 1 if the type of the st_atim member of a struct stat is struct timespec. */ #undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC /* User data dir. */ #undef USERCONFIG_DIR /* Define if the POSIX multithreading library can be used. */ #undef USE_POSIX_THREADS /* Define if references to the POSIX multithreading library should be made weak. */ #undef USE_POSIX_THREADS_WEAK /* Define if the GNU Pth multithreading library can be used. */ #undef USE_PTH_THREADS /* Define if references to the GNU Pth multithreading library should be made weak. */ #undef USE_PTH_THREADS_WEAK /* Define if the old Solaris multithreading library can be used. */ #undef USE_SOLARIS_THREADS /* Define if references to the old Solaris multithreading library should be made weak. */ #undef USE_SOLARIS_THREADS_WEAK /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable NetBSD extensions on NetBSD. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD extensions on NetBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions if necessary. HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Define if the native Windows multithreading API can be used. */ #undef USE_WINDOWS_THREADS /* Version number of package */ #undef VERSION /* Define to 1 if unsetenv returns void instead of int. */ #undef VOID_UNSETENV /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wchar_t'. */ #undef WCHAR_T_SUFFIX /* Define if WSAStartup is needed. */ #undef WINDOWS_SOCKETS /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wint_t'. */ #undef WINT_T_SUFFIX /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Enable large inode numbers on Mac OS X 10.5. */ #undef _DARWIN_USE_64_BIT_INODE /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 on Solaris. */ #undef _LCONV_C99 /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 1 to make NetBSD features available. MINIX 3 needs this. */ #undef _NETBSD_SOURCE /* The _Noreturn keyword of C11. */ #if ! (defined _Noreturn \ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 in order to get the POSIX compatible declarations of socket functions. */ #undef _POSIX_PII_SOCKET /* Define to 1 if you need to in order for 'stat' and other things to work. */ #undef _POSIX_SOURCE /* Define if you want to include , so that it consistently overrides 's RE_DUP_MAX. */ #undef _REGEX_INCLUDE_LIMITS_H /* Define if you want regoff_t to be at least as wide POSIX requires. */ #undef _REGEX_LARGE_OFFSETS /* For standard stat data types on VMS. */ #undef _USE_STD_STAT /* Define to rpl_ if the getopt replacement functions and variables should be used. */ #undef __GETOPT_PREFIX /* Define to 1 if the system predates C++11. */ #undef __STDC_CONSTANT_MACROS /* Define to 1 if the system predates C++11. */ #undef __STDC_LIMIT_MACROS /* Define as a replacement for the ISO C99 __func__ variable. */ #undef __func__ /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like . For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions. This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Assume DragonFly and FreeBSD will be similar. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see and . */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif /* Define to `int' if doesn't define. */ #undef gid_t /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to long or long long if and don't define. */ #undef intmax_t /* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to a type if does not define. */ #undef mbstate_t /* Define to `int' if does not define. */ #undef mode_t /* Define to the type of st_nlink in struct stat, or a supertype. */ #undef nlink_t /* Define to `int' if does not define. */ #undef pid_t /* Define as the type of the result of subtracting two pointers, if the system doesn't define it. */ #undef ptrdiff_t /* Define to rpl_re_comp if the replacement should be used. */ #undef re_comp /* Define to rpl_re_compile_fastmap if the replacement should be used. */ #undef re_compile_fastmap /* Define to rpl_re_compile_pattern if the replacement should be used. */ #undef re_compile_pattern /* Define to rpl_re_exec if the replacement should be used. */ #undef re_exec /* Define to rpl_re_match if the replacement should be used. */ #undef re_match /* Define to rpl_re_match_2 if the replacement should be used. */ #undef re_match_2 /* Define to rpl_re_search if the replacement should be used. */ #undef re_search /* Define to rpl_re_search_2 if the replacement should be used. */ #undef re_search_2 /* Define to rpl_re_set_registers if the replacement should be used. */ #undef re_set_registers /* Define to rpl_re_set_syntax if the replacement should be used. */ #undef re_set_syntax /* Define to rpl_re_syntax_options if the replacement should be used. */ #undef re_syntax_options /* Define to rpl_regcomp if the replacement should be used. */ #undef regcomp /* Define to rpl_regerror if the replacement should be used. */ #undef regerror /* Define to rpl_regexec if the replacement should be used. */ #undef regexec /* Define to rpl_regfree if the replacement should be used. */ #undef regfree /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. Perhaps some future version of Sun C++ will work with restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict # define __restrict__ #endif /* Define to `unsigned int' if does not define. */ #undef size_t /* type to use in place of socklen_t if not defined */ #undef socklen_t /* Define as a signed type of the same size as size_t. */ #undef ssize_t /* Define to `int' if doesn't define. */ #undef uid_t /* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* gcc supports the "unused" attribute on possibly unused labels, and g++ has since version 4.5. Note to support C++ as well as C, _GL_UNUSED_LABEL should be used with a trailing ; */ #if !defined __cplusplus || __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define _GL_UNUSED_LABEL _GL_UNUSED #else # define _GL_UNUSED_LABEL #endif /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif /* Define to an unsigned 32-bit type if lacks this type. */ #undef useconds_t gnuastro-0.5/Makefile.in0000644000175000017500000025037713217217705012231 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.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) $(dist_doc_DATA) $(dist_sysconf_DATA) \ $(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 = 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)$(docdir)" "$(DESTDIR)$(sysconfdir)" DATA = $(dist_doc_DATA) $(dist_sysconf_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 = bootstrapped/lib bootstrapped/tests lib bin/arithmetic \ bin/buildprog bin/convertt bin/convolve bin/cosmiccal bin/crop \ bin/fits bin/match bin/mkcatalog bin/mknoise bin/mkprof \ bin/noisechisel bin/statistics bin/table bin/warp doc tests am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/bootstrapped/build-aux/ar-lib \ $(top_srcdir)/bootstrapped/build-aux/compile \ $(top_srcdir)/bootstrapped/build-aux/config.guess \ $(top_srcdir)/bootstrapped/build-aux/config.rpath \ $(top_srcdir)/bootstrapped/build-aux/config.sub \ $(top_srcdir)/bootstrapped/build-aux/install-sh \ $(top_srcdir)/bootstrapped/build-aux/ltmain.sh \ $(top_srcdir)/bootstrapped/build-aux/missing AUTHORS COPYING \ ChangeLog INSTALL NEWS README THANKS \ bootstrapped/build-aux/ar-lib bootstrapped/build-aux/compile \ bootstrapped/build-aux/config.guess \ bootstrapped/build-aux/config.rpath \ bootstrapped/build-aux/config.sub \ bootstrapped/build-aux/depcomp \ bootstrapped/build-aux/install-sh \ bootstrapped/build-aux/ltmain.sh \ bootstrapped/build-aux/mdate-sh bootstrapped/build-aux/missing \ bootstrapped/build-aux/texinfo.tex 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" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ BUILT_SOURCES = $(top_srcdir)/AUTHORS @COND_ARITHMETIC_TRUE@MAYBE_ARITHMETIC = bin/arithmetic @COND_BUILDPROG_TRUE@MAYBE_BUILDPROG = bin/buildprog @COND_CONVERTT_TRUE@MAYBE_CONVERTT = bin/convertt @COND_CONVOLVE_TRUE@MAYBE_CONVOLVE = bin/convolve @COND_COSMICCAL_TRUE@MAYBE_COSMICCAL = bin/cosmiccal @COND_CROP_TRUE@MAYBE_CROP = bin/crop @COND_FITS_TRUE@MAYBE_FITS = bin/fits @COND_MATCH_TRUE@MAYBE_MATCH = bin/match @COND_MKCATALOG_TRUE@MAYBE_MKCATALOG = bin/mkcatalog @COND_MKNOISE_TRUE@MAYBE_MKNOISE = bin/mknoise @COND_MKPROF_TRUE@MAYBE_MKPROF = bin/mkprof @COND_NOISECHISEL_TRUE@MAYBE_NOISECHISEL = bin/noisechisel @COND_STATISTICS_TRUE@MAYBE_STATISTICS = bin/statistics @COND_TABLE_TRUE@MAYBE_TABLE = bin/table #if COND_TEMPLATE # MAYBE_TEMPLATE = bin/TEMPLATE #endif @COND_WARP_TRUE@MAYBE_WARP = bin/warp @COND_GNULIBCHECK_TRUE@MAYBE_GNULIBCHECK = bootstrapped/tests SUBDIRS = bootstrapped/lib $(MAYBE_GNULIBCHECK) lib $(MAYBE_ARITHMETIC) \ $(MAYBE_BUILDPROG) $(MAYBE_CONVERTT) $(MAYBE_CONVOLVE) \ $(MAYBE_COSMICCAL) $(MAYBE_CROP) $(MAYBE_FITS) $(MAYBE_MATCH) \ $(MAYBE_MKCATALOG) $(MAYBE_MKNOISE) $(MAYBE_MKPROF) \ $(MAYBE_NOISECHISEL) $(MAYBE_STATISTICS) $(MAYBE_TABLE) \ $(MAYBE_TEMPLATE) $(MAYBE_WARP) doc tests ACLOCAL_AMFLAGS = -I bootstrapped/m4 dist_doc_DATA = README # Installed system configuration files # ==================================== dist_sysconf_DATA = bin/gnuastro.conf EXTRA_DIST = genauthors .dir-locals.el .version tmpfs-config-make \ bootstrapped/README .autom4te.cfg all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu 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: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(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: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-dist_docDATA: $(dist_doc_DATA) @$(NORMAL_INSTALL) @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || 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)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-dist_docDATA: @$(NORMAL_UNINSTALL) @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -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) | eval GZIP= gzip $(GZIP_ENV) -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) | eval GZIP= gzip $(GZIP_ENV) -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*) \ eval GZIP= gzip $(GZIP_ENV) -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*) \ eval GZIP= gzip $(GZIP_ENV) -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 $(MAKE) $(AM_MAKEFLAGS) check-local check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(DATA) config.h all-local installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(docdir)" "$(DESTDIR)$(sysconfdir)"; 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: 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-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-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_docDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-dist_sysconfDATA install-exec-local 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-dist_docDATA uninstall-dist_sysconfDATA .MAKE: $(am__recursive_targets) all check check-am install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ am--refresh check check-am check-local clean clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ distclean distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_docDATA \ install-dist_sysconfDATA install-dvi install-dvi-am \ install-exec install-exec-am install-exec-local install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dist_docDATA uninstall-dist_sysconfDATA .PRECIOUS: Makefile all-local: @if [ x$(MAKECMDGOALS) = x"all-am" ] && [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo "Gnuastro $(VERSION), was successfully built."; \ echo "Please check the build on your system by running:"; \ echo; \ echo " make check -j8"; \ echo; \ echo "(You can change the 8 to the number of CPU threads available.)"; \ echo "(The following \"Leaving directory\" notices can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi check-local: @if [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo "Your build of Gnuastro $(VERSION) didn't fail on any tests."; \ echo "To install Gnuastro, please run the command(s) below:"; \ echo; \ if [ ! -w $(prefix) ] ; then \ echo "(NOTE: As the user $$USER, you don't have writing permissions"; \ echo "in \"$(prefix)\". To install Gnuastro there, you must get "; \ echo "privileges first, as described below. If you can't, configure "; \ echo "Gnuastro again, for example: \"./configure --prefix ~/.local\".)"; \ echo; \ echo " sudo make install"; \ echo "or"; \ echo " su"; \ fi; \ echo " make install"; \ if [ ! -w $(prefix) ] ; then \ echo " exit"; \ fi; \ echo; \ echo "(The following \"Leaving directory\" notices can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi install-exec-local: @if [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo " , , "; \ echo " / \ "; \ echo " ((__-^^-,-^^-__)) Congratulations!"; \ echo " \`-_---' \`---_-' GNU Astronomy Utilities (Gnuastro),"; \ echo " \`--|o\` 'o|--' Version $(VERSION)"; \ echo " \ \` / "; \ echo " ): :( Successfully installed on this system."; \ echo " :o_o: "; \ echo " \"-\" "; \ echo; \ echo "More information Command to run "; \ echo "---------------- -------------- "; \ echo "Complete official Gnuastro book: ' info gnuastro '"; \ echo "Entertaining tutorials: ' info gnuastro Tutorials '"; \ echo "Dedicated help mailing list: ' info help-gnuastro '"; \ echo "Instructions for reporting bugs: ' info bug-gnuastro '"; \ echo "Effectively use Info: ' info info '"; \ echo; \ echo; \ echo "Environment variables to check: "; \ echo " - '$(prefix)/bin' in PATH."; \ echo " - '$(prefix)/lib' in LD_LIBRARY_PATH."; \ echo "(for an intro, run 'info gnuastro \"Installation directory\"')"; \ echo; \ echo; \ echo "To stay up to date with future releases, please subscribe to: "; \ echo " https://lists.gnu.org/mailman/listinfo/info-gnuastro"; \ echo; \ echo; \ echo "(The following lines can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi $(top_srcdir)/.version: $(top_srcdir)/configure echo $(VERSION) > $@-t && mv $@-t $@ $(top_srcdir)/AUTHORS: $(top_srcdir)/.version $(top_srcdir)/genauthors $(top_srcdir) dist-hook: $(top_srcdir)/AUTHORS echo $(VERSION) > $(distdir)/.tarball-version love: @echo "Don't know how to make love!" # 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: gnuastro-0.5/README0000644000175000017500000002301513211076737011031 00000000000000GNU Astronomy Utilities ======================= GNU Astronomy Utilities (Gnuastro) is an official GNU package of programs and a library functions for astronomical data manipulation and analysis. The programs are run directory on the operating system's command-line enabling easy and efficient operation combined with other installed programs in shell scripts or Makefiles. The libraries are also usable in C and C++ programs. The full package comes with a comprehensive book or documentation in various formats (plain text, info, PDF and HTML): http://www.gnu.org/software/gnuastro/manual/ The Gnuastro book explains all the mathematical, physical and even historical concepts (when necessary) for effective usage of all the programs and libraries along with short examples for each program and full descriptions of all their options (in the "Invoking ProgramName' sections). There is also a separate chapter devoted to tutorials for effectively use Gnuastro combined with other software already available on your Unix-like operating system (see Chapter 2). If you have already installed gnuastro, you can read the full book by running the following command. You can go through the whole book by pressing the 'SPACE' key, and leave the Info environment at any time by pressing 'q' key. See the "Getting help" section below (in this file) or in the book for more. info gnuastro The programs released in version 0.2 are listed below followed by their executable name in parenthesis and a short description. This list is ordered alphabetically. In the book, they are grouped and ordered by context under categories/chapters. - Arithmetic (astarithmetic): For arithmetic operations on multiple (theoretically unlimited) number of datasets (images). It has a large and growing set of arithmetic, mathematical, and even statistical operators (for example +, -, *, /, sqrt, log, min, average, median). - BuildProgram (astbuildprog): Compile, link and run programs that depend on the Gnuastro library. BuildProgram will automatically link with the libraries that Gnuastro depends on, so there is no need to explicily mention them every time you are compiling a Gnuastro library dependent program. - ConvertType (astconvertt): Convert astronomical data files (FITS or IMH) to and from several other standard image and data formats, for example TXT, JPEG, EPS or PDF. - Convolve (astconvolve): Convolve (blur or smooth) data with a given kernel in spatial and frequency domain on multiple threads. Convolve can also do de-convolution to find the appropriate kernel to PSF-match two images. - CosmicCalculator (astconvolve): Do cosmological calculations, for example the luminosity distance, distance modulus, comoving volume and many more. - Crop (astcrop): Crop region(s) from an image and stitch several images if necessary. Inputs can be in pixel coordinates or world coordinates. - Header (astheader): Print and manipulate the header data of a FITS file. - Match (astmatch): Given two input catalogs, find the rows that match with each other within a given aperture (may be an ellipse). - MakeCatalog (astmkcatalog): Make catalog of labeled image (output of NoiseChisel). The catalogs are highly customizable and adding new calculations/columns is very streightforward. - MakeNoise (astmknoise): Make (add) noise to an image, with a large set of random number generators and any seed. - MakeProfiles (astmkprof): Make mock 2D profiles in an image. The central regions of radial profiles are made with a configurable 2D Monte Carlo integration. It can also build the profiles on an over-sampled image. - NoiseChisel (astnoisechisel): Detect and segment signal in noise. It uses a technique to detect very faint and diffuse, irregularly shaped signal in noise (galaxies in the sky), using thresholds that are below the Sky value (see arXiv:1505.01664). - Statistics (aststatistics): Get pixel statistics and save histogram and cumulative frequency plots. - Table (asttable): convert FITS binary and ASCII tables into other such tables, or print them on the command-line, or save them in a plain text file. Output columns can also be determined by number or regular expression matching of column names. - Warp (astwarp): Warp image to new pixel grid. Any projective transformation or Homography can be applied to the input images. All the programs share the same basic command-line user interface and a set of common options for the comfort of both the users and developers. Gnuastro is written to comply fully with the GNU coding standards so it integrates finely with the GNU/Linux operating system and Unix-like operating systems in general. This also enables astronomers to expect a fully familiar experience in the source code, building, installing and command line user interaction that they have seen in all the other GNU software that they use. Behind the scenes, Gnuastro comes with a very robust infra-structure enabling easy addition of new programs and new features to existing programs and a full chapter devoted to explaining how to develop most effectively (see the "Developing" chapter). Please join us in developing this comprehensive and low level set of tools for astronomical data manipulation and analysis. The copyright owner of Gnuastro is the Free Software Foundation to guarantee its freedom in the future, and not any particular astronomer or astronomical project, or astronomical institution, so please join us and feel free to use it in your research. Installing Gnuastro ------------------- The mandatory dependencies which are required to install Gnuastro from the tarball are listed below. See the "Dependencies" section of the book for their detailed installation guides and optional dependencies to enable extra features. If you have just cloned Gnuastro and want to install from the version controlled source, please read the 'README-hacking' file (not available in the tarball) or the "Bootstrapping dependencies" subsection of the manual before continuing. - GNU Scientific Library (GSL): https://www.gnu.org/software/gsl/ - CFITSIO: http://heasarc.gsfc.nasa.gov/fitsio/ - WCSLIB: http://www.atnf.csiro.au/people/mcalabre/WCS/ The most recent stable Gnuastro release can be downloaded from the following link. Please see the "Downloading the source" section of the Gnuastro book for a more complete discussion of your download options. http://ftp.gnu.org/gnu/gnuastro/gnuastro-latest.tar.gz Unpacking, configuring, building, checking and installing Gnuastro follows the standard GNU Build system as shown below. After the './configure' command, Gnuastro will print messages upon the successful completion of each step, giving further information and suggestions for the next steps. tar xf gnuastro-latest.tar.gz # Also works for `tar.lz' files cd gnuastro-0.1 ./configure make make check sudo make install See the "Build and install" section of the book for more information. Also, see the 'INSTALL' file which is distributed with this file for a standard (very comprehensive and general) review of the GNU build and install methods. The 'INSTALL' file is shared in many software packages, so reading it once in any package is enough to help you greatly customize your build of a very large collection of Free and Open Source (FOSS) software. Getting help ------------ To access the appropriate section of the Gnuastro book/documentation from your command-line (in the middle of your work, without distracting your self by having to move your hand off the keyboard), please run any of the following two commands. Note that you can leave the Info environment by pressing the key `q'. info ProgramName # For example 'info NoiseChisel' info astprogname # For example 'info astnoisechisel' The Info environment is great for easily reading of the complete documentation of many software packages, not just Gnuastro. It can greatly enhance your life/work in the Unix-like operating systems. If you are not familiar with it, please run the following command and read through it (it is short and only takes about an hour, so we strongly recommend it): info info To immediately get a short list of each programs's options and a short explanation of each, please run: astprogname --help # For example 'astnoisechisel --help' Ultimately you can send a mail to 'help-gnuastro@gnu.org' to get help in installing or using Gnuastro. Some Gnuastro developers and active users are subscribed to this list and are ready to help you in using these programs. Reporting bugs -------------- The most effective way to report bugs is explained in the "Report a bug" section of the documentation, after installation, you can read it by running (leave the Info environment by pressing the `q' key afterwards): info bug-gnuastro In short, you can send a mail to 'bug-gnuastro@gnu.org', or submit a report in the link below (the latter is recommended): https://savannah.gnu.org/support/?func=additem&group=gnuastro In any case, please be very descriptive and give the exact command that produced the bug, we will be able to solve it faster and more effectively if we can reproduce it after your first report. The list of previous bugs along with their status can be seen here https://savannah.gnu.org/bugs/?group=gnuastro Have a look in the link above to see if your problem has already been addressed. Click on "Display Criteria" and choose the "Category" of your bug for a shorter and more relevant list to look into. gnuastro-0.5/aclocal.m40000644000175000017500000021236713217217701012015 00000000000000# generated automatically by aclocal 1.15.1 -*- Autoconf -*- # Copyright (C) 1996-2017 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'.])]) # po.m4 serial 24 (gettext-0.19) dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" < 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-2017 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-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2017 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-2017 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])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2017 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-2017 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-2017 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-2017 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-2017 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-2017 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-2017 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-2017 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-2017 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-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([bootstrapped/m4/00gnulib.m4]) m4_include([bootstrapped/m4/absolute-header.m4]) m4_include([bootstrapped/m4/alloca.m4]) m4_include([bootstrapped/m4/argp.m4]) m4_include([bootstrapped/m4/arpa_inet_h.m4]) m4_include([bootstrapped/m4/asm-underscore.m4]) m4_include([bootstrapped/m4/ax_check_compile_flag.m4]) m4_include([bootstrapped/m4/ax_compare_version.m4]) m4_include([bootstrapped/m4/ax_pthread.m4]) m4_include([bootstrapped/m4/btowc.m4]) m4_include([bootstrapped/m4/builtin-expect.m4]) m4_include([bootstrapped/m4/close.m4]) m4_include([bootstrapped/m4/codeset.m4]) m4_include([bootstrapped/m4/configmake.m4]) m4_include([bootstrapped/m4/ctype.m4]) m4_include([bootstrapped/m4/dirname.m4]) m4_include([bootstrapped/m4/double-slash-root.m4]) m4_include([bootstrapped/m4/dup2.m4]) m4_include([bootstrapped/m4/eealloc.m4]) m4_include([bootstrapped/m4/environ.m4]) m4_include([bootstrapped/m4/errno_h.m4]) m4_include([bootstrapped/m4/error.m4]) m4_include([bootstrapped/m4/exponentd.m4]) m4_include([bootstrapped/m4/exponentf.m4]) m4_include([bootstrapped/m4/exponentl.m4]) m4_include([bootstrapped/m4/extensions.m4]) m4_include([bootstrapped/m4/extern-inline.m4]) m4_include([bootstrapped/m4/fcntl-o.m4]) m4_include([bootstrapped/m4/fcntl.m4]) m4_include([bootstrapped/m4/fcntl_h.m4]) m4_include([bootstrapped/m4/fdopen.m4]) m4_include([bootstrapped/m4/flexmember.m4]) m4_include([bootstrapped/m4/float_h.m4]) m4_include([bootstrapped/m4/fpieee.m4]) m4_include([bootstrapped/m4/fstat.m4]) m4_include([bootstrapped/m4/ftruncate.m4]) m4_include([bootstrapped/m4/func.m4]) m4_include([bootstrapped/m4/getcwd.m4]) m4_include([bootstrapped/m4/getdelim.m4]) m4_include([bootstrapped/m4/getdtablesize.m4]) m4_include([bootstrapped/m4/getline.m4]) m4_include([bootstrapped/m4/getopt.m4]) m4_include([bootstrapped/m4/getpagesize.m4]) m4_include([bootstrapped/m4/getprogname.m4]) m4_include([bootstrapped/m4/gettimeofday.m4]) m4_include([bootstrapped/m4/glibc21.m4]) m4_include([bootstrapped/m4/gnulib-common.m4]) m4_include([bootstrapped/m4/gnulib-comp.m4]) m4_include([bootstrapped/m4/hard-locale.m4]) m4_include([bootstrapped/m4/host-cpu-c-abi.m4]) m4_include([bootstrapped/m4/include_next.m4]) m4_include([bootstrapped/m4/inet_pton.m4]) m4_include([bootstrapped/m4/intlmacosx.m4]) m4_include([bootstrapped/m4/intmax_t.m4]) m4_include([bootstrapped/m4/inttypes-pri.m4]) m4_include([bootstrapped/m4/inttypes.m4]) m4_include([bootstrapped/m4/inttypes_h.m4]) m4_include([bootstrapped/m4/ioctl.m4]) m4_include([bootstrapped/m4/isblank.m4]) m4_include([bootstrapped/m4/isnand.m4]) m4_include([bootstrapped/m4/isnanf.m4]) m4_include([bootstrapped/m4/isnanl.m4]) m4_include([bootstrapped/m4/iswblank.m4]) m4_include([bootstrapped/m4/langinfo_h.m4]) m4_include([bootstrapped/m4/largefile.m4]) m4_include([bootstrapped/m4/lcmessage.m4]) m4_include([bootstrapped/m4/ldexp.m4]) m4_include([bootstrapped/m4/lib-ld.m4]) m4_include([bootstrapped/m4/lib-link.m4]) m4_include([bootstrapped/m4/lib-prefix.m4]) m4_include([bootstrapped/m4/libtool.m4]) m4_include([bootstrapped/m4/libunistring-base.m4]) m4_include([bootstrapped/m4/limits-h.m4]) m4_include([bootstrapped/m4/localcharset.m4]) m4_include([bootstrapped/m4/locale-fr.m4]) m4_include([bootstrapped/m4/locale-ja.m4]) m4_include([bootstrapped/m4/locale-tr.m4]) m4_include([bootstrapped/m4/locale-zh.m4]) m4_include([bootstrapped/m4/locale_h.m4]) m4_include([bootstrapped/m4/localeconv.m4]) m4_include([bootstrapped/m4/localename.m4]) m4_include([bootstrapped/m4/localtime-buffer.m4]) m4_include([bootstrapped/m4/lock.m4]) m4_include([bootstrapped/m4/longlong.m4]) m4_include([bootstrapped/m4/lstat.m4]) m4_include([bootstrapped/m4/ltoptions.m4]) m4_include([bootstrapped/m4/ltsugar.m4]) m4_include([bootstrapped/m4/ltversion.m4]) m4_include([bootstrapped/m4/lt~obsolete.m4]) m4_include([bootstrapped/m4/malloc.m4]) m4_include([bootstrapped/m4/malloca.m4]) m4_include([bootstrapped/m4/math_h.m4]) m4_include([bootstrapped/m4/mbchar.m4]) m4_include([bootstrapped/m4/mbiter.m4]) m4_include([bootstrapped/m4/mbrtowc.m4]) m4_include([bootstrapped/m4/mbsinit.m4]) m4_include([bootstrapped/m4/mbstate_t.m4]) m4_include([bootstrapped/m4/mbtowc.m4]) m4_include([bootstrapped/m4/memchr.m4]) m4_include([bootstrapped/m4/mempcpy.m4]) m4_include([bootstrapped/m4/minmax.m4]) m4_include([bootstrapped/m4/mmap-anon.m4]) m4_include([bootstrapped/m4/mode_t.m4]) m4_include([bootstrapped/m4/msvc-inval.m4]) m4_include([bootstrapped/m4/msvc-nothrow.m4]) m4_include([bootstrapped/m4/multiarch.m4]) m4_include([bootstrapped/m4/nanosleep.m4]) m4_include([bootstrapped/m4/netinet_in_h.m4]) m4_include([bootstrapped/m4/nl_langinfo.m4]) m4_include([bootstrapped/m4/nocrash.m4]) m4_include([bootstrapped/m4/nproc.m4]) m4_include([bootstrapped/m4/off_t.m4]) m4_include([bootstrapped/m4/open-cloexec.m4]) m4_include([bootstrapped/m4/open.m4]) m4_include([bootstrapped/m4/pathmax.m4]) m4_include([bootstrapped/m4/perror.m4]) m4_include([bootstrapped/m4/pipe.m4]) m4_include([bootstrapped/m4/printf.m4]) m4_include([bootstrapped/m4/pthread_rwlock_rdlock.m4]) m4_include([bootstrapped/m4/pthread_sigmask.m4]) m4_include([bootstrapped/m4/putenv.m4]) m4_include([bootstrapped/m4/raise.m4]) m4_include([bootstrapped/m4/rawmemchr.m4]) m4_include([bootstrapped/m4/regex.m4]) m4_include([bootstrapped/m4/select.m4]) m4_include([bootstrapped/m4/setenv.m4]) m4_include([bootstrapped/m4/setlocale.m4]) m4_include([bootstrapped/m4/sigaction.m4]) m4_include([bootstrapped/m4/signal_h.m4]) m4_include([bootstrapped/m4/signalblocking.m4]) m4_include([bootstrapped/m4/signbit.m4]) m4_include([bootstrapped/m4/size_max.m4]) m4_include([bootstrapped/m4/sleep.m4]) m4_include([bootstrapped/m4/socketlib.m4]) m4_include([bootstrapped/m4/sockets.m4]) m4_include([bootstrapped/m4/socklen.m4]) m4_include([bootstrapped/m4/sockpfaf.m4]) m4_include([bootstrapped/m4/ssize_t.m4]) m4_include([bootstrapped/m4/stat-time.m4]) m4_include([bootstrapped/m4/stat.m4]) m4_include([bootstrapped/m4/stdalign.m4]) m4_include([bootstrapped/m4/stdbool.m4]) m4_include([bootstrapped/m4/stddef_h.m4]) m4_include([bootstrapped/m4/stdint.m4]) m4_include([bootstrapped/m4/stdint_h.m4]) m4_include([bootstrapped/m4/stdio_h.m4]) m4_include([bootstrapped/m4/stdlib_h.m4]) m4_include([bootstrapped/m4/strcase.m4]) m4_include([bootstrapped/m4/strchrnul.m4]) m4_include([bootstrapped/m4/strerror.m4]) m4_include([bootstrapped/m4/strerror_r.m4]) m4_include([bootstrapped/m4/string_h.m4]) m4_include([bootstrapped/m4/strings_h.m4]) m4_include([bootstrapped/m4/strndup.m4]) m4_include([bootstrapped/m4/strnlen.m4]) m4_include([bootstrapped/m4/strtod.m4]) m4_include([bootstrapped/m4/strtok_r.m4]) m4_include([bootstrapped/m4/symlink.m4]) m4_include([bootstrapped/m4/sys_ioctl_h.m4]) m4_include([bootstrapped/m4/sys_select_h.m4]) m4_include([bootstrapped/m4/sys_socket_h.m4]) m4_include([bootstrapped/m4/sys_stat_h.m4]) m4_include([bootstrapped/m4/sys_time_h.m4]) m4_include([bootstrapped/m4/sys_types_h.m4]) m4_include([bootstrapped/m4/sys_uio_h.m4]) m4_include([bootstrapped/m4/sysexits.m4]) m4_include([bootstrapped/m4/thread.m4]) m4_include([bootstrapped/m4/threadlib.m4]) m4_include([bootstrapped/m4/time_h.m4]) m4_include([bootstrapped/m4/unistd_h.m4]) m4_include([bootstrapped/m4/usleep.m4]) m4_include([bootstrapped/m4/vasnprintf.m4]) m4_include([bootstrapped/m4/vsnprintf.m4]) m4_include([bootstrapped/m4/warn-on-use.m4]) m4_include([bootstrapped/m4/wchar_h.m4]) m4_include([bootstrapped/m4/wchar_t.m4]) m4_include([bootstrapped/m4/wcrtomb.m4]) m4_include([bootstrapped/m4/wctob.m4]) m4_include([bootstrapped/m4/wctomb.m4]) m4_include([bootstrapped/m4/wctype_h.m4]) m4_include([bootstrapped/m4/wcwidth.m4]) m4_include([bootstrapped/m4/wint_t.m4]) m4_include([bootstrapped/m4/xsize.m4]) m4_include([bootstrapped/m4/yield.m4]) gnuastro-0.5/configure.ac0000644000175000017500000006762113215601241012436 00000000000000# Process this file with autoconf to produce a configure script. # # Hand written file: used as input into GNU Autotools (autoconf). # This is part of GNU Astronomy Utilities (gnuastro) package. # # We use some macros that are distributed as part of the GNU Autoconf # Archive here. Those macros are all placed in the bootstrapped/m4/ # directory along with those that were imported from Gnulib. The # ./bootstrap script includes that directory while its running Autoconf so # we don't need to explicitly call that directory here. # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2015 - 2016, Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Gnuastro is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gnuastro. If not, see . # Definitions: AC_PREREQ([2.69]) AC_INIT([GNU Astronomy Utilities], m4_esyscmd([bootstrapped/build-aux/git-version-gen \ .tarball-version --prefix "gnuastro_v"]), [bug-gnuastro@gnu.org], [gnuastro], [http://www.gnu.org/software/gnuastro/]) AC_CONFIG_AUX_DIR([bootstrapped/build-aux]) AM_INIT_AUTOMAKE([-Wall subdir-objects gnu]) AC_CONFIG_SRCDIR([lib/fits.c]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIRS([bootstrapped/m4]) # Library version, see the GNU Libtool manual ("Library interface versions" # section for the exact definition of each) for GAL_CURRENT=3 GAL_REVISION=0 GAL_AGE=0 GAL_LT_VERSION="${GAL_CURRENT}:${GAL_REVISION}:${GAL_AGE}" AC_SUBST(GAL_LT_VERSION) # Checks for programs. : ${CFLAGS=""} : ${CXXFLAGS=""} AC_PROG_CC AC_PROG_CXX gl_EARLY AM_PROG_AR LT_INIT # This macro will let the libraries know that we are now in the Gnuastro # build system, not on the user's system. While we are building Gnuastro, # we have the important installation information in `config.h'. But in the # user's own programs, this information is defined in # `gnuastro/config.h'. With this macro, the installed headers can decide # if the latter should be included or not. Note that `gnuastro/config.h' # is only built at installation time and doesn't exist when building # Gnuastro. Therefore, this macro must not be defined in a user's program. AC_DEFINE([IN_GNUASTRO_BUILD], [1], [In building, not usage]) # Generic compiler flags for all sub-directories. CFLAGS="-Wall -O3 $CFLAGS" CXXFLAGS="-Wall -O3 $CXXFLAGS" LDFLAGS="-L\$(top_builddir)/lib $LDFLAGS" CPPFLAGS="-I\$(top_srcdir)/lib $CPPFLAGS" # Check for pthreads and add the appropriate compilation flags. AX_PTHREAD # comes from the GNU Autoconf Archive's ax_pthread.m4, see there for the # documentation. Note that AX_PTHREAD([],[AC_MSG_ERROR([AC_PACKAGE_NAME Needs POSIX Threads (pthread)])]) CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CC="$PTHREAD_CC" # See if the C++ compiler understands `-Qunused-arguments'. AX_PTHREAD adds # puts this option in `PTHREAD_CFLAGS' when the C compiler knows this # option. We then pass it to CFLAGS and CXXFLAGS above. But as reported in # bug #52490, it can happen that sometimes, the C++ compiler doesn't # recognize it. So we need to do a separate check for C++. cxxflags_tmp= for flg in $CXXFLAGS; do AS_IF([test "$flg" = \-Qunused-arguments], [ AC_LANG(C++) AX_CHECK_COMPILE_FLAG([-Qunused-arguments], [cxx_Qunused_arguments=yes; cxxflags_tmp="$cxxflags_tmp $flg"], [cxx_Qunused_arguments=no]) AC_LANG(C) ], [ cxxflags_tmp="$cxxflags_tmp $flg"]) done CXXFLAGS="$cxxflags_tmp" # Check if `malloc(0)' returns valid pointer AC_FUNC_MALLOC # Check the size of necessary system specific types. AC_CHECK_SIZEOF([size_t]) AC_SUBST(SIZEOF_SIZE_T, [$ac_cv_sizeof_size_t]) AC_DEFINE_UNQUOTED([GAL_CONFIG_SIZEOF_SIZE_T], [$ac_cv_sizeof_size_t], [On 32bit will be 4, on 64 bit, will be 8]) AC_CHECK_SIZEOF([long]) AC_SUBST(SIZEOF_LONG, [$ac_cv_sizeof_long]) AC_DEFINE_UNQUOTED([GAL_CONFIG_SIZEOF_LONG], [$ac_cv_sizeof_long], [On 32bit will be 4, on 64 bit, will be 8]) # By default we assume no warnings anywarnings=no # Remove any occurance of the current directory `./', `.', or the full # address of the current directory in PATH. The main problem is the # `libtool' executable which Gnuastro builds internally in the top build # directory. However, we also need to know if the system has libtool or # not. AC_MSG_CHECKING(if PATH contains current directory) oldPATH=$PATH currpwd=$(pwd) # The first call to SED will remove any occurance of the current directory: # `./', `.', or the full address. # # NOTE 1: We cannot simply remove all `.'s, because hidden directories # (like the `~/.local' that is suggested for local # installations) will also be altered. # # NOTE 2: An empty string in the list of strings (separated by `:') # means the current directory. This includes cases like: `::', # or a leading and trailing `:'. So after all the removals of # the current directory, we will remove all such cases. # # NOTE 3: The SED separator can be any character immediately after `s', # it doesn't just have to be the commonly used `/'. Since `$pwd' # will possibly contain many `/'s, it is much more easier to use # a differen separator (`|' in this call to SED). PATH=$(AS_ECHO([$PATH]) | $SED -e 's|'"$currpwd"'||g' \ -e 's|\.\.*//*||g' \ -e 's|:\.\.*:|:|g' \ -e 's|\.*$||' \ -e 's|^\.*||' \ -e 's|::*|:|g' \ -e 's|^:||' \ -e 's|:$||' ) AS_IF([test $oldPATH = $PATH], [ path_warning=no ], [ path_warning=yes; anywarnings=yes ]) AC_MSG_RESULT( $path_warning ) # Search for necessary libraries. After each library is found, # AC_SEARCH_LIBS adds the -lLIBRARY flag to the LIBS variable which is then # given to all the Makefiles. Each new flag is added to the left of the old # one so order matters here. Note that the LIBS variable is also used in # checking the next libraries, so the linking with their dependent # libraries is done automatically with this order, and we don't have to # explicitly set the dependency flags. AC_SEARCH_LIBS(sqrt, m, [], [AC_MSG_ERROR([C math library not present, cannot continue.])]) AC_SEARCH_LIBS([cblas_sdsdot], [gslcblas], [], [AC_MSG_ERROR([GSL CBLAS not present, cannot continue.])]) AC_SEARCH_LIBS([gsl_integration_qng], [gsl], [], [AC_MSG_ERROR([GSL not found, cannot continue.])]) # Since version 0.42, if `libcurl' is installed, CFITSIO will link with it # and thus it will be necessary to explicitly link with libcurl also. If it # doesn't exist on the system, then CFITSIO won't link with it and there is # no problem for Gnuastro either. So there is no need to stop the configure # script if libcurl isn't found. AC_SEARCH_LIBS([curl_global_init], [curl], [], []) AC_SEARCH_LIBS([ffopen], [cfitsio], [], [AC_MSG_ERROR([CFITSIO not found, cannot continue.])]) AC_SEARCH_LIBS([wcspih], [wcs], [], [AC_MSG_ERROR([WCSLIB not found, cannot continue.])]) # These are secondary tests for more fine-grained control in libraries that # have already been checked. We don't need to add them to the LIBS # variable, so we are using AC_CHECK_LIB for these tests. # If the WCS library has the `wcslib_version' function. AC_CHECK_LIB([wcs], [wcslib_version], [has_wcslib_version=1], [has_wcslib_version=0], [-lcfitsio -lm]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_WCSLIB_VERSION], [$has_wcslib_version], [WCSLIB comes with wcslib_version]) AC_SUBST(HAVE_WCSLIB_VERSION, [$has_wcslib_version]) # If the pthreads library has `pthread_barrier_wait'. AC_CHECK_LIB([pthread], [pthread_barrier_wait], [has_pthread_barrier=1], [has_pthread_barrier=0]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_PTHREAD_BARRIER], [$has_pthread_barrier], [System has pthread_barrier]) AC_SUBST(HAVE_PTHREAD_BARRIER, [$has_pthread_barrier]) # Gnulib checks: gl_INIT # Gnulib checks for the proper name for the C99 equivalent `restrict' # keyword and puts it in the `ac_cv_c_restrict' variable. If none exists, # it will put a `no' inside of this variable. As described in the output # `bootstrapped/m4/gnulib-common.m4', this is only necessary until Autoconf # 2.70 is released. Afterwards, we can use AC_C_RESTRICT. AS_IF([test "x$ac_cv_c_restrict" = "xno"], [gal_restrict_replace=], [gal_restrict_replace=$ac_cv_c_restrict]) AC_SUBST(RESTRICT_REPLACEMENT, [$gal_restrict_replace]) # To add the help2man: AC_CHECK_PROG(has_help2man, help2man, [yes], [no]) AM_CONDITIONAL([COND_HASHELP2MAN], [test "x$has_help2man" = "xyes"]) # Check libjpeg: AC_SEARCH_LIBS([jpeg_stdio_dest], [jpeg], [has_libjpeg=yes], [has_libjpeg=no]) AS_IF([test "x$has_libjpeg" = "xyes"], [AC_DEFINE([HAVE_LIBJPEG], [], [Has libjpeg])], [anywarnings=yes]) AM_CONDITIONAL([COND_HASLIBJPEG], [test "x$has_libjpeg" = "xyes"]) # Check libgit2: AC_SEARCH_LIBS([git_libgit2_init], [git2], [has_libgit2=1], [has_libgit2=0]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_LIBGIT2], [$has_libgit2], [libgit2 is installed on the system]) AS_IF([test "x$has_libgit2" = "x1"], [], [anywarnings=yes]) AC_SUBST(HAVE_LIBGIT2, [$has_libgit2]) # Check the libtool executable on the system. Note that Gnuastro also ships # with a version of Libtool. We don't want Gnuastro's Libtool, here we want # to see if the system has libtool independent of Gnuastro so BuildProgram # can use it later. AC_CHECK_PROG(has_libtool, libtool, [yes], [no]) # If Libtool is present, make sure it is GNU Libtool AS_IF([test "x$has_libtool" = "xyes"], [ AC_MSG_CHECKING(if libtool executable is GNU) AS_IF( libtool --version 2> /dev/null | grep GNU 2>&1 > /dev/null, [has_gnulibtool=yes], [has_gnulibtool=no]) AC_MSG_RESULT( $has_gnulibtool )], [ has_gnulibtool=no ]) # When either the `libtool' executable isn't GNU or it doesn't exist, then # look for `glibtool'. AS_IF([test "x$has_gnulibtool" = "xyes"], [ gnulibtool_exec=libtool ], [ AC_CHECK_PROG(has_glibtool, glibtool, [yes], [no]) AS_IF( [test "x$has_glibtool" = "xyes"], [has_gnulibtool=yes; gnulibtool_exec=glibtool], [has_gnulibtool=no; anywarnings=yes] ) ]) # Write the test results in the Makefiles and `config.h'. AM_CONDITIONAL([COND_HASGNULIBTOOL], [test "x$has_gnulibtool" = "xyes"]) AC_DEFINE_UNQUOTED([GAL_CONFIG_GNULIBTOOL_EXEC], ["$gnulibtool_exec"], [The executable to call GNU Libtool]) # Check Ghostscript: "-dPDFFitPage" option to Ghostscript, used by # ConvertType to convert from EPS to PDF, has been introduced in # Ghostscript 9.10. Make sure we have at least that version. # # Below, only when Ghostscript exists, we check its version and only if its # version is larger than 9.10, does Gnuastro finally assume the existence # of Ghostscript. AX_COMPARE_VERSION comes from the GNU Autoconf Archive's # ax_compare_version.m4. AC_CHECK_PROG(has_ghostscript, gs, [yes], [no]) AS_IF([test "x$has_ghostscript" = "xyes"], [AC_MSG_CHECKING(Ghostscript version) gsversion=$(gs --version) AX_COMPARE_VERSION([9.10], [gt], [$gsversion], [has_ghostscript=no]) AC_MSG_RESULT( $gsversion )]) # Note: `has_ghostscript' can be set to `no' within the AS_IF above, so # `anywarnings' cannot be an [RUN-IF-FALSE] argument to the AS_IF above. AS_IF([test "x$has_ghostscript" = "xno"], [anywarnings=yes]) AM_CONDITIONAL([COND_HASGHOSTSCRIPT], [test "x$has_ghostscript" = "xyes"]) # Check if Gnulib tests should be done: AC_ARG_ENABLE([gnulibcheck], [AS_HELP_STRING([--enable-gnulibcheck], [In `make check', also test GNU Gnulib.])], [enable_gnulibcheck=yes], [enable_gnulibcheck=no]) AM_CONDITIONAL([COND_GNULIBCHECK], [test $enable_gnulibcheck = yes]) # Set the one general parameters: AC_DEFINE_UNQUOTED([CONF_POSTFIX], [".conf"], [Configuration file post fix.]) AC_DEFINE_UNQUOTED([USERCONFIG_DIR], [".local/etc"], [User data dir.]) AC_DEFINE_UNQUOTED([CONF_SHOWFMT], [" %-20s"], [Configuration file name format.]) # Read arguments about which programs to install. After checking if # the argument was actually called, remove any value the user might # have given by setting them to "yes" if they are not "no". These # options don't accept arguments. ayes=false AC_ARG_ENABLE([arithmetic], [AS_HELP_STRING([--enable-arithmetic], [Install Arithmetic and other enabled programs.])], [AS_IF([test "x$enable_arithmetic" != xno], [enable_arithmetic=yes; ayes=true])], [enable_arithmetic=notset]) AC_ARG_ENABLE([buildprog], [AS_HELP_STRING([--enable-buildprog], [Install BuildProgram and other enabled programs.])], [AS_IF([test "x$enable_buildprog" != xno], [enable_buildprog=yes; ayes=true])], [enable_buildprog=notset]) AC_ARG_ENABLE([convertt], [AS_HELP_STRING([--enable-convertt], [Install ConvertType and other enabled programs.])], [AS_IF([test "x$enable_convertt" != xno], [enable_convertt=yes; ayes=true])], [enable_convertt=notset]) AC_ARG_ENABLE([convolve], [AS_HELP_STRING([--enable-convolve], [Install Convolve and other enabled programs.])], [AS_IF([test "x$enable_convolve" != xno], [enable_cognvolve=yes; ayes=true])], [enable_convolve=notset]) AC_ARG_ENABLE([cosmiccal], [AS_HELP_STRING([--enable-cosmiccal], [Install CosmicCalculator and other enabled programs.])], [AS_IF([test "x$enable_cosmiccal" != xno], [enable_cosmiccal=yes; ayes=true])], [enable_cosmiccal=notset]) AC_ARG_ENABLE([crop], [AS_HELP_STRING([--enable-crop], [Install Crop and other enabled programs.])], [AS_IF([test "x$enable_crop" != xno], [enable_crop=yes; ayes=true])], [enable_crop=notset]) AC_ARG_ENABLE([fits], [AS_HELP_STRING([--enable-fits], [Install Fits and other enabled programs.])], [AS_IF([test "x$enable_fits" != xno], [enable_fits=yes; ayes=true])], [enable_fits=notset]) AC_ARG_ENABLE([match], [AS_HELP_STRING([--enable-match], [Install Match and other enabled programs.])], [AS_IF([test "x$enable_match" != xno], [enable_match=yes; ayes=true])], [enable_match=notset]) AC_ARG_ENABLE([mkcatalog], [AS_HELP_STRING([--enable-mkcatalog], [Install MakeCatalog and other enabled programs.])], [AS_IF([test "x$enable_mkcatalog" != xno], [enable_mkcatalog=yes; ayes=true])], [enable_mkcatalog=notset]) AC_ARG_ENABLE([mknoise], [AS_HELP_STRING([--enable-mknoise], [Install MakeNoise and other enabled programs.])], [AS_IF([test "x$enable_mknoise" != xno], [enable_mknoise=yes; ayes=true])], [enable_mknoise=notset]) AC_ARG_ENABLE([mkprof], [AS_HELP_STRING([--enable-mkprof], [Install MakeProfile and other enabled programs.])], [AS_IF([test "x$enable_mkprof" != xno], [enable_mkprof=yes; ayes=true])], [enable_mkprof=notset]) AC_ARG_ENABLE([noisechisel], [AS_HELP_STRING([--enable-noisechisel], [Install NoiseChisel and other enabled programs.])], [AS_IF([test "x$enable_noisechisel" != xno], [enable_noisechisel=yes; ayes=true])], [enable_noisechisel=notset]) AC_ARG_ENABLE([statistics], [AS_HELP_STRING([--enable-statistics], [Install Statistics and other enabled programs.])], [AS_IF([test "x$enable_statistics" != xno], [enable_statistics=yes; ayes=true])], [enable_statistics=notset]) AC_ARG_ENABLE([table], [AS_HELP_STRING([--enable-table], [Install Table and other enabled programs.])], [AS_IF([test "x$enable_table" != xno], [enable_table=yes; ayes=true])], [enable_table=notset]) #AC_ARG_ENABLE([TEMPLATE], # [AS_HELP_STRING([--enable-TEMPLATE], # [Install TEMPLATE and other enabled packages.])], # [AS_IF([test "x$enable_TEMPLATE" != xno], # [enable_TEMPLATE=yes; ayes=true])], # [enable_TEMPLATE=notset]) AC_ARG_ENABLE([warp], [AS_HELP_STRING([--enable-warp], [Install Warp and other enabled programs.])], [AS_IF([test "x$enable_warp" != xno], [enable_warp=yes; ayes=true])], [enable_warp=notset]) # If we had a "ayes" variable to be "true" if there was a `yes'. So any # program that is not explicitly requested must be ignored and vice versa # (if no programs were explicitly requested, then enable all that weren't # disabled). AS_IF([test $ayes = true ], [ AS_IF([test $enable_arithmetic = notset], [enable_arithmetic=no]) AS_IF([test $enable_buildprog = notset], [enable_buildprog=no]) AS_IF([test $enable_convertt = notset], [enable_convertt=no]) AS_IF([test $enable_convolve = notset], [enable_convolve=no]) AS_IF([test $enable_cosmiccal = notset], [enable_cosmiccal=no]) AS_IF([test $enable_crop = notset], [enable_crop=no]) AS_IF([test $enable_fits = notset], [enable_fits=no]) AS_IF([test $enable_match = notset], [enable_match=no]) AS_IF([test $enable_mkcatalog = notset], [enable_mkcatalog=no]) AS_IF([test $enable_mknoise = notset], [enable_mknoise=no]) AS_IF([test $enable_mkprof = notset], [enable_mkprof=no]) AS_IF([test $enable_noisechisel = notset], [enable_noisechisel=no]) AS_IF([test $enable_statistics = notset], [enable_statistics=no]) AS_IF([test $enable_table = notset], [enable_table=no]) # AS_IF([test $enable_TEMPLATE = notset], [enable_TEMPLATE=no]) AS_IF([test $enable_warp = notset], [enable_warp=no]) ], [ AS_IF([test $enable_arithmetic = notset], [enable_arithmetic=yes]) AS_IF([test $enable_buildprog = notset], [enable_buildprog=yes]) AS_IF([test $enable_convertt = notset], [enable_convertt=yes]) AS_IF([test $enable_convolve = notset], [enable_convolve=yes]) AS_IF([test $enable_cosmiccal = notset], [enable_cosmiccal=yes]) AS_IF([test $enable_crop = notset], [enable_crop=yes]) AS_IF([test $enable_fits = notset], [enable_fits=yes]) AS_IF([test $enable_match = notset], [enable_match=yes]) AS_IF([test $enable_mkcatalog = notset], [enable_mkcatalog=yes]) AS_IF([test $enable_mknoise = notset], [enable_mknoise=yes]) AS_IF([test $enable_mkprof = notset], [enable_mkprof=yes]) AS_IF([test $enable_noisechisel = notset], [enable_noisechisel=yes]) AS_IF([test $enable_statistics = notset], [enable_statistics=yes]) AS_IF([test $enable_table = notset], [enable_table=yes]) # AS_IF([test $enable_TEMPLATE = notset], [enable_TEMPLATE=yes]) AS_IF([test $enable_warp = notset], [enable_warp=yes]) ] ) # BuildProgram depends on the presence of GNU Libtool, if it isn't present, # then don't build it. AS_IF([test "x$has_gnulibtool" = "xno"], [enable_buildprog=no]) # Make the enable_package values available for the Makefile: AM_CONDITIONAL([COND_ARITHMETIC], [test $enable_arithmetic = yes]) AM_CONDITIONAL([COND_BUILDPROG], [test $enable_buildprog = yes]) AM_CONDITIONAL([COND_CONVERTT], [test $enable_convertt = yes]) AM_CONDITIONAL([COND_CONVOLVE], [test $enable_convolve = yes]) AM_CONDITIONAL([COND_COSMICCAL], [test $enable_cosmiccal = yes]) AM_CONDITIONAL([COND_CROP], [test $enable_crop = yes]) AM_CONDITIONAL([COND_FITS], [test $enable_fits = yes]) AM_CONDITIONAL([COND_MATCH], [test $enable_match = yes]) AM_CONDITIONAL([COND_MKCATALOG], [test $enable_mkcatalog = yes]) AM_CONDITIONAL([COND_MKNOISE], [test $enable_mknoise = yes]) AM_CONDITIONAL([COND_MKPROF], [test $enable_mkprof = yes]) AM_CONDITIONAL([COND_NOISECHISEL], [test $enable_noisechisel = yes]) AM_CONDITIONAL([COND_STATISTICS], [test $enable_statistics = yes]) AM_CONDITIONAL([COND_TABLE], [test $enable_table = yes]) #AM_CONDITIONAL([COND_TEMPLATE], [test $enable_TEMPLATE = yes]) AM_CONDITIONAL([COND_WARP], [test $enable_warp = yes]) # Tell autoconf what to work on: TEMPLATE cannot be put and then # commented here like the cases above, so don't forget to add your new # utility name here. AC_CONFIG_FILES([Makefile doc/Makefile lib/Makefile tests/Makefile bin/crop/Makefile bin/fits/Makefile bin/warp/Makefile bin/table/Makefile bin/match/Makefile bin/mkprof/Makefile bin/mknoise/Makefile bin/convertt/Makefile bin/convolve/Makefile bin/buildprog/Makefile bin/cosmiccal/Makefile bin/mkcatalog/Makefile bin/arithmetic/Makefile bin/statistics/Makefile bin/noisechisel/Makefile bootstrapped/lib/Makefile bootstrapped/tests/Makefile ]) # Printing guiding messages. Autoconf will make the variable # enable_guide_message from the first argument to AC_ARG_ENABLE. It will # also give it a value. From the Autoconf manual, we see that # `--disable-guide-message' is equivalent to a value of `no', while with no # argument, the value will default to `yes'. In the last argument to # AC_ARG_ENABLE, we also specify the default behavior (when it isn't given # at all), here we want the default to be `yes'. AC_ARG_ENABLE([guide-message], [AS_HELP_STRING([--disable-guide-message], [No messages after each build step.])], [], [enable_guide_message=yes]) AC_SUBST(GUIDEMESSAGE, [$enable_guide_message]) # Build the man page directory. Note that this is the cleanest and most # portable way of building this directory. We don't want to do it in any of # the Makefiles. AC_CONFIG_COMMANDS([man page directory], [$MKDIR_P doc/man]) # Make the Makefiles: AC_OUTPUT # Print a message if necessary AS_IF([test x$enable_guide_message = xyes], [ AS_ECHO([]) AS_ECHO([=======================================================================]) AS_ECHO([=======================================================================]) AS_ECHO(["$PACKAGE_NAME (Gnuastro) $PACKAGE_VERSION is successfully"]) AS_ECHO(["configured for this machine."]) AS_ECHO([]) AS_IF([test "x$anywarnings" = xyes], [ AS_ECHO(["Configuration warning(s):"]) AS_ECHO([]) AS_IF([test "x$has_libjpeg" = "xno"], [AS_ECHO([" - libjpeg, could not be linked with in your library search path."]) AS_ECHO([" If JPEG outputs are desired from ConvertType, it will warn"]) AS_ECHO([" you and abort with an error."]) AS_ECHO([]) ]) AS_IF([test "x$has_libgit2" = "x0"], [AS_ECHO([" - libgit2, could not be linked with in your library search path."]) AS_ECHO([" When present, Git's describe output will be stored in the"]) AS_ECHO([" output files if Gnuastro's programs were called within a Git"]) AS_ECHO([" version controlled directory to help in reproducibility."]) AS_ECHO([]) ]) AS_IF([test "x$has_gnulibtool" = "xno"], [AS_ECHO([" - GNU Libtool, could not be found in your search path."]) AS_ECHO([" Gnuastro's BuildProgram uses GNU libtool to link your source code"]) AS_ECHO([" with the various libraries (Gnuastro's dependencies). Therefore"]) AS_ECHO([" BuildProgram will not be built or installed. Please note that"]) AS_ECHO([" not having GNU libtool in your search path will not harm the rest"]) AS_ECHO([" of Gnuastro's building and installation. Gnuastro has its own"]) AS_ECHO([" internal implementation of GNU Libtool to build its self. This"]) AS_ECHO([" warning is only to let you know that BuildProgram will not be"]) AS_ECHO([" part of this build. The executable names searched were \`libtool'"]) AS_ECHO([" and \`glibtool'."]) AS_ECHO([]) AS_IF([test "x$has_libtool" = "xyes"], [AS_ECHO([" -- A libtool implementation was found, but it isn't GNU."]) AS_ECHO([]) ]) ]) AS_IF([test "x$has_ghostscript" = "xno"], [AS_ECHO([" - GPL GhostScript version 9.10 or later, with the executable"]) AS_ECHO([" name \`gs', was not found in your PATH environment variable."]) AS_ECHO([" If PDF outputs are desired from ConvertType, it will abort"]) AS_ECHO([" with an EPS output which you can convert to PDF by other means."]) AS_ECHO([]) ]) # The last two scenarios described below are taken from # https://unix.stackexchange.com/questions/65700/is-it-safe-to-add-to-my-path-how-come AS_IF([test "x$path_warning" = "xyes"], [AS_ECHO([" - Your PATH contains the current directory. This does not affect"]) AS_ECHO([" this build and installation of Gnuastro in any way, it is just to"]) AS_ECHO([" to remind you that this is a security risk."]) AS_ECHO([" It is a very serious security risk if it is closer to the start"]) AS_ECHO([" of your PATH: a malicious/wrong program might be run instead of"]) AS_ECHO([" a desired program, someone might find out you frequently mistype"]) AS_ECHO([" a command and install a matching one, someone might install a"]) AS_ECHO([" fake command with the name of one that is not installed. You can"]) AS_ECHO([" always run a program in the current directory by explicity adding"]) AS_ECHO([" a \`./' before it's name. Run the following command after"]) AS_ECHO([" installing Gnuastro to learn more about PATH:"]) AS_ECHO([" $ info gnuastro \"Installation directory\""]) AS_ECHO([]) ]) AS_ECHO([" All checks related to the warning(s) above will be skipped."]) AS_ECHO([]) ] ) AS_ECHO(["To build Gnuastro $PACKAGE_VERSION, please run:"]) AS_ECHO([]) AS_ECHO([" make -j8"]) AS_ECHO([]) AS_ECHO(["(You can change the 8 to the number of CPU threads available.)"]) AS_ECHO(["(Configure with '--disable-guide-message' for no messages.)"]) AS_ECHO(["(Please be patient, some libraries can take a few minutes to compile.)"]) AS_ECHO([=======================================================================]) AS_ECHO([=======================================================================]) AS_ECHO([]) ]) gnuastro-0.5/configure0000755000175000017500000561263613217217703012076 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for GNU Astronomy Utilities 0.5. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: bug-gnuastro@gnu.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Astronomy Utilities' PACKAGE_TARNAME='gnuastro' PACKAGE_VERSION='0.5' PACKAGE_STRING='GNU Astronomy Utilities 0.5' PACKAGE_BUGREPORT='bug-gnuastro@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gnuastro/' ac_unique_file="lib/fits.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" gl_use_threads_default= ac_func_list= ac_header_list= gl_getopt_required=POSIX ac_subst_vars='gltests_LTLIBOBJS gltests_LIBOBJS gl_LTLIBOBJS gl_LIBOBJS am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS GUIDEMESSAGE COND_WARP_FALSE COND_WARP_TRUE COND_TABLE_FALSE COND_TABLE_TRUE COND_STATISTICS_FALSE COND_STATISTICS_TRUE COND_NOISECHISEL_FALSE COND_NOISECHISEL_TRUE COND_MKPROF_FALSE COND_MKPROF_TRUE COND_MKNOISE_FALSE COND_MKNOISE_TRUE COND_MKCATALOG_FALSE COND_MKCATALOG_TRUE COND_MATCH_FALSE COND_MATCH_TRUE COND_FITS_FALSE COND_FITS_TRUE COND_CROP_FALSE COND_CROP_TRUE COND_COSMICCAL_FALSE COND_COSMICCAL_TRUE COND_CONVOLVE_FALSE COND_CONVOLVE_TRUE COND_CONVERTT_FALSE COND_CONVERTT_TRUE COND_BUILDPROG_FALSE COND_BUILDPROG_TRUE COND_ARITHMETIC_FALSE COND_ARITHMETIC_TRUE COND_GNULIBCHECK_FALSE COND_GNULIBCHECK_TRUE COND_HASGHOSTSCRIPT_FALSE COND_HASGHOSTSCRIPT_TRUE has_ghostscript COND_HASGNULIBTOOL_FALSE COND_HASGNULIBTOOL_TRUE has_glibtool has_libtool HAVE_LIBGIT2 COND_HASLIBJPEG_FALSE COND_HASLIBJPEG_TRUE COND_HASHELP2MAN_FALSE COND_HASHELP2MAN_TRUE has_help2man RESTRICT_REPLACEMENT LIBTESTS_LIBDEPS YIELD_LIB UNISTD_H_DEFINES_STRUCT_TIMESPEC PTHREAD_H_DEFINES_STRUCT_TIMESPEC SYS_TIME_H_DEFINES_STRUCT_TIMESPEC TIME_H_DEFINES_STRUCT_TIMESPEC NEXT_AS_FIRST_DIRECTIVE_TIME_H NEXT_TIME_H HAVE_SYS_UIO_H NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H NEXT_SYS_UIO_H NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H NEXT_SYS_IOCTL_H HAVE_SYS_IOCTL_H NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H NEXT_SIGNAL_H LIB_PTHREAD_SIGMASK REPLACE_RAISE REPLACE_PTHREAD_SIGMASK HAVE_SIGHANDLER_T HAVE_TYPE_VOLATILE_SIG_ATOMIC_T HAVE_STRUCT_SIGACTION_SA_SIGACTION HAVE_SIGACTION HAVE_SIGINFO_T HAVE_SIGSET_T HAVE_RAISE HAVE_PTHREAD_SIGMASK HAVE_POSIX_SIGNALBLOCKING GNULIB_SIGACTION GNULIB_SIGPROCMASK GNULIB_SIGNAL_H_SIGPIPE GNULIB_RAISE GNULIB_PTHREAD_SIGMASK GL_GENERATE_NETINET_IN_H_FALSE GL_GENERATE_NETINET_IN_H_TRUE NETINET_IN_H HAVE_NETINET_IN_H NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H NEXT_NETINET_IN_H LIB_NANOSLEEP LIB_SELECT LIBSOCKET HAVE_SYS_SELECT_H NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H NEXT_SYS_SELECT_H REPLACE_SELECT REPLACE_PSELECT HAVE_PSELECT GNULIB_SELECT GNULIB_PSELECT INTL_MACOSX_LIBS HAVE_SAME_LONG_DOUBLE_AS_DOUBLE INET_PTON_LIB REPLACE_LOCALTIME REPLACE_GMTIME REPLACE_TZSET REPLACE_TIMEGM REPLACE_STRFTIME REPLACE_NANOSLEEP REPLACE_MKTIME REPLACE_LOCALTIME_R REPLACE_CTIME HAVE_TIMEZONE_T HAVE_TZSET HAVE_TIMEGM HAVE_STRPTIME HAVE_NANOSLEEP HAVE_DECL_LOCALTIME_R GNULIB_TZSET GNULIB_TIME_RZ GNULIB_TIME_R GNULIB_TIMEGM GNULIB_STRPTIME GNULIB_STRFTIME GNULIB_NANOSLEEP GNULIB_LOCALTIME GNULIB_MKTIME GNULIB_CTIME NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H NEXT_SYS_TIME_H REPLACE_STRUCT_TIMEVAL REPLACE_GETTIMEOFDAY HAVE_SYS_TIME_H HAVE_STRUCT_TIMEVAL HAVE_GETTIMEOFDAY GNULIB_GETTIMEOFDAY WINDOWS_64_BIT_ST_SIZE WINDOWS_STAT_TIMESPEC NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H NEXT_SYS_STAT_H REPLACE_UTIMENSAT REPLACE_STAT REPLACE_MKNOD REPLACE_MKFIFO REPLACE_MKDIR REPLACE_LSTAT REPLACE_FUTIMENS REPLACE_FSTATAT REPLACE_FSTAT HAVE_UTIMENSAT HAVE_MKNODAT HAVE_MKNOD HAVE_MKFIFOAT HAVE_MKFIFO HAVE_MKDIRAT HAVE_LSTAT HAVE_LCHMOD HAVE_FUTIMENS HAVE_FSTATAT HAVE_FCHMODAT GNULIB_OVERRIDES_STRUCT_STAT GNULIB_UTIMENSAT GNULIB_STAT GNULIB_MKNODAT GNULIB_MKNOD GNULIB_MKFIFOAT GNULIB_MKFIFO GNULIB_MKDIRAT GNULIB_LSTAT GNULIB_LCHMOD GNULIB_FUTIMENS GNULIB_FSTATAT GNULIB_FSTAT GNULIB_FCHMODAT NEXT_AS_FIRST_DIRECTIVE_FCNTL_H NEXT_FCNTL_H REPLACE_OPENAT REPLACE_OPEN REPLACE_FCNTL HAVE_OPENAT HAVE_FCNTL GNULIB_OPENAT GNULIB_OPEN GNULIB_NONBLOCKING GNULIB_FCNTL NEXT_AS_FIRST_DIRECTIVE_CTYPE_H NEXT_CTYPE_H HAVE_ISBLANK GNULIB_ISBLANK LOCALE_TR_UTF8 NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H NEXT_ARPA_INET_H HAVE_ARPA_INET_H REPLACE_INET_PTON REPLACE_INET_NTOP HAVE_DECL_INET_PTON HAVE_DECL_INET_NTOP GNULIB_INET_PTON GNULIB_INET_NTOP HAVE_WS2TCPIP_H HAVE_SYS_SOCKET_H NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H NEXT_SYS_SOCKET_H HAVE_ACCEPT4 HAVE_SA_FAMILY_T HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY HAVE_STRUCT_SOCKADDR_STORAGE GNULIB_ACCEPT4 GNULIB_SHUTDOWN GNULIB_SETSOCKOPT GNULIB_SENDTO GNULIB_RECVFROM GNULIB_SEND GNULIB_RECV GNULIB_LISTEN GNULIB_GETSOCKOPT GNULIB_GETSOCKNAME GNULIB_GETPEERNAME GNULIB_BIND GNULIB_ACCEPT GNULIB_CONNECT GNULIB_SOCKET gltests_WITNESS NEXT_AS_FIRST_DIRECTIVE_WCHAR_H NEXT_WCHAR_H HAVE_FEATURES_H LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE LIBUNISTRING_UNIWIDTH_H LIBUNISTRING_UNITYPES_H HAVE_UNISTD_H NEXT_AS_FIRST_DIRECTIVE_UNISTD_H NEXT_UNISTD_H GL_GENERATE_SYSEXITS_H_FALSE GL_GENERATE_SYSEXITS_H_TRUE SYSEXITS_H HAVE_SYSEXITS_H NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H NEXT_SYSEXITS_H WINDOWS_STAT_INODES WINDOWS_64_BIT_OFF_T NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H NEXT_SYS_TYPES_H HAVE_STRINGS_H NEXT_AS_FIRST_DIRECTIVE_STRINGS_H NEXT_STRINGS_H NEXT_AS_FIRST_DIRECTIVE_STRING_H NEXT_STRING_H HAVE_WINSOCK2_H REPLACE_IOCTL SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS SYS_IOCTL_H_HAVE_WINSOCK2_H GNULIB_IOCTL HAVE_DECL_STRNCASECMP HAVE_STRCASECMP HAVE_FFS GNULIB_FFS NEXT_AS_FIRST_DIRECTIVE_STDLIB_H NEXT_STDLIB_H NEXT_AS_FIRST_DIRECTIVE_STDIO_H NEXT_STDIO_H HAVE__BOOL GL_GENERATE_STDBOOL_H_FALSE GL_GENERATE_STDBOOL_H_TRUE STDBOOL_H GL_GENERATE_STDALIGN_H_FALSE GL_GENERATE_STDALIGN_H_TRUE STDALIGN_H HAVE_MSVC_INVALID_PARAMETER_HANDLER UNDEFINE_STRTOK_R REPLACE_STRSIGNAL REPLACE_STRERROR_R REPLACE_STRERROR REPLACE_STRTOK_R REPLACE_STRCASESTR REPLACE_STRSTR REPLACE_STRNLEN REPLACE_STRNDUP REPLACE_STRNCAT REPLACE_STRDUP REPLACE_STRCHRNUL REPLACE_STPNCPY REPLACE_MEMMEM REPLACE_MEMCHR HAVE_STRVERSCMP HAVE_DECL_STRSIGNAL HAVE_DECL_STRERROR_R HAVE_DECL_STRTOK_R HAVE_STRCASESTR HAVE_STRSEP HAVE_STRPBRK HAVE_DECL_STRNLEN HAVE_DECL_STRNDUP HAVE_DECL_STRDUP HAVE_STRCHRNUL HAVE_STPNCPY HAVE_STPCPY HAVE_RAWMEMCHR HAVE_DECL_MEMRCHR HAVE_MEMPCPY HAVE_DECL_MEMMEM HAVE_MEMCHR HAVE_FFSLL HAVE_FFSL HAVE_EXPLICIT_BZERO HAVE_MBSLEN GNULIB_STRVERSCMP GNULIB_STRSIGNAL GNULIB_STRERROR_R GNULIB_STRERROR GNULIB_MBSTOK_R GNULIB_MBSSEP GNULIB_MBSSPN GNULIB_MBSPBRK GNULIB_MBSCSPN GNULIB_MBSCASESTR GNULIB_MBSPCASECMP GNULIB_MBSNCASECMP GNULIB_MBSCASECMP GNULIB_MBSSTR GNULIB_MBSRCHR GNULIB_MBSCHR GNULIB_MBSNLEN GNULIB_MBSLEN GNULIB_STRTOK_R GNULIB_STRCASESTR GNULIB_STRSTR GNULIB_STRSEP GNULIB_STRPBRK GNULIB_STRNLEN GNULIB_STRNDUP GNULIB_STRNCAT GNULIB_STRDUP GNULIB_STRCHRNUL GNULIB_STPNCPY GNULIB_STPCPY GNULIB_RAWMEMCHR GNULIB_MEMRCHR GNULIB_MEMPCPY GNULIB_MEMMEM GNULIB_MEMCHR GNULIB_FFSLL GNULIB_FFSL GNULIB_EXPLICIT_BZERO LOCALE_FR_UTF8 LOCALE_ZH_CN LOCALE_JA NEXT_AS_FIRST_DIRECTIVE_MATH_H NEXT_MATH_H REPLACE_TRUNCL REPLACE_TRUNCF REPLACE_TRUNC REPLACE_TANHF REPLACE_TANF REPLACE_SQRTL REPLACE_SQRTF REPLACE_SINHF REPLACE_SINF REPLACE_SIGNBIT_USING_GCC REPLACE_SIGNBIT REPLACE_ROUNDL REPLACE_ROUNDF REPLACE_ROUND REPLACE_REMAINDERL REPLACE_REMAINDERF REPLACE_REMAINDER REPLACE_NAN REPLACE_MODFL REPLACE_MODFF REPLACE_MODF REPLACE_LOGBL REPLACE_LOGBF REPLACE_LOGB REPLACE_LOG2L REPLACE_LOG2F REPLACE_LOG2 REPLACE_LOG1PL REPLACE_LOG1PF REPLACE_LOG1P REPLACE_LOG10L REPLACE_LOG10F REPLACE_LOG10 REPLACE_LOGL REPLACE_LOGF REPLACE_LOG REPLACE_LDEXPL REPLACE_ISNAN REPLACE_ISINF REPLACE_ISFINITE REPLACE_ILOGBL REPLACE_ILOGBF REPLACE_ILOGB REPLACE_HYPOTL REPLACE_HYPOTF REPLACE_HYPOT REPLACE_HUGE_VAL REPLACE_FREXPL REPLACE_FREXP REPLACE_FREXPF REPLACE_FMODL REPLACE_FMODF REPLACE_FMOD REPLACE_FMAL REPLACE_FMAF REPLACE_FMA REPLACE_FLOORL REPLACE_FLOORF REPLACE_FLOOR REPLACE_FABSL REPLACE_EXP2L REPLACE_EXP2 REPLACE_EXPM1F REPLACE_EXPM1 REPLACE_EXPF REPLACE_COSHF REPLACE_COSF REPLACE_CEILL REPLACE_CEILF REPLACE_CEIL REPLACE_CBRTL REPLACE_CBRTF REPLACE_ATAN2F REPLACE_ATANF REPLACE_ASINF REPLACE_ACOSF HAVE_DECL_TRUNCL HAVE_DECL_TRUNCF HAVE_DECL_TRUNC HAVE_DECL_TANL HAVE_DECL_SQRTL HAVE_DECL_SINL HAVE_DECL_ROUNDL HAVE_DECL_ROUNDF HAVE_DECL_ROUND HAVE_DECL_RINTF HAVE_DECL_REMAINDERL HAVE_DECL_REMAINDER HAVE_DECL_LOGB HAVE_DECL_LOG2L HAVE_DECL_LOG2F HAVE_DECL_LOG2 HAVE_DECL_LOG10L HAVE_DECL_LOGL HAVE_DECL_LDEXPL HAVE_DECL_FREXPL HAVE_DECL_FLOORL HAVE_DECL_FLOORF HAVE_DECL_EXPM1L HAVE_DECL_EXP2L HAVE_DECL_EXP2F HAVE_DECL_EXP2 HAVE_DECL_EXPL HAVE_DECL_COSL HAVE_DECL_COPYSIGNF HAVE_DECL_CEILL HAVE_DECL_CEILF HAVE_DECL_CBRTL HAVE_DECL_CBRTF HAVE_DECL_ATANL HAVE_DECL_ASINL HAVE_DECL_ACOSL HAVE_TANHF HAVE_TANL HAVE_TANF HAVE_SQRTL HAVE_SQRTF HAVE_SINHF HAVE_SINL HAVE_SINF HAVE_RINTL HAVE_RINT HAVE_REMAINDERF HAVE_REMAINDER HAVE_POWF HAVE_MODFL HAVE_MODFF HAVE_LOGBL HAVE_LOGBF HAVE_LOG1PL HAVE_LOG1PF HAVE_LOG1P HAVE_LOG10L HAVE_LOG10F HAVE_LOGL HAVE_LOGF HAVE_LDEXPF HAVE_ISNANL HAVE_ISNAND HAVE_ISNANF HAVE_ILOGBL HAVE_ILOGBF HAVE_ILOGB HAVE_HYPOTL HAVE_HYPOTF HAVE_FREXPF HAVE_FMODL HAVE_FMODF HAVE_FMAL HAVE_FMAF HAVE_FMA HAVE_FABSL HAVE_FABSF HAVE_EXPM1F HAVE_EXPM1 HAVE_EXPL HAVE_EXPF HAVE_COSHF HAVE_COSL HAVE_COSF HAVE_COPYSIGNL HAVE_COPYSIGN HAVE_CBRTL HAVE_CBRTF HAVE_CBRT HAVE_ATAN2F HAVE_ATANL HAVE_ATANF HAVE_ASINL HAVE_ASINF HAVE_ACOSL HAVE_ACOSF GNULIB_TRUNCL GNULIB_TRUNCF GNULIB_TRUNC GNULIB_TANHF GNULIB_TANL GNULIB_TANF GNULIB_SQRTL GNULIB_SQRTF GNULIB_SINHF GNULIB_SINL GNULIB_SINF GNULIB_SIGNBIT GNULIB_ROUNDL GNULIB_ROUNDF GNULIB_ROUND GNULIB_RINTL GNULIB_RINTF GNULIB_RINT GNULIB_REMAINDERL GNULIB_REMAINDERF GNULIB_REMAINDER GNULIB_POWF GNULIB_MODFL GNULIB_MODFF GNULIB_MODF GNULIB_LOGBL GNULIB_LOGBF GNULIB_LOGB GNULIB_LOG2L GNULIB_LOG2F GNULIB_LOG2 GNULIB_LOG1PL GNULIB_LOG1PF GNULIB_LOG1P GNULIB_LOG10L GNULIB_LOG10F GNULIB_LOG10 GNULIB_LOGL GNULIB_LOGF GNULIB_LOG GNULIB_LDEXPL GNULIB_LDEXPF GNULIB_ISNANL GNULIB_ISNAND GNULIB_ISNANF GNULIB_ISNAN GNULIB_ISINF GNULIB_ISFINITE GNULIB_ILOGBL GNULIB_ILOGBF GNULIB_ILOGB GNULIB_HYPOTL GNULIB_HYPOTF GNULIB_HYPOT GNULIB_FREXPL GNULIB_FREXP GNULIB_FREXPF GNULIB_FMODL GNULIB_FMODF GNULIB_FMOD GNULIB_FMAL GNULIB_FMAF GNULIB_FMA GNULIB_FLOORL GNULIB_FLOORF GNULIB_FLOOR GNULIB_FABSL GNULIB_FABSF GNULIB_EXPM1L GNULIB_EXPM1F GNULIB_EXPM1 GNULIB_EXP2L GNULIB_EXP2F GNULIB_EXP2 GNULIB_EXPL GNULIB_EXPF GNULIB_COSHF GNULIB_COSL GNULIB_COSF GNULIB_COPYSIGNL GNULIB_COPYSIGNF GNULIB_COPYSIGN GNULIB_CEILL GNULIB_CEILF GNULIB_CEIL GNULIB_CBRTL GNULIB_CBRTF GNULIB_CBRT GNULIB_ATAN2F GNULIB_ATANL GNULIB_ATANF GNULIB_ASINL GNULIB_ASINF GNULIB_ACOSL GNULIB_ACOSF REPLACE_WCTOMB REPLACE_UNSETENV REPLACE_STRTOD REPLACE_SETENV REPLACE_REALPATH REPLACE_REALLOC REPLACE_RANDOM_R REPLACE_QSORT_R REPLACE_PUTENV REPLACE_PTSNAME_R REPLACE_PTSNAME REPLACE_MKSTEMP REPLACE_MBTOWC REPLACE_MALLOC REPLACE_CANONICALIZE_FILE_NAME REPLACE_CALLOC HAVE_DECL_UNSETENV HAVE_UNLOCKPT HAVE_SYS_LOADAVG_H HAVE_STRUCT_RANDOM_DATA HAVE_STRTOULL HAVE_STRTOLL HAVE_STRTOD HAVE_DECL_SETSTATE HAVE_DECL_SETENV HAVE_SETENV HAVE_SECURE_GETENV HAVE_RPMATCH HAVE_REALPATH HAVE_REALLOCARRAY HAVE_RANDOM_R HAVE_RANDOM_H HAVE_RANDOM HAVE_QSORT_R HAVE_PTSNAME_R HAVE_PTSNAME HAVE_POSIX_OPENPT HAVE_MKSTEMPS HAVE_MKSTEMP HAVE_MKOSTEMPS HAVE_MKOSTEMP HAVE_MKDTEMP HAVE_DECL_INITSTATE HAVE_GRANTPT HAVE_GETSUBOPT HAVE_DECL_GETLOADAVG HAVE_CANONICALIZE_FILE_NAME HAVE_ATOLL HAVE__EXIT GNULIB_WCTOMB GNULIB_UNSETENV GNULIB_UNLOCKPT GNULIB_SYSTEM_POSIX GNULIB_STRTOULL GNULIB_STRTOLL GNULIB_STRTOD GNULIB_SETENV GNULIB_SECURE_GETENV GNULIB_RPMATCH GNULIB_REALPATH GNULIB_REALLOC_POSIX GNULIB_REALLOCARRAY GNULIB_RANDOM_R GNULIB_RANDOM GNULIB_QSORT_R GNULIB_PUTENV GNULIB_PTSNAME_R GNULIB_PTSNAME GNULIB_POSIX_OPENPT GNULIB_MKSTEMPS GNULIB_MKSTEMP GNULIB_MKOSTEMPS GNULIB_MKOSTEMP GNULIB_MKDTEMP GNULIB_MBTOWC GNULIB_MALLOC_POSIX GNULIB_GRANTPT GNULIB_GETSUBOPT GNULIB_GETLOADAVG GNULIB_CANONICALIZE_FILE_NAME GNULIB_CALLOC_POSIX GNULIB_ATOLL GNULIB__EXIT LTLIBMULTITHREAD LIBMULTITHREAD LTLIBTHREAD LIBTHREAD LIBPTH_PREFIX LTLIBPTH LIBPTH NEXT_AS_FIRST_DIRECTIVE_LOCALE_H NEXT_LOCALE_H HAVE_XLOCALE_H NEXT_AS_FIRST_DIRECTIVE_STDDEF_H NEXT_STDDEF_H GL_GENERATE_STDDEF_H_FALSE GL_GENERATE_STDDEF_H_TRUE STDDEF_H HAVE_WCHAR_T HAVE_MAX_ALIGN_T REPLACE_NULL REPLACE_STRUCT_LCONV REPLACE_DUPLOCALE REPLACE_SETLOCALE REPLACE_LOCALECONV HAVE_DUPLOCALE GNULIB_DUPLOCALE GNULIB_SETLOCALE GNULIB_LOCALECONV LOCALCHARSET_TESTS_ENVIRONMENT GLIBC21 HAVE_LANGINFO_YESEXPR HAVE_LANGINFO_ERA HAVE_LANGINFO_T_FMT_AMPM HAVE_LANGINFO_CODESET HAVE_LANGINFO_H NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H NEXT_LANGINFO_H REPLACE_NL_LANGINFO HAVE_NL_LANGINFO GNULIB_NL_LANGINFO REPLACE_TOWLOWER REPLACE_ISWCNTRL HAVE_WCTYPE_H NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H NEXT_WCTYPE_H HAVE_CRTDEFS_H HAVE_WINT_T HAVE_ISWCNTRL REPLACE_ISWBLANK HAVE_WCTRANS_T HAVE_WCTYPE_T HAVE_ISWBLANK GNULIB_TOWCTRANS GNULIB_WCTRANS GNULIB_ISWCTYPE GNULIB_WCTYPE GNULIB_ISWBLANK NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H NEXT_INTTYPES_H UINT64_MAX_EQ_ULONG_MAX UINT32_MAX_LT_UINTMAX_MAX PRIPTR_PREFIX PRI_MACROS_BROKEN INT64_MAX_EQ_LONG_MAX INT32_MAX_LT_INTMAX_MAX REPLACE_STRTOUMAX REPLACE_STRTOIMAX HAVE_DECL_STRTOUMAX HAVE_DECL_STRTOIMAX HAVE_DECL_IMAXDIV HAVE_DECL_IMAXABS GNULIB_STRTOUMAX GNULIB_STRTOIMAX GNULIB_IMAXDIV GNULIB_IMAXABS GL_GENERATE_STDINT_H_FALSE GL_GENERATE_STDINT_H_TRUE STDINT_H HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H HAVE_C99_STDINT_H WINT_T_SUFFIX WCHAR_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX PTRDIFF_T_SUFFIX HAVE_SIGNED_WINT_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_SIG_ATOMIC_T BITSIZEOF_WINT_T BITSIZEOF_WCHAR_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_PTRDIFF_T APPLE_UNIVERSAL_BUILD HAVE_STDINT_H NEXT_AS_FIRST_DIRECTIVE_STDINT_H NEXT_STDINT_H HAVE_SYS_TYPES_H HAVE_INTTYPES_H HAVE_WCHAR_H HAVE_UNSIGNED_LONG_LONG_INT HAVE_LONG_LONG_INT GNULIB_OVERRIDES_WINT_T GL_GENERATE_LIMITS_H_FALSE GL_GENERATE_LIMITS_H_TRUE LIMITS_H NEXT_AS_FIRST_DIRECTIVE_LIMITS_H NEXT_LIMITS_H HOST_CPU_C_ABI HOST_CPU LTLIBINTL LIBINTL GNULIB_GL_UNISTD_H_GETOPT GETOPT_CDEFS_H GETOPT_H HAVE_SYS_CDEFS_H HAVE_GETOPT_H NEXT_AS_FIRST_DIRECTIVE_GETOPT_H NEXT_GETOPT_H UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS UNISTD_H_HAVE_WINSOCK2_H REPLACE_WRITE REPLACE_USLEEP REPLACE_UNLINKAT REPLACE_UNLINK REPLACE_TTYNAME_R REPLACE_TRUNCATE REPLACE_SYMLINKAT REPLACE_SYMLINK REPLACE_SLEEP REPLACE_RMDIR REPLACE_READLINKAT REPLACE_READLINK REPLACE_READ REPLACE_PWRITE REPLACE_PREAD REPLACE_LSEEK REPLACE_LINKAT REPLACE_LINK REPLACE_LCHOWN REPLACE_ISATTY REPLACE_GETPAGESIZE REPLACE_GETGROUPS REPLACE_GETLOGIN_R REPLACE_GETDTABLESIZE REPLACE_GETDOMAINNAME REPLACE_GETCWD REPLACE_FTRUNCATE REPLACE_FCHOWNAT REPLACE_FACCESSAT REPLACE_DUP2 REPLACE_DUP REPLACE_CLOSE REPLACE_CHOWN HAVE_SYS_PARAM_H HAVE_OS_H HAVE_DECL_TTYNAME_R HAVE_DECL_SETHOSTNAME HAVE_DECL_GETUSERSHELL HAVE_DECL_GETPAGESIZE HAVE_DECL_GETLOGIN_R HAVE_DECL_GETLOGIN HAVE_DECL_GETDOMAINNAME HAVE_DECL_FDATASYNC HAVE_DECL_FCHDIR HAVE_DECL_ENVIRON HAVE_USLEEP HAVE_UNLINKAT HAVE_TRUNCATE HAVE_SYMLINKAT HAVE_SYMLINK HAVE_SLEEP HAVE_SETHOSTNAME HAVE_READLINKAT HAVE_READLINK HAVE_PWRITE HAVE_PREAD HAVE_PIPE2 HAVE_PIPE HAVE_LINKAT HAVE_LINK HAVE_LCHOWN HAVE_GROUP_MEMBER HAVE_GETPAGESIZE HAVE_GETLOGIN HAVE_GETHOSTNAME HAVE_GETGROUPS HAVE_GETDTABLESIZE HAVE_FTRUNCATE HAVE_FSYNC HAVE_FDATASYNC HAVE_FCHOWNAT HAVE_FCHDIR HAVE_FACCESSAT HAVE_EUIDACCESS HAVE_DUP3 HAVE_DUP2 HAVE_CHOWN GNULIB_WRITE GNULIB_USLEEP GNULIB_UNLINKAT GNULIB_UNLINK GNULIB_UNISTD_H_SIGPIPE GNULIB_UNISTD_H_NONBLOCKING GNULIB_TTYNAME_R GNULIB_TRUNCATE GNULIB_SYMLINKAT GNULIB_SYMLINK GNULIB_SLEEP GNULIB_SETHOSTNAME GNULIB_RMDIR GNULIB_READLINKAT GNULIB_READLINK GNULIB_READ GNULIB_PWRITE GNULIB_PREAD GNULIB_PIPE2 GNULIB_PIPE GNULIB_LSEEK GNULIB_LINKAT GNULIB_LINK GNULIB_LCHOWN GNULIB_ISATTY GNULIB_GROUP_MEMBER GNULIB_GETUSERSHELL GNULIB_GETPAGESIZE GNULIB_GETLOGIN_R GNULIB_GETLOGIN GNULIB_GETHOSTNAME GNULIB_GETGROUPS GNULIB_GETDTABLESIZE GNULIB_GETDOMAINNAME GNULIB_GETCWD GNULIB_FTRUNCATE GNULIB_FSYNC GNULIB_FDATASYNC GNULIB_FCHOWNAT GNULIB_FCHDIR GNULIB_FACCESSAT GNULIB_EUIDACCESS GNULIB_ENVIRON GNULIB_DUP3 GNULIB_DUP2 GNULIB_DUP GNULIB_CLOSE GNULIB_CHOWN GNULIB_CHDIR REPLACE_VSPRINTF REPLACE_VSNPRINTF REPLACE_VPRINTF REPLACE_VFPRINTF REPLACE_VDPRINTF REPLACE_VASPRINTF REPLACE_TMPFILE REPLACE_STDIO_WRITE_FUNCS REPLACE_STDIO_READ_FUNCS REPLACE_SPRINTF REPLACE_SNPRINTF REPLACE_RENAMEAT REPLACE_RENAME REPLACE_REMOVE REPLACE_PRINTF REPLACE_POPEN REPLACE_PERROR REPLACE_OBSTACK_PRINTF REPLACE_GETLINE REPLACE_GETDELIM REPLACE_FTELLO REPLACE_FTELL REPLACE_FSEEKO REPLACE_FSEEK REPLACE_FREOPEN REPLACE_FPURGE REPLACE_FPRINTF REPLACE_FOPEN REPLACE_FFLUSH REPLACE_FDOPEN REPLACE_FCLOSE REPLACE_DPRINTF HAVE_VDPRINTF HAVE_VASPRINTF HAVE_RENAMEAT HAVE_POPEN HAVE_PCLOSE HAVE_FTELLO HAVE_FSEEKO HAVE_DPRINTF HAVE_DECL_VSNPRINTF HAVE_DECL_SNPRINTF HAVE_DECL_OBSTACK_PRINTF HAVE_DECL_GETLINE HAVE_DECL_GETDELIM HAVE_DECL_FTELLO HAVE_DECL_FSEEKO HAVE_DECL_FPURGE GNULIB_VSPRINTF_POSIX GNULIB_VSNPRINTF GNULIB_VPRINTF_POSIX GNULIB_VPRINTF GNULIB_VFPRINTF_POSIX GNULIB_VFPRINTF GNULIB_VDPRINTF GNULIB_VSCANF GNULIB_VFSCANF GNULIB_VASPRINTF GNULIB_TMPFILE GNULIB_STDIO_H_SIGPIPE GNULIB_STDIO_H_NONBLOCKING GNULIB_SPRINTF_POSIX GNULIB_SNPRINTF GNULIB_SCANF GNULIB_RENAMEAT GNULIB_RENAME GNULIB_REMOVE GNULIB_PUTS GNULIB_PUTCHAR GNULIB_PUTC GNULIB_PRINTF_POSIX GNULIB_PRINTF GNULIB_POPEN GNULIB_PERROR GNULIB_PCLOSE GNULIB_OBSTACK_PRINTF_POSIX GNULIB_OBSTACK_PRINTF GNULIB_GETLINE GNULIB_GETDELIM GNULIB_GETCHAR GNULIB_GETC GNULIB_FWRITE GNULIB_FTELLO GNULIB_FTELL GNULIB_FSEEKO GNULIB_FSEEK GNULIB_FSCANF GNULIB_FREOPEN GNULIB_FREAD GNULIB_FPUTS GNULIB_FPUTC GNULIB_FPURGE GNULIB_FPRINTF_POSIX GNULIB_FPRINTF GNULIB_FOPEN GNULIB_FGETS GNULIB_FGETC GNULIB_FFLUSH GNULIB_FDOPEN GNULIB_FCLOSE GNULIB_DPRINTF REPLACE_ITOLD GL_GENERATE_FLOAT_H_FALSE GL_GENERATE_FLOAT_H_TRUE FLOAT_H NEXT_AS_FIRST_DIRECTIVE_FLOAT_H NEXT_FLOAT_H EOVERFLOW_VALUE EOVERFLOW_HIDDEN ENOLINK_VALUE ENOLINK_HIDDEN EMULTIHOP_VALUE EMULTIHOP_HIDDEN GL_GENERATE_ERRNO_H_FALSE GL_GENERATE_ERRNO_H_TRUE ERRNO_H NEXT_AS_FIRST_DIRECTIVE_ERRNO_H NEXT_ERRNO_H PRAGMA_COLUMNS PRAGMA_SYSTEM_HEADER INCLUDE_NEXT_AS_FIRST_DIRECTIVE INCLUDE_NEXT pkglibexecdir runstatedir lispdir LOCALE_FR REPLACE_WCSFTIME REPLACE_WCSWIDTH REPLACE_WCWIDTH REPLACE_WCSNRTOMBS REPLACE_WCSRTOMBS REPLACE_WCRTOMB REPLACE_MBSNRTOWCS REPLACE_MBSRTOWCS REPLACE_MBRLEN REPLACE_MBRTOWC REPLACE_MBSINIT REPLACE_WCTOB REPLACE_BTOWC REPLACE_MBSTATE_T HAVE_DECL_WCWIDTH HAVE_DECL_WCTOB HAVE_WCSFTIME HAVE_WCSWIDTH HAVE_WCSTOK HAVE_WCSSTR HAVE_WCSPBRK HAVE_WCSSPN HAVE_WCSCSPN HAVE_WCSRCHR HAVE_WCSCHR HAVE_WCSDUP HAVE_WCSXFRM HAVE_WCSCOLL HAVE_WCSNCASECMP HAVE_WCSCASECMP HAVE_WCSNCMP HAVE_WCSCMP HAVE_WCSNCAT HAVE_WCSCAT HAVE_WCPNCPY HAVE_WCSNCPY HAVE_WCPCPY HAVE_WCSCPY HAVE_WCSNLEN HAVE_WCSLEN HAVE_WMEMSET HAVE_WMEMMOVE HAVE_WMEMCPY HAVE_WMEMCMP HAVE_WMEMCHR HAVE_WCSNRTOMBS HAVE_WCSRTOMBS HAVE_WCRTOMB HAVE_MBSNRTOWCS HAVE_MBSRTOWCS HAVE_MBRLEN HAVE_MBRTOWC HAVE_MBSINIT HAVE_BTOWC GNULIB_WCSFTIME GNULIB_WCSWIDTH GNULIB_WCSTOK GNULIB_WCSSTR GNULIB_WCSPBRK GNULIB_WCSSPN GNULIB_WCSCSPN GNULIB_WCSRCHR GNULIB_WCSCHR GNULIB_WCSDUP GNULIB_WCSXFRM GNULIB_WCSCOLL GNULIB_WCSNCASECMP GNULIB_WCSCASECMP GNULIB_WCSNCMP GNULIB_WCSCMP GNULIB_WCSNCAT GNULIB_WCSCAT GNULIB_WCPNCPY GNULIB_WCSNCPY GNULIB_WCPCPY GNULIB_WCSCPY GNULIB_WCSNLEN GNULIB_WCSLEN GNULIB_WMEMSET GNULIB_WMEMMOVE GNULIB_WMEMCPY GNULIB_WMEMCMP GNULIB_WMEMCHR GNULIB_WCWIDTH GNULIB_WCSNRTOMBS GNULIB_WCSRTOMBS GNULIB_WCRTOMB GNULIB_MBSNRTOWCS GNULIB_MBSRTOWCS GNULIB_MBRLEN GNULIB_MBRTOWC GNULIB_MBSINIT GNULIB_WCTOB GNULIB_BTOWC GL_GENERATE_ALLOCA_H_FALSE GL_GENERATE_ALLOCA_H_TRUE ALLOCA_H ALLOCA LTALLOCA GL_COND_LIBTOOL_FALSE GL_COND_LIBTOOL_TRUE HAVE_PTHREAD_BARRIER HAVE_WCSLIB_VERSION SIZEOF_LONG SIZEOF_SIZE_T LIBOBJS PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC ax_pthread_config CXXCPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL host_os host_vendor host_cpu host build_os build_vendor build_cpu build RANLIB ARFLAGS ac_ct_AR AR EGREP GREP CPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC GAL_LT_VERSION AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_largefile enable_threads enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock enable_rpath with_libpth_prefix with_included_regex enable_gnulibcheck enable_arithmetic enable_buildprog enable_convertt enable_convolve enable_cosmiccal enable_crop enable_fits enable_match enable_mkcatalog enable_mknoise enable_mkprof enable_noisechisel enable_statistics enable_table enable_warp enable_guide_message ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP LT_SYS_LIBRARY_PATH CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures GNU Astronomy Utilities 0.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gnuastro] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of GNU Astronomy Utilities 0.5:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-largefile omit support for large files --enable-threads={posix|solaris|pth|windows} specify multithreading API --disable-threads build without multithread safety --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-rpath do not hardcode runtime library paths --enable-gnulibcheck In `make check', also test GNU Gnulib. --enable-arithmetic Install Arithmetic and other enabled programs. --enable-buildprog Install BuildProgram and other enabled programs. --enable-convertt Install ConvertType and other enabled programs. --enable-convolve Install Convolve and other enabled programs. --enable-cosmiccal Install CosmicCalculator and other enabled programs. --enable-crop Install Crop and other enabled programs. --enable-fits Install Fits and other enabled programs. --enable-match Install Match and other enabled programs. --enable-mkcatalog Install MakeCatalog and other enabled programs. --enable-mknoise Install MakeNoise and other enabled programs. --enable-mkprof Install MakeProfile and other enabled programs. --enable-noisechisel Install NoiseChisel and other enabled programs. --enable-statistics Install Statistics and other enabled programs. --enable-table Install Table and other enabled programs. --enable-warp Install Warp and other enabled programs. --disable-guide-message No messages after each build step. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libpth-prefix[=DIR] search for libpth in DIR/include and DIR/lib --without-libpth-prefix don't search for libpth in includedir and libdir --without-included-regex don't compile regex; this is the default on systems with recent-enough versions of the GNU C Library (use with caution on other systems). Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . GNU Astronomy Utilities home page: . General help using GNU software: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF GNU Astronomy Utilities configure 0.5 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ----------------------------------- ## ## Report this to bug-gnuastro@gnu.org ## ## ----------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by GNU Astronomy Utilities $as_me 0.5, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_func_list " flockfile" as_fn_append ac_func_list " funlockfile" as_fn_append ac_header_list " features.h" as_fn_append ac_header_list " linewrap.h" as_fn_append ac_func_list " btowc" as_fn_append ac_func_list " getdelim" gl_getopt_required=GNU as_fn_append ac_header_list " getopt.h" as_fn_append ac_header_list " sys/cdefs.h" as_fn_append ac_func_list " getprogname" as_fn_append ac_func_list " getexecname" as_fn_append ac_header_list " limits.h" as_fn_append ac_header_list " wchar.h" as_fn_append ac_header_list " stdint.h" as_fn_append ac_header_list " inttypes.h" as_fn_append ac_func_list " iswcntrl" as_fn_append ac_header_list " crtdefs.h" as_fn_append ac_header_list " wctype.h" as_fn_append ac_func_list " iswblank" as_fn_append ac_header_list " langinfo.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_func_list " symlink" as_fn_append ac_header_list " xlocale.h" as_fn_append ac_header_list " math.h" as_fn_append ac_func_list " mbsinit" as_fn_append ac_func_list " mbrtowc" as_fn_append ac_header_list " sys/mman.h" as_fn_append ac_func_list " mprotect" as_fn_append ac_func_list " _set_invalid_parameter_handler" as_fn_append ac_func_list " nl_langinfo" as_fn_append ac_header_list " malloc.h" as_fn_append ac_func_list " isblank" as_fn_append ac_func_list " iswctype" as_fn_append ac_func_list " sleep" as_fn_append ac_func_list " strerror_r" as_fn_append ac_func_list " __xpg_strerror_r" as_fn_append ac_header_list " sys/socket.h" as_fn_append ac_header_list " strings.h" as_fn_append ac_func_list " strndup" as_fn_append ac_header_list " sysexits.h" as_fn_append ac_func_list " vasnprintf" as_fn_append ac_func_list " snprintf" as_fn_append ac_func_list " wcrtomb" as_fn_append ac_func_list " wcwidth" as_fn_append ac_header_list " arpa/inet.h" as_fn_append ac_func_list " fcntl" as_fn_append ac_header_list " sys/stat.h" as_fn_append ac_func_list " ftruncate" as_fn_append ac_func_list " getdtablesize" as_fn_append ac_header_list " sys/time.h" as_fn_append ac_func_list " gettimeofday" as_fn_append ac_header_list " netdb.h" as_fn_append ac_header_list " netinet/in.h" as_fn_append ac_func_list " newlocale" as_fn_append ac_header_list " semaphore.h" as_fn_append ac_func_list " lstat" as_fn_append ac_header_list " sys/select.h" as_fn_append ac_header_list " sys/param.h" as_fn_append ac_func_list " pipe" as_fn_append ac_func_list " pthread_sigmask" as_fn_append ac_header_list " sys/wait.h" as_fn_append ac_func_list " setenv" as_fn_append ac_func_list " sigaction" as_fn_append ac_func_list " sigaltstack" as_fn_append ac_func_list " siginterrupt" as_fn_append ac_func_list " catgets" as_fn_append ac_header_list " sys/ioctl.h" as_fn_append ac_func_list " shutdown" as_fn_append ac_header_list " sys/uio.h" as_fn_append ac_func_list " usleep" as_fn_append ac_func_list " wctob" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in bootstrapped/build-aux "$srcdir"/bootstrapped/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in bootstrapped/build-aux \"$srcdir\"/bootstrapped/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gnuastro' VERSION='0.5' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" # Library version, see the GNU Libtool manual ("Library interface versions" # section for the exact definition of each) for GAL_CURRENT=3 GAL_REVISION=0 GAL_AGE=0 GAL_LT_VERSION="${GAL_CURRENT}:${GAL_REVISION}:${GAL_AGE}" # Checks for programs. : ${CFLAGS=""} : ${CXXFLAGS=""} ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h $as_echo "#define _OPENBSD_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 $as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; } if ${ac_cv_should_define__xopen_source+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_should_define__xopen_source=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 $as_echo "$ac_cv_should_define__xopen_source" >&6; } test $ac_cv_should_define__xopen_source = yes && $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 $as_echo_n "checking for Minix Amsterdam compiler... " >&6; } if ${gl_cv_c_amsterdam_compiler+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ACK__ Amsterdam #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Amsterdam" >/dev/null 2>&1; then : gl_cv_c_amsterdam_compiler=yes else gl_cv_c_amsterdam_compiler=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 $as_echo "$gl_cv_c_amsterdam_compiler" >&6; } if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # 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__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="ar" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi if test -z "$ARFLAGS"; then ARFLAGS='cr' fi if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi fi fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # IEEE behaviour is the default on all CPUs except Alpha and SH # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 # and the GCC 4.1.2 manual). case "$host_cpu" in alpha*) # On Alpha systems, a compiler option provides the behaviour. # See the ieee(3) manual page, also available at # if test -n "$GCC"; then # GCC has the option -mieee. # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. CPPFLAGS="$CPPFLAGS -mieee" else # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. CPPFLAGS="$CPPFLAGS -ieee" fi ;; sh*) if test -n "$GCC"; then # GCC has the option -mieee. CPPFLAGS="$CPPFLAGS -mieee" fi ;; esac # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi $as_echo "#define _DARWIN_USE_64_BIT_INODE 1" >>confdefs.h fi # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; gl_use_threads=$enableval else if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else case "$host_os" in osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac fi fi if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # For using : case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks . cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in . case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac fi # Pre-early section. # Code from module absolute-header: # Code from module accept: # Code from module accept-tests: # Code from module alloca: # Code from module alloca-opt: # Code from module alloca-opt-tests: # Code from module argp: # Code from module argp-tests: # Code from module arpa_inet: # Code from module arpa_inet-tests: # Code from module binary-io: # Code from module binary-io-tests: # Code from module bind: # Code from module bind-tests: # Code from module btowc: # Code from module btowc-tests: # Code from module builtin-expect: # Code from module c-ctype: # Code from module c-ctype-tests: # Code from module c-strcase: # Code from module c-strcase-tests: # Code from module cloexec: # Code from module cloexec-tests: # Code from module close: # Code from module close-tests: # Code from module configmake: # Code from module connect: # Code from module connect-tests: # Code from module ctype: # Code from module ctype-tests: # Code from module dirname-lgpl: # Code from module dosname: # Code from module double-slash-root: # Code from module dup2: # Code from module dup2-tests: # Code from module environ: # Code from module environ-tests: # Code from module errno: # Code from module errno-tests: # Code from module error: # Code from module extensions: # Code from module extern-inline: # Code from module fcntl: # Code from module fcntl-h: # Code from module fcntl-h-tests: # Code from module fcntl-tests: # Code from module fd-hook: # Code from module fdl: # Code from module fdopen: # Code from module fdopen-tests: # Code from module fgetc-tests: # Code from module filename: # Code from module flexmember: # Code from module float: # Code from module float-tests: # Code from module fpieee: # Code from module fpucw: # Code from module fputc-tests: # Code from module fread-tests: # Code from module fstat: # Code from module fstat-tests: # Code from module ftruncate: # Code from module ftruncate-tests: # Code from module func: # Code from module func-tests: # Code from module fwrite-tests: # Code from module gendocs: # Code from module getcwd-lgpl: # Code from module getcwd-lgpl-tests: # Code from module getdelim: # Code from module getdelim-tests: # Code from module getdtablesize: # Code from module getdtablesize-tests: # Code from module getline: # Code from module getline-tests: # Code from module getopt-gnu: # Code from module getopt-gnu-tests: # Code from module getopt-posix: # Code from module getopt-posix-tests: # Code from module getpagesize: # Code from module getprogname: # Code from module getprogname-tests: # Code from module gettext-h: # Code from module gettimeofday: # Code from module gettimeofday-tests: # Code from module git-version-gen: # Code from module hard-locale: # Code from module havelib: # Code from module host-cpu-c-abi: # Code from module ignore-value: # Code from module ignore-value-tests: # Code from module include_next: # Code from module inet_pton: # Code from module inet_pton-tests: # Code from module intprops: # Code from module intprops-tests: # Code from module inttypes: # Code from module inttypes-incomplete: # Code from module inttypes-tests: # Code from module ioctl: # Code from module ioctl-tests: # Code from module isblank: # Code from module isblank-tests: # Code from module isnand-nolibm: # Code from module isnand-nolibm-tests: # Code from module isnanf-nolibm: # Code from module isnanf-nolibm-tests: # Code from module isnanl-nolibm: # Code from module isnanl-nolibm-tests: # Code from module iswblank: # Code from module iswblank-tests: # Code from module langinfo: # Code from module langinfo-tests: # Code from module largefile: # Code from module limits-h: # Code from module limits-h-tests: # Code from module listen: # Code from module listen-tests: # Code from module localcharset: # Code from module locale: # Code from module locale-tests: # Code from module localeconv: # Code from module localeconv-tests: # Code from module localename: # Code from module localename-tests: # Code from module localtime-buffer: # Code from module lock: # Code from module lock-tests: # Code from module lstat: # Code from module lstat-tests: # Code from module malloc-gnu: # Code from module malloc-gnu-tests: # Code from module malloc-posix: # Code from module malloca: # Code from module malloca-tests: # Code from module math: # Code from module math-tests: # Code from module mbchar: # Code from module mbrtowc: # Code from module mbrtowc-tests: # Code from module mbschr: # Code from module mbschr-tests: # Code from module mbsinit: # Code from module mbsinit-tests: # Code from module mbspbrk: # Code from module mbspbrk-tests: # Code from module mbsspn: # Code from module mbsspn-tests: # Code from module mbstok_r: # Code from module mbtowc: # Code from module mbuiter: # Code from module memchr: # Code from module memchr-tests: # Code from module mempcpy: # Code from module minmax: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module nanosleep: # Code from module nanosleep-tests: # Code from module netinet_in: # Code from module netinet_in-tests: # Code from module nl_langinfo: # Code from module nl_langinfo-tests: # Code from module nocrash: # Code from module nproc: # Code from module open: # Code from module open-tests: # Code from module pathmax: # Code from module pathmax-tests: # Code from module perror: # Code from module perror-tests: # Code from module pipe-posix: # Code from module pipe-posix-tests: # Code from module pthread_sigmask: # Code from module pthread_sigmask-tests: # Code from module putenv: # Code from module raise: # Code from module raise-tests: # Code from module rawmemchr: # Code from module rawmemchr-tests: # Code from module regex: # Code from module regex-tests: # Code from module same-inode: # Code from module select: # Code from module select-tests: # Code from module setenv: # Code from module setenv-tests: # Code from module setlocale: # Code from module setlocale-tests: # Code from module setsockopt: # Code from module setsockopt-tests: # Code from module sigaction: # Code from module sigaction-tests: # Code from module signal-h: # Code from module signal-h-tests: # Code from module signbit: # Code from module signbit-tests: # Code from module sigprocmask: # Code from module sigprocmask-tests: # Code from module size_max: # Code from module sleep: # Code from module sleep-tests: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module socket: # Code from module socketlib: # Code from module sockets: # Code from module sockets-tests: # Code from module socklen: # Code from module ssize_t: # Code from module stat: # Code from module stat-tests: # Code from module stat-time: # Code from module stat-time-tests: # Code from module stdalign: # Code from module stdalign-tests: # Code from module stdbool: # Code from module stdbool-tests: # Code from module stddef: # Code from module stddef-tests: # Code from module stdint: # Code from module stdint-tests: # Code from module stdio: # Code from module stdio-tests: # Code from module stdlib: # Code from module stdlib-tests: # Code from module strcase: # Code from module strchrnul: # Code from module strchrnul-tests: # Code from module streq: # Code from module strerror: # Code from module strerror-override: # Code from module strerror-tests: # Code from module strerror_r-posix: # Code from module strerror_r-posix-tests: # Code from module string: # Code from module string-tests: # Code from module strings: # Code from module strings-tests: # Code from module strndup: # Code from module strnlen: # Code from module strnlen-tests: # Code from module strnlen1: # Code from module strtod: # Code from module strtod-tests: # Code from module strtok_r: # Code from module symlink: # Code from module symlink-tests: # Code from module sys_ioctl: # Code from module sys_ioctl-tests: # Code from module sys_select: # Code from module sys_select-tests: # Code from module sys_socket: # Code from module sys_socket-tests: # Code from module sys_stat: # Code from module sys_stat-tests: # Code from module sys_time: # Code from module sys_time-tests: # Code from module sys_types: # Code from module sys_types-tests: # Code from module sys_uio: # Code from module sys_uio-tests: # Code from module sysexits: # Code from module sysexits-tests: # Code from module test-framework-sh: # Code from module test-framework-sh-tests: # Code from module thread: # Code from module thread-tests: # Code from module threadlib: # Code from module time: # Code from module time-tests: # Code from module unistd: # Code from module unistd-tests: # Code from module unitypes: # Code from module uniwidth/base: # Code from module uniwidth/width: # Code from module uniwidth/width-tests: # Code from module unsetenv: # Code from module unsetenv-tests: # Code from module usleep: # Code from module usleep-tests: # Code from module vasnprintf: # Code from module vasnprintf-tests: # Code from module verify: # Code from module verify-tests: # Code from module vsnprintf: # Code from module vsnprintf-tests: # Code from module wchar: # Code from module wchar-tests: # Code from module wcrtomb: # Code from module wcrtomb-tests: # Code from module wctob: # Code from module wctomb: # Code from module wctype-h: # Code from module wctype-h-tests: # Code from module wcwidth: # Code from module wcwidth-tests: # Code from module xalloc-oversized: # Code from module xsize: # Code from module yield: if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # 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__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6.40-6ca5-dirty' macro_revision='2.4.6.40' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 $as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 $as_echo_n "checking for a working dd... " >&6; } if ${ac_cv_path_lt_DD+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 $as_echo "$ac_cv_path_lt_DD" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 $as_echo_n "checking how to truncate binary pipes... " >&6; } if ${lt_cv_truncate_bin+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 $as_echo "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 $AR $AR_FLAGS libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else pic_mode=default fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 $as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else if ${lt_cv_with_aix_soname+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 $as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test no = "$hard_links"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -z "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi fi # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC func_cc_basename $compiler cc_basename=$func_cc_basename_result if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec_CXX='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. no_undefined_flag_CXX='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' $wl-bernotok' allow_undefined_flag_CXX=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='$wl--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" if test yes != "$lt_cv_apple_cc_single_mod"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi else ld_shlibs_CXX=no fi ;; os2*) hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_minus_L_CXX=yes allow_undefined_flag_CXX=unsupported shrext_cmds=.dll archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_CXX=yes file_list_spec_CXX='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='$wl-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='$wl-E' whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then no_undefined_flag_CXX=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='$wl-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='$wl-z,text' allow_undefined_flag_CXX='$wl-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX LD_CXX=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX=$prev$p else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX=$prev$p else postdeps_CXX="${postdeps_CXX} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$predep_objects_CXX"; then predep_objects_CXX=$p else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX=$p else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi lt_prog_compiler_pic_CXX='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_CXX='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test no = "$hard_links"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec_CXX='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test yes = "$hardcode_automatic_CXX"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct_CXX" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && test no != "$hardcode_minus_L_CXX"; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test relink = "$hardcode_action_CXX" || test yes = "$inherit_rpath_CXX"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # This macro will let the libraries know that we are now in the Gnuastro # build system, not on the user's system. While we are building Gnuastro, # we have the important installation information in `config.h'. But in the # user's own programs, this information is defined in # `gnuastro/config.h'. With this macro, the installed headers can decide # if the latter should be included or not. Note that `gnuastro/config.h' # is only built at installation time and doesn't exist when building # Gnuastro. Therefore, this macro must not be defined in a user's program. $as_echo "#define IN_GNUASTRO_BUILD 1" >>confdefs.h # Generic compiler flags for all sub-directories. CFLAGS="-Wall -O3 $CFLAGS" CXXFLAGS="-Wall -O3 $CXXFLAGS" LDFLAGS="-L\$(top_builddir)/lib $LDFLAGS" CPPFLAGS="-I\$(top_srcdir)/lib $CPPFLAGS" # Check for pthreads and add the appropriate compilation flags. AX_PTHREAD # comes from the GNU Autoconf Archive's ax_pthread.m4, see there for the # documentation. Note that ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on Tru64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" if test "x$PTHREAD_CC" != "x"; then : CC="$PTHREAD_CC" fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 $as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi CC="$ax_pthread_save_CC" CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 # (Note: HP C rejects this with "bad form for `-t' option") # -pthreads: Solaris/gcc (Note: HP C also rejects) # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads and # -D_REENTRANT too), HP C (must be checked before -lpthread, which # is present but should not be used directly; and before -mthreads, # because the compiler interprets this as "-mt" + "-hreads") # -mthreads: Mingw32/gcc, Lynx/gcc # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case $host_os in freebsd*) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) ax_pthread_flags="-kthread lthread $ax_pthread_flags" ;; hpux*) # From the cc(1) man page: "[-mt] Sets various -D flags to enable # multi-threading and also sets -lpthread." ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" ;; openedition*) # IBM z/OS requires a feature-test macro to be defined in order to # enable POSIX threads at all, so give the user a hint if this is # not set. (We don't define these ourselves, as they can affect # other portions of the system API in unpredictable ways.) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) AX_PTHREAD_ZOS_MISSING # endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 $as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} fi rm -f conftest* ;; solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (N.B.: The stubs are missing # pthread_cleanup_push, or rather a function called by this macro, # so we could check for that, but who knows whether they'll stub # that too in a future libc.) So we'll check first for the # standard Solaris way of linking pthreads (-mt -lpthread). ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags" ;; esac # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) if test "x$GCC" = "xyes"; then : ax_pthread_flags="-pthread -pthreads $ax_pthread_flags" fi # The presence of a feature test macro requesting re-entrant function # definitions is, on some systems, a strong hint that pthreads support is # correctly enabled case $host_os in darwin* | hpux* | linux* | osf* | solaris*) ax_pthread_check_macro="_REENTRANT" ;; aix*) ax_pthread_check_macro="_THREAD_SAFE" ;; *) ax_pthread_check_macro="--" ;; esac if test "x$ax_pthread_check_macro" = "x--"; then : ax_pthread_check_cond=0 else ax_pthread_check_cond="!defined($ax_pthread_check_macro)" fi # Are we compiling with Clang? { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 $as_echo_n "checking whether $CC is Clang... " >&6; } if ${ax_cv_PTHREAD_CLANG+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Note: Clang 2.7 lacks __clang_[a-z]+__ */ # if defined(__clang__) && defined(__llvm__) AX_PTHREAD_CC_IS_CLANG # endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then : ax_cv_PTHREAD_CLANG=yes fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 $as_echo "$ax_cv_PTHREAD_CLANG" >&6; } ax_pthread_clang="$ax_cv_PTHREAD_CLANG" ax_pthread_clang_warning=no # Clang needs special handling, because older versions handle the -pthread # option in a rather... idiosyncratic way if test "x$ax_pthread_clang" = "xyes"; then # Clang takes -pthread; it has never supported any other flag # (Note 1: This will need to be revisited if a system that Clang # supports has POSIX threads in a separate library. This tends not # to be the way of modern systems, but it's conceivable.) # (Note 2: On some systems, notably Darwin, -pthread is not needed # to get POSIX threads support; the API is always present and # active. We could reasonably leave PTHREAD_CFLAGS empty. But # -pthread does define _REENTRANT, and while the Darwin headers # ignore this macro, third-party headers might not.) PTHREAD_CFLAGS="-pthread" PTHREAD_LIBS= ax_pthread_ok=yes # However, older versions of Clang make a point of warning the user # that, in an invocation where only linking and no compilation is # taking place, the -pthread option has no effect ("argument unused # during compilation"). They expect -pthread to be passed in only # when source code is being compiled. # # Problem is, this is at odds with the way Automake and most other # C build frameworks function, which is that the same flags used in # compilation (CFLAGS) are also used in linking. Many systems # supported by AX_PTHREAD require exactly this for POSIX threads # support, and in fact it is often not straightforward to specify a # flag that is used only in the compilation phase and not in # linking. Such a scenario is extremely rare in practice. # # Even though use of the -pthread flag in linking would only print # a warning, this can be a nuisance for well-run software projects # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 $as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one # (.c -> exe), because the warning occurs only in the second # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do if test "x$ax_pthread_try" = "xunknown"; then : break fi CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" ac_link="$ax_pthread_save_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_link="$ax_pthread_2step_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF if ac_fn_c_try_link "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" if test "x$ax_pthread_try" = "x"; then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 $as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; esac fi # $ax_pthread_clang = yes if test "x$ax_pthread_ok" = "xno"; then for ax_pthread_try_flag in $ax_pthread_flags; do case $ax_pthread_try_flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -mt,pthread) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5 $as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; } PTHREAD_CFLAGS="-mt" PTHREAD_LIBS="-lpthread" ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 $as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ax_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 $as_echo "$ax_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ax_pthread_config" = "xno"; then : continue fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 $as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include # if $ax_pthread_check_cond # error "$ax_pthread_check_macro must be defined" # endif static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; } int main () { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xyes"; then : break fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = "xyes"; then ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr = $ax_pthread_attr; return attr /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 $as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ test "x$ax_pthread_joinable_attr_defined" != "xyes"; then : cat >>confdefs.h <<_ACEOF #define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR _ACEOF ax_pthread_joinable_attr_defined=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 $as_echo_n "checking whether more special flags are required for pthreads... " >&6; } if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 $as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ test "x$ax_pthread_special_flags_added" != "xyes"; then : PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 $as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int i = PTHREAD_PRIO_INHERIT; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_PRIO_INHERIT=yes else ax_cv_PTHREAD_PRIO_INHERIT=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 $as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ test "x$ax_pthread_prio_inherit_defined" != "xyes"; then : $as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h ax_pthread_prio_inherit_defined=yes fi CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" # More AIX lossage: compile with *_r variant if test "x$GCC" != "xyes"; then case $host_os in aix*) case "x/$CC" in #( x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : if as_fn_executable_p ${CC}_r; then : PTHREAD_CC="${CC}_r" fi ;; #( *) : for ac_prog in ${CC}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" ;; esac ;; #( *) : ;; esac ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h : else ax_pthread_ok=no as_fn_error $? "GNU Astronomy Utilities Needs POSIX Threads (pthread)" "$LINENO" 5 fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CC="$PTHREAD_CC" # See if the C++ compiler understands `-Qunused-arguments'. AX_PTHREAD adds # puts this option in `PTHREAD_CFLAGS' when the C compiler knows this # option. We then pass it to CFLAGS and CXXFLAGS above. But as reported in # bug #52490, it can happen that sometimes, the C++ compiler doesn't # recognize it. So we need to do a separate check for C++. cxxflags_tmp= for flg in $CXXFLAGS; do if test "$flg" = \-Qunused-arguments; then : ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts -Qunused-arguments" >&5 $as_echo_n "checking whether C++ compiler accepts -Qunused-arguments... " >&6; } if ${ax_cv_check_cxxflags___Qunused_arguments+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CXXFLAGS CXXFLAGS="$CXXFLAGS -Qunused-arguments" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ax_cv_check_cxxflags___Qunused_arguments=yes else ax_cv_check_cxxflags___Qunused_arguments=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXXFLAGS=$ax_check_save_flags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cxxflags___Qunused_arguments" >&5 $as_echo "$ax_cv_check_cxxflags___Qunused_arguments" >&6; } if test "x$ax_cv_check_cxxflags___Qunused_arguments" = xyes; then : cxx_Qunused_arguments=yes; cxxflags_tmp="$cxxflags_tmp $flg" else cxx_Qunused_arguments=no fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else cxxflags_tmp="$cxxflags_tmp $flg" fi done CXXFLAGS="$cxxflags_tmp" # Check if `malloc(0)' returns valid pointer for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* \ | hpux* | solaris* | cygwin* | mingw*) ac_cv_func_malloc_0_nonnull=yes ;; # If we don't know, assume the worst. *) ac_cv_func_malloc_0_nonnull=no ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { char *p = malloc (0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi # Check the size of necessary system specific types. # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 $as_echo_n "checking size of size_t... " >&6; } if ${ac_cv_sizeof_size_t+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : else if test "$ac_cv_type_size_t" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (size_t) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_size_t=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 $as_echo "$ac_cv_sizeof_size_t" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SIZE_T $ac_cv_sizeof_size_t _ACEOF SIZEOF_SIZE_T=$ac_cv_sizeof_size_t cat >>confdefs.h <<_ACEOF #define GAL_CONFIG_SIZEOF_SIZE_T $ac_cv_sizeof_size_t _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF SIZEOF_LONG=$ac_cv_sizeof_long cat >>confdefs.h <<_ACEOF #define GAL_CONFIG_SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # By default we assume no warnings anywarnings=no # Remove any occurance of the current directory `./', `.', or the full # address of the current directory in PATH. The main problem is the # `libtool' executable which Gnuastro builds internally in the top build # directory. However, we also need to know if the system has libtool or # not. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if PATH contains current directory" >&5 $as_echo_n "checking if PATH contains current directory... " >&6; } oldPATH=$PATH currpwd=$(pwd) # The first call to SED will remove any occurance of the current directory: # `./', `.', or the full address. # # NOTE 1: We cannot simply remove all `.'s, because hidden directories # (like the `~/.local' that is suggested for local # installations) will also be altered. # # NOTE 2: An empty string in the list of strings (separated by `:') # means the current directory. This includes cases like: `::', # or a leading and trailing `:'. So after all the removals of # the current directory, we will remove all such cases. # # NOTE 3: The SED separator can be any character immediately after `s', # it doesn't just have to be the commonly used `/'. Since `$pwd' # will possibly contain many `/'s, it is much more easier to use # a differen separator (`|' in this call to SED). PATH=$($as_echo $PATH | $SED -e 's|'"$currpwd"'||g' \ -e 's|\.\.*//*||g' \ -e 's|:\.\.*:|:|g' \ -e 's|\.*$||' \ -e 's|^\.*||' \ -e 's|::*|:|g' \ -e 's|^:||' \ -e 's|:$||' ) if test $oldPATH = $PATH; then : path_warning=no else path_warning=yes; anywarnings=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $path_warning " >&5 $as_echo "$path_warning " >&6; } # Search for necessary libraries. After each library is found, # AC_SEARCH_LIBS adds the -lLIBRARY flag to the LIBS variable which is then # given to all the Makefiles. Each new flag is added to the left of the old # one so order matters here. Note that the LIBS variable is also used in # checking the next libraries, so the linking with their dependent # libraries is done automatically with this order, and we don't have to # explicitly set the dependency flags. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqrt" >&5 $as_echo_n "checking for library containing sqrt... " >&6; } if ${ac_cv_search_sqrt+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqrt (); int main () { return sqrt (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sqrt=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_sqrt+:} false; then : break fi done if ${ac_cv_search_sqrt+:} false; then : else ac_cv_search_sqrt=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqrt" >&5 $as_echo "$ac_cv_search_sqrt" >&6; } ac_res=$ac_cv_search_sqrt if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "C math library not present, cannot continue." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cblas_sdsdot" >&5 $as_echo_n "checking for library containing cblas_sdsdot... " >&6; } if ${ac_cv_search_cblas_sdsdot+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cblas_sdsdot (); int main () { return cblas_sdsdot (); ; return 0; } _ACEOF for ac_lib in '' gslcblas; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_cblas_sdsdot=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_cblas_sdsdot+:} false; then : break fi done if ${ac_cv_search_cblas_sdsdot+:} false; then : else ac_cv_search_cblas_sdsdot=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_cblas_sdsdot" >&5 $as_echo "$ac_cv_search_cblas_sdsdot" >&6; } ac_res=$ac_cv_search_cblas_sdsdot if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "GSL CBLAS not present, cannot continue." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gsl_integration_qng" >&5 $as_echo_n "checking for library containing gsl_integration_qng... " >&6; } if ${ac_cv_search_gsl_integration_qng+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gsl_integration_qng (); int main () { return gsl_integration_qng (); ; return 0; } _ACEOF for ac_lib in '' gsl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gsl_integration_qng=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gsl_integration_qng+:} false; then : break fi done if ${ac_cv_search_gsl_integration_qng+:} false; then : else ac_cv_search_gsl_integration_qng=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gsl_integration_qng" >&5 $as_echo "$ac_cv_search_gsl_integration_qng" >&6; } ac_res=$ac_cv_search_gsl_integration_qng if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "GSL not found, cannot continue." "$LINENO" 5 fi # Since version 0.42, if `libcurl' is installed, CFITSIO will link with it # and thus it will be necessary to explicitly link with libcurl also. If it # doesn't exist on the system, then CFITSIO won't link with it and there is # no problem for Gnuastro either. So there is no need to stop the configure # script if libcurl isn't found. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing curl_global_init" >&5 $as_echo_n "checking for library containing curl_global_init... " >&6; } if ${ac_cv_search_curl_global_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char curl_global_init (); int main () { return curl_global_init (); ; return 0; } _ACEOF for ac_lib in '' curl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_curl_global_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_curl_global_init+:} false; then : break fi done if ${ac_cv_search_curl_global_init+:} false; then : else ac_cv_search_curl_global_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_curl_global_init" >&5 $as_echo "$ac_cv_search_curl_global_init" >&6; } ac_res=$ac_cv_search_curl_global_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ffopen" >&5 $as_echo_n "checking for library containing ffopen... " >&6; } if ${ac_cv_search_ffopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ffopen (); int main () { return ffopen (); ; return 0; } _ACEOF for ac_lib in '' cfitsio; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ffopen=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ffopen+:} false; then : break fi done if ${ac_cv_search_ffopen+:} false; then : else ac_cv_search_ffopen=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ffopen" >&5 $as_echo "$ac_cv_search_ffopen" >&6; } ac_res=$ac_cv_search_ffopen if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "CFITSIO not found, cannot continue." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing wcspih" >&5 $as_echo_n "checking for library containing wcspih... " >&6; } if ${ac_cv_search_wcspih+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char wcspih (); int main () { return wcspih (); ; return 0; } _ACEOF for ac_lib in '' wcs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_wcspih=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_wcspih+:} false; then : break fi done if ${ac_cv_search_wcspih+:} false; then : else ac_cv_search_wcspih=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_wcspih" >&5 $as_echo "$ac_cv_search_wcspih" >&6; } ac_res=$ac_cv_search_wcspih if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "WCSLIB not found, cannot continue." "$LINENO" 5 fi # These are secondary tests for more fine-grained control in libraries that # have already been checked. We don't need to add them to the LIBS # variable, so we are using AC_CHECK_LIB for these tests. # If the WCS library has the `wcslib_version' function. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wcslib_version in -lwcs" >&5 $as_echo_n "checking for wcslib_version in -lwcs... " >&6; } if ${ac_cv_lib_wcs_wcslib_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lwcs -lcfitsio -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char wcslib_version (); int main () { return wcslib_version (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_wcs_wcslib_version=yes else ac_cv_lib_wcs_wcslib_version=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_wcs_wcslib_version" >&5 $as_echo "$ac_cv_lib_wcs_wcslib_version" >&6; } if test "x$ac_cv_lib_wcs_wcslib_version" = xyes; then : has_wcslib_version=1 else has_wcslib_version=0 fi cat >>confdefs.h <<_ACEOF #define GAL_CONFIG_HAVE_WCSLIB_VERSION $has_wcslib_version _ACEOF HAVE_WCSLIB_VERSION=$has_wcslib_version # If the pthreads library has `pthread_barrier_wait'. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_barrier_wait in -lpthread" >&5 $as_echo_n "checking for pthread_barrier_wait in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_barrier_wait+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_barrier_wait (); int main () { return pthread_barrier_wait (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_barrier_wait=yes else ac_cv_lib_pthread_pthread_barrier_wait=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_barrier_wait" >&5 $as_echo "$ac_cv_lib_pthread_pthread_barrier_wait" >&6; } if test "x$ac_cv_lib_pthread_pthread_barrier_wait" = xyes; then : has_pthread_barrier=1 else has_pthread_barrier=0 fi cat >>confdefs.h <<_ACEOF #define GAL_CONFIG_HAVE_PTHREAD_BARRIER $has_pthread_barrier _ACEOF HAVE_PTHREAD_BARRIER=$has_pthread_barrier # Gnulib checks: LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 $as_echo_n "checking for C/C++ restrict keyword... " >&6; } if ${ac_cv_c_restrict+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } int main () { int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 $as_echo "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) $as_echo "#define restrict /**/" >>confdefs.h ;; *) cat >>confdefs.h <<_ACEOF #define restrict $ac_cv_c_restrict _ACEOF ;; esac ac_fn_c_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_clearerr_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_CLEARERR_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_feof_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "ferror_unlocked" "ac_cv_have_decl_ferror_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_ferror_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FERROR_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fflush_unlocked" "ac_cv_have_decl_fflush_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fflush_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FFLUSH_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fgets_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fputc_unlocked" "ac_cv_have_decl_fputc_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fputc_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FPUTC_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fputs_unlocked" "ac_cv_have_decl_fputs_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fputs_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FPUTS_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fread_unlocked" "ac_cv_have_decl_fread_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fread_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FREAD_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fwrite_unlocked" "ac_cv_have_decl_fwrite_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fwrite_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FWRITE_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETC_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "getchar_unlocked" "ac_cv_have_decl_getchar_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_getchar_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETCHAR_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "putc_unlocked" "ac_cv_have_decl_putc_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_putc_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PUTC_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "putchar_unlocked" "ac_cv_have_decl_putchar_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_putchar_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PUTCHAR_UNLOCKED $ac_have_decl _ACEOF for ac_func in $ac_func_list do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" if test "x$ac_cv_have_decl_strerror_r" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRERROR_R $ac_have_decl _ACEOF for ac_func in strerror_r do : ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" if test "x$ac_cv_func_strerror_r" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRERROR_R 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 $as_echo_n "checking whether strerror_r returns char *... " >&6; } if ${ac_cv_func_strerror_r_char_p+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_func_strerror_r_char_p=no if test $ac_cv_have_decl_strerror_r = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); char *p = strerror_r (0, buf, sizeof buf); return !p || x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else # strerror_r is not declared. Choose between # systems that have relatively inaccessible declarations for the # function. BeOS and DEC UNIX 4.0 fall in this category, but the # former has a strerror_r that returns char*, while the latter # has a strerror_r that returns `int'. # This test should segfault on the DEC system. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default extern char *strerror_r (); int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); return ! isalpha (x); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 $as_echo "$ac_cv_func_strerror_r_char_p" >&6; } if test $ac_cv_func_strerror_r_char_p = yes; then $as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h fi XGETTEXT_EXTRA_OPTIONS= GNULIB_BTOWC=0; GNULIB_WCTOB=0; GNULIB_MBSINIT=0; GNULIB_MBRTOWC=0; GNULIB_MBRLEN=0; GNULIB_MBSRTOWCS=0; GNULIB_MBSNRTOWCS=0; GNULIB_WCRTOMB=0; GNULIB_WCSRTOMBS=0; GNULIB_WCSNRTOMBS=0; GNULIB_WCWIDTH=0; GNULIB_WMEMCHR=0; GNULIB_WMEMCMP=0; GNULIB_WMEMCPY=0; GNULIB_WMEMMOVE=0; GNULIB_WMEMSET=0; GNULIB_WCSLEN=0; GNULIB_WCSNLEN=0; GNULIB_WCSCPY=0; GNULIB_WCPCPY=0; GNULIB_WCSNCPY=0; GNULIB_WCPNCPY=0; GNULIB_WCSCAT=0; GNULIB_WCSNCAT=0; GNULIB_WCSCMP=0; GNULIB_WCSNCMP=0; GNULIB_WCSCASECMP=0; GNULIB_WCSNCASECMP=0; GNULIB_WCSCOLL=0; GNULIB_WCSXFRM=0; GNULIB_WCSDUP=0; GNULIB_WCSCHR=0; GNULIB_WCSRCHR=0; GNULIB_WCSCSPN=0; GNULIB_WCSSPN=0; GNULIB_WCSPBRK=0; GNULIB_WCSSTR=0; GNULIB_WCSTOK=0; GNULIB_WCSWIDTH=0; GNULIB_WCSFTIME=0; HAVE_BTOWC=1; HAVE_MBSINIT=1; HAVE_MBRTOWC=1; HAVE_MBRLEN=1; HAVE_MBSRTOWCS=1; HAVE_MBSNRTOWCS=1; HAVE_WCRTOMB=1; HAVE_WCSRTOMBS=1; HAVE_WCSNRTOMBS=1; HAVE_WMEMCHR=1; HAVE_WMEMCMP=1; HAVE_WMEMCPY=1; HAVE_WMEMMOVE=1; HAVE_WMEMSET=1; HAVE_WCSLEN=1; HAVE_WCSNLEN=1; HAVE_WCSCPY=1; HAVE_WCPCPY=1; HAVE_WCSNCPY=1; HAVE_WCPNCPY=1; HAVE_WCSCAT=1; HAVE_WCSNCAT=1; HAVE_WCSCMP=1; HAVE_WCSNCMP=1; HAVE_WCSCASECMP=1; HAVE_WCSNCASECMP=1; HAVE_WCSCOLL=1; HAVE_WCSXFRM=1; HAVE_WCSDUP=1; HAVE_WCSCHR=1; HAVE_WCSRCHR=1; HAVE_WCSCSPN=1; HAVE_WCSSPN=1; HAVE_WCSPBRK=1; HAVE_WCSSTR=1; HAVE_WCSTOK=1; HAVE_WCSWIDTH=1; HAVE_WCSFTIME=1; HAVE_DECL_WCTOB=1; HAVE_DECL_WCWIDTH=1; REPLACE_MBSTATE_T=0; REPLACE_BTOWC=0; REPLACE_WCTOB=0; REPLACE_MBSINIT=0; REPLACE_MBRTOWC=0; REPLACE_MBRLEN=0; REPLACE_MBSRTOWCS=0; REPLACE_MBSNRTOWCS=0; REPLACE_WCRTOMB=0; REPLACE_WCSRTOMBS=0; REPLACE_WCSNRTOMBS=0; REPLACE_WCWIDTH=0; REPLACE_WCSWIDTH=0; REPLACE_WCSFTIME=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether uses 'inline' correctly" >&5 $as_echo_n "checking whether uses 'inline' correctly... " >&6; } if ${gl_cv_header_wchar_h_correct_inline+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_wchar_h_correct_inline=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include extern int zero (void); int main () { return zero(); } _ACEOF save_ac_compile="$ac_compile" ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int zero (void) { return 0; } _ACEOF ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$save_ac_compile" rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5 $as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; } if test $gl_cv_header_wchar_h_correct_inline = no; then as_fn_error $? " cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of , or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } if ${am_cv_langinfo_codeset+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); return !cs; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_langinfo_codeset=yes else am_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 $as_echo "$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 $as_echo_n "checking for a traditional french locale... " >&6; } if ${gt_cv_locale_fr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 $as_echo "$gt_cv_locale_fr" >&6; } LOCALE_FR=$gt_cv_locale_fr { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 $as_echo_n "checking whether // is distinct from /... " >&6; } if ${gl_cv_double_slash_root+:} false; then : $as_echo_n "(cached) " >&6 else if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # . case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 $as_echo "$gl_cv_double_slash_root" >&6; } if test "$gl_cv_double_slash_root" = yes; then $as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 $as_echo_n "checking whether the preprocessor supports include_next... " >&6; } if ${gl_cv_have_include_next+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_have_include_next=yes else CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_have_include_next=buggy else gl_cv_have_include_next=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 $as_echo "$gl_cv_have_include_next" >&6; } PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5 $as_echo_n "checking whether system header files limit the line length... " >&6; } if ${gl_cv_pragma_columns+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __TANDEM choke me #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "choke me" >/dev/null 2>&1; then : gl_cv_pragma_columns=yes else gl_cv_pragma_columns=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5 $as_echo "$gl_cv_pragma_columns" >&6; } if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 $as_echo_n "checking for complete errno.h... " >&6; } if ${gl_cv_header_errno_h_complete+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "booboo" >/dev/null 2>&1; then : gl_cv_header_errno_h_complete=no else gl_cv_header_errno_h_complete=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 $as_echo "$gl_cv_header_errno_h_complete" >&6; } if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else if test $gl_cv_have_include_next = yes; then gl_cv_next_errno_h='<'errno.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_errno_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'errno.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_errno_h gl_cv_next_errno_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 $as_echo "$gl_cv_next_errno_h" >&6; } fi NEXT_ERRNO_H=$gl_cv_next_errno_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'errno.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_errno_h fi NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive ERRNO_H='errno.h' fi if test -n "$ERRNO_H"; then GL_GENERATE_ERRNO_H_TRUE= GL_GENERATE_ERRNO_H_FALSE='#' else GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE= fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 $as_echo_n "checking for EMULTIHOP value... " >&6; } if ${gl_cv_header_errno_h_EMULTIHOP+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EMULTIHOP=yes else gl_cv_header_errno_h_EMULTIHOP=no fi rm -f conftest* if test $gl_cv_header_errno_h_EMULTIHOP = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EMULTIHOP=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 $as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; } case $gl_cv_header_errno_h_EMULTIHOP in yes | no) EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= ;; *) EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" ;; esac fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 $as_echo_n "checking for ENOLINK value... " >&6; } if ${gl_cv_header_errno_h_ENOLINK+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_ENOLINK=yes else gl_cv_header_errno_h_ENOLINK=no fi rm -f conftest* if test $gl_cv_header_errno_h_ENOLINK = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_ENOLINK=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_ENOLINK = hidden; then if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 $as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; } case $gl_cv_header_errno_h_ENOLINK in yes | no) ENOLINK_HIDDEN=0; ENOLINK_VALUE= ;; *) ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" ;; esac fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 $as_echo_n "checking for EOVERFLOW value... " >&6; } if ${gl_cv_header_errno_h_EOVERFLOW+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EOVERFLOW=yes else gl_cv_header_errno_h_EOVERFLOW=no fi rm -f conftest* if test $gl_cv_header_errno_h_EOVERFLOW = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EOVERFLOW=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 $as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; } case $gl_cv_header_errno_h_EOVERFLOW in yes | no) EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= ;; *) EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" ;; esac fi GNULIB_DPRINTF=0; GNULIB_FCLOSE=0; GNULIB_FDOPEN=0; GNULIB_FFLUSH=0; GNULIB_FGETC=0; GNULIB_FGETS=0; GNULIB_FOPEN=0; GNULIB_FPRINTF=0; GNULIB_FPRINTF_POSIX=0; GNULIB_FPURGE=0; GNULIB_FPUTC=0; GNULIB_FPUTS=0; GNULIB_FREAD=0; GNULIB_FREOPEN=0; GNULIB_FSCANF=0; GNULIB_FSEEK=0; GNULIB_FSEEKO=0; GNULIB_FTELL=0; GNULIB_FTELLO=0; GNULIB_FWRITE=0; GNULIB_GETC=0; GNULIB_GETCHAR=0; GNULIB_GETDELIM=0; GNULIB_GETLINE=0; GNULIB_OBSTACK_PRINTF=0; GNULIB_OBSTACK_PRINTF_POSIX=0; GNULIB_PCLOSE=0; GNULIB_PERROR=0; GNULIB_POPEN=0; GNULIB_PRINTF=0; GNULIB_PRINTF_POSIX=0; GNULIB_PUTC=0; GNULIB_PUTCHAR=0; GNULIB_PUTS=0; GNULIB_REMOVE=0; GNULIB_RENAME=0; GNULIB_RENAMEAT=0; GNULIB_SCANF=0; GNULIB_SNPRINTF=0; GNULIB_SPRINTF_POSIX=0; GNULIB_STDIO_H_NONBLOCKING=0; GNULIB_STDIO_H_SIGPIPE=0; GNULIB_TMPFILE=0; GNULIB_VASPRINTF=0; GNULIB_VFSCANF=0; GNULIB_VSCANF=0; GNULIB_VDPRINTF=0; GNULIB_VFPRINTF=0; GNULIB_VFPRINTF_POSIX=0; GNULIB_VPRINTF=0; GNULIB_VPRINTF_POSIX=0; GNULIB_VSNPRINTF=0; GNULIB_VSPRINTF_POSIX=0; HAVE_DECL_FPURGE=1; HAVE_DECL_FSEEKO=1; HAVE_DECL_FTELLO=1; HAVE_DECL_GETDELIM=1; HAVE_DECL_GETLINE=1; HAVE_DECL_OBSTACK_PRINTF=1; HAVE_DECL_SNPRINTF=1; HAVE_DECL_VSNPRINTF=1; HAVE_DPRINTF=1; HAVE_FSEEKO=1; HAVE_FTELLO=1; HAVE_PCLOSE=1; HAVE_POPEN=1; HAVE_RENAMEAT=1; HAVE_VASPRINTF=1; HAVE_VDPRINTF=1; REPLACE_DPRINTF=0; REPLACE_FCLOSE=0; REPLACE_FDOPEN=0; REPLACE_FFLUSH=0; REPLACE_FOPEN=0; REPLACE_FPRINTF=0; REPLACE_FPURGE=0; REPLACE_FREOPEN=0; REPLACE_FSEEK=0; REPLACE_FSEEKO=0; REPLACE_FTELL=0; REPLACE_FTELLO=0; REPLACE_GETDELIM=0; REPLACE_GETLINE=0; REPLACE_OBSTACK_PRINTF=0; REPLACE_PERROR=0; REPLACE_POPEN=0; REPLACE_PRINTF=0; REPLACE_REMOVE=0; REPLACE_RENAME=0; REPLACE_RENAMEAT=0; REPLACE_SNPRINTF=0; REPLACE_SPRINTF=0; REPLACE_STDIO_READ_FUNCS=0; REPLACE_STDIO_WRITE_FUNCS=0; REPLACE_TMPFILE=0; REPLACE_VASPRINTF=0; REPLACE_VDPRINTF=0; REPLACE_VFPRINTF=0; REPLACE_VPRINTF=0; REPLACE_VSNPRINTF=0; REPLACE_VSPRINTF=0; ac_fn_c_check_decl "$LINENO" "getdelim" "ac_cv_have_decl_getdelim" "$ac_includes_default" if test "x$ac_cv_have_decl_getdelim" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETDELIM $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "getline" "ac_cv_have_decl_getline" "$ac_includes_default" if test "x$ac_cv_have_decl_getline" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETLINE $ac_have_decl _ACEOF GNULIB_CHDIR=0; GNULIB_CHOWN=0; GNULIB_CLOSE=0; GNULIB_DUP=0; GNULIB_DUP2=0; GNULIB_DUP3=0; GNULIB_ENVIRON=0; GNULIB_EUIDACCESS=0; GNULIB_FACCESSAT=0; GNULIB_FCHDIR=0; GNULIB_FCHOWNAT=0; GNULIB_FDATASYNC=0; GNULIB_FSYNC=0; GNULIB_FTRUNCATE=0; GNULIB_GETCWD=0; GNULIB_GETDOMAINNAME=0; GNULIB_GETDTABLESIZE=0; GNULIB_GETGROUPS=0; GNULIB_GETHOSTNAME=0; GNULIB_GETLOGIN=0; GNULIB_GETLOGIN_R=0; GNULIB_GETPAGESIZE=0; GNULIB_GETUSERSHELL=0; GNULIB_GROUP_MEMBER=0; GNULIB_ISATTY=0; GNULIB_LCHOWN=0; GNULIB_LINK=0; GNULIB_LINKAT=0; GNULIB_LSEEK=0; GNULIB_PIPE=0; GNULIB_PIPE2=0; GNULIB_PREAD=0; GNULIB_PWRITE=0; GNULIB_READ=0; GNULIB_READLINK=0; GNULIB_READLINKAT=0; GNULIB_RMDIR=0; GNULIB_SETHOSTNAME=0; GNULIB_SLEEP=0; GNULIB_SYMLINK=0; GNULIB_SYMLINKAT=0; GNULIB_TRUNCATE=0; GNULIB_TTYNAME_R=0; GNULIB_UNISTD_H_NONBLOCKING=0; GNULIB_UNISTD_H_SIGPIPE=0; GNULIB_UNLINK=0; GNULIB_UNLINKAT=0; GNULIB_USLEEP=0; GNULIB_WRITE=0; HAVE_CHOWN=1; HAVE_DUP2=1; HAVE_DUP3=1; HAVE_EUIDACCESS=1; HAVE_FACCESSAT=1; HAVE_FCHDIR=1; HAVE_FCHOWNAT=1; HAVE_FDATASYNC=1; HAVE_FSYNC=1; HAVE_FTRUNCATE=1; HAVE_GETDTABLESIZE=1; HAVE_GETGROUPS=1; HAVE_GETHOSTNAME=1; HAVE_GETLOGIN=1; HAVE_GETPAGESIZE=1; HAVE_GROUP_MEMBER=1; HAVE_LCHOWN=1; HAVE_LINK=1; HAVE_LINKAT=1; HAVE_PIPE=1; HAVE_PIPE2=1; HAVE_PREAD=1; HAVE_PWRITE=1; HAVE_READLINK=1; HAVE_READLINKAT=1; HAVE_SETHOSTNAME=1; HAVE_SLEEP=1; HAVE_SYMLINK=1; HAVE_SYMLINKAT=1; HAVE_TRUNCATE=1; HAVE_UNLINKAT=1; HAVE_USLEEP=1; HAVE_DECL_ENVIRON=1; HAVE_DECL_FCHDIR=1; HAVE_DECL_FDATASYNC=1; HAVE_DECL_GETDOMAINNAME=1; HAVE_DECL_GETLOGIN=1; HAVE_DECL_GETLOGIN_R=1; HAVE_DECL_GETPAGESIZE=1; HAVE_DECL_GETUSERSHELL=1; HAVE_DECL_SETHOSTNAME=1; HAVE_DECL_TTYNAME_R=1; HAVE_OS_H=0; HAVE_SYS_PARAM_H=0; REPLACE_CHOWN=0; REPLACE_CLOSE=0; REPLACE_DUP=0; REPLACE_DUP2=0; REPLACE_FACCESSAT=0; REPLACE_FCHOWNAT=0; REPLACE_FTRUNCATE=0; REPLACE_GETCWD=0; REPLACE_GETDOMAINNAME=0; REPLACE_GETDTABLESIZE=0; REPLACE_GETLOGIN_R=0; REPLACE_GETGROUPS=0; REPLACE_GETPAGESIZE=0; REPLACE_ISATTY=0; REPLACE_LCHOWN=0; REPLACE_LINK=0; REPLACE_LINKAT=0; REPLACE_LSEEK=0; REPLACE_PREAD=0; REPLACE_PWRITE=0; REPLACE_READ=0; REPLACE_READLINK=0; REPLACE_READLINKAT=0; REPLACE_RMDIR=0; REPLACE_SLEEP=0; REPLACE_SYMLINK=0; REPLACE_SYMLINKAT=0; REPLACE_TRUNCATE=0; REPLACE_TTYNAME_R=0; REPLACE_UNLINK=0; REPLACE_UNLINKAT=0; REPLACE_USLEEP=0; REPLACE_WRITE=0; UNISTD_H_HAVE_WINSOCK2_H=0; UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_getopt_h='<'getopt.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_getopt_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_getopt_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'getopt.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_getopt_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_getopt_h gl_cv_next_getopt_h='"'$gl_header'"' else gl_cv_next_getopt_h='<'getopt.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5 $as_echo "$gl_cv_next_getopt_h" >&6; } fi NEXT_GETOPT_H=$gl_cv_next_getopt_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'getopt.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_getopt_h fi NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi gl_replace_getopt= if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_header in getopt.h do : ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_H 1 _ACEOF else gl_replace_getopt=yes fi done fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_func in getopt_long_only do : ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only" if test "x$ac_cv_func_getopt_long_only" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_LONG_ONLY 1 _ACEOF else gl_replace_getopt=yes fi done fi if test -z "$gl_replace_getopt"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5 $as_echo_n "checking whether getopt is POSIX compatible... " >&6; } if ${gl_cv_func_getopt_posix+:} false; then : $as_echo_n "(cached) " >&6 else if test $cross_compiling = no; then if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_posix=maybe else gl_cv_func_getopt_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_posix=maybe else gl_cv_func_getopt_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_posix=yes else gl_cv_func_getopt_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5 $as_echo "$gl_cv_func_getopt_posix" >&6; } case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5 $as_echo_n "checking for working GNU getopt function... " >&6; } if ${gl_cv_func_getopt_gnu+:} false; then : $as_echo_n "(cached) " >&6 else # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include #include #include #include #include #include /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include #include static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include #include /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif int main () { int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_gnu=yes else gl_cv_func_getopt_gnu=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi case $gl_had_POSIXLY_CORRECT in exported) ;; yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;; *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5 $as_echo "$gl_cv_func_getopt_gnu" >&6; } if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt_long function" >&5 $as_echo_n "checking for working GNU getopt_long function... " >&6; } if ${gl_cv_func_getopt_long_gnu+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_long_gnu=yes else gl_cv_func_getopt_long_gnu=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_long_gnu" >&5 $as_echo "$gl_cv_func_getopt_long_gnu" >&6; } case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER MicrosoftCompiler #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "MicrosoftCompiler" >/dev/null 2>&1; then : gl_asmext='asm' gl_c_asm_opt='-c -Fa' else gl_asmext='s' gl_c_asm_opt='-S' fi rm -f conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: checking host CPU and C ABI" >&5 $as_echo_n "checking host CPU and C ABI... " >&6; } if ${gl_cv_host_cpu_c_abi+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_cpu" in i[4567]86 ) gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=x86_64-x32 else gl_cv_host_cpu_c_abi=x86_64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else gl_cv_host_cpu_c_abi=i386 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __aarch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=arm64-ilp32 else gl_cv_host_cpu_c_abi=arm64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else # Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1 if LC_ALL=C grep -E 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=hppa64 else gl_cv_host_cpu_c_abi=hppa fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=ia64-ilp32 else gl_cv_host_cpu_c_abi=ia64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=mips64 else # In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIO32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=mipsn32 else gl_cv_host_cpu_c_abi=mips fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=powerpc64-elfv2 else gl_cv_host_cpu_c_abi=powerpc64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else gl_cv_host_cpu_c_abi=powerpc fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=s390x else gl_cv_host_cpu_c_abi=s390 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=sparc64 else gl_cv_host_cpu_c_abi=sparc fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi" >&5 $as_echo "$gl_cv_host_cpu_c_abi" >&6; } HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h <' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_limits_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_limits_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'limits.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_limits_h gl_cv_next_limits_h='"'$gl_header'"' else gl_cv_next_limits_h='<'limits.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5 $as_echo "$gl_cv_next_limits_h" >&6; } fi NEXT_LIMITS_H=$gl_cv_next_limits_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'limits.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_limits_h fi NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has ULLONG_WIDTH etc." >&5 $as_echo_n "checking whether limits.h has ULLONG_WIDTH etc.... " >&6; } if ${gl_cv_header_limits_width+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include int ullw = ULLONG_WIDTH; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_limits_width=yes else gl_cv_header_limits_width=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5 $as_echo "$gl_cv_header_limits_width" >&6; } if test "$gl_cv_header_limits_width" = yes; then LIMITS_H= else LIMITS_H=limits.h fi if test -n "$LIMITS_H"; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 $as_echo_n "checking for wint_t... " >&6; } if ${gt_cv_c_wint_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wint_t=yes else gt_cv_c_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 $as_echo "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then $as_echo "#define HAVE_WINT_T 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5 $as_echo_n "checking whether wint_t is too small... " >&6; } if ${gl_cv_type_wint_t_too_small+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_wint_t_too_small=no else gl_cv_type_wint_t_too_small=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5 $as_echo "$gl_cv_type_wint_t_too_small" >&6; } if test $gl_cv_type_wint_t_too_small = yes; then GNULIB_OVERRIDES_WINT_T=1 else GNULIB_OVERRIDES_WINT_T=0 fi else GNULIB_OVERRIDES_WINT_T=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 $as_echo_n "checking for unsigned long long int... " >&6; } if ${ac_cv_type_unsigned_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_unsigned_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For now, do not test the preprocessor; as of 2007 there are too many implementations with broken preprocessors. Perhaps this can be revisited in 2012. In the meantime, code should not expect #if to work with literals wider than 32 bits. */ /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63; int main () { /* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else ac_cv_type_unsigned_long_long_int=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 $as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } if test $ac_cv_type_unsigned_long_long_int = yes; then $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 $as_echo_n "checking for long long int... " >&6; } if ${ac_cv_type_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef LLONG_MAX # define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif int main () { long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_type_long_long_int=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 $as_echo "$ac_cv_type_long_long_int" >&6; } if test $ac_cv_type_long_long_int = yes; then $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h fi gl_cv_c_multiarch=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi if test $ac_cv_type_long_long_int = yes; then HAVE_LONG_LONG_INT=1 else HAVE_LONG_LONG_INT=0 fi if test $ac_cv_type_unsigned_long_long_int = yes; then HAVE_UNSIGNED_LONG_LONG_INT=1 else HAVE_UNSIGNED_LONG_LONG_INT=0 fi if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_stdint_h='<'stdint.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_stdint_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdint.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdint_h gl_cv_next_stdint_h='"'$gl_header'"' else gl_cv_next_stdint_h='<'stdint.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 $as_echo "$gl_cv_next_stdint_h" >&6; } fi NEXT_STDINT_H=$gl_cv_next_stdint_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdint.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdint_h fi NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi if test $ac_cv_header_stdint_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 $as_echo_n "checking whether stdint.h conforms to C99... " >&6; } if ${gl_cv_header_working_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_working_stdint_h=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in " #endif /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0 / ia64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include #include #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; int main () { const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_header_working_stdint_h=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 $as_echo "$gl_cv_header_working_stdint_h" >&6; } fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 STDINT_H=stdint.h case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h predates C++11" >&5 $as_echo_n "checking whether stdint.h predates C++11... " >&6; } if ${gl_cv_header_stdint_predates_cxx11_h+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_stdint_predates_cxx11_h=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_predates_cxx11_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_predates_cxx11_h" >&5 $as_echo "$gl_cv_header_stdint_predates_cxx11_h" >&6; } if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then $as_echo "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h $as_echo "#define __STDC_LIMIT_MACROS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5 $as_echo_n "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; } if ${gl_cv_header_stdint_width+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_stdint_width=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif int iw = UINTMAX_WIDTH; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_width=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5 $as_echo "$gl_cv_header_stdint_width" >&6; } if test "$gl_cv_header_stdint_width" = yes; then STDINT_H= fi ;; *) for ac_header in sys/inttypes.h sys/bitypes.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 $as_echo_n "checking for bit size of $gltype... " >&6; } if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include "; then : else result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` cat >>confdefs.h <<_ACEOF #define BITSIZEOF_${GLTYPE} $result _ACEOF eval BITSIZEOF_${GLTYPE}=\$result done fi for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 $as_echo_n "checking for bit size of $gltype... " >&6; } if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include "; then : else result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` cat >>confdefs.h <<_ACEOF #define BITSIZEOF_${GLTYPE} $result _ACEOF eval BITSIZEOF_${GLTYPE}=\$result done for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 $as_echo_n "checking whether $gltype is signed... " >&6; } if eval \${gl_cv_type_${gltype}_signed+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : result=yes else result=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval gl_cv_type_${gltype}_signed=\$result fi eval ac_res=\$gl_cv_type_${gltype}_signed { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_SIGNED_${GLTYPE} 1 _ACEOF eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 $as_echo_n "checking for $gltype integer literal suffix... " >&6; } if eval \${gl_cv_type_${gltype}_suffix+:} false; then : $as_echo_n "(cached) " >&6 else eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif extern $gltype foo; extern $gltype1 foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result cat >>confdefs.h <<_ACEOF #define ${GLTYPE}_SUFFIX $result _ACEOF done fi for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 $as_echo_n "checking for $gltype integer literal suffix... " >&6; } if eval \${gl_cv_type_${gltype}_suffix+:} false; then : $as_echo_n "(cached) " >&6 else eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif extern $gltype foo; extern $gltype1 foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result cat >>confdefs.h <<_ACEOF #define ${GLTYPE}_SUFFIX $result _ACEOF done if test $GNULIB_OVERRIDES_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ;; esac LIMITS_H=limits.h if test -n "$LIMITS_H"; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi if test -n "$STDINT_H"; then GL_GENERATE_STDINT_H_TRUE= GL_GENERATE_STDINT_H_FALSE='#' else GL_GENERATE_STDINT_H_TRUE='#' GL_GENERATE_STDINT_H_FALSE= fi GNULIB_IMAXABS=0; GNULIB_IMAXDIV=0; GNULIB_STRTOIMAX=0; GNULIB_STRTOUMAX=0; HAVE_DECL_IMAXABS=1; HAVE_DECL_IMAXDIV=1; HAVE_DECL_STRTOIMAX=1; HAVE_DECL_STRTOUMAX=1; REPLACE_STRTOIMAX=0; REPLACE_STRTOUMAX=0; INT32_MAX_LT_INTMAX_MAX=1; INT64_MAX_EQ_LONG_MAX='defined _LP64'; PRI_MACROS_BROKEN=0; PRIPTR_PREFIX=__PRIPTR_PREFIX; UINT32_MAX_LT_UINTMAX_MAX=1; UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; if test $gl_cv_have_include_next = yes; then gl_cv_next_inttypes_h='<'inttypes.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_inttypes_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_inttypes_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'inttypes.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_inttypes_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_inttypes_h gl_cv_next_inttypes_h='"'$gl_header'"' else gl_cv_next_inttypes_h='<'inttypes.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5 $as_echo "$gl_cv_next_inttypes_h" >&6; } fi NEXT_INTTYPES_H=$gl_cv_next_inttypes_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'inttypes.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_inttypes_h fi NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive for gl_func in imaxabs imaxdiv strtoimax strtoumax; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done for ac_header in inttypes.h do : ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_inttypes_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H 1 _ACEOF fi done if test $ac_cv_header_inttypes_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 $as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } if ${gt_cv_inttypes_pri_broken+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef PRId32 char *p = PRId32; #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_inttypes_pri_broken=no else gt_cv_inttypes_pri_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 $as_echo "$gt_cv_inttypes_pri_broken" >&6; } fi if test "$gt_cv_inttypes_pri_broken" = yes; then cat >>confdefs.h <<_ACEOF #define PRI_MACROS_BROKEN 1 _ACEOF PRI_MACROS_BROKEN=1 else PRI_MACROS_BROKEN=0 fi GNULIB_ISWBLANK=0; GNULIB_WCTYPE=0; GNULIB_ISWCTYPE=0; GNULIB_WCTRANS=0; GNULIB_TOWCTRANS=0; HAVE_ISWBLANK=1; HAVE_WCTYPE_T=1; HAVE_WCTRANS_T=1; REPLACE_ISWBLANK=0; if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi if test $ac_cv_func_iswcntrl = yes; then HAVE_ISWCNTRL=1 else HAVE_ISWCNTRL=0 fi if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_wctype_h='<'wctype.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_wctype_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_wctype_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'wctype.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_wctype_h gl_cv_next_wctype_h='"'$gl_header'"' else gl_cv_next_wctype_h='<'wctype.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5 $as_echo "$gl_cv_next_wctype_h" >&6; } fi NEXT_WCTYPE_H=$gl_cv_next_wctype_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'wctype.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_wctype_h fi NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5 $as_echo_n "checking whether iswcntrl works... " >&6; } if ${gl_cv_func_iswcntrl_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_iswcntrl_works="guessing yes" else gl_cv_func_iswcntrl_works="guessing no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #include int main () { return iswprint ('x') == 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_iswcntrl_works=yes else gl_cv_func_iswcntrl_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5 $as_echo "$gl_cv_func_iswcntrl_works" >&6; } fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi case "$gl_cv_func_iswcntrl_works" in *yes) REPLACE_ISWCNTRL=0 ;; *) REPLACE_ISWCNTRL=1 ;; esac if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : fi if test $REPLACE_ISWCNTRL = 1; then REPLACE_TOWLOWER=1 else for ac_func in towlower do : ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower" if test "x$ac_cv_func_towlower" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TOWLOWER 1 _ACEOF fi done if test $ac_cv_func_towlower = yes; then REPLACE_TOWLOWER=0 else ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "/* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #if HAVE_WCTYPE_H # include #endif " if test "x$ac_cv_have_decl_towlower" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_TOWLOWER $ac_have_decl _ACEOF if test $ac_cv_have_decl_towlower = yes; then REPLACE_TOWLOWER=1 else REPLACE_TOWLOWER=0 fi fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5 $as_echo_n "checking for wctype_t... " >&6; } if ${gl_cv_type_wctype_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #if HAVE_WCTYPE_H # include #endif wctype_t a; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_wctype_t=yes else gl_cv_type_wctype_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5 $as_echo "$gl_cv_type_wctype_t" >&6; } if test $gl_cv_type_wctype_t = no; then HAVE_WCTYPE_T=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5 $as_echo_n "checking for wctrans_t... " >&6; } if ${gl_cv_type_wctrans_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #include wctrans_t a; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_wctrans_t=yes else gl_cv_type_wctrans_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5 $as_echo "$gl_cv_type_wctrans_t" >&6; } if test $gl_cv_type_wctrans_t = no; then HAVE_WCTRANS_T=0 fi for gl_func in wctype iswctype wctrans towctrans ; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # include #endif #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done GNULIB_NL_LANGINFO=0; HAVE_NL_LANGINFO=1; REPLACE_NL_LANGINFO=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 $as_echo_n "checking for working fcntl.h... " >&6; } if ${gl_cv_header_working_fcntl_h+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_UNISTD_H # include #else /* on Windows with MSVC */ # include # include # defined sleep(n) _sleep ((n) * 1000) #endif #include #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; int main () { int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_header_working_fcntl_h=yes else case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 $as_echo "$gl_cv_header_working_fcntl_h" >&6; } case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac cat >>confdefs.h <<_ACEOF #define HAVE_WORKING_O_NOATIME $ac_val _ACEOF case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac cat >>confdefs.h <<_ACEOF #define HAVE_WORKING_O_NOFOLLOW $ac_val _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5 $as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; } if ${ac_cv_gnu_library_2_1+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif #ifdef __UCLIBC__ Lucky user #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky" >/dev/null 2>&1; then : ac_cv_gnu_library_2_1=yes else ac_cv_gnu_library_2_1=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 $as_echo "$ac_cv_gnu_library_2_1" >&6; } GLIBC21="$ac_cv_gnu_library_2_1" GNULIB_LOCALECONV=0; GNULIB_SETLOCALE=0; GNULIB_DUPLOCALE=0; HAVE_DUPLOCALE=1; REPLACE_LOCALECONV=0; REPLACE_SETLOCALE=0; REPLACE_DUPLOCALE=0; REPLACE_STRUCT_LCONV=0; REPLACE_NULL=0; HAVE_MAX_ALIGN_T=1; HAVE_WCHAR_T=1; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 $as_echo_n "checking for wchar_t... " >&6; } if ${gt_cv_c_wchar_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wchar_t=yes else gt_cv_c_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 $as_echo "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h fi STDDEF_H= ac_fn_c_check_type "$LINENO" "max_align_t" "ac_cv_type_max_align_t" "#include " if test "x$ac_cv_type_max_align_t" = xyes; then : else HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 $as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } if ${gl_cv_decl_null_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int test[2 * (sizeof NULL == sizeof (void *)) -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_decl_null_works=yes else gl_cv_decl_null_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 $as_echo "$gl_cv_decl_null_works" >&6; } if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi if test -n "$STDDEF_H"; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= fi if test -n "$STDDEF_H"; then if test $gl_cv_have_include_next = yes; then gl_cv_next_stddef_h='<'stddef.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stddef_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stddef_h gl_cv_next_stddef_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 $as_echo "$gl_cv_next_stddef_h" >&6; } fi NEXT_STDDEF_H=$gl_cv_next_stddef_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stddef.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stddef_h fi NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive fi if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 $as_echo_n "checking for ld... " >&6; } elif test "$GCC" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test -n "$LD"; then # Let the user override the test with a path. : else if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in *" -b64 "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; sparc64-*-netbsd*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else # The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in *" -m elf32_sparc "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; esac fi LD="$acl_cv_path_LD" fi if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 $as_echo_n "checking for the common suffixes of directories in the library search path... " >&6; } if ${acl_cv_libdirstems+:} false; then : $as_echo_n "(cached) " >&6 else acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) case "$gl_cv_host_cpu_c_abi" in i386 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | s390 | sparc) ;; *) # x86_64 | arm64 | hppa64 | ia64 | mips64 | powerpc64* | s390x | sparc64 | ... searchpath=`(if test -f /usr/bin/gcc \ && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ LC_ALL=C /usr/bin/gcc -print-search-dirs; \ else \ LC_ALL=C $CC -print-search-dirs; \ fi) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 $as_echo "$acl_cv_libdirstems" >&6; } # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 $as_echo_n "checking whether imported symbols can be declared weak... " >&6; } if ${gl_cv_have_weak+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main () { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : gl_cv_have_weak="guessing yes" else gl_cv_have_weak="guessing no" fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_have_weak=yes else gl_cv_have_weak=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 $as_echo "$gl_cv_have_weak" >&6; } if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes; then : gl_have_pthread_h=yes else gl_have_pthread_h=no fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads gl_have_pthread= # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include pthread_mutex_t m; pthread_mutexattr_t ma; int main () { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_pthread=yes LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$save_LIBS test -n "$gl_have_pthread" && break done # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 $as_echo_n "checking for pthread_kill in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_kill=yes else ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 $as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) $as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi elif test -z "$gl_have_pthread"; then # Some library is needed. Try libpthread and libc_r. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 $as_echo_n "checking for pthread_kill in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_kill=yes else ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 $as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : gl_have_pthread=yes LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread fi if test -z "$gl_have_pthread"; then # For FreeBSD 4. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 $as_echo_n "checking for pthread_kill in -lc_r... " >&6; } if ${ac_cv_lib_c_r_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_kill=yes else ac_cv_lib_c_r_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 $as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then : gl_have_pthread=yes LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r fi fi fi if test -n "$gl_have_pthread"; then gl_threads_api=posix $as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then $as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi fi fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then gl_have_solaristhread= gl_save_LIBS="$LIBS" LIBS="$LIBS -lthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { thr_self(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_solaristhread=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" if test -n "$gl_have_solaristhread"; then gl_threads_api=solaris LIBTHREAD=-lthread LTLIBTHREAD=-lthread LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" $as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then $as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi fi fi if test "$gl_use_threads" = pth; then gl_save_CPPFLAGS="$CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 $as_echo_n "checking how to link with libpth... " >&6; } if ${ac_cv_libpth_libs+:} false; then : $as_echo_n "(cached) " >&6 else use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libpth-prefix was given. if test "${with_libpth_prefix+set}" = set; then : withval=$with_libpth_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBPTH= LTLIBPTH= INCPTH= LIBPTH_PREFIX= HAVE_LIBPTH= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='pth ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a" else LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'pth'; then LIBPTH_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'pth'; then LIBPTH_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBPTH="${LIBPTH}${LIBPTH:+ }$dep" LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep" ;; esac done fi else LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir" done fi ac_cv_libpth_libs="$LIBPTH" ac_cv_libpth_ltlibs="$LTLIBPTH" ac_cv_libpth_cppflags="$INCPTH" ac_cv_libpth_prefix="$LIBPTH_PREFIX" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 $as_echo "$ac_cv_libpth_libs" >&6; } LIBPTH="$ac_cv_libpth_libs" LTLIBPTH="$ac_cv_libpth_ltlibs" INCPTH="$ac_cv_libpth_cppflags" LIBPTH_PREFIX="$ac_cv_libpth_prefix" for element in $INCPTH; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done HAVE_LIBPTH=yes gl_have_pth= gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBPTH" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pth_self(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_pth=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" if test -n "$gl_have_pth"; then gl_threads_api=pth LIBTHREAD="$LIBPTH" LTLIBTHREAD="$LTLIBPTH" LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" $as_echo "#define USE_PTH_THREADS 1" >>confdefs.h if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then $as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi else CPPFLAGS="$gl_save_CPPFLAGS" fi fi if test -z "$gl_have_pthread"; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows $as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h fi ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 $as_echo_n "checking for multithread API to use... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 $as_echo "$gl_threads_api" >&6; } GNULIB__EXIT=0; GNULIB_ATOLL=0; GNULIB_CALLOC_POSIX=0; GNULIB_CANONICALIZE_FILE_NAME=0; GNULIB_GETLOADAVG=0; GNULIB_GETSUBOPT=0; GNULIB_GRANTPT=0; GNULIB_MALLOC_POSIX=0; GNULIB_MBTOWC=0; GNULIB_MKDTEMP=0; GNULIB_MKOSTEMP=0; GNULIB_MKOSTEMPS=0; GNULIB_MKSTEMP=0; GNULIB_MKSTEMPS=0; GNULIB_POSIX_OPENPT=0; GNULIB_PTSNAME=0; GNULIB_PTSNAME_R=0; GNULIB_PUTENV=0; GNULIB_QSORT_R=0; GNULIB_RANDOM=0; GNULIB_RANDOM_R=0; GNULIB_REALLOCARRAY=0; GNULIB_REALLOC_POSIX=0; GNULIB_REALPATH=0; GNULIB_RPMATCH=0; GNULIB_SECURE_GETENV=0; GNULIB_SETENV=0; GNULIB_STRTOD=0; GNULIB_STRTOLL=0; GNULIB_STRTOULL=0; GNULIB_SYSTEM_POSIX=0; GNULIB_UNLOCKPT=0; GNULIB_UNSETENV=0; GNULIB_WCTOMB=0; HAVE__EXIT=1; HAVE_ATOLL=1; HAVE_CANONICALIZE_FILE_NAME=1; HAVE_DECL_GETLOADAVG=1; HAVE_GETSUBOPT=1; HAVE_GRANTPT=1; HAVE_DECL_INITSTATE=1; HAVE_MKDTEMP=1; HAVE_MKOSTEMP=1; HAVE_MKOSTEMPS=1; HAVE_MKSTEMP=1; HAVE_MKSTEMPS=1; HAVE_POSIX_OPENPT=1; HAVE_PTSNAME=1; HAVE_PTSNAME_R=1; HAVE_QSORT_R=1; HAVE_RANDOM=1; HAVE_RANDOM_H=1; HAVE_RANDOM_R=1; HAVE_REALLOCARRAY=1; HAVE_REALPATH=1; HAVE_RPMATCH=1; HAVE_SECURE_GETENV=1; HAVE_SETENV=1; HAVE_DECL_SETENV=1; HAVE_DECL_SETSTATE=1; HAVE_STRTOD=1; HAVE_STRTOLL=1; HAVE_STRTOULL=1; HAVE_STRUCT_RANDOM_DATA=1; HAVE_SYS_LOADAVG_H=0; HAVE_UNLOCKPT=1; HAVE_DECL_UNSETENV=1; REPLACE_CALLOC=0; REPLACE_CANONICALIZE_FILE_NAME=0; REPLACE_MALLOC=0; REPLACE_MBTOWC=0; REPLACE_MKSTEMP=0; REPLACE_PTSNAME=0; REPLACE_PTSNAME_R=0; REPLACE_PUTENV=0; REPLACE_QSORT_R=0; REPLACE_RANDOM_R=0; REPLACE_REALLOC=0; REPLACE_REALPATH=0; REPLACE_SETENV=0; REPLACE_STRTOD=0; REPLACE_UNSETENV=0; REPLACE_WCTOMB=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5 $as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; } if ${gl_cv_func_malloc_posix+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_malloc_posix=yes else gl_cv_func_malloc_posix=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 $as_echo "$gl_cv_func_malloc_posix" >&6; } GNULIB_ACOSF=0; GNULIB_ACOSL=0; GNULIB_ASINF=0; GNULIB_ASINL=0; GNULIB_ATANF=0; GNULIB_ATANL=0; GNULIB_ATAN2F=0; GNULIB_CBRT=0; GNULIB_CBRTF=0; GNULIB_CBRTL=0; GNULIB_CEIL=0; GNULIB_CEILF=0; GNULIB_CEILL=0; GNULIB_COPYSIGN=0; GNULIB_COPYSIGNF=0; GNULIB_COPYSIGNL=0; GNULIB_COSF=0; GNULIB_COSL=0; GNULIB_COSHF=0; GNULIB_EXPF=0; GNULIB_EXPL=0; GNULIB_EXP2=0; GNULIB_EXP2F=0; GNULIB_EXP2L=0; GNULIB_EXPM1=0; GNULIB_EXPM1F=0; GNULIB_EXPM1L=0; GNULIB_FABSF=0; GNULIB_FABSL=0; GNULIB_FLOOR=0; GNULIB_FLOORF=0; GNULIB_FLOORL=0; GNULIB_FMA=0; GNULIB_FMAF=0; GNULIB_FMAL=0; GNULIB_FMOD=0; GNULIB_FMODF=0; GNULIB_FMODL=0; GNULIB_FREXPF=0; GNULIB_FREXP=0; GNULIB_FREXPL=0; GNULIB_HYPOT=0; GNULIB_HYPOTF=0; GNULIB_HYPOTL=0; GNULIB_ILOGB=0; GNULIB_ILOGBF=0; GNULIB_ILOGBL=0; GNULIB_ISFINITE=0; GNULIB_ISINF=0; GNULIB_ISNAN=0; GNULIB_ISNANF=0; GNULIB_ISNAND=0; GNULIB_ISNANL=0; GNULIB_LDEXPF=0; GNULIB_LDEXPL=0; GNULIB_LOG=0; GNULIB_LOGF=0; GNULIB_LOGL=0; GNULIB_LOG10=0; GNULIB_LOG10F=0; GNULIB_LOG10L=0; GNULIB_LOG1P=0; GNULIB_LOG1PF=0; GNULIB_LOG1PL=0; GNULIB_LOG2=0; GNULIB_LOG2F=0; GNULIB_LOG2L=0; GNULIB_LOGB=0; GNULIB_LOGBF=0; GNULIB_LOGBL=0; GNULIB_MODF=0; GNULIB_MODFF=0; GNULIB_MODFL=0; GNULIB_POWF=0; GNULIB_REMAINDER=0; GNULIB_REMAINDERF=0; GNULIB_REMAINDERL=0; GNULIB_RINT=0; GNULIB_RINTF=0; GNULIB_RINTL=0; GNULIB_ROUND=0; GNULIB_ROUNDF=0; GNULIB_ROUNDL=0; GNULIB_SIGNBIT=0; GNULIB_SINF=0; GNULIB_SINL=0; GNULIB_SINHF=0; GNULIB_SQRTF=0; GNULIB_SQRTL=0; GNULIB_TANF=0; GNULIB_TANL=0; GNULIB_TANHF=0; GNULIB_TRUNC=0; GNULIB_TRUNCF=0; GNULIB_TRUNCL=0; HAVE_ACOSF=1; HAVE_ACOSL=1; HAVE_ASINF=1; HAVE_ASINL=1; HAVE_ATANF=1; HAVE_ATANL=1; HAVE_ATAN2F=1; HAVE_CBRT=1; HAVE_CBRTF=1; HAVE_CBRTL=1; HAVE_COPYSIGN=1; HAVE_COPYSIGNL=1; HAVE_COSF=1; HAVE_COSL=1; HAVE_COSHF=1; HAVE_EXPF=1; HAVE_EXPL=1; HAVE_EXPM1=1; HAVE_EXPM1F=1; HAVE_FABSF=1; HAVE_FABSL=1; HAVE_FMA=1; HAVE_FMAF=1; HAVE_FMAL=1; HAVE_FMODF=1; HAVE_FMODL=1; HAVE_FREXPF=1; HAVE_HYPOTF=1; HAVE_HYPOTL=1; HAVE_ILOGB=1; HAVE_ILOGBF=1; HAVE_ILOGBL=1; HAVE_ISNANF=1; HAVE_ISNAND=1; HAVE_ISNANL=1; HAVE_LDEXPF=1; HAVE_LOGF=1; HAVE_LOGL=1; HAVE_LOG10F=1; HAVE_LOG10L=1; HAVE_LOG1P=1; HAVE_LOG1PF=1; HAVE_LOG1PL=1; HAVE_LOGBF=1; HAVE_LOGBL=1; HAVE_MODFF=1; HAVE_MODFL=1; HAVE_POWF=1; HAVE_REMAINDER=1; HAVE_REMAINDERF=1; HAVE_RINT=1; HAVE_RINTL=1; HAVE_SINF=1; HAVE_SINL=1; HAVE_SINHF=1; HAVE_SQRTF=1; HAVE_SQRTL=1; HAVE_TANF=1; HAVE_TANL=1; HAVE_TANHF=1; HAVE_DECL_ACOSL=1; HAVE_DECL_ASINL=1; HAVE_DECL_ATANL=1; HAVE_DECL_CBRTF=1; HAVE_DECL_CBRTL=1; HAVE_DECL_CEILF=1; HAVE_DECL_CEILL=1; HAVE_DECL_COPYSIGNF=1; HAVE_DECL_COSL=1; HAVE_DECL_EXPL=1; HAVE_DECL_EXP2=1; HAVE_DECL_EXP2F=1; HAVE_DECL_EXP2L=1; HAVE_DECL_EXPM1L=1; HAVE_DECL_FLOORF=1; HAVE_DECL_FLOORL=1; HAVE_DECL_FREXPL=1; HAVE_DECL_LDEXPL=1; HAVE_DECL_LOGL=1; HAVE_DECL_LOG10L=1; HAVE_DECL_LOG2=1; HAVE_DECL_LOG2F=1; HAVE_DECL_LOG2L=1; HAVE_DECL_LOGB=1; HAVE_DECL_REMAINDER=1; HAVE_DECL_REMAINDERL=1; HAVE_DECL_RINTF=1; HAVE_DECL_ROUND=1; HAVE_DECL_ROUNDF=1; HAVE_DECL_ROUNDL=1; HAVE_DECL_SINL=1; HAVE_DECL_SQRTL=1; HAVE_DECL_TANL=1; HAVE_DECL_TRUNC=1; HAVE_DECL_TRUNCF=1; HAVE_DECL_TRUNCL=1; REPLACE_ACOSF=0; REPLACE_ASINF=0; REPLACE_ATANF=0; REPLACE_ATAN2F=0; REPLACE_CBRTF=0; REPLACE_CBRTL=0; REPLACE_CEIL=0; REPLACE_CEILF=0; REPLACE_CEILL=0; REPLACE_COSF=0; REPLACE_COSHF=0; REPLACE_EXPF=0; REPLACE_EXPM1=0; REPLACE_EXPM1F=0; REPLACE_EXP2=0; REPLACE_EXP2L=0; REPLACE_FABSL=0; REPLACE_FLOOR=0; REPLACE_FLOORF=0; REPLACE_FLOORL=0; REPLACE_FMA=0; REPLACE_FMAF=0; REPLACE_FMAL=0; REPLACE_FMOD=0; REPLACE_FMODF=0; REPLACE_FMODL=0; REPLACE_FREXPF=0; REPLACE_FREXP=0; REPLACE_FREXPL=0; REPLACE_HUGE_VAL=0; REPLACE_HYPOT=0; REPLACE_HYPOTF=0; REPLACE_HYPOTL=0; REPLACE_ILOGB=0; REPLACE_ILOGBF=0; REPLACE_ILOGBL=0; REPLACE_ISFINITE=0; REPLACE_ISINF=0; REPLACE_ISNAN=0; REPLACE_LDEXPL=0; REPLACE_LOG=0; REPLACE_LOGF=0; REPLACE_LOGL=0; REPLACE_LOG10=0; REPLACE_LOG10F=0; REPLACE_LOG10L=0; REPLACE_LOG1P=0; REPLACE_LOG1PF=0; REPLACE_LOG1PL=0; REPLACE_LOG2=0; REPLACE_LOG2F=0; REPLACE_LOG2L=0; REPLACE_LOGB=0; REPLACE_LOGBF=0; REPLACE_LOGBL=0; REPLACE_MODF=0; REPLACE_MODFF=0; REPLACE_MODFL=0; REPLACE_NAN=0; REPLACE_REMAINDER=0; REPLACE_REMAINDERF=0; REPLACE_REMAINDERL=0; REPLACE_ROUND=0; REPLACE_ROUNDF=0; REPLACE_ROUNDL=0; REPLACE_SIGNBIT=0; REPLACE_SIGNBIT_USING_GCC=0; REPLACE_SINF=0; REPLACE_SINHF=0; REPLACE_SQRTF=0; REPLACE_SQRTL=0; REPLACE_TANF=0; REPLACE_TANHF=0; REPLACE_TRUNC=0; REPLACE_TRUNCF=0; REPLACE_TRUNCL=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 $as_echo_n "checking for mbstate_t... " >&6; } if ${ac_cv_type_mbstate_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { mbstate_t x; return sizeof x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_mbstate_t=yes else ac_cv_type_mbstate_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 $as_echo "$ac_cv_type_mbstate_t" >&6; } if test $ac_cv_type_mbstate_t = yes; then $as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h else $as_echo "#define mbstate_t int" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 $as_echo_n "checking for a traditional japanese locale... " >&6; } if ${gt_cv_locale_ja+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 $as_echo "$gt_cv_locale_ja" >&6; } LOCALE_JA=$gt_cv_locale_ja { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 $as_echo_n "checking for a transitional chinese locale... " >&6; } if ${gt_cv_locale_zh_CN+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 $as_echo "$gt_cv_locale_zh_CN" >&6; } LOCALE_ZH_CN=$gt_cv_locale_zh_CN { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 $as_echo_n "checking for a french Unicode locale... " >&6; } if ${gt_cv_locale_fr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 $as_echo "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 GNULIB_EXPLICIT_BZERO=0; GNULIB_FFSL=0; GNULIB_FFSLL=0; GNULIB_MEMCHR=0; GNULIB_MEMMEM=0; GNULIB_MEMPCPY=0; GNULIB_MEMRCHR=0; GNULIB_RAWMEMCHR=0; GNULIB_STPCPY=0; GNULIB_STPNCPY=0; GNULIB_STRCHRNUL=0; GNULIB_STRDUP=0; GNULIB_STRNCAT=0; GNULIB_STRNDUP=0; GNULIB_STRNLEN=0; GNULIB_STRPBRK=0; GNULIB_STRSEP=0; GNULIB_STRSTR=0; GNULIB_STRCASESTR=0; GNULIB_STRTOK_R=0; GNULIB_MBSLEN=0; GNULIB_MBSNLEN=0; GNULIB_MBSCHR=0; GNULIB_MBSRCHR=0; GNULIB_MBSSTR=0; GNULIB_MBSCASECMP=0; GNULIB_MBSNCASECMP=0; GNULIB_MBSPCASECMP=0; GNULIB_MBSCASESTR=0; GNULIB_MBSCSPN=0; GNULIB_MBSPBRK=0; GNULIB_MBSSPN=0; GNULIB_MBSSEP=0; GNULIB_MBSTOK_R=0; GNULIB_STRERROR=0; GNULIB_STRERROR_R=0; GNULIB_STRSIGNAL=0; GNULIB_STRVERSCMP=0; HAVE_MBSLEN=0; HAVE_EXPLICIT_BZERO=1; HAVE_FFSL=1; HAVE_FFSLL=1; HAVE_MEMCHR=1; HAVE_DECL_MEMMEM=1; HAVE_MEMPCPY=1; HAVE_DECL_MEMRCHR=1; HAVE_RAWMEMCHR=1; HAVE_STPCPY=1; HAVE_STPNCPY=1; HAVE_STRCHRNUL=1; HAVE_DECL_STRDUP=1; HAVE_DECL_STRNDUP=1; HAVE_DECL_STRNLEN=1; HAVE_STRPBRK=1; HAVE_STRSEP=1; HAVE_STRCASESTR=1; HAVE_DECL_STRTOK_R=1; HAVE_DECL_STRERROR_R=1; HAVE_DECL_STRSIGNAL=1; HAVE_STRVERSCMP=1; REPLACE_MEMCHR=0; REPLACE_MEMMEM=0; REPLACE_STPNCPY=0; REPLACE_STRCHRNUL=0; REPLACE_STRDUP=0; REPLACE_STRNCAT=0; REPLACE_STRNDUP=0; REPLACE_STRNLEN=0; REPLACE_STRSTR=0; REPLACE_STRCASESTR=0; REPLACE_STRTOK_R=0; REPLACE_STRERROR=0; REPLACE_STRERROR_R=0; REPLACE_STRSIGNAL=0; UNDEFINE_STRTOK_R=0; # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" if test "x$ac_cv_func_mmap" = xyes; then : gl_have_mmap=yes else gl_have_mmap=no fi # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 $as_echo_n "checking for MAP_ANONYMOUS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANONYMOUS I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : gl_have_mmap_anonymous=yes fi rm -f conftest* if test $gl_have_mmap_anonymous != yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANON I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : $as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h gl_have_mmap_anonymous=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 $as_echo "$gl_have_mmap_anonymous" >&6; } if test $gl_have_mmap_anonymous = yes; then $as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h fi fi if test $HAVE_MEMCHR = 1; then # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # https://bugzilla.redhat.com/show_bug.cgi?id=499689 # memchr should not dereference overestimated length after a match # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 # Assume that memchr works on platforms that lack mprotect. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5 $as_echo_n "checking whether memchr works... " >&6; } if ${gl_cv_func_memchr_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_memchr_works="guessing yes" ;; # Be pessimistic for now. *) gl_cv_func_memchr_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_SYS_MMAN_H # include # include # include # include # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif int main () { int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_memchr_works=yes else gl_cv_func_memchr_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5 $as_echo "$gl_cv_func_memchr_works" >&6; } case "$gl_cv_func_memchr_works" in *yes) ;; *) REPLACE_MEMCHR=1 ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether defines MIN and MAX" >&5 $as_echo_n "checking whether defines MIN and MAX... " >&6; } if ${gl_cv_minmax_in_limits_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int x = MIN (42, 17); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_minmax_in_limits_h=yes else gl_cv_minmax_in_limits_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_limits_h" >&5 $as_echo "$gl_cv_minmax_in_limits_h" >&6; } if test $gl_cv_minmax_in_limits_h = yes; then $as_echo "#define HAVE_MINMAX_IN_LIMITS_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether defines MIN and MAX" >&5 $as_echo_n "checking whether defines MIN and MAX... " >&6; } if ${gl_cv_minmax_in_sys_param_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int x = MIN (42, 17); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_minmax_in_sys_param_h=yes else gl_cv_minmax_in_sys_param_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_sys_param_h" >&5 $as_echo "$gl_cv_minmax_in_sys_param_h" >&6; } if test $gl_cv_minmax_in_sys_param_h = yes; then $as_echo "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h fi if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 $as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi ac_fn_c_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" if test "x$ac_cv_have_decl_alarm" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ALARM $ac_have_decl _ACEOF for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* \ | hpux* | solaris* | cygwin* | mingw*) ac_cv_func_malloc_0_nonnull=yes ;; # If we don't know, assume the worst. *) ac_cv_func_malloc_0_nonnull=no ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { char *p = malloc (0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : gl_cv_func_malloc_0_nonnull=1 else gl_cv_func_malloc_0_nonnull=0 fi cat >>confdefs.h <<_ACEOF #define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi GNULIB_FFS=0; HAVE_FFS=1; HAVE_STRCASECMP=1; HAVE_DECL_STRNCASECMP=1; REPLACE_STRERROR_0=0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 $as_echo_n "checking whether strerror(0) succeeds... " >&6; } if ${gl_cv_func_strerror_0_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_strerror_0_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strerror_0_works=yes else gl_cv_func_strerror_0_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_0_works" >&5 $as_echo "$gl_cv_func_strerror_0_works" >&6; } case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 $as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h ;; esac if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror_r with POSIX signature" >&5 $as_echo_n "checking for strerror_r with POSIX signature... " >&6; } if ${gl_cv_func_strerror_r_posix_signature+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int strerror_r (int, char *, size_t); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_strerror_r_posix_signature=yes else gl_cv_func_strerror_r_posix_signature=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_posix_signature" >&5 $as_echo "$gl_cv_func_strerror_r_posix_signature" >&6; } if test $gl_cv_func_strerror_r_posix_signature = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r works" >&5 $as_echo_n "checking whether strerror_r works... " >&6; } if ${gl_cv_func_strerror_r_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on HP-UX. hpux*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on BSD variants. *bsd*) gl_cv_func_strerror_r_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_strerror_r_works="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int result = 0; char buf[79]; if (strerror_r (EACCES, buf, 0) < 0) result |= 1; errno = 0; if (strerror_r (EACCES, buf, sizeof buf) != 0) result |= 2; strcpy (buf, "Unknown"); if (strerror_r (0, buf, sizeof buf) != 0) result |= 4; if (errno) result |= 8; if (strstr (buf, "nknown") || strstr (buf, "ndefined")) result |= 0x10; errno = 0; *buf = 0; if (strerror_r (-3, buf, sizeof buf) < 0) result |= 0x20; if (errno) result |= 0x40; if (!*buf) result |= 0x80; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strerror_r_works=yes else gl_cv_func_strerror_r_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5 $as_echo "$gl_cv_func_strerror_r_works" >&6; } else if test $ac_cv_func___xpg_strerror_r = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __xpg_strerror_r works" >&5 $as_echo_n "checking whether __xpg_strerror_r works... " >&6; } if ${gl_cv_func_strerror_r_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_func_strerror_r_works="guessing no" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif int __xpg_strerror_r(int, char *, size_t); int main () { int result = 0; char buf[256] = "^"; char copy[256]; char *str = strerror (-1); strcpy (copy, str); if (__xpg_strerror_r (-2, buf, 1) == 0) result |= 1; if (*buf) result |= 2; __xpg_strerror_r (-2, buf, 256); if (strcmp (str, copy)) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strerror_r_works=yes else gl_cv_func_strerror_r_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5 $as_echo "$gl_cv_func_strerror_r_works" >&6; } fi fi fi fi GNULIB_IOCTL=0; SYS_IOCTL_H_HAVE_WINSOCK2_H=0; SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; REPLACE_IOCTL=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_string_h='<'string.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_string_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'string.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_string_h gl_cv_next_string_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 $as_echo "$gl_cv_next_string_h" >&6; } fi NEXT_STRING_H=$gl_cv_next_string_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'string.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_string_h fi NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive for gl_func in ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test $gl_cv_have_include_next = yes; then gl_cv_next_strings_h='<'strings.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_strings_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_strings_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'strings.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_strings_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_strings_h gl_cv_next_strings_h='"'$gl_header'"' else gl_cv_next_strings_h='<'strings.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_strings_h" >&5 $as_echo "$gl_cv_next_strings_h" >&6; } fi NEXT_STRINGS_H=$gl_cv_next_strings_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'strings.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_strings_h fi NEXT_AS_FIRST_DIRECTIVE_STRINGS_H=$gl_next_as_first_directive if test $ac_cv_header_strings_h = yes; then HAVE_STRINGS_H=1 else HAVE_STRINGS_H=0 fi for gl_func in ffs strcasecmp strncasecmp; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Minix 3.1.8 has a bug: must be included before . */ #include #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done ac_fn_c_check_decl "$LINENO" "strndup" "ac_cv_have_decl_strndup" "$ac_includes_default" if test "x$ac_cv_have_decl_strndup" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRNDUP $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" if test "x$ac_cv_have_decl_strnlen" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRNLEN $ac_have_decl _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexp() can be used without linking with libm" >&5 $as_echo_n "checking whether ldexp() can be used without linking with libm... " >&6; } if ${gl_cv_func_ldexp_no_libm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include double (*funcptr) (double, int) = ldexp; double x; int main () { return ldexp (x, -1) > 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_func_ldexp_no_libm=yes else gl_cv_func_ldexp_no_libm=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexp_no_libm" >&5 $as_echo "$gl_cv_func_ldexp_no_libm" >&6; } ac_fn_c_check_decl "$LINENO" "strtok_r" "ac_cv_have_decl_strtok_r" "$ac_includes_default" if test "x$ac_cv_have_decl_strtok_r" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRTOK_R $ac_have_decl _ACEOF ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi case "$host_os" in mingw*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit off_t" >&5 $as_echo_n "checking for 64-bit off_t... " >&6; } if ${gl_cv_type_off_t_64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_off_t_64=yes else gl_cv_type_off_t_64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_off_t_64" >&5 $as_echo "$gl_cv_type_off_t_64" >&6; } if test $gl_cv_type_off_t_64 = no; then WINDOWS_64_BIT_OFF_T=1 else WINDOWS_64_BIT_OFF_T=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit st_size" >&5 $as_echo_n "checking for 64-bit st_size... " >&6; } if ${gl_cv_member_st_size_64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include struct stat buf; int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_member_st_size_64=yes else gl_cv_member_st_size_64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_member_st_size_64" >&5 $as_echo "$gl_cv_member_st_size_64" >&6; } if test $gl_cv_member_st_size_64 = no; then WINDOWS_64_BIT_ST_SIZE=1 else WINDOWS_64_BIT_ST_SIZE=0 fi ;; *) WINDOWS_64_BIT_OFF_T=0 WINDOWS_64_BIT_ST_SIZE=0 ;; esac $as_echo "#define _USE_STD_STAT 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_types_h='<'sys/types.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_types_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/types.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_types_h gl_cv_next_sys_types_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 $as_echo "$gl_cv_next_sys_types_h" >&6; } fi NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/types.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_types_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive WINDOWS_STAT_INODES=0 gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;} i\ 0 q ' gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;} i\ 0 q ' gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;} i\ 0 q ' if test "$HAVE_LIBUNISTRING" = yes; then LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"` LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"` LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"` fi if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 $as_echo_n "checking for inttypes.h... " >&6; } if ${gl_cv_header_inttypes_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_inttypes_h=yes else gl_cv_header_inttypes_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 $as_echo "$gl_cv_header_inttypes_h" >&6; } if test $gl_cv_header_inttypes_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H_WITH_UINTMAX 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 $as_echo_n "checking for stdint.h... " >&6; } if ${gl_cv_header_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_h=yes else gl_cv_header_stdint_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 $as_echo "$gl_cv_header_stdint_h" >&6; } if test $gl_cv_header_stdint_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H_WITH_UINTMAX 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 $as_echo_n "checking for intmax_t... " >&6; } if ${gt_cv_c_intmax_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif int main () { intmax_t x = -1; return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_intmax_t=yes else gt_cv_c_intmax_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 $as_echo "$gt_cv_c_intmax_t" >&6; } if test $gt_cv_c_intmax_t = yes; then $as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h else test $ac_cv_type_long_long_int = yes \ && ac_type='long long' \ || ac_type='long' cat >>confdefs.h <<_ACEOF #define intmax_t $ac_type _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 $as_echo_n "checking where to find the exponent in a 'double'... " >&6; } if ${gl_cv_cc_double_expbit0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined arm || defined __arm || defined __arm__ mixed_endianness #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "mixed_endianness" >/dev/null 2>&1; then : gl_cv_cc_double_expbit0="unknown" else : if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi : case $ac_cv_c_bigendian in #( yes) gl_cv_cc_double_expbit0="word 0 bit 20";; #( no) gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) gl_cv_cc_double_expbit0="unknown" ;; esac fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (double x) { memory_double m; size_t i; /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ memset (&m, 0, sizeof (memory_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25); add_to_ored_words (0.5); add_to_ored_words (1.0); add_to_ored_words (2.0); add_to_ored_words (4.0); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_double_expbit0=`cat conftest.out` else gl_cv_cc_double_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 $as_echo "$gl_cv_cc_double_expbit0" >&6; } case "$gl_cv_cc_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define DBL_EXPBIT0_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define DBL_EXPBIT0_BIT $bit _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf returns a byte count as in C99" >&5 $as_echo_n "checking whether snprintf returns a byte count as in C99... " >&6; } if ${gl_cv_func_snprintf_retval_c99+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_retval_c99="guessing no";; openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_retval_c99="guessing no";; netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on MSVC, no on mingw. mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1; then : gl_cv_func_snprintf_retval_c99="guessing yes" else gl_cv_func_snprintf_retval_c99="guessing no" fi rm -f conftest* ;; # If we don't know, assume the worst. *) gl_cv_func_snprintf_retval_c99="guessing no";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) return 1; if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) return 2; if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_snprintf_retval_c99=yes else gl_cv_func_snprintf_retval_c99=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_retval_c99" >&5 $as_echo "$gl_cv_func_snprintf_retval_c99" >&6; } for ac_func in snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include " if test "x$ac_cv_have_decl__snprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SNPRINTF $ac_have_decl _ACEOF case "$gl_cv_func_snprintf_retval_c99" in *yes) $as_echo "#define HAVE_SNPRINTF_RETVAL_C99 1" >>confdefs.h ;; esac ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_VSNPRINTF $ac_have_decl _ACEOF GNULIB_SOCKET=0; GNULIB_CONNECT=0; GNULIB_ACCEPT=0; GNULIB_BIND=0; GNULIB_GETPEERNAME=0; GNULIB_GETSOCKNAME=0; GNULIB_GETSOCKOPT=0; GNULIB_LISTEN=0; GNULIB_RECV=0; GNULIB_SEND=0; GNULIB_RECVFROM=0; GNULIB_SENDTO=0; GNULIB_SETSOCKOPT=0; GNULIB_SHUTDOWN=0; GNULIB_ACCEPT4=0; HAVE_STRUCT_SOCKADDR_STORAGE=1; HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; HAVE_SA_FAMILY_T=1; HAVE_ACCEPT4=1; if test $ac_cv_header_sys_socket_h = no; then for ac_header in ws2tcpip.h do : ac_fn_c_check_header_mongrel "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default" if test "x$ac_cv_header_ws2tcpip_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WS2TCPIP_H 1 _ACEOF fi done fi case "$host_os" in osf*) $as_echo "#define _POSIX_PII_SOCKET 1" >>confdefs.h ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether is self-contained" >&5 $as_echo_n "checking whether is self-contained... " >&6; } if ${gl_cv_header_sys_socket_h_selfcontained+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_sys_socket_h_selfcontained=yes else gl_cv_header_sys_socket_h_selfcontained=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_selfcontained" >&5 $as_echo "$gl_cv_header_sys_socket_h_selfcontained" >&6; } if test $gl_cv_header_sys_socket_h_selfcontained = yes; then for ac_func in shutdown do : ac_fn_c_check_func "$LINENO" "shutdown" "ac_cv_func_shutdown" if test "x$ac_cv_func_shutdown" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SHUTDOWN 1 _ACEOF fi done if test $ac_cv_func_shutdown = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether defines the SHUT_* macros" >&5 $as_echo_n "checking whether defines the SHUT_* macros... " >&6; } if ${gl_cv_header_sys_socket_h_shut+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR }; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_sys_socket_h_shut=yes else gl_cv_header_sys_socket_h_shut=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_shut" >&5 $as_echo "$gl_cv_header_sys_socket_h_shut" >&6; } if test $gl_cv_header_sys_socket_h_shut = no; then SYS_SOCKET_H='sys/socket.h' fi fi fi # We need to check for ws2tcpip.h now. if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_socket_h='<'sys/socket.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_socket_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_sys_socket_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/socket.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_socket_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_socket_h gl_cv_next_sys_socket_h='"'$gl_header'"' else gl_cv_next_sys_socket_h='<'sys/socket.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_socket_h" >&5 $as_echo "$gl_cv_next_sys_socket_h" >&6; } fi NEXT_SYS_SOCKET_H=$gl_cv_next_sys_socket_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/socket.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_socket_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H=$gl_next_as_first_directive if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 HAVE_WS2TCPIP_H=0 else HAVE_SYS_SOCKET_H=0 if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockaddr_storage" " /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif " if test "x$ac_cv_type_struct_sockaddr_storage" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_SOCKADDR_STORAGE 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "sa_family_t" "ac_cv_type_sa_family_t" " /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif " if test "x$ac_cv_type_sa_family_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SA_FAMILY_T 1 _ACEOF fi if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "ss_family" "ac_cv_member_struct_sockaddr_storage_ss_family" "#include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif " if test "x$ac_cv_member_struct_sockaddr_storage_ss_family" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1 _ACEOF else HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0 fi fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then SYS_SOCKET_H='sys/socket.h' fi if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi for gl_func in socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Some systems require prerequisite headers. */ #include #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done GNULIB_INET_NTOP=0; GNULIB_INET_PTON=0; HAVE_DECL_INET_NTOP=1; HAVE_DECL_INET_PTON=1; REPLACE_INET_NTOP=0; REPLACE_INET_PTON=0; GNULIB_ISBLANK=0; HAVE_ISBLANK=1; { $as_echo "$as_me:${as_lineno-$LINENO}: checking if environ is properly declared" >&5 $as_echo_n "checking if environ is properly declared... " >&6; } if ${gt_cv_var_environ_declaration+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H #include #endif /* mingw, BeOS, Haiku declare environ in , not in . */ #include extern struct { int foo; } environ; int main () { environ.foo = 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_var_environ_declaration=no else gt_cv_var_environ_declaration=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_var_environ_declaration" >&5 $as_echo "$gt_cv_var_environ_declaration" >&6; } if test $gt_cv_var_environ_declaration = yes; then $as_echo "#define HAVE_ENVIRON_DECL 1" >>confdefs.h fi if test $gt_cv_var_environ_declaration != yes; then HAVE_DECL_ENVIRON=0 fi GNULIB_FCNTL=0; GNULIB_NONBLOCKING=0; GNULIB_OPEN=0; GNULIB_OPENAT=0; HAVE_FCNTL=1; HAVE_OPENAT=1; REPLACE_FCNTL=0; REPLACE_OPEN=0; REPLACE_OPENAT=0; GNULIB_FCHMODAT=0; GNULIB_FSTAT=0; GNULIB_FSTATAT=0; GNULIB_FUTIMENS=0; GNULIB_LCHMOD=0; GNULIB_LSTAT=0; GNULIB_MKDIRAT=0; GNULIB_MKFIFO=0; GNULIB_MKFIFOAT=0; GNULIB_MKNOD=0; GNULIB_MKNODAT=0; GNULIB_STAT=0; GNULIB_UTIMENSAT=0; GNULIB_OVERRIDES_STRUCT_STAT=0; HAVE_FCHMODAT=1; HAVE_FSTATAT=1; HAVE_FUTIMENS=1; HAVE_LCHMOD=1; HAVE_LSTAT=1; HAVE_MKDIRAT=1; HAVE_MKFIFO=1; HAVE_MKFIFOAT=1; HAVE_MKNOD=1; HAVE_MKNODAT=1; HAVE_UTIMENSAT=1; REPLACE_FSTAT=0; REPLACE_FSTATAT=0; REPLACE_FUTIMENS=0; REPLACE_LSTAT=0; REPLACE_MKDIR=0; REPLACE_MKFIFO=0; REPLACE_MKNOD=0; REPLACE_STAT=0; REPLACE_UTIMENSAT=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 $as_echo_n "checking whether stat file-mode macros are broken... " >&6; } if ${ac_cv_header_stat_broken+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined S_ISBLK && defined S_IFDIR extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; #endif #if defined S_ISBLK && defined S_IFCHR extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; #endif #if defined S_ISLNK && defined S_IFREG extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; #endif #if defined S_ISSOCK && defined S_IFREG extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stat_broken=no else ac_cv_header_stat_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 $as_echo "$ac_cv_header_stat_broken" >&6; } if test $ac_cv_header_stat_broken = yes; then $as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_stat_h='<'sys/stat.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_stat_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_sys_stat_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/stat.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_stat_h gl_cv_next_sys_stat_h='"'$gl_header'"' else gl_cv_next_sys_stat_h='<'sys/stat.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5 $as_echo "$gl_cv_next_sys_stat_h" >&6; } fi NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/stat.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_stat_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive WINDOWS_STAT_TIMESPEC=0 ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include #include " if test "x$ac_cv_type_nlink_t" = xyes; then : else $as_echo "#define nlink_t int" >>confdefs.h fi for gl_func in fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getcwd (NULL, 0) allocates memory for result" >&5 $as_echo_n "checking whether getcwd (NULL, 0) allocates memory for result... " >&6; } if ${gl_cv_func_getcwd_null+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_getcwd_null="guessing yes";; # If we don't know, assume the worst. *) gl_cv_func_getcwd_null="guessing no";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include # if HAVE_UNISTD_H # include # else /* on Windows with MSVC */ # include # endif # ifndef getcwd char *getcwd (); # endif int main () { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* mingw cwd does not start with '/', but getcwd does allocate. However, mingw fails to honor non-zero size. */ #else if (chdir ("/") != 0) return 1; else { char *f = getcwd (NULL, 0); if (! f) return 2; if (f[0] != '/') { free (f); return 3; } if (f[1] != '\0') { free (f); return 4; } free (f); return 0; } #endif ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getcwd_null=yes else gl_cv_func_getcwd_null=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_null" >&5 $as_echo "$gl_cv_func_getcwd_null" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getcwd with POSIX signature" >&5 $as_echo_n "checking for getcwd with POSIX signature... " >&6; } if ${gl_cv_func_getcwd_posix_signature+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { extern #ifdef __cplusplus "C" #endif char *getcwd (char *, size_t); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_getcwd_posix_signature=yes else gl_cv_func_getcwd_posix_signature=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_posix_signature" >&5 $as_echo "$gl_cv_func_getcwd_posix_signature" >&6; } ac_fn_c_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default" if test "x$ac_cv_have_decl_getdtablesize" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETDTABLESIZE $ac_have_decl _ACEOF GNULIB_GETTIMEOFDAY=0; HAVE_GETTIMEOFDAY=1; HAVE_STRUCT_TIMEVAL=1; HAVE_SYS_TIME_H=1; REPLACE_GETTIMEOFDAY=0; REPLACE_STRUCT_TIMEVAL=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_time_h='<'sys/time.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_time_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_sys_time_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/time.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_time_h gl_cv_next_sys_time_h='"'$gl_header'"' else gl_cv_next_sys_time_h='<'sys/time.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_time_h" >&5 $as_echo "$gl_cv_next_sys_time_h" >&6; } fi NEXT_SYS_TIME_H=$gl_cv_next_sys_time_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/time.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_time_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H=$gl_next_as_first_directive if test $ac_cv_header_sys_time_h != yes; then HAVE_SYS_TIME_H=0 fi if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5 $as_echo_n "checking for struct timeval... " >&6; } if ${gl_cv_sys_struct_timeval+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_SYS_TIME_H #include #endif #include #if HAVE_WINSOCK2_H # include #endif int main () { static struct timeval x; x.tv_sec = x.tv_usec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_sys_struct_timeval=yes else gl_cv_sys_struct_timeval=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval" >&5 $as_echo "$gl_cv_sys_struct_timeval" >&6; } if test $gl_cv_sys_struct_timeval != yes; then HAVE_STRUCT_TIMEVAL=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wide-enough struct timeval.tv_sec member" >&5 $as_echo_n "checking for wide-enough struct timeval.tv_sec member... " >&6; } if ${gl_cv_sys_struct_timeval_tv_sec+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_SYS_TIME_H #include #endif #include #if HAVE_WINSOCK2_H # include #endif int main () { static struct timeval x; typedef int verify_tv_sec_type[ sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 ]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_sys_struct_timeval_tv_sec=yes else gl_cv_sys_struct_timeval_tv_sec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval_tv_sec" >&5 $as_echo "$gl_cv_sys_struct_timeval_tv_sec" >&6; } if test $gl_cv_sys_struct_timeval_tv_sec != yes; then REPLACE_STRUCT_TIMEVAL=1 fi fi for gl_func in gettimeofday; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_SYS_TIME_H # include #endif #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done NEED_LOCALTIME_BUFFER=0 GNULIB_CTIME=0; GNULIB_MKTIME=0; GNULIB_LOCALTIME=0; GNULIB_NANOSLEEP=0; GNULIB_STRFTIME=0; GNULIB_STRPTIME=0; GNULIB_TIMEGM=0; GNULIB_TIME_R=0; GNULIB_TIME_RZ=0; GNULIB_TZSET=0; HAVE_DECL_LOCALTIME_R=1; HAVE_NANOSLEEP=1; HAVE_STRPTIME=1; HAVE_TIMEGM=1; HAVE_TZSET=1; HAVE_TIMEZONE_T=0; REPLACE_CTIME=GNULIB_PORTCHECK; REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; REPLACE_MKTIME=GNULIB_PORTCHECK; REPLACE_NANOSLEEP=GNULIB_PORTCHECK; REPLACE_STRFTIME=GNULIB_PORTCHECK; REPLACE_TIMEGM=GNULIB_PORTCHECK; REPLACE_TZSET=GNULIB_PORTCHECK; : ${GNULIB_GETTIMEOFDAY=0}; REPLACE_GMTIME=0; REPLACE_LOCALTIME=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IPv4 sockets" >&5 $as_echo_n "checking for IPv4 sockets... " >&6; } if ${gl_cv_socket_ipv4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif int main () { int x = AF_INET; struct in_addr y; struct sockaddr_in z; if (&x && &y && &z) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_socket_ipv4=yes else gl_cv_socket_ipv4=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socket_ipv4" >&5 $as_echo "$gl_cv_socket_ipv4" >&6; } if test $gl_cv_socket_ipv4 = yes; then $as_echo "#define HAVE_IPV4 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IPv6 sockets" >&5 $as_echo_n "checking for IPv6 sockets... " >&6; } if ${gl_cv_socket_ipv6+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif int main () { int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z; if (&x && &y && &z) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_socket_ipv6=yes else gl_cv_socket_ipv6=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socket_ipv6" >&5 $as_echo "$gl_cv_socket_ipv6" >&6; } if test $gl_cv_socket_ipv6 = yes; then $as_echo "#define HAVE_IPV6 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 $as_echo_n "checking where to find the exponent in a 'float'... " >&6; } if ${gl_cv_cc_float_expbit0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_cc_float_expbit0="word 0 bit 23" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (float x) { memory_float m; size_t i; /* Clear it first, in case sizeof (float) < sizeof (memory_float). */ memset (&m, 0, sizeof (memory_float)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25f); add_to_ored_words (0.5f); add_to_ored_words (1.0f); add_to_ored_words (2.0f); add_to_ored_words (4.0f); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_float_expbit0=`cat conftest.out` else gl_cv_cc_float_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 $as_echo "$gl_cv_cc_float_expbit0" >&6; } case "$gl_cv_cc_float_expbit0" in word*bit*) word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define FLT_EXPBIT0_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define FLT_EXPBIT0_BIT $bit _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long double and double are the same" >&5 $as_echo_n "checking whether long double and double are the same... " >&6; } if ${gl_cv_long_double_equals_double+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { typedef int check[sizeof (long double) == sizeof (double) && LDBL_MANT_DIG == DBL_MANT_DIG && LDBL_MAX_EXP == DBL_MAX_EXP && LDBL_MIN_EXP == DBL_MIN_EXP ? 1 : -1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_long_double_equals_double=yes else gl_cv_long_double_equals_double=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_long_double_equals_double" >&5 $as_echo "$gl_cv_long_double_equals_double" >&6; } if test $gl_cv_long_double_equals_double = yes; then $as_echo "#define HAVE_SAME_LONG_DOUBLE_AS_DOUBLE 1" >>confdefs.h HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 else HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${gt_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_val_LC_MESSAGES=yes else gt_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5 $as_echo "$gt_cv_val_LC_MESSAGES" >&6; } if test $gt_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 $as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } if ${gl_cv_func_lstat_dereferences_slashed_symlink+:} false; then : $as_echo_n "(cached) " >&6 else rm -f conftest.sym conftest.file echo >conftest.file if test "$cross_compiling" = yes; then : case "$host_os" in *-gnu*) # Guess yes on glibc systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; mingw*) # Guess no on native Windows. gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; *) # If we don't know, assume the worst. gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; if (symlink ("conftest.file", "conftest.sym") != 0) return 1; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_lstat_dereferences_slashed_symlink=yes else gl_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.sym conftest.file fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lstat_dereferences_slashed_symlink" >&5 $as_echo "$gl_cv_func_lstat_dereferences_slashed_symlink" >&6; } case "$gl_cv_func_lstat_dereferences_slashed_symlink" in *yes) cat >>confdefs.h <<_ACEOF #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 _ACEOF ;; esac GNULIB_PSELECT=0; GNULIB_SELECT=0; HAVE_PSELECT=1; REPLACE_PSELECT=0; REPLACE_SELECT=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether is self-contained" >&5 $as_echo_n "checking whether is self-contained... " >&6; } if ${gl_cv_header_sys_select_h_selfcontained+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct timeval b; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_sys_select_h_selfcontained=yes else gl_cv_header_sys_select_h_selfcontained=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $gl_cv_header_sys_select_h_selfcontained = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int memset; int bzero; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef memset #define memset nonexistent_memset extern #ifdef __cplusplus "C" #endif void *memset (void *, int, unsigned long); #undef bzero #define bzero nonexistent_bzero extern #ifdef __cplusplus "C" #endif void bzero (void *, unsigned long); fd_set fds; FD_ZERO (&fds); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else gl_cv_header_sys_select_h_selfcontained=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_select_h_selfcontained" >&5 $as_echo "$gl_cv_header_sys_select_h_selfcontained" >&6; } if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_select_h='<'sys/select.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_select_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_sys_select_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/select.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_select_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_select_h gl_cv_next_sys_select_h='"'$gl_header'"' else gl_cv_next_sys_select_h='<'sys/select.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_select_h" >&5 $as_echo "$gl_cv_next_sys_select_h" >&6; } fi NEXT_SYS_SELECT_H=$gl_cv_next_sys_select_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/select.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_select_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H=$gl_next_as_first_directive if test $ac_cv_header_sys_select_h = yes; then HAVE_SYS_SELECT_H=1 else HAVE_SYS_SELECT_H=0 fi if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi for gl_func in pselect select; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Some systems require prerequisite headers. */ #include #if !(defined __GLIBC__ && !defined __UCLIBC__) && HAVE_SYS_TIME_H # include #endif #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi LIBSOCKET= if test $HAVE_WINSOCK2_H = 1; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need to call WSAStartup in winsock2.h and -lws2_32" >&5 $as_echo_n "checking if we need to call WSAStartup in winsock2.h and -lws2_32... " >&6; } if ${gl_cv_func_wsastartup+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_LIBS="$LIBS" LIBS="$LIBS -lws2_32" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_WINSOCK2_H # include #endif int main () { WORD wVersionRequested = MAKEWORD(1, 1); WSADATA wsaData; int err = WSAStartup(wVersionRequested, &wsaData); WSACleanup (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_func_wsastartup=yes else gl_cv_func_wsastartup=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wsastartup" >&5 $as_echo "$gl_cv_func_wsastartup" >&6; } if test "$gl_cv_func_wsastartup" = "yes"; then $as_echo "#define WINDOWS_SOCKETS 1" >>confdefs.h LIBSOCKET='-lws2_32' fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5 $as_echo_n "checking for library containing setsockopt... " >&6; } if ${gl_cv_lib_socket+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_lib_socket= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern #ifdef __cplusplus "C" #endif char setsockopt(); int main () { setsockopt(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else gl_save_LIBS="$LIBS" LIBS="$gl_save_LIBS -lsocket" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern #ifdef __cplusplus "C" #endif char setsockopt(); int main () { setsockopt(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_lib_socket="-lsocket" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$gl_cv_lib_socket"; then LIBS="$gl_save_LIBS -lnetwork" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern #ifdef __cplusplus "C" #endif char setsockopt(); int main () { setsockopt(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_lib_socket="-lnetwork" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$gl_cv_lib_socket"; then LIBS="$gl_save_LIBS -lnet" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern #ifdef __cplusplus "C" #endif char setsockopt(); int main () { setsockopt(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_lib_socket="-lnet" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi fi LIBS="$gl_save_LIBS" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$gl_cv_lib_socket"; then gl_cv_lib_socket="none needed" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_lib_socket" >&5 $as_echo "$gl_cv_lib_socket" >&6; } if test "$gl_cv_lib_socket" != "none needed"; then LIBSOCKET="$gl_cv_lib_socket" fi fi : if test "$ac_cv_header_winsock2_h" = yes; then REPLACE_SELECT=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether select supports a 0 argument" >&5 $as_echo_n "checking whether select supports a 0 argument... " >&6; } if ${gl_cv_func_select_supports0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess no on Interix. interix*) gl_cv_func_select_supports0="guessing no";; # Guess yes otherwise. *) gl_cv_func_select_supports0="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_SYS_SELECT_H #include #endif int main () { struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_select_supports0=yes else gl_cv_func_select_supports0=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_select_supports0" >&5 $as_echo "$gl_cv_func_select_supports0" >&6; } case "$gl_cv_func_select_supports0" in *yes) ;; *) REPLACE_SELECT=1 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether select detects invalid fds" >&5 $as_echo_n "checking whether select detects invalid fds... " >&6; } if ${gl_cv_func_select_detects_ebadf+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_select_detects_ebadf="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_select_detects_ebadf="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_SYS_SELECT_H # include #endif #include #include int main () { fd_set set; dup2(0, 16); FD_ZERO(&set); FD_SET(16, &set); close(16); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (17, &set, NULL, NULL, &timeout) != -1 || errno != EBADF; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_select_detects_ebadf=yes else gl_cv_func_select_detects_ebadf=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_select_detects_ebadf" >&5 $as_echo "$gl_cv_func_select_detects_ebadf" >&6; } case $gl_cv_func_select_detects_ebadf in *yes) ;; *) REPLACE_SELECT=1 ;; esac fi LIB_SELECT="$LIBSOCKET" if test $REPLACE_SELECT = 1; then case "$host_os" in mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define WIN32_LEAN_AND_MEAN #include int main () { MsgWaitForMultipleObjects (0, NULL, 0, 0, 0); return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIB_SELECT="$LIB_SELECT -luser32" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5 $as_echo_n "checking for O_CLOEXEC... " >&6; } if ${gl_cv_macro_O_CLOEXEC+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef O_CLOEXEC choke me; #endif int main () { return O_CLOEXEC; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_macro_O_CLOEXEC=yes else gl_cv_macro_O_CLOEXEC=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_macro_O_CLOEXEC" >&5 $as_echo "$gl_cv_macro_O_CLOEXEC" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for promoted mode_t type" >&5 $as_echo_n "checking for promoted mode_t type... " >&6; } if ${gl_cv_promoted_mode_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_promoted_mode_t='int' else gl_cv_promoted_mode_t='mode_t' fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_promoted_mode_t" >&5 $as_echo "$gl_cv_promoted_mode_t" >&6; } cat >>confdefs.h <<_ACEOF #define PROMOTED_MODE_T $gl_cv_promoted_mode_t _ACEOF ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" if test "x$ac_cv_have_decl_strerror_r" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRERROR_R $ac_have_decl _ACEOF if test $ac_cv_have_decl_strerror_r = no; then HAVE_DECL_STRERROR_R=0 fi if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then if test $gl_cv_func_strerror_r_posix_signature = yes; then case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR_R=1 ;; esac else REPLACE_STRERROR_R=1 fi else REPLACE_STRERROR_R=1 fi fi GNULIB_PTHREAD_SIGMASK=0; GNULIB_RAISE=0; GNULIB_SIGNAL_H_SIGPIPE=0; GNULIB_SIGPROCMASK=0; GNULIB_SIGACTION=0; HAVE_POSIX_SIGNALBLOCKING=1; HAVE_PTHREAD_SIGMASK=1; HAVE_RAISE=1; HAVE_SIGSET_T=1; HAVE_SIGINFO_T=1; HAVE_SIGACTION=1; HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; HAVE_SIGHANDLER_T=1; REPLACE_PTHREAD_SIGMASK=0; REPLACE_RAISE=0; ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" " #include /* Mingw defines sigset_t not in , but in . */ #include " if test "x$ac_cv_type_sigset_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SIGSET_T 1 _ACEOF gl_cv_type_sigset_t=yes else gl_cv_type_sigset_t=no fi if test $gl_cv_type_sigset_t != yes; then HAVE_SIGSET_T=0 fi ac_fn_c_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default" if test "x$ac_cv_have_decl_setenv" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SETENV $ac_have_decl _ACEOF if test $ac_cv_have_decl_setenv = no; then HAVE_DECL_SETENV=0 fi for ac_header in search.h do : ac_fn_c_check_header_mongrel "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default" if test "x$ac_cv_header_search_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SEARCH_H 1 _ACEOF fi done for ac_func in tsearch do : ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" if test "x$ac_cv_func_tsearch" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TSEARCH 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 $as_echo_n "checking for uid_t in sys/types.h... " >&6; } if ${ac_cv_type_uid_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1; then : ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 $as_echo "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then $as_echo "#define uid_t int" >>confdefs.h $as_echo "#define gid_t int" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in " >&5 $as_echo_n "checking for struct timespec in ... " >&6; } if ${gl_cv_sys_struct_timespec_in_time_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_sys_struct_timespec_in_time_h=yes else gl_cv_sys_struct_timespec_in_time_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_time_h" >&5 $as_echo "$gl_cv_sys_struct_timespec_in_time_h" >&6; } TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 if test $gl_cv_sys_struct_timespec_in_time_h = yes; then TIME_H_DEFINES_STRUCT_TIMESPEC=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in " >&5 $as_echo_n "checking for struct timespec in ... " >&6; } if ${gl_cv_sys_struct_timespec_in_sys_time_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_sys_struct_timespec_in_sys_time_h=yes else gl_cv_sys_struct_timespec_in_sys_time_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5 $as_echo "$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; } if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in " >&5 $as_echo_n "checking for struct timespec in ... " >&6; } if ${gl_cv_sys_struct_timespec_in_pthread_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_sys_struct_timespec_in_pthread_h=yes else gl_cv_sys_struct_timespec_in_pthread_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_pthread_h" >&5 $as_echo "$gl_cv_sys_struct_timespec_in_pthread_h" >&6; } if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in " >&5 $as_echo_n "checking for struct timespec in ... " >&6; } if ${gl_cv_sys_struct_timespec_in_unistd_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_sys_struct_timespec_in_unistd_h=yes else gl_cv_sys_struct_timespec_in_unistd_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_unistd_h" >&5 $as_echo "$gl_cv_sys_struct_timespec_in_unistd_h" >&6; } if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 fi fi fi fi if test $gl_cv_have_include_next = yes; then gl_cv_next_time_h='<'time.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_time_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'time.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_time_h gl_cv_next_time_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_time_h" >&5 $as_echo "$gl_cv_next_time_h" >&6; } fi NEXT_TIME_H=$gl_cv_next_time_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'time.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_time_h fi NEXT_AS_FIRST_DIRECTIVE_TIME_H=$gl_next_as_first_directive ac_fn_c_check_decl "$LINENO" "unsetenv" "ac_cv_have_decl_unsetenv" "$ac_includes_default" if test "x$ac_cv_have_decl_unsetenv" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_UNSETENV $ac_have_decl _ACEOF if true; then GL_COND_LIBTOOL_TRUE= GL_COND_LIBTOOL_FALSE='#' else GL_COND_LIBTOOL_TRUE='#' GL_COND_LIBTOOL_FALSE= fi gl_cond_libtool=true gl_m4_base='bootstrapped/m4' gl_source_base='bootstrapped/lib' LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` if test $ac_cv_func_alloca_works = no; then : fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 $as_echo_n "checking for alloca as a compiler built-in... " >&6; } if ${gl_cv_rpl_alloca+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Need own alloca" >/dev/null 2>&1; then : gl_cv_rpl_alloca=yes else gl_cv_rpl_alloca=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 $as_echo "$gl_cv_rpl_alloca" >&6; } if test $gl_cv_rpl_alloca = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h ALLOCA_H=alloca.h else ALLOCA_H= fi else ALLOCA_H=alloca.h fi if test -n "$ALLOCA_H"; then GL_GENERATE_ALLOCA_H_TRUE= GL_GENERATE_ALLOCA_H_FALSE='#' else GL_GENERATE_ALLOCA_H_TRUE='#' GL_GENERATE_ALLOCA_H_FALSE= fi ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include " if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : else $as_echo "#define GNULIB_PROGRAM_INVOCATION_NAME 1" >>confdefs.h fi ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include " if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : else $as_echo "#define GNULIB_PROGRAM_INVOCATION_SHORT_NAME 1" >>confdefs.h fi # Check if program_invocation_name and program_invocation_short_name # are defined elsewhere. It is improbable that only one of them will # be defined and other not, I prefer to stay on the safe side and to # test each one separately. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether program_invocation_name is defined" >&5 $as_echo_n "checking whether program_invocation_name is defined... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { program_invocation_name = "test"; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_PROGRAM_INVOCATION_NAME 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether program_invocation_short_name is defined" >&5 $as_echo_n "checking whether program_invocation_short_name is defined... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { program_invocation_short_name = "test"; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_PROGRAM_INVOCATION_SHORT_NAME 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=argp_error:2:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=argp_failure:4:c-format" if test $ac_cv_func_btowc = no; then HAVE_BTOWC=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether btowc(0) is correct" >&5 $as_echo_n "checking whether btowc(0) is correct... " >&6; } if ${gl_cv_func_btowc_nul+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess no on Cygwin. cygwin*) gl_cv_func_btowc_nul="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_nul="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_nul="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (btowc ('\0') != 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_btowc_nul=yes else gl_cv_func_btowc_nul=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_nul" >&5 $as_echo "$gl_cv_func_btowc_nul" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether btowc(EOF) is correct" >&5 $as_echo_n "checking whether btowc(EOF) is correct... " >&6; } if ${gl_cv_func_btowc_eof+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on IRIX. irix*) gl_cv_func_btowc_eof="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_eof="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_eof="guessing yes" ;; esac if test $LOCALE_FR != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (btowc (EOF) != WEOF) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_btowc_eof=yes else gl_cv_func_btowc_eof=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_eof" >&5 $as_echo "$gl_cv_func_btowc_eof" >&6; } case "$gl_cv_func_btowc_nul" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_eof" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac fi if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then gl_LIBOBJS="$gl_LIBOBJS btowc.$ac_objext" : fi GNULIB_BTOWC=1 $as_echo "#define GNULIB_TEST_BTOWC 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5 $as_echo_n "checking for __builtin_expect... " >&6; } if ${gl_cv___builtin_expect+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv___builtin_expect=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv___builtin_expect="in " else gl_cv___builtin_expect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv___builtin_expect" >&5 $as_echo "$gl_cv___builtin_expect" >&6; } if test "$gl_cv___builtin_expect" = yes; then $as_echo "#define HAVE___BUILTIN_EXPECT 1" >>confdefs.h elif test "$gl_cv___builtin_expect" = "in "; then $as_echo "#define HAVE___BUILTIN_EXPECT 2" >>confdefs.h fi if test "x$datarootdir" = x; then datarootdir='${datadir}' fi if test "x$docdir" = x; then docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' fi if test "x$htmldir" = x; then htmldir='${docdir}' fi if test "x$dvidir" = x; then dvidir='${docdir}' fi if test "x$pdfdir" = x; then pdfdir='${docdir}' fi if test "x$psdir" = x; then psdir='${docdir}' fi if test "x$lispdir" = x; then lispdir='${datarootdir}/emacs/site-lisp' fi if test "x$localedir" = x; then localedir='${datarootdir}/locale' fi if test "x$runstatedir" = x; then runstatedir='${localstatedir}/run' fi pkglibexecdir='${libexecdir}/${PACKAGE}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 $as_echo_n "checking whether // is distinct from /... " >&6; } if ${gl_cv_double_slash_root+:} false; then : $as_echo_n "(cached) " >&6 else if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # . case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 $as_echo "$gl_cv_double_slash_root" >&6; } if test "$gl_cv_double_slash_root" = yes; then $as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 $as_echo_n "checking for error_at_line... " >&6; } if ${ac_cv_lib_error_at_line+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_error_at_line=yes else ac_cv_lib_error_at_line=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 $as_echo "$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext" : fi XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" FLOAT_H= REPLACE_FLOAT_LDBL=0 case "$host_os" in aix* | beos* | openbsd* | mirbsd* | irix*) FLOAT_H=float.h ;; freebsd* | dragonfly*) case "$host_cpu" in i[34567]86 ) FLOAT_H=float.h ;; x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __x86_64__ || defined __amd64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else FLOAT_H=float.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; esac ;; linux*) case "$host_cpu" in powerpc*) FLOAT_H=float.h ;; esac ;; esac case "$host_os" in aix* | freebsd* | dragonfly* | linux*) if test -n "$FLOAT_H"; then REPLACE_FLOAT_LDBL=1 fi ;; esac REPLACE_ITOLD=0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether conversion from 'int' to 'long double' works" >&5 $as_echo_n "checking whether conversion from 'int' to 'long double' works... " >&6; } if ${gl_cv_func_itold_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host" in sparc*-*-linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_itold_works="guessing no" else gl_cv_func_itold_works="guessing yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; # Guess yes on native Windows. mingw*) gl_cv_func_itold_works="guessing yes" ;; *) gl_cv_func_itold_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i = -1; volatile long double ld; int main () { ld += i * 1.0L; if (ld > 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_itold_works=yes else gl_cv_func_itold_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_itold_works" >&5 $as_echo "$gl_cv_func_itold_works" >&6; } case "$gl_cv_func_itold_works" in *no) REPLACE_ITOLD=1 FLOAT_H=float.h ;; esac if test -n "$FLOAT_H"; then if test $gl_cv_have_include_next = yes; then gl_cv_next_float_h='<'float.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_float_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'float.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_float_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_float_h gl_cv_next_float_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5 $as_echo "$gl_cv_next_float_h" >&6; } fi NEXT_FLOAT_H=$gl_cv_next_float_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'float.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_float_h fi NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive fi if test -n "$FLOAT_H"; then GL_GENERATE_FLOAT_H_TRUE= GL_GENERATE_FLOAT_H_FALSE='#' else GL_GENERATE_FLOAT_H_TRUE='#' GL_GENERATE_FLOAT_H_FALSE= fi if test $REPLACE_FLOAT_LDBL = 1; then gl_LIBOBJS="$gl_LIBOBJS float.$ac_objext" fi if test $REPLACE_ITOLD = 1; then gl_LIBOBJS="$gl_LIBOBJS itold.$ac_objext" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __func__ is available" >&5 $as_echo_n "checking whether __func__ is available... " >&6; } if ${gl_cv_var_func+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { const char *str = __func__; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_var_func=yes else gl_cv_var_func=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var_func" >&5 $as_echo "$gl_cv_var_func" >&6; } if test "$gl_cv_var_func" != yes; then $as_echo "#define __func__ \"\"" >>confdefs.h fi if test $ac_cv_func_getdelim = yes; then HAVE_GETDELIM=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getdelim function" >&5 $as_echo_n "checking for working getdelim function... " >&6; } if ${gl_cv_func_working_getdelim+:} false; then : $as_echo_n "(cached) " >&6 else echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1; then : gl_cv_func_working_getdelim="guessing yes" else gl_cv_func_working_getdelim="guessing no" fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include # include # include int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getdelim (&line, &siz, '\n', in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getdelim (&line, &siz, '\n', in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_working_getdelim=yes else gl_cv_func_working_getdelim=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_getdelim" >&5 $as_echo "$gl_cv_func_working_getdelim" >&6; } case "$gl_cv_func_working_getdelim" in *no) REPLACE_GETDELIM=1 ;; esac else HAVE_GETDELIM=0 fi if test $ac_cv_have_decl_getdelim = no; then HAVE_DECL_GETDELIM=0 fi if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then gl_LIBOBJS="$gl_LIBOBJS getdelim.$ac_objext" for ac_func in flockfile funlockfile do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETC_UNLOCKED $ac_have_decl _ACEOF fi GNULIB_GETDELIM=1 $as_echo "#define GNULIB_TEST_GETDELIM 1" >>confdefs.h gl_getline_needs_run_time_check=no ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline" if test "x$ac_cv_func_getline" = xyes; then : gl_getline_needs_run_time_check=yes else am_cv_func_working_getline=no fi if test $gl_getline_needs_run_time_check = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getline function" >&5 $as_echo_n "checking for working getline function... " >&6; } if ${am_cv_func_working_getline+:} false; then : $as_echo_n "(cached) " >&6 else echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1; then : am_cv_func_working_getline="guessing yes" else am_cv_func_working_getline="guessing no" fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include # include # include int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getline (&line, &siz, in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getline (&line, &siz, in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_working_getline=yes else am_cv_func_working_getline=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_working_getline" >&5 $as_echo "$am_cv_func_working_getline" >&6; } fi if test $ac_cv_have_decl_getline = no; then HAVE_DECL_GETLINE=0 fi case "$am_cv_func_working_getline" in *no) REPLACE_GETLINE=1 ;; esac if test $REPLACE_GETLINE = 1; then gl_LIBOBJS="$gl_LIBOBJS getline.$ac_objext" : fi GNULIB_GETLINE=1 $as_echo "#define GNULIB_TEST_GETLINE 1" >>confdefs.h REPLACE_GETOPT=1 if test $REPLACE_GETOPT = 1; then if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi $as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h GETOPT_H=getopt.h GETOPT_CDEFS_H=getopt-cdefs.h fi if test $REPLACE_GETOPT = 1; then gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext" GNULIB_GL_UNISTD_H_GETOPT=1 fi ac_found=0 ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include " if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : ac_found=1 fi ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include " if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : ac_found=1 fi ac_fn_c_check_decl "$LINENO" "__argv" "ac_cv_have_decl___argv" "#include " if test "x$ac_cv_have_decl___argv" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL___ARGV $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : ac_found=1 fi # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __progname is defined in default libraries" >&5 $as_echo_n "checking whether __progname is defined in default libraries... " >&6; } if ${gl_cv_var___progname+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_var___progname= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern char *__progname; int main () { return *__progname; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_var___progname=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var___progname" >&5 $as_echo "$gl_cv_var___progname" >&6; } if test "$gl_cv_var___progname" = yes; then $as_echo "#define HAVE_VAR___PROGNAME 1" >>confdefs.h fi fi : PRIPTR_PREFIX= if test -n "$STDINT_H"; then PRIPTR_PREFIX='"l"' else for glpfx in '' l ll I64; do case $glpfx in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; I64) gltype1='__int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern intptr_t foo; extern $gltype1 foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : PRIPTR_PREFIX='"'$glpfx'"' fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test -n "$PRIPTR_PREFIX" && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5 $as_echo_n "checking whether INT32_MAX < INTMAX_MAX... " >&6; } if ${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include #if HAVE_STDINT_H #include #endif #if defined INT32_MAX && defined INTMAX_MAX #define CONDITION (INT32_MAX < INTMAX_MAX) #elif HAVE_LONG_LONG_INT #define CONDITION (sizeof (int) < sizeof (long long int)) #else #define CONDITION 0 #endif int test[CONDITION ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes else gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5 $as_echo "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; } if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then INT32_MAX_LT_INTMAX_MAX=1; else INT32_MAX_LT_INTMAX_MAX=0; fi if test $APPLE_UNIVERSAL_BUILD = 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5 $as_echo_n "checking whether INT64_MAX == LONG_MAX... " >&6; } if ${gl_cv_test_INT64_MAX_EQ_LONG_MAX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include #if HAVE_STDINT_H #include #endif #if defined INT64_MAX #define CONDITION (INT64_MAX == LONG_MAX) #elif HAVE_LONG_LONG_INT #define CONDITION (sizeof (long long int) == sizeof (long int)) #else #define CONDITION 0 #endif int test[CONDITION ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes else gl_cv_test_INT64_MAX_EQ_LONG_MAX=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5 $as_echo "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; } if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then INT64_MAX_EQ_LONG_MAX=1; else INT64_MAX_EQ_LONG_MAX=0; fi else INT64_MAX_EQ_LONG_MAX=-1 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5 $as_echo_n "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; } if ${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include #if HAVE_STDINT_H #include #endif #if defined UINT32_MAX && defined UINTMAX_MAX #define CONDITION (UINT32_MAX < UINTMAX_MAX) #elif HAVE_LONG_LONG_INT #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int)) #else #define CONDITION 0 #endif int test[CONDITION ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes else gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5 $as_echo "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; } if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then UINT32_MAX_LT_UINTMAX_MAX=1; else UINT32_MAX_LT_UINTMAX_MAX=0; fi if test $APPLE_UNIVERSAL_BUILD = 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5 $as_echo_n "checking whether UINT64_MAX == ULONG_MAX... " >&6; } if ${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include #if HAVE_STDINT_H #include #endif #if defined UINT64_MAX #define CONDITION (UINT64_MAX == ULONG_MAX) #elif HAVE_LONG_LONG_INT #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int)) #else #define CONDITION 0 #endif int test[CONDITION ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes else gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5 $as_echo "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; } if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then UINT64_MAX_EQ_ULONG_MAX=1; else UINT64_MAX_EQ_ULONG_MAX=0; fi else UINT64_MAX_EQ_ULONG_MAX=-1 fi ac_fn_c_check_decl "$LINENO" "iswblank" "ac_cv_have_decl_iswblank" " /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #include " if test "x$ac_cv_have_decl_iswblank" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ISWBLANK $ac_have_decl _ACEOF if test $ac_cv_func_iswblank = no; then HAVE_ISWBLANK=0 if test $ac_cv_have_decl_iswblank = yes; then REPLACE_ISWBLANK=1 fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : else if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then : fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : else if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then gl_LIBOBJS="$gl_LIBOBJS iswblank.$ac_objext" fi fi GNULIB_ISWBLANK=1 $as_echo "#define GNULIB_TEST_ISWBLANK 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_langinfo_h='<'langinfo.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_langinfo_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_langinfo_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'langinfo.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_langinfo_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_langinfo_h gl_cv_next_langinfo_h='"'$gl_header'"' else gl_cv_next_langinfo_h='<'langinfo.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_langinfo_h" >&5 $as_echo "$gl_cv_next_langinfo_h" >&6; } fi NEXT_LANGINFO_H=$gl_cv_next_langinfo_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'langinfo.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_langinfo_h fi NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H=$gl_next_as_first_directive HAVE_LANGINFO_CODESET=0 HAVE_LANGINFO_T_FMT_AMPM=0 HAVE_LANGINFO_ERA=0 HAVE_LANGINFO_YESEXPR=0 if test $ac_cv_header_langinfo_h = yes; then HAVE_LANGINFO_H=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines CODESET" >&5 $as_echo_n "checking whether langinfo.h defines CODESET... " >&6; } if ${gl_cv_header_langinfo_codeset+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int a = CODESET; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_langinfo_codeset=yes else gl_cv_header_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_codeset" >&5 $as_echo "$gl_cv_header_langinfo_codeset" >&6; } if test $gl_cv_header_langinfo_codeset = yes; then HAVE_LANGINFO_CODESET=1 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines T_FMT_AMPM" >&5 $as_echo_n "checking whether langinfo.h defines T_FMT_AMPM... " >&6; } if ${gl_cv_header_langinfo_t_fmt_ampm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int a = T_FMT_AMPM; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_langinfo_t_fmt_ampm=yes else gl_cv_header_langinfo_t_fmt_ampm=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_t_fmt_ampm" >&5 $as_echo "$gl_cv_header_langinfo_t_fmt_ampm" >&6; } if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then HAVE_LANGINFO_T_FMT_AMPM=1 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ERA" >&5 $as_echo_n "checking whether langinfo.h defines ERA... " >&6; } if ${gl_cv_header_langinfo_era+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int a = ERA; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_langinfo_era=yes else gl_cv_header_langinfo_era=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_era" >&5 $as_echo "$gl_cv_header_langinfo_era" >&6; } if test $gl_cv_header_langinfo_era = yes; then HAVE_LANGINFO_ERA=1 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines YESEXPR" >&5 $as_echo_n "checking whether langinfo.h defines YESEXPR... " >&6; } if ${gl_cv_header_langinfo_yesexpr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int a = YESEXPR; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_langinfo_yesexpr=yes else gl_cv_header_langinfo_yesexpr=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_yesexpr" >&5 $as_echo "$gl_cv_header_langinfo_yesexpr" >&6; } if test $gl_cv_header_langinfo_yesexpr = yes; then HAVE_LANGINFO_YESEXPR=1 fi else HAVE_LANGINFO_H=0 fi for gl_func in nl_langinfo; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\"" case "$host_os" in solaris*) $as_echo "#define _LCONV_C99 1" >>confdefs.h ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether locale.h conforms to POSIX:2001" >&5 $as_echo_n "checking whether locale.h conforms to POSIX:2001... " >&6; } if ${gl_cv_header_locale_h_posix2001+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int x = LC_MESSAGES; int y = sizeof (((struct lconv *) 0)->decimal_point); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_locale_h_posix2001=yes else gl_cv_header_locale_h_posix2001=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_h_posix2001" >&5 $as_echo "$gl_cv_header_locale_h_posix2001" >&6; } if test $ac_cv_header_xlocale_h = yes; then HAVE_XLOCALE_H=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether locale.h defines locale_t" >&5 $as_echo_n "checking whether locale.h defines locale_t... " >&6; } if ${gl_cv_header_locale_has_locale_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include locale_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_locale_has_locale_t=yes else gl_cv_header_locale_has_locale_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_has_locale_t" >&5 $as_echo "$gl_cv_header_locale_has_locale_t" >&6; } if test $gl_cv_header_locale_has_locale_t = yes; then gl_cv_header_locale_h_needs_xlocale_h=no else gl_cv_header_locale_h_needs_xlocale_h=yes fi else HAVE_XLOCALE_H=0 gl_cv_header_locale_h_needs_xlocale_h=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct lconv is properly defined" >&5 $as_echo_n "checking whether struct lconv is properly defined... " >&6; } if ${gl_cv_sys_struct_lconv_ok+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include struct lconv l; int x = sizeof (l.decimal_point); int y = sizeof (l.int_p_cs_precedes); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_sys_struct_lconv_ok=yes else gl_cv_sys_struct_lconv_ok=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_lconv_ok" >&5 $as_echo "$gl_cv_sys_struct_lconv_ok" >&6; } if test $gl_cv_sys_struct_lconv_ok = no; then REPLACE_STRUCT_LCONV=1 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_locale_h='<'locale.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_locale_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'locale.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_locale_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_locale_h gl_cv_next_locale_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_locale_h" >&5 $as_echo "$gl_cv_next_locale_h" >&6; } fi NEXT_LOCALE_H=$gl_cv_next_locale_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'locale.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_locale_h fi NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive for gl_func in setlocale duplocale; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Some systems provide declarations in a non-standard header. */ #if HAVE_XLOCALE_H # include #endif int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test $REPLACE_STRUCT_LCONV = 1; then REPLACE_LOCALECONV=1 fi if test $REPLACE_LOCALECONV = 1; then gl_LIBOBJS="$gl_LIBOBJS localeconv.$ac_objext" ac_fn_c_check_member "$LINENO" "struct lconv" "decimal_point" "ac_cv_member_struct_lconv_decimal_point" "#include " if test "x$ac_cv_member_struct_lconv_decimal_point" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_LCONV_DECIMAL_POINT 1 _ACEOF fi fi GNULIB_LOCALECONV=1 $as_echo "#define GNULIB_TEST_LOCALECONV 1" >>confdefs.h if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include " if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then : has_rwlock=true $as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h fi if $has_rwlock; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 $as_echo_n "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } if ${gl_cv_pthread_rwlock_rdlock_prefer_writer+:} false; then : $as_echo_n "(cached) " >&6 else save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" if test "$cross_compiling" = yes; then : gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_pthread_rwlock_rdlock_prefer_writer=yes else gl_cv_pthread_rwlock_rdlock_prefer_writer=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 $as_echo "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) $as_echo "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h ;; esac fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi : cat >>confdefs.h <<_ACEOF #define GNULIB_LOCK 1 _ACEOF for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* \ | hpux* | solaris* | cygwin* | mingw*) ac_cv_func_malloc_0_nonnull=yes ;; # If we don't know, assume the worst. *) ac_cv_func_malloc_0_nonnull=no ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { char *p = malloc (0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC_GNU 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC_GNU 0" >>confdefs.h REPLACE_MALLOC=1 fi if test $REPLACE_MALLOC = 1; then gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" fi cat >>confdefs.h <<_ACEOF #define GNULIB_MALLOC_GNU 1 _ACEOF if test $gl_cv_func_malloc_posix = yes; then $as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h else REPLACE_MALLOC=1 fi if test $REPLACE_MALLOC = 1; then gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" fi GNULIB_MALLOC_POSIX=1 $as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_math_h='<'math.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_math_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_math_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'math.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_math_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_math_h gl_cv_next_math_h='"'$gl_header'"' else gl_cv_next_math_h='<'math.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_math_h" >&5 $as_echo "$gl_cv_next_math_h" >&6; } fi NEXT_MATH_H=$gl_cv_next_math_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'math.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_math_h fi NEXT_AS_FIRST_DIRECTIVE_MATH_H=$gl_next_as_first_directive { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NAN macro works" >&5 $as_echo_n "checking whether NAN macro works... " >&6; } if ${gl_cv_header_math_nan_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { /* Solaris 10 has a broken definition of NAN. Other platforms fail to provide NAN, or provide it only in C99 mode; this test only needs to fail when NAN is provided but wrong. */ float f = 1.0f; #ifdef NAN f = NAN; #endif return f == 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_math_nan_works=yes else gl_cv_header_math_nan_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_nan_works" >&5 $as_echo "$gl_cv_header_math_nan_works" >&6; } if test $gl_cv_header_math_nan_works = no; then REPLACE_NAN=1 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether HUGE_VAL works" >&5 $as_echo_n "checking whether HUGE_VAL works... " >&6; } if ${gl_cv_header_math_huge_val_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { /* Solaris 10 has a broken definition of HUGE_VAL. */ double d = HUGE_VAL; return d == 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_math_huge_val_works=yes else gl_cv_header_math_huge_val_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_huge_val_works" >&5 $as_echo "$gl_cv_header_math_huge_val_works" >&6; } if test $gl_cv_header_math_huge_val_works = no; then REPLACE_HUGE_VAL=1 fi for gl_func in acosf acosl asinf asinl atanf atanl cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf expf expl exp2 exp2f exp2l expm1 expm1f expm1l fabsf fabsl floorf floorl fma fmaf fmal fmod fmodf fmodl frexpf frexpl hypotf hypotl ilogb ilogbf ilogbl ldexpf ldexpl log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l logb logbf logbl modf modff modfl powf remainder remainderf remainderl rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl tanf tanl tanhf trunc truncf truncl; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 $as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac if test $LOCALE_JA != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_incomplete_state=yes else gl_cv_func_mbrtowc_incomplete_state=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 $as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 $as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_sanitycheck=yes else gl_cv_func_mbrtowc_sanitycheck=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 $as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 ac_fn_c_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" " /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include " if test "x$ac_cv_have_decl_mbrtowc" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_MBRTOWC $ac_have_decl _ACEOF if test $ac_cv_have_decl_mbrtowc = yes; then REPLACE_MBRTOWC=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOWC=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5 $as_echo_n "checking whether mbrtowc handles a NULL pwc argument... " >&6; } if ${gl_cv_func_mbrtowc_null_arg1+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "\303\237er"; mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 5, &state); if (ret != 2) result |= 1; if (!mbsinit (&state)) result |= 2; memset (&state, '\0', sizeof (mbstate_t)); ret = mbrtowc (NULL, input, 5, &state); if (ret != 2) /* Solaris 7 fails here: ret is -1. */ result |= 4; if (!mbsinit (&state)) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_null_arg1=yes else gl_cv_func_mbrtowc_null_arg1=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5 $as_echo "$gl_cv_func_mbrtowc_null_arg1" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5 $as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; } if ${gl_cv_func_mbrtowc_null_arg2+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { mbstate_t state; wchar_t wc; int ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_null_arg2=yes else gl_cv_func_mbrtowc_null_arg2=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5 $as_echo "$gl_cv_func_mbrtowc_null_arg2" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5 $as_echo_n "checking whether mbrtowc has a correct return value... " >&6; } if ${gl_cv_func_mbrtowc_retval+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on HP-UX, Solaris, native Windows. hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_retval="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ || { case "$host_os" in mingw*) true;; *) false;; esac; }; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { int result = 0; int found_some_locale = 0; /* This fails on Solaris. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 1) result |= 1; } found_some_locale = 1; } /* This fails on HP-UX 11.11. */ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 2) result |= 2; } found_some_locale = 1; } /* This fails on native Windows. */ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 4; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 8; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 16; } found_some_locale = 1; } return (found_some_locale ? result : 77); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_retval=yes else if test $? != 77; then gl_cv_func_mbrtowc_retval=no fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5 $as_echo "$gl_cv_func_mbrtowc_retval" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 $as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } if ${gl_cv_func_mbrtowc_nul_retval+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on Solaris 8 and 9. solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { /* This fails on Solaris 8 and 9. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_nul_retval=yes else gl_cv_func_mbrtowc_nul_retval=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 $as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works on empty input" >&5 $as_echo_n "checking whether mbrtowc works on empty input... " >&6; } if ${gl_cv_func_mbrtowc_empty_input+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include static wchar_t wc; static mbstate_t mbs; int main (void) { return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_empty_input=yes else gl_cv_func_mbrtowc_empty_input=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_empty_input" >&5 $as_echo "$gl_cv_func_mbrtowc_empty_input" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 $as_echo_n "checking whether the C locale is free of encoding errors... " >&6; } if ${gl_cv_C_locale_sans_EILSEQ+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_C_locale_sans_EILSEQ="guessing no" if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_C_locale_sans_EILSEQ="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_C_locale_sans_EILSEQ=yes else gl_cv_C_locale_sans_EILSEQ=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_C_locale_sans_EILSEQ" >&5 $as_echo "$gl_cv_C_locale_sans_EILSEQ" >&6; } case "$gl_cv_func_mbrtowc_null_arg1" in *yes) ;; *) $as_echo "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_null_arg2" in *yes) ;; *) $as_echo "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_retval" in *yes) ;; *) $as_echo "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_nul_retval" in *yes) ;; *) $as_echo "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) $as_echo "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case $gl_cv_C_locale_sans_EILSEQ in *yes) ;; *) $as_echo "#define C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac fi fi if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext" : fi GNULIB_MBRTOWC=1 $as_echo "#define GNULIB_TEST_MBRTOWC 1" >>confdefs.h GNULIB_MBSCHR=1 $as_echo "#define GNULIB_TEST_MBSCHR 1" >>confdefs.h if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 $as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac if test $LOCALE_JA != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_incomplete_state=yes else gl_cv_func_mbrtowc_incomplete_state=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 $as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 $as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_sanitycheck=yes else gl_cv_func_mbrtowc_sanitycheck=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 $as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi if test $ac_cv_func_mbsinit = no; then HAVE_MBSINIT=0 ac_fn_c_check_decl "$LINENO" "mbsinit" "ac_cv_have_decl_mbsinit" " /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include " if test "x$ac_cv_have_decl_mbsinit" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_MBSINIT $ac_have_decl _ACEOF if test $ac_cv_have_decl_mbsinit = yes; then REPLACE_MBSINIT=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSINIT=1 else case "$host_os" in mingw*) REPLACE_MBSINIT=1 ;; esac fi fi if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then gl_LIBOBJS="$gl_LIBOBJS mbsinit.$ac_objext" : fi GNULIB_MBSINIT=1 $as_echo "#define GNULIB_TEST_MBSINIT 1" >>confdefs.h GNULIB_MBSPBRK=1 $as_echo "#define GNULIB_TEST_MBSPBRK 1" >>confdefs.h GNULIB_MBSSPN=1 $as_echo "#define GNULIB_TEST_MBSSPN 1" >>confdefs.h GNULIB_MBSTOK_R=1 $as_echo "#define GNULIB_TEST_MBSTOK_R 1" >>confdefs.h if false; then REPLACE_MBTOWC=1 fi if test $REPLACE_MBTOWC = 1; then gl_LIBOBJS="$gl_LIBOBJS mbtowc.$ac_objext" : fi GNULIB_MBTOWC=1 $as_echo "#define GNULIB_TEST_MBTOWC 1" >>confdefs.h : if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext" for ac_header in bp-sym.h do : ac_fn_c_check_header_mongrel "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default" if test "x$ac_cv_header_bp_sym_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BP_SYM_H 1 _ACEOF fi done fi GNULIB_MEMCHR=1 $as_echo "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h for ac_func in mempcpy do : ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy" if test "x$ac_cv_func_mempcpy" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MEMPCPY 1 _ACEOF fi done if test $ac_cv_func_mempcpy = no; then HAVE_MEMPCPY=0 fi if test $HAVE_MEMPCPY = 0; then gl_LIBOBJS="$gl_LIBOBJS mempcpy.$ac_objext" : fi GNULIB_MEMPCPY=1 $as_echo "#define GNULIB_TEST_MEMPCPY 1" >>confdefs.h if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then gl_LIBOBJS="$gl_LIBOBJS msvc-inval.$ac_objext" fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then gl_LIBOBJS="$gl_LIBOBJS msvc-nothrow.$ac_objext" fi cat >>confdefs.h <<_ACEOF #define GNULIB_MSVC_NOTHROW 1 _ACEOF if test $ac_cv_func_nl_langinfo = yes; then # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether YESEXPR works" >&5 $as_echo_n "checking whether YESEXPR works... " >&6; } if ${gl_cv_func_nl_langinfo_yesexpr_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess no on irix systems. irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; # Guess yes elsewhere. *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !*nl_langinfo(YESEXPR); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_nl_langinfo_yesexpr_works=yes else gl_cv_func_nl_langinfo_yesexpr_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_nl_langinfo_yesexpr_works" >&5 $as_echo "$gl_cv_func_nl_langinfo_yesexpr_works" >&6; } case $gl_cv_func_nl_langinfo_yesexpr_works in *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; esac cat >>confdefs.h <<_ACEOF #define FUNC_NL_LANGINFO_YESEXPR_WORKS $FUNC_NL_LANGINFO_YESEXPR_WORKS _ACEOF if test $HAVE_LANGINFO_CODESET = 1 && test $HAVE_LANGINFO_ERA = 1 \ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1; then : else REPLACE_NL_LANGINFO=1 $as_echo "#define REPLACE_NL_LANGINFO 1" >>confdefs.h fi else HAVE_NL_LANGINFO=0 fi if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then gl_LIBOBJS="$gl_LIBOBJS nl_langinfo.$ac_objext" fi GNULIB_NL_LANGINFO=1 $as_echo "#define GNULIB_TEST_NL_LANGINFO 1" >>confdefs.h for ac_header in sys/pstat.h sys/sysmp.h sys/param.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/sysctl.h do : ac_fn_c_check_header_compile "$LINENO" "sys/sysctl.h" "ac_cv_header_sys_sysctl_h" "$ac_includes_default #if HAVE_SYS_PARAM_H # include #endif " if test "x$ac_cv_header_sys_sysctl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SYSCTL_H 1 _ACEOF fi done for ac_func in sched_getaffinity sched_getaffinity_np \ pstat_getdynamic sysmp sysctl do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test $ac_cv_func_sched_getaffinity = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glibc compatible sched_getaffinity" >&5 $as_echo_n "checking for glibc compatible sched_getaffinity... " >&6; } if ${gl_cv_func_sched_getaffinity3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { sched_getaffinity (0, 0, (cpu_set_t *) 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_sched_getaffinity3=yes else gl_cv_func_sched_getaffinity3=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_sched_getaffinity3" >&5 $as_echo "$gl_cv_func_sched_getaffinity3" >&6; } if test $gl_cv_func_sched_getaffinity3 = yes; then $as_echo "#define HAVE_SCHED_GETAFFINITY_LIKE_GLIBC 1" >>confdefs.h fi fi for ac_func in rawmemchr do : ac_fn_c_check_func "$LINENO" "rawmemchr" "ac_cv_func_rawmemchr" if test "x$ac_cv_func_rawmemchr" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_RAWMEMCHR 1 _ACEOF fi done if test $ac_cv_func_rawmemchr = no; then HAVE_RAWMEMCHR=0 fi if test $HAVE_RAWMEMCHR = 0; then gl_LIBOBJS="$gl_LIBOBJS rawmemchr.$ac_objext" : fi GNULIB_RAWMEMCHR=1 $as_echo "#define GNULIB_TEST_RAWMEMCHR 1" >>confdefs.h # Check whether --with-included-regex was given. if test "${with_included_regex+set}" = set; then : withval=$with_included_regex; fi case $with_included_regex in #( yes|no) ac_use_included_regex=$with_included_regex ;; '') # If the system regex support is good enough that it passes the # following run test, then default to *not* using the included regex.c. # If cross compiling, assume the test would fail and use the included # regex.c. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working re_compile_pattern" >&5 $as_echo_n "checking for working re_compile_pattern... " >&6; } if ${gl_cv_func_re_compile_pattern_working+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;; # Otherwise, assume it is not working. *) gl_cv_func_re_compile_pattern_working="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #if defined M_CHECK_ACTION || HAVE_DECL_ALARM # include # include #endif #if HAVE_MALLOC_H # include #endif #ifdef M_CHECK_ACTION /* Exit with distinguishable exit code. */ static void sigabrt_no_core (int sig) { raise (SIGTERM); } #endif int main () { int result = 0; static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; /* Some builds of glibc go into an infinite loop on this test. Use alarm to force death, and mallopt to avoid malloc recursion in diagnosing the corrupted heap. */ #if HAVE_DECL_ALARM signal (SIGALRM, SIG_DFL); alarm (2); #endif #ifdef M_CHECK_ACTION signal (SIGABRT, sigabrt_no_core); mallopt (M_CHECK_ACTION, 2); #endif if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else if (re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s) != -1) result |= 1; regfree (®ex); } { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in . */ static char const pat[] = "[^x]x"; static char const data[] = /* */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) result |= 1; } regfree (®ex); } if (! setlocale (LC_ALL, "C")) return 1; } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[^x]b", 6, ®ex); if (s) result |= 2; /* This should fail, but succeeds for glibc-2.5. */ else if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; s = re_compile_pattern ("a[[:]:]]b\n", 11, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) result |= 4; /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[b-a]", 6, ®ex); if (s == 0) result |= 8; /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("{1", 2, ®ex); if (s) result |= 8; /* The following example is derived from a problem report against gawk from Jorge Stolfi . */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[an\371]*n", 7, ®ex); if (s) result |= 8; /* This should match, but does not for glibc-2.2.1. */ else if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; /* glibc-2.2.93 does not work with a negative RANGE argument. */ else if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 16; else if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) result |= 16; /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, ®ex); if (s) result |= 32; /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) result |= 64; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_re_compile_pattern_working=yes else gl_cv_func_re_compile_pattern_working=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_re_compile_pattern_working" >&5 $as_echo "$gl_cv_func_re_compile_pattern_working" >&6; } case "$gl_cv_func_re_compile_pattern_working" in #( *yes) ac_use_included_regex=no;; #( *no) ac_use_included_regex=yes;; esac ;; *) as_fn_error $? "Invalid value for --with-included-regex: $with_included_regex" "$LINENO" 5 ;; esac if test $ac_use_included_regex = yes; then $as_echo "#define _REGEX_INCLUDE_LIMITS_H 1" >>confdefs.h $as_echo "#define _REGEX_LARGE_OFFSETS 1" >>confdefs.h $as_echo "#define re_syntax_options rpl_re_syntax_options" >>confdefs.h $as_echo "#define re_set_syntax rpl_re_set_syntax" >>confdefs.h $as_echo "#define re_compile_pattern rpl_re_compile_pattern" >>confdefs.h $as_echo "#define re_compile_fastmap rpl_re_compile_fastmap" >>confdefs.h $as_echo "#define re_search rpl_re_search" >>confdefs.h $as_echo "#define re_search_2 rpl_re_search_2" >>confdefs.h $as_echo "#define re_match rpl_re_match" >>confdefs.h $as_echo "#define re_match_2 rpl_re_match_2" >>confdefs.h $as_echo "#define re_set_registers rpl_re_set_registers" >>confdefs.h $as_echo "#define re_comp rpl_re_comp" >>confdefs.h $as_echo "#define re_exec rpl_re_exec" >>confdefs.h $as_echo "#define regcomp rpl_regcomp" >>confdefs.h $as_echo "#define regexec rpl_regexec" >>confdefs.h $as_echo "#define regerror rpl_regerror" >>confdefs.h $as_echo "#define regfree rpl_regfree" >>confdefs.h fi if test $ac_use_included_regex = yes; then gl_LIBOBJS="$gl_LIBOBJS regex.$ac_objext" for ac_header in libintl.h do : ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBINTL_H 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include " if test "x$ac_cv_have_decl_isblank" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ISBLANK $ac_have_decl _ACEOF fi for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 $as_echo_n "checking for SIZE_MAX... " >&6; } if ${gl_cv_size_max+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_size_max= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Found it" >/dev/null 2>&1; then : gl_cv_size_max=yes fi rm -f conftest* if test -z "$gl_cv_size_max"; then if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include #include "; then : else size_t_bits_minus_1= fi if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include "; then : else fits_in_uint= fi if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern size_t foo; extern unsigned long foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : fits_in_uint=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else gl_cv_size_max='((size_t)~(size_t)0)' fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 $as_echo "$gl_cv_size_max" >&6; } if test "$gl_cv_size_max" != yes; then cat >>confdefs.h <<_ACEOF #define SIZE_MAX $gl_cv_size_max _ACEOF fi ac_fn_c_check_decl "$LINENO" "sleep" "ac_cv_have_decl_sleep" "#include " if test "x$ac_cv_have_decl_sleep" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SLEEP $ac_have_decl _ACEOF if test $ac_cv_have_decl_sleep != yes; then HAVE_SLEEP=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working sleep" >&5 $as_echo_n "checking for working sleep... " >&6; } if ${gl_cv_func_sleep_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_sleep_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_sleep_works="guessing no" ;; # If we don't know, assume the worst. *) gl_cv_func_sleep_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (2); } int main () { /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also lack sleep. */ unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ unsigned int remaining; signal (SIGALRM, handle_alarm); alarm (1); remaining = sleep (pentecost); if (remaining > pentecost) return 3; if (remaining <= pentecost - 10) return 4; return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_sleep_works=yes else gl_cv_func_sleep_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_sleep_works" >&5 $as_echo "$gl_cv_func_sleep_works" >&6; } case "$gl_cv_func_sleep_works" in *yes) ;; *) REPLACE_SLEEP=1 ;; esac fi if test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1; then gl_LIBOBJS="$gl_LIBOBJS sleep.$ac_objext" fi GNULIB_SLEEP=1 $as_echo "#define GNULIB_TEST_SLEEP 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 $as_echo_n "checking for ssize_t... " >&6; } if ${gt_cv_ssize_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_ssize_t=yes else gt_cv_ssize_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5 $as_echo "$gt_cv_ssize_t" >&6; } if test $gt_cv_ssize_t = no; then $as_echo "#define ssize_t int" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working stdalign.h" >&5 $as_echo_n "checking for working stdalign.h... " >&6; } if ${gl_cv_header_working_stdalign_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* Test that alignof yields a result consistent with offsetof. This catches GCC bug 52023 . */ #ifdef __cplusplus template struct alignof_helper { char a; t b; }; # define ao(type) offsetof (alignof_helper, b) #else # define ao(type) offsetof (struct { char a; type b; }, b) #endif char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; /* Test _Alignas only on platforms where gnulib can help. */ #if \ ((defined __cplusplus && 201103 <= __cplusplus) \ || (defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \ || 1300 <= _MSC_VER) struct alignas_test { char c; char alignas (8) alignas_8; }; char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 ? 1 : -1]; #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_working_stdalign_h=yes else gl_cv_header_working_stdalign_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdalign_h" >&5 $as_echo "$gl_cv_header_working_stdalign_h" >&6; } if test $gl_cv_header_working_stdalign_h = yes; then STDALIGN_H='' else STDALIGN_H='stdalign.h' fi if test -n "$STDALIGN_H"; then GL_GENERATE_STDALIGN_H_TRUE= GL_GENERATE_STDALIGN_H_FALSE='#' else GL_GENERATE_STDALIGN_H_TRUE='#' GL_GENERATE_STDALIGN_H_FALSE= fi # Define two additional variables used in the Makefile substitution. if test "$ac_cv_header_stdbool_h" = yes; then STDBOOL_H='' else STDBOOL_H='stdbool.h' fi if test -n "$STDBOOL_H"; then GL_GENERATE_STDBOOL_H_TRUE= GL_GENERATE_STDBOOL_H_FALSE='#' else GL_GENERATE_STDBOOL_H_TRUE='#' GL_GENERATE_STDBOOL_H_FALSE= fi if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi STDDEF_H= ac_fn_c_check_type "$LINENO" "max_align_t" "ac_cv_type_max_align_t" "#include " if test "x$ac_cv_type_max_align_t" = xyes; then : else HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 $as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } if ${gl_cv_decl_null_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int test[2 * (sizeof NULL == sizeof (void *)) -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_decl_null_works=yes else gl_cv_decl_null_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 $as_echo "$gl_cv_decl_null_works" >&6; } if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi if test -n "$STDDEF_H"; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= fi if test -n "$STDDEF_H"; then if test $gl_cv_have_include_next = yes; then gl_cv_next_stddef_h='<'stddef.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stddef_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stddef_h gl_cv_next_stddef_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 $as_echo "$gl_cv_next_stddef_h" >&6; } fi NEXT_STDDEF_H=$gl_cv_next_stddef_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stddef.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stddef_h fi NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive fi $as_echo "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdio_h='<'stdio.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdio_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdio.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdio_h gl_cv_next_stdio_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5 $as_echo "$gl_cv_next_stdio_h" >&6; } fi NEXT_STDIO_H=$gl_cv_next_stdio_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdio.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdio_h fi NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive { $as_echo "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5 $as_echo_n "checking which flavor of printf attribute matches inttypes macros... " >&6; } if ${gl_cv_func_printf_attribute_flavor+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define __STDC_FORMAT_MACROS 1 #include #include /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_printf_attribute_flavor=system else gl_cv_func_printf_attribute_flavor=gnu fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5 $as_echo "$gl_cv_func_printf_attribute_flavor" >&6; } if test "$gl_cv_func_printf_attribute_flavor" = gnu; then $as_echo "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h fi GNULIB_FSCANF=1 cat >>confdefs.h <<_ACEOF #define GNULIB_FSCANF 1 _ACEOF GNULIB_SCANF=1 cat >>confdefs.h <<_ACEOF #define GNULIB_SCANF 1 _ACEOF GNULIB_FGETC=1 GNULIB_GETC=1 GNULIB_GETCHAR=1 GNULIB_FGETS=1 GNULIB_FREAD=1 GNULIB_FPRINTF=1 GNULIB_PRINTF=1 GNULIB_VFPRINTF=1 GNULIB_VPRINTF=1 GNULIB_FPUTC=1 GNULIB_PUTC=1 GNULIB_PUTCHAR=1 GNULIB_FPUTS=1 GNULIB_PUTS=1 GNULIB_FWRITE=1 for gl_func in dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test $gl_cv_have_include_next = yes; then gl_cv_next_stdlib_h='<'stdlib.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdlib_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdlib.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdlib_h gl_cv_next_stdlib_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5 $as_echo "$gl_cv_next_stdlib_h" >&6; } fi NEXT_STDLIB_H=$gl_cv_next_stdlib_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdlib.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdlib_h fi NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive for gl_func in _Exit atoll canonicalize_file_name getloadavg getsubopt grantpt initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtoll strtoull unlockpt unsetenv; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_SYS_LOADAVG_H # include #endif #if HAVE_RANDOM_H # include #endif int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done for ac_func in strcasecmp do : ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" if test "x$ac_cv_func_strcasecmp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRCASECMP 1 _ACEOF fi done if test $ac_cv_func_strcasecmp = no; then HAVE_STRCASECMP=0 fi for ac_func in strncasecmp do : ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp" if test "x$ac_cv_func_strncasecmp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRNCASECMP 1 _ACEOF fi done if test $ac_cv_func_strncasecmp = yes; then HAVE_STRNCASECMP=1 else HAVE_STRNCASECMP=0 fi ac_fn_c_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "$ac_includes_default" if test "x$ac_cv_have_decl_strncasecmp" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRNCASECMP $ac_have_decl _ACEOF if test $ac_cv_have_decl_strncasecmp = no; then HAVE_DECL_STRNCASECMP=0 fi if test $HAVE_STRCASECMP = 0; then gl_LIBOBJS="$gl_LIBOBJS strcasecmp.$ac_objext" : fi if test $HAVE_STRNCASECMP = 0; then gl_LIBOBJS="$gl_LIBOBJS strncasecmp.$ac_objext" : fi for ac_func in strchrnul do : ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul" if test "x$ac_cv_func_strchrnul" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRCHRNUL 1 _ACEOF fi done if test $ac_cv_func_strchrnul = no; then HAVE_STRCHRNUL=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strchrnul works" >&5 $as_echo_n "checking whether strchrnul works... " >&6; } if ${gl_cv_func_strchrnul_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __CYGWIN__ #include #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) Lucky user #endif #else Lucky user #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1; then : gl_cv_func_strchrnul_works="guessing yes" else gl_cv_func_strchrnul_works="guessing no" fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* for strchrnul */ int main () { const char *buf = "a"; return strchrnul (buf, 'b') != buf + 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strchrnul_works=yes else gl_cv_func_strchrnul_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strchrnul_works" >&5 $as_echo "$gl_cv_func_strchrnul_works" >&6; } case "$gl_cv_func_strchrnul_works" in *yes) ;; *) REPLACE_STRCHRNUL=1 ;; esac fi if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then gl_LIBOBJS="$gl_LIBOBJS strchrnul.$ac_objext" : fi GNULIB_STRCHRNUL=1 $as_echo "#define GNULIB_TEST_STRCHRNUL 1" >>confdefs.h if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 $as_echo_n "checking for working strerror function... " >&6; } if ${gl_cv_func_working_strerror+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_working_strerror="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { if (!*strerror (-2)) return 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_working_strerror=yes else gl_cv_func_working_strerror=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_strerror" >&5 $as_echo "$gl_cv_func_working_strerror" >&6; } case "$gl_cv_func_working_strerror" in *yes) ;; *) REPLACE_STRERROR=1 ;; esac case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac else REPLACE_STRERROR=1 fi if test $REPLACE_STRERROR = 1; then gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext" fi cat >>confdefs.h <<_ACEOF #define GNULIB_STRERROR 1 _ACEOF GNULIB_STRERROR=1 $as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then gl_LIBOBJS="$gl_LIBOBJS strerror-override.$ac_objext" if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi fi if test $ac_cv_have_decl_strndup = no; then HAVE_DECL_STRNDUP=0 fi if test $ac_cv_func_strndup = yes; then HAVE_STRNDUP=1 # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strndup" >&5 $as_echo_n "checking for working strndup... " >&6; } if ${gl_cv_func_strndup_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case $host_os in aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; *) gl_cv_func_strndup_works="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if !HAVE_DECL_STRNDUP extern #ifdef __cplusplus "C" #endif char *strndup (const char *, size_t); #endif int result; char *s; s = strndup ("some longer string", 15); free (s); s = strndup ("shorter string", 13); result = s[13] != '\0'; free (s); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strndup_works=yes else gl_cv_func_strndup_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strndup_works" >&5 $as_echo "$gl_cv_func_strndup_works" >&6; } case $gl_cv_func_strndup_works in *no) REPLACE_STRNDUP=1 ;; esac else HAVE_STRNDUP=0 fi if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then gl_LIBOBJS="$gl_LIBOBJS strndup.$ac_objext" fi GNULIB_STRNDUP=1 $as_echo "#define GNULIB_TEST_STRNDUP 1" >>confdefs.h if test $ac_cv_have_decl_strnlen = no; then HAVE_DECL_STRNLEN=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strnlen" >&5 $as_echo_n "checking for working strnlen... " >&6; } if ${ac_cv_func_strnlen_working+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : # Guess no on AIX systems, yes otherwise. case "$host_os" in aix*) ac_cv_func_strnlen_working=no;; *) ac_cv_func_strnlen_working=yes;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { #define S "foobar" #define S_LEN (sizeof S - 1) /* At least one implementation is buggy: that of AIX 4.3 would give strnlen (S, 1) == 3. */ int i; for (i = 0; i < S_LEN + 1; ++i) { int expected = i <= S_LEN ? i : S_LEN; if (strnlen (S, i) != expected) return 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strnlen_working=yes else ac_cv_func_strnlen_working=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strnlen_working" >&5 $as_echo "$ac_cv_func_strnlen_working" >&6; } test $ac_cv_func_strnlen_working = no && : if test $ac_cv_func_strnlen_working = no; then REPLACE_STRNLEN=1 fi fi if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then gl_LIBOBJS="$gl_LIBOBJS strnlen.$ac_objext" : fi GNULIB_STRNLEN=1 $as_echo "#define GNULIB_TEST_STRNLEN 1" >>confdefs.h if test $HAVE_STRTOD = 1; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strtod obeys C99" >&5 $as_echo_n "checking whether strtod obeys C99... " >&6; } if ${gl_cv_func_strtod_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1; then : gl_cv_func_strtod_works="guessing yes" else case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_strtod_works="guessing yes" ;; *) gl_cv_func_strtod_works="guessing no" ;; esac fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } int main () { int result = 0; { /* In some old versions of Linux (2000 or before), strtod mis-parses strings with leading '+'. */ const char *string = " +69"; char *term; double value = strtod (string, &term); if (value != 69 || term != (string + 4)) result |= 1; } { /* Under Solaris 2.4, strtod returns the wrong value for the terminating character under some conditions. */ const char *string = "NaN"; char *term; strtod (string, &term); if (term != string && *(term - 1) == 0) result |= 2; } { /* Older glibc and Cygwin mis-parse "-0x". */ const char *string = "-0x"; char *term; double value = strtod (string, &term); double zero = 0.0; if (1.0 / value != -1.0 / zero || term != (string + 2)) result |= 4; } { /* Many platforms do not parse hex floats. */ const char *string = "0XaP+1"; char *term; double value = strtod (string, &term); if (value != 20.0 || term != (string + 6)) result |= 8; } { /* Many platforms do not parse infinities. HP-UX 11.31 parses inf, but mistakenly sets errno. */ const char *string = "inf"; char *term; double value; errno = 0; value = strtod (string, &term); if (value != HUGE_VAL || term != (string + 3) || errno) result |= 16; } { /* glibc 2.7 and cygwin 1.5.24 misparse "nan()". */ const char *string = "nan()"; char *term; double value = strtod (string, &term); if (numeric_equal (value, value) || term != (string + 5)) result |= 32; } { /* darwin 10.6.1 misparses "nan(". */ const char *string = "nan("; char *term; double value = strtod (string, &term); if (numeric_equal (value, value) || term != (string + 3)) result |= 64; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strtod_works=yes else gl_cv_func_strtod_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strtod_works" >&5 $as_echo "$gl_cv_func_strtod_works" >&6; } case "$gl_cv_func_strtod_works" in *yes) ;; *) REPLACE_STRTOD=1 ;; esac fi if test $HAVE_STRTOD = 0 || test $REPLACE_STRTOD = 1; then gl_LIBOBJS="$gl_LIBOBJS strtod.$ac_objext" if test $gl_cv_func_ldexp_no_libm = yes; then $as_echo "#define HAVE_LDEXP_IN_LIBC 1" >>confdefs.h fi fi GNULIB_STRTOD=1 $as_echo "#define GNULIB_TEST_STRTOD 1" >>confdefs.h for ac_func in strtok_r do : ac_fn_c_check_func "$LINENO" "strtok_r" "ac_cv_func_strtok_r" if test "x$ac_cv_func_strtok_r" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRTOK_R 1 _ACEOF fi done if test $ac_cv_func_strtok_r = yes; then HAVE_STRTOK_R=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strtok_r works" >&5 $as_echo_n "checking whether strtok_r works... " >&6; } if ${gl_cv_func_strtok_r_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess no on glibc systems. *-gnu*) gl_cv_func_strtok_r_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strtok_r_works="guessing yes" ;; *) gl_cv_func_strtok_r_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __OPTIMIZE__ # define __OPTIMIZE__ 1 #endif #undef __OPTIMIZE_SIZE__ #undef __NO_INLINE__ #include #include int main () { static const char dummy[] = "\177\01a"; char delimiters[] = "xxxxxxxx"; char *save_ptr = (char *) dummy; strtok_r (delimiters, "x", &save_ptr); strtok_r (NULL, "x", &save_ptr); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strtok_r_works=yes else gl_cv_func_strtok_r_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strtok_r_works" >&5 $as_echo "$gl_cv_func_strtok_r_works" >&6; } case "$gl_cv_func_strtok_r_works" in *no) UNDEFINE_STRTOK_R=1 ;; esac else HAVE_STRTOK_R=0 fi if test $ac_cv_have_decl_strtok_r = no; then HAVE_DECL_STRTOK_R=0 fi if test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1; then gl_LIBOBJS="$gl_LIBOBJS strtok_r.$ac_objext" : fi GNULIB_STRTOK_R=1 $as_echo "#define GNULIB_TEST_STRTOK_R 1" >>confdefs.h if test $ac_cv_header_sysexits_h = yes; then HAVE_SYSEXITS_H=1 if test $gl_cv_have_include_next = yes; then gl_cv_next_sysexits_h='<'sysexits.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sysexits_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_sysexits_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sysexits.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sysexits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sysexits_h gl_cv_next_sysexits_h='"'$gl_header'"' else gl_cv_next_sysexits_h='<'sysexits.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sysexits_h" >&5 $as_echo "$gl_cv_next_sysexits_h" >&6; } fi NEXT_SYSEXITS_H=$gl_cv_next_sysexits_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sysexits.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sysexits_h fi NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H=$gl_next_as_first_directive cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { switch (0) { case EX_OK: case EX_USAGE: case EX_DATAERR: case EX_NOINPUT: case EX_NOUSER: case EX_NOHOST: case EX_UNAVAILABLE: case EX_SOFTWARE: case EX_OSERR: case EX_OSFILE: case EX_CANTCREAT: case EX_IOERR: case EX_TEMPFAIL: case EX_PROTOCOL: case EX_NOPERM: case EX_CONFIG: break; } ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : SYSEXITS_H= else SYSEXITS_H=sysexits.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else HAVE_SYSEXITS_H=0 SYSEXITS_H=sysexits.h fi if test -n "$SYSEXITS_H"; then GL_GENERATE_SYSEXITS_H_TRUE= GL_GENERATE_SYSEXITS_H_FALSE='#' else GL_GENERATE_SYSEXITS_H_TRUE='#' GL_GENERATE_SYSEXITS_H_FALSE= fi if test $gl_cv_have_include_next = yes; then gl_cv_next_unistd_h='<'unistd.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_unistd_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_unistd_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'unistd.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_unistd_h gl_cv_next_unistd_h='"'$gl_header'"' else gl_cv_next_unistd_h='<'unistd.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5 $as_echo "$gl_cv_next_unistd_h" >&6; } fi NEXT_UNISTD_H=$gl_cv_next_unistd_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'unistd.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_unistd_h fi NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi for gl_func in chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat truncate ttyname_r unlink unlinkat usleep; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H # include #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include # endif #endif int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4 } } } } }; then LIBUNISTRING_UNITYPES_H='unitypes.h' else LIBUNISTRING_UNITYPES_H= fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4 } } } } }; then LIBUNISTRING_UNIWIDTH_H='uniwidth.h' else LIBUNISTRING_UNIWIDTH_H= fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 8 } } } } }; then LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE= LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE='#' else LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE='#' LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE= fi if test $ac_cv_func_vasnprintf = no; then gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" if test $ac_cv_func_vasnprintf = yes; then $as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : else $as_echo "#define ptrdiff_t long" >>confdefs.h fi fi gl_cv_func_vsnprintf_usable=no for ac_func in vsnprintf do : ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" if test "x$ac_cv_func_vsnprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VSNPRINTF 1 _ACEOF fi done if test $ac_cv_func_vsnprintf = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf respects a size of 1" >&5 $as_echo_n "checking whether snprintf respects a size of 1... " >&6; } if ${gl_cv_func_snprintf_size1+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_snprintf_size1="guessing yes" ;; *) gl_cv_func_snprintf_size1="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 1, "%d", 12345); return buf[1] != 'E'; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_snprintf_size1=yes else gl_cv_func_snprintf_size1=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_size1" >&5 $as_echo "$gl_cv_func_snprintf_size1" >&6; } case "$gl_cv_func_snprintf_size1" in *yes) case "$gl_cv_func_snprintf_retval_c99" in *yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5 $as_echo_n "checking whether printf supports POSIX/XSI format strings with positions... " >&6; } if ${gl_cv_func_printf_positions+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) gl_cv_func_printf_positions="guessing no";; beos*) gl_cv_func_printf_positions="guessing no";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_positions="guessing no";; *) gl_cv_func_printf_positions="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_printf_positions=yes else gl_cv_func_printf_positions=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5 $as_echo "$gl_cv_func_printf_positions" >&6; } case "$gl_cv_func_printf_positions" in *yes) gl_cv_func_vsnprintf_usable=yes ;; esac ;; esac ;; esac fi if test $gl_cv_func_vsnprintf_usable = no; then gl_LIBOBJS="$gl_LIBOBJS vsnprintf.$ac_objext" if test $ac_cv_func_vsnprintf = yes; then REPLACE_VSNPRINTF=1 else if test $ac_cv_have_decl_vsnprintf = yes; then REPLACE_VSNPRINTF=1 fi fi : fi if test $ac_cv_have_decl_vsnprintf = no; then HAVE_DECL_VSNPRINTF=0 fi GNULIB_VSNPRINTF=1 $as_echo "#define GNULIB_TEST_VSNPRINTF 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_wchar_h='<'wchar.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_wchar_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_wchar_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'wchar.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_wchar_h gl_cv_next_wchar_h='"'$gl_header'"' else gl_cv_next_wchar_h='<'wchar.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5 $as_echo "$gl_cv_next_wchar_h" >&6; } fi NEXT_WCHAR_H=$gl_cv_next_wchar_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'wchar.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_wchar_h fi NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime ; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 $as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac if test $LOCALE_JA != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_incomplete_state=yes else gl_cv_func_mbrtowc_incomplete_state=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 $as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 $as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_mbrtowc_sanitycheck=yes else gl_cv_func_mbrtowc_sanitycheck=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 $as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi if test $ac_cv_func_wcrtomb = no; then HAVE_WCRTOMB=0 ac_fn_c_check_decl "$LINENO" "wcrtomb" "ac_cv_have_decl_wcrtomb" " /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include " if test "x$ac_cv_have_decl_wcrtomb" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_WCRTOMB $ac_have_decl _ACEOF if test $ac_cv_have_decl_wcrtomb = yes; then REPLACE_WCRTOMB=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_WCRTOMB=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb return value is correct" >&5 $as_echo_n "checking whether wcrtomb return value is correct... " >&6; } if ${gl_cv_func_wcrtomb_retval+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on AIX 4, OSF/1 and Solaris. aix4* | osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_wcrtomb_retval="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_wcrtomb_retval="guessing yes" ;; esac if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 1; } if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 2; } if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 4; } if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_wcrtomb_retval=yes else gl_cv_func_wcrtomb_retval=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_retval" >&5 $as_echo "$gl_cv_func_wcrtomb_retval" >&6; } case "$gl_cv_func_wcrtomb_retval" in *yes) ;; *) REPLACE_WCRTOMB=1 ;; esac fi fi if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then gl_LIBOBJS="$gl_LIBOBJS wcrtomb.$ac_objext" : fi GNULIB_WCRTOMB=1 $as_echo "#define GNULIB_TEST_WCRTOMB 1" >>confdefs.h if test $ac_cv_func_iswcntrl = yes; then HAVE_ISWCNTRL=1 else HAVE_ISWCNTRL=0 fi if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_wctype_h='<'wctype.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_wctype_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_wctype_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'wctype.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_wctype_h gl_cv_next_wctype_h='"'$gl_header'"' else gl_cv_next_wctype_h='<'wctype.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5 $as_echo "$gl_cv_next_wctype_h" >&6; } fi NEXT_WCTYPE_H=$gl_cv_next_wctype_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'wctype.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_wctype_h fi NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5 $as_echo_n "checking whether iswcntrl works... " >&6; } if ${gl_cv_func_iswcntrl_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_iswcntrl_works="guessing yes" else gl_cv_func_iswcntrl_works="guessing no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #include int main () { return iswprint ('x') == 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_iswcntrl_works=yes else gl_cv_func_iswcntrl_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5 $as_echo "$gl_cv_func_iswcntrl_works" >&6; } fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi case "$gl_cv_func_iswcntrl_works" in *yes) REPLACE_ISWCNTRL=0 ;; *) REPLACE_ISWCNTRL=1 ;; esac if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : fi if test $REPLACE_ISWCNTRL = 1; then REPLACE_TOWLOWER=1 else for ac_func in towlower do : ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower" if test "x$ac_cv_func_towlower" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TOWLOWER 1 _ACEOF fi done if test $ac_cv_func_towlower = yes; then REPLACE_TOWLOWER=0 else ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "/* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #if HAVE_WCTYPE_H # include #endif " if test "x$ac_cv_have_decl_towlower" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_TOWLOWER $ac_have_decl _ACEOF if test $ac_cv_have_decl_towlower = yes; then REPLACE_TOWLOWER=1 else REPLACE_TOWLOWER=0 fi fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5 $as_echo_n "checking for wctype_t... " >&6; } if ${gl_cv_type_wctype_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #if HAVE_WCTYPE_H # include #endif wctype_t a; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_wctype_t=yes else gl_cv_type_wctype_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5 $as_echo "$gl_cv_type_wctype_t" >&6; } if test $gl_cv_type_wctype_t = no; then HAVE_WCTYPE_T=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5 $as_echo_n "checking for wctrans_t... " >&6; } if ${gl_cv_type_wctrans_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #include wctrans_t a; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_wctrans_t=yes else gl_cv_type_wctrans_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5 $as_echo "$gl_cv_type_wctrans_t" >&6; } if test $gl_cv_type_wctrans_t = no; then HAVE_WCTRANS_T=0 fi for gl_func in wctype iswctype wctrans towctrans ; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # include #endif #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done ac_fn_c_check_decl "$LINENO" "wcwidth" "ac_cv_have_decl_wcwidth" " /* AIX 3.2.5 declares wcwidth in . */ #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include " if test "x$ac_cv_have_decl_wcwidth" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_WCWIDTH $ac_have_decl _ACEOF if test $ac_cv_have_decl_wcwidth != yes; then HAVE_DECL_WCWIDTH=0 fi if test $ac_cv_func_wcwidth != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth is a macro" >&5 $as_echo_n "checking whether wcwidth is a macro... " >&6; } if ${gl_cv_func_wcwidth_macro+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef wcwidth wchar_header_defines_wcwidth #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "wchar_header_defines_wcwidth" >/dev/null 2>&1; then : gl_cv_func_wcwidth_macro=yes else gl_cv_func_wcwidth_macro=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_macro" >&5 $as_echo "$gl_cv_func_wcwidth_macro" >&6; } fi if test $ac_cv_func_wcwidth = yes || test $gl_cv_func_wcwidth_macro = yes; then HAVE_WCWIDTH=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth works reasonably in UTF-8 locales" >&5 $as_echo_n "checking whether wcwidth works reasonably in UTF-8 locales... " >&6; } if ${gl_cv_func_wcwidth_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc and AIX 7 systems. *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";; *) gl_cv_func_wcwidth_works="guessing no";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* AIX 3.2.5 declares wcwidth in . */ #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #if !HAVE_DECL_WCWIDTH extern # ifdef __cplusplus "C" # endif int wcwidth (int); #endif int main () { int result = 0; if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL) { if (wcwidth (0x0301) > 0) result |= 1; if (wcwidth (0x05B0) > 0) result |= 2; if (wcwidth (0x200B) > 0) result |= 4; if (wcwidth (0xFF1A) == 0) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_wcwidth_works=yes else gl_cv_func_wcwidth_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_works" >&5 $as_echo "$gl_cv_func_wcwidth_works" >&6; } case "$gl_cv_func_wcwidth_works" in *yes) ;; *no) REPLACE_WCWIDTH=1 ;; esac else HAVE_WCWIDTH=0 fi if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then gl_LIBOBJS="$gl_LIBOBJS wcwidth.$ac_objext" fi GNULIB_WCWIDTH=1 $as_echo "#define GNULIB_TEST_WCWIDTH 1" >>confdefs.h for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='bootstrapped/tests' gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS gl_module_indicator_condition=$gltests_WITNESS if test "$ac_cv_header_winsock2_h" = yes; then gltests_LIBOBJS="$gltests_LIBOBJS accept.$ac_objext" fi if test "$GNULIB_ACCEPT" != 1; then if test "$GNULIB_ACCEPT" = 0; then GNULIB_ACCEPT=$gl_module_indicator_condition else GNULIB_ACCEPT="($GNULIB_ACCEPT || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_ACCEPT 1" >>confdefs.h if test $ac_cv_header_arpa_inet_h = yes; then HAVE_ARPA_INET_H=1 else HAVE_ARPA_INET_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_arpa_inet_h='<'arpa/inet.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_arpa_inet_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_arpa_inet_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'arpa/inet.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_arpa_inet_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_arpa_inet_h gl_cv_next_arpa_inet_h='"'$gl_header'"' else gl_cv_next_arpa_inet_h='<'arpa/inet.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_arpa_inet_h" >&5 $as_echo "$gl_cv_next_arpa_inet_h" >&6; } fi NEXT_ARPA_INET_H=$gl_cv_next_arpa_inet_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'arpa/inet.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_arpa_inet_h fi NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H=$gl_next_as_first_directive for gl_func in inet_ntop inet_pton; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* On some systems, this header is not self-consistent. */ #if !(defined __GLIBC__ || defined __UCLIBC__) # include #endif #ifdef __TANDEM # include #endif #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test "$ac_cv_header_winsock2_h" = yes; then gltests_LIBOBJS="$gltests_LIBOBJS bind.$ac_objext" fi if test "$GNULIB_BIND" != 1; then if test "$GNULIB_BIND" = 0; then GNULIB_BIND=$gl_module_indicator_condition else GNULIB_BIND="($GNULIB_BIND || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_BIND 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 $as_echo_n "checking for a traditional french locale... " >&6; } if ${gt_cv_locale_fr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 $as_echo "$gt_cv_locale_fr" >&6; } LOCALE_FR=$gt_cv_locale_fr { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 $as_echo_n "checking for a french Unicode locale... " >&6; } if ${gt_cv_locale_fr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 $as_echo "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 $as_echo_n "checking for a traditional french locale... " >&6; } if ${gt_cv_locale_fr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 $as_echo "$gt_cv_locale_fr" >&6; } LOCALE_FR=$gt_cv_locale_fr { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a turkish Unicode locale" >&5 $as_echo_n "checking for a turkish Unicode locale... " >&6; } if ${gt_cv_locale_tr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. But BeOS does not implement the Turkish upper-/lowercase mappings. Therefore, let this program return 1 on BeOS. */ /* Check whether the given locale name is recognized by the system. */ #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; #else if (setlocale (LC_ALL, "") == NULL) return 1; #endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ #if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } #endif #ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; #endif /* Check whether in the abbreviation of the eighth month, the second character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) return 1; /* Check whether the upper-/lowercase mappings are as expected for Turkish. */ if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) return 1; return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Turkish_Turkey.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=Turkish_Turkey.65001 else # None found. gt_cv_locale_tr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr_TR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr_TR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr.UTF-8 else # None found. gt_cv_locale_tr_utf8=none fi fi fi ;; esac else gt_cv_locale_tr_utf8=none fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_tr_utf8" >&5 $as_echo "$gt_cv_locale_tr_utf8" >&6; } LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 $as_echo "#define GNULIB_TEST_CLOEXEC 1" >>confdefs.h if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then REPLACE_CLOSE=1 fi if test $REPLACE_CLOSE = 1; then gltests_LIBOBJS="$gltests_LIBOBJS close.$ac_objext" fi if test "$GNULIB_CLOSE" != 1; then if test "$GNULIB_CLOSE" = 0; then GNULIB_CLOSE=$gl_module_indicator_condition else GNULIB_CLOSE="($GNULIB_CLOSE || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_CLOSE 1" >>confdefs.h if test "$ac_cv_header_winsock2_h" = yes; then gltests_LIBOBJS="$gltests_LIBOBJS connect.$ac_objext" fi if test "$GNULIB_CONNECT" != 1; then if test "$GNULIB_CONNECT" = 0; then GNULIB_CONNECT=$gl_module_indicator_condition else GNULIB_CONNECT="($GNULIB_CONNECT || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_CONNECT 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_ctype_h='<'ctype.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_ctype_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'ctype.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_ctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_ctype_h gl_cv_next_ctype_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_ctype_h" >&5 $as_echo "$gl_cv_next_ctype_h" >&6; } fi NEXT_CTYPE_H=$gl_cv_next_ctype_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'ctype.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_ctype_h fi NEXT_AS_FIRST_DIRECTIVE_CTYPE_H=$gl_next_as_first_directive for gl_func in isblank; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done $as_echo "#define HAVE_DUP2 1" >>confdefs.h if test $HAVE_DUP2 = 1; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5 $as_echo_n "checking whether dup2 works... " >&6; } if ${gl_cv_func_dup2_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in mingw*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif int main () { int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_dup2_works=yes else gl_cv_func_dup2_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup2_works" >&5 $as_echo "$gl_cv_func_dup2_works" >&6; } case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 for ac_func in setdtablesize do : ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize" if test "x$ac_cv_func_setdtablesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETDTABLESIZE 1 _ACEOF fi done ;; esac fi if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then gltests_LIBOBJS="$gltests_LIBOBJS dup2.$ac_objext" fi if test "$GNULIB_DUP2" != 1; then if test "$GNULIB_DUP2" = 0; then GNULIB_DUP2=$gl_module_indicator_condition else GNULIB_DUP2="($GNULIB_DUP2 || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_DUP2 1" >>confdefs.h if test "$GNULIB_ENVIRON" != 1; then if test "$GNULIB_ENVIRON" = 0; then GNULIB_ENVIRON=$gl_module_indicator_condition else GNULIB_ENVIRON="($GNULIB_ENVIRON || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h if test $ac_cv_func_fcntl = no; then if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl handles F_DUPFD correctly" >&5 $as_echo_n "checking whether fcntl handles F_DUPFD correctly... " >&6; } if ${gl_cv_func_fcntl_f_dupfd_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif int main () { int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_fcntl_f_dupfd_works=yes else gl_cv_func_fcntl_f_dupfd_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_works" >&5 $as_echo "$gl_cv_func_fcntl_f_dupfd_works" >&6; } case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi $as_echo "#define FCNTL_DUPFD_BUGGY 1" >>confdefs.h ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5 $as_echo_n "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; } if ${gl_cv_func_fcntl_f_dupfd_cloexec+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef F_DUPFD_CLOEXEC choke me #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_fcntl_f_dupfd_cloexec=yes else gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else gl_cv_func_fcntl_f_dupfd_cloexec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5 $as_echo "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; } if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi fi fi if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then gltests_LIBOBJS="$gltests_LIBOBJS fcntl.$ac_objext" fi if test "$GNULIB_FCNTL" != 1; then if test "$GNULIB_FCNTL" = 0; then GNULIB_FCNTL=$gl_module_indicator_condition else GNULIB_FCNTL="($GNULIB_FCNTL || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_FCNTL 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_fcntl_h='<'fcntl.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_fcntl_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'fcntl.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_fcntl_h gl_cv_next_fcntl_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5 $as_echo "$gl_cv_next_fcntl_h" >&6; } fi NEXT_FCNTL_H=$gl_cv_next_fcntl_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'fcntl.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_fcntl_h fi NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive for gl_func in fcntl openat; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_FDOPEN=1 fi if test $REPLACE_FDOPEN = 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fdopen sets errno" >&5 $as_echo_n "checking whether fdopen sets errno... " >&6; } if ${gl_cv_func_fdopen_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in mingw*) gl_cv_func_fdopen_works="guessing no" ;; *) gl_cv_func_fdopen_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { FILE *fp; errno = 0; fp = fdopen (-1, "r"); if (fp == NULL && errno == 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_fdopen_works=yes else gl_cv_func_fdopen_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fdopen_works" >&5 $as_echo "$gl_cv_func_fdopen_works" >&6; } case "$gl_cv_func_fdopen_works" in *no) REPLACE_FDOPEN=1 ;; esac fi if test $REPLACE_FDOPEN = 1; then gltests_LIBOBJS="$gltests_LIBOBJS fdopen.$ac_objext" fi if test "$GNULIB_FDOPEN" != 1; then if test "$GNULIB_FDOPEN" = 0; then GNULIB_FDOPEN=$gl_module_indicator_condition else GNULIB_FDOPEN="($GNULIB_FDOPEN || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_FDOPEN 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flexible array member" >&5 $as_echo_n "checking for flexible array member... " >&6; } if ${ac_cv_c_flexmember+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include struct m { struct m *next, **list; char name[]; }; struct s { struct s *p; struct m *m; int n; double d[]; }; int main () { int m = getchar (); size_t nbytes = offsetof (struct s, d) + m * sizeof (double); nbytes += sizeof (struct s) - 1; nbytes -= nbytes % sizeof (struct s); struct s *p = malloc (nbytes); p->p = p; p->m = NULL; p->d[0] = 0.0; return p->d != (double *) NULL; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_flexmember=yes else ac_cv_c_flexmember=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 $as_echo "$ac_cv_c_flexmember" >&6; } if test $ac_cv_c_flexmember = yes; then $as_echo "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h else $as_echo "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h fi case "$host_os" in mingw* | solaris*) REPLACE_FSTAT=1 ;; esac if test $REPLACE_FSTAT = 1; then gltests_LIBOBJS="$gltests_LIBOBJS fstat.$ac_objext" case "$host_os" in mingw*) gltests_LIBOBJS="$gltests_LIBOBJS stat-w32.$ac_objext" ;; esac : fi if test "$GNULIB_FSTAT" != 1; then if test "$GNULIB_FSTAT" = 0; then GNULIB_FSTAT=$gl_module_indicator_condition else GNULIB_FSTAT="($GNULIB_FSTAT || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_FSTAT 1" >>confdefs.h if test $ac_cv_func_ftruncate = yes; then case "$host_os" in mingw*) REPLACE_FTRUNCATE=1 ;; esac else HAVE_FTRUNCATE=0 fi if test $HAVE_FTRUNCATE = 0 || test $REPLACE_FTRUNCATE = 1; then gltests_LIBOBJS="$gltests_LIBOBJS ftruncate.$ac_objext" for ac_func in chsize do : ac_fn_c_check_func "$LINENO" "chsize" "ac_cv_func_chsize" if test "x$ac_cv_func_chsize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_CHSIZE 1 _ACEOF fi done fi if test "$GNULIB_FTRUNCATE" != 1; then if test "$GNULIB_FTRUNCATE" = 0; then GNULIB_FTRUNCATE=$gl_module_indicator_condition else GNULIB_FTRUNCATE="($GNULIB_FTRUNCATE || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_FTRUNCATE 1" >>confdefs.h case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature in *yes,yes) ;; *) REPLACE_GETCWD=1 ;; esac if test $REPLACE_GETCWD = 1; then gltests_LIBOBJS="$gltests_LIBOBJS getcwd-lgpl.$ac_objext" fi if test "$GNULIB_GETCWD" != 1; then if test "$GNULIB_GETCWD" = 0; then GNULIB_GETCWD=$gl_module_indicator_condition else GNULIB_GETCWD="($GNULIB_GETCWD || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_GETCWD 1" >>confdefs.h if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getdtablesize works" >&5 $as_echo_n "checking whether getdtablesize works... " >&6; } if ${gl_cv_func_getdtablesize_works+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) if test "$cross_compiling" = yes; then : case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getdtablesize_works=yes else gl_cv_func_getdtablesize_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getdtablesize_works" >&5 $as_echo "$gl_cv_func_getdtablesize_works" >&6; } case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then gltests_LIBOBJS="$gltests_LIBOBJS getdtablesize.$ac_objext" : fi if test "$GNULIB_GETDTABLESIZE" != 1; then if test "$GNULIB_GETDTABLESIZE" = 0; then GNULIB_GETDTABLESIZE=$gl_module_indicator_condition else GNULIB_GETDTABLESIZE="($GNULIB_GETDTABLESIZE || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_GETDTABLESIZE 1" >>confdefs.h for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done if test $ac_cv_func_getpagesize = no; then HAVE_GETPAGESIZE=0 for ac_header in OS.h do : ac_fn_c_check_header_mongrel "$LINENO" "OS.h" "ac_cv_header_OS_h" "$ac_includes_default" if test "x$ac_cv_header_OS_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OS_H 1 _ACEOF fi done if test $ac_cv_header_OS_h = yes; then HAVE_OS_H=1 fi for ac_header in sys/param.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PARAM_H 1 _ACEOF fi done if test $ac_cv_header_sys_param_h = yes; then HAVE_SYS_PARAM_H=1 fi fi case "$host_os" in mingw*) REPLACE_GETPAGESIZE=1 ;; esac ac_fn_c_check_decl "$LINENO" "getpagesize" "ac_cv_have_decl_getpagesize" "$ac_includes_default" if test "x$ac_cv_have_decl_getpagesize" = xyes; then : else HAVE_DECL_GETPAGESIZE=0 fi if test $REPLACE_GETPAGESIZE = 1; then gltests_LIBOBJS="$gltests_LIBOBJS getpagesize.$ac_objext" fi if test "$GNULIB_GETPAGESIZE" != 1; then if test "$GNULIB_GETPAGESIZE" = 0; then GNULIB_GETPAGESIZE=$gl_module_indicator_condition else GNULIB_GETPAGESIZE="($GNULIB_GETPAGESIZE || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_GETPAGESIZE 1" >>confdefs.h gl_gettimeofday_timezone=void if test $ac_cv_func_gettimeofday != yes; then HAVE_GETTIMEOFDAY=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gettimeofday clobbers localtime buffer" >&5 $as_echo_n "checking whether gettimeofday clobbers localtime buffer... " >&6; } if ${gl_cv_func_gettimeofday_clobber+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : # When cross-compiling: case "$host_os" in # Guess all is fine on glibc systems. *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_gettimeofday_clobber="guessing no" ;; # If we don't know, assume the worst. *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { time_t t = 0; struct tm *lt; struct tm saved_lt; struct timeval tv; lt = localtime (&t); saved_lt = *lt; gettimeofday (&tv, NULL); return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_gettimeofday_clobber=no else gl_cv_func_gettimeofday_clobber=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_clobber" >&5 $as_echo "$gl_cv_func_gettimeofday_clobber" >&6; } case "$gl_cv_func_gettimeofday_clobber" in *yes) REPLACE_GETTIMEOFDAY=1 $as_echo "#define GETTIMEOFDAY_CLOBBERS_LOCALTIME 1" >>confdefs.h NEED_LOCALTIME_BUFFER=1 REPLACE_GMTIME=1 REPLACE_LOCALTIME=1 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettimeofday with POSIX signature" >&5 $as_echo_n "checking for gettimeofday with POSIX signature... " >&6; } if ${gl_cv_func_gettimeofday_posix_signature+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include struct timeval c; int gettimeofday (struct timeval *restrict, void *restrict); int main () { /* glibc uses struct timezone * rather than the POSIX void * if _GNU_SOURCE is defined. However, since the only portable use of gettimeofday uses NULL as the second parameter, and since the glibc definition is actually more typesafe, it is not worth wrapping this to get a compliant signature. */ int (*f) (struct timeval *restrict, void *restrict) = gettimeofday; int x = f (&c, 0); return !(x | c.tv_sec | c.tv_usec); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_gettimeofday_posix_signature=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int gettimeofday (struct timeval *restrict, struct timezone *restrict); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_gettimeofday_posix_signature=almost else gl_cv_func_gettimeofday_posix_signature=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_posix_signature" >&5 $as_echo "$gl_cv_func_gettimeofday_posix_signature" >&6; } if test $gl_cv_func_gettimeofday_posix_signature = almost; then gl_gettimeofday_timezone='struct timezone' elif test $gl_cv_func_gettimeofday_posix_signature != yes; then REPLACE_GETTIMEOFDAY=1 fi if test $REPLACE_STRUCT_TIMEVAL = 1; then REPLACE_GETTIMEOFDAY=1 fi case "$host_os" in mingw*) REPLACE_GETTIMEOFDAY=1 ;; esac fi cat >>confdefs.h <<_ACEOF #define GETTIMEOFDAY_TIMEZONE $gl_gettimeofday_timezone _ACEOF if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then gltests_LIBOBJS="$gltests_LIBOBJS gettimeofday.$ac_objext" : fi if test "$GNULIB_GETTIMEOFDAY" != 1; then if test "$GNULIB_GETTIMEOFDAY" = 0; then GNULIB_GETTIMEOFDAY=$gl_module_indicator_condition else GNULIB_GETTIMEOFDAY="($GNULIB_GETTIMEOFDAY || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_GETTIMEOFDAY 1" >>confdefs.h HAVE_INET_PTON=1 INET_PTON_LIB= if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi if test $HAVE_WINSOCK2_H = 1; then ac_fn_c_check_decl "$LINENO" "inet_pton" "ac_cv_have_decl_inet_pton" "#include " if test "x$ac_cv_have_decl_inet_pton" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_INET_PTON $ac_have_decl _ACEOF if test $ac_cv_have_decl_inet_pton = yes; then REPLACE_INET_PTON=1 INET_PTON_LIB="-lws2_32" else HAVE_DECL_INET_PTON=0 HAVE_INET_PTON=0 fi else gl_save_LIBS=$LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inet_pton" >&5 $as_echo_n "checking for library containing inet_pton... " >&6; } if ${ac_cv_search_inet_pton+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inet_pton (); int main () { return inet_pton (); ; return 0; } _ACEOF for ac_lib in '' nsl resolv network; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_inet_pton=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_inet_pton+:} false; then : break fi done if ${ac_cv_search_inet_pton+:} false; then : else ac_cv_search_inet_pton=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_pton" >&5 $as_echo "$ac_cv_search_inet_pton" >&6; } ac_res=$ac_cv_search_inet_pton if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else for ac_func in inet_pton do : ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" if test "x$ac_cv_func_inet_pton" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INET_PTON 1 _ACEOF fi done if test $ac_cv_func_inet_pton = no; then HAVE_INET_PTON=0 fi fi LIBS=$gl_save_LIBS if test "$ac_cv_search_inet_pton" != "no" \ && test "$ac_cv_search_inet_pton" != "none required"; then INET_PTON_LIB="$ac_cv_search_inet_pton" fi ac_fn_c_check_decl "$LINENO" "inet_pton" "ac_cv_have_decl_inet_pton" "#include #if HAVE_NETDB_H # include #endif " if test "x$ac_cv_have_decl_inet_pton" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_INET_PTON $ac_have_decl _ACEOF if test $ac_cv_have_decl_inet_pton = no; then HAVE_DECL_INET_PTON=0 fi fi if test $HAVE_INET_PTON = 0 || test $REPLACE_INET_NTOP = 1; then gltests_LIBOBJS="$gltests_LIBOBJS inet_pton.$ac_objext" fi if test "$GNULIB_INET_PTON" != 1; then if test "$GNULIB_INET_PTON" = 0; then GNULIB_INET_PTON=$gl_module_indicator_condition else GNULIB_INET_PTON="($GNULIB_INET_PTON || $gl_module_indicator_condition)" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac HAVE_IOCTL=1 if test "$ac_cv_header_winsock2_h" = yes; then HAVE_IOCTL=0 else for ac_func in ioctl do : ac_fn_c_check_func "$LINENO" "ioctl" "ac_cv_func_ioctl" if test "x$ac_cv_func_ioctl" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_IOCTL 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ioctl with POSIX signature" >&5 $as_echo_n "checking for ioctl with POSIX signature... " >&6; } if ${gl_cv_func_ioctl_posix_signature+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* On some platforms, ioctl() is declared in . */ #include int main () { extern #ifdef __cplusplus "C" #endif int ioctl (int, int, ...); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_ioctl_posix_signature=yes else gl_cv_func_ioctl_posix_signature=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ioctl_posix_signature" >&5 $as_echo "$gl_cv_func_ioctl_posix_signature" >&6; } if test $gl_cv_func_ioctl_posix_signature != yes; then REPLACE_IOCTL=1 fi fi if test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1; then gltests_LIBOBJS="$gltests_LIBOBJS ioctl.$ac_objext" fi if test "$GNULIB_IOCTL" != 1; then if test "$GNULIB_IOCTL" = 0; then GNULIB_IOCTL=$gl_module_indicator_condition else GNULIB_IOCTL="($GNULIB_IOCTL || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_IOCTL 1" >>confdefs.h if test $ac_cv_func_isblank = no; then HAVE_ISBLANK=0 fi if test $HAVE_ISBLANK = 0; then gltests_LIBOBJS="$gltests_LIBOBJS isblank.$ac_objext" fi if test "$GNULIB_ISBLANK" != 1; then if test "$GNULIB_ISBLANK" = 0; then GNULIB_ISBLANK=$gl_module_indicator_condition else GNULIB_ISBLANK="($GNULIB_ISBLANK || $gl_module_indicator_condition)" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used without linking with libm" >&5 $as_echo_n "checking whether isnan(double) can be used without linking with libm... " >&6; } if ${gl_cv_func_isnand_no_libm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if __GNUC__ >= 4 # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #else # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x; int main () { return isnand (x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_func_isnand_no_libm=yes else gl_cv_func_isnand_no_libm=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnand_no_libm" >&5 $as_echo "$gl_cv_func_isnand_no_libm" >&6; } gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm if test $gl_cv_func_isnand_no_libm = yes; then $as_echo "#define HAVE_ISNAND_IN_LIBC 1" >>confdefs.h fi if test $gl_func_isnand_no_libm != yes; then gltests_LIBOBJS="$gltests_LIBOBJS isnand.$ac_objext" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 $as_echo_n "checking where to find the exponent in a 'double'... " >&6; } if ${gl_cv_cc_double_expbit0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined arm || defined __arm || defined __arm__ mixed_endianness #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "mixed_endianness" >/dev/null 2>&1; then : gl_cv_cc_double_expbit0="unknown" else : if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi : case $ac_cv_c_bigendian in #( yes) gl_cv_cc_double_expbit0="word 0 bit 20";; #( no) gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) gl_cv_cc_double_expbit0="unknown" ;; esac fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (double x) { memory_double m; size_t i; /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ memset (&m, 0, sizeof (memory_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25); add_to_ored_words (0.5); add_to_ored_words (1.0); add_to_ored_words (2.0); add_to_ored_words (4.0); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_double_expbit0=`cat conftest.out` else gl_cv_cc_double_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 $as_echo "$gl_cv_cc_double_expbit0" >&6; } case "$gl_cv_cc_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define DBL_EXPBIT0_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define DBL_EXPBIT0_BIT $bit _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used without linking with libm" >&5 $as_echo_n "checking whether isnan(float) can be used without linking with libm... " >&6; } if ${gl_cv_func_isnanf_no_libm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if __GNUC__ >= 4 # undef isnanf # define isnanf(x) __builtin_isnanf ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x; int main () { return isnanf (x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_func_isnanf_no_libm=yes else gl_cv_func_isnanf_no_libm=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_no_libm" >&5 $as_echo "$gl_cv_func_isnanf_no_libm" >&6; } if test $gl_cv_func_isnanf_no_libm = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) works" >&5 $as_echo_n "checking whether isnan(float) works... " >&6; } if ${gl_cv_func_isnanf_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;; mingw*) # Guess yes on mingw, no on MSVC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1; then : gl_cv_func_isnanf_works="guessing yes" else gl_cv_func_isnanf_works="guessing no" fi rm -f conftest* ;; *) gl_cv_func_isnanf_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if __GNUC__ >= 4 # undef isnanf # define isnanf(x) __builtin_isnanf ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif /* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ #ifdef __DECC static float NaN () { static float zero = 0.0f; return zero / zero; } #else # define NaN() (0.0f / 0.0f) #endif #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; float value; } memory_float; int main() { int result = 0; if (isnanf (1.0f / 0.0f)) result |= 1; if (!isnanf (NaN ())) result |= 2; #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* The isnanf function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit. */ if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) { memory_float m; m.value = NaN (); /* Set the bits below the exponent to 01111...111. */ m.word[0] &= -1U << FLT_EXPBIT0_BIT; m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1; if (!isnanf (m.value)) result |= 4; } #endif return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_isnanf_works=yes else gl_cv_func_isnanf_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_works" >&5 $as_echo "$gl_cv_func_isnanf_works" >&6; } fi if test $gl_cv_func_isnanf_no_libm = yes \ && { case "$gl_cv_func_isnanf_works" in *yes) true;; *) false;; esac }; then gl_func_isnanf_no_libm=yes $as_echo "#define HAVE_ISNANF_IN_LIBC 1" >>confdefs.h else gl_func_isnanf_no_libm=no fi if test $gl_func_isnanf_no_libm != yes; then gltests_LIBOBJS="$gltests_LIBOBJS isnanf.$ac_objext" { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 $as_echo_n "checking where to find the exponent in a 'float'... " >&6; } if ${gl_cv_cc_float_expbit0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_cc_float_expbit0="word 0 bit 23" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (float x) { memory_float m; size_t i; /* Clear it first, in case sizeof (float) < sizeof (memory_float). */ memset (&m, 0, sizeof (memory_float)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25f); add_to_ored_words (0.5f); add_to_ored_words (1.0f); add_to_ored_words (2.0f); add_to_ored_words (4.0f); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_float_expbit0=`cat conftest.out` else gl_cv_cc_float_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 $as_echo "$gl_cv_cc_float_expbit0" >&6; } case "$gl_cv_cc_float_expbit0" in word*bit*) word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define FLT_EXPBIT0_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define FLT_EXPBIT0_BIT $bit _ACEOF ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 $as_echo_n "checking where to find the exponent in a 'float'... " >&6; } if ${gl_cv_cc_float_expbit0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_cc_float_expbit0="word 0 bit 23" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (float x) { memory_float m; size_t i; /* Clear it first, in case sizeof (float) < sizeof (memory_float). */ memset (&m, 0, sizeof (memory_float)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25f); add_to_ored_words (0.5f); add_to_ored_words (1.0f); add_to_ored_words (2.0f); add_to_ored_words (4.0f); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_float_expbit0=`cat conftest.out` else gl_cv_cc_float_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 $as_echo "$gl_cv_cc_float_expbit0" >&6; } case "$gl_cv_cc_float_expbit0" in word*bit*) word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define FLT_EXPBIT0_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define FLT_EXPBIT0_BIT $bit _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used without linking with libm" >&5 $as_echo_n "checking whether isnan(long double) can be used without linking with libm... " >&6; } if ${gl_cv_func_isnanl_no_libm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if __GNUC__ >= 4 # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x; int main () { return isnanl (x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_func_isnanl_no_libm=yes else gl_cv_func_isnanl_no_libm=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_no_libm" >&5 $as_echo "$gl_cv_func_isnanl_no_libm" >&6; } gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm if test $gl_func_isnanl_no_libm = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnanl works" >&5 $as_echo_n "checking whether isnanl works... " >&6; } if ${gl_cv_func_isnanl_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in mingw*) # Guess yes on mingw, no on MSVC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1; then : gl_cv_func_isnanl_works="guessing yes" else gl_cv_func_isnanl_works="guessing no" fi rm -f conftest* ;; *) gl_cv_func_isnanl_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #if __GNUC__ >= 4 # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif int main () { int result = 0; if (!isnanl (NaNl ())) result |= 1; { memory_long_double m; unsigned int i; /* The isnanl function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit (since the exponent never extends to bit 31). */ m.value = NaNl (); m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); for (i = 0; i < NWORDS; i++) m.word[i] |= 1; if (!isnanl (m.value)) result |= 1; } #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } /* isnanl should return something even for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 64; } #endif return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_isnanl_works=yes else gl_cv_func_isnanl_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_works" >&5 $as_echo "$gl_cv_func_isnanl_works" >&6; } case "$gl_cv_func_isnanl_works" in *yes) ;; *) gl_func_isnanl_no_libm=no ;; esac fi if test $gl_func_isnanl_no_libm = yes; then $as_echo "#define HAVE_ISNANL_IN_LIBC 1" >>confdefs.h fi if test $gl_func_isnanl_no_libm != yes; then gltests_LIBOBJS="$gltests_LIBOBJS isnanl.$ac_objext" { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5 $as_echo_n "checking where to find the exponent in a 'long double'... " >&6; } if ${gl_cv_cc_long_double_expbit0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_cc_long_double_expbit0="unknown" case "$host_os" in mingw*) # On native Windows (little-endian), we know the result # in two cases: mingw, MSVC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1; then : gl_cv_cc_long_double_expbit0="word 2 bit 0" fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1; then : gl_cv_cc_long_double_expbit0="word 1 bit 20" fi rm -f conftest* ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (long double x) { memory_long_double m; size_t i; /* Clear it first, in case sizeof (long double) < sizeof (memory_long_double). */ memset (&m, 0, sizeof (memory_long_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25L); add_to_ored_words (0.5L); add_to_ored_words (1.0L); add_to_ored_words (2.0L); add_to_ored_words (4.0L); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_long_double_expbit0=`cat conftest.out` else gl_cv_cc_long_double_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_expbit0" >&5 $as_echo "$gl_cv_cc_long_double_expbit0" >&6; } case "$gl_cv_cc_long_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define LDBL_EXPBIT0_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define LDBL_EXPBIT0_BIT $bit _ACEOF ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5 $as_echo_n "checking where to find the exponent in a 'long double'... " >&6; } if ${gl_cv_cc_long_double_expbit0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_cc_long_double_expbit0="unknown" case "$host_os" in mingw*) # On native Windows (little-endian), we know the result # in two cases: mingw, MSVC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1; then : gl_cv_cc_long_double_expbit0="word 2 bit 0" fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1; then : gl_cv_cc_long_double_expbit0="word 1 bit 20" fi rm -f conftest* ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (long double x) { memory_long_double m; size_t i; /* Clear it first, in case sizeof (long double) < sizeof (memory_long_double). */ memset (&m, 0, sizeof (memory_long_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25L); add_to_ored_words (0.5L); add_to_ored_words (1.0L); add_to_ored_words (2.0L); add_to_ored_words (4.0L); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_long_double_expbit0=`cat conftest.out` else gl_cv_cc_long_double_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_expbit0" >&5 $as_echo "$gl_cv_cc_long_double_expbit0" >&6; } case "$gl_cv_cc_long_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define LDBL_EXPBIT0_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define LDBL_EXPBIT0_BIT $bit _ACEOF ;; esac if test "$ac_cv_header_winsock2_h" = yes; then gltests_LIBOBJS="$gltests_LIBOBJS listen.$ac_objext" fi if test "$GNULIB_LISTEN" != 1; then if test "$GNULIB_LISTEN" = 0; then GNULIB_LISTEN=$gl_module_indicator_condition else GNULIB_LISTEN="($GNULIB_LISTEN || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_LISTEN 1" >>confdefs.h for ac_func in setlocale uselocale do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test $ac_cv_func_uselocale = yes; then for ac_func in getlocalename_l do : ac_fn_c_check_func "$LINENO" "getlocalename_l" "ac_cv_func_getlocalename_l" if test "x$ac_cv_func_getlocalename_l" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETLOCALENAME_L 1 _ACEOF fi done fi gltests_LIBOBJS="$gltests_LIBOBJS localtime-buffer.$ac_objext" if test $ac_cv_func_lstat = yes; then case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in solaris* | *no) REPLACE_LSTAT=1 ;; esac else HAVE_LSTAT=0 fi if test $REPLACE_LSTAT = 1; then gltests_LIBOBJS="$gltests_LIBOBJS lstat.$ac_objext" : fi if test "$GNULIB_LSTAT" != 1; then if test "$GNULIB_LSTAT" = 0; then GNULIB_LSTAT=$gl_module_indicator_condition else GNULIB_LSTAT="($GNULIB_LSTAT || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_LSTAT 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 $as_echo_n "checking for a traditional french locale... " >&6; } if ${gt_cv_locale_fr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 $as_echo "$gt_cv_locale_fr" >&6; } LOCALE_FR=$gt_cv_locale_fr { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 $as_echo_n "checking for a french Unicode locale... " >&6; } if ${gt_cv_locale_fr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 $as_echo "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 $as_echo_n "checking for a traditional japanese locale... " >&6; } if ${gt_cv_locale_ja+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 $as_echo "$gt_cv_locale_ja" >&6; } LOCALE_JA=$gt_cv_locale_ja { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 $as_echo_n "checking for a transitional chinese locale... " >&6; } if ${gt_cv_locale_zh_CN+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 $as_echo "$gt_cv_locale_zh_CN" >&6; } LOCALE_ZH_CN=$gt_cv_locale_zh_CN { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 $as_echo_n "checking for a transitional chinese locale... " >&6; } if ${gt_cv_locale_zh_CN+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 $as_echo "$gt_cv_locale_zh_CN" >&6; } LOCALE_ZH_CN=$gt_cv_locale_zh_CN { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 $as_echo_n "checking for a french Unicode locale... " >&6; } if ${gt_cv_locale_fr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 $as_echo "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 $as_echo_n "checking for a french Unicode locale... " >&6; } if ${gt_cv_locale_fr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 $as_echo "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 $as_echo_n "checking for a french Unicode locale... " >&6; } if ${gt_cv_locale_fr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 $as_echo "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" if test "x$ac_cv_func_mmap" = xyes; then : gl_have_mmap=yes else gl_have_mmap=no fi # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 $as_echo_n "checking for MAP_ANONYMOUS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANONYMOUS I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : gl_have_mmap_anonymous=yes fi rm -f conftest* if test $gl_have_mmap_anonymous != yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANON I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : $as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h gl_have_mmap_anonymous=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 $as_echo "$gl_have_mmap_anonymous" >&6; } if test $gl_have_mmap_anonymous = yes; then $as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h fi fi nanosleep_save_libs=$LIBS # Solaris 2.5.1 needs -lposix4 to get the nanosleep function. # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. LIB_NANOSLEEP= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing nanosleep" >&5 $as_echo_n "checking for library containing nanosleep... " >&6; } if ${ac_cv_search_nanosleep+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nanosleep (); int main () { return nanosleep (); ; return 0; } _ACEOF for ac_lib in '' rt posix4; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_nanosleep=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_nanosleep+:} false; then : break fi done if ${ac_cv_search_nanosleep+:} false; then : else ac_cv_search_nanosleep=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_nanosleep" >&5 $as_echo "$ac_cv_search_nanosleep" >&6; } ac_res=$ac_cv_search_nanosleep if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" test "$ac_cv_search_nanosleep" = "none required" || LIB_NANOSLEEP=$ac_cv_search_nanosleep fi if test "x$ac_cv_search_nanosleep" != xno; then if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'no (mishandles large arguments)' in 64-bit # mode but 'yes' in 32-bit mode. But we need a configuration result that # is valid in both modes. gl_cv_func_nanosleep='no (mishandles large arguments)' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working nanosleep" >&5 $as_echo_n "checking for working nanosleep... " >&6; } if ${gl_cv_func_nanosleep+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in linux*) # Guess it halfway works when the kernel is Linux. gl_cv_func_nanosleep='guessing no (mishandles large arguments)' ;; mingw*) # Guess no on native Windows. gl_cv_func_nanosleep='guessing no' ;; *) # If we don't know, assume the worst. gl_cv_func_nanosleep='guessing no' ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #if HAVE_SYS_TIME_H #include #endif #include #include #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) static void check_for_SIGALRM (int sig) { if (sig != SIGALRM) _exit (1); } int main () { static struct timespec ts_sleep; static struct timespec ts_remaining; static struct sigaction act; /* Test for major problems first. */ if (! nanosleep) return 2; act.sa_handler = check_for_SIGALRM; sigemptyset (&act.sa_mask); sigaction (SIGALRM, &act, NULL); ts_sleep.tv_sec = 0; ts_sleep.tv_nsec = 1; alarm (1); if (nanosleep (&ts_sleep, NULL) != 0) return 3; /* Test for a minor problem: the handling of large arguments. */ ts_sleep.tv_sec = TYPE_MAXIMUM (time_t); ts_sleep.tv_nsec = 999999999; alarm (1); if (nanosleep (&ts_sleep, &ts_remaining) != -1) return 4; if (errno != EINTR) return 5; if (ts_remaining.tv_sec <= TYPE_MAXIMUM (time_t) - 10) return 6; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_nanosleep=yes else case $? in 4|5|6) gl_cv_func_nanosleep='no (mishandles large arguments)';; *) gl_cv_func_nanosleep=no;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_nanosleep" >&5 $as_echo "$gl_cv_func_nanosleep" >&6; } case "$gl_cv_func_nanosleep" in *yes) REPLACE_NANOSLEEP=0 ;; *) REPLACE_NANOSLEEP=1 case "$gl_cv_func_nanosleep" in *"mishandles large arguments"*) $as_echo "#define HAVE_BUG_BIG_NANOSLEEP 1" >>confdefs.h ;; *) # The replacement uses select(). Add $LIBSOCKET to $LIB_NANOSLEEP. for ac_lib in $LIBSOCKET; do case " $LIB_NANOSLEEP " in *" $ac_lib "*) ;; *) LIB_NANOSLEEP="$LIB_NANOSLEEP $ac_lib";; esac done ;; esac ;; esac else HAVE_NANOSLEEP=0 fi LIBS=$nanosleep_save_libs if test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1; then gltests_LIBOBJS="$gltests_LIBOBJS nanosleep.$ac_objext" : fi if test "$GNULIB_NANOSLEEP" != 1; then if test "$GNULIB_NANOSLEEP" = 0; then GNULIB_NANOSLEEP=$gl_module_indicator_condition else GNULIB_NANOSLEEP="($GNULIB_NANOSLEEP || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_NANOSLEEP 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether is self-contained" >&5 $as_echo_n "checking whether is self-contained... " >&6; } if ${gl_cv_header_netinet_in_h_selfcontained+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_netinet_in_h_selfcontained=yes else gl_cv_header_netinet_in_h_selfcontained=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_netinet_in_h_selfcontained" >&5 $as_echo "$gl_cv_header_netinet_in_h_selfcontained" >&6; } if test $gl_cv_header_netinet_in_h_selfcontained = yes; then NETINET_IN_H='' else NETINET_IN_H='netinet/in.h' for ac_header in netinet/in.h do : ac_fn_c_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" if test "x$ac_cv_header_netinet_in_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NETINET_IN_H 1 _ACEOF fi done if test $gl_cv_have_include_next = yes; then gl_cv_next_netinet_in_h='<'netinet/in.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_netinet_in_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_netinet_in_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'netinet/in.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_netinet_in_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_netinet_in_h gl_cv_next_netinet_in_h='"'$gl_header'"' else gl_cv_next_netinet_in_h='<'netinet/in.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_netinet_in_h" >&5 $as_echo "$gl_cv_next_netinet_in_h" >&6; } fi NEXT_NETINET_IN_H=$gl_cv_next_netinet_in_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'netinet/in.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_netinet_in_h fi NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H=$gl_next_as_first_directive if test $ac_cv_header_netinet_in_h = yes; then HAVE_NETINET_IN_H=1 else HAVE_NETINET_IN_H=0 fi fi if test -n "$NETINET_IN_H"; then GL_GENERATE_NETINET_IN_H_TRUE= GL_GENERATE_NETINET_IN_H_FALSE='#' else GL_GENERATE_NETINET_IN_H_TRUE='#' GL_GENERATE_NETINET_IN_H_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 $as_echo_n "checking for a traditional french locale... " >&6; } if ${gt_cv_locale_fr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 $as_echo "$gt_cv_locale_fr" >&6; } LOCALE_FR=$gt_cv_locale_fr { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 $as_echo_n "checking for a french Unicode locale... " >&6; } if ${gt_cv_locale_fr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 $as_echo "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 case "$host_os" in mingw* | pw*) REPLACE_OPEN=1 ;; *) if test "$gl_cv_macro_O_CLOEXEC" != yes; then REPLACE_OPEN=1 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5 $as_echo_n "checking whether open recognizes a trailing slash... " >&6; } if ${gl_cv_func_open_slash+:} false; then : $as_echo_n "(cached) " >&6 else # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then touch conftest.tmp ln -s conftest.tmp conftest.lnk fi if test "$cross_compiling" = yes; then : case "$host_os" in freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_open_slash="guessing no" ;; *) gl_cv_func_open_slash="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_UNISTD_H # include #endif int main () { int result = 0; #if HAVE_LSTAT if (open ("conftest.lnk/", O_RDONLY) != -1) result |= 1; #endif if (open ("conftest.sl/", O_CREAT, 0600) >= 0) result |= 2; return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_open_slash=yes else gl_cv_func_open_slash=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.sl conftest.tmp conftest.lnk fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_slash" >&5 $as_echo "$gl_cv_func_open_slash" >&6; } case "$gl_cv_func_open_slash" in *no) $as_echo "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h REPLACE_OPEN=1 ;; esac ;; esac if test $REPLACE_OPEN = 1; then gltests_LIBOBJS="$gltests_LIBOBJS open.$ac_objext" : fi if test "$GNULIB_OPEN" != 1; then if test "$GNULIB_OPEN" = 0; then GNULIB_OPEN=$gl_module_indicator_condition else GNULIB_OPEN="($GNULIB_OPEN || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_OPEN 1" >>confdefs.h if test "$ERRNO_H:$REPLACE_STRERROR_0" != :0; then REPLACE_PERROR=1 fi case ${gl_cv_func_strerror_r_works-unset} in unset|*yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether perror matches strerror" >&5 $as_echo_n "checking whether perror matches strerror... " >&6; } if ${gl_cv_func_perror_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_perror_works="guessing yes" ;; # Otherwise guess no. *) gl_cv_func_perror_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { char *str = strerror (-1); if (!getenv("CONFTEST_OUTPUT")) return 0; if (!str) str = ""; puts (str); errno = -1; perror (""); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : if CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1 2>conftest.txt2 \ && cmp conftest.txt1 conftest.txt2 >/dev/null; then gl_cv_func_perror_works=yes else gl_cv_func_perror_works=no fi rm -rf conftest.txt1 conftest.txt2 else gl_cv_func_perror_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_perror_works" >&5 $as_echo "$gl_cv_func_perror_works" >&6; } case "$gl_cv_func_perror_works" in *yes) ;; *) REPLACE_PERROR=1 ;; esac ;; *) REPLACE_PERROR=1 ;; esac if test $REPLACE_PERROR = 1; then gltests_LIBOBJS="$gltests_LIBOBJS perror.$ac_objext" fi if test "$GNULIB_PERROR" != 1; then if test "$GNULIB_PERROR" = 0; then GNULIB_PERROR=$gl_module_indicator_condition else GNULIB_PERROR="($GNULIB_PERROR || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_PERROR 1" >>confdefs.h if test $ac_cv_func_pipe != yes; then HAVE_PIPE=0 fi if test $HAVE_PIPE = 0; then gltests_LIBOBJS="$gltests_LIBOBJS pipe.$ac_objext" fi if test "$GNULIB_PIPE" != 1; then if test "$GNULIB_PIPE" = 0; then GNULIB_PIPE=$gl_module_indicator_condition else GNULIB_PIPE="($GNULIB_PIPE || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_PIPE 1" >>confdefs.h LIB_PTHREAD_SIGMASK= if test "$gl_threads_api" = posix; then if test $ac_cv_func_pthread_sigmask = yes; then : else if test -n "$LIBMULTITHREAD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_sigmask in $LIBMULTITHREAD" >&5 $as_echo_n "checking for pthread_sigmask in $LIBMULTITHREAD... " >&6; } if ${gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes else gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD" >&5 $as_echo "$gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD" >&6; } if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask is only a macro" >&5 $as_echo_n "checking whether pthread_sigmask is only a macro... " >&6; } if ${gl_cv_func_pthread_sigmask_is_macro+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #undef pthread_sigmask int main () { return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_func_pthread_sigmask_is_macro=no else gl_cv_func_pthread_sigmask_is_macro=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_is_macro" >&5 $as_echo "$gl_cv_func_pthread_sigmask_is_macro" >&6; } if test $gl_cv_func_pthread_sigmask_is_macro = yes; then REPLACE_PTHREAD_SIGMASK=1 gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no fi fi if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then LIB_PTHREAD_SIGMASK="$LIBMULTITHREAD" else HAVE_PTHREAD_SIGMASK=0 fi else HAVE_PTHREAD_SIGMASK=0 fi fi else if test $ac_cv_func_pthread_sigmask = yes; then REPLACE_PTHREAD_SIGMASK=1 else HAVE_PTHREAD_SIGMASK=0 fi fi if test $HAVE_PTHREAD_SIGMASK = 1; then if test -z "$LIB_PTHREAD_SIGMASK"; then case " $LIBS " in *' -pthread '*) ;; *' -lpthread '*) ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask works without -lpthread" >&5 $as_echo_n "checking whether pthread_sigmask works without -lpthread... " >&6; } if ${gl_cv_func_pthread_sigmask_in_libc_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in freebsd* | hpux* | solaris | solaris2.[2-9]*) gl_cv_func_pthread_sigmask_in_libc_works="guessing no";; *) gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { sigset_t set; sigemptyset (&set); return pthread_sigmask (1729, &set, NULL) != 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_pthread_sigmask_in_libc_works=no else gl_cv_func_pthread_sigmask_in_libc_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_in_libc_works" >&5 $as_echo "$gl_cv_func_pthread_sigmask_in_libc_works" >&6; } case "$gl_cv_func_pthread_sigmask_in_libc_works" in *no) REPLACE_PTHREAD_SIGMASK=1 $as_echo "#define PTHREAD_SIGMASK_INEFFECTIVE 1" >>confdefs.h ;; esac;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask returns error numbers" >&5 $as_echo_n "checking whether pthread_sigmask returns error numbers... " >&6; } if ${gl_cv_func_pthread_sigmask_return_works+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_LIBS="$LIBS" LIBS="$LIBS $LIB_PTHREAD_SIGMASK" if test "$cross_compiling" = yes; then : case "$host_os" in cygwin*) gl_cv_func_pthread_sigmask_return_works="guessing no";; *) gl_cv_func_pthread_sigmask_return_works="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { sigset_t set; sigemptyset (&set); if (pthread_sigmask (1729, &set, NULL) == -1) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_pthread_sigmask_return_works=yes else gl_cv_func_pthread_sigmask_return_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$gl_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_return_works" >&5 $as_echo "$gl_cv_func_pthread_sigmask_return_works" >&6; } case "$gl_cv_func_pthread_sigmask_return_works" in *no) REPLACE_PTHREAD_SIGMASK=1 $as_echo "#define PTHREAD_SIGMASK_FAILS_WITH_ERRNO 1" >>confdefs.h ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask unblocks signals correctly" >&5 $as_echo_n "checking whether pthread_sigmask unblocks signals correctly... " >&6; } if ${gl_cv_func_pthread_sigmask_unblock_works+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in irix*) gl_cv_func_pthread_sigmask_unblock_works="guessing no";; *) gl_cv_func_pthread_sigmask_unblock_works="guessing yes";; esac gl_save_LIBS=$LIBS LIBS="$LIBS $LIBMULTITHREAD" if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main () { sigset_t set; int pid = getpid (); char command[80]; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); if (!(pthread_sigmask (SIG_BLOCK, &set, NULL) == 0)) return 1; sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, pid); if (!(system (command) == 0)) return 2; sleep (2); if (!(sigint_occurred == 0)) return 3; if (!(pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0)) return 4; if (!(sigint_occurred == 1)) /* This fails on IRIX. */ return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : : else gl_cv_func_pthread_sigmask_unblock_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS=$gl_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_unblock_works" >&5 $as_echo "$gl_cv_func_pthread_sigmask_unblock_works" >&6; } case "$gl_cv_func_pthread_sigmask_unblock_works" in *no) REPLACE_PTHREAD_SIGMASK=1 $as_echo "#define PTHREAD_SIGMASK_UNBLOCK_BUG 1" >>confdefs.h ;; esac fi if test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1; then gltests_LIBOBJS="$gltests_LIBOBJS pthread_sigmask.$ac_objext" if test $HAVE_PTHREAD_SIGMASK = 1; then $as_echo "#define HAVE_PTHREAD_SIGMASK 1" >>confdefs.h fi fi if test "$GNULIB_PTHREAD_SIGMASK" != 1; then if test "$GNULIB_PTHREAD_SIGMASK" = 0; then GNULIB_PTHREAD_SIGMASK=$gl_module_indicator_condition else GNULIB_PTHREAD_SIGMASK="($GNULIB_PTHREAD_SIGMASK || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_PTHREAD_SIGMASK 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for putenv compatible with GNU and SVID" >&5 $as_echo_n "checking for putenv compatible with GNU and SVID... " >&6; } if ${gl_cv_func_svid_putenv+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_svid_putenv="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_svid_putenv="guessing no" ;; # If we don't know, assume the worst. *) gl_cv_func_svid_putenv="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Put it in env. */ if (putenv ("CONFTEST_putenv=val")) return 1; /* Try to remove it. */ if (putenv ("CONFTEST_putenv")) return 2; /* Make sure it was deleted. */ if (getenv ("CONFTEST_putenv") != 0) return 3; return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_svid_putenv=yes else gl_cv_func_svid_putenv=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_svid_putenv" >&5 $as_echo "$gl_cv_func_svid_putenv" >&6; } case "$gl_cv_func_svid_putenv" in *yes) ;; *) REPLACE_PUTENV=1 ;; esac if test $REPLACE_PUTENV = 1; then gltests_LIBOBJS="$gltests_LIBOBJS putenv.$ac_objext" ac_fn_c_check_decl "$LINENO" "_putenv" "ac_cv_have_decl__putenv" "$ac_includes_default" if test "x$ac_cv_have_decl__putenv" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__PUTENV $ac_have_decl _ACEOF fi if test "$GNULIB_PUTENV" != 1; then if test "$GNULIB_PUTENV" = 0; then GNULIB_PUTENV=$gl_module_indicator_condition else GNULIB_PUTENV="($GNULIB_PUTENV || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_PUTENV 1" >>confdefs.h for ac_func in raise do : ac_fn_c_check_func "$LINENO" "raise" "ac_cv_func_raise" if test "x$ac_cv_func_raise" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_RAISE 1 _ACEOF fi done if test $ac_cv_func_raise = no; then HAVE_RAISE=0 else if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_RAISE=1 fi if test $gl_cv_type_sigset_t = yes; then ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" if test "x$ac_cv_func_sigprocmask" = xyes; then : gl_cv_func_sigprocmask=1 fi fi if test -z "$gl_cv_func_sigprocmask"; then HAVE_POSIX_SIGNALBLOCKING=0 fi if test $HAVE_POSIX_SIGNALBLOCKING = 0; then : fi fi if test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1; then gltests_LIBOBJS="$gltests_LIBOBJS raise.$ac_objext" : fi if test "$GNULIB_RAISE" != 1; then if test "$GNULIB_RAISE" = 0; then GNULIB_RAISE=$gl_module_indicator_condition else GNULIB_RAISE="($GNULIB_RAISE || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_RAISE 1" >>confdefs.h # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" if test "x$ac_cv_func_mmap" = xyes; then : gl_have_mmap=yes else gl_have_mmap=no fi # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 $as_echo_n "checking for MAP_ANONYMOUS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANONYMOUS I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : gl_have_mmap_anonymous=yes fi rm -f conftest* if test $gl_have_mmap_anonymous != yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANON I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : $as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h gl_have_mmap_anonymous=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 $as_echo "$gl_have_mmap_anonymous" >&6; } if test $gl_have_mmap_anonymous = yes; then $as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then REPLACE_SELECT=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether select supports a 0 argument" >&5 $as_echo_n "checking whether select supports a 0 argument... " >&6; } if ${gl_cv_func_select_supports0+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess no on Interix. interix*) gl_cv_func_select_supports0="guessing no";; # Guess yes otherwise. *) gl_cv_func_select_supports0="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_SYS_SELECT_H #include #endif int main () { struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_select_supports0=yes else gl_cv_func_select_supports0=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_select_supports0" >&5 $as_echo "$gl_cv_func_select_supports0" >&6; } case "$gl_cv_func_select_supports0" in *yes) ;; *) REPLACE_SELECT=1 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether select detects invalid fds" >&5 $as_echo_n "checking whether select detects invalid fds... " >&6; } if ${gl_cv_func_select_detects_ebadf+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_select_detects_ebadf="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_select_detects_ebadf="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_SYS_SELECT_H # include #endif #include #include int main () { fd_set set; dup2(0, 16); FD_ZERO(&set); FD_SET(16, &set); close(16); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (17, &set, NULL, NULL, &timeout) != -1 || errno != EBADF; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_select_detects_ebadf=yes else gl_cv_func_select_detects_ebadf=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_select_detects_ebadf" >&5 $as_echo "$gl_cv_func_select_detects_ebadf" >&6; } case $gl_cv_func_select_detects_ebadf in *yes) ;; *) REPLACE_SELECT=1 ;; esac fi LIB_SELECT="$LIBSOCKET" if test $REPLACE_SELECT = 1; then case "$host_os" in mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define WIN32_LEAN_AND_MEAN #include int main () { MsgWaitForMultipleObjects (0, NULL, 0, 0, 0); return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIB_SELECT="$LIB_SELECT -luser32" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; esac fi if test $REPLACE_SELECT = 1; then gltests_LIBOBJS="$gltests_LIBOBJS select.$ac_objext" fi if test "$GNULIB_SELECT" != 1; then if test "$GNULIB_SELECT" = 0; then GNULIB_SELECT=$gl_module_indicator_condition else GNULIB_SELECT="($GNULIB_SELECT || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_SELECT 1" >>confdefs.h if test $ac_cv_func_setenv = no; then HAVE_SETENV=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setenv validates arguments" >&5 $as_echo_n "checking whether setenv validates arguments... " >&6; } if ${gl_cv_func_setenv_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_setenv_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_setenv_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { int result = 0; { if (setenv ("", "", 0) != -1) result |= 1; else if (errno != EINVAL) result |= 2; } { if (setenv ("a", "=", 1) != 0) result |= 4; else if (strcmp (getenv ("a"), "=") != 0) result |= 8; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_setenv_works=yes else gl_cv_func_setenv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setenv_works" >&5 $as_echo "$gl_cv_func_setenv_works" >&6; } case "$gl_cv_func_setenv_works" in *yes) ;; *) REPLACE_SETENV=1 ;; esac fi if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then gltests_LIBOBJS="$gltests_LIBOBJS setenv.$ac_objext" fi if test "$GNULIB_SETENV" != 1; then if test "$GNULIB_SETENV" = 0; then GNULIB_SETENV=$gl_module_indicator_condition else GNULIB_SETENV="($GNULIB_SETENV || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_SETENV 1" >>confdefs.h case "$host_os" in mingw*) REPLACE_SETLOCALE=1 ;; cygwin*) case `uname -r` in 1.5.*) REPLACE_SETLOCALE=1 ;; esac ;; esac if test $REPLACE_SETLOCALE = 1; then gltests_LIBOBJS="$gltests_LIBOBJS setlocale.$ac_objext" : fi if test "$GNULIB_SETLOCALE" != 1; then if test "$GNULIB_SETLOCALE" = 0; then GNULIB_SETLOCALE=$gl_module_indicator_condition else GNULIB_SETLOCALE="($GNULIB_SETLOCALE || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_SETLOCALE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 $as_echo_n "checking for a traditional french locale... " >&6; } if ${gt_cv_locale_fr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 $as_echo "$gt_cv_locale_fr" >&6; } LOCALE_FR=$gt_cv_locale_fr { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 $as_echo_n "checking for a french Unicode locale... " >&6; } if ${gt_cv_locale_fr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 $as_echo "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 $as_echo_n "checking for a traditional japanese locale... " >&6; } if ${gt_cv_locale_ja+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 $as_echo "$gt_cv_locale_ja" >&6; } LOCALE_JA=$gt_cv_locale_ja { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 $as_echo_n "checking for a transitional chinese locale... " >&6; } if ${gt_cv_locale_zh_CN+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 $as_echo "$gt_cv_locale_zh_CN" >&6; } LOCALE_ZH_CN=$gt_cv_locale_zh_CN if test "$ac_cv_header_winsock2_h" = yes; then gltests_LIBOBJS="$gltests_LIBOBJS setsockopt.$ac_objext" fi if test "$GNULIB_SETSOCKOPT" != 1; then if test "$GNULIB_SETSOCKOPT" = 0; then GNULIB_SETSOCKOPT=$gl_module_indicator_condition else GNULIB_SETSOCKOPT="($GNULIB_SETSOCKOPT || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_SETSOCKOPT 1" >>confdefs.h if test $ac_cv_func_sigaction = yes; then ac_fn_c_check_member "$LINENO" "struct sigaction" "sa_sigaction" "ac_cv_member_struct_sigaction_sa_sigaction" "#include " if test "x$ac_cv_member_struct_sigaction_sa_sigaction" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 _ACEOF fi if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then HAVE_STRUCT_SIGACTION_SA_SIGACTION=0 fi else HAVE_SIGACTION=0 fi if test $HAVE_SIGACTION = 0; then gltests_LIBOBJS="$gltests_LIBOBJS sigaction.$ac_objext" ac_fn_c_check_type "$LINENO" "siginfo_t" "ac_cv_type_siginfo_t" " #include " if test "x$ac_cv_type_siginfo_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SIGINFO_T 1 _ACEOF fi if test $ac_cv_type_siginfo_t = no; then HAVE_SIGINFO_T=0 fi fi if test "$GNULIB_SIGACTION" != 1; then if test "$GNULIB_SIGACTION" = 0; then GNULIB_SIGACTION=$gl_module_indicator_condition else GNULIB_SIGACTION="($GNULIB_SIGACTION || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_SIGACTION 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_signal_h='<'signal.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_signal_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'signal.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_signal_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_signal_h gl_cv_next_signal_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_signal_h" >&5 $as_echo "$gl_cv_next_signal_h" >&6; } fi NEXT_SIGNAL_H=$gl_cv_next_signal_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'signal.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_signal_h fi NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H=$gl_next_as_first_directive # AIX declares sig_atomic_t to already include volatile, and C89 compilers # then choke on 'volatile sig_atomic_t'. C99 requires that it compile. ac_fn_c_check_type "$LINENO" "volatile sig_atomic_t" "ac_cv_type_volatile_sig_atomic_t" " #include " if test "x$ac_cv_type_volatile_sig_atomic_t" = xyes; then : else HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0 fi ac_fn_c_check_type "$LINENO" "sighandler_t" "ac_cv_type_sighandler_t" " #include " if test "x$ac_cv_type_sighandler_t" = xyes; then : else HAVE_SIGHANDLER_T=0 fi for gl_func in pthread_sigmask sigaction sigaddset sigdelset sigemptyset sigfillset sigismember sigpending sigprocmask; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signbit macro" >&5 $as_echo_n "checking for signbit macro... " >&6; } if ${gl_cv_func_signbit+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_signbit="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_signbit="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* If signbit is defined as a function, don't use it, since calling it for 'float' or 'long double' arguments would involve conversions. If signbit is not declared at all but exists as a library function, don't use it, since the prototype may not match. If signbit is not declared at all but exists as a compiler built-in, don't use it, since it's preferable to use __builtin_signbit* (no warnings, no conversions). */ #ifndef signbit # error "signbit should be a macro" #endif #include /* Global variables. Needed because GCC 4 constant-folds __builtin_signbitl (literal) but cannot constant-fold __builtin_signbitl (variable). */ float vf; double vd; long double vl; int main () { /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; /* On HP-UX 10.20, negating 0.0L does not yield -0.0L. So we use another constant expression instead. But that expression does not work on other platforms, such as when cross-compiling to PowerPC on Mac OS X 10.5. */ long double p0l = 0.0L; #if defined __hpux || defined __sgi long double m0l = -LDBL_MIN * LDBL_MIN; #else long double m0l = -p0l; #endif int result = 0; if (signbit (vf)) /* link check */ vf++; { float plus_inf = 1.0f / p0f; float minus_inf = -1.0f / p0f; if (!(!signbit (255.0f) && signbit (-255.0f) && !signbit (p0f) && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 1; } if (signbit (vd)) /* link check */ vd++; { double plus_inf = 1.0 / p0d; double minus_inf = -1.0 / p0d; if (!(!signbit (255.0) && signbit (-255.0) && !signbit (p0d) && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 2; } if (signbit (vl)) /* link check */ vl++; { long double plus_inf = 1.0L / p0l; long double minus_inf = -1.0L / p0l; if (signbit (255.0L)) result |= 4; if (!signbit (-255.0L)) result |= 4; if (signbit (p0l)) result |= 8; if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) result |= 16; if (signbit (plus_inf)) result |= 32; if (!signbit (minus_inf)) result |= 64; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_signbit=yes else gl_cv_func_signbit=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit" >&5 $as_echo "$gl_cv_func_signbit" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signbit compiler built-ins" >&5 $as_echo_n "checking for signbit compiler built-ins... " >&6; } if ${gl_cv_func_signbit_gcc+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_signbit_gcc="guessing yes" ;; # Guess yes on mingw, no on MSVC. mingw*) if test -n "$GCC"; then gl_cv_func_signbit_gcc="guessing yes" else gl_cv_func_signbit_gcc="guessing no" fi ;; # If we don't know, assume the worst. *) gl_cv_func_signbit_gcc="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if __GNUC__ >= 4 # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) #else # error "signbit should be three compiler built-ins" #endif #include /* Global variables. Needed because GCC 4 constant-folds __builtin_signbitl (literal) but cannot constant-fold __builtin_signbitl (variable). */ float vf; double vd; long double vl; int main () { /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; /* On HP-UX 10.20, negating 0.0L does not yield -0.0L. So we use another constant expression instead. But that expression does not work on other platforms, such as when cross-compiling to PowerPC on Mac OS X 10.5. */ long double p0l = 0.0L; #if defined __hpux || defined __sgi long double m0l = -LDBL_MIN * LDBL_MIN; #else long double m0l = -p0l; #endif int result = 0; if (signbit (vf)) /* link check */ vf++; { float plus_inf = 1.0f / p0f; float minus_inf = -1.0f / p0f; if (!(!signbit (255.0f) && signbit (-255.0f) && !signbit (p0f) && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 1; } if (signbit (vd)) /* link check */ vd++; { double plus_inf = 1.0 / p0d; double minus_inf = -1.0 / p0d; if (!(!signbit (255.0) && signbit (-255.0) && !signbit (p0d) && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 2; } if (signbit (vl)) /* link check */ vl++; { long double plus_inf = 1.0L / p0l; long double minus_inf = -1.0L / p0l; if (signbit (255.0L)) result |= 4; if (!signbit (-255.0L)) result |= 4; if (signbit (p0l)) result |= 8; if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) result |= 16; if (signbit (plus_inf)) result |= 32; if (!signbit (minus_inf)) result |= 64; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_signbit_gcc=yes else gl_cv_func_signbit_gcc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit_gcc" >&5 $as_echo "$gl_cv_func_signbit_gcc" >&6; } case "$gl_cv_func_signbit_gcc" in *yes) REPLACE_SIGNBIT_USING_GCC=1 ;; *) case "$gl_cv_func_signbit" in *yes) ;; *) REPLACE_SIGNBIT=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'float'" >&5 $as_echo_n "checking where to find the sign bit in a 'float'... " >&6; } if ${gl_cv_cc_float_signbit+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_cc_float_signbit="unknown" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0f }; static memory_float minus = { -1.0f }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_float_signbit=`cat conftest.out` else gl_cv_cc_float_signbit="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_signbit" >&5 $as_echo "$gl_cv_cc_float_signbit" >&6; } case "$gl_cv_cc_float_signbit" in word*bit*) word=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define FLT_SIGNBIT_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define FLT_SIGNBIT_BIT $bit _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'double'" >&5 $as_echo_n "checking where to find the sign bit in a 'double'... " >&6; } if ${gl_cv_cc_double_signbit+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_cc_double_signbit="unknown" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0 }; static memory_float minus = { -1.0 }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_double_signbit=`cat conftest.out` else gl_cv_cc_double_signbit="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_signbit" >&5 $as_echo "$gl_cv_cc_double_signbit" >&6; } case "$gl_cv_cc_double_signbit" in word*bit*) word=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define DBL_SIGNBIT_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define DBL_SIGNBIT_BIT $bit _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'long double'" >&5 $as_echo_n "checking where to find the sign bit in a 'long double'... " >&6; } if ${gl_cv_cc_long_double_signbit+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_cc_long_double_signbit="unknown" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0L }; static memory_float minus = { -1.0L }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_cc_long_double_signbit=`cat conftest.out` else gl_cv_cc_long_double_signbit="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_signbit" >&5 $as_echo "$gl_cv_cc_long_double_signbit" >&6; } case "$gl_cv_cc_long_double_signbit" in word*bit*) word=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word.*bit //'` cat >>confdefs.h <<_ACEOF #define LDBL_SIGNBIT_WORD $word _ACEOF cat >>confdefs.h <<_ACEOF #define LDBL_SIGNBIT_BIT $bit _ACEOF ;; esac if test "$gl_cv_cc_float_signbit" = unknown; then ac_fn_c_check_decl "$LINENO" "copysignf" "ac_cv_have_decl_copysignf" "#include " if test "x$ac_cv_have_decl_copysignf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_COPYSIGNF $ac_have_decl _ACEOF if test "$ac_cv_have_decl_copysignf" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysignf can be used without linking with libm" >&5 $as_echo_n "checking whether copysignf can be used without linking with libm... " >&6; } if ${gl_cv_func_copysignf_no_libm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include float x, y; int main () { return copysignf (x, y) < 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_func_copysignf_no_libm=yes else gl_cv_func_copysignf_no_libm=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignf_no_libm" >&5 $as_echo "$gl_cv_func_copysignf_no_libm" >&6; } if test $gl_cv_func_copysignf_no_libm = yes; then $as_echo "#define HAVE_COPYSIGNF_IN_LIBC 1" >>confdefs.h fi fi fi if test "$gl_cv_cc_double_signbit" = unknown; then ac_fn_c_check_decl "$LINENO" "copysign" "ac_cv_have_decl_copysign" "#include " if test "x$ac_cv_have_decl_copysign" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_COPYSIGN $ac_have_decl _ACEOF if test "$ac_cv_have_decl_copysign" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysign can be used without linking with libm" >&5 $as_echo_n "checking whether copysign can be used without linking with libm... " >&6; } if ${gl_cv_func_copysign_no_libm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include double x, y; int main () { return copysign (x, y) < 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_func_copysign_no_libm=yes else gl_cv_func_copysign_no_libm=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysign_no_libm" >&5 $as_echo "$gl_cv_func_copysign_no_libm" >&6; } if test $gl_cv_func_copysign_no_libm = yes; then $as_echo "#define HAVE_COPYSIGN_IN_LIBC 1" >>confdefs.h fi fi fi if test "$gl_cv_cc_long_double_signbit" = unknown; then ac_fn_c_check_decl "$LINENO" "copysignl" "ac_cv_have_decl_copysignl" "#include " if test "x$ac_cv_have_decl_copysignl" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_COPYSIGNL $ac_have_decl _ACEOF if test "$ac_cv_have_decl_copysignl" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysignl can be used without linking with libm" >&5 $as_echo_n "checking whether copysignl can be used without linking with libm... " >&6; } if ${gl_cv_func_copysignl_no_libm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include long double x, y; int main () { return copysignl (x, y) < 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_func_copysignl_no_libm=yes else gl_cv_func_copysignl_no_libm=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignl_no_libm" >&5 $as_echo "$gl_cv_func_copysignl_no_libm" >&6; } if test $gl_cv_func_copysignl_no_libm = yes; then $as_echo "#define HAVE_COPYSIGNL_IN_LIBC 1" >>confdefs.h fi fi fi ;; esac ;; esac if test $REPLACE_SIGNBIT = 1; then gltests_LIBOBJS="$gltests_LIBOBJS signbitf.$ac_objext" gltests_LIBOBJS="$gltests_LIBOBJS signbitd.$ac_objext" gltests_LIBOBJS="$gltests_LIBOBJS signbitl.$ac_objext" fi if test "$GNULIB_SIGNBIT" != 1; then if test "$GNULIB_SIGNBIT" = 0; then GNULIB_SIGNBIT=$gl_module_indicator_condition else GNULIB_SIGNBIT="($GNULIB_SIGNBIT || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_SIGNBIT 1" >>confdefs.h if test $gl_cv_type_sigset_t = yes; then ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" if test "x$ac_cv_func_sigprocmask" = xyes; then : gl_cv_func_sigprocmask=1 fi fi if test -z "$gl_cv_func_sigprocmask"; then HAVE_POSIX_SIGNALBLOCKING=0 fi if test $HAVE_POSIX_SIGNALBLOCKING = 0; then gltests_LIBOBJS="$gltests_LIBOBJS sigprocmask.$ac_objext" : fi if test "$GNULIB_SIGPROCMASK" != 1; then if test "$GNULIB_SIGPROCMASK" = 0; then GNULIB_SIGPROCMASK=$gl_module_indicator_condition else GNULIB_SIGPROCMASK="($GNULIB_SIGPROCMASK || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_SIGPROCMASK 1" >>confdefs.h if test "$ac_cv_header_winsock2_h" = yes; then gltests_LIBOBJS="$gltests_LIBOBJS socket.$ac_objext" fi # When this module is used, sockets may actually occur as file descriptors, # hence it is worth warning if the modules 'close' and 'ioctl' are not used. if test "$ac_cv_header_winsock2_h" = yes; then UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 fi if test "$GNULIB_SOCKET" != 1; then if test "$GNULIB_SOCKET" = 0; then GNULIB_SOCKET=$gl_module_indicator_condition else GNULIB_SOCKET="($GNULIB_SOCKET || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_SOCKET 1" >>confdefs.h ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" " /* is not needed according to POSIX, but the in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include #if HAVE_SYS_SOCKET_H # include #elif HAVE_WS2TCPIP_H # include #endif " if test "x$ac_cv_type_socklen_t" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t equivalent" >&5 $as_echo_n "checking for socklen_t equivalent... " >&6; } if ${gl_cv_socklen_t_equiv+:} false; then : $as_echo_n "(cached) " >&6 else # Systems have either "struct sockaddr *" or # "void *" as the second argument to getpeername gl_cv_socklen_t_equiv= for arg2 in "struct sockaddr" void; do for t in int size_t "unsigned int" "long int" "unsigned long int"; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int getpeername (int, $arg2 *, $t *); int main () { $t len; getpeername (0, 0, &len); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_socklen_t_equiv="$t" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$gl_cv_socklen_t_equiv" != "" && break done test "$gl_cv_socklen_t_equiv" != "" && break done fi if test "$gl_cv_socklen_t_equiv" = ""; then as_fn_error $? "Cannot find a type to use in place of socklen_t" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socklen_t_equiv" >&5 $as_echo "$gl_cv_socklen_t_equiv" >&6; } cat >>confdefs.h <<_ACEOF #define socklen_t $gl_cv_socklen_t_equiv _ACEOF fi case "$host_os" in mingw*) REPLACE_STAT=1 ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on files" >&5 $as_echo_n "checking whether stat handles trailing slashes on files... " >&6; } if ${gl_cv_func_stat_file_slash+:} false; then : $as_echo_n "(cached) " >&6 else touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_stat_file_slash="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int result = 0; struct stat st; if (!stat ("conftest.tmp/", &st)) result |= 1; #if HAVE_LSTAT if (!stat ("conftest.lnk/", &st)) result |= 2; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_stat_file_slash=yes else gl_cv_func_stat_file_slash=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.tmp conftest.lnk fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_file_slash" >&5 $as_echo "$gl_cv_func_stat_file_slash" >&6; } case $gl_cv_func_stat_file_slash in *no) REPLACE_STAT=1 $as_echo "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h ;; esac case $host_os in solaris*) REPLACE_FSTAT=1 ;; esac ;; esac if test $REPLACE_STAT = 1; then gltests_LIBOBJS="$gltests_LIBOBJS stat.$ac_objext" case "$host_os" in mingw*) gltests_LIBOBJS="$gltests_LIBOBJS stat-w32.$ac_objext" ;; esac : fi if test "$GNULIB_STAT" != 1; then if test "$GNULIB_STAT" = 0; then GNULIB_STAT=$gl_module_indicator_condition else GNULIB_STAT="($GNULIB_STAT || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_STAT 1" >>confdefs.h ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "#include #include " if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5 $as_echo_n "checking whether struct stat.st_atim is of type struct timespec... " >&6; } if ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_SYS_TIME_H # include #endif #include struct timespec ts; struct stat st; int main () { st.st_atim = ts; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes else ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5 $as_echo "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; } if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then $as_echo "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h fi else ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include #include " if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1 _ACEOF else ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include #include " if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_ATIMENSEC 1 _ACEOF else ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include #include " if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1 _ACEOF fi fi fi fi ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimespec.tv_nsec" "ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" "#include #include " if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1 _ACEOF else ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimensec" "ac_cv_member_struct_stat_st_birthtimensec" "#include #include " if test "x$ac_cv_member_struct_stat_st_birthtimensec" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC 1 _ACEOF else ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtim.tv_nsec" "ac_cv_member_struct_stat_st_birthtim_tv_nsec" "#include #include " if test "x$ac_cv_member_struct_stat_st_birthtim_tv_nsec" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC 1 _ACEOF fi fi fi if test $ac_cv_have_decl_strerror_r = no; then HAVE_DECL_STRERROR_R=0 fi if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then if test $gl_cv_func_strerror_r_posix_signature = yes; then case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR_R=1 ;; esac else REPLACE_STRERROR_R=1 fi else REPLACE_STRERROR_R=1 fi fi if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then gltests_LIBOBJS="$gltests_LIBOBJS strerror_r.$ac_objext" fi if test "$GNULIB_STRERROR_R" != 1; then if test "$GNULIB_STRERROR_R" = 0; then GNULIB_STRERROR_R=$gl_module_indicator_condition else GNULIB_STRERROR_R="($GNULIB_STRERROR_R || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_STRERROR_R 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define GNULIB_STRERROR_R_POSIX $gl_module_indicator_condition _ACEOF # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" if test "x$ac_cv_func_mmap" = xyes; then : gl_have_mmap=yes else gl_have_mmap=no fi # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 $as_echo_n "checking for MAP_ANONYMOUS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANONYMOUS I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : gl_have_mmap_anonymous=yes fi rm -f conftest* if test $gl_have_mmap_anonymous != yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANON I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : $as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h gl_have_mmap_anonymous=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 $as_echo "$gl_have_mmap_anonymous" >&6; } if test $gl_have_mmap_anonymous = yes; then $as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h fi fi if test $ac_cv_func_symlink = no; then HAVE_SYMLINK=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether symlink handles trailing slash correctly" >&5 $as_echo_n "checking whether symlink handles trailing slash correctly... " >&6; } if ${gl_cv_func_symlink_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_symlink_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_symlink_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int result = 0; if (!symlink ("a", "conftest.link/")) result |= 1; if (symlink ("conftest.f", "conftest.lnk2")) result |= 2; else if (!symlink ("a", "conftest.lnk2/")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_symlink_works=yes else gl_cv_func_symlink_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.f conftest.link conftest.lnk2 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_symlink_works" >&5 $as_echo "$gl_cv_func_symlink_works" >&6; } case "$gl_cv_func_symlink_works" in *yes) ;; *) REPLACE_SYMLINK=1 ;; esac fi if test $HAVE_SYMLINK = 0 || test $REPLACE_SYMLINK = 1; then gltests_LIBOBJS="$gltests_LIBOBJS symlink.$ac_objext" fi if test "$GNULIB_SYMLINK" != 1; then if test "$GNULIB_SYMLINK" = 0; then GNULIB_SYMLINK=$gl_module_indicator_condition else GNULIB_SYMLINK="($GNULIB_SYMLINK || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_SYMLINK 1" >>confdefs.h if test $ac_cv_header_sys_ioctl_h = yes; then HAVE_SYS_IOCTL_H=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether declares ioctl" >&5 $as_echo_n "checking whether declares ioctl... " >&6; } if ${gl_cv_decl_ioctl_in_sys_ioctl_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { (void) ioctl; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_decl_ioctl_in_sys_ioctl_h=yes else gl_cv_decl_ioctl_in_sys_ioctl_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_ioctl_in_sys_ioctl_h" >&5 $as_echo "$gl_cv_decl_ioctl_in_sys_ioctl_h" >&6; } else HAVE_SYS_IOCTL_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_ioctl_h='<'sys/ioctl.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_ioctl_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_sys_ioctl_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/ioctl.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_ioctl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_ioctl_h gl_cv_next_sys_ioctl_h='"'$gl_header'"' else gl_cv_next_sys_ioctl_h='<'sys/ioctl.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_ioctl_h" >&5 $as_echo "$gl_cv_next_sys_ioctl_h" >&6; } fi NEXT_SYS_IOCTL_H=$gl_cv_next_sys_ioctl_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/ioctl.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_ioctl_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H=$gl_next_as_first_directive for gl_func in ioctl; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Some platforms declare ioctl in the wrong header. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include #endif int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_stat_h='<'sys/stat.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_stat_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_sys_stat_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/stat.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_stat_h gl_cv_next_sys_stat_h='"'$gl_header'"' else gl_cv_next_sys_stat_h='<'sys/stat.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5 $as_echo "$gl_cv_next_sys_stat_h" >&6; } fi NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/stat.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_stat_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive WINDOWS_STAT_TIMESPEC=0 ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include #include " if test "x$ac_cv_type_nlink_t" = xyes; then : else $as_echo "#define nlink_t int" >>confdefs.h fi for gl_func in fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_uio_h='<'sys/uio.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_uio_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_sys_uio_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/uio.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_uio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_uio_h gl_cv_next_sys_uio_h='"'$gl_header'"' else gl_cv_next_sys_uio_h='<'sys/uio.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_uio_h" >&5 $as_echo "$gl_cv_next_sys_uio_h" >&6; } fi NEXT_SYS_UIO_H=$gl_cv_next_sys_uio_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/uio.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_uio_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H=$gl_next_as_first_directive if test $ac_cv_header_sys_uio_h = yes; then HAVE_SYS_UIO_H=1 else HAVE_SYS_UIO_H=0 fi if test $gl_threads_api = posix; then gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" for ac_func in pthread_atfork do : ac_fn_c_check_func "$LINENO" "pthread_atfork" "ac_cv_func_pthread_atfork" if test "x$ac_cv_func_pthread_atfork" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTHREAD_ATFORK 1 _ACEOF fi done LIBS="$gl_save_LIBS" fi if test $ac_cv_have_decl_unsetenv = no; then HAVE_DECL_UNSETENV=0 fi for ac_func in unsetenv do : ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" if test "x$ac_cv_func_unsetenv" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNSETENV 1 _ACEOF fi done if test $ac_cv_func_unsetenv = no; then HAVE_UNSETENV=0 else HAVE_UNSETENV=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsetenv() return type" >&5 $as_echo_n "checking for unsetenv() return type... " >&6; } if ${gt_cv_func_unsetenv_ret+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #undef _BSD #define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 */ #include extern #ifdef __cplusplus "C" #endif int unsetenv (const char *name); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_func_unsetenv_ret='int' else gt_cv_func_unsetenv_ret='void' fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_unsetenv_ret" >&5 $as_echo "$gt_cv_func_unsetenv_ret" >&6; } if test $gt_cv_func_unsetenv_ret = 'void'; then $as_echo "#define VOID_UNSETENV 1" >>confdefs.h REPLACE_UNSETENV=1 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether unsetenv obeys POSIX" >&5 $as_echo_n "checking whether unsetenv obeys POSIX... " >&6; } if ${gl_cv_func_unsetenv_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_unsetenv_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern char **environ; int main () { char entry1[] = "a=1"; char entry2[] = "b=2"; char *env[] = { entry1, entry2, NULL }; if (putenv ((char *) "a=1")) return 1; if (putenv (entry2)) return 2; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 3; if (!unsetenv ("") || errno != EINVAL) return 4; entry2[0] = 'b'; environ = env; if (!getenv ("a")) return 5; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 6; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_unsetenv_works=yes else gl_cv_func_unsetenv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unsetenv_works" >&5 $as_echo "$gl_cv_func_unsetenv_works" >&6; } case "$gl_cv_func_unsetenv_works" in *yes) ;; *) REPLACE_UNSETENV=1 ;; esac fi if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then gltests_LIBOBJS="$gltests_LIBOBJS unsetenv.$ac_objext" fi if test "$GNULIB_UNSETENV" != 1; then if test "$GNULIB_UNSETENV" = 0; then GNULIB_UNSETENV=$gl_module_indicator_condition else GNULIB_UNSETENV="($GNULIB_UNSETENV || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_UNSETENV 1" >>confdefs.h ac_fn_c_check_type "$LINENO" "useconds_t" "ac_cv_type_useconds_t" "$ac_includes_default" if test "x$ac_cv_type_useconds_t" = xyes; then : else $as_echo "#define useconds_t unsigned int" >>confdefs.h fi if test $ac_cv_func_usleep = no; then HAVE_USLEEP=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep allows large arguments" >&5 $as_echo_n "checking whether usleep allows large arguments... " >&6; } if ${gl_cv_func_usleep_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_usleep_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_usleep_works="guessing no" ;; # If we don't know, assume the worst. *) gl_cv_func_usleep_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !!usleep (1000000); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_usleep_works=yes else gl_cv_func_usleep_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_usleep_works" >&5 $as_echo "$gl_cv_func_usleep_works" >&6; } case "$gl_cv_func_usleep_works" in *yes) ;; *) REPLACE_USLEEP=1 ;; esac fi if test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1; then gltests_LIBOBJS="$gltests_LIBOBJS usleep.$ac_objext" fi if test "$GNULIB_USLEEP" != 1; then if test "$GNULIB_USLEEP" = 0; then GNULIB_USLEEP=$gl_module_indicator_condition else GNULIB_USLEEP="($GNULIB_USLEEP || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_USLEEP 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 $as_echo_n "checking for a traditional french locale... " >&6; } if ${gt_cv_locale_fr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 $as_echo "$gt_cv_locale_fr" >&6; } LOCALE_FR=$gt_cv_locale_fr { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 $as_echo_n "checking for a french Unicode locale... " >&6; } if ${gt_cv_locale_fr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 $as_echo "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 $as_echo_n "checking for a traditional japanese locale... " >&6; } if ${gt_cv_locale_ja+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 $as_echo "$gt_cv_locale_ja" >&6; } LOCALE_JA=$gt_cv_locale_ja { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 $as_echo_n "checking for a transitional chinese locale... " >&6; } if ${gt_cv_locale_zh_CN+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 $as_echo "$gt_cv_locale_zh_CN" >&6; } LOCALE_ZH_CN=$gt_cv_locale_zh_CN if test $ac_cv_func_wctob = no; then HAVE_WCTOB=0 HAVE_DECL_WCTOB=0 else HAVE_WCTOB=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wctob works" >&5 $as_echo_n "checking whether wctob works... " >&6; } if ${gl_cv_func_wctob_works+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in # Guess no on Solaris <= 9 and Cygwin. solaris2.[1-9] | solaris2.[1-9].* | cygwin*) gl_cv_func_wctob_works="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_wctob_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wctob_works="guessing yes" ;; esac case "$host_os" in cygwin*) if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include register long global __asm__ ("%ebx"); int main () { setlocale (LC_ALL, "en_US.UTF-8"); global = 0x12345678; if (wctob (0x00FC) != -1) return 1; if (global != 0x12345678) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : : else gl_cv_func_wctob_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { wchar_t wc; if (mbtowc (&wc, "\374", 1) == 1) if (wctob (wc) != (unsigned char) '\374') return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_wctob_works=yes else gl_cv_func_wctob_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wctob_works" >&5 $as_echo "$gl_cv_func_wctob_works" >&6; } case "$gl_cv_func_wctob_works" in *yes) ;; *) REPLACE_WCTOB=1 ;; esac if test $REPLACE_WCTOB = 0; then ac_fn_c_check_decl "$LINENO" "wctob" "ac_cv_have_decl_wctob" " /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include " if test "x$ac_cv_have_decl_wctob" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_WCTOB $ac_have_decl _ACEOF if test $ac_cv_have_decl_wctob != yes; then HAVE_DECL_WCTOB=0 fi fi fi if test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1; then gltests_LIBOBJS="$gltests_LIBOBJS wctob.$ac_objext" : fi if test "$GNULIB_WCTOB" != 1; then if test "$GNULIB_WCTOB" = 0; then GNULIB_WCTOB=$gl_module_indicator_condition else GNULIB_WCTOB="($GNULIB_WCTOB || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_WCTOB 1" >>confdefs.h if false; then REPLACE_WCTOMB=1 fi if test $REPLACE_WCTOMB = 1; then gltests_LIBOBJS="$gltests_LIBOBJS wctomb.$ac_objext" : fi if test "$GNULIB_WCTOMB" != 1; then if test "$GNULIB_WCTOMB" = 0; then GNULIB_WCTOMB=$gl_module_indicator_condition else GNULIB_WCTOMB="($GNULIB_WCTOMB || $gl_module_indicator_condition)" fi fi $as_echo "#define GNULIB_TEST_WCTOMB 1" >>confdefs.h YIELD_LIB= if test $gl_threads_api = posix; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 $as_echo_n "checking for sched_yield in -lrt... " >&6; } if ${ac_cv_lib_rt_sched_yield+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sched_yield (); int main () { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_sched_yield=yes else ac_cv_lib_rt_sched_yield=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 $as_echo "$ac_cv_lib_rt_sched_yield" >&6; } if test "x$ac_cv_lib_rt_sched_yield" = xyes; then : YIELD_LIB=-lrt else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 $as_echo_n "checking for sched_yield in -lposix4... " >&6; } if ${ac_cv_lib_posix4_sched_yield+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sched_yield (); int main () { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix4_sched_yield=yes else ac_cv_lib_posix4_sched_yield=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 $as_echo "$ac_cv_lib_posix4_sched_yield" >&6; } if test "x$ac_cv_lib_posix4_sched_yield" = xyes; then : YIELD_LIB=-lposix4 fi fi fi LIBTESTS_LIBDEPS="$gltests_libdeps" # Gnulib checks for the proper name for the C99 equivalent `restrict' # keyword and puts it in the `ac_cv_c_restrict' variable. If none exists, # it will put a `no' inside of this variable. As described in the output # `bootstrapped/m4/gnulib-common.m4', this is only necessary until Autoconf # 2.70 is released. Afterwards, we can use AC_C_RESTRICT. if test "x$ac_cv_c_restrict" = "xno"; then : gal_restrict_replace= else gal_restrict_replace=$ac_cv_c_restrict fi RESTRICT_REPLACEMENT=$gal_restrict_replace # To add the help2man: # Extract the first word of "help2man", so it can be a program name with args. set dummy help2man; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_has_help2man+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$has_help2man"; then ac_cv_prog_has_help2man="$has_help2man" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_has_help2man="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_help2man" && ac_cv_prog_has_help2man="no" fi fi has_help2man=$ac_cv_prog_has_help2man if test -n "$has_help2man"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_help2man" >&5 $as_echo "$has_help2man" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$has_help2man" = "xyes"; then COND_HASHELP2MAN_TRUE= COND_HASHELP2MAN_FALSE='#' else COND_HASHELP2MAN_TRUE='#' COND_HASHELP2MAN_FALSE= fi # Check libjpeg: { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing jpeg_stdio_dest" >&5 $as_echo_n "checking for library containing jpeg_stdio_dest... " >&6; } if ${ac_cv_search_jpeg_stdio_dest+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char jpeg_stdio_dest (); int main () { return jpeg_stdio_dest (); ; return 0; } _ACEOF for ac_lib in '' jpeg; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_jpeg_stdio_dest=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_jpeg_stdio_dest+:} false; then : break fi done if ${ac_cv_search_jpeg_stdio_dest+:} false; then : else ac_cv_search_jpeg_stdio_dest=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_jpeg_stdio_dest" >&5 $as_echo "$ac_cv_search_jpeg_stdio_dest" >&6; } ac_res=$ac_cv_search_jpeg_stdio_dest if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" has_libjpeg=yes else has_libjpeg=no fi if test "x$has_libjpeg" = "xyes"; then : $as_echo "#define HAVE_LIBJPEG /**/" >>confdefs.h else anywarnings=yes fi if test "x$has_libjpeg" = "xyes"; then COND_HASLIBJPEG_TRUE= COND_HASLIBJPEG_FALSE='#' else COND_HASLIBJPEG_TRUE='#' COND_HASLIBJPEG_FALSE= fi # Check libgit2: { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing git_libgit2_init" >&5 $as_echo_n "checking for library containing git_libgit2_init... " >&6; } if ${ac_cv_search_git_libgit2_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char git_libgit2_init (); int main () { return git_libgit2_init (); ; return 0; } _ACEOF for ac_lib in '' git2; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_git_libgit2_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_git_libgit2_init+:} false; then : break fi done if ${ac_cv_search_git_libgit2_init+:} false; then : else ac_cv_search_git_libgit2_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_git_libgit2_init" >&5 $as_echo "$ac_cv_search_git_libgit2_init" >&6; } ac_res=$ac_cv_search_git_libgit2_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" has_libgit2=1 else has_libgit2=0 fi cat >>confdefs.h <<_ACEOF #define GAL_CONFIG_HAVE_LIBGIT2 $has_libgit2 _ACEOF if test "x$has_libgit2" = "x1"; then : else anywarnings=yes fi HAVE_LIBGIT2=$has_libgit2 # Check the libtool executable on the system. Note that Gnuastro also ships # with a version of Libtool. We don't want Gnuastro's Libtool, here we want # to see if the system has libtool independent of Gnuastro so BuildProgram # can use it later. # Extract the first word of "libtool", so it can be a program name with args. set dummy libtool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_has_libtool+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$has_libtool"; then ac_cv_prog_has_libtool="$has_libtool" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_has_libtool="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_libtool" && ac_cv_prog_has_libtool="no" fi fi has_libtool=$ac_cv_prog_has_libtool if test -n "$has_libtool"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_libtool" >&5 $as_echo "$has_libtool" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # If Libtool is present, make sure it is GNU Libtool if test "x$has_libtool" = "xyes"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool executable is GNU" >&5 $as_echo_n "checking if libtool executable is GNU... " >&6; } if libtool --version 2> /dev/null | grep GNU 2>&1 > /dev/null; then : has_gnulibtool=yes else has_gnulibtool=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_gnulibtool " >&5 $as_echo "$has_gnulibtool " >&6; } else has_gnulibtool=no fi # When either the `libtool' executable isn't GNU or it doesn't exist, then # look for `glibtool'. if test "x$has_gnulibtool" = "xyes"; then : gnulibtool_exec=libtool else # Extract the first word of "glibtool", so it can be a program name with args. set dummy glibtool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_has_glibtool+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$has_glibtool"; then ac_cv_prog_has_glibtool="$has_glibtool" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_has_glibtool="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_glibtool" && ac_cv_prog_has_glibtool="no" fi fi has_glibtool=$ac_cv_prog_has_glibtool if test -n "$has_glibtool"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_glibtool" >&5 $as_echo "$has_glibtool" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$has_glibtool" = "xyes"; then : has_gnulibtool=yes; gnulibtool_exec=glibtool else has_gnulibtool=no; anywarnings=yes fi fi # Write the test results in the Makefiles and `config.h'. if test "x$has_gnulibtool" = "xyes"; then COND_HASGNULIBTOOL_TRUE= COND_HASGNULIBTOOL_FALSE='#' else COND_HASGNULIBTOOL_TRUE='#' COND_HASGNULIBTOOL_FALSE= fi cat >>confdefs.h <<_ACEOF #define GAL_CONFIG_GNULIBTOOL_EXEC "$gnulibtool_exec" _ACEOF # Check Ghostscript: "-dPDFFitPage" option to Ghostscript, used by # ConvertType to convert from EPS to PDF, has been introduced in # Ghostscript 9.10. Make sure we have at least that version. # # Below, only when Ghostscript exists, we check its version and only if its # version is larger than 9.10, does Gnuastro finally assume the existence # of Ghostscript. AX_COMPARE_VERSION comes from the GNU Autoconf Archive's # ax_compare_version.m4. # Extract the first word of "gs", so it can be a program name with args. set dummy gs; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_has_ghostscript+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$has_ghostscript"; then ac_cv_prog_has_ghostscript="$has_ghostscript" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_has_ghostscript="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_ghostscript" && ac_cv_prog_has_ghostscript="no" fi fi has_ghostscript=$ac_cv_prog_has_ghostscript if test -n "$has_ghostscript"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_ghostscript" >&5 $as_echo "$has_ghostscript" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$has_ghostscript" = "xyes"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ghostscript version" >&5 $as_echo_n "checking Ghostscript version... " >&6; } gsversion=$(gs --version) # Used to indicate true or false condition ax_compare_version=false # Convert the two version strings to be compared into a format that # allows a simple string comparison. The end result is that a version # string of the form 1.12.5-r617 will be converted to the form # 0001001200050617. In other words, each number is zero padded to four # digits, and non digits are removed. ax_compare_version_A=`echo "9.10" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/[^0-9]//g'` ax_compare_version_B=`echo "$gsversion" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/[^0-9]//g'` ax_compare_version=`echo "x$ax_compare_version_A x$ax_compare_version_B" | sed 's/^ *//' | sort | sed "s/x${ax_compare_version_A}/false/;s/x${ax_compare_version_B}/true/;1q"` if test "$ax_compare_version" = "true" ; then has_ghostscript=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gsversion " >&5 $as_echo "$gsversion " >&6; } fi # Note: `has_ghostscript' can be set to `no' within the AS_IF above, so # `anywarnings' cannot be an [RUN-IF-FALSE] argument to the AS_IF above. if test "x$has_ghostscript" = "xno"; then : anywarnings=yes fi if test "x$has_ghostscript" = "xyes"; then COND_HASGHOSTSCRIPT_TRUE= COND_HASGHOSTSCRIPT_FALSE='#' else COND_HASGHOSTSCRIPT_TRUE='#' COND_HASGHOSTSCRIPT_FALSE= fi # Check if Gnulib tests should be done: # Check whether --enable-gnulibcheck was given. if test "${enable_gnulibcheck+set}" = set; then : enableval=$enable_gnulibcheck; enable_gnulibcheck=yes else enable_gnulibcheck=no fi if test $enable_gnulibcheck = yes; then COND_GNULIBCHECK_TRUE= COND_GNULIBCHECK_FALSE='#' else COND_GNULIBCHECK_TRUE='#' COND_GNULIBCHECK_FALSE= fi # Set the one general parameters: cat >>confdefs.h <<_ACEOF #define CONF_POSTFIX ".conf" _ACEOF cat >>confdefs.h <<_ACEOF #define USERCONFIG_DIR ".local/etc" _ACEOF cat >>confdefs.h <<_ACEOF #define CONF_SHOWFMT " %-20s" _ACEOF # Read arguments about which programs to install. After checking if # the argument was actually called, remove any value the user might # have given by setting them to "yes" if they are not "no". These # options don't accept arguments. ayes=false # Check whether --enable-arithmetic was given. if test "${enable_arithmetic+set}" = set; then : enableval=$enable_arithmetic; if test "x$enable_arithmetic" != xno; then : enable_arithmetic=yes; ayes=true fi else enable_arithmetic=notset fi # Check whether --enable-buildprog was given. if test "${enable_buildprog+set}" = set; then : enableval=$enable_buildprog; if test "x$enable_buildprog" != xno; then : enable_buildprog=yes; ayes=true fi else enable_buildprog=notset fi # Check whether --enable-convertt was given. if test "${enable_convertt+set}" = set; then : enableval=$enable_convertt; if test "x$enable_convertt" != xno; then : enable_convertt=yes; ayes=true fi else enable_convertt=notset fi # Check whether --enable-convolve was given. if test "${enable_convolve+set}" = set; then : enableval=$enable_convolve; if test "x$enable_convolve" != xno; then : enable_cognvolve=yes; ayes=true fi else enable_convolve=notset fi # Check whether --enable-cosmiccal was given. if test "${enable_cosmiccal+set}" = set; then : enableval=$enable_cosmiccal; if test "x$enable_cosmiccal" != xno; then : enable_cosmiccal=yes; ayes=true fi else enable_cosmiccal=notset fi # Check whether --enable-crop was given. if test "${enable_crop+set}" = set; then : enableval=$enable_crop; if test "x$enable_crop" != xno; then : enable_crop=yes; ayes=true fi else enable_crop=notset fi # Check whether --enable-fits was given. if test "${enable_fits+set}" = set; then : enableval=$enable_fits; if test "x$enable_fits" != xno; then : enable_fits=yes; ayes=true fi else enable_fits=notset fi # Check whether --enable-match was given. if test "${enable_match+set}" = set; then : enableval=$enable_match; if test "x$enable_match" != xno; then : enable_match=yes; ayes=true fi else enable_match=notset fi # Check whether --enable-mkcatalog was given. if test "${enable_mkcatalog+set}" = set; then : enableval=$enable_mkcatalog; if test "x$enable_mkcatalog" != xno; then : enable_mkcatalog=yes; ayes=true fi else enable_mkcatalog=notset fi # Check whether --enable-mknoise was given. if test "${enable_mknoise+set}" = set; then : enableval=$enable_mknoise; if test "x$enable_mknoise" != xno; then : enable_mknoise=yes; ayes=true fi else enable_mknoise=notset fi # Check whether --enable-mkprof was given. if test "${enable_mkprof+set}" = set; then : enableval=$enable_mkprof; if test "x$enable_mkprof" != xno; then : enable_mkprof=yes; ayes=true fi else enable_mkprof=notset fi # Check whether --enable-noisechisel was given. if test "${enable_noisechisel+set}" = set; then : enableval=$enable_noisechisel; if test "x$enable_noisechisel" != xno; then : enable_noisechisel=yes; ayes=true fi else enable_noisechisel=notset fi # Check whether --enable-statistics was given. if test "${enable_statistics+set}" = set; then : enableval=$enable_statistics; if test "x$enable_statistics" != xno; then : enable_statistics=yes; ayes=true fi else enable_statistics=notset fi # Check whether --enable-table was given. if test "${enable_table+set}" = set; then : enableval=$enable_table; if test "x$enable_table" != xno; then : enable_table=yes; ayes=true fi else enable_table=notset fi #AC_ARG_ENABLE([TEMPLATE], # [AS_HELP_STRING([--enable-TEMPLATE], # [Install TEMPLATE and other enabled packages.])], # [AS_IF([test "x$enable_TEMPLATE" != xno], # [enable_TEMPLATE=yes; ayes=true])], # [enable_TEMPLATE=notset]) # Check whether --enable-warp was given. if test "${enable_warp+set}" = set; then : enableval=$enable_warp; if test "x$enable_warp" != xno; then : enable_warp=yes; ayes=true fi else enable_warp=notset fi # If we had a "ayes" variable to be "true" if there was a `yes'. So any # program that is not explicitly requested must be ignored and vice versa # (if no programs were explicitly requested, then enable all that weren't # disabled). if test $ayes = true ; then : if test $enable_arithmetic = notset; then : enable_arithmetic=no fi if test $enable_buildprog = notset; then : enable_buildprog=no fi if test $enable_convertt = notset; then : enable_convertt=no fi if test $enable_convolve = notset; then : enable_convolve=no fi if test $enable_cosmiccal = notset; then : enable_cosmiccal=no fi if test $enable_crop = notset; then : enable_crop=no fi if test $enable_fits = notset; then : enable_fits=no fi if test $enable_match = notset; then : enable_match=no fi if test $enable_mkcatalog = notset; then : enable_mkcatalog=no fi if test $enable_mknoise = notset; then : enable_mknoise=no fi if test $enable_mkprof = notset; then : enable_mkprof=no fi if test $enable_noisechisel = notset; then : enable_noisechisel=no fi if test $enable_statistics = notset; then : enable_statistics=no fi if test $enable_table = notset; then : enable_table=no fi # AS_IF([test $enable_TEMPLATE = notset], [enable_TEMPLATE=no]) if test $enable_warp = notset; then : enable_warp=no fi else if test $enable_arithmetic = notset; then : enable_arithmetic=yes fi if test $enable_buildprog = notset; then : enable_buildprog=yes fi if test $enable_convertt = notset; then : enable_convertt=yes fi if test $enable_convolve = notset; then : enable_convolve=yes fi if test $enable_cosmiccal = notset; then : enable_cosmiccal=yes fi if test $enable_crop = notset; then : enable_crop=yes fi if test $enable_fits = notset; then : enable_fits=yes fi if test $enable_match = notset; then : enable_match=yes fi if test $enable_mkcatalog = notset; then : enable_mkcatalog=yes fi if test $enable_mknoise = notset; then : enable_mknoise=yes fi if test $enable_mkprof = notset; then : enable_mkprof=yes fi if test $enable_noisechisel = notset; then : enable_noisechisel=yes fi if test $enable_statistics = notset; then : enable_statistics=yes fi if test $enable_table = notset; then : enable_table=yes fi # AS_IF([test $enable_TEMPLATE = notset], [enable_TEMPLATE=yes]) if test $enable_warp = notset; then : enable_warp=yes fi fi # BuildProgram depends on the presence of GNU Libtool, if it isn't present, # then don't build it. if test "x$has_gnulibtool" = "xno"; then : enable_buildprog=no fi # Make the enable_package values available for the Makefile: if test $enable_arithmetic = yes; then COND_ARITHMETIC_TRUE= COND_ARITHMETIC_FALSE='#' else COND_ARITHMETIC_TRUE='#' COND_ARITHMETIC_FALSE= fi if test $enable_buildprog = yes; then COND_BUILDPROG_TRUE= COND_BUILDPROG_FALSE='#' else COND_BUILDPROG_TRUE='#' COND_BUILDPROG_FALSE= fi if test $enable_convertt = yes; then COND_CONVERTT_TRUE= COND_CONVERTT_FALSE='#' else COND_CONVERTT_TRUE='#' COND_CONVERTT_FALSE= fi if test $enable_convolve = yes; then COND_CONVOLVE_TRUE= COND_CONVOLVE_FALSE='#' else COND_CONVOLVE_TRUE='#' COND_CONVOLVE_FALSE= fi if test $enable_cosmiccal = yes; then COND_COSMICCAL_TRUE= COND_COSMICCAL_FALSE='#' else COND_COSMICCAL_TRUE='#' COND_COSMICCAL_FALSE= fi if test $enable_crop = yes; then COND_CROP_TRUE= COND_CROP_FALSE='#' else COND_CROP_TRUE='#' COND_CROP_FALSE= fi if test $enable_fits = yes; then COND_FITS_TRUE= COND_FITS_FALSE='#' else COND_FITS_TRUE='#' COND_FITS_FALSE= fi if test $enable_match = yes; then COND_MATCH_TRUE= COND_MATCH_FALSE='#' else COND_MATCH_TRUE='#' COND_MATCH_FALSE= fi if test $enable_mkcatalog = yes; then COND_MKCATALOG_TRUE= COND_MKCATALOG_FALSE='#' else COND_MKCATALOG_TRUE='#' COND_MKCATALOG_FALSE= fi if test $enable_mknoise = yes; then COND_MKNOISE_TRUE= COND_MKNOISE_FALSE='#' else COND_MKNOISE_TRUE='#' COND_MKNOISE_FALSE= fi if test $enable_mkprof = yes; then COND_MKPROF_TRUE= COND_MKPROF_FALSE='#' else COND_MKPROF_TRUE='#' COND_MKPROF_FALSE= fi if test $enable_noisechisel = yes; then COND_NOISECHISEL_TRUE= COND_NOISECHISEL_FALSE='#' else COND_NOISECHISEL_TRUE='#' COND_NOISECHISEL_FALSE= fi if test $enable_statistics = yes; then COND_STATISTICS_TRUE= COND_STATISTICS_FALSE='#' else COND_STATISTICS_TRUE='#' COND_STATISTICS_FALSE= fi if test $enable_table = yes; then COND_TABLE_TRUE= COND_TABLE_FALSE='#' else COND_TABLE_TRUE='#' COND_TABLE_FALSE= fi #AM_CONDITIONAL([COND_TEMPLATE], [test $enable_TEMPLATE = yes]) if test $enable_warp = yes; then COND_WARP_TRUE= COND_WARP_FALSE='#' else COND_WARP_TRUE='#' COND_WARP_FALSE= fi # Tell autoconf what to work on: TEMPLATE cannot be put and then # commented here like the cases above, so don't forget to add your new # utility name here. ac_config_files="$ac_config_files Makefile doc/Makefile lib/Makefile tests/Makefile bin/crop/Makefile bin/fits/Makefile bin/warp/Makefile bin/table/Makefile bin/match/Makefile bin/mkprof/Makefile bin/mknoise/Makefile bin/convertt/Makefile bin/convolve/Makefile bin/buildprog/Makefile bin/cosmiccal/Makefile bin/mkcatalog/Makefile bin/arithmetic/Makefile bin/statistics/Makefile bin/noisechisel/Makefile bootstrapped/lib/Makefile bootstrapped/tests/Makefile" # Printing guiding messages. Autoconf will make the variable # enable_guide_message from the first argument to AC_ARG_ENABLE. It will # also give it a value. From the Autoconf manual, we see that # `--disable-guide-message' is equivalent to a value of `no', while with no # argument, the value will default to `yes'. In the last argument to # AC_ARG_ENABLE, we also specify the default behavior (when it isn't given # at all), here we want the default to be `yes'. # Check whether --enable-guide-message was given. if test "${enable_guide_message+set}" = set; then : enableval=$enable_guide_message; else enable_guide_message=yes fi GUIDEMESSAGE=$enable_guide_message # Build the man page directory. Note that this is the cleanest and most # portable way of building this directory. We don't want to do it in any of # the Makefiles. ac_config_commands="$ac_config_commands man page directory" # Make the Makefiles: cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_ALLOCA_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_ERRNO_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_FLOAT_H_TRUE}" && test -z "${GL_GENERATE_FLOAT_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_FLOAT_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDALIGN_H_TRUE}" && test -z "${GL_GENERATE_STDALIGN_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDALIGN_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_SYSEXITS_H_TRUE}" && test -z "${GL_GENERATE_SYSEXITS_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_SYSEXITS_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE}"; then as_fn_error $? "conditional \"LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi gl_libobjs= gl_ltlibobjs= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" done fi gl_LIBOBJS=$gl_libobjs gl_LTLIBOBJS=$gl_ltlibobjs if test -z "${GL_GENERATE_NETINET_IN_H_TRUE}" && test -z "${GL_GENERATE_NETINET_IN_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_NETINET_IN_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi gltests_libobjs= gltests_ltlibobjs= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" done fi gltests_LIBOBJS=$gltests_libobjs gltests_LTLIBOBJS=$gltests_ltlibobjs if test -z "${COND_HASHELP2MAN_TRUE}" && test -z "${COND_HASHELP2MAN_FALSE}"; then as_fn_error $? "conditional \"COND_HASHELP2MAN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_HASLIBJPEG_TRUE}" && test -z "${COND_HASLIBJPEG_FALSE}"; then as_fn_error $? "conditional \"COND_HASLIBJPEG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_HASGNULIBTOOL_TRUE}" && test -z "${COND_HASGNULIBTOOL_FALSE}"; then as_fn_error $? "conditional \"COND_HASGNULIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_HASGHOSTSCRIPT_TRUE}" && test -z "${COND_HASGHOSTSCRIPT_FALSE}"; then as_fn_error $? "conditional \"COND_HASGHOSTSCRIPT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_GNULIBCHECK_TRUE}" && test -z "${COND_GNULIBCHECK_FALSE}"; then as_fn_error $? "conditional \"COND_GNULIBCHECK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_ARITHMETIC_TRUE}" && test -z "${COND_ARITHMETIC_FALSE}"; then as_fn_error $? "conditional \"COND_ARITHMETIC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_BUILDPROG_TRUE}" && test -z "${COND_BUILDPROG_FALSE}"; then as_fn_error $? "conditional \"COND_BUILDPROG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_CONVERTT_TRUE}" && test -z "${COND_CONVERTT_FALSE}"; then as_fn_error $? "conditional \"COND_CONVERTT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_CONVOLVE_TRUE}" && test -z "${COND_CONVOLVE_FALSE}"; then as_fn_error $? "conditional \"COND_CONVOLVE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_COSMICCAL_TRUE}" && test -z "${COND_COSMICCAL_FALSE}"; then as_fn_error $? "conditional \"COND_COSMICCAL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_CROP_TRUE}" && test -z "${COND_CROP_FALSE}"; then as_fn_error $? "conditional \"COND_CROP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_FITS_TRUE}" && test -z "${COND_FITS_FALSE}"; then as_fn_error $? "conditional \"COND_FITS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_MATCH_TRUE}" && test -z "${COND_MATCH_FALSE}"; then as_fn_error $? "conditional \"COND_MATCH\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_MKCATALOG_TRUE}" && test -z "${COND_MKCATALOG_FALSE}"; then as_fn_error $? "conditional \"COND_MKCATALOG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_MKNOISE_TRUE}" && test -z "${COND_MKNOISE_FALSE}"; then as_fn_error $? "conditional \"COND_MKNOISE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_MKPROF_TRUE}" && test -z "${COND_MKPROF_FALSE}"; then as_fn_error $? "conditional \"COND_MKPROF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_NOISECHISEL_TRUE}" && test -z "${COND_NOISECHISEL_FALSE}"; then as_fn_error $? "conditional \"COND_NOISECHISEL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_STATISTICS_TRUE}" && test -z "${COND_STATISTICS_FALSE}"; then as_fn_error $? "conditional \"COND_STATISTICS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_TABLE_TRUE}" && test -z "${COND_TABLE_FALSE}"; then as_fn_error $? "conditional \"COND_TABLE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_WARP_TRUE}" && test -z "${COND_WARP_FALSE}"; then as_fn_error $? "conditional \"COND_WARP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by GNU Astronomy Utilities $as_me 0.5, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . GNU Astronomy Utilities home page: . General help using GNU software: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ GNU Astronomy Utilities config.status 0.5 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "bin/crop/Makefile") CONFIG_FILES="$CONFIG_FILES bin/crop/Makefile" ;; "bin/fits/Makefile") CONFIG_FILES="$CONFIG_FILES bin/fits/Makefile" ;; "bin/warp/Makefile") CONFIG_FILES="$CONFIG_FILES bin/warp/Makefile" ;; "bin/table/Makefile") CONFIG_FILES="$CONFIG_FILES bin/table/Makefile" ;; "bin/match/Makefile") CONFIG_FILES="$CONFIG_FILES bin/match/Makefile" ;; "bin/mkprof/Makefile") CONFIG_FILES="$CONFIG_FILES bin/mkprof/Makefile" ;; "bin/mknoise/Makefile") CONFIG_FILES="$CONFIG_FILES bin/mknoise/Makefile" ;; "bin/convertt/Makefile") CONFIG_FILES="$CONFIG_FILES bin/convertt/Makefile" ;; "bin/convolve/Makefile") CONFIG_FILES="$CONFIG_FILES bin/convolve/Makefile" ;; "bin/buildprog/Makefile") CONFIG_FILES="$CONFIG_FILES bin/buildprog/Makefile" ;; "bin/cosmiccal/Makefile") CONFIG_FILES="$CONFIG_FILES bin/cosmiccal/Makefile" ;; "bin/mkcatalog/Makefile") CONFIG_FILES="$CONFIG_FILES bin/mkcatalog/Makefile" ;; "bin/arithmetic/Makefile") CONFIG_FILES="$CONFIG_FILES bin/arithmetic/Makefile" ;; "bin/statistics/Makefile") CONFIG_FILES="$CONFIG_FILES bin/statistics/Makefile" ;; "bin/noisechisel/Makefile") CONFIG_FILES="$CONFIG_FILES bin/noisechisel/Makefile" ;; "bootstrapped/lib/Makefile") CONFIG_FILES="$CONFIG_FILES bootstrapped/lib/Makefile" ;; "bootstrapped/tests/Makefile") CONFIG_FILES="$CONFIG_FILES bootstrapped/tests/Makefile" ;; "man") CONFIG_COMMANDS="$CONFIG_COMMANDS man" ;; "page") CONFIG_COMMANDS="$CONFIG_COMMANDS page" ;; "directory") CONFIG_COMMANDS="$CONFIG_COMMANDS directory" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='CXX ' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive (by configure). lt_ar_flags=$lt_ar_flags # Flags to create an archive. AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; "man":C) $MKDIR_P doc/man ;; "page":C) $MKDIR_P doc/man ;; "directory":C) $MKDIR_P doc/man ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # Print a message if necessary if test x$enable_guide_message = xyes; then : $as_echo $as_echo ======================================================================= $as_echo ======================================================================= $as_echo "$PACKAGE_NAME (Gnuastro) $PACKAGE_VERSION is successfully" $as_echo "configured for this machine." $as_echo if test "x$anywarnings" = xyes; then : $as_echo "Configuration warning(s):" $as_echo if test "x$has_libjpeg" = "xno"; then : $as_echo " - libjpeg, could not be linked with in your library search path." $as_echo " If JPEG outputs are desired from ConvertType, it will warn" $as_echo " you and abort with an error." $as_echo fi if test "x$has_libgit2" = "x0"; then : $as_echo " - libgit2, could not be linked with in your library search path." $as_echo " When present, Git's describe output will be stored in the" $as_echo " output files if Gnuastro's programs were called within a Git" $as_echo " version controlled directory to help in reproducibility." $as_echo fi if test "x$has_gnulibtool" = "xno"; then : $as_echo " - GNU Libtool, could not be found in your search path." $as_echo " Gnuastro's BuildProgram uses GNU libtool to link your source code" $as_echo " with the various libraries (Gnuastro's dependencies). Therefore" $as_echo " BuildProgram will not be built or installed. Please note that" $as_echo " not having GNU libtool in your search path will not harm the rest" $as_echo " of Gnuastro's building and installation. Gnuastro has its own" $as_echo " internal implementation of GNU Libtool to build its self. This" $as_echo " warning is only to let you know that BuildProgram will not be" $as_echo " part of this build. The executable names searched were \`libtool'" $as_echo " and \`glibtool'." $as_echo if test "x$has_libtool" = "xyes"; then : $as_echo " -- A libtool implementation was found, but it isn't GNU." $as_echo fi fi if test "x$has_ghostscript" = "xno"; then : $as_echo " - GPL GhostScript version 9.10 or later, with the executable" $as_echo " name \`gs', was not found in your PATH environment variable." $as_echo " If PDF outputs are desired from ConvertType, it will abort" $as_echo " with an EPS output which you can convert to PDF by other means." $as_echo fi # The last two scenarios described below are taken from # https://unix.stackexchange.com/questions/65700/is-it-safe-to-add-to-my-path-how-come if test "x$path_warning" = "xyes"; then : $as_echo " - Your PATH contains the current directory. This does not affect" $as_echo " this build and installation of Gnuastro in any way, it is just to" $as_echo " to remind you that this is a security risk." $as_echo " It is a very serious security risk if it is closer to the start" $as_echo " of your PATH: a malicious/wrong program might be run instead of" $as_echo " a desired program, someone might find out you frequently mistype" $as_echo " a command and install a matching one, someone might install a" $as_echo " fake command with the name of one that is not installed. You can" $as_echo " always run a program in the current directory by explicity adding" $as_echo " a \`./' before it's name. Run the following command after" $as_echo " installing Gnuastro to learn more about PATH:" $as_echo " $ info gnuastro \"Installation directory\"" $as_echo fi $as_echo " All checks related to the warning(s) above will be skipped." $as_echo fi $as_echo "To build Gnuastro $PACKAGE_VERSION, please run:" $as_echo $as_echo " make -j8" $as_echo $as_echo "(You can change the 8 to the number of CPU threads available.)" $as_echo "(Configure with '--disable-guide-message' for no messages.)" $as_echo "(Please be patient, some libraries can take a few minutes to compile.)" $as_echo ======================================================================= $as_echo ======================================================================= $as_echo fi gnuastro-0.5/Makefile.am0000644000175000017500000003441013211076737012206 00000000000000## Process this file with automake to produce Makefile.in ## ## Hand written file: used as input into Autotools. ## This is part of GNU Astronomy Utilities (gnuastro). ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Sources to be created before everything else ## ============================================ ## ## These target(s) will be created before anything else when running ## `make', `make check', or `make install', see the "Built sources" section ## of the AUTOMAKE manual and the git-version-gen script comments for more ## information. Note that AUTHORS depends on `$(top_srcdir)/.version', and ## `$(top_srcdir)/.version' depends on $(top_srcdir)/configure'. So any ## time the version is updated, both of these will be re-built. But during ## usual utility and library development, `$(top_srcdir)/configure' is not ## commonly updated, so this will not slow down the process. BUILT_SOURCES = $(top_srcdir)/AUTHORS ## Directories to check: ## ===================== ## ## Gnulib is intentionally compiled and tested prior to the gnuastro ## progams. With this configuration, the user can confirm if the ## problem is internal to gnulib or still persists after all the ## Gnulib tests have been done. if COND_ARITHMETIC MAYBE_ARITHMETIC = bin/arithmetic endif if COND_BUILDPROG MAYBE_BUILDPROG = bin/buildprog endif if COND_CONVERTT MAYBE_CONVERTT = bin/convertt endif if COND_CONVOLVE MAYBE_CONVOLVE = bin/convolve endif if COND_COSMICCAL MAYBE_COSMICCAL = bin/cosmiccal endif if COND_CROP MAYBE_CROP = bin/crop endif if COND_FITS MAYBE_FITS = bin/fits endif if COND_MATCH MAYBE_MATCH = bin/match endif if COND_MKCATALOG MAYBE_MKCATALOG = bin/mkcatalog endif if COND_MKNOISE MAYBE_MKNOISE = bin/mknoise endif if COND_MKPROF MAYBE_MKPROF = bin/mkprof endif if COND_NOISECHISEL MAYBE_NOISECHISEL = bin/noisechisel endif if COND_STATISTICS MAYBE_STATISTICS = bin/statistics endif if COND_TABLE MAYBE_TABLE = bin/table endif #if COND_TEMPLATE # MAYBE_TEMPLATE = bin/TEMPLATE #endif if COND_WARP MAYBE_WARP = bin/warp endif if COND_GNULIBCHECK MAYBE_GNULIBCHECK = bootstrapped/tests endif ## Subdirectories to build ## ======================= ## ## Note that by default `COND_TEMPLATE' is not set in configure, it is ## commented, and exists only as a template for you to copy and paste to ## name your new utility. The same rule is applied here (in the `if' ## conditions above). When `MAYBE_TEMPLATE' is not defined, then Make will ## see it as a blank string and igonore it, so there is no problem with ## having an uncommented `MAYBE_TEMPLATE' as a value in `SUBDIRS'. SUBDIRS = bootstrapped/lib $(MAYBE_GNULIBCHECK) lib $(MAYBE_ARITHMETIC) \ $(MAYBE_BUILDPROG) $(MAYBE_CONVERTT) $(MAYBE_CONVOLVE) \ $(MAYBE_COSMICCAL) $(MAYBE_CROP) $(MAYBE_FITS) $(MAYBE_MATCH) \ $(MAYBE_MKCATALOG) $(MAYBE_MKNOISE) $(MAYBE_MKPROF) \ $(MAYBE_NOISECHISEL) $(MAYBE_STATISTICS) $(MAYBE_TABLE) \ $(MAYBE_TEMPLATE) $(MAYBE_WARP) doc tests ## Add m4/ to the list of directories to search for m4 files ## ========================================================= ACLOCAL_AMFLAGS = -I bootstrapped/m4 ## Files that are installed (and distributed) ## ========================================= dist_doc_DATA = README # Installed system configuration files # ==================================== dist_sysconf_DATA = bin/gnuastro.conf ## Files that are only distributed ## =============================== EXTRA_DIST = genauthors .dir-locals.el .version tmpfs-config-make \ bootstrapped/README .autom4te.cfg ## Print the completion messages ## ============================= ## ## After the jobs in all the subdirectories are done, print the following ## messages to confirm that everything is complete and guide the users on ## what they should do next. ## ## When running ./configure, the user can opt-out of these messages using ## the GUIDEMESSAGE variable that is set when they run ./configure with the ## `--distable-guide-message' option. ## ## Note that all-local is a prerequisite of `make check' too, so we will ## only print its message when `make' was called with no options. Make will ## set MAKECMDGOALS to blank if there are no arguments, however, the way ## Automake works, its value is set to "all-am". all-local: @if [ x$(MAKECMDGOALS) = x"all-am" ] && [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo "Gnuastro $(VERSION), was successfully built."; \ echo "Please check the build on your system by running:"; \ echo; \ echo " make check -j8"; \ echo; \ echo "(You can change the 8 to the number of CPU threads available.)"; \ echo "(The following \"Leaving directory\" notices can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi ## We cannot do the writing persmission test at configure time. Here is a ## quote from the generated ./configure script: The prefix variables... ## ## "... are left unexpanded so users can "make install exec_prefix=/foo" ## and all the variables that are supposed to be based on exec_prefix by ## default will actually change." ## ## So actually, they can also do that after `make check'. Usually ## professional users would want to do such a thing, so they can ignore the ## NOTE. This note is mostly for beginners and it is not written to convey ## that this is the ONLY solution. check-local: @if [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo "Your build of Gnuastro $(VERSION) didn't fail on any tests."; \ echo "To install Gnuastro, please run the command(s) below:"; \ echo; \ if [ ! -w $(prefix) ] ; then \ echo "(NOTE: As the user $$USER, you don't have writing permissions"; \ echo "in \"$(prefix)\". To install Gnuastro there, you must get "; \ echo "privileges first, as described below. If you can't, configure "; \ echo "Gnuastro again, for example: \"./configure --prefix ~/.local\".)"; \ echo; \ echo " sudo make install"; \ echo "or"; \ echo " su"; \ fi; \ echo " make install"; \ if [ ! -w $(prefix) ] ; then \ echo " exit"; \ fi; \ echo; \ echo "(The following \"Leaving directory\" notices can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi ## Note that the `\' characters in the GNU head here are not printed on the ## command line. So we have to consider them. The ASCII GNU head is taken ## from: https://www.gnu.org/graphics/gnu-ascii.html install-exec-local: @if [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo " , , "; \ echo " / \ "; \ echo " ((__-^^-,-^^-__)) Congratulations!"; \ echo " \`-_---' \`---_-' GNU Astronomy Utilities (Gnuastro),"; \ echo " \`--|o\` 'o|--' Version $(VERSION)"; \ echo " \ \` / "; \ echo " ): :( Successfully installed on this system."; \ echo " :o_o: "; \ echo " \"-\" "; \ echo; \ echo "More information Command to run "; \ echo "---------------- -------------- "; \ echo "Complete official Gnuastro book: ' info gnuastro '"; \ echo "Entertaining tutorials: ' info gnuastro Tutorials '"; \ echo "Dedicated help mailing list: ' info help-gnuastro '"; \ echo "Instructions for reporting bugs: ' info bug-gnuastro '"; \ echo "Effectively use Info: ' info info '"; \ echo; \ echo; \ echo "Environment variables to check: "; \ echo " - '$(prefix)/bin' in PATH."; \ echo " - '$(prefix)/lib' in LD_LIBRARY_PATH."; \ echo "(for an intro, run 'info gnuastro \"Installation directory\"')"; \ echo; \ echo; \ echo "To stay up to date with future releases, please subscribe to: "; \ echo " https://lists.gnu.org/mailman/listinfo/info-gnuastro"; \ echo; \ echo; \ echo "(The following lines can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi ## $(top_srcdir)/.version ## ====================== ## ## This file is created from the $(VERSION) variable which was defined by ## the `git-version-gen' script (located at address below), which is run ## when the `$(top_srcdir)/configure' script is being built by Autoconf. ## ## $(top_srcdir)/bootstrapped/build-aux/git-version-gen ## ## Note that contrary to what is proposed by `git-version-gen', here the ## creation of `$(top_srcdir)/.version' depends on the ## `$(top_srcdir)/configure' script. Therefore, anytime a the VERSION ## variable is updated there, `$(top_srcdir)/.version' is also ## updated. During development, of the main functionality of Gnuastro ## (utilities and libraries), the `$(top_srcdir/configure' script is rarely ## updated, so `$(top_srcdir)/.version' will not be rebuilt and thus it ## won't harm the speed of tests during development. $(top_srcdir)/.version: $(top_srcdir)/configure echo $(VERSION) > $@-t && mv $@-t $@ ## $(top_srcdir)/AUTHORS ## ===================== ## ## This file is generated automatically from the version controlled ## history. Note the following: ## ## - `$(top_srcdir)/AUTHORS' is defined as a BUILT_SOURCES variable, so ## it is the first thing that is built (even in multi-threaded runs). ## ## - `$(top_srcdir)/AUTHORS' is updated only when ## `$(top_srcdir)/.version' is updated. `$(top_srcdir)/.version' its ## self is only updated when `$(top_srcdir)/configure' is updated. But ## generally, the `$(top_srcdir)/configure' script is not updated ## regularly during development and outside of version control. ## ## - The `$(top_srcdir)/genauthors' script will not do anything ## (make/update the `$(top_srcdir)AUTHORS' file) when there is no git ## repository. `$(top_srcdir)/AUTHORS' is only necessary when building ## a tarball distribution. $(top_srcdir)/AUTHORS: $(top_srcdir)/.version $(top_srcdir)/genauthors $(top_srcdir) ## Run when building a distribution ## ================================ ## ## These targets will be created when building a (tarball) ## distribution. Note that AUTHORS depends on `.version'. dist-hook: $(top_srcdir)/AUTHORS echo $(VERSION) > $(distdir)/.tarball-version ## Nice joke ## ========= ## ## This joke is taken from the "The art of unix programming", and a quote ## by Stuart Feldman (creator of Make): "One of the older Unix jokes is ## "Make love" which results in "Don’t know how to make love"." love: @echo "Don't know how to make love!" gnuastro-0.5/bootstrapped/0000755000175000017500000000000013217220467012733 500000000000000gnuastro-0.5/bootstrapped/doc/0000755000175000017500000000000013217220467013500 500000000000000gnuastro-0.5/bootstrapped/doc/fdl.texi0000644000175000017500000005561213217200020015050 00000000000000@c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. @uref{https://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, La@TeX{} input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG@. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The ``publisher'' means any person or entity that distributes copies of the Document to the public. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See @uref{https://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.''@: line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: gnuastro-0.5/bootstrapped/tests/0000755000175000017500000000000013217220466014074 500000000000000gnuastro-0.5/bootstrapped/tests/xalloc-oversized.h0000644000175000017500000000442513217200024017450 00000000000000/* xalloc-oversized.h -- memory allocation size checking Copyright (C) 1990-2000, 2003-2004, 2006-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef XALLOC_OVERSIZED_H_ #define XALLOC_OVERSIZED_H_ #include #include /* True if N * S would overflow in a size_t calculation, or would generate a value larger than PTRDIFF_MAX. This expands to a constant expression if N and S are both constants. By gnulib convention, SIZE_MAX represents overflow in size calculations, so the conservative size_t-based dividend to use here is SIZE_MAX - 1. */ #define __xalloc_oversized(n, s) \ ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) < (n)) #if PTRDIFF_MAX < SIZE_MAX typedef ptrdiff_t __xalloc_count_type; #else typedef size_t __xalloc_count_type; #endif /* Return 1 if an array of N objects, each of size S, cannot exist reliably due to size or ptrdiff_t arithmetic overflow. S must be positive and N must be nonnegative. This is a macro, not a function, so that it works correctly even when SIZE_MAX < N. */ #if 7 <= __GNUC__ # define xalloc_oversized(n, s) \ __builtin_mul_overflow_p (n, s, (__xalloc_count_type) 1) #elif 5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ # define xalloc_oversized(n, s) \ (__builtin_constant_p (n) && __builtin_constant_p (s) \ ? __xalloc_oversized (n, s) \ : ({ __xalloc_count_type __xalloc_count; \ __builtin_mul_overflow (n, s, &__xalloc_count); })) /* Other compilers use integer division; this may be slower but is more portable. */ #else # define xalloc_oversized(n, s) __xalloc_oversized (n, s) #endif #endif /* !XALLOC_OVERSIZED_H_ */ gnuastro-0.5/bootstrapped/tests/wctomb-impl.h0000644000175000017500000000211313217200024016400 00000000000000/* Convert wide character to multibyte character. Copyright (C) 2011-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2011. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ int wctomb (char *s, wchar_t wc) { if (s == NULL) return 0; else { mbstate_t state; size_t result; memset (&state, 0, sizeof (mbstate_t)); result = wcrtomb (s, wc, &state); if (result == (size_t)-1) return -1; return result; } } gnuastro-0.5/bootstrapped/tests/test-wcrtomb-w32-5.sh0000755000175000017500000000012013217200024017535 00000000000000#!/bin/sh # Test a CP936 locale. ./test-wcrtomb-w32${EXEEXT} Chinese_China 936 gnuastro-0.5/bootstrapped/tests/test-wcrtomb-w32-4.sh0000755000175000017500000000012113217200024017535 00000000000000#!/bin/sh # Test a CP950 locale. ./test-wcrtomb-w32${EXEEXT} Chinese_Taiwan 950 gnuastro-0.5/bootstrapped/tests/test-wcrtomb-w32-3.sh0000755000175000017500000000012113217200024017534 00000000000000#!/bin/sh # Test a CP932 locale. ./test-wcrtomb-w32${EXEEXT} Japanese_Japan 932 gnuastro-0.5/bootstrapped/tests/test-wcrtomb-w32-2.sh0000755000175000017500000000013213217200024017535 00000000000000#!/bin/sh # Test a CP1256 locale. ./test-wcrtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 gnuastro-0.5/bootstrapped/tests/test-wcrtomb-w32-1.sh0000755000175000017500000000012213217200024017533 00000000000000#!/bin/sh # Test a CP1252 locale. ./test-wcrtomb-w32${EXEEXT} French_France 1252 gnuastro-0.5/bootstrapped/tests/test-wcrtomb.sh0000755000175000017500000000136113217200024016772 00000000000000#!/bin/sh # Test in an ISO-8859-1 or ISO-8859-15 locale. : ${LOCALE_FR=fr_FR} if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ./test-wcrtomb${EXEEXT} 1 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ./test-wcrtomb${EXEEXT} 2 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : ${LOCALE_JA=ja_JP} if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ./test-wcrtomb${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : ${LOCALE_ZH_CN=zh_CN.GB18030} if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ./test-wcrtomb${EXEEXT} 4 \ || exit 1 fi exit 0 gnuastro-0.5/bootstrapped/tests/test-verify.sh0000755000175000017500000000132513217200024016621 00000000000000#!/bin/sh . "${srcdir=.}/init.sh" # We are not interested in triggering bugs in the compilers and tools # (such as gcc 4.3.1 on openSUSE 11.0). unset MALLOC_PERTURB_ # Rather than figure out how to invoke the compiler with the right # include path ourselves, we let make do it: (cd "$initial_cwd_" \ && rm -f test-verify-try.o \ && $MAKE test-verify-try.o >/dev/null 2>&1) \ || skip_ "cannot compile error-free" # Now, prove that we encounter all expected compilation failures: : >out : >err for i in 1 2 3 4 5; do (cd "$initial_cwd_" rm -f test-verify-try.o $MAKE CFLAGS=-DEXP_FAIL=$i test-verify-try.o) >>out 2>>err \ && { warn_ "compiler didn't detect verification failure $i"; fail=1; } done Exit $fail gnuastro-0.5/bootstrapped/tests/time.in.h0000644000175000017500000003134013217200024015515 00000000000000/* A more-standard . Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Don't get in the way of glibc when it includes time.h merely to declare a few standard symbols, rather than to declare all the symbols. (However, skip this for MinGW as it treats __need_time_t incompatibly.) Also, Solaris 8 eventually includes itself recursively; if that is happening, just include the system without adding our own declarations. */ #if (((defined __need_time_t || defined __need_clock_t \ || defined __need_timespec) \ && !defined __MINGW32__) \ || defined _@GUARD_PREFIX@_TIME_H) # @INCLUDE_NEXT@ @NEXT_TIME_H@ #else # define _@GUARD_PREFIX@_TIME_H # @INCLUDE_NEXT@ @NEXT_TIME_H@ /* NetBSD 5.0 mis-defines NULL. */ # include /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3). Or they define it with the wrong member names or define it in (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, but the pthreads-win32 library defines it in . */ # if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ # if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ # include # elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ # include # elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ # include # else # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_struct_timespec # undef timespec # define timespec rpl_timespec struct timespec { time_t tv_sec; long int tv_nsec; }; # define GNULIB_defined_struct_timespec 1 # endif # ifdef __cplusplus } # endif # endif # endif # if !GNULIB_defined_struct_time_t_must_be_integral /* Per http://austingroupbugs.net/view.php?id=327, POSIX requires time_t to be an integer type, even though C99 permits floating point. We don't know of any implementation that uses floating point, and it is much easier to write code that doesn't have to worry about that corner case, so we force the issue. */ struct __time_t_must_be_integral { unsigned int __floating_time_t_unsupported : (time_t) 1; }; # define GNULIB_defined_struct_time_t_must_be_integral 1 # endif /* Sleep for at least RQTP seconds unless interrupted, If interrupted, return -1 and store the remaining time into RMTP. See . */ # if @GNULIB_NANOSLEEP@ # if @REPLACE_NANOSLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define nanosleep rpl_nanosleep # endif _GL_FUNCDECL_RPL (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # else # if ! @HAVE_NANOSLEEP@ _GL_FUNCDECL_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # endif _GL_CXXALIASWARN (nanosleep); # endif /* Initialize time conversion information. */ # if @GNULIB_TZSET@ # if @REPLACE_TZSET@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset rpl_tzset # endif _GL_FUNCDECL_RPL (tzset, void, (void)); _GL_CXXALIAS_RPL (tzset, void, (void)); # else # if ! @HAVE_TZSET@ _GL_FUNCDECL_SYS (tzset, void, (void)); # endif _GL_CXXALIAS_SYS (tzset, void, (void)); # endif _GL_CXXALIASWARN (tzset); # endif /* Return the 'time_t' representation of TP and normalize TP. */ # if @GNULIB_MKTIME@ # if @REPLACE_MKTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mktime rpl_mktime # endif _GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); # else _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); # endif _GL_CXXALIASWARN (mktime); # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See and . */ # if @GNULIB_TIME_R@ # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime_r # define localtime_r rpl_localtime_r # endif _GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # else # if ! @HAVE_DECL_LOCALTIME_R@ _GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # endif # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (localtime_r); # endif # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime_r # define gmtime_r rpl_gmtime_r # endif _GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # else # if ! @HAVE_DECL_LOCALTIME_R@ _GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # endif # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (gmtime_r); # endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See and . */ # if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@ # if @REPLACE_LOCALTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime # define localtime rpl_localtime # endif _GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); # endif _GL_CXXALIASWARN (localtime); # endif # if 0 || @REPLACE_GMTIME@ # if @REPLACE_GMTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime # define gmtime rpl_gmtime # endif _GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); # endif _GL_CXXALIASWARN (gmtime); # endif /* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store the resulting broken-down time into TM. See . */ # if @GNULIB_STRPTIME@ # if ! @HAVE_STRPTIME@ _GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm)); _GL_CXXALIASWARN (strptime); # endif /* Convert *TP to a date and time string. See . */ # if @GNULIB_CTIME@ # if @REPLACE_CTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define ctime rpl_ctime # endif _GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); # else _GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); # endif _GL_CXXALIASWARN (ctime); # endif /* Convert *TP to a date and time string. See . */ # if @GNULIB_STRFTIME@ # if @REPLACE_STRFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strftime rpl_strftime # endif _GL_FUNCDECL_RPL (strftime, size_t, (char *__buf, size_t __bufsize, const char *__fmt, const struct tm *__tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (strftime, size_t, (char *__buf, size_t __bufsize, const char *__fmt, const struct tm *__tp)); # else _GL_CXXALIAS_SYS (strftime, size_t, (char *__buf, size_t __bufsize, const char *__fmt, const struct tm *__tp)); # endif _GL_CXXALIASWARN (strftime); # endif # if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ typedef struct tm_zone *timezone_t; _GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); _GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); _GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); _GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); _GL_FUNCDECL_SYS (localtime_rz, struct tm *, (timezone_t __tz, time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_SYS (localtime_rz, struct tm *, (timezone_t __tz, time_t const *restrict __timer, struct tm *restrict __result)); _GL_FUNCDECL_SYS (mktime_z, time_t, (timezone_t __tz, struct tm *restrict __result) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (mktime_z, time_t, (timezone_t __tz, struct tm *restrict __result)); # endif /* Convert TM to a time_t value, assuming UTC. */ # if @GNULIB_TIMEGM@ # if @REPLACE_TIMEGM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef timegm # define timegm rpl_timegm # endif _GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); # else # if ! @HAVE_TIMEGM@ _GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); # endif _GL_CXXALIASWARN (timegm); # endif /* Encourage applications to avoid unsafe functions that can overrun buffers when given outlandish struct tm values. Portable applications should use strftime (or even sprintf) instead. */ # if defined GNULIB_POSIXCHECK # undef asctime _GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef asctime_r _GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef ctime _GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef ctime_r _GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif #endif gnuastro-0.5/bootstrapped/tests/test-init.sh0000755000175000017500000000463413217200023016265 00000000000000#!/bin/sh # Unit tests for init.sh # Copyright (C) 2011-2017 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . */ : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . fail=0 test_compare() { touch empty || fail=1 echo xyz > in || fail=1 compare /dev/null /dev/null >out 2>err || fail=1 test -s out && fail_ "out not empty: $(cat out)" # "err" should be empty, too, but has "set -x" output when VERBOSE=yes case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare /dev/null empty >out 2>err || fail=1 test -s out && fail_ "out not empty: $(cat out)" case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare in in >out 2>err || fail=1 test -s out && fail_ "out not empty: $(cat out)" case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare /dev/null in >out 2>err && fail=1 cat <<\EOF > exp diff -u /dev/null in --- /dev/null 1970-01-01 +++ in 1970-01-01 +xyz EOF compare exp out || fail=1 case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare empty in >out 2>err && fail=1 # Compare against expected output only if compare is using diff -u. if grep @ out >/dev/null; then # Remove the TAB-date suffix on each --- and +++ line, # for both the expected and the actual output files. # Also remove the @@ line, since Solaris 5.10 and GNU diff formats differ: # -@@ -0,0 +1 @@ # +@@ -1,0 +1,1 @@ # Also, remove space after leading '+', since AIX 7.1 diff outputs a space. sed 's/ .*//;/^@@/d;s/^+ /+/' out > k && mv k out cat <<\EOF > exp --- empty +++ in +xyz EOF compare exp out || fail=1 fi case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac } test_compare Exit $fail gnuastro-0.5/bootstrapped/tests/init.sh0000644000175000017500000005022513217200022015301 00000000000000# source this file; set up for tests # Copyright (C) 2009-2017 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Using this file in a test # ========================= # # The typical skeleton of a test looks like this: # # #!/bin/sh # . "${srcdir=.}/init.sh"; path_prepend_ . # Execute some commands. # Note that these commands are executed in a subdirectory, therefore you # need to prepend "../" to relative filenames in the build directory. # Note that the "path_prepend_ ." is useful only if the body of your # test invokes programs residing in the initial directory. # For example, if the programs you want to test are in src/, and this test # script is named tests/test-1, then you would use "path_prepend_ ../src", # or perhaps export PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH" # to all tests via automake's TESTS_ENVIRONMENT. # Set the exit code 0 for success, 77 for skipped, or 1 or other for failure. # Use the skip_ and fail_ functions to print a diagnostic and then exit # with the corresponding exit code. # Exit $? # Executing a test that uses this file # ==================================== # # Running a single test: # $ make check TESTS=test-foo.sh # # Running a single test, with verbose output: # $ make check TESTS=test-foo.sh VERBOSE=yes # # Running a single test, keeping the temporary directory: # $ make check TESTS=test-foo.sh KEEP=yes # # Running a single test, with single-stepping: # 1. Go into a sub-shell: # $ bash # 2. Set relevant environment variables from TESTS_ENVIRONMENT in the # Makefile: # $ export srcdir=../../tests # this is an example # 3. Execute the commands from the test, copy&pasting them one by one: # $ . "$srcdir/init.sh"; path_prepend_ . # ... # 4. Finally # $ exit ME_=`expr "./$0" : '.*/\(.*\)$'` # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # We use a trap below for cleanup. This requires us to go through # hoops to get the right exit status transported through the handler. # So use 'Exit STATUS' instead of 'exit STATUS' inside of the tests. # Turn off errexit here so that we don't trip the bug with OSF1/Tru64 # sh inside this function. Exit () { set +e; (exit $1); exit $1; } # Print warnings (e.g., about skipped and failed tests) to this file number. # Override by defining to say, 9, in init.cfg, and putting say, # export ...ENVVAR_SETTINGS...; $(SHELL) 9>&2 # in the definition of TESTS_ENVIRONMENT in your tests/Makefile.am file. # This is useful when using automake's parallel tests mode, to print # the reason for skip/failure to console, rather than to the .log files. : ${stderr_fileno_=2} # Note that correct expansion of "$*" depends on IFS starting with ' '. # Always write the full diagnostic to stderr. # When stderr_fileno_ is not 2, also emit the first line of the # diagnostic to that file descriptor. warn_ () { # If IFS does not start with ' ', set it and emit the warning in a subshell. case $IFS in ' '*) printf '%s\n' "$*" >&2 test $stderr_fileno_ = 2 \ || { printf '%s\n' "$*" | sed 1q >&$stderr_fileno_ ; } ;; *) (IFS=' '; warn_ "$@");; esac } fail_ () { warn_ "$ME_: failed test: $@"; Exit 1; } skip_ () { warn_ "$ME_: skipped test: $@"; Exit 77; } fatal_ () { warn_ "$ME_: hard error: $@"; Exit 99; } framework_failure_ () { warn_ "$ME_: set-up failure: $@"; Exit 99; } # This is used to simplify checking of the return value # which is useful when ensuring a command fails as desired. # I.e., just doing `command ... &&fail=1` will not catch # a segfault in command for example. With this helper you # instead check an explicit exit code like # returns_ 1 command ... || fail returns_ () { # Disable tracing so it doesn't interfere with stderr of the wrapped command { set +x; } 2>/dev/null local exp_exit="$1" shift "$@" test $? -eq $exp_exit && ret_=0 || ret_=1 if test "$VERBOSE" = yes && test "$gl_set_x_corrupts_stderr_" = false; then set -x fi { return $ret_; } 2>/dev/null } # Sanitize this shell to POSIX mode, if possible. DUALCASE=1; export DUALCASE if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # We require $(...) support unconditionally. # We require non-surprising "local" semantics (this eliminates dash). # This takes the admittedly draconian step of eliminating dash, because the # assignment tab=$(printf '\t') works fine, yet preceding it with "local " # transforms it into an assignment that sets the variable to the empty string. # That is too counter-intuitive, and can lead to subtle run-time malfunction. # The example below is less subtle in that with dash, it evokes the run-time # exception "dash: 1: local: 1: bad variable name". # We require a few additional shell features only when $EXEEXT is nonempty, # in order to support automatic $EXEEXT emulation: # - hyphen-containing alias names # - we prefer to use ${var#...} substitution, rather than having # to work around lack of support for that feature. # The following code attempts to find a shell with support for these features. # If the current shell passes the test, we're done. Otherwise, test other # shells until we find one that passes. If one is found, re-exec it. # If no acceptable shell is found, skip the current test. # # The "...set -x; P=1 true 2>err..." test is to disqualify any shell that # emits "P=1" into err, as /bin/sh from SunOS 5.11 and OpenBSD 4.7 do. # # Use "9" to indicate success (rather than 0), in case some shell acts # like Solaris 10's /bin/sh but exits successfully instead of with status 2. # Eval this code in a subshell to determine a shell's suitability. # 10 - passes all tests; ok to use # 9 - ok, but enabling "set -x" corrupts app stderr; prefer higher score # ? - not ok gl_shell_test_script_=' test $(echo y) = y || exit 1 f_local_() { local v=1; }; f_local_ || exit 1 f_dash_local_fail_() { local t=$(printf " 1"); }; f_dash_local_fail_ score_=10 if test "$VERBOSE" = yes; then test -n "$( (exec 3>&1; set -x; P=1 true 2>&3) 2> /dev/null)" && score_=9 fi test -z "$EXEEXT" && exit $score_ shopt -s expand_aliases alias a-b="echo zoo" v=abx test ${v%x} = ab \ && test ${v#a} = bx \ && test $(a-b) = zoo \ && exit $score_ ' if test "x$1" = "x--no-reexec"; then shift else # Assume a working shell. Export to subshells (setup_ needs this). gl_set_x_corrupts_stderr_=false export gl_set_x_corrupts_stderr_ # Record the first marginally acceptable shell. marginal_= # Search for a shell that meets our requirements. for re_shell_ in __current__ "${CONFIG_SHELL:-no_shell}" \ /bin/sh bash dash zsh pdksh fail do test "$re_shell_" = no_shell && continue # If we've made it all the way to the sentinel, "fail" without # finding even a marginal shell, skip this test. if test "$re_shell_" = fail; then test -z "$marginal_" && skip_ failed to find an adequate shell re_shell_=$marginal_ break fi # When testing the current shell, simply "eval" the test code. # Otherwise, run it via $re_shell_ -c ... if test "$re_shell_" = __current__; then # 'eval'ing this code makes Solaris 10's /bin/sh exit with # $? set to 2. It does not evaluate any of the code after the # "unexpected" first '('. Thus, we must run it in a subshell. ( eval "$gl_shell_test_script_" ) > /dev/null 2>&1 else "$re_shell_" -c "$gl_shell_test_script_" 2>/dev/null fi st_=$? # $re_shell_ works just fine. Use it. if test $st_ = 10; then gl_set_x_corrupts_stderr_=false break fi # If this is our first marginally acceptable shell, remember it. if test "$st_:$marginal_" = 9: ; then marginal_="$re_shell_" gl_set_x_corrupts_stderr_=true fi done if test "$re_shell_" != __current__; then # Found a usable shell. Preserve -v and -x. case $- in *v*x* | *x*v*) opts_=-vx ;; *v*) opts_=-v ;; *x*) opts_=-x ;; *) opts_= ;; esac re_shell=$re_shell_ export re_shell exec "$re_shell_" $opts_ "$0" --no-reexec "$@" echo "$ME_: exec failed" 1>&2 exit 127 fi fi # If this is bash, turn off all aliases. test -n "$BASH_VERSION" && unalias -a # Note that when supporting $EXEEXT (transparently mapping from PROG_NAME to # PROG_NAME.exe), we want to support hyphen-containing names like test-acos. # That is part of the shell-selection test above. Why use aliases rather # than functions? Because support for hyphen-containing aliases is more # widespread than that for hyphen-containing function names. test -n "$EXEEXT" && test -n "$BASH_VERSION" && shopt -s expand_aliases # Enable glibc's malloc-perturbing option. # This is useful for exposing code that depends on the fact that # malloc-related functions often return memory that is mostly zeroed. # If you have the time and cycles, use valgrind to do an even better job. : ${MALLOC_PERTURB_=87} export MALLOC_PERTURB_ # This is a stub function that is run upon trap (upon regular exit and # interrupt). Override it with a per-test function, e.g., to unmount # a partition, or to undo any other global state changes. cleanup_ () { :; } # Emit a header similar to that from diff -u; Print the simulated "diff" # command so that the order of arguments is clear. Don't bother with @@ lines. emit_diff_u_header_ () { printf '%s\n' "diff -u $*" \ "--- $1 1970-01-01" \ "+++ $2 1970-01-01" } # Arrange not to let diff or cmp operate on /dev/null, # since on some systems (at least OSF/1 5.1), that doesn't work. # When there are not two arguments, or no argument is /dev/null, return 2. # When one argument is /dev/null and the other is not empty, # cat the nonempty file to stderr and return 1. # Otherwise, return 0. compare_dev_null_ () { test $# = 2 || return 2 if test "x$1" = x/dev/null; then test -s "$2" || return 0 emit_diff_u_header_ "$@"; sed 's/^/+/' "$2" return 1 fi if test "x$2" = x/dev/null; then test -s "$1" || return 0 emit_diff_u_header_ "$@"; sed 's/^/-/' "$1" return 1 fi return 2 } for diff_opt_ in -u -U3 -c '' no; do test "$diff_opt_" != no && diff_out_=`exec 2>/dev/null; diff $diff_opt_ "$0" "$0" < /dev/null` && break done if test "$diff_opt_" != no; then if test -z "$diff_out_"; then compare_ () { diff $diff_opt_ "$@"; } else compare_ () { # If no differences were found, AIX and HP-UX 'diff' produce output # like "No differences encountered". Hide this output. diff $diff_opt_ "$@" > diff.out diff_status_=$? test $diff_status_ -eq 0 || cat diff.out || diff_status_=2 rm -f diff.out || diff_status_=2 return $diff_status_ } fi elif cmp -s /dev/null /dev/null 2>/dev/null; then compare_ () { cmp -s "$@"; } else compare_ () { cmp "$@"; } fi # Usage: compare EXPECTED ACTUAL # # Given compare_dev_null_'s preprocessing, defer to compare_ if 2 or more. # Otherwise, propagate $? to caller: any diffs have already been printed. compare () { # This looks like it can be factored to use a simple "case $?" # after unchecked compare_dev_null_ invocation, but that would # fail in a "set -e" environment. if compare_dev_null_ "$@"; then return 0 else case $? in 1) return 1;; *) compare_ "$@";; esac fi } # An arbitrary prefix to help distinguish test directories. testdir_prefix_ () { printf gt; } # Run the user-overridable cleanup_ function, remove the temporary # directory and exit with the incoming value of $?. remove_tmp_ () { __st=$? cleanup_ if test "$KEEP" = yes; then echo "Not removing temporary directory $test_dir_" else # cd out of the directory we're about to remove cd "$initial_cwd_" || cd / || cd /tmp chmod -R u+rwx "$test_dir_" # If removal fails and exit status was to be 0, then change it to 1. rm -rf "$test_dir_" || { test $__st = 0 && __st=1; } fi exit $__st } # Given a directory name, DIR, if every entry in it that matches *.exe # contains only the specified bytes (see the case stmt below), then print # a space-separated list of those names and return 0. Otherwise, don't # print anything and return 1. Naming constraints apply also to DIR. find_exe_basenames_ () { feb_dir_=$1 feb_fail_=0 feb_result_= feb_sp_= for feb_file_ in $feb_dir_/*.exe; do # If there was no *.exe file, or there existed a file named "*.exe" that # was deleted between the above glob expansion and the existence test # below, just skip it. test "x$feb_file_" = "x$feb_dir_/*.exe" && test ! -f "$feb_file_" \ && continue # Exempt [.exe, since we can't create a function by that name, yet # we can't invoke [ by PATH search anyways due to shell builtins. test "x$feb_file_" = "x$feb_dir_/[.exe" && continue case $feb_file_ in *[!-a-zA-Z/0-9_.+]*) feb_fail_=1; break;; *) # Remove leading file name components as well as the .exe suffix. feb_file_=${feb_file_##*/} feb_file_=${feb_file_%.exe} feb_result_="$feb_result_$feb_sp_$feb_file_";; esac feb_sp_=' ' done test $feb_fail_ = 0 && printf %s "$feb_result_" return $feb_fail_ } # Consider the files in directory, $1. # For each file name of the form PROG.exe, create an alias named # PROG that simply invokes PROG.exe, then return 0. If any selected # file name or the directory name, $1, contains an unexpected character, # define no alias and return 1. create_exe_shims_ () { case $EXEEXT in '') return 0 ;; .exe) ;; *) echo "$0: unexpected \$EXEEXT value: $EXEEXT" 1>&2; return 1 ;; esac base_names_=`find_exe_basenames_ $1` \ || { echo "$0 (exe_shim): skipping directory: $1" 1>&2; return 0; } if test -n "$base_names_"; then for base_ in $base_names_; do alias "$base_"="$base_$EXEEXT" done fi return 0 } # Use this function to prepend to PATH an absolute name for each # specified, possibly-$initial_cwd_-relative, directory. path_prepend_ () { while test $# != 0; do path_dir_=$1 case $path_dir_ in '') fail_ "invalid path dir: '$1'";; /* | ?:*) abs_path_dir_=$path_dir_;; *) abs_path_dir_=$initial_cwd_/$path_dir_;; esac case $abs_path_dir_ in *$PATH_SEPARATOR*) fail_ "invalid path dir: '$abs_path_dir_'";; esac PATH="$abs_path_dir_$PATH_SEPARATOR$PATH" # Create an alias, FOO, for each FOO.exe in this directory. create_exe_shims_ "$abs_path_dir_" \ || fail_ "something failed (above): $abs_path_dir_" shift done export PATH } setup_ () { if test "$VERBOSE" = yes; then # Test whether set -x may cause the selected shell to corrupt an # application's stderr. Many do, including zsh-4.3.10 and the /bin/sh # from SunOS 5.11, OpenBSD 4.7 and Irix 5.x and 6.5. # If enabling verbose output this way would cause trouble, simply # issue a warning and refrain. if $gl_set_x_corrupts_stderr_; then warn_ "using SHELL=$SHELL with 'set -x' corrupts stderr" else set -x fi fi initial_cwd_=$PWD pfx_=`testdir_prefix_` test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` \ || fail_ "failed to create temporary directory in $initial_cwd_" cd "$test_dir_" || fail_ "failed to cd to temporary directory" # As autoconf-generated configure scripts do, ensure that IFS # is defined initially, so that saving and restoring $IFS works. gl_init_sh_nl_=' ' IFS=" "" $gl_init_sh_nl_" # This trap statement, along with a trap on 0 below, ensure that the # temporary directory, $test_dir_, is removed upon exit as well as # upon receipt of any of the listed signals. for sig_ in 1 2 3 13 15; do eval "trap 'Exit $(expr $sig_ + 128)' $sig_" done } # Create a temporary directory, much like mktemp -d does. # Written by Jim Meyering. # # Usage: mktempd_ /tmp phoey.XXXXXXXXXX # # First, try to use the mktemp program. # Failing that, we'll roll our own mktemp-like function: # - try to get random bytes from /dev/urandom # - failing that, generate output from a combination of quickly-varying # sources and gzip. Ignore non-varying gzip header, and extract # "random" bits from there. # - given those bits, map to file-name bytes using tr, and try to create # the desired directory. # - make only $MAX_TRIES_ attempts # Helper function. Print $N pseudo-random bytes from a-zA-Z0-9. rand_bytes_ () { n_=$1 # Maybe try openssl rand -base64 $n_prime_|tr '+/=\012' abcd first? # But if they have openssl, they probably have mktemp, too. chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 dev_rand_=/dev/urandom if test -r "$dev_rand_"; then # Note: 256-length($chars_) == 194; 3 copies of $chars_ is 186 + 8 = 194. dd ibs=$n_ count=1 if=$dev_rand_ 2>/dev/null \ | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ return fi n_plus_50_=`expr $n_ + 50` cmds_='date; date +%N; free; who -a; w; ps auxww; ps ef; netstat -n' data_=` (eval "$cmds_") 2>&1 | gzip ` # Ensure that $data_ has length at least 50+$n_ while :; do len_=`echo "$data_"|wc -c` test $n_plus_50_ -le $len_ && break; data_=` (echo "$data_"; eval "$cmds_") 2>&1 | gzip ` done echo "$data_" \ | dd bs=1 skip=50 count=$n_ 2>/dev/null \ | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ } mktempd_ () { case $# in 2);; *) fail_ "Usage: mktempd_ DIR TEMPLATE";; esac destdir_=$1 template_=$2 MAX_TRIES_=4 # Disallow any trailing slash on specified destdir: # it would subvert the post-mktemp "case"-based destdir test. case $destdir_ in / | //) destdir_slash_=$destdir;; */) fail_ "invalid destination dir: remove trailing slash(es)";; *) destdir_slash_=$destdir_/;; esac case $template_ in *XXXX) ;; *) fail_ \ "invalid template: $template_ (must have a suffix of at least 4 X's)";; esac # First, try to use mktemp. d=`unset TMPDIR; { mktemp -d -t -p "$destdir_" "$template_"; } 2>/dev/null` && # The resulting name must be in the specified directory. case $d in "$destdir_slash_"*) :;; *) false;; esac && # It must have created the directory. test -d "$d" && # It must have 0700 permissions. Handle sticky "S" bits. perms=`ls -dgo "$d" 2>/dev/null` && case $perms in drwx--[-S]---*) :;; *) false;; esac && { echo "$d" return } # If we reach this point, we'll have to create a directory manually. # Get a copy of the template without its suffix of X's. base_template_=`echo "$template_"|sed 's/XX*$//'` # Calculate how many X's we've just removed. template_length_=`echo "$template_" | wc -c` nx_=`echo "$base_template_" | wc -c` nx_=`expr $template_length_ - $nx_` err_= i_=1 while :; do X_=`rand_bytes_ $nx_` candidate_dir_="$destdir_slash_$base_template_$X_" err_=`mkdir -m 0700 "$candidate_dir_" 2>&1` \ && { echo "$candidate_dir_"; return; } test $MAX_TRIES_ -le $i_ && break; i_=`expr $i_ + 1` done fail_ "$err_" } # If you want to override the testdir_prefix_ function, # or to add more utility functions, use this file. test -f "$srcdir/init.cfg" \ && . "$srcdir/init.cfg" setup_ "$@" # This trap is here, rather than in the setup_ function, because some # shells run the exit trap at shell function exit, rather than script exit. trap remove_tmp_ 0 gnuastro-0.5/bootstrapped/tests/sys_uio.in.h0000644000175000017500000000317513217200023016255 00000000000000/* Substitute for . Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_SYS_UIO_H #if @HAVE_SYS_UIO_H@ /* On OpenBSD 4.4, assumes prior inclusion of . */ # include /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_UIO_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_UIO_H #define _@GUARD_PREFIX@_SYS_UIO_H #if !@HAVE_SYS_UIO_H@ /* A platform that lacks . */ /* Get 'size_t' and 'ssize_t'. */ # include # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_struct_iovec /* All known platforms that lack also lack any declaration of struct iovec in any other header. */ struct iovec { void *iov_base; size_t iov_len; }; # define GNULIB_defined_struct_iovec 1 # endif # ifdef __cplusplus } # endif #endif #endif /* _@GUARD_PREFIX@_SYS_UIO_H */ #endif /* _@GUARD_PREFIX@_SYS_UIO_H */ gnuastro-0.5/bootstrapped/tests/sys_time.in.h0000644000175000017500000001721613217200023016420 00000000000000/* Provide a more complete sys/time.h. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Paul Eggert. */ #ifndef _@GUARD_PREFIX@_SYS_TIME_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* On Cygwin and on many BSDish systems, includes itself recursively via . Simply delegate to the system's header in this case; it is a no-op. Without this extra ifdef, the C++ gettimeofday declaration below would be a forward declaration in gnulib's nested . */ #if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ #else /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SYS_TIME_H@ # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_TIME_H #define _@GUARD_PREFIX@_SYS_TIME_H #if ! @HAVE_SYS_TIME_H@ # include #endif /* On native Windows with MSVC, get the 'struct timeval' type. Also, on native Windows with a 64-bit time_t, where we are overriding the 'struct timeval' type, get all declarations of system functions whose signature contains 'struct timeval'. */ #if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include # undef _GL_INCLUDING_WINSOCK2_H #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #ifdef __cplusplus extern "C" { #endif #if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@ # if @REPLACE_STRUCT_TIMEVAL@ # define timeval rpl_timeval # endif # if !GNULIB_defined_struct_timeval struct timeval { time_t tv_sec; long int tv_usec; }; # define GNULIB_defined_struct_timeval 1 # endif #endif #ifdef __cplusplus } #endif #if @GNULIB_GETTIMEOFDAY@ # if @REPLACE_GETTIMEOFDAY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gettimeofday # define gettimeofday rpl_gettimeofday # endif _GL_FUNCDECL_RPL (gettimeofday, int, (struct timeval *restrict, void *restrict) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gettimeofday, int, (struct timeval *restrict, void *restrict)); # else # if !@HAVE_GETTIMEOFDAY@ _GL_FUNCDECL_SYS (gettimeofday, int, (struct timeval *restrict, void *restrict) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on glibc systems, by default, the second argument is struct timezone *. */ _GL_CXXALIAS_SYS_CAST (gettimeofday, int, (struct timeval *restrict, void *restrict)); # endif _GL_CXXALIASWARN (gettimeofday); # if defined __cplusplus && defined GNULIB_NAMESPACE namespace GNULIB_NAMESPACE { typedef ::timeval #undef timeval timeval; } # endif #elif defined GNULIB_POSIXCHECK # undef gettimeofday # if HAVE_RAW_DECL_GETTIMEOFDAY _GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - " "use gnulib module gettimeofday for portability"); # endif #endif /* Hide some function declarations from . */ #if defined _MSC_VER && @HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_UNISTD_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close close_used_without_including_unistd_h # else _GL_WARN_ON_USE (close, "close() used without including "); # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname gethostname_used_without_including_unistd_h # else _GL_WARN_ON_USE (gethostname, "gethostname() used without including "); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including "); _GL_WARN_ON_USE (connect, "connect() used without including "); _GL_WARN_ON_USE (accept, "accept() used without including "); _GL_WARN_ON_USE (bind, "bind() used without including "); _GL_WARN_ON_USE (getpeername, "getpeername() used without including "); _GL_WARN_ON_USE (getsockname, "getsockname() used without including "); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including "); _GL_WARN_ON_USE (listen, "listen() used without including "); _GL_WARN_ON_USE (recv, "recv() used without including "); _GL_WARN_ON_USE (send, "send() used without including "); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including "); _GL_WARN_ON_USE (sendto, "sendto() used without including "); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including "); _GL_WARN_ON_USE (shutdown, "shutdown() used without including "); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including "); # endif # endif #endif #endif /* _@GUARD_PREFIX@_SYS_TIME_H */ #endif /* _CYGWIN_SYS_TIME_H */ #endif /* _@GUARD_PREFIX@_SYS_TIME_H */ gnuastro-0.5/bootstrapped/tests/sys_stat.in.h0000644000175000017500000005370213217200023016435 00000000000000/* Provide a more complete sys/stat.h header file. Copyright (C) 2005-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ /* This file is supposed to be used on platforms where is incomplete. It is intended to provide definitions and prototypes needed by an application. Start with what the system provides. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_sys_stat_h /* Special invocation convention. */ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_STAT_H /* Get nlink_t. May also define off_t to a 64-bit type on native Windows. */ #include /* Get struct timespec. */ #include /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ #ifndef _@GUARD_PREFIX@_SYS_STAT_H #define _@GUARD_PREFIX@_SYS_STAT_H /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Before doing "#define mkdir rpl_mkdir" below, we need to include all headers that may declare mkdir(). Native Windows platforms declare mkdir in and/or , not in . */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include /* mingw32, mingw64 */ # include /* mingw64, MSVC 9 */ #endif /* Native Windows platforms declare umask() in . */ #if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) # include #endif /* Large File Support on native Windows. */ #if @WINDOWS_64_BIT_ST_SIZE@ # define stat _stati64 #endif /* Optionally, override 'struct stat' on native Windows. */ #if @GNULIB_OVERRIDES_STRUCT_STAT@ # undef stat # if @GNULIB_STAT@ # define stat rpl_stat # else /* Provoke a clear link error if stat() is used as a function and module 'stat' is not in use. */ # define stat stat_used_without_requesting_gnulib_module_stat # endif # if !GNULIB_defined_struct_stat struct stat { dev_t st_dev; ino_t st_ino; mode_t st_mode; nlink_t st_nlink; # if 0 uid_t st_uid; # else /* uid_t is not defined by default on native Windows. */ short st_uid; # endif # if 0 gid_t st_gid; # else /* gid_t is not defined by default on native Windows. */ short st_gid; # endif dev_t st_rdev; off_t st_size; # if 0 blksize_t st_blksize; blkcnt_t st_blocks; # endif # if @WINDOWS_STAT_TIMESPEC@ struct timespec st_atim; struct timespec st_mtim; struct timespec st_ctim; # else time_t st_atime; time_t st_mtime; time_t st_ctime; # endif }; # if @WINDOWS_STAT_TIMESPEC@ # define st_atime st_atim.tv_sec # define st_mtime st_mtim.tv_sec # define st_ctime st_ctim.tv_sec /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_TIMESPEC 1 # endif # define GNULIB_defined_struct_stat 1 # endif /* Other possible values of st_mode. */ # if 0 # define _S_IFBLK 0x6000 # endif # if 0 # define _S_IFLNK 0xA000 # endif # if 0 # define _S_IFSOCK 0xC000 # endif #endif #ifndef S_IFIFO # ifdef _S_IFIFO # define S_IFIFO _S_IFIFO # endif #endif #ifndef S_IFMT # define S_IFMT 0170000 #endif #if STAT_MACROS_BROKEN # undef S_ISBLK # undef S_ISCHR # undef S_ISDIR # undef S_ISFIFO # undef S_ISLNK # undef S_ISNAM # undef S_ISMPB # undef S_ISMPC # undef S_ISNWK # undef S_ISREG # undef S_ISSOCK #endif #ifndef S_ISBLK # ifdef S_IFBLK # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) # else # define S_ISBLK(m) 0 # endif #endif #ifndef S_ISCHR # ifdef S_IFCHR # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) # else # define S_ISCHR(m) 0 # endif #endif #ifndef S_ISDIR # ifdef S_IFDIR # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) # else # define S_ISDIR(m) 0 # endif #endif #ifndef S_ISDOOR /* Solaris 2.5 and up */ # define S_ISDOOR(m) 0 #endif #ifndef S_ISFIFO # ifdef S_IFIFO # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) # else # define S_ISFIFO(m) 0 # endif #endif #ifndef S_ISLNK # ifdef S_IFLNK # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) # else # define S_ISLNK(m) 0 # endif #endif #ifndef S_ISMPB /* V7 */ # ifdef S_IFMPB # define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) # define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) # else # define S_ISMPB(m) 0 # define S_ISMPC(m) 0 # endif #endif #ifndef S_ISMPX /* AIX */ # define S_ISMPX(m) 0 #endif #ifndef S_ISNAM /* Xenix */ # ifdef S_IFNAM # define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) # else # define S_ISNAM(m) 0 # endif #endif #ifndef S_ISNWK /* HP/UX */ # ifdef S_IFNWK # define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) # else # define S_ISNWK(m) 0 # endif #endif #ifndef S_ISPORT /* Solaris 10 and up */ # define S_ISPORT(m) 0 #endif #ifndef S_ISREG # ifdef S_IFREG # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) # else # define S_ISREG(m) 0 # endif #endif #ifndef S_ISSOCK # ifdef S_IFSOCK # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) # else # define S_ISSOCK(m) 0 # endif #endif #ifndef S_TYPEISMQ # define S_TYPEISMQ(p) 0 #endif #ifndef S_TYPEISTMO # define S_TYPEISTMO(p) 0 #endif #ifndef S_TYPEISSEM # ifdef S_INSEM # define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) # else # define S_TYPEISSEM(p) 0 # endif #endif #ifndef S_TYPEISSHM # ifdef S_INSHD # define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) # else # define S_TYPEISSHM(p) 0 # endif #endif /* high performance ("contiguous data") */ #ifndef S_ISCTG # define S_ISCTG(p) 0 #endif /* Cray DMF (data migration facility): off line, with data */ #ifndef S_ISOFD # define S_ISOFD(p) 0 #endif /* Cray DMF (data migration facility): off line, with no data */ #ifndef S_ISOFL # define S_ISOFL(p) 0 #endif /* 4.4BSD whiteout */ #ifndef S_ISWHT # define S_ISWHT(m) 0 #endif /* If any of the following are undefined, define them to their de facto standard values. */ #if !S_ISUID # define S_ISUID 04000 #endif #if !S_ISGID # define S_ISGID 02000 #endif /* S_ISVTX is a common extension to POSIX. */ #ifndef S_ISVTX # define S_ISVTX 01000 #endif #if !S_IRUSR && S_IREAD # define S_IRUSR S_IREAD #endif #if !S_IRUSR # define S_IRUSR 00400 #endif #if !S_IRGRP # define S_IRGRP (S_IRUSR >> 3) #endif #if !S_IROTH # define S_IROTH (S_IRUSR >> 6) #endif #if !S_IWUSR && S_IWRITE # define S_IWUSR S_IWRITE #endif #if !S_IWUSR # define S_IWUSR 00200 #endif #if !S_IWGRP # define S_IWGRP (S_IWUSR >> 3) #endif #if !S_IWOTH # define S_IWOTH (S_IWUSR >> 6) #endif #if !S_IXUSR && S_IEXEC # define S_IXUSR S_IEXEC #endif #if !S_IXUSR # define S_IXUSR 00100 #endif #if !S_IXGRP # define S_IXGRP (S_IXUSR >> 3) #endif #if !S_IXOTH # define S_IXOTH (S_IXUSR >> 6) #endif #if !S_IRWXU # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) #endif #if !S_IRWXG # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) #endif #if !S_IRWXO # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) #endif /* S_IXUGO is a common extension to POSIX. */ #if !S_IXUGO # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) #endif #ifndef S_IRWXUGO # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) #endif /* Macros for futimens and utimensat. */ #ifndef UTIME_NOW # define UTIME_NOW (-1) # define UTIME_OMIT (-2) #endif #if @GNULIB_FCHMODAT@ # if !@HAVE_FCHMODAT@ _GL_FUNCDECL_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag)); _GL_CXXALIASWARN (fchmodat); #elif defined GNULIB_POSIXCHECK # undef fchmodat # if HAVE_RAW_DECL_FCHMODAT _GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FSTAT@ # if @REPLACE_FSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fstat # define fstat rpl_fstat # endif _GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); # else _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); # endif _GL_CXXALIASWARN (fstat); #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef fstat # define fstat fstat_used_without_requesting_gnulib_module_fstat #elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # define fstat _fstati64 #elif defined GNULIB_POSIXCHECK # undef fstat # if HAVE_RAW_DECL_FSTAT _GL_WARN_ON_USE (fstat, "fstat has portability problems - " "use gnulib module fstat for portability"); # endif #endif #if @GNULIB_FSTATAT@ # if @REPLACE_FSTATAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fstatat # define fstatat rpl_fstatat # endif _GL_FUNCDECL_RPL (fstatat, int, (int fd, char const *name, struct stat *st, int flags) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (fstatat, int, (int fd, char const *name, struct stat *st, int flags)); # else # if !@HAVE_FSTATAT@ _GL_FUNCDECL_SYS (fstatat, int, (int fd, char const *name, struct stat *st, int flags) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (fstatat, int, (int fd, char const *name, struct stat *st, int flags)); # endif _GL_CXXALIASWARN (fstatat); #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef fstatat # define fstatat fstatat_used_without_requesting_gnulib_module_fstatat #elif defined GNULIB_POSIXCHECK # undef fstatat # if HAVE_RAW_DECL_FSTATAT _GL_WARN_ON_USE (fstatat, "fstatat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FUTIMENS@ /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens implementation relies on futimesat, which on Solaris 10 makes an invocation to futimens that is meant to invoke the libc's futimens(), not gnulib's futimens(). */ # if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef futimens # define futimens rpl_futimens # endif _GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); _GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); # else # if !@HAVE_FUTIMENS@ _GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); # endif _GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); # endif # if @HAVE_FUTIMENS@ _GL_CXXALIASWARN (futimens); # endif #elif defined GNULIB_POSIXCHECK # undef futimens # if HAVE_RAW_DECL_FUTIMENS _GL_WARN_ON_USE (futimens, "futimens is not portable - " "use gnulib module futimens for portability"); # endif #endif #if @GNULIB_LCHMOD@ /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME denotes a symbolic link. */ # if !@HAVE_LCHMOD@ /* The lchmod replacement follows symbolic links. Callers should take this into account; lchmod should be applied only to arguments that are known to not be symbolic links. On hosts that lack lchmod, this can lead to race conditions between the check and the invocation of lchmod, but we know of no workarounds that are reliable in general. You might try requesting support for lchmod from your operating system supplier. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lchmod chmod # endif /* Need to cast, because on mingw, the second parameter of chmod is int mode. */ _GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int, (const char *filename, mode_t mode)); # else # if 0 /* assume already declared */ _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); # endif # if @HAVE_LCHMOD@ _GL_CXXALIASWARN (lchmod); # endif #elif defined GNULIB_POSIXCHECK # undef lchmod # if HAVE_RAW_DECL_LCHMOD _GL_WARN_ON_USE (lchmod, "lchmod is unportable - " "use gnulib module lchmod for portability"); # endif #endif #if @GNULIB_LSTAT@ # if ! @HAVE_LSTAT@ /* mingw does not support symlinks, therefore it does not have lstat. But without links, stat does just fine. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lstat stat # endif _GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf)); # elif @REPLACE_LSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lstat # define lstat rpl_lstat # endif _GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf)); # else _GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf)); # endif # if @HAVE_LSTAT@ _GL_CXXALIASWARN (lstat); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef lstat # define lstat lstat_used_without_requesting_gnulib_module_lstat #elif defined GNULIB_POSIXCHECK # undef lstat # if HAVE_RAW_DECL_LSTAT _GL_WARN_ON_USE (lstat, "lstat is unportable - " "use gnulib module lstat for portability"); # endif #endif #if @REPLACE_MKDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); #else /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. Additionally, it declares _mkdir (and depending on compile flags, an alias mkdir), only in the nonstandard includes and , which are included above. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # if !GNULIB_defined_rpl_mkdir static int rpl_mkdir (char const *name, mode_t mode) { return _mkdir (name); } # define GNULIB_defined_rpl_mkdir 1 # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mkdir rpl_mkdir # endif _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # else _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); # endif #endif _GL_CXXALIASWARN (mkdir); #if @GNULIB_MKDIRAT@ # if !@HAVE_MKDIRAT@ _GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); _GL_CXXALIASWARN (mkdirat); #elif defined GNULIB_POSIXCHECK # undef mkdirat # if HAVE_RAW_DECL_MKDIRAT _GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_MKFIFO@ # if @REPLACE_MKFIFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkfifo # define mkfifo rpl_mkfifo # endif _GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); # else # if !@HAVE_MKFIFO@ _GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); # endif _GL_CXXALIASWARN (mkfifo); #elif defined GNULIB_POSIXCHECK # undef mkfifo # if HAVE_RAW_DECL_MKFIFO _GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " "use gnulib module mkfifo for portability"); # endif #endif #if @GNULIB_MKFIFOAT@ # if !@HAVE_MKFIFOAT@ _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); _GL_CXXALIASWARN (mkfifoat); #elif defined GNULIB_POSIXCHECK # undef mkfifoat # if HAVE_RAW_DECL_MKFIFOAT _GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " "use gnulib module mkfifoat for portability"); # endif #endif #if @GNULIB_MKNOD@ # if @REPLACE_MKNOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mknod # define mknod rpl_mknod # endif _GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); # else # if !@HAVE_MKNOD@ _GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ _GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); # endif _GL_CXXALIASWARN (mknod); #elif defined GNULIB_POSIXCHECK # undef mknod # if HAVE_RAW_DECL_MKNOD _GL_WARN_ON_USE (mknod, "mknod is not portable - " "use gnulib module mknod for portability"); # endif #endif #if @GNULIB_MKNODAT@ # if !@HAVE_MKNODAT@ _GL_FUNCDECL_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev)); _GL_CXXALIASWARN (mknodat); #elif defined GNULIB_POSIXCHECK # undef mknodat # if HAVE_RAW_DECL_MKNODAT _GL_WARN_ON_USE (mknodat, "mknodat is not portable - " "use gnulib module mkfifoat for portability"); # endif #endif #if @GNULIB_STAT@ # if @REPLACE_STAT@ # if !@GNULIB_OVERRIDES_STRUCT_STAT@ /* We can't use the object-like #define stat rpl_stat, because of struct stat. This means that rpl_stat will not be used if the user does (stat)(a,b). Oh well. */ # if defined _AIX && defined stat && defined _LARGE_FILES /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, so we have to replace stat64() instead of stat(). */ # undef stat64 # define stat64(name, st) rpl_stat (name, st) # elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # if defined __MINGW32__ && defined _stati64 # ifndef _USE_32BIT_TIME_T /* The system headers define _stati64 to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # elif defined _MSC_VER && defined _stati64 # ifdef _USE_32BIT_TIME_T /* The system headers define _stati64 to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else /* The system headers define _stati64 to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # else # undef _stati64 # define _stati64(name, st) rpl_stat (name, st) # endif # elif defined __MINGW32__ && defined stat # ifdef _USE_32BIT_TIME_T /* The system headers define stat to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else /* The system headers define stat to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # elif defined _MSC_VER && defined stat # ifdef _USE_32BIT_TIME_T /* The system headers define stat to _stat32. */ # undef _stat32 # define _stat32(name, st) rpl_stat (name, st) # else /* The system headers define stat to _stat64i32. */ # undef _stat64i32 # define _stat64i32(name, st) rpl_stat (name, st) # endif # else /* !(_AIX || __MINGW32__ || _MSC_VER) */ # undef stat # define stat(name, st) rpl_stat (name, st) # endif /* !_LARGE_FILES */ # endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */ _GL_EXTERN_C int stat (const char *name, struct stat *buf) _GL_ARG_NONNULL ((1, 2)); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ /* see above: #define stat stat_used_without_requesting_gnulib_module_stat */ #elif defined GNULIB_POSIXCHECK # undef stat # if HAVE_RAW_DECL_STAT _GL_WARN_ON_USE (stat, "stat is unportable - " "use gnulib module stat for portability"); # endif #endif #if @GNULIB_UTIMENSAT@ /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat implementation relies on futimesat, which on Solaris 10 makes an invocation to utimensat that is meant to invoke the libc's utimensat(), not gnulib's utimensat(). */ # if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef utimensat # define utimensat rpl_utimensat # endif _GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # else # if !@HAVE_UTIMENSAT@ _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # endif # if @HAVE_UTIMENSAT@ _GL_CXXALIASWARN (utimensat); # endif #elif defined GNULIB_POSIXCHECK # undef utimensat # if HAVE_RAW_DECL_UTIMENSAT _GL_WARN_ON_USE (utimensat, "utimensat is not portable - " "use gnulib module utimensat for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ #endif gnuastro-0.5/bootstrapped/tests/sys_socket.in.h0000644000175000017500000005533013217200023016751 00000000000000/* Provide a sys/socket header file for systems lacking it (read: MinGW) and for systems where it is incomplete. Copyright (C) 2005-2017 Free Software Foundation, Inc. Written by Simon Josefsson. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* This file is supposed to be used on platforms that lack , on platforms where cannot be included standalone, and on platforms where does not provide all necessary definitions. It is intended to provide definitions and prototypes needed by an application. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_SYS_SOCKET_H /* Special invocation convention: - On Cygwin 1.5.x we have a sequence of nested includes -> -> -> , and the latter includes . In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H #if @HAVE_SYS_SOCKET_H@ # define _GL_ALREADY_INCLUDING_SYS_SOCKET_H /* On many platforms, assumes prior inclusion of . */ # include /* On FreeBSD 6.4, defines some macros that assume that NULL is defined. */ # include /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ # undef _GL_ALREADY_INCLUDING_SYS_SOCKET_H #endif #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H #define _@GUARD_PREFIX@_SYS_SOCKET_H #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_SYS_SOCKET_INLINE # define _GL_SYS_SOCKET_INLINE _GL_INLINE #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if !@HAVE_SA_FAMILY_T@ # if !GNULIB_defined_sa_family_t /* On OS/2 kLIBC, sa_family_t is unsigned char unless TCPV40HDRS is defined. */ # if !defined __KLIBC__ || defined TCPV40HDRS typedef unsigned short sa_family_t; # else typedef unsigned char sa_family_t; # endif # define GNULIB_defined_sa_family_t 1 # endif #endif #if @HAVE_STRUCT_SOCKADDR_STORAGE@ /* Make the 'struct sockaddr_storage' field 'ss_family' visible on AIX 7.1. */ # if !@HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ # ifndef ss_family # define ss_family __ss_family # endif # endif #else # include /* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on 2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */ # define __ss_aligntype unsigned long int # define _SS_SIZE 256 # define _SS_PADSIZE \ (_SS_SIZE - ((sizeof (sa_family_t) >= alignof (__ss_aligntype) \ ? sizeof (sa_family_t) \ : alignof (__ss_aligntype)) \ + sizeof (__ss_aligntype))) # if !GNULIB_defined_struct_sockaddr_storage struct sockaddr_storage { sa_family_t ss_family; /* Address family, etc. */ __ss_aligntype __ss_align; /* Force desired alignment. */ char __ss_padding[_SS_PADSIZE]; }; # define GNULIB_defined_struct_sockaddr_storage 1 # endif #endif /* Get struct iovec. */ /* But avoid namespace pollution on glibc systems. */ #if ! defined __GLIBC__ # include #endif #if @HAVE_SYS_SOCKET_H@ /* A platform that has . */ /* For shutdown(). */ # if !defined SHUT_RD # define SHUT_RD 0 # endif # if !defined SHUT_WR # define SHUT_WR 1 # endif # if !defined SHUT_RDWR # define SHUT_RDWR 2 # endif # ifdef __VMS /* OpenVMS */ # ifndef CMSG_SPACE # define CMSG_SPACE(length) _CMSG_SPACE(length) # endif # ifndef CMSG_LEN # define CMSG_LEN(length) _CMSG_LEN(length) # endif # endif #else # ifdef __CYGWIN__ # error "Cygwin does have a sys/socket.h, doesn't it?!?" # endif /* A platform that lacks . Currently only MinGW is supported. See the gnulib manual regarding Windows sockets. MinGW has the header files winsock2.h and ws2tcpip.h that declare the sys/socket.h definitions we need. Note that you can influence which definitions you get by setting the WINVER symbol before including these two files. For example, getaddrinfo is only available if _WIN32_WINNT >= 0x0501 (that symbol is set indirectly through WINVER). You can set this by adding AC_DEFINE(WINVER, 0x0501) to configure.ac. Note that your code may not run on older Windows releases then. My Windows 2000 box was not able to run the code, for example. The situation is slightly confusing because suggests that getaddrinfo should be available on all Windows releases. */ # if @HAVE_WINSOCK2_H@ # include # endif # if @HAVE_WS2TCPIP_H@ # include # endif /* For shutdown(). */ # if !defined SHUT_RD && defined SD_RECEIVE # define SHUT_RD SD_RECEIVE # endif # if !defined SHUT_WR && defined SD_SEND # define SHUT_WR SD_SEND # endif # if !defined SHUT_RDWR && defined SD_BOTH # define SHUT_RDWR SD_BOTH # endif # if @HAVE_WINSOCK2_H@ /* Include headers needed by the emulation code. */ # include # include # if !GNULIB_defined_socklen_t typedef int socklen_t; # define GNULIB_defined_socklen_t 1 # endif # endif /* Rudimentary 'struct msghdr'; this works as long as you don't try to access msg_control or msg_controllen. */ struct msghdr { void *msg_name; socklen_t msg_namelen; struct iovec *msg_iov; int msg_iovlen; int msg_flags; }; #endif /* Fix some definitions from . */ #if @HAVE_WINSOCK2_H@ # if !GNULIB_defined_rpl_fd_isset /* Re-define FD_ISSET to avoid a WSA call while we are not using network sockets. */ _GL_SYS_SOCKET_INLINE int rpl_fd_isset (SOCKET fd, fd_set * set) { u_int i; if (set == NULL) return 0; for (i = 0; i < set->fd_count; i++) if (set->fd_array[i] == fd) return 1; return 0; } # define GNULIB_defined_rpl_fd_isset 1 # endif # undef FD_ISSET # define FD_ISSET(fd, set) rpl_fd_isset(fd, set) #endif /* Hide some function declarations from . */ #if @HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_UNISTD_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close close_used_without_including_unistd_h # else _GL_WARN_ON_USE (close, "close() used without including "); # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname gethostname_used_without_including_unistd_h # else _GL_WARN_ON_USE (gethostname, "gethostname() used without including "); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including "); # endif # endif #endif /* Wrap everything else to use libc file descriptors for sockets. */ #if @GNULIB_SOCKET@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket rpl_socket # endif _GL_FUNCDECL_RPL (socket, int, (int domain, int type, int protocol)); _GL_CXXALIAS_RPL (socket, int, (int domain, int type, int protocol)); # else _GL_CXXALIAS_SYS (socket, int, (int domain, int type, int protocol)); # endif _GL_CXXALIASWARN (socket); #elif @HAVE_WINSOCK2_H@ # undef socket # define socket socket_used_without_requesting_gnulib_module_socket #elif defined GNULIB_POSIXCHECK # undef socket # if HAVE_RAW_DECL_SOCKET _GL_WARN_ON_USE (socket, "socket is not always POSIX compliant - " "use gnulib module socket for portability"); # endif #endif #if @GNULIB_CONNECT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef connect # define connect rpl_connect # endif _GL_FUNCDECL_RPL (connect, int, (int fd, const struct sockaddr *addr, socklen_t addrlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (connect, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # else /* Need to cast, because on NonStop Kernel, the third parameter is size_t addrlen. */ _GL_CXXALIAS_SYS_CAST (connect, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # endif _GL_CXXALIASWARN (connect); #elif @HAVE_WINSOCK2_H@ # undef connect # define connect socket_used_without_requesting_gnulib_module_connect #elif defined GNULIB_POSIXCHECK # undef connect # if HAVE_RAW_DECL_CONNECT _GL_WARN_ON_USE (connect, "connect is not always POSIX compliant - " "use gnulib module connect for portability"); # endif #endif #if @GNULIB_ACCEPT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef accept # define accept rpl_accept # endif _GL_FUNCDECL_RPL (accept, int, (int fd, struct sockaddr *addr, socklen_t *addrlen)); _GL_CXXALIAS_RPL (accept, int, (int fd, struct sockaddr *addr, socklen_t *addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is void *addrlen. */ _GL_CXXALIAS_SYS_CAST (accept, int, (int fd, struct sockaddr *addr, socklen_t *addrlen)); # endif _GL_CXXALIASWARN (accept); #elif @HAVE_WINSOCK2_H@ # undef accept # define accept accept_used_without_requesting_gnulib_module_accept #elif defined GNULIB_POSIXCHECK # undef accept # if HAVE_RAW_DECL_ACCEPT _GL_WARN_ON_USE (accept, "accept is not always POSIX compliant - " "use gnulib module accept for portability"); # endif #endif #if @GNULIB_BIND@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef bind # define bind rpl_bind # endif _GL_FUNCDECL_RPL (bind, int, (int fd, const struct sockaddr *addr, socklen_t addrlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (bind, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # else /* Need to cast, because on NonStop Kernel, the third parameter is size_t addrlen. */ _GL_CXXALIAS_SYS_CAST (bind, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # endif _GL_CXXALIASWARN (bind); #elif @HAVE_WINSOCK2_H@ # undef bind # define bind bind_used_without_requesting_gnulib_module_bind #elif defined GNULIB_POSIXCHECK # undef bind # if HAVE_RAW_DECL_BIND _GL_WARN_ON_USE (bind, "bind is not always POSIX compliant - " "use gnulib module bind for portability"); # endif #endif #if @GNULIB_GETPEERNAME@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpeername # define getpeername rpl_getpeername # endif _GL_FUNCDECL_RPL (getpeername, int, (int fd, struct sockaddr *addr, socklen_t *addrlen) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (getpeername, int, (int fd, struct sockaddr *addr, socklen_t *addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is void *addrlen. */ _GL_CXXALIAS_SYS_CAST (getpeername, int, (int fd, struct sockaddr *addr, socklen_t *addrlen)); # endif _GL_CXXALIASWARN (getpeername); #elif @HAVE_WINSOCK2_H@ # undef getpeername # define getpeername getpeername_used_without_requesting_gnulib_module_getpeername #elif defined GNULIB_POSIXCHECK # undef getpeername # if HAVE_RAW_DECL_GETPEERNAME _GL_WARN_ON_USE (getpeername, "getpeername is not always POSIX compliant - " "use gnulib module getpeername for portability"); # endif #endif #if @GNULIB_GETSOCKNAME@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getsockname # define getsockname rpl_getsockname # endif _GL_FUNCDECL_RPL (getsockname, int, (int fd, struct sockaddr *addr, socklen_t *addrlen) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (getsockname, int, (int fd, struct sockaddr *addr, socklen_t *addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is void *addrlen. */ _GL_CXXALIAS_SYS_CAST (getsockname, int, (int fd, struct sockaddr *addr, socklen_t *addrlen)); # endif _GL_CXXALIASWARN (getsockname); #elif @HAVE_WINSOCK2_H@ # undef getsockname # define getsockname getsockname_used_without_requesting_gnulib_module_getsockname #elif defined GNULIB_POSIXCHECK # undef getsockname # if HAVE_RAW_DECL_GETSOCKNAME _GL_WARN_ON_USE (getsockname, "getsockname is not always POSIX compliant - " "use gnulib module getsockname for portability"); # endif #endif #if @GNULIB_GETSOCKOPT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getsockopt # define getsockopt rpl_getsockopt # endif _GL_FUNCDECL_RPL (getsockopt, int, (int fd, int level, int optname, void *optval, socklen_t *optlen) _GL_ARG_NONNULL ((4, 5))); _GL_CXXALIAS_RPL (getsockopt, int, (int fd, int level, int optname, void *optval, socklen_t *optlen)); # else /* Need to cast, because on Solaris 10 systems, the fifth parameter is void *optlen. */ _GL_CXXALIAS_SYS_CAST (getsockopt, int, (int fd, int level, int optname, void *optval, socklen_t *optlen)); # endif _GL_CXXALIASWARN (getsockopt); #elif @HAVE_WINSOCK2_H@ # undef getsockopt # define getsockopt getsockopt_used_without_requesting_gnulib_module_getsockopt #elif defined GNULIB_POSIXCHECK # undef getsockopt # if HAVE_RAW_DECL_GETSOCKOPT _GL_WARN_ON_USE (getsockopt, "getsockopt is not always POSIX compliant - " "use gnulib module getsockopt for portability"); # endif #endif #if @GNULIB_LISTEN@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef listen # define listen rpl_listen # endif _GL_FUNCDECL_RPL (listen, int, (int fd, int backlog)); _GL_CXXALIAS_RPL (listen, int, (int fd, int backlog)); # else _GL_CXXALIAS_SYS (listen, int, (int fd, int backlog)); # endif _GL_CXXALIASWARN (listen); #elif @HAVE_WINSOCK2_H@ # undef listen # define listen listen_used_without_requesting_gnulib_module_listen #elif defined GNULIB_POSIXCHECK # undef listen # if HAVE_RAW_DECL_LISTEN _GL_WARN_ON_USE (listen, "listen is not always POSIX compliant - " "use gnulib module listen for portability"); # endif #endif #if @GNULIB_RECV@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef recv # define recv rpl_recv # endif _GL_FUNCDECL_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); # else _GL_CXXALIAS_SYS (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); # endif _GL_CXXALIASWARN (recv); #elif @HAVE_WINSOCK2_H@ # undef recv # define recv recv_used_without_requesting_gnulib_module_recv #elif defined GNULIB_POSIXCHECK # undef recv # if HAVE_RAW_DECL_RECV _GL_WARN_ON_USE (recv, "recv is not always POSIX compliant - " "use gnulib module recv for portability"); # endif #endif #if @GNULIB_SEND@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef send # define send rpl_send # endif _GL_FUNCDECL_RPL (send, ssize_t, (int fd, const void *buf, size_t len, int flags) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (send, ssize_t, (int fd, const void *buf, size_t len, int flags)); # else _GL_CXXALIAS_SYS (send, ssize_t, (int fd, const void *buf, size_t len, int flags)); # endif _GL_CXXALIASWARN (send); #elif @HAVE_WINSOCK2_H@ # undef send # define send send_used_without_requesting_gnulib_module_send #elif defined GNULIB_POSIXCHECK # undef send # if HAVE_RAW_DECL_SEND _GL_WARN_ON_USE (send, "send is not always POSIX compliant - " "use gnulib module send for portability"); # endif #endif #if @GNULIB_RECVFROM@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef recvfrom # define recvfrom rpl_recvfrom # endif _GL_FUNCDECL_RPL (recvfrom, ssize_t, (int fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (recvfrom, ssize_t, (int fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen)); # else /* Need to cast, because on Solaris 10 systems, the sixth parameter is void *fromlen. */ _GL_CXXALIAS_SYS_CAST (recvfrom, ssize_t, (int fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen)); # endif _GL_CXXALIASWARN (recvfrom); #elif @HAVE_WINSOCK2_H@ # undef recvfrom # define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom #elif defined GNULIB_POSIXCHECK # undef recvfrom # if HAVE_RAW_DECL_RECVFROM _GL_WARN_ON_USE (recvfrom, "recvfrom is not always POSIX compliant - " "use gnulib module recvfrom for portability"); # endif #endif #if @GNULIB_SENDTO@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sendto # define sendto rpl_sendto # endif _GL_FUNCDECL_RPL (sendto, ssize_t, (int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (sendto, ssize_t, (int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)); # else /* Need to cast, because on NonStop Kernel, the sixth parameter is size_t tolen. */ _GL_CXXALIAS_SYS_CAST (sendto, ssize_t, (int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)); # endif _GL_CXXALIASWARN (sendto); #elif @HAVE_WINSOCK2_H@ # undef sendto # define sendto sendto_used_without_requesting_gnulib_module_sendto #elif defined GNULIB_POSIXCHECK # undef sendto # if HAVE_RAW_DECL_SENDTO _GL_WARN_ON_USE (sendto, "sendto is not always POSIX compliant - " "use gnulib module sendto for portability"); # endif #endif #if @GNULIB_SETSOCKOPT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setsockopt # define setsockopt rpl_setsockopt # endif _GL_FUNCDECL_RPL (setsockopt, int, (int fd, int level, int optname, const void * optval, socklen_t optlen) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (setsockopt, int, (int fd, int level, int optname, const void * optval, socklen_t optlen)); # else /* Need to cast, because on NonStop Kernel, the fifth parameter is size_t optlen. */ _GL_CXXALIAS_SYS_CAST (setsockopt, int, (int fd, int level, int optname, const void * optval, socklen_t optlen)); # endif _GL_CXXALIASWARN (setsockopt); #elif @HAVE_WINSOCK2_H@ # undef setsockopt # define setsockopt setsockopt_used_without_requesting_gnulib_module_setsockopt #elif defined GNULIB_POSIXCHECK # undef setsockopt # if HAVE_RAW_DECL_SETSOCKOPT _GL_WARN_ON_USE (setsockopt, "setsockopt is not always POSIX compliant - " "use gnulib module setsockopt for portability"); # endif #endif #if @GNULIB_SHUTDOWN@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef shutdown # define shutdown rpl_shutdown # endif _GL_FUNCDECL_RPL (shutdown, int, (int fd, int how)); _GL_CXXALIAS_RPL (shutdown, int, (int fd, int how)); # else _GL_CXXALIAS_SYS (shutdown, int, (int fd, int how)); # endif _GL_CXXALIASWARN (shutdown); #elif @HAVE_WINSOCK2_H@ # undef shutdown # define shutdown shutdown_used_without_requesting_gnulib_module_shutdown #elif defined GNULIB_POSIXCHECK # undef shutdown # if HAVE_RAW_DECL_SHUTDOWN _GL_WARN_ON_USE (shutdown, "shutdown is not always POSIX compliant - " "use gnulib module shutdown for portability"); # endif #endif #if @GNULIB_ACCEPT4@ /* Accept a connection on a socket, with specific opening flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). See also the Linux man page at . */ # if @HAVE_ACCEPT4@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define accept4 rpl_accept4 # endif _GL_FUNCDECL_RPL (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); _GL_CXXALIAS_RPL (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); # else _GL_FUNCDECL_SYS (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); _GL_CXXALIAS_SYS (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); # endif _GL_CXXALIASWARN (accept4); #elif defined GNULIB_POSIXCHECK # undef accept4 # if HAVE_RAW_DECL_ACCEPT4 _GL_WARN_ON_USE (accept4, "accept4 is unportable - " "use gnulib module accept4 for portability"); # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ #endif gnuastro-0.5/bootstrapped/tests/sys_select.in.h0000644000175000017500000002756713217200023016753 00000000000000/* Substitute for . Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ /* On OSF/1 and Solaris 2.6, and both include . On Cygwin, includes . Simply delegate to the system's header in this case. */ #if (@HAVE_SYS_SELECT_H@ \ && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H \ && ((defined __osf__ && defined _SYS_TYPES_H_ \ && defined _OSF_SOURCE) \ || (defined __sun && defined _SYS_TYPES_H \ && (! (defined _XOPEN_SOURCE || defined _POSIX_C_SOURCE) \ || defined __EXTENSIONS__)))) # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ #elif (@HAVE_SYS_SELECT_H@ \ && (defined _CYGWIN_SYS_TIME_H \ || (!defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H \ && ((defined __osf__ && defined _SYS_TIME_H_ \ && defined _OSF_SOURCE) \ || (defined __sun && defined _SYS_TIME_H \ && (! (defined _XOPEN_SOURCE \ || defined _POSIX_C_SOURCE) \ || defined __EXTENSIONS__)))))) # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ /* On IRIX 6.5, includes , which includes , which includes . At this point we cannot include , because that includes , which gives a syntax error because has not been completely processed. Simply delegate to the system's header in this case. */ #elif @HAVE_SYS_SELECT_H@ && defined __sgi && (defined _SYS_BSD_TYPES_H && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H) # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ /* On OpenBSD 5.0, includes , which includes . At this point we cannot include , because that includes gnulib's pthread.h override, which gives a syntax error because /usr/include/pthread.h has not been completely processed. Simply delegate to the system's header in this case. */ #elif @HAVE_SYS_SELECT_H@ && defined __OpenBSD__ && (defined _PTHREAD_H_ && !defined PTHREAD_MUTEX_INITIALIZER) # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ #else #ifndef _@GUARD_PREFIX@_SYS_SELECT_H /* On many platforms, assumes prior inclusion of . Also, mingw defines sigset_t there, instead of in where it belongs. */ #include #if @HAVE_SYS_SELECT_H@ /* On OSF/1 4.0, provides only a forward declaration of 'struct timeval', and no definition of this type. Also, Mac OS X, AIX, HP-UX, IRIX, Solaris, Interix declare select() in . But avoid namespace pollution on glibc systems and "unknown type name" problems on Cygwin. */ # if !(defined __GLIBC__ || defined __CYGWIN__) # include # endif /* On AIX 7 and Solaris 10, provides an FD_ZERO implementation that relies on memset(), but without including . But in any case avoid namespace pollution on glibc systems. */ # if (defined __OpenBSD__ || defined _AIX || defined __sun || defined __osf__ || defined __BEOS__) \ && ! defined __GLIBC__ # include # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ #endif /* Get definition of 'sigset_t'. But avoid namespace pollution on glibc systems and "unknown type name" problems on Cygwin. Do this after the include_next (for the sake of OpenBSD 5.0) but before the split double-inclusion guard (for the sake of Solaris). */ #if !((defined __GLIBC__ || defined __CYGWIN__) && !defined __UCLIBC__) # include #endif #ifndef _@GUARD_PREFIX@_SYS_SELECT_H #define _@GUARD_PREFIX@_SYS_SELECT_H #if !@HAVE_SYS_SELECT_H@ /* A platform that lacks . */ /* Get the 'struct timeval' and 'fd_set' types and the FD_* macros on most platforms. */ # include /* On HP-UX 11, provides an FD_ZERO implementation that relies on memset(), but without including . */ # if defined __hpux # include # endif /* On native Windows platforms: Get the 'fd_set' type. Get the close() declaration before we override it. */ # if @HAVE_WINSOCK2_H@ # if !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include # undef _GL_INCLUDING_WINSOCK2_H # endif # include # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Fix some definitions from . */ #if @HAVE_WINSOCK2_H@ # if !GNULIB_defined_rpl_fd_isset /* Re-define FD_ISSET to avoid a WSA call while we are not using network sockets. */ static int rpl_fd_isset (SOCKET fd, fd_set * set) { u_int i; if (set == NULL) return 0; for (i = 0; i < set->fd_count; i++) if (set->fd_array[i] == fd) return 1; return 0; } # define GNULIB_defined_rpl_fd_isset 1 # endif # undef FD_ISSET # define FD_ISSET(fd, set) rpl_fd_isset(fd, set) #endif /* Hide some function declarations from . */ #if @HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_UNISTD_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close close_used_without_including_unistd_h # else _GL_WARN_ON_USE (close, "close() used without including "); # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname gethostname_used_without_including_unistd_h # else _GL_WARN_ON_USE (gethostname, "gethostname() used without including "); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including "); _GL_WARN_ON_USE (connect, "connect() used without including "); _GL_WARN_ON_USE (accept, "accept() used without including "); _GL_WARN_ON_USE (bind, "bind() used without including "); _GL_WARN_ON_USE (getpeername, "getpeername() used without including "); _GL_WARN_ON_USE (getsockname, "getsockname() used without including "); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including "); _GL_WARN_ON_USE (listen, "listen() used without including "); _GL_WARN_ON_USE (recv, "recv() used without including "); _GL_WARN_ON_USE (send, "send() used without including "); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including "); _GL_WARN_ON_USE (sendto, "sendto() used without including "); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including "); _GL_WARN_ON_USE (shutdown, "shutdown() used without including "); # endif # endif #endif #if @GNULIB_PSELECT@ # if @REPLACE_PSELECT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pselect # define pselect rpl_pselect # endif _GL_FUNCDECL_RPL (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); _GL_CXXALIAS_RPL (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); # else # if !@HAVE_PSELECT@ _GL_FUNCDECL_SYS (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); # endif _GL_CXXALIAS_SYS (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); # endif _GL_CXXALIASWARN (pselect); #elif defined GNULIB_POSIXCHECK # undef pselect # if HAVE_RAW_DECL_PSELECT _GL_WARN_ON_USE (pselect, "pselect is not portable - " "use gnulib module pselect for portability"); # endif #endif #if @GNULIB_SELECT@ # if @REPLACE_SELECT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select rpl_select # endif _GL_FUNCDECL_RPL (select, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timeval *restrict)); _GL_CXXALIAS_RPL (select, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timeval *restrict)); # else _GL_CXXALIAS_SYS (select, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timeval *restrict)); # endif _GL_CXXALIASWARN (select); #elif @HAVE_WINSOCK2_H@ # undef select # define select select_used_without_requesting_gnulib_module_select #elif defined GNULIB_POSIXCHECK # undef select # if HAVE_RAW_DECL_SELECT _GL_WARN_ON_USE (select, "select is not always POSIX compliant - " "use gnulib module select for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_SELECT_H */ #endif /* _@GUARD_PREFIX@_SYS_SELECT_H */ #endif /* OSF/1 */ gnuastro-0.5/bootstrapped/tests/sys_ioctl.in.h0000644000175000017500000000501313217200023016564 00000000000000/* Substitute for and wrapper around . Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_SYS_IOCTL_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SYS_IOCTL_H@ # @INCLUDE_NEXT@ @NEXT_SYS_IOCTL_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_IOCTL_H #define _@GUARD_PREFIX@_SYS_IOCTL_H /* AIX 5.1 and Solaris 10 declare ioctl() in and in , but not in . Haiku declares ioctl() in , but not in . But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_IOCTL@ # if @REPLACE_IOCTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ioctl # define ioctl rpl_ioctl # endif _GL_FUNCDECL_RPL (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); _GL_CXXALIAS_RPL (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); # else # if @SYS_IOCTL_H_HAVE_WINSOCK2_H@ || 1 _GL_FUNCDECL_SYS (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); # endif _GL_CXXALIAS_SYS (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); # endif _GL_CXXALIASWARN (ioctl); #elif @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ # undef ioctl # define ioctl ioctl_used_without_requesting_gnulib_module_ioctl #elif defined GNULIB_POSIXCHECK # undef ioctl # if HAVE_RAW_DECL_IOCTL _GL_WARN_ON_USE (ioctl, "ioctl does not portably work on sockets - " "use gnulib module ioctl for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_IOCTL_H */ #endif /* _@GUARD_PREFIX@_SYS_IOCTL_H */ gnuastro-0.5/bootstrapped/tests/test-symlink.h0000644000175000017500000000607113217200024016620 00000000000000/* Tests of symlink. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ /* This file is designed to test both symlink(a,b) and symlinkat(a,AT_FDCWD,b). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_symlink (int (*func) (char const *, char const *), bool print) { if (func ("nowhere", BASE "link1")) { if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } /* Some systems allow the creation of 0-length symlinks as a synonym for "."; but most reject it. */ { int status; errno = 0; status = func ("", BASE "link2"); if (status == -1) ASSERT (errno == ENOENT || errno == EINVAL); else { ASSERT (status == 0); ASSERT (unlink (BASE "link2") == 0); } } /* Sanity checks of failures. */ errno = 0; ASSERT (func ("nowhere", "") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nowhere", ".") == -1); ASSERT (errno == EEXIST || errno == EINVAL); errno = 0; ASSERT (func ("somewhere", BASE "link1") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "link2/") == -1); ASSERT (errno == ENOTDIR || errno == ENOENT); ASSERT (mkdir (BASE "dir", 0700) == 0); errno = 0; ASSERT (func ("nowhere", BASE "dir") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "dir/") == -1); ASSERT (errno == EEXIST || errno == EINVAL); ASSERT (close (creat (BASE "file", 0600)) == 0); errno = 0; ASSERT (func ("nowhere", BASE "file") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "file/") == -1); ASSERT (errno == EEXIST || errno == ENOTDIR || errno == ENOENT); /* Trailing slash must always be rejected. */ ASSERT (unlink (BASE "link1") == 0); ASSERT (func (BASE "link2", BASE "link1") == 0); errno = 0; ASSERT (func (BASE "nowhere", BASE "link1/") == -1); ASSERT (errno == EEXIST || errno == ENOTDIR || errno == ENOENT); errno = 0; ASSERT (unlink (BASE "link2") == -1); ASSERT (errno == ENOENT); /* Cleanup. */ ASSERT (rmdir (BASE "dir") == 0); ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link1") == 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-sys_wait.h0000644000175000017500000000361613217200024016776 00000000000000/* Test of macros shared between and . Copyright (C) 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2010. */ static int test_sys_wait_macros (void) { /* Check subset of macros that must be visible here. Note that some of these macros are only portable when operating on an lvalue. */ int i; for (i = 0; i < 0x8000; i = (i ? i << 1 : 1)) { /* POSIX requires that for all valid process statuses, that exactly one of these three macros is true. But not all possible 16-bit values map to valid process status. Traditionally, 8 of the bits are for WIFEXITED, 7 of the bits to tell between WIFSIGNALED and WIFSTOPPED, and either 0x80 or 0x8000 to flag that core was also dumped. Since we don't know which byte is WIFEXITED, we skip the both possible bits that can signal core dump. */ if (i == 0x80) continue; if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1) return 1; } i = WEXITSTATUS (i) + WSTOPSIG (i) + WTERMSIG (i); switch (i) { #if 0 /* Gnulib doesn't guarantee these, yet. */ case WNOHANG: case WUNTRACED: #endif break; } return 0; } gnuastro-0.5/bootstrapped/tests/nap.h0000644000175000017500000001025113217200023014725 00000000000000/* Assist in file system timestamp tests. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #ifndef GLTEST_NAP_H # define GLTEST_NAP_H # include # include # include /* Name of the witness file. */ #define TEMPFILE BASE "nap.tmp" /* File descriptor used for the witness file. */ static int nap_fd = -1; /* Return A - B, in ns. Return 0 if the true result would be negative. Return INT_MAX if the true result would be greater than INT_MAX. */ static int diff_timespec (struct timespec a, struct timespec b) { time_t as = a.tv_sec; time_t bs = b.tv_sec; int ans = a.tv_nsec; int bns = b.tv_nsec; int sdiff; ASSERT (0 <= ans && ans < 2000000000); ASSERT (0 <= bns && bns < 2000000000); if (! (bs < as || (bs == as && bns < ans))) return 0; if (INT_SUBTRACT_WRAPV (as, bs, &sdiff) || INT_MULTIPLY_WRAPV (sdiff, 1000000000, &sdiff) || INT_ADD_WRAPV (sdiff, ans - bns, &sdiff)) return INT_MAX; return sdiff; } /* If DO_WRITE, bump the modification time of the file designated by NAP_FD. Then fetch the new STAT information of NAP_FD. */ static void nap_get_stat (struct stat *st, int do_write) { if (do_write) { ASSERT (write (nap_fd, "\n", 1) == 1); #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, the modification times are not changed until NAP_FD is closed. See https://msdn.microsoft.com/en-us/library/windows/desktop/aa365747(v=vs.85).aspx */ close (nap_fd); nap_fd = open (TEMPFILE, O_RDWR, 0600); ASSERT (nap_fd != -1); lseek (nap_fd, 0, SEEK_END); #endif } ASSERT (fstat (nap_fd, st) == 0); } /* Given a file whose descriptor is FD, see whether delaying by DELAY nanoseconds causes a change in a file's mtime. OLD_ST is the file's status, recently gotten. */ static bool nap_works (int delay, struct stat old_st) { struct stat st; struct timespec delay_spec; delay_spec.tv_sec = delay / 1000000000; delay_spec.tv_nsec = delay % 1000000000; ASSERT (nanosleep (&delay_spec, 0) == 0); nap_get_stat (&st, 1); if (diff_timespec (get_stat_mtime (&st), get_stat_mtime (&old_st))) return true; return false; } static void clear_temp_file (void) { if (0 <= nap_fd) { ASSERT (close (nap_fd) != -1); ASSERT (unlink (TEMPFILE) != -1); } } /* Sleep long enough to notice a timestamp difference on the file system in the current directory. Use an adaptive approach, trying to find the smallest delay which works on the current file system to make the timestamp difference appear. Assert a maximum delay of ~2 seconds, more precisely sum(2^n) from 0 to 30 = 2^31 - 1 = 2.1s. Assumes that BASE is defined, and requires that the test module depends on nanosleep. */ static void nap (void) { struct stat old_st; static int delay = 1; if (-1 == nap_fd) { atexit (clear_temp_file); ASSERT ((nap_fd = creat (TEMPFILE, 0600)) != -1); nap_get_stat (&old_st, 0); } else { ASSERT (0 <= nap_fd); nap_get_stat (&old_st, 1); } if (1 < delay) delay = delay / 2; /* Try half of the previous delay. */ ASSERT (0 < delay); for (;;) { if (nap_works (delay, old_st)) return; if (delay <= (2147483647 - 1) / 2) { delay = delay * 2 + 1; continue; } else break; } /* Bummer: even the highest nap delay didn't work. */ ASSERT (0); } #endif /* GLTEST_NAP_H */ gnuastro-0.5/bootstrapped/tests/stat-time.h0000644000175000017500000001717313217200023016070 00000000000000/* stat-related time functions. Copyright (C) 2005, 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paul Eggert. */ #ifndef STAT_TIME_H #define STAT_TIME_H 1 #include "intprops.h" #include #include #include #include #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_STAT_TIME_INLINE # define _GL_STAT_TIME_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim for access, status change, data modification, or birth (creation) time respectively. These macros are private to stat-time.h. */ #if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC # if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) # else # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec) # endif #elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) #elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec) #elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec) #endif /* Return the nanosecond component of *ST's access time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_atime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_atim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_atim); # else return 0; # endif } /* Return the nanosecond component of *ST's status change time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_ctime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_ctim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_ctim); # else return 0; # endif } /* Return the nanosecond component of *ST's data modification time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_mtime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_mtim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_mtim); # else return 0; # endif } /* Return the nanosecond component of *ST's birth time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_birthtime_ns (struct stat const *st) { # if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC return STAT_TIMESPEC (st, st_birthtim).tv_nsec; # elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC return STAT_TIMESPEC_NS (st, st_birthtim); # else /* Avoid a "parameter unused" warning. */ (void) st; return 0; # endif } /* Return *ST's access time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_atime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_atim); #else struct timespec t; t.tv_sec = st->st_atime; t.tv_nsec = get_stat_atime_ns (st); return t; #endif } /* Return *ST's status change time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_ctime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_ctim); #else struct timespec t; t.tv_sec = st->st_ctime; t.tv_nsec = get_stat_ctime_ns (st); return t; #endif } /* Return *ST's data modification time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_mtime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_mtim); #else struct timespec t; t.tv_sec = st->st_mtime; t.tv_nsec = get_stat_mtime_ns (st); return t; #endif } /* Return *ST's birth time, if available; otherwise return a value with tv_sec and tv_nsec both equal to -1. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_birthtime (struct stat const *st) { struct timespec t; #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) t = STAT_TIMESPEC (st, st_birthtim); #elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC t.tv_sec = st->st_birthtime; t.tv_nsec = st->st_birthtimensec; #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Windows platforms (but not Cygwin) put the "file creation time" in st_ctime (!). See . */ # if _GL_WINDOWS_STAT_TIMESPEC t = st->st_ctim; # else t.tv_sec = st->st_ctime; t.tv_nsec = 0; # endif #else /* Birth time is not supported. */ t.tv_sec = -1; t.tv_nsec = -1; /* Avoid a "parameter unused" warning. */ (void) st; #endif #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) /* FreeBSD and NetBSD sometimes signal the absence of knowledge by using zero. Attempt to work around this problem. Alas, this can report failure even for valid timestamps. Also, NetBSD sometimes returns junk in the birth time fields; work around this bug if it is detected. */ if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) { t.tv_sec = -1; t.tv_nsec = -1; } #endif return t; } /* If a stat-like function returned RESULT, normalize the timestamps in *ST, in case this platform suffers from the Solaris 11 bug where tv_nsec might be negative. Return the adjusted RESULT, setting errno to EOVERFLOW if normalization overflowed. This function is intended to be private to this .h file. */ _GL_STAT_TIME_INLINE int stat_time_normalize (int result, struct stat *st) { #if defined __sun && defined STAT_TIMESPEC if (result == 0) { long int timespec_resolution = 1000000000; short int const ts_off[] = { offsetof (struct stat, st_atim), offsetof (struct stat, st_mtim), offsetof (struct stat, st_ctim) }; int i; for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++) { struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]); long int q = ts->tv_nsec / timespec_resolution; long int r = ts->tv_nsec % timespec_resolution; if (r < 0) { r += timespec_resolution; q--; } ts->tv_nsec = r; /* Overflow is possible, as Solaris 11 stat can yield tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. INT_ADD_WRAPV is OK, since time_t is signed on Solaris. */ if (INT_ADD_WRAPV (q, ts->tv_sec, &ts->tv_sec)) { errno = EOVERFLOW; return -1; } } } #endif return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif gnuastro-0.5/bootstrapped/tests/test-stat.h0000644000175000017500000000604313217200024016104 00000000000000/* Tests of stat. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ /* This file is designed to test both stat(n,buf) and fstatat(AT_FDCWD,n,buf,0). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_stat_func (int (*func) (char const *, struct stat *), bool print) { struct stat st1; struct stat st2; char *cwd = getcwd (NULL, 0); ASSERT (cwd); ASSERT (func (".", &st1) == 0); ASSERT (func ("./", &st2) == 0); ASSERT (SAME_INODE (st1, st2)); ASSERT (func (cwd, &st2) == 0); ASSERT (SAME_INODE (st1, st2)); ASSERT (func ("/", &st1) == 0); ASSERT (func ("///", &st2) == 0); ASSERT (SAME_INODE (st1, st2)); errno = 0; ASSERT (func ("", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch/", &st1) == -1); ASSERT (errno == ENOENT); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (func (BASE "file", &st1) == 0); errno = 0; ASSERT (func (BASE "file/", &st1) == -1); ASSERT (errno == ENOTDIR); /* Now for some symlink tests, where supported. We set up: link1 -> directory link2 -> file link3 -> dangling link4 -> loop then test behavior with trailing slash. */ if (symlink (".", BASE "link1") != 0) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (symlink (BASE "file", BASE "link2") == 0); ASSERT (symlink (BASE "nosuch", BASE "link3") == 0); ASSERT (symlink (BASE "link4", BASE "link4") == 0); ASSERT (func (BASE "link1/", &st1) == 0); ASSERT (S_ISDIR (st1.st_mode)); errno = 0; ASSERT (func (BASE "link2/", &st1) == -1); ASSERT (errno == ENOTDIR); errno = 0; ASSERT (func (BASE "link3/", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "link4/", &st1) == -1); ASSERT (errno == ELOOP); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link1") == 0); ASSERT (unlink (BASE "link2") == 0); ASSERT (unlink (BASE "link3") == 0); ASSERT (unlink (BASE "link4") == 0); free (cwd); return 0; } gnuastro-0.5/bootstrapped/tests/warn-on-use.h0000644000175000017500000001201013217200024016316 00000000000000/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. This macro is useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system : #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static char ***rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function __attribute__ ((__warning__ (message))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") is like _GL_WARN_ON_USE (function, "string"), except that the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif gnuastro-0.5/bootstrapped/tests/c++defs.h0000644000175000017500000003413013217200022015362 00000000000000/* C++ compatible function declaration macros. Copyright (C) 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* Begin/end the GNULIB_NAMESPACE namespace. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { # define _GL_END_NAMESPACE } #else # define _GL_BEGIN_NAMESPACE # define _GL_END_NAMESPACE #endif /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); Wrapping rpl_func in an object with an inline conversion operator avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is actually used in the program. */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::rpl_func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast(::rpl_func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); Wrapping func in an object with an inline conversion operator avoids a reference to func unless GNULIB_NAMESPACE::func is actually used in the program. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast(::func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ gnuastro-0.5/bootstrapped/tests/arg-nonnull.h0000644000175000017500000000230113217200022016377 00000000000000/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif gnuastro-0.5/bootstrapped/tests/_Noreturn.h0000644000175000017500000000046213217200022016124 00000000000000#if !defined _Noreturn && __STDC_VERSION__ < 201112 # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif gnuastro-0.5/bootstrapped/tests/signal.in.h0000644000175000017500000003461213217200023016040 00000000000000/* A GNU-like . Copyright (C) 2006-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) /* Special invocation convention: - Inside glibc header files. - On glibc systems we have a sequence of nested includes -> -> . In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. - On glibc systems with GCC 4.3 we have a sequence of nested includes -> -> -> . In this situation, some of the functions are not yet declared, therefore we cannot provide the C++ aliases. */ # @INCLUDE_NEXT@ @NEXT_SIGNAL_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SIGNAL_H #define _GL_ALREADY_INCLUDING_SIGNAL_H /* Define pid_t, uid_t. Also, mingw defines sigset_t not in , but in . On Solaris 10, includes , which eventually includes us; so include now, before the second inclusion guard. */ #include /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ #undef _GL_ALREADY_INCLUDING_SIGNAL_H #ifndef _@GUARD_PREFIX@_SIGNAL_H #define _@GUARD_PREFIX@_SIGNAL_H /* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6, Android declare pthread_sigmask in , not in . But avoid namespace pollution on glibc systems.*/ #if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \ && ((defined __APPLE__ && defined __MACH__) \ || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ \ || defined __sun || defined __ANDROID__) \ && ! defined __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* On AIX, sig_atomic_t already includes volatile. C99 requires that 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. Hence, redefine this to a non-volatile type as needed. */ #if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ # if !GNULIB_defined_sig_atomic_t typedef int rpl_sig_atomic_t; # undef sig_atomic_t # define sig_atomic_t rpl_sig_atomic_t # define GNULIB_defined_sig_atomic_t 1 # endif #endif /* A set or mask of signals. */ #if !@HAVE_SIGSET_T@ # if !GNULIB_defined_sigset_t typedef unsigned int sigset_t; # define GNULIB_defined_sigset_t 1 # endif #endif /* Define sighandler_t, the type of signal handlers. A GNU extension. */ #if !@HAVE_SIGHANDLER_T@ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_sighandler_t typedef void (*sighandler_t) (int); # define GNULIB_defined_sighandler_t 1 # endif # ifdef __cplusplus } # endif #endif #if @GNULIB_SIGNAL_H_SIGPIPE@ # ifndef SIGPIPE /* Define SIGPIPE to a value that does not overlap with other signals. */ # define SIGPIPE 13 # define GNULIB_defined_SIGPIPE 1 /* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', 'write', 'stdio'. */ # endif #endif /* Maximum signal number + 1. */ #ifndef NSIG # if defined __TANDEM # define NSIG 32 # endif #endif #if @GNULIB_PTHREAD_SIGMASK@ # if @REPLACE_PTHREAD_SIGMASK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_sigmask # define pthread_sigmask rpl_pthread_sigmask # endif _GL_FUNCDECL_RPL (pthread_sigmask, int, (int how, const sigset_t *new_mask, sigset_t *old_mask)); _GL_CXXALIAS_RPL (pthread_sigmask, int, (int how, const sigset_t *new_mask, sigset_t *old_mask)); # else # if !@HAVE_PTHREAD_SIGMASK@ _GL_FUNCDECL_SYS (pthread_sigmask, int, (int how, const sigset_t *new_mask, sigset_t *old_mask)); # endif _GL_CXXALIAS_SYS (pthread_sigmask, int, (int how, const sigset_t *new_mask, sigset_t *old_mask)); # endif _GL_CXXALIASWARN (pthread_sigmask); #elif defined GNULIB_POSIXCHECK # undef pthread_sigmask # if HAVE_RAW_DECL_PTHREAD_SIGMASK _GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - " "use gnulib module pthread_sigmask for portability"); # endif #endif #if @GNULIB_RAISE@ # if @REPLACE_RAISE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef raise # define raise rpl_raise # endif _GL_FUNCDECL_RPL (raise, int, (int sig)); _GL_CXXALIAS_RPL (raise, int, (int sig)); # else # if !@HAVE_RAISE@ _GL_FUNCDECL_SYS (raise, int, (int sig)); # endif _GL_CXXALIAS_SYS (raise, int, (int sig)); # endif _GL_CXXALIASWARN (raise); #elif defined GNULIB_POSIXCHECK # undef raise /* Assume raise is always declared. */ _GL_WARN_ON_USE (raise, "raise can crash on native Windows - " "use gnulib module raise for portability"); #endif #if @GNULIB_SIGPROCMASK@ # if !@HAVE_POSIX_SIGNALBLOCKING@ # ifndef GNULIB_defined_signal_blocking # define GNULIB_defined_signal_blocking 1 # endif /* Maximum signal number + 1. */ # ifndef NSIG # define NSIG 32 # endif /* This code supports only 32 signals. */ # if !GNULIB_defined_verify_NSIG_constraint typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; # define GNULIB_defined_verify_NSIG_constraint 1 # endif # endif /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., . Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && (defined __i386__ || defined __x86_64__)) # undef sigaddset # undef sigdelset # undef sigemptyset # undef sigfillset # undef sigismember #endif /* Test whether a given signal is contained in a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigismember # endif # else _GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig)); _GL_CXXALIASWARN (sigismember); /* Initialize a signal set to the empty set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigemptyset # endif # else _GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set)); _GL_CXXALIASWARN (sigemptyset); /* Add a signal to a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigaddset # endif # else _GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig)); _GL_CXXALIASWARN (sigaddset); /* Remove a signal from a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigdelset # endif # else _GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig)); _GL_CXXALIASWARN (sigdelset); /* Fill a signal set with all possible signals. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigfillset # endif # else _GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set)); _GL_CXXALIASWARN (sigfillset); /* Return the set of those blocked signals that are pending. */ # if !@HAVE_POSIX_SIGNALBLOCKING@ _GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set)); _GL_CXXALIASWARN (sigpending); /* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. Then, if SET is not NULL, affect the current set of blocked signals by combining it with *SET as indicated in OPERATION. In this implementation, you are not allowed to change a signal handler while the signal is blocked. */ # if !@HAVE_POSIX_SIGNALBLOCKING@ # define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ # define SIG_SETMASK 1 /* blocked_set = *set; */ # define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ _GL_FUNCDECL_SYS (sigprocmask, int, (int operation, const sigset_t *set, sigset_t *old_set)); # endif _GL_CXXALIAS_SYS (sigprocmask, int, (int operation, const sigset_t *set, sigset_t *old_set)); _GL_CXXALIASWARN (sigprocmask); /* Install the handler FUNC for signal SIG, and return the previous handler. */ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_function_taking_int_returning_void_t typedef void (*_gl_function_taking_int_returning_void_t) (int); # define GNULIB_defined_function_taking_int_returning_void_t 1 # endif # ifdef __cplusplus } # endif # if !@HAVE_POSIX_SIGNALBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define signal rpl_signal # endif _GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); _GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # else _GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # endif _GL_CXXALIASWARN (signal); # if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE /* Raise signal SIGPIPE. */ _GL_EXTERN_C int _gl_raise_SIGPIPE (void); # endif #elif defined GNULIB_POSIXCHECK # undef sigaddset # if HAVE_RAW_DECL_SIGADDSET _GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigdelset # if HAVE_RAW_DECL_SIGDELSET _GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigemptyset # if HAVE_RAW_DECL_SIGEMPTYSET _GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigfillset # if HAVE_RAW_DECL_SIGFILLSET _GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigismember # if HAVE_RAW_DECL_SIGISMEMBER _GL_WARN_ON_USE (sigismember, "sigismember is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigpending # if HAVE_RAW_DECL_SIGPENDING _GL_WARN_ON_USE (sigpending, "sigpending is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigprocmask # if HAVE_RAW_DECL_SIGPROCMASK _GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - " "use the gnulib module sigprocmask for portability"); # endif #endif /* @GNULIB_SIGPROCMASK@ */ #if @GNULIB_SIGACTION@ # if !@HAVE_SIGACTION@ # if !@HAVE_SIGINFO_T@ # if !GNULIB_defined_siginfo_types /* Present to allow compilation, but unsupported by gnulib. */ union sigval { int sival_int; void *sival_ptr; }; /* Present to allow compilation, but unsupported by gnulib. */ struct siginfo_t { int si_signo; int si_code; int si_errno; pid_t si_pid; uid_t si_uid; void *si_addr; int si_status; long si_band; union sigval si_value; }; typedef struct siginfo_t siginfo_t; # define GNULIB_defined_siginfo_types 1 # endif # endif /* !@HAVE_SIGINFO_T@ */ /* We assume that platforms which lack the sigaction() function also lack the 'struct sigaction' type, and vice versa. */ # if !GNULIB_defined_struct_sigaction struct sigaction { union { void (*_sa_handler) (int); /* Present to allow compilation, but unsupported by gnulib. POSIX says that implementations may, but not must, make sa_sigaction overlap with sa_handler, but we know of no implementation where they do not overlap. */ void (*_sa_sigaction) (int, siginfo_t *, void *); } _sa_func; sigset_t sa_mask; /* Not all POSIX flags are supported. */ int sa_flags; }; # define sa_handler _sa_func._sa_handler # define sa_sigaction _sa_func._sa_sigaction /* Unsupported flags are not present. */ # define SA_RESETHAND 1 # define SA_NODEFER 2 # define SA_RESTART 4 # define GNULIB_defined_struct_sigaction 1 # endif _GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict, struct sigaction *restrict)); # elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ # define sa_sigaction sa_handler # endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */ _GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict, struct sigaction *restrict)); _GL_CXXALIASWARN (sigaction); #elif defined GNULIB_POSIXCHECK # undef sigaction # if HAVE_RAW_DECL_SIGACTION _GL_WARN_ON_USE (sigaction, "sigaction is unportable - " "use the gnulib module sigaction for portability"); # endif #endif /* Some systems don't have SA_NODEFER. */ #ifndef SA_NODEFER # define SA_NODEFER 0 #endif #endif /* _@GUARD_PREFIX@_SIGNAL_H */ #endif /* _@GUARD_PREFIX@_SIGNAL_H */ #endif gnuastro-0.5/bootstrapped/tests/sig-handler.h0000644000175000017500000000360013217200023016344 00000000000000/* Convenience declarations when working with . Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_SIG_HANDLER_H #define _GL_SIG_HANDLER_H #include #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef SIG_HANDLER_INLINE # define SIG_HANDLER_INLINE _GL_INLINE #endif /* Convenience type when working with signal handlers. */ typedef void (*sa_handler_t) (int); /* Return the handler of a signal, as a sa_handler_t value regardless of its true type. The resulting function can be compared to special values like SIG_IGN but it is not portable to call it. */ SIG_HANDLER_INLINE sa_handler_t _GL_ATTRIBUTE_PURE get_handler (struct sigaction const *a) { #ifdef SA_SIGINFO /* POSIX says that special values like SIG_IGN can only occur when action.sa_flags does not contain SA_SIGINFO. But in Linux 2.4, for example, sa_sigaction and sa_handler are aliases and a signal is ignored if sa_sigaction (after casting) equals SIG_IGN. So use (and cast) sa_sigaction in that case. */ if (a->sa_flags & SA_SIGINFO) return (sa_handler_t) a->sa_sigaction; #endif return a->sa_handler; } _GL_INLINE_HEADER_END #endif /* _GL_SIG_HANDLER_H */ gnuastro-0.5/bootstrapped/tests/test-setlocale2.sh0000755000175000017500000000133713217200024017355 00000000000000#!/bin/sh # Test locale names with likely unsupported encoding in Unix syntax. for name in ar_SA.ISO-8859-1 fr_FR.CP1251 zh_TW.GB18030 zh_CN.BIG5; do env LC_ALL=$name ./test-setlocale2${EXEEXT} 1 || exit 1 done # Test locale names with likely unsupported encoding in native Windows syntax. for name in "Arabic_Saudi Arabia.1252" "Arabic_Saudi Arabia.65001" \ French_France.65001 Japanese_Japan.65001 Turkish_Turkey.65001 \ Chinese_Taiwan.65001 Chinese_China.54936 Chinese_China.65001; do # Here we use 'env' to set the LC_ALL environment variable, because on # Solaris 11.0, the /bin/sh refuses to do it for Turkish_Turkey.65001. env LC_ALL="$name" ./test-setlocale2${EXEEXT} 1 || exit 1 done exit 0 gnuastro-0.5/bootstrapped/tests/test-setlocale1.sh0000755000175000017500000000150613217200024017352 00000000000000#!/bin/sh : ${LOCALE_FR=fr_FR} : ${LOCALE_FR_UTF8=fr_FR.UTF-8} : ${LOCALE_JA=ja_JP} : ${LOCALE_ZH_CN=zh_CN.GB18030} if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none \ && test $LOCALE_JA = none && test $LOCALE_ZH_CN = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no locale for testing is installed" else echo "Skipping test: no locale for testing is supported" fi exit 77 fi if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN ./test-setlocale1${EXEEXT} || exit 1 fi exit 0 gnuastro-0.5/bootstrapped/tests/test-select-out.sh0000755000175000017500000000157013217200024017403 00000000000000#!/bin/sh # Test select() on file descriptors opened for writing. tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-select-out.out t-select-out.tmp" # Regular files. rm -f t-select-out.tmp ./test-select-fd${EXEEXT} w 1 t-select-out.tmp > t-select-out.out test `cat t-select-out.tmp` = "1" || exit 1 # Pipes. if false; then # This test fails on some platforms. rm -f t-select-out.tmp ( { echo abc; ./test-select-fd${EXEEXT} w 1 t-select-out.tmp; } | { sleep 1; cat; } ) > /dev/null test `cat t-select-out.tmp` = "0" || exit 1 fi rm -f t-select-out.tmp ( { sleep 1; echo abc; ./test-select-fd${EXEEXT} w 1 t-select-out.tmp; } | cat) > /dev/null test `cat t-select-out.tmp` = "1" || exit 1 # Special files. rm -f t-select-out.tmp ./test-select-fd${EXEEXT} w 1 t-select-out.tmp > /dev/null test `cat t-select-out.tmp` = "1" || exit 1 rm -fr $tmpfiles exit 0 gnuastro-0.5/bootstrapped/tests/test-select-in.sh0000755000175000017500000000166113217200024017203 00000000000000#!/bin/sh # Test select() on file descriptors opened for reading. # This test is known to fail on Solaris 2.6 and older, due to its handling # of /dev/null. tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-select-in.tmp" # Regular files. rm -f t-select-in.tmp ./test-select-fd${EXEEXT} r 0 t-select-in.tmp < ./test-select-fd${EXEEXT} test `cat t-select-in.tmp` = "1" || exit 1 # Pipes. rm -f t-select-in.tmp { sleep 1; echo abc; } | \ { ./test-select-fd${EXEEXT} r 0 t-select-in.tmp; cat > /dev/null; } test `cat t-select-in.tmp` = "0" || exit 1 rm -f t-select-in.tmp echo abc | { sleep 1; ./test-select-fd${EXEEXT} r 0 t-select-in.tmp; } test `cat t-select-in.tmp` = "1" || exit 1 # Special files. # This part of the test is known to fail on Solaris 2.6 and older. rm -f t-select-in.tmp ./test-select-fd${EXEEXT} r 0 t-select-in.tmp < /dev/null test `cat t-select-in.tmp` = "1" || exit 1 rm -fr $tmpfiles exit 0 gnuastro-0.5/bootstrapped/tests/test-select.h0000644000175000017500000002615713217200024016420 00000000000000/* Test of select() substitute. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paolo Bonzini, 2008. */ #include #include #include #include #include #include #include #include #include #include #include "macros.h" #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #ifdef HAVE_SYS_WAIT_H # include #endif #ifndef SO_REUSEPORT # define SO_REUSEPORT SO_REUSEADDR #endif #define TEST_PORT 12345 typedef int (*select_fn) (int, fd_set *, fd_set *, fd_set *, struct timeval *); /* Minimal testing infrastructure. */ static int failures; static void failed (const char *reason) { if (++failures > 1) printf (" "); printf ("failed (%s)\n", reason); } static int test (void (*fn) (select_fn), select_fn my_select, const char *msg) { failures = 0; printf ("%s... ", msg); fflush (stdout); fn (my_select); if (!failures) printf ("passed\n"); return failures; } /* Funny socket code. */ static int open_server_socket (void) { int s, x; struct sockaddr_in ia; s = socket (AF_INET, SOCK_STREAM, 0); x = 1; setsockopt (s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x)); memset (&ia, 0, sizeof (ia)); ia.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr); ia.sin_port = htons (TEST_PORT); if (bind (s, (struct sockaddr *) &ia, sizeof (ia)) < 0) { perror ("bind"); exit (77); } if (listen (s, 1) < 0) { perror ("listen"); exit (77); } return s; } static int connect_to_socket (bool blocking) { int s; struct sockaddr_in ia; s = socket (AF_INET, SOCK_STREAM, 0); memset (&ia, 0, sizeof (ia)); ia.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr); ia.sin_port = htons (TEST_PORT); if (!blocking) { #ifdef WINDOWS_NATIVE unsigned long iMode = 1; ioctl (s, FIONBIO, (char *) &iMode); #elif defined F_GETFL int oldflags = fcntl (s, F_GETFL, NULL); if (!(oldflags & O_NONBLOCK)) fcntl (s, F_SETFL, oldflags | O_NONBLOCK); #endif } if (connect (s, (struct sockaddr *) &ia, sizeof (ia)) < 0 && (blocking || errno != EINPROGRESS)) { perror ("connect"); exit (77); } return s; } /* A slightly more convenient interface to select(2). Waits until a specific event occurs on a file descriptor FD. EV is a bit mask of events to look for: SEL_IN - input can be polled without blocking, SEL_OUT - output can be provided without blocking, SEL_EXC - an exception occurred, A maximum wait time is specified by TIMEOUT. *TIMEOUT = { 0, 0 } means to return immediately, TIMEOUT = NULL means to wait indefinitely. */ enum { SEL_IN = 1, SEL_OUT = 2, SEL_EXC = 4 }; static int do_select (int fd, int ev, struct timeval *timeout, select_fn my_select) { fd_set rfds, wfds, xfds; int r, rev; FD_ZERO (&rfds); FD_ZERO (&wfds); FD_ZERO (&xfds); if (ev & SEL_IN) FD_SET (fd, &rfds); if (ev & SEL_OUT) FD_SET (fd, &wfds); if (ev & SEL_EXC) FD_SET (fd, &xfds); r = my_select (fd + 1, &rfds, &wfds, &xfds, timeout); if (r < 0) return r; rev = 0; if (FD_ISSET (fd, &rfds)) rev |= SEL_IN; if (FD_ISSET (fd, &wfds)) rev |= SEL_OUT; if (FD_ISSET (fd, &xfds)) rev |= SEL_EXC; if (rev && r == 0) failed ("select returned 0"); if (rev & ~ev) failed ("select returned unrequested events"); return rev; } static int do_select_nowait (int fd, int ev, select_fn my_select) { struct timeval tv0; tv0.tv_sec = 0; tv0.tv_usec = 0; return do_select (fd, ev, &tv0, my_select); } static int do_select_wait (int fd, int ev, select_fn my_select) { return do_select (fd, ev, NULL, my_select); } /* Test select(2) for TTYs. */ #ifdef INTERACTIVE static void test_tty (select_fn my_select) { if (do_select_nowait (0, SEL_IN, my_select) != 0) failed ("can read"); if (do_select_nowait (0, SEL_OUT, my_select) == 0) failed ("cannot write"); if (do_select_wait (0, SEL_IN, my_select) == 0) failed ("return with infinite timeout"); getchar (); if (do_select_nowait (0, SEL_IN, my_select) != 0) failed ("can read after getc"); } #endif static int do_select_bad_nfd_nowait (int nfd, select_fn my_select) { struct timeval tv0; tv0.tv_sec = 0; tv0.tv_usec = 0; errno = 0; return my_select (nfd, NULL, NULL, NULL, &tv0); } static void test_bad_nfd (select_fn my_select) { if (do_select_bad_nfd_nowait (-1, my_select) != -1 || errno != EINVAL) failed ("invalid errno after negative nfds"); /* Can't test FD_SETSIZE + 1 for EINVAL, since some systems allow dynamically larger set size by redefining FD_SETSIZE anywhere up to the actual maximum fd. */ /* if (do_select_bad_nfd_nowait (FD_SETSIZE + 1, my_select) != -1 */ /* || errno != EINVAL) */ /* failed ("invalid errno after bogus nfds"); */ } /* Test select(2) on invalid file descriptors. */ static int do_select_bad_fd (int fd, int ev, struct timeval *timeout, select_fn my_select) { fd_set rfds, wfds, xfds; FD_ZERO (&rfds); FD_ZERO (&wfds); FD_ZERO (&xfds); if (ev & SEL_IN) FD_SET (fd, &rfds); if (ev & SEL_OUT) FD_SET (fd, &wfds); if (ev & SEL_EXC) FD_SET (fd, &xfds); errno = 0; return my_select (fd + 1, &rfds, &wfds, &xfds, timeout); /* In this case, when fd is invalid, on some platforms, the bit for fd is left alone in the fd_set, whereas on other platforms it is cleared. So, don't check the bit for fd here. */ } static int do_select_bad_fd_nowait (int fd, int ev, select_fn my_select) { struct timeval tv0; tv0.tv_sec = 0; tv0.tv_usec = 0; return do_select_bad_fd (fd, ev, &tv0, my_select); } static void test_bad_fd (select_fn my_select) { /* This tests fails on OSF/1 and native Windows, even with fd = 16. */ #if !(defined __osf__ || defined WINDOWS_NATIVE) int fd; /* On Linux, Mac OS X, *BSD, values of fd like 99 or 399 are discarded by the kernel early and therefore do *not* lead to EBADF, as required by POSIX. */ # if defined __linux__ || (defined __APPLE__ && defined __MACH__) || (defined __FreeBSD__ || defined __DragonFly__) || defined __OpenBSD__ || defined __NetBSD__ fd = 14; # else fd = 99; # endif close (fd); if (do_select_bad_fd_nowait (fd, SEL_IN, my_select) == 0 || errno != EBADF) failed ("invalid fd among rfds"); if (do_select_bad_fd_nowait (fd, SEL_OUT, my_select) == 0 || errno != EBADF) failed ("invalid fd among wfds"); if (do_select_bad_fd_nowait (fd, SEL_EXC, my_select) == 0 || errno != EBADF) failed ("invalid fd among xfds"); #endif } /* Test select(2) for unconnected nonblocking sockets. */ static void test_connect_first (select_fn my_select) { int s = open_server_socket (); struct sockaddr_in ia; socklen_t addrlen; int c1, c2; if (do_select_nowait (s, SEL_IN | SEL_EXC, my_select) != 0) failed ("can read, socket not connected"); c1 = connect_to_socket (false); if (do_select_wait (s, SEL_IN | SEL_EXC, my_select) != SEL_IN) failed ("expecting readability on passive socket"); if (do_select_nowait (s, SEL_IN | SEL_EXC, my_select) != SEL_IN) failed ("expecting readability on passive socket"); addrlen = sizeof (ia); c2 = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (close (s) == 0); ASSERT (close (c1) == 0); ASSERT (close (c2) == 0); } /* Test select(2) for unconnected blocking sockets. */ static void test_accept_first (select_fn my_select) { #ifndef WINDOWS_NATIVE int s = open_server_socket (); struct sockaddr_in ia; socklen_t addrlen; char buf[3]; int c, pid; pid = fork (); if (pid < 0) return; if (pid == 0) { addrlen = sizeof (ia); c = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (close (s) == 0); ASSERT (write (c, "foo", 3) == 3); ASSERT (read (c, buf, 3) == 3); shutdown (c, SHUT_RD); ASSERT (close (c) == 0); exit (0); } else { ASSERT (close (s) == 0); c = connect_to_socket (true); if (do_select_nowait (c, SEL_OUT, my_select) != SEL_OUT) failed ("cannot write after blocking connect"); ASSERT (write (c, "foo", 3) == 3); wait (&pid); if (do_select_wait (c, SEL_IN, my_select) != SEL_IN) failed ("cannot read data left in the socket by closed process"); ASSERT (read (c, buf, 3) == 3); ASSERT (write (c, "foo", 3) == 3); (void) close (c); /* may fail with errno = ECONNRESET */ } #endif } /* Common code for pipes and connected sockets. */ static void test_pair (int rd, int wd, select_fn my_select) { char buf[3]; if (do_select_wait (wd, SEL_IN | SEL_OUT | SEL_EXC, my_select) != SEL_OUT) failed ("expecting writability before writing"); if (do_select_nowait (wd, SEL_IN | SEL_OUT | SEL_EXC, my_select) != SEL_OUT) failed ("expecting writability before writing"); ASSERT (write (wd, "foo", 3) == 3); if (do_select_wait (rd, SEL_IN, my_select) != SEL_IN) failed ("expecting readability after writing"); if (do_select_nowait (rd, SEL_IN, my_select) != SEL_IN) failed ("expecting readability after writing"); ASSERT (read (rd, buf, 3) == 3); } /* Test select(2) on connected sockets. */ static void test_socket_pair (select_fn my_select) { struct sockaddr_in ia; socklen_t addrlen = sizeof (ia); int s = open_server_socket (); int c1 = connect_to_socket (false); int c2 = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (close (s) == 0); test_pair (c1, c2, my_select); ASSERT (close (c1) == 0); ASSERT (write (c2, "foo", 3) == 3); (void) close (c2); /* may fail with errno = ECONNRESET */ } /* Test select(2) on pipes. */ static void test_pipe (select_fn my_select) { int fd[2]; ASSERT (pipe (fd) == 0); test_pair (fd[0], fd[1], my_select); ASSERT (close (fd[0]) == 0); ASSERT (close (fd[1]) == 0); } /* Do them all. */ static int test_function (select_fn my_select) { int result = 0; #ifdef INTERACTIVE printf ("Please press Enter\n"); test (test_tty, "TTY", my_select); #endif result += test (test_bad_nfd, my_select, "Invalid nfd test"); result += test (test_bad_fd, my_select, "Invalid fd test"); result += test (test_connect_first, my_select, "Unconnected socket test"); result += test (test_socket_pair, my_select, "Connected sockets test"); result += test (test_accept_first, my_select, "General socket test with fork"); result += test (test_pipe, my_select, "Pipe test"); return result; } gnuastro-0.5/bootstrapped/tests/same-inode.h0000644000175000017500000000324513217200023016175 00000000000000/* Determine whether two stat buffers are known to refer to the same file. Copyright (C) 2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef SAME_INODE_H # define SAME_INODE_H 1 # include # if defined __VMS && __CRTL_VER < 80200000 # define SAME_INODE(a, b) \ ((a).st_ino[0] == (b).st_ino[0] \ && (a).st_ino[1] == (b).st_ino[1] \ && (a).st_ino[2] == (b).st_ino[2] \ && (a).st_dev == (b).st_dev) # elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Windows. */ # if _GL_WINDOWS_STAT_INODES /* stat() and fstat() set st_dev and st_ino to 0 if information about the inode is not available. */ # define SAME_INODE(a, b) \ (!((a).st_ino == 0 && (a).st_dev == 0) \ && (a).st_ino == (b).st_ino && (a).st_dev == (b).st_dev) # else /* stat() and fstat() set st_ino to 0 always. */ # define SAME_INODE(a, b) 0 # endif # else # define SAME_INODE(a, b) \ ((a).st_ino == (b).st_ino \ && (a).st_dev == (b).st_dev) # endif #endif gnuastro-0.5/bootstrapped/tests/test-perror.sh0000755000175000017500000000170313217200024016626 00000000000000#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . # Test NULL prefix. Result should not contain a number, except in lines that # start with 'EDC' (IBM z/OS libc produces an error identifier before the # error message). test-perror 2>&1 >/dev/null | LC_ALL=C tr -d '\r' > t-perror.tmp grep -v '^EDC' t-perror.tmp | grep '[0-9]' > /dev/null \ && fail_ "result should not contain a number" # Test empty prefix. Result should be the same. test-perror '' 2>&1 >/dev/null | LC_ALL=C tr -d '\r' > t-perror1.tmp diff t-perror.tmp t-perror1.tmp \ || fail_ "empty prefix should behave like NULL argument" # Test non-empty prefix. test-perror foo 2>&1 >/dev/null | LC_ALL=C tr -d '\r' > t-perror3.tmp sed -e 's/^/foo: /' < t-perror.tmp > t-perror2.tmp diff t-perror2.tmp t-perror3.tmp || fail_ "prefix applied incorrectly" # Test exit status. test-perror >out 2>/dev/null || fail_ "unexpected exit status" test -s out && fail_ "unexpected output" Exit 0 gnuastro-0.5/bootstrapped/tests/pathmax.h0000644000175000017500000000554713217200023015625 00000000000000/* Define PATH_MAX somehow. Requires sys/types.h. Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _PATHMAX_H # define _PATHMAX_H /* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, including the terminating NUL byte. PATH_MAX is not defined on systems which have no limit on filename length, such as GNU/Hurd. This file does *not* define PATH_MAX always. Programs that use this file can handle the GNU/Hurd case in several ways: - Either with a package-wide handling, or with a per-file handling, - Either through a #ifdef PATH_MAX or through a fallback like #ifndef PATH_MAX # define PATH_MAX 8192 #endif or through a fallback like #ifndef PATH_MAX # define PATH_MAX pathconf ("/", _PC_PATH_MAX) #endif */ # include # include # ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 256 # endif /* Don't include sys/param.h if it already has been. */ # if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include # endif # if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN # endif # ifdef __hpux /* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename, *not* including the terminating NUL byte, and is set to 1023. Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is not defined at all any more. */ # undef PATH_MAX # define PATH_MAX 1024 # endif # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, section "Maximum Path Length Limitation", explains that the maximum size of a filename, including the terminating NUL byte, is 260 = 3 + 256 + 1. This is the same value as - FILENAME_MAX in , - _MAX_PATH in , - MAX_PATH in . Undefine the original value, because mingw's gets it wrong. */ # undef PATH_MAX # define PATH_MAX 260 # endif #endif /* _PATHMAX_H */ gnuastro-0.5/bootstrapped/tests/test-open.h0000644000175000017500000000646113217200024016076 00000000000000/* Test of opening a file descriptor. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ /* Make test_open always inline if we're using Fortify, which defines __always_inline to do that. Do nothing otherwise. This works around a glibc bug whereby 'open' cannot be used as a function pointer when _FORTIFY_SOURCE is positive. */ #if __GLIBC__ && defined __always_inline # define ALWAYS_INLINE __always_inline #else # define ALWAYS_INLINE #endif /* This file is designed to test both open(n,buf[,mode]) and openat(AT_FDCWD,n,buf[,mode]). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static ALWAYS_INLINE int test_open (int (*func) (char const *, int, ...), bool print) { int fd; /* Remove anything from prior partial run. */ unlink (BASE "file"); /* Cannot create directory. */ errno = 0; ASSERT (func ("nonexist.ent/", O_CREAT | O_RDONLY, 0600) == -1); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == ENOENT || errno == EINVAL); /* Create a regular file. */ fd = func (BASE "file", O_CREAT | O_RDONLY, 0600); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Trailing slash handling. */ errno = 0; ASSERT (func (BASE "file/", O_RDONLY) == -1); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == EINVAL); /* Directories cannot be opened for writing. */ errno = 0; ASSERT (func (".", O_WRONLY) == -1); ASSERT (errno == EISDIR || errno == EACCES); /* /dev/null must exist, and be writable. */ fd = func ("/dev/null", O_RDONLY); ASSERT (0 <= fd); { char c; ASSERT (read (fd, &c, 1) == 0); } ASSERT (close (fd) == 0); fd = func ("/dev/null", O_WRONLY); ASSERT (0 <= fd); ASSERT (write (fd, "c", 1) == 1); ASSERT (close (fd) == 0); /* Although O_NONBLOCK on regular files can be ignored, it must not cause a failure. */ fd = func (BASE "file", O_NONBLOCK | O_RDONLY); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Symlink handling, where supported. */ if (symlink (BASE "file", BASE "link") != 0) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } errno = 0; ASSERT (func (BASE "link/", O_RDONLY) == -1); ASSERT (errno == ENOTDIR); fd = func (BASE "link", O_RDONLY); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link") == 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-nl_langinfo.sh0000755000175000017500000000066513217200024017611 00000000000000#!/bin/sh LC_ALL=C ./test-nl_langinfo${EXEEXT} 0 || exit 1 # Test whether a specific traditional locale is installed. : ${LOCALE_FR=fr_FR} if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ./test-nl_langinfo${EXEEXT} 1 || exit 1 fi # Test whether a specific UTF-8 locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ./test-nl_langinfo${EXEEXT} 2 || exit 1 fi exit 0 gnuastro-0.5/bootstrapped/tests/netinet_in.in.h0000644000175000017500000000247513217200023016721 00000000000000/* Substitute for . Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_NETINET_IN_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_NETINET_IN_H@ /* On many platforms, assumes prior inclusion of . */ # include /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_NETINET_IN_H@ #endif #ifndef _@GUARD_PREFIX@_NETINET_IN_H #define _@GUARD_PREFIX@_NETINET_IN_H #if !@HAVE_NETINET_IN_H@ /* A platform that lacks . */ # include #endif #endif /* _@GUARD_PREFIX@_NETINET_IN_H */ #endif /* _@GUARD_PREFIX@_NETINET_IN_H */ gnuastro-0.5/bootstrapped/tests/zerosize-ptr.h0000644000175000017500000000471713217200024016637 00000000000000/* Return a pointer to a zero-size object in memory. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* ISO C 99 does not allow memcmp(), memchr() etc. to be invoked with a NULL argument. Therefore this file produces a non-NULL pointer which cannot be dereferenced, if possible. */ #include /* Test whether mmap() and mprotect() are available. We don't use HAVE_MMAP, because AC_FUNC_MMAP would not define it on HP-UX. HAVE_MPROTECT is not enough, because mingw does not have mmap() but has an mprotect() function in libgcc.a. */ #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # include # include # include # include /* Define MAP_FILE when it isn't otherwise. */ # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif /* Return a pointer to a zero-size object in memory (that is, actually, a pointer to a page boundary where the previous page is readable and writable and the next page is neither readable not writable), if possible. Return NULL otherwise. */ static void * zerosize_ptr (void) { /* Use mmap and mprotect when they exist. Don't test HAVE_MMAP, because it is not defined on HP-UX 11 (since it does not support MAP_FIXED). */ #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) return two_pages + pagesize; } #endif return NULL; } gnuastro-0.5/bootstrapped/tests/test-mbsspn.sh0000755000175000017500000000056513217200024016624 00000000000000#!/bin/sh # Test whether a specific UTF-8 locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ./test-mbsspn${EXEEXT} gnuastro-0.5/bootstrapped/tests/test-mbspbrk.sh0000755000175000017500000000056613217200024016763 00000000000000#!/bin/sh # Test whether a specific UTF-8 locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ./test-mbspbrk${EXEEXT} gnuastro-0.5/bootstrapped/tests/test-mbsinit.sh0000755000175000017500000000056613217200024016770 00000000000000#!/bin/sh # Test whether a specific UTF-8 locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ./test-mbsinit${EXEEXT} gnuastro-0.5/bootstrapped/tests/test-mbschr.sh0000755000175000017500000000056513217200024016600 00000000000000#!/bin/sh # Test whether a specific GB18030 locale is installed. : ${LOCALE_ZH_CN=zh_CN.GB18030} if test $LOCALE_ZH_CN = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no chinese GB18030 locale is installed" else echo "Skipping test: no chinese GB18030 locale is supported" fi exit 77 fi LC_ALL=$LOCALE_ZH_CN \ ./test-mbschr${EXEEXT} gnuastro-0.5/bootstrapped/tests/test-mbrtowc-w32-5.sh0000755000175000017500000000012013217200024017535 00000000000000#!/bin/sh # Test a CP936 locale. ./test-mbrtowc-w32${EXEEXT} Chinese_China 936 gnuastro-0.5/bootstrapped/tests/test-mbrtowc-w32-4.sh0000755000175000017500000000012113217200024017535 00000000000000#!/bin/sh # Test a CP950 locale. ./test-mbrtowc-w32${EXEEXT} Chinese_Taiwan 950 gnuastro-0.5/bootstrapped/tests/test-mbrtowc-w32-3.sh0000755000175000017500000000012113217200024017534 00000000000000#!/bin/sh # Test a CP932 locale. ./test-mbrtowc-w32${EXEEXT} Japanese_Japan 932 gnuastro-0.5/bootstrapped/tests/test-mbrtowc-w32-2.sh0000755000175000017500000000013213217200024017535 00000000000000#!/bin/sh # Test a CP1256 locale. ./test-mbrtowc-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 gnuastro-0.5/bootstrapped/tests/test-mbrtowc-w32-1.sh0000755000175000017500000000012213217200024017533 00000000000000#!/bin/sh # Test a CP1252 locale. ./test-mbrtowc-w32${EXEEXT} French_France 1252 gnuastro-0.5/bootstrapped/tests/test-mbrtowc5.sh0000755000175000017500000000022513217200024017055 00000000000000#!/bin/sh # Test whether the POSIX locale has encoding errors. LC_ALL=C \ ./test-mbrtowc${EXEEXT} 5 || exit LC_ALL=POSIX \ ./test-mbrtowc${EXEEXT} 5 gnuastro-0.5/bootstrapped/tests/test-mbrtowc4.sh0000755000175000017500000000060213217200024017053 00000000000000#!/bin/sh # Test whether a specific GB18030 locale is installed. : ${LOCALE_ZH_CN=zh_CN.GB18030} if test $LOCALE_ZH_CN = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no transitional chinese locale is installed" else echo "Skipping test: no transitional chinese locale is supported" fi exit 77 fi LC_ALL=$LOCALE_ZH_CN \ ./test-mbrtowc${EXEEXT} 4 gnuastro-0.5/bootstrapped/tests/test-mbrtowc3.sh0000755000175000017500000000056013217200024017055 00000000000000#!/bin/sh # Test whether a specific EUC-JP locale is installed. : ${LOCALE_JA=ja_JP} if test $LOCALE_JA = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no traditional japanese locale is installed" else echo "Skipping test: no traditional japanese locale is supported" fi exit 77 fi LC_ALL=$LOCALE_JA \ ./test-mbrtowc${EXEEXT} 3 gnuastro-0.5/bootstrapped/tests/test-mbrtowc2.sh0000755000175000017500000000057013217200024017055 00000000000000#!/bin/sh # Test whether a specific UTF-8 locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ./test-mbrtowc${EXEEXT} 2 gnuastro-0.5/bootstrapped/tests/test-mbrtowc1.sh0000755000175000017500000000054513217200024017056 00000000000000#!/bin/sh # Test in an ISO-8859-1 or ISO-8859-15 locale. : ${LOCALE_FR=fr_FR} if test $LOCALE_FR = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no traditional french locale is installed" else echo "Skipping test: no traditional french locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR \ ./test-mbrtowc${EXEEXT} 1 gnuastro-0.5/bootstrapped/tests/malloca.valgrind0000644000175000017500000000025713217200023017143 00000000000000# Suppress a valgrind message about use of uninitialized memory in freea(). # This use is OK because it provides only a speedup. { freea Memcheck:Cond fun:freea } gnuastro-0.5/bootstrapped/tests/malloca.h0000644000175000017500000001067413217200023015570 00000000000000/* Safe automatic memory allocation. Copyright (C) 2003-2007, 2009-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _MALLOCA_H #define _MALLOCA_H #include #include #include #include #include "xalloc-oversized.h" #ifdef __cplusplus extern "C" { #endif /* safe_alloca(N) is equivalent to alloca(N) when it is safe to call alloca(N); otherwise it returns NULL. It either returns N bytes of memory allocated on the stack, that lasts until the function returns, or NULL. Use of safe_alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns. */ #if HAVE_ALLOCA /* The OS usually guarantees only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely allocate anything larger than 4096 bytes. Also care for the possibility of a few compiler-allocated temporary stack slots. This must be a macro, not a function. */ # define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) #else # define safe_alloca(N) ((void) (N), NULL) #endif /* malloca(N) is a safe variant of alloca(N). It allocates N bytes of memory allocated on the stack, that must be freed using freea() before the function returns. Upon failure, it returns NULL. */ #if HAVE_ALLOCA # define malloca(N) \ ((N) < 4032 - sa_increment \ ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \ : mmalloca (N)) #else # define malloca(N) \ mmalloca (N) #endif extern void * mmalloca (size_t n); /* Free a block of memory allocated through malloca(). */ #if HAVE_ALLOCA extern void freea (void *p); #else # define freea free #endif /* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). It allocates an array of N objects, each with S bytes of memory, on the stack. S must be positive and N must be nonnegative. The array must be freed using freea() before the function returns. */ #define nmalloca(n, s) (xalloc_oversized (n, s) ? NULL : malloca ((n) * (s))) #ifdef __cplusplus } #endif /* ------------------- Auxiliary, non-public definitions ------------------- */ /* Determine the alignment of a type at compile time. */ #if defined __GNUC__ || defined __IBM__ALIGNOF__ # define sa_alignof __alignof__ #elif defined __cplusplus template struct sa_alignof_helper { char __slot1; type __slot2; }; # define sa_alignof(type) offsetof (sa_alignof_helper, __slot2) #elif defined __hpux /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof values. */ # define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) #elif defined _AIX /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof values. */ # define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) #else # define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) #endif enum { /* The desired alignment of memory allocations is the maximum alignment among all elementary types. */ sa_alignment_long = sa_alignof (long), sa_alignment_double = sa_alignof (double), #if HAVE_LONG_LONG_INT sa_alignment_longlong = sa_alignof (long long), #endif sa_alignment_longdouble = sa_alignof (long double), sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) #if HAVE_LONG_LONG_INT | (sa_alignment_longlong - 1) #endif | (sa_alignment_longdouble - 1) ) + 1, /* The increment that guarantees room for a magic word must be >= sizeof (int) and a multiple of sa_alignment_max. */ sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max }; #endif /* _MALLOCA_H */ gnuastro-0.5/bootstrapped/tests/test-lstat.h0000644000175000017500000000727113217200024016264 00000000000000/* Test of lstat() function. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Simon Josefsson, 2008; and Eric Blake, 2009. */ /* This file is designed to test both lstat(n,buf) and fstatat(AT_FDCWD,n,buf,AT_SYMLINK_NOFOLLOW). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_lstat_func (int (*func) (char const *, struct stat *), bool print) { struct stat st1; struct stat st2; /* Test for common directories. */ ASSERT (func (".", &st1) == 0); ASSERT (func ("./", &st2) == 0); ASSERT (SAME_INODE (st1, st2)); ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); ASSERT (func ("/", &st1) == 0); ASSERT (func ("///", &st2) == 0); ASSERT (SAME_INODE (st1, st2)); ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); ASSERT (func ("..", &st1) == 0); ASSERT (S_ISDIR (st1.st_mode)); /* Test for error conditions. */ errno = 0; ASSERT (func ("", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch/", &st1) == -1); ASSERT (errno == ENOENT); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (func (BASE "file", &st1) == 0); ASSERT (S_ISREG (st1.st_mode)); errno = 0; ASSERT (func (BASE "file/", &st1) == -1); ASSERT (errno == ENOTDIR); /* Now for some symlink tests, where supported. We set up: link1 -> directory link2 -> file link3 -> dangling link4 -> loop then test behavior both with and without trailing slash. */ if (symlink (".", BASE "link1") != 0) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (symlink (BASE "file", BASE "link2") == 0); ASSERT (symlink (BASE "nosuch", BASE "link3") == 0); ASSERT (symlink (BASE "link4", BASE "link4") == 0); ASSERT (func (BASE "link1", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); ASSERT (func (BASE "link1/", &st1) == 0); ASSERT (stat (BASE "link1", &st2) == 0); ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); ASSERT (SAME_INODE (st1, st2)); ASSERT (func (BASE "link2", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); errno = 0; ASSERT (func (BASE "link2/", &st1) == -1); ASSERT (errno == ENOTDIR); ASSERT (func (BASE "link3", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); errno = 0; ASSERT (func (BASE "link3/", &st1) == -1); ASSERT (errno == ENOENT); ASSERT (func (BASE "link4", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); errno = 0; ASSERT (func (BASE "link4/", &st1) == -1); ASSERT (errno == ELOOP); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link1") == 0); ASSERT (unlink (BASE "link2") == 0); ASSERT (unlink (BASE "link3") == 0); ASSERT (unlink (BASE "link4") == 0); return 0; } gnuastro-0.5/bootstrapped/tests/localtime-buffer.h0000644000175000017500000000200313217200023017363 00000000000000/* Provide access to the last buffer returned by localtime() or gmtime(). Copyright (C) 2001-2003, 2005-2007, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* written by Jim Meyering */ #include #if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME /* The address of the last buffer returned by localtime() or gmtime(). */ extern struct tm *localtime_buffer_addr; #endif gnuastro-0.5/bootstrapped/tests/localename.h0000644000175000017500000001103013217200023016243 00000000000000/* Determine name of the currently selected locale. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_LOCALENAME_H #define _GL_LOCALENAME_H #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's name. It considers both the POSIX notion of locale name (see functions gl_locale_name_thread and gl_locale_name_posix) and the system notion of locale name (see function gl_locale_name_default). CATEGORY is a locale category abbreviation, as defined in , but not LC_ALL. E.g. LC_MESSAGES. CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". Return the locale category's name, canonicalized into XPG syntax language[_territory][.codeset][@modifier] The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name (int category, const char *categoryname); /* Determine the current per-thread locale's name, as specified by uselocale() calls. CATEGORY is a locale category abbreviation, as defined in , but not LC_ALL. E.g. LC_MESSAGES. CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". Return the locale category's name, canonicalized into XPG syntax language[_territory][.codeset][@modifier] or NULL if no locale has been specified for the current thread. The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_thread (int category, const char *categoryname); /* Determine the thread-independent current locale's name, as specified by setlocale() calls or by environment variables. CATEGORY is a locale category abbreviation, as defined in , but not LC_ALL. E.g. LC_MESSAGES. CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". Return the locale category's name, canonicalized into XPG syntax language[_territory][.codeset][@modifier] or NULL if no locale has been specified to setlocale() or by environment variables. The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_posix (int category, const char *categoryname); /* Determine the default locale's name, as specified by environment variables. Return the locale category's name, or NULL if no locale has been specified by environment variables. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_environ (int category, const char *categoryname); /* Determine the default locale's name. This is the current locale's name, if not specified by uselocale() calls, by setlocale() calls, or by environment variables. This locale name is usually determined by systems settings that the user can manipulate through a GUI. Quoting POSIX:2001: "All implementations shall define a locale as the default locale, to be invoked when no environment variables are set, or set to the empty string. This default locale can be the C locale or any other implementation-defined locale. Some implementations may provide facilities for local installation administrators to set the default locale, customizing it for each location. IEEE Std 1003.1-2001 does not require such a facility." The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_default (void) #if !(HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE \ || defined _WIN32 || defined __WIN32__ || defined __CYGWIN__) _GL_ATTRIBUTE_CONST #endif ; #ifdef __cplusplus } #endif #endif /* _GL_LOCALENAME_H */ gnuastro-0.5/bootstrapped/tests/test-isnanl.h0000644000175000017500000001077713217200024016426 00000000000000/* Test of isnanl() substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* Finite values. */ ASSERT (!isnanl (3.141L)); ASSERT (!isnanl (3.141e30L)); ASSERT (!isnanl (3.141e-30L)); ASSERT (!isnanl (-2.718L)); ASSERT (!isnanl (-2.718e30L)); ASSERT (!isnanl (-2.718e-30L)); ASSERT (!isnanl (0.0L)); ASSERT (!isnanl (minus_zerol)); /* Infinite values. */ ASSERT (!isnanl (Infinityl ())); ASSERT (!isnanl (- Infinityl ())); /* Quiet NaN. */ ASSERT (isnanl (NaNl ())); #if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT /* A bit pattern that is different from a Quiet NaN. With a bit of luck, it's a Signalling NaN. */ { #if defined __powerpc__ && LDBL_MANT_DIG == 106 /* This is PowerPC "double double", a pair of two doubles. Inf and Nan are represented as the corresponding 64-bit IEEE values in the first double; the second is ignored. Manipulate only the first double. */ #undef NWORDS #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) #endif memory_long_double m; m.value = NaNl (); # if LDBL_EXPBIT0_BIT > 0 m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); # else m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); # endif m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; ASSERT (isnanl (m.value)); } #endif #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; ASSERT (isnanl (x.value)); } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; ASSERT (isnanl (x.value)); } /* isnanl should return something for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } #endif return 0; } gnuastro-0.5/bootstrapped/tests/isnanl-nolibm.h0000644000175000017500000000231013217200023016706 00000000000000/* Test for NaN that does not need libm. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #if HAVE_ISNANL_IN_LIBC /* Get declaration of isnan macro or (older) isnanl function. */ # include # if __GNUC__ >= 4 /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) # elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) # endif #else /* Test whether X is a NaN. */ # undef isnanl # define isnanl rpl_isnanl extern int isnanl (long double x); #endif gnuastro-0.5/bootstrapped/tests/test-isnanf.h0000644000175000017500000000410113217200024016400 00000000000000/* Test of isnanf() substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* Finite values. */ ASSERT (!isnanf (3.141f)); ASSERT (!isnanf (3.141e30f)); ASSERT (!isnanf (3.141e-30f)); ASSERT (!isnanf (-2.718f)); ASSERT (!isnanf (-2.718e30f)); ASSERT (!isnanf (-2.718e-30f)); ASSERT (!isnanf (0.0f)); ASSERT (!isnanf (minus_zerof)); /* Infinite values. */ ASSERT (!isnanf (Infinityf ())); ASSERT (!isnanf (- Infinityf ())); /* Quiet NaN. */ ASSERT (isnanf (NaNf ())); #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* Signalling NaN. */ { #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; memory_float m; m.value = NaNf (); # if FLT_EXPBIT0_BIT > 0 m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); # else m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); # endif if (FLT_EXPBIT0_WORD < NWORDS / 2) m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; else m.word[0] |= (unsigned int) 1; ASSERT (isnanf (m.value)); } #endif return 0; } gnuastro-0.5/bootstrapped/tests/isnanf-nolibm.h0000644000175000017500000000270213217200023016705 00000000000000/* Test for NaN that does not need libm. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #if HAVE_ISNANF_IN_LIBC /* Get declaration of isnan macro or (older) isnanf function. */ # include # if __GNUC__ >= 4 /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanf # define isnanf(x) __builtin_isnanf ((float)(x)) # elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) # else /* Get declaration of isnanf(), if not declared in . */ # if defined __sgi /* We can't include , because it conflicts with our definition of isnand. Therefore declare isnanf separately. */ extern int isnanf (float x); # endif # endif #else /* Test whether X is a NaN. */ # undef isnanf # define isnanf rpl_isnanf extern int isnanf (float x); #endif gnuastro-0.5/bootstrapped/tests/nan.h0000644000175000017500000000506313217200023014730 00000000000000/* Macros for not-a-number. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* IBM z/OS supports both hexadecimal and IEEE floating-point formats. The former does not support NaN and its isnan() implementation returns zero for all values. */ #if defined __MVS__ && defined __IBMC__ && !defined __BFP__ # error "NaN is not supported with IBM's hexadecimal floating-point format; please re-compile with -qfloat=ieee" #endif /* NaNf () returns a 'float' not-a-number. */ /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if (defined __DECC || defined _MSC_VER \ || (defined __MVS__ && defined __IBMC__) \ || defined __PGI) static float NaNf () { static float zero = 0.0f; return zero / zero; } #else # define NaNf() (0.0f / 0.0f) #endif /* NaNd () returns a 'double' not-a-number. */ /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if (defined __DECC || defined _MSC_VER \ || (defined __MVS__ && defined __IBMC__) \ || defined __PGI) static double NaNd () { static double zero = 0.0; return zero / zero; } #else # define NaNd() (0.0 / 0.0) #endif /* NaNl () returns a 'long double' not-a-number. */ /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. The Microsoft MSVC 9 compiler chokes on the expression 0.0L / 0.0L. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #elif defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static long double NaNl () { static long double zero = 0.0L; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif gnuastro-0.5/bootstrapped/tests/infinity.h0000644000175000017500000000363713217200022016011 00000000000000/* Macros for infinity. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Infinityf () returns a 'float' +Infinity. */ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static float Infinityf () { static float zero = 0.0f; return 1.0f / zero; } #else # define Infinityf() (1.0f / 0.0f) #endif /* Infinityd () returns a 'double' +Infinity. */ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static double Infinityd () { static double zero = 0.0; return 1.0 / zero; } #else # define Infinityd() (1.0 / 0.0) #endif /* Infinityl () returns a 'long double' +Infinity. */ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static long double Infinityl () { static long double zero = 0.0L; return 1.0L / zero; } #else # define Infinityl() (1.0L / 0.0L) #endif gnuastro-0.5/bootstrapped/tests/minus-zero.h0000644000175000017500000000452613217200023016267 00000000000000/* Macros for floating-point negative zero. Copyright (C) 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Keep in sync with m4/minus-zero.m4! */ #include /* minus_zerof represents the value -0.0f. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. ICC 10.0 has a bug when optimizing the expression -zero. The expression -FLT_MIN * FLT_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static float compute_minus_zerof (void) { return -FLT_MIN * FLT_MIN; } # define minus_zerof compute_minus_zerof () #else float minus_zerof = -0.0f; #endif /* minus_zerod represents the value -0.0. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -DBL_MIN * DBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static double compute_minus_zerod (void) { return -DBL_MIN * DBL_MIN; } # define minus_zerod compute_minus_zerod () #else double minus_zerod = -0.0; #endif /* minus_zerol represents the value -0.0L. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. IRIX cc can't put -0.0L into .data, but can compute at runtime. ICC 10.0 has a bug when optimizing the expression -zero. The expression -LDBL_MIN * LDBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static long double compute_minus_zerol (void) { return -LDBL_MIN * LDBL_MIN; } # define minus_zerol compute_minus_zerol () #else long double minus_zerol = -0.0L; #endif gnuastro-0.5/bootstrapped/tests/test-isnand.h0000644000175000017500000000402513217200024016403 00000000000000/* Test of isnand() substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "macros.h" int main () { /* Finite values. */ ASSERT (!isnand (3.141)); ASSERT (!isnand (3.141e30)); ASSERT (!isnand (3.141e-30)); ASSERT (!isnand (-2.718)); ASSERT (!isnand (-2.718e30)); ASSERT (!isnand (-2.718e-30)); ASSERT (!isnand (0.0)); ASSERT (!isnand (minus_zerod)); /* Infinite values. */ ASSERT (!isnand (Infinityd ())); ASSERT (!isnand (- Infinityd ())); /* Quiet NaN. */ ASSERT (isnand (NaNd ())); #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT /* Signalling NaN. */ { #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; memory_double m; m.value = NaNd (); # if DBL_EXPBIT0_BIT > 0 m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); # else m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); # endif m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] |= (unsigned int) 1 << DBL_EXPBIT0_BIT; ASSERT (isnand (m.value)); } #endif return 0; } gnuastro-0.5/bootstrapped/tests/isnand-nolibm.h0000644000175000017500000000221713217200023016704 00000000000000/* Test for NaN that does not need libm. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #if HAVE_ISNAND_IN_LIBC /* Get declaration of isnan macro. */ # include # if __GNUC__ >= 4 /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) # else # undef isnand # define isnand(x) isnan ((double)(x)) # endif #else /* Test whether X is a NaN. */ # undef isnand # define isnand rpl_isnand extern int isnand (double x); #endif gnuastro-0.5/bootstrapped/tests/float+.h0000644000175000017500000001274613217200022015341 00000000000000/* Supplemental information about the floating-point formats. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2007. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _FLOATPLUS_H #define _FLOATPLUS_H #include #include /* Number of bits in the mantissa of a floating-point number, including the "hidden bit". */ #if FLT_RADIX == 2 # define FLT_MANT_BIT FLT_MANT_DIG # define DBL_MANT_BIT DBL_MANT_DIG # define LDBL_MANT_BIT LDBL_MANT_DIG #elif FLT_RADIX == 4 # define FLT_MANT_BIT (FLT_MANT_DIG * 2) # define DBL_MANT_BIT (DBL_MANT_DIG * 2) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) #elif FLT_RADIX == 16 # define FLT_MANT_BIT (FLT_MANT_DIG * 4) # define DBL_MANT_BIT (DBL_MANT_DIG * 4) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) #endif /* Bit mask that can be used to mask the exponent, as an unsigned number. */ #define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) #define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) #define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) /* Number of bits used for the exponent of a floating-point number, including the exponent's sign. */ #define FLT_EXP_BIT \ (FLT_EXP_MASK < 0x100 ? 8 : \ FLT_EXP_MASK < 0x200 ? 9 : \ FLT_EXP_MASK < 0x400 ? 10 : \ FLT_EXP_MASK < 0x800 ? 11 : \ FLT_EXP_MASK < 0x1000 ? 12 : \ FLT_EXP_MASK < 0x2000 ? 13 : \ FLT_EXP_MASK < 0x4000 ? 14 : \ FLT_EXP_MASK < 0x8000 ? 15 : \ FLT_EXP_MASK < 0x10000 ? 16 : \ FLT_EXP_MASK < 0x20000 ? 17 : \ FLT_EXP_MASK < 0x40000 ? 18 : \ FLT_EXP_MASK < 0x80000 ? 19 : \ FLT_EXP_MASK < 0x100000 ? 20 : \ FLT_EXP_MASK < 0x200000 ? 21 : \ FLT_EXP_MASK < 0x400000 ? 22 : \ FLT_EXP_MASK < 0x800000 ? 23 : \ FLT_EXP_MASK < 0x1000000 ? 24 : \ FLT_EXP_MASK < 0x2000000 ? 25 : \ FLT_EXP_MASK < 0x4000000 ? 26 : \ FLT_EXP_MASK < 0x8000000 ? 27 : \ FLT_EXP_MASK < 0x10000000 ? 28 : \ FLT_EXP_MASK < 0x20000000 ? 29 : \ FLT_EXP_MASK < 0x40000000 ? 30 : \ FLT_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define DBL_EXP_BIT \ (DBL_EXP_MASK < 0x100 ? 8 : \ DBL_EXP_MASK < 0x200 ? 9 : \ DBL_EXP_MASK < 0x400 ? 10 : \ DBL_EXP_MASK < 0x800 ? 11 : \ DBL_EXP_MASK < 0x1000 ? 12 : \ DBL_EXP_MASK < 0x2000 ? 13 : \ DBL_EXP_MASK < 0x4000 ? 14 : \ DBL_EXP_MASK < 0x8000 ? 15 : \ DBL_EXP_MASK < 0x10000 ? 16 : \ DBL_EXP_MASK < 0x20000 ? 17 : \ DBL_EXP_MASK < 0x40000 ? 18 : \ DBL_EXP_MASK < 0x80000 ? 19 : \ DBL_EXP_MASK < 0x100000 ? 20 : \ DBL_EXP_MASK < 0x200000 ? 21 : \ DBL_EXP_MASK < 0x400000 ? 22 : \ DBL_EXP_MASK < 0x800000 ? 23 : \ DBL_EXP_MASK < 0x1000000 ? 24 : \ DBL_EXP_MASK < 0x2000000 ? 25 : \ DBL_EXP_MASK < 0x4000000 ? 26 : \ DBL_EXP_MASK < 0x8000000 ? 27 : \ DBL_EXP_MASK < 0x10000000 ? 28 : \ DBL_EXP_MASK < 0x20000000 ? 29 : \ DBL_EXP_MASK < 0x40000000 ? 30 : \ DBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define LDBL_EXP_BIT \ (LDBL_EXP_MASK < 0x100 ? 8 : \ LDBL_EXP_MASK < 0x200 ? 9 : \ LDBL_EXP_MASK < 0x400 ? 10 : \ LDBL_EXP_MASK < 0x800 ? 11 : \ LDBL_EXP_MASK < 0x1000 ? 12 : \ LDBL_EXP_MASK < 0x2000 ? 13 : \ LDBL_EXP_MASK < 0x4000 ? 14 : \ LDBL_EXP_MASK < 0x8000 ? 15 : \ LDBL_EXP_MASK < 0x10000 ? 16 : \ LDBL_EXP_MASK < 0x20000 ? 17 : \ LDBL_EXP_MASK < 0x40000 ? 18 : \ LDBL_EXP_MASK < 0x80000 ? 19 : \ LDBL_EXP_MASK < 0x100000 ? 20 : \ LDBL_EXP_MASK < 0x200000 ? 21 : \ LDBL_EXP_MASK < 0x400000 ? 22 : \ LDBL_EXP_MASK < 0x800000 ? 23 : \ LDBL_EXP_MASK < 0x1000000 ? 24 : \ LDBL_EXP_MASK < 0x2000000 ? 25 : \ LDBL_EXP_MASK < 0x4000000 ? 26 : \ LDBL_EXP_MASK < 0x8000000 ? 27 : \ LDBL_EXP_MASK < 0x10000000 ? 28 : \ LDBL_EXP_MASK < 0x20000000 ? 29 : \ LDBL_EXP_MASK < 0x40000000 ? 30 : \ LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) /* Number of bits used for a floating-point number: the mantissa (not counting the "hidden bit", since it may or may not be explicit), the exponent, and the sign. */ #define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) #define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) #define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) /* Number of bytes used for a floating-point number. This can be smaller than the 'sizeof'. For example, on i386 systems, 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but sizeof (long double) = 12 or = 16. */ #define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) /* Verify that SIZEOF_FLT <= sizeof (float) etc. */ typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; #endif /* _FLOATPLUS_H */ gnuastro-0.5/bootstrapped/tests/ignore-value.h0000644000175000017500000000423513217200022016550 00000000000000/* ignore a function return without a compiler warning. -*- coding: utf-8 -*- Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Jim Meyering, Eric Blake and Pádraig Brady. */ /* Use "ignore_value" to avoid a warning when using a function declared with gcc's warn_unused_result attribute, but for which you really do want to ignore the result. Traditionally, people have used a "(void)" cast to indicate that a function's return value is deliberately unused. However, if the function is declared with __attribute__((warn_unused_result)), gcc issues a warning even with the cast. Caution: most of the time, you really should heed gcc's warning, and check the return value. However, in those exceptional cases in which you're sure you know what you're doing, use this function. For the record, here's one of the ignorable warnings: "copy.c:233: warning: ignoring return value of 'fchown', declared with attribute warn_unused_result". */ #ifndef _GL_IGNORE_VALUE_H #define _GL_IGNORE_VALUE_H /* Normally casting an expression to void discards its value, but GCC versions 3.4 and newer have __attribute__ ((__warn_unused_result__)) which may cause unwanted diagnostics in that case. Use __typeof__ and __extension__ to work around the problem, if the workaround is known to be needed. */ #if 3 < __GNUC__ + (4 <= __GNUC_MINOR__) # define ignore_value(x) \ (__extension__ ({ __typeof__ (x) __x = (x); (void) __x; })) #else # define ignore_value(x) ((void) (x)) #endif #endif gnuastro-0.5/bootstrapped/tests/test-getopt_long.h0000644000175000017500000017550613217200023017464 00000000000000/* Test of command line argument processing. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2009. */ static int a_seen; static int b_seen; static int q_seen; static const struct option long_options_required[] = { { "alpha", no_argument, NULL, 'a' }, { "beta", no_argument, &b_seen, 1 }, { "prune", required_argument, NULL, 'p' }, { "quetsche", required_argument, &q_seen, 1 }, { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; static const struct option long_options_optional[] = { { "alpha", no_argument, NULL, 'a' }, { "beta", no_argument, &b_seen, 1 }, { "prune", optional_argument, NULL, 'p' }, { "quetsche", optional_argument, &q_seen, 1 }, { NULL, 0, NULL, 0 } }; static void getopt_long_loop (int argc, const char **argv, const char *options, const struct option *long_options, const char **p_value, const char **q_value, int *non_options_count, const char **non_options, int *unrecognized) { int option_index = -1; int c; opterr = 0; q_seen = 0; while ((c = getopt_long (argc, (char **) argv, options, long_options, &option_index)) != -1) { switch (c) { case 0: /* An option with a non-NULL flag pointer was processed. */ if (q_seen) *q_value = optarg; break; case 'a': a_seen++; break; case 'b': b_seen = 1; break; case 'p': *p_value = optarg; break; case 'q': *q_value = optarg; break; case '\1': /* Must only happen with option '-' at the beginning. */ ASSERT (options[0] == '-'); non_options[(*non_options_count)++] = optarg; break; case ':': /* Must only happen with option ':' at the beginning. */ ASSERT (options[0] == ':' || ((options[0] == '-' || options[0] == '+') && options[1] == ':')); FALLTHROUGH; case '?': *unrecognized = optopt; break; default: *unrecognized = c; break; } } } /* Reduce casting, so we can use string literals elsewhere. getopt_long takes an array of char*, but luckily does not modify those elements, so we can pass const char*. */ static int do_getopt_long (int argc, const char **argv, const char *shortopts, const struct option *longopts, int *longind) { return getopt_long (argc, (char **) argv, shortopts, longopts, longind); } static void test_getopt_long (void) { int start; /* Test disambiguation of options. */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xt"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtr"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtra"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1001); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtre"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtrem"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtreme"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1002); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtremel"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1003); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtremely"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1003); } /* Check that -W handles unknown options. */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 'W'); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-Wunknown"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); /* glibc and BSD behave differently here, but for now, we allow both behaviors since W support is not frequently used. */ if (c == '?') { ASSERT (optopt == 0); ASSERT (optarg == NULL); } else { ASSERT (c == 'W'); ASSERT (strcmp (optarg, "unknown") == 0); } } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "unknown"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); /* glibc and BSD behave differently here, but for now, we allow both behaviors since W support is not frequently used. */ if (c == '?') { ASSERT (optopt == 0); ASSERT (optarg == NULL); } else { ASSERT (c == 'W'); ASSERT (strcmp (optarg, "unknown") == 0); } } /* Test that 'W' does not dump core: https://sourceware.org/bugzilla/show_bug.cgi?id=12922 */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "dummy"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", NULL, &option_index); ASSERT (c == 'W'); ASSERT (optind == 2); } /* Test processing of boolean short options. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ba"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } /* Test processing of boolean long options. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--alpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--beta"; argv[argc++] = "--alpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--alpha"; argv[argc++] = "--beta"; argv[argc++] = "--alpha"; argv[argc++] = "--beta"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of boolean long options via -W. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Walpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abW;", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "beta"; argv[argc++] = "-W"; argv[argc++] = "alpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "aW;b", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Walpha"; argv[argc++] = "-Wbeta"; argv[argc++] = "-Walpha"; argv[argc++] = "-Wbeta"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of short options with arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-q"; argv[argc++] = "baz"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of long options with arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "--q"; argv[argc++] = "baz"; argv[argc++] = "--p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of long options with arguments via -W. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:W;", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:W;q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-Wq"; argv[argc++] = "baz"; argv[argc++] = "-W"; argv[argc++] = "p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 6); } /* Test processing of short options with optional arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } /* Test processing of long options with optional arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p="; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && *p_value == '\0'); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } /* Test processing of long options with optional arguments via -W. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::W;", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::W;", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp="; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && *p_value == '\0'); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "p="; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && *p_value == '\0'); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;abp::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); /* ASSERT (p_value == NULL); */ ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } /* Check that invalid options are recognized. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); } /* Check that unexpected arguments are recognized. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "--a="; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'a'); ASSERT (optind == 4); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "--b="; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); /* When flag is non-zero, glibc sets optopt anyway, but BSD leaves optopt unchanged. */ ASSERT (unrecognized == 1 || unrecognized == 0); ASSERT (optind == 4); } /* Check that by default, non-options arguments are moved to the end. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } /* Check that '--' ends the argument processing. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[20]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "--") == 0); ASSERT (strcmp (argv[5], "donald") == 0); ASSERT (strcmp (argv[6], "duck") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Check that the '-' flag causes non-options to be returned in order. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "-abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 3); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); } /* Check that '--' ends the argument processing. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[20]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "-abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); if (non_options_count == 2) { /* glibc behaviour. */ ASSERT (non_options_count == 2); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); } else { /* Another valid behaviour. */ ASSERT (non_options_count == 7); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "-b") == 0); ASSERT (strcmp (non_options[3], "foo") == 0); ASSERT (strcmp (non_options[4], "-q") == 0); ASSERT (strcmp (non_options[5], "johnny") == 0); ASSERT (strcmp (non_options[6], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 12); } } /* Check that the '-' flag has to come first. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:-", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } /* Check that the '+' flag causes the first non-option to terminate the loop. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "+abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-+"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "+abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == '+'); ASSERT (optind == 2); } /* Check that '--' ends the argument processing. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[20]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "+abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); } /* Check that the '+' flag has to come first. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:+", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } } /* Test behavior of getopt_long when POSIXLY_CORRECT is set in the environment. Options with optional arguments should not change behavior just because of an environment variable. https://lists.gnu.org/r/bug-m4/2006-09/msg00028.html */ static void test_getopt_long_posix (void) { int start; /* Check that POSIXLY_CORRECT stops parsing the same as leading '+'. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); } /* Check that POSIXLY_CORRECT doesn't change optional arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } /* Check that leading - still sees options after non-options. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-a"; argv[argc++] = "billy"; argv[argc++] = "-b"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "-ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 1); ASSERT (strcmp (non_options[0], "billy") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } } /* Reduce casting, so we can use string literals elsewhere. getopt_long_only takes an array of char*, but luckily does not modify those elements, so we can pass const char*. */ static int do_getopt_long_only (int argc, const char **argv, const char *shortopts, const struct option *longopts, int *longind) { return getopt_long_only (argc, (char **) argv, shortopts, longopts, longind); } static void test_getopt_long_only (void) { /* Test disambiguation of options. */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == 'x'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc] = NULL; optind = 1; opterr = 0; b_seen = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == 'b'); ASSERT (b_seen == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--b"; argv[argc] = NULL; optind = 1; opterr = 0; b_seen = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == 0); ASSERT (b_seen == 1); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xt"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xt"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtra"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1001); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtreme"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx:", long_options_required, &option_index); ASSERT (c == 1002); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtremel"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); /* glibc getopt_long_only is intentionally different from getopt_long when handling a prefix that is common to two spellings, when both spellings have the same option directives. BSD getopt_long_only treats both cases the same. */ ASSERT (c == 1003 || c == '?'); ASSERT (optind == 2); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtremel"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx::", long_options_required, &option_index); /* glibc getopt_long_only is intentionally different from getopt_long when handling a prefix that is common to two spellings, when both spellings have the same option directives. BSD getopt_long_only treats both cases the same. */ ASSERT (c == 1003 || c == '?'); ASSERT (optind == 2); ASSERT (optarg == NULL); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtras"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx::", long_options_required, &option_index); ASSERT (c == 'x'); ASSERT (strcmp (optarg, "tras") == 0); } } gnuastro-0.5/bootstrapped/tests/test-getopt.h0000644000175000017500000012565513217200023016445 00000000000000/* Test of command line argument processing. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2009. */ #include /* The glibc/gnulib implementation of getopt supports setting optind = 0, but not all other implementations do. This matters for getopt. But for getopt_long, we require GNU compatibility. */ #if defined __GETOPT_PREFIX || (__GLIBC__ >= 2 && !defined __UCLIBC__) # define OPTIND_MIN 0 #elif HAVE_DECL_OPTRESET # define OPTIND_MIN (optreset = 1) #else # define OPTIND_MIN 1 #endif static void getopt_loop (int argc, const char **argv, const char *options, int *a_seen, int *b_seen, const char **p_value, const char **q_value, int *non_options_count, const char **non_options, int *unrecognized, bool *message_issued) { int c; int pos = ftell (stderr); while ((c = getopt (argc, (char **) argv, options)) != -1) { switch (c) { case 'a': (*a_seen)++; break; case 'b': (*b_seen)++; break; case 'p': *p_value = optarg; break; case 'q': *q_value = optarg; break; case '\1': /* Must only happen with option '-' at the beginning. */ ASSERT (options[0] == '-'); non_options[(*non_options_count)++] = optarg; break; case ':': /* Must only happen with option ':' at the beginning. */ ASSERT (options[0] == ':' || ((options[0] == '-' || options[0] == '+') && options[1] == ':')); FALLTHROUGH; case '?': *unrecognized = optopt; break; default: *unrecognized = c; break; } } *message_issued = pos < ftell (stderr); } static void test_getopt (void) { int start; bool posixly = !!getenv ("POSIXLY_CORRECT"); /* See comment in getopt.c: glibc gets a LSB-compliant getopt. Standalone applications get a POSIX-compliant getopt. */ #if defined __GETOPT_PREFIX || !(__GLIBC__ >= 2 || defined __MINGW32__) /* Using getopt from gnulib or from a non-glibc system. */ posixly = true; #endif /* Test processing of boolean options. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ba"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } /* Test processing of options with arguments. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-q"; argv[argc++] = "baz"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); ASSERT (!output); } #if GNULIB_TEST_GETOPT_GNU /* Test processing of options with optional arguments. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p::q::", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p::q::", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp::q::", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } #endif /* GNULIB_TEST_GETOPT_GNU */ /* Check that invalid options are recognized; and that both opterr and leading ':' can silence output. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 42; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); ASSERT (output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 0; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, ":abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 42; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); ASSERT (output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 0; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, ":abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); ASSERT (!output); } /* Check for missing argument behavior. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ap"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ap"; argv[argc] = NULL; optind = start; opterr = 0; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ap"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, ":abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (!output); } /* Check that by default, non-options arguments are moved to the end. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); ASSERT (!output); } } /* Check that '--' ends the argument processing. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[20]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "--") == 0); ASSERT (strcmp (argv[5], "donald") == 0); ASSERT (strcmp (argv[6], "duck") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); ASSERT (!output); } } #if GNULIB_TEST_GETOPT_GNU /* Check that the '-' flag causes non-options to be returned in order. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "-abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 3); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); ASSERT (!output); } /* Check that '--' ends the argument processing. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[20]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "-abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (!output); if (non_options_count == 2) { /* glibc behaviour. */ ASSERT (non_options_count == 2); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); } else { /* Another valid behaviour. */ ASSERT (non_options_count == 7); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "-b") == 0); ASSERT (strcmp (non_options[3], "foo") == 0); ASSERT (strcmp (non_options[4], "-q") == 0); ASSERT (strcmp (non_options[5], "johnny") == 0); ASSERT (strcmp (non_options[6], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 12); } } /* Check that the '-' flag has to come first. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:-", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); ASSERT (!output); } } /* Check that the '+' flag causes the first non-option to terminate the loop. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "+abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-+"; argv[argc] = NULL; optind = start; getopt_loop (argc, argv, "+abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == '+'); ASSERT (optind == 2); ASSERT (output); } /* Check that '--' ends the argument processing. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[20]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "+abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } #endif /* GNULIB_TEST_GETOPT_GNU */ /* Check that the '+' flag has to come first. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:+", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); ASSERT (!output); } } #if GNULIB_TEST_GETOPT_GNU /* If GNU extensions are supported, require compliance with POSIX interpretation on leading '+' behavior. http://austingroupbugs.net/view.php?id=191 */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "+:abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc] = NULL; optind = start; getopt_loop (argc, argv, "+:abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc++] = "-p"; argv[argc] = NULL; optind = start; getopt_loop (argc, argv, "+:abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 3); ASSERT (!output); } /* Check that 'W' does not dump core: https://sourceware.org/bugzilla/show_bug.cgi?id=12922 Technically, POSIX says the presence of ';' in the opt-string gives unspecified behavior, so we only test this when GNU compliance is desired. */ for (start = OPTIND_MIN; start <= 1; start++) { int argc = 0; const char *argv[10]; int pos = ftell (stderr); argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "dummy"; argv[argc] = NULL; optind = start; opterr = 1; ASSERT (getopt (argc, (char **) argv, "W;") == 'W'); ASSERT (ftell (stderr) == pos); ASSERT (optind == 2); } #endif /* GNULIB_TEST_GETOPT_GNU */ } gnuastro-0.5/bootstrapped/tests/test-getopt-main.h0000644000175000017500000000411413217200023017351 00000000000000/* Test of command line argument processing. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2009. */ #include "signature.h" SIGNATURE_CHECK (getopt, int, (int, char * const[], char const *)); #include #include #include #include /* This test intentionally remaps stderr. So, we arrange to have fd 10 (outside the range of interesting fd's during the test) set up to duplicate the original stderr. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; #include "test-getopt.h" #if TEST_GETOPT_GNU # include "test-getopt_long.h" #endif int main (void) { /* This test validates that stderr is used correctly, so move the original into fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; ASSERT (freopen (TEST_GETOPT_TMP_NAME, "w", stderr) == stderr); /* These default values are required by POSIX. */ ASSERT (optind == 1); ASSERT (opterr != 0); setenv ("POSIXLY_CORRECT", "1", 1); test_getopt (); #if TEST_GETOPT_GNU test_getopt_long_posix (); #endif unsetenv ("POSIXLY_CORRECT"); test_getopt (); #if TEST_GETOPT_GNU test_getopt_long (); test_getopt_long_only (); #endif ASSERT (fclose (stderr) == 0); ASSERT (remove (TEST_GETOPT_TMP_NAME) == 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-ftruncate.sh0000755000175000017500000000010613217200023017303 00000000000000#!/bin/sh exec ./test-ftruncate${EXEEXT} "$srcdir/test-ftruncate.sh" gnuastro-0.5/bootstrapped/tests/stat-w32.h0000644000175000017500000000306113217200023015534 00000000000000/* Core of implementation of fstat and stat for native Windows. Copyright (C) 2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _STAT_W32_H #define _STAT_W32_H 1 /* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ #if _GL_WINDOWS_STAT_TIMESPEC extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft); #else extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft); #endif /* Fill *BUF with information about the file designated by H. PATH is the file name, if known, otherwise NULL. Return 0 if successful, or -1 with errno set upon failure. */ extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf); /* Bitmasks for st_mode. */ #define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6)) #define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6)) #define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6)) #endif /* _STAT_W32_H */ gnuastro-0.5/bootstrapped/tests/fpucw.h0000644000175000017500000001120013217200022015265 00000000000000/* Manipulating the FPU control word. -*- coding: utf-8 -*- Copyright (C) 2007-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2007. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _FPUCW_H #define _FPUCW_H /* The i386 floating point hardware (the 387 compatible FPU, not the modern SSE/SSE2 hardware) has a controllable rounding precision. It is specified through the 'PC' bits in the FPU control word ('fctrl' register). (See the GNU libc i386 header for details.) On some platforms, such as Linux or Solaris, the default precision setting is set to "extended precision". This means that 'long double' instructions operate correctly, but 'double' computations often produce slightly different results as on strictly IEEE 754 conforming systems. On some platforms, such as NetBSD, the default precision is set to "double precision". This means that 'long double' instructions will operate only as 'double', i.e. lead to wrong results. Similarly on FreeBSD 6.4, at least for the division of 'long double' numbers. The FPU control word is under control of the application, i.e. it is not required to be set either way by the ABI. (In fact, the i386 ABI https://www.linux-mips.org/pub/linux/mips/doc/ABI/abi386-4.pdf page 3-12 = page 38 is not clear about it. But in any case, gcc treats the control word like a "preserved" register: it emits code that assumes that the control word is preserved across calls, and it restores the control word at the end of functions that modify it.) See Vincent Lefèvre's page https://www.vinc17.net/research/extended.en.html for a good explanation. See http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html for some argumentation which setting should be the default. */ /* This header file provides the following facilities: fpucw_t integral type holding the value of 'fctrl' FPU_PC_MASK bit mask denoting the precision control FPU_PC_DOUBLE precision control for 53 bits mantissa FPU_PC_EXTENDED precision control for 64 bits mantissa GET_FPUCW () yields the current FPU control word SET_FPUCW (word) sets the FPU control word DECL_LONG_DOUBLE_ROUNDING variable declaration for BEGIN/END_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING () starts a sequence of instructions with 'long double' safe operation precision END_LONG_DOUBLE_ROUNDING () ends a sequence of instructions with 'long double' safe operation precision */ /* Inline assembler like this works only with GNU C. */ #if (defined __i386__ || defined __x86_64__) && defined __GNUC__ typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */ # define FPU_PC_MASK 0x0300 # define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ # define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ # define GET_FPUCW() \ ({ fpucw_t _cw; \ __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ _cw; \ }) # define SET_FPUCW(word) \ (void)({ fpucw_t _ncw = (word); \ __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ }) # define DECL_LONG_DOUBLE_ROUNDING \ fpucw_t oldcw; # define BEGIN_LONG_DOUBLE_ROUNDING() \ (void)(oldcw = GET_FPUCW (), \ SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED)) # define END_LONG_DOUBLE_ROUNDING() \ SET_FPUCW (oldcw) #else typedef unsigned int fpucw_t; # define FPU_PC_MASK 0 # define FPU_PC_DOUBLE 0 # define FPU_PC_EXTENDED 0 # define GET_FPUCW() 0 # define SET_FPUCW(word) (void)(word) # define DECL_LONG_DOUBLE_ROUNDING # define BEGIN_LONG_DOUBLE_ROUNDING() # define END_LONG_DOUBLE_ROUNDING() #endif #endif /* _FPUCW_H */ gnuastro-0.5/bootstrapped/tests/flexmember.h0000644000175000017500000000345113217200022016300 00000000000000/* Sizes of structs with flexible array members. Copyright 2016-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . Written by Paul Eggert. */ #include /* Nonzero multiple of alignment of TYPE, suitable for FLEXSIZEOF below. On older platforms without _Alignof, use a pessimistic bound that is safe in practice even if FLEXIBLE_ARRAY_MEMBER is 1. On newer platforms, use _Alignof to get a tighter bound. */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 # define FLEXALIGNOF(type) (sizeof (type) & ~ (sizeof (type) - 1)) #else # define FLEXALIGNOF(type) _Alignof (type) #endif /* Upper bound on the size of a struct of type TYPE with a flexible array member named MEMBER that is followed by N bytes of other data. This is not simply sizeof (TYPE) + N, since it may require alignment on unusually picky C11 platforms, and FLEXIBLE_ARRAY_MEMBER may be 1 on pre-C11 platforms. Yield a value less than N if and only if arithmetic overflow occurs. */ #define FLEXSIZEOF(type, member, n) \ ((offsetof (type, member) + FLEXALIGNOF (type) - 1 + (n)) \ & ~ (FLEXALIGNOF (type) - 1)) gnuastro-0.5/bootstrapped/tests/filename.h0000644000175000017500000000365313217200022015736 00000000000000/* Basic filename support macros. Copyright (C) 2001-2004, 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _FILENAME_H #define _FILENAME_H #ifdef __cplusplus extern "C" { #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) # define IS_PATH_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) # define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) # define FILE_SYSTEM_PREFIX_LEN(P) 0 #endif #ifdef __cplusplus } #endif #endif /* _FILENAME_H */ gnuastro-0.5/bootstrapped/tests/fd-hook.h0000644000175000017500000001134313217200022015500 00000000000000/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef FD_HOOK_H #define FD_HOOK_H #ifdef __cplusplus extern "C" { #endif /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* Type of function that closes FD. */ typedef int (*gl_close_fn) (int fd); /* Type of function that applies a control request to FD. */ typedef int (*gl_ioctl_fn) (int fd, int request, void *arg); /* An element of the list of file descriptor hooks. In CLOS (Common Lisp Object System) speak, it consists of an "around" method for the close() function and an "around" method for the ioctl() function. The fields of this structure are considered private. */ struct fd_hook { /* Doubly linked list. */ struct fd_hook *private_next; struct fd_hook *private_prev; /* Function that treats the types of FD that it knows about and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */ int (*private_close_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Function that treats the types of FD that it knows about and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a fallback. */ int (*private_ioctl_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); }; /* This type of function closes FD, applying special knowledge for the FD types it knows about, and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for close(). */ typedef int (*close_hook_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute all close hooks, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_all_close_hooks (gl_close_fn primary, int fd); /* This type of function applies a control request to FD, applying special knowledge for the FD types it knows about, and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for ioctl(). */ typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute all ioctl hooks, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg); /* Add a function pair to the list of file descriptor hooks. CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change. The LINK variable points to a piece of memory which is guaranteed to be accessible until the corresponding call to unregister_fd_hook. */ extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link); /* Removes a hook from the list of file descriptor hooks. */ extern void unregister_fd_hook (struct fd_hook *link); #endif #ifdef __cplusplus } #endif #endif /* FD_HOOK_H */ gnuastro-0.5/bootstrapped/tests/fcntl.in.h0000644000175000017500000002376613217200022015700 00000000000000/* Like , but with non-working flags defined to 0. Copyright (C) 2006-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* written by Paul Eggert */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_fcntl_h /* Special invocation convention. */ /* Needed before . May also define off_t to a 64-bit type on native Windows. */ #include /* On some systems other than glibc, is a prerequisite of . On glibc systems, we would like to avoid namespace pollution. But on glibc systems, includes inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include #endif #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_FCNTL_H /* Needed before . May also define off_t to a 64-bit type on native Windows. */ #include /* On some systems other than glibc, is a prerequisite of . On glibc systems, we would like to avoid namespace pollution. But on glibc systems, includes inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include #endif /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ #ifndef _@GUARD_PREFIX@_FCNTL_H #define _@GUARD_PREFIX@_FCNTL_H #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ # include #endif /* Native Windows platforms declare open(), creat() in . */ #if (@GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_FCNTL@ # if @REPLACE_FCNTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcntl # define fcntl rpl_fcntl # endif _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); # else # if !@HAVE_FCNTL@ _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); # endif _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); # endif _GL_CXXALIASWARN (fcntl); #elif defined GNULIB_POSIXCHECK # undef fcntl # if HAVE_RAW_DECL_FCNTL _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " "use gnulib module fcntl for portability"); # endif #endif #if @GNULIB_OPEN@ # if @REPLACE_OPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open rpl_open # endif _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif /* On HP-UX 11, in C++ mode, open() is defined as an inline function with a default argument. _GL_CXXALIASWARN does not work in this case. */ # if !defined __hpux _GL_CXXALIASWARN (open); # endif #elif defined GNULIB_POSIXCHECK # undef open /* Assume open is always declared. */ _GL_WARN_ON_USE (open, "open is not always POSIX compliant - " "use gnulib module open for portability"); #endif #if @GNULIB_OPENAT@ # if @REPLACE_OPENAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef openat # define openat rpl_openat # endif _GL_FUNCDECL_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # else # if !@HAVE_OPENAT@ _GL_FUNCDECL_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # endif _GL_CXXALIASWARN (openat); #elif defined GNULIB_POSIXCHECK # undef openat # if HAVE_RAW_DECL_OPENAT _GL_WARN_ON_USE (openat, "openat is not portable - " "use gnulib module openat for portability"); # endif #endif /* Fix up the FD_* macros, only known to be missing on mingw. */ #ifndef FD_CLOEXEC # define FD_CLOEXEC 1 #endif /* Fix up the supported F_* macros. Intentionally leave other F_* macros undefined. Only known to be missing on mingw. */ #ifndef F_DUPFD_CLOEXEC # define F_DUPFD_CLOEXEC 0x40000000 /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ # define GNULIB_defined_F_DUPFD_CLOEXEC 1 #else # define GNULIB_defined_F_DUPFD_CLOEXEC 0 #endif #ifndef F_DUPFD # define F_DUPFD 1 #endif #ifndef F_GETFD # define F_GETFD 2 #endif /* Fix up the O_* macros. */ /* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT to values outside 'int' range, so omit these misdefinitions. But avoid namespace pollution on non-AIX systems. */ #ifdef _AIX # include # if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) # undef O_CLOEXEC # endif # if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) # undef O_NOFOLLOW # endif # if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) # undef O_TTY_INIT # endif #endif #if !defined O_DIRECT && defined O_DIRECTIO /* Tru64 spells it 'O_DIRECTIO'. */ # define O_DIRECT O_DIRECTIO #endif #if !defined O_CLOEXEC && defined O_NOINHERIT /* Mingw spells it 'O_NOINHERIT'. */ # define O_CLOEXEC O_NOINHERIT #endif #ifndef O_CLOEXEC # define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ # define GNULIB_defined_O_CLOEXEC 1 #else # define GNULIB_defined_O_CLOEXEC 0 #endif #ifndef O_DIRECT # define O_DIRECT 0 #endif #ifndef O_DIRECTORY # define O_DIRECTORY 0 #endif #ifndef O_DSYNC # define O_DSYNC 0 #endif #ifndef O_EXEC # define O_EXEC O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_IGNORE_CTTY # define O_IGNORE_CTTY 0 #endif #ifndef O_NDELAY # define O_NDELAY 0 #endif #ifndef O_NOATIME # define O_NOATIME 0 #endif #ifndef O_NONBLOCK # define O_NONBLOCK O_NDELAY #endif /* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY or to 0 as fallback. */ #if @GNULIB_NONBLOCKING@ # if O_NONBLOCK # define GNULIB_defined_O_NONBLOCK 0 # else # define GNULIB_defined_O_NONBLOCK 1 # undef O_NONBLOCK # define O_NONBLOCK 0x40000000 # endif #endif #ifndef O_NOCTTY # define O_NOCTTY 0 #endif #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #ifndef O_NOLINK # define O_NOLINK 0 #endif #ifndef O_NOLINKS # define O_NOLINKS 0 #endif #ifndef O_NOTRANS # define O_NOTRANS 0 #endif #ifndef O_RSYNC # define O_RSYNC 0 #endif #ifndef O_SEARCH # define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_SYNC # define O_SYNC 0 #endif #ifndef O_TTY_INIT # define O_TTY_INIT 0 #endif #if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) # undef O_ACCMODE # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in fcntl.h */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif #ifndef O_BINARY # define O_BINARY 0 # define O_TEXT 0 #endif /* Fix up the AT_* macros. */ /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its value exceeds INT_MAX, so its use as an int doesn't conform to the C standard, and GCC and Sun C complain in some cases. If the bug is present, undef AT_FDCWD here, so it can be redefined below. */ #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 # undef AT_FDCWD #endif /* Use the same bit pattern as Solaris 9, but with the proper signedness. The bit pattern is important, in case this actually is Solaris with the above workaround. */ #ifndef AT_FDCWD # define AT_FDCWD (-3041965) #endif /* Use the same values as Solaris 9. This shouldn't matter, but there's no real reason to differ. */ #ifndef AT_SYMLINK_NOFOLLOW # define AT_SYMLINK_NOFOLLOW 4096 #endif #ifndef AT_REMOVEDIR # define AT_REMOVEDIR 1 #endif /* Solaris 9 lacks these two, so just pick unique values. */ #ifndef AT_SYMLINK_FOLLOW # define AT_SYMLINK_FOLLOW 2 #endif #ifndef AT_EACCESS # define AT_EACCESS 4 #endif #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif gnuastro-0.5/bootstrapped/tests/ctype.in.h0000644000175000017500000000342213217200022015701 00000000000000/* A substitute for ISO C99 , for platforms on which it is incomplete. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Bruno Haible. */ /* * ISO C 99 for platforms on which it is incomplete. * */ #ifndef _@GUARD_PREFIX@_CTYPE_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Include the original . */ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_CTYPE_H@ #ifndef _@GUARD_PREFIX@_CTYPE_H #define _@GUARD_PREFIX@_CTYPE_H /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Return non-zero if c is a blank, i.e. a space or tab character. */ #if @GNULIB_ISBLANK@ # if !@HAVE_ISBLANK@ _GL_EXTERN_C int isblank (int c); # endif #elif defined GNULIB_POSIXCHECK # undef isblank # if HAVE_RAW_DECL_ISBLANK _GL_WARN_ON_USE (isblank, "isblank is unportable - " "use gnulib module isblank for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_CTYPE_H */ #endif /* _@GUARD_PREFIX@_CTYPE_H */ gnuastro-0.5/bootstrapped/tests/cloexec.h0000644000175000017500000000273413217200022015577 00000000000000/* cloexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 2004, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, or clear the flag if VALUE is false. Return 0 on success, or -1 on error with 'errno' set. Note that on MingW, this function does NOT protect DESC from being inherited into spawned children. Instead, either use dup_cloexec followed by closing the original DESC, or use interfaces such as open or pipe2 that accept flags like O_CLOEXEC to create DESC non-inheritable in the first place. */ int set_cloexec_flag (int desc, bool value); /* Duplicates a file handle FD, while marking the copy to be closed prior to exec or spawn. Returns -1 and sets errno if FD could not be duplicated. */ int dup_cloexec (int fd); gnuastro-0.5/bootstrapped/tests/test-c-strcase.sh0000755000175000017500000000114313217200023017176 00000000000000#!/bin/sh # Test in the C locale. ./test-c-strcasecmp${EXEEXT} || exit 1 ./test-c-strncasecmp${EXEEXT} || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : ${LOCALE_FR=fr_FR} if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ./test-c-strcasecmp${EXEEXT} locale || exit 1 LC_ALL=$LOCALE_FR ./test-c-strncasecmp${EXEEXT} locale || exit 1 fi # Test in a Turkish UTF-8 locale. : ${LOCALE_TR_UTF8=tr_TR.UTF-8} if test $LOCALE_TR_UTF8 != none; then LC_ALL=$LOCALE_TR_UTF8 ./test-c-strcasecmp${EXEEXT} locale || exit 1 LC_ALL=$LOCALE_TR_UTF8 ./test-c-strncasecmp${EXEEXT} locale || exit 1 fi exit 0 gnuastro-0.5/bootstrapped/tests/test-btowc2.sh0000755000175000017500000000056613217200023016522 00000000000000#!/bin/sh # Test whether a specific UTF-8 locale is installed. : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ./test-btowc${EXEEXT} 2 gnuastro-0.5/bootstrapped/tests/test-btowc1.sh0000755000175000017500000000054313217200023016514 00000000000000#!/bin/sh # Test in an ISO-8859-1 or ISO-8859-15 locale. : ${LOCALE_FR=fr_FR} if test $LOCALE_FR = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no traditional french locale is installed" else echo "Skipping test: no traditional french locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR \ ./test-btowc${EXEEXT} 1 gnuastro-0.5/bootstrapped/tests/test-binary-io.sh0000755000175000017500000000036513217200023017210 00000000000000#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-bin-out0.tmp t-bin-out1.tmp" ./test-binary-io${EXEEXT} 1 > t-bin-out1.tmp || exit 1 cmp t-bin-out0.tmp t-bin-out1.tmp > /dev/null || exit 1 rm -fr $tmpfiles exit 0 gnuastro-0.5/bootstrapped/tests/arpa_inet.in.h0000644000175000017500000001143413217200022016521 00000000000000/* A GNU-like . Copyright (C) 2005-2006, 2008-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_ARPA_INET_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_FEATURES_H@ # include /* for __GLIBC__ */ #endif /* Gnulib's sys/socket.h is responsible for defining socklen_t (used below) and for pulling in winsock2.h etc. under MinGW. But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include #endif /* On NonStop Kernel, inet_ntop and inet_pton are declared in . But avoid namespace pollution on glibc systems. */ #if defined __TANDEM && !defined __GLIBC__ # include #endif #if @HAVE_ARPA_INET_H@ /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_ARPA_INET_H@ #endif #ifndef _@GUARD_PREFIX@_ARPA_INET_H #define _@GUARD_PREFIX@_ARPA_INET_H /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if @GNULIB_INET_NTOP@ /* Converts an internet address from internal format to a printable, presentable format. AF is an internet address family, such as AF_INET or AF_INET6. SRC points to a 'struct in_addr' (for AF_INET) or 'struct in6_addr' (for AF_INET6). DST points to a buffer having room for CNT bytes. The printable representation of the address (in numeric form, not surrounded by [...], no reverse DNS is done) is placed in DST, and DST is returned. If an error occurs, the return value is NULL and errno is set. If CNT bytes are not sufficient to hold the result, the return value is NULL and errno is set to ENOSPC. A good value for CNT is 46. For more details, see the POSIX:2001 specification . */ # if @REPLACE_INET_NTOP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef inet_ntop # define inet_ntop rpl_inet_ntop # endif _GL_FUNCDECL_RPL (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt)); # else # if !@HAVE_DECL_INET_NTOP@ _GL_FUNCDECL_SYS (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt) _GL_ARG_NONNULL ((2, 3))); # endif /* Need to cast, because on NonStop Kernel, the fourth parameter is size_t cnt. */ _GL_CXXALIAS_SYS_CAST (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt)); # endif _GL_CXXALIASWARN (inet_ntop); #elif defined GNULIB_POSIXCHECK # undef inet_ntop # if HAVE_RAW_DECL_INET_NTOP _GL_WARN_ON_USE (inet_ntop, "inet_ntop is unportable - " "use gnulib module inet_ntop for portability"); # endif #endif #if @GNULIB_INET_PTON@ # if @REPLACE_INET_PTON@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef inet_pton # define inet_pton rpl_inet_pton # endif _GL_FUNCDECL_RPL (inet_pton, int, (int af, const char *restrict src, void *restrict dst) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (inet_pton, int, (int af, const char *restrict src, void *restrict dst)); # else # if !@HAVE_DECL_INET_PTON@ _GL_FUNCDECL_SYS (inet_pton, int, (int af, const char *restrict src, void *restrict dst) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (inet_pton, int, (int af, const char *restrict src, void *restrict dst)); # endif _GL_CXXALIASWARN (inet_pton); #elif defined GNULIB_POSIXCHECK # undef inet_pton # if HAVE_RAW_DECL_INET_PTON _GL_WARN_ON_USE (inet_pton, "inet_pton is unportable - " "use gnulib module inet_pton for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_ARPA_INET_H */ #endif /* _@GUARD_PREFIX@_ARPA_INET_H */ gnuastro-0.5/bootstrapped/tests/test-argp-2.sh0000755000175000017500000000651413217200023016411 00000000000000#! /bin/sh # Test suite for argp. # Copyright (C) 2006-2017 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . */ TMP=argp.$$ unset ARGP_HELP_FMT ERR=0 func_compare() { # If argp was compiled without base_name, it will display full program name. # If run on mingw, it will display the program name with a .exe suffix. sed '1{ s,: [^ ]*/test-argp,: test-argp, s,: test-argp\.exe,: test-argp, }' | LC_ALL=C tr -d '\r' | diff -c $TMP - } #### # Test --usage output cat > $TMP < $TMP <$TMP <. EOT # Compare --help output, but filter out any bug-reporting email address. ./test-argp$EXEEXT --help \ | sed 's/^\(Report bugs to \)<[^>]*>.$/\1<>./' | func_compare || ERR=1 #### # Test ambiguous option handling ./test-argp$EXEEXT --optio 2>/dev/null && ERR=1 #### # Run built-in tests ./test-argp$EXEEXT || ERR=1 rm $TMP exit $ERR gnuastro-0.5/bootstrapped/tests/macros.h0000644000175000017500000000673113217200023015443 00000000000000/* Common macros used by gnulib tests. Copyright (C) 2006-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* This file contains macros that are used by many gnulib tests. Put here only frequently used macros, say, used by 10 tests or more. */ #include #include #ifndef FALLTHROUGH # if __GNUC__ < 7 # define FALLTHROUGH ((void) 0) # else # define FALLTHROUGH __attribute__ ((__fallthrough__)) # endif #endif /* Define ASSERT_STREAM before including this file if ASSERT must target a stream other than stderr. */ #ifndef ASSERT_STREAM # define ASSERT_STREAM stderr #endif /* ASSERT (condition); verifies that the specified condition is fulfilled. If not, a message is printed to ASSERT_STREAM if defined (defaulting to stderr if undefined) and the program is terminated with an error code. This macro has the following properties: - The programmer specifies the expected condition, not the failure condition. This simplifies thinking. - The condition is tested always, regardless of compilation flags. (Unlike the macro from .) - On Unix platforms, the tester can debug the test program with a debugger (provided core dumps are enabled: "ulimit -c unlimited"). - For the sake of platforms where no debugger is available (such as some mingw systems), an error message is printed on the error stream that includes the source location of the ASSERT invocation. */ #define ASSERT(expr) \ do \ { \ if (!(expr)) \ { \ fprintf (ASSERT_STREAM, "%s:%d: assertion '%s' failed\n", \ __FILE__, __LINE__, #expr); \ fflush (ASSERT_STREAM); \ abort (); \ } \ } \ while (0) /* SIZEOF (array) returns the number of elements of an array. It works for arrays that are declared outside functions and for local variables of array type. It does *not* work for function parameters of array type, because they are actually parameters of pointer type. */ #define SIZEOF(array) (sizeof (array) / sizeof (array[0])) /* STREQ (str1, str2) Return true if two strings compare equal. */ #define STREQ(a, b) (strcmp (a, b) == 0) /* Some numbers in the interval [0,1). */ extern const float randomf[1000]; extern const double randomd[1000]; extern const long double randoml[1000]; gnuastro-0.5/bootstrapped/tests/signature.h0000644000175000017500000000367713217200023016166 00000000000000/* Macro for checking that a function declaration is compliant. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef SIGNATURE_CHECK /* Check that the function FN takes the specified arguments ARGS with a return type of RET. This header is designed to be included after and the one system header that is supposed to contain the function being checked, but prior to any other system headers that are necessary for the unit test. Therefore, this file does not include any system headers, nor reference anything outside of the macro arguments. For an example, if foo.h should provide: extern int foo (char, float); then the unit test named test-foo.c would start out with: #include #include #include "signature.h" SIGNATURE_CHECK (foo, int, (char, float)); #include ... */ # define SIGNATURE_CHECK(fn, ret, args) \ SIGNATURE_CHECK1 (fn, ret, args, __LINE__) /* Necessary to allow multiple SIGNATURE_CHECK lines in a unit test. Note that the checks must not occupy the same line. */ # define SIGNATURE_CHECK1(fn, ret, args, id) \ SIGNATURE_CHECK2 (fn, ret, args, id) /* macroexpand line */ # define SIGNATURE_CHECK2(fn, ret, args, id) \ static ret (* _GL_UNUSED signature_check ## id) args = fn #endif /* SIGNATURE_CHECK */ gnuastro-0.5/bootstrapped/tests/w32sock.h0000644000175000017500000000643113217200024015450 00000000000000/* w32sock.h --- internal auxiliary functions for Windows socket functions Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paolo Bonzini */ #include /* Get O_RDWR and O_BINARY. */ #include /* Get _open_osfhandle(). */ #include /* Get _get_osfhandle(). */ #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include #endif #define FD_TO_SOCKET(fd) ((SOCKET) _get_osfhandle ((fd))) #define SOCKET_TO_FD(fh) (_open_osfhandle ((intptr_t) (fh), O_RDWR | O_BINARY)) static inline void set_winsock_errno (void) { int err = WSAGetLastError (); /* Map some WSAE* errors to the runtime library's error codes. */ switch (err) { case WSA_INVALID_HANDLE: errno = EBADF; break; case WSA_NOT_ENOUGH_MEMORY: errno = ENOMEM; break; case WSA_INVALID_PARAMETER: errno = EINVAL; break; case WSAENAMETOOLONG: errno = ENAMETOOLONG; break; case WSAENOTEMPTY: errno = ENOTEMPTY; break; case WSAEWOULDBLOCK: errno = EWOULDBLOCK; break; case WSAEINPROGRESS: errno = EINPROGRESS; break; case WSAEALREADY: errno = EALREADY; break; case WSAENOTSOCK: errno = ENOTSOCK; break; case WSAEDESTADDRREQ: errno = EDESTADDRREQ; break; case WSAEMSGSIZE: errno = EMSGSIZE; break; case WSAEPROTOTYPE: errno = EPROTOTYPE; break; case WSAENOPROTOOPT: errno = ENOPROTOOPT; break; case WSAEPROTONOSUPPORT: errno = EPROTONOSUPPORT; break; case WSAEOPNOTSUPP: errno = EOPNOTSUPP; break; case WSAEAFNOSUPPORT: errno = EAFNOSUPPORT; break; case WSAEADDRINUSE: errno = EADDRINUSE; break; case WSAEADDRNOTAVAIL: errno = EADDRNOTAVAIL; break; case WSAENETDOWN: errno = ENETDOWN; break; case WSAENETUNREACH: errno = ENETUNREACH; break; case WSAENETRESET: errno = ENETRESET; break; case WSAECONNABORTED: errno = ECONNABORTED; break; case WSAECONNRESET: errno = ECONNRESET; break; case WSAENOBUFS: errno = ENOBUFS; break; case WSAEISCONN: errno = EISCONN; break; case WSAENOTCONN: errno = ENOTCONN; break; case WSAETIMEDOUT: errno = ETIMEDOUT; break; case WSAECONNREFUSED: errno = ECONNREFUSED; break; case WSAELOOP: errno = ELOOP; break; case WSAEHOSTUNREACH: errno = EHOSTUNREACH; break; default: errno = (err > 10000 && err < 10025) ? err - 10000 : err; break; } } gnuastro-0.5/bootstrapped/tests/test-wcwidth.c0000644000175000017500000000507313217200024016577 00000000000000/* Test of wcwidth() function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "signature.h" SIGNATURE_CHECK (wcwidth, int, (wchar_t)); #include #include #include "c-ctype.h" #include "localcharset.h" #include "macros.h" int main () { wchar_t wc; #ifdef C_CTYPE_ASCII /* Test width of ASCII characters. */ for (wc = 0x20; wc < 0x7F; wc++) ASSERT (wcwidth (wc) == 1); #endif /* Switch to an UTF-8 locale. */ if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL /* Check whether it's really an UTF-8 locale. On OpenBSD 4.0, the setlocale call succeeds only for the LC_CTYPE category and therefore returns "C/fr_FR.UTF-8/C/C/C/C", but the LC_CTYPE category is effectively set to an ASCII LC_CTYPE category; in particular, locale_charset() returns "ASCII". */ && strcmp (locale_charset (), "UTF-8") == 0) { /* Test width of ASCII characters. */ for (wc = 0x20; wc < 0x7F; wc++) ASSERT (wcwidth (wc) == 1); /* Test width of some non-spacing characters. */ ASSERT (wcwidth (0x0301) == 0); ASSERT (wcwidth (0x05B0) == 0); /* Test width of some format control characters. */ ASSERT (wcwidth (0x200E) <= 0); ASSERT (wcwidth (0x2060) <= 0); #if 0 /* wchar_t may be only 16 bits. */ ASSERT (wcwidth (0xE0001) <= 0); ASSERT (wcwidth (0xE0044) <= 0); #endif /* Test width of some zero width characters. */ ASSERT (wcwidth (0x200B) == 0); ASSERT (wcwidth (0xFEFF) <= 0); /* Test width of some CJK characters. */ ASSERT (wcwidth (0x3000) == 2); ASSERT (wcwidth (0xB250) == 2); ASSERT (wcwidth (0xFF1A) == 2); #if 0 /* wchar_t may be only 16 bits. */ ASSERT (wcwidth (0x20369) == 2); ASSERT (wcwidth (0x2F876) == 2); #endif } return 0; } gnuastro-0.5/bootstrapped/tests/test-wctype-h.c0000644000175000017500000000376613217200024016675 00000000000000/* Test of substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "macros.h" /* Check that the type wint_t is defined. */ wint_t a = 'x'; /* Check that WEOF is defined. */ wint_t e = WEOF; /* Check that the type wctype_t is defined. */ wctype_t p; /* Check that the type wctrans_t is defined. */ wctrans_t q; int main (void) { /* Check that the isw* functions exist as functions or as macros. */ (void) iswalnum (0); (void) iswalpha (0); (void) iswcntrl (0); (void) iswdigit (0); (void) iswgraph (0); (void) iswlower (0); (void) iswprint (0); (void) iswpunct (0); (void) iswspace (0); (void) iswupper (0); (void) iswxdigit (0); /* Check that the isw* functions map WEOF to 0. */ ASSERT (!iswalnum (e)); ASSERT (!iswalpha (e)); ASSERT (!iswcntrl (e)); ASSERT (!iswdigit (e)); ASSERT (!iswgraph (e)); ASSERT (!iswlower (e)); ASSERT (!iswprint (e)); ASSERT (!iswpunct (e)); ASSERT (!iswspace (e)); ASSERT (!iswupper (e)); ASSERT (!iswxdigit (e)); /* Check that the tow* functions exist as functions or as macros. */ (void) towlower (0); (void) towupper (0); /* Check that the tow* functions map WEOF to WEOF. */ ASSERT (towlower (e) == e); ASSERT (towupper (e) == e); return 0; } gnuastro-0.5/bootstrapped/tests/test-wcrtomb-w32.c0000644000175000017500000002171613217200024017216 00000000000000/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include #include #include "macros.h" #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ static int test_one_locale (const char *name, int codepage) { char buf[64]; size_t ret; # if 1 /* Portable code to set the locale. */ { char name_with_codepage[1024]; sprintf (name_with_codepage, "%s.%d", name, codepage); /* Set the locale. */ if (setlocale (LC_ALL, name_with_codepage) == NULL) return 77; } # else /* Hacky way to set a locale.codepage combination that setlocale() refuses to set. */ { /* Codepage of the current locale, set with setlocale(). Not necessarily the same as GetACP(). */ extern __declspec(dllimport) unsigned int __lc_codepage; /* Set the locale. */ if (setlocale (LC_ALL, name) == NULL) return 77; /* Clobber the codepage and MB_CUR_MAX, both set by setlocale(). */ __lc_codepage = codepage; switch (codepage) { case 1252: case 1256: MB_CUR_MAX = 1; break; case 932: case 950: case 936: MB_CUR_MAX = 2; break; case 54936: case 65001: MB_CUR_MAX = 4; break; } /* Test whether the codepage is really available. */ { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, " ", 1, &state) == (size_t)(-1)) return 77; } } # endif /* Test NUL character. */ { buf[0] = 'x'; ret = wcrtomb (buf, 0, NULL); ASSERT (ret == 1); ASSERT (buf[0] == '\0'); } /* Test single bytes. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ ret = wcrtomb (buf, btowc (c), NULL); ASSERT (ret == 1); ASSERT (buf[0] == (char) c); break; } } /* Test special calling convention, passing a NULL pointer. */ { ret = wcrtomb (NULL, '\0', NULL); ASSERT (ret == 1); ret = wcrtomb (NULL, btowc ('x'), NULL); ASSERT (ret == 1); } switch (codepage) { case 1252: /* Locale encoding is CP1252, an extension of ISO-8859-1. */ { /* Convert "B\374\337er": "Büßer" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00FC, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\374", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00DF, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\337", 1) == 0); ASSERT (buf[1] == 'x'); } return 0; case 1256: /* Locale encoding is CP1256, not the same as ISO-8859-6. */ { /* Convert "x\302\341\346y": "xآلوy" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x0622, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\302", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x0644, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\341", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x0648, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\346", 1) == 0); ASSERT (buf[1] == 'x'); } return 0; case 932: /* Locale encoding is CP932, similar to Shift_JIS. */ { /* Convert "<\223\372\226\173\214\352>": "<日本語>" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\223\372", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\226\173", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x8A9E, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\214\352", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; case 950: /* Locale encoding is CP950, similar to Big5. */ { /* Convert "<\244\351\245\273\273\171>": "<日本語>" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\244\351", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\245\273", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x8A9E, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\273\171", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; case 936: /* Locale encoding is CP936 = GBK, an extension of GB2312. */ { /* Convert "<\310\325\261\276\325\132>": "<日本語>" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\310\325", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\261\276", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x8A9E, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\325\132", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; case 54936: /* Locale encoding is CP54936 = GB18030. */ { /* Convert "B\250\271\201\060\211\070er": "Büßer" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00FC, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\250\271", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00DF, NULL); ASSERT (ret == 4); ASSERT (memcmp (buf, "\201\060\211\070", 4) == 0); ASSERT (buf[4] == 'x'); } return 0; case 65001: /* Locale encoding is CP65001 = UTF-8. */ { /* Convert "B\303\274\303\237er": "Büßer" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00FC, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\303\274", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00DF, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\303\237", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; default: return 1; } } int main (int argc, char *argv[]) { int codepage = atoi (argv[argc - 1]); int result; int i; result = 77; for (i = 1; i < argc - 1; i++) { int ret = test_one_locale (argv[i], codepage); if (ret != 77) result = ret; } if (result == 77) { fprintf (stderr, "Skipping test: found no locale with codepage %d\n", codepage); } return result; } #else int main (int argc, char *argv[]) { fputs ("Skipping test: not a native Windows system\n", stderr); return 77; } #endif gnuastro-0.5/bootstrapped/tests/test-wcrtomb.c0000644000175000017500000001101713217200024016576 00000000000000/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include #include "signature.h" SIGNATURE_CHECK (wcrtomb, size_t, (char *, wchar_t, mbstate_t *)); #include #include #include #include "macros.h" /* Check the multibyte character s[0..n-1]. */ static void check_character (const char *s, size_t n) { wchar_t wc; char buf[64]; int iret; size_t ret; wc = (wchar_t) 0xBADFACE; iret = mbtowc (&wc, s, n); ASSERT (iret == n); ret = wcrtomb (buf, wc, NULL); ASSERT (ret == n); ASSERT (memcmp (buf, s, n) == 0); /* Test special calling convention, passing a NULL pointer. */ ret = wcrtomb (NULL, wc, NULL); ASSERT (ret == 1); } int main (int argc, char *argv[]) { char buf[64]; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test NUL character. */ { buf[0] = 'x'; ret = wcrtomb (buf, 0, NULL); ASSERT (ret == 1); ASSERT (buf[0] == '\0'); } /* Test single bytes. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ ret = wcrtomb (buf, btowc (c), NULL); ASSERT (ret == 1); ASSERT (buf[0] == (char) c); break; } } /* Test special calling convention, passing a NULL pointer. */ { ret = wcrtomb (NULL, '\0', NULL); ASSERT (ret == 1); ret = wcrtomb (NULL, btowc ('x'), NULL); ASSERT (ret == 1); } if (argc > 1) switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { const char input[] = "B\374\337er"; /* "Büßer" */ check_character (input + 1, 1); check_character (input + 2, 1); } return 0; case '2': /* Locale encoding is UTF-8. */ { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ check_character (input + 1, 2); check_character (input + 3, 2); } return 0; case '3': /* Locale encoding is EUC-JP. */ { const char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ check_character (input + 1, 2); check_character (input + 3, 2); check_character (input + 5, 2); } return 0; case '4': /* Locale encoding is GB18030. */ { const char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ check_character (input + 1, 2); check_character (input + 3, 4); } return 0; } return 1; } gnuastro-0.5/bootstrapped/tests/test-wchar.c0000644000175000017500000000213613217200024016227 00000000000000/* Test of substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "verify.h" /* Check that the types wchar_t and wint_t are defined. */ wchar_t a = 'c'; wint_t b = 'x'; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-vsnprintf.c0000644000175000017500000000430513217200024017154 00000000000000/* Test of vsnprintf() function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "signature.h" SIGNATURE_CHECK (vsnprintf, int, (char *, size_t, char const *, va_list)); #include #include #include "macros.h" static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { char buf[8]; int size; int retval; retval = my_snprintf (NULL, 0, "%d", 12345); ASSERT (retval == 5); for (size = 0; size <= 8; size++) { memcpy (buf, "DEADBEEF", 8); retval = my_snprintf (buf, size, "%d", 12345); ASSERT (retval == 5); if (size < 6) { if (size > 0) { ASSERT (memcmp (buf, "12345", size - 1) == 0); ASSERT (buf[size - 1] == '\0' || buf[size - 1] == '0' + size); } #if !CHECK_VSNPRINTF_POSIX if (size > 0) #endif ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); } else { ASSERT (memcmp (buf, "12345\0EF", 8) == 0); } } /* Test the support of the POSIX/XSI format strings with positions. */ { char result[100]; retval = my_snprintf (result, sizeof (result), "%2$d %1$d", 33, 55); ASSERT (strcmp (result, "55 33") == 0); ASSERT (retval == strlen (result)); } return 0; } gnuastro-0.5/bootstrapped/tests/test-verify-try.c0000644000175000017500000000161313217200024017242 00000000000000/* Test the "verify" module. Copyright (C) 2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* This is a separate source file, so that the execution of test-verify.sh does not interfere with the building of the 'test-verify' program. */ #include "test-verify.c" gnuastro-0.5/bootstrapped/tests/test-verify.c0000644000175000017500000000350413217200024016427 00000000000000/* Test the "verify" module. Copyright (C) 2005, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible. */ #include #include "verify.h" #ifndef EXP_FAIL # define EXP_FAIL 0 #endif int x; enum { a, b, c }; #if EXP_FAIL == 1 verify (x >= 0); /* should give ERROR: non-constant expression */ #endif verify (c == 2); /* should be ok */ #if EXP_FAIL == 2 verify (1 + 1 == 3); /* should give ERROR */ #endif verify (1 == 1); verify (1 == 1); /* should be ok */ enum { item = verify_true (1 == 1) * 0 + 17 /* should be ok */ }; static int function (int n) { #if EXP_FAIL == 3 verify (n >= 0); /* should give ERROR: non-constant expression */ #endif verify (c == 2); /* should be ok */ #if EXP_FAIL == 4 verify (1 + 1 == 3); /* should give ERROR */ #endif verify (1 == 1); verify (1 == 1); /* should be ok */ if (n) return ((void) verify_expr (1 == 1, 1), verify_expr (1 == 1, 8)); /* should be ok */ #if EXP_FAIL == 5 return verify_expr (1 == 2, 5); /* should give ERROR */ #endif return 0; } int main (void) { return !(function (0) == 0 && function (1) == 8); } gnuastro-0.5/bootstrapped/tests/test-vasnprintf.c0000644000175000017500000000433613217200024017321 00000000000000/* Test of vasnprintf() and asnprintf() functions. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include "vasnprintf.h" #include #include #include #include "macros.h" static void test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) { char buf[8]; int size; for (size = 0; size <= 8; size++) { size_t length = size; char *result = my_asnprintf (NULL, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); ASSERT (length == 5); free (result); } for (size = 0; size <= 8; size++) { size_t length; char *result; memcpy (buf, "DEADBEEF", 8); length = size; result = my_asnprintf (buf, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); ASSERT (length == 5); if (size < 6) ASSERT (result != buf); ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); if (result != buf) free (result); } } static char * my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *ret; va_start (args, format); ret = vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } static void test_asnprintf () { test_function (asnprintf); } int main (int argc, char *argv[]) { test_vasnprintf (); test_asnprintf (); return 0; } gnuastro-0.5/bootstrapped/tests/test-usleep.c0000644000175000017500000000211213217200024016412 00000000000000/* Test of usleep() function. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include #include "signature.h" SIGNATURE_CHECK (usleep, int, (useconds_t)); #include #include "macros.h" int main (void) { time_t start = time (NULL); ASSERT (usleep (1000000) == 0); ASSERT (start < time (NULL)); ASSERT (usleep (0) == 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-unsetenv.c0000644000175000017500000000337613217200024017001 00000000000000/* Tests of unsetenv. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include #include "signature.h" SIGNATURE_CHECK (unsetenv, int, (char const *)); #include #include #include #include "macros.h" int main (void) { char entry[] = "b=2"; /* Test removal when multiple entries present. */ ASSERT (putenv ((char *) "a=1") == 0); ASSERT (putenv (entry) == 0); entry[0] = 'a'; /* Unspecified what getenv("a") would be at this point. */ ASSERT (unsetenv ("a") == 0); /* Both entries will be removed. */ ASSERT (getenv ("a") == NULL); ASSERT (unsetenv ("a") == 0); /* Required to fail with EINVAL. */ errno = 0; ASSERT (unsetenv ("") == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (unsetenv ("a=b") == -1); ASSERT (errno == EINVAL); #if 0 /* glibc and gnulib's implementation guarantee this, but POSIX no longer requires it: http://austingroupbugs.net/view.php?id=185 */ errno = 0; ASSERT (unsetenv (NULL) == -1); ASSERT (errno == EINVAL); #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-unistd.c0000644000175000017500000000305013217200024016425 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "verify.h" /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); /* Check that the various SEEK_* macros are defined. */ int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; /* Check that the various *_FILENO macros are defined. */ #if ! (defined STDIN_FILENO \ && (STDIN_FILENO + STDOUT_FILENO + STDERR_FILENO == 3)) missing or broken *_FILENO macros #endif /* Check that the types are all defined. */ size_t t1; ssize_t t2; #ifdef TODO /* Not implemented in gnulib yet */ uid_t t3; gid_t t4; #endif off_t t5; pid_t t6; #ifdef TODO useconds_t t7; intptr_t t8; #endif int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-time.c0000644000175000017500000000236113217200024016061 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "verify.h" /* Check that the types are all defined. */ struct timespec t1; #if 0 /* POSIX:2008 does not require pid_t in unconditionally, and indeed it's missing on Mac OS X 10.5, FreeBSD 6.4, OpenBSD 4.9, mingw. */ pid_t t2; #endif /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-thread_self.c0000644000175000017500000000215113217200024017400 00000000000000/* Test of gl_thread_self () macro. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2011. */ #include #include "glthread/thread.h" gl_thread_t main_thread; int main () { /* Check that gl_thread_self () can be used with just $(LIBTHREAD), not $(LIBMULTITHREAD), i.e. in libraries that are multithread-safe but don't create threads themselves. */ main_thread = gl_thread_self (); return 0; } gnuastro-0.5/bootstrapped/tests/test-thread_create.c0000644000175000017500000000412413217200024017714 00000000000000/* Test of gl_thread_create () macro. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2011. */ #include #include "glthread/thread.h" #include #include #include "macros.h" static gl_thread_t main_thread_before; static gl_thread_t main_thread_after; static gl_thread_t worker_thread; static int dummy; static volatile int work_done; static void * worker_thread_func (void *arg) { work_done = 1; return &dummy; } int main () { main_thread_before = gl_thread_self (); if (glthread_create (&worker_thread, worker_thread_func, NULL) == 0) { void *ret; /* Check that gl_thread_self () has the same value before than after the first call to gl_thread_create (). */ main_thread_after = gl_thread_self (); ASSERT (memcmp (&main_thread_before, &main_thread_after, sizeof (gl_thread_t)) == 0); gl_thread_join (worker_thread, &ret); /* Check the return value of the thread. */ ASSERT (ret == &dummy); /* Check that worker_thread_func () has finished executing. */ ASSERT (work_done); return 0; } else { #if USE_POSIX_THREADS || USE_SOLARIS_THREADS || USE_PTH_THREADS || USE_WINDOWS_THREADS fputs ("glthread_create failed\n", stderr); return 1; #else fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; #endif } } gnuastro-0.5/bootstrapped/tests/test-sysexits.c0000644000175000017500000000255213217200024017020 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include int exitcode; int main () { /* Check that all EX_* symbols are defined to integer constant expressions with mutually different values. */ switch (exitcode) { case EX_OK: case EX_USAGE: case EX_DATAERR: case EX_NOINPUT: case EX_NOUSER: case EX_NOHOST: case EX_UNAVAILABLE: case EX_SOFTWARE: case EX_OSERR: case EX_OSFILE: case EX_CANTCREAT: case EX_IOERR: case EX_TEMPFAIL: case EX_PROTOCOL: case EX_NOPERM: case EX_CONFIG: break; } return 0; } gnuastro-0.5/bootstrapped/tests/test-sys_uio.c0000644000175000017500000000173613217200024016622 00000000000000/* Test of substitute. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2011. */ #include #include /* Check that necessary types are defined. */ size_t a; ssize_t b; struct iovec c; int main (void) { return a + b + !!c.iov_base + c.iov_len; } gnuastro-0.5/bootstrapped/tests/test-sys_types.c0000644000175000017500000000172213217200024017165 00000000000000/* Test of substitute. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2011. */ #include #include /* Check that the types are all defined. */ pid_t t1; size_t t2; ssize_t t3; off_t t4; mode_t t5; int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-sys_time.c0000644000175000017500000000215013217200024016753 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include /* Check that the 'struct timeval' type is defined. */ struct timeval a; /* Check that a.tv_sec is wide enough to hold a time_t, ignoring signedness issues. */ typedef int verify_tv_sec_type[sizeof (time_t) <= sizeof (a.tv_sec) ? 1 : -1]; int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-sys_stat.c0000644000175000017500000001626613217200024017005 00000000000000/* Test of substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "verify.h" /* Check the existence of some macros. */ int a[] = { S_IFMT, #ifdef S_IFBLK /* missing on MSVC */ S_IFBLK, #endif S_IFCHR, S_IFDIR, S_IFIFO, S_IFREG, #ifdef S_IFLNK /* missing on native Windows and DJGPP */ S_IFLNK, #endif #ifdef S_IFSOCK /* missing on native Windows and DJGPP */ S_IFSOCK, #endif S_IRWXU, S_IRUSR, S_IWUSR, S_IXUSR, S_IRWXG, S_IRGRP, S_IWGRP, S_IXGRP, S_IRWXO, S_IROTH, S_IWOTH, S_IXOTH, S_ISUID, S_ISGID, S_ISVTX, S_ISBLK (S_IFREG), S_ISCHR (S_IFREG), S_ISDIR (S_IFREG), S_ISFIFO (S_IFREG), S_ISREG (S_IFREG), S_ISLNK (S_IFREG), S_ISSOCK (S_IFREG), S_ISDOOR (S_IFREG), S_ISMPB (S_IFREG), S_ISMPX (S_IFREG), S_ISNAM (S_IFREG), S_ISNWK (S_IFREG), S_ISPORT (S_IFREG), S_ISCTG (S_IFREG), S_ISOFD (S_IFREG), S_ISOFL (S_IFREG), S_ISWHT (S_IFREG) }; /* Sanity checks. */ verify (S_IRWXU == (S_IRUSR | S_IWUSR | S_IXUSR)); verify (S_IRWXG == (S_IRGRP | S_IWGRP | S_IXGRP)); verify (S_IRWXO == (S_IROTH | S_IWOTH | S_IXOTH)); #ifdef S_IFBLK verify (S_ISBLK (S_IFBLK)); #endif verify (!S_ISBLK (S_IFCHR)); verify (!S_ISBLK (S_IFDIR)); verify (!S_ISBLK (S_IFIFO)); verify (!S_ISBLK (S_IFREG)); #ifdef S_IFLNK verify (!S_ISBLK (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISBLK (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISCHR (S_IFBLK)); #endif verify (S_ISCHR (S_IFCHR)); verify (!S_ISCHR (S_IFDIR)); verify (!S_ISCHR (S_IFIFO)); verify (!S_ISCHR (S_IFREG)); #ifdef S_IFLNK verify (!S_ISCHR (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISCHR (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISDIR (S_IFBLK)); #endif verify (!S_ISDIR (S_IFCHR)); verify (S_ISDIR (S_IFDIR)); verify (!S_ISDIR (S_IFIFO)); verify (!S_ISDIR (S_IFREG)); #ifdef S_IFLNK verify (!S_ISDIR (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISDIR (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISFIFO (S_IFBLK)); #endif verify (!S_ISFIFO (S_IFCHR)); verify (!S_ISFIFO (S_IFDIR)); verify (S_ISFIFO (S_IFIFO)); verify (!S_ISFIFO (S_IFREG)); #ifdef S_IFLNK verify (!S_ISFIFO (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISFIFO (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISREG (S_IFBLK)); #endif verify (!S_ISREG (S_IFCHR)); verify (!S_ISREG (S_IFDIR)); verify (!S_ISREG (S_IFIFO)); verify (S_ISREG (S_IFREG)); #ifdef S_IFLNK verify (!S_ISREG (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISREG (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISLNK (S_IFBLK)); #endif verify (!S_ISLNK (S_IFCHR)); verify (!S_ISLNK (S_IFDIR)); verify (!S_ISLNK (S_IFIFO)); verify (!S_ISLNK (S_IFREG)); #ifdef S_IFLNK verify (S_ISLNK (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISLNK (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISSOCK (S_IFBLK)); #endif verify (!S_ISSOCK (S_IFCHR)); verify (!S_ISSOCK (S_IFDIR)); verify (!S_ISSOCK (S_IFIFO)); verify (!S_ISSOCK (S_IFREG)); #ifdef S_IFLNK verify (!S_ISSOCK (S_IFLNK)); #endif #ifdef S_IFSOCK verify (S_ISSOCK (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISDOOR (S_IFBLK)); #endif verify (!S_ISDOOR (S_IFCHR)); verify (!S_ISDOOR (S_IFDIR)); verify (!S_ISDOOR (S_IFIFO)); verify (!S_ISDOOR (S_IFREG)); #ifdef S_IFLNK verify (!S_ISDOOR (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISDOOR (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISMPB (S_IFBLK)); #endif verify (!S_ISMPB (S_IFCHR)); verify (!S_ISMPB (S_IFDIR)); verify (!S_ISMPB (S_IFIFO)); verify (!S_ISMPB (S_IFREG)); #ifdef S_IFLNK verify (!S_ISMPB (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISMPB (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISMPX (S_IFBLK)); #endif verify (!S_ISMPX (S_IFCHR)); verify (!S_ISMPX (S_IFDIR)); verify (!S_ISMPX (S_IFIFO)); verify (!S_ISMPX (S_IFREG)); #ifdef S_IFLNK verify (!S_ISMPX (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISMPX (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISNAM (S_IFBLK)); #endif verify (!S_ISNAM (S_IFCHR)); verify (!S_ISNAM (S_IFDIR)); verify (!S_ISNAM (S_IFIFO)); verify (!S_ISNAM (S_IFREG)); #ifdef S_IFLNK verify (!S_ISNAM (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISNAM (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISNWK (S_IFBLK)); #endif verify (!S_ISNWK (S_IFCHR)); verify (!S_ISNWK (S_IFDIR)); verify (!S_ISNWK (S_IFIFO)); verify (!S_ISNWK (S_IFREG)); #ifdef S_IFLNK verify (!S_ISNWK (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISNWK (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISPORT (S_IFBLK)); #endif verify (!S_ISPORT (S_IFCHR)); verify (!S_ISPORT (S_IFDIR)); verify (!S_ISPORT (S_IFIFO)); verify (!S_ISPORT (S_IFREG)); #ifdef S_IFLNK verify (!S_ISPORT (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISPORT (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISCTG (S_IFBLK)); #endif verify (!S_ISCTG (S_IFCHR)); verify (!S_ISCTG (S_IFDIR)); verify (!S_ISCTG (S_IFIFO)); verify (!S_ISCTG (S_IFREG)); #ifdef S_IFLNK verify (!S_ISCTG (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISCTG (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISOFD (S_IFBLK)); #endif verify (!S_ISOFD (S_IFCHR)); verify (!S_ISOFD (S_IFDIR)); verify (!S_ISOFD (S_IFIFO)); verify (!S_ISOFD (S_IFREG)); #ifdef S_IFLNK verify (!S_ISOFD (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISOFD (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISOFL (S_IFBLK)); #endif verify (!S_ISOFL (S_IFCHR)); verify (!S_ISOFL (S_IFDIR)); verify (!S_ISOFL (S_IFIFO)); verify (!S_ISOFL (S_IFREG)); #ifdef S_IFLNK verify (!S_ISOFL (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISOFL (S_IFSOCK)); #endif #ifdef S_IFBLK verify (!S_ISWHT (S_IFBLK)); #endif verify (!S_ISWHT (S_IFCHR)); verify (!S_ISWHT (S_IFDIR)); verify (!S_ISWHT (S_IFIFO)); verify (!S_ISWHT (S_IFREG)); #ifdef S_IFLNK verify (!S_ISWHT (S_IFLNK)); #endif #ifdef S_IFSOCK verify (!S_ISWHT (S_IFSOCK)); #endif /* POSIX 2008 requires traditional encoding of permission constants. */ verify (S_IRWXU == 00700); verify (S_IRUSR == 00400); verify (S_IWUSR == 00200); verify (S_IXUSR == 00100); verify (S_IRWXG == 00070); verify (S_IRGRP == 00040); verify (S_IWGRP == 00020); verify (S_IXGRP == 00010); verify (S_IRWXO == 00007); verify (S_IROTH == 00004); verify (S_IWOTH == 00002); verify (S_IXOTH == 00001); verify (S_ISUID == 04000); verify (S_ISGID == 02000); verify (S_ISVTX == 01000); #if ((0 <= UTIME_NOW && UTIME_NOW < 1000000000) \ || (0 <= UTIME_OMIT && UTIME_OMIT < 1000000000) \ || UTIME_NOW == UTIME_OMIT) invalid UTIME macros #endif /* Check the existence of some types. */ nlink_t t1; off_t t2; mode_t t3; struct timespec st; int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-sys_socket.c0000644000175000017500000000330113217200024017304 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include #if HAVE_SHUTDOWN /* Check some integer constant expressions. */ int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR }; #endif /* Check that the 'socklen_t' type is defined. */ socklen_t t1; /* Check that the 'size_t' and 'ssize_t' types are defined. */ size_t t2; ssize_t t3; /* Check that 'struct iovec' is defined. */ struct iovec io; /* Check that a minimal set of 'struct msghdr' is defined. */ struct msghdr msg; int main (void) { struct sockaddr_storage x; sa_family_t i; /* Check some errno values. */ switch (ENOTSOCK) { case ENOTSOCK: case EADDRINUSE: case ENETRESET: case ECONNABORTED: case ECONNRESET: case ENOTCONN: case ESHUTDOWN: break; } x.ss_family = 42; i = 42; msg.msg_iov = &io; return (x.ss_family - i + msg.msg_namelen + msg.msg_iov->iov_len + msg.msg_iovlen); } gnuastro-0.5/bootstrapped/tests/test-sys_select.c0000644000175000017500000000336213217200024017302 00000000000000/* Test of substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "signature.h" /* The following may be macros without underlying functions, so only check signature if they are not macros. */ #ifndef FD_CLR SIGNATURE_CHECK (FD_CLR, void, (int, fd_set *)); #endif #ifndef FD_ISSET SIGNATURE_CHECK (FD_ISSET, void, (int, fd_set *)); #endif #ifndef FD_SET SIGNATURE_CHECK (FD_SET, int, (int, fd_set *)); #endif #ifndef FD_ZERO SIGNATURE_CHECK (FD_ZERO, void, (fd_set *)); #endif /* Check that the 'struct timeval' type is defined. */ struct timeval a; /* Check that a.tv_sec is wide enough to hold a time_t, ignoring signedness issues. */ typedef int verify_tv_sec_type[sizeof (time_t) <= sizeof (a.tv_sec) ? 1 : -1]; /* Check that sigset_t is defined. */ sigset_t t2; int main (void) { /* Check that FD_ZERO can be used. This should not yield a warning such as "warning: implicit declaration of function 'memset'". */ fd_set fds; FD_ZERO (&fds); return 0; } gnuastro-0.5/bootstrapped/tests/test-sys_ioctl.c0000644000175000017500000000155113217200024017133 00000000000000/* Test of substitute. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-symlink.c0000644000175000017500000000242313217200024016610 00000000000000/* Tests of symlink. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include #include "signature.h" SIGNATURE_CHECK (symlink, int, (char const *, char const *)); #include #include #include #include #include #include #include "ignore-value.h" #include "macros.h" #define BASE "test-symlink.t" #include "test-symlink.h" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_symlink (symlink, true); } gnuastro-0.5/bootstrapped/tests/test-strtod.c0000644000175000017500000007053113217200024016446 00000000000000/* * Copyright (C) 2008-2017 Free Software Foundation, Inc. * Written by Eric Blake * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (strtod, double, (char const *, char **)); #include #include #include #include #include "isnand-nolibm.h" #include "minus-zero.h" #include "macros.h" /* Avoid requiring -lm just for fabs. */ #define FABS(d) ((d) < 0.0 ? -(d) : (d)) int main (void) { int status = 0; /* Subject sequence empty or invalid. */ { const char input[] = ""; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " "; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " ."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " .e0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); /* IRIX 6.5, OSF/1 5.1 */ ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +.e-0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); /* IRIX 6.5, OSF/1 5.1 */ ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " in"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " na"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } /* Simple floating point values. */ { const char input[] = "1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = ".5"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); /* FIXME - gnulib's version is rather inaccurate. It would be nice to guarantee an exact result, but for now, we settle for a 1-ulp error. */ ASSERT (FABS (result - 0.5) < DBL_EPSILON); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = " 1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == -1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1e0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "1e+0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "1e-0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "1e1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 10.0); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "5e-1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); /* FIXME - gnulib's version is rather inaccurate. It would be nice to guarantee an exact result, but for now, we settle for a 1-ulp error. */ ASSERT (FABS (result - 0.5) < DBL_EPSILON); ASSERT (ptr == input + 4); ASSERT (errno == 0); } /* Zero. */ { const char input[] = "0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = ".0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "0e0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "0e+9999999"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "0e-9999999"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "-0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 2); ASSERT (errno == 0); } /* Suffixes. */ { const char input[] = "1f"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1.f"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1e"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1e+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1e-"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1E 2"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* HP-UX 11.11, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 1); /* HP-UX 11.11, IRIX 6.5 */ ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "00x1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-0x"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* Mac OS X 10.3, FreeBSD 6.2, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 2); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xg"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xp"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0XP"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0x."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xp+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xp+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0x.p+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "1p+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1P+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } /* Overflow/underflow. */ { const char input[] = "1E1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); ASSERT (ptr == input + 9); /* OSF/1 5.1 */ ASSERT (errno == ERANGE); } { const char input[] = "-1E1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == -HUGE_VAL); ASSERT (ptr == input + 10); ASSERT (errno == ERANGE); } { const char input[] = "1E-100000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (0.0 <= result && result <= DBL_MIN); ASSERT (!signbit (result)); ASSERT (ptr == input + 9); ASSERT (errno == ERANGE); } { const char input[] = "-1E-100000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (-DBL_MIN <= result && result <= 0.0); #if 0 /* FIXME - this is glibc bug 5995; POSIX allows returning positive 0 on negative underflow, even though quality of implementation demands preserving the sign. Disable this test until fixed glibc is more prevalent. */ ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* glibc-2.3.6, mingw */ #endif ASSERT (ptr == input + 10); ASSERT (errno == ERANGE); } { const char input[] = "1E 1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* HP-UX 11.11, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 1); /* HP-UX 11.11, IRIX 6.5 */ ASSERT (errno == 0); } { const char input[] = "0x1P 1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } /* Infinity. */ { const char input[] = "iNf"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 3); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw */ ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ } { const char input[] = "-InF"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == -HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 4); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 4.0, Solaris 9, mingw */ ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ } { const char input[] = "infinite"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 3); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); /* OSF/1 4.0 */ } { const char input[] = "infinitY"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 8); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw */ ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ } { const char input[] = "infinitY."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 8); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); /* OSF/1 4.0 */ } /* NaN. Some processors set the sign bit of the default NaN, so all we check is that using a sign changes the result. */ { const char input[] = "-nan"; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ # endif ASSERT (ptr1 == input + 4); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (ptr2 == input + 4); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (errno == 0); /* HP-UX 11.11 */ #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = "+nan("; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (!!signbit (result1) == !!signbit (result2)); ASSERT (ptr1 == input + 4); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (ptr2 == input + 4); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = "-nan()"; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ # endif ASSERT (ptr1 == input + 6); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr2 == input + 6); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = " nan()."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 6); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); #endif } { /* The behavior of nan(0) is implementation-defined, but all implementations we know of which handle optional n-char-sequences handle nan(0) the same as nan(). */ const char input[] = "-nan(0)."; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ # endif ASSERT (ptr1 == input + 7); /* glibc-2.3.6, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr2 == input + 7); /* glibc-2.3.6, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } /* Hex. */ { const char input[] = "0xa"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 10.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0XA"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 10.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1P+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0X1P+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+1a"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p 2"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } /* Large buffers. */ { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; memset (input, '\t', m - 1); input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; memset (input, '0', m - 1); input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } #if 0 /* Newlib has an artificial limit of 20000 for the exponent. TODO - gnulib should fix this. */ { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; input[0] = '.'; memset (input + 1, '0', m - 10); input[m - 9] = '1'; input[m - 8] = 'e'; input[m - 7] = '+'; input[m - 6] = '9'; input[m - 5] = '9'; input[m - 4] = '9'; input[m - 3] = '9'; input[m - 2] = '9'; input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + m); /* OSF/1 5.1 */ ASSERT (errno == 0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ } free (input); } { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; input[0] = '1'; memset (input + 1, '0', m - 9); input[m - 8] = 'e'; input[m - 7] = '-'; input[m - 6] = '9'; input[m - 5] = '9'; input[m - 4] = '9'; input[m - 3] = '9'; input[m - 2] = '9'; input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + m); ASSERT (errno == 0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ } free (input); } #endif { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; input[0] = '-'; input[1] = '0'; input[2] = 'e'; input[3] = '1'; memset (input + 4, '0', m - 3); input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } /* Rounding. */ /* TODO - is it worth some tests of rounding for typical IEEE corner cases, such as .5 ULP rounding up to the smallest denormal and not causing underflow, or DBL_MIN - .5 ULP not causing an infinite loop? */ return status; } gnuastro-0.5/bootstrapped/tests/test-strnlen.c0000644000175000017500000000336213217200024016612 00000000000000/* * Copyright (C) 2010-2017 Free Software Foundation, Inc. * Written by Eric Blake * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (strnlen, size_t, (char const *, size_t)); #include #include "zerosize-ptr.h" #include "macros.h" int main (void) { size_t i; char *page_boundary = (char *) zerosize_ptr (); if (!page_boundary) { page_boundary = malloc (0x1000); ASSERT (page_boundary); page_boundary += 0x1000; } /* Basic behavior tests. */ ASSERT (strnlen ("a", 0) == 0); ASSERT (strnlen ("a", 1) == 1); ASSERT (strnlen ("a", 2) == 1); ASSERT (strnlen ("", 0x100000) == 0); /* Memory fence and alignment testing. */ for (i = 0; i < 512; i++) { char *start = page_boundary - i; size_t j = i; memset (start, 'x', i); do { if (i != j) { start[j] = 0; ASSERT (strnlen (start, i + j) == j); } ASSERT (strnlen (start, i) == j); ASSERT (strnlen (start, j) == j); } while (j--); } return 0; } gnuastro-0.5/bootstrapped/tests/test-strings.c0000644000175000017500000000155413217200024016617 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include int main () { return 0; } gnuastro-0.5/bootstrapped/tests/test-string.c0000644000175000017500000000201013217200024016420 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "verify.h" /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-strerror_r.c0000644000175000017500000001172713217200024017334 00000000000000/* Test of strerror_r() function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (strerror_r, int, (int, char *, size_t)); #include #include "macros.h" int main (void) { char buf[100]; int ret; /* Test results with valid errnum and enough room. */ errno = 0; buf[0] = '\0'; ASSERT (strerror_r (EACCES, buf, sizeof buf) == 0); ASSERT (buf[0] != '\0'); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); errno = 0; buf[0] = '\0'; ASSERT (strerror_r (ETIMEDOUT, buf, sizeof buf) == 0); ASSERT (buf[0] != '\0'); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); errno = 0; buf[0] = '\0'; ASSERT (strerror_r (EOVERFLOW, buf, sizeof buf) == 0); ASSERT (buf[0] != '\0'); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); /* POSIX requires strerror (0) to succeed. Reject use of "Unknown error", but allow "Success", "No error", or even Solaris' "Error 0" which are distinct patterns from true out-of-range strings. http://austingroupbugs.net/view.php?id=382 */ errno = 0; buf[0] = '\0'; ret = strerror_r (0, buf, sizeof buf); ASSERT (ret == 0); ASSERT (buf[0]); ASSERT (errno == 0); ASSERT (strstr (buf, "nknown") == NULL); ASSERT (strstr (buf, "ndefined") == NULL); /* Test results with out-of-range errnum and enough room. POSIX allows an empty string on success, and allows an unchanged buf on error, but these are not useful, so we guarantee contents. */ errno = 0; buf[0] = '^'; ret = strerror_r (-3, buf, sizeof buf); ASSERT (ret == 0 || ret == EINVAL); ASSERT (buf[0] != '^'); ASSERT (*buf); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); /* Test results with a too small buffer. POSIX requires an error; only ERANGE for 0 and valid errors, and a choice of ERANGE or EINVAL for out-of-range values. On error, POSIX permits buf to be empty, unchanged, or unterminated, but these are not useful, so we guarantee NUL-terminated truncated contents for all but size 0. http://austingroupbugs.net/view.php?id=398. Also ensure that no out-of-bounds writes occur. */ { int errs[] = { EACCES, 0, -3, }; int j; buf[sizeof buf - 1] = '\0'; for (j = 0; j < SIZEOF (errs); j++) { int err = errs[j]; char buf2[sizeof buf] = ""; size_t len; size_t i; strerror_r (err, buf2, sizeof buf2); len = strlen (buf2); ASSERT (len < sizeof buf); for (i = 0; i <= len; i++) { memset (buf, '^', sizeof buf - 1); errno = 0; ret = strerror_r (err, buf, i); ASSERT (errno == 0); if (j == 2) ASSERT (ret == ERANGE || ret == EINVAL); else ASSERT (ret == ERANGE); if (i) { ASSERT (strncmp (buf, buf2, i - 1) == 0); ASSERT (buf[i - 1] == '\0'); } ASSERT (strspn (buf + i, "^") == sizeof buf - 1 - i); } strcpy (buf, "BADFACE"); errno = 0; ret = strerror_r (err, buf, len + 1); ASSERT (ret != ERANGE); ASSERT (errno == 0); ASSERT (strcmp (buf, buf2) == 0); } } #if GNULIB_STRERROR /* Test that strerror_r does not clobber strerror buffer. On some platforms, this test can only succeed if gnulib also replaces strerror. */ { const char *msg1; const char *msg2; const char *msg3; const char *msg4; char *str1; char *str2; char *str3; char *str4; msg1 = strerror (ENOENT); ASSERT (msg1); str1 = strdup (msg1); ASSERT (str1); msg2 = strerror (ERANGE); ASSERT (msg2); str2 = strdup (msg2); ASSERT (str2); msg3 = strerror (-4); ASSERT (msg3); str3 = strdup (msg3); ASSERT (str3); msg4 = strerror (1729576); ASSERT (msg4); str4 = strdup (msg4); ASSERT (str4); strerror_r (EACCES, buf, sizeof buf); strerror_r (-5, buf, sizeof buf); ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1)); ASSERT (msg2 == msg4 || STREQ (msg2, str2)); ASSERT (msg3 == msg4 || STREQ (msg3, str3)); ASSERT (STREQ (msg4, str4)); free (str1); free (str2); free (str3); free (str4); } #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-strerror.c0000644000175000017500000000371013217200024017004 00000000000000/* Test of strerror() function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Eric Blake , 2007. */ #include #include #include "signature.h" SIGNATURE_CHECK (strerror, char *, (int)); #include #include "macros.h" int main (void) { char *str; errno = 0; str = strerror (EACCES); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); errno = 0; str = strerror (ETIMEDOUT); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); errno = 0; str = strerror (EOVERFLOW); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); /* POSIX requires strerror (0) to succeed. Reject use of "Unknown error", but allow "Success", "No error", or even Solaris' "Error 0" which are distinct patterns from true out-of-range strings. http://austingroupbugs.net/view.php?id=382 */ errno = 0; str = strerror (0); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); ASSERT (strstr (str, "nknown") == NULL); ASSERT (strstr (str, "ndefined") == NULL); /* POSIX requires strerror to produce a non-NULL result for all inputs; as an extension, we also guarantee a non-empty result. Reporting EINVAL is optional. */ errno = 0; str = strerror (-3); ASSERT (str); ASSERT (*str); ASSERT (errno == 0 || errno == EINVAL); return 0; } gnuastro-0.5/bootstrapped/tests/test-strchrnul.c0000644000175000017500000000444713217200024017156 00000000000000/* * Copyright (C) 2008-2017 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (strchrnul, char *, (char const *, int)); #include #include "macros.h" int main (void) { size_t n = 0x100000; char *input = malloc (n + 1); ASSERT (input); input[0] = 'a'; input[1] = 'b'; memset (input + 2, 'c', 1024); memset (input + 1026, 'd', n - 1028); input[n - 2] = 'e'; input[n - 1] = 'a'; input[n] = '\0'; /* Basic behavior tests. */ ASSERT (strchrnul (input, 'a') == input); ASSERT (strchrnul (input, 'b') == input + 1); ASSERT (strchrnul (input, 'c') == input + 2); ASSERT (strchrnul (input, 'd') == input + 1026); ASSERT (strchrnul (input + 1, 'a') == input + n - 1); ASSERT (strchrnul (input + 1, 'e') == input + n - 2); ASSERT (strchrnul (input, 'f') == input + n); ASSERT (strchrnul (input, '\0') == input + n); /* Check that a very long haystack is handled quickly if the byte is found near the beginning. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (strchrnul (input, 'c') == input + 2); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = (j + 1) & 0xff; for (j = 1; j < 256; j++) { ASSERT (strchrnul (input + i, j) == input + i + j - 1); input[i + j - 1] = (j == 1 ? 2 : 1); ASSERT (strchrnul (input + i, j) == input + i + 255); input[i + j - 1] = j; } } } free (input); return 0; } gnuastro-0.5/bootstrapped/tests/test-stdlib.c0000644000175000017500000000262513217200024016407 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "verify.h" /* Check that EXIT_SUCCESS is 0, per POSIX. */ static int exitcode = EXIT_SUCCESS; #if EXIT_SUCCESS "oops" #endif /* Check for GNU value (not guaranteed by POSIX, but is guaranteed by gnulib). */ #if EXIT_FAILURE != 1 "oops" #endif /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); #if GNULIB_TEST_SYSTEM_POSIX # include "test-sys_wait.h" #else # define test_sys_wait_macros() 0 #endif int main (void) { if (test_sys_wait_macros ()) return 1; return exitcode; } gnuastro-0.5/bootstrapped/tests/test-stdio.c0000644000175000017500000000232313217200024016243 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "verify.h" /* Check that the various SEEK_* macros are defined. */ int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); /* Check that the types are all defined. */ fpos_t t1; off_t t2; size_t t3; ssize_t t4; va_list t5; int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-stdint.c0000644000175000017500000003330613217200024016433 00000000000000/* Test of substitute. Copyright (C) 2006-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2006. */ #include /* Whether to enable pedantic checks. */ #define DO_PEDANTIC 0 #include #include "verify.h" #include "intprops.h" #if __GNUC__ >= 2 && DO_PEDANTIC # define verify_same_types(expr1,expr2) \ extern void _verify_func(__LINE__) (__typeof__ (expr1) *); \ extern void _verify_func(__LINE__) (__typeof__ (expr2) *); # define _verify_func(line) _verify_func2(line) # define _verify_func2(line) verify_func_ ## line #else # define verify_same_types(expr1,expr2) extern void verify_func (int) #endif /* 7.18.1.1. Exact-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ int8_t a1[3] = { INT8_C (17), INT8_MIN, INT8_MAX }; verify (TYPE_MINIMUM (int8_t) == INT8_MIN); verify (TYPE_MAXIMUM (int8_t) == INT8_MAX); verify_same_types (INT8_MIN, (int8_t) 0 + 0); verify_same_types (INT8_MAX, (int8_t) 0 + 0); int16_t a2[3] = { INT16_C (17), INT16_MIN, INT16_MAX }; verify (TYPE_MINIMUM (int16_t) == INT16_MIN); verify (TYPE_MAXIMUM (int16_t) == INT16_MAX); verify_same_types (INT16_MIN, (int16_t) 0 + 0); verify_same_types (INT16_MAX, (int16_t) 0 + 0); int32_t a3[3] = { INT32_C (17), INT32_MIN, INT32_MAX }; verify (TYPE_MINIMUM (int32_t) == INT32_MIN); verify (TYPE_MAXIMUM (int32_t) == INT32_MAX); verify_same_types (INT32_MIN, (int32_t) 0 + 0); verify_same_types (INT32_MAX, (int32_t) 0 + 0); #ifdef INT64_MAX int64_t a4[3] = { INT64_C (17), INT64_MIN, INT64_MAX }; verify (TYPE_MINIMUM (int64_t) == INT64_MIN); verify (TYPE_MAXIMUM (int64_t) == INT64_MAX); verify_same_types (INT64_MIN, (int64_t) 0 + 0); verify_same_types (INT64_MAX, (int64_t) 0 + 0); #endif uint8_t b1[2] = { UINT8_C (17), UINT8_MAX }; verify (TYPE_MAXIMUM (uint8_t) == UINT8_MAX); verify_same_types (UINT8_MAX, (uint8_t) 0 + 0); uint16_t b2[2] = { UINT16_C (17), UINT16_MAX }; verify (TYPE_MAXIMUM (uint16_t) == UINT16_MAX); verify_same_types (UINT16_MAX, (uint16_t) 0 + 0); uint32_t b3[2] = { UINT32_C (17), UINT32_MAX }; verify (TYPE_MAXIMUM (uint32_t) == UINT32_MAX); verify_same_types (UINT32_MAX, (uint32_t) 0 + 0); #ifdef UINT64_MAX uint64_t b4[2] = { UINT64_C (17), UINT64_MAX }; verify (TYPE_MAXIMUM (uint64_t) == UINT64_MAX); verify_same_types (UINT64_MAX, (uint64_t) 0 + 0); #endif #if INT8_MIN && INT8_MAX && INT16_MIN && INT16_MAX && INT32_MIN && INT32_MAX /* ok */ #else err or; #endif #if UINT8_MAX && UINT16_MAX && UINT32_MAX /* ok */ #else err or; #endif /* 7.18.1.2. Minimum-width integer types */ /* 7.18.2.2. Limits of minimum-width integer types */ int_least8_t c1[3] = { 17, INT_LEAST8_MIN, INT_LEAST8_MAX }; verify (TYPE_MINIMUM (int_least8_t) == INT_LEAST8_MIN); verify (TYPE_MAXIMUM (int_least8_t) == INT_LEAST8_MAX); verify_same_types (INT_LEAST8_MIN, (int_least8_t) 0 + 0); verify_same_types (INT_LEAST8_MAX, (int_least8_t) 0 + 0); int_least16_t c2[3] = { 17, INT_LEAST16_MIN, INT_LEAST16_MAX }; verify (TYPE_MINIMUM (int_least16_t) == INT_LEAST16_MIN); verify (TYPE_MAXIMUM (int_least16_t) == INT_LEAST16_MAX); verify_same_types (INT_LEAST16_MIN, (int_least16_t) 0 + 0); verify_same_types (INT_LEAST16_MAX, (int_least16_t) 0 + 0); int_least32_t c3[3] = { 17, INT_LEAST32_MIN, INT_LEAST32_MAX }; verify (TYPE_MINIMUM (int_least32_t) == INT_LEAST32_MIN); verify (TYPE_MAXIMUM (int_least32_t) == INT_LEAST32_MAX); verify_same_types (INT_LEAST32_MIN, (int_least32_t) 0 + 0); verify_same_types (INT_LEAST32_MAX, (int_least32_t) 0 + 0); #ifdef INT_LEAST64_MAX int_least64_t c4[3] = { 17, INT_LEAST64_MIN, INT_LEAST64_MAX }; verify (TYPE_MINIMUM (int_least64_t) == INT_LEAST64_MIN); verify (TYPE_MAXIMUM (int_least64_t) == INT_LEAST64_MAX); verify_same_types (INT_LEAST64_MIN, (int_least64_t) 0 + 0); verify_same_types (INT_LEAST64_MAX, (int_least64_t) 0 + 0); #endif uint_least8_t d1[2] = { 17, UINT_LEAST8_MAX }; verify (TYPE_MAXIMUM (uint_least8_t) == UINT_LEAST8_MAX); verify_same_types (UINT_LEAST8_MAX, (uint_least8_t) 0 + 0); uint_least16_t d2[2] = { 17, UINT_LEAST16_MAX }; verify (TYPE_MAXIMUM (uint_least16_t) == UINT_LEAST16_MAX); verify_same_types (UINT_LEAST16_MAX, (uint_least16_t) 0 + 0); uint_least32_t d3[2] = { 17, UINT_LEAST32_MAX }; verify (TYPE_MAXIMUM (uint_least32_t) == UINT_LEAST32_MAX); verify_same_types (UINT_LEAST32_MAX, (uint_least32_t) 0 + 0); #ifdef UINT_LEAST64_MAX uint_least64_t d4[2] = { 17, UINT_LEAST64_MAX }; verify (TYPE_MAXIMUM (uint_least64_t) == UINT_LEAST64_MAX); verify_same_types (UINT_LEAST64_MAX, (uint_least64_t) 0 + 0); #endif #if INT_LEAST8_MIN && INT_LEAST8_MAX && INT_LEAST16_MIN && INT_LEAST16_MAX && INT_LEAST32_MIN && INT_LEAST32_MAX /* ok */ #else err or; #endif #if UINT_LEAST8_MAX && UINT_LEAST16_MAX && UINT_LEAST32_MAX /* ok */ #else err or; #endif /* 7.18.1.3. Fastest minimum-width integer types */ /* 7.18.2.3. Limits of fastest minimum-width integer types */ int_fast8_t e1[3] = { 17, INT_FAST8_MIN, INT_FAST8_MAX }; verify (TYPE_MINIMUM (int_fast8_t) == INT_FAST8_MIN); verify (TYPE_MAXIMUM (int_fast8_t) == INT_FAST8_MAX); verify_same_types (INT_FAST8_MIN, (int_fast8_t) 0 + 0); verify_same_types (INT_FAST8_MAX, (int_fast8_t) 0 + 0); int_fast16_t e2[3] = { 17, INT_FAST16_MIN, INT_FAST16_MAX }; verify (TYPE_MINIMUM (int_fast16_t) == INT_FAST16_MIN); verify (TYPE_MAXIMUM (int_fast16_t) == INT_FAST16_MAX); verify_same_types (INT_FAST16_MIN, (int_fast16_t) 0 + 0); verify_same_types (INT_FAST16_MAX, (int_fast16_t) 0 + 0); int_fast32_t e3[3] = { 17, INT_FAST32_MIN, INT_FAST32_MAX }; verify (TYPE_MINIMUM (int_fast32_t) == INT_FAST32_MIN); verify (TYPE_MAXIMUM (int_fast32_t) == INT_FAST32_MAX); verify_same_types (INT_FAST32_MIN, (int_fast32_t) 0 + 0); verify_same_types (INT_FAST32_MAX, (int_fast32_t) 0 + 0); #ifdef INT_FAST64_MAX int_fast64_t e4[3] = { 17, INT_FAST64_MIN, INT_FAST64_MAX }; verify (TYPE_MINIMUM (int_fast64_t) == INT_FAST64_MIN); verify (TYPE_MAXIMUM (int_fast64_t) == INT_FAST64_MAX); verify_same_types (INT_FAST64_MIN, (int_fast64_t) 0 + 0); verify_same_types (INT_FAST64_MAX, (int_fast64_t) 0 + 0); #endif uint_fast8_t f1[2] = { 17, UINT_FAST8_MAX }; verify (TYPE_MAXIMUM (uint_fast8_t) == UINT_FAST8_MAX); verify_same_types (UINT_FAST8_MAX, (uint_fast8_t) 0 + 0); uint_fast16_t f2[2] = { 17, UINT_FAST16_MAX }; verify (TYPE_MAXIMUM (uint_fast16_t) == UINT_FAST16_MAX); verify_same_types (UINT_FAST16_MAX, (uint_fast16_t) 0 + 0); uint_fast32_t f3[2] = { 17, UINT_FAST32_MAX }; verify (TYPE_MAXIMUM (uint_fast32_t) == UINT_FAST32_MAX); verify_same_types (UINT_FAST32_MAX, (uint_fast32_t) 0 + 0); #ifdef UINT_FAST64_MAX uint_fast64_t f4[2] = { 17, UINT_FAST64_MAX }; verify (TYPE_MAXIMUM (uint_fast64_t) == UINT_FAST64_MAX); verify_same_types (UINT_FAST64_MAX, (uint_fast64_t) 0 + 0); #endif #if INT_FAST8_MIN && INT_FAST8_MAX && INT_FAST16_MIN && INT_FAST16_MAX && INT_FAST32_MIN && INT_FAST32_MAX /* ok */ #else err or; #endif #if UINT_FAST8_MAX && UINT_FAST16_MAX && UINT_FAST32_MAX /* ok */ #else err or; #endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* 7.18.2.4. Limits of integer types capable of holding object pointers */ intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX }; verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN); verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX); verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0); verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0); uintptr_t h[2] = { 17, UINTPTR_MAX }; verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX); verify_same_types (UINTPTR_MAX, (uintptr_t) 0 + 0); #if INTPTR_MIN && INTPTR_MAX && UINTPTR_MAX /* ok */ #else err or; #endif /* 7.18.1.5. Greatest-width integer types */ /* 7.18.2.5. Limits of greatest-width integer types */ intmax_t i[3] = { INTMAX_C (17), INTMAX_MIN, INTMAX_MAX }; verify (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); verify (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); verify_same_types (INTMAX_MIN, (intmax_t) 0 + 0); verify_same_types (INTMAX_MAX, (intmax_t) 0 + 0); uintmax_t j[2] = { UINTMAX_C (17), UINTMAX_MAX }; verify (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); verify_same_types (UINTMAX_MAX, (uintmax_t) 0 + 0); /* As of 2007, Sun C and HP-UX 10.20 cc don't support 'long long' constants in the preprocessor. */ #if !(defined __SUNPRO_C || (defined __hpux && !defined __GNUC__)) #if INTMAX_MIN && INTMAX_MAX && UINTMAX_MAX /* ok */ #else err or; #endif #endif /* 7.18.3. Limits of other integer types */ #include verify (TYPE_MINIMUM (ptrdiff_t) == PTRDIFF_MIN); verify (TYPE_MAXIMUM (ptrdiff_t) == PTRDIFF_MAX); verify_same_types (PTRDIFF_MIN, (ptrdiff_t) 0 + 0); verify_same_types (PTRDIFF_MAX, (ptrdiff_t) 0 + 0); #if PTRDIFF_MIN && PTRDIFF_MAX /* ok */ #else err or; #endif #include verify (TYPE_MINIMUM (sig_atomic_t) == SIG_ATOMIC_MIN); verify (TYPE_MAXIMUM (sig_atomic_t) == SIG_ATOMIC_MAX); verify_same_types (SIG_ATOMIC_MIN, (sig_atomic_t) 0 + 0); verify_same_types (SIG_ATOMIC_MAX, (sig_atomic_t) 0 + 0); #if SIG_ATOMIC_MIN != 17 && SIG_ATOMIC_MAX /* ok */ #else err or; #endif verify (TYPE_MAXIMUM (size_t) == SIZE_MAX); verify_same_types (SIZE_MAX, (size_t) 0 + 0); #if SIZE_MAX /* ok */ #else err or; #endif #if HAVE_WCHAR_T verify (TYPE_MINIMUM (wchar_t) == WCHAR_MIN); verify (TYPE_MAXIMUM (wchar_t) == WCHAR_MAX); verify_same_types (WCHAR_MIN, (wchar_t) 0 + 0); verify_same_types (WCHAR_MAX, (wchar_t) 0 + 0); # if WCHAR_MIN != 17 && WCHAR_MAX /* ok */ # else err or; # endif #endif #if HAVE_WINT_T # include verify (TYPE_MINIMUM (wint_t) == WINT_MIN); verify (TYPE_MAXIMUM (wint_t) == WINT_MAX); verify_same_types (WINT_MIN, (wint_t) 0 + 0); verify_same_types (WINT_MAX, (wint_t) 0 + 0); # if WINT_MIN != 17 && WINT_MAX /* ok */ # else err or; # endif #endif /* 7.18.4. Macros for integer constants */ verify (INT8_C (17) == 17); verify_same_types (INT8_C (17), (int_least8_t)0 + 0); verify (UINT8_C (17) == 17); verify_same_types (UINT8_C (17), (uint_least8_t)0 + 0); verify (INT16_C (17) == 17); verify_same_types (INT16_C (17), (int_least16_t)0 + 0); verify (UINT16_C (17) == 17); verify_same_types (UINT16_C (17), (uint_least16_t)0 + 0); verify (INT32_C (17) == 17); verify_same_types (INT32_C (17), (int_least32_t)0 + 0); verify (UINT32_C (17) == 17); verify_same_types (UINT32_C (17), (uint_least32_t)0 + 0); #ifdef INT64_C verify (INT64_C (17) == 17); verify_same_types (INT64_C (17), (int_least64_t)0 + 0); #endif #ifdef UINT64_C verify (UINT64_C (17) == 17); verify_same_types (UINT64_C (17), (uint_least64_t)0 + 0); #endif verify (INTMAX_C (17) == 17); verify_same_types (INTMAX_C (17), (intmax_t)0 + 0); verify (UINTMAX_C (17) == 17); verify_same_types (UINTMAX_C (17), (uintmax_t)0 + 0); /* Use _GL_VERIFY (with a fixed-length diagnostic string) rather than verify, because the latter would require forming each stringified expression, and many of these would be so long as to trigger a warning/error like this: test-stdint.c:407:1: error: string length '6980' is greater than the \ length '4095' ISO C99 compilers are required to support \ [-Werror=overlength-strings] */ #define verify_width(width, min, max) \ _GL_VERIFY ((max) >> ((width) - 1 - ((min) < 0)) == 1, \ "verify_width check") /* Macros specified by ISO/IEC TS 18661-1:2014. */ #ifdef INT8_MAX verify_width (INT8_WIDTH, INT8_MIN, INT8_MAX); #endif #ifdef UINT8_MAX verify_width (UINT8_WIDTH, 0, UINT8_MAX); #endif #ifdef INT16_MAX verify_width (INT16_WIDTH, INT16_MIN, INT16_MAX); #endif #ifdef UINT16_MAX verify_width (UINT16_WIDTH, 0, UINT16_MAX); #endif #ifdef INT32_MAX verify_width (INT32_WIDTH, INT32_MIN, INT32_MAX); #endif #ifdef UINT32_MAX verify_width (UINT32_WIDTH, 0, UINT32_MAX); #endif #ifdef INT64_MAX verify_width (INT64_WIDTH, INT64_MIN, INT64_MAX); #endif #ifdef UINT64_MAX verify_width (UINT64_WIDTH, 0, UINT64_MAX); #endif verify_width (INT_LEAST8_WIDTH, INT_LEAST8_MIN, INT_LEAST8_MAX); verify_width (UINT_LEAST8_WIDTH, 0, UINT_LEAST8_MAX); verify_width (INT_LEAST16_WIDTH, INT_LEAST16_MIN, INT_LEAST16_MAX); verify_width (UINT_LEAST16_WIDTH, 0, UINT_LEAST16_MAX); verify_width (INT_LEAST32_WIDTH, INT_LEAST32_MIN, INT_LEAST32_MAX); verify_width (UINT_LEAST32_WIDTH, 0, UINT_LEAST32_MAX); verify_width (INT_LEAST64_WIDTH, INT_LEAST64_MIN, INT_LEAST64_MAX); verify_width (UINT_LEAST64_WIDTH, 0, UINT_LEAST64_MAX); verify_width (INT_FAST8_WIDTH, INT_FAST8_MIN, INT_FAST8_MAX); verify_width (UINT_FAST8_WIDTH, 0, UINT_FAST8_MAX); verify_width (INT_FAST16_WIDTH, INT_FAST16_MIN, INT_FAST16_MAX); verify_width (UINT_FAST16_WIDTH, 0, UINT_FAST16_MAX); verify_width (INT_FAST32_WIDTH, INT_FAST32_MIN, INT_FAST32_MAX); verify_width (UINT_FAST32_WIDTH, 0, UINT_FAST32_MAX); verify_width (INT_FAST64_WIDTH, INT_FAST64_MIN, INT_FAST64_MAX); verify_width (UINT_FAST64_WIDTH, 0, UINT_FAST64_MAX); verify_width (INTPTR_WIDTH, INTPTR_MIN, INTPTR_MAX); verify_width (UINTPTR_WIDTH, 0, UINTPTR_MAX); verify_width (INTMAX_WIDTH, INTMAX_MIN, INTMAX_MAX); verify_width (UINTMAX_WIDTH, 0, UINTMAX_MAX); verify_width (PTRDIFF_WIDTH, PTRDIFF_MIN, PTRDIFF_MAX); verify_width (SIZE_WIDTH, 0, SIZE_MAX); verify_width (WCHAR_WIDTH, WCHAR_MIN, WCHAR_MAX); #ifdef WINT_MAX verify_width (WINT_WIDTH, WINT_MIN, WINT_MAX); #endif #ifdef SIG_ATOMIC_MAX verify_width (SIG_ATOMIC_WIDTH, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX); #endif int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-stddef.c0000644000175000017500000000540013217200024016371 00000000000000/* Test of substitute. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include #include #include #include "verify.h" /* Check that appropriate types are defined. */ wchar_t a = 'c'; ptrdiff_t b = 1; size_t c = 2; max_align_t x; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); /* Check that offsetof produces integer constants with correct type. */ struct d { char e; char f; }; /* Solaris 10 has a bug where offsetof is under-parenthesized, and cannot be used as an arbitrary expression. However, since it is unlikely to bite real code, we ignore that short-coming. */ /* verify (sizeof offsetof (struct d, e) == sizeof (size_t)); */ verify (sizeof (offsetof (struct d, e)) == sizeof (size_t)); verify (offsetof (struct d, f) == 1); /* offsetof promotes to an unsigned integer if and only if sizes do not fit in int. */ verify ((offsetof (struct d, e) < -1) == (INT_MAX < (size_t) -1)); /* Check max_align_t's alignment. */ verify (alignof (double) <= alignof (max_align_t)); verify (alignof (int) <= alignof (max_align_t)); verify (alignof (long double) <= alignof (max_align_t)); verify (alignof (long int) <= alignof (max_align_t)); verify (alignof (ptrdiff_t) <= alignof (max_align_t)); verify (alignof (size_t) <= alignof (max_align_t)); verify (alignof (wchar_t) <= alignof (max_align_t)); verify (alignof (struct d) <= alignof (max_align_t)); #if defined __GNUC__ || defined __IBM__ALIGNOF__ verify (__alignof__ (double) <= __alignof__ (max_align_t)); verify (__alignof__ (int) <= __alignof__ (max_align_t)); verify (__alignof__ (long double) <= __alignof__ (max_align_t)); verify (__alignof__ (long int) <= __alignof__ (max_align_t)); verify (__alignof__ (ptrdiff_t) <= __alignof__ (max_align_t)); verify (__alignof__ (size_t) <= __alignof__ (max_align_t)); verify (__alignof__ (wchar_t) <= __alignof__ (max_align_t)); verify (__alignof__ (struct d) <= __alignof__ (max_align_t)); #endif int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-stdbool.c0000644000175000017500000000663613217200024016602 00000000000000/* Test of substitute. Copyright (C) 2002-2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ /* We want this test to succeed even when using gcc's -Werror; but to do that requires a pragma that didn't exist before 4.3.0. */ #ifndef __GNUC__ # define ADDRESS_CHECK_OKAY #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) /* No way to silence -Waddress. */ #else # pragma GCC diagnostic ignored "-Waddress" # define ADDRESS_CHECK_OKAY #endif #include #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif /* Several tests cannot be guaranteed with gnulib's , at least, not for all compilers and compiler options. */ #if HAVE_STDBOOL_H || 3 <= __GNUC__ struct s { _Bool s: 1; _Bool t; } s; #endif char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; #if HAVE_STDBOOL_H || 3 <= __GNUC__ /* See above. */ char d[(bool) 0.5 == true ? 1 : -1]; # ifdef ADDRESS_CHECK_OKAY /* Avoid gcc warning. */ /* C99 may plausibly be interpreted as not requiring support for a cast from a variable's address to bool in a static initializer. So treat it like a GCC extension. */ # ifdef __GNUC__ bool e = &s; # endif # endif char f[(_Bool) 0.0 == false ? 1 : -1]; #endif char g[true]; char h[sizeof (_Bool)]; #if HAVE_STDBOOL_H || 3 <= __GNUC__ /* See above. */ char i[sizeof s.t]; #endif enum { j = false, k = true, l = false * true, m = true * 256 }; _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { int error = 0; #if HAVE_STDBOOL_H || 3 <= __GNUC__ /* See above. */ # ifdef ADDRESS_CHECK_OKAY /* Avoid gcc warning. */ /* A cast from a variable's address to bool is valid in expressions. */ { bool e1 = &s; if (!e1) error = 1; } # endif #endif /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 reported by James Lemley on 2005-10-05; see https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html This is a runtime test, since a corresponding compile-time test would rely on initializer extensions. */ { char digs[] = "0123456789"; if (&(digs + 5)[-2 + (bool) 1] != &digs[4]) error = 1; } return error; } gnuastro-0.5/bootstrapped/tests/test-stdalign.c0000644000175000017500000000733213217200024016733 00000000000000/* Test of . Copyright 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paul Eggert, inspired by Bruno Haible's test-alignof.c. */ #include #include #include #include #include "verify.h" #include "macros.h" typedef long double longdouble; typedef struct { char a[1]; } struct1; typedef struct { char a[2]; } struct2; typedef struct { char a[3]; } struct3; typedef struct { char a[4]; } struct4; verify (__alignof_is_defined == 1); #ifndef alignof # error "alignof is not a macro" #endif #if __alignas_is_defined verify (__alignas_is_defined == 1); # ifndef alignas # error "alignas is not a macro" # endif /* mingw can go up only to 8. 8 is all that GNU Emacs needs, so let's limit the test to 8 for now. */ # define TEST_ALIGNMENT 8 #else # define _Alignas(alignment) # define alignas(alignment) # define TEST_ALIGNMENT 1 #endif #define CHECK_STATIC(type) \ typedef struct { char slot1; type slot2; } type##_helper; \ verify (alignof (type) == offsetof (type##_helper, slot2)); \ verify (_Alignof (type) == alignof (type)); \ const int type##_alignment = alignof (type); \ type alignas (TEST_ALIGNMENT) static_##type##_alignas; \ type _Alignas (TEST_ALIGNMENT) static_##type##_Alignas #define CHECK_ALIGNED(var) ASSERT ((uintptr_t) &(var) % TEST_ALIGNMENT == 0) CHECK_STATIC (char); CHECK_STATIC (short); CHECK_STATIC (int); CHECK_STATIC (long); #ifdef INT64_MAX CHECK_STATIC (int64_t); #endif CHECK_STATIC (float); CHECK_STATIC (double); /* CHECK_STATIC (longdouble); */ CHECK_STATIC (struct1); CHECK_STATIC (struct2); CHECK_STATIC (struct3); CHECK_STATIC (struct4); int main () { #if defined __SUNPRO_C /* Avoid a test failure due to Sun Studio Developer Bug Report #2125432. */ fputs ("Skipping test: known Sun C compiler bug\n", stderr); return 77; #elif defined __HP_cc && __ia64 /* Avoid a test failure due to HP-UX Itanium cc bug; see: https://lists.gnu.org/r/bug-gnulib/2017-03/msg00078.html */ fputs ("Skipping test: known HP-UX Itanium cc compiler bug\n", stderr); return 77; #else CHECK_ALIGNED (static_char_alignas); CHECK_ALIGNED (static_char_Alignas); CHECK_ALIGNED (static_short_alignas); CHECK_ALIGNED (static_short_Alignas); CHECK_ALIGNED (static_int_alignas); CHECK_ALIGNED (static_int_Alignas); CHECK_ALIGNED (static_long_alignas); CHECK_ALIGNED (static_long_Alignas); # ifdef INT64_MAX CHECK_ALIGNED (static_int64_t_alignas); CHECK_ALIGNED (static_int64_t_Alignas); # endif CHECK_ALIGNED (static_float_alignas); CHECK_ALIGNED (static_float_Alignas); CHECK_ALIGNED (static_double_alignas); CHECK_ALIGNED (static_double_Alignas); /* CHECK_ALIGNED (static_longdouble_alignas); */ /* CHECK_ALIGNED (static_longdouble_Alignas); */ CHECK_ALIGNED (static_struct1_alignas); CHECK_ALIGNED (static_struct1_Alignas); CHECK_ALIGNED (static_struct2_alignas); CHECK_ALIGNED (static_struct2_Alignas); CHECK_ALIGNED (static_struct3_alignas); CHECK_ALIGNED (static_struct3_Alignas); CHECK_ALIGNED (static_struct4_alignas); CHECK_ALIGNED (static_struct4_Alignas); return 0; #endif } gnuastro-0.5/bootstrapped/tests/test-stat-time.c0000644000175000017500000001527013217200024017035 00000000000000/* Test of . Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by James Youngman , 2007. */ #include #include "stat-time.h" #include #include #include #include #include #include #include "macros.h" #define BASE "test-stat-time.t" #include "nap.h" enum { NFILES = 4 }; static char filename_stamp1[50]; static char filename_testfile[50]; static char filename_stamp2[50]; static char filename_stamp3[50]; /* Use file names that are different at each run. This is necessary for test_birthtime() to pass on native Windows: On this platform, the file system apparently remembers the creation time of a file even after it is removed and created anew. See "Windows NT Contains File System Tunneling Capabilities" */ static void initialize_filenames (void) { long t = (long) time (NULL); sprintf (filename_stamp1, "t-stt-%ld-stamp1", t); sprintf (filename_testfile, "t-stt-%ld-testfile", t); sprintf (filename_stamp2, "t-stt-%ld-stamp2", t); sprintf (filename_stamp3, "t-stt-%ld-stamp3", t); } static int force_unlink (const char *filename) { /* This chmod is necessary on mingw, where unlink() of a read-only file fails with EPERM. */ chmod (filename, 0600); return unlink (filename); } static void cleanup (int sig) { /* Remove temporary files. */ force_unlink (filename_stamp1); force_unlink (filename_testfile); force_unlink (filename_stamp2); force_unlink (filename_stamp3); if (sig != 0) _exit (1); } static int open_file (const char *filename, int flags) { int fd = open (filename, flags | O_WRONLY, 0500); if (fd >= 0) { close (fd); return 1; } else { return 0; } } static void create_file (const char *filename) { ASSERT (open_file (filename, O_CREAT | O_EXCL)); } static void do_stat (const char *filename, struct stat *p) { ASSERT (stat (filename, p) == 0); } static void prepare_test (struct stat *statinfo, struct timespec *modtimes) { int i; create_file (filename_stamp1); nap (); create_file (filename_testfile); nap (); create_file (filename_stamp2); nap (); ASSERT (chmod (filename_testfile, 0400) == 0); nap (); create_file (filename_stamp3); do_stat (filename_stamp1, &statinfo[0]); do_stat (filename_testfile, &statinfo[1]); do_stat (filename_stamp2, &statinfo[2]); do_stat (filename_stamp3, &statinfo[3]); /* Now use our access functions. */ for (i = 0; i < NFILES; ++i) { modtimes[i] = get_stat_mtime (&statinfo[i]); } } static void test_mtime (const struct stat *statinfo, struct timespec *modtimes) { int i; /* Use the struct stat fields directly. */ /* mtime(stamp1) < mtime(stamp2) */ ASSERT (statinfo[0].st_mtime < statinfo[2].st_mtime || (statinfo[0].st_mtime == statinfo[2].st_mtime && (get_stat_mtime_ns (&statinfo[0]) < get_stat_mtime_ns (&statinfo[2])))); /* mtime(stamp2) < mtime(stamp3) */ ASSERT (statinfo[2].st_mtime < statinfo[3].st_mtime || (statinfo[2].st_mtime == statinfo[3].st_mtime && (get_stat_mtime_ns (&statinfo[2]) < get_stat_mtime_ns (&statinfo[3])))); /* Now check the result of the access functions. */ /* mtime(stamp1) < mtime(stamp2) */ ASSERT (modtimes[0].tv_sec < modtimes[2].tv_sec || (modtimes[0].tv_sec == modtimes[2].tv_sec && modtimes[0].tv_nsec < modtimes[2].tv_nsec)); /* mtime(stamp2) < mtime(stamp3) */ ASSERT (modtimes[2].tv_sec < modtimes[3].tv_sec || (modtimes[2].tv_sec == modtimes[3].tv_sec && modtimes[2].tv_nsec < modtimes[3].tv_nsec)); /* verify equivalence */ for (i = 0; i < NFILES; ++i) { struct timespec ts; ts = get_stat_mtime (&statinfo[i]); ASSERT (ts.tv_sec == statinfo[i].st_mtime); } } #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* Skip the ctime tests on native Windows platforms, because their st_ctime is either the same as st_mtime (plus or minus an offset) or set to the file _creation_ time, and is not influenced by rename or chmod. */ # define test_ctime(ignored) ((void) 0) #else static void test_ctime (const struct stat *statinfo) { /* On some buggy NFS clients, mtime and ctime are disproportionately skewed from one another. Skip this test in that case. */ if (statinfo[0].st_mtime != statinfo[0].st_ctime) return; /* mtime(stamp2) < ctime(testfile) */ ASSERT (statinfo[2].st_mtime < statinfo[1].st_ctime || (statinfo[2].st_mtime == statinfo[1].st_ctime && (get_stat_mtime_ns (&statinfo[2]) < get_stat_ctime_ns (&statinfo[1])))); } #endif static void test_birthtime (const struct stat *statinfo, const struct timespec *modtimes, struct timespec *birthtimes) { int i; /* Collect the birth times. */ for (i = 0; i < NFILES; ++i) { birthtimes[i] = get_stat_birthtime (&statinfo[i]); if (birthtimes[i].tv_nsec < 0) return; } /* mtime(stamp1) < birthtime(testfile) */ ASSERT (modtimes[0].tv_sec < birthtimes[1].tv_sec || (modtimes[0].tv_sec == birthtimes[1].tv_sec && modtimes[0].tv_nsec < birthtimes[1].tv_nsec)); /* birthtime(testfile) < mtime(stamp2) */ ASSERT (birthtimes[1].tv_sec < modtimes[2].tv_sec || (birthtimes[1].tv_sec == modtimes[2].tv_sec && birthtimes[1].tv_nsec < modtimes[2].tv_nsec)); } int main (void) { struct stat statinfo[NFILES]; struct timespec modtimes[NFILES]; struct timespec birthtimes[NFILES]; initialize_filenames (); #ifdef SIGHUP signal (SIGHUP, cleanup); #endif #ifdef SIGINT signal (SIGINT, cleanup); #endif #ifdef SIGQUIT signal (SIGQUIT, cleanup); #endif #ifdef SIGTERM signal (SIGTERM, cleanup); #endif cleanup (0); prepare_test (statinfo, modtimes); test_mtime (statinfo, modtimes); test_ctime (statinfo); test_birthtime (statinfo, modtimes, birthtimes); cleanup (0); return 0; } gnuastro-0.5/bootstrapped/tests/test-stat.c0000644000175000017500000000313413217200024016075 00000000000000/* Tests of stat. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include /* Caution: stat may be a function-like macro. Although this signature check must pass, it may be the signature of the real (and broken) stat rather than rpl_stat. Most code should not use the address of stat. */ #include "signature.h" SIGNATURE_CHECK (stat, int, (char const *, struct stat *)); #include #include #include #include #include #include #include "same-inode.h" #include "macros.h" #define BASE "test-stat.t" #include "test-stat.h" /* Wrapper around stat, which works even if stat is a function-like macro, where test_stat_func(stat) would do the wrong thing. */ static int do_stat (char const *name, struct stat *st) { return stat (name, st); } int main (void) { return test_stat_func (do_stat, true); } gnuastro-0.5/bootstrapped/tests/test-sockets.c0000644000175000017500000000216413217200024016577 00000000000000/* * Copyright (C) 2008-2017 Free Software Foundation, Inc. * Written by Simon Josefsson. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include "sockets.h" int main (void) { int err; err = gl_sockets_startup (SOCKETS_1_1); if (err != 0) { printf ("wsastartup failed %d\n", err); return 1; } err = gl_sockets_cleanup (); if (err != 0) { printf ("wsacleanup failed %d\n", err); return 1; } (void) gl_fd_to_handle (0); return 0; } gnuastro-0.5/bootstrapped/tests/test-sleep.c0000644000175000017500000000263313217200024016235 00000000000000/* Test of sleep() function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "signature.h" SIGNATURE_CHECK (sleep, unsigned int, (unsigned int)); #include #include "macros.h" #if HAVE_DECL_ALARM static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (1); } #endif int main (void) { ASSERT (sleep (1) <= 1); ASSERT (sleep (0) == 0); #if HAVE_DECL_ALARM { const unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ unsigned int remaining; signal (SIGALRM, handle_alarm); alarm (1); remaining = sleep (pentecost); ASSERT (pentecost - 10 < remaining && remaining <= pentecost); } #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-sigprocmask.c0000644000175000017500000000510713217200024017446 00000000000000/* Test of sigprocmask. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2011. */ #include #include #include "signature.h" SIGNATURE_CHECK (sigprocmask, int, (int, const sigset_t *, sigset_t *)); #include #include #include #include #include "macros.h" #if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main (int argc, char *argv[]) { sigset_t set; pid_t pid = getpid (); char command[80]; if (sizeof (int) < sizeof pid && 0x7fffffff < pid) { fputs ("Skipping test: pid too large\n", stderr); return 77; } signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); /* Check error handling. */ ASSERT (sigprocmask (1729, &set, NULL) == -1); ASSERT (errno == EINVAL); /* Block SIGINT. */ ASSERT (sigprocmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from outside. */ sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, (int) pid); ASSERT (system (command) == 0); /* Wait. */ sleep (2); /* The signal should not have arrived yet, because it is blocked. */ ASSERT (sigint_occurred == 0); /* Unblock SIGINT. */ ASSERT (sigprocmask (SIG_UNBLOCK, &set, NULL) == 0); /* The signal should have arrived now, because POSIX says "If there are any pending unblocked signals after the call to sigprocmask(), at least one of those signals shall be delivered before the call to sigprocmask() returns." */ ASSERT (sigint_occurred == 1); return 0; } #else /* On native Windows, getpid() values and the arguments that are passed to the (Cygwin?) 'kill' program are not necessarily related. */ int main () { fputs ("Skipping test: native Windows platform\n", stderr); return 77; } #endif gnuastro-0.5/bootstrapped/tests/test-signbit.c0000644000175000017500000001267313217200024016571 00000000000000/* Test of signbit() substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include /* signbit must be a macro. */ #ifndef signbit # error missing declaration #endif #include #include #include "minus-zero.h" #include "infinity.h" #include "macros.h" float zerof = 0.0f; double zerod = 0.0; long double zerol = 0.0L; static void test_signbitf () { /* Finite values. */ ASSERT (!signbit (3.141f)); ASSERT (!signbit (3.141e30f)); ASSERT (!signbit (3.141e-30f)); ASSERT (signbit (-2.718f)); ASSERT (signbit (-2.718e30f)); ASSERT (signbit (-2.718e-30f)); /* Zeros. */ ASSERT (!signbit (0.0f)); if (1.0f / minus_zerof < 0) ASSERT (signbit (minus_zerof)); else ASSERT (!signbit (minus_zerof)); /* Infinite values. */ ASSERT (!signbit (Infinityf ())); ASSERT (signbit (- Infinityf ())); /* Quiet NaN. */ (void) signbit (zerof / zerof); #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* Signalling NaN. */ { #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; memory_float m; m.value = zerof / zerof; # if FLT_EXPBIT0_BIT > 0 m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); # else m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); # endif if (FLT_EXPBIT0_WORD < NWORDS / 2) m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; else m.word[0] |= (unsigned int) 1; (void) signbit (m.value); #undef NWORDS } #endif } static void test_signbitd () { /* Finite values. */ ASSERT (!signbit (3.141)); ASSERT (!signbit (3.141e30)); ASSERT (!signbit (3.141e-30)); ASSERT (signbit (-2.718)); ASSERT (signbit (-2.718e30)); ASSERT (signbit (-2.718e-30)); /* Zeros. */ ASSERT (!signbit (0.0)); if (1.0 / minus_zerod < 0) ASSERT (signbit (minus_zerod)); else ASSERT (!signbit (minus_zerod)); /* Infinite values. */ ASSERT (!signbit (Infinityd ())); ASSERT (signbit (- Infinityd ())); /* Quiet NaN. */ (void) signbit (zerod / zerod); #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT /* Signalling NaN. */ { #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; memory_double m; m.value = zerod / zerod; # if DBL_EXPBIT0_BIT > 0 m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); # else m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); # endif m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] |= (unsigned int) 1 << DBL_EXPBIT0_BIT; (void) signbit (m.value); #undef NWORDS } #endif } static void test_signbitl () { /* Finite values. */ ASSERT (!signbit (3.141L)); ASSERT (!signbit (3.141e30L)); ASSERT (!signbit (3.141e-30L)); ASSERT (signbit (-2.718L)); ASSERT (signbit (-2.718e30L)); ASSERT (signbit (-2.718e-30L)); /* Zeros. */ ASSERT (!signbit (0.0L)); if (1.0L / minus_zerol < 0) ASSERT (signbit (minus_zerol)); else ASSERT (!signbit (minus_zerol)); /* Infinite values. */ ASSERT (!signbit (Infinityl ())); ASSERT (signbit (- Infinityl ())); /* Quiet NaN. */ (void) signbit (zerol / zerol); #if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT /* Signalling NaN. */ { #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; #if defined __powerpc__ && LDBL_MANT_DIG == 106 /* This is PowerPC "double double", a pair of two doubles. Inf and Nan are represented as the corresponding 64-bit IEEE values in the first double; the second is ignored. Manipulate only the first double. */ #undef NWORDS #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) #endif memory_long_double m; m.value = zerol / zerol; # if LDBL_EXPBIT0_BIT > 0 m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); # else m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); # endif m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; (void) signbit (m.value); #undef NWORDS } #endif } int main () { test_signbitf (); test_signbitd (); test_signbitl (); return 0; } gnuastro-0.5/bootstrapped/tests/test-signal-h.c0000644000175000017500000000475313217200024016634 00000000000000/* Test of substitute. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include /* Check for required types. */ struct { size_t a; uid_t b; volatile sig_atomic_t c; sigset_t d; pid_t e; #if 0 /* Not guaranteed by gnulib. */ pthread_t f; struct timespec g; #endif } s; /* Check that NSIG is defined. */ int nsig = NSIG; int main (void) { switch (0) { /* The following are guaranteed by C. */ case 0: case SIGABRT: case SIGFPE: case SIGILL: case SIGINT: case SIGSEGV: case SIGTERM: /* The following is guaranteed by gnulib. */ #if GNULIB_SIGPIPE || defined SIGPIPE case SIGPIPE: #endif /* Ensure no conflict with other standardized names. */ #ifdef SIGALRM case SIGALRM: #endif /* On Haiku, SIGBUS is mistakenly equal to SIGSEGV. */ #if defined SIGBUS && SIGBUS != SIGSEGV case SIGBUS: #endif #ifdef SIGCHLD case SIGCHLD: #endif #ifdef SIGCONT case SIGCONT: #endif #ifdef SIGHUP case SIGHUP: #endif #ifdef SIGKILL case SIGKILL: #endif #ifdef SIGQUIT case SIGQUIT: #endif #ifdef SIGSTOP case SIGSTOP: #endif #ifdef SIGTSTP case SIGTSTP: #endif #ifdef SIGTTIN case SIGTTIN: #endif #ifdef SIGTTOU case SIGTTOU: #endif #ifdef SIGUSR1 case SIGUSR1: #endif #ifdef SIGUSR2 case SIGUSR2: #endif #ifdef SIGSYS case SIGSYS: #endif #ifdef SIGTRAP case SIGTRAP: #endif #ifdef SIGURG case SIGURG: #endif #ifdef SIGVTALRM case SIGVTALRM: #endif #ifdef SIGXCPU case SIGXCPU: #endif #ifdef SIGXFSZ case SIGXFSZ: #endif /* SIGRTMIN and SIGRTMAX need not be compile-time constants. */ #if 0 # ifdef SIGRTMIN case SIGRTMIN: # endif # ifdef SIGRTMAX case SIGRTMAX: # endif #endif ; } return s.a + s.b + s.c + s.e; } gnuastro-0.5/bootstrapped/tests/test-sigaction.c0000644000175000017500000000677513217200024017120 00000000000000/* Test of sigaction() function. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2008. */ #include #include #include "signature.h" SIGNATURE_CHECK (sigaction, int, (int, struct sigaction const *, struct sigaction *)); #include #include "macros.h" #ifndef SA_NOCLDSTOP # define SA_NOCLDSTOP 0 #endif #ifndef SA_ONSTACK # define SA_ONSTACK 0 #endif #ifndef SA_RESETHAND # define SA_RESETHAND 0 #endif #ifndef SA_RESTART # define SA_RESTART 0 #endif #ifndef SA_SIGINFO # define SA_SIGINFO 0 #endif #ifndef SA_NOCLDWAIT # define SA_NOCLDWAIT 0 #endif /* Define a mask of flags required by POSIX. Some implementations provide other flags as extensions, such as SA_RESTORER, that we must ignore in this test. */ #define MASK_SA_FLAGS (SA_NOCLDSTOP | SA_ONSTACK | SA_RESETHAND | SA_RESTART \ | SA_SIGINFO | SA_NOCLDWAIT | SA_NODEFER) /* This test is unsafe in the presence of an asynchronous SIGABRT, because we install a signal-handler that is intentionally not async-safe. Hopefully, this does not lead to too many reports of false failures, since people don't generally use 'kill -s SIGABRT' to end a runaway program. */ static void handler (int sig) { static int entry_count; struct sigaction sa; ASSERT (sig == SIGABRT); ASSERT (sigaction (SIGABRT, NULL, &sa) == 0); ASSERT ((sa.sa_flags & SA_SIGINFO) == 0); switch (entry_count++) { case 0: ASSERT ((sa.sa_flags & SA_RESETHAND) == 0); ASSERT (sa.sa_handler == handler); break; case 1: /* This assertion fails on glibc-2.3.6 systems with LinuxThreads, when this program is linked with -lpthread, due to the sigaction() override in libpthread.so. */ #if !(defined __GLIBC__ || defined __UCLIBC__) ASSERT (sa.sa_handler == SIG_DFL); #endif break; default: ASSERT (0); } } int main (void) { struct sigaction sa; struct sigaction old_sa; sa.sa_handler = handler; sa.sa_flags = 0; ASSERT (sigemptyset (&sa.sa_mask) == 0); ASSERT (sigaction (SIGABRT, &sa, NULL) == 0); ASSERT (raise (SIGABRT) == 0); sa.sa_flags = SA_RESETHAND | SA_NODEFER; ASSERT (sigaction (SIGABRT, &sa, &old_sa) == 0); ASSERT ((old_sa.sa_flags & MASK_SA_FLAGS) == 0); ASSERT (old_sa.sa_handler == handler); ASSERT (raise (SIGABRT) == 0); sa.sa_handler = SIG_DFL; ASSERT (sigaction (SIGABRT, &sa, &old_sa) == 0); ASSERT ((old_sa.sa_flags & SA_SIGINFO) == 0); #if !(defined __GLIBC__ || defined __UCLIBC__) /* see above */ ASSERT (old_sa.sa_handler == SIG_DFL); #endif sa.sa_handler = SIG_IGN; ASSERT (sigaction (SIGABRT, &sa, NULL) == 0); ASSERT (raise (SIGABRT) == 0); ASSERT (sigaction (SIGABRT, NULL, &old_sa) == 0); ASSERT (old_sa.sa_handler == SIG_IGN); ASSERT (raise (SIGABRT) == 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-setsockopt.c0000644000175000017500000000265613217200024017330 00000000000000/* Test setsockopt() function. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (setsockopt, int, (int, int, int, const void *, socklen_t)); #include #include #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { int value = 1; errno = 0; ASSERT (setsockopt (-1, SOL_SOCKET, SO_REUSEADDR, &value, sizeof (value)) == -1); ASSERT (errno == EBADF); } { int value = 1; close (99); errno = 0; ASSERT (setsockopt (99, SOL_SOCKET, SO_REUSEADDR, &value, sizeof (value)) == -1); ASSERT (errno == EBADF); } return 0; } gnuastro-0.5/bootstrapped/tests/test-setlocale2.c0000644000175000017500000000335013217200024017157 00000000000000/* Test of setting the current locale. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include int main () { /* Try to set the locale by implicitly looking at the LC_ALL environment variable. */ if (setlocale (LC_ALL, "") != NULL) /* It was successful. Check whether LC_CTYPE is non-trivial. */ if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) { fprintf (stderr, "setlocale did not fail for implicit %s\n", getenv ("LC_ALL")); return 1; } /* Reset the locale. */ if (setlocale (LC_ALL, "C") == NULL) return 1; /* Try to set the locale by explicitly looking at the LC_ALL environment variable. */ if (setlocale (LC_ALL, getenv ("LC_ALL")) != NULL) /* It was successful. Check whether LC_CTYPE is non-trivial. */ if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) { fprintf (stderr, "setlocale did not fail for explicit %s\n", getenv ("LC_ALL")); return 1; } return 0; } gnuastro-0.5/bootstrapped/tests/test-setlocale1.c0000644000175000017500000000334213217200024017157 00000000000000/* Test of setting the current locale. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (setlocale, char *, (int, const char *)); #include #include #include "macros.h" int main (int argc, char *argv[]) { char *name1; char *name2; /* Try to set the locale by implicitly looking at the LC_ALL environment variable. configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; name1 = strdup (setlocale (LC_ALL, NULL)); /* Reset the locale. */ if (setlocale (LC_ALL, "C") == NULL) return 1; /* Try to set the locale by explicitly looking at the LC_ALL environment variable. configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL) return 1; name2 = strdup (setlocale (LC_ALL, NULL)); /* Test that the two results are the same. */ ASSERT (strcmp (name1, name2) == 0); free (name1); free (name2); return 0; } gnuastro-0.5/bootstrapped/tests/test-setenv.c0000644000175000017500000000310713217200024016426 00000000000000/* Tests of setenv. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include #include "signature.h" SIGNATURE_CHECK (setenv, int, (char const *, char const *, int)); #include #include #include #include "macros.h" int main (void) { /* Test overwriting. */ ASSERT (setenv ("a", "==", -1) == 0); ASSERT (setenv ("a", "2", 0) == 0); ASSERT (strcmp (getenv ("a"), "==") == 0); /* Required to fail with EINVAL. */ errno = 0; ASSERT (setenv ("", "", 1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (setenv ("a=b", "", 0) == -1); ASSERT (errno == EINVAL); #if 0 /* glibc and gnulib's implementation guarantee this, but POSIX no longer requires it: http://austingroupbugs.net/view.php?id=185 */ errno = 0; ASSERT (setenv (NULL, "", 0) == -1); ASSERT (errno == EINVAL); #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-select-stdin.c0000644000175000017500000000433313217200024017522 00000000000000/* Test of select() substitute, reading from stdin. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include #include #include #include #include #include "macros.h" int main (void) { printf ("Applying select() from standard input. Press Ctrl-C to abort.\n"); for (;;) { struct timeval before; struct timeval after; unsigned long spent_usec; fd_set readfds; struct timeval timeout; int ret; gettimeofday (&before, NULL); FD_ZERO (&readfds); FD_SET (0, &readfds); timeout.tv_sec = 0; timeout.tv_usec = 500000; ret = select (1, &readfds, NULL, NULL, &timeout); gettimeofday (&after, NULL); spent_usec = (after.tv_sec - before.tv_sec) * 1000000 + after.tv_usec - before.tv_usec; if (ret < 0) { perror ("select failed"); exit (1); } if ((ret == 0) != ! FD_ISSET (0, &readfds)) { fprintf (stderr, "incorrect return value\n"); exit (1); } if (ret == 0) { if (spent_usec < 250000) { fprintf (stderr, "returned too early\n"); exit (1); } /* Timeout */ printf ("."); ASSERT (fflush (stdout) == 0); } else { char c; printf ("Input available! Trying to read 1 byte...\n"); ASSERT (read (0, &c, 1) == 1); } } } gnuastro-0.5/bootstrapped/tests/test-select-fd.c0000644000175000017500000000442613217200024016775 00000000000000/* Test of select() substitute, reading or writing from a given file descriptor. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include #include #include int main (int argc, char *argv[]) { if (argc == 4) { char mode = argv[1][0]; if (mode == 'r' || mode == 'w') { int fd = atoi (argv[2]); if (fd >= 0) { const char *result_file_name = argv[3]; FILE *result_file = fopen (result_file_name, "wb"); if (result_file != NULL) { fd_set fds; struct timeval timeout; int ret; FD_ZERO (&fds); FD_SET (fd, &fds); timeout.tv_sec = 0; timeout.tv_usec = 10000; ret = (mode == 'r' ? select (fd + 1, &fds, NULL, NULL, &timeout) : select (fd + 1, NULL, &fds, NULL, &timeout)); if (ret < 0) { perror ("select failed"); exit (1); } if ((ret == 0) != ! FD_ISSET (fd, &fds)) { fprintf (stderr, "incorrect return value\n"); exit (1); } fprintf (result_file, "%d\n", ret); exit (0); } } } } fprintf (stderr, "Usage: test-select-fd mode fd result-file-name\n"); exit (1); } gnuastro-0.5/bootstrapped/tests/test-select.c0000644000175000017500000000202613217200024016400 00000000000000/* Test of select() substitute. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paolo Bonzini, 2008. */ #include #include #include "signature.h" SIGNATURE_CHECK (select, int, (int, fd_set *, fd_set *, fd_set *, struct timeval *)); #include "test-select.h" int main (void) { return test_function (select); } gnuastro-0.5/bootstrapped/tests/test-rwlock1.c0000644000175000017500000001243313217200024016506 00000000000000/* Test of glthread_rwlock_rdlock function. Copyright (C) 2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2005. Inspired by https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c by Intel Corporation. */ #include #include "glthread/lock.h" #include #include #include #include #include "glthread/thread.h" #include "glthread/yield.h" /* Verify that in a situation where - an rwlock is taken by a reader and has a writer waiting, - an additional reader requests the lock, - the waiting writer and the requesting reader threads have the same priority, the requesting reader thread gets blocked, so that at some point the waiting writer can acquire the lock. Without such a guarantee, when there a N readers and each of the readers spends more than 1/Nth of the time with the lock held, there is a high probability that the waiting writer will not get the lock in a given finite time, a phenomenon called "writer starvation". Without such a guarantee, applications have a hard time avoiding writer starvation. POSIX:2008 makes this requirement only for implementations that support TPS (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO and SCHED_RR, see http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html but test verifies the guarantee regardless of TPS and regardless of scheduling policy. */ #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (fprintf (stderr, "Unexpected outcome %d\n", n), abort ()) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static gl_rwlock_t lock; static gl_thread_t reader1; static gl_thread_t writer; static gl_thread_t reader2; static gl_thread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static gl_lock_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (glthread_lock_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (glthread_lock_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9 omitted. */ /* Step 10: Launch a timer, to test whether the next call blocks. */ if (glthread_create (&timer, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (glthread_lock_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = glthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (glthread_lock_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (glthread_create (&reader2, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (glthread_lock_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (glthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = gl_thread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (glthread_rwlock_init (&lock)) UNEXPECTED (1); if (glthread_lock_init (&baton)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (glthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (glthread_create (&writer, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { /* In cooperative threads implementations (Pth), give other threads a chance to run. */ gl_thread_yield (); sleep (1); } } gnuastro-0.5/bootstrapped/tests/test-regex.c0000644000175000017500000001700513217200024016236 00000000000000/* Test regular expressions Copyright 1996-2001, 2003-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "regex.h" #include #include #include #include #if HAVE_DECL_ALARM # include # include #endif #include "localcharset.h" int main (void) { int result = 0; static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; #if HAVE_DECL_ALARM /* Some builds of glibc go into an infinite loop on this test. */ int alarm_value = 2; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { memset (®s, 0, sizeof regs); if (re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s) != -1) result |= 1; regfree (®ex); free (regs.start); free (regs.end); } } /* Check whether it's really a UTF-8 locale. On mingw, the setlocale call succeeds but returns "English_United States.1252", with locale_charset() returning "CP1252". */ if (strcmp (locale_charset (), "UTF-8") == 0) { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in . */ static char const pat[] = "[^x]x"; static char const data[] = /* */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { memset (®s, 0, sizeof regs); i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) result |= 1; regfree (®ex); free (regs.start); free (regs.end); } } if (! setlocale (LC_ALL, "C")) return 1; } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[^x]b", 6, ®ex); if (s) result |= 2; /* This should fail, but succeeds for glibc-2.5. */ else { memset (®s, 0, sizeof regs); if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; regfree (®ex); free (regs.start); free (regs.end); } /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) { result |= 4; regfree (®ex); } /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[b-a]", 6, ®ex); if (s == 0) { result |= 8; regfree (®ex); } /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("{1", 2, ®ex); if (s) result |= 8; else regfree (®ex); /* The following example is derived from a problem report against gawk from Jorge Stolfi . */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[an\371]*n", 7, ®ex); if (s) result |= 8; /* This should match, but does not for glibc-2.2.1. */ else { memset (®s, 0, sizeof regs); if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; regfree (®ex); free (regs.start); free (regs.end); } memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; /* glibc-2.2.93 does not work with a negative RANGE argument. */ else { memset (®s, 0, sizeof regs); if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; regfree (®ex); free (regs.start); free (regs.end); } /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 16; else { memset (®s, 0, sizeof regs); if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) result |= 16; regfree (®ex); free (regs.start); free (regs.end); } /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, ®ex); if (s) result |= 32; else regfree (®ex); /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) result |= 64; #endif return result; } gnuastro-0.5/bootstrapped/tests/test-rawmemchr.c0000644000175000017500000000475513217200024017121 00000000000000/* * Copyright (C) 2008-2017 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (rawmemchr, void *, (void const *, int)); #include #include "zerosize-ptr.h" #include "macros.h" /* Calculating void * + int is not portable, so this wrapper converts to char * to make the tests easier to write. */ #define RAWMEMCHR (char *) rawmemchr int main (void) { size_t n = 0x100000; char *input = malloc (n + 1); ASSERT (input); input[0] = 'a'; input[1] = 'b'; memset (input + 2, 'c', 1024); memset (input + 1026, 'd', n - 1028); input[n - 2] = 'e'; input[n - 1] = 'a'; input[n] = '\0'; /* Basic behavior tests. */ ASSERT (RAWMEMCHR (input, 'a') == input); ASSERT (RAWMEMCHR (input, 'b') == input + 1); ASSERT (RAWMEMCHR (input, 'c') == input + 2); ASSERT (RAWMEMCHR (input, 'd') == input + 1026); ASSERT (RAWMEMCHR (input + 1, 'a') == input + n - 1); ASSERT (RAWMEMCHR (input + 1, 'e') == input + n - 2); ASSERT (RAWMEMCHR (input + 1, 0x789abc00 | 'e') == input + n - 2); ASSERT (RAWMEMCHR (input, '\0') == input + n); /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = j; for (j = 0; j < 256; j++) { ASSERT (RAWMEMCHR (input + i, j) == input + i + j); } } } /* Ensure that no unaligned oversized reads occur. */ { char *page_boundary = (char *) zerosize_ptr (); size_t i; if (!page_boundary) page_boundary = input + 4096; memset (page_boundary - 512, '1', 511); page_boundary[-1] = '2'; for (i = 1; i <= 512; i++) ASSERT (RAWMEMCHR (page_boundary - i, (i * 0x01010100) | '2') == page_boundary - 1); } free (input); return 0; } gnuastro-0.5/bootstrapped/tests/test-raise.c0000644000175000017500000000264113217200024016227 00000000000000/* Test raising a signal. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (raise, int, (int)); #include #include "macros.h" /* It is safe to use _Noreturn here: exit() never returns, and GCC knows that exit() is a non-returning function, even on platforms where its declaration in does not have the 'noreturn' attribute. */ static _Noreturn void handler (int sig) { exit (0); } int main (void) { /* Test behaviour for invalid argument. */ ASSERT (raise (-1) != 0); /* Test behaviour for SIGINT. */ ASSERT (signal (SIGINT, handler) != SIG_ERR); raise (SIGINT); /* We should not get here, because the handler takes away the control. */ exit (1); } gnuastro-0.5/bootstrapped/tests/test-pthread_sigmask2.c0000644000175000017500000000453413217200024020356 00000000000000/* Test of pthread_sigmask in a multi-threaded program. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2011. */ #include #include #include #include #include #include "glthread/thread.h" #include "macros.h" #if USE_POSIX_THREADS static gl_thread_t main_thread; static gl_thread_t killer_thread; static void * killer_thread_func (void *arg) { sleep (1); pthread_kill (main_thread, SIGINT); return NULL; } static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main (int argc, char *argv[]) { sigset_t set; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); /* Check error handling. */ ASSERT (pthread_sigmask (1729, &set, NULL) == EINVAL); /* Block SIGINT. */ ASSERT (pthread_sigmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from another thread. */ main_thread = gl_thread_self (); ASSERT (glthread_create (&killer_thread, killer_thread_func, NULL) == 0); /* Wait. */ sleep (2); /* The signal should not have arrived yet, because it is blocked. */ ASSERT (sigint_occurred == 0); /* Unblock SIGINT. */ ASSERT (pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0); /* The signal should have arrived now, because POSIX says "If there are any pending unblocked signals after the call to pthread_sigmask(), at least one of those signals shall be delivered before the call to pthread_sigmask() returns." */ ASSERT (sigint_occurred == 1); return 0; } #else int main () { fputs ("Skipping test: POSIX threads not enabled\n", stderr); return 77; } #endif gnuastro-0.5/bootstrapped/tests/test-pthread_sigmask1.c0000644000175000017500000000472513217200024020357 00000000000000/* Test of pthread_sigmask in a single-threaded program. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2011. */ #include #include #include "signature.h" SIGNATURE_CHECK (pthread_sigmask, int, (int, const sigset_t *, sigset_t *)); #include #include #include #include #include "macros.h" #if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main (int argc, char *argv[]) { sigset_t set; int pid = getpid (); char command[80]; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); /* Check error handling. */ ASSERT (pthread_sigmask (1729, &set, NULL) == EINVAL); /* Block SIGINT. */ ASSERT (pthread_sigmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from outside. */ sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, pid); ASSERT (system (command) == 0); /* Wait. */ sleep (2); /* The signal should not have arrived yet, because it is blocked. */ ASSERT (sigint_occurred == 0); /* Unblock SIGINT. */ ASSERT (pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0); /* The signal should have arrived now, because POSIX says "If there are any pending unblocked signals after the call to pthread_sigmask(), at least one of those signals shall be delivered before the call to pthread_sigmask() returns." */ ASSERT (sigint_occurred == 1); return 0; } #else /* On native Windows, getpid() values and the arguments that are passed to the (Cygwin?) 'kill' program are not necessarily related. */ int main () { fputs ("Skipping test: native Windows platform\n", stderr); return 77; } #endif gnuastro-0.5/bootstrapped/tests/test-pipe.c0000644000175000017500000000537713217200024016072 00000000000000/* Test of pipe. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (pipe, int, (int[2])); #include #include #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif #endif #include "binary-io.h" #include "macros.h" /* Return true if FD is open. */ static bool is_open (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } /* Return true if FD is not inherited to child processes. */ static bool is_cloexec (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; ASSERT (GetHandleInformation (h, &flags)); return (flags & HANDLE_FLAG_INHERIT) == 0; #else int flags; ASSERT ((flags = fcntl (fd, F_GETFD)) >= 0); return (flags & FD_CLOEXEC) != 0; #endif } /* Return true if FD is in non-blocking mode. */ static bool is_nonblocking (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* We don't use the non-blocking mode for sockets here. */ return 0; #else int flags; ASSERT ((flags = fcntl (fd, F_GETFL)) >= 0); return (flags & O_NONBLOCK) != 0; #endif } int main () { int fd[2]; fd[0] = -1; fd[1] = -1; ASSERT (pipe (fd) >= 0); ASSERT (fd[0] >= 0); ASSERT (fd[1] >= 0); ASSERT (fd[0] != fd[1]); ASSERT (is_open (fd[0])); ASSERT (is_open (fd[1])); ASSERT (!is_cloexec (fd[0])); ASSERT (!is_cloexec (fd[1])); ASSERT (!is_nonblocking (fd[0])); ASSERT (!is_nonblocking (fd[1])); return 0; } gnuastro-0.5/bootstrapped/tests/test-perror2.c0000644000175000017500000000675613217200024016532 00000000000000/* Test of perror() function. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include #include #include /* This test intentionally parses stderr. So, we arrange to have fd 10 (outside the range of interesting fd's during the test) set up to duplicate the original stderr. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; #define BASE "test-perror2" int main (void) { /* We change fd 2 later, so save it in fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; ASSERT (freopen (BASE ".tmp", "w+", stderr) == stderr); /* Test that perror does not clobber strerror buffer. */ { const char *msg1; const char *msg2; const char *msg3; const char *msg4; char *str1; char *str2; char *str3; char *str4; msg1 = strerror (ENOENT); ASSERT (msg1); str1 = strdup (msg1); ASSERT (str1); msg2 = strerror (ERANGE); ASSERT (msg2); str2 = strdup (msg2); ASSERT (str2); msg3 = strerror (-4); ASSERT (msg3); str3 = strdup (msg3); ASSERT (str3); msg4 = strerror (1729576); ASSERT (msg4); str4 = strdup (msg4); ASSERT (str4); errno = EACCES; perror (""); errno = -5; perror (""); ASSERT (!ferror (stderr)); ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1)); ASSERT (msg2 == msg4 || STREQ (msg2, str2)); ASSERT (msg3 == msg4 || STREQ (msg3, str3)); ASSERT (STREQ (msg4, str4)); free (str1); free (str2); free (str3); free (str4); } /* Test that perror uses the same message as strerror. */ { int errs[] = { EACCES, 0, -3, }; int i; for (i = 0; i < SIZEOF (errs); i++) { char buf[256]; char *err = strerror (errs[i]); ASSERT (err); ASSERT (strlen (err) < sizeof buf); rewind (stderr); ASSERT (ftruncate (fileno (stderr), 0) == 0); errno = errs[i]; perror (NULL); ASSERT (!ferror (stderr)); rewind (stderr); ASSERT (fgets (buf, sizeof buf, stderr) == buf); ASSERT (strstr (buf, err)); } } /* Test that perror reports write failure. */ { ASSERT (freopen (BASE ".tmp", "r", stderr) == stderr); ASSERT (setvbuf (stderr, NULL, _IONBF, BUFSIZ) == 0); errno = -1; ASSERT (!ferror (stderr)); perror (NULL); #if 0 /* Commented out until cygwin behaves: https://sourceware.org/ml/newlib/2011/msg00228.html */ ASSERT (errno > 0); /* Commented out until glibc behaves: https://sourceware.org/bugzilla/show_bug.cgi?id=12792 */ ASSERT (ferror (stderr)); #endif } ASSERT (fclose (stderr) == 0); ASSERT (remove (BASE ".tmp") == 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-perror.c0000644000175000017500000000205713217200024016436 00000000000000/* Test of perror() function. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (perror, void, (char const *)); #include int main (int argc, char **argv) { const char *prefix = (argc > 1 ? argv[1] : NULL); errno = EACCES; perror (prefix); errno = ETIMEDOUT; perror (prefix); errno = EOVERFLOW; perror (prefix); return 0; } gnuastro-0.5/bootstrapped/tests/test-pathmax.c0000644000175000017500000000170413217200024016565 00000000000000/* Test of "pathmax.h". Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2011. */ #include #include "pathmax.h" /* Check that PATH_MAX is a constant if it is defined. */ #ifdef PATH_MAX int a = PATH_MAX; #endif int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-open.c0000644000175000017500000000215013217200024016060 00000000000000/* Test of opening a file descriptor. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "signature.h" SIGNATURE_CHECK (open, int, (char const *, int, ...)); #include #include #include #include #include "macros.h" #define BASE "test-open.t" #include "test-open.h" int main (void) { return test_open (open, true); } gnuastro-0.5/bootstrapped/tests/test-nl_langinfo.c0000644000175000017500000001110113217200024017401 00000000000000/* Test of nl_langinfo replacement. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2009. */ #include #include #include "signature.h" SIGNATURE_CHECK (nl_langinfo, char *, (nl_item)); #include #include #include #include "c-strcase.h" #include "macros.h" /* For GCC >= 4.3, silence the warnings "comparison of unsigned expression >= 0 is always true" in this file. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) # pragma GCC diagnostic ignored "-Wtype-limits" #endif int main (int argc, char *argv[]) { int pass = atoi (argv[1]); /* pass locale 0 C 1 traditional French locale 2 French UTF-8 locale */ setlocale (LC_ALL, ""); /* nl_langinfo items of the LC_CTYPE category */ ASSERT (strlen (nl_langinfo (CODESET)) > 0); if (pass == 2) { const char *codeset = nl_langinfo (CODESET); ASSERT (c_strcasecmp (codeset, "UTF-8") == 0 || c_strcasecmp (codeset, "UTF8") == 0); } /* nl_langinfo items of the LC_NUMERIC category */ ASSERT (strlen (nl_langinfo (RADIXCHAR)) > 0); ASSERT (strlen (nl_langinfo (THOUSEP)) >= 0); /* nl_langinfo items of the LC_TIME category */ ASSERT (strlen (nl_langinfo (D_T_FMT)) > 0); ASSERT (strlen (nl_langinfo (D_FMT)) > 0); ASSERT (strlen (nl_langinfo (T_FMT)) > 0); ASSERT (strlen (nl_langinfo (T_FMT_AMPM)) >= (pass == 0 ? 1 : 0)); ASSERT (strlen (nl_langinfo (AM_STR)) >= (pass == 0 ? 1 : 0)); ASSERT (strlen (nl_langinfo (PM_STR)) >= (pass == 0 ? 1 : 0)); ASSERT (strlen (nl_langinfo (DAY_1)) > 0); ASSERT (strlen (nl_langinfo (DAY_2)) > 0); ASSERT (strlen (nl_langinfo (DAY_3)) > 0); ASSERT (strlen (nl_langinfo (DAY_4)) > 0); ASSERT (strlen (nl_langinfo (DAY_5)) > 0); ASSERT (strlen (nl_langinfo (DAY_6)) > 0); ASSERT (strlen (nl_langinfo (DAY_7)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_1)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_2)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_3)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_4)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_5)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_6)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_7)) > 0); ASSERT (strlen (nl_langinfo (MON_1)) > 0); ASSERT (strlen (nl_langinfo (MON_2)) > 0); ASSERT (strlen (nl_langinfo (MON_3)) > 0); ASSERT (strlen (nl_langinfo (MON_4)) > 0); ASSERT (strlen (nl_langinfo (MON_5)) > 0); ASSERT (strlen (nl_langinfo (MON_6)) > 0); ASSERT (strlen (nl_langinfo (MON_7)) > 0); ASSERT (strlen (nl_langinfo (MON_8)) > 0); ASSERT (strlen (nl_langinfo (MON_9)) > 0); ASSERT (strlen (nl_langinfo (MON_10)) > 0); ASSERT (strlen (nl_langinfo (MON_11)) > 0); ASSERT (strlen (nl_langinfo (MON_12)) > 0); ASSERT (strlen (nl_langinfo (ABMON_1)) > 0); ASSERT (strlen (nl_langinfo (ABMON_2)) > 0); ASSERT (strlen (nl_langinfo (ABMON_3)) > 0); ASSERT (strlen (nl_langinfo (ABMON_4)) > 0); ASSERT (strlen (nl_langinfo (ABMON_5)) > 0); ASSERT (strlen (nl_langinfo (ABMON_6)) > 0); ASSERT (strlen (nl_langinfo (ABMON_7)) > 0); ASSERT (strlen (nl_langinfo (ABMON_8)) > 0); ASSERT (strlen (nl_langinfo (ABMON_9)) > 0); ASSERT (strlen (nl_langinfo (ABMON_10)) > 0); ASSERT (strlen (nl_langinfo (ABMON_11)) > 0); ASSERT (strlen (nl_langinfo (ABMON_12)) > 0); ASSERT (strlen (nl_langinfo (ERA)) >= 0); ASSERT (strlen (nl_langinfo (ERA_D_FMT)) >= 0); ASSERT (strlen (nl_langinfo (ERA_D_T_FMT)) >= 0); ASSERT (strlen (nl_langinfo (ERA_T_FMT)) >= 0); ASSERT (nl_langinfo (ALT_DIGITS) != NULL); /* nl_langinfo items of the LC_MONETARY category */ { const char *currency = nl_langinfo (CRNCYSTR); ASSERT (strlen (currency) >= 0); #if !defined __NetBSD__ if (pass > 0) ASSERT (strlen (currency) >= 1); #endif } /* nl_langinfo items of the LC_MESSAGES category */ ASSERT (strlen (nl_langinfo (YESEXPR)) > 0); ASSERT (strlen (nl_langinfo (NOEXPR)) > 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-netinet_in.c0000644000175000017500000000156613217200024017265 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-nanosleep.c0000644000175000017500000000426313217200024017112 00000000000000/* Test of nanosleep() function. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include #include "signature.h" SIGNATURE_CHECK (nanosleep, int, (struct timespec const *, struct timespec *)); #include #include #include #include "macros.h" #if HAVE_DECL_ALARM static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (1); } #endif int main (void) { struct timespec ts; ts.tv_sec = 1000; ts.tv_nsec = -1; errno = 0; ASSERT (nanosleep (&ts, NULL) == -1); ASSERT (errno == EINVAL); ts.tv_nsec = 1000000000; errno = 0; ASSERT (nanosleep (&ts, NULL) == -1); ASSERT (errno == EINVAL); ts.tv_sec = 0; ts.tv_nsec = 1; ASSERT (nanosleep (&ts, &ts) == 0); /* Remaining time is only defined on EINTR failure; but on success, it is typically either 0 or unchanged from input. At any rate, it shouldn't be randomly changed to unrelated values. */ ASSERT (ts.tv_sec == 0); ASSERT (ts.tv_nsec == 0 || ts.tv_nsec == 1); ts.tv_nsec = 0; ASSERT (nanosleep (&ts, NULL) == 0); #if HAVE_DECL_ALARM { const time_t pentecost = 50 * 24 * 60 * 60; /* 50 days. */ signal (SIGALRM, handle_alarm); alarm (1); ts.tv_sec = pentecost; ts.tv_nsec = 999999999; errno = 0; ASSERT (nanosleep (&ts, &ts) == -1); ASSERT (errno == EINTR); ASSERT (pentecost - 10 < ts.tv_sec && ts.tv_sec <= pentecost); ASSERT (0 <= ts.tv_nsec && ts.tv_nsec <= 999999999); } #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-memchr.c0000644000175000017500000000731313217200024016400 00000000000000/* * Copyright (C) 2008-2017 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (memchr, void *, (void const *, int, size_t)); #include #include "zerosize-ptr.h" #include "macros.h" /* Calculating void * + int is not portable, so this wrapper converts to char * to make the tests easier to write. */ #define MEMCHR (char *) memchr int main (void) { size_t n = 0x100000; char *input = malloc (n); ASSERT (input); input[0] = 'a'; input[1] = 'b'; memset (input + 2, 'c', 1024); memset (input + 1026, 'd', n - 1028); input[n - 2] = 'e'; input[n - 1] = 'a'; /* Basic behavior tests. */ ASSERT (MEMCHR (input, 'a', n) == input); ASSERT (MEMCHR (input, 'a', 0) == NULL); ASSERT (MEMCHR (zerosize_ptr (), 'a', 0) == NULL); ASSERT (MEMCHR (input, 'b', n) == input + 1); ASSERT (MEMCHR (input, 'c', n) == input + 2); ASSERT (MEMCHR (input, 'd', n) == input + 1026); ASSERT (MEMCHR (input + 1, 'a', n - 1) == input + n - 1); ASSERT (MEMCHR (input + 1, 'e', n - 1) == input + n - 2); ASSERT (MEMCHR (input + 1, 0x789abc00 | 'e', n - 1) == input + n - 2); ASSERT (MEMCHR (input, 'f', n) == NULL); ASSERT (MEMCHR (input, '\0', n) == NULL); /* Check that a very long haystack is handled quickly if the byte is found near the beginning. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (MEMCHR (input, 'c', n) == input + 2); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = j; for (j = 0; j < 256; j++) { ASSERT (MEMCHR (input + i, j, 256) == input + i + j); } } } /* Check that memchr() does not read past the first occurrence of the byte being searched. See the Austin Group's clarification . Test both '\0' and something else, since some implementations special-case searching for NUL. */ { char *page_boundary = (char *) zerosize_ptr (); /* Too small, and we miss cache line boundary tests; too large, and the test takes cubically longer to complete. */ int limit = 257; if (page_boundary != NULL) { for (n = 1; n <= limit; n++) { char *mem = page_boundary - n; memset (mem, 'X', n); ASSERT (MEMCHR (mem, 'U', n) == NULL); ASSERT (MEMCHR (mem, 0, n) == NULL); { size_t i; size_t k; for (i = 0; i < n; i++) { mem[i] = 'U'; for (k = i + 1; k < n + limit; k++) ASSERT (MEMCHR (mem, 'U', k) == mem + i); mem[i] = 0; for (k = i + 1; k < n + limit; k++) ASSERT (MEMCHR (mem, 0, k) == mem + i); mem[i] = 'X'; } } } } } free (input); return 0; } gnuastro-0.5/bootstrapped/tests/test-mbsspn.c0000644000175000017500000000351113217200024016423 00000000000000/* Test of searching a string for a character outside a given set of characters. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (mbsspn ("Some text", "") == 0); ASSERT (mbsspn ("A long sentence", " ") == 0); ASSERT (mbsspn (" xy", "aei ou") == 2); ASSERT (mbsspn ("eau", "aeiou") == 3); /* The following tests shows how mbsspn() is different from strspn(). */ { const char input[] = "\303\266\303\274"; /* "öü" */ ASSERT (mbsspn (input, "\303\266") == 2); /* "ö" */ ASSERT (mbsspn (input, "\303\244") == 0); /* "ä" */ ASSERT (mbsspn (input, "\303\274\303\266") == 4); /* "üö" */ ASSERT (mbsspn (input, "\303\244\303\274") == 0); /* "äü" */ ASSERT (mbsspn (input, "\303\244\303\266") == 2); /* "äö" */ } { const char input[] = "\303\266\303\274"; /* "öü" */ ASSERT (mbsspn (input, "\303") == 0); /* invalid multibyte sequence */ } return 0; } gnuastro-0.5/bootstrapped/tests/test-mbspbrk.c0000644000175000017500000000323113217200024016560 00000000000000/* Test of searching a string for a character among a given set of characters. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (mbspbrk ("Some text", "") == NULL); { const char input[] = "A long sentence"; ASSERT (mbspbrk (input, "aeiou") == input + 3); ASSERT (mbspbrk (input, "iI") == NULL); } /* The following tests shows how mbspbrk() is different from strpbrk(). */ { const char input[] = "B\303\266se B\303\274bchen"; /* "Böse Bübchen" */ ASSERT (mbspbrk (input, "\303\244\303\274") == input + 7); /* "äü" */ } { const char input[] = "B\303\266se B\303\274bchen"; /* "Böse Bübchen" */ ASSERT (mbspbrk (input, "\303") == NULL); /* invalid multibyte sequence */ } return 0; } gnuastro-0.5/bootstrapped/tests/test-mbsinit.c0000644000175000017500000000267713217200024016602 00000000000000/* Test of test for initial conversion state. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include #include "signature.h" SIGNATURE_CHECK (mbsinit, int, (const mbstate_t *)); #include #include "macros.h" int main (int argc, char *argv[]) { static mbstate_t state; ASSERT (mbsinit (NULL)); ASSERT (mbsinit (&state)); if (argc > 1) { static const char input[1] = "\303"; wchar_t wc; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (!mbsinit (&state)); } return 0; } gnuastro-0.5/bootstrapped/tests/test-mbschr.c0000644000175000017500000000404013217200024016375 00000000000000/* Test of searching a string for a character. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Tests with a character < 0x30. */ { const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ const char *result = mbschr (input, ' '); ASSERT (result == input + 4); } { const char input[] = "\312\276\300\375"; /* "示例" */ const char *result = mbschr (input, ' '); ASSERT (result == NULL); } /* Tests with a character >= 0x30. */ { const char input[] = "\272\305123\324\313\320\320\241\243"; /* "å·123è¿è¡Œã€‚" */ const char *result = mbschr (input, '2'); ASSERT (result == input + 3); } /* This test shows how mbschr() is different from strchr(). */ { const char input[] = "\203\062\332\066123\324\313\320\320\241\243"; /* "씋123è¿è¡Œã€‚" */ const char *result = mbschr (input, '2'); ASSERT (result == input + 5); } { const char input[] = "\312\300\275\347\304\343\272\303\243\241"; /* "世界你好ï¼" */ const char *result = mbschr (input, '!'); ASSERT (result == NULL); } return 0; } gnuastro-0.5/bootstrapped/tests/test-mbrtowc-w32.c0000644000175000017500000005422313217200024017215 00000000000000/* Test of conversion of multibyte character to wide character. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include #include #include #include "macros.h" #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ static int test_one_locale (const char *name, int codepage) { mbstate_t state; wchar_t wc; size_t ret; # if 1 /* Portable code to set the locale. */ { char name_with_codepage[1024]; sprintf (name_with_codepage, "%s.%d", name, codepage); /* Set the locale. */ if (setlocale (LC_ALL, name_with_codepage) == NULL) return 77; } # else /* Hacky way to set a locale.codepage combination that setlocale() refuses to set. */ { /* Codepage of the current locale, set with setlocale(). Not necessarily the same as GetACP(). */ extern __declspec(dllimport) unsigned int __lc_codepage; /* Set the locale. */ if (setlocale (LC_ALL, name) == NULL) return 77; /* Clobber the codepage and MB_CUR_MAX, both set by setlocale(). */ __lc_codepage = codepage; switch (codepage) { case 1252: case 1256: MB_CUR_MAX = 1; break; case 932: case 950: case 936: MB_CUR_MAX = 2; break; case 54936: case 65001: MB_CUR_MAX = 4; break; } /* Test whether the codepage is really available. */ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, " ", 1, &state) == (size_t)(-1)) return 77; } # endif /* Test zero-length input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "x", 0, &state); /* gnulib's implementation returns (size_t)(-2). The AIX 5.1 implementation returns (size_t)(-1). glibc's implementation returns 0. */ ASSERT (ret == (size_t)(-2) || ret == (size_t)(-1) || ret == 0); ASSERT (mbsinit (&state)); } /* Test NUL byte input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "", 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); ret = mbrtowc (NULL, "", 1, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); } /* Test single-byte input. */ { int c; char buf[1]; memset (&state, '\0', sizeof (mbstate_t)); for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = c; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, buf, 1, &state); ASSERT (ret == 1); ASSERT (wc == c); ASSERT (mbsinit (&state)); ret = mbrtowc (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); break; } } /* Test special calling convention, passing a NULL pointer. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, NULL, 5, &state); ASSERT (ret == 0); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } switch (codepage) { case 1252: /* Locale encoding is CP1252, an extension of ISO-8859-1. */ { char input[] = "B\374\337er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\374'); ASSERT (wc == 0x00FC); ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\337'); ASSERT (wc == 0x00DF); ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case 1256: /* Locale encoding is CP1256, not the same as ISO-8859-6. */ { char input[] = "x\302\341\346y"; /* "xآلوy" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'x'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\302'); ASSERT (wc == 0x0622); ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\341'); ASSERT (wc == 0x0644); ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\346'); ASSERT (wc == 0x0648); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'y'); ASSERT (mbsinit (&state)); } return 0; case 932: /* Locale encoding is CP932, similar to Shift_JIS. */ { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x65E5); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x672C); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x8A9E); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == 0x30FB)); } return 0; case 950: /* Locale encoding is CP950, similar to Big5. */ { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x65E5); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x672C); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x8A9E); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == '?')); } return 0; case 936: /* Locale encoding is CP936 = GBK, an extension of GB2312. */ { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x65E5); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x672C); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x8A9E); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == '?')); } return 0; case 54936: /* Locale encoding is CP54936 = GB18030. */ { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 7, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x00FC); ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x00DF); ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[5] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 8, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\045", 2, &state); /* 0x81 0x25 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\060\377", 3, &state); /* 0x81 0x30 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\060\377\064", 4, &state); /* 0x81 0x30 0xFF 0x34 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\060\211\072", 4, &state); /* 0x81 0x30 0x89 0x3A */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); } return 0; case 65001: /* Locale encoding is CP65001 = UTF-8. */ { char input[] = "B\303\274\303\237er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 5, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x00FC); ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 3, 4, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 4, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x00DF); ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[5] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 6, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\303\300", 2, &state); /* 0xC3 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\343\300", 2, &state); /* 0xE3 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\343\300\200", 3, &state); /* 0xE3 0xC0 0x80 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\343\200\300", 3, &state); /* 0xE3 0x80 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\363\300", 2, &state); /* 0xF3 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\363\300\200\200", 4, &state); /* 0xF3 0xC0 0x80 0x80 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\363\200\300", 3, &state); /* 0xF3 0x80 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\363\200\300\200", 4, &state); /* 0xF3 0x80 0xC0 0x80 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\363\200\200\300", 4, &state); /* 0xF3 0x80 0x80 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); } return 0; default: return 1; } } int main (int argc, char *argv[]) { int codepage = atoi (argv[argc - 1]); int result; int i; result = 77; for (i = 1; i < argc - 1; i++) { int ret = test_one_locale (argv[i], codepage); if (ret != 77) result = ret; } if (result == 77) { fprintf (stderr, "Skipping test: found no locale with codepage %d\n", codepage); } return result; } #else int main (int argc, char *argv[]) { fputs ("Skipping test: not a native Windows system\n", stderr); return 77; } #endif gnuastro-0.5/bootstrapped/tests/test-mbrtowc.c0000644000175000017500000002521713217200024016605 00000000000000/* Test of conversion of multibyte character to wide character. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include #include "signature.h" SIGNATURE_CHECK (mbrtowc, size_t, (wchar_t *, char const *, size_t, mbstate_t *)); #include #include #include #include "macros.h" int main (int argc, char *argv[]) { mbstate_t state; wchar_t wc; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test zero-length input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "x", 0, &state); ASSERT (ret == (size_t)(-2)); ASSERT (mbsinit (&state)); } /* Test NUL byte input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "", 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); ret = mbrtowc (NULL, "", 1, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); } /* Test single-byte input. */ { int c; char buf[1]; memset (&state, '\0', sizeof (mbstate_t)); for (c = 0; c < 0x100; c++) switch (c) { default: if (! (c && 1 < argc && argv[1][0] == '5')) break; FALLTHROUGH; case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set", or argv[1] starts with '5' so we are testing all nonnull bytes. */ buf[0] = c; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, buf, 1, &state); ASSERT (ret == 1); ASSERT (wc == c); ASSERT (mbsinit (&state)); ret = mbrtowc (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); break; } } /* Test special calling convention, passing a NULL pointer. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, NULL, 5, &state); ASSERT (ret == 0); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } if (argc > 1) switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { char input[] = "B\374\337er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\374'); ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\337'); ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case '2': /* Locale encoding is UTF-8. */ { char input[] = "B\303\274\303\237er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 5, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 3, 4, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 4, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[5] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 6, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case '3': /* Locale encoding is EUC-JP. */ { char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); } return 0; case '4': /* Locale encoding is GB18030. */ { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 7, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[5] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 8, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case '5': /* C locale; tested above. */ return 0; } return 1; } gnuastro-0.5/bootstrapped/tests/test-math.c0000644000175000017500000000435113217200024016055 00000000000000/* Test of substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #ifndef NAN # error NAN should be defined choke me #endif #ifndef HUGE_VALF # error HUGE_VALF should be defined choke me #endif #ifndef HUGE_VAL # error HUGE_VAL should be defined choke me #endif #ifndef HUGE_VALL # error HUGE_VALL should be defined choke me #endif #ifndef FP_ILOGB0 # error FP_ILOGB0 should be defined choke me #endif #ifndef FP_ILOGBNAN # error FP_ILOGBNAN should be defined choke me #endif #include #include "macros.h" #if 0 /* Check that NAN expands into a constant expression. */ static float n = NAN; #endif /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equalf (float x, float y) { return x == y; } static int numeric_equald (double x, double y) { return x == y; } static int numeric_equall (long double x, long double y) { return x == y; } int main (void) { double d = NAN; double zero = 0.0; ASSERT (!numeric_equald (d, d)); d = HUGE_VAL; ASSERT (numeric_equald (d, 1.0 / zero)); ASSERT (numeric_equalf (HUGE_VALF, HUGE_VALF + HUGE_VALF)); ASSERT (numeric_equald (HUGE_VAL, HUGE_VAL + HUGE_VAL)); ASSERT (numeric_equall (HUGE_VALL, HUGE_VALL + HUGE_VALL)); /* Check the value of FP_ILOGB0. */ ASSERT (FP_ILOGB0 == INT_MIN || FP_ILOGB0 == - INT_MAX); /* Check the value of FP_ILOGBNAN. */ ASSERT (FP_ILOGBNAN == INT_MIN || FP_ILOGBNAN == INT_MAX); return 0; } gnuastro-0.5/bootstrapped/tests/test-malloca.c0000644000175000017500000000306113217200024016531 00000000000000/* Test of safe automatic memory allocation. Copyright (C) 2005, 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2005. */ #include #include "malloca.h" #include static void do_allocation (int n) { void *ptr = malloca (n); freea (ptr); safe_alloca (n); } void (*func) (int) = do_allocation; int main () { int i; /* This slows down malloc a lot. */ unsetenv ("MALLOC_PERTURB_"); /* Repeat a lot of times, to make sure there's no memory leak. */ for (i = 0; i < 50000; i++) { /* Try various values. n = 0 gave a crash on Alpha with gcc-2.5.8. Some versions of Mac OS X have a stack size limit of 512 KB. */ func (34); func (134); func (399); func (510823); func (129321); func (0); func (4070); func (4095); func (1); func (16582); } return 0; } gnuastro-0.5/bootstrapped/tests/test-malloc-gnu.c0000644000175000017500000000163713217200024017166 00000000000000/* Test of malloc function. Copyright (C) 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include int main () { /* Check that malloc (0) is not a NULL pointer. */ char *p = malloc (0); if (p == NULL) return 1; free (p); return 0; } gnuastro-0.5/bootstrapped/tests/test-lstat.c0000644000175000017500000000340613217200024016253 00000000000000/* Test of lstat() function. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Simon Josefsson, 2008; and Eric Blake, 2009. */ #include #include /* Caution: lstat may be a function-like macro. Although this signature check must pass, it may be the signature of the real (and broken) lstat rather than rpl_lstat. Most code should not use the address of lstat. */ #include "signature.h" SIGNATURE_CHECK (lstat, int, (char const *, struct stat *)); #include #include #include #include #include #include #include "same-inode.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-lstat.t" #include "test-lstat.h" /* Wrapper around lstat, which works even if lstat is a function-like macro, where test_lstat_func(lstat) would do the wrong thing. */ static int do_lstat (char const *name, struct stat *st) { return lstat (name, st); } int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_lstat_func (do_lstat, true); } gnuastro-0.5/bootstrapped/tests/test-lock.c0000644000175000017500000004675713217200024016074 00000000000000/* Test of locking in multithreaded situations. Copyright (C) 2005, 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2005. */ #include #if USE_POSIX_THREADS || USE_SOLARIS_THREADS || USE_PTH_THREADS || USE_WINDOWS_THREADS #if USE_POSIX_THREADS # define TEST_POSIX_THREADS 1 #endif #if USE_SOLARIS_THREADS # define TEST_SOLARIS_THREADS 1 #endif #if USE_PTH_THREADS # define TEST_PTH_THREADS 1 #endif #if USE_WINDOWS_THREADS # define TEST_WINDOWS_THREADS 1 #endif /* Whether to enable locking. Uncomment this to get a test program without locking, to verify that it crashes. */ #define ENABLE_LOCKING 1 /* Which tests to perform. Uncomment some of these, to verify that all tests crash if no locking is enabled. */ #define DO_TEST_LOCK 1 #define DO_TEST_RWLOCK 1 #define DO_TEST_RECURSIVE_LOCK 1 #define DO_TEST_ONCE 1 /* Whether to help the scheduler through explicit yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to use 'volatile' on some variables that communicate information between threads. If set to 0, a semaphore or a lock is used to protect these variables. If set to 1, 'volatile' is used; this is theoretically equivalent but can lead to much slower execution (e.g. 30x slower total run time on a 40-core machine), because 'volatile' does not imply any synchronization/communication between different CPUs. */ #define USE_VOLATILE 0 #if USE_POSIX_THREADS && HAVE_SEMAPHORE_H /* Whether to use a semaphore to communicate information between threads. If set to 0, a lock is used. If set to 1, a semaphore is used. Uncomment this to reduce the dependencies of this test. */ # define USE_SEMAPHORE 1 /* Mac OS X provides only named semaphores (sem_open); its facility for unnamed semaphores (sem_init) does not work. */ # if defined __APPLE__ && defined __MACH__ # define USE_NAMED_SEMAPHORE 1 # else # define USE_UNNAMED_SEMAPHORE 1 # endif #endif /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of operations performed in each thread. This is quite high, because with a smaller count, say 5000, we often get an "OK" result even without ENABLE_LOCKING (on Linux/x86). */ #define REPEAT_COUNT 50000 #include #include #include #if !ENABLE_LOCKING # undef USE_POSIX_THREADS # undef USE_SOLARIS_THREADS # undef USE_PTH_THREADS # undef USE_WINDOWS_THREADS #endif #include "glthread/lock.h" #if !ENABLE_LOCKING # if TEST_POSIX_THREADS # define USE_POSIX_THREADS 1 # endif # if TEST_SOLARIS_THREADS # define USE_SOLARIS_THREADS 1 # endif # if TEST_PTH_THREADS # define USE_PTH_THREADS 1 # endif # if TEST_WINDOWS_THREADS # define USE_WINDOWS_THREADS 1 # endif #endif #include "glthread/thread.h" #include "glthread/yield.h" #if USE_SEMAPHORE # include # include # include # include #endif #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() gl_thread_yield () #else # define yield() #endif #if USE_VOLATILE struct atomic_int { volatile int value; }; static void init_atomic_int (struct atomic_int *ai) { } static int get_atomic_int_value (struct atomic_int *ai) { return ai->value; } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { ai->value = new_value; } #elif USE_SEMAPHORE /* This atomic_int implementation can only support the values 0 and 1. It is initially 0 and can be set to 1 only once. */ # if USE_UNNAMED_SEMAPHORE struct atomic_int { sem_t semaphore; }; #define atomic_int_semaphore(ai) (&(ai)->semaphore) static void init_atomic_int (struct atomic_int *ai) { sem_init (&ai->semaphore, 0, 0); } # endif # if USE_NAMED_SEMAPHORE struct atomic_int { sem_t *semaphore; }; #define atomic_int_semaphore(ai) ((ai)->semaphore) static void init_atomic_int (struct atomic_int *ai) { sem_t *s; unsigned int count; for (count = 0; ; count++) { char name[80]; /* Use getpid() in the name, so that different processes running at the same time will not interfere. Use ai in the name, so that different atomic_int in the same process will not interfere. Use a count in the name, so that even in the (unlikely) case that a semaphore with the specified name already exists, we can try a different name. */ sprintf (name, "test-lock-%lu-%p-%u", (unsigned long) getpid (), ai, count); s = sem_open (name, O_CREAT | O_EXCL, 0600, 0); if (s == SEM_FAILED) { if (errno == EEXIST) /* Retry with a different name. */ continue; else { perror ("sem_open failed"); abort (); } } else { /* Try not to leave a semaphore hanging around on the file system eternally, if we can avoid it. */ sem_unlink (name); break; } } ai->semaphore = s; } # endif static int get_atomic_int_value (struct atomic_int *ai) { if (sem_trywait (atomic_int_semaphore (ai)) == 0) { if (sem_post (atomic_int_semaphore (ai))) abort (); return 1; } else if (errno == EAGAIN) return 0; else abort (); } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { if (new_value == 0) /* It's already initialized with 0. */ return; /* To set the value 1: */ if (sem_post (atomic_int_semaphore (ai))) abort (); } #else struct atomic_int { gl_lock_define (, lock) int value; }; static void init_atomic_int (struct atomic_int *ai) { gl_lock_init (ai->lock); } static int get_atomic_int_value (struct atomic_int *ai) { gl_lock_lock (ai->lock); int ret = ai->value; gl_lock_unlock (ai->lock); return ret; } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { gl_lock_lock (ai->lock); ai->value = new_value; gl_lock_unlock (ai->lock); } #endif #define ACCOUNT_COUNT 4 static int account[ACCOUNT_COUNT]; static int random_account (void) { return ((unsigned int) rand () >> 3) % ACCOUNT_COUNT; } static void check_accounts (void) { int i, sum; sum = 0; for (i = 0; i < ACCOUNT_COUNT; i++) sum += account[i]; if (sum != ACCOUNT_COUNT * 1000) abort (); } /* ------------------- Test normal (non-recursive) locks ------------------- */ /* Test normal locks by having several bank accounts and several threads which shuffle around money between the accounts and another thread checking that all the money is still there. */ gl_lock_define_initialized(static, my_lock) static void * lock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", gl_thread_self_pointer ()); gl_lock_lock (my_lock); dbgprintf ("Mutator %p after lock\n", gl_thread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); gl_lock_unlock (my_lock); dbgprintf ("Mutator %p after unlock\n", gl_thread_self_pointer ()); dbgprintf ("Mutator %p before check lock\n", gl_thread_self_pointer ()); gl_lock_lock (my_lock); check_accounts (); gl_lock_unlock (my_lock); dbgprintf ("Mutator %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", gl_thread_self_pointer ()); return NULL; } static struct atomic_int lock_checker_done; static void * lock_checker_thread (void *arg) { while (get_atomic_int_value (&lock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", gl_thread_self_pointer ()); gl_lock_lock (my_lock); check_accounts (); gl_lock_unlock (my_lock); dbgprintf ("Checker %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_lock (void) { int i; gl_thread_t checkerthread; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&lock_checker_done); set_atomic_int_value (&lock_checker_done, 0); /* Spawn the threads. */ checkerthread = gl_thread_create (lock_checker_thread, NULL); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (lock_mutator_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); set_atomic_int_value (&lock_checker_done, 1); gl_thread_join (checkerthread, NULL); check_accounts (); } /* ----------------- Test read-write (non-recursive) locks ----------------- */ /* Test read-write locks by having several bank accounts and several threads which shuffle around money between the accounts and several other threads that check that all the money is still there. */ gl_rwlock_define_initialized(static, my_rwlock) static void * rwlock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { int i1, i2, value; dbgprintf ("Mutator %p before wrlock\n", gl_thread_self_pointer ()); gl_rwlock_wrlock (my_rwlock); dbgprintf ("Mutator %p after wrlock\n", gl_thread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); gl_rwlock_unlock (my_rwlock); dbgprintf ("Mutator %p after unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", gl_thread_self_pointer ()); return NULL; } static struct atomic_int rwlock_checker_done; static void * rwlock_checker_thread (void *arg) { while (get_atomic_int_value (&rwlock_checker_done) == 0) { dbgprintf ("Checker %p before check rdlock\n", gl_thread_self_pointer ()); gl_rwlock_rdlock (my_rwlock); check_accounts (); gl_rwlock_unlock (my_rwlock); dbgprintf ("Checker %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_rwlock (void) { int i; gl_thread_t checkerthreads[THREAD_COUNT]; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&rwlock_checker_done); set_atomic_int_value (&rwlock_checker_done, 0); /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) checkerthreads[i] = gl_thread_create (rwlock_checker_thread, NULL); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (rwlock_mutator_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); set_atomic_int_value (&rwlock_checker_done, 1); for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (checkerthreads[i], NULL); check_accounts (); } /* -------------------------- Test recursive locks -------------------------- */ /* Test recursive locks by having several bank accounts and several threads which shuffle around money between the accounts (recursively) and another thread checking that all the money is still there. */ gl_recursive_lock_define_initialized(static, my_reclock) static void recshuffle (void) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", gl_thread_self_pointer ()); gl_recursive_lock_lock (my_reclock); dbgprintf ("Mutator %p after lock\n", gl_thread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned int) rand () >> 3) % 10; account[i1] += value; account[i2] -= value; /* Recursive with probability 0.5. */ if (((unsigned int) rand () >> 3) % 2) recshuffle (); dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); gl_recursive_lock_unlock (my_reclock); dbgprintf ("Mutator %p after unlock\n", gl_thread_self_pointer ()); } static void * reclock_mutator_thread (void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { recshuffle (); dbgprintf ("Mutator %p before check lock\n", gl_thread_self_pointer ()); gl_recursive_lock_lock (my_reclock); check_accounts (); gl_recursive_lock_unlock (my_reclock); dbgprintf ("Mutator %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", gl_thread_self_pointer ()); return NULL; } static struct atomic_int reclock_checker_done; static void * reclock_checker_thread (void *arg) { while (get_atomic_int_value (&reclock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", gl_thread_self_pointer ()); gl_recursive_lock_lock (my_reclock); check_accounts (); gl_recursive_lock_unlock (my_reclock); dbgprintf ("Checker %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_recursive_lock (void) { int i; gl_thread_t checkerthread; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&reclock_checker_done); set_atomic_int_value (&reclock_checker_done, 0); /* Spawn the threads. */ checkerthread = gl_thread_create (reclock_checker_thread, NULL); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (reclock_mutator_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); set_atomic_int_value (&reclock_checker_done, 1); gl_thread_join (checkerthread, NULL); check_accounts (); } /* ------------------------ Test once-only execution ------------------------ */ /* Test once-only execution by having several threads attempt to grab a once-only task simultaneously (triggered by releasing a read-write lock). */ gl_once_define(static, fresh_once) static int ready[THREAD_COUNT]; static gl_lock_t ready_lock[THREAD_COUNT]; #if ENABLE_LOCKING static gl_rwlock_t fire_signal[REPEAT_COUNT]; #else static volatile int fire_signal_state; #endif static gl_once_t once_control; static int performed; gl_lock_define_initialized(static, performed_lock) static void once_execute (void) { gl_lock_lock (performed_lock); performed++; gl_lock_unlock (performed_lock); } static void * once_contender_thread (void *arg) { int id = (int) (long) arg; int repeat; for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Tell the main thread that we're ready. */ gl_lock_lock (ready_lock[id]); ready[id] = 1; gl_lock_unlock (ready_lock[id]); if (repeat == REPEAT_COUNT) break; dbgprintf ("Contender %p waiting for signal for round %d\n", gl_thread_self_pointer (), repeat); #if ENABLE_LOCKING /* Wait for the signal to go. */ gl_rwlock_rdlock (fire_signal[repeat]); /* And don't hinder the others (if the scheduler is unfair). */ gl_rwlock_unlock (fire_signal[repeat]); #else /* Wait for the signal to go. */ while (fire_signal_state <= repeat) yield (); #endif dbgprintf ("Contender %p got the signal for round %d\n", gl_thread_self_pointer (), repeat); /* Contend for execution. */ gl_once (once_control, once_execute); } return NULL; } static void test_once (void) { int i, repeat; gl_thread_t threads[THREAD_COUNT]; /* Initialize all variables. */ for (i = 0; i < THREAD_COUNT; i++) { ready[i] = 0; gl_lock_init (ready_lock[i]); } #if ENABLE_LOCKING for (i = 0; i < REPEAT_COUNT; i++) gl_rwlock_init (fire_signal[i]); #else fire_signal_state = 0; #endif /* Block all fire_signals. */ for (i = REPEAT_COUNT-1; i >= 0; i--) gl_rwlock_wrlock (fire_signal[i]); /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (once_contender_thread, (void *) (long) i); for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Wait until every thread is ready. */ dbgprintf ("Main thread before synchronizing for round %d\n", repeat); for (;;) { int ready_count = 0; for (i = 0; i < THREAD_COUNT; i++) { gl_lock_lock (ready_lock[i]); ready_count += ready[i]; gl_lock_unlock (ready_lock[i]); } if (ready_count == THREAD_COUNT) break; yield (); } dbgprintf ("Main thread after synchronizing for round %d\n", repeat); if (repeat > 0) { /* Check that exactly one thread executed the once_execute() function. */ if (performed != 1) abort (); } if (repeat == REPEAT_COUNT) break; /* Preparation for the next round: Initialize once_control. */ memcpy (&once_control, &fresh_once, sizeof (gl_once_t)); /* Preparation for the next round: Reset the performed counter. */ performed = 0; /* Preparation for the next round: Reset the ready flags. */ for (i = 0; i < THREAD_COUNT; i++) { gl_lock_lock (ready_lock[i]); ready[i] = 0; gl_lock_unlock (ready_lock[i]); } /* Signal all threads simultaneously. */ dbgprintf ("Main thread giving signal for round %d\n", repeat); #if ENABLE_LOCKING gl_rwlock_unlock (fire_signal[repeat]); #else fire_signal_state = repeat + 1; #endif } /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); } /* -------------------------------------------------------------------------- */ int main () { #if TEST_PTH_THREADS if (!pth_init ()) abort (); #endif #if DO_TEST_LOCK printf ("Starting test_lock ..."); fflush (stdout); test_lock (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_RWLOCK printf ("Starting test_rwlock ..."); fflush (stdout); test_rwlock (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_RECURSIVE_LOCK printf ("Starting test_recursive_lock ..."); fflush (stdout); test_recursive_lock (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_ONCE printf ("Starting test_once ..."); fflush (stdout); test_once (); printf (" OK\n"); fflush (stdout); #endif return 0; } #else /* No multithreading available. */ #include int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif gnuastro-0.5/bootstrapped/tests/test-localename.c0000644000175000017500000005472613217200024017237 00000000000000/* Test of gl_locale_name function and its variants. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include "localename.h" #include #include #include #include "macros.h" #if HAVE_NEWLOCALE && HAVE_USELOCALE static struct { int cat; int mask; const char *string; } const categories[] = { { LC_CTYPE, LC_CTYPE_MASK, "LC_CTYPE" }, { LC_NUMERIC, LC_NUMERIC_MASK, "LC_NUMERIC" }, { LC_TIME, LC_TIME_MASK, "LC_TIME" }, { LC_COLLATE, LC_COLLATE_MASK, "LC_COLLATE" }, { LC_MONETARY, LC_MONETARY_MASK, "LC_MONETARY" }, { LC_MESSAGES, LC_MESSAGES_MASK, "LC_MESSAGES" } # ifdef LC_PAPER , { LC_PAPER, LC_PAPER_MASK, "LC_PAPER" } # endif # ifdef LC_NAME , { LC_NAME, LC_NAME_MASK, "LC_NAME" } # endif # ifdef LC_ADDRESS , { LC_ADDRESS, LC_ADDRESS_MASK, "LC_ADDRESS" } # endif # ifdef LC_TELEPHONE , { LC_TELEPHONE, LC_TELEPHONE_MASK, "LC_TELEPHONE" } # endif # ifdef LC_MEASUREMENT , { LC_MEASUREMENT, LC_MEASUREMENT_MASK, "LC_MEASUREMENT" } # endif # ifdef LC_IDENTIFICATION , { LC_IDENTIFICATION, LC_IDENTIFICATION_MASK, "LC_IDENTIFICATION" } # endif }; #endif /* Test the gl_locale_name() function. */ static void test_locale_name (void) { const char *name; /* Check that gl_locale_name returns non-NULL. */ ASSERT (gl_locale_name (LC_MESSAGES, "LC_MESSAGES") != NULL); /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_NEWLOCALE && HAVE_USELOCALE uselocale (LC_GLOBAL_LOCALE); #endif /* Check that when all environment variables are unset, gl_locale_name returns the default locale. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LC_NUMERIC"); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); ASSERT (strcmp (gl_locale_name (LC_NUMERIC, "LC_NUMERIC"), gl_locale_name_default ()) == 0); /* Check that an empty environment variable is treated like an unset environment variable. */ setenv ("LC_ALL", "", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "", 1); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "", 1); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ setenv ("LC_ALL", "C", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "C", 1); setenv ("LC_MESSAGES", "C", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); /* Check mixed situations. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); setenv ("LANG", "de_DE.UTF-8", 1); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "de_DE.UTF-8") == 0); name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); unsetenv ("LANG"); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, gl_locale_name_default ()) == 0); name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } #if HAVE_NEWLOCALE && HAVE_USELOCALE /* Check that gl_locale_name considers the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { uselocale (locale); name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Check that gl_locale_name distinguishes different categories of the thread locale, and that the name is the right one for each. */ { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) { int category_mask = categories[i].mask; locale_t loc = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (loc != NULL) { locale_t locale = newlocale (category_mask, "de_DE.UTF-8", loc); if (locale == NULL) freelocale (loc); else { unsigned int j; uselocale (locale); for (j = 0; j < SIZEOF (categories); j++) { const char *name_j = gl_locale_name (categories[j].cat, categories[j].string); if (j == i) ASSERT (strcmp (name_j, "de_DE.UTF-8") == 0); else ASSERT (strcmp (name_j, "fr_FR.UTF-8") == 0); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } } } #endif } /* Test the gl_locale_name_thread() function. */ static void test_locale_name_thread (void) { /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_NEWLOCALE && HAVE_USELOCALE /* Check that gl_locale_name_thread returns NULL when no thread locale is set. */ uselocale (LC_GLOBAL_LOCALE); ASSERT (gl_locale_name_thread (LC_CTYPE, "LC_CTYPE") == NULL); ASSERT (gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES") == NULL); /* Check that gl_locale_name_thread considers the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { const char *name; uselocale (locale); name = gl_locale_name_thread (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); name = gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Check that gl_locale_name_thread distinguishes different categories of the thread locale, and that the name is the right one for each. */ { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) { int category_mask = categories[i].mask; locale_t loc = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (loc != NULL) { locale_t locale = newlocale (category_mask, "de_DE.UTF-8", loc); if (locale == NULL) freelocale (loc); else { unsigned int j; uselocale (locale); for (j = 0; j < SIZEOF (categories); j++) { const char *name_j = gl_locale_name_thread (categories[j].cat, categories[j].string); if (j == i) ASSERT (strcmp (name_j, "de_DE.UTF-8") == 0); else ASSERT (strcmp (name_j, "fr_FR.UTF-8") == 0); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } } } /* Check that gl_locale_name_thread returns a string that is allocated with indefinite extent. */ { /* Try many locale names in turn, in order to defeat possible caches. */ static const char * const choices[] = { "C", "POSIX", "af_ZA", "af_ZA.UTF-8", "am_ET", "am_ET.UTF-8", "be_BY", "be_BY.UTF-8", "bg_BG", "bg_BG.UTF-8", "ca_ES", "ca_ES.UTF-8", "cs_CZ", "cs_CZ.UTF-8", "da_DK", "da_DK.UTF-8", "de_AT", "de_AT.UTF-8", "de_CH", "de_CH.UTF-8", "de_DE", "de_DE.UTF-8", "el_GR", "el_GR.UTF-8", "en_AU", "en_AU.UTF-8", "en_CA", "en_CA.UTF-8", "en_GB", "en_GB.UTF-8", "en_IE", "en_IE.UTF-8", "en_NZ", "en_NZ.UTF-8", "en_US", "en_US.UTF-8", "es_ES", "es_ES.UTF-8", "et_EE", "et_EE.UTF-8", "eu_ES", "eu_ES.UTF-8", "fi_FI", "fi_FI.UTF-8", "fr_BE", "fr_BE.UTF-8", "fr_CA", "fr_CA.UTF-8", "fr_CH", "fr_CH.UTF-8", "fr_FR", "fr_FR.UTF-8", "he_IL", "he_IL.UTF-8", "hr_HR", "hr_HR.UTF-8", "hu_HU", "hu_HU.UTF-8", "hy_AM", "is_IS", "is_IS.UTF-8", "it_CH", "it_CH.UTF-8", "it_IT", "it_IT.UTF-8", "ja_JP.UTF-8", "kk_KZ", "kk_KZ.UTF-8", "ko_KR.UTF-8", "lt_LT", "lt_LT.UTF-8", "nl_BE", "nl_BE.UTF-8", "nl_NL", "nl_NL.UTF-8", "no_NO", "no_NO.UTF-8", "pl_PL", "pl_PL.UTF-8", "pt_BR", "pt_BR.UTF-8", "pt_PT", "pt_PT.UTF-8", "ro_RO", "ro_RO.UTF-8", "ru_RU", "ru_RU.UTF-8", "sk_SK", "sk_SK.UTF-8", "sl_SI", "sl_SI.UTF-8", "sv_SE", "sv_SE.UTF-8", "tr_TR", "tr_TR.UTF-8", "uk_UA", "uk_UA.UTF-8", "zh_CN", "zh_CN.UTF-8", "zh_HK", "zh_HK.UTF-8", "zh_TW", "zh_TW.UTF-8" }; /* Remember which locales are available. */ unsigned char /* bool */ available[SIZEOF (choices)]; /* Array of remembered results of gl_locale_name_thread. */ const char *unsaved_names[SIZEOF (choices)][SIZEOF (categories)]; /* Array of remembered results of gl_locale_name_thread, stored in safe memory. */ char *saved_names[SIZEOF (choices)][SIZEOF (categories)]; unsigned int j; for (j = 0; j < SIZEOF (choices); j++) { locale_t locale = newlocale (LC_ALL_MASK, choices[j], NULL); available[j] = (locale != NULL); if (locale != NULL) { unsigned int i; uselocale (locale); for (i = 0; i < SIZEOF (categories); i++) { unsaved_names[j][i] = gl_locale_name_thread (categories[i].cat, categories[i].string); saved_names[j][i] = strdup (unsaved_names[j][i]); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Verify the unsaved_names are still valid. */ for (j = 0; j < SIZEOF (choices); j++) if (available[j]) { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) ASSERT (strcmp (unsaved_names[j][i], saved_names[j][i]) == 0); } /* Allocate many locales, without freeing them. This is an attempt at overwriting as much of the previously allocated memory as possible. */ for (j = SIZEOF (choices); j > 0; ) { j--; if (available[j]) { locale_t locale = newlocale (LC_ALL_MASK, choices[j], NULL); unsigned int i; ASSERT (locale != NULL); uselocale (locale); for (i = 0; i < SIZEOF (categories); i++) { const char *name = gl_locale_name_thread (categories[i].cat, categories[i].string); ASSERT (strcmp (unsaved_names[j][i], name) == 0); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Verify the unsaved_names are still valid. */ for (j = 0; j < SIZEOF (choices); j++) if (available[j]) { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) { ASSERT (strcmp (unsaved_names[j][i], saved_names[j][i]) == 0); free (saved_names[j][i]); } } } #else /* Check that gl_locale_name_thread always returns NULL. */ ASSERT (gl_locale_name_thread (LC_CTYPE, "LC_CTYPE") == NULL); ASSERT (gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES") == NULL); #endif } /* Test the gl_locale_name_posix() function. */ static void test_locale_name_posix (void) { const char *name; /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_NEWLOCALE && HAVE_USELOCALE uselocale (LC_GLOBAL_LOCALE); #endif /* Check that when all environment variables are unset, gl_locale_name_posix returns either NULL or the default locale. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LC_NUMERIC"); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); name = gl_locale_name_posix (LC_NUMERIC, "LC_NUMERIC"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); /* Check that an empty environment variable is treated like an unset environment variable. */ setenv ("LC_ALL", "", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "", 1); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "", 1); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ setenv ("LC_ALL", "C", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "C", 1); setenv ("LC_MESSAGES", "C", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); /* Check mixed situations. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); setenv ("LANG", "de_DE.UTF-8", 1); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "de_DE.UTF-8") == 0); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); unsetenv ("LANG"); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } #if HAVE_NEWLOCALE && HAVE_USELOCALE /* Check that gl_locale_name_posix ignores the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); uselocale (locale); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } #endif } /* Test the gl_locale_name_environ() function. */ static void test_locale_name_environ (void) { const char *name; /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_NEWLOCALE && HAVE_USELOCALE uselocale (LC_GLOBAL_LOCALE); #endif /* Check that when all environment variables are unset, gl_locale_name_environ returns NULL. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LC_NUMERIC"); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); ASSERT (gl_locale_name_environ (LC_NUMERIC, "LC_NUMERIC") == NULL); /* Check that an empty environment variable is treated like an unset environment variable. */ setenv ("LC_ALL", "", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "", 1); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "", 1); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "", 1); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ setenv ("LC_ALL", "C", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "C", 1); setenv ("LC_MESSAGES", "C", 1); unsetenv ("LANG"); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); /* Check mixed situations. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); setenv ("LANG", "de_DE.UTF-8", 1); name = gl_locale_name_environ (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "de_DE.UTF-8") == 0); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); unsetenv ("LANG"); name = gl_locale_name_environ (LC_CTYPE, "LC_CTYPE"); ASSERT (name == NULL); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); #if HAVE_NEWLOCALE && HAVE_USELOCALE /* Check that gl_locale_name_environ ignores the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); uselocale (locale); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } #endif } /* Test the gl_locale_name_default() function. */ static void test_locale_name_default (void) { const char *name = gl_locale_name_default (); ASSERT (name != NULL); /* Only Mac OS X and Windows have a facility for the user to set the default locale. */ #if !((defined __APPLE__ && defined __MACH__) || (defined _WIN32 || defined __WIN32__ || defined __CYGWIN__)) ASSERT (strcmp (name, "C") == 0); #endif #if HAVE_NEWLOCALE && HAVE_USELOCALE /* Check that gl_locale_name_default ignores the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { uselocale (locale); ASSERT (strcmp (gl_locale_name_default (), name) == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } #endif } int main () { test_locale_name (); test_locale_name_thread (); test_locale_name_posix (); test_locale_name_environ (); test_locale_name_default (); return 0; } gnuastro-0.5/bootstrapped/tests/test-localeconv.c0000644000175000017500000000442613217200024017254 00000000000000/* Test of localeconv() function. Copyright (C) 2012-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2012. */ #include #include #include "signature.h" SIGNATURE_CHECK (localeconv, struct lconv *, (void)); #include #include #include "macros.h" int main () { /* Test localeconv() result in the "C" locale. */ { struct lconv *l = localeconv (); ASSERT (STREQ (l->decimal_point, ".")); ASSERT (STREQ (l->thousands_sep, "")); #if !((defined __FreeBSD__ || defined __DragonFly__) || defined __sun) ASSERT (STREQ (l->grouping, "")); #endif ASSERT (STREQ (l->mon_decimal_point, "")); ASSERT (STREQ (l->mon_thousands_sep, "")); #if !((defined __FreeBSD__ || defined __DragonFly__) || defined __sun) ASSERT (STREQ (l->mon_grouping, "")); #endif ASSERT (STREQ (l->positive_sign, "")); ASSERT (STREQ (l->negative_sign, "")); ASSERT (STREQ (l->currency_symbol, "")); ASSERT (l->frac_digits == CHAR_MAX); ASSERT (l->p_cs_precedes == CHAR_MAX); ASSERT (l->p_sign_posn == CHAR_MAX); ASSERT (l->p_sep_by_space == CHAR_MAX); ASSERT (l->n_cs_precedes == CHAR_MAX); ASSERT (l->n_sign_posn == CHAR_MAX); ASSERT (l->n_sep_by_space == CHAR_MAX); ASSERT (STREQ (l->int_curr_symbol, "")); ASSERT (l->int_frac_digits == CHAR_MAX); ASSERT (l->int_p_cs_precedes == CHAR_MAX); ASSERT (l->int_p_sign_posn == CHAR_MAX); ASSERT (l->int_p_sep_by_space == CHAR_MAX); ASSERT (l->int_n_cs_precedes == CHAR_MAX); ASSERT (l->int_n_sign_posn == CHAR_MAX); ASSERT (l->int_n_sep_by_space == CHAR_MAX); } return 0; } gnuastro-0.5/bootstrapped/tests/test-locale.c0000644000175000017500000000441413217200024016363 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include "verify.h" int a[] = { LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME }; /* Check that the 'struct lconv' type is defined. */ struct lconv l; int ls; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); int main () { #if HAVE_NEWLOCALE /* Check that the locale_t type and the LC_GLOBAL_LOCALE macro are defined. */ locale_t b = LC_GLOBAL_LOCALE; (void) b; #endif /* Check that 'struct lconv' has the ISO C and POSIX specified members. */ ls += sizeof (*l.decimal_point); ls += sizeof (*l.thousands_sep); ls += sizeof (*l.grouping); ls += sizeof (*l.mon_decimal_point); ls += sizeof (*l.mon_thousands_sep); ls += sizeof (*l.mon_grouping); ls += sizeof (*l.positive_sign); ls += sizeof (*l.negative_sign); ls += sizeof (*l.currency_symbol); ls += sizeof (l.frac_digits); ls += sizeof (l.p_cs_precedes); ls += sizeof (l.p_sign_posn); ls += sizeof (l.p_sep_by_space); ls += sizeof (l.n_cs_precedes); ls += sizeof (l.n_sign_posn); ls += sizeof (l.n_sep_by_space); ls += sizeof (*l.int_curr_symbol); ls += sizeof (l.int_frac_digits); ls += sizeof (l.int_p_cs_precedes); ls += sizeof (l.int_p_sign_posn); ls += sizeof (l.int_p_sep_by_space); ls += sizeof (l.int_n_cs_precedes); ls += sizeof (l.int_n_sign_posn); ls += sizeof (l.int_n_sep_by_space); return 0; } gnuastro-0.5/bootstrapped/tests/test-listen.c0000644000175000017500000000234213217200024016420 00000000000000/* Test listen() function. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (listen, int, (int, int)); #include #include #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (listen (-1, 1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (listen (99 ,1) == -1); ASSERT (errno == EBADF); } return 0; } gnuastro-0.5/bootstrapped/tests/test-limits-h.c0000644000175000017500000000311313217200024016645 00000000000000/* Test of substitute. Copyright 2016-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paul Eggert. */ #include #include #include "verify.h" #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Woverlength-strings" #endif /* Macros specified by ISO/IEC TS 18661-1:2014. */ #define verify_width(width, min, max) \ verify ((max) >> ((width) - 1 - ((min) < 0)) == 1) verify_width (CHAR_WIDTH, CHAR_MIN, CHAR_MAX); verify_width (SCHAR_WIDTH, SCHAR_MIN, SCHAR_MAX); verify_width (UCHAR_WIDTH, 0, UCHAR_MAX); verify_width (SHRT_WIDTH, SHRT_MIN, SHRT_MAX); verify_width (USHRT_WIDTH, 0, USHRT_MAX); verify_width (INT_WIDTH, INT_MIN, INT_MAX); verify_width (UINT_WIDTH, 0, UINT_MAX); verify_width (LONG_WIDTH, LONG_MIN, LONG_MAX); verify_width (ULONG_WIDTH, 0, ULONG_MAX); verify_width (LLONG_WIDTH, LLONG_MIN, LLONG_MAX); verify_width (ULLONG_WIDTH, 0, ULLONG_MAX); int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-langinfo.c0000644000175000017500000000357213217200024016725 00000000000000/* Test of substitute. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2009. */ #include #include /* Check that all the nl_item values are defined. */ int items[] = { /* nl_langinfo items of the LC_CTYPE category */ CODESET, /* nl_langinfo items of the LC_NUMERIC category */ RADIXCHAR, THOUSEP, /* nl_langinfo items of the LC_TIME category */ D_T_FMT, D_FMT, T_FMT, T_FMT_AMPM, AM_STR, PM_STR, DAY_1, DAY_2, DAY_3, DAY_4, DAY_5, DAY_6, DAY_7, ABDAY_1, ABDAY_2, ABDAY_3, ABDAY_4, ABDAY_5, ABDAY_6, ABDAY_7, MON_1, MON_2, MON_3, MON_4, MON_5, MON_6, MON_7, MON_8, MON_9, MON_10, MON_11, MON_12, ABMON_1, ABMON_2, ABMON_3, ABMON_4, ABMON_5, ABMON_6, ABMON_7, ABMON_8, ABMON_9, ABMON_10, ABMON_11, ABMON_12, ERA, ERA_D_FMT, ERA_D_T_FMT, ERA_T_FMT, ALT_DIGITS, /* nl_langinfo items of the LC_MONETARY category */ CRNCYSTR, /* nl_langinfo items of the LC_MESSAGES category */ YESEXPR, NOEXPR }; int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-iswblank.c0000644000175000017500000000204313217200024016732 00000000000000/* Test of iswblank() function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "macros.h" /* Check that WEOF is defined. */ wint_t e = WEOF; int main (void) { /* Check that the function exist as a function or as a macro. */ (void) iswblank (0); /* Check that the isw* functions map WEOF to 0. */ ASSERT (!iswblank (e)); return 0; } gnuastro-0.5/bootstrapped/tests/test-isnanl-nolibm.c0000644000175000017500000000155413217200024017670 00000000000000/* Test of isnanl() substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include "isnanl-nolibm.h" #include "test-isnanl.h" gnuastro-0.5/bootstrapped/tests/test-isnanf-nolibm.c0000644000175000017500000000145513217200024017662 00000000000000/* Test of isnanf() substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "isnanf-nolibm.h" #include "test-isnanf.h" gnuastro-0.5/bootstrapped/tests/test-isnand-nolibm.c0000644000175000017500000000145513217200024017660 00000000000000/* Test of isnand() substitute. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "isnand-nolibm.h" #include "test-isnand.h" gnuastro-0.5/bootstrapped/tests/test-isblank.c0000644000175000017500000000305013217200024016542 00000000000000/* Test of isblank() function. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2009. */ #include #include #include "signature.h" SIGNATURE_CHECK (isblank, int, (int)); #include #include #include "macros.h" int main (int argc, char *argv[]) { unsigned int c; /* Verify the property in the "C" locale. POSIX specifies in that - in all locales, the blank characters include the and characters, - in the "POSIX" locale (which is usually the same as the "C" locale), the blank characters include only the ASCII and characters. */ for (c = 0; c <= UCHAR_MAX; c++) ASSERT (!isblank (c) == !(c == ' ' || c == '\t')); ASSERT (!isblank (EOF)); return 0; } gnuastro-0.5/bootstrapped/tests/test-ioctl.c0000644000175000017500000000241513217200023016234 00000000000000/* Test of ioctl() function. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include "signature.h" SIGNATURE_CHECK (ioctl, int, (int, int, ...)); #include #include #include "macros.h" int main (void) { #ifdef FIONREAD /* Test behaviour for invalid file descriptors. */ { int value; errno = 0; ASSERT (ioctl (-1, FIONREAD, &value) == -1); ASSERT (errno == EBADF); } { int value; close (99); errno = 0; ASSERT (ioctl (99, FIONREAD, &value) == -1); ASSERT (errno == EBADF); } #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-inttypes.c0000644000175000017500000000606113217200023017002 00000000000000/* Test of substitute. Copyright (C) 2006-2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #include /* Tests for macros supposed to be defined in inttypes.h. */ const char *k = /* implicit string concatenation */ #ifdef INT8_MAX PRId8 PRIi8 #endif #ifdef UINT8_MAX PRIo8 PRIu8 PRIx8 PRIX8 #endif #ifdef INT16_MAX PRId16 PRIi16 #endif #ifdef UINT16_MAX PRIo16 PRIu16 PRIx16 PRIX16 #endif #ifdef INT32_MAX PRId32 PRIi32 #endif #ifdef UINT32_MAX PRIo32 PRIu32 PRIx32 PRIX32 #endif #ifdef INT64_MAX PRId64 PRIi64 #endif #ifdef UINT64_MAX PRIo64 PRIu64 PRIx64 PRIX64 #endif PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8 PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16 PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32 PRIdLEAST64 PRIiLEAST64 PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64 PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8 PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16 PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32 PRIdFAST64 PRIiFAST64 PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64 PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX #ifdef INTPTR_MAX PRIdPTR PRIiPTR #endif #ifdef UINTPTR_MAX PRIoPTR PRIuPTR PRIxPTR PRIXPTR #endif ; const char *l = /* implicit string concatenation */ #ifdef INT8_MAX SCNd8 SCNi8 #endif #ifdef UINT8_MAX SCNo8 SCNu8 SCNx8 #endif #ifdef INT16_MAX SCNd16 SCNi16 #endif #ifdef UINT16_MAX SCNo16 SCNu16 SCNx16 #endif #ifdef INT32_MAX SCNd32 SCNi32 #endif #ifdef UINT32_MAX SCNo32 SCNu32 SCNx32 #endif #ifdef INT64_MAX SCNd64 SCNi64 #endif #ifdef UINT64_MAX SCNo64 SCNu64 SCNx64 #endif SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8 SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16 SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32 SCNdLEAST64 SCNiLEAST64 SCNoLEAST64 SCNuLEAST64 SCNxLEAST64 SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8 SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16 SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32 SCNdFAST64 SCNiFAST64 SCNoFAST64 SCNuFAST64 SCNxFAST64 SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX #ifdef INTPTR_MAX SCNdPTR SCNiPTR #endif #ifdef UINTPTR_MAX SCNoPTR SCNuPTR SCNxPTR #endif ; int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-intprops.c0000644000175000017500000004343313217200023017005 00000000000000/* Test intprops.h. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paul Eggert. */ /* Tell gcc not to warn about the long expressions that the overflow macros expand to, or about the (X < 0) expressions. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Woverlength-strings" # pragma GCC diagnostic ignored "-Wtype-limits" /* Work around a bug in GCC 6.1 and earlier; see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68971 */ # pragma GCC diagnostic ignored "-Woverflow" #endif #include #include "intprops.h" #include "verify.h" #include #include #include #include "macros.h" /* VERIFY (X) uses a static assertion for compilers that are known to work, and falls back on a dynamic assertion for other compilers. These tests should be checkable via 'verify' rather than 'ASSERT', but using 'verify' would run into a bug with HP-UX 11.23 cc; see . */ #if __GNUC__ || __SUNPRO_C # define VERIFY(x) do { verify (x); } while (0) #else # define VERIFY(x) ASSERT (x) #endif #define DONTCARE __LINE__ int main (void) { /* Use VERIFY for tests that must be integer constant expressions, ASSERT otherwise. */ /* TYPE_IS_INTEGER. */ ASSERT (TYPE_IS_INTEGER (bool)); ASSERT (TYPE_IS_INTEGER (char)); ASSERT (TYPE_IS_INTEGER (signed char)); ASSERT (TYPE_IS_INTEGER (unsigned char)); ASSERT (TYPE_IS_INTEGER (short int)); ASSERT (TYPE_IS_INTEGER (unsigned short int)); ASSERT (TYPE_IS_INTEGER (int)); ASSERT (TYPE_IS_INTEGER (unsigned int)); ASSERT (TYPE_IS_INTEGER (long int)); ASSERT (TYPE_IS_INTEGER (unsigned long int)); ASSERT (TYPE_IS_INTEGER (intmax_t)); ASSERT (TYPE_IS_INTEGER (uintmax_t)); ASSERT (! TYPE_IS_INTEGER (float)); ASSERT (! TYPE_IS_INTEGER (double)); ASSERT (! TYPE_IS_INTEGER (long double)); /* TYPE_SIGNED. */ /* VERIFY (! TYPE_SIGNED (bool)); // not guaranteed by gnulib substitute */ VERIFY (TYPE_SIGNED (signed char)); VERIFY (! TYPE_SIGNED (unsigned char)); VERIFY (TYPE_SIGNED (short int)); VERIFY (! TYPE_SIGNED (unsigned short int)); VERIFY (TYPE_SIGNED (int)); VERIFY (! TYPE_SIGNED (unsigned int)); VERIFY (TYPE_SIGNED (long int)); VERIFY (! TYPE_SIGNED (unsigned long int)); VERIFY (TYPE_SIGNED (intmax_t)); VERIFY (! TYPE_SIGNED (uintmax_t)); ASSERT (TYPE_SIGNED (float)); ASSERT (TYPE_SIGNED (double)); ASSERT (TYPE_SIGNED (long double)); /* Integer representation. Check that it is two's complement. */ VERIFY (INT_MIN + INT_MAX < 0); /* TYPE_MINIMUM, TYPE_MAXIMUM. */ VERIFY (TYPE_MINIMUM (char) == CHAR_MIN); VERIFY (TYPE_MAXIMUM (char) == CHAR_MAX); VERIFY (TYPE_MINIMUM (unsigned char) == 0); VERIFY (TYPE_MAXIMUM (unsigned char) == UCHAR_MAX); VERIFY (TYPE_MINIMUM (signed char) == SCHAR_MIN); VERIFY (TYPE_MAXIMUM (signed char) == SCHAR_MAX); VERIFY (TYPE_MINIMUM (short int) == SHRT_MIN); VERIFY (TYPE_MAXIMUM (short int) == SHRT_MAX); VERIFY (TYPE_MINIMUM (unsigned short int) == 0); VERIFY (TYPE_MAXIMUM (unsigned short int) == USHRT_MAX); VERIFY (TYPE_MINIMUM (int) == INT_MIN); VERIFY (TYPE_MAXIMUM (int) == INT_MAX); VERIFY (TYPE_MINIMUM (unsigned int) == 0); VERIFY (TYPE_MAXIMUM (unsigned int) == UINT_MAX); VERIFY (TYPE_MINIMUM (long int) == LONG_MIN); VERIFY (TYPE_MAXIMUM (long int) == LONG_MAX); VERIFY (TYPE_MINIMUM (unsigned long int) == 0); VERIFY (TYPE_MAXIMUM (unsigned long int) == ULONG_MAX); #ifdef LLONG_MAX verify (TYPE_MINIMUM (long long int) == LLONG_MIN); verify (TYPE_MAXIMUM (long long int) == LLONG_MAX); #endif VERIFY (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); VERIFY (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); VERIFY (TYPE_MINIMUM (uintmax_t) == 0); VERIFY (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); /* TYPE_WIDTH. */ #ifdef CHAR_WIDTH verify (TYPE_WIDTH (char) == CHAR_WIDTH); verify (TYPE_WIDTH (signed char) == SCHAR_WIDTH); verify (TYPE_WIDTH (unsigned char) == UCHAR_WIDTH); verify (TYPE_WIDTH (short int) == SHRT_WIDTH); verify (TYPE_WIDTH (unsigned short int) == USHRT_WIDTH); verify (TYPE_WIDTH (int) == INT_WIDTH); verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH); verify (TYPE_WIDTH (long int) == LONG_WIDTH); verify (TYPE_WIDTH (unsigned long int) == ULONG_WIDTH); #ifdef LLONG_WIDTH verify (TYPE_WIDTH (long long int) == LLONG_WIDTH); verify (TYPE_WIDTH (unsigned long long int) == ULLONG_WIDTH); #endif #endif /* INT_BITS_STRLEN_BOUND. */ VERIFY (INT_BITS_STRLEN_BOUND (1) == 1); VERIFY (INT_BITS_STRLEN_BOUND (2620) == 789); /* INT_STRLEN_BOUND, INT_BUFSIZE_BOUND. */ #ifdef INT32_MAX /* POSIX guarantees int32_t; this ports to non-POSIX. */ VERIFY (INT_STRLEN_BOUND (int32_t) == sizeof ("-2147483648") - 1); VERIFY (INT_BUFSIZE_BOUND (int32_t) == sizeof ("-2147483648")); #endif #ifdef INT64_MAX VERIFY (INT_STRLEN_BOUND (int64_t) == sizeof ("-9223372036854775808") - 1); VERIFY (INT_BUFSIZE_BOUND (int64_t) == sizeof ("-9223372036854775808")); #endif /* All the INT__RANGE_OVERFLOW tests are equally valid as INT__OVERFLOW tests, so define macros to do both. OP is the operation, OPNAME its symbolic name, A and B its operands, T the result type, V the overflow flag, and VRES the result if V and if two's complement. CHECK_BINOP is for most binary operatinos, CHECK_SBINOP for binary +, -, * when the result type is signed, and CHECK_UNOP for unary operations. */ #define CHECK_BINOP(op, opname, a, b, t, v, vres) \ VERIFY (INT_##opname##_RANGE_OVERFLOW (a, b, TYPE_MINIMUM (t), \ TYPE_MAXIMUM (t)) \ == (v)); \ VERIFY (INT_##opname##_OVERFLOW (a, b) == (v)) #define CHECK_SBINOP(op, opname, a, b, t, v, vres) \ CHECK_BINOP(op, opname, a, b, t, v, vres); \ { \ t result; \ ASSERT (INT_##opname##_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : ((a) op (b)))); \ } #define CHECK_UNOP(op, opname, a, t, v) \ VERIFY (INT_##opname##_RANGE_OVERFLOW (a, TYPE_MINIMUM (t), \ TYPE_MAXIMUM (t)) \ == (v)); \ VERIFY (INT_##opname##_OVERFLOW (a) == (v)) /* INT__RANGE_OVERFLOW, INT__OVERFLOW. */ VERIFY (INT_ADD_RANGE_OVERFLOW (INT_MAX, 1, INT_MIN, INT_MAX)); VERIFY (INT_ADD_OVERFLOW (INT_MAX, 1)); CHECK_SBINOP (+, ADD, INT_MAX, 1, int, true, INT_MIN); CHECK_SBINOP (+, ADD, INT_MAX, -1, int, false, INT_MAX - 1); CHECK_SBINOP (+, ADD, INT_MIN, 1, int, false, INT_MIN + 1); CHECK_SBINOP (+, ADD, INT_MIN, -1, int, true, INT_MAX); CHECK_BINOP (+, ADD, UINT_MAX, 1u, unsigned int, true, 0u); CHECK_BINOP (+, ADD, 0u, 1u, unsigned int, false, 1u); CHECK_SBINOP (-, SUBTRACT, INT_MAX, 1, int, false, INT_MAX - 1); CHECK_SBINOP (-, SUBTRACT, INT_MAX, -1, int, true, INT_MIN); CHECK_SBINOP (-, SUBTRACT, INT_MIN, 1, int, true, INT_MAX); CHECK_SBINOP (-, SUBTRACT, INT_MIN, -1, int, false, INT_MIN - -1); CHECK_BINOP (-, SUBTRACT, UINT_MAX, 1u, unsigned int, false, UINT_MAX - 1u); CHECK_BINOP (-, SUBTRACT, 0u, 1u, unsigned int, true, 0u - 1u); CHECK_UNOP (-, NEGATE, INT_MIN, int, true); CHECK_UNOP (-, NEGATE, 0, int, false); CHECK_UNOP (-, NEGATE, INT_MAX, int, false); CHECK_UNOP (-, NEGATE, 0u, unsigned int, false); CHECK_UNOP (-, NEGATE, 1u, unsigned int, true); CHECK_UNOP (-, NEGATE, UINT_MAX, unsigned int, true); CHECK_SBINOP (*, MULTIPLY, INT_MAX, INT_MAX, int, true, 1); CHECK_SBINOP (*, MULTIPLY, INT_MAX, INT_MIN, int, true, INT_MIN); CHECK_SBINOP (*, MULTIPLY, INT_MIN, INT_MAX, int, true, INT_MIN); CHECK_SBINOP (*, MULTIPLY, INT_MIN, INT_MIN, int, true, 0); CHECK_SBINOP (*, MULTIPLY, -1, INT_MIN, int, INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); CHECK_SBINOP (*, MULTIPLY, LONG_MIN / INT_MAX, (long int) INT_MAX, long int, false, LONG_MIN - LONG_MIN % INT_MAX); CHECK_BINOP (/, DIVIDE, INT_MIN, -1, int, INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); CHECK_BINOP (/, DIVIDE, INT_MAX, 1, int, false, INT_MAX); CHECK_BINOP (/, DIVIDE, (unsigned int) INT_MIN, -1u, unsigned int, false, INT_MIN / -1u); CHECK_BINOP (%, REMAINDER, INT_MIN, -1, int, INT_NEGATE_OVERFLOW (INT_MIN), 0); CHECK_BINOP (%, REMAINDER, INT_MAX, 1, int, false, 0); CHECK_BINOP (%, REMAINDER, (unsigned int) INT_MIN, -1u, unsigned int, false, INT_MIN % -1u); CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX, 1, unsigned int, true, UINT_MAX << 1); CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX / 2 + 1, 1, unsigned int, true, (UINT_MAX / 2 + 1) << 1); CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX / 2, 1, unsigned int, false, (UINT_MAX / 2) << 1); /* INT__OVERFLOW and INT__WRAPV with mixed types. */ #define CHECK_SUM(a, b, t, v, vres) \ CHECK_SUM1(a, b, t, v, vres); \ CHECK_SUM1(b, a, t, v, vres) #define CHECK_SSUM(a, b, t, v, vres) \ CHECK_SSUM1(a, b, t, v, vres); \ CHECK_SSUM1(b, a, t, v, vres) #define CHECK_SUM1(a, b, t, v, vres) \ VERIFY (INT_ADD_OVERFLOW (a, b) == (v)) #define CHECK_SSUM1(a, b, t, v, vres) \ CHECK_SUM1(a, b, t, v, vres); \ { \ t result; \ ASSERT (INT_ADD_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : ((a) + (b)))); \ } CHECK_SSUM (-1, LONG_MIN, long int, true, LONG_MAX); CHECK_SUM (-1, UINT_MAX, unsigned int, false, DONTCARE); CHECK_SSUM (-1L, INT_MIN, long int, INT_MIN == LONG_MIN, INT_MIN == LONG_MIN ? INT_MAX : DONTCARE); CHECK_SUM (0u, -1, unsigned int, true, 0u + -1); CHECK_SUM (0u, 0, unsigned int, false, DONTCARE); CHECK_SUM (0u, 1, unsigned int, false, DONTCARE); CHECK_SSUM (1, LONG_MAX, long int, true, LONG_MIN); CHECK_SUM (1, UINT_MAX, unsigned int, true, 0u); CHECK_SSUM (1L, INT_MAX, long int, INT_MAX == LONG_MAX, INT_MAX == LONG_MAX ? INT_MIN : DONTCARE); CHECK_SUM (1u, INT_MAX, unsigned int, INT_MAX == UINT_MAX, 1u + INT_MAX); CHECK_SUM (1u, INT_MIN, unsigned int, true, 1u + INT_MIN); { long int result; ASSERT (INT_ADD_WRAPV (1, INT_MAX, &result) == (INT_MAX == LONG_MAX)); ASSERT (INT_ADD_WRAPV (-1, INT_MIN, &result) == (INT_MIN == LONG_MIN)); } #define CHECK_DIFFERENCE(a, b, t, v, vres) \ VERIFY (INT_SUBTRACT_OVERFLOW (a, b) == (v)) #define CHECK_SDIFFERENCE(a, b, t, v, vres) \ CHECK_DIFFERENCE(a, b, t, v, vres); \ { \ t result; \ ASSERT (INT_SUBTRACT_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : ((a) - (b)))); \ } CHECK_DIFFERENCE (INT_MAX, 1u, unsigned int, UINT_MAX < INT_MAX - 1, INT_MAX - 1u); CHECK_DIFFERENCE (UINT_MAX, 1, unsigned int, false, UINT_MAX - 1); CHECK_DIFFERENCE (0u, -1, unsigned int, false, 0u - -1); CHECK_DIFFERENCE (UINT_MAX, -1, unsigned int, true, UINT_MAX - -1); CHECK_DIFFERENCE (INT_MIN, 1u, unsigned int, true, INT_MIN - 1u); CHECK_DIFFERENCE (-1, 0u, unsigned int, true, -1 - 0u); CHECK_SDIFFERENCE (-1, INT_MIN, int, false, -1 - INT_MIN); CHECK_SDIFFERENCE (-1, INT_MAX, int, false, -1 - INT_MAX); CHECK_SDIFFERENCE (0, INT_MIN, int, INT_MIN < -INT_MAX, INT_MIN); CHECK_SDIFFERENCE (0, INT_MAX, int, false, 0 - INT_MAX); { long int result; ASSERT (INT_SUBTRACT_WRAPV (INT_MAX, -1, &result) == (INT_MAX == LONG_MAX)); ASSERT (INT_SUBTRACT_WRAPV (INT_MIN, 1, &result) == (INT_MAX == LONG_MAX)); } #define CHECK_PRODUCT(a, b, t, v, vres) \ CHECK_PRODUCT1(a, b, t, v, vres); \ CHECK_PRODUCT1(b, a, t, v, vres) #define CHECK_SPRODUCT(a, b, t, v, vres) \ CHECK_SPRODUCT1(a, b, t, v, vres); \ CHECK_SPRODUCT1(b, a, t, v, vres) #define CHECK_PRODUCT1(a, b, t, v, vres) \ VERIFY (INT_MULTIPLY_OVERFLOW (a, b) == (v)) #define CHECK_SPRODUCT1(a, b, t, v, vres) \ CHECK_PRODUCT1(a, b, t, v, vres); \ { \ t result; \ ASSERT (INT_MULTIPLY_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : ((a) * (b)))); \ } CHECK_PRODUCT (-1, 1u, unsigned int, true, -1 * 1u); CHECK_SPRODUCT (-1, INT_MIN, int, INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); CHECK_PRODUCT (-1, UINT_MAX, unsigned int, true, -1 * UINT_MAX); CHECK_SPRODUCT (-32768, LONG_MAX / -32768 - 1, long int, true, LONG_MIN); CHECK_SPRODUCT (-12345, LONG_MAX / -12345, long int, false, DONTCARE); CHECK_SPRODUCT (0, -1, int, false, DONTCARE); CHECK_SPRODUCT (0, 0, int, false, DONTCARE); CHECK_PRODUCT (0, 0u, unsigned int, false, DONTCARE); CHECK_SPRODUCT (0, 1, int, false, DONTCARE); CHECK_SPRODUCT (0, INT_MAX, int, false, DONTCARE); CHECK_SPRODUCT (0, INT_MIN, int, false, DONTCARE); CHECK_PRODUCT (0, UINT_MAX, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, -1, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, 0, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, 0u, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, 1, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, INT_MAX, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, INT_MIN, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, UINT_MAX, unsigned int, false, DONTCARE); CHECK_SPRODUCT (1, INT_MAX, int, false, DONTCARE); CHECK_SPRODUCT (1, INT_MIN, int, false, DONTCARE); CHECK_PRODUCT (1, UINT_MAX, unsigned int, false, DONTCARE); CHECK_PRODUCT (1u, INT_MIN, unsigned int, true, 1u * INT_MIN); CHECK_PRODUCT (1u, INT_MAX, unsigned int, UINT_MAX < INT_MAX, 1u * INT_MAX); CHECK_PRODUCT (INT_MAX, UINT_MAX, unsigned int, true, INT_MAX * UINT_MAX); CHECK_PRODUCT (INT_MAX, ULONG_MAX, unsigned long int, true, INT_MAX * ULONG_MAX); CHECK_SPRODUCT (INT_MIN, LONG_MAX / INT_MIN - 1, long int, true, LONG_MIN); CHECK_SPRODUCT (INT_MIN, LONG_MAX / INT_MIN, long int, false, DONTCARE); CHECK_PRODUCT (INT_MIN, UINT_MAX, unsigned int, true, INT_MIN * UINT_MAX); CHECK_PRODUCT (INT_MIN, ULONG_MAX, unsigned long int, true, INT_MIN * ULONG_MAX); { long int result; ASSERT (INT_MULTIPLY_WRAPV (INT_MAX, INT_MAX, &result) == (LONG_MAX / INT_MAX < INT_MAX)); ASSERT (INT_MULTIPLY_WRAPV (INT_MAX, INT_MAX, &result) || result == INT_MAX * (long int) INT_MAX); ASSERT (INT_MULTIPLY_WRAPV (INT_MIN, INT_MIN, &result) || result == INT_MIN * (long int) INT_MIN); } # ifdef LLONG_MAX { long long int result; ASSERT (INT_MULTIPLY_WRAPV (LONG_MAX, LONG_MAX, &result) == (LLONG_MAX / LONG_MAX < LONG_MAX)); ASSERT (INT_MULTIPLY_WRAPV (LONG_MAX, LONG_MAX, &result) || result == LONG_MAX * (long long int) LONG_MAX); ASSERT (INT_MULTIPLY_WRAPV (LONG_MIN, LONG_MIN, &result) || result == LONG_MIN * (long long int) LONG_MIN); } # endif #define CHECK_QUOTIENT(a, b, v) VERIFY (INT_DIVIDE_OVERFLOW (a, b) == (v)) CHECK_QUOTIENT (INT_MIN, -1L, INT_MIN == LONG_MIN); CHECK_QUOTIENT (INT_MIN, UINT_MAX, false); CHECK_QUOTIENT (INTMAX_MIN, UINTMAX_MAX, false); CHECK_QUOTIENT (INTMAX_MIN, UINT_MAX, false); CHECK_QUOTIENT (-11, 10u, true); CHECK_QUOTIENT (-10, 10u, true); CHECK_QUOTIENT (-9, 10u, false); CHECK_QUOTIENT (11u, -10, true); CHECK_QUOTIENT (10u, -10, true); CHECK_QUOTIENT (9u, -10, false); #define CHECK_REMAINDER(a, b, v) VERIFY (INT_REMAINDER_OVERFLOW (a, b) == (v)) CHECK_REMAINDER (INT_MIN, -1L, INT_MIN == LONG_MIN); CHECK_REMAINDER (-1, UINT_MAX, true); CHECK_REMAINDER ((intmax_t) -1, UINTMAX_MAX, true); CHECK_REMAINDER (INTMAX_MIN, UINT_MAX, (INTMAX_MAX < UINT_MAX && - (unsigned int) INTMAX_MIN % UINT_MAX != 0)); CHECK_REMAINDER (INT_MIN, ULONG_MAX, INT_MIN % ULONG_MAX != 1); CHECK_REMAINDER (1u, -1, false); CHECK_REMAINDER (37*39u, -39, false); CHECK_REMAINDER (37*39u + 1, -39, true); CHECK_REMAINDER (37*39u - 1, -39, true); CHECK_REMAINDER (LONG_MAX, -INT_MAX, false); return 0; } gnuastro-0.5/bootstrapped/tests/test-inet_pton.c0000644000175000017500000000333013217200023017116 00000000000000/* Test of inet_pton function. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2009. */ #include #include #include "signature.h" SIGNATURE_CHECK (inet_pton, int, (int, const char *, void *)); #include #include #include "macros.h" int main (void) { #if defined AF_INET /* HAVE_IPV4 */ { /* This machine was for a long time known as ma2s2.mathematik.uni-karlsruhe.de. */ const char printable[] = "129.13.115.2"; struct in_addr internal; int ret; ret = inet_pton (AF_INET, printable, &internal); ASSERT (ret == 1); /* Verify that internal is filled in network byte order. */ ASSERT (((unsigned char *) &internal)[0] == 0x81); ASSERT (((unsigned char *) &internal)[1] == 0x0D); ASSERT (((unsigned char *) &internal)[2] == 0x73); ASSERT (((unsigned char *) &internal)[3] == 0x02); # ifdef WORDS_BIGENDIAN ASSERT (internal.s_addr == 0x810D7302); # else ASSERT (internal.s_addr == 0x02730D81); # endif } #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-ignore-value.c0000644000175000017500000000365213217200023017523 00000000000000/* Test the "ignore-value" module. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake. */ #include #include "ignore-value.h" #include #ifndef _GL_ATTRIBUTE_RETURN_CHECK # if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) # define _GL_ATTRIBUTE_RETURN_CHECK # else # define _GL_ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__)) # endif #endif struct s { int i; }; static char doChar (void) _GL_ATTRIBUTE_RETURN_CHECK; static int doInt (void) _GL_ATTRIBUTE_RETURN_CHECK; static off_t doOff (void) _GL_ATTRIBUTE_RETURN_CHECK; static void *doPtr (void) _GL_ATTRIBUTE_RETURN_CHECK; static struct s doStruct (void) _GL_ATTRIBUTE_RETURN_CHECK; static char doChar (void) { return 0; } static int doInt (void) { return 0; } static off_t doOff (void) { return 0; } static void * doPtr (void) { return NULL; } static struct s doStruct (void) { static struct s s1; return s1; } int main (void) { /* If this test can compile with -Werror and the same warnings as the rest of the project, then we are properly silencing warnings about ignored return values. */ ignore_value (doChar ()); ignore_value (doInt ()); ignore_value (doOff ()); ignore_value (doPtr ()); ignore_value (doStruct ()); return 0; } gnuastro-0.5/bootstrapped/tests/test-gettimeofday.c0000644000175000017500000000245113217200023017603 00000000000000/* * Copyright (C) 2005, 2007, 2009-2017 Free Software Foundation, Inc. * Written by Jim Meyering. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (gettimeofday, int, (struct timeval *, GETTIMEOFDAY_TIMEZONE *)); #include #include #include int main (void) { time_t t = 0; struct tm *lt; struct tm saved_lt; struct timeval tv; lt = localtime (&t); saved_lt = *lt; gettimeofday (&tv, NULL); if (memcmp (lt, &saved_lt, sizeof (struct tm)) != 0) { fprintf (stderr, "gettimeofday still clobbers the localtime buffer!\n"); return 1; } return 0; } gnuastro-0.5/bootstrapped/tests/test-getprogname.c0000644000175000017500000000400713217200023017431 00000000000000/* Test the gnulib getprogname module. Copyright (C) 2016-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "getprogname.h" #include #include #ifdef __hpux # define STREQ(a, b) (strncmp (a, b, 14) == 0) #else # define STREQ(a, b) (strcmp (a, b) == 0) #endif int main (void) { char const *p = getprogname (); /* libtool creates a temporary executable whose name is sometimes prefixed with "lt-" (depends on the platform). But the name of the temporary executable is a detail that should not be visible to the end user and to the test suite. Remove this "lt-" prefix here. */ if (strncmp (p, "lt-", 3) == 0) p += 3; /* Note: You can make this test fail a) by running it on a case-insensitive file system (such as on Windows, Cygwin, or on Mac OS X with a case-insensitive HFS+ file system), with an invocation that contains upper case characters, e.g. test-GETPROGNAME, b) by hardlinking or symlinking it to a different name (e.g. test-foo) and invoking it through that name. That's not the intended use. The Makefile always invokes it as 'test-getprogname${EXEEXT}'. */ #if defined __CYGWIN__ /* The Cygwin getprogname() function strips the ".exe" suffix. */ assert (STREQ (p, "test-getprogname")); #else assert (STREQ (p, "test-getprogname" EXEEXT)); #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-getopt-posix.c0000644000175000017500000000273213217200023017566 00000000000000/* Test of command line argument processing. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2009. */ #include /* None of the files accessed by this test are large, so disable the ftell link warning if we are not using the gnulib ftell module. */ #define _GL_NO_LARGE_FILES /* POSIX and glibc provide the getopt() function in , see http://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html https://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html But gnulib provides the getopt() function in , not in . Nevertheless the getopt() function should also be found in . */ #include #define TEST_GETOPT_GNU 0 #define TEST_GETOPT_TMP_NAME "test-getopt-posix.tmp" #include "test-getopt-main.h" gnuastro-0.5/bootstrapped/tests/test-getopt-gnu.c0000644000175000017500000000363013217200023017213 00000000000000/* Test of command line argument processing. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2009. */ #include /* None of the files accessed by this test are large, so disable the ftell link warning if we are not using the gnulib ftell module. */ #define _GL_NO_LARGE_FILES /* POSIX and glibc provide the getopt() function in , see http://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html https://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html But gnulib provides the getopt() function in , not in . This is what we are testing here. */ #include #ifndef __getopt_argv_const # define __getopt_argv_const const #endif #include "signature.h" SIGNATURE_CHECK (getopt_long, int, (int, char *__getopt_argv_const *, char const *, struct option const *, int *)); SIGNATURE_CHECK (getopt_long_only, int, (int, char *__getopt_argv_const *, char const *, struct option const *, int *)); #define TEST_GETOPT_GNU 1 #define TEST_GETOPT_TMP_NAME "test-getopt-gnu.tmp" #include "test-getopt-main.h" gnuastro-0.5/bootstrapped/tests/test-getline.c0000644000175000017500000000463213217200023016554 00000000000000/* Test of getline() function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Eric Blake , 2007. */ #include #include #include "signature.h" SIGNATURE_CHECK (getline, ssize_t, (char **, size_t *, FILE *)); #include #include #include "macros.h" int main (void) { FILE *f; char *line; size_t len; ssize_t result; /* Create test file. */ f = fopen ("test-getline.txt", "wb"); if (!f || fwrite ("a\nA\nbc\nd\0f", 1, 10, f) != 10 || fclose (f) != 0) { fputs ("Failed to create sample file.\n", stderr); remove ("test-getline.txt"); return 1; } f = fopen ("test-getline.txt", "rb"); if (!f) { fputs ("Failed to reopen sample file.\n", stderr); remove ("test-getline.txt"); return 1; } /* Test initial allocation, which must include trailing NUL. */ line = NULL; len = 0; result = getline (&line, &len, f); ASSERT (result == 2); ASSERT (strcmp (line, "a\n") == 0); ASSERT (2 < len); free (line); /* Test initial allocation again, with line = NULL and len != 0. */ line = NULL; len = (size_t)(~0) / 4; result = getline (&line, &len, f); ASSERT (result == 2); ASSERT (strcmp (line, "A\n") == 0); ASSERT (2 < len); free (line); /* Test growth of buffer, must not leak. */ len = 1; line = malloc (len); result = getline (&line, &len, f); ASSERT (result == 3); ASSERT (strcmp (line, "bc\n") == 0); ASSERT (3 < len); /* Test embedded NULs and EOF behavior. */ result = getline (&line, &len, f); ASSERT (result == 3); ASSERT (memcmp (line, "d\0f", 4) == 0); ASSERT (3 < len); result = getline (&line, &len, f); ASSERT (result == -1); free (line); fclose (f); remove ("test-getline.txt"); return 0; } gnuastro-0.5/bootstrapped/tests/test-getdtablesize.c0000644000175000017500000000215113217200023017745 00000000000000/* Test of getdtablesize() function. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include #include "signature.h" SIGNATURE_CHECK (getdtablesize, int, (void)); #include "macros.h" int main (int argc, char *argv[]) { ASSERT (getdtablesize () >= 3); ASSERT (dup2 (0, getdtablesize() - 1) == getdtablesize () - 1); ASSERT (dup2 (0, getdtablesize()) == -1); return 0; } gnuastro-0.5/bootstrapped/tests/test-getdelim.c0000644000175000017500000000465513217200023016724 00000000000000/* Test of getdelim() function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Eric Blake , 2007. */ #include #include #include "signature.h" SIGNATURE_CHECK (getdelim, ssize_t, (char **, size_t *, int, FILE *)); #include #include #include "macros.h" int main (void) { FILE *f; char *line; size_t len; ssize_t result; /* Create test file. */ f = fopen ("test-getdelim.txt", "wb"); if (!f || fwrite ("anAnbcnd\0f", 1, 10, f) != 10 || fclose (f) != 0) { fputs ("Failed to create sample file.\n", stderr); remove ("test-getdelim.txt"); return 1; } f = fopen ("test-getdelim.txt", "rb"); if (!f) { fputs ("Failed to reopen sample file.\n", stderr); remove ("test-getdelim.txt"); return 1; } /* Test initial allocation, which must include trailing NUL. */ line = NULL; len = 0; result = getdelim (&line, &len, 'n', f); ASSERT (result == 2); ASSERT (strcmp (line, "an") == 0); ASSERT (2 < len); free (line); /* Test initial allocation again, with line = NULL and len != 0. */ line = NULL; len = (size_t)(~0) / 4; result = getdelim (&line, &len, 'n', f); ASSERT (result == 2); ASSERT (strcmp (line, "An") == 0); ASSERT (2 < len); free (line); /* Test growth of buffer. */ line = malloc (1); len = 1; result = getdelim (&line, &len, 'n', f); ASSERT (result == 3); ASSERT (strcmp (line, "bcn") == 0); ASSERT (3 < len); /* Test embedded NULs and EOF behavior. */ result = getdelim (&line, &len, 'n', f); ASSERT (result == 3); ASSERT (memcmp (line, "d\0f", 4) == 0); ASSERT (3 < len); result = getdelim (&line, &len, 'n', f); ASSERT (result == -1); free (line); fclose (f); remove ("test-getdelim.txt"); return 0; } gnuastro-0.5/bootstrapped/tests/test-getcwd-lgpl.c0000644000175000017500000000510613217200023017333 00000000000000/* Test of getcwd() function. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (getcwd, char *, (char *, size_t)); #include #include #include #include #include "macros.h" int main (int argc, char **argv) { char *pwd1; char *pwd2; /* If the user provides an argument, attempt to chdir there first. */ if (1 < argc) { if (chdir (argv[1]) == 0) printf ("changed to directory %s\n", argv[1]); } pwd1 = getcwd (NULL, 0); ASSERT (pwd1 && *pwd1); if (1 < argc) printf ("cwd=%s\n", pwd1); /* Make sure the result is usable. */ ASSERT (chdir (pwd1) == 0); ASSERT (chdir (".//./.") == 0); /* Make sure that result is normalized. */ pwd2 = getcwd (NULL, 0); ASSERT (pwd2); ASSERT (strcmp (pwd1, pwd2) == 0); free (pwd2); { size_t len = strlen (pwd1); ssize_t i = len - 10; if (i < 1) i = 1; pwd2 = getcwd (NULL, len + 1); ASSERT (pwd2); free (pwd2); pwd2 = malloc (len + 2); for ( ; i <= len; i++) { char *tmp; errno = 0; ASSERT (getcwd (pwd2, i) == NULL); ASSERT (errno == ERANGE); /* Allow either glibc or BSD behavior, since POSIX allows both. */ errno = 0; tmp = getcwd (NULL, i); if (tmp) { ASSERT (strcmp (pwd1, tmp) == 0); free (tmp); } else { ASSERT (errno == ERANGE); } } ASSERT (getcwd (pwd2, len + 1) == pwd2); pwd2[len] = '/'; pwd2[len + 1] = '\0'; } ASSERT (strstr (pwd2, "/./") == NULL); ASSERT (strstr (pwd2, "/../") == NULL); ASSERT (strstr (pwd2 + 1 + (pwd2[1] == '/'), "//") == NULL); /* Validate a POSIX requirement on size. */ errno = 0; ASSERT (getcwd(pwd2, 0) == NULL); ASSERT (errno == EINVAL); free (pwd1); free (pwd2); return 0; } gnuastro-0.5/bootstrapped/tests/test-fwrite.c0000644000175000017500000000513113217200023016420 00000000000000/* Test of fwrite() function. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (fwrite, size_t, (const void *, size_t, size_t, FILE *)); #include #include #include #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main (int argc, char **argv) { const char *filename = "test-fwrite.txt"; /* We don't have an fwrite() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Test that fwrite() on an unbuffered stream sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "w"); char buf[5] = "world"; ASSERT (fp != NULL); setvbuf (fp, NULL, _IONBF, 0); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } /* Test that fwrite() on an unbuffered stream sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "w"); if (fp != NULL) { char buf[5] = "world"; setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "w"); if (fp != NULL) { char buf[5] = "world"; setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } gnuastro-0.5/bootstrapped/tests/test-func.c0000644000175000017500000000232413217200023016054 00000000000000/* Test whether __func__ is available Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include #include "macros.h" int main () { ASSERT (strlen (__func__) > 0); /* On SunPRO C 5.9, sizeof __func__ evaluates to 0. The compiler warns: "warning: null dimension: sizeof()". */ #if !defined __SUNPRO_C ASSERT (strlen (__func__) + 1 == sizeof __func__); #endif ASSERT (strcmp (__func__, "main") == 0 || strcmp (__func__, "") == 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-ftruncate.c0000644000175000017500000000301713217200023017114 00000000000000/* Test truncating a file. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (ftruncate, int, (int, off_t)); #include #include #include "macros.h" int main (int argc, char *argv[]) { const char *filename = argv[1]; /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (ftruncate (-1, 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (ftruncate (99, 0) == -1); ASSERT (errno == EBADF); } /* Test behaviour for read-only file descriptors. */ { int fd = open (filename, O_RDONLY); ASSERT (fd >= 0); errno = 0; ASSERT (ftruncate (fd, 0) == -1); ASSERT (errno == EBADF || errno == EINVAL || errno == EACCES /* seen on mingw */ ); close (fd); } return 0; } gnuastro-0.5/bootstrapped/tests/test-fstat.c0000644000175000017500000000237513217200023016250 00000000000000/* Tests of fstat() function. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (fstat, int, (int, struct stat *)); #include #include #include "macros.h" int main (int argc, char *argv[]) { /* Test behaviour for invalid file descriptors. */ { struct stat statbuf; errno = 0; ASSERT (fstat (-1, &statbuf) == -1); ASSERT (errno == EBADF); } { struct stat statbuf; close (99); errno = 0; ASSERT (fstat (99, &statbuf) == -1); ASSERT (errno == EBADF); } return 0; } gnuastro-0.5/bootstrapped/tests/test-fread.c0000644000175000017500000000516113217200023016204 00000000000000/* Test of fread() function. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (fread, size_t, (void *, size_t, size_t, FILE *)); #include #include #include #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main (int argc, char **argv) { const char *filename = "test-fread.txt"; /* We don't have an fread() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Prepare a file. */ { const char text[] = "hello world"; int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600); ASSERT (fd >= 0); ASSERT (write (fd, text, sizeof (text)) == sizeof (text)); ASSERT (close (fd) == 0); } /* Test that fread() sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "r"); char buf[5]; ASSERT (fp != NULL); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fread (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } /* Test that fread() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "r"); if (fp != NULL) { char buf[1]; errno = 0; ASSERT (fread (buf, 1, 1, fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "r"); if (fp != NULL) { char buf[1]; errno = 0; ASSERT (fread (buf, 1, 1, fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } gnuastro-0.5/bootstrapped/tests/test-fputc.c0000644000175000017500000000465613217200023016254 00000000000000/* Test of fputc() function. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (fputc, int, (int, FILE *)); #include #include #include #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main (int argc, char **argv) { const char *filename = "test-fputc.txt"; /* We don't have an fputc() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Test that fputc() on an unbuffered stream sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "w"); ASSERT (fp != NULL); setvbuf (fp, NULL, _IONBF, 0); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fputc ('x', fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } /* Test that fputc() on an unbuffered stream sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "w"); if (fp != NULL) { setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fputc ('x', fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "w"); if (fp != NULL) { setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fputc ('x', fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } gnuastro-0.5/bootstrapped/tests/test-float.c0000644000175000017500000002162513217200023016233 00000000000000/* Test of substitute. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2011. */ #include #include #include "fpucw.h" #include "macros.h" /* Check that FLT_RADIX is a constant expression. */ int a[] = { FLT_RADIX }; #if FLT_RADIX == 2 /* Return 2^n. */ static float pow2f (int n) { int k = n; volatile float x = 1; volatile float y = 2; /* Invariant: 2^n == x * y^k. */ if (k < 0) { y = 0.5f; k = - k; } while (k > 0) { if (k != 2 * (k / 2)) { x = x * y; k = k - 1; } if (k == 0) break; y = y * y; k = k / 2; } /* Now k == 0, hence x == 2^n. */ return x; } /* Return 2^n. */ static double pow2d (int n) { int k = n; volatile double x = 1; volatile double y = 2; /* Invariant: 2^n == x * y^k. */ if (k < 0) { y = 0.5; k = - k; } while (k > 0) { if (k != 2 * (k / 2)) { x = x * y; k = k - 1; } if (k == 0) break; y = y * y; k = k / 2; } /* Now k == 0, hence x == 2^n. */ return x; } /* Return 2^n. */ static long double pow2l (int n) { int k = n; volatile long double x = 1; volatile long double y = 2; /* Invariant: 2^n == x * y^k. */ if (k < 0) { y = 0.5L; k = - k; } while (k > 0) { if (k != 2 * (k / 2)) { x = x * y; k = k - 1; } if (k == 0) break; y = y * y; k = k / 2; } /* Now k == 0, hence x == 2^n. */ return x; } /* ----------------------- Check macros for 'float' ----------------------- */ /* Check that the FLT_* macros expand to constant expressions. */ int fb[] = { FLT_MANT_DIG, FLT_MIN_EXP, FLT_MAX_EXP, FLT_DIG, FLT_MIN_10_EXP, FLT_MAX_10_EXP }; float fc[] = { FLT_EPSILON, FLT_MIN, FLT_MAX }; static void test_float (void) { /* Check that the value of FLT_MIN_EXP is well parenthesized. */ ASSERT ((FLT_MIN_EXP % 101111) == (FLT_MIN_EXP) % 101111); /* Check that the value of DBL_MIN_10_EXP is well parenthesized. */ ASSERT ((FLT_MIN_10_EXP % 101111) == (FLT_MIN_10_EXP) % 101111); /* Check that 'float' is as specified in IEEE 754. */ ASSERT (FLT_MANT_DIG == 24); ASSERT (FLT_MIN_EXP == -125); ASSERT (FLT_MAX_EXP == 128); /* Check the value of FLT_MIN_10_EXP. */ ASSERT (FLT_MIN_10_EXP == - (int) (- (FLT_MIN_EXP - 1) * 0.30103)); /* Check the value of FLT_DIG. */ ASSERT (FLT_DIG == (int) ((FLT_MANT_DIG - 1) * 0.30103)); /* Check the value of FLT_MIN_10_EXP. */ ASSERT (FLT_MIN_10_EXP == - (int) (- (FLT_MIN_EXP - 1) * 0.30103)); /* Check the value of FLT_MAX_10_EXP. */ ASSERT (FLT_MAX_10_EXP == (int) (FLT_MAX_EXP * 0.30103)); /* Check the value of FLT_MAX. */ { volatile float m = FLT_MAX; int n; ASSERT (m + m > m); for (n = 0; n <= 2 * FLT_MANT_DIG; n++) { volatile float pow2_n = pow2f (n); /* 2^n */ volatile float x = m + (m / pow2_n); if (x > m) ASSERT (x + x == x); else ASSERT (!(x + x == x)); } } /* Check the value of FLT_MIN. */ { volatile float m = FLT_MIN; volatile float x = pow2f (FLT_MIN_EXP - 1); ASSERT (m == x); } /* Check the value of FLT_EPSILON. */ { volatile float e = FLT_EPSILON; volatile float me; int n; me = 1.0f + e; ASSERT (me > 1.0f); ASSERT (me - 1.0f == e); for (n = 0; n <= 2 * FLT_MANT_DIG; n++) { volatile float half_n = pow2f (- n); /* 2^-n */ volatile float x = me - half_n; if (x < me) ASSERT (x <= 1.0f); } } } /* ----------------------- Check macros for 'double' ----------------------- */ /* Check that the DBL_* macros expand to constant expressions. */ int db[] = { DBL_MANT_DIG, DBL_MIN_EXP, DBL_MAX_EXP, DBL_DIG, DBL_MIN_10_EXP, DBL_MAX_10_EXP }; double dc[] = { DBL_EPSILON, DBL_MIN, DBL_MAX }; static void test_double (void) { /* Check that the value of DBL_MIN_EXP is well parenthesized. */ ASSERT ((DBL_MIN_EXP % 101111) == (DBL_MIN_EXP) % 101111); /* Check that the value of DBL_MIN_10_EXP is well parenthesized. */ ASSERT ((DBL_MIN_10_EXP % 101111) == (DBL_MIN_10_EXP) % 101111); /* Check that 'double' is as specified in IEEE 754. */ ASSERT (DBL_MANT_DIG == 53); ASSERT (DBL_MIN_EXP == -1021); ASSERT (DBL_MAX_EXP == 1024); /* Check the value of DBL_MIN_10_EXP. */ ASSERT (DBL_MIN_10_EXP == - (int) (- (DBL_MIN_EXP - 1) * 0.30103)); /* Check the value of DBL_DIG. */ ASSERT (DBL_DIG == (int) ((DBL_MANT_DIG - 1) * 0.30103)); /* Check the value of DBL_MIN_10_EXP. */ ASSERT (DBL_MIN_10_EXP == - (int) (- (DBL_MIN_EXP - 1) * 0.30103)); /* Check the value of DBL_MAX_10_EXP. */ ASSERT (DBL_MAX_10_EXP == (int) (DBL_MAX_EXP * 0.30103)); /* Check the value of DBL_MAX. */ { volatile double m = DBL_MAX; int n; ASSERT (m + m > m); for (n = 0; n <= 2 * DBL_MANT_DIG; n++) { volatile double pow2_n = pow2d (n); /* 2^n */ volatile double x = m + (m / pow2_n); if (x > m) ASSERT (x + x == x); else ASSERT (!(x + x == x)); } } /* Check the value of DBL_MIN. */ { volatile double m = DBL_MIN; volatile double x = pow2d (DBL_MIN_EXP - 1); ASSERT (m == x); } /* Check the value of DBL_EPSILON. */ { volatile double e = DBL_EPSILON; volatile double me; int n; me = 1.0 + e; ASSERT (me > 1.0); ASSERT (me - 1.0 == e); for (n = 0; n <= 2 * DBL_MANT_DIG; n++) { volatile double half_n = pow2d (- n); /* 2^-n */ volatile double x = me - half_n; if (x < me) ASSERT (x <= 1.0); } } } /* -------------------- Check macros for 'long double' -------------------- */ /* Check that the LDBL_* macros expand to constant expressions. */ int lb[] = { LDBL_MANT_DIG, LDBL_MIN_EXP, LDBL_MAX_EXP, LDBL_DIG, LDBL_MIN_10_EXP, LDBL_MAX_10_EXP }; long double lc1 = LDBL_EPSILON; long double lc2 = LDBL_MIN; #if 0 /* LDBL_MAX is not a constant expression on some platforms. */ long double lc3 = LDBL_MAX; #endif static void test_long_double (void) { /* Check that the value of LDBL_MIN_EXP is well parenthesized. */ ASSERT ((LDBL_MIN_EXP % 101111) == (LDBL_MIN_EXP) % 101111); /* Check that the value of LDBL_MIN_10_EXP is well parenthesized. */ ASSERT ((LDBL_MIN_10_EXP % 101111) == (LDBL_MIN_10_EXP) % 101111); /* Check that 'long double' is at least as wide as 'double'. */ ASSERT (LDBL_MANT_DIG >= DBL_MANT_DIG); ASSERT (LDBL_MIN_EXP - LDBL_MANT_DIG <= DBL_MIN_EXP - DBL_MANT_DIG); ASSERT (LDBL_MAX_EXP >= DBL_MAX_EXP); /* Check the value of LDBL_DIG. */ ASSERT (LDBL_DIG == (int)((LDBL_MANT_DIG - 1) * 0.30103)); /* Check the value of LDBL_MIN_10_EXP. */ ASSERT (LDBL_MIN_10_EXP == - (int) (- (LDBL_MIN_EXP - 1) * 0.30103)); /* Check the value of LDBL_MAX_10_EXP. */ ASSERT (LDBL_MAX_10_EXP == (int) (LDBL_MAX_EXP * 0.30103)); /* Check the value of LDBL_MAX. */ { volatile long double m = LDBL_MAX; int n; ASSERT (m + m > m); for (n = 0; n <= 2 * LDBL_MANT_DIG; n++) { volatile long double pow2_n = pow2l (n); /* 2^n */ volatile long double x = m + (m / pow2_n); if (x > m) ASSERT (x + x == x); else ASSERT (!(x + x == x)); } } /* Check the value of LDBL_MIN. */ { volatile long double m = LDBL_MIN; volatile long double x = pow2l (LDBL_MIN_EXP - 1); ASSERT (m == x); } /* Check the value of LDBL_EPSILON. */ { volatile long double e = LDBL_EPSILON; volatile long double me; int n; me = 1.0L + e; ASSERT (me > 1.0L); ASSERT (me - 1.0L == e); for (n = 0; n <= 2 * LDBL_MANT_DIG; n++) { volatile long double half_n = pow2l (- n); /* 2^-n */ volatile long double x = me - half_n; if (x < me) ASSERT (x <= 1.0L); } } } int main () { test_float (); test_double (); { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); test_long_double (); END_LONG_DOUBLE_ROUNDING (); } return 0; } #else int main () { fprintf (stderr, "Skipping test: FLT_RADIX is not 2.\n"); return 77; } #endif gnuastro-0.5/bootstrapped/tests/test-fgetc.c0000644000175000017500000000476513217200023016224 00000000000000/* Test of fgetc() function. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (fgetc, int, (FILE *)); #include #include #include #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main (int argc, char **argv) { const char *filename = "test-fgetc.txt"; /* We don't have an fgetc() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Prepare a file. */ { const char text[] = "hello world"; int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600); ASSERT (fd >= 0); ASSERT (write (fd, text, sizeof (text)) == sizeof (text)); ASSERT (close (fd) == 0); } /* Test that fgetc() sets errno if someone else closes the stream fd behind the back of stdio. */ { FILE *fp = fopen (filename, "r"); ASSERT (fp != NULL); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fgetc (fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } /* Test that fgetc() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "r"); if (fp != NULL) { errno = 0; ASSERT (fgetc (fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "r"); if (fp != NULL) { errno = 0; ASSERT (fgetc (fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } gnuastro-0.5/bootstrapped/tests/test-fdopen.c0000644000175000017500000000255713217200023016404 00000000000000/* Test opening a stream with a file descriptor. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (fdopen, FILE *, (int, const char *)); #include #include #include "macros.h" int main (void) { /* Test behavior on failure. POSIX makes it hard to check for failure, since the behavior is not well-defined on invalid file descriptors, so try fdopen 1000 times and if that's not enough to fail due to EMFILE, so be it. */ int i; for (i = 0; i < 1000; i++) { errno = 0; if (! fdopen (STDOUT_FILENO, "w")) { ASSERT (errno != 0); break; } } return 0; } gnuastro-0.5/bootstrapped/tests/test-fcntl-h.c0000644000175000017500000000552513217200023016462 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include /* Check that the various O_* macros are defined. */ int o = (O_DIRECT | O_DIRECTORY | O_DSYNC | O_IGNORE_CTTY | O_NDELAY | O_NOATIME | O_NONBLOCK | O_NOCTTY | O_NOFOLLOW | O_NOLINK | O_NOLINKS | O_NOTRANS | O_RSYNC | O_SYNC | O_TTY_INIT | O_BINARY | O_TEXT); /* Check that the various SEEK_* macros are defined. */ int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; /* Check that the FD_* macros are defined. */ int i = FD_CLOEXEC; /* Check that the types are all defined. */ pid_t t1; off_t t2; mode_t t3; int main (void) { /* Ensure no overlap in SEEK_*. */ switch (0) { case SEEK_CUR: case SEEK_END: case SEEK_SET: ; } /* Ensure no dangerous overlap in non-zero gnulib-defined replacements. */ switch (O_RDONLY) { /* Access modes */ case O_RDONLY: case O_WRONLY: case O_RDWR: #if O_EXEC && O_EXEC != O_RDONLY case O_EXEC: #endif #if O_SEARCH && O_EXEC != O_SEARCH && O_SEARCH != O_RDONLY case O_SEARCH: #endif i = ! (~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)); break; /* Everyone should have these */ case O_CREAT: case O_EXCL: case O_TRUNC: case O_APPEND: break; /* These might be 0 or O_RDONLY, only test non-zero versions. */ #if O_CLOEXEC case O_CLOEXEC: #endif #if O_DIRECT case O_DIRECT: #endif #if O_DIRECTORY case O_DIRECTORY: #endif #if O_DSYNC case O_DSYNC: #endif #if O_IGNORE_CTTY case O_IGNORE_CTTY: #endif #if O_NOATIME case O_NOATIME: #endif #if O_NONBLOCK case O_NONBLOCK: #endif #if O_NOCTTY case O_NOCTTY: #endif #if O_NOFOLLOW case O_NOFOLLOW: #endif #if O_NOLINK case O_NOLINK: #endif #if O_NOLINKS case O_NOLINKS: #endif #if O_NOTRANS case O_NOTRANS: #endif #if O_RSYNC && O_RSYNC != O_DSYNC case O_RSYNC: #endif #if O_SYNC && O_SYNC != O_DSYNC && O_SYNC != O_RSYNC case O_SYNC: #endif #if O_TTY_INIT case O_TTY_INIT: #endif #if O_BINARY case O_BINARY: #endif #if O_TEXT case O_TEXT: #endif ; } return !i; } gnuastro-0.5/bootstrapped/tests/test-fcntl.c0000644000175000017500000002350613217200023016234 00000000000000/* Test of fcntl(2). Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include /* Specification. */ #include #include "signature.h" SIGNATURE_CHECK (fcntl, int, (int, int, ...)); /* Helpers. */ #include #include #include #include #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif #endif #include "binary-io.h" #include "macros.h" #if !O_BINARY # define setmode(f,m) zero () static int zero (void) { return 0; } #endif /* Return true if FD is open. */ static bool is_open (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } /* Return true if FD is open and inheritable across exec/spawn. */ static bool is_inheritable (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return false; return (flags & HANDLE_FLAG_INHERIT) != 0; #else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; #endif } /* Return non-zero if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static bool is_mode (int fd, int mode) { int value = setmode (fd, O_BINARY); setmode (fd, value); return mode == value; } /* Since native fcntl can have more supported operations than our replacement is aware of, and since various operations assign different types to the vararg argument, a wrapper around fcntl must be able to pass a vararg of unknown type on through to the original fcntl. Make sure that this works properly: func1 behaves like the original fcntl interpreting the vararg as an int or a pointer to a struct, and func2 behaves like rpl_fcntl that doesn't know what type to forward. */ struct dummy_struct { long filler; int value; }; static int func1 (int a, ...) { va_list arg; int i; va_start (arg, a); if (a < 4) i = va_arg (arg, int); else { struct dummy_struct *s = va_arg (arg, struct dummy_struct *); i = s->value; } va_end (arg); return i; } static int func2 (int a, ...) { va_list arg; void *p; va_start (arg, a); p = va_arg (arg, void *); va_end (arg); return func1 (a, p); } /* Ensure that all supported fcntl actions are distinct, and usable in preprocessor expressions. */ static void check_flags (void) { switch (0) { case F_DUPFD: #if F_DUPFD #endif case F_DUPFD_CLOEXEC: #if F_DUPFD_CLOEXEC #endif case F_GETFD: #if F_GETFD #endif #ifdef F_SETFD case F_SETFD: # if F_SETFD # endif #endif #ifdef F_GETFL case F_GETFL: # if F_GETFL # endif #endif #ifdef F_SETFL case F_SETFL: # if F_SETFL # endif #endif #ifdef F_GETOWN case F_GETOWN: # if F_GETOWN # endif #endif #ifdef F_SETOWN case F_SETOWN: # if F_SETOWN # endif #endif #ifdef F_GETLK case F_GETLK: # if F_GETLK # endif #endif #ifdef F_SETLK case F_SETLK: # if F_SETLK # endif #endif #ifdef F_SETLKW case F_SETLKW: # if F_SETLKW # endif #endif ; } } int main (void) { const char *file = "test-fcntl.tmp"; int fd; int bad_fd = getdtablesize (); /* Sanity check that rpl_fcntl is likely to work. */ ASSERT (func2 (1, 2) == 2); ASSERT (func2 (2, -2) == -2); ASSERT (func2 (3, 0x80000000) == 0x80000000); { struct dummy_struct s = { 0L, 4 }; ASSERT (func2 (4, &s) == 4); } check_flags (); /* Assume std descriptors were provided by invoker, and ignore fds that might have been inherited. */ fd = creat (file, 0600); ASSERT (STDERR_FILENO < fd); close (fd + 1); close (fd + 2); /* For F_DUPFD*, the source must be valid. */ errno = 0; ASSERT (fcntl (-1, F_DUPFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_DUPFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_DUPFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (-1, F_DUPFD_CLOEXEC, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_DUPFD_CLOEXEC, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_DUPFD_CLOEXEC, 0) == -1); ASSERT (errno == EBADF); /* For F_DUPFD*, the destination must be valid. */ errno = 0; ASSERT (fcntl (fd, F_DUPFD, -1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD, bad_fd) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, -1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, bad_fd) == -1); ASSERT (errno == EINVAL); /* For F_DUPFD*, check for correct inheritance, as well as preservation of text vs. binary. */ setmode (fd, O_BINARY); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (!is_open (fd + 2)); ASSERT (is_inheritable (fd)); ASSERT (is_mode (fd, O_BINARY)); ASSERT (fcntl (fd, F_DUPFD, fd) == fd + 1); ASSERT (is_open (fd)); ASSERT (is_open (fd + 1)); ASSERT (!is_open (fd + 2)); ASSERT (is_inheritable (fd + 1)); ASSERT (is_mode (fd, O_BINARY)); ASSERT (is_mode (fd + 1, O_BINARY)); ASSERT (close (fd + 1) == 0); ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, fd + 2) == fd + 2); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (is_open (fd + 2)); ASSERT (is_inheritable (fd)); ASSERT (!is_inheritable (fd + 2)); ASSERT (is_mode (fd, O_BINARY)); ASSERT (is_mode (fd + 2, O_BINARY)); ASSERT (close (fd) == 0); setmode (fd + 2, O_TEXT); ASSERT (fcntl (fd + 2, F_DUPFD, fd + 1) == fd + 1); ASSERT (!is_open (fd)); ASSERT (is_open (fd + 1)); ASSERT (is_open (fd + 2)); ASSERT (is_inheritable (fd + 1)); ASSERT (!is_inheritable (fd + 2)); ASSERT (is_mode (fd + 1, O_TEXT)); ASSERT (is_mode (fd + 2, O_TEXT)); ASSERT (close (fd + 1) == 0); ASSERT (fcntl (fd + 2, F_DUPFD_CLOEXEC, 0) == fd); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (is_open (fd + 2)); ASSERT (!is_inheritable (fd)); ASSERT (!is_inheritable (fd + 2)); ASSERT (is_mode (fd, O_TEXT)); ASSERT (is_mode (fd + 2, O_TEXT)); ASSERT (close (fd + 2) == 0); /* Test F_GETFD on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_GETFD) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_GETFD) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_GETFD) == -1); ASSERT (errno == EBADF); /* Test F_GETFD, the FD_CLOEXEC bit. */ { int result = fcntl (fd, F_GETFD); ASSERT (0 <= result); ASSERT ((result & FD_CLOEXEC) == FD_CLOEXEC); ASSERT (dup (fd) == fd + 1); result = fcntl (fd + 1, F_GETFD); ASSERT (0 <= result); ASSERT ((result & FD_CLOEXEC) == 0); ASSERT (close (fd + 1) == 0); } #ifdef F_SETFD /* Test F_SETFD on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_SETFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_SETFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_SETFD, 0) == -1); ASSERT (errno == EBADF); #endif #ifdef F_GETFL /* Test F_GETFL on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_GETFL) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_GETFL) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_GETFL) == -1); ASSERT (errno == EBADF); #endif #ifdef F_SETFL /* Test F_SETFL on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_SETFL, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_SETFL, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_SETFL, 0) == -1); ASSERT (errno == EBADF); #endif #ifdef F_GETOWN /* Test F_GETOWN on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_GETOWN) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_GETOWN) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_GETOWN) == -1); ASSERT (errno == EBADF); #endif #ifdef F_SETOWN /* Test F_SETFL on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_SETOWN, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_SETOWN, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_SETOWN, 0) == -1); ASSERT (errno == EBADF); #endif /* Cleanup. */ ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-errno.c0000644000175000017500000000555513217200023016257 00000000000000/* Test of substitute. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include /* Verify that the POSIX mandated errno values exist and can be used as initializers outside of a function. The variable names happen to match the Linux/x86 error numbers. */ int e1 = EPERM; int e2 = ENOENT; int e3 = ESRCH; int e4 = EINTR; int e5 = EIO; int e6 = ENXIO; int e7 = E2BIG; int e8 = ENOEXEC; int e9 = EBADF; int e10 = ECHILD; int e11 = EAGAIN; int e11a = EWOULDBLOCK; int e12 = ENOMEM; int e13 = EACCES; int e14 = EFAULT; int e16 = EBUSY; int e17 = EEXIST; int e18 = EXDEV; int e19 = ENODEV; int e20 = ENOTDIR; int e21 = EISDIR; int e22 = EINVAL; int e23 = ENFILE; int e24 = EMFILE; int e25 = ENOTTY; int e26 = ETXTBSY; int e27 = EFBIG; int e28 = ENOSPC; int e29 = ESPIPE; int e30 = EROFS; int e31 = EMLINK; int e32 = EPIPE; int e33 = EDOM; int e34 = ERANGE; int e35 = EDEADLK; int e36 = ENAMETOOLONG; int e37 = ENOLCK; int e38 = ENOSYS; int e39 = ENOTEMPTY; int e40 = ELOOP; int e42 = ENOMSG; int e43 = EIDRM; int e67 = ENOLINK; int e71 = EPROTO; int e72 = EMULTIHOP; int e74 = EBADMSG; int e75 = EOVERFLOW; int e84 = EILSEQ; int e88 = ENOTSOCK; int e89 = EDESTADDRREQ; int e90 = EMSGSIZE; int e91 = EPROTOTYPE; int e92 = ENOPROTOOPT; int e93 = EPROTONOSUPPORT; int e95 = EOPNOTSUPP; int e95a = ENOTSUP; int e97 = EAFNOSUPPORT; int e98 = EADDRINUSE; int e99 = EADDRNOTAVAIL; int e100 = ENETDOWN; int e101 = ENETUNREACH; int e102 = ENETRESET; int e103 = ECONNABORTED; int e104 = ECONNRESET; int e105 = ENOBUFS; int e106 = EISCONN; int e107 = ENOTCONN; int e110 = ETIMEDOUT; int e111 = ECONNREFUSED; int e113 = EHOSTUNREACH; int e114 = EALREADY; int e115 = EINPROGRESS; int e116 = ESTALE; int e122 = EDQUOT; int e125 = ECANCELED; int e130 = EOWNERDEAD; int e131 = ENOTRECOVERABLE; /* Don't verify that these errno values are all different, except for possibly EWOULDBLOCK == EAGAIN. Even Linux/x86 does not pass this check: it has ENOTSUP == EOPNOTSUPP. */ int main () { /* Verify that errno can be assigned. */ errno = EOVERFLOW; /* snprintf() callers want to distinguish EINVAL and EOVERFLOW. */ if (errno == EINVAL) return 1; return 0; } gnuastro-0.5/bootstrapped/tests/test-environ.c0000644000175000017500000000273013217200023016602 00000000000000/* Test of environ variable. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include #include int main () { /* The environment variables that are set even in the weirdest situations are HOME and PATH. POSIX says that HOME is initialized by the system, and that PATH may be unset. But in practice it's more frequent to see HOME unset and PATH set. So we test the presence of PATH. */ char **remaining_variables = environ; char *string; for (; (string = *remaining_variables) != NULL; remaining_variables++) { if (strncmp (string, "PATH=", 5) == 0) /* Found the PATH environment variable. */ return 0; } /* Failed to find the PATH environment variable. */ return 1; } gnuastro-0.5/bootstrapped/tests/test-dup2.c0000644000175000017500000001406213217200023015775 00000000000000/* Test duplicating file descriptors. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include #include "signature.h" SIGNATURE_CHECK (dup2, int, (int, int)); #include #include #if HAVE_SYS_RESOURCE_H # include #endif #include "binary-io.h" #if GNULIB_TEST_CLOEXEC # include "cloexec.h" #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif #endif #include "macros.h" /* Return non-zero if FD is open. */ static int is_open (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } #if GNULIB_TEST_CLOEXEC /* Return non-zero if FD is open and inheritable across exec/spawn. */ static int is_inheritable (int fd) { # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return 0; return (flags & HANDLE_FLAG_INHERIT) != 0; # else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; # endif } #endif /* GNULIB_TEST_CLOEXEC */ #if !O_BINARY # define setmode(f,m) zero () static int zero (void) { return 0; } #endif /* Return non-zero if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static int is_mode (int fd, int mode) { int value = setmode (fd, O_BINARY); setmode (fd, value); return mode == value; } int main (void) { const char *file = "test-dup2.tmp"; char buffer[1]; int bad_fd = getdtablesize (); int fd = open (file, O_CREAT | O_TRUNC | O_RDWR, 0600); /* Assume std descriptors were provided by invoker. */ ASSERT (STDERR_FILENO < fd); ASSERT (is_open (fd)); /* Ignore any other fd's leaked into this process. */ close (fd + 1); close (fd + 2); ASSERT (!is_open (fd + 1)); ASSERT (!is_open (fd + 2)); /* Assigning to self must be a no-op. */ ASSERT (dup2 (fd, fd) == fd); ASSERT (is_open (fd)); /* The source must be valid. */ errno = 0; ASSERT (dup2 (-1, fd) == -1); ASSERT (errno == EBADF); close (99); errno = 0; ASSERT (dup2 (99, fd) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup2 (AT_FDCWD, fd) == -1); ASSERT (errno == EBADF); ASSERT (is_open (fd)); /* If the source is not open, then the destination is unaffected. */ errno = 0; ASSERT (dup2 (fd + 1, fd + 1) == -1); ASSERT (errno == EBADF); ASSERT (!is_open (fd + 1)); errno = 0; ASSERT (dup2 (fd + 1, fd) == -1); ASSERT (errno == EBADF); ASSERT (is_open (fd)); /* The destination must be valid. */ errno = 0; ASSERT (dup2 (fd, -2) == -1); ASSERT (errno == EBADF); if (bad_fd > 256) { ASSERT (dup2 (fd, 255) == 255); ASSERT (dup2 (fd, 256) == 256); ASSERT (close (255) == 0); ASSERT (close (256) == 0); } ASSERT (dup2 (fd, bad_fd - 1) == bad_fd - 1); ASSERT (close (bad_fd - 1) == 0); errno = 0; ASSERT (dup2 (fd, bad_fd) == -1); ASSERT (errno == EBADF); /* Using dup2 can skip fds. */ ASSERT (dup2 (fd, fd + 2) == fd + 2); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (is_open (fd + 2)); /* Verify that dup2 closes the previous occupant of a fd. */ ASSERT (open ("/dev/null", O_WRONLY, 0600) == fd + 1); ASSERT (dup2 (fd + 1, fd) == fd); ASSERT (close (fd + 1) == 0); ASSERT (write (fd, "1", 1) == 1); ASSERT (dup2 (fd + 2, fd) == fd); ASSERT (lseek (fd, 0, SEEK_END) == 0); ASSERT (write (fd + 2, "2", 1) == 1); ASSERT (lseek (fd, 0, SEEK_SET) == 0); ASSERT (read (fd, buffer, 1) == 1); ASSERT (*buffer == '2'); #if GNULIB_TEST_CLOEXEC /* Any new fd created by dup2 must not be cloexec. */ ASSERT (close (fd + 2) == 0); ASSERT (dup_cloexec (fd) == fd + 1); ASSERT (!is_inheritable (fd + 1)); ASSERT (dup2 (fd + 1, fd + 1) == fd + 1); ASSERT (!is_inheritable (fd + 1)); ASSERT (dup2 (fd + 1, fd + 2) == fd + 2); ASSERT (!is_inheritable (fd + 1)); ASSERT (is_inheritable (fd + 2)); errno = 0; ASSERT (dup2 (fd + 1, -1) == -1); ASSERT (errno == EBADF); ASSERT (!is_inheritable (fd + 1)); #endif /* On systems that distinguish between text and binary mode, dup2 reuses the mode of the source. */ setmode (fd, O_BINARY); ASSERT (is_mode (fd, O_BINARY)); ASSERT (dup2 (fd, fd + 1) == fd + 1); ASSERT (is_mode (fd + 1, O_BINARY)); setmode (fd, O_TEXT); ASSERT (is_mode (fd, O_TEXT)); ASSERT (dup2 (fd, fd + 1) == fd + 1); ASSERT (is_mode (fd + 1, O_TEXT)); /* Clean up. */ ASSERT (close (fd + 2) == 0); ASSERT (close (fd + 1) == 0); ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-ctype.c0000644000175000017500000000154113217200023016245 00000000000000/* Test of substitute. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-connect.c0000644000175000017500000000314313217200023016552 00000000000000/* Test connecting a client socket. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (connect, int, (int, const struct sockaddr *, socklen_t)); #include #include #include #include #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; addr.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &addr.sin_addr); addr.sin_port = htons (80); { errno = 0; ASSERT (connect (-1, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (connect (99, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } } return 0; } gnuastro-0.5/bootstrapped/tests/test-close.c0000644000175000017500000000220213217200023016221 00000000000000/* Test closing a file or socket. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (close, int, (int)); #include #include "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (close (-1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (close (99) == -1); ASSERT (errno == EBADF); } return 0; } gnuastro-0.5/bootstrapped/tests/test-cloexec.c0000644000175000017500000001003413217200023016540 00000000000000/* Test duplicating non-inheritable file descriptors. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake , 2009. */ #include #include "cloexec.h" #include #include #include #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif #endif #include "binary-io.h" #include "macros.h" /* Return non-zero if FD is open and inheritable across exec/spawn. */ static int is_inheritable (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return 0; return (flags & HANDLE_FLAG_INHERIT) != 0; #else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; #endif } #if !O_BINARY # define setmode(f,m) zero () static int zero (void) { return 0; } #endif /* Return non-zero if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static int is_mode (int fd, int mode) { int value = setmode (fd, O_BINARY); setmode (fd, value); return mode == value; } int main (void) { const char *file = "test-cloexec.tmp"; int fd = creat (file, 0600); int fd2; int bad_fd = getdtablesize (); /* Assume std descriptors were provided by invoker. */ ASSERT (STDERR_FILENO < fd); ASSERT (is_inheritable (fd)); /* Normal use of set_cloexec_flag. */ ASSERT (set_cloexec_flag (fd, true) == 0); #if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) ASSERT (!is_inheritable (fd)); #endif ASSERT (set_cloexec_flag (fd, false) == 0); ASSERT (is_inheritable (fd)); /* Normal use of dup_cloexec. */ fd2 = dup_cloexec (fd); ASSERT (fd < fd2); ASSERT (!is_inheritable (fd2)); ASSERT (close (fd) == 0); ASSERT (dup_cloexec (fd2) == fd); ASSERT (!is_inheritable (fd)); ASSERT (close (fd2) == 0); /* On systems that distinguish between text and binary mode, dup_cloexec reuses the mode of the source. */ setmode (fd, O_BINARY); ASSERT (is_mode (fd, O_BINARY)); fd2 = dup_cloexec (fd); ASSERT (fd < fd2); ASSERT (is_mode (fd2, O_BINARY)); ASSERT (close (fd2) == 0); setmode (fd, O_TEXT); ASSERT (is_mode (fd, O_TEXT)); fd2 = dup_cloexec (fd); ASSERT (fd < fd2); ASSERT (is_mode (fd2, O_TEXT)); ASSERT (close (fd2) == 0); /* Test error handling. */ errno = 0; ASSERT (set_cloexec_flag (-1, false) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (set_cloexec_flag (bad_fd, false) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (set_cloexec_flag (fd2, false) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup_cloexec (-1) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup_cloexec (bad_fd) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup_cloexec (fd2) == -1); ASSERT (errno == EBADF); /* Clean up. */ ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); return 0; } gnuastro-0.5/bootstrapped/tests/test-c-strncasecmp.c0000644000175000017500000000601113217200023017660 00000000000000/* Test of case-insensitive string comparison function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include "c-strcase.h" #include "c-ctype.h" #include #include #include "macros.h" int main (int argc, char *argv[]) { if (argc > 1) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; } ASSERT (c_strncasecmp ("paragraph", "Paragraph", 1000000) == 0); ASSERT (c_strncasecmp ("paragraph", "Paragraph", 9) == 0); ASSERT (c_strncasecmp ("paragrapH", "parAgRaph", 1000000) == 0); ASSERT (c_strncasecmp ("paragrapH", "parAgRaph", 9) == 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 10) < 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 9) < 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 5) < 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 4) == 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 10) > 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 9) > 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 5) > 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 4) == 0); ASSERT (c_strncasecmp ("para", "paragraph", 10) < 0); ASSERT (c_strncasecmp ("para", "paragraph", 9) < 0); ASSERT (c_strncasecmp ("para", "paragraph", 5) < 0); ASSERT (c_strncasecmp ("para", "paragraph", 4) == 0); ASSERT (c_strncasecmp ("paragraph", "para", 10) > 0); ASSERT (c_strncasecmp ("paragraph", "para", 9) > 0); ASSERT (c_strncasecmp ("paragraph", "para", 5) > 0); ASSERT (c_strncasecmp ("paragraph", "para", 4) == 0); /* The following tests shows how c_strncasecmp() is different from strncasecmp(). */ ASSERT (c_strncasecmp ("\311mily", "\351mile", 4) < 0); ASSERT (c_strncasecmp ("\351mile", "\311mily", 4) > 0); /* The following tests shows how c_strncasecmp() is different from mbsncasecmp(). */ ASSERT (c_strncasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R", 99) > 0); /* özgür */ ASSERT (c_strncasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r", 99) < 0); /* özgür */ #if C_CTYPE_ASCII /* This test shows how strings of different size cannot compare equal. */ ASSERT (c_strncasecmp ("turkish", "TURK\304\260SH", 7) < 0); ASSERT (c_strncasecmp ("TURK\304\260SH", "turkish", 7) > 0); #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-c-strcasecmp.c0000644000175000017500000000422313217200023017505 00000000000000/* Test of case-insensitive string comparison function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include "c-strcase.h" #include "c-ctype.h" #include #include #include "macros.h" int main (int argc, char *argv[]) { if (argc > 1) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; } ASSERT (c_strcasecmp ("paragraph", "Paragraph") == 0); ASSERT (c_strcasecmp ("paragrapH", "parAgRaph") == 0); ASSERT (c_strcasecmp ("paragraph", "paraLyzed") < 0); ASSERT (c_strcasecmp ("paraLyzed", "paragraph") > 0); ASSERT (c_strcasecmp ("para", "paragraph") < 0); ASSERT (c_strcasecmp ("paragraph", "para") > 0); /* The following tests shows how c_strcasecmp() is different from strcasecmp(). */ ASSERT (c_strcasecmp ("\311mile", "\351mile") < 0); ASSERT (c_strcasecmp ("\351mile", "\311mile") > 0); /* The following tests shows how c_strcasecmp() is different from mbscasecmp(). */ ASSERT (c_strcasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R") > 0); /* özgür */ ASSERT (c_strcasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r") < 0); /* özgür */ #if C_CTYPE_ASCII /* This test shows how strings of different size cannot compare equal. */ ASSERT (c_strcasecmp ("turkish", "TURK\304\260SH") < 0); ASSERT (c_strcasecmp ("TURK\304\260SH", "turkish") > 0); #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-c-ctype.c0000644000175000017500000001464413217200023016475 00000000000000/* Test of character handling in C locale. Copyright (C) 2005, 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2005. */ #include #include "c-ctype.h" #include #include #include #include "macros.h" static void test_agree_with_C_locale (void) { int c; for (c = 0; c <= UCHAR_MAX; c++) { ASSERT (c_isascii (c) == (isascii (c) != 0)); if (c_isascii (c)) { ASSERT (c_isalnum (c) == (isalnum (c) != 0)); ASSERT (c_isalpha (c) == (isalpha (c) != 0)); ASSERT (c_isblank (c) == (isblank (c) != 0)); ASSERT (c_iscntrl (c) == (iscntrl (c) != 0)); ASSERT (c_isdigit (c) == (isdigit (c) != 0)); ASSERT (c_islower (c) == (islower (c) != 0)); ASSERT (c_isgraph (c) == (isgraph (c) != 0)); ASSERT (c_isprint (c) == (isprint (c) != 0)); ASSERT (c_ispunct (c) == (ispunct (c) != 0)); ASSERT (c_isspace (c) == (isspace (c) != 0)); ASSERT (c_isupper (c) == (isupper (c) != 0)); ASSERT (c_isxdigit (c) == (isxdigit (c) != 0)); ASSERT (c_tolower (c) == tolower (c)); ASSERT (c_toupper (c) == toupper (c)); } } } static void test_all (void) { int c; int n_isascii = 0; for (c = CHAR_MIN; c <= UCHAR_MAX; c++) { if (! (0 <= c && c <= CHAR_MAX)) { ASSERT (! c_isascii (c)); ASSERT (! c_isalnum (c)); ASSERT (! c_isalpha (c)); ASSERT (! c_isblank (c)); ASSERT (! c_iscntrl (c)); ASSERT (! c_isdigit (c)); ASSERT (! c_islower (c)); ASSERT (! c_isgraph (c)); ASSERT (! c_isprint (c)); ASSERT (! c_ispunct (c)); ASSERT (! c_isspace (c)); ASSERT (! c_isupper (c)); ASSERT (! c_isxdigit (c)); ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == c); } n_isascii += c_isascii (c); #ifdef C_CTYPE_ASCII ASSERT (c_isascii (c) == (0 <= c && c <= 0x7f)); #endif ASSERT (c_isascii (c) == (c_isprint (c) || c_iscntrl (c))); ASSERT (c_isalnum (c) == (c_isalpha (c) || c_isdigit (c))); ASSERT (c_isalpha (c) == (c_islower (c) || c_isupper (c))); switch (c) { case '\t': case ' ': ASSERT (c_isblank (c) == 1); break; default: ASSERT (c_isblank (c) == 0); break; } #ifdef C_CTYPE_ASCII ASSERT (c_iscntrl (c) == ((c >= 0 && c < 0x20) || c == 0x7f)); #endif switch (c) { case '\a': case '\b': case '\f': case '\n': case '\r': case '\t': case '\v': ASSERT (c_iscntrl (c)); break; } ASSERT (! (c_iscntrl (c) && c_isprint (c))); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ASSERT (c_isdigit (c) == 1); break; default: ASSERT (c_isdigit (c) == 0); break; } switch (c) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': ASSERT (c_islower (c) == 1); ASSERT (c_toupper (c) == c - 'a' + 'A'); break; default: ASSERT (c_islower (c) == 0); ASSERT (c_toupper (c) == c); break; } #ifdef C_CTYPE_ASCII ASSERT (c_isgraph (c) == ((c >= 0x20 && c < 0x7f) && c != ' ')); ASSERT (c_isprint (c) == (c >= 0x20 && c < 0x7f)); #endif ASSERT (c_isgraph (c) == (c_isalnum (c) || c_ispunct (c))); ASSERT (c_isprint (c) == (c_isgraph (c) || c == ' ')); switch (c) { case '!': case '"': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case '[': case'\\': case ']': case '^': case '_': case '`': case '{': case '|': case '}': case '~': ASSERT (c_ispunct (c) == 1); break; default: ASSERT (c_ispunct (c) == 0); break; } switch (c) { case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': ASSERT (c_isspace (c) == 1); break; default: ASSERT (c_isspace (c) == 0); break; } switch (c) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': ASSERT (c_isupper (c) == 1); ASSERT (c_tolower (c) == c - 'A' + 'a'); break; default: ASSERT (c_isupper (c) == 0); ASSERT (c_tolower (c) == c); break; } switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': ASSERT (c_isxdigit (c) == 1); break; default: ASSERT (c_isxdigit (c) == 0); break; } } ASSERT (n_isascii == 128); } int main () { test_agree_with_C_locale (); test_all (); setlocale (LC_ALL, "de_DE"); test_all (); setlocale (LC_ALL, "ja_JP.EUC-JP"); test_all (); return 0; } gnuastro-0.5/bootstrapped/tests/test-btowc.c0000644000175000017500000000331113217200023016234 00000000000000/* Test of conversion of unibyte character to wide character. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include #include "signature.h" SIGNATURE_CHECK (btowc, wint_t, (int)); #include #include #include "macros.h" int main (int argc, char *argv[]) { int c; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (btowc (EOF) == WEOF); if (argc > 1) switch (argv[1][0]) { case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ for (c = 0; c < 0x80; c++) ASSERT (btowc (c) == c); for (c = 0xA0; c < 0x100; c++) ASSERT (btowc (c) != WEOF); return 0; case '2': /* Locale encoding is UTF-8. */ for (c = 0; c < 0x80; c++) ASSERT (btowc (c) == c); for (c = 0x80; c < 0x100; c++) ASSERT (btowc (c) == WEOF); return 0; } return 1; } gnuastro-0.5/bootstrapped/tests/test-bind.c0000644000175000017500000000310513217200023016033 00000000000000/* Test binding a server socket to a port. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (bind, int, (int, const struct sockaddr *, socklen_t)); #include #include #include #include #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; addr.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &addr.sin_addr); addr.sin_port = htons (80); { errno = 0; ASSERT (bind (-1, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (bind (99, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } } return 0; } gnuastro-0.5/bootstrapped/tests/test-binary-io.c0000644000175000017500000000305413217200023017013 00000000000000/* Test of binary mode I/O. Copyright (C) 2005, 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2005. */ #include #include "binary-io.h" #include #include #include #include #include #include #include "macros.h" int main (int argc, char *argv[]) { /* Test the O_BINARY macro. */ { int fd = open ("t-bin-out0.tmp", O_CREAT | O_TRUNC | O_RDWR | O_BINARY, 0600); if (write (fd, "Hello\n", 6) < 0) exit (1); close (fd); } { struct stat statbuf; if (stat ("t-bin-out0.tmp", &statbuf) < 0) exit (1); ASSERT (statbuf.st_size == 6); } switch (argv[1][0]) { case '1': /* Test the set_binary_mode() function. */ set_binary_mode (1, O_BINARY); fputs ("Hello\n", stdout); break; default: break; } return 0; } gnuastro-0.5/bootstrapped/tests/test-arpa_inet.c0000644000175000017500000000156413217200023017070 00000000000000/* Test of substitute. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include int main (void) { return 0; } gnuastro-0.5/bootstrapped/tests/test-argp.c0000644000175000017500000002427413217200023016062 00000000000000/* Test suite for argp. Copyright (C) 2006-2007, 2009-2017 Free Software Foundation, Inc. This file is part of the GNUlib Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "argp.h" #include #include #include #if HAVE_STRINGS_H # include #endif #include "macros.h" struct test_args { int test; int verbose; char *file; int read; char *hidden; int opt; char *optional; int optional_set; int group_2_1_option; int group_1_1_option; }; static struct argp_option group1_option[] = { { NULL, 0, NULL, 0, "Option Group 1", 0 }, { "verbose", 'v', NULL, 0, "Simple option without arguments", 1 }, { "file", 'f', "FILE", 0, "Option with a mandatory argument", 1 }, { "input", 0, NULL, OPTION_ALIAS, NULL, 1 }, { "read", 'r', NULL, OPTION_ALIAS, NULL, 1 }, { "hidden", 'H', "FILE", OPTION_HIDDEN, "Hidden option", 1 }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group1_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'v': args->verbose++; break; case 'r': args->read = 1; FALLTHROUGH; case 'f': args->file = arg; break; case 'H': args->hidden = arg; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group1_argp = { group1_option, group1_parser }; struct argp_child group1_child = { &group1_argp, 0, "", 1 }; static struct argp_option group1_1_option[] = { { NULL, 0, NULL, 0, "Option Group 1.1", 0 }, { "cantiga", 'C', NULL, 0, "create a cantiga" }, { "sonet", 'S', NULL, 0, "create a sonet" }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group1_1_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'C': case 'S': args->group_1_1_option = key; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group1_1_argp = { group1_1_option, group1_1_parser }; struct argp_child group1_1_child = { &group1_1_argp, 0, "", 2 }; static struct argp_option group2_option[] = { { NULL, 0, NULL, 0, "Option Group 2", 0 }, { "option", 'O', NULL, 0, "An option", 1 }, { "optional", 'o', "ARG", OPTION_ARG_OPTIONAL, "Option with an optional argument. ARG is one of the following:", 2 }, { "one", 0, NULL, OPTION_DOC | OPTION_NO_TRANS, "one unit", 3 }, { "two", 0, NULL, OPTION_DOC | OPTION_NO_TRANS, "two units", 3 }, { "many", 0, NULL, OPTION_DOC | OPTION_NO_TRANS, "many units", 3 }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group2_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'O': args->opt = 1; break; case 'o': args->optional_set = 1; args->optional = arg; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group2_argp = { group2_option, group2_parser }; struct argp_child group2_child = { &group2_argp, 0, "", 2 }; static struct argp_option group2_1_option[] = { { NULL, 0, NULL, 0, "Option Group 2.1", 0 }, { "poem", 'p', NULL, 0, "create a poem" }, { "limerick", 'l', NULL, 0, "create a limerick" }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group2_1_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'p': case 'e': args->group_2_1_option = key; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group2_1_argp = { group2_1_option, group2_1_parser }; struct argp_child group2_1_child = { &group2_1_argp, 0, "", 2 }; static struct argp_option main_options[] = { { NULL, 0, NULL, 0, "Main options", 0 }, { "test", 't', NULL, 0, NULL, 1 }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t parse_opt (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; int i; switch (key) { case ARGP_KEY_INIT: for (i = 0; state->root_argp->children[i].argp; i++) state->child_inputs[i] = args; break; case 't': args->test = 1; break; default: return ARGP_ERR_UNKNOWN; } return 0; } const char *argp_program_version = "test_argp (" PACKAGE_NAME ") " VERSION; const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">"; static char doc[] = "documentation string"; struct argp test_argp = { main_options, parse_opt, "ARGS...", doc, NULL, NULL, NULL }; #define NARGS(a) (sizeof(a) / sizeof((a)[0]) - 1) #define ARGV0 "test-argp" #define init_args(a) memset (&(a), 0, sizeof (a)); #define INIT_TEST_COMMON(n) \ int argc = NARGS (argv); \ struct test_args test_args; \ init_args (test_args); \ test_number = n; #define INIT_TEST1(n, arg1) \ char *argv[] = { ARGV0, arg1, NULL }; \ INIT_TEST_COMMON (n) #define INIT_TEST2(n, arg1, arg2) \ char *argv[] = { ARGV0, arg1, arg2, NULL }; \ INIT_TEST_COMMON (n) #define INIT_TEST3(n, arg1, arg2, arg3) \ char *argv[] = { ARGV0, arg1, arg2, arg3, NULL }; \ INIT_TEST_COMMON (n) int test_number; unsigned failure_count = 0; void fail (const char *msg) { fprintf (stderr, "Test %d: %s\n", test_number, msg); failure_count++; } void test1 (struct argp *argp) { INIT_TEST1 (1, "--test"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.test != 1) fail ("option not processed"); } void test2 (struct argp *argp) { INIT_TEST1 (2, "-t"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.test != 1) fail ("option not processed"); } void test_file (struct argp *argp, int argc, char **argv, struct test_args *args) { if (argp_parse (argp, argc, argv, 0, NULL, args)) fail ("argp_parse failed"); else if (!args->file) fail ("option not processed"); else if (strcmp (args->file, "FILE")) fail ("option processed incorrectly"); } void test3 (struct argp *argp) { INIT_TEST1 (3, "--file=FILE"); test_file (argp, argc, argv, &test_args); } void test4 (struct argp *argp) { INIT_TEST2 (4, "--file", "FILE"); test_file (argp, argc, argv, &test_args); } void test5 (struct argp *argp) { INIT_TEST1 (5, "--input=FILE"); test_file (argp, argc, argv, &test_args); } void test6 (struct argp *argp) { INIT_TEST2 (6, "--input", "FILE"); test_file (argp, argc, argv, &test_args); } void test_optional (struct argp *argp, int argc, char **argv, struct test_args *args, const char *val, const char *a) { int index; if (argp_parse (argp, argc, argv, 0, &index, args)) fail ("argp_parse failed"); else if (!args->optional_set) fail ("option not processed"); if (!val) { if (args->optional) fail ("option processed incorrectly"); } else if (strcmp (args->optional, val)) fail ("option processed incorrectly"); if (a) { if (index == argc) fail ("expected command line argument not found"); else if (strcmp (argv[index], a)) fail ("expected command line argument does not match"); } } void test7 (struct argp *argp) { INIT_TEST1 (7, "-oARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } void test8 (struct argp *argp) { INIT_TEST2 (8, "-o", "ARG"); test_optional (argp, argc, argv, &test_args, NULL, "ARG"); } void test9 (struct argp *argp) { INIT_TEST1 (9, "--optional=ARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } void test10 (struct argp *argp) { INIT_TEST2 (10, "--optional", "ARG"); test_optional (argp, argc, argv, &test_args, NULL, "ARG"); } void test11 (struct argp *argp) { INIT_TEST1 (11, "--optiona=ARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } void test12 (struct argp *argp) { INIT_TEST3 (12, "--option", "--optional=OPT", "FILE"); test_optional (argp, argc, argv, &test_args, "OPT", "FILE"); } void test13 (struct argp *argp) { INIT_TEST1 (1, "--cantiga"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.group_1_1_option != 'C') fail ("option not processed"); } void test14 (struct argp *argp) { INIT_TEST1 (1, "--limerick"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.group_2_1_option != 'l') fail ("option not processed"); } void test15 (struct argp *argp) { INIT_TEST2 (1, "-r", "FILE"); test_file (argp, argc, argv, &test_args); if (!test_args.read) fail ("short alias not recognized properly"); } typedef void (*test_fp) (struct argp *argp); test_fp test_fun[] = { test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, test11, test12, test13, test14, test15, NULL }; int main (int argc, char **argv) { struct argp_child argp_children[3], group1_children[2], group2_children[2]; test_fp *fun; group1_children[0] = group1_1_child; group1_children[1].argp = NULL; group1_argp.children = group1_children; group2_children[0] = group2_1_child; group2_children[1].argp = NULL; group2_argp.children = group2_children; argp_children[0] = group1_child; argp_children[1] = group2_child; argp_children[2].argp = NULL; test_argp.children = argp_children; if (argc > 0) { struct test_args test_args; init_args (test_args); return argp_parse (&test_argp, argc, argv, 0, NULL, &test_args); } for (fun = test_fun; *fun; fun++) (*fun) (&test_argp); if (failure_count) return 1; return 0; } gnuastro-0.5/bootstrapped/tests/test-alloca-opt.c0000644000175000017500000000276313217200023017163 00000000000000/* Test of optional automatic memory allocation. Copyright (C) 2005, 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include #if HAVE_ALLOCA static void do_allocation (int n) { void *ptr = alloca (n); (void) ptr; } void (*func) (int) = do_allocation; #endif int main () { #if HAVE_ALLOCA int i; /* Repeat a lot of times, to make sure there's no memory leak. */ for (i = 0; i < 100000; i++) { /* Try various values. n = 0 gave a crash on Alpha with gcc-2.5.8. Some versions of Mac OS X have a stack size limit of 512 KB. */ func (34); func (134); func (399); func (510823); func (129321); func (0); func (4070); func (4095); func (1); func (16582); } #endif return 0; } gnuastro-0.5/bootstrapped/tests/test-accept.c0000644000175000017500000000277313217200023016370 00000000000000/* Test accepting a connection to a server socket. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include "signature.h" SIGNATURE_CHECK (accept, int, (int, struct sockaddr *, socklen_t *)); #include #include #include #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); errno = 0; ASSERT (accept (-1, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); close (99); errno = 0; ASSERT (accept (99, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } return 0; } gnuastro-0.5/bootstrapped/tests/wctomb.c0000644000175000017500000000162413217200024015442 00000000000000/* Convert wide character to multibyte character. Copyright (C) 2011-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2011. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include "wctomb-impl.h" gnuastro-0.5/bootstrapped/tests/wctob.c0000644000175000017500000000226513217200024015267 00000000000000/* Convert wide character to unibyte character. Copyright (C) 2008, 2010-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include int wctob (wint_t wc) { char buf[64]; if (!(MB_CUR_MAX <= sizeof (buf))) abort (); /* Handle the case where WEOF is a value that does not fit in a wchar_t. */ if (wc == (wchar_t)wc) if (wctomb (buf, (wchar_t)wc) == 1) return (unsigned char) buf[0]; return EOF; } gnuastro-0.5/bootstrapped/tests/usleep.c0000644000175000017500000000350313217200024015442 00000000000000/* Pausing execution of the current thread. Copyright (C) 2009-2017 Free Software Foundation, Inc. Written by Eric Blake , 2009. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* This file is _intentionally_ light-weight. Rather than using select or nanosleep, both of which drag in external libraries on some platforms, this merely rounds up to the nearest second if usleep() does not exist. If sub-second resolution is important, then use a more powerful interface to begin with. */ #include /* Specification. */ #include #include #ifndef HAVE_USLEEP # define HAVE_USLEEP 0 #endif /* Sleep for MICRO microseconds, which can be greater than 1 second. Return -1 and set errno to EINVAL on range error (about 4295 seconds), or 0 on success. Interaction with SIGALARM is unspecified. */ int usleep (useconds_t micro) { unsigned int seconds = micro / 1000000; if (sizeof seconds < sizeof micro && micro / 1000000 != seconds) { errno = EINVAL; return -1; } if (!HAVE_USLEEP && micro % 1000000) seconds++; while ((seconds = sleep (seconds)) != 0); #undef usleep #if !HAVE_USLEEP # define usleep(x) 0 #endif return usleep (micro % 1000000); } gnuastro-0.5/bootstrapped/tests/unsetenv.c0000644000175000017500000000547313217200024016024 00000000000000/* Copyright (C) 1992, 1995-2002, 2005-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ #define _GL_ARG_NONNULL(params) #include /* Specification. */ #include #include #if !_LIBC # define __set_errno(ev) ((errno) = (ev)) #endif #include #include #if !_LIBC # define __environ environ #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif /* In the GNU C library we must keep the namespace clean. */ #ifdef _LIBC # define unsetenv __unsetenv #endif #if _LIBC || !HAVE_UNSETENV int unsetenv (const char *name) { size_t len; char **ep; if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } len = strlen (name); LOCK; ep = __environ; while (*ep != NULL) if (!strncmp (*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; do dp[0] = dp[1]; while (*dp++); /* Continue the loop in case NAME appears again. */ } else ++ep; UNLOCK; return 0; } #ifdef _LIBC # undef unsetenv weak_alias (__unsetenv, unsetenv) #endif #else /* HAVE_UNSETENV */ # undef unsetenv # if !HAVE_DECL_UNSETENV # if VOID_UNSETENV extern void unsetenv (const char *); # else extern int unsetenv (const char *); # endif # endif /* Call the underlying unsetenv, in case there is hidden bookkeeping that needs updating beyond just modifying environ. */ int rpl_unsetenv (const char *name) { int result = 0; if (!name || !*name || strchr (name, '=')) { errno = EINVAL; return -1; } while (getenv (name)) # if !VOID_UNSETENV result = # endif unsetenv (name); return result; } #endif /* HAVE_UNSETENV */ gnuastro-0.5/bootstrapped/tests/symlink.c0000644000175000017500000000263213217200023015634 00000000000000/* Stub for symlink(). Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include #include #if HAVE_SYMLINK # undef symlink /* Create a symlink, but reject trailing slash. */ int rpl_symlink (char const *contents, char const *name) { size_t len = strlen (name); if (len && name[len - 1] == '/') { struct stat st; if (lstat (name, &st) == 0) errno = EEXIST; return -1; } return symlink (contents, name); } #else /* !HAVE_SYMLINK */ /* The system does not support symlinks. */ int symlink (char const *contents _GL_UNUSED, char const *name _GL_UNUSED) { errno = ENOSYS; return -1; } #endif /* !HAVE_SYMLINK */ gnuastro-0.5/bootstrapped/tests/strerror_r.c0000644000175000017500000003261113217200023016351 00000000000000/* strerror_r.c --- POSIX compatible system error routine Copyright (C) 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2010. */ #include /* Enable declaration of sys_nerr and sys_errlist in on NetBSD. */ #define _NETBSD_SOURCE 1 /* Specification. */ #include #include #include #include #if !HAVE_SNPRINTF # include #endif #include "strerror-override.h" #if (__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__) && HAVE___XPG_STRERROR_R /* glibc >= 2.3.4, cygwin >= 1.7.9 */ # define USE_XPG_STRERROR_R 1 extern #ifdef __cplusplus "C" #endif int __xpg_strerror_r (int errnum, char *buf, size_t buflen); #elif HAVE_DECL_STRERROR_R && !(__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__) /* The system's strerror_r function is OK, except that its third argument is 'int', not 'size_t', or its return type is wrong. */ # include # define USE_SYSTEM_STRERROR_R 1 #else /* (__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__ ? !HAVE___XPG_STRERROR_R : !HAVE_DECL_STRERROR_R) */ /* Use the system's strerror(). Exclude glibc and cygwin because the system strerror_r has the wrong return type, and cygwin 1.7.9 strerror_r clobbers strerror. */ # undef strerror # define USE_SYSTEM_STRERROR 1 # if defined __NetBSD__ || defined __hpux || ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__ /* No locking needed. */ /* Get catgets internationalization functions. */ # if HAVE_CATGETS # include # endif #ifdef __cplusplus extern "C" { #endif /* Get sys_nerr, sys_errlist on HP-UX (otherwise only declared in C++ mode). Get sys_nerr, sys_errlist on IRIX (otherwise only declared with _SGIAPI). */ # if defined __hpux || defined __sgi extern int sys_nerr; extern char *sys_errlist[]; # endif /* Get sys_nerr on Solaris. */ # if defined __sun && !defined _LP64 extern int sys_nerr; # endif #ifdef __cplusplus } #endif # else # include "glthread/lock.h" /* This lock protects the buffer returned by strerror(). We assume that no other uses of strerror() exist in the program. */ gl_lock_define_initialized(static, strerror_lock) # endif #endif /* On MSVC, there is no snprintf() function, just a _snprintf(). It is of lower quality, but sufficient for the simple use here. We only have to make sure to NUL terminate the result (_snprintf does not NUL terminate, like strncpy). */ #if !HAVE_SNPRINTF static int local_snprintf (char *buf, size_t buflen, const char *format, ...) { va_list args; int result; va_start (args, format); result = _vsnprintf (buf, buflen, format, args); va_end (args); if (buflen > 0 && (result < 0 || result >= buflen)) buf[buflen - 1] = '\0'; return result; } # define snprintf local_snprintf #endif /* Copy as much of MSG into BUF as possible, without corrupting errno. Return 0 if MSG fit in BUFLEN, otherwise return ERANGE. */ static int safe_copy (char *buf, size_t buflen, const char *msg) { size_t len = strlen (msg); int ret; if (len < buflen) { /* Although POSIX allows memcpy() to corrupt errno, we don't know of any implementation where this is a real problem. */ memcpy (buf, msg, len + 1); ret = 0; } else { memcpy (buf, msg, buflen - 1); buf[buflen - 1] = '\0'; ret = ERANGE; } return ret; } int strerror_r (int errnum, char *buf, size_t buflen) #undef strerror_r { /* Filter this out now, so that rest of this replacement knows that there is room for a non-empty message and trailing NUL. */ if (buflen <= 1) { if (buflen) *buf = '\0'; return ERANGE; } *buf = '\0'; /* Check for gnulib overrides. */ { char const *msg = strerror_override (errnum); if (msg) return safe_copy (buf, buflen, msg); } { int ret; int saved_errno = errno; #if USE_XPG_STRERROR_R { ret = __xpg_strerror_r (errnum, buf, buflen); if (ret < 0) ret = errno; if (!*buf) { /* glibc 2.13 would not touch buf on err, so we have to fall back to GNU strerror_r which always returns a thread-safe untruncated string to (partially) copy into our buf. */ safe_copy (buf, buflen, strerror_r (errnum, buf, buflen)); } } #elif USE_SYSTEM_STRERROR_R if (buflen > INT_MAX) buflen = INT_MAX; # ifdef __hpux /* On HP-UX 11.31, strerror_r always fails when buflen < 80; it also fails to change buf on EINVAL. */ { char stackbuf[80]; if (buflen < sizeof stackbuf) { ret = strerror_r (errnum, stackbuf, sizeof stackbuf); if (ret == 0) ret = safe_copy (buf, buflen, stackbuf); } else ret = strerror_r (errnum, buf, buflen); } # else ret = strerror_r (errnum, buf, buflen); /* Some old implementations may return (-1, EINVAL) instead of EINVAL. But on Haiku, valid error numbers are negative. */ # if !defined __HAIKU__ if (ret < 0) ret = errno; # endif # endif # if defined _AIX || defined __HAIKU__ /* AIX and Haiku return 0 rather than ERANGE when truncating strings; try again until we are sure we got the entire string. */ if (!ret && strlen (buf) == buflen - 1) { char stackbuf[STACKBUF_LEN]; size_t len; strerror_r (errnum, stackbuf, sizeof stackbuf); len = strlen (stackbuf); /* STACKBUF_LEN should have been large enough. */ if (len + 1 == sizeof stackbuf) abort (); if (buflen <= len) ret = ERANGE; } # else /* Solaris 10 does not populate buf on ERANGE. OpenBSD 4.7 truncates early on ERANGE rather than return a partial integer. We prefer the maximal string. We set buf[0] earlier, and we know of no implementation that modifies buf to be an unterminated string, so this strlen should be portable in practice (rather than pulling in a safer strnlen). */ if (ret == ERANGE && strlen (buf) < buflen - 1) { char stackbuf[STACKBUF_LEN]; /* STACKBUF_LEN should have been large enough. */ if (strerror_r (errnum, stackbuf, sizeof stackbuf) == ERANGE) abort (); safe_copy (buf, buflen, stackbuf); } # endif #else /* USE_SYSTEM_STRERROR */ /* Try to do what strerror (errnum) does, but without clobbering the buffer used by strerror(). */ # if defined __NetBSD__ || defined __hpux || ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __CYGWIN__ /* NetBSD, HP-UX, native Windows, Cygwin */ /* NetBSD: sys_nerr, sys_errlist are declared through _NETBSD_SOURCE and above. HP-UX: sys_nerr, sys_errlist are declared explicitly above. native Windows: sys_nerr, sys_errlist are declared in . Cygwin: sys_nerr, sys_errlist are declared in . */ if (errnum >= 0 && errnum < sys_nerr) { # if HAVE_CATGETS && (defined __NetBSD__ || defined __hpux) # if defined __NetBSD__ nl_catd catd = catopen ("libc", NL_CAT_LOCALE); const char *errmsg = (catd != (nl_catd)-1 ? catgets (catd, 1, errnum, sys_errlist[errnum]) : sys_errlist[errnum]); # endif # if defined __hpux nl_catd catd = catopen ("perror", NL_CAT_LOCALE); const char *errmsg = (catd != (nl_catd)-1 ? catgets (catd, 1, 1 + errnum, sys_errlist[errnum]) : sys_errlist[errnum]); # endif # else const char *errmsg = sys_errlist[errnum]; # endif if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); # if HAVE_CATGETS && (defined __NetBSD__ || defined __hpux) if (catd != (nl_catd)-1) catclose (catd); # endif } else ret = EINVAL; # elif defined __sgi || (defined __sun && !defined _LP64) /* IRIX, Solaris <= 9 32-bit */ /* For a valid error number, the system's strerror() function returns a pointer to a not copied string, not to a buffer. */ if (errnum >= 0 && errnum < sys_nerr) { char *errmsg = strerror (errnum); if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); } else ret = EINVAL; # else gl_lock_lock (strerror_lock); { char *errmsg = strerror (errnum); /* For invalid error numbers, strerror() on - IRIX 6.5 returns NULL, - HP-UX 11 returns an empty string. */ if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); } gl_lock_unlock (strerror_lock); # endif #endif #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* MSVC 14 defines names for many error codes in the range 100..140, but _sys_errlist contains strings only for the error codes < _sys_nerr = 43. */ if (ret == EINVAL) { const char *errmsg; switch (errnum) { case 100 /* EADDRINUSE */: errmsg = "Address already in use"; break; case 101 /* EADDRNOTAVAIL */: errmsg = "Cannot assign requested address"; break; case 102 /* EAFNOSUPPORT */: errmsg = "Address family not supported by protocol"; break; case 103 /* EALREADY */: errmsg = "Operation already in progress"; break; case 105 /* ECANCELED */: errmsg = "Operation canceled"; break; case 106 /* ECONNABORTED */: errmsg = "Software caused connection abort"; break; case 107 /* ECONNREFUSED */: errmsg = "Connection refused"; break; case 108 /* ECONNRESET */: errmsg = "Connection reset by peer"; break; case 109 /* EDESTADDRREQ */: errmsg = "Destination address required"; break; case 110 /* EHOSTUNREACH */: errmsg = "No route to host"; break; case 112 /* EINPROGRESS */: errmsg = "Operation now in progress"; break; case 113 /* EISCONN */: errmsg = "Transport endpoint is already connected"; break; case 114 /* ELOOP */: errmsg = "Too many levels of symbolic links"; break; case 115 /* EMSGSIZE */: errmsg = "Message too long"; break; case 116 /* ENETDOWN */: errmsg = "Network is down"; break; case 117 /* ENETRESET */: errmsg = "Network dropped connection on reset"; break; case 118 /* ENETUNREACH */: errmsg = "Network is unreachable"; break; case 119 /* ENOBUFS */: errmsg = "No buffer space available"; break; case 123 /* ENOPROTOOPT */: errmsg = "Protocol not available"; break; case 126 /* ENOTCONN */: errmsg = "Transport endpoint is not connected"; break; case 128 /* ENOTSOCK */: errmsg = "Socket operation on non-socket"; break; case 129 /* ENOTSUP */: errmsg = "Not supported"; break; case 130 /* EOPNOTSUPP */: errmsg = "Operation not supported"; break; case 132 /* EOVERFLOW */: errmsg = "Value too large for defined data type"; break; case 133 /* EOWNERDEAD */: errmsg = "Owner died"; break; case 134 /* EPROTO */: errmsg = "Protocol error"; break; case 135 /* EPROTONOSUPPORT */: errmsg = "Protocol not supported"; break; case 136 /* EPROTOTYPE */: errmsg = "Protocol wrong type for socket"; break; case 138 /* ETIMEDOUT */: errmsg = "Connection timed out"; break; case 140 /* EWOULDBLOCK */: errmsg = "Operation would block"; break; default: errmsg = NULL; break; } if (errmsg != NULL) ret = safe_copy (buf, buflen, errmsg); } #endif if (ret == EINVAL && !*buf) { #if defined __HAIKU__ /* For consistency with perror(). */ snprintf (buf, buflen, "Unknown Application Error (%d)", errnum); #else snprintf (buf, buflen, "Unknown error %d", errnum); #endif } errno = saved_errno; return ret; } } gnuastro-0.5/bootstrapped/tests/stat.c0000644000175000017500000003174013217200023015123 00000000000000/* Work around platform bugs in stat. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake and Bruno Haible. */ /* If the user's config.h happens to include , let it include only the system's here, so that orig_stat doesn't recurse to rpl_stat. */ #define __need_system_sys_stat_h #include /* Get the original definition of stat. It might be defined as a macro. */ #include #include #undef __need_system_sys_stat_h #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #if !defined WINDOWS_NATIVE static int orig_stat (const char *filename, struct stat *buf) { return stat (filename, buf); } #endif /* Specification. */ /* Write "sys/stat.h" here, not , otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include above. */ #include "sys/stat.h" #include "stat-time.h" #include #include #include #include #include "filename.h" #include "malloca.h" #include "verify.h" #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include # include "stat-w32.h" #endif #ifdef WINDOWS_NATIVE /* Return TRUE if the given file name denotes an UNC root. */ static BOOL is_unc_root (const char *rname) { /* Test whether it has the syntax '\\server\share'. */ if (ISSLASH (rname[0]) && ISSLASH (rname[1])) { /* It starts with two slashes. Find the next slash. */ const char *p = rname + 2; const char *q = p; while (*q != '\0' && !ISSLASH (*q)) q++; if (q > p && *q != '\0') { /* Found the next slash at q. */ q++; const char *r = q; while (*r != '\0' && !ISSLASH (*r)) r++; if (r > q && *r == '\0') return TRUE; } } return FALSE; } #endif /* Store information about NAME into ST. Work around bugs with trailing slashes. Mingw has other bugs (such as st_ino always being 0 on success) which this wrapper does not work around. But at least this implementation provides the ability to emulate fchdir correctly. */ int rpl_stat (char const *name, struct stat *buf) { #ifdef WINDOWS_NATIVE /* Fill the fields ourselves, because the original stat function returns values for st_atime, st_mtime, st_ctime that depend on the current time zone. See */ /* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work around length limitations ? */ /* POSIX specifies: "More than two leading characters shall be treated as a single character." */ if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) { name += 2; while (ISSLASH (name[1])) name++; } size_t len = strlen (name); size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); /* Remove trailing slashes (except the very first one, at position drive_prefix_len), but remember their presence. */ size_t rlen; bool check_dir = false; rlen = len; while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) { check_dir = true; if (rlen == drive_prefix_len + 1) break; rlen--; } /* Handle '' and 'C:'. */ if (!check_dir && rlen == drive_prefix_len) { errno = ENOENT; return -1; } /* Handle '\\'. */ if (rlen == 1 && ISSLASH (name[0]) && len >= 2) { errno = ENOENT; return -1; } const char *rname; char *malloca_rname; if (rlen == len) { rname = name; malloca_rname = NULL; } else { malloca_rname = malloca (rlen + 1); if (malloca_rname == NULL) { errno = ENOMEM; return -1; } memcpy (malloca_rname, name, rlen); malloca_rname[rlen] = '\0'; rname = malloca_rname; } /* There are two ways to get at the requested information: - by scanning the parent directory and examining the relevant directory entry, - by opening the file directly. The first approach fails for root directories (e.g. 'C:\') and UNC root directories (e.g. '\\server\share'). The second approach fails for some system files (e.g. 'C:\pagefile.sys' and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION. The second approach gives more information (in particular, correct st_dev, st_ino, st_nlink fields). So we use the second approach and, as a fallback except for root and UNC root directories, also the first approach. */ { int ret; { /* Approach based on the file. */ /* Open a handle to the file. CreateFile */ HANDLE h = CreateFile (rname, FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only in case as different) makes sense only when applied to *all* filesystem operations. */ FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */, NULL); if (h != INVALID_HANDLE_VALUE) { ret = _gl_fstat_by_handle (h, rname, buf); CloseHandle (h); goto done; } } /* Test for root and UNC root directories. */ if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len])) || is_unc_root (rname)) goto failed; /* Fallback. */ { /* Approach based on the directory entry. */ if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL) { /* Other Windows API functions would fail with error ERROR_INVALID_NAME. */ if (malloca_rname != NULL) freea (malloca_rname); errno = ENOENT; return -1; } /* Get the details about the directory entry. This can be done through FindFirstFile or through FindFirstFileEx with argument FindExInfoBasic */ WIN32_FIND_DATA info; HANDLE h = FindFirstFile (rname, &info); if (h == INVALID_HANDLE_VALUE) goto failed; /* Test for error conditions before starting to fill *buf. */ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) { FindClose (h); if (malloca_rname != NULL) freea (malloca_rname); errno = EOVERFLOW; return -1; } # if _GL_WINDOWS_STAT_INODES buf->st_dev = 0; # if _GL_WINDOWS_STAT_INODES == 2 buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; # else /* _GL_WINDOWS_STAT_INODES == 1 */ buf->st_ino = 0; # endif # else /* st_ino is not wide enough for identifying a file on a device. Without st_ino, st_dev is pointless. */ buf->st_dev = 0; buf->st_ino = 0; # endif /* st_mode. */ unsigned int mode = /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) | S_IREAD_UGO | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { /* Determine whether the file is executable by looking at the file name suffix. */ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { const char *last_dot = NULL; const char *p; for (p = info.cFileName; *p != '\0'; p++) if (*p == '.') last_dot = p; if (last_dot != NULL) { const char *suffix = last_dot + 1; if (_stricmp (suffix, "exe") == 0 || _stricmp (suffix, "bat") == 0 || _stricmp (suffix, "cmd") == 0 || _stricmp (suffix, "com") == 0) mode |= S_IEXEC_UGO; } } } buf->st_mode = mode; /* st_nlink. Ignore hard links here. */ buf->st_nlink = 1; /* There's no easy way to map the Windows SID concept to an integer. */ buf->st_uid = 0; buf->st_gid = 0; /* st_rdev is irrelevant for normal files and directories. */ buf->st_rdev = 0; /* st_size. */ if (sizeof (buf->st_size) <= 4) /* Range check already done above. */ buf->st_size = info.nFileSizeLow; else buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; /* st_atime, st_mtime, st_ctime. */ # if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); # else buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); # endif FindClose (h); ret = 0; } done: if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode)) { errno = ENOTDIR; ret = -1; } if (malloca_rname != NULL) { int saved_errno = errno; freea (malloca_rname); errno = saved_errno; } return ret; } failed: { DWORD error = GetLastError (); #if 0 fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error); #endif if (malloca_rname != NULL) freea (malloca_rname); switch (error) { /* Some of these errors probably cannot happen with the specific flags that we pass to CreateFile. But who knows... */ case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only). */ /* XXX map to EACCESS or EPERM? */ errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_DELETE_PENDING: /* XXX map to EACCESS or EPERM? */ errno = EPERM; break; default: errno = EINVAL; break; } return -1; } #else int result = orig_stat (name, buf); if (result == 0) { # if REPLACE_FUNC_STAT_FILE /* Solaris 9 mistakenly succeeds when given a non-directory with a trailing slash. */ if (!S_ISDIR (buf->st_mode)) { size_t len = strlen (name); if (ISSLASH (name[len - 1])) { errno = ENOTDIR; return -1; } } # endif /* REPLACE_FUNC_STAT_FILE */ result = stat_time_normalize (result, buf); } return result; #endif } gnuastro-0.5/bootstrapped/tests/socket.c0000644000175000017500000000256513217200023015443 00000000000000/* socket.c --- wrappers for Windows socket function Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paolo Bonzini */ #include #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #include "sockets.h" int rpl_socket (int domain, int type, int protocol) { SOCKET fh; gl_sockets_startup (SOCKETS_1_1); /* We have to use WSASocket() to create non-overlapped IO sockets. Overlapped IO sockets cannot be used with read/write. */ fh = WSASocket (domain, type, protocol, NULL, 0, 0); if (fh == INVALID_SOCKET) { set_winsock_errno (); return -1; } else return SOCKET_TO_FD (fh); } gnuastro-0.5/bootstrapped/tests/sigprocmask.c0000644000175000017500000002063013217200023016466 00000000000000/* POSIX compatible signal blocking. Copyright (C) 2006-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2006. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include #include #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif /* We assume that a platform without POSIX signal blocking functions also does not have the POSIX sigaction() function, only the signal() function. We also assume signal() has SysV semantics, where any handler is uninstalled prior to being invoked. This is true for native Windows platforms. */ /* We use raw signal(), but also provide a wrapper rpl_signal() so that applications can query or change a blocked signal. */ #undef signal /* Provide invalid signal numbers as fallbacks if the uncatchable signals are not defined. */ #ifndef SIGKILL # define SIGKILL (-1) #endif #ifndef SIGSTOP # define SIGSTOP (-1) #endif /* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias for the signal SIGABRT. Only one signal handler is stored for both SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # undef SIGABRT_COMPAT # define SIGABRT_COMPAT 6 #endif #ifdef SIGABRT_COMPAT # define SIGABRT_COMPAT_MASK (1U << SIGABRT_COMPAT) #else # define SIGABRT_COMPAT_MASK 0 #endif typedef void (*handler_t) (int); #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static handler_t signal_nothrow (int sig, handler_t handler) { handler_t result; TRY_MSVC_INVAL { result = signal (sig, handler); } CATCH_MSVC_INVAL { result = SIG_ERR; errno = EINVAL; } DONE_MSVC_INVAL; return result; } # define signal signal_nothrow #endif /* Handling of gnulib defined signals. */ #if GNULIB_defined_SIGPIPE static handler_t SIGPIPE_handler = SIG_DFL; #endif #if GNULIB_defined_SIGPIPE static handler_t ext_signal (int sig, handler_t handler) { switch (sig) { case SIGPIPE: { handler_t old_handler = SIGPIPE_handler; SIGPIPE_handler = handler; return old_handler; } default: /* System defined signal */ return signal (sig, handler); } } # undef signal # define signal ext_signal #endif int sigismember (const sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif return (*set >> sig) & 1; } else return 0; } int sigemptyset (sigset_t *set) { *set = 0; return 0; } int sigaddset (sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif *set |= 1U << sig; return 0; } else { errno = EINVAL; return -1; } } int sigdelset (sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif *set &= ~(1U << sig); return 0; } else { errno = EINVAL; return -1; } } int sigfillset (sigset_t *set) { *set = ((2U << (NSIG - 1)) - 1) & ~ SIGABRT_COMPAT_MASK; return 0; } /* Set of currently blocked signals. */ static volatile sigset_t blocked_set /* = 0 */; /* Set of currently blocked and pending signals. */ static volatile sig_atomic_t pending_array[NSIG] /* = { 0 } */; /* Signal handler that is installed for blocked signals. */ static void blocked_handler (int sig) { /* Reinstall the handler, in case the signal occurs multiple times while blocked. There is an inherent race where an asynchronous signal in between when the kernel uninstalled the handler and when we reinstall it will trigger the default handler; oh well. */ signal (sig, blocked_handler); if (sig >= 0 && sig < NSIG) pending_array[sig] = 1; } int sigpending (sigset_t *set) { sigset_t pending = 0; int sig; for (sig = 0; sig < NSIG; sig++) if (pending_array[sig]) pending |= 1U << sig; *set = pending; return 0; } /* The previous signal handlers. Only the array elements corresponding to blocked signals are relevant. */ static volatile handler_t old_handlers[NSIG]; int sigprocmask (int operation, const sigset_t *set, sigset_t *old_set) { if (old_set != NULL) *old_set = blocked_set; if (set != NULL) { sigset_t new_blocked_set; sigset_t to_unblock; sigset_t to_block; switch (operation) { case SIG_BLOCK: new_blocked_set = blocked_set | *set; break; case SIG_SETMASK: new_blocked_set = *set; break; case SIG_UNBLOCK: new_blocked_set = blocked_set & ~*set; break; default: errno = EINVAL; return -1; } to_unblock = blocked_set & ~new_blocked_set; to_block = new_blocked_set & ~blocked_set; if (to_block != 0) { int sig; for (sig = 0; sig < NSIG; sig++) if ((to_block >> sig) & 1) { pending_array[sig] = 0; if ((old_handlers[sig] = signal (sig, blocked_handler)) != SIG_ERR) blocked_set |= 1U << sig; } } if (to_unblock != 0) { sig_atomic_t received[NSIG]; int sig; for (sig = 0; sig < NSIG; sig++) if ((to_unblock >> sig) & 1) { if (signal (sig, old_handlers[sig]) != blocked_handler) /* The application changed a signal handler while the signal was blocked, bypassing our rpl_signal replacement. We don't support this. */ abort (); received[sig] = pending_array[sig]; blocked_set &= ~(1U << sig); pending_array[sig] = 0; } else received[sig] = 0; for (sig = 0; sig < NSIG; sig++) if (received[sig]) raise (sig); } } return 0; } /* Install the handler FUNC for signal SIG, and return the previous handler. */ handler_t rpl_signal (int sig, handler_t handler) { /* We must provide a wrapper, so that a user can query what handler they installed even if that signal is currently blocked. */ if (sig >= 0 && sig < NSIG && sig != SIGKILL && sig != SIGSTOP && handler != SIG_ERR) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif if (blocked_set & (1U << sig)) { /* POSIX states that sigprocmask and signal are both async-signal-safe. This is not true of our implementation - there is a slight data race where an asynchronous interrupt on signal A can occur after we install blocked_handler but before we have updated old_handlers for signal B, such that handler A can see stale information if it calls signal(B). Oh well - signal handlers really shouldn't try to manipulate the installed handlers of unrelated signals. */ handler_t result = old_handlers[sig]; old_handlers[sig] = handler; return result; } else return signal (sig, handler); } else { errno = EINVAL; return SIG_ERR; } } #if GNULIB_defined_SIGPIPE /* Raise the signal SIGPIPE. */ int _gl_raise_SIGPIPE (void) { if (blocked_set & (1U << SIGPIPE)) pending_array[SIGPIPE] = 1; else { handler_t handler = SIGPIPE_handler; if (handler == SIG_DFL) exit (128 + SIGPIPE); else if (handler != SIG_IGN) (*handler) (SIGPIPE); } return 0; } #endif gnuastro-0.5/bootstrapped/tests/signbitl.c0000644000175000017500000000414313217200023015760 00000000000000/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include "isnanl-nolibm.h" #include "float+.h" #ifdef gl_signbitl_OPTIMIZED_MACRO # undef gl_signbitl #endif int gl_signbitl (long double arg) { #if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { long double value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGNL_IN_LIBC return copysignl (1.0L, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnanl (arg)) return 0; if (arg < 0.0L) return 1; else if (arg == 0.0L) { /* Distinguish 0.0L and -0.0L. */ static long double plus_zero = 0.0L; long double arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_LDBL) != 0); } else return 0; #endif } gnuastro-0.5/bootstrapped/tests/signbitf.c0000644000175000017500000000410013217200023015743 00000000000000/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include "isnanf-nolibm.h" #include "float+.h" #ifdef gl_signbitf_OPTIMIZED_MACRO # undef gl_signbitf #endif int gl_signbitf (float arg) { #if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { float value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGNF_IN_LIBC return copysignf (1.0f, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnanf (arg)) return 0; if (arg < 0.0f) return 1; else if (arg == 0.0f) { /* Distinguish 0.0f and -0.0f. */ static float plus_zero = 0.0f; float arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_FLT) != 0); } else return 0; #endif } gnuastro-0.5/bootstrapped/tests/signbitd.c0000644000175000017500000000406713217200023015755 00000000000000/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include "isnand-nolibm.h" #include "float+.h" #ifdef gl_signbitd_OPTIMIZED_MACRO # undef gl_signbitd #endif int gl_signbitd (double arg) { #if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { double value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGN_IN_LIBC return copysign (1.0, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnand (arg)) return 0; if (arg < 0.0) return 1; else if (arg == 0.0) { /* Distinguish 0.0 and -0.0. */ static double plus_zero = 0.0; double arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_DBL) != 0); } else return 0; #endif } gnuastro-0.5/bootstrapped/tests/sigaction.c0000644000175000017500000001614413217200023016131 00000000000000/* POSIX compatible signal blocking. Copyright (C) 2008-2017 Free Software Foundation, Inc. Written by Eric Blake , 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include #include /* This implementation of sigaction is tailored to native Windows behavior: signal() has SysV semantics (ie. the handler is uninstalled before it is invoked). This is an inherent data race if an asynchronous signal is sent twice in a row before we can reinstall our handler, but there's nothing we can do about it. Meanwhile, sigprocmask() is not present, and while we can use the gnulib replacement to provide critical sections, it too suffers from potential data races in the face of an ill-timed asynchronous signal. And we compound the situation by reading static storage in a signal handler, which POSIX warns is not generically async-signal-safe. Oh well. Additionally: - We don't implement SA_NOCLDSTOP or SA_NOCLDWAIT, because SIGCHLD is not defined. - We don't implement SA_ONSTACK, because sigaltstack() is not present. - We ignore SA_RESTART, because blocking native Windows API calls are not interrupted anyway when an asynchronous signal occurs, and the MSVCRT runtime never sets errno to EINTR. - We don't implement SA_SIGINFO because it is impossible to do so portably. POSIX states that an application should not mix signal() and sigaction(). We support the use of signal() within the gnulib sigprocmask() substitute, but all other application code linked with this module should stick with only sigaction(). */ /* Check some of our assumptions. */ #if defined SIGCHLD || defined HAVE_SIGALTSTACK || defined HAVE_SIGINTERRUPT # error "Revisit the assumptions made in the sigaction module" #endif /* Out-of-range substitutes make a good fallback for uncatchable signals. */ #ifndef SIGKILL # define SIGKILL (-1) #endif #ifndef SIGSTOP # define SIGSTOP (-1) #endif /* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias for the signal SIGABRT. Only one signal handler is stored for both SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # undef SIGABRT_COMPAT # define SIGABRT_COMPAT 6 #endif /* A signal handler. */ typedef void (*handler_t) (int signal); /* Set of current actions. If sa_handler for an entry is NULL, then that signal is not currently handled by the sigaction handler. */ static struct sigaction volatile action_array[NSIG] /* = 0 */; /* Signal handler that is installed for signals. */ static void sigaction_handler (int sig) { handler_t handler; sigset_t mask; sigset_t oldmask; int saved_errno = errno; if (sig < 0 || NSIG <= sig || !action_array[sig].sa_handler) { /* Unexpected situation; be careful to avoid recursive abort. */ if (sig == SIGABRT) signal (SIGABRT, SIG_DFL); abort (); } /* Reinstall the signal handler when required; otherwise update the bookkeeping so that the user's handler may call sigaction and get accurate results. We know the signal isn't currently blocked, or we wouldn't be in its handler, therefore we know that we are not interrupting a sigaction() call. There is a race where any asynchronous instance of the same signal occurring before we reinstall the handler will trigger the default handler; oh well. */ handler = action_array[sig].sa_handler; if ((action_array[sig].sa_flags & SA_RESETHAND) == 0) signal (sig, sigaction_handler); else action_array[sig].sa_handler = NULL; /* Block appropriate signals. */ mask = action_array[sig].sa_mask; if ((action_array[sig].sa_flags & SA_NODEFER) == 0) sigaddset (&mask, sig); sigprocmask (SIG_BLOCK, &mask, &oldmask); /* Invoke the user's handler, then restore prior mask. */ errno = saved_errno; handler (sig); saved_errno = errno; sigprocmask (SIG_SETMASK, &oldmask, NULL); errno = saved_errno; } /* Change and/or query the action that will be taken on delivery of signal SIG. If not NULL, ACT describes the new behavior. If not NULL, OACT is set to the prior behavior. Return 0 on success, or set errno and return -1 on failure. */ int sigaction (int sig, const struct sigaction *restrict act, struct sigaction *restrict oact) { sigset_t mask; sigset_t oldmask; int saved_errno; if (sig < 0 || NSIG <= sig || sig == SIGKILL || sig == SIGSTOP || (act && act->sa_handler == SIG_ERR)) { errno = EINVAL; return -1; } #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif /* POSIX requires sigaction() to be async-signal-safe. In other words, if an asynchronous signal can occur while we are anywhere inside this function, the user's handler could then call sigaction() recursively and expect consistent results. We meet this rule by using sigprocmask to block all signals before modifying any data structure that could be read from a signal handler; this works since we know that the gnulib sigprocmask replacement does not try to use sigaction() from its handler. */ if (!act && !oact) return 0; sigfillset (&mask); sigprocmask (SIG_BLOCK, &mask, &oldmask); if (oact) { if (action_array[sig].sa_handler) *oact = action_array[sig]; else { /* Safe to change the handler at will here, since all signals are currently blocked. */ oact->sa_handler = signal (sig, SIG_DFL); if (oact->sa_handler == SIG_ERR) goto failure; signal (sig, oact->sa_handler); oact->sa_flags = SA_RESETHAND | SA_NODEFER; sigemptyset (&oact->sa_mask); } } if (act) { /* Safe to install the handler before updating action_array, since all signals are currently blocked. */ if (act->sa_handler == SIG_DFL || act->sa_handler == SIG_IGN) { if (signal (sig, act->sa_handler) == SIG_ERR) goto failure; action_array[sig].sa_handler = NULL; } else { if (signal (sig, sigaction_handler) == SIG_ERR) goto failure; action_array[sig] = *act; } } sigprocmask (SIG_SETMASK, &oldmask, NULL); return 0; failure: saved_errno = errno; sigprocmask (SIG_SETMASK, &oldmask, NULL); errno = saved_errno; return -1; } gnuastro-0.5/bootstrapped/tests/setsockopt.c0000644000175000017500000000334713217200023016350 00000000000000/* setsockopt.c --- wrappers for Windows setsockopt function Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paolo Bonzini */ #include #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include /* Get struct timeval. */ #include /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef setsockopt int rpl_setsockopt (int fd, int level, int optname, const void *optval, socklen_t optlen) { SOCKET sock = FD_TO_SOCKET (fd); int r; if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { if (level == SOL_SOCKET && (optname == SO_RCVTIMEO || optname == SO_SNDTIMEO)) { const struct timeval *tv = optval; int milliseconds = tv->tv_sec * 1000 + tv->tv_usec / 1000; optval = &milliseconds; r = setsockopt (sock, level, optname, optval, sizeof (int)); } else { r = setsockopt (sock, level, optname, optval, optlen); } if (r < 0) set_winsock_errno (); return r; } } gnuastro-0.5/bootstrapped/tests/setlocale.c0000644000175000017500000007054513217200023016131 00000000000000/* Set the current locale. -*- coding: utf-8 -*- Copyright (C) 2009, 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2009. */ #include /* Override setlocale() so that when the default locale is requested (locale = ""), the environment variables LC_ALL, LC_*, and LANG are considered. Also include all the functionality from libintl's setlocale() override. */ /* Please keep this file in sync with gettext/gettext-runtime/intl/setlocale.c ! */ /* Specification. */ #include #include #include #include "localename.h" #if 1 # undef setlocale /* Return string representation of locale category CATEGORY. */ static const char * category_to_name (int category) { const char *retval; switch (category) { case LC_COLLATE: retval = "LC_COLLATE"; break; case LC_CTYPE: retval = "LC_CTYPE"; break; case LC_MONETARY: retval = "LC_MONETARY"; break; case LC_NUMERIC: retval = "LC_NUMERIC"; break; case LC_TIME: retval = "LC_TIME"; break; case LC_MESSAGES: retval = "LC_MESSAGES"; break; default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* The native Windows setlocale() function expects locale names of the form "German" or "German_Germany" or "DEU", but not "de" or "de_DE". We need to convert the names from the form with ISO 639 language code and ISO 3166 country code to the form with English names or with three-letter identifier. The three-letter identifiers known by a Windows XP SP2 or SP3 are: AFK Afrikaans_South Africa.1252 ARA Arabic_Saudi Arabia.1256 ARB Arabic_Lebanon.1256 ARE Arabic_Egypt.1256 ARG Arabic_Algeria.1256 ARH Arabic_Bahrain.1256 ARI Arabic_Iraq.1256 ARJ Arabic_Jordan.1256 ARK Arabic_Kuwait.1256 ARL Arabic_Libya.1256 ARM Arabic_Morocco.1256 ARO Arabic_Oman.1256 ARQ Arabic_Qatar.1256 ARS Arabic_Syria.1256 ART Arabic_Tunisia.1256 ARU Arabic_U.A.E..1256 ARY Arabic_Yemen.1256 AZE Azeri (Latin)_Azerbaijan.1254 BEL Belarusian_Belarus.1251 BGR Bulgarian_Bulgaria.1251 BSB Bosnian_Bosnia and Herzegovina.1250 BSC Bosnian (Cyrillic)_Bosnia and Herzegovina.1250 (wrong encoding!) CAT Catalan_Spain.1252 CHH Chinese_Hong Kong S.A.R..950 CHI Chinese_Singapore.936 CHS Chinese_People's Republic of China.936 CHT Chinese_Taiwan.950 CSY Czech_Czech Republic.1250 CYM Welsh_United Kingdom.1252 DAN Danish_Denmark.1252 DEA German_Austria.1252 DEC German_Liechtenstein.1252 DEL German_Luxembourg.1252 DES German_Switzerland.1252 DEU German_Germany.1252 ELL Greek_Greece.1253 ENA English_Australia.1252 ENB English_Caribbean.1252 ENC English_Canada.1252 ENG English_United Kingdom.1252 ENI English_Ireland.1252 ENJ English_Jamaica.1252 ENL English_Belize.1252 ENP English_Republic of the Philippines.1252 ENS English_South Africa.1252 ENT English_Trinidad and Tobago.1252 ENU English_United States.1252 ENW English_Zimbabwe.1252 ENZ English_New Zealand.1252 ESA Spanish_Panama.1252 ESB Spanish_Bolivia.1252 ESC Spanish_Costa Rica.1252 ESD Spanish_Dominican Republic.1252 ESE Spanish_El Salvador.1252 ESF Spanish_Ecuador.1252 ESG Spanish_Guatemala.1252 ESH Spanish_Honduras.1252 ESI Spanish_Nicaragua.1252 ESL Spanish_Chile.1252 ESM Spanish_Mexico.1252 ESN Spanish_Spain.1252 ESO Spanish_Colombia.1252 ESP Spanish_Spain.1252 ESR Spanish_Peru.1252 ESS Spanish_Argentina.1252 ESU Spanish_Puerto Rico.1252 ESV Spanish_Venezuela.1252 ESY Spanish_Uruguay.1252 ESZ Spanish_Paraguay.1252 ETI Estonian_Estonia.1257 EUQ Basque_Spain.1252 FAR Farsi_Iran.1256 FIN Finnish_Finland.1252 FOS Faroese_Faroe Islands.1252 FPO Filipino_Philippines.1252 FRA French_France.1252 FRB French_Belgium.1252 FRC French_Canada.1252 FRL French_Luxembourg.1252 FRM French_Principality of Monaco.1252 FRS French_Switzerland.1252 FYN Frisian_Netherlands.1252 GLC Galician_Spain.1252 HEB Hebrew_Israel.1255 HRB Croatian_Bosnia and Herzegovina.1250 HRV Croatian_Croatia.1250 HUN Hungarian_Hungary.1250 IND Indonesian_Indonesia.1252 IRE Irish_Ireland.1252 ISL Icelandic_Iceland.1252 ITA Italian_Italy.1252 ITS Italian_Switzerland.1252 IUK Inuktitut (Latin)_Canada.1252 JPN Japanese_Japan.932 KKZ Kazakh_Kazakhstan.1251 KOR Korean_Korea.949 KYR Kyrgyz_Kyrgyzstan.1251 LBX Luxembourgish_Luxembourg.1252 LTH Lithuanian_Lithuania.1257 LVI Latvian_Latvia.1257 MKI FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251 MON Mongolian_Mongolia.1251 MPD Mapudungun_Chile.1252 MSB Malay_Brunei Darussalam.1252 MSL Malay_Malaysia.1252 MWK Mohawk_Canada.1252 NLB Dutch_Belgium.1252 NLD Dutch_Netherlands.1252 NON Norwegian-Nynorsk_Norway.1252 NOR Norwegian (BokmÃ¥l)_Norway.1252 NSO Northern Sotho_South Africa.1252 PLK Polish_Poland.1250 PTB Portuguese_Brazil.1252 PTG Portuguese_Portugal.1252 QUB Quechua_Bolivia.1252 QUE Quechua_Ecuador.1252 QUP Quechua_Peru.1252 RMC Romansh_Switzerland.1252 ROM Romanian_Romania.1250 RUS Russian_Russia.1251 SKY Slovak_Slovakia.1250 SLV Slovenian_Slovenia.1250 SMA Sami (Southern)_Norway.1252 SMB Sami (Southern)_Sweden.1252 SME Sami (Northern)_Norway.1252 SMF Sami (Northern)_Sweden.1252 SMG Sami (Northern)_Finland.1252 SMJ Sami (Lule)_Norway.1252 SMK Sami (Lule)_Sweden.1252 SMN Sami (Inari)_Finland.1252 SMS Sami (Skolt)_Finland.1252 SQI Albanian_Albania.1250 SRB Serbian (Cyrillic)_Serbia and Montenegro.1251 SRL Serbian (Latin)_Serbia and Montenegro.1250 SRN Serbian (Cyrillic)_Bosnia and Herzegovina.1251 SRS Serbian (Latin)_Bosnia and Herzegovina.1250 SVE Swedish_Sweden.1252 SVF Swedish_Finland.1252 SWK Swahili_Kenya.1252 THA Thai_Thailand.874 TRK Turkish_Turkey.1254 TSN Tswana_South Africa.1252 TTT Tatar_Russia.1251 UKR Ukrainian_Ukraine.1251 URD Urdu_Islamic Republic of Pakistan.1256 USA English_United States.1252 UZB Uzbek (Latin)_Uzbekistan.1254 VIT Vietnamese_Viet Nam.1258 XHO Xhosa_South Africa.1252 ZHH Chinese_Hong Kong S.A.R..950 ZHI Chinese_Singapore.936 ZHM Chinese_Macau S.A.R..950 ZUL Zulu_South Africa.1252 */ /* Table from ISO 639 language code, optionally with country or script suffix, to English name. Keep in sync with the gl_locale_name_from_win32_LANGID function in localename.c! */ struct table_entry { const char *code; const char *english; }; static const struct table_entry language_table[] = { { "af", "Afrikaans" }, { "am", "Amharic" }, { "ar", "Arabic" }, { "arn", "Mapudungun" }, { "as", "Assamese" }, { "az@cyrillic", "Azeri (Cyrillic)" }, { "az@latin", "Azeri (Latin)" }, { "ba", "Bashkir" }, { "be", "Belarusian" }, { "ber", "Tamazight" }, { "ber@arabic", "Tamazight (Arabic)" }, { "ber@latin", "Tamazight (Latin)" }, { "bg", "Bulgarian" }, { "bin", "Edo" }, { "bn", "Bengali" }, { "bn_BD", "Bengali (Bangladesh)" }, { "bn_IN", "Bengali (India)" }, { "bnt", "Sutu" }, { "bo", "Tibetan" }, { "br", "Breton" }, { "bs", "BSB" }, /* "Bosnian (Latin)" */ { "bs@cyrillic", "BSC" }, /* Bosnian (Cyrillic) */ { "ca", "Catalan" }, { "chr", "Cherokee" }, { "co", "Corsican" }, { "cpe", "Hawaiian" }, { "cs", "Czech" }, { "cy", "Welsh" }, { "da", "Danish" }, { "de", "German" }, { "dsb", "Lower Sorbian" }, { "dv", "Divehi" }, { "el", "Greek" }, { "en", "English" }, { "es", "Spanish" }, { "et", "Estonian" }, { "eu", "Basque" }, { "fa", "Farsi" }, { "ff", "Fulfulde" }, { "fi", "Finnish" }, { "fo", "Faroese" }, /* "Faeroese" does not work */ { "fr", "French" }, { "fy", "Frisian" }, { "ga", "IRE" }, /* Gaelic (Ireland) */ { "gd", "Gaelic (Scotland)" }, { "gd", "Scottish Gaelic" }, { "gl", "Galician" }, { "gn", "Guarani" }, { "gsw", "Alsatian" }, { "gu", "Gujarati" }, { "ha", "Hausa" }, { "he", "Hebrew" }, { "hi", "Hindi" }, { "hr", "Croatian" }, { "hsb", "Upper Sorbian" }, { "hu", "Hungarian" }, { "hy", "Armenian" }, { "id", "Indonesian" }, { "ig", "Igbo" }, { "ii", "Yi" }, { "is", "Icelandic" }, { "it", "Italian" }, { "iu", "IUK" }, /* Inuktitut */ { "ja", "Japanese" }, { "ka", "Georgian" }, { "kk", "Kazakh" }, { "kl", "Greenlandic" }, { "km", "Cambodian" }, { "km", "Khmer" }, { "kn", "Kannada" }, { "ko", "Korean" }, { "kok", "Konkani" }, { "kr", "Kanuri" }, { "ks", "Kashmiri" }, { "ks_IN", "Kashmiri_India" }, { "ks_PK", "Kashmiri (Arabic)_Pakistan" }, { "ky", "Kyrgyz" }, { "la", "Latin" }, { "lb", "Luxembourgish" }, { "lo", "Lao" }, { "lt", "Lithuanian" }, { "lv", "Latvian" }, { "mi", "Maori" }, { "mk", "FYRO Macedonian" }, { "mk", "Macedonian" }, { "ml", "Malayalam" }, { "mn", "Mongolian" }, { "mni", "Manipuri" }, { "moh", "Mohawk" }, { "mr", "Marathi" }, { "ms", "Malay" }, { "mt", "Maltese" }, { "my", "Burmese" }, { "nb", "NOR" }, /* Norwegian BokmÃ¥l */ { "ne", "Nepali" }, { "nic", "Ibibio" }, { "nl", "Dutch" }, { "nn", "NON" }, /* Norwegian Nynorsk */ { "no", "Norwegian" }, { "nso", "Northern Sotho" }, { "nso", "Sepedi" }, { "oc", "Occitan" }, { "om", "Oromo" }, { "or", "Oriya" }, { "pa", "Punjabi" }, { "pap", "Papiamentu" }, { "pl", "Polish" }, { "prs", "Dari" }, { "ps", "Pashto" }, { "pt", "Portuguese" }, { "qu", "Quechua" }, { "qut", "K'iche'" }, { "rm", "Romansh" }, { "ro", "Romanian" }, { "ru", "Russian" }, { "rw", "Kinyarwanda" }, { "sa", "Sanskrit" }, { "sah", "Yakut" }, { "sd", "Sindhi" }, { "se", "Sami (Northern)" }, { "se", "Northern Sami" }, { "si", "Sinhalese" }, { "sk", "Slovak" }, { "sl", "Slovenian" }, { "sma", "Sami (Southern)" }, { "sma", "Southern Sami" }, { "smj", "Sami (Lule)" }, { "smj", "Lule Sami" }, { "smn", "Sami (Inari)" }, { "smn", "Inari Sami" }, { "sms", "Sami (Skolt)" }, { "sms", "Skolt Sami" }, { "so", "Somali" }, { "sq", "Albanian" }, { "sr", "Serbian (Latin)" }, { "sr@cyrillic", "SRB" }, /* Serbian (Cyrillic) */ { "sv", "Swedish" }, { "sw", "Swahili" }, { "syr", "Syriac" }, { "ta", "Tamil" }, { "te", "Telugu" }, { "tg", "Tajik" }, { "th", "Thai" }, { "ti", "Tigrinya" }, { "tk", "Turkmen" }, { "tl", "Filipino" }, { "tn", "Tswana" }, { "tr", "Turkish" }, { "ts", "Tsonga" }, { "tt", "Tatar" }, { "ug", "Uighur" }, { "uk", "Ukrainian" }, { "ur", "Urdu" }, { "uz", "Uzbek" }, { "uz", "Uzbek (Latin)" }, { "uz@cyrillic", "Uzbek (Cyrillic)" }, { "ve", "Venda" }, { "vi", "Vietnamese" }, { "wen", "Sorbian" }, { "wo", "Wolof" }, { "xh", "Xhosa" }, { "yi", "Yiddish" }, { "yo", "Yoruba" }, { "zh", "Chinese" }, { "zu", "Zulu" } }; /* Table from ISO 3166 country code to English name. Keep in sync with the gl_locale_name_from_win32_LANGID function in localename.c! */ static const struct table_entry country_table[] = { { "AE", "U.A.E." }, { "AF", "Afghanistan" }, { "AL", "Albania" }, { "AM", "Armenia" }, { "AN", "Netherlands Antilles" }, { "AR", "Argentina" }, { "AT", "Austria" }, { "AU", "Australia" }, { "AZ", "Azerbaijan" }, { "BA", "Bosnia and Herzegovina" }, { "BD", "Bangladesh" }, { "BE", "Belgium" }, { "BG", "Bulgaria" }, { "BH", "Bahrain" }, { "BN", "Brunei Darussalam" }, { "BO", "Bolivia" }, { "BR", "Brazil" }, { "BT", "Bhutan" }, { "BY", "Belarus" }, { "BZ", "Belize" }, { "CA", "Canada" }, { "CG", "Congo" }, { "CH", "Switzerland" }, { "CI", "Cote d'Ivoire" }, { "CL", "Chile" }, { "CM", "Cameroon" }, { "CN", "People's Republic of China" }, { "CO", "Colombia" }, { "CR", "Costa Rica" }, { "CS", "Serbia and Montenegro" }, { "CZ", "Czech Republic" }, { "DE", "Germany" }, { "DK", "Denmark" }, { "DO", "Dominican Republic" }, { "DZ", "Algeria" }, { "EC", "Ecuador" }, { "EE", "Estonia" }, { "EG", "Egypt" }, { "ER", "Eritrea" }, { "ES", "Spain" }, { "ET", "Ethiopia" }, { "FI", "Finland" }, { "FO", "Faroe Islands" }, { "FR", "France" }, { "GB", "United Kingdom" }, { "GD", "Caribbean" }, { "GE", "Georgia" }, { "GL", "Greenland" }, { "GR", "Greece" }, { "GT", "Guatemala" }, { "HK", "Hong Kong" }, { "HK", "Hong Kong S.A.R." }, { "HN", "Honduras" }, { "HR", "Croatia" }, { "HT", "Haiti" }, { "HU", "Hungary" }, { "ID", "Indonesia" }, { "IE", "Ireland" }, { "IL", "Israel" }, { "IN", "India" }, { "IQ", "Iraq" }, { "IR", "Iran" }, { "IS", "Iceland" }, { "IT", "Italy" }, { "JM", "Jamaica" }, { "JO", "Jordan" }, { "JP", "Japan" }, { "KE", "Kenya" }, { "KG", "Kyrgyzstan" }, { "KH", "Cambodia" }, { "KR", "South Korea" }, { "KW", "Kuwait" }, { "KZ", "Kazakhstan" }, { "LA", "Laos" }, { "LB", "Lebanon" }, { "LI", "Liechtenstein" }, { "LK", "Sri Lanka" }, { "LT", "Lithuania" }, { "LU", "Luxembourg" }, { "LV", "Latvia" }, { "LY", "Libya" }, { "MA", "Morocco" }, { "MC", "Principality of Monaco" }, { "MD", "Moldava" }, { "MD", "Moldova" }, { "ME", "Montenegro" }, { "MK", "Former Yugoslav Republic of Macedonia" }, { "ML", "Mali" }, { "MM", "Myanmar" }, { "MN", "Mongolia" }, { "MO", "Macau S.A.R." }, { "MT", "Malta" }, { "MV", "Maldives" }, { "MX", "Mexico" }, { "MY", "Malaysia" }, { "NG", "Nigeria" }, { "NI", "Nicaragua" }, { "NL", "Netherlands" }, { "NO", "Norway" }, { "NP", "Nepal" }, { "NZ", "New Zealand" }, { "OM", "Oman" }, { "PA", "Panama" }, { "PE", "Peru" }, { "PH", "Philippines" }, { "PK", "Islamic Republic of Pakistan" }, { "PL", "Poland" }, { "PR", "Puerto Rico" }, { "PT", "Portugal" }, { "PY", "Paraguay" }, { "QA", "Qatar" }, { "RE", "Reunion" }, { "RO", "Romania" }, { "RS", "Serbia" }, { "RU", "Russia" }, { "RW", "Rwanda" }, { "SA", "Saudi Arabia" }, { "SE", "Sweden" }, { "SG", "Singapore" }, { "SI", "Slovenia" }, { "SK", "Slovak" }, { "SN", "Senegal" }, { "SO", "Somalia" }, { "SR", "Suriname" }, { "SV", "El Salvador" }, { "SY", "Syria" }, { "TH", "Thailand" }, { "TJ", "Tajikistan" }, { "TM", "Turkmenistan" }, { "TN", "Tunisia" }, { "TR", "Turkey" }, { "TT", "Trinidad and Tobago" }, { "TW", "Taiwan" }, { "TZ", "Tanzania" }, { "UA", "Ukraine" }, { "US", "United States" }, { "UY", "Uruguay" }, { "VA", "Vatican" }, { "VE", "Venezuela" }, { "VN", "Viet Nam" }, { "YE", "Yemen" }, { "ZA", "South Africa" }, { "ZW", "Zimbabwe" } }; /* Given a string STRING, find the set of indices i such that TABLE[i].code is the given STRING. It is a range [lo,hi-1]. */ typedef struct { size_t lo; size_t hi; } range_t; static void search (const struct table_entry *table, size_t table_size, const char *string, range_t *result) { /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].code, string) < 0, for i >= hi, strcmp (table[i].code, string) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].code, string); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (language_table[i].code, string) == 0. Find the entire interval of such i. */ { size_t i; for (i = mid; i > lo; ) { i--; if (strcmp (table[i].code, string) < 0) { lo = i + 1; break; } } } { size_t i; for (i = mid; i < hi; i++) { if (strcmp (table[i].code, string) > 0) { hi = i; break; } } } /* The set of i with strcmp (language_table[i].code, string) == 0 is the interval [lo, hi-1]. */ break; } } result->lo = lo; result->hi = hi; } /* Like setlocale, but accept also locale names in the form ll or ll_CC, where ll is an ISO 639 language code and CC is an ISO 3166 country code. */ static char * setlocale_unixlike (int category, const char *locale) { char *result; char llCC_buf[64]; char ll_buf[64]; char CC_buf[64]; /* The native Windows implementation of setlocale understands the special locale name "C", but not "POSIX". Therefore map "POSIX" to "C". */ #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ if (locale != NULL && strcmp (locale, "POSIX") == 0) locale = "C"; #endif /* First, try setlocale with the original argument unchanged. */ result = setlocale (category, locale); if (result != NULL) return result; /* Otherwise, assume the argument is in the form language[_territory][.codeset][@modifier] and try to map it using the tables. */ if (strlen (locale) < sizeof (llCC_buf)) { /* Second try: Remove the codeset part. */ { const char *p = locale; char *q = llCC_buf; /* Copy the part before the dot. */ for (; *p != '\0' && *p != '.'; p++, q++) *q = *p; if (*p == '.') /* Skip the part up to the '@', if any. */ for (; *p != '\0' && *p != '@'; p++) ; /* Copy the part starting with '@', if any. */ for (; *p != '\0'; p++, q++) *q = *p; *q = '\0'; } /* llCC_buf now contains language[_territory][@modifier] */ if (strcmp (llCC_buf, locale) != 0) { result = setlocale (category, llCC_buf); if (result != NULL) return result; } /* Look it up in language_table. */ { range_t range; size_t i; search (language_table, sizeof (language_table) / sizeof (language_table[0]), llCC_buf, &range); for (i = range.lo; i < range.hi; i++) { /* Try the replacement in language_table[i]. */ result = setlocale (category, language_table[i].english); if (result != NULL) return result; } } /* Split language[_territory][@modifier] into ll_buf = language[@modifier] and CC_buf = territory */ { const char *underscore = strchr (llCC_buf, '_'); if (underscore != NULL) { const char *territory_start = underscore + 1; const char *territory_end = strchr (territory_start, '@'); if (territory_end == NULL) territory_end = territory_start + strlen (territory_start); memcpy (ll_buf, llCC_buf, underscore - llCC_buf); strcpy (ll_buf + (underscore - llCC_buf), territory_end); memcpy (CC_buf, territory_start, territory_end - territory_start); CC_buf[territory_end - territory_start] = '\0'; { /* Look up ll_buf in language_table and CC_buf in country_table. */ range_t language_range; search (language_table, sizeof (language_table) / sizeof (language_table[0]), ll_buf, &language_range); if (language_range.lo < language_range.hi) { range_t country_range; search (country_table, sizeof (country_table) / sizeof (country_table[0]), CC_buf, &country_range); if (country_range.lo < country_range.hi) { size_t i; size_t j; for (i = language_range.lo; i < language_range.hi; i++) for (j = country_range.lo; j < country_range.hi; j++) { /* Concatenate the replacements. */ const char *part1 = language_table[i].english; size_t part1_len = strlen (part1); const char *part2 = country_table[j].english; size_t part2_len = strlen (part2) + 1; char buf[64+64]; if (!(part1_len + 1 + part2_len <= sizeof (buf))) abort (); memcpy (buf, part1, part1_len); buf[part1_len] = '_'; memcpy (buf + part1_len + 1, part2, part2_len); /* Try the concatenated replacements. */ result = setlocale (category, buf); if (result != NULL) return result; } } /* Try omitting the country entirely. This may set a locale corresponding to the wrong country, but is better than failing entirely. */ { size_t i; for (i = language_range.lo; i < language_range.hi; i++) { /* Try only the language replacement. */ result = setlocale (category, language_table[i].english); if (result != NULL) return result; } } } } } } } /* Failed. */ return NULL; } # else # define setlocale_unixlike setlocale # endif # if LC_MESSAGES == 1729 /* The system does not store an LC_MESSAGES locale category. Do it here. */ static char lc_messages_name[64] = "C"; /* Like setlocale, but support also LC_MESSAGES. */ static char * setlocale_single (int category, const char *locale) { if (category == LC_MESSAGES) { if (locale != NULL) { lc_messages_name[sizeof (lc_messages_name) - 1] = '\0'; strncpy (lc_messages_name, locale, sizeof (lc_messages_name) - 1); } return lc_messages_name; } else return setlocale_unixlike (category, locale); } # else # define setlocale_single setlocale_unixlike # endif char * rpl_setlocale (int category, const char *locale) { if (locale != NULL && locale[0] == '\0') { /* A request to the set the current locale to the default locale. */ if (category == LC_ALL) { /* Set LC_CTYPE first. Then the other categories. */ static int const categories[] = { LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES }; char *saved_locale; const char *base_name; unsigned int i; /* Back up the old locale, in case one of the steps fails. */ saved_locale = setlocale (LC_ALL, NULL); if (saved_locale == NULL) return NULL; saved_locale = strdup (saved_locale); if (saved_locale == NULL) return NULL; /* Set LC_CTYPE category. Set all other categories (except possibly LC_MESSAGES) to the same value in the same call; this is likely to save calls. */ base_name = gl_locale_name_environ (LC_CTYPE, category_to_name (LC_CTYPE)); if (base_name == NULL) base_name = gl_locale_name_default (); if (setlocale_unixlike (LC_ALL, base_name) == NULL) goto fail; # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, setlocale(LC_ALL,...) may succeed but set the LC_CTYPE category to an invalid value ("C") when it does not support the specified encoding. Report a failure instead. */ if (strchr (base_name, '.') != NULL && strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) goto fail; # endif for (i = 0; i < sizeof (categories) / sizeof (categories[0]); i++) { int cat = categories[i]; const char *name; name = gl_locale_name_environ (cat, category_to_name (cat)); if (name == NULL) name = gl_locale_name_default (); /* If name is the same as base_name, it has already been set through the setlocale call before the loop. */ if (strcmp (name, base_name) != 0 # if LC_MESSAGES == 1729 || cat == LC_MESSAGES # endif ) if (setlocale_single (cat, name) == NULL) goto fail; } /* All steps were successful. */ free (saved_locale); return setlocale (LC_ALL, NULL); fail: if (saved_locale[0] != '\0') /* don't risk an endless recursion */ setlocale (LC_ALL, saved_locale); free (saved_locale); return NULL; } else { const char *name = gl_locale_name_environ (category, category_to_name (category)); if (name == NULL) name = gl_locale_name_default (); return setlocale_single (category, name); } } else { # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ if (category == LC_ALL && locale != NULL && strchr (locale, '.') != NULL) { char *saved_locale; /* Back up the old locale. */ saved_locale = setlocale (LC_ALL, NULL); if (saved_locale == NULL) return NULL; saved_locale = strdup (saved_locale); if (saved_locale == NULL) return NULL; if (setlocale_unixlike (LC_ALL, locale) == NULL) { free (saved_locale); return NULL; } /* On native Windows, setlocale(LC_ALL,...) may succeed but set the LC_CTYPE category to an invalid value ("C") when it does not support the specified encoding. Report a failure instead. */ if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) { if (saved_locale[0] != '\0') /* don't risk an endless recursion */ setlocale (LC_ALL, saved_locale); free (saved_locale); return NULL; } /* It was really successful. */ free (saved_locale); return setlocale (LC_ALL, NULL); } else # endif return setlocale_single (category, locale); } } #endif gnuastro-0.5/bootstrapped/tests/setenv.c0000644000175000017500000002502713217200023015455 00000000000000/* Copyright (C) 1992, 1995-2003, 2005-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #if !_LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ # define _GL_ARG_NONNULL(params) # define _GL_USE_STDLIB_ALLOC 1 # include #endif #include /* Specification. */ #include #include #ifndef __set_errno # define __set_errno(ev) ((errno) = (ev)) #endif #include #if _LIBC || HAVE_UNISTD_H # include #endif #if !_LIBC # include "malloca.h" #endif #if _LIBC || !HAVE_SETENV #if !_LIBC # define __environ environ #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif /* In the GNU C library we must keep the namespace clean. */ #ifdef _LIBC # define setenv __setenv # define clearenv __clearenv # define tfind __tfind # define tsearch __tsearch #endif /* In the GNU C library implementation we try to be more clever and allow arbitrarily many changes of the environment given that the used values are from a small set. Outside glibc this will eat up all memory after a while. */ #if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \ && defined __GNUC__) # define USE_TSEARCH 1 # include typedef int (*compar_fn_t) (const void *, const void *); /* This is a pointer to the root of the search tree with the known values. */ static void *known_values; # define KNOWN_VALUE(Str) \ ({ \ void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ value != NULL ? *(char **) value : NULL; \ }) # define STORE_VALUE(Str) \ tsearch (Str, &known_values, (compar_fn_t) strcmp) #else # undef USE_TSEARCH # define KNOWN_VALUE(Str) NULL # define STORE_VALUE(Str) do { } while (0) #endif /* If this variable is not a null pointer we allocated the current environment. */ static char **last_environ; /* This function is used by 'setenv' and 'putenv'. The difference between the two functions is that for the former must create a new string which is then placed in the environment, while the argument of 'putenv' must be used directly. This is all complicated by the fact that we try to reuse values once generated for a 'setenv' call since we can never free the strings. */ int __add_to_environ (const char *name, const char *value, const char *combined, int replace) { char **ep; size_t size; const size_t namelen = strlen (name); const size_t vallen = value != NULL ? strlen (value) + 1 : 0; LOCK; /* We have to get the pointer now that we have the lock and not earlier since another thread might have created a new environment. */ ep = __environ; size = 0; if (ep != NULL) { for (; *ep != NULL; ++ep) if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') break; else ++size; } if (ep == NULL || *ep == NULL) { char **new_environ; #ifdef USE_TSEARCH char *new_value; #endif /* We allocated this space; we can extend it. */ new_environ = (char **) (last_environ == NULL ? malloc ((size + 2) * sizeof (char *)) : realloc (last_environ, (size + 2) * sizeof (char *))); if (new_environ == NULL) { /* It's easier to set errno to ENOMEM than to rely on the 'malloc-posix' and 'realloc-posix' gnulib modules. */ __set_errno (ENOMEM); UNLOCK; return -1; } /* If the whole entry is given add it. */ if (combined != NULL) /* We must not add the string to the search tree since it belongs to the user. */ new_environ[size] = (char *) combined; else { /* See whether the value is already known. */ #ifdef USE_TSEARCH # ifdef _LIBC new_value = (char *) alloca (namelen + 1 + vallen); __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), value, vallen); # else new_value = (char *) malloca (namelen + 1 + vallen); if (new_value == NULL) { __set_errno (ENOMEM); UNLOCK; return -1; } memcpy (new_value, name, namelen); new_value[namelen] = '='; memcpy (&new_value[namelen + 1], value, vallen); # endif new_environ[size] = KNOWN_VALUE (new_value); if (new_environ[size] == NULL) #endif { new_environ[size] = (char *) malloc (namelen + 1 + vallen); if (new_environ[size] == NULL) { #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif __set_errno (ENOMEM); UNLOCK; return -1; } #ifdef USE_TSEARCH memcpy (new_environ[size], new_value, namelen + 1 + vallen); #else memcpy (new_environ[size], name, namelen); new_environ[size][namelen] = '='; memcpy (&new_environ[size][namelen + 1], value, vallen); #endif /* And save the value now. We cannot do this when we remove the string since then we cannot decide whether it is a user string or not. */ STORE_VALUE (new_environ[size]); } #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif } if (__environ != last_environ) memcpy ((char *) new_environ, (char *) __environ, size * sizeof (char *)); new_environ[size + 1] = NULL; last_environ = __environ = new_environ; } else if (replace) { char *np; /* Use the user string if given. */ if (combined != NULL) np = (char *) combined; else { #ifdef USE_TSEARCH char *new_value; # ifdef _LIBC new_value = alloca (namelen + 1 + vallen); __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), value, vallen); # else new_value = malloca (namelen + 1 + vallen); if (new_value == NULL) { __set_errno (ENOMEM); UNLOCK; return -1; } memcpy (new_value, name, namelen); new_value[namelen] = '='; memcpy (&new_value[namelen + 1], value, vallen); # endif np = KNOWN_VALUE (new_value); if (np == NULL) #endif { np = (char *) malloc (namelen + 1 + vallen); if (np == NULL) { #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif __set_errno (ENOMEM); UNLOCK; return -1; } #ifdef USE_TSEARCH memcpy (np, new_value, namelen + 1 + vallen); #else memcpy (np, name, namelen); np[namelen] = '='; memcpy (&np[namelen + 1], value, vallen); #endif /* And remember the value. */ STORE_VALUE (np); } #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif } *ep = np; } UNLOCK; return 0; } int setenv (const char *name, const char *value, int replace) { if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } return __add_to_environ (name, value, NULL, replace); } /* The 'clearenv' was planned to be added to POSIX.1 but probably never made it. Nevertheless the POSIX.9 standard (POSIX bindings for Fortran 77) requires this function. */ int clearenv (void) { LOCK; if (__environ == last_environ && __environ != NULL) { /* We allocated this environment so we can free it. */ free (__environ); last_environ = NULL; } /* Clear the environment pointer removes the whole environment. */ __environ = NULL; UNLOCK; return 0; } #ifdef _LIBC static void free_mem (void) { /* Remove all traces. */ clearenv (); /* Now remove the search tree. */ __tdestroy (known_values, free); known_values = NULL; } text_set_element (__libc_subfreeres, free_mem); # undef setenv # undef clearenv weak_alias (__setenv, setenv) weak_alias (__clearenv, clearenv) #endif #endif /* _LIBC || !HAVE_SETENV */ /* The rest of this file is called into use when replacing an existing but buggy setenv. Known bugs include failure to diagnose invalid name, and consuming a leading '=' from value. */ #if HAVE_SETENV # undef setenv # if !HAVE_DECL_SETENV extern int setenv (const char *, const char *, int); # endif # define STREQ(a, b) (strcmp (a, b) == 0) int rpl_setenv (const char *name, const char *value, int replace) { int result; if (!name || !*name || strchr (name, '=')) { errno = EINVAL; return -1; } /* Call the real setenv even if replace is 0, in case implementation has underlying data to update, such as when environ changes. */ result = setenv (name, value, replace); if (result == 0 && replace && *value == '=') { char *tmp = getenv (name); if (!STREQ (tmp, value)) { int saved_errno; size_t len = strlen (value); tmp = malloca (len + 2); /* Since leading '=' is eaten, double it up. */ *tmp = '='; memcpy (tmp + 1, value, len + 1); result = setenv (name, tmp, replace); saved_errno = errno; freea (tmp); errno = saved_errno; } } return result; } #endif /* HAVE_SETENV */ gnuastro-0.5/bootstrapped/tests/select.c0000644000175000017500000003771113217200023015433 00000000000000/* Emulation for select(2) Contributed by Paolo Bonzini. Copyright 2008-2017 Free Software Foundation, Inc. This file is part of gnulib. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Windows. */ #include #include #include #include #include #include #include #include #include /* Get the overridden 'struct timeval'. */ #include #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include #endif #undef select struct bitset { unsigned char in[FD_SETSIZE / CHAR_BIT]; unsigned char out[FD_SETSIZE / CHAR_BIT]; }; /* Declare data structures for ntdll functions. */ typedef struct _FILE_PIPE_LOCAL_INFORMATION { ULONG NamedPipeType; ULONG NamedPipeConfiguration; ULONG MaximumInstances; ULONG CurrentInstances; ULONG InboundQuota; ULONG ReadDataAvailable; ULONG OutboundQuota; ULONG WriteQuotaAvailable; ULONG NamedPipeState; ULONG NamedPipeEnd; } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; typedef struct _IO_STATUS_BLOCK { union { DWORD Status; PVOID Pointer; } u; ULONG_PTR Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; typedef enum _FILE_INFORMATION_CLASS { FilePipeLocalInformation = 24 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; typedef DWORD (WINAPI *PNtQueryInformationFile) (HANDLE, IO_STATUS_BLOCK *, VOID *, ULONG, FILE_INFORMATION_CLASS); #ifndef PIPE_BUF #define PIPE_BUF 512 #endif static BOOL IsConsoleHandle (HANDLE h) { DWORD mode; return GetConsoleMode (h, &mode) != 0; } static BOOL IsSocketHandle (HANDLE h) { WSANETWORKEVENTS ev; if (IsConsoleHandle (h)) return FALSE; /* Under Wine, it seems that getsockopt returns 0 for pipes too. WSAEnumNetworkEvents instead distinguishes the two correctly. */ ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents ((SOCKET) h, NULL, &ev); return ev.lNetworkEvents != 0xDEADBEEF; } /* Compute output fd_sets for libc descriptor FD (whose Windows handle is H). */ static int windows_poll_handle (HANDLE h, int fd, struct bitset *rbits, struct bitset *wbits, struct bitset *xbits) { BOOL read, write, except; int i, ret; INPUT_RECORD *irbuffer; DWORD avail, nbuffer; BOOL bRet; IO_STATUS_BLOCK iosb; FILE_PIPE_LOCAL_INFORMATION fpli; static PNtQueryInformationFile NtQueryInformationFile; static BOOL once_only; read = write = except = FALSE; switch (GetFileType (h)) { case FILE_TYPE_DISK: read = TRUE; write = TRUE; break; case FILE_TYPE_PIPE: if (!once_only) { NtQueryInformationFile = (PNtQueryInformationFile) GetProcAddress (GetModuleHandle ("ntdll.dll"), "NtQueryInformationFile"); once_only = TRUE; } if (PeekNamedPipe (h, NULL, 0, NULL, &avail, NULL) != 0) { if (avail) read = TRUE; } else if (GetLastError () == ERROR_BROKEN_PIPE) ; else { /* It was the write-end of the pipe. Check if it is writable. If NtQueryInformationFile fails, optimistically assume the pipe is writable. This could happen on Windows 9x, where NtQueryInformationFile is not available, or if we inherit a pipe that doesn't permit FILE_READ_ATTRIBUTES access on the write end (I think this should not happen since Windows XP SP2; WINE seems fine too). Otherwise, ensure that enough space is available for atomic writes. */ memset (&iosb, 0, sizeof (iosb)); memset (&fpli, 0, sizeof (fpli)); if (!NtQueryInformationFile || NtQueryInformationFile (h, &iosb, &fpli, sizeof (fpli), FilePipeLocalInformation) || fpli.WriteQuotaAvailable >= PIPE_BUF || (fpli.OutboundQuota < PIPE_BUF && fpli.WriteQuotaAvailable == fpli.OutboundQuota)) write = TRUE; } break; case FILE_TYPE_CHAR: write = TRUE; if (!(rbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) break; ret = WaitForSingleObject (h, 0); if (ret == WAIT_OBJECT_0) { if (!IsConsoleHandle (h)) { read = TRUE; break; } nbuffer = avail = 0; bRet = GetNumberOfConsoleInputEvents (h, &nbuffer); /* Screen buffers handles are filtered earlier. */ assert (bRet); if (nbuffer == 0) { except = TRUE; break; } irbuffer = (INPUT_RECORD *) alloca (nbuffer * sizeof (INPUT_RECORD)); bRet = PeekConsoleInput (h, irbuffer, nbuffer, &avail); if (!bRet || avail == 0) { except = TRUE; break; } for (i = 0; i < avail; i++) if (irbuffer[i].EventType == KEY_EVENT) read = TRUE; } break; default: ret = WaitForSingleObject (h, 0); write = TRUE; if (ret == WAIT_OBJECT_0) read = TRUE; break; } ret = 0; if (read && (rbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) { rbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); ret++; } if (write && (wbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) { wbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); ret++; } if (except && (xbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) { xbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); ret++; } return ret; } int rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, struct timeval *timeout) #undef timeval { static struct timeval tv0; static HANDLE hEvent; HANDLE h, handle_array[FD_SETSIZE + 2]; fd_set handle_rfds, handle_wfds, handle_xfds; struct bitset rbits, wbits, xbits; unsigned char anyfds_in[FD_SETSIZE / CHAR_BIT]; DWORD ret, wait_timeout, nhandles, nsock, nbuffer; MSG msg; int i, fd, rc; clock_t tend; if (nfds > FD_SETSIZE) nfds = FD_SETSIZE; if (!timeout) wait_timeout = INFINITE; else { wait_timeout = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; /* select is also used as a portable usleep. */ if (!rfds && !wfds && !xfds) { Sleep (wait_timeout); return 0; } } if (!hEvent) hEvent = CreateEvent (NULL, FALSE, FALSE, NULL); handle_array[0] = hEvent; nhandles = 1; nsock = 0; /* Copy descriptors to bitsets. At the same time, eliminate bits in the "wrong" direction for console input buffers and screen buffers, because screen buffers are waitable and they will block until a character is available. */ memset (&rbits, 0, sizeof (rbits)); memset (&wbits, 0, sizeof (wbits)); memset (&xbits, 0, sizeof (xbits)); memset (anyfds_in, 0, sizeof (anyfds_in)); if (rfds) for (i = 0; i < rfds->fd_count; i++) { fd = rfds->fd_array[i]; h = (HANDLE) _get_osfhandle (fd); if (IsConsoleHandle (h) && !GetNumberOfConsoleInputEvents (h, &nbuffer)) continue; rbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); } else rfds = (fd_set *) alloca (sizeof (fd_set)); if (wfds) for (i = 0; i < wfds->fd_count; i++) { fd = wfds->fd_array[i]; h = (HANDLE) _get_osfhandle (fd); if (IsConsoleHandle (h) && GetNumberOfConsoleInputEvents (h, &nbuffer)) continue; wbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); } else wfds = (fd_set *) alloca (sizeof (fd_set)); if (xfds) for (i = 0; i < xfds->fd_count; i++) { fd = xfds->fd_array[i]; xbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); } else xfds = (fd_set *) alloca (sizeof (fd_set)); /* Zero all the fd_sets, including the application's. */ FD_ZERO (rfds); FD_ZERO (wfds); FD_ZERO (xfds); FD_ZERO (&handle_rfds); FD_ZERO (&handle_wfds); FD_ZERO (&handle_xfds); /* Classify handles. Create fd sets for sockets, poll the others. */ for (i = 0; i < nfds; i++) { if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) continue; h = (HANDLE) _get_osfhandle (i); if (!h) { errno = EBADF; return -1; } if (IsSocketHandle (h)) { int requested = FD_CLOSE; /* See above; socket handles are mapped onto select, but we need to map descriptors to handles. */ if (rbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { requested |= FD_READ | FD_ACCEPT; FD_SET ((SOCKET) h, rfds); FD_SET ((SOCKET) h, &handle_rfds); } if (wbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { requested |= FD_WRITE | FD_CONNECT; FD_SET ((SOCKET) h, wfds); FD_SET ((SOCKET) h, &handle_wfds); } if (xbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { requested |= FD_OOB; FD_SET ((SOCKET) h, xfds); FD_SET ((SOCKET) h, &handle_xfds); } WSAEventSelect ((SOCKET) h, hEvent, requested); nsock++; } else { handle_array[nhandles++] = h; /* Poll now. If we get an event, do not wait below. */ if (wait_timeout != 0 && windows_poll_handle (h, i, &rbits, &wbits, &xbits)) wait_timeout = 0; } } /* Place a sentinel at the end of the array. */ handle_array[nhandles] = NULL; /* When will the waiting period expire? */ if (wait_timeout != INFINITE) tend = clock () + wait_timeout; restart: if (wait_timeout == 0 || nsock == 0) rc = 0; else { /* See if we need to wait in the loop below. If any select is ready, do MsgWaitForMultipleObjects anyway to dispatch messages, but no need to call select again. */ rc = select (0, &handle_rfds, &handle_wfds, &handle_xfds, &tv0); if (rc == 0) { /* Restore the fd_sets for the other select we do below. */ memcpy (&handle_rfds, rfds, sizeof (fd_set)); memcpy (&handle_wfds, wfds, sizeof (fd_set)); memcpy (&handle_xfds, xfds, sizeof (fd_set)); } else wait_timeout = 0; } /* How much is left to wait? */ if (wait_timeout != INFINITE) { clock_t tnow = clock (); if (tend >= tnow) wait_timeout = tend - tnow; else wait_timeout = 0; } for (;;) { ret = MsgWaitForMultipleObjects (nhandles, handle_array, FALSE, wait_timeout, QS_ALLINPUT); if (ret == WAIT_OBJECT_0 + nhandles) { /* new input of some other kind */ BOOL bRet; while ((bRet = PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) != 0) { TranslateMessage (&msg); DispatchMessage (&msg); } } else break; } /* If we haven't done it yet, check the status of the sockets. */ if (rc == 0 && nsock > 0) rc = select (0, &handle_rfds, &handle_wfds, &handle_xfds, &tv0); if (nhandles > 1) { /* Count results that are not counted in the return value of select. */ nhandles = 1; for (i = 0; i < nfds; i++) { if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) continue; h = (HANDLE) _get_osfhandle (i); if (h == handle_array[nhandles]) { /* Not a socket. */ nhandles++; windows_poll_handle (h, i, &rbits, &wbits, &xbits); if (rbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1))) || wbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1))) || xbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) rc++; } } if (rc == 0 && (wait_timeout == INFINITE /* If NHANDLES > 1, but no bits are set, it means we've been told incorrectly that some handle was signaled. This happens with anonymous pipes, which always cause MsgWaitForMultipleObjects to exit immediately, but no data is found ready to be read by windows_poll_handle. To avoid a total failure (whereby we return zero and don't wait at all), let's poll in a more busy loop. */ || (wait_timeout != 0 && nhandles > 1))) { /* Sleep 1 millisecond to avoid busy wait and retry with the original fd_sets. */ memcpy (&handle_rfds, rfds, sizeof (fd_set)); memcpy (&handle_wfds, wfds, sizeof (fd_set)); memcpy (&handle_xfds, xfds, sizeof (fd_set)); SleepEx (1, TRUE); goto restart; } if (timeout && wait_timeout == 0 && rc == 0) timeout->tv_sec = timeout->tv_usec = 0; } /* Now fill in the results. */ FD_ZERO (rfds); FD_ZERO (wfds); FD_ZERO (xfds); nhandles = 1; for (i = 0; i < nfds; i++) { if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) continue; h = (HANDLE) _get_osfhandle (i); if (h != handle_array[nhandles]) { /* Perform handle->descriptor mapping. */ WSAEventSelect ((SOCKET) h, NULL, 0); if (FD_ISSET (h, &handle_rfds)) FD_SET (i, rfds); if (FD_ISSET (h, &handle_wfds)) FD_SET (i, wfds); if (FD_ISSET (h, &handle_xfds)) FD_SET (i, xfds); } else { /* Not a socket. */ nhandles++; if (rbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) FD_SET (i, rfds); if (wbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) FD_SET (i, wfds); if (xbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) FD_SET (i, xfds); } } return rc; } #else /* ! Native Windows. */ #include #include /* NULL */ #include #include #undef select int rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, struct timeval *timeout) { int i; /* FreeBSD 8.2 has a bug: it does not always detect invalid fds. */ if (nfds < 0 || nfds > FD_SETSIZE) { errno = EINVAL; return -1; } for (i = 0; i < nfds; i++) { if (((rfds && FD_ISSET (i, rfds)) || (wfds && FD_ISSET (i, wfds)) || (xfds && FD_ISSET (i, xfds))) && dup2 (i, i) != i) return -1; } /* Interix 3.5 has a bug: it does not support nfds == 0. */ if (nfds == 0) { nfds = 1; rfds = NULL; wfds = NULL; xfds = NULL; } return select (nfds, rfds, wfds, xfds, timeout); } #endif gnuastro-0.5/bootstrapped/tests/raise.c0000644000175000017500000000325613217200023015254 00000000000000/* Provide a non-threads replacement for the POSIX raise function. Copyright (C) 2002-2003, 2005-2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* written by Jim Meyering and Bruno Haible */ #include /* Specification. */ #include #if HAVE_RAISE /* Native Windows platform. */ # include # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # undef raise # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int raise_nothrow (int sig) { int result; TRY_MSVC_INVAL { result = raise (sig); } CATCH_MSVC_INVAL { result = -1; errno = EINVAL; } DONE_MSVC_INVAL; return result; } # else # define raise_nothrow raise # endif #else /* An old Unix platform. */ # include # define rpl_raise raise #endif int rpl_raise (int sig) { #if GNULIB_defined_signal_blocking && GNULIB_defined_SIGPIPE if (sig == SIGPIPE) return _gl_raise_SIGPIPE (); #endif #if HAVE_RAISE return raise_nothrow (sig); #else return kill (getpid (), sig); #endif } gnuastro-0.5/bootstrapped/tests/putenv.c0000644000175000017500000001176413217200023015475 00000000000000/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2017 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include /* Include errno.h *after* sys/types.h to work around header problems on AIX 3.2.5. */ #include #ifndef __set_errno # define __set_errno(ev) ((errno) = (ev)) #endif #include #include #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include #endif #if _LIBC # if HAVE_GNU_LD # define environ __environ # else extern char **environ; # endif #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif static int _unsetenv (const char *name) { size_t len; #if !HAVE_DECL__PUTENV char **ep; #endif if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } len = strlen (name); #if HAVE_DECL__PUTENV { int putenv_result, putenv_errno; char *name_ = malloc (len + 2); memcpy (name_, name, len); name_[len] = '='; name_[len + 1] = 0; putenv_result = _putenv (name_); putenv_errno = errno; free (name_); __set_errno (putenv_errno); return putenv_result; } #else LOCK; ep = environ; while (*ep != NULL) if (!strncmp (*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; do dp[0] = dp[1]; while (*dp++); /* Continue the loop in case NAME appears again. */ } else ++ep; UNLOCK; return 0; #endif } /* Put STRING, which is of the form "NAME=VALUE", in the environment. If STRING contains no '=', then remove STRING from the environment. */ int putenv (char *string) { const char *name_end = strchr (string, '='); char **ep; if (name_end == NULL) { /* Remove the variable from the environment. */ return _unsetenv (string); } #if HAVE_DECL__PUTENV /* Rely on _putenv to allocate the new environment. If other parts of the application use _putenv, the !HAVE_DECL__PUTENV code would fight over who owns the environ vector, causing a crash. */ if (name_end[1]) return _putenv (string); else { /* _putenv ("NAME=") unsets NAME, so invoke _putenv ("NAME= ") to allocate the environ vector and then replace the new entry with "NAME=". */ int putenv_result, putenv_errno; char *name_x = malloc (name_end - string + sizeof "= "); if (!name_x) return -1; memcpy (name_x, string, name_end - string + 1); name_x[name_end - string + 1] = ' '; name_x[name_end - string + 2] = 0; putenv_result = _putenv (name_x); putenv_errno = errno; for (ep = environ; *ep; ep++) if (strcmp (*ep, name_x) == 0) { *ep = string; break; } # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ if (putenv_result == 0) { /* _putenv propagated "NAME= " into the subprocess environment; fix that by calling SetEnvironmentVariable directly. */ name_x[name_end - string] = 0; putenv_result = SetEnvironmentVariable (name_x, "") ? 0 : -1; putenv_errno = ENOMEM; /* ENOMEM is the only way to fail. */ } # endif free (name_x); __set_errno (putenv_errno); return putenv_result; } #else for (ep = environ; *ep; ep++) if (strncmp (*ep, string, name_end - string) == 0 && (*ep)[name_end - string] == '=') break; if (*ep) *ep = string; else { static char **last_environ = NULL; size_t size = ep - environ; char **new_environ = malloc ((size + 2) * sizeof *new_environ); if (! new_environ) return -1; new_environ[0] = string; memcpy (new_environ + 1, environ, (size + 1) * sizeof *new_environ); free (last_environ); last_environ = new_environ; environ = new_environ; } return 0; #endif } gnuastro-0.5/bootstrapped/tests/pthread_sigmask.c0000644000175000017500000000534013217200023017312 00000000000000/* POSIX compatible signal blocking for threads. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include #if PTHREAD_SIGMASK_INEFFECTIVE # include #endif #if PTHREAD_SIGMASK_UNBLOCK_BUG # include #endif int pthread_sigmask (int how, const sigset_t *new_mask, sigset_t *old_mask) #undef pthread_sigmask { #if HAVE_PTHREAD_SIGMASK int ret; # if PTHREAD_SIGMASK_INEFFECTIVE sigset_t omask, omask_copy; sigset_t *old_mask_ptr = &omask; sigemptyset (&omask); /* Add a signal unlikely to be blocked, so that OMASK_COPY is unlikely to match the actual mask. */ sigaddset (&omask, SIGILL); memcpy (&omask_copy, &omask, sizeof omask); # else sigset_t *old_mask_ptr = old_mask; # endif ret = pthread_sigmask (how, new_mask, old_mask_ptr); # if PTHREAD_SIGMASK_INEFFECTIVE if (ret == 0) { /* Detect whether pthread_sigmask is currently ineffective. Don't cache the information: libpthread.so could be dynamically loaded after the program started and after pthread_sigmask was called for the first time. */ if (memcmp (&omask_copy, &omask, sizeof omask) == 0 && pthread_sigmask (1729, &omask_copy, NULL) == 0) { /* pthread_sigmask is currently ineffective. The program is not linked to -lpthread. So use sigprocmask instead. */ return (sigprocmask (how, new_mask, old_mask) < 0 ? errno : 0); } if (old_mask) memcpy (old_mask, &omask, sizeof omask); } # endif # if PTHREAD_SIGMASK_FAILS_WITH_ERRNO if (ret == -1) return errno; # endif # if PTHREAD_SIGMASK_UNBLOCK_BUG if (ret == 0 && new_mask != NULL && (how == SIG_UNBLOCK || how == SIG_SETMASK)) { /* Give the OS the opportunity to raise signals that were pending before the pthread_sigmask call and have now been unblocked. */ usleep (1); } # endif return ret; #else int ret = sigprocmask (how, new_mask, old_mask); return (ret < 0 ? errno : 0); #endif } gnuastro-0.5/bootstrapped/tests/pipe.c0000644000175000017500000000252413217200023015103 00000000000000/* Create a pipe. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Windows API. */ /* Get _pipe(). */ # include /* Get _O_BINARY. */ # include int pipe (int fd[2]) { /* Mingw changes fd to {-1,-1} on failure, but this violates http://austingroupbugs.net/view.php?id=467 */ int tmp[2]; int result = _pipe (tmp, 4096, _O_BINARY); if (!result) { fd[0] = tmp[0]; fd[1] = tmp[1]; } return result; } #else # error "This platform lacks a pipe function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib." #endif gnuastro-0.5/bootstrapped/tests/perror.c0000644000175000017500000000276413217200023015465 00000000000000/* Print a message describing error code. Copyright (C) 2008-2017 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include #include #include "strerror-override.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef fprintf void perror (const char *string) { char stackbuf[STACKBUF_LEN]; int ret; /* Our implementation guarantees that this will be a non-empty string, even if it returns EINVAL; and stackbuf should be sized large enough to avoid ERANGE. */ ret = strerror_r (errno, stackbuf, sizeof stackbuf); if (ret == ERANGE) abort (); if (string != NULL && *string != '\0') fprintf (stderr, "%s: %s\n", string, stackbuf); else fprintf (stderr, "%s\n", stackbuf); } gnuastro-0.5/bootstrapped/tests/open.c0000644000175000017500000001507613217200023015115 00000000000000/* Open a descriptor to a file. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ /* If the user's config.h happens to include , let it include only the system's here, so that orig_open doesn't recurse to rpl_open. */ #define __need_system_fcntl_h #include /* Get the original definition of open. It might be defined as a macro. */ #include #include #undef __need_system_fcntl_h static int orig_open (const char *filename, int flags, mode_t mode) { return open (filename, flags, mode); } /* Specification. */ /* Write "fcntl.h" here, not , otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include above. */ #include "fcntl.h" #include "cloexec.h" #include #include #include #include #include #include #ifndef REPLACE_OPEN_DIRECTORY # define REPLACE_OPEN_DIRECTORY 0 #endif int open (const char *filename, int flags, ...) { /* 0 = unknown, 1 = yes, -1 = no. */ #if GNULIB_defined_O_CLOEXEC int have_cloexec = -1; #else static int have_cloexec; #endif mode_t mode; int fd; mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } #if GNULIB_defined_O_NONBLOCK /* The only known platform that lacks O_NONBLOCK is mingw, but it also lacks named pipes and Unix sockets, which are the only two file types that require non-blocking handling in open(). Therefore, it is safe to ignore O_NONBLOCK here. It is handy that mingw also lacks openat(), so that is also covered here. */ flags &= ~O_NONBLOCK; #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ if (strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif #if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR is specified, then fail. Rationale: POSIX says that "A pathname that contains at least one non-slash character and that ends with one or more trailing slashes shall be resolved as if a single dot character ( '.' ) were appended to the pathname." and "The special filename dot shall refer to the directory specified by its predecessor." If the named file already exists as a directory, then - if O_CREAT is specified, open() must fail because of the semantics of O_CREAT, - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then - if O_CREAT is specified, open() must fail since open() cannot create directories, - if O_WRONLY or O_RDWR is specified, open() must fail because the file does not contain a '.' directory. */ if (flags & (O_CREAT | O_WRONLY | O_RDWR)) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } #endif fd = orig_open (filename, flags & ~(have_cloexec <= 0 ? O_CLOEXEC : 0), mode); if (flags & O_CLOEXEC) { if (! have_cloexec) { if (0 <= fd) have_cloexec = 1; else if (errno == EINVAL) { fd = orig_open (filename, flags & ~O_CLOEXEC, mode); have_cloexec = -1; } } if (have_cloexec < 0 && 0 <= fd) set_cloexec_flag (fd, true); } #if REPLACE_FCHDIR /* Implementing fchdir and fdopendir requires the ability to open a directory file descriptor. If open doesn't support that (as on mingw), we use a dummy file that behaves the same as directories on Linux (ie. always reports EOF on attempts to read()), and override fstat() in fchdir.c to hide the fact that we have a dummy. */ if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES && ((flags & O_ACCMODE) == O_RDONLY || (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH))) { struct stat statbuf; if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode)) { /* Maximum recursion depth of 1. */ fd = open ("/dev/null", flags, mode); if (0 <= fd) fd = _gl_register_fd (fd, filename); } else errno = EACCES; } #endif #if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. Rationale: POSIX says that "A pathname that contains at least one non-slash character and that ends with one or more trailing slashes shall be resolved as if a single dot character ( '.' ) were appended to the pathname." and "The special filename dot shall refer to the directory specified by its predecessor." If the named file without the slash is not a directory, open() must fail with ENOTDIR. */ if (fd >= 0) { /* We know len is positive, since open did not fail with ENOENT. */ size_t len = strlen (filename); if (filename[len - 1] == '/') { struct stat statbuf; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return -1; } } } #endif #if REPLACE_FCHDIR if (!REPLACE_OPEN_DIRECTORY && 0 <= fd) fd = _gl_register_fd (fd, filename); #endif return fd; } gnuastro-0.5/bootstrapped/tests/nanosleep.c0000644000175000017500000002000613217200023016125 00000000000000/* Provide a replacement for the POSIX nanosleep function. Copyright (C) 1999-2000, 2002, 2004-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* written by Jim Meyering and Bruno Haible for the native Windows part */ #include #include #include "intprops.h" #include "sig-handler.h" #include "verify.h" #include #include #include #include #include #include #include #include enum { BILLION = 1000 * 1000 * 1000 }; #if HAVE_BUG_BIG_NANOSLEEP int nanosleep (const struct timespec *requested_delay, struct timespec *remaining_delay) # undef nanosleep { /* nanosleep mishandles large sleeps due to internal overflow problems. The worst known case of this is Linux 2.6.9 with glibc 2.3.4, which can't sleep more than 24.85 days (2^31 milliseconds). Similarly, cygwin 1.5.x, which can't sleep more than 49.7 days (2^32 milliseconds). Solve this by breaking the sleep up into smaller chunks. */ if (requested_delay->tv_nsec < 0 || BILLION <= requested_delay->tv_nsec) { errno = EINVAL; return -1; } { /* Verify that time_t is large enough. */ verify (TYPE_MAXIMUM (time_t) / 24 / 24 / 60 / 60); const time_t limit = 24 * 24 * 60 * 60; time_t seconds = requested_delay->tv_sec; struct timespec intermediate; intermediate.tv_nsec = requested_delay->tv_nsec; while (limit < seconds) { int result; intermediate.tv_sec = limit; result = nanosleep (&intermediate, remaining_delay); seconds -= limit; if (result) { if (remaining_delay) remaining_delay->tv_sec += seconds; return result; } intermediate.tv_nsec = 0; } intermediate.tv_sec = seconds; return nanosleep (&intermediate, remaining_delay); } } #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Windows platforms. */ # define WIN32_LEAN_AND_MEAN # include /* The Windows API function Sleep() has a resolution of about 15 ms and takes at least 5 ms to execute. We use this function for longer time periods. Additionally, we use busy-looping over short time periods, to get a resolution of about 0.01 ms. In order to measure such short timespans, we use the QueryPerformanceCounter() function. */ int nanosleep (const struct timespec *requested_delay, struct timespec *remaining_delay) { static bool initialized; /* Number of performance counter increments per nanosecond, or zero if it could not be determined. */ static double ticks_per_nanosecond; if (requested_delay->tv_nsec < 0 || BILLION <= requested_delay->tv_nsec) { errno = EINVAL; return -1; } /* For requested delays of one second or more, 15ms resolution is sufficient. */ if (requested_delay->tv_sec == 0) { if (!initialized) { /* Initialize ticks_per_nanosecond. */ LARGE_INTEGER ticks_per_second; if (QueryPerformanceFrequency (&ticks_per_second)) ticks_per_nanosecond = (double) ticks_per_second.QuadPart / 1000000000.0; initialized = true; } if (ticks_per_nanosecond) { /* QueryPerformanceFrequency worked. We can use QueryPerformanceCounter. Use a combination of Sleep and busy-looping. */ /* Number of milliseconds to pass to the Sleep function. Since Sleep can take up to 8 ms less or 8 ms more than requested (or maybe more if the system is loaded), we subtract 10 ms. */ int sleep_millis = (int) requested_delay->tv_nsec / 1000000 - 10; /* Determine how many ticks to delay. */ LONGLONG wait_ticks = requested_delay->tv_nsec * ticks_per_nanosecond; /* Start. */ LARGE_INTEGER counter_before; if (QueryPerformanceCounter (&counter_before)) { /* Wait until the performance counter has reached this value. We don't need to worry about overflow, because the performance counter is reset at reboot, and with a frequency of 3.6E6 ticks per second 63 bits suffice for over 80000 years. */ LONGLONG wait_until = counter_before.QuadPart + wait_ticks; /* Use Sleep for the longest part. */ if (sleep_millis > 0) Sleep (sleep_millis); /* Busy-loop for the rest. */ for (;;) { LARGE_INTEGER counter_after; if (!QueryPerformanceCounter (&counter_after)) /* QueryPerformanceCounter failed, but succeeded earlier. Should not happen. */ break; if (counter_after.QuadPart >= wait_until) /* The requested time has elapsed. */ break; } goto done; } } } /* Implementation for long delays and as fallback. */ Sleep (requested_delay->tv_sec * 1000 + requested_delay->tv_nsec / 1000000); done: /* Sleep is not interruptible. So there is no remaining delay. */ if (remaining_delay != NULL) { remaining_delay->tv_sec = 0; remaining_delay->tv_nsec = 0; } return 0; } #else /* Unix platforms lacking nanosleep. */ /* Some systems (MSDOS) don't have SIGCONT. Using SIGTERM here turns the signal-handling code below into a no-op on such systems. */ # ifndef SIGCONT # define SIGCONT SIGTERM # endif static sig_atomic_t volatile suspended; /* Handle SIGCONT. */ static void sighandler (int sig) { suspended = 1; } /* Suspend execution for at least *TS_DELAY seconds. */ static int my_usleep (const struct timespec *ts_delay) { struct timeval tv_delay; tv_delay.tv_sec = ts_delay->tv_sec; tv_delay.tv_usec = (ts_delay->tv_nsec + 999) / 1000; if (tv_delay.tv_usec == 1000000) { if (tv_delay.tv_sec == TYPE_MAXIMUM (time_t)) tv_delay.tv_usec = 1000000 - 1; /* close enough */ else { tv_delay.tv_sec++; tv_delay.tv_usec = 0; } } return select (0, NULL, NULL, NULL, &tv_delay); } /* Suspend execution for at least *REQUESTED_DELAY seconds. The *REMAINING_DELAY part isn't implemented yet. */ int nanosleep (const struct timespec *requested_delay, struct timespec *remaining_delay) { static bool initialized; if (requested_delay->tv_nsec < 0 || BILLION <= requested_delay->tv_nsec) { errno = EINVAL; return -1; } /* set up sig handler */ if (! initialized) { struct sigaction oldact; sigaction (SIGCONT, NULL, &oldact); if (get_handler (&oldact) != SIG_IGN) { struct sigaction newact; newact.sa_handler = sighandler; sigemptyset (&newact.sa_mask); newact.sa_flags = 0; sigaction (SIGCONT, &newact, NULL); } initialized = true; } suspended = 0; if (my_usleep (requested_delay) == -1) { if (suspended) { /* Calculate time remaining. */ /* FIXME: the code in sleep doesn't use this, so there's no rush to implement it. */ errno = EINTR; } return -1; } /* FIXME: Restore sig handler? */ return 0; } #endif gnuastro-0.5/bootstrapped/tests/lstat.c0000644000175000017500000000712513217200023015277 00000000000000/* Work around a bug of lstat on some systems Copyright (C) 1997-2006, 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* written by Jim Meyering */ /* If the user's config.h happens to include , let it include only the system's here, so that orig_lstat doesn't recurse to rpl_lstat. */ #define __need_system_sys_stat_h #include #if !HAVE_LSTAT /* On systems that lack symlinks, our replacement already defined lstat as stat, so there is nothing further to do other than avoid an empty file. */ typedef int dummy; #else /* HAVE_LSTAT */ /* Get the original definition of lstat. It might be defined as a macro. */ # include # include # undef __need_system_sys_stat_h static int orig_lstat (const char *filename, struct stat *buf) { return lstat (filename, buf); } /* Specification. */ /* Write "sys/stat.h" here, not , otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include above. */ # include "sys/stat.h" # include "stat-time.h" # include # include /* lstat works differently on Linux and Solaris systems. POSIX (see "pathname resolution" in the glossary) requires that programs like 'ls' take into consideration the fact that FILE has a trailing slash when FILE is a symbolic link. On Linux and Solaris 10 systems, the lstat function already has the desired semantics (in treating 'lstat ("symlink/", sbuf)' just like 'lstat ("symlink/.", sbuf)', but on Solaris 9 and earlier it does not. If FILE has a trailing slash and specifies a symbolic link, then use stat() to get more info on the referent of FILE. If the referent is a non-directory, then set errno to ENOTDIR and return -1. Otherwise, return stat's result. */ int rpl_lstat (const char *file, struct stat *sbuf) { int result = orig_lstat (file, sbuf); /* This replacement file can blindly check against '/' rather than using the ISSLASH macro, because all platforms with '\\' either lack symlinks (mingw) or have working lstat (cygwin) and thus do not compile this file. 0 len should have already been filtered out above, with a failure return of ENOENT. */ if (result == 0) { if (S_ISDIR (sbuf->st_mode) || file[strlen (file) - 1] != '/') result = stat_time_normalize (result, sbuf); else { /* At this point, a trailing slash is permitted only on symlink-to-dir; but it should have found information on the directory, not the symlink. Call 'stat' to get info about the link's referent. Our replacement stat guarantees valid results, even if the symlink is not pointing to a directory. */ if (!S_ISLNK (sbuf->st_mode)) { errno = ENOTDIR; return -1; } result = stat (file, sbuf); } } return result; } #endif /* HAVE_LSTAT */ gnuastro-0.5/bootstrapped/tests/localtime-buffer.c0000644000175000017500000000313413217200023017364 00000000000000/* Provide access to the last buffer returned by localtime() or gmtime(). Copyright (C) 2001-2003, 2005-2007, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* written by Jim Meyering */ #include /* Specification. */ #include "localtime-buffer.h" #if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME static struct tm tm_zero_buffer; struct tm *localtime_buffer_addr = &tm_zero_buffer; /* This is a wrapper for localtime. On the first call, record the address of the static buffer that localtime uses for its result. */ struct tm * rpl_localtime (time_t const *timep) { struct tm *tm = localtime (timep); if (localtime_buffer_addr == &tm_zero_buffer) localtime_buffer_addr = tm; return tm; } /* Same as above, since gmtime and localtime use the same buffer. */ struct tm * rpl_gmtime (time_t const *timep) { struct tm *tm = gmtime (timep); if (localtime_buffer_addr == &tm_zero_buffer) localtime_buffer_addr = tm; return tm; } #endif gnuastro-0.5/bootstrapped/tests/listen.c0000644000175000017500000000234313217200023015443 00000000000000/* listen.c --- wrappers for Windows listen function Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paolo Bonzini */ #include #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef listen int rpl_listen (int fd, int backlog) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = listen (sock, backlog); if (r < 0) set_winsock_errno (); return r; } } gnuastro-0.5/bootstrapped/tests/isnanl.c0000644000175000017500000000152613217200023015433 00000000000000/* Test for NaN that does not need libm. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #define USE_LONG_DOUBLE #include "isnan.c" gnuastro-0.5/bootstrapped/tests/isnanf.c0000644000175000017500000000152013217200023015417 00000000000000/* Test for NaN that does not need libm. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #define USE_FLOAT #include "isnan.c" gnuastro-0.5/bootstrapped/tests/isnand.c0000644000175000017500000000147013217200023015421 00000000000000/* Test for NaN that does not need libm. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include "isnan.c" gnuastro-0.5/bootstrapped/tests/isnan.c0000644000175000017500000001560613217200023015263 00000000000000/* Test for NaN that does not need libm. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include /* Specification. */ #ifdef USE_LONG_DOUBLE /* Specification found in math.h or isnanl-nolibm.h. */ extern int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; #elif ! defined USE_FLOAT /* Specification found in math.h or isnand-nolibm.h. */ extern int rpl_isnand (double x); #else /* defined USE_FLOAT */ /* Specification found in math.h or isnanf-nolibm.h. */ extern int rpl_isnanf (float x); #endif #include #include #include "float+.h" #ifdef USE_LONG_DOUBLE # define FUNC rpl_isnanl # define DOUBLE long double # define MAX_EXP LDBL_MAX_EXP # define MIN_EXP LDBL_MIN_EXP # if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD LDBL_EXPBIT0_WORD # define EXPBIT0_BIT LDBL_EXPBIT0_BIT # endif # define SIZE SIZEOF_LDBL # define L_(literal) literal##L #elif ! defined USE_FLOAT # define FUNC rpl_isnand # define DOUBLE double # define MAX_EXP DBL_MAX_EXP # define MIN_EXP DBL_MIN_EXP # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD DBL_EXPBIT0_WORD # define EXPBIT0_BIT DBL_EXPBIT0_BIT # endif # define SIZE SIZEOF_DBL # define L_(literal) literal #else /* defined USE_FLOAT */ # define FUNC rpl_isnanf # define DOUBLE float # define MAX_EXP FLT_MAX_EXP # define MIN_EXP FLT_MIN_EXP # if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD FLT_EXPBIT0_WORD # define EXPBIT0_BIT FLT_EXPBIT0_BIT # endif # define SIZE SIZEOF_FLT # define L_(literal) literal##f #endif #define EXP_MASK ((MAX_EXP - MIN_EXP) | 7) #define NWORDS \ ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double; /* Most hosts nowadays use IEEE floating point, so they use IEC 60559 representations, have infinities and NaNs, and do not trap on exceptions. Define IEEE_FLOATING_POINT if this host is one of the typical ones. The C11 macro __STDC_IEC_559__ is close to what is wanted here, but is not quite right because this file does not require all the features of C11 Annex F (and does not require C11 at all, for that matter). */ #define IEEE_FLOATING_POINT (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \ && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128) int FUNC (DOUBLE x) { #if defined KNOWN_EXPBIT0_LOCATION && IEEE_FLOATING_POINT # if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Special CPU dependent code is needed to treat bit patterns outside the IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals) as NaNs. These bit patterns are: - exponent = 0x0001..0x7FFF, mantissa bit 63 = 0, - exponent = 0x0000, mantissa bit 63 = 1. The NaN bit pattern is: - exponent = 0x7FFF, mantissa >= 0x8000000000000001. */ memory_double m; unsigned int exponent; m.value = x; exponent = (m.word[EXPBIT0_WORD] >> EXPBIT0_BIT) & EXP_MASK; # ifdef WORDS_BIGENDIAN /* Big endian: EXPBIT0_WORD = 0, EXPBIT0_BIT = 16. */ if (exponent == 0) return 1 & (m.word[0] >> 15); else if (exponent == EXP_MASK) return (((m.word[0] ^ 0x8000U) << 16) | m.word[1] | (m.word[2] >> 16)) != 0; else return 1 & ~(m.word[0] >> 15); # else /* Little endian: EXPBIT0_WORD = 2, EXPBIT0_BIT = 0. */ if (exponent == 0) return (m.word[1] >> 31); else if (exponent == EXP_MASK) return ((m.word[1] ^ 0x80000000U) | m.word[0]) != 0; else return (m.word[1] >> 31) ^ 1; # endif # else /* Be careful to not do any floating-point operation on x, such as x == x, because x may be a signaling NaN. */ # if defined __SUNPRO_C || defined __ICC || defined _MSC_VER \ || defined __DECC || defined __TINYC__ \ || (defined __sgi && !defined __GNUC__) /* The Sun C 5.0, Intel ICC 10.0, Microsoft Visual C/C++ 9.0, Compaq (ex-DEC) 6.4, and TinyCC compilers don't recognize the initializers as constant expressions. The Compaq compiler also fails when constant-folding 0.0 / 0.0 even when constant-folding is not required. The Microsoft Visual C/C++ compiler also fails when constant-folding 1.0 / 0.0 even when constant-folding is not required. The SGI MIPSpro C compiler complains about "floating-point operation result is out of range". */ static DOUBLE zero = L_(0.0); memory_double nan; DOUBLE plus_inf = L_(1.0) / zero; DOUBLE minus_inf = -L_(1.0) / zero; nan.value = zero / zero; # else static memory_double nan = { L_(0.0) / L_(0.0) }; static DOUBLE plus_inf = L_(1.0) / L_(0.0); static DOUBLE minus_inf = -L_(1.0) / L_(0.0); # endif { memory_double m; /* A NaN can be recognized through its exponent. But exclude +Infinity and -Infinity, which have the same exponent. */ m.value = x; if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD]) & (EXP_MASK << EXPBIT0_BIT)) == 0) return (memcmp (&m.value, &plus_inf, SIZE) != 0 && memcmp (&m.value, &minus_inf, SIZE) != 0); else return 0; } # endif #else /* The configuration did not find sufficient information, or does not use IEEE floating point. Give up about the signaling NaNs; handle only the quiet NaNs. */ if (x == x) { # if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Detect any special bit patterns that pass ==; see comment above. */ memory_double m1; memory_double m2; memset (&m1.value, 0, SIZE); memset (&m2.value, 0, SIZE); m1.value = x; m2.value = x + (x ? 0.0L : -0.0L); if (memcmp (&m1.value, &m2.value, SIZE) != 0) return 1; # endif return 0; } else return 1; #endif } gnuastro-0.5/bootstrapped/tests/isblank.c0000644000175000017500000000246713217200023015577 00000000000000/* Test whether a character is a blank. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include int isblank (int c) { /* On all known platforms, in all predefined locales, isblank(c) is likely equivalent with (c == ' ' || c == '\t'). Look at the glibc definition (in glibc/localedata/locales/i18n): The "blank" characters are '\t', ' ', U+1680, U+180E, U+2000..U+2006, U+2008..U+200A, U+205F, U+3000, and none except the first two is present in a common 8-bit encoding. Therefore the substitute for other platforms is not more complicated than this. */ return (c == ' ' || c == '\t'); } gnuastro-0.5/bootstrapped/tests/ioctl.c0000644000175000017500000000435313217200022015261 00000000000000/* ioctl.c --- wrappers for Windows ioctl function Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paolo Bonzini */ #include #include #include #if HAVE_IOCTL /* Provide a wrapper with the POSIX prototype. */ # undef ioctl int rpl_ioctl (int fd, int request, ... /* {void *,char *} arg */) { void *buf; va_list args; va_start (args, request); buf = va_arg (args, void *); va_end (args); /* Cast 'request' so that when the system's ioctl function takes a 64-bit request argument, the value gets zero-extended, not sign-extended. */ return ioctl (fd, (unsigned int) request, buf); } #else /* mingw */ # include /* Get HANDLE. */ # define WIN32_LEAN_AND_MEAN # include # include "fd-hook.h" /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif static int primary_ioctl (int fd, int request, void *arg) { /* We don't support FIONBIO on pipes here. If you want to make pipe fds non-blocking, use the gnulib 'nonblocking' module, until gnulib implements fcntl F_GETFL / F_SETFL with O_NONBLOCK. */ if ((HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE) errno = ENOSYS; else errno = EBADF; return -1; } int ioctl (int fd, int request, ... /* {void *,char *} arg */) { void *arg; va_list args; va_start (args, request); arg = va_arg (args, void *); va_end (args); # if WINDOWS_SOCKETS return execute_all_ioctl_hooks (primary_ioctl, fd, request, arg); # else return primary_ioctl (fd, request, arg); # endif } #endif gnuastro-0.5/bootstrapped/tests/inet_pton.c0000644000175000017500000001537313217200022016152 00000000000000/* inet_pton.c -- convert IPv4 and IPv6 addresses from text to binary form Copyright (C) 2006, 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* * Copyright (c) 1996,1999 by Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ #include /* Specification. */ #include #if HAVE_DECL_INET_PTON # undef inet_pton int rpl_inet_pton (int af, const char *restrict src, void *restrict dst) { return inet_pton (af, src, dst); } #else # include # include # include # define NS_INADDRSZ 4 # define NS_IN6ADDRSZ 16 # define NS_INT16SZ 2 /* * WARNING: Don't even consider trying to compile this on a system where * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. */ static int inet_pton4 (const char *src, unsigned char *dst); # if HAVE_IPV6 static int inet_pton6 (const char *src, unsigned char *dst); # endif /* int * inet_pton(af, src, dst) * convert from presentation format (which usually means ASCII printable) * to network format (which is usually some kind of binary format). * return: * 1 if the address was valid for the specified address family * 0 if the address wasn't valid ('dst' is untouched in this case) * -1 if some other error occurred ('dst' is untouched in this case, too) * author: * Paul Vixie, 1996. */ int inet_pton (int af, const char *restrict src, void *restrict dst) { switch (af) { case AF_INET: return (inet_pton4 (src, dst)); # if HAVE_IPV6 case AF_INET6: return (inet_pton6 (src, dst)); # endif default: errno = EAFNOSUPPORT; return (-1); } /* NOTREACHED */ } /* int * inet_pton4(src, dst) * like inet_aton() but without all the hexadecimal, octal (with the * exception of 0) and shorthand. * return: * 1 if 'src' is a valid dotted quad, else 0. * notice: * does not touch 'dst' unless it's returning 1. * author: * Paul Vixie, 1996. */ static int inet_pton4 (const char *restrict src, unsigned char *restrict dst) { int saw_digit, octets, ch; unsigned char tmp[NS_INADDRSZ], *tp; saw_digit = 0; octets = 0; *(tp = tmp) = 0; while ((ch = *src++) != '\0') { if (ch >= '0' && ch <= '9') { unsigned new = *tp * 10 + (ch - '0'); if (saw_digit && *tp == 0) return (0); if (new > 255) return (0); *tp = new; if (!saw_digit) { if (++octets > 4) return (0); saw_digit = 1; } } else if (ch == '.' && saw_digit) { if (octets == 4) return (0); *++tp = 0; saw_digit = 0; } else return (0); } if (octets < 4) return (0); memcpy (dst, tmp, NS_INADDRSZ); return (1); } # if HAVE_IPV6 /* int * inet_pton6(src, dst) * convert presentation level address to network order binary form. * return: * 1 if 'src' is a valid [RFC1884 2.2] address, else 0. * notice: * (1) does not touch 'dst' unless it's returning 1. * (2) :: in a full address is silently ignored. * credit: * inspired by Mark Andrews. * author: * Paul Vixie, 1996. */ static int inet_pton6 (const char *restrict src, unsigned char *restrict dst) { static const char xdigits[] = "0123456789abcdef"; unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; const char *curtok; int ch, saw_xdigit; unsigned val; tp = memset (tmp, '\0', NS_IN6ADDRSZ); endp = tp + NS_IN6ADDRSZ; colonp = NULL; /* Leading :: requires some special handling. */ if (*src == ':') if (*++src != ':') return (0); curtok = src; saw_xdigit = 0; val = 0; while ((ch = c_tolower (*src++)) != '\0') { const char *pch; pch = strchr (xdigits, ch); if (pch != NULL) { val <<= 4; val |= (pch - xdigits); if (val > 0xffff) return (0); saw_xdigit = 1; continue; } if (ch == ':') { curtok = src; if (!saw_xdigit) { if (colonp) return (0); colonp = tp; continue; } else if (*src == '\0') { return (0); } if (tp + NS_INT16SZ > endp) return (0); *tp++ = (u_char) (val >> 8) & 0xff; *tp++ = (u_char) val & 0xff; saw_xdigit = 0; val = 0; continue; } if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) && inet_pton4 (curtok, tp) > 0) { tp += NS_INADDRSZ; saw_xdigit = 0; break; /* '\0' was seen by inet_pton4(). */ } return (0); } if (saw_xdigit) { if (tp + NS_INT16SZ > endp) return (0); *tp++ = (u_char) (val >> 8) & 0xff; *tp++ = (u_char) val & 0xff; } if (colonp != NULL) { /* * Since some memmove()'s erroneously fail to handle * overlapping regions, we'll do the shift by hand. */ const int n = tp - colonp; int i; if (tp == endp) return (0); for (i = 1; i <= n; i++) { endp[-i] = colonp[n - i]; colonp[n - i] = 0; } tp = endp; } if (tp != endp) return (0); memcpy (dst, tmp, NS_IN6ADDRSZ); return (1); } # endif #endif gnuastro-0.5/bootstrapped/tests/gettimeofday.c0000644000175000017500000001073713217200022016633 00000000000000/* Provide gettimeofday for systems that don't have it or for which it's broken. Copyright (C) 2001-2003, 2005-2007, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* written by Jim Meyering */ #include /* Specification. */ #include #include #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WINDOWS_NATIVE # include #endif #include "localtime-buffer.h" #ifdef WINDOWS_NATIVE /* GetSystemTimePreciseAsFileTime was introduced only in Windows 8. */ typedef void (WINAPI * GetSystemTimePreciseAsFileTimeFuncType) (FILETIME *lpTime); static GetSystemTimePreciseAsFileTimeFuncType GetSystemTimePreciseAsFileTimeFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = LoadLibrary ("kernel32.dll"); if (kernel32 != NULL) { GetSystemTimePreciseAsFileTimeFunc = (GetSystemTimePreciseAsFileTimeFuncType) GetProcAddress (kernel32, "GetSystemTimePreciseAsFileTime"); } initialized = TRUE; } #endif /* This is a wrapper for gettimeofday. It is used only on systems that lack this function, or whose implementation of this function causes problems. Work around the bug in some systems whereby gettimeofday clobbers the static buffer that localtime uses for its return value. The gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has this problem. */ int gettimeofday (struct timeval *restrict tv, void *restrict tz) { #undef gettimeofday #ifdef WINDOWS_NATIVE /* On native Windows, there are two ways to get the current time: GetSystemTimeAsFileTime or GetSystemTimePreciseAsFileTime . GetSystemTimeAsFileTime produces values that jump by increments of 15.627 milliseconds (!) on average. Whereas GetSystemTimePreciseAsFileTime values usually jump by 1 or 2 microseconds. More discussion on this topic: . */ FILETIME current_time; if (!initialized) initialize (); if (GetSystemTimePreciseAsFileTimeFunc != NULL) GetSystemTimePreciseAsFileTimeFunc (¤t_time); else GetSystemTimeAsFileTime (¤t_time); /* Convert from FILETIME to 'struct timeval'. */ /* FILETIME: */ ULONGLONG since_1601 = ((ULONGLONG) current_time.dwHighDateTime << 32) | (ULONGLONG) current_time.dwLowDateTime; /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ ULONGLONG since_1970 = since_1601 - (ULONGLONG) 134774 * (ULONGLONG) 86400 * (ULONGLONG) 10000000; ULONGLONG microseconds_since_1970 = since_1970 / (ULONGLONG) 10; tv->tv_sec = microseconds_since_1970 / (ULONGLONG) 1000000; tv->tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000; return 0; #else # if HAVE_GETTIMEOFDAY # if GETTIMEOFDAY_CLOBBERS_LOCALTIME /* Save and restore the contents of the buffer used for localtime's result around the call to gettimeofday. */ struct tm save = *localtime_buffer_addr; # endif # if defined timeval /* 'struct timeval' overridden by gnulib? */ # undef timeval struct timeval otv; int result = gettimeofday (&otv, (struct timezone *) tz); if (result == 0) { tv->tv_sec = otv.tv_sec; tv->tv_usec = otv.tv_usec; } # else int result = gettimeofday (tv, (struct timezone *) tz); # endif # if GETTIMEOFDAY_CLOBBERS_LOCALTIME *localtime_buffer_addr = save; # endif return result; # else # if !defined OK_TO_USE_1S_CLOCK # error "Only 1-second nominal clock resolution found. Is that intended?" \ "If so, compile with the -DOK_TO_USE_1S_CLOCK option." # endif tv->tv_sec = time (NULL); tv->tv_usec = 0; return 0; # endif #endif } gnuastro-0.5/bootstrapped/tests/getpagesize.c0000644000175000017500000000227513217200022016457 00000000000000/* getpagesize emulation for systems where it cannot be done in a C macro. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible and Martin Lambers. */ #include /* Specification. */ #include /* This implementation is only for native Windows systems. */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include int getpagesize (void) { SYSTEM_INFO system_info; GetSystemInfo (&system_info); return system_info.dwPageSize; } #endif gnuastro-0.5/bootstrapped/tests/getdtablesize.c0000644000175000017500000000657313217200022017003 00000000000000/* getdtablesize() function: Return maximum possible file descriptor value + 1. Copyright (C) 2008-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int _setmaxstdio_nothrow (int newmax) { int result; TRY_MSVC_INVAL { result = _setmaxstdio (newmax); } CATCH_MSVC_INVAL { result = -1; } DONE_MSVC_INVAL; return result; } # else # define _setmaxstdio_nothrow _setmaxstdio # endif /* Cache for the previous getdtablesize () result. Safe to cache because Windows also lacks setrlimit. */ static int dtablesize; int getdtablesize (void) { if (dtablesize == 0) { /* We are looking for the number N such that the valid file descriptors are 0..N-1. It can be obtained through a loop as follows: { int fd; for (fd = 3; fd < 65536; fd++) if (dup2 (0, fd) == -1) break; return fd; } On Windows XP, the result is 2048. The drawback of this loop is that it allocates memory for a libc internal array that is never freed. The number N can also be obtained as the upper bound for _getmaxstdio (). _getmaxstdio () returns the maximum number of open FILE objects. The sanity check in _setmaxstdio reveals the maximum number of file descriptors. This too allocates memory, but it is freed when we call _setmaxstdio with the original value. */ int orig_max_stdio = _getmaxstdio (); unsigned int bound; for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2) ; _setmaxstdio_nothrow (orig_max_stdio); dtablesize = bound; } return dtablesize; } #else # include # include # ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY # endif # ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY # endif # ifdef __CYGWIN__ /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it hits the compile-time constant hard limit of 3200. We might as well just report the hard limit. */ # define rlim_cur rlim_max # endif int getdtablesize (void) { struct rlimit lim; if (getrlimit (RLIMIT_NOFILE, &lim) == 0 && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX && lim.rlim_cur != RLIM_INFINITY && lim.rlim_cur != RLIM_SAVED_CUR && lim.rlim_cur != RLIM_SAVED_MAX) return lim.rlim_cur; return INT_MAX; } #endif gnuastro-0.5/bootstrapped/tests/getcwd-lgpl.c0000644000175000017500000000606713217200022016364 00000000000000/* Copyright (C) 2011-2017 Free Software Foundation, Inc. This file is part of gnulib. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification */ #include #include #include #include #if GNULIB_GETCWD /* Favor GPL getcwd.c if both getcwd and getcwd-lgpl modules are in use. */ typedef int dummy; #else /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Returns NULL if the directory couldn't be determined (perhaps because the absolute name was longer than PATH_MAX, or because of missing read/search permissions on parent directories) or SIZE was too small. If successful, returns BUF. If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # undef getcwd char * rpl_getcwd (char *buf, size_t size) { char *ptr; char *result; /* Handle single size operations. */ if (buf) { if (!size) { errno = EINVAL; return NULL; } return getcwd (buf, size); } if (size) { buf = malloc (size); if (!buf) { errno = ENOMEM; return NULL; } result = getcwd (buf, size); if (!result) { int saved_errno = errno; free (buf); errno = saved_errno; } return result; } /* Flexible sizing requested. Avoid over-allocation for the common case of a name that fits within a 4k page, minus some space for local variables, to be sure we don't skip over a guard page. */ { char tmp[4032]; size = sizeof tmp; ptr = getcwd (tmp, size); if (ptr) { result = strdup (ptr); if (!result) errno = ENOMEM; return result; } if (errno != ERANGE) return NULL; } /* My what a large directory name we have. */ do { size <<= 1; ptr = realloc (buf, size); if (ptr == NULL) { free (buf); errno = ENOMEM; return NULL; } buf = ptr; result = getcwd (buf, size); } while (!result && errno == ERANGE); if (!result) { int saved_errno = errno; free (buf); errno = saved_errno; } else { /* Trim to fit, if possible. */ result = realloc (buf, strlen (buf) + 1); if (!result) result = buf; } return result; } #endif gnuastro-0.5/bootstrapped/tests/ftruncate.c0000644000175000017500000001161613217200022016142 00000000000000/* ftruncate emulations for native Windows. Copyright (C) 1992-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include #if HAVE_CHSIZE /* A native Windows platform. */ # include # if _GL_WINDOWS_64_BIT_OFF_T /* Large File Support: off_t is 64-bit, but chsize() takes only a 32-bit argument. So, define a 64-bit safe SetFileSize function ourselves. */ /* Ensure that declares GetFileSizeEx. */ # undef _WIN32_WINNT # define _WIN32_WINNT _WIN32_WINNT_WIN2K /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif static BOOL SetFileSize (HANDLE h, LONGLONG size) { LARGE_INTEGER old_size; if (!GetFileSizeEx (h, &old_size)) return FALSE; if (size != old_size.QuadPart) { /* Duplicate the handle, so we are free to modify its file position. */ HANDLE curr_process = GetCurrentProcess (); HANDLE tmph; if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ h, /* SourceHandle */ curr_process, /* TargetProcessHandle */ (PHANDLE) &tmph, /* TargetHandle */ (DWORD) 0, /* DesiredAccess */ FALSE, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ return FALSE; if (size < old_size.QuadPart) { /* Reduce the size. */ LONG size_hi = (LONG) (size >> 32); if (SetFilePointer (tmph, (LONG) size, &size_hi, FILE_BEGIN) == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { CloseHandle (tmph); return FALSE; } if (!SetEndOfFile (tmph)) { CloseHandle (tmph); return FALSE; } } else { /* Increase the size by adding zero bytes at the end. */ static char zero_bytes[1024]; LONG pos_hi = 0; LONG pos_lo = SetFilePointer (tmph, (LONG) 0, &pos_hi, FILE_END); LONGLONG pos; if (pos_lo == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { CloseHandle (tmph); return FALSE; } pos = ((LONGLONG) pos_hi << 32) | (ULONGLONG) (ULONG) pos_lo; while (pos < size) { DWORD written; LONGLONG count = size - pos; if (count > sizeof (zero_bytes)) count = sizeof (zero_bytes); if (!WriteFile (tmph, zero_bytes, (DWORD) count, &written, NULL) || written == 0) { CloseHandle (tmph); return FALSE; } pos += (ULONGLONG) (ULONG) written; } } /* Close the handle. */ CloseHandle (tmph); } return TRUE; } int ftruncate (int fd, off_t length) { HANDLE handle = (HANDLE) _get_osfhandle (fd); if (handle == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (length < 0) { errno = EINVAL; return -1; } if (!SetFileSize (handle, length)) { switch (GetLastError ()) { case ERROR_ACCESS_DENIED: errno = EACCES; break; case ERROR_HANDLE_DISK_FULL: case ERROR_DISK_FULL: case ERROR_DISK_TOO_FRAGMENTED: errno = ENOSPC; break; default: errno = EIO; break; } return -1; } return 0; } # else # include # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" static int chsize_nothrow (int fd, long length) { int result; TRY_MSVC_INVAL { result = chsize (fd, length); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define chsize_nothrow chsize # endif int ftruncate (int fd, off_t length) { return chsize_nothrow (fd, length); } # endif #endif gnuastro-0.5/bootstrapped/tests/stat-w32.c0000644000175000017500000003736213217200023015542 00000000000000/* Core of implementation of fstat and stat for native Windows. Copyright (C) 2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible. */ #include #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Ensure that defines FILE_ID_INFO. */ #undef _WIN32_WINNT #define _WIN32_WINNT _WIN32_WINNT_WIN8 #include #include #include #include #include #include #include /* Specification. */ #include "stat-w32.h" #include "pathmax.h" #include "verify.h" #if _GL_WINDOWS_STAT_INODES == 2 /* GetFileInformationByHandleEx was introduced only in Windows Vista. */ typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile, FILE_INFO_BY_HANDLE_CLASS fiClass, LPVOID lpBuffer, DWORD dwBufferSize); static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL; #endif /* GetFinalPathNameByHandle was introduced only in Windows Vista. */ typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile, LPTSTR lpFilePath, DWORD lenFilePath, DWORD dwFlags); static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = LoadLibrary ("kernel32.dll"); if (kernel32 != NULL) { #if _GL_WINDOWS_STAT_INODES == 2 GetFileInformationByHandleExFunc = (GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx"); #endif GetFinalPathNameByHandleFunc = (GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA"); } initialized = TRUE; } /* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ #if _GL_WINDOWS_STAT_TIMESPEC struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft) { struct timespec result; /* FILETIME: */ unsigned long long since_1601 = ((unsigned long long) ft->dwHighDateTime << 32) | (unsigned long long) ft->dwLowDateTime; if (since_1601 == 0) { result.tv_sec = 0; result.tv_nsec = 0; } else { /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ unsigned long long since_1970 = since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; result.tv_sec = since_1970 / (unsigned long long) 10000000; result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100; } return result; } #else time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft) { /* FILETIME: */ unsigned long long since_1601 = ((unsigned long long) ft->dwHighDateTime << 32) | (unsigned long long) ft->dwLowDateTime; if (since_1601 == 0) return 0; else { /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ unsigned long long since_1970 = since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; return since_1970 / (unsigned long long) 10000000; } } #endif /* Fill *BUF with information about the file designated by H. PATH is the file name, if known, otherwise NULL. Return 0 if successful, or -1 with errno set upon failure. */ int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf) { /* GetFileType */ DWORD type = GetFileType (h); if (type == FILE_TYPE_DISK) { if (!initialized) initialize (); /* st_mode can be determined through GetFileAttributesEx or through GetFileInformationByHandle or through GetFileInformationByHandleEx with argument FileBasicInfo The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ BY_HANDLE_FILE_INFORMATION info; if (! GetFileInformationByHandle (h, &info)) goto failed; /* Test for error conditions before starting to fill *buf. */ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) { errno = EOVERFLOW; return -1; } #if _GL_WINDOWS_STAT_INODES /* st_ino can be determined through GetFileInformationByHandle as 64 bits, or through GetFileInformationByHandleEx with argument FileIdInfo as 128 bits. The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher. */ /* Experiments show that GetFileInformationByHandleEx does not provide much more information than GetFileInformationByHandle: * The dwVolumeSerialNumber from GetFileInformationByHandle is equal to the low 32 bits of the 64-bit VolumeSerialNumber from GetFileInformationByHandleEx, and is apparently sufficient for identifying the device. * The nFileIndex from GetFileInformationByHandle is equal to the low 64 bits of the 128-bit FileId from GetFileInformationByHandleEx, and the high 64 bits of this 128-bit FileId are zero. * On a FAT file system, GetFileInformationByHandleEx fails with error ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle succeeds. * On a CIFS/SMB file system, GetFileInformationByHandleEx fails with error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle succeeds. */ # if _GL_WINDOWS_STAT_INODES == 2 if (GetFileInformationByHandleExFunc != NULL) { FILE_ID_INFO id; if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id))) { buf->st_dev = id.VolumeSerialNumber; verify (sizeof (ino_t) == sizeof (id.FileId)); memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t)); goto ino_done; } else { switch (GetLastError ()) { case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */ case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */ goto fallback; default: goto failed; } } } fallback: ; /* Fallback for older Windows versions. */ buf->st_dev = info.dwVolumeSerialNumber; buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; buf->st_ino._gl_ino[1] = 0; ino_done: ; # else /* _GL_WINDOWS_STAT_INODES == 1 */ buf->st_dev = info.dwVolumeSerialNumber; buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; # endif #else /* st_ino is not wide enough for identifying a file on a device. Without st_ino, st_dev is pointless. */ buf->st_dev = 0; buf->st_ino = 0; #endif /* st_mode. */ unsigned int mode = /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) | S_IREAD_UGO | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { /* Determine whether the file is executable by looking at the file name suffix. If the file name is already known, use it. Otherwise, for non-empty files, it can be determined through GetFinalPathNameByHandle or through GetFileInformationByHandleEx with argument FileNameInfo Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { char fpath[PATH_MAX]; if (path != NULL || (GetFinalPathNameByHandleFunc != NULL && GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE) < sizeof (fpath) && (path = fpath, 1))) { const char *last_dot = NULL; const char *p; for (p = path; *p != '\0'; p++) if (*p == '.') last_dot = p; if (last_dot != NULL) { const char *suffix = last_dot + 1; if (_stricmp (suffix, "exe") == 0 || _stricmp (suffix, "bat") == 0 || _stricmp (suffix, "cmd") == 0 || _stricmp (suffix, "com") == 0) mode |= S_IEXEC_UGO; } } else /* Cannot determine file name. Pretend that it is executable. */ mode |= S_IEXEC_UGO; } } buf->st_mode = mode; /* st_nlink can be determined through GetFileInformationByHandle or through GetFileInformationByHandleEx with argument FileStandardInfo The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks); /* There's no easy way to map the Windows SID concept to an integer. */ buf->st_uid = 0; buf->st_gid = 0; /* st_rdev is irrelevant for normal files and directories. */ buf->st_rdev = 0; /* st_size can be determined through GetFileSizeEx or through GetFileAttributesEx or through GetFileInformationByHandle or through GetFileInformationByHandleEx with argument FileStandardInfo The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (sizeof (buf->st_size) <= 4) /* Range check already done above. */ buf->st_size = info.nFileSizeLow; else buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; /* st_atime, st_mtime, st_ctime can be determined through GetFileTime or through GetFileAttributesEx or through GetFileInformationByHandle or through GetFileInformationByHandleEx with argument FileBasicInfo The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ #if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); #else buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); #endif return 0; } else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE) { buf->st_dev = 0; #if _GL_WINDOWS_STAT_INODES == 2 buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; #else buf->st_ino = 0; #endif buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR); buf->st_nlink = 1; buf->st_uid = 0; buf->st_gid = 0; buf->st_rdev = 0; if (type == FILE_TYPE_PIPE) { /* PeekNamedPipe */ DWORD bytes_available; if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL)) buf->st_size = bytes_available; else buf->st_size = 0; } else buf->st_size = 0; #if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0; buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0; buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0; #else buf->st_atime = 0; buf->st_mtime = 0; buf->st_ctime = 0; #endif return 0; } else { errno = ENOENT; return -1; } failed: { DWORD error = GetLastError (); #if 0 fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error); #endif switch (error) { case ERROR_ACCESS_DENIED: case ERROR_SHARING_VIOLATION: errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; default: errno = EINVAL; break; } return -1; } } #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif gnuastro-0.5/bootstrapped/tests/fstat.c0000644000175000017500000000507513217200022015272 00000000000000/* fstat() replacement. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* If the user's config.h happens to include , let it include only the system's here, so that orig_fstat doesn't recurse to rpl_fstat. */ #define __need_system_sys_stat_h #include /* Get the original definition of fstat. It might be defined as a macro. */ #include #include #undef __need_system_sys_stat_h #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #if !defined WINDOWS_NATIVE static int orig_fstat (int fd, struct stat *buf) { return fstat (fd, buf); } #endif /* Specification. */ /* Write "sys/stat.h" here, not , otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include above. */ #include "sys/stat.h" #include "stat-time.h" #include #include #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif # include "stat-w32.h" #endif int rpl_fstat (int fd, struct stat *buf) { #if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY /* Handle the case when rpl_open() used a dummy file descriptor to work around an open() that can't normally visit directories. */ const char *name = _gl_directory_name (fd); if (name != NULL) return stat (name, buf); #endif #ifdef WINDOWS_NATIVE /* Fill the fields ourselves, because the original fstat function returns values for st_atime, st_mtime, st_ctime that depend on the current time zone. See */ HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return _gl_fstat_by_handle (h, NULL, buf); #else return stat_time_normalize (orig_fstat (fd, buf), buf); #endif } gnuastro-0.5/bootstrapped/tests/fdopen.c0000644000175000017500000000273013217200022015417 00000000000000/* Open a stream with a given file descriptor. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef fdopen #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static FILE * fdopen_nothrow (int fd, const char *mode) { FILE *result; TRY_MSVC_INVAL { result = fdopen (fd, mode); } CATCH_MSVC_INVAL { result = NULL; } DONE_MSVC_INVAL; return result; } #else # define fdopen_nothrow fdopen #endif FILE * rpl_fdopen (int fd, const char *mode) { int saved_errno = errno; FILE *fp; errno = 0; fp = fdopen_nothrow (fd, mode); if (fp == NULL) { if (errno == 0) errno = EBADF; } else errno = saved_errno; return fp; } gnuastro-0.5/bootstrapped/tests/fcntl.c0000644000175000017500000002733713217200022015264 00000000000000/* Provide file descriptor control. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Eric Blake . */ #include /* Specification. */ #include #include #include #include #include #if !HAVE_FCNTL # define rpl_fcntl fcntl #endif #undef fcntl #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif /* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ # define OPEN_MAX_MAX 0x10000 /* Duplicate OLDFD into the first available slot of at least NEWFD, which must be positive, with FLAGS determining whether the duplicate will be inheritable. */ static int dupfd (int oldfd, int newfd, int flags) { /* Mingw has no way to create an arbitrary fd. Iterate until all file descriptors less than newfd are filled up. */ HANDLE curr_process = GetCurrentProcess (); HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd); unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT]; unsigned int fds_to_close_bound = 0; int result; BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE; int mode; if (newfd < 0 || getdtablesize () <= newfd) { errno = EINVAL; return -1; } if (old_handle == INVALID_HANDLE_VALUE || (mode = setmode (oldfd, O_BINARY)) == -1) { /* oldfd is not open, or is an unassigned standard file descriptor. */ errno = EBADF; return -1; } setmode (oldfd, mode); flags |= mode; for (;;) { HANDLE new_handle; int duplicated_fd; unsigned int index; if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ old_handle, /* SourceHandle */ curr_process, /* TargetProcessHandle */ (PHANDLE) &new_handle, /* TargetHandle */ (DWORD) 0, /* DesiredAccess */ inherit, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ { switch (GetLastError ()) { case ERROR_TOO_MANY_OPEN_FILES: errno = EMFILE; break; case ERROR_INVALID_HANDLE: case ERROR_INVALID_TARGET_HANDLE: case ERROR_DIRECT_ACCESS_HANDLE: errno = EBADF; break; case ERROR_INVALID_PARAMETER: case ERROR_INVALID_FUNCTION: case ERROR_INVALID_ACCESS: errno = EINVAL; break; default: errno = EACCES; break; } result = -1; break; } duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags); if (duplicated_fd < 0) { CloseHandle (new_handle); result = -1; break; } if (newfd <= duplicated_fd) { result = duplicated_fd; break; } /* Set the bit duplicated_fd in fds_to_close[]. */ index = (unsigned int) duplicated_fd / CHAR_BIT; if (fds_to_close_bound <= index) { if (sizeof fds_to_close <= index) /* Need to increase OPEN_MAX_MAX. */ abort (); memset (fds_to_close + fds_to_close_bound, '\0', index + 1 - fds_to_close_bound); fds_to_close_bound = index + 1; } fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT); } /* Close the previous fds that turned out to be too small. */ { int saved_errno = errno; unsigned int duplicated_fd; for (duplicated_fd = 0; duplicated_fd < fds_to_close_bound * CHAR_BIT; duplicated_fd++) if ((fds_to_close[duplicated_fd / CHAR_BIT] >> (duplicated_fd % CHAR_BIT)) & 1) close (duplicated_fd); errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (oldfd, result); # endif return result; } #endif /* W32 */ #ifdef __KLIBC__ # define INCL_DOS # include static int klibc_fcntl (int fd, int action, /* arg */...) { va_list arg_ptr; int arg; struct stat sbuf; int result = -1; va_start (arg_ptr, action); arg = va_arg (arg_ptr, int); result = fcntl (fd, action, arg); /* EPERM for F_DUPFD, ENOTSUP for others */ if (result == -1 && (errno == EPERM || errno == ENOTSUP) && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { ULONG ulMode; switch (action) { case F_DUPFD: /* Find available fd */ while (fcntl (arg, F_GETFL) != -1 || errno != EBADF) arg++; result = dup2 (fd, arg); break; /* Using underlying APIs is right ? */ case F_GETFD: if (DosQueryFHState (fd, &ulMode)) break; result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0; break; case F_SETFD: if (arg & ~FD_CLOEXEC) break; if (DosQueryFHState (fd, &ulMode)) break; if (arg & FD_CLOEXEC) ulMode |= OPEN_FLAGS_NOINHERIT; else ulMode &= ~OPEN_FLAGS_NOINHERIT; /* Filter supported flags. */ ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT); if (DosSetFHState (fd, ulMode)) break; result = 0; break; case F_GETFL: result = 0; break; case F_SETFL: if (arg != 0) break; result = 0; break; default : errno = EINVAL; break; } } va_end (arg_ptr); return result; } # define fcntl klibc_fcntl #endif /* Perform the specified ACTION on the file descriptor FD, possibly using the argument ARG further described below. This replacement handles the following actions, and forwards all others on to the native fcntl. An unrecognized ACTION returns -1 with errno set to EINVAL. F_DUPFD - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will be inheritable; otherwise return -1 and set errno. F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will not be inheritable; otherwise return -1 and set errno. F_GETFD - ARG need not be present. If successful, return a non-negative value containing the descriptor flags of FD (only FD_CLOEXEC is portable, but other flags may be present); otherwise return -1 and set errno. */ int rpl_fcntl (int fd, int action, /* arg */...) { va_list arg; int result = -1; va_start (arg, action); switch (action) { #if !HAVE_FCNTL case F_DUPFD: { int target = va_arg (arg, int); result = dupfd (fd, target, 0); break; } #elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR case F_DUPFD: { int target = va_arg (arg, int); /* Detect invalid target; needed for cygwin 1.5.x. */ if (target < 0 || getdtablesize () <= target) errno = EINVAL; else { /* Haiku alpha 2 loses fd flags on original. */ int flags = fcntl (fd, F_GETFD); if (flags < 0) { result = -1; break; } result = fcntl (fd, action, target); if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) { int saved_errno = errno; close (result); result = -1; errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } break; } /* F_DUPFD */ #endif /* FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR */ case F_DUPFD_CLOEXEC: { int target = va_arg (arg, int); #if !HAVE_FCNTL result = dupfd (fd, target, O_CLOEXEC); break; #else /* HAVE_FCNTL */ /* Try the system call first, if the headers claim it exists (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we may be running with a glibc that has the macro but with an older kernel that does not support it. Cache the information on whether the system call really works, but avoid caching failure if the corresponding F_DUPFD fails for any reason. 0 = unknown, 1 = yes, -1 = no. */ static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; if (0 <= have_dupfd_cloexec) { result = fcntl (fd, action, target); if (0 <= result || errno != EINVAL) { have_dupfd_cloexec = 1; # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } else { result = rpl_fcntl (fd, F_DUPFD, target); if (result < 0) break; have_dupfd_cloexec = -1; } } else result = rpl_fcntl (fd, F_DUPFD, target); if (0 <= result && have_dupfd_cloexec == -1) { int flags = fcntl (result, F_GETFD); if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) { int saved_errno = errno; close (result); errno = saved_errno; result = -1; } } break; #endif /* HAVE_FCNTL */ } /* F_DUPFD_CLOEXEC */ #if !HAVE_FCNTL case F_GETFD: { # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ HANDLE handle = (HANDLE) _get_osfhandle (fd); DWORD flags; if (handle == INVALID_HANDLE_VALUE || GetHandleInformation (handle, &flags) == 0) errno = EBADF; else result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC; # else /* !W32 */ /* Use dup2 to reject invalid file descriptors. No way to access this information, so punt. */ if (0 <= dup2 (fd, fd)) result = 0; # endif /* !W32 */ break; } /* F_GETFD */ #endif /* !HAVE_FCNTL */ /* Implementing F_SETFD on mingw is not trivial - there is no API for changing the O_NOINHERIT bit on an fd, and merely changing the HANDLE_FLAG_INHERIT bit on the underlying handle can lead to odd state. It may be possible by duplicating the handle, using _open_osfhandle with the right flags, then using dup2 to move the duplicate onto the original, but that is not supported for now. */ default: { #if HAVE_FCNTL void *p = va_arg (arg, void *); result = fcntl (fd, action, p); #else errno = EINVAL; #endif break; } } va_end (arg); return result; } gnuastro-0.5/bootstrapped/tests/dup2.c0000644000175000017500000001161313217200022015016 00000000000000/* Duplicate an open file descriptor to a specified file descriptor. Copyright (C) 1999, 2004-2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* written by Paul Eggert */ #include /* Specification. */ #include #include #include #if HAVE_DUP2 # undef dup2 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int dup2_nothrow (int fd, int desired_fd) { int result; TRY_MSVC_INVAL { result = dup2 (fd, desired_fd); } CATCH_MSVC_INVAL { errno = EBADF; result = -1; } DONE_MSVC_INVAL; return result; } # else # define dup2_nothrow dup2 # endif static int ms_windows_dup2 (int fd, int desired_fd) { int result; /* If fd is closed, mingw hangs on dup2 (fd, fd). If fd is open, dup2 (fd, fd) returns 0, but all further attempts to use fd in future dup2 calls will hang. */ if (fd == desired_fd) { if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return fd; } /* Wine 1.0.1 return 0 when desired_fd is negative but not -1: https://bugs.winehq.org/show_bug.cgi?id=21289 */ if (desired_fd < 0) { errno = EBADF; return -1; } result = dup2_nothrow (fd, desired_fd); if (result == 0) result = desired_fd; return result; } # define dup2 ms_windows_dup2 # elif defined __KLIBC__ # include static int klibc_dup2dirfd (int fd, int desired_fd) { int tempfd; int dupfd; tempfd = open ("NUL", O_RDONLY); if (tempfd == -1) return -1; if (tempfd == desired_fd) { close (tempfd); char path[_MAX_PATH]; if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) return -1; return open(path, O_RDONLY); } dupfd = klibc_dup2dirfd (fd, desired_fd); close (tempfd); return dupfd; } static int klibc_dup2 (int fd, int desired_fd) { int dupfd; struct stat sbuf; dupfd = dup2 (fd, desired_fd); if (dupfd == -1 && errno == ENOTSUP \ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { close (desired_fd); return klibc_dup2dirfd (fd, desired_fd); } return dupfd; } # define dup2 klibc_dup2 # endif int rpl_dup2 (int fd, int desired_fd) { int result; # ifdef F_GETFL /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF. On Cygwin 1.5.x, dup2 (1, 1) returns 0. On Cygwin 1.7.17, dup2 (1, -1) dumps core. On Cygwin 1.7.25, dup2 (1, 256) can dump core. On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */ # if HAVE_SETDTABLESIZE setdtablesize (desired_fd + 1); # endif if (desired_fd < 0) fd = desired_fd; if (fd == desired_fd) return fcntl (fd, F_GETFL) == -1 ? -1 : fd; # endif result = dup2 (fd, desired_fd); /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x. */ if (result == -1 && errno == EMFILE) errno = EBADF; # if REPLACE_FCHDIR if (fd != desired_fd && result != -1) result = _gl_register_dup (fd, result); # endif return result; } #else /* !HAVE_DUP2 */ /* On older platforms, dup2 did not exist. */ # ifndef F_DUPFD static int dupfd (int fd, int desired_fd) { int duplicated_fd = dup (fd); if (duplicated_fd < 0 || duplicated_fd == desired_fd) return duplicated_fd; else { int r = dupfd (fd, desired_fd); int e = errno; close (duplicated_fd); errno = e; return r; } } # endif int dup2 (int fd, int desired_fd) { int result = fcntl (fd, F_GETFL) < 0 ? -1 : fd; if (result == -1 || fd == desired_fd) return result; close (desired_fd); # ifdef F_DUPFD result = fcntl (fd, F_DUPFD, desired_fd); # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif # else result = dupfd (fd, desired_fd); # endif if (result == -1 && (errno == EMFILE || errno == EINVAL)) errno = EBADF; return result; } #endif /* !HAVE_DUP2 */ gnuastro-0.5/bootstrapped/tests/connect.c0000644000175000017500000000301613217200022015573 00000000000000/* connect.c --- wrappers for Windows connect function Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paolo Bonzini */ #include #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef connect int rpl_connect (int fd, const struct sockaddr *sockaddr, socklen_t len) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = connect (sock, sockaddr, len); if (r < 0) { /* EINPROGRESS is not returned by WinSock 2.0; for backwards compatibility, connect(2) uses EWOULDBLOCK. */ if (WSAGetLastError () == WSAEWOULDBLOCK) WSASetLastError (WSAEINPROGRESS); set_winsock_errno (); } return r; } } gnuastro-0.5/bootstrapped/tests/close.c0000644000175000017500000000277013217200022015255 00000000000000/* close replacement. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include "fd-hook.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef close #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int close_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = close (fd); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } #else # define close_nothrow close #endif /* Override close() to call into other gnulib modules. */ int rpl_close (int fd) { #if WINDOWS_SOCKETS int retval = execute_all_close_hooks (close_nothrow, fd); #else int retval = close_nothrow (fd); #endif #if REPLACE_FCHDIR if (retval >= 0) _gl_unregister_fd (fd); #endif return retval; } gnuastro-0.5/bootstrapped/tests/bind.c0000644000175000017500000000240213217200022015054 00000000000000/* bind.c --- wrappers for Windows bind function Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paolo Bonzini */ #include #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef bind int rpl_bind (int fd, const struct sockaddr *sockaddr, socklen_t len) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = bind (sock, sockaddr, len); if (r < 0) set_winsock_errno (); return r; } } gnuastro-0.5/bootstrapped/tests/accept.c0000644000175000017500000000254113217200022015403 00000000000000/* accept.c --- wrappers for Windows accept function Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paolo Bonzini */ #include #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef accept int rpl_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { SOCKET fh = accept (sock, addr, addrlen); if (fh == INVALID_SOCKET) { set_winsock_errno (); return -1; } else return SOCKET_TO_FD (fh); } } gnuastro-0.5/bootstrapped/tests/sys_socket.c0000644000175000017500000000015713217200023016334 00000000000000#include #define _GL_SYS_SOCKET_INLINE _GL_EXTERN_INLINE #include "sys/socket.h" typedef int dummy; gnuastro-0.5/bootstrapped/tests/stat-time.c0000644000175000017500000000013213217200023016046 00000000000000#include #define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE #include "stat-time.h" gnuastro-0.5/bootstrapped/tests/sockets.c0000644000175000017500000001017113217200023015616 00000000000000/* sockets.c --- wrappers for Windows socket functions Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Simon Josefsson */ #include /* Specification. */ #include "sockets.h" #if WINDOWS_SOCKETS /* This includes winsock2.h on MinGW. */ # include # include "fd-hook.h" # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif /* Get set_winsock_errno, FD_TO_SOCKET etc. */ # include "w32sock.h" static int close_fd_maybe_socket (const struct fd_hook *remaining_list, gl_close_fn primary, int fd) { /* Note about multithread-safety: There is a race condition where, between our calls to closesocket() and the primary close(), some other thread could make system calls that allocate precisely the same HANDLE value as sock; then the primary close() would call CloseHandle() on it. */ SOCKET sock; WSANETWORKEVENTS ev; /* Test whether fd refers to a socket. */ sock = FD_TO_SOCKET (fd); ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents (sock, NULL, &ev); if (ev.lNetworkEvents != 0xDEADBEEF) { /* fd refers to a socket. */ /* FIXME: other applications, like squid, use an undocumented _free_osfhnd free function. But this is not enough: The 'osfile' flags for fd also needs to be cleared, but it is hard to access it. Instead, here we just close twice the file descriptor. */ if (closesocket (sock)) { set_winsock_errno (); return -1; } else { /* This call frees the file descriptor and does a CloseHandle ((HANDLE) _get_osfhandle (fd)), which fails. */ _close (fd); return 0; } } else /* Some other type of file descriptor. */ return execute_close_hooks (remaining_list, primary, fd); } static int ioctl_fd_maybe_socket (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg) { SOCKET sock; WSANETWORKEVENTS ev; /* Test whether fd refers to a socket. */ sock = FD_TO_SOCKET (fd); ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents (sock, NULL, &ev); if (ev.lNetworkEvents != 0xDEADBEEF) { /* fd refers to a socket. */ if (ioctlsocket (sock, request, arg) < 0) { set_winsock_errno (); return -1; } else return 0; } else /* Some other type of file descriptor. */ return execute_ioctl_hooks (remaining_list, primary, fd, request, arg); } static struct fd_hook fd_sockets_hook; static int initialized_sockets_version /* = 0 */; #endif /* WINDOWS_SOCKETS */ int gl_sockets_startup (int version _GL_UNUSED) { #if WINDOWS_SOCKETS if (version > initialized_sockets_version) { WSADATA data; int err; err = WSAStartup (version, &data); if (err != 0) return 1; if (data.wVersion != version) { WSACleanup (); return 2; } if (initialized_sockets_version == 0) register_fd_hook (close_fd_maybe_socket, ioctl_fd_maybe_socket, &fd_sockets_hook); initialized_sockets_version = version; } #endif return 0; } int gl_sockets_cleanup (void) { #if WINDOWS_SOCKETS int err; initialized_sockets_version = 0; unregister_fd_hook (&fd_sockets_hook); err = WSACleanup (); if (err != 0) return 1; #endif return 0; } gnuastro-0.5/bootstrapped/tests/sockets.h0000644000175000017500000000315313217200023015625 00000000000000/* sockets.h - wrappers for Windows socket functions Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Simon Josefsson */ #ifndef SOCKETS_H #define SOCKETS_H 1 #define SOCKETS_1_0 0x0001 #define SOCKETS_1_1 0x0101 #define SOCKETS_2_0 0x0002 #define SOCKETS_2_1 0x0102 #define SOCKETS_2_2 0x0202 int gl_sockets_startup (int version) #ifndef WINDOWS_SOCKETS _GL_ATTRIBUTE_CONST #endif ; int gl_sockets_cleanup (void) #ifndef WINDOWS_SOCKETS _GL_ATTRIBUTE_CONST #endif ; /* This function is useful it you create a socket using gnulib's Winsock wrappers but needs to pass on the socket handle to some other library that only accepts sockets. */ #ifdef WINDOWS_SOCKETS # include # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif static inline SOCKET gl_fd_to_handle (int fd) { return _get_osfhandle (fd); } #else # define gl_fd_to_handle(x) (x) #endif /* WINDOWS_SOCKETS */ #endif /* SOCKETS_H */ gnuastro-0.5/bootstrapped/tests/sig-handler.c0000644000175000017500000000013213217200023016334 00000000000000#include #define SIG_HANDLER_INLINE _GL_EXTERN_INLINE #include "sig-handler.h" gnuastro-0.5/bootstrapped/tests/malloca.c0000644000175000017500000001223213217200023015553 00000000000000/* Safe automatic memory allocation. Copyright (C) 2003, 2006-2007, 2009-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #define _GL_USE_STDLIB_ALLOC 1 #include /* Specification. */ #include "malloca.h" #include #include "verify.h" /* Silence a warning from clang's MemorySanitizer. */ #if defined __has_feature # if __has_feature(memory_sanitizer) # define NO_SANITIZE_MEMORY __attribute__((no_sanitize("memory"))) # endif #endif #ifndef NO_SANITIZE_MEMORY # define NO_SANITIZE_MEMORY #endif /* The speed critical point in this file is freea() applied to an alloca() result: it must be fast, to match the speed of alloca(). The speed of mmalloca() and freea() in the other case are not critical, because they are only invoked for big memory sizes. */ #if HAVE_ALLOCA /* Store the mmalloca() results in a hash table. This is needed to reliably distinguish a mmalloca() result and an alloca() result. Although it is possible that the same pointer is returned by alloca() and by mmalloca() at different times in the same application, it does not lead to a bug in freea(), because: - Before a pointer returned by alloca() can point into malloc()ed memory, the function must return, and once this has happened the programmer must not call freea() on it anyway. - Before a pointer returned by mmalloca() can point into the stack, it must be freed. The only function that can free it is freea(), and when freea() frees it, it also removes it from the hash table. */ #define MAGIC_NUMBER 0x1415fb4a #define MAGIC_SIZE sizeof (int) /* This is how the header info would look like without any alignment considerations. */ struct preliminary_header { void *next; int magic; }; /* But the header's size must be a multiple of sa_alignment_max. */ #define HEADER_SIZE \ (((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max) union header { void *next; struct { char room[HEADER_SIZE - MAGIC_SIZE]; int word; } magic; }; verify (HEADER_SIZE == sizeof (union header)); /* We make the hash table quite big, so that during lookups the probability of empty hash buckets is quite high. There is no need to make the hash table resizable, because when the hash table gets filled so much that the lookup becomes slow, it means that the application has memory leaks. */ #define HASH_TABLE_SIZE 257 static void * mmalloca_results[HASH_TABLE_SIZE]; #endif void * mmalloca (size_t n) { #if HAVE_ALLOCA /* Allocate one more word, that serves as an indicator for malloc()ed memory, so that freea() of an alloca() result is fast. */ size_t nplus = n + HEADER_SIZE; if (nplus >= n) { void *p = malloc (nplus); if (p != NULL) { size_t slot; union header *h = p; p = h + 1; /* Put a magic number into the indicator word. */ h->magic.word = MAGIC_NUMBER; /* Enter p into the hash table. */ slot = (uintptr_t) p % HASH_TABLE_SIZE; h->next = mmalloca_results[slot]; mmalloca_results[slot] = p; return p; } } /* Out of memory. */ return NULL; #else # if !MALLOC_0_IS_NONNULL if (n == 0) n = 1; # endif return malloc (n); #endif } #if HAVE_ALLOCA void NO_SANITIZE_MEMORY freea (void *p) { /* mmalloca() may have returned NULL. */ if (p != NULL) { /* Attempt to quickly distinguish the mmalloca() result - which has a magic indicator word - and the alloca() result - which has an uninitialized indicator word. It is for this test that sa_increment additional bytes are allocated in the alloca() case. */ if (((int *) p)[-1] == MAGIC_NUMBER) { /* Looks like a mmalloca() result. To see whether it really is one, perform a lookup in the hash table. */ size_t slot = (uintptr_t) p % HASH_TABLE_SIZE; void **chain = &mmalloca_results[slot]; for (; *chain != NULL;) { union header *h = p; if (*chain == p) { /* Found it. Remove it from the hash table and free it. */ union header *p_begin = h - 1; *chain = p_begin->next; free (p_begin); return; } h = *chain; chain = &h[-1].next; } } /* At this point, we know it was not a mmalloca() result. */ } } #endif gnuastro-0.5/bootstrapped/tests/localename.c0000644000175000017500000025136213217200023016254 00000000000000/* Determine name of the currently selected locale. Copyright (C) 1995-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Ulrich Drepper , 1995. */ /* Native Windows code written by Tor Lillqvist . */ /* Mac OS X code written by Bruno Haible . */ #include /* Specification. */ #ifdef IN_LIBINTL # include "gettextP.h" #else # include "localename.h" #endif #include #include #include #include #include #include "flexmember.h" #if HAVE_USELOCALE /* Mac OS X 10.5 defines the locale_t type in . */ # if defined __APPLE__ && defined __MACH__ # include # endif # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || defined __CYGWIN__ # include # endif # if !defined IN_LIBINTL # include "glthread/lock.h" # endif # if defined __sun && HAVE_GETLOCALENAME_L /* Solaris >= 12. */ extern char * getlocalename_l(int, locale_t); # endif #endif #if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE # include # if HAVE_CFLOCALECOPYCURRENT # include # elif HAVE_CFPREFERENCESCOPYAPPVALUE # include # endif #endif #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ # define WINDOWS_NATIVE # if !defined IN_LIBINTL # include "glthread/lock.h" # endif #endif #if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ # define WIN32_LEAN_AND_MEAN # include # include /* List of language codes, sorted by value: 0x01 LANG_ARABIC 0x02 LANG_BULGARIAN 0x03 LANG_CATALAN 0x04 LANG_CHINESE 0x05 LANG_CZECH 0x06 LANG_DANISH 0x07 LANG_GERMAN 0x08 LANG_GREEK 0x09 LANG_ENGLISH 0x0a LANG_SPANISH 0x0b LANG_FINNISH 0x0c LANG_FRENCH 0x0d LANG_HEBREW 0x0e LANG_HUNGARIAN 0x0f LANG_ICELANDIC 0x10 LANG_ITALIAN 0x11 LANG_JAPANESE 0x12 LANG_KOREAN 0x13 LANG_DUTCH 0x14 LANG_NORWEGIAN 0x15 LANG_POLISH 0x16 LANG_PORTUGUESE 0x17 LANG_ROMANSH 0x18 LANG_ROMANIAN 0x19 LANG_RUSSIAN 0x1a LANG_CROATIAN == LANG_SERBIAN 0x1b LANG_SLOVAK 0x1c LANG_ALBANIAN 0x1d LANG_SWEDISH 0x1e LANG_THAI 0x1f LANG_TURKISH 0x20 LANG_URDU 0x21 LANG_INDONESIAN 0x22 LANG_UKRAINIAN 0x23 LANG_BELARUSIAN 0x24 LANG_SLOVENIAN 0x25 LANG_ESTONIAN 0x26 LANG_LATVIAN 0x27 LANG_LITHUANIAN 0x28 LANG_TAJIK 0x29 LANG_FARSI 0x2a LANG_VIETNAMESE 0x2b LANG_ARMENIAN 0x2c LANG_AZERI 0x2d LANG_BASQUE 0x2e LANG_SORBIAN 0x2f LANG_MACEDONIAN 0x30 LANG_SUTU 0x31 LANG_TSONGA 0x32 LANG_TSWANA 0x33 LANG_VENDA 0x34 LANG_XHOSA 0x35 LANG_ZULU 0x36 LANG_AFRIKAANS 0x37 LANG_GEORGIAN 0x38 LANG_FAEROESE 0x39 LANG_HINDI 0x3a LANG_MALTESE 0x3b LANG_SAMI 0x3c LANG_GAELIC 0x3d LANG_YIDDISH 0x3e LANG_MALAY 0x3f LANG_KAZAK 0x40 LANG_KYRGYZ 0x41 LANG_SWAHILI 0x42 LANG_TURKMEN 0x43 LANG_UZBEK 0x44 LANG_TATAR 0x45 LANG_BENGALI 0x46 LANG_PUNJABI 0x47 LANG_GUJARATI 0x48 LANG_ORIYA 0x49 LANG_TAMIL 0x4a LANG_TELUGU 0x4b LANG_KANNADA 0x4c LANG_MALAYALAM 0x4d LANG_ASSAMESE 0x4e LANG_MARATHI 0x4f LANG_SANSKRIT 0x50 LANG_MONGOLIAN 0x51 LANG_TIBETAN 0x52 LANG_WELSH 0x53 LANG_CAMBODIAN 0x54 LANG_LAO 0x55 LANG_BURMESE 0x56 LANG_GALICIAN 0x57 LANG_KONKANI 0x58 LANG_MANIPURI 0x59 LANG_SINDHI 0x5a LANG_SYRIAC 0x5b LANG_SINHALESE 0x5c LANG_CHEROKEE 0x5d LANG_INUKTITUT 0x5e LANG_AMHARIC 0x5f LANG_TAMAZIGHT 0x60 LANG_KASHMIRI 0x61 LANG_NEPALI 0x62 LANG_FRISIAN 0x63 LANG_PASHTO 0x64 LANG_TAGALOG 0x65 LANG_DIVEHI 0x66 LANG_EDO 0x67 LANG_FULFULDE 0x68 LANG_HAUSA 0x69 LANG_IBIBIO 0x6a LANG_YORUBA 0x6d LANG_BASHKIR 0x6e LANG_LUXEMBOURGISH 0x6f LANG_GREENLANDIC 0x70 LANG_IGBO 0x71 LANG_KANURI 0x72 LANG_OROMO 0x73 LANG_TIGRINYA 0x74 LANG_GUARANI 0x75 LANG_HAWAIIAN 0x76 LANG_LATIN 0x77 LANG_SOMALI 0x78 LANG_YI 0x79 LANG_PAPIAMENTU 0x7a LANG_MAPUDUNGUN 0x7c LANG_MOHAWK 0x7e LANG_BRETON 0x82 LANG_OCCITAN 0x83 LANG_CORSICAN 0x84 LANG_ALSATIAN 0x85 LANG_YAKUT 0x86 LANG_KICHE 0x87 LANG_KINYARWANDA 0x88 LANG_WOLOF 0x8c LANG_DARI 0x91 LANG_SCOTTISH_GAELIC */ /* Mingw headers don't have latest language and sublanguage codes. */ # ifndef LANG_AFRIKAANS # define LANG_AFRIKAANS 0x36 # endif # ifndef LANG_ALBANIAN # define LANG_ALBANIAN 0x1c # endif # ifndef LANG_ALSATIAN # define LANG_ALSATIAN 0x84 # endif # ifndef LANG_AMHARIC # define LANG_AMHARIC 0x5e # endif # ifndef LANG_ARABIC # define LANG_ARABIC 0x01 # endif # ifndef LANG_ARMENIAN # define LANG_ARMENIAN 0x2b # endif # ifndef LANG_ASSAMESE # define LANG_ASSAMESE 0x4d # endif # ifndef LANG_AZERI # define LANG_AZERI 0x2c # endif # ifndef LANG_BASHKIR # define LANG_BASHKIR 0x6d # endif # ifndef LANG_BASQUE # define LANG_BASQUE 0x2d # endif # ifndef LANG_BELARUSIAN # define LANG_BELARUSIAN 0x23 # endif # ifndef LANG_BENGALI # define LANG_BENGALI 0x45 # endif # ifndef LANG_BRETON # define LANG_BRETON 0x7e # endif # ifndef LANG_BURMESE # define LANG_BURMESE 0x55 # endif # ifndef LANG_CAMBODIAN # define LANG_CAMBODIAN 0x53 # endif # ifndef LANG_CATALAN # define LANG_CATALAN 0x03 # endif # ifndef LANG_CHEROKEE # define LANG_CHEROKEE 0x5c # endif # ifndef LANG_CORSICAN # define LANG_CORSICAN 0x83 # endif # ifndef LANG_DARI # define LANG_DARI 0x8c # endif # ifndef LANG_DIVEHI # define LANG_DIVEHI 0x65 # endif # ifndef LANG_EDO # define LANG_EDO 0x66 # endif # ifndef LANG_ESTONIAN # define LANG_ESTONIAN 0x25 # endif # ifndef LANG_FAEROESE # define LANG_FAEROESE 0x38 # endif # ifndef LANG_FARSI # define LANG_FARSI 0x29 # endif # ifndef LANG_FRISIAN # define LANG_FRISIAN 0x62 # endif # ifndef LANG_FULFULDE # define LANG_FULFULDE 0x67 # endif # ifndef LANG_GAELIC # define LANG_GAELIC 0x3c # endif # ifndef LANG_GALICIAN # define LANG_GALICIAN 0x56 # endif # ifndef LANG_GEORGIAN # define LANG_GEORGIAN 0x37 # endif # ifndef LANG_GREENLANDIC # define LANG_GREENLANDIC 0x6f # endif # ifndef LANG_GUARANI # define LANG_GUARANI 0x74 # endif # ifndef LANG_GUJARATI # define LANG_GUJARATI 0x47 # endif # ifndef LANG_HAUSA # define LANG_HAUSA 0x68 # endif # ifndef LANG_HAWAIIAN # define LANG_HAWAIIAN 0x75 # endif # ifndef LANG_HEBREW # define LANG_HEBREW 0x0d # endif # ifndef LANG_HINDI # define LANG_HINDI 0x39 # endif # ifndef LANG_IBIBIO # define LANG_IBIBIO 0x69 # endif # ifndef LANG_IGBO # define LANG_IGBO 0x70 # endif # ifndef LANG_INDONESIAN # define LANG_INDONESIAN 0x21 # endif # ifndef LANG_INUKTITUT # define LANG_INUKTITUT 0x5d # endif # ifndef LANG_KANNADA # define LANG_KANNADA 0x4b # endif # ifndef LANG_KANURI # define LANG_KANURI 0x71 # endif # ifndef LANG_KASHMIRI # define LANG_KASHMIRI 0x60 # endif # ifndef LANG_KAZAK # define LANG_KAZAK 0x3f # endif # ifndef LANG_KICHE # define LANG_KICHE 0x86 # endif # ifndef LANG_KINYARWANDA # define LANG_KINYARWANDA 0x87 # endif # ifndef LANG_KONKANI # define LANG_KONKANI 0x57 # endif # ifndef LANG_KYRGYZ # define LANG_KYRGYZ 0x40 # endif # ifndef LANG_LAO # define LANG_LAO 0x54 # endif # ifndef LANG_LATIN # define LANG_LATIN 0x76 # endif # ifndef LANG_LATVIAN # define LANG_LATVIAN 0x26 # endif # ifndef LANG_LITHUANIAN # define LANG_LITHUANIAN 0x27 # endif # ifndef LANG_LUXEMBOURGISH # define LANG_LUXEMBOURGISH 0x6e # endif # ifndef LANG_MACEDONIAN # define LANG_MACEDONIAN 0x2f # endif # ifndef LANG_MALAY # define LANG_MALAY 0x3e # endif # ifndef LANG_MALAYALAM # define LANG_MALAYALAM 0x4c # endif # ifndef LANG_MALTESE # define LANG_MALTESE 0x3a # endif # ifndef LANG_MANIPURI # define LANG_MANIPURI 0x58 # endif # ifndef LANG_MAORI # define LANG_MAORI 0x81 # endif # ifndef LANG_MAPUDUNGUN # define LANG_MAPUDUNGUN 0x7a # endif # ifndef LANG_MARATHI # define LANG_MARATHI 0x4e # endif # ifndef LANG_MOHAWK # define LANG_MOHAWK 0x7c # endif # ifndef LANG_MONGOLIAN # define LANG_MONGOLIAN 0x50 # endif # ifndef LANG_NEPALI # define LANG_NEPALI 0x61 # endif # ifndef LANG_OCCITAN # define LANG_OCCITAN 0x82 # endif # ifndef LANG_ORIYA # define LANG_ORIYA 0x48 # endif # ifndef LANG_OROMO # define LANG_OROMO 0x72 # endif # ifndef LANG_PAPIAMENTU # define LANG_PAPIAMENTU 0x79 # endif # ifndef LANG_PASHTO # define LANG_PASHTO 0x63 # endif # ifndef LANG_PUNJABI # define LANG_PUNJABI 0x46 # endif # ifndef LANG_QUECHUA # define LANG_QUECHUA 0x6b # endif # ifndef LANG_ROMANSH # define LANG_ROMANSH 0x17 # endif # ifndef LANG_SAMI # define LANG_SAMI 0x3b # endif # ifndef LANG_SANSKRIT # define LANG_SANSKRIT 0x4f # endif # ifndef LANG_SCOTTISH_GAELIC # define LANG_SCOTTISH_GAELIC 0x91 # endif # ifndef LANG_SERBIAN # define LANG_SERBIAN 0x1a # endif # ifndef LANG_SINDHI # define LANG_SINDHI 0x59 # endif # ifndef LANG_SINHALESE # define LANG_SINHALESE 0x5b # endif # ifndef LANG_SLOVAK # define LANG_SLOVAK 0x1b # endif # ifndef LANG_SOMALI # define LANG_SOMALI 0x77 # endif # ifndef LANG_SORBIAN # define LANG_SORBIAN 0x2e # endif # ifndef LANG_SOTHO # define LANG_SOTHO 0x6c # endif # ifndef LANG_SUTU # define LANG_SUTU 0x30 # endif # ifndef LANG_SWAHILI # define LANG_SWAHILI 0x41 # endif # ifndef LANG_SYRIAC # define LANG_SYRIAC 0x5a # endif # ifndef LANG_TAGALOG # define LANG_TAGALOG 0x64 # endif # ifndef LANG_TAJIK # define LANG_TAJIK 0x28 # endif # ifndef LANG_TAMAZIGHT # define LANG_TAMAZIGHT 0x5f # endif # ifndef LANG_TAMIL # define LANG_TAMIL 0x49 # endif # ifndef LANG_TATAR # define LANG_TATAR 0x44 # endif # ifndef LANG_TELUGU # define LANG_TELUGU 0x4a # endif # ifndef LANG_THAI # define LANG_THAI 0x1e # endif # ifndef LANG_TIBETAN # define LANG_TIBETAN 0x51 # endif # ifndef LANG_TIGRINYA # define LANG_TIGRINYA 0x73 # endif # ifndef LANG_TSONGA # define LANG_TSONGA 0x31 # endif # ifndef LANG_TSWANA # define LANG_TSWANA 0x32 # endif # ifndef LANG_TURKMEN # define LANG_TURKMEN 0x42 # endif # ifndef LANG_UIGHUR # define LANG_UIGHUR 0x80 # endif # ifndef LANG_UKRAINIAN # define LANG_UKRAINIAN 0x22 # endif # ifndef LANG_URDU # define LANG_URDU 0x20 # endif # ifndef LANG_UZBEK # define LANG_UZBEK 0x43 # endif # ifndef LANG_VENDA # define LANG_VENDA 0x33 # endif # ifndef LANG_VIETNAMESE # define LANG_VIETNAMESE 0x2a # endif # ifndef LANG_WELSH # define LANG_WELSH 0x52 # endif # ifndef LANG_WOLOF # define LANG_WOLOF 0x88 # endif # ifndef LANG_XHOSA # define LANG_XHOSA 0x34 # endif # ifndef LANG_YAKUT # define LANG_YAKUT 0x85 # endif # ifndef LANG_YI # define LANG_YI 0x78 # endif # ifndef LANG_YIDDISH # define LANG_YIDDISH 0x3d # endif # ifndef LANG_YORUBA # define LANG_YORUBA 0x6a # endif # ifndef LANG_ZULU # define LANG_ZULU 0x35 # endif # ifndef SUBLANG_AFRIKAANS_SOUTH_AFRICA # define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_ALBANIAN_ALBANIA # define SUBLANG_ALBANIAN_ALBANIA 0x01 # endif # ifndef SUBLANG_ALSATIAN_FRANCE # define SUBLANG_ALSATIAN_FRANCE 0x01 # endif # ifndef SUBLANG_AMHARIC_ETHIOPIA # define SUBLANG_AMHARIC_ETHIOPIA 0x01 # endif # ifndef SUBLANG_ARABIC_SAUDI_ARABIA # define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 # endif # ifndef SUBLANG_ARABIC_IRAQ # define SUBLANG_ARABIC_IRAQ 0x02 # endif # ifndef SUBLANG_ARABIC_EGYPT # define SUBLANG_ARABIC_EGYPT 0x03 # endif # ifndef SUBLANG_ARABIC_LIBYA # define SUBLANG_ARABIC_LIBYA 0x04 # endif # ifndef SUBLANG_ARABIC_ALGERIA # define SUBLANG_ARABIC_ALGERIA 0x05 # endif # ifndef SUBLANG_ARABIC_MOROCCO # define SUBLANG_ARABIC_MOROCCO 0x06 # endif # ifndef SUBLANG_ARABIC_TUNISIA # define SUBLANG_ARABIC_TUNISIA 0x07 # endif # ifndef SUBLANG_ARABIC_OMAN # define SUBLANG_ARABIC_OMAN 0x08 # endif # ifndef SUBLANG_ARABIC_YEMEN # define SUBLANG_ARABIC_YEMEN 0x09 # endif # ifndef SUBLANG_ARABIC_SYRIA # define SUBLANG_ARABIC_SYRIA 0x0a # endif # ifndef SUBLANG_ARABIC_JORDAN # define SUBLANG_ARABIC_JORDAN 0x0b # endif # ifndef SUBLANG_ARABIC_LEBANON # define SUBLANG_ARABIC_LEBANON 0x0c # endif # ifndef SUBLANG_ARABIC_KUWAIT # define SUBLANG_ARABIC_KUWAIT 0x0d # endif # ifndef SUBLANG_ARABIC_UAE # define SUBLANG_ARABIC_UAE 0x0e # endif # ifndef SUBLANG_ARABIC_BAHRAIN # define SUBLANG_ARABIC_BAHRAIN 0x0f # endif # ifndef SUBLANG_ARABIC_QATAR # define SUBLANG_ARABIC_QATAR 0x10 # endif # ifndef SUBLANG_ARMENIAN_ARMENIA # define SUBLANG_ARMENIAN_ARMENIA 0x01 # endif # ifndef SUBLANG_ASSAMESE_INDIA # define SUBLANG_ASSAMESE_INDIA 0x01 # endif # ifndef SUBLANG_AZERI_LATIN # define SUBLANG_AZERI_LATIN 0x01 # endif # ifndef SUBLANG_AZERI_CYRILLIC # define SUBLANG_AZERI_CYRILLIC 0x02 # endif # ifndef SUBLANG_BASHKIR_RUSSIA # define SUBLANG_BASHKIR_RUSSIA 0x01 # endif # ifndef SUBLANG_BASQUE_BASQUE # define SUBLANG_BASQUE_BASQUE 0x01 # endif # ifndef SUBLANG_BELARUSIAN_BELARUS # define SUBLANG_BELARUSIAN_BELARUS 0x01 # endif # ifndef SUBLANG_BENGALI_INDIA # define SUBLANG_BENGALI_INDIA 0x01 # endif # ifndef SUBLANG_BENGALI_BANGLADESH # define SUBLANG_BENGALI_BANGLADESH 0x02 # endif # ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN # define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05 # endif # ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC # define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08 # endif # ifndef SUBLANG_BRETON_FRANCE # define SUBLANG_BRETON_FRANCE 0x01 # endif # ifndef SUBLANG_BULGARIAN_BULGARIA # define SUBLANG_BULGARIAN_BULGARIA 0x01 # endif # ifndef SUBLANG_CAMBODIAN_CAMBODIA # define SUBLANG_CAMBODIAN_CAMBODIA 0x01 # endif # ifndef SUBLANG_CATALAN_SPAIN # define SUBLANG_CATALAN_SPAIN 0x01 # endif # ifndef SUBLANG_CORSICAN_FRANCE # define SUBLANG_CORSICAN_FRANCE 0x01 # endif # ifndef SUBLANG_CROATIAN_CROATIA # define SUBLANG_CROATIAN_CROATIA 0x01 # endif # ifndef SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN # define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04 # endif # ifndef SUBLANG_CHINESE_MACAU # define SUBLANG_CHINESE_MACAU 0x05 # endif # ifndef SUBLANG_CZECH_CZECH_REPUBLIC # define SUBLANG_CZECH_CZECH_REPUBLIC 0x01 # endif # ifndef SUBLANG_DANISH_DENMARK # define SUBLANG_DANISH_DENMARK 0x01 # endif # ifndef SUBLANG_DARI_AFGHANISTAN # define SUBLANG_DARI_AFGHANISTAN 0x01 # endif # ifndef SUBLANG_DIVEHI_MALDIVES # define SUBLANG_DIVEHI_MALDIVES 0x01 # endif # ifndef SUBLANG_DUTCH_SURINAM # define SUBLANG_DUTCH_SURINAM 0x03 # endif # ifndef SUBLANG_ENGLISH_SOUTH_AFRICA # define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 # endif # ifndef SUBLANG_ENGLISH_JAMAICA # define SUBLANG_ENGLISH_JAMAICA 0x08 # endif # ifndef SUBLANG_ENGLISH_CARIBBEAN # define SUBLANG_ENGLISH_CARIBBEAN 0x09 # endif # ifndef SUBLANG_ENGLISH_BELIZE # define SUBLANG_ENGLISH_BELIZE 0x0a # endif # ifndef SUBLANG_ENGLISH_TRINIDAD # define SUBLANG_ENGLISH_TRINIDAD 0x0b # endif # ifndef SUBLANG_ENGLISH_ZIMBABWE # define SUBLANG_ENGLISH_ZIMBABWE 0x0c # endif # ifndef SUBLANG_ENGLISH_PHILIPPINES # define SUBLANG_ENGLISH_PHILIPPINES 0x0d # endif # ifndef SUBLANG_ENGLISH_INDONESIA # define SUBLANG_ENGLISH_INDONESIA 0x0e # endif # ifndef SUBLANG_ENGLISH_HONGKONG # define SUBLANG_ENGLISH_HONGKONG 0x0f # endif # ifndef SUBLANG_ENGLISH_INDIA # define SUBLANG_ENGLISH_INDIA 0x10 # endif # ifndef SUBLANG_ENGLISH_MALAYSIA # define SUBLANG_ENGLISH_MALAYSIA 0x11 # endif # ifndef SUBLANG_ENGLISH_SINGAPORE # define SUBLANG_ENGLISH_SINGAPORE 0x12 # endif # ifndef SUBLANG_ESTONIAN_ESTONIA # define SUBLANG_ESTONIAN_ESTONIA 0x01 # endif # ifndef SUBLANG_FAEROESE_FAROE_ISLANDS # define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01 # endif # ifndef SUBLANG_FARSI_IRAN # define SUBLANG_FARSI_IRAN 0x01 # endif # ifndef SUBLANG_FINNISH_FINLAND # define SUBLANG_FINNISH_FINLAND 0x01 # endif # ifndef SUBLANG_FRENCH_LUXEMBOURG # define SUBLANG_FRENCH_LUXEMBOURG 0x05 # endif # ifndef SUBLANG_FRENCH_MONACO # define SUBLANG_FRENCH_MONACO 0x06 # endif # ifndef SUBLANG_FRENCH_WESTINDIES # define SUBLANG_FRENCH_WESTINDIES 0x07 # endif # ifndef SUBLANG_FRENCH_REUNION # define SUBLANG_FRENCH_REUNION 0x08 # endif # ifndef SUBLANG_FRENCH_CONGO # define SUBLANG_FRENCH_CONGO 0x09 # endif # ifndef SUBLANG_FRENCH_SENEGAL # define SUBLANG_FRENCH_SENEGAL 0x0a # endif # ifndef SUBLANG_FRENCH_CAMEROON # define SUBLANG_FRENCH_CAMEROON 0x0b # endif # ifndef SUBLANG_FRENCH_COTEDIVOIRE # define SUBLANG_FRENCH_COTEDIVOIRE 0x0c # endif # ifndef SUBLANG_FRENCH_MALI # define SUBLANG_FRENCH_MALI 0x0d # endif # ifndef SUBLANG_FRENCH_MOROCCO # define SUBLANG_FRENCH_MOROCCO 0x0e # endif # ifndef SUBLANG_FRENCH_HAITI # define SUBLANG_FRENCH_HAITI 0x0f # endif # ifndef SUBLANG_FRISIAN_NETHERLANDS # define SUBLANG_FRISIAN_NETHERLANDS 0x01 # endif # ifndef SUBLANG_GALICIAN_SPAIN # define SUBLANG_GALICIAN_SPAIN 0x01 # endif # ifndef SUBLANG_GEORGIAN_GEORGIA # define SUBLANG_GEORGIAN_GEORGIA 0x01 # endif # ifndef SUBLANG_GERMAN_LUXEMBOURG # define SUBLANG_GERMAN_LUXEMBOURG 0x04 # endif # ifndef SUBLANG_GERMAN_LIECHTENSTEIN # define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 # endif # ifndef SUBLANG_GREEK_GREECE # define SUBLANG_GREEK_GREECE 0x01 # endif # ifndef SUBLANG_GREENLANDIC_GREENLAND # define SUBLANG_GREENLANDIC_GREENLAND 0x01 # endif # ifndef SUBLANG_GUJARATI_INDIA # define SUBLANG_GUJARATI_INDIA 0x01 # endif # ifndef SUBLANG_HAUSA_NIGERIA_LATIN # define SUBLANG_HAUSA_NIGERIA_LATIN 0x01 # endif # ifndef SUBLANG_HEBREW_ISRAEL # define SUBLANG_HEBREW_ISRAEL 0x01 # endif # ifndef SUBLANG_HINDI_INDIA # define SUBLANG_HINDI_INDIA 0x01 # endif # ifndef SUBLANG_HUNGARIAN_HUNGARY # define SUBLANG_HUNGARIAN_HUNGARY 0x01 # endif # ifndef SUBLANG_ICELANDIC_ICELAND # define SUBLANG_ICELANDIC_ICELAND 0x01 # endif # ifndef SUBLANG_IGBO_NIGERIA # define SUBLANG_IGBO_NIGERIA 0x01 # endif # ifndef SUBLANG_INDONESIAN_INDONESIA # define SUBLANG_INDONESIAN_INDONESIA 0x01 # endif # ifndef SUBLANG_INUKTITUT_CANADA # define SUBLANG_INUKTITUT_CANADA 0x01 # endif # undef SUBLANG_INUKTITUT_CANADA_LATIN # define SUBLANG_INUKTITUT_CANADA_LATIN 0x02 # undef SUBLANG_IRISH_IRELAND # define SUBLANG_IRISH_IRELAND 0x02 # ifndef SUBLANG_JAPANESE_JAPAN # define SUBLANG_JAPANESE_JAPAN 0x01 # endif # ifndef SUBLANG_KANNADA_INDIA # define SUBLANG_KANNADA_INDIA 0x01 # endif # ifndef SUBLANG_KASHMIRI_INDIA # define SUBLANG_KASHMIRI_INDIA 0x02 # endif # ifndef SUBLANG_KAZAK_KAZAKHSTAN # define SUBLANG_KAZAK_KAZAKHSTAN 0x01 # endif # ifndef SUBLANG_KICHE_GUATEMALA # define SUBLANG_KICHE_GUATEMALA 0x01 # endif # ifndef SUBLANG_KINYARWANDA_RWANDA # define SUBLANG_KINYARWANDA_RWANDA 0x01 # endif # ifndef SUBLANG_KONKANI_INDIA # define SUBLANG_KONKANI_INDIA 0x01 # endif # ifndef SUBLANG_KYRGYZ_KYRGYZSTAN # define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01 # endif # ifndef SUBLANG_LAO_LAOS # define SUBLANG_LAO_LAOS 0x01 # endif # ifndef SUBLANG_LATVIAN_LATVIA # define SUBLANG_LATVIAN_LATVIA 0x01 # endif # ifndef SUBLANG_LITHUANIAN_LITHUANIA # define SUBLANG_LITHUANIAN_LITHUANIA 0x01 # endif # undef SUBLANG_LOWER_SORBIAN_GERMANY # define SUBLANG_LOWER_SORBIAN_GERMANY 0x02 # ifndef SUBLANG_LUXEMBOURGISH_LUXEMBOURG # define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01 # endif # ifndef SUBLANG_MACEDONIAN_MACEDONIA # define SUBLANG_MACEDONIAN_MACEDONIA 0x01 # endif # ifndef SUBLANG_MALAY_MALAYSIA # define SUBLANG_MALAY_MALAYSIA 0x01 # endif # ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM # define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 # endif # ifndef SUBLANG_MALAYALAM_INDIA # define SUBLANG_MALAYALAM_INDIA 0x01 # endif # ifndef SUBLANG_MALTESE_MALTA # define SUBLANG_MALTESE_MALTA 0x01 # endif # ifndef SUBLANG_MAORI_NEW_ZEALAND # define SUBLANG_MAORI_NEW_ZEALAND 0x01 # endif # ifndef SUBLANG_MAPUDUNGUN_CHILE # define SUBLANG_MAPUDUNGUN_CHILE 0x01 # endif # ifndef SUBLANG_MARATHI_INDIA # define SUBLANG_MARATHI_INDIA 0x01 # endif # ifndef SUBLANG_MOHAWK_CANADA # define SUBLANG_MOHAWK_CANADA 0x01 # endif # ifndef SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA # define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01 # endif # ifndef SUBLANG_MONGOLIAN_PRC # define SUBLANG_MONGOLIAN_PRC 0x02 # endif # ifndef SUBLANG_NEPALI_NEPAL # define SUBLANG_NEPALI_NEPAL 0x01 # endif # ifndef SUBLANG_NEPALI_INDIA # define SUBLANG_NEPALI_INDIA 0x02 # endif # ifndef SUBLANG_OCCITAN_FRANCE # define SUBLANG_OCCITAN_FRANCE 0x01 # endif # ifndef SUBLANG_ORIYA_INDIA # define SUBLANG_ORIYA_INDIA 0x01 # endif # ifndef SUBLANG_PASHTO_AFGHANISTAN # define SUBLANG_PASHTO_AFGHANISTAN 0x01 # endif # ifndef SUBLANG_POLISH_POLAND # define SUBLANG_POLISH_POLAND 0x01 # endif # ifndef SUBLANG_PUNJABI_INDIA # define SUBLANG_PUNJABI_INDIA 0x01 # endif # ifndef SUBLANG_PUNJABI_PAKISTAN # define SUBLANG_PUNJABI_PAKISTAN 0x02 # endif # ifndef SUBLANG_QUECHUA_BOLIVIA # define SUBLANG_QUECHUA_BOLIVIA 0x01 # endif # ifndef SUBLANG_QUECHUA_ECUADOR # define SUBLANG_QUECHUA_ECUADOR 0x02 # endif # ifndef SUBLANG_QUECHUA_PERU # define SUBLANG_QUECHUA_PERU 0x03 # endif # ifndef SUBLANG_ROMANIAN_ROMANIA # define SUBLANG_ROMANIAN_ROMANIA 0x01 # endif # ifndef SUBLANG_ROMANIAN_MOLDOVA # define SUBLANG_ROMANIAN_MOLDOVA 0x02 # endif # ifndef SUBLANG_ROMANSH_SWITZERLAND # define SUBLANG_ROMANSH_SWITZERLAND 0x01 # endif # ifndef SUBLANG_RUSSIAN_RUSSIA # define SUBLANG_RUSSIAN_RUSSIA 0x01 # endif # ifndef SUBLANG_RUSSIAN_MOLDAVIA # define SUBLANG_RUSSIAN_MOLDAVIA 0x02 # endif # ifndef SUBLANG_SAMI_NORTHERN_NORWAY # define SUBLANG_SAMI_NORTHERN_NORWAY 0x01 # endif # ifndef SUBLANG_SAMI_NORTHERN_SWEDEN # define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02 # endif # ifndef SUBLANG_SAMI_NORTHERN_FINLAND # define SUBLANG_SAMI_NORTHERN_FINLAND 0x03 # endif # ifndef SUBLANG_SAMI_LULE_NORWAY # define SUBLANG_SAMI_LULE_NORWAY 0x04 # endif # ifndef SUBLANG_SAMI_LULE_SWEDEN # define SUBLANG_SAMI_LULE_SWEDEN 0x05 # endif # ifndef SUBLANG_SAMI_SOUTHERN_NORWAY # define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06 # endif # ifndef SUBLANG_SAMI_SOUTHERN_SWEDEN # define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07 # endif # undef SUBLANG_SAMI_SKOLT_FINLAND # define SUBLANG_SAMI_SKOLT_FINLAND 0x08 # undef SUBLANG_SAMI_INARI_FINLAND # define SUBLANG_SAMI_INARI_FINLAND 0x09 # ifndef SUBLANG_SANSKRIT_INDIA # define SUBLANG_SANSKRIT_INDIA 0x01 # endif # ifndef SUBLANG_SERBIAN_LATIN # define SUBLANG_SERBIAN_LATIN 0x02 # endif # ifndef SUBLANG_SERBIAN_CYRILLIC # define SUBLANG_SERBIAN_CYRILLIC 0x03 # endif # ifndef SUBLANG_SINDHI_INDIA # define SUBLANG_SINDHI_INDIA 0x01 # endif # undef SUBLANG_SINDHI_PAKISTAN # define SUBLANG_SINDHI_PAKISTAN 0x02 # ifndef SUBLANG_SINDHI_AFGHANISTAN # define SUBLANG_SINDHI_AFGHANISTAN 0x02 # endif # ifndef SUBLANG_SINHALESE_SRI_LANKA # define SUBLANG_SINHALESE_SRI_LANKA 0x01 # endif # ifndef SUBLANG_SLOVAK_SLOVAKIA # define SUBLANG_SLOVAK_SLOVAKIA 0x01 # endif # ifndef SUBLANG_SLOVENIAN_SLOVENIA # define SUBLANG_SLOVENIAN_SLOVENIA 0x01 # endif # ifndef SUBLANG_SOTHO_SOUTH_AFRICA # define SUBLANG_SOTHO_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_SPANISH_GUATEMALA # define SUBLANG_SPANISH_GUATEMALA 0x04 # endif # ifndef SUBLANG_SPANISH_COSTA_RICA # define SUBLANG_SPANISH_COSTA_RICA 0x05 # endif # ifndef SUBLANG_SPANISH_PANAMA # define SUBLANG_SPANISH_PANAMA 0x06 # endif # ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC # define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 # endif # ifndef SUBLANG_SPANISH_VENEZUELA # define SUBLANG_SPANISH_VENEZUELA 0x08 # endif # ifndef SUBLANG_SPANISH_COLOMBIA # define SUBLANG_SPANISH_COLOMBIA 0x09 # endif # ifndef SUBLANG_SPANISH_PERU # define SUBLANG_SPANISH_PERU 0x0a # endif # ifndef SUBLANG_SPANISH_ARGENTINA # define SUBLANG_SPANISH_ARGENTINA 0x0b # endif # ifndef SUBLANG_SPANISH_ECUADOR # define SUBLANG_SPANISH_ECUADOR 0x0c # endif # ifndef SUBLANG_SPANISH_CHILE # define SUBLANG_SPANISH_CHILE 0x0d # endif # ifndef SUBLANG_SPANISH_URUGUAY # define SUBLANG_SPANISH_URUGUAY 0x0e # endif # ifndef SUBLANG_SPANISH_PARAGUAY # define SUBLANG_SPANISH_PARAGUAY 0x0f # endif # ifndef SUBLANG_SPANISH_BOLIVIA # define SUBLANG_SPANISH_BOLIVIA 0x10 # endif # ifndef SUBLANG_SPANISH_EL_SALVADOR # define SUBLANG_SPANISH_EL_SALVADOR 0x11 # endif # ifndef SUBLANG_SPANISH_HONDURAS # define SUBLANG_SPANISH_HONDURAS 0x12 # endif # ifndef SUBLANG_SPANISH_NICARAGUA # define SUBLANG_SPANISH_NICARAGUA 0x13 # endif # ifndef SUBLANG_SPANISH_PUERTO_RICO # define SUBLANG_SPANISH_PUERTO_RICO 0x14 # endif # ifndef SUBLANG_SPANISH_US # define SUBLANG_SPANISH_US 0x15 # endif # ifndef SUBLANG_SWAHILI_KENYA # define SUBLANG_SWAHILI_KENYA 0x01 # endif # ifndef SUBLANG_SWEDISH_SWEDEN # define SUBLANG_SWEDISH_SWEDEN 0x01 # endif # ifndef SUBLANG_SWEDISH_FINLAND # define SUBLANG_SWEDISH_FINLAND 0x02 # endif # ifndef SUBLANG_SYRIAC_SYRIA # define SUBLANG_SYRIAC_SYRIA 0x01 # endif # ifndef SUBLANG_TAGALOG_PHILIPPINES # define SUBLANG_TAGALOG_PHILIPPINES 0x01 # endif # ifndef SUBLANG_TAJIK_TAJIKISTAN # define SUBLANG_TAJIK_TAJIKISTAN 0x01 # endif # ifndef SUBLANG_TAMAZIGHT_ARABIC # define SUBLANG_TAMAZIGHT_ARABIC 0x01 # endif # ifndef SUBLANG_TAMAZIGHT_ALGERIA_LATIN # define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02 # endif # ifndef SUBLANG_TAMIL_INDIA # define SUBLANG_TAMIL_INDIA 0x01 # endif # ifndef SUBLANG_TATAR_RUSSIA # define SUBLANG_TATAR_RUSSIA 0x01 # endif # ifndef SUBLANG_TELUGU_INDIA # define SUBLANG_TELUGU_INDIA 0x01 # endif # ifndef SUBLANG_THAI_THAILAND # define SUBLANG_THAI_THAILAND 0x01 # endif # ifndef SUBLANG_TIBETAN_PRC # define SUBLANG_TIBETAN_PRC 0x01 # endif # undef SUBLANG_TIBETAN_BHUTAN # define SUBLANG_TIBETAN_BHUTAN 0x02 # ifndef SUBLANG_TIGRINYA_ETHIOPIA # define SUBLANG_TIGRINYA_ETHIOPIA 0x01 # endif # ifndef SUBLANG_TIGRINYA_ERITREA # define SUBLANG_TIGRINYA_ERITREA 0x02 # endif # ifndef SUBLANG_TSWANA_SOUTH_AFRICA # define SUBLANG_TSWANA_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_TURKISH_TURKEY # define SUBLANG_TURKISH_TURKEY 0x01 # endif # ifndef SUBLANG_TURKMEN_TURKMENISTAN # define SUBLANG_TURKMEN_TURKMENISTAN 0x01 # endif # ifndef SUBLANG_UIGHUR_PRC # define SUBLANG_UIGHUR_PRC 0x01 # endif # ifndef SUBLANG_UKRAINIAN_UKRAINE # define SUBLANG_UKRAINIAN_UKRAINE 0x01 # endif # ifndef SUBLANG_UPPER_SORBIAN_GERMANY # define SUBLANG_UPPER_SORBIAN_GERMANY 0x01 # endif # ifndef SUBLANG_URDU_PAKISTAN # define SUBLANG_URDU_PAKISTAN 0x01 # endif # ifndef SUBLANG_URDU_INDIA # define SUBLANG_URDU_INDIA 0x02 # endif # ifndef SUBLANG_UZBEK_LATIN # define SUBLANG_UZBEK_LATIN 0x01 # endif # ifndef SUBLANG_UZBEK_CYRILLIC # define SUBLANG_UZBEK_CYRILLIC 0x02 # endif # ifndef SUBLANG_VIETNAMESE_VIETNAM # define SUBLANG_VIETNAMESE_VIETNAM 0x01 # endif # ifndef SUBLANG_WELSH_UNITED_KINGDOM # define SUBLANG_WELSH_UNITED_KINGDOM 0x01 # endif # ifndef SUBLANG_WOLOF_SENEGAL # define SUBLANG_WOLOF_SENEGAL 0x01 # endif # ifndef SUBLANG_XHOSA_SOUTH_AFRICA # define SUBLANG_XHOSA_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_YAKUT_RUSSIA # define SUBLANG_YAKUT_RUSSIA 0x01 # endif # ifndef SUBLANG_YI_PRC # define SUBLANG_YI_PRC 0x01 # endif # ifndef SUBLANG_YORUBA_NIGERIA # define SUBLANG_YORUBA_NIGERIA 0x01 # endif # ifndef SUBLANG_ZULU_SOUTH_AFRICA # define SUBLANG_ZULU_SOUTH_AFRICA 0x01 # endif /* GetLocaleInfoA operations. */ # ifndef LOCALE_SNAME # define LOCALE_SNAME 0x5c # endif # ifndef LOCALE_NAME_MAX_LENGTH # define LOCALE_NAME_MAX_LENGTH 85 # endif #endif #if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer */ /* Canonicalize a Mac OS X locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the Mac OS X locale name. On output, it contains the Unix locale name. */ # if !defined IN_LIBINTL static # endif void gl_locale_name_canonicalize (char *name) { /* This conversion is based on a posting by Deborah GoldSmith on 2005-03-08, https://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */ /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and ISO 3166) names. Prior to Mac OS X 10.3, there is no API for doing this. Therefore we do it ourselves, using a table based on the results of the Mac OS X 10.3.8 function CFLocaleCreateCanonicalLocaleIdentifierFromString(). */ typedef struct { const char legacy[21+1]; const char unixy[5+1]; } legacy_entry; static const legacy_entry legacy_table[] = { { "Afrikaans", "af" }, { "Albanian", "sq" }, { "Amharic", "am" }, { "Arabic", "ar" }, { "Armenian", "hy" }, { "Assamese", "as" }, { "Aymara", "ay" }, { "Azerbaijani", "az" }, { "Basque", "eu" }, { "Belarusian", "be" }, { "Belorussian", "be" }, { "Bengali", "bn" }, { "Brazilian Portugese", "pt_BR" }, { "Brazilian Portuguese", "pt_BR" }, { "Breton", "br" }, { "Bulgarian", "bg" }, { "Burmese", "my" }, { "Byelorussian", "be" }, { "Catalan", "ca" }, { "Chewa", "ny" }, { "Chichewa", "ny" }, { "Chinese", "zh" }, { "Chinese, Simplified", "zh_CN" }, { "Chinese, Traditional", "zh_TW" }, { "Chinese, Tradtional", "zh_TW" }, { "Croatian", "hr" }, { "Czech", "cs" }, { "Danish", "da" }, { "Dutch", "nl" }, { "Dzongkha", "dz" }, { "English", "en" }, { "Esperanto", "eo" }, { "Estonian", "et" }, { "Faroese", "fo" }, { "Farsi", "fa" }, { "Finnish", "fi" }, { "Flemish", "nl_BE" }, { "French", "fr" }, { "Galician", "gl" }, { "Gallegan", "gl" }, { "Georgian", "ka" }, { "German", "de" }, { "Greek", "el" }, { "Greenlandic", "kl" }, { "Guarani", "gn" }, { "Gujarati", "gu" }, { "Hawaiian", "haw" }, /* Yes, "haw", not "cpe". */ { "Hebrew", "he" }, { "Hindi", "hi" }, { "Hungarian", "hu" }, { "Icelandic", "is" }, { "Indonesian", "id" }, { "Inuktitut", "iu" }, { "Irish", "ga" }, { "Italian", "it" }, { "Japanese", "ja" }, { "Javanese", "jv" }, { "Kalaallisut", "kl" }, { "Kannada", "kn" }, { "Kashmiri", "ks" }, { "Kazakh", "kk" }, { "Khmer", "km" }, { "Kinyarwanda", "rw" }, { "Kirghiz", "ky" }, { "Korean", "ko" }, { "Kurdish", "ku" }, { "Latin", "la" }, { "Latvian", "lv" }, { "Lithuanian", "lt" }, { "Macedonian", "mk" }, { "Malagasy", "mg" }, { "Malay", "ms" }, { "Malayalam", "ml" }, { "Maltese", "mt" }, { "Manx", "gv" }, { "Marathi", "mr" }, { "Moldavian", "mo" }, { "Mongolian", "mn" }, { "Nepali", "ne" }, { "Norwegian", "nb" }, /* Yes, "nb", not the obsolete "no". */ { "Nyanja", "ny" }, { "Nynorsk", "nn" }, { "Oriya", "or" }, { "Oromo", "om" }, { "Panjabi", "pa" }, { "Pashto", "ps" }, { "Persian", "fa" }, { "Polish", "pl" }, { "Portuguese", "pt" }, { "Portuguese, Brazilian", "pt_BR" }, { "Punjabi", "pa" }, { "Pushto", "ps" }, { "Quechua", "qu" }, { "Romanian", "ro" }, { "Ruanda", "rw" }, { "Rundi", "rn" }, { "Russian", "ru" }, { "Sami", "se_NO" }, /* Not just "se". */ { "Sanskrit", "sa" }, { "Scottish", "gd" }, { "Serbian", "sr" }, { "Simplified Chinese", "zh_CN" }, { "Sindhi", "sd" }, { "Sinhalese", "si" }, { "Slovak", "sk" }, { "Slovenian", "sl" }, { "Somali", "so" }, { "Spanish", "es" }, { "Sundanese", "su" }, { "Swahili", "sw" }, { "Swedish", "sv" }, { "Tagalog", "tl" }, { "Tajik", "tg" }, { "Tajiki", "tg" }, { "Tamil", "ta" }, { "Tatar", "tt" }, { "Telugu", "te" }, { "Thai", "th" }, { "Tibetan", "bo" }, { "Tigrinya", "ti" }, { "Tongan", "to" }, { "Traditional Chinese", "zh_TW" }, { "Turkish", "tr" }, { "Turkmen", "tk" }, { "Uighur", "ug" }, { "Ukrainian", "uk" }, { "Urdu", "ur" }, { "Uzbek", "uz" }, { "Vietnamese", "vi" }, { "Welsh", "cy" }, { "Yiddish", "yi" } }; /* Convert new-style locale names with language tags (ISO 639 and ISO 15924) to Unix (ISO 639 and ISO 3166) names. */ typedef struct { const char langtag[7+1]; const char unixy[12+1]; } langtag_entry; static const langtag_entry langtag_table[] = { /* Mac OS X has "az-Arab", "az-Cyrl", "az-Latn". The default script for az on Unix is Latin. */ { "az-Latn", "az" }, /* Mac OS X has "ga-dots". Does not yet exist on Unix. */ { "ga-dots", "ga" }, /* Mac OS X has "kk-Cyrl". Does not yet exist on Unix. */ /* Mac OS X has "mn-Cyrl", "mn-Mong". The default script for mn on Unix is Cyrillic. */ { "mn-Cyrl", "mn" }, /* Mac OS X has "ms-Arab", "ms-Latn". The default script for ms on Unix is Latin. */ { "ms-Latn", "ms" }, /* Mac OS X has "tg-Cyrl". The default script for tg on Unix is Cyrillic. */ { "tg-Cyrl", "tg" }, /* Mac OS X has "tk-Cyrl". Does not yet exist on Unix. */ /* Mac OS X has "tt-Cyrl". The default script for tt on Unix is Cyrillic. */ { "tt-Cyrl", "tt" }, /* Mac OS X has "zh-Hans", "zh-Hant". Country codes are used to distinguish these on Unix. */ { "zh-Hans", "zh_CN" }, { "zh-Hant", "zh_TW" } }; /* Convert script names (ISO 15924) to Unix conventions. See http://www.unicode.org/iso15924/iso15924-codes.html */ typedef struct { const char script[4+1]; const char unixy[9+1]; } script_entry; static const script_entry script_table[] = { { "Arab", "arabic" }, { "Cyrl", "cyrillic" }, { "Mong", "mongolian" } }; /* Step 1: Convert using legacy_table. */ if (name[0] >= 'A' && name[0] <= 'Z') { unsigned int i1, i2; i1 = 0; i2 = sizeof (legacy_table) / sizeof (legacy_entry); while (i2 - i1 > 1) { /* At this point we know that if name occurs in legacy_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const legacy_entry *p = &legacy_table[i]; if (strcmp (name, p->legacy) < 0) i2 = i; else i1 = i; } if (strcmp (name, legacy_table[i1].legacy) == 0) { strcpy (name, legacy_table[i1].unixy); return; } } /* Step 2: Convert using langtag_table and script_table. */ if (strlen (name) == 7 && name[2] == '-') { unsigned int i1, i2; i1 = 0; i2 = sizeof (langtag_table) / sizeof (langtag_entry); while (i2 - i1 > 1) { /* At this point we know that if name occurs in langtag_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const langtag_entry *p = &langtag_table[i]; if (strcmp (name, p->langtag) < 0) i2 = i; else i1 = i; } if (strcmp (name, langtag_table[i1].langtag) == 0) { strcpy (name, langtag_table[i1].unixy); return; } i1 = 0; i2 = sizeof (script_table) / sizeof (script_entry); while (i2 - i1 > 1) { /* At this point we know that if (name + 3) occurs in script_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const script_entry *p = &script_table[i]; if (strcmp (name + 3, p->script) < 0) i2 = i; else i1 = i; } if (strcmp (name + 3, script_table[i1].script) == 0) { name[2] = '@'; strcpy (name + 3, script_table[i1].unixy); return; } } /* Step 3: Convert new-style dash to Unix underscore. */ { char *p; for (p = name; *p != '\0'; p++) if (*p == '-') *p = '_'; } } #endif #if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ /* Canonicalize a Windows native locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the Windows locale name. On output, it contains the Unix locale name. */ # if !defined IN_LIBINTL static # endif void gl_locale_name_canonicalize (char *name) { /* FIXME: This is probably incomplete: it does not handle "zh-Hans" and "zh-Hant". */ char *p; for (p = name; *p != '\0'; p++) if (*p == '-') { *p = '_'; p++; for (; *p != '\0'; p++) { if (*p >= 'a' && *p <= 'z') *p += 'A' - 'a'; if (*p == '-') { *p = '\0'; return; } } return; } } # if !defined IN_LIBINTL static # endif const char * gl_locale_name_from_win32_LANGID (LANGID langid) { /* Activate the new code only when the GETTEXT_MUI environment variable is set, for the time being, since the new code is not well tested. */ if (getenv ("GETTEXT_MUI") != NULL) { static char namebuf[256]; /* Query the system's notion of locale name. On Windows95/98/ME, GetLocaleInfoA returns some incorrect results. But we don't need to support systems that are so old. */ if (GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT), LOCALE_SNAME, namebuf, sizeof (namebuf) - 1)) { /* Convert it to a Unix locale name. */ gl_locale_name_canonicalize (namebuf); return namebuf; } } /* Internet Explorer has an LCID to RFC3066 name mapping stored in HKEY_CLASSES_ROOT\Mime\Database\Rfc1766. But we better don't use that since IE's i18n subsystem is known to be inconsistent with the native Windows base (e.g. they have different character conversion facilities that produce different results). */ /* Use our own table. */ { int primary, sub; /* Split into language and territory part. */ primary = PRIMARYLANGID (langid); sub = SUBLANGID (langid); /* Dispatch on language. See also http://www.unicode.org/unicode/onlinedat/languages.html . For details about languages, see https://www.ethnologue.com/ . */ switch (primary) { case LANG_AFRIKAANS: switch (sub) { case SUBLANG_AFRIKAANS_SOUTH_AFRICA: return "af_ZA"; } return "af"; case LANG_ALBANIAN: switch (sub) { case SUBLANG_ALBANIAN_ALBANIA: return "sq_AL"; } return "sq"; case LANG_ALSATIAN: switch (sub) { case SUBLANG_ALSATIAN_FRANCE: return "gsw_FR"; } return "gsw"; case LANG_AMHARIC: switch (sub) { case SUBLANG_AMHARIC_ETHIOPIA: return "am_ET"; } return "am"; case LANG_ARABIC: switch (sub) { case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA"; case SUBLANG_ARABIC_IRAQ: return "ar_IQ"; case SUBLANG_ARABIC_EGYPT: return "ar_EG"; case SUBLANG_ARABIC_LIBYA: return "ar_LY"; case SUBLANG_ARABIC_ALGERIA: return "ar_DZ"; case SUBLANG_ARABIC_MOROCCO: return "ar_MA"; case SUBLANG_ARABIC_TUNISIA: return "ar_TN"; case SUBLANG_ARABIC_OMAN: return "ar_OM"; case SUBLANG_ARABIC_YEMEN: return "ar_YE"; case SUBLANG_ARABIC_SYRIA: return "ar_SY"; case SUBLANG_ARABIC_JORDAN: return "ar_JO"; case SUBLANG_ARABIC_LEBANON: return "ar_LB"; case SUBLANG_ARABIC_KUWAIT: return "ar_KW"; case SUBLANG_ARABIC_UAE: return "ar_AE"; case SUBLANG_ARABIC_BAHRAIN: return "ar_BH"; case SUBLANG_ARABIC_QATAR: return "ar_QA"; } return "ar"; case LANG_ARMENIAN: switch (sub) { case SUBLANG_ARMENIAN_ARMENIA: return "hy_AM"; } return "hy"; case LANG_ASSAMESE: switch (sub) { case SUBLANG_ASSAMESE_INDIA: return "as_IN"; } return "as"; case LANG_AZERI: switch (sub) { /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */ case 0x1e: return "az@latin"; case SUBLANG_AZERI_LATIN: return "az_AZ@latin"; case 0x1d: return "az@cyrillic"; case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic"; } return "az"; case LANG_BASHKIR: switch (sub) { case SUBLANG_BASHKIR_RUSSIA: return "ba_RU"; } return "ba"; case LANG_BASQUE: switch (sub) { case SUBLANG_BASQUE_BASQUE: return "eu_ES"; } return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */ case LANG_BELARUSIAN: switch (sub) { case SUBLANG_BELARUSIAN_BELARUS: return "be_BY"; } return "be"; case LANG_BENGALI: switch (sub) { case SUBLANG_BENGALI_INDIA: return "bn_IN"; case SUBLANG_BENGALI_BANGLADESH: return "bn_BD"; } return "bn"; case LANG_BRETON: switch (sub) { case SUBLANG_BRETON_FRANCE: return "br_FR"; } return "br"; case LANG_BULGARIAN: switch (sub) { case SUBLANG_BULGARIAN_BULGARIA: return "bg_BG"; } return "bg"; case LANG_BURMESE: switch (sub) { case SUBLANG_DEFAULT: return "my_MM"; } return "my"; case LANG_CAMBODIAN: switch (sub) { case SUBLANG_CAMBODIAN_CAMBODIA: return "km_KH"; } return "km"; case LANG_CATALAN: switch (sub) { case SUBLANG_CATALAN_SPAIN: return "ca_ES"; } return "ca"; case LANG_CHEROKEE: switch (sub) { case SUBLANG_DEFAULT: return "chr_US"; } return "chr"; case LANG_CHINESE: switch (sub) { case SUBLANG_CHINESE_TRADITIONAL: case 0x1f: return "zh_TW"; case SUBLANG_CHINESE_SIMPLIFIED: case 0x00: return "zh_CN"; case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; /* traditional */ case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; /* simplified */ case SUBLANG_CHINESE_MACAU: return "zh_MO"; /* traditional */ } return "zh"; case LANG_CORSICAN: switch (sub) { case SUBLANG_CORSICAN_FRANCE: return "co_FR"; } return "co"; case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN == LANG_BOSNIAN * What used to be called Serbo-Croatian * should really now be two separate * languages because of political reasons. * (Says tml, who knows nothing about Serbian * or Croatian.) * (I can feel those flames coming already.) */ switch (sub) { /* Croatian */ case 0x00: return "hr"; case SUBLANG_CROATIAN_CROATIA: return "hr_HR"; case SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: return "hr_BA"; /* Serbian */ case 0x1f: return "sr"; case 0x1c: return "sr"; /* latin */ case SUBLANG_SERBIAN_LATIN: return "sr_CS"; /* latin */ case 0x09: return "sr_RS"; /* latin */ case 0x0b: return "sr_ME"; /* latin */ case 0x06: return "sr_BA"; /* latin */ case 0x1b: return "sr@cyrillic"; case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic"; case 0x0a: return "sr_RS@cyrillic"; case 0x0c: return "sr_ME@cyrillic"; case 0x07: return "sr_BA@cyrillic"; /* Bosnian */ case 0x1e: return "bs"; case 0x1a: return "bs"; /* latin */ case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: return "bs_BA"; /* latin */ case 0x19: return "bs@cyrillic"; case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: return "bs_BA@cyrillic"; } return "hr"; case LANG_CZECH: switch (sub) { case SUBLANG_CZECH_CZECH_REPUBLIC: return "cs_CZ"; } return "cs"; case LANG_DANISH: switch (sub) { case SUBLANG_DANISH_DENMARK: return "da_DK"; } return "da"; case LANG_DARI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_DARI_AFGHANISTAN: return "prs_AF"; } return "prs"; case LANG_DIVEHI: switch (sub) { case SUBLANG_DIVEHI_MALDIVES: return "dv_MV"; } return "dv"; case LANG_DUTCH: switch (sub) { case SUBLANG_DUTCH: return "nl_NL"; case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE"; case SUBLANG_DUTCH_SURINAM: return "nl_SR"; } return "nl"; case LANG_EDO: switch (sub) { case SUBLANG_DEFAULT: return "bin_NG"; } return "bin"; case LANG_ENGLISH: switch (sub) { /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought * English was the language spoken in England. * Oh well. */ case SUBLANG_ENGLISH_US: return "en_US"; case SUBLANG_ENGLISH_UK: return "en_GB"; case SUBLANG_ENGLISH_AUS: return "en_AU"; case SUBLANG_ENGLISH_CAN: return "en_CA"; case SUBLANG_ENGLISH_NZ: return "en_NZ"; case SUBLANG_ENGLISH_EIRE: return "en_IE"; case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA"; case SUBLANG_ENGLISH_JAMAICA: return "en_JM"; case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */ case SUBLANG_ENGLISH_BELIZE: return "en_BZ"; case SUBLANG_ENGLISH_TRINIDAD: return "en_TT"; case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW"; case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH"; case SUBLANG_ENGLISH_INDONESIA: return "en_ID"; case SUBLANG_ENGLISH_HONGKONG: return "en_HK"; case SUBLANG_ENGLISH_INDIA: return "en_IN"; case SUBLANG_ENGLISH_MALAYSIA: return "en_MY"; case SUBLANG_ENGLISH_SINGAPORE: return "en_SG"; } return "en"; case LANG_ESTONIAN: switch (sub) { case SUBLANG_ESTONIAN_ESTONIA: return "et_EE"; } return "et"; case LANG_FAEROESE: switch (sub) { case SUBLANG_FAEROESE_FAROE_ISLANDS: return "fo_FO"; } return "fo"; case LANG_FARSI: switch (sub) { case SUBLANG_FARSI_IRAN: return "fa_IR"; } return "fa"; case LANG_FINNISH: switch (sub) { case SUBLANG_FINNISH_FINLAND: return "fi_FI"; } return "fi"; case LANG_FRENCH: switch (sub) { case SUBLANG_FRENCH: return "fr_FR"; case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE"; case SUBLANG_FRENCH_CANADIAN: return "fr_CA"; case SUBLANG_FRENCH_SWISS: return "fr_CH"; case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU"; case SUBLANG_FRENCH_MONACO: return "fr_MC"; case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */ case SUBLANG_FRENCH_REUNION: return "fr_RE"; case SUBLANG_FRENCH_CONGO: return "fr_CG"; case SUBLANG_FRENCH_SENEGAL: return "fr_SN"; case SUBLANG_FRENCH_CAMEROON: return "fr_CM"; case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI"; case SUBLANG_FRENCH_MALI: return "fr_ML"; case SUBLANG_FRENCH_MOROCCO: return "fr_MA"; case SUBLANG_FRENCH_HAITI: return "fr_HT"; } return "fr"; case LANG_FRISIAN: switch (sub) { case SUBLANG_FRISIAN_NETHERLANDS: return "fy_NL"; } return "fy"; case LANG_FULFULDE: /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */ switch (sub) { case SUBLANG_DEFAULT: return "ff_NG"; } return "ff"; case LANG_GAELIC: switch (sub) { case 0x01: /* SCOTTISH */ /* old, superseded by LANG_SCOTTISH_GAELIC */ return "gd_GB"; case SUBLANG_IRISH_IRELAND: return "ga_IE"; } return "ga"; case LANG_GALICIAN: switch (sub) { case SUBLANG_GALICIAN_SPAIN: return "gl_ES"; } return "gl"; case LANG_GEORGIAN: switch (sub) { case SUBLANG_GEORGIAN_GEORGIA: return "ka_GE"; } return "ka"; case LANG_GERMAN: switch (sub) { case SUBLANG_GERMAN: return "de_DE"; case SUBLANG_GERMAN_SWISS: return "de_CH"; case SUBLANG_GERMAN_AUSTRIAN: return "de_AT"; case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU"; case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI"; } return "de"; case LANG_GREEK: switch (sub) { case SUBLANG_GREEK_GREECE: return "el_GR"; } return "el"; case LANG_GREENLANDIC: switch (sub) { case SUBLANG_GREENLANDIC_GREENLAND: return "kl_GL"; } return "kl"; case LANG_GUARANI: switch (sub) { case SUBLANG_DEFAULT: return "gn_PY"; } return "gn"; case LANG_GUJARATI: switch (sub) { case SUBLANG_GUJARATI_INDIA: return "gu_IN"; } return "gu"; case LANG_HAUSA: switch (sub) { case 0x1f: return "ha"; case SUBLANG_HAUSA_NIGERIA_LATIN: return "ha_NG"; } return "ha"; case LANG_HAWAIIAN: /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers) or Hawaii Creole English ("cpe_US", 600000 speakers)? */ switch (sub) { case SUBLANG_DEFAULT: return "cpe_US"; } return "cpe"; case LANG_HEBREW: switch (sub) { case SUBLANG_HEBREW_ISRAEL: return "he_IL"; } return "he"; case LANG_HINDI: switch (sub) { case SUBLANG_HINDI_INDIA: return "hi_IN"; } return "hi"; case LANG_HUNGARIAN: switch (sub) { case SUBLANG_HUNGARIAN_HUNGARY: return "hu_HU"; } return "hu"; case LANG_IBIBIO: switch (sub) { case SUBLANG_DEFAULT: return "nic_NG"; } return "nic"; case LANG_ICELANDIC: switch (sub) { case SUBLANG_ICELANDIC_ICELAND: return "is_IS"; } return "is"; case LANG_IGBO: switch (sub) { case SUBLANG_IGBO_NIGERIA: return "ig_NG"; } return "ig"; case LANG_INDONESIAN: switch (sub) { case SUBLANG_INDONESIAN_INDONESIA: return "id_ID"; } return "id"; case LANG_INUKTITUT: switch (sub) { case 0x1e: return "iu"; /* syllabic */ case SUBLANG_INUKTITUT_CANADA: return "iu_CA"; /* syllabic */ case 0x1f: return "iu@latin"; case SUBLANG_INUKTITUT_CANADA_LATIN: return "iu_CA@latin"; } return "iu"; case LANG_ITALIAN: switch (sub) { case SUBLANG_ITALIAN: return "it_IT"; case SUBLANG_ITALIAN_SWISS: return "it_CH"; } return "it"; case LANG_JAPANESE: switch (sub) { case SUBLANG_JAPANESE_JAPAN: return "ja_JP"; } return "ja"; case LANG_KANNADA: switch (sub) { case SUBLANG_KANNADA_INDIA: return "kn_IN"; } return "kn"; case LANG_KANURI: switch (sub) { case SUBLANG_DEFAULT: return "kr_NG"; } return "kr"; case LANG_KASHMIRI: switch (sub) { case SUBLANG_DEFAULT: return "ks_PK"; case SUBLANG_KASHMIRI_INDIA: return "ks_IN"; } return "ks"; case LANG_KAZAK: switch (sub) { case SUBLANG_KAZAK_KAZAKHSTAN: return "kk_KZ"; } return "kk"; case LANG_KICHE: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_KICHE_GUATEMALA: return "qut_GT"; } return "qut"; case LANG_KINYARWANDA: switch (sub) { case SUBLANG_KINYARWANDA_RWANDA: return "rw_RW"; } return "rw"; case LANG_KONKANI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_KONKANI_INDIA: return "kok_IN"; } return "kok"; case LANG_KOREAN: switch (sub) { case SUBLANG_DEFAULT: return "ko_KR"; } return "ko"; case LANG_KYRGYZ: switch (sub) { case SUBLANG_KYRGYZ_KYRGYZSTAN: return "ky_KG"; } return "ky"; case LANG_LAO: switch (sub) { case SUBLANG_LAO_LAOS: return "lo_LA"; } return "lo"; case LANG_LATIN: switch (sub) { case SUBLANG_DEFAULT: return "la_VA"; } return "la"; case LANG_LATVIAN: switch (sub) { case SUBLANG_LATVIAN_LATVIA: return "lv_LV"; } return "lv"; case LANG_LITHUANIAN: switch (sub) { case SUBLANG_LITHUANIAN_LITHUANIA: return "lt_LT"; } return "lt"; case LANG_LUXEMBOURGISH: switch (sub) { case SUBLANG_LUXEMBOURGISH_LUXEMBOURG: return "lb_LU"; } return "lb"; case LANG_MACEDONIAN: switch (sub) { case SUBLANG_MACEDONIAN_MACEDONIA: return "mk_MK"; } return "mk"; case LANG_MALAY: switch (sub) { case SUBLANG_MALAY_MALAYSIA: return "ms_MY"; case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN"; } return "ms"; case LANG_MALAYALAM: switch (sub) { case SUBLANG_MALAYALAM_INDIA: return "ml_IN"; } return "ml"; case LANG_MALTESE: switch (sub) { case SUBLANG_MALTESE_MALTA: return "mt_MT"; } return "mt"; case LANG_MANIPURI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_DEFAULT: return "mni_IN"; } return "mni"; case LANG_MAORI: switch (sub) { case SUBLANG_MAORI_NEW_ZEALAND: return "mi_NZ"; } return "mi"; case LANG_MAPUDUNGUN: switch (sub) { case SUBLANG_MAPUDUNGUN_CHILE: return "arn_CL"; } return "arn"; case LANG_MARATHI: switch (sub) { case SUBLANG_MARATHI_INDIA: return "mr_IN"; } return "mr"; case LANG_MOHAWK: switch (sub) { case SUBLANG_MOHAWK_CANADA: return "moh_CA"; } return "moh"; case LANG_MONGOLIAN: switch (sub) { case SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA: case 0x1e: return "mn_MN"; case SUBLANG_MONGOLIAN_PRC: case 0x1f: return "mn_CN"; } return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */ case LANG_NEPALI: switch (sub) { case SUBLANG_NEPALI_NEPAL: return "ne_NP"; case SUBLANG_NEPALI_INDIA: return "ne_IN"; } return "ne"; case LANG_NORWEGIAN: switch (sub) { case 0x1f: return "nb"; case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO"; case 0x1e: return "nn"; case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO"; } return "no"; case LANG_OCCITAN: switch (sub) { case SUBLANG_OCCITAN_FRANCE: return "oc_FR"; } return "oc"; case LANG_ORIYA: switch (sub) { case SUBLANG_ORIYA_INDIA: return "or_IN"; } return "or"; case LANG_OROMO: switch (sub) { case SUBLANG_DEFAULT: return "om_ET"; } return "om"; case LANG_PAPIAMENTU: switch (sub) { case SUBLANG_DEFAULT: return "pap_AN"; } return "pap"; case LANG_PASHTO: switch (sub) { case SUBLANG_PASHTO_AFGHANISTAN: return "ps_AF"; } return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */ case LANG_POLISH: switch (sub) { case SUBLANG_POLISH_POLAND: return "pl_PL"; } return "pl"; case LANG_PORTUGUESE: switch (sub) { /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT. Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; case SUBLANG_PORTUGUESE: return "pt_PT"; } return "pt"; case LANG_PUNJABI: switch (sub) { case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */ case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */ } return "pa"; case LANG_QUECHUA: /* Note: Microsoft uses the non-ISO language code "quz". */ switch (sub) { case SUBLANG_QUECHUA_BOLIVIA: return "qu_BO"; case SUBLANG_QUECHUA_ECUADOR: return "qu_EC"; case SUBLANG_QUECHUA_PERU: return "qu_PE"; } return "qu"; case LANG_ROMANIAN: switch (sub) { case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO"; case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD"; } return "ro"; case LANG_ROMANSH: switch (sub) { case SUBLANG_ROMANSH_SWITZERLAND: return "rm_CH"; } return "rm"; case LANG_RUSSIAN: switch (sub) { case SUBLANG_RUSSIAN_RUSSIA: return "ru_RU"; case SUBLANG_RUSSIAN_MOLDAVIA: return "ru_MD"; } return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */ case LANG_SAMI: switch (sub) { /* Northern Sami */ case 0x00: return "se"; case SUBLANG_SAMI_NORTHERN_NORWAY: return "se_NO"; case SUBLANG_SAMI_NORTHERN_SWEDEN: return "se_SE"; case SUBLANG_SAMI_NORTHERN_FINLAND: return "se_FI"; /* Lule Sami */ case 0x1f: return "smj"; case SUBLANG_SAMI_LULE_NORWAY: return "smj_NO"; case SUBLANG_SAMI_LULE_SWEDEN: return "smj_SE"; /* Southern Sami */ case 0x1e: return "sma"; case SUBLANG_SAMI_SOUTHERN_NORWAY: return "sma_NO"; case SUBLANG_SAMI_SOUTHERN_SWEDEN: return "sma_SE"; /* Skolt Sami */ case 0x1d: return "sms"; case SUBLANG_SAMI_SKOLT_FINLAND: return "sms_FI"; /* Inari Sami */ case 0x1c: return "smn"; case SUBLANG_SAMI_INARI_FINLAND: return "smn_FI"; } return "se"; /* or "smi"? */ case LANG_SANSKRIT: switch (sub) { case SUBLANG_SANSKRIT_INDIA: return "sa_IN"; } return "sa"; case LANG_SCOTTISH_GAELIC: switch (sub) { case SUBLANG_DEFAULT: return "gd_GB"; } return "gd"; case LANG_SINDHI: switch (sub) { case SUBLANG_SINDHI_INDIA: return "sd_IN"; case SUBLANG_SINDHI_PAKISTAN: return "sd_PK"; /*case SUBLANG_SINDHI_AFGHANISTAN: return "sd_AF";*/ } return "sd"; case LANG_SINHALESE: switch (sub) { case SUBLANG_SINHALESE_SRI_LANKA: return "si_LK"; } return "si"; case LANG_SLOVAK: switch (sub) { case SUBLANG_SLOVAK_SLOVAKIA: return "sk_SK"; } return "sk"; case LANG_SLOVENIAN: switch (sub) { case SUBLANG_SLOVENIAN_SLOVENIA: return "sl_SI"; } return "sl"; case LANG_SOMALI: switch (sub) { case SUBLANG_DEFAULT: return "so_SO"; } return "so"; case LANG_SORBIAN: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { /* Upper Sorbian */ case 0x00: return "hsb"; case SUBLANG_UPPER_SORBIAN_GERMANY: return "hsb_DE"; /* Lower Sorbian */ case 0x1f: return "dsb"; case SUBLANG_LOWER_SORBIAN_GERMANY: return "dsb_DE"; } return "wen"; case LANG_SOTHO: /* calls it "Sesotho sa Leboa"; according to it's the same as Northern Sotho. */ switch (sub) { case SUBLANG_SOTHO_SOUTH_AFRICA: return "nso_ZA"; } return "nso"; case LANG_SPANISH: switch (sub) { case SUBLANG_SPANISH: return "es_ES"; case SUBLANG_SPANISH_MEXICAN: return "es_MX"; case SUBLANG_SPANISH_MODERN: return "es_ES@modern"; /* not seen on Unix */ case SUBLANG_SPANISH_GUATEMALA: return "es_GT"; case SUBLANG_SPANISH_COSTA_RICA: return "es_CR"; case SUBLANG_SPANISH_PANAMA: return "es_PA"; case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO"; case SUBLANG_SPANISH_VENEZUELA: return "es_VE"; case SUBLANG_SPANISH_COLOMBIA: return "es_CO"; case SUBLANG_SPANISH_PERU: return "es_PE"; case SUBLANG_SPANISH_ARGENTINA: return "es_AR"; case SUBLANG_SPANISH_ECUADOR: return "es_EC"; case SUBLANG_SPANISH_CHILE: return "es_CL"; case SUBLANG_SPANISH_URUGUAY: return "es_UY"; case SUBLANG_SPANISH_PARAGUAY: return "es_PY"; case SUBLANG_SPANISH_BOLIVIA: return "es_BO"; case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV"; case SUBLANG_SPANISH_HONDURAS: return "es_HN"; case SUBLANG_SPANISH_NICARAGUA: return "es_NI"; case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR"; case SUBLANG_SPANISH_US: return "es_US"; } return "es"; case LANG_SUTU: switch (sub) { case SUBLANG_DEFAULT: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */ } return "bnt"; case LANG_SWAHILI: switch (sub) { case SUBLANG_SWAHILI_KENYA: return "sw_KE"; } return "sw"; case LANG_SWEDISH: switch (sub) { case SUBLANG_SWEDISH_SWEDEN: return "sv_SE"; case SUBLANG_SWEDISH_FINLAND: return "sv_FI"; } return "sv"; case LANG_SYRIAC: switch (sub) { case SUBLANG_SYRIAC_SYRIA: return "syr_SY"; /* An extinct language. */ } return "syr"; case LANG_TAGALOG: switch (sub) { case SUBLANG_TAGALOG_PHILIPPINES: return "tl_PH"; /* or "fil_PH"? */ } return "tl"; /* or "fil"? */ case LANG_TAJIK: switch (sub) { case 0x1f: return "tg"; case SUBLANG_TAJIK_TAJIKISTAN: return "tg_TJ"; } return "tg"; case LANG_TAMAZIGHT: /* Note: Microsoft uses the non-ISO language code "tmz". */ switch (sub) { /* FIXME: Adjust this when Tamazight locales appear on Unix. */ case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic"; case 0x1f: return "ber@latin"; case SUBLANG_TAMAZIGHT_ALGERIA_LATIN: return "ber_DZ@latin"; } return "ber"; case LANG_TAMIL: switch (sub) { case SUBLANG_TAMIL_INDIA: return "ta_IN"; } return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */ case LANG_TATAR: switch (sub) { case SUBLANG_TATAR_RUSSIA: return "tt_RU"; } return "tt"; case LANG_TELUGU: switch (sub) { case SUBLANG_TELUGU_INDIA: return "te_IN"; } return "te"; case LANG_THAI: switch (sub) { case SUBLANG_THAI_THAILAND: return "th_TH"; } return "th"; case LANG_TIBETAN: switch (sub) { case SUBLANG_TIBETAN_PRC: /* Most Tibetans would not like "bo_CN". But Tibet does not yet have a country code of its own. */ return "bo"; case SUBLANG_TIBETAN_BHUTAN: return "bo_BT"; } return "bo"; case LANG_TIGRINYA: switch (sub) { case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET"; case SUBLANG_TIGRINYA_ERITREA: return "ti_ER"; } return "ti"; case LANG_TSONGA: switch (sub) { case SUBLANG_DEFAULT: return "ts_ZA"; } return "ts"; case LANG_TSWANA: /* Spoken in South Africa, Botswana. */ switch (sub) { case SUBLANG_TSWANA_SOUTH_AFRICA: return "tn_ZA"; } return "tn"; case LANG_TURKISH: switch (sub) { case SUBLANG_TURKISH_TURKEY: return "tr_TR"; } return "tr"; case LANG_TURKMEN: switch (sub) { case SUBLANG_TURKMEN_TURKMENISTAN: return "tk_TM"; } return "tk"; case LANG_UIGHUR: switch (sub) { case SUBLANG_UIGHUR_PRC: return "ug_CN"; } return "ug"; case LANG_UKRAINIAN: switch (sub) { case SUBLANG_UKRAINIAN_UKRAINE: return "uk_UA"; } return "uk"; case LANG_URDU: switch (sub) { case SUBLANG_URDU_PAKISTAN: return "ur_PK"; case SUBLANG_URDU_INDIA: return "ur_IN"; } return "ur"; case LANG_UZBEK: switch (sub) { case 0x1f: return "uz"; case SUBLANG_UZBEK_LATIN: return "uz_UZ"; case 0x1e: return "uz@cyrillic"; case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic"; } return "uz"; case LANG_VENDA: switch (sub) { case SUBLANG_DEFAULT: return "ve_ZA"; } return "ve"; case LANG_VIETNAMESE: switch (sub) { case SUBLANG_VIETNAMESE_VIETNAM: return "vi_VN"; } return "vi"; case LANG_WELSH: switch (sub) { case SUBLANG_WELSH_UNITED_KINGDOM: return "cy_GB"; } return "cy"; case LANG_WOLOF: switch (sub) { case SUBLANG_WOLOF_SENEGAL: return "wo_SN"; } return "wo"; case LANG_XHOSA: switch (sub) { case SUBLANG_XHOSA_SOUTH_AFRICA: return "xh_ZA"; } return "xh"; case LANG_YAKUT: switch (sub) { case SUBLANG_YAKUT_RUSSIA: return "sah_RU"; } return "sah"; case LANG_YI: switch (sub) { case SUBLANG_YI_PRC: return "ii_CN"; } return "ii"; case LANG_YIDDISH: switch (sub) { case SUBLANG_DEFAULT: return "yi_IL"; } return "yi"; case LANG_YORUBA: switch (sub) { case SUBLANG_YORUBA_NIGERIA: return "yo_NG"; } return "yo"; case LANG_ZULU: switch (sub) { case SUBLANG_ZULU_SOUTH_AFRICA: return "zu_ZA"; } return "zu"; default: return "C"; } } } # if !defined IN_LIBINTL static # endif const char * gl_locale_name_from_win32_LCID (LCID lcid) { LANGID langid; /* Strip off the sorting rules, keep only the language part. */ langid = LANGIDFROMLCID (lcid); return gl_locale_name_from_win32_LANGID (langid); } # ifdef WINDOWS_NATIVE /* Two variables to interface between get_lcid and the EnumLocales callback function below. */ static LCID found_lcid; static char lname[LC_MAX * (LOCALE_NAME_MAX_LENGTH + 1) + 1]; /* Callback function for EnumLocales. */ static BOOL CALLBACK enum_locales_fn (LPTSTR locale_num_str) { char *endp; char locval[2 * LOCALE_NAME_MAX_LENGTH + 1 + 1]; LCID try_lcid = strtoul (locale_num_str, &endp, 16); if (GetLocaleInfo (try_lcid, LOCALE_SENGLANGUAGE, locval, LOCALE_NAME_MAX_LENGTH)) { strcat (locval, "_"); if (GetLocaleInfo (try_lcid, LOCALE_SENGCOUNTRY, locval + strlen (locval), LOCALE_NAME_MAX_LENGTH)) { size_t locval_len = strlen (locval); if (strncmp (locval, lname, locval_len) == 0 && (lname[locval_len] == '.' || lname[locval_len] == '\0')) { found_lcid = try_lcid; return FALSE; } } } return TRUE; } /* This lock protects the get_lcid against multiple simultaneous calls. */ gl_lock_define_initialized(static, get_lcid_lock) /* Return the Locale ID (LCID) number given the locale's name, a string, in LOCALE_NAME. This works by enumerating all the locales supported by the system, until we find one whose name matches LOCALE_NAME. */ static LCID get_lcid (const char *locale_name) { /* A simple cache. */ static LCID last_lcid; static char last_locale[1000]; /* Lock while looking for an LCID, to protect access to static variables: last_lcid, last_locale, found_lcid, and lname. */ gl_lock_lock (get_lcid_lock); if (last_lcid > 0 && strcmp (locale_name, last_locale) == 0) { gl_lock_unlock (get_lcid_lock); return last_lcid; } strncpy (lname, locale_name, sizeof (lname) - 1); lname[sizeof (lname) - 1] = '\0'; found_lcid = 0; EnumSystemLocales (enum_locales_fn, LCID_SUPPORTED); if (found_lcid > 0) { last_lcid = found_lcid; strcpy (last_locale, locale_name); } gl_lock_unlock (get_lcid_lock); return found_lcid; } # endif #endif #if HAVE_USELOCALE /* glibc, Solaris >= 12 or Mac OS X */ /* Simple hash set of strings. We don't want to drag in lots of hash table code here. */ # define SIZE_BITS (sizeof (size_t) * CHAR_BIT) /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ static size_t _GL_ATTRIBUTE_PURE string_hash (const void *x) { const char *s = (const char *) x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } /* A hash table of fixed size. Multiple threads can access it read-only simultaneously, but only one thread can insert into it at the same time. */ /* A node in a hash bucket collision list. */ struct hash_node { struct hash_node * volatile next; char contents[FLEXIBLE_ARRAY_MEMBER]; }; # define HASH_TABLE_SIZE 257 static struct hash_node * volatile struniq_hash_table[HASH_TABLE_SIZE] /* = { NULL, ..., NULL } */; /* This lock protects the struniq_hash_table against multiple simultaneous insertions. */ gl_lock_define_initialized(static, struniq_lock) /* Store a copy of the given string in a string pool with indefinite extent. Return a pointer to this copy. */ static const char * struniq (const char *string) { size_t hashcode = string_hash (string); size_t slot = hashcode % HASH_TABLE_SIZE; size_t size; struct hash_node *new_node; struct hash_node *p; for (p = struniq_hash_table[slot]; p != NULL; p = p->next) if (strcmp (p->contents, string) == 0) return p->contents; size = strlen (string) + 1; new_node = (struct hash_node *) malloc (FLEXSIZEOF (struct hash_node, contents, size)); if (new_node == NULL) /* Out of memory. Return a statically allocated string. */ return "C"; memcpy (new_node->contents, string, size); /* Lock while inserting new_node. */ gl_lock_lock (struniq_lock); /* Check whether another thread already added the string while we were waiting on the lock. */ for (p = struniq_hash_table[slot]; p != NULL; p = p->next) if (strcmp (p->contents, string) == 0) { free (new_node); new_node = p; goto done; } /* Really insert new_node into the hash table. Fill new_node entirely first, because other threads may be iterating over the linked list. */ new_node->next = struniq_hash_table[slot]; struniq_hash_table[slot] = new_node; done: /* Unlock after new_node is inserted. */ gl_lock_unlock (struniq_lock); return new_node->contents; } #endif #if defined IN_LIBINTL || HAVE_USELOCALE /* Like gl_locale_name_thread, except that the result is not in storage of indefinite extent. */ # if !defined IN_LIBINTL static # endif const char * gl_locale_name_thread_unsafe (int category, const char *categoryname) { # if HAVE_USELOCALE { locale_t thread_locale = uselocale (NULL); if (thread_locale != LC_GLOBAL_LOCALE) { # if __GLIBC__ >= 2 && !defined __UCLIBC__ /* Work around an incorrect definition of the _NL_LOCALE_NAME macro in glibc < 2.12. See . */ const char *name = nl_langinfo (_NL_ITEM ((category), _NL_ITEM_INDEX (-1))); if (name[0] == '\0') /* Fallback code for glibc < 2.4, which did not implement nl_langinfo (_NL_LOCALE_NAME (category)). */ name = thread_locale->__names[category]; return name; # elif (defined __FreeBSD__ || defined __DragonFly__) || (defined __APPLE__ && defined __MACH__) /* FreeBSD, Mac OS X */ int mask; switch (category) { case LC_CTYPE: mask = LC_CTYPE_MASK; break; case LC_NUMERIC: mask = LC_NUMERIC_MASK; break; case LC_TIME: mask = LC_TIME_MASK; break; case LC_COLLATE: mask = LC_COLLATE_MASK; break; case LC_MONETARY: mask = LC_MONETARY_MASK; break; case LC_MESSAGES: mask = LC_MESSAGES_MASK; break; default: /* We shouldn't get here. */ return ""; } return querylocale (mask, thread_locale); # elif defined __sun && HAVE_GETLOCALENAME_L /* Solaris >= 12. */ return getlocalename_l (category, thread_locale); # elif defined __CYGWIN__ /* Cygwin < 2.6 lacks uselocale and thread-local locales altogether. Cygwin <= 2.6.1 lacks NL_LOCALE_NAME, requiring peeking inside an opaque struct. */ # ifdef NL_LOCALE_NAME return nl_langinfo_l (NL_LOCALE_NAME (category), thread_locale); # else /* FIXME: Remove when we can assume new-enough Cygwin. */ struct __locale_t { char categories[7][32]; }; return ((struct __locale_t *) thread_locale)->categories[category]; # endif # elif defined __ANDROID__ return MB_CUR_MAX == 4 ? "C.UTF-8" : "C"; # endif } } # endif return NULL; } #endif const char * gl_locale_name_thread (int category, const char *categoryname) { #if HAVE_USELOCALE const char *name = gl_locale_name_thread_unsafe (category, categoryname); if (name != NULL) return struniq (name); #elif defined WINDOWS_NATIVE if (LC_MIN <= category && category <= LC_MAX) { char *locname = setlocale (category, NULL); LCID lcid = 0; /* If CATEGORY is LC_ALL, the result might be a semi-colon separated list of locales. We need only one, so we take the one corresponding to LC_CTYPE, as the most important for character translations. */ if (strchr (locname, ';')) locname = setlocale (LC_CTYPE, NULL); /* Convert locale name to LCID. We don't want to use LocaleNameToLCID because (a) it is only available since Vista, and (b) it doesn't accept locale names returned by 'setlocale'. */ lcid = get_lcid (locname); if (lcid > 0) return gl_locale_name_from_win32_LCID (lcid); } #endif return NULL; } /* XPG3 defines the result of 'setlocale (category, NULL)' as: "Directs 'setlocale()' to query 'category' and return the current setting of 'local'." However it does not specify the exact format. Neither do SUSV2 and ISO C 99. So we can use this feature only on selected systems (e.g. those using GNU C Library). */ #if defined _LIBC || ((defined __GLIBC__ && __GLIBC__ >= 2) && !defined __UCLIBC__) # define HAVE_LOCALE_NULL #endif const char * gl_locale_name_posix (int category, const char *categoryname) { /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. On some systems this can be done by the 'setlocale' function itself. */ #if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL return setlocale (category, NULL); #else /* On other systems we ignore what setlocale reports and instead look at the environment variables directly. This is necessary 1. on systems which have a facility for customizing the default locale (Mac OS X, native Windows, Cygwin) and where the system's setlocale() function ignores this default locale (Mac OS X, Cygwin), in two cases: a. when the user missed to use the setlocale() override from libintl (for example by not including ), b. when setlocale supports only the "C" locale, such as on Cygwin 1.5.x. In this case even the override from libintl cannot help. 2. on all systems where setlocale supports only the "C" locale. */ /* Strictly speaking, it is a POSIX violation to look at the environment variables regardless whether setlocale has been called or not. POSIX says: "For C-language programs, the POSIX locale shall be the default locale when the setlocale() function is not called." But we assume that all programs that use internationalized APIs call setlocale (LC_ALL, ""). */ return gl_locale_name_environ (category, categoryname); #endif } const char * gl_locale_name_environ (int category, const char *categoryname) { const char *retval; /* Setting of LC_ALL overrides all other. */ retval = getenv ("LC_ALL"); if (retval != NULL && retval[0] != '\0') return retval; /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval != NULL && retval[0] != '\0') return retval; /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval != NULL && retval[0] != '\0') { #if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer. Ignore invalid LANG value set by the Terminal application. */ if (strcmp (retval, "UTF-8") != 0) #endif #if defined __CYGWIN__ /* Cygwin. Ignore dummy LANG value set by ~/.profile. */ if (strcmp (retval, "C.UTF-8") != 0) #endif return retval; } return NULL; } const char * gl_locale_name_default (void) { /* POSIX:2001 says: "All implementations shall define a locale as the default locale, to be invoked when no environment variables are set, or set to the empty string. This default locale can be the POSIX locale or any other implementation-defined locale. Some implementations may provide facilities for local installation administrators to set the default locale, customizing it for each location. POSIX:2001 does not require such a facility. The systems with such a facility are Mac OS X and Windows: They provide a GUI that allows the user to choose a locale. - On Mac OS X, by default, none of LC_* or LANG are set. Starting with Mac OS X 10.4 or 10.5, LANG is set for processes launched by the 'Terminal' application (but sometimes to an incorrect value "UTF-8"). When no environment variable is set, setlocale (LC_ALL, "") uses the "C" locale. - On native Windows, by default, none of LC_* or LANG are set. When no environment variable is set, setlocale (LC_ALL, "") uses the locale chosen by the user. - On Cygwin 1.5.x, by default, none of LC_* or LANG are set. When no environment variable is set, setlocale (LC_ALL, "") uses the "C" locale. - On Cygwin 1.7, by default, LANG is set to "C.UTF-8" when the default ~/.profile is executed. When no environment variable is set, setlocale (LC_ALL, "") uses the "C.UTF-8" locale, which operates in the same way as the "C" locale. */ #if !(HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE || defined WINDOWS_NATIVE || defined __CYGWIN__) /* The system does not have a way of setting the locale, other than the POSIX specified environment variables. We use C as default locale. */ return "C"; #else /* Return an XPG style locale name language[_territory][@modifier]. Don't even bother determining the codeset; it's not useful in this context, because message catalogs are not specific to a single codeset. */ # if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer */ { /* Cache the locale name, since CoreFoundation calls are expensive. */ static const char *cached_localename; if (cached_localename == NULL) { char namebuf[256]; # if HAVE_CFLOCALECOPYCURRENT /* Mac OS X 10.3 or newer */ CFLocaleRef locale = CFLocaleCopyCurrent (); CFStringRef name = CFLocaleGetIdentifier (locale); if (CFStringGetCString (name, namebuf, sizeof (namebuf), kCFStringEncodingASCII)) { gl_locale_name_canonicalize (namebuf); cached_localename = strdup (namebuf); } CFRelease (locale); # elif HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer */ CFTypeRef value = CFPreferencesCopyAppValue (CFSTR ("AppleLocale"), kCFPreferencesCurrentApplication); if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID () && CFStringGetCString ((CFStringRef)value, namebuf, sizeof (namebuf), kCFStringEncodingASCII)) { gl_locale_name_canonicalize (namebuf); cached_localename = strdup (namebuf); } # endif if (cached_localename == NULL) cached_localename = "C"; } return cached_localename; } # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ { LCID lcid; /* Use native Windows API locale ID. */ lcid = GetThreadLocale (); return gl_locale_name_from_win32_LCID (lcid); } # endif #endif } /* Determine the current locale's name, and canonicalize it into XPG syntax language[_territory][.codeset][@modifier] The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ const char * gl_locale_name (int category, const char *categoryname) { const char *retval; retval = gl_locale_name_thread (category, categoryname); if (retval != NULL) return retval; retval = gl_locale_name_posix (category, categoryname); if (retval != NULL) return retval; return gl_locale_name_default (); } gnuastro-0.5/bootstrapped/tests/fd-hook.c0000644000175000017500000000700413217200022015472 00000000000000/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2009. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include "fd-hook.h" #include /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* The first and last link in the doubly linked list. Initially the list is empty. */ static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL }; int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd); else return remaining_list->private_close_fn (remaining_list->private_next, primary, fd); } int execute_all_close_hooks (gl_close_fn primary, int fd) { return execute_close_hooks (anchor.private_next, primary, fd); } int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd, request, arg); else return remaining_list->private_ioctl_fn (remaining_list->private_next, primary, fd, request, arg); } int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg) { return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg); } void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link) { if (close_hook == NULL) close_hook = execute_close_hooks; if (ioctl_hook == NULL) ioctl_hook = execute_ioctl_hooks; if (link->private_next == NULL && link->private_prev == NULL) { /* Add the link to the doubly linked list. */ link->private_next = anchor.private_next; link->private_prev = &anchor; link->private_close_fn = close_hook; link->private_ioctl_fn = ioctl_hook; anchor.private_next->private_prev = link; anchor.private_next = link; } else { /* The link is already in use. */ if (link->private_close_fn != close_hook || link->private_ioctl_fn != ioctl_hook) abort (); } } void unregister_fd_hook (struct fd_hook *link) { struct fd_hook *next = link->private_next; struct fd_hook *prev = link->private_prev; if (next != NULL && prev != NULL) { /* The link is in use. Remove it from the doubly linked list. */ prev->private_next = next; next->private_prev = prev; /* Clear the link, to mark it unused. */ link->private_next = NULL; link->private_prev = NULL; link->private_close_fn = NULL; link->private_ioctl_fn = NULL; } } #endif gnuastro-0.5/bootstrapped/tests/cloexec.c0000644000175000017500000000442713217200022015573 00000000000000/* cloexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 1991, 2004-2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . The code is taken from glibc/manual/llio.texi */ #include #include "cloexec.h" #include #include #include /* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, or clear the flag if VALUE is false. Return 0 on success, or -1 on error with 'errno' set. Note that on MingW, this function does NOT protect DESC from being inherited into spawned children. Instead, either use dup_cloexec followed by closing the original DESC, or use interfaces such as open or pipe2 that accept flags like O_CLOEXEC to create DESC non-inheritable in the first place. */ int set_cloexec_flag (int desc, bool value) { #ifdef F_SETFD int flags = fcntl (desc, F_GETFD, 0); if (0 <= flags) { int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC); if (flags == newflags || fcntl (desc, F_SETFD, newflags) != -1) return 0; } return -1; #else /* !F_SETFD */ /* Use dup2 to reject invalid file descriptors; the cloexec flag will be unaffected. */ if (desc < 0) { errno = EBADF; return -1; } if (dup2 (desc, desc) < 0) /* errno is EBADF here. */ return -1; /* There is nothing we can do on this kind of platform. Punt. */ return 0; #endif /* !F_SETFD */ } /* Duplicates a file handle FD, while marking the copy to be closed prior to exec or spawn. Returns -1 and sets errno if FD could not be duplicated. */ int dup_cloexec (int fd) { return fcntl (fd, F_DUPFD_CLOEXEC, 0); } gnuastro-0.5/bootstrapped/tests/c-strncasecmp.c0000644000175000017500000000310713217200022016705 00000000000000/* c-strncasecmp.c -- case insensitive string comparator in C locale Copyright (C) 1998-1999, 2005-2006, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include "c-strcase.h" #include #include "c-ctype.h" int c_strncasecmp (const char *s1, const char *s2, size_t n) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2 || n == 0) return 0; do { c1 = c_tolower (*p1); c2 = c_tolower (*p2); if (--n == 0 || c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } gnuastro-0.5/bootstrapped/tests/c-strcasecmp.c0000644000175000017500000000304513217200022016530 00000000000000/* c-strcasecmp.c -- case insensitive string comparator in C locale Copyright (C) 1998-1999, 2005-2006, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include "c-strcase.h" #include #include "c-ctype.h" int c_strcasecmp (const char *s1, const char *s2) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2) return 0; do { c1 = c_tolower (*p1); c2 = c_tolower (*p2); if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } gnuastro-0.5/bootstrapped/tests/c-strcase.h0000644000175000017500000000401513217200022016033 00000000000000/* Case-insensitive string comparison functions in C locale. Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef C_STRCASE_H #define C_STRCASE_H #include /* The functions defined in this file assume the "C" locale and a character set without diacritics (ASCII-US or EBCDIC-US or something like that). Even if the "C" locale on a particular system is an extension of the ASCII character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it is ISO-8859-1), the functions in this file recognize only the ASCII characters. More precisely, one of the string arguments must be an ASCII string; the other one can also contain non-ASCII characters (but then the comparison result will be nonzero). */ #ifdef __cplusplus extern "C" { #endif /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. */ extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE; /* Compare no more than N characters of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. */ extern int c_strncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* C_STRCASE_H */ gnuastro-0.5/bootstrapped/tests/binary-io.c0000644000175000017500000000177713217200022016047 00000000000000/* Binary mode I/O. Copyright 2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #define BINARY_IO_INLINE _GL_EXTERN_INLINE #include "binary-io.h" #if defined __DJGPP__ || defined __EMX__ # include # include int __gl_setmode_check (int fd) { if (isatty (fd)) { errno = EINVAL; return -1; } else return 0; } #endif gnuastro-0.5/bootstrapped/tests/binary-io.h0000644000175000017500000000474713217200022016054 00000000000000/* Binary mode I/O. Copyright (C) 2001, 2003, 2005, 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _BINARY_H #define _BINARY_H /* For systems that distinguish between text and binary I/O. O_BINARY is guaranteed by the gnulib . */ #include /* The MSVC7 doesn't like to be included after '#define fileno ...', so we include it here first. */ #include #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef BINARY_IO_INLINE # define BINARY_IO_INLINE _GL_INLINE #endif #if O_BINARY # if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ # include /* declares setmode() */ # define __gl_setmode setmode # else # define __gl_setmode _setmode # undef fileno # define fileno _fileno # endif #else /* On reasonable systems, binary I/O is the only choice. */ /* Use a function rather than a macro, to avoid gcc warnings "warning: statement with no effect". */ BINARY_IO_INLINE int __gl_setmode (int fd, int mode) { (void) fd; (void) mode; return O_BINARY; } #endif #if defined __DJGPP__ || defined __EMX__ extern int __gl_setmode_check (int); #else BINARY_IO_INLINE int __gl_setmode_check (int fd) { return 0; } #endif /* Set FD's mode to MODE, which should be either O_TEXT or O_BINARY. Return the old mode if successful, -1 (setting errno) on failure. Ordinarily this function would be called 'setmode', since that is its name on MS-Windows, but it is called 'set_binary_mode' here to avoid colliding with a BSD function of another name. */ BINARY_IO_INLINE int set_binary_mode (int fd, int mode) { int r = __gl_setmode_check (fd); return r != 0 ? r : __gl_setmode (fd, mode); } /* This macro is obsolescent. */ #define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY)) _GL_INLINE_HEADER_END #endif /* _BINARY_H */ gnuastro-0.5/bootstrapped/tests/Makefile.in0000644000175000017500000074142213217217706016076 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. 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@ 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@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-argp$(EXEEXT) test-argp-2.sh test-arpa_inet$(EXEEXT) \ test-binary-io.sh test-bind$(EXEEXT) test-btowc1.sh \ test-btowc2.sh test-c-ctype$(EXEEXT) test-c-strcase.sh \ test-cloexec$(EXEEXT) test-close$(EXEEXT) \ test-connect$(EXEEXT) test-ctype$(EXEEXT) test-dup2$(EXEEXT) \ test-environ$(EXEEXT) test-errno$(EXEEXT) \ test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) test-fdopen$(EXEEXT) \ test-fgetc$(EXEEXT) test-float$(EXEEXT) test-fputc$(EXEEXT) \ test-fread$(EXEEXT) test-fstat$(EXEEXT) test-ftruncate.sh \ test-func$(EXEEXT) test-fwrite$(EXEEXT) \ test-getcwd-lgpl$(EXEEXT) test-getdelim$(EXEEXT) \ test-getdtablesize$(EXEEXT) test-getline$(EXEEXT) \ test-getopt-gnu$(EXEEXT) test-getopt-posix$(EXEEXT) \ test-getprogname$(EXEEXT) test-gettimeofday$(EXEEXT) \ test-ignore-value$(EXEEXT) test-inet_pton$(EXEEXT) \ test-intprops$(EXEEXT) test-inttypes$(EXEEXT) \ test-ioctl$(EXEEXT) test-isblank$(EXEEXT) \ test-isnand-nolibm$(EXEEXT) test-isnanf-nolibm$(EXEEXT) \ test-isnanl-nolibm$(EXEEXT) test-iswblank$(EXEEXT) \ test-langinfo$(EXEEXT) test-limits-h$(EXEEXT) \ test-listen$(EXEEXT) test-locale$(EXEEXT) \ test-localeconv$(EXEEXT) test-localename$(EXEEXT) \ test-rwlock1$(EXEEXT) test-lock$(EXEEXT) test-lstat$(EXEEXT) \ test-malloc-gnu$(EXEEXT) test-malloca$(EXEEXT) \ test-math$(EXEEXT) test-mbrtowc1.sh test-mbrtowc2.sh \ test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc5.sh \ test-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh \ test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh \ test-mbrtowc-w32-5.sh test-mbschr.sh test-mbsinit.sh \ test-mbspbrk.sh test-mbsspn.sh test-memchr$(EXEEXT) \ test-nanosleep$(EXEEXT) test-netinet_in$(EXEEXT) \ test-nl_langinfo.sh test-open$(EXEEXT) test-pathmax$(EXEEXT) \ test-perror.sh test-perror2$(EXEEXT) test-pipe$(EXEEXT) \ test-pthread_sigmask1$(EXEEXT) test-pthread_sigmask2$(EXEEXT) \ test-raise$(EXEEXT) test-rawmemchr$(EXEEXT) \ test-regex$(EXEEXT) test-select$(EXEEXT) test-select-in.sh \ test-select-out.sh test-setenv$(EXEEXT) test-setlocale1.sh \ test-setlocale2.sh test-setsockopt$(EXEEXT) \ test-sigaction$(EXEEXT) test-signal-h$(EXEEXT) \ test-signbit$(EXEEXT) test-sigprocmask$(EXEEXT) \ test-sleep$(EXEEXT) test-sockets$(EXEEXT) test-stat$(EXEEXT) \ test-stat-time$(EXEEXT) test-stdalign$(EXEEXT) \ test-stdbool$(EXEEXT) test-stddef$(EXEEXT) \ test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ test-strchrnul$(EXEEXT) test-strerror$(EXEEXT) \ test-strerror_r$(EXEEXT) test-string$(EXEEXT) \ test-strings$(EXEEXT) test-strnlen$(EXEEXT) \ test-strtod$(EXEEXT) test-symlink$(EXEEXT) \ test-sys_ioctl$(EXEEXT) test-sys_select$(EXEEXT) \ test-sys_socket$(EXEEXT) test-sys_stat$(EXEEXT) \ test-sys_time$(EXEEXT) test-sys_types$(EXEEXT) \ test-sys_uio$(EXEEXT) test-sysexits$(EXEEXT) test-init.sh \ test-thread_self$(EXEEXT) test-thread_create$(EXEEXT) \ test-time$(EXEEXT) test-unistd$(EXEEXT) test-uc_width$(EXEEXT) \ uniwidth/test-uc_width2.sh test-unsetenv$(EXEEXT) \ test-usleep$(EXEEXT) test-vasnprintf$(EXEEXT) \ test-verify$(EXEEXT) test-verify.sh test-vsnprintf$(EXEEXT) \ test-wchar$(EXEEXT) test-wcrtomb.sh test-wcrtomb-w32-1.sh \ test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh \ test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh \ test-wctype-h$(EXEEXT) test-wcwidth$(EXEEXT) XFAIL_TESTS = noinst_PROGRAMS = check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-argp$(EXEEXT) test-arpa_inet$(EXEEXT) \ test-binary-io$(EXEEXT) test-bind$(EXEEXT) test-btowc$(EXEEXT) \ test-c-ctype$(EXEEXT) test-c-strcasecmp$(EXEEXT) \ test-c-strncasecmp$(EXEEXT) test-cloexec$(EXEEXT) \ test-close$(EXEEXT) test-connect$(EXEEXT) test-ctype$(EXEEXT) \ test-dup2$(EXEEXT) test-environ$(EXEEXT) test-errno$(EXEEXT) \ test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) test-fdopen$(EXEEXT) \ test-fgetc$(EXEEXT) test-float$(EXEEXT) test-fputc$(EXEEXT) \ test-fread$(EXEEXT) test-fstat$(EXEEXT) \ test-ftruncate$(EXEEXT) test-func$(EXEEXT) \ test-fwrite$(EXEEXT) test-getcwd-lgpl$(EXEEXT) \ test-getdelim$(EXEEXT) test-getdtablesize$(EXEEXT) \ test-getline$(EXEEXT) test-getopt-gnu$(EXEEXT) \ test-getopt-posix$(EXEEXT) test-getprogname$(EXEEXT) \ test-gettimeofday$(EXEEXT) test-ignore-value$(EXEEXT) \ test-inet_pton$(EXEEXT) test-intprops$(EXEEXT) \ test-inttypes$(EXEEXT) test-ioctl$(EXEEXT) \ test-isblank$(EXEEXT) test-isnand-nolibm$(EXEEXT) \ test-isnanf-nolibm$(EXEEXT) test-isnanl-nolibm$(EXEEXT) \ test-iswblank$(EXEEXT) test-langinfo$(EXEEXT) \ test-limits-h$(EXEEXT) test-listen$(EXEEXT) \ test-locale$(EXEEXT) test-localeconv$(EXEEXT) \ test-localename$(EXEEXT) test-rwlock1$(EXEEXT) \ test-lock$(EXEEXT) test-lstat$(EXEEXT) \ test-malloc-gnu$(EXEEXT) test-malloca$(EXEEXT) \ test-math$(EXEEXT) test-mbrtowc$(EXEEXT) \ test-mbrtowc-w32$(EXEEXT) test-mbschr$(EXEEXT) \ test-mbsinit$(EXEEXT) test-mbspbrk$(EXEEXT) \ test-mbsspn$(EXEEXT) test-memchr$(EXEEXT) \ test-nanosleep$(EXEEXT) test-netinet_in$(EXEEXT) \ test-nl_langinfo$(EXEEXT) test-open$(EXEEXT) \ test-pathmax$(EXEEXT) test-perror$(EXEEXT) \ test-perror2$(EXEEXT) test-pipe$(EXEEXT) \ test-pthread_sigmask1$(EXEEXT) test-pthread_sigmask2$(EXEEXT) \ test-raise$(EXEEXT) test-rawmemchr$(EXEEXT) \ test-regex$(EXEEXT) test-select$(EXEEXT) \ test-select-fd$(EXEEXT) test-select-stdin$(EXEEXT) \ test-setenv$(EXEEXT) test-setlocale1$(EXEEXT) \ test-setlocale2$(EXEEXT) test-setsockopt$(EXEEXT) \ test-sigaction$(EXEEXT) test-signal-h$(EXEEXT) \ test-signbit$(EXEEXT) test-sigprocmask$(EXEEXT) \ test-sleep$(EXEEXT) test-sockets$(EXEEXT) test-stat$(EXEEXT) \ test-stat-time$(EXEEXT) test-stdalign$(EXEEXT) \ test-stdbool$(EXEEXT) test-stddef$(EXEEXT) \ test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ test-strchrnul$(EXEEXT) test-strerror$(EXEEXT) \ test-strerror_r$(EXEEXT) test-string$(EXEEXT) \ test-strings$(EXEEXT) test-strnlen$(EXEEXT) \ test-strtod$(EXEEXT) test-symlink$(EXEEXT) \ test-sys_ioctl$(EXEEXT) test-sys_select$(EXEEXT) \ test-sys_socket$(EXEEXT) test-sys_stat$(EXEEXT) \ test-sys_time$(EXEEXT) test-sys_types$(EXEEXT) \ test-sys_uio$(EXEEXT) test-sysexits$(EXEEXT) \ test-thread_self$(EXEEXT) test-thread_create$(EXEEXT) \ test-time$(EXEEXT) test-unistd$(EXEEXT) test-uc_width$(EXEEXT) \ test-uc_width2$(EXEEXT) test-unsetenv$(EXEEXT) \ test-usleep$(EXEEXT) test-vasnprintf$(EXEEXT) \ test-verify$(EXEEXT) test-vsnprintf$(EXEEXT) \ test-wchar$(EXEEXT) test-wcrtomb$(EXEEXT) \ test-wcrtomb-w32$(EXEEXT) test-wctype-h$(EXEEXT) \ test-wcwidth$(EXEEXT) EXTRA_PROGRAMS = test-verify-try$(EXEEXT) subdir = bootstrapped/tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libtests_a_AR = $(AR) $(ARFLAGS) am__DEPENDENCIES_1 = am__dirstamp = $(am__leading_dot)dirstamp am_libtests_a_OBJECTS = binary-io.$(OBJEXT) c-strcasecmp.$(OBJEXT) \ c-strncasecmp.$(OBJEXT) cloexec.$(OBJEXT) fd-hook.$(OBJEXT) \ localename.$(OBJEXT) malloca.$(OBJEXT) sig-handler.$(OBJEXT) \ sockets.$(OBJEXT) stat-time.$(OBJEXT) sys_socket.$(OBJEXT) \ glthread/thread.$(OBJEXT) libtests_a_OBJECTS = $(am_libtests_a_OBJECTS) PROGRAMS = $(noinst_PROGRAMS) test_accept_SOURCES = test-accept.c test_accept_OBJECTS = test-accept.$(OBJEXT) am__DEPENDENCIES_2 = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_accept_DEPENDENCIES = $(am__DEPENDENCIES_2) 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 = test_alloca_opt_SOURCES = test-alloca-opt.c test_alloca_opt_OBJECTS = test-alloca-opt.$(OBJEXT) test_alloca_opt_LDADD = $(LDADD) test_alloca_opt_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_argp_SOURCES = test-argp.c test_argp_OBJECTS = test-argp.$(OBJEXT) test_argp_DEPENDENCIES = $(am__DEPENDENCIES_2) test_arpa_inet_SOURCES = test-arpa_inet.c test_arpa_inet_OBJECTS = test-arpa_inet.$(OBJEXT) test_arpa_inet_LDADD = $(LDADD) test_arpa_inet_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_binary_io_SOURCES = test-binary-io.c test_binary_io_OBJECTS = test-binary-io.$(OBJEXT) test_binary_io_LDADD = $(LDADD) test_binary_io_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_bind_SOURCES = test-bind.c test_bind_OBJECTS = test-bind.$(OBJEXT) test_bind_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_btowc_SOURCES = test-btowc.c test_btowc_OBJECTS = test-btowc.$(OBJEXT) test_btowc_LDADD = $(LDADD) test_btowc_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_c_ctype_SOURCES = test-c-ctype.c test_c_ctype_OBJECTS = test-c-ctype.$(OBJEXT) test_c_ctype_LDADD = $(LDADD) test_c_ctype_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_c_strcasecmp_SOURCES = test-c-strcasecmp.c test_c_strcasecmp_OBJECTS = test-c-strcasecmp.$(OBJEXT) test_c_strcasecmp_LDADD = $(LDADD) test_c_strcasecmp_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_c_strncasecmp_SOURCES = test-c-strncasecmp.c test_c_strncasecmp_OBJECTS = test-c-strncasecmp.$(OBJEXT) test_c_strncasecmp_LDADD = $(LDADD) test_c_strncasecmp_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_cloexec_SOURCES = test-cloexec.c test_cloexec_OBJECTS = test-cloexec.$(OBJEXT) test_cloexec_LDADD = $(LDADD) test_cloexec_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_close_SOURCES = test-close.c test_close_OBJECTS = test-close.$(OBJEXT) test_close_LDADD = $(LDADD) test_close_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_connect_SOURCES = test-connect.c test_connect_OBJECTS = test-connect.$(OBJEXT) test_connect_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_ctype_SOURCES = test-ctype.c test_ctype_OBJECTS = test-ctype.$(OBJEXT) test_ctype_LDADD = $(LDADD) test_ctype_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_dup2_SOURCES = test-dup2.c test_dup2_OBJECTS = test-dup2.$(OBJEXT) test_dup2_LDADD = $(LDADD) test_dup2_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_environ_SOURCES = test-environ.c test_environ_OBJECTS = test-environ.$(OBJEXT) test_environ_LDADD = $(LDADD) test_environ_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_errno_SOURCES = test-errno.c test_errno_OBJECTS = test-errno.$(OBJEXT) test_errno_LDADD = $(LDADD) test_errno_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_fcntl_SOURCES = test-fcntl.c test_fcntl_OBJECTS = test-fcntl.$(OBJEXT) test_fcntl_LDADD = $(LDADD) test_fcntl_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_fcntl_h_SOURCES = test-fcntl-h.c test_fcntl_h_OBJECTS = test-fcntl-h.$(OBJEXT) test_fcntl_h_LDADD = $(LDADD) test_fcntl_h_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_fdopen_SOURCES = test-fdopen.c test_fdopen_OBJECTS = test-fdopen.$(OBJEXT) test_fdopen_LDADD = $(LDADD) test_fdopen_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_fgetc_SOURCES = test-fgetc.c test_fgetc_OBJECTS = test-fgetc.$(OBJEXT) test_fgetc_LDADD = $(LDADD) test_fgetc_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_float_SOURCES = test-float.c test_float_OBJECTS = test-float.$(OBJEXT) test_float_LDADD = $(LDADD) test_float_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_fputc_SOURCES = test-fputc.c test_fputc_OBJECTS = test-fputc.$(OBJEXT) test_fputc_LDADD = $(LDADD) test_fputc_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_fread_SOURCES = test-fread.c test_fread_OBJECTS = test-fread.$(OBJEXT) test_fread_LDADD = $(LDADD) test_fread_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_fstat_SOURCES = test-fstat.c test_fstat_OBJECTS = test-fstat.$(OBJEXT) test_fstat_LDADD = $(LDADD) test_fstat_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_ftruncate_SOURCES = test-ftruncate.c test_ftruncate_OBJECTS = test-ftruncate.$(OBJEXT) test_ftruncate_LDADD = $(LDADD) test_ftruncate_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_func_SOURCES = test-func.c test_func_OBJECTS = test-func.$(OBJEXT) test_func_LDADD = $(LDADD) test_func_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_fwrite_SOURCES = test-fwrite.c test_fwrite_OBJECTS = test-fwrite.$(OBJEXT) test_fwrite_LDADD = $(LDADD) test_fwrite_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_getcwd_lgpl_SOURCES = test-getcwd-lgpl.c test_getcwd_lgpl_OBJECTS = test-getcwd-lgpl.$(OBJEXT) test_getcwd_lgpl_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_getdelim_SOURCES = test-getdelim.c test_getdelim_OBJECTS = test-getdelim.$(OBJEXT) test_getdelim_LDADD = $(LDADD) test_getdelim_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_getdtablesize_SOURCES = test-getdtablesize.c test_getdtablesize_OBJECTS = test-getdtablesize.$(OBJEXT) test_getdtablesize_LDADD = $(LDADD) test_getdtablesize_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_getline_SOURCES = test-getline.c test_getline_OBJECTS = test-getline.$(OBJEXT) test_getline_LDADD = $(LDADD) test_getline_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_getopt_gnu_SOURCES = test-getopt-gnu.c test_getopt_gnu_OBJECTS = test-getopt-gnu.$(OBJEXT) test_getopt_gnu_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_getopt_posix_SOURCES = test-getopt-posix.c test_getopt_posix_OBJECTS = test-getopt-posix.$(OBJEXT) test_getopt_posix_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_getprogname_SOURCES = test-getprogname.c test_getprogname_OBJECTS = test-getprogname.$(OBJEXT) test_getprogname_DEPENDENCIES = $(am__DEPENDENCIES_2) test_gettimeofday_SOURCES = test-gettimeofday.c test_gettimeofday_OBJECTS = test-gettimeofday.$(OBJEXT) test_gettimeofday_LDADD = $(LDADD) test_gettimeofday_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_ignore_value_SOURCES = test-ignore-value.c test_ignore_value_OBJECTS = test-ignore-value.$(OBJEXT) test_ignore_value_LDADD = $(LDADD) test_ignore_value_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_inet_pton_SOURCES = test-inet_pton.c test_inet_pton_OBJECTS = test-inet_pton.$(OBJEXT) test_inet_pton_DEPENDENCIES = $(am__DEPENDENCIES_2) test_intprops_SOURCES = test-intprops.c test_intprops_OBJECTS = test-intprops.$(OBJEXT) test_intprops_LDADD = $(LDADD) test_intprops_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_inttypes_SOURCES = test-inttypes.c test_inttypes_OBJECTS = test-inttypes.$(OBJEXT) test_inttypes_LDADD = $(LDADD) test_inttypes_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_ioctl_SOURCES = test-ioctl.c test_ioctl_OBJECTS = test-ioctl.$(OBJEXT) test_ioctl_LDADD = $(LDADD) test_ioctl_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_isblank_SOURCES = test-isblank.c test_isblank_OBJECTS = test-isblank.$(OBJEXT) test_isblank_LDADD = $(LDADD) test_isblank_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_isnand_nolibm_SOURCES = test-isnand-nolibm.c test_isnand_nolibm_OBJECTS = test-isnand-nolibm.$(OBJEXT) test_isnand_nolibm_LDADD = $(LDADD) test_isnand_nolibm_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_isnanf_nolibm_SOURCES = test-isnanf-nolibm.c test_isnanf_nolibm_OBJECTS = test-isnanf-nolibm.$(OBJEXT) test_isnanf_nolibm_LDADD = $(LDADD) test_isnanf_nolibm_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_isnanl_nolibm_SOURCES = test-isnanl-nolibm.c test_isnanl_nolibm_OBJECTS = test-isnanl-nolibm.$(OBJEXT) test_isnanl_nolibm_LDADD = $(LDADD) test_isnanl_nolibm_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_iswblank_SOURCES = test-iswblank.c test_iswblank_OBJECTS = test-iswblank.$(OBJEXT) test_iswblank_LDADD = $(LDADD) test_iswblank_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_langinfo_SOURCES = test-langinfo.c test_langinfo_OBJECTS = test-langinfo.$(OBJEXT) test_langinfo_LDADD = $(LDADD) test_langinfo_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_limits_h_SOURCES = test-limits-h.c test_limits_h_OBJECTS = test-limits-h.$(OBJEXT) test_limits_h_LDADD = $(LDADD) test_limits_h_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_listen_SOURCES = test-listen.c test_listen_OBJECTS = test-listen.$(OBJEXT) test_listen_DEPENDENCIES = $(am__DEPENDENCIES_2) test_locale_SOURCES = test-locale.c test_locale_OBJECTS = test-locale.$(OBJEXT) test_locale_LDADD = $(LDADD) test_locale_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_localeconv_SOURCES = test-localeconv.c test_localeconv_OBJECTS = test-localeconv.$(OBJEXT) test_localeconv_LDADD = $(LDADD) test_localeconv_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_localename_SOURCES = test-localename.c test_localename_OBJECTS = test-localename.$(OBJEXT) test_localename_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_lock_SOURCES = test-lock.c test_lock_OBJECTS = test-lock.$(OBJEXT) test_lock_DEPENDENCIES = $(am__DEPENDENCIES_2) test_lstat_SOURCES = test-lstat.c test_lstat_OBJECTS = test-lstat.$(OBJEXT) test_lstat_LDADD = $(LDADD) test_lstat_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_malloc_gnu_SOURCES = test-malloc-gnu.c test_malloc_gnu_OBJECTS = test-malloc-gnu.$(OBJEXT) test_malloc_gnu_LDADD = $(LDADD) test_malloc_gnu_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_malloca_SOURCES = test-malloca.c test_malloca_OBJECTS = test-malloca.$(OBJEXT) test_malloca_LDADD = $(LDADD) test_malloca_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_math_SOURCES = test-math.c test_math_OBJECTS = test-math.$(OBJEXT) test_math_LDADD = $(LDADD) test_math_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_mbrtowc_SOURCES = test-mbrtowc.c test_mbrtowc_OBJECTS = test-mbrtowc.$(OBJEXT) test_mbrtowc_LDADD = $(LDADD) test_mbrtowc_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_mbrtowc_w32_SOURCES = test-mbrtowc-w32.c test_mbrtowc_w32_OBJECTS = test-mbrtowc-w32.$(OBJEXT) test_mbrtowc_w32_LDADD = $(LDADD) test_mbrtowc_w32_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_mbschr_SOURCES = test-mbschr.c test_mbschr_OBJECTS = test-mbschr.$(OBJEXT) test_mbschr_LDADD = $(LDADD) test_mbschr_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_mbsinit_SOURCES = test-mbsinit.c test_mbsinit_OBJECTS = test-mbsinit.$(OBJEXT) test_mbsinit_LDADD = $(LDADD) test_mbsinit_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_mbspbrk_SOURCES = test-mbspbrk.c test_mbspbrk_OBJECTS = test-mbspbrk.$(OBJEXT) test_mbspbrk_LDADD = $(LDADD) test_mbspbrk_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_mbsspn_SOURCES = test-mbsspn.c test_mbsspn_OBJECTS = test-mbsspn.$(OBJEXT) test_mbsspn_LDADD = $(LDADD) test_mbsspn_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_memchr_SOURCES = test-memchr.c test_memchr_OBJECTS = test-memchr.$(OBJEXT) test_memchr_LDADD = $(LDADD) test_memchr_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_nanosleep_SOURCES = test-nanosleep.c test_nanosleep_OBJECTS = test-nanosleep.$(OBJEXT) test_nanosleep_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_netinet_in_SOURCES = test-netinet_in.c test_netinet_in_OBJECTS = test-netinet_in.$(OBJEXT) test_netinet_in_LDADD = $(LDADD) test_netinet_in_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_nl_langinfo_SOURCES = test-nl_langinfo.c test_nl_langinfo_OBJECTS = test-nl_langinfo.$(OBJEXT) test_nl_langinfo_LDADD = $(LDADD) test_nl_langinfo_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_open_SOURCES = test-open.c test_open_OBJECTS = test-open.$(OBJEXT) test_open_LDADD = $(LDADD) test_open_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_pathmax_SOURCES = test-pathmax.c test_pathmax_OBJECTS = test-pathmax.$(OBJEXT) test_pathmax_LDADD = $(LDADD) test_pathmax_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_perror_SOURCES = test-perror.c test_perror_OBJECTS = test-perror.$(OBJEXT) test_perror_LDADD = $(LDADD) test_perror_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_perror2_SOURCES = test-perror2.c test_perror2_OBJECTS = test-perror2.$(OBJEXT) test_perror2_LDADD = $(LDADD) test_perror2_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_pipe_SOURCES = test-pipe.c test_pipe_OBJECTS = test-pipe.$(OBJEXT) test_pipe_LDADD = $(LDADD) test_pipe_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_pthread_sigmask1_SOURCES = test-pthread_sigmask1.c test_pthread_sigmask1_OBJECTS = test-pthread_sigmask1.$(OBJEXT) test_pthread_sigmask1_DEPENDENCIES = $(am__DEPENDENCIES_2) test_pthread_sigmask2_SOURCES = test-pthread_sigmask2.c test_pthread_sigmask2_OBJECTS = test-pthread_sigmask2.$(OBJEXT) test_pthread_sigmask2_DEPENDENCIES = $(am__DEPENDENCIES_2) test_raise_SOURCES = test-raise.c test_raise_OBJECTS = test-raise.$(OBJEXT) test_raise_LDADD = $(LDADD) test_raise_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_rawmemchr_SOURCES = test-rawmemchr.c test_rawmemchr_OBJECTS = test-rawmemchr.$(OBJEXT) test_rawmemchr_LDADD = $(LDADD) test_rawmemchr_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_regex_SOURCES = test-regex.c test_regex_OBJECTS = test-regex.$(OBJEXT) test_regex_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_rwlock1_SOURCES = test-rwlock1.c test_rwlock1_OBJECTS = test-rwlock1.$(OBJEXT) test_rwlock1_DEPENDENCIES = $(am__DEPENDENCIES_2) test_select_SOURCES = test-select.c test_select_OBJECTS = test-select.$(OBJEXT) test_select_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_select_fd_SOURCES = test-select-fd.c test_select_fd_OBJECTS = test-select-fd.$(OBJEXT) test_select_fd_DEPENDENCIES = $(am__DEPENDENCIES_2) test_select_stdin_SOURCES = test-select-stdin.c test_select_stdin_OBJECTS = test-select-stdin.$(OBJEXT) test_select_stdin_DEPENDENCIES = $(am__DEPENDENCIES_2) test_setenv_SOURCES = test-setenv.c test_setenv_OBJECTS = test-setenv.$(OBJEXT) test_setenv_LDADD = $(LDADD) test_setenv_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_setlocale1_SOURCES = test-setlocale1.c test_setlocale1_OBJECTS = test-setlocale1.$(OBJEXT) test_setlocale1_LDADD = $(LDADD) test_setlocale1_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_setlocale2_SOURCES = test-setlocale2.c test_setlocale2_OBJECTS = test-setlocale2.$(OBJEXT) test_setlocale2_LDADD = $(LDADD) test_setlocale2_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_setsockopt_SOURCES = test-setsockopt.c test_setsockopt_OBJECTS = test-setsockopt.$(OBJEXT) test_setsockopt_DEPENDENCIES = $(am__DEPENDENCIES_2) test_sigaction_SOURCES = test-sigaction.c test_sigaction_OBJECTS = test-sigaction.$(OBJEXT) test_sigaction_LDADD = $(LDADD) test_sigaction_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_signal_h_SOURCES = test-signal-h.c test_signal_h_OBJECTS = test-signal-h.$(OBJEXT) test_signal_h_LDADD = $(LDADD) test_signal_h_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_signbit_SOURCES = test-signbit.c test_signbit_OBJECTS = test-signbit.$(OBJEXT) test_signbit_LDADD = $(LDADD) test_signbit_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sigprocmask_SOURCES = test-sigprocmask.c test_sigprocmask_OBJECTS = test-sigprocmask.$(OBJEXT) test_sigprocmask_LDADD = $(LDADD) test_sigprocmask_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sleep_SOURCES = test-sleep.c test_sleep_OBJECTS = test-sleep.$(OBJEXT) test_sleep_LDADD = $(LDADD) test_sleep_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_sockets_SOURCES = test-sockets.c test_sockets_OBJECTS = test-sockets.$(OBJEXT) test_sockets_DEPENDENCIES = $(am__DEPENDENCIES_2) test_stat_SOURCES = test-stat.c test_stat_OBJECTS = test-stat.$(OBJEXT) test_stat_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_stat_time_SOURCES = test-stat-time.c test_stat_time_OBJECTS = test-stat-time.$(OBJEXT) test_stat_time_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_stdalign_SOURCES = test-stdalign.c test_stdalign_OBJECTS = test-stdalign.$(OBJEXT) test_stdalign_LDADD = $(LDADD) test_stdalign_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_stdbool_SOURCES = test-stdbool.c test_stdbool_OBJECTS = test-stdbool.$(OBJEXT) test_stdbool_LDADD = $(LDADD) test_stdbool_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_stddef_SOURCES = test-stddef.c test_stddef_OBJECTS = test-stddef.$(OBJEXT) test_stddef_LDADD = $(LDADD) test_stddef_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_stdint_SOURCES = test-stdint.c test_stdint_OBJECTS = test-stdint.$(OBJEXT) test_stdint_LDADD = $(LDADD) test_stdint_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_stdio_SOURCES = test-stdio.c test_stdio_OBJECTS = test-stdio.$(OBJEXT) test_stdio_LDADD = $(LDADD) test_stdio_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_stdlib_SOURCES = test-stdlib.c test_stdlib_OBJECTS = test-stdlib.$(OBJEXT) test_stdlib_LDADD = $(LDADD) test_stdlib_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_strchrnul_SOURCES = test-strchrnul.c test_strchrnul_OBJECTS = test-strchrnul.$(OBJEXT) test_strchrnul_LDADD = $(LDADD) test_strchrnul_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strerror_SOURCES = test-strerror.c test_strerror_OBJECTS = test-strerror.$(OBJEXT) test_strerror_LDADD = $(LDADD) test_strerror_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strerror_r_SOURCES = test-strerror_r.c test_strerror_r_OBJECTS = test-strerror_r.$(OBJEXT) test_strerror_r_LDADD = $(LDADD) test_strerror_r_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_string_SOURCES = test-string.c test_string_OBJECTS = test-string.$(OBJEXT) test_string_LDADD = $(LDADD) test_string_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_strings_SOURCES = test-strings.c test_strings_OBJECTS = test-strings.$(OBJEXT) test_strings_LDADD = $(LDADD) test_strings_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strnlen_SOURCES = test-strnlen.c test_strnlen_OBJECTS = test-strnlen.$(OBJEXT) test_strnlen_LDADD = $(LDADD) test_strnlen_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strtod_SOURCES = test-strtod.c test_strtod_OBJECTS = test-strtod.$(OBJEXT) test_strtod_LDADD = $(LDADD) test_strtod_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_symlink_SOURCES = test-symlink.c test_symlink_OBJECTS = test-symlink.$(OBJEXT) test_symlink_LDADD = $(LDADD) test_symlink_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_ioctl_SOURCES = test-sys_ioctl.c test_sys_ioctl_OBJECTS = test-sys_ioctl.$(OBJEXT) test_sys_ioctl_LDADD = $(LDADD) test_sys_ioctl_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_select_SOURCES = test-sys_select.c test_sys_select_OBJECTS = test-sys_select.$(OBJEXT) test_sys_select_LDADD = $(LDADD) test_sys_select_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_socket_SOURCES = test-sys_socket.c test_sys_socket_OBJECTS = test-sys_socket.$(OBJEXT) test_sys_socket_LDADD = $(LDADD) test_sys_socket_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_stat_SOURCES = test-sys_stat.c test_sys_stat_OBJECTS = test-sys_stat.$(OBJEXT) test_sys_stat_LDADD = $(LDADD) test_sys_stat_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_time_SOURCES = test-sys_time.c test_sys_time_OBJECTS = test-sys_time.$(OBJEXT) test_sys_time_LDADD = $(LDADD) test_sys_time_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_types_SOURCES = test-sys_types.c test_sys_types_OBJECTS = test-sys_types.$(OBJEXT) test_sys_types_LDADD = $(LDADD) test_sys_types_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_uio_SOURCES = test-sys_uio.c test_sys_uio_OBJECTS = test-sys_uio.$(OBJEXT) test_sys_uio_LDADD = $(LDADD) test_sys_uio_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sysexits_SOURCES = test-sysexits.c test_sysexits_OBJECTS = test-sysexits.$(OBJEXT) test_sysexits_LDADD = $(LDADD) test_sysexits_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_thread_create_SOURCES = test-thread_create.c test_thread_create_OBJECTS = test-thread_create.$(OBJEXT) test_thread_create_DEPENDENCIES = $(am__DEPENDENCIES_2) test_thread_self_SOURCES = test-thread_self.c test_thread_self_OBJECTS = test-thread_self.$(OBJEXT) test_thread_self_DEPENDENCIES = $(am__DEPENDENCIES_2) test_time_SOURCES = test-time.c test_time_OBJECTS = test-time.$(OBJEXT) test_time_LDADD = $(LDADD) test_time_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) am_test_uc_width_OBJECTS = uniwidth/test-uc_width.$(OBJEXT) test_uc_width_OBJECTS = $(am_test_uc_width_OBJECTS) test_uc_width_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_uc_width2_OBJECTS = uniwidth/test-uc_width2.$(OBJEXT) test_uc_width2_OBJECTS = $(am_test_uc_width2_OBJECTS) test_uc_width2_DEPENDENCIES = $(am__DEPENDENCIES_2) test_unistd_SOURCES = test-unistd.c test_unistd_OBJECTS = test-unistd.$(OBJEXT) test_unistd_LDADD = $(LDADD) test_unistd_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_unsetenv_SOURCES = test-unsetenv.c test_unsetenv_OBJECTS = test-unsetenv.$(OBJEXT) test_unsetenv_LDADD = $(LDADD) test_unsetenv_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_usleep_SOURCES = test-usleep.c test_usleep_OBJECTS = test-usleep.$(OBJEXT) test_usleep_LDADD = $(LDADD) test_usleep_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_vasnprintf_SOURCES = test-vasnprintf.c test_vasnprintf_OBJECTS = test-vasnprintf.$(OBJEXT) test_vasnprintf_LDADD = $(LDADD) test_vasnprintf_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_verify_SOURCES = test-verify.c test_verify_OBJECTS = test-verify.$(OBJEXT) test_verify_LDADD = $(LDADD) test_verify_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_verify_try_SOURCES = test-verify-try.c test_verify_try_OBJECTS = test-verify-try.$(OBJEXT) test_verify_try_LDADD = $(LDADD) test_verify_try_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_vsnprintf_SOURCES = test-vsnprintf.c test_vsnprintf_OBJECTS = test-vsnprintf.$(OBJEXT) test_vsnprintf_LDADD = $(LDADD) test_vsnprintf_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_wchar_SOURCES = test-wchar.c test_wchar_OBJECTS = test-wchar.$(OBJEXT) test_wchar_LDADD = $(LDADD) test_wchar_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a $(am__DEPENDENCIES_1) test_wcrtomb_SOURCES = test-wcrtomb.c test_wcrtomb_OBJECTS = test-wcrtomb.$(OBJEXT) test_wcrtomb_LDADD = $(LDADD) test_wcrtomb_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_wcrtomb_w32_SOURCES = test-wcrtomb-w32.c test_wcrtomb_w32_OBJECTS = test-wcrtomb-w32.$(OBJEXT) test_wcrtomb_w32_LDADD = $(LDADD) test_wcrtomb_w32_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_wctype_h_SOURCES = test-wctype-h.c test_wctype_h_OBJECTS = test-wctype-h.$(OBJEXT) test_wctype_h_LDADD = $(LDADD) test_wctype_h_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_wcwidth_SOURCES = test-wcwidth.c test_wcwidth_OBJECTS = test-wcwidth.$(OBJEXT) test_wcwidth_LDADD = $(LDADD) test_wcwidth_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ test-accept.c test-alloca-opt.c test-argp.c test-arpa_inet.c \ test-binary-io.c test-bind.c test-btowc.c test-c-ctype.c \ test-c-strcasecmp.c test-c-strncasecmp.c test-cloexec.c \ test-close.c test-connect.c test-ctype.c test-dup2.c \ test-environ.c test-errno.c test-fcntl.c test-fcntl-h.c \ test-fdopen.c test-fgetc.c test-float.c test-fputc.c \ test-fread.c test-fstat.c test-ftruncate.c test-func.c \ test-fwrite.c test-getcwd-lgpl.c test-getdelim.c \ test-getdtablesize.c test-getline.c test-getopt-gnu.c \ test-getopt-posix.c test-getprogname.c test-gettimeofday.c \ test-ignore-value.c test-inet_pton.c test-intprops.c \ test-inttypes.c test-ioctl.c test-isblank.c \ test-isnand-nolibm.c test-isnanf-nolibm.c test-isnanl-nolibm.c \ test-iswblank.c test-langinfo.c test-limits-h.c test-listen.c \ test-locale.c test-localeconv.c test-localename.c test-lock.c \ test-lstat.c test-malloc-gnu.c test-malloca.c test-math.c \ test-mbrtowc.c test-mbrtowc-w32.c test-mbschr.c test-mbsinit.c \ test-mbspbrk.c test-mbsspn.c test-memchr.c test-nanosleep.c \ test-netinet_in.c test-nl_langinfo.c test-open.c \ test-pathmax.c test-perror.c test-perror2.c test-pipe.c \ test-pthread_sigmask1.c test-pthread_sigmask2.c test-raise.c \ test-rawmemchr.c test-regex.c test-rwlock1.c test-select.c \ test-select-fd.c test-select-stdin.c test-setenv.c \ test-setlocale1.c test-setlocale2.c test-setsockopt.c \ test-sigaction.c test-signal-h.c test-signbit.c \ test-sigprocmask.c test-sleep.c test-sockets.c test-stat.c \ test-stat-time.c test-stdalign.c test-stdbool.c test-stddef.c \ test-stdint.c test-stdio.c test-stdlib.c test-strchrnul.c \ test-strerror.c test-strerror_r.c test-string.c test-strings.c \ test-strnlen.c test-strtod.c test-symlink.c test-sys_ioctl.c \ test-sys_select.c test-sys_socket.c test-sys_stat.c \ test-sys_time.c test-sys_types.c test-sys_uio.c \ test-sysexits.c test-thread_create.c test-thread_self.c \ test-time.c $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ test-unistd.c test-unsetenv.c test-usleep.c test-vasnprintf.c \ test-verify.c test-verify-try.c test-vsnprintf.c test-wchar.c \ test-wcrtomb.c test-wcrtomb-w32.c test-wctype-h.c \ test-wcwidth.c DIST_SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ test-accept.c test-alloca-opt.c test-argp.c test-arpa_inet.c \ test-binary-io.c test-bind.c test-btowc.c test-c-ctype.c \ test-c-strcasecmp.c test-c-strncasecmp.c test-cloexec.c \ test-close.c test-connect.c test-ctype.c test-dup2.c \ test-environ.c test-errno.c test-fcntl.c test-fcntl-h.c \ test-fdopen.c test-fgetc.c test-float.c test-fputc.c \ test-fread.c test-fstat.c test-ftruncate.c test-func.c \ test-fwrite.c test-getcwd-lgpl.c test-getdelim.c \ test-getdtablesize.c test-getline.c test-getopt-gnu.c \ test-getopt-posix.c test-getprogname.c test-gettimeofday.c \ test-ignore-value.c test-inet_pton.c test-intprops.c \ test-inttypes.c test-ioctl.c test-isblank.c \ test-isnand-nolibm.c test-isnanf-nolibm.c test-isnanl-nolibm.c \ test-iswblank.c test-langinfo.c test-limits-h.c test-listen.c \ test-locale.c test-localeconv.c test-localename.c test-lock.c \ test-lstat.c test-malloc-gnu.c test-malloca.c test-math.c \ test-mbrtowc.c test-mbrtowc-w32.c test-mbschr.c test-mbsinit.c \ test-mbspbrk.c test-mbsspn.c test-memchr.c test-nanosleep.c \ test-netinet_in.c test-nl_langinfo.c test-open.c \ test-pathmax.c test-perror.c test-perror2.c test-pipe.c \ test-pthread_sigmask1.c test-pthread_sigmask2.c test-raise.c \ test-rawmemchr.c test-regex.c test-rwlock1.c test-select.c \ test-select-fd.c test-select-stdin.c test-setenv.c \ test-setlocale1.c test-setlocale2.c test-setsockopt.c \ test-sigaction.c test-signal-h.c test-signbit.c \ test-sigprocmask.c test-sleep.c test-sockets.c test-stat.c \ test-stat-time.c test-stdalign.c test-stdbool.c test-stddef.c \ test-stdint.c test-stdio.c test-stdlib.c test-strchrnul.c \ test-strerror.c test-strerror_r.c test-string.c test-strings.c \ test-strnlen.c test-strtod.c test-symlink.c test-sys_ioctl.c \ test-sys_select.c test-sys_socket.c test-sys_stat.c \ test-sys_time.c test-sys_types.c test-sys_uio.c \ test-sysexits.c test-thread_create.c test-thread_self.c \ test-time.c $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ test-unistd.c test-unsetenv.c test-usleep.c test-vasnprintf.c \ test-verify.c test-verify-try.c test-vsnprintf.c test-wchar.c \ test-wcrtomb.c test-wcrtomb-w32.c test-wctype-h.c \ test-wcwidth.c 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 = $(noinst_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 \ check recheck distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) \ $(top_srcdir)/bootstrapped/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp \ $(top_srcdir)/bootstrapped/build-aux/test-driver 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" pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DEXEEXT=\"@EXEEXT@\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.9.6 foreign subdir-objects SUBDIRS = . TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' srcdir='$(srcdir)' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' MAKE='$(MAKE)' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' noinst_HEADERS = noinst_LIBRARIES = check_LIBRARIES = libtests.a EXTRA_DIST = accept.c w32sock.h test-accept.c signature.h macros.h \ test-alloca-opt.c test-argp.c test-argp-2.sh macros.h \ arpa_inet.in.h test-arpa_inet.c test-binary-io.sh \ test-binary-io.c macros.h bind.c w32sock.h test-bind.c \ signature.h macros.h test-btowc1.sh test-btowc2.sh \ test-btowc.c signature.h macros.h test-c-ctype.c macros.h \ test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c \ macros.h cloexec.h test-cloexec.c macros.h close.c \ test-close.c signature.h macros.h connect.c w32sock.h \ test-connect.c signature.h macros.h ctype.in.h test-ctype.c \ dup2.c test-dup2.c signature.h macros.h test-environ.c \ test-errno.c fcntl.c fcntl.in.h test-fcntl-h.c test-fcntl.c \ signature.h macros.h fd-hook.h fdopen.c test-fdopen.c \ signature.h macros.h test-fgetc.c signature.h macros.h \ filename.h flexmember.h test-float.c macros.h fpucw.h \ test-fputc.c signature.h macros.h test-fread.c signature.h \ macros.h fstat.c stat-w32.c stat-w32.h test-fstat.c \ signature.h macros.h ftruncate.c test-ftruncate.c \ test-ftruncate.sh signature.h macros.h test-func.c macros.h \ test-fwrite.c signature.h macros.h getcwd-lgpl.c \ test-getcwd-lgpl.c signature.h macros.h test-getdelim.c \ signature.h macros.h getdtablesize.c test-getdtablesize.c \ signature.h macros.h test-getline.c signature.h macros.h \ macros.h signature.h test-getopt-gnu.c test-getopt-main.h \ test-getopt.h test-getopt_long.h macros.h signature.h \ test-getopt-posix.c test-getopt-main.h test-getopt.h \ getpagesize.c test-getprogname.c gettimeofday.c signature.h \ test-gettimeofday.c ignore-value.h test-ignore-value.c \ inet_pton.c test-inet_pton.c signature.h macros.h \ test-intprops.c macros.h test-inttypes.c ioctl.c w32sock.h \ test-ioctl.c signature.h macros.h isblank.c test-isblank.c \ signature.h macros.h float+.h isnan.c isnand-nolibm.h isnand.c \ test-isnand-nolibm.c test-isnand.h minus-zero.h infinity.h \ nan.h macros.h float+.h isnan.c isnanf-nolibm.h isnanf.c \ test-isnanf-nolibm.c test-isnanf.h minus-zero.h infinity.h \ nan.h macros.h float+.h isnan.c isnanl-nolibm.h isnanl.c \ test-isnanl-nolibm.c test-isnanl.h minus-zero.h infinity.h \ nan.h macros.h test-iswblank.c macros.h test-langinfo.c \ test-limits-h.c listen.c w32sock.h test-listen.c signature.h \ macros.h test-locale.c test-localeconv.c signature.h macros.h \ localename.h test-localename.c macros.h localtime-buffer.c \ localtime-buffer.h test-rwlock1.c test-lock.c lstat.c \ test-lstat.h test-lstat.c signature.h macros.h \ test-malloc-gnu.c malloca.h malloca.valgrind test-malloca.c \ test-math.c macros.h test-mbrtowc1.sh test-mbrtowc2.sh \ test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc5.sh \ test-mbrtowc.c test-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh \ test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh \ test-mbrtowc-w32-5.sh test-mbrtowc-w32.c signature.h macros.h \ test-mbschr.sh test-mbschr.c macros.h test-mbsinit.sh \ test-mbsinit.c signature.h macros.h test-mbspbrk.sh \ test-mbspbrk.c macros.h test-mbsspn.sh test-mbsspn.c macros.h \ test-memchr.c zerosize-ptr.h signature.h macros.h nanosleep.c \ test-nanosleep.c signature.h macros.h netinet_in.in.h \ test-netinet_in.c test-nl_langinfo.sh test-nl_langinfo.c \ signature.h macros.h open.c test-open.h test-open.c \ signature.h macros.h pathmax.h test-pathmax.c perror.c \ macros.h signature.h test-perror.c test-perror2.c \ test-perror.sh pipe.c test-pipe.c signature.h macros.h \ pthread_sigmask.c test-pthread_sigmask1.c \ test-pthread_sigmask2.c signature.h macros.h putenv.c raise.c \ test-raise.c signature.h macros.h test-rawmemchr.c \ zerosize-ptr.h signature.h macros.h test-regex.c macros.h \ same-inode.h select.c macros.h signature.h test-select.c \ test-select.h test-select-fd.c test-select-in.sh \ test-select-out.sh test-select-stdin.c setenv.c test-setenv.c \ signature.h macros.h setlocale.c test-setlocale1.sh \ test-setlocale1.c test-setlocale2.sh test-setlocale2.c \ signature.h macros.h setsockopt.c w32sock.h test-setsockopt.c \ signature.h macros.h sig-handler.h sigaction.c \ test-sigaction.c signature.h macros.h signal.in.h \ test-signal-h.c float+.h signbitd.c signbitf.c signbitl.c \ test-signbit.c minus-zero.h infinity.h macros.h sigprocmask.c \ test-sigprocmask.c signature.h macros.h test-sleep.c \ signature.h macros.h _Noreturn.h arg-nonnull.h c++defs.h \ warn-on-use.h socket.c w32sock.h w32sock.h test-sockets.c \ stat-w32.c stat-w32.h stat.c test-stat.h test-stat.c \ signature.h macros.h stat-time.h test-stat-time.c macros.h \ nap.h test-stdalign.c macros.h test-stdbool.c test-stddef.c \ test-stdint.c test-stdio.c test-stdlib.c test-sys_wait.h \ test-strchrnul.c signature.h macros.h test-strerror.c \ signature.h macros.h strerror_r.c test-strerror_r.c \ signature.h macros.h test-string.c test-strings.c \ test-strnlen.c zerosize-ptr.h signature.h macros.h \ test-strtod.c signature.h minus-zero.h macros.h symlink.c \ test-symlink.h test-symlink.c signature.h macros.h \ sys_ioctl.in.h test-sys_ioctl.c sys_select.in.h \ test-sys_select.c signature.h sys_socket.in.h \ test-sys_socket.c sys_stat.in.h test-sys_stat.c sys_time.in.h \ test-sys_time.c test-sys_types.c sys_uio.in.h test-sys_uio.c \ test-sysexits.c init.sh test-init.sh test-thread_self.c \ test-thread_create.c macros.h time.in.h test-time.c \ test-unistd.c uniwidth/test-uc_width.c \ uniwidth/test-uc_width2.c uniwidth/test-uc_width2.sh macros.h \ unsetenv.c test-unsetenv.c signature.h macros.h usleep.c \ test-usleep.c signature.h macros.h test-vasnprintf.c macros.h \ test-verify.c test-verify-try.c test-verify.sh \ test-vsnprintf.c signature.h macros.h test-wchar.c \ test-wcrtomb.sh test-wcrtomb.c test-wcrtomb-w32-1.sh \ test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh \ test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh test-wcrtomb-w32.c \ signature.h macros.h wctob.c wctomb-impl.h wctomb.c \ test-wctype-h.c macros.h test-wcwidth.c signature.h macros.h \ xalloc-oversized.h BUILT_SOURCES = arpa/inet.h ctype.h fcntl.h $(NETINET_IN_H) signal.h \ sys/ioctl.h sys/select.h sys/socket.h sys/stat.h sys/time.h \ sys/uio.h time.h SUFFIXES = # This test expects compilation of test-verify-try.c to fail, and # each time it fails, the makefile rule does not perform the usual # "mv -f $name.Tpo $name.po, so tell make clean to remove that file. MOSTLYCLEANFILES = core *.stackdump arpa/inet.h arpa/inet.h-t ctype.h \ ctype.h-t fcntl.h fcntl.h-t test-getdelim.txt test-getline.txt \ netinet/in.h netinet/in.h-t signal.h signal.h-t sys/ioctl.h \ sys/ioctl.h-t sys/select.h sys/select.h-t sys/socket.h \ sys/socket.h-t sys/stat.h sys/stat.h-t sys/time.h sys/time.h-t \ sys/uio.h sys/uio.h-t time.h time.h-t \ .deps/test-verify-try.Tpo MOSTLYCLEANDIRS = arpa netinet sys sys sys sys sys CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CPPFLAGS = \ -D@gltests_WITNESS@=1 \ -I. -I$(srcdir) \ -I../.. -I$(srcdir)/../.. \ -I../../bootstrapped/lib -I$(srcdir)/../../bootstrapped/lib LDADD = libtests.a ../../bootstrapped/lib/libgnu.la libtests.a $(LIBTESTS_LIBDEPS) libtests_a_SOURCES = binary-io.h binary-io.c c-strcase.h \ c-strcasecmp.c c-strncasecmp.c cloexec.c fd-hook.c \ localename.c malloca.c sig-handler.c sockets.h sockets.c \ stat-time.c sys_socket.c glthread/thread.h glthread/thread.c \ glthread/yield.h libtests_a_LIBADD = $(gltests_LIBOBJS) libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) EXTRA_libtests_a_SOURCES = accept.c bind.c close.c connect.c dup2.c \ fcntl.c fdopen.c fstat.c stat-w32.c ftruncate.c getcwd-lgpl.c \ getdtablesize.c getpagesize.c gettimeofday.c inet_pton.c \ ioctl.c isblank.c isnan.c isnand.c isnan.c isnanf.c isnan.c \ isnanl.c listen.c localtime-buffer.c lstat.c nanosleep.c \ open.c perror.c pipe.c pthread_sigmask.c putenv.c raise.c \ select.c setenv.c setlocale.c setsockopt.c sigaction.c \ signbitd.c signbitf.c signbitl.c sigprocmask.c socket.c \ stat-w32.c stat.c strerror_r.c symlink.c unsetenv.c usleep.c \ wctob.c wctomb.c AM_LIBTOOLFLAGS = --preserve-dup-deps test_accept_LDADD = $(LDADD) @LIBSOCKET@ test_argp_LDADD = $(LDADD) @LIBINTL@ test_bind_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) test_connect_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) test_getcwd_lgpl_LDADD = $(LDADD) $(LIBINTL) test_getopt_gnu_LDADD = $(LDADD) $(LIBINTL) test_getopt_posix_LDADD = $(LDADD) $(LIBINTL) test_getprogname_LDADD = $(LDADD) test_inet_pton_LDADD = $(LDADD) @INET_PTON_LIB@ test_listen_LDADD = $(LDADD) @LIBSOCKET@ test_localename_LDADD = $(LDADD) @INTL_MACOSX_LIBS@ $(LIBTHREAD) test_rwlock1_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ test_lock_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ test_nanosleep_LDADD = $(LDADD) $(LIB_NANOSLEEP) test_pthread_sigmask1_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ test_pthread_sigmask2_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ @LIBMULTITHREAD@ test_regex_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) $(LIB_PTHREAD) test_select_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ $(INET_PTON_LIB) test_select_fd_LDADD = $(LDADD) @LIB_SELECT@ test_select_stdin_LDADD = $(LDADD) @LIB_SELECT@ test_setsockopt_LDADD = $(LDADD) @LIBSOCKET@ # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H = $(srcdir)/_Noreturn.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H = $(srcdir)/arg-nonnull.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H = $(srcdir)/c++defs.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H = $(srcdir)/warn-on-use.h test_sockets_LDADD = $(LDADD) @LIBSOCKET@ test_stat_LDADD = $(LDADD) $(LIBINTL) test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) test_thread_self_LDADD = $(LDADD) @LIBTHREAD@ test_thread_create_LDADD = $(LDADD) @LIBMULTITHREAD@ test_uc_width_SOURCES = uniwidth/test-uc_width.c test_uc_width_LDADD = $(LDADD) $(LIBUNISTRING) test_uc_width2_SOURCES = uniwidth/test-uc_width2.c test_uc_width2_LDADD = $(LDADD) $(LIBUNISTRING) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(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 bootstrapped/tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bootstrapped/tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkLIBRARIES: -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES) clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) glthread/$(am__dirstamp): @$(MKDIR_P) glthread @: > glthread/$(am__dirstamp) glthread/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) glthread/$(DEPDIR) @: > glthread/$(DEPDIR)/$(am__dirstamp) glthread/thread.$(OBJEXT): glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) libtests.a: $(libtests_a_OBJECTS) $(libtests_a_DEPENDENCIES) $(EXTRA_libtests_a_DEPENDENCIES) $(AM_V_at)-rm -f libtests.a $(AM_V_AR)$(libtests_a_AR) libtests.a $(libtests_a_OBJECTS) $(libtests_a_LIBADD) $(AM_V_at)$(RANLIB) libtests.a clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list test-accept$(EXEEXT): $(test_accept_OBJECTS) $(test_accept_DEPENDENCIES) $(EXTRA_test_accept_DEPENDENCIES) @rm -f test-accept$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_accept_OBJECTS) $(test_accept_LDADD) $(LIBS) test-alloca-opt$(EXEEXT): $(test_alloca_opt_OBJECTS) $(test_alloca_opt_DEPENDENCIES) $(EXTRA_test_alloca_opt_DEPENDENCIES) @rm -f test-alloca-opt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_alloca_opt_OBJECTS) $(test_alloca_opt_LDADD) $(LIBS) test-argp$(EXEEXT): $(test_argp_OBJECTS) $(test_argp_DEPENDENCIES) $(EXTRA_test_argp_DEPENDENCIES) @rm -f test-argp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_argp_OBJECTS) $(test_argp_LDADD) $(LIBS) test-arpa_inet$(EXEEXT): $(test_arpa_inet_OBJECTS) $(test_arpa_inet_DEPENDENCIES) $(EXTRA_test_arpa_inet_DEPENDENCIES) @rm -f test-arpa_inet$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_arpa_inet_OBJECTS) $(test_arpa_inet_LDADD) $(LIBS) test-binary-io$(EXEEXT): $(test_binary_io_OBJECTS) $(test_binary_io_DEPENDENCIES) $(EXTRA_test_binary_io_DEPENDENCIES) @rm -f test-binary-io$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_binary_io_OBJECTS) $(test_binary_io_LDADD) $(LIBS) test-bind$(EXEEXT): $(test_bind_OBJECTS) $(test_bind_DEPENDENCIES) $(EXTRA_test_bind_DEPENDENCIES) @rm -f test-bind$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_bind_OBJECTS) $(test_bind_LDADD) $(LIBS) test-btowc$(EXEEXT): $(test_btowc_OBJECTS) $(test_btowc_DEPENDENCIES) $(EXTRA_test_btowc_DEPENDENCIES) @rm -f test-btowc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_btowc_OBJECTS) $(test_btowc_LDADD) $(LIBS) test-c-ctype$(EXEEXT): $(test_c_ctype_OBJECTS) $(test_c_ctype_DEPENDENCIES) $(EXTRA_test_c_ctype_DEPENDENCIES) @rm -f test-c-ctype$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c_ctype_OBJECTS) $(test_c_ctype_LDADD) $(LIBS) test-c-strcasecmp$(EXEEXT): $(test_c_strcasecmp_OBJECTS) $(test_c_strcasecmp_DEPENDENCIES) $(EXTRA_test_c_strcasecmp_DEPENDENCIES) @rm -f test-c-strcasecmp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c_strcasecmp_OBJECTS) $(test_c_strcasecmp_LDADD) $(LIBS) test-c-strncasecmp$(EXEEXT): $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_DEPENDENCIES) $(EXTRA_test_c_strncasecmp_DEPENDENCIES) @rm -f test-c-strncasecmp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_LDADD) $(LIBS) test-cloexec$(EXEEXT): $(test_cloexec_OBJECTS) $(test_cloexec_DEPENDENCIES) $(EXTRA_test_cloexec_DEPENDENCIES) @rm -f test-cloexec$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_cloexec_OBJECTS) $(test_cloexec_LDADD) $(LIBS) test-close$(EXEEXT): $(test_close_OBJECTS) $(test_close_DEPENDENCIES) $(EXTRA_test_close_DEPENDENCIES) @rm -f test-close$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_close_OBJECTS) $(test_close_LDADD) $(LIBS) test-connect$(EXEEXT): $(test_connect_OBJECTS) $(test_connect_DEPENDENCIES) $(EXTRA_test_connect_DEPENDENCIES) @rm -f test-connect$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_connect_OBJECTS) $(test_connect_LDADD) $(LIBS) test-ctype$(EXEEXT): $(test_ctype_OBJECTS) $(test_ctype_DEPENDENCIES) $(EXTRA_test_ctype_DEPENDENCIES) @rm -f test-ctype$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_OBJECTS) $(test_ctype_LDADD) $(LIBS) test-dup2$(EXEEXT): $(test_dup2_OBJECTS) $(test_dup2_DEPENDENCIES) $(EXTRA_test_dup2_DEPENDENCIES) @rm -f test-dup2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_dup2_OBJECTS) $(test_dup2_LDADD) $(LIBS) test-environ$(EXEEXT): $(test_environ_OBJECTS) $(test_environ_DEPENDENCIES) $(EXTRA_test_environ_DEPENDENCIES) @rm -f test-environ$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_environ_OBJECTS) $(test_environ_LDADD) $(LIBS) test-errno$(EXEEXT): $(test_errno_OBJECTS) $(test_errno_DEPENDENCIES) $(EXTRA_test_errno_DEPENDENCIES) @rm -f test-errno$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_errno_OBJECTS) $(test_errno_LDADD) $(LIBS) test-fcntl$(EXEEXT): $(test_fcntl_OBJECTS) $(test_fcntl_DEPENDENCIES) $(EXTRA_test_fcntl_DEPENDENCIES) @rm -f test-fcntl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fcntl_OBJECTS) $(test_fcntl_LDADD) $(LIBS) test-fcntl-h$(EXEEXT): $(test_fcntl_h_OBJECTS) $(test_fcntl_h_DEPENDENCIES) $(EXTRA_test_fcntl_h_DEPENDENCIES) @rm -f test-fcntl-h$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fcntl_h_OBJECTS) $(test_fcntl_h_LDADD) $(LIBS) test-fdopen$(EXEEXT): $(test_fdopen_OBJECTS) $(test_fdopen_DEPENDENCIES) $(EXTRA_test_fdopen_DEPENDENCIES) @rm -f test-fdopen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fdopen_OBJECTS) $(test_fdopen_LDADD) $(LIBS) test-fgetc$(EXEEXT): $(test_fgetc_OBJECTS) $(test_fgetc_DEPENDENCIES) $(EXTRA_test_fgetc_DEPENDENCIES) @rm -f test-fgetc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fgetc_OBJECTS) $(test_fgetc_LDADD) $(LIBS) test-float$(EXEEXT): $(test_float_OBJECTS) $(test_float_DEPENDENCIES) $(EXTRA_test_float_DEPENDENCIES) @rm -f test-float$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_float_OBJECTS) $(test_float_LDADD) $(LIBS) test-fputc$(EXEEXT): $(test_fputc_OBJECTS) $(test_fputc_DEPENDENCIES) $(EXTRA_test_fputc_DEPENDENCIES) @rm -f test-fputc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fputc_OBJECTS) $(test_fputc_LDADD) $(LIBS) test-fread$(EXEEXT): $(test_fread_OBJECTS) $(test_fread_DEPENDENCIES) $(EXTRA_test_fread_DEPENDENCIES) @rm -f test-fread$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fread_OBJECTS) $(test_fread_LDADD) $(LIBS) test-fstat$(EXEEXT): $(test_fstat_OBJECTS) $(test_fstat_DEPENDENCIES) $(EXTRA_test_fstat_DEPENDENCIES) @rm -f test-fstat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fstat_OBJECTS) $(test_fstat_LDADD) $(LIBS) test-ftruncate$(EXEEXT): $(test_ftruncate_OBJECTS) $(test_ftruncate_DEPENDENCIES) $(EXTRA_test_ftruncate_DEPENDENCIES) @rm -f test-ftruncate$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ftruncate_OBJECTS) $(test_ftruncate_LDADD) $(LIBS) test-func$(EXEEXT): $(test_func_OBJECTS) $(test_func_DEPENDENCIES) $(EXTRA_test_func_DEPENDENCIES) @rm -f test-func$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_func_OBJECTS) $(test_func_LDADD) $(LIBS) test-fwrite$(EXEEXT): $(test_fwrite_OBJECTS) $(test_fwrite_DEPENDENCIES) $(EXTRA_test_fwrite_DEPENDENCIES) @rm -f test-fwrite$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fwrite_OBJECTS) $(test_fwrite_LDADD) $(LIBS) test-getcwd-lgpl$(EXEEXT): $(test_getcwd_lgpl_OBJECTS) $(test_getcwd_lgpl_DEPENDENCIES) $(EXTRA_test_getcwd_lgpl_DEPENDENCIES) @rm -f test-getcwd-lgpl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getcwd_lgpl_OBJECTS) $(test_getcwd_lgpl_LDADD) $(LIBS) test-getdelim$(EXEEXT): $(test_getdelim_OBJECTS) $(test_getdelim_DEPENDENCIES) $(EXTRA_test_getdelim_DEPENDENCIES) @rm -f test-getdelim$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getdelim_OBJECTS) $(test_getdelim_LDADD) $(LIBS) test-getdtablesize$(EXEEXT): $(test_getdtablesize_OBJECTS) $(test_getdtablesize_DEPENDENCIES) $(EXTRA_test_getdtablesize_DEPENDENCIES) @rm -f test-getdtablesize$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getdtablesize_OBJECTS) $(test_getdtablesize_LDADD) $(LIBS) test-getline$(EXEEXT): $(test_getline_OBJECTS) $(test_getline_DEPENDENCIES) $(EXTRA_test_getline_DEPENDENCIES) @rm -f test-getline$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getline_OBJECTS) $(test_getline_LDADD) $(LIBS) test-getopt-gnu$(EXEEXT): $(test_getopt_gnu_OBJECTS) $(test_getopt_gnu_DEPENDENCIES) $(EXTRA_test_getopt_gnu_DEPENDENCIES) @rm -f test-getopt-gnu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getopt_gnu_OBJECTS) $(test_getopt_gnu_LDADD) $(LIBS) test-getopt-posix$(EXEEXT): $(test_getopt_posix_OBJECTS) $(test_getopt_posix_DEPENDENCIES) $(EXTRA_test_getopt_posix_DEPENDENCIES) @rm -f test-getopt-posix$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getopt_posix_OBJECTS) $(test_getopt_posix_LDADD) $(LIBS) test-getprogname$(EXEEXT): $(test_getprogname_OBJECTS) $(test_getprogname_DEPENDENCIES) $(EXTRA_test_getprogname_DEPENDENCIES) @rm -f test-getprogname$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getprogname_OBJECTS) $(test_getprogname_LDADD) $(LIBS) test-gettimeofday$(EXEEXT): $(test_gettimeofday_OBJECTS) $(test_gettimeofday_DEPENDENCIES) $(EXTRA_test_gettimeofday_DEPENDENCIES) @rm -f test-gettimeofday$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_gettimeofday_OBJECTS) $(test_gettimeofday_LDADD) $(LIBS) test-ignore-value$(EXEEXT): $(test_ignore_value_OBJECTS) $(test_ignore_value_DEPENDENCIES) $(EXTRA_test_ignore_value_DEPENDENCIES) @rm -f test-ignore-value$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ignore_value_OBJECTS) $(test_ignore_value_LDADD) $(LIBS) test-inet_pton$(EXEEXT): $(test_inet_pton_OBJECTS) $(test_inet_pton_DEPENDENCIES) $(EXTRA_test_inet_pton_DEPENDENCIES) @rm -f test-inet_pton$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_inet_pton_OBJECTS) $(test_inet_pton_LDADD) $(LIBS) test-intprops$(EXEEXT): $(test_intprops_OBJECTS) $(test_intprops_DEPENDENCIES) $(EXTRA_test_intprops_DEPENDENCIES) @rm -f test-intprops$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_intprops_OBJECTS) $(test_intprops_LDADD) $(LIBS) test-inttypes$(EXEEXT): $(test_inttypes_OBJECTS) $(test_inttypes_DEPENDENCIES) $(EXTRA_test_inttypes_DEPENDENCIES) @rm -f test-inttypes$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_inttypes_OBJECTS) $(test_inttypes_LDADD) $(LIBS) test-ioctl$(EXEEXT): $(test_ioctl_OBJECTS) $(test_ioctl_DEPENDENCIES) $(EXTRA_test_ioctl_DEPENDENCIES) @rm -f test-ioctl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ioctl_OBJECTS) $(test_ioctl_LDADD) $(LIBS) test-isblank$(EXEEXT): $(test_isblank_OBJECTS) $(test_isblank_DEPENDENCIES) $(EXTRA_test_isblank_DEPENDENCIES) @rm -f test-isblank$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_isblank_OBJECTS) $(test_isblank_LDADD) $(LIBS) test-isnand-nolibm$(EXEEXT): $(test_isnand_nolibm_OBJECTS) $(test_isnand_nolibm_DEPENDENCIES) $(EXTRA_test_isnand_nolibm_DEPENDENCIES) @rm -f test-isnand-nolibm$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_isnand_nolibm_OBJECTS) $(test_isnand_nolibm_LDADD) $(LIBS) test-isnanf-nolibm$(EXEEXT): $(test_isnanf_nolibm_OBJECTS) $(test_isnanf_nolibm_DEPENDENCIES) $(EXTRA_test_isnanf_nolibm_DEPENDENCIES) @rm -f test-isnanf-nolibm$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_isnanf_nolibm_OBJECTS) $(test_isnanf_nolibm_LDADD) $(LIBS) test-isnanl-nolibm$(EXEEXT): $(test_isnanl_nolibm_OBJECTS) $(test_isnanl_nolibm_DEPENDENCIES) $(EXTRA_test_isnanl_nolibm_DEPENDENCIES) @rm -f test-isnanl-nolibm$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_isnanl_nolibm_OBJECTS) $(test_isnanl_nolibm_LDADD) $(LIBS) test-iswblank$(EXEEXT): $(test_iswblank_OBJECTS) $(test_iswblank_DEPENDENCIES) $(EXTRA_test_iswblank_DEPENDENCIES) @rm -f test-iswblank$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_iswblank_OBJECTS) $(test_iswblank_LDADD) $(LIBS) test-langinfo$(EXEEXT): $(test_langinfo_OBJECTS) $(test_langinfo_DEPENDENCIES) $(EXTRA_test_langinfo_DEPENDENCIES) @rm -f test-langinfo$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_langinfo_OBJECTS) $(test_langinfo_LDADD) $(LIBS) test-limits-h$(EXEEXT): $(test_limits_h_OBJECTS) $(test_limits_h_DEPENDENCIES) $(EXTRA_test_limits_h_DEPENDENCIES) @rm -f test-limits-h$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_limits_h_OBJECTS) $(test_limits_h_LDADD) $(LIBS) test-listen$(EXEEXT): $(test_listen_OBJECTS) $(test_listen_DEPENDENCIES) $(EXTRA_test_listen_DEPENDENCIES) @rm -f test-listen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_listen_OBJECTS) $(test_listen_LDADD) $(LIBS) test-locale$(EXEEXT): $(test_locale_OBJECTS) $(test_locale_DEPENDENCIES) $(EXTRA_test_locale_DEPENDENCIES) @rm -f test-locale$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_locale_OBJECTS) $(test_locale_LDADD) $(LIBS) test-localeconv$(EXEEXT): $(test_localeconv_OBJECTS) $(test_localeconv_DEPENDENCIES) $(EXTRA_test_localeconv_DEPENDENCIES) @rm -f test-localeconv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_localeconv_OBJECTS) $(test_localeconv_LDADD) $(LIBS) test-localename$(EXEEXT): $(test_localename_OBJECTS) $(test_localename_DEPENDENCIES) $(EXTRA_test_localename_DEPENDENCIES) @rm -f test-localename$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_localename_OBJECTS) $(test_localename_LDADD) $(LIBS) test-lock$(EXEEXT): $(test_lock_OBJECTS) $(test_lock_DEPENDENCIES) $(EXTRA_test_lock_DEPENDENCIES) @rm -f test-lock$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_lock_OBJECTS) $(test_lock_LDADD) $(LIBS) test-lstat$(EXEEXT): $(test_lstat_OBJECTS) $(test_lstat_DEPENDENCIES) $(EXTRA_test_lstat_DEPENDENCIES) @rm -f test-lstat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_lstat_OBJECTS) $(test_lstat_LDADD) $(LIBS) test-malloc-gnu$(EXEEXT): $(test_malloc_gnu_OBJECTS) $(test_malloc_gnu_DEPENDENCIES) $(EXTRA_test_malloc_gnu_DEPENDENCIES) @rm -f test-malloc-gnu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_malloc_gnu_OBJECTS) $(test_malloc_gnu_LDADD) $(LIBS) test-malloca$(EXEEXT): $(test_malloca_OBJECTS) $(test_malloca_DEPENDENCIES) $(EXTRA_test_malloca_DEPENDENCIES) @rm -f test-malloca$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_malloca_OBJECTS) $(test_malloca_LDADD) $(LIBS) test-math$(EXEEXT): $(test_math_OBJECTS) $(test_math_DEPENDENCIES) $(EXTRA_test_math_DEPENDENCIES) @rm -f test-math$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_math_OBJECTS) $(test_math_LDADD) $(LIBS) test-mbrtowc$(EXEEXT): $(test_mbrtowc_OBJECTS) $(test_mbrtowc_DEPENDENCIES) $(EXTRA_test_mbrtowc_DEPENDENCIES) @rm -f test-mbrtowc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbrtowc_OBJECTS) $(test_mbrtowc_LDADD) $(LIBS) test-mbrtowc-w32$(EXEEXT): $(test_mbrtowc_w32_OBJECTS) $(test_mbrtowc_w32_DEPENDENCIES) $(EXTRA_test_mbrtowc_w32_DEPENDENCIES) @rm -f test-mbrtowc-w32$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbrtowc_w32_OBJECTS) $(test_mbrtowc_w32_LDADD) $(LIBS) test-mbschr$(EXEEXT): $(test_mbschr_OBJECTS) $(test_mbschr_DEPENDENCIES) $(EXTRA_test_mbschr_DEPENDENCIES) @rm -f test-mbschr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbschr_OBJECTS) $(test_mbschr_LDADD) $(LIBS) test-mbsinit$(EXEEXT): $(test_mbsinit_OBJECTS) $(test_mbsinit_DEPENDENCIES) $(EXTRA_test_mbsinit_DEPENDENCIES) @rm -f test-mbsinit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbsinit_OBJECTS) $(test_mbsinit_LDADD) $(LIBS) test-mbspbrk$(EXEEXT): $(test_mbspbrk_OBJECTS) $(test_mbspbrk_DEPENDENCIES) $(EXTRA_test_mbspbrk_DEPENDENCIES) @rm -f test-mbspbrk$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbspbrk_OBJECTS) $(test_mbspbrk_LDADD) $(LIBS) test-mbsspn$(EXEEXT): $(test_mbsspn_OBJECTS) $(test_mbsspn_DEPENDENCIES) $(EXTRA_test_mbsspn_DEPENDENCIES) @rm -f test-mbsspn$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbsspn_OBJECTS) $(test_mbsspn_LDADD) $(LIBS) test-memchr$(EXEEXT): $(test_memchr_OBJECTS) $(test_memchr_DEPENDENCIES) $(EXTRA_test_memchr_DEPENDENCIES) @rm -f test-memchr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_memchr_OBJECTS) $(test_memchr_LDADD) $(LIBS) test-nanosleep$(EXEEXT): $(test_nanosleep_OBJECTS) $(test_nanosleep_DEPENDENCIES) $(EXTRA_test_nanosleep_DEPENDENCIES) @rm -f test-nanosleep$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_nanosleep_OBJECTS) $(test_nanosleep_LDADD) $(LIBS) test-netinet_in$(EXEEXT): $(test_netinet_in_OBJECTS) $(test_netinet_in_DEPENDENCIES) $(EXTRA_test_netinet_in_DEPENDENCIES) @rm -f test-netinet_in$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_netinet_in_OBJECTS) $(test_netinet_in_LDADD) $(LIBS) test-nl_langinfo$(EXEEXT): $(test_nl_langinfo_OBJECTS) $(test_nl_langinfo_DEPENDENCIES) $(EXTRA_test_nl_langinfo_DEPENDENCIES) @rm -f test-nl_langinfo$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_nl_langinfo_OBJECTS) $(test_nl_langinfo_LDADD) $(LIBS) test-open$(EXEEXT): $(test_open_OBJECTS) $(test_open_DEPENDENCIES) $(EXTRA_test_open_DEPENDENCIES) @rm -f test-open$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_open_OBJECTS) $(test_open_LDADD) $(LIBS) test-pathmax$(EXEEXT): $(test_pathmax_OBJECTS) $(test_pathmax_DEPENDENCIES) $(EXTRA_test_pathmax_DEPENDENCIES) @rm -f test-pathmax$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pathmax_OBJECTS) $(test_pathmax_LDADD) $(LIBS) test-perror$(EXEEXT): $(test_perror_OBJECTS) $(test_perror_DEPENDENCIES) $(EXTRA_test_perror_DEPENDENCIES) @rm -f test-perror$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_perror_OBJECTS) $(test_perror_LDADD) $(LIBS) test-perror2$(EXEEXT): $(test_perror2_OBJECTS) $(test_perror2_DEPENDENCIES) $(EXTRA_test_perror2_DEPENDENCIES) @rm -f test-perror2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_perror2_OBJECTS) $(test_perror2_LDADD) $(LIBS) test-pipe$(EXEEXT): $(test_pipe_OBJECTS) $(test_pipe_DEPENDENCIES) $(EXTRA_test_pipe_DEPENDENCIES) @rm -f test-pipe$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pipe_OBJECTS) $(test_pipe_LDADD) $(LIBS) test-pthread_sigmask1$(EXEEXT): $(test_pthread_sigmask1_OBJECTS) $(test_pthread_sigmask1_DEPENDENCIES) $(EXTRA_test_pthread_sigmask1_DEPENDENCIES) @rm -f test-pthread_sigmask1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pthread_sigmask1_OBJECTS) $(test_pthread_sigmask1_LDADD) $(LIBS) test-pthread_sigmask2$(EXEEXT): $(test_pthread_sigmask2_OBJECTS) $(test_pthread_sigmask2_DEPENDENCIES) $(EXTRA_test_pthread_sigmask2_DEPENDENCIES) @rm -f test-pthread_sigmask2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pthread_sigmask2_OBJECTS) $(test_pthread_sigmask2_LDADD) $(LIBS) test-raise$(EXEEXT): $(test_raise_OBJECTS) $(test_raise_DEPENDENCIES) $(EXTRA_test_raise_DEPENDENCIES) @rm -f test-raise$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_raise_OBJECTS) $(test_raise_LDADD) $(LIBS) test-rawmemchr$(EXEEXT): $(test_rawmemchr_OBJECTS) $(test_rawmemchr_DEPENDENCIES) $(EXTRA_test_rawmemchr_DEPENDENCIES) @rm -f test-rawmemchr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_rawmemchr_OBJECTS) $(test_rawmemchr_LDADD) $(LIBS) test-regex$(EXEEXT): $(test_regex_OBJECTS) $(test_regex_DEPENDENCIES) $(EXTRA_test_regex_DEPENDENCIES) @rm -f test-regex$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_regex_OBJECTS) $(test_regex_LDADD) $(LIBS) test-rwlock1$(EXEEXT): $(test_rwlock1_OBJECTS) $(test_rwlock1_DEPENDENCIES) $(EXTRA_test_rwlock1_DEPENDENCIES) @rm -f test-rwlock1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_rwlock1_OBJECTS) $(test_rwlock1_LDADD) $(LIBS) test-select$(EXEEXT): $(test_select_OBJECTS) $(test_select_DEPENDENCIES) $(EXTRA_test_select_DEPENDENCIES) @rm -f test-select$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_select_OBJECTS) $(test_select_LDADD) $(LIBS) test-select-fd$(EXEEXT): $(test_select_fd_OBJECTS) $(test_select_fd_DEPENDENCIES) $(EXTRA_test_select_fd_DEPENDENCIES) @rm -f test-select-fd$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_select_fd_OBJECTS) $(test_select_fd_LDADD) $(LIBS) test-select-stdin$(EXEEXT): $(test_select_stdin_OBJECTS) $(test_select_stdin_DEPENDENCIES) $(EXTRA_test_select_stdin_DEPENDENCIES) @rm -f test-select-stdin$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_select_stdin_OBJECTS) $(test_select_stdin_LDADD) $(LIBS) test-setenv$(EXEEXT): $(test_setenv_OBJECTS) $(test_setenv_DEPENDENCIES) $(EXTRA_test_setenv_DEPENDENCIES) @rm -f test-setenv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setenv_OBJECTS) $(test_setenv_LDADD) $(LIBS) test-setlocale1$(EXEEXT): $(test_setlocale1_OBJECTS) $(test_setlocale1_DEPENDENCIES) $(EXTRA_test_setlocale1_DEPENDENCIES) @rm -f test-setlocale1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setlocale1_OBJECTS) $(test_setlocale1_LDADD) $(LIBS) test-setlocale2$(EXEEXT): $(test_setlocale2_OBJECTS) $(test_setlocale2_DEPENDENCIES) $(EXTRA_test_setlocale2_DEPENDENCIES) @rm -f test-setlocale2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setlocale2_OBJECTS) $(test_setlocale2_LDADD) $(LIBS) test-setsockopt$(EXEEXT): $(test_setsockopt_OBJECTS) $(test_setsockopt_DEPENDENCIES) $(EXTRA_test_setsockopt_DEPENDENCIES) @rm -f test-setsockopt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setsockopt_OBJECTS) $(test_setsockopt_LDADD) $(LIBS) test-sigaction$(EXEEXT): $(test_sigaction_OBJECTS) $(test_sigaction_DEPENDENCIES) $(EXTRA_test_sigaction_DEPENDENCIES) @rm -f test-sigaction$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sigaction_OBJECTS) $(test_sigaction_LDADD) $(LIBS) test-signal-h$(EXEEXT): $(test_signal_h_OBJECTS) $(test_signal_h_DEPENDENCIES) $(EXTRA_test_signal_h_DEPENDENCIES) @rm -f test-signal-h$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_signal_h_OBJECTS) $(test_signal_h_LDADD) $(LIBS) test-signbit$(EXEEXT): $(test_signbit_OBJECTS) $(test_signbit_DEPENDENCIES) $(EXTRA_test_signbit_DEPENDENCIES) @rm -f test-signbit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_signbit_OBJECTS) $(test_signbit_LDADD) $(LIBS) test-sigprocmask$(EXEEXT): $(test_sigprocmask_OBJECTS) $(test_sigprocmask_DEPENDENCIES) $(EXTRA_test_sigprocmask_DEPENDENCIES) @rm -f test-sigprocmask$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sigprocmask_OBJECTS) $(test_sigprocmask_LDADD) $(LIBS) test-sleep$(EXEEXT): $(test_sleep_OBJECTS) $(test_sleep_DEPENDENCIES) $(EXTRA_test_sleep_DEPENDENCIES) @rm -f test-sleep$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sleep_OBJECTS) $(test_sleep_LDADD) $(LIBS) test-sockets$(EXEEXT): $(test_sockets_OBJECTS) $(test_sockets_DEPENDENCIES) $(EXTRA_test_sockets_DEPENDENCIES) @rm -f test-sockets$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sockets_OBJECTS) $(test_sockets_LDADD) $(LIBS) test-stat$(EXEEXT): $(test_stat_OBJECTS) $(test_stat_DEPENDENCIES) $(EXTRA_test_stat_DEPENDENCIES) @rm -f test-stat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stat_OBJECTS) $(test_stat_LDADD) $(LIBS) test-stat-time$(EXEEXT): $(test_stat_time_OBJECTS) $(test_stat_time_DEPENDENCIES) $(EXTRA_test_stat_time_DEPENDENCIES) @rm -f test-stat-time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stat_time_OBJECTS) $(test_stat_time_LDADD) $(LIBS) test-stdalign$(EXEEXT): $(test_stdalign_OBJECTS) $(test_stdalign_DEPENDENCIES) $(EXTRA_test_stdalign_DEPENDENCIES) @rm -f test-stdalign$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdalign_OBJECTS) $(test_stdalign_LDADD) $(LIBS) test-stdbool$(EXEEXT): $(test_stdbool_OBJECTS) $(test_stdbool_DEPENDENCIES) $(EXTRA_test_stdbool_DEPENDENCIES) @rm -f test-stdbool$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdbool_OBJECTS) $(test_stdbool_LDADD) $(LIBS) test-stddef$(EXEEXT): $(test_stddef_OBJECTS) $(test_stddef_DEPENDENCIES) $(EXTRA_test_stddef_DEPENDENCIES) @rm -f test-stddef$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stddef_OBJECTS) $(test_stddef_LDADD) $(LIBS) test-stdint$(EXEEXT): $(test_stdint_OBJECTS) $(test_stdint_DEPENDENCIES) $(EXTRA_test_stdint_DEPENDENCIES) @rm -f test-stdint$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdint_OBJECTS) $(test_stdint_LDADD) $(LIBS) test-stdio$(EXEEXT): $(test_stdio_OBJECTS) $(test_stdio_DEPENDENCIES) $(EXTRA_test_stdio_DEPENDENCIES) @rm -f test-stdio$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdio_OBJECTS) $(test_stdio_LDADD) $(LIBS) test-stdlib$(EXEEXT): $(test_stdlib_OBJECTS) $(test_stdlib_DEPENDENCIES) $(EXTRA_test_stdlib_DEPENDENCIES) @rm -f test-stdlib$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdlib_OBJECTS) $(test_stdlib_LDADD) $(LIBS) test-strchrnul$(EXEEXT): $(test_strchrnul_OBJECTS) $(test_strchrnul_DEPENDENCIES) $(EXTRA_test_strchrnul_DEPENDENCIES) @rm -f test-strchrnul$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strchrnul_OBJECTS) $(test_strchrnul_LDADD) $(LIBS) test-strerror$(EXEEXT): $(test_strerror_OBJECTS) $(test_strerror_DEPENDENCIES) $(EXTRA_test_strerror_DEPENDENCIES) @rm -f test-strerror$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strerror_OBJECTS) $(test_strerror_LDADD) $(LIBS) test-strerror_r$(EXEEXT): $(test_strerror_r_OBJECTS) $(test_strerror_r_DEPENDENCIES) $(EXTRA_test_strerror_r_DEPENDENCIES) @rm -f test-strerror_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strerror_r_OBJECTS) $(test_strerror_r_LDADD) $(LIBS) test-string$(EXEEXT): $(test_string_OBJECTS) $(test_string_DEPENDENCIES) $(EXTRA_test_string_DEPENDENCIES) @rm -f test-string$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_string_OBJECTS) $(test_string_LDADD) $(LIBS) test-strings$(EXEEXT): $(test_strings_OBJECTS) $(test_strings_DEPENDENCIES) $(EXTRA_test_strings_DEPENDENCIES) @rm -f test-strings$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strings_OBJECTS) $(test_strings_LDADD) $(LIBS) test-strnlen$(EXEEXT): $(test_strnlen_OBJECTS) $(test_strnlen_DEPENDENCIES) $(EXTRA_test_strnlen_DEPENDENCIES) @rm -f test-strnlen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strnlen_OBJECTS) $(test_strnlen_LDADD) $(LIBS) test-strtod$(EXEEXT): $(test_strtod_OBJECTS) $(test_strtod_DEPENDENCIES) $(EXTRA_test_strtod_DEPENDENCIES) @rm -f test-strtod$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strtod_OBJECTS) $(test_strtod_LDADD) $(LIBS) test-symlink$(EXEEXT): $(test_symlink_OBJECTS) $(test_symlink_DEPENDENCIES) $(EXTRA_test_symlink_DEPENDENCIES) @rm -f test-symlink$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_symlink_OBJECTS) $(test_symlink_LDADD) $(LIBS) test-sys_ioctl$(EXEEXT): $(test_sys_ioctl_OBJECTS) $(test_sys_ioctl_DEPENDENCIES) $(EXTRA_test_sys_ioctl_DEPENDENCIES) @rm -f test-sys_ioctl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_ioctl_OBJECTS) $(test_sys_ioctl_LDADD) $(LIBS) test-sys_select$(EXEEXT): $(test_sys_select_OBJECTS) $(test_sys_select_DEPENDENCIES) $(EXTRA_test_sys_select_DEPENDENCIES) @rm -f test-sys_select$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_select_OBJECTS) $(test_sys_select_LDADD) $(LIBS) test-sys_socket$(EXEEXT): $(test_sys_socket_OBJECTS) $(test_sys_socket_DEPENDENCIES) $(EXTRA_test_sys_socket_DEPENDENCIES) @rm -f test-sys_socket$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_socket_OBJECTS) $(test_sys_socket_LDADD) $(LIBS) test-sys_stat$(EXEEXT): $(test_sys_stat_OBJECTS) $(test_sys_stat_DEPENDENCIES) $(EXTRA_test_sys_stat_DEPENDENCIES) @rm -f test-sys_stat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_stat_OBJECTS) $(test_sys_stat_LDADD) $(LIBS) test-sys_time$(EXEEXT): $(test_sys_time_OBJECTS) $(test_sys_time_DEPENDENCIES) $(EXTRA_test_sys_time_DEPENDENCIES) @rm -f test-sys_time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_time_OBJECTS) $(test_sys_time_LDADD) $(LIBS) test-sys_types$(EXEEXT): $(test_sys_types_OBJECTS) $(test_sys_types_DEPENDENCIES) $(EXTRA_test_sys_types_DEPENDENCIES) @rm -f test-sys_types$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_types_OBJECTS) $(test_sys_types_LDADD) $(LIBS) test-sys_uio$(EXEEXT): $(test_sys_uio_OBJECTS) $(test_sys_uio_DEPENDENCIES) $(EXTRA_test_sys_uio_DEPENDENCIES) @rm -f test-sys_uio$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_uio_OBJECTS) $(test_sys_uio_LDADD) $(LIBS) test-sysexits$(EXEEXT): $(test_sysexits_OBJECTS) $(test_sysexits_DEPENDENCIES) $(EXTRA_test_sysexits_DEPENDENCIES) @rm -f test-sysexits$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sysexits_OBJECTS) $(test_sysexits_LDADD) $(LIBS) test-thread_create$(EXEEXT): $(test_thread_create_OBJECTS) $(test_thread_create_DEPENDENCIES) $(EXTRA_test_thread_create_DEPENDENCIES) @rm -f test-thread_create$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_thread_create_OBJECTS) $(test_thread_create_LDADD) $(LIBS) test-thread_self$(EXEEXT): $(test_thread_self_OBJECTS) $(test_thread_self_DEPENDENCIES) $(EXTRA_test_thread_self_DEPENDENCIES) @rm -f test-thread_self$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_thread_self_OBJECTS) $(test_thread_self_LDADD) $(LIBS) test-time$(EXEEXT): $(test_time_OBJECTS) $(test_time_DEPENDENCIES) $(EXTRA_test_time_DEPENDENCIES) @rm -f test-time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_time_OBJECTS) $(test_time_LDADD) $(LIBS) uniwidth/$(am__dirstamp): @$(MKDIR_P) uniwidth @: > uniwidth/$(am__dirstamp) uniwidth/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) uniwidth/$(DEPDIR) @: > uniwidth/$(DEPDIR)/$(am__dirstamp) uniwidth/test-uc_width.$(OBJEXT): uniwidth/$(am__dirstamp) \ uniwidth/$(DEPDIR)/$(am__dirstamp) test-uc_width$(EXEEXT): $(test_uc_width_OBJECTS) $(test_uc_width_DEPENDENCIES) $(EXTRA_test_uc_width_DEPENDENCIES) @rm -f test-uc_width$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_uc_width_OBJECTS) $(test_uc_width_LDADD) $(LIBS) uniwidth/test-uc_width2.$(OBJEXT): uniwidth/$(am__dirstamp) \ uniwidth/$(DEPDIR)/$(am__dirstamp) test-uc_width2$(EXEEXT): $(test_uc_width2_OBJECTS) $(test_uc_width2_DEPENDENCIES) $(EXTRA_test_uc_width2_DEPENDENCIES) @rm -f test-uc_width2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_uc_width2_OBJECTS) $(test_uc_width2_LDADD) $(LIBS) test-unistd$(EXEEXT): $(test_unistd_OBJECTS) $(test_unistd_DEPENDENCIES) $(EXTRA_test_unistd_DEPENDENCIES) @rm -f test-unistd$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_unistd_OBJECTS) $(test_unistd_LDADD) $(LIBS) test-unsetenv$(EXEEXT): $(test_unsetenv_OBJECTS) $(test_unsetenv_DEPENDENCIES) $(EXTRA_test_unsetenv_DEPENDENCIES) @rm -f test-unsetenv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_unsetenv_OBJECTS) $(test_unsetenv_LDADD) $(LIBS) test-usleep$(EXEEXT): $(test_usleep_OBJECTS) $(test_usleep_DEPENDENCIES) $(EXTRA_test_usleep_DEPENDENCIES) @rm -f test-usleep$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_usleep_OBJECTS) $(test_usleep_LDADD) $(LIBS) test-vasnprintf$(EXEEXT): $(test_vasnprintf_OBJECTS) $(test_vasnprintf_DEPENDENCIES) $(EXTRA_test_vasnprintf_DEPENDENCIES) @rm -f test-vasnprintf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_vasnprintf_OBJECTS) $(test_vasnprintf_LDADD) $(LIBS) test-verify$(EXEEXT): $(test_verify_OBJECTS) $(test_verify_DEPENDENCIES) $(EXTRA_test_verify_DEPENDENCIES) @rm -f test-verify$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_verify_OBJECTS) $(test_verify_LDADD) $(LIBS) test-verify-try$(EXEEXT): $(test_verify_try_OBJECTS) $(test_verify_try_DEPENDENCIES) $(EXTRA_test_verify_try_DEPENDENCIES) @rm -f test-verify-try$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_verify_try_OBJECTS) $(test_verify_try_LDADD) $(LIBS) test-vsnprintf$(EXEEXT): $(test_vsnprintf_OBJECTS) $(test_vsnprintf_DEPENDENCIES) $(EXTRA_test_vsnprintf_DEPENDENCIES) @rm -f test-vsnprintf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_vsnprintf_OBJECTS) $(test_vsnprintf_LDADD) $(LIBS) test-wchar$(EXEEXT): $(test_wchar_OBJECTS) $(test_wchar_DEPENDENCIES) $(EXTRA_test_wchar_DEPENDENCIES) @rm -f test-wchar$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wchar_OBJECTS) $(test_wchar_LDADD) $(LIBS) test-wcrtomb$(EXEEXT): $(test_wcrtomb_OBJECTS) $(test_wcrtomb_DEPENDENCIES) $(EXTRA_test_wcrtomb_DEPENDENCIES) @rm -f test-wcrtomb$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wcrtomb_OBJECTS) $(test_wcrtomb_LDADD) $(LIBS) test-wcrtomb-w32$(EXEEXT): $(test_wcrtomb_w32_OBJECTS) $(test_wcrtomb_w32_DEPENDENCIES) $(EXTRA_test_wcrtomb_w32_DEPENDENCIES) @rm -f test-wcrtomb-w32$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wcrtomb_w32_OBJECTS) $(test_wcrtomb_w32_LDADD) $(LIBS) test-wctype-h$(EXEEXT): $(test_wctype_h_OBJECTS) $(test_wctype_h_DEPENDENCIES) $(EXTRA_test_wctype_h_DEPENDENCIES) @rm -f test-wctype-h$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wctype_h_OBJECTS) $(test_wctype_h_LDADD) $(LIBS) test-wcwidth$(EXEEXT): $(test_wcwidth_OBJECTS) $(test_wcwidth_DEPENDENCIES) $(EXTRA_test_wcwidth_DEPENDENCIES) @rm -f test-wcwidth$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wcwidth_OBJECTS) $(test_wcwidth_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f glthread/*.$(OBJEXT) -rm -f uniwidth/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accept.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binary-io.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strcasecmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strncasecmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloexec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-hook.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdopen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftruncate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getcwd-lgpl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdtablesize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpagesize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_pton.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isblank.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnan.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnand.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localtime-buffer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloca.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nanosleep.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perror.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pthread_sigmask.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/putenv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raise.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setlocale.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setsockopt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sig-handler.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigaction.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigprocmask.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockets.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat-time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat-w32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symlink.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-accept.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-alloca-opt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-argp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-arpa_inet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-binary-io.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-btowc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-ctype.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strcasecmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strncasecmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cloexec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-close.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-connect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ctype.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dup2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-environ.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-errno.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl-h.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fdopen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fgetc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-float.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fputc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fstat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ftruncate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-func.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fwrite.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getcwd-lgpl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getdelim.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getdtablesize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getopt-gnu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getopt-posix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getprogname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gettimeofday.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ignore-value.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-inet_pton.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-intprops.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-inttypes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ioctl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isblank.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnand-nolibm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnanf-nolibm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnanl-nolibm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswblank.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-langinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-limits-h.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-listen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-locale.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-localeconv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-localename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-lock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-lstat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloc-gnu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloca.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-math.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc-w32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbschr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsinit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbspbrk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsspn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-memchr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nanosleep.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-netinet_in.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nl_langinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-open.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pathmax.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-perror.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-perror2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pipe.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread_sigmask1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread_sigmask2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-raise.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-rawmemchr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-regex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-rwlock1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-select-fd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-select-stdin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-select.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setenv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setsockopt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sigaction.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-signal-h.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-signbit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sigprocmask.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sleep.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sockets.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stat-time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdalign.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdbool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stddef.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdlib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strchrnul.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strerror.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strerror_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-string.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strnlen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strtod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-symlink.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_ioctl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_select.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_stat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_types.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_uio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sysexits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-thread_create.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-thread_self.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unistd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unsetenv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-usleep.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-vasnprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-verify-try.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-verify.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-vsnprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wchar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcrtomb-w32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcrtomb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wctype-h.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcwidth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usleep.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctob.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctomb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-uc_width.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-uc_width2.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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 # 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_LIBRARIES) $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test-accept.log: test-accept$(EXEEXT) @p='test-accept$(EXEEXT)'; \ b='test-accept'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-alloca-opt.log: test-alloca-opt$(EXEEXT) @p='test-alloca-opt$(EXEEXT)'; \ b='test-alloca-opt'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-argp.log: test-argp$(EXEEXT) @p='test-argp$(EXEEXT)'; \ b='test-argp'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-argp-2.sh.log: test-argp-2.sh @p='test-argp-2.sh'; \ b='test-argp-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-arpa_inet.log: test-arpa_inet$(EXEEXT) @p='test-arpa_inet$(EXEEXT)'; \ b='test-arpa_inet'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-binary-io.sh.log: test-binary-io.sh @p='test-binary-io.sh'; \ b='test-binary-io.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-bind.log: test-bind$(EXEEXT) @p='test-bind$(EXEEXT)'; \ b='test-bind'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-btowc1.sh.log: test-btowc1.sh @p='test-btowc1.sh'; \ b='test-btowc1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-btowc2.sh.log: test-btowc2.sh @p='test-btowc2.sh'; \ b='test-btowc2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c-ctype.log: test-c-ctype$(EXEEXT) @p='test-c-ctype$(EXEEXT)'; \ b='test-c-ctype'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c-strcase.sh.log: test-c-strcase.sh @p='test-c-strcase.sh'; \ b='test-c-strcase.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-cloexec.log: test-cloexec$(EXEEXT) @p='test-cloexec$(EXEEXT)'; \ b='test-cloexec'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-close.log: test-close$(EXEEXT) @p='test-close$(EXEEXT)'; \ b='test-close'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-connect.log: test-connect$(EXEEXT) @p='test-connect$(EXEEXT)'; \ b='test-connect'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype.log: test-ctype$(EXEEXT) @p='test-ctype$(EXEEXT)'; \ b='test-ctype'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-dup2.log: test-dup2$(EXEEXT) @p='test-dup2$(EXEEXT)'; \ b='test-dup2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-environ.log: test-environ$(EXEEXT) @p='test-environ$(EXEEXT)'; \ b='test-environ'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-errno.log: test-errno$(EXEEXT) @p='test-errno$(EXEEXT)'; \ b='test-errno'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fcntl-h.log: test-fcntl-h$(EXEEXT) @p='test-fcntl-h$(EXEEXT)'; \ b='test-fcntl-h'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fcntl.log: test-fcntl$(EXEEXT) @p='test-fcntl$(EXEEXT)'; \ b='test-fcntl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fdopen.log: test-fdopen$(EXEEXT) @p='test-fdopen$(EXEEXT)'; \ b='test-fdopen'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fgetc.log: test-fgetc$(EXEEXT) @p='test-fgetc$(EXEEXT)'; \ b='test-fgetc'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-float.log: test-float$(EXEEXT) @p='test-float$(EXEEXT)'; \ b='test-float'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fputc.log: test-fputc$(EXEEXT) @p='test-fputc$(EXEEXT)'; \ b='test-fputc'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fread.log: test-fread$(EXEEXT) @p='test-fread$(EXEEXT)'; \ b='test-fread'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fstat.log: test-fstat$(EXEEXT) @p='test-fstat$(EXEEXT)'; \ b='test-fstat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ftruncate.sh.log: test-ftruncate.sh @p='test-ftruncate.sh'; \ b='test-ftruncate.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-func.log: test-func$(EXEEXT) @p='test-func$(EXEEXT)'; \ b='test-func'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fwrite.log: test-fwrite$(EXEEXT) @p='test-fwrite$(EXEEXT)'; \ b='test-fwrite'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getcwd-lgpl.log: test-getcwd-lgpl$(EXEEXT) @p='test-getcwd-lgpl$(EXEEXT)'; \ b='test-getcwd-lgpl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getdelim.log: test-getdelim$(EXEEXT) @p='test-getdelim$(EXEEXT)'; \ b='test-getdelim'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getdtablesize.log: test-getdtablesize$(EXEEXT) @p='test-getdtablesize$(EXEEXT)'; \ b='test-getdtablesize'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getline.log: test-getline$(EXEEXT) @p='test-getline$(EXEEXT)'; \ b='test-getline'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getopt-gnu.log: test-getopt-gnu$(EXEEXT) @p='test-getopt-gnu$(EXEEXT)'; \ b='test-getopt-gnu'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getopt-posix.log: test-getopt-posix$(EXEEXT) @p='test-getopt-posix$(EXEEXT)'; \ b='test-getopt-posix'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getprogname.log: test-getprogname$(EXEEXT) @p='test-getprogname$(EXEEXT)'; \ b='test-getprogname'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-gettimeofday.log: test-gettimeofday$(EXEEXT) @p='test-gettimeofday$(EXEEXT)'; \ b='test-gettimeofday'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ignore-value.log: test-ignore-value$(EXEEXT) @p='test-ignore-value$(EXEEXT)'; \ b='test-ignore-value'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-inet_pton.log: test-inet_pton$(EXEEXT) @p='test-inet_pton$(EXEEXT)'; \ b='test-inet_pton'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-intprops.log: test-intprops$(EXEEXT) @p='test-intprops$(EXEEXT)'; \ b='test-intprops'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-inttypes.log: test-inttypes$(EXEEXT) @p='test-inttypes$(EXEEXT)'; \ b='test-inttypes'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ioctl.log: test-ioctl$(EXEEXT) @p='test-ioctl$(EXEEXT)'; \ b='test-ioctl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-isblank.log: test-isblank$(EXEEXT) @p='test-isblank$(EXEEXT)'; \ b='test-isblank'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-isnand-nolibm.log: test-isnand-nolibm$(EXEEXT) @p='test-isnand-nolibm$(EXEEXT)'; \ b='test-isnand-nolibm'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-isnanf-nolibm.log: test-isnanf-nolibm$(EXEEXT) @p='test-isnanf-nolibm$(EXEEXT)'; \ b='test-isnanf-nolibm'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-isnanl-nolibm.log: test-isnanl-nolibm$(EXEEXT) @p='test-isnanl-nolibm$(EXEEXT)'; \ b='test-isnanl-nolibm'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-iswblank.log: test-iswblank$(EXEEXT) @p='test-iswblank$(EXEEXT)'; \ b='test-iswblank'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-langinfo.log: test-langinfo$(EXEEXT) @p='test-langinfo$(EXEEXT)'; \ b='test-langinfo'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-limits-h.log: test-limits-h$(EXEEXT) @p='test-limits-h$(EXEEXT)'; \ b='test-limits-h'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-listen.log: test-listen$(EXEEXT) @p='test-listen$(EXEEXT)'; \ b='test-listen'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-locale.log: test-locale$(EXEEXT) @p='test-locale$(EXEEXT)'; \ b='test-locale'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-localeconv.log: test-localeconv$(EXEEXT) @p='test-localeconv$(EXEEXT)'; \ b='test-localeconv'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-localename.log: test-localename$(EXEEXT) @p='test-localename$(EXEEXT)'; \ b='test-localename'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-rwlock1.log: test-rwlock1$(EXEEXT) @p='test-rwlock1$(EXEEXT)'; \ b='test-rwlock1'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-lock.log: test-lock$(EXEEXT) @p='test-lock$(EXEEXT)'; \ b='test-lock'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-lstat.log: test-lstat$(EXEEXT) @p='test-lstat$(EXEEXT)'; \ b='test-lstat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-malloc-gnu.log: test-malloc-gnu$(EXEEXT) @p='test-malloc-gnu$(EXEEXT)'; \ b='test-malloc-gnu'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-malloca.log: test-malloca$(EXEEXT) @p='test-malloca$(EXEEXT)'; \ b='test-malloca'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-math.log: test-math$(EXEEXT) @p='test-math$(EXEEXT)'; \ b='test-math'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc1.sh.log: test-mbrtowc1.sh @p='test-mbrtowc1.sh'; \ b='test-mbrtowc1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc2.sh.log: test-mbrtowc2.sh @p='test-mbrtowc2.sh'; \ b='test-mbrtowc2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc3.sh.log: test-mbrtowc3.sh @p='test-mbrtowc3.sh'; \ b='test-mbrtowc3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc4.sh.log: test-mbrtowc4.sh @p='test-mbrtowc4.sh'; \ b='test-mbrtowc4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc5.sh.log: test-mbrtowc5.sh @p='test-mbrtowc5.sh'; \ b='test-mbrtowc5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-1.sh.log: test-mbrtowc-w32-1.sh @p='test-mbrtowc-w32-1.sh'; \ b='test-mbrtowc-w32-1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-2.sh.log: test-mbrtowc-w32-2.sh @p='test-mbrtowc-w32-2.sh'; \ b='test-mbrtowc-w32-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-3.sh.log: test-mbrtowc-w32-3.sh @p='test-mbrtowc-w32-3.sh'; \ b='test-mbrtowc-w32-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-4.sh.log: test-mbrtowc-w32-4.sh @p='test-mbrtowc-w32-4.sh'; \ b='test-mbrtowc-w32-4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-5.sh.log: test-mbrtowc-w32-5.sh @p='test-mbrtowc-w32-5.sh'; \ b='test-mbrtowc-w32-5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbschr.sh.log: test-mbschr.sh @p='test-mbschr.sh'; \ b='test-mbschr.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbsinit.sh.log: test-mbsinit.sh @p='test-mbsinit.sh'; \ b='test-mbsinit.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbspbrk.sh.log: test-mbspbrk.sh @p='test-mbspbrk.sh'; \ b='test-mbspbrk.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbsspn.sh.log: test-mbsspn.sh @p='test-mbsspn.sh'; \ b='test-mbsspn.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-memchr.log: test-memchr$(EXEEXT) @p='test-memchr$(EXEEXT)'; \ b='test-memchr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-nanosleep.log: test-nanosleep$(EXEEXT) @p='test-nanosleep$(EXEEXT)'; \ b='test-nanosleep'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-netinet_in.log: test-netinet_in$(EXEEXT) @p='test-netinet_in$(EXEEXT)'; \ b='test-netinet_in'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-nl_langinfo.sh.log: test-nl_langinfo.sh @p='test-nl_langinfo.sh'; \ b='test-nl_langinfo.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-open.log: test-open$(EXEEXT) @p='test-open$(EXEEXT)'; \ b='test-open'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pathmax.log: test-pathmax$(EXEEXT) @p='test-pathmax$(EXEEXT)'; \ b='test-pathmax'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-perror.sh.log: test-perror.sh @p='test-perror.sh'; \ b='test-perror.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-perror2.log: test-perror2$(EXEEXT) @p='test-perror2$(EXEEXT)'; \ b='test-perror2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pipe.log: test-pipe$(EXEEXT) @p='test-pipe$(EXEEXT)'; \ b='test-pipe'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pthread_sigmask1.log: test-pthread_sigmask1$(EXEEXT) @p='test-pthread_sigmask1$(EXEEXT)'; \ b='test-pthread_sigmask1'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pthread_sigmask2.log: test-pthread_sigmask2$(EXEEXT) @p='test-pthread_sigmask2$(EXEEXT)'; \ b='test-pthread_sigmask2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-raise.log: test-raise$(EXEEXT) @p='test-raise$(EXEEXT)'; \ b='test-raise'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-rawmemchr.log: test-rawmemchr$(EXEEXT) @p='test-rawmemchr$(EXEEXT)'; \ b='test-rawmemchr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-regex.log: test-regex$(EXEEXT) @p='test-regex$(EXEEXT)'; \ b='test-regex'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-select.log: test-select$(EXEEXT) @p='test-select$(EXEEXT)'; \ b='test-select'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-select-in.sh.log: test-select-in.sh @p='test-select-in.sh'; \ b='test-select-in.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-select-out.sh.log: test-select-out.sh @p='test-select-out.sh'; \ b='test-select-out.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setenv.log: test-setenv$(EXEEXT) @p='test-setenv$(EXEEXT)'; \ b='test-setenv'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setlocale1.sh.log: test-setlocale1.sh @p='test-setlocale1.sh'; \ b='test-setlocale1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setlocale2.sh.log: test-setlocale2.sh @p='test-setlocale2.sh'; \ b='test-setlocale2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setsockopt.log: test-setsockopt$(EXEEXT) @p='test-setsockopt$(EXEEXT)'; \ b='test-setsockopt'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sigaction.log: test-sigaction$(EXEEXT) @p='test-sigaction$(EXEEXT)'; \ b='test-sigaction'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-signal-h.log: test-signal-h$(EXEEXT) @p='test-signal-h$(EXEEXT)'; \ b='test-signal-h'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-signbit.log: test-signbit$(EXEEXT) @p='test-signbit$(EXEEXT)'; \ b='test-signbit'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sigprocmask.log: test-sigprocmask$(EXEEXT) @p='test-sigprocmask$(EXEEXT)'; \ b='test-sigprocmask'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sleep.log: test-sleep$(EXEEXT) @p='test-sleep$(EXEEXT)'; \ b='test-sleep'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sockets.log: test-sockets$(EXEEXT) @p='test-sockets$(EXEEXT)'; \ b='test-sockets'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stat.log: test-stat$(EXEEXT) @p='test-stat$(EXEEXT)'; \ b='test-stat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stat-time.log: test-stat-time$(EXEEXT) @p='test-stat-time$(EXEEXT)'; \ b='test-stat-time'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdalign.log: test-stdalign$(EXEEXT) @p='test-stdalign$(EXEEXT)'; \ b='test-stdalign'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdbool.log: test-stdbool$(EXEEXT) @p='test-stdbool$(EXEEXT)'; \ b='test-stdbool'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stddef.log: test-stddef$(EXEEXT) @p='test-stddef$(EXEEXT)'; \ b='test-stddef'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdint.log: test-stdint$(EXEEXT) @p='test-stdint$(EXEEXT)'; \ b='test-stdint'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdio.log: test-stdio$(EXEEXT) @p='test-stdio$(EXEEXT)'; \ b='test-stdio'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdlib.log: test-stdlib$(EXEEXT) @p='test-stdlib$(EXEEXT)'; \ b='test-stdlib'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strchrnul.log: test-strchrnul$(EXEEXT) @p='test-strchrnul$(EXEEXT)'; \ b='test-strchrnul'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strerror.log: test-strerror$(EXEEXT) @p='test-strerror$(EXEEXT)'; \ b='test-strerror'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strerror_r.log: test-strerror_r$(EXEEXT) @p='test-strerror_r$(EXEEXT)'; \ b='test-strerror_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-string.log: test-string$(EXEEXT) @p='test-string$(EXEEXT)'; \ b='test-string'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strings.log: test-strings$(EXEEXT) @p='test-strings$(EXEEXT)'; \ b='test-strings'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strnlen.log: test-strnlen$(EXEEXT) @p='test-strnlen$(EXEEXT)'; \ b='test-strnlen'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strtod.log: test-strtod$(EXEEXT) @p='test-strtod$(EXEEXT)'; \ b='test-strtod'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-symlink.log: test-symlink$(EXEEXT) @p='test-symlink$(EXEEXT)'; \ b='test-symlink'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_ioctl.log: test-sys_ioctl$(EXEEXT) @p='test-sys_ioctl$(EXEEXT)'; \ b='test-sys_ioctl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_select.log: test-sys_select$(EXEEXT) @p='test-sys_select$(EXEEXT)'; \ b='test-sys_select'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_socket.log: test-sys_socket$(EXEEXT) @p='test-sys_socket$(EXEEXT)'; \ b='test-sys_socket'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_stat.log: test-sys_stat$(EXEEXT) @p='test-sys_stat$(EXEEXT)'; \ b='test-sys_stat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_time.log: test-sys_time$(EXEEXT) @p='test-sys_time$(EXEEXT)'; \ b='test-sys_time'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_types.log: test-sys_types$(EXEEXT) @p='test-sys_types$(EXEEXT)'; \ b='test-sys_types'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_uio.log: test-sys_uio$(EXEEXT) @p='test-sys_uio$(EXEEXT)'; \ b='test-sys_uio'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sysexits.log: test-sysexits$(EXEEXT) @p='test-sysexits$(EXEEXT)'; \ b='test-sysexits'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-init.sh.log: test-init.sh @p='test-init.sh'; \ b='test-init.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-thread_self.log: test-thread_self$(EXEEXT) @p='test-thread_self$(EXEEXT)'; \ b='test-thread_self'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-thread_create.log: test-thread_create$(EXEEXT) @p='test-thread_create$(EXEEXT)'; \ b='test-thread_create'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-time.log: test-time$(EXEEXT) @p='test-time$(EXEEXT)'; \ b='test-time'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-unistd.log: test-unistd$(EXEEXT) @p='test-unistd$(EXEEXT)'; \ b='test-unistd'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-uc_width.log: test-uc_width$(EXEEXT) @p='test-uc_width$(EXEEXT)'; \ b='test-uc_width'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) uniwidth/test-uc_width2.sh.log: uniwidth/test-uc_width2.sh @p='uniwidth/test-uc_width2.sh'; \ b='uniwidth/test-uc_width2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-unsetenv.log: test-unsetenv$(EXEEXT) @p='test-unsetenv$(EXEEXT)'; \ b='test-unsetenv'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-usleep.log: test-usleep$(EXEEXT) @p='test-usleep$(EXEEXT)'; \ b='test-usleep'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-vasnprintf.log: test-vasnprintf$(EXEEXT) @p='test-vasnprintf$(EXEEXT)'; \ b='test-vasnprintf'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-verify.log: test-verify$(EXEEXT) @p='test-verify$(EXEEXT)'; \ b='test-verify'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-verify.sh.log: test-verify.sh @p='test-verify.sh'; \ b='test-verify.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-vsnprintf.log: test-vsnprintf$(EXEEXT) @p='test-vsnprintf$(EXEEXT)'; \ b='test-vsnprintf'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wchar.log: test-wchar$(EXEEXT) @p='test-wchar$(EXEEXT)'; \ b='test-wchar'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb.sh.log: test-wcrtomb.sh @p='test-wcrtomb.sh'; \ b='test-wcrtomb.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-1.sh.log: test-wcrtomb-w32-1.sh @p='test-wcrtomb-w32-1.sh'; \ b='test-wcrtomb-w32-1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-2.sh.log: test-wcrtomb-w32-2.sh @p='test-wcrtomb-w32-2.sh'; \ b='test-wcrtomb-w32-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-3.sh.log: test-wcrtomb-w32-3.sh @p='test-wcrtomb-w32-3.sh'; \ b='test-wcrtomb-w32-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-4.sh.log: test-wcrtomb-w32-4.sh @p='test-wcrtomb-w32-4.sh'; \ b='test-wcrtomb-w32-4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-5.sh.log: test-wcrtomb-w32-5.sh @p='test-wcrtomb-w32-5.sh'; \ b='test-wcrtomb-w32-5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wctype-h.log: test-wctype-h$(EXEEXT) @p='test-wctype-h$(EXEEXT)'; \ b='test-wctype-h'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcwidth.log: test-wcwidth$(EXEEXT) @p='test-wcwidth$(EXEEXT)'; \ b='test-wcwidth'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @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 $(MAKE) $(AM_MAKEFLAGS) $(check_LIBRARIES) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS) installdirs: installdirs-recursive installdirs-am: 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: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -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) -rm -f glthread/$(DEPDIR)/$(am__dirstamp) -rm -f glthread/$(am__dirstamp) -rm -f uniwidth/$(DEPDIR)/$(am__dirstamp) -rm -f uniwidth/$(am__dirstamp) -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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ clean-libtool clean-local clean-noinstLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) glthread/$(DEPDIR) uniwidth/$(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-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 -rf ./$(DEPDIR) glthread/$(DEPDIR) uniwidth/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check check-am install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-TESTS check-am clean clean-checkLIBRARIES \ clean-checkPROGRAMS clean-generic clean-libtool clean-local \ clean-noinstLIBRARIES clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # We need the following in order to create when the system # doesn't have one. arpa/inet.h: arpa_inet.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_at)$(MKDIR_P) arpa $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_ARPA_INET_H''@|$(NEXT_ARPA_INET_H)|g' \ -e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \ -e 's/@''GNULIB_INET_NTOP''@/$(GNULIB_INET_NTOP)/g' \ -e 's/@''GNULIB_INET_PTON''@/$(GNULIB_INET_PTON)/g' \ -e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \ -e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \ -e 's|@''REPLACE_INET_NTOP''@|$(REPLACE_INET_NTOP)|g' \ -e 's|@''REPLACE_INET_PTON''@|$(REPLACE_INET_PTON)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/arpa_inet.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_CTYPE_H''@|$(NEXT_CTYPE_H)|g' \ -e 's/@''GNULIB_ISBLANK''@/$(GNULIB_ISBLANK)/g' \ -e 's/@''HAVE_ISBLANK''@/$(HAVE_ISBLANK)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/ctype.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/fcntl.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one. @GL_GENERATE_NETINET_IN_H_TRUE@netinet/in.h: netinet_in.in.h $(top_builddir)/config.status @GL_GENERATE_NETINET_IN_H_TRUE@ $(AM_V_at)$(MKDIR_P) netinet @GL_GENERATE_NETINET_IN_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_NETINET_IN_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_NETINET_IN_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ < $(srcdir)/netinet_in.in.h; \ @GL_GENERATE_NETINET_IN_H_TRUE@ } > $@-t && \ @GL_GENERATE_NETINET_IN_H_TRUE@ mv $@-t $@ @GL_GENERATE_NETINET_IN_H_FALSE@netinet/in.h: $(top_builddir)/config.status @GL_GENERATE_NETINET_IN_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have a complete one. signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ -e 's|@''GNULIB_PTHREAD_SIGMASK''@|$(GNULIB_PTHREAD_SIGMASK)|g' \ -e 's|@''GNULIB_RAISE''@|$(GNULIB_RAISE)|g' \ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \ -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \ -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \ -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/signal.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # does not have a complete one. sys/ioctl.h: sys_ioctl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SYS_IOCTL_H''@|$(HAVE_SYS_IOCTL_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_IOCTL_H''@|$(NEXT_SYS_IOCTL_H)|g' \ -e 's/@''GNULIB_IOCTL''@/$(GNULIB_IOCTL)/g' \ -e 's|@''SYS_IOCTL_H_HAVE_WINSOCK2_H''@|$(SYS_IOCTL_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e 's|@''REPLACE_IOCTL''@|$(REPLACE_IOCTL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_ioctl.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/select.h: sys_select.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_SELECT_H''@|$(NEXT_SYS_SELECT_H)|g' \ -e 's|@''HAVE_SYS_SELECT_H''@|$(HAVE_SYS_SELECT_H)|g' \ -e 's/@''GNULIB_PSELECT''@/$(GNULIB_PSELECT)/g' \ -e 's/@''GNULIB_SELECT''@/$(GNULIB_SELECT)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_PSELECT''@|$(HAVE_PSELECT)|g' \ -e 's|@''REPLACE_PSELECT''@|$(REPLACE_PSELECT)|g' \ -e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_select.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \ -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_SOCKET''@/$(GNULIB_SOCKET)/g' \ -e 's/@''GNULIB_CONNECT''@/$(GNULIB_CONNECT)/g' \ -e 's/@''GNULIB_ACCEPT''@/$(GNULIB_ACCEPT)/g' \ -e 's/@''GNULIB_BIND''@/$(GNULIB_BIND)/g' \ -e 's/@''GNULIB_GETPEERNAME''@/$(GNULIB_GETPEERNAME)/g' \ -e 's/@''GNULIB_GETSOCKNAME''@/$(GNULIB_GETSOCKNAME)/g' \ -e 's/@''GNULIB_GETSOCKOPT''@/$(GNULIB_GETSOCKOPT)/g' \ -e 's/@''GNULIB_LISTEN''@/$(GNULIB_LISTEN)/g' \ -e 's/@''GNULIB_RECV''@/$(GNULIB_RECV)/g' \ -e 's/@''GNULIB_SEND''@/$(GNULIB_SEND)/g' \ -e 's/@''GNULIB_RECVFROM''@/$(GNULIB_RECVFROM)/g' \ -e 's/@''GNULIB_SENDTO''@/$(GNULIB_SENDTO)/g' \ -e 's/@''GNULIB_SETSOCKOPT''@/$(GNULIB_SETSOCKOPT)/g' \ -e 's/@''GNULIB_SHUTDOWN''@/$(GNULIB_SHUTDOWN)/g' \ -e 's/@''GNULIB_ACCEPT4''@/$(GNULIB_ACCEPT4)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \ -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY''@|$(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)|g' \ -e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \ -e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_socket.in.h; \ } > $@-t && \ mv -f $@-t $@ # We need the following in order to create when the system # has one that is incomplete. sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \ -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \ -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \ -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \ -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \ -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \ -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \ -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_stat.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_time.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/uio.h: sys_uio.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_UIO_H''@|$(NEXT_SYS_UIO_H)|g' \ -e 's|@''HAVE_SYS_UIO_H''@|$(HAVE_SYS_UIO_H)|g' \ < $(srcdir)/sys_uio.in.h; \ } > $@-t && \ mv -f $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ -e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \ -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ -e 's|@''HAVE_TZSET''@|$(HAVE_TZSET)|g' \ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/time.in.h; \ } > $@-t && \ mv $@-t $@ # Clean up after Solaris cc. clean-local: rm -rf SunWS_cache mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : # 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: gnuastro-0.5/bootstrapped/tests/Makefile.am0000644000175000017500000016166513217200047016060 00000000000000## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. AUTOMAKE_OPTIONS = 1.9.6 foreign subdir-objects SUBDIRS = . TESTS = XFAIL_TESTS = TESTS_ENVIRONMENT = noinst_PROGRAMS = check_PROGRAMS = EXTRA_PROGRAMS = noinst_HEADERS = noinst_LIBRARIES = check_LIBRARIES = libtests.a EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CPPFLAGS = \ -D@gltests_WITNESS@=1 \ -I. -I$(srcdir) \ -I../.. -I$(srcdir)/../.. \ -I../../bootstrapped/lib -I$(srcdir)/../../bootstrapped/lib LDADD = libtests.a ../../bootstrapped/lib/libgnu.la libtests.a $(LIBTESTS_LIBDEPS) libtests_a_SOURCES = libtests_a_LIBADD = $(gltests_LIBOBJS) libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) EXTRA_libtests_a_SOURCES = AM_LIBTOOLFLAGS = --preserve-dup-deps TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' ## begin gnulib module accept EXTRA_DIST += accept.c w32sock.h EXTRA_libtests_a_SOURCES += accept.c ## end gnulib module accept ## begin gnulib module accept-tests TESTS += test-accept check_PROGRAMS += test-accept test_accept_LDADD = $(LDADD) @LIBSOCKET@ EXTRA_DIST += test-accept.c signature.h macros.h ## end gnulib module accept-tests ## begin gnulib module alloca-opt-tests TESTS += test-alloca-opt check_PROGRAMS += test-alloca-opt EXTRA_DIST += test-alloca-opt.c ## end gnulib module alloca-opt-tests ## begin gnulib module argp-tests TESTS += test-argp test-argp-2.sh check_PROGRAMS += test-argp test_argp_LDADD = $(LDADD) @LIBINTL@ EXTRA_DIST += test-argp.c test-argp-2.sh macros.h ## end gnulib module argp-tests ## begin gnulib module arpa_inet BUILT_SOURCES += arpa/inet.h # We need the following in order to create when the system # doesn't have one. arpa/inet.h: arpa_inet.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_at)$(MKDIR_P) arpa $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_ARPA_INET_H''@|$(NEXT_ARPA_INET_H)|g' \ -e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \ -e 's/@''GNULIB_INET_NTOP''@/$(GNULIB_INET_NTOP)/g' \ -e 's/@''GNULIB_INET_PTON''@/$(GNULIB_INET_PTON)/g' \ -e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \ -e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \ -e 's|@''REPLACE_INET_NTOP''@|$(REPLACE_INET_NTOP)|g' \ -e 's|@''REPLACE_INET_PTON''@|$(REPLACE_INET_PTON)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/arpa_inet.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t MOSTLYCLEANDIRS += arpa EXTRA_DIST += arpa_inet.in.h ## end gnulib module arpa_inet ## begin gnulib module arpa_inet-tests TESTS += test-arpa_inet check_PROGRAMS += test-arpa_inet EXTRA_DIST += test-arpa_inet.c ## end gnulib module arpa_inet-tests ## begin gnulib module binary-io libtests_a_SOURCES += binary-io.h binary-io.c ## end gnulib module binary-io ## begin gnulib module binary-io-tests TESTS += test-binary-io.sh check_PROGRAMS += test-binary-io EXTRA_DIST += test-binary-io.sh test-binary-io.c macros.h ## end gnulib module binary-io-tests ## begin gnulib module bind EXTRA_DIST += bind.c w32sock.h EXTRA_libtests_a_SOURCES += bind.c ## end gnulib module bind ## begin gnulib module bind-tests TESTS += test-bind check_PROGRAMS += test-bind test_bind_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) EXTRA_DIST += test-bind.c signature.h macros.h ## end gnulib module bind-tests ## begin gnulib module btowc-tests TESTS += test-btowc1.sh test-btowc2.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-btowc EXTRA_DIST += test-btowc1.sh test-btowc2.sh test-btowc.c signature.h macros.h ## end gnulib module btowc-tests ## begin gnulib module c-ctype-tests TESTS += test-c-ctype check_PROGRAMS += test-c-ctype EXTRA_DIST += test-c-ctype.c macros.h ## end gnulib module c-ctype-tests ## begin gnulib module c-strcase libtests_a_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c ## end gnulib module c-strcase ## begin gnulib module c-strcase-tests TESTS += test-c-strcase.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' check_PROGRAMS += test-c-strcasecmp test-c-strncasecmp EXTRA_DIST += test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c macros.h ## end gnulib module c-strcase-tests ## begin gnulib module cloexec libtests_a_SOURCES += cloexec.c EXTRA_DIST += cloexec.h ## end gnulib module cloexec ## begin gnulib module cloexec-tests TESTS += test-cloexec check_PROGRAMS += test-cloexec EXTRA_DIST += test-cloexec.c macros.h ## end gnulib module cloexec-tests ## begin gnulib module close EXTRA_DIST += close.c EXTRA_libtests_a_SOURCES += close.c ## end gnulib module close ## begin gnulib module close-tests TESTS += test-close check_PROGRAMS += test-close EXTRA_DIST += test-close.c signature.h macros.h ## end gnulib module close-tests ## begin gnulib module connect EXTRA_DIST += connect.c w32sock.h EXTRA_libtests_a_SOURCES += connect.c ## end gnulib module connect ## begin gnulib module connect-tests TESTS += test-connect check_PROGRAMS += test-connect test_connect_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) EXTRA_DIST += test-connect.c signature.h macros.h ## end gnulib module connect-tests ## begin gnulib module ctype BUILT_SOURCES += ctype.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_CTYPE_H''@|$(NEXT_CTYPE_H)|g' \ -e 's/@''GNULIB_ISBLANK''@/$(GNULIB_ISBLANK)/g' \ -e 's/@''HAVE_ISBLANK''@/$(HAVE_ISBLANK)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/ctype.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += ctype.h ctype.h-t EXTRA_DIST += ctype.in.h ## end gnulib module ctype ## begin gnulib module ctype-tests TESTS += test-ctype check_PROGRAMS += test-ctype EXTRA_DIST += test-ctype.c ## end gnulib module ctype-tests ## begin gnulib module dup2 EXTRA_DIST += dup2.c EXTRA_libtests_a_SOURCES += dup2.c ## end gnulib module dup2 ## begin gnulib module dup2-tests TESTS += test-dup2 check_PROGRAMS += test-dup2 EXTRA_DIST += test-dup2.c signature.h macros.h ## end gnulib module dup2-tests ## begin gnulib module environ-tests TESTS += test-environ check_PROGRAMS += test-environ EXTRA_DIST += test-environ.c ## end gnulib module environ-tests ## begin gnulib module errno-tests TESTS += test-errno check_PROGRAMS += test-errno EXTRA_DIST += test-errno.c ## end gnulib module errno-tests ## begin gnulib module fcntl EXTRA_DIST += fcntl.c EXTRA_libtests_a_SOURCES += fcntl.c ## end gnulib module fcntl ## begin gnulib module fcntl-h BUILT_SOURCES += fcntl.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/fcntl.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += fcntl.h fcntl.h-t EXTRA_DIST += fcntl.in.h ## end gnulib module fcntl-h ## begin gnulib module fcntl-h-tests TESTS += test-fcntl-h check_PROGRAMS += test-fcntl-h EXTRA_DIST += test-fcntl-h.c ## end gnulib module fcntl-h-tests ## begin gnulib module fcntl-tests TESTS += test-fcntl check_PROGRAMS += test-fcntl EXTRA_DIST += test-fcntl.c signature.h macros.h ## end gnulib module fcntl-tests ## begin gnulib module fd-hook libtests_a_SOURCES += fd-hook.c EXTRA_DIST += fd-hook.h ## end gnulib module fd-hook ## begin gnulib module fdopen EXTRA_DIST += fdopen.c EXTRA_libtests_a_SOURCES += fdopen.c ## end gnulib module fdopen ## begin gnulib module fdopen-tests TESTS += test-fdopen check_PROGRAMS += test-fdopen EXTRA_DIST += test-fdopen.c signature.h macros.h ## end gnulib module fdopen-tests ## begin gnulib module fgetc-tests TESTS += test-fgetc check_PROGRAMS += test-fgetc EXTRA_DIST += test-fgetc.c signature.h macros.h ## end gnulib module fgetc-tests ## begin gnulib module filename EXTRA_DIST += filename.h ## end gnulib module filename ## begin gnulib module flexmember EXTRA_DIST += flexmember.h ## end gnulib module flexmember ## begin gnulib module float-tests TESTS += test-float check_PROGRAMS += test-float EXTRA_DIST += test-float.c macros.h ## end gnulib module float-tests ## begin gnulib module fpucw EXTRA_DIST += fpucw.h ## end gnulib module fpucw ## begin gnulib module fputc-tests TESTS += test-fputc check_PROGRAMS += test-fputc EXTRA_DIST += test-fputc.c signature.h macros.h ## end gnulib module fputc-tests ## begin gnulib module fread-tests TESTS += test-fread check_PROGRAMS += test-fread EXTRA_DIST += test-fread.c signature.h macros.h ## end gnulib module fread-tests ## begin gnulib module fstat EXTRA_DIST += fstat.c stat-w32.c stat-w32.h EXTRA_libtests_a_SOURCES += fstat.c stat-w32.c ## end gnulib module fstat ## begin gnulib module fstat-tests TESTS += test-fstat check_PROGRAMS += test-fstat EXTRA_DIST += test-fstat.c signature.h macros.h ## end gnulib module fstat-tests ## begin gnulib module ftruncate EXTRA_DIST += ftruncate.c EXTRA_libtests_a_SOURCES += ftruncate.c ## end gnulib module ftruncate ## begin gnulib module ftruncate-tests TESTS += test-ftruncate.sh check_PROGRAMS += test-ftruncate EXTRA_DIST += test-ftruncate.c test-ftruncate.sh signature.h macros.h ## end gnulib module ftruncate-tests ## begin gnulib module func-tests TESTS += test-func check_PROGRAMS += test-func EXTRA_DIST += test-func.c macros.h ## end gnulib module func-tests ## begin gnulib module fwrite-tests TESTS += test-fwrite check_PROGRAMS += test-fwrite EXTRA_DIST += test-fwrite.c signature.h macros.h ## end gnulib module fwrite-tests ## begin gnulib module getcwd-lgpl EXTRA_DIST += getcwd-lgpl.c EXTRA_libtests_a_SOURCES += getcwd-lgpl.c ## end gnulib module getcwd-lgpl ## begin gnulib module getcwd-lgpl-tests TESTS += test-getcwd-lgpl check_PROGRAMS += test-getcwd-lgpl test_getcwd_lgpl_LDADD = $(LDADD) $(LIBINTL) EXTRA_DIST += test-getcwd-lgpl.c signature.h macros.h ## end gnulib module getcwd-lgpl-tests ## begin gnulib module getdelim-tests TESTS += test-getdelim check_PROGRAMS += test-getdelim MOSTLYCLEANFILES += test-getdelim.txt EXTRA_DIST += test-getdelim.c signature.h macros.h ## end gnulib module getdelim-tests ## begin gnulib module getdtablesize EXTRA_DIST += getdtablesize.c EXTRA_libtests_a_SOURCES += getdtablesize.c ## end gnulib module getdtablesize ## begin gnulib module getdtablesize-tests TESTS += test-getdtablesize check_PROGRAMS += test-getdtablesize EXTRA_DIST += test-getdtablesize.c signature.h macros.h ## end gnulib module getdtablesize-tests ## begin gnulib module getline-tests TESTS += test-getline check_PROGRAMS += test-getline MOSTLYCLEANFILES += test-getline.txt EXTRA_DIST += test-getline.c signature.h macros.h ## end gnulib module getline-tests ## begin gnulib module getopt-gnu-tests TESTS += test-getopt-gnu check_PROGRAMS += test-getopt-gnu test_getopt_gnu_LDADD = $(LDADD) $(LIBINTL) EXTRA_DIST += macros.h signature.h test-getopt-gnu.c test-getopt-main.h test-getopt.h test-getopt_long.h ## end gnulib module getopt-gnu-tests ## begin gnulib module getopt-posix-tests TESTS += test-getopt-posix check_PROGRAMS += test-getopt-posix test_getopt_posix_LDADD = $(LDADD) $(LIBINTL) EXTRA_DIST += macros.h signature.h test-getopt-posix.c test-getopt-main.h test-getopt.h ## end gnulib module getopt-posix-tests ## begin gnulib module getpagesize EXTRA_DIST += getpagesize.c EXTRA_libtests_a_SOURCES += getpagesize.c ## end gnulib module getpagesize ## begin gnulib module getprogname-tests DEFS += -DEXEEXT=\"@EXEEXT@\" TESTS += test-getprogname check_PROGRAMS += test-getprogname test_getprogname_LDADD = $(LDADD) EXTRA_DIST += test-getprogname.c ## end gnulib module getprogname-tests ## begin gnulib module gettimeofday EXTRA_DIST += gettimeofday.c EXTRA_libtests_a_SOURCES += gettimeofday.c ## end gnulib module gettimeofday ## begin gnulib module gettimeofday-tests TESTS += test-gettimeofday check_PROGRAMS += test-gettimeofday EXTRA_DIST += signature.h test-gettimeofday.c ## end gnulib module gettimeofday-tests ## begin gnulib module ignore-value EXTRA_DIST += ignore-value.h ## end gnulib module ignore-value ## begin gnulib module ignore-value-tests TESTS += test-ignore-value check_PROGRAMS += test-ignore-value EXTRA_DIST += test-ignore-value.c ## end gnulib module ignore-value-tests ## begin gnulib module inet_pton EXTRA_DIST += inet_pton.c EXTRA_libtests_a_SOURCES += inet_pton.c ## end gnulib module inet_pton ## begin gnulib module inet_pton-tests TESTS += test-inet_pton check_PROGRAMS += test-inet_pton test_inet_pton_LDADD = $(LDADD) @INET_PTON_LIB@ EXTRA_DIST += test-inet_pton.c signature.h macros.h ## end gnulib module inet_pton-tests ## begin gnulib module intprops-tests TESTS += test-intprops check_PROGRAMS += test-intprops EXTRA_DIST += test-intprops.c macros.h ## end gnulib module intprops-tests ## begin gnulib module inttypes-tests TESTS += test-inttypes check_PROGRAMS += test-inttypes EXTRA_DIST += test-inttypes.c ## end gnulib module inttypes-tests ## begin gnulib module ioctl EXTRA_DIST += ioctl.c w32sock.h EXTRA_libtests_a_SOURCES += ioctl.c ## end gnulib module ioctl ## begin gnulib module ioctl-tests TESTS += test-ioctl check_PROGRAMS += test-ioctl EXTRA_DIST += test-ioctl.c signature.h macros.h ## end gnulib module ioctl-tests ## begin gnulib module isblank EXTRA_DIST += isblank.c EXTRA_libtests_a_SOURCES += isblank.c ## end gnulib module isblank ## begin gnulib module isblank-tests TESTS += test-isblank check_PROGRAMS += test-isblank EXTRA_DIST += test-isblank.c signature.h macros.h ## end gnulib module isblank-tests ## begin gnulib module isnand-nolibm EXTRA_DIST += float+.h isnan.c isnand-nolibm.h isnand.c EXTRA_libtests_a_SOURCES += isnan.c isnand.c ## end gnulib module isnand-nolibm ## begin gnulib module isnand-nolibm-tests TESTS += test-isnand-nolibm check_PROGRAMS += test-isnand-nolibm EXTRA_DIST += test-isnand-nolibm.c test-isnand.h minus-zero.h infinity.h nan.h macros.h ## end gnulib module isnand-nolibm-tests ## begin gnulib module isnanf-nolibm EXTRA_DIST += float+.h isnan.c isnanf-nolibm.h isnanf.c EXTRA_libtests_a_SOURCES += isnan.c isnanf.c ## end gnulib module isnanf-nolibm ## begin gnulib module isnanf-nolibm-tests TESTS += test-isnanf-nolibm check_PROGRAMS += test-isnanf-nolibm EXTRA_DIST += test-isnanf-nolibm.c test-isnanf.h minus-zero.h infinity.h nan.h macros.h ## end gnulib module isnanf-nolibm-tests ## begin gnulib module isnanl-nolibm EXTRA_DIST += float+.h isnan.c isnanl-nolibm.h isnanl.c EXTRA_libtests_a_SOURCES += isnan.c isnanl.c ## end gnulib module isnanl-nolibm ## begin gnulib module isnanl-nolibm-tests TESTS += test-isnanl-nolibm check_PROGRAMS += test-isnanl-nolibm EXTRA_DIST += test-isnanl-nolibm.c test-isnanl.h minus-zero.h infinity.h nan.h macros.h ## end gnulib module isnanl-nolibm-tests ## begin gnulib module iswblank-tests TESTS += test-iswblank check_PROGRAMS += test-iswblank EXTRA_DIST += test-iswblank.c macros.h ## end gnulib module iswblank-tests ## begin gnulib module langinfo-tests TESTS += test-langinfo check_PROGRAMS += test-langinfo EXTRA_DIST += test-langinfo.c ## end gnulib module langinfo-tests ## begin gnulib module limits-h-tests TESTS += test-limits-h check_PROGRAMS += test-limits-h EXTRA_DIST += test-limits-h.c ## end gnulib module limits-h-tests ## begin gnulib module listen EXTRA_DIST += listen.c w32sock.h EXTRA_libtests_a_SOURCES += listen.c ## end gnulib module listen ## begin gnulib module listen-tests TESTS += test-listen check_PROGRAMS += test-listen test_listen_LDADD = $(LDADD) @LIBSOCKET@ EXTRA_DIST += test-listen.c signature.h macros.h ## end gnulib module listen-tests ## begin gnulib module locale-tests TESTS += test-locale check_PROGRAMS += test-locale EXTRA_DIST += test-locale.c ## end gnulib module locale-tests ## begin gnulib module localeconv-tests TESTS += test-localeconv check_PROGRAMS += test-localeconv EXTRA_DIST += test-localeconv.c signature.h macros.h ## end gnulib module localeconv-tests ## begin gnulib module localename libtests_a_SOURCES += localename.c EXTRA_DIST += localename.h ## end gnulib module localename ## begin gnulib module localename-tests TESTS += test-localename check_PROGRAMS += test-localename test_localename_LDADD = $(LDADD) @INTL_MACOSX_LIBS@ $(LIBTHREAD) EXTRA_DIST += test-localename.c macros.h ## end gnulib module localename-tests ## begin gnulib module localtime-buffer EXTRA_DIST += localtime-buffer.c localtime-buffer.h EXTRA_libtests_a_SOURCES += localtime-buffer.c ## end gnulib module localtime-buffer ## begin gnulib module lock-tests TESTS += test-rwlock1 test-lock check_PROGRAMS += test-rwlock1 test-lock test_rwlock1_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ test_lock_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ EXTRA_DIST += test-rwlock1.c test-lock.c ## end gnulib module lock-tests ## begin gnulib module lstat EXTRA_DIST += lstat.c EXTRA_libtests_a_SOURCES += lstat.c ## end gnulib module lstat ## begin gnulib module lstat-tests TESTS += test-lstat check_PROGRAMS += test-lstat EXTRA_DIST += test-lstat.h test-lstat.c signature.h macros.h ## end gnulib module lstat-tests ## begin gnulib module malloc-gnu-tests TESTS += test-malloc-gnu check_PROGRAMS += test-malloc-gnu EXTRA_DIST += test-malloc-gnu.c ## end gnulib module malloc-gnu-tests ## begin gnulib module malloca libtests_a_SOURCES += malloca.c EXTRA_DIST += malloca.h malloca.valgrind ## end gnulib module malloca ## begin gnulib module malloca-tests TESTS += test-malloca check_PROGRAMS += test-malloca EXTRA_DIST += test-malloca.c ## end gnulib module malloca-tests ## begin gnulib module math-tests TESTS += test-math check_PROGRAMS += test-math EXTRA_DIST += test-math.c macros.h ## end gnulib module math-tests ## begin gnulib module mbrtowc-tests TESTS += \ test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh \ test-mbrtowc5.sh \ test-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh \ test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-mbrtowc test-mbrtowc-w32 EXTRA_DIST += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc5.sh test-mbrtowc.c test-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh test-mbrtowc-w32.c signature.h macros.h ## end gnulib module mbrtowc-tests ## begin gnulib module mbschr-tests TESTS += test-mbschr.sh TESTS_ENVIRONMENT += LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-mbschr EXTRA_DIST += test-mbschr.sh test-mbschr.c macros.h ## end gnulib module mbschr-tests ## begin gnulib module mbsinit-tests TESTS += test-mbsinit.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbsinit EXTRA_DIST += test-mbsinit.sh test-mbsinit.c signature.h macros.h ## end gnulib module mbsinit-tests ## begin gnulib module mbspbrk-tests TESTS += test-mbspbrk.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbspbrk EXTRA_DIST += test-mbspbrk.sh test-mbspbrk.c macros.h ## end gnulib module mbspbrk-tests ## begin gnulib module mbsspn-tests TESTS += test-mbsspn.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbsspn EXTRA_DIST += test-mbsspn.sh test-mbsspn.c macros.h ## end gnulib module mbsspn-tests ## begin gnulib module memchr-tests TESTS += test-memchr check_PROGRAMS += test-memchr EXTRA_DIST += test-memchr.c zerosize-ptr.h signature.h macros.h ## end gnulib module memchr-tests ## begin gnulib module nanosleep EXTRA_DIST += nanosleep.c EXTRA_libtests_a_SOURCES += nanosleep.c ## end gnulib module nanosleep ## begin gnulib module nanosleep-tests TESTS += test-nanosleep check_PROGRAMS += test-nanosleep test_nanosleep_LDADD = $(LDADD) $(LIB_NANOSLEEP) EXTRA_DIST += test-nanosleep.c signature.h macros.h ## end gnulib module nanosleep-tests ## begin gnulib module netinet_in BUILT_SOURCES += $(NETINET_IN_H) # We need the following in order to create when the system # doesn't have one. if GL_GENERATE_NETINET_IN_H netinet/in.h: netinet_in.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) netinet $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \ -e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \ < $(srcdir)/netinet_in.in.h; \ } > $@-t && \ mv $@-t $@ else netinet/in.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t MOSTLYCLEANDIRS += netinet EXTRA_DIST += netinet_in.in.h ## end gnulib module netinet_in ## begin gnulib module netinet_in-tests TESTS += test-netinet_in check_PROGRAMS += test-netinet_in EXTRA_DIST += test-netinet_in.c ## end gnulib module netinet_in-tests ## begin gnulib module nl_langinfo-tests TESTS += test-nl_langinfo.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-nl_langinfo EXTRA_DIST += test-nl_langinfo.sh test-nl_langinfo.c signature.h macros.h ## end gnulib module nl_langinfo-tests ## begin gnulib module open EXTRA_DIST += open.c EXTRA_libtests_a_SOURCES += open.c ## end gnulib module open ## begin gnulib module open-tests TESTS += test-open check_PROGRAMS += test-open EXTRA_DIST += test-open.h test-open.c signature.h macros.h ## end gnulib module open-tests ## begin gnulib module pathmax EXTRA_DIST += pathmax.h ## end gnulib module pathmax ## begin gnulib module pathmax-tests TESTS += test-pathmax check_PROGRAMS += test-pathmax EXTRA_DIST += test-pathmax.c ## end gnulib module pathmax-tests ## begin gnulib module perror EXTRA_DIST += perror.c EXTRA_libtests_a_SOURCES += perror.c ## end gnulib module perror ## begin gnulib module perror-tests TESTS += test-perror.sh test-perror2 check_PROGRAMS += test-perror test-perror2 EXTRA_DIST += macros.h signature.h test-perror.c test-perror2.c test-perror.sh ## end gnulib module perror-tests ## begin gnulib module pipe-posix EXTRA_DIST += pipe.c EXTRA_libtests_a_SOURCES += pipe.c ## end gnulib module pipe-posix ## begin gnulib module pipe-posix-tests TESTS += test-pipe check_PROGRAMS += test-pipe EXTRA_DIST += test-pipe.c signature.h macros.h ## end gnulib module pipe-posix-tests ## begin gnulib module pthread_sigmask EXTRA_DIST += pthread_sigmask.c EXTRA_libtests_a_SOURCES += pthread_sigmask.c ## end gnulib module pthread_sigmask ## begin gnulib module pthread_sigmask-tests TESTS += test-pthread_sigmask1 test-pthread_sigmask2 check_PROGRAMS += test-pthread_sigmask1 test-pthread_sigmask2 test_pthread_sigmask1_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ test_pthread_sigmask2_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ @LIBMULTITHREAD@ EXTRA_DIST += test-pthread_sigmask1.c test-pthread_sigmask2.c signature.h macros.h ## end gnulib module pthread_sigmask-tests ## begin gnulib module putenv EXTRA_DIST += putenv.c EXTRA_libtests_a_SOURCES += putenv.c ## end gnulib module putenv ## begin gnulib module raise EXTRA_DIST += raise.c EXTRA_libtests_a_SOURCES += raise.c ## end gnulib module raise ## begin gnulib module raise-tests TESTS += test-raise check_PROGRAMS += test-raise EXTRA_DIST += test-raise.c signature.h macros.h ## end gnulib module raise-tests ## begin gnulib module rawmemchr-tests TESTS += test-rawmemchr check_PROGRAMS += test-rawmemchr EXTRA_DIST += test-rawmemchr.c zerosize-ptr.h signature.h macros.h ## end gnulib module rawmemchr-tests ## begin gnulib module regex-tests TESTS += test-regex check_PROGRAMS += test-regex test_regex_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) $(LIB_PTHREAD) EXTRA_DIST += test-regex.c macros.h ## end gnulib module regex-tests ## begin gnulib module same-inode EXTRA_DIST += same-inode.h ## end gnulib module same-inode ## begin gnulib module select EXTRA_DIST += select.c EXTRA_libtests_a_SOURCES += select.c ## end gnulib module select ## begin gnulib module select-tests TESTS += test-select test-select-in.sh test-select-out.sh # test-select-stdin has to be run by hand. check_PROGRAMS += test-select test-select-fd test-select-stdin test_select_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ $(INET_PTON_LIB) test_select_fd_LDADD = $(LDADD) @LIB_SELECT@ test_select_stdin_LDADD = $(LDADD) @LIB_SELECT@ EXTRA_DIST += macros.h signature.h test-select.c test-select.h test-select-fd.c test-select-in.sh test-select-out.sh test-select-stdin.c ## end gnulib module select-tests ## begin gnulib module setenv EXTRA_DIST += setenv.c EXTRA_libtests_a_SOURCES += setenv.c ## end gnulib module setenv ## begin gnulib module setenv-tests TESTS += test-setenv check_PROGRAMS += test-setenv EXTRA_DIST += test-setenv.c signature.h macros.h ## end gnulib module setenv-tests ## begin gnulib module setlocale EXTRA_DIST += setlocale.c EXTRA_libtests_a_SOURCES += setlocale.c ## end gnulib module setlocale ## begin gnulib module setlocale-tests TESTS += test-setlocale1.sh test-setlocale2.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-setlocale1 test-setlocale2 EXTRA_DIST += test-setlocale1.sh test-setlocale1.c test-setlocale2.sh test-setlocale2.c signature.h macros.h ## end gnulib module setlocale-tests ## begin gnulib module setsockopt EXTRA_DIST += setsockopt.c w32sock.h EXTRA_libtests_a_SOURCES += setsockopt.c ## end gnulib module setsockopt ## begin gnulib module setsockopt-tests TESTS += test-setsockopt check_PROGRAMS += test-setsockopt test_setsockopt_LDADD = $(LDADD) @LIBSOCKET@ EXTRA_DIST += test-setsockopt.c signature.h macros.h ## end gnulib module setsockopt-tests ## begin gnulib module sigaction libtests_a_SOURCES += sig-handler.c EXTRA_DIST += sig-handler.h sigaction.c EXTRA_libtests_a_SOURCES += sigaction.c ## end gnulib module sigaction ## begin gnulib module sigaction-tests TESTS += test-sigaction check_PROGRAMS += test-sigaction EXTRA_DIST += test-sigaction.c signature.h macros.h ## end gnulib module sigaction-tests ## begin gnulib module signal-h BUILT_SOURCES += signal.h # We need the following in order to create when the system # doesn't have a complete one. signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ -e 's|@''GNULIB_PTHREAD_SIGMASK''@|$(GNULIB_PTHREAD_SIGMASK)|g' \ -e 's|@''GNULIB_RAISE''@|$(GNULIB_RAISE)|g' \ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \ -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \ -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \ -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/signal.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += signal.h signal.h-t EXTRA_DIST += signal.in.h ## end gnulib module signal-h ## begin gnulib module signal-h-tests TESTS += test-signal-h check_PROGRAMS += test-signal-h EXTRA_DIST += test-signal-h.c ## end gnulib module signal-h-tests ## begin gnulib module signbit EXTRA_DIST += float+.h signbitd.c signbitf.c signbitl.c EXTRA_libtests_a_SOURCES += signbitd.c signbitf.c signbitl.c ## end gnulib module signbit ## begin gnulib module signbit-tests TESTS += test-signbit check_PROGRAMS += test-signbit EXTRA_DIST += test-signbit.c minus-zero.h infinity.h macros.h ## end gnulib module signbit-tests ## begin gnulib module sigprocmask EXTRA_DIST += sigprocmask.c EXTRA_libtests_a_SOURCES += sigprocmask.c ## end gnulib module sigprocmask ## begin gnulib module sigprocmask-tests TESTS += test-sigprocmask check_PROGRAMS += test-sigprocmask EXTRA_DIST += test-sigprocmask.c signature.h macros.h ## end gnulib module sigprocmask-tests ## begin gnulib module sleep-tests TESTS += test-sleep check_PROGRAMS += test-sleep EXTRA_DIST += test-sleep.c signature.h macros.h ## end gnulib module sleep-tests ## begin gnulib module snippet/_Noreturn # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H=$(srcdir)/_Noreturn.h EXTRA_DIST += _Noreturn.h ## end gnulib module snippet/_Noreturn ## begin gnulib module snippet/arg-nonnull # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H=$(srcdir)/arg-nonnull.h EXTRA_DIST += arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H=$(srcdir)/c++defs.h EXTRA_DIST += c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H=$(srcdir)/warn-on-use.h EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module socket EXTRA_DIST += socket.c w32sock.h EXTRA_libtests_a_SOURCES += socket.c ## end gnulib module socket ## begin gnulib module sockets libtests_a_SOURCES += sockets.h sockets.c EXTRA_DIST += w32sock.h ## end gnulib module sockets ## begin gnulib module sockets-tests TESTS += test-sockets check_PROGRAMS += test-sockets test_sockets_LDADD = $(LDADD) @LIBSOCKET@ EXTRA_DIST += test-sockets.c ## end gnulib module sockets-tests ## begin gnulib module stat EXTRA_DIST += stat-w32.c stat-w32.h stat.c EXTRA_libtests_a_SOURCES += stat-w32.c stat.c ## end gnulib module stat ## begin gnulib module stat-tests TESTS += test-stat check_PROGRAMS += test-stat test_stat_LDADD = $(LDADD) $(LIBINTL) EXTRA_DIST += test-stat.h test-stat.c signature.h macros.h ## end gnulib module stat-tests ## begin gnulib module stat-time libtests_a_SOURCES += stat-time.c EXTRA_DIST += stat-time.h ## end gnulib module stat-time ## begin gnulib module stat-time-tests TESTS += test-stat-time check_PROGRAMS += test-stat-time test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) EXTRA_DIST += test-stat-time.c macros.h nap.h ## end gnulib module stat-time-tests ## begin gnulib module stdalign-tests TESTS += test-stdalign check_PROGRAMS += test-stdalign EXTRA_DIST += test-stdalign.c macros.h ## end gnulib module stdalign-tests ## begin gnulib module stdbool-tests TESTS += test-stdbool check_PROGRAMS += test-stdbool EXTRA_DIST += test-stdbool.c ## end gnulib module stdbool-tests ## begin gnulib module stddef-tests TESTS += test-stddef check_PROGRAMS += test-stddef EXTRA_DIST += test-stddef.c ## end gnulib module stddef-tests ## begin gnulib module stdint-tests TESTS += test-stdint check_PROGRAMS += test-stdint EXTRA_DIST += test-stdint.c ## end gnulib module stdint-tests ## begin gnulib module stdio-tests TESTS += test-stdio check_PROGRAMS += test-stdio EXTRA_DIST += test-stdio.c ## end gnulib module stdio-tests ## begin gnulib module stdlib-tests TESTS += test-stdlib check_PROGRAMS += test-stdlib EXTRA_DIST += test-stdlib.c test-sys_wait.h ## end gnulib module stdlib-tests ## begin gnulib module strchrnul-tests TESTS += test-strchrnul check_PROGRAMS += test-strchrnul EXTRA_DIST += test-strchrnul.c signature.h macros.h ## end gnulib module strchrnul-tests ## begin gnulib module strerror-tests TESTS += test-strerror check_PROGRAMS += test-strerror EXTRA_DIST += test-strerror.c signature.h macros.h ## end gnulib module strerror-tests ## begin gnulib module strerror_r-posix EXTRA_DIST += strerror_r.c EXTRA_libtests_a_SOURCES += strerror_r.c ## end gnulib module strerror_r-posix ## begin gnulib module strerror_r-posix-tests TESTS += test-strerror_r check_PROGRAMS += test-strerror_r EXTRA_DIST += test-strerror_r.c signature.h macros.h ## end gnulib module strerror_r-posix-tests ## begin gnulib module string-tests TESTS += test-string check_PROGRAMS += test-string EXTRA_DIST += test-string.c ## end gnulib module string-tests ## begin gnulib module strings-tests TESTS += test-strings check_PROGRAMS += test-strings EXTRA_DIST += test-strings.c ## end gnulib module strings-tests ## begin gnulib module strnlen-tests TESTS += test-strnlen check_PROGRAMS += test-strnlen EXTRA_DIST += test-strnlen.c zerosize-ptr.h signature.h macros.h ## end gnulib module strnlen-tests ## begin gnulib module strtod-tests TESTS += test-strtod check_PROGRAMS += test-strtod EXTRA_DIST += test-strtod.c signature.h minus-zero.h macros.h ## end gnulib module strtod-tests ## begin gnulib module symlink EXTRA_DIST += symlink.c EXTRA_libtests_a_SOURCES += symlink.c ## end gnulib module symlink ## begin gnulib module symlink-tests TESTS += test-symlink check_PROGRAMS += test-symlink EXTRA_DIST += test-symlink.h test-symlink.c signature.h macros.h ## end gnulib module symlink-tests ## begin gnulib module sys_ioctl BUILT_SOURCES += sys/ioctl.h # We need the following in order to create when the system # does not have a complete one. sys/ioctl.h: sys_ioctl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SYS_IOCTL_H''@|$(HAVE_SYS_IOCTL_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_IOCTL_H''@|$(NEXT_SYS_IOCTL_H)|g' \ -e 's/@''GNULIB_IOCTL''@/$(GNULIB_IOCTL)/g' \ -e 's|@''SYS_IOCTL_H_HAVE_WINSOCK2_H''@|$(SYS_IOCTL_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e 's|@''REPLACE_IOCTL''@|$(REPLACE_IOCTL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_ioctl.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/ioctl.h sys/ioctl.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_ioctl.in.h ## end gnulib module sys_ioctl ## begin gnulib module sys_ioctl-tests TESTS += test-sys_ioctl check_PROGRAMS += test-sys_ioctl EXTRA_DIST += test-sys_ioctl.c ## end gnulib module sys_ioctl-tests ## begin gnulib module sys_select BUILT_SOURCES += sys/select.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/select.h: sys_select.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_SELECT_H''@|$(NEXT_SYS_SELECT_H)|g' \ -e 's|@''HAVE_SYS_SELECT_H''@|$(HAVE_SYS_SELECT_H)|g' \ -e 's/@''GNULIB_PSELECT''@/$(GNULIB_PSELECT)/g' \ -e 's/@''GNULIB_SELECT''@/$(GNULIB_SELECT)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_PSELECT''@|$(HAVE_PSELECT)|g' \ -e 's|@''REPLACE_PSELECT''@|$(REPLACE_PSELECT)|g' \ -e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_select.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/select.h sys/select.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_select.in.h ## end gnulib module sys_select ## begin gnulib module sys_select-tests TESTS += test-sys_select check_PROGRAMS += test-sys_select EXTRA_DIST += test-sys_select.c signature.h ## end gnulib module sys_select-tests ## begin gnulib module sys_socket BUILT_SOURCES += sys/socket.h libtests_a_SOURCES += sys_socket.c # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \ -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_SOCKET''@/$(GNULIB_SOCKET)/g' \ -e 's/@''GNULIB_CONNECT''@/$(GNULIB_CONNECT)/g' \ -e 's/@''GNULIB_ACCEPT''@/$(GNULIB_ACCEPT)/g' \ -e 's/@''GNULIB_BIND''@/$(GNULIB_BIND)/g' \ -e 's/@''GNULIB_GETPEERNAME''@/$(GNULIB_GETPEERNAME)/g' \ -e 's/@''GNULIB_GETSOCKNAME''@/$(GNULIB_GETSOCKNAME)/g' \ -e 's/@''GNULIB_GETSOCKOPT''@/$(GNULIB_GETSOCKOPT)/g' \ -e 's/@''GNULIB_LISTEN''@/$(GNULIB_LISTEN)/g' \ -e 's/@''GNULIB_RECV''@/$(GNULIB_RECV)/g' \ -e 's/@''GNULIB_SEND''@/$(GNULIB_SEND)/g' \ -e 's/@''GNULIB_RECVFROM''@/$(GNULIB_RECVFROM)/g' \ -e 's/@''GNULIB_SENDTO''@/$(GNULIB_SENDTO)/g' \ -e 's/@''GNULIB_SETSOCKOPT''@/$(GNULIB_SETSOCKOPT)/g' \ -e 's/@''GNULIB_SHUTDOWN''@/$(GNULIB_SHUTDOWN)/g' \ -e 's/@''GNULIB_ACCEPT4''@/$(GNULIB_ACCEPT4)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \ -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY''@|$(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)|g' \ -e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \ -e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_socket.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_socket.in.h ## end gnulib module sys_socket ## begin gnulib module sys_socket-tests TESTS += test-sys_socket check_PROGRAMS += test-sys_socket EXTRA_DIST += test-sys_socket.c ## end gnulib module sys_socket-tests ## begin gnulib module sys_stat BUILT_SOURCES += sys/stat.h # We need the following in order to create when the system # has one that is incomplete. sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \ -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \ -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \ -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \ -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \ -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \ -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \ -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_stat.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_stat.in.h ## end gnulib module sys_stat ## begin gnulib module sys_stat-tests TESTS += test-sys_stat check_PROGRAMS += test-sys_stat EXTRA_DIST += test-sys_stat.c ## end gnulib module sys_stat-tests ## begin gnulib module sys_time BUILT_SOURCES += sys/time.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/sys_time.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/time.h sys/time.h-t EXTRA_DIST += sys_time.in.h ## end gnulib module sys_time ## begin gnulib module sys_time-tests TESTS += test-sys_time check_PROGRAMS += test-sys_time EXTRA_DIST += test-sys_time.c ## end gnulib module sys_time-tests ## begin gnulib module sys_types-tests TESTS += test-sys_types check_PROGRAMS += test-sys_types EXTRA_DIST += test-sys_types.c ## end gnulib module sys_types-tests ## begin gnulib module sys_uio BUILT_SOURCES += sys/uio.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/uio.h: sys_uio.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_UIO_H''@|$(NEXT_SYS_UIO_H)|g' \ -e 's|@''HAVE_SYS_UIO_H''@|$(HAVE_SYS_UIO_H)|g' \ < $(srcdir)/sys_uio.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += sys/uio.h sys/uio.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_uio.in.h ## end gnulib module sys_uio ## begin gnulib module sys_uio-tests TESTS += test-sys_uio check_PROGRAMS += test-sys_uio EXTRA_DIST += test-sys_uio.c ## end gnulib module sys_uio-tests ## begin gnulib module sysexits-tests TESTS += test-sysexits check_PROGRAMS += test-sysexits EXTRA_DIST += test-sysexits.c ## end gnulib module sysexits-tests ## begin gnulib module test-framework-sh-tests TESTS += test-init.sh EXTRA_DIST += init.sh EXTRA_DIST += test-init.sh ## end gnulib module test-framework-sh-tests ## begin gnulib module thread libtests_a_SOURCES += glthread/thread.h glthread/thread.c ## end gnulib module thread ## begin gnulib module thread-tests TESTS += test-thread_self test-thread_create check_PROGRAMS += test-thread_self test-thread_create test_thread_self_LDADD = $(LDADD) @LIBTHREAD@ test_thread_create_LDADD = $(LDADD) @LIBMULTITHREAD@ EXTRA_DIST += test-thread_self.c test-thread_create.c macros.h ## end gnulib module thread-tests ## begin gnulib module time BUILT_SOURCES += time.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ -e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \ -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ -e 's|@''HAVE_TZSET''@|$(HAVE_TZSET)|g' \ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/time.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += time.h time.h-t EXTRA_DIST += time.in.h ## end gnulib module time ## begin gnulib module time-tests TESTS += test-time check_PROGRAMS += test-time EXTRA_DIST += test-time.c ## end gnulib module time-tests ## begin gnulib module unistd-tests TESTS += test-unistd check_PROGRAMS += test-unistd EXTRA_DIST += test-unistd.c ## end gnulib module unistd-tests ## begin gnulib module uniwidth/width-tests TESTS += test-uc_width uniwidth/test-uc_width2.sh check_PROGRAMS += test-uc_width test-uc_width2 test_uc_width_SOURCES = uniwidth/test-uc_width.c test_uc_width_LDADD = $(LDADD) $(LIBUNISTRING) test_uc_width2_SOURCES = uniwidth/test-uc_width2.c test_uc_width2_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += uniwidth/test-uc_width.c uniwidth/test-uc_width2.c uniwidth/test-uc_width2.sh macros.h ## end gnulib module uniwidth/width-tests ## begin gnulib module unsetenv EXTRA_DIST += unsetenv.c EXTRA_libtests_a_SOURCES += unsetenv.c ## end gnulib module unsetenv ## begin gnulib module unsetenv-tests TESTS += test-unsetenv check_PROGRAMS += test-unsetenv EXTRA_DIST += test-unsetenv.c signature.h macros.h ## end gnulib module unsetenv-tests ## begin gnulib module usleep EXTRA_DIST += usleep.c EXTRA_libtests_a_SOURCES += usleep.c ## end gnulib module usleep ## begin gnulib module usleep-tests TESTS += test-usleep check_PROGRAMS += test-usleep EXTRA_DIST += test-usleep.c signature.h macros.h ## end gnulib module usleep-tests ## begin gnulib module vasnprintf-tests TESTS += test-vasnprintf check_PROGRAMS += test-vasnprintf EXTRA_DIST += test-vasnprintf.c macros.h ## end gnulib module vasnprintf-tests ## begin gnulib module verify-tests TESTS_ENVIRONMENT += MAKE='$(MAKE)' TESTS += test-verify test-verify.sh check_PROGRAMS += test-verify # test-verify-try is never built, but test-verify.sh needs a rule to # build test-verify-try.o. EXTRA_PROGRAMS += test-verify-try # This test expects compilation of test-verify-try.c to fail, and # each time it fails, the makefile rule does not perform the usual # "mv -f $name.Tpo $name.po, so tell make clean to remove that file. MOSTLYCLEANFILES += .deps/test-verify-try.Tpo EXTRA_DIST += test-verify.c test-verify-try.c test-verify.sh ## end gnulib module verify-tests ## begin gnulib module vsnprintf-tests TESTS += test-vsnprintf check_PROGRAMS += test-vsnprintf EXTRA_DIST += test-vsnprintf.c signature.h macros.h ## end gnulib module vsnprintf-tests ## begin gnulib module wchar-tests TESTS += test-wchar check_PROGRAMS += test-wchar EXTRA_DIST += test-wchar.c ## end gnulib module wchar-tests ## begin gnulib module wcrtomb-tests TESTS += \ test-wcrtomb.sh \ test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh \ test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-wcrtomb test-wcrtomb-w32 EXTRA_DIST += test-wcrtomb.sh test-wcrtomb.c test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh test-wcrtomb-w32.c signature.h macros.h ## end gnulib module wcrtomb-tests ## begin gnulib module wctob EXTRA_DIST += wctob.c EXTRA_libtests_a_SOURCES += wctob.c ## end gnulib module wctob ## begin gnulib module wctomb EXTRA_DIST += wctomb-impl.h wctomb.c EXTRA_libtests_a_SOURCES += wctomb.c ## end gnulib module wctomb ## begin gnulib module wctype-h-tests TESTS += test-wctype-h check_PROGRAMS += test-wctype-h EXTRA_DIST += test-wctype-h.c macros.h ## end gnulib module wctype-h-tests ## begin gnulib module wcwidth-tests TESTS += test-wcwidth check_PROGRAMS += test-wcwidth EXTRA_DIST += test-wcwidth.c signature.h macros.h ## end gnulib module wcwidth-tests ## begin gnulib module xalloc-oversized EXTRA_DIST += xalloc-oversized.h ## end gnulib module xalloc-oversized ## begin gnulib module yield libtests_a_SOURCES += glthread/yield.h ## end gnulib module yield # Clean up after Solaris cc. clean-local: rm -rf SunWS_cache mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : gnuastro-0.5/bootstrapped/tests/uniwidth/0000755000175000017500000000000013217220466015727 500000000000000gnuastro-0.5/bootstrapped/tests/uniwidth/test-uc_width2.sh0000755000175000017500000001715113217200024021044 00000000000000#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles uc_width.out" ./test-uc_width2${EXEEXT} | LC_ALL=C tr -d '\r' > uc_width.out tmpfiles="$tmpfiles uc_width.ok" cat > uc_width.ok <<\EOF 0000 0 0020..007E 1 00A0 1 00A1..00AC A 00AD 0 00AE..02FF A 0300..036F 0 0370..0482 A 0483..0489 0 048A..0590 A 0591..05BD 0 05BE A 05BF 0 05C0 A 05C1..05C2 0 05C3 A 05C4..05C5 0 05C6 A 05C7 0 05C8..05FF A 0600..0605 0 0606..060F A 0610..061A 0 061B A 061C 0 061D..064A A 064B..065F 0 0660..066F A 0670 0 0671..06D5 A 06D6..06DD 0 06DE A 06DF..06E4 0 06E5..06E6 A 06E7..06E8 0 06E9 A 06EA..06ED 0 06EE..070E A 070F 0 0710 A 0711 0 0712..072F A 0730..074A 0 074B..07A5 A 07A6..07B0 0 07B1..07EA A 07EB..07F3 0 07F4..0815 A 0816..0819 0 081A A 081B..0823 0 0824 A 0825..0827 0 0828 A 0829..082D 0 082E..0858 A 0859..085B 0 085C..08D3 A 08D4..0902 0 0903..0939 A 093A 0 093B A 093C 0 093D..0940 A 0941..0948 0 0949..094C A 094D 0 094E..0950 A 0951..0957 0 0958..0961 A 0962..0963 0 0964..0980 A 0981 0 0982..09BB A 09BC 0 09BD..09C0 A 09C1..09C4 0 09C5..09CC A 09CD 0 09CE..09E1 A 09E2..09E3 0 09E4..0A00 A 0A01..0A02 0 0A03..0A3B A 0A3C 0 0A3D..0A40 A 0A41..0A42 0 0A43..0A46 A 0A47..0A48 0 0A49..0A4A A 0A4B..0A4D 0 0A4E..0A50 A 0A51 0 0A52..0A6F A 0A70..0A71 0 0A72..0A74 A 0A75 0 0A76..0A80 A 0A81..0A82 0 0A83..0ABB A 0ABC 0 0ABD..0AC0 A 0AC1..0AC5 0 0AC6 A 0AC7..0AC8 0 0AC9..0ACC A 0ACD 0 0ACE..0AE1 A 0AE2..0AE3 0 0AE4..0B00 A 0B01 0 0B02..0B3B A 0B3C 0 0B3D..0B3E A 0B3F 0 0B40 A 0B41..0B44 0 0B45..0B4C A 0B4D 0 0B4E..0B55 A 0B56 0 0B57..0B61 A 0B62..0B63 0 0B64..0B81 A 0B82 0 0B83..0BBF A 0BC0 0 0BC1..0BCC A 0BCD 0 0BCE..0BFF A 0C00 0 0C01..0C3D A 0C3E..0C40 0 0C41..0C45 A 0C46..0C48 0 0C49 A 0C4A..0C4D 0 0C4E..0C54 A 0C55..0C56 0 0C57..0C61 A 0C62..0C63 0 0C64..0C80 A 0C81 0 0C82..0CBB A 0CBC 0 0CBD..0CCB A 0CCC..0CCD 0 0CCE..0CE1 A 0CE2..0CE3 0 0CE4..0D00 A 0D01 0 0D02..0D40 A 0D41..0D44 0 0D45..0D4C A 0D4D 0 0D4E..0D61 A 0D62..0D63 0 0D64..0DC9 A 0DCA 0 0DCB..0DD1 A 0DD2..0DD4 0 0DD5 A 0DD6 0 0DD7..0E30 A 0E31 0 0E32..0E33 A 0E34..0E3A 0 0E3B..0E46 A 0E47..0E4E 0 0E4F..0EB0 A 0EB1 0 0EB2..0EB3 A 0EB4..0EB9 0 0EBA A 0EBB..0EBC 0 0EBD..0EC7 A 0EC8..0ECD 0 0ECE..0F17 A 0F18..0F19 0 0F1A..0F34 A 0F35 0 0F36 A 0F37 0 0F38 A 0F39 0 0F3A..0F70 A 0F71..0F7E 0 0F7F A 0F80..0F84 0 0F85 A 0F86..0F87 0 0F88..0F8C A 0F8D..0F97 0 0F98 A 0F99..0FBC 0 0FBD..0FC5 A 0FC6 0 0FC7..102C A 102D..1030 0 1031 A 1032..1037 0 1038 A 1039..103A 0 103B..103C A 103D..103E 0 103F..1057 A 1058..1059 0 105A..105D A 105E..1060 0 1061..1070 A 1071..1074 0 1075..1081 A 1082 0 1083..1084 A 1085..1086 0 1087..108C A 108D 0 108E..109C A 109D 0 109E..10FF A 1100..115F 2 1160..135C A 135D..135F 0 1360..1711 A 1712..1714 0 1715..1731 A 1732..1734 0 1735..1751 A 1752..1753 0 1754..1771 A 1772..1773 0 1774..17B3 A 17B4..17B5 0 17B6 A 17B7..17BD 0 17BE..17C5 A 17C6 0 17C7..17C8 A 17C9..17D3 0 17D4..17DC A 17DD 0 17DE..180A A 180B..180E 0 180F..1884 A 1885..1886 0 1887..18A8 A 18A9 0 18AA..191F A 1920..1922 0 1923..1926 A 1927..1928 0 1929..1931 A 1932 0 1933..1938 A 1939..193B 0 193C..1A16 A 1A17..1A18 0 1A19..1A1A A 1A1B 0 1A1C..1A55 A 1A56 0 1A57 A 1A58..1A5E 0 1A5F A 1A60 0 1A61 A 1A62 0 1A63..1A64 A 1A65..1A6C 0 1A6D..1A72 A 1A73..1A7C 0 1A7D..1A7E A 1A7F 0 1A80..1AAF A 1AB0..1ABE 0 1ABF..1AFF A 1B00..1B03 0 1B04..1B33 A 1B34 0 1B35 A 1B36..1B3A 0 1B3B A 1B3C 0 1B3D..1B41 A 1B42 0 1B43..1B6A A 1B6B..1B73 0 1B74..1B7F A 1B80..1B81 0 1B82..1BA1 A 1BA2..1BA5 0 1BA6..1BA7 A 1BA8..1BA9 0 1BAA A 1BAB..1BAD 0 1BAE..1BE5 A 1BE6 0 1BE7 A 1BE8..1BE9 0 1BEA..1BEC A 1BED 0 1BEE A 1BEF..1BF1 0 1BF2..1C2B A 1C2C..1C33 0 1C34..1C35 A 1C36..1C37 0 1C38..1CCF A 1CD0..1CD2 0 1CD3 A 1CD4..1CE0 0 1CE1 A 1CE2..1CE8 0 1CE9..1CEC A 1CED 0 1CEE..1CF3 A 1CF4 0 1CF5..1CF7 A 1CF8..1CF9 0 1CFA..1DBF A 1DC0..1DF5 0 1DF6..1DFA A 1DFB..1DFF 0 1E00..200A A 200B..200F 0 2010..2029 A 202A..202E 0 202F..205F A 2060..2064 0 2065 A 2066..206F 0 2070..20A8 A 20A9 1 20AA..20CF A 20D0..20F0 0 20F1..2328 A 2329..232A 2 232B..2CEE A 2CEF..2CF1 0 2CF2..2D7E A 2D7F 0 2D80..2DDF A 2DE0..2DFF 0 2E00..2E7F A 2E80..3029 2 302A..302D 0 302E..303E 2 303F A 3040..3098 2 3099..309A 0 309B..4DBF 2 4DC0..4DFF A 4E00..A4CF 2 A4D0..A66E A A66F..A672 0 A673 A A674..A67D 0 A67E..A69D A A69E..A69F 0 A6A0..A6EF A A6F0..A6F1 0 A6F2..A801 A A802 0 A803..A805 A A806 0 A807..A80A A A80B 0 A80C..A824 A A825..A826 0 A827..A8C3 A A8C4..A8C5 0 A8C6..A8DF A A8E0..A8F1 0 A8F2..A925 A A926..A92D 0 A92E..A946 A A947..A951 0 A952..A97F A A980..A982 0 A983..A9B2 A A9B3 0 A9B4..A9B5 A A9B6..A9B9 0 A9BA..A9BB A A9BC 0 A9BD..A9E4 A A9E5 0 A9E6..AA28 A AA29..AA2E 0 AA2F..AA30 A AA31..AA32 0 AA33..AA34 A AA35..AA36 0 AA37..AA42 A AA43 0 AA44..AA4B A AA4C 0 AA4D..AA7B A AA7C 0 AA7D..AAAF A AAB0 0 AAB1 A AAB2..AAB4 0 AAB5..AAB6 A AAB7..AAB8 0 AAB9..AABD A AABE..AABF 0 AAC0 A AAC1 0 AAC2..AAEB A AAEC..AAED 0 AAEE..AAF5 A AAF6 0 AAF7..ABE4 A ABE5 0 ABE6..ABE7 A ABE8 0 ABE9..ABEC A ABED 0 ABEE..ABFF A AC00..D7A3 2 D7A4..F8FF A F900..FAFF 2 FB00..FB1D A FB1E 0 FB1F..FDFF A FE00..FE0F 0 FE10..FE1F 2 FE20..FE2F 0 FE30..FE6F 2 FE70..FEFE A FEFF 0 FF00..FF60 2 FF61..FFDF 1 FFE0..FFE6 2 FFE7..FFF8 1 FFF9..FFFB 0 FFFC..101FC 1 101FD 0 101FE..102DF 1 102E0 0 102E1..10375 1 10376..1037A 0 1037B..10A00 1 10A01..10A03 0 10A04 1 10A05..10A06 0 10A07..10A0B 1 10A0C..10A0F 0 10A10..10A37 1 10A38..10A3A 0 10A3B..10A3E 1 10A3F 0 10A40..10AE4 1 10AE5..10AE6 0 10AE7..11000 1 11001 0 11002..11037 1 11038..11046 0 11047..1107E 1 1107F..11081 0 11082..110B2 1 110B3..110B6 0 110B7..110B8 1 110B9..110BA 0 110BB..110BC 1 110BD 0 110BE..110FF 1 11100..11102 0 11103..11126 1 11127..1112B 0 1112C 1 1112D..11134 0 11135..11172 1 11173 0 11174..1117F 1 11180..11181 0 11182..111B5 1 111B6..111BE 0 111BF..111C9 1 111CA..111CC 0 111CD..1122E 1 1122F..11231 0 11232..11233 1 11234 0 11235 1 11236..11237 0 11238..1123D 1 1123E 0 1123F..112DE 1 112DF 0 112E0..112E2 1 112E3..112EA 0 112EB..112FF 1 11300..11301 0 11302..1133B 1 1133C 0 1133D..1133F 1 11340 0 11341..11365 1 11366..1136C 0 1136D..1136F 1 11370..11374 0 11375..11437 1 11438..1143F 0 11440..11441 1 11442..11444 0 11445 1 11446 0 11447..114B2 1 114B3..114B8 0 114B9 1 114BA 0 114BB..114BE 1 114BF..114C0 0 114C1 1 114C2..114C3 0 114C4..115B1 1 115B2..115B5 0 115B6..115BB 1 115BC..115BD 0 115BE 1 115BF..115C0 0 115C1..115DB 1 115DC..115DD 0 115DE..11632 1 11633..1163A 0 1163B..1163C 1 1163D 0 1163E 1 1163F..11640 0 11641..116AA 1 116AB 0 116AC 1 116AD 0 116AE..116AF 1 116B0..116B5 0 116B6 1 116B7 0 116B8..1171C 1 1171D..1171F 0 11720..11721 1 11722..11725 0 11726 1 11727..1172B 0 1172C..11C2F 1 11C30..11C36 0 11C37 1 11C38..11C3D 0 11C3E..11C91 1 11C92..11CA7 0 11CA8..11CA9 1 11CAA..11CB0 0 11CB1 1 11CB2..11CB3 0 11CB4 1 11CB5..11CB6 0 11CB7..16AEF 1 16AF0..16AF4 0 16AF5..16B2F 1 16B30..16B36 0 16B37..16F8E 1 16F8F..16F92 0 16F93..1BC9C 1 1BC9D..1BC9E 0 1BC9F 1 1BCA0..1BCA3 0 1BCA4..1D166 1 1D167..1D169 0 1D16A..1D172 1 1D173..1D182 0 1D183..1D184 1 1D185..1D18B 0 1D18C..1D1A9 1 1D1AA..1D1AD 0 1D1AE..1D241 1 1D242..1D244 0 1D245..1D9FF 1 1DA00..1DA36 0 1DA37..1DA3A 1 1DA3B..1DA6C 0 1DA6D..1DA74 1 1DA75 0 1DA76..1DA83 1 1DA84 0 1DA85..1DA9A 1 1DA9B..1DA9F 0 1DAA0 1 1DAA1..1DAAF 0 1DAB0..1DFFF 1 1E000..1E006 0 1E007 1 1E008..1E018 0 1E019..1E01A 1 1E01B..1E021 0 1E022 1 1E023..1E024 0 1E025 1 1E026..1E02A 0 1E02B..1E8CF 1 1E8D0..1E8D6 0 1E8D7..1E943 1 1E944..1E94A 0 1E94B..1FFFF 1 20000..3FFFF 2 40000..E0000 1 E0001 0 E0002..E001F 1 E0020..E007F 0 E0080..E00FF 1 E0100..E01EF 0 E01F0..10FFFF 1 EOF : ${DIFF=diff} ${DIFF} uc_width.ok uc_width.out result=$? rm -fr $tmpfiles exit $result gnuastro-0.5/bootstrapped/tests/uniwidth/test-uc_width2.c0000644000175000017500000000422013217200024020642 00000000000000/* Test of uc_width() function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2008. */ #include #include "uniwidth.h" #include #include "macros.h" /* One of 0, '0', '1', 'A', '2'. */ static char current_width; /* The interval for which the current_width holds. */ static ucs4_t current_start; static ucs4_t current_end; static void finish_interval (void) { if (current_width != 0) { if (current_start == current_end) printf ("%04X\t\t%c\n", (unsigned) current_start, current_width); else printf ("%04X..%04X\t%c\n", (unsigned) current_start, (unsigned) current_end, current_width); current_width = 0; } } static void add_to_interval (ucs4_t uc, char width) { if (current_width == width && uc == current_end + 1) current_end = uc; else { finish_interval (); current_width = width; current_start = current_end = uc; } } int main () { ucs4_t uc; for (uc = 0; uc < 0x110000; uc++) { int w1 = uc_width (uc, "UTF-8"); int w2 = uc_width (uc, "GBK"); char width = (w1 == 0 && w2 == 0 ? '0' : w1 == 1 && w2 == 1 ? '1' : w1 == 1 && w2 == 2 ? 'A' : w1 == 2 && w2 == 2 ? '2' : 0); if (width == 0) { /* uc must be a control character. */ ASSERT (w1 < 0 && w2 < 0); } else add_to_interval (uc, width); } finish_interval (); return 0; } gnuastro-0.5/bootstrapped/tests/uniwidth/test-uc_width.c0000644000175000017500000000342513217200024020566 00000000000000/* Test of uc_width() function. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2007. */ #include #include "uniwidth.h" #include "macros.h" int main () { ucs4_t uc; /* Test width of ASCII characters. */ for (uc = 0x0020; uc < 0x007F; uc++) ASSERT (uc_width (uc, "ISO-8859-2") == 1); /* Test width of some non-spacing characters. */ ASSERT (uc_width (0x0301, "UTF-8") == 0); ASSERT (uc_width (0x05B0, "UTF-8") == 0); /* Test width of some format control characters. */ ASSERT (uc_width (0x200E, "UTF-8") == 0); ASSERT (uc_width (0x2060, "UTF-8") == 0); ASSERT (uc_width (0xE0001, "UTF-8") == 0); ASSERT (uc_width (0xE0044, "UTF-8") == 0); /* Test width of some zero width characters. */ ASSERT (uc_width (0x200B, "UTF-8") == 0); ASSERT (uc_width (0xFEFF, "UTF-8") == 0); /* Test width of some CJK characters. */ ASSERT (uc_width (0x3000, "UTF-8") == 2); ASSERT (uc_width (0xB250, "UTF-8") == 2); ASSERT (uc_width (0xFF1A, "UTF-8") == 2); ASSERT (uc_width (0x20369, "UTF-8") == 2); ASSERT (uc_width (0x2F876, "UTF-8") == 2); return 0; } gnuastro-0.5/bootstrapped/tests/glthread/0000755000175000017500000000000013217220465015665 500000000000000gnuastro-0.5/bootstrapped/tests/glthread/yield.h0000644000175000017500000000475013217200022017055 00000000000000/* Yielding the processor to other threads and processes. Copyright (C) 2005-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* This file contains a primitive for yielding the processor to other threads. extern void gl_thread_yield (void); */ #ifndef _GLTHREAD_YIELD_H #define _GLTHREAD_YIELD_H #include /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ sched_yield () # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ # include # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ pth_yield (NULL) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ thr_yield () # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ Sleep (0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ # define gl_thread_yield() 0 #endif /* ========================================================================= */ #endif /* _GLTHREAD_YIELD_H */ gnuastro-0.5/bootstrapped/tests/glthread/thread.c0000644000175000017500000001427413217200022017213 00000000000000/* Creating and controlling threads. Copyright (C) 2005-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Bruno Haible , 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ #include /* Specification. */ # define _GLTHREAD_THREAD_INLINE _GL_EXTERN_INLINE #include "glthread/thread.h" #include #include "glthread/lock.h" /* ========================================================================= */ #if USE_POSIX_THREADS #include #if defined PTW32_VERSION || defined __MVS__ const gl_thread_t gl_null_thread /* = { .p = NULL } */; #endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS #include /* -------------------------- gl_thread_t datatype -------------------------- */ /* The Thread-Local Storage (TLS) key that allows to access each thread's 'struct gl_thread_struct *' pointer. */ static DWORD self_key = (DWORD)-1; /* Initializes self_key. This function must only be called once. */ static void do_init_self_key (void) { self_key = TlsAlloc (); /* If this fails, we're hosed. */ if (self_key == (DWORD)-1) abort (); } /* Initializes self_key. */ static void init_self_key (void) { gl_once_define(static, once) gl_once (once, do_init_self_key); } /* This structure contains information about a thread. It is stored in TLS under key self_key. */ struct gl_thread_struct { /* Fields for managing the handle. */ HANDLE volatile handle; CRITICAL_SECTION handle_lock; /* Fields for managing the exit value. */ void * volatile result; /* Fields for managing the thread start. */ void * (*func) (void *); void *arg; }; /* Return a real HANDLE object for the current thread. */ static HANDLE get_current_thread_handle (void) { HANDLE this_handle; /* GetCurrentThread() returns a pseudo-handle, i.e. only a symbolic identifier, not a real handle. */ if (!DuplicateHandle (GetCurrentProcess (), GetCurrentThread (), GetCurrentProcess (), &this_handle, 0, FALSE, DUPLICATE_SAME_ACCESS)) abort (); return this_handle; } gl_thread_t gl_thread_self_func (void) { gl_thread_t thread; if (self_key == (DWORD)-1) init_self_key (); thread = TlsGetValue (self_key); if (thread == NULL) { /* This happens only in threads that have not been created through glthread_create(), such as the main thread. */ for (;;) { thread = (struct gl_thread_struct *) malloc (sizeof (struct gl_thread_struct)); if (thread != NULL) break; /* Memory allocation failed. There is not much we can do. Have to busy-loop, waiting for the availability of memory. */ Sleep (1); } thread->handle = get_current_thread_handle (); InitializeCriticalSection (&thread->handle_lock); thread->result = NULL; /* just to be deterministic */ TlsSetValue (self_key, thread); } return thread; } /* The main function of a freshly creating thread. It's a wrapper around the FUNC and ARG arguments passed to glthread_create_func. */ static unsigned int WINAPI wrapper_func (void *varg) { struct gl_thread_struct *thread = (struct gl_thread_struct *)varg; EnterCriticalSection (&thread->handle_lock); /* Create a new handle for the thread only if the parent thread did not yet fill in the handle. */ if (thread->handle == NULL) thread->handle = get_current_thread_handle (); LeaveCriticalSection (&thread->handle_lock); if (self_key == (DWORD)-1) init_self_key (); TlsSetValue (self_key, thread); /* Run the thread. Store the exit value if the thread was not terminated otherwise. */ thread->result = thread->func (thread->arg); return 0; } int glthread_create_func (gl_thread_t *threadp, void * (*func) (void *), void *arg) { struct gl_thread_struct *thread = (struct gl_thread_struct *) malloc (sizeof (struct gl_thread_struct)); if (thread == NULL) return ENOMEM; thread->handle = NULL; InitializeCriticalSection (&thread->handle_lock); thread->result = NULL; /* just to be deterministic */ thread->func = func; thread->arg = arg; { unsigned int thread_id; HANDLE thread_handle; thread_handle = (HANDLE) _beginthreadex (NULL, 100000, wrapper_func, thread, 0, &thread_id); /* calls CreateThread with the same arguments */ if (thread_handle == NULL) { DeleteCriticalSection (&thread->handle_lock); free (thread); return EAGAIN; } EnterCriticalSection (&thread->handle_lock); if (thread->handle == NULL) thread->handle = thread_handle; else /* thread->handle was already set by the thread itself. */ CloseHandle (thread_handle); LeaveCriticalSection (&thread->handle_lock); *threadp = thread; return 0; } } int glthread_join_func (gl_thread_t thread, void **retvalp) { if (thread == NULL) return EINVAL; if (thread == gl_thread_self ()) return EDEADLK; if (WaitForSingleObject (thread->handle, INFINITE) == WAIT_FAILED) return EINVAL; if (retvalp != NULL) *retvalp = thread->result; DeleteCriticalSection (&thread->handle_lock); CloseHandle (thread->handle); free (thread); return 0; } int gl_thread_exit_func (void *retval) { gl_thread_t thread = gl_thread_self (); thread->result = retval; _endthreadex (0); /* calls ExitThread (0) */ abort (); } #endif /* ========================================================================= */ gnuastro-0.5/bootstrapped/tests/glthread/thread.h0000644000175000017500000003263513217200022017221 00000000000000/* Creating and controlling threads. Copyright (C) 2005-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Bruno Haible , 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ /* This file contains primitives for creating and controlling threads. Thread data type: gl_thread_t. Creating a thread: thread = gl_thread_create (func, arg); Or with control of error handling: err = glthread_create (&thread, func, arg); extern int glthread_create (gl_thread_t *result, void *(*func) (void *), void *arg); Querying and changing the signal mask of a thread (not supported on all platforms): gl_thread_sigmask (how, newmask, oldmask); Or with control of error handling: err = glthread_sigmask (how, newmask, oldmask); extern int glthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask); Waiting for termination of another thread: gl_thread_join (thread, &return_value); Or with control of error handling: err = glthread_join (thread, &return_value); extern int glthread_join (gl_thread_t thread, void **return_value_ptr); Getting a reference to the current thread: current = gl_thread_self (); extern gl_thread_t gl_thread_self (void); Getting a reference to the current thread as a pointer, for debugging: ptr = gl_thread_self_pointer (); extern void * gl_thread_self_pointer (void); Terminating the current thread: gl_thread_exit (return_value); extern _Noreturn void gl_thread_exit (void *return_value); Requesting custom code to be executed at fork() time(not supported on all platforms): gl_thread_atfork (prepare_func, parent_func, child_func); Or with control of error handling: err = glthread_atfork (prepare_func, parent_func, child_func); extern int glthread_atfork (void (*prepare_func) (void), void (*parent_func) (void), void (*child_func) (void)); Note that even on platforms where this is supported, use of fork() and threads together is problematic, see */ #ifndef _GLTHREAD_THREAD_H #define _GLTHREAD_THREAD_H #include #include #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GLTHREAD_THREAD_INLINE # define _GLTHREAD_THREAD_INLINE _GL_INLINE #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # pragma weak pthread_create # ifdef __clang__ /* Without this, clang complains that pthread_sigmask is never declared. */ # include # endif # ifndef pthread_sigmask /* Do not declare rpl_pthread_sigmask weak. */ # pragma weak pthread_sigmask # endif # pragma weak pthread_join # ifndef pthread_self # pragma weak pthread_self # endif # pragma weak pthread_exit # if HAVE_PTHREAD_ATFORK # pragma weak pthread_atfork # endif # if !PTHREAD_IN_USE_DETECTION_HARD # pragma weak pthread_cancel # define pthread_in_use() (pthread_cancel != NULL) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_thread_t datatype -------------------------- */ /* This choice of gl_thread_t assumes that pthread_equal (a, b) is equivalent to ((a) == (b)). This is the case on all platforms in use in 2008. */ typedef pthread_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ (pthread_in_use () ? pthread_create (THREADP, NULL, FUNC, ARG) : ENOSYS) # define glthread_sigmask(HOW, SET, OSET) \ (pthread_in_use () ? pthread_sigmask (HOW, SET, OSET) : 0) # define glthread_join(THREAD, RETVALP) \ (pthread_in_use () ? pthread_join (THREAD, RETVALP) : 0) # ifdef PTW32_VERSION /* In pthreads-win32, pthread_t is a struct with a pointer field 'p' and other fields. */ # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : gl_null_thread) # define gl_thread_self_pointer() \ (pthread_in_use () ? pthread_self ().p : NULL) extern const gl_thread_t gl_null_thread; # elif defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : gl_null_thread) # define gl_thread_self_pointer() \ (pthread_in_use () ? *((void **) pthread_self ().__) : NULL) extern const gl_thread_t gl_null_thread; # else # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : (pthread_t) NULL) # define gl_thread_self_pointer() \ (pthread_in_use () ? (void *) pthread_self () : NULL) # endif # define gl_thread_exit(RETVAL) \ (pthread_in_use () ? pthread_exit (RETVAL) : 0) # if HAVE_PTHREAD_ATFORK # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) \ (pthread_in_use () ? pthread_atfork (PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) : 0) # else # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # endif # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ # include # ifdef __cplusplus extern "C" { # endif # if USE_PTH_THREADS_WEAK /* Use weak references to the GNU Pth threads library. */ # pragma weak pth_init # pragma weak pth_spawn # pragma weak pth_sigmask # pragma weak pth_join # pragma weak pth_self # pragma weak pth_exit # pragma weak pth_cancel # define pth_in_use() (pth_cancel != NULL) # else # define pth_in_use() 1 # endif /* -------------------------- gl_thread_t datatype -------------------------- */ typedef pth_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ (pth_in_use () ? (pth_init (), ((*(THREADP) = pth_spawn (NULL, FUNC, ARG)) ? 0 : errno)) : 0) # define glthread_sigmask(HOW, SET, OSET) \ (pth_in_use () ? (pth_init (), (pth_sigmask (HOW, SET, OSET) ? 0 : errno)) : 0) # define glthread_join(THREAD, RETVALP) \ (pth_in_use () ? (pth_init (), (pth_join (THREAD, RETVALP) ? 0 : errno)) : 0) # define gl_thread_self() \ (pth_in_use () ? (pth_init (), (void *) pth_self ()) : NULL) # define gl_thread_self_pointer() \ gl_thread_self () # define gl_thread_exit(RETVAL) \ (pth_in_use () ? (pth_init (), pth_exit (RETVAL)) : 0) # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include # include # ifdef __cplusplus extern "C" { # endif # if USE_SOLARIS_THREADS_WEAK /* Use weak references to the old Solaris threads library. */ # pragma weak thr_create # pragma weak thr_join # pragma weak thr_self # pragma weak thr_exit # pragma weak thr_suspend # define thread_in_use() (thr_suspend != NULL) # else # define thread_in_use() 1 # endif /* -------------------------- gl_thread_t datatype -------------------------- */ typedef thread_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ (thread_in_use () ? thr_create (NULL, 0, FUNC, ARG, 0, THREADP) : 0) # define glthread_sigmask(HOW, SET, OSET) \ (thread_in_use () ? sigprocmask (HOW, SET, OSET) : 0) # define glthread_join(THREAD, RETVALP) \ (thread_in_use () ? thr_join (THREAD, NULL, RETVALP) : 0) # define gl_thread_self() \ (thread_in_use () ? (void *) thr_self () : NULL) # define gl_thread_self_pointer() \ gl_thread_self () # define gl_thread_exit(RETVAL) \ (thread_in_use () ? thr_exit (RETVAL) : 0) # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_thread_t datatype -------------------------- */ /* The gl_thread_t is a pointer to a structure in memory. Why not the thread handle? If it were the thread handle, it would be hard to implement gl_thread_self() (since GetCurrentThread () returns a pseudo- handle, DuplicateHandle (GetCurrentThread ()) returns a handle that must be closed afterwards, and there is no function for quickly retrieving a thread handle from its id). Why not the thread id? I tried it. It did not work: Sometimes ids appeared that did not belong to running threads, and glthread_join failed with ESRCH. */ typedef struct gl_thread_struct *gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ glthread_create_func (THREADP, FUNC, ARG) # define glthread_sigmask(HOW, SET, OSET) \ /* unsupported */ 0 # define glthread_join(THREAD, RETVALP) \ glthread_join_func (THREAD, RETVALP) # define gl_thread_self() \ gl_thread_self_func () # define gl_thread_self_pointer() \ gl_thread_self () # define gl_thread_exit(RETVAL) \ gl_thread_exit_func (RETVAL) # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 extern int glthread_create_func (gl_thread_t *threadp, void * (*func) (void *), void *arg); extern int glthread_join_func (gl_thread_t thread, void **retvalp); extern gl_thread_t gl_thread_self_func (void); extern int gl_thread_exit_func (void *retval); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ typedef int gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) ENOSYS # define glthread_sigmask(HOW, SET, OSET) 0 # define glthread_join(THREAD, RETVALP) 0 # define gl_thread_self() 0 # define gl_thread_self_pointer() \ ((void *) gl_thread_self ()) # define gl_thread_exit(RETVAL) 0 # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 #endif /* ========================================================================= */ /* Macros with built-in error handling. */ #ifdef __cplusplus extern "C" { #endif _GLTHREAD_THREAD_INLINE gl_thread_t gl_thread_create (void *(*func) (void *arg), void *arg) { gl_thread_t thread; int ret; ret = glthread_create (&thread, func, arg); if (ret != 0) abort (); return thread; } #define gl_thread_sigmask(HOW, SET, OSET) \ do \ { \ if (glthread_sigmask (HOW, SET, OSET)) \ abort (); \ } \ while (0) #define gl_thread_join(THREAD, RETVAL) \ do \ { \ if (glthread_join (THREAD, RETVAL)) \ abort (); \ } \ while (0) #define gl_thread_atfork(PREPARE, PARENT, CHILD) \ do \ { \ if (glthread_atfork (PREPARE, PARENT, CHILD)) \ abort (); \ } \ while (0) #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GLTHREAD_THREAD_H */ gnuastro-0.5/bootstrapped/lib/0000755000175000017500000000000013217220465013477 500000000000000gnuastro-0.5/bootstrapped/lib/wctype.in.h0000644000175000017500000003321313217200022015475 00000000000000/* A substitute for ISO C99 , for platforms that lack it. Copyright (C) 2006-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Bruno Haible and Paul Eggert. */ /* * ISO C 99 for platforms that lack it. * * * iswctype, towctrans, towlower, towupper, wctrans, wctype, * wctrans_t, and wctype_t are not yet implemented. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__) /* Special invocation convention: - With MinGW 3.22, when includes , only some part of is being processed, which doesn't include the idempotency guard. */ #@INCLUDE_NEXT@ @NEXT_WCTYPE_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCTYPE_H #if @HAVE_WINT_T@ /* Solaris 2.5 has a bug: must be included before . Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ # include # include # include # include #endif /* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and isw* functions in , as well as in . Include , in advance to avoid rpl_ prefix being added to the declarations. */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include # include #endif /* Include the original if it exists. BeOS 5 has the functions but no . */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCTYPE_H@ # @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ #endif #ifndef _@GUARD_PREFIX@_WCTYPE_H #define _@GUARD_PREFIX@_WCTYPE_H #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_WCTYPE_INLINE # define _GL_WCTYPE_INLINE _GL_INLINE #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Solaris 2.6 includes which includes which #defines a number of identifiers in the application namespace. Revert these #defines. */ #ifdef __sun # undef multibyte # undef eucw1 # undef eucw2 # undef eucw3 # undef scrw1 # undef scrw2 # undef scrw3 #endif /* Define wint_t and WEOF. (Also done in wchar.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in or . This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIB_OVERRIDES_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include # else # include # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif #if !GNULIB_defined_wctype_functions /* FreeBSD 4.4 to 4.11 has but lacks the functions. Linux libc5 has and the functions but they are broken. Assume all 11 functions (all isw* except iswblank) are implemented the same way, or not at all. */ # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ /* IRIX 5.3 has macros but no functions, its isw* macros refer to an undefined variable _ctmp_ and to macros like _P, and they refer to system functions like _iswctype that are not in the standard C library. Rather than try to get ancient buggy implementations like this to work, just disable them. */ # undef iswalnum # undef iswalpha # undef iswblank # undef iswcntrl # undef iswdigit # undef iswgraph # undef iswlower # undef iswprint # undef iswpunct # undef iswspace # undef iswupper # undef iswxdigit # undef towlower # undef towupper /* Linux libc5 has and the functions but they are broken. */ # if @REPLACE_ISWCNTRL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iswalnum rpl_iswalnum # define iswalpha rpl_iswalpha # define iswblank rpl_iswblank # define iswcntrl rpl_iswcntrl # define iswdigit rpl_iswdigit # define iswgraph rpl_iswgraph # define iswlower rpl_iswlower # define iswprint rpl_iswprint # define iswpunct rpl_iswpunct # define iswspace rpl_iswspace # define iswupper rpl_iswupper # define iswxdigit rpl_iswxdigit # endif # endif # if @REPLACE_TOWLOWER@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # define towupper rpl_towupper # endif # endif _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswalnum # else iswalnum # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswalpha # else iswalpha # endif (wint_t wc) { return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswblank # else iswblank # endif (wint_t wc) { return wc == ' ' || wc == '\t'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswcntrl # else iswcntrl # endif (wint_t wc) { return (wc & ~0x1f) == 0 || wc == 0x7f; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswdigit # else iswdigit # endif (wint_t wc) { return wc >= '0' && wc <= '9'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswgraph # else iswgraph # endif (wint_t wc) { return wc >= '!' && wc <= '~'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswlower # else iswlower # endif (wint_t wc) { return wc >= 'a' && wc <= 'z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswprint # else iswprint # endif (wint_t wc) { return wc >= ' ' && wc <= '~'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswpunct # else iswpunct # endif (wint_t wc) { return (wc >= '!' && wc <= '~' && !((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswspace # else iswspace # endif (wint_t wc) { return (wc == ' ' || wc == '\t' || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswupper # else iswupper # endif (wint_t wc) { return wc >= 'A' && wc <= 'Z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswxdigit # else iswxdigit # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); } _GL_WCTYPE_INLINE wint_t # if @REPLACE_TOWLOWER@ rpl_towlower # else towlower # endif (wint_t wc) { return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); } _GL_WCTYPE_INLINE wint_t # if @REPLACE_TOWLOWER@ rpl_towupper # else towupper # endif (wint_t wc) { return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); } # elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@) /* Only the iswblank function is missing. */ # if @REPLACE_ISWBLANK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iswblank rpl_iswblank # endif _GL_FUNCDECL_RPL (iswblank, int, (wint_t wc)); # else _GL_FUNCDECL_SYS (iswblank, int, (wint_t wc)); # endif # endif # if defined __MINGW32__ /* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. The functions towlower and towupper are implemented in the MSVCRT library to take a wchar_t argument and return a wchar_t result. mingw declares these functions to take a wint_t argument and return a wint_t result. This means that: 1. When the user passes an argument outside the range 0x0000..0xFFFF, the function will look only at the lower 16 bits. This is allowed according to POSIX. 2. The return value is returned in the lower 16 bits of the result register. The upper 16 bits are random: whatever happened to be in that part of the result register. We need to fix this by adding a zero-extend from wchar_t to wint_t after the call. */ _GL_WCTYPE_INLINE wint_t rpl_towlower (wint_t wc) { return (wint_t) (wchar_t) towlower (wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # endif _GL_WCTYPE_INLINE wint_t rpl_towupper (wint_t wc) { return (wint_t) (wchar_t) towupper (wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towupper rpl_towupper # endif # endif /* __MINGW32__ */ # define GNULIB_defined_wctype_functions 1 #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); #endif _GL_CXXALIASWARN (iswalnum); _GL_CXXALIASWARN (iswalpha); _GL_CXXALIASWARN (iswcntrl); _GL_CXXALIASWARN (iswdigit); _GL_CXXALIASWARN (iswgraph); _GL_CXXALIASWARN (iswlower); _GL_CXXALIASWARN (iswprint); _GL_CXXALIASWARN (iswpunct); _GL_CXXALIASWARN (iswspace); _GL_CXXALIASWARN (iswupper); _GL_CXXALIASWARN (iswxdigit); #if @GNULIB_ISWBLANK@ # if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@ _GL_CXXALIAS_RPL (iswblank, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); # endif _GL_CXXALIASWARN (iswblank); #endif #if !@HAVE_WCTYPE_T@ # if !GNULIB_defined_wctype_t typedef void * wctype_t; # define GNULIB_defined_wctype_t 1 # endif #endif /* Get a descriptor for a wide character property. */ #if @GNULIB_WCTYPE@ # if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name)); # endif _GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); _GL_CXXALIASWARN (wctype); #elif defined GNULIB_POSIXCHECK # undef wctype # if HAVE_RAW_DECL_WCTYPE _GL_WARN_ON_USE (wctype, "wctype is unportable - " "use gnulib module wctype for portability"); # endif #endif /* Test whether a wide character has a given property. The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctype() function. */ #if @GNULIB_ISWCTYPE@ # if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc)); # endif _GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); _GL_CXXALIASWARN (iswctype); #elif defined GNULIB_POSIXCHECK # undef iswctype # if HAVE_RAW_DECL_ISWCTYPE _GL_WARN_ON_USE (iswctype, "iswctype is unportable - " "use gnulib module iswctype for portability"); # endif #endif #if @REPLACE_TOWLOWER@ || defined __MINGW32__ _GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc)); #else _GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); #endif _GL_CXXALIASWARN (towlower); _GL_CXXALIASWARN (towupper); #if !@HAVE_WCTRANS_T@ # if !GNULIB_defined_wctrans_t typedef void * wctrans_t; # define GNULIB_defined_wctrans_t 1 # endif #endif /* Get a descriptor for a wide character case conversion. */ #if @GNULIB_WCTRANS@ # if !@HAVE_WCTRANS_T@ _GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name)); # endif _GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); _GL_CXXALIASWARN (wctrans); #elif defined GNULIB_POSIXCHECK # undef wctrans # if HAVE_RAW_DECL_WCTRANS _GL_WARN_ON_USE (wctrans, "wctrans is unportable - " "use gnulib module wctrans for portability"); # endif #endif /* Perform a given case conversion on a wide character. The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctrans() function. */ #if @GNULIB_TOWCTRANS@ # if !@HAVE_WCTRANS_T@ _GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # endif _GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); _GL_CXXALIASWARN (towctrans); #elif defined GNULIB_POSIXCHECK # undef towctrans # if HAVE_RAW_DECL_TOWCTRANS _GL_WARN_ON_USE (towctrans, "towctrans is unportable - " "use gnulib module towctrans for portability"); # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif gnuastro-0.5/bootstrapped/lib/wchar.in.h0000644000175000017500000010542613217200022015274 00000000000000/* A substitute for ISO C99 , for platforms that have issues. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Eric Blake. */ /* * ISO C 99 for platforms that have issues. * * * For now, this just ensures proper prerequisite inclusion order and * the declaration of wcwidth(). */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (((defined __need_mbstate_t || defined __need_wint_t) \ && !defined __MINGW32__) \ || (defined __hpux \ && ((defined _INTTYPES_INCLUDED && !defined strtoimax) \ || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ || defined _GL_ALREADY_INCLUDING_WCHAR_H) /* Special invocation convention: - Inside glibc and uClibc header files, but not MinGW. - On HP-UX 11.00 we have a sequence of nested includes -> -> , and the latter includes , once indirectly -> -> -> and once directly. In both situations 'wint_t' is not yet defined, therefore we cannot provide the function overrides; instead include only the system's . - With MinGW 3.22, when includes , only some part of is actually processed, and that doesn't include 'mbstate_t'. - On IRIX 6.5, similarly, we have an include -> , and the latter includes . But here, we have no way to detect whether is completely included or is still being included. */ #@INCLUDE_NEXT@ @NEXT_WCHAR_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCHAR_H #define _GL_ALREADY_INCLUDING_WCHAR_H #if @HAVE_FEATURES_H@ # include /* for __GLIBC__ */ #endif /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . In some builds of uClibc, is nonexistent and wchar_t is defined by . But avoid namespace pollution on glibc systems. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include #endif #ifndef __GLIBC__ # include # include #endif /* Include the original if it exists. Some builds of uClibc lack it. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCHAR_H@ # @INCLUDE_NEXT@ @NEXT_WCHAR_H@ #endif #undef _GL_ALREADY_INCLUDING_WCHAR_H #ifndef _@GUARD_PREFIX@_WCHAR_H #define _@GUARD_PREFIX@_WCHAR_H /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Define wint_t and WEOF. (Also done in wctype.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in or . This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIB_OVERRIDES_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include # else # include # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif /* Override mbstate_t if it is too small. On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for implementing mbrtowc for encodings like UTF-8. */ #if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ # if !GNULIB_defined_mbstate_t typedef int rpl_mbstate_t; # undef mbstate_t # define mbstate_t rpl_mbstate_t # define GNULIB_defined_mbstate_t 1 # endif #endif /* Convert a single-byte character to a wide character. */ #if @GNULIB_BTOWC@ # if @REPLACE_BTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef btowc # define btowc rpl_btowc # endif _GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (btowc, wint_t, (int c)); # else # if !@HAVE_BTOWC@ _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (btowc, wint_t, (int c)); # endif _GL_CXXALIASWARN (btowc); #elif defined GNULIB_POSIXCHECK # undef btowc # if HAVE_RAW_DECL_BTOWC _GL_WARN_ON_USE (btowc, "btowc is unportable - " "use gnulib module btowc for portability"); # endif #endif /* Convert a wide character to a single-byte character. */ #if @GNULIB_WCTOB@ # if @REPLACE_WCTOB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctob # define wctob rpl_wctob # endif _GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); # else # if !defined wctob && !@HAVE_DECL_WCTOB@ /* wctob is provided by gnulib, or wctob exists but is not declared. */ _GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); # endif _GL_CXXALIASWARN (wctob); #elif defined GNULIB_POSIXCHECK # undef wctob # if HAVE_RAW_DECL_WCTOB _GL_WARN_ON_USE (wctob, "wctob is unportable - " "use gnulib module wctob for portability"); # endif #endif /* Test whether *PS is in the initial state. */ #if @GNULIB_MBSINIT@ # if @REPLACE_MBSINIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsinit # define mbsinit rpl_mbsinit # endif _GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); _GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); # else # if !@HAVE_MBSINIT@ _GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbsinit); #elif defined GNULIB_POSIXCHECK # undef mbsinit # if HAVE_RAW_DECL_MBSINIT _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " "use gnulib module mbsinit for portability"); # endif #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBRTOWC@ # if @REPLACE_MBRTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrtowc # define mbrtowc rpl_mbrtowc # endif _GL_FUNCDECL_RPL (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); _GL_CXXALIAS_RPL (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); # else # if !@HAVE_MBRTOWC@ _GL_FUNCDECL_SYS (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbrtowc); #elif defined GNULIB_POSIXCHECK # undef mbrtowc # if HAVE_RAW_DECL_MBRTOWC _GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " "use gnulib module mbrtowc for portability"); # endif #endif /* Recognize a multibyte character. */ #if @GNULIB_MBRLEN@ # if @REPLACE_MBRLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrlen # define mbrlen rpl_mbrlen # endif _GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); _GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); # else # if !@HAVE_MBRLEN@ _GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbrlen); #elif defined GNULIB_POSIXCHECK # undef mbrlen # if HAVE_RAW_DECL_MBRLEN _GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " "use gnulib module mbrlen for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSRTOWCS@ # if @REPLACE_MBSRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsrtowcs # define mbsrtowcs rpl_mbsrtowcs # endif _GL_FUNCDECL_RPL (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)); # else # if !@HAVE_MBSRTOWCS@ _GL_FUNCDECL_SYS (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbsrtowcs); #elif defined GNULIB_POSIXCHECK # undef mbsrtowcs # if HAVE_RAW_DECL_MBSRTOWCS _GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " "use gnulib module mbsrtowcs for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSNRTOWCS@ # if @REPLACE_MBSNRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsnrtowcs # define mbsnrtowcs rpl_mbsnrtowcs # endif _GL_FUNCDECL_RPL (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps)); # else # if !@HAVE_MBSNRTOWCS@ _GL_FUNCDECL_SYS (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbsnrtowcs); #elif defined GNULIB_POSIXCHECK # undef mbsnrtowcs # if HAVE_RAW_DECL_MBSNRTOWCS _GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " "use gnulib module mbsnrtowcs for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCRTOMB@ # if @REPLACE_WCRTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcrtomb # define wcrtomb rpl_wcrtomb # endif _GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); _GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); # else # if !@HAVE_WCRTOMB@ _GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); # endif _GL_CXXALIASWARN (wcrtomb); #elif defined GNULIB_POSIXCHECK # undef wcrtomb # if HAVE_RAW_DECL_WCRTOMB _GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " "use gnulib module wcrtomb for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSRTOMBS@ # if @REPLACE_WCSRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsrtombs # define wcsrtombs rpl_wcsrtombs # endif _GL_FUNCDECL_RPL (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)); # else # if !@HAVE_WCSRTOMBS@ _GL_FUNCDECL_SYS (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (wcsrtombs); #elif defined GNULIB_POSIXCHECK # undef wcsrtombs # if HAVE_RAW_DECL_WCSRTOMBS _GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " "use gnulib module wcsrtombs for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSNRTOMBS@ # if @REPLACE_WCSNRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsnrtombs # define wcsnrtombs rpl_wcsnrtombs # endif _GL_FUNCDECL_RPL (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps)); # else # if !@HAVE_WCSNRTOMBS@ _GL_FUNCDECL_SYS (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (wcsnrtombs); #elif defined GNULIB_POSIXCHECK # undef wcsnrtombs # if HAVE_RAW_DECL_WCSNRTOMBS _GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " "use gnulib module wcsnrtombs for portability"); # endif #endif /* Return the number of screen columns needed for WC. */ #if @GNULIB_WCWIDTH@ # if @REPLACE_WCWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcwidth # define wcwidth rpl_wcwidth # endif _GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); # else # if !@HAVE_DECL_WCWIDTH@ /* wcwidth exists but is not declared. */ _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); # endif _GL_CXXALIASWARN (wcwidth); #elif defined GNULIB_POSIXCHECK # undef wcwidth # if HAVE_RAW_DECL_WCWIDTH _GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " "use gnulib module wcwidth for portability"); # endif #endif /* Search N wide characters of S for C. */ #if @GNULIB_WMEMCHR@ # if !@HAVE_WMEMCHR@ _GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (wmemchr, wchar_t *, (const wchar_t *, wchar_t, size_t), const wchar_t *, (const wchar_t *, wchar_t, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); _GL_CXXALIASWARN1 (wmemchr, const wchar_t *, (const wchar_t *s, wchar_t c, size_t n)); # else _GL_CXXALIASWARN (wmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef wmemchr # if HAVE_RAW_DECL_WMEMCHR _GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " "use gnulib module wmemchr for portability"); # endif #endif /* Compare N wide characters of S1 and S2. */ #if @GNULIB_WMEMCMP@ # if !@HAVE_WMEMCMP@ _GL_FUNCDECL_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wmemcmp); #elif defined GNULIB_POSIXCHECK # undef wmemcmp # if HAVE_RAW_DECL_WMEMCMP _GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " "use gnulib module wmemcmp for portability"); # endif #endif /* Copy N wide characters of SRC to DEST. */ #if @GNULIB_WMEMCPY@ # if !@HAVE_WMEMCPY@ _GL_FUNCDECL_SYS (wmemcpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemcpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wmemcpy); #elif defined GNULIB_POSIXCHECK # undef wmemcpy # if HAVE_RAW_DECL_WMEMCPY _GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " "use gnulib module wmemcpy for portability"); # endif #endif /* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for overlapping memory areas. */ #if @GNULIB_WMEMMOVE@ # if !@HAVE_WMEMMOVE@ _GL_FUNCDECL_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wmemmove); #elif defined GNULIB_POSIXCHECK # undef wmemmove # if HAVE_RAW_DECL_WMEMMOVE _GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " "use gnulib module wmemmove for portability"); # endif #endif /* Set N wide characters of S to C. */ #if @GNULIB_WMEMSET@ # if !@HAVE_WMEMSET@ _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # endif _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); _GL_CXXALIASWARN (wmemset); #elif defined GNULIB_POSIXCHECK # undef wmemset # if HAVE_RAW_DECL_WMEMSET _GL_WARN_ON_USE (wmemset, "wmemset is unportable - " "use gnulib module wmemset for portability"); # endif #endif /* Return the number of wide characters in S. */ #if @GNULIB_WCSLEN@ # if !@HAVE_WCSLEN@ _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); _GL_CXXALIASWARN (wcslen); #elif defined GNULIB_POSIXCHECK # undef wcslen # if HAVE_RAW_DECL_WCSLEN _GL_WARN_ON_USE (wcslen, "wcslen is unportable - " "use gnulib module wcslen for portability"); # endif #endif /* Return the number of wide characters in S, but at most MAXLEN. */ #if @GNULIB_WCSNLEN@ # if !@HAVE_WCSNLEN@ _GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); _GL_CXXALIASWARN (wcsnlen); #elif defined GNULIB_POSIXCHECK # undef wcsnlen # if HAVE_RAW_DECL_WCSNLEN _GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " "use gnulib module wcsnlen for portability"); # endif #endif /* Copy SRC to DEST. */ #if @GNULIB_WCSCPY@ # if !@HAVE_WCSCPY@ _GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); # endif _GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); _GL_CXXALIASWARN (wcscpy); #elif defined GNULIB_POSIXCHECK # undef wcscpy # if HAVE_RAW_DECL_WCSCPY _GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " "use gnulib module wcscpy for portability"); # endif #endif /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ #if @GNULIB_WCPCPY@ # if !@HAVE_WCPCPY@ _GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); # endif _GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); _GL_CXXALIASWARN (wcpcpy); #elif defined GNULIB_POSIXCHECK # undef wcpcpy # if HAVE_RAW_DECL_WCPCPY _GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " "use gnulib module wcpcpy for portability"); # endif #endif /* Copy no more than N wide characters of SRC to DEST. */ #if @GNULIB_WCSNCPY@ # if !@HAVE_WCSNCPY@ _GL_FUNCDECL_SYS (wcsncpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wcsncpy); #elif defined GNULIB_POSIXCHECK # undef wcsncpy # if HAVE_RAW_DECL_WCSNCPY _GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " "use gnulib module wcsncpy for portability"); # endif #endif /* Copy no more than N characters of SRC to DEST, returning the address of the last character written into DEST. */ #if @GNULIB_WCPNCPY@ # if !@HAVE_WCPNCPY@ _GL_FUNCDECL_SYS (wcpncpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wcpncpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wcpncpy); #elif defined GNULIB_POSIXCHECK # undef wcpncpy # if HAVE_RAW_DECL_WCPNCPY _GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " "use gnulib module wcpncpy for portability"); # endif #endif /* Append SRC onto DEST. */ #if @GNULIB_WCSCAT@ # if !@HAVE_WCSCAT@ _GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); # endif _GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); _GL_CXXALIASWARN (wcscat); #elif defined GNULIB_POSIXCHECK # undef wcscat # if HAVE_RAW_DECL_WCSCAT _GL_WARN_ON_USE (wcscat, "wcscat is unportable - " "use gnulib module wcscat for portability"); # endif #endif /* Append no more than N wide characters of SRC onto DEST. */ #if @GNULIB_WCSNCAT@ # if !@HAVE_WCSNCAT@ _GL_FUNCDECL_SYS (wcsncat, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncat, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wcsncat); #elif defined GNULIB_POSIXCHECK # undef wcsncat # if HAVE_RAW_DECL_WCSNCAT _GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " "use gnulib module wcsncat for portability"); # endif #endif /* Compare S1 and S2. */ #if @GNULIB_WCSCMP@ # if !@HAVE_WCSCMP@ _GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscmp); #elif defined GNULIB_POSIXCHECK # undef wcscmp # if HAVE_RAW_DECL_WCSCMP _GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " "use gnulib module wcscmp for portability"); # endif #endif /* Compare no more than N wide characters of S1 and S2. */ #if @GNULIB_WCSNCMP@ # if !@HAVE_WCSNCMP@ _GL_FUNCDECL_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsncmp); #elif defined GNULIB_POSIXCHECK # undef wcsncmp # if HAVE_RAW_DECL_WCSNCMP _GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " "use gnulib module wcsncmp for portability"); # endif #endif /* Compare S1 and S2, ignoring case. */ #if @GNULIB_WCSCASECMP@ # if !@HAVE_WCSCASECMP@ _GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscasecmp); #elif defined GNULIB_POSIXCHECK # undef wcscasecmp # if HAVE_RAW_DECL_WCSCASECMP _GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " "use gnulib module wcscasecmp for portability"); # endif #endif /* Compare no more than N chars of S1 and S2, ignoring case. */ #if @GNULIB_WCSNCASECMP@ # if !@HAVE_WCSNCASECMP@ _GL_FUNCDECL_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsncasecmp); #elif defined GNULIB_POSIXCHECK # undef wcsncasecmp # if HAVE_RAW_DECL_WCSNCASECMP _GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " "use gnulib module wcsncasecmp for portability"); # endif #endif /* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE category of the current locale. */ #if @GNULIB_WCSCOLL@ # if !@HAVE_WCSCOLL@ _GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # endif _GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscoll); #elif defined GNULIB_POSIXCHECK # undef wcscoll # if HAVE_RAW_DECL_WCSCOLL _GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " "use gnulib module wcscoll for portability"); # endif #endif /* Transform S2 into array pointed to by S1 such that if wcscmp is applied to two transformed strings the result is the as applying 'wcscoll' to the original strings. */ #if @GNULIB_WCSXFRM@ # if !@HAVE_WCSXFRM@ _GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); # endif _GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsxfrm); #elif defined GNULIB_POSIXCHECK # undef wcsxfrm # if HAVE_RAW_DECL_WCSXFRM _GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " "use gnulib module wcsxfrm for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_WCSDUP@ # if !@HAVE_WCSDUP@ _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); _GL_CXXALIASWARN (wcsdup); #elif defined GNULIB_POSIXCHECK # undef wcsdup # if HAVE_RAW_DECL_WCSDUP _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " "use gnulib module wcsdup for portability"); # endif #endif /* Find the first occurrence of WC in WCS. */ #if @GNULIB_WCSCHR@ # if !@HAVE_WCSCHR@ _GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcschr (const wchar_t *, wchar_t); wchar_t * std::wcschr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcschr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # else _GL_CXXALIASWARN (wcschr); # endif #elif defined GNULIB_POSIXCHECK # undef wcschr # if HAVE_RAW_DECL_WCSCHR _GL_WARN_ON_USE (wcschr, "wcschr is unportable - " "use gnulib module wcschr for portability"); # endif #endif /* Find the last occurrence of WC in WCS. */ #if @GNULIB_WCSRCHR@ # if !@HAVE_WCSRCHR@ _GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); wchar_t * std::wcsrchr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcsrchr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # else _GL_CXXALIASWARN (wcsrchr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsrchr # if HAVE_RAW_DECL_WCSRCHR _GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " "use gnulib module wcsrchr for portability"); # endif #endif /* Return the length of the initial segmet of WCS which consists entirely of wide characters not in REJECT. */ #if @GNULIB_WCSCSPN@ # if !@HAVE_WCSCSPN@ _GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); _GL_CXXALIASWARN (wcscspn); #elif defined GNULIB_POSIXCHECK # undef wcscspn # if HAVE_RAW_DECL_WCSCSPN _GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " "use gnulib module wcscspn for portability"); # endif #endif /* Return the length of the initial segmet of WCS which consists entirely of wide characters in ACCEPT. */ #if @GNULIB_WCSSPN@ # if !@HAVE_WCSSPN@ _GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); _GL_CXXALIASWARN (wcsspn); #elif defined GNULIB_POSIXCHECK # undef wcsspn # if HAVE_RAW_DECL_WCSSPN _GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " "use gnulib module wcsspn for portability"); # endif #endif /* Find the first occurrence in WCS of any character in ACCEPT. */ #if @GNULIB_WCSPBRK@ # if !@HAVE_WCSPBRK@ _GL_FUNCDECL_SYS (wcspbrk, wchar_t *, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcspbrk, wchar_t *, (const wchar_t *, const wchar_t *), const wchar_t *, (const wchar_t *, const wchar_t *)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcspbrk, wchar_t *, (wchar_t *wcs, const wchar_t *accept)); _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, (const wchar_t *wcs, const wchar_t *accept)); # else _GL_CXXALIASWARN (wcspbrk); # endif #elif defined GNULIB_POSIXCHECK # undef wcspbrk # if HAVE_RAW_DECL_WCSPBRK _GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " "use gnulib module wcspbrk for portability"); # endif #endif /* Find the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_WCSSTR@ # if !@HAVE_WCSSTR@ _GL_FUNCDECL_SYS (wcsstr, wchar_t *, (const wchar_t *haystack, const wchar_t *needle) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); wchar_t * std::wcsstr (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcsstr, wchar_t *, (const wchar_t *, const wchar_t *), const wchar_t *, (const wchar_t *, const wchar_t *)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsstr, wchar_t *, (wchar_t *haystack, const wchar_t *needle)); _GL_CXXALIASWARN1 (wcsstr, const wchar_t *, (const wchar_t *haystack, const wchar_t *needle)); # else _GL_CXXALIASWARN (wcsstr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsstr # if HAVE_RAW_DECL_WCSSTR _GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " "use gnulib module wcsstr for portability"); # endif #endif /* Divide WCS into tokens separated by characters in DELIM. */ #if @GNULIB_WCSTOK@ # if !@HAVE_WCSTOK@ _GL_FUNCDECL_SYS (wcstok, wchar_t *, (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); # endif _GL_CXXALIAS_SYS (wcstok, wchar_t *, (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); _GL_CXXALIASWARN (wcstok); #elif defined GNULIB_POSIXCHECK # undef wcstok # if HAVE_RAW_DECL_WCSTOK _GL_WARN_ON_USE (wcstok, "wcstok is unportable - " "use gnulib module wcstok for portability"); # endif #endif /* Determine number of column positions required for first N wide characters (or fewer if S ends before this) in S. */ #if @GNULIB_WCSWIDTH@ # if @REPLACE_WCSWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcswidth # define wcswidth rpl_wcswidth # endif _GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); # else # if !@HAVE_WCSWIDTH@ _GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); # endif _GL_CXXALIASWARN (wcswidth); #elif defined GNULIB_POSIXCHECK # undef wcswidth # if HAVE_RAW_DECL_WCSWIDTH _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " "use gnulib module wcswidth for portability"); # endif #endif /* Convert *TP to a date and time wide string. See . */ #if @GNULIB_WCSFTIME@ # if @REPLACE_WCSFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsftime # define wcsftime rpl_wcsftime # endif _GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, const wchar_t *__fmt, const struct tm *__tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, const wchar_t *__fmt, const struct tm *__tp)); # else # if !@HAVE_WCSFTIME@ _GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, const wchar_t *__fmt, const struct tm *__tp) _GL_ARG_NONNULL ((1, 3, 4))); # endif _GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, const wchar_t *__fmt, const struct tm *__tp)); # endif _GL_CXXALIASWARN (wcsftime); #elif defined GNULIB_POSIXCHECK # undef wcsftime # if HAVE_RAW_DECL_WCSFTIME _GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " "use gnulib module wcsftime for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif gnuastro-0.5/bootstrapped/lib/verify.h0000644000175000017500000002561113217200021015063 00000000000000/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H #define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. This is supported by GCC 4.6.0 and later, in C mode, and its use here generates easier-to-read diagnostics when verify (R) fails. Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. This will likely be supported by future GCC versions, in C++ mode. Use this only with GCC. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ #if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \ && (201112L <= __STDC_VERSION__ || !defined __STRICT_ANSI__) \ && !defined __cplusplus) # define _GL_HAVE__STATIC_ASSERT 1 #endif /* The condition (99 < __GNUC__) is temporary, until we know about the first G++ release that supports static_assert. */ #if (99 < __GNUC__) && defined __cplusplus # define _GL_HAVE_STATIC_ASSERT 1 #endif /* FreeBSD 9.1 , included by and lots of other system headers, defines a conflicting _Static_assert that is no better than ours; override it. */ #ifndef _GL_HAVE_STATIC_ASSERT # include # undef _Static_assert #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant-decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * GCC warns if -Wnested-externs is enabled and verify() is used within a function body; but inside a function, you can always arrange to use verify_expr() instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) #define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ #else # define _GL_COUNTER __LINE__ #endif /* Generate a symbol with the given prefix, making it unique if possible. */ #define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ #define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) #ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _gl_verify_type<(R) ? 1 : -1> #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { \ _Static_assert (R, DIAGNOSTIC); \ int _gl_dummy; \ } #else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } #endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ #ifdef _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY _Static_assert #else # define _GL_VERIFY(R, DIAGNOSTIC) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] #endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ #ifdef _GL_STATIC_ASSERT_H # if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert # define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) # endif # if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert # define static_assert _Static_assert /* C11 requires this #define. */ # endif #endif /* @assert.h omit start@ */ /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_true (R) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time, as an integer constant expression. Return 1. This is equivalent to verify_expr (R, 1). verify_true is obsolescent; please use verify_expr instead. */ #define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") /* Verify requirement R at compile-time. Return the value of the expression E. */ #define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. */ #ifdef __GNUC__ # define verify(R) _GL_VERIFY (R, "verify (" #R ")") #else /* PGI barfs if R is long. Play it safe. */ # define verify(R) _GL_VERIFY (R, "verify (...)") #endif #ifndef __has_builtin # define __has_builtin(x) 0 #endif /* Assume that R always holds. This lets the compiler optimize accordingly. R should not have side-effects; it may or may not be evaluated. Behavior is undefined if R is false. */ #if (__has_builtin (__builtin_unreachable) \ || 4 < __GNUC__ + (5 <= __GNUC_MINOR__)) # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) #elif 1200 <= _MSC_VER # define assume(R) __assume (R) #elif ((defined GCC_LINT || defined lint) \ && (__has_builtin (__builtin_trap) \ || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)))) /* Doing it this way helps various packages when configured with --enable-gcc-warnings, which compiles with -Dlint. It's nicer when 'assume' silences warnings even with older GCCs. */ # define assume(R) ((R) ? (void) 0 : __builtin_trap ()) #else # define assume(R) ((void) (0 && (R))) #endif /* @assert.h omit end@ */ #endif gnuastro-0.5/bootstrapped/lib/vasnprintf.h0000644000175000017500000000560113217200021015746 00000000000000/* vsprintf with automatic memory allocation. Copyright (C) 2002-2004, 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _VASNPRINTF_H #define _VASNPRINTF_H /* Get va_list. */ #include /* Get size_t. */ #include /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. When dynamic memory allocation occurs, the preallocated buffer is left alone (with possibly modified contents). This makes it possible to use a statically allocated or stack-allocated buffer, like this: char buf[100]; size_t len = sizeof (buf); char *output = vasnprintf (buf, &len, format, args); if (output == NULL) ... error handling ...; else { ... use the output string ...; if (output != buf) free (output); } */ #if REPLACE_VASNPRINTF # define asnprintf rpl_asnprintf # define vasnprintf rpl_vasnprintf #endif extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); #ifdef __cplusplus } #endif #endif /* _VASNPRINTF_H */ gnuastro-0.5/bootstrapped/lib/printf-parse.h0000644000175000017500000001216413217200021016170 00000000000000/* Parse printf format string. Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _PRINTF_PARSE_H #define _PRINTF_PARSE_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. STATIC Set to 'static' to declare the function static. */ #if HAVE_FEATURES_H # include /* for __GLIBC__, __UCLIBC__ */ #endif #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 #if __GLIBC__ >= 2 && !defined __UCLIBC__ # define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ #endif /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* xxx_directive: A parsed directive. xxx_directives: A parsed format string. */ /* Number of directly allocated directives (no malloc() needed). */ #define N_DIRECT_ALLOC_DIRECTIVES 7 /* A parsed directive. */ typedef struct { const char* dir_start; const char* dir_end; int flags; const char* width_start; const char* width_end; size_t width_arg_index; const char* precision_start; const char* precision_end; size_t precision_arg_index; char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } char_directive; /* A parsed format string. */ typedef struct { size_t count; char_directive *dir; size_t max_width_length; size_t max_precision_length; char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } char_directives; #if ENABLE_UNISTDIO /* A parsed directive. */ typedef struct { const uint8_t* dir_start; const uint8_t* dir_end; int flags; const uint8_t* width_start; const uint8_t* width_end; size_t width_arg_index; const uint8_t* precision_start; const uint8_t* precision_end; size_t precision_arg_index; uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u8_directive; /* A parsed format string. */ typedef struct { size_t count; u8_directive *dir; size_t max_width_length; size_t max_precision_length; u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u8_directives; /* A parsed directive. */ typedef struct { const uint16_t* dir_start; const uint16_t* dir_end; int flags; const uint16_t* width_start; const uint16_t* width_end; size_t width_arg_index; const uint16_t* precision_start; const uint16_t* precision_end; size_t precision_arg_index; uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u16_directive; /* A parsed format string. */ typedef struct { size_t count; u16_directive *dir; size_t max_width_length; size_t max_precision_length; u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u16_directives; /* A parsed directive. */ typedef struct { const uint32_t* dir_start; const uint32_t* dir_end; int flags; const uint32_t* width_start; const uint32_t* width_end; size_t width_arg_index; const uint32_t* precision_start; const uint32_t* precision_end; size_t precision_arg_index; uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u32_directive; /* A parsed format string. */ typedef struct { size_t count; u32_directive *dir; size_t max_width_length; size_t max_precision_length; u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u32_directives; #endif /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #if ENABLE_UNISTDIO extern int ulc_printf_parse (const char *format, char_directives *d, arguments *a); extern int u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); extern int u16_printf_parse (const uint16_t *format, u16_directives *d, arguments *a); extern int u32_printf_parse (const uint32_t *format, u32_directives *d, arguments *a); #else # ifdef STATIC STATIC # else extern # endif int printf_parse (const char *format, char_directives *d, arguments *a); #endif #endif /* _PRINTF_PARSE_H */ gnuastro-0.5/bootstrapped/lib/printf-args.h0000644000175000017500000000753413217200021016017 00000000000000/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _PRINTF_ARGS_H #define _PRINTF_ARGS_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be declared. STATIC Set to 'static' to declare the function static. */ /* Default parameters. */ #ifndef PRINTF_FETCHARGS # define PRINTF_FETCHARGS printf_fetchargs #endif /* Get size_t. */ #include /* Get wchar_t. */ #if HAVE_WCHAR_T # include #endif /* Get wint_t. */ #if HAVE_WINT_T # include #endif /* Get va_list. */ #include /* Argument types */ typedef enum { TYPE_NONE, TYPE_SCHAR, TYPE_UCHAR, TYPE_SHORT, TYPE_USHORT, TYPE_INT, TYPE_UINT, TYPE_LONGINT, TYPE_ULONGINT, #if HAVE_LONG_LONG_INT TYPE_LONGLONGINT, TYPE_ULONGLONGINT, #endif TYPE_DOUBLE, TYPE_LONGDOUBLE, TYPE_CHAR, #if HAVE_WINT_T TYPE_WIDE_CHAR, #endif TYPE_STRING, #if HAVE_WCHAR_T TYPE_WIDE_STRING, #endif TYPE_POINTER, TYPE_COUNT_SCHAR_POINTER, TYPE_COUNT_SHORT_POINTER, TYPE_COUNT_INT_POINTER, TYPE_COUNT_LONGINT_POINTER #if HAVE_LONG_LONG_INT , TYPE_COUNT_LONGLONGINT_POINTER #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ , TYPE_U8_STRING , TYPE_U16_STRING , TYPE_U32_STRING #endif } arg_type; /* Polymorphic argument */ typedef struct { arg_type type; union { signed char a_schar; unsigned char a_uchar; short a_short; unsigned short a_ushort; int a_int; unsigned int a_uint; long int a_longint; unsigned long int a_ulongint; #if HAVE_LONG_LONG_INT long long int a_longlongint; unsigned long long int a_ulonglongint; #endif float a_float; double a_double; long double a_longdouble; int a_char; #if HAVE_WINT_T wint_t a_wide_char; #endif const char* a_string; #if HAVE_WCHAR_T const wchar_t* a_wide_string; #endif void* a_pointer; signed char * a_count_schar_pointer; short * a_count_short_pointer; int * a_count_int_pointer; long int * a_count_longint_pointer; #if HAVE_LONG_LONG_INT long long int * a_count_longlongint_pointer; #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ const uint8_t * a_u8_string; const uint16_t * a_u16_string; const uint32_t * a_u32_string; #endif } a; } argument; /* Number of directly allocated arguments (no malloc() needed). */ #define N_DIRECT_ALLOC_ARGUMENTS 7 typedef struct { size_t count; argument *arg; argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; } arguments; /* Fetch the arguments, putting them into a. */ #ifdef STATIC STATIC #else extern #endif int PRINTF_FETCHARGS (va_list args, arguments *a); #endif /* _PRINTF_ARGS_H */ gnuastro-0.5/bootstrapped/lib/float+.h0000644000175000017500000001274613217200021014744 00000000000000/* Supplemental information about the floating-point formats. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2007. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _FLOATPLUS_H #define _FLOATPLUS_H #include #include /* Number of bits in the mantissa of a floating-point number, including the "hidden bit". */ #if FLT_RADIX == 2 # define FLT_MANT_BIT FLT_MANT_DIG # define DBL_MANT_BIT DBL_MANT_DIG # define LDBL_MANT_BIT LDBL_MANT_DIG #elif FLT_RADIX == 4 # define FLT_MANT_BIT (FLT_MANT_DIG * 2) # define DBL_MANT_BIT (DBL_MANT_DIG * 2) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) #elif FLT_RADIX == 16 # define FLT_MANT_BIT (FLT_MANT_DIG * 4) # define DBL_MANT_BIT (DBL_MANT_DIG * 4) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) #endif /* Bit mask that can be used to mask the exponent, as an unsigned number. */ #define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) #define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) #define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) /* Number of bits used for the exponent of a floating-point number, including the exponent's sign. */ #define FLT_EXP_BIT \ (FLT_EXP_MASK < 0x100 ? 8 : \ FLT_EXP_MASK < 0x200 ? 9 : \ FLT_EXP_MASK < 0x400 ? 10 : \ FLT_EXP_MASK < 0x800 ? 11 : \ FLT_EXP_MASK < 0x1000 ? 12 : \ FLT_EXP_MASK < 0x2000 ? 13 : \ FLT_EXP_MASK < 0x4000 ? 14 : \ FLT_EXP_MASK < 0x8000 ? 15 : \ FLT_EXP_MASK < 0x10000 ? 16 : \ FLT_EXP_MASK < 0x20000 ? 17 : \ FLT_EXP_MASK < 0x40000 ? 18 : \ FLT_EXP_MASK < 0x80000 ? 19 : \ FLT_EXP_MASK < 0x100000 ? 20 : \ FLT_EXP_MASK < 0x200000 ? 21 : \ FLT_EXP_MASK < 0x400000 ? 22 : \ FLT_EXP_MASK < 0x800000 ? 23 : \ FLT_EXP_MASK < 0x1000000 ? 24 : \ FLT_EXP_MASK < 0x2000000 ? 25 : \ FLT_EXP_MASK < 0x4000000 ? 26 : \ FLT_EXP_MASK < 0x8000000 ? 27 : \ FLT_EXP_MASK < 0x10000000 ? 28 : \ FLT_EXP_MASK < 0x20000000 ? 29 : \ FLT_EXP_MASK < 0x40000000 ? 30 : \ FLT_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define DBL_EXP_BIT \ (DBL_EXP_MASK < 0x100 ? 8 : \ DBL_EXP_MASK < 0x200 ? 9 : \ DBL_EXP_MASK < 0x400 ? 10 : \ DBL_EXP_MASK < 0x800 ? 11 : \ DBL_EXP_MASK < 0x1000 ? 12 : \ DBL_EXP_MASK < 0x2000 ? 13 : \ DBL_EXP_MASK < 0x4000 ? 14 : \ DBL_EXP_MASK < 0x8000 ? 15 : \ DBL_EXP_MASK < 0x10000 ? 16 : \ DBL_EXP_MASK < 0x20000 ? 17 : \ DBL_EXP_MASK < 0x40000 ? 18 : \ DBL_EXP_MASK < 0x80000 ? 19 : \ DBL_EXP_MASK < 0x100000 ? 20 : \ DBL_EXP_MASK < 0x200000 ? 21 : \ DBL_EXP_MASK < 0x400000 ? 22 : \ DBL_EXP_MASK < 0x800000 ? 23 : \ DBL_EXP_MASK < 0x1000000 ? 24 : \ DBL_EXP_MASK < 0x2000000 ? 25 : \ DBL_EXP_MASK < 0x4000000 ? 26 : \ DBL_EXP_MASK < 0x8000000 ? 27 : \ DBL_EXP_MASK < 0x10000000 ? 28 : \ DBL_EXP_MASK < 0x20000000 ? 29 : \ DBL_EXP_MASK < 0x40000000 ? 30 : \ DBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define LDBL_EXP_BIT \ (LDBL_EXP_MASK < 0x100 ? 8 : \ LDBL_EXP_MASK < 0x200 ? 9 : \ LDBL_EXP_MASK < 0x400 ? 10 : \ LDBL_EXP_MASK < 0x800 ? 11 : \ LDBL_EXP_MASK < 0x1000 ? 12 : \ LDBL_EXP_MASK < 0x2000 ? 13 : \ LDBL_EXP_MASK < 0x4000 ? 14 : \ LDBL_EXP_MASK < 0x8000 ? 15 : \ LDBL_EXP_MASK < 0x10000 ? 16 : \ LDBL_EXP_MASK < 0x20000 ? 17 : \ LDBL_EXP_MASK < 0x40000 ? 18 : \ LDBL_EXP_MASK < 0x80000 ? 19 : \ LDBL_EXP_MASK < 0x100000 ? 20 : \ LDBL_EXP_MASK < 0x200000 ? 21 : \ LDBL_EXP_MASK < 0x400000 ? 22 : \ LDBL_EXP_MASK < 0x800000 ? 23 : \ LDBL_EXP_MASK < 0x1000000 ? 24 : \ LDBL_EXP_MASK < 0x2000000 ? 25 : \ LDBL_EXP_MASK < 0x4000000 ? 26 : \ LDBL_EXP_MASK < 0x8000000 ? 27 : \ LDBL_EXP_MASK < 0x10000000 ? 28 : \ LDBL_EXP_MASK < 0x20000000 ? 29 : \ LDBL_EXP_MASK < 0x40000000 ? 30 : \ LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) /* Number of bits used for a floating-point number: the mantissa (not counting the "hidden bit", since it may or may not be explicit), the exponent, and the sign. */ #define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) #define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) #define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) /* Number of bytes used for a floating-point number. This can be smaller than the 'sizeof'. For example, on i386 systems, 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but sizeof (long double) = 12 or = 16. */ #define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) /* Verify that SIZEOF_FLT <= sizeof (float) etc. */ typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; #endif /* _FLOATPLUS_H */ gnuastro-0.5/bootstrapped/lib/uniwidth.in.h0000644000175000017500000000411213217200021016010 00000000000000/* Display width functions. Copyright (C) 2001-2002, 2005, 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _UNIWIDTH_H #define _UNIWIDTH_H #include "unitypes.h" /* Get size_t. */ #include /* Get locale_charset() declaration. */ #include "localcharset.h" #ifdef __cplusplus extern "C" { #endif /* Display width. */ /* These functions are locale dependent. The encoding argument identifies the encoding (e.g. "ISO-8859-2" for Polish). */ /* Determine number of column positions required for UC. */ extern int uc_width (ucs4_t uc, const char *encoding) _UC_ATTRIBUTE_PURE; /* Determine number of column positions required for first N units (or fewer if S ends before this) in S. */ extern int u8_width (const uint8_t *s, size_t n, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u16_width (const uint16_t *s, size_t n, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u32_width (const uint32_t *s, size_t n, const char *encoding) _UC_ATTRIBUTE_PURE; /* Determine number of column positions required for S. */ extern int u8_strwidth (const uint8_t *s, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u16_strwidth (const uint16_t *s, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u32_strwidth (const uint32_t *s, const char *encoding) _UC_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* _UNIWIDTH_H */ gnuastro-0.5/bootstrapped/lib/unitypes.in.h0000644000175000017500000000316413217200021016043 00000000000000/* Elementary types and macros for the GNU UniString library. Copyright (C) 2002, 2005-2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _UNITYPES_H #define _UNITYPES_H /* Get uint8_t, uint16_t, uint32_t. */ #include /* Type representing a Unicode character. */ typedef uint32_t ucs4_t; /* Attribute of a function whose result depends only on the arguments (not pointers!) and which has no side effects. */ #ifndef _UC_ATTRIBUTE_CONST # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _UC_ATTRIBUTE_CONST __attribute__ ((__const__)) # else # define _UC_ATTRIBUTE_CONST # endif #endif /* Attribute of a function whose result depends only on the arguments (possibly pointers) and global memory, and which has no side effects. */ #ifndef _UC_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _UC_ATTRIBUTE_PURE # endif #endif #endif /* _UNITYPES_H */ gnuastro-0.5/bootstrapped/lib/unistd.in.h0000644000175000017500000015426713217200021015504 00000000000000/* Substitute for and wrapper around . Copyright (C) 2003-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_UNISTD_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #ifdef _GL_INCLUDING_UNISTD_H /* Special invocation convention: - On Mac OS X 10.3.9 we have a sequence of nested includes -> -> -> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_UNISTD_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UNISTD_H@ # define _GL_INCLUDING_UNISTD_H # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ # undef _GL_INCLUDING_UNISTD_H #endif /* Get all possible declarations of gethostname(). */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include # undef _GL_INCLUDING_WINSOCK2_H #endif #if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H #define _@GUARD_PREFIX@_UNISTD_H /* NetBSD 5.0 mis-defines NULL. Also get size_t. */ #include /* mingw doesn't define the SEEK_* or *_FILENO macros in . */ /* MSVC declares 'unlink' in , not in . We must include it before we #define unlink rpl_unlink. */ /* Cygwin 1.7.1 declares symlinkat in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) \ || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ && defined __CYGWIN__)) \ && ! defined __GLIBC__ # include #endif /* Cygwin 1.7.1 declares unlinkat in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ && ! defined __GLIBC__ # include #endif /* mingw fails to declare _exit in . */ /* mingw, MSVC, BeOS, Haiku declare environ in , not in . */ /* Solaris declares getcwd not only in but also in . */ /* OSF Tru64 Unix cannot see gnulib rpl_strtod when system is included here. */ /* But avoid namespace pollution on glibc systems. */ #if !defined __GLIBC__ && !defined __osf__ # define __need_system_stdlib_h # include # undef __need_system_stdlib_h #endif /* Native Windows platforms declare chdir, getcwd, rmdir in and/or , not in . They also declare access(), chmod(), close(), dup(), dup2(), isatty(), lseek(), read(), unlink(), write() in . */ #if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) # include /* mingw32, mingw64 */ # include /* mingw64, MSVC 9 */ #elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \ || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) # include #endif /* AIX and OSF/1 5.1 declare getdomainname in , not in . NonStop Kernel declares gethostname in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ && !defined __GLIBC__ # include #endif /* MSVC defines off_t in . May also define off_t to a 64-bit type on native Windows. */ #if !@HAVE_UNISTD_H@ || @WINDOWS_64_BIT_OFF_T@ /* Get off_t. */ # include #endif #if (@GNULIB_READ@ || @GNULIB_WRITE@ \ || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK) /* Get ssize_t. */ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Get getopt(), optarg, optind, opterr, optopt. */ #if @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT # include # include #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UNISTD_INLINE # define _GL_UNISTD_INLINE _GL_INLINE #endif /* Hide some function declarations from . */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including "); _GL_WARN_ON_USE (connect, "connect() used without including "); _GL_WARN_ON_USE (accept, "accept() used without including "); _GL_WARN_ON_USE (bind, "bind() used without including "); _GL_WARN_ON_USE (getpeername, "getpeername() used without including "); _GL_WARN_ON_USE (getsockname, "getsockname() used without including "); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including "); _GL_WARN_ON_USE (listen, "listen() used without including "); _GL_WARN_ON_USE (recv, "recv() used without including "); _GL_WARN_ON_USE (send, "send() used without including "); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including "); _GL_WARN_ON_USE (sendto, "sendto() used without including "); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including "); _GL_WARN_ON_USE (shutdown, "shutdown() used without including "); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including "); # endif # endif #endif /* OS/2 EMX lacks these macros. */ #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif /* Ensure *_OK macros exist. */ #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif /* Declare overridden functions. */ #if defined GNULIB_POSIXCHECK /* The access() function is a security risk. */ _GL_WARN_ON_USE (access, "the access function is a security risk - " "use the gnulib module faccessat instead"); #endif #if @GNULIB_CHDIR@ _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIASWARN (chdir); #elif defined GNULIB_POSIXCHECK # undef chdir # if HAVE_RAW_DECL_CHDIR _GL_WARN_ON_USE (chown, "chdir is not always in - " "use gnulib module chdir for portability"); # endif #endif #if @GNULIB_CHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_DUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup2 rpl_dup2 # endif _GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); _GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); # else # if !@HAVE_DUP2@ _GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #elif defined GNULIB_POSIXCHECK # undef dup2 # if HAVE_RAW_DECL_DUP2 _GL_WARN_ON_USE (dup2, "dup2 is unportable - " "use gnulib module dup2 for portability"); # endif #endif #if @GNULIB_DUP3@ /* Copy the file descriptor OLDFD into file descriptor NEWFD, with the specified flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). Close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the Linux man page at . */ # if @HAVE_DUP3@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup3 rpl_dup3 # endif _GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); # else _GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); # endif _GL_CXXALIASWARN (dup3); #elif defined GNULIB_POSIXCHECK # undef dup3 # if HAVE_RAW_DECL_DUP3 _GL_WARN_ON_USE (dup3, "dup3 is unportable - " "use gnulib module dup3 for portability"); # endif #endif #if @GNULIB_ENVIRON@ # if !@HAVE_DECL_ENVIRON@ /* Set of environment variables and values. An array of strings of the form "VARIABLE=VALUE", terminated with a NULL. */ # if defined __APPLE__ && defined __MACH__ # include # if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR # define _GL_USE_CRT_EXTERNS # endif # endif # ifdef _GL_USE_CRT_EXTERNS # include # define environ (*_NSGetEnviron ()) # else # ifdef __cplusplus extern "C" { # endif extern char **environ; # ifdef __cplusplus } # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if HAVE_RAW_DECL_ENVIRON _GL_UNISTD_INLINE char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is unportable - " "use gnulib module environ for portability"); # undef environ # define environ (*rpl_environ ()) # endif #endif #if @GNULIB_EUIDACCESS@ /* Like access(), except that it uses the effective user id and group id of the current process. */ # if !@HAVE_EUIDACCESS@ _GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); _GL_CXXALIASWARN (euidaccess); # if defined GNULIB_POSIXCHECK /* Like access(), this function is a security risk. */ _GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif defined GNULIB_POSIXCHECK # undef euidaccess # if HAVE_RAW_DECL_EUIDACCESS _GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " "use gnulib module euidaccess for portability"); # endif #endif #if @GNULIB_FACCESSAT@ # if @REPLACE_FACCESSAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef faccessat # define faccessat rpl_faccessat # endif _GL_FUNCDECL_RPL (faccessat, int, (int fd, char const *name, int mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (faccessat, int, (int fd, char const *name, int mode, int flag)); # else # if !@HAVE_FACCESSAT@ _GL_FUNCDECL_SYS (faccessat, int, (int fd, char const *file, int mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (faccessat, int, (int fd, char const *file, int mode, int flag)); # endif _GL_CXXALIASWARN (faccessat); #elif defined GNULIB_POSIXCHECK # undef faccessat # if HAVE_RAW_DECL_FACCESSAT _GL_WARN_ON_USE (faccessat, "faccessat is not portable - " "use gnulib module faccessat for portability"); # endif #endif #if @GNULIB_FCHDIR@ /* Change the process' current working directory to the directory on which the given file descriptor is open. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if ! @HAVE_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); /* Gnulib internal hooks needed to maintain the fchdir metadata. */ _GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) _GL_ARG_NONNULL ((2)); _GL_EXTERN_C void _gl_unregister_fd (int fd); _GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); _GL_EXTERN_C const char *_gl_directory_name (int fd); # else # if !@HAVE_DECL_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); # endif # endif _GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); _GL_CXXALIASWARN (fchdir); #elif defined GNULIB_POSIXCHECK # undef fchdir # if HAVE_RAW_DECL_FCHDIR _GL_WARN_ON_USE (fchdir, "fchdir is unportable - " "use gnulib module fchdir for portability"); # endif #endif #if @GNULIB_FCHOWNAT@ # if @REPLACE_FCHOWNAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchownat # define fchownat rpl_fchownat # endif _GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # else # if !@HAVE_FCHOWNAT@ _GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # endif _GL_CXXALIASWARN (fchownat); #elif defined GNULIB_POSIXCHECK # undef fchownat # if HAVE_RAW_DECL_FCHOWNAT _GL_WARN_ON_USE (fchownat, "fchownat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FDATASYNC@ /* Synchronize changes to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ _GL_FUNCDECL_SYS (fdatasync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fdatasync, int, (int fd)); _GL_CXXALIASWARN (fdatasync); #elif defined GNULIB_POSIXCHECK # undef fdatasync # if HAVE_RAW_DECL_FDATASYNC _GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " "use gnulib module fdatasync for portability"); # endif #endif #if @GNULIB_FSYNC@ /* Synchronize changes, including metadata, to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if !@HAVE_FSYNC@ _GL_FUNCDECL_SYS (fsync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fsync, int, (int fd)); _GL_CXXALIASWARN (fsync); #elif defined GNULIB_POSIXCHECK # undef fsync # if HAVE_RAW_DECL_FSYNC _GL_WARN_ON_USE (fsync, "fsync is unportable - " "use gnulib module fsync for portability"); # endif #endif #if @GNULIB_FTRUNCATE@ /* Change the size of the file to which FD is opened to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_FTRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftruncate # define ftruncate rpl_ftruncate # endif _GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); _GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); # else # if !@HAVE_FTRUNCATE@ _GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIASWARN (ftruncate); #elif defined GNULIB_POSIXCHECK # undef ftruncate # if HAVE_RAW_DECL_FTRUNCATE _GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " "use gnulib module ftruncate for portability"); # endif #endif #if @GNULIB_GETCWD@ /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Return BUF if successful, or NULL if the directory couldn't be determined or SIZE was too small. See the POSIX:2008 specification . Additionally, the gnulib module 'getcwd' guarantees the following GNU extension: If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # if @REPLACE_GETCWD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getcwd rpl_getcwd # endif _GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); _GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); # else /* Need to cast, because on mingw, the second parameter is int size. */ _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #elif defined GNULIB_POSIXCHECK # undef getcwd # if HAVE_RAW_DECL_GETCWD _GL_WARN_ON_USE (getcwd, "getcwd is unportable - " "use gnulib module getcwd for portability"); # endif #endif #if @GNULIB_GETDOMAINNAME@ /* Return the NIS domain name of the machine. WARNING! The NIS domain name is unrelated to the fully qualified host name of the machine. It is also unrelated to email addresses. WARNING! The NIS domain name is usually the empty string or "(none)" when not using NIS. Put up to LEN bytes of the NIS domain name into NAME. Null terminate it if the name is shorter than LEN. If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @REPLACE_GETDOMAINNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdomainname # define getdomainname rpl_getdomainname # endif _GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); # else # if !@HAVE_DECL_GETDOMAINNAME@ _GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (getdomainname); #elif defined GNULIB_POSIXCHECK # undef getdomainname # if HAVE_RAW_DECL_GETDOMAINNAME _GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " "use gnulib module getdomainname for portability"); # endif #endif #if @GNULIB_GETDTABLESIZE@ /* Return the maximum number of file descriptors in the current process. In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ # if @REPLACE_GETDTABLESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdtablesize # define getdtablesize rpl_getdtablesize # endif _GL_FUNCDECL_RPL (getdtablesize, int, (void)); _GL_CXXALIAS_RPL (getdtablesize, int, (void)); # else # if !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif _GL_CXXALIAS_SYS (getdtablesize, int, (void)); # endif _GL_CXXALIASWARN (getdtablesize); #elif defined GNULIB_POSIXCHECK # undef getdtablesize # if HAVE_RAW_DECL_GETDTABLESIZE _GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " "use gnulib module getdtablesize for portability"); # endif #endif #if @GNULIB_GETGROUPS@ /* Return the supplemental groups that the current process belongs to. It is unspecified whether the effective group id is in the list. If N is 0, return the group count; otherwise, N describes how many entries are available in GROUPS. Return -1 and set errno if N is not 0 and not large enough. Fails with ENOSYS on some systems. */ # if @REPLACE_GETGROUPS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getgroups # define getgroups rpl_getgroups # endif _GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); _GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); # else # if !@HAVE_GETGROUPS@ _GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIASWARN (getgroups); #elif defined GNULIB_POSIXCHECK # undef getgroups # if HAVE_RAW_DECL_GETGROUPS _GL_WARN_ON_USE (getgroups, "getgroups is unportable - " "use gnulib module getgroups for portability"); # endif #endif #if @GNULIB_GETHOSTNAME@ /* Return the standard host name of the machine. WARNING! The host name may or may not be fully qualified. Put up to LEN bytes of the host name into NAME. Null terminate it if the name is shorter than LEN. If the host name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @UNISTD_H_HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname rpl_gethostname # endif _GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); # else # if !@HAVE_GETHOSTNAME@ _GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second parameter is int len. */ _GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (gethostname); #elif @UNISTD_H_HAVE_WINSOCK2_H@ # undef gethostname # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname #elif defined GNULIB_POSIXCHECK # undef gethostname # if HAVE_RAW_DECL_GETHOSTNAME _GL_WARN_ON_USE (gethostname, "gethostname is unportable - " "use gnulib module gethostname for portability"); # endif #endif #if @GNULIB_GETLOGIN@ /* Returns the user's login name, or NULL if it cannot be found. Upon error, returns NULL with errno set. See . Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if !@HAVE_DECL_GETLOGIN@ _GL_FUNCDECL_SYS (getlogin, char *, (void)); # endif _GL_CXXALIAS_SYS (getlogin, char *, (void)); _GL_CXXALIASWARN (getlogin); #elif defined GNULIB_POSIXCHECK # undef getlogin # if HAVE_RAW_DECL_GETLOGIN _GL_WARN_ON_USE (getlogin, "getlogin is unportable - " "use gnulib module getlogin for portability"); # endif #endif #if @GNULIB_GETLOGIN_R@ /* Copies the user's login name to NAME. The array pointed to by NAME has room for SIZE bytes. Returns 0 if successful. Upon error, an error number is returned, or -1 in the case that the login name cannot be found but no specific error is provided (this case is hopefully rare but is left open by the POSIX spec). See . Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if @REPLACE_GETLOGIN_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getlogin_r rpl_getlogin_r # endif _GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); # else # if !@HAVE_DECL_GETLOGIN_R@ _GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 systems, the second argument is int size. */ _GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); # endif _GL_CXXALIASWARN (getlogin_r); #elif defined GNULIB_POSIXCHECK # undef getlogin_r # if HAVE_RAW_DECL_GETLOGIN_R _GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " "use gnulib module getlogin_r for portability"); # endif #endif #if @GNULIB_GETPAGESIZE@ # if @REPLACE_GETPAGESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize rpl_getpagesize # endif _GL_FUNCDECL_RPL (getpagesize, int, (void)); _GL_CXXALIAS_RPL (getpagesize, int, (void)); # else # if !@HAVE_GETPAGESIZE@ # if !defined getpagesize /* This is for POSIX systems. */ # if !defined _gl_getpagesize && defined _SC_PAGESIZE # if ! (defined __VMS && __VMS_VER < 70000000) # define _gl_getpagesize() sysconf (_SC_PAGESIZE) # endif # endif /* This is for older VMS. */ # if !defined _gl_getpagesize && defined __VMS # ifdef __ALPHA # define _gl_getpagesize() 8192 # else # define _gl_getpagesize() 512 # endif # endif /* This is for BeOS. */ # if !defined _gl_getpagesize && @HAVE_OS_H@ # include # if defined B_PAGE_SIZE # define _gl_getpagesize() B_PAGE_SIZE # endif # endif /* This is for AmigaOS4.0. */ # if !defined _gl_getpagesize && defined __amigaos4__ # define _gl_getpagesize() 2048 # endif /* This is for older Unix systems. */ # if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ # include # ifdef EXEC_PAGESIZE # define _gl_getpagesize() EXEC_PAGESIZE # else # ifdef NBPG # ifndef CLSIZE # define CLSIZE 1 # endif # define _gl_getpagesize() (NBPG * CLSIZE) # else # ifdef NBPC # define _gl_getpagesize() NBPC # endif # endif # endif # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize() _gl_getpagesize () # else # if !GNULIB_defined_getpagesize_function _GL_UNISTD_INLINE int getpagesize () { return _gl_getpagesize (); } # define GNULIB_defined_getpagesize_function 1 # endif # endif # endif # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ _GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); # endif # if @HAVE_DECL_GETPAGESIZE@ _GL_CXXALIASWARN (getpagesize); # endif #elif defined GNULIB_POSIXCHECK # undef getpagesize # if HAVE_RAW_DECL_GETPAGESIZE _GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " "use gnulib module getpagesize for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Return the next valid login shell on the system, or NULL when the end of the list has been reached. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (getusershell, char *, (void)); # endif _GL_CXXALIAS_SYS (getusershell, char *, (void)); _GL_CXXALIASWARN (getusershell); #elif defined GNULIB_POSIXCHECK # undef getusershell # if HAVE_RAW_DECL_GETUSERSHELL _GL_WARN_ON_USE (getusershell, "getusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Rewind to pointer that is advanced at each getusershell() call. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (setusershell, void, (void)); # endif _GL_CXXALIAS_SYS (setusershell, void, (void)); _GL_CXXALIASWARN (setusershell); #elif defined GNULIB_POSIXCHECK # undef setusershell # if HAVE_RAW_DECL_SETUSERSHELL _GL_WARN_ON_USE (setusershell, "setusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Free the pointer that is advanced at each getusershell() call and associated resources. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (endusershell, void, (void)); # endif _GL_CXXALIAS_SYS (endusershell, void, (void)); _GL_CXXALIASWARN (endusershell); #elif defined GNULIB_POSIXCHECK # undef endusershell # if HAVE_RAW_DECL_ENDUSERSHELL _GL_WARN_ON_USE (endusershell, "endusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GROUP_MEMBER@ /* Determine whether group id is in calling user's group list. */ # if !@HAVE_GROUP_MEMBER@ _GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); # endif _GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); _GL_CXXALIASWARN (group_member); #elif defined GNULIB_POSIXCHECK # undef group_member # if HAVE_RAW_DECL_GROUP_MEMBER _GL_WARN_ON_USE (group_member, "group_member is unportable - " "use gnulib module group-member for portability"); # endif #endif #if @GNULIB_ISATTY@ # if @REPLACE_ISATTY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty rpl_isatty # endif _GL_FUNCDECL_RPL (isatty, int, (int fd)); _GL_CXXALIAS_RPL (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #elif defined GNULIB_POSIXCHECK # undef isatty # if HAVE_RAW_DECL_ISATTY _GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " "use gnulib module isatty for portability"); # endif #endif #if @GNULIB_LCHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Do not follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_LCHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lchown # define lchown rpl_lchown # endif _GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); # else # if !@HAVE_LCHOWN@ _GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); # endif _GL_CXXALIASWARN (lchown); #elif defined GNULIB_POSIXCHECK # undef lchown # if HAVE_RAW_DECL_LCHOWN _GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " "use gnulib module lchown for portability"); # endif #endif #if @GNULIB_LINK@ /* Create a new hard link for an existing file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if @REPLACE_LINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define link rpl_link # endif _GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); # else # if !@HAVE_LINK@ _GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); # endif _GL_CXXALIASWARN (link); #elif defined GNULIB_POSIXCHECK # undef link # if HAVE_RAW_DECL_LINK _GL_WARN_ON_USE (link, "link is unportable - " "use gnulib module link for portability"); # endif #endif #if @GNULIB_LINKAT@ /* Create a new hard link for an existing file, relative to two directories. FLAG controls whether symlinks are followed. Return 0 if successful, otherwise -1 and errno set. */ # if @REPLACE_LINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef linkat # define linkat rpl_linkat # endif _GL_FUNCDECL_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # else # if !@HAVE_LINKAT@ _GL_FUNCDECL_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # endif _GL_CXXALIASWARN (linkat); #elif defined GNULIB_POSIXCHECK # undef linkat # if HAVE_RAW_DECL_LINKAT _GL_WARN_ON_USE (linkat, "linkat is unportable - " "use gnulib module linkat for portability"); # endif #endif #if @GNULIB_LSEEK@ /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. Return the new offset if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_LSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lseek rpl_lseek # endif _GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); _GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #elif defined GNULIB_POSIXCHECK # undef lseek # if HAVE_RAW_DECL_LSEEK _GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " "systems - use gnulib module lseek for portability"); # endif #endif #if @GNULIB_PIPE@ /* Create a pipe, defaulting to O_BINARY mode. Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. */ # if !@HAVE_PIPE@ _GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pipe, int, (int fd[2])); _GL_CXXALIASWARN (pipe); #elif defined GNULIB_POSIXCHECK # undef pipe # if HAVE_RAW_DECL_PIPE _GL_WARN_ON_USE (pipe, "pipe is unportable - " "use gnulib module pipe-posix for portability"); # endif #endif #if @GNULIB_PIPE2@ /* Create a pipe, applying the given flags when opening the read-end of the pipe and the write-end of the pipe. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. See also the Linux man page at . */ # if @HAVE_PIPE2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define pipe2 rpl_pipe2 # endif _GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); # else _GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); # endif _GL_CXXALIASWARN (pipe2); #elif defined GNULIB_POSIXCHECK # undef pipe2 # if HAVE_RAW_DECL_PIPE2 _GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " "use gnulib module pipe2 for portability"); # endif #endif #if @GNULIB_PREAD@ /* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. Return the number of bytes placed into BUF if successful, otherwise set errno and return -1. 0 indicates EOF. See the POSIX:2008 specification . */ # if @REPLACE_PREAD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pread # define pread rpl_pread # endif _GL_FUNCDECL_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PREAD@ _GL_FUNCDECL_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pread); #elif defined GNULIB_POSIXCHECK # undef pread # if HAVE_RAW_DECL_PREAD _GL_WARN_ON_USE (pread, "pread is unportable - " "use gnulib module pread for portability"); # endif #endif #if @GNULIB_PWRITE@ /* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. Return the number of bytes written if successful, otherwise set errno and return -1. 0 indicates nothing written. See the POSIX:2008 specification . */ # if @REPLACE_PWRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pwrite # define pwrite rpl_pwrite # endif _GL_FUNCDECL_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PWRITE@ _GL_FUNCDECL_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pwrite); #elif defined GNULIB_POSIXCHECK # undef pwrite # if HAVE_RAW_DECL_PWRITE _GL_WARN_ON_USE (pwrite, "pwrite is unportable - " "use gnulib module pwrite for portability"); # endif #endif #if @GNULIB_READ@ /* Read up to COUNT bytes from file descriptor FD into the buffer starting at BUF. See the POSIX:2008 specification . */ # if @REPLACE_READ@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read rpl_read # endif _GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); # else /* Need to cast, because on mingw, the third parameter is unsigned int count and the return type is 'int'. */ _GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #endif #if @GNULIB_READLINK@ /* Read the contents of the symbolic link FILE and place the first BUFSIZE bytes of it into BUF. Return the number of bytes placed into BUF if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_READLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlink rpl_readlink # endif _GL_FUNCDECL_RPL (readlink, ssize_t, (const char *file, char *buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (readlink, ssize_t, (const char *file, char *buf, size_t bufsize)); # else # if !@HAVE_READLINK@ _GL_FUNCDECL_SYS (readlink, ssize_t, (const char *file, char *buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (readlink, ssize_t, (const char *file, char *buf, size_t bufsize)); # endif _GL_CXXALIASWARN (readlink); #elif defined GNULIB_POSIXCHECK # undef readlink # if HAVE_RAW_DECL_READLINK _GL_WARN_ON_USE (readlink, "readlink is unportable - " "use gnulib module readlink for portability"); # endif #endif #if @GNULIB_READLINKAT@ # if @REPLACE_READLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlinkat rpl_readlinkat # endif _GL_FUNCDECL_RPL (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len)); # else # if !@HAVE_READLINKAT@ _GL_FUNCDECL_SYS (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len)); # endif _GL_CXXALIASWARN (readlinkat); #elif defined GNULIB_POSIXCHECK # undef readlinkat # if HAVE_RAW_DECL_READLINKAT _GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " "use gnulib module readlinkat for portability"); # endif #endif #if @GNULIB_RMDIR@ /* Remove the directory DIR. */ # if @REPLACE_RMDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define rmdir rpl_rmdir # endif _GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #elif defined GNULIB_POSIXCHECK # undef rmdir # if HAVE_RAW_DECL_RMDIR _GL_WARN_ON_USE (rmdir, "rmdir is unportable - " "use gnulib module rmdir for portability"); # endif #endif #if @GNULIB_SETHOSTNAME@ /* Set the host name of the machine. The host name may or may not be fully qualified. Put LEN bytes of NAME into the host name. Return 0 if successful, otherwise, set errno and return -1. Platforms with no ability to set the hostname return -1 and set errno = ENOSYS. */ # if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ _GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 and FreeBSD 6.4 the second parameter is int. On Solaris 11 2011-10, the first parameter is not const. */ _GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); _GL_CXXALIASWARN (sethostname); #elif defined GNULIB_POSIXCHECK # undef sethostname # if HAVE_RAW_DECL_SETHOSTNAME _GL_WARN_ON_USE (sethostname, "sethostname is unportable - " "use gnulib module sethostname for portability"); # endif #endif #if @GNULIB_SLEEP@ /* Pause the execution of the current thread for N seconds. Returns the number of seconds left to sleep. See the POSIX:2008 specification . */ # if @REPLACE_SLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sleep # define sleep rpl_sleep # endif _GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); _GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); # else # if !@HAVE_SLEEP@ _GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIASWARN (sleep); #elif defined GNULIB_POSIXCHECK # undef sleep # if HAVE_RAW_DECL_SLEEP _GL_WARN_ON_USE (sleep, "sleep is unportable - " "use gnulib module sleep for portability"); # endif #endif #if @GNULIB_SYMLINK@ # if @REPLACE_SYMLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlink # define symlink rpl_symlink # endif _GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); # else # if !@HAVE_SYMLINK@ _GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); # endif _GL_CXXALIASWARN (symlink); #elif defined GNULIB_POSIXCHECK # undef symlink # if HAVE_RAW_DECL_SYMLINK _GL_WARN_ON_USE (symlink, "symlink is not portable - " "use gnulib module symlink for portability"); # endif #endif #if @GNULIB_SYMLINKAT@ # if @REPLACE_SYMLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlinkat # define symlinkat rpl_symlinkat # endif _GL_FUNCDECL_RPL (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (symlinkat, int, (char const *contents, int fd, char const *file)); # else # if !@HAVE_SYMLINKAT@ _GL_FUNCDECL_SYS (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (symlinkat, int, (char const *contents, int fd, char const *file)); # endif _GL_CXXALIASWARN (symlinkat); #elif defined GNULIB_POSIXCHECK # undef symlinkat # if HAVE_RAW_DECL_SYMLINKAT _GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " "use gnulib module symlinkat for portability"); # endif #endif #if @GNULIB_TRUNCATE@ /* Change the size of the file designated by FILENAME to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_TRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncate # define truncate rpl_truncate # endif _GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); # else # if !@HAVE_TRUNCATE@ _GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); # endif _GL_CXXALIASWARN (truncate); #elif defined GNULIB_POSIXCHECK # undef truncate # if HAVE_RAW_DECL_TRUNCATE _GL_WARN_ON_USE (truncate, "truncate is unportable - " "use gnulib module truncate for portability"); # endif #endif #if @GNULIB_TTYNAME_R@ /* Store at most BUFLEN characters of the pathname of the terminal FD is open on in BUF. Return 0 on success, otherwise an error number. */ # if @REPLACE_TTYNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ttyname_r # define ttyname_r rpl_ttyname_r # endif _GL_FUNCDECL_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen)); # else # if !@HAVE_DECL_TTYNAME_R@ _GL_FUNCDECL_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen)); # endif _GL_CXXALIASWARN (ttyname_r); #elif defined GNULIB_POSIXCHECK # undef ttyname_r # if HAVE_RAW_DECL_TTYNAME_R _GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " "use gnulib module ttyname_r for portability"); # endif #endif #if @GNULIB_UNLINK@ # if @REPLACE_UNLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink rpl_unlink # endif _GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #elif defined GNULIB_POSIXCHECK # undef unlink # if HAVE_RAW_DECL_UNLINK _GL_WARN_ON_USE (unlink, "unlink is not portable - " "use gnulib module unlink for portability"); # endif #endif #if @GNULIB_UNLINKAT@ # if @REPLACE_UNLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlinkat # define unlinkat rpl_unlinkat # endif _GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); # else # if !@HAVE_UNLINKAT@ _GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); # endif _GL_CXXALIASWARN (unlinkat); #elif defined GNULIB_POSIXCHECK # undef unlinkat # if HAVE_RAW_DECL_UNLINKAT _GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_USLEEP@ /* Pause the execution of the current thread for N microseconds. Returns 0 on completion, or -1 on range error. See the POSIX:2001 specification . */ # if @REPLACE_USLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef usleep # define usleep rpl_usleep # endif _GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); _GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); # else # if !@HAVE_USLEEP@ _GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); # endif _GL_CXXALIAS_SYS (usleep, int, (useconds_t n)); # endif _GL_CXXALIASWARN (usleep); #elif defined GNULIB_POSIXCHECK # undef usleep # if HAVE_RAW_DECL_USLEEP _GL_WARN_ON_USE (usleep, "usleep is unportable - " "use gnulib module usleep for portability"); # endif #endif #if @GNULIB_WRITE@ /* Write up to COUNT bytes starting at BUF to file descriptor FD. See the POSIX:2008 specification . */ # if @REPLACE_WRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write rpl_write # endif _GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); # else /* Need to cast, because on mingw, the third parameter is unsigned int count and the return type is 'int'. */ _GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_UNISTD_H */ #endif /* _GL_INCLUDING_UNISTD_H */ #endif /* _@GUARD_PREFIX@_UNISTD_H */ gnuastro-0.5/bootstrapped/lib/sysexits.in.h0000644000175000017500000000365613217200021016064 00000000000000/* exit() exit codes for some BSD system programs. Copyright (C) 2003, 2006-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Simon Josefsson based on sysexits(3) man page */ #ifndef _@GUARD_PREFIX@_SYSEXITS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_SYSEXITS_H@ /* IRIX 6.5 has an that defines a macro EX_OK with a nonzero value. Override it. See */ # ifdef __sgi # include # undef EX_OK # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYSEXITS_H@ /* HP-UX 11 ends at EX_NOPERM. */ # ifndef EX_CONFIG # define EX_CONFIG 78 # endif #endif #ifndef _@GUARD_PREFIX@_SYSEXITS_H #define _@GUARD_PREFIX@_SYSEXITS_H #if !@HAVE_SYSEXITS_H@ # define EX_OK 0 /* same value as EXIT_SUCCESS */ # define EX_USAGE 64 # define EX_DATAERR 65 # define EX_NOINPUT 66 # define EX_NOUSER 67 # define EX_NOHOST 68 # define EX_UNAVAILABLE 69 # define EX_SOFTWARE 70 # define EX_OSERR 71 # define EX_OSFILE 72 # define EX_CANTCREAT 73 # define EX_IOERR 74 # define EX_TEMPFAIL 75 # define EX_PROTOCOL 76 # define EX_NOPERM 77 # define EX_CONFIG 78 #endif #endif /* _@GUARD_PREFIX@_SYSEXITS_H */ #endif /* _@GUARD_PREFIX@_SYSEXITS_H */ gnuastro-0.5/bootstrapped/lib/sys_types.in.h0000644000175000017500000000545013217200021016225 00000000000000/* Provide a more complete sys/types.h. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ # define _GL_INCLUDING_SYS_TYPES_H #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ # undef _GL_INCLUDING_SYS_TYPES_H #ifndef _@GUARD_PREFIX@_SYS_TYPES_H #define _@GUARD_PREFIX@_SYS_TYPES_H /* Override off_t if Large File Support is requested on native Windows. */ #if @WINDOWS_64_BIT_OFF_T@ /* Same as int64_t in . */ # if defined _MSC_VER # define off_t __int64 # else # define off_t long long int # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_64_BIT_OFF_T 1 #endif /* Override dev_t and ino_t if distinguishable inodes support is requested on native Windows. */ #if @WINDOWS_STAT_INODES@ # if @WINDOWS_STAT_INODES@ == 2 /* Experimental, not useful in Windows 10. */ /* Define dev_t to a 64-bit type. */ # if !defined GNULIB_defined_dev_t typedef unsigned long long int rpl_dev_t; # undef dev_t # define dev_t rpl_dev_t # define GNULIB_defined_dev_t 1 # endif /* Define ino_t to a 128-bit type. */ # if !defined GNULIB_defined_ino_t /* MSVC does not have a 128-bit integer type. GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # else /* @WINDOWS_STAT_INODES@ == 1 */ /* Define ino_t to a 64-bit type. */ # if !defined GNULIB_defined_ino_t typedef unsigned long long int rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ #endif /* MSVC 9 defines size_t in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ gnuastro-0.5/bootstrapped/lib/strings.in.h0000644000175000017500000000765713217200021015667 00000000000000/* A substitute . Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_STRINGS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Minix 3.1.8 has a bug: must be included before . But avoid namespace pollution on glibc systems. */ #if defined __minix && !defined __GLIBC__ # include #endif /* The include_next requires a split double-inclusion guard. */ #if @HAVE_STRINGS_H@ # @INCLUDE_NEXT@ @NEXT_STRINGS_H@ #endif #ifndef _@GUARD_PREFIX@_STRINGS_H #define _@GUARD_PREFIX@_STRINGS_H #if ! @HAVE_DECL_STRNCASECMP@ /* Get size_t. */ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #ifdef __cplusplus extern "C" { #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFS@ # if !@HAVE_FFS@ _GL_FUNCDECL_SYS (ffs, int, (int i)); # endif _GL_CXXALIAS_SYS (ffs, int, (int i)); _GL_CXXALIASWARN (ffs); #elif defined GNULIB_POSIXCHECK # undef ffs # if HAVE_RAW_DECL_FFS _GL_WARN_ON_USE (ffs, "ffs is not portable - use the ffs module"); # endif #endif /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function does not work in multibyte locales. */ #if ! @HAVE_STRCASECMP@ extern int strcasecmp (char const *s1, char const *s2) _GL_ARG_NONNULL ((1, 2)); #endif #if defined GNULIB_POSIXCHECK /* strcasecmp() does not work with multibyte strings: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strcasecmp # if HAVE_RAW_DECL_STRCASECMP _GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character " "strings in multibyte locales - " "use mbscasecmp if you care about " "internationalization, or use c_strcasecmp , " "gnulib module c-strcase) if you want a locale " "independent function"); # endif #endif /* Compare no more than N bytes of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function cannot work correctly in multibyte locales. */ #if ! @HAVE_DECL_STRNCASECMP@ extern int strncasecmp (char const *s1, char const *s2, size_t n) _GL_ARG_NONNULL ((1, 2)); #endif #if defined GNULIB_POSIXCHECK /* strncasecmp() does not work with multibyte strings: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strncasecmp # if HAVE_RAW_DECL_STRNCASECMP _GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character " "strings in multibyte locales - " "use mbsncasecmp or mbspcasecmp if you care about " "internationalization, or use c_strncasecmp , " "gnulib module c-strcase) if you want a locale " "independent function"); # endif #endif #ifdef __cplusplus } #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ gnuastro-0.5/bootstrapped/lib/string.in.h0000644000175000017500000012056113217200021015472 00000000000000/* A GNU-like . Copyright (C) 1995-1996, 2001-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_STRING_H /* Special invocation convention: - On OS X/NetBSD we have a sequence of nested includes -> -> "string.h" In this situation system _chk variants due to -D_FORTIFY_SOURCE might be used after any replacements defined here. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STRING_H #define _GL_ALREADY_INCLUDING_STRING_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #undef _GL_ALREADY_INCLUDING_STRING_H #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* NetBSD 5.0 mis-defines NULL. */ #include /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* NetBSD 5.0 declares strsignal in , not in . */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Clear a block of memory. The compiler will not delete a call to this function, even if the block is dead after the call. */ #if @GNULIB_EXPLICIT_BZERO@ # if ! @HAVE_EXPLICIT_BZERO@ _GL_FUNCDECL_SYS (explicit_bzero, void, (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); _GL_CXXALIASWARN (explicit_bzero); #elif defined GNULIB_POSIXCHECK # undef explicit_bzero # if HAVE_RAW_DECL_EXPLICIT_BZERO _GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " "use gnulib module explicit_bzero for portability"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif /* Return the first instance of C within N bytes of S, or NULL. */ #if @GNULIB_MEMCHR@ # if @REPLACE_MEMCHR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memchr rpl_memchr # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else # if ! @HAVE_MEMCHR@ _GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const void * std::memchr (const void *, int, size_t); } extern "C++" { void * std::memchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memchr, void *, (void const *__s, int __c, size_t __n), void const *, (void const *__s, int __c, size_t __n)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n)); # else _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK # undef memchr /* Assume memchr is always declared. */ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " "use gnulib module memchr for portability" ); #endif /* Return the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_MEMMEM@ # if @REPLACE_MEMMEM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memmem rpl_memmem # endif _GL_FUNCDECL_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # else # if ! @HAVE_DECL_MEMMEM@ _GL_FUNCDECL_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # endif _GL_CXXALIASWARN (memmem); #elif defined GNULIB_POSIXCHECK # undef memmem # if HAVE_RAW_DECL_MEMMEM _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " "use gnulib module memmem-simple for portability, " "and module memmem for speed" ); # endif #endif /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ #if @GNULIB_MEMPCPY@ # if ! @HAVE_MEMPCPY@ _GL_FUNCDECL_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); _GL_CXXALIASWARN (mempcpy); #elif defined GNULIB_POSIXCHECK # undef mempcpy # if HAVE_RAW_DECL_MEMPCPY _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " "use gnulib module mempcpy for portability"); # endif #endif /* Search backwards through a block for a byte (specified as an int). */ #if @GNULIB_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } extern "C++" { void * std::memrchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memrchr, void *, (void const *, int, size_t), void const *, (void const *, int, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); # else _GL_CXXALIASWARN (memrchr); # endif #elif defined GNULIB_POSIXCHECK # undef memrchr # if HAVE_RAW_DECL_MEMRCHR _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " "use gnulib module memrchr for portability"); # endif #endif /* Find the first occurrence of C in S. More efficient than memchr(S,C,N), at the expense of undefined behavior if C does not occur within N bytes. */ #if @GNULIB_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::rawmemchr (const void *, int); } extern "C++" { void * std::rawmemchr (void *, int); } */ _GL_CXXALIAS_SYS_CAST2 (rawmemchr, void *, (void const *__s, int __c_in), void const *, (void const *__s, int __c_in)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); # else _GL_CXXALIASWARN (rawmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef rawmemchr # if HAVE_RAW_DECL_RAWMEMCHR _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " "use gnulib module rawmemchr for portability"); # endif #endif /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ #if @GNULIB_STPCPY@ # if ! @HAVE_STPCPY@ _GL_FUNCDECL_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); _GL_CXXALIASWARN (stpcpy); #elif defined GNULIB_POSIXCHECK # undef stpcpy # if HAVE_RAW_DECL_STPCPY _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " "use gnulib module stpcpy for portability"); # endif #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ #if @GNULIB_STPNCPY@ # if @REPLACE_STPNCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpncpy # define stpncpy rpl_stpncpy # endif _GL_FUNCDECL_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # else # if ! @HAVE_STPNCPY@ _GL_FUNCDECL_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # endif _GL_CXXALIASWARN (stpncpy); #elif defined GNULIB_POSIXCHECK # undef stpncpy # if HAVE_RAW_DECL_STPNCPY _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " "use gnulib module stpncpy for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ _GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " "in some multibyte locales - " "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ #if @GNULIB_STRCHRNUL@ # if @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * std::strchrnul (const char *, int); } extern "C++" { char * std::strchrnul (char *, int); } */ _GL_CXXALIAS_SYS_CAST2 (strchrnul, char *, (char const *__s, int __c_in), char const *, (char const *__s, int __c_in)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); # else _GL_CXXALIASWARN (strchrnul); # endif #elif defined GNULIB_POSIXCHECK # undef strchrnul # if HAVE_RAW_DECL_STRCHRNUL _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " "use gnulib module strchrnul for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_STRDUP@ # if @REPLACE_STRDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup rpl_strdup # endif _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # if !(@HAVE_DECL_STRDUP@ || defined strdup) _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #elif defined GNULIB_POSIXCHECK # undef strdup # if HAVE_RAW_DECL_STRDUP _GL_WARN_ON_USE (strdup, "strdup is unportable - " "use gnulib module strdup for portability"); # endif #endif /* Append no more than N characters from SRC onto DEST. */ #if @GNULIB_STRNCAT@ # if @REPLACE_STRNCAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strncat # define strncat rpl_strncat # endif _GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); # endif _GL_CXXALIASWARN (strncat); #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT _GL_WARN_ON_USE (strncat, "strncat is unportable - " "use gnulib module strncat for portability"); # endif #endif /* Return a newly allocated copy of at most N bytes of STRING. */ #if @GNULIB_STRNDUP@ # if @REPLACE_STRNDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strndup # define strndup rpl_strndup # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); # else # if ! @HAVE_DECL_STRNDUP@ _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); # endif _GL_CXXALIASWARN (strndup); #elif defined GNULIB_POSIXCHECK # undef strndup # if HAVE_RAW_DECL_STRNDUP _GL_WARN_ON_USE (strndup, "strndup is unportable - " "use gnulib module strndup for portability"); # endif #endif /* Find the length (number of bytes) of STRING, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many bytes, return MAXLEN. */ #if @GNULIB_STRNLEN@ # if @REPLACE_STRNLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strnlen # define strnlen rpl_strnlen # endif _GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); # endif _GL_CXXALIASWARN (strnlen); #elif defined GNULIB_POSIXCHECK # undef strnlen # if HAVE_RAW_DECL_STRNLEN _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " "use gnulib module strnlen for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strcspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strcspn /* Assume strcspn is always declared. */ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " "in multibyte locales - " "use mbscspn if you care about internationalization"); #endif /* Find the first occurrence in S of any character in ACCEPT. */ #if @GNULIB_STRPBRK@ # if ! @HAVE_STRPBRK@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const char * strpbrk (const char *, const char *); } extern "C++" { char * strpbrk (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strpbrk, char *, (char const *__s, char const *__accept), const char *, (char const *__s, char const *__accept)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept)); # else _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK /* strpbrk() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk _GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " "in multibyte locales - " "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK _GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " "use gnulib module strpbrk for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it cannot work with multibyte strings. */ # undef strspn /* Assume strspn is always declared. */ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " "in multibyte locales - " "use mbsspn if you care about internationalization"); #endif #if defined GNULIB_POSIXCHECK /* strrchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ _GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " "in some multibyte locales - " "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next char after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of strtok() that is multithread-safe and supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strtok_r(). */ #if @GNULIB_STRSEP@ # if ! @HAVE_STRSEP@ _GL_FUNCDECL_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim)); _GL_CXXALIASWARN (strsep); # if defined GNULIB_POSIXCHECK # undef strsep _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " "in multibyte locales - " "use mbssep if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strsep # if HAVE_RAW_DECL_STRSEP _GL_WARN_ON_USE (strsep, "strsep is unportable - " "use gnulib module strsep for portability"); # endif #endif #if @GNULIB_STRSTR@ # if @REPLACE_STRSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strstr rpl_strstr # endif _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); # else /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strstr (const char *, const char *); } extern "C++" { char * strstr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strstr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK /* strstr() does not work with multibyte strings if the locale encoding is different from UTF-8: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strstr /* Assume strstr is always declared. */ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " "work correctly on character strings in most " "multibyte locales - " "use mbsstr if you care about internationalization, " "or use strstr if you care about speed"); #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ #if @GNULIB_STRCASESTR@ # if @REPLACE_STRCASESTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strcasestr rpl_strcasestr # endif _GL_FUNCDECL_RPL (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strcasestr, char *, (const char *haystack, const char *needle)); # else # if ! @HAVE_STRCASESTR@ _GL_FUNCDECL_SYS (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strcasestr (const char *, const char *); } extern "C++" { char * strcasestr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strcasestr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strcasestr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strcasestr); # endif #elif defined GNULIB_POSIXCHECK /* strcasestr() does not work with multibyte strings: It is a glibc extension, and glibc implements it only for unibyte locales. */ # undef strcasestr # if HAVE_RAW_DECL_STRCASESTR _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " "strings in multibyte locales - " "use mbscasestr if you care about " "internationalization, or use c-strcasestr if you want " "a locale independent function"); # endif #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: http://www.opengroup.org/susv3xsh/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strsep(). */ #if @GNULIB_STRTOK_R@ # if @REPLACE_STRTOK_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtok_r # define strtok_r rpl_strtok_r # endif _GL_FUNCDECL_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # else # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # undef strtok_r # endif # if ! @HAVE_DECL_STRTOK_R@ _GL_FUNCDECL_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # endif _GL_CXXALIASWARN (strtok_r); # if defined GNULIB_POSIXCHECK _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " "strings in multibyte locales - " "use mbstok_r if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strtok_r # if HAVE_RAW_DECL_STRTOK_R _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " "use gnulib module strtok_r for portability"); # endif #endif /* The following functions are not specified by POSIX. They are gnulib extensions. */ #if @GNULIB_MBSLEN@ /* Return the number of multibyte characters in the character string STRING. This considers multibyte characters, unlike strlen, which counts bytes. */ # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ # undef mbslen # endif # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbslen rpl_mbslen # endif _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); # endif _GL_CXXALIASWARN (mbslen); #endif #if @GNULIB_MBSNLEN@ /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1)); #endif #if @GNULIB_MBSCHR@ /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbschr); #endif #if @GNULIB_MBSRCHR@ /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strrchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbsrchr); #endif #if @GNULIB_MBSSTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. Unlike strstr(), this function works correctly in multibyte locales with encodings different from UTF-8. */ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASECMP@ /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! Unlike strcasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSNCASECMP@ /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! Unlike strncasecmp(), this function works correctly in multibyte locales. But beware that N is not a byte count but a character count! */ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPCASECMP@ /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! Unlike strncasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASESTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! Unlike strcasestr(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCSPN@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strcspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPBRK@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. Unlike strpbrk(), this function works correctly in multibyte locales. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); # else _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); # endif _GL_CXXALIASWARN (mbspbrk); #endif #if @GNULIB_MBSSPN@ /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSSEP@ /* Search the next delimiter (multibyte character listed in the character string DELIM) starting at the character string *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next multibyte character after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of mbstok_r() that supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbstok_r(). */ _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. If STRING is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = mbstok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbssep(). */ _GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif /* Map any int, typically from errno, into an error message. */ #if @GNULIB_STRERROR@ # if @REPLACE_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror # define strerror rpl_strerror # endif _GL_FUNCDECL_RPL (strerror, char *, (int)); _GL_CXXALIAS_RPL (strerror, char *, (int)); # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif _GL_CXXALIASWARN (strerror); #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ _GL_WARN_ON_USE (strerror, "strerror is unportable - " "use gnulib module strerror to guarantee non-NULL result"); #endif /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #endif #if @GNULIB_STRSIGNAL@ # if @REPLACE_STRSIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strsignal rpl_strsignal # endif _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); # else # if ! @HAVE_DECL_STRSIGNAL@ _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is 'const char *'. */ _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); # endif _GL_CXXALIASWARN (strsignal); #elif defined GNULIB_POSIXCHECK # undef strsignal # if HAVE_RAW_DECL_STRSIGNAL _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " "use gnulib module strsignal for portability"); # endif #endif #if @GNULIB_STRVERSCMP@ # if !@HAVE_STRVERSCMP@ _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); _GL_CXXALIASWARN (strverscmp); #elif defined GNULIB_POSIXCHECK # undef strverscmp # if HAVE_RAW_DECL_STRVERSCMP _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " "use gnulib module strverscmp for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ #endif gnuastro-0.5/bootstrapped/lib/strerror-override.h0000644000175000017500000000374413217200021017261 00000000000000/* strerror-override.h --- POSIX compatible system error routine Copyright (C) 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H # include # include /* Reasonable buffer size that should never trigger ERANGE; if this proves too small, we intentionally abort(), to remind us to fix this value. */ # define STACKBUF_LEN 256 /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ # if REPLACE_STRERROR_0 \ || GNULIB_defined_ESOCK \ || GNULIB_defined_ESTREAMS \ || GNULIB_defined_EWINSOCK \ || GNULIB_defined_ENOMSG \ || GNULIB_defined_EIDRM \ || GNULIB_defined_ENOLINK \ || GNULIB_defined_EPROTO \ || GNULIB_defined_EMULTIHOP \ || GNULIB_defined_EBADMSG \ || GNULIB_defined_EOVERFLOW \ || GNULIB_defined_ENOTSUP \ || GNULIB_defined_ENETRESET \ || GNULIB_defined_ECONNABORTED \ || GNULIB_defined_ESTALE \ || GNULIB_defined_EDQUOT \ || GNULIB_defined_ECANCELED \ || GNULIB_defined_EOWNERDEAD \ || GNULIB_defined_ENOTRECOVERABLE \ || GNULIB_defined_EILSEQ extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; # else # define strerror_override(ignored) NULL # endif #endif /* _GL_STRERROR_OVERRIDE_H */ gnuastro-0.5/bootstrapped/lib/streq.h0000644000175000017500000000763713217200021014725 00000000000000/* Optimized string comparison. Copyright (C) 2001-2002, 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible . */ #ifndef _GL_STREQ_H #define _GL_STREQ_H #include /* STREQ_OPT allows to optimize string comparison with a small literal string. STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) is semantically equivalent to strcmp (s, "EUC-KR") == 0 just faster. */ /* Help GCC to generate good code for string comparisons with immediate strings. */ #if defined (__GNUC__) && defined (__OPTIMIZE__) static inline int streq9 (const char *s1, const char *s2) { return strcmp (s1 + 9, s2 + 9) == 0; } static inline int streq8 (const char *s1, const char *s2, char s28) { if (s1[8] == s28) { if (s28 == 0) return 1; else return streq9 (s1, s2); } else return 0; } static inline int streq7 (const char *s1, const char *s2, char s27, char s28) { if (s1[7] == s27) { if (s27 == 0) return 1; else return streq8 (s1, s2, s28); } else return 0; } static inline int streq6 (const char *s1, const char *s2, char s26, char s27, char s28) { if (s1[6] == s26) { if (s26 == 0) return 1; else return streq7 (s1, s2, s27, s28); } else return 0; } static inline int streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) { if (s1[5] == s25) { if (s25 == 0) return 1; else return streq6 (s1, s2, s26, s27, s28); } else return 0; } static inline int streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) { if (s1[4] == s24) { if (s24 == 0) return 1; else return streq5 (s1, s2, s25, s26, s27, s28); } else return 0; } static inline int streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[3] == s23) { if (s23 == 0) return 1; else return streq4 (s1, s2, s24, s25, s26, s27, s28); } else return 0; } static inline int streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[2] == s22) { if (s22 == 0) return 1; else return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[1] == s21) { if (s21 == 0) return 1; else return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[0] == s20) { if (s20 == 0) return 1; else return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); } else return 0; } #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) #else #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ (strcmp (s1, s2) == 0) #endif #endif /* _GL_STREQ_H */ gnuastro-0.5/bootstrapped/lib/strchrnul.valgrind0000644000175000017500000000040313217200021017152 00000000000000# Suppress a valgrind message about use of uninitialized memory in strchrnul(). # This use is OK because it provides only a speedup. { strchrnul-value4 Memcheck:Value4 fun:strchrnul } { strchrnul-value8 Memcheck:Value8 fun:strchrnul } gnuastro-0.5/bootstrapped/lib/stdlib.in.h0000644000175000017500000010501513217200021015442 00000000000000/* A GNU-like . Copyright (C) 1995, 2001-2004, 2006-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_stdlib_h || defined __need_malloc_and_calloc /* Special invocation conventions inside some gnulib header files, and inside some glibc header files, respectively. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDLIB_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #ifndef _@GUARD_PREFIX@_STDLIB_H #define _@GUARD_PREFIX@_STDLIB_H /* NetBSD 5.0 mis-defines NULL. */ #include /* MirBSD 10 defines WEXITSTATUS in , not in . */ #if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS # include #endif /* Solaris declares getloadavg() in . */ #if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ # include #endif /* Native Windows platforms declare mktemp() in . */ #if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) # include #endif #if @GNULIB_RANDOM_R@ /* OSF/1 5.1 declares 'struct random_data' in , which is included from if _REENTRANT is defined. Include it whenever we need 'struct random_data'. */ # if @HAVE_RANDOM_H@ # include # endif # if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@ # include # endif # if !@HAVE_STRUCT_RANDOM_DATA@ /* Define 'struct random_data'. But allow multiple gnulib generated replacements to coexist. */ # if !GNULIB_defined_struct_random_data struct random_data { int32_t *fptr; /* Front pointer. */ int32_t *rptr; /* Rear pointer. */ int32_t *state; /* Array of state values. */ int rand_type; /* Type of random number generator. */ int rand_deg; /* Degree of random number generator. */ int rand_sep; /* Distance between front and rear. */ int32_t *end_ptr; /* Pointer behind state table. */ }; # define GNULIB_defined_struct_random_data 1 # endif # endif #endif #if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) /* On Mac OS X 10.3, only declares mkstemp. */ /* On Mac OS X 10.5, only declares mkstemps. */ /* On Cygwin 1.7.1, only declares getsubopt. */ /* But avoid namespace pollution on glibc systems and native Windows. */ # include #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The definition of _Noreturn is copied here. */ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ #ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 #endif /* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere with proper operation of xargs. */ #ifndef EXIT_FAILURE # define EXIT_FAILURE 1 #elif EXIT_FAILURE != 1 # undef EXIT_FAILURE # define EXIT_FAILURE 1 #endif #if @GNULIB__EXIT@ /* Terminate the current process with the given return code, without running the 'atexit' handlers. */ # if !@HAVE__EXIT@ _GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); # endif _GL_CXXALIAS_SYS (_Exit, void, (int status)); _GL_CXXALIASWARN (_Exit); #elif defined GNULIB_POSIXCHECK # undef _Exit # if HAVE_RAW_DECL__EXIT _GL_WARN_ON_USE (_Exit, "_Exit is unportable - " "use gnulib module _Exit for portability"); # endif #endif #if @GNULIB_ATOLL@ /* Parse a signed decimal integer. Returns the value of the integer. Errors are not detected. */ # if !@HAVE_ATOLL@ _GL_FUNCDECL_SYS (atoll, long long, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (atoll, long long, (const char *string)); _GL_CXXALIASWARN (atoll); #elif defined GNULIB_POSIXCHECK # undef atoll # if HAVE_RAW_DECL_ATOLL _GL_WARN_ON_USE (atoll, "atoll is unportable - " "use gnulib module atoll for portability"); # endif #endif #if @GNULIB_CALLOC_POSIX@ # if @REPLACE_CALLOC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef calloc # define calloc rpl_calloc # endif _GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size)); _GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); # else _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); # endif _GL_CXXALIASWARN (calloc); #elif defined GNULIB_POSIXCHECK # undef calloc /* Assume calloc is always declared. */ _GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " "use gnulib module calloc-posix for portability"); #endif #if @GNULIB_CANONICALIZE_FILE_NAME@ # if @REPLACE_CANONICALIZE_FILE_NAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define canonicalize_file_name rpl_canonicalize_file_name # endif _GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); # else # if !@HAVE_CANONICALIZE_FILE_NAME@ _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); # endif _GL_CXXALIASWARN (canonicalize_file_name); #elif defined GNULIB_POSIXCHECK # undef canonicalize_file_name # if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME _GL_WARN_ON_USE (canonicalize_file_name, "canonicalize_file_name is unportable - " "use gnulib module canonicalize-lgpl for portability"); # endif #endif #if @GNULIB_GETLOADAVG@ /* Store max(NELEM,3) load average numbers in LOADAVG[]. The three numbers are the load average of the last 1 minute, the last 5 minutes, and the last 15 minutes, respectively. LOADAVG is an array of NELEM numbers. */ # if !@HAVE_DECL_GETLOADAVG@ _GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); _GL_CXXALIASWARN (getloadavg); #elif defined GNULIB_POSIXCHECK # undef getloadavg # if HAVE_RAW_DECL_GETLOADAVG _GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " "use gnulib module getloadavg for portability"); # endif #endif #if @GNULIB_GETSUBOPT@ /* Assuming *OPTIONP is a comma separated list of elements of the form "token" or "token=value", getsubopt parses the first of these elements. If the first element refers to a "token" that is member of the given NULL-terminated array of tokens: - It replaces the comma with a NUL byte, updates *OPTIONP to point past the first option and the comma, sets *VALUEP to the value of the element (or NULL if it doesn't contain an "=" sign), - It returns the index of the "token" in the given array of tokens. Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. For more details see the POSIX:2001 specification. http://www.opengroup.org/susv3xsh/getsubopt.html */ # if !@HAVE_GETSUBOPT@ _GL_FUNCDECL_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep)); _GL_CXXALIASWARN (getsubopt); #elif defined GNULIB_POSIXCHECK # undef getsubopt # if HAVE_RAW_DECL_GETSUBOPT _GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " "use gnulib module getsubopt for portability"); # endif #endif #if @GNULIB_GRANTPT@ /* Change the ownership and access permission of the slave side of the pseudo-terminal whose master side is specified by FD. */ # if !@HAVE_GRANTPT@ _GL_FUNCDECL_SYS (grantpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (grantpt, int, (int fd)); _GL_CXXALIASWARN (grantpt); #elif defined GNULIB_POSIXCHECK # undef grantpt # if HAVE_RAW_DECL_GRANTPT _GL_WARN_ON_USE (grantpt, "grantpt is not portable - " "use gnulib module grantpt for portability"); # endif #endif /* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not rely on GNU or POSIX semantics for malloc and realloc (for example, by never specifying a zero size), so it does not need malloc or realloc to be redefined. */ #if @GNULIB_MALLOC_POSIX@ # if @REPLACE_MALLOC@ # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef malloc # define malloc rpl_malloc # endif _GL_FUNCDECL_RPL (malloc, void *, (size_t size)); _GL_CXXALIAS_RPL (malloc, void *, (size_t size)); # else _GL_CXXALIAS_SYS (malloc, void *, (size_t size)); # endif _GL_CXXALIASWARN (malloc); #elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef malloc /* Assume malloc is always declared. */ _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " "use gnulib module malloc-posix for portability"); #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBTOWC@ # if @REPLACE_MBTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbtowc # define mbtowc rpl_mbtowc # endif _GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); _GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); # else _GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); # endif _GL_CXXALIASWARN (mbtowc); #endif #if @GNULIB_MKDTEMP@ /* Create a unique temporary directory from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the directory name unique. Returns TEMPLATE, or a null pointer if it cannot get a unique name. The directory is created mode 700. */ # if !@HAVE_MKDTEMP@ _GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); _GL_CXXALIASWARN (mkdtemp); #elif defined GNULIB_POSIXCHECK # undef mkdtemp # if HAVE_RAW_DECL_MKDTEMP _GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " "use gnulib module mkdtemp for portability"); # endif #endif #if @GNULIB_MKOSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKOSTEMP@ _GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); _GL_CXXALIASWARN (mkostemp); #elif defined GNULIB_POSIXCHECK # undef mkostemp # if HAVE_RAW_DECL_MKOSTEMP _GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " "use gnulib module mkostemp for portability"); # endif #endif #if @GNULIB_MKOSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE before a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKOSTEMPS@ _GL_FUNCDECL_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/)); _GL_CXXALIASWARN (mkostemps); #elif defined GNULIB_POSIXCHECK # undef mkostemps # if HAVE_RAW_DECL_MKOSTEMPS _GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " "use gnulib module mkostemps for portability"); # endif #endif #if @GNULIB_MKSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKSTEMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mkstemp rpl_mkstemp # endif _GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); # else # if ! @HAVE_MKSTEMP@ _GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); # endif _GL_CXXALIASWARN (mkstemp); #elif defined GNULIB_POSIXCHECK # undef mkstemp # if HAVE_RAW_DECL_MKSTEMP _GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " "use gnulib module mkstemp for portability"); # endif #endif #if @GNULIB_MKSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE prior to a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKSTEMPS@ _GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); _GL_CXXALIASWARN (mkstemps); #elif defined GNULIB_POSIXCHECK # undef mkstemps # if HAVE_RAW_DECL_MKSTEMPS _GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " "use gnulib module mkstemps for portability"); # endif #endif #if @GNULIB_POSIX_OPENPT@ /* Return an FD open to the master side of a pseudo-terminal. Flags should include O_RDWR, and may also include O_NOCTTY. */ # if !@HAVE_POSIX_OPENPT@ _GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); # endif _GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); _GL_CXXALIASWARN (posix_openpt); #elif defined GNULIB_POSIXCHECK # undef posix_openpt # if HAVE_RAW_DECL_POSIX_OPENPT _GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " "use gnulib module posix_openpt for portability"); # endif #endif #if @GNULIB_PTSNAME@ /* Return the pathname of the pseudo-terminal slave associated with the master FD is open on, or NULL on errors. */ # if @REPLACE_PTSNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname # define ptsname rpl_ptsname # endif _GL_FUNCDECL_RPL (ptsname, char *, (int fd)); _GL_CXXALIAS_RPL (ptsname, char *, (int fd)); # else # if !@HAVE_PTSNAME@ _GL_FUNCDECL_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIAS_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIASWARN (ptsname); #elif defined GNULIB_POSIXCHECK # undef ptsname # if HAVE_RAW_DECL_PTSNAME _GL_WARN_ON_USE (ptsname, "ptsname is not portable - " "use gnulib module ptsname for portability"); # endif #endif #if @GNULIB_PTSNAME_R@ /* Set the pathname of the pseudo-terminal slave associated with the master FD is open on and return 0, or set errno and return non-zero on errors. */ # if @REPLACE_PTSNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname_r # define ptsname_r rpl_ptsname_r # endif _GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); _GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); # else # if !@HAVE_PTSNAME_R@ _GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif _GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif _GL_CXXALIASWARN (ptsname_r); #elif defined GNULIB_POSIXCHECK # undef ptsname_r # if HAVE_RAW_DECL_PTSNAME_R _GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " "use gnulib module ptsname_r for portability"); # endif #endif #if @GNULIB_PUTENV@ # if @REPLACE_PUTENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv rpl_putenv # endif _GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #endif #if @GNULIB_QSORT_R@ /* Sort an array of NMEMB elements, starting at address BASE, each element occupying SIZE bytes, in ascending order according to the comparison function COMPARE. */ # if @REPLACE_QSORT_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef qsort_r # define qsort_r rpl_qsort_r # endif _GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg)); # else # if !@HAVE_QSORT_R@ _GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg) _GL_ARG_NONNULL ((1, 4))); # endif _GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg)); # endif _GL_CXXALIASWARN (qsort_r); #elif defined GNULIB_POSIXCHECK # undef qsort_r # if HAVE_RAW_DECL_QSORT_R _GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " "use gnulib module qsort_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if !@HAVE_RANDOM_R@ # ifndef RAND_MAX # define RAND_MAX 2147483647 # endif # endif #endif #if @GNULIB_RANDOM@ # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (random, long, (void)); # endif _GL_CXXALIAS_SYS (random, long, (void)); _GL_CXXALIASWARN (random); #elif defined GNULIB_POSIXCHECK # undef random # if HAVE_RAW_DECL_RANDOM _GL_WARN_ON_USE (random, "random is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); # endif _GL_CXXALIAS_SYS (srandom, void, (unsigned int seed)); _GL_CXXALIASWARN (srandom); #elif defined GNULIB_POSIXCHECK # undef srandom # if HAVE_RAW_DECL_SRANDOM _GL_WARN_ON_USE (srandom, "srandom is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if !@HAVE_RANDOM@ || !@HAVE_DECL_INITSTATE@ _GL_FUNCDECL_SYS (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); _GL_CXXALIASWARN (initstate); #elif defined GNULIB_POSIXCHECK # undef initstate # if HAVE_RAW_DECL_INITSTATE_R _GL_WARN_ON_USE (initstate, "initstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if !@HAVE_RANDOM@ || !@HAVE_DECL_SETSTATE@ _GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (setstate, char *, (char *arg_state)); _GL_CXXALIASWARN (setstate); #elif defined GNULIB_POSIXCHECK # undef setstate # if HAVE_RAW_DECL_SETSTATE_R _GL_WARN_ON_USE (setstate, "setstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random_r # define random_r rpl_random_r # endif _GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); # endif _GL_CXXALIASWARN (random_r); #elif defined GNULIB_POSIXCHECK # undef random_r # if HAVE_RAW_DECL_RANDOM_R _GL_WARN_ON_USE (random_r, "random_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom_r # define srandom_r rpl_srandom_r # endif _GL_FUNCDECL_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (srandom_r); #elif defined GNULIB_POSIXCHECK # undef srandom_r # if HAVE_RAW_DECL_SRANDOM_R _GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate_r # define initstate_r rpl_initstate_r # endif _GL_FUNCDECL_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (initstate_r); #elif defined GNULIB_POSIXCHECK # undef initstate_r # if HAVE_RAW_DECL_INITSTATE_R _GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate_r # define setstate_r rpl_setstate_r # endif _GL_FUNCDECL_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (setstate_r); #elif defined GNULIB_POSIXCHECK # undef setstate_r # if HAVE_RAW_DECL_SETSTATE_R _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_REALLOC_POSIX@ # if @REPLACE_REALLOC@ # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef realloc # define realloc rpl_realloc # endif _GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)); _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); # else _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); # endif _GL_CXXALIASWARN (realloc); #elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef realloc /* Assume realloc is always declared. */ _GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " "use gnulib module realloc-posix for portability"); #endif #if @GNULIB_REALLOCARRAY@ # if ! @HAVE_REALLOCARRAY@ _GL_FUNCDECL_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif _GL_CXXALIAS_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); _GL_CXXALIASWARN (reallocarray); #elif defined GNULIB_POSIXCHECK # undef reallocarray # if HAVE_RAW_DECL_REALLOCARRAY _GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " "use gnulib module reallocarray for portability"); # endif #endif #if @GNULIB_REALPATH@ # if @REPLACE_REALPATH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define realpath rpl_realpath # endif _GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); # else # if !@HAVE_REALPATH@ _GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); # endif _GL_CXXALIASWARN (realpath); #elif defined GNULIB_POSIXCHECK # undef realpath # if HAVE_RAW_DECL_REALPATH _GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " "canonicalize or canonicalize-lgpl for portability"); # endif #endif #if @GNULIB_RPMATCH@ /* Test a user response to a question. Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ # if !@HAVE_RPMATCH@ _GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); _GL_CXXALIASWARN (rpmatch); #elif defined GNULIB_POSIXCHECK # undef rpmatch # if HAVE_RAW_DECL_RPMATCH _GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " "use gnulib module rpmatch for portability"); # endif #endif #if @GNULIB_SECURE_GETENV@ /* Look up NAME in the environment, returning 0 in insecure situations. */ # if !@HAVE_SECURE_GETENV@ _GL_FUNCDECL_SYS (secure_getenv, char *, (char const *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); _GL_CXXALIASWARN (secure_getenv); #elif defined GNULIB_POSIXCHECK # undef secure_getenv # if HAVE_RAW_DECL_SECURE_GETENV _GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " "use gnulib module secure_getenv for portability"); # endif #endif #if @GNULIB_SETENV@ /* Set NAME to VALUE in the environment. If REPLACE is nonzero, overwrite an existing value. */ # if @REPLACE_SETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setenv # define setenv rpl_setenv # endif _GL_FUNCDECL_RPL (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setenv, int, (const char *name, const char *value, int replace)); # else # if !@HAVE_DECL_SETENV@ _GL_FUNCDECL_SYS (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (setenv, int, (const char *name, const char *value, int replace)); # endif # if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) _GL_CXXALIASWARN (setenv); # endif #elif defined GNULIB_POSIXCHECK # undef setenv # if HAVE_RAW_DECL_SETENV _GL_WARN_ON_USE (setenv, "setenv is unportable - " "use gnulib module setenv for portability"); # endif #endif #if @GNULIB_STRTOD@ /* Parse a double from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtod rpl_strtod # endif _GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); # else # if !@HAVE_STRTOD@ _GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); # endif _GL_CXXALIASWARN (strtod); #elif defined GNULIB_POSIXCHECK # undef strtod # if HAVE_RAW_DECL_STRTOD _GL_WARN_ON_USE (strtod, "strtod is unportable - " "use gnulib module strtod for portability"); # endif #endif #if @GNULIB_STRTOLL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set to ERANGE. */ # if !@HAVE_STRTOLL@ _GL_FUNCDECL_SYS (strtoll, long long, (const char *string, char **endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoll, long long, (const char *string, char **endptr, int base)); _GL_CXXALIASWARN (strtoll); #elif defined GNULIB_POSIXCHECK # undef strtoll # if HAVE_RAW_DECL_STRTOLL _GL_WARN_ON_USE (strtoll, "strtoll is unportable - " "use gnulib module strtoll for portability"); # endif #endif #if @GNULIB_STRTOULL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULLONG_MAX, and errno is set to ERANGE. */ # if !@HAVE_STRTOULL@ _GL_FUNCDECL_SYS (strtoull, unsigned long long, (const char *string, char **endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoull, unsigned long long, (const char *string, char **endptr, int base)); _GL_CXXALIASWARN (strtoull); #elif defined GNULIB_POSIXCHECK # undef strtoull # if HAVE_RAW_DECL_STRTOULL _GL_WARN_ON_USE (strtoull, "strtoull is unportable - " "use gnulib module strtoull for portability"); # endif #endif #if @GNULIB_UNLOCKPT@ /* Unlock the slave side of the pseudo-terminal whose master side is specified by FD, so that it can be opened. */ # if !@HAVE_UNLOCKPT@ _GL_FUNCDECL_SYS (unlockpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (unlockpt, int, (int fd)); _GL_CXXALIASWARN (unlockpt); #elif defined GNULIB_POSIXCHECK # undef unlockpt # if HAVE_RAW_DECL_UNLOCKPT _GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " "use gnulib module unlockpt for portability"); # endif #endif #if @GNULIB_UNSETENV@ /* Remove the variable NAME from the environment. */ # if @REPLACE_UNSETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unsetenv # define unsetenv rpl_unsetenv # endif _GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); # else # if !@HAVE_DECL_UNSETENV@ _GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); # endif # if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) _GL_CXXALIASWARN (unsetenv); # endif #elif defined GNULIB_POSIXCHECK # undef unsetenv # if HAVE_RAW_DECL_UNSETENV _GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " "use gnulib module unsetenv for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCTOMB@ # if @REPLACE_WCTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctomb # define wctomb rpl_wctomb # endif _GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); _GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); # else _GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); # endif _GL_CXXALIASWARN (wctomb); #endif #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif gnuastro-0.5/bootstrapped/lib/stdio.in.h0000644000175000017500000014437113217200021015313 00000000000000/* A GNU-like . Copyright (C) 2004, 2007-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H /* Special invocation convention: - Inside glibc header files. - On OSF/1 5.1 we have a sequence of nested includes -> -> -> -> -> -> -> . In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDIO_H #define _GL_ALREADY_INCLUDING_STDIO_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #undef _GL_ALREADY_INCLUDING_STDIO_H #ifndef _@GUARD_PREFIX@_STDIO_H #define _@GUARD_PREFIX@_STDIO_H /* Get va_list. Needed on many systems, including glibc 2.8. */ #include #include /* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 and eglibc 2.11.2. May also define off_t to a 64-bit type on native Windows. */ #include /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, except that it indicates to GCC that the supported format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. */ #if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU # define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument) #else # define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, except that it indicates to GCC that the supported format string directives are the ones of the system scanf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) /* Solaris 10 and NetBSD 7.0 declare renameat in , not in . */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ && ! defined __GLIBC__ # include #endif /* MSVC declares 'perror' in , not in . We must include it before we #define perror rpl_perror. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include #endif /* MSVC declares 'remove' in , not in . We must include it before we #define remove rpl_remove. */ /* MSVC declares 'rename' in , not in . We must include it before we #define rename rpl_rename. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Macros for stringification. */ #define _GL_STDIO_STRINGIZE(token) #token #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., . Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && defined __GNUC__ && defined __STDC__) # undef putc_unlocked #endif #if @GNULIB_DPRINTF@ # if @REPLACE_DPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dprintf rpl_dprintf # endif _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); # else # if !@HAVE_DPRINTF@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); # endif _GL_CXXALIASWARN (dprintf); #elif defined GNULIB_POSIXCHECK # undef dprintf # if HAVE_RAW_DECL_DPRINTF _GL_WARN_ON_USE (dprintf, "dprintf is unportable - " "use gnulib module dprintf for portability"); # endif #endif #if @GNULIB_FCLOSE@ /* Close STREAM and its underlying file descriptor. */ # if @REPLACE_FCLOSE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fclose rpl_fclose # endif _GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); # endif _GL_CXXALIASWARN (fclose); #elif defined GNULIB_POSIXCHECK # undef fclose /* Assume fclose is always declared. */ _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " "use gnulib module fclose for portable POSIX compliance"); #endif #if @GNULIB_FDOPEN@ # if @REPLACE_FDOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen rpl_fdopen # endif _GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # else _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); #elif defined GNULIB_POSIXCHECK # undef fdopen /* Assume fdopen is always declared. */ _GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " "use gnulib module fdopen for portability"); #endif #if @GNULIB_FFLUSH@ /* Flush all pending data on STREAM according to POSIX rules. Both output and seekable input streams are supported. Note! LOSS OF DATA can occur if fflush is applied on an input stream that is _not_seekable_ or on an update stream that is _not_seekable_ and in which the most recent operation was input. Seekability can be tested with lseek(fileno(fp),0,SEEK_CUR). */ # if @REPLACE_FFLUSH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fflush rpl_fflush # endif _GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); _GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); # else _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fflush); #elif defined GNULIB_POSIXCHECK # undef fflush /* Assume fflush is always declared. */ _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " "use gnulib module fflush for portable POSIX compliance"); #endif #if @GNULIB_FGETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgetc # define fgetc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); # endif _GL_CXXALIASWARN (fgetc); #endif #if @GNULIB_FGETS@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgets # define fgets rpl_fgets # endif _GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); # else _GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); # endif _GL_CXXALIASWARN (fgets); #endif #if @GNULIB_FOPEN@ # if @REPLACE_FOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fopen # define fopen rpl_fopen # endif _GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); # else _GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); # endif _GL_CXXALIASWARN (fopen); #elif defined GNULIB_POSIXCHECK # undef fopen /* Assume fopen is always declared. */ _GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " "use gnulib module fopen for portability"); #endif #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fprintf rpl_fprintf # endif # define GNULIB_overrides_fprintf 1 # if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); # else _GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); # endif _GL_CXXALIASWARN (fprintf); #endif #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_fprintf # undef fprintf # endif /* Assume fprintf is always declared. */ _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " "use gnulib module fprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_FPURGE@ /* Discard all pending buffered I/O data on STREAM. STREAM must not be wide-character oriented. When discarding pending output, the file position is set back to where it was before the write calls. When discarding pending input, the file position is advanced to match the end of the previously read input. Return 0 if successful. Upon error, return -1 and set errno. */ # if @REPLACE_FPURGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fpurge rpl_fpurge # endif _GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); # else # if !@HAVE_DECL_FPURGE@ _GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fpurge); #elif defined GNULIB_POSIXCHECK # undef fpurge # if HAVE_RAW_DECL_FPURGE _GL_WARN_ON_USE (fpurge, "fpurge is not always present - " "use gnulib module fpurge for portability"); # endif #endif #if @GNULIB_FPUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputc # define fputc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); # endif _GL_CXXALIASWARN (fputc); #endif #if @GNULIB_FPUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputs # define fputs rpl_fputs # endif _GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); # else _GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); # endif _GL_CXXALIASWARN (fputs); #endif #if @GNULIB_FREAD@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fread # define fread rpl_fread # endif _GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); # else _GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); # endif _GL_CXXALIASWARN (fread); #endif #if @GNULIB_FREOPEN@ # if @REPLACE_FREOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freopen # define freopen rpl_freopen # endif _GL_FUNCDECL_RPL (freopen, FILE *, (const char *filename, const char *mode, FILE *stream) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (freopen, FILE *, (const char *filename, const char *mode, FILE *stream)); # else _GL_CXXALIAS_SYS (freopen, FILE *, (const char *filename, const char *mode, FILE *stream)); # endif _GL_CXXALIASWARN (freopen); #elif defined GNULIB_POSIXCHECK # undef freopen /* Assume freopen is always declared. */ _GL_WARN_ON_USE (freopen, "freopen on native Windows platforms is not POSIX compliant - " "use gnulib module freopen for portability"); #endif #if @GNULIB_FSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fscanf # define fscanf rpl_fscanf # endif _GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); # else _GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); # endif _GL_CXXALIASWARN (fscanf); #endif /* Set up the following warnings, based on which modules are in use. GNU Coding Standards discourage the use of fseek, since it imposes an arbitrary limitation on some 32-bit hosts. Remember that the fseek module depends on the fseeko module, so we only have three cases to consider: 1. The developer is not using either module. Issue a warning under GNULIB_POSIXCHECK for both functions, to remind them that both functions have bugs on some systems. _GL_NO_LARGE_FILES has no impact on this warning. 2. The developer is using both modules. They may be unaware of the arbitrary limitations of fseek, so issue a warning under GNULIB_POSIXCHECK. On the other hand, they may be using both modules intentionally, so the developer can define _GL_NO_LARGE_FILES in the compilation units where the use of fseek is safe, to silence the warning. 3. The developer is using the fseeko module, but not fseek. Gnulib guarantees that fseek will still work around platform bugs in that case, but we presume that the developer is aware of the pitfalls of fseek and was trying to avoid it, so issue a warning even when GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be defined to silence the warning in particular compilation units. In C++ compilations with GNULIB_NAMESPACE, in order to avoid that fseek gets defined as a macro, it is recommended that the developer uses the fseek module, even if he is not calling the fseek function. Most gnulib clients that perform stream operations should fall into category 3. */ #if @GNULIB_FSEEK@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 2, above. */ # undef fseek # endif # if @REPLACE_FSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseek # define fseek rpl_fseek # endif _GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); # else _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); # endif _GL_CXXALIASWARN (fseek); #endif #if @GNULIB_FSEEKO@ # if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 3, above. */ # undef fseek # endif # if @REPLACE_FSEEKO@ /* Provide an fseeko function that is aware of a preceding fflush(), and which detects pipes. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseeko # define fseeko rpl_fseeko # endif _GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); # else # if ! @HAVE_DECL_FSEEKO@ _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); # endif _GL_CXXALIASWARN (fseeko); #elif defined GNULIB_POSIXCHECK # define _GL_FSEEK_WARN /* Category 1, above. */ # undef fseek # undef fseeko # if HAVE_RAW_DECL_FSEEKO _GL_WARN_ON_USE (fseeko, "fseeko is unportable - " "use gnulib module fseeko for portability"); # endif #endif #ifdef _GL_FSEEK_WARN # undef _GL_FSEEK_WARN /* Here, either fseek is undefined (but C89 guarantees that it is declared), or it is defined as rpl_fseek (declared above). */ _GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " "on 32-bit platforms - " "use fseeko function for handling of large files"); #endif /* ftell, ftello. See the comments on fseek/fseeko. */ #if @GNULIB_FTELL@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 2, above. */ # undef ftell # endif # if @REPLACE_FTELL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftell # define ftell rpl_ftell # endif _GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); # else _GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); # endif _GL_CXXALIASWARN (ftell); #endif #if @GNULIB_FTELLO@ # if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 3, above. */ # undef ftell # endif # if @REPLACE_FTELLO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftello # define ftello rpl_ftello # endif _GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); # else # if ! @HAVE_DECL_FTELLO@ _GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); # endif _GL_CXXALIASWARN (ftello); #elif defined GNULIB_POSIXCHECK # define _GL_FTELL_WARN /* Category 1, above. */ # undef ftell # undef ftello # if HAVE_RAW_DECL_FTELLO _GL_WARN_ON_USE (ftello, "ftello is unportable - " "use gnulib module ftello for portability"); # endif #endif #ifdef _GL_FTELL_WARN # undef _GL_FTELL_WARN /* Here, either ftell is undefined (but C89 guarantees that it is declared), or it is defined as rpl_ftell (declared above). */ _GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " "on 32-bit platforms - " "use ftello function for handling of large files"); #endif #if @GNULIB_FWRITE@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fwrite # define fwrite rpl_fwrite # endif _GL_FUNCDECL_RPL (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream)); # else _GL_CXXALIAS_SYS (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream)); /* Work around bug 11959 when fortifying glibc 2.4 through 2.15 , which sometimes causes an unwanted diagnostic for fwrite calls. This affects only function declaration attributes under certain versions of gcc and clang, and is not needed for C++. */ # if (0 < __USE_FORTIFY_LEVEL \ && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ && !defined __cplusplus) # undef fwrite # undef fwrite_unlocked extern size_t __REDIRECT (rpl_fwrite, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite); extern size_t __REDIRECT (rpl_fwrite_unlocked, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite_unlocked); # define fwrite rpl_fwrite # define fwrite_unlocked rpl_fwrite_unlocked # endif # endif _GL_CXXALIASWARN (fwrite); #endif #if @GNULIB_GETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getc # define getc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (getc, int, (FILE *stream)); # endif _GL_CXXALIASWARN (getc); #endif #if @GNULIB_GETCHAR@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getchar # define getchar rpl_getchar # endif _GL_FUNCDECL_RPL (getchar, int, (void)); _GL_CXXALIAS_RPL (getchar, int, (void)); # else _GL_CXXALIAS_SYS (getchar, int, (void)); # endif _GL_CXXALIASWARN (getchar); #endif #if @GNULIB_GETDELIM@ /* Read input, up to (and including) the next occurrence of DELIMITER, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETDELIM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdelim # define getdelim rpl_getdelim # endif _GL_FUNCDECL_RPL (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream) _GL_ARG_NONNULL ((1, 2, 4))); _GL_CXXALIAS_RPL (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream)); # else # if !@HAVE_DECL_GETDELIM@ _GL_FUNCDECL_SYS (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream) _GL_ARG_NONNULL ((1, 2, 4))); # endif _GL_CXXALIAS_SYS (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream)); # endif _GL_CXXALIASWARN (getdelim); #elif defined GNULIB_POSIXCHECK # undef getdelim # if HAVE_RAW_DECL_GETDELIM _GL_WARN_ON_USE (getdelim, "getdelim is unportable - " "use gnulib module getdelim for portability"); # endif #endif #if @GNULIB_GETLINE@ /* Read a line, up to (and including) the next newline, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETLINE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getline # define getline rpl_getline # endif _GL_FUNCDECL_RPL (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream)); # else # if !@HAVE_DECL_GETLINE@ _GL_FUNCDECL_SYS (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream)); # endif # if @HAVE_DECL_GETLINE@ _GL_CXXALIASWARN (getline); # endif #elif defined GNULIB_POSIXCHECK # undef getline # if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is unportable - " "use gnulib module getline for portability"); # endif #endif /* It is very rare that the developer ever has full control of stdin, so any use of gets warrants an unconditional warning; besides, C11 removed it. */ #undef gets #if HAVE_RAW_DECL_GETS && !defined __cplusplus _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ struct obstack; /* Grow an obstack with formatted output. Return the number of bytes added to OBS. No trailing nul byte is added, and the object should be closed with obstack_finish before use. Upon memory allocation error, call obstack_alloc_failed_handler. Upon other error, return -1. */ # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_printf rpl_obstack_printf # endif _GL_FUNCDECL_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # endif _GL_CXXALIASWARN (obstack_printf); # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_vprintf rpl_obstack_vprintf # endif _GL_FUNCDECL_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # endif _GL_CXXALIASWARN (obstack_vprintf); #endif #if @GNULIB_PCLOSE@ # if !@HAVE_PCLOSE@ _GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); _GL_CXXALIASWARN (pclose); #elif defined GNULIB_POSIXCHECK # undef pclose # if HAVE_RAW_DECL_PCLOSE _GL_WARN_ON_USE (pclose, "pclose is unportable - " "use gnulib module pclose for more portability"); # endif #endif #if @GNULIB_PERROR@ /* Print a message to standard error, describing the value of ERRNO, (if STRING is not NULL and not empty) prefixed with STRING and ": ", and terminated with a newline. */ # if @REPLACE_PERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define perror rpl_perror # endif _GL_FUNCDECL_RPL (perror, void, (const char *string)); _GL_CXXALIAS_RPL (perror, void, (const char *string)); # else _GL_CXXALIAS_SYS (perror, void, (const char *string)); # endif _GL_CXXALIASWARN (perror); #elif defined GNULIB_POSIXCHECK # undef perror /* Assume perror is always declared. */ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " "use gnulib module perror for portability"); #endif #if @GNULIB_POPEN@ # if @REPLACE_POPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef popen # define popen rpl_popen # endif _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); # else # if !@HAVE_POPEN@ _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif _GL_CXXALIASWARN (popen); #elif defined GNULIB_POSIXCHECK # undef popen # if HAVE_RAW_DECL_POPEN _GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " "use gnulib module popen or pipe for more portability"); # endif #endif #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if defined __GNUC__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ # endif # if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define printf rpl_printf # endif _GL_FUNCDECL_RPL (printf, int, (const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); # endif # define GNULIB_overrides_printf 1 # else _GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); # endif _GL_CXXALIASWARN (printf); #endif #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_printf # undef printf # endif /* Assume printf is always declared. */ _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " "use gnulib module printf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_PUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putc # define putc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); # endif _GL_CXXALIASWARN (putc); #endif #if @GNULIB_PUTCHAR@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putchar # define putchar rpl_putchar # endif _GL_FUNCDECL_RPL (putchar, int, (int c)); _GL_CXXALIAS_RPL (putchar, int, (int c)); # else _GL_CXXALIAS_SYS (putchar, int, (int c)); # endif _GL_CXXALIASWARN (putchar); #endif #if @GNULIB_PUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef puts # define puts rpl_puts # endif _GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (puts, int, (const char *string)); # else _GL_CXXALIAS_SYS (puts, int, (const char *string)); # endif _GL_CXXALIASWARN (puts); #endif #if @GNULIB_REMOVE@ # if @REPLACE_REMOVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remove # define remove rpl_remove # endif _GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (remove, int, (const char *name)); # else _GL_CXXALIAS_SYS (remove, int, (const char *name)); # endif _GL_CXXALIASWARN (remove); #elif defined GNULIB_POSIXCHECK # undef remove /* Assume remove is always declared. */ _GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " "use gnulib module remove for more portability"); #endif #if @GNULIB_RENAME@ # if @REPLACE_RENAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rename # define rename rpl_rename # endif _GL_FUNCDECL_RPL (rename, int, (const char *old_filename, const char *new_filename) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (rename, int, (const char *old_filename, const char *new_filename)); # else _GL_CXXALIAS_SYS (rename, int, (const char *old_filename, const char *new_filename)); # endif _GL_CXXALIASWARN (rename); #elif defined GNULIB_POSIXCHECK # undef rename /* Assume rename is always declared. */ _GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " "use gnulib module rename for more portability"); #endif #if @GNULIB_RENAMEAT@ # if @REPLACE_RENAMEAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef renameat # define renameat rpl_renameat # endif _GL_FUNCDECL_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # else # if !@HAVE_RENAMEAT@ _GL_FUNCDECL_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # endif _GL_CXXALIASWARN (renameat); #elif defined GNULIB_POSIXCHECK # undef renameat # if HAVE_RAW_DECL_RENAMEAT _GL_WARN_ON_USE (renameat, "renameat is not portable - " "use gnulib module renameat for portability"); # endif #endif #if @GNULIB_SCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if defined __GNUC__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf /* Don't break __attribute__((format(scanf,M,N))). */ # define scanf __scanf__ # endif _GL_FUNCDECL_RPL_1 (__scanf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf # define scanf rpl_scanf # endif _GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); # endif # else _GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); # endif _GL_CXXALIASWARN (scanf); #endif #if @GNULIB_SNPRINTF@ # if @REPLACE_SNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define snprintf rpl_snprintf # endif _GL_FUNCDECL_RPL (snprintf, int, (char *str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, (char *str, size_t size, const char *format, ...)); # else # if !@HAVE_DECL_SNPRINTF@ _GL_FUNCDECL_SYS (snprintf, int, (char *str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, (char *str, size_t size, const char *format, ...)); # endif _GL_CXXALIASWARN (snprintf); #elif defined GNULIB_POSIXCHECK # undef snprintf # if HAVE_RAW_DECL_SNPRINTF _GL_WARN_ON_USE (snprintf, "snprintf is unportable - " "use gnulib module snprintf for portability"); # endif #endif /* Some people would argue that all sprintf uses should be warned about (for example, OpenBSD issues a link warning for it), since it can cause security holes due to buffer overruns. However, we believe that sprintf can be used safely, and is more efficient than snprintf in those safe cases; and as proof of our belief, we use sprintf in several gnulib modules. So this header intentionally avoids adding a warning to sprintf except when GNULIB_POSIXCHECK is defined. */ #if @GNULIB_SPRINTF_POSIX@ # if @REPLACE_SPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define sprintf rpl_sprintf # endif _GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); # else _GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); # endif _GL_CXXALIASWARN (sprintf); #elif defined GNULIB_POSIXCHECK # undef sprintf /* Assume sprintf is always declared. */ _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " "use gnulib module sprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_TMPFILE@ # if @REPLACE_TMPFILE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tmpfile rpl_tmpfile # endif _GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); _GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); # else _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif _GL_CXXALIASWARN (tmpfile); #elif defined GNULIB_POSIXCHECK # undef tmpfile # if HAVE_RAW_DECL_TMPFILE _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " "use gnulib module tmpfile for portability"); # endif #endif #if @GNULIB_VASPRINTF@ /* Write formatted output to a string dynamically allocated with malloc(). If the memory allocation succeeds, store the address of the string in *RESULT and return the number of resulting bytes, excluding the trailing NUL. Upon memory allocation error, or some other error, return -1. */ # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define asprintf rpl_asprintf # endif _GL_FUNCDECL_RPL (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (asprintf, int, (char **result, const char *format, ...)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (asprintf, int, (char **result, const char *format, ...)); # endif _GL_CXXALIASWARN (asprintf); # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vasprintf rpl_vasprintf # endif _GL_FUNCDECL_RPL (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vasprintf, int, (char **result, const char *format, va_list args)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (vasprintf, int, (char **result, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vasprintf); #endif #if @GNULIB_VDPRINTF@ # if @REPLACE_VDPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vdprintf rpl_vdprintf # endif _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); # else # if !@HAVE_VDPRINTF@ _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on Solaris, the third parameter will likely be __va_list args. */ _GL_CXXALIAS_SYS_CAST (vdprintf, int, (int fd, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vdprintf); #elif defined GNULIB_POSIXCHECK # undef vdprintf # if HAVE_RAW_DECL_VDPRINTF _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " "use gnulib module vdprintf for portability"); # endif #endif #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vfprintf rpl_vfprintf # endif # define GNULIB_overrides_vfprintf 1 # if @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vfprintf, int, (FILE *fp, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vfprintf); #endif #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vfprintf # undef vfprintf # endif /* Assume vfprintf is always declared. */ _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " "use gnulib module vfprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VFSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vfscanf # define vfscanf rpl_vfscanf # endif _GL_FUNCDECL_RPL (vfscanf, int, (FILE *stream, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vfscanf, int, (FILE *stream, const char *format, va_list args)); # else _GL_CXXALIAS_SYS (vfscanf, int, (FILE *stream, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vfscanf); #endif #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vprintf rpl_vprintf # endif # define GNULIB_overrides_vprintf 1 # if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); # else /* Need to cast, because on Solaris, the second parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); # endif _GL_CXXALIASWARN (vprintf); #endif #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vprintf # undef vprintf # endif /* Assume vprintf is always declared. */ _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " "use gnulib module vprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vscanf # define vscanf rpl_vscanf # endif _GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); # else _GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); # endif _GL_CXXALIASWARN (vscanf); #endif #if @GNULIB_VSNPRINTF@ # if @REPLACE_VSNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsnprintf rpl_vsnprintf # endif _GL_FUNCDECL_RPL (vsnprintf, int, (char *str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, (char *str, size_t size, const char *format, va_list args)); # else # if !@HAVE_DECL_VSNPRINTF@ _GL_FUNCDECL_SYS (vsnprintf, int, (char *str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, (char *str, size_t size, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vsnprintf); #elif defined GNULIB_POSIXCHECK # undef vsnprintf # if HAVE_RAW_DECL_VSNPRINTF _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " "use gnulib module vsnprintf for portability"); # endif #endif #if @GNULIB_VSPRINTF_POSIX@ # if @REPLACE_VSPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsprintf rpl_vsprintf # endif _GL_FUNCDECL_RPL (vsprintf, int, (char *str, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, (char *str, const char *format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vsprintf, int, (char *str, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vsprintf); #elif defined GNULIB_POSIXCHECK # undef vsprintf /* Assume vsprintf is always declared. */ _GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " "use gnulib module vsprintf-posix for portable " "POSIX compliance"); #endif #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif gnuastro-0.5/bootstrapped/lib/stdint.in.h0000644000175000017500000005421713217200021015475 00000000000000/* Copyright (C) 2001-2002, 2004-2017 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. This file is part of gnulib. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* * ISO C 99 for platforms that lack it. * */ #ifndef _@GUARD_PREFIX@_STDINT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* When including a system file that in turn includes , use the system , not our substitute. This avoids problems with (for example) VMS, whose includes . */ #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* On Android (Bionic libc), includes this file before having defined 'time_t'. Therefore in this case avoid including other system header files; just include the system's . Ideally we should test __BIONIC__ here, but it is only defined after has been included; hence test __ANDROID__ instead. */ #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #else /* Get those types that are already defined in other system include files, so that we can "#define int8_t signed char" below without worrying about a later system include file containing a "typedef signed char int8_t;" that will get messed up by our macro. Our macros should all be consistent with the system versions, except for the "fast" types and macros, which we recommend against using in public interfaces due to compiler differences. */ #if @HAVE_STDINT_H@ # if defined __sgi && ! defined __c99 /* Bypass IRIX's if in C89 mode, since it merely annoys users with "This header file is to be used only for c99 mode compilations" diagnostics. */ # define __STDINT_H__ # endif /* Some pre-C++11 implementations need this. */ # ifdef __cplusplus # ifndef __STDC_CONSTANT_MACROS # define __STDC_CONSTANT_MACROS 1 # endif # ifndef __STDC_LIMIT_MACROS # define __STDC_LIMIT_MACROS 1 # endif # endif /* Other systems may have an incomplete or buggy . Include it before , since any "#include " in would reinclude us, skipping our contents because _@GUARD_PREFIX@_STDINT_H is defined. The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #endif #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H #define _@GUARD_PREFIX@_STDINT_H /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ #include /* Override WINT_MIN and WINT_MAX if gnulib's or overrides wint_t. */ #if @GNULIB_OVERRIDES_WINT_T@ # undef WINT_MIN # undef WINT_MAX # define WINT_MIN 0x0U # define WINT_MAX 0xffffffffU #endif #if ! @HAVE_C99_STDINT_H@ /* defines some of the stdint.h types as well, on glibc, IRIX 6.5, and OpenBSD 3.8 (via ). AIX 5.2 isn't needed and causes troubles. Mac OS X 10.4.6 includes (which is us), but relies on the system definitions, so include after @NEXT_STDINT_H@. */ # if @HAVE_SYS_TYPES_H@ && ! defined _AIX # include # endif # if @HAVE_INTTYPES_H@ /* In OpenBSD 3.8, includes , which defines int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. also defines intptr_t and uintptr_t. */ # include # elif @HAVE_SYS_INTTYPES_H@ /* Solaris 7 has the types except the *_fast*_t types, and the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ # include # endif # if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ /* Linux libc4 >= 4.6.7 and libc5 have a that defines int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is included by . */ # include # endif # undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* Minimum and maximum values for an integer type under the usual assumption. Return an unspecified value if BITS == 0, adding a check to pacify picky compilers. */ /* These are separate macros, because if you try to merge these macros into a single one, HP-UX cc rejects the resulting expression in constant expressions. */ # define _STDINT_UNSIGNED_MIN(bits, zero) \ (zero) # define _STDINT_SIGNED_MIN(bits, zero) \ (~ _STDINT_MAX (1, bits, zero)) # define _STDINT_MAX(signed, bits, zero) \ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) #if !GNULIB_defined_stdint_types /* 7.18.1.1. Exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef int8_t # undef uint8_t typedef signed char gl_int8_t; typedef unsigned char gl_uint8_t; # define int8_t gl_int8_t # define uint8_t gl_uint8_t # undef int16_t # undef uint16_t typedef short int gl_int16_t; typedef unsigned short int gl_uint16_t; # define int16_t gl_int16_t # define uint16_t gl_uint16_t # undef int32_t # undef uint32_t typedef int gl_int32_t; typedef unsigned int gl_uint32_t; # define int32_t gl_int32_t # define uint32_t gl_uint32_t /* If the system defines INT64_MAX, assume int64_t works. That way, if the underlying platform defines int64_t to be a 64-bit long long int, the code below won't mistakenly define it to be a 64-bit long int, which would mess up C++ name mangling. We must use #ifdef rather than #if, to avoid an error with HP-UX 10.20 cc. */ # ifdef INT64_MAX # define GL_INT64_T # else /* Do not undefine int64_t if gnulib is not being used with 64-bit types, since otherwise it breaks platforms like Tandem/NSK. */ # if LONG_MAX >> 31 >> 31 == 1 # undef int64_t typedef long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif defined _MSC_VER # undef int64_t typedef __int64 gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif @HAVE_LONG_LONG_INT@ # undef int64_t typedef long long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # endif # endif # ifdef UINT64_MAX # define GL_UINT64_T # else # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # undef uint64_t typedef unsigned long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif defined _MSC_VER # undef uint64_t typedef unsigned __int64 gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif @HAVE_UNSIGNED_LONG_LONG_INT@ # undef uint64_t typedef unsigned long long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # endif # endif /* Avoid collision with Solaris 2.5.1 etc. */ # define _UINT8_T # define _UINT32_T # define _UINT64_T /* 7.18.1.2. Minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef int_least8_t # undef uint_least8_t # undef int_least16_t # undef uint_least16_t # undef int_least32_t # undef uint_least32_t # undef int_least64_t # undef uint_least64_t # define int_least8_t int8_t # define uint_least8_t uint8_t # define int_least16_t int16_t # define uint_least16_t uint16_t # define int_least32_t int32_t # define uint_least32_t uint32_t # ifdef GL_INT64_T # define int_least64_t int64_t # endif # ifdef GL_UINT64_T # define uint_least64_t uint64_t # endif /* 7.18.1.3. Fastest minimum-width integer types */ /* Note: Other substitutes may define these types differently. It is not recommended to use these types in public header files. */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. The following code normally uses types consistent with glibc, as that lessens the chance of incompatibility with older GNU hosts. */ # undef int_fast8_t # undef uint_fast8_t # undef int_fast16_t # undef uint_fast16_t # undef int_fast32_t # undef uint_fast32_t # undef int_fast64_t # undef uint_fast64_t typedef signed char gl_int_fast8_t; typedef unsigned char gl_uint_fast8_t; # ifdef __sun /* Define types compatible with SunOS 5.10, so that code compiled under earlier SunOS versions works with code compiled under SunOS 5.10. */ typedef int gl_int_fast32_t; typedef unsigned int gl_uint_fast32_t; # else typedef long int gl_int_fast32_t; typedef unsigned long int gl_uint_fast32_t; # endif typedef gl_int_fast32_t gl_int_fast16_t; typedef gl_uint_fast32_t gl_uint_fast16_t; # define int_fast8_t gl_int_fast8_t # define uint_fast8_t gl_uint_fast8_t # define int_fast16_t gl_int_fast16_t # define uint_fast16_t gl_uint_fast16_t # define int_fast32_t gl_int_fast32_t # define uint_fast32_t gl_uint_fast32_t # ifdef GL_INT64_T # define int_fast64_t int64_t # endif # ifdef GL_UINT64_T # define uint_fast64_t uint64_t # endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own definitions of intptr_t and uintptr_t (which use int and unsigned) to avoid clashes with declarations of system functions like sbrk. */ # ifndef _INTPTR_T_DECLARED # undef intptr_t # undef uintptr_t typedef long int gl_intptr_t; typedef unsigned long int gl_uintptr_t; # define intptr_t gl_intptr_t # define uintptr_t gl_uintptr_t # endif /* 7.18.1.5. Greatest-width integer types */ /* Note: These types are compiler dependent. It may be unwise to use them in public header files. */ /* If the system defines INTMAX_MAX, assume that intmax_t works, and similarly for UINTMAX_MAX and uintmax_t. This avoids problems with assuming one type where another is used by the system. */ # ifndef INTMAX_MAX # undef INTMAX_C # undef intmax_t # if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 typedef long long int gl_intmax_t; # define intmax_t gl_intmax_t # elif defined GL_INT64_T # define intmax_t int64_t # else typedef long int gl_intmax_t; # define intmax_t gl_intmax_t # endif # endif # ifndef UINTMAX_MAX # undef UINTMAX_C # undef uintmax_t # if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 typedef unsigned long long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # elif defined GL_UINT64_T # define uintmax_t uint64_t # else typedef unsigned long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # endif # endif /* Verify that intmax_t and uintmax_t have the same size. Too much code breaks if this is not the case. If this check fails, the reason is likely to be found in the autoconf macros. */ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) ? 1 : -1]; # define GNULIB_defined_stdint_types 1 # endif /* !GNULIB_defined_stdint_types */ /* 7.18.2. Limits of specified-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef INT8_MIN # undef INT8_MAX # undef UINT8_MAX # define INT8_MIN (~ INT8_MAX) # define INT8_MAX 127 # define UINT8_MAX 255 # undef INT16_MIN # undef INT16_MAX # undef UINT16_MAX # define INT16_MIN (~ INT16_MAX) # define INT16_MAX 32767 # define UINT16_MAX 65535 # undef INT32_MIN # undef INT32_MAX # undef UINT32_MAX # define INT32_MIN (~ INT32_MAX) # define INT32_MAX 2147483647 # define UINT32_MAX 4294967295U # if defined GL_INT64_T && ! defined INT64_MAX /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 evaluates the latter incorrectly in preprocessor expressions. */ # define INT64_MIN (- INTMAX_C (1) << 63) # define INT64_MAX INTMAX_C (9223372036854775807) # endif # if defined GL_UINT64_T && ! defined UINT64_MAX # define UINT64_MAX UINTMAX_C (18446744073709551615) # endif /* 7.18.2.2. Limits of minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef INT_LEAST8_MIN # undef INT_LEAST8_MAX # undef UINT_LEAST8_MAX # define INT_LEAST8_MIN INT8_MIN # define INT_LEAST8_MAX INT8_MAX # define UINT_LEAST8_MAX UINT8_MAX # undef INT_LEAST16_MIN # undef INT_LEAST16_MAX # undef UINT_LEAST16_MAX # define INT_LEAST16_MIN INT16_MIN # define INT_LEAST16_MAX INT16_MAX # define UINT_LEAST16_MAX UINT16_MAX # undef INT_LEAST32_MIN # undef INT_LEAST32_MAX # undef UINT_LEAST32_MAX # define INT_LEAST32_MIN INT32_MIN # define INT_LEAST32_MAX INT32_MAX # define UINT_LEAST32_MAX UINT32_MAX # undef INT_LEAST64_MIN # undef INT_LEAST64_MAX # ifdef GL_INT64_T # define INT_LEAST64_MIN INT64_MIN # define INT_LEAST64_MAX INT64_MAX # endif # undef UINT_LEAST64_MAX # ifdef GL_UINT64_T # define UINT_LEAST64_MAX UINT64_MAX # endif /* 7.18.2.3. Limits of fastest minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. */ # undef INT_FAST8_MIN # undef INT_FAST8_MAX # undef UINT_FAST8_MAX # define INT_FAST8_MIN SCHAR_MIN # define INT_FAST8_MAX SCHAR_MAX # define UINT_FAST8_MAX UCHAR_MAX # undef INT_FAST16_MIN # undef INT_FAST16_MAX # undef UINT_FAST16_MAX # define INT_FAST16_MIN INT_FAST32_MIN # define INT_FAST16_MAX INT_FAST32_MAX # define UINT_FAST16_MAX UINT_FAST32_MAX # undef INT_FAST32_MIN # undef INT_FAST32_MAX # undef UINT_FAST32_MAX # ifdef __sun # define INT_FAST32_MIN INT_MIN # define INT_FAST32_MAX INT_MAX # define UINT_FAST32_MAX UINT_MAX # else # define INT_FAST32_MIN LONG_MIN # define INT_FAST32_MAX LONG_MAX # define UINT_FAST32_MAX ULONG_MAX # endif # undef INT_FAST64_MIN # undef INT_FAST64_MAX # ifdef GL_INT64_T # define INT_FAST64_MIN INT64_MIN # define INT_FAST64_MAX INT64_MAX # endif # undef UINT_FAST64_MAX # ifdef GL_UINT64_T # define UINT_FAST64_MAX UINT64_MAX # endif /* 7.18.2.4. Limits of integer types capable of holding object pointers */ # undef INTPTR_MIN # undef INTPTR_MAX # undef UINTPTR_MAX # define INTPTR_MIN LONG_MIN # define INTPTR_MAX LONG_MAX # define UINTPTR_MAX ULONG_MAX /* 7.18.2.5. Limits of greatest-width integer types */ # ifndef INTMAX_MAX # undef INTMAX_MIN # ifdef INT64_MAX # define INTMAX_MIN INT64_MIN # define INTMAX_MAX INT64_MAX # else # define INTMAX_MIN INT32_MIN # define INTMAX_MAX INT32_MAX # endif # endif # ifndef UINTMAX_MAX # ifdef UINT64_MAX # define UINTMAX_MAX UINT64_MAX # else # define UINTMAX_MAX UINT32_MAX # endif # endif /* 7.18.3. Limits of other integer types */ /* ptrdiff_t limits */ # undef PTRDIFF_MIN # undef PTRDIFF_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) # else # define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) # endif # else # define PTRDIFF_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # define PTRDIFF_MAX \ _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # endif /* sig_atomic_t limits */ # undef SIG_ATOMIC_MIN # undef SIG_ATOMIC_MAX # if @HAVE_SIGNED_SIG_ATOMIC_T@ # define SIG_ATOMIC_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # else # define SIG_ATOMIC_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # endif # define SIG_ATOMIC_MAX \ _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 0@SIG_ATOMIC_T_SUFFIX@) /* size_t limit */ # undef SIZE_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define SIZE_MAX _STDINT_MAX (0, 64, 0ul) # else # define SIZE_MAX _STDINT_MAX (0, 32, 0ul) # endif # else # define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) # endif /* wchar_t limits */ /* Get WCHAR_MIN, WCHAR_MAX. This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested includes -> -> -> , and the latter includes and assumes its types are already defined. */ # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) /* BSD/OS 4.0.1 has a bug: , and must be included before . */ # include # include # include # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # include # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # endif # undef WCHAR_MIN # undef WCHAR_MAX # if @HAVE_SIGNED_WCHAR_T@ # define WCHAR_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # else # define WCHAR_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # endif # define WCHAR_MAX \ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) /* wint_t limits */ # undef WINT_MIN # undef WINT_MAX # if @HAVE_SIGNED_WINT_T@ # define WINT_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # else # define WINT_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif # define WINT_MAX \ _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) /* 7.18.4. Macros for integer constants */ /* 7.18.4.1. Macros for minimum-width integer constants */ /* According to ISO C 99 Technical Corrigendum 1 */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ # undef INT8_C # undef UINT8_C # define INT8_C(x) x # define UINT8_C(x) x # undef INT16_C # undef UINT16_C # define INT16_C(x) x # define UINT16_C(x) x # undef INT32_C # undef UINT32_C # define INT32_C(x) x # define UINT32_C(x) x ## U # undef INT64_C # undef UINT64_C # if LONG_MAX >> 31 >> 31 == 1 # define INT64_C(x) x##L # elif defined _MSC_VER # define INT64_C(x) x##i64 # elif @HAVE_LONG_LONG_INT@ # define INT64_C(x) x##LL # endif # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # define UINT64_C(x) x##UL # elif defined _MSC_VER # define UINT64_C(x) x##ui64 # elif @HAVE_UNSIGNED_LONG_LONG_INT@ # define UINT64_C(x) x##ULL # endif /* 7.18.4.2. Macros for greatest-width integer constants */ # ifndef INTMAX_C # if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 # define INTMAX_C(x) x##LL # elif defined GL_INT64_T # define INTMAX_C(x) INT64_C(x) # else # define INTMAX_C(x) x##L # endif # endif # ifndef UINTMAX_C # if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 # define UINTMAX_C(x) x##ULL # elif defined GL_UINT64_T # define UINTMAX_C(x) UINT64_C(x) # else # define UINTMAX_C(x) x##UL # endif # endif #endif /* !@HAVE_C99_STDINT_H@ */ /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (!defined UINTMAX_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # ifdef INT8_MAX # define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) # endif # ifdef UINT8_MAX # define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) # endif # ifdef INT16_MAX # define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) # endif # ifdef UINT16_MAX # define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) # endif # ifdef INT32_MAX # define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) # endif # ifdef UINT32_MAX # define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) # endif # ifdef INT64_MAX # define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) # endif # ifdef UINT64_MAX # define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) # endif # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) # ifdef WINT_MAX # define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) # endif # ifdef SIG_ATOMIC_MAX # define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) # endif #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_STDINT_H */ #endif /* !(defined __ANDROID__ && ...) */ #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ gnuastro-0.5/bootstrapped/lib/stddef.in.h0000644000175000017500000000746313217200021015442 00000000000000/* A substitute for POSIX 2008 , for platforms that have issues. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Eric Blake. */ /* * POSIX 2008 for platforms that have issues. * */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_wchar_t || defined __need_size_t \ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t /* Special invocation convention inside gcc header files. In particular, gcc provides a version of that blindly redefines NULL even when __need_wint_t was defined, even though wint_t is not normally provided by . Hence, we must remember if special invocation has ever been used to obtain wint_t, in which case we need to clean up NULL yet again. */ # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) # ifdef __need_wint_t # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ # if (@REPLACE_NULL@ \ && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T)) # undef NULL # ifdef __cplusplus /* ISO C++ says that the macro NULL must expand to an integer constant expression, hence '((void *) 0)' is not allowed in C++. */ # if __GNUG__ >= 3 /* GNU C++ has a __null macro that behaves like an integer ('int' or 'long') but has the same size as a pointer. Use that, to avoid warnings. */ # define NULL __null # else # define NULL 0L # endif # else # define NULL ((void *) 0) # endif # endif # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif /* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is a hack in case the configure-time test was done with g++ even though we are currently compiling with gcc. */ #if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T) # if !GNULIB_defined_max_align_t /* On the x86, the maximum storage alignment of double, long, etc. is 4, but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, and the C11 standard allows this. Work around this problem by using __alignof__ (which returns 8 for double) rather than _Alignof (which returns 4), and align each union member accordingly. */ # ifdef __GNUC__ # define _GL_STDDEF_ALIGNAS(type) \ __attribute__ ((__aligned__ (__alignof__ (type)))) # else # define _GL_STDDEF_ALIGNAS(type) /* */ # endif typedef union { char *__p _GL_STDDEF_ALIGNAS (char *); double __d _GL_STDDEF_ALIGNAS (double); long double __ld _GL_STDDEF_ALIGNAS (long double); long int __i _GL_STDDEF_ALIGNAS (long int); } rpl_max_align_t; # define max_align_t rpl_max_align_t # define GNULIB_defined_max_align_t 1 # endif #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ gnuastro-0.5/bootstrapped/lib/stdbool.in.h0000644000175000017500000001175013217200021015631 00000000000000/* Copyright (C) 2001-2003, 2006-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _GL_STDBOOL_H #define _GL_STDBOOL_H /* ISO C 99 for platforms that lack it. */ /* Usage suggestions: Programs that use should be aware of some limitations and standards compliance issues. Standards compliance: - must be #included before 'bool', 'false', 'true' can be used. - You cannot assume that sizeof (bool) == 1. - Programs should not undefine the macros bool, true, and false, as C99 lists that as an "obsolescent feature". Limitations of this substitute, when used in a C89 environment: - must be #included before the '_Bool' type can be used. - You cannot assume that _Bool is a typedef; it might be a macro. - Bit-fields of type 'bool' are not supported. Portable code should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - In C99, casts and automatic conversions to '_Bool' or 'bool' are performed in such a way that every nonzero value gets converted to 'true', and zero gets converted to 'false'. This doesn't work with this substitute. With this substitute, only the values 0 and 1 give the expected result when converted to _Bool' or 'bool'. - C99 allows the use of (_Bool)0.0 in constant expressions, but this substitute cannot always provide this property. Also, it is suggested that programs use 'bool' rather than '_Bool'; this isn't required, but 'bool' is more common. */ /* 7.16. Boolean type and values */ /* BeOS already #defines false 0, true 1. We use the same definitions below, but temporarily we have to #undef them. */ #if defined __BEOS__ && !defined __HAIKU__ # include /* defines bool but not _Bool */ # undef false # undef true #endif #ifdef __cplusplus # define _Bool bool # define bool bool #else # if defined __BEOS__ && !defined __HAIKU__ /* A compiler known to have 'bool'. */ /* If the compiler already has both 'bool' and '_Bool', we can assume they are the same types. */ # if !@HAVE__BOOL@ typedef bool _Bool; # endif # else # if !defined __GNUC__ /* If @HAVE__BOOL@: Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when the built-in _Bool type is used. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html Similar bugs are likely with other compilers as well; this file wouldn't be used if was working. So we override the _Bool type. If !@HAVE__BOOL@: Need to define _Bool ourselves. As 'signed char' or as an enum type? Use of a typedef, with SunPRO C, leads to a stupid "warning: _Bool is a keyword in ISO C99". Use of an enum type, with IRIX cc, leads to a stupid "warning(1185): enumerated type mixed with another type". Even the existence of an enum type, without a typedef, "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. The only benefit of the enum, debuggability, is not important with these compilers. So use 'signed char' and no enum. */ # define _Bool signed char # else /* With this compiler, trust the _Bool type if the compiler has it. */ # if !@HAVE__BOOL@ /* For the sake of symbolic names in gdb, define true and false as enum constants, not only as macros. It is tempting to write typedef enum { false = 0, true = 1 } _Bool; so that gdb prints values of type 'bool' symbolically. But then values of type '_Bool' might promote to 'int' or 'unsigned int' (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' (see ISO C 99 6.3.1.1.(2)). So add a negative value to the enum; this ensures that '_Bool' promotes to 'int'. */ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; # endif # endif # endif # define bool _Bool #endif /* The other macros must be usable in preprocessor directives. */ #ifdef __cplusplus # define false false # define true true #else # define false 0 # define true 1 #endif #define __bool_true_false_are_defined 1 #endif /* _GL_STDBOOL_H */ gnuastro-0.5/bootstrapped/lib/stdalign.in.h0000644000175000017500000001117013217200021015764 00000000000000/* A substitute for ISO C11 . Copyright 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Paul Eggert and Bruno Haible. */ #ifndef _GL_STDALIGN_H #define _GL_STDALIGN_H /* ISO C11 for platforms that lack it. References: ISO C11 (latest free draft ) sections 6.5.3.4, 6.7.5, 7.15. C++11 (latest free draft ) section 18.10. */ /* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment requirement of a structure member (i.e., slot or field) that is of type TYPE, as an integer constant expression. This differs from GCC's __alignof__ operator, which can yield a better-performing alignment for an object of that type. For example, on x86 with GCC, __alignof__ (double) and __alignof__ (long long) are 8, whereas alignof (double) and alignof (long long) are 4 unless the option '-malign-double' is used. The result cannot be used as a value for an 'enum' constant, if you want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. Include for offsetof. */ #include /* FreeBSD 9.1 , included by and lots of other standard headers, defines conflicting implementations of _Alignas and _Alignof that are no better than ours; override them. */ #undef _Alignas #undef _Alignof /* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023 . */ #if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \ || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9))) # ifdef __cplusplus # if 201103 <= __cplusplus # define _Alignof(type) alignof (type) # else template struct __alignof_helper { char __a; __t __b; }; # define _Alignof(type) offsetof (__alignof_helper, __b) # endif # else # define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) # endif #endif #if ! (defined __cplusplus && 201103 <= __cplusplus) # define alignof _Alignof #endif #define __alignof_is_defined 1 /* alignas (A), also known as _Alignas (A), aligns a variable or type to the alignment A, where A is an integer constant expression. For example: int alignas (8) foo; struct s { int a; int alignas (8) bar; }; aligns the address of FOO and the offset of BAR to be multiples of 8. A should be a power of two that is at least the type's alignment and at most the implementation's alignment limit. This limit is 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable to MSVC through at least version 10.0, A should be an integer constant, as MSVC does not support expressions such as 1 << 3. To be portable to Sun C 5.11, do not align auto variables to anything stricter than their default alignment. The following C11 requirements are not supported here: - If A is zero, alignas has no effect. - alignas can be used multiple times; the strictest one wins. - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 # if defined __cplusplus && 201103 <= __cplusplus # define _Alignas(a) alignas (a) # elif ((defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__) # define _Alignas(a) __attribute__ ((__aligned__ (a))) # elif 1300 <= _MSC_VER # define _Alignas(a) __declspec (align (a)) # endif #endif #if ((defined _Alignas && ! (defined __cplusplus && 201103 <= __cplusplus)) \ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # define alignas _Alignas #endif #if defined alignas || (defined __cplusplus && 201103 <= __cplusplus) # define __alignas_is_defined 1 #endif #endif /* _GL_STDALIGN_H */ gnuastro-0.5/bootstrapped/lib/warn-on-use.h0000644000175000017500000001201013217200022015720 00000000000000/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. This macro is useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system : #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static char ***rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function __attribute__ ((__warning__ (message))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") is like _GL_WARN_ON_USE (function, "string"), except that the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif gnuastro-0.5/bootstrapped/lib/c++defs.h0000644000175000017500000003413013217200020014764 00000000000000/* C++ compatible function declaration macros. Copyright (C) 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* Begin/end the GNULIB_NAMESPACE namespace. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { # define _GL_END_NAMESPACE } #else # define _GL_BEGIN_NAMESPACE # define _GL_END_NAMESPACE #endif /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); Wrapping rpl_func in an object with an inline conversion operator avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is actually used in the program. */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::rpl_func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast(::rpl_func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); Wrapping func in an object with an inline conversion operator avoids a reference to func unless GNULIB_NAMESPACE::func is actually used in the program. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast(::func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ gnuastro-0.5/bootstrapped/lib/arg-nonnull.h0000644000175000017500000000230113217200020016001 00000000000000/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif gnuastro-0.5/bootstrapped/lib/_Noreturn.h0000644000175000017500000000046213217200020015526 00000000000000#if !defined _Noreturn && __STDC_VERSION__ < 201112 # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif gnuastro-0.5/bootstrapped/lib/regex_internal.h0000644000175000017500000006167513217200021016577 00000000000000/* Extended regular expression matching and search library. Copyright (C) 2002-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _REGEX_INTERNAL_H #define _REGEX_INTERNAL_H 1 #include #include #include #include #include #include #include #include #include #include #include #include "intprops.h" #ifdef _LIBC # include # define lock_define(name) __libc_lock_define (, name) # define lock_init(lock) (__libc_lock_init (lock), 0) # define lock_fini(lock) 0 # define lock_lock(lock) __libc_lock_lock (lock) # define lock_unlock(lock) __libc_lock_unlock (lock) #elif defined GNULIB_LOCK && !defined USE_UNLOCKED_IO # include "glthread/lock.h" /* Use gl_lock_define if empty macro arguments are known to work. Otherwise, fall back on less-portable substitutes. */ # if ((defined __GNUC__ && !defined __STRICT_ANSI__) \ || (defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__)) # define lock_define(name) gl_lock_define (, name) # elif USE_POSIX_THREADS # define lock_define(name) pthread_mutex_t name; # elif USE_PTH_THREADS # define lock_define(name) pth_mutex_t name; # elif USE_SOLARIS_THREADS # define lock_define(name) mutex_t name; # elif USE_WINDOWS_THREADS # define lock_define(name) gl_lock_t name; # else # define lock_define(name) # endif # define lock_init(lock) glthread_lock_init (&(lock)) # define lock_fini(lock) glthread_lock_destroy (&(lock)) # define lock_lock(lock) glthread_lock_lock (&(lock)) # define lock_unlock(lock) glthread_lock_unlock (&(lock)) #elif defined GNULIB_PTHREAD && !defined USE_UNLOCKED_IO # include # define lock_define(name) pthread_mutex_t name; # define lock_init(lock) pthread_mutex_init (&(lock), 0) # define lock_fini(lock) pthread_mutex_destroy (&(lock)) # define lock_lock(lock) pthread_mutex_lock (&(lock)) # define lock_unlock(lock) pthread_mutex_unlock (&(lock)) #else # define lock_define(name) # define lock_init(lock) 0 # define lock_fini(lock) ((void) 0) /* The 'dfa' avoids an "unused variable 'dfa'" warning from GCC. */ # define lock_lock(lock) ((void) dfa) # define lock_unlock(lock) ((void) 0) #endif /* In case that the system doesn't have isblank(). */ #if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) # define isblank(ch) ((ch) == ' ' || (ch) == '\t') #endif #ifdef _LIBC # ifndef _RE_DEFINE_LOCALE_FUNCTIONS # define _RE_DEFINE_LOCALE_FUNCTIONS 1 # include # include # endif #endif /* This is for other GNU distributions with internationalized messages. */ #if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include # ifdef _LIBC # undef gettext # define gettext(msgid) \ __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) # endif #else # undef gettext # define gettext(msgid) (msgid) #endif #ifndef gettext_noop /* This define is so xgettext can find the internationalizable strings. */ # define gettext_noop(String) String #endif #if (defined MB_CUR_MAX && HAVE_WCTYPE_H && HAVE_ISWCTYPE) || _LIBC # define RE_ENABLE_I18N #endif #define BE(expr, val) __builtin_expect (expr, val) /* Number of ASCII characters. */ #define ASCII_CHARS 0x80 /* Number of single byte characters. */ #define SBC_MAX (UCHAR_MAX + 1) #define COLL_ELEM_LEN_MAX 8 /* The character which represents newline. */ #define NEWLINE_CHAR '\n' #define WIDE_NEWLINE_CHAR L'\n' /* Rename to standard API for using out of glibc. */ #ifndef _LIBC # undef __wctype # undef __iswctype # define __wctype wctype # define __iswalnum iswalnum # define __iswctype iswctype # define __towlower towlower # define __towupper towupper # define __btowc btowc # define __mbrtowc mbrtowc # define __wcrtomb wcrtomb # define __regfree regfree # define attribute_hidden #endif /* not _LIBC */ #if __GNUC__ < 3 + (__GNUC_MINOR__ < 1) # define __attribute__(arg) #endif #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif /* The type of indexes into strings. This is signed, not size_t, since the API requires indexes to fit in regoff_t anyway, and using signed integers makes the code a bit smaller and presumably faster. The traditional GNU regex implementation uses int for indexes. The POSIX-compatible implementation uses a possibly-wider type. The name 'Idx' is three letters to minimize the hassle of reindenting a lot of regex code that formerly used 'int'. */ typedef regoff_t Idx; #ifdef _REGEX_LARGE_OFFSETS # define IDX_MAX SSIZE_MAX #else # define IDX_MAX INT_MAX #endif /* A hash value, suitable for computing hash tables. */ typedef __re_size_t re_hashval_t; /* An integer used to represent a set of bits. It must be unsigned, and must be at least as wide as unsigned int. */ typedef unsigned long int bitset_word_t; /* All bits set in a bitset_word_t. */ #define BITSET_WORD_MAX ULONG_MAX /* Number of bits in a bitset_word_t. For portability to hosts with padding bits, do not use '(sizeof (bitset_word_t) * CHAR_BIT)'; instead, deduce it directly from BITSET_WORD_MAX. Avoid greater-than-32-bit integers and unconditional shifts by more than 31 bits, as they're not portable. */ #if BITSET_WORD_MAX == 0xffffffffUL # define BITSET_WORD_BITS 32 #elif BITSET_WORD_MAX >> 31 >> 4 == 1 # define BITSET_WORD_BITS 36 #elif BITSET_WORD_MAX >> 31 >> 16 == 1 # define BITSET_WORD_BITS 48 #elif BITSET_WORD_MAX >> 31 >> 28 == 1 # define BITSET_WORD_BITS 60 #elif BITSET_WORD_MAX >> 31 >> 31 >> 1 == 1 # define BITSET_WORD_BITS 64 #elif BITSET_WORD_MAX >> 31 >> 31 >> 9 == 1 # define BITSET_WORD_BITS 72 #elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 3 == 1 # define BITSET_WORD_BITS 128 #elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 == 1 # define BITSET_WORD_BITS 256 #elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 > 1 # define BITSET_WORD_BITS 257 /* any value > SBC_MAX will do here */ # if BITSET_WORD_BITS <= SBC_MAX # error "Invalid SBC_MAX" # endif #else # error "Add case for new bitset_word_t size" #endif /* Number of bitset_word_t values in a bitset_t. */ #define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) typedef bitset_word_t bitset_t[BITSET_WORDS]; typedef bitset_word_t *re_bitset_ptr_t; typedef const bitset_word_t *re_const_bitset_ptr_t; #define PREV_WORD_CONSTRAINT 0x0001 #define PREV_NOTWORD_CONSTRAINT 0x0002 #define NEXT_WORD_CONSTRAINT 0x0004 #define NEXT_NOTWORD_CONSTRAINT 0x0008 #define PREV_NEWLINE_CONSTRAINT 0x0010 #define NEXT_NEWLINE_CONSTRAINT 0x0020 #define PREV_BEGBUF_CONSTRAINT 0x0040 #define NEXT_ENDBUF_CONSTRAINT 0x0080 #define WORD_DELIM_CONSTRAINT 0x0100 #define NOT_WORD_DELIM_CONSTRAINT 0x0200 typedef enum { INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, LINE_FIRST = PREV_NEWLINE_CONSTRAINT, LINE_LAST = NEXT_NEWLINE_CONSTRAINT, BUF_FIRST = PREV_BEGBUF_CONSTRAINT, BUF_LAST = NEXT_ENDBUF_CONSTRAINT, WORD_DELIM = WORD_DELIM_CONSTRAINT, NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT } re_context_type; typedef struct { Idx alloc; Idx nelem; Idx *elems; } re_node_set; typedef enum { NON_TYPE = 0, /* Node type, These are used by token, node, tree. */ CHARACTER = 1, END_OF_RE = 2, SIMPLE_BRACKET = 3, OP_BACK_REF = 4, OP_PERIOD = 5, #ifdef RE_ENABLE_I18N COMPLEX_BRACKET = 6, OP_UTF8_PERIOD = 7, #endif /* RE_ENABLE_I18N */ /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used when the debugger shows values of this enum type. */ #define EPSILON_BIT 8 OP_OPEN_SUBEXP = EPSILON_BIT | 0, OP_CLOSE_SUBEXP = EPSILON_BIT | 1, OP_ALT = EPSILON_BIT | 2, OP_DUP_ASTERISK = EPSILON_BIT | 3, ANCHOR = EPSILON_BIT | 4, /* Tree type, these are used only by tree. */ CONCAT = 16, SUBEXP = 17, /* Token type, these are used only by token. */ OP_DUP_PLUS = 18, OP_DUP_QUESTION, OP_OPEN_BRACKET, OP_CLOSE_BRACKET, OP_CHARSET_RANGE, OP_OPEN_DUP_NUM, OP_CLOSE_DUP_NUM, OP_NON_MATCH_LIST, OP_OPEN_COLL_ELEM, OP_CLOSE_COLL_ELEM, OP_OPEN_EQUIV_CLASS, OP_CLOSE_EQUIV_CLASS, OP_OPEN_CHAR_CLASS, OP_CLOSE_CHAR_CLASS, OP_WORD, OP_NOTWORD, OP_SPACE, OP_NOTSPACE, BACK_SLASH } re_token_type_t; #ifdef RE_ENABLE_I18N typedef struct { /* Multibyte characters. */ wchar_t *mbchars; /* Collating symbols. */ # ifdef _LIBC int32_t *coll_syms; # endif /* Equivalence classes. */ # ifdef _LIBC int32_t *equiv_classes; # endif /* Range expressions. */ # ifdef _LIBC uint32_t *range_starts; uint32_t *range_ends; # else /* not _LIBC */ wchar_t *range_starts; wchar_t *range_ends; # endif /* not _LIBC */ /* Character classes. */ wctype_t *char_classes; /* If this character set is the non-matching list. */ unsigned int non_match : 1; /* # of multibyte characters. */ Idx nmbchars; /* # of collating symbols. */ Idx ncoll_syms; /* # of equivalence classes. */ Idx nequiv_classes; /* # of range expressions. */ Idx nranges; /* # of character classes. */ Idx nchar_classes; } re_charset_t; #endif /* RE_ENABLE_I18N */ typedef struct { union { unsigned char c; /* for CHARACTER */ re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */ #ifdef RE_ENABLE_I18N re_charset_t *mbcset; /* for COMPLEX_BRACKET */ #endif /* RE_ENABLE_I18N */ Idx idx; /* for BACK_REF */ re_context_type ctx_type; /* for ANCHOR */ } opr; #if __GNUC__ >= 2 && !defined __STRICT_ANSI__ re_token_type_t type : 8; #else re_token_type_t type; #endif unsigned int constraint : 10; /* context constraint */ unsigned int duplicated : 1; unsigned int opt_subexp : 1; #ifdef RE_ENABLE_I18N unsigned int accept_mb : 1; /* These 2 bits can be moved into the union if needed (e.g. if running out of bits; move opr.c to opr.c.c and move the flags to opr.c.flags). */ unsigned int mb_partial : 1; #endif unsigned int word_char : 1; } re_token_t; #define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT) struct re_string_t { /* Indicate the raw buffer which is the original string passed as an argument of regexec(), re_search(), etc.. */ const unsigned char *raw_mbs; /* Store the multibyte string. In case of "case insensitive mode" like REG_ICASE, upper cases of the string are stored, otherwise MBS points the same address that RAW_MBS points. */ unsigned char *mbs; #ifdef RE_ENABLE_I18N /* Store the wide character string which is corresponding to MBS. */ wint_t *wcs; Idx *offsets; mbstate_t cur_state; #endif /* Index in RAW_MBS. Each character mbs[i] corresponds to raw_mbs[raw_mbs_idx + i]. */ Idx raw_mbs_idx; /* The length of the valid characters in the buffers. */ Idx valid_len; /* The corresponding number of bytes in raw_mbs array. */ Idx valid_raw_len; /* The length of the buffers MBS and WCS. */ Idx bufs_len; /* The index in MBS, which is updated by re_string_fetch_byte. */ Idx cur_idx; /* length of RAW_MBS array. */ Idx raw_len; /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN. */ Idx len; /* End of the buffer may be shorter than its length in the cases such as re_match_2, re_search_2. Then, we use STOP for end of the buffer instead of LEN. */ Idx raw_stop; /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS. */ Idx stop; /* The context of mbs[0]. We store the context independently, since the context of mbs[0] may be different from raw_mbs[0], which is the beginning of the input string. */ unsigned int tip_context; /* The translation passed as a part of an argument of re_compile_pattern. */ RE_TRANSLATE_TYPE trans; /* Copy of re_dfa_t's word_char. */ re_const_bitset_ptr_t word_char; /* true if REG_ICASE. */ unsigned char icase; unsigned char is_utf8; unsigned char map_notascii; unsigned char mbs_allocated; unsigned char offsets_needed; unsigned char newline_anchor; unsigned char word_ops_used; int mb_cur_max; }; typedef struct re_string_t re_string_t; struct re_dfa_t; typedef struct re_dfa_t re_dfa_t; #ifndef _LIBC # define IS_IN(libc) false #endif static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len); #ifdef RE_ENABLE_I18N static void build_wcs_buffer (re_string_t *pstr); static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr); #endif /* RE_ENABLE_I18N */ static void build_upper_buffer (re_string_t *pstr); static void re_string_translate_buffer (re_string_t *pstr); static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) __attribute__ ((pure)); #define re_string_peek_byte(pstr, offset) \ ((pstr)->mbs[(pstr)->cur_idx + offset]) #define re_string_fetch_byte(pstr) \ ((pstr)->mbs[(pstr)->cur_idx++]) #define re_string_first_byte(pstr, idx) \ ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF) #define re_string_is_single_byte_char(pstr, idx) \ ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \ || (pstr)->wcs[(idx) + 1] != WEOF)) #define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx) #define re_string_cur_idx(pstr) ((pstr)->cur_idx) #define re_string_get_buffer(pstr) ((pstr)->mbs) #define re_string_length(pstr) ((pstr)->len) #define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx]) #define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) #define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) #if defined _LIBC || HAVE_ALLOCA # include #endif #ifndef _LIBC # if HAVE_ALLOCA /* The OS usually guarantees only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely allocate anything larger than 4096 bytes. Also care for the possibility of a few compiler-allocated temporary stack slots. */ # define __libc_use_alloca(n) ((n) < 4032) # else /* alloca is implemented with malloc, so just use malloc. */ # define __libc_use_alloca(n) 0 # undef alloca # define alloca(n) malloc (n) # endif #endif #ifdef _LIBC # define MALLOC_0_IS_NONNULL 1 #elif !defined MALLOC_0_IS_NONNULL # define MALLOC_0_IS_NONNULL 0 #endif #ifndef MAX # define MAX(a,b) ((a) < (b) ? (b) : (a)) #endif #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) #define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) #define re_free(p) free (p) struct bin_tree_t { struct bin_tree_t *parent; struct bin_tree_t *left; struct bin_tree_t *right; struct bin_tree_t *first; struct bin_tree_t *next; re_token_t token; /* 'node_idx' is the index in dfa->nodes, if 'type' == 0. Otherwise 'type' indicate the type of this node. */ Idx node_idx; }; typedef struct bin_tree_t bin_tree_t; #define BIN_TREE_STORAGE_SIZE \ ((1024 - sizeof (void *)) / sizeof (bin_tree_t)) struct bin_tree_storage_t { struct bin_tree_storage_t *next; bin_tree_t data[BIN_TREE_STORAGE_SIZE]; }; typedef struct bin_tree_storage_t bin_tree_storage_t; #define CONTEXT_WORD 1 #define CONTEXT_NEWLINE (CONTEXT_WORD << 1) #define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1) #define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1) #define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD) #define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE) #define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF) #define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF) #define IS_ORDINARY_CONTEXT(c) ((c) == 0) #define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_') #define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR) #define IS_WIDE_WORD_CHAR(ch) (__iswalnum (ch) || (ch) == L'_') #define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR) #define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\ || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context))) #define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \ || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context))) struct re_dfastate_t { re_hashval_t hash; re_node_set nodes; re_node_set non_eps_nodes; re_node_set inveclosure; re_node_set *entrance_nodes; struct re_dfastate_t **trtable, **word_trtable; unsigned int context : 4; unsigned int halt : 1; /* If this state can accept "multi byte". Note that we refer to multibyte characters, and multi character collating elements as "multi byte". */ unsigned int accept_mb : 1; /* If this state has backreference node(s). */ unsigned int has_backref : 1; unsigned int has_constraint : 1; }; typedef struct re_dfastate_t re_dfastate_t; struct re_state_table_entry { Idx num; Idx alloc; re_dfastate_t **array; }; /* Array type used in re_sub_match_last_t and re_sub_match_top_t. */ typedef struct { Idx next_idx; Idx alloc; re_dfastate_t **array; } state_array_t; /* Store information about the node NODE whose type is OP_CLOSE_SUBEXP. */ typedef struct { Idx node; Idx str_idx; /* The position NODE match at. */ state_array_t path; } re_sub_match_last_t; /* Store information about the node NODE whose type is OP_OPEN_SUBEXP. And information about the node, whose type is OP_CLOSE_SUBEXP, corresponding to NODE is stored in LASTS. */ typedef struct { Idx str_idx; Idx node; state_array_t *path; Idx alasts; /* Allocation size of LASTS. */ Idx nlasts; /* The number of LASTS. */ re_sub_match_last_t **lasts; } re_sub_match_top_t; struct re_backref_cache_entry { Idx node; Idx str_idx; Idx subexp_from; Idx subexp_to; char more; char unused; unsigned short int eps_reachable_subexps_map; }; typedef struct { /* The string object corresponding to the input string. */ re_string_t input; #if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) const re_dfa_t *const dfa; #else const re_dfa_t *dfa; #endif /* EFLAGS of the argument of regexec. */ int eflags; /* Where the matching ends. */ Idx match_last; Idx last_node; /* The state log used by the matcher. */ re_dfastate_t **state_log; Idx state_log_top; /* Back reference cache. */ Idx nbkref_ents; Idx abkref_ents; struct re_backref_cache_entry *bkref_ents; int max_mb_elem_len; Idx nsub_tops; Idx asub_tops; re_sub_match_top_t **sub_tops; } re_match_context_t; typedef struct { re_dfastate_t **sifted_states; re_dfastate_t **limited_states; Idx last_node; Idx last_str_idx; re_node_set limits; } re_sift_context_t; struct re_fail_stack_ent_t { Idx idx; Idx node; regmatch_t *regs; re_node_set eps_via_nodes; }; struct re_fail_stack_t { Idx num; Idx alloc; struct re_fail_stack_ent_t *stack; }; struct re_dfa_t { re_token_t *nodes; size_t nodes_alloc; size_t nodes_len; Idx *nexts; Idx *org_indices; re_node_set *edests; re_node_set *eclosures; re_node_set *inveclosures; struct re_state_table_entry *state_table; re_dfastate_t *init_state; re_dfastate_t *init_state_word; re_dfastate_t *init_state_nl; re_dfastate_t *init_state_begbuf; bin_tree_t *str_tree; bin_tree_storage_t *str_tree_storage; re_bitset_ptr_t sb_char; int str_tree_storage_idx; /* number of subexpressions 're_nsub' is in regex_t. */ re_hashval_t state_hash_mask; Idx init_node; Idx nbackref; /* The number of backreference in this dfa. */ /* Bitmap expressing which backreference is used. */ bitset_word_t used_bkref_map; bitset_word_t completed_bkref_map; unsigned int has_plural_match : 1; /* If this dfa has "multibyte node", which is a backreference or a node which can accept multibyte character or multi character collating element. */ unsigned int has_mb_node : 1; unsigned int is_utf8 : 1; unsigned int map_notascii : 1; unsigned int word_ops_used : 1; int mb_cur_max; bitset_t word_char; reg_syntax_t syntax; Idx *subexp_map; #ifdef DEBUG char* re_str; #endif lock_define (lock) }; #define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) #define re_node_set_remove(set,id) \ (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1)) #define re_node_set_empty(p) ((p)->nelem = 0) #define re_node_set_free(set) re_free ((set)->elems) typedef enum { SB_CHAR, MB_CHAR, EQUIV_CLASS, COLL_SYM, CHAR_CLASS } bracket_elem_type; typedef struct { bracket_elem_type type; union { unsigned char ch; unsigned char *name; wchar_t wch; } opr; } bracket_elem_t; /* Functions for bitset_t operation. */ static void bitset_set (bitset_t set, Idx i) { set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; } static void bitset_clear (bitset_t set, Idx i) { set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); } static bool bitset_contain (const bitset_t set, Idx i) { return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; } static void bitset_empty (bitset_t set) { memset (set, '\0', sizeof (bitset_t)); } static void bitset_set_all (bitset_t set) { memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); if (SBC_MAX % BITSET_WORD_BITS != 0) set[BITSET_WORDS - 1] = ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; } static void bitset_copy (bitset_t dest, const bitset_t src) { memcpy (dest, src, sizeof (bitset_t)); } static void __attribute__ ((unused)) bitset_not (bitset_t set) { int bitset_i; for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i) set[bitset_i] = ~set[bitset_i]; if (SBC_MAX % BITSET_WORD_BITS != 0) set[BITSET_WORDS - 1] = ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1) & ~set[BITSET_WORDS - 1]); } static void __attribute__ ((unused)) bitset_merge (bitset_t dest, const bitset_t src) { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) dest[bitset_i] |= src[bitset_i]; } static void __attribute__ ((unused)) bitset_mask (bitset_t dest, const bitset_t src) { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) dest[bitset_i] &= src[bitset_i]; } #ifdef RE_ENABLE_I18N /* Functions for re_string. */ static int __attribute__ ((pure, unused)) re_string_char_size_at (const re_string_t *pstr, Idx idx) { int byte_idx; if (pstr->mb_cur_max == 1) return 1; for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx) if (pstr->wcs[idx + byte_idx] != WEOF) break; return byte_idx; } static wint_t __attribute__ ((pure, unused)) re_string_wchar_at (const re_string_t *pstr, Idx idx) { if (pstr->mb_cur_max == 1) return (wint_t) pstr->mbs[idx]; return (wint_t) pstr->wcs[idx]; } # ifdef _LIBC # include # endif static int __attribute__ ((pure, unused)) re_string_elem_size_at (const re_string_t *pstr, Idx idx) { # ifdef _LIBC const unsigned char *p, *extra; const int32_t *table, *indirect; uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); p = pstr->mbs + idx; findidx (table, indirect, extra, &p, pstr->len - idx); return p - pstr->mbs - idx; } else # endif /* _LIBC */ return 1; } #endif /* RE_ENABLE_I18N */ #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_MINOR__ # define __GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #if __GNUC_PREREQ (3,4) # undef __attribute_warn_unused_result__ # define __attribute_warn_unused_result__ \ __attribute__ ((__warn_unused_result__)) #else # define __attribute_warn_unused_result__ /* empty */ #endif #ifndef FALLTHROUGH # if __GNUC__ < 7 # define FALLTHROUGH ((void) 0) # else # define FALLTHROUGH __attribute__ ((__fallthrough__)) # endif #endif #endif /* _REGEX_INTERNAL_H */ gnuastro-0.5/bootstrapped/lib/regex.h0000644000175000017500000006013513217200021014671 00000000000000/* Definitions for data structures and routines for the regular expression library. Copyright (C) 1985, 1989-1993, 1995-1998, 2000-2003, 2005-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _REGEX_H #define _REGEX_H 1 #include /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* Define __USE_GNU to declare GNU extensions that violate the POSIX name space rules. */ #ifdef _GNU_SOURCE # define __USE_GNU 1 #endif #ifdef _REGEX_LARGE_OFFSETS /* Use types and values that are wide enough to represent signed and unsigned byte offsets in memory. This currently works only when the regex code is used outside of the GNU C library; it is not yet supported within glibc itself, and glibc users should not define _REGEX_LARGE_OFFSETS. */ /* The type of object sizes. */ typedef size_t __re_size_t; /* The type of object sizes, in places where the traditional code uses unsigned long int. */ typedef size_t __re_long_size_t; #else /* The traditional GNU regex implementation mishandles strings longer than INT_MAX. */ typedef unsigned int __re_size_t; typedef unsigned long int __re_long_size_t; #endif /* The following two types have to be signed and unsigned integer type wide enough to hold a value of a pointer. For most ANSI compilers ptrdiff_t and size_t should be likely OK. Still size of these two types is 2 for Microsoft C. Ugh... */ typedef long int s_reg_t; typedef unsigned long int active_reg_t; /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax remains the value 0. The bits are given in alphabetical order, and the definitions shifted by one from the previous bit; thus, when we add or remove a bit, only one other definition need change. */ typedef unsigned long int reg_syntax_t; #ifdef __USE_GNU /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ # define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. If set, then \+ and \? are operators and + and ? are literals. */ # define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) /* If this bit is set, then character classes are supported. They are: [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. If not set, then character classes are not supported. */ # define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) /* If this bit is set, then ^ and $ are always anchors (outside bracket expressions, of course). If this bit is not set, then it depends: ^ is an anchor if it is at the beginning of a regular expression or after an open-group or an alternation operator; $ is an anchor if it is at the end of a regular expression, or before a close-group or an alternation operator. This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because POSIX draft 11.2 says that * etc. in leading positions is undefined. We already implemented a previous draft which made those constructs invalid, though, so we haven't changed the code back. */ # define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) /* If this bit is set, then special characters are always special regardless of where they are in the pattern. If this bit is not set, then special characters are special only in some contexts; otherwise they are ordinary. Specifically, * + ? and intervals are only special when not after the beginning, open-group, or alternation operator. */ # define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) /* If this bit is set, then *, +, ?, and { cannot be first in an re or immediately after an alternation or begin-group operator. */ # define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) /* If this bit is set, then . matches newline. If not set, then it doesn't. */ # define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) /* If this bit is set, then . doesn't match NUL. If not set, then it does. */ # define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) /* If this bit is set, nonmatching lists [^...] do not match newline. If not set, they do. */ # define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) /* If this bit is set, either \{...\} or {...} defines an interval, depending on RE_NO_BK_BRACES. If not set, \{, \}, {, and } are literals. */ # define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) /* If this bit is set, +, ? and | aren't recognized as operators. If not set, they are. */ # define RE_LIMITED_OPS (RE_INTERVALS << 1) /* If this bit is set, newline is an alternation operator. If not set, newline is literal. */ # define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) /* If this bit is set, then '{...}' defines an interval, and \{ and \} are literals. If not set, then '\{...\}' defines an interval. */ # define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) /* If this bit is set, (...) defines a group, and \( and \) are literals. If not set, \(...\) defines a group, and ( and ) are literals. */ # define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) /* If this bit is set, then \ matches . If not set, then \ is a back-reference. */ # define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) /* If this bit is set, then | is an alternation operator, and \| is literal. If not set, then \| is an alternation operator, and | is literal. */ # define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) /* If this bit is set, then an ending range point collating higher than the starting range point, as in [z-a], is invalid. If not set, then when ending range point collates higher than the starting range point, the range is ignored. */ # define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) /* If this bit is set, then an unmatched ) is ordinary. If not set, then an unmatched ) is invalid. */ # define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) /* If this bit is set, succeed as soon as we match the whole pattern, without further backtracking. */ # define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) /* If this bit is set, do not process the GNU regex operators. If not set, then the GNU regex operators are recognized. */ # define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) /* If this bit is set, turn on internal regex debugging. If not set, and debugging was on, turn it off. This only works if regex.c is compiled -DDEBUG. We define this bit always, so that all that's needed to turn on debugging is to recompile regex.c; the calling code can always have this bit set, and it won't affect anything in the normal case. */ # define RE_DEBUG (RE_NO_GNU_OPS << 1) /* If this bit is set, a syntactically invalid interval is treated as a string of ordinary characters. For example, the ERE 'a{1' is treated as 'a\{1'. */ # define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ # define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) /* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only for ^, because it is difficult to scan the regex backwards to find whether ^ should be special. */ # define RE_CARET_ANCHORS_HERE (RE_ICASE << 1) /* If this bit is set, then \{ cannot be first in a regex or immediately after an alternation, open-group or \} operator. */ # define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1) /* If this bit is set, then no_sub will be set to 1 during re_compile_pattern. */ # define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1) #endif /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect already-compiled regexps. */ extern reg_syntax_t re_syntax_options; #ifdef __USE_GNU /* Define combinations of the above bits for the standard possibilities. (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ # define RE_SYNTAX_EMACS 0 # define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ | RE_CHAR_CLASSES \ | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) # define RE_SYNTAX_GNU_AWK \ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INVALID_INTERVAL_ORD) \ & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS \ | RE_CONTEXT_INVALID_OPS )) # define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INTERVALS | RE_NO_GNU_OPS \ | RE_INVALID_INTERVAL_ORD) # define RE_SYNTAX_GREP \ ((RE_SYNTAX_POSIX_BASIC | RE_NEWLINE_ALT) \ & ~(RE_CONTEXT_INVALID_DUP | RE_DOT_NOT_NULL)) # define RE_SYNTAX_EGREP \ ((RE_SYNTAX_POSIX_EXTENDED | RE_INVALID_INTERVAL_ORD | RE_NEWLINE_ALT) \ & ~(RE_CONTEXT_INVALID_OPS | RE_DOT_NOT_NULL)) /* POSIX grep -E behavior is no longer incompatible with GNU. */ # define RE_SYNTAX_POSIX_EGREP \ RE_SYNTAX_EGREP /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ # define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC # define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ # define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) # define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ # define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) # define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is removed and RE_NO_BK_REFS is added. */ # define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) /* [[[end syntaxes]]] */ /* Maximum number of duplicates an interval can allow. POSIX-conforming systems might define this in , but we want our value, so remove any previous define. */ # ifdef _REGEX_INCLUDE_LIMITS_H # include # endif # ifdef RE_DUP_MAX # undef RE_DUP_MAX # endif /* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored the counter as a 2-byte signed integer. This is no longer true, so RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to ((SIZE_MAX - 9) / 10) if _REGEX_LARGE_OFFSETS is defined. However, there would be a huge performance problem if someone actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains its historical value. */ # define RE_DUP_MAX (0x7fff) #endif /* POSIX 'cflags' bits (i.e., information for 'regcomp'). */ /* If this bit is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. */ #define REG_EXTENDED 1 /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define REG_ICASE (1 << 1) /* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */ #define REG_NEWLINE (1 << 2) /* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */ #define REG_NOSUB (1 << 3) /* POSIX 'eflags' bits (i.e., information for regexec). */ /* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */ #define REG_NOTBOL 1 /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) /* Use PMATCH[0] to delimit the start and end of the search in the buffer. */ #define REG_STARTEND (1 << 2) /* If any error codes are removed, changed, or added, update the '__re_error_msgid' table in regcomp.c. */ typedef enum { _REG_ENOSYS = -1, /* This will never happen for this implementation. */ _REG_NOERROR = 0, /* Success. */ _REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the standard.) */ _REG_BADPAT, /* Invalid pattern. */ _REG_ECOLLATE, /* Invalid collating element. */ _REG_ECTYPE, /* Invalid character class name. */ _REG_EESCAPE, /* Trailing backslash. */ _REG_ESUBREG, /* Invalid back reference. */ _REG_EBRACK, /* Unmatched left bracket. */ _REG_EPAREN, /* Parenthesis imbalance. */ _REG_EBRACE, /* Unmatched \{. */ _REG_BADBR, /* Invalid contents of \{\}. */ _REG_ERANGE, /* Invalid range end. */ _REG_ESPACE, /* Ran out of memory. */ _REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ _REG_EEND, /* Premature end. */ _REG_ESIZE, /* Too large (e.g., repeat count too large). */ _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; #if defined _XOPEN_SOURCE || defined __USE_XOPEN2K # define REG_ENOSYS _REG_ENOSYS #endif #define REG_NOERROR _REG_NOERROR #define REG_NOMATCH _REG_NOMATCH #define REG_BADPAT _REG_BADPAT #define REG_ECOLLATE _REG_ECOLLATE #define REG_ECTYPE _REG_ECTYPE #define REG_EESCAPE _REG_EESCAPE #define REG_ESUBREG _REG_ESUBREG #define REG_EBRACK _REG_EBRACK #define REG_EPAREN _REG_EPAREN #define REG_EBRACE _REG_EBRACE #define REG_BADBR _REG_BADBR #define REG_ERANGE _REG_ERANGE #define REG_ESPACE _REG_ESPACE #define REG_BADRPT _REG_BADRPT #define REG_EEND _REG_EEND #define REG_ESIZE _REG_ESIZE #define REG_ERPAREN _REG_ERPAREN /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields 'buffer', 'allocated', 'fastmap', and 'translate' can be set. After the pattern has been compiled, the fields 're_nsub', 'not_bol' and 'not_eol' are available. All other fields are private to the regex routines. */ #ifndef RE_TRANSLATE_TYPE # define __RE_TRANSLATE_TYPE unsigned char * # ifdef __USE_GNU # define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE # endif #endif #ifdef __USE_GNU # define __REPB_PREFIX(name) name #else # define __REPB_PREFIX(name) __##name #endif struct re_pattern_buffer { /* Space that holds the compiled pattern. The type 'struct re_dfa_t' is private and is not declared here. */ struct re_dfa_t *__REPB_PREFIX(buffer); /* Number of bytes to which 'buffer' points. */ __re_long_size_t __REPB_PREFIX(allocated); /* Number of bytes actually used in 'buffer'. */ __re_long_size_t __REPB_PREFIX(used); /* Syntax setting with which the pattern was compiled. */ reg_syntax_t __REPB_PREFIX(syntax); /* Pointer to a fastmap, if any, otherwise zero. re_search uses the fastmap, if there is one, to skip over impossible starting points for matches. */ char *__REPB_PREFIX(fastmap); /* Either a translate table to apply to all characters before comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ __RE_TRANSLATE_TYPE __REPB_PREFIX(translate); /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in 're_search_2', to see whether or not we should use the fastmap, so we don't set this absolutely perfectly; see 're_compile_fastmap' (the "duplicate" case). */ unsigned __REPB_PREFIX(can_be_null) : 1; /* If REGS_UNALLOCATED, allocate space in the 'regs' structure for 'max (RE_NREGS, re_nsub + 1)' groups. If REGS_REALLOCATE, reallocate space if necessary. If REGS_FIXED, use what's there. */ #ifdef __USE_GNU # define REGS_UNALLOCATED 0 # define REGS_REALLOCATE 1 # define REGS_FIXED 2 #endif unsigned __REPB_PREFIX(regs_allocated) : 2; /* Set to zero when 're_compile_pattern' compiles a pattern; set to one by 're_compile_fastmap' if it updates the fastmap. */ unsigned __REPB_PREFIX(fastmap_accurate) : 1; /* If set, 're_match_2' does not return information about subexpressions. */ unsigned __REPB_PREFIX(no_sub) : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned __REPB_PREFIX(not_bol) : 1; /* Similarly for an end-of-line anchor. */ unsigned __REPB_PREFIX(not_eol) : 1; /* If true, an anchor at a newline matches. */ unsigned __REPB_PREFIX(newline_anchor) : 1; }; typedef struct re_pattern_buffer regex_t; /* Type for byte offsets within the string. POSIX mandates this. */ #ifdef _REGEX_LARGE_OFFSETS /* POSIX 1003.1-2008 requires that regoff_t be at least as wide as ptrdiff_t and ssize_t. We don't know of any hosts where ptrdiff_t is wider than ssize_t, so ssize_t is safe. ptrdiff_t is not visible here, so use ssize_t. */ typedef ssize_t regoff_t; #else /* The traditional GNU regex implementation mishandles strings longer than INT_MAX. */ typedef int regoff_t; #endif #ifdef __USE_GNU /* This is the structure we store register match data in. See regex.texinfo for a full description of what registers match. */ struct re_registers { __re_size_t num_regs; regoff_t *start; regoff_t *end; }; /* If 'regs_allocated' is REGS_UNALLOCATED in the pattern buffer, 're_match_2' returns information about at least this many registers the first time a 'regs' structure is passed. */ # ifndef RE_NREGS # define RE_NREGS 30 # endif #endif /* POSIX specification for registers. Aside from the different names than 're_registers', POSIX uses an array of structures, instead of a structure of arrays. */ typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ } regmatch_t; /* Declarations for routines. */ #ifdef __USE_GNU /* Sets the current default syntax to SYNTAX, and return the old syntax. You can also simply assign to the 're_syntax_options' variable. */ extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); /* Compile the regular expression PATTERN, with length LENGTH and syntax given by the global 're_syntax_options', into the buffer BUFFER. Return NULL if successful, and an error string if not. To free the allocated storage, you must call 'regfree' on BUFFER. Note that the translate table must either have been initialized by 'regcomp', with a malloc'ed value, or set to NULL before calling 'regfree'. */ extern const char *re_compile_pattern (const char *__pattern, size_t __length, struct re_pattern_buffer *__buffer); /* Compile a fastmap for the compiled pattern in BUFFER; used to accelerate searches. Return 0 if successful and -2 if was an internal error. */ extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); /* Search in the string STRING (with length LENGTH) for the pattern compiled into BUFFER. Start searching at position START, for RANGE characters. Return the starting position of the match, -1 for no match, or -2 for an internal error. Also return register information in REGS (if REGS and BUFFER->no_sub are nonzero). */ extern regoff_t re_search (struct re_pattern_buffer *__buffer, const char *__String, regoff_t __length, regoff_t __start, regoff_t __range, struct re_registers *__regs); /* Like 're_search', but search in the concatenation of STRING1 and STRING2. Also, stop searching at index START + STOP. */ extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer, const char *__string1, regoff_t __length1, const char *__string2, regoff_t __length2, regoff_t __start, regoff_t __range, struct re_registers *__regs, regoff_t __stop); /* Like 're_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */ extern regoff_t re_match (struct re_pattern_buffer *__buffer, const char *__String, regoff_t __length, regoff_t __start, struct re_registers *__regs); /* Relates to 're_match' as 're_search_2' relates to 're_search'. */ extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, const char *__string1, regoff_t __length1, const char *__string2, regoff_t __length2, regoff_t __start, struct re_registers *__regs, regoff_t __stop); /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least 'NUM_REGS * sizeof (regoff_t)' bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using BUFFER will allocate its own register data, without freeing the old data. */ extern void re_set_registers (struct re_pattern_buffer *__buffer, struct re_registers *__regs, __re_size_t __num_regs, regoff_t *__starts, regoff_t *__ends); #endif /* Use GNU */ #if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC) # ifndef _CRAY /* 4.2 bsd compatibility. */ extern char *re_comp (const char *); extern int re_exec (const char *); # endif #endif /* GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words, so pick a different name. */ #ifndef _Restrict_ # if 199901L <= __STDC_VERSION__ # define _Restrict_ restrict # elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) # define _Restrict_ __restrict # else # define _Restrict_ # endif #endif /* gcc 3.1 and up support the [restrict] syntax. Don't trust sys/cdefs.h's definition of __restrict_arr, though, as it mishandles gcc -ansi -pedantic. */ #ifndef _Restrict_arr_ # if ((199901L <= __STDC_VERSION__ \ || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ && !defined __STRICT_ANSI__)) \ && !defined __GNUG__) # define _Restrict_arr_ _Restrict_ # else # define _Restrict_arr_ # endif #endif /* POSIX compatibility. */ extern int regcomp (regex_t *_Restrict_ __preg, const char *_Restrict_ __pattern, int __cflags); extern int regexec (const regex_t *_Restrict_ __preg, const char *_Restrict_ __String, size_t __nmatch, regmatch_t __pmatch[_Restrict_arr_], int __eflags); extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, char *_Restrict_ __errbuf, size_t __errbuf_size); extern void regfree (regex_t *__preg); #ifdef __cplusplus } #endif /* C++ */ #endif /* regex.h */ gnuastro-0.5/bootstrapped/lib/rawmemchr.valgrind0000644000175000017500000000040313217200021017113 00000000000000# Suppress a valgrind message about use of uninitialized memory in rawmemchr(). # This use is OK because it provides only a speedup. { rawmemchr-value4 Memcheck:Value4 fun:rawmemchr } { rawmemchr-value8 Memcheck:Value8 fun:rawmemchr } gnuastro-0.5/bootstrapped/lib/nproc.h0000644000175000017500000000331213217200021014672 00000000000000/* Detect the number of processors. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Glen Lenker and Bruno Haible. */ /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* A "processor" in this context means a thread execution unit, that is either - an execution core in a (possibly multi-core) chip, in a (possibly multi- chip) module, in a single computer, or - a thread execution unit inside a core (hyper-threading, see ). Which of the two definitions is used, is unspecified. */ enum nproc_query { NPROC_ALL, /* total number of processors */ NPROC_CURRENT, /* processors available to the current process */ NPROC_CURRENT_OVERRIDABLE /* likewise, but overridable through the OMP_NUM_THREADS environment variable */ }; /* Return the total number of processors. The result is guaranteed to be at least 1. */ extern unsigned long int num_processors (enum nproc_query query); #ifdef __cplusplus } #endif /* C++ */ gnuastro-0.5/bootstrapped/lib/msvc-nothrow.h0000644000175000017500000000301113217200021016213 00000000000000/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _MSVC_NOTHROW_H #define _MSVC_NOTHROW_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines wrappers that turn such an invalid parameter notification into an error code. */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ # include # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Override _get_osfhandle. */ extern intptr_t _gl_nothrow_get_osfhandle (int fd); # define _get_osfhandle _gl_nothrow_get_osfhandle # endif #endif #endif /* _MSVC_NOTHROW_H */ gnuastro-0.5/bootstrapped/lib/msvc-inval.h0000644000175000017500000002114013217200021015627 00000000000000/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _MSVC_INVAL_H #define _MSVC_INVAL_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines macros that turn such an invalid parameter notification into a non-local exit. An error code can then be produced at the target of this exit. You can thus write code like TRY_MSVC_INVAL { } CATCH_MSVC_INVAL { } DONE_MSVC_INVAL; This entire block expands to a single statement. The handling of invalid parameters can be done in three ways: * The default way, which is reasonable for programs (not libraries): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) * The way for libraries that make "hairy" calls (like close(-1), or fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) * The way for libraries that make no "hairy" calls: AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) */ #define DEFAULT_HANDLING 0 #define HAIRY_LIBRARY_HANDLING 1 #define SANE_LIBRARY_HANDLING 2 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* A native Windows platform with the "invalid parameter handler" concept, and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING /* Default handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that just returns. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) # else /* Handling for hairy libraries. */ # include /* Gnulib can define its own status codes, as described in the page "Raising Software Exceptions" on microsoft.com . Our status codes are composed of - 0xE0000000, mandatory for all user-defined status codes, - 0x474E550, a API identifier ("GNU"), - 0, 1, 2, ..., used to distinguish different status codes from the same API. */ # define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) # if defined _MSC_VER /* A compiler that supports __try/__except, as described in the page "try-except statement" on microsoft.com . With __try/__except, we can use the multithread-safe exception handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ __try # define CATCH_MSVC_INVAL \ __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ ? EXCEPTION_EXECUTE_HANDLER \ : EXCEPTION_CONTINUE_SEARCH) # define DONE_MSVC_INVAL \ } \ while (0) # else /* Any compiler. We can only use setjmp/longjmp. */ # include # ifdef __cplusplus extern "C" { # endif struct gl_msvc_inval_per_thread { /* The restart that will resume execution at the code between CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ jmp_buf restart; /* Tells whether the contents of restart is valid. */ int restart_valid; }; /* Ensure that the invalid parameter handler in installed that passes control to the gl_msvc_inval_restart if it is valid, or raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); /* Return a pointer to the per-thread data for the current thread. */ extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ struct gl_msvc_inval_per_thread *msvc_inval_current; \ gl_msvc_inval_ensure_handler (); \ msvc_inval_current = gl_msvc_inval_current (); \ /* First, initialize gl_msvc_inval_restart. */ \ if (setjmp (msvc_inval_current->restart) == 0) \ { \ /* Then, mark it as valid. */ \ msvc_inval_current->restart_valid = 1; # define CATCH_MSVC_INVAL \ /* Execution completed. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; \ } \ else \ { \ /* Execution triggered an invalid parameter notification. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; # define DONE_MSVC_INVAL \ } \ } \ while (0) # endif # endif #else /* A platform that does not need to the invalid parameter handler, or when SANE_LIBRARY_HANDLING is desired. */ /* The braces here avoid GCC warnings like "warning: suggest explicit braces to avoid ambiguous 'else'". */ # define TRY_MSVC_INVAL \ do \ { \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) #endif #endif /* _MSVC_INVAL_H */ gnuastro-0.5/bootstrapped/lib/memchr.valgrind0000644000175000017500000000065213217200021016407 00000000000000# Suppress a valgrind message about use of uninitialized memory in memchr(). # POSIX states that when the character is found, memchr must not read extra # bytes in an overestimated length (for example, where memchr is used to # implement strnlen). However, we use a safe word read to provide a speedup. { memchr-value4 Memcheck:Value4 fun:rpl_memchr } { memchr-value8 Memcheck:Value8 fun:rpl_memchr } gnuastro-0.5/bootstrapped/lib/mbtowc-impl.h0000644000175000017500000000262713217200021016013 00000000000000/* Convert multibyte character to wide character. Copyright (C) 2011-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2011. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* We don't need a static internal state, because the encoding is not state dependent, and when mbrtowc returns (size_t)(-2). we throw the result away. */ int mbtowc (wchar_t *pwc, const char *s, size_t n) { if (s == NULL) return 0; else { mbstate_t state; wchar_t wc; size_t result; memset (&state, 0, sizeof (mbstate_t)); result = mbrtowc (&wc, s, n, &state); if (result == (size_t)-1 || result == (size_t)-2) { errno = EILSEQ; return -1; } if (pwc != NULL) *pwc = wc; return (wc == 0 ? 0 : result); } } gnuastro-0.5/bootstrapped/lib/mbchar.h0000644000175000017500000003342513217200021015015 00000000000000/* Multibyte character data type. Copyright (C) 2001, 2005-2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible . */ /* A multibyte character is a short subsequence of a char* string, representing a single wide character. We use multibyte characters instead of wide characters because of the following goals: 1) correct multibyte handling, i.e. operate according to the LC_CTYPE locale, 2) ease of maintenance, i.e. the maintainer needs not know all details of the ISO C 99 standard, 3) don't fail grossly if the input is not in the encoding set by the locale, because often different encodings are in use in the same countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...), 4) fast in the case of ASCII characters, 5) portability, i.e. don't make unportable assumptions about wchar_t. Multibyte characters are only accessed through the mb* macros. mb_ptr (mbc) return a pointer to the beginning of the multibyte sequence. mb_len (mbc) returns the number of bytes occupied by the multibyte sequence. Always > 0. mb_iseq (mbc, sc) returns true if mbc is the standard ASCII character sc. mb_isnul (mbc) returns true if mbc is the nul character. mb_cmp (mbc1, mbc2) returns a positive, zero, or negative value depending on whether mbc1 sorts after, same or before mbc2. mb_casecmp (mbc1, mbc2) returns a positive, zero, or negative value depending on whether mbc1 sorts after, same or before mbc2, modulo upper/lowercase conversion. mb_equal (mbc1, mbc2) returns true if mbc1 and mbc2 are equal. mb_caseequal (mbc1, mbc2) returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion. mb_isalnum (mbc) returns true if mbc is alphanumeric. mb_isalpha (mbc) returns true if mbc is alphabetic. mb_isascii(mbc) returns true if mbc is plain ASCII. mb_isblank (mbc) returns true if mbc is a blank. mb_iscntrl (mbc) returns true if mbc is a control character. mb_isdigit (mbc) returns true if mbc is a decimal digit. mb_isgraph (mbc) returns true if mbc is a graphic character. mb_islower (mbc) returns true if mbc is lowercase. mb_isprint (mbc) returns true if mbc is a printable character. mb_ispunct (mbc) returns true if mbc is a punctuation character. mb_isspace (mbc) returns true if mbc is a space character. mb_isupper (mbc) returns true if mbc is uppercase. mb_isxdigit (mbc) returns true if mbc is a hexadecimal digit. mb_width (mbc) returns the number of columns on the output device occupied by mbc. Always >= 0. mb_putc (mbc, stream) outputs mbc on stream, a byte oriented FILE stream opened for output. mb_setascii (&mbc, sc) assigns the standard ASCII character sc to mbc. mb_copy (&destmbc, &srcmbc) copies srcmbc to destmbc. Here are the function prototypes of the macros. extern const char * mb_ptr (const mbchar_t mbc); extern size_t mb_len (const mbchar_t mbc); extern bool mb_iseq (const mbchar_t mbc, char sc); extern bool mb_isnul (const mbchar_t mbc); extern int mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2); extern int mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2); extern bool mb_equal (const mbchar_t mbc1, const mbchar_t mbc2); extern bool mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2); extern bool mb_isalnum (const mbchar_t mbc); extern bool mb_isalpha (const mbchar_t mbc); extern bool mb_isascii (const mbchar_t mbc); extern bool mb_isblank (const mbchar_t mbc); extern bool mb_iscntrl (const mbchar_t mbc); extern bool mb_isdigit (const mbchar_t mbc); extern bool mb_isgraph (const mbchar_t mbc); extern bool mb_islower (const mbchar_t mbc); extern bool mb_isprint (const mbchar_t mbc); extern bool mb_ispunct (const mbchar_t mbc); extern bool mb_isspace (const mbchar_t mbc); extern bool mb_isupper (const mbchar_t mbc); extern bool mb_isxdigit (const mbchar_t mbc); extern int mb_width (const mbchar_t mbc); extern void mb_putc (const mbchar_t mbc, FILE *stream); extern void mb_setascii (mbchar_t *new, char sc); extern void mb_copy (mbchar_t *new, const mbchar_t *old); */ #ifndef _MBCHAR_H #define _MBCHAR_H 1 #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.1 has a bug: and must be included before . */ #include #include #include #include #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef MBCHAR_INLINE # define MBCHAR_INLINE _GL_INLINE #endif #define MBCHAR_BUF_SIZE 24 struct mbchar { const char *ptr; /* pointer to current character */ size_t bytes; /* number of bytes of current character, > 0 */ bool wc_valid; /* true if wc is a valid wide character */ wchar_t wc; /* if wc_valid: the current character */ char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */ }; /* EOF (not a real character) is represented with bytes = 0 and wc_valid = false. */ typedef struct mbchar mbchar_t; /* Access the current character. */ #define mb_ptr(mbc) ((mbc).ptr) #define mb_len(mbc) ((mbc).bytes) /* Comparison of characters. */ #define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc)) #define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0) #define mb_cmp(mbc1, mbc2) \ ((mbc1).wc_valid \ ? ((mbc2).wc_valid \ ? (int) (mbc1).wc - (int) (mbc2).wc \ : -1) \ : ((mbc2).wc_valid \ ? 1 \ : (mbc1).bytes == (mbc2).bytes \ ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ : (mbc1).bytes < (mbc2).bytes \ ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) #define mb_casecmp(mbc1, mbc2) \ ((mbc1).wc_valid \ ? ((mbc2).wc_valid \ ? (int) towlower ((mbc1).wc) - (int) towlower ((mbc2).wc) \ : -1) \ : ((mbc2).wc_valid \ ? 1 \ : (mbc1).bytes == (mbc2).bytes \ ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ : (mbc1).bytes < (mbc2).bytes \ ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) #define mb_equal(mbc1, mbc2) \ ((mbc1).wc_valid && (mbc2).wc_valid \ ? (mbc1).wc == (mbc2).wc \ : (mbc1).bytes == (mbc2).bytes \ && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) #define mb_caseequal(mbc1, mbc2) \ ((mbc1).wc_valid && (mbc2).wc_valid \ ? towlower ((mbc1).wc) == towlower ((mbc2).wc) \ : (mbc1).bytes == (mbc2).bytes \ && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) /* , classification. */ #define mb_isascii(mbc) \ ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127) #define mb_isalnum(mbc) ((mbc).wc_valid && iswalnum ((mbc).wc)) #define mb_isalpha(mbc) ((mbc).wc_valid && iswalpha ((mbc).wc)) #define mb_isblank(mbc) ((mbc).wc_valid && iswblank ((mbc).wc)) #define mb_iscntrl(mbc) ((mbc).wc_valid && iswcntrl ((mbc).wc)) #define mb_isdigit(mbc) ((mbc).wc_valid && iswdigit ((mbc).wc)) #define mb_isgraph(mbc) ((mbc).wc_valid && iswgraph ((mbc).wc)) #define mb_islower(mbc) ((mbc).wc_valid && iswlower ((mbc).wc)) #define mb_isprint(mbc) ((mbc).wc_valid && iswprint ((mbc).wc)) #define mb_ispunct(mbc) ((mbc).wc_valid && iswpunct ((mbc).wc)) #define mb_isspace(mbc) ((mbc).wc_valid && iswspace ((mbc).wc)) #define mb_isupper(mbc) ((mbc).wc_valid && iswupper ((mbc).wc)) #define mb_isxdigit(mbc) ((mbc).wc_valid && iswxdigit ((mbc).wc)) /* Extra function. */ /* Unprintable characters appear as a small box of width 1. */ #define MB_UNPRINTABLE_WIDTH 1 MBCHAR_INLINE int mb_width_aux (wint_t wc) { int w = wcwidth (wc); /* For unprintable characters, arbitrarily return 0 for control characters and MB_UNPRINTABLE_WIDTH otherwise. */ return (w >= 0 ? w : iswcntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH); } #define mb_width(mbc) \ ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH) /* Output. */ #define mb_putc(mbc, stream) fwrite ((mbc).ptr, 1, (mbc).bytes, (stream)) /* Assignment. */ #define mb_setascii(mbc, sc) \ ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \ (mbc)->wc = (mbc)->buf[0] = (sc)) /* Copying a character. */ MBCHAR_INLINE void mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc) { if (old_mbc->ptr == &old_mbc->buf[0]) { memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes); new_mbc->ptr = &new_mbc->buf[0]; } else new_mbc->ptr = old_mbc->ptr; new_mbc->bytes = old_mbc->bytes; if ((new_mbc->wc_valid = old_mbc->wc_valid)) new_mbc->wc = old_mbc->wc; } /* is_basic(c) tests whether the single-byte character c is in the ISO C "basic character set". This is a convenience function, and is in this file only to share code between mbiter_multi.h and mbfile_multi.h. */ #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) /* The character set is ISO-646, not EBCDIC. */ # define IS_BASIC_ASCII 1 extern const unsigned int is_basic_table[]; MBCHAR_INLINE bool is_basic (char c) { return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31)) & 1; } #else MBCHAR_INLINE bool is_basic (char c) { switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': return 1; default: return 0; } } #endif _GL_INLINE_HEADER_END #endif /* _MBCHAR_H */ gnuastro-0.5/bootstrapped/lib/math.in.h0000644000175000017500000020755413217200021015125 00000000000000/* A GNU-like . Copyright (C) 2002-2003, 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _@GUARD_PREFIX@_MATH_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ #ifndef _@GUARD_PREFIX@_MATH_H #define _@GUARD_PREFIX@_MATH_H /* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in . */ #if defined __VMS && ! defined NAN # include #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_MATH_INLINE # define _GL_MATH_INLINE _GL_INLINE #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #ifdef __cplusplus /* Helper macros to define type-generic function FUNC as overloaded functions, rather than as macros like in C. POSIX declares these with an argument of real-floating (that is, one of float, double, or long double). */ # define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \ static inline int \ _gl_cxx_ ## func ## f (float f) \ { \ return func (f); \ } \ static inline int \ _gl_cxx_ ## func ## d (double d) \ { \ return func (d); \ } \ static inline int \ _gl_cxx_ ## func ## l (long double l) \ { \ return func (l); \ } # define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \ _GL_BEGIN_NAMESPACE \ inline int \ func (float f) \ { \ return _gl_cxx_ ## func ## f (f); \ } \ inline int \ func (double d) \ { \ return _gl_cxx_ ## func ## d (d); \ } \ inline int \ func (long double l) \ { \ return _gl_cxx_ ## func ## l (l); \ } \ _GL_END_NAMESPACE #endif /* Helper macros to define a portability warning for the classification macro FUNC called with VALUE. POSIX declares the classification macros with an argument of real-floating (that is, one of float, double, or long double). */ #define _GL_WARN_REAL_FLOATING_DECL(func) \ _GL_MATH_INLINE int \ rpl_ ## func ## f (float f) \ { \ return func (f); \ } \ _GL_MATH_INLINE int \ rpl_ ## func ## d (double d) \ { \ return func (d); \ } \ _GL_MATH_INLINE int \ rpl_ ## func ## l (long double l) \ { \ return func (l); \ } \ _GL_WARN_ON_USE (rpl_ ## func ## f, #func " is unportable - " \ "use gnulib module " #func " for portability"); \ _GL_WARN_ON_USE (rpl_ ## func ## d, #func " is unportable - " \ "use gnulib module " #func " for portability"); \ _GL_WARN_ON_USE (rpl_ ## func ## l, #func " is unportable - " \ "use gnulib module " #func " for portability") #define _GL_WARN_REAL_FLOATING_IMPL(func, value) \ (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value) \ : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value) \ : rpl_ ## func ## l (value)) #if @REPLACE_ITOLD@ /* Pull in a function that fixes the 'int' to 'long double' conversion of glibc 2.7. */ _GL_EXTERN_C void _Qp_itoq (long double *, int); static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq; #endif /* POSIX allows platforms that don't support NAN. But all major machines in the past 15 years have supported something close to IEEE NaN, so we define this unconditionally. We also must define it on platforms like Solaris 10, where NAN is present but defined as a function pointer rather than a floating point constant. */ #if !defined NAN || @REPLACE_NAN@ # if !GNULIB_defined_NAN # undef NAN /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke on the expression 0.0 / 0.0. */ # if defined __DECC || defined _MSC_VER _GL_MATH_INLINE float _NaN () { static float zero = 0.0f; return zero / zero; } # define NAN (_NaN()) # else # define NAN (0.0f / 0.0f) # endif # define GNULIB_defined_NAN 1 # endif #endif /* Solaris 10 defines HUGE_VAL, but as a function pointer rather than a floating point constant. */ #if @REPLACE_HUGE_VAL@ # undef HUGE_VALF # define HUGE_VALF (1.0f / 0.0f) # undef HUGE_VAL # define HUGE_VAL (1.0 / 0.0) # undef HUGE_VALL # define HUGE_VALL (1.0L / 0.0L) #endif /* HUGE_VALF is a 'float' Infinity. */ #ifndef HUGE_VALF # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. */ # define HUGE_VALF (1e25f * 1e25f) # else # define HUGE_VALF (1.0f / 0.0f) # endif #endif /* HUGE_VAL is a 'double' Infinity. */ #ifndef HUGE_VAL # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0. */ # define HUGE_VAL (1e250 * 1e250) # else # define HUGE_VAL (1.0 / 0.0) # endif #endif /* HUGE_VALL is a 'long double' Infinity. */ #ifndef HUGE_VALL # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L. */ # define HUGE_VALL (1e250L * 1e250L) # else # define HUGE_VALL (1.0L / 0.0L) # endif #endif #if defined FP_ILOGB0 && defined FP_ILOGBNAN /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct. */ # if defined __HAIKU__ /* Haiku: match what ilogb() does */ # undef FP_ILOGB0 # undef FP_ILOGBNAN # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # endif #else /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined. */ # if defined __NetBSD__ || defined __sgi /* NetBSD, IRIX 6.5: match what ilogb() does */ # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # elif defined _AIX /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */ # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN 2147483647 /* INT_MAX */ # elif defined __sun /* Solaris 9: match what ilogb() does */ # define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ # define FP_ILOGBNAN 2147483647 /* INT_MAX */ # else /* Gnulib defined values. */ # define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # endif #endif #if @GNULIB_ACOSF@ # if @REPLACE_ACOSF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef acosf # define acosf rpl_acosf # endif _GL_FUNCDECL_RPL (acosf, float, (float x)); _GL_CXXALIAS_RPL (acosf, float, (float x)); # else # if !@HAVE_ACOSF@ # undef acosf _GL_FUNCDECL_SYS (acosf, float, (float x)); # endif _GL_CXXALIAS_SYS (acosf, float, (float x)); # endif _GL_CXXALIASWARN (acosf); #elif defined GNULIB_POSIXCHECK # undef acosf # if HAVE_RAW_DECL_ACOSF _GL_WARN_ON_USE (acosf, "acosf is unportable - " "use gnulib module acosf for portability"); # endif #endif #if @GNULIB_ACOSL@ # if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@ # undef acosl _GL_FUNCDECL_SYS (acosl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (acosl, long double, (long double x)); _GL_CXXALIASWARN (acosl); #elif defined GNULIB_POSIXCHECK # undef acosl # if HAVE_RAW_DECL_ACOSL _GL_WARN_ON_USE (acosl, "acosl is unportable - " "use gnulib module acosl for portability"); # endif #endif #if @GNULIB_ASINF@ # if @REPLACE_ASINF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef asinf # define asinf rpl_asinf # endif _GL_FUNCDECL_RPL (asinf, float, (float x)); _GL_CXXALIAS_RPL (asinf, float, (float x)); # else # if !@HAVE_ASINF@ # undef asinf _GL_FUNCDECL_SYS (asinf, float, (float x)); # endif _GL_CXXALIAS_SYS (asinf, float, (float x)); # endif _GL_CXXALIASWARN (asinf); #elif defined GNULIB_POSIXCHECK # undef asinf # if HAVE_RAW_DECL_ASINF _GL_WARN_ON_USE (asinf, "asinf is unportable - " "use gnulib module asinf for portability"); # endif #endif #if @GNULIB_ASINL@ # if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@ # undef asinl _GL_FUNCDECL_SYS (asinl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (asinl, long double, (long double x)); _GL_CXXALIASWARN (asinl); #elif defined GNULIB_POSIXCHECK # undef asinl # if HAVE_RAW_DECL_ASINL _GL_WARN_ON_USE (asinl, "asinl is unportable - " "use gnulib module asinl for portability"); # endif #endif #if @GNULIB_ATANF@ # if @REPLACE_ATANF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef atanf # define atanf rpl_atanf # endif _GL_FUNCDECL_RPL (atanf, float, (float x)); _GL_CXXALIAS_RPL (atanf, float, (float x)); # else # if !@HAVE_ATANF@ # undef atanf _GL_FUNCDECL_SYS (atanf, float, (float x)); # endif _GL_CXXALIAS_SYS (atanf, float, (float x)); # endif _GL_CXXALIASWARN (atanf); #elif defined GNULIB_POSIXCHECK # undef atanf # if HAVE_RAW_DECL_ATANF _GL_WARN_ON_USE (atanf, "atanf is unportable - " "use gnulib module atanf for portability"); # endif #endif #if @GNULIB_ATANL@ # if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@ # undef atanl _GL_FUNCDECL_SYS (atanl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (atanl, long double, (long double x)); _GL_CXXALIASWARN (atanl); #elif defined GNULIB_POSIXCHECK # undef atanl # if HAVE_RAW_DECL_ATANL _GL_WARN_ON_USE (atanl, "atanl is unportable - " "use gnulib module atanl for portability"); # endif #endif #if @GNULIB_ATAN2F@ # if @REPLACE_ATAN2F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef atan2f # define atan2f rpl_atan2f # endif _GL_FUNCDECL_RPL (atan2f, float, (float y, float x)); _GL_CXXALIAS_RPL (atan2f, float, (float y, float x)); # else # if !@HAVE_ATAN2F@ # undef atan2f _GL_FUNCDECL_SYS (atan2f, float, (float y, float x)); # endif _GL_CXXALIAS_SYS (atan2f, float, (float y, float x)); # endif _GL_CXXALIASWARN (atan2f); #elif defined GNULIB_POSIXCHECK # undef atan2f # if HAVE_RAW_DECL_ATAN2F _GL_WARN_ON_USE (atan2f, "atan2f is unportable - " "use gnulib module atan2f for portability"); # endif #endif #if @GNULIB_CBRTF@ # if @REPLACE_CBRTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cbrtf # define cbrtf rpl_cbrtf # endif _GL_FUNCDECL_RPL (cbrtf, float, (float x)); _GL_CXXALIAS_RPL (cbrtf, float, (float x)); # else # if !@HAVE_DECL_CBRTF@ _GL_FUNCDECL_SYS (cbrtf, float, (float x)); # endif _GL_CXXALIAS_SYS (cbrtf, float, (float x)); # endif _GL_CXXALIASWARN (cbrtf); #elif defined GNULIB_POSIXCHECK # undef cbrtf # if HAVE_RAW_DECL_CBRTF _GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - " "use gnulib module cbrtf for portability"); # endif #endif #if @GNULIB_CBRT@ # if !@HAVE_CBRT@ _GL_FUNCDECL_SYS (cbrt, double, (double x)); # endif _GL_CXXALIAS_SYS (cbrt, double, (double x)); _GL_CXXALIASWARN (cbrt); #elif defined GNULIB_POSIXCHECK # undef cbrt # if HAVE_RAW_DECL_CBRT _GL_WARN_ON_USE (cbrt, "cbrt is unportable - " "use gnulib module cbrt for portability"); # endif #endif #if @GNULIB_CBRTL@ # if @REPLACE_CBRTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cbrtl # define cbrtl rpl_cbrtl # endif _GL_FUNCDECL_RPL (cbrtl, long double, (long double x)); _GL_CXXALIAS_RPL (cbrtl, long double, (long double x)); # else # if !@HAVE_DECL_CBRTL@ _GL_FUNCDECL_SYS (cbrtl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (cbrtl, long double, (long double x)); # endif _GL_CXXALIASWARN (cbrtl); #elif defined GNULIB_POSIXCHECK # undef cbrtl # if HAVE_RAW_DECL_CBRTL _GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - " "use gnulib module cbrtl for portability"); # endif #endif #if @GNULIB_CEILF@ # if @REPLACE_CEILF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceilf # define ceilf rpl_ceilf # endif _GL_FUNCDECL_RPL (ceilf, float, (float x)); _GL_CXXALIAS_RPL (ceilf, float, (float x)); # else # if !@HAVE_DECL_CEILF@ # undef ceilf _GL_FUNCDECL_SYS (ceilf, float, (float x)); # endif _GL_CXXALIAS_SYS (ceilf, float, (float x)); # endif _GL_CXXALIASWARN (ceilf); #elif defined GNULIB_POSIXCHECK # undef ceilf # if HAVE_RAW_DECL_CEILF _GL_WARN_ON_USE (ceilf, "ceilf is unportable - " "use gnulib module ceilf for portability"); # endif #endif #if @GNULIB_CEIL@ # if @REPLACE_CEIL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceil # define ceil rpl_ceil # endif _GL_FUNCDECL_RPL (ceil, double, (double x)); _GL_CXXALIAS_RPL (ceil, double, (double x)); # else _GL_CXXALIAS_SYS (ceil, double, (double x)); # endif _GL_CXXALIASWARN (ceil); #endif #if @GNULIB_CEILL@ # if @REPLACE_CEILL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceill # define ceill rpl_ceill # endif _GL_FUNCDECL_RPL (ceill, long double, (long double x)); _GL_CXXALIAS_RPL (ceill, long double, (long double x)); # else # if !@HAVE_DECL_CEILL@ # undef ceill _GL_FUNCDECL_SYS (ceill, long double, (long double x)); # endif _GL_CXXALIAS_SYS (ceill, long double, (long double x)); # endif _GL_CXXALIASWARN (ceill); #elif defined GNULIB_POSIXCHECK # undef ceill # if HAVE_RAW_DECL_CEILL _GL_WARN_ON_USE (ceill, "ceill is unportable - " "use gnulib module ceill for portability"); # endif #endif #if @GNULIB_COPYSIGNF@ # if !@HAVE_DECL_COPYSIGNF@ _GL_FUNCDECL_SYS (copysignf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (copysignf, float, (float x, float y)); _GL_CXXALIASWARN (copysignf); #elif defined GNULIB_POSIXCHECK # undef copysignf # if HAVE_RAW_DECL_COPYSIGNF _GL_WARN_ON_USE (copysignf, "copysignf is unportable - " "use gnulib module copysignf for portability"); # endif #endif #if @GNULIB_COPYSIGN@ # if !@HAVE_COPYSIGN@ _GL_FUNCDECL_SYS (copysign, double, (double x, double y)); # endif _GL_CXXALIAS_SYS (copysign, double, (double x, double y)); _GL_CXXALIASWARN (copysign); #elif defined GNULIB_POSIXCHECK # undef copysign # if HAVE_RAW_DECL_COPYSIGN _GL_WARN_ON_USE (copysign, "copysign is unportable - " "use gnulib module copysign for portability"); # endif #endif #if @GNULIB_COPYSIGNL@ # if !@HAVE_COPYSIGNL@ _GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y)); _GL_CXXALIASWARN (copysignl); #elif defined GNULIB_POSIXCHECK # undef copysignl # if HAVE_RAW_DECL_COPYSIGNL _GL_WARN_ON_USE (copysign, "copysignl is unportable - " "use gnulib module copysignl for portability"); # endif #endif #if @GNULIB_COSF@ # if @REPLACE_COSF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cosf # define cosf rpl_cosf # endif _GL_FUNCDECL_RPL (cosf, float, (float x)); _GL_CXXALIAS_RPL (cosf, float, (float x)); # else # if !@HAVE_COSF@ # undef cosf _GL_FUNCDECL_SYS (cosf, float, (float x)); # endif _GL_CXXALIAS_SYS (cosf, float, (float x)); # endif _GL_CXXALIASWARN (cosf); #elif defined GNULIB_POSIXCHECK # undef cosf # if HAVE_RAW_DECL_COSF _GL_WARN_ON_USE (cosf, "cosf is unportable - " "use gnulib module cosf for portability"); # endif #endif #if @GNULIB_COSL@ # if !@HAVE_COSL@ || !@HAVE_DECL_COSL@ # undef cosl _GL_FUNCDECL_SYS (cosl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (cosl, long double, (long double x)); _GL_CXXALIASWARN (cosl); #elif defined GNULIB_POSIXCHECK # undef cosl # if HAVE_RAW_DECL_COSL _GL_WARN_ON_USE (cosl, "cosl is unportable - " "use gnulib module cosl for portability"); # endif #endif #if @GNULIB_COSHF@ # if @REPLACE_COSHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef coshf # define coshf rpl_coshf # endif _GL_FUNCDECL_RPL (coshf, float, (float x)); _GL_CXXALIAS_RPL (coshf, float, (float x)); # else # if !@HAVE_COSHF@ # undef coshf _GL_FUNCDECL_SYS (coshf, float, (float x)); # endif _GL_CXXALIAS_SYS (coshf, float, (float x)); # endif _GL_CXXALIASWARN (coshf); #elif defined GNULIB_POSIXCHECK # undef coshf # if HAVE_RAW_DECL_COSHF _GL_WARN_ON_USE (coshf, "coshf is unportable - " "use gnulib module coshf for portability"); # endif #endif #if @GNULIB_EXPF@ # if @REPLACE_EXPF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expf # define expf rpl_expf # endif _GL_FUNCDECL_RPL (expf, float, (float x)); _GL_CXXALIAS_RPL (expf, float, (float x)); # else # if !@HAVE_EXPF@ # undef expf _GL_FUNCDECL_SYS (expf, float, (float x)); # endif _GL_CXXALIAS_SYS (expf, float, (float x)); # endif _GL_CXXALIASWARN (expf); #elif defined GNULIB_POSIXCHECK # undef expf # if HAVE_RAW_DECL_EXPF _GL_WARN_ON_USE (expf, "expf is unportable - " "use gnulib module expf for portability"); # endif #endif #if @GNULIB_EXPL@ # if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@ # undef expl _GL_FUNCDECL_SYS (expl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (expl, long double, (long double x)); _GL_CXXALIASWARN (expl); #elif defined GNULIB_POSIXCHECK # undef expl # if HAVE_RAW_DECL_EXPL _GL_WARN_ON_USE (expl, "expl is unportable - " "use gnulib module expl for portability"); # endif #endif #if @GNULIB_EXP2F@ # if !@HAVE_DECL_EXP2F@ _GL_FUNCDECL_SYS (exp2f, float, (float x)); # endif _GL_CXXALIAS_SYS (exp2f, float, (float x)); _GL_CXXALIASWARN (exp2f); #elif defined GNULIB_POSIXCHECK # undef exp2f # if HAVE_RAW_DECL_EXP2F _GL_WARN_ON_USE (exp2f, "exp2f is unportable - " "use gnulib module exp2f for portability"); # endif #endif #if @GNULIB_EXP2@ # if @REPLACE_EXP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef exp2 # define exp2 rpl_exp2 # endif _GL_FUNCDECL_RPL (exp2, double, (double x)); _GL_CXXALIAS_RPL (exp2, double, (double x)); # else # if !@HAVE_DECL_EXP2@ _GL_FUNCDECL_SYS (exp2, double, (double x)); # endif _GL_CXXALIAS_SYS (exp2, double, (double x)); # endif _GL_CXXALIASWARN (exp2); #elif defined GNULIB_POSIXCHECK # undef exp2 # if HAVE_RAW_DECL_EXP2 _GL_WARN_ON_USE (exp2, "exp2 is unportable - " "use gnulib module exp2 for portability"); # endif #endif #if @GNULIB_EXP2L@ # if @REPLACE_EXP2L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef exp2l # define exp2l rpl_exp2l # endif _GL_FUNCDECL_RPL (exp2l, long double, (long double x)); _GL_CXXALIAS_RPL (exp2l, long double, (long double x)); # else # if !@HAVE_DECL_EXP2L@ # undef exp2l _GL_FUNCDECL_SYS (exp2l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (exp2l, long double, (long double x)); # endif _GL_CXXALIASWARN (exp2l); #elif defined GNULIB_POSIXCHECK # undef exp2l # if HAVE_RAW_DECL_EXP2L _GL_WARN_ON_USE (exp2l, "exp2l is unportable - " "use gnulib module exp2l for portability"); # endif #endif #if @GNULIB_EXPM1F@ # if @REPLACE_EXPM1F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1f # define expm1f rpl_expm1f # endif _GL_FUNCDECL_RPL (expm1f, float, (float x)); _GL_CXXALIAS_RPL (expm1f, float, (float x)); # else # if !@HAVE_EXPM1F@ _GL_FUNCDECL_SYS (expm1f, float, (float x)); # endif _GL_CXXALIAS_SYS (expm1f, float, (float x)); # endif _GL_CXXALIASWARN (expm1f); #elif defined GNULIB_POSIXCHECK # undef expm1f # if HAVE_RAW_DECL_EXPM1F _GL_WARN_ON_USE (expm1f, "expm1f is unportable - " "use gnulib module expm1f for portability"); # endif #endif #if @GNULIB_EXPM1@ # if @REPLACE_EXPM1@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1 # define expm1 rpl_expm1 # endif _GL_FUNCDECL_RPL (expm1, double, (double x)); _GL_CXXALIAS_RPL (expm1, double, (double x)); # else # if !@HAVE_EXPM1@ _GL_FUNCDECL_SYS (expm1, double, (double x)); # endif _GL_CXXALIAS_SYS (expm1, double, (double x)); # endif _GL_CXXALIASWARN (expm1); #elif defined GNULIB_POSIXCHECK # undef expm1 # if HAVE_RAW_DECL_EXPM1 _GL_WARN_ON_USE (expm1, "expm1 is unportable - " "use gnulib module expm1 for portability"); # endif #endif #if @GNULIB_EXPM1L@ # if !@HAVE_DECL_EXPM1L@ # undef expm1l _GL_FUNCDECL_SYS (expm1l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (expm1l, long double, (long double x)); _GL_CXXALIASWARN (expm1l); #elif defined GNULIB_POSIXCHECK # undef expm1l # if HAVE_RAW_DECL_EXPM1L _GL_WARN_ON_USE (expm1l, "expm1l is unportable - " "use gnulib module expm1l for portability"); # endif #endif #if @GNULIB_FABSF@ # if !@HAVE_FABSF@ # undef fabsf _GL_FUNCDECL_SYS (fabsf, float, (float x)); # endif _GL_CXXALIAS_SYS (fabsf, float, (float x)); _GL_CXXALIASWARN (fabsf); #elif defined GNULIB_POSIXCHECK # undef fabsf # if HAVE_RAW_DECL_FABSF _GL_WARN_ON_USE (fabsf, "fabsf is unportable - " "use gnulib module fabsf for portability"); # endif #endif #if @GNULIB_FABSL@ # if @REPLACE_FABSL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fabsl # define fabsl rpl_fabsl # endif _GL_FUNCDECL_RPL (fabsl, long double, (long double x)); _GL_CXXALIAS_RPL (fabsl, long double, (long double x)); # else # if !@HAVE_FABSL@ # undef fabsl _GL_FUNCDECL_SYS (fabsl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (fabsl, long double, (long double x)); # endif _GL_CXXALIASWARN (fabsl); #elif defined GNULIB_POSIXCHECK # undef fabsl # if HAVE_RAW_DECL_FABSL _GL_WARN_ON_USE (fabsl, "fabsl is unportable - " "use gnulib module fabsl for portability"); # endif #endif #if @GNULIB_FLOORF@ # if @REPLACE_FLOORF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floorf # define floorf rpl_floorf # endif _GL_FUNCDECL_RPL (floorf, float, (float x)); _GL_CXXALIAS_RPL (floorf, float, (float x)); # else # if !@HAVE_DECL_FLOORF@ # undef floorf _GL_FUNCDECL_SYS (floorf, float, (float x)); # endif _GL_CXXALIAS_SYS (floorf, float, (float x)); # endif _GL_CXXALIASWARN (floorf); #elif defined GNULIB_POSIXCHECK # undef floorf # if HAVE_RAW_DECL_FLOORF _GL_WARN_ON_USE (floorf, "floorf is unportable - " "use gnulib module floorf for portability"); # endif #endif #if @GNULIB_FLOOR@ # if @REPLACE_FLOOR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floor # define floor rpl_floor # endif _GL_FUNCDECL_RPL (floor, double, (double x)); _GL_CXXALIAS_RPL (floor, double, (double x)); # else _GL_CXXALIAS_SYS (floor, double, (double x)); # endif _GL_CXXALIASWARN (floor); #endif #if @GNULIB_FLOORL@ # if @REPLACE_FLOORL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floorl # define floorl rpl_floorl # endif _GL_FUNCDECL_RPL (floorl, long double, (long double x)); _GL_CXXALIAS_RPL (floorl, long double, (long double x)); # else # if !@HAVE_DECL_FLOORL@ # undef floorl _GL_FUNCDECL_SYS (floorl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (floorl, long double, (long double x)); # endif _GL_CXXALIASWARN (floorl); #elif defined GNULIB_POSIXCHECK # undef floorl # if HAVE_RAW_DECL_FLOORL _GL_WARN_ON_USE (floorl, "floorl is unportable - " "use gnulib module floorl for portability"); # endif #endif #if @GNULIB_FMAF@ # if @REPLACE_FMAF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmaf # define fmaf rpl_fmaf # endif _GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z)); _GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z)); # else # if !@HAVE_FMAF@ _GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z)); # endif _GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z)); # endif _GL_CXXALIASWARN (fmaf); #elif defined GNULIB_POSIXCHECK # undef fmaf # if HAVE_RAW_DECL_FMAF _GL_WARN_ON_USE (fmaf, "fmaf is unportable - " "use gnulib module fmaf for portability"); # endif #endif #if @GNULIB_FMA@ # if @REPLACE_FMA@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fma # define fma rpl_fma # endif _GL_FUNCDECL_RPL (fma, double, (double x, double y, double z)); _GL_CXXALIAS_RPL (fma, double, (double x, double y, double z)); # else # if !@HAVE_FMA@ _GL_FUNCDECL_SYS (fma, double, (double x, double y, double z)); # endif _GL_CXXALIAS_SYS (fma, double, (double x, double y, double z)); # endif _GL_CXXALIASWARN (fma); #elif defined GNULIB_POSIXCHECK # undef fma # if HAVE_RAW_DECL_FMA _GL_WARN_ON_USE (fma, "fma is unportable - " "use gnulib module fma for portability"); # endif #endif #if @GNULIB_FMAL@ # if @REPLACE_FMAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmal # define fmal rpl_fmal # endif _GL_FUNCDECL_RPL (fmal, long double, (long double x, long double y, long double z)); _GL_CXXALIAS_RPL (fmal, long double, (long double x, long double y, long double z)); # else # if !@HAVE_FMAL@ # undef fmal _GL_FUNCDECL_SYS (fmal, long double, (long double x, long double y, long double z)); # endif _GL_CXXALIAS_SYS (fmal, long double, (long double x, long double y, long double z)); # endif _GL_CXXALIASWARN (fmal); #elif defined GNULIB_POSIXCHECK # undef fmal # if HAVE_RAW_DECL_FMAL _GL_WARN_ON_USE (fmal, "fmal is unportable - " "use gnulib module fmal for portability"); # endif #endif #if @GNULIB_FMODF@ # if @REPLACE_FMODF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmodf # define fmodf rpl_fmodf # endif _GL_FUNCDECL_RPL (fmodf, float, (float x, float y)); _GL_CXXALIAS_RPL (fmodf, float, (float x, float y)); # else # if !@HAVE_FMODF@ # undef fmodf _GL_FUNCDECL_SYS (fmodf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (fmodf, float, (float x, float y)); # endif _GL_CXXALIASWARN (fmodf); #elif defined GNULIB_POSIXCHECK # undef fmodf # if HAVE_RAW_DECL_FMODF _GL_WARN_ON_USE (fmodf, "fmodf is unportable - " "use gnulib module fmodf for portability"); # endif #endif #if @GNULIB_FMOD@ # if @REPLACE_FMOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmod # define fmod rpl_fmod # endif _GL_FUNCDECL_RPL (fmod, double, (double x, double y)); _GL_CXXALIAS_RPL (fmod, double, (double x, double y)); # else _GL_CXXALIAS_SYS (fmod, double, (double x, double y)); # endif _GL_CXXALIASWARN (fmod); #elif defined GNULIB_POSIXCHECK # undef fmod # if HAVE_RAW_DECL_FMOD _GL_WARN_ON_USE (fmod, "fmod has portability problems - " "use gnulib module fmod for portability"); # endif #endif #if @GNULIB_FMODL@ # if @REPLACE_FMODL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmodl # define fmodl rpl_fmodl # endif _GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y)); # else # if !@HAVE_FMODL@ # undef fmodl _GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y)); # endif _GL_CXXALIASWARN (fmodl); #elif defined GNULIB_POSIXCHECK # undef fmodl # if HAVE_RAW_DECL_FMODL _GL_WARN_ON_USE (fmodl, "fmodl is unportable - " "use gnulib module fmodl for portability"); # endif #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXPF@ # if @REPLACE_FREXPF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexpf # define frexpf rpl_frexpf # endif _GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr)); # else # if !@HAVE_FREXPF@ # undef frexpf _GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr)); # endif _GL_CXXALIASWARN (frexpf); #elif defined GNULIB_POSIXCHECK # undef frexpf # if HAVE_RAW_DECL_FREXPF _GL_WARN_ON_USE (frexpf, "frexpf is unportable - " "use gnulib module frexpf for portability"); # endif #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXP@ # if @REPLACE_FREXP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexp # define frexp rpl_frexp # endif _GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr)); # else _GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr)); # endif _GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr)); #elif defined GNULIB_POSIXCHECK # undef frexp /* Assume frexp is always declared. */ _GL_WARN_ON_USE (frexp, "frexp is unportable - " "use gnulib module frexp for portability"); #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexpl # define frexpl rpl_frexpl # endif _GL_FUNCDECL_RPL (frexpl, long double, (long double x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr)); #else # if !@HAVE_DECL_FREXPL@ _GL_FUNCDECL_SYS (frexpl, long double, (long double x, int *expptr) _GL_ARG_NONNULL ((2))); # endif # if @GNULIB_FREXPL@ _GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr)); # endif #endif #if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@) _GL_CXXALIASWARN (frexpl); #endif #if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK # undef frexpl # if HAVE_RAW_DECL_FREXPL _GL_WARN_ON_USE (frexpl, "frexpl is unportable - " "use gnulib module frexpl for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOTF@ # if @REPLACE_HYPOTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypotf # define hypotf rpl_hypotf # endif _GL_FUNCDECL_RPL (hypotf, float, (float x, float y)); _GL_CXXALIAS_RPL (hypotf, float, (float x, float y)); # else # if !@HAVE_HYPOTF@ _GL_FUNCDECL_SYS (hypotf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (hypotf, float, (float x, float y)); # endif _GL_CXXALIASWARN (hypotf); #elif defined GNULIB_POSIXCHECK # undef hypotf # if HAVE_RAW_DECL_HYPOTF _GL_WARN_ON_USE (hypotf, "hypotf is unportable - " "use gnulib module hypotf for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOT@ # if @REPLACE_HYPOT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypot # define hypot rpl_hypot # endif _GL_FUNCDECL_RPL (hypot, double, (double x, double y)); _GL_CXXALIAS_RPL (hypot, double, (double x, double y)); # else _GL_CXXALIAS_SYS (hypot, double, (double x, double y)); # endif _GL_CXXALIASWARN (hypot); #elif defined GNULIB_POSIXCHECK # undef hypot # if HAVE_RAW_DECL_HYPOT _GL_WARN_ON_USE (hypotf, "hypot has portability problems - " "use gnulib module hypot for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOTL@ # if @REPLACE_HYPOTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypotl # define hypotl rpl_hypotl # endif _GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y)); # else # if !@HAVE_HYPOTL@ _GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y)); # endif _GL_CXXALIASWARN (hypotl); #elif defined GNULIB_POSIXCHECK # undef hypotl # if HAVE_RAW_DECL_HYPOTL _GL_WARN_ON_USE (hypotl, "hypotl is unportable - " "use gnulib module hypotl for portability"); # endif #endif #if @GNULIB_ILOGBF@ # if @REPLACE_ILOGBF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogbf # define ilogbf rpl_ilogbf # endif _GL_FUNCDECL_RPL (ilogbf, int, (float x)); _GL_CXXALIAS_RPL (ilogbf, int, (float x)); # else # if !@HAVE_ILOGBF@ _GL_FUNCDECL_SYS (ilogbf, int, (float x)); # endif _GL_CXXALIAS_SYS (ilogbf, int, (float x)); # endif _GL_CXXALIASWARN (ilogbf); #elif defined GNULIB_POSIXCHECK # undef ilogbf # if HAVE_RAW_DECL_ILOGBF _GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - " "use gnulib module ilogbf for portability"); # endif #endif #if @GNULIB_ILOGB@ # if @REPLACE_ILOGB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogb # define ilogb rpl_ilogb # endif _GL_FUNCDECL_RPL (ilogb, int, (double x)); _GL_CXXALIAS_RPL (ilogb, int, (double x)); # else # if !@HAVE_ILOGB@ _GL_FUNCDECL_SYS (ilogb, int, (double x)); # endif _GL_CXXALIAS_SYS (ilogb, int, (double x)); # endif _GL_CXXALIASWARN (ilogb); #elif defined GNULIB_POSIXCHECK # undef ilogb # if HAVE_RAW_DECL_ILOGB _GL_WARN_ON_USE (ilogb, "ilogb is unportable - " "use gnulib module ilogb for portability"); # endif #endif #if @GNULIB_ILOGBL@ # if @REPLACE_ILOGBL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogbl # define ilogbl rpl_ilogbl # endif _GL_FUNCDECL_RPL (ilogbl, int, (long double x)); _GL_CXXALIAS_RPL (ilogbl, int, (long double x)); # else # if !@HAVE_ILOGBL@ _GL_FUNCDECL_SYS (ilogbl, int, (long double x)); # endif _GL_CXXALIAS_SYS (ilogbl, int, (long double x)); # endif _GL_CXXALIASWARN (ilogbl); #elif defined GNULIB_POSIXCHECK # undef ilogbl # if HAVE_RAW_DECL_ILOGBL _GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - " "use gnulib module ilogbl for portability"); # endif #endif /* Return x * 2^exp. */ #if @GNULIB_LDEXPF@ # if !@HAVE_LDEXPF@ # undef ldexpf _GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp)); # endif _GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp)); _GL_CXXALIASWARN (ldexpf); #elif defined GNULIB_POSIXCHECK # undef ldexpf # if HAVE_RAW_DECL_LDEXPF _GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - " "use gnulib module ldexpf for portability"); # endif #endif /* Return x * 2^exp. */ #if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ldexpl # define ldexpl rpl_ldexpl # endif _GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp)); _GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp)); #else # if !@HAVE_DECL_LDEXPL@ _GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp)); # endif # if @GNULIB_LDEXPL@ _GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp)); # endif #endif #if @GNULIB_LDEXPL@ _GL_CXXALIASWARN (ldexpl); #endif #if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK # undef ldexpl # if HAVE_RAW_DECL_LDEXPL _GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - " "use gnulib module ldexpl for portability"); # endif #endif #if @GNULIB_LOGF@ # if @REPLACE_LOGF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logf # define logf rpl_logf # endif _GL_FUNCDECL_RPL (logf, float, (float x)); _GL_CXXALIAS_RPL (logf, float, (float x)); # else # if !@HAVE_LOGF@ # undef logf _GL_FUNCDECL_SYS (logf, float, (float x)); # endif _GL_CXXALIAS_SYS (logf, float, (float x)); # endif _GL_CXXALIASWARN (logf); #elif defined GNULIB_POSIXCHECK # undef logf # if HAVE_RAW_DECL_LOGF _GL_WARN_ON_USE (logf, "logf is unportable - " "use gnulib module logf for portability"); # endif #endif #if @GNULIB_LOG@ # if @REPLACE_LOG@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log # define log rpl_log # endif _GL_FUNCDECL_RPL (log, double, (double x)); _GL_CXXALIAS_RPL (log, double, (double x)); # else _GL_CXXALIAS_SYS (log, double, (double x)); # endif _GL_CXXALIASWARN (log); #elif defined GNULIB_POSIXCHECK # undef log # if HAVE_RAW_DECL_LOG _GL_WARN_ON_USE (log, "log has portability problems - " "use gnulib module log for portability"); # endif #endif #if @GNULIB_LOGL@ # if @REPLACE_LOGL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logl # define logl rpl_logl # endif _GL_FUNCDECL_RPL (logl, long double, (long double x)); _GL_CXXALIAS_RPL (logl, long double, (long double x)); # else # if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@ # undef logl _GL_FUNCDECL_SYS (logl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (logl, long double, (long double x)); # endif _GL_CXXALIASWARN (logl); #elif defined GNULIB_POSIXCHECK # undef logl # if HAVE_RAW_DECL_LOGL _GL_WARN_ON_USE (logl, "logl is unportable - " "use gnulib module logl for portability"); # endif #endif #if @GNULIB_LOG10F@ # if @REPLACE_LOG10F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10f # define log10f rpl_log10f # endif _GL_FUNCDECL_RPL (log10f, float, (float x)); _GL_CXXALIAS_RPL (log10f, float, (float x)); # else # if !@HAVE_LOG10F@ # undef log10f _GL_FUNCDECL_SYS (log10f, float, (float x)); # endif _GL_CXXALIAS_SYS (log10f, float, (float x)); # endif _GL_CXXALIASWARN (log10f); #elif defined GNULIB_POSIXCHECK # undef log10f # if HAVE_RAW_DECL_LOG10F _GL_WARN_ON_USE (log10f, "log10f is unportable - " "use gnulib module log10f for portability"); # endif #endif #if @GNULIB_LOG10@ # if @REPLACE_LOG10@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10 # define log10 rpl_log10 # endif _GL_FUNCDECL_RPL (log10, double, (double x)); _GL_CXXALIAS_RPL (log10, double, (double x)); # else _GL_CXXALIAS_SYS (log10, double, (double x)); # endif _GL_CXXALIASWARN (log10); #elif defined GNULIB_POSIXCHECK # undef log10 # if HAVE_RAW_DECL_LOG10 _GL_WARN_ON_USE (log10, "log10 has portability problems - " "use gnulib module log10 for portability"); # endif #endif #if @GNULIB_LOG10L@ # if @REPLACE_LOG10L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10l # define log10l rpl_log10l # endif _GL_FUNCDECL_RPL (log10l, long double, (long double x)); _GL_CXXALIAS_RPL (log10l, long double, (long double x)); # else # if !@HAVE_LOG10L@ || !@HAVE_DECL_LOG10L@ # undef log10l _GL_FUNCDECL_SYS (log10l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log10l, long double, (long double x)); # endif _GL_CXXALIASWARN (log10l); #elif defined GNULIB_POSIXCHECK # undef log10l # if HAVE_RAW_DECL_LOG10L _GL_WARN_ON_USE (log10l, "log10l is unportable - " "use gnulib module log10l for portability"); # endif #endif #if @GNULIB_LOG1PF@ # if @REPLACE_LOG1PF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1pf # define log1pf rpl_log1pf # endif _GL_FUNCDECL_RPL (log1pf, float, (float x)); _GL_CXXALIAS_RPL (log1pf, float, (float x)); # else # if !@HAVE_LOG1PF@ _GL_FUNCDECL_SYS (log1pf, float, (float x)); # endif _GL_CXXALIAS_SYS (log1pf, float, (float x)); # endif _GL_CXXALIASWARN (log1pf); #elif defined GNULIB_POSIXCHECK # undef log1pf # if HAVE_RAW_DECL_LOG1PF _GL_WARN_ON_USE (log1pf, "log1pf is unportable - " "use gnulib module log1pf for portability"); # endif #endif #if @GNULIB_LOG1P@ # if @REPLACE_LOG1P@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1p # define log1p rpl_log1p # endif _GL_FUNCDECL_RPL (log1p, double, (double x)); _GL_CXXALIAS_RPL (log1p, double, (double x)); # else # if !@HAVE_LOG1P@ _GL_FUNCDECL_SYS (log1p, double, (double x)); # endif _GL_CXXALIAS_SYS (log1p, double, (double x)); # endif _GL_CXXALIASWARN (log1p); #elif defined GNULIB_POSIXCHECK # undef log1p # if HAVE_RAW_DECL_LOG1P _GL_WARN_ON_USE (log1p, "log1p has portability problems - " "use gnulib module log1p for portability"); # endif #endif #if @GNULIB_LOG1PL@ # if @REPLACE_LOG1PL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1pl # define log1pl rpl_log1pl # endif _GL_FUNCDECL_RPL (log1pl, long double, (long double x)); _GL_CXXALIAS_RPL (log1pl, long double, (long double x)); # else # if !@HAVE_LOG1PL@ _GL_FUNCDECL_SYS (log1pl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log1pl, long double, (long double x)); # endif _GL_CXXALIASWARN (log1pl); #elif defined GNULIB_POSIXCHECK # undef log1pl # if HAVE_RAW_DECL_LOG1PL _GL_WARN_ON_USE (log1pl, "log1pl has portability problems - " "use gnulib module log1pl for portability"); # endif #endif #if @GNULIB_LOG2F@ # if @REPLACE_LOG2F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2f # define log2f rpl_log2f # endif _GL_FUNCDECL_RPL (log2f, float, (float x)); _GL_CXXALIAS_RPL (log2f, float, (float x)); # else # if !@HAVE_DECL_LOG2F@ # undef log2f _GL_FUNCDECL_SYS (log2f, float, (float x)); # endif _GL_CXXALIAS_SYS (log2f, float, (float x)); # endif _GL_CXXALIASWARN (log2f); #elif defined GNULIB_POSIXCHECK # undef log2f # if HAVE_RAW_DECL_LOG2F _GL_WARN_ON_USE (log2f, "log2f is unportable - " "use gnulib module log2f for portability"); # endif #endif #if @GNULIB_LOG2@ # if @REPLACE_LOG2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2 # define log2 rpl_log2 # endif _GL_FUNCDECL_RPL (log2, double, (double x)); _GL_CXXALIAS_RPL (log2, double, (double x)); # else # if !@HAVE_DECL_LOG2@ # undef log2 _GL_FUNCDECL_SYS (log2, double, (double x)); # endif _GL_CXXALIAS_SYS (log2, double, (double x)); # endif _GL_CXXALIASWARN (log2); #elif defined GNULIB_POSIXCHECK # undef log2 # if HAVE_RAW_DECL_LOG2 _GL_WARN_ON_USE (log2, "log2 is unportable - " "use gnulib module log2 for portability"); # endif #endif #if @GNULIB_LOG2L@ # if @REPLACE_LOG2L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2l # define log2l rpl_log2l # endif _GL_FUNCDECL_RPL (log2l, long double, (long double x)); _GL_CXXALIAS_RPL (log2l, long double, (long double x)); # else # if !@HAVE_DECL_LOG2L@ _GL_FUNCDECL_SYS (log2l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log2l, long double, (long double x)); # endif _GL_CXXALIASWARN (log2l); #elif defined GNULIB_POSIXCHECK # undef log2l # if HAVE_RAW_DECL_LOG2L _GL_WARN_ON_USE (log2l, "log2l is unportable - " "use gnulib module log2l for portability"); # endif #endif #if @GNULIB_LOGBF@ # if @REPLACE_LOGBF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logbf # define logbf rpl_logbf # endif _GL_FUNCDECL_RPL (logbf, float, (float x)); _GL_CXXALIAS_RPL (logbf, float, (float x)); # else # if !@HAVE_LOGBF@ _GL_FUNCDECL_SYS (logbf, float, (float x)); # endif _GL_CXXALIAS_SYS (logbf, float, (float x)); # endif _GL_CXXALIASWARN (logbf); #elif defined GNULIB_POSIXCHECK # undef logbf # if HAVE_RAW_DECL_LOGBF _GL_WARN_ON_USE (logbf, "logbf is unportable - " "use gnulib module logbf for portability"); # endif #endif #if @GNULIB_LOGB@ # if @REPLACE_LOGB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logb # define logb rpl_logb # endif _GL_FUNCDECL_RPL (logb, double, (double x)); _GL_CXXALIAS_RPL (logb, double, (double x)); # else # if !@HAVE_DECL_LOGB@ _GL_FUNCDECL_SYS (logb, double, (double x)); # endif _GL_CXXALIAS_SYS (logb, double, (double x)); # endif _GL_CXXALIASWARN (logb); #elif defined GNULIB_POSIXCHECK # undef logb # if HAVE_RAW_DECL_LOGB _GL_WARN_ON_USE (logb, "logb is unportable - " "use gnulib module logb for portability"); # endif #endif #if @GNULIB_LOGBL@ # if @REPLACE_LOGBL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logbl # define logbl rpl_logbl # endif _GL_FUNCDECL_RPL (logbl, long double, (long double x)); _GL_CXXALIAS_RPL (logbl, long double, (long double x)); # else # if !@HAVE_LOGBL@ _GL_FUNCDECL_SYS (logbl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (logbl, long double, (long double x)); # endif _GL_CXXALIASWARN (logbl); #elif defined GNULIB_POSIXCHECK # undef logbl # if HAVE_RAW_DECL_LOGBL _GL_WARN_ON_USE (logbl, "logbl is unportable - " "use gnulib module logbl for portability"); # endif #endif #if @GNULIB_MODFF@ # if @REPLACE_MODFF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modff # define modff rpl_modff # endif _GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modff, float, (float x, float *iptr)); # else # if !@HAVE_MODFF@ # undef modff _GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (modff, float, (float x, float *iptr)); # endif _GL_CXXALIASWARN (modff); #elif defined GNULIB_POSIXCHECK # undef modff # if HAVE_RAW_DECL_MODFF _GL_WARN_ON_USE (modff, "modff is unportable - " "use gnulib module modff for portability"); # endif #endif #if @GNULIB_MODF@ # if @REPLACE_MODF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modf # define modf rpl_modf # endif _GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modf, double, (double x, double *iptr)); # else _GL_CXXALIAS_SYS (modf, double, (double x, double *iptr)); # endif _GL_CXXALIASWARN (modf); #elif defined GNULIB_POSIXCHECK # undef modf # if HAVE_RAW_DECL_MODF _GL_WARN_ON_USE (modf, "modf has portability problems - " "use gnulib module modf for portability"); # endif #endif #if @GNULIB_MODFL@ # if @REPLACE_MODFL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modfl # define modfl rpl_modfl # endif _GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr)); # else # if !@HAVE_MODFL@ # undef modfl _GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr)); # endif _GL_CXXALIASWARN (modfl); #elif defined GNULIB_POSIXCHECK # undef modfl # if HAVE_RAW_DECL_MODFL _GL_WARN_ON_USE (modfl, "modfl is unportable - " "use gnulib module modfl for portability"); # endif #endif #if @GNULIB_POWF@ # if !@HAVE_POWF@ # undef powf _GL_FUNCDECL_SYS (powf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (powf, float, (float x, float y)); _GL_CXXALIASWARN (powf); #elif defined GNULIB_POSIXCHECK # undef powf # if HAVE_RAW_DECL_POWF _GL_WARN_ON_USE (powf, "powf is unportable - " "use gnulib module powf for portability"); # endif #endif #if @GNULIB_REMAINDERF@ # if @REPLACE_REMAINDERF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainderf # define remainderf rpl_remainderf # endif _GL_FUNCDECL_RPL (remainderf, float, (float x, float y)); _GL_CXXALIAS_RPL (remainderf, float, (float x, float y)); # else # if !@HAVE_REMAINDERF@ _GL_FUNCDECL_SYS (remainderf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (remainderf, float, (float x, float y)); # endif _GL_CXXALIASWARN (remainderf); #elif defined GNULIB_POSIXCHECK # undef remainderf # if HAVE_RAW_DECL_REMAINDERF _GL_WARN_ON_USE (remainderf, "remainderf is unportable - " "use gnulib module remainderf for portability"); # endif #endif #if @GNULIB_REMAINDER@ # if @REPLACE_REMAINDER@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainder # define remainder rpl_remainder # endif _GL_FUNCDECL_RPL (remainder, double, (double x, double y)); _GL_CXXALIAS_RPL (remainder, double, (double x, double y)); # else # if !@HAVE_REMAINDER@ || !@HAVE_DECL_REMAINDER@ _GL_FUNCDECL_SYS (remainder, double, (double x, double y)); # endif _GL_CXXALIAS_SYS (remainder, double, (double x, double y)); # endif _GL_CXXALIASWARN (remainder); #elif defined GNULIB_POSIXCHECK # undef remainder # if HAVE_RAW_DECL_REMAINDER _GL_WARN_ON_USE (remainder, "remainder is unportable - " "use gnulib module remainder for portability"); # endif #endif #if @GNULIB_REMAINDERL@ # if @REPLACE_REMAINDERL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainderl # define remainderl rpl_remainderl # endif _GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y)); # else # if !@HAVE_DECL_REMAINDERL@ # undef remainderl _GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y)); # endif _GL_CXXALIASWARN (remainderl); #elif defined GNULIB_POSIXCHECK # undef remainderl # if HAVE_RAW_DECL_REMAINDERL _GL_WARN_ON_USE (remainderl, "remainderl is unportable - " "use gnulib module remainderl for portability"); # endif #endif #if @GNULIB_RINTF@ # if !@HAVE_DECL_RINTF@ _GL_FUNCDECL_SYS (rintf, float, (float x)); # endif _GL_CXXALIAS_SYS (rintf, float, (float x)); _GL_CXXALIASWARN (rintf); #elif defined GNULIB_POSIXCHECK # undef rintf # if HAVE_RAW_DECL_RINTF _GL_WARN_ON_USE (rintf, "rintf is unportable - " "use gnulib module rintf for portability"); # endif #endif #if @GNULIB_RINT@ # if !@HAVE_RINT@ _GL_FUNCDECL_SYS (rint, double, (double x)); # endif _GL_CXXALIAS_SYS (rint, double, (double x)); _GL_CXXALIASWARN (rint); #elif defined GNULIB_POSIXCHECK # undef rint # if HAVE_RAW_DECL_RINT _GL_WARN_ON_USE (rint, "rint is unportable - " "use gnulib module rint for portability"); # endif #endif #if @GNULIB_RINTL@ # if !@HAVE_RINTL@ _GL_FUNCDECL_SYS (rintl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (rintl, long double, (long double x)); _GL_CXXALIASWARN (rintl); #elif defined GNULIB_POSIXCHECK # undef rintl # if HAVE_RAW_DECL_RINTL _GL_WARN_ON_USE (rintl, "rintl is unportable - " "use gnulib module rintl for portability"); # endif #endif #if @GNULIB_ROUNDF@ # if @REPLACE_ROUNDF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef roundf # define roundf rpl_roundf # endif _GL_FUNCDECL_RPL (roundf, float, (float x)); _GL_CXXALIAS_RPL (roundf, float, (float x)); # else # if !@HAVE_DECL_ROUNDF@ _GL_FUNCDECL_SYS (roundf, float, (float x)); # endif _GL_CXXALIAS_SYS (roundf, float, (float x)); # endif _GL_CXXALIASWARN (roundf); #elif defined GNULIB_POSIXCHECK # undef roundf # if HAVE_RAW_DECL_ROUNDF _GL_WARN_ON_USE (roundf, "roundf is unportable - " "use gnulib module roundf for portability"); # endif #endif #if @GNULIB_ROUND@ # if @REPLACE_ROUND@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef round # define round rpl_round # endif _GL_FUNCDECL_RPL (round, double, (double x)); _GL_CXXALIAS_RPL (round, double, (double x)); # else # if !@HAVE_DECL_ROUND@ _GL_FUNCDECL_SYS (round, double, (double x)); # endif _GL_CXXALIAS_SYS (round, double, (double x)); # endif _GL_CXXALIASWARN (round); #elif defined GNULIB_POSIXCHECK # undef round # if HAVE_RAW_DECL_ROUND _GL_WARN_ON_USE (round, "round is unportable - " "use gnulib module round for portability"); # endif #endif #if @GNULIB_ROUNDL@ # if @REPLACE_ROUNDL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef roundl # define roundl rpl_roundl # endif _GL_FUNCDECL_RPL (roundl, long double, (long double x)); _GL_CXXALIAS_RPL (roundl, long double, (long double x)); # else # if !@HAVE_DECL_ROUNDL@ # undef roundl _GL_FUNCDECL_SYS (roundl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (roundl, long double, (long double x)); # endif _GL_CXXALIASWARN (roundl); #elif defined GNULIB_POSIXCHECK # undef roundl # if HAVE_RAW_DECL_ROUNDL _GL_WARN_ON_USE (roundl, "roundl is unportable - " "use gnulib module roundl for portability"); # endif #endif #if @GNULIB_SINF@ # if @REPLACE_SINF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sinf # define sinf rpl_sinf # endif _GL_FUNCDECL_RPL (sinf, float, (float x)); _GL_CXXALIAS_RPL (sinf, float, (float x)); # else # if !@HAVE_SINF@ # undef sinf _GL_FUNCDECL_SYS (sinf, float, (float x)); # endif _GL_CXXALIAS_SYS (sinf, float, (float x)); # endif _GL_CXXALIASWARN (sinf); #elif defined GNULIB_POSIXCHECK # undef sinf # if HAVE_RAW_DECL_SINF _GL_WARN_ON_USE (sinf, "sinf is unportable - " "use gnulib module sinf for portability"); # endif #endif #if @GNULIB_SINL@ # if !@HAVE_SINL@ || !@HAVE_DECL_SINL@ # undef sinl _GL_FUNCDECL_SYS (sinl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (sinl, long double, (long double x)); _GL_CXXALIASWARN (sinl); #elif defined GNULIB_POSIXCHECK # undef sinl # if HAVE_RAW_DECL_SINL _GL_WARN_ON_USE (sinl, "sinl is unportable - " "use gnulib module sinl for portability"); # endif #endif #if @GNULIB_SINHF@ # if @REPLACE_SINHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sinhf # define sinhf rpl_sinhf # endif _GL_FUNCDECL_RPL (sinhf, float, (float x)); _GL_CXXALIAS_RPL (sinhf, float, (float x)); # else # if !@HAVE_SINHF@ # undef sinhf _GL_FUNCDECL_SYS (sinhf, float, (float x)); # endif _GL_CXXALIAS_SYS (sinhf, float, (float x)); # endif _GL_CXXALIASWARN (sinhf); #elif defined GNULIB_POSIXCHECK # undef sinhf # if HAVE_RAW_DECL_SINHF _GL_WARN_ON_USE (sinhf, "sinhf is unportable - " "use gnulib module sinhf for portability"); # endif #endif #if @GNULIB_SQRTF@ # if @REPLACE_SQRTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sqrtf # define sqrtf rpl_sqrtf # endif _GL_FUNCDECL_RPL (sqrtf, float, (float x)); _GL_CXXALIAS_RPL (sqrtf, float, (float x)); # else # if !@HAVE_SQRTF@ # undef sqrtf _GL_FUNCDECL_SYS (sqrtf, float, (float x)); # endif _GL_CXXALIAS_SYS (sqrtf, float, (float x)); # endif _GL_CXXALIASWARN (sqrtf); #elif defined GNULIB_POSIXCHECK # undef sqrtf # if HAVE_RAW_DECL_SQRTF _GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - " "use gnulib module sqrtf for portability"); # endif #endif #if @GNULIB_SQRTL@ # if @REPLACE_SQRTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sqrtl # define sqrtl rpl_sqrtl # endif _GL_FUNCDECL_RPL (sqrtl, long double, (long double x)); _GL_CXXALIAS_RPL (sqrtl, long double, (long double x)); # else # if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@ # undef sqrtl _GL_FUNCDECL_SYS (sqrtl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (sqrtl, long double, (long double x)); # endif _GL_CXXALIASWARN (sqrtl); #elif defined GNULIB_POSIXCHECK # undef sqrtl # if HAVE_RAW_DECL_SQRTL _GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - " "use gnulib module sqrtl for portability"); # endif #endif #if @GNULIB_TANF@ # if @REPLACE_TANF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tanf # define tanf rpl_tanf # endif _GL_FUNCDECL_RPL (tanf, float, (float x)); _GL_CXXALIAS_RPL (tanf, float, (float x)); # else # if !@HAVE_TANF@ # undef tanf _GL_FUNCDECL_SYS (tanf, float, (float x)); # endif _GL_CXXALIAS_SYS (tanf, float, (float x)); # endif _GL_CXXALIASWARN (tanf); #elif defined GNULIB_POSIXCHECK # undef tanf # if HAVE_RAW_DECL_TANF _GL_WARN_ON_USE (tanf, "tanf is unportable - " "use gnulib module tanf for portability"); # endif #endif #if @GNULIB_TANL@ # if !@HAVE_TANL@ || !@HAVE_DECL_TANL@ # undef tanl _GL_FUNCDECL_SYS (tanl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (tanl, long double, (long double x)); _GL_CXXALIASWARN (tanl); #elif defined GNULIB_POSIXCHECK # undef tanl # if HAVE_RAW_DECL_TANL _GL_WARN_ON_USE (tanl, "tanl is unportable - " "use gnulib module tanl for portability"); # endif #endif #if @GNULIB_TANHF@ # if @REPLACE_TANHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tanhf # define tanhf rpl_tanhf # endif _GL_FUNCDECL_RPL (tanhf, float, (float x)); _GL_CXXALIAS_RPL (tanhf, float, (float x)); # else # if !@HAVE_TANHF@ # undef tanhf _GL_FUNCDECL_SYS (tanhf, float, (float x)); # endif _GL_CXXALIAS_SYS (tanhf, float, (float x)); # endif _GL_CXXALIASWARN (tanhf); #elif defined GNULIB_POSIXCHECK # undef tanhf # if HAVE_RAW_DECL_TANHF _GL_WARN_ON_USE (tanhf, "tanhf is unportable - " "use gnulib module tanhf for portability"); # endif #endif #if @GNULIB_TRUNCF@ # if @REPLACE_TRUNCF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncf # define truncf rpl_truncf # endif _GL_FUNCDECL_RPL (truncf, float, (float x)); _GL_CXXALIAS_RPL (truncf, float, (float x)); # else # if !@HAVE_DECL_TRUNCF@ _GL_FUNCDECL_SYS (truncf, float, (float x)); # endif _GL_CXXALIAS_SYS (truncf, float, (float x)); # endif _GL_CXXALIASWARN (truncf); #elif defined GNULIB_POSIXCHECK # undef truncf # if HAVE_RAW_DECL_TRUNCF _GL_WARN_ON_USE (truncf, "truncf is unportable - " "use gnulib module truncf for portability"); # endif #endif #if @GNULIB_TRUNC@ # if @REPLACE_TRUNC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef trunc # define trunc rpl_trunc # endif _GL_FUNCDECL_RPL (trunc, double, (double x)); _GL_CXXALIAS_RPL (trunc, double, (double x)); # else # if !@HAVE_DECL_TRUNC@ _GL_FUNCDECL_SYS (trunc, double, (double x)); # endif _GL_CXXALIAS_SYS (trunc, double, (double x)); # endif _GL_CXXALIASWARN (trunc); #elif defined GNULIB_POSIXCHECK # undef trunc # if HAVE_RAW_DECL_TRUNC _GL_WARN_ON_USE (trunc, "trunc is unportable - " "use gnulib module trunc for portability"); # endif #endif #if @GNULIB_TRUNCL@ # if @REPLACE_TRUNCL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncl # define truncl rpl_truncl # endif _GL_FUNCDECL_RPL (truncl, long double, (long double x)); _GL_CXXALIAS_RPL (truncl, long double, (long double x)); # else # if !@HAVE_DECL_TRUNCL@ _GL_FUNCDECL_SYS (truncl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (truncl, long double, (long double x)); # endif _GL_CXXALIASWARN (truncl); #elif defined GNULIB_POSIXCHECK # undef truncl # if HAVE_RAW_DECL_TRUNCL _GL_WARN_ON_USE (truncl, "truncl is unportable - " "use gnulib module truncl for portability"); # endif #endif /* Definitions of function-like macros come here, after the function declarations. */ #if @GNULIB_ISFINITE@ # if @REPLACE_ISFINITE@ _GL_EXTERN_C int gl_isfinitef (float x); _GL_EXTERN_C int gl_isfinited (double x); _GL_EXTERN_C int gl_isfinitel (long double x); # undef isfinite # define isfinite(x) \ (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ sizeof (x) == sizeof (double) ? gl_isfinited (x) : \ gl_isfinitef (x)) # endif # ifdef __cplusplus # if defined isfinite || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) # undef isfinite _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite) # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isfinite _GL_WARN_REAL_FLOATING_DECL (isfinite); # undef isfinite # define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x) # endif #endif #if @GNULIB_ISINF@ # if @REPLACE_ISINF@ _GL_EXTERN_C int gl_isinff (float x); _GL_EXTERN_C int gl_isinfd (double x); _GL_EXTERN_C int gl_isinfl (long double x); # undef isinf # define isinf(x) \ (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ sizeof (x) == sizeof (double) ? gl_isinfd (x) : \ gl_isinff (x)) # endif # ifdef __cplusplus # if defined isinf || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) # undef isinf _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf) # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isinf _GL_WARN_REAL_FLOATING_DECL (isinf); # undef isinf # define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x) # endif #endif #if @GNULIB_ISNANF@ /* Test for NaN for 'float' numbers. */ # if @HAVE_ISNANF@ /* The original included above provides a declaration of isnan macro or (older) isnanf function. */ # if __GNUC__ >= 4 /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanf # define isnanf(x) __builtin_isnanf ((float)(x)) # elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) # endif # else /* Test whether X is a NaN. */ # undef isnanf # define isnanf rpl_isnanf _GL_EXTERN_C int isnanf (float x); # endif #endif #if @GNULIB_ISNAND@ /* Test for NaN for 'double' numbers. This function is a gnulib extension, unlike isnan() which applied only to 'double' numbers earlier but now is a type-generic macro. */ # if @HAVE_ISNAND@ /* The original included above provides a declaration of isnan macro. */ # if __GNUC__ >= 4 /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) # else # undef isnand # define isnand(x) isnan ((double)(x)) # endif # else /* Test whether X is a NaN. */ # undef isnand # define isnand rpl_isnand _GL_EXTERN_C int isnand (double x); # endif #endif #if @GNULIB_ISNANL@ /* Test for NaN for 'long double' numbers. */ # if @HAVE_ISNANL@ /* The original included above provides a declaration of isnan macro or (older) isnanl function. */ # if __GNUC__ >= 4 /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) # elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) # endif # else /* Test whether X is a NaN. */ # undef isnanl # define isnanl rpl_isnanl _GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST; # endif #endif /* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */ #if @GNULIB_ISNAN@ # if @REPLACE_ISNAN@ /* We can't just use the isnanf macro (e.g.) as exposed by isnanf.h (e.g.) here, because those may end up being macros that recursively expand back to isnan. So use the gnulib replacements for them directly. */ # if @HAVE_ISNANF@ && __GNUC__ >= 4 # define gl_isnan_f(x) __builtin_isnanf ((float)(x)) # else _GL_EXTERN_C int rpl_isnanf (float x); # define gl_isnan_f(x) rpl_isnanf (x) # endif # if @HAVE_ISNAND@ && __GNUC__ >= 4 # define gl_isnan_d(x) __builtin_isnan ((double)(x)) # else _GL_EXTERN_C int rpl_isnand (double x); # define gl_isnan_d(x) rpl_isnand (x) # endif # if @HAVE_ISNANL@ && __GNUC__ >= 4 # define gl_isnan_l(x) __builtin_isnanl ((long double)(x)) # else _GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; # define gl_isnan_l(x) rpl_isnanl (x) # endif # undef isnan # define isnan(x) \ (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ gl_isnan_f (x)) # elif __GNUC__ >= 4 # undef isnan # define isnan(x) \ (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \ sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \ __builtin_isnanf ((float)(x))) # endif # ifdef __cplusplus # if defined isnan || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) # undef isnan _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan) # endif # else /* Ensure isnan is a macro. */ # ifndef isnan # define isnan isnan # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isnan _GL_WARN_REAL_FLOATING_DECL (isnan); # undef isnan # define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x) # endif #endif #if @GNULIB_SIGNBIT@ # if (@REPLACE_SIGNBIT_USING_GCC@ \ && (!defined __cplusplus || __cplusplus < 201103)) # undef signbit /* GCC 4.0 and newer provides three built-ins for signbit. */ # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) # endif # if @REPLACE_SIGNBIT@ # undef signbit _GL_EXTERN_C int gl_signbitf (float arg); _GL_EXTERN_C int gl_signbitd (double arg); _GL_EXTERN_C int gl_signbitl (long double arg); # if __GNUC__ >= 2 && !defined __STRICT_ANSI__ # define _GL_NUM_UINT_WORDS(type) \ ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) # if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf # define gl_signbitf_OPTIMIZED_MACRO # define gl_signbitf(arg) \ ({ union { float _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (float)]; \ } _m; \ _m._value = (arg); \ (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ }) # endif # if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd # define gl_signbitd_OPTIMIZED_MACRO # define gl_signbitd(arg) \ ({ union { double _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (double)]; \ } _m; \ _m._value = (arg); \ (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ }) # endif # if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl # define gl_signbitl_OPTIMIZED_MACRO # define gl_signbitl(arg) \ ({ union { long double _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \ } _m; \ _m._value = (arg); \ (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ }) # endif # endif # define signbit(x) \ (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ gl_signbitf (x)) # endif # ifdef __cplusplus # if defined signbit || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) # undef signbit _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit) # endif # endif #elif defined GNULIB_POSIXCHECK # if defined signbit _GL_WARN_REAL_FLOATING_DECL (signbit); # undef signbit # define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x) # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_MATH_H */ #endif /* _@GUARD_PREFIX@_MATH_H */ gnuastro-0.5/bootstrapped/lib/locale.in.h0000644000175000017500000001600313217200021015416 00000000000000/* A POSIX . Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #ifdef _GL_ALREADY_INCLUDING_LOCALE_H /* Special invocation conventions to handle Solaris header files (through Solaris 10) when combined with gettext's libintl.h. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_LOCALE_H #define _GL_ALREADY_INCLUDING_LOCALE_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #undef _GL_ALREADY_INCLUDING_LOCALE_H #ifndef _@GUARD_PREFIX@_LOCALE_H #define _@GUARD_PREFIX@_LOCALE_H /* NetBSD 5.0 mis-defines NULL. */ #include /* Mac OS X 10.5 defines the locale_t type in . */ #if @HAVE_XLOCALE_H@ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. On systems that don't define it, use the same value as GNU libintl. */ #if !defined LC_MESSAGES # define LC_MESSAGES 1729 #endif /* Bionic libc's 'struct lconv' is just a dummy. */ #if @REPLACE_STRUCT_LCONV@ # define lconv rpl_lconv struct lconv { /* All 'char *' are actually 'const char *'. */ /* Members that depend on the LC_NUMERIC category of the locale. See */ /* Symbol used as decimal point. */ char *decimal_point; /* Symbol used to separate groups of digits to the left of the decimal point. */ char *thousands_sep; /* Definition of the size of groups of digits to the left of the decimal point. */ char *grouping; /* Members that depend on the LC_MONETARY category of the locale. See */ /* Symbol used as decimal point. */ char *mon_decimal_point; /* Symbol used to separate groups of digits to the left of the decimal point. */ char *mon_thousands_sep; /* Definition of the size of groups of digits to the left of the decimal point. */ char *mon_grouping; /* Sign used to indicate a value >= 0. */ char *positive_sign; /* Sign used to indicate a value < 0. */ char *negative_sign; /* For formatting local currency. */ /* Currency symbol (3 characters) followed by separator (1 character). */ char *currency_symbol; /* Number of digits after the decimal point. */ char frac_digits; /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char p_cs_precedes; /* For values >= 0: Position of the sign. */ char p_sign_posn; /* For values >= 0: Placement of spaces between currency symbol, sign, and number. */ char p_sep_by_space; /* For values < 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char n_cs_precedes; /* For values < 0: Position of the sign. */ char n_sign_posn; /* For values < 0: Placement of spaces between currency symbol, sign, and number. */ char n_sep_by_space; /* For formatting international currency. */ /* Currency symbol (3 characters) followed by separator (1 character). */ char *int_curr_symbol; /* Number of digits after the decimal point. */ char int_frac_digits; /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char int_p_cs_precedes; /* For values >= 0: Position of the sign. */ char int_p_sign_posn; /* For values >= 0: Placement of spaces between currency symbol, sign, and number. */ char int_p_sep_by_space; /* For values < 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char int_n_cs_precedes; /* For values < 0: Position of the sign. */ char int_n_sign_posn; /* For values < 0: Placement of spaces between currency symbol, sign, and number. */ char int_n_sep_by_space; }; #endif #if @GNULIB_LOCALECONV@ # if @REPLACE_LOCALECONV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localeconv # define localeconv rpl_localeconv # endif _GL_FUNCDECL_RPL (localeconv, struct lconv *, (void)); _GL_CXXALIAS_RPL (localeconv, struct lconv *, (void)); # else _GL_CXXALIAS_SYS (localeconv, struct lconv *, (void)); # endif _GL_CXXALIASWARN (localeconv); #elif @REPLACE_STRUCT_LCONV@ # undef localeconv # define localeconv localeconv_used_without_requesting_gnulib_module_localeconv #elif defined GNULIB_POSIXCHECK # undef localeconv # if HAVE_RAW_DECL_LOCALECONV _GL_WARN_ON_USE (localeconv, "localeconv returns too few information on some platforms - " "use gnulib module localeconv for portability"); # endif #endif #if @GNULIB_SETLOCALE@ # if @REPLACE_SETLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setlocale # define setlocale rpl_setlocale # define GNULIB_defined_setlocale 1 # endif _GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale)); _GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale)); # else _GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale)); # endif _GL_CXXALIASWARN (setlocale); #elif defined GNULIB_POSIXCHECK # undef setlocale # if HAVE_RAW_DECL_SETLOCALE _GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - " "use gnulib module setlocale for portability"); # endif #endif #if @GNULIB_DUPLOCALE@ # if @REPLACE_DUPLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef duplocale # define duplocale rpl_duplocale # endif _GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale)); # else # if @HAVE_DUPLOCALE@ _GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale)); # endif # endif # if @HAVE_DUPLOCALE@ _GL_CXXALIASWARN (duplocale); # endif #elif defined GNULIB_POSIXCHECK # undef duplocale # if HAVE_RAW_DECL_DUPLOCALE _GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - " "use gnulib module duplocale for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_LOCALE_H */ #endif /* ! _GL_ALREADY_INCLUDING_LOCALE_H */ #endif /* _@GUARD_PREFIX@_LOCALE_H */ gnuastro-0.5/bootstrapped/lib/ref-del.sin0000644000175000017500000000167613217200021015444 00000000000000# Remove this package from a list of references stored in a text file. # # Copyright (C) 2000, 2009-2017 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, see . # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// s/ @PACKAGE@ / / s/^/# Packages using this file:/ } gnuastro-0.5/bootstrapped/lib/ref-add.sin0000644000175000017500000000175313217200021015424 00000000000000# Add this package to a list of references stored in a text file. # # Copyright (C) 2000, 2009-2017 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, see . # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// ta :a s/ @PACKAGE@ / @PACKAGE@ / tb s/ $/ @PACKAGE@ / :b s/^/# Packages using this file:/ } gnuastro-0.5/bootstrapped/lib/config.charset0000644000175000017500000005473713217200021016241 00000000000000#! /bin/sh # Output a system dependent table of character encoding aliases. # # Copyright (C) 2000-2004, 2006-2017 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, see . # # The table consists of lines of the form # ALIAS CANONICAL # # ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". # ALIAS is compared in a case sensitive way. # # CANONICAL is the GNU canonical name for this character encoding. # It must be an encoding supported by libiconv. Support by GNU libc is # also desirable. CANONICAL is case insensitive. Usually an upper case # MIME charset name is preferred. # The current list of GNU canonical charset names is as follows. # # name MIME? used by which systems # (darwin = Mac OS X, woe32 = native Windows) # # ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin cygwin # ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin # ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin # ISO-8859-3 Y glibc solaris cygwin # ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin # ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin # ISO-8859-6 Y glibc aix hpux solaris cygwin # ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin cygwin # ISO-8859-8 Y glibc aix hpux osf solaris cygwin # ISO-8859-9 Y glibc aix hpux irix osf solaris darwin cygwin # ISO-8859-13 glibc netbsd openbsd darwin cygwin # ISO-8859-14 glibc cygwin # ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin cygwin # KOI8-R Y glibc solaris freebsd netbsd openbsd darwin # KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin # KOI8-T glibc # CP437 dos # CP775 dos # CP850 aix osf dos # CP852 dos # CP855 dos # CP856 aix # CP857 dos # CP861 dos # CP862 dos # CP864 dos # CP865 dos # CP866 freebsd netbsd openbsd darwin dos # CP869 dos # CP874 woe32 dos # CP922 aix # CP932 aix cygwin woe32 dos # CP943 aix # CP949 osf darwin woe32 dos # CP950 woe32 dos # CP1046 aix # CP1124 aix # CP1125 dos # CP1129 aix # CP1131 darwin # CP1250 woe32 # CP1251 glibc solaris netbsd openbsd darwin cygwin woe32 # CP1252 aix woe32 # CP1253 woe32 # CP1254 woe32 # CP1255 glibc woe32 # CP1256 woe32 # CP1257 woe32 # GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin # EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin # EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin # EUC-TW glibc aix hpux irix osf solaris netbsd # BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin # BIG5-HKSCS glibc solaris darwin # GBK glibc aix osf solaris darwin cygwin woe32 dos # GB18030 glibc solaris netbsd darwin # SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin # JOHAB glibc solaris woe32 # TIS-620 glibc aix hpux osf solaris cygwin # VISCII Y glibc # TCVN5712-1 glibc # ARMSCII-8 glibc darwin # GEORGIAN-PS glibc cygwin # PT154 glibc # HP-ROMAN8 hpux # HP-ARABIC8 hpux # HP-GREEK8 hpux # HP-HEBREW8 hpux # HP-TURKISH8 hpux # HP-KANA8 hpux # DEC-KANJI osf # DEC-HANYU osf # UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin # # Note: Names which are not marked as being a MIME name should not be used in # Internet protocols for information interchange (mail, news, etc.). # # Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications # must understand both names and treat them as equivalent. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM host="$1" os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` echo "# This file contains a table of character encoding aliases," echo "# suitable for operating system '${os}'." echo "# It was automatically generated from config.charset." # List of references, updated during installation: echo "# Packages using this file: " case "$os" in linux-gnulibc1*) # Linux libc5 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" echo "POSIX ASCII" for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ sv_FI sv_SE; do echo "$l ISO-8859-1" echo "$l.iso-8859-1 ISO-8859-1" echo "$l.iso-8859-15 ISO-8859-15" echo "$l.iso-8859-15@euro ISO-8859-15" echo "$l@euro ISO-8859-15" echo "$l.cp-437 CP437" echo "$l.cp-850 CP850" echo "$l.cp-1252 CP1252" echo "$l.cp-1252@euro CP1252" #echo "$l.atari-st ATARI-ST" # not a commonly used encoding echo "$l.utf-8 UTF-8" echo "$l.utf-8@euro UTF-8" done for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ sl_SI sr sr_CS sr_YU; do echo "$l ISO-8859-2" echo "$l.iso-8859-2 ISO-8859-2" echo "$l.cp-852 CP852" echo "$l.cp-1250 CP1250" echo "$l.utf-8 UTF-8" done for l in mk mk_MK ru ru_RU; do echo "$l ISO-8859-5" echo "$l.iso-8859-5 ISO-8859-5" echo "$l.koi8-r KOI8-R" echo "$l.cp-866 CP866" echo "$l.cp-1251 CP1251" echo "$l.utf-8 UTF-8" done for l in ar ar_SA; do echo "$l ISO-8859-6" echo "$l.iso-8859-6 ISO-8859-6" echo "$l.cp-864 CP864" #echo "$l.cp-868 CP868" # not a commonly used encoding echo "$l.cp-1256 CP1256" echo "$l.utf-8 UTF-8" done for l in el el_GR gr gr_GR; do echo "$l ISO-8859-7" echo "$l.iso-8859-7 ISO-8859-7" echo "$l.cp-869 CP869" echo "$l.cp-1253 CP1253" echo "$l.cp-1253@euro CP1253" echo "$l.utf-8 UTF-8" echo "$l.utf-8@euro UTF-8" done for l in he he_IL iw iw_IL; do echo "$l ISO-8859-8" echo "$l.iso-8859-8 ISO-8859-8" echo "$l.cp-862 CP862" echo "$l.cp-1255 CP1255" echo "$l.utf-8 UTF-8" done for l in tr tr_TR; do echo "$l ISO-8859-9" echo "$l.iso-8859-9 ISO-8859-9" echo "$l.cp-857 CP857" echo "$l.cp-1254 CP1254" echo "$l.utf-8 UTF-8" done for l in lt lt_LT lv lv_LV; do #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name echo "$l ISO-8859-13" done for l in ru_UA uk uk_UA; do echo "$l KOI8-U" done for l in zh zh_CN; do #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name echo "$l GB2312" done for l in ja ja_JP ja_JP.EUC; do echo "$l EUC-JP" done for l in ko ko_KR; do echo "$l EUC-KR" done for l in th th_TH; do echo "$l TIS-620" done for l in fa fa_IR; do #echo "$l ISIRI-3342" # a broken encoding echo "$l.utf-8 UTF-8" done ;; linux* | *-gnu*) # With glibc-2.1 or newer, we don't need any canonicalization, # because glibc has iconv and both glibc and libiconv support all # GNU canonical names directly. Therefore, the Makefile does not # need to install the alias file at all. # The following applies only to glibc-2.0.x and older libcs. echo "ISO_646.IRV:1983 ASCII" ;; aix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "IBM-850 CP850" echo "IBM-856 CP856" echo "IBM-921 ISO-8859-13" echo "IBM-922 CP922" echo "IBM-932 CP932" echo "IBM-943 CP943" echo "IBM-1046 CP1046" echo "IBM-1124 CP1124" echo "IBM-1129 CP1129" echo "IBM-1252 CP1252" echo "IBM-eucCN GB2312" echo "IBM-eucJP EUC-JP" echo "IBM-eucKR EUC-KR" echo "IBM-eucTW EUC-TW" echo "big5 BIG5" echo "GBK GBK" echo "TIS-620 TIS-620" echo "UTF-8 UTF-8" ;; hpux*) echo "iso88591 ISO-8859-1" echo "iso88592 ISO-8859-2" echo "iso88595 ISO-8859-5" echo "iso88596 ISO-8859-6" echo "iso88597 ISO-8859-7" echo "iso88598 ISO-8859-8" echo "iso88599 ISO-8859-9" echo "iso885915 ISO-8859-15" echo "roman8 HP-ROMAN8" echo "arabic8 HP-ARABIC8" echo "greek8 HP-GREEK8" echo "hebrew8 HP-HEBREW8" echo "turkish8 HP-TURKISH8" echo "kana8 HP-KANA8" echo "tis620 TIS-620" echo "big5 BIG5" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "hp15CN GB2312" #echo "ccdc ?" # what is this? echo "SJIS SHIFT_JIS" echo "utf8 UTF-8" ;; irix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-9 ISO-8859-9" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" ;; osf*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "cp850 CP850" echo "big5 BIG5" echo "dechanyu DEC-HANYU" echo "dechanzi GB2312" echo "deckanji DEC-KANJI" echo "deckorean EUC-KR" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "GBK GBK" echo "KSC5601 CP949" echo "sdeckanji EUC-JP" echo "SJIS SHIFT_JIS" echo "TACTIS TIS-620" echo "UTF-8 UTF-8" ;; solaris*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-3 ISO-8859-3" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "koi8-r KOI8-R" echo "ansi-1251 CP1251" echo "BIG5 BIG5" echo "Big5-HKSCS BIG5-HKSCS" echo "gb2312 GB2312" echo "GBK GBK" echo "GB18030 GB18030" echo "cns11643 EUC-TW" echo "5601 EUC-KR" echo "ko_KR.johap92 JOHAB" echo "eucJP EUC-JP" echo "PCK SHIFT_JIS" echo "TIS620.2533 TIS-620" #echo "sun_eu_greek ?" # what is this? echo "UTF-8 UTF-8" ;; freebsd*) # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" echo "US-ASCII ASCII" for l in la_LN lt_LN; do echo "$l.ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do echo "$l.ISO_8859-1 ISO-8859-1" echo "$l.DIS_8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do echo "$l.ISO_8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO_8859-4 ISO-8859-4" done for l in ru_RU ru_SU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO_8859-5 ISO-8859-5" echo "$l.CP866 CP866" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ja_JP.Shift_JIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; netbsd*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-13 ISO-8859-13" echo "ISO8859-15 ISO-8859-15" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "BIG5 BIG5" echo "SJIS SHIFT_JIS" ;; openbsd*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-13 ISO-8859-13" echo "ISO8859-15 ISO-8859-15" ;; darwin[56]*) # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" for l in en_AU en_CA en_GB en_US la_LN; do echo "$l.US-ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ nl_NL no_NO pt_PT sv_SE; do echo "$l ISO-8859-1" echo "$l.ISO8859-1 ISO-8859-1" echo "$l.ISO8859-15 ISO-8859-15" done for l in la_LN; do echo "$l.ISO8859-1 ISO-8859-1" echo "$l.ISO8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do echo "$l.ISO8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO8859-4 ISO-8859-4" done for l in ru_RU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO8859-5 ISO-8859-5" echo "$l.CP866 CP866" done for l in bg_BG; do echo "$l.CP1251 CP1251" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; darwin*) # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is # useless: # - It returns the empty string when LANG is set to a locale of the # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 # LC_CTYPE file. # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. # - The documentation says: # "... all code that calls BSD system routines should ensure # that the const *char parameters of these routines are in UTF-8 # encoding. All BSD system functions expect their string # parameters to be in UTF-8 encoding and nothing else." # It also says # "An additional caveat is that string parameters for files, # paths, and other file-system entities must be in canonical # UTF-8. In a canonical UTF-8 Unicode string, all decomposable # characters are decomposed ..." # but this is not true: You can pass non-decomposed UTF-8 strings # to file system functions, and it is the OS which will convert # them to decomposed UTF-8 before accessing the file system. # - The Apple Terminal application displays UTF-8 by default. # - However, other applications are free to use different encodings: # - xterm uses ISO-8859-1 by default. # - TextEdit uses MacRoman by default. # We prefer UTF-8 over decomposed UTF-8-MAC because one should # minimize the use of decomposed Unicode. Unfortunately, through the # Darwin file system, decomposed UTF-8 strings are leaked into user # space nevertheless. # Then there are also the locales with encodings other than US-ASCII # and UTF-8. These locales can be occasionally useful to users (e.g. # when grepping through ISO-8859-1 encoded text files), when all their # file names are in US-ASCII. echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-13 ISO-8859-13" echo "ISO8859-15 ISO-8859-15" echo "KOI8-R KOI8-R" echo "KOI8-U KOI8-U" echo "CP866 CP866" echo "CP949 CP949" echo "CP1131 CP1131" echo "CP1251 CP1251" echo "eucCN GB2312" echo "GB2312 GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "Big5 BIG5" echo "Big5HKSCS BIG5-HKSCS" echo "GBK GBK" echo "GB18030 GB18030" echo "SJIS SHIFT_JIS" echo "ARMSCII-8 ARMSCII-8" echo "PT154 PT154" #echo "ISCII-DEV ?" echo "* UTF-8" ;; beos* | haiku*) # BeOS and Haiku have a single locale, and it has UTF-8 encoding. echo "* UTF-8" ;; msdosdjgpp*) # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "#" echo "# The encodings given here may not all be correct." echo "# If you find that the encoding given for your language and" echo "# country is not the one your DOS machine actually uses, just" echo "# correct it in this file, and send a mail to" echo "# Juan Manuel Guerrero " echo "# and Bruno Haible ." echo "#" echo "C ASCII" # ISO-8859-1 languages echo "ca CP850" echo "ca_ES CP850" echo "da CP865" # not CP850 ?? echo "da_DK CP865" # not CP850 ?? echo "de CP850" echo "de_AT CP850" echo "de_CH CP850" echo "de_DE CP850" echo "en CP850" echo "en_AU CP850" # not CP437 ?? echo "en_CA CP850" echo "en_GB CP850" echo "en_NZ CP437" echo "en_US CP437" echo "en_ZA CP850" # not CP437 ?? echo "es CP850" echo "es_AR CP850" echo "es_BO CP850" echo "es_CL CP850" echo "es_CO CP850" echo "es_CR CP850" echo "es_CU CP850" echo "es_DO CP850" echo "es_EC CP850" echo "es_ES CP850" echo "es_GT CP850" echo "es_HN CP850" echo "es_MX CP850" echo "es_NI CP850" echo "es_PA CP850" echo "es_PY CP850" echo "es_PE CP850" echo "es_SV CP850" echo "es_UY CP850" echo "es_VE CP850" echo "et CP850" echo "et_EE CP850" echo "eu CP850" echo "eu_ES CP850" echo "fi CP850" echo "fi_FI CP850" echo "fr CP850" echo "fr_BE CP850" echo "fr_CA CP850" echo "fr_CH CP850" echo "fr_FR CP850" echo "ga CP850" echo "ga_IE CP850" echo "gd CP850" echo "gd_GB CP850" echo "gl CP850" echo "gl_ES CP850" echo "id CP850" # not CP437 ?? echo "id_ID CP850" # not CP437 ?? echo "is CP861" # not CP850 ?? echo "is_IS CP861" # not CP850 ?? echo "it CP850" echo "it_CH CP850" echo "it_IT CP850" echo "lt CP775" echo "lt_LT CP775" echo "lv CP775" echo "lv_LV CP775" echo "nb CP865" # not CP850 ?? echo "nb_NO CP865" # not CP850 ?? echo "nl CP850" echo "nl_BE CP850" echo "nl_NL CP850" echo "nn CP865" # not CP850 ?? echo "nn_NO CP865" # not CP850 ?? echo "no CP865" # not CP850 ?? echo "no_NO CP865" # not CP850 ?? echo "pt CP850" echo "pt_BR CP850" echo "pt_PT CP850" echo "sv CP850" echo "sv_SE CP850" # ISO-8859-2 languages echo "cs CP852" echo "cs_CZ CP852" echo "hr CP852" echo "hr_HR CP852" echo "hu CP852" echo "hu_HU CP852" echo "pl CP852" echo "pl_PL CP852" echo "ro CP852" echo "ro_RO CP852" echo "sk CP852" echo "sk_SK CP852" echo "sl CP852" echo "sl_SI CP852" echo "sq CP852" echo "sq_AL CP852" echo "sr CP852" # CP852 or CP866 or CP855 ?? echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? # ISO-8859-3 languages echo "mt CP850" echo "mt_MT CP850" # ISO-8859-5 languages echo "be CP866" echo "be_BE CP866" echo "bg CP866" # not CP855 ?? echo "bg_BG CP866" # not CP855 ?? echo "mk CP866" # not CP855 ?? echo "mk_MK CP866" # not CP855 ?? echo "ru CP866" echo "ru_RU CP866" echo "uk CP1125" echo "uk_UA CP1125" # ISO-8859-6 languages echo "ar CP864" echo "ar_AE CP864" echo "ar_DZ CP864" echo "ar_EG CP864" echo "ar_IQ CP864" echo "ar_IR CP864" echo "ar_JO CP864" echo "ar_KW CP864" echo "ar_MA CP864" echo "ar_OM CP864" echo "ar_QA CP864" echo "ar_SA CP864" echo "ar_SY CP864" # ISO-8859-7 languages echo "el CP869" echo "el_GR CP869" # ISO-8859-8 languages echo "he CP862" echo "he_IL CP862" # ISO-8859-9 languages echo "tr CP857" echo "tr_TR CP857" # Japanese echo "ja CP932" echo "ja_JP CP932" # Chinese echo "zh_CN GBK" echo "zh_TW CP950" # not CP938 ?? # Korean echo "kr CP949" # not CP934 ?? echo "kr_KR CP949" # not CP934 ?? # Thai echo "th CP874" echo "th_TH CP874" # Other echo "eo CP850" echo "eo_EO CP850" ;; esac gnuastro-0.5/bootstrapped/lib/limits.in.h0000644000175000017500000000605113217200021015462 00000000000000/* A GNU-like . Copyright 2016-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_LIMITS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_LIMITS_H@ #ifndef _@GUARD_PREFIX@_LIMITS_H #define _@GUARD_PREFIX@_LIMITS_H /* For HP-UX 11.31. */ #if defined LONG_LONG_MIN && !defined LLONG_MIN # define LLONG_MIN LONG_LONG_MIN #endif #if defined LONG_LONG_MAX && !defined LLONG_MAX # define LLONG_MAX LONG_LONG_MAX #endif #if defined ULONG_LONG_MAX && !defined ULLONG_MAX # define ULLONG_MAX ULONG_LONG_MAX #endif /* The number of usable bits in an unsigned or signed integer type with minimum value MIN and maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits"). */ #define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) #define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) #define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) #define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) #define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) #define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) #define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (! defined ULLONG_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) # define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) # define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) # define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) # define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) # define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) # define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) # define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) # define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) # define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) # define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) #endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ gnuastro-0.5/bootstrapped/lib/langinfo.in.h0000644000175000017500000001321313217200021015754 00000000000000/* Substitute for and wrapper around . Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* * POSIX for platforms that lack it or have an incomplete one. * */ #ifndef _@GUARD_PREFIX@_LANGINFO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_LANGINFO_H@ # @INCLUDE_NEXT@ @NEXT_LANGINFO_H@ #endif #ifndef _@GUARD_PREFIX@_LANGINFO_H #define _@GUARD_PREFIX@_LANGINFO_H #if !@HAVE_LANGINFO_H@ /* A platform that lacks . */ /* Assume that it also lacks and the nl_item type. */ # if !GNULIB_defined_nl_item typedef int nl_item; # define GNULIB_defined_nl_item 1 # endif /* nl_langinfo items of the LC_CTYPE category */ # define CODESET 10000 /* nl_langinfo items of the LC_NUMERIC category */ # define RADIXCHAR 10001 # define DECIMAL_POINT RADIXCHAR # define THOUSEP 10002 # define THOUSANDS_SEP THOUSEP # define GROUPING 10114 /* nl_langinfo items of the LC_TIME category */ # define D_T_FMT 10003 # define D_FMT 10004 # define T_FMT 10005 # define T_FMT_AMPM 10006 # define AM_STR 10007 # define PM_STR 10008 # define DAY_1 10009 # define DAY_2 (DAY_1 + 1) # define DAY_3 (DAY_1 + 2) # define DAY_4 (DAY_1 + 3) # define DAY_5 (DAY_1 + 4) # define DAY_6 (DAY_1 + 5) # define DAY_7 (DAY_1 + 6) # define ABDAY_1 10016 # define ABDAY_2 (ABDAY_1 + 1) # define ABDAY_3 (ABDAY_1 + 2) # define ABDAY_4 (ABDAY_1 + 3) # define ABDAY_5 (ABDAY_1 + 4) # define ABDAY_6 (ABDAY_1 + 5) # define ABDAY_7 (ABDAY_1 + 6) # define MON_1 10023 # define MON_2 (MON_1 + 1) # define MON_3 (MON_1 + 2) # define MON_4 (MON_1 + 3) # define MON_5 (MON_1 + 4) # define MON_6 (MON_1 + 5) # define MON_7 (MON_1 + 6) # define MON_8 (MON_1 + 7) # define MON_9 (MON_1 + 8) # define MON_10 (MON_1 + 9) # define MON_11 (MON_1 + 10) # define MON_12 (MON_1 + 11) # define ABMON_1 10035 # define ABMON_2 (ABMON_1 + 1) # define ABMON_3 (ABMON_1 + 2) # define ABMON_4 (ABMON_1 + 3) # define ABMON_5 (ABMON_1 + 4) # define ABMON_6 (ABMON_1 + 5) # define ABMON_7 (ABMON_1 + 6) # define ABMON_8 (ABMON_1 + 7) # define ABMON_9 (ABMON_1 + 8) # define ABMON_10 (ABMON_1 + 9) # define ABMON_11 (ABMON_1 + 10) # define ABMON_12 (ABMON_1 + 11) # define ERA 10047 # define ERA_D_FMT 10048 # define ERA_D_T_FMT 10049 # define ERA_T_FMT 10050 # define ALT_DIGITS 10051 /* nl_langinfo items of the LC_MONETARY category */ # define CRNCYSTR 10052 # define CURRENCY_SYMBOL CRNCYSTR # define INT_CURR_SYMBOL 10100 # define MON_DECIMAL_POINT 10101 # define MON_THOUSANDS_SEP 10102 # define MON_GROUPING 10103 # define POSITIVE_SIGN 10104 # define NEGATIVE_SIGN 10105 # define FRAC_DIGITS 10106 # define INT_FRAC_DIGITS 10107 # define P_CS_PRECEDES 10108 # define N_CS_PRECEDES 10109 # define P_SEP_BY_SPACE 10110 # define N_SEP_BY_SPACE 10111 # define P_SIGN_POSN 10112 # define N_SIGN_POSN 10113 /* nl_langinfo items of the LC_MESSAGES category */ # define YESEXPR 10053 # define NOEXPR 10054 #else /* A platform that has . */ # if !@HAVE_LANGINFO_CODESET@ # define CODESET 10000 # define GNULIB_defined_CODESET 1 # endif # if !@HAVE_LANGINFO_T_FMT_AMPM@ # define T_FMT_AMPM 10006 # define GNULIB_defined_T_FMT_AMPM 1 # endif # if !@HAVE_LANGINFO_ERA@ # define ERA 10047 # define ERA_D_FMT 10048 # define ERA_D_T_FMT 10049 # define ERA_T_FMT 10050 # define ALT_DIGITS 10051 # define GNULIB_defined_ERA 1 # endif # if !@HAVE_LANGINFO_YESEXPR@ # define YESEXPR 10053 # define NOEXPR 10054 # define GNULIB_defined_YESEXPR 1 # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ /* Return a piece of locale dependent information. Note: The difference between nl_langinfo (CODESET) and locale_charset () is that the latter normalizes the encoding names to GNU conventions. */ #if @GNULIB_NL_LANGINFO@ # if @REPLACE_NL_LANGINFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef nl_langinfo # define nl_langinfo rpl_nl_langinfo # endif _GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item)); _GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item)); # else # if !@HAVE_NL_LANGINFO@ _GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item)); # endif _GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item)); # endif _GL_CXXALIASWARN (nl_langinfo); #elif defined GNULIB_POSIXCHECK # undef nl_langinfo # if HAVE_RAW_DECL_NL_LANGINFO _GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - " "use gnulib module nl_langinfo for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_LANGINFO_H */ #endif /* _@GUARD_PREFIX@_LANGINFO_H */ gnuastro-0.5/bootstrapped/lib/inttypes.in.h0000644000175000017500000006476213217200021016055 00000000000000/* Copyright (C) 2006-2017 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Derek Price. This file is part of gnulib. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* * ISO C 99 for platforms that lack it. * */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Include the original if it exists, and if this file has not been included yet or if this file includes gnulib stdint.h which in turn includes this file. The include_next requires a split double-inclusion guard. */ #if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H # if @HAVE_INTTYPES_H@ /* Some pre-C++11 implementations need this. */ # if defined __cplusplus && ! defined __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS 1 # endif # @INCLUDE_NEXT@ @NEXT_INTTYPES_H@ # endif #endif #if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H #define INTTYPES_H /* Include or the gnulib replacement. But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include #endif /* Get CHAR_BIT. */ #include /* On mingw, __USE_MINGW_ANSI_STDIO only works if is also included */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include #endif #if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX) # error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to ." #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* 7.8.1 Macros for format specifiers */ #if defined _TNS_R_TARGET /* Tandem NonStop R series and compatible platforms released before July 2005 support %Ld but not %lld. */ # define _LONG_LONG_FORMAT_PREFIX "L" #else # define _LONG_LONG_FORMAT_PREFIX "ll" #endif #if !defined PRId8 || @PRI_MACROS_BROKEN@ # undef PRId8 # ifdef INT8_MAX # define PRId8 "d" # endif #endif #if !defined PRIi8 || @PRI_MACROS_BROKEN@ # undef PRIi8 # ifdef INT8_MAX # define PRIi8 "i" # endif #endif #if !defined PRIo8 || @PRI_MACROS_BROKEN@ # undef PRIo8 # ifdef UINT8_MAX # define PRIo8 "o" # endif #endif #if !defined PRIu8 || @PRI_MACROS_BROKEN@ # undef PRIu8 # ifdef UINT8_MAX # define PRIu8 "u" # endif #endif #if !defined PRIx8 || @PRI_MACROS_BROKEN@ # undef PRIx8 # ifdef UINT8_MAX # define PRIx8 "x" # endif #endif #if !defined PRIX8 || @PRI_MACROS_BROKEN@ # undef PRIX8 # ifdef UINT8_MAX # define PRIX8 "X" # endif #endif #if !defined PRId16 || @PRI_MACROS_BROKEN@ # undef PRId16 # ifdef INT16_MAX # define PRId16 "d" # endif #endif #if !defined PRIi16 || @PRI_MACROS_BROKEN@ # undef PRIi16 # ifdef INT16_MAX # define PRIi16 "i" # endif #endif #if !defined PRIo16 || @PRI_MACROS_BROKEN@ # undef PRIo16 # ifdef UINT16_MAX # define PRIo16 "o" # endif #endif #if !defined PRIu16 || @PRI_MACROS_BROKEN@ # undef PRIu16 # ifdef UINT16_MAX # define PRIu16 "u" # endif #endif #if !defined PRIx16 || @PRI_MACROS_BROKEN@ # undef PRIx16 # ifdef UINT16_MAX # define PRIx16 "x" # endif #endif #if !defined PRIX16 || @PRI_MACROS_BROKEN@ # undef PRIX16 # ifdef UINT16_MAX # define PRIX16 "X" # endif #endif #if !defined PRId32 || @PRI_MACROS_BROKEN@ # undef PRId32 # ifdef INT32_MAX # define PRId32 "d" # endif #endif #if !defined PRIi32 || @PRI_MACROS_BROKEN@ # undef PRIi32 # ifdef INT32_MAX # define PRIi32 "i" # endif #endif #if !defined PRIo32 || @PRI_MACROS_BROKEN@ # undef PRIo32 # ifdef UINT32_MAX # define PRIo32 "o" # endif #endif #if !defined PRIu32 || @PRI_MACROS_BROKEN@ # undef PRIu32 # ifdef UINT32_MAX # define PRIu32 "u" # endif #endif #if !defined PRIx32 || @PRI_MACROS_BROKEN@ # undef PRIx32 # ifdef UINT32_MAX # define PRIx32 "x" # endif #endif #if !defined PRIX32 || @PRI_MACROS_BROKEN@ # undef PRIX32 # ifdef UINT32_MAX # define PRIX32 "X" # endif #endif #ifdef INT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) # define _PRI64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRI64_PREFIX "I64" # elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 # define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRId64 || @PRI_MACROS_BROKEN@ # undef PRId64 # define PRId64 _PRI64_PREFIX "d" # endif # if !defined PRIi64 || @PRI_MACROS_BROKEN@ # undef PRIi64 # define PRIi64 _PRI64_PREFIX "i" # endif #endif #ifdef UINT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) # define _PRIu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRIu64_PREFIX "I64" # elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 # define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRIo64 || @PRI_MACROS_BROKEN@ # undef PRIo64 # define PRIo64 _PRIu64_PREFIX "o" # endif # if !defined PRIu64 || @PRI_MACROS_BROKEN@ # undef PRIu64 # define PRIu64 _PRIu64_PREFIX "u" # endif # if !defined PRIx64 || @PRI_MACROS_BROKEN@ # undef PRIx64 # define PRIx64 _PRIu64_PREFIX "x" # endif # if !defined PRIX64 || @PRI_MACROS_BROKEN@ # undef PRIX64 # define PRIX64 _PRIu64_PREFIX "X" # endif #endif #if !defined PRIdLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIdLEAST8 # define PRIdLEAST8 "d" #endif #if !defined PRIiLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIiLEAST8 # define PRIiLEAST8 "i" #endif #if !defined PRIoLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIoLEAST8 # define PRIoLEAST8 "o" #endif #if !defined PRIuLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIuLEAST8 # define PRIuLEAST8 "u" #endif #if !defined PRIxLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIxLEAST8 # define PRIxLEAST8 "x" #endif #if !defined PRIXLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIXLEAST8 # define PRIXLEAST8 "X" #endif #if !defined PRIdLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIdLEAST16 # define PRIdLEAST16 "d" #endif #if !defined PRIiLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIiLEAST16 # define PRIiLEAST16 "i" #endif #if !defined PRIoLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIoLEAST16 # define PRIoLEAST16 "o" #endif #if !defined PRIuLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIuLEAST16 # define PRIuLEAST16 "u" #endif #if !defined PRIxLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIxLEAST16 # define PRIxLEAST16 "x" #endif #if !defined PRIXLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIXLEAST16 # define PRIXLEAST16 "X" #endif #if !defined PRIdLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIdLEAST32 # define PRIdLEAST32 "d" #endif #if !defined PRIiLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIiLEAST32 # define PRIiLEAST32 "i" #endif #if !defined PRIoLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIoLEAST32 # define PRIoLEAST32 "o" #endif #if !defined PRIuLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIuLEAST32 # define PRIuLEAST32 "u" #endif #if !defined PRIxLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIxLEAST32 # define PRIxLEAST32 "x" #endif #if !defined PRIXLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIXLEAST32 # define PRIXLEAST32 "X" #endif #ifdef INT64_MAX # if !defined PRIdLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIdLEAST64 # define PRIdLEAST64 PRId64 # endif # if !defined PRIiLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIiLEAST64 # define PRIiLEAST64 PRIi64 # endif #endif #ifdef UINT64_MAX # if !defined PRIoLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIoLEAST64 # define PRIoLEAST64 PRIo64 # endif # if !defined PRIuLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIuLEAST64 # define PRIuLEAST64 PRIu64 # endif # if !defined PRIxLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIxLEAST64 # define PRIxLEAST64 PRIx64 # endif # if !defined PRIXLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIXLEAST64 # define PRIXLEAST64 PRIX64 # endif #endif #if !defined PRIdFAST8 || @PRI_MACROS_BROKEN@ # undef PRIdFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIdFAST8 PRId64 # else # define PRIdFAST8 "d" # endif #endif #if !defined PRIiFAST8 || @PRI_MACROS_BROKEN@ # undef PRIiFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIiFAST8 PRIi64 # else # define PRIiFAST8 "i" # endif #endif #if !defined PRIoFAST8 || @PRI_MACROS_BROKEN@ # undef PRIoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIoFAST8 PRIo64 # else # define PRIoFAST8 "o" # endif #endif #if !defined PRIuFAST8 || @PRI_MACROS_BROKEN@ # undef PRIuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIuFAST8 PRIu64 # else # define PRIuFAST8 "u" # endif #endif #if !defined PRIxFAST8 || @PRI_MACROS_BROKEN@ # undef PRIxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIxFAST8 PRIx64 # else # define PRIxFAST8 "x" # endif #endif #if !defined PRIXFAST8 || @PRI_MACROS_BROKEN@ # undef PRIXFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIXFAST8 PRIX64 # else # define PRIXFAST8 "X" # endif #endif #if !defined PRIdFAST16 || @PRI_MACROS_BROKEN@ # undef PRIdFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIdFAST16 PRId64 # else # define PRIdFAST16 "d" # endif #endif #if !defined PRIiFAST16 || @PRI_MACROS_BROKEN@ # undef PRIiFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIiFAST16 PRIi64 # else # define PRIiFAST16 "i" # endif #endif #if !defined PRIoFAST16 || @PRI_MACROS_BROKEN@ # undef PRIoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIoFAST16 PRIo64 # else # define PRIoFAST16 "o" # endif #endif #if !defined PRIuFAST16 || @PRI_MACROS_BROKEN@ # undef PRIuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIuFAST16 PRIu64 # else # define PRIuFAST16 "u" # endif #endif #if !defined PRIxFAST16 || @PRI_MACROS_BROKEN@ # undef PRIxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIxFAST16 PRIx64 # else # define PRIxFAST16 "x" # endif #endif #if !defined PRIXFAST16 || @PRI_MACROS_BROKEN@ # undef PRIXFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIXFAST16 PRIX64 # else # define PRIXFAST16 "X" # endif #endif #if !defined PRIdFAST32 || @PRI_MACROS_BROKEN@ # undef PRIdFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIdFAST32 PRId64 # else # define PRIdFAST32 "d" # endif #endif #if !defined PRIiFAST32 || @PRI_MACROS_BROKEN@ # undef PRIiFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIiFAST32 PRIi64 # else # define PRIiFAST32 "i" # endif #endif #if !defined PRIoFAST32 || @PRI_MACROS_BROKEN@ # undef PRIoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIoFAST32 PRIo64 # else # define PRIoFAST32 "o" # endif #endif #if !defined PRIuFAST32 || @PRI_MACROS_BROKEN@ # undef PRIuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIuFAST32 PRIu64 # else # define PRIuFAST32 "u" # endif #endif #if !defined PRIxFAST32 || @PRI_MACROS_BROKEN@ # undef PRIxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIxFAST32 PRIx64 # else # define PRIxFAST32 "x" # endif #endif #if !defined PRIXFAST32 || @PRI_MACROS_BROKEN@ # undef PRIXFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIXFAST32 PRIX64 # else # define PRIXFAST32 "X" # endif #endif #ifdef INT64_MAX # if !defined PRIdFAST64 || @PRI_MACROS_BROKEN@ # undef PRIdFAST64 # define PRIdFAST64 PRId64 # endif # if !defined PRIiFAST64 || @PRI_MACROS_BROKEN@ # undef PRIiFAST64 # define PRIiFAST64 PRIi64 # endif #endif #ifdef UINT64_MAX # if !defined PRIoFAST64 || @PRI_MACROS_BROKEN@ # undef PRIoFAST64 # define PRIoFAST64 PRIo64 # endif # if !defined PRIuFAST64 || @PRI_MACROS_BROKEN@ # undef PRIuFAST64 # define PRIuFAST64 PRIu64 # endif # if !defined PRIxFAST64 || @PRI_MACROS_BROKEN@ # undef PRIxFAST64 # define PRIxFAST64 PRIx64 # endif # if !defined PRIXFAST64 || @PRI_MACROS_BROKEN@ # undef PRIXFAST64 # define PRIXFAST64 PRIX64 # endif #endif #if !defined PRIdMAX || @PRI_MACROS_BROKEN@ # undef PRIdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIdMAX PRId64 # else # define PRIdMAX "ld" # endif #endif #if !defined PRIiMAX || @PRI_MACROS_BROKEN@ # undef PRIiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIiMAX PRIi64 # else # define PRIiMAX "li" # endif #endif #if !defined PRIoMAX || @PRI_MACROS_BROKEN@ # undef PRIoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIoMAX PRIo64 # else # define PRIoMAX "lo" # endif #endif #if !defined PRIuMAX || @PRI_MACROS_BROKEN@ # undef PRIuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIuMAX PRIu64 # else # define PRIuMAX "lu" # endif #endif #if !defined PRIxMAX || @PRI_MACROS_BROKEN@ # undef PRIxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIxMAX PRIx64 # else # define PRIxMAX "lx" # endif #endif #if !defined PRIXMAX || @PRI_MACROS_BROKEN@ # undef PRIXMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIXMAX PRIX64 # else # define PRIXMAX "lX" # endif #endif #if !defined PRIdPTR || @PRI_MACROS_BROKEN@ # undef PRIdPTR # ifdef INTPTR_MAX # define PRIdPTR @PRIPTR_PREFIX@ "d" # endif #endif #if !defined PRIiPTR || @PRI_MACROS_BROKEN@ # undef PRIiPTR # ifdef INTPTR_MAX # define PRIiPTR @PRIPTR_PREFIX@ "i" # endif #endif #if !defined PRIoPTR || @PRI_MACROS_BROKEN@ # undef PRIoPTR # ifdef UINTPTR_MAX # define PRIoPTR @PRIPTR_PREFIX@ "o" # endif #endif #if !defined PRIuPTR || @PRI_MACROS_BROKEN@ # undef PRIuPTR # ifdef UINTPTR_MAX # define PRIuPTR @PRIPTR_PREFIX@ "u" # endif #endif #if !defined PRIxPTR || @PRI_MACROS_BROKEN@ # undef PRIxPTR # ifdef UINTPTR_MAX # define PRIxPTR @PRIPTR_PREFIX@ "x" # endif #endif #if !defined PRIXPTR || @PRI_MACROS_BROKEN@ # undef PRIXPTR # ifdef UINTPTR_MAX # define PRIXPTR @PRIPTR_PREFIX@ "X" # endif #endif #if !defined SCNd8 || @PRI_MACROS_BROKEN@ # undef SCNd8 # ifdef INT8_MAX # define SCNd8 "hhd" # endif #endif #if !defined SCNi8 || @PRI_MACROS_BROKEN@ # undef SCNi8 # ifdef INT8_MAX # define SCNi8 "hhi" # endif #endif #if !defined SCNo8 || @PRI_MACROS_BROKEN@ # undef SCNo8 # ifdef UINT8_MAX # define SCNo8 "hho" # endif #endif #if !defined SCNu8 || @PRI_MACROS_BROKEN@ # undef SCNu8 # ifdef UINT8_MAX # define SCNu8 "hhu" # endif #endif #if !defined SCNx8 || @PRI_MACROS_BROKEN@ # undef SCNx8 # ifdef UINT8_MAX # define SCNx8 "hhx" # endif #endif #if !defined SCNd16 || @PRI_MACROS_BROKEN@ # undef SCNd16 # ifdef INT16_MAX # define SCNd16 "hd" # endif #endif #if !defined SCNi16 || @PRI_MACROS_BROKEN@ # undef SCNi16 # ifdef INT16_MAX # define SCNi16 "hi" # endif #endif #if !defined SCNo16 || @PRI_MACROS_BROKEN@ # undef SCNo16 # ifdef UINT16_MAX # define SCNo16 "ho" # endif #endif #if !defined SCNu16 || @PRI_MACROS_BROKEN@ # undef SCNu16 # ifdef UINT16_MAX # define SCNu16 "hu" # endif #endif #if !defined SCNx16 || @PRI_MACROS_BROKEN@ # undef SCNx16 # ifdef UINT16_MAX # define SCNx16 "hx" # endif #endif #if !defined SCNd32 || @PRI_MACROS_BROKEN@ # undef SCNd32 # ifdef INT32_MAX # define SCNd32 "d" # endif #endif #if !defined SCNi32 || @PRI_MACROS_BROKEN@ # undef SCNi32 # ifdef INT32_MAX # define SCNi32 "i" # endif #endif #if !defined SCNo32 || @PRI_MACROS_BROKEN@ # undef SCNo32 # ifdef UINT32_MAX # define SCNo32 "o" # endif #endif #if !defined SCNu32 || @PRI_MACROS_BROKEN@ # undef SCNu32 # ifdef UINT32_MAX # define SCNu32 "u" # endif #endif #if !defined SCNx32 || @PRI_MACROS_BROKEN@ # undef SCNx32 # ifdef UINT32_MAX # define SCNx32 "x" # endif #endif #ifdef INT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) # define _SCN64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCN64_PREFIX "I64" # elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 # define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNd64 || @PRI_MACROS_BROKEN@ # undef SCNd64 # define SCNd64 _SCN64_PREFIX "d" # endif # if !defined SCNi64 || @PRI_MACROS_BROKEN@ # undef SCNi64 # define SCNi64 _SCN64_PREFIX "i" # endif #endif #ifdef UINT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) # define _SCNu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCNu64_PREFIX "I64" # elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 # define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNo64 || @PRI_MACROS_BROKEN@ # undef SCNo64 # define SCNo64 _SCNu64_PREFIX "o" # endif # if !defined SCNu64 || @PRI_MACROS_BROKEN@ # undef SCNu64 # define SCNu64 _SCNu64_PREFIX "u" # endif # if !defined SCNx64 || @PRI_MACROS_BROKEN@ # undef SCNx64 # define SCNx64 _SCNu64_PREFIX "x" # endif #endif #if !defined SCNdLEAST8 || @PRI_MACROS_BROKEN@ # undef SCNdLEAST8 # define SCNdLEAST8 "hhd" #endif #if !defined SCNiLEAST8 || @PRI_MACROS_BROKEN@ # undef SCNiLEAST8 # define SCNiLEAST8 "hhi" #endif #if !defined SCNoLEAST8 || @PRI_MACROS_BROKEN@ # undef SCNoLEAST8 # define SCNoLEAST8 "hho" #endif #if !defined SCNuLEAST8 || @PRI_MACROS_BROKEN@ # undef SCNuLEAST8 # define SCNuLEAST8 "hhu" #endif #if !defined SCNxLEAST8 || @PRI_MACROS_BROKEN@ # undef SCNxLEAST8 # define SCNxLEAST8 "hhx" #endif #if !defined SCNdLEAST16 || @PRI_MACROS_BROKEN@ # undef SCNdLEAST16 # define SCNdLEAST16 "hd" #endif #if !defined SCNiLEAST16 || @PRI_MACROS_BROKEN@ # undef SCNiLEAST16 # define SCNiLEAST16 "hi" #endif #if !defined SCNoLEAST16 || @PRI_MACROS_BROKEN@ # undef SCNoLEAST16 # define SCNoLEAST16 "ho" #endif #if !defined SCNuLEAST16 || @PRI_MACROS_BROKEN@ # undef SCNuLEAST16 # define SCNuLEAST16 "hu" #endif #if !defined SCNxLEAST16 || @PRI_MACROS_BROKEN@ # undef SCNxLEAST16 # define SCNxLEAST16 "hx" #endif #if !defined SCNdLEAST32 || @PRI_MACROS_BROKEN@ # undef SCNdLEAST32 # define SCNdLEAST32 "d" #endif #if !defined SCNiLEAST32 || @PRI_MACROS_BROKEN@ # undef SCNiLEAST32 # define SCNiLEAST32 "i" #endif #if !defined SCNoLEAST32 || @PRI_MACROS_BROKEN@ # undef SCNoLEAST32 # define SCNoLEAST32 "o" #endif #if !defined SCNuLEAST32 || @PRI_MACROS_BROKEN@ # undef SCNuLEAST32 # define SCNuLEAST32 "u" #endif #if !defined SCNxLEAST32 || @PRI_MACROS_BROKEN@ # undef SCNxLEAST32 # define SCNxLEAST32 "x" #endif #ifdef INT64_MAX # if !defined SCNdLEAST64 || @PRI_MACROS_BROKEN@ # undef SCNdLEAST64 # define SCNdLEAST64 SCNd64 # endif # if !defined SCNiLEAST64 || @PRI_MACROS_BROKEN@ # undef SCNiLEAST64 # define SCNiLEAST64 SCNi64 # endif #endif #ifdef UINT64_MAX # if !defined SCNoLEAST64 || @PRI_MACROS_BROKEN@ # undef SCNoLEAST64 # define SCNoLEAST64 SCNo64 # endif # if !defined SCNuLEAST64 || @PRI_MACROS_BROKEN@ # undef SCNuLEAST64 # define SCNuLEAST64 SCNu64 # endif # if !defined SCNxLEAST64 || @PRI_MACROS_BROKEN@ # undef SCNxLEAST64 # define SCNxLEAST64 SCNx64 # endif #endif #if !defined SCNdFAST8 || @PRI_MACROS_BROKEN@ # undef SCNdFAST8 # if INT_FAST8_MAX > INT32_MAX # define SCNdFAST8 SCNd64 # elif INT_FAST8_MAX == 0x7fff # define SCNdFAST8 "hd" # elif INT_FAST8_MAX == 0x7f # define SCNdFAST8 "hhd" # else # define SCNdFAST8 "d" # endif #endif #if !defined SCNiFAST8 || @PRI_MACROS_BROKEN@ # undef SCNiFAST8 # if INT_FAST8_MAX > INT32_MAX # define SCNiFAST8 SCNi64 # elif INT_FAST8_MAX == 0x7fff # define SCNiFAST8 "hi" # elif INT_FAST8_MAX == 0x7f # define SCNiFAST8 "hhi" # else # define SCNiFAST8 "i" # endif #endif #if !defined SCNoFAST8 || @PRI_MACROS_BROKEN@ # undef SCNoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNoFAST8 SCNo64 # elif UINT_FAST8_MAX == 0xffff # define SCNoFAST8 "ho" # elif UINT_FAST8_MAX == 0xff # define SCNoFAST8 "hho" # else # define SCNoFAST8 "o" # endif #endif #if !defined SCNuFAST8 || @PRI_MACROS_BROKEN@ # undef SCNuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNuFAST8 SCNu64 # elif UINT_FAST8_MAX == 0xffff # define SCNuFAST8 "hu" # elif UINT_FAST8_MAX == 0xff # define SCNuFAST8 "hhu" # else # define SCNuFAST8 "u" # endif #endif #if !defined SCNxFAST8 || @PRI_MACROS_BROKEN@ # undef SCNxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNxFAST8 SCNx64 # elif UINT_FAST8_MAX == 0xffff # define SCNxFAST8 "hx" # elif UINT_FAST8_MAX == 0xff # define SCNxFAST8 "hhx" # else # define SCNxFAST8 "x" # endif #endif #if !defined SCNdFAST16 || @PRI_MACROS_BROKEN@ # undef SCNdFAST16 # if INT_FAST16_MAX > INT32_MAX # define SCNdFAST16 SCNd64 # elif INT_FAST16_MAX == 0x7fff # define SCNdFAST16 "hd" # else # define SCNdFAST16 "d" # endif #endif #if !defined SCNiFAST16 || @PRI_MACROS_BROKEN@ # undef SCNiFAST16 # if INT_FAST16_MAX > INT32_MAX # define SCNiFAST16 SCNi64 # elif INT_FAST16_MAX == 0x7fff # define SCNiFAST16 "hi" # else # define SCNiFAST16 "i" # endif #endif #if !defined SCNoFAST16 || @PRI_MACROS_BROKEN@ # undef SCNoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNoFAST16 SCNo64 # elif UINT_FAST16_MAX == 0xffff # define SCNoFAST16 "ho" # else # define SCNoFAST16 "o" # endif #endif #if !defined SCNuFAST16 || @PRI_MACROS_BROKEN@ # undef SCNuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNuFAST16 SCNu64 # elif UINT_FAST16_MAX == 0xffff # define SCNuFAST16 "hu" # else # define SCNuFAST16 "u" # endif #endif #if !defined SCNxFAST16 || @PRI_MACROS_BROKEN@ # undef SCNxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNxFAST16 SCNx64 # elif UINT_FAST16_MAX == 0xffff # define SCNxFAST16 "hx" # else # define SCNxFAST16 "x" # endif #endif #if !defined SCNdFAST32 || @PRI_MACROS_BROKEN@ # undef SCNdFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNdFAST32 SCNd64 # else # define SCNdFAST32 "d" # endif #endif #if !defined SCNiFAST32 || @PRI_MACROS_BROKEN@ # undef SCNiFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNiFAST32 SCNi64 # else # define SCNiFAST32 "i" # endif #endif #if !defined SCNoFAST32 || @PRI_MACROS_BROKEN@ # undef SCNoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNoFAST32 SCNo64 # else # define SCNoFAST32 "o" # endif #endif #if !defined SCNuFAST32 || @PRI_MACROS_BROKEN@ # undef SCNuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNuFAST32 SCNu64 # else # define SCNuFAST32 "u" # endif #endif #if !defined SCNxFAST32 || @PRI_MACROS_BROKEN@ # undef SCNxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNxFAST32 SCNx64 # else # define SCNxFAST32 "x" # endif #endif #ifdef INT64_MAX # if !defined SCNdFAST64 || @PRI_MACROS_BROKEN@ # undef SCNdFAST64 # define SCNdFAST64 SCNd64 # endif # if !defined SCNiFAST64 || @PRI_MACROS_BROKEN@ # undef SCNiFAST64 # define SCNiFAST64 SCNi64 # endif #endif #ifdef UINT64_MAX # if !defined SCNoFAST64 || @PRI_MACROS_BROKEN@ # undef SCNoFAST64 # define SCNoFAST64 SCNo64 # endif # if !defined SCNuFAST64 || @PRI_MACROS_BROKEN@ # undef SCNuFAST64 # define SCNuFAST64 SCNu64 # endif # if !defined SCNxFAST64 || @PRI_MACROS_BROKEN@ # undef SCNxFAST64 # define SCNxFAST64 SCNx64 # endif #endif #if !defined SCNdMAX || @PRI_MACROS_BROKEN@ # undef SCNdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNdMAX SCNd64 # else # define SCNdMAX "ld" # endif #endif #if !defined SCNiMAX || @PRI_MACROS_BROKEN@ # undef SCNiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNiMAX SCNi64 # else # define SCNiMAX "li" # endif #endif #if !defined SCNoMAX || @PRI_MACROS_BROKEN@ # undef SCNoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNoMAX SCNo64 # else # define SCNoMAX "lo" # endif #endif #if !defined SCNuMAX || @PRI_MACROS_BROKEN@ # undef SCNuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNuMAX SCNu64 # else # define SCNuMAX "lu" # endif #endif #if !defined SCNxMAX || @PRI_MACROS_BROKEN@ # undef SCNxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNxMAX SCNx64 # else # define SCNxMAX "lx" # endif #endif #if !defined SCNdPTR || @PRI_MACROS_BROKEN@ # undef SCNdPTR # ifdef INTPTR_MAX # define SCNdPTR @PRIPTR_PREFIX@ "d" # endif #endif #if !defined SCNiPTR || @PRI_MACROS_BROKEN@ # undef SCNiPTR # ifdef INTPTR_MAX # define SCNiPTR @PRIPTR_PREFIX@ "i" # endif #endif #if !defined SCNoPTR || @PRI_MACROS_BROKEN@ # undef SCNoPTR # ifdef UINTPTR_MAX # define SCNoPTR @PRIPTR_PREFIX@ "o" # endif #endif #if !defined SCNuPTR || @PRI_MACROS_BROKEN@ # undef SCNuPTR # ifdef UINTPTR_MAX # define SCNuPTR @PRIPTR_PREFIX@ "u" # endif #endif #if !defined SCNxPTR || @PRI_MACROS_BROKEN@ # undef SCNxPTR # ifdef UINTPTR_MAX # define SCNxPTR @PRIPTR_PREFIX@ "x" # endif #endif /* 7.8.2 Functions for greatest-width integer types */ #ifdef __cplusplus extern "C" { #endif #if @GNULIB_IMAXABS@ # if !@HAVE_DECL_IMAXABS@ extern intmax_t imaxabs (intmax_t); # endif #elif defined GNULIB_POSIXCHECK # undef imaxabs # if HAVE_RAW_DECL_IMAXABS _GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - " "use gnulib module imaxabs for portability"); # endif #endif #if @GNULIB_IMAXDIV@ # if !@HAVE_DECL_IMAXDIV@ # if !GNULIB_defined_imaxdiv_t typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; # define GNULIB_defined_imaxdiv_t 1 # endif extern imaxdiv_t imaxdiv (intmax_t, intmax_t); # endif #elif defined GNULIB_POSIXCHECK # undef imaxdiv # if HAVE_RAW_DECL_IMAXDIV _GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - " "use gnulib module imaxdiv for portability"); # endif #endif #if @GNULIB_STRTOIMAX@ # if @REPLACE_STRTOIMAX@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtoimax # define strtoimax rpl_strtoimax # endif _GL_FUNCDECL_RPL (strtoimax, intmax_t, (const char *, char **, int) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int)); # else # if !@HAVE_DECL_STRTOIMAX@ # undef strtoimax _GL_FUNCDECL_SYS (strtoimax, intmax_t, (const char *, char **, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int)); # endif _GL_CXXALIASWARN (strtoimax); #elif defined GNULIB_POSIXCHECK # undef strtoimax # if HAVE_RAW_DECL_STRTOIMAX _GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - " "use gnulib module strtoimax for portability"); # endif #endif #if @GNULIB_STRTOUMAX@ # if @REPLACE_STRTOUMAX@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtoumax # define strtoumax rpl_strtoumax # endif _GL_FUNCDECL_RPL (strtoumax, uintmax_t, (const char *, char **, int) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoumax, uintmax_t, (const char *, char **, int)); # else # if !@HAVE_DECL_STRTOUMAX@ # undef strtoumax _GL_FUNCDECL_SYS (strtoumax, uintmax_t, (const char *, char **, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int)); # endif _GL_CXXALIASWARN (strtoumax); #elif defined GNULIB_POSIXCHECK # undef strtoumax # if HAVE_RAW_DECL_STRTOUMAX _GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - " "use gnulib module strtoumax for portability"); # endif #endif /* Don't bother defining or declaring wcstoimax and wcstoumax, since wide-character functions like this are hardly ever useful. */ #ifdef __cplusplus } #endif #endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */ gnuastro-0.5/bootstrapped/lib/intprops.h0000644000175000017500000005061413217200021015436 00000000000000/* intprops.h -- properties of integer types Copyright (C) 2001-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paul Eggert. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include /* Return a value with the common real type of E and V and the value of V. */ #define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see . */ #define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is an integer type. bool counts as an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) /* True if the real type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the real expression E, after promotion, has a signed or floating type. */ #define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. Padding bits are not supported; this is checked at compile-time below. */ #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, after integer promotion. E should not have side effects. */ #define _GL_INT_MINIMUM(e) \ (EXPR_SIGNED (e) \ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (EXPR_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1) /* Work around OpenVMS incompatibility with C99. */ #if !defined LLONG_MAX && defined __INT64_MAX # define LLONG_MAX __INT64_MAX # define LLONG_MIN __INT64_MIN #endif /* This include file assumes that signed types are two's complement without padding bits; the above macros have undefined behavior otherwise. If this is a problem for you, please let us know how to fix it for your host. This assumption is tested by the intprops-tests module. */ /* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ #if (2 <= __GNUC__ \ || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ || (0x5110 <= __SUNPRO_C && !__STDC__)) # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 #endif /* Return 1 if the integer type or expression T might be signed. Return 0 if it is definitely unsigned. This macro does not evaluate its argument, and expands to an integer constant expression. */ #if _GL_HAVE___TYPEOF__ # define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) #else # define _GL_SIGNED_TYPE_OR_EXPR(t) 1 #endif /* Bound on length of the string representing an unsigned integer value representable in B bits. log10 (2.0) < 146/485. The smallest value of B where this bound is not tight is 2621. */ #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) /* Bound on length of the string representing an integer type or expression T. Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is signed, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, including the terminating null. */ #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) /* Range overflow checks. The INT__RANGE_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They do not rely on undefined or implementation-defined behavior. Their implementations are simple and straightforward, but they are a bit harder to use than the INT__OVERFLOW macros described below. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); Restrictions on *_RANGE_OVERFLOW macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned types should use a zero MIN of the proper type. These macros are tuned for constant MIN and MAX. For commutative operations such as A + B, they are also tuned for constant B. */ /* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (a) < (min) - (b) \ : (max) - (b) < (a)) /* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (max) + (b) < (a) \ : (a) < (min) + (b)) /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ ((min) < 0 \ ? (a) < - (max) \ : 0 < (a)) /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see . */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ ? (a) < (max) / (b) \ : (b) == -1 \ ? 0 \ : (min) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (a) < (min) / (b) \ : (max) / (b) < (a))) /* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. */ #define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ ((min) < 0 && (b) == -1 && (a) < - (max)) /* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. Mathematically, % should never overflow, but on x86-like hosts INT_MIN % -1 traps, and the C standard permits this, so treat this as an overflow too. */ #define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) /* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0 <= B < wordwidth, and that when A is negative then A << B has undefined behavior and A >> B has implementation-defined behavior, but do not check these other restrictions. */ #define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ ((a) < 0 \ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) /* True if __builtin_add_overflow (A, B, P) works when P is non-null. */ #if 5 <= __GNUC__ && !defined __ICC # define _GL_HAS_BUILTIN_OVERFLOW 1 #else # define _GL_HAS_BUILTIN_OVERFLOW 0 #endif /* True if __builtin_add_overflow_p (A, B, C) works. */ #define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ #if _GL_HAS_BUILTIN_OVERFLOW_P # define _GL_ADD_OVERFLOW(a, b, min, max) \ __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) #else # define _GL_ADD_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? (b) <= (a) + (b) \ : (b) < 0 ? (a) <= (a) + (b) \ : (a) + (b) < (b)) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? 1 \ : (b) < 0 ? (a) - (b) <= (a) \ : (a) < (b)) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) #endif #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ : (b) < 0 && (a) + (b) <= (a)) #define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) /* Return a nonzero value if A is a mathematical multiple of B, where A is unsigned, B is negative, and MAX is the maximum value of A's type. A's type must be the same as (A % B)'s type. Normally (A % -B == 0) suffices, but things get tricky if -B would overflow. */ #define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ ? (a) \ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ : (a) % - (b)) \ == 0) /* Check for integer overflow, and report low order bits of answer. The INT__OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. The INT__WRAPV macros also store the low-order bits of the answer. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage, assuming A and B are long int: if (INT_MULTIPLY_OVERFLOW (a, b)) printf ("result would overflow\n"); else printf ("result is %ld (no overflow)\n", a * b); Example usage with WRAPV flavor: long int result; bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); printf ("result is %ld (%s)\n", result, overflow ? "after overflow" : "no overflow"); Restrictions on these macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The WRAPV macros are not constant expressions. They support only +, binary -, and *. The result type must be signed. These macros are tuned for their last argument being a constant. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ #define INT_ADD_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) #if _GL_HAS_BUILTIN_OVERFLOW_P # define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) #else # define INT_NEGATE_OVERFLOW(a) \ INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #endif #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) #define INT_REMAINDER_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) #define INT_LEFT_SHIFT_OVERFLOW(a, b) \ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) /* Return 1 if the expression A B would overflow, where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, assuming MIN and MAX are the minimum and maximum for the result type. Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ _GL_INT_MINIMUM (0 * (b) + (a)), \ _GL_INT_MAXIMUM (0 * (b) + (a))) /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. See above for restrictions. */ #define INT_ADD_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, INT_ADD_OVERFLOW) #define INT_SUBTRACT_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, -, __builtin_sub_overflow, INT_SUBTRACT_OVERFLOW) #define INT_MULTIPLY_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, *, __builtin_mul_overflow, INT_MULTIPLY_OVERFLOW) /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 https://llvm.org/bugs/show_bug.cgi?id=25390 For now, assume all versions of GCC-like compilers generate bogus warnings for _Generic. This matters only for older compilers that lack __builtin_add_overflow. */ #if __GNUC__ # define _GL__GENERIC_BOGUS 1 #else # define _GL__GENERIC_BOGUS 0 #endif /* Store the low-order bits of A B into *R, where OP specifies the operation. BUILTIN is the builtin operation, and OVERFLOW the overflow predicate. Return 1 if the result overflows. See above for restrictions. */ #if _GL_HAS_BUILTIN_OVERFLOW # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r) #elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ (_Generic \ (*(r), \ signed char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX), \ short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX), \ int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX), \ long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX), \ long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX))) #else # define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ (sizeof *(r) == sizeof (signed char) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX) \ : sizeof *(r) == sizeof (short int) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX) \ : sizeof *(r) == sizeof (int) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX) \ : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) # ifdef LLONG_MAX # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (long int) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX)) # else # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) # endif #endif /* Store the low-order bits of A B into *R, where the operation is given by OP. Use the unsigned type UT for calculation to avoid overflow problems. *R's type is T, with extrema TMIN and TMAX. T must be a signed integer type. Return 1 if the result overflows. */ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ (sizeof ((a) op (b)) < sizeof (t) \ ? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \ : _GL_INT_OP_CALC1 (a, b, r, op, overflow, ut, t, tmin, tmax)) #define _GL_INT_OP_CALC1(a, b, r, op, overflow, ut, t, tmin, tmax) \ ((overflow (a, b) \ || (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \ || (tmax) < ((a) op (b))) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) /* Return the low-order bits of A B, where the operation is given by OP. Use the unsigned type UT for calculation to avoid undefined behavior on signed integer overflow, and convert the result to type T. UT is at least as wide as T and is no narrower than unsigned int, T is two's complement, and there is no padding or trap representations. Assume that converting UT to T yields the low-order bits, as is done in all known two's-complement C compilers. E.g., see: https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html According to the C standard, converting UT to T yields an implementation-defined result or signal for values outside T's range. However, code that works around this theoretical problem runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html As the compiler bug is real, don't try to work around the theoretical problem. */ #define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ ((t) ((ut) (a) op (ut) (b))) #endif /* _GL_INTPROPS_H */ gnuastro-0.5/bootstrapped/lib/hard-locale.h0000644000175000017500000000157213217200021015732 00000000000000/* Determine whether a locale is hard. Copyright (C) 1999, 2003-2004, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef HARD_LOCALE_H_ # define HARD_LOCALE_H_ 1 # include bool hard_locale (int); #endif /* HARD_LOCALE_H_ */ gnuastro-0.5/bootstrapped/lib/getopt_int.h0000644000175000017500000001006313217200021015726 00000000000000/* Internal declarations for getopt. Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _GETOPT_INT_H #define _GETOPT_INT_H 1 #include extern int _getopt_internal (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, int __posixly_correct); /* Reentrant versions which can handle parsing multiple argument vectors at the same time. */ /* Describe how to deal with options that follow non-option ARGV-elements. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what POSIX specifies should happen. PERMUTE means permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. The special argument '--' forces an end of option-scanning regardless of the value of 'ordering'. In the case of RETURN_IN_ORDER, only '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */ enum __ord { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER }; /* Data type for reentrant functions. */ struct _getopt_data { /* These have exactly the same meaning as the corresponding global variables, except that they are used for the reentrant versions of getopt. */ int optind; int opterr; int optopt; char *optarg; /* Internal members. */ /* True if the internal members have been initialized. */ int __initialized; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ char *__nextchar; /* See __ord above. */ enum __ord __ordering; /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. 'first_nonopt' is the index in ARGV of the first of them; 'last_nonopt' is the index after the last of them. */ int __first_nonopt; int __last_nonopt; }; /* The initializer is necessary to set OPTIND and OPTERR to their default values and to clear the initialization flag. */ #define _GETOPT_DATA_INITIALIZER { 1, 1 } extern int _getopt_internal_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, struct _getopt_data *__data, int __posixly_correct); extern int _getopt_long_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); extern int _getopt_long_only_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); #endif /* getopt_int.h */ gnuastro-0.5/bootstrapped/lib/getopt.in.h0000644000175000017500000000406313217200021015464 00000000000000/* Declarations for getopt. Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library, which supplies a different version of this file. This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with gnulib; if not, see . */ #ifndef _@GUARD_PREFIX@_GETOPT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. We must also inform the replacement unistd.h to not recursively use ; our definitions will be present soon enough. */ #if @HAVE_GETOPT_H@ # define _GL_SYSTEM_GETOPT # @INCLUDE_NEXT@ @NEXT_GETOPT_H@ # undef _GL_SYSTEM_GETOPT #endif #define _@GUARD_PREFIX@_GETOPT_H 1 /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. When this happens, include the headers that might declare getopt so that they will not cause confusion if included after this file (if the system had , we have already included it). */ #if defined __GETOPT_PREFIX # if !@HAVE_GETOPT_H@ # define __need_system_stdlib_h # include # undef __need_system_stdlib_h # include # include # endif #endif /* The definition of _GL_ARG_NONNULL is copied here. */ #include #include #include #endif /* _@GUARD_PREFIX@_GETOPT_H */ gnuastro-0.5/bootstrapped/lib/getopt-pfx-ext.h0000644000175000017500000000533213217200021016450 00000000000000/* getopt (GNU extensions) gnulib wrapper header. Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with gnulib; if not, see . */ #ifndef _GETOPT_PFX_EXT_H #define _GETOPT_PFX_EXT_H 1 /* This header should not be used directly; include getopt.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt_long # undef getopt_long_only # undef option # undef _getopt_internal # define getopt_long __GETOPT_ID (getopt_long) # define getopt_long_only __GETOPT_ID (getopt_long_only) # define option __GETOPT_ID (option) # define _getopt_internal __GETOPT_ID (getopt_internal) /* The system's getopt.h may have already included getopt-ext.h to declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that getopt-ext.h declares them with prefixes. */ # undef _GETOPT_EXT_H #endif /* Standalone applications get correct prototypes for getopt_long and getopt_long_only; they declare "char **argv". For backward compatibility with old applications, if __GETOPT_PREFIX is not defined, we supply GNU-libc-compatible, but incorrect, prototypes using "char *const *argv". (GNU libc is stuck with the incorrect prototypes, as they are baked into older versions of LSB.) */ #ifndef __getopt_argv_const # if defined __GETOPT_PREFIX # define __getopt_argv_const /* empty */ # else # define __getopt_argv_const const # endif #endif #include #endif /* _GETOPT_PFX_EXT_H */ gnuastro-0.5/bootstrapped/lib/getopt-pfx-core.h0000644000175000017500000000426213217200021016601 00000000000000/* getopt (basic, portable features) gnulib wrapper header. Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with gnulib; if not, see . */ #ifndef _GETOPT_PFX_CORE_H #define _GETOPT_PFX_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt # undef optarg # undef opterr # undef optind # undef optopt # define getopt __GETOPT_ID (getopt) # define optarg __GETOPT_ID (optarg) # define opterr __GETOPT_ID (opterr) # define optind __GETOPT_ID (optind) # define optopt __GETOPT_ID (optopt) /* The system's getopt.h may have already included getopt-core.h to declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that getopt-core.h declares them with prefixes. */ # undef _GETOPT_CORE_H #endif #include #endif /* _GETOPT_PFX_CORE_H */ gnuastro-0.5/bootstrapped/lib/getopt-ext.h0000644000175000017500000000572413217200021015662 00000000000000/* Declarations for getopt (GNU extensions). Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _GETOPT_EXT_H #define _GETOPT_EXT_H 1 /* This header should not be used directly; include getopt.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of 'struct option' terminated by an element containing a name which is zero. The field 'has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field 'flag' is not NULL, it points to a variable that is set to the value given in the field 'val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an 'int' to a compiled-in constant, such as set a value from 'optarg', set the option's 'flag' field to zero and its 'val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero 'flag' field, 'getopt' returns the contents of the 'val' field. */ struct option { const char *name; /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the 'has_arg' field of 'struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_EXT_H */ gnuastro-0.5/bootstrapped/lib/getopt-core.h0000644000175000017500000000710313217200021016003 00000000000000/* Declarations for getopt (basic, portable features only). Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _GETOPT_CORE_H #define _GETOPT_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message 'getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Get definitions and prototypes for functions to process the arguments in ARGV (ARGC of them, minus the program name) for options given in OPTS. Return the option character from OPTS just read. Return -1 when there are no more options. For unrecognized options, or options missing arguments, 'optopt' is set to the option letter, and '?' is returned. The OPTS string is a list of characters which are recognized option letters, optionally followed by colons, specifying that that letter takes an argument, to be placed in 'optarg'. If a letter in OPTS is followed by two colons, its argument is optional. This behavior is specific to the GNU 'getopt'. The argument '--' causes premature termination of argument scanning, explicitly telling 'getopt' that there are no more options. If OPTS begins with '-', then non-option arguments are treated as arguments to the option '\1'. This behavior is specific to the GNU 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in the environment, then do not permute arguments. For standards compliance, the 'argv' argument has the type char *const *, but this is inaccurate; if argument permutation is enabled, the argv array (not the strings it points to) must be writable. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_CORE_H */ gnuastro-0.5/bootstrapped/lib/getopt-cdefs.in.h0000644000175000017500000000376113217200021016552 00000000000000/* getopt-on-non-glibc compatibility macros. Copyright (C) 1989-2017 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with gnulib; if not, see . */ #ifndef _GETOPT_CDEFS_H #define _GETOPT_CDEFS_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect a number of the internal macros supplied to GNU libc's headers by sys/cdefs.h. Provide fallback definitions for all of them. */ #if @HAVE_SYS_CDEFS_H@ # include #endif #ifndef __BEGIN_DECLS # ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # else # define __BEGIN_DECLS /* nothing */ # endif #endif #ifndef __END_DECLS # ifdef __cplusplus # define __END_DECLS } # else # define __END_DECLS /* nothing */ # endif #endif #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_VERSION__ # define __GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __THROW # if defined __cplusplus && __GNUC_PREREQ (2,8) # define __THROW throw () # else # define __THROW # endif #endif #endif /* _GETOPT_CDEFS_H */ gnuastro-0.5/bootstrapped/lib/float.in.h0000644000175000017500000001677713217200021015306 00000000000000/* A correct . Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _@GUARD_PREFIX@_FLOAT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FLOAT_H@ #ifndef _@GUARD_PREFIX@_FLOAT_H #define _@GUARD_PREFIX@_FLOAT_H /* 'long double' properties. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 /* Number of decimal digits that is sufficient for representing a number. */ # undef LDBL_DIG # define LDBL_DIG 18 /* x-1 where x is the smallest representable number > 1. */ # undef LDBL_EPSILON # define LDBL_EPSILON 1.0842021724855044340E-19L /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN # define LDBL_MIN 3.3621031431120935063E-4932L /* Maximum representable finite number. */ # undef LDBL_MAX # define LDBL_MAX 1.1897314953572317650E+4932L /* Minimum e such that 10^e is in the range of normalized numbers. */ # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP (-4931) /* Maximum e such that 10^e is in the range of representable finite numbers. */ # undef LDBL_MAX_10_EXP # define LDBL_MAX_10_EXP 4932 #endif /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See . */ #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 /* Number of decimal digits that is sufficient for representing a number. */ # undef LDBL_DIG # define LDBL_DIG 18 /* x-1 where x is the smallest representable number > 1. */ # undef LDBL_EPSILON # define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN # define LDBL_MIN 3.362103143112093506262677817321752E-4932L /* = 0x1p-16382L */ /* Maximum representable finite number. */ # undef LDBL_MAX /* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. But the largest literal that GCC allows us to write is 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. So, define it like this through a reference to an external variable const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; extern const long double LDBL_MAX; Unfortunately, this is not a constant expression. */ union gl_long_double_union { struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; long double ld; }; extern const union gl_long_double_union gl_LDBL_MAX; # define LDBL_MAX (gl_LDBL_MAX.ld) /* Minimum e such that 10^e is in the range of normalized numbers. */ # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP (-4931) /* Maximum e such that 10^e is in the range of representable finite numbers. */ # undef LDBL_MAX_10_EXP # define LDBL_MAX_10_EXP 4932 #endif /* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are wrong. On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # undef LDBL_MIN # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ #endif #if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MAX /* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. It is not easy to define: #define LDBL_MAX 1.79769313486231580793728971405302307166e308L is too small, whereas #define LDBL_MAX 1.79769313486231580793728971405302307167e308L is too large. Apparently a bug in GCC decimal-to-binary conversion. Also, I can't get values larger than #define LDBL63 ((long double) (1ULL << 63)) #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. So, define it like this through a reference to an external variable const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; extern const long double LDBL_MAX; or through a pointer cast #define LDBL_MAX \ (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) Unfortunately, this is not a constant expression, and the latter expression does not work well when GCC is optimizing.. */ union gl_long_double_union { struct { double hi; double lo; } dd; long double ld; }; extern const union gl_long_double_union gl_LDBL_MAX; # define LDBL_MAX (gl_LDBL_MAX.ld) #endif /* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON are wrong. */ #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # undef LDBL_MIN # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ # undef LDBL_EPSILON # define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ # endif #endif #if @REPLACE_ITOLD@ /* Pull in a function that fixes the 'int' to 'long double' conversion of glibc 2.7. */ extern # ifdef __cplusplus "C" # endif void _Qp_itoq (long double *, int); static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; #endif #endif /* _@GUARD_PREFIX@_FLOAT_H */ #endif /* _@GUARD_PREFIX@_FLOAT_H */ gnuastro-0.5/bootstrapped/lib/error.h0000644000175000017500000000553313217200021014711 00000000000000/* Declaration for error-reporting function Copyright (C) 1995-1997, 2003, 2006, 2008-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _ERROR_H #define _ERROR_H 1 /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif /* On mingw, the flavor of printf depends on whether the extensions module * is in use; the check for determines the witness macro. */ #ifndef _GL_ATTRIBUTE_SPEC_PRINTF # if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU # define _GL_ATTRIBUTE_SPEC_PRINTF __gnu_printf__ # else # define _GL_ATTRIBUTE_SPEC_PRINTF __printf__ # endif #endif #ifdef __cplusplus extern "C" { #endif /* Print a message with 'fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ extern void error (int __status, int __errnum, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 3, 4)); extern void error_at_line (int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 5, 6)); /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ extern void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ extern unsigned int error_message_count; /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ extern int error_one_per_line; #ifdef __cplusplus } #endif #endif /* error.h */ gnuastro-0.5/bootstrapped/lib/errno.in.h0000644000175000017500000001646413217200021015317 00000000000000/* A POSIX-like . Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _@GUARD_PREFIX@_ERRNO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_ERRNO_H@ #ifndef _@GUARD_PREFIX@_ERRNO_H #define _@GUARD_PREFIX@_ERRNO_H /* On native Windows platforms, many macros are not defined. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* These are the same values as defined by MSVC 10, for interoperability. */ # ifndef ENOMSG # define ENOMSG 122 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 111 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 121 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 134 # define GNULIB_defined_EPROTO 1 # endif # ifndef EBADMSG # define EBADMSG 104 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 132 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 129 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 117 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 106 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ECANCELED # define ECANCELED 105 # define GNULIB_defined_ECANCELED 1 # endif # ifndef EOWNERDEAD # define EOWNERDEAD 133 # define GNULIB_defined_EOWNERDEAD 1 # endif # ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 127 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EINPROGRESS # define EINPROGRESS 112 # define EALREADY 103 # define ENOTSOCK 128 # define EDESTADDRREQ 109 # define EMSGSIZE 115 # define EPROTOTYPE 136 # define ENOPROTOOPT 123 # define EPROTONOSUPPORT 135 # define EOPNOTSUPP 130 # define EAFNOSUPPORT 102 # define EADDRINUSE 100 # define EADDRNOTAVAIL 101 # define ENETDOWN 116 # define ENETUNREACH 118 # define ECONNRESET 108 # define ENOBUFS 119 # define EISCONN 113 # define ENOTCONN 126 # define ETIMEDOUT 138 # define ECONNREFUSED 107 # define ELOOP 114 # define EHOSTUNREACH 110 # define EWOULDBLOCK 140 # define GNULIB_defined_ESOCK 1 # endif # ifndef ETXTBSY # define ETXTBSY 139 # define ENODATA 120 /* not required by POSIX */ # define ENOSR 124 /* not required by POSIX */ # define ENOSTR 125 /* not required by POSIX */ # define ETIME 137 /* not required by POSIX */ # define EOTHER 131 /* not required by POSIX */ # define GNULIB_defined_ESTREAMS 1 # endif /* These are intentionally the same values as the WSA* error numbers, defined in . */ # define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ # define EPFNOSUPPORT 10046 /* not required by POSIX */ # define ESHUTDOWN 10058 /* not required by POSIX */ # define ETOOMANYREFS 10059 /* not required by POSIX */ # define EHOSTDOWN 10064 /* not required by POSIX */ # define EPROCLIM 10067 /* not required by POSIX */ # define EUSERS 10068 /* not required by POSIX */ # define EDQUOT 10069 # define ESTALE 10070 # define EREMOTE 10071 /* not required by POSIX */ # define GNULIB_defined_EWINSOCK 1 # endif /* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ # if @EMULTIHOP_HIDDEN@ # define EMULTIHOP @EMULTIHOP_VALUE@ # define GNULIB_defined_EMULTIHOP 1 # endif # if @ENOLINK_HIDDEN@ # define ENOLINK @ENOLINK_VALUE@ # define GNULIB_defined_ENOLINK 1 # endif # if @EOVERFLOW_HIDDEN@ # define EOVERFLOW @EOVERFLOW_VALUE@ # define GNULIB_defined_EOVERFLOW 1 # endif /* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. Likewise, on NonStop Kernel, EDQUOT is not defined. Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. Note: When one of these systems defines some of these macros some day, binaries will have to be recompiled so that they recognizes the new errno values from the system. */ # ifndef ENOMSG # define ENOMSG 2000 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 2001 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 2002 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 2003 # define GNULIB_defined_EPROTO 1 # endif # ifndef EMULTIHOP # define EMULTIHOP 2004 # define GNULIB_defined_EMULTIHOP 1 # endif # ifndef EBADMSG # define EBADMSG 2005 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 2006 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 2007 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 2011 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 2012 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ESTALE # define ESTALE 2009 # define GNULIB_defined_ESTALE 1 # endif # ifndef EDQUOT # define EDQUOT 2010 # define GNULIB_defined_EDQUOT 1 # endif # ifndef ECANCELED # define ECANCELED 2008 # define GNULIB_defined_ECANCELED 1 # endif /* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not defined. */ # ifndef EOWNERDEAD # if defined __sun /* Use the same values as defined for Solaris >= 8, for interoperability. */ # define EOWNERDEAD 58 # define ENOTRECOVERABLE 59 # elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* We have a conflict here: pthreads-win32 defines these values differently than MSVC 10. It's hairy to decide which one to use. */ # if defined __MINGW32__ && !defined USE_WINDOWS_THREADS /* Use the same values as defined by pthreads-win32, for interoperability. */ # define EOWNERDEAD 43 # define ENOTRECOVERABLE 44 # else /* Use the same values as defined by MSVC 10, for interoperability. */ # define EOWNERDEAD 133 # define ENOTRECOVERABLE 127 # endif # else # define EOWNERDEAD 2013 # define ENOTRECOVERABLE 2014 # endif # define GNULIB_defined_EOWNERDEAD 1 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EILSEQ # define EILSEQ 2015 # define GNULIB_defined_EILSEQ 1 # endif #endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */ gnuastro-0.5/bootstrapped/lib/dosname.h0000644000175000017500000000373413217200021015207 00000000000000/* File names on MS-DOS/Windows systems. Copyright (C) 2000-2001, 2004-2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . From Paul Eggert and Jim Meyering. */ #ifndef _DOSNAME_H #define _DOSNAME_H #if (defined _WIN32 || defined __WIN32__ || \ defined __MSDOS__ || defined __CYGWIN__ || \ defined __EMX__ || defined __DJGPP__) /* This internal macro assumes ASCII, but all hosts that support drive letters use ASCII. */ # define _IS_DRIVE_LETTER(C) (((unsigned int) (C) | ('a' - 'A')) - 'a' \ <= 'z' - 'a') # define FILE_SYSTEM_PREFIX_LEN(Filename) \ (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0) # ifndef __CYGWIN__ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 # endif # define ISSLASH(C) ((C) == '/' || (C) == '\\') #else # define FILE_SYSTEM_PREFIX_LEN(Filename) 0 # define ISSLASH(C) ((C) == '/') #endif #ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 #endif #if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)]) # else # define IS_ABSOLUTE_FILE_NAME(F) \ (ISSLASH ((F)[0]) || FILE_SYSTEM_PREFIX_LEN (F) != 0) #endif #define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) #endif /* DOSNAME_H_ */ gnuastro-0.5/bootstrapped/lib/dirname.h0000644000175000017500000000300013217200021015162 00000000000000/* Take file names apart into directory and base names. Copyright (C) 1998, 2001, 2003-2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef DIRNAME_H_ # define DIRNAME_H_ 1 # include # include # include "dosname.h" # ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' # endif # ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 # endif #ifdef __cplusplus extern "C" { #endif # if GNULIB_DIRNAME char *base_name (char const *file); char *dir_name (char const *file); # endif char *mdir_name (char const *file); size_t base_len (char const *file) _GL_ATTRIBUTE_PURE; size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; char *last_component (char const *file) _GL_ATTRIBUTE_PURE; bool strip_trailing_slashes (char *file); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* not DIRNAME_H_ */ gnuastro-0.5/bootstrapped/lib/alloca.in.h0000644000175000017500000000400213217200020015405 00000000000000/* Memory allocation on the stack. Copyright (C) 1995, 1999, 2001-2004, 2006-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H means there is a real alloca function. */ #ifndef _GL_ALLOCA_H #define _GL_ALLOCA_H /* alloca (N) returns a pointer to N bytes of memory allocated on the stack, which will last until the function returns. Use of alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns, - for huge N (say, N >= 65536) - you never know how large (or small) the stack is, and when the stack cannot fulfill the memory allocation request, the program just crashes. */ #ifndef alloca # ifdef __GNUC__ # define alloca __builtin_alloca # elif defined _AIX # define alloca __alloca # elif defined _MSC_VER # include # define alloca _alloca # elif defined __DECC && defined __VMS # define alloca __ALLOCA # elif defined __TANDEM && defined _TNS_E_TARGET # ifdef __cplusplus extern "C" # endif void *_alloca (unsigned short); # pragma intrinsic (_alloca) # define alloca _alloca # elif defined __MVS__ # include # else # include # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif #endif /* _GL_ALLOCA_H */ gnuastro-0.5/bootstrapped/lib/wcwidth.c0000644000175000017500000000300013217200022015210 00000000000000/* Determine the number of screen columns needed for a character. Copyright (C) 2006-2007, 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include /* Get iswprint. */ #include #include "localcharset.h" #include "streq.h" #include "uniwidth.h" int wcwidth (wchar_t wc) #undef wcwidth { /* In UTF-8 locales, use a Unicode aware width function. */ const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0)) { /* We assume that in a UTF-8 locale, a wide character is the same as a Unicode character. */ return uc_width (wc, encoding); } else { /* Otherwise, fall back to the system's wcwidth function. */ #if HAVE_WCWIDTH return wcwidth (wc); #else return wc == 0 ? 0 : iswprint (wc) ? 1 : -1; #endif } } gnuastro-0.5/bootstrapped/lib/wcrtomb.c0000644000175000017500000000271613217200022015231 00000000000000/* Convert wide character to multibyte character. Copyright (C) 2008-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps) { /* This implementation of wcrtomb on top of wctomb() supports only stateless encodings. ps must be in the initial state. */ if (ps != NULL && !mbsinit (ps)) { errno = EINVAL; return (size_t)(-1); } if (s == NULL) /* We know the NUL wide character corresponds to the NUL character. */ return 1; else { int ret = wctomb (s, wc); if (ret >= 0) return ret; else { errno = EILSEQ; return (size_t)(-1); } } } gnuastro-0.5/bootstrapped/lib/vsnprintf.c0000644000175000017500000000354113217200021015601 00000000000000/* Formatted output to strings. Copyright (C) 2004, 2006-2017 Free Software Foundation, Inc. Written by Simon Josefsson and Yoann Vandoorselaere . This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifdef HAVE_CONFIG_H # include #endif /* Specification. */ #include #include #include #include #include #include #include "vasnprintf.h" /* Print formatted output to string STR. Similar to vsprintf, but additional length SIZE limit how much is written into STR. Returns string length of formatted string (which may be larger than SIZE). STR may be NULL, in which case nothing will be written. On error, return a negative value. */ int vsnprintf (char *str, size_t size, const char *format, va_list args) { char *output; size_t len; size_t lenbuf = size; output = vasnprintf (str, &lenbuf, format, args); len = lenbuf; if (!output) return -1; if (output != str) { if (size) { size_t pruned_len = (len < size ? len : size - 1); memcpy (str, output, pruned_len); str[pruned_len] = '\0'; } free (output); } if (len > INT_MAX) { errno = EOVERFLOW; return -1; } return len; } gnuastro-0.5/bootstrapped/lib/vasnprintf.c0000644000175000017500000066634213217200021015760 00000000000000/* vsprintf with automatic memory allocation. Copyright (C) 1999, 2002-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* This file can be parametrized with the following macros: VASNPRINTF The name of the function being defined. FCHAR_T The element type of the format string. DCHAR_T The element type of the destination (result) string. FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. MUST be set if FCHAR_T and DCHAR_T are not the same type. DIRECTIVE Structure denoting a format directive. Depends on FCHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on FCHAR_T. PRINTF_PARSE Function that parses a format string. Depends on FCHAR_T. DCHAR_CPY memcpy like function for DCHAR_T[] arrays. DCHAR_SET memset like function for DCHAR_T[] arrays. DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. SNPRINTF The system's snprintf (or similar) function. This may be either snprintf or swprintf. TCHAR_T The element type of the argument and result string of the said SNPRINTF function. This may be either char or wchar_t. The code exploits that sizeof (TCHAR_T) | sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ /* Tell glibc's to provide a prototype for snprintf(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifndef VASNPRINTF # include #endif #ifndef IN_LIBINTL # include #endif /* Specification. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "vasnwprintf.h" # else # include "vasnprintf.h" # endif #endif #include /* localeconv() */ #include /* snprintf(), sprintf() */ #include /* abort(), malloc(), realloc(), free() */ #include /* memcpy(), strlen() */ #include /* errno */ #include /* CHAR_BIT */ #include /* DBL_MAX_EXP, LDBL_MAX_EXP */ #if HAVE_NL_LANGINFO # include #endif #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "wprintf-parse.h" # else # include "printf-parse.h" # endif #endif /* Checked size_t computations. */ #include "xsize.h" #include "verify.h" #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "float+.h" #endif #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL # include # include "isnand-nolibm.h" #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "isnanl-nolibm.h" # include "fpucw.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL # include # include "isnand-nolibm.h" # include "printf-frexp.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "isnanl-nolibm.h" # include "printf-frexpl.h" # include "fpucw.h" #endif #ifndef FALLTHROUGH # if __GNUC__ < 7 # define FALLTHROUGH ((void) 0) # else # define FALLTHROUGH __attribute__ ((__fallthrough__)) # endif #endif /* Default parameters. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # define VASNPRINTF vasnwprintf # define FCHAR_T wchar_t # define DCHAR_T wchar_t # define TCHAR_T wchar_t # define DCHAR_IS_TCHAR 1 # define DIRECTIVE wchar_t_directive # define DIRECTIVES wchar_t_directives # define PRINTF_PARSE wprintf_parse # define DCHAR_CPY wmemcpy # define DCHAR_SET wmemset # else # define VASNPRINTF vasnprintf # define FCHAR_T char # define DCHAR_T char # define TCHAR_T char # define DCHAR_IS_TCHAR 1 # define DIRECTIVE char_directive # define DIRECTIVES char_directives # define PRINTF_PARSE printf_parse # define DCHAR_CPY memcpy # define DCHAR_SET memset # endif #endif #if WIDE_CHAR_VERSION /* TCHAR_T is wchar_t. */ # define USE_SNPRINTF 1 # if HAVE_DECL__SNWPRINTF /* On Windows, the function swprintf() has a different signature than on Unix; we use the function _snwprintf() or - on mingw - snwprintf() instead. The mingw function snwprintf() has fewer bugs than the MSVCRT function _snwprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snwprintf # else # define SNPRINTF _snwprintf # define USE_MSVC__SNPRINTF 1 # endif # else /* Unix. */ # define SNPRINTF swprintf # endif #else /* TCHAR_T is char. */ /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. But don't use it on BeOS, since BeOS snprintf produces no output if the size argument is >= 0x3000000. Also don't use it on Linux libc5, since there snprintf with size = 1 writes any output without bounds, like sprintf. */ # if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) # define USE_SNPRINTF 1 # else # define USE_SNPRINTF 0 # endif # if HAVE_DECL__SNPRINTF /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT function _snprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # else /* MSVC versions < 14 did not have snprintf, only _snprintf. */ # define SNPRINTF _snprintf # define USE_MSVC__SNPRINTF 1 # endif # else /* Unix. */ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # endif #endif /* Here we need to call the native sprintf, not rpl_sprintf. */ #undef sprintf /* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" warnings in this file. Use -Dlint to suppress them. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif /* Avoid some warnings from "gcc -Wshadow". This file doesn't use the exp() and remainder() functions. */ #undef exp #define exp expo #undef remainder #define remainder rem #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION # if (HAVE_STRNLEN && !defined _AIX) # define local_strnlen strnlen # else # ifndef local_strnlen_defined # define local_strnlen_defined 1 static size_t local_strnlen (const char *string, size_t maxlen) { const char *end = memchr (string, '\0', maxlen); return end ? (size_t) (end - string) : maxlen; } # endif # endif #endif #if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T # if HAVE_WCSLEN # define local_wcslen wcslen # else /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid a dependency towards this library, here is a local substitute. Define this substitute only once, even if this file is included twice in the same compilation unit. */ # ifndef local_wcslen_defined # define local_wcslen_defined 1 static size_t local_wcslen (const wchar_t *s) { const wchar_t *ptr; for (ptr = s; *ptr != (wchar_t) 0; ptr++) ; return ptr - s; } # endif # endif #endif #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION # if HAVE_WCSNLEN # define local_wcsnlen wcsnlen # else # ifndef local_wcsnlen_defined # define local_wcsnlen_defined 1 static size_t local_wcsnlen (const wchar_t *s, size_t maxlen) { const wchar_t *ptr; for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) ; return ptr - s; } # endif # endif #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL /* Determine the decimal-point character according to the current locale. */ # ifndef decimal_point_char_defined # define decimal_point_char_defined 1 static char decimal_point_char (void) { const char *point; /* Determine it in a multithread-safe way. We know nl_langinfo is multithread-safe on glibc systems and Mac OS X systems, but is not required to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. localeconv() is rarely multithread-safe. */ # if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) point = nl_langinfo (RADIXCHAR); # elif 1 char pointbuf[5]; sprintf (pointbuf, "%#.0f", 1.0); point = &pointbuf[1]; # else point = localeconv () -> decimal_point; # endif /* The decimal point is always a single byte: either '.' or ','. */ return (point[0] != '\0' ? point[0] : '.'); } # endif #endif #if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zero (double x) { return isnand (x) || x + x == x; } #endif #if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zerol (long double x) { return isnanl (x) || x + x == x; } #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL /* Converting 'long double' to decimal without rare rounding bugs requires real bignums. We use the naming conventions of GNU gmp, but vastly simpler (and slower) algorithms. */ typedef unsigned int mp_limb_t; # define GMP_LIMB_BITS 32 verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); typedef unsigned long long mp_twolimb_t; # define GMP_TWOLIMB_BITS 64 verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); /* Representation of a bignum >= 0. */ typedef struct { size_t nlimbs; mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ } mpn_t; /* Compute the product of two bignums >= 0. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * multiply (mpn_t src1, mpn_t src2, mpn_t *dest) { const mp_limb_t *p1; const mp_limb_t *p2; size_t len1; size_t len2; if (src1.nlimbs <= src2.nlimbs) { len1 = src1.nlimbs; p1 = src1.limbs; len2 = src2.nlimbs; p2 = src2.limbs; } else { len1 = src2.nlimbs; p1 = src2.limbs; len2 = src1.nlimbs; p2 = src1.limbs; } /* Now 0 <= len1 <= len2. */ if (len1 == 0) { /* src1 or src2 is zero. */ dest->nlimbs = 0; dest->limbs = (mp_limb_t *) malloc (1); } else { /* Here 1 <= len1 <= len2. */ size_t dlen; mp_limb_t *dp; size_t k, i, j; dlen = len1 + len2; dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); if (dp == NULL) return NULL; for (k = len2; k > 0; ) dp[--k] = 0; for (i = 0; i < len1; i++) { mp_limb_t digit1 = p1[i]; mp_twolimb_t carry = 0; for (j = 0; j < len2; j++) { mp_limb_t digit2 = p2[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; carry += dp[i + j]; dp[i + j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } dp[i + len2] = (mp_limb_t) carry; } /* Normalise. */ while (dlen > 0 && dp[dlen - 1] == 0) dlen--; dest->nlimbs = dlen; dest->limbs = dp; } return dest->limbs; } /* Compute the quotient of a bignum a >= 0 and a bignum b > 0. a is written as a = q * b + r with 0 <= r < b. q is the quotient, r the remainder. Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, q is incremented. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * divide (mpn_t a, mpn_t b, mpn_t *q) { /* Algorithm: First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). If m=n=1, perform a single-precision division: r:=0, j:=m, while j>0 do {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r=n>1, perform a multiple-precision division: We have a/b < beta^(m-n+1). s:=intDsize-1-(highest bit in b[n-1]), 0<=s=beta/2. For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} Compute q* : q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). In case of overflow (q* >= beta) set q* := beta-1. Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] and c3 := b[n-2] * q*. {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow occurred. Furthermore 0 <= c3 < beta^2. If there was overflow and r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, the next test can be skipped.} While c3 > c2, {Here 0 <= c2 < c3 < beta^2} Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. If q* > 0: Put r := r - b * q* * beta^j. In detail: [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. hence: u:=0, for i:=0 to n-1 do u := u + q* * b[i], r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), u:=u div beta (+ 1, if carry in subtraction) r[n+j]:=r[n+j]-u. {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 < q* + 1 <= beta, the carry u does not overflow.} If a negative carry occurs, put q* := q* - 1 and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. Set q[j] := q*. Normalise [q[m-n],..,q[0]]; this yields the quotient q. Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the rest r. The room for q[j] can be allocated at the memory location of r[n+j]. Finally, round-to-even: Shift r left by 1 bit. If r > b or if r = b and q[0] is odd, q := q+1. */ const mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; const mp_limb_t *b_ptr = b.limbs; size_t b_len = b.nlimbs; mp_limb_t *roomptr; mp_limb_t *tmp_roomptr = NULL; mp_limb_t *q_ptr; size_t q_len; mp_limb_t *r_ptr; size_t r_len; /* Allocate room for a_len+2 digits. (Need a_len+1 digits for the real division and 1 more digit for the final rounding of q.) */ roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); if (roomptr == NULL) return NULL; /* Normalise a. */ while (a_len > 0 && a_ptr[a_len - 1] == 0) a_len--; /* Normalise b. */ for (;;) { if (b_len == 0) /* Division by zero. */ abort (); if (b_ptr[b_len - 1] == 0) b_len--; else break; } /* Here m = a_len >= 0 and n = b_len > 0. */ if (a_len < b_len) { /* m beta^(m-2) <= a/b < beta^m */ r_ptr = roomptr; q_ptr = roomptr + 1; { mp_limb_t den = b_ptr[0]; mp_limb_t remainder = 0; const mp_limb_t *sourceptr = a_ptr + a_len; mp_limb_t *destptr = q_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; *--destptr = num / den; remainder = num % den; } /* Normalise and store r. */ if (remainder > 0) { r_ptr[0] = remainder; r_len = 1; } else r_len = 0; /* Normalise q. */ q_len = a_len; if (q_ptr[q_len - 1] == 0) q_len--; } } else { /* n>1: multiple precision division. beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> beta^(m-n-1) <= a/b < beta^(m-n+1). */ /* Determine s. */ size_t s; { mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ /* Determine s = GMP_LIMB_BITS - integer_length (msd). Code copied from gnulib's integer_length.c. */ # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) s = __builtin_clz (msd); # else # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT if (GMP_LIMB_BITS <= DBL_MANT_BIT) { /* Use 'double' operations. Assumes an IEEE 754 'double' implementation. */ # define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) # define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { double value; unsigned int word[NWORDS]; } m; /* Use a single integer to floating-point conversion. */ m.value = msd; s = GMP_LIMB_BITS - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) - DBL_EXP_BIAS); } else # undef NWORDS # endif { s = 31; if (msd >= 0x10000) { msd = msd >> 16; s -= 16; } if (msd >= 0x100) { msd = msd >> 8; s -= 8; } if (msd >= 0x10) { msd = msd >> 4; s -= 4; } if (msd >= 0x4) { msd = msd >> 2; s -= 2; } if (msd >= 0x2) { msd = msd >> 1; s -= 1; } } # endif } /* 0 <= s < GMP_LIMB_BITS. Copy b, shifting it left by s bits. */ if (s > 0) { tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); if (tmp_roomptr == NULL) { free (roomptr); return NULL; } { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = tmp_roomptr; mp_twolimb_t accu = 0; size_t count; for (count = b_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } /* accu must be zero, since that was how s was determined. */ if (accu != 0) abort (); } b_ptr = tmp_roomptr; } /* Copy a, shifting it left by s bits, yields r. Memory layout: At the beginning: r = roomptr[0..a_len], at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ r_ptr = roomptr; if (s == 0) { memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); r_ptr[a_len] = 0; } else { const mp_limb_t *sourceptr = a_ptr; mp_limb_t *destptr = r_ptr; mp_twolimb_t accu = 0; size_t count; for (count = a_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } *destptr++ = (mp_limb_t) accu; } q_ptr = roomptr + b_len; q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ { size_t j = a_len - b_len; /* m-n */ mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; /* Division loop, traversed m-n+1 times. j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ for (;;) { mp_limb_t q_star; mp_limb_t c1; if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ { /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ mp_twolimb_t num = ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) | r_ptr[j + b_len - 1]; q_star = num / b_msd; c1 = num % b_msd; } else { /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) {<= beta !}. If yes, jump directly to the subtraction loop. (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ if (r_ptr[j + b_len] > b_msd || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) /* r[j+n] >= b[n-1]+1 or r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a carry. */ goto subtract; } /* q_star = q*, c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, 0, decrease it by b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 this can happen only twice. */ if (c3 > c2) { q_star = q_star - 1; /* q* := q* - 1 */ if (c3 - c2 > b_msdd) q_star = q_star - 1; /* q* := q* - 1 */ } } if (q_star > 0) subtract: { /* Subtract r := r - b * q* * beta^j. */ mp_limb_t cr; { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_twolimb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { /* Here 0 <= carry <= q*. */ carry = carry + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + (mp_limb_t) ~(*destptr); /* Here 0 <= carry <= beta*q* + beta-1. */ *destptr++ = ~(mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; /* <= q* */ } cr = (mp_limb_t) carry; } /* Subtract cr from r_ptr[j + b_len], then forget about r_ptr[j + b_len]. */ if (cr > r_ptr[j + b_len]) { /* Subtraction gave a carry. */ q_star = q_star - 1; /* q* := q* - 1 */ /* Add b back. */ { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_limb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { mp_limb_t source1 = *sourceptr++; mp_limb_t source2 = *destptr; *destptr++ = source1 + source2 + carry; carry = (carry ? source1 >= (mp_limb_t) ~source2 : source1 > (mp_limb_t) ~source2); } } /* Forget about the carry and about r[j+n]. */ } } /* q* is determined. Store it as q[j]. */ q_ptr[j] = q_star; if (j == 0) break; j--; } } r_len = b_len; /* Normalise q. */ if (q_ptr[q_len - 1] == 0) q_len--; # if 0 /* Not needed here, since we need r only to compare it with b/2, and b is shifted left by s bits. */ /* Shift r right by s bits. */ if (s > 0) { mp_limb_t ptr = r_ptr + r_len; mp_twolimb_t accu = 0; size_t count; for (count = r_len; count > 0; count--) { accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); } } # endif /* Normalise r. */ while (r_len > 0 && r_ptr[r_len - 1] == 0) r_len--; } /* Compare r << 1 with b. */ if (r_len > b_len) goto increment_q; { size_t i; for (i = b_len;;) { mp_limb_t r_i = (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) | (i < r_len ? r_ptr[i] << 1 : 0); mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); if (r_i > b_i) goto increment_q; if (r_i < b_i) goto keep_q; if (i == 0) break; i--; } } if (q_len > 0 && ((q_ptr[0] & 1) != 0)) /* q is odd. */ increment_q: { size_t i; for (i = 0; i < q_len; i++) if (++(q_ptr[i]) != 0) goto keep_q; q_ptr[q_len++] = 1; } keep_q: if (tmp_roomptr != NULL) free (tmp_roomptr); q->limbs = q_ptr; q->nlimbs = q_len; return roomptr; } /* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal representation. Destroys the contents of a. Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * convert_to_decimal (mpn_t a, size_t extra_zeroes) { mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); if (c_ptr != NULL) { char *d_ptr = c_ptr; for (; extra_zeroes > 0; extra_zeroes--) *d_ptr++ = '0'; while (a_len > 0) { /* Divide a by 10^9, in-place. */ mp_limb_t remainder = 0; mp_limb_t *ptr = a_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; *ptr = num / 1000000000; remainder = num % 1000000000; } /* Store the remainder as 9 decimal digits. */ for (count = 9; count > 0; count--) { *d_ptr++ = '0' + (remainder % 10); remainder = remainder / 10; } /* Normalize a. */ if (a_ptr[a_len - 1] == 0) a_len--; } /* Remove leading zeroes. */ while (d_ptr > c_ptr && d_ptr[-1] == '0') d_ptr--; /* But keep at least one zero. */ if (d_ptr == c_ptr) *d_ptr++ = '0'; /* Terminate the string. */ *d_ptr = '\0'; } return c_ptr; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_long_double (long double x, int *ep, mpn_t *mp) { mpn_t m; int exp; long double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'long double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess precision. */ if (!(y == 0.0L)) abort (); # endif /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - LDBL_MANT_BIT; return m.limbs; } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_double (double x, int *ep, mpn_t *mp) { mpn_t m; int exp; double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } if (!(y == 0.0)) abort (); /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - DBL_MANT_BIT; return m.limbs; } # endif /* Assuming x = 2^e * m is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) { int s; size_t extra_zeroes; unsigned int abs_n; unsigned int abs_s; mp_limb_t *pow5_ptr; size_t pow5_len; unsigned int s_limbs; unsigned int s_bits; mpn_t pow5; mpn_t z; void *z_memory; char *digits; if (memory == NULL) return NULL; /* x = 2^e * m, hence y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) = round (2^s * 5^n * m). */ s = e + n; extra_zeroes = 0; /* Factor out a common power of 10 if possible. */ if (s > 0 && n > 0) { extra_zeroes = (s < n ? s : n); s -= extra_zeroes; n -= extra_zeroes; } /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. Before converting to decimal, we need to compute z = round (2^s * 5^n * m). */ /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same sign. 2.322 is slightly larger than log(5)/log(2). */ abs_n = (n >= 0 ? n : -n); abs_s = (s >= 0 ? s : -s); pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + abs_s / GMP_LIMB_BITS + 1) * sizeof (mp_limb_t)); if (pow5_ptr == NULL) { free (memory); return NULL; } /* Initialize with 1. */ pow5_ptr[0] = 1; pow5_len = 1; /* Multiply with 5^|n|. */ if (abs_n > 0) { static mp_limb_t const small_pow5[13 + 1] = { 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125, 244140625, 1220703125 }; unsigned int n13; for (n13 = 0; n13 <= abs_n; n13 += 13) { mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; size_t j; mp_twolimb_t carry = 0; for (j = 0; j < pow5_len; j++) { mp_limb_t digit2 = pow5_ptr[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; pow5_ptr[j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } if (carry > 0) pow5_ptr[pow5_len++] = (mp_limb_t) carry; } } s_limbs = abs_s / GMP_LIMB_BITS; s_bits = abs_s % GMP_LIMB_BITS; if (n >= 0 ? s >= 0 : s <= 0) { /* Multiply with 2^|s|. */ if (s_bits > 0) { mp_limb_t *ptr = pow5_ptr; mp_twolimb_t accu = 0; size_t count; for (count = pow5_len; count > 0; count--) { accu += (mp_twolimb_t) *ptr << s_bits; *ptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) { *ptr = (mp_limb_t) accu; pow5_len++; } } if (s_limbs > 0) { size_t count; for (count = pow5_len; count > 0;) { count--; pow5_ptr[s_limbs + count] = pow5_ptr[count]; } for (count = s_limbs; count > 0;) { count--; pow5_ptr[count] = 0; } pow5_len += s_limbs; } pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* Multiply m with pow5. No division needed. */ z_memory = multiply (m, pow5, &z); } else { /* Divide m by pow5 and round. */ z_memory = divide (m, pow5, &z); } } else { pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* n >= 0, s < 0. Multiply m with pow5, then divide by 2^|s|. */ mpn_t numerator; mpn_t denominator; void *tmp_memory; tmp_memory = multiply (m, pow5, &numerator); if (tmp_memory == NULL) { free (pow5_ptr); free (memory); return NULL; } /* Construct 2^|s|. */ { mp_limb_t *ptr = pow5_ptr + pow5_len; size_t i; for (i = 0; i < s_limbs; i++) ptr[i] = 0; ptr[s_limbs] = (mp_limb_t) 1 << s_bits; denominator.limbs = ptr; denominator.nlimbs = s_limbs + 1; } z_memory = divide (numerator, denominator, &z); free (tmp_memory); } else { /* n < 0, s > 0. Multiply m with 2^s, then divide by pow5. */ mpn_t numerator; mp_limb_t *num_ptr; num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) * sizeof (mp_limb_t)); if (num_ptr == NULL) { free (pow5_ptr); free (memory); return NULL; } { mp_limb_t *destptr = num_ptr; { size_t i; for (i = 0; i < s_limbs; i++) *destptr++ = 0; } if (s_bits > 0) { const mp_limb_t *sourceptr = m.limbs; mp_twolimb_t accu = 0; size_t count; for (count = m.nlimbs; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s_bits; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) *destptr++ = (mp_limb_t) accu; } else { const mp_limb_t *sourceptr = m.limbs; size_t count; for (count = m.nlimbs; count > 0; count--) *destptr++ = *sourceptr++; } numerator.limbs = num_ptr; numerator.nlimbs = destptr - num_ptr; } z_memory = divide (numerator, pow5, &z); free (num_ptr); } } free (pow5_ptr); free (memory); /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ if (z_memory == NULL) return NULL; digits = convert_to_decimal (z, extra_zeroes); free (z_memory); return digits; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_long_double (long double x, int n) { int e IF_LINT(= 0); mpn_t m; void *memory = decode_long_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_double (double x, int n) { int e IF_LINT(= 0); mpn_t m; void *memory = decode_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10l (long double x) { int exp; long double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); if (y == 0.0L) return INT_MIN; if (y < 0.5L) { while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0L / (1 << 16))) { y *= 1.0L * (1 << 16); exp -= 16; } if (y < (1.0L / (1 << 8))) { y *= 1.0L * (1 << 8); exp -= 8; } if (y < (1.0L / (1 << 4))) { y *= 1.0L * (1 << 4); exp -= 4; } if (y < (1.0L / (1 << 2))) { y *= 1.0L * (1 << 2); exp -= 2; } if (y < (1.0L / (1 << 1))) { y *= 1.0L * (1 << 1); exp -= 1; } } if (!(y >= 0.5L && y < 1.0L)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10 (double x) { int exp; double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); if (y == 0.0) return INT_MIN; if (y < 0.5) { while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0 / (1 << 16))) { y *= 1.0 * (1 << 16); exp -= 16; } if (y < (1.0 / (1 << 8))) { y *= 1.0 * (1 << 8); exp -= 8; } if (y < (1.0 / (1 << 4))) { y *= 1.0 * (1 << 4); exp -= 4; } if (y < (1.0 / (1 << 2))) { y *= 1.0 * (1 << 2); exp -= 2; } if (y < (1.0 / (1 << 1))) { y *= 1.0 * (1 << 1); exp -= 1; } } if (!(y >= 0.5 && y < 1.0)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif /* Tests whether a string of digits consists of exactly PRECISION zeroes and a single '1' digit. */ static int is_borderline (const char *digits, size_t precision) { for (; precision > 0; precision--, digits++) if (*digits != '0') return 0; if (*digits != '1') return 0; digits++; return *digits == '\0'; } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF /* Use a different function name, to make it possible that the 'wchar_t' parametrization and the 'char' parametrization get compiled in the same translation unit. */ # if WIDE_CHAR_VERSION # define MAX_ROOM_NEEDED wmax_room_needed # else # define MAX_ROOM_NEEDED max_room_needed # endif /* Returns the number of TCHAR_T units needed as temporary space for the result of sprintf or SNPRINTF of a single conversion directive. */ static size_t MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, arg_type type, int flags, size_t width, int has_precision, size_t precision, int pad_ourselves) { size_t tmp_length; switch (conversion) { case 'd': case 'i': case 'u': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Multiply by 2, as an estimate for FLAG_GROUP. */ tmp_length = xsum (tmp_length, tmp_length); /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'o': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'x': case 'X': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 2, to account for a leading sign or alternate form. */ tmp_length = xsum (tmp_length, 2); break; case 'f': case 'F': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ else tmp_length = (unsigned int) (DBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ tmp_length = xsum (tmp_length, precision); break; case 'e': case 'E': case 'g': case 'G': tmp_length = 12; /* sign, decimal point, exponent etc. */ tmp_length = xsum (tmp_length, precision); break; case 'a': case 'A': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (DBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); break; case 'c': # if HAVE_WINT_T && !WIDE_CHAR_VERSION if (type == TYPE_WIDE_CHAR) tmp_length = MB_CUR_MAX; else # endif tmp_length = 1; break; case 's': # if HAVE_WCHAR_T if (type == TYPE_WIDE_STRING) { # if WIDE_CHAR_VERSION /* ISO C says about %ls in fwprintf: "If the precision is not specified or is greater than the size of the array, the array shall contain a null wide character." So if there is a precision, we must not use wcslen. */ const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; if (has_precision) tmp_length = local_wcsnlen (arg, precision); else tmp_length = local_wcslen (arg); # else /* ISO C says about %ls in fprintf: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." So if there is a precision, we must not use wcslen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # endif } else # endif { # if WIDE_CHAR_VERSION /* ISO C says about %s in fwprintf: "If the precision is not specified or is greater than the size of the converted array, the converted array shall contain a null wide character." So if there is a precision, we must not use strlen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # else /* ISO C says about %s in fprintf: "If the precision is not specified or greater than the size of the array, the array shall contain a null character." So if there is a precision, we must not use strlen. */ const char *arg = ap->arg[arg_index].a.a_string; if (has_precision) tmp_length = local_strnlen (arg, precision); else tmp_length = strlen (arg); # endif } break; case 'p': tmp_length = (unsigned int) (sizeof (void *) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading 0x */ break; default: abort (); } if (!pad_ourselves) { # if ENABLE_UNISTDIO /* Padding considers the number of characters, therefore the number of elements after padding may be > max (tmp_length, width) but is certainly <= tmp_length + width. */ tmp_length = xsum (tmp_length, width); # else /* Padding considers the number of elements, says POSIX. */ if (tmp_length < width) tmp_length = width; # endif } tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ return tmp_length; } #endif DCHAR_T * VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, const FCHAR_T *format, va_list args) { DIRECTIVES d; arguments a; if (PRINTF_PARSE (format, &d, &a) < 0) /* errno is already set. */ return NULL; #define CLEANUP() \ if (d.dir != d.direct_alloc_dir) \ free (d.dir); \ if (a.arg != a.direct_alloc_arg) \ free (a.arg); if (PRINTF_FETCHARGS (args, &a) < 0) { CLEANUP (); errno = EINVAL; return NULL; } { size_t buf_neededlength; TCHAR_T *buf; TCHAR_T *buf_malloced; const FCHAR_T *cp; size_t i; DIRECTIVE *dp; /* Output string accumulator. */ DCHAR_T *result; size_t allocated; size_t length; /* Allocate a small buffer that will hold a directive passed to sprintf or snprintf. */ buf_neededlength = xsum4 (7, d.max_width_length, d.max_precision_length, 6); #if HAVE_ALLOCA if (buf_neededlength < 4000 / sizeof (TCHAR_T)) { buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); buf_malloced = NULL; } else #endif { size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); if (size_overflow_p (buf_memsize)) goto out_of_memory_1; buf = (TCHAR_T *) malloc (buf_memsize); if (buf == NULL) goto out_of_memory_1; buf_malloced = buf; } if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ /* Ensures that allocated >= needed. Aborts through a jump to out_of_memory if needed is SIZE_MAX or otherwise too big. */ #define ENSURE_ALLOCATION(needed) \ if ((needed) > allocated) \ { \ size_t memory_size; \ DCHAR_T *memory; \ \ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ if ((needed) > allocated) \ allocated = (needed); \ memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ if (size_overflow_p (memory_size)) \ goto out_of_memory; \ if (result == resultbuf || result == NULL) \ memory = (DCHAR_T *) malloc (memory_size); \ else \ memory = (DCHAR_T *) realloc (result, memory_size); \ if (memory == NULL) \ goto out_of_memory; \ if (result == resultbuf && length > 0) \ DCHAR_CPY (memory, result, length); \ result = memory; \ } for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) { if (cp != dp->dir_start) { size_t n = dp->dir_start - cp; size_t augmented_length = xsum (length, n); ENSURE_ALLOCATION (augmented_length); /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we need that the format string contains only ASCII characters if FCHAR_T and DCHAR_T are not the same type. */ if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) { DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); length = augmented_length; } else { do result[length++] = *cp++; while (--n > 0); } } if (i == d.count) break; /* Execute a single directive. */ if (dp->conversion == '%') { size_t augmented_length; if (!(dp->arg_index == ARG_NONE)) abort (); augmented_length = xsum (length, 1); ENSURE_ALLOCATION (augmented_length); result[length] = '%'; length = augmented_length; } else { if (!(dp->arg_index != ARG_NONE)) abort (); if (dp->conversion == 'n') { switch (a.arg[dp->arg_index].type) { case TYPE_COUNT_SCHAR_POINTER: *a.arg[dp->arg_index].a.a_count_schar_pointer = length; break; case TYPE_COUNT_SHORT_POINTER: *a.arg[dp->arg_index].a.a_count_short_pointer = length; break; case TYPE_COUNT_INT_POINTER: *a.arg[dp->arg_index].a.a_count_int_pointer = length; break; case TYPE_COUNT_LONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longint_pointer = length; break; #if HAVE_LONG_LONG_INT case TYPE_COUNT_LONGLONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; break; #endif default: abort (); } } #if ENABLE_UNISTDIO /* The unistdio extensions. */ else if (dp->conversion == 'U') { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } switch (type) { case TYPE_U8_STRING: { const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; const uint8_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u8_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT8_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-8 to locale encoding. */ converted = u8_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-8 to UTF-16/UTF-32. */ converted = U8_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U16_STRING: { const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; const uint16_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u16_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT16_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-16 to locale encoding. */ converted = u16_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-16 to UTF-8/UTF-32. */ converted = U16_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U32_STRING: { const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; const uint32_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u32_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT32_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-32 to locale encoding. */ converted = u32_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-32 to UTF-8/UTF-16. */ converted = U32_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; default: abort (); } } #endif #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T else if (dp->conversion == 's' # if WIDE_CHAR_VERSION && a.arg[dp->arg_index].type != TYPE_WIDE_STRING # else && a.arg[dp->arg_index].type == TYPE_WIDE_STRING # endif ) { /* The normal handling of the 's' directive below requires allocating a temporary buffer. The determination of its length (tmp_length), in the case when a precision is specified, below requires a conversion between a char[] string and a wchar_t[] wide string. It could be done, but we have no guarantee that the implementation of sprintf will use the exactly same algorithm. Without this guarantee, it is possible to have buffer overrun bugs. In order to avoid such bugs, we implement the entire processing of the 's' directive ourselves. */ int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } # if WIDE_CHAR_VERSION /* %s in vasnwprintf. See the specification of fwprintf. */ { const char *arg = a.arg[dp->arg_index].a.a_string; const char *arg_end; size_t characters; if (has_precision) { /* Use only as many bytes as needed to produce PRECISION wide characters, from the left. */ # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) { /* Invalid or incomplete multibyte character. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of wide characters. */ # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (;;) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) { /* Invalid or incomplete multibyte character. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } if (has_precision || has_width) { /* We know the number of wide characters in advance. */ size_t remaining; # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; remaining--) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); result[length++] = wc; arg += count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif while (arg < arg_end) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); ENSURE_ALLOCATION (xsum (length, 1)); result[length++] = wc; arg += count; } } if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # else /* %ls in vasnprintf. See the specification of fprintf. */ { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; const wchar_t *arg_end; size_t characters; # if !DCHAR_IS_TCHAR /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; # endif size_t w; if (has_precision) { /* Use only as many wide characters as needed to produce at most PRECISION bytes, from the left. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; while (precision > 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg_end, &state); # else count = wctomb (cbuf, *arg_end); # endif if (count < 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } if (precision < count) break; arg_end++; characters += count; precision -= count; } } # if DCHAR_IS_TCHAR else if (has_width) # else else # endif { /* Use the entire string, and count the number of bytes. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (;;) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg_end, &state); # else count = wctomb (cbuf, *arg_end); # endif if (count < 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end++; characters += count; } } # if DCHAR_IS_TCHAR else { /* Use the entire string. */ arg_end = arg + local_wcslen (arg); /* The number of bytes doesn't matter. */ characters = 0; } # endif # if !DCHAR_IS_TCHAR /* Convert the string into a piece of temporary memory. */ tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); if (tmpsrc == NULL) goto out_of_memory; { TCHAR_T *tmpptr = tmpsrc; size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif if (count <= 0) /* Inconsistency. */ abort (); memcpy (tmpptr, cbuf, count); tmpptr += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } /* Convert from TCHAR_T[] to DCHAR_T[]. */ tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, characters, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { int saved_errno = errno; free (tmpsrc); if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } free (tmpsrc); # endif if (has_width) { # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, characters); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = characters; # endif } else /* w doesn't matter. */ w = 0; if (w < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_TCHAR if (has_precision || has_width) { /* We know the number of bytes in advance. */ size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif if (count <= 0) /* Inconsistency. */ abort (); memcpy (result + length, cbuf, count); length += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif while (arg < arg_end) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif if (count <= 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } ENSURE_ALLOCATION (xsum (length, count)); memcpy (result + length, cbuf, count); length += count; arg++; } } # else ENSURE_ALLOCATION (xsum (length, tmpdst_len)); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); length += tmpdst_len; # endif if (w < width && (dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # endif } #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'a' || dp->conversion == 'A') # if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # endif ) # endif ) { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; size_t width; int has_precision; size_t precision; size_t tmp_length; size_t count; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* Allocate a temporary buffer of sufficient size. */ if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) ((LDBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) ((DBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; if (type == TYPE_LONGDOUBLE) { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; long double mantissa; if (arg > 0.0L) mantissa = printf_frexpl (arg, &exponent); else { exponent = 0; mantissa = 0.0L; } if (has_precision && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ long double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5L : tail > 0.5L) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0L; } if (tail != 0.0L) for (q = precision; q > 0; q--) tail *= 0.0625L; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0L || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0L) { mantissa *= 16.0L; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } END_LONG_DOUBLE_ROUNDING (); } # else abort (); # endif } else { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; double mantissa; if (arg > 0.0) mantissa = printf_frexp (arg, &exponent); else { exponent = 0; mantissa = 0.0; } if (has_precision && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5 : tail > 0.5) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0; } if (tail != 0.0) for (q = precision; q > 0; q--) tail *= 0.0625; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0 || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0) { mantissa *= 16.0; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } } # else abort (); # endif } /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif #if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'f' || dp->conversion == 'F' || dp->conversion == 'e' || dp->conversion == 'E' || dp->conversion == 'g' || dp->conversion == 'G' || dp->conversion == 'a' || dp->conversion == 'A') && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # elif NEED_PRINTF_INFINITE_DOUBLE || (a.arg[dp->arg_index].type == TYPE_DOUBLE /* The systems (mingw) which produce wrong output for Inf, -Inf, and NaN also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # elif NEED_PRINTF_INFINITE_LONG_DOUBLE || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE /* Some systems produce wrong output for Inf, -Inf, and NaN. Some systems in this category (IRIX 5.3) also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) # endif )) { # if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) arg_type type = a.arg[dp->arg_index].type; # endif int flags = dp->flags; size_t width; size_t count; int has_precision; size_t precision; size_t tmp_length; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* POSIX specifies the default precision to be 6 for %f, %F, %e, %E, but not for %g, %G. Implementations appear to use the same default precision also for %g, %G. But for %a, %A, the default precision is 0. */ if (!has_precision) if (!(dp->conversion == 'a' || dp->conversion == 'A')) precision = 6; /* Allocate a temporary buffer of sufficient size. */ # if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); # elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); # elif NEED_PRINTF_LONG_DOUBLE tmp_length = LDBL_DIG + 1; # elif NEED_PRINTF_DOUBLE tmp_length = DBL_DIG + 1; # else tmp_length = 0; # endif if (tmp_length < precision) tmp_length = precision; # if NEED_PRINTF_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (!(isnanl (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10l (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif # if NEED_PRINTF_DOUBLE # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE if (type == TYPE_DOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { double arg = a.arg[dp->arg_index].a.a_double; if (!(isnand (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10 (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_LONG_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_long_double (arg, precision); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0L) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0L. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)precision - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0L) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0L. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: count <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0L)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else if (dp->conversion == 'a' || dp->conversion == 'A') { *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion - 'A' + 'P'; *p++ = '+'; *p++ = '0'; } else abort (); # endif } END_LONG_DOUBLE_ROUNDING (); } } # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE else # endif # endif # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE { double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_double (arg, precision); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)precision - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: ecount <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ *p++ = '0'; # endif *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else abort (); # endif } } } # endif /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif else { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int has_width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION size_t width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION int has_precision; size_t precision; #endif #if NEED_PRINTF_UNBOUNDED_PRECISION int prec_ourselves; #else # define prec_ourselves 0 #endif #if NEED_PRINTF_FLAG_LEFTADJUST # define pad_ourselves 1 #elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int pad_ourselves; #else # define pad_ourselves 0 #endif TCHAR_T *fbp; unsigned int prefix_count; int prefixes[2] IF_LINT (= { 0 }); int orig_errno; #if !USE_SNPRINTF size_t tmp_length; TCHAR_T tmpbuf[700]; TCHAR_T *tmp; #endif #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 0; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 1; #endif } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } #endif /* Decide whether to handle the precision ourselves. */ #if NEED_PRINTF_UNBOUNDED_PRECISION switch (dp->conversion) { case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': prec_ourselves = has_precision && (precision > 0); break; default: prec_ourselves = 0; break; } #endif /* Decide whether to perform the padding ourselves. */ #if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) switch (dp->conversion) { # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need to perform the padding after this conversion. Functions with unistdio extensions perform the padding based on character count rather than element count. */ case 'c': case 's': # endif # if NEED_PRINTF_FLAG_ZERO case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': # endif pad_ourselves = 1; break; default: pad_ourselves = prec_ourselves; break; } #endif #if !USE_SNPRINTF /* Allocate a temporary buffer of sufficient size for calling sprintf. */ tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (TCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } #endif /* Construct the format string for calling snprintf or sprintf. */ fbp = buf; *fbp++ = '%'; #if NEED_PRINTF_FLAG_GROUPING /* The underlying implementation doesn't support the ' flag. Produce no grouping characters in this case; this is acceptable because the grouping is locale dependent. */ #else if (flags & FLAG_GROUP) *fbp++ = '\''; #endif if (flags & FLAG_LEFT) *fbp++ = '-'; if (flags & FLAG_SHOWSIGN) *fbp++ = '+'; if (flags & FLAG_SPACE) *fbp++ = ' '; if (flags & FLAG_ALT) *fbp++ = '#'; #if __GLIBC__ >= 2 && !defined __UCLIBC__ if (flags & FLAG_LOCALIZED) *fbp++ = 'I'; #endif if (!pad_ourselves) { if (flags & FLAG_ZERO) *fbp++ = '0'; if (dp->width_start != dp->width_end) { size_t n = dp->width_end - dp->width_start; /* The width specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->width_start; do *fbp++ = *mp++; while (--n > 0); } } } if (!prec_ourselves) { if (dp->precision_start != dp->precision_end) { size_t n = dp->precision_end - dp->precision_start; /* The precision specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->precision_start; do *fbp++ = *mp++; while (--n > 0); } } } switch (type) { #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: case TYPE_ULONGLONGINT: # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ *fbp++ = 'I'; *fbp++ = '6'; *fbp++ = '4'; break; # else *fbp++ = 'l'; # endif #endif FALLTHROUGH; case TYPE_LONGINT: case TYPE_ULONGINT: #if HAVE_WINT_T case TYPE_WIDE_CHAR: #endif #if HAVE_WCHAR_T case TYPE_WIDE_STRING: #endif *fbp++ = 'l'; break; case TYPE_LONGDOUBLE: *fbp++ = 'L'; break; default: break; } #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') *fbp = 'f'; else #endif *fbp = dp->conversion; #if USE_SNPRINTF # if ! (((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) \ && !defined __UCLIBC__) \ || (defined __APPLE__ && defined __MACH__) \ || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) fbp[1] = '%'; fbp[2] = 'n'; fbp[3] = '\0'; # else /* On glibc2 systems from glibc >= 2.3 - probably also older ones - we know that snprintf's return value conforms to ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and gl_SNPRINTF_TRUNCATION_C99 pass. Therefore we can avoid using %n in this situation. On glibc2 systems from 2004-10-18 or newer, the use of %n in format strings in writable memory may crash the program (if compiled with _FORTIFY_SOURCE=2), so we should avoid it in this situation. */ /* On Mac OS X 10.3 or newer, we know that snprintf's return value conforms to ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and gl_SNPRINTF_TRUNCATION_C99 pass. Therefore we can avoid using %n in this situation. On Mac OS X 10.13 or newer, the use of %n in format strings in writable memory by default crashes the program, so we should avoid it in this situation. */ /* On native Windows systems (such as mingw), we can avoid using %n because: - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, snprintf does not write more than the specified number of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes '4', '5', '6' into buf, not '4', '5', '\0'.) - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf allows us to recognize the case of an insufficient buffer size: it returns -1 in this case. On native Windows systems (such as mingw) where the OS is Windows Vista, the use of %n in format strings by default crashes the program. See and So we should avoid %n in this situation. */ fbp[1] = '\0'; # endif #else fbp[1] = '\0'; #endif /* Construct the arguments for calling snprintf or sprintf. */ prefix_count = 0; if (!pad_ourselves && dp->width_arg_index != ARG_NONE) { if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; } if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) { if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; } #if USE_SNPRINTF /* The SNPRINTF result is appended after result[0..length]. The latter is an array of DCHAR_T; SNPRINTF appends an array of TCHAR_T to it. This is possible because sizeof (TCHAR_T) divides sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). */ # define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) /* Ensure that maxlen below will be >= 2. Needed on BeOS, where an snprintf() with maxlen==1 acts like sprintf(). */ ENSURE_ALLOCATION (xsum (length, (2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR)); /* Prepare checking whether snprintf returns the count via %n. */ *(TCHAR_T *) (result + length) = '\0'; #endif orig_errno = errno; for (;;) { int count = -1; #if USE_SNPRINTF int retcount = 0; size_t maxlen = allocated - length; /* SNPRINTF can fail if its second argument is > INT_MAX. */ if (maxlen > INT_MAX / TCHARS_PER_DCHAR) maxlen = INT_MAX / TCHARS_PER_DCHAR; maxlen = maxlen * TCHARS_PER_DCHAR; # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ arg, &count); \ break; \ case 1: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], arg, &count); \ break; \ case 2: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], prefixes[1], arg, \ &count); \ break; \ default: \ abort (); \ } #else # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ count = sprintf (tmp, buf, arg); \ break; \ case 1: \ count = sprintf (tmp, buf, prefixes[0], arg); \ break; \ case 2: \ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ arg); \ break; \ default: \ abort (); \ } #endif errno = 0; switch (type) { case TYPE_SCHAR: { int arg = a.arg[dp->arg_index].a.a_schar; SNPRINTF_BUF (arg); } break; case TYPE_UCHAR: { unsigned int arg = a.arg[dp->arg_index].a.a_uchar; SNPRINTF_BUF (arg); } break; case TYPE_SHORT: { int arg = a.arg[dp->arg_index].a.a_short; SNPRINTF_BUF (arg); } break; case TYPE_USHORT: { unsigned int arg = a.arg[dp->arg_index].a.a_ushort; SNPRINTF_BUF (arg); } break; case TYPE_INT: { int arg = a.arg[dp->arg_index].a.a_int; SNPRINTF_BUF (arg); } break; case TYPE_UINT: { unsigned int arg = a.arg[dp->arg_index].a.a_uint; SNPRINTF_BUF (arg); } break; case TYPE_LONGINT: { long int arg = a.arg[dp->arg_index].a.a_longint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGINT: { unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; SNPRINTF_BUF (arg); } break; #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: { long long int arg = a.arg[dp->arg_index].a.a_longlongint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGLONGINT: { unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; SNPRINTF_BUF (arg); } break; #endif case TYPE_DOUBLE: { double arg = a.arg[dp->arg_index].a.a_double; SNPRINTF_BUF (arg); } break; case TYPE_LONGDOUBLE: { long double arg = a.arg[dp->arg_index].a.a_longdouble; SNPRINTF_BUF (arg); } break; case TYPE_CHAR: { int arg = a.arg[dp->arg_index].a.a_char; SNPRINTF_BUF (arg); } break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: { wint_t arg = a.arg[dp->arg_index].a.a_wide_char; SNPRINTF_BUF (arg); } break; #endif case TYPE_STRING: { const char *arg = a.arg[dp->arg_index].a.a_string; SNPRINTF_BUF (arg); } break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; SNPRINTF_BUF (arg); } break; #endif case TYPE_POINTER: { void *arg = a.arg[dp->arg_index].a.a_pointer; SNPRINTF_BUF (arg); } break; default: abort (); } #if USE_SNPRINTF /* Portability: Not all implementations of snprintf() are ISO C 99 compliant. Determine the number of bytes that snprintf() has produced or would have produced. */ if (count >= 0) { /* Verify that snprintf() has NUL-terminated its result. */ if (count < maxlen && ((TCHAR_T *) (result + length)) [count] != '\0') abort (); /* Portability hack. */ if (retcount > count) count = retcount; } else { /* snprintf() doesn't understand the '%n' directive. */ if (fbp[1] != '\0') { /* Don't use the '%n' directive; instead, look at the snprintf() return value. */ fbp[1] = '\0'; continue; } else { /* Look at the snprintf() return value. */ if (retcount < 0) { # if !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF /* HP-UX 10.20 snprintf() is doubly deficient: It doesn't understand the '%n' directive, *and* it returns -1 (rather than the length that would have been required) when the buffer is too small. But a failure at this point can also come from other reasons than a too small buffer, such as an invalid wide string argument to the %ls directive, or possibly an invalid floating-point argument. */ size_t tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (maxlen < tmp_length) { /* Make more room. But try to do through this reallocation only once. */ size_t bigger_need = xsum (length, xsum (tmp_length, TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); /* And always grow proportionally. (There may be several arguments, each needing a little more room than the previous one.) */ size_t bigger_need2 = xsum (xtimes (allocated, 2), 12); if (bigger_need < bigger_need2) bigger_need = bigger_need2; ENSURE_ALLOCATION (bigger_need); continue; } # endif } else count = retcount; } } #endif /* Attempt to handle failure. */ if (count < 0) { /* SNPRINTF or sprintf failed. Save and use the errno that it has set, if any. */ int saved_errno = errno; if (saved_errno == 0) { if (dp->conversion == 'c' || dp->conversion == 's') saved_errno = EILSEQ; else saved_errno = EINVAL; } if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } #if USE_SNPRINTF /* Handle overflow of the allocated buffer. If such an overflow occurs, a C99 compliant snprintf() returns a count >= maxlen. However, a non-compliant snprintf() function returns only count = maxlen - 1. To cover both cases, test whether count >= maxlen - 1. */ if ((unsigned int) count + 1 >= maxlen) { /* If maxlen already has attained its allowed maximum, allocating more memory will not increase maxlen. Instead of looping, bail out. */ if (maxlen == INT_MAX / TCHARS_PER_DCHAR) goto overflow; else { /* Need at least (count + 1) * sizeof (TCHAR_T) bytes. (The +1 is for the trailing NUL.) But ask for (count + 2) * sizeof (TCHAR_T) bytes, so that in the next round, we likely get maxlen > (unsigned int) count + 1 and so we don't get here again. And allocate proportionally, to avoid looping eternally if snprintf() reports a too small count. */ size_t n = xmax (xsum (length, ((unsigned int) count + 2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); continue; } } #endif #if NEED_PRINTF_UNBOUNDED_PRECISION if (prec_ourselves) { /* Handle the precision. */ TCHAR_T *prec_ptr = # if USE_SNPRINTF (TCHAR_T *) (result + length); # else tmp; # endif size_t prefix_count; size_t move; prefix_count = 0; /* Put the additional zeroes after the sign. */ if (count >= 1 && (*prec_ptr == '-' || *prec_ptr == '+' || *prec_ptr == ' ')) prefix_count = 1; /* Put the additional zeroes after the 0x prefix if (flags & FLAG_ALT) || (dp->conversion == 'p'). */ else if (count >= 2 && prec_ptr[0] == '0' && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) prefix_count = 2; move = count - prefix_count; if (precision > move) { /* Insert zeroes. */ size_t insert = precision - move; TCHAR_T *prec_end; # if USE_SNPRINTF size_t n = xsum (length, (count + insert + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; ENSURE_ALLOCATION (n); length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; prec_ptr = (TCHAR_T *) (result + length); # endif prec_end = prec_ptr + count; prec_ptr += prefix_count; while (prec_end > prec_ptr) { prec_end--; prec_end[insert] = prec_end[0]; } prec_end += insert; do *--prec_end = '0'; while (prec_end > prec_ptr); count += insert; } } #endif #if !USE_SNPRINTF if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); #endif #if !DCHAR_IS_TCHAR /* Convert from TCHAR_T[] to DCHAR_T[]. */ if (dp->conversion == 'c' || dp->conversion == 's') { /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING TYPE_WIDE_STRING. The result string is not certainly ASCII. */ const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); # if USE_SNPRINTF tmpsrc = (TCHAR_T *) (result + length); # else tmpsrc = tmp; # endif tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, count, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } ENSURE_ALLOCATION (xsum (length, tmpdst_len)); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); count = tmpdst_len; } else { /* The result string is ASCII. Simple 1:1 conversion. */ # if USE_SNPRINTF /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a no-op conversion, in-place on the array starting at (result + length). */ if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) # endif { const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t n; # if USE_SNPRINTF if (result == resultbuf) { tmpsrc = (TCHAR_T *) (result + length); /* ENSURE_ALLOCATION will not move tmpsrc (because it's part of resultbuf). */ ENSURE_ALLOCATION (xsum (length, count)); } else { /* ENSURE_ALLOCATION will move the array (because it uses realloc(). */ ENSURE_ALLOCATION (xsum (length, count)); tmpsrc = (TCHAR_T *) (result + length); } # else tmpsrc = tmp; ENSURE_ALLOCATION (xsum (length, count)); # endif tmpdst = result + length; /* Copy backwards, because of overlapping. */ tmpsrc += count; tmpdst += count; for (n = count; n > 0; n--) *--tmpdst = *--tmpsrc; } } #endif #if DCHAR_IS_TCHAR && !USE_SNPRINTF /* Make room for the result. */ if (count > allocated - length) { /* Need at least count elements. But allocate proportionally. */ size_t n = xmax (xsum (length, count), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); } #endif /* Here count <= allocated - length. */ /* Perform padding. */ #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION if (pad_ourselves && has_width) { size_t w; # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, count); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = count; # endif if (w < width) { size_t pad = width - w; /* Make room for the result. */ if (xsum (count, pad) > allocated - length) { /* Need at least count + pad elements. But allocate proportionally. */ size_t n = xmax (xsum3 (length, count, pad), xtimes (allocated, 2)); # if USE_SNPRINTF length += count; ENSURE_ALLOCATION (n); length -= count; # else ENSURE_ALLOCATION (n); # endif } /* Here count + pad <= allocated - length. */ { # if !DCHAR_IS_TCHAR || USE_SNPRINTF DCHAR_T * const rp = result + length; # else DCHAR_T * const rp = tmp; # endif DCHAR_T *p = rp + count; DCHAR_T *end = p + pad; DCHAR_T *pad_ptr; # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO if (dp->conversion == 'c' || dp->conversion == 's') /* No zero-padding for string directives. */ pad_ptr = NULL; else # endif { pad_ptr = (*rp == '-' ? rp + 1 : rp); /* No zero-padding of "inf" and "nan". */ if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) pad_ptr = NULL; } /* The generated string now extends from rp to p, with the zero padding insertion point being at pad_ptr. */ count = count + pad; /* = end - rp */ if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > rp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } } } } #endif /* Here still count <= allocated - length. */ #if !DCHAR_IS_TCHAR || USE_SNPRINTF /* The snprintf() result did fit. */ #else /* Append the sprintf() result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); #endif #if !USE_SNPRINTF if (tmp != tmpbuf) free (tmp); #endif #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') { /* Convert the %f result to upper case for %F. */ DCHAR_T *rp = result + length; size_t rc; for (rc = count; rc > 0; rc--, rp++) if (*rp >= 'a' && *rp <= 'z') *rp = *rp - 'a' + 'A'; } #endif length += count; break; } errno = orig_errno; #undef pad_ourselves #undef prec_ourselves } } } /* Add the final NUL. */ ENSURE_ALLOCATION (xsum (length, 1)); result[length] = '\0'; if (result != resultbuf && length + 1 < allocated) { /* Shrink the allocated memory if possible. */ DCHAR_T *memory; memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); if (memory != NULL) result = memory; } if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); *lengthp = length; /* Note that we can produce a big string of a length > INT_MAX. POSIX says that snprintf() fails with errno = EOVERFLOW in this case, but that's only because snprintf() returns an 'int'. This function does not have this limitation. */ return result; #if USE_SNPRINTF overflow: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EOVERFLOW; return NULL; #endif out_of_memory: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); out_of_memory_1: CLEANUP (); errno = ENOMEM; return NULL; } } #undef MAX_ROOM_NEEDED #undef TCHARS_PER_DCHAR #undef SNPRINTF #undef USE_SNPRINTF #undef DCHAR_SET #undef DCHAR_CPY #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef DCHAR_IS_TCHAR #undef TCHAR_T #undef DCHAR_T #undef FCHAR_T #undef VASNPRINTF gnuastro-0.5/bootstrapped/lib/printf-parse.c0000644000175000017500000005317213217200021016167 00000000000000/* Formatted output to strings. Copyright (C) 1999-2000, 2002-2003, 2006-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* This file can be parametrized with the following macros: CHAR_T The element type of the format string. CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. DIRECTIVE Structure denoting a format directive. Depends on CHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on CHAR_T. PRINTF_PARSE Function that parses a format string. Depends on CHAR_T. STATIC Set to 'static' to declare the function static. ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ #ifndef PRINTF_PARSE # include #endif /* Specification. */ #ifndef PRINTF_PARSE # include "printf-parse.h" #endif /* Default parameters. */ #ifndef PRINTF_PARSE # define PRINTF_PARSE printf_parse # define CHAR_T char # define DIRECTIVE char_directive # define DIRECTIVES char_directives #endif /* Get size_t, NULL. */ #include /* Get intmax_t. */ #if defined IN_LIBINTL || defined IN_LIBASPRINTF # if HAVE_STDINT_H_WITH_UINTMAX # include # endif # if HAVE_INTTYPES_H_WITH_UINTMAX # include # endif #else # include #endif /* malloc(), realloc(), free(). */ #include /* memcpy(). */ #include /* errno. */ #include /* Checked size_t computations. */ #include "xsize.h" #if CHAR_T_ONLY_ASCII /* c_isascii(). */ # include "c-ctype.h" #endif #ifdef STATIC STATIC #endif int PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) { const CHAR_T *cp = format; /* pointer into format */ size_t arg_posn = 0; /* number of regular arguments consumed */ size_t d_allocated; /* allocated elements of d->dir */ size_t a_allocated; /* allocated elements of a->arg */ size_t max_width_length = 0; size_t max_precision_length = 0; d->count = 0; d_allocated = N_DIRECT_ALLOC_DIRECTIVES; d->dir = d->direct_alloc_dir; a->count = 0; a_allocated = N_DIRECT_ALLOC_ARGUMENTS; a->arg = a->direct_alloc_arg; #define REGISTER_ARG(_index_,_type_) \ { \ size_t n = (_index_); \ if (n >= a_allocated) \ { \ size_t memory_size; \ argument *memory; \ \ a_allocated = xtimes (a_allocated, 2); \ if (a_allocated <= n) \ a_allocated = xsum (n, 1); \ memory_size = xtimes (a_allocated, sizeof (argument)); \ if (size_overflow_p (memory_size)) \ /* Overflow, would lead to out of memory. */ \ goto out_of_memory; \ memory = (argument *) (a->arg != a->direct_alloc_arg \ ? realloc (a->arg, memory_size) \ : malloc (memory_size)); \ if (memory == NULL) \ /* Out of memory. */ \ goto out_of_memory; \ if (a->arg == a->direct_alloc_arg) \ memcpy (memory, a->arg, a->count * sizeof (argument)); \ a->arg = memory; \ } \ while (a->count <= n) \ a->arg[a->count++].type = TYPE_NONE; \ if (a->arg[n].type == TYPE_NONE) \ a->arg[n].type = (_type_); \ else if (a->arg[n].type != (_type_)) \ /* Ambiguous type for positional argument. */ \ goto error; \ } while (*cp != '\0') { CHAR_T c = *cp++; if (c == '%') { size_t arg_index = ARG_NONE; DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ /* Initialize the next directive. */ dp->dir_start = cp - 1; dp->flags = 0; dp->width_start = NULL; dp->width_end = NULL; dp->width_arg_index = ARG_NONE; dp->precision_start = NULL; dp->precision_end = NULL; dp->precision_arg_index = ARG_NONE; dp->arg_index = ARG_NONE; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; arg_index = n - 1; cp = np + 1; } } /* Read the flags. */ for (;;) { if (*cp == '\'') { dp->flags |= FLAG_GROUP; cp++; } else if (*cp == '-') { dp->flags |= FLAG_LEFT; cp++; } else if (*cp == '+') { dp->flags |= FLAG_SHOWSIGN; cp++; } else if (*cp == ' ') { dp->flags |= FLAG_SPACE; cp++; } else if (*cp == '#') { dp->flags |= FLAG_ALT; cp++; } else if (*cp == '0') { dp->flags |= FLAG_ZERO; cp++; } #if __GLIBC__ >= 2 && !defined __UCLIBC__ else if (*cp == 'I') { dp->flags |= FLAG_LOCALIZED; cp++; } #endif else break; } /* Parse the field width. */ if (*cp == '*') { dp->width_start = cp; cp++; dp->width_end = cp; if (max_width_length < 1) max_width_length = 1; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->width_arg_index = n - 1; cp = np + 1; } } if (dp->width_arg_index == ARG_NONE) { dp->width_arg_index = arg_posn++; if (dp->width_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->width_arg_index, TYPE_INT); } else if (*cp >= '0' && *cp <= '9') { size_t width_length; dp->width_start = cp; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->width_end = cp; width_length = dp->width_end - dp->width_start; if (max_width_length < width_length) max_width_length = width_length; } /* Parse the precision. */ if (*cp == '.') { cp++; if (*cp == '*') { dp->precision_start = cp - 1; cp++; dp->precision_end = cp; if (max_precision_length < 2) max_precision_length = 2; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->precision_arg_index = n - 1; cp = np + 1; } } if (dp->precision_arg_index == ARG_NONE) { dp->precision_arg_index = arg_posn++; if (dp->precision_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->precision_arg_index, TYPE_INT); } else { size_t precision_length; dp->precision_start = cp - 1; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->precision_end = cp; precision_length = dp->precision_end - dp->precision_start; if (max_precision_length < precision_length) max_precision_length = precision_length; } } { arg_type type; /* Parse argument type/size specifiers. */ { int flags = 0; for (;;) { if (*cp == 'h') { flags |= (1 << (flags & 1)); cp++; } else if (*cp == 'L') { flags |= 4; cp++; } else if (*cp == 'l') { flags += 8; cp++; } else if (*cp == 'j') { if (sizeof (intmax_t) > sizeof (long)) { /* intmax_t = long long */ flags += 16; } else if (sizeof (intmax_t) > sizeof (int)) { /* intmax_t = long */ flags += 8; } cp++; } else if (*cp == 'z' || *cp == 'Z') { /* 'z' is standardized in ISO C 99, but glibc uses 'Z' because the warning facility in gcc-2.95.2 understands only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ if (sizeof (size_t) > sizeof (long)) { /* size_t = long long */ flags += 16; } else if (sizeof (size_t) > sizeof (int)) { /* size_t = long */ flags += 8; } cp++; } else if (*cp == 't') { if (sizeof (ptrdiff_t) > sizeof (long)) { /* ptrdiff_t = long long */ flags += 16; } else if (sizeof (ptrdiff_t) > sizeof (int)) { /* ptrdiff_t = long */ flags += 8; } cp++; } #if defined __APPLE__ && defined __MACH__ /* On Mac OS X 10.3, PRIdMAX is defined as "qd". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'q') { if (64 / 8 > sizeof (long)) { /* int64_t = long long */ flags += 16; } else { /* int64_t = long */ flags += 8; } cp++; } #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, PRIdMAX is defined as "I64d". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') { if (64 / 8 > sizeof (long)) { /* __int64 = long long */ flags += 16; } else { /* __int64 = long */ flags += 8; } cp += 3; } #endif else break; } /* Read the conversion character. */ c = *cp++; switch (c) { case 'd': case 'i': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_LONGLONGINT; else #endif /* If 'long long' exists and is the same as 'long', we parse "lld" into TYPE_LONGINT. */ if (flags >= 8) type = TYPE_LONGINT; else if (flags & 2) type = TYPE_SCHAR; else if (flags & 1) type = TYPE_SHORT; else type = TYPE_INT; break; case 'o': case 'u': case 'x': case 'X': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_ULONGLONGINT; else #endif /* If 'unsigned long long' exists and is the same as 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ if (flags >= 8) type = TYPE_ULONGINT; else if (flags & 2) type = TYPE_UCHAR; else if (flags & 1) type = TYPE_USHORT; else type = TYPE_UINT; break; case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': if (flags >= 16 || (flags & 4)) type = TYPE_LONGDOUBLE; else type = TYPE_DOUBLE; break; case 'c': if (flags >= 8) #if HAVE_WINT_T type = TYPE_WIDE_CHAR; #else goto error; #endif else type = TYPE_CHAR; break; #if HAVE_WINT_T case 'C': type = TYPE_WIDE_CHAR; c = 'c'; break; #endif case 's': if (flags >= 8) #if HAVE_WCHAR_T type = TYPE_WIDE_STRING; #else goto error; #endif else type = TYPE_STRING; break; #if HAVE_WCHAR_T case 'S': type = TYPE_WIDE_STRING; c = 's'; break; #endif case 'p': type = TYPE_POINTER; break; case 'n': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_COUNT_LONGLONGINT_POINTER; else #endif /* If 'long long' exists and is the same as 'long', we parse "lln" into TYPE_COUNT_LONGINT_POINTER. */ if (flags >= 8) type = TYPE_COUNT_LONGINT_POINTER; else if (flags & 2) type = TYPE_COUNT_SCHAR_POINTER; else if (flags & 1) type = TYPE_COUNT_SHORT_POINTER; else type = TYPE_COUNT_INT_POINTER; break; #if ENABLE_UNISTDIO /* The unistdio extensions. */ case 'U': if (flags >= 16) type = TYPE_U32_STRING; else if (flags >= 8) type = TYPE_U16_STRING; else type = TYPE_U8_STRING; break; #endif case '%': type = TYPE_NONE; break; default: /* Unknown conversion character. */ goto error; } } if (type != TYPE_NONE) { dp->arg_index = arg_index; if (dp->arg_index == ARG_NONE) { dp->arg_index = arg_posn++; if (dp->arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->arg_index, type); } dp->conversion = c; dp->dir_end = cp; } d->count++; if (d->count >= d_allocated) { size_t memory_size; DIRECTIVE *memory; d_allocated = xtimes (d_allocated, 2); memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ goto out_of_memory; memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir ? realloc (d->dir, memory_size) : malloc (memory_size)); if (memory == NULL) /* Out of memory. */ goto out_of_memory; if (d->dir == d->direct_alloc_dir) memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); d->dir = memory; } } #if CHAR_T_ONLY_ASCII else if (!c_isascii (c)) { /* Non-ASCII character. Not supported. */ goto error; } #endif } d->dir[d->count].dir_start = cp; d->max_width_length = max_width_length; d->max_precision_length = max_precision_length; return 0; error: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = EINVAL; return -1; out_of_memory: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = ENOMEM; return -1; } #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef CHAR_T_ONLY_ASCII #undef CHAR_T gnuastro-0.5/bootstrapped/lib/printf-args.c0000644000175000017500000001463313217200021016010 00000000000000/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be defined. STATIC Set to 'static' to declare the function static. */ #ifndef PRINTF_FETCHARGS # include #endif /* Specification. */ #ifndef PRINTF_FETCHARGS # include "printf-args.h" #endif #ifdef STATIC STATIC #endif int PRINTF_FETCHARGS (va_list args, arguments *a) { size_t i; argument *ap; for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) switch (ap->type) { case TYPE_SCHAR: ap->a.a_schar = va_arg (args, /*signed char*/ int); break; case TYPE_UCHAR: ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); break; case TYPE_SHORT: ap->a.a_short = va_arg (args, /*short*/ int); break; case TYPE_USHORT: ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); break; case TYPE_INT: ap->a.a_int = va_arg (args, int); break; case TYPE_UINT: ap->a.a_uint = va_arg (args, unsigned int); break; case TYPE_LONGINT: ap->a.a_longint = va_arg (args, long int); break; case TYPE_ULONGINT: ap->a.a_ulongint = va_arg (args, unsigned long int); break; #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: ap->a.a_longlongint = va_arg (args, long long int); break; case TYPE_ULONGLONGINT: ap->a.a_ulonglongint = va_arg (args, unsigned long long int); break; #endif case TYPE_DOUBLE: ap->a.a_double = va_arg (args, double); break; case TYPE_LONGDOUBLE: ap->a.a_longdouble = va_arg (args, long double); break; case TYPE_CHAR: ap->a.a_char = va_arg (args, int); break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by default argument promotions", this is not the case in mingw32, where wint_t is 'unsigned short'. */ ap->a.a_wide_char = (sizeof (wint_t) < sizeof (int) ? (wint_t) va_arg (args, int) : va_arg (args, wint_t)); break; #endif case TYPE_STRING: ap->a.a_string = va_arg (args, const char *); /* A null pointer is an invalid argument for "%s", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_string == NULL) ap->a.a_string = "(NULL)"; break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: ap->a.a_wide_string = va_arg (args, const wchar_t *); /* A null pointer is an invalid argument for "%ls", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_wide_string == NULL) { static const wchar_t wide_null_string[] = { (wchar_t)'(', (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', (wchar_t)')', (wchar_t)0 }; ap->a.a_wide_string = wide_null_string; } break; #endif case TYPE_POINTER: ap->a.a_pointer = va_arg (args, void *); break; case TYPE_COUNT_SCHAR_POINTER: ap->a.a_count_schar_pointer = va_arg (args, signed char *); break; case TYPE_COUNT_SHORT_POINTER: ap->a.a_count_short_pointer = va_arg (args, short *); break; case TYPE_COUNT_INT_POINTER: ap->a.a_count_int_pointer = va_arg (args, int *); break; case TYPE_COUNT_LONGINT_POINTER: ap->a.a_count_longint_pointer = va_arg (args, long int *); break; #if HAVE_LONG_LONG_INT case TYPE_COUNT_LONGLONGINT_POINTER: ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); break; #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ case TYPE_U8_STRING: ap->a.a_u8_string = va_arg (args, const uint8_t *); /* A null pointer is an invalid argument for "%U", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u8_string == NULL) { static const uint8_t u8_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u8_string = u8_null_string; } break; case TYPE_U16_STRING: ap->a.a_u16_string = va_arg (args, const uint16_t *); /* A null pointer is an invalid argument for "%lU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u16_string == NULL) { static const uint16_t u16_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u16_string = u16_null_string; } break; case TYPE_U32_STRING: ap->a.a_u32_string = va_arg (args, const uint32_t *); /* A null pointer is an invalid argument for "%llU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u32_string == NULL) { static const uint32_t u32_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u32_string = u32_null_string; } break; #endif default: /* Unknown type. */ return -1; } return 0; } gnuastro-0.5/bootstrapped/lib/asnprintf.c0000644000175000017500000000204713217200020015553 00000000000000/* Formatted output to strings. Copyright (C) 1999, 2002, 2006, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include "vasnprintf.h" #include char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *result; va_start (args, format); result = vasnprintf (resultbuf, lengthp, format, args); va_end (args); return result; } gnuastro-0.5/bootstrapped/lib/strtok_r.c0000644000175000017500000000411513217200021015415 00000000000000/* Reentrant string tokenizer. Generic version. Copyright (C) 1991, 1996-1999, 2001, 2004, 2007, 2009-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef _LIBC # undef strtok_r # undef __strtok_r #else # define __strtok_r strtok_r # define __rawmemchr strchr #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" */ char * __strtok_r (char *s, const char *delim, char **save_ptr) { char *token; if (s == NULL) s = *save_ptr; /* Scan leading delimiters. */ s += strspn (s, delim); if (*s == '\0') { *save_ptr = s; return NULL; } /* Find the end of the token. */ token = s; s = strpbrk (token, delim); if (s == NULL) /* This token finishes the string. */ *save_ptr = __rawmemchr (token, '\0'); else { /* Terminate the token and make *SAVE_PTR point past it. */ *s = '\0'; *save_ptr = s + 1; } return token; } #ifdef weak_alias libc_hidden_def (__strtok_r) weak_alias (__strtok_r, strtok_r) #endif gnuastro-0.5/bootstrapped/lib/strtod.c0000644000175000017500000002416513217200021015074 00000000000000/* Copyright (C) 1991-1992, 1997, 1999, 2003, 2006, 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include "c-ctype.h" #ifndef HAVE_LDEXP_IN_LIBC #define HAVE_LDEXP_IN_LIBC 0 #endif /* Return true if C is a space in the current locale, avoiding problems with signed char and isspace. */ static bool locale_isspace (char c) { unsigned char uc = c; return isspace (uc) != 0; } #if !HAVE_LDEXP_IN_LIBC #define ldexp dummy_ldexp /* A dummy definition that will never be invoked. */ static double ldexp (double x _GL_UNUSED, int exponent _GL_UNUSED) { abort (); return 0.0; } #endif /* Return X * BASE**EXPONENT. Return an extreme value and set errno to ERANGE if underflow or overflow occurs. */ static double scale_radix_exp (double x, int radix, long int exponent) { /* If RADIX == 10, this code is neither precise nor fast; it is merely a straightforward and relatively portable approximation. If N == 2, this code is precise on a radix-2 implementation, albeit perhaps not fast if ldexp is not in libc. */ long int e = exponent; if (HAVE_LDEXP_IN_LIBC && radix == 2) return ldexp (x, e < INT_MIN ? INT_MIN : INT_MAX < e ? INT_MAX : e); else { double r = x; if (r != 0) { if (e < 0) { while (e++ != 0) { r /= radix; if (r == 0 && x != 0) { errno = ERANGE; break; } } } else { while (e-- != 0) { if (r < -DBL_MAX / radix) { errno = ERANGE; return -HUGE_VAL; } else if (DBL_MAX / radix < r) { errno = ERANGE; return HUGE_VAL; } else r *= radix; } } } return r; } } /* Parse a number at NPTR; this is a bit like strtol (NPTR, ENDPTR) except there are no leading spaces or signs or "0x", and ENDPTR is nonnull. The number uses a base BASE (either 10 or 16) fraction, a radix RADIX (either 10 or 2) exponent, and exponent character EXPCHAR. To convert from a number of digits to a radix exponent, multiply by RADIX_MULTIPLIER (either 1 or 4). */ static double parse_number (const char *nptr, int base, int radix, int radix_multiplier, char expchar, char **endptr) { const char *s = nptr; bool got_dot = false; long int exponent = 0; double num = 0; for (;; ++s) { int digit; if (c_isdigit (*s)) digit = *s - '0'; else if (base == 16 && c_isxdigit (*s)) digit = c_tolower (*s) - ('a' - 10); else if (! got_dot && *s == '.') { /* Record that we have found the decimal point. */ got_dot = true; continue; } else /* Any other character terminates the number. */ break; /* Make sure that multiplication by base will not overflow. */ if (num <= DBL_MAX / base) num = num * base + digit; else { /* The value of the digit doesn't matter, since we have already gotten as many digits as can be represented in a 'double'. This doesn't necessarily mean the result will overflow. The exponent may reduce it to within range. We just need to record that there was another digit so that we can multiply by 10 later. */ exponent += radix_multiplier; } /* Keep track of the number of digits after the decimal point. If we just divided by base here, we might lose precision. */ if (got_dot) exponent -= radix_multiplier; } if (c_tolower (*s) == expchar && ! locale_isspace (s[1])) { /* Add any given exponent to the implicit one. */ int save = errno; char *end; long int value = strtol (s + 1, &end, 10); errno = save; if (s + 1 != end) { /* Skip past the exponent, and add in the implicit exponent, resulting in an extreme value on overflow. */ s = end; exponent = (exponent < 0 ? (value < LONG_MIN - exponent ? LONG_MIN : exponent + value) : (LONG_MAX - exponent < value ? LONG_MAX : exponent + value)); } } *endptr = (char *) s; return scale_radix_exp (num, radix, exponent); } static double underlying_strtod (const char *, char **); /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -DBL_MIN * DBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static double compute_minus_zero (void) { return -DBL_MIN * DBL_MIN; } # define minus_zero compute_minus_zero () #else double minus_zero = -0.0; #endif /* Convert NPTR to a double. If ENDPTR is not NULL, a pointer to the character after the last one used in the number is put in *ENDPTR. */ double strtod (const char *nptr, char **endptr) { bool negative = false; /* The number so far. */ double num; const char *s = nptr; const char *end; char *endbuf; int saved_errno = errno; /* Eat whitespace. */ while (locale_isspace (*s)) ++s; /* Get the sign. */ negative = *s == '-'; if (*s == '-' || *s == '+') ++s; num = underlying_strtod (s, &endbuf); end = endbuf; if (c_isdigit (s[*s == '.'])) { /* If a hex float was converted incorrectly, do it ourselves. If the string starts with "0x" but does not contain digits, consume the "0" ourselves. If a hex float is followed by a 'p' but no exponent, then adjust the end pointer. */ if (*s == '0' && c_tolower (s[1]) == 'x') { if (! c_isxdigit (s[2 + (s[2] == '.')])) { end = s + 1; /* strtod() on z/OS returns ERANGE for "0x". */ errno = saved_errno; } else if (end <= s + 2) { num = parse_number (s + 2, 16, 2, 4, 'p', &endbuf); end = endbuf; } else { const char *p = s + 2; while (p < end && c_tolower (*p) != 'p') p++; if (p < end && ! c_isdigit (p[1 + (p[1] == '-' || p[1] == '+')])) end = p; } } else { /* If "1e 1" was misparsed as 10.0 instead of 1.0, re-do the underlying strtod on a copy of the original string truncated to avoid the bug. */ const char *e = s + 1; while (e < end && c_tolower (*e) != 'e') e++; if (e < end && ! c_isdigit (e[1 + (e[1] == '-' || e[1] == '+')])) { char *dup = strdup (s); errno = saved_errno; if (!dup) { /* Not really our day, is it. Rounding errors are better than outright failure. */ num = parse_number (s, 10, 10, 1, 'e', &endbuf); } else { dup[e - s] = '\0'; num = underlying_strtod (dup, &endbuf); saved_errno = errno; free (dup); errno = saved_errno; } end = e; } } s = end; } /* Check for infinities and NaNs. */ else if (c_tolower (*s) == 'i' && c_tolower (s[1]) == 'n' && c_tolower (s[2]) == 'f') { s += 3; if (c_tolower (*s) == 'i' && c_tolower (s[1]) == 'n' && c_tolower (s[2]) == 'i' && c_tolower (s[3]) == 't' && c_tolower (s[4]) == 'y') s += 5; num = HUGE_VAL; errno = saved_errno; } else if (c_tolower (*s) == 'n' && c_tolower (s[1]) == 'a' && c_tolower (s[2]) == 'n') { s += 3; if (*s == '(') { const char *p = s + 1; while (c_isalnum (*p)) p++; if (*p == ')') s = p + 1; } /* If the underlying implementation misparsed the NaN, assume its result is incorrect, and return a NaN. Normally it's better to use the underlying implementation's result, since a nice implementation populates the bits of the NaN according to interpreting n-char-sequence as a hexadecimal number. */ if (s != end || num == num) num = NAN; errno = saved_errno; } else { /* No conversion could be performed. */ errno = EINVAL; s = nptr; } if (endptr != NULL) *endptr = (char *) s; /* Special case -0.0, since at least ICC miscompiles negation. We can't use copysign(), as that drags in -lm on some platforms. */ if (!num && negative) return minus_zero; return negative ? -num : num; } /* The underlying strtod implementation. This must be defined after strtod because it #undefs strtod. */ static double underlying_strtod (const char *nptr, char **endptr) { #undef strtod return strtod (nptr, endptr); } gnuastro-0.5/bootstrapped/lib/strnlen.c0000644000175000017500000000216513217200021015236 00000000000000/* Find the length of STRING, but scan at most MAXLEN characters. Copyright (C) 2005-2007, 2009-2017 Free Software Foundation, Inc. Written by Simon Josefsson. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include /* Find the length of STRING, but scan at most MAXLEN characters. If no '\0' terminator is found in that many characters, return MAXLEN. */ size_t strnlen (const char *string, size_t maxlen) { const char *end = memchr (string, '\0', maxlen); return end ? (size_t) (end - string) : maxlen; } gnuastro-0.5/bootstrapped/lib/strndup.c0000644000175000017500000000202513217200021015243 00000000000000/* A replacement function, for systems that lack strndup. Copyright (C) 1996-1998, 2001-2003, 2005-2007, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include #include #include char * strndup (char const *s, size_t n) { size_t len = strnlen (s, n); char *new = malloc (len + 1); if (new == NULL) return NULL; new[len] = '\0'; return memcpy (new, s, len); } gnuastro-0.5/bootstrapped/lib/strerror-override.c0000644000175000017500000002146613217200021017255 00000000000000/* strerror-override.c --- POSIX compatible system error routine Copyright (C) 2010-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2010. */ #include #include "strerror-override.h" #include #if GNULIB_defined_EWINSOCK /* native Windows platforms */ # if HAVE_WINSOCK2_H # include # endif #endif /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ const char * strerror_override (int errnum) { /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ switch (errnum) { #if REPLACE_STRERROR_0 case 0: return "Success"; #endif #if GNULIB_defined_ESOCK /* native Windows platforms with older */ case EINPROGRESS: return "Operation now in progress"; case EALREADY: return "Operation already in progress"; case ENOTSOCK: return "Socket operation on non-socket"; case EDESTADDRREQ: return "Destination address required"; case EMSGSIZE: return "Message too long"; case EPROTOTYPE: return "Protocol wrong type for socket"; case ENOPROTOOPT: return "Protocol not available"; case EPROTONOSUPPORT: return "Protocol not supported"; case EOPNOTSUPP: return "Operation not supported"; case EAFNOSUPPORT: return "Address family not supported by protocol"; case EADDRINUSE: return "Address already in use"; case EADDRNOTAVAIL: return "Cannot assign requested address"; case ENETDOWN: return "Network is down"; case ENETUNREACH: return "Network is unreachable"; case ECONNRESET: return "Connection reset by peer"; case ENOBUFS: return "No buffer space available"; case EISCONN: return "Transport endpoint is already connected"; case ENOTCONN: return "Transport endpoint is not connected"; case ETIMEDOUT: return "Connection timed out"; case ECONNREFUSED: return "Connection refused"; case ELOOP: return "Too many levels of symbolic links"; case EHOSTUNREACH: return "No route to host"; case EWOULDBLOCK: return "Operation would block"; #endif #if GNULIB_defined_ESTREAMS /* native Windows platforms with older */ case ETXTBSY: return "Text file busy"; case ENODATA: return "No data available"; case ENOSR: return "Out of streams resources"; case ENOSTR: return "Device not a stream"; case ETIME: return "Timer expired"; case EOTHER: return "Other error"; #endif #if GNULIB_defined_EWINSOCK /* native Windows platforms */ case ESOCKTNOSUPPORT: return "Socket type not supported"; case EPFNOSUPPORT: return "Protocol family not supported"; case ESHUTDOWN: return "Cannot send after transport endpoint shutdown"; case ETOOMANYREFS: return "Too many references: cannot splice"; case EHOSTDOWN: return "Host is down"; case EPROCLIM: return "Too many processes"; case EUSERS: return "Too many users"; case EDQUOT: return "Disk quota exceeded"; case ESTALE: return "Stale NFS file handle"; case EREMOTE: return "Object is remote"; # if HAVE_WINSOCK2_H /* WSA_INVALID_HANDLE maps to EBADF */ /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ /* WSA_INVALID_PARAMETER maps to EINVAL */ case WSA_OPERATION_ABORTED: return "Overlapped operation aborted"; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state"; case WSA_IO_PENDING: return "Overlapped operations will complete later"; /* WSAEINTR maps to EINTR */ /* WSAEBADF maps to EBADF */ /* WSAEACCES maps to EACCES */ /* WSAEFAULT maps to EFAULT */ /* WSAEINVAL maps to EINVAL */ /* WSAEMFILE maps to EMFILE */ /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ /* WSAEINPROGRESS maps to EINPROGRESS */ /* WSAEALREADY maps to EALREADY */ /* WSAENOTSOCK maps to ENOTSOCK */ /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ /* WSAEMSGSIZE maps to EMSGSIZE */ /* WSAEPROTOTYPE maps to EPROTOTYPE */ /* WSAENOPROTOOPT maps to ENOPROTOOPT */ /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ /* WSAEADDRINUSE maps to EADDRINUSE */ /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ /* WSAENETDOWN maps to ENETDOWN */ /* WSAENETUNREACH maps to ENETUNREACH */ /* WSAENETRESET maps to ENETRESET */ /* WSAECONNABORTED maps to ECONNABORTED */ /* WSAECONNRESET maps to ECONNRESET */ /* WSAENOBUFS maps to ENOBUFS */ /* WSAEISCONN maps to EISCONN */ /* WSAENOTCONN maps to ENOTCONN */ /* WSAESHUTDOWN is ESHUTDOWN */ /* WSAETOOMANYREFS is ETOOMANYREFS */ /* WSAETIMEDOUT maps to ETIMEDOUT */ /* WSAECONNREFUSED maps to ECONNREFUSED */ /* WSAELOOP maps to ELOOP */ /* WSAENAMETOOLONG maps to ENAMETOOLONG */ /* WSAEHOSTDOWN is EHOSTDOWN */ /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ /* WSAENOTEMPTY maps to ENOTEMPTY */ /* WSAEPROCLIM is EPROCLIM */ /* WSAEUSERS is EUSERS */ /* WSAEDQUOT is EDQUOT */ /* WSAESTALE is ESTALE */ /* WSAEREMOTE is EREMOTE */ case WSASYSNOTREADY: return "Network subsystem is unavailable"; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range"; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed"; case WSAEDISCON: return "Graceful shutdown in progress"; case WSAENOMORE: case WSA_E_NO_MORE: return "No more results"; case WSAECANCELLED: case WSA_E_CANCELLED: return "Call was canceled"; case WSAEINVALIDPROCTABLE: return "Procedure call table is invalid"; case WSAEINVALIDPROVIDER: return "Service provider is invalid"; case WSAEPROVIDERFAILEDINIT: return "Service provider failed to initialize"; case WSASYSCALLFAILURE: return "System call failure"; case WSASERVICE_NOT_FOUND: return "Service not found"; case WSATYPE_NOT_FOUND: return "Class type not found"; case WSAEREFUSED: return "Database query was refused"; case WSAHOST_NOT_FOUND: return "Host not found"; case WSATRY_AGAIN: return "Nonauthoritative host not found"; case WSANO_RECOVERY: return "Nonrecoverable error"; case WSANO_DATA: return "Valid name, no data record of requested type"; /* WSA_QOS_* omitted */ # endif #endif #if GNULIB_defined_ENOMSG case ENOMSG: return "No message of desired type"; #endif #if GNULIB_defined_EIDRM case EIDRM: return "Identifier removed"; #endif #if GNULIB_defined_ENOLINK case ENOLINK: return "Link has been severed"; #endif #if GNULIB_defined_EPROTO case EPROTO: return "Protocol error"; #endif #if GNULIB_defined_EMULTIHOP case EMULTIHOP: return "Multihop attempted"; #endif #if GNULIB_defined_EBADMSG case EBADMSG: return "Bad message"; #endif #if GNULIB_defined_EOVERFLOW case EOVERFLOW: return "Value too large for defined data type"; #endif #if GNULIB_defined_ENOTSUP case ENOTSUP: return "Not supported"; #endif #if GNULIB_defined_ENETRESET case ENETRESET: return "Network dropped connection on reset"; #endif #if GNULIB_defined_ECONNABORTED case ECONNABORTED: return "Software caused connection abort"; #endif #if GNULIB_defined_ESTALE case ESTALE: return "Stale NFS file handle"; #endif #if GNULIB_defined_EDQUOT case EDQUOT: return "Disk quota exceeded"; #endif #if GNULIB_defined_ECANCELED case ECANCELED: return "Operation canceled"; #endif #if GNULIB_defined_EOWNERDEAD case EOWNERDEAD: return "Owner died"; #endif #if GNULIB_defined_ENOTRECOVERABLE case ENOTRECOVERABLE: return "State not recoverable"; #endif #if GNULIB_defined_EILSEQ case EILSEQ: return "Invalid or incomplete multibyte or wide character"; #endif default: return NULL; } } gnuastro-0.5/bootstrapped/lib/strerror.c0000644000175000017500000000405313217200021015431 00000000000000/* strerror.c --- POSIX compatible system error routine Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include #include #include #include "intprops.h" #include "strerror-override.h" #include "verify.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf char * strerror (int n) #undef strerror { static char buf[STACKBUF_LEN]; size_t len; /* Cast away const, due to the historical signature of strerror; callers should not be modifying the string. */ const char *msg = strerror_override (n); if (msg) return (char *) msg; msg = strerror (n); /* Our strerror_r implementation might use the system's strerror buffer, so all other clients of strerror have to see the error copied into a buffer that we manage. This is not thread-safe, even if the system strerror is, but portable programs shouldn't be using strerror if they care about thread-safety. */ if (!msg || !*msg) { static char const fmt[] = "Unknown error %d"; verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); sprintf (buf, fmt, n); errno = EINVAL; return buf; } /* Fix STACKBUF_LEN if this ever aborts. */ len = strlen (msg); if (sizeof buf <= len) abort (); memcpy (buf, msg, len + 1); return buf; } gnuastro-0.5/bootstrapped/lib/strchrnul.c0000644000175000017500000001301613217200021015572 00000000000000/* Searching in a string. Copyright (C) 2003, 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include /* Find the first occurrence of C in S or the final NUL byte. */ char * strchrnul (const char *s, int c_in) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned char c; c = (unsigned char) c_in; if (!c) return rawmemchr (s, 0); /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; (size_t) char_ptr % sizeof (longword) != 0; ++char_ptr) if (!*char_ptr || *char_ptr == c) return (char *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to NUL or c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 or longword2 is zero. Let's consider longword1. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. The test whether any byte in longword1 or longword2 is zero is equivalent to testing whether tmp1 is nonzero or tmp2 is nonzero. We can combine this into a single test, whether (tmp1 | tmp2) is nonzero. This test can read more than one byte beyond the end of a string, depending on where the terminating NUL is encountered. However, this is considered safe since the initialization phase ensured that the read will be aligned, therefore, the read will not cross page boundaries and will not cause a fault. */ while (1) { longword longword1 = *longword_ptr ^ repeated_c; longword longword2 = *longword_ptr; if (((((longword1 - repeated_one) & ~longword1) | ((longword2 - repeated_one) & ~longword2)) & (repeated_one << 7)) != 0) break; longword_ptr++; } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that one of the sizeof (longword) bytes starting at char_ptr is == 0 or == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ char_ptr = (unsigned char *) longword_ptr; while (*char_ptr && (*char_ptr != c)) char_ptr++; return (char *) char_ptr; } gnuastro-0.5/bootstrapped/lib/strncasecmp.c0000644000175000017500000000356013217200021016073 00000000000000/* strncasecmp.c -- case insensitive string comparator Copyright (C) 1998-1999, 2005-2007, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include #include #include #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Compare no more than N bytes of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function cannot work correctly in multibyte locales. */ int strncasecmp (const char *s1, const char *s2, size_t n) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2 || n == 0) return 0; do { c1 = TOLOWER (*p1); c2 = TOLOWER (*p2); if (--n == 0 || c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } gnuastro-0.5/bootstrapped/lib/strcasecmp.c0000644000175000017500000000343013217200021015711 00000000000000/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-2007, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include #include #include #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function does not work with multibyte strings! */ int strcasecmp (const char *s1, const char *s2) { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2) return 0; do { c1 = TOLOWER (*p1); c2 = TOLOWER (*p2); if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } gnuastro-0.5/bootstrapped/lib/sleep.c0000644000175000017500000000441013217200021014654 00000000000000/* Pausing execution of the current thread. Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2007. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include "verify.h" #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include unsigned int sleep (unsigned int seconds) { unsigned int remaining; /* Sleep for 1 second many times, because 1. Sleep is not interruptible by Ctrl-C, 2. we want to avoid arithmetic overflow while multiplying with 1000. */ for (remaining = seconds; remaining > 0; remaining--) Sleep (1000); return remaining; } #elif HAVE_SLEEP # undef sleep /* Guarantee unlimited sleep and a reasonable return value. Cygwin 1.5.x rejects attempts to sleep more than 49.7 days (2**32 milliseconds), but uses uninitialized memory which results in a garbage answer. Similarly, Linux 2.6.9 with glibc 2.3.4 has a too small return value when asked to sleep more than 24.85 days. */ unsigned int rpl_sleep (unsigned int seconds) { /* This requires int larger than 16 bits. */ verify (UINT_MAX / 24 / 24 / 60 / 60); const unsigned int limit = 24 * 24 * 60 * 60; while (limit < seconds) { unsigned int result; seconds -= limit; result = sleep (limit); if (result) return seconds + result; } return sleep (seconds); } #else /* !HAVE_SLEEP */ #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib." #endif gnuastro-0.5/bootstrapped/lib/regexec.c0000644000175000017500000037245213217200021015204 00000000000000/* Extended regular expression matching and search library. Copyright (C) 2002-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, Idx n); static void match_ctx_clean (re_match_context_t *mctx); static void match_ctx_free (re_match_context_t *cache); static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, Idx str_idx, Idx from, Idx to); static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx); static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx); static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx); static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx); static reg_errcode_t re_search_internal (const regex_t *preg, const char *string, Idx length, Idx start, Idx last_start, Idx stop, size_t nmatch, regmatch_t pmatch[], int eflags); static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop, bool ret_len); static regoff_t re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, Idx stop, struct re_registers *regs, bool ret_len); static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated); static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx); static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first); static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx); static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch); static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, re_node_set *eps_via_nodes); static reg_errcode_t set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, bool fl_backtrack); static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs); #ifdef RE_ENABLE_I18N static int sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx node_idx, Idx str_idx, Idx max_str_idx); #endif /* RE_ENABLE_I18N */ static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx); static reg_errcode_t build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *cur_dest); static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *dest_nodes); static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates); static bool check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx); static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, Idx subexp_idx, Idx from_node, Idx bkref_idx); static int check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, Idx subexp_idx, Idx node, Idx str_idx, Idx bkref_idx); static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, Idx str_idx); static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, const re_node_set *candidates); static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num); static re_dfastate_t *find_recover_state (reg_errcode_t *err, re_match_context_t *mctx); static re_dfastate_t *transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state); static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state); static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx); #if 0 static re_dfastate_t *transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *pstate); #endif #ifdef RE_ENABLE_I18N static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate); #endif /* RE_ENABLE_I18N */ static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes); static reg_errcode_t get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx); static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str); static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type); static reg_errcode_t check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, Idx top_str, Idx last_node, Idx last_str, int type); static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, re_node_set *cur_nodes, re_node_set *next_nodes); static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type); static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, Idx target, Idx ex_subexp, int type); static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, Idx cur_str, Idx subexp_num, int type); static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state); #ifdef RE_ENABLE_I18N static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, const re_string_t *input, Idx idx); # ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t name_len); # endif /* _LIBC */ #endif /* RE_ENABLE_I18N */ static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *states_node, bitset_t *states_ch); static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx); static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len); /* Entry point for POSIX code. */ /* regexec searches for a given pattern, specified by PREG, in the string STRING. If NMATCH is zero or REG_NOSUB was set in the cflags argument to 'regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at least NMATCH elements, and we set them to the offsets of the corresponding matched substrings. EFLAGS specifies "execution flags" which affect matching: if REG_NOTBOL is set, then ^ does not match at the beginning of the string; if REG_NOTEOL is set, then $ does not match at the end. We return 0 if we find a match and REG_NOMATCH if not. */ int regexec (const regex_t *_Restrict_ preg, const char *_Restrict_ string, size_t nmatch, regmatch_t pmatch[], int eflags) { reg_errcode_t err; Idx start, length; re_dfa_t *dfa = preg->buffer; if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND)) return REG_BADPAT; if (eflags & REG_STARTEND) { start = pmatch[0].rm_so; length = pmatch[0].rm_eo; } else { start = 0; length = strlen (string); } lock_lock (dfa->lock); if (preg->no_sub) err = re_search_internal (preg, string, length, start, length, length, 0, NULL, eflags); else err = re_search_internal (preg, string, length, start, length, length, nmatch, pmatch, eflags); lock_unlock (dfa->lock); return err != REG_NOERROR; } #ifdef _LIBC libc_hidden_def (__regexec) # include versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4); # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) __typeof__ (__regexec) __compat_regexec; int attribute_compat_text_section __compat_regexec (const regex_t *_Restrict_ preg, const char *_Restrict_ string, size_t nmatch, regmatch_t pmatch[], int eflags) { return regexec (preg, string, nmatch, pmatch, eflags & (REG_NOTBOL | REG_NOTEOL)); } compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0); # endif #endif /* Entry points for GNU code. */ /* re_match, re_search, re_match_2, re_search_2 The former two functions operate on STRING with length LENGTH, while the later two operate on concatenation of STRING1 and STRING2 with lengths LENGTH1 and LENGTH2, respectively. re_match() matches the compiled pattern in BUFP against the string, starting at index START. re_search() first tries matching at index START, then it tries to match starting from index START + 1, and so on. The last start position tried is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same way as re_match().) The parameter STOP of re_{match,search}_2 specifies that no match exceeding the first STOP characters of the concatenation of the strings should be concerned. If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match and all groups is stored in REGS. (For the "_2" variants, the offsets are computed relative to the concatenation, not relative to the individual strings.) On success, re_match* functions return the length of the match, re_search* return the position of the start of the match. Return value -1 means no match was found and -2 indicates an internal error. */ regoff_t re_match (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, struct re_registers *regs) { return re_search_stub (bufp, string, length, start, 0, length, regs, true); } #ifdef _LIBC weak_alias (__re_match, re_match) #endif regoff_t re_search (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, struct re_registers *regs) { return re_search_stub (bufp, string, length, start, range, length, regs, false); } #ifdef _LIBC weak_alias (__re_search, re_search) #endif regoff_t re_match_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, struct re_registers *regs, Idx stop) { return re_search_2_stub (bufp, string1, length1, string2, length2, start, 0, regs, stop, true); } #ifdef _LIBC weak_alias (__re_match_2, re_match_2) #endif regoff_t re_search_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop) { return re_search_2_stub (bufp, string1, length1, string2, length2, start, range, regs, stop, false); } #ifdef _LIBC weak_alias (__re_search_2, re_search_2) #endif static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop, bool ret_len) { const char *str; regoff_t rval; Idx len; char *s = NULL; if (BE ((length1 < 0 || length2 < 0 || stop < 0 || INT_ADD_WRAPV (length1, length2, &len)), 0)) return -2; /* Concatenate the strings. */ if (length2 > 0) if (length1 > 0) { s = re_malloc (char, len); if (BE (s == NULL, 0)) return -2; #ifdef _LIBC memcpy (__mempcpy (s, string1, length1), string2, length2); #else memcpy (s, string1, length1); memcpy (s + length1, string2, length2); #endif str = s; } else str = string2; else str = string1; rval = re_search_stub (bufp, str, len, start, range, stop, regs, ret_len); re_free (s); return rval; } /* The parameters have the same meaning as those of re_search. Additional parameters: If RET_LEN is true the length of the match is returned (re_match style); otherwise the position of the match is returned. */ static regoff_t re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, Idx stop, struct re_registers *regs, bool ret_len) { reg_errcode_t result; regmatch_t *pmatch; Idx nregs; regoff_t rval; int eflags = 0; re_dfa_t *dfa = bufp->buffer; Idx last_start = start + range; /* Check for out-of-range. */ if (BE (start < 0 || start > length, 0)) return -1; if (BE (length < last_start || (0 <= range && last_start < start), 0)) last_start = length; else if (BE (last_start < 0 || (range < 0 && start <= last_start), 0)) last_start = 0; lock_lock (dfa->lock); eflags |= (bufp->not_bol) ? REG_NOTBOL : 0; eflags |= (bufp->not_eol) ? REG_NOTEOL : 0; /* Compile fastmap if we haven't yet. */ if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate) re_compile_fastmap (bufp); if (BE (bufp->no_sub, 0)) regs = NULL; /* We need at least 1 register. */ if (regs == NULL) nregs = 1; else if (BE (bufp->regs_allocated == REGS_FIXED && regs->num_regs <= bufp->re_nsub, 0)) { nregs = regs->num_regs; if (BE (nregs < 1, 0)) { /* Nothing can be copied to regs. */ regs = NULL; nregs = 1; } } else nregs = bufp->re_nsub + 1; pmatch = re_malloc (regmatch_t, nregs); if (BE (pmatch == NULL, 0)) { rval = -2; goto out; } result = re_search_internal (bufp, string, length, start, last_start, stop, nregs, pmatch, eflags); rval = 0; /* I hope we needn't fill their regs with -1's when no match was found. */ if (result != REG_NOERROR) rval = result == REG_NOMATCH ? -1 : -2; else if (regs != NULL) { /* If caller wants register contents data back, copy them. */ bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs, bufp->regs_allocated); if (BE (bufp->regs_allocated == REGS_UNALLOCATED, 0)) rval = -2; } if (BE (rval == 0, 1)) { if (ret_len) { assert (pmatch[0].rm_so == start); rval = pmatch[0].rm_eo - start; } else rval = pmatch[0].rm_so; } re_free (pmatch); out: lock_unlock (dfa->lock); return rval; } static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated) { int rval = REGS_REALLOCATE; Idx i; Idx need_regs = nregs + 1; /* We need one extra element beyond 'num_regs' for the '-1' marker GNU code uses. */ /* Have the register data arrays been allocated? */ if (regs_allocated == REGS_UNALLOCATED) { /* No. So allocate them with malloc. */ regs->start = re_malloc (regoff_t, need_regs); if (BE (regs->start == NULL, 0)) return REGS_UNALLOCATED; regs->end = re_malloc (regoff_t, need_regs); if (BE (regs->end == NULL, 0)) { re_free (regs->start); return REGS_UNALLOCATED; } regs->num_regs = need_regs; } else if (regs_allocated == REGS_REALLOCATE) { /* Yes. If we need more elements than were already allocated, reallocate them. If we need fewer, just leave it alone. */ if (BE (need_regs > regs->num_regs, 0)) { regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); regoff_t *new_end; if (BE (new_start == NULL, 0)) return REGS_UNALLOCATED; new_end = re_realloc (regs->end, regoff_t, need_regs); if (BE (new_end == NULL, 0)) { re_free (new_start); return REGS_UNALLOCATED; } regs->start = new_start; regs->end = new_end; regs->num_regs = need_regs; } } else { assert (regs_allocated == REGS_FIXED); /* This function may not be called with REGS_FIXED and nregs too big. */ assert (regs->num_regs >= nregs); rval = REGS_FIXED; } /* Copy the regs. */ for (i = 0; i < nregs; ++i) { regs->start[i] = pmatch[i].rm_so; regs->end[i] = pmatch[i].rm_eo; } for ( ; i < regs->num_regs; ++i) regs->start[i] = regs->end[i] = -1; return rval; } /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated using the malloc library routine, and must each be at least NUM_REGS * sizeof (regoff_t) bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ void re_set_registers (struct re_pattern_buffer *bufp, struct re_registers *regs, __re_size_t num_regs, regoff_t *starts, regoff_t *ends) { if (num_regs) { bufp->regs_allocated = REGS_REALLOCATE; regs->num_regs = num_regs; regs->start = starts; regs->end = ends; } else { bufp->regs_allocated = REGS_UNALLOCATED; regs->num_regs = 0; regs->start = regs->end = NULL; } } #ifdef _LIBC weak_alias (__re_set_registers, re_set_registers) #endif /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC int # ifdef _LIBC weak_function # endif re_exec (const char *s) { return 0 == regexec (&re_comp_buf, s, 0, NULL, 0); } #endif /* _REGEX_RE_COMP */ /* Internal entry point. */ /* Searches for a compiled pattern PREG in the string STRING, whose length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same meaning as with regexec. LAST_START is START + RANGE, where START and RANGE have the same meaning as with re_search. Return REG_NOERROR if we find a match, and REG_NOMATCH if not, otherwise return the error code. Note: We assume front end functions already check ranges. (0 <= LAST_START && LAST_START <= LENGTH) */ static reg_errcode_t __attribute_warn_unused_result__ re_search_internal (const regex_t *preg, const char *string, Idx length, Idx start, Idx last_start, Idx stop, size_t nmatch, regmatch_t pmatch[], int eflags) { reg_errcode_t err; const re_dfa_t *dfa = preg->buffer; Idx left_lim, right_lim; int incr; bool fl_longest_match; int match_kind; Idx match_first; Idx match_last = -1; Idx extra_nmatch; bool sb; int ch; #if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) re_match_context_t mctx = { .dfa = dfa }; #else re_match_context_t mctx; #endif char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate && start != last_start && !preg->can_be_null) ? preg->fastmap : NULL); RE_TRANSLATE_TYPE t = preg->translate; #if !(defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) memset (&mctx, '\0', sizeof (re_match_context_t)); mctx.dfa = dfa; #endif extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0; nmatch -= extra_nmatch; /* Check if the DFA haven't been compiled. */ if (BE (preg->used == 0 || dfa->init_state == NULL || dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL, 0)) return REG_NOMATCH; #ifdef DEBUG /* We assume front-end functions already check them. */ assert (0 <= last_start && last_start <= length); #endif /* If initial states with non-begbuf contexts have no elements, the regex must be anchored. If preg->newline_anchor is set, we'll never use init_state_nl, so do not check it. */ if (dfa->init_state->nodes.nelem == 0 && dfa->init_state_word->nodes.nelem == 0 && (dfa->init_state_nl->nodes.nelem == 0 || !preg->newline_anchor)) { if (start != 0 && last_start != 0) return REG_NOMATCH; start = last_start = 0; } /* We must check the longest matching, if nmatch > 0. */ fl_longest_match = (nmatch != 0 || dfa->nbackref); err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, preg->translate, (preg->syntax & RE_ICASE) != 0, dfa); if (BE (err != REG_NOERROR, 0)) goto free_return; mctx.input.stop = stop; mctx.input.raw_stop = stop; mctx.input.newline_anchor = preg->newline_anchor; err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2); if (BE (err != REG_NOERROR, 0)) goto free_return; /* We will log all the DFA states through which the dfa pass, if nmatch > 1, or this dfa has "multibyte node", which is a back-reference or a node which can accept multibyte character or multi character collating element. */ if (nmatch > 1 || dfa->has_mb_node) { /* Avoid overflow. */ if (BE ((MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= mctx.input.bufs_len), 0)) { err = REG_ESPACE; goto free_return; } mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); if (BE (mctx.state_log == NULL, 0)) { err = REG_ESPACE; goto free_return; } } else mctx.state_log = NULL; match_first = start; mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF; /* Check incrementally whether the input string matches. */ incr = (last_start < start) ? -1 : 1; left_lim = (last_start < start) ? last_start : start; right_lim = (last_start < start) ? start : last_start; sb = dfa->mb_cur_max == 1; match_kind = (fastmap ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0) | (start <= last_start ? 2 : 0) | (t != NULL ? 1 : 0)) : 8); for (;; match_first += incr) { err = REG_NOMATCH; if (match_first < left_lim || right_lim < match_first) goto free_return; /* Advance as rapidly as possible through the string, until we find a plausible place to start matching. This may be done with varying efficiency, so there are various possibilities: only the most common of them are specialized, in order to save on code size. We use a switch statement for speed. */ switch (match_kind) { case 8: /* No fastmap. */ break; case 7: /* Fastmap with single-byte translation, match forward. */ while (BE (match_first < right_lim, 1) && !fastmap[t[(unsigned char) string[match_first]]]) ++match_first; goto forward_match_found_start_or_reached_end; case 6: /* Fastmap without translation, match forward. */ while (BE (match_first < right_lim, 1) && !fastmap[(unsigned char) string[match_first]]) ++match_first; forward_match_found_start_or_reached_end: if (BE (match_first == right_lim, 0)) { ch = match_first >= length ? 0 : (unsigned char) string[match_first]; if (!fastmap[t ? t[ch] : ch]) goto free_return; } break; case 4: case 5: /* Fastmap without multi-byte translation, match backwards. */ while (match_first >= left_lim) { ch = match_first >= length ? 0 : (unsigned char) string[match_first]; if (fastmap[t ? t[ch] : ch]) break; --match_first; } if (match_first < left_lim) goto free_return; break; default: /* In this case, we can't determine easily the current byte, since it might be a component byte of a multibyte character. Then we use the constructed buffer instead. */ for (;;) { /* If MATCH_FIRST is out of the valid range, reconstruct the buffers. */ __re_size_t offset = match_first - mctx.input.raw_mbs_idx; if (BE (offset >= (__re_size_t) mctx.input.valid_raw_len, 0)) { err = re_string_reconstruct (&mctx.input, match_first, eflags); if (BE (err != REG_NOERROR, 0)) goto free_return; offset = match_first - mctx.input.raw_mbs_idx; } /* If MATCH_FIRST is out of the buffer, leave it as '\0'. Note that MATCH_FIRST must not be smaller than 0. */ ch = (match_first >= length ? 0 : re_string_byte_at (&mctx.input, offset)); if (fastmap[ch]) break; match_first += incr; if (match_first < left_lim || match_first > right_lim) { err = REG_NOMATCH; goto free_return; } } break; } /* Reconstruct the buffers so that the matcher can assume that the matching starts from the beginning of the buffer. */ err = re_string_reconstruct (&mctx.input, match_first, eflags); if (BE (err != REG_NOERROR, 0)) goto free_return; #ifdef RE_ENABLE_I18N /* Don't consider this char as a possible match start if it part, yet isn't the head, of a multibyte character. */ if (!sb && !re_string_first_byte (&mctx.input, 0)) continue; #endif /* It seems to be appropriate one, then use the matcher. */ /* We assume that the matching starts from 0. */ mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; match_last = check_matching (&mctx, fl_longest_match, start <= last_start ? &match_first : NULL); if (match_last != -1) { if (BE (match_last == -2, 0)) { err = REG_ESPACE; goto free_return; } else { mctx.match_last = match_last; if ((!preg->no_sub && nmatch > 1) || dfa->nbackref) { re_dfastate_t *pstate = mctx.state_log[match_last]; mctx.last_node = check_halt_state_context (&mctx, pstate, match_last); } if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match) || dfa->nbackref) { err = prune_impossible_nodes (&mctx); if (err == REG_NOERROR) break; if (BE (err != REG_NOMATCH, 0)) goto free_return; match_last = -1; } else break; /* We found a match. */ } } match_ctx_clean (&mctx); } #ifdef DEBUG assert (match_last != -1); assert (err == REG_NOERROR); #endif /* Set pmatch[] if we need. */ if (nmatch > 0) { Idx reg_idx; /* Initialize registers. */ for (reg_idx = 1; reg_idx < nmatch; ++reg_idx) pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1; /* Set the points where matching start/end. */ pmatch[0].rm_so = 0; pmatch[0].rm_eo = mctx.match_last; /* FIXME: This function should fail if mctx.match_last exceeds the maximum possible regoff_t value. We need a new error code REG_OVERFLOW. */ if (!preg->no_sub && nmatch > 1) { err = set_regs (preg, &mctx, nmatch, pmatch, dfa->has_plural_match && dfa->nbackref > 0); if (BE (err != REG_NOERROR, 0)) goto free_return; } /* At last, add the offset to each register, since we slid the buffers so that we could assume that the matching starts from 0. */ for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so != -1) { #ifdef RE_ENABLE_I18N if (BE (mctx.input.offsets_needed != 0, 0)) { pmatch[reg_idx].rm_so = (pmatch[reg_idx].rm_so == mctx.input.valid_len ? mctx.input.valid_raw_len : mctx.input.offsets[pmatch[reg_idx].rm_so]); pmatch[reg_idx].rm_eo = (pmatch[reg_idx].rm_eo == mctx.input.valid_len ? mctx.input.valid_raw_len : mctx.input.offsets[pmatch[reg_idx].rm_eo]); } #else assert (mctx.input.offsets_needed == 0); #endif pmatch[reg_idx].rm_so += match_first; pmatch[reg_idx].rm_eo += match_first; } for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx) { pmatch[nmatch + reg_idx].rm_so = -1; pmatch[nmatch + reg_idx].rm_eo = -1; } if (dfa->subexp_map) for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++) if (dfa->subexp_map[reg_idx] != reg_idx) { pmatch[reg_idx + 1].rm_so = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so; pmatch[reg_idx + 1].rm_eo = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo; } } free_return: re_free (mctx.state_log); if (dfa->nbackref) match_ctx_free (&mctx); re_string_destruct (&mctx.input); return err; } static reg_errcode_t __attribute_warn_unused_result__ prune_impossible_nodes (re_match_context_t *mctx) { const re_dfa_t *const dfa = mctx->dfa; Idx halt_node, match_last; reg_errcode_t ret; re_dfastate_t **sifted_states; re_dfastate_t **lim_states = NULL; re_sift_context_t sctx; #ifdef DEBUG assert (mctx->state_log != NULL); #endif match_last = mctx->match_last; halt_node = mctx->last_node; /* Avoid overflow. */ if (BE (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= match_last, 0)) return REG_ESPACE; sifted_states = re_malloc (re_dfastate_t *, match_last + 1); if (BE (sifted_states == NULL, 0)) { ret = REG_ESPACE; goto free_return; } if (dfa->nbackref) { lim_states = re_malloc (re_dfastate_t *, match_last + 1); if (BE (lim_states == NULL, 0)) { ret = REG_ESPACE; goto free_return; } while (1) { memset (lim_states, '\0', sizeof (re_dfastate_t *) * (match_last + 1)); sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); ret = sift_states_backward (mctx, &sctx); re_node_set_free (&sctx.limits); if (BE (ret != REG_NOERROR, 0)) goto free_return; if (sifted_states[0] != NULL || lim_states[0] != NULL) break; do { --match_last; if (match_last < 0) { ret = REG_NOMATCH; goto free_return; } } while (mctx->state_log[match_last] == NULL || !mctx->state_log[match_last]->halt); halt_node = check_halt_state_context (mctx, mctx->state_log[match_last], match_last); } ret = merge_state_array (dfa, sifted_states, lim_states, match_last + 1); re_free (lim_states); lim_states = NULL; if (BE (ret != REG_NOERROR, 0)) goto free_return; } else { sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); ret = sift_states_backward (mctx, &sctx); re_node_set_free (&sctx.limits); if (BE (ret != REG_NOERROR, 0)) goto free_return; if (sifted_states[0] == NULL) { ret = REG_NOMATCH; goto free_return; } } re_free (mctx->state_log); mctx->state_log = sifted_states; sifted_states = NULL; mctx->last_node = halt_node; mctx->match_last = match_last; ret = REG_NOERROR; free_return: re_free (sifted_states); re_free (lim_states); return ret; } /* Acquire an initial state and return it. We must select appropriate initial state depending on the context, since initial states may have constraints like "\<", "^", etc.. */ static inline re_dfastate_t * __attribute__ ((always_inline)) acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx, Idx idx) { const re_dfa_t *const dfa = mctx->dfa; if (dfa->init_state->has_constraint) { unsigned int context; context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags); if (IS_WORD_CONTEXT (context)) return dfa->init_state_word; else if (IS_ORDINARY_CONTEXT (context)) return dfa->init_state; else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context)) return dfa->init_state_begbuf; else if (IS_NEWLINE_CONTEXT (context)) return dfa->init_state_nl; else if (IS_BEGBUF_CONTEXT (context)) { /* It is relatively rare case, then calculate on demand. */ return re_acquire_state_context (err, dfa, dfa->init_state->entrance_nodes, context); } else /* Must not happen? */ return dfa->init_state; } else return dfa->init_state; } /* Check whether the regular expression match input string INPUT or not, and return the index where the matching end. Return -1 if there is no match, and return -2 in case of an error. FL_LONGEST_MATCH means we want the POSIX longest matching. If P_MATCH_FIRST is not NULL, and the match fails, it is set to the next place where we may want to try matching. Note that the matcher assumes that the matching starts from the current index of the buffer. */ static Idx __attribute_warn_unused_result__ check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx match = 0; Idx match_last = -1; Idx cur_str_idx = re_string_cur_idx (&mctx->input); re_dfastate_t *cur_state; bool at_init_state = p_match_first != NULL; Idx next_start_idx = cur_str_idx; err = REG_NOERROR; cur_state = acquire_init_state_context (&err, mctx, cur_str_idx); /* An initial state must not be NULL (invalid). */ if (BE (cur_state == NULL, 0)) { assert (err == REG_ESPACE); return -2; } if (mctx->state_log != NULL) { mctx->state_log[cur_str_idx] = cur_state; /* Check OP_OPEN_SUBEXP in the initial state in case that we use them later. E.g. Processing back references. */ if (BE (dfa->nbackref, 0)) { at_init_state = false; err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); if (BE (err != REG_NOERROR, 0)) return err; if (cur_state->has_backref) { err = transit_state_bkref (mctx, &cur_state->nodes); if (BE (err != REG_NOERROR, 0)) return err; } } } /* If the RE accepts NULL string. */ if (BE (cur_state->halt, 0)) { if (!cur_state->has_constraint || check_halt_state_context (mctx, cur_state, cur_str_idx)) { if (!fl_longest_match) return cur_str_idx; else { match_last = cur_str_idx; match = 1; } } } while (!re_string_eoi (&mctx->input)) { re_dfastate_t *old_state = cur_state; Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1; if ((BE (next_char_idx >= mctx->input.bufs_len, 0) && mctx->input.bufs_len < mctx->input.len) || (BE (next_char_idx >= mctx->input.valid_len, 0) && mctx->input.valid_len < mctx->input.len)) { err = extend_buffers (mctx, next_char_idx + 1); if (BE (err != REG_NOERROR, 0)) { assert (err == REG_ESPACE); return -2; } } cur_state = transit_state (&err, mctx, cur_state); if (mctx->state_log != NULL) cur_state = merge_state_with_log (&err, mctx, cur_state); if (cur_state == NULL) { /* Reached the invalid state or an error. Try to recover a valid state using the state log, if available and if we have not already found a valid (even if not the longest) match. */ if (BE (err != REG_NOERROR, 0)) return -2; if (mctx->state_log == NULL || (match && !fl_longest_match) || (cur_state = find_recover_state (&err, mctx)) == NULL) break; } if (BE (at_init_state, 0)) { if (old_state == cur_state) next_start_idx = next_char_idx; else at_init_state = false; } if (cur_state->halt) { /* Reached a halt state. Check the halt state can satisfy the current context. */ if (!cur_state->has_constraint || check_halt_state_context (mctx, cur_state, re_string_cur_idx (&mctx->input))) { /* We found an appropriate halt state. */ match_last = re_string_cur_idx (&mctx->input); match = 1; /* We found a match, do not modify match_first below. */ p_match_first = NULL; if (!fl_longest_match) break; } } } if (p_match_first) *p_match_first += next_start_idx; return match_last; } /* Check NODE match the current context. */ static bool check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context) { re_token_type_t type = dfa->nodes[node].type; unsigned int constraint = dfa->nodes[node].constraint; if (type != END_OF_RE) return false; if (!constraint) return true; if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context)) return false; return true; } /* Check the halt state STATE match the current context. Return 0 if not match, if the node, STATE has, is a halt node and match the context, return the node. */ static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx) { Idx i; unsigned int context; #ifdef DEBUG assert (state->halt); #endif context = re_string_context_at (&mctx->input, idx, mctx->eflags); for (i = 0; i < state->nodes.nelem; ++i) if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context)) return state->nodes.elems[i]; return 0; } /* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA corresponding to the DFA). Return the destination node, and update EPS_VIA_NODES; return -1 in case of errors. */ static Idx proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs, Idx *pidx, Idx node, re_node_set *eps_via_nodes, struct re_fail_stack_t *fs) { const re_dfa_t *const dfa = mctx->dfa; Idx i; bool ok; if (IS_EPSILON_NODE (dfa->nodes[node].type)) { re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes; re_node_set *edests = &dfa->edests[node]; Idx dest_node; ok = re_node_set_insert (eps_via_nodes, node); if (BE (! ok, 0)) return -2; /* Pick up a valid destination, or return -1 if none is found. */ for (dest_node = -1, i = 0; i < edests->nelem; ++i) { Idx candidate = edests->elems[i]; if (!re_node_set_contains (cur_nodes, candidate)) continue; if (dest_node == -1) dest_node = candidate; else { /* In order to avoid infinite loop like "(a*)*", return the second epsilon-transition if the first was already considered. */ if (re_node_set_contains (eps_via_nodes, dest_node)) return candidate; /* Otherwise, push the second epsilon-transition on the fail stack. */ else if (fs != NULL && push_fail_stack (fs, *pidx, candidate, nregs, regs, eps_via_nodes)) return -2; /* We know we are going to exit. */ break; } } return dest_node; } else { Idx naccepted = 0; re_token_type_t type = dfa->nodes[node].type; #ifdef RE_ENABLE_I18N if (dfa->nodes[node].accept_mb) naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx); else #endif /* RE_ENABLE_I18N */ if (type == OP_BACK_REF) { Idx subexp_idx = dfa->nodes[node].opr.idx + 1; naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; if (fs != NULL) { if (regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1) return -1; else if (naccepted) { char *buf = (char *) re_string_get_buffer (&mctx->input); if (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx, naccepted) != 0) return -1; } } if (naccepted == 0) { Idx dest_node; ok = re_node_set_insert (eps_via_nodes, node); if (BE (! ok, 0)) return -2; dest_node = dfa->edests[node].elems[0]; if (re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node)) return dest_node; } } if (naccepted != 0 || check_node_accept (mctx, dfa->nodes + node, *pidx)) { Idx dest_node = dfa->nexts[node]; *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL || !re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node))) return -1; re_node_set_empty (eps_via_nodes); return dest_node; } } return -1; } static reg_errcode_t __attribute_warn_unused_result__ push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, re_node_set *eps_via_nodes) { reg_errcode_t err; Idx num = fs->num++; if (fs->num == fs->alloc) { struct re_fail_stack_ent_t *new_array; new_array = re_realloc (fs->stack, struct re_fail_stack_ent_t, fs->alloc * 2); if (new_array == NULL) return REG_ESPACE; fs->alloc *= 2; fs->stack = new_array; } fs->stack[num].idx = str_idx; fs->stack[num].node = dest_node; fs->stack[num].regs = re_malloc (regmatch_t, nregs); if (fs->stack[num].regs == NULL) return REG_ESPACE; memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); return err; } static Idx pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs, regmatch_t *regs, re_node_set *eps_via_nodes) { Idx num = --fs->num; assert (num >= 0); *pidx = fs->stack[num].idx; memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs); re_node_set_free (eps_via_nodes); re_free (fs->stack[num].regs); *eps_via_nodes = fs->stack[num].eps_via_nodes; return fs->stack[num].node; } /* Set the positions where the subexpressions are starts/ends to registers PMATCH. Note: We assume that pmatch[0] is already set, and pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */ static reg_errcode_t __attribute_warn_unused_result__ set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, bool fl_backtrack) { const re_dfa_t *dfa = preg->buffer; Idx idx, cur_node; re_node_set eps_via_nodes; struct re_fail_stack_t *fs; struct re_fail_stack_t fs_body = { 0, 2, NULL }; regmatch_t *prev_idx_match; bool prev_idx_match_malloced = false; #ifdef DEBUG assert (nmatch > 1); assert (mctx->state_log != NULL); #endif if (fl_backtrack) { fs = &fs_body; fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc); if (fs->stack == NULL) return REG_ESPACE; } else fs = NULL; cur_node = dfa->init_node; re_node_set_init_empty (&eps_via_nodes); if (__libc_use_alloca (nmatch * sizeof (regmatch_t))) prev_idx_match = (regmatch_t *) alloca (nmatch * sizeof (regmatch_t)); else { prev_idx_match = re_malloc (regmatch_t, nmatch); if (prev_idx_match == NULL) { free_fail_stack_return (fs); return REG_ESPACE; } prev_idx_match_malloced = true; } memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;) { update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch); if (idx == pmatch[0].rm_eo && cur_node == mctx->last_node) { Idx reg_idx; if (fs) { for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) break; if (reg_idx == nmatch) { re_node_set_free (&eps_via_nodes); if (prev_idx_match_malloced) re_free (prev_idx_match); return free_fail_stack_return (fs); } cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, &eps_via_nodes); } else { re_node_set_free (&eps_via_nodes); if (prev_idx_match_malloced) re_free (prev_idx_match); return REG_NOERROR; } } /* Proceed to next node. */ cur_node = proceed_next_node (mctx, nmatch, pmatch, &idx, cur_node, &eps_via_nodes, fs); if (BE (cur_node < 0, 0)) { if (BE (cur_node == -2, 0)) { re_node_set_free (&eps_via_nodes); if (prev_idx_match_malloced) re_free (prev_idx_match); free_fail_stack_return (fs); return REG_ESPACE; } if (fs) cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, &eps_via_nodes); else { re_node_set_free (&eps_via_nodes); if (prev_idx_match_malloced) re_free (prev_idx_match); return REG_NOMATCH; } } } re_node_set_free (&eps_via_nodes); if (prev_idx_match_malloced) re_free (prev_idx_match); return free_fail_stack_return (fs); } static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs) { if (fs) { Idx fs_idx; for (fs_idx = 0; fs_idx < fs->num; ++fs_idx) { re_node_set_free (&fs->stack[fs_idx].eps_via_nodes); re_free (fs->stack[fs_idx].regs); } re_free (fs->stack); } return REG_NOERROR; } static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch) { int type = dfa->nodes[cur_node].type; if (type == OP_OPEN_SUBEXP) { Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; /* We are at the first node of this sub expression. */ if (reg_num < nmatch) { pmatch[reg_num].rm_so = cur_idx; pmatch[reg_num].rm_eo = -1; } } else if (type == OP_CLOSE_SUBEXP) { Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; if (reg_num < nmatch) { /* We are at the last node of this sub expression. */ if (pmatch[reg_num].rm_so < cur_idx) { pmatch[reg_num].rm_eo = cur_idx; /* This is a non-empty match or we are not inside an optional subexpression. Accept this right away. */ memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); } else { if (dfa->nodes[cur_node].opt_subexp && prev_idx_match[reg_num].rm_so != -1) /* We transited through an empty match for an optional subexpression, like (a?)*, and this is not the subexp's first match. Copy back the old content of the registers so that matches of an inner subexpression are undone as well, like in ((a?))*. */ memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch); else /* We completed a subexpression, but it may be part of an optional one, so do not update PREV_IDX_MATCH. */ pmatch[reg_num].rm_eo = cur_idx; } } } } /* This function checks the STATE_LOG from the SCTX->last_str_idx to 0 and sift the nodes in each states according to the following rules. Updated state_log will be wrote to STATE_LOG. Rules: We throw away the Node 'a' in the STATE_LOG[STR_IDX] if... 1. When STR_IDX == MATCH_LAST(the last index in the state_log): If 'a' isn't the LAST_NODE and 'a' can't epsilon transit to the LAST_NODE, we throw away the node 'a'. 2. When 0 <= STR_IDX < MATCH_LAST and 'a' accepts string 's' and transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw away the node 'a'. ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is thrown away, we throw away the node 'a'. 3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the node 'a'. ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away, we throw away the node 'a'. */ #define STATE_NODE_CONTAINS(state,node) \ ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx) { reg_errcode_t err; int null_cnt = 0; Idx str_idx = sctx->last_str_idx; re_node_set cur_dest; #ifdef DEBUG assert (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); #endif /* Build sifted state_log[str_idx]. It has the nodes which can epsilon transit to the last_node and the last_node itself. */ err = re_node_set_init_1 (&cur_dest, sctx->last_node); if (BE (err != REG_NOERROR, 0)) return err; err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (BE (err != REG_NOERROR, 0)) goto free_return; /* Then check each states in the state_log. */ while (str_idx > 0) { /* Update counters. */ null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0; if (null_cnt > mctx->max_mb_elem_len) { memset (sctx->sifted_states, '\0', sizeof (re_dfastate_t *) * str_idx); re_node_set_free (&cur_dest); return REG_NOERROR; } re_node_set_empty (&cur_dest); --str_idx; if (mctx->state_log[str_idx]) { err = build_sifted_states (mctx, sctx, str_idx, &cur_dest); if (BE (err != REG_NOERROR, 0)) goto free_return; } /* Add all the nodes which satisfy the following conditions: - It can epsilon transit to a node in CUR_DEST. - It is in CUR_SRC. And update state_log. */ err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (BE (err != REG_NOERROR, 0)) goto free_return; } err = REG_NOERROR; free_return: re_node_set_free (&cur_dest); return err; } static reg_errcode_t __attribute_warn_unused_result__ build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *cur_dest) { const re_dfa_t *const dfa = mctx->dfa; const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes; Idx i; /* Then build the next sifted state. We build the next sifted state on 'cur_dest', and update 'sifted_states[str_idx]' with 'cur_dest'. Note: 'cur_dest' is the sifted state from 'state_log[str_idx + 1]'. 'cur_src' points the node_set of the old 'state_log[str_idx]' (with the epsilon nodes pre-filtered out). */ for (i = 0; i < cur_src->nelem; i++) { Idx prev_node = cur_src->elems[i]; int naccepted = 0; bool ok; #ifdef DEBUG re_token_type_t type = dfa->nodes[prev_node].type; assert (!IS_EPSILON_NODE (type)); #endif #ifdef RE_ENABLE_I18N /* If the node may accept "multi byte". */ if (dfa->nodes[prev_node].accept_mb) naccepted = sift_states_iter_mb (mctx, sctx, prev_node, str_idx, sctx->last_str_idx); #endif /* RE_ENABLE_I18N */ /* We don't check backreferences here. See update_cur_sifted_state(). */ if (!naccepted && check_node_accept (mctx, dfa->nodes + prev_node, str_idx) && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], dfa->nexts[prev_node])) naccepted = 1; if (naccepted == 0) continue; if (sctx->limits.nelem) { Idx to_idx = str_idx + naccepted; if (check_dst_limits (mctx, &sctx->limits, dfa->nexts[prev_node], to_idx, prev_node, str_idx)) continue; } ok = re_node_set_insert (cur_dest, prev_node); if (BE (! ok, 0)) return REG_ESPACE; } return REG_NOERROR; } /* Helper functions. */ static reg_errcode_t clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx) { Idx top = mctx->state_log_top; if ((next_state_log_idx >= mctx->input.bufs_len && mctx->input.bufs_len < mctx->input.len) || (next_state_log_idx >= mctx->input.valid_len && mctx->input.valid_len < mctx->input.len)) { reg_errcode_t err; err = extend_buffers (mctx, next_state_log_idx + 1); if (BE (err != REG_NOERROR, 0)) return err; } if (top < next_state_log_idx) { memset (mctx->state_log + top + 1, '\0', sizeof (re_dfastate_t *) * (next_state_log_idx - top)); mctx->state_log_top = next_state_log_idx; } return REG_NOERROR; } static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num) { Idx st_idx; reg_errcode_t err; for (st_idx = 0; st_idx < num; ++st_idx) { if (dst[st_idx] == NULL) dst[st_idx] = src[st_idx]; else if (src[st_idx] != NULL) { re_node_set merged_set; err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes, &src[st_idx]->nodes); if (BE (err != REG_NOERROR, 0)) return err; dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); re_node_set_free (&merged_set); if (BE (err != REG_NOERROR, 0)) return err; } } return REG_NOERROR; } static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *dest_nodes) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err = REG_NOERROR; const re_node_set *candidates; candidates = ((mctx->state_log[str_idx] == NULL) ? NULL : &mctx->state_log[str_idx]->nodes); if (dest_nodes->nelem == 0) sctx->sifted_states[str_idx] = NULL; else { if (candidates) { /* At first, add the nodes which can epsilon transit to a node in DEST_NODE. */ err = add_epsilon_src_nodes (dfa, dest_nodes, candidates); if (BE (err != REG_NOERROR, 0)) return err; /* Then, check the limitations in the current sift_context. */ if (sctx->limits.nelem) { err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits, mctx->bkref_ents, str_idx); if (BE (err != REG_NOERROR, 0)) return err; } } sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); if (BE (err != REG_NOERROR, 0)) return err; } if (candidates && mctx->state_log[str_idx]->has_backref) { err = sift_states_bkref (mctx, sctx, str_idx, candidates); if (BE (err != REG_NOERROR, 0)) return err; } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates) { reg_errcode_t err = REG_NOERROR; Idx i; re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes); if (BE (err != REG_NOERROR, 0)) return err; if (!state->inveclosure.alloc) { err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); if (BE (err != REG_NOERROR, 0)) return REG_ESPACE; for (i = 0; i < dest_nodes->nelem; i++) { err = re_node_set_merge (&state->inveclosure, dfa->inveclosures + dest_nodes->elems[i]); if (BE (err != REG_NOERROR, 0)) return REG_ESPACE; } } return re_node_set_add_intersect (dest_nodes, candidates, &state->inveclosure); } static reg_errcode_t sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes, const re_node_set *candidates) { Idx ecl_idx; reg_errcode_t err; re_node_set *inv_eclosure = dfa->inveclosures + node; re_node_set except_nodes; re_node_set_init_empty (&except_nodes); for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { Idx cur_node = inv_eclosure->elems[ecl_idx]; if (cur_node == node) continue; if (IS_EPSILON_NODE (dfa->nodes[cur_node].type)) { Idx edst1 = dfa->edests[cur_node].elems[0]; Idx edst2 = ((dfa->edests[cur_node].nelem > 1) ? dfa->edests[cur_node].elems[1] : -1); if ((!re_node_set_contains (inv_eclosure, edst1) && re_node_set_contains (dest_nodes, edst1)) || (edst2 > 0 && !re_node_set_contains (inv_eclosure, edst2) && re_node_set_contains (dest_nodes, edst2))) { err = re_node_set_add_intersect (&except_nodes, candidates, dfa->inveclosures + cur_node); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&except_nodes); return err; } } } } for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { Idx cur_node = inv_eclosure->elems[ecl_idx]; if (!re_node_set_contains (&except_nodes, cur_node)) { Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1; re_node_set_remove_at (dest_nodes, idx); } } re_node_set_free (&except_nodes); return REG_NOERROR; } static bool check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx lim_idx, src_pos, dst_pos; Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx); Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx); for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { Idx subexp_idx; struct re_backref_cache_entry *ent; ent = mctx->bkref_ents + limits->elems[lim_idx]; subexp_idx = dfa->nodes[ent->node].opr.idx; dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], subexp_idx, dst_node, dst_idx, dst_bkref_idx); src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], subexp_idx, src_node, src_idx, src_bkref_idx); /* In case of: ( ) ( ) ( ) */ if (src_pos == dst_pos) continue; /* This is unrelated limitation. */ else return true; } return false; } static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, Idx subexp_idx, Idx from_node, Idx bkref_idx) { const re_dfa_t *const dfa = mctx->dfa; const re_node_set *eclosures = dfa->eclosures + from_node; Idx node_idx; /* Else, we are on the boundary: examine the nodes on the epsilon closure. */ for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx) { Idx node = eclosures->elems[node_idx]; switch (dfa->nodes[node].type) { case OP_BACK_REF: if (bkref_idx != -1) { struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx; do { Idx dst; int cpos; if (ent->node != node) continue; if (subexp_idx < BITSET_WORD_BITS && !(ent->eps_reachable_subexps_map & ((bitset_word_t) 1 << subexp_idx))) continue; /* Recurse trying to reach the OP_OPEN_SUBEXP and OP_CLOSE_SUBEXP cases below. But, if the destination node is the same node as the source node, don't recurse because it would cause an infinite loop: a regex that exhibits this behavior is ()\1*\1* */ dst = dfa->edests[node].elems[0]; if (dst == from_node) { if (boundaries & 1) return -1; else /* if (boundaries & 2) */ return 0; } cpos = check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, dst, bkref_idx); if (cpos == -1 /* && (boundaries & 1) */) return -1; if (cpos == 0 && (boundaries & 2)) return 0; if (subexp_idx < BITSET_WORD_BITS) ent->eps_reachable_subexps_map &= ~((bitset_word_t) 1 << subexp_idx); } while (ent++->more); } break; case OP_OPEN_SUBEXP: if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx) return -1; break; case OP_CLOSE_SUBEXP: if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx) return 0; break; default: break; } } return (boundaries & 2) ? 1 : 0; } static int check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, Idx subexp_idx, Idx from_node, Idx str_idx, Idx bkref_idx) { struct re_backref_cache_entry *lim = mctx->bkref_ents + limit; int boundaries; /* If we are outside the range of the subexpression, return -1 or 1. */ if (str_idx < lim->subexp_from) return -1; if (lim->subexp_to < str_idx) return 1; /* If we are within the subexpression, return 0. */ boundaries = (str_idx == lim->subexp_from); boundaries |= (str_idx == lim->subexp_to) << 1; if (boundaries == 0) return 0; /* Else, examine epsilon closure. */ return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, from_node, bkref_idx); } /* Check the limitations of sub expressions LIMITS, and remove the nodes which are against limitations from DEST_NODES. */ static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, Idx str_idx) { reg_errcode_t err; Idx node_idx, lim_idx; for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { Idx subexp_idx; struct re_backref_cache_entry *ent; ent = bkref_ents + limits->elems[lim_idx]; if (str_idx <= ent->subexp_from || ent->str_idx < str_idx) continue; /* This is unrelated limitation. */ subexp_idx = dfa->nodes[ent->node].opr.idx; if (ent->subexp_to == str_idx) { Idx ops_node = -1; Idx cls_node = -1; for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_OPEN_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) ops_node = node; else if (type == OP_CLOSE_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) cls_node = node; } /* Check the limitation of the open subexpression. */ /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */ if (ops_node >= 0) { err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, candidates); if (BE (err != REG_NOERROR, 0)) return err; } /* Check the limitation of the close subexpression. */ if (cls_node >= 0) for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; if (!re_node_set_contains (dfa->inveclosures + node, cls_node) && !re_node_set_contains (dfa->eclosures + node, cls_node)) { /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates); if (BE (err != REG_NOERROR, 0)) return err; --node_idx; } } } else /* (ent->subexp_to != str_idx) */ { for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP) { if (subexp_idx != dfa->nodes[node].opr.idx) continue; /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates); if (BE (err != REG_NOERROR, 0)) return err; } } } } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, const re_node_set *candidates) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx node_idx, node; re_sift_context_t local_sctx; Idx first_idx = search_cur_bkref_entry (mctx, str_idx); if (first_idx == -1) return REG_NOERROR; local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ for (node_idx = 0; node_idx < candidates->nelem; ++node_idx) { Idx enabled_idx; re_token_type_t type; struct re_backref_cache_entry *entry; node = candidates->elems[node_idx]; type = dfa->nodes[node].type; /* Avoid infinite loop for the REs like "()\1+". */ if (node == sctx->last_node && str_idx == sctx->last_str_idx) continue; if (type != OP_BACK_REF) continue; entry = mctx->bkref_ents + first_idx; enabled_idx = first_idx; do { Idx subexp_len; Idx to_idx; Idx dst_node; bool ok; re_dfastate_t *cur_state; if (entry->node != node) continue; subexp_len = entry->subexp_to - entry->subexp_from; to_idx = str_idx + subexp_len; dst_node = (subexp_len ? dfa->nexts[node] : dfa->edests[node].elems[0]); if (to_idx > sctx->last_str_idx || sctx->sifted_states[to_idx] == NULL || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node) || check_dst_limits (mctx, &sctx->limits, node, str_idx, dst_node, to_idx)) continue; if (local_sctx.sifted_states == NULL) { local_sctx = *sctx; err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); if (BE (err != REG_NOERROR, 0)) goto free_return; } local_sctx.last_node = node; local_sctx.last_str_idx = str_idx; ok = re_node_set_insert (&local_sctx.limits, enabled_idx); if (BE (! ok, 0)) { err = REG_ESPACE; goto free_return; } cur_state = local_sctx.sifted_states[str_idx]; err = sift_states_backward (mctx, &local_sctx); if (BE (err != REG_NOERROR, 0)) goto free_return; if (sctx->limited_states != NULL) { err = merge_state_array (dfa, sctx->limited_states, local_sctx.sifted_states, str_idx + 1); if (BE (err != REG_NOERROR, 0)) goto free_return; } local_sctx.sifted_states[str_idx] = cur_state; re_node_set_remove (&local_sctx.limits, enabled_idx); /* mctx->bkref_ents may have changed, reload the pointer. */ entry = mctx->bkref_ents + enabled_idx; } while (enabled_idx++, entry++->more); } err = REG_NOERROR; free_return: if (local_sctx.sifted_states != NULL) { re_node_set_free (&local_sctx.limits); } return err; } #ifdef RE_ENABLE_I18N static int sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx node_idx, Idx str_idx, Idx max_str_idx) { const re_dfa_t *const dfa = mctx->dfa; int naccepted; /* Check the node can accept "multi byte". */ naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx); if (naccepted > 0 && str_idx + naccepted <= max_str_idx && !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], dfa->nexts[node_idx])) /* The node can't accept the "multi byte", or the destination was already thrown away, then the node could't accept the current input "multi byte". */ naccepted = 0; /* Otherwise, it is sure that the node could accept 'naccepted' bytes input. */ return naccepted; } #endif /* RE_ENABLE_I18N */ /* Functions for state transition. */ /* Return the next state to which the current state STATE will transit by accepting the current input byte, and update STATE_LOG if necessary. If STATE can accept a multibyte char/collating element/back reference update the destination of STATE_LOG. */ static re_dfastate_t * __attribute_warn_unused_result__ transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) { re_dfastate_t **trtable; unsigned char ch; #ifdef RE_ENABLE_I18N /* If the current state can accept multibyte. */ if (BE (state->accept_mb, 0)) { *err = transit_state_mb (mctx, state); if (BE (*err != REG_NOERROR, 0)) return NULL; } #endif /* RE_ENABLE_I18N */ /* Then decide the next state with the single byte. */ #if 0 if (0) /* don't use transition table */ return transit_state_sb (err, mctx, state); #endif /* Use transition table */ ch = re_string_fetch_byte (&mctx->input); for (;;) { trtable = state->trtable; if (BE (trtable != NULL, 1)) return trtable[ch]; trtable = state->word_trtable; if (BE (trtable != NULL, 1)) { unsigned int context; context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input) - 1, mctx->eflags); if (IS_WORD_CONTEXT (context)) return trtable[ch + SBC_MAX]; else return trtable[ch]; } if (!build_trtable (mctx->dfa, state)) { *err = REG_ESPACE; return NULL; } /* Retry, we now have a transition table. */ } } /* Update the state_log if we need */ static re_dfastate_t * merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state) { const re_dfa_t *const dfa = mctx->dfa; Idx cur_idx = re_string_cur_idx (&mctx->input); if (cur_idx > mctx->state_log_top) { mctx->state_log[cur_idx] = next_state; mctx->state_log_top = cur_idx; } else if (mctx->state_log[cur_idx] == 0) { mctx->state_log[cur_idx] = next_state; } else { re_dfastate_t *pstate; unsigned int context; re_node_set next_nodes, *log_nodes, *table_nodes = NULL; /* If (state_log[cur_idx] != 0), it implies that cur_idx is the destination of a multibyte char/collating element/ back reference. Then the next state is the union set of these destinations and the results of the transition table. */ pstate = mctx->state_log[cur_idx]; log_nodes = pstate->entrance_nodes; if (next_state != NULL) { table_nodes = next_state->entrance_nodes; *err = re_node_set_init_union (&next_nodes, table_nodes, log_nodes); if (BE (*err != REG_NOERROR, 0)) return NULL; } else next_nodes = *log_nodes; /* Note: We already add the nodes of the initial state, then we don't need to add them here. */ context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input) - 1, mctx->eflags); next_state = mctx->state_log[cur_idx] = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ if (table_nodes != NULL) re_node_set_free (&next_nodes); } if (BE (dfa->nbackref, 0) && next_state != NULL) { /* Check OP_OPEN_SUBEXP in the current state in case that we use them later. We must check them here, since the back references in the next state might use them. */ *err = check_subexp_matching_top (mctx, &next_state->nodes, cur_idx); if (BE (*err != REG_NOERROR, 0)) return NULL; /* If the next state has back references. */ if (next_state->has_backref) { *err = transit_state_bkref (mctx, &next_state->nodes); if (BE (*err != REG_NOERROR, 0)) return NULL; next_state = mctx->state_log[cur_idx]; } } return next_state; } /* Skip bytes in the input that correspond to part of a multi-byte match, then look in the log for a state from which to restart matching. */ static re_dfastate_t * find_recover_state (reg_errcode_t *err, re_match_context_t *mctx) { re_dfastate_t *cur_state; do { Idx max = mctx->state_log_top; Idx cur_str_idx = re_string_cur_idx (&mctx->input); do { if (++cur_str_idx > max) return NULL; re_string_skip_bytes (&mctx->input, 1); } while (mctx->state_log[cur_str_idx] == NULL); cur_state = merge_state_with_log (err, mctx, NULL); } while (*err == REG_NOERROR && cur_state == NULL); return cur_state; } /* Helper functions for transit_state. */ /* From the node set CUR_NODES, pick up the nodes whose types are OP_OPEN_SUBEXP and which have corresponding back references in the regular expression. And register them to use them later for evaluating the corresponding back references. */ static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx node_idx; reg_errcode_t err; /* TODO: This isn't efficient. Because there might be more than one nodes whose types are OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all nodes. E.g. RE: (a){2} */ for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx) { Idx node = cur_nodes->elems[node_idx]; if (dfa->nodes[node].type == OP_OPEN_SUBEXP && dfa->nodes[node].opr.idx < BITSET_WORD_BITS && (dfa->used_bkref_map & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx))) { err = match_ctx_add_subtop (mctx, node, str_idx); if (BE (err != REG_NOERROR, 0)) return err; } } return REG_NOERROR; } #if 0 /* Return the next state to which the current state STATE will transit by accepting the current input byte. */ static re_dfastate_t * transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) { const re_dfa_t *const dfa = mctx->dfa; re_node_set next_nodes; re_dfastate_t *next_state; Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input); unsigned int context; *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1); if (BE (*err != REG_NOERROR, 0)) return NULL; for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) { Idx cur_node = state->nodes.elems[node_cnt]; if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx)) { *err = re_node_set_merge (&next_nodes, dfa->eclosures + dfa->nexts[cur_node]); if (BE (*err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return NULL; } } } context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); next_state = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ re_node_set_free (&next_nodes); re_string_skip_bytes (&mctx->input, 1); return next_state; } #endif #ifdef RE_ENABLE_I18N static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx i; for (i = 0; i < pstate->nodes.nelem; ++i) { re_node_set dest_nodes, *new_nodes; Idx cur_node_idx = pstate->nodes.elems[i]; int naccepted; Idx dest_idx; unsigned int context; re_dfastate_t *dest_state; if (!dfa->nodes[cur_node_idx].accept_mb) continue; if (dfa->nodes[cur_node_idx].constraint) { context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input), mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint, context)) continue; } /* How many bytes the node can accept? */ naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input, re_string_cur_idx (&mctx->input)); if (naccepted == 0) continue; /* The node can accepts 'naccepted' bytes. */ dest_idx = re_string_cur_idx (&mctx->input) + naccepted; mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted : mctx->max_mb_elem_len); err = clean_state_log_if_needed (mctx, dest_idx); if (BE (err != REG_NOERROR, 0)) return err; #ifdef DEBUG assert (dfa->nexts[cur_node_idx] != -1); #endif new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx]; dest_state = mctx->state_log[dest_idx]; if (dest_state == NULL) dest_nodes = *new_nodes; else { err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_nodes); if (BE (err != REG_NOERROR, 0)) return err; } context = re_string_context_at (&mctx->input, dest_idx - 1, mctx->eflags); mctx->state_log[dest_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); if (dest_state != NULL) re_node_set_free (&dest_nodes); if (BE (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR, 0)) return err; } return REG_NOERROR; } #endif /* RE_ENABLE_I18N */ static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx i; Idx cur_str_idx = re_string_cur_idx (&mctx->input); for (i = 0; i < nodes->nelem; ++i) { Idx dest_str_idx, prev_nelem, bkc_idx; Idx node_idx = nodes->elems[i]; unsigned int context; const re_token_t *node = dfa->nodes + node_idx; re_node_set *new_dest_nodes; /* Check whether 'node' is a backreference or not. */ if (node->type != OP_BACK_REF) continue; if (node->constraint) { context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) continue; } /* 'node' is a backreference. Check the substring which the substring matched. */ bkc_idx = mctx->nbkref_ents; err = get_subexp (mctx, node_idx, cur_str_idx); if (BE (err != REG_NOERROR, 0)) goto free_return; /* And add the epsilon closures (which is 'new_dest_nodes') of the backreference to appropriate state_log. */ #ifdef DEBUG assert (dfa->nexts[node_idx] != -1); #endif for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx) { Idx subexp_len; re_dfastate_t *dest_state; struct re_backref_cache_entry *bkref_ent; bkref_ent = mctx->bkref_ents + bkc_idx; if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx) continue; subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from; new_dest_nodes = (subexp_len == 0 ? dfa->eclosures + dfa->edests[node_idx].elems[0] : dfa->eclosures + dfa->nexts[node_idx]); dest_str_idx = (cur_str_idx + bkref_ent->subexp_to - bkref_ent->subexp_from); context = re_string_context_at (&mctx->input, dest_str_idx - 1, mctx->eflags); dest_state = mctx->state_log[dest_str_idx]; prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0 : mctx->state_log[cur_str_idx]->nodes.nelem); /* Add 'new_dest_node' to state_log. */ if (dest_state == NULL) { mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, new_dest_nodes, context); if (BE (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR, 0)) goto free_return; } else { re_node_set dest_nodes; err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_dest_nodes); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&dest_nodes); goto free_return; } mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); re_node_set_free (&dest_nodes); if (BE (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR, 0)) goto free_return; } /* We need to check recursively if the backreference can epsilon transit. */ if (subexp_len == 0 && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem) { err = check_subexp_matching_top (mctx, new_dest_nodes, cur_str_idx); if (BE (err != REG_NOERROR, 0)) goto free_return; err = transit_state_bkref (mctx, new_dest_nodes); if (BE (err != REG_NOERROR, 0)) goto free_return; } } } err = REG_NOERROR; free_return: return err; } /* Enumerate all the candidates which the backreference BKREF_NODE can match at BKREF_STR_IDX, and register them by match_ctx_add_entry(). Note that we might collect inappropriate candidates here. However, the cost of checking them strictly here is too high, then we delay these checking for prune_impossible_nodes(). */ static reg_errcode_t __attribute_warn_unused_result__ get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx subexp_num, sub_top_idx; const char *buf = (const char *) re_string_get_buffer (&mctx->input); /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */ Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx); if (cache_idx != -1) { const struct re_backref_cache_entry *entry = mctx->bkref_ents + cache_idx; do if (entry->node == bkref_node) return REG_NOERROR; /* We already checked it. */ while (entry++->more); } subexp_num = dfa->nodes[bkref_node].opr.idx; /* For each sub expression */ for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx) { reg_errcode_t err; re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx]; re_sub_match_last_t *sub_last; Idx sub_last_idx, sl_str, bkref_str_off; if (dfa->nodes[sub_top->node].opr.idx != subexp_num) continue; /* It isn't related. */ sl_str = sub_top->str_idx; bkref_str_off = bkref_str_idx; /* At first, check the last node of sub expressions we already evaluated. */ for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx) { regoff_t sl_str_diff; sub_last = sub_top->lasts[sub_last_idx]; sl_str_diff = sub_last->str_idx - sl_str; /* The matched string by the sub expression match with the substring at the back reference? */ if (sl_str_diff > 0) { if (BE (bkref_str_off + sl_str_diff > mctx->input.valid_len, 0)) { /* Not enough chars for a successful match. */ if (bkref_str_off + sl_str_diff > mctx->input.len) break; err = clean_state_log_if_needed (mctx, bkref_str_off + sl_str_diff); if (BE (err != REG_NOERROR, 0)) return err; buf = (const char *) re_string_get_buffer (&mctx->input); } if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0) /* We don't need to search this sub expression any more. */ break; } bkref_str_off += sl_str_diff; sl_str += sl_str_diff; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); /* Reload buf, since the preceding call might have reallocated the buffer. */ buf = (const char *) re_string_get_buffer (&mctx->input); if (err == REG_NOMATCH) continue; if (BE (err != REG_NOERROR, 0)) return err; } if (sub_last_idx < sub_top->nlasts) continue; if (sub_last_idx > 0) ++sl_str; /* Then, search for the other last nodes of the sub expression. */ for (; sl_str <= bkref_str_idx; ++sl_str) { Idx cls_node; regoff_t sl_str_off; const re_node_set *nodes; sl_str_off = sl_str - sub_top->str_idx; /* The matched string by the sub expression match with the substring at the back reference? */ if (sl_str_off > 0) { if (BE (bkref_str_off >= mctx->input.valid_len, 0)) { /* If we are at the end of the input, we cannot match. */ if (bkref_str_off >= mctx->input.len) break; err = extend_buffers (mctx, bkref_str_off + 1); if (BE (err != REG_NOERROR, 0)) return err; buf = (const char *) re_string_get_buffer (&mctx->input); } if (buf [bkref_str_off++] != buf[sl_str - 1]) break; /* We don't need to search this sub expression any more. */ } if (mctx->state_log[sl_str] == NULL) continue; /* Does this state have a ')' of the sub expression? */ nodes = &mctx->state_log[sl_str]->nodes; cls_node = find_subexp_node (dfa, nodes, subexp_num, OP_CLOSE_SUBEXP); if (cls_node == -1) continue; /* No. */ if (sub_top->path == NULL) { sub_top->path = calloc (sizeof (state_array_t), sl_str - sub_top->str_idx + 1); if (sub_top->path == NULL) return REG_ESPACE; } /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node in the current context? */ err = check_arrival (mctx, sub_top->path, sub_top->node, sub_top->str_idx, cls_node, sl_str, OP_CLOSE_SUBEXP); if (err == REG_NOMATCH) continue; if (BE (err != REG_NOERROR, 0)) return err; sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); if (BE (sub_last == NULL, 0)) return REG_ESPACE; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); if (err == REG_NOMATCH) continue; } } return REG_NOERROR; } /* Helper functions for get_subexp(). */ /* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR. If it can arrive, register the sub expression expressed with SUB_TOP and SUB_LAST. */ static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str) { reg_errcode_t err; Idx to_idx; /* Can the subexpression arrive the back reference? */ err = check_arrival (mctx, &sub_last->path, sub_last->node, sub_last->str_idx, bkref_node, bkref_str, OP_OPEN_SUBEXP); if (err != REG_NOERROR) return err; err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx, sub_last->str_idx); if (BE (err != REG_NOERROR, 0)) return err; to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx; return clean_state_log_if_needed (mctx, to_idx); } /* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX. Search '(' if FL_OPEN, or search ')' otherwise. TODO: This function isn't efficient... Because there might be more than one nodes whose types are OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all nodes. E.g. RE: (a){2} */ static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type) { Idx cls_idx; for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx) { Idx cls_node = nodes->elems[cls_idx]; const re_token_t *node = dfa->nodes + cls_node; if (node->type == type && node->opr.idx == subexp_idx) return cls_node; } return -1; } /* Check whether the node TOP_NODE at TOP_STR can arrive to the node LAST_NODE at LAST_STR. We record the path onto PATH since it will be heavily reused. Return REG_NOERROR if it can arrive, or REG_NOMATCH otherwise. */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, Idx top_str, Idx last_node, Idx last_str, int type) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err = REG_NOERROR; Idx subexp_num, backup_cur_idx, str_idx, null_cnt; re_dfastate_t *cur_state = NULL; re_node_set *cur_nodes, next_nodes; re_dfastate_t **backup_state_log; unsigned int context; subexp_num = dfa->nodes[top_node].opr.idx; /* Extend the buffer if we need. */ if (BE (path->alloc < last_str + mctx->max_mb_elem_len + 1, 0)) { re_dfastate_t **new_array; Idx old_alloc = path->alloc; Idx incr_alloc = last_str + mctx->max_mb_elem_len + 1; Idx new_alloc; if (BE (IDX_MAX - old_alloc < incr_alloc, 0)) return REG_ESPACE; new_alloc = old_alloc + incr_alloc; if (BE (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc, 0)) return REG_ESPACE; new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); if (BE (new_array == NULL, 0)) return REG_ESPACE; path->array = new_array; path->alloc = new_alloc; memset (new_array + old_alloc, '\0', sizeof (re_dfastate_t *) * (path->alloc - old_alloc)); } str_idx = path->next_idx ? path->next_idx : top_str; /* Temporary modify MCTX. */ backup_state_log = mctx->state_log; backup_cur_idx = mctx->input.cur_idx; mctx->state_log = path->array; mctx->input.cur_idx = str_idx; /* Setup initial node set. */ context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); if (str_idx == top_str) { err = re_node_set_init_1 (&next_nodes, top_node); if (BE (err != REG_NOERROR, 0)) return err; err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return err; } } else { cur_state = mctx->state_log[str_idx]; if (cur_state && cur_state->has_backref) { err = re_node_set_init_copy (&next_nodes, &cur_state->nodes); if (BE (err != REG_NOERROR, 0)) return err; } else re_node_set_init_empty (&next_nodes); } if (str_idx == top_str || (cur_state && cur_state->has_backref)) { if (next_nodes.nelem) { err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return err; } } cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (BE (cur_state == NULL && err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return err; } mctx->state_log[str_idx] = cur_state; } for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;) { re_node_set_empty (&next_nodes); if (mctx->state_log[str_idx + 1]) { err = re_node_set_merge (&next_nodes, &mctx->state_log[str_idx + 1]->nodes); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return err; } } if (cur_state) { err = check_arrival_add_next_nodes (mctx, str_idx, &cur_state->non_eps_nodes, &next_nodes); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return err; } } ++str_idx; if (next_nodes.nelem) { err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return err; } err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return err; } } context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (BE (cur_state == NULL && err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return err; } mctx->state_log[str_idx] = cur_state; null_cnt = cur_state == NULL ? null_cnt + 1 : 0; } re_node_set_free (&next_nodes); cur_nodes = (mctx->state_log[last_str] == NULL ? NULL : &mctx->state_log[last_str]->nodes); path->next_idx = str_idx; /* Fix MCTX. */ mctx->state_log = backup_state_log; mctx->input.cur_idx = backup_cur_idx; /* Then check the current node set has the node LAST_NODE. */ if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node)) return REG_NOERROR; return REG_NOMATCH; } /* Helper functions for check_arrival. */ /* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them to NEXT_NODES. TODO: This function is similar to the functions transit_state*(), however this function has many additional works. Can't we unify them? */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, re_node_set *cur_nodes, re_node_set *next_nodes) { const re_dfa_t *const dfa = mctx->dfa; bool ok; Idx cur_idx; #ifdef RE_ENABLE_I18N reg_errcode_t err = REG_NOERROR; #endif re_node_set union_set; re_node_set_init_empty (&union_set); for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) { int naccepted = 0; Idx cur_node = cur_nodes->elems[cur_idx]; #ifdef DEBUG re_token_type_t type = dfa->nodes[cur_node].type; assert (!IS_EPSILON_NODE (type)); #endif #ifdef RE_ENABLE_I18N /* If the node may accept "multi byte". */ if (dfa->nodes[cur_node].accept_mb) { naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input, str_idx); if (naccepted > 1) { re_dfastate_t *dest_state; Idx next_node = dfa->nexts[cur_node]; Idx next_idx = str_idx + naccepted; dest_state = mctx->state_log[next_idx]; re_node_set_empty (&union_set); if (dest_state) { err = re_node_set_merge (&union_set, &dest_state->nodes); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&union_set); return err; } } ok = re_node_set_insert (&union_set, next_node); if (BE (! ok, 0)) { re_node_set_free (&union_set); return REG_ESPACE; } mctx->state_log[next_idx] = re_acquire_state (&err, dfa, &union_set); if (BE (mctx->state_log[next_idx] == NULL && err != REG_NOERROR, 0)) { re_node_set_free (&union_set); return err; } } } #endif /* RE_ENABLE_I18N */ if (naccepted || check_node_accept (mctx, dfa->nodes + cur_node, str_idx)) { ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]); if (BE (! ok, 0)) { re_node_set_free (&union_set); return REG_ESPACE; } } } re_node_set_free (&union_set); return REG_NOERROR; } /* For all the nodes in CUR_NODES, add the epsilon closures of them to CUR_NODES, however exclude the nodes which are: - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN. - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN. */ static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type) { reg_errcode_t err; Idx idx, outside_node; re_node_set new_nodes; #ifdef DEBUG assert (cur_nodes->nelem); #endif err = re_node_set_alloc (&new_nodes, cur_nodes->nelem); if (BE (err != REG_NOERROR, 0)) return err; /* Create a new node set NEW_NODES with the nodes which are epsilon closures of the node in CUR_NODES. */ for (idx = 0; idx < cur_nodes->nelem; ++idx) { Idx cur_node = cur_nodes->elems[idx]; const re_node_set *eclosure = dfa->eclosures + cur_node; outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type); if (outside_node == -1) { /* There are no problematic nodes, just merge them. */ err = re_node_set_merge (&new_nodes, eclosure); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&new_nodes); return err; } } else { /* There are problematic nodes, re-calculate incrementally. */ err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node, ex_subexp, type); if (BE (err != REG_NOERROR, 0)) { re_node_set_free (&new_nodes); return err; } } } re_node_set_free (cur_nodes); *cur_nodes = new_nodes; return REG_NOERROR; } /* Helper function for check_arrival_expand_ecl. Check incrementally the epsilon closure of TARGET, and if it isn't problematic append it to DST_NODES. */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, Idx target, Idx ex_subexp, int type) { Idx cur_node; for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);) { bool ok; if (dfa->nodes[cur_node].type == type && dfa->nodes[cur_node].opr.idx == ex_subexp) { if (type == OP_CLOSE_SUBEXP) { ok = re_node_set_insert (dst_nodes, cur_node); if (BE (! ok, 0)) return REG_ESPACE; } break; } ok = re_node_set_insert (dst_nodes, cur_node); if (BE (! ok, 0)) return REG_ESPACE; if (dfa->edests[cur_node].nelem == 0) break; if (dfa->edests[cur_node].nelem == 2) { reg_errcode_t err; err = check_arrival_expand_ecl_sub (dfa, dst_nodes, dfa->edests[cur_node].elems[1], ex_subexp, type); if (BE (err != REG_NOERROR, 0)) return err; } cur_node = dfa->edests[cur_node].elems[0]; } return REG_NOERROR; } /* For all the back references in the current state, calculate the destination of the back references by the appropriate entry in MCTX->BKREF_ENTS. */ static reg_errcode_t __attribute_warn_unused_result__ expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, Idx cur_str, Idx subexp_num, int type) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str); struct re_backref_cache_entry *ent; if (cache_idx_start == -1) return REG_NOERROR; restart: ent = mctx->bkref_ents + cache_idx_start; do { Idx to_idx, next_node; /* Is this entry ENT is appropriate? */ if (!re_node_set_contains (cur_nodes, ent->node)) continue; /* No. */ to_idx = cur_str + ent->subexp_to - ent->subexp_from; /* Calculate the destination of the back reference, and append it to MCTX->STATE_LOG. */ if (to_idx == cur_str) { /* The backreference did epsilon transit, we must re-check all the node in the current state. */ re_node_set new_dests; reg_errcode_t err2, err3; next_node = dfa->edests[ent->node].elems[0]; if (re_node_set_contains (cur_nodes, next_node)) continue; err = re_node_set_init_1 (&new_dests, next_node); err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type); err3 = re_node_set_merge (cur_nodes, &new_dests); re_node_set_free (&new_dests); if (BE (err != REG_NOERROR || err2 != REG_NOERROR || err3 != REG_NOERROR, 0)) { err = (err != REG_NOERROR ? err : (err2 != REG_NOERROR ? err2 : err3)); return err; } /* TODO: It is still inefficient... */ goto restart; } else { re_node_set union_set; next_node = dfa->nexts[ent->node]; if (mctx->state_log[to_idx]) { bool ok; if (re_node_set_contains (&mctx->state_log[to_idx]->nodes, next_node)) continue; err = re_node_set_init_copy (&union_set, &mctx->state_log[to_idx]->nodes); ok = re_node_set_insert (&union_set, next_node); if (BE (err != REG_NOERROR || ! ok, 0)) { re_node_set_free (&union_set); err = err != REG_NOERROR ? err : REG_ESPACE; return err; } } else { err = re_node_set_init_1 (&union_set, next_node); if (BE (err != REG_NOERROR, 0)) return err; } mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); re_node_set_free (&union_set); if (BE (mctx->state_log[to_idx] == NULL && err != REG_NOERROR, 0)) return err; } } while (ent++->more); return REG_NOERROR; } /* Build transition table for the state. Return true if successful. */ static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) { reg_errcode_t err; Idx i, j; int ch; bool need_word_trtable = false; bitset_word_t elem, mask; bool dests_node_malloced = false; bool dest_states_malloced = false; Idx ndests; /* Number of the destination states from 'state'. */ re_dfastate_t **trtable; re_dfastate_t **dest_states = NULL, **dest_states_word, **dest_states_nl; re_node_set follows, *dests_node; bitset_t *dests_ch; bitset_t acceptable; struct dests_alloc { re_node_set dests_node[SBC_MAX]; bitset_t dests_ch[SBC_MAX]; } *dests_alloc; /* We build DFA states which corresponds to the destination nodes from 'state'. 'dests_node[i]' represents the nodes which i-th destination state contains, and 'dests_ch[i]' represents the characters which i-th destination state accepts. */ if (__libc_use_alloca (sizeof (struct dests_alloc))) dests_alloc = (struct dests_alloc *) alloca (sizeof (struct dests_alloc)); else { dests_alloc = re_malloc (struct dests_alloc, 1); if (BE (dests_alloc == NULL, 0)) return false; dests_node_malloced = true; } dests_node = dests_alloc->dests_node; dests_ch = dests_alloc->dests_ch; /* Initialize transition table. */ state->word_trtable = state->trtable = NULL; /* At first, group all nodes belonging to 'state' into several destinations. */ ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch); if (BE (ndests <= 0, 0)) { if (dests_node_malloced) re_free (dests_alloc); /* Return false in case of an error, true otherwise. */ if (ndests == 0) { state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (BE (state->trtable == NULL, 0)) return false; return true; } return false; } err = re_node_set_alloc (&follows, ndests + 1); if (BE (err != REG_NOERROR, 0)) goto out_free; /* Avoid arithmetic overflow in size calculation. */ if (BE ((((SIZE_MAX - (sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX) / (3 * sizeof (re_dfastate_t *))) < ndests), 0)) goto out_free; if (__libc_use_alloca ((sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX + ndests * 3 * sizeof (re_dfastate_t *))) dest_states = (re_dfastate_t **) alloca (ndests * 3 * sizeof (re_dfastate_t *)); else { dest_states = re_malloc (re_dfastate_t *, ndests * 3); if (BE (dest_states == NULL, 0)) { out_free: if (dest_states_malloced) re_free (dest_states); re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); if (dests_node_malloced) re_free (dests_alloc); return false; } dest_states_malloced = true; } dest_states_word = dest_states + ndests; dest_states_nl = dest_states_word + ndests; bitset_empty (acceptable); /* Then build the states for all destinations. */ for (i = 0; i < ndests; ++i) { Idx next_node; re_node_set_empty (&follows); /* Merge the follows of this destination states. */ for (j = 0; j < dests_node[i].nelem; ++j) { next_node = dfa->nexts[dests_node[i].elems[j]]; if (next_node != -1) { err = re_node_set_merge (&follows, dfa->eclosures + next_node); if (BE (err != REG_NOERROR, 0)) goto out_free; } } dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); if (BE (dest_states[i] == NULL && err != REG_NOERROR, 0)) goto out_free; /* If the new state has context constraint, build appropriate states for these contexts. */ if (dest_states[i]->has_constraint) { dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_WORD); if (BE (dest_states_word[i] == NULL && err != REG_NOERROR, 0)) goto out_free; if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1) need_word_trtable = true; dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_NEWLINE); if (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0)) goto out_free; } else { dest_states_word[i] = dest_states[i]; dest_states_nl[i] = dest_states[i]; } bitset_merge (acceptable, dests_ch[i]); } if (!BE (need_word_trtable, 0)) { /* We don't care about whether the following character is a word character, or we are in a single-byte character set so we can discern by looking at the character code: allocate a 256-entry transition table. */ trtable = state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (BE (trtable == NULL, 0)) goto out_free; /* For all characters ch...: */ for (i = 0; i < BITSET_WORDS; ++i) for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; elem; mask <<= 1, elem >>= 1, ++ch) if (BE (elem & 1, 0)) { /* There must be exactly one destination which accepts character ch. See group_nodes_into_DFAstates. */ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) ; /* j-th destination accepts the word character ch. */ if (dfa->word_char[i] & mask) trtable[ch] = dest_states_word[j]; else trtable[ch] = dest_states[j]; } } else { /* We care about whether the following character is a word character, and we are in a multi-byte character set: discern by looking at the character code: build two 256-entry transition tables, one starting at trtable[0] and one starting at trtable[SBC_MAX]. */ trtable = state->word_trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX); if (BE (trtable == NULL, 0)) goto out_free; /* For all characters ch...: */ for (i = 0; i < BITSET_WORDS; ++i) for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; elem; mask <<= 1, elem >>= 1, ++ch) if (BE (elem & 1, 0)) { /* There must be exactly one destination which accepts character ch. See group_nodes_into_DFAstates. */ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) ; /* j-th destination accepts the word character ch. */ trtable[ch] = dest_states[j]; trtable[ch + SBC_MAX] = dest_states_word[j]; } } /* new line */ if (bitset_contain (acceptable, NEWLINE_CHAR)) { /* The current state accepts newline character. */ for (j = 0; j < ndests; ++j) if (bitset_contain (dests_ch[j], NEWLINE_CHAR)) { /* k-th destination accepts newline character. */ trtable[NEWLINE_CHAR] = dest_states_nl[j]; if (need_word_trtable) trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j]; /* There must be only one destination which accepts newline. See group_nodes_into_DFAstates. */ break; } } if (dest_states_malloced) re_free (dest_states); re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); if (dests_node_malloced) re_free (dests_alloc); return true; } /* Group all nodes belonging to STATE into several destinations. Then for all destinations, set the nodes belonging to the destination to DESTS_NODE[i] and set the characters accepted by the destination to DEST_CH[i]. This function return the number of destinations. */ static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *dests_node, bitset_t *dests_ch) { reg_errcode_t err; bool ok; Idx i, j, k; Idx ndests; /* Number of the destinations from 'state'. */ bitset_t accepts; /* Characters a node can accept. */ const re_node_set *cur_nodes = &state->nodes; bitset_empty (accepts); ndests = 0; /* For all the nodes belonging to 'state', */ for (i = 0; i < cur_nodes->nelem; ++i) { re_token_t *node = &dfa->nodes[cur_nodes->elems[i]]; re_token_type_t type = node->type; unsigned int constraint = node->constraint; /* Enumerate all single byte character this node can accept. */ if (type == CHARACTER) bitset_set (accepts, node->opr.c); else if (type == SIMPLE_BRACKET) { bitset_merge (accepts, node->opr.sbcset); } else if (type == OP_PERIOD) { #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) bitset_merge (accepts, dfa->sb_char); else #endif bitset_set_all (accepts); if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } #ifdef RE_ENABLE_I18N else if (type == OP_UTF8_PERIOD) { if (ASCII_CHARS % BITSET_WORD_BITS == 0) memset (accepts, -1, ASCII_CHARS / CHAR_BIT); else bitset_merge (accepts, utf8_sb_map); if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } #endif else continue; /* Check the 'accepts' and sift the characters which are not match it the context. */ if (constraint) { if (constraint & NEXT_NEWLINE_CONSTRAINT) { bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR); bitset_empty (accepts); if (accepts_newline) bitset_set (accepts, NEWLINE_CHAR); else continue; } if (constraint & NEXT_ENDBUF_CONSTRAINT) { bitset_empty (accepts); continue; } if (constraint & NEXT_WORD_CONSTRAINT) { bitset_word_t any_set = 0; if (type == CHARACTER && !node->word_char) { bitset_empty (accepts); continue; } #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j])); else #endif for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= dfa->word_char[j]); if (!any_set) continue; } if (constraint & NEXT_NOTWORD_CONSTRAINT) { bitset_word_t any_set = 0; if (type == CHARACTER && node->word_char) { bitset_empty (accepts); continue; } #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j])); else #endif for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= ~dfa->word_char[j]); if (!any_set) continue; } } /* Then divide 'accepts' into DFA states, or create a new state. Above, we make sure that accepts is not empty. */ for (j = 0; j < ndests; ++j) { bitset_t intersec; /* Intersection sets, see below. */ bitset_t remains; /* Flags, see below. */ bitset_word_t has_intersec, not_subset, not_consumed; /* Optimization, skip if this state doesn't accept the character. */ if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c)) continue; /* Enumerate the intersection set of this state and 'accepts'. */ has_intersec = 0; for (k = 0; k < BITSET_WORDS; ++k) has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k]; /* And skip if the intersection set is empty. */ if (!has_intersec) continue; /* Then check if this state is a subset of 'accepts'. */ not_subset = not_consumed = 0; for (k = 0; k < BITSET_WORDS; ++k) { not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k]; not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k]; } /* If this state isn't a subset of 'accepts', create a new group state, which has the 'remains'. */ if (not_subset) { bitset_copy (dests_ch[ndests], remains); bitset_copy (dests_ch[j], intersec); err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]); if (BE (err != REG_NOERROR, 0)) goto error_return; ++ndests; } /* Put the position in the current group. */ ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); if (BE (! ok, 0)) goto error_return; /* If all characters are consumed, go to next node. */ if (!not_consumed) break; } /* Some characters remain, create a new group. */ if (j == ndests) { bitset_copy (dests_ch[ndests], accepts); err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]); if (BE (err != REG_NOERROR, 0)) goto error_return; ++ndests; bitset_empty (accepts); } } return ndests; error_return: for (j = 0; j < ndests; ++j) re_node_set_free (dests_node + j); return -1; } #ifdef RE_ENABLE_I18N /* Check how many bytes the node 'dfa->nodes[node_idx]' accepts. Return the number of the bytes the node accepts. STR_IDX is the current index of the input string. This function handles the nodes which can accept one character, or one collating element like '.', '[a-z]', opposite to the other nodes can only accept one byte. */ # ifdef _LIBC # include # endif static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, const re_string_t *input, Idx str_idx) { const re_token_t *node = dfa->nodes + node_idx; int char_len, elem_len; Idx i; if (BE (node->type == OP_UTF8_PERIOD, 0)) { unsigned char c = re_string_byte_at (input, str_idx), d; if (BE (c < 0xc2, 1)) return 0; if (str_idx + 2 > input->len) return 0; d = re_string_byte_at (input, str_idx + 1); if (c < 0xe0) return (d < 0x80 || d > 0xbf) ? 0 : 2; else if (c < 0xf0) { char_len = 3; if (c == 0xe0 && d < 0xa0) return 0; } else if (c < 0xf8) { char_len = 4; if (c == 0xf0 && d < 0x90) return 0; } else if (c < 0xfc) { char_len = 5; if (c == 0xf8 && d < 0x88) return 0; } else if (c < 0xfe) { char_len = 6; if (c == 0xfc && d < 0x84) return 0; } else return 0; if (str_idx + char_len > input->len) return 0; for (i = 1; i < char_len; ++i) { d = re_string_byte_at (input, str_idx + i); if (d < 0x80 || d > 0xbf) return 0; } return char_len; } char_len = re_string_char_size_at (input, str_idx); if (node->type == OP_PERIOD) { if (char_len <= 1) return 0; /* FIXME: I don't think this if is needed, as both '\n' and '\0' are char_len == 1. */ /* '.' accepts any one character except the following two cases. */ if ((!(dfa->syntax & RE_DOT_NEWLINE) && re_string_byte_at (input, str_idx) == '\n') || ((dfa->syntax & RE_DOT_NOT_NULL) && re_string_byte_at (input, str_idx) == '\0')) return 0; return char_len; } elem_len = re_string_elem_size_at (input, str_idx); if ((elem_len <= 1 && char_len <= 1) || char_len == 0) return 0; if (node->type == COMPLEX_BRACKET) { const re_charset_t *cset = node->opr.mbcset; # ifdef _LIBC const unsigned char *pin = ((const unsigned char *) re_string_get_buffer (input) + str_idx); Idx j; uint32_t nrules; # endif /* _LIBC */ int match_len = 0; wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars) ? re_string_wchar_at (input, str_idx) : 0); /* match with multibyte character? */ for (i = 0; i < cset->nmbchars; ++i) if (wc == cset->mbchars[i]) { match_len = char_len; goto check_node_accept_bytes_match; } /* match with character_class? */ for (i = 0; i < cset->nchar_classes; ++i) { wctype_t wt = cset->char_classes[i]; if (__iswctype (wc, wt)) { match_len = char_len; goto check_node_accept_bytes_match; } } # ifdef _LIBC nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { unsigned int in_collseq = 0; const int32_t *table, *indirect; const unsigned char *weights, *extra; const char *collseqwc; /* match with collating_symbol? */ if (cset->ncoll_syms) extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); for (i = 0; i < cset->ncoll_syms; ++i) { const unsigned char *coll_sym = extra + cset->coll_syms[i]; /* Compare the length of input collating element and the length of current collating element. */ if (*coll_sym != elem_len) continue; /* Compare each bytes. */ for (j = 0; j < *coll_sym; j++) if (pin[j] != coll_sym[1 + j]) break; if (j == *coll_sym) { /* Match if every bytes is equal. */ match_len = j; goto check_node_accept_bytes_match; } } if (cset->nranges) { if (elem_len <= char_len) { collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); in_collseq = __collseq_table_lookup (collseqwc, wc); } else in_collseq = find_collation_sequence_value (pin, elem_len); } /* match with range expression? */ /* FIXME: Implement rational ranges here, too. */ for (i = 0; i < cset->nranges; ++i) if (cset->range_starts[i] <= in_collseq && in_collseq <= cset->range_ends[i]) { match_len = elem_len; goto check_node_accept_bytes_match; } /* match with equivalence_class? */ if (cset->nequiv_classes) { const unsigned char *cp = pin; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); int32_t idx = findidx (table, indirect, extra, &cp, elem_len); if (idx > 0) for (i = 0; i < cset->nequiv_classes; ++i) { int32_t equiv_class_idx = cset->equiv_classes[i]; size_t weight_len = weights[idx & 0xffffff]; if (weight_len == weights[equiv_class_idx & 0xffffff] && (idx >> 24) == (equiv_class_idx >> 24)) { Idx cnt = 0; idx &= 0xffffff; equiv_class_idx &= 0xffffff; while (cnt <= weight_len && (weights[equiv_class_idx + 1 + cnt] == weights[idx + 1 + cnt])) ++cnt; if (cnt > weight_len) { match_len = elem_len; goto check_node_accept_bytes_match; } } } } } else # endif /* _LIBC */ { /* match with range expression? */ for (i = 0; i < cset->nranges; ++i) { if (cset->range_starts[i] <= wc && wc <= cset->range_ends[i]) { match_len = char_len; goto check_node_accept_bytes_match; } } } check_node_accept_bytes_match: if (!cset->non_match) return match_len; else { if (match_len > 0) return 0; else return (elem_len > char_len) ? elem_len : char_len; } } return 0; } # ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len) { uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules == 0) { if (mbs_len == 1) { /* No valid character. Match it as a single byte character. */ const unsigned char *collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); return collseq[mbs[0]]; } return UINT_MAX; } else { int32_t idx; const unsigned char *extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); int32_t extrasize = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra; for (idx = 0; idx < extrasize;) { int mbs_cnt; bool found = false; int32_t elem_mbs_len; /* Skip the name of collating element name. */ idx = idx + extra[idx] + 1; elem_mbs_len = extra[idx++]; if (mbs_len == elem_mbs_len) { for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt) if (extra[idx + mbs_cnt] != mbs[mbs_cnt]) break; if (mbs_cnt == elem_mbs_len) /* Found the entry. */ found = true; } /* Skip the byte sequence of the collating element. */ idx += elem_mbs_len; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the collation sequence value. */ idx += sizeof (uint32_t); /* Skip the wide char sequence of the collating element. */ idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1); /* If we found the entry, return the sequence value. */ if (found) return *(uint32_t *) (extra + idx); /* Skip the collation sequence value. */ idx += sizeof (uint32_t); } return UINT_MAX; } } # endif /* _LIBC */ #endif /* RE_ENABLE_I18N */ /* Check whether the node accepts the byte which is IDX-th byte of the INPUT. */ static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx) { unsigned char ch; ch = re_string_byte_at (&mctx->input, idx); switch (node->type) { case CHARACTER: if (node->opr.c != ch) return false; break; case SIMPLE_BRACKET: if (!bitset_contain (node->opr.sbcset, ch)) return false; break; #ifdef RE_ENABLE_I18N case OP_UTF8_PERIOD: if (ch >= ASCII_CHARS) return false; FALLTHROUGH; #endif case OP_PERIOD: if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE)) || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL))) return false; break; default: return false; } if (node->constraint) { /* The node has constraints. Check whether the current context satisfies the constraints. */ unsigned int context = re_string_context_at (&mctx->input, idx, mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) return false; } return true; } /* Extend the buffers, if the buffers have run out. */ static reg_errcode_t __attribute_warn_unused_result__ extend_buffers (re_match_context_t *mctx, int min_len) { reg_errcode_t ret; re_string_t *pstr = &mctx->input; /* Avoid overflow. */ if (BE (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) / 2 <= pstr->bufs_len, 0)) return REG_ESPACE; /* Double the lengths of the buffers, but allocate at least MIN_LEN. */ ret = re_string_realloc_buffers (pstr, MAX (min_len, MIN (pstr->len, pstr->bufs_len * 2))); if (BE (ret != REG_NOERROR, 0)) return ret; if (mctx->state_log != NULL) { /* And double the length of state_log. */ /* XXX We have no indication of the size of this buffer. If this allocation fail we have no indication that the state_log array does not have the right size. */ re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *, pstr->bufs_len + 1); if (BE (new_array == NULL, 0)) return REG_ESPACE; mctx->state_log = new_array; } /* Then reconstruct the buffers. */ if (pstr->icase) { #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) { ret = build_wcs_upper_buffer (pstr); if (BE (ret != REG_NOERROR, 0)) return ret; } else #endif /* RE_ENABLE_I18N */ build_upper_buffer (pstr); } else { #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) build_wcs_buffer (pstr); else #endif /* RE_ENABLE_I18N */ { if (pstr->trans != NULL) re_string_translate_buffer (pstr); } } return REG_NOERROR; } /* Functions for matching context. */ /* Initialize MCTX. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) { mctx->eflags = eflags; mctx->match_last = -1; if (n > 0) { /* Avoid overflow. */ size_t max_object_size = MAX (sizeof (struct re_backref_cache_entry), sizeof (re_sub_match_top_t *)); if (BE (MIN (IDX_MAX, SIZE_MAX / max_object_size) < n, 0)) return REG_ESPACE; mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n); mctx->sub_tops = re_malloc (re_sub_match_top_t *, n); if (BE (mctx->bkref_ents == NULL || mctx->sub_tops == NULL, 0)) return REG_ESPACE; } /* Already zero-ed by the caller. else mctx->bkref_ents = NULL; mctx->nbkref_ents = 0; mctx->nsub_tops = 0; */ mctx->abkref_ents = n; mctx->max_mb_elem_len = 1; mctx->asub_tops = n; return REG_NOERROR; } /* Clean the entries which depend on the current input in MCTX. This function must be invoked when the matcher changes the start index of the input, or changes the input string. */ static void match_ctx_clean (re_match_context_t *mctx) { Idx st_idx; for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx) { Idx sl_idx; re_sub_match_top_t *top = mctx->sub_tops[st_idx]; for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx) { re_sub_match_last_t *last = top->lasts[sl_idx]; re_free (last->path.array); re_free (last); } re_free (top->lasts); if (top->path) { re_free (top->path->array); re_free (top->path); } re_free (top); } mctx->nsub_tops = 0; mctx->nbkref_ents = 0; } /* Free all the memory associated with MCTX. */ static void match_ctx_free (re_match_context_t *mctx) { /* First, free all the memory associated with MCTX->SUB_TOPS. */ match_ctx_clean (mctx); re_free (mctx->sub_tops); re_free (mctx->bkref_ents); } /* Add a new backreference entry to MCTX. Note that we assume that caller never call this function with duplicate entry, and call with STR_IDX which isn't smaller than any existing entry. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from, Idx to) { if (mctx->nbkref_ents >= mctx->abkref_ents) { struct re_backref_cache_entry* new_entry; new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry, mctx->abkref_ents * 2); if (BE (new_entry == NULL, 0)) { re_free (mctx->bkref_ents); return REG_ESPACE; } mctx->bkref_ents = new_entry; memset (mctx->bkref_ents + mctx->nbkref_ents, '\0', sizeof (struct re_backref_cache_entry) * mctx->abkref_ents); mctx->abkref_ents *= 2; } if (mctx->nbkref_ents > 0 && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx) mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1; mctx->bkref_ents[mctx->nbkref_ents].node = node; mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx; mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from; mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to; /* This is a cache that saves negative results of check_dst_limits_calc_pos. If bit N is clear, means that this entry won't epsilon-transition to an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression. If it is set, check_dst_limits_calc_pos_1 will recurse and try to find one such node. A backreference does not epsilon-transition unless it is empty, so set to all zeros if FROM != TO. */ mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map = (from == to ? -1 : 0); mctx->bkref_ents[mctx->nbkref_ents++].more = 0; if (mctx->max_mb_elem_len < to - from) mctx->max_mb_elem_len = to - from; return REG_NOERROR; } /* Return the first entry with the same str_idx, or -1 if none is found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) { Idx left, right, mid, last; last = right = mctx->nbkref_ents; for (left = 0; left < right;) { mid = (left + right) / 2; if (mctx->bkref_ents[mid].str_idx < str_idx) left = mid + 1; else right = mid; } if (left < last && mctx->bkref_ents[left].str_idx == str_idx) return left; else return -1; } /* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches at STR_IDX. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) { #ifdef DEBUG assert (mctx->sub_tops != NULL); assert (mctx->asub_tops > 0); #endif if (BE (mctx->nsub_tops == mctx->asub_tops, 0)) { Idx new_asub_tops = mctx->asub_tops * 2; re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops, re_sub_match_top_t *, new_asub_tops); if (BE (new_array == NULL, 0)) return REG_ESPACE; mctx->sub_tops = new_array; mctx->asub_tops = new_asub_tops; } mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t)); if (BE (mctx->sub_tops[mctx->nsub_tops] == NULL, 0)) return REG_ESPACE; mctx->sub_tops[mctx->nsub_tops]->node = node; mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx; return REG_NOERROR; } /* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP. */ static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) { re_sub_match_last_t *new_entry; if (BE (subtop->nlasts == subtop->alasts, 0)) { Idx new_alasts = 2 * subtop->alasts + 1; re_sub_match_last_t **new_array = re_realloc (subtop->lasts, re_sub_match_last_t *, new_alasts); if (BE (new_array == NULL, 0)) return NULL; subtop->lasts = new_array; subtop->alasts = new_alasts; } new_entry = calloc (1, sizeof (re_sub_match_last_t)); if (BE (new_entry != NULL, 1)) { subtop->lasts[subtop->nlasts] = new_entry; new_entry->node = node; new_entry->str_idx = str_idx; ++subtop->nlasts; } return new_entry; } static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx) { sctx->sifted_states = sifted_sts; sctx->limited_states = limited_sts; sctx->last_node = last_node; sctx->last_str_idx = last_str_idx; re_node_set_init_empty (&sctx->limits); } gnuastro-0.5/bootstrapped/lib/regex_internal.c0000644000175000017500000013532413217200021016563 00000000000000/* Extended regular expression matching and search library. Copyright (C) 2002-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ static void re_string_construct_common (const char *str, Idx len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa); static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash); static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash); /* Functions for string operation. */ /* This function allocate the buffers. It is necessary to call re_string_reconstruct before using the object. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { reg_errcode_t ret; Idx init_buf_len; /* Ensure at least one character fits into the buffers. */ if (init_len < dfa->mb_cur_max) init_len = dfa->mb_cur_max; init_buf_len = (len + 1 < init_len) ? len + 1: init_len; re_string_construct_common (str, len, pstr, trans, icase, dfa); ret = re_string_realloc_buffers (pstr, init_buf_len); if (BE (ret != REG_NOERROR, 0)) return ret; pstr->word_char = dfa->word_char; pstr->word_ops_used = dfa->word_ops_used; pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len; pstr->valid_raw_len = pstr->valid_len; return REG_NOERROR; } /* This function allocate the buffers, and initialize them. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_construct (re_string_t *pstr, const char *str, Idx len, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { reg_errcode_t ret; memset (pstr, '\0', sizeof (re_string_t)); re_string_construct_common (str, len, pstr, trans, icase, dfa); if (len > 0) { ret = re_string_realloc_buffers (pstr, len + 1); if (BE (ret != REG_NOERROR, 0)) return ret; } pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; if (icase) { #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) { while (1) { ret = build_wcs_upper_buffer (pstr); if (BE (ret != REG_NOERROR, 0)) return ret; if (pstr->valid_raw_len >= len) break; if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max) break; ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); if (BE (ret != REG_NOERROR, 0)) return ret; } } else #endif /* RE_ENABLE_I18N */ build_upper_buffer (pstr); } else { #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) build_wcs_buffer (pstr); else #endif /* RE_ENABLE_I18N */ { if (trans != NULL) re_string_translate_buffer (pstr); else { pstr->valid_len = pstr->bufs_len; pstr->valid_raw_len = pstr->bufs_len; } } } return REG_NOERROR; } /* Helper functions for re_string_allocate, and re_string_construct. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) { #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) { wint_t *new_wcs; /* Avoid overflow in realloc. */ const size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); if (BE (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_buf_len, 0)) return REG_ESPACE; new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); if (BE (new_wcs == NULL, 0)) return REG_ESPACE; pstr->wcs = new_wcs; if (pstr->offsets != NULL) { Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); if (BE (new_offsets == NULL, 0)) return REG_ESPACE; pstr->offsets = new_offsets; } } #endif /* RE_ENABLE_I18N */ if (pstr->mbs_allocated) { unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char, new_buf_len); if (BE (new_mbs == NULL, 0)) return REG_ESPACE; pstr->mbs = new_mbs; } pstr->bufs_len = new_buf_len; return REG_NOERROR; } static void re_string_construct_common (const char *str, Idx len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { pstr->raw_mbs = (const unsigned char *) str; pstr->len = len; pstr->raw_len = len; pstr->trans = trans; pstr->icase = icase; pstr->mbs_allocated = (trans != NULL || icase); pstr->mb_cur_max = dfa->mb_cur_max; pstr->is_utf8 = dfa->is_utf8; pstr->map_notascii = dfa->map_notascii; pstr->stop = pstr->len; pstr->raw_stop = pstr->stop; } #ifdef RE_ENABLE_I18N /* Build wide character buffer PSTR->WCS. If the byte sequence of the string are: (0), (1), (0), (1), Then wide character buffer will be: , WEOF , , WEOF , We use WEOF for padding, they indicate that the position isn't a first byte of a multibyte character. Note that this function assumes PSTR->VALID_LEN elements are already built and starts from PSTR->VALID_LEN. */ static void build_wcs_buffer (re_string_t *pstr) { #ifdef _LIBC unsigned char buf[MB_LEN_MAX]; assert (MB_LEN_MAX >= pstr->mb_cur_max); #else unsigned char buf[64]; #endif mbstate_t prev_st; Idx byte_idx, end_idx, remain_len; size_t mbclen; /* Build the buffers from pstr->valid_len to either pstr->len or pstr->bufs_len. */ end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (byte_idx = pstr->valid_len; byte_idx < end_idx;) { wchar_t wc; const char *p; remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; /* Apply the translation if we need. */ if (BE (pstr->trans != NULL, 0)) { int i, ch; for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) { ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i]; buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch]; } p = (const char *) buf; } else p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx; mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (BE (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len), 0)) { /* We treat these cases as a singlebyte character. */ mbclen = 1; wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; if (BE (pstr->trans != NULL, 0)) wc = pstr->trans[wc]; pstr->cur_state = prev_st; } else if (BE (mbclen == (size_t) -2, 0)) { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } /* Write wide character and padding. */ pstr->wcs[byte_idx++] = wc; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } pstr->valid_len = byte_idx; pstr->valid_raw_len = byte_idx; } /* Build wide character buffer PSTR->WCS like build_wcs_buffer, but for REG_ICASE. */ static reg_errcode_t __attribute_warn_unused_result__ build_wcs_upper_buffer (re_string_t *pstr) { mbstate_t prev_st; Idx src_idx, byte_idx, end_idx, remain_len; size_t mbclen; #ifdef _LIBC char buf[MB_LEN_MAX]; assert (MB_LEN_MAX >= pstr->mb_cur_max); #else char buf[64]; #endif byte_idx = pstr->valid_len; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; /* The following optimization assumes that ASCII characters can be mapped to wide characters with a simple cast. */ if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed) { while (byte_idx < end_idx) { wchar_t wc; if (isascii (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]) && mbsinit (&pstr->cur_state)) { /* In case of a singlebyte character. */ pstr->mbs[byte_idx] = toupper (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]); /* The next step uses the assumption that wchar_t is encoded ASCII-safe: all ASCII values can be converted like this. */ pstr->wcs[byte_idx] = (wchar_t) pstr->mbs[byte_idx]; ++byte_idx; continue; } remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc, ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx), remain_len, &pstr->cur_state); if (BE (mbclen < (size_t) -2, 1)) { wchar_t wcu = __towupper (wc); if (wcu != wc) { size_t mbcdlen; mbcdlen = __wcrtomb (buf, wcu, &prev_st); if (BE (mbclen == mbcdlen, 1)) memcpy (pstr->mbs + byte_idx, buf, mbclen); else { src_idx = byte_idx; goto offsets_needed; } } else memcpy (pstr->mbs + byte_idx, pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen); pstr->wcs[byte_idx++] = wcu; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } else if (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) { /* It is an invalid character, an incomplete character at the end of the string, or '\0'. Just use the byte. */ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; pstr->mbs[byte_idx] = ch; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (BE (mbclen == (size_t) -1, 0)) pstr->cur_state = prev_st; } else { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } } pstr->valid_len = byte_idx; pstr->valid_raw_len = byte_idx; return REG_NOERROR; } else for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;) { wchar_t wc; const char *p; offsets_needed: remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; if (BE (pstr->trans != NULL, 0)) { int i, ch; for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) { ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i]; buf[i] = pstr->trans[ch]; } p = (const char *) buf; } else p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx; mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (BE (mbclen < (size_t) -2, 1)) { wchar_t wcu = __towupper (wc); if (wcu != wc) { size_t mbcdlen; mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st); if (BE (mbclen == mbcdlen, 1)) memcpy (pstr->mbs + byte_idx, buf, mbclen); else if (mbcdlen != (size_t) -1) { size_t i; if (byte_idx + mbcdlen > pstr->bufs_len) { pstr->cur_state = prev_st; break; } if (pstr->offsets == NULL) { pstr->offsets = re_malloc (Idx, pstr->bufs_len); if (pstr->offsets == NULL) return REG_ESPACE; } if (!pstr->offsets_needed) { for (i = 0; i < (size_t) byte_idx; ++i) pstr->offsets[i] = i; pstr->offsets_needed = 1; } memcpy (pstr->mbs + byte_idx, buf, mbcdlen); pstr->wcs[byte_idx] = wcu; pstr->offsets[byte_idx] = src_idx; for (i = 1; i < mbcdlen; ++i) { pstr->offsets[byte_idx + i] = src_idx + (i < mbclen ? i : mbclen - 1); pstr->wcs[byte_idx + i] = WEOF; } pstr->len += mbcdlen - mbclen; if (pstr->raw_stop > src_idx) pstr->stop += mbcdlen - mbclen; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; byte_idx += mbcdlen; src_idx += mbclen; continue; } else memcpy (pstr->mbs + byte_idx, p, mbclen); } else memcpy (pstr->mbs + byte_idx, p, mbclen); if (BE (pstr->offsets_needed != 0, 0)) { size_t i; for (i = 0; i < mbclen; ++i) pstr->offsets[byte_idx + i] = src_idx + i; } src_idx += mbclen; pstr->wcs[byte_idx++] = wcu; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } else if (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) { /* It is an invalid character or '\0'. Just use the byte. */ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; if (BE (pstr->trans != NULL, 0)) ch = pstr->trans [ch]; pstr->mbs[byte_idx] = ch; if (BE (pstr->offsets_needed != 0, 0)) pstr->offsets[byte_idx] = src_idx; ++src_idx; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (BE (mbclen == (size_t) -1, 0)) pstr->cur_state = prev_st; } else { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } } pstr->valid_len = byte_idx; pstr->valid_raw_len = src_idx; return REG_NOERROR; } /* Skip characters until the index becomes greater than NEW_RAW_IDX. Return the index. */ static Idx re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc) { mbstate_t prev_st; Idx rawbuf_idx; size_t mbclen; wint_t wc = WEOF; /* Skip the characters which are not necessary to check. */ for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len; rawbuf_idx < new_raw_idx;) { wchar_t wc2; Idx remain_len = pstr->raw_len - rawbuf_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, remain_len, &pstr->cur_state); if (BE (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0, 0)) { /* We treat these cases as a single byte character. */ if (mbclen == 0 || remain_len == 0) wc = L'\0'; else wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx); mbclen = 1; pstr->cur_state = prev_st; } else wc = wc2; /* Then proceed the next character. */ rawbuf_idx += mbclen; } *last_wc = wc; return rawbuf_idx; } #endif /* RE_ENABLE_I18N */ /* Build the buffer PSTR->MBS, and apply the translation if we need. This function is used in case of REG_ICASE. */ static void build_upper_buffer (re_string_t *pstr) { Idx char_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; if (BE (pstr->trans != NULL, 0)) ch = pstr->trans[ch]; pstr->mbs[char_idx] = toupper (ch); } pstr->valid_len = char_idx; pstr->valid_raw_len = char_idx; } /* Apply TRANS to the buffer in PSTR. */ static void re_string_translate_buffer (re_string_t *pstr) { Idx buf_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx]; pstr->mbs[buf_idx] = pstr->trans[ch]; } pstr->valid_len = buf_idx; pstr->valid_raw_len = buf_idx; } /* This function re-construct the buffers. Concretely, convert to wide character in case of pstr->mb_cur_max > 1, convert to upper case in case of REG_ICASE, apply translation. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) { Idx offset; if (BE (pstr->raw_mbs_idx <= idx, 0)) offset = idx - pstr->raw_mbs_idx; else { /* Reset buffer. */ #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); #endif /* RE_ENABLE_I18N */ pstr->len = pstr->raw_len; pstr->stop = pstr->raw_stop; pstr->valid_len = 0; pstr->raw_mbs_idx = 0; pstr->valid_raw_len = 0; pstr->offsets_needed = 0; pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (!pstr->mbs_allocated) pstr->mbs = (unsigned char *) pstr->raw_mbs; offset = idx; } if (BE (offset != 0, 1)) { /* Should the already checked characters be kept? */ if (BE (offset < pstr->valid_raw_len, 1)) { /* Yes, move them to the front of the buffer. */ #ifdef RE_ENABLE_I18N if (BE (pstr->offsets_needed, 0)) { Idx low = 0, high = pstr->valid_len, mid; do { mid = (high + low) / 2; if (pstr->offsets[mid] > offset) high = mid; else if (pstr->offsets[mid] < offset) low = mid + 1; else break; } while (low < high); if (pstr->offsets[mid] < offset) ++mid; pstr->tip_context = re_string_context_at (pstr, mid - 1, eflags); /* This can be quite complicated, so handle specially only the common and easy case where the character with different length representation of lower and upper case is present at or after offset. */ if (pstr->valid_len > offset && mid == offset && pstr->offsets[mid] == offset) { memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; for (low = 0; low < pstr->valid_len; low++) pstr->offsets[low] = pstr->offsets[low + offset] - offset; } else { /* Otherwise, just find out how long the partial multibyte character at offset is and fill it with WEOF/255. */ pstr->len = pstr->raw_len - idx + offset; pstr->stop = pstr->raw_stop - idx + offset; pstr->offsets_needed = 0; while (mid > 0 && pstr->offsets[mid - 1] == offset) --mid; while (mid < pstr->valid_len) if (pstr->wcs[mid] != WEOF) break; else ++mid; if (mid == pstr->valid_len) pstr->valid_len = 0; else { pstr->valid_len = pstr->offsets[mid] - offset; if (pstr->valid_len) { for (low = 0; low < pstr->valid_len; ++low) pstr->wcs[low] = WEOF; memset (pstr->mbs, 255, pstr->valid_len); } } pstr->valid_raw_len = pstr->valid_len; } } else #endif { pstr->tip_context = re_string_context_at (pstr, offset - 1, eflags); #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); #endif /* RE_ENABLE_I18N */ if (BE (pstr->mbs_allocated, 0)) memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; #if defined DEBUG && DEBUG assert (pstr->valid_len > 0); #endif } } else { #ifdef RE_ENABLE_I18N /* No, skip all characters until IDX. */ Idx prev_valid_len = pstr->valid_len; if (BE (pstr->offsets_needed, 0)) { pstr->len = pstr->raw_len - idx + offset; pstr->stop = pstr->raw_stop - idx + offset; pstr->offsets_needed = 0; } #endif pstr->valid_len = 0; #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) { Idx wcs_idx; wint_t wc = WEOF; if (pstr->is_utf8) { const unsigned char *raw, *p, *end; /* Special case UTF-8. Multi-byte chars start with any byte other than 0x80 - 0xbf. */ raw = pstr->raw_mbs + pstr->raw_mbs_idx; end = raw + (offset - pstr->mb_cur_max); if (end < pstr->raw_mbs) end = pstr->raw_mbs; p = raw + offset - 1; #ifdef _LIBC /* We know the wchar_t encoding is UCS4, so for the simple case, ASCII characters, skip the conversion step. */ if (isascii (*p) && BE (pstr->trans == NULL, 1)) { memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); /* pstr->valid_len = 0; */ wc = (wchar_t) *p; } else #endif for (; p >= end; --p) if ((*p & 0xc0) != 0x80) { mbstate_t cur_state; wchar_t wc2; Idx mlen = raw + pstr->len - p; unsigned char buf[6]; size_t mbclen; const unsigned char *pp = p; if (BE (pstr->trans != NULL, 0)) { int i = mlen < 6 ? mlen : 6; while (--i >= 0) buf[i] = pstr->trans[p[i]]; pp = buf; } /* XXX Don't use mbrtowc, we know which conversion to use (UTF-8 -> UCS4). */ memset (&cur_state, 0, sizeof (cur_state)); mbclen = __mbrtowc (&wc2, (const char *) pp, mlen, &cur_state); if (raw + offset - p <= mbclen && mbclen < (size_t) -2) { memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); pstr->valid_len = mbclen - (raw + offset - p); wc = wc2; } break; } } if (wc == WEOF) pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx; if (wc == WEOF) pstr->tip_context = re_string_context_at (pstr, prev_valid_len - 1, eflags); else pstr->tip_context = ((BE (pstr->word_ops_used != 0, 0) && IS_WIDE_WORD_CHAR (wc)) ? CONTEXT_WORD : ((IS_WIDE_NEWLINE (wc) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); if (BE (pstr->valid_len, 0)) { for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx) pstr->wcs[wcs_idx] = WEOF; if (pstr->mbs_allocated) memset (pstr->mbs, 255, pstr->valid_len); } pstr->valid_raw_len = pstr->valid_len; } else #endif /* RE_ENABLE_I18N */ { int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1]; pstr->valid_raw_len = 0; if (pstr->trans) c = pstr->trans[c]; pstr->tip_context = (bitset_contain (pstr->word_char, c) ? CONTEXT_WORD : ((IS_NEWLINE (c) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); } } if (!BE (pstr->mbs_allocated, 0)) pstr->mbs += offset; } pstr->raw_mbs_idx = idx; pstr->len -= offset; pstr->stop -= offset; /* Then build the buffers. */ #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1) { if (pstr->icase) { reg_errcode_t ret = build_wcs_upper_buffer (pstr); if (BE (ret != REG_NOERROR, 0)) return ret; } else build_wcs_buffer (pstr); } else #endif /* RE_ENABLE_I18N */ if (BE (pstr->mbs_allocated, 0)) { if (pstr->icase) build_upper_buffer (pstr); else if (pstr->trans != NULL) re_string_translate_buffer (pstr); } else pstr->valid_len = pstr->len; pstr->cur_idx = 0; return REG_NOERROR; } static unsigned char __attribute__ ((pure)) re_string_peek_byte_case (const re_string_t *pstr, Idx idx) { int ch; Idx off; /* Handle the common (easiest) cases first. */ if (BE (!pstr->mbs_allocated, 1)) return re_string_peek_byte (pstr, idx); #ifdef RE_ENABLE_I18N if (pstr->mb_cur_max > 1 && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx)) return re_string_peek_byte (pstr, idx); #endif off = pstr->cur_idx + idx; #ifdef RE_ENABLE_I18N if (pstr->offsets_needed) off = pstr->offsets[off]; #endif ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; #ifdef RE_ENABLE_I18N /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I this function returns CAPITAL LETTER I instead of first byte of DOTLESS SMALL LETTER I. The latter would confuse the parser, since peek_byte_case doesn't advance cur_idx in any way. */ if (pstr->offsets_needed && !isascii (ch)) return re_string_peek_byte (pstr, idx); #endif return ch; } static unsigned char re_string_fetch_byte_case (re_string_t *pstr) { if (BE (!pstr->mbs_allocated, 1)) return re_string_fetch_byte (pstr); #ifdef RE_ENABLE_I18N if (pstr->offsets_needed) { Idx off; int ch; /* For tr_TR.UTF-8 [[:islower:]] there is [[: CAPITAL LETTER I WITH DOT lower:]] in mbs. Skip in that case the whole multi-byte character and return the original letter. On the other side, with [[: DOTLESS SMALL LETTER I return [[:I, as doing anything else would complicate things too much. */ if (!re_string_first_byte (pstr, pstr->cur_idx)) return re_string_fetch_byte (pstr); off = pstr->offsets[pstr->cur_idx]; ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; if (! isascii (ch)) return re_string_fetch_byte (pstr); re_string_skip_bytes (pstr, re_string_char_size_at (pstr, pstr->cur_idx)); return ch; } #endif return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++]; } static void re_string_destruct (re_string_t *pstr) { #ifdef RE_ENABLE_I18N re_free (pstr->wcs); re_free (pstr->offsets); #endif /* RE_ENABLE_I18N */ if (pstr->mbs_allocated) re_free (pstr->mbs); } /* Return the context at IDX in INPUT. */ static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) { int c; if (BE (idx < 0, 0)) /* In this case, we use the value stored in input->tip_context, since we can't know the character in input->mbs[-1] here. */ return input->tip_context; if (BE (idx == input->len, 0)) return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF : CONTEXT_NEWLINE | CONTEXT_ENDBUF); #ifdef RE_ENABLE_I18N if (input->mb_cur_max > 1) { wint_t wc; Idx wc_idx = idx; while(input->wcs[wc_idx] == WEOF) { #if defined DEBUG && DEBUG /* It must not happen. */ assert (wc_idx >= 0); #endif --wc_idx; if (wc_idx < 0) return input->tip_context; } wc = input->wcs[wc_idx]; if (BE (input->word_ops_used != 0, 0) && IS_WIDE_WORD_CHAR (wc)) return CONTEXT_WORD; return (IS_WIDE_NEWLINE (wc) && input->newline_anchor ? CONTEXT_NEWLINE : 0); } else #endif { c = re_string_byte_at (input, idx); if (bitset_contain (input->word_char, c)) return CONTEXT_WORD; return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0; } } /* Functions for set operation. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_alloc (re_node_set *set, Idx size) { set->alloc = size; set->nelem = 0; set->elems = re_malloc (Idx, size); if (BE (set->elems == NULL, 0) && (MALLOC_0_IS_NONNULL || size != 0)) return REG_ESPACE; return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_1 (re_node_set *set, Idx elem) { set->alloc = 1; set->nelem = 1; set->elems = re_malloc (Idx, 1); if (BE (set->elems == NULL, 0)) { set->alloc = set->nelem = 0; return REG_ESPACE; } set->elems[0] = elem; return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2) { set->alloc = 2; set->elems = re_malloc (Idx, 2); if (BE (set->elems == NULL, 0)) return REG_ESPACE; if (elem1 == elem2) { set->nelem = 1; set->elems[0] = elem1; } else { set->nelem = 2; if (elem1 < elem2) { set->elems[0] = elem1; set->elems[1] = elem2; } else { set->elems[0] = elem2; set->elems[1] = elem1; } } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_copy (re_node_set *dest, const re_node_set *src) { dest->nelem = src->nelem; if (src->nelem > 0) { dest->alloc = dest->nelem; dest->elems = re_malloc (Idx, dest->alloc); if (BE (dest->elems == NULL, 0)) { dest->alloc = dest->nelem = 0; return REG_ESPACE; } memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); } else re_node_set_init_empty (dest); return REG_NOERROR; } /* Calculate the intersection of the sets SRC1 and SRC2. And merge it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. Note: We assume dest->elems is NULL, when dest->alloc is 0. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, const re_node_set *src2) { Idx i1, i2, is, id, delta, sbase; if (src1->nelem == 0 || src2->nelem == 0) return REG_NOERROR; /* We need dest->nelem + 2 * elems_in_intersection; this is a conservative estimate. */ if (src1->nelem + src2->nelem + dest->nelem > dest->alloc) { Idx new_alloc = src1->nelem + src2->nelem + dest->alloc; Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc); if (BE (new_elems == NULL, 0)) return REG_ESPACE; dest->elems = new_elems; dest->alloc = new_alloc; } /* Find the items in the intersection of SRC1 and SRC2, and copy into the top of DEST those that are not already in DEST itself. */ sbase = dest->nelem + src1->nelem + src2->nelem; i1 = src1->nelem - 1; i2 = src2->nelem - 1; id = dest->nelem - 1; for (;;) { if (src1->elems[i1] == src2->elems[i2]) { /* Try to find the item in DEST. Maybe we could binary search? */ while (id >= 0 && dest->elems[id] > src1->elems[i1]) --id; if (id < 0 || dest->elems[id] != src1->elems[i1]) dest->elems[--sbase] = src1->elems[i1]; if (--i1 < 0 || --i2 < 0) break; } /* Lower the highest of the two items. */ else if (src1->elems[i1] < src2->elems[i2]) { if (--i2 < 0) break; } else { if (--i1 < 0) break; } } id = dest->nelem - 1; is = dest->nelem + src1->nelem + src2->nelem - 1; delta = is - sbase + 1; /* Now copy. When DELTA becomes zero, the remaining DEST elements are already in place; this is more or less the same loop that is in re_node_set_merge. */ dest->nelem += delta; if (delta > 0 && id >= 0) for (;;) { if (dest->elems[is] > dest->elems[id]) { /* Copy from the top. */ dest->elems[id + delta--] = dest->elems[is--]; if (delta == 0) break; } else { /* Slide from the bottom. */ dest->elems[id + delta] = dest->elems[id]; if (--id < 0) break; } } /* Copy remaining SRC elements. */ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); return REG_NOERROR; } /* Calculate the union set of the sets SRC1 and SRC2. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_union (re_node_set *dest, const re_node_set *src1, const re_node_set *src2) { Idx i1, i2, id; if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0) { dest->alloc = src1->nelem + src2->nelem; dest->elems = re_malloc (Idx, dest->alloc); if (BE (dest->elems == NULL, 0)) return REG_ESPACE; } else { if (src1 != NULL && src1->nelem > 0) return re_node_set_init_copy (dest, src1); else if (src2 != NULL && src2->nelem > 0) return re_node_set_init_copy (dest, src2); else re_node_set_init_empty (dest); return REG_NOERROR; } for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) { if (src1->elems[i1] > src2->elems[i2]) { dest->elems[id++] = src2->elems[i2++]; continue; } if (src1->elems[i1] == src2->elems[i2]) ++i2; dest->elems[id++] = src1->elems[i1++]; } if (i1 < src1->nelem) { memcpy (dest->elems + id, src1->elems + i1, (src1->nelem - i1) * sizeof (Idx)); id += src1->nelem - i1; } else if (i2 < src2->nelem) { memcpy (dest->elems + id, src2->elems + i2, (src2->nelem - i2) * sizeof (Idx)); id += src2->nelem - i2; } dest->nelem = id; return REG_NOERROR; } /* Calculate the union set of the sets DEST and SRC. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_merge (re_node_set *dest, const re_node_set *src) { Idx is, id, sbase, delta; if (src == NULL || src->nelem == 0) return REG_NOERROR; if (dest->alloc < 2 * src->nelem + dest->nelem) { Idx new_alloc = 2 * (src->nelem + dest->alloc); Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc); if (BE (new_buffer == NULL, 0)) return REG_ESPACE; dest->elems = new_buffer; dest->alloc = new_alloc; } if (BE (dest->nelem == 0, 0)) { dest->nelem = src->nelem; memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); return REG_NOERROR; } /* Copy into the top of DEST the items of SRC that are not found in DEST. Maybe we could binary search in DEST? */ for (sbase = dest->nelem + 2 * src->nelem, is = src->nelem - 1, id = dest->nelem - 1; is >= 0 && id >= 0; ) { if (dest->elems[id] == src->elems[is]) is--, id--; else if (dest->elems[id] < src->elems[is]) dest->elems[--sbase] = src->elems[is--]; else /* if (dest->elems[id] > src->elems[is]) */ --id; } if (is >= 0) { /* If DEST is exhausted, the remaining items of SRC must be unique. */ sbase -= is + 1; memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx)); } id = dest->nelem - 1; is = dest->nelem + 2 * src->nelem - 1; delta = is - sbase + 1; if (delta == 0) return REG_NOERROR; /* Now copy. When DELTA becomes zero, the remaining DEST elements are already in place. */ dest->nelem += delta; for (;;) { if (dest->elems[is] > dest->elems[id]) { /* Copy from the top. */ dest->elems[id + delta--] = dest->elems[is--]; if (delta == 0) break; } else { /* Slide from the bottom. */ dest->elems[id + delta] = dest->elems[id]; if (--id < 0) { /* Copy remaining SRC elements. */ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); break; } } } return REG_NOERROR; } /* Insert the new element ELEM to the re_node_set* SET. SET should not already have ELEM. Return true if successful. */ static bool __attribute_warn_unused_result__ re_node_set_insert (re_node_set *set, Idx elem) { Idx idx; /* In case the set is empty. */ if (set->alloc == 0) return BE (re_node_set_init_1 (set, elem) == REG_NOERROR, 1); if (BE (set->nelem, 0) == 0) { /* We already guaranteed above that set->alloc != 0. */ set->elems[0] = elem; ++set->nelem; return true; } /* Realloc if we need. */ if (set->alloc == set->nelem) { Idx *new_elems; set->alloc = set->alloc * 2; new_elems = re_realloc (set->elems, Idx, set->alloc); if (BE (new_elems == NULL, 0)) return false; set->elems = new_elems; } /* Move the elements which follows the new element. Test the first element separately to skip a check in the inner loop. */ if (elem < set->elems[0]) { idx = 0; for (idx = set->nelem; idx > 0; idx--) set->elems[idx] = set->elems[idx - 1]; } else { for (idx = set->nelem; set->elems[idx - 1] > elem; idx--) set->elems[idx] = set->elems[idx - 1]; } /* Insert the new element. */ set->elems[idx] = elem; ++set->nelem; return true; } /* Insert the new element ELEM to the re_node_set* SET. SET should not already have any element greater than or equal to ELEM. Return true if successful. */ static bool __attribute_warn_unused_result__ re_node_set_insert_last (re_node_set *set, Idx elem) { /* Realloc if we need. */ if (set->alloc == set->nelem) { Idx *new_elems; set->alloc = (set->alloc + 1) * 2; new_elems = re_realloc (set->elems, Idx, set->alloc); if (BE (new_elems == NULL, 0)) return false; set->elems = new_elems; } /* Insert the new element. */ set->elems[set->nelem++] = elem; return true; } /* Compare two node sets SET1 and SET2. Return true if SET1 and SET2 are equivalent. */ static bool __attribute__ ((pure)) re_node_set_compare (const re_node_set *set1, const re_node_set *set2) { Idx i; if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem) return false; for (i = set1->nelem ; --i >= 0 ; ) if (set1->elems[i] != set2->elems[i]) return false; return true; } /* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */ static Idx __attribute__ ((pure)) re_node_set_contains (const re_node_set *set, Idx elem) { __re_size_t idx, right, mid; if (set->nelem <= 0) return 0; /* Binary search the element. */ idx = 0; right = set->nelem - 1; while (idx < right) { mid = (idx + right) / 2; if (set->elems[mid] < elem) idx = mid + 1; else right = mid; } return set->elems[idx] == elem ? idx + 1 : 0; } static void re_node_set_remove_at (re_node_set *set, Idx idx) { if (idx < 0 || idx >= set->nelem) return; --set->nelem; for (; idx < set->nelem; idx++) set->elems[idx] = set->elems[idx + 1]; } /* Add the token TOKEN to dfa->nodes, and return the index of the token. Or return -1 if an error occurred. */ static Idx re_dfa_add_node (re_dfa_t *dfa, re_token_t token) { if (BE (dfa->nodes_len >= dfa->nodes_alloc, 0)) { size_t new_nodes_alloc = dfa->nodes_alloc * 2; Idx *new_nexts, *new_indices; re_node_set *new_edests, *new_eclosures; re_token_t *new_nodes; /* Avoid overflows in realloc. */ const size_t max_object_size = MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), sizeof (Idx))); if (BE (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_nodes_alloc, 0)) return -1; new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); if (BE (new_nodes == NULL, 0)) return -1; dfa->nodes = new_nodes; new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc); new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc); new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc); new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc); if (BE (new_nexts == NULL || new_indices == NULL || new_edests == NULL || new_eclosures == NULL, 0)) { re_free (new_nexts); re_free (new_indices); re_free (new_edests); re_free (new_eclosures); return -1; } dfa->nexts = new_nexts; dfa->org_indices = new_indices; dfa->edests = new_edests; dfa->eclosures = new_eclosures; dfa->nodes_alloc = new_nodes_alloc; } dfa->nodes[dfa->nodes_len] = token; dfa->nodes[dfa->nodes_len].constraint = 0; #ifdef RE_ENABLE_I18N dfa->nodes[dfa->nodes_len].accept_mb = ((token.type == OP_PERIOD && dfa->mb_cur_max > 1) || token.type == COMPLEX_BRACKET); #endif dfa->nexts[dfa->nodes_len] = -1; re_node_set_init_empty (dfa->edests + dfa->nodes_len); re_node_set_init_empty (dfa->eclosures + dfa->nodes_len); return dfa->nodes_len++; } static re_hashval_t calc_state_hash (const re_node_set *nodes, unsigned int context) { re_hashval_t hash = nodes->nelem + context; Idx i; for (i = 0 ; i < nodes->nelem ; i++) hash += nodes->elems[i]; return hash; } /* Search for the state whose node_set is equivalent to NODES. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t * __attribute_warn_unused_result__ re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa, const re_node_set *nodes) { re_hashval_t hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; Idx i; #if defined GCC_LINT || defined lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (BE (nodes->nelem == 0, 0)) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, 0); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (hash != state->hash) continue; if (re_node_set_compare (&state->nodes, nodes)) return state; } /* There are no appropriate state in the dfa, create the new one. */ new_state = create_ci_newstate (dfa, nodes, hash); if (BE (new_state == NULL, 0)) *err = REG_ESPACE; return new_state; } /* Search for the state whose node_set is equivalent to NODES and whose context is equivalent to CONTEXT. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t * __attribute_warn_unused_result__ re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context) { re_hashval_t hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; Idx i; #if defined GCC_LINT || defined lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (nodes->nelem == 0) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, context); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (state->hash == hash && state->context == context && re_node_set_compare (state->entrance_nodes, nodes)) return state; } /* There are no appropriate state in 'dfa', create the new one. */ new_state = create_cd_newstate (dfa, nodes, context, hash); if (BE (new_state == NULL, 0)) *err = REG_ESPACE; return new_state; } /* Finish initialization of the new state NEWSTATE, and using its hash value HASH put in the appropriate bucket of DFA's state table. Return value indicates the error code if failed. */ static reg_errcode_t __attribute_warn_unused_result__ register_state (const re_dfa_t *dfa, re_dfastate_t *newstate, re_hashval_t hash) { struct re_state_table_entry *spot; reg_errcode_t err; Idx i; newstate->hash = hash; err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem); if (BE (err != REG_NOERROR, 0)) return REG_ESPACE; for (i = 0; i < newstate->nodes.nelem; i++) { Idx elem = newstate->nodes.elems[i]; if (!IS_EPSILON_NODE (dfa->nodes[elem].type)) if (! re_node_set_insert_last (&newstate->non_eps_nodes, elem)) return REG_ESPACE; } spot = dfa->state_table + (hash & dfa->state_hash_mask); if (BE (spot->alloc <= spot->num, 0)) { Idx new_alloc = 2 * spot->num + 2; re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, new_alloc); if (BE (new_array == NULL, 0)) return REG_ESPACE; spot->array = new_array; spot->alloc = new_alloc; } spot->array[spot->num++] = newstate; return REG_NOERROR; } static void free_state (re_dfastate_t *state) { re_node_set_free (&state->non_eps_nodes); re_node_set_free (&state->inveclosure); if (state->entrance_nodes != &state->nodes) { re_node_set_free (state->entrance_nodes); re_free (state->entrance_nodes); } re_node_set_free (&state->nodes); re_free (state->word_trtable); re_free (state->trtable); re_free (state); } /* Create the new state which is independent of contexts. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * __attribute_warn_unused_result__ create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash) { Idx i; reg_errcode_t err; re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (BE (newstate == NULL, 0)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (BE (err != REG_NOERROR, 0)) { re_free (newstate); return NULL; } newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; if (type == CHARACTER && !node->constraint) continue; #ifdef RE_ENABLE_I18N newstate->accept_mb |= node->accept_mb; #endif /* RE_ENABLE_I18N */ /* If the state has the halt node, the state is a halt state. */ if (type == END_OF_RE) newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; else if (type == ANCHOR || node->constraint) newstate->has_constraint = 1; } err = register_state (dfa, newstate, hash); if (BE (err != REG_NOERROR, 0)) { free_state (newstate); newstate = NULL; } return newstate; } /* Create the new state which is depend on the context CONTEXT. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * __attribute_warn_unused_result__ create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash) { Idx i, nctx_nodes = 0; reg_errcode_t err; re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (BE (newstate == NULL, 0)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (BE (err != REG_NOERROR, 0)) { re_free (newstate); return NULL; } newstate->context = context; newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; unsigned int constraint = node->constraint; if (type == CHARACTER && !constraint) continue; #ifdef RE_ENABLE_I18N newstate->accept_mb |= node->accept_mb; #endif /* RE_ENABLE_I18N */ /* If the state has the halt node, the state is a halt state. */ if (type == END_OF_RE) newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; if (constraint) { if (newstate->entrance_nodes == &newstate->nodes) { newstate->entrance_nodes = re_malloc (re_node_set, 1); if (BE (newstate->entrance_nodes == NULL, 0)) { free_state (newstate); return NULL; } if (re_node_set_init_copy (newstate->entrance_nodes, nodes) != REG_NOERROR) return NULL; nctx_nodes = 0; newstate->has_constraint = 1; } if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context)) { re_node_set_remove_at (&newstate->nodes, i - nctx_nodes); ++nctx_nodes; } } } err = register_state (dfa, newstate, hash); if (BE (err != REG_NOERROR, 0)) { free_state (newstate); newstate = NULL; } return newstate; } gnuastro-0.5/bootstrapped/lib/regex.c0000644000175000017500000000615413217200021014665 00000000000000/* Extended regular expression matching and search library. Copyright (C) 2002-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _LIBC # include # if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" # endif # if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wold-style-definition" # pragma GCC diagnostic ignored "-Wtype-limits" # endif #endif /* Make sure no one compiles this code with a C++ compiler. */ #if defined __cplusplus && defined _LIBC # error "This is C code, use a C compiler" #endif #ifdef _LIBC /* We have to keep the namespace clean. */ # define regfree(preg) __regfree (preg) # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) # define regerror(errcode, preg, errbuf, errbuf_size) \ __regerror(errcode, preg, errbuf, errbuf_size) # define re_set_registers(bu, re, nu, st, en) \ __re_set_registers (bu, re, nu, st, en) # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) # define re_match(bufp, string, size, pos, regs) \ __re_match (bufp, string, size, pos, regs) # define re_search(bufp, string, size, startpos, range, regs) \ __re_search (bufp, string, size, startpos, range, regs) # define re_compile_pattern(pattern, length, bufp) \ __re_compile_pattern (pattern, length, bufp) # define re_set_syntax(syntax) __re_set_syntax (syntax) # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) # include "../locale/localeinfo.h" #endif /* On some systems, limits.h sets RE_DUP_MAX to a lower value than GNU regex allows. Include it before , which correctly #undefs RE_DUP_MAX and sets it to the right value. */ #include #include #include "regex_internal.h" #include "regex_internal.c" #include "regcomp.c" #include "regexec.c" /* Binary backward compatibility. */ #if _LIBC # include # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3) link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.") int re_max_failures = 2000; # endif #endif gnuastro-0.5/bootstrapped/lib/regcomp.c0000644000175000017500000033554213217200021015215 00000000000000/* Extended regular expression matching and search library. Copyright (C) 2002-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifdef _LIBC # include #endif static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax); static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap); static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len); #ifdef RE_ENABLE_I18N static void free_charset (re_charset_t *cset); #endif /* RE_ENABLE_I18N */ static void free_workarea_compile (regex_t *preg); static reg_errcode_t create_initial_state (re_dfa_t *dfa); #ifdef RE_ENABLE_I18N static void optimize_utf8 (re_dfa_t *dfa); #endif static reg_errcode_t analyze (regex_t *preg); static reg_errcode_t preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra); static reg_errcode_t postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra); static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node); static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node); static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node); static reg_errcode_t calc_first (void *extra, bin_tree_t *node); static reg_errcode_t calc_next (void *extra, bin_tree_t *node); static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node); static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint); static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, unsigned int constraint); static reg_errcode_t calc_eclosure (re_dfa_t *dfa); static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root); static reg_errcode_t calc_inveclosure (re_dfa_t *dfa); static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax); static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax); static bin_tree_t *parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax, bool accept_hyphen); static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token); #ifdef RE_ENABLE_I18N static reg_errcode_t build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, Idx *equiv_class_alloc, const unsigned char *name); static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, re_charset_t *mbcset, Idx *char_class_alloc, const char *class_name, reg_syntax_t syntax); #else /* not RE_ENABLE_I18N */ static reg_errcode_t build_equiv_class (bitset_t sbcset, const unsigned char *name); static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, const char *class_name, reg_syntax_t syntax); #endif /* not RE_ENABLE_I18N */ static bin_tree_t *build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, const char *class_name, const char *extra, bool non_match, reg_errcode_t *err); static bin_tree_t *create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, re_token_type_t type); static bin_tree_t *create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, const re_token_t *token); static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa); static void free_token (re_token_t *node); static reg_errcode_t free_tree (void *extra, bin_tree_t *node); static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node); /* This table gives an error message for each of the error codes listed in regex.h. Obviously the order here has to be same as there. POSIX doesn't require that we do anything for REG_NOERROR, but why not be nice? */ static const char __re_error_msgid[] = { #define REG_NOERROR_IDX 0 gettext_noop ("Success") /* REG_NOERROR */ "\0" #define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") gettext_noop ("No match") /* REG_NOMATCH */ "\0" #define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") gettext_noop ("Invalid regular expression") /* REG_BADPAT */ "\0" #define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ "\0" #define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") gettext_noop ("Invalid character class name") /* REG_ECTYPE */ "\0" #define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") gettext_noop ("Trailing backslash") /* REG_EESCAPE */ "\0" #define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") gettext_noop ("Invalid back reference") /* REG_ESUBREG */ "\0" #define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") gettext_noop ("Unmatched [, [^, [:, [., or [=") /* REG_EBRACK */ "\0" #define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [, [^, [:, [., or [=") gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ "\0" #define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") gettext_noop ("Unmatched \\{") /* REG_EBRACE */ "\0" #define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ "\0" #define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") gettext_noop ("Invalid range end") /* REG_ERANGE */ "\0" #define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") gettext_noop ("Memory exhausted") /* REG_ESPACE */ "\0" #define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ "\0" #define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") gettext_noop ("Premature end of regular expression") /* REG_EEND */ "\0" #define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") gettext_noop ("Regular expression too big") /* REG_ESIZE */ "\0" #define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ }; static const size_t __re_error_msgid_idx[] = { REG_NOERROR_IDX, REG_NOMATCH_IDX, REG_BADPAT_IDX, REG_ECOLLATE_IDX, REG_ECTYPE_IDX, REG_EESCAPE_IDX, REG_ESUBREG_IDX, REG_EBRACK_IDX, REG_EPAREN_IDX, REG_EBRACE_IDX, REG_BADBR_IDX, REG_ERANGE_IDX, REG_ESPACE_IDX, REG_BADRPT_IDX, REG_EEND_IDX, REG_ESIZE_IDX, REG_ERPAREN_IDX }; /* Entry points for GNU code. */ /* re_compile_pattern is the GNU regular expression compiler: it compiles PATTERN (of length LENGTH) and puts the result in BUFP. Returns 0 if the pattern was valid, otherwise an error string. Assumes the 'allocated' (and perhaps 'buffer') and 'translate' fields are set in BUFP on entry. */ const char * re_compile_pattern (const char *pattern, size_t length, struct re_pattern_buffer *bufp) { reg_errcode_t ret; /* And GNU code determines whether or not to get register information by passing null for the REGS argument to re_match, etc., not by setting no_sub, unless RE_NO_SUB is set. */ bufp->no_sub = !!(re_syntax_options & RE_NO_SUB); /* Match anchors at newline. */ bufp->newline_anchor = 1; ret = re_compile_internal (bufp, pattern, length, re_syntax_options); if (!ret) return NULL; return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } #ifdef _LIBC weak_alias (__re_compile_pattern, re_compile_pattern) #endif /* Set by 're_set_syntax' to the current regexp syntax to recognize. Can also be assigned to arbitrarily: each pattern buffer stores its own syntax, so it can be changed between regex compilations. */ /* This has no initializer because initialized variables in Emacs become read-only after dumping. */ reg_syntax_t re_syntax_options; /* Specify the precise syntax of regexps for compilation. This provides for compatibility for various utilities which historically have different, incompatible syntaxes. The argument SYNTAX is a bit mask comprised of the various bits defined in regex.h. We return the old syntax. */ reg_syntax_t re_set_syntax (reg_syntax_t syntax) { reg_syntax_t ret = re_syntax_options; re_syntax_options = syntax; return ret; } #ifdef _LIBC weak_alias (__re_set_syntax, re_set_syntax) #endif int re_compile_fastmap (struct re_pattern_buffer *bufp) { re_dfa_t *dfa = bufp->buffer; char *fastmap = bufp->fastmap; memset (fastmap, '\0', sizeof (char) * SBC_MAX); re_compile_fastmap_iter (bufp, dfa->init_state, fastmap); if (dfa->init_state != dfa->init_state_word) re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap); if (dfa->init_state != dfa->init_state_nl) re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap); if (dfa->init_state != dfa->init_state_begbuf) re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap); bufp->fastmap_accurate = 1; return 0; } #ifdef _LIBC weak_alias (__re_compile_fastmap, re_compile_fastmap) #endif static inline void __attribute__ ((always_inline)) re_set_fastmap (char *fastmap, bool icase, int ch) { fastmap[ch] = 1; if (icase) fastmap[tolower (ch)] = 1; } /* Helper function for re_compile_fastmap. Compile fastmap for the initial_state INIT_STATE. */ static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap) { re_dfa_t *dfa = bufp->buffer; Idx node_cnt; bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE)); for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt) { Idx node = init_state->nodes.elems[node_cnt]; re_token_type_t type = dfa->nodes[node].type; if (type == CHARACTER) { re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c); #ifdef RE_ENABLE_I18N if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) { unsigned char buf[MB_LEN_MAX]; unsigned char *p; wchar_t wc; mbstate_t state; p = buf; *p++ = dfa->nodes[node].opr.c; while (++node < dfa->nodes_len && dfa->nodes[node].type == CHARACTER && dfa->nodes[node].mb_partial) *p++ = dfa->nodes[node].opr.c; memset (&state, '\0', sizeof (state)); if (__mbrtowc (&wc, (const char *) buf, p - buf, &state) == p - buf && (__wcrtomb ((char *) buf, __towlower (wc), &state) != (size_t) -1)) re_set_fastmap (fastmap, false, buf[0]); } #endif } else if (type == SIMPLE_BRACKET) { int i, ch; for (i = 0, ch = 0; i < BITSET_WORDS; ++i) { int j; bitset_word_t w = dfa->nodes[node].opr.sbcset[i]; for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) if (w & ((bitset_word_t) 1 << j)) re_set_fastmap (fastmap, icase, ch); } } #ifdef RE_ENABLE_I18N else if (type == COMPLEX_BRACKET) { re_charset_t *cset = dfa->nodes[node].opr.mbcset; Idx i; # ifdef _LIBC /* See if we have to try all bytes which start multiple collation elements. e.g. In da_DK, we want to catch 'a' since "aa" is a valid collation element, and don't catch 'b' since 'b' is the only collation element which starts from 'b' (and it is caught by SIMPLE_BRACKET). */ if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0 && (cset->ncoll_syms || cset->nranges)) { const int32_t *table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); for (i = 0; i < SBC_MAX; ++i) if (table[i] < 0) re_set_fastmap (fastmap, icase, i); } # endif /* _LIBC */ /* See if we have to start the match at all multibyte characters, i.e. where we would not find an invalid sequence. This only applies to multibyte character sets; for single byte character sets, the SIMPLE_BRACKET again suffices. */ if (dfa->mb_cur_max > 1 && (cset->nchar_classes || cset->non_match || cset->nranges # ifdef _LIBC || cset->nequiv_classes # endif /* _LIBC */ )) { unsigned char c = 0; do { mbstate_t mbs; memset (&mbs, 0, sizeof (mbs)); if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2) re_set_fastmap (fastmap, false, (int) c); } while (++c != 0); } else { /* ... Else catch all bytes which can start the mbchars. */ for (i = 0; i < cset->nmbchars; ++i) { char buf[256]; mbstate_t state; memset (&state, '\0', sizeof (state)); if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1) re_set_fastmap (fastmap, icase, *(unsigned char *) buf); if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) { if (__wcrtomb (buf, __towlower (cset->mbchars[i]), &state) != (size_t) -1) re_set_fastmap (fastmap, false, *(unsigned char *) buf); } } } } #endif /* RE_ENABLE_I18N */ else if (type == OP_PERIOD #ifdef RE_ENABLE_I18N || type == OP_UTF8_PERIOD #endif /* RE_ENABLE_I18N */ || type == END_OF_RE) { memset (fastmap, '\1', sizeof (char) * SBC_MAX); if (type == END_OF_RE) bufp->can_be_null = 1; return; } } } /* Entry point for POSIX code. */ /* regcomp takes a regular expression as a string and compiles it. PREG is a regex_t *. We do not expect any fields to be initialized, since POSIX says we shouldn't. Thus, we set 'buffer' to the compiled pattern; 'used' to the length of the compiled pattern; 'syntax' to RE_SYNTAX_POSIX_EXTENDED if the REG_EXTENDED bit in CFLAGS is set; otherwise, to RE_SYNTAX_POSIX_BASIC; 'newline_anchor' to REG_NEWLINE being set in CFLAGS; 'fastmap' to an allocated space for the fastmap; 'fastmap_accurate' to zero; 're_nsub' to the number of subexpressions in PATTERN. PATTERN is the address of the pattern string. CFLAGS is a series of bits which affect compilation. If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we use POSIX basic syntax. If REG_NEWLINE is set, then . and [^...] don't match newline. Also, regexec will try a match beginning after every newline. If REG_ICASE is set, then we considers upper- and lowercase versions of letters to be equivalent when matching. If REG_NOSUB is set, then when PREG is passed to regexec, that routine will report only success or failure, and nothing about the registers. It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for the return codes and their meanings.) */ int regcomp (regex_t *_Restrict_ preg, const char *_Restrict_ pattern, int cflags) { reg_errcode_t ret; reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC); preg->buffer = NULL; preg->allocated = 0; preg->used = 0; /* Try to allocate space for the fastmap. */ preg->fastmap = re_malloc (char, SBC_MAX); if (BE (preg->fastmap == NULL, 0)) return REG_ESPACE; syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0; /* If REG_NEWLINE is set, newlines are treated differently. */ if (cflags & REG_NEWLINE) { /* REG_NEWLINE implies neither . nor [^...] match newline. */ syntax &= ~RE_DOT_NEWLINE; syntax |= RE_HAT_LISTS_NOT_NEWLINE; /* It also changes the matching behavior. */ preg->newline_anchor = 1; } else preg->newline_anchor = 0; preg->no_sub = !!(cflags & REG_NOSUB); preg->translate = NULL; ret = re_compile_internal (preg, pattern, strlen (pattern), syntax); /* POSIX doesn't distinguish between an unmatched open-group and an unmatched close-group: both are REG_EPAREN. */ if (ret == REG_ERPAREN) ret = REG_EPAREN; /* We have already checked preg->fastmap != NULL. */ if (BE (ret == REG_NOERROR, 1)) /* Compute the fastmap now, since regexec cannot modify the pattern buffer. This function never fails in this implementation. */ (void) re_compile_fastmap (preg); else { /* Some error occurred while compiling the expression. */ re_free (preg->fastmap); preg->fastmap = NULL; } return (int) ret; } #ifdef _LIBC libc_hidden_def (__regcomp) weak_alias (__regcomp, regcomp) #endif /* Returns a message corresponding to an error code, ERRCODE, returned from either regcomp or regexec. We don't use PREG here. */ size_t regerror (int errcode, const regex_t *_Restrict_ preg, char *_Restrict_ errbuf, size_t errbuf_size) { const char *msg; size_t msg_size; if (BE (errcode < 0 || errcode >= (int) (sizeof (__re_error_msgid_idx) / sizeof (__re_error_msgid_idx[0])), 0)) /* Only error codes returned by the rest of the code should be passed to this routine. If we are given anything else, or if other regex code generates an invalid error code, then the program has a bug. Dump core so we can fix it. */ abort (); msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); msg_size = strlen (msg) + 1; /* Includes the null. */ if (BE (errbuf_size != 0, 1)) { size_t cpy_size = msg_size; if (BE (msg_size > errbuf_size, 0)) { cpy_size = errbuf_size - 1; errbuf[cpy_size] = '\0'; } memcpy (errbuf, msg, cpy_size); } return msg_size; } #ifdef _LIBC weak_alias (__regerror, regerror) #endif #ifdef RE_ENABLE_I18N /* This static array is used for the map to single-byte characters when UTF-8 is used. Otherwise we would allocate memory just to initialize it the same all the time. UTF-8 is the preferred encoding so this is a worthwhile optimization. */ static const bitset_t utf8_sb_map = { /* Set the first 128 bits. */ # if defined __GNUC__ && !defined __STRICT_ANSI__ [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX # else # if 4 * BITSET_WORD_BITS < ASCII_CHARS # error "bitset_word_t is narrower than 32 bits" # elif 3 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX, # elif 2 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, BITSET_WORD_MAX, # elif 1 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, # endif (BITSET_WORD_MAX >> (SBC_MAX % BITSET_WORD_BITS == 0 ? 0 : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS)) # endif }; #endif static void free_dfa_content (re_dfa_t *dfa) { Idx i, j; if (dfa->nodes) for (i = 0; i < dfa->nodes_len; ++i) free_token (dfa->nodes + i); re_free (dfa->nexts); for (i = 0; i < dfa->nodes_len; ++i) { if (dfa->eclosures != NULL) re_node_set_free (dfa->eclosures + i); if (dfa->inveclosures != NULL) re_node_set_free (dfa->inveclosures + i); if (dfa->edests != NULL) re_node_set_free (dfa->edests + i); } re_free (dfa->edests); re_free (dfa->eclosures); re_free (dfa->inveclosures); re_free (dfa->nodes); if (dfa->state_table) for (i = 0; i <= dfa->state_hash_mask; ++i) { struct re_state_table_entry *entry = dfa->state_table + i; for (j = 0; j < entry->num; ++j) { re_dfastate_t *state = entry->array[j]; free_state (state); } re_free (entry->array); } re_free (dfa->state_table); #ifdef RE_ENABLE_I18N if (dfa->sb_char != utf8_sb_map) re_free (dfa->sb_char); #endif re_free (dfa->subexp_map); #ifdef DEBUG re_free (dfa->re_str); #endif re_free (dfa); } /* Free dynamically allocated space used by PREG. */ void regfree (regex_t *preg) { re_dfa_t *dfa = preg->buffer; if (BE (dfa != NULL, 1)) { lock_fini (dfa->lock); free_dfa_content (dfa); } preg->buffer = NULL; preg->allocated = 0; re_free (preg->fastmap); preg->fastmap = NULL; re_free (preg->translate); preg->translate = NULL; } #ifdef _LIBC libc_hidden_def (__regfree) weak_alias (__regfree, regfree) #endif /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC /* BSD has one and only one pattern buffer. */ static struct re_pattern_buffer re_comp_buf; char * # ifdef _LIBC /* Make these definitions weak in libc, so POSIX programs can redefine these names if they don't use our functions, and still use regcomp/regexec above without link errors. */ weak_function # endif re_comp (const char *s) { reg_errcode_t ret; char *fastmap; if (!s) { if (!re_comp_buf.buffer) return gettext ("No previous regular expression"); return 0; } if (re_comp_buf.buffer) { fastmap = re_comp_buf.fastmap; re_comp_buf.fastmap = NULL; __regfree (&re_comp_buf); memset (&re_comp_buf, '\0', sizeof (re_comp_buf)); re_comp_buf.fastmap = fastmap; } if (re_comp_buf.fastmap == NULL) { re_comp_buf.fastmap = re_malloc (char, SBC_MAX); if (re_comp_buf.fastmap == NULL) return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) REG_ESPACE]); } /* Since 're_exec' always passes NULL for the 'regs' argument, we don't need to initialize the pattern buffer fields which affect it. */ /* Match anchors at newlines. */ re_comp_buf.newline_anchor = 1; ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options); if (!ret) return NULL; /* Yes, we're discarding 'const' here if !HAVE_LIBINTL. */ return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } #ifdef _LIBC libc_freeres_fn (free_mem) { __regfree (&re_comp_buf); } #endif #endif /* _REGEX_RE_COMP */ /* Internal entry point. Compile the regular expression PATTERN, whose length is LENGTH. SYNTAX indicate regular expression's syntax. */ static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax) { reg_errcode_t err = REG_NOERROR; re_dfa_t *dfa; re_string_t regexp; /* Initialize the pattern buffer. */ preg->fastmap_accurate = 0; preg->syntax = syntax; preg->not_bol = preg->not_eol = 0; preg->used = 0; preg->re_nsub = 0; preg->can_be_null = 0; preg->regs_allocated = REGS_UNALLOCATED; /* Initialize the dfa. */ dfa = preg->buffer; if (BE (preg->allocated < sizeof (re_dfa_t), 0)) { /* If zero allocated, but buffer is non-null, try to realloc enough space. This loses if buffer's address is bogus, but that is the user's responsibility. If ->buffer is NULL this is a simple allocation. */ dfa = re_realloc (preg->buffer, re_dfa_t, 1); if (dfa == NULL) return REG_ESPACE; preg->allocated = sizeof (re_dfa_t); preg->buffer = dfa; } preg->used = sizeof (re_dfa_t); err = init_dfa (dfa, length); if (BE (err == REG_NOERROR && lock_init (dfa->lock) != 0, 0)) err = REG_ESPACE; if (BE (err != REG_NOERROR, 0)) { free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; return err; } #ifdef DEBUG /* Note: length+1 will not overflow since it is checked in init_dfa. */ dfa->re_str = re_malloc (char, length + 1); strncpy (dfa->re_str, pattern, length + 1); #endif err = re_string_construct (®exp, pattern, length, preg->translate, (syntax & RE_ICASE) != 0, dfa); if (BE (err != REG_NOERROR, 0)) { re_compile_internal_free_return: free_workarea_compile (preg); re_string_destruct (®exp); lock_fini (dfa->lock); free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; return err; } /* Parse the regular expression, and build a structure tree. */ preg->re_nsub = 0; dfa->str_tree = parse (®exp, preg, syntax, &err); if (BE (dfa->str_tree == NULL, 0)) goto re_compile_internal_free_return; /* Analyze the tree and create the nfa. */ err = analyze (preg); if (BE (err != REG_NOERROR, 0)) goto re_compile_internal_free_return; #ifdef RE_ENABLE_I18N /* If possible, do searching in single byte encoding to speed things up. */ if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL) optimize_utf8 (dfa); #endif /* Then create the initial state of the dfa. */ err = create_initial_state (dfa); /* Release work areas. */ free_workarea_compile (preg); re_string_destruct (®exp); if (BE (err != REG_NOERROR, 0)) { lock_fini (dfa->lock); free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; } return err; } /* Initialize DFA. We use the length of the regular expression PAT_LEN as the initial length of some arrays. */ static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len) { __re_size_t table_size; #ifndef _LIBC const char *codeset_name; #endif #ifdef RE_ENABLE_I18N size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); #else size_t max_i18n_object_size = 0; #endif size_t max_object_size = MAX (sizeof (struct re_state_table_entry), MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), MAX (sizeof (regmatch_t), max_i18n_object_size)))); memset (dfa, '\0', sizeof (re_dfa_t)); /* Force allocation of str_tree_storage the first time. */ dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; /* Avoid overflows. The extra "/ 2" is for the table_size doubling calculation below, and for similar doubling calculations elsewhere. And it's <= rather than <, because some of the doubling calculations add 1 afterwards. */ if (BE (MIN (IDX_MAX, SIZE_MAX / max_object_size) / 2 <= pat_len, 0)) return REG_ESPACE; dfa->nodes_alloc = pat_len + 1; dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc); /* table_size = 2 ^ ceil(log pat_len) */ for (table_size = 1; ; table_size <<= 1) if (table_size > pat_len) break; dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); dfa->state_hash_mask = table_size - 1; dfa->mb_cur_max = MB_CUR_MAX; #ifdef _LIBC if (dfa->mb_cur_max == 6 && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0) dfa->is_utf8 = 1; dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) != 0); #else codeset_name = nl_langinfo (CODESET); if ((codeset_name[0] == 'U' || codeset_name[0] == 'u') && (codeset_name[1] == 'T' || codeset_name[1] == 't') && (codeset_name[2] == 'F' || codeset_name[2] == 'f') && strcmp (codeset_name + 3 + (codeset_name[3] == '-'), "8") == 0) dfa->is_utf8 = 1; /* We check exhaustively in the loop below if this charset is a superset of ASCII. */ dfa->map_notascii = 0; #endif #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) { if (dfa->is_utf8) dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map; else { int i, j, ch; dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); if (BE (dfa->sb_char == NULL, 0)) return REG_ESPACE; /* Set the bits corresponding to single byte chars. */ for (i = 0, ch = 0; i < BITSET_WORDS; ++i) for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) { wint_t wch = __btowc (ch); if (wch != WEOF) dfa->sb_char[i] |= (bitset_word_t) 1 << j; # ifndef _LIBC if (isascii (ch) && wch != ch) dfa->map_notascii = 1; # endif } } } #endif if (BE (dfa->nodes == NULL || dfa->state_table == NULL, 0)) return REG_ESPACE; return REG_NOERROR; } /* Initialize WORD_CHAR table, which indicate which character is "word". In this case "word" means that it is the word construction character used by some operators like "\<", "\>", etc. */ static void init_word_char (re_dfa_t *dfa) { int i = 0; int j; int ch = 0; dfa->word_ops_used = 1; if (BE (dfa->map_notascii == 0, 1)) { /* Avoid uint32_t and uint64_t as some non-GCC platforms lack them, an issue when this code is used in Gnulib. */ bitset_word_t bits0 = 0x00000000; bitset_word_t bits1 = 0x03ff0000; bitset_word_t bits2 = 0x87fffffe; bitset_word_t bits3 = 0x07fffffe; if (BITSET_WORD_BITS == 64) { /* Pacify gcc -Woverflow on 32-bit platformns. */ dfa->word_char[0] = bits1 << 31 << 1 | bits0; dfa->word_char[1] = bits3 << 31 << 1 | bits2; i = 2; } else if (BITSET_WORD_BITS == 32) { dfa->word_char[0] = bits0; dfa->word_char[1] = bits1; dfa->word_char[2] = bits2; dfa->word_char[3] = bits3; i = 4; } else goto general_case; ch = 128; if (BE (dfa->is_utf8, 1)) { memset (&dfa->word_char[i], '\0', (SBC_MAX - ch) / 8); return; } } general_case: for (; i < BITSET_WORDS; ++i) for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) if (isalnum (ch) || ch == '_') dfa->word_char[i] |= (bitset_word_t) 1 << j; } /* Free the work area which are only used while compiling. */ static void free_workarea_compile (regex_t *preg) { re_dfa_t *dfa = preg->buffer; bin_tree_storage_t *storage, *next; for (storage = dfa->str_tree_storage; storage; storage = next) { next = storage->next; re_free (storage); } dfa->str_tree_storage = NULL; dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; dfa->str_tree = NULL; re_free (dfa->org_indices); dfa->org_indices = NULL; } /* Create initial states for all contexts. */ static reg_errcode_t create_initial_state (re_dfa_t *dfa) { Idx first, i; reg_errcode_t err; re_node_set init_nodes; /* Initial states have the epsilon closure of the node which is the first node of the regular expression. */ first = dfa->str_tree->first->node_idx; dfa->init_node = first; err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first); if (BE (err != REG_NOERROR, 0)) return err; /* The back-references which are in initial states can epsilon transit, since in this case all of the subexpressions can be null. Then we add epsilon closures of the nodes which are the next nodes of the back-references. */ if (dfa->nbackref > 0) for (i = 0; i < init_nodes.nelem; ++i) { Idx node_idx = init_nodes.elems[i]; re_token_type_t type = dfa->nodes[node_idx].type; Idx clexp_idx; if (type != OP_BACK_REF) continue; for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx) { re_token_t *clexp_node; clexp_node = dfa->nodes + init_nodes.elems[clexp_idx]; if (clexp_node->type == OP_CLOSE_SUBEXP && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx) break; } if (clexp_idx == init_nodes.nelem) continue; if (type == OP_BACK_REF) { Idx dest_idx = dfa->edests[node_idx].elems[0]; if (!re_node_set_contains (&init_nodes, dest_idx)) { reg_errcode_t merge_err = re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx); if (merge_err != REG_NOERROR) return merge_err; i = 0; } } } /* It must be the first time to invoke acquire_state. */ dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0); /* We don't check ERR here, since the initial state must not be NULL. */ if (BE (dfa->init_state == NULL, 0)) return err; if (dfa->init_state->has_constraint) { dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_WORD); dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE); dfa->init_state_begbuf = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (BE (dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL, 0)) return err; } else dfa->init_state_word = dfa->init_state_nl = dfa->init_state_begbuf = dfa->init_state; re_node_set_free (&init_nodes); return REG_NOERROR; } #ifdef RE_ENABLE_I18N /* If it is possible to do searching in single byte encoding instead of UTF-8 to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change DFA nodes where needed. */ static void optimize_utf8 (re_dfa_t *dfa) { Idx node; int i; bool mb_chars = false; bool has_period = false; for (node = 0; node < dfa->nodes_len; ++node) switch (dfa->nodes[node].type) { case CHARACTER: if (dfa->nodes[node].opr.c >= ASCII_CHARS) mb_chars = true; break; case ANCHOR: switch (dfa->nodes[node].opr.ctx_type) { case LINE_FIRST: case LINE_LAST: case BUF_FIRST: case BUF_LAST: break; default: /* Word anchors etc. cannot be handled. It's okay to test opr.ctx_type since constraints (for all DFA nodes) are created by ORing one or more opr.ctx_type values. */ return; } break; case OP_PERIOD: has_period = true; break; case OP_BACK_REF: case OP_ALT: case END_OF_RE: case OP_DUP_ASTERISK: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: break; case COMPLEX_BRACKET: return; case SIMPLE_BRACKET: /* Just double check. */ { int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0 ? 0 : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS); for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i) { if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0) return; rshift = 0; } } break; default: abort (); } if (mb_chars || has_period) for (node = 0; node < dfa->nodes_len; ++node) { if (dfa->nodes[node].type == CHARACTER && dfa->nodes[node].opr.c >= ASCII_CHARS) dfa->nodes[node].mb_partial = 0; else if (dfa->nodes[node].type == OP_PERIOD) dfa->nodes[node].type = OP_UTF8_PERIOD; } /* The search can be in single byte locale. */ dfa->mb_cur_max = 1; dfa->is_utf8 = 0; dfa->has_mb_node = dfa->nbackref > 0 || has_period; } #endif /* Analyze the structure tree, and calculate "first", "next", "edest", "eclosure", and "inveclosure". */ static reg_errcode_t analyze (regex_t *preg) { re_dfa_t *dfa = preg->buffer; reg_errcode_t ret; /* Allocate arrays. */ dfa->nexts = re_malloc (Idx, dfa->nodes_alloc); dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc); dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc); dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc); if (BE (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL || dfa->eclosures == NULL, 0)) return REG_ESPACE; dfa->subexp_map = re_malloc (Idx, preg->re_nsub); if (dfa->subexp_map != NULL) { Idx i; for (i = 0; i < preg->re_nsub; i++) dfa->subexp_map[i] = i; preorder (dfa->str_tree, optimize_subexps, dfa); for (i = 0; i < preg->re_nsub; i++) if (dfa->subexp_map[i] != i) break; if (i == preg->re_nsub) { re_free (dfa->subexp_map); dfa->subexp_map = NULL; } } ret = postorder (dfa->str_tree, lower_subexps, preg); if (BE (ret != REG_NOERROR, 0)) return ret; ret = postorder (dfa->str_tree, calc_first, dfa); if (BE (ret != REG_NOERROR, 0)) return ret; preorder (dfa->str_tree, calc_next, dfa); ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); if (BE (ret != REG_NOERROR, 0)) return ret; ret = calc_eclosure (dfa); if (BE (ret != REG_NOERROR, 0)) return ret; /* We only need this during the prune_impossible_nodes pass in regexec.c; skip it if p_i_n will not run, as calc_inveclosure can be quadratic. */ if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match) || dfa->nbackref) { dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len); if (BE (dfa->inveclosures == NULL, 0)) return REG_ESPACE; ret = calc_inveclosure (dfa); } return ret; } /* Our parse trees are very unbalanced, so we cannot use a stack to implement parse tree visits. Instead, we use parent pointers and some hairy code in these two functions. */ static reg_errcode_t postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra) { bin_tree_t *node, *prev; for (node = root; ; ) { /* Descend down the tree, preferably to the left (or to the right if that's the only child). */ while (node->left || node->right) if (node->left) node = node->left; else node = node->right; do { reg_errcode_t err = fn (extra, node); if (BE (err != REG_NOERROR, 0)) return err; if (node->parent == NULL) return REG_NOERROR; prev = node; node = node->parent; } /* Go up while we have a node that is reached from the right. */ while (node->right == prev || node->right == NULL); node = node->right; } } static reg_errcode_t preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra) { bin_tree_t *node; for (node = root; ; ) { reg_errcode_t err = fn (extra, node); if (BE (err != REG_NOERROR, 0)) return err; /* Go to the left node, or up and to the right. */ if (node->left) node = node->left; else { bin_tree_t *prev = NULL; while (node->right == prev || node->right == NULL) { prev = node; node = node->parent; if (!node) return REG_NOERROR; } node = node->right; } } } /* Optimization pass: if a SUBEXP is entirely contained, strip it and tell re_search_internal to map the inner one's opr.idx to this one's. Adjust backreferences as well. Requires a preorder visit. */ static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; if (node->token.type == OP_BACK_REF && dfa->subexp_map) { int idx = node->token.opr.idx; node->token.opr.idx = dfa->subexp_map[idx]; dfa->used_bkref_map |= 1 << node->token.opr.idx; } else if (node->token.type == SUBEXP && node->left && node->left->token.type == SUBEXP) { Idx other_idx = node->left->token.opr.idx; node->left = node->left->left; if (node->left) node->left->parent = node; dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx]; if (other_idx < BITSET_WORD_BITS) dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx); } return REG_NOERROR; } /* Lowering pass: Turn each SUBEXP node into the appropriate concatenation of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP. */ static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node) { regex_t *preg = (regex_t *) extra; reg_errcode_t err = REG_NOERROR; if (node->left && node->left->token.type == SUBEXP) { node->left = lower_subexp (&err, preg, node->left); if (node->left) node->left->parent = node; } if (node->right && node->right->token.type == SUBEXP) { node->right = lower_subexp (&err, preg, node->right); if (node->right) node->right->parent = node; } return err; } static bin_tree_t * lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node) { re_dfa_t *dfa = preg->buffer; bin_tree_t *body = node->left; bin_tree_t *op, *cls, *tree1, *tree; if (preg->no_sub /* We do not optimize empty subexpressions, because otherwise we may have bad CONCAT nodes with NULL children. This is obviously not very common, so we do not lose much. An example that triggers this case is the sed "script" /\(\)/x. */ && node->left != NULL && (node->token.opr.idx >= BITSET_WORD_BITS || !(dfa->used_bkref_map & ((bitset_word_t) 1 << node->token.opr.idx)))) return node->left; /* Convert the SUBEXP node to the concatenation of an OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP. */ op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP); cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP); tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls; tree = create_tree (dfa, op, tree1, CONCAT); if (BE (tree == NULL || tree1 == NULL || op == NULL || cls == NULL, 0)) { *err = REG_ESPACE; return NULL; } op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx; op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp; return tree; } /* Pass 1 in building the NFA: compute FIRST and create unlinked automaton nodes. Requires a postorder visit. */ static reg_errcode_t calc_first (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; if (node->token.type == CONCAT) { node->first = node->left->first; node->node_idx = node->left->node_idx; } else { node->first = node; node->node_idx = re_dfa_add_node (dfa, node->token); if (BE (node->node_idx == -1, 0)) return REG_ESPACE; if (node->token.type == ANCHOR) dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type; } return REG_NOERROR; } /* Pass 2: compute NEXT on the tree. Preorder visit. */ static reg_errcode_t calc_next (void *extra, bin_tree_t *node) { switch (node->token.type) { case OP_DUP_ASTERISK: node->left->next = node; break; case CONCAT: node->left->next = node->right->first; node->right->next = node->next; break; default: if (node->left) node->left->next = node->next; if (node->right) node->right->next = node->next; break; } return REG_NOERROR; } /* Pass 3: link all DFA nodes to their NEXT node (any order will do). */ static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; Idx idx = node->node_idx; reg_errcode_t err = REG_NOERROR; switch (node->token.type) { case CONCAT: break; case END_OF_RE: assert (node->next == NULL); break; case OP_DUP_ASTERISK: case OP_ALT: { Idx left, right; dfa->has_plural_match = 1; if (node->left != NULL) left = node->left->first->node_idx; else left = node->next->node_idx; if (node->right != NULL) right = node->right->first->node_idx; else right = node->next->node_idx; assert (left > -1); assert (right > -1); err = re_node_set_init_2 (dfa->edests + idx, left, right); } break; case ANCHOR: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx); break; case OP_BACK_REF: dfa->nexts[idx] = node->next->node_idx; if (node->token.type == OP_BACK_REF) err = re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]); break; default: assert (!IS_EPSILON_NODE (node->token.type)); dfa->nexts[idx] = node->next->node_idx; break; } return err; } /* Duplicate the epsilon closure of the node ROOT_NODE. Note that duplicated nodes have constraint INIT_CONSTRAINT in addition to their own constraint. */ static reg_errcode_t duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node, Idx root_node, unsigned int init_constraint) { Idx org_node, clone_node; bool ok; unsigned int constraint = init_constraint; for (org_node = top_org_node, clone_node = top_clone_node;;) { Idx org_dest, clone_dest; if (dfa->nodes[org_node].type == OP_BACK_REF) { /* If the back reference epsilon-transit, its destination must also have the constraint. Then duplicate the epsilon closure of the destination of the back reference, and store it in edests of the back reference. */ org_dest = dfa->nexts[org_node]; re_node_set_empty (dfa->edests + clone_node); clone_dest = duplicate_node (dfa, org_dest, constraint); if (BE (clone_dest == -1, 0)) return REG_ESPACE; dfa->nexts[clone_node] = dfa->nexts[org_node]; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (BE (! ok, 0)) return REG_ESPACE; } else if (dfa->edests[org_node].nelem == 0) { /* In case of the node can't epsilon-transit, don't duplicate the destination and store the original destination as the destination of the node. */ dfa->nexts[clone_node] = dfa->nexts[org_node]; break; } else if (dfa->edests[org_node].nelem == 1) { /* In case of the node can epsilon-transit, and it has only one destination. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); /* If the node is root_node itself, it means the epsilon closure has a loop. Then tie it to the destination of the root_node. */ if (org_node == root_node && clone_node != org_node) { ok = re_node_set_insert (dfa->edests + clone_node, org_dest); if (BE (! ok, 0)) return REG_ESPACE; break; } /* In case the node has another constraint, append it. */ constraint |= dfa->nodes[org_node].constraint; clone_dest = duplicate_node (dfa, org_dest, constraint); if (BE (clone_dest == -1, 0)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (BE (! ok, 0)) return REG_ESPACE; } else /* dfa->edests[org_node].nelem == 2 */ { /* In case of the node can epsilon-transit, and it has two destinations. In the bin_tree_t and DFA, that's '|' and '*'. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); /* Search for a duplicated node which satisfies the constraint. */ clone_dest = search_duplicated_node (dfa, org_dest, constraint); if (clone_dest == -1) { /* There is no such duplicated node, create a new one. */ reg_errcode_t err; clone_dest = duplicate_node (dfa, org_dest, constraint); if (BE (clone_dest == -1, 0)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (BE (! ok, 0)) return REG_ESPACE; err = duplicate_node_closure (dfa, org_dest, clone_dest, root_node, constraint); if (BE (err != REG_NOERROR, 0)) return err; } else { /* There is a duplicated node which satisfies the constraint, use it to avoid infinite loop. */ ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (BE (! ok, 0)) return REG_ESPACE; } org_dest = dfa->edests[org_node].elems[1]; clone_dest = duplicate_node (dfa, org_dest, constraint); if (BE (clone_dest == -1, 0)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (BE (! ok, 0)) return REG_ESPACE; } org_node = org_dest; clone_node = clone_dest; } return REG_NOERROR; } /* Search for a node which is duplicated from the node ORG_NODE, and satisfies the constraint CONSTRAINT. */ static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, unsigned int constraint) { Idx idx; for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx) { if (org_node == dfa->org_indices[idx] && constraint == dfa->nodes[idx].constraint) return idx; /* Found. */ } return -1; /* Not found. */ } /* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. Return the index of the new node, or -1 if insufficient storage is available. */ static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint) { Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]); if (BE (dup_idx != -1, 1)) { dfa->nodes[dup_idx].constraint = constraint; dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint; dfa->nodes[dup_idx].duplicated = 1; /* Store the index of the original node. */ dfa->org_indices[dup_idx] = org_idx; } return dup_idx; } static reg_errcode_t calc_inveclosure (re_dfa_t *dfa) { Idx src, idx; bool ok; for (idx = 0; idx < dfa->nodes_len; ++idx) re_node_set_init_empty (dfa->inveclosures + idx); for (src = 0; src < dfa->nodes_len; ++src) { Idx *elems = dfa->eclosures[src].elems; for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx) { ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src); if (BE (! ok, 0)) return REG_ESPACE; } } return REG_NOERROR; } /* Calculate "eclosure" for all the node in DFA. */ static reg_errcode_t calc_eclosure (re_dfa_t *dfa) { Idx node_idx; bool incomplete; #ifdef DEBUG assert (dfa->nodes_len > 0); #endif incomplete = false; /* For each nodes, calculate epsilon closure. */ for (node_idx = 0; ; ++node_idx) { reg_errcode_t err; re_node_set eclosure_elem; if (node_idx == dfa->nodes_len) { if (!incomplete) break; incomplete = false; node_idx = 0; } #ifdef DEBUG assert (dfa->eclosures[node_idx].nelem != -1); #endif /* If we have already calculated, skip it. */ if (dfa->eclosures[node_idx].nelem != 0) continue; /* Calculate epsilon closure of 'node_idx'. */ err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true); if (BE (err != REG_NOERROR, 0)) return err; if (dfa->eclosures[node_idx].nelem == 0) { incomplete = true; re_node_set_free (&eclosure_elem); } } return REG_NOERROR; } /* Calculate epsilon closure of NODE. */ static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root) { reg_errcode_t err; Idx i; re_node_set eclosure; bool ok; bool incomplete = false; err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); if (BE (err != REG_NOERROR, 0)) return err; /* This indicates that we are calculating this node now. We reference this value to avoid infinite loop. */ dfa->eclosures[node].nelem = -1; /* If the current node has constraints, duplicate all nodes since they must inherit the constraints. */ if (dfa->nodes[node].constraint && dfa->edests[node].nelem && !dfa->nodes[dfa->edests[node].elems[0]].duplicated) { err = duplicate_node_closure (dfa, node, node, node, dfa->nodes[node].constraint); if (BE (err != REG_NOERROR, 0)) return err; } /* Expand each epsilon destination nodes. */ if (IS_EPSILON_NODE(dfa->nodes[node].type)) for (i = 0; i < dfa->edests[node].nelem; ++i) { re_node_set eclosure_elem; Idx edest = dfa->edests[node].elems[i]; /* If calculating the epsilon closure of 'edest' is in progress, return intermediate result. */ if (dfa->eclosures[edest].nelem == -1) { incomplete = true; continue; } /* If we haven't calculated the epsilon closure of 'edest' yet, calculate now. Otherwise use calculated epsilon closure. */ if (dfa->eclosures[edest].nelem == 0) { err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false); if (BE (err != REG_NOERROR, 0)) return err; } else eclosure_elem = dfa->eclosures[edest]; /* Merge the epsilon closure of 'edest'. */ err = re_node_set_merge (&eclosure, &eclosure_elem); if (BE (err != REG_NOERROR, 0)) return err; /* If the epsilon closure of 'edest' is incomplete, the epsilon closure of this node is also incomplete. */ if (dfa->eclosures[edest].nelem == 0) { incomplete = true; re_node_set_free (&eclosure_elem); } } /* An epsilon closure includes itself. */ ok = re_node_set_insert (&eclosure, node); if (BE (! ok, 0)) return REG_ESPACE; if (incomplete && !root) dfa->eclosures[node].nelem = 0; else dfa->eclosures[node] = eclosure; *new_set = eclosure; return REG_NOERROR; } /* Functions for token which are used in the parser. */ /* Fetch a token from INPUT. We must not use this function inside bracket expressions. */ static void fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax) { re_string_skip_bytes (input, peek_token (result, input, syntax)); } /* Peek a token from INPUT, and return the length of the token. We must not use this function inside bracket expressions. */ static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax) { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; token->word_char = 0; #ifdef RE_ENABLE_I18N token->mb_partial = 0; if (input->mb_cur_max > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; token->mb_partial = 1; return 1; } #endif if (c == '\\') { unsigned char c2; if (re_string_cur_idx (input) + 1 >= re_string_length (input)) { token->type = BACK_SLASH; return 1; } c2 = re_string_peek_byte_case (input, 1); token->opr.c = c2; token->type = CHARACTER; #ifdef RE_ENABLE_I18N if (input->mb_cur_max > 1) { wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input) + 1); token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; } else #endif token->word_char = IS_WORD_CHAR (c2) != 0; switch (c2) { case '|': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (!(syntax & RE_NO_BK_REFS)) { token->type = OP_BACK_REF; token->opr.idx = c2 - '1'; } break; case '<': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_FIRST; } break; case '>': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_LAST; } break; case 'b': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_DELIM; } break; case 'B': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = NOT_WORD_DELIM; } break; case 'w': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_WORD; break; case 'W': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTWORD; break; case 's': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_SPACE; break; case 'S': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTSPACE; break; case '`': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = BUF_FIRST; } break; case '\'': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = BUF_LAST; } break; case '(': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_OPEN_SUBEXP; break; case ')': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_CLOSE_SUBEXP; break; case '+': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_CLOSE_DUP_NUM; break; default: break; } return 2; } token->type = CHARACTER; #ifdef RE_ENABLE_I18N if (input->mb_cur_max > 1) { wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input)); token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; } else #endif token->word_char = IS_WORD_CHAR (token->opr.c); switch (c) { case '\n': if (syntax & RE_NEWLINE_ALT) token->type = OP_ALT; break; case '|': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '*': token->type = OP_DUP_ASTERISK; break; case '+': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_CLOSE_DUP_NUM; break; case '(': if (syntax & RE_NO_BK_PARENS) token->type = OP_OPEN_SUBEXP; break; case ')': if (syntax & RE_NO_BK_PARENS) token->type = OP_CLOSE_SUBEXP; break; case '[': token->type = OP_OPEN_BRACKET; break; case '.': token->type = OP_PERIOD; break; case '^': if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) && re_string_cur_idx (input) != 0) { char prev = re_string_peek_byte (input, -1); if (!(syntax & RE_NEWLINE_ALT) || prev != '\n') break; } token->type = ANCHOR; token->opr.ctx_type = LINE_FIRST; break; case '$': if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) && re_string_cur_idx (input) + 1 != re_string_length (input)) { re_token_t next; re_string_skip_bytes (input, 1); peek_token (&next, input, syntax); re_string_skip_bytes (input, -1); if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP) break; } token->type = ANCHOR; token->opr.ctx_type = LINE_LAST; break; default: break; } return 1; } /* Peek a token from INPUT, and return the length of the token. We must not use this function out of bracket expressions. */ static int peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax) { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; #ifdef RE_ENABLE_I18N if (input->mb_cur_max > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; return 1; } #endif /* RE_ENABLE_I18N */ if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && re_string_cur_idx (input) + 1 < re_string_length (input)) { /* In this case, '\' escape a character. */ unsigned char c2; re_string_skip_bytes (input, 1); c2 = re_string_peek_byte (input, 0); token->opr.c = c2; token->type = CHARACTER; return 1; } if (c == '[') /* '[' is a special char in a bracket exps. */ { unsigned char c2; int token_len; if (re_string_cur_idx (input) + 1 < re_string_length (input)) c2 = re_string_peek_byte (input, 1); else c2 = 0; token->opr.c = c2; token_len = 2; switch (c2) { case '.': token->type = OP_OPEN_COLL_ELEM; break; case '=': token->type = OP_OPEN_EQUIV_CLASS; break; case ':': if (syntax & RE_CHAR_CLASSES) { token->type = OP_OPEN_CHAR_CLASS; break; } FALLTHROUGH; default: token->type = CHARACTER; token->opr.c = c; token_len = 1; break; } return token_len; } switch (c) { case '-': token->type = OP_CHARSET_RANGE; break; case ']': token->type = OP_CLOSE_BRACKET; break; case '^': token->type = OP_NON_MATCH_LIST; break; default: token->type = CHARACTER; } return 1; } /* Functions for parser. */ /* Entry point of the parser. Parse the regular expression REGEXP and return the structure tree. If an error occurs, ERR is set by error code, and return NULL. This function build the following tree, from regular expression : CAT / \ / \ EOR CAT means concatenation. EOR means end of regular expression. */ static bin_tree_t * parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree, *eor, *root; re_token_t current_token; dfa->syntax = syntax; fetch_token (¤t_token, regexp, syntax | RE_CARET_ANCHORS_HERE); tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; eor = create_tree (dfa, NULL, NULL, END_OF_RE); if (tree != NULL) root = create_tree (dfa, tree, eor, CONCAT); else root = eor; if (BE (eor == NULL || root == NULL, 0)) { *err = REG_ESPACE; return NULL; } return root; } /* This function build the following tree, from regular expression |: ALT / \ / \ ALT means alternative, which represents the operator '|'. */ static bin_tree_t * parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree, *branch = NULL; bitset_word_t initial_bkref_map = dfa->completed_bkref_map; tree = parse_branch (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; while (token->type == OP_ALT) { fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); if (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { bitset_word_t accumulated_bkref_map = dfa->completed_bkref_map; dfa->completed_bkref_map = initial_bkref_map; branch = parse_branch (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && branch == NULL, 0)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } dfa->completed_bkref_map |= accumulated_bkref_map; } else branch = NULL; tree = create_tree (dfa, tree, branch, OP_ALT); if (BE (tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } } return tree; } /* This function build the following tree, from regular expression : CAT / \ / \ CAT means concatenation. */ static bin_tree_t * parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { bin_tree_t *tree, *expr; re_dfa_t *dfa = preg->buffer; tree = parse_expression (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; while (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { expr = parse_expression (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && expr == NULL, 0)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } if (tree != NULL && expr != NULL) { bin_tree_t *newtree = create_tree (dfa, tree, expr, CONCAT); if (newtree == NULL) { postorder (expr, free_tree, NULL); postorder (tree, free_tree, NULL); *err = REG_ESPACE; return NULL; } tree = newtree; } else if (tree == NULL) tree = expr; /* Otherwise expr == NULL, we don't need to create new tree. */ } return tree; } /* This function build the following tree, from regular expression a*: * | a */ static bin_tree_t * parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree; switch (token->type) { case CHARACTER: tree = create_token_tree (dfa, NULL, NULL, token); if (BE (tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) { while (!re_string_eoi (regexp) && !re_string_first_byte (regexp, re_string_cur_idx (regexp))) { bin_tree_t *mbc_remain; fetch_token (token, regexp, syntax); mbc_remain = create_token_tree (dfa, NULL, NULL, token); tree = create_tree (dfa, tree, mbc_remain, CONCAT); if (BE (mbc_remain == NULL || tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } } } #endif break; case OP_OPEN_SUBEXP: tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_OPEN_BRACKET: tree = parse_bracket_exp (regexp, dfa, token, syntax, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_BACK_REF: if (!BE (dfa->completed_bkref_map & (1 << token->opr.idx), 1)) { *err = REG_ESUBREG; return NULL; } dfa->used_bkref_map |= 1 << token->opr.idx; tree = create_token_tree (dfa, NULL, NULL, token); if (BE (tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } ++dfa->nbackref; dfa->has_mb_node = 1; break; case OP_OPEN_DUP_NUM: if (syntax & RE_CONTEXT_INVALID_DUP) { *err = REG_BADRPT; return NULL; } FALLTHROUGH; case OP_DUP_ASTERISK: case OP_DUP_PLUS: case OP_DUP_QUESTION: if (syntax & RE_CONTEXT_INVALID_OPS) { *err = REG_BADRPT; return NULL; } else if (syntax & RE_CONTEXT_INDEP_OPS) { fetch_token (token, regexp, syntax); return parse_expression (regexp, preg, token, syntax, nest, err); } FALLTHROUGH; case OP_CLOSE_SUBEXP: if ((token->type == OP_CLOSE_SUBEXP) && !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) { *err = REG_ERPAREN; return NULL; } FALLTHROUGH; case OP_CLOSE_DUP_NUM: /* We treat it as a normal character. */ /* Then we can these characters as normal characters. */ token->type = CHARACTER; /* mb_partial and word_char bits should be initialized already by peek_token. */ tree = create_token_tree (dfa, NULL, NULL, token); if (BE (tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } break; case ANCHOR: if ((token->opr.ctx_type & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST)) && dfa->word_ops_used == 0) init_word_char (dfa); if (token->opr.ctx_type == WORD_DELIM || token->opr.ctx_type == NOT_WORD_DELIM) { bin_tree_t *tree_first, *tree_last; if (token->opr.ctx_type == WORD_DELIM) { token->opr.ctx_type = WORD_FIRST; tree_first = create_token_tree (dfa, NULL, NULL, token); token->opr.ctx_type = WORD_LAST; } else { token->opr.ctx_type = INSIDE_WORD; tree_first = create_token_tree (dfa, NULL, NULL, token); token->opr.ctx_type = INSIDE_NOTWORD; } tree_last = create_token_tree (dfa, NULL, NULL, token); tree = create_tree (dfa, tree_first, tree_last, OP_ALT); if (BE (tree_first == NULL || tree_last == NULL || tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } } else { tree = create_token_tree (dfa, NULL, NULL, token); if (BE (tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } } /* We must return here, since ANCHORs can't be followed by repetition operators. eg. RE"^*" is invalid or "", it must not be "". */ fetch_token (token, regexp, syntax); return tree; case OP_PERIOD: tree = create_token_tree (dfa, NULL, NULL, token); if (BE (tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } if (dfa->mb_cur_max > 1) dfa->has_mb_node = 1; break; case OP_WORD: case OP_NOTWORD: tree = build_charclass_op (dfa, regexp->trans, "alnum", "_", token->type == OP_NOTWORD, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_SPACE: case OP_NOTSPACE: tree = build_charclass_op (dfa, regexp->trans, "space", "", token->type == OP_NOTSPACE, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_ALT: case END_OF_RE: return NULL; case BACK_SLASH: *err = REG_EESCAPE; return NULL; default: /* Must not happen? */ #ifdef DEBUG assert (0); #endif return NULL; } fetch_token (token, regexp, syntax); while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) { bin_tree_t *dup_tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); if (BE (*err != REG_NOERROR && dup_tree == NULL, 0)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } tree = dup_tree; /* In BRE consecutive duplications are not allowed. */ if ((syntax & RE_CONTEXT_INVALID_DUP) && (token->type == OP_DUP_ASTERISK || token->type == OP_OPEN_DUP_NUM)) { if (tree != NULL) postorder (tree, free_tree, NULL); *err = REG_BADRPT; return NULL; } } return tree; } /* This function build the following tree, from regular expression (): SUBEXP | */ static bin_tree_t * parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree; size_t cur_nsub; cur_nsub = preg->re_nsub++; fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); /* The subexpression may be a null string. */ if (token->type == OP_CLOSE_SUBEXP) tree = NULL; else { tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); if (BE (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP, 0)) { if (tree != NULL) postorder (tree, free_tree, NULL); *err = REG_EPAREN; } if (BE (*err != REG_NOERROR, 0)) return NULL; } if (cur_nsub <= '9' - '1') dfa->completed_bkref_map |= 1 << cur_nsub; tree = create_tree (dfa, tree, NULL, SUBEXP); if (BE (tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } tree->token.opr.idx = cur_nsub; return tree; } /* This function parse repetition operators like "*", "+", "{1,3}" etc. */ static bin_tree_t * parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) { bin_tree_t *tree = NULL, *old_tree = NULL; Idx i, start, end, start_idx = re_string_cur_idx (regexp); re_token_t start_token = *token; if (token->type == OP_OPEN_DUP_NUM) { end = 0; start = fetch_number (regexp, token, syntax); if (start == -1) { if (token->type == CHARACTER && token->opr.c == ',') start = 0; /* We treat "{,m}" as "{0,m}". */ else { *err = REG_BADBR; /* {} is invalid. */ return NULL; } } if (BE (start != -2, 1)) { /* We treat "{n}" as "{n,n}". */ end = ((token->type == OP_CLOSE_DUP_NUM) ? start : ((token->type == CHARACTER && token->opr.c == ',') ? fetch_number (regexp, token, syntax) : -2)); } if (BE (start == -2 || end == -2, 0)) { /* Invalid sequence. */ if (BE (!(syntax & RE_INVALID_INTERVAL_ORD), 0)) { if (token->type == END_OF_RE) *err = REG_EBRACE; else *err = REG_BADBR; return NULL; } /* If the syntax bit is set, rollback. */ re_string_set_index (regexp, start_idx); *token = start_token; token->type = CHARACTER; /* mb_partial and word_char bits should be already initialized by peek_token. */ return elem; } if (BE ((end != -1 && start > end) || token->type != OP_CLOSE_DUP_NUM, 0)) { /* First number greater than second. */ *err = REG_BADBR; return NULL; } if (BE (RE_DUP_MAX < (end == -1 ? start : end), 0)) { *err = REG_ESIZE; return NULL; } } else { start = (token->type == OP_DUP_PLUS) ? 1 : 0; end = (token->type == OP_DUP_QUESTION) ? 1 : -1; } fetch_token (token, regexp, syntax); if (BE (elem == NULL, 0)) return NULL; if (BE (start == 0 && end == 0, 0)) { postorder (elem, free_tree, NULL); return NULL; } /* Extract "{n,m}" to "...{0,}". */ if (BE (start > 0, 0)) { tree = elem; for (i = 2; i <= start; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (BE (elem == NULL || tree == NULL, 0)) goto parse_dup_op_espace; } if (start == end) return tree; /* Duplicate ELEM before it is marked optional. */ elem = duplicate_tree (elem, dfa); if (BE (elem == NULL, 0)) goto parse_dup_op_espace; old_tree = tree; } else old_tree = NULL; if (elem->token.type == SUBEXP) { uintptr_t subidx = elem->token.opr.idx; postorder (elem, mark_opt_subexp, (void *) subidx); } tree = create_tree (dfa, elem, NULL, (end == -1 ? OP_DUP_ASTERISK : OP_ALT)); if (BE (tree == NULL, 0)) goto parse_dup_op_espace; /* From gnulib's "intprops.h": True if the arithmetic type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* This loop is actually executed only when end != -1, to rewrite {0,n} as ((...?)?)?... We have already created the start+1-th copy. */ if (TYPE_SIGNED (Idx) || end != -1) for (i = start + 2; i <= end; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (BE (elem == NULL || tree == NULL, 0)) goto parse_dup_op_espace; tree = create_tree (dfa, tree, NULL, OP_ALT); if (BE (tree == NULL, 0)) goto parse_dup_op_espace; } if (old_tree) tree = create_tree (dfa, old_tree, tree, CONCAT); return tree; parse_dup_op_espace: *err = REG_ESPACE; return NULL; } /* Size of the names for collating symbol/equivalence_class/character_class. I'm not sure, but maybe enough. */ #define BRACKET_NAME_BUF_SIZE 32 #ifndef _LIBC # ifdef RE_ENABLE_I18N /* Convert the byte B to the corresponding wide character. In a unibyte locale, treat B as itself if it is an encoding error. In a multibyte locale, return WEOF if B is an encoding error. */ static wint_t parse_byte (unsigned char b, re_charset_t *mbcset) { wint_t wc = __btowc (b); return wc == WEOF && !mbcset ? b : wc; } #endif /* Local function for parse_bracket_exp only used in case of NOT _LIBC. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument since we may update it. */ static reg_errcode_t # ifdef RE_ENABLE_I18N build_range_exp (const reg_syntax_t syntax, bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, const bracket_elem_t *start_elem, const bracket_elem_t *end_elem) # else /* not RE_ENABLE_I18N */ build_range_exp (const reg_syntax_t syntax, bitset_t sbcset, const bracket_elem_t *start_elem, const bracket_elem_t *end_elem) # endif /* not RE_ENABLE_I18N */ { unsigned int start_ch, end_ch; /* Equivalence Classes and Character Classes can't be a range start/end. */ if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, 0)) return REG_ERANGE; /* We can handle no multi character collating elements without libc support. */ if (BE ((start_elem->type == COLL_SYM && strlen ((char *) start_elem->opr.name) > 1) || (end_elem->type == COLL_SYM && strlen ((char *) end_elem->opr.name) > 1), 0)) return REG_ECOLLATE; # ifdef RE_ENABLE_I18N { wchar_t wc; wint_t start_wc; wint_t end_wc; start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] : 0)); end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] : 0)); start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM) ? parse_byte (start_ch, mbcset) : start_elem->opr.wch); end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) ? parse_byte (end_ch, mbcset) : end_elem->opr.wch); if (start_wc == WEOF || end_wc == WEOF) return REG_ECOLLATE; else if (BE ((syntax & RE_NO_EMPTY_RANGES) && start_wc > end_wc, 0)) return REG_ERANGE; /* Got valid collation sequence values, add them as a new entry. However, for !_LIBC we have no collation elements: if the character set is single byte, the single byte character set that we build below suffices. parse_bracket_exp passes no MBCSET if dfa->mb_cur_max == 1. */ if (mbcset) { /* Check the space of the arrays. */ if (BE (*range_alloc == mbcset->nranges, 0)) { /* There is not enough space, need realloc. */ wchar_t *new_array_start, *new_array_end; Idx new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; /* Use realloc since mbcset->range_starts and mbcset->range_ends are NULL if *range_alloc == 0. */ new_array_start = re_realloc (mbcset->range_starts, wchar_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, wchar_t, new_nranges); if (BE (new_array_start == NULL || new_array_end == NULL, 0)) { re_free (new_array_start); re_free (new_array_end); return REG_ESPACE; } mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_wc; mbcset->range_ends[mbcset->nranges++] = end_wc; } /* Build the table for single byte characters. */ for (wc = 0; wc < SBC_MAX; ++wc) { if (start_wc <= wc && wc <= end_wc) bitset_set (sbcset, wc); } } # else /* not RE_ENABLE_I18N */ { unsigned int ch; start_ch = ((start_elem->type == SB_CHAR ) ? start_elem->opr.ch : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] : 0)); end_ch = ((end_elem->type == SB_CHAR ) ? end_elem->opr.ch : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] : 0)); if (start_ch > end_ch) return REG_ERANGE; /* Build the table for single byte characters. */ for (ch = 0; ch < SBC_MAX; ++ch) if (start_ch <= ch && ch <= end_ch) bitset_set (sbcset, ch); } # endif /* not RE_ENABLE_I18N */ return REG_NOERROR; } #endif /* not _LIBC */ #ifndef _LIBC /* Helper function for parse_bracket_exp only used in case of NOT _LIBC.. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ static reg_errcode_t # ifdef RE_ENABLE_I18N build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, Idx *coll_sym_alloc, const unsigned char *name) # else /* not RE_ENABLE_I18N */ build_collating_symbol (bitset_t sbcset, const unsigned char *name) # endif /* not RE_ENABLE_I18N */ { size_t name_len = strlen ((const char *) name); if (BE (name_len != 1, 0)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } #endif /* not _LIBC */ /* This function parse bracket expression like "[abc]", "[a-c]", "[[.a-a.]]" etc. */ static bin_tree_t * parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) { #ifdef _LIBC const unsigned char *collseqmb; const char *collseqwc; uint32_t nrules; int32_t table_size; const int32_t *symb_table; const unsigned char *extra; /* Local function for parse_bracket_exp used in _LIBC environment. Seek the collating symbol entry corresponding to NAME. Return the index of the symbol in the SYMB_TABLE, or -1 if not found. */ auto inline int32_t __attribute__ ((always_inline)) seek_collating_symbol_entry (const unsigned char *name, size_t name_len) { int32_t elem; for (elem = 0; elem < table_size; elem++) if (symb_table[2 * elem] != 0) { int32_t idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; if (/* Compare the length of the name. */ name_len == extra[idx] /* Compare the name. */ && memcmp (name, &extra[idx + 1], name_len) == 0) /* Yep, this is the entry. */ return elem; } return -1; } /* Local function for parse_bracket_exp used in _LIBC environment. Look up the collation sequence value of BR_ELEM. Return the value if succeeded, UINT_MAX otherwise. */ auto inline unsigned int __attribute__ ((always_inline)) lookup_collation_sequence_value (bracket_elem_t *br_elem) { if (br_elem->type == SB_CHAR) { /* if (MB_CUR_MAX == 1) */ if (nrules == 0) return collseqmb[br_elem->opr.ch]; else { wint_t wc = __btowc (br_elem->opr.ch); return __collseq_table_lookup (collseqwc, wc); } } else if (br_elem->type == MB_CHAR) { if (nrules != 0) return __collseq_table_lookup (collseqwc, br_elem->opr.wch); } else if (br_elem->type == COLL_SYM) { size_t sym_name_len = strlen ((char *) br_elem->opr.name); if (nrules != 0) { int32_t elem, idx; elem = seek_collating_symbol_entry (br_elem->opr.name, sym_name_len); if (elem != -1) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; /* Skip the byte sequence of the collating element. */ idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the multibyte collation sequence value. */ idx += sizeof (unsigned int); /* Skip the wide char sequence of the collating element. */ idx += sizeof (unsigned int) * (1 + *(unsigned int *) (extra + idx)); /* Return the collation sequence value. */ return *(unsigned int *) (extra + idx); } else if (sym_name_len == 1) { /* No valid character. Match it as a single byte character. */ return collseqmb[br_elem->opr.name[0]]; } } else if (sym_name_len == 1) return collseqmb[br_elem->opr.name[0]]; } return UINT_MAX; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument since we may update it. */ auto inline reg_errcode_t __attribute__ ((always_inline)) build_range_exp (bitset_t sbcset, re_charset_t *mbcset, int *range_alloc, bracket_elem_t *start_elem, bracket_elem_t *end_elem) { unsigned int ch; uint32_t start_collseq; uint32_t end_collseq; /* Equivalence Classes and Character Classes can't be a range start/end. */ if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, 0)) return REG_ERANGE; /* FIXME: Implement rational ranges here, too. */ start_collseq = lookup_collation_sequence_value (start_elem); end_collseq = lookup_collation_sequence_value (end_elem); /* Check start/end collation sequence values. */ if (BE (start_collseq == UINT_MAX || end_collseq == UINT_MAX, 0)) return REG_ECOLLATE; if (BE ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq, 0)) return REG_ERANGE; /* Got valid collation sequence values, add them as a new entry. However, if we have no collation elements, and the character set is single byte, the single byte character set that we build below suffices. */ if (nrules > 0 || dfa->mb_cur_max > 1) { /* Check the space of the arrays. */ if (BE (*range_alloc == mbcset->nranges, 0)) { /* There is not enough space, need realloc. */ uint32_t *new_array_start; uint32_t *new_array_end; Idx new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; new_array_start = re_realloc (mbcset->range_starts, uint32_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, uint32_t, new_nranges); if (BE (new_array_start == NULL || new_array_end == NULL, 0)) return REG_ESPACE; mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_collseq; mbcset->range_ends[mbcset->nranges++] = end_collseq; } /* Build the table for single byte characters. */ for (ch = 0; ch < SBC_MAX; ch++) { uint32_t ch_collseq; /* if (MB_CUR_MAX == 1) */ if (nrules == 0) ch_collseq = collseqmb[ch]; else ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch)); if (start_collseq <= ch_collseq && ch_collseq <= end_collseq) bitset_set (sbcset, ch); } return REG_NOERROR; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ auto inline reg_errcode_t __attribute__ ((always_inline)) build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, Idx *coll_sym_alloc, const unsigned char *name) { int32_t elem, idx; size_t name_len = strlen ((const char *) name); if (nrules != 0) { elem = seek_collating_symbol_entry (name, name_len); if (elem != -1) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; } else if (name_len == 1) { /* No valid character, treat it as a normal character. */ bitset_set (sbcset, name[0]); return REG_NOERROR; } else return REG_ECOLLATE; /* Got valid collation sequence, add it as a new entry. */ /* Check the space of the arrays. */ if (BE (*coll_sym_alloc == mbcset->ncoll_syms, 0)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->ncoll_syms is 0. */ Idx new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1; /* Use realloc since mbcset->coll_syms is NULL if *alloc == 0. */ int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t, new_coll_sym_alloc); if (BE (new_coll_syms == NULL, 0)) return REG_ESPACE; mbcset->coll_syms = new_coll_syms; *coll_sym_alloc = new_coll_sym_alloc; } mbcset->coll_syms[mbcset->ncoll_syms++] = idx; return REG_NOERROR; } else { if (BE (name_len != 1, 0)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } } #endif re_token_t br_token; re_bitset_ptr_t sbcset; #ifdef RE_ENABLE_I18N re_charset_t *mbcset; Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0; Idx equiv_class_alloc = 0, char_class_alloc = 0; #endif /* not RE_ENABLE_I18N */ bool non_match = false; bin_tree_t *work_tree; int token_len; bool first_round = true; #ifdef _LIBC collseqmb = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules) { /* if (MB_CUR_MAX > 1) */ collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); } #endif sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); #ifdef RE_ENABLE_I18N mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); #endif /* RE_ENABLE_I18N */ #ifdef RE_ENABLE_I18N if (BE (sbcset == NULL || mbcset == NULL, 0)) #else if (BE (sbcset == NULL, 0)) #endif /* RE_ENABLE_I18N */ { re_free (sbcset); #ifdef RE_ENABLE_I18N re_free (mbcset); #endif *err = REG_ESPACE; return NULL; } token_len = peek_token_bracket (token, regexp, syntax); if (BE (token->type == END_OF_RE, 0)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } if (token->type == OP_NON_MATCH_LIST) { #ifdef RE_ENABLE_I18N mbcset->non_match = 1; #endif /* not RE_ENABLE_I18N */ non_match = true; if (syntax & RE_HAT_LISTS_NOT_NEWLINE) bitset_set (sbcset, '\n'); re_string_skip_bytes (regexp, token_len); /* Skip a token. */ token_len = peek_token_bracket (token, regexp, syntax); if (BE (token->type == END_OF_RE, 0)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } } /* We treat the first ']' as a normal character. */ if (token->type == OP_CLOSE_BRACKET) token->type = CHARACTER; while (1) { bracket_elem_t start_elem, end_elem; unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE]; unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE]; reg_errcode_t ret; int token_len2 = 0; bool is_range_exp = false; re_token_t token2; start_elem.opr.name = start_name_buf; start_elem.type = COLL_SYM; ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, syntax, first_round); if (BE (ret != REG_NOERROR, 0)) { *err = ret; goto parse_bracket_exp_free_return; } first_round = false; /* Get information about the next token. We need it in any case. */ token_len = peek_token_bracket (token, regexp, syntax); /* Do not check for ranges if we know they are not allowed. */ if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS) { if (BE (token->type == END_OF_RE, 0)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token->type == OP_CHARSET_RANGE) { re_string_skip_bytes (regexp, token_len); /* Skip '-'. */ token_len2 = peek_token_bracket (&token2, regexp, syntax); if (BE (token2.type == END_OF_RE, 0)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token2.type == OP_CLOSE_BRACKET) { /* We treat the last '-' as a normal character. */ re_string_skip_bytes (regexp, -token_len); token->type = CHARACTER; } else is_range_exp = true; } } if (is_range_exp == true) { end_elem.opr.name = end_name_buf; end_elem.type = COLL_SYM; ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, dfa, syntax, true); if (BE (ret != REG_NOERROR, 0)) { *err = ret; goto parse_bracket_exp_free_return; } token_len = peek_token_bracket (token, regexp, syntax); #ifdef _LIBC *err = build_range_exp (sbcset, mbcset, &range_alloc, &start_elem, &end_elem); #else # ifdef RE_ENABLE_I18N *err = build_range_exp (syntax, sbcset, dfa->mb_cur_max > 1 ? mbcset : NULL, &range_alloc, &start_elem, &end_elem); # else *err = build_range_exp (syntax, sbcset, &start_elem, &end_elem); # endif #endif /* RE_ENABLE_I18N */ if (BE (*err != REG_NOERROR, 0)) goto parse_bracket_exp_free_return; } else { switch (start_elem.type) { case SB_CHAR: bitset_set (sbcset, start_elem.opr.ch); break; #ifdef RE_ENABLE_I18N case MB_CHAR: /* Check whether the array has enough space. */ if (BE (mbchar_alloc == mbcset->nmbchars, 0)) { wchar_t *new_mbchars; /* Not enough, realloc it. */ /* +1 in case of mbcset->nmbchars is 0. */ mbchar_alloc = 2 * mbcset->nmbchars + 1; /* Use realloc since array is NULL if *alloc == 0. */ new_mbchars = re_realloc (mbcset->mbchars, wchar_t, mbchar_alloc); if (BE (new_mbchars == NULL, 0)) goto parse_bracket_exp_espace; mbcset->mbchars = new_mbchars; } mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch; break; #endif /* RE_ENABLE_I18N */ case EQUIV_CLASS: *err = build_equiv_class (sbcset, #ifdef RE_ENABLE_I18N mbcset, &equiv_class_alloc, #endif /* RE_ENABLE_I18N */ start_elem.opr.name); if (BE (*err != REG_NOERROR, 0)) goto parse_bracket_exp_free_return; break; case COLL_SYM: *err = build_collating_symbol (sbcset, #ifdef RE_ENABLE_I18N mbcset, &coll_sym_alloc, #endif /* RE_ENABLE_I18N */ start_elem.opr.name); if (BE (*err != REG_NOERROR, 0)) goto parse_bracket_exp_free_return; break; case CHAR_CLASS: *err = build_charclass (regexp->trans, sbcset, #ifdef RE_ENABLE_I18N mbcset, &char_class_alloc, #endif /* RE_ENABLE_I18N */ (const char *) start_elem.opr.name, syntax); if (BE (*err != REG_NOERROR, 0)) goto parse_bracket_exp_free_return; break; default: assert (0); break; } } if (BE (token->type == END_OF_RE, 0)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token->type == OP_CLOSE_BRACKET) break; } re_string_skip_bytes (regexp, token_len); /* Skip a token. */ /* If it is non-matching list. */ if (non_match) bitset_not (sbcset); #ifdef RE_ENABLE_I18N /* Ensure only single byte characters are set. */ if (dfa->mb_cur_max > 1) bitset_mask (sbcset, dfa->sb_char); if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes || mbcset->non_match))) { bin_tree_t *mbc_tree; int sbc_idx; /* Build a tree for complex bracket. */ dfa->has_mb_node = 1; br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (BE (mbc_tree == NULL, 0)) goto parse_bracket_exp_espace; for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx) if (sbcset[sbc_idx]) break; /* If there are no bits set in sbcset, there is no point of having both SIMPLE_BRACKET and COMPLEX_BRACKET. */ if (sbc_idx < BITSET_WORDS) { /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; work_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (BE (work_tree == NULL, 0)) goto parse_bracket_exp_espace; /* Then join them by ALT node. */ work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); if (BE (work_tree == NULL, 0)) goto parse_bracket_exp_espace; } else { re_free (sbcset); work_tree = mbc_tree; } } else #endif /* not RE_ENABLE_I18N */ { #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; work_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (BE (work_tree == NULL, 0)) goto parse_bracket_exp_espace; } return work_tree; parse_bracket_exp_espace: *err = REG_ESPACE; parse_bracket_exp_free_return: re_free (sbcset); #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* RE_ENABLE_I18N */ return NULL; } /* Parse an element in the bracket expression. */ static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax, bool accept_hyphen) { #ifdef RE_ENABLE_I18N int cur_char_size; cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp)); if (cur_char_size > 1) { elem->type = MB_CHAR; elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp)); re_string_skip_bytes (regexp, cur_char_size); return REG_NOERROR; } #endif /* RE_ENABLE_I18N */ re_string_skip_bytes (regexp, token_len); /* Skip a token. */ if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS || token->type == OP_OPEN_EQUIV_CLASS) return parse_bracket_symbol (elem, regexp, token); if (BE (token->type == OP_CHARSET_RANGE, 0) && !accept_hyphen) { /* A '-' must only appear as anything but a range indicator before the closing bracket. Everything else is an error. */ re_token_t token2; (void) peek_token_bracket (&token2, regexp, syntax); if (token2.type != OP_CLOSE_BRACKET) /* The actual error value is not standardized since this whole case is undefined. But ERANGE makes good sense. */ return REG_ERANGE; } elem->type = SB_CHAR; elem->opr.ch = token->opr.c; return REG_NOERROR; } /* Parse a bracket symbol in the bracket expression. Bracket symbols are such as [::], [..], and [==]. */ static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token) { unsigned char ch, delim = token->opr.c; int i = 0; if (re_string_eoi(regexp)) return REG_EBRACK; for (;; ++i) { if (i >= BRACKET_NAME_BUF_SIZE) return REG_EBRACK; if (token->type == OP_OPEN_CHAR_CLASS) ch = re_string_fetch_byte_case (regexp); else ch = re_string_fetch_byte (regexp); if (re_string_eoi(regexp)) return REG_EBRACK; if (ch == delim && re_string_peek_byte (regexp, 0) == ']') break; elem->opr.name[i] = ch; } re_string_skip_bytes (regexp, 1); elem->opr.name[i] = '\0'; switch (token->type) { case OP_OPEN_COLL_ELEM: elem->type = COLL_SYM; break; case OP_OPEN_EQUIV_CLASS: elem->type = EQUIV_CLASS; break; case OP_OPEN_CHAR_CLASS: elem->type = CHAR_CLASS; break; default: break; } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the equivalence class which is represented by NAME. The result are written to MBCSET and SBCSET. EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, is a pointer argument since we may update it. */ static reg_errcode_t #ifdef RE_ENABLE_I18N build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, Idx *equiv_class_alloc, const unsigned char *name) #else /* not RE_ENABLE_I18N */ build_equiv_class (bitset_t sbcset, const unsigned char *name) #endif /* not RE_ENABLE_I18N */ { #ifdef _LIBC uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { const int32_t *table, *indirect; const unsigned char *weights, *extra, *cp; unsigned char char_buf[2]; int32_t idx1, idx2; unsigned int ch; size_t len; /* Calculate the index for equivalence class. */ cp = name; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); idx1 = findidx (table, indirect, extra, &cp, -1); if (BE (idx1 == 0 || *cp != '\0', 0)) /* This isn't a valid character. */ return REG_ECOLLATE; /* Build single byte matching table for this equivalence class. */ len = weights[idx1 & 0xffffff]; for (ch = 0; ch < SBC_MAX; ++ch) { char_buf[0] = ch; cp = char_buf; idx2 = findidx (table, indirect, extra, &cp, 1); /* idx2 = table[ch]; */ if (idx2 == 0) /* This isn't a valid character. */ continue; /* Compare only if the length matches and the collation rule index is the same. */ if (len == weights[idx2 & 0xffffff] && (idx1 >> 24) == (idx2 >> 24)) { int cnt = 0; while (cnt <= len && weights[(idx1 & 0xffffff) + 1 + cnt] == weights[(idx2 & 0xffffff) + 1 + cnt]) ++cnt; if (cnt > len) bitset_set (sbcset, ch); } } /* Check whether the array has enough space. */ if (BE (*equiv_class_alloc == mbcset->nequiv_classes, 0)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nequiv_classes is 0. */ Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1; /* Use realloc since the array is NULL if *alloc == 0. */ int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes, int32_t, new_equiv_class_alloc); if (BE (new_equiv_classes == NULL, 0)) return REG_ESPACE; mbcset->equiv_classes = new_equiv_classes; *equiv_class_alloc = new_equiv_class_alloc; } mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1; } else #endif /* _LIBC */ { if (BE (strlen ((const char *) name) != 1, 0)) return REG_ECOLLATE; bitset_set (sbcset, *name); } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the character class which is represented by NAME. The result are written to MBCSET and SBCSET. CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, is a pointer argument since we may update it. */ static reg_errcode_t #ifdef RE_ENABLE_I18N build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, re_charset_t *mbcset, Idx *char_class_alloc, const char *class_name, reg_syntax_t syntax) #else /* not RE_ENABLE_I18N */ build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, const char *class_name, reg_syntax_t syntax) #endif /* not RE_ENABLE_I18N */ { int i; const char *name = class_name; /* In case of REG_ICASE "upper" and "lower" match the both of upper and lower cases. */ if ((syntax & RE_ICASE) && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0)) name = "alpha"; #ifdef RE_ENABLE_I18N /* Check the space of the arrays. */ if (BE (*char_class_alloc == mbcset->nchar_classes, 0)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nchar_classes is 0. */ Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1; /* Use realloc since array is NULL if *alloc == 0. */ wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t, new_char_class_alloc); if (BE (new_char_classes == NULL, 0)) return REG_ESPACE; mbcset->char_classes = new_char_classes; *char_class_alloc = new_char_class_alloc; } mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name); #endif /* RE_ENABLE_I18N */ #define BUILD_CHARCLASS_LOOP(ctype_func) \ do { \ if (BE (trans != NULL, 0)) \ { \ for (i = 0; i < SBC_MAX; ++i) \ if (ctype_func (i)) \ bitset_set (sbcset, trans[i]); \ } \ else \ { \ for (i = 0; i < SBC_MAX; ++i) \ if (ctype_func (i)) \ bitset_set (sbcset, i); \ } \ } while (0) if (strcmp (name, "alnum") == 0) BUILD_CHARCLASS_LOOP (isalnum); else if (strcmp (name, "cntrl") == 0) BUILD_CHARCLASS_LOOP (iscntrl); else if (strcmp (name, "lower") == 0) BUILD_CHARCLASS_LOOP (islower); else if (strcmp (name, "space") == 0) BUILD_CHARCLASS_LOOP (isspace); else if (strcmp (name, "alpha") == 0) BUILD_CHARCLASS_LOOP (isalpha); else if (strcmp (name, "digit") == 0) BUILD_CHARCLASS_LOOP (isdigit); else if (strcmp (name, "print") == 0) BUILD_CHARCLASS_LOOP (isprint); else if (strcmp (name, "upper") == 0) BUILD_CHARCLASS_LOOP (isupper); else if (strcmp (name, "blank") == 0) BUILD_CHARCLASS_LOOP (isblank); else if (strcmp (name, "graph") == 0) BUILD_CHARCLASS_LOOP (isgraph); else if (strcmp (name, "punct") == 0) BUILD_CHARCLASS_LOOP (ispunct); else if (strcmp (name, "xdigit") == 0) BUILD_CHARCLASS_LOOP (isxdigit); else return REG_ECTYPE; return REG_NOERROR; } static bin_tree_t * build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, const char *class_name, const char *extra, bool non_match, reg_errcode_t *err) { re_bitset_ptr_t sbcset; #ifdef RE_ENABLE_I18N re_charset_t *mbcset; Idx alloc = 0; #endif /* not RE_ENABLE_I18N */ reg_errcode_t ret; re_token_t br_token; bin_tree_t *tree; sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); if (BE (sbcset == NULL, 0)) { *err = REG_ESPACE; return NULL; } #ifdef RE_ENABLE_I18N mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); if (BE (mbcset == NULL, 0)) { re_free (sbcset); *err = REG_ESPACE; return NULL; } mbcset->non_match = non_match; #endif /* RE_ENABLE_I18N */ /* We don't care the syntax in this case. */ ret = build_charclass (trans, sbcset, #ifdef RE_ENABLE_I18N mbcset, &alloc, #endif /* RE_ENABLE_I18N */ class_name, 0); if (BE (ret != REG_NOERROR, 0)) { re_free (sbcset); #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* RE_ENABLE_I18N */ *err = ret; return NULL; } /* \w match '_' also. */ for (; *extra; extra++) bitset_set (sbcset, *extra); /* If it is non-matching list. */ if (non_match) bitset_not (sbcset); #ifdef RE_ENABLE_I18N /* Ensure only single byte characters are set. */ if (dfa->mb_cur_max > 1) bitset_mask (sbcset, dfa->sb_char); #endif /* Build a tree for simple bracket. */ #if defined GCC_LINT || defined lint memset (&br_token, 0, sizeof br_token); #endif br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; tree = create_token_tree (dfa, NULL, NULL, &br_token); if (BE (tree == NULL, 0)) goto build_word_op_espace; #ifdef RE_ENABLE_I18N if (dfa->mb_cur_max > 1) { bin_tree_t *mbc_tree; /* Build a tree for complex bracket. */ br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; dfa->has_mb_node = 1; mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (BE (mbc_tree == NULL, 0)) goto build_word_op_espace; /* Then join them by ALT node. */ tree = create_tree (dfa, tree, mbc_tree, OP_ALT); if (BE (mbc_tree != NULL, 1)) return tree; } else { free_charset (mbcset); return tree; } #else /* not RE_ENABLE_I18N */ return tree; #endif /* not RE_ENABLE_I18N */ build_word_op_espace: re_free (sbcset); #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* RE_ENABLE_I18N */ *err = REG_ESPACE; return NULL; } /* This is intended for the expressions like "a{1,3}". Fetch a number from 'input', and return the number. Return -1 if the number field is empty like "{,1}". Return RE_DUP_MAX + 1 if the number field is too large. Return -2 if an error occurred. */ static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) { Idx num = -1; unsigned char c; while (1) { fetch_token (token, input, syntax); c = token->opr.c; if (BE (token->type == END_OF_RE, 0)) return -2; if (token->type == OP_CLOSE_DUP_NUM || c == ',') break; num = ((token->type != CHARACTER || c < '0' || '9' < c || num == -2) ? -2 : num == -1 ? c - '0' : MIN (RE_DUP_MAX + 1, num * 10 + c - '0')); } return num; } #ifdef RE_ENABLE_I18N static void free_charset (re_charset_t *cset) { re_free (cset->mbchars); # ifdef _LIBC re_free (cset->coll_syms); re_free (cset->equiv_classes); re_free (cset->range_starts); re_free (cset->range_ends); # endif re_free (cset->char_classes); re_free (cset); } #endif /* RE_ENABLE_I18N */ /* Functions for binary tree operation. */ /* Create a tree node. */ static bin_tree_t * create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, re_token_type_t type) { re_token_t t; #if defined GCC_LINT || defined lint memset (&t, 0, sizeof t); #endif t.type = type; return create_token_tree (dfa, left, right, &t); } static bin_tree_t * create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, const re_token_t *token) { bin_tree_t *tree; if (BE (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE, 0)) { bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1); if (storage == NULL) return NULL; storage->next = dfa->str_tree_storage; dfa->str_tree_storage = storage; dfa->str_tree_storage_idx = 0; } tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++]; tree->parent = NULL; tree->left = left; tree->right = right; tree->token = *token; tree->token.duplicated = 0; tree->token.opt_subexp = 0; tree->first = NULL; tree->next = NULL; tree->node_idx = -1; if (left != NULL) left->parent = tree; if (right != NULL) right->parent = tree; return tree; } /* Mark the tree SRC as an optional subexpression. To be called from preorder or postorder. */ static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node) { Idx idx = (uintptr_t) extra; if (node->token.type == SUBEXP && node->token.opr.idx == idx) node->token.opt_subexp = 1; return REG_NOERROR; } /* Free the allocated memory inside NODE. */ static void free_token (re_token_t *node) { #ifdef RE_ENABLE_I18N if (node->type == COMPLEX_BRACKET && node->duplicated == 0) free_charset (node->opr.mbcset); else #endif /* RE_ENABLE_I18N */ if (node->type == SIMPLE_BRACKET && node->duplicated == 0) re_free (node->opr.sbcset); } /* Worker function for tree walking. Free the allocated memory inside NODE and its children. */ static reg_errcode_t free_tree (void *extra, bin_tree_t *node) { free_token (&node->token); return REG_NOERROR; } /* Duplicate the node SRC, and return new node. This is a preorder visit similar to the one implemented by the generic visitor, but we need more infrastructure to maintain two parallel trees --- so, it's easier to duplicate. */ static bin_tree_t * duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa) { const bin_tree_t *node; bin_tree_t *dup_root; bin_tree_t **p_new = &dup_root, *dup_node = root->parent; for (node = root; ; ) { /* Create a new tree and link it back to the current parent. */ *p_new = create_token_tree (dfa, NULL, NULL, &node->token); if (*p_new == NULL) return NULL; (*p_new)->parent = dup_node; (*p_new)->token.duplicated = 1; dup_node = *p_new; /* Go to the left node, or up and to the right. */ if (node->left) { node = node->left; p_new = &dup_node->left; } else { const bin_tree_t *prev = NULL; while (node->right == prev || node->right == NULL) { prev = node; node = node->parent; dup_node = dup_node->parent; if (!node) return dup_root; } node = node->right; p_new = &dup_node->right; } } } gnuastro-0.5/bootstrapped/lib/rawmemchr.c0000644000175000017500000001220213217200021015527 00000000000000/* Searching in a string. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include /* Find the first occurrence of C in S. */ void * rawmemchr (const void *s, int c_in) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned char c; c = (unsigned char) c_in; /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; (size_t) char_ptr % sizeof (longword) != 0; ++char_ptr) if (*char_ptr == c) return (void *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to NUL or c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 is zero. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. The test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. This test can read beyond the end of a string, depending on where C_IN is encountered. However, this is considered safe since the initialization phase ensured that the read will be aligned, therefore, the read will not cross page boundaries and will not cause a fault. */ while (1) { longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & (repeated_one << 7)) != 0) break; longword_ptr++; } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that one of the sizeof (longword) bytes starting at char_ptr is == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ char_ptr = (unsigned char *) longword_ptr; while (*char_ptr != c) char_ptr++; return (void *) char_ptr; } gnuastro-0.5/bootstrapped/lib/nl_langinfo.c0000644000175000017500000002202013217200021016027 00000000000000/* nl_langinfo() replacement: query locale dependent information. Copyright (C) 2007-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include # include #endif /* Return the codeset of the current locale, if this is easily deducible. Otherwise, return "". */ static char * ctype_codeset (void) { static char buf[2 + 10 + 1]; char const *locale = setlocale (LC_CTYPE, NULL); char *codeset = buf; size_t codesetlen; codeset[0] = '\0'; if (locale && locale[0]) { /* If the locale name contains an encoding after the dot, return it. */ char *dot = strchr (locale, '.'); if (dot) { /* Look for the possible @... trailer and remove it, if any. */ char *codeset_start = dot + 1; char const *modifier = strchr (codeset_start, '@'); if (! modifier) codeset = codeset_start; else { codesetlen = modifier - codeset_start; if (codesetlen < sizeof buf) { codeset = memcpy (buf, codeset_start, codesetlen); codeset[codesetlen] = '\0'; } } } } #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* If setlocale is successful, it returns the number of the codepage, as a string. Otherwise, fall back on Windows API GetACP, which returns the locale's codepage as a number (although this doesn't change according to what the 'setlocale' call specified). Either way, prepend "CP" to make it a valid codeset name. */ codesetlen = strlen (codeset); if (0 < codesetlen && codesetlen < sizeof buf - 2) memmove (buf + 2, codeset, codesetlen + 1); else sprintf (buf + 2, "%u", GetACP ()); codeset = memcpy (buf, "CP", 2); #endif return codeset; } #if REPLACE_NL_LANGINFO /* Override nl_langinfo with support for added nl_item values. */ # undef nl_langinfo char * rpl_nl_langinfo (nl_item item) { switch (item) { # if GNULIB_defined_CODESET case CODESET: return ctype_codeset (); # endif # if GNULIB_defined_T_FMT_AMPM case T_FMT_AMPM: return (char *) "%I:%M:%S %p"; # endif # if GNULIB_defined_ERA case ERA: /* The format is not standardized. In glibc it is a sequence of strings of the form "direction:offset:start_date:end_date:era_name:era_format" with an empty string at the end. */ return (char *) ""; case ERA_D_FMT: /* The %Ex conversion in strftime behaves like %x if the locale does not have an alternative time format. */ item = D_FMT; break; case ERA_D_T_FMT: /* The %Ec conversion in strftime behaves like %c if the locale does not have an alternative time format. */ item = D_T_FMT; break; case ERA_T_FMT: /* The %EX conversion in strftime behaves like %X if the locale does not have an alternative time format. */ item = T_FMT; break; case ALT_DIGITS: /* The format is not standardized. In glibc it is a sequence of 10 strings, appended in memory. */ return (char *) "\0\0\0\0\0\0\0\0\0\0"; # endif # if GNULIB_defined_YESEXPR || !FUNC_NL_LANGINFO_YESEXPR_WORKS case YESEXPR: return (char *) "^[yY]"; case NOEXPR: return (char *) "^[nN]"; # endif default: break; } return nl_langinfo (item); } #else /* Provide nl_langinfo from scratch, either for native MS-Windows, or for old Unix platforms without locales, such as Linux libc5 or BeOS. */ # include char * nl_langinfo (nl_item item) { static char nlbuf[100]; struct tm tmm = { 0 }; switch (item) { /* nl_langinfo items of the LC_CTYPE category */ case CODESET: { char *codeset = ctype_codeset (); if (*codeset) return codeset; } # ifdef __BEOS__ return (char *) "UTF-8"; # else return (char *) "ISO-8859-1"; # endif /* nl_langinfo items of the LC_NUMERIC category */ case RADIXCHAR: return localeconv () ->decimal_point; case THOUSEP: return localeconv () ->thousands_sep; case GROUPING: return localeconv () ->grouping; /* nl_langinfo items of the LC_TIME category. TODO: Really use the locale. */ case D_T_FMT: case ERA_D_T_FMT: return (char *) "%a %b %e %H:%M:%S %Y"; case D_FMT: case ERA_D_FMT: return (char *) "%m/%d/%y"; case T_FMT: case ERA_T_FMT: return (char *) "%H:%M:%S"; case T_FMT_AMPM: return (char *) "%I:%M:%S %p"; case AM_STR: if (!strftime (nlbuf, sizeof nlbuf, "%p", &tmm)) return (char *) "AM"; return nlbuf; case PM_STR: tmm.tm_hour = 12; if (!strftime (nlbuf, sizeof nlbuf, "%p", &tmm)) return (char *) "PM"; return nlbuf; case DAY_1: case DAY_2: case DAY_3: case DAY_4: case DAY_5: case DAY_6: case DAY_7: { static char const days[][sizeof "Wednesday"] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; tmm.tm_wday = item - DAY_1; if (!strftime (nlbuf, sizeof nlbuf, "%A", &tmm)) return (char *) days[item - DAY_1]; return nlbuf; } case ABDAY_1: case ABDAY_2: case ABDAY_3: case ABDAY_4: case ABDAY_5: case ABDAY_6: case ABDAY_7: { static char const abdays[][sizeof "Sun"] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; tmm.tm_wday = item - ABDAY_1; if (!strftime (nlbuf, sizeof nlbuf, "%a", &tmm)) return (char *) abdays[item - ABDAY_1]; return nlbuf; } case MON_1: case MON_2: case MON_3: case MON_4: case MON_5: case MON_6: case MON_7: case MON_8: case MON_9: case MON_10: case MON_11: case MON_12: { static char const months[][sizeof "September"] = { "January", "February", "March", "April", "May", "June", "July", "September", "October", "November", "December" }; tmm.tm_mon = item - MON_1; if (!strftime (nlbuf, sizeof nlbuf, "%B", &tmm)) return (char *) months[item - MON_1]; return nlbuf; } case ABMON_1: case ABMON_2: case ABMON_3: case ABMON_4: case ABMON_5: case ABMON_6: case ABMON_7: case ABMON_8: case ABMON_9: case ABMON_10: case ABMON_11: case ABMON_12: { static char const abmonths[][sizeof "Jan"] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Sep", "Oct", "Nov", "Dec" }; tmm.tm_mon = item - ABMON_1; if (!strftime (nlbuf, sizeof nlbuf, "%b", &tmm)) return (char *) abmonths[item - ABMON_1]; return nlbuf; } case ERA: return (char *) ""; case ALT_DIGITS: return (char *) "\0\0\0\0\0\0\0\0\0\0"; /* nl_langinfo items of the LC_MONETARY category. */ case CRNCYSTR: return localeconv () ->currency_symbol; case INT_CURR_SYMBOL: return localeconv () ->int_curr_symbol; case MON_DECIMAL_POINT: return localeconv () ->mon_decimal_point; case MON_THOUSANDS_SEP: return localeconv () ->mon_thousands_sep; case MON_GROUPING: return localeconv () ->mon_grouping; case POSITIVE_SIGN: return localeconv () ->positive_sign; case NEGATIVE_SIGN: return localeconv () ->negative_sign; case FRAC_DIGITS: return & localeconv () ->frac_digits; case INT_FRAC_DIGITS: return & localeconv () ->int_frac_digits; case P_CS_PRECEDES: return & localeconv () ->p_cs_precedes; case N_CS_PRECEDES: return & localeconv () ->n_cs_precedes; case P_SEP_BY_SPACE: return & localeconv () ->p_sep_by_space; case N_SEP_BY_SPACE: return & localeconv () ->n_sep_by_space; case P_SIGN_POSN: return & localeconv () ->p_sign_posn; case N_SIGN_POSN: return & localeconv () ->n_sign_posn; /* nl_langinfo items of the LC_MESSAGES category TODO: Really use the locale. */ case YESEXPR: return (char *) "^[yY]"; case NOEXPR: return (char *) "^[nN]"; default: return (char *) ""; } } #endif gnuastro-0.5/bootstrapped/lib/msvc-nothrow.c0000644000175000017500000000251513217200021016216 00000000000000/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include "msvc-nothrow.h" /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef _get_osfhandle #if HAVE_MSVC_INVALID_PARAMETER_HANDLER intptr_t _gl_nothrow_get_osfhandle (int fd) { intptr_t result; TRY_MSVC_INVAL { result = _get_osfhandle (fd); } CATCH_MSVC_INVAL { result = (intptr_t) INVALID_HANDLE_VALUE; } DONE_MSVC_INVAL; return result; } #endif gnuastro-0.5/bootstrapped/lib/msvc-inval.c0000644000175000017500000000751213217200021015631 00000000000000/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include "msvc-inval.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* Get _invalid_parameter_handler type and _set_invalid_parameter_handler declaration. */ # include # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } # else /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include # if defined _MSC_VER static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # else /* An index to thread-local storage. */ static DWORD tls_index; static int tls_initialized /* = 0 */; /* Used as a fallback only. */ static struct gl_msvc_inval_per_thread not_per_thread; struct gl_msvc_inval_per_thread * gl_msvc_inval_current (void) { if (!tls_initialized) { tls_index = TlsAlloc (); tls_initialized = 1; } if (tls_index == TLS_OUT_OF_INDEXES) /* TlsAlloc had failed. */ return ¬_per_thread; else { struct gl_msvc_inval_per_thread *pointer = (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); if (pointer == NULL) { /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ pointer = (struct gl_msvc_inval_per_thread *) malloc (sizeof (struct gl_msvc_inval_per_thread)); if (pointer == NULL) /* Could not allocate memory. Use the global storage. */ pointer = ¬_per_thread; TlsSetValue (tls_index, pointer); } return pointer; } } static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); if (current->restart_valid) longjmp (current->restart, 1); else /* An invalid parameter notification from outside the gnulib code. Give the caller a chance to intervene. */ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # endif # endif static int gl_msvc_inval_initialized /* = 0 */; void gl_msvc_inval_ensure_handler (void) { if (gl_msvc_inval_initialized == 0) { _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); gl_msvc_inval_initialized = 1; } } #endif gnuastro-0.5/bootstrapped/lib/mempcpy.c0000644000175000017500000000200313217200021015212 00000000000000/* Copy memory area and return pointer after last written byte. Copyright (C) 2003, 2007, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ void * mempcpy (void *dest, const void *src, size_t n) { return (char *) memcpy (dest, src, n) + n; } gnuastro-0.5/bootstrapped/lib/memchr.c0000644000175000017500000001334713217200021015030 00000000000000/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2017 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), and implemented by Roland McGrath (roland@ai.mit.edu). NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _LIBC # include #endif #include #include #if defined _LIBC # include #else # define reg_char char #endif #include #if HAVE_BP_SYM_H || defined _LIBC # include #else # define BP_SYM(sym) sym #endif #undef __memchr #ifdef _LIBC # undef memchr #endif #ifndef weak_alias # define __memchr memchr #endif /* Search no more than N bytes of S for C. */ void * __memchr (void const *s, int c_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned reg_char c; c = (unsigned char) c_in; /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; n > 0 && (size_t) char_ptr % sizeof (longword) != 0; --n, ++char_ptr) if (*char_ptr == c) return (void *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 is zero. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. So, the test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. */ while (n >= sizeof (longword)) { longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & (repeated_one << 7)) != 0) break; longword_ptr++; n -= sizeof (longword); } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that either n < sizeof (longword), or one of the sizeof (longword) bytes starting at char_ptr is == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ for (; n > 0; --n, ++char_ptr) { if (*char_ptr == c) return (void *) char_ptr; } return NULL; } #ifdef weak_alias weak_alias (__memchr, BP_SYM (memchr)) #endif gnuastro-0.5/bootstrapped/lib/mbtowc.c0000644000175000017500000000164713217200021015050 00000000000000/* Convert multibyte character to wide character. Copyright (C) 2011-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2011. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include #include "mbtowc-impl.h" gnuastro-0.5/bootstrapped/lib/mbsinit.c0000644000175000017500000000453713217200021015223 00000000000000/* Test for initial conversion state. Copyright (C) 2008-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include "verify.h" #if GNULIB_defined_mbstate_t /* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs() and wcrtomb(), wcsrtombs(). We assume that - sizeof (mbstate_t) >= 4, - only stateless encodings are supported (such as UTF-8 and EUC-JP, but not ISO-2022 variants), - for each encoding, the number of bytes for a wide character is <= 4. (This maximum is attained for UTF-8, GB18030, EUC-TW.) We define the meaning of mbstate_t as follows: - In mb -> wc direction, mbstate_t's first byte contains the number of buffered bytes (in the range 0..3), followed by up to 3 buffered bytes. See mbrtowc.c. - In wc -> mb direction, mbstate_t contains no information. In other words, it is always in the initial state. */ verify (sizeof (mbstate_t) >= 4); int mbsinit (const mbstate_t *ps) { const char *pstate = (const char *)ps; return pstate == NULL || pstate[0] == 0; } #else int mbsinit (const mbstate_t *ps) { # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* Native Windows. */ # ifdef __MINGW32__ /* On mingw, 'mbstate_t' is defined as 'int'. */ return ps == NULL || *ps == 0; # else /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4-bytes matter. */ return ps == NULL || *(const unsigned int *)ps == 0; # endif # else /* Minix, HP-UX 11.00, Solaris 2.6, Interix, ... */ /* Maybe this definition works, maybe not... */ return ps == NULL || *(const char *)ps == 0; # endif } #endif gnuastro-0.5/bootstrapped/lib/mbrtowc.c0000644000175000017500000002545613217200021015236 00000000000000/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #if C_LOCALE_MAYBE_EILSEQ # include "hard-locale.h" # include #endif #if GNULIB_defined_mbstate_t /* Implement mbrtowc() on top of mbtowc(). */ # include # include # include "localcharset.h" # include "streq.h" # include "verify.h" #ifndef FALLTHROUGH # if __GNUC__ < 7 # define FALLTHROUGH ((void) 0) # else # define FALLTHROUGH __attribute__ ((__fallthrough__)) # endif #endif verify (sizeof (mbstate_t) >= 4); static char internal_state[4]; size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { char *pstate = (char *)ps; if (s == NULL) { pwc = NULL; s = ""; n = 1; } if (n == 0) return (size_t)(-2); /* Here n > 0. */ if (pstate == NULL) pstate = internal_state; { size_t nstate = pstate[0]; char buf[4]; const char *p; size_t m; switch (nstate) { case 0: p = s; m = n; break; case 3: buf[2] = pstate[3]; FALLTHROUGH; case 2: buf[1] = pstate[2]; FALLTHROUGH; case 1: buf[0] = pstate[1]; p = buf; m = nstate; buf[m++] = s[0]; if (n >= 2 && m < 4) { buf[m++] = s[1]; if (n >= 3 && m < 4) buf[m++] = s[2]; } break; default: errno = EINVAL; return (size_t)(-1); } /* Here m > 0. */ # if __GLIBC__ || defined __UCLIBC__ /* Work around bug */ mbtowc (NULL, NULL, 0); # endif { int res = mbtowc (pwc, p, m); if (res >= 0) { if (pwc != NULL && ((*pwc == 0) != (res == 0))) abort (); if (nstate >= (res > 0 ? res : 1)) abort (); res -= nstate; pstate[0] = 0; return res; } /* mbtowc does not distinguish between invalid and incomplete multibyte sequences. But mbrtowc needs to make this distinction. There are two possible approaches: - Use iconv() and its return value. - Use built-in knowledge about the possible encodings. Given the low quality of implementation of iconv() on the systems that lack mbrtowc(), we use the second approach. The possible encodings are: - 8-bit encodings, - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, - UTF-8. Use specialized code for each. */ if (m >= 4 || m >= MB_CUR_MAX) goto invalid; /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ { const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) { /* Cf. unistr/u8-mblen.c. */ unsigned char c = (unsigned char) p[0]; if (c >= 0xc2) { if (c < 0xe0) { if (m == 1) goto incomplete; } else if (c < 0xf0) { if (m == 1) goto incomplete; if (m == 2) { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xe1 || c2 >= 0xa0) && (c != 0xed || c2 < 0xa0)) goto incomplete; } } else if (c <= 0xf4) { if (m == 1) goto incomplete; else /* m == 2 || m == 3 */ { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xf1 || c2 >= 0x90) && (c < 0xf4 || (c == 0xf4 && c2 < 0x90))) { if (m == 2) goto incomplete; else /* m == 3 */ { unsigned char c3 = (unsigned char) p[2]; if ((c3 ^ 0x80) < 0x40) goto incomplete; } } } } } goto invalid; } /* As a reference for this code, you can use the GNU libiconv implementation. Look for uses of the RET_TOOFEW macro. */ if (STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) goto incomplete; } if (m == 2) { unsigned char c = (unsigned char) p[0]; if (c == 0x8f) { unsigned char c2 = (unsigned char) p[1]; if (c2 >= 0xa1 && c2 < 0xff) goto incomplete; } } goto invalid; } if (STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) { if (m == 1) { unsigned char c = (unsigned char) p[0]; if (c >= 0xa1 && c < 0xff) goto incomplete; } goto invalid; } if (STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0xa1 && c < 0xff) || c == 0x8e) goto incomplete; } else /* m == 2 || m == 3 */ { unsigned char c = (unsigned char) p[0]; if (c == 0x8e) goto incomplete; } goto invalid; } if (STREQ_OPT (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) goto incomplete; } else /* m == 2 || m == 3 */ { unsigned char c = (unsigned char) p[0]; if (c >= 0x90 && c <= 0xe3) { unsigned char c2 = (unsigned char) p[1]; if (c2 >= 0x30 && c2 <= 0x39) { if (m == 2) goto incomplete; else /* m == 3 */ { unsigned char c3 = (unsigned char) p[2]; if (c3 >= 0x81 && c3 <= 0xfe) goto incomplete; } } } } goto invalid; } if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) || (c >= 0xf0 && c <= 0xf9)) goto incomplete; } goto invalid; } /* An unknown multibyte encoding. */ goto incomplete; } incomplete: { size_t k = nstate; /* Here 0 <= k < m < 4. */ pstate[++k] = s[0]; if (k < m) { pstate[++k] = s[1]; if (k < m) pstate[++k] = s[2]; } if (k != m) abort (); } pstate[0] = m; return (size_t)(-2); invalid: errno = EILSEQ; /* The conversion state is undefined, says POSIX. */ return (size_t)(-1); } } } #else /* Override the system's mbrtowc() function. */ # undef mbrtowc size_t rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { size_t ret; wchar_t wc; # if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG || MBRTOWC_EMPTY_INPUT_BUG if (s == NULL) { pwc = NULL; s = ""; n = 1; } # endif # if MBRTOWC_EMPTY_INPUT_BUG if (n == 0) return (size_t) -2; # endif if (! pwc) pwc = &wc; # if MBRTOWC_RETVAL_BUG { static mbstate_t internal_state; /* Override mbrtowc's internal state. We cannot call mbsinit() on the hidden internal state, but we can call it on our variable. */ if (ps == NULL) ps = &internal_state; if (!mbsinit (ps)) { /* Parse the rest of the multibyte character byte for byte. */ size_t count = 0; for (; n > 0; s++, n--) { ret = mbrtowc (&wc, s, 1, ps); if (ret == (size_t)(-1)) return (size_t)(-1); count++; if (ret != (size_t)(-2)) { /* The multibyte character has been completed. */ *pwc = wc; return (wc == 0 ? 0 : count); } } return (size_t)(-2); } } # endif ret = mbrtowc (pwc, s, n, ps); # if MBRTOWC_NUL_RETVAL_BUG if (ret < (size_t) -2 && !*pwc) return 0; # endif # if C_LOCALE_MAYBE_EILSEQ if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) { unsigned char uc = *s; *pwc = uc; return 1; } # endif return ret; } #endif gnuastro-0.5/bootstrapped/lib/malloc.c0000644000175000017500000000273313217200021015021 00000000000000/* malloc() function that is glibc compatible. Copyright (C) 1997-1998, 2006-2007, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* written by Jim Meyering and Bruno Haible */ #define _GL_USE_STDLIB_ALLOC 1 #include /* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ #ifdef malloc # define NEED_MALLOC_GNU 1 # undef malloc /* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ #elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU # define NEED_MALLOC_GNU 1 #endif #include #include /* Allocate an N-byte block of memory from the heap. If N is zero, allocate a 1-byte block. */ void * rpl_malloc (size_t n) { void *result; #if NEED_MALLOC_GNU if (n == 0) n = 1; #endif result = malloc (n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } gnuastro-0.5/bootstrapped/lib/localeconv.c0000644000175000017500000000656313217200021015704 00000000000000/* Query locale dependent information for formatting numbers. Copyright (C) 2012-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #if HAVE_STRUCT_LCONV_DECIMAL_POINT /* Override for platforms where 'struct lconv' lacks the int_p_*, int_n_* members. */ struct lconv * localeconv (void) { static struct lconv result; # undef lconv # undef localeconv struct lconv *sys_result = localeconv (); result.decimal_point = sys_result->decimal_point; result.thousands_sep = sys_result->thousands_sep; result.grouping = sys_result->grouping; result.mon_decimal_point = sys_result->mon_decimal_point; result.mon_thousands_sep = sys_result->mon_thousands_sep; result.mon_grouping = sys_result->mon_grouping; result.positive_sign = sys_result->positive_sign; result.negative_sign = sys_result->negative_sign; result.currency_symbol = sys_result->currency_symbol; result.frac_digits = sys_result->frac_digits; result.p_cs_precedes = sys_result->p_cs_precedes; result.p_sign_posn = sys_result->p_sign_posn; result.p_sep_by_space = sys_result->p_sep_by_space; result.n_cs_precedes = sys_result->n_cs_precedes; result.n_sign_posn = sys_result->n_sign_posn; result.n_sep_by_space = sys_result->n_sep_by_space; result.int_curr_symbol = sys_result->int_curr_symbol; result.int_frac_digits = sys_result->int_frac_digits; result.int_p_cs_precedes = sys_result->p_cs_precedes; result.int_p_sign_posn = sys_result->p_sign_posn; result.int_p_sep_by_space = sys_result->p_sep_by_space; result.int_n_cs_precedes = sys_result->n_cs_precedes; result.int_n_sign_posn = sys_result->n_sign_posn; result.int_n_sep_by_space = sys_result->n_sep_by_space; return &result; } #else /* Override for platforms where 'struct lconv' is a dummy. */ # include struct lconv * localeconv (void) { static /*const*/ struct lconv result = { /* decimal_point */ ".", /* thousands_sep */ "", /* grouping */ "", /* mon_decimal_point */ "", /* mon_thousands_sep */ "", /* mon_grouping */ "", /* positive_sign */ "", /* negative_sign */ "", /* currency_symbol */ "", /* frac_digits */ CHAR_MAX, /* p_cs_precedes */ CHAR_MAX, /* p_sign_posn */ CHAR_MAX, /* p_sep_by_space */ CHAR_MAX, /* n_cs_precedes */ CHAR_MAX, /* n_sign_posn */ CHAR_MAX, /* n_sep_by_space */ CHAR_MAX, /* int_curr_symbol */ "", /* int_frac_digits */ CHAR_MAX, /* int_p_cs_precedes */ CHAR_MAX, /* int_p_sign_posn */ CHAR_MAX, /* int_p_sep_by_space */ CHAR_MAX, /* int_n_cs_precedes */ CHAR_MAX, /* int_n_sign_posn */ CHAR_MAX, /* int_n_sep_by_space */ CHAR_MAX }; return &result; } #endif gnuastro-0.5/bootstrapped/lib/iswblank.c0000644000175000017500000000153213217200021015360 00000000000000/* Test wide character for being blank. Copyright (C) 2008-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #include /* Specification. */ #include int iswblank (wint_t wc) { return wc == ' ' || wc == '\t'; } gnuastro-0.5/bootstrapped/lib/getopt1.c0000644000175000017500000000733113217200021015134 00000000000000/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987-2017 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _LIBC # include #endif #include "getopt.h" #include "getopt_int.h" int getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 0, 0); } int _getopt_long_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 0, d, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 1, 0); } int _getopt_long_only_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 1, d, 0); } #ifdef TEST #include #include int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static const struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case 'd': printf ("option d with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ gnuastro-0.5/bootstrapped/lib/getopt.c0000644000175000017500000005711113217200021015054 00000000000000/* Getopt for GNU. Copyright (C) 1987-2017 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C 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 General Public License for more details. You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see . */ #ifndef _LIBC # include #endif #include "getopt.h" #include #include #include #include #ifdef _LIBC /* When used as part of glibc, error printing must be done differently for standards compliance. getopt is not a cancellation point, so it must not call functions that are, and it is specified by an older standard than stdio locking, so it must not refer to functions in the "user namespace" related to stdio locking. Finally, it must use glibc's internal message translation so that the messages are looked up in the proper text domain. */ # include # define fprintf __fxprintf_nocancel # define flockfile(fp) _IO_flockfile (fp) # define funlockfile(fp) _IO_funlockfile (fp) #else # include "gettext.h" # define _(msgid) gettext (msgid) /* When used standalone, flockfile and funlockfile might not be available. */ # if (!defined _POSIX_THREAD_SAFE_FUNCTIONS \ || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) # define flockfile(fp) /* nop */ # define funlockfile(fp) /* nop */ # endif /* When used standalone, do not attempt to use alloca. */ # define __libc_use_alloca(size) 0 # undef alloca # define alloca(size) (abort (), (void *)0) #endif /* This implementation of 'getopt' has three modes for handling options interspersed with non-option arguments. It can stop scanning for options at the first non-option argument encountered, as POSIX specifies. It can continue scanning for options after the first non-option argument, but permute 'argv' as it goes so that, after 'getopt' is done, all the options precede all the non-option arguments and 'optind' points to the first non-option argument. Or, it can report non-option arguments as if they were arguments to the option character '\x01'. The default behavior of 'getopt_long' is to permute the argument list. When this implementation is used standalone, the default behavior of 'getopt' is to stop at the first non-option argument, but when it is used as part of GNU libc it also permutes the argument list. In both cases, setting the environment variable POSIXLY_CORRECT to any value disables permutation. If the first character of the OPTSTRING argument to 'getopt' or 'getopt_long' is '+', both functions will stop at the first non-option argument. If it is '-', both functions will report non-option arguments as arguments to the option character '\x01'. */ #include "getopt_int.h" /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Keep a global copy of all internal members of getopt_data. */ static struct _getopt_data getopt_data; /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. 'first_nonopt' and 'last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ static void exchange (char **argv, struct _getopt_data *d) { int bottom = d->__first_nonopt; int middle = d->__last_nonopt; int top = d->optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ d->__first_nonopt += (d->optind - d->__last_nonopt); d->__last_nonopt = d->optind; } /* Process the argument starting with d->__nextchar as a long option. d->optind should *not* have been advanced over this argument. If the value returned is -1, it was not actually a long option, the state is unchanged, and the argument should be processed as a set of short options (this can only happen when long_only is true). Otherwise, the option (and its argument, if any) have been consumed and the return value is the value to return from _getopt_internal_r. */ static int process_long_option (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int print_errors, const char *prefix) { char *nameend; size_t namelen; const struct option *p; const struct option *pfound = NULL; int n_options; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; namelen = nameend - d->__nextchar; /* First look for an exact match, counting the options as a side effect. */ for (p = longopts, n_options = 0; p->name; p++, n_options++) if (!strncmp (p->name, d->__nextchar, namelen) && namelen == strlen (p->name)) { /* Exact match found. */ pfound = p; option_index = n_options; break; } if (pfound == NULL) { /* Didn't find an exact match, so look for abbreviations. */ unsigned char *ambig_set = NULL; int ambig_malloced = 0; int ambig_fallback = 0; int indfound = -1; for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, d->__nextchar, namelen)) { if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) { /* Second or later nonexact match found. */ if (!ambig_fallback) { if (!print_errors) /* Don't waste effort tracking the ambig set if we're not going to print it anyway. */ ambig_fallback = 1; else if (!ambig_set) { if (__libc_use_alloca (n_options)) ambig_set = alloca (n_options); else if ((ambig_set = malloc (n_options)) == NULL) /* Fall back to simpler error message. */ ambig_fallback = 1; else ambig_malloced = 1; if (ambig_set) { memset (ambig_set, 0, n_options); ambig_set[indfound] = 1; } } if (ambig_set) ambig_set[option_index] = 1; } } } if (ambig_set || ambig_fallback) { if (print_errors) { if (ambig_fallback) fprintf (stderr, _("%s: option '%s%s' is ambiguous\n"), argv[0], prefix, d->__nextchar); else { flockfile (stderr); fprintf (stderr, _("%s: option '%s%s' is ambiguous; possibilities:"), argv[0], prefix, d->__nextchar); for (option_index = 0; option_index < n_options; option_index++) if (ambig_set[option_index]) fprintf (stderr, " '%s%s'", prefix, longopts[option_index].name); /* This must use 'fprintf' even though it's only printing a single character, so that it goes through __fxprintf_nocancel when compiled as part of glibc. */ fprintf (stderr, "\n"); funlockfile (stderr); } } if (ambig_malloced) free (ambig_set); d->__nextchar += strlen (d->__nextchar); d->optind++; d->optopt = 0; return '?'; } option_index = indfound; } if (pfound == NULL) { /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. */ if (!long_only || argv[d->optind][1] == '-' || strchr (optstring, *d->__nextchar) == NULL) { if (print_errors) fprintf (stderr, _("%s: unrecognized option '%s%s'\n"), argv[0], prefix, d->__nextchar); d->__nextchar = NULL; d->optind++; d->optopt = 0; return '?'; } /* Otherwise interpret it as a short option. */ return -1; } /* We have found a matching long option. Consume it. */ d->optind++; d->__nextchar = NULL; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' doesn't allow an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' requires an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Initialize internal data upon the first call to getopt. */ static const char * _getopt_initialize (int argc _GL_UNUSED, char **argv _GL_UNUSED, const char *optstring, struct _getopt_data *d, int posixly_correct) { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ if (d->optind == 0) d->optind = 1; d->__first_nonopt = d->__last_nonopt = d->optind; d->__nextchar = NULL; /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { d->__ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { d->__ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct || !!getenv ("POSIXLY_CORRECT")) d->__ordering = REQUIRE_ORDER; else d->__ordering = PERMUTE; d->__initialized = 1; return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If 'getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If 'getopt' finds another option character, it returns that character, updating 'optind' and 'nextchar' so that the next call to 'getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, 'getopt' returns -1. Then 'optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set 'opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in 'optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in 'optarg', otherwise 'optarg' is set to zero. If OPTSTRING starts with '-' or '+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with '--' instead of '-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a '=', or else the in next ARGV-element. When 'getopt' finds a long-named option, it returns 0 if that option's 'flag' field is nonzero, the value of the option's 'val' field if the 'flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of 'struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal_r (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int posixly_correct) { int print_errors = d->opterr; if (argc < 1) return -1; d->optarg = NULL; if (d->optind == 0 || !d->__initialized) optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct); else if (optstring[0] == '-' || optstring[0] == '+') optstring++; if (optstring[0] == ':') print_errors = 0; /* Test whether ARGV[optind] points to a non-option argument. */ #define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') if (d->__nextchar == NULL || *d->__nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (d->__last_nonopt > d->optind) d->__last_nonopt = d->optind; if (d->__first_nonopt > d->optind) d->__first_nonopt = d->optind; if (d->__ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__last_nonopt != d->optind) d->__first_nonopt = d->optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (d->optind < argc && NONOPTION_P) d->optind++; d->__last_nonopt = d->optind; } /* The special ARGV-element '--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (d->optind != argc && !strcmp (argv[d->optind], "--")) { d->optind++; if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__first_nonopt == d->__last_nonopt) d->__first_nonopt = d->optind; d->__last_nonopt = argc; d->optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (d->optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (d->__first_nonopt != d->__last_nonopt) d->optind = d->__first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (d->__ordering == REQUIRE_ORDER) return -1; d->optarg = argv[d->optind++]; return 1; } /* We have found another option-ARGV-element. Check whether it might be a long option. */ if (longopts) { if (argv[d->optind][1] == '-') { /* "--foo" is always a long option. The special option "--" was handled above. */ d->__nextchar = argv[d->optind] + 2; return process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "--"); } /* If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (long_only && (argv[d->optind][2] || !strchr (optstring, argv[d->optind][1]))) { int code; d->__nextchar = argv[d->optind] + 1; code = process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "-"); if (code != -1) return code; } } /* It is not a long option. Skip the initial punctuation. */ d->__nextchar = argv[d->optind] + 1; } /* Look at and handle the next short option-character. */ { char c = *d->__nextchar++; const char *temp = strchr (optstring, c); /* Increment 'optind' when we start to process its last character. */ if (*d->__nextchar == '\0') ++d->optind; if (temp == NULL || c == ':' || c == ';') { if (print_errors) fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); d->optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';' && longopts != NULL) { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') d->optarg = d->__nextchar; else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else d->optarg = argv[d->optind]; d->__nextchar = d->optarg; d->optarg = NULL; return process_long_option (argc, argv, optstring, longopts, longind, 0 /* long_only */, d, print_errors, "-W "); } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; d->optind++; } else d->optarg = NULL; d->__nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ d->optind++; } else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented 'optind' once; increment it again when taking next ARGV-elt as argument. */ d->optarg = argv[d->optind++]; d->__nextchar = NULL; } } return c; } } int _getopt_internal (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, int posixly_correct) { int result; getopt_data.optind = optind; getopt_data.opterr = opterr; result = _getopt_internal_r (argc, argv, optstring, longopts, longind, long_only, &getopt_data, posixly_correct); optind = getopt_data.optind; optarg = getopt_data.optarg; optopt = getopt_data.optopt; return result; } /* glibc gets a LSB-compliant getopt and a POSIX-complaint __posix_getopt. Standalone applications just get a POSIX-compliant getopt. POSIX and LSB both require these functions to take 'char *const *argv' even though this is incorrect (because of the permutation). */ #define GETOPT_ENTRY(NAME, POSIXLY_CORRECT) \ int \ NAME (int argc, char *const *argv, const char *optstring) \ { \ return _getopt_internal (argc, (char **)argv, optstring, \ 0, 0, 0, POSIXLY_CORRECT); \ } #ifdef _LIBC GETOPT_ENTRY(getopt, 0) GETOPT_ENTRY(__posix_getopt, 1) #else GETOPT_ENTRY(getopt, 1) #endif #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of 'getopt'. */ int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ gnuastro-0.5/bootstrapped/lib/getline.c0000644000175000017500000000166713217200021015206 00000000000000/* getline.c --- Implementation of replacement getline function. Copyright (C) 2005-2007, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Simon Josefsson. */ #include #include ssize_t getline (char **lineptr, size_t *n, FILE *stream) { return getdelim (lineptr, n, '\n', stream); } gnuastro-0.5/bootstrapped/lib/getdelim.c0000644000175000017500000000754113217200021015346 00000000000000/* getdelim.c --- Implementation of replacement getdelim function. Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Ported from glibc by Simon Josefsson. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below. */ #define _GL_ARG_NONNULL(params) #include #include #include #include #include #include #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" # define getc_maybe_unlocked(fp) getc(fp) #elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED # undef flockfile # undef funlockfile # define flockfile(x) ((void) 0) # define funlockfile(x) ((void) 0) # define getc_maybe_unlocked(fp) getc(fp) #else # define getc_maybe_unlocked(fp) getc_unlocked(fp) #endif static void alloc_failed (void) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Avoid errno problem without using the realloc module; see: https://lists.gnu.org/r/bug-gnulib/2016-08/msg00025.html */ errno = ENOMEM; #endif } /* Read up to (and including) a DELIMITER from FP into *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'ed as necessary. Returns the number of characters read (not including the null terminator), or -1 on error or EOF. */ ssize_t getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) { ssize_t result; size_t cur_len = 0; if (lineptr == NULL || n == NULL || fp == NULL) { errno = EINVAL; return -1; } flockfile (fp); if (*lineptr == NULL || *n == 0) { char *new_lineptr; *n = 120; new_lineptr = (char *) realloc (*lineptr, *n); if (new_lineptr == NULL) { alloc_failed (); result = -1; goto unlock_return; } *lineptr = new_lineptr; } for (;;) { int i; i = getc_maybe_unlocked (fp); if (i == EOF) { result = -1; break; } /* Make enough space for len+1 (for final NUL) bytes. */ if (cur_len + 1 >= *n) { size_t needed_max = SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; size_t needed = 2 * *n + 1; /* Be generous. */ char *new_lineptr; if (needed_max < needed) needed = needed_max; if (cur_len + 1 >= needed) { result = -1; errno = EOVERFLOW; goto unlock_return; } new_lineptr = (char *) realloc (*lineptr, needed); if (new_lineptr == NULL) { alloc_failed (); result = -1; goto unlock_return; } *lineptr = new_lineptr; *n = needed; } (*lineptr)[cur_len] = i; cur_len++; if (i == delimiter) break; } (*lineptr)[cur_len] = '\0'; result = cur_len ? cur_len : result; unlock_return: funlockfile (fp); /* doesn't set errno */ return result; } gnuastro-0.5/bootstrapped/lib/itold.c0000644000175000017500000000201113217200021014652 00000000000000/* Replacement for 'int' to 'long double' conversion routine. Copyright (C) 2011-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2011. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include void _Qp_itoq (long double *result, int a) { /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ *result = (double) a; } gnuastro-0.5/bootstrapped/lib/float.c0000644000175000017500000000250513217200021014654 00000000000000/* Auxiliary definitions for . Copyright (C) 2011-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2011. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ const union gl_long_double_union gl_LDBL_MAX = { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; #elif defined __i386__ const union gl_long_double_union gl_LDBL_MAX = { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif gnuastro-0.5/bootstrapped/lib/error.c0000644000175000017500000002476313217200021014712 00000000000000/* Error handler for noninteractive utilities Copyright (C) 1990-1998, 2000-2007, 2009-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by David MacKenzie . */ #if !_LIBC # include #endif #include "error.h" #include #include #include #include #if !_LIBC && ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) #endif #ifdef _LIBC # include # include # include # include # define mbsrtowcs __mbsrtowcs # define USE_UNLOCKED_IO 0 # define _GL_ATTRIBUTE_FORMAT_PRINTF(a, b) # define _GL_ARG_NONNULL(a) #else # include "getprogname.h" #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifndef _ # define _(String) String #endif /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ unsigned int error_message_count; #ifdef _LIBC /* In the GNU C library, there is a predefined variable for this. */ # define program_name program_invocation_name # include # include # include /* In GNU libc we want do not want to use the common name 'error' directly. Instead make it a weak alias. */ extern void __error (int status, int errnum, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) __attribute__ ((__format__ (__printf__, 5, 6))); # define error __error # define error_at_line __error_at_line # include # define fflush(s) _IO_fflush (s) # undef putc # define putc(c, fp) _IO_putc (c, fp) # include #else /* not _LIBC */ # include # include # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl # if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P char *strerror_r (int errnum, char *buf, size_t buflen); # else int strerror_r (int errnum, char *buf, size_t buflen); # endif # endif #define program_name getprogname () # if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static int is_open (int fd) { # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support F_GETFL. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; # else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); # endif } #endif static void flush_stdout (void) { #if !_LIBC int stdout_fd; # if GNULIB_FREOPEN_SAFER /* Use of gnulib's freopen-safer module normally ensures that fileno (stdout) == 1 whenever stdout is open. */ stdout_fd = STDOUT_FILENO; # else /* POSIX states that fileno (stdout) after fclose is unspecified. But in practice it is not a problem, because stdout is statically allocated and the fd of a FILE stream is stored as a field in its allocated memory. */ stdout_fd = fileno (stdout); # endif /* POSIX states that fflush (stdout) after fclose is unspecified; it is safe in glibc, but not on all other platforms. fflush (NULL) is always defined, but too draconian. */ if (0 <= stdout_fd && is_open (stdout_fd)) #endif fflush (stdout); } static void print_errno_message (int errnum) { char const *s; #if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R char errbuf[1024]; # if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) s = errbuf; else s = 0; # endif #else s = strerror (errnum); #endif #if !_LIBC if (! s) s = _("Unknown system error"); #endif #if _LIBC __fxprintf (NULL, ": %s", s); #else fprintf (stderr, ": %s", s); #endif } static void _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3)) error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC if (_IO_fwide (stderr, 0) > 0) { size_t len = strlen (message) + 1; wchar_t *wmessage = NULL; mbstate_t st; size_t res; const char *tmp; bool use_malloc = false; while (1) { if (__libc_use_alloca (len * sizeof (wchar_t))) wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); else { if (!use_malloc) wmessage = NULL; wchar_t *p = (wchar_t *) realloc (wmessage, len * sizeof (wchar_t)); if (p == NULL) { free (wmessage); fputws_unlocked (L"out of memory\n", stderr); return; } wmessage = p; use_malloc = true; } memset (&st, '\0', sizeof (st)); tmp = message; res = mbsrtowcs (wmessage, &tmp, len, &st); if (res != len) break; if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) { /* This really should not happen if everything is fine. */ res = (size_t) -1; break; } len *= 2; } if (res == (size_t) -1) { /* The string cannot be converted. */ if (use_malloc) { free (wmessage); use_malloc = false; } wmessage = (wchar_t *) L"???"; } __vfwprintf (stderr, wmessage, args); if (use_malloc) free (wmessage); } else #endif vfprintf (stderr, message, args); ++error_message_count; if (errnum) print_errno_message (errnum); #if _LIBC __fxprintf (NULL, "\n"); #else putc ('\n', stderr); #endif fflush (stderr); if (status) exit (status); } /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. If ERRNUM is nonzero, print its corresponding system error message. Exit with status STATUS if it is nonzero. */ void error (int status, int errnum, const char *message, ...) { va_list args; #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s: ", program_name); #else fprintf (stderr, "%s: ", program_name); #endif } va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; void error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { va_list args; if (error_one_per_line) { static const char *old_file_name; static unsigned int old_line_number; if (old_line_number == line_number && (file_name == old_file_name || (old_file_name != NULL && file_name != NULL && strcmp (old_file_name, file_name) == 0))) /* Simply return and print nothing. */ return; old_file_name = file_name; old_line_number = line_number; } #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s:", program_name); #else fprintf (stderr, "%s:", program_name); #endif } #if _LIBC __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #else fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #endif va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } #ifdef _LIBC /* Make the weak alias. */ # undef error # undef error_at_line weak_alias (__error, error) weak_alias (__error_at_line, error_at_line) #endif gnuastro-0.5/bootstrapped/lib/btowc.c0000644000175000017500000000211013217200020014654 00000000000000/* Convert unibyte character to wide character. Copyright (C) 2008, 2010-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include wint_t btowc (int c) { if (c != EOF) { char buf[1]; wchar_t wc; buf[0] = c; if (mbtowc (&wc, buf, 1) >= 0) return wc; } return WEOF; } gnuastro-0.5/bootstrapped/lib/xsize.c0000644000175000017500000000011613217200022014706 00000000000000#include #define XSIZE_INLINE _GL_EXTERN_INLINE #include "xsize.h" gnuastro-0.5/bootstrapped/lib/xsize.h0000644000175000017500000000705713217200022014726 00000000000000/* xsize.h -- Checked size_t computations. Copyright (C) 2003, 2008-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _XSIZE_H #define _XSIZE_H /* Get size_t. */ #include /* Get SIZE_MAX. */ #include #if HAVE_STDINT_H # include #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef XSIZE_INLINE # define XSIZE_INLINE _GL_INLINE #endif /* The size of memory objects is often computed through expressions of type size_t. Example: void* p = malloc (header_size + n * element_size). These computations can lead to overflow. When this happens, malloc() returns a piece of memory that is way too small, and the program then crashes while attempting to fill the memory. To avoid this, the functions and macros in this file check for overflow. The convention is that SIZE_MAX represents overflow. malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc implementation that uses mmap --, it's recommended to use size_overflow_p() or size_in_bounds_p() before invoking malloc(). The example thus becomes: size_t size = xsum (header_size, xtimes (n, element_size)); void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); */ /* Convert an arbitrary value >= 0 to type size_t. */ #define xcast_size_t(N) \ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) /* Sum of two sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum (size_t size1, size_t size2) { size_t sum = size1 + size2; return (sum >= size1 ? sum : SIZE_MAX); } /* Sum of three sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum3 (size_t size1, size_t size2, size_t size3) { return xsum (xsum (size1, size2), size3); } /* Sum of four sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) { return xsum (xsum (xsum (size1, size2), size3), size4); } /* Maximum of two sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xmax (size_t size1, size_t size2) { /* No explicit check is needed here, because for any n: max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ return (size1 >= size2 ? size1 : size2); } /* Multiplication of a count with an element size, with overflow check. The count must be >= 0 and the element size must be > 0. This is a macro, not a function, so that it works correctly even when N is of a wider type and N > SIZE_MAX. */ #define xtimes(N, ELSIZE) \ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) /* Check for overflow. */ #define size_overflow_p(SIZE) \ ((SIZE) == SIZE_MAX) /* Check against overflow. */ #define size_in_bounds_p(SIZE) \ ((SIZE) != SIZE_MAX) _GL_INLINE_HEADER_END #endif /* _XSIZE_H */ gnuastro-0.5/bootstrapped/lib/wctype-h.c0000644000175000017500000000023313217200022015304 00000000000000/* Normally this would be wctype.c, but that name's already taken. */ #include #define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE #include "wctype.h" gnuastro-0.5/bootstrapped/lib/unistd.c0000644000175000017500000000014713217200021015055 00000000000000#include #define _GL_UNISTD_INLINE _GL_EXTERN_INLINE #include "unistd.h" typedef int dummy; gnuastro-0.5/bootstrapped/lib/strnlen1.c0000644000175000017500000000236613217200021015322 00000000000000/* Find the length of STRING + 1, but scan at most MAXLEN bytes. Copyright (C) 2005-2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include "strnlen1.h" #include /* Find the length of STRING + 1, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many characters, return MAXLEN. */ /* This is the same as strnlen (string, maxlen - 1) + 1. */ size_t strnlen1 (const char *string, size_t maxlen) { const char *end = (const char *) memchr (string, '\0', maxlen); if (end != NULL) return end - string + 1; else return maxlen; } gnuastro-0.5/bootstrapped/lib/strnlen1.h0000644000175000017500000000231013217200021015314 00000000000000/* Find the length of STRING + 1, but scan at most MAXLEN bytes. Copyright (C) 2005, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _STRNLEN1_H #define _STRNLEN1_H #include #ifdef __cplusplus extern "C" { #endif /* Find the length of STRING + 1, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many characters, return MAXLEN. */ /* This is the same as strnlen (string, maxlen - 1) + 1. */ extern size_t strnlen1 (const char *string, size_t maxlen) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* _STRNLEN1_H */ gnuastro-0.5/bootstrapped/lib/size_max.h0000644000175000017500000000221213217200021015366 00000000000000/* size_max.h -- declare SIZE_MAX through system headers Copyright (C) 2005-2006, 2009-2017 Free Software Foundation, Inc. Written by Simon Josefsson. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef GNULIB_SIZE_MAX_H #define GNULIB_SIZE_MAX_H /* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ # include /* Get SIZE_MAX declaration on systems like glibc 2. */ # if HAVE_STDINT_H # include # endif /* On systems where these include files don't define it, SIZE_MAX is defined in config.h. */ #endif /* GNULIB_SIZE_MAX_H */ gnuastro-0.5/bootstrapped/lib/nproc.c0000644000175000017500000002525513217200021014677 00000000000000/* Detect the number of processors. Copyright (C) 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Glen Lenker and Bruno Haible. */ #include #include "nproc.h" #include #include #include #if HAVE_PTHREAD_GETAFFINITY_NP && 0 # include # include #endif #if HAVE_SCHED_GETAFFINITY_LIKE_GLIBC || HAVE_SCHED_GETAFFINITY_NP # include #endif #include #if HAVE_SYS_PSTAT_H # include #endif #if HAVE_SYS_SYSMP_H # include #endif #if HAVE_SYS_PARAM_H # include #endif #if HAVE_SYS_SYSCTL_H # include #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include #endif #include "c-ctype.h" #include "minmax.h" #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) /* Return the number of processors available to the current process, based on a modern system call that returns the "affinity" between the current process and each CPU. Return 0 if unknown or if such a system call does not exist. */ static unsigned long num_processors_via_affinity_mask (void) { /* glibc >= 2.3.3 with NPTL and NetBSD 5 have pthread_getaffinity_np, but with different APIs. Also it requires linking with -lpthread. Therefore this code is not enabled. glibc >= 2.3.4 has sched_getaffinity whereas NetBSD 5 has sched_getaffinity_np. */ #if HAVE_PTHREAD_GETAFFINITY_NP && defined __GLIBC__ && 0 { cpu_set_t set; if (pthread_getaffinity_np (pthread_self (), sizeof (set), &set) == 0) { unsigned long count; # ifdef CPU_COUNT /* glibc >= 2.6 has the CPU_COUNT macro. */ count = CPU_COUNT (&set); # else size_t i; count = 0; for (i = 0; i < CPU_SETSIZE; i++) if (CPU_ISSET (i, &set)) count++; # endif if (count > 0) return count; } } #elif HAVE_PTHREAD_GETAFFINITY_NP && defined __NetBSD__ && 0 { cpuset_t *set; set = cpuset_create (); if (set != NULL) { unsigned long count = 0; if (pthread_getaffinity_np (pthread_self (), cpuset_size (set), set) == 0) { cpuid_t i; for (i = 0;; i++) { int ret = cpuset_isset (i, set); if (ret < 0) break; if (ret > 0) count++; } } cpuset_destroy (set); if (count > 0) return count; } } #elif HAVE_SCHED_GETAFFINITY_LIKE_GLIBC /* glibc >= 2.3.4 */ { cpu_set_t set; if (sched_getaffinity (0, sizeof (set), &set) == 0) { unsigned long count; # ifdef CPU_COUNT /* glibc >= 2.6 has the CPU_COUNT macro. */ count = CPU_COUNT (&set); # else size_t i; count = 0; for (i = 0; i < CPU_SETSIZE; i++) if (CPU_ISSET (i, &set)) count++; # endif if (count > 0) return count; } } #elif HAVE_SCHED_GETAFFINITY_NP /* NetBSD >= 5 */ { cpuset_t *set; set = cpuset_create (); if (set != NULL) { unsigned long count = 0; if (sched_getaffinity_np (getpid (), cpuset_size (set), set) == 0) { cpuid_t i; for (i = 0;; i++) { int ret = cpuset_isset (i, set); if (ret < 0) break; if (ret > 0) count++; } } cpuset_destroy (set); if (count > 0) return count; } } #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { /* This works on native Windows platforms. */ DWORD_PTR process_mask; DWORD_PTR system_mask; if (GetProcessAffinityMask (GetCurrentProcess (), &process_mask, &system_mask)) { DWORD_PTR mask = process_mask; unsigned long count = 0; for (; mask != 0; mask = mask >> 1) if (mask & 1) count++; if (count > 0) return count; } } #endif return 0; } /* Return the total number of processors. Here QUERY must be one of NPROC_ALL, NPROC_CURRENT. The result is guaranteed to be at least 1. */ static unsigned long int num_processors_ignoring_omp (enum nproc_query query) { /* On systems with a modern affinity mask system call, we have sysconf (_SC_NPROCESSORS_CONF) >= sysconf (_SC_NPROCESSORS_ONLN) >= num_processors_via_affinity_mask () The first number is the number of CPUs configured in the system. The second number is the number of CPUs available to the scheduler. The third number is the number of CPUs available to the current process. Note! On Linux systems with glibc, the first and second number come from the /sys and /proc file systems (see glibc/sysdeps/unix/sysv/linux/getsysstats.c). In some situations these file systems are not mounted, and the sysconf call returns 1, which does not reflect the reality. */ if (query == NPROC_CURRENT) { /* Try the modern affinity mask system call. */ { unsigned long nprocs = num_processors_via_affinity_mask (); if (nprocs > 0) return nprocs; } #if defined _SC_NPROCESSORS_ONLN { /* This works on glibc, Mac OS X 10.5, FreeBSD, AIX, OSF/1, Solaris, Cygwin, Haiku. */ long int nprocs = sysconf (_SC_NPROCESSORS_ONLN); if (nprocs > 0) return nprocs; } #endif } else /* query == NPROC_ALL */ { #if defined _SC_NPROCESSORS_CONF { /* This works on glibc, Mac OS X 10.5, FreeBSD, AIX, OSF/1, Solaris, Cygwin, Haiku. */ long int nprocs = sysconf (_SC_NPROCESSORS_CONF); # if __GLIBC__ >= 2 && defined __linux__ /* On Linux systems with glibc, this information comes from the /sys and /proc file systems (see glibc/sysdeps/unix/sysv/linux/getsysstats.c). In some situations these file systems are not mounted, and the sysconf call returns 1. But we wish to guarantee that num_processors (NPROC_ALL) >= num_processors (NPROC_CURRENT). */ if (nprocs == 1) { unsigned long nprocs_current = num_processors_via_affinity_mask (); if (nprocs_current > 0) nprocs = nprocs_current; } # endif if (nprocs > 0) return nprocs; } #endif } #if HAVE_PSTAT_GETDYNAMIC { /* This works on HP-UX. */ struct pst_dynamic psd; if (pstat_getdynamic (&psd, sizeof psd, 1, 0) >= 0) { /* The field psd_proc_cnt contains the number of active processors. In newer releases of HP-UX 11, the field psd_max_proc_cnt includes deactivated processors. */ if (query == NPROC_CURRENT) { if (psd.psd_proc_cnt > 0) return psd.psd_proc_cnt; } else { if (psd.psd_max_proc_cnt > 0) return psd.psd_max_proc_cnt; } } } #endif #if HAVE_SYSMP && defined MP_NAPROCS && defined MP_NPROCS { /* This works on IRIX. */ /* MP_NPROCS yields the number of installed processors. MP_NAPROCS yields the number of processors available to unprivileged processes. */ int nprocs = sysmp (query == NPROC_CURRENT && getpid () != 0 ? MP_NAPROCS : MP_NPROCS); if (nprocs > 0) return nprocs; } #endif /* Finally, as fallback, use the APIs that don't distinguish between NPROC_CURRENT and NPROC_ALL. */ #if HAVE_SYSCTL && defined HW_NCPU { /* This works on Mac OS X, FreeBSD, NetBSD, OpenBSD. */ int nprocs; size_t len = sizeof (nprocs); static int mib[2] = { CTL_HW, HW_NCPU }; if (sysctl (mib, ARRAY_SIZE (mib), &nprocs, &len, NULL, 0) == 0 && len == sizeof (nprocs) && 0 < nprocs) return nprocs; } #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { /* This works on native Windows platforms. */ SYSTEM_INFO system_info; GetSystemInfo (&system_info); if (0 < system_info.dwNumberOfProcessors) return system_info.dwNumberOfProcessors; } #endif return 1; } /* Parse OMP environment variables without dependence on OMP. Return 0 for invalid values. */ static unsigned long int parse_omp_threads (char const* threads) { unsigned long int ret = 0; if (threads == NULL) return ret; /* The OpenMP spec says that the value assigned to the environment variables "may have leading and trailing white space". */ while (*threads != '\0' && c_isspace (*threads)) threads++; /* Convert it from positive decimal to 'unsigned long'. */ if (c_isdigit (*threads)) { char *endptr = NULL; unsigned long int value = strtoul (threads, &endptr, 10); if (endptr != NULL) { while (*endptr != '\0' && c_isspace (*endptr)) endptr++; if (*endptr == '\0') return value; /* Also accept the first value in a nesting level, since we can't determine the nesting level from env vars. */ else if (*endptr == ',') return value; } } return ret; } unsigned long int num_processors (enum nproc_query query) { unsigned long int omp_env_limit = ULONG_MAX; if (query == NPROC_CURRENT_OVERRIDABLE) { unsigned long int omp_env_threads; /* Honor the OpenMP environment variables, recognized also by all programs that are based on OpenMP. */ omp_env_threads = parse_omp_threads (getenv ("OMP_NUM_THREADS")); omp_env_limit = parse_omp_threads (getenv ("OMP_THREAD_LIMIT")); if (! omp_env_limit) omp_env_limit = ULONG_MAX; if (omp_env_threads) return MIN (omp_env_threads, omp_env_limit); query = NPROC_CURRENT; } /* Here query is one of NPROC_ALL, NPROC_CURRENT. */ { unsigned long nprocs = num_processors_ignoring_omp (query); return MIN (nprocs, omp_env_limit); } } gnuastro-0.5/bootstrapped/lib/minmax.h0000644000175000017500000000447113217200021015051 00000000000000/* MIN, MAX macros. Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _MINMAX_H #define _MINMAX_H /* Note: MIN, MAX are also defined in on some systems (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about MIN, MAX macro redefinitions on some systems; the workaround is to #include this file as the last one among the #include list. */ /* Before we define the following symbols we get the file since otherwise we get redefinitions on some systems if is included after this file. Likewise for . If more than one of these system headers define MIN and MAX, pick just one of the headers (because the definitions most likely are the same). */ #if HAVE_MINMAX_IN_LIMITS_H # include #elif HAVE_MINMAX_IN_SYS_PARAM_H # include #endif /* Note: MIN and MAX should be used with two arguments of the same type. They might not return the minimum and maximum of their two arguments, if the arguments have different types or have unusual floating-point values. For example, on a typical host with 32-bit 'int', 64-bit 'long long', and 64-bit IEEE 754 'double' types: MAX (-1, 2147483648) returns 4294967295. MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. MAX (NaN, 0.0) returns 0.0. MAX (+0.0, -0.0) returns -0.0. and in each case the answer is in some sense bogus. */ /* MAX(a,b) returns the maximum of A and B. */ #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif /* MIN(a,b) returns the minimum of A and B. */ #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #endif /* _MINMAX_H */ gnuastro-0.5/bootstrapped/lib/mbuiter.c0000644000175000017500000000012213217200021015207 00000000000000#include #define MBUITER_INLINE _GL_EXTERN_INLINE #include "mbuiter.h" gnuastro-0.5/bootstrapped/lib/mbuiter.h0000644000175000017500000001752413217200021015232 00000000000000/* Iterating through multibyte strings: macros for multi-byte encodings. Copyright (C) 2001, 2005, 2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible . */ /* The macros in this file implement forward iteration through a multi-byte string, without knowing its length a-priori. With these macros, an iteration loop that looks like char *iter; for (iter = buf; *iter != '\0'; iter++) { do_something (*iter); } becomes mbui_iterator_t iter; for (mbui_init (iter, buf); mbui_avail (iter); mbui_advance (iter)) { do_something (mbui_cur_ptr (iter), mb_len (mbui_cur (iter))); } The benefit of these macros over plain use of mbrtowc is: - Handling of invalid multibyte sequences is possible without making the code more complicated, while still preserving the invalid multibyte sequences. Compared to mbiter.h, the macros here don't need to know the string's length a-priori. The downside is that at each step, the look-ahead that guards against overrunning the terminating '\0' is more expensive. The mbui_* macros are therefore suitable when there is a high probability that only the first few multibyte characters need to be inspected. Whereas the mbi_* macros are better if usually the iteration runs through the entire string. mbui_iterator_t is a type usable for variable declarations. mbui_init (iter, startptr) initializes the iterator, starting at startptr. mbui_avail (iter) returns true if there are more multibyte characters available before the end of string is reached. In this case, mbui_cur (iter) is initialized to the next multibyte character. mbui_advance (iter) advances the iterator by one multibyte character. mbui_cur (iter) returns the current multibyte character, of type mbchar_t. All the macros defined in mbchar.h can be used on it. mbui_cur_ptr (iter) return a pointer to the beginning of the current multibyte character. mbui_reloc (iter, ptrdiff) relocates iterator when the string is moved by ptrdiff bytes. mbui_copy (&destiter, &srciter) copies srciter to destiter. Here are the function prototypes of the macros. extern void mbui_init (mbui_iterator_t iter, const char *startptr); extern bool mbui_avail (mbui_iterator_t iter); extern void mbui_advance (mbui_iterator_t iter); extern mbchar_t mbui_cur (mbui_iterator_t iter); extern const char * mbui_cur_ptr (mbui_iterator_t iter); extern void mbui_reloc (mbui_iterator_t iter, ptrdiff_t ptrdiff); extern void mbui_copy (mbui_iterator_t *new, const mbui_iterator_t *old); */ #ifndef _MBUITER_H #define _MBUITER_H 1 #include #include #include #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.1 has a bug: and must be included before . */ #include #include #include #include "mbchar.h" #include "strnlen1.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef MBUITER_INLINE # define MBUITER_INLINE _GL_INLINE #endif struct mbuiter_multi { bool in_shift; /* true if next byte may not be interpreted as ASCII */ mbstate_t state; /* if in_shift: current shift state */ bool next_done; /* true if mbui_avail has already filled the following */ struct mbchar cur; /* the current character: const char *cur.ptr pointer to current character The following are only valid after mbui_avail. size_t cur.bytes number of bytes of current character bool cur.wc_valid true if wc is a valid wide character wchar_t cur.wc if wc_valid: the current character */ }; MBUITER_INLINE void mbuiter_multi_next (struct mbuiter_multi *iter) { if (iter->next_done) return; if (iter->in_shift) goto with_shift; /* Handle most ASCII characters quickly, without calling mbrtowc(). */ if (is_basic (*iter->cur.ptr)) { /* These characters are part of the basic character set. ISO C 99 guarantees that their wide character code is identical to their char code. */ iter->cur.bytes = 1; iter->cur.wc = *iter->cur.ptr; iter->cur.wc_valid = true; } else { assert (mbsinit (&iter->state)); iter->in_shift = true; with_shift: iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr, strnlen1 (iter->cur.ptr, MB_CUR_MAX), &iter->state); if (iter->cur.bytes == (size_t) -1) { /* An invalid multibyte sequence was encountered. */ iter->cur.bytes = 1; iter->cur.wc_valid = false; /* Whether to set iter->in_shift = false and reset iter->state or not is not very important; the string is bogus anyway. */ } else if (iter->cur.bytes == (size_t) -2) { /* An incomplete multibyte character at the end. */ iter->cur.bytes = strlen (iter->cur.ptr); iter->cur.wc_valid = false; /* Whether to set iter->in_shift = false and reset iter->state or not is not important; the string end is reached anyway. */ } else { if (iter->cur.bytes == 0) { /* A null wide character was encountered. */ iter->cur.bytes = 1; assert (*iter->cur.ptr == '\0'); assert (iter->cur.wc == 0); } iter->cur.wc_valid = true; /* When in the initial state, we can go back treating ASCII characters more quickly. */ if (mbsinit (&iter->state)) iter->in_shift = false; } } iter->next_done = true; } MBUITER_INLINE void mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff) { iter->cur.ptr += ptrdiff; } MBUITER_INLINE void mbuiter_multi_copy (struct mbuiter_multi *new_iter, const struct mbuiter_multi *old_iter) { if ((new_iter->in_shift = old_iter->in_shift)) memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t)); else memset (&new_iter->state, 0, sizeof (mbstate_t)); new_iter->next_done = old_iter->next_done; mb_copy (&new_iter->cur, &old_iter->cur); } /* Iteration macros. */ typedef struct mbuiter_multi mbui_iterator_t; #define mbui_init(iter, startptr) \ ((iter).cur.ptr = (startptr), \ (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \ (iter).next_done = false) #define mbui_avail(iter) \ (mbuiter_multi_next (&(iter)), !mb_isnul ((iter).cur)) #define mbui_advance(iter) \ ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false) /* Access to the current character. */ #define mbui_cur(iter) (iter).cur #define mbui_cur_ptr(iter) (iter).cur.ptr /* Relocation. */ #define mbui_reloc(iter, ptrdiff) mbuiter_multi_reloc (&iter, ptrdiff) /* Copying an iterator. */ #define mbui_copy mbuiter_multi_copy _GL_INLINE_HEADER_END #endif /* _MBUITER_H */ gnuastro-0.5/bootstrapped/lib/mbstok_r.c0000644000175000017500000000340713217200021015371 00000000000000/* Tokenizing a string. Copyright (C) 1999, 2002, 2006-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2007. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include "mbuiter.h" char * mbstok_r (char *string, const char *delim, char **save_ptr) { if (MB_CUR_MAX > 1) { if (string == NULL) { string = *save_ptr; if (string == NULL) return NULL; /* reminder that end of token sequence has been reached */ } /* Skip leading delimiters. */ string += mbsspn (string, delim); /* Found a token? */ if (*string == '\0') { *save_ptr = NULL; return NULL; } /* Move past the token. */ { char *token_end = mbspbrk (string, delim); if (token_end != NULL) { /* NUL-terminate the token. */ *token_end = '\0'; *save_ptr = token_end + 1; } else *save_ptr = NULL; } return string; } else return strtok_r (string, delim, save_ptr); } gnuastro-0.5/bootstrapped/lib/mbsspn.c0000644000175000017500000000527613217200021015061 00000000000000/* Searching a string for a character outside a given set of characters. Copyright (C) 1999, 2002, 2006-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2007. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include "mbuiter.h" /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. */ size_t mbsspn (const char *string, const char *reject) { /* Optimize two cases. */ if (reject[0] == '\0') return 0; if (reject[1] == '\0') { unsigned char uc = (unsigned char) reject[0]; if (MB_CUR_MAX > 1) { mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) if (!(mb_len (mbui_cur (iter)) == 1 && (unsigned char) * mbui_cur_ptr (iter) == uc)) break; return mbui_cur_ptr (iter) - string; } else { const char *ptr; for (ptr = string; *ptr != '\0'; ptr++) if ((unsigned char) *ptr != uc) break; return ptr - string; } } /* General case. */ if (MB_CUR_MAX > 1) { mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) { if (mb_len (mbui_cur (iter)) == 1) { if (mbschr (reject, * mbui_cur_ptr (iter)) == NULL) goto found; } else { mbui_iterator_t aiter; for (mbui_init (aiter, reject);; mbui_advance (aiter)) { if (!mbui_avail (aiter)) goto found; if (mb_equal (mbui_cur (aiter), mbui_cur (iter))) break; } } } found: return mbui_cur_ptr (iter) - string; } else return strspn (string, reject); } gnuastro-0.5/bootstrapped/lib/mbspbrk.c0000644000175000017500000000400313217200021015202 00000000000000/* Searching a string for a character among a given set of characters. Copyright (C) 1999, 2002, 2006-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2007. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include "mbuiter.h" /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. */ char * mbspbrk (const char *string, const char *accept) { /* Optimize two cases. */ if (accept[0] == '\0') return NULL; if (accept[1] == '\0') return mbschr (string, accept[0]); /* General case. */ if (MB_CUR_MAX > 1) { mbui_iterator_t iter; for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) { if (mb_len (mbui_cur (iter)) == 1) { if (mbschr (accept, * mbui_cur_ptr (iter))) return (char *) mbui_cur_ptr (iter); } else { mbui_iterator_t aiter; for (mbui_init (aiter, accept); mbui_avail (aiter); mbui_advance (aiter)) if (mb_equal (mbui_cur (aiter), mbui_cur (iter))) return (char *) mbui_cur_ptr (iter); } } return NULL; } else return strpbrk (string, accept); } gnuastro-0.5/bootstrapped/lib/mbschr.c0000644000175000017500000000336413217200021015031 00000000000000/* Searching a string for a character. Copyright (C) 2007-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2007. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include "mbuiter.h" /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. */ char * mbschr (const char *string, int c) { if (MB_CUR_MAX > 1 /* Optimization: We know that ASCII characters < 0x30 don't occur as part of multibyte characters longer than 1 byte. Hence, if c < 0x30, the faster unibyte loop can be used. */ && (unsigned char) c >= 0x30) { mbui_iterator_t iter; for (mbui_init (iter, string);; mbui_advance (iter)) { if (!mbui_avail (iter)) goto notfound; if (mb_len (mbui_cur (iter)) == 1 && (unsigned char) * mbui_cur_ptr (iter) == (unsigned char) c) break; } return (char *) mbui_cur_ptr (iter); notfound: return NULL; } else return strchr (string, c); } gnuastro-0.5/bootstrapped/lib/mbchar.c0000644000175000017500000000234113217200021015001 00000000000000/* Copyright (C) 2001, 2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #define MBCHAR_INLINE _GL_EXTERN_INLINE #include #include "mbchar.h" #if IS_BASIC_ASCII /* Bit table of characters in the ISO C "basic character set". */ const unsigned int is_basic_table [UCHAR_MAX / 32 + 1] = { 0x00001a00, /* '\t' '\v' '\f' */ 0xffffffef, /* ' '...'#' '%'...'?' */ 0xfffffffe, /* 'A'...'Z' '[' '\\' ']' '^' '_' */ 0x7ffffffe /* 'a'...'z' '{' '|' '}' '~' */ /* The remaining bits are 0. */ }; #endif /* IS_BASIC_ASCII */ gnuastro-0.5/bootstrapped/lib/math.c0000644000175000017500000000014313217200021014474 00000000000000#include #define _GL_MATH_INLINE _GL_EXTERN_INLINE #include "math.h" typedef int dummy; gnuastro-0.5/bootstrapped/lib/localcharset.c0000644000175000017500000005033313217200021016215 00000000000000/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2006, 2008-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Bruno Haible . */ #include /* Specification. */ #include "localcharset.h" #include #include #include #include #include #if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET # define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ #endif #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ # define WINDOWS_NATIVE # include #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # ifndef OS2 # define OS2 # endif #endif #if !defined WINDOWS_NATIVE # include # if HAVE_LANGINFO_CODESET # include # else # if 0 /* see comment below */ # include # endif # endif # ifdef __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include # endif #elif defined WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include #endif #if defined OS2 # define INCL_DOS # include #endif /* For MB_CUR_MAX_L */ #if defined DARWIN7 # include #endif #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) # define relocate2(pathname,allocatedp) (*(allocatedp) = NULL, (pathname)) #endif /* Get LIBDIR. */ #ifndef LIBDIR # include "configmake.h" #endif /* Define O_NOFOLLOW to 0 on platforms where it does not exist. */ #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #endif #ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' #endif #ifndef ISSLASH # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) #endif #if HAVE_DECL_GETC_UNLOCKED # undef getc # define getc getc_unlocked #endif /* The following static variable is declared 'volatile' to avoid a possible multithread problem in the function get_charset_aliases. If we are running in a threaded environment, and if two threads initialize 'charset_aliases' simultaneously, both will produce the same value, and everything will be ok if the two assignments to 'charset_aliases' are atomic. But I don't know what will happen if the two assignments mix. */ #if __STDC__ != 1 # define volatile /* empty */ #endif /* Pointer to the contents of the charset.alias file, if it has already been read, else NULL. Its format is: ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ static const char * volatile charset_aliases; /* Return a pointer to the contents of the charset.alias file. */ static const char * get_charset_aliases (void) { const char *cp; cp = charset_aliases; if (cp == NULL) { #if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2) char *malloc_dir = NULL; const char *dir; const char *base = "charset.alias"; char *file_name; /* Make it possible to override the charset.alias location. This is necessary for running the testsuite before "make install". */ dir = getenv ("CHARSETALIASDIR"); if (dir == NULL || dir[0] == '\0') dir = relocate2 (LIBDIR, &malloc_dir); /* Concatenate dir and base into freshly allocated file_name. */ { size_t dir_len = strlen (dir); size_t base_len = strlen (base); int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); file_name = (char *) malloc (dir_len + add_slash + base_len + 1); if (file_name != NULL) { memcpy (file_name, dir, dir_len); if (add_slash) file_name[dir_len] = DIRECTORY_SEPARATOR; memcpy (file_name + dir_len + add_slash, base, base_len + 1); } } free (malloc_dir); if (file_name == NULL) /* Out of memory. Treat the file as empty. */ cp = ""; else { int fd; /* Open the file. Reject symbolic links on platforms that support O_NOFOLLOW. This is a security feature. Without it, an attacker could retrieve parts of the contents (namely, the tail of the first line that starts with "* ") of an arbitrary file by placing a symbolic link to that file under the name "charset.alias" in some writable directory and defining the environment variable CHARSETALIASDIR to point to that directory. */ fd = open (file_name, O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0)); if (fd < 0) /* File not found. Treat it as empty. */ cp = ""; else { FILE *fp; fp = fdopen (fd, "r"); if (fp == NULL) { /* Out of memory. Treat the file as empty. */ close (fd); cp = ""; } else { /* Parse the file's contents. */ char *res_ptr = NULL; size_t res_size = 0; for (;;) { int c; char buf1[50+1]; char buf2[50+1]; size_t l1, l2; char *old_res_ptr; c = getc (fp); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { /* Skip comment, to end of line. */ do c = getc (fp); while (!(c == EOF || c == '\n')); if (c == EOF) break; continue; } ungetc (c, fp); if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) break; l1 = strlen (buf1); l2 = strlen (buf2); old_res_ptr = res_ptr; if (res_size == 0) { res_size = l1 + 1 + l2 + 1; res_ptr = (char *) malloc (res_size + 1); } else { res_size += l1 + 1 + l2 + 1; res_ptr = (char *) realloc (res_ptr, res_size + 1); } if (res_ptr == NULL) { /* Out of memory. */ res_size = 0; free (old_res_ptr); break; } strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); strcpy (res_ptr + res_size - (l2 + 1), buf2); } fclose (fp); if (res_size == 0) cp = ""; else { *(res_ptr + res_size) = '\0'; cp = res_ptr; } } } free (file_name); } #else # if defined DARWIN7 /* To avoid the trouble of installing a file that is shared by many GNU packages -- many packaging systems have problems with this --, simply inline the aliases here. */ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" "ISO8859-2" "\0" "ISO-8859-2" "\0" "ISO8859-4" "\0" "ISO-8859-4" "\0" "ISO8859-5" "\0" "ISO-8859-5" "\0" "ISO8859-7" "\0" "ISO-8859-7" "\0" "ISO8859-9" "\0" "ISO-8859-9" "\0" "ISO8859-13" "\0" "ISO-8859-13" "\0" "ISO8859-15" "\0" "ISO-8859-15" "\0" "KOI8-R" "\0" "KOI8-R" "\0" "KOI8-U" "\0" "KOI8-U" "\0" "CP866" "\0" "CP866" "\0" "CP949" "\0" "CP949" "\0" "CP1131" "\0" "CP1131" "\0" "CP1251" "\0" "CP1251" "\0" "eucCN" "\0" "GB2312" "\0" "GB2312" "\0" "GB2312" "\0" "eucJP" "\0" "EUC-JP" "\0" "eucKR" "\0" "EUC-KR" "\0" "Big5" "\0" "BIG5" "\0" "Big5HKSCS" "\0" "BIG5-HKSCS" "\0" "GBK" "\0" "GBK" "\0" "GB18030" "\0" "GB18030" "\0" "SJIS" "\0" "SHIFT_JIS" "\0" "ARMSCII-8" "\0" "ARMSCII-8" "\0" "PT154" "\0" "PT154" "\0" /*"ISCII-DEV" "\0" "?" "\0"*/ "*" "\0" "UTF-8" "\0"; # endif # if defined VMS /* To avoid the troubles of an extra file charset.alias_vms in the sources of many GNU packages, simply inline the aliases here. */ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation "Compaq C Run-Time Library Reference Manual for OpenVMS systems" section 10.7 "Handling Different Character Sets". */ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" "ISO8859-2" "\0" "ISO-8859-2" "\0" "ISO8859-5" "\0" "ISO-8859-5" "\0" "ISO8859-7" "\0" "ISO-8859-7" "\0" "ISO8859-8" "\0" "ISO-8859-8" "\0" "ISO8859-9" "\0" "ISO-8859-9" "\0" /* Japanese */ "eucJP" "\0" "EUC-JP" "\0" "SJIS" "\0" "SHIFT_JIS" "\0" "DECKANJI" "\0" "DEC-KANJI" "\0" "SDECKANJI" "\0" "EUC-JP" "\0" /* Chinese */ "eucTW" "\0" "EUC-TW" "\0" "DECHANYU" "\0" "DEC-HANYU" "\0" "DECHANZI" "\0" "GB2312" "\0" /* Korean */ "DECKOREAN" "\0" "EUC-KR" "\0"; # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* To avoid the troubles of installing a separate file in the same directory as the DLL and of retrieving the DLL's directory at runtime, simply inline the aliases here. */ cp = "CP936" "\0" "GBK" "\0" "CP1361" "\0" "JOHAB" "\0" "CP20127" "\0" "ASCII" "\0" "CP20866" "\0" "KOI8-R" "\0" "CP20936" "\0" "GB2312" "\0" "CP21866" "\0" "KOI8-RU" "\0" "CP28591" "\0" "ISO-8859-1" "\0" "CP28592" "\0" "ISO-8859-2" "\0" "CP28593" "\0" "ISO-8859-3" "\0" "CP28594" "\0" "ISO-8859-4" "\0" "CP28595" "\0" "ISO-8859-5" "\0" "CP28596" "\0" "ISO-8859-6" "\0" "CP28597" "\0" "ISO-8859-7" "\0" "CP28598" "\0" "ISO-8859-8" "\0" "CP28599" "\0" "ISO-8859-9" "\0" "CP28605" "\0" "ISO-8859-15" "\0" "CP38598" "\0" "ISO-8859-8" "\0" "CP51932" "\0" "EUC-JP" "\0" "CP51936" "\0" "GB2312" "\0" "CP51949" "\0" "EUC-KR" "\0" "CP51950" "\0" "EUC-TW" "\0" "CP54936" "\0" "GB18030" "\0" "CP65001" "\0" "UTF-8" "\0"; # endif # if defined OS2 /* To avoid the troubles of installing a separate file in the same directory as the DLL and of retrieving the DLL's directory at runtime, simply inline the aliases here. */ /* The list of encodings is taken from "List of OS/2 Codepages" by Alex Taylor: . See also "IBM Globalization - Code page identifiers": . */ cp = "CP813" "\0" "ISO-8859-7" "\0" "CP878" "\0" "KOI8-R" "\0" "CP819" "\0" "ISO-8859-1" "\0" "CP912" "\0" "ISO-8859-2" "\0" "CP913" "\0" "ISO-8859-3" "\0" "CP914" "\0" "ISO-8859-4" "\0" "CP915" "\0" "ISO-8859-5" "\0" "CP916" "\0" "ISO-8859-8" "\0" "CP920" "\0" "ISO-8859-9" "\0" "CP921" "\0" "ISO-8859-13" "\0" "CP923" "\0" "ISO-8859-15" "\0" "CP954" "\0" "EUC-JP" "\0" "CP964" "\0" "EUC-TW" "\0" "CP970" "\0" "EUC-KR" "\0" "CP1089" "\0" "ISO-8859-6" "\0" "CP1208" "\0" "UTF-8" "\0" "CP1381" "\0" "GB2312" "\0" "CP1386" "\0" "GBK" "\0" "CP3372" "\0" "EUC-JP" "\0"; # endif #endif charset_aliases = cp; } return cp; } /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ #ifdef STATIC STATIC #endif const char * locale_charset (void) { const char *codeset; const char *aliases; #if !(defined WINDOWS_NATIVE || defined OS2) # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); # ifdef __CYGWIN__ /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always returns "US-ASCII". Return the suffix of the locale name from the environment variables (if present) or the codepage as a number. */ if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) { const char *locale; static char buf[2 + 10 + 1]; locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } } /* The Windows API has a function returning the locale's codepage as a number: GetACP(). This encoding is used by Cygwin, unless the user has set the environment variable CYGWIN=codepage:oem (which very few people do). Output directed to console windows needs to be converted (to GetOEMCP() if the console is using a raster font, or to GetConsoleOutputCP() if it is using a TrueType font). Cygwin does this conversion transparently (see winsup/cygwin/fhandler_console.cc), converting to GetConsoleOutputCP(). This leads to correct results, except when SetConsoleOutputCP has been called and a raster font is in use. */ sprintf (buf, "CP%u", GetACP ()); codeset = buf; } # endif # else /* On old systems which lack it, use setlocale or getenv. */ const char *locale = NULL; /* But most old systems don't have a complete set of locales. Some (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't use setlocale here; it would return "C" when it doesn't support the locale name the user has set. */ # if 0 locale = setlocale (LC_CTYPE, NULL); # endif if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } } /* On some old systems, one used to set locale = "iso8859_1". On others, you set it to "language_COUNTRY.charset". In any case, we resolve it through the charset.alias file. */ codeset = locale; # endif #elif defined WINDOWS_NATIVE static char buf[2 + 10 + 1]; /* The Windows API has a function returning the locale's codepage as a number, but the value doesn't change according to what the 'setlocale' call specified. So we use it as a last resort, in case the string returned by 'setlocale' doesn't specify the codepage. */ char *current_locale = setlocale (LC_ALL, NULL); char *pdot; /* If they set different locales for different categories, 'setlocale' will return a semi-colon separated list of locale values. To make sure we use the correct one, we choose LC_CTYPE. */ if (strchr (current_locale, ';')) current_locale = setlocale (LC_CTYPE, NULL); pdot = strrchr (current_locale, '.'); if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf)) sprintf (buf, "CP%s", pdot + 1); else { /* The Windows API has a function returning the locale's codepage as a number: GetACP(). When the output goes to a console window, it needs to be provided in GetOEMCP() encoding if the console is using a raster font, or in GetConsoleOutputCP() encoding if it is using a TrueType font. But in GUI programs and for output sent to files and pipes, GetACP() encoding is the best bet. */ sprintf (buf, "CP%u", GetACP ()); } codeset = buf; #elif defined OS2 const char *locale; static char buf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; codeset = NULL; /* Allow user to override the codeset, as set in the operating system, with standard language environment variables. */ locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } /* For the POSIX locale, don't use the system's codepage. */ if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) codeset = ""; } if (codeset == NULL) { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) codeset = ""; else { sprintf (buf, "CP%u", cp[0]); codeset = buf; } } #endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; /* Resolve alias. */ for (aliases = get_charset_aliases (); *aliases != '\0'; aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) if (strcmp (codeset, aliases) == 0 || (aliases[0] == '*' && aliases[1] == '\0')) { codeset = aliases + strlen (aliases) + 1; break; } /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ if (codeset[0] == '\0') codeset = "ASCII"; #ifdef DARWIN7 /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" (the default codeset) does not work when MB_CUR_MAX is 1. */ if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1) codeset = "ASCII"; #endif return codeset; } gnuastro-0.5/bootstrapped/lib/localcharset.h0000644000175000017500000000243313217200021016220 00000000000000/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2003, 2009-2017 Free Software Foundation, Inc. This file is part of the GNU CHARSET Library. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _LOCALCHARSET_H #define _LOCALCHARSET_H #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); #ifdef __cplusplus } #endif #endif /* _LOCALCHARSET_H */ gnuastro-0.5/bootstrapped/lib/hard-locale.c0000644000175000017500000000414613217200021015725 00000000000000/* hard-locale.c -- Determine whether a locale is hard. Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "hard-locale.h" #include #include #include #ifdef __GLIBC__ # define GLIBC_VERSION __GLIBC__ #elif defined __UCLIBC__ # define GLIBC_VERSION 2 #else # define GLIBC_VERSION 0 #endif /* Return true if the current CATEGORY locale is hard, i.e. if you can't get away with assuming traditional C or POSIX behavior. */ bool hard_locale (int category) { bool hard = true; char const *p = setlocale (category, NULL); if (p) { if (2 <= GLIBC_VERSION) { if (strcmp (p, "C") == 0 || strcmp (p, "POSIX") == 0) hard = false; } else { char *locale = strdup (p); if (locale) { /* Temporarily set the locale to the "C" and "POSIX" locales to find their names, so that we can determine whether one or the other is the caller's locale. */ if (((p = setlocale (category, "C")) && strcmp (p, locale) == 0) || ((p = setlocale (category, "POSIX")) && strcmp (p, locale) == 0)) hard = false; /* Restore the caller's locale. */ setlocale (category, locale); free (locale); } } } return hard; } gnuastro-0.5/bootstrapped/lib/gettext.h0000644000175000017500000002410013217200021015233 00000000000000/* Convenience header for conditional use of GNU . Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option or through "#define ENABLE NLS 0" before including this file. */ #if defined ENABLE_NLS && ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by the gettext() and ngettext() macros. This is an alternative to calling textdomain(), and is useful for libraries. */ # ifdef DEFAULT_TEXT_DOMAIN # undef gettext # define gettext(Msgid) \ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) # endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. We don't include as well because people using "gettext.h" will not include , and also including would fail on SunOS 4, whereas is OK. */ #if defined(__sun) # include #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include , which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) # include # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H # include # endif #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # undef gettext # define gettext(Msgid) ((const char *) (Msgid)) # undef dgettext # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) # undef dcgettext # define dcgettext(Domainname, Msgid, Category) \ ((void) (Category), dgettext (Domainname, Msgid)) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 \ ? ((void) (Msgid2), (const char *) (Msgid1)) \ : ((void) (Msgid1), (const char *) (Msgid2))) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) # undef textdomain # define textdomain(Domainname) ((const char *) (Domainname)) # undef bindtextdomain # define bindtextdomain(Domainname, Dirname) \ ((void) (Domainname), (const char *) (Dirname)) # undef bind_textdomain_codeset # define bind_textdomain_codeset(Domainname, Codeset) \ ((void) (Domainname), (const char *) (Codeset)) #endif /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String /* The separator between msgctxt and msgid in a .mo file. */ #define GETTEXT_CONTEXT_GLUE "\004" /* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be short and rarely need to change. The letter 'p' stands for 'particular' or 'special'. */ #ifdef DEFAULT_TEXT_DOMAIN # define pgettext(Msgctxt, Msgid) \ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #else # define pgettext(Msgctxt, Msgid) \ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #endif #define dpgettext(Domainname, Msgctxt, Msgid) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) #ifdef DEFAULT_TEXT_DOMAIN # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #else # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #endif #define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * pgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, int category) { const char *translation = dcgettext (domain, msg_ctxt_id, category); if (translation == msg_ctxt_id) return msgid; else return translation; } #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * npgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { const char *translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); if (translation == msg_ctxt_id || translation == msgid_plural) return (n == 1 ? msgid : msgid_plural); else return translation; } /* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID can be arbitrary expressions. But for string literals these macros are less efficient than those above. */ #include #if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ /* || __STDC_VERSION__ == 199901L || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ ) # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 #else # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 #endif #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS #include #endif #define pgettext_expr(Msgctxt, Msgid) \ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) #define dpgettext_expr(Domainname, Msgctxt, Msgid) \ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcgettext (domain, msg_ctxt_id, category); found_translation = (translation != msg_ctxt_id); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return msgid; } #define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcnpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return (n == 1 ? msgid : msgid_plural); } #endif /* _LIBGETTEXT_H */ gnuastro-0.5/bootstrapped/lib/getprogname.c0000644000175000017500000001335113217200021016060 00000000000000/* Program name management. Copyright (C) 2016-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include "getprogname.h" #include /* get program_invocation_name declaration */ #include /* get __argv declaration */ #ifdef _AIX # include # include # include #endif #ifdef __MVS__ # ifndef _OPEN_SYS # define _OPEN_SYS # endif # include # include #endif #ifdef __hpux # include # include # include # include #endif #ifdef __sgi # include # include # include # include # include #endif #include "dirname.h" #ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ char const * getprogname (void) { # if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return program_invocation_short_name; # elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return last_component (program_invocation_name); # elif HAVE_GETEXECNAME /* Solaris */ /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ const char *p = getexecname (); if (!p) p = "?"; return last_component (p); # elif HAVE_DECL___ARGV /* mingw, MSVC */ /* https://msdn.microsoft.com/en-us/library/dn727674.aspx */ const char *p = __argv && __argv[0] ? __argv[0] : "?"; return last_component (p); # elif HAVE_VAR___PROGNAME /* OpenBSD, QNX */ /* https://man.openbsd.org/style.9 */ /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ /* Be careful to declare this only when we absolutely need it (OpenBSD 5.1), rather than when it's available. Otherwise, its mere declaration makes program_invocation_short_name malfunction (have zero length) with Fedora 25's glibc. */ extern char *__progname; const char *p = __progname; return p && p[0] ? p : "?"; # elif _AIX /* AIX */ /* Idea by Bastien ROUCARIÈS, https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm */ static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct procentry64 procs; p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) ? strdup (procs.pi_comm) : NULL); if (!p) p = "?"; } return p; # elif defined __hpux static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct pst_status status; p = (0 < pstat_getproc (&status, sizeof status, 0, pid) ? strdup (status.pst_ucomm) : NULL); if (!p) p = "?"; } return p; # elif __MVS__ /* z/OS */ /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */ static char *p = "?"; static int first = 1; if (first) { pid_t pid = getpid (); int token; W_PSPROC buf; first = 0; memset (&buf, 0, sizeof(buf)); buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG); buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN); buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN); if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr) { for (token = 0; token >= 0; token = w_getpsent (token, &buf, sizeof(buf))) { if (token > 0 && buf.ps_pid == pid) { char *s = strdup (last_component (buf.ps_pathptr)); if (s) p = s; break; } } } free (buf.ps_cmdptr); free (buf.ps_conttyptr); free (buf.ps_pathptr); } return p; # elif defined __sgi /* IRIX */ char filename[50]; int fd; sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); fd = open (filename, O_RDONLY); if (0 <= fd) { prpsinfo_t buf; int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); close (fd); if (ioctl_ok) { char *name = buf.pr_fname; size_t namesize = sizeof buf.pr_fname; char *namenul = memchr (name, '\0', namesize); size_t namelen = namenul ? namenul - name : namesize; char *namecopy = malloc (namelen + 1); if (namecopy) { namecopy[namelen] = 0; return memcpy (namecopy, name, namelen); } } } return NULL; # else # error "getprogname module not ported to this OS" # endif } #endif gnuastro-0.5/bootstrapped/lib/getprogname.h0000644000175000017500000000217413217200021016066 00000000000000/* Program name management. Copyright (C) 2016-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_GETPROGNAME_H #define _GL_GETPROGNAME_H #include #ifdef __cplusplus extern "C" { #endif /* Return the base name of the executing program. On native Windows this will usually end in ".exe" or ".EXE". */ #ifndef HAVE_GETPROGNAME extern char const *getprogname (void) # ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME _GL_ATTRIBUTE_PURE # endif ; #endif #ifdef __cplusplus } #endif #endif gnuastro-0.5/bootstrapped/lib/stripslash.c0000644000175000017500000000304213217200021015740 00000000000000/* stripslash.c -- remove redundant trailing slashes from a file name Copyright (C) 1990, 2001, 2003-2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "dirname.h" /* Remove trailing slashes from FILE. Return true if a trailing slash was removed. This is useful when using file name completion from a shell that adds a "/" after directory names (such as tcsh and bash), because on symlinks to directories, several system calls have different semantics according to whether a trailing slash is present. */ bool strip_trailing_slashes (char *file) { char *base = last_component (file); char *base_lim; bool had_slash; /* last_component returns "" for file system roots, but we need to turn "///" into "/". */ if (! *base) base = file; base_lim = base + base_len (base); had_slash = (*base_lim != '\0'); *base_lim = '\0'; return had_slash; } gnuastro-0.5/bootstrapped/lib/basename-lgpl.c0000644000175000017500000000406213217200020016255 00000000000000/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "dirname.h" #include /* Return the address of the last file name component of NAME. If NAME has no relative file name components because it is a file system root, return the empty string. */ char * last_component (char const *name) { char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); char const *p; bool saw_slash = false; while (ISSLASH (*base)) base++; for (p = base; *p; p++) { if (ISSLASH (*p)) saw_slash = true; else if (saw_slash) { base = p; saw_slash = false; } } return (char *) base; } /* Return the length of the basename NAME. Typically NAME is the value returned by base_name or last_component. Act like strlen (NAME), except omit all trailing slashes. */ size_t base_len (char const *name) { size_t len; size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) return 2; if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len && len == prefix_len && ISSLASH (name[prefix_len])) return prefix_len + 1; return len; } gnuastro-0.5/bootstrapped/lib/dirname-lgpl.c0000644000175000017500000000612113217200021016120 00000000000000/* dirname.c -- return all but the last element in a file name Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "dirname.h" #include #include /* Return the length of the prefix of FILE that will be used by dir_name. If FILE is in the working directory, this returns zero even though 'dir_name (FILE)' will return ".". Works properly even if there are trailing slashes (by effectively ignoring them). */ size_t dir_len (char const *file) { size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); size_t length; /* Advance prefix_length beyond important leading slashes. */ prefix_length += (prefix_length != 0 ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && ISSLASH (file[prefix_length])) : (ISSLASH (file[0]) ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT && ISSLASH (file[1]) && ! ISSLASH (file[2]) ? 2 : 1)) : 0)); /* Strip the basename and any redundant slashes before it. */ for (length = last_component (file) - file; prefix_length < length; length--) if (! ISSLASH (file[length - 1])) break; return length; } /* In general, we can't use the builtin 'dirname' function if available, since it has different meanings in different environments. In some environments the builtin 'dirname' modifies its argument. Return the leading directories part of FILE, allocated with malloc. Works properly even if there are trailing slashes (by effectively ignoring them). Return NULL on failure. If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); lstat (base_name (FILE)); } will access the same file. Likewise, if the sequence { chdir (dir_name (FILE)); rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE to "foo" in the same directory FILE was in. */ char * mdir_name (char const *file) { size_t length = dir_len (file); bool append_dot = (length == 0 || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && length == FILE_SYSTEM_PREFIX_LEN (file) && file[2] != '\0' && ! ISSLASH (file[2]))); char *dir = malloc (length + append_dot + 1); if (!dir) return NULL; memcpy (dir, file, length); if (append_dot) dir[length++] = '.'; dir[length] = '\0'; return dir; } gnuastro-0.5/bootstrapped/lib/c-ctype.c0000644000175000017500000000012213217200020015103 00000000000000#include #define C_CTYPE_INLINE _GL_EXTERN_INLINE #include "c-ctype.h" gnuastro-0.5/bootstrapped/lib/c-ctype.h0000644000175000017500000002240713217200021015123 00000000000000/* Character handling in C locale. These functions work like the corresponding functions in , except that they have the C (POSIX) locale hardwired, whereas the functions' behaviour depends on the current locale set via setlocale. Copyright (C) 2000-2003, 2006, 2008-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ #ifndef C_CTYPE_H #define C_CTYPE_H #include #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef C_CTYPE_INLINE # define C_CTYPE_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* The functions defined in this file assume the "C" locale and a character set without diacritics (ASCII-US or EBCDIC-US or something like that). Even if the "C" locale on a particular system is an extension of the ASCII character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it is ISO-8859-1), the functions in this file recognize only the ASCII characters. */ #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) /* The character set is ASCII or one of its variants or extensions, not EBCDIC. Testing the value of '\n' and '\r' is not relevant. */ # define C_CTYPE_ASCII 1 #elif ! (' ' == '\x40' && '0' == '\xf0' \ && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') # error "Only ASCII and EBCDIC are supported" #endif #if 'A' < 0 # error "EBCDIC and char is signed -- not supported" #endif /* Cases for control characters. */ #define _C_CTYPE_CNTRL \ case '\a': case '\b': case '\f': case '\n': \ case '\r': case '\t': case '\v': \ _C_CTYPE_OTHER_CNTRL /* ASCII control characters other than those with \-letter escapes. */ #if C_CTYPE_ASCII # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x04': case '\x05': case '\x06': case '\x0e': \ case '\x0f': case '\x10': case '\x11': case '\x12': \ case '\x13': case '\x14': case '\x15': case '\x16': \ case '\x17': case '\x18': case '\x19': case '\x1a': \ case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x7f' #else /* Use EBCDIC code page 1047's assignments for ASCII control chars; assume all EBCDIC code pages agree about these assignments. */ # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x07': case '\x0e': case '\x0f': case '\x10': \ case '\x11': case '\x12': case '\x13': case '\x18': \ case '\x19': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x26': case '\x27': case '\x2d': \ case '\x2e': case '\x32': case '\x37': case '\x3c': \ case '\x3d': case '\x3f' #endif /* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ #define _C_CTYPE_LOWER_A_THRU_F_N(N) \ case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \ case 'e' + (N): case 'f' + (N) #define _C_CTYPE_LOWER_N(N) \ _C_CTYPE_LOWER_A_THRU_F_N(N): \ case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \ case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \ case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \ case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \ case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N) /* Cases for hex letters, digits, lower, punct, and upper. */ #define _C_CTYPE_A_THRU_F \ _C_CTYPE_LOWER_A_THRU_F_N (0): \ _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') #define _C_CTYPE_DIGIT \ case '0': case '1': case '2': case '3': \ case '4': case '5': case '6': case '7': \ case '8': case '9' #define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) #define _C_CTYPE_PUNCT \ case '!': case '"': case '#': case '$': \ case '%': case '&': case '\'': case '(': \ case ')': case '*': case '+': case ',': \ case '-': case '.': case '/': case ':': \ case ';': case '<': case '=': case '>': \ case '?': case '@': case '[': case '\\': \ case ']': case '^': case '_': case '`': \ case '{': case '|': case '}': case '~' #define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') /* Function definitions. */ /* Unlike the functions in , which require an argument in the range of the 'unsigned char' type, the functions here operate on values that are in the 'unsigned char' range or in the 'char' range. In other words, when you have a 'char' value, you need to cast it before using it as argument to a function: const char *s = ...; if (isalpha ((unsigned char) *s)) ... but you don't need to cast it for the functions defined in this file: const char *s = ...; if (c_isalpha (*s)) ... */ C_CTYPE_INLINE bool c_isalnum (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isalpha (int c) { switch (c) { _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } /* The function isascii is not locale dependent. Its use in EBCDIC is questionable. */ C_CTYPE_INLINE bool c_isascii (int c) { switch (c) { case ' ': _C_CTYPE_CNTRL: _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isblank (int c) { return c == ' ' || c == '\t'; } C_CTYPE_INLINE bool c_iscntrl (int c) { switch (c) { _C_CTYPE_CNTRL: return true; default: return false; } } C_CTYPE_INLINE bool c_isdigit (int c) { switch (c) { _C_CTYPE_DIGIT: return true; default: return false; } } C_CTYPE_INLINE bool c_isgraph (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_islower (int c) { switch (c) { _C_CTYPE_LOWER: return true; default: return false; } } C_CTYPE_INLINE bool c_isprint (int c) { switch (c) { case ' ': _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_ispunct (int c) { switch (c) { _C_CTYPE_PUNCT: return true; default: return false; } } C_CTYPE_INLINE bool c_isspace (int c) { switch (c) { case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': return true; default: return false; } } C_CTYPE_INLINE bool c_isupper (int c) { switch (c) { _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isxdigit (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_A_THRU_F: return true; default: return false; } } C_CTYPE_INLINE int c_tolower (int c) { switch (c) { _C_CTYPE_UPPER: return c - 'A' + 'a'; default: return c; } } C_CTYPE_INLINE int c_toupper (int c) { switch (c) { _C_CTYPE_LOWER: return c - 'a' + 'A'; default: return c; } } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* C_CTYPE_H */ gnuastro-0.5/bootstrapped/lib/argp-xinl.c0000644000175000017500000000256613217200020015456 00000000000000/* Real definitions for extern inline functions in argp.h Copyright (C) 1997-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #if defined _LIBC || defined HAVE_FEATURES_H # include #endif #ifndef __USE_EXTERN_INLINES # define __USE_EXTERN_INLINES 1 #endif #ifdef _LIBC # define ARGP_EI #else # define ARGP_EI _GL_EXTERN_INLINE #endif #undef __OPTIMIZE__ #define __OPTIMIZE__ 1 #include "argp.h" /* Add weak aliases. */ #if _LIBC - 0 && defined (weak_alias) weak_alias (__argp_usage, argp_usage) weak_alias (__option_is_short, _option_is_short) weak_alias (__option_is_end, _option_is_end) #endif gnuastro-0.5/bootstrapped/lib/argp-pvh.c0000644000175000017500000000253613217200020015276 00000000000000/* Default definition for ARGP_PROGRAM_VERSION_HOOK. Copyright (C) 1996-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include "argp.h" /* If set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which calls this function with a stream to print the version to and a pointer to the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ void (*argp_program_version_hook) (FILE *stream, struct argp_state *state) = NULL; gnuastro-0.5/bootstrapped/lib/argp-pv.c0000644000175000017500000000301613217200020015120 00000000000000/* Default definition for ARGP_PROGRAM_VERSION. Copyright (C) 1996-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* If set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which will print this string followed by a newline and exit (unless the ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ const char *argp_program_version /* This variable should be zero-initialized. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3 and 10.4, see . */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else = (const char *) 0 #endif ; gnuastro-0.5/bootstrapped/lib/argp-pin.c0000644000175000017500000000226213217200020015263 00000000000000/* Full and short program names for argp module Copyright (C) 2005, 2009-2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME char *program_invocation_short_name = 0; #endif #ifndef HAVE_PROGRAM_INVOCATION_NAME char *program_invocation_name = 0; #endif #if (defined HAVE_PROGRAM_INVOCATION_SHORT_NAME \ && defined HAVE_PROGRAM_INVOCATION_NAME) /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif gnuastro-0.5/bootstrapped/lib/argp-parse.c0000644000175000017500000007577313217200020015630 00000000000000/* Hierarchical argument parsing, layered over getopt Copyright (C) 1995-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #ifdef _LIBC # include # undef dgettext # define dgettext(domain, msgid) \ __dcgettext (domain, msgid, LC_MESSAGES) #else # include "gettext.h" #endif #define N_(msgid) msgid #include "argp.h" #include "argp-namefrob.h" #define alignto(n, d) ((((n) + (d) - 1) / (d)) * (d)) /* Getopt return values. */ #define KEY_END (-1) /* The end of the options. */ #define KEY_ARG 1 /* A non-option argument. */ #define KEY_ERR '?' /* An error parsing the options. */ /* The meta-argument used to prevent any further arguments being interpreted as options. */ #define QUOTE "--" /* The number of bits we steal in a long-option value for our own use. */ #define GROUP_BITS CHAR_BIT /* The number of bits available for the user value. */ #define USER_BITS ((sizeof ((struct option *)0)->val * CHAR_BIT) - GROUP_BITS) #define USER_MASK ((1 << USER_BITS) - 1) /* EZ alias for ARGP_ERR_UNKNOWN. */ #define EBADKEY ARGP_ERR_UNKNOWN /* Default options. */ /* When argp is given the --HANG switch, _ARGP_HANG is set and argp will sleep for one second intervals, decrementing _ARGP_HANG until it's zero. Thus you can force the program to continue by attaching a debugger and setting it to 0 yourself. */ static volatile int _argp_hang; #define OPT_PROGNAME -2 #define OPT_USAGE -3 #define OPT_HANG -4 static const struct argp_option argp_default_options[] = { {"help", '?', 0, 0, N_("give this help list"), -1}, {"usage", OPT_USAGE, 0, 0, N_("give a short usage message"), 0}, {"program-name",OPT_PROGNAME, N_("NAME"), OPTION_HIDDEN, N_("set the program name"), 0}, {"HANG", OPT_HANG, N_("SECS"), OPTION_ARG_OPTIONAL | OPTION_HIDDEN, N_("hang for SECS seconds (default 3600)"), 0}, {NULL, 0, 0, 0, NULL, 0} }; static error_t argp_default_parser (int key, char *arg, struct argp_state *state) { switch (key) { case '?': __argp_state_help (state, state->out_stream, ARGP_HELP_STD_HELP); break; case OPT_USAGE: __argp_state_help (state, state->out_stream, ARGP_HELP_USAGE | ARGP_HELP_EXIT_OK); break; case OPT_PROGNAME: /* Set the program name. */ #if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_NAME program_invocation_name = arg; #endif /* [Note that some systems only have PROGRAM_INVOCATION_SHORT_NAME (aka __PROGNAME), in which case, PROGRAM_INVOCATION_NAME is just defined to be that, so we have to be a bit careful here.] */ /* Update what we use for messages. */ state->name = __argp_base_name (arg); #if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME program_invocation_short_name = state->name; #endif if ((state->flags & (ARGP_PARSE_ARGV0 | ARGP_NO_ERRS)) == ARGP_PARSE_ARGV0) /* Update what getopt uses too. */ state->argv[0] = arg; break; case OPT_HANG: _argp_hang = atoi (arg ? arg : "3600"); while (_argp_hang-- > 0) __sleep (1); break; default: return EBADKEY; } return 0; } static const struct argp argp_default_argp = {argp_default_options, &argp_default_parser, NULL, NULL, NULL, NULL, "libc"}; static const struct argp_option argp_version_options[] = { {"version", 'V', 0, 0, N_("print program version"), -1}, {NULL, 0, 0, 0, NULL, 0} }; static error_t argp_version_parser (int key, char *arg, struct argp_state *state) { switch (key) { case 'V': if (argp_program_version_hook) (*argp_program_version_hook) (state->out_stream, state); else if (argp_program_version) fprintf (state->out_stream, "%s\n", argp_program_version); else __argp_error (state, "%s", dgettext (state->root_argp->argp_domain, "(PROGRAM ERROR) No version known!?")); if (! (state->flags & ARGP_NO_EXIT)) exit (0); break; default: return EBADKEY; } return 0; } static const struct argp argp_version_argp = {argp_version_options, &argp_version_parser, NULL, NULL, NULL, NULL, "libc"}; /* Returns the offset into the getopt long options array LONG_OPTIONS of a long option with called NAME, or -1 if none is found. Passing NULL as NAME will return the number of options. */ static int find_long_option (struct option *long_options, const char *name) { struct option *l = long_options; while (l->name != NULL) if (name != NULL && strcmp (l->name, name) == 0) return l - long_options; else l++; if (name == NULL) return l - long_options; else return -1; } /* The state of a "group" during parsing. Each group corresponds to a particular argp structure from the tree of such descending from the top level argp passed to argp_parse. */ struct group { /* This group's parsing function. */ argp_parser_t parser; /* Which argp this group is from. */ const struct argp *argp; /* Points to the point in SHORT_OPTS corresponding to the end of the short options for this group. We use it to determine from which group a particular short options is from. */ char *short_end; /* The number of non-option args successfully handled by this parser. */ unsigned args_processed; /* This group's parser's parent's group. */ struct group *parent; unsigned parent_index; /* And the our position in the parent. */ /* These fields are swapped into and out of the state structure when calling this group's parser. */ void *input, **child_inputs; void *hook; }; /* Call GROUP's parser with KEY and ARG, swapping any group-specific info from STATE before calling, and back into state afterwards. If GROUP has no parser, EBADKEY is returned. */ static error_t group_parse (struct group *group, struct argp_state *state, int key, char *arg) { if (group->parser) { error_t err; state->hook = group->hook; state->input = group->input; state->child_inputs = group->child_inputs; state->arg_num = group->args_processed; err = (*group->parser)(key, arg, state); group->hook = state->hook; return err; } else return EBADKEY; } struct parser { const struct argp *argp; /* SHORT_OPTS is the getopt short options string for the union of all the groups of options. */ char *short_opts; /* LONG_OPTS is the array of getop long option structures for the union of all the groups of options. */ struct option *long_opts; /* OPT_DATA is the getopt data used for the re-entrant getopt. */ struct _getopt_data opt_data; /* States of the various parsing groups. */ struct group *groups; /* The end of the GROUPS array. */ struct group *egroup; /* A vector containing storage for the CHILD_INPUTS field in all groups. */ void **child_inputs; /* True if we think using getopt is still useful; if false, then remaining arguments are just passed verbatim with ARGP_KEY_ARG. This is cleared whenever getopt returns KEY_END, but may be set again if the user moves the next argument pointer backwards. */ int try_getopt; /* State block supplied to parsing routines. */ struct argp_state state; /* Memory used by this parser. */ void *storage; }; /* The next usable entries in the various parser tables being filled in by convert_options. */ struct parser_convert_state { struct parser *parser; char *short_end; struct option *long_end; void **child_inputs_end; }; /* Converts all options in ARGP (which is put in GROUP) and ancestors into getopt options stored in SHORT_OPTS and LONG_OPTS; SHORT_END and CVT->LONG_END are the points at which new options are added. Returns the next unused group entry. CVT holds state used during the conversion. */ static struct group * convert_options (const struct argp *argp, struct group *parent, unsigned parent_index, struct group *group, struct parser_convert_state *cvt) { /* REAL is the most recent non-alias value of OPT. */ const struct argp_option *real = argp->options; const struct argp_child *children = argp->children; if (real || argp->parser) { const struct argp_option *opt; if (real) for (opt = real; !__option_is_end (opt); opt++) { if (! (opt->flags & OPTION_ALIAS)) /* OPT isn't an alias, so we can use values from it. */ real = opt; if (! (real->flags & OPTION_DOC)) /* A real option (not just documentation). */ { if (__option_is_short (opt)) /* OPT can be used as a short option. */ { *cvt->short_end++ = opt->key; if (real->arg) { *cvt->short_end++ = ':'; if (real->flags & OPTION_ARG_OPTIONAL) *cvt->short_end++ = ':'; } *cvt->short_end = '\0'; /* keep 0 terminated */ } if (opt->name && find_long_option (cvt->parser->long_opts, opt->name) < 0) /* OPT can be used as a long option. */ { cvt->long_end->name = opt->name; cvt->long_end->has_arg = (real->arg ? (real->flags & OPTION_ARG_OPTIONAL ? optional_argument : required_argument) : no_argument); cvt->long_end->flag = 0; /* we add a disambiguating code to all the user's values (which is removed before we actually call the function to parse the value); this means that the user loses use of the high 8 bits in all his values (the sign of the lower bits is preserved however)... */ cvt->long_end->val = ((opt->key ? opt->key : real->key) & USER_MASK) + (((group - cvt->parser->groups) + 1) << USER_BITS); /* Keep the LONG_OPTS list terminated. */ (++cvt->long_end)->name = NULL; } } } group->parser = argp->parser; group->argp = argp; group->short_end = cvt->short_end; group->args_processed = 0; group->parent = parent; group->parent_index = parent_index; group->input = 0; group->hook = 0; group->child_inputs = 0; if (children) /* Assign GROUP's CHILD_INPUTS field some space from CVT->child_inputs_end.*/ { unsigned num_children = 0; while (children[num_children].argp) num_children++; group->child_inputs = cvt->child_inputs_end; cvt->child_inputs_end += num_children; } parent = group++; } else parent = 0; if (children) { unsigned index = 0; while (children->argp) group = convert_options (children++->argp, parent, index++, group, cvt); } return group; } /* Find the merged set of getopt options, with keys appropriately prefixed. */ static void parser_convert (struct parser *parser, const struct argp *argp, int flags) { struct parser_convert_state cvt; cvt.parser = parser; cvt.short_end = parser->short_opts; cvt.long_end = parser->long_opts; cvt.child_inputs_end = parser->child_inputs; if (flags & ARGP_IN_ORDER) *cvt.short_end++ = '-'; else if (flags & ARGP_NO_ARGS) *cvt.short_end++ = '+'; *cvt.short_end = '\0'; cvt.long_end->name = NULL; parser->argp = argp; if (argp) parser->egroup = convert_options (argp, 0, 0, parser->groups, &cvt); else parser->egroup = parser->groups; /* No parsers at all! */ } /* Lengths of various parser fields which we will allocated. */ struct parser_sizes { size_t short_len; /* Getopt short options string. */ size_t long_len; /* Getopt long options vector. */ size_t num_groups; /* Group structures we allocate. */ size_t num_child_inputs; /* Child input slots. */ }; /* For ARGP, increments the NUM_GROUPS field in SZS by the total number of argp structures descended from it, and the SHORT_LEN & LONG_LEN fields by the maximum lengths of the resulting merged getopt short options string and long-options array, respectively. */ static void calc_sizes (const struct argp *argp, struct parser_sizes *szs) { const struct argp_child *child = argp->children; const struct argp_option *opt = argp->options; if (opt || argp->parser) { szs->num_groups++; if (opt) { int num_opts = 0; while (!__option_is_end (opt++)) num_opts++; szs->short_len += num_opts * 3; /* opt + up to 2 ':'s */ szs->long_len += num_opts; } } if (child) while (child->argp) { calc_sizes ((child++)->argp, szs); szs->num_child_inputs++; } } /* Initializes PARSER to parse ARGP in a manner described by FLAGS. */ static error_t parser_init (struct parser *parser, const struct argp *argp, int argc, char **argv, int flags, void *input) { error_t err = 0; struct group *group; struct parser_sizes szs; struct _getopt_data opt_data = _GETOPT_DATA_INITIALIZER; char *storage; size_t glen, gsum; size_t clen, csum; size_t llen, lsum; size_t slen, ssum; szs.short_len = (flags & ARGP_NO_ARGS) ? 0 : 1; szs.long_len = 0; szs.num_groups = 0; szs.num_child_inputs = 0; if (argp) calc_sizes (argp, &szs); /* Lengths of the various bits of storage used by PARSER. */ glen = (szs.num_groups + 1) * sizeof (struct group); clen = szs.num_child_inputs * sizeof (void *); llen = (szs.long_len + 1) * sizeof (struct option); slen = szs.short_len + 1; /* Sums of previous lengths, properly aligned. There's no need to align gsum, since struct group is aligned at least as strictly as void * (since it contains a void * member). And there's no need to align lsum, since struct option is aligned at least as strictly as char. */ gsum = glen; csum = alignto (gsum + clen, alignof (struct option)); lsum = csum + llen; ssum = lsum + slen; parser->storage = malloc (ssum); if (! parser->storage) return ENOMEM; storage = parser->storage; parser->groups = parser->storage; parser->child_inputs = (void **) (storage + gsum); parser->long_opts = (struct option *) (storage + csum); parser->short_opts = storage + lsum; parser->opt_data = opt_data; memset (parser->child_inputs, 0, clen); parser_convert (parser, argp, flags); memset (&parser->state, 0, sizeof (struct argp_state)); parser->state.root_argp = parser->argp; parser->state.argc = argc; parser->state.argv = argv; parser->state.flags = flags; parser->state.err_stream = stderr; parser->state.out_stream = stdout; parser->state.next = 0; /* Tell getopt to initialize. */ parser->state.pstate = parser; parser->try_getopt = 1; /* Call each parser for the first time, giving it a chance to propagate values to child parsers. */ if (parser->groups < parser->egroup) parser->groups->input = input; for (group = parser->groups; group < parser->egroup && (!err || err == EBADKEY); group++) { if (group->parent) /* If a child parser, get the initial input value from the parent. */ group->input = group->parent->child_inputs[group->parent_index]; if (!group->parser && group->argp->children && group->argp->children->argp) /* For the special case where no parsing function is supplied for an argp, propagate its input to its first child, if any (this just makes very simple wrapper argps more convenient). */ group->child_inputs[0] = group->input; err = group_parse (group, &parser->state, ARGP_KEY_INIT, 0); } if (err == EBADKEY) err = 0; /* Some parser didn't understand. */ if (err) return err; if (parser->state.flags & ARGP_NO_ERRS) { parser->opt_data.opterr = 0; if (parser->state.flags & ARGP_PARSE_ARGV0) /* getopt always skips ARGV[0], so we have to fake it out. As long as OPTERR is 0, then it shouldn't actually try to access it. */ parser->state.argv--, parser->state.argc++; } else parser->opt_data.opterr = 1; /* Print error messages. */ if (parser->state.argv == argv && argv[0]) /* There's an argv[0]; use it for messages. */ parser->state.name = __argp_base_name (argv[0]); else parser->state.name = __argp_short_program_name (); return 0; } /* Free any storage consumed by PARSER (but not PARSER itself). */ static error_t parser_finalize (struct parser *parser, error_t err, int arg_ebadkey, int *end_index) { struct group *group; if (err == EBADKEY && arg_ebadkey) /* Suppress errors generated by unparsed arguments. */ err = 0; if (! err) { if (parser->state.next == parser->state.argc) /* We successfully parsed all arguments! Call all the parsers again, just a few more times... */ { for (group = parser->groups; group < parser->egroup && (!err || err==EBADKEY); group++) if (group->args_processed == 0) err = group_parse (group, &parser->state, ARGP_KEY_NO_ARGS, 0); for (group = parser->egroup - 1; group >= parser->groups && (!err || err==EBADKEY); group--) err = group_parse (group, &parser->state, ARGP_KEY_END, 0); if (err == EBADKEY) err = 0; /* Some parser didn't understand. */ /* Tell the user that all arguments are parsed. */ if (end_index) *end_index = parser->state.next; } else if (end_index) /* Return any remaining arguments to the user. */ *end_index = parser->state.next; else /* No way to return the remaining arguments, they must be bogus. */ { if (!(parser->state.flags & ARGP_NO_ERRS) && parser->state.err_stream) fprintf (parser->state.err_stream, dgettext (parser->argp->argp_domain, "%s: Too many arguments\n"), parser->state.name); err = EBADKEY; } } /* Okay, we're all done, with either an error or success; call the parsers to indicate which one. */ if (err) { /* Maybe print an error message. */ if (err == EBADKEY) /* An appropriate message describing what the error was should have been printed earlier. */ __argp_state_help (&parser->state, parser->state.err_stream, ARGP_HELP_STD_ERR); /* Since we didn't exit, give each parser an error indication. */ for (group = parser->groups; group < parser->egroup; group++) group_parse (group, &parser->state, ARGP_KEY_ERROR, 0); } else /* Notify parsers of success, and propagate back values from parsers. */ { /* We pass over the groups in reverse order so that child groups are given a chance to do there processing before passing back a value to the parent. */ for (group = parser->egroup - 1 ; group >= parser->groups && (!err || err == EBADKEY) ; group--) err = group_parse (group, &parser->state, ARGP_KEY_SUCCESS, 0); if (err == EBADKEY) err = 0; /* Some parser didn't understand. */ } /* Call parsers once more, to do any final cleanup. Errors are ignored. */ for (group = parser->egroup - 1; group >= parser->groups; group--) group_parse (group, &parser->state, ARGP_KEY_FINI, 0); if (err == EBADKEY) err = EINVAL; free (parser->storage); return err; } /* Call the user parsers to parse the non-option argument VAL, at the current position, returning any error. The state NEXT pointer is assumed to have been adjusted (by getopt) to point after this argument; this function will adjust it correctly to reflect however many args actually end up being consumed. */ static error_t parser_parse_arg (struct parser *parser, char *val) { /* Save the starting value of NEXT, first adjusting it so that the arg we're parsing is again the front of the arg vector. */ int index = --parser->state.next; error_t err = EBADKEY; struct group *group; int key = 0; /* Which of ARGP_KEY_ARG[S] we used. */ /* Try to parse the argument in each parser. */ for (group = parser->groups ; group < parser->egroup && err == EBADKEY ; group++) { parser->state.next++; /* For ARGP_KEY_ARG, consume the arg. */ key = ARGP_KEY_ARG; err = group_parse (group, &parser->state, key, val); if (err == EBADKEY) /* This parser doesn't like ARGP_KEY_ARG; try ARGP_KEY_ARGS instead. */ { parser->state.next--; /* For ARGP_KEY_ARGS, put back the arg. */ key = ARGP_KEY_ARGS; err = group_parse (group, &parser->state, key, 0); } } if (! err) { if (key == ARGP_KEY_ARGS) /* The default for ARGP_KEY_ARGS is to assume that if NEXT isn't changed by the user, *all* arguments should be considered consumed. */ parser->state.next = parser->state.argc; if (parser->state.next > index) /* Remember that we successfully processed a non-option argument -- but only if the user hasn't gotten tricky and set the clock back. */ (--group)->args_processed += (parser->state.next - index); else /* The user wants to reparse some args, give getopt another try. */ parser->try_getopt = 1; } return err; } /* Call the user parsers to parse the option OPT, with argument VAL, at the current position, returning any error. */ static error_t parser_parse_opt (struct parser *parser, int opt, char *val) { /* The group key encoded in the high bits; 0 for short opts or group_number + 1 for long opts. */ int group_key = opt >> USER_BITS; error_t err = EBADKEY; if (group_key == 0) /* A short option. By comparing OPT's position in SHORT_OPTS to the various starting positions in each group's SHORT_END field, we can determine which group OPT came from. */ { struct group *group; char *short_index = strchr (parser->short_opts, opt); if (short_index) for (group = parser->groups; group < parser->egroup; group++) if (group->short_end > short_index) { err = group_parse (group, &parser->state, opt, parser->opt_data.optarg); break; } } else /* A long option. Preserve the sign in the user key, without invoking undefined behavior. Assume two's complement. */ { int user_key = ((opt & (1 << (USER_BITS - 1))) ? ~USER_MASK : 0) | (opt & USER_MASK); err = group_parse (&parser->groups[group_key - 1], &parser->state, user_key, parser->opt_data.optarg); } if (err == EBADKEY) /* At least currently, an option not recognized is an error in the parser, because we pre-compute which parser is supposed to deal with each option. */ { static const char bad_key_err[] = N_("(PROGRAM ERROR) Option should have been recognized!?"); if (group_key == 0) __argp_error (&parser->state, "-%c: %s", opt, dgettext (parser->argp->argp_domain, bad_key_err)); else { struct option *long_opt = parser->long_opts; while (long_opt->val != opt && long_opt->name) long_opt++; __argp_error (&parser->state, "--%s: %s", long_opt->name ? long_opt->name : "???", dgettext (parser->argp->argp_domain, bad_key_err)); } } return err; } /* Parse the next argument in PARSER (as indicated by PARSER->state.next). Any error from the parsers is returned, and *ARGP_EBADKEY indicates whether a value of EBADKEY is due to an unrecognized argument (which is generally not fatal). */ static error_t parser_parse_next (struct parser *parser, int *arg_ebadkey) { int opt; error_t err = 0; if (parser->state.quoted && parser->state.next < parser->state.quoted) /* The next argument pointer has been moved to before the quoted region, so pretend we never saw the quoting "--", and give getopt another chance. If the user hasn't removed it, getopt will just process it again. */ parser->state.quoted = 0; if (parser->try_getopt && !parser->state.quoted) /* Give getopt a chance to parse this. */ { /* Put it back in OPTIND for getopt. */ parser->opt_data.optind = parser->state.next; /* Distinguish KEY_ERR from a real option. */ parser->opt_data.optopt = KEY_END; if (parser->state.flags & ARGP_LONG_ONLY) opt = _getopt_long_only_r (parser->state.argc, parser->state.argv, parser->short_opts, parser->long_opts, 0, &parser->opt_data); else opt = _getopt_long_r (parser->state.argc, parser->state.argv, parser->short_opts, parser->long_opts, 0, &parser->opt_data); /* And see what getopt did. */ parser->state.next = parser->opt_data.optind; if (opt == KEY_END) /* Getopt says there are no more options, so stop using getopt; we'll continue if necessary on our own. */ { parser->try_getopt = 0; if (parser->state.next > 1 && strcmp (parser->state.argv[parser->state.next - 1], QUOTE) == 0) /* Not only is this the end of the options, but it's a "quoted" region, which may have args that *look* like options, so we definitely shouldn't try to use getopt past here, whatever happens. */ parser->state.quoted = parser->state.next; } else if (opt == KEY_ERR && parser->opt_data.optopt != KEY_END) /* KEY_ERR can have the same value as a valid user short option, but in the case of a real error, getopt sets OPTOPT to the offending character, which can never be KEY_END. */ { *arg_ebadkey = 0; return EBADKEY; } } else opt = KEY_END; if (opt == KEY_END) { /* We're past what getopt considers the options. */ if (parser->state.next >= parser->state.argc || (parser->state.flags & ARGP_NO_ARGS)) /* Indicate that we're done. */ { *arg_ebadkey = 1; return EBADKEY; } else /* A non-option arg; simulate what getopt might have done. */ { opt = KEY_ARG; parser->opt_data.optarg = parser->state.argv[parser->state.next++]; } } if (opt == KEY_ARG) /* A non-option argument; try each parser in turn. */ err = parser_parse_arg (parser, parser->opt_data.optarg); else err = parser_parse_opt (parser, opt, parser->opt_data.optarg); if (err == EBADKEY) *arg_ebadkey = (opt == KEY_END || opt == KEY_ARG); return err; } /* Parse the options strings in ARGC & ARGV according to the argp in ARGP. FLAGS is one of the ARGP_ flags above. If END_INDEX is non-NULL, the index in ARGV of the first unparsed option is returned in it. If an unknown option is present, EINVAL is returned; if some parser routine returned a non-zero value, it is returned; otherwise 0 is returned. */ error_t __argp_parse (const struct argp *argp, int argc, char **argv, unsigned flags, int *end_index, void *input) { error_t err; struct parser parser; /* If true, then err == EBADKEY is a result of a non-option argument failing to be parsed (which in some cases isn't actually an error). */ int arg_ebadkey = 0; #ifndef _LIBC if (!(flags & ARGP_PARSE_ARGV0)) { #if HAVE_DECL_PROGRAM_INVOCATION_NAME if (!program_invocation_name) program_invocation_name = argv[0]; #endif #if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME if (!program_invocation_short_name) program_invocation_short_name = __argp_base_name (argv[0]); #endif } #endif if (! (flags & ARGP_NO_HELP)) /* Add our own options. */ { struct argp_child *child = alloca (4 * sizeof (struct argp_child)); struct argp *top_argp = alloca (sizeof (struct argp)); /* TOP_ARGP has no options, it just serves to group the user & default argps. */ memset (top_argp, 0, sizeof (*top_argp)); top_argp->children = child; memset (child, 0, 4 * sizeof (struct argp_child)); if (argp) (child++)->argp = argp; (child++)->argp = &argp_default_argp; if (argp_program_version || argp_program_version_hook) (child++)->argp = &argp_version_argp; child->argp = 0; argp = top_argp; } /* Construct a parser for these arguments. */ err = parser_init (&parser, argp, argc, argv, flags, input); if (! err) /* Parse! */ { while (! err) err = parser_parse_next (&parser, &arg_ebadkey); err = parser_finalize (&parser, err, arg_ebadkey, end_index); } return err; } #ifdef weak_alias weak_alias (__argp_parse, argp_parse) #endif /* Return the input field for ARGP in the parser corresponding to STATE; used by the help routines. */ void * __argp_input (const struct argp *argp, const struct argp_state *state) { if (state) { struct group *group; struct parser *parser = state->pstate; for (group = parser->groups; group < parser->egroup; group++) if (group->argp == argp) return group->input; } return 0; } #ifdef weak_alias weak_alias (__argp_input, _argp_input) #endif gnuastro-0.5/bootstrapped/lib/argp-namefrob.h0000644000175000017500000001253413217200020016276 00000000000000/* Name frobnication for compiling argp outside of glibc Copyright (C) 1997-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #if !_LIBC /* This code is written for inclusion in gnu-libc, and uses names in the namespace reserved for libc. If we're not compiling in libc, define those names to be the normal ones instead. */ /* argp-parse functions */ #undef __argp_parse #define __argp_parse argp_parse #undef __option_is_end #define __option_is_end _option_is_end #undef __option_is_short #define __option_is_short _option_is_short #undef __argp_input #define __argp_input _argp_input /* argp-help functions */ #undef __argp_help #define __argp_help argp_help #undef __argp_error #define __argp_error argp_error #undef __argp_failure #define __argp_failure argp_failure #undef __argp_state_help #define __argp_state_help argp_state_help #undef __argp_usage #define __argp_usage argp_usage /* argp-fmtstream functions */ #undef __argp_make_fmtstream #define __argp_make_fmtstream argp_make_fmtstream #undef __argp_fmtstream_free #define __argp_fmtstream_free argp_fmtstream_free #undef __argp_fmtstream_putc #define __argp_fmtstream_putc argp_fmtstream_putc #undef __argp_fmtstream_puts #define __argp_fmtstream_puts argp_fmtstream_puts #undef __argp_fmtstream_write #define __argp_fmtstream_write argp_fmtstream_write #undef __argp_fmtstream_printf #define __argp_fmtstream_printf argp_fmtstream_printf #undef __argp_fmtstream_set_lmargin #define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin #undef __argp_fmtstream_set_rmargin #define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin #undef __argp_fmtstream_set_wmargin #define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin #undef __argp_fmtstream_point #define __argp_fmtstream_point argp_fmtstream_point #undef __argp_fmtstream_update #define __argp_fmtstream_update _argp_fmtstream_update #undef __argp_fmtstream_ensure #define __argp_fmtstream_ensure _argp_fmtstream_ensure #undef __argp_fmtstream_lmargin #define __argp_fmtstream_lmargin argp_fmtstream_lmargin #undef __argp_fmtstream_rmargin #define __argp_fmtstream_rmargin argp_fmtstream_rmargin #undef __argp_fmtstream_wmargin #define __argp_fmtstream_wmargin argp_fmtstream_wmargin /* normal libc functions we call */ #undef __flockfile #define __flockfile flockfile #undef __funlockfile #define __funlockfile funlockfile #undef __mempcpy #define __mempcpy mempcpy #undef __sleep #define __sleep sleep #undef __strcasecmp #define __strcasecmp strcasecmp #undef __strchrnul #define __strchrnul strchrnul #undef __strerror_r #define __strerror_r strerror_r #undef __strndup #define __strndup strndup #undef __vsnprintf #define __vsnprintf vsnprintf #if defined(HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED # define clearerr_unlocked(x) clearerr (x) #endif #if defined(HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED # define feof_unlocked(x) feof (x) #endif #if defined(HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED # define ferror_unlocked(x) ferror (x) #endif #if defined(HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED # define fflush_unlocked(x) fflush (x) #endif #if defined(HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED # define fgets_unlocked(x,y,z) fgets (x,y,z) #endif #if defined(HAVE_DECL_FPUTC_UNLOCKED) && !HAVE_DECL_FPUTC_UNLOCKED # define fputc_unlocked(x,y) fputc (x,y) #endif #if defined(HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED # define fputs_unlocked(x,y) fputs (x,y) #endif #if defined(HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED # define fread_unlocked(w,x,y,z) fread (w,x,y,z) #endif #if defined(HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED # define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) #endif #if defined(HAVE_DECL_GETC_UNLOCKED) && !HAVE_DECL_GETC_UNLOCKED # define getc_unlocked(x) getc (x) #endif #if defined(HAVE_DECL_GETCHAR_UNLOCKED) && !HAVE_DECL_GETCHAR_UNLOCKED # define getchar_unlocked() getchar () #endif #if defined(HAVE_DECL_PUTC_UNLOCKED) && !HAVE_DECL_PUTC_UNLOCKED # define putc_unlocked(x,y) putc (x,y) #endif #if defined(HAVE_DECL_PUTCHAR_UNLOCKED) && !HAVE_DECL_PUTCHAR_UNLOCKED # define putchar_unlocked(x) putchar (x) #endif #endif /* !_LIBC */ #ifndef __set_errno #define __set_errno(e) (errno = (e)) #endif #if defined GNULIB_ARGP_DISABLE_DIRNAME # define __argp_base_name(arg) arg #elif defined GNULIB_ARGP_EXTERN_BASENAME extern char *__argp_base_name (const char *arg); #else # include "dirname.h" # define __argp_base_name last_component #endif #if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME # define __argp_short_program_name() (program_invocation_short_name) #else extern char *__argp_short_program_name (void); #endif gnuastro-0.5/bootstrapped/lib/argp-help.c0000644000175000017500000017225313217200020015435 00000000000000/* Hierarchical argument parsing help output Copyright (C) 1995-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #ifdef _LIBC # include <../libio/libioP.h> # include #endif #ifdef _LIBC # include # undef dgettext # define dgettext(domain, msgid) \ __dcgettext (domain, msgid, LC_MESSAGES) #else # include "gettext.h" #endif #include "argp.h" #include "argp-fmtstream.h" #include "argp-namefrob.h" #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif /* User-selectable (using an environment variable) formatting parameters. These may be specified in an environment variable called 'ARGP_HELP_FMT', with a contents like: VAR1=VAL1,VAR2=VAL2,BOOLVAR2,no-BOOLVAR2 Where VALn must be a positive integer. The list of variables is in the UPARAM_NAMES vector, below. */ /* Default parameters. */ #define DUP_ARGS 0 /* True if option argument can be duplicated. */ #define DUP_ARGS_NOTE 1 /* True to print a note about duplicate args. */ #define SHORT_OPT_COL 2 /* column in which short options start */ #define LONG_OPT_COL 6 /* column in which long options start */ #define DOC_OPT_COL 2 /* column in which doc options start */ #define OPT_DOC_COL 29 /* column in which option text starts */ #define HEADER_COL 1 /* column in which group headers are printed */ #define USAGE_INDENT 12 /* indentation of wrapped usage lines */ #define RMARGIN 79 /* right margin used for wrapping */ /* User-selectable (using an environment variable) formatting parameters. They must all be of type 'int' for the parsing code to work. */ struct uparams { /* If true, arguments for an option are shown with both short and long options, even when a given option has both, e.g. '-x ARG, --longx=ARG'. If false, then if an option has both, the argument is only shown with the long one, e.g., '-x, --longx=ARG', and a message indicating that this really means both is printed below the options. */ int dup_args; /* This is true if when DUP_ARGS is false, and some duplicate arguments have been suppressed, an explanatory message should be printed. */ int dup_args_note; /* Various output columns. */ int short_opt_col; /* column in which short options start */ int long_opt_col; /* column in which long options start */ int doc_opt_col; /* column in which doc options start */ int opt_doc_col; /* column in which option text starts */ int header_col; /* column in which group headers are printed */ int usage_indent; /* indentation of wrapped usage lines */ int rmargin; /* right margin used for wrapping */ int valid; /* True when the values in here are valid. */ }; /* This is a global variable, as user options are only ever read once. */ static struct uparams uparams = { DUP_ARGS, DUP_ARGS_NOTE, SHORT_OPT_COL, LONG_OPT_COL, DOC_OPT_COL, OPT_DOC_COL, HEADER_COL, USAGE_INDENT, RMARGIN }; /* A particular uparam, and what the user name is. */ struct uparam_name { const char name[14]; /* User name. */ bool is_bool; /* Whether it's 'boolean'. */ unsigned char uparams_offs; /* Location of the (int) field in UPARAMS. */ }; /* The name-field mappings we know about. */ static const struct uparam_name uparam_names[] = { { "dup-args", true, offsetof (struct uparams, dup_args) }, { "dup-args-note", true, offsetof (struct uparams, dup_args_note) }, { "short-opt-col", false, offsetof (struct uparams, short_opt_col) }, { "long-opt-col", false, offsetof (struct uparams, long_opt_col) }, { "doc-opt-col", false, offsetof (struct uparams, doc_opt_col) }, { "opt-doc-col", false, offsetof (struct uparams, opt_doc_col) }, { "header-col", false, offsetof (struct uparams, header_col) }, { "usage-indent", false, offsetof (struct uparams, usage_indent) }, { "rmargin", false, offsetof (struct uparams, rmargin) } }; #define nuparam_names (sizeof (uparam_names) / sizeof (uparam_names[0])) static void validate_uparams (const struct argp_state *state, struct uparams *upptr) { const struct uparam_name *up; for (up = uparam_names; up < uparam_names + nuparam_names; up++) { if (up->is_bool || up->uparams_offs == offsetof (struct uparams, rmargin)) continue; if (*(int *)((char *)upptr + up->uparams_offs) >= upptr->rmargin) { __argp_failure (state, 0, 0, dgettext (state->root_argp->argp_domain, "\ ARGP_HELP_FMT: %s value is less than or equal to %s"), "rmargin", up->name); return; } } uparams = *upptr; uparams.valid = 1; } /* Read user options from the environment, and fill in UPARAMS appropriately. */ static void fill_in_uparams (const struct argp_state *state) { const char *var = getenv ("ARGP_HELP_FMT"); struct uparams new_params = uparams; #define SKIPWS(p) do { while (isspace ((unsigned char) *p)) p++; } while (0); if (var) { /* Parse var. */ while (*var) { SKIPWS (var); if (isalpha ((unsigned char) *var)) { size_t var_len; const struct uparam_name *un; int unspec = 0, val = 0; const char *arg = var; while (isalnum ((unsigned char) *arg) || *arg == '-' || *arg == '_') arg++; var_len = arg - var; SKIPWS (arg); if (*arg == '\0' || *arg == ',') unspec = 1; else if (*arg == '=') { arg++; SKIPWS (arg); } if (unspec) { if (var[0] == 'n' && var[1] == 'o' && var[2] == '-') { val = 0; var += 3; var_len -= 3; } else val = 1; } else if (isdigit ((unsigned char) *arg)) { val = atoi (arg); while (isdigit ((unsigned char) *arg)) arg++; SKIPWS (arg); } for (un = uparam_names; un < uparam_names + nuparam_names; un++) if (strlen (un->name) == var_len && strncmp (var, un->name, var_len) == 0) { if (unspec && !un->is_bool) __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ %.*s: ARGP_HELP_FMT parameter requires a value"), (int) var_len, var); else *(int *)((char *)&new_params + un->uparams_offs) = val; break; } if (un == uparam_names + nuparam_names) __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ %.*s: Unknown ARGP_HELP_FMT parameter"), (int) var_len, var); var = arg; if (*var == ',') var++; } else if (*var) { __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "Garbage in ARGP_HELP_FMT: %s"), var); break; } } validate_uparams (state, &new_params); } } /* Returns true if OPT hasn't been marked invisible. Visibility only affects whether OPT is displayed or used in sorting, not option shadowing. */ #define ovisible(opt) (! ((opt)->flags & OPTION_HIDDEN)) /* Returns true if OPT is an alias for an earlier option. */ #define oalias(opt) ((opt)->flags & OPTION_ALIAS) /* Returns true if OPT is a documentation-only entry. */ #define odoc(opt) ((opt)->flags & OPTION_DOC) /* Returns true if OPT should not be translated */ #define onotrans(opt) ((opt)->flags & OPTION_NO_TRANS) /* Returns true if OPT is the end-of-list marker for a list of options. */ #define oend(opt) __option_is_end (opt) /* Returns true if OPT has a short option. */ #define oshort(opt) __option_is_short (opt) /* The help format for a particular option is like: -xARG, -yARG, --long1=ARG, --long2=ARG Documentation... Where ARG will be omitted if there's no argument, for this option, or will be surrounded by "[" and "]" appropriately if the argument is optional. The documentation string is word-wrapped appropriately, and if the list of options is long enough, it will be started on a separate line. If there are no short options for a given option, the first long option is indented slightly in a way that's supposed to make most long options appear to be in a separate column. For example, the following output (from ps): -p PID, --pid=PID List the process PID --pgrp=PGRP List processes in the process group PGRP -P, -x, --no-parent Include processes without parents -Q, --all-fields Don't elide unusable fields (normally if there's some reason ps can't print a field for any process, it's removed from the output entirely) -r, --reverse, --gratuitously-long-reverse-option Reverse the order of any sort --session[=SID] Add the processes from the session SID (which defaults to the sid of the current process) Here are some more options: -f ZOT, --foonly=ZOT Glork a foonly -z, --zaza Snit a zar -?, --help Give this help list --usage Give a short usage message -V, --version Print program version The struct argp_option array for the above could look like: { {"pid", 'p', "PID", 0, "List the process PID"}, {"pgrp", OPT_PGRP, "PGRP", 0, "List processes in the process group PGRP"}, {"no-parent", 'P', 0, 0, "Include processes without parents"}, {0, 'x', 0, OPTION_ALIAS}, {"all-fields",'Q', 0, 0, "Don't elide unusable fields (normally" " if there's some reason ps can't" " print a field for any process, it's" " removed from the output entirely)" }, {"reverse", 'r', 0, 0, "Reverse the order of any sort"}, {"gratuitously-long-reverse-option", 0, 0, OPTION_ALIAS}, {"session", OPT_SESS, "SID", OPTION_ARG_OPTIONAL, "Add the processes from the session" " SID (which defaults to the sid of" " the current process)" }, {0,0,0,0, "Here are some more options:"}, {"foonly", 'f', "ZOT", 0, "Glork a foonly"}, {"zaza", 'z', 0, 0, "Snit a zar"}, {0} } Note that the last three options are automatically supplied by argp_parse, unless you tell it not to with ARGP_NO_HELP. */ /* Returns true if CH occurs between BEG and END. */ static int find_char (char ch, char *beg, char *end) { while (beg < end) if (*beg == ch) return 1; else beg++; return 0; } struct hol_cluster; /* fwd decl */ struct hol_entry { /* First option. */ const struct argp_option *opt; /* Number of options (including aliases). */ unsigned num; /* A pointers into the HOL's short_options field, to the first short option letter for this entry. The order of the characters following this point corresponds to the order of options pointed to by OPT, and there are at most NUM. A short option recorded in an option following OPT is only valid if it occurs in the right place in SHORT_OPTIONS (otherwise it's probably been shadowed by some other entry). */ char *short_options; /* Entries are sorted by their group first, in the order: 1, 2, ..., n, 0, -m, ..., -2, -1 and then alphabetically within each group. The default is 0. */ int group; /* The cluster of options this entry belongs to, or 0 if none. */ struct hol_cluster *cluster; /* The argp from which this option came. */ const struct argp *argp; /* Position in the array */ unsigned ord; }; /* A cluster of entries to reflect the argp tree structure. */ struct hol_cluster { /* A descriptive header printed before options in this cluster. */ const char *header; /* Used to order clusters within the same group with the same parent, according to the order in which they occurred in the parent argp's child list. */ int index; /* How to sort this cluster with respect to options and other clusters at the same depth (clusters always follow options in the same group). */ int group; /* The cluster to which this cluster belongs, or 0 if it's at the base level. */ struct hol_cluster *parent; /* The argp from which this cluster is (eventually) derived. */ const struct argp *argp; /* The distance this cluster is from the root. */ int depth; /* Clusters in a given hol are kept in a linked list, to make freeing them possible. */ struct hol_cluster *next; }; /* A list of options for help. */ struct hol { /* An array of hol_entry's. */ struct hol_entry *entries; /* The number of entries in this hol. If this field is zero, the others are undefined. */ unsigned num_entries; /* A string containing all short options in this HOL. Each entry contains pointers into this string, so the order can't be messed with blindly. */ char *short_options; /* Clusters of entries in this hol. */ struct hol_cluster *clusters; }; /* Create a struct hol from the options in ARGP. CLUSTER is the hol_cluster in which these entries occur, or 0, if at the root. */ static struct hol * make_hol (const struct argp *argp, struct hol_cluster *cluster) { char *so; const struct argp_option *o; const struct argp_option *opts = argp->options; struct hol_entry *entry; unsigned num_short_options = 0; struct hol *hol = malloc (sizeof (struct hol)); assert (hol); hol->num_entries = 0; hol->clusters = 0; if (opts) { int cur_group = 0; /* The first option must not be an alias. */ assert (! oalias (opts)); /* Calculate the space needed. */ for (o = opts; ! oend (o); o++) { if (! oalias (o)) hol->num_entries++; if (oshort (o)) num_short_options++; /* This is an upper bound. */ } hol->entries = malloc (sizeof (struct hol_entry) * hol->num_entries); hol->short_options = malloc (num_short_options + 1); assert (hol->entries && hol->short_options); if (SIZE_MAX <= UINT_MAX) assert (hol->num_entries <= SIZE_MAX / sizeof (struct hol_entry)); /* Fill in the entries. */ so = hol->short_options; for (o = opts, entry = hol->entries; ! oend (o); entry++) { entry->opt = o; entry->num = 0; entry->short_options = so; entry->group = cur_group = o->group ? o->group : ((!o->name && !o->key) ? cur_group + 1 : cur_group); entry->cluster = cluster; entry->argp = argp; do { entry->num++; if (oshort (o) && ! find_char (o->key, hol->short_options, so)) /* O has a valid short option which hasn't already been used.*/ *so++ = o->key; o++; } while (! oend (o) && oalias (o)); } *so = '\0'; /* null terminated so we can find the length */ } return hol; } /* Add a new cluster to HOL, with the given GROUP and HEADER (taken from the associated argp child list entry), INDEX, and PARENT, and return a pointer to it. ARGP is the argp that this cluster results from. */ static struct hol_cluster * hol_add_cluster (struct hol *hol, int group, const char *header, int index, struct hol_cluster *parent, const struct argp *argp) { struct hol_cluster *cl = malloc (sizeof (struct hol_cluster)); if (cl) { cl->group = group; cl->header = header; cl->index = index; cl->parent = parent; cl->argp = argp; cl->depth = parent ? parent->depth + 1 : 0; cl->next = hol->clusters; hol->clusters = cl; } return cl; } /* Free HOL and any resources it uses. */ static void hol_free (struct hol *hol) { struct hol_cluster *cl = hol->clusters; while (cl) { struct hol_cluster *next = cl->next; free (cl); cl = next; } if (hol->num_entries > 0) { free (hol->entries); free (hol->short_options); } free (hol); } static int hol_entry_short_iterate (const struct hol_entry *entry, int (*func)(const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie), const char *domain, void *cookie) { unsigned nopts; int val = 0; const struct argp_option *opt, *real = entry->opt; char *so = entry->short_options; for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--) if (oshort (opt) && *so == opt->key) { if (!oalias (opt)) real = opt; if (ovisible (opt)) val = (*func)(opt, real, domain, cookie); so++; } return val; } static inline int #if __GNUC__ >= 3 __attribute__ ((always_inline)) #endif hol_entry_long_iterate (const struct hol_entry *entry, int (*func)(const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie), const char *domain, void *cookie) { unsigned nopts; int val = 0; const struct argp_option *opt, *real = entry->opt; for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--) if (opt->name) { if (!oalias (opt)) real = opt; if (ovisible (opt)) val = (*func)(opt, real, domain, cookie); } return val; } /* Iterator that returns true for the first short option. */ static int until_short (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { return oshort (opt) ? opt->key : 0; } /* Returns the first valid short option in ENTRY, or 0 if there is none. */ static char hol_entry_first_short (const struct hol_entry *entry) { return hol_entry_short_iterate (entry, until_short, entry->argp->argp_domain, 0); } /* Returns the first valid long option in ENTRY, or 0 if there is none. */ static const char * hol_entry_first_long (const struct hol_entry *entry) { const struct argp_option *opt; unsigned num; for (opt = entry->opt, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) return opt->name; return 0; } /* Returns the entry in HOL with the long option name NAME, or 0 if there is none. */ static struct hol_entry * hol_find_entry (struct hol *hol, const char *name) { struct hol_entry *entry = hol->entries; unsigned num_entries = hol->num_entries; while (num_entries-- > 0) { const struct argp_option *opt = entry->opt; unsigned num_opts = entry->num; while (num_opts-- > 0) if (opt->name && ovisible (opt) && strcmp (opt->name, name) == 0) return entry; else opt++; entry++; } return 0; } /* If an entry with the long option NAME occurs in HOL, set its special sort position to GROUP. */ static void hol_set_group (struct hol *hol, const char *name, int group) { struct hol_entry *entry = hol_find_entry (hol, name); if (entry) entry->group = group; } /* Order by group: 0, 1, 2, ..., n, -m, ..., -2, -1. EQ is what to return if GROUP1 and GROUP2 are the same. */ static int group_cmp (int group1, int group2, int eq) { if (group1 == group2) return eq; else if ((group1 < 0 && group2 < 0) || (group1 >= 0 && group2 >= 0)) return group1 - group2; else return group2 - group1; } /* Compare clusters CL1 & CL2 by the order that they should appear in output. */ static int hol_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2) { /* If one cluster is deeper than the other, use its ancestor at the same level, so that finding the common ancestor is straightforward. */ while (cl1->depth > cl2->depth) cl1 = cl1->parent; while (cl2->depth > cl1->depth) cl2 = cl2->parent; /* Now reduce both clusters to their ancestors at the point where both have a common parent; these can be directly compared. */ while (cl1->parent != cl2->parent) cl1 = cl1->parent, cl2 = cl2->parent; return group_cmp (cl1->group, cl2->group, cl2->index - cl1->index); } /* Return the ancestor of CL that's just below the root (i.e., has a parent of 0). */ static struct hol_cluster * hol_cluster_base (struct hol_cluster *cl) { while (cl->parent) cl = cl->parent; return cl; } /* Return true if CL1 is a child of CL2. */ static int hol_cluster_is_child (const struct hol_cluster *cl1, const struct hol_cluster *cl2) { while (cl1 && cl1 != cl2) cl1 = cl1->parent; return cl1 == cl2; } /* Given the name of an OPTION_DOC option, modifies NAME to start at the tail that should be used for comparisons, and returns true iff it should be treated as a non-option. */ static int canon_doc_option (const char **name) { int non_opt; /* Skip initial whitespace. */ while (isspace (**name)) (*name)++; /* Decide whether this looks like an option (leading '-') or not. */ non_opt = (**name != '-'); /* Skip until part of name used for sorting. */ while (**name && !isalnum (**name)) (*name)++; return non_opt; } #define HOL_ENTRY_PTRCMP(a,b) ((a)->ord < (b)->ord ? -1 : 1) /* Order ENTRY1 & ENTRY2 by the order which they should appear in a help listing. */ static int hol_entry_cmp (const struct hol_entry *entry1, const struct hol_entry *entry2) { /* The group numbers by which the entries should be ordered; if either is in a cluster, then this is just the group within the cluster. */ int group1 = entry1->group, group2 = entry2->group; if (entry1->cluster != entry2->cluster) { /* The entries are not within the same cluster, so we can't compare them directly, we have to use the appropriate clustering level too. */ if (! entry1->cluster) /* ENTRY1 is at the 'base level', not in a cluster, so we have to compare it's group number with that of the base cluster in which ENTRY2 resides. Note that if they're in the same group, the clustered option always comes last. */ return group_cmp (group1, hol_cluster_base (entry2->cluster)->group, -1); else if (! entry2->cluster) /* Likewise, but ENTRY2's not in a cluster. */ return group_cmp (hol_cluster_base (entry1->cluster)->group, group2, 1); else /* Both entries are in clusters, we can just compare the clusters. */ return hol_cluster_cmp (entry1->cluster, entry2->cluster); } else if (group1 == group2) /* The entries are both in the same cluster and group, so compare them alphabetically. */ { int short1 = hol_entry_first_short (entry1); int short2 = hol_entry_first_short (entry2); int doc1 = odoc (entry1->opt); int doc2 = odoc (entry2->opt); const char *long1 = hol_entry_first_long (entry1); const char *long2 = hol_entry_first_long (entry2); if (doc1) doc1 = long1 != NULL && canon_doc_option (&long1); if (doc2) doc2 = long2 != NULL && canon_doc_option (&long2); if (doc1 != doc2) /* 'documentation' options always follow normal options (or documentation options that *look* like normal options). */ return doc1 - doc2; else if (!short1 && !short2 && long1 && long2) /* Only long options. */ return __strcasecmp (long1, long2); else /* Compare short/short, long/short, short/long, using the first character of long options. Entries without *any* valid options (such as options with OPTION_HIDDEN set) will be put first, but as they're not displayed, it doesn't matter where they are. */ { char first1 = short1 ? short1 : long1 ? *long1 : 0; char first2 = short2 ? short2 : long2 ? *long2 : 0; #ifdef _tolower int lower_cmp = _tolower (first1) - _tolower (first2); #else int lower_cmp = tolower (first1) - tolower (first2); #endif /* Compare ignoring case, except when the options are both the same letter, in which case lower-case always comes first. */ return lower_cmp ? lower_cmp : first2 - first1; } } else /* Within the same cluster, but not the same group, so just compare groups. */ return group_cmp (group1, group2, 0); } /* Version of hol_entry_cmp with correct signature for qsort. */ static int hol_entry_qcmp (const void *entry1_v, const void *entry2_v) { return hol_entry_cmp (entry1_v, entry2_v); } /* Sort HOL by group and alphabetically by option name (with short options taking precedence over long). Since the sorting is for display purposes only, the shadowing of options isn't effected. */ static void hol_sort (struct hol *hol) { if (hol->num_entries > 0) { unsigned i; struct hol_entry *e; for (i = 0, e = hol->entries; i < hol->num_entries; i++, e++) e->ord = i; qsort (hol->entries, hol->num_entries, sizeof (struct hol_entry), hol_entry_qcmp); } } /* Append MORE to HOL, destroying MORE in the process. Options in HOL shadow any in MORE with the same name. */ static void hol_append (struct hol *hol, struct hol *more) { struct hol_cluster **cl_end = &hol->clusters; /* Steal MORE's cluster list, and add it to the end of HOL's. */ while (*cl_end) cl_end = &(*cl_end)->next; *cl_end = more->clusters; more->clusters = 0; /* Merge entries. */ if (more->num_entries > 0) { if (hol->num_entries == 0) { hol->num_entries = more->num_entries; hol->entries = more->entries; hol->short_options = more->short_options; more->num_entries = 0; /* Mark MORE's fields as invalid. */ } else /* Append the entries in MORE to those in HOL, taking care to only add non-shadowed SHORT_OPTIONS values. */ { unsigned left; char *so, *more_so; struct hol_entry *e; unsigned num_entries = hol->num_entries + more->num_entries; struct hol_entry *entries = malloc (num_entries * sizeof (struct hol_entry)); unsigned hol_so_len = strlen (hol->short_options); char *short_options = malloc (hol_so_len + strlen (more->short_options) + 1); assert (entries && short_options); if (SIZE_MAX <= UINT_MAX) assert (num_entries <= SIZE_MAX / sizeof (struct hol_entry)); __mempcpy (__mempcpy (entries, hol->entries, hol->num_entries * sizeof (struct hol_entry)), more->entries, more->num_entries * sizeof (struct hol_entry)); __mempcpy (short_options, hol->short_options, hol_so_len); /* Fix up the short options pointers from HOL. */ for (e = entries, left = hol->num_entries; left > 0; e++, left--) e->short_options = short_options + (e->short_options - hol->short_options); /* Now add the short options from MORE, fixing up its entries too. */ so = short_options + hol_so_len; more_so = more->short_options; for (left = more->num_entries; left > 0; e++, left--) { int opts_left; const struct argp_option *opt; e->short_options = so; for (opts_left = e->num, opt = e->opt; opts_left; opt++, opts_left--) { int ch = *more_so; if (oshort (opt) && ch == opt->key) /* The next short option in MORE_SO, CH, is from OPT. */ { if (! find_char (ch, short_options, short_options + hol_so_len)) /* The short option CH isn't shadowed by HOL's options, so add it to the sum. */ *so++ = ch; more_so++; } } } *so = '\0'; free (hol->entries); free (hol->short_options); hol->entries = entries; hol->num_entries = num_entries; hol->short_options = short_options; } } hol_free (more); } /* Inserts enough spaces to make sure STREAM is at column COL. */ static void indent_to (argp_fmtstream_t stream, unsigned col) { int needed = col - __argp_fmtstream_point (stream); while (needed-- > 0) __argp_fmtstream_putc (stream, ' '); } /* Output to STREAM either a space, or a newline if there isn't room for at least ENSURE characters before the right margin. */ static void space (argp_fmtstream_t stream, size_t ensure) { if (__argp_fmtstream_point (stream) + ensure >= __argp_fmtstream_rmargin (stream)) __argp_fmtstream_putc (stream, '\n'); else __argp_fmtstream_putc (stream, ' '); } /* If the option REAL has an argument, we print it in using the printf format REQ_FMT or OPT_FMT depending on whether it's a required or optional argument. */ static void arg (const struct argp_option *real, const char *req_fmt, const char *opt_fmt, const char *domain, argp_fmtstream_t stream) { if (real->arg) { if (real->flags & OPTION_ARG_OPTIONAL) __argp_fmtstream_printf (stream, opt_fmt, dgettext (domain, real->arg)); else __argp_fmtstream_printf (stream, req_fmt, dgettext (domain, real->arg)); } } /* Helper functions for hol_entry_help. */ /* State used during the execution of hol_help. */ struct hol_help_state { /* PREV_ENTRY should contain the previous entry printed, or 0. */ struct hol_entry *prev_entry; /* If an entry is in a different group from the previous one, and SEP_GROUPS is true, then a blank line will be printed before any output. */ int sep_groups; /* True if a duplicate option argument was suppressed (only ever set if UPARAMS.dup_args is false). */ int suppressed_dup_arg; }; /* Some state used while printing a help entry (used to communicate with helper functions). See the doc for hol_entry_help for more info, as most of the fields are copied from its arguments. */ struct pentry_state { const struct hol_entry *entry; argp_fmtstream_t stream; struct hol_help_state *hhstate; /* True if nothing's been printed so far. */ int first; /* If non-zero, the state that was used to print this help. */ const struct argp_state *state; }; /* If a user doc filter should be applied to DOC, do so. */ static const char * filter_doc (const char *doc, int key, const struct argp *argp, const struct argp_state *state) { if (argp && argp->help_filter) /* We must apply a user filter to this output. */ { void *input = __argp_input (argp, state); return (*argp->help_filter) (key, doc, input); } else /* No filter. */ return doc; } /* Prints STR as a header line, with the margin lines set appropriately, and notes the fact that groups should be separated with a blank line. ARGP is the argp that should dictate any user doc filtering to take place. Note that the previous wrap margin isn't restored, but the left margin is reset to 0. */ static void print_header (const char *str, const struct argp *argp, struct pentry_state *pest) { const char *tstr = dgettext (argp->argp_domain, str); const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_HEADER, argp, pest->state); if (fstr) { if (*fstr) { if (pest->hhstate->prev_entry) /* Precede with a blank line. */ __argp_fmtstream_putc (pest->stream, '\n'); indent_to (pest->stream, uparams.header_col); __argp_fmtstream_set_lmargin (pest->stream, uparams.header_col); __argp_fmtstream_set_wmargin (pest->stream, uparams.header_col); __argp_fmtstream_puts (pest->stream, fstr); __argp_fmtstream_set_lmargin (pest->stream, 0); __argp_fmtstream_putc (pest->stream, '\n'); } pest->hhstate->sep_groups = 1; /* Separate subsequent groups. */ } if (fstr != tstr) free ((char *) fstr); } /* Inserts a comma if this isn't the first item on the line, and then makes sure we're at least to column COL. If this *is* the first item on a line, prints any pending whitespace/headers that should precede this line. Also clears FIRST. */ static void comma (unsigned col, struct pentry_state *pest) { if (pest->first) { const struct hol_entry *pe = pest->hhstate->prev_entry; const struct hol_cluster *cl = pest->entry->cluster; if (pest->hhstate->sep_groups && pe && pest->entry->group != pe->group) __argp_fmtstream_putc (pest->stream, '\n'); if (cl && cl->header && *cl->header && (!pe || (pe->cluster != cl && !hol_cluster_is_child (pe->cluster, cl)))) /* If we're changing clusters, then this must be the start of the ENTRY's cluster unless that is an ancestor of the previous one (in which case we had just popped into a sub-cluster for a bit). If so, then print the cluster's header line. */ { int old_wm = __argp_fmtstream_wmargin (pest->stream); print_header (cl->header, cl->argp, pest); __argp_fmtstream_set_wmargin (pest->stream, old_wm); } pest->first = 0; } else __argp_fmtstream_puts (pest->stream, ", "); indent_to (pest->stream, col); } /* Print help for ENTRY to STREAM. */ static void hol_entry_help (struct hol_entry *entry, const struct argp_state *state, argp_fmtstream_t stream, struct hol_help_state *hhstate) { unsigned num; const struct argp_option *real = entry->opt, *opt; char *so = entry->short_options; int have_long_opt = 0; /* We have any long options. */ /* Saved margins. */ int old_lm = __argp_fmtstream_set_lmargin (stream, 0); int old_wm = __argp_fmtstream_wmargin (stream); /* PEST is a state block holding some of our variables that we'd like to share with helper functions. */ struct pentry_state pest = { entry, stream, hhstate, 1, state }; if (! odoc (real)) for (opt = real, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) { have_long_opt = 1; break; } /* First emit short options. */ __argp_fmtstream_set_wmargin (stream, uparams.short_opt_col); /* For truly bizarre cases. */ for (opt = real, num = entry->num; num > 0; opt++, num--) if (oshort (opt) && opt->key == *so) /* OPT has a valid (non shadowed) short option. */ { if (ovisible (opt)) { comma (uparams.short_opt_col, &pest); __argp_fmtstream_putc (stream, '-'); __argp_fmtstream_putc (stream, *so); if (!have_long_opt || uparams.dup_args) arg (real, " %s", "[%s]", state == NULL ? NULL : state->root_argp->argp_domain, stream); else if (real->arg) hhstate->suppressed_dup_arg = 1; } so++; } /* Now, long options. */ if (odoc (real)) /* A "documentation" option. */ { __argp_fmtstream_set_wmargin (stream, uparams.doc_opt_col); for (opt = real, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) { comma (uparams.doc_opt_col, &pest); /* Calling dgettext here isn't quite right, since sorting will have been done on the original; but documentation options should be pretty rare anyway... */ __argp_fmtstream_puts (stream, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, opt->name)); } } else /* A real long option. */ { __argp_fmtstream_set_wmargin (stream, uparams.long_opt_col); for (opt = real, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) { comma (uparams.long_opt_col, &pest); __argp_fmtstream_printf (stream, "--%s", opt->name); arg (real, "=%s", "[=%s]", state == NULL ? NULL : state->root_argp->argp_domain, stream); } } /* Next, documentation strings. */ __argp_fmtstream_set_lmargin (stream, 0); if (pest.first) { /* Didn't print any switches, what's up? */ if (!oshort (real) && !real->name) /* This is a group header, print it nicely. */ print_header (real->doc, entry->argp, &pest); else /* Just a totally shadowed option or null header; print nothing. */ goto cleanup; /* Just return, after cleaning up. */ } else { const char *tstr = real->doc ? dgettext (state == NULL ? NULL : state->root_argp->argp_domain, real->doc) : 0; const char *fstr = filter_doc (tstr, real->key, entry->argp, state); if (fstr && *fstr) { unsigned int col = __argp_fmtstream_point (stream); __argp_fmtstream_set_lmargin (stream, uparams.opt_doc_col); __argp_fmtstream_set_wmargin (stream, uparams.opt_doc_col); if (col > (unsigned int) (uparams.opt_doc_col + 3)) __argp_fmtstream_putc (stream, '\n'); else if (col >= (unsigned int) uparams.opt_doc_col) __argp_fmtstream_puts (stream, " "); else indent_to (stream, uparams.opt_doc_col); __argp_fmtstream_puts (stream, fstr); } if (fstr && fstr != tstr) free ((char *) fstr); /* Reset the left margin. */ __argp_fmtstream_set_lmargin (stream, 0); __argp_fmtstream_putc (stream, '\n'); } hhstate->prev_entry = entry; cleanup: __argp_fmtstream_set_lmargin (stream, old_lm); __argp_fmtstream_set_wmargin (stream, old_wm); } /* Output a long help message about the options in HOL to STREAM. */ static void hol_help (struct hol *hol, const struct argp_state *state, argp_fmtstream_t stream) { unsigned num; struct hol_entry *entry; struct hol_help_state hhstate = { 0, 0, 0 }; for (entry = hol->entries, num = hol->num_entries; num > 0; entry++, num--) hol_entry_help (entry, state, stream, &hhstate); if (hhstate.suppressed_dup_arg && uparams.dup_args_note) { const char *tstr = dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ Mandatory or optional arguments to long options are also mandatory or \ optional for any corresponding short options."); const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_DUP_ARGS_NOTE, state ? state->root_argp : 0, state); if (fstr && *fstr) { __argp_fmtstream_putc (stream, '\n'); __argp_fmtstream_puts (stream, fstr); __argp_fmtstream_putc (stream, '\n'); } if (fstr && fstr != tstr) free ((char *) fstr); } } /* Helper functions for hol_usage. */ /* If OPT is a short option without an arg, append its key to the string pointer pointer to by COOKIE, and advance the pointer. */ static int add_argless_short_opt (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { char **snao_end = cookie; if (!(opt->arg || real->arg) && !((opt->flags | real->flags) & OPTION_NO_USAGE)) *(*snao_end)++ = opt->key; return 0; } /* If OPT is a short option with an arg, output a usage entry for it to the stream pointed at by COOKIE. */ static int usage_argful_short_opt (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { argp_fmtstream_t stream = cookie; const char *arg = opt->arg; int flags = opt->flags | real->flags; if (! arg) arg = real->arg; if (arg && !(flags & OPTION_NO_USAGE)) { arg = dgettext (domain, arg); if (flags & OPTION_ARG_OPTIONAL) __argp_fmtstream_printf (stream, " [-%c[%s]]", opt->key, arg); else { /* Manually do line wrapping so that it (probably) won't get wrapped at the embedded space. */ space (stream, 6 + strlen (arg)); __argp_fmtstream_printf (stream, "[-%c %s]", opt->key, arg); } } return 0; } /* Output a usage entry for the long option opt to the stream pointed at by COOKIE. */ static int usage_long_opt (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { argp_fmtstream_t stream = cookie; const char *arg = opt->arg; int flags = opt->flags | real->flags; if (! arg) arg = real->arg; if (! (flags & OPTION_NO_USAGE)) { if (arg) { arg = dgettext (domain, arg); if (flags & OPTION_ARG_OPTIONAL) __argp_fmtstream_printf (stream, " [--%s[=%s]]", opt->name, arg); else __argp_fmtstream_printf (stream, " [--%s=%s]", opt->name, arg); } else __argp_fmtstream_printf (stream, " [--%s]", opt->name); } return 0; } /* Print a short usage description for the arguments in HOL to STREAM. */ static void hol_usage (struct hol *hol, argp_fmtstream_t stream) { if (hol->num_entries > 0) { unsigned nentries; struct hol_entry *entry; char *short_no_arg_opts = alloca (strlen (hol->short_options) + 1); char *snao_end = short_no_arg_opts; /* First we put a list of short options without arguments. */ for (entry = hol->entries, nentries = hol->num_entries ; nentries > 0 ; entry++, nentries--) hol_entry_short_iterate (entry, add_argless_short_opt, entry->argp->argp_domain, &snao_end); if (snao_end > short_no_arg_opts) { *snao_end++ = 0; __argp_fmtstream_printf (stream, " [-%s]", short_no_arg_opts); } /* Now a list of short options *with* arguments. */ for (entry = hol->entries, nentries = hol->num_entries ; nentries > 0 ; entry++, nentries--) hol_entry_short_iterate (entry, usage_argful_short_opt, entry->argp->argp_domain, stream); /* Finally, a list of long options (whew!). */ for (entry = hol->entries, nentries = hol->num_entries ; nentries > 0 ; entry++, nentries--) hol_entry_long_iterate (entry, usage_long_opt, entry->argp->argp_domain, stream); } } /* Make a HOL containing all levels of options in ARGP. CLUSTER is the cluster in which ARGP's entries should be clustered, or 0. */ static struct hol * argp_hol (const struct argp *argp, struct hol_cluster *cluster) { const struct argp_child *child = argp->children; struct hol *hol = make_hol (argp, cluster); if (child) while (child->argp) { struct hol_cluster *child_cluster = ((child->group || child->header) /* Put CHILD->argp within its own cluster. */ ? hol_add_cluster (hol, child->group, child->header, child - argp->children, cluster, argp) /* Just merge it into the parent's cluster. */ : cluster); hol_append (hol, argp_hol (child->argp, child_cluster)) ; child++; } return hol; } /* Calculate how many different levels with alternative args strings exist in ARGP. */ static size_t argp_args_levels (const struct argp *argp) { size_t levels = 0; const struct argp_child *child = argp->children; if (argp->args_doc && strchr (argp->args_doc, '\n')) levels++; if (child) while (child->argp) levels += argp_args_levels ((child++)->argp); return levels; } /* Print all the non-option args documented in ARGP to STREAM. Any output is preceded by a space. LEVELS is a pointer to a byte vector the length returned by argp_args_levels; it should be initialized to zero, and updated by this routine for the next call if ADVANCE is true. True is returned as long as there are more patterns to output. */ static int argp_args_usage (const struct argp *argp, const struct argp_state *state, char **levels, int advance, argp_fmtstream_t stream) { char *our_level = *levels; int multiple = 0; const struct argp_child *child = argp->children; const char *tdoc = dgettext (argp->argp_domain, argp->args_doc), *nl = 0; const char *fdoc = filter_doc (tdoc, ARGP_KEY_HELP_ARGS_DOC, argp, state); if (fdoc) { const char *cp = fdoc; nl = __strchrnul (cp, '\n'); if (*nl != '\0') /* This is a 'multi-level' args doc; advance to the correct position as determined by our state in LEVELS, and update LEVELS. */ { int i; multiple = 1; for (i = 0; i < *our_level; i++) cp = nl + 1, nl = __strchrnul (cp, '\n'); (*levels)++; } /* Manually do line wrapping so that it (probably) won't get wrapped at any embedded spaces. */ space (stream, 1 + nl - cp); __argp_fmtstream_write (stream, cp, nl - cp); } if (fdoc && fdoc != tdoc) free ((char *)fdoc); /* Free user's modified doc string. */ if (child) while (child->argp) advance = !argp_args_usage ((child++)->argp, state, levels, advance, stream); if (advance && multiple) { /* Need to increment our level. */ if (*nl) /* There's more we can do here. */ { (*our_level)++; advance = 0; /* Our parent shouldn't advance also. */ } else if (*our_level > 0) /* We had multiple levels, but used them up; reset to zero. */ *our_level = 0; } return !advance; } /* Print the documentation for ARGP to STREAM; if POST is false, then everything preceding a '\v' character in the documentation strings (or the whole string, for those with none) is printed, otherwise, everything following the '\v' character (nothing for strings without). Each separate bit of documentation is separated a blank line, and if PRE_BLANK is true, then the first is as well. If FIRST_ONLY is true, only the first occurrence is output. Returns true if anything was output. */ static int argp_doc (const struct argp *argp, const struct argp_state *state, int post, int pre_blank, int first_only, argp_fmtstream_t stream) { const char *text; const char *inp_text; void *input = 0; int anything = 0; size_t inp_text_limit = 0; const char *doc = dgettext (argp->argp_domain, argp->doc); const struct argp_child *child = argp->children; if (doc) { char *vt = strchr (doc, '\v'); inp_text = post ? (vt ? vt + 1 : 0) : doc; inp_text_limit = (!post && vt) ? (vt - doc) : 0; } else inp_text = 0; if (argp->help_filter) /* We have to filter the doc strings. */ { if (inp_text_limit) /* Copy INP_TEXT so that it's nul-terminated. */ inp_text = __strndup (inp_text, inp_text_limit); input = __argp_input (argp, state); text = (*argp->help_filter) (post ? ARGP_KEY_HELP_POST_DOC : ARGP_KEY_HELP_PRE_DOC, inp_text, input); } else text = (const char *) inp_text; if (text) { if (pre_blank) __argp_fmtstream_putc (stream, '\n'); if (text == inp_text && inp_text_limit) __argp_fmtstream_write (stream, inp_text, inp_text_limit); else __argp_fmtstream_puts (stream, text); if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream)) __argp_fmtstream_putc (stream, '\n'); anything = 1; } if (text && text != inp_text) free ((char *) text); /* Free TEXT returned from the help filter. */ if (inp_text && inp_text_limit && argp->help_filter) free ((char *) inp_text); /* We copied INP_TEXT, so free it now. */ if (post && argp->help_filter) /* Now see if we have to output a ARGP_KEY_HELP_EXTRA text. */ { text = (*argp->help_filter) (ARGP_KEY_HELP_EXTRA, 0, input); if (text) { if (anything || pre_blank) __argp_fmtstream_putc (stream, '\n'); __argp_fmtstream_puts (stream, text); free ((char *) text); if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream)) __argp_fmtstream_putc (stream, '\n'); anything = 1; } } if (child) while (child->argp && !(first_only && anything)) anything |= argp_doc ((child++)->argp, state, post, anything || pre_blank, first_only, stream); return anything; } /* Output a usage message for ARGP to STREAM. If called from argp_state_help, STATE is the relevent parsing state. FLAGS are from the set ARGP_HELP_*. NAME is what to use wherever a 'program name' is needed. */ static void _help (const struct argp *argp, const struct argp_state *state, FILE *stream, unsigned flags, char *name) { int anything = 0; /* Whether we've output anything. */ struct hol *hol = 0; argp_fmtstream_t fs; if (! stream) return; #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __flockfile (stream); #endif if (! uparams.valid) fill_in_uparams (state); fs = __argp_make_fmtstream (stream, 0, uparams.rmargin, 0); if (! fs) { #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif return; } if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG)) { hol = argp_hol (argp, 0); /* If present, these options always come last. */ hol_set_group (hol, "help", -1); hol_set_group (hol, "version", -1); hol_sort (hol); } if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE)) /* Print a short "Usage:" message. */ { int first_pattern = 1, more_patterns; size_t num_pattern_levels = argp_args_levels (argp); char *pattern_levels = alloca (num_pattern_levels); memset (pattern_levels, 0, num_pattern_levels); do { int old_lm; int old_wm = __argp_fmtstream_set_wmargin (fs, uparams.usage_indent); char *levels = pattern_levels; if (first_pattern) __argp_fmtstream_printf (fs, "%s %s", dgettext (argp->argp_domain, "Usage:"), name); else __argp_fmtstream_printf (fs, "%s %s", dgettext (argp->argp_domain, " or: "), name); /* We set the lmargin as well as the wmargin, because hol_usage manually wraps options with newline to avoid annoying breaks. */ old_lm = __argp_fmtstream_set_lmargin (fs, uparams.usage_indent); if (flags & ARGP_HELP_SHORT_USAGE) /* Just show where the options go. */ { if (hol->num_entries > 0) __argp_fmtstream_puts (fs, dgettext (argp->argp_domain, " [OPTION...]")); } else /* Actually print the options. */ { hol_usage (hol, fs); flags |= ARGP_HELP_SHORT_USAGE; /* But only do so once. */ } more_patterns = argp_args_usage (argp, state, &levels, 1, fs); __argp_fmtstream_set_wmargin (fs, old_wm); __argp_fmtstream_set_lmargin (fs, old_lm); __argp_fmtstream_putc (fs, '\n'); anything = 1; first_pattern = 0; } while (more_patterns); } if (flags & ARGP_HELP_PRE_DOC) anything |= argp_doc (argp, state, 0, 0, 1, fs); if (flags & ARGP_HELP_SEE) { __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, "\ Try '%s --help' or '%s --usage' for more information.\n"), name, name); anything = 1; } if (flags & ARGP_HELP_LONG) /* Print a long, detailed help message. */ { /* Print info about all the options. */ if (hol->num_entries > 0) { if (anything) __argp_fmtstream_putc (fs, '\n'); hol_help (hol, state, fs); anything = 1; } } if (flags & ARGP_HELP_POST_DOC) /* Print any documentation strings at the end. */ anything |= argp_doc (argp, state, 1, anything, 0, fs); if ((flags & ARGP_HELP_BUG_ADDR) && argp_program_bug_address) { if (anything) __argp_fmtstream_putc (fs, '\n'); __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, "Report bugs to %s.\n"), argp_program_bug_address); anything = 1; } #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif if (hol) hol_free (hol); __argp_fmtstream_free (fs); } /* Output a usage message for ARGP to STREAM. FLAGS are from the set ARGP_HELP_*. NAME is what to use wherever a 'program name' is needed. */ void __argp_help (const struct argp *argp, FILE *stream, unsigned flags, char *name) { _help (argp, 0, stream, flags, name); } #ifdef weak_alias weak_alias (__argp_help, argp_help) #endif #if ! (defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME) char * __argp_short_program_name (void) { # if HAVE_DECL_PROGRAM_INVOCATION_NAME char *name = strrchr (program_invocation_name, '/'); return name ? name + 1 : program_invocation_name; # else /* FIXME: What now? Miles suggests that it is better to use NULL, but currently the value is passed on directly to fputs_unlocked, so that requires more changes. */ # if __GNUC__ # warning No reasonable value to return # endif /* __GNUC__ */ return ""; # endif } #endif /* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are from the set ARGP_HELP_*. */ void __argp_state_help (const struct argp_state *state, FILE *stream, unsigned flags) { if ((!state || ! (state->flags & ARGP_NO_ERRS)) && stream) { if (state && (state->flags & ARGP_LONG_ONLY)) flags |= ARGP_HELP_LONG_ONLY; _help (state ? state->root_argp : 0, state, stream, flags, state ? state->name : __argp_short_program_name ()); if (!state || ! (state->flags & ARGP_NO_EXIT)) { if (flags & ARGP_HELP_EXIT_ERR) exit (argp_err_exit_status); if (flags & ARGP_HELP_EXIT_OK) exit (0); } } } #ifdef weak_alias weak_alias (__argp_state_help, argp_state_help) #endif /* If appropriate, print the printf string FMT and following args, preceded by the program name and ':', to stderr, and followed by a "Try ... --help" message, then exit (1). */ void __argp_error (const struct argp_state *state, const char *fmt, ...) { if (!state || !(state->flags & ARGP_NO_ERRS)) { FILE *stream = state ? state->err_stream : stderr; if (stream) { va_list ap; #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __flockfile (stream); #endif va_start (ap, fmt); #ifdef _LIBC char *buf; if (_IO_vasprintf (&buf, fmt, ap) < 0) buf = NULL; __fxprintf (stream, "%s: %s\n", state ? state->name : __argp_short_program_name (), buf); free (buf); #else fputs_unlocked (state ? state->name : __argp_short_program_name (), stream); putc_unlocked (':', stream); putc_unlocked (' ', stream); vfprintf (stream, fmt, ap); putc_unlocked ('\n', stream); #endif __argp_state_help (state, stream, ARGP_HELP_STD_ERR); va_end (ap); #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif } } } #ifdef weak_alias weak_alias (__argp_error, argp_error) #endif /* Similar to the standard gnu error-reporting function error(), but will respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print to STATE->err_stream. This is useful for argument parsing code that is shared between program startup (when exiting is desired) and runtime option parsing (when typically an error code is returned instead). The difference between this function and argp_error is that the latter is for *parsing errors*, and the former is for other problems that occur during parsing but don't reflect a (syntactic) problem with the input. */ void __argp_failure (const struct argp_state *state, int status, int errnum, const char *fmt, ...) { if (!state || !(state->flags & ARGP_NO_ERRS)) { FILE *stream = state ? state->err_stream : stderr; if (stream) { #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __flockfile (stream); #endif #ifdef _LIBC __fxprintf (stream, "%s", state ? state->name : __argp_short_program_name ()); #else fputs_unlocked (state ? state->name : __argp_short_program_name (), stream); #endif if (fmt) { va_list ap; va_start (ap, fmt); #ifdef _LIBC char *buf; if (_IO_vasprintf (&buf, fmt, ap) < 0) buf = NULL; __fxprintf (stream, ": %s", buf); free (buf); #else putc_unlocked (':', stream); putc_unlocked (' ', stream); vfprintf (stream, fmt, ap); #endif va_end (ap); } if (errnum) { char buf[200]; #ifdef _LIBC __fxprintf (stream, ": %s", __strerror_r (errnum, buf, sizeof (buf))); #else char const *s = NULL; putc_unlocked (':', stream); putc_unlocked (' ', stream); # if GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R # if !GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P s = __strerror_r (errnum, buf, sizeof buf); # else if (__strerror_r (errnum, buf, sizeof buf) == 0) s = buf; # endif # endif if (! s && ! (s = strerror (errnum))) s = dgettext (state->root_argp->argp_domain, "Unknown system error"); fputs_unlocked (s, stream); #endif } #if _LIBC if (_IO_fwide (stream, 0) > 0) putwc_unlocked (L'\n', stream); else #endif putc_unlocked ('\n', stream); #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif if (status && (!state || !(state->flags & ARGP_NO_EXIT))) exit (status); } } } #ifdef weak_alias weak_alias (__argp_failure, argp_failure) #endif gnuastro-0.5/bootstrapped/lib/argp-fs-xinl.c0000644000175000017500000000317413217200020016060 00000000000000/* Real definitions for extern inline functions in argp-fmtstream.h Copyright (C) 1997-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define ARGP_FS_EI #else # define ARGP_FS_EI _GL_EXTERN_INLINE #endif #undef __OPTIMIZE__ #define __OPTIMIZE__ 1 #include "argp-fmtstream.h" #if 0 /* Not exported. */ /* Add weak aliases. */ #if _LIBC - 0 && !defined (ARGP_FMTSTREAM_USE_LINEWRAP) && defined (weak_alias) weak_alias (__argp_fmtstream_putc, argp_fmtstream_putc) weak_alias (__argp_fmtstream_puts, argp_fmtstream_puts) weak_alias (__argp_fmtstream_write, argp_fmtstream_write) weak_alias (__argp_fmtstream_set_lmargin, argp_fmtstream_set_lmargin) weak_alias (__argp_fmtstream_set_rmargin, argp_fmtstream_set_rmargin) weak_alias (__argp_fmtstream_set_wmargin, argp_fmtstream_set_wmargin) weak_alias (__argp_fmtstream_point, argp_fmtstream_point) #endif #endif gnuastro-0.5/bootstrapped/lib/argp-fmtstream.h0000644000175000017500000002660113217200020016507 00000000000000/* Word-wrapping and line-truncating streams. Copyright (C) 1997-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* This package emulates glibc 'line_wrap_stream' semantics for systems that don't have that. If the system does have it, it is just a wrapper for that. This header file is only used internally while compiling argp, and shouldn't be installed. */ #ifndef _ARGP_FMTSTREAM_H #define _ARGP_FMTSTREAM_H #include #include #include /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif #if defined (__GNU_LIBRARY__) && defined (HAVE_LINEWRAP_H) /* line_wrap_stream is available, so use that. */ #define ARGP_FMTSTREAM_USE_LINEWRAP #endif #ifdef ARGP_FMTSTREAM_USE_LINEWRAP /* Just be a simple wrapper for line_wrap_stream; the semantics are *slightly* different, as line_wrap_stream doesn't actually make a new object, it just modifies the given stream (reversibly) to do line-wrapping. Since we control who uses this code, it doesn't matter. */ #include typedef FILE *argp_fmtstream_t; #define argp_make_fmtstream line_wrap_stream #define __argp_make_fmtstream line_wrap_stream #define argp_fmtstream_free line_unwrap_stream #define __argp_fmtstream_free line_unwrap_stream #define __argp_fmtstream_putc(fs,ch) putc(ch,fs) #define argp_fmtstream_putc(fs,ch) putc(ch,fs) #define __argp_fmtstream_puts(fs,str) fputs(str,fs) #define argp_fmtstream_puts(fs,str) fputs(str,fs) #define __argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) #define argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) #define __argp_fmtstream_printf fprintf #define argp_fmtstream_printf fprintf #define __argp_fmtstream_lmargin line_wrap_lmargin #define argp_fmtstream_lmargin line_wrap_lmargin #define __argp_fmtstream_set_lmargin line_wrap_set_lmargin #define argp_fmtstream_set_lmargin line_wrap_set_lmargin #define __argp_fmtstream_rmargin line_wrap_rmargin #define argp_fmtstream_rmargin line_wrap_rmargin #define __argp_fmtstream_set_rmargin line_wrap_set_rmargin #define argp_fmtstream_set_rmargin line_wrap_set_rmargin #define __argp_fmtstream_wmargin line_wrap_wmargin #define argp_fmtstream_wmargin line_wrap_wmargin #define __argp_fmtstream_set_wmargin line_wrap_set_wmargin #define argp_fmtstream_set_wmargin line_wrap_set_wmargin #define __argp_fmtstream_point line_wrap_point #define argp_fmtstream_point line_wrap_point #else /* !ARGP_FMTSTREAM_USE_LINEWRAP */ /* Guess we have to define our own version. */ struct argp_fmtstream { FILE *stream; /* The stream we're outputting to. */ size_t lmargin, rmargin; /* Left and right margins. */ ssize_t wmargin; /* Margin to wrap to, or -1 to truncate. */ /* Point in buffer to which we've processed for wrapping, but not output. */ size_t point_offs; /* Output column at POINT_OFFS, or -1 meaning 0 but don't add lmargin. */ ssize_t point_col; char *buf; /* Output buffer. */ char *p; /* Current end of text in BUF. */ char *end; /* Absolute end of BUF. */ }; typedef struct argp_fmtstream *argp_fmtstream_t; /* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines written on it with LMARGIN spaces and limits them to RMARGIN columns total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by replacing the whitespace before them with a newline and WMARGIN spaces. Otherwise, chars beyond RMARGIN are simply dropped until a newline. Returns NULL if there was an error. */ extern argp_fmtstream_t __argp_make_fmtstream (FILE *__stream, size_t __lmargin, size_t __rmargin, ssize_t __wmargin); extern argp_fmtstream_t argp_make_fmtstream (FILE *__stream, size_t __lmargin, size_t __rmargin, ssize_t __wmargin); /* Flush __FS to its stream, and free it (but don't close the stream). */ extern void __argp_fmtstream_free (argp_fmtstream_t __fs); extern void argp_fmtstream_free (argp_fmtstream_t __fs); extern ssize_t __argp_fmtstream_printf (argp_fmtstream_t __fs, const char *__fmt, ...) _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); extern ssize_t argp_fmtstream_printf (argp_fmtstream_t __fs, const char *__fmt, ...) _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); #if _LIBC extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); extern int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); extern int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); extern int argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); extern size_t __argp_fmtstream_write (argp_fmtstream_t __fs, const char *__str, size_t __len); extern size_t argp_fmtstream_write (argp_fmtstream_t __fs, const char *__str, size_t __len); #endif /* Access macros for various bits of state. */ #define argp_fmtstream_lmargin(__fs) ((__fs)->lmargin) #define argp_fmtstream_rmargin(__fs) ((__fs)->rmargin) #define argp_fmtstream_wmargin(__fs) ((__fs)->wmargin) #define __argp_fmtstream_lmargin argp_fmtstream_lmargin #define __argp_fmtstream_rmargin argp_fmtstream_rmargin #define __argp_fmtstream_wmargin argp_fmtstream_wmargin #if _LIBC /* Set __FS's left margin to LMARGIN and return the old value. */ extern size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin); extern size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin); /* Set __FS's right margin to __RMARGIN and return the old value. */ extern size_t argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin); extern size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin); /* Set __FS's wrap margin to __WMARGIN and return the old value. */ extern size_t argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin); extern size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin); /* Return the column number of the current output point in __FS. */ extern size_t argp_fmtstream_point (argp_fmtstream_t __fs); extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs); #endif /* Internal routines. */ extern void _argp_fmtstream_update (argp_fmtstream_t __fs); extern void __argp_fmtstream_update (argp_fmtstream_t __fs); extern int _argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); extern int __argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); #if !_LIBC || defined __OPTIMIZE__ /* Inline versions of above routines. */ #if !_LIBC #define __argp_fmtstream_putc argp_fmtstream_putc #define __argp_fmtstream_puts argp_fmtstream_puts #define __argp_fmtstream_write argp_fmtstream_write #define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin #define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin #define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin #define __argp_fmtstream_point argp_fmtstream_point #define __argp_fmtstream_update _argp_fmtstream_update #define __argp_fmtstream_ensure _argp_fmtstream_ensure #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef ARGP_FS_EI # define ARGP_FS_EI _GL_INLINE #endif #endif #ifndef ARGP_FS_EI #define ARGP_FS_EI extern inline #endif ARGP_FS_EI size_t __argp_fmtstream_write (argp_fmtstream_t __fs, const char *__str, size_t __len) { if (__fs->p + __len <= __fs->end || __argp_fmtstream_ensure (__fs, __len)) { memcpy (__fs->p, __str, __len); __fs->p += __len; return __len; } else return 0; } ARGP_FS_EI int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str) { size_t __len = strlen (__str); if (__len) { size_t __wrote = __argp_fmtstream_write (__fs, __str, __len); return __wrote == __len ? 0 : -1; } else return 0; } ARGP_FS_EI int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch) { if (__fs->p < __fs->end || __argp_fmtstream_ensure (__fs, 1)) return *__fs->p++ = __ch; else return EOF; } /* Set __FS's left margin to __LMARGIN and return the old value. */ ARGP_FS_EI size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin) { size_t __old; if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); __old = __fs->lmargin; __fs->lmargin = __lmargin; return __old; } /* Set __FS's right margin to __RMARGIN and return the old value. */ ARGP_FS_EI size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin) { size_t __old; if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); __old = __fs->rmargin; __fs->rmargin = __rmargin; return __old; } /* Set FS's wrap margin to __WMARGIN and return the old value. */ ARGP_FS_EI size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin) { size_t __old; if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); __old = __fs->wmargin; __fs->wmargin = __wmargin; return __old; } /* Return the column number of the current output point in __FS. */ ARGP_FS_EI size_t __argp_fmtstream_point (argp_fmtstream_t __fs) { if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); return __fs->point_col >= 0 ? __fs->point_col : 0; } #if !_LIBC #undef __argp_fmtstream_putc #undef __argp_fmtstream_puts #undef __argp_fmtstream_write #undef __argp_fmtstream_set_lmargin #undef __argp_fmtstream_set_rmargin #undef __argp_fmtstream_set_wmargin #undef __argp_fmtstream_point #undef __argp_fmtstream_update #undef __argp_fmtstream_ensure _GL_INLINE_HEADER_END #endif #endif /* !_LIBC || __OPTIMIZE__ */ #endif /* ARGP_FMTSTREAM_USE_LINEWRAP */ #endif /* argp-fmtstream.h */ gnuastro-0.5/bootstrapped/lib/argp-fmtstream.c0000644000175000017500000003166413217200020016507 00000000000000/* Word-wrapping and line-truncating streams Copyright (C) 1997-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* This package emulates glibc 'line_wrap_stream' semantics for systems that don't have that. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include "argp-fmtstream.h" #include "argp-namefrob.h" #ifndef ARGP_FMTSTREAM_USE_LINEWRAP #ifndef isblank #define isblank(ch) ((ch)==' ' || (ch)=='\t') #endif #ifdef _LIBC # include # include # define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a) #endif #define INIT_BUF_SIZE 200 #define PRINTF_SIZE_GUESS 150 /* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines written on it with LMARGIN spaces and limits them to RMARGIN columns total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by replacing the whitespace before them with a newline and WMARGIN spaces. Otherwise, chars beyond RMARGIN are simply dropped until a newline. Returns NULL if there was an error. */ argp_fmtstream_t __argp_make_fmtstream (FILE *stream, size_t lmargin, size_t rmargin, ssize_t wmargin) { argp_fmtstream_t fs; fs = (struct argp_fmtstream *) malloc (sizeof (struct argp_fmtstream)); if (fs != NULL) { fs->stream = stream; fs->lmargin = lmargin; fs->rmargin = rmargin; fs->wmargin = wmargin; fs->point_col = 0; fs->point_offs = 0; fs->buf = (char *) malloc (INIT_BUF_SIZE); if (! fs->buf) { free (fs); fs = 0; } else { fs->p = fs->buf; fs->end = fs->buf + INIT_BUF_SIZE; } } return fs; } #if 0 /* Not exported. */ #ifdef weak_alias weak_alias (__argp_make_fmtstream, argp_make_fmtstream) #endif #endif /* Flush FS to its stream, and free it (but don't close the stream). */ void __argp_fmtstream_free (argp_fmtstream_t fs) { __argp_fmtstream_update (fs); if (fs->p > fs->buf) { #ifdef _LIBC __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf); #else fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream); #endif } free (fs->buf); free (fs); } #if 0 /* Not exported. */ #ifdef weak_alias weak_alias (__argp_fmtstream_free, argp_fmtstream_free) #endif #endif /* Process FS's buffer so that line wrapping is done from POINT_OFFS to the end of its buffer. This code is mostly from glibc stdio/linewrap.c. */ void __argp_fmtstream_update (argp_fmtstream_t fs) { char *buf, *nl; size_t len; /* Scan the buffer for newlines. */ buf = fs->buf + fs->point_offs; while (buf < fs->p) { size_t r; if (fs->point_col == 0 && fs->lmargin != 0) { /* We are starting a new line. Print spaces to the left margin. */ const size_t pad = fs->lmargin; if (fs->p + pad < fs->end) { /* We can fit in them in the buffer by moving the buffer text up and filling in the beginning. */ memmove (buf + pad, buf, fs->p - buf); fs->p += pad; /* Compensate for bigger buffer. */ memset (buf, ' ', pad); /* Fill in the spaces. */ buf += pad; /* Don't bother searching them. */ } else { /* No buffer space for spaces. Must flush. */ size_t i; for (i = 0; i < pad; i++) { #ifdef _LIBC if (_IO_fwide (fs->stream, 0) > 0) putwc_unlocked (L' ', fs->stream); else #endif putc_unlocked (' ', fs->stream); } } fs->point_col = pad; } len = fs->p - buf; nl = memchr (buf, '\n', len); if (fs->point_col < 0) fs->point_col = 0; if (!nl) { /* The buffer ends in a partial line. */ if (fs->point_col + len < fs->rmargin) { /* The remaining buffer text is a partial line and fits within the maximum line width. Advance point for the characters to be written and stop scanning. */ fs->point_col += len; break; } else /* Set the end-of-line pointer for the code below to the end of the buffer. */ nl = fs->p; } else if (fs->point_col + (nl - buf) < (ssize_t) fs->rmargin) { /* The buffer contains a full line that fits within the maximum line width. Reset point and scan the next line. */ fs->point_col = 0; buf = nl + 1; continue; } /* This line is too long. */ r = fs->rmargin - 1; if (fs->wmargin < 0) { /* Truncate the line by overwriting the excess with the newline and anything after it in the buffer. */ if (nl < fs->p) { memmove (buf + (r - fs->point_col), nl, fs->p - nl); fs->p -= buf + (r - fs->point_col) - nl; /* Reset point for the next line and start scanning it. */ fs->point_col = 0; buf += r + 1; /* Skip full line plus \n. */ } else { /* The buffer ends with a partial line that is beyond the maximum line width. Advance point for the characters written, and discard those past the max from the buffer. */ fs->point_col += len; fs->p -= fs->point_col - r; break; } } else { /* Do word wrap. Go to the column just past the maximum line width and scan back for the beginning of the word there. Then insert a line break. */ char *p, *nextline; int i; p = buf + (r + 1 - fs->point_col); while (p >= buf && !isblank ((unsigned char) *p)) --p; nextline = p + 1; /* This will begin the next line. */ if (nextline > buf) { /* Swallow separating blanks. */ if (p >= buf) do --p; while (p >= buf && isblank ((unsigned char) *p)); nl = p + 1; /* The newline will replace the first blank. */ } else { /* A single word that is greater than the maximum line width. Oh well. Put it on an overlong line by itself. */ p = buf + (r + 1 - fs->point_col); /* Find the end of the long word. */ if (p < nl) do ++p; while (p < nl && !isblank ((unsigned char) *p)); if (p == nl) { /* It already ends a line. No fussing required. */ fs->point_col = 0; buf = nl + 1; continue; } /* We will move the newline to replace the first blank. */ nl = p; /* Swallow separating blanks. */ do ++p; while (isblank ((unsigned char) *p)); /* The next line will start here. */ nextline = p; } /* Note: There are a bunch of tests below for NEXTLINE == BUF + LEN + 1; this case is where NL happens to fall at the end of the buffer, and NEXTLINE is in fact empty (and so we need not be careful to maintain its contents). */ if ((nextline == buf + len + 1 ? fs->end - nl < fs->wmargin + 1 : nextline - (nl + 1) < fs->wmargin) && fs->p > nextline) { /* The margin needs more blanks than we removed. */ if (fs->end - fs->p > fs->wmargin + 1) /* Make some space for them. */ { size_t mv = fs->p - nextline; memmove (nl + 1 + fs->wmargin, nextline, mv); nextline = nl + 1 + fs->wmargin; len = nextline + mv - buf; *nl++ = '\n'; } else /* Output the first line so we can use the space. */ { #ifdef _LIBC __fxprintf (fs->stream, "%.*s\n", (int) (nl - fs->buf), fs->buf); #else if (nl > fs->buf) fwrite_unlocked (fs->buf, 1, nl - fs->buf, fs->stream); putc_unlocked ('\n', fs->stream); #endif len += buf - fs->buf; nl = buf = fs->buf; } } else /* We can fit the newline and blanks in before the next word. */ *nl++ = '\n'; if (nextline - nl >= fs->wmargin || (nextline == buf + len + 1 && fs->end - nextline >= fs->wmargin)) /* Add blanks up to the wrap margin column. */ for (i = 0; i < fs->wmargin; ++i) *nl++ = ' '; else for (i = 0; i < fs->wmargin; ++i) #ifdef _LIBC if (_IO_fwide (fs->stream, 0) > 0) putwc_unlocked (L' ', fs->stream); else #endif putc_unlocked (' ', fs->stream); /* Copy the tail of the original buffer into the current buffer position. */ if (nl < nextline) memmove (nl, nextline, buf + len - nextline); len -= nextline - buf; /* Continue the scan on the remaining lines in the buffer. */ buf = nl; /* Restore bufp to include all the remaining text. */ fs->p = nl + len; /* Reset the counter of what has been output this line. If wmargin is 0, we want to avoid the lmargin getting added, so we set point_col to a magic value of -1 in that case. */ fs->point_col = fs->wmargin ? fs->wmargin : -1; } } /* Remember that we've scanned as far as the end of the buffer. */ fs->point_offs = fs->p - fs->buf; } /* Ensure that FS has space for AMOUNT more bytes in its buffer, either by growing the buffer, or by flushing it. True is returned iff we succeed. */ int __argp_fmtstream_ensure (struct argp_fmtstream *fs, size_t amount) { if ((size_t) (fs->end - fs->p) < amount) { ssize_t wrote; /* Flush FS's buffer. */ __argp_fmtstream_update (fs); #ifdef _LIBC __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf); wrote = fs->p - fs->buf; #else wrote = fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream); #endif if (wrote == fs->p - fs->buf) { fs->p = fs->buf; fs->point_offs = 0; } else { fs->p -= wrote; fs->point_offs -= wrote; memmove (fs->buf, fs->buf + wrote, fs->p - fs->buf); return 0; } if ((size_t) (fs->end - fs->buf) < amount) /* Gotta grow the buffer. */ { size_t old_size = fs->end - fs->buf; size_t new_size = old_size + amount; char *new_buf; if (new_size < old_size || ! (new_buf = realloc (fs->buf, new_size))) { __set_errno (ENOMEM); return 0; } fs->buf = new_buf; fs->end = new_buf + new_size; fs->p = fs->buf; } } return 1; } ssize_t __argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...) { int out; size_t avail; size_t size_guess = PRINTF_SIZE_GUESS; /* How much space to reserve. */ do { va_list args; if (! __argp_fmtstream_ensure (fs, size_guess)) return -1; va_start (args, fmt); avail = fs->end - fs->p; out = __vsnprintf (fs->p, avail, fmt, args); va_end (args); if ((size_t) out >= avail) size_guess = out + 1; } while ((size_t) out >= avail); fs->p += out; return out; } #if 0 /* Not exported. */ #ifdef weak_alias weak_alias (__argp_fmtstream_printf, argp_fmtstream_printf) #endif #endif #endif /* !ARGP_FMTSTREAM_USE_LINEWRAP */ gnuastro-0.5/bootstrapped/lib/argp-eexst.c0000644000175000017500000000220713217200020015624 00000000000000/* Default definition for ARGP_ERR_EXIT_STATUS Copyright (C) 1997, 2009-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include "argp.h" /* The exit status that argp will use when exiting due to a parsing error. If not defined or set by the user program, this defaults to EX_USAGE from . */ error_t argp_err_exit_status = EX_USAGE; gnuastro-0.5/bootstrapped/lib/argp-ba.c0000644000175000017500000000305713217200020015062 00000000000000/* Default definition for ARGP_PROGRAM_BUG_ADDRESS. Copyright (C) 1996-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* If set by the user program, it should point to string that is the bug-reporting address for the program. It will be printed by argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help messages), embedded in a sentence that says something like "Report bugs to ADDR." */ const char *argp_program_bug_address /* This variable should be zero-initialized. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3 and 10.4, see . */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else = (const char *) 0 #endif ; gnuastro-0.5/bootstrapped/lib/argp.h0000644000175000017500000007143413217200050014516 00000000000000/* Hierarchical argument parsing, layered over getopt. Copyright (C) 1995-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _ARGP_H #define _ARGP_H #include #include #include #include #define __need_error_t #include #ifndef __THROW # define __THROW #endif #ifndef __NTH # define __NTH(fct) fct __THROW #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif /* GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words. */ #ifndef __restrict # if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) # if 199901L <= __STDC_VERSION__ # define __restrict restrict # else # define __restrict # endif # endif #endif #ifndef __error_t_defined typedef int error_t; # define __error_t_defined #endif #ifdef __cplusplus extern "C" { #endif /* A description of a particular option. A pointer to an array of these is passed in the OPTIONS field of an argp structure. Each option entry can correspond to one long option and/or one short option; more names for the same option can be added by following an entry in an option array with options having the OPTION_ALIAS flag set. */ struct argp_option { /* The long option name. For more than one name for the same option, you can use following options with the OPTION_ALIAS flag set. */ const char *name; /* What key is returned for this option. If > 0 and printable, then it's also accepted as a short option. */ int key; /* If non-NULL, this is the name of the argument associated with this option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */ const char *arg; /* OPTION_ flags. */ int flags; /* The doc string for this option. If both NAME and KEY are 0, This string will be printed outdented from the normal option column, making it useful as a group header (it will be the first thing printed in its group); in this usage, it's conventional to end the string with a ':'. Write the initial value as N_("TEXT") if you want xgettext to collect it into a POT file. */ const char *doc; /* The group this option is in. In a long help message, options are sorted alphabetically within each group, and the groups presented in the order 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with if this field 0 will inherit the group number of the previous entry, or zero if it's the first one, unless its a group header (NAME and KEY both 0), in which case, the previous entry + 1 is the default. Automagic options such as --help are put into group -1. */ int group; /* Pointer to value. IMPORTANT: A Gnuastro addition. */ void *value; /* Type of value (see lib/gnuastro/data.h). IMPORTANT: A Gnuastro addition. */ int type; /* Acceptable range of value (see lib/options.h). IMPORTANT: A Gnuastro addition. */ int range; /* Is this option mandatory? (see lib/options.h). IMPORTANT: A Gnuastro addition. */ unsigned char mandatory; /* Is value already set or not? (see lib/options.h). IMPORTANT: A Gnuastro addition. */ unsigned char set; /* Function to process the given value. Arguments to the function: struct argp_option *option: This argp_option. char *arg: String given by the user. char *filename: Filename option was read from. size_t lineno: Line number of option in file. void *struct: Pointer to main program struct. IMPORTANT: A Gnuastro addition. */ void *(*func)(struct argp_option *, char *, char *, size_t, void *); }; /* The argument associated with this option is optional. */ #define OPTION_ARG_OPTIONAL 0x1 /* This option isn't displayed in any help messages. */ #define OPTION_HIDDEN 0x2 /* This option is an alias for the closest previous non-alias option. This means that it will be displayed in the same help entry, and will inherit fields other than NAME and KEY from the aliased option. */ #define OPTION_ALIAS 0x4 /* This option isn't actually an option (and so should be ignored by the actual option parser), but rather an arbitrary piece of documentation that should be displayed in much the same manner as the options. If this flag is set, then the option NAME field is displayed unmodified (e.g., no '--' prefix is added) at the left-margin (where a *short* option would normally be displayed), and the documentation string in the normal place. The NAME field will be translated using gettext, unless OPTION_NO_TRANS is set (see below). For purposes of sorting, any leading whitespace and punctuation is ignored, except that if the first non-whitespace character is not '-', this entry is displayed after all options (and OPTION_DOC entries with a leading '-') in the same group. */ #define OPTION_DOC 0x8 /* This option shouldn't be included in "long" usage messages (but is still included in help messages). This is mainly intended for options that are completely documented in an argp's ARGS_DOC field, in which case including the option in the generic usage list would be redundant. For instance, if ARGS_DOC is "FOO BAR\n-x BLAH", and the '-x' option's purpose is to distinguish these two cases, -x should probably be marked OPTION_NO_USAGE. */ #define OPTION_NO_USAGE 0x10 /* Valid only in conjunction with OPTION_DOC. This option disables translation of option name. */ #define OPTION_NO_TRANS 0x20 struct argp; /* fwd declare this type */ struct argp_state; /* " */ struct argp_child; /* " */ /* The type of a pointer to an argp parsing function. */ typedef error_t (*argp_parser_t) (int __key, char *__arg, struct argp_state *__state); /* What to return for unrecognized keys. For special ARGP_KEY_ keys, such returns will simply be ignored. For user keys, this error will be turned into EINVAL (if the call to argp_parse is such that errors are propagated back to the user instead of exiting); returning EINVAL itself would result in an immediate stop to parsing in *all* cases. */ #define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */ /* Special values for the KEY argument to an argument parsing function. ARGP_ERR_UNKNOWN should be returned if they aren't understood. The sequence of keys to a parsing function is either (where each uppercased word should be prefixed by 'ARGP_KEY_' and opt is a user key): INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized The third case is where every parser returned ARGP_KEY_UNKNOWN for an argument, in which case parsing stops at that argument (returning the unparsed arguments to the caller of argp_parse if requested, or stopping with an error message if not). If an error occurs (either detected by argp, or because the parsing function returned an error value), then the parser is called with ARGP_KEY_ERROR, and no further calls are made. */ /* This is not an option at all, but rather a command line argument. If a parser receiving this key returns success, the fact is recorded, and the ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the argument, a parser function decrements the NEXT field of the state it's passed, the option won't be considered processed; this is to allow you to actually modify the argument (perhaps into an option), and have it processed again. */ #define ARGP_KEY_ARG 0 /* There are remaining arguments not parsed by any parser, which may be found starting at (STATE->argv + STATE->next). If success is returned, but STATE->next left untouched, it's assumed that all arguments were consume, otherwise, the parser should adjust STATE->next to reflect any arguments consumed. */ #define ARGP_KEY_ARGS 0x1000006 /* There are no more command line arguments at all. */ #define ARGP_KEY_END 0x1000001 /* Because it's common to want to do some special processing if there aren't any non-option args, user parsers are called with this key if they didn't successfully process any non-option arguments. Called just before ARGP_KEY_END (where more general validity checks on previously parsed arguments can take place). */ #define ARGP_KEY_NO_ARGS 0x1000002 /* Passed in before any parsing is done. Afterwards, the values of each element of the CHILD_INPUT field, if any, in the state structure is copied to each child's state to be the initial value of the INPUT field. */ #define ARGP_KEY_INIT 0x1000003 /* Use after all other keys, including SUCCESS & END. */ #define ARGP_KEY_FINI 0x1000007 /* Passed in when parsing has successfully been completed (even if there are still arguments remaining). */ #define ARGP_KEY_SUCCESS 0x1000004 /* Passed in if an error occurs. */ #define ARGP_KEY_ERROR 0x1000005 /* An argp structure contains a set of options declarations, a function to deal with parsing one, documentation string, a possible vector of child argp's, and perhaps a function to filter help output. When actually parsing options, getopt is called with the union of all the argp structures chained together through their CHILD pointers, with conflicts being resolved in favor of the first occurrence in the chain. */ struct argp { /* An array of argp_option structures, terminated by an entry with both NAME and KEY having a value of 0. */ const struct argp_option *options; /* What to do with an option from this structure. KEY is the key associated with the option, and ARG is any associated argument (NULL if none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then parsing is stopped immediately, and that value is returned from argp_parse(). For special (non-user-supplied) values of KEY, see the ARGP_KEY_ definitions below. */ argp_parser_t parser; /* A string describing what other arguments are wanted by this program. It is only used by argp_usage to print the "Usage:" message. If it contains newlines, the strings separated by them are considered alternative usage patterns, and printed on separate lines (lines after the first are prefix by " or: " instead of "Usage:"). */ const char *args_doc; /* If non-NULL, a string containing extra text to be printed before and after the options in a long help message (separated by a vertical tab '\v' character). Write the initial value as N_("BEFORE-TEXT") "\v" N_("AFTER-TEXT") if you want xgettext to collect the two pieces of text into a POT file. */ const char *doc; /* A vector of argp_children structures, terminated by a member with a 0 argp field, pointing to child argps should be parsed with this one. Any conflicts are resolved in favor of this argp, or early argps in the CHILDREN list. This field is useful if you use libraries that supply their own argp structure, which you want to use in conjunction with your own. */ const struct argp_child *children; /* If non-zero, this should be a function to filter the output of help messages. KEY is either a key from an option, in which case TEXT is that option's help text, or a special key from the ARGP_KEY_HELP_ defines, below, describing which other help text TEXT is. The function should return either TEXT, if it should be used as-is, a replacement string, which should be malloced, and will be freed by argp, or NULL, meaning "print nothing". The value for TEXT is *after* any translation has been done, so if any of the replacement text also needs translation, that should be done by the filter function. INPUT is either the input supplied to argp_parse, or NULL, if argp_help was called directly. */ char *(*help_filter) (int __key, const char *__text, void *__input); /* If non-zero the strings used in the argp library are translated using the domain described by this string. Otherwise the currently installed default domain is used. */ const char *argp_domain; }; /* Possible KEY arguments to a help filter function. */ #define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceding options. */ #define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */ #define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */ #define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation; TEXT is NULL for this key. */ /* Explanatory note emitted when duplicate option arguments have been suppressed. */ #define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005 #define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */ /* When an argp has a non-zero CHILDREN field, it should point to a vector of argp_child structures, each of which describes a subsidiary argp. */ struct argp_child { /* The child parser. */ const struct argp *argp; /* Flags for this child. */ int flags; /* If non-zero, an optional header to be printed in help output before the child options. As a side-effect, a non-zero value forces the child options to be grouped together; to achieve this effect without actually printing a header string, use a value of "". */ const char *header; /* Where to group the child options relative to the other ("consolidated") options in the parent argp; the values are the same as the GROUP field in argp_option structs, but all child-groupings follow parent options at a particular group level. If both this field and HEADER are zero, then they aren't grouped at all, but rather merged with the parent options (merging the child's grouping levels with the parents). */ int group; }; /* Parsing state. This is provided to parsing functions called by argp, which may examine and, as noted, modify fields. */ struct argp_state { /* The top level ARGP being parsed. */ const struct argp *root_argp; /* The argument vector being parsed. May be modified. */ int argc; char **argv; /* The index in ARGV of the next arg that to be parsed. May be modified. */ int next; /* The flags supplied to argp_parse. May be modified. */ unsigned flags; /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the number of the current arg, starting at zero, and incremented after each such call returns. At all other times, this is the number of such arguments that have been processed. */ unsigned arg_num; /* If non-zero, the index in ARGV of the first argument following a special '--' argument (which prevents anything following being interpreted as an option). Only set once argument parsing has proceeded past this point. */ int quoted; /* An arbitrary pointer passed in from the user. */ void *input; /* Values to pass to child parsers. This vector will be the same length as the number of children for the current parser. */ void **child_inputs; /* For the parser's use. Initialized to 0. */ void *hook; /* The name used when printing messages. This is initialized to ARGV[0], or PROGRAM_INVOCATION_NAME if that is unavailable. */ char *name; /* Streams used when argp prints something. */ FILE *err_stream; /* For errors; initialized to stderr. */ FILE *out_stream; /* For information; initialized to stdout. */ void *pstate; /* Private, for use by argp. */ }; /* Flags for argp_parse (note that the defaults are those that are convenient for program command line parsing): */ /* Don't ignore the first element of ARGV. Normally (and always unless ARGP_NO_ERRS is set) the first element of the argument vector is skipped for option parsing purposes, as it corresponds to the program name in a command line. */ #define ARGP_PARSE_ARGV0 0x01 /* Don't print error messages for unknown options to stderr; unless this flag is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program name in the error messages. This flag implies ARGP_NO_EXIT (on the assumption that silent exiting upon errors is bad behaviour). */ #define ARGP_NO_ERRS 0x02 /* Don't parse any non-option args. Normally non-option args are parsed by calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg as the value. Since it's impossible to know which parse function wants to handle it, each one is called in turn, until one returns 0 or an error other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the argp_parse returns prematurely (but with a return value of 0). If all args have been parsed without error, all parsing functions are called one last time with a key of ARGP_KEY_END. This flag needn't normally be set, as the normal behavior is to stop parsing as soon as some argument can't be handled. */ #define ARGP_NO_ARGS 0x04 /* Parse options and arguments in the same order they occur on the command line -- normally they're rearranged so that all options come first. */ #define ARGP_IN_ORDER 0x08 /* Don't provide the standard long option --help, which causes usage and option help information to be output to stdout, and exit (0) called. */ #define ARGP_NO_HELP 0x10 /* Don't exit on errors (they may still result in error messages). */ #define ARGP_NO_EXIT 0x20 /* Use the gnu getopt "long-only" rules for parsing arguments. */ #define ARGP_LONG_ONLY 0x40 /* Turns off any message-printing/exiting options. */ #define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP) /* Parse the options strings in ARGC & ARGV according to the options in ARGP. FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the index in ARGV of the first unparsed option is returned in it. If an unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser routine returned a non-zero value, it is returned; otherwise 0 is returned. This function may also call exit unless the ARGP_NO_HELP flag is set. INPUT is a pointer to a value to be passed in to the parser. */ extern error_t argp_parse (const struct argp *__restrict __argp, int /*argc*/, char **__restrict /*argv*/, unsigned __flags, int *__restrict __arg_index, void *__restrict __input); extern error_t __argp_parse (const struct argp *__restrict __argp, int /*argc*/, char **__restrict /*argv*/, unsigned __flags, int *__restrict __arg_index, void *__restrict __input); /* Global variables. */ /* GNULIB makes sure both program_invocation_name and program_invocation_short_name are available */ #ifdef GNULIB_PROGRAM_INVOCATION_NAME extern char *program_invocation_name; # undef HAVE_DECL_PROGRAM_INVOCATION_NAME # define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 #endif #ifdef GNULIB_PROGRAM_INVOCATION_SHORT_NAME extern char *program_invocation_short_name; # undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME # define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 #endif /* If defined or set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which will print this string followed by a newline and exit (unless the ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ extern const char *argp_program_version; /* If defined or set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which calls this function with a stream to print the version to and a pointer to the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ extern void (*argp_program_version_hook) (FILE *__restrict __stream, struct argp_state *__restrict __state); /* If defined or set by the user program, it should point to string that is the bug-reporting address for the program. It will be printed by argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help messages), embedded in a sentence that says something like "Report bugs to ADDR." */ extern const char *argp_program_bug_address; /* The exit status that argp will use when exiting due to a parsing error. If not defined or set by the user program, this defaults to EX_USAGE from . */ extern error_t argp_err_exit_status; /* Flags for argp_help. */ #define ARGP_HELP_USAGE 0x01 /* a Usage: message. */ #define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */ #define ARGP_HELP_SEE 0x04 /* a "Try ... for more help" message. */ #define ARGP_HELP_LONG 0x08 /* a long help message. */ #define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */ #define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */ #define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC) #define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */ #define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to reflect ARGP_LONG_ONLY mode. */ /* These ARGP_HELP flags are only understood by argp_state_help. */ #define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */ #define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */ /* The standard thing to do after a program command line parsing error, if an error message has already been printed. */ #define ARGP_HELP_STD_ERR \ (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) /* The standard thing to do after a program command line parsing error, if no more specific error message has been printed. */ #define ARGP_HELP_STD_USAGE \ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) /* The standard thing to do in response to a --help option. */ #define ARGP_HELP_STD_HELP \ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \ | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR) /* Output a usage message for ARGP to STREAM. FLAGS are from the set ARGP_HELP_*. */ extern void argp_help (const struct argp *__restrict __argp, FILE *__restrict __stream, unsigned __flags, char *__restrict __name); extern void __argp_help (const struct argp *__restrict __argp, FILE *__restrict __stream, unsigned __flags, char *__name); /* The following routines are intended to be called from within an argp parsing routine (thus taking an argp_state structure as the first argument). They may or may not print an error message and exit, depending on the flags in STATE -- in any case, the caller should be prepared for them *not* to exit, and should return an appropriate error after calling them. [argp_usage & argp_error should probably be called argp_state_..., but they're used often enough that they should be short] */ /* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are from the set ARGP_HELP_*. */ extern void argp_state_help (const struct argp_state *__restrict __state, FILE *__restrict __stream, unsigned int __flags); extern void __argp_state_help (const struct argp_state *__restrict __state, FILE *__restrict __stream, unsigned int __flags); #if _LIBC /* Possibly output the standard usage message for ARGP to stderr and exit. */ extern void argp_usage (const struct argp_state *__state); extern void __argp_usage (const struct argp_state *__state); #endif /* If appropriate, print the printf string FMT and following args, preceded by the program name and ':', to stderr, and followed by a "Try ... --help" message, then exit (1). */ extern void argp_error (const struct argp_state *__restrict __state, const char *__restrict __fmt, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); extern void __argp_error (const struct argp_state *__restrict __state, const char *__restrict __fmt, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); /* Similar to the standard gnu error-reporting function error(), but will respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print to STATE->err_stream. This is useful for argument parsing code that is shared between program startup (when exiting is desired) and runtime option parsing (when typically an error code is returned instead). The difference between this function and argp_error is that the latter is for *parsing errors*, and the former is for other problems that occur during parsing but don't reflect a (syntactic) problem with the input. */ extern void argp_failure (const struct argp_state *__restrict __state, int __status, int __errnum, const char *__restrict __fmt, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5)); extern void __argp_failure (const struct argp_state *__restrict __state, int __status, int __errnum, const char *__restrict __fmt, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5)); #if _LIBC /* Returns true if the option OPT is a valid short option. */ extern int _option_is_short (const struct argp_option *__opt) __THROW; extern int __option_is_short (const struct argp_option *__opt) __THROW; /* Returns true if the option OPT is in fact the last (unused) entry in an options array. */ extern int _option_is_end (const struct argp_option *__opt) __THROW; extern int __option_is_end (const struct argp_option *__opt) __THROW; #endif /* Return the input field for ARGP in the parser corresponding to STATE; used by the help routines. */ extern void *_argp_input (const struct argp *__restrict __argp, const struct argp_state *__restrict __state) __THROW; extern void *__argp_input (const struct argp *__restrict __argp, const struct argp_state *__restrict __state) __THROW; #if !_LIBC || defined __USE_EXTERN_INLINES # if !_LIBC # define __argp_usage argp_usage # define __argp_state_help argp_state_help # define __option_is_short _option_is_short # define __option_is_end _option_is_end #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN # ifndef ARGP_EI # define ARGP_EI _GL_INLINE # endif # endif # ifndef ARGP_EI # define ARGP_EI __extern_inline # endif ARGP_EI void __argp_usage (const struct argp_state *__state) { __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); } ARGP_EI int __NTH (__option_is_short (const struct argp_option *__opt)) { if (__opt->flags & OPTION_DOC) return 0; else { int __key = __opt->key; return __key > 0 && __key <= UCHAR_MAX && isprint (__key); } } ARGP_EI int __NTH (__option_is_end (const struct argp_option *__opt)) { return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; } # if !_LIBC # undef __argp_usage # undef __argp_state_help # undef __option_is_short # undef __option_is_end _GL_INLINE_HEADER_END # endif #endif /* Use extern inlines. */ #ifdef __cplusplus } #endif #endif /* argp.h */ gnuastro-0.5/bootstrapped/lib/alloca.c0000644000175000017500000003445413217200020015011 00000000000000/* alloca.c -- allocate automatically reclaimed memory (Mostly) portable public-domain implementation -- D A Gwyn This implementation of the PWB library alloca function, which is used to allocate space off the run-time stack so that it is automatically reclaimed upon procedure exit, was inspired by discussions with J. Q. Johnson of Cornell. J.Otto Tennant contributed the Cray support. There are some preprocessor constants that can be defined when compiling for your specific system, for improved efficiency; however, the defaults should be okay. The general concept of this implementation is to keep track of all alloca-allocated blocks, and reclaim any that are found to be deeper in the stack than the current invocation. This heuristic does not reclaim storage as soon as it becomes invalid, but it will do so eventually. As a special case, alloca(0) reclaims storage without allocating any. It is a good idea to use alloca(0) in your main control loop, etc. to force garbage collection. */ #include #include #include #include #ifdef emacs # include "lisp.h" # include "blockinput.h" # ifdef EMACS_FREE # undef free # define free EMACS_FREE # endif #else # define memory_full() abort () #endif /* If compiling with GCC 2, this file's not needed. */ #if !defined (__GNUC__) || __GNUC__ < 2 /* If someone has defined alloca as a macro, there must be some other way alloca is supposed to work. */ # ifndef alloca # ifdef emacs # ifdef static /* actually, only want this if static is defined as "" -- this is for usg, in which emacs must undefine static in order to make unexec workable */ # ifndef STACK_DIRECTION you lose -- must know STACK_DIRECTION at compile-time /* Using #error here is not wise since this file should work for old and obscure compilers. */ # endif /* STACK_DIRECTION undefined */ # endif /* static */ # endif /* emacs */ /* If your stack is a linked list of frames, you have to provide an "address metric" ADDRESS_FUNCTION macro. */ # if defined (CRAY) && defined (CRAY_STACKSEG_END) long i00afunc (); # define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) # else # define ADDRESS_FUNCTION(arg) &(arg) # endif /* Define STACK_DIRECTION if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ # ifndef STACK_DIRECTION # define STACK_DIRECTION 0 /* Direction unknown. */ # endif # if STACK_DIRECTION != 0 # define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ # else /* STACK_DIRECTION == 0; need run-time code. */ static int stack_dir; /* 1 or -1 once known. */ # define STACK_DIR stack_dir static int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } # endif /* STACK_DIRECTION == 0 */ /* An "alloca header" is used to: (a) chain together all alloca'ed blocks; (b) keep track of stack depth. It is very important that sizeof(header) agree with malloc alignment chunk size. The following default should work okay. */ # ifndef ALIGN_SIZE # define ALIGN_SIZE sizeof(double) # endif typedef union hdr { char align[ALIGN_SIZE]; /* To force sizeof(header). */ struct { union hdr *next; /* For chaining headers. */ char *deep; /* For stack depth measure. */ } h; } header; static header *last_alloca_header = NULL; /* -> last alloca header. */ /* Return a pointer to at least SIZE bytes of storage, which will be automatically reclaimed upon exit from the procedure that called alloca. Originally, this space was supposed to be taken from the current stack frame of the caller, but that method cannot be made to work for some implementations of C, for example under Gould's UTX/32. */ void * alloca (size_t size) { auto char probe; /* Probes stack depth: */ register char *depth = ADDRESS_FUNCTION (probe); # if STACK_DIRECTION == 0 if (STACK_DIR == 0) /* Unknown growth direction. */ STACK_DIR = find_stack_direction (NULL, (size & 1) + 20); # endif /* Reclaim garbage, defined as all alloca'd storage that was allocated from deeper in the stack than currently. */ { register header *hp; /* Traverses linked list. */ # ifdef emacs BLOCK_INPUT; # endif for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) || (STACK_DIR < 0 && hp->h.deep < depth)) { register header *np = hp->h.next; free (hp); /* Collect garbage. */ hp = np; /* -> next header. */ } else break; /* Rest are not deeper. */ last_alloca_header = hp; /* -> last valid storage. */ # ifdef emacs UNBLOCK_INPUT; # endif } if (size == 0) return NULL; /* No allocation required. */ /* Allocate combined header + user data storage. */ { /* Address of header. */ register header *new; size_t combined_size = sizeof (header) + size; if (combined_size < sizeof (header)) memory_full (); new = malloc (combined_size); if (! new) memory_full (); new->h.next = last_alloca_header; new->h.deep = depth; last_alloca_header = new; /* User storage begins just after header. */ return (void *) (new + 1); } } # if defined (CRAY) && defined (CRAY_STACKSEG_END) # ifdef DEBUG_I00AFUNC # include # endif # ifndef CRAY_STACK # define CRAY_STACK # ifndef CRAY2 /* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ struct stack_control_header { long shgrow:32; /* Number of times stack has grown. */ long shaseg:32; /* Size of increments to stack. */ long shhwm:32; /* High water mark of stack. */ long shsize:32; /* Current size of stack (all segments). */ }; /* The stack segment linkage control information occurs at the high-address end of a stack segment. (The stack grows from low addresses to high addresses.) The initial part of the stack segment linkage control information is 0200 (octal) words. This provides for register storage for the routine which overflows the stack. */ struct stack_segment_linkage { long ss[0200]; /* 0200 overflow words. */ long sssize:32; /* Number of words in this segment. */ long ssbase:32; /* Offset to stack base. */ long:32; long sspseg:32; /* Offset to linkage control of previous segment of stack. */ long:32; long sstcpt:32; /* Pointer to task common address block. */ long sscsnm; /* Private control structure number for microtasking. */ long ssusr1; /* Reserved for user. */ long ssusr2; /* Reserved for user. */ long sstpid; /* Process ID for pid based multi-tasking. */ long ssgvup; /* Pointer to multitasking thread giveup. */ long sscray[7]; /* Reserved for Cray Research. */ long ssa0; long ssa1; long ssa2; long ssa3; long ssa4; long ssa5; long ssa6; long ssa7; long sss0; long sss1; long sss2; long sss3; long sss4; long sss5; long sss6; long sss7; }; # else /* CRAY2 */ /* The following structure defines the vector of words returned by the STKSTAT library routine. */ struct stk_stat { long now; /* Current total stack size. */ long maxc; /* Amount of contiguous space which would be required to satisfy the maximum stack demand to date. */ long high_water; /* Stack high-water mark. */ long overflows; /* Number of stack overflow ($STKOFEN) calls. */ long hits; /* Number of internal buffer hits. */ long extends; /* Number of block extensions. */ long stko_mallocs; /* Block allocations by $STKOFEN. */ long underflows; /* Number of stack underflow calls ($STKRETN). */ long stko_free; /* Number of deallocations by $STKRETN. */ long stkm_free; /* Number of deallocations by $STKMRET. */ long segments; /* Current number of stack segments. */ long maxs; /* Maximum number of stack segments so far. */ long pad_size; /* Stack pad size. */ long current_address; /* Current stack segment address. */ long current_size; /* Current stack segment size. This number is actually corrupted by STKSTAT to include the fifteen word trailer area. */ long initial_address; /* Address of initial segment. */ long initial_size; /* Size of initial segment. */ }; /* The following structure describes the data structure which trails any stack segment. I think that the description in 'asdef' is out of date. I only describe the parts that I am sure about. */ struct stk_trailer { long this_address; /* Address of this block. */ long this_size; /* Size of this block (does not include this trailer). */ long unknown2; long unknown3; long link; /* Address of trailer block of previous segment. */ long unknown5; long unknown6; long unknown7; long unknown8; long unknown9; long unknown10; long unknown11; long unknown12; long unknown13; long unknown14; }; # endif /* CRAY2 */ # endif /* not CRAY_STACK */ # ifdef CRAY2 /* Determine a "stack measure" for an arbitrary ADDRESS. I doubt that "lint" will like this much. */ static long i00afunc (long *address) { struct stk_stat status; struct stk_trailer *trailer; long *block, size; long result = 0; /* We want to iterate through all of the segments. The first step is to get the stack status structure. We could do this more quickly and more directly, perhaps, by referencing the $LM00 common block, but I know that this works. */ STKSTAT (&status); /* Set up the iteration. */ trailer = (struct stk_trailer *) (status.current_address + status.current_size - 15); /* There must be at least one stack segment. Therefore it is a fatal error if "trailer" is null. */ if (trailer == 0) abort (); /* Discard segments that do not contain our argument address. */ while (trailer != 0) { block = (long *) trailer->this_address; size = trailer->this_size; if (block == 0 || size == 0) abort (); trailer = (struct stk_trailer *) trailer->link; if ((block <= address) && (address < (block + size))) break; } /* Set the result to the offset in this segment and add the sizes of all predecessor segments. */ result = address - block; if (trailer == 0) { return result; } do { if (trailer->this_size <= 0) abort (); result += trailer->this_size; trailer = (struct stk_trailer *) trailer->link; } while (trailer != 0); /* We are done. Note that if you present a bogus address (one not in any segment), you will get a different number back, formed from subtracting the address of the first block. This is probably not what you want. */ return (result); } # else /* not CRAY2 */ /* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. Determine the number of the cell within the stack, given the address of the cell. The purpose of this routine is to linearize, in some sense, stack addresses for alloca. */ static long i00afunc (long address) { long stkl = 0; long size, pseg, this_segment, stack; long result = 0; struct stack_segment_linkage *ssptr; /* Register B67 contains the address of the end of the current stack segment. If you (as a subprogram) store your registers on the stack and find that you are past the contents of B67, you have overflowed the segment. B67 also points to the stack segment linkage control area, which is what we are really interested in. */ stkl = CRAY_STACKSEG_END (); ssptr = (struct stack_segment_linkage *) stkl; /* If one subtracts 'size' from the end of the segment, one has the address of the first word of the segment. If this is not the first segment, 'pseg' will be nonzero. */ pseg = ssptr->sspseg; size = ssptr->sssize; this_segment = stkl - size; /* It is possible that calling this routine itself caused a stack overflow. Discard stack segments which do not contain the target address. */ while (!(this_segment <= address && address <= stkl)) { # ifdef DEBUG_I00AFUNC fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); # endif if (pseg == 0) break; stkl = stkl - pseg; ssptr = (struct stack_segment_linkage *) stkl; size = ssptr->sssize; pseg = ssptr->sspseg; this_segment = stkl - size; } result = address - this_segment; /* If you subtract pseg from the current end of the stack, you get the address of the previous stack segment's end. This seems a little convoluted to me, but I'll bet you save a cycle somewhere. */ while (pseg != 0) { # ifdef DEBUG_I00AFUNC fprintf (stderr, "%011o %011o\n", pseg, size); # endif stkl = stkl - pseg; ssptr = (struct stack_segment_linkage *) stkl; size = ssptr->sssize; pseg = ssptr->sspseg; result += size; } return (result); } # endif /* not CRAY2 */ # endif /* CRAY */ # endif /* no alloca */ #endif /* not GCC 2 */ gnuastro-0.5/bootstrapped/lib/Makefile.in0000644000175000017500000046545613217217706015514 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: gnulib-tool --import --local-dir=gl --lib=libgnu --source-base=bootstrapped/lib --m4-base=bootstrapped/m4 --doc-base=bootstrapped/doc --tests-base=bootstrapped/tests --aux-dir=bootstrapped/build-aux --with-tests --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files argp error fdl func gendocs getline git-version-gen inttypes math mbstok_r nproc regex stdint strcase strtod 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@ 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@ @LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__append_1 = uniwidth/width.c subdir = bootstrapped/lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = am__libgnu_la_SOURCES_DIST = argp.h argp-ba.c argp-eexst.c \ argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c \ argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c \ argp-xinl.c c-ctype.h c-ctype.c dirname-lgpl.c basename-lgpl.c \ stripslash.c getprogname.h getprogname.c gettext.h \ hard-locale.c localcharset.h localcharset.c glthread/lock.h \ glthread/lock.c math.c mbchar.c mbschr.c mbspbrk.c mbsspn.c \ mbstok_r.c mbuiter.h mbuiter.c minmax.h nproc.c size_max.h \ strnlen1.h strnlen1.c glthread/threadlib.c unistd.c \ uniwidth/width.c wctype-h.c xsize.h xsize.c am__dirstamp = $(am__leading_dot)dirstamp @LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__objects_1 = \ @LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@ uniwidth/width.lo am_libgnu_la_OBJECTS = argp-ba.lo argp-eexst.lo argp-fmtstream.lo \ argp-fs-xinl.lo argp-help.lo argp-parse.lo argp-pin.lo \ argp-pv.lo argp-pvh.lo argp-xinl.lo c-ctype.lo dirname-lgpl.lo \ basename-lgpl.lo stripslash.lo getprogname.lo hard-locale.lo \ localcharset.lo glthread/lock.lo math.lo mbchar.lo mbschr.lo \ mbspbrk.lo mbsspn.lo mbstok_r.lo mbuiter.lo nproc.lo \ strnlen1.lo glthread/threadlib.lo unistd.lo $(am__objects_1) \ wctype-h.lo xsize.lo libgnu_la_OBJECTS = $(am_libgnu_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 = libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgnu_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)/bootstrapped/build-aux/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 = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) DIST_SOURCES = $(am__libgnu_la_SOURCES_DIST) \ $(EXTRA_libgnu_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 = $(noinst_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 \ $(top_srcdir)/bootstrapped/build-aux/depcomp alloca.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" pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.9.6 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = libgnu.la EXTRA_DIST = alloca.c alloca.in.h btowc.c dirname.h dosname.h \ errno.in.h error.c error.h float.c float.in.h itold.c \ $(top_srcdir)/bootstrapped/build-aux/gendocs.sh getdelim.c \ getline.c getopt-cdefs.in.h getopt-core.h getopt-ext.h \ getopt-pfx-core.h getopt-pfx-ext.h getopt.c getopt.in.h \ getopt1.c getopt_int.h \ $(top_srcdir)/bootstrapped/build-aux/git-version-gen \ hard-locale.h \ $(top_srcdir)/bootstrapped/build-aux/config.rpath intprops.h \ inttypes.in.h iswblank.c langinfo.in.h limits.in.h \ config.charset ref-add.sin ref-del.sin locale.in.h \ localeconv.c malloc.c malloc.c math.in.h mbchar.h mbrtowc.c \ mbsinit.c mbtowc-impl.h mbtowc.c memchr.c memchr.valgrind \ mempcpy.c msvc-inval.c msvc-inval.h msvc-nothrow.c \ msvc-nothrow.h nl_langinfo.c nproc.h rawmemchr.c \ rawmemchr.valgrind regcomp.c regex.c regex.h regex_internal.c \ regex_internal.h regexec.c sleep.c _Noreturn.h arg-nonnull.h \ c++defs.h warn-on-use.h stdalign.in.h stdbool.in.h stddef.in.h \ stdint.in.h stdio.in.h stdlib.in.h strcasecmp.c strncasecmp.c \ strchrnul.c strchrnul.valgrind streq.h strerror.c \ strerror-override.c strerror-override.h string.in.h \ strings.in.h strndup.c strnlen.c strtod.c strtok_r.c \ sys_types.in.h sysexits.in.h \ $(top_srcdir)/bootstrapped/build-aux/config.rpath unistd.in.h \ unitypes.in.h localcharset.h uniwidth.in.h uniwidth/cjk.h \ asnprintf.c float+.h printf-args.c printf-args.h \ printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h \ verify.h vsnprintf.c wchar.in.h wcrtomb.c wctype.in.h \ wcwidth.c BUILT_SOURCES = $(ALLOCA_H) configmake.h $(ERRNO_H) $(FLOAT_H) \ $(GETOPT_H) $(GETOPT_CDEFS_H) inttypes.h langinfo.h \ $(LIMITS_H) locale.h math.h $(STDALIGN_H) $(STDBOOL_H) \ $(STDDEF_H) $(STDINT_H) stdio.h stdlib.h string.h strings.h \ sys/types.h $(SYSEXITS_H) unistd.h $(LIBUNISTRING_UNITYPES_H) \ $(LIBUNISTRING_UNIWIDTH_H) wchar.h wctype.h SUFFIXES = .sed .sin MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t errno.h \ errno.h-t float.h float.h-t getopt.h getopt.h-t getopt-cdefs.h \ getopt-cdefs.h-t inttypes.h inttypes.h-t langinfo.h \ langinfo.h-t limits.h limits.h-t locale.h locale.h-t math.h \ math.h-t stdalign.h stdalign.h-t stdbool.h stdbool.h-t \ stddef.h stddef.h-t stdint.h stdint.h-t stdio.h stdio.h-t \ stdlib.h stdlib.h-t string.h string.h-t strings.h strings.h-t \ sys/types.h sys/types.h-t sysexits.h sysexits.h-t unistd.h \ unistd.h-t unitypes.h unitypes.h-t uniwidth.h uniwidth.h-t \ wchar.h wchar.h-t wctype.h wctype.h-t MOSTLYCLEANDIRS = CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \ ref-del.sed DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = libgnu_la_SOURCES = argp.h argp-ba.c argp-eexst.c argp-fmtstream.c \ argp-fmtstream.h argp-fs-xinl.c argp-help.c argp-namefrob.h \ argp-parse.c argp-pin.c argp-pv.c argp-pvh.c argp-xinl.c \ c-ctype.h c-ctype.c dirname-lgpl.c basename-lgpl.c \ stripslash.c getprogname.h getprogname.c gettext.h \ hard-locale.c localcharset.h localcharset.c glthread/lock.h \ glthread/lock.c math.c mbchar.c mbschr.c mbspbrk.c mbsspn.c \ mbstok_r.c mbuiter.h mbuiter.c minmax.h nproc.c size_max.h \ strnlen1.h strnlen1.c glthread/threadlib.c unistd.c \ $(am__append_1) wctype-h.c xsize.h xsize.c libgnu_la_LIBADD = $(gl_LTLIBOBJS) @LTALLOCA@ libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) @LTALLOCA@ EXTRA_libgnu_la_SOURCES = alloca.c btowc.c error.c float.c itold.c \ getdelim.c getline.c getopt.c getopt1.c iswblank.c \ localeconv.c malloc.c malloc.c mbrtowc.c mbsinit.c mbtowc.c \ memchr.c mempcpy.c msvc-inval.c msvc-nothrow.c nl_langinfo.c \ rawmemchr.c regcomp.c regex.c regex_internal.c regexec.c \ sleep.c strcasecmp.c strncasecmp.c strchrnul.c strerror.c \ strerror-override.c strndup.c strnlen.c strtod.c strtok_r.c \ asnprintf.c printf-args.c printf-parse.c vasnprintf.c \ vsnprintf.c wcrtomb.c wcwidth.c libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(LTLIBINTL) \ $(LTLIBTHREAD) # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) charset_alias = $(DESTDIR)$(libdir)/charset.alias charset_tmp = $(DESTDIR)$(libdir)/charset.tmp # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H = $(srcdir)/_Noreturn.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H = $(srcdir)/arg-nonnull.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H = $(srcdir)/c++defs.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H = $(srcdir)/warn-on-use.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .sed .sin .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnits bootstrapped/lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits bootstrapped/lib/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } glthread/$(am__dirstamp): @$(MKDIR_P) glthread @: > glthread/$(am__dirstamp) glthread/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) glthread/$(DEPDIR) @: > glthread/$(DEPDIR)/$(am__dirstamp) glthread/lock.lo: glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) glthread/threadlib.lo: glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) uniwidth/$(am__dirstamp): @$(MKDIR_P) uniwidth @: > uniwidth/$(am__dirstamp) uniwidth/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) uniwidth/$(DEPDIR) @: > uniwidth/$(DEPDIR)/$(am__dirstamp) uniwidth/width.lo: uniwidth/$(am__dirstamp) \ uniwidth/$(DEPDIR)/$(am__dirstamp) libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(EXTRA_libgnu_la_DEPENDENCIES) $(AM_V_CCLD)$(libgnu_la_LINK) $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f glthread/*.$(OBJEXT) -rm -f glthread/*.lo -rm -f uniwidth/*.$(OBJEXT) -rm -f uniwidth/*.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-ba.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-eexst.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-fmtstream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-fs-xinl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-help.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-parse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pvh.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-xinl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asnprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-ctype.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdelim.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getline.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getprogname.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hard-locale.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iswblank.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itold.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localeconv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbchar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrtowc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbschr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbspbrk.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsspn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbstok_r.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbtowc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbuiter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempcpy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-inval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-nothrow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nl_langinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nproc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-args.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-parse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawmemchr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regcomp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex_internal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regexec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasecmp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strchrnul.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror-override.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strncasecmp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtod.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtok_r.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unistd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasnprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vsnprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcrtomb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctype-h.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcwidth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsize.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/lock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/threadlib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/width.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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 -rm -rf glthread/.libs glthread/_libs -rm -rf uniwidth/.libs uniwidth/_libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) all-local installdirs: installdirs-recursive installdirs-am: 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: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) 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) -rm -f glthread/$(DEPDIR)/$(am__dirstamp) -rm -f glthread/$(am__dirstamp) -rm -f uniwidth/$(DEPDIR)/$(am__dirstamp) -rm -f uniwidth/$(am__dirstamp) -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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) glthread/$(DEPDIR) uniwidth/$(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-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-exec-local 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) glthread/$(DEPDIR) uniwidth/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-local .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ check check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-exec-local install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am uninstall-local .PRECIOUS: Makefile # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_ALLOCA_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_ALLOCA_H_TRUE@ cat $(srcdir)/alloca.in.h; \ @GL_GENERATE_ALLOCA_H_TRUE@ } > $@-t && \ @GL_GENERATE_ALLOCA_H_TRUE@ mv -f $@-t $@ @GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_FALSE@ rm -f $@ # Listed in the same order as the GNU makefile conventions, and # provided by autoconf 2.59c+ or 2.70. # The Automake-defined pkg* macros are appended, in the order # listed in the Automake 1.10a+ documentation. configmake.h: Makefile $(AM_V_GEN)rm -f $@-t && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ echo '#define PREFIX "$(prefix)"'; \ echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ echo '#define BINDIR "$(bindir)"'; \ echo '#define SBINDIR "$(sbindir)"'; \ echo '#define LIBEXECDIR "$(libexecdir)"'; \ echo '#define DATAROOTDIR "$(datarootdir)"'; \ echo '#define DATADIR "$(datadir)"'; \ echo '#define SYSCONFDIR "$(sysconfdir)"'; \ echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ echo '#define RUNSTATEDIR "$(runstatedir)"'; \ echo '#define INCLUDEDIR "$(includedir)"'; \ echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ echo '#define DOCDIR "$(docdir)"'; \ echo '#define INFODIR "$(infodir)"'; \ echo '#define HTMLDIR "$(htmldir)"'; \ echo '#define DVIDIR "$(dvidir)"'; \ echo '#define PDFDIR "$(pdfdir)"'; \ echo '#define PSDIR "$(psdir)"'; \ echo '#define LIBDIR "$(libdir)"'; \ echo '#define LISPDIR "$(lispdir)"'; \ echo '#define LOCALEDIR "$(localedir)"'; \ echo '#define MANDIR "$(mandir)"'; \ echo '#define MANEXT "$(manext)"'; \ echo '#define PKGDATADIR "$(pkgdatadir)"'; \ echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ echo '#define PKGLIBDIR "$(pkglibdir)"'; \ echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ } | sed '/""/d' > $@-t && \ mv -f $@-t $@ # We need the following in order to create when the system # doesn't have one that is POSIX compliant. @GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_ERRNO_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_ERRNO_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ < $(srcdir)/errno.in.h; \ @GL_GENERATE_ERRNO_H_TRUE@ } > $@-t && \ @GL_GENERATE_ERRNO_H_TRUE@ mv $@-t $@ @GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_FLOAT_H_TRUE@float.h: float.in.h $(top_builddir)/config.status @GL_GENERATE_FLOAT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_FLOAT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_FLOAT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ < $(srcdir)/float.in.h; \ @GL_GENERATE_FLOAT_H_TRUE@ } > $@-t && \ @GL_GENERATE_FLOAT_H_TRUE@ mv $@-t $@ @GL_GENERATE_FLOAT_H_FALSE@float.h: $(top_builddir)/config.status @GL_GENERATE_FLOAT_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. getopt.h: getopt.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ < $(srcdir)/getopt.in.h; \ } > $@-t && \ mv -f $@-t $@ getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ < $(srcdir)/getopt-cdefs.in.h; \ } > $@-t && \ mv -f $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \ -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \ -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/inttypes.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create an empty placeholder for # when the system doesn't have one. langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ -e 's/@''GNULIB_NL_LANGINFO''@/$(GNULIB_NL_LANGINFO)/g' \ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/langinfo.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that is compatible with GNU. @GL_GENERATE_LIMITS_H_TRUE@limits.h: limits.in.h $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_LIMITS_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_LIMITS_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ < $(srcdir)/limits.in.h; \ @GL_GENERATE_LIMITS_H_TRUE@ } > $@-t && \ @GL_GENERATE_LIMITS_H_TRUE@ mv $@-t $@ @GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_FALSE@ rm -f $@ # We need the following in order to install a simple file in $(libdir) # which is shared with other installed packages. We use a list of referencing # packages so that "make uninstall" will remove the file if and only if it # is not used by another installed package. # On systems with glibc-2.1 or newer, the file is redundant, therefore we # avoid installing it. all-local: charset.alias ref-add.sed ref-del.sed install-exec-local: install-exec-localcharset install-exec-localcharset: all-local if test $(GLIBC21) = no; then \ case '$(host_os)' in \ darwin[56]*) \ need_charset_alias=true ;; \ darwin* | cygwin* | mingw* | pw32* | cegcc*) \ need_charset_alias=false ;; \ *) \ need_charset_alias=true ;; \ esac ; \ else \ need_charset_alias=false ; \ fi ; \ if $$need_charset_alias; then \ $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ fi ; \ if test -f $(charset_alias); then \ sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ rm -f $(charset_tmp) ; \ else \ if $$need_charset_alias; then \ sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ rm -f $(charset_tmp) ; \ fi ; \ fi uninstall-local: uninstall-localcharset uninstall-localcharset: all-local if test -f $(charset_alias); then \ sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ if grep '^# Packages using this file: $$' $(charset_tmp) \ > /dev/null; then \ rm -f $(charset_alias); \ else \ $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ fi; \ rm -f $(charset_tmp); \ fi charset.alias: config.charset $(AM_V_GEN)rm -f t-$@ $@ && \ $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \ mv t-$@ $@ .sin.sed: $(AM_V_GEN)rm -f t-$@ $@ && \ sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \ mv t-$@ $@ # We need the following in order to create when the system # doesn't have one that provides all definitions. locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \ -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/locale.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \ -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \ -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \ -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \ -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \ -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \ -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \ -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \ -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \ -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \ -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \ -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \ -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \ -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \ -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \ -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \ -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \ -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \ -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \ -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \ -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \ -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \ -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \ -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \ -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \ -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \ -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \ -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \ -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \ -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \ -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \ -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \ -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \ -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \ -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \ -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \ -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \ -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \ -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \ -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \ -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \ -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \ -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \ -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \ < $(srcdir)/math.in.h | \ sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \ -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \ -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \ -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \ -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \ -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \ -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \ -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \ -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \ -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \ -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \ -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \ -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \ -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \ -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \ -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \ -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \ -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \ -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \ -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \ -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \ -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \ -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \ -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \ -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \ -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \ -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \ -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \ -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \ -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \ -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \ -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \ -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \ -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \ -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \ -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \ -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \ -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \ -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \ -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \ -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \ -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \ -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \ -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \ -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \ -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \ -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \ -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \ -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \ -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \ -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \ | \ sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ | \ sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works. @GL_GENERATE_STDALIGN_H_TRUE@stdalign.h: stdalign.in.h $(top_builddir)/config.status @GL_GENERATE_STDALIGN_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDALIGN_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_STDALIGN_H_TRUE@ cat $(srcdir)/stdalign.in.h; \ @GL_GENERATE_STDALIGN_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDALIGN_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDALIGN_H_FALSE@stdalign.h: $(top_builddir)/config.status @GL_GENERATE_STDALIGN_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works. @GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDBOOL_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_STDBOOL_H_TRUE@ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ @GL_GENERATE_STDBOOL_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDBOOL_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \ @GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status @GL_GENERATE_STDINT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDINT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_STDINT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ < $(srcdir)/stdint.in.h; \ @GL_GENERATE_STDINT_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDINT_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status @GL_GENERATE_STDINT_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ -e 's|@''GNULIB_FFS''@|$(GNULIB_FFS)|g' \ -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/strings.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_SYSEXITS_H_TRUE@sysexits.h: sysexits.in.h $(top_builddir)/config.status @GL_GENERATE_SYSEXITS_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_SYSEXITS_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_SYSEXITS_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ < $(srcdir)/sysexits.in.h; \ @GL_GENERATE_SYSEXITS_H_TRUE@ } > $@-t && \ @GL_GENERATE_SYSEXITS_H_TRUE@ mv -f $@-t $@ @GL_GENERATE_SYSEXITS_H_FALSE@sysexits.h: $(top_builddir)/config.status @GL_GENERATE_SYSEXITS_H_FALSE@ rm -f $@ # We need the following in order to create an empty placeholder for # when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_TRUNCATE''@|$(HAVE_TRUNCATE)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ unitypes.h: unitypes.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/unitypes.in.h; \ } > $@-t && \ mv -f $@-t $@ uniwidth.h: uniwidth.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/uniwidth.in.h; \ } > $@-t && \ mv -f $@-t $@ # We need the following in order to create when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/wctype.in.h; \ } > $@-t && \ mv $@-t $@ mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : # 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: gnuastro-0.5/bootstrapped/lib/Makefile.am0000644000175000017500000024761413217200033015456 00000000000000## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: gnulib-tool --import --local-dir=gl --lib=libgnu --source-base=bootstrapped/lib --m4-base=bootstrapped/m4 --doc-base=bootstrapped/doc --tests-base=bootstrapped/tests --aux-dir=bootstrapped/build-aux --with-tests --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files argp error fdl func gendocs getline git-version-gen inttypes math mbstok_r nproc regex stdint strcase strtod AUTOMAKE_OPTIONS = 1.9.6 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = noinst_LTLIBRARIES += libgnu.la libgnu_la_SOURCES = libgnu_la_LIBADD = $(gl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) libgnu_la_LDFLAGS += -no-undefined libgnu_la_LDFLAGS += $(LTLIBINTL) libgnu_la_LDFLAGS += $(LTLIBTHREAD) ## begin gnulib module absolute-header # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) ## end gnulib module absolute-header ## begin gnulib module alloca libgnu_la_LIBADD += @LTALLOCA@ libgnu_la_DEPENDENCIES += @LTALLOCA@ EXTRA_DIST += alloca.c EXTRA_libgnu_la_SOURCES += alloca.c ## end gnulib module alloca ## begin gnulib module alloca-opt BUILT_SOURCES += $(ALLOCA_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ALLOCA_H alloca.h: alloca.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/alloca.in.h; \ } > $@-t && \ mv -f $@-t $@ else alloca.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += alloca.h alloca.h-t EXTRA_DIST += alloca.in.h ## end gnulib module alloca-opt ## begin gnulib module argp libgnu_la_SOURCES += argp.h argp-ba.c argp-eexst.c argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c argp-xinl.c ## end gnulib module argp ## begin gnulib module btowc EXTRA_DIST += btowc.c EXTRA_libgnu_la_SOURCES += btowc.c ## end gnulib module btowc ## begin gnulib module c-ctype libgnu_la_SOURCES += c-ctype.h c-ctype.c ## end gnulib module c-ctype ## begin gnulib module configmake # Listed in the same order as the GNU makefile conventions, and # provided by autoconf 2.59c+ or 2.70. # The Automake-defined pkg* macros are appended, in the order # listed in the Automake 1.10a+ documentation. configmake.h: Makefile $(AM_V_GEN)rm -f $@-t && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ echo '#define PREFIX "$(prefix)"'; \ echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ echo '#define BINDIR "$(bindir)"'; \ echo '#define SBINDIR "$(sbindir)"'; \ echo '#define LIBEXECDIR "$(libexecdir)"'; \ echo '#define DATAROOTDIR "$(datarootdir)"'; \ echo '#define DATADIR "$(datadir)"'; \ echo '#define SYSCONFDIR "$(sysconfdir)"'; \ echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ echo '#define RUNSTATEDIR "$(runstatedir)"'; \ echo '#define INCLUDEDIR "$(includedir)"'; \ echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ echo '#define DOCDIR "$(docdir)"'; \ echo '#define INFODIR "$(infodir)"'; \ echo '#define HTMLDIR "$(htmldir)"'; \ echo '#define DVIDIR "$(dvidir)"'; \ echo '#define PDFDIR "$(pdfdir)"'; \ echo '#define PSDIR "$(psdir)"'; \ echo '#define LIBDIR "$(libdir)"'; \ echo '#define LISPDIR "$(lispdir)"'; \ echo '#define LOCALEDIR "$(localedir)"'; \ echo '#define MANDIR "$(mandir)"'; \ echo '#define MANEXT "$(manext)"'; \ echo '#define PKGDATADIR "$(pkgdatadir)"'; \ echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ echo '#define PKGLIBDIR "$(pkglibdir)"'; \ echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ } | sed '/""/d' > $@-t && \ mv -f $@-t $@ BUILT_SOURCES += configmake.h CLEANFILES += configmake.h configmake.h-t ## end gnulib module configmake ## begin gnulib module dirname-lgpl libgnu_la_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c EXTRA_DIST += dirname.h ## end gnulib module dirname-lgpl ## begin gnulib module dosname EXTRA_DIST += dosname.h ## end gnulib module dosname ## begin gnulib module errno BUILT_SOURCES += $(ERRNO_H) # We need the following in order to create when the system # doesn't have one that is POSIX compliant. if GL_GENERATE_ERRNO_H errno.h: errno.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ < $(srcdir)/errno.in.h; \ } > $@-t && \ mv $@-t $@ else errno.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += errno.h errno.h-t EXTRA_DIST += errno.in.h ## end gnulib module errno ## begin gnulib module error EXTRA_DIST += error.c error.h EXTRA_libgnu_la_SOURCES += error.c ## end gnulib module error ## begin gnulib module float BUILT_SOURCES += $(FLOAT_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_FLOAT_H float.h: float.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ < $(srcdir)/float.in.h; \ } > $@-t && \ mv $@-t $@ else float.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += float.h float.h-t EXTRA_DIST += float.c float.in.h itold.c EXTRA_libgnu_la_SOURCES += float.c itold.c ## end gnulib module float ## begin gnulib module gendocs EXTRA_DIST += $(top_srcdir)/bootstrapped/build-aux/gendocs.sh ## end gnulib module gendocs ## begin gnulib module getdelim EXTRA_DIST += getdelim.c EXTRA_libgnu_la_SOURCES += getdelim.c ## end gnulib module getdelim ## begin gnulib module getline EXTRA_DIST += getline.c EXTRA_libgnu_la_SOURCES += getline.c ## end gnulib module getline ## begin gnulib module getopt-posix BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. getopt.h: getopt.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ < $(srcdir)/getopt.in.h; \ } > $@-t && \ mv -f $@-t $@ getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ < $(srcdir)/getopt-cdefs.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t EXTRA_DIST += getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h getopt.c getopt.in.h getopt1.c getopt_int.h EXTRA_libgnu_la_SOURCES += getopt.c getopt1.c ## end gnulib module getopt-posix ## begin gnulib module getprogname libgnu_la_SOURCES += getprogname.h getprogname.c ## end gnulib module getprogname ## begin gnulib module gettext-h libgnu_la_SOURCES += gettext.h ## end gnulib module gettext-h ## begin gnulib module git-version-gen EXTRA_DIST += $(top_srcdir)/bootstrapped/build-aux/git-version-gen ## end gnulib module git-version-gen ## begin gnulib module hard-locale libgnu_la_SOURCES += hard-locale.c EXTRA_DIST += hard-locale.h ## end gnulib module hard-locale ## begin gnulib module havelib EXTRA_DIST += $(top_srcdir)/bootstrapped/build-aux/config.rpath ## end gnulib module havelib ## begin gnulib module intprops EXTRA_DIST += intprops.h ## end gnulib module intprops ## begin gnulib module inttypes-incomplete BUILT_SOURCES += inttypes.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \ -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \ -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/inttypes.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += inttypes.h inttypes.h-t EXTRA_DIST += inttypes.in.h ## end gnulib module inttypes-incomplete ## begin gnulib module iswblank EXTRA_DIST += iswblank.c EXTRA_libgnu_la_SOURCES += iswblank.c ## end gnulib module iswblank ## begin gnulib module langinfo BUILT_SOURCES += langinfo.h # We need the following in order to create an empty placeholder for # when the system doesn't have one. langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ -e 's/@''GNULIB_NL_LANGINFO''@/$(GNULIB_NL_LANGINFO)/g' \ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/langinfo.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += langinfo.h langinfo.h-t EXTRA_DIST += langinfo.in.h ## end gnulib module langinfo ## begin gnulib module limits-h BUILT_SOURCES += $(LIMITS_H) # We need the following in order to create when the system # doesn't have one that is compatible with GNU. if GL_GENERATE_LIMITS_H limits.h: limits.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ < $(srcdir)/limits.in.h; \ } > $@-t && \ mv $@-t $@ else limits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += limits.h limits.h-t EXTRA_DIST += limits.in.h ## end gnulib module limits-h ## begin gnulib module localcharset libgnu_la_SOURCES += localcharset.h localcharset.c # We need the following in order to install a simple file in $(libdir) # which is shared with other installed packages. We use a list of referencing # packages so that "make uninstall" will remove the file if and only if it # is not used by another installed package. # On systems with glibc-2.1 or newer, the file is redundant, therefore we # avoid installing it. all-local: charset.alias ref-add.sed ref-del.sed charset_alias = $(DESTDIR)$(libdir)/charset.alias charset_tmp = $(DESTDIR)$(libdir)/charset.tmp install-exec-local: install-exec-localcharset install-exec-localcharset: all-local if test $(GLIBC21) = no; then \ case '$(host_os)' in \ darwin[56]*) \ need_charset_alias=true ;; \ darwin* | cygwin* | mingw* | pw32* | cegcc*) \ need_charset_alias=false ;; \ *) \ need_charset_alias=true ;; \ esac ; \ else \ need_charset_alias=false ; \ fi ; \ if $$need_charset_alias; then \ $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ fi ; \ if test -f $(charset_alias); then \ sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ rm -f $(charset_tmp) ; \ else \ if $$need_charset_alias; then \ sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ rm -f $(charset_tmp) ; \ fi ; \ fi uninstall-local: uninstall-localcharset uninstall-localcharset: all-local if test -f $(charset_alias); then \ sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ if grep '^# Packages using this file: $$' $(charset_tmp) \ > /dev/null; then \ rm -f $(charset_alias); \ else \ $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ fi; \ rm -f $(charset_tmp); \ fi charset.alias: config.charset $(AM_V_GEN)rm -f t-$@ $@ && \ $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \ mv t-$@ $@ SUFFIXES += .sed .sin .sin.sed: $(AM_V_GEN)rm -f t-$@ $@ && \ sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \ mv t-$@ $@ CLEANFILES += charset.alias ref-add.sed ref-del.sed EXTRA_DIST += config.charset ref-add.sin ref-del.sin ## end gnulib module localcharset ## begin gnulib module locale BUILT_SOURCES += locale.h # We need the following in order to create when the system # doesn't have one that provides all definitions. locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \ -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/locale.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += locale.h locale.h-t EXTRA_DIST += locale.in.h ## end gnulib module locale ## begin gnulib module localeconv EXTRA_DIST += localeconv.c EXTRA_libgnu_la_SOURCES += localeconv.c ## end gnulib module localeconv ## begin gnulib module lock libgnu_la_SOURCES += glthread/lock.h glthread/lock.c ## end gnulib module lock ## begin gnulib module malloc-gnu EXTRA_DIST += malloc.c EXTRA_libgnu_la_SOURCES += malloc.c ## end gnulib module malloc-gnu ## begin gnulib module malloc-posix EXTRA_DIST += malloc.c EXTRA_libgnu_la_SOURCES += malloc.c ## end gnulib module malloc-posix ## begin gnulib module math BUILT_SOURCES += math.h libgnu_la_SOURCES += math.c # We need the following in order to create when the system # doesn't have one that works with the given compiler. math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \ -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \ -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \ -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \ -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \ -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \ -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \ -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \ -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \ -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \ -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \ -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \ -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \ -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \ -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \ -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \ -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \ -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \ -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \ -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \ -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \ -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \ -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \ -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \ -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \ -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \ -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \ -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \ -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \ -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \ -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \ -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \ -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \ -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \ -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \ -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \ -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \ -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \ -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \ -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \ -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \ -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \ -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \ -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \ < $(srcdir)/math.in.h | \ sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \ -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \ -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \ -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \ -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \ -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \ -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \ -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \ -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \ -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \ -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \ -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \ -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \ -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \ -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \ -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \ -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \ -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \ -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \ -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \ -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \ -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \ -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \ -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \ -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \ -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \ -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \ -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \ -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \ -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \ -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \ -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \ -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \ -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \ -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \ -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \ -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \ -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \ -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \ -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \ -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \ -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \ -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \ -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \ -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \ -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \ -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \ -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \ -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \ -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \ -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \ | \ sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ | \ sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += math.h math.h-t EXTRA_DIST += math.in.h ## end gnulib module math ## begin gnulib module mbchar libgnu_la_SOURCES += mbchar.c EXTRA_DIST += mbchar.h ## end gnulib module mbchar ## begin gnulib module mbrtowc EXTRA_DIST += mbrtowc.c EXTRA_libgnu_la_SOURCES += mbrtowc.c ## end gnulib module mbrtowc ## begin gnulib module mbschr libgnu_la_SOURCES += mbschr.c ## end gnulib module mbschr ## begin gnulib module mbsinit EXTRA_DIST += mbsinit.c EXTRA_libgnu_la_SOURCES += mbsinit.c ## end gnulib module mbsinit ## begin gnulib module mbspbrk libgnu_la_SOURCES += mbspbrk.c ## end gnulib module mbspbrk ## begin gnulib module mbsspn libgnu_la_SOURCES += mbsspn.c ## end gnulib module mbsspn ## begin gnulib module mbstok_r libgnu_la_SOURCES += mbstok_r.c ## end gnulib module mbstok_r ## begin gnulib module mbtowc EXTRA_DIST += mbtowc-impl.h mbtowc.c EXTRA_libgnu_la_SOURCES += mbtowc.c ## end gnulib module mbtowc ## begin gnulib module mbuiter libgnu_la_SOURCES += mbuiter.h mbuiter.c ## end gnulib module mbuiter ## begin gnulib module memchr EXTRA_DIST += memchr.c memchr.valgrind EXTRA_libgnu_la_SOURCES += memchr.c ## end gnulib module memchr ## begin gnulib module mempcpy EXTRA_DIST += mempcpy.c EXTRA_libgnu_la_SOURCES += mempcpy.c ## end gnulib module mempcpy ## begin gnulib module minmax libgnu_la_SOURCES += minmax.h ## end gnulib module minmax ## begin gnulib module msvc-inval EXTRA_DIST += msvc-inval.c msvc-inval.h EXTRA_libgnu_la_SOURCES += msvc-inval.c ## end gnulib module msvc-inval ## begin gnulib module msvc-nothrow EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h EXTRA_libgnu_la_SOURCES += msvc-nothrow.c ## end gnulib module msvc-nothrow ## begin gnulib module nl_langinfo EXTRA_DIST += nl_langinfo.c EXTRA_libgnu_la_SOURCES += nl_langinfo.c ## end gnulib module nl_langinfo ## begin gnulib module nproc libgnu_la_SOURCES += nproc.c EXTRA_DIST += nproc.h ## end gnulib module nproc ## begin gnulib module rawmemchr EXTRA_DIST += rawmemchr.c rawmemchr.valgrind EXTRA_libgnu_la_SOURCES += rawmemchr.c ## end gnulib module rawmemchr ## begin gnulib module regex EXTRA_DIST += regcomp.c regex.c regex.h regex_internal.c regex_internal.h regexec.c EXTRA_libgnu_la_SOURCES += regcomp.c regex.c regex_internal.c regexec.c ## end gnulib module regex ## begin gnulib module size_max libgnu_la_SOURCES += size_max.h ## end gnulib module size_max ## begin gnulib module sleep EXTRA_DIST += sleep.c EXTRA_libgnu_la_SOURCES += sleep.c ## end gnulib module sleep ## begin gnulib module snippet/_Noreturn # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H=$(srcdir)/_Noreturn.h EXTRA_DIST += _Noreturn.h ## end gnulib module snippet/_Noreturn ## begin gnulib module snippet/arg-nonnull # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H=$(srcdir)/arg-nonnull.h EXTRA_DIST += arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H=$(srcdir)/c++defs.h EXTRA_DIST += c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H=$(srcdir)/warn-on-use.h EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module stdalign BUILT_SOURCES += $(STDALIGN_H) # We need the following in order to create when the system # doesn't have one that works. if GL_GENERATE_STDALIGN_H stdalign.h: stdalign.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/stdalign.in.h; \ } > $@-t && \ mv $@-t $@ else stdalign.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdalign.h stdalign.h-t EXTRA_DIST += stdalign.in.h ## end gnulib module stdalign ## begin gnulib module stdbool BUILT_SOURCES += $(STDBOOL_H) # We need the following in order to create when the system # doesn't have one that works. if GL_GENERATE_STDBOOL_H stdbool.h: stdbool.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ } > $@-t && \ mv $@-t $@ else stdbool.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdbool.h stdbool.h-t EXTRA_DIST += stdbool.in.h ## end gnulib module stdbool ## begin gnulib module stddef BUILT_SOURCES += $(STDDEF_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ < $(srcdir)/stddef.in.h; \ } > $@-t && \ mv $@-t $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## begin gnulib module stdint BUILT_SOURCES += $(STDINT_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDINT_H stdint.h: stdint.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ < $(srcdir)/stdint.in.h; \ } > $@-t && \ mv $@-t $@ else stdint.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdint.h stdint.h-t EXTRA_DIST += stdint.in.h ## end gnulib module stdint ## begin gnulib module stdio BUILT_SOURCES += stdio.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += stdio.h stdio.h-t EXTRA_DIST += stdio.in.h ## end gnulib module stdio ## begin gnulib module stdlib BUILT_SOURCES += stdlib.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += stdlib.h stdlib.h-t EXTRA_DIST += stdlib.in.h ## end gnulib module stdlib ## begin gnulib module strcase EXTRA_DIST += strcasecmp.c strncasecmp.c EXTRA_libgnu_la_SOURCES += strcasecmp.c strncasecmp.c ## end gnulib module strcase ## begin gnulib module strchrnul EXTRA_DIST += strchrnul.c strchrnul.valgrind EXTRA_libgnu_la_SOURCES += strchrnul.c ## end gnulib module strchrnul ## begin gnulib module streq EXTRA_DIST += streq.h ## end gnulib module streq ## begin gnulib module strerror EXTRA_DIST += strerror.c EXTRA_libgnu_la_SOURCES += strerror.c ## end gnulib module strerror ## begin gnulib module strerror-override EXTRA_DIST += strerror-override.c strerror-override.h EXTRA_libgnu_la_SOURCES += strerror-override.c ## end gnulib module strerror-override ## begin gnulib module string BUILT_SOURCES += string.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += string.h string.h-t EXTRA_DIST += string.in.h ## end gnulib module string ## begin gnulib module strings BUILT_SOURCES += strings.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ -e 's|@''GNULIB_FFS''@|$(GNULIB_FFS)|g' \ -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/strings.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += strings.h strings.h-t EXTRA_DIST += strings.in.h ## end gnulib module strings ## begin gnulib module strndup EXTRA_DIST += strndup.c EXTRA_libgnu_la_SOURCES += strndup.c ## end gnulib module strndup ## begin gnulib module strnlen EXTRA_DIST += strnlen.c EXTRA_libgnu_la_SOURCES += strnlen.c ## end gnulib module strnlen ## begin gnulib module strnlen1 libgnu_la_SOURCES += strnlen1.h strnlen1.c ## end gnulib module strnlen1 ## begin gnulib module strtod EXTRA_DIST += strtod.c EXTRA_libgnu_la_SOURCES += strtod.c ## end gnulib module strtod ## begin gnulib module strtok_r EXTRA_DIST += strtok_r.c EXTRA_libgnu_la_SOURCES += strtok_r.c ## end gnulib module strtok_r ## begin gnulib module sys_types BUILT_SOURCES += sys/types.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/types.h sys/types.h-t EXTRA_DIST += sys_types.in.h ## end gnulib module sys_types ## begin gnulib module sysexits BUILT_SOURCES += $(SYSEXITS_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_SYSEXITS_H sysexits.h: sysexits.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \ < $(srcdir)/sysexits.in.h; \ } > $@-t && \ mv -f $@-t $@ else sysexits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += sysexits.h sysexits.h-t EXTRA_DIST += sysexits.in.h ## end gnulib module sysexits ## begin gnulib module threadlib libgnu_la_SOURCES += glthread/threadlib.c EXTRA_DIST += $(top_srcdir)/bootstrapped/build-aux/config.rpath ## end gnulib module threadlib ## begin gnulib module unistd BUILT_SOURCES += unistd.h libgnu_la_SOURCES += unistd.c # We need the following in order to create an empty placeholder for # when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_TRUNCATE''@|$(HAVE_TRUNCATE)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += unistd.h unistd.h-t EXTRA_DIST += unistd.in.h ## end gnulib module unistd ## begin gnulib module unitypes BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H) unitypes.h: unitypes.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/unitypes.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += unitypes.h unitypes.h-t EXTRA_DIST += unitypes.in.h ## end gnulib module unitypes ## begin gnulib module uniwidth/base BUILT_SOURCES += $(LIBUNISTRING_UNIWIDTH_H) uniwidth.h: uniwidth.in.h $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/uniwidth.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += uniwidth.h uniwidth.h-t EXTRA_DIST += localcharset.h uniwidth.in.h ## end gnulib module uniwidth/base ## begin gnulib module uniwidth/width if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH libgnu_la_SOURCES += uniwidth/width.c endif EXTRA_DIST += uniwidth/cjk.h ## end gnulib module uniwidth/width ## begin gnulib module vasnprintf EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h EXTRA_libgnu_la_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c ## end gnulib module vasnprintf ## begin gnulib module verify EXTRA_DIST += verify.h ## end gnulib module verify ## begin gnulib module vsnprintf EXTRA_DIST += vsnprintf.c EXTRA_libgnu_la_SOURCES += vsnprintf.c ## end gnulib module vsnprintf ## begin gnulib module wchar BUILT_SOURCES += wchar.h # We need the following in order to create when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += wchar.h wchar.h-t EXTRA_DIST += wchar.in.h ## end gnulib module wchar ## begin gnulib module wcrtomb EXTRA_DIST += wcrtomb.c EXTRA_libgnu_la_SOURCES += wcrtomb.c ## end gnulib module wcrtomb ## begin gnulib module wctype-h BUILT_SOURCES += wctype.h libgnu_la_SOURCES += wctype-h.c # We need the following in order to create when the system # doesn't have one that works with the given compiler. wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/wctype.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += wctype.h wctype.h-t EXTRA_DIST += wctype.in.h ## end gnulib module wctype-h ## begin gnulib module wcwidth EXTRA_DIST += wcwidth.c EXTRA_libgnu_la_SOURCES += wcwidth.c ## end gnulib module wcwidth ## begin gnulib module xsize libgnu_la_SOURCES += xsize.h xsize.c ## end gnulib module xsize mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : gnuastro-0.5/bootstrapped/lib/uniwidth/0000755000175000017500000000000013217220465015332 500000000000000gnuastro-0.5/bootstrapped/lib/uniwidth/cjk.h0000644000175000017500000000314613217200021016160 00000000000000/* Test for CJK encoding. Copyright (C) 2001-2002, 2005-2007, 2009-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2002. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "streq.h" static int is_cjk_encoding (const char *encoding) { if (0 /* Legacy Japanese encodings */ || STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0) /* Legacy Chinese encodings */ || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) || STREQ_OPT (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0) || STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0) || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0) /* Legacy Korean encodings */ || STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) || STREQ_OPT (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0) || STREQ_OPT (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0)) return 1; return 0; } gnuastro-0.5/bootstrapped/lib/uniwidth/width.c0000644000175000017500000006554113217200021016532 00000000000000/* Determine display width of Unicode character. Copyright (C) 2001-2002, 2006-2017 Free Software Foundation, Inc. Written by Bruno Haible , 2002. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include "uniwidth.h" #include "cjk.h" /* * Non-spacing attribute table. * Consists of: * - Non-spacing characters; generated from PropList.txt or * "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt" * - Format control characters; generated from * "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt" * - Zero width characters; generated from * "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt" */ static const unsigned char nonspacing_table_data[38*64] = { /* 0x0000-0x01ff */ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */ 0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */ /* 0x0200-0x03ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */ /* 0x0400-0x05ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */ 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */ 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */ 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */ /* 0x0600-0x07ff */ 0x3f, 0x00, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */ 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */ 0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */ 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */ 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */ /* 0x0800-0x09ff */ 0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */ 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */ 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x08c0-0x08ff */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */ 0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */ 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */ /* 0x0a00-0x0bff */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */ 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */ 0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */ 0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */ 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */ /* 0x0c00-0x0dff */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */ 0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */ 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */ 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */ 0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */ /* 0x0e00-0x0fff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */ 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */ 0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */ /* 0x1000-0x11ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */ 0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */ 0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */ /* 0x1200-0x13ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */ 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */ /* 0x1600-0x17ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */ 0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */ /* 0x1800-0x19ff */ 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */ 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */ /* 0x1a00-0x1bff */ 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */ 0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, /* 0x1a80-0x1abf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */ 0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */ 0x03, 0x00, 0x00, 0x00, 0x3c, 0x3b, 0x00, 0x00, /* 0x1b80-0x1bbf */ 0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */ /* 0x1c00-0x1dff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */ 0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x10, 0x03, /* 0x1cc0-0x1cff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, /* 0x1dc0-0x1dff */ /* 0x2000-0x21ff */ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */ 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x00, 0x00, /* 0x2040-0x207f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */ 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */ /* 0x2c00-0x2dff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */ /* 0x3000-0x31ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x3000-0x303f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */ /* 0xa600-0xa7ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf7, 0x3f, /* 0xa640-0xa67f */ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */ /* 0xa800-0xa9ff */ 0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */ 0x30, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, /* 0xa8c0-0xa8ff */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */ 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x13, /* 0xa980-0xa9bf */ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */ /* 0xaa00-0xabff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */ 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0xaa40-0xaa7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00, /* 0xaac0-0xaaff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */ 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */ /* 0xfa00-0xfbff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */ /* 0xfe00-0xffff */ 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, /* 0xfe00-0xfe3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */ /* 0x10000-0x101ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */ /* 0x10200-0x103ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10200-0x1023f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10240-0x1027f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10280-0x102bf */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, /* 0x102c0-0x102ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10300-0x1033f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, /* 0x10340-0x1037f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10380-0x103bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x103c0-0x103ff */ /* 0x10a00-0x10bff */ 0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */ 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */ /* 0x11000-0x111ff */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x11040-0x1107f */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */ 0x07, 0x00, 0x00, 0x00, 0x80, 0xef, 0x1f, 0x00, /* 0x11100-0x1113f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0x11140-0x1117f */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, /* 0x11180-0x111bf */ 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */ /* 0x11200-0x113ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xd3, 0x40, /* 0x11200-0x1123f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11240-0x1127f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11280-0x112bf */ 0x00, 0x00, 0x00, 0x80, 0xf8, 0x07, 0x00, 0x00, /* 0x112c0-0x112ff */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x11300-0x1133f */ 0x01, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x1f, 0x00, /* 0x11340-0x1137f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11380-0x113bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x113c0-0x113ff */ /* 0x11400-0x115ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11400-0x1143f */ 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11440-0x1147f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, /* 0x11480-0x114bf */ 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x114c0-0x114ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11500-0x1153f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11540-0x1157f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xb0, /* 0x11580-0x115bf */ 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, /* 0x115c0-0x115ff */ /* 0x11600-0x117ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xa7, /* 0x11600-0x1163f */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11640-0x1167f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbf, 0x00, /* 0x11680-0x116bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x116c0-0x116ff */ 0x00, 0x00, 0x00, 0xe0, 0xbc, 0x0f, 0x00, 0x00, /* 0x11700-0x1173f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11740-0x1177f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11780-0x117bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x117c0-0x117ff */ /* 0x11c00-0x11dff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3f, /* 0x11c00-0x11c3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c40-0x11c7f */ 0x00, 0x00, 0xfc, 0xff, 0xff, 0xfc, 0x6d, 0x00, /* 0x11c80-0x11cbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11cc0-0x11cff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d00-0x11d3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d40-0x11d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d80-0x11dbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11dc0-0x11dff */ /* 0x16a00-0x16bff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a00-0x16a3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a40-0x16a7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a80-0x16abf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, /* 0x16ac0-0x16aff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x16b00-0x16b3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b40-0x16b7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b80-0x16bbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16bc0-0x16bff */ /* 0x16e00-0x16fff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e00-0x16e3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e40-0x16e7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e80-0x16ebf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16ec0-0x16eff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f00-0x16f3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f40-0x16f7f */ 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f80-0x16fbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16fc0-0x16fff */ /* 0x1bc00-0x1bdff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc00-0x1bc3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc40-0x1bc7f */ 0x00, 0x00, 0x00, 0x60, 0x0f, 0x00, 0x00, 0x00, /* 0x1bc80-0x1bcbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bcc0-0x1bcff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd00-0x1bd3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd40-0x1bd7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd80-0x1bdbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bdc0-0x1bdff */ /* 0x1d000-0x1d1ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */ 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */ 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */ /* 0x1d200-0x1d3ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d3c0-0x1d3ff */ /* 0x1da00-0x1dbff */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf8, /* 0x1da00-0x1da3f */ 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x20, 0x00, /* 0x1da40-0x1da7f */ 0x10, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x00, 0x00, /* 0x1da80-0x1dabf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dac0-0x1daff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db00-0x1db3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db40-0x1db7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db80-0x1dbbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dbc0-0x1dbff */ /* 0x1e000-0x1e1ff */ 0x7f, 0xff, 0xff, 0xf9, 0xdb, 0x07, 0x00, 0x00, /* 0x1e000-0x1e03f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e040-0x1e07f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e080-0x1e0bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0c0-0x1e0ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e100-0x1e13f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e140-0x1e17f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e180-0x1e1bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e1c0-0x1e1ff */ /* 0x1e800-0x1e9ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e800-0x1e83f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e840-0x1e87f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e880-0x1e8bf */ 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8c0-0x1e8ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e900-0x1e93f */ 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e940-0x1e97f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e980-0x1e9bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x1e9c0-0x1e9ff */ }; static const signed char nonspacing_table_ind[248] = { 0, 1, 2, 3, 4, 5, 6, 7, /* 0x0000-0x0fff */ 8, 9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */ 14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */ 16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */ -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */ -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */ 22, 23, -1, -1, -1, 24, -1, -1, /* 0x10000-0x10fff */ 25, 26, 27, 28, -1, -1, 29, -1, /* 0x11000-0x11fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */ -1, -1, -1, -1, -1, 30, -1, 31, /* 0x16000-0x16fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */ -1, -1, -1, -1, -1, -1, 32, -1, /* 0x1b000-0x1bfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */ 33, 34, -1, -1, -1, 35, -1, -1, /* 0x1d000-0x1dfff */ 36, -1, -1, -1, 37, -1, -1, -1 /* 0x1e000-0x1efff */ }; /* Determine number of column positions required for UC. */ int uc_width (ucs4_t uc, const char *encoding) { /* Test for non-spacing or control character. */ if ((uc >> 9) < 248) { int ind = nonspacing_table_ind[uc >> 9]; if (ind >= 0) if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1) { if (uc > 0 && uc < 0xa0) return -1; else return 0; } } else if ((uc >> 9) == (0xe0000 >> 9)) { if (uc >= 0xe0100) { if (uc <= 0xe01ef) return 0; } else { if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001) return 0; } } /* Test for double-width character. * Generated from "grep '^[^;]\{4,5\};[WF]' EastAsianWidth.txt" * and "grep '^[^;]\{4,5\};[^WF]' EastAsianWidth.txt" */ if (uc >= 0x1100 && ((uc < 0x1160) /* Hangul Jamo */ || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */ || (uc >= 0x2e80 && uc < 0xa4d0 /* CJK ... Yi */ && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00)) || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */ || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */ || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */ || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */ || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */ || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */ || (uc >= 0x20000 && uc <= 0x2ffff) /* Supplementary Ideographic Plane */ || (uc >= 0x30000 && uc <= 0x3ffff) /* Tertiary Ideographic Plane */ ) ) return 2; /* In ancient CJK encodings, Cyrillic and most other characters are double-width as well. */ if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9 && is_cjk_encoding (encoding)) return 2; return 1; } gnuastro-0.5/bootstrapped/lib/glthread/0000755000175000017500000000000013217220465015271 500000000000000gnuastro-0.5/bootstrapped/lib/glthread/threadlib.c0000644000175000017500000000353713217200021017305 00000000000000/* Multithreading primitives. Copyright (C) 2005-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Bruno Haible , 2005. */ #include /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include # include # if PTHREAD_IN_USE_DETECTION_HARD /* The function to be executed by a dummy thread. */ static void * dummy_thread_func (void *arg) { return arg; } int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_t thread; if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) /* Thread creation failed. */ result = 0; else { /* Thread creation works. */ void *retval; if (pthread_join (thread, &retval) != 0) abort (); result = 1; } tested = 1; } return result; } # endif #endif /* ========================================================================= */ /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; gnuastro-0.5/bootstrapped/lib/glthread/lock.c0000644000175000017500000007566013217200021016305 00000000000000/* Locking in multithreaded situations. Copyright (C) 2005-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Bruno Haible , 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ #include #include "glthread/lock.h" /* ========================================================================= */ #if USE_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # ifdef PTHREAD_RWLOCK_INITIALIZER # if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock) { pthread_rwlockattr_t attributes; int err; err = pthread_rwlockattr_init (&attributes); if (err != 0) return err; /* Note: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP is the only value that causes the writer to be preferred. PTHREAD_RWLOCK_PREFER_WRITER_NP does not do this; see http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html */ err = pthread_rwlockattr_setkind_np (&attributes, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); if (err == 0) err = pthread_rwlock_init(lock, &attributes); /* pthread_rwlockattr_destroy always returns 0. It cannot influence the return value. */ pthread_rwlockattr_destroy (&attributes); return err; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_rwlock_init (&lock->rwlock, NULL); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_rdlock (&lock->rwlock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_wrlock (&lock->rwlock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_rwlock_unlock (&lock->rwlock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_rwlock_destroy (&lock->rwlock); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_init (&lock->lock, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_readers, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_writers, NULL); if (err != 0) return err; lock->waiting_writers_count = 0; lock->runcount = 0; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ err = pthread_cond_wait (&lock->waiting_readers, &lock->lock); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } lock->runcount++; return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; err = pthread_cond_wait (&lock->waiting_writers, &lock->lock); if (err != 0) { lock->waiting_writers_count--; pthread_mutex_unlock (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ err = pthread_cond_signal (&lock->waiting_writers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } else { /* Wake up all waiting readers. */ err = pthread_cond_broadcast (&lock->waiting_readers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } } return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_destroy (&lock->lock); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_readers); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_writers); if (err != 0) return err; return 0; } # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (lock, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; return 0; } # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (&lock->recmutex, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_recursive_lock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_mutex_lock (&lock->recmutex); } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_mutex_unlock (&lock->recmutex); } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_mutex_destroy (&lock->recmutex); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = pthread_mutex_init (&lock->mutex, NULL); if (err != 0) return err; lock->owner = (pthread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { pthread_t self = pthread_self (); if (lock->owner != self) { int err; err = pthread_mutex_lock (&lock->mutex); if (err != 0) return err; lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } return 0; } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != pthread_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (pthread_t) 0; return pthread_mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (pthread_t) 0) return EBUSY; return pthread_mutex_destroy (&lock->mutex); } # endif /* -------------------------- gl_once_t datatype -------------------------- */ static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT; int glthread_once_singlethreaded (pthread_once_t *once_control) { /* We don't know whether pthread_once_t is an integer type, a floating-point type, a pointer type, or a structure type. */ char *firstbyte = (char *)once_control; if (*firstbyte == *(const char *)&fresh_once) { /* First time use of once_control. Invert the first byte. */ *firstbyte = ~ *(const char *)&fresh_once; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if !HAVE_PTH_RWLOCK_ACQUIRE_PREFER_WRITER int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { if (!pth_mutex_init (&lock->lock)) return errno; if (!pth_cond_init (&lock->waiting_readers)) return errno; if (!pth_cond_init (&lock->waiting_writers)) return errno; lock->waiting_writers_count = 0; lock->runcount = 0; lock->initialized = 1; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) glthread_rwlock_init_multithreaded (lock); if (!pth_mutex_acquire (&lock->lock, 0, NULL)) return errno; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ if (!pth_cond_await (&lock->waiting_readers, &lock->lock, NULL)) { int err = errno; pth_mutex_release (&lock->lock); return err; } } lock->runcount++; return (!pth_mutex_release (&lock->lock) ? errno : 0); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) glthread_rwlock_init_multithreaded (lock); if (!pth_mutex_acquire (&lock->lock, 0, NULL)) return errno; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; if (!pth_cond_await (&lock->waiting_writers, &lock->lock, NULL)) { int err = errno; lock->waiting_writers_count--; pth_mutex_release (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return (!pth_mutex_release (&lock->lock) ? errno : 0); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { int err; if (!lock->initialized) return EINVAL; if (!pth_mutex_acquire (&lock->lock, 0, NULL)) return errno; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { pth_mutex_release (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { pth_mutex_release (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ if (!pth_cond_notify (&lock->waiting_writers, FALSE)) { int err = errno; pth_mutex_release (&lock->lock); return err; } } else { /* Wake up all waiting readers. */ if (!pth_cond_notify (&lock->waiting_readers, TRUE)) { int err = errno; pth_mutex_release (&lock->lock); return err; } } } return (!pth_mutex_release (&lock->lock) ? errno : 0); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { lock->initialized = 0; return 0; } # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* -------------------------- gl_once_t datatype -------------------------- */ static void glthread_once_call (void *arg) { void (**gl_once_temp_addr) (void) = (void (**) (void)) arg; void (*initfunction) (void) = *gl_once_temp_addr; initfunction (); } int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)) { void (*temp) (void) = initfunction; return (!pth_once (once_control, glthread_once_call, &temp) ? errno : 0); } int glthread_once_singlethreaded (pth_once_t *once_control) { /* We know that pth_once_t is an integer type. */ if (*once_control == PTH_ONCE_INIT) { /* First time use of once_control. Invert the marker. */ *once_control = ~ PTH_ONCE_INIT; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* --------------------- gl_recursive_lock_t datatype --------------------- */ int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = mutex_init (&lock->mutex, USYNC_THREAD, NULL); if (err != 0) return err; lock->owner = (thread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { thread_t self = thr_self (); if (lock->owner != self) { int err; err = mutex_lock (&lock->mutex); if (err != 0) return err; lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } return 0; } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != thr_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (thread_t) 0; return mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (thread_t) 0) return EBUSY; return mutex_destroy (&lock->mutex); } /* -------------------------- gl_once_t datatype -------------------------- */ int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)) { if (!once_control->inited) { int err; /* Use the mutex to guarantee that if another thread is already calling the initfunction, this thread waits until it's finished. */ err = mutex_lock (&once_control->mutex); if (err != 0) return err; if (!once_control->inited) { once_control->inited = 1; initfunction (); } return mutex_unlock (&once_control->mutex); } else return 0; } int glthread_once_singlethreaded (gl_once_t *once_control) { /* We know that gl_once_t contains an integer type. */ if (!once_control->inited) { /* First time use of once_control. Invert the marker. */ once_control->inited = ~ 0; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ void glthread_lock_init_func (gl_lock_t *lock) { InitializeCriticalSection (&lock->lock); lock->guard.done = 1; } int glthread_lock_lock_func (gl_lock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_lock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); return 0; } int glthread_lock_unlock_func (gl_lock_t *lock) { if (!lock->guard.done) return EINVAL; LeaveCriticalSection (&lock->lock); return 0; } int glthread_lock_destroy_func (gl_lock_t *lock) { if (!lock->guard.done) return EINVAL; DeleteCriticalSection (&lock->lock); lock->guard.done = 0; return 0; } /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* In this file, the waitqueues are implemented as circular arrays. */ #define gl_waitqueue_t gl_carray_waitqueue_t static void gl_waitqueue_init (gl_waitqueue_t *wq) { wq->array = NULL; wq->count = 0; wq->alloc = 0; wq->offset = 0; } /* Enqueues the current thread, represented by an event, in a wait queue. Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ static HANDLE gl_waitqueue_add (gl_waitqueue_t *wq) { HANDLE event; unsigned int index; if (wq->count == wq->alloc) { unsigned int new_alloc = 2 * wq->alloc + 1; HANDLE *new_array = (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); if (new_array == NULL) /* No more memory. */ return INVALID_HANDLE_VALUE; /* Now is a good opportunity to rotate the array so that its contents starts at offset 0. */ if (wq->offset > 0) { unsigned int old_count = wq->count; unsigned int old_alloc = wq->alloc; unsigned int old_offset = wq->offset; unsigned int i; if (old_offset + old_count > old_alloc) { unsigned int limit = old_offset + old_count - old_alloc; for (i = 0; i < limit; i++) new_array[old_alloc + i] = new_array[i]; } for (i = 0; i < old_count; i++) new_array[i] = new_array[old_offset + i]; wq->offset = 0; } wq->array = new_array; wq->alloc = new_alloc; } /* Whether the created event is a manual-reset one or an auto-reset one, does not matter, since we will wait on it only once. */ event = CreateEvent (NULL, TRUE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) /* No way to allocate an event. */ return INVALID_HANDLE_VALUE; index = wq->offset + wq->count; if (index >= wq->alloc) index -= wq->alloc; wq->array[index] = event; wq->count++; return event; } /* Notifies the first thread from a wait queue and dequeues it. */ static void gl_waitqueue_notify_first (gl_waitqueue_t *wq) { SetEvent (wq->array[wq->offset + 0]); wq->offset++; wq->count--; if (wq->count == 0 || wq->offset == wq->alloc) wq->offset = 0; } /* Notifies all threads from a wait queue and dequeues them all. */ static void gl_waitqueue_notify_all (gl_waitqueue_t *wq) { unsigned int i; for (i = 0; i < wq->count; i++) { unsigned int index = wq->offset + i; if (index >= wq->alloc) index -= wq->alloc; SetEvent (wq->array[index]); } wq->count = 0; wq->offset = 0; } void glthread_rwlock_init_func (gl_rwlock_t *lock) { InitializeCriticalSection (&lock->lock); gl_waitqueue_init (&lock->waiting_readers); gl_waitqueue_init (&lock->waiting_writers); lock->runcount = 0; lock->guard.done = 1; } int glthread_rwlock_rdlock_func (gl_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_rwlock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ HANDLE event = gl_waitqueue_add (&lock->waiting_readers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_readers, incremented lock->runcount. */ if (!(lock->runcount > 0)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount + 1 > 0)); } } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glthread_rwlock_wrlock_func (gl_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_rwlock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ HANDLE event = gl_waitqueue_add (&lock->waiting_writers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_writers, set lock->runcount = -1. */ if (!(lock->runcount == -1)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount == 0)); } } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glthread_rwlock_unlock_func (gl_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; EnterCriticalSection (&lock->lock); if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) abort (); lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { LeaveCriticalSection (&lock->lock); return EPERM; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers.count > 0) { /* Wake up one of the waiting writers. */ lock->runcount--; gl_waitqueue_notify_first (&lock->waiting_writers); } else { /* Wake up all waiting readers. */ lock->runcount += lock->waiting_readers.count; gl_waitqueue_notify_all (&lock->waiting_readers); } } LeaveCriticalSection (&lock->lock); return 0; } int glthread_rwlock_destroy_func (gl_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; if (lock->runcount != 0) return EBUSY; DeleteCriticalSection (&lock->lock); if (lock->waiting_readers.array != NULL) free (lock->waiting_readers.array); if (lock->waiting_writers.array != NULL) free (lock->waiting_writers.array); lock->guard.done = 0; return 0; } /* --------------------- gl_recursive_lock_t datatype --------------------- */ void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock) { lock->owner = 0; lock->depth = 0; InitializeCriticalSection (&lock->lock); lock->guard.done = 1; } int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_recursive_lock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } { DWORD self = GetCurrentThreadId (); if (lock->owner != self) { EnterCriticalSection (&lock->lock); lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } } return 0; } int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock) { if (lock->owner != GetCurrentThreadId ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = 0; LeaveCriticalSection (&lock->lock); } return 0; } int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock) { if (lock->owner != 0) return EBUSY; DeleteCriticalSection (&lock->lock); lock->guard.done = 0; return 0; } /* -------------------------- gl_once_t datatype -------------------------- */ void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)) { if (once_control->inited <= 0) { if (InterlockedIncrement (&once_control->started) == 0) { /* This thread is the first one to come to this once_control. */ InitializeCriticalSection (&once_control->lock); EnterCriticalSection (&once_control->lock); once_control->inited = 0; initfunction (); once_control->inited = 1; LeaveCriticalSection (&once_control->lock); } else { /* Undo last operation. */ InterlockedDecrement (&once_control->started); /* Some other thread has already started the initialization. Yield the CPU while waiting for the other thread to finish initializing and taking the lock. */ while (once_control->inited < 0) Sleep (0); if (once_control->inited <= 0) { /* Take the lock. This blocks until the other thread has finished calling the initfunction. */ EnterCriticalSection (&once_control->lock); LeaveCriticalSection (&once_control->lock); if (!(once_control->inited > 0)) abort (); } } } } #endif /* ========================================================================= */ gnuastro-0.5/bootstrapped/lib/glthread/lock.h0000644000175000017500000011346013217200021016301 00000000000000/* Locking in multithreaded situations. Copyright (C) 2005-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . */ /* Written by Bruno Haible , 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ /* This file contains locking primitives for use with a given thread library. It does not contain primitives for creating threads or for other synchronization primitives. Normal (non-recursive) locks: Type: gl_lock_t Declaration: gl_lock_define(extern, name) Initializer: gl_lock_define_initialized(, name) Initialization: gl_lock_init (name); Taking the lock: gl_lock_lock (name); Releasing the lock: gl_lock_unlock (name); De-initialization: gl_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_lock_init (&name); Taking the lock: err = glthread_lock_lock (&name); Releasing the lock: err = glthread_lock_unlock (&name); De-initialization: err = glthread_lock_destroy (&name); Read-Write (non-recursive) locks: Type: gl_rwlock_t Declaration: gl_rwlock_define(extern, name) Initializer: gl_rwlock_define_initialized(, name) Initialization: gl_rwlock_init (name); Taking the lock: gl_rwlock_rdlock (name); gl_rwlock_wrlock (name); Releasing the lock: gl_rwlock_unlock (name); De-initialization: gl_rwlock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_rwlock_init (&name); Taking the lock: err = glthread_rwlock_rdlock (&name); err = glthread_rwlock_wrlock (&name); Releasing the lock: err = glthread_rwlock_unlock (&name); De-initialization: err = glthread_rwlock_destroy (&name); Recursive locks: Type: gl_recursive_lock_t Declaration: gl_recursive_lock_define(extern, name) Initializer: gl_recursive_lock_define_initialized(, name) Initialization: gl_recursive_lock_init (name); Taking the lock: gl_recursive_lock_lock (name); Releasing the lock: gl_recursive_lock_unlock (name); De-initialization: gl_recursive_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_recursive_lock_init (&name); Taking the lock: err = glthread_recursive_lock_lock (&name); Releasing the lock: err = glthread_recursive_lock_unlock (&name); De-initialization: err = glthread_recursive_lock_destroy (&name); Once-only execution: Type: gl_once_t Initializer: gl_once_define(extern, name) Execution: gl_once (name, initfunction); Equivalent functions with control of error handling: Execution: err = glthread_once (&name, initfunction); */ #ifndef _LOCK_H #define _LOCK_H #include #include /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # pragma weak pthread_mutex_init # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock # pragma weak pthread_mutex_destroy # pragma weak pthread_rwlock_init # pragma weak pthread_rwlock_rdlock # pragma weak pthread_rwlock_wrlock # pragma weak pthread_rwlock_unlock # pragma weak pthread_rwlock_destroy # pragma weak pthread_once # pragma weak pthread_cond_init # pragma weak pthread_cond_wait # pragma weak pthread_cond_signal # pragma weak pthread_cond_broadcast # pragma weak pthread_cond_destroy # pragma weak pthread_mutexattr_init # pragma weak pthread_mutexattr_settype # pragma weak pthread_mutexattr_destroy # pragma weak pthread_rwlockattr_init # if __GNU_LIBRARY__ > 1 # pragma weak pthread_rwlockattr_setkind_np # endif # pragma weak pthread_rwlockattr_destroy # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD # pragma weak pthread_cancel # define pthread_in_use() (pthread_cancel != NULL) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTHREAD_MUTEX_INITIALIZER # define glthread_lock_init(LOCK) \ (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0) # define glthread_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # ifdef PTHREAD_RWLOCK_INITIALIZER typedef pthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; # if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) # else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ # define gl_rwlock_initializer \ PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0) extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock); # endif # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0) # else typedef struct { int initialized; pthread_mutex_t guard; /* protects the initialization */ pthread_rwlock_t rwlock; /* read-write lock */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { 0, PTHREAD_MUTEX_INITIALIZER } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif # else typedef struct { pthread_mutex_t lock; /* protects the remaining fields */ pthread_cond_t waiting_readers; /* waiting readers */ pthread_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP typedef pthread_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; # ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER # else # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP # endif # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); # else typedef struct { pthread_mutex_t recmutex; /* recursive mutex */ pthread_mutex_t guard; /* protects the initialization */ int initialized; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif # else /* Old versions of POSIX threads on Solaris did not have recursive locks. We have to implement them ourselves. */ typedef struct { pthread_mutex_t mutex; pthread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif /* -------------------------- gl_once_t datatype -------------------------- */ typedef pthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_singlethreaded (pthread_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ # include # ifdef __cplusplus extern "C" { # endif # if USE_PTH_THREADS_WEAK /* Use weak references to the GNU Pth threads library. */ # pragma weak pth_mutex_init # pragma weak pth_mutex_acquire # pragma weak pth_mutex_release # pragma weak pth_rwlock_init # pragma weak pth_rwlock_acquire # pragma weak pth_rwlock_release # pragma weak pth_once # pragma weak pth_cancel # define pth_in_use() (pth_cancel != NULL) # else # define pth_in_use() 1 # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pth_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTH_MUTEX_INIT # define glthread_lock_init(LOCK) \ (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) # define glthread_lock_lock(LOCK) \ (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) # define glthread_lock_unlock(LOCK) \ (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) # define glthread_lock_destroy(LOCK) \ ((void)(LOCK), 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* Pth pth_rwlock_acquire always prefers readers. No autoconf test so far. */ # if HAVE_PTH_RWLOCK_ACQUIRE_PREFER_WRITER typedef pth_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ PTH_RWLOCK_INIT # define glthread_rwlock_init(LOCK) \ (pth_in_use () && !pth_rwlock_init (LOCK) ? errno : 0) # define glthread_rwlock_rdlock(LOCK) \ (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RD, 0, NULL) ? errno : 0) # define glthread_rwlock_wrlock(LOCK) \ (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RW, 0, NULL) ? errno : 0) # define glthread_rwlock_unlock(LOCK) \ (pth_in_use () && !pth_rwlock_release (LOCK) ? errno : 0) # define glthread_rwlock_destroy(LOCK) \ ((void)(LOCK), 0) # else typedef struct { int initialized; pth_mutex_t lock; /* protects the remaining fields */ pth_cond_t waiting_readers; /* waiting readers */ pth_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { 0 } # define glthread_rwlock_init(LOCK) \ (pth_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pth_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pth_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pth_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pth_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* In Pth, mutexes are recursive by default. */ typedef pth_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ PTH_MUTEX_INIT # define glthread_recursive_lock_init(LOCK) \ (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) # define glthread_recursive_lock_lock(LOCK) \ (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) # define glthread_recursive_lock_destroy(LOCK) \ ((void)(LOCK), 0) /* -------------------------- gl_once_t datatype -------------------------- */ typedef pth_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pth_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)); extern int glthread_once_singlethreaded (pth_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include # include # ifdef __cplusplus extern "C" { # endif # if USE_SOLARIS_THREADS_WEAK /* Use weak references to the old Solaris threads library. */ # pragma weak mutex_init # pragma weak mutex_lock # pragma weak mutex_unlock # pragma weak mutex_destroy # pragma weak rwlock_init # pragma weak rw_rdlock # pragma weak rw_wrlock # pragma weak rw_unlock # pragma weak rwlock_destroy # pragma weak thr_self # pragma weak thr_suspend # define thread_in_use() (thr_suspend != NULL) # else # define thread_in_use() 1 # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ DEFAULTMUTEX # define glthread_lock_init(LOCK) \ (thread_in_use () ? mutex_init (LOCK, USYNC_THREAD, NULL) : 0) # define glthread_lock_lock(LOCK) \ (thread_in_use () ? mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (thread_in_use () ? mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (thread_in_use () ? mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ DEFAULTRWLOCK # define glthread_rwlock_init(LOCK) \ (thread_in_use () ? rwlock_init (LOCK, USYNC_THREAD, NULL) : 0) # define glthread_rwlock_rdlock(LOCK) \ (thread_in_use () ? rw_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (thread_in_use () ? rw_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (thread_in_use () ? rw_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (thread_in_use () ? rwlock_destroy (LOCK) : 0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* Old Solaris threads did not have recursive locks. We have to implement them ourselves. */ typedef struct { mutex_t mutex; thread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { DEFAULTMUTEX, (thread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (thread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (thread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (thread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (thread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef struct { volatile int inited; mutex_t mutex; } gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX }; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (thread_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)); extern int glthread_once_singlethreaded (gl_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include # ifdef __cplusplus extern "C" { # endif /* We can use CRITICAL_SECTION directly, rather than the native Windows Event, Mutex, Semaphore types, because - we need only to synchronize inside a single process (address space), not inter-process locking, - we don't need to support trylock operations. (TryEnterCriticalSection does not work on Windows 95/98/ME. Packages that need trylock usually define their own mutex type.) */ /* There is no way to statically initialize a CRITICAL_SECTION. It needs to be done lazily, once only. For this we need spinlocks. */ typedef struct { volatile int done; volatile long started; } gl_spinlock_t; /* -------------------------- gl_lock_t datatype -------------------------- */ typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; } gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME = gl_lock_initializer; # define gl_lock_initializer \ { { 0, -1 } } # define glthread_lock_init(LOCK) \ (glthread_lock_init_func (LOCK), 0) # define glthread_lock_lock(LOCK) \ glthread_lock_lock_func (LOCK) # define glthread_lock_unlock(LOCK) \ glthread_lock_unlock_func (LOCK) # define glthread_lock_destroy(LOCK) \ glthread_lock_destroy_func (LOCK) extern void glthread_lock_init_func (gl_lock_t *lock); extern int glthread_lock_lock_func (gl_lock_t *lock); extern int glthread_lock_unlock_func (gl_lock_t *lock); extern int glthread_lock_destroy_func (gl_lock_t *lock); /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* It is impossible to implement read-write locks using plain locks, without introducing an extra thread dedicated to managing read-write locks. Therefore here we need to use the low-level Event type. */ typedef struct { HANDLE *array; /* array of waiting threads, each represented by an event */ unsigned int count; /* number of waiting threads */ unsigned int alloc; /* length of allocated array */ unsigned int offset; /* index of first waiting thread in array */ } gl_carray_waitqueue_t; typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ gl_carray_waitqueue_t waiting_readers; /* waiting readers */ gl_carray_waitqueue_t waiting_writers; /* waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { { 0, -1 } } # define glthread_rwlock_init(LOCK) \ (glthread_rwlock_init_func (LOCK), 0) # define glthread_rwlock_rdlock(LOCK) \ glthread_rwlock_rdlock_func (LOCK) # define glthread_rwlock_wrlock(LOCK) \ glthread_rwlock_wrlock_func (LOCK) # define glthread_rwlock_unlock(LOCK) \ glthread_rwlock_unlock_func (LOCK) # define glthread_rwlock_destroy(LOCK) \ glthread_rwlock_destroy_func (LOCK) extern void glthread_rwlock_init_func (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_func (gl_rwlock_t *lock); /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* The native Windows documentation says that CRITICAL_SECTION already implements a recursive lock. But we need not rely on it: It's easy to implement a recursive lock without this assumption. */ typedef struct { gl_spinlock_t guard; /* protects the initialization */ DWORD owner; unsigned long depth; CRITICAL_SECTION lock; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { { 0, -1 }, 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (glthread_recursive_lock_init_func (LOCK), 0) # define glthread_recursive_lock_lock(LOCK) \ glthread_recursive_lock_lock_func (LOCK) # define glthread_recursive_lock_unlock(LOCK) \ glthread_recursive_lock_unlock_func (LOCK) # define glthread_recursive_lock_destroy(LOCK) \ glthread_recursive_lock_destroy_func (LOCK) extern void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef struct { volatile int inited; volatile long started; CRITICAL_SECTION lock; } gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = { -1, -1 }; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (glthread_once_func (ONCE_CONTROL, INITFUNCTION), 0) extern void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef int gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) # define gl_lock_define_initialized(STORAGECLASS, NAME) # define glthread_lock_init(NAME) 0 # define glthread_lock_lock(NAME) 0 # define glthread_lock_unlock(NAME) 0 # define glthread_lock_destroy(NAME) 0 /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef int gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) # define gl_rwlock_define_initialized(STORAGECLASS, NAME) # define glthread_rwlock_init(NAME) 0 # define glthread_rwlock_rdlock(NAME) 0 # define glthread_rwlock_wrlock(NAME) 0 # define glthread_rwlock_unlock(NAME) 0 # define glthread_rwlock_destroy(NAME) 0 /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef int gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) # define glthread_recursive_lock_init(NAME) 0 # define glthread_recursive_lock_lock(NAME) 0 # define glthread_recursive_lock_unlock(NAME) 0 # define glthread_recursive_lock_destroy(NAME) 0 /* -------------------------- gl_once_t datatype -------------------------- */ typedef int gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = 0; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0) #endif /* ========================================================================= */ /* Macros with built-in error handling. */ /* -------------------------- gl_lock_t datatype -------------------------- */ #define gl_lock_init(NAME) \ do \ { \ if (glthread_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_lock(NAME) \ do \ { \ if (glthread_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_unlock(NAME) \ do \ { \ if (glthread_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_destroy(NAME) \ do \ { \ if (glthread_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ #define gl_rwlock_init(NAME) \ do \ { \ if (glthread_rwlock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_rdlock(NAME) \ do \ { \ if (glthread_rwlock_rdlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_wrlock(NAME) \ do \ { \ if (glthread_rwlock_wrlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_unlock(NAME) \ do \ { \ if (glthread_rwlock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_destroy(NAME) \ do \ { \ if (glthread_rwlock_destroy (&NAME)) \ abort (); \ } \ while (0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ #define gl_recursive_lock_init(NAME) \ do \ { \ if (glthread_recursive_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_lock(NAME) \ do \ { \ if (glthread_recursive_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_unlock(NAME) \ do \ { \ if (glthread_recursive_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_destroy(NAME) \ do \ { \ if (glthread_recursive_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* -------------------------- gl_once_t datatype -------------------------- */ #define gl_once(NAME, INITFUNCTION) \ do \ { \ if (glthread_once (&NAME, INITFUNCTION)) \ abort (); \ } \ while (0) /* ========================================================================= */ #endif /* _LOCK_H */ gnuastro-0.5/bootstrapped/README0000644000175000017500000000251113044627563013540 00000000000000Imported files to GNU Astronomy Utilities ========================================= The contents of this directory (except this README file!) are imported to GNU Astronomy Utilities (Gnuastro) from other projects. Therefore they are not maintained by Gnuastro developers and are kept separately in this directory for clarity and easy maintenance. In the version controlled repository this directory only contains this single README file. It is populated during the bootstrapping process (see ../README-hacking for more on bootstrapping, or the "Bootstrapping" section in the manual). In the distribution tar-ball this directory is populated with the necessary files. The projects that were used are: - GNU Portability Library (Gnulib): https://www.gnu.org/software/gnulib/ This is a very useful collection of libraries (from GNU C library) to enable non-complying operating systems to run programs based on it. It also contains various very useful scripts needed for the GNU build process. - GNU Autoconf-archives: https://www.gnu.org/software/autoconf-archive/ These archives contain a large number of M4 scripts that can be used at ./configure time. We are most grateful to the maintainers of these projects which allow Gnuastro to be easily installed on a very large set of Unix-like operating systems.gnuastro-0.5/bootstrapped/m4/0000755000175000017500000000000013217220465013251 500000000000000gnuastro-0.5/bootstrapped/m4/yield.m40000644000175000017500000000135713217200022014532 00000000000000# yield.m4 serial 2 dnl Copyright (C) 2005-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_YIELD], [ AC_REQUIRE([gl_THREADLIB]) dnl On some systems, sched_yield is in librt, rather than in libpthread. YIELD_LIB= if test $gl_threads_api = posix; then dnl Solaris has sched_yield in librt, not in libpthread or libc. AC_CHECK_LIB([rt], [sched_yield], [YIELD_LIB=-lrt], [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt. AC_CHECK_LIB([posix4], [sched_yield], [YIELD_LIB=-lposix4])]) fi AC_SUBST([YIELD_LIB]) ]) gnuastro-0.5/bootstrapped/m4/xsize.m40000644000175000017500000000062613217200022014564 00000000000000# xsize.m4 serial 5 dnl Copyright (C) 2003-2004, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XSIZE], [ dnl Prerequisites of lib/xsize.h. AC_REQUIRE([gl_SIZE_MAX]) AC_CHECK_HEADERS([stdint.h]) ]) gnuastro-0.5/bootstrapped/m4/wint_t.m40000644000175000017500000000444313217200022014727 00000000000000# wint_t.m4 serial 7 dnl Copyright (C) 2003, 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether has the 'wint_t' type and whether gnulib's dnl or would, if present, override 'wint_t'. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) dnl Determine whether gnulib's or would, if present, dnl override 'wint_t'. AC_CACHE_CHECK([whether wint_t is too small], [gl_cv_type_wint_t_too_small], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; ]])], [gl_cv_type_wint_t_too_small=no], [gl_cv_type_wint_t_too_small=yes])]) if test $gl_cv_type_wint_t_too_small = yes; then GNULIB_OVERRIDES_WINT_T=1 else GNULIB_OVERRIDES_WINT_T=0 fi else GNULIB_OVERRIDES_WINT_T=0 fi AC_SUBST([GNULIB_OVERRIDES_WINT_T]) ]) dnl Prerequisites of the 'wint_t' override. AC_DEFUN([gl_TYPE_WINT_T_PREREQ], [ AC_CHECK_HEADERS_ONCE([crtdefs.h]) if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi AC_SUBST([HAVE_CRTDEFS_H]) ]) gnuastro-0.5/bootstrapped/m4/wcwidth.m40000644000175000017500000000665213217200022015100 00000000000000# wcwidth.m4 serial 25 dnl Copyright (C) 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCWIDTH], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc to declare wcwidth(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_CHECK_HEADERS_ONCE([wchar.h]) AC_CHECK_FUNCS_ONCE([wcwidth]) AC_CHECK_DECLS([wcwidth], [], [], [[ /* AIX 3.2.5 declares wcwidth in . */ #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include ]]) if test $ac_cv_have_decl_wcwidth != yes; then HAVE_DECL_WCWIDTH=0 fi if test $ac_cv_func_wcwidth != yes; then AC_CACHE_CHECK([whether wcwidth is a macro], [gl_cv_func_wcwidth_macro], [AC_EGREP_CPP([wchar_header_defines_wcwidth], [ #include #ifdef wcwidth wchar_header_defines_wcwidth #endif], [gl_cv_func_wcwidth_macro=yes], [gl_cv_func_wcwidth_macro=no]) ]) fi if test $ac_cv_func_wcwidth = yes || test $gl_cv_func_wcwidth_macro = yes; then HAVE_WCWIDTH=1 dnl On Mac OS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1. dnl On OpenBSD 5.0, wcwidth(0x05B0) (HEBREW POINT SHEVA) returns 1. dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1. dnl On OpenBSD 5.8, wcwidth(0xFF1A) (FULLWIDTH COLON) returns 0. dnl This leads to bugs in 'ls' (coreutils). AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales], [gl_cv_func_wcwidth_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include /* AIX 3.2.5 declares wcwidth in . */ #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #if !HAVE_DECL_WCWIDTH extern # ifdef __cplusplus "C" # endif int wcwidth (int); #endif int main () { int result = 0; if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL) { if (wcwidth (0x0301) > 0) result |= 1; if (wcwidth (0x05B0) > 0) result |= 2; if (wcwidth (0x200B) > 0) result |= 4; if (wcwidth (0xFF1A) == 0) result |= 8; } return result; }]])], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc and AIX 7 systems. *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";; *) gl_cv_func_wcwidth_works="guessing no";; esac changequote([,])dnl ]) ]) case "$gl_cv_func_wcwidth_works" in *yes) ;; *no) REPLACE_WCWIDTH=1 ;; esac else HAVE_WCWIDTH=0 fi dnl We don't substitute HAVE_WCWIDTH. We assume that if the system does not dnl have the wcwidth function, then it does not declare it. ]) gnuastro-0.5/bootstrapped/m4/wctype_h.m40000644000175000017500000001557513217200022015255 00000000000000# wctype_h.m4 serial 21 dnl A placeholder for ISO C99 , for platforms that lack it. dnl Copyright (C) 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_WCTYPE_H], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([iswcntrl]) if test $ac_cv_func_iswcntrl = yes; then HAVE_ISWCNTRL=1 else HAVE_ISWCNTRL=0 fi AC_SUBST([HAVE_ISWCNTRL]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) gl_CHECK_NEXT_HEADERS([wctype.h]) if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then dnl Linux libc5 has an iswprint function that returns 0 for all arguments. dnl The other functions are likely broken in the same way. AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #include int main () { return iswprint ('x') == 0; } ]])], [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], [dnl Guess no on Linux libc5, yes otherwise. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif]], [])], [gl_cv_func_iswcntrl_works="guessing yes"], [gl_cv_func_iswcntrl_works="guessing no"]) ]) ]) fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi AC_SUBST([HAVE_WCTYPE_H]) case "$gl_cv_func_iswcntrl_works" in *yes) REPLACE_ISWCNTRL=0 ;; *) REPLACE_ISWCNTRL=1 ;; esac AC_SUBST([REPLACE_ISWCNTRL]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl Redefine all of iswcntrl, ..., iswxdigit in . : fi if test $REPLACE_ISWCNTRL = 1; then REPLACE_TOWLOWER=1 else AC_CHECK_FUNCS([towlower]) if test $ac_cv_func_towlower = yes; then REPLACE_TOWLOWER=0 else AC_CHECK_DECLS([towlower],,, [[/* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #if HAVE_WCTYPE_H # include #endif ]]) if test $ac_cv_have_decl_towlower = yes; then dnl On Minix 3.1.8, the system's declares towlower() and dnl towupper() although it does not have the functions. Avoid a dnl collision with gnulib's replacement. REPLACE_TOWLOWER=1 else REPLACE_TOWLOWER=0 fi fi fi AC_SUBST([REPLACE_TOWLOWER]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then dnl Redefine towlower, towupper in . : fi dnl We assume that the wctype() and iswctype() functions exist if and only dnl if the type wctype_t is defined in or in if that dnl exists. dnl HP-UX 11.00 declares all these in and lacks . AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #if HAVE_WCTYPE_H # include #endif wctype_t a; ]], [[]])], [gl_cv_type_wctype_t=yes], [gl_cv_type_wctype_t=no]) ]) if test $gl_cv_type_wctype_t = no; then HAVE_WCTYPE_T=0 fi dnl We assume that the wctrans() and towctrans() functions exist if and only dnl if the type wctrans_t is defined in . AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #include wctrans_t a; ]], [[]])], [gl_cv_type_wctrans_t=yes], [gl_cv_type_wctrans_t=no]) ]) if test $gl_cv_type_wctrans_t = no; then HAVE_WCTRANS_T=0 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # include #endif #include ]], [wctype iswctype wctrans towctrans ]) ]) AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_WCTYPE_H_DEFAULTS], [ GNULIB_ISWBLANK=0; AC_SUBST([GNULIB_ISWBLANK]) GNULIB_WCTYPE=0; AC_SUBST([GNULIB_WCTYPE]) GNULIB_ISWCTYPE=0; AC_SUBST([GNULIB_ISWCTYPE]) GNULIB_WCTRANS=0; AC_SUBST([GNULIB_WCTRANS]) GNULIB_TOWCTRANS=0; AC_SUBST([GNULIB_TOWCTRANS]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ISWBLANK=1; AC_SUBST([HAVE_ISWBLANK]) HAVE_WCTYPE_T=1; AC_SUBST([HAVE_WCTYPE_T]) HAVE_WCTRANS_T=1; AC_SUBST([HAVE_WCTRANS_T]) REPLACE_ISWBLANK=0; AC_SUBST([REPLACE_ISWBLANK]) ]) gnuastro-0.5/bootstrapped/m4/wctomb.m40000644000175000017500000000071413217200022014713 00000000000000# wctomb.m4 serial 2 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCTOMB], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) if false; then REPLACE_WCTOMB=1 fi ]) # Prerequisites of lib/wctomb.c. AC_DEFUN([gl_PREREQ_WCTOMB], [ : ]) gnuastro-0.5/bootstrapped/m4/wctob.m40000644000175000017500000000705713217200022014545 00000000000000# wctob.m4 serial 11 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCTOB], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wctob]) if test $ac_cv_func_wctob = no; then HAVE_WCTOB=0 HAVE_DECL_WCTOB=0 else HAVE_WCTOB=1 dnl Solaris 9 has the wctob() function but it does not work. dnl Cygwin 1.7.2 has the wctob() function but it clobbers caller-owned dnl registers, see . AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wctob works], [gl_cv_func_wctob_works], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris <= 9 and Cygwin. solaris2.[1-9] | solaris2.[1-9].* | cygwin*) gl_cv_func_wctob_works="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_wctob_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wctob_works="guessing yes" ;; esac changequote([,])dnl case "$host_os" in cygwin*) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include register long global __asm__ ("%ebx"); int main () { setlocale (LC_ALL, "en_US.UTF-8"); global = 0x12345678; if (wctob (0x00FC) != -1) return 1; if (global != 0x12345678) return 2; return 0; }]])], [:], [gl_cv_func_wctob_works=no], [:]) ;; esac if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { wchar_t wc; if (mbtowc (&wc, "\374", 1) == 1) if (wctob (wc) != (unsigned char) '\374') return 1; } return 0; }]])], [gl_cv_func_wctob_works=yes], [gl_cv_func_wctob_works=no], [:]) fi ]) case "$gl_cv_func_wctob_works" in *yes) ;; *) REPLACE_WCTOB=1 ;; esac if test $REPLACE_WCTOB = 0; then dnl IRIX 6.5 has the wctob() function but does not declare it. AC_CHECK_DECLS([wctob], [], [], [[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include ]]) if test $ac_cv_have_decl_wctob != yes; then HAVE_DECL_WCTOB=0 fi fi fi ]) # Prerequisites of lib/wctob.c. AC_DEFUN([gl_PREREQ_WCTOB], [ : ]) gnuastro-0.5/bootstrapped/m4/wcrtomb.m40000644000175000017500000000703513217200022015100 00000000000000# wcrtomb.m4 serial 12 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCRTOMB], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([wcrtomb]) if test $ac_cv_func_wcrtomb = no; then HAVE_WCRTOMB=0 AC_CHECK_DECLS([wcrtomb],,, [[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include ]]) if test $ac_cv_have_decl_wcrtomb = yes; then dnl On Minix 3.1.8, the system's declares wcrtomb() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_WCRTOMB=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_WCRTOMB=1 else dnl On AIX 4.3, OSF/1 5.1 and Solaris 10, wcrtomb (NULL, 0, NULL) sometimes dnl returns 0 instead of 1. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wcrtomb return value is correct], [gl_cv_func_wcrtomb_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX 4, OSF/1 and Solaris. aix4* | osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_wcrtomb_retval="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_wcrtomb_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 1; } if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 2; } if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 4; } if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 8; } return result; }]])], [gl_cv_func_wcrtomb_retval=yes], [gl_cv_func_wcrtomb_retval=no], [:]) fi ]) case "$gl_cv_func_wcrtomb_retval" in *yes) ;; *) REPLACE_WCRTOMB=1 ;; esac fi fi ]) # Prerequisites of lib/wcrtomb.c. AC_DEFUN([gl_PREREQ_WCRTOMB], [ : ]) gnuastro-0.5/bootstrapped/m4/wchar_t.m40000644000175000017500000000146213217200022015050 00000000000000# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include wchar_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) fi ]) gnuastro-0.5/bootstrapped/m4/wchar_h.m40000644000175000017500000002354413217200022015041 00000000000000dnl A placeholder for ISO C99 , for platforms that have issues. dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Eric Blake. # wchar_h.m4 serial 42 AC_DEFUN([gl_WCHAR_H], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) dnl Prepare for creating substitute . dnl Check for (missing in Linux uClibc when built without wide dnl character support). dnl is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime ]) ]) dnl Check whether is usable at all. AC_DEFUN([gl_WCHAR_H_INLINE_OK], [ dnl Test whether suffers due to the transition from '__inline' to dnl 'gnu_inline'. See dnl and . In summary, dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and dnl the option -std=c99 or -std=gnu99, leads to a broken . AC_CACHE_CHECK([whether uses 'inline' correctly], [gl_cv_header_wchar_h_correct_inline], [gl_cv_header_wchar_h_correct_inline=yes AC_LANG_CONFTEST([ AC_LANG_SOURCE([[#define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include extern int zero (void); int main () { return zero(); } ]])]) dnl Do not rename the object file from conftest.$ac_objext to dnl conftest1.$ac_objext, as this will cause the link to fail on dnl z/OS when using the XPLINK object format (due to duplicate dnl CSECT names). Instead, temporarily redefine $ac_compile so dnl that the object file has the latter name from the start. save_ac_compile="$ac_compile" ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` if AC_TRY_EVAL([ac_compile]); then AC_LANG_CONFTEST([ AC_LANG_SOURCE([[#define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int zero (void) { return 0; } ]])]) dnl See note above about renaming object files. ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` if AC_TRY_EVAL([ac_compile]); then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$save_ac_compile" rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext ]) if test $gl_cv_header_wchar_h_correct_inline = no; then AC_MSG_ERROR([ cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of , or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted.]) fi ]) AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_WCHAR_H_DEFAULTS], [ GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC]) GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB]) GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT]) GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC]) GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN]) GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS]) GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS]) GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB]) GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS]) GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS]) GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) GNULIB_WMEMCHR=0; AC_SUBST([GNULIB_WMEMCHR]) GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP]) GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY]) GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE]) GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET]) GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN]) GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN]) GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY]) GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY]) GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY]) GNULIB_WCPNCPY=0; AC_SUBST([GNULIB_WCPNCPY]) GNULIB_WCSCAT=0; AC_SUBST([GNULIB_WCSCAT]) GNULIB_WCSNCAT=0; AC_SUBST([GNULIB_WCSNCAT]) GNULIB_WCSCMP=0; AC_SUBST([GNULIB_WCSCMP]) GNULIB_WCSNCMP=0; AC_SUBST([GNULIB_WCSNCMP]) GNULIB_WCSCASECMP=0; AC_SUBST([GNULIB_WCSCASECMP]) GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP]) GNULIB_WCSCOLL=0; AC_SUBST([GNULIB_WCSCOLL]) GNULIB_WCSXFRM=0; AC_SUBST([GNULIB_WCSXFRM]) GNULIB_WCSDUP=0; AC_SUBST([GNULIB_WCSDUP]) GNULIB_WCSCHR=0; AC_SUBST([GNULIB_WCSCHR]) GNULIB_WCSRCHR=0; AC_SUBST([GNULIB_WCSRCHR]) GNULIB_WCSCSPN=0; AC_SUBST([GNULIB_WCSCSPN]) GNULIB_WCSSPN=0; AC_SUBST([GNULIB_WCSSPN]) GNULIB_WCSPBRK=0; AC_SUBST([GNULIB_WCSPBRK]) GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR]) GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK]) GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH]) GNULIB_WCSFTIME=0; AC_SUBST([GNULIB_WCSFTIME]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR]) HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY]) HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY]) HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT]) HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT]) HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP]) HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP]) HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP]) HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP]) HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL]) HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM]) HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP]) HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR]) HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR]) HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN]) HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN]) HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK]) HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) HAVE_WCSFTIME=1; AC_SUBST([HAVE_WCSFTIME]) HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) REPLACE_WCSFTIME=0; AC_SUBST([REPLACE_WCSFTIME]) ]) gnuastro-0.5/bootstrapped/m4/warn-on-use.m40000644000175000017500000000415413217200022015575 00000000000000# warn-on-use.m4 serial 5 dnl Copyright (C) 2010-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) # --------------------------------------- # For each whitespace-separated element in the list of NAMES, define # HAVE_RAW_DECL_name if the function has a declaration among INCLUDES # even after being undefined as a macro. # # See warn-on-use.h for some hints on how to poison function names, as # well as ideas on poisoning global variables and macros. NAMES may # include global variables, but remember that only functions work with # _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single # header, but if the replacement header pulls in other headers because # some systems declare functions in the wrong header, then INCLUDES # should do likewise. # # It is generally safe to assume declarations for functions declared # in the intersection of C89 and C11 (such as printf) without # needing gl_WARN_ON_USE_PREPARE. AC_DEFUN([gl_WARN_ON_USE_PREPARE], [ m4_foreach_w([gl_decl], [$2], [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), [Define to 1 if ]m4_defn([gl_decl])[ is declared even after undefining macros.])])dnl dnl FIXME: gl_Symbol must be used unquoted until we can assume dnl autoconf 2.64 or newer. for gl_func in m4_flatten([$2]); do AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl AC_CACHE_CHECK([whether $gl_func is declared without a macro], gl_Symbol, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], [@%:@undef $gl_func (void) $gl_func;])], [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])]) AS_VAR_IF(gl_Symbol, [yes], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) dnl shortcut - if the raw declaration exists, then set a cache dnl variable to allow skipping any later AC_CHECK_DECL efforts eval ac_cv_have_decl_$gl_func=yes]) AS_VAR_POPDEF([gl_Symbol])dnl done ]) gnuastro-0.5/bootstrapped/m4/vsnprintf.m40000644000175000017500000000362113217200022015451 00000000000000# vsnprintf.m4 serial 7 dnl Copyright (C) 2002-2004, 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Libintl 0.17 will replace vsnprintf only if it does not support %1$s, dnl but defers to any gnulib vsnprintf replacements. Therefore, gnulib dnl must guarantee that the decision for replacing vsnprintf is a superset dnl of the reasons checked by libintl. AC_DEFUN([gl_FUNC_VSNPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_cv_func_vsnprintf_usable=no AC_CHECK_FUNCS([vsnprintf]) if test $ac_cv_func_vsnprintf = yes; then gl_SNPRINTF_SIZE1 case "$gl_cv_func_snprintf_size1" in *yes) gl_SNPRINTF_RETVAL_C99 case "$gl_cv_func_snprintf_retval_c99" in *yes) gl_PRINTF_POSITIONS case "$gl_cv_func_printf_positions" in *yes) gl_cv_func_vsnprintf_usable=yes ;; esac ;; esac ;; esac fi if test $gl_cv_func_vsnprintf_usable = no; then gl_REPLACE_VSNPRINTF fi AC_CHECK_DECLS_ONCE([vsnprintf]) if test $ac_cv_have_decl_vsnprintf = no; then HAVE_DECL_VSNPRINTF=0 fi ]) AC_DEFUN([gl_REPLACE_VSNPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([vsnprintf]) if test $ac_cv_func_vsnprintf = yes; then REPLACE_VSNPRINTF=1 else AC_CHECK_DECLS_ONCE([vsnprintf]) if test $ac_cv_have_decl_vsnprintf = yes; then dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_vsnprintf, not vsnprintf. REPLACE_VSNPRINTF=1 fi fi gl_PREREQ_VSNPRINTF ]) # Prerequisites of lib/vsnprintf.c. AC_DEFUN([gl_PREREQ_VSNPRINTF], [:]) gnuastro-0.5/bootstrapped/m4/vasnprintf.m40000644000175000017500000002113313217200022015610 00000000000000# vasnprintf.m4 serial 36 dnl Copyright (C) 2002-2004, 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VASNPRINTF], [ AC_CHECK_FUNCS_ONCE([vasnprintf]) if test $ac_cv_func_vasnprintf = no; then gl_REPLACE_VASNPRINTF fi ]) AC_DEFUN([gl_REPLACE_VASNPRINTF], [ AC_CHECK_FUNCS_ONCE([vasnprintf]) AC_LIBOBJ([vasnprintf]) AC_LIBOBJ([printf-args]) AC_LIBOBJ([printf-parse]) AC_LIBOBJ([asnprintf]) if test $ac_cv_func_vasnprintf = yes; then AC_DEFINE([REPLACE_VASNPRINTF], [1], [Define if vasnprintf exists but is overridden by gnulib.]) fi gl_PREREQ_PRINTF_ARGS gl_PREREQ_PRINTF_PARSE gl_PREREQ_VASNPRINTF gl_PREREQ_ASNPRINTF ]) # Prerequisites of lib/printf-args.h, lib/printf-args.c. AC_DEFUN([gl_PREREQ_PRINTF_ARGS], [ AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) ]) # Prerequisites of lib/printf-parse.h, lib/printf-parse.c. AC_DEFUN([gl_PREREQ_PRINTF_PARSE], [ AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_REQUIRE([AC_TYPE_SIZE_T]) AC_CHECK_TYPE([ptrdiff_t], , [AC_DEFINE([ptrdiff_t], [long], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) ]) # Prerequisites of lib/vasnprintf.c. AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], [ AC_REQUIRE([AC_FUNC_ALLOCA]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) dnl Use the _snprintf function only if it is declared (because on NetBSD it dnl is defined as a weak alias of snprintf; we prefer to use the latter). AC_CHECK_DECLS([_snprintf], , , [[#include ]]) dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE. AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) dnl We can avoid a lot of code by assuming that snprintf's return value dnl conforms to ISO C99. So check that. AC_REQUIRE([gl_SNPRINTF_RETVAL_C99]) case "$gl_cv_func_snprintf_retval_c99" in *yes) AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1], [Define if the return value of the snprintf function is the number of of bytes (excluding the terminating NUL) that would have been produced if the buffer had been large enough.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting 'long double' # arguments. AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) case "$gl_cv_func_printf_long_double" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' # arguments. AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], [ AC_REQUIRE([gl_PRINTF_INFINITE]) case "$gl_cv_func_printf_infinite" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for infinite 'double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' # arguments. AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if dnl NEED_PRINTF_LONG_DOUBLE is already set. AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for infinite 'long double' arguments.]) ;; esac ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) case "$gl_cv_func_printf_directive_a" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], [Define if the vasnprintf implementation needs special code for the 'a' and 'A' directives.]) AC_CHECK_FUNCS([nl_langinfo]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) case "$gl_cv_func_printf_directive_f" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], [Define if the vasnprintf implementation needs special code for the 'F' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) case "$gl_cv_func_printf_directive_ls" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], [Define if the vasnprintf implementation needs special code for the 'ls' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], [ AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) case "$gl_cv_func_printf_flag_grouping" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], [Define if the vasnprintf implementation needs special code for the ' flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], [ AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) case "$gl_cv_func_printf_flag_leftadjust" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], [Define if the vasnprintf implementation needs special code for the '-' flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], [ AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) case "$gl_cv_func_printf_flag_zero" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], [Define if the vasnprintf implementation needs special code for the 0 flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting large precisions. AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], [ AC_REQUIRE([gl_PRINTF_PRECISION]) case "$gl_cv_func_printf_precision" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], [Define if the vasnprintf implementation needs special code for supporting large precisions without arbitrary bounds.]) AC_DEFINE([NEED_PRINTF_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'double' arguments.]) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory # conditions. AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], [ AC_REQUIRE([gl_PRINTF_ENOMEM]) case "$gl_cv_func_printf_enomem" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_ENOMEM], [1], [Define if the vasnprintf implementation needs special code for surviving out-of-memory conditions.]) AC_DEFINE([NEED_PRINTF_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'double' arguments.]) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], [ AC_REQUIRE([gl_PREREQ_VASNPRINTF]) gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM ]) # Prerequisites of lib/asnprintf.c. AC_DEFUN([gl_PREREQ_ASNPRINTF], [ ]) gnuastro-0.5/bootstrapped/m4/usleep.m40000644000175000017500000000346113217200022014717 00000000000000# usleep.m4 serial 4 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro intentionally does not check for select or nanosleep; dnl both of those modules can require external libraries. AC_DEFUN([gl_FUNC_USLEEP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl usleep was required in POSIX 2001, but dropped as obsolete in dnl POSIX 2008; therefore, it is not always exposed in headers. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([usleep]) AC_CHECK_TYPE([useconds_t], [], [AC_DEFINE([useconds_t], [unsigned int], [Define to an unsigned 32-bit type if lacks this type.])]) if test $ac_cv_func_usleep = no; then HAVE_USLEEP=0 else dnl POSIX allows implementations to reject arguments larger than dnl 999999, but GNU guarantees it will work. AC_CACHE_CHECK([whether usleep allows large arguments], [gl_cv_func_usleep_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[return !!usleep (1000000);]])], [gl_cv_func_usleep_works=yes], [gl_cv_func_usleep_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_usleep_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_usleep_works="guessing no" ;; # If we don't know, assume the worst. *) gl_cv_func_usleep_works="guessing no" ;; esac ])]) case "$gl_cv_func_usleep_works" in *yes) ;; *) REPLACE_USLEEP=1 ;; esac fi ]) gnuastro-0.5/bootstrapped/m4/unistd_h.m40000644000175000017500000002235413217200022015241 00000000000000# unistd_h.m4 serial 71 dnl Copyright (C) 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Simon Josefsson, Bruno Haible. AC_DEFUN([gl_UNISTD_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([unistd.h]) if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi AC_SUBST([HAVE_UNISTD_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Determine WINDOWS_64_BIT_OFF_T. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_UNISTD_H # include #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include # endif #endif ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat truncate ttyname_r unlink unlinkat usleep]) ]) AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_UNISTD_H_DEFAULTS], [ GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3]) GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT]) GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT]) GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC]) GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS]) GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN]) GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY]) GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT]) GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE]) GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE]) GNULIB_READ=0; AC_SUBST([GNULIB_READ]) GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) GNULIB_SETHOSTNAME=0; AC_SUBST([GNULIB_SETHOSTNAME]) GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) GNULIB_TRUNCATE=0; AC_SUBST([GNULIB_TRUNCATE]) GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK]) GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT]) GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP]) GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) HAVE_LINK=1; AC_SUBST([HAVE_LINK]) HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) HAVE_TRUNCATE=1; AC_SUBST([HAVE_TRUNCATE]) HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN]) HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT]) REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) REPLACE_READ=0; AC_SUBST([REPLACE_READ]) REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT]) REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE]) REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) ]) gnuastro-0.5/bootstrapped/m4/time_h.m40000644000175000017500000001376213217200022014674 00000000000000# Configure a more-standard replacement for . # Copyright (C) 2000-2001, 2003-2007, 2009-2017 Free Software Foundation, Inc. # serial 11 # 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. # Written by Paul Eggert and Jim Meyering. AC_DEFUN([gl_HEADER_TIME_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_HEADER_TIME_H_BODY]) ]) AC_DEFUN([gl_HEADER_TIME_H_BODY], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) gl_NEXT_HEADERS([time.h]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) ]) dnl Check whether 'struct timespec' is declared dnl in time.h, sys/time.h, pthread.h, or unistd.h. AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], [ AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CACHE_CHECK([for struct timespec in ], [gl_cv_sys_struct_timespec_in_time_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_time_h=yes], [gl_cv_sys_struct_timespec_in_time_h=no])]) TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 if test $gl_cv_sys_struct_timespec_in_time_h = yes; then TIME_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in ], [gl_cv_sys_struct_timespec_in_sys_time_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_sys_time_h=yes], [gl_cv_sys_struct_timespec_in_sys_time_h=no])]) if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in ], [gl_cv_sys_struct_timespec_in_pthread_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_pthread_h=yes], [gl_cv_sys_struct_timespec_in_pthread_h=no])]) if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in ], [gl_cv_sys_struct_timespec_in_unistd_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_unistd_h=yes], [gl_cv_sys_struct_timespec_in_unistd_h=no])]) if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 fi fi fi fi AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) ]) AC_DEFUN([gl_TIME_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS], [ GNULIB_CTIME=0; AC_SUBST([GNULIB_CTIME]) GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME]) GNULIB_LOCALTIME=0; AC_SUBST([GNULIB_LOCALTIME]) GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP]) GNULIB_STRFTIME=0; AC_SUBST([GNULIB_STRFTIME]) GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME]) GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM]) GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R]) GNULIB_TIME_RZ=0; AC_SUBST([GNULIB_TIME_RZ]) GNULIB_TZSET=0; AC_SUBST([GNULIB_TZSET]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) HAVE_TZSET=1; AC_SUBST([HAVE_TZSET]) dnl Even GNU libc does not have timezone_t yet. HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) dnl If another module says to replace or to not replace, do that. dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK; dnl this lets maintainers check for portability. REPLACE_CTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_CTIME]) REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R]) REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME]) REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP]) REPLACE_STRFTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_STRFTIME]) REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) REPLACE_TZSET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TZSET]) dnl Hack so that the time module doesn't depend on the sys_time module. dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent. : ${GNULIB_GETTIMEOFDAY=0}; AC_SUBST([GNULIB_GETTIMEOFDAY]) dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier dnl is no longer a big deal. REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME]) REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME]) ]) gnuastro-0.5/bootstrapped/m4/threadlib.m40000644000175000017500000003614213217200022015362 00000000000000# threadlib.m4 serial 13 dnl Copyright (C) 2005-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl gl_THREADLIB dnl ------------ dnl Tests for a multithreading library to be used. dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the dnl default is 'no', otherwise it is system dependent. In both cases, the user dnl can change the choice through the options --enable-threads=choice or dnl --disable-threads. dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS, dnl USE_PTH_THREADS, USE_WINDOWS_THREADS dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with dnl libtool). dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for dnl programs that really need multithread functionality. The difference dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. AC_DEFUN([gl_THREADLIB_EARLY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) ]) dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_EARLY_BODY], [ dnl Ordering constraints: This macro modifies CPPFLAGS in a way that dnl influences the result of the autoconf tests that test for *_unlocked dnl declarations, on AIX 5 at least. Therefore it must come early. AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl AC_BEFORE([$0], [gl_ARGP])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes dnl AC_GNU_SOURCE. m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], [AC_REQUIRE([AC_GNU_SOURCE])]) dnl Check for multithreading. m4_ifdef([gl_THREADLIB_DEFAULT_NO], [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) AC_ARG_ENABLE([threads], AC_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ AC_HELP_STRING([--disable-threads], [build without multithread safety])]), [gl_use_threads=$enableval], [if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else changequote(,)dnl case "$host_os" in dnl Disable multithreading by default on OSF/1, because it interferes dnl with fork()/exec(): When msgexec is linked with -lpthread, its dnl child process gets an endless segmentation fault inside execvp(). dnl Disable multithreading by default on Cygwin 1.5.x, because it has dnl bugs that lead to endless loops or crashes. See dnl . osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac changequote([,])dnl fi ]) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # For using : case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks . cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in . case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac fi ]) dnl The guts of gl_THREADLIB. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_BODY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then dnl Check whether the compiler and linker support weak declarations. AC_CACHE_CHECK([whether imported symbols can be declared weak], [gl_cv_have_weak], [gl_cv_have_weak=no dnl First, test whether the compiler accepts it syntactically. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern void xyzzy (); #pragma weak xyzzy]], [[xyzzy();]])], [gl_cv_have_weak=maybe]) if test $gl_cv_have_weak = maybe; then dnl Second, test whether it actually works. On Cygwin 1.7.2, with dnl gcc 4.3, symbols declared weak always evaluate to the address 0. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #pragma weak fputs int main () { return (fputs == NULL); }]])], [gl_cv_have_weak=yes], [gl_cv_have_weak=no], [dnl When cross-compiling, assume that only ELF platforms support dnl weak symbols. AC_EGREP_CPP([Extensible Linking Format], [#ifdef __ELF__ Extensible Linking Format #endif ], [gl_cv_have_weak="guessing yes"], [gl_cv_have_weak="guessing no"]) ]) fi dnl But when linking statically, weak symbols don't work. case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac ]) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. AC_CHECK_HEADER([pthread.h], [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads gl_have_pthread= # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include pthread_mutex_t m; pthread_mutexattr_t ma; ]], [[pthread_mutex_lock (&m); pthread_mutexattr_init (&ma);]])], [gl_have_pthread=yes LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread]) LIBS=$save_LIBS test -n "$gl_have_pthread" && break done # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. AC_CHECK_LIB([pthread], [pthread_kill], [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) esac ]) elif test -z "$gl_have_pthread"; then # Some library is needed. Try libpthread and libc_r. AC_CHECK_LIB([pthread], [pthread_kill], [gl_have_pthread=yes LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) if test -z "$gl_have_pthread"; then # For FreeBSD 4. AC_CHECK_LIB([c_r], [pthread_kill], [gl_have_pthread=yes LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) fi fi if test -n "$gl_have_pthread"; then gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], [1], [Define if the POSIX multithreading library can be used.]) if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], [Define if references to the POSIX multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi fi fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then gl_have_solaristhread= gl_save_LIBS="$LIBS" LIBS="$LIBS -lthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[thr_self();]])], [gl_have_solaristhread=yes]) LIBS="$gl_save_LIBS" if test -n "$gl_have_solaristhread"; then gl_threads_api=solaris LIBTHREAD=-lthread LTLIBTHREAD=-lthread LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" AC_DEFINE([USE_SOLARIS_THREADS], [1], [Define if the old Solaris multithreading library can be used.]) if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], [Define if references to the old Solaris multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi fi fi if test "$gl_use_threads" = pth; then gl_save_CPPFLAGS="$CPPFLAGS" AC_LIB_LINKFLAGS([pth]) gl_have_pth= gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBPTH" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[pth_self();]])], [gl_have_pth=yes]) LIBS="$gl_save_LIBS" if test -n "$gl_have_pth"; then gl_threads_api=pth LIBTHREAD="$LIBPTH" LTLIBTHREAD="$LTLIBPTH" LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" AC_DEFINE([USE_PTH_THREADS], [1], [Define if the GNU Pth multithreading library can be used.]) if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_PTH_THREADS_WEAK], [1], [Define if references to the GNU Pth multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi else CPPFLAGS="$gl_save_CPPFLAGS" fi fi if test -z "$gl_have_pthread"; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows AC_DEFINE([USE_WINDOWS_THREADS], [1], [Define if the native Windows multithreading API can be used.]) fi ;; esac fi fi AC_MSG_CHECKING([for multithread API to use]) AC_MSG_RESULT([$gl_threads_api]) AC_SUBST([LIBTHREAD]) AC_SUBST([LTLIBTHREAD]) AC_SUBST([LIBMULTITHREAD]) AC_SUBST([LTLIBMULTITHREAD]) ]) AC_DEFUN([gl_THREADLIB], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_REQUIRE([gl_THREADLIB_BODY]) ]) dnl gl_DISABLE_THREADS dnl ------------------ dnl Sets the gl_THREADLIB default so that threads are not used by default. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads'. AC_DEFUN([gl_DISABLE_THREADS], [ m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) ]) dnl Survey of platforms: dnl dnl Platform Available Compiler Supports test-lock dnl flavours option weak result dnl --------------- --------- --------- -------- --------- dnl Linux 2.4/glibc posix -lpthread Y OK dnl dnl GNU Hurd/glibc posix dnl dnl Ubuntu 14.04 posix -pthread Y OK dnl dnl FreeBSD 5.3 posix -lc_r Y dnl posix -lkse ? Y dnl posix -lpthread ? Y dnl posix -lthr Y dnl dnl FreeBSD 5.2 posix -lc_r Y dnl posix -lkse Y dnl posix -lthr Y dnl dnl FreeBSD 4.0,4.10 posix -lc_r Y OK dnl dnl NetBSD 1.6 -- dnl dnl OpenBSD 3.4 posix -lpthread Y OK dnl dnl Mac OS X 10.[123] posix -lpthread Y OK dnl dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK dnl dnl HP-UX 11 posix -lpthread N (cc) OK dnl Y (gcc) dnl dnl IRIX 6.5 posix -lpthread Y 0.5 dnl dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK dnl dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK dnl -lpthread (gcc) Y dnl dnl Cygwin posix -lpthread Y OK dnl dnl Any of the above pth -lpth 0.0 dnl dnl Mingw windows N OK dnl dnl BeOS 5 -- dnl dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is dnl turned off: dnl OK if all three tests terminate OK, dnl 0.5 if the first test terminates OK but the second one loops endlessly, dnl 0.0 if the first test already loops endlessly. gnuastro-0.5/bootstrapped/m4/thread.m40000644000175000017500000000076113217200022014671 00000000000000# thread.m4 serial 3 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_THREAD], [ AC_REQUIRE([gl_THREADLIB]) if test $gl_threads_api = posix; then gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_CHECK_FUNCS([pthread_atfork]) LIBS="$gl_save_LIBS" fi ]) gnuastro-0.5/bootstrapped/m4/sysexits.m40000644000175000017500000000237313217200022015316 00000000000000# sysexits.m4 serial 6 dnl Copyright (C) 2003, 2005, 2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SYSEXITS], [ AC_CHECK_HEADERS_ONCE([sysexits.h]) if test $ac_cv_header_sysexits_h = yes; then HAVE_SYSEXITS_H=1 gl_CHECK_NEXT_HEADERS([sysexits.h]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[switch (0) { case EX_OK: case EX_USAGE: case EX_DATAERR: case EX_NOINPUT: case EX_NOUSER: case EX_NOHOST: case EX_UNAVAILABLE: case EX_SOFTWARE: case EX_OSERR: case EX_OSFILE: case EX_CANTCREAT: case EX_IOERR: case EX_TEMPFAIL: case EX_PROTOCOL: case EX_NOPERM: case EX_CONFIG: break; } ]])], [SYSEXITS_H=], [SYSEXITS_H=sysexits.h]) else HAVE_SYSEXITS_H=0 SYSEXITS_H=sysexits.h fi AC_SUBST([HAVE_SYSEXITS_H]) AC_SUBST([SYSEXITS_H]) AM_CONDITIONAL([GL_GENERATE_SYSEXITS_H], [test -n "$SYSEXITS_H"]) ]) gnuastro-0.5/bootstrapped/m4/sys_uio_h.m40000644000175000017500000000165413217200022015425 00000000000000# sys_uio_h.m4 serial 1 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_HEADER_SYS_UIO], [ AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS]) dnl is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/uio.h]) if test $ac_cv_header_sys_uio_h = yes; then HAVE_SYS_UIO_H=1 else HAVE_SYS_UIO_H=0 fi AC_SUBST([HAVE_SYS_UIO_H]) ]) AC_DEFUN([gl_SYS_UIO_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_SYS_UIO_H_DEFAULTS], [ ]) gnuastro-0.5/bootstrapped/m4/sys_types_h.m40000644000175000017500000000337313217200022015775 00000000000000# sys_types_h.m4 serial 9 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_TYPES_H], [ dnl Use sane struct stat types in OpenVMS 8.2 and later. AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.]) AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) gl_NEXT_HEADERS([sys/types.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to override the 'off_t' type. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Whether to override the 'dev_t' and 'ino_t' types. m4_ifdef([gl_WINDOWS_STAT_INODES], [ AC_REQUIRE([gl_WINDOWS_STAT_INODES]) ], [ WINDOWS_STAT_INODES=0 ]) AC_SUBST([WINDOWS_STAT_INODES]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], [ ]) # This works around a buggy version in autoconf <= 2.69. # See m4_version_prereq([2.70], [], [ # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=e17a30e987d7ee695fb4294a82d987ec3dc9b974 m4_undefine([AC_HEADER_MAJOR]) AC_DEFUN([AC_HEADER_MAJOR], [AC_CHECK_HEADERS_ONCE([sys/types.h]) AC_CHECK_HEADER([sys/mkdev.h], [AC_DEFINE([MAJOR_IN_MKDEV], [1], [Define to 1 if `major', `minor', and `makedev' are declared in .])]) if test $ac_cv_header_sys_mkdev_h = no; then AC_CHECK_HEADER([sys/sysmacros.h], [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], [Define to 1 if `major', `minor', and `makedev' are declared in .])]) fi ]) ]) gnuastro-0.5/bootstrapped/m4/sys_time_h.m40000644000175000017500000000734113217200022015566 00000000000000# Configure a replacement for . # serial 9 # Copyright (C) 2007, 2009-2017 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. # Written by Paul Eggert and Martin Lambers. AC_DEFUN([gl_HEADER_SYS_TIME_H], [ dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1 dnl statements that occur in other macros. AC_REQUIRE([gl_HEADER_SYS_TIME_H_BODY]) ]) AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) gl_CHECK_NEXT_HEADERS([sys/time.h]) if test $ac_cv_header_sys_time_h != yes; then HAVE_SYS_TIME_H=0 fi dnl On native Windows with MSVC, 'struct timeval' is defined in dnl only. So include that header in the list. gl_PREREQ_SYS_H_WINSOCK2 AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_SYS_TIME_H #include #endif #include #if HAVE_WINSOCK2_H # include #endif ]], [[static struct timeval x; x.tv_sec = x.tv_usec;]])], [gl_cv_sys_struct_timeval=yes], [gl_cv_sys_struct_timeval=no]) ]) if test $gl_cv_sys_struct_timeval != yes; then HAVE_STRUCT_TIMEVAL=0 else dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined dnl (in and for mingw64, in only dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is dnl smaller than the 'time_t' type mandated by POSIX. dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but dnl that is good enough. AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member], [gl_cv_sys_struct_timeval_tv_sec], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_SYS_TIME_H #include #endif #include #if HAVE_WINSOCK2_H # include #endif ]], [[static struct timeval x; typedef int verify_tv_sec_type[ sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 ]; ]])], [gl_cv_sys_struct_timeval_tv_sec=yes], [gl_cv_sys_struct_timeval_tv_sec=no]) ]) if test $gl_cv_sys_struct_timeval_tv_sec != yes; then REPLACE_STRUCT_TIMEVAL=1 fi fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_SYS_TIME_H # include #endif #include ]], [gettimeofday]) ]) AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS], [ GNULIB_GETTIMEOFDAY=0; AC_SUBST([GNULIB_GETTIMEOFDAY]) dnl Assume POSIX behavior unless another module says otherwise. HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY]) HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H]) REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY]) REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) ]) gnuastro-0.5/bootstrapped/m4/sys_stat_h.m40000644000175000017500000000741013217200022015600 00000000000000# sys_stat_h.m4 serial 31 -*- Autoconf -*- dnl Copyright (C) 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Eric Blake. dnl Provide a GNU-like . AC_DEFUN([gl_HEADER_SYS_STAT_H], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl Check for broken stat macros. AC_REQUIRE([AC_HEADER_STAT]) gl_CHECK_NEXT_HEADERS([sys/stat.h]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to enable precise timestamps in 'struct stat'. m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [ AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC]) ], [ WINDOWS_STAT_TIMESPEC=0 ]) AC_SUBST([WINDOWS_STAT_TIMESPEC]) dnl Whether to ensure that struct stat.st_size is 64-bit wide. m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_ST_SIZE=0 ]) AC_SUBST([WINDOWS_64_BIT_ST_SIZE]) dnl Define types that are supposed to be defined in or dnl . AC_CHECK_TYPE([nlink_t], [], [AC_DEFINE([nlink_t], [int], [Define to the type of st_nlink in struct stat, or a supertype.])], [#include #include ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include ]], [fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat]) ]) # gl_HEADER_SYS_STAT_H AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR GNULIB_FCHMODAT=0; AC_SUBST([GNULIB_FCHMODAT]) GNULIB_FSTAT=0; AC_SUBST([GNULIB_FSTAT]) GNULIB_FSTATAT=0; AC_SUBST([GNULIB_FSTATAT]) GNULIB_FUTIMENS=0; AC_SUBST([GNULIB_FUTIMENS]) GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD]) GNULIB_LSTAT=0; AC_SUBST([GNULIB_LSTAT]) GNULIB_MKDIRAT=0; AC_SUBST([GNULIB_MKDIRAT]) GNULIB_MKFIFO=0; AC_SUBST([GNULIB_MKFIFO]) GNULIB_MKFIFOAT=0; AC_SUBST([GNULIB_MKFIFOAT]) GNULIB_MKNOD=0; AC_SUBST([GNULIB_MKNOD]) GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT]) GNULIB_STAT=0; AC_SUBST([GNULIB_STAT]) GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT]) GNULIB_OVERRIDES_STRUCT_STAT=0; AC_SUBST([GNULIB_OVERRIDES_STRUCT_STAT]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT]) HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT]) HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS]) HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD]) HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT]) HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT]) HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO]) HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT]) HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD]) HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT]) HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT]) REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT]) REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT]) REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS]) REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT]) REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR]) REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO]) REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD]) REPLACE_STAT=0; AC_SUBST([REPLACE_STAT]) REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT]) ]) gnuastro-0.5/bootstrapped/m4/sys_socket_h.m40000644000175000017500000001416313217200022016120 00000000000000# sys_socket_h.m4 serial 23 dnl Copyright (C) 2005-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson. AC_DEFUN([gl_HEADER_SYS_SOCKET], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have dnl old-style declarations (with return type 'int' instead of 'ssize_t') dnl unless _POSIX_PII_SOCKET is defined. case "$host_os" in osf*) AC_DEFINE([_POSIX_PII_SOCKET], [1], [Define to 1 in order to get the POSIX compatible declarations of socket functions.]) ;; esac AC_CACHE_CHECK([whether is self-contained], [gl_cv_header_sys_socket_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], [gl_cv_header_sys_socket_h_selfcontained=yes], [gl_cv_header_sys_socket_h_selfcontained=no]) ]) if test $gl_cv_header_sys_socket_h_selfcontained = yes; then dnl If the shutdown function exists, should define dnl SHUT_RD, SHUT_WR, SHUT_RDWR. AC_CHECK_FUNCS([shutdown]) if test $ac_cv_func_shutdown = yes; then AC_CACHE_CHECK([whether defines the SHUT_* macros], [gl_cv_header_sys_socket_h_shut], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], [gl_cv_header_sys_socket_h_shut=yes], [gl_cv_header_sys_socket_h_shut=no]) ]) if test $gl_cv_header_sys_socket_h_shut = no; then SYS_SOCKET_H='sys/socket.h' fi fi fi # We need to check for ws2tcpip.h now. gl_PREREQ_SYS_H_SOCKET AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]) if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], [], [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], [#include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]) fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then SYS_SOCKET_H='sys/socket.h' fi gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include #include ]], [socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4]) ]) AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], [ dnl Check prerequisites of the replacement. AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) gl_CHECK_NEXT_HEADERS([sys/socket.h]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 HAVE_WS2TCPIP_H=0 else HAVE_SYS_SOCKET_H=0 if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi AC_SUBST([HAVE_SYS_SOCKET_H]) AC_SUBST([HAVE_WS2TCPIP_H]) ]) # Common prerequisites of the replacement and of the # replacement. # Sets and substitutes HAVE_WINSOCK2_H. AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], [ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h != yes; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([winsock2.h]) fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi AC_SUBST([HAVE_WINSOCK2_H]) ]) AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], [ GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET]) GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT]) GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT]) GNULIB_BIND=0; AC_SUBST([GNULIB_BIND]) GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME]) GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME]) GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT]) GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN]) GNULIB_RECV=0; AC_SUBST([GNULIB_RECV]) GNULIB_SEND=0; AC_SUBST([GNULIB_SEND]) GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM]) GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO]) GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT]) GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN]) GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4]) HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) ]) gnuastro-0.5/bootstrapped/m4/sys_select_h.m40000644000175000017500000000671613217200022016114 00000000000000# sys_select_h.m4 serial 20 dnl Copyright (C) 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_HEADER_SYS_SELECT], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS]) AC_CACHE_CHECK([whether is self-contained], [gl_cv_header_sys_select_h_selfcontained], [ dnl Test against two bugs: dnl 1. On many platforms, assumes prior inclusion of dnl . dnl 2. On OSF/1 4.0, provides only a forward declaration dnl of 'struct timeval', and no definition of this type. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[struct timeval b;]])], [gl_cv_header_sys_select_h_selfcontained=yes], [gl_cv_header_sys_select_h_selfcontained=no]) dnl Test against another bug: dnl 3. On Solaris 10, provides an FD_ZERO implementation dnl that relies on memset(), but without including . if test $gl_cv_header_sys_select_h_selfcontained = yes; then AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[int memset; int bzero;]]) ], [AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[ #undef memset #define memset nonexistent_memset extern #ifdef __cplusplus "C" #endif void *memset (void *, int, unsigned long); #undef bzero #define bzero nonexistent_bzero extern #ifdef __cplusplus "C" #endif void bzero (void *, unsigned long); fd_set fds; FD_ZERO (&fds); ]]) ], [], [gl_cv_header_sys_select_h_selfcontained=no]) ]) fi ]) dnl is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/select.h]) if test $ac_cv_header_sys_select_h = yes; then HAVE_SYS_SELECT_H=1 else HAVE_SYS_SELECT_H=0 fi AC_SUBST([HAVE_SYS_SELECT_H]) gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include #if !(defined __GLIBC__ && !defined __UCLIBC__) && HAVE_SYS_TIME_H # include #endif #include ]], [pselect select]) ]) AC_DEFUN([gl_SYS_SELECT_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_SYS_SELECT_H_DEFAULTS], [ GNULIB_PSELECT=0; AC_SUBST([GNULIB_PSELECT]) GNULIB_SELECT=0; AC_SUBST([GNULIB_SELECT]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_PSELECT=1; AC_SUBST([HAVE_PSELECT]) REPLACE_PSELECT=0; AC_SUBST([REPLACE_PSELECT]) REPLACE_SELECT=0; AC_SUBST([REPLACE_SELECT]) ]) gnuastro-0.5/bootstrapped/m4/sys_ioctl_h.m40000644000175000017500000000460613217200022015743 00000000000000# sys_ioctl_h.m4 serial 10 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN([gl_SYS_IOCTL_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS]) AC_CHECK_HEADERS_ONCE([sys/ioctl.h]) if test $ac_cv_header_sys_ioctl_h = yes; then HAVE_SYS_IOCTL_H=1 dnl Test whether declares ioctl(), or whether some other dnl header file, such as or , is needed for that. AC_CACHE_CHECK([whether declares ioctl], [gl_cv_decl_ioctl_in_sys_ioctl_h], [dnl We cannot use AC_CHECK_DECL because it produces its own messages. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT([#include ])], [(void) ioctl;])], [gl_cv_decl_ioctl_in_sys_ioctl_h=yes], [gl_cv_decl_ioctl_in_sys_ioctl_h=no]) ]) else HAVE_SYS_IOCTL_H=0 fi AC_SUBST([HAVE_SYS_IOCTL_H]) dnl is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/ioctl.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include /* Some platforms declare ioctl in the wrong header. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include #endif ]], [ioctl]) ]) AC_DEFUN([gl_SYS_IOCTL_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_SYS_IOCTL_H_DEFAULTS], [ GNULIB_IOCTL=0; AC_SUBST([GNULIB_IOCTL]) dnl Assume proper GNU behavior unless another module says otherwise. SYS_IOCTL_H_HAVE_WINSOCK2_H=0; AC_SUBST([SYS_IOCTL_H_HAVE_WINSOCK2_H]) SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) REPLACE_IOCTL=0; AC_SUBST([REPLACE_IOCTL]) ]) gnuastro-0.5/bootstrapped/m4/symlink.m40000644000175000017500000000347113217200022015111 00000000000000# serial 6 # See if we need to provide symlink replacement. dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_SYMLINK], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([symlink]) dnl The best we can do on mingw is provide a dummy that always fails, so dnl that compilation can proceed with fewer ifdefs. On FreeBSD 7.2, AIX 7.1, dnl and Solaris 9, we want to fix a bug with trailing slash handling. if test $ac_cv_func_symlink = no; then HAVE_SYMLINK=0 else AC_CACHE_CHECK([whether symlink handles trailing slash correctly], [gl_cv_func_symlink_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int result = 0; if (!symlink ("a", "conftest.link/")) result |= 1; if (symlink ("conftest.f", "conftest.lnk2")) result |= 2; else if (!symlink ("a", "conftest.lnk2/")) result |= 4; return result; ]])], [gl_cv_func_symlink_works=yes], [gl_cv_func_symlink_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_symlink_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_symlink_works="guessing no" ;; esac ]) rm -f conftest.f conftest.link conftest.lnk2]) case "$gl_cv_func_symlink_works" in *yes) ;; *) REPLACE_SYMLINK=1 ;; esac fi ]) gnuastro-0.5/bootstrapped/m4/strtok_r.m40000644000175000017500000000506013217200022015266 00000000000000# strtok_r.m4 serial 14 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2017 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOK_R], [ dnl The strtok_r() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS([strtok_r]) if test $ac_cv_func_strtok_r = yes; then HAVE_STRTOK_R=1 dnl glibc 2.7 has a bug in strtok_r that causes a segmentation fault dnl when the second argument to strtok_r is a constant string that has dnl exactly one byte and compiling with optimization. This bug is, for dnl example, present in the glibc 2.7-18 package in Debian "lenny". dnl See . AC_CACHE_CHECK([whether strtok_r works], [gl_cv_func_strtok_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #ifndef __OPTIMIZE__ # define __OPTIMIZE__ 1 #endif #undef __OPTIMIZE_SIZE__ #undef __NO_INLINE__ #include #include ]], [[static const char dummy[] = "\177\01a"; char delimiters[] = "xxxxxxxx"; char *save_ptr = (char *) dummy; strtok_r (delimiters, "x", &save_ptr); strtok_r (NULL, "x", &save_ptr); return 0; ]]) ], [gl_cv_func_strtok_r_works=yes], [gl_cv_func_strtok_r_works=no], [case "$host_os" in # Guess no on glibc systems. *-gnu*) gl_cv_func_strtok_r_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strtok_r_works="guessing yes" ;; *) gl_cv_func_strtok_r_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_strtok_r_works" in *no) dnl We could set REPLACE_STRTOK_R=1 here, but it's only the macro dnl version in which is wrong. The code compiled dnl into libc is fine. UNDEFINE_STRTOK_R=1 ;; esac else HAVE_STRTOK_R=0 fi AC_CHECK_DECLS_ONCE([strtok_r]) if test $ac_cv_have_decl_strtok_r = no; then HAVE_DECL_STRTOK_R=0 fi ]) # Prerequisites of lib/strtok_r.c. AC_DEFUN([gl_PREREQ_STRTOK_R], [ : ]) gnuastro-0.5/bootstrapped/m4/strtod.m40000644000175000017500000001016113217200022014734 00000000000000# strtod.m4 serial 23 dnl Copyright (C) 2002-2003, 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOD], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRTOD_OBSOLETE], [ dnl Test whether strtod is declared. dnl Don't call AC_FUNC_STRTOD, because it does not have the right guess dnl when cross-compiling. dnl Don't call AC_CHECK_FUNCS([strtod]) because it would collide with the dnl ac_cv_func_strtod variable set by the AC_FUNC_STRTOD macro. AC_CHECK_DECLS_ONCE([strtod]) if test $ac_cv_have_decl_strtod != yes; then HAVE_STRTOD=0 fi ]) if test $HAVE_STRTOD = 1; then AC_CACHE_CHECK([whether strtod obeys C99], [gl_cv_func_strtod_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include #include /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } ]], [[ int result = 0; { /* In some old versions of Linux (2000 or before), strtod mis-parses strings with leading '+'. */ const char *string = " +69"; char *term; double value = strtod (string, &term); if (value != 69 || term != (string + 4)) result |= 1; } { /* Under Solaris 2.4, strtod returns the wrong value for the terminating character under some conditions. */ const char *string = "NaN"; char *term; strtod (string, &term); if (term != string && *(term - 1) == 0) result |= 2; } { /* Older glibc and Cygwin mis-parse "-0x". */ const char *string = "-0x"; char *term; double value = strtod (string, &term); double zero = 0.0; if (1.0 / value != -1.0 / zero || term != (string + 2)) result |= 4; } { /* Many platforms do not parse hex floats. */ const char *string = "0XaP+1"; char *term; double value = strtod (string, &term); if (value != 20.0 || term != (string + 6)) result |= 8; } { /* Many platforms do not parse infinities. HP-UX 11.31 parses inf, but mistakenly sets errno. */ const char *string = "inf"; char *term; double value; errno = 0; value = strtod (string, &term); if (value != HUGE_VAL || term != (string + 3) || errno) result |= 16; } { /* glibc 2.7 and cygwin 1.5.24 misparse "nan()". */ const char *string = "nan()"; char *term; double value = strtod (string, &term); if (numeric_equal (value, value) || term != (string + 5)) result |= 32; } { /* darwin 10.6.1 misparses "nan(". */ const char *string = "nan("; char *term; double value = strtod (string, &term); if (numeric_equal (value, value) || term != (string + 3)) result |= 64; } return result; ]])], [gl_cv_func_strtod_works=yes], [gl_cv_func_strtod_works=no], [dnl The last known bugs in glibc strtod(), as of this writing, dnl were fixed in version 2.8 AC_EGREP_CPP([Lucky user], [ #include #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif ], [gl_cv_func_strtod_works="guessing yes"], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_strtod_works="guessing yes" ;; *) gl_cv_func_strtod_works="guessing no" ;; esac ]) ]) ]) case "$gl_cv_func_strtod_works" in *yes) ;; *) REPLACE_STRTOD=1 ;; esac fi ]) # Prerequisites of lib/strtod.c. AC_DEFUN([gl_PREREQ_STRTOD], [ AC_REQUIRE([gl_CHECK_LDEXP_NO_LIBM]) if test $gl_cv_func_ldexp_no_libm = yes; then AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1], [Define if the ldexp function is available in libc.]) fi ]) gnuastro-0.5/bootstrapped/m4/strnlen.m40000644000175000017500000000156113217200022015106 00000000000000# strnlen.m4 serial 13 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2017 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRNLEN], [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) dnl Persuade glibc to declare strnlen(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([strnlen]) if test $ac_cv_have_decl_strnlen = no; then HAVE_DECL_STRNLEN=0 else m4_pushdef([AC_LIBOBJ], [:]) dnl Note: AC_FUNC_STRNLEN does AC_LIBOBJ([strnlen]). AC_FUNC_STRNLEN m4_popdef([AC_LIBOBJ]) if test $ac_cv_func_strnlen_working = no; then REPLACE_STRNLEN=1 fi fi ]) # Prerequisites of lib/strnlen.c. AC_DEFUN([gl_PREREQ_STRNLEN], [:]) gnuastro-0.5/bootstrapped/m4/strndup.m40000644000175000017500000000327413217200022015123 00000000000000# strndup.m4 serial 22 dnl Copyright (C) 2002-2003, 2005-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRNDUP], [ dnl Persuade glibc to declare strndup(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([strndup]) AC_CHECK_FUNCS_ONCE([strndup]) if test $ac_cv_have_decl_strndup = no; then HAVE_DECL_STRNDUP=0 fi if test $ac_cv_func_strndup = yes; then HAVE_STRNDUP=1 # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM([[#include #include ]], [[ #if !HAVE_DECL_STRNDUP extern #ifdef __cplusplus "C" #endif char *strndup (const char *, size_t); #endif int result; char *s; s = strndup ("some longer string", 15); free (s); s = strndup ("shorter string", 13); result = s[13] != '\0'; free (s); return result;]])], [gl_cv_func_strndup_works=yes], [gl_cv_func_strndup_works=no], [ changequote(,)dnl case $host_os in aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; *) gl_cv_func_strndup_works="guessing yes";; esac changequote([,])dnl ])]) case $gl_cv_func_strndup_works in *no) REPLACE_STRNDUP=1 ;; esac else HAVE_STRNDUP=0 fi ]) gnuastro-0.5/bootstrapped/m4/strings_h.m40000644000175000017500000000316313217200022015421 00000000000000# Configure a replacement for . # serial 6 # Copyright (C) 2007, 2009-2017 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. AC_DEFUN([gl_HEADER_STRINGS_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_HEADER_STRINGS_H_BODY]) ]) AC_DEFUN([gl_HEADER_STRINGS_H_BODY], [ AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([strings.h]) if test $ac_cv_header_strings_h = yes; then HAVE_STRINGS_H=1 else HAVE_STRINGS_H=0 fi AC_SUBST([HAVE_STRINGS_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Minix 3.1.8 has a bug: must be included before . */ #include #include ]], [ffs strcasecmp strncasecmp]) ]) AC_DEFUN([gl_STRINGS_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_HEADER_STRINGS_H_DEFAULTS], [ GNULIB_FFS=0; AC_SUBST([GNULIB_FFS]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FFS=1; AC_SUBST([HAVE_FFS]) HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP]) HAVE_DECL_STRNCASECMP=1; AC_SUBST([HAVE_DECL_STRNCASECMP]) ]) gnuastro-0.5/bootstrapped/m4/string_h.m40000644000175000017500000001311113217200022015230 00000000000000# Configure a GNU-like replacement for . # Copyright (C) 2007-2017 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. # serial 22 # Written by Paul Eggert. AC_DEFUN([gl_HEADER_STRING_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_HEADER_STRING_H_BODY]) ]) AC_DEFUN([gl_HEADER_STRING_H_BODY], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_NEXT_HEADERS([string.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include ]], [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp]) ]) AC_DEFUN([gl_STRING_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], [ GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO]) GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) gnuastro-0.5/bootstrapped/m4/strerror_r.m40000644000175000017500000001506713217200022015632 00000000000000# strerror_r.m4 serial 19 dnl Copyright (C) 2002, 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRERROR_R], [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) dnl Persuade Solaris to declare strerror_r(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Some systems don't declare strerror_r() if _THREAD_SAFE and _REENTRANT dnl are not defined. AC_CHECK_DECLS_ONCE([strerror_r]) if test $ac_cv_have_decl_strerror_r = no; then HAVE_DECL_STRERROR_R=0 fi if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then if test $gl_cv_func_strerror_r_posix_signature = yes; then case "$gl_cv_func_strerror_r_works" in dnl The system's strerror_r has bugs. Replace it. *no) REPLACE_STRERROR_R=1 ;; esac else dnl The system's strerror_r() has a wrong signature. Replace it. REPLACE_STRERROR_R=1 fi else dnl The system's strerror_r() cannot know about the new errno values we dnl add to , or any fix for strerror(0). Replace it. REPLACE_STRERROR_R=1 fi fi ]) # Prerequisites of lib/strerror_r.c. AC_DEFUN([gl_PREREQ_STRERROR_R], [ dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r. AC_CHECK_FUNCS_ONCE([__xpg_strerror_r]) AC_CHECK_FUNCS_ONCE([catgets]) AC_CHECK_FUNCS_ONCE([snprintf]) ]) # Detect if strerror_r works, but without affecting whether a replacement # strerror_r will be used. AC_DEFUN([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_CHECK_FUNCS_ONCE([strerror_r]) if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then dnl The POSIX prototype is: int strerror_r (int, char *, size_t); dnl glibc, Cygwin: char *strerror_r (int, char *, size_t); dnl AIX 5.1, OSF/1 5.1: int strerror_r (int, char *, int); AC_CACHE_CHECK([for strerror_r with POSIX signature], [gl_cv_func_strerror_r_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include int strerror_r (int, char *, size_t); ]], [])], [gl_cv_func_strerror_r_posix_signature=yes], [gl_cv_func_strerror_r_posix_signature=no]) ]) if test $gl_cv_func_strerror_r_posix_signature = yes; then dnl AIX 6.1 strerror_r fails by returning -1, not an error number. dnl HP-UX 11.31 strerror_r always fails when the buffer length argument dnl is less than 80. dnl FreeBSD 8.s strerror_r claims failure on 0 dnl Mac OS X 10.5 strerror_r treats 0 like -1 dnl Solaris 10 strerror_r corrupts errno on failure AC_CACHE_CHECK([whether strerror_r works], [gl_cv_func_strerror_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[int result = 0; char buf[79]; if (strerror_r (EACCES, buf, 0) < 0) result |= 1; errno = 0; if (strerror_r (EACCES, buf, sizeof buf) != 0) result |= 2; strcpy (buf, "Unknown"); if (strerror_r (0, buf, sizeof buf) != 0) result |= 4; if (errno) result |= 8; if (strstr (buf, "nknown") || strstr (buf, "ndefined")) result |= 0x10; errno = 0; *buf = 0; if (strerror_r (-3, buf, sizeof buf) < 0) result |= 0x20; if (errno) result |= 0x40; if (!*buf) result |= 0x80; return result; ]])], [gl_cv_func_strerror_r_works=yes], [gl_cv_func_strerror_r_works=no], [ changequote(,)dnl case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on HP-UX. hpux*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on BSD variants. *bsd*) gl_cv_func_strerror_r_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_strerror_r_works="guessing yes";; esac changequote([,])dnl ]) ]) else dnl The system's strerror() has a wrong signature. dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r. AC_CHECK_FUNCS_ONCE([__xpg_strerror_r]) dnl In glibc < 2.14, __xpg_strerror_r does not populate buf on failure. dnl In cygwin < 1.7.10, __xpg_strerror_r clobbers strerror's buffer. if test $ac_cv_func___xpg_strerror_r = yes; then AC_CACHE_CHECK([whether __xpg_strerror_r works], [gl_cv_func_strerror_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include extern #ifdef __cplusplus "C" #endif int __xpg_strerror_r(int, char *, size_t); ]], [[int result = 0; char buf[256] = "^"; char copy[256]; char *str = strerror (-1); strcpy (copy, str); if (__xpg_strerror_r (-2, buf, 1) == 0) result |= 1; if (*buf) result |= 2; __xpg_strerror_r (-2, buf, 256); if (strcmp (str, copy)) result |= 4; return result; ]])], [gl_cv_func_strerror_r_works=yes], [gl_cv_func_strerror_r_works=no], [dnl Guess no on all platforms that have __xpg_strerror_r, dnl at least until fixed glibc and cygwin are more common. gl_cv_func_strerror_r_works="guessing no" ]) ]) fi fi fi fi ]) gnuastro-0.5/bootstrapped/m4/strerror.m40000644000175000017500000000641513217200022015306 00000000000000# strerror.m4 serial 18 dnl Copyright (C) 2002, 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRERROR], [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) ]) if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then AC_CACHE_CHECK([for working strerror function], [gl_cv_func_working_strerror], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[if (!*strerror (-2)) return 1;]])], [gl_cv_func_working_strerror=yes], [gl_cv_func_working_strerror=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_working_strerror="guessing no" ;; esac ]) ]) case "$gl_cv_func_working_strerror" in *yes) ;; *) dnl The system's strerror() fails to return a string for out-of-range dnl integers. Replace it. REPLACE_STRERROR=1 ;; esac m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's dnl buffer, we must replace strerror. case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac ]) else dnl The system's strerror() cannot know about the new errno values we add dnl to , or any fix for strerror(0). Replace it. REPLACE_STRERROR=1 fi ]) dnl Detect if strerror(0) passes (that is, does not set errno, and does not dnl return a string that matches strerror(-1)). AC_DEFUN([gl_FUNC_STRERROR_0], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles REPLACE_STRERROR_0=0 AC_CACHE_CHECK([whether strerror(0) succeeds], [gl_cv_func_strerror_0_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result;]])], [gl_cv_func_strerror_0_works=yes], [gl_cv_func_strerror_0_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_strerror_0_works="guessing no" ;; esac ]) ]) case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) does not return a message implying success.]) ;; esac ]) gnuastro-0.5/bootstrapped/m4/strchrnul.m40000644000175000017500000000276613217200022015455 00000000000000# strchrnul.m4 serial 9 dnl Copyright (C) 2003, 2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRCHRNUL], [ dnl Persuade glibc to declare strchrnul(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strchrnul]) if test $ac_cv_func_strchrnul = no; then HAVE_STRCHRNUL=0 else AC_CACHE_CHECK([whether strchrnul works], [gl_cv_func_strchrnul_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include /* for strchrnul */ ]], [[const char *buf = "a"; return strchrnul (buf, 'b') != buf + 1; ]])], [gl_cv_func_strchrnul_works=yes], [gl_cv_func_strchrnul_works=no], [dnl Cygwin 1.7.9 introduced strchrnul, but it was broken until 1.7.10 AC_EGREP_CPP([Lucky user], [ #if defined __CYGWIN__ #include #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) Lucky user #endif #else Lucky user #endif ], [gl_cv_func_strchrnul_works="guessing yes"], [gl_cv_func_strchrnul_works="guessing no"]) ]) ]) case "$gl_cv_func_strchrnul_works" in *yes) ;; *) REPLACE_STRCHRNUL=1 ;; esac fi ]) # Prerequisites of lib/strchrnul.c. AC_DEFUN([gl_PREREQ_STRCHRNUL], [:]) gnuastro-0.5/bootstrapped/m4/strcase.m40000644000175000017500000000201213217200022015055 00000000000000# strcase.m4 serial 11 dnl Copyright (C) 2002, 2005-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STRCASE], [ gl_FUNC_STRCASECMP gl_FUNC_STRNCASECMP ]) AC_DEFUN([gl_FUNC_STRCASECMP], [ AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) AC_CHECK_FUNCS([strcasecmp]) if test $ac_cv_func_strcasecmp = no; then HAVE_STRCASECMP=0 fi ]) AC_DEFUN([gl_FUNC_STRNCASECMP], [ AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) AC_CHECK_FUNCS([strncasecmp]) if test $ac_cv_func_strncasecmp = yes; then HAVE_STRNCASECMP=1 else HAVE_STRNCASECMP=0 fi AC_CHECK_DECLS([strncasecmp]) if test $ac_cv_have_decl_strncasecmp = no; then HAVE_DECL_STRNCASECMP=0 fi ]) # Prerequisites of lib/strcasecmp.c. AC_DEFUN([gl_PREREQ_STRCASECMP], [ : ]) # Prerequisites of lib/strncasecmp.c. AC_DEFUN([gl_PREREQ_STRNCASECMP], [ : ]) gnuastro-0.5/bootstrapped/m4/stdlib_h.m40000644000175000017500000001375013217200022015214 00000000000000# stdlib_h.m4 serial 44 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STDLIB_H], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_NEXT_HEADERS([stdlib.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include #if HAVE_SYS_LOADAVG_H # include #endif #if HAVE_RANDOM_H # include #endif ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtoll strtoull unlockpt unsetenv]) ]) AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_STDLIB_H_DEFAULTS], [ GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT]) GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL]) GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME]) GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG]) GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT]) GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC]) GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP]) GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS]) GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS]) GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT]) GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME]) GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R]) GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R]) GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM]) GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) GNULIB_REALLOCARRAY=0; AC_SUBST([GNULIB_REALLOCARRAY]) GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH]) GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV]) GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX]) GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT]) GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) HAVE_DECL_INITSTATE=1; AC_SUBST([HAVE_DECL_INITSTATE]) HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R]) HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY]) HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE]) HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC]) REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME]) REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC]) REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) ]) gnuastro-0.5/bootstrapped/m4/stdio_h.m40000644000175000017500000002525613217200022015061 00000000000000# stdio_h.m4 serial 48 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STDIO_H], [ AH_VERBATIM([MINGW_ANSI_STDIO], [/* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif ]) AC_DEFINE([__USE_MINGW_ANSI_STDIO]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_NEXT_HEADERS([stdio.h]) dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and dnl inttypes.h behave like gnu instead of system; we must give our dnl printf wrapper the right attribute to match. AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros], [gl_cv_func_printf_attribute_flavor], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define __STDC_FORMAT_MACROS 1 #include #include /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif ]])], [gl_cv_func_printf_attribute_flavor=system], [gl_cv_func_printf_attribute_flavor=gnu])]) if test "$gl_cv_func_printf_attribute_flavor" = gnu; then AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1], [Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__"]) fi dnl No need to create extra modules for these functions. Everyone who uses dnl likely needs them. GNULIB_FSCANF=1 gl_MODULE_INDICATOR([fscanf]) GNULIB_SCANF=1 gl_MODULE_INDICATOR([scanf]) GNULIB_FGETC=1 GNULIB_GETC=1 GNULIB_GETCHAR=1 GNULIB_FGETS=1 GNULIB_FREAD=1 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING dnl or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_READ_FUNCS=1 AC_LIBOBJ([stdio-read]) fi ]) dnl No need to create extra modules for these functions. Everyone who uses dnl likely needs them. GNULIB_FPRINTF=1 GNULIB_PRINTF=1 GNULIB_VFPRINTF=1 GNULIB_VPRINTF=1 GNULIB_FPUTC=1 GNULIB_PUTC=1 GNULIB_PUTCHAR=1 GNULIB_FPUTS=1 GNULIB_PUTS=1 GNULIB_FWRITE=1 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or dnl GNULIB_SIGPIPE redundant. m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_STDIO_WRITE_FUNCS=1 AC_LIBOBJ([stdio-write]) fi ]) dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING dnl or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_WRITE_FUNCS=1 AC_LIBOBJ([stdio-write]) fi ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by both C89 and C11. gl_WARN_ON_USE_PREPARE([[#include ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf]) ]) AC_DEFUN([gl_STDIO_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_STDIO_H_DEFAULTS], [ GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF]) GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE]) GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN]) GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC]) GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS]) GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF]) GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE]) GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC]) GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS]) GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD]) GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF]) GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE]) GNULIB_GETC=0; AC_SUBST([GNULIB_GETC]) GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR]) GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF]) GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX]) GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE]) GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR]) GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN]) GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF]) GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC]) GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR]) GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS]) GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE]) GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME]) GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT]) GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF]) GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING]) GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE]) GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF]) GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF]) GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF]) GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) ]) gnuastro-0.5/bootstrapped/m4/stdint_h.m40000644000175000017500000000174313217200022015237 00000000000000# stdint_h.m4 serial 9 dnl Copyright (C) 1997-2004, 2006, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_stdint_h=yes], [gl_cv_header_stdint_h=no])]) if test $gl_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) gnuastro-0.5/bootstrapped/m4/stdint.m40000644000175000017500000004373513217200022014737 00000000000000# stdint.m4 serial 51 dnl Copyright (C) 2001-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Bruno Haible. dnl Test whether is supported or must be substituted. AC_DEFUN_ONCE([gl_STDINT_H], [ AC_PREREQ([2.59])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_LIMITS_H]) AC_REQUIRE([gt_TYPE_WINT_T]) dnl Check for long long int and unsigned long long int. AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) if test $ac_cv_type_long_long_int = yes; then HAVE_LONG_LONG_INT=1 else HAVE_LONG_LONG_INT=0 fi AC_SUBST([HAVE_LONG_LONG_INT]) AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) if test $ac_cv_type_unsigned_long_long_int = yes; then HAVE_UNSIGNED_LONG_LONG_INT=1 else HAVE_UNSIGNED_LONG_LONG_INT=0 fi AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) dnl Check for , in the same way as gl_WCHAR_H does. AC_CHECK_HEADERS_ONCE([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) dnl Check for . dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi AC_SUBST([HAVE_INTTYPES_H]) dnl Check for . dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi AC_SUBST([HAVE_SYS_TYPES_H]) gl_CHECK_NEXT_HEADERS([stdint.h]) if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi AC_SUBST([HAVE_STDINT_H]) dnl Now see whether we need a substitute . if test $ac_cv_header_stdint_h = yes; then AC_CACHE_CHECK([whether stdint.h conforms to C99], [gl_cv_header_working_stdint_h], [gl_cv_header_working_stdint_h=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in " #endif ] gl_STDINT_INCLUDES [ #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0 / ia64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; ]])], [dnl Determine whether the various *_MIN, *_MAX macros are usable dnl in preprocessor expression. We could do it by compiling a test dnl program for each of these macros. It is faster to run a program dnl that inspects the macro expansion. dnl This detects a bug on HP-UX 11.23/ia64. AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include ] gl_STDINT_INCLUDES [ #include #include #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; ]], [[ const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ]])], [gl_cv_header_working_stdint_h=yes], [], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac ]) ]) ]) fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 STDINT_H=stdint.h case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 dnl Now see whether the system works without dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. AC_CACHE_CHECK([whether stdint.h predates C++11], [gl_cv_header_stdint_predates_cxx11_h], [gl_cv_header_stdint_predates_cxx11_h=yes AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include ] gl_STDINT_INCLUDES [ intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); ]])], [gl_cv_header_stdint_predates_cxx11_h=no])]) if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then AC_DEFINE([__STDC_CONSTANT_MACROS], [1], [Define to 1 if the system predates C++11.]) AC_DEFINE([__STDC_LIMIT_MACROS], [1], [Define to 1 if the system predates C++11.]) fi AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], [gl_cv_header_stdint_width], [gl_cv_header_stdint_width=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include ]gl_STDINT_INCLUDES[ int iw = UINTMAX_WIDTH; ]])], [gl_cv_header_stdint_width=yes])]) if test "$gl_cv_header_stdint_width" = yes; then STDINT_H= fi ;; *) dnl Check for , and for dnl (used in Linux libc4 >= 4.6.7 and libc5). AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi gl_STDINT_TYPE_PROPERTIES ;; esac dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. LIMITS_H=limits.h AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) AC_SUBST([HAVE_C99_STDINT_H]) AC_SUBST([HAVE_SYS_BITYPES_H]) AC_SUBST([HAVE_SYS_INTTYPES_H]) AC_SUBST([STDINT_H]) AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"]) ]) dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) dnl Determine the size of each of the given types in bits. AC_DEFUN([gl_STDINT_BITSIZEOF], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to the number of bits in type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], [$2 #include ], [result=unknown]) eval gl_cv_bitsizeof_${gltype}=\$result ]) eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, dnl do a syntax check even on unused #if conditions and give an error dnl on valid C code like this: dnl #if 0 dnl # if > 32 dnl # endif dnl #endif result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) eval BITSIZEOF_${GLTYPE}=\$result done m4_foreach_w([gltype], [$1], [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) dnl Determine the signedness of each of the given types. dnl Define HAVE_SIGNED_TYPE if type is signed. AC_DEFUN([gl_CHECK_TYPES_SIGNED], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to 1 if ']gltype[' is a signed integer type.])]) for gltype in $1 ; do AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], result=yes, result=no) eval gl_cv_type_${gltype}_signed=\$result ]) eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done m4_foreach_w([gltype], [$1], [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) dnl Determine the suffix to use for integer constants of the given types. dnl Define t_SUFFIX for each such type. AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], [Define to l, ll, u, ul, ull, etc., as suitable for constants of type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for $gltype integer literal suffix], [gl_cv_type_${gltype}_suffix], [eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ extern $gltype foo; extern $gltype1 foo;]])], [eval gl_cv_type_${gltype}_suffix=\$glsuf]) eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done]) GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) done m4_foreach_w([gltype], [$1], [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) ]) dnl gl_STDINT_INCLUDES AC_DEFUN([gl_STDINT_INCLUDES], [[ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif ]]) dnl gl_STDINT_TYPE_PROPERTIES dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t dnl of interest to stdint.in.h. AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], [ AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_STDINT_BITSIZEOF([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 dnl requirement that wint_t is "unchanged by default argument promotions". dnl In this case gnulib's and override wint_t. dnl Set the variable BITSIZEOF_WINT_T accordingly. if test $GNULIB_OVERRIDES_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) gnuastro-0.5/bootstrapped/m4/stddef_h.m40000644000175000017500000000321613217200022015200 00000000000000dnl A placeholder for , for platforms that have issues. # stddef_h.m4 serial 5 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STDDEF_H], [ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) STDDEF_H= AC_CHECK_TYPE([max_align_t], [], [HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h], [[#include ]]) if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], [gl_cv_decl_null_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include int test[2 * (sizeof NULL == sizeof (void *)) -1]; ]])], [gl_cv_decl_null_works=yes], [gl_cv_decl_null_works=no])]) if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi AC_SUBST([STDDEF_H]) AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) if test -n "$STDDEF_H"; then gl_NEXT_HEADERS([stddef.h]) fi ]) AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_STDDEF_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) ]) gnuastro-0.5/bootstrapped/m4/stdbool.m40000644000175000017500000000671613217200022015076 00000000000000# Check for stdbool.h that conforms to C99. dnl Copyright (C) 2002-2006, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. #serial 7 # Prepare for substituting if it is not supported. AC_DEFUN([AM_STDBOOL_H], [ AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) # Define two additional variables used in the Makefile substitution. if test "$ac_cv_header_stdbool_h" = yes; then STDBOOL_H='' else STDBOOL_H='stdbool.h' fi AC_SUBST([STDBOOL_H]) AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi AC_SUBST([HAVE__BOOL]) ]) # AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) # This version of the macro is needed in autoconf <= 2.68. AC_DEFUN([AC_CHECK_HEADER_STDBOOL], [AC_CACHE_CHECK([for stdbool.h that conforms to C99], [ac_cv_header_stdbool_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; ]], [[ bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ]])], [ac_cv_header_stdbool_h=yes], [ac_cv_header_stdbool_h=no])]) AC_CHECK_TYPES([_Bool]) ]) gnuastro-0.5/bootstrapped/m4/stdalign.m40000644000175000017500000000442713217200022015232 00000000000000# Check for stdalign.h that conforms to C11. dnl Copyright 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prepare for substituting if it is not supported. AC_DEFUN([gl_STDALIGN_H], [ AC_CACHE_CHECK([for working stdalign.h], [gl_cv_header_working_stdalign_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include #include /* Test that alignof yields a result consistent with offsetof. This catches GCC bug 52023 . */ #ifdef __cplusplus template struct alignof_helper { char a; t b; }; # define ao(type) offsetof (alignof_helper, b) #else # define ao(type) offsetof (struct { char a; type b; }, b) #endif char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; /* Test _Alignas only on platforms where gnulib can help. */ #if \ ((defined __cplusplus && 201103 <= __cplusplus) \ || (defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \ || 1300 <= _MSC_VER) struct alignas_test { char c; char alignas (8) alignas_8; }; char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 ? 1 : -1]; #endif ]])], [gl_cv_header_working_stdalign_h=yes], [gl_cv_header_working_stdalign_h=no])]) if test $gl_cv_header_working_stdalign_h = yes; then STDALIGN_H='' else STDALIGN_H='stdalign.h' fi AC_SUBST([STDALIGN_H]) AM_CONDITIONAL([GL_GENERATE_STDALIGN_H], [test -n "$STDALIGN_H"]) ]) gnuastro-0.5/bootstrapped/m4/stat.m40000644000175000017500000000461713217200022014401 00000000000000# serial 13 # Copyright (C) 2009-2017 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. AC_DEFUN([gl_FUNC_STAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([lstat]) case "$host_os" in mingw*) dnl On this platform, the original stat() returns st_atime, st_mtime, dnl st_ctime values that are affected by the time zone. REPLACE_STAT=1 ;; *) dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/"). dnl (For mingw, this is due to a broken stat() override in libmingwex.a.) dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/"). AC_CACHE_CHECK([whether stat handles trailing slashes on files], [gl_cv_func_stat_file_slash], [touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int result = 0; struct stat st; if (!stat ("conftest.tmp/", &st)) result |= 1; #if HAVE_LSTAT if (!stat ("conftest.lnk/", &st)) result |= 2; #endif return result; ]])], [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_stat_file_slash="guessing no" ;; esac ]) rm -f conftest.tmp conftest.lnk]) case $gl_cv_func_stat_file_slash in *no) REPLACE_STAT=1 AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs help when passed a file name with a trailing slash]);; esac case $host_os in dnl Solaris stat can return a negative tv_nsec. solaris*) REPLACE_FSTAT=1 ;; esac ;; esac ]) # Prerequisites of lib/stat.c and lib/stat-w32.c. AC_DEFUN([gl_PREREQ_STAT], [ AC_REQUIRE([gl_HEADER_SYS_STAT_H]) : ]) gnuastro-0.5/bootstrapped/m4/stat-time.m40000644000175000017500000000605713217200022015335 00000000000000# Checks for stat-related time functions. # Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2017 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. dnl From Paul Eggert. # st_atim.tv_nsec - Linux, Solaris, Cygwin # st_atimespec.tv_nsec - FreeBSD, NetBSD, if ! defined _POSIX_SOURCE # st_atimensec - FreeBSD, NetBSD, if defined _POSIX_SOURCE # st_atim.st__tim.tv_nsec - UnixWare (at least 2.1.2 through 7.1) # st_birthtimespec - FreeBSD, NetBSD (hidden on OpenBSD 3.9, anyway) # st_birthtim - Cygwin 1.7.0+ AC_DEFUN([gl_STAT_TIME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec], [AC_CACHE_CHECK([whether struct stat.st_atim is of type struct timespec], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[ #include #include #if HAVE_SYS_TIME_H # include #endif #include struct timespec ts; struct stat st; ]], [[ st.st_atim = ts; ]])], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])]) if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then AC_DEFINE([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [1], [Define to 1 if the type of the st_atim member of a struct stat is struct timespec.]) fi], [AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec], [], [AC_CHECK_MEMBERS([struct stat.st_atimensec], [], [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [], [#include #include ])], [#include #include ])], [#include #include ])], [#include #include ]) ]) # Check for st_birthtime, a feature from UFS2 (FreeBSD, NetBSD, OpenBSD, etc.) # and NTFS (Cygwin). # There was a time when this field was named st_createtime (21 June # 2002 to 16 July 2002) But that window is very small and applied only # to development code, so systems still using that configuration are # not supported. See revisions 1.10 and 1.11 of FreeBSD's # src/sys/ufs/ufs/dinode.h. # AC_DEFUN([gl_STAT_BIRTHTIME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [], [AC_CHECK_MEMBERS([struct stat.st_birthtimensec], [], [AC_CHECK_MEMBERS([struct stat.st_birthtim.tv_nsec], [], [], [#include #include ])], [#include #include ])], [#include #include ]) ]) gnuastro-0.5/bootstrapped/m4/ssize_t.m40000644000175000017500000000146313217200022015102 00000000000000# ssize_t.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2001-2003, 2006, 2010-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether ssize_t is defined. AC_DEFUN([gt_TYPE_SSIZE_T], [ AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x;]])], [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) if test $gt_cv_ssize_t = no; then AC_DEFINE([ssize_t], [int], [Define as a signed type of the same size as size_t.]) fi ]) gnuastro-0.5/bootstrapped/m4/sockpfaf.m40000644000175000017500000000522613217200022015217 00000000000000# sockpfaf.m4 serial 8 dnl Copyright (C) 2004, 2006, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Test for some common socket protocol families (PF_INET, PF_INET6, ...) dnl and some common address families (AF_INET, AF_INET6, ...). dnl This test assumes that a system supports an address family if and only if dnl it supports the corresponding protocol family. dnl From Bruno Haible. AC_DEFUN([gl_SOCKET_FAMILIES], [ AC_REQUIRE([gl_HEADER_SYS_SOCKET]) AC_CHECK_HEADERS_ONCE([netinet/in.h]) AC_MSG_CHECKING([for IPv4 sockets]) AC_CACHE_VAL([gl_cv_socket_ipv4], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif]], [[int x = AF_INET; struct in_addr y; struct sockaddr_in z; if (&x && &y && &z) return 0;]])], gl_cv_socket_ipv4=yes, gl_cv_socket_ipv4=no)]) AC_MSG_RESULT([$gl_cv_socket_ipv4]) if test $gl_cv_socket_ipv4 = yes; then AC_DEFINE([HAVE_IPV4], [1], [Define to 1 if defines AF_INET.]) fi AC_MSG_CHECKING([for IPv6 sockets]) AC_CACHE_VAL([gl_cv_socket_ipv6], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif]], [[int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z; if (&x && &y && &z) return 0;]])], gl_cv_socket_ipv6=yes, gl_cv_socket_ipv6=no)]) AC_MSG_RESULT([$gl_cv_socket_ipv6]) if test $gl_cv_socket_ipv6 = yes; then AC_DEFINE([HAVE_IPV6], [1], [Define to 1 if defines AF_INET6.]) fi ]) AC_DEFUN([gl_SOCKET_FAMILY_UNIX], [ AC_REQUIRE([gl_HEADER_SYS_SOCKET]) AC_CHECK_HEADERS_ONCE([sys/un.h]) AC_MSG_CHECKING([for UNIX domain sockets]) AC_CACHE_VAL([gl_cv_socket_unix], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_SYS_UN_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif]], [[int x = AF_UNIX; struct sockaddr_un y; if (&x && &y) return 0;]])], gl_cv_socket_unix=yes, gl_cv_socket_unix=no)]) AC_MSG_RESULT([$gl_cv_socket_unix]) if test $gl_cv_socket_unix = yes; then AC_DEFINE([HAVE_UNIXSOCKET], [1], [Define to 1 if defines AF_UNIX.]) fi ]) gnuastro-0.5/bootstrapped/m4/socklen.m40000644000175000017500000000623613217200022015063 00000000000000# socklen.m4 serial 10 dnl Copyright (C) 2005-2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Albert Chin, Windows fixes from Simon Josefsson. dnl Check for socklen_t: historically on BSD it is an int, and in dnl POSIX 1g it is a type of its own, but some platforms use different dnl types for the argument to getsockopt, getpeername, etc.: dnl HP-UX 10.20, IRIX 6.5, OSF/1 4.0, Interix 3.5, BeOS. dnl So we have to test to find something that will work. AC_DEFUN([gl_TYPE_SOCKLEN_T], [AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])dnl AC_CHECK_TYPE([socklen_t], , [AC_MSG_CHECKING([for socklen_t equivalent]) AC_CACHE_VAL([gl_cv_socklen_t_equiv], [# Systems have either "struct sockaddr *" or # "void *" as the second argument to getpeername gl_cv_socklen_t_equiv= for arg2 in "struct sockaddr" void; do for t in int size_t "unsigned int" "long int" "unsigned long int"; do AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[#include #include int getpeername (int, $arg2 *, $t *);]], [[$t len; getpeername (0, 0, &len);]])], [gl_cv_socklen_t_equiv="$t"]) test "$gl_cv_socklen_t_equiv" != "" && break done test "$gl_cv_socklen_t_equiv" != "" && break done ]) if test "$gl_cv_socklen_t_equiv" = ""; then AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) fi AC_MSG_RESULT([$gl_cv_socklen_t_equiv]) AC_DEFINE_UNQUOTED([socklen_t], [$gl_cv_socklen_t_equiv], [type to use in place of socklen_t if not defined])], [gl_SOCKET_HEADERS])]) dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find dnl it there too. But on Cygwin, wc2tcpip.h must not be included. Users dnl of this module should use the same include pattern as gl_SOCKET_HEADERS. dnl When you change this macro, keep also in sync: dnl - gl_CHECK_SOCKET_HEADERS, dnl - the Include section of modules/socklen. AC_DEFUN([gl_SOCKET_HEADERS], [ /* is not needed according to POSIX, but the in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include #if HAVE_SYS_SOCKET_H # include #elif HAVE_WS2TCPIP_H # include #endif ]) dnl Tests for the existence of the header for socket facilities. dnl Defines the C macros HAVE_SYS_SOCKET_H, HAVE_WS2TCPIP_H. dnl This macro must match gl_SOCKET_HEADERS. AC_DEFUN([gl_CHECK_SOCKET_HEADERS], [AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h = no; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([ws2tcpip.h]) fi ]) gnuastro-0.5/bootstrapped/m4/sockets.m40000644000175000017500000000070713217200022015075 00000000000000# sockets.m4 serial 7 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SOCKETS], [ AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([gl_SOCKETLIB]) gl_PREREQ_SOCKETS ]) # Prerequisites of lib/sockets.c. AC_DEFUN([gl_PREREQ_SOCKETS], [ : ]) gnuastro-0.5/bootstrapped/m4/socketlib.m40000644000175000017500000000524413217200022015402 00000000000000# socketlib.m4 serial 1 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl gl_SOCKETLIB dnl Determines the library to use for socket functions. dnl Sets and AC_SUBSTs LIBSOCKET. AC_DEFUN([gl_SOCKETLIB], [ gl_PREREQ_SYS_H_WINSOCK2 dnl for HAVE_WINSOCK2_H LIBSOCKET= if test $HAVE_WINSOCK2_H = 1; then dnl Native Windows API (not Cygwin). AC_CACHE_CHECK([if we need to call WSAStartup in winsock2.h and -lws2_32], [gl_cv_func_wsastartup], [ gl_save_LIBS="$LIBS" LIBS="$LIBS -lws2_32" AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #ifdef HAVE_WINSOCK2_H # include #endif]], [[ WORD wVersionRequested = MAKEWORD(1, 1); WSADATA wsaData; int err = WSAStartup(wVersionRequested, &wsaData); WSACleanup ();]])], gl_cv_func_wsastartup=yes, gl_cv_func_wsastartup=no) LIBS="$gl_save_LIBS" ]) if test "$gl_cv_func_wsastartup" = "yes"; then AC_DEFINE([WINDOWS_SOCKETS], [1], [Define if WSAStartup is needed.]) LIBSOCKET='-lws2_32' fi else dnl Unix API. dnl Solaris has most socket functions in libsocket. dnl Haiku has most socket functions in libnetwork. dnl BeOS has most socket functions in libnet. AC_CACHE_CHECK([for library containing setsockopt], [gl_cv_lib_socket], [ gl_cv_lib_socket= AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [], [gl_save_LIBS="$LIBS" LIBS="$gl_save_LIBS -lsocket" AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [gl_cv_lib_socket="-lsocket"]) if test -z "$gl_cv_lib_socket"; then LIBS="$gl_save_LIBS -lnetwork" AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [gl_cv_lib_socket="-lnetwork"]) if test -z "$gl_cv_lib_socket"; then LIBS="$gl_save_LIBS -lnet" AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [gl_cv_lib_socket="-lnet"]) fi fi LIBS="$gl_save_LIBS" ]) if test -z "$gl_cv_lib_socket"; then gl_cv_lib_socket="none needed" fi ]) if test "$gl_cv_lib_socket" != "none needed"; then LIBSOCKET="$gl_cv_lib_socket" fi fi AC_SUBST([LIBSOCKET]) ]) gnuastro-0.5/bootstrapped/m4/sleep.m40000644000175000017500000000420313217200022014525 00000000000000# sleep.m4 serial 8 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SLEEP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl We expect to see the declaration of sleep() in a header file. dnl Older versions of mingw have a sleep() function that is an alias to dnl _sleep() in MSVCRT. It has a different signature than POSIX sleep(): dnl it takes the number of milliseconds as argument and returns void. dnl mingw does not declare this function. AC_CHECK_DECLS([sleep], , , [[#include ]]) AC_CHECK_FUNCS_ONCE([sleep]) if test $ac_cv_have_decl_sleep != yes; then HAVE_SLEEP=0 else dnl Cygwin 1.5.x has a bug where sleep can't exceed 49.7 days. AC_CACHE_CHECK([for working sleep], [gl_cv_func_sleep_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include #include static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (2); } ]], [[ /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also lack sleep. */ unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ unsigned int remaining; signal (SIGALRM, handle_alarm); alarm (1); remaining = sleep (pentecost); if (remaining > pentecost) return 3; if (remaining <= pentecost - 10) return 4; return 0; ]])], [gl_cv_func_sleep_works=yes], [gl_cv_func_sleep_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_sleep_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_sleep_works="guessing no" ;; # If we don't know, assume the worst. *) gl_cv_func_sleep_works="guessing no" ;; esac ])]) case "$gl_cv_func_sleep_works" in *yes) ;; *) REPLACE_SLEEP=1 ;; esac fi ]) gnuastro-0.5/bootstrapped/m4/size_max.m40000644000175000017500000000577013217200022015246 00000000000000# size_max.m4 serial 10 dnl Copyright (C) 2003, 2005-2006, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_SIZE_MAX], [ AC_CHECK_HEADERS([stdint.h]) dnl First test whether the system already has SIZE_MAX. AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ gl_cv_size_max= AC_EGREP_CPP([Found it], [ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif ], [gl_cv_size_max=yes]) if test -z "$gl_cv_size_max"; then dnl Define it ourselves. Here we assume that the type 'size_t' is not wider dnl than the type 'unsigned long'. Try hard to find a definition that can dnl be used in a preprocessor #if, i.e. doesn't contain a cast. AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], [#include #include ], [size_t_bits_minus_1=]) AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], [#include ], [fits_in_uint=]) if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then dnl Even though SIZE_MAX fits in an unsigned int, it must be of type dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include extern size_t foo; extern unsigned long foo; ]], [[]])], [fits_in_uint=0]) fi dnl We cannot use 'expr' to simplify this expression, because 'expr' dnl works only with 'long' integers in the host environment, while we dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else dnl Shouldn't happen, but who knows... gl_cv_size_max='((size_t)~(size_t)0)' fi fi ]) if test "$gl_cv_size_max" != yes; then AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], [Define as the maximum value of type 'size_t', if the system doesn't define it.]) fi dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after dnl . Remember that the #undef in AH_VERBATIM gets replaced with dnl #define by AC_DEFINE_UNQUOTED. AH_VERBATIM([SIZE_MAX], [/* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif]) ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) gnuastro-0.5/bootstrapped/m4/signbit.m40000644000175000017500000003014613217200022015061 00000000000000# signbit.m4 serial 15 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SIGNBIT], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include /* If signbit is defined as a function, don't use it, since calling it for 'float' or 'long double' arguments would involve conversions. If signbit is not declared at all but exists as a library function, don't use it, since the prototype may not match. If signbit is not declared at all but exists as a compiler built-in, don't use it, since it's preferable to use __builtin_signbit* (no warnings, no conversions). */ #ifndef signbit # error "signbit should be a macro" #endif #include ]gl_SIGNBIT_TEST_PROGRAM ])], [gl_cv_func_signbit=yes], [gl_cv_func_signbit=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_signbit="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_signbit="guessing no" ;; esac ]) ]) dnl GCC 4.0 and newer provides three built-ins for signbit. dnl They can be used without warnings, also in C++, regardless of . dnl But they may expand to calls to functions, which may or may not be in dnl libc. AC_CACHE_CHECK([for signbit compiler built-ins], [gl_cv_func_signbit_gcc], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #if __GNUC__ >= 4 # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) #else # error "signbit should be three compiler built-ins" #endif #include ]gl_SIGNBIT_TEST_PROGRAM ])], [gl_cv_func_signbit_gcc=yes], [gl_cv_func_signbit_gcc=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_signbit_gcc="guessing yes" ;; # Guess yes on mingw, no on MSVC. mingw*) if test -n "$GCC"; then gl_cv_func_signbit_gcc="guessing yes" else gl_cv_func_signbit_gcc="guessing no" fi ;; # If we don't know, assume the worst. *) gl_cv_func_signbit_gcc="guessing no" ;; esac ]) ]) dnl Use the compiler built-ins whenever possible, because they are more dnl efficient than the system library functions (if they exist). case "$gl_cv_func_signbit_gcc" in *yes) REPLACE_SIGNBIT_USING_GCC=1 ;; *) case "$gl_cv_func_signbit" in *yes) ;; *) dnl REPLACE_SIGNBIT=1 makes sure the signbit[fdl] functions get built. REPLACE_SIGNBIT=1 gl_FLOAT_SIGN_LOCATION gl_DOUBLE_SIGN_LOCATION gl_LONG_DOUBLE_SIGN_LOCATION if test "$gl_cv_cc_float_signbit" = unknown; then dnl Test whether copysignf() is declared. AC_CHECK_DECLS([copysignf], , , [[#include ]]) if test "$ac_cv_have_decl_copysignf" = yes; then dnl Test whether copysignf() can be used without libm. AC_CACHE_CHECK([whether copysignf can be used without linking with libm], [gl_cv_func_copysignf_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include float x, y;]], [[return copysignf (x, y) < 0;]])], [gl_cv_func_copysignf_no_libm=yes], [gl_cv_func_copysignf_no_libm=no]) ]) if test $gl_cv_func_copysignf_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1], [Define if the copysignf function is declared in and available in libc.]) fi fi fi if test "$gl_cv_cc_double_signbit" = unknown; then dnl Test whether copysign() is declared. AC_CHECK_DECLS([copysign], , , [[#include ]]) if test "$ac_cv_have_decl_copysign" = yes; then dnl Test whether copysign() can be used without libm. AC_CACHE_CHECK([whether copysign can be used without linking with libm], [gl_cv_func_copysign_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include double x, y;]], [[return copysign (x, y) < 0;]])], [gl_cv_func_copysign_no_libm=yes], [gl_cv_func_copysign_no_libm=no]) ]) if test $gl_cv_func_copysign_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1], [Define if the copysign function is declared in and available in libc.]) fi fi fi if test "$gl_cv_cc_long_double_signbit" = unknown; then dnl Test whether copysignl() is declared. AC_CHECK_DECLS([copysignl], , , [[#include ]]) if test "$ac_cv_have_decl_copysignl" = yes; then dnl Test whether copysignl() can be used without libm. AC_CACHE_CHECK([whether copysignl can be used without linking with libm], [gl_cv_func_copysignl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include long double x, y;]], [[return copysignl (x, y) < 0;]])], [gl_cv_func_copysignl_no_libm=yes], [gl_cv_func_copysignl_no_libm=no]) ]) if test $gl_cv_func_copysignl_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1], [Define if the copysignl function is declared in and available in libc.]) fi fi fi ;; esac ;; esac ]) AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[ /* Global variables. Needed because GCC 4 constant-folds __builtin_signbitl (literal) but cannot constant-fold __builtin_signbitl (variable). */ float vf; double vd; long double vl; int main () { /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; /* On HP-UX 10.20, negating 0.0L does not yield -0.0L. So we use another constant expression instead. But that expression does not work on other platforms, such as when cross-compiling to PowerPC on Mac OS X 10.5. */ long double p0l = 0.0L; #if defined __hpux || defined __sgi long double m0l = -LDBL_MIN * LDBL_MIN; #else long double m0l = -p0l; #endif int result = 0; if (signbit (vf)) /* link check */ vf++; { float plus_inf = 1.0f / p0f; float minus_inf = -1.0f / p0f; if (!(!signbit (255.0f) && signbit (-255.0f) && !signbit (p0f) && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 1; } if (signbit (vd)) /* link check */ vd++; { double plus_inf = 1.0 / p0d; double minus_inf = -1.0 / p0d; if (!(!signbit (255.0) && signbit (-255.0) && !signbit (p0d) && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 2; } if (signbit (vl)) /* link check */ vl++; { long double plus_inf = 1.0L / p0l; long double minus_inf = -1.0L / p0l; if (signbit (255.0L)) result |= 4; if (!signbit (-255.0L)) result |= 4; if (signbit (p0l)) result |= 8; if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) result |= 16; if (signbit (plus_inf)) result |= 32; if (!signbit (minus_inf)) result |= 64; } return result; } ]]) AC_DEFUN([gl_FLOAT_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT]) ]) AC_DEFUN([gl_DOUBLE_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL]) ]) AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL]) ]) AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION], [ AC_CACHE_CHECK([where to find the sign bit in a '$1'], [$2], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #define NWORDS \ ((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { $1 value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0$3 }; static memory_float minus = { -1.0$3 }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } ]])], [$2=`cat conftest.out`], [$2="unknown"], [ dnl When cross-compiling, we don't know. It depends on the dnl ABI and compiler version. There are too many cases. $2="unknown" ]) rm -f conftest.out ]) case "$]$2[" in word*bit*) word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$]$2[" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word], [Define as the word index where to find the sign of '$1'.]) AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit], [Define as the bit index in the word where to find the sign of '$1'.]) ;; esac ]) # Expands to code that defines a function signbitf(float). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_FLOAT_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([float], [f], [f]) ]) # Expands to code that defines a function signbitd(double). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_DOUBLE_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([double], [d], []) ]) # Expands to code that defines a function signbitl(long double). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_LONG_DOUBLE_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([long double], [l], [L]) ]) AC_DEFUN([gl_FLOATTYPE_SIGNBIT_CODE], [[ static int signbit$2 ($1 value) { typedef union { $1 f; unsigned char b[sizeof ($1)]; } float_union; static float_union plus_one = { 1.0$3 }; /* unused bits are zero here */ static float_union minus_one = { -1.0$3 }; /* unused bits are zero here */ /* Compute the sign bit mask as the XOR of plus_one and minus_one. */ float_union u; unsigned int i; u.f = value; for (i = 0; i < sizeof ($1); i++) if (u.b[i] & (plus_one.b[i] ^ minus_one.b[i])) return 1; return 0; } ]]) gnuastro-0.5/bootstrapped/m4/signalblocking.m40000644000175000017500000000164113217200022016406 00000000000000# signalblocking.m4 serial 14 dnl Copyright (C) 2001-2002, 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine available signal blocking primitives. Three different APIs exist: # 1) POSIX: sigemptyset, sigaddset, sigprocmask # 2) SYSV: sighold, sigrelse # 3) BSD: sigblock, sigsetmask # For simplicity, here we check only for the POSIX signal blocking. AC_DEFUN([gl_SIGNALBLOCKING], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) if test $gl_cv_type_sigset_t = yes; then AC_CHECK_FUNC([sigprocmask], [gl_cv_func_sigprocmask=1]) fi if test -z "$gl_cv_func_sigprocmask"; then HAVE_POSIX_SIGNALBLOCKING=0 fi ]) # Prerequisites of lib/sigprocmask.c. AC_DEFUN([gl_PREREQ_SIGPROCMASK], [:]) gnuastro-0.5/bootstrapped/m4/signal_h.m40000644000175000017500000000604213217200022015204 00000000000000# signal_h.m4 serial 18 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SIGNAL_H], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) gl_NEXT_HEADERS([signal.h]) # AIX declares sig_atomic_t to already include volatile, and C89 compilers # then choke on 'volatile sig_atomic_t'. C99 requires that it compile. AC_CHECK_TYPE([volatile sig_atomic_t], [], [HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0], [[ #include ]]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) AC_REQUIRE([AC_TYPE_UID_T]) dnl Persuade glibc to define sighandler_t. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_TYPE([sighandler_t], [], [HAVE_SIGHANDLER_T=0], [[ #include ]]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include ]], [pthread_sigmask sigaction sigaddset sigdelset sigemptyset sigfillset sigismember sigpending sigprocmask]) ]) AC_DEFUN([gl_CHECK_TYPE_SIGSET_T], [ AC_CHECK_TYPES([sigset_t], [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no], [[ #include /* Mingw defines sigset_t not in , but in . */ #include ]]) if test $gl_cv_type_sigset_t != yes; then HAVE_SIGSET_T=0 fi ]) AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_SIGNAL_H_DEFAULTS], [ GNULIB_PTHREAD_SIGMASK=0; AC_SUBST([GNULIB_PTHREAD_SIGMASK]) GNULIB_RAISE=0; AC_SUBST([GNULIB_RAISE]) GNULIB_SIGNAL_H_SIGPIPE=0; AC_SUBST([GNULIB_SIGNAL_H_SIGPIPE]) GNULIB_SIGPROCMASK=0; AC_SUBST([GNULIB_SIGPROCMASK]) GNULIB_SIGACTION=0; AC_SUBST([GNULIB_SIGACTION]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING]) HAVE_PTHREAD_SIGMASK=1; AC_SUBST([HAVE_PTHREAD_SIGMASK]) HAVE_RAISE=1; AC_SUBST([HAVE_RAISE]) HAVE_SIGSET_T=1; AC_SUBST([HAVE_SIGSET_T]) HAVE_SIGINFO_T=1; AC_SUBST([HAVE_SIGINFO_T]) HAVE_SIGACTION=1; AC_SUBST([HAVE_SIGACTION]) HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; AC_SUBST([HAVE_STRUCT_SIGACTION_SA_SIGACTION]) HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; AC_SUBST([HAVE_TYPE_VOLATILE_SIG_ATOMIC_T]) HAVE_SIGHANDLER_T=1; AC_SUBST([HAVE_SIGHANDLER_T]) REPLACE_PTHREAD_SIGMASK=0; AC_SUBST([REPLACE_PTHREAD_SIGMASK]) REPLACE_RAISE=0; AC_SUBST([REPLACE_RAISE]) ]) gnuastro-0.5/bootstrapped/m4/sigaction.m40000644000175000017500000000232513217200022015400 00000000000000# sigaction.m4 serial 7 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine if sigaction interface is present. AC_DEFUN([gl_SIGACTION], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([sigaction]) if test $ac_cv_func_sigaction = yes; then AC_CHECK_MEMBERS([struct sigaction.sa_sigaction], , , [[#include ]]) if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then HAVE_STRUCT_SIGACTION_SA_SIGACTION=0 fi else HAVE_SIGACTION=0 fi ]) # Prerequisites of the part of lib/signal.in.h and of lib/sigaction.c. AC_DEFUN([gl_PREREQ_SIGACTION], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_TYPE_UID_T]) AC_REQUIRE([gl_PREREQ_SIG_HANDLER_H]) AC_CHECK_FUNCS_ONCE([sigaltstack siginterrupt]) AC_CHECK_TYPES([siginfo_t], [], [], [[ #include ]]) if test $ac_cv_type_siginfo_t = no; then HAVE_SIGINFO_T=0 fi ]) # Prerequisites of lib/sig-handler.h. AC_DEFUN([gl_PREREQ_SIG_HANDLER_H], [:]) gnuastro-0.5/bootstrapped/m4/setlocale.m40000644000175000017500000000154313217200022015374 00000000000000# setlocale.m4 serial 4 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SETLOCALE], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in dnl On native Windows systems, setlocale(category,NULL) does not look at dnl the environment variables LC_ALL, category, and LANG. mingw*) REPLACE_SETLOCALE=1 ;; dnl On Cygwin 1.5.x, setlocale always succeeds but setlocale(LC_CTYPE,NULL) dnl is then still "C". cygwin*) case `uname -r` in 1.5.*) REPLACE_SETLOCALE=1 ;; esac ;; esac ]) # Prerequisites of lib/setlocale.c. AC_DEFUN([gl_PREREQ_SETLOCALE], [ : ]) gnuastro-0.5/bootstrapped/m4/setenv.m40000644000175000017500000001101213217200022014715 00000000000000# setenv.m4 serial 26 dnl Copyright (C) 2001-2004, 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SETENV], [ AC_REQUIRE([gl_FUNC_SETENV_SEPARATE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $ac_cv_func_setenv = no; then HAVE_SETENV=0 else AC_CACHE_CHECK([whether setenv validates arguments], [gl_cv_func_setenv_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include #include ]], [[ int result = 0; { if (setenv ("", "", 0) != -1) result |= 1; else if (errno != EINVAL) result |= 2; } { if (setenv ("a", "=", 1) != 0) result |= 4; else if (strcmp (getenv ("a"), "=") != 0) result |= 8; } return result; ]])], [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_setenv_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_setenv_works="guessing no" ;; esac ])]) case "$gl_cv_func_setenv_works" in *yes) ;; *) REPLACE_SETENV=1 ;; esac fi ]) # Like gl_FUNC_SETENV, except prepare for separate compilation # (no REPLACE_SETENV, no AC_LIBOBJ). AC_DEFUN([gl_FUNC_SETENV_SEPARATE], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([setenv]) if test $ac_cv_have_decl_setenv = no; then HAVE_DECL_SETENV=0 fi AC_CHECK_FUNCS_ONCE([setenv]) gl_PREREQ_SETENV ]) AC_DEFUN([gl_FUNC_UNSETENV], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([unsetenv]) if test $ac_cv_have_decl_unsetenv = no; then HAVE_DECL_UNSETENV=0 fi AC_CHECK_FUNCS([unsetenv]) if test $ac_cv_func_unsetenv = no; then HAVE_UNSETENV=0 else HAVE_UNSETENV=1 dnl Some BSDs return void, failing to do error checking. AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #undef _BSD #define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 */ #include extern #ifdef __cplusplus "C" #endif int unsetenv (const char *name); ]], [[]])], [gt_cv_func_unsetenv_ret='int'], [gt_cv_func_unsetenv_ret='void'])]) if test $gt_cv_func_unsetenv_ret = 'void'; then AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void instead of int.]) REPLACE_UNSETENV=1 fi dnl Solaris 10 unsetenv does not remove all copies of a name. dnl Haiku alpha 2 unsetenv gets confused by assignment to environ. dnl OpenBSD 4.7 unsetenv("") does not fail. AC_CACHE_CHECK([whether unsetenv obeys POSIX], [gl_cv_func_unsetenv_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include extern char **environ; ]], [[ char entry1[] = "a=1"; char entry2[] = "b=2"; char *env[] = { entry1, entry2, NULL }; if (putenv ((char *) "a=1")) return 1; if (putenv (entry2)) return 2; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 3; if (!unsetenv ("") || errno != EINVAL) return 4; entry2[0] = 'b'; environ = env; if (!getenv ("a")) return 5; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 6; ]])], [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_unsetenv_works="guessing no" ;; esac ])]) case "$gl_cv_func_unsetenv_works" in *yes) ;; *) REPLACE_UNSETENV=1 ;; esac fi ]) # Prerequisites of lib/setenv.c. AC_DEFUN([gl_PREREQ_SETENV], [ AC_REQUIRE([AC_FUNC_ALLOCA]) AC_REQUIRE([gl_ENVIRON]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_HEADERS([search.h]) AC_CHECK_FUNCS([tsearch]) ]) # Prerequisites of lib/unsetenv.c. AC_DEFUN([gl_PREREQ_UNSETENV], [ AC_REQUIRE([gl_ENVIRON]) AC_CHECK_HEADERS_ONCE([unistd.h]) ]) gnuastro-0.5/bootstrapped/m4/select.m40000644000175000017500000000634413217200022014704 00000000000000# select.m4 serial 8 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SELECT], [ AC_REQUIRE([gl_HEADER_SYS_SELECT]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SOCKETS]) if test "$ac_cv_header_winsock2_h" = yes; then REPLACE_SELECT=1 else dnl On Interix 3.5, select(0, NULL, NULL, NULL, timeout) fails with error dnl EFAULT. AC_CHECK_HEADERS_ONCE([sys/select.h]) AC_CACHE_CHECK([whether select supports a 0 argument], [gl_cv_func_select_supports0], [ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #if HAVE_SYS_SELECT_H #include #endif int main () { struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout) < 0; }]])], [gl_cv_func_select_supports0=yes], [gl_cv_func_select_supports0=no], [ changequote(,)dnl case "$host_os" in # Guess no on Interix. interix*) gl_cv_func_select_supports0="guessing no";; # Guess yes otherwise. *) gl_cv_func_select_supports0="guessing yes";; esac changequote([,])dnl ]) ]) case "$gl_cv_func_select_supports0" in *yes) ;; *) REPLACE_SELECT=1 ;; esac dnl On FreeBSD 8.2, select() doesn't always reject bad fds. AC_CACHE_CHECK([whether select detects invalid fds], [gl_cv_func_select_detects_ebadf], [ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include #if HAVE_SYS_SELECT_H # include #endif #include #include ]],[[ fd_set set; dup2(0, 16); FD_ZERO(&set); FD_SET(16, &set); close(16); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (17, &set, NULL, NULL, &timeout) != -1 || errno != EBADF; ]])], [gl_cv_func_select_detects_ebadf=yes], [gl_cv_func_select_detects_ebadf=no], [ case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_select_detects_ebadf="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_select_detects_ebadf="guessing no" ;; esac ]) ]) case $gl_cv_func_select_detects_ebadf in *yes) ;; *) REPLACE_SELECT=1 ;; esac fi dnl Determine the needed libraries. LIB_SELECT="$LIBSOCKET" if test $REPLACE_SELECT = 1; then case "$host_os" in mingw*) dnl On the MSVC platform, the function MsgWaitForMultipleObjects dnl (used in lib/select.c) requires linking with -luser32. On mingw, dnl it is implicit. AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #define WIN32_LEAN_AND_MEAN #include int main () { MsgWaitForMultipleObjects (0, NULL, 0, 0, 0); return 0; }]])], [], [LIB_SELECT="$LIB_SELECT -luser32"]) ;; esac fi AC_SUBST([LIB_SELECT]) ]) gnuastro-0.5/bootstrapped/m4/regex.m40000644000175000017500000002767413217200022014550 00000000000000# serial 67 # Copyright (C) 1996-2001, 2003-2017 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. dnl Initially derived from code in GNU grep. dnl Mostly written by Jim Meyering. AC_PREREQ([2.50]) AC_DEFUN([gl_REGEX], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_ARG_WITH([included-regex], [AS_HELP_STRING([--without-included-regex], [don't compile regex; this is the default on systems with recent-enough versions of the GNU C Library (use with caution on other systems).])]) case $with_included_regex in #( yes|no) ac_use_included_regex=$with_included_regex ;; '') # If the system regex support is good enough that it passes the # following run test, then default to *not* using the included regex.c. # If cross compiling, assume the test would fail and use the included # regex.c. AC_CHECK_DECLS_ONCE([alarm]) AC_CHECK_HEADERS_ONCE([malloc.h]) AC_CACHE_CHECK([for working re_compile_pattern], [gl_cv_func_re_compile_pattern_working], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #include #include #if defined M_CHECK_ACTION || HAVE_DECL_ALARM # include # include #endif #if HAVE_MALLOC_H # include #endif #ifdef M_CHECK_ACTION /* Exit with distinguishable exit code. */ static void sigabrt_no_core (int sig) { raise (SIGTERM); } #endif ]], [[int result = 0; static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; /* Some builds of glibc go into an infinite loop on this test. Use alarm to force death, and mallopt to avoid malloc recursion in diagnosing the corrupted heap. */ #if HAVE_DECL_ALARM signal (SIGALRM, SIG_DFL); alarm (2); #endif #ifdef M_CHECK_ACTION signal (SIGABRT, sigabrt_no_core); mallopt (M_CHECK_ACTION, 2); #endif if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else if (re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s) != -1) result |= 1; regfree (®ex); } { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in . */ static char const pat[] = "[^x]x"; static char const data[] = /* */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) result |= 1; } regfree (®ex); } if (! setlocale (LC_ALL, "C")) return 1; } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[^x]b", 6, ®ex); if (s) result |= 2; /* This should fail, but succeeds for glibc-2.5. */ else if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) result |= 4; /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[b-a]", 6, ®ex); if (s == 0) result |= 8; /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("{1", 2, ®ex); if (s) result |= 8; /* The following example is derived from a problem report against gawk from Jorge Stolfi . */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[an\371]*n", 7, ®ex); if (s) result |= 8; /* This should match, but does not for glibc-2.2.1. */ else if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; /* glibc-2.2.93 does not work with a negative RANGE argument. */ else if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 16; else if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) result |= 16; /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, ®ex); if (s) result |= 32; /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) result |= 64; #endif return result; ]])], [gl_cv_func_re_compile_pattern_working=yes], [gl_cv_func_re_compile_pattern_working=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;; # Otherwise, assume it is not working. *) gl_cv_func_re_compile_pattern_working="guessing no" ;; esac ]) ]) case "$gl_cv_func_re_compile_pattern_working" in #( *yes) ac_use_included_regex=no;; #( *no) ac_use_included_regex=yes;; esac ;; *) AC_MSG_ERROR([Invalid value for --with-included-regex: $with_included_regex]) ;; esac if test $ac_use_included_regex = yes; then AC_DEFINE([_REGEX_INCLUDE_LIMITS_H], [1], [Define if you want to include , so that it consistently overrides 's RE_DUP_MAX.]) AC_DEFINE([_REGEX_LARGE_OFFSETS], [1], [Define if you want regoff_t to be at least as wide POSIX requires.]) AC_DEFINE([re_syntax_options], [rpl_re_syntax_options], [Define to rpl_re_syntax_options if the replacement should be used.]) AC_DEFINE([re_set_syntax], [rpl_re_set_syntax], [Define to rpl_re_set_syntax if the replacement should be used.]) AC_DEFINE([re_compile_pattern], [rpl_re_compile_pattern], [Define to rpl_re_compile_pattern if the replacement should be used.]) AC_DEFINE([re_compile_fastmap], [rpl_re_compile_fastmap], [Define to rpl_re_compile_fastmap if the replacement should be used.]) AC_DEFINE([re_search], [rpl_re_search], [Define to rpl_re_search if the replacement should be used.]) AC_DEFINE([re_search_2], [rpl_re_search_2], [Define to rpl_re_search_2 if the replacement should be used.]) AC_DEFINE([re_match], [rpl_re_match], [Define to rpl_re_match if the replacement should be used.]) AC_DEFINE([re_match_2], [rpl_re_match_2], [Define to rpl_re_match_2 if the replacement should be used.]) AC_DEFINE([re_set_registers], [rpl_re_set_registers], [Define to rpl_re_set_registers if the replacement should be used.]) AC_DEFINE([re_comp], [rpl_re_comp], [Define to rpl_re_comp if the replacement should be used.]) AC_DEFINE([re_exec], [rpl_re_exec], [Define to rpl_re_exec if the replacement should be used.]) AC_DEFINE([regcomp], [rpl_regcomp], [Define to rpl_regcomp if the replacement should be used.]) AC_DEFINE([regexec], [rpl_regexec], [Define to rpl_regexec if the replacement should be used.]) AC_DEFINE([regerror], [rpl_regerror], [Define to rpl_regerror if the replacement should be used.]) AC_DEFINE([regfree], [rpl_regfree], [Define to rpl_regfree if the replacement should be used.]) fi ]) # Prerequisites of lib/regex.c and lib/regex_internal.c. AC_DEFUN([gl_PREREQ_REGEX], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_REQUIRE([gl_EEMALLOC]) AC_REQUIRE([gl_GLIBC21]) AC_CHECK_HEADERS([libintl.h]) AC_CHECK_FUNCS_ONCE([isblank iswctype]) AC_CHECK_DECLS([isblank], [], [], [[#include ]]) ]) gnuastro-0.5/bootstrapped/m4/rawmemchr.m40000644000175000017500000000117213217200022015404 00000000000000# rawmemchr.m4 serial 2 dnl Copyright (C) 2003, 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RAWMEMCHR], [ dnl Persuade glibc to declare rawmemchr(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([rawmemchr]) if test $ac_cv_func_rawmemchr = no; then HAVE_RAWMEMCHR=0 fi ]) # Prerequisites of lib/strchrnul.c. AC_DEFUN([gl_PREREQ_RAWMEMCHR], [:]) gnuastro-0.5/bootstrapped/m4/raise.m40000644000175000017500000000177113217200022014527 00000000000000# raise.m4 serial 4 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RAISE], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS([raise]) if test $ac_cv_func_raise = no; then HAVE_RAISE=0 else m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_RAISE=1 fi ]) m4_ifdef([gl_SIGNALBLOCKING], [ gl_SIGNALBLOCKING if test $HAVE_POSIX_SIGNALBLOCKING = 0; then m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_RAISE=1 fi ], [:]) fi ]) fi ]) # Prerequisites of lib/raise.c. AC_DEFUN([gl_PREREQ_RAISE], [:]) gnuastro-0.5/bootstrapped/m4/putenv.m40000644000175000017500000000336313217200022014744 00000000000000# putenv.m4 serial 21 dnl Copyright (C) 2002-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. dnl dnl Check whether putenv ("FOO") removes FOO from the environment. dnl The putenv in libc on at least SunOS 4.1.4 does *not* do that. AC_DEFUN([gl_FUNC_PUTENV], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([for putenv compatible with GNU and SVID], [gl_cv_func_svid_putenv], [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],[[ /* Put it in env. */ if (putenv ("CONFTEST_putenv=val")) return 1; /* Try to remove it. */ if (putenv ("CONFTEST_putenv")) return 2; /* Make sure it was deleted. */ if (getenv ("CONFTEST_putenv") != 0) return 3; return 0; ]])], gl_cv_func_svid_putenv=yes, gl_cv_func_svid_putenv=no, dnl When crosscompiling, assume putenv is broken. [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_svid_putenv="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_svid_putenv="guessing no" ;; # If we don't know, assume the worst. *) gl_cv_func_svid_putenv="guessing no" ;; esac ]) ]) case "$gl_cv_func_svid_putenv" in *yes) ;; *) REPLACE_PUTENV=1 ;; esac ]) # Prerequisites of lib/putenv.c. AC_DEFUN([gl_PREREQ_PUTENV], [ AC_CHECK_DECLS([_putenv]) ]) gnuastro-0.5/bootstrapped/m4/pthread_sigmask.m40000644000175000017500000002307413217200022016571 00000000000000# pthread_sigmask.m4 serial 16 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([pthread_sigmask]) LIB_PTHREAD_SIGMASK= dnl Test whether the gnulib module 'threadlib' is in use. dnl Some packages like Emacs use --avoid=threadlib. dnl Write the symbol in such a way that it does not cause 'aclocal' to pick dnl the threadlib.m4 file that is installed in $PREFIX/share/aclocal/. m4_ifdef([gl_][THREADLIB], [ AC_REQUIRE([gl_][THREADLIB]) if test "$gl_threads_api" = posix; then if test $ac_cv_func_pthread_sigmask = yes; then dnl pthread_sigmask is available without -lpthread. : else if test -n "$LIBMULTITHREAD"; then AC_CACHE_CHECK([for pthread_sigmask in $LIBMULTITHREAD], [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD], [gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);]]) ], [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes], [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no]) LIBS="$gl_save_LIBS" ]) if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then AC_CACHE_CHECK([whether pthread_sigmask is only a macro], [gl_cv_func_pthread_sigmask_is_macro], [gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include #include #undef pthread_sigmask ]], [[return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);]]) ], [gl_cv_func_pthread_sigmask_is_macro=no], [gl_cv_func_pthread_sigmask_is_macro=yes]) LIBS="$gl_save_LIBS" ]) if test $gl_cv_func_pthread_sigmask_is_macro = yes; then dnl On MinGW pthread_sigmask is just a macro which always returns 0. dnl It does not exist as a real function, which is required by POSIX. REPLACE_PTHREAD_SIGMASK=1 gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no fi fi if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then dnl pthread_sigmask is available with -pthread or -lpthread. LIB_PTHREAD_SIGMASK="$LIBMULTITHREAD" else dnl pthread_sigmask is not available at all. HAVE_PTHREAD_SIGMASK=0 fi else dnl pthread_sigmask is not available at all. HAVE_PTHREAD_SIGMASK=0 fi fi else dnl pthread_sigmask may exist but does not interoperate with the chosen dnl multithreading facility. dnl If "$gl_threads_api" = pth, we could use the function pth_sigmask, dnl but it is equivalent to sigprocmask, so we choose to emulate dnl pthread_sigmask with sigprocmask also in this case. This yields fewer dnl link dependencies. if test $ac_cv_func_pthread_sigmask = yes; then REPLACE_PTHREAD_SIGMASK=1 else HAVE_PTHREAD_SIGMASK=0 fi fi ], [ dnl The module 'threadlib' is not in use, due to --avoid=threadlib being dnl specified. dnl The package either has prepared CPPFLAGS and LIBS for use of POSIX:2008 dnl threads, or wants to build single-threaded programs. if test $ac_cv_func_pthread_sigmask = yes; then dnl pthread_sigmask exists and does not require extra libraries. dnl Assume that it is declared. : else dnl pthread_sigmask either does not exist or needs extra libraries. HAVE_PTHREAD_SIGMASK=0 dnl Define the symbol rpl_pthread_sigmask, not pthread_sigmask, dnl so as to not accidentally override the system's pthread_sigmask dnl symbol from libpthread. This is necessary on IRIX 6.5. REPLACE_PTHREAD_SIGMASK=1 fi ]) AC_SUBST([LIB_PTHREAD_SIGMASK]) dnl We don't need a variable LTLIB_PTHREAD_SIGMASK, because when dnl "$gl_threads_api" = posix, $LTLIBMULTITHREAD and $LIBMULTITHREAD are the dnl same. dnl Now test for some bugs in the system function. if test $HAVE_PTHREAD_SIGMASK = 1; then AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl On FreeBSD 6.4, HP-UX 11.31, Solaris 9, in programs that are not linked dnl with -lpthread, the pthread_sigmask() function always returns 0 and has dnl no effect. if test -z "$LIB_PTHREAD_SIGMASK"; then case " $LIBS " in *' -pthread '*) ;; *' -lpthread '*) ;; *) AC_CACHE_CHECK([whether pthread_sigmask works without -lpthread], [gl_cv_func_pthread_sigmask_in_libc_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include int main () { sigset_t set; sigemptyset (&set); return pthread_sigmask (1729, &set, NULL) != 0; }]])], [gl_cv_func_pthread_sigmask_in_libc_works=no], [gl_cv_func_pthread_sigmask_in_libc_works=yes], [ changequote(,)dnl case "$host_os" in freebsd* | hpux* | solaris | solaris2.[2-9]*) gl_cv_func_pthread_sigmask_in_libc_works="guessing no";; *) gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";; esac changequote([,])dnl ]) ]) case "$gl_cv_func_pthread_sigmask_in_libc_works" in *no) REPLACE_PTHREAD_SIGMASK=1 AC_DEFINE([PTHREAD_SIGMASK_INEFFECTIVE], [1], [Define to 1 if pthread_sigmask may return 0 and have no effect.]) ;; esac;; esac fi dnl On Cygwin 1.7.5, the pthread_sigmask() has a wrong return value dnl convention: Upon failure, it returns -1 and sets errno. AC_CACHE_CHECK([whether pthread_sigmask returns error numbers], [gl_cv_func_pthread_sigmask_return_works], [ gl_save_LIBS="$LIBS" LIBS="$LIBS $LIB_PTHREAD_SIGMASK" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include int main () { sigset_t set; sigemptyset (&set); if (pthread_sigmask (1729, &set, NULL) == -1) return 1; return 0; }]])], [gl_cv_func_pthread_sigmask_return_works=yes], [gl_cv_func_pthread_sigmask_return_works=no], [case "$host_os" in cygwin*) gl_cv_func_pthread_sigmask_return_works="guessing no";; *) gl_cv_func_pthread_sigmask_return_works="guessing yes";; esac ]) LIBS="$gl_save_LIBS" ]) case "$gl_cv_func_pthread_sigmask_return_works" in *no) REPLACE_PTHREAD_SIGMASK=1 AC_DEFINE([PTHREAD_SIGMASK_FAILS_WITH_ERRNO], [1], [Define to 1 if pthread_sigmask(), when it fails, returns -1 and sets errno.]) ;; esac dnl On IRIX 6.5, in a single-threaded program, pending signals are not dnl immediately delivered when they are unblocked through pthread_sigmask, dnl only a little while later. AC_CACHE_CHECK([whether pthread_sigmask unblocks signals correctly], [gl_cv_func_pthread_sigmask_unblock_works], [ case "$host_os" in irix*) gl_cv_func_pthread_sigmask_unblock_works="guessing no";; *) gl_cv_func_pthread_sigmask_unblock_works="guessing yes";; esac m4_ifdef([gl_][THREADLIB], [dnl Link against $LIBMULTITHREAD, not only $LIB_PTHREAD_SIGMASK. dnl Otherwise we get a false positive on those platforms where dnl $gl_cv_func_pthread_sigmask_in_libc_works is "no". gl_save_LIBS=$LIBS LIBS="$LIBS $LIBMULTITHREAD"]) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #include #include static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main () { sigset_t set; int pid = getpid (); char command[80]; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); if (!(pthread_sigmask (SIG_BLOCK, &set, NULL) == 0)) return 1; sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, pid); if (!(system (command) == 0)) return 2; sleep (2); if (!(sigint_occurred == 0)) return 3; if (!(pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0)) return 4; if (!(sigint_occurred == 1)) /* This fails on IRIX. */ return 5; return 0; }]])], [:], [gl_cv_func_pthread_sigmask_unblock_works=no], [:]) m4_ifdef([gl_][THREADLIB], [LIBS=$gl_save_LIBS]) ]) case "$gl_cv_func_pthread_sigmask_unblock_works" in *no) REPLACE_PTHREAD_SIGMASK=1 AC_DEFINE([PTHREAD_SIGMASK_UNBLOCK_BUG], [1], [Define to 1 if pthread_sigmask() unblocks signals incorrectly.]) ;; esac fi ]) # Prerequisite of lib/pthread_sigmask.c. AC_DEFUN([gl_PREREQ_PTHREAD_SIGMASK], [ if test $HAVE_PTHREAD_SIGMASK = 1; then AC_DEFINE([HAVE_PTHREAD_SIGMASK], [1], [Define to 1 if the pthread_sigmask function can be used (despite bugs).]) fi ]) gnuastro-0.5/bootstrapped/m4/pthread_rwlock_rdlock.m40000644000175000017500000001274313217200022017773 00000000000000# pthread_rwlock_rdlock.m4 serial 1 dnl Copyright (C) 2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Inspired by dnl https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c dnl by Intel Corporation. dnl Test whether in a situation where dnl - an rwlock is taken by a reader and has a writer waiting, dnl - an additional reader requests the lock, dnl - the waiting writer and the requesting reader threads have the same dnl priority, dnl the requesting reader thread gets blocked, so that at some point the dnl waiting writer can acquire the lock. dnl Without such a guarantee, when there a N readers and each of the readers dnl spends more than 1/Nth of the time with the lock held, there is a high dnl probability that the waiting writer will not get the lock in a given finite dnl time, a phenomenon called "writer starvation". dnl Without such a guarantee, applications have a hard time avoiding writer dnl starvation. dnl dnl POSIX:2008 makes this requirement only for implementations that support TPS dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO dnl and SCHED_RR, see dnl http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html dnl but test verifies the guarantee regardless of TPS and regardless of dnl scheduling policy. AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader], [gl_cv_pthread_rwlock_rdlock_prefer_writer], [save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #include #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } ]])], [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes], [gl_cv_pthread_rwlock_rdlock_prefer_writer=no], [gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes"]) LIBS="$save_LIBS" ]) case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) AC_DEFINE([HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [1], [Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader.]) ;; esac ]) gnuastro-0.5/bootstrapped/m4/printf.m40000644000175000017500000017437713217200022014743 00000000000000# printf.m4 serial 57 dnl Copyright (C) 2003, 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Test whether the *printf family of functions supports the 'j', 'z', 't', dnl 'L' size specifiers. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_sizes_c99. AC_DEFUN([gl_PRINTF_SIZES_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports size specifiers as in C99], [gl_cv_func_printf_sizes_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #include #if HAVE_STDINT_H_WITH_UINTMAX # include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX # include #endif static char buf[100]; int main () { int result = 0; #if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX buf[0] = '\0'; if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 || strcmp (buf, "12345671 33") != 0) result |= 1; #else result |= 1; #endif buf[0] = '\0'; if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 || strcmp (buf, "12345672 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 || strcmp (buf, "12345673 33") != 0) result |= 4; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 || strcmp (buf, "1.5 33") != 0) result |= 8; return result; }]])], [gl_cv_func_printf_sizes_c99=yes], [gl_cv_func_printf_sizes_c99=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_printf_sizes_c99="guessing no";; openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_sizes_c99="guessing no";; netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_sizes_c99="guessing yes"], [gl_cv_func_printf_sizes_c99="guessing no"]) ;; # If we don't know, assume the worst. *) gl_cv_func_printf_sizes_c99="guessing no";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports 'long double' dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_long_double. AC_DEFUN([gl_PRINTF_LONG_DOUBLE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports 'long double' arguments], [gl_cv_func_printf_long_double], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[10000]; int main () { int result = 0; buf[0] = '\0'; if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000 33") != 0) result |= 1; buf[0] = '\0'; if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000e+00 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.75 33") != 0) result |= 4; return result; }]])], [gl_cv_func_printf_long_double=yes], [gl_cv_func_printf_long_double=no], [case "$host_os" in beos*) gl_cv_func_printf_long_double="guessing no";; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_long_double="guessing yes"], [gl_cv_func_printf_long_double="guessing no"]) ;; *) gl_cv_func_printf_long_double="guessing yes";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports infinite and NaN dnl 'double' arguments and negative zero arguments in the %f, %e, %g dnl directives. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_infinite. AC_DEFUN([gl_PRINTF_INFINITE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], [gl_cv_func_printf_infinite], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static int have_minus_zero () { static double plus_zero = 0.0; double minus_zero = - plus_zero; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } static char buf[10000]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%f", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%f", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%f", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%e", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 4; if (sprintf (buf, "%e", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 4; if (sprintf (buf, "%e", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 8; if (sprintf (buf, "%g", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 16; if (sprintf (buf, "%g", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 16; if (sprintf (buf, "%g", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 32; /* This test fails on HP-UX 10.20. */ if (have_minus_zero ()) if (sprintf (buf, "%g", - zero) < 0 || strcmp (buf, "-0") != 0) result |= 64; return result; }]])], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; darwin*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; hpux*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_infinite="guessing no";; netbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_infinite="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_infinite="guessing yes"], [gl_cv_func_printf_infinite="guessing no"]) ;; # If we don't know, assume the worst. *) gl_cv_func_printf_infinite="guessing no";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports infinite and NaN dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_infinite_long_double. AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl The user can set or unset the variable gl_printf_safe to indicate dnl that he wishes a safe handling of non-IEEE-754 'long double' values. if test -n "$gl_printf_safe"; then AC_DEFINE([CHECK_PRINTF_SAFE], [1], [Define if you wish *printf() functions that have a safe handling of non-IEEE-754 'long double' values.]) fi case "$gl_cv_func_printf_long_double" in *yes) AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], [gl_cv_func_printf_infinite_long_double], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ ]GL_NOCRASH[ #include #include #include static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static char buf[10000]; static long double zeroL = 0.0L; int main () { int result = 0; nocrash_init(); if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 4; if (sprintf (buf, "%Le", x.value) <= 0) result |= 4; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 4; } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 8; if (sprintf (buf, "%Le", x.value) <= 0) result |= 8; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 8; } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 16; if (sprintf (buf, "%Le", x.value) <= 0) result |= 16; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 16; } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 32; if (sprintf (buf, "%Le", x.value) <= 0) result |= 32; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 32; } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 64; if (sprintf (buf, "%Le", x.value) <= 0) result |= 64; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 64; } #endif return result; }]])], [gl_cv_func_printf_infinite_long_double=yes], [gl_cv_func_printf_infinite_long_double=no], [case "$host_cpu" in # Guess no on ia64, x86_64, i386. ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; *) case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_infinite_long_double="guessing yes"], [gl_cv_func_printf_infinite_long_double="guessing no"]) ;; # If we don't know, assume the worst. *) gl_cv_func_printf_infinite_long_double="guessing no";; esac ;; esac ]) ]) ;; *) gl_cv_func_printf_infinite_long_double="irrelevant" ;; esac ]) dnl Test whether the *printf family of functions supports the 'a' and 'A' dnl conversion specifier for hexadecimal output of floating-point numbers. dnl (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_a. AC_DEFUN([gl_PRINTF_DIRECTIVE_A], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], [gl_cv_func_printf_directive_a], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "0x1.922p+1 33") != 0 && strcmp (buf, "0x3.244p+0 33") != 0 && strcmp (buf, "0x6.488p-1 33") != 0 && strcmp (buf, "0xc.91p-2 33") != 0)) result |= 1; if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "-0X1.922P+1 33") != 0 && strcmp (buf, "-0X3.244P+0 33") != 0 && strcmp (buf, "-0X6.488P-1 33") != 0 && strcmp (buf, "-0XC.91P-2 33") != 0)) result |= 2; /* This catches a FreeBSD 6.1 bug: it doesn't round. */ if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x1.83p+0 33") != 0 && strcmp (buf, "0x3.05p-1 33") != 0 && strcmp (buf, "0x6.0ap-2 33") != 0 && strcmp (buf, "0xc.14p-3 33") != 0)) result |= 4; /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */ if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x2p+0 33") != 0 && strcmp (buf, "0x3p-1 33") != 0 && strcmp (buf, "0x6p-2 33") != 0 && strcmp (buf, "0xcp-3 33") != 0)) result |= 4; /* This catches a FreeBSD 6.1 bug. See */ if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 || buf[0] == '0') result |= 8; /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ if (sprintf (buf, "%.1a", 1.999) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 16; /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a glibc 2.4 bug . */ if (sprintf (buf, "%.1La", 1.999L) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 32; return result; }]])], [gl_cv_func_printf_directive_a=yes], [gl_cv_func_printf_directive_a=no], [ case "$host_os" in # Guess yes on glibc >= 2.5 systems. *-gnu*) AC_EGREP_CPP([BZ2908], [ #include #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ BZ2908 #endif #endif ], [gl_cv_func_printf_directive_a="guessing yes"], [gl_cv_func_printf_directive_a="guessing no"]) ;; # Guess no on native Windows. mingw*) gl_cv_func_printf_directive_a="guessing no";; # If we don't know, assume the worst. *) gl_cv_func_printf_directive_a="guessing no";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %F format dnl directive. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_f. AC_DEFUN([gl_PRINTF_DIRECTIVE_F], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'F' directive], [gl_cv_func_printf_directive_f], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 || strcmp (buf, "1234567.000000 33") != 0) result |= 1; if (sprintf (buf, "%F", 1.0 / zero) < 0 || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) result |= 2; /* This catches a Cygwin 1.5.x bug. */ if (sprintf (buf, "%.F", 1234.0) < 0 || strcmp (buf, "1234") != 0) result |= 4; return result; }]])], [gl_cv_func_printf_directive_f=yes], [gl_cv_func_printf_directive_f=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; darwin*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";; solaris*) gl_cv_func_printf_directive_f="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_directive_f="guessing yes"], [gl_cv_func_printf_directive_f="guessing no"]) ;; # If we don't know, assume the worst. *) gl_cv_func_printf_directive_f="guessing no";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %n format dnl directive. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_n. AC_DEFUN([gl_PRINTF_DIRECTIVE_N], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'n' directive], [gl_cv_func_printf_directive_n], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #ifdef _MSC_VER /* See page about "Parameter Validation" on msdn.microsoft.com. */ static void cdecl invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { exit (1); } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; #ifdef _MSC_VER _set_invalid_parameter_handler (invalid_parameter_handler); #endif /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 || strcmp (buf, "123 ") != 0 || count != 4) return 1; return 0; }]])], [gl_cv_func_printf_directive_n=yes], [gl_cv_func_printf_directive_n=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_printf_directive_n="guessing no";; *) gl_cv_func_printf_directive_n="guessing yes";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %ls format dnl directive and in particular, when a precision is specified, whether dnl the functions stop converting the wide string argument when the number dnl of bytes that have been produced by this conversion equals or exceeds dnl the precision. dnl Result is gl_cv_func_printf_directive_ls. AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'ls' directive], [gl_cv_func_printf_directive_ls], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #include int main () { int result = 0; char buf[100]; /* Test whether %ls works at all. This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on Cygwin 1.5. */ { static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "abc") != 0) result |= 1; } /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an assertion failure inside libc), but not on OpenBSD 4.0. */ { static const wchar_t wstring[] = { 'a', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "a") != 0) result |= 2; } /* Test whether precisions in %ls are supported as specified in ISO C 99 section 7.19.6.1: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." This test fails on Solaris 10. */ { static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; buf[0] = '\0'; if (sprintf (buf, "%.2ls", wstring) < 0 || strcmp (buf, "ab") != 0) result |= 8; } return result; }]])], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no], [ changequote(,)dnl case "$host_os" in openbsd*) gl_cv_func_printf_directive_ls="guessing no";; irix*) gl_cv_func_printf_directive_ls="guessing no";; solaris*) gl_cv_func_printf_directive_ls="guessing no";; cygwin*) gl_cv_func_printf_directive_ls="guessing no";; beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; # Guess yes on native Windows. mingw*) gl_cv_func_printf_directive_ls="guessing yes";; *) gl_cv_func_printf_directive_ls="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports POSIX/XSI format dnl strings with positions. (POSIX:2001) dnl Result is gl_cv_func_printf_positions. AC_DEFUN([gl_PRINTF_POSITIONS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], [gl_cv_func_printf_positions], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); }]])], [gl_cv_func_printf_positions=yes], [gl_cv_func_printf_positions=no], [ changequote(,)dnl case "$host_os" in netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) gl_cv_func_printf_positions="guessing no";; beos*) gl_cv_func_printf_positions="guessing no";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_positions="guessing no";; *) gl_cv_func_printf_positions="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports POSIX/XSI format dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) dnl Result is gl_cv_func_printf_flag_grouping. AC_DEFUN([gl_PRINTF_FLAG_GROUPING], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the grouping flag], [gl_cv_func_printf_flag_grouping], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[100]; int main () { if (sprintf (buf, "%'d %d", 1234567, 99) < 0 || buf[strlen (buf) - 1] != '9') return 1; return 0; }]])], [gl_cv_func_printf_flag_grouping=yes], [gl_cv_func_printf_flag_grouping=no], [ changequote(,)dnl case "$host_os" in cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; *) gl_cv_func_printf_flag_grouping="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports the - flag correctly. dnl (ISO C99.) See dnl dnl Result is gl_cv_func_printf_flag_leftadjust. AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], [gl_cv_func_printf_flag_leftadjust], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[100]; int main () { /* Check that a '-' flag is not annihilated by a negative width. */ if (sprintf (buf, "a%-*sc", -3, "b") < 0 || strcmp (buf, "ab c") != 0) return 1; return 0; }]])], [gl_cv_func_printf_flag_leftadjust=yes], [gl_cv_func_printf_flag_leftadjust=no], [ changequote(,)dnl case "$host_os" in # Guess yes on HP-UX 11. hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess no on HP-UX 10 and older. hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; # Guess yes on native Windows. mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess yes otherwise. *) gl_cv_func_printf_flag_leftadjust="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports padding of non-finite dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See dnl dnl Result is gl_cv_func_printf_flag_zero. AC_DEFUN([gl_PRINTF_FLAG_ZERO], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the zero flag correctly], [gl_cv_func_printf_flag_zero], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[100]; static double zero = 0.0; int main () { if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 || (strcmp (buf, " inf") != 0 && strcmp (buf, " infinity") != 0)) return 1; return 0; }]])], [gl_cv_func_printf_flag_zero=yes], [gl_cv_func_printf_flag_zero=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess no on native Windows. mingw*) gl_cv_func_printf_flag_zero="guessing no";; # If we don't know, assume the worst. *) gl_cv_func_printf_flag_zero="guessing no";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports large precisions. dnl On mingw, precisions larger than 512 are treated like 512, in integer, dnl floating-point or pointer output. On Solaris 10/x86, precisions larger dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC, dnl precisions larger than 510 in floating-point output yield wrong results. dnl On AIX 7.1, precisions larger than 998 in floating-point output yield dnl wrong results. On BeOS, precisions larger than 1044 crash the program. dnl Result is gl_cv_func_printf_precision. AC_DEFUN([gl_PRINTF_PRECISION], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports large precisions], [gl_cv_func_printf_precision], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static char buf[5000]; int main () { int result = 0; #ifdef __BEOS__ /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ return 1; #endif if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) result |= 1; if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) result |= 2; if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 || buf[0] != '1') result |= 4; if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 || buf[0] != '1') result |= 4; return result; }]])], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no], [ changequote(,)dnl case "$host_os" in # Guess no only on Solaris, native Windows, and BeOS systems. solaris*) gl_cv_func_printf_precision="guessing no" ;; mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; beos*) gl_cv_func_printf_precision="guessing no" ;; *) gl_cv_func_printf_precision="guessing yes" ;; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions recovers gracefully in case dnl of an out-of-memory condition, or whether it crashes the entire program. dnl Result is gl_cv_func_printf_enomem. AC_DEFUN([gl_PRINTF_ENOMEM], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_MULTIARCH]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf survives out-of-memory conditions], [gl_cv_func_printf_enomem], [ gl_cv_func_printf_enomem="guessing no" if test "$cross_compiling" = no; then if test $APPLE_UNIVERSAL_BUILD = 0; then AC_LANG_CONFTEST([AC_LANG_SOURCE([ ]GL_NOCRASH[ changequote(,)dnl #include #include #include #include #include int main() { struct rlimit limit; int ret; nocrash_init (); /* Some printf implementations allocate temporary space with malloc. */ /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ #ifdef RLIMIT_DATA if (getrlimit (RLIMIT_DATA, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_DATA, &limit) < 0) return 77; #endif /* On Linux systems, malloc() is limited by RLIMIT_AS. */ #ifdef RLIMIT_AS if (getrlimit (RLIMIT_AS, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_AS, &limit) < 0) return 77; #endif /* Some printf implementations allocate temporary space on the stack. */ #ifdef RLIMIT_STACK if (getrlimit (RLIMIT_STACK, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_STACK, &limit) < 0) return 77; #endif ret = printf ("%.5000000f", 1.0); return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); } changequote([,])dnl ])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then (./conftest 2>&AS_MESSAGE_LOG_FD result=$? _AS_ECHO_LOG([\$? = $result]) if test $result != 0 && test $result != 77; then result=1; fi exit $result ) >/dev/null 2>/dev/null case $? in 0) gl_cv_func_printf_enomem="yes" ;; 77) gl_cv_func_printf_enomem="guessing no" ;; *) gl_cv_func_printf_enomem="no" ;; esac else gl_cv_func_printf_enomem="guessing no" fi rm -fr conftest* else dnl A universal build on Apple Mac OS X platforms. dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. dnl But we need a configuration result that is valid in both modes. gl_cv_func_printf_enomem="guessing no" fi fi if test "$gl_cv_func_printf_enomem" = "guessing no"; then changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Solaris. solaris*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on AIX. aix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on HP-UX/hppa. hpux*) case "$host_cpu" in hppa*) gl_cv_func_printf_enomem="guessing yes";; *) gl_cv_func_printf_enomem="guessing no";; esac ;; # Guess yes on IRIX. irix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on OSF/1. osf*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Haiku. haiku*) gl_cv_func_printf_enomem="guessing yes";; # If we don't know, assume the worst. *) gl_cv_func_printf_enomem="guessing no";; esac changequote([,])dnl fi ]) ]) dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) dnl Result is ac_cv_func_snprintf. AC_DEFUN([gl_SNPRINTF_PRESENCE], [ AC_CHECK_FUNCS_ONCE([snprintf]) ]) dnl Test whether the string produced by the snprintf function is always NUL dnl terminated. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_snprintf_truncation_c99. AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf truncates the result as in C99], [gl_cv_func_snprintf_truncation_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); my_snprintf (buf, 3, "%d %d", 4567, 89); if (memcmp (buf, "45\0DEF", 6) != 0) return 1; return 0; }]])], [gl_cv_func_snprintf_truncation_c99=yes], [gl_cv_func_snprintf_truncation_c99=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_truncation_c99="guessing no";; openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_truncation_c99="guessing no";; solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_truncation_c99="guessing no";; netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess no on native Windows. mingw*) gl_cv_func_snprintf_truncation_c99="guessing no";; # If we don't know, assume the worst. *) gl_cv_func_snprintf_truncation_c99="guessing no";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the return value of the snprintf function is the number dnl of bytes (excluding the terminating NUL) that would have been produced dnl if the buffer had been large enough. (ISO C99, POSIX:2001) dnl For example, this test program fails on IRIX 6.5: dnl --------------------------------------------------------------------- dnl #include dnl int main() dnl { dnl static char buf[8]; dnl int retval = snprintf (buf, 3, "%d", 12345); dnl return retval >= 0 && retval < 3; dnl } dnl --------------------------------------------------------------------- dnl Result is gl_cv_func_snprintf_retval_c99. AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], [gl_cv_func_snprintf_retval_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) return 1; if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) return 2; if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) return 3; return 0; }]])], [gl_cv_func_snprintf_retval_c99=yes], [gl_cv_func_snprintf_retval_c99=no], [case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_retval_c99="guessing no";; openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_retval_c99="guessing no";; netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_snprintf_retval_c99="guessing yes"], [gl_cv_func_snprintf_retval_c99="guessing no"]) ;; # If we don't know, assume the worst. *) gl_cv_func_snprintf_retval_c99="guessing no";; esac ]) ]) ]) dnl Test whether the snprintf function supports the %n format directive dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_snprintf_directive_n. AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], [gl_cv_func_snprintf_directive_n], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); if (count != 6) return 1; return 0; }]])], [gl_cv_func_snprintf_directive_n=yes], [gl_cv_func_snprintf_directive_n=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_directive_n="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_directive_n="guessing no";; solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; aix*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; osf*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_directive_n="guessing no";; netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess no on native Windows. mingw*) gl_cv_func_snprintf_directive_n="guessing no";; # If we don't know, assume the worst. *) gl_cv_func_snprintf_directive_n="guessing no";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the snprintf function, when passed a size = 1, writes any dnl output without bounds in this case, behaving like sprintf. This is the dnl case on Linux libc5. dnl Result is gl_cv_func_snprintf_size1. AC_DEFUN([gl_SNPRINTF_SIZE1], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf respects a size of 1], [gl_cv_func_snprintf_size1], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 1, "%d", 12345); return buf[1] != 'E'; }]])], [gl_cv_func_snprintf_size1=yes], [gl_cv_func_snprintf_size1=no], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_snprintf_size1="guessing yes" ;; *) gl_cv_func_snprintf_size1="guessing yes" ;; esac ]) ]) ]) dnl Test whether the vsnprintf function, when passed a zero size, produces no dnl output. (ISO C99, POSIX:2001) dnl For example, snprintf nevertheless writes a NUL byte in this case dnl on OSF/1 5.1: dnl --------------------------------------------------------------------- dnl #include dnl int main() dnl { dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; dnl snprintf (buf, 0, "%d", 12345); dnl return buf[0] != 'D'; dnl } dnl --------------------------------------------------------------------- dnl And vsnprintf writes any output without bounds in this case, behaving like dnl vsprintf, on HP-UX 11 and OSF/1 5.1: dnl --------------------------------------------------------------------- dnl #include dnl #include dnl static int my_snprintf (char *buf, int size, const char *format, ...) dnl { dnl va_list args; dnl int ret; dnl va_start (args, format); dnl ret = vsnprintf (buf, size, format, args); dnl va_end (args); dnl return ret; dnl } dnl int main() dnl { dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; dnl my_snprintf (buf, 0, "%d", 12345); dnl return buf[0] != 'D'; dnl } dnl --------------------------------------------------------------------- dnl Result is gl_cv_func_vsnprintf_zerosize_c99. AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], [gl_cv_func_vsnprintf_zerosize_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 0, "%d", 12345); return buf[0] != 'D'; }]])], [gl_cv_func_vsnprintf_zerosize_c99=yes], [gl_cv_func_vsnprintf_zerosize_c99=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on native Windows. mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # If we don't know, assume the worst. *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; esac changequote([,])dnl ]) ]) ]) dnl The results of these tests on various platforms are: dnl dnl 1 = gl_PRINTF_SIZES_C99 dnl 2 = gl_PRINTF_LONG_DOUBLE dnl 3 = gl_PRINTF_INFINITE dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE dnl 5 = gl_PRINTF_DIRECTIVE_A dnl 6 = gl_PRINTF_DIRECTIVE_F dnl 7 = gl_PRINTF_DIRECTIVE_N dnl 8 = gl_PRINTF_DIRECTIVE_LS dnl 9 = gl_PRINTF_POSITIONS dnl 10 = gl_PRINTF_FLAG_GROUPING dnl 11 = gl_PRINTF_FLAG_LEFTADJUST dnl 12 = gl_PRINTF_FLAG_ZERO dnl 13 = gl_PRINTF_PRECISION dnl 14 = gl_PRINTF_ENOMEM dnl 15 = gl_SNPRINTF_PRESENCE dnl 16 = gl_SNPRINTF_TRUNCATION_C99 dnl 17 = gl_SNPRINTF_RETVAL_C99 dnl 18 = gl_SNPRINTF_DIRECTIVE_N dnl 19 = gl_SNPRINTF_SIZE1 dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99 dnl dnl 1 = checking whether printf supports size specifiers as in C99... dnl 2 = checking whether printf supports 'long double' arguments... dnl 3 = checking whether printf supports infinite 'double' arguments... dnl 4 = checking whether printf supports infinite 'long double' arguments... dnl 5 = checking whether printf supports the 'a' and 'A' directives... dnl 6 = checking whether printf supports the 'F' directive... dnl 7 = checking whether printf supports the 'n' directive... dnl 8 = checking whether printf supports the 'ls' directive... dnl 9 = checking whether printf supports POSIX/XSI format strings with positions... dnl 10 = checking whether printf supports the grouping flag... dnl 11 = checking whether printf supports the left-adjust flag correctly... dnl 12 = checking whether printf supports the zero flag correctly... dnl 13 = checking whether printf supports large precisions... dnl 14 = checking whether printf survives out-of-memory conditions... dnl 15 = checking for snprintf... dnl 16 = checking whether snprintf truncates the result as in C99... dnl 17 = checking whether snprintf returns a byte count as in C99... dnl 18 = checking whether snprintf fully supports the 'n' directive... dnl 19 = checking whether snprintf respects a size of 1... dnl 20 = checking whether vsnprintf respects a zero size as in C99... dnl dnl . = yes, # = no. dnl dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . . dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . . dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . dnl Mac OS X 10.5.8 . . . # # . . . . . . # . . . . . . . . dnl Mac OS X 10.3.9 . . . . # . . . . . . # . # . . . . . . dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . . dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . . dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . . dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . . dnl Solaris 11.3 . . . . # . . # . . . . . . . . . . . . dnl Solaris 11.0 . . # # # . . # . . . # . . . . . . . . dnl Solaris 10 . . # # # . . # . . . # # . . . . . . . dnl Solaris 2.6 ... 9 # . # # # # . # . . . # # . . . # . . . dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # # dnl AIX 7.1 . . # # # . . . . . . # # . . . . . . . dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . . dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . # . . . dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . . dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . # dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? # dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . . dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . # dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # # dnl NetBSD 5.0 . . . # # . . . . . . # . # . . . . . . dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . dnl Haiku . . . # # # . # . . . . . ? . . ? . . . dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . . dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . . dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . . dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . . dnl mingw-w64 2011 # # # # # # . . # # . # # ? . # # # . . gnuastro-0.5/bootstrapped/m4/pipe.m40000644000175000017500000000066013217200022014355 00000000000000# pipe.m4 serial 2 dnl Copyright (C) 2010-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PIPE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([pipe]) if test $ac_cv_func_pipe != yes; then HAVE_PIPE=0 fi ]) gnuastro-0.5/bootstrapped/m4/perror.m40000644000175000017500000000476613217200022014744 00000000000000# perror.m4 serial 7 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PERROR], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_R]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl We intentionally do not check for the broader REPLACE_STRERROR_R, dnl since on glibc systems, strerror_r is replaced only for signature dnl issues, and perror is just fine. Rather, we only want to dnl replace perror if strerror_r was replaced for a content fix. if test "$ERRNO_H:$REPLACE_STRERROR_0" != :0; then dnl The system's perror() cannot know about the new errno values we add dnl to , or any fix for strerror(0). Replace it. REPLACE_PERROR=1 fi case ${gl_cv_func_strerror_r_works-unset} in unset|*yes) AC_CACHE_CHECK([whether perror matches strerror], [gl_cv_func_perror_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #include #include ]], [[char *str = strerror (-1); if (!getenv("CONFTEST_OUTPUT")) return 0; if (!str) str = ""; puts (str); errno = -1; perror (""); return 0; ]])], [if CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1 2>conftest.txt2 \ && cmp conftest.txt1 conftest.txt2 >/dev/null; then gl_cv_func_perror_works=yes else gl_cv_func_perror_works=no fi rm -rf conftest.txt1 conftest.txt2], [gl_cv_func_perror_works=no], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_perror_works="guessing yes" ;; # Otherwise guess no. *) gl_cv_func_perror_works="guessing no" ;; esac ]) ]) case "$gl_cv_func_perror_works" in *yes) ;; *) REPLACE_PERROR=1 ;; esac ;; *) dnl The system's perror() probably inherits the bugs in the dnl system's strerror_r(). Replace it. REPLACE_PERROR=1 ;; esac ]) gnuastro-0.5/bootstrapped/m4/pathmax.m40000644000175000017500000000220413217200022015056 00000000000000# pathmax.m4 serial 10 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2017 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PATHMAX], [ dnl Prerequisites of lib/pathmax.h. AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) # Expands to a piece of C program that defines PATH_MAX in the same way as # "pathmax.h" will do. AC_DEFUN([gl_PATHMAX_SNIPPET], [[ /* Arrange to define PATH_MAX, like "pathmax.h" does. */ #if HAVE_UNISTD_H # include #endif #include #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifdef __hpux # undef PATH_MAX # define PATH_MAX 1024 #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif ]]) # Prerequisites of gl_PATHMAX_SNIPPET. AC_DEFUN([gl_PATHMAX_SNIPPET_PREREQ], [ AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h]) ]) gnuastro-0.5/bootstrapped/m4/open.m40000644000175000017500000000523713217200022014366 00000000000000# open.m4 serial 15 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_OPEN], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) case "$host_os" in mingw* | pw*) REPLACE_OPEN=1 ;; *) dnl open("foo/") should not create a file when the file name has a dnl trailing slash. FreeBSD only has the problem on symlinks. AC_CHECK_FUNCS_ONCE([lstat]) if test "$gl_cv_macro_O_CLOEXEC" != yes; then REPLACE_OPEN=1 fi AC_CACHE_CHECK([whether open recognizes a trailing slash], [gl_cv_func_open_slash], [# Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then touch conftest.tmp ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #if HAVE_UNISTD_H # include #endif int main () { int result = 0; #if HAVE_LSTAT if (open ("conftest.lnk/", O_RDONLY) != -1) result |= 1; #endif if (open ("conftest.sl/", O_CREAT, 0600) >= 0) result |= 2; return result; }]])], [gl_cv_func_open_slash=yes], [gl_cv_func_open_slash=no], [ changequote(,)dnl case "$host_os" in freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_open_slash="guessing no" ;; *) gl_cv_func_open_slash="guessing yes" ;; esac changequote([,])dnl ]) rm -f conftest.sl conftest.tmp conftest.lnk ]) case "$gl_cv_func_open_slash" in *no) AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], [Define to 1 if open() fails to recognize a trailing slash.]) REPLACE_OPEN=1 ;; esac ;; esac dnl Replace open() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_OPEN = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_OPEN=1 fi fi ]) dnl Replace open() for supporting the gnulib-defined O_NONBLOCK flag. m4_ifdef([gl_NONBLOCKING_IO], [ if test $REPLACE_OPEN = 0; then gl_NONBLOCKING_IO if test $gl_cv_have_open_O_NONBLOCK != yes; then REPLACE_OPEN=1 fi fi ]) ]) # Prerequisites of lib/open.c. AC_DEFUN([gl_PREREQ_OPEN], [ AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) : ]) gnuastro-0.5/bootstrapped/m4/open-cloexec.m40000644000175000017500000000131613217200022016000 00000000000000# Test whether O_CLOEXEC is defined. dnl Copyright 2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PREPROC_O_CLOEXEC], [ AC_CACHE_CHECK([for O_CLOEXEC], [gl_cv_macro_O_CLOEXEC], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include #ifndef O_CLOEXEC choke me; #endif ]], [[return O_CLOEXEC;]])], [gl_cv_macro_O_CLOEXEC=yes], [gl_cv_macro_O_CLOEXEC=no])]) ]) gnuastro-0.5/bootstrapped/m4/off_t.m40000644000175000017500000000100613217200022014510 00000000000000# off_t.m4 serial 1 dnl Copyright (C) 2012-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check whether to override the 'off_t' type. dnl Set WINDOWS_64_BIT_OFF_T. AC_DEFUN([gl_TYPE_OFF_T], [ m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_OFF_T=0 ]) AC_SUBST([WINDOWS_64_BIT_OFF_T]) ]) gnuastro-0.5/bootstrapped/m4/nproc.m40000644000175000017500000000347013217200022014543 00000000000000# nproc.m4 serial 5 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_NPROC], [ gl_PREREQ_NPROC ]) # Prerequisites of lib/nproc.c. AC_DEFUN([gl_PREREQ_NPROC], [ dnl Persuade glibc to declare CPU_SETSIZE, CPU_ISSET etc. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS([sys/pstat.h sys/sysmp.h sys/param.h],,, [AC_INCLUDES_DEFAULT]) dnl requires on OpenBSD 4.0. AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT #if HAVE_SYS_PARAM_H # include #endif ]) AC_CHECK_FUNCS([sched_getaffinity sched_getaffinity_np \ pstat_getdynamic sysmp sysctl]) dnl Test whether sched_getaffinity has the expected declaration. dnl glibc 2.3.[0-2]: dnl int sched_getaffinity (pid_t, unsigned int, unsigned long int *); dnl glibc 2.3.3: dnl int sched_getaffinity (pid_t, cpu_set_t *); dnl glibc >= 2.3.4: dnl int sched_getaffinity (pid_t, size_t, cpu_set_t *); if test $ac_cv_func_sched_getaffinity = yes; then AC_CACHE_CHECK([for glibc compatible sched_getaffinity], [gl_cv_func_sched_getaffinity3], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[sched_getaffinity (0, 0, (cpu_set_t *) 0);]])], [gl_cv_func_sched_getaffinity3=yes], [gl_cv_func_sched_getaffinity3=no]) ]) if test $gl_cv_func_sched_getaffinity3 = yes; then AC_DEFINE([HAVE_SCHED_GETAFFINITY_LIKE_GLIBC], [1], [Define to 1 if sched_getaffinity has a glibc compatible declaration.]) fi fi ]) gnuastro-0.5/bootstrapped/m4/nocrash.m40000644000175000017500000001060213217200022015052 00000000000000# nocrash.m4 serial 4 dnl Copyright (C) 2005, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini. AC_PREREQ([2.13]) dnl Expands to some code for use in .c programs that will cause the configure dnl test to exit instead of crashing. This is useful to avoid triggering dnl action from a background debugger and to avoid core dumps. dnl Usage: ... dnl ]GL_NOCRASH[ dnl ... dnl int main() { nocrash_init(); ... } AC_DEFUN([GL_NOCRASH],[[ #include #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include #include #include #include #include #include /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include #include static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include #include /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif ]]) gnuastro-0.5/bootstrapped/m4/nl_langinfo.m40000644000175000017500000000352413217200022015710 00000000000000# nl_langinfo.m4 serial 5 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_NL_LANGINFO], [ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) AC_REQUIRE([gl_LANGINFO_H]) AC_CHECK_FUNCS_ONCE([nl_langinfo]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $ac_cv_func_nl_langinfo = yes; then # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. AC_CACHE_CHECK([whether YESEXPR works], [gl_cv_func_nl_langinfo_yesexpr_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[return !*nl_langinfo(YESEXPR); ]])], [gl_cv_func_nl_langinfo_yesexpr_works=yes], [gl_cv_func_nl_langinfo_yesexpr_works=no], [ case "$host_os" in # Guess no on irix systems. irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; # Guess yes elsewhere. *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; esac ]) ]) case $gl_cv_func_nl_langinfo_yesexpr_works in *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; esac AC_DEFINE_UNQUOTED([FUNC_NL_LANGINFO_YESEXPR_WORKS], [$FUNC_NL_LANGINFO_YESEXPR_WORKS], [Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string.]) if test $HAVE_LANGINFO_CODESET = 1 && test $HAVE_LANGINFO_ERA = 1 \ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1; then : else REPLACE_NL_LANGINFO=1 AC_DEFINE([REPLACE_NL_LANGINFO], [1], [Define if nl_langinfo exists but is overridden by gnulib.]) fi else HAVE_NL_LANGINFO=0 fi ]) gnuastro-0.5/bootstrapped/m4/netinet_in_h.m40000644000175000017500000000207513217200022016065 00000000000000# netinet_in_h.m4 serial 5 dnl Copyright (C) 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_HEADER_NETINET_IN], [ AC_CACHE_CHECK([whether is self-contained], [gl_cv_header_netinet_in_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], [gl_cv_header_netinet_in_h_selfcontained=yes], [gl_cv_header_netinet_in_h_selfcontained=no]) ]) if test $gl_cv_header_netinet_in_h_selfcontained = yes; then NETINET_IN_H='' else NETINET_IN_H='netinet/in.h' AC_CHECK_HEADERS([netinet/in.h]) gl_CHECK_NEXT_HEADERS([netinet/in.h]) if test $ac_cv_header_netinet_in_h = yes; then HAVE_NETINET_IN_H=1 else HAVE_NETINET_IN_H=0 fi AC_SUBST([HAVE_NETINET_IN_H]) fi AC_SUBST([NETINET_IN_H]) AM_CONDITIONAL([GL_GENERATE_NETINET_IN_H], [test -n "$NETINET_IN_H"]) ]) gnuastro-0.5/bootstrapped/m4/nanosleep.m40000644000175000017500000001127113217200022015404 00000000000000# serial 37 dnl From Jim Meyering. dnl Check for the nanosleep function. dnl If not found, use the supplied replacement. dnl # Copyright (C) 1999-2001, 2003-2017 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. AC_DEFUN([gl_FUNC_NANOSLEEP], [ AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc and Solaris to declare nanosleep. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_REQUIRE([gl_FUNC_SELECT]) nanosleep_save_libs=$LIBS # Solaris 2.5.1 needs -lposix4 to get the nanosleep function. # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. LIB_NANOSLEEP= AC_SUBST([LIB_NANOSLEEP]) AC_SEARCH_LIBS([nanosleep], [rt posix4], [test "$ac_cv_search_nanosleep" = "none required" || LIB_NANOSLEEP=$ac_cv_search_nanosleep]) if test "x$ac_cv_search_nanosleep" != xno; then dnl The system has a nanosleep function. AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'no (mishandles large arguments)' in 64-bit # mode but 'yes' in 32-bit mode. But we need a configuration result that # is valid in both modes. gl_cv_func_nanosleep='no (mishandles large arguments)' fi AC_CACHE_CHECK([for working nanosleep], [gl_cv_func_nanosleep], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #if HAVE_SYS_TIME_H #include #endif #include #include #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) static void check_for_SIGALRM (int sig) { if (sig != SIGALRM) _exit (1); } int main () { static struct timespec ts_sleep; static struct timespec ts_remaining; static struct sigaction act; /* Test for major problems first. */ if (! nanosleep) return 2; act.sa_handler = check_for_SIGALRM; sigemptyset (&act.sa_mask); sigaction (SIGALRM, &act, NULL); ts_sleep.tv_sec = 0; ts_sleep.tv_nsec = 1; alarm (1); if (nanosleep (&ts_sleep, NULL) != 0) return 3; /* Test for a minor problem: the handling of large arguments. */ ts_sleep.tv_sec = TYPE_MAXIMUM (time_t); ts_sleep.tv_nsec = 999999999; alarm (1); if (nanosleep (&ts_sleep, &ts_remaining) != -1) return 4; if (errno != EINTR) return 5; if (ts_remaining.tv_sec <= TYPE_MAXIMUM (time_t) - 10) return 6; return 0; }]])], [gl_cv_func_nanosleep=yes], [case $? in dnl ( 4|5|6) gl_cv_func_nanosleep='no (mishandles large arguments)';; dnl ( *) gl_cv_func_nanosleep=no;; esac], [case "$host_os" in dnl (( linux*) # Guess it halfway works when the kernel is Linux. gl_cv_func_nanosleep='guessing no (mishandles large arguments)' ;; mingw*) # Guess no on native Windows. gl_cv_func_nanosleep='guessing no' ;; *) # If we don't know, assume the worst. gl_cv_func_nanosleep='guessing no' ;; esac ]) ]) case "$gl_cv_func_nanosleep" in *yes) REPLACE_NANOSLEEP=0 ;; *) REPLACE_NANOSLEEP=1 case "$gl_cv_func_nanosleep" in *"mishandles large arguments"*) AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], [1], [Define to 1 if nanosleep mishandles large arguments.]) ;; *) # The replacement uses select(). Add $LIBSOCKET to $LIB_NANOSLEEP. for ac_lib in $LIBSOCKET; do case " $LIB_NANOSLEEP " in *" $ac_lib "*) ;; *) LIB_NANOSLEEP="$LIB_NANOSLEEP $ac_lib";; esac done ;; esac ;; esac else HAVE_NANOSLEEP=0 fi LIBS=$nanosleep_save_libs ]) # Prerequisites of lib/nanosleep.c. AC_DEFUN([gl_PREREQ_NANOSLEEP], [ AC_CHECK_HEADERS_ONCE([sys/select.h]) gl_PREREQ_SIG_HANDLER_H ]) gnuastro-0.5/bootstrapped/m4/multiarch.m40000644000175000017500000000367413217200022015420 00000000000000# multiarch.m4 serial 7 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine whether the compiler is or may be producing universal binaries. # # On Mac OS X 10.5 and later systems, the user can create libraries and # executables that work on multiple system types--known as "fat" or # "universal" binaries--by specifying multiple '-arch' options to the # compiler but only a single '-arch' option to the preprocessor. Like # this: # # ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CPP="gcc -E" CXXCPP="g++ -E" # # Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. AC_DEFUN_ONCE([gl_MULTIARCH], [ dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. gl_cv_c_multiarch=no AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; ]])], [ dnl Check for potential -arch flags. It is not universal unless dnl there are at least two -arch flags with different values. arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done ]) if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi AC_SUBST([APPLE_UNIVERSAL_BUILD]) ]) gnuastro-0.5/bootstrapped/m4/msvc-nothrow.m40000644000175000017500000000053013217200022016062 00000000000000# msvc-nothrow.m4 serial 1 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MSVC_NOTHROW], [ AC_REQUIRE([gl_MSVC_INVAL]) ]) gnuastro-0.5/bootstrapped/m4/msvc-inval.m40000644000175000017500000000133413217200022015476 00000000000000# msvc-inval.m4 serial 1 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MSVC_INVAL], [ AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], [Define to 1 on MSVC platforms that have the "invalid parameter handler" concept.]) else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) ]) gnuastro-0.5/bootstrapped/m4/mode_t.m40000644000175000017500000000234213217200022014666 00000000000000# mode_t.m4 serial 2 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # For using mode_t, it's sufficient to use AC_TYPE_MODE_T and # include . # Define PROMOTED_MODE_T to the type that is the result of "default argument # promotion" (ISO C 6.5.2.2.(6)) of the type mode_t. AC_DEFUN([gl_PROMOTED_TYPE_MODE_T], [ AC_REQUIRE([AC_TYPE_MODE_T]) AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [ dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int', dnl and to itself otherwise. This assumption is not guaranteed by the ISO C dnl standard, but we don't know of any real-world counterexamples. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])], [gl_cv_promoted_mode_t='int'], [gl_cv_promoted_mode_t='mode_t']) ]) AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t], [Define to the type that is the result of default argument promotions of type mode_t.]) ]) gnuastro-0.5/bootstrapped/m4/mmap-anon.m40000644000175000017500000000373313217200022015307 00000000000000# mmap-anon.m4 serial 10 dnl Copyright (C) 2005, 2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Detect how mmap can be used to create anonymous (not file-backed) memory # mappings. # - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS # and MAP_ANON exist and have the same value. # - On HP-UX, only MAP_ANONYMOUS exists. # - On Mac OS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists. # - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be # used. AC_DEFUN([gl_FUNC_MMAP_ANON], [ dnl Persuade glibc to define MAP_ANONYMOUS. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then AC_MSG_CHECKING([for MAP_ANONYMOUS]) AC_EGREP_CPP([I cannot identify this map], [ #include #ifdef MAP_ANONYMOUS I cannot identify this map #endif ], [gl_have_mmap_anonymous=yes]) if test $gl_have_mmap_anonymous != yes; then AC_EGREP_CPP([I cannot identify this map], [ #include #ifdef MAP_ANON I cannot identify this map #endif ], [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) gl_have_mmap_anonymous=yes]) fi AC_MSG_RESULT([$gl_have_mmap_anonymous]) if test $gl_have_mmap_anonymous = yes; then AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and .]) fi fi ]) gnuastro-0.5/bootstrapped/m4/minmax.m40000644000175000017500000000245513217200022014715 00000000000000# minmax.m4 serial 4 dnl Copyright (C) 2005, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.53]) AC_DEFUN([gl_MINMAX], [ AC_REQUIRE([gl_PREREQ_MINMAX]) ]) # Prerequisites of lib/minmax.h. AC_DEFUN([gl_PREREQ_MINMAX], [ gl_MINMAX_IN_HEADER([limits.h]) gl_MINMAX_IN_HEADER([sys/param.h]) ]) dnl gl_MINMAX_IN_HEADER(HEADER) dnl The parameter has to be a literal header name; it cannot be macro, dnl nor a shell variable. (Because autoheader collects only AC_DEFINE dnl invocations with a literal macro name.) AC_DEFUN([gl_MINMAX_IN_HEADER], [ m4_pushdef([header], AS_TR_SH([$1])) m4_pushdef([HEADER], AS_TR_CPP([$1])) AC_CACHE_CHECK([whether <$1> defines MIN and MAX], [gl_cv_minmax_in_]header, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <$1> int x = MIN (42, 17);]], [[]])], [gl_cv_minmax_in_]header[=yes], [gl_cv_minmax_in_]header[=no])]) if test $gl_cv_minmax_in_[]header = yes; then AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, [Define to 1 if <$1> defines the MIN and MAX macros.]) fi m4_popdef([HEADER]) m4_popdef([header]) ]) gnuastro-0.5/bootstrapped/m4/mempcpy.m40000644000175000017500000000134613217200022015074 00000000000000# mempcpy.m4 serial 11 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2017 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMPCPY], [ dnl Persuade glibc to declare mempcpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The mempcpy() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([mempcpy]) if test $ac_cv_func_mempcpy = no; then HAVE_MEMPCPY=0 fi ]) # Prerequisites of lib/mempcpy.c. AC_DEFUN([gl_PREREQ_MEMPCPY], [ : ]) gnuastro-0.5/bootstrapped/m4/memchr.m40000644000175000017500000000602213217200022014671 00000000000000# memchr.m4 serial 13 dnl Copyright (C) 2002-2004, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_MEMCHR], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [ dnl These days, we assume memchr is present. But if support for old dnl platforms is desired: AC_CHECK_FUNCS_ONCE([memchr]) if test $ac_cv_func_memchr = no; then HAVE_MEMCHR=0 fi ]) if test $HAVE_MEMCHR = 1; then # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # https://bugzilla.redhat.com/show_bug.cgi?id=499689 # memchr should not dereference overestimated length after a match # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 # Assume that memchr works on platforms that lack mprotect. AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #if HAVE_SYS_MMAN_H # include # include # include # include # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif ]], [[ int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; } return result; ]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_memchr_works="guessing yes" ;; # Be pessimistic for now. *) gl_cv_func_memchr_works="guessing no" ;; esac ]) ]) case "$gl_cv_func_memchr_works" in *yes) ;; *) REPLACE_MEMCHR=1 ;; esac fi ]) # Prerequisites of lib/memchr.c. AC_DEFUN([gl_PREREQ_MEMCHR], [ AC_CHECK_HEADERS([bp-sym.h]) ]) gnuastro-0.5/bootstrapped/m4/mbtowc.m40000644000175000017500000000071413217200022014713 00000000000000# mbtowc.m4 serial 2 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBTOWC], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) if false; then REPLACE_MBTOWC=1 fi ]) # Prerequisites of lib/mbtowc.c. AC_DEFUN([gl_PREREQ_MBTOWC], [ : ]) gnuastro-0.5/bootstrapped/m4/mbstate_t.m40000644000175000017500000000256713217200022015412 00000000000000# mbstate_t.m4 serial 13 dnl Copyright (C) 2000-2002, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # From Paul Eggert. # BeOS 5 has but does not define mbstate_t, # so you can't declare an object of that type. # Check for this incompatibility with Standard C. # AC_TYPE_MBSTATE_T # ----------------- AC_DEFUN([AC_TYPE_MBSTATE_T], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11 AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include ]], [[mbstate_t x; return sizeof x;]])], [ac_cv_type_mbstate_t=yes], [ac_cv_type_mbstate_t=no])]) if test $ac_cv_type_mbstate_t = yes; then AC_DEFINE([HAVE_MBSTATE_T], [1], [Define to 1 if declares mbstate_t.]) else AC_DEFINE([mbstate_t], [int], [Define to a type if does not define.]) fi ]) gnuastro-0.5/bootstrapped/m4/mbsinit.m40000644000175000017500000000276313217200022015073 00000000000000# mbsinit.m4 serial 8 dnl Copyright (C) 2008, 2010-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBSINIT], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbsinit]) if test $ac_cv_func_mbsinit = no; then HAVE_MBSINIT=0 AC_CHECK_DECLS([mbsinit],,, [[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include ]]) if test $ac_cv_have_decl_mbsinit = yes; then dnl On Minix 3.1.8, the system's declares mbsinit() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBSINIT=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSINIT=1 else dnl On mingw, mbsinit() always returns 1, which is inappropriate for dnl states produced by mbrtowc() for an incomplete multibyte character dnl in multibyte locales. case "$host_os" in mingw*) REPLACE_MBSINIT=1 ;; esac fi fi ]) # Prerequisites of lib/mbsinit.c. AC_DEFUN([gl_PREREQ_MBSINIT], [ : ]) gnuastro-0.5/bootstrapped/m4/mbrtowc.m40000644000175000017500000004776513217200022015116 00000000000000# mbrtowc.m4 serial 29 -*- coding: utf-8 -*- dnl Copyright (C) 2001-2002, 2004-2005, 2008-2017 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBRTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbrtowc]) if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 AC_CHECK_DECLS([mbrtowc],,, [[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include ]]) if test $ac_cv_have_decl_mbrtowc = yes; then dnl On Minix 3.1.8, the system's declares mbrtowc() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBRTOWC=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOWC=1 else gl_MBRTOWC_NULL_ARG1 gl_MBRTOWC_NULL_ARG2 gl_MBRTOWC_RETVAL gl_MBRTOWC_NUL_RETVAL gl_MBRTOWC_EMPTY_INPUT gl_MBRTOWC_C_LOCALE case "$gl_cv_func_mbrtowc_null_arg1" in *yes) ;; *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1], [Define if the mbrtowc function has the NULL pwc argument bug.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_null_arg2" in *yes) ;; *) AC_DEFINE([MBRTOWC_NULL_ARG2_BUG], [1], [Define if the mbrtowc function has the NULL string argument bug.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_retval" in *yes) ;; *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1], [Define if the mbrtowc function returns a wrong return value.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_nul_retval" in *yes) ;; *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1], [Define if the mbrtowc function does not return 0 for a NUL character.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1], [Define if the mbrtowc function does not return (size_t) -2 for empty input.]) REPLACE_MBRTOWC=1 ;; esac case $gl_cv_C_locale_sans_EILSEQ in *yes) ;; *) AC_DEFINE([C_LOCALE_MAYBE_EILSEQ], [1], [Define to 1 if the C locale may have encoding errors.]) REPLACE_MBRTOWC=1 ;; esac fi fi ]) dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that dnl redefines the semantics of the given mbstate_t type. dnl Result is REPLACE_MBSTATE_T. dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to dnl avoid inconsistencies. AC_DEFUN([gl_MBSTATE_T_BROKEN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_CHECK_FUNCS_ONCE([mbsinit]) AC_CHECK_FUNCS_ONCE([mbrtowc]) if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then gl_MBRTOWC_INCOMPLETE_STATE gl_MBRTOWC_SANITYCHECK REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi ]) dnl Test whether mbrtowc puts the state into non-initial state when parsing an dnl incomplete multibyte character. dnl Result is gl_cv_func_mbrtowc_incomplete_state. AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles incomplete characters], [gl_cv_func_mbrtowc_incomplete_state], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_JA != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) fi ]) ]) dnl Test whether mbrtowc works not worse than mbtowc. dnl Result is gl_cv_func_mbrtowc_sanitycheck. AC_DEFUN([gl_MBRTOWC_SANITYCHECK], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc], [gl_cv_func_mbrtowc_sanitycheck], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_sanitycheck=yes], [gl_cv_func_mbrtowc_sanitycheck=no], [:]) fi ]) ]) dnl Test whether mbrtowc supports a NULL pwc argument correctly. dnl Result is gl_cv_func_mbrtowc_null_arg1. AC_DEFUN([gl_MBRTOWC_NULL_ARG1], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles a NULL pwc argument], [gl_cv_func_mbrtowc_null_arg1], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "\303\237er"; mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 5, &state); if (ret != 2) result |= 1; if (!mbsinit (&state)) result |= 2; memset (&state, '\0', sizeof (mbstate_t)); ret = mbrtowc (NULL, input, 5, &state); if (ret != 2) /* Solaris 7 fails here: ret is -1. */ result |= 4; if (!mbsinit (&state)) result |= 8; } return result; }]])], [gl_cv_func_mbrtowc_null_arg1=yes], [gl_cv_func_mbrtowc_null_arg1=no], [:]) fi ]) ]) dnl Test whether mbrtowc supports a NULL string argument correctly. dnl Result is gl_cv_func_mbrtowc_null_arg2. AC_DEFUN([gl_MBRTOWC_NULL_ARG2], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument], [gl_cv_func_mbrtowc_null_arg2], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { mbstate_t state; wchar_t wc; int ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_null_arg2=yes], [gl_cv_func_mbrtowc_null_arg2=no], [:]) fi ]) ]) dnl Test whether mbrtowc, when parsing the end of a multibyte character, dnl correctly returns the number of bytes that were needed to complete the dnl character (not the total number of bytes of the multibyte character). dnl Result is gl_cv_func_mbrtowc_retval. AC_DEFUN([gl_MBRTOWC_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether mbrtowc has a correct return value], [gl_cv_func_mbrtowc_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on HP-UX, Solaris, native Windows. hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ || { case "$host_os" in mingw*) true;; *) false;; esac; }; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { int result = 0; int found_some_locale = 0; /* This fails on Solaris. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 1) result |= 1; } found_some_locale = 1; } /* This fails on HP-UX 11.11. */ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 2) result |= 2; } found_some_locale = 1; } /* This fails on native Windows. */ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 4; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 8; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 16; } found_some_locale = 1; } return (found_some_locale ? result : 77); }]])], [gl_cv_func_mbrtowc_retval=yes], [if test $? != 77; then gl_cv_func_mbrtowc_retval=no fi ], [:]) fi ]) ]) dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0. dnl Result is gl_cv_func_mbrtowc_nul_retval. AC_DEFUN([gl_MBRTOWC_NUL_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character], [gl_cv_func_mbrtowc_nul_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 8 and 9. solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { /* This fails on Solaris 8 and 9. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_nul_retval=yes], [gl_cv_func_mbrtowc_nul_retval=no], [:]) fi ]) ]) dnl Test whether mbrtowc returns the correct value on empty input. AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc works on empty input], [gl_cv_func_mbrtowc_empty_input], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include static wchar_t wc; static mbstate_t mbs; int main (void) { return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; }]])], [gl_cv_func_mbrtowc_empty_input=yes], [gl_cv_func_mbrtowc_empty_input=no], [:]) ]) ]) dnl Test whether mbrtowc reports encoding errors in the C locale. dnl Although POSIX was never intended to allow this, the GNU C Library dnl and other implementations do it. See: dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932 AC_DEFUN([gl_MBRTOWC_C_LOCALE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether the C locale is free of encoding errors], [gl_cv_C_locale_sans_EILSEQ], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. gl_cv_C_locale_sans_EILSEQ="guessing no" AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #include ]], [[ int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ]])], [gl_cv_C_locale_sans_EILSEQ=yes], [gl_cv_C_locale_sans_EILSEQ=no], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_C_locale_sans_EILSEQ="guessing yes" ;; esac ]) ]) ]) # Prerequisites of lib/mbrtowc.c. AC_DEFUN([gl_PREREQ_MBRTOWC], [ : ]) dnl From Paul Eggert dnl This is an override of an autoconf macro. AC_DEFUN([AC_FUNC_MBRTOWC], [ dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], [gl_cv_func_mbrtowc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[/* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include ]], [[wchar_t wc; char const s[] = ""; size_t n = 1; mbstate_t state; return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], [gl_cv_func_mbrtowc=yes], [gl_cv_func_mbrtowc=no])]) if test $gl_cv_func_mbrtowc = yes; then AC_DEFINE([HAVE_MBRTOWC], [1], [Define to 1 if mbrtowc and mbstate_t are properly declared.]) fi ]) gnuastro-0.5/bootstrapped/m4/mbiter.m40000644000175000017500000000064213217200022014702 00000000000000# mbiter.m4 serial 7 dnl Copyright (C) 2005, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl autoconf tests required for use of mbiter.h dnl From Bruno Haible. AC_DEFUN([gl_MBITER], [ AC_REQUIRE([AC_TYPE_MBSTATE_T]) : ]) gnuastro-0.5/bootstrapped/m4/mbchar.m40000644000175000017500000000065313217200022014656 00000000000000# mbchar.m4 serial 9 dnl Copyright (C) 2005-2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl autoconf tests required for use of mbchar.m4 dnl From Bruno Haible. AC_DEFUN([gl_MBCHAR], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) gnuastro-0.5/bootstrapped/m4/math_h.m40000644000175000017500000004345413217200022014670 00000000000000# math_h.m4 serial 116 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MATH_H], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([math.h]) AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], [[/* Solaris 10 has a broken definition of NAN. Other platforms fail to provide NAN, or provide it only in C99 mode; this test only needs to fail when NAN is provided but wrong. */ float f = 1.0f; #ifdef NAN f = NAN; #endif return f == 0;]])], [gl_cv_header_math_nan_works=yes], [gl_cv_header_math_nan_works=no])]) if test $gl_cv_header_math_nan_works = no; then REPLACE_NAN=1 fi AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], [[/* Solaris 10 has a broken definition of HUGE_VAL. */ double d = HUGE_VAL; return d == 0;]])], [gl_cv_header_math_huge_val_works=yes], [gl_cv_header_math_huge_val_works=no])]) if test $gl_cv_header_math_huge_val_works = no; then REPLACE_HUGE_VAL=1 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include ]], [acosf acosl asinf asinl atanf atanl cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf expf expl exp2 exp2f exp2l expm1 expm1f expm1l fabsf fabsl floorf floorl fma fmaf fmal fmod fmodf fmodl frexpf frexpl hypotf hypotl ilogb ilogbf ilogbl ldexpf ldexpl log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l logb logbf logbl modf modff modfl powf remainder remainderf remainderl rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl tanf tanl tanhf trunc truncf truncl]) ]) AC_DEFUN([gl_MATH_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_MATH_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_MATH_H_DEFAULTS], [ GNULIB_ACOSF=0; AC_SUBST([GNULIB_ACOSF]) GNULIB_ACOSL=0; AC_SUBST([GNULIB_ACOSL]) GNULIB_ASINF=0; AC_SUBST([GNULIB_ASINF]) GNULIB_ASINL=0; AC_SUBST([GNULIB_ASINL]) GNULIB_ATANF=0; AC_SUBST([GNULIB_ATANF]) GNULIB_ATANL=0; AC_SUBST([GNULIB_ATANL]) GNULIB_ATAN2F=0; AC_SUBST([GNULIB_ATAN2F]) GNULIB_CBRT=0; AC_SUBST([GNULIB_CBRT]) GNULIB_CBRTF=0; AC_SUBST([GNULIB_CBRTF]) GNULIB_CBRTL=0; AC_SUBST([GNULIB_CBRTL]) GNULIB_CEIL=0; AC_SUBST([GNULIB_CEIL]) GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF]) GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL]) GNULIB_COPYSIGN=0; AC_SUBST([GNULIB_COPYSIGN]) GNULIB_COPYSIGNF=0; AC_SUBST([GNULIB_COPYSIGNF]) GNULIB_COPYSIGNL=0; AC_SUBST([GNULIB_COPYSIGNL]) GNULIB_COSF=0; AC_SUBST([GNULIB_COSF]) GNULIB_COSL=0; AC_SUBST([GNULIB_COSL]) GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF]) GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF]) GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL]) GNULIB_EXP2=0; AC_SUBST([GNULIB_EXP2]) GNULIB_EXP2F=0; AC_SUBST([GNULIB_EXP2F]) GNULIB_EXP2L=0; AC_SUBST([GNULIB_EXP2L]) GNULIB_EXPM1=0; AC_SUBST([GNULIB_EXPM1]) GNULIB_EXPM1F=0; AC_SUBST([GNULIB_EXPM1F]) GNULIB_EXPM1L=0; AC_SUBST([GNULIB_EXPM1L]) GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF]) GNULIB_FABSL=0; AC_SUBST([GNULIB_FABSL]) GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR]) GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF]) GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL]) GNULIB_FMA=0; AC_SUBST([GNULIB_FMA]) GNULIB_FMAF=0; AC_SUBST([GNULIB_FMAF]) GNULIB_FMAL=0; AC_SUBST([GNULIB_FMAL]) GNULIB_FMOD=0; AC_SUBST([GNULIB_FMOD]) GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF]) GNULIB_FMODL=0; AC_SUBST([GNULIB_FMODL]) GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF]) GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP]) GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL]) GNULIB_HYPOT=0; AC_SUBST([GNULIB_HYPOT]) GNULIB_HYPOTF=0; AC_SUBST([GNULIB_HYPOTF]) GNULIB_HYPOTL=0; AC_SUBST([GNULIB_HYPOTL]) GNULIB_ILOGB=0; AC_SUBST([GNULIB_ILOGB]) GNULIB_ILOGBF=0; AC_SUBST([GNULIB_ILOGBF]) GNULIB_ILOGBL=0; AC_SUBST([GNULIB_ILOGBL]) GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE]) GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF]) GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN]) GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF]) GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND]) GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL]) GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF]) GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL]) GNULIB_LOG=0; AC_SUBST([GNULIB_LOG]) GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF]) GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL]) GNULIB_LOG10=0; AC_SUBST([GNULIB_LOG10]) GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F]) GNULIB_LOG10L=0; AC_SUBST([GNULIB_LOG10L]) GNULIB_LOG1P=0; AC_SUBST([GNULIB_LOG1P]) GNULIB_LOG1PF=0; AC_SUBST([GNULIB_LOG1PF]) GNULIB_LOG1PL=0; AC_SUBST([GNULIB_LOG1PL]) GNULIB_LOG2=0; AC_SUBST([GNULIB_LOG2]) GNULIB_LOG2F=0; AC_SUBST([GNULIB_LOG2F]) GNULIB_LOG2L=0; AC_SUBST([GNULIB_LOG2L]) GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB]) GNULIB_LOGBF=0; AC_SUBST([GNULIB_LOGBF]) GNULIB_LOGBL=0; AC_SUBST([GNULIB_LOGBL]) GNULIB_MODF=0; AC_SUBST([GNULIB_MODF]) GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF]) GNULIB_MODFL=0; AC_SUBST([GNULIB_MODFL]) GNULIB_POWF=0; AC_SUBST([GNULIB_POWF]) GNULIB_REMAINDER=0; AC_SUBST([GNULIB_REMAINDER]) GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF]) GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL]) GNULIB_RINT=0; AC_SUBST([GNULIB_RINT]) GNULIB_RINTF=0; AC_SUBST([GNULIB_RINTF]) GNULIB_RINTL=0; AC_SUBST([GNULIB_RINTL]) GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND]) GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF]) GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL]) GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT]) GNULIB_SINF=0; AC_SUBST([GNULIB_SINF]) GNULIB_SINL=0; AC_SUBST([GNULIB_SINL]) GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF]) GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF]) GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL]) GNULIB_TANF=0; AC_SUBST([GNULIB_TANF]) GNULIB_TANL=0; AC_SUBST([GNULIB_TANL]) GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF]) GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC]) GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF]) GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF]) HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL]) HAVE_ASINF=1; AC_SUBST([HAVE_ASINF]) HAVE_ASINL=1; AC_SUBST([HAVE_ASINL]) HAVE_ATANF=1; AC_SUBST([HAVE_ATANF]) HAVE_ATANL=1; AC_SUBST([HAVE_ATANL]) HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F]) HAVE_CBRT=1; AC_SUBST([HAVE_CBRT]) HAVE_CBRTF=1; AC_SUBST([HAVE_CBRTF]) HAVE_CBRTL=1; AC_SUBST([HAVE_CBRTL]) HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN]) HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL]) HAVE_COSF=1; AC_SUBST([HAVE_COSF]) HAVE_COSL=1; AC_SUBST([HAVE_COSL]) HAVE_COSHF=1; AC_SUBST([HAVE_COSHF]) HAVE_EXPF=1; AC_SUBST([HAVE_EXPF]) HAVE_EXPL=1; AC_SUBST([HAVE_EXPL]) HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1]) HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F]) HAVE_FABSF=1; AC_SUBST([HAVE_FABSF]) HAVE_FABSL=1; AC_SUBST([HAVE_FABSL]) HAVE_FMA=1; AC_SUBST([HAVE_FMA]) HAVE_FMAF=1; AC_SUBST([HAVE_FMAF]) HAVE_FMAL=1; AC_SUBST([HAVE_FMAL]) HAVE_FMODF=1; AC_SUBST([HAVE_FMODF]) HAVE_FMODL=1; AC_SUBST([HAVE_FMODL]) HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF]) HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF]) HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL]) HAVE_ILOGB=1; AC_SUBST([HAVE_ILOGB]) HAVE_ILOGBF=1; AC_SUBST([HAVE_ILOGBF]) HAVE_ILOGBL=1; AC_SUBST([HAVE_ILOGBL]) HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF]) HAVE_LOGF=1; AC_SUBST([HAVE_LOGF]) HAVE_LOGL=1; AC_SUBST([HAVE_LOGL]) HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F]) HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L]) HAVE_LOG1P=1; AC_SUBST([HAVE_LOG1P]) HAVE_LOG1PF=1; AC_SUBST([HAVE_LOG1PF]) HAVE_LOG1PL=1; AC_SUBST([HAVE_LOG1PL]) HAVE_LOGBF=1; AC_SUBST([HAVE_LOGBF]) HAVE_LOGBL=1; AC_SUBST([HAVE_LOGBL]) HAVE_MODFF=1; AC_SUBST([HAVE_MODFF]) HAVE_MODFL=1; AC_SUBST([HAVE_MODFL]) HAVE_POWF=1; AC_SUBST([HAVE_POWF]) HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER]) HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF]) HAVE_RINT=1; AC_SUBST([HAVE_RINT]) HAVE_RINTL=1; AC_SUBST([HAVE_RINTL]) HAVE_SINF=1; AC_SUBST([HAVE_SINF]) HAVE_SINL=1; AC_SUBST([HAVE_SINL]) HAVE_SINHF=1; AC_SUBST([HAVE_SINHF]) HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF]) HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL]) HAVE_TANF=1; AC_SUBST([HAVE_TANF]) HAVE_TANL=1; AC_SUBST([HAVE_TANL]) HAVE_TANHF=1; AC_SUBST([HAVE_TANHF]) HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) HAVE_DECL_CBRTF=1; AC_SUBST([HAVE_DECL_CBRTF]) HAVE_DECL_CBRTL=1; AC_SUBST([HAVE_DECL_CBRTL]) HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF]) HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL]) HAVE_DECL_COPYSIGNF=1; AC_SUBST([HAVE_DECL_COPYSIGNF]) HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) HAVE_DECL_EXP2=1; AC_SUBST([HAVE_DECL_EXP2]) HAVE_DECL_EXP2F=1; AC_SUBST([HAVE_DECL_EXP2F]) HAVE_DECL_EXP2L=1; AC_SUBST([HAVE_DECL_EXP2L]) HAVE_DECL_EXPM1L=1; AC_SUBST([HAVE_DECL_EXPM1L]) HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF]) HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL]) HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L]) HAVE_DECL_LOG2=1; AC_SUBST([HAVE_DECL_LOG2]) HAVE_DECL_LOG2F=1; AC_SUBST([HAVE_DECL_LOG2F]) HAVE_DECL_LOG2L=1; AC_SUBST([HAVE_DECL_LOG2L]) HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB]) HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER]) HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL]) HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF]) HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND]) HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF]) HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL]) HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL]) REPLACE_ACOSF=0; AC_SUBST([REPLACE_ACOSF]) REPLACE_ASINF=0; AC_SUBST([REPLACE_ASINF]) REPLACE_ATANF=0; AC_SUBST([REPLACE_ATANF]) REPLACE_ATAN2F=0; AC_SUBST([REPLACE_ATAN2F]) REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF]) REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL]) REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL]) REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) REPLACE_COSF=0; AC_SUBST([REPLACE_COSF]) REPLACE_COSHF=0; AC_SUBST([REPLACE_COSHF]) REPLACE_EXPF=0; AC_SUBST([REPLACE_EXPF]) REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1]) REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F]) REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2]) REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L]) REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL]) REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR]) REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) REPLACE_FMA=0; AC_SUBST([REPLACE_FMA]) REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF]) REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL]) REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD]) REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF]) REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL]) REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF]) REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT]) REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF]) REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL]) REPLACE_ILOGB=0; AC_SUBST([REPLACE_ILOGB]) REPLACE_ILOGBF=0; AC_SUBST([REPLACE_ILOGBF]) REPLACE_ILOGBL=0; AC_SUBST([REPLACE_ILOGBL]) REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) REPLACE_LOG=0; AC_SUBST([REPLACE_LOG]) REPLACE_LOGF=0; AC_SUBST([REPLACE_LOGF]) REPLACE_LOGL=0; AC_SUBST([REPLACE_LOGL]) REPLACE_LOG10=0; AC_SUBST([REPLACE_LOG10]) REPLACE_LOG10F=0; AC_SUBST([REPLACE_LOG10F]) REPLACE_LOG10L=0; AC_SUBST([REPLACE_LOG10L]) REPLACE_LOG1P=0; AC_SUBST([REPLACE_LOG1P]) REPLACE_LOG1PF=0; AC_SUBST([REPLACE_LOG1PF]) REPLACE_LOG1PL=0; AC_SUBST([REPLACE_LOG1PL]) REPLACE_LOG2=0; AC_SUBST([REPLACE_LOG2]) REPLACE_LOG2F=0; AC_SUBST([REPLACE_LOG2F]) REPLACE_LOG2L=0; AC_SUBST([REPLACE_LOG2L]) REPLACE_LOGB=0; AC_SUBST([REPLACE_LOGB]) REPLACE_LOGBF=0; AC_SUBST([REPLACE_LOGBF]) REPLACE_LOGBL=0; AC_SUBST([REPLACE_LOGBL]) REPLACE_MODF=0; AC_SUBST([REPLACE_MODF]) REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF]) REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL]) REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER]) REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF]) REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL]) REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC]) REPLACE_SINF=0; AC_SUBST([REPLACE_SINF]) REPLACE_SINHF=0; AC_SUBST([REPLACE_SINHF]) REPLACE_SQRTF=0; AC_SUBST([REPLACE_SQRTF]) REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL]) REPLACE_TANF=0; AC_SUBST([REPLACE_TANF]) REPLACE_TANHF=0; AC_SUBST([REPLACE_TANHF]) REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC]) REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) ]) # gl_LONG_DOUBLE_VS_DOUBLE # determines whether 'long double' and 'double' have the same representation. # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly. # The currently known platforms where this is the case are: # Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9. AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE], [ AC_CACHE_CHECK([whether long double and double are the same], [gl_cv_long_double_equals_double], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[typedef int check[sizeof (long double) == sizeof (double) && LDBL_MANT_DIG == DBL_MANT_DIG && LDBL_MAX_EXP == DBL_MAX_EXP && LDBL_MIN_EXP == DBL_MIN_EXP ? 1 : -1]; ]])], [gl_cv_long_double_equals_double=yes], [gl_cv_long_double_equals_double=no]) ]) if test $gl_cv_long_double_equals_double = yes; then AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1], [Define to 1 if 'long double' and 'double' have the same representation.]) HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 else HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 fi AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]) ]) gnuastro-0.5/bootstrapped/m4/malloca.m40000644000175000017500000000110113217200022015017 00000000000000# malloca.m4 serial 1 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2017 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MALLOCA], [ dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables dnl @ALLOCA@ and @LTALLOCA@. dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies. AC_REQUIRE([gl_EEMALLOC]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) ]) gnuastro-0.5/bootstrapped/m4/malloc.m40000644000175000017500000000642413217200022014673 00000000000000# malloc.m4 serial 15 dnl Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. m4_version_prereq([2.70], [] ,[ # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c AC_DEFUN([_AC_FUNC_MALLOC_IF], [ AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CHECK_HEADERS([stdlib.h]) AC_CACHE_CHECK([for GNU libc compatible malloc], [ac_cv_func_malloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif ]], [[char *p = malloc (0); int result = !p; free (p); return result;]]) ], [ac_cv_func_malloc_0_nonnull=yes], [ac_cv_func_malloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* \ | hpux* | solaris* | cygwin* | mingw*) ac_cv_func_malloc_0_nonnull=yes ;; # If we don't know, assume the worst. *) ac_cv_func_malloc_0_nonnull=no ;; esac ]) ]) AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2]) ])# _AC_FUNC_MALLOC_IF ]) # gl_FUNC_MALLOC_GNU # ------------------ # Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if # it is not. AC_DEFUN([gl_FUNC_MALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl _AC_FUNC_MALLOC_IF is defined in Autoconf. _AC_FUNC_MALLOC_IF( [AC_DEFINE([HAVE_MALLOC_GNU], [1], [Define to 1 if your system has a GNU libc compatible 'malloc' function, and to 0 otherwise.])], [AC_DEFINE([HAVE_MALLOC_GNU], [0]) REPLACE_MALLOC=1 ]) ]) # gl_FUNC_MALLOC_POSIX # -------------------- # Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it # fails), and replace malloc if it is not. AC_DEFUN([gl_FUNC_MALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test $gl_cv_func_malloc_posix = yes; then AC_DEFINE([HAVE_MALLOC_POSIX], [1], [Define if the 'malloc' function is POSIX compliant.]) else REPLACE_MALLOC=1 fi ]) # Test whether malloc, realloc, calloc are POSIX compliant, # Set gl_cv_func_malloc_posix to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_POSIX], [ AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], [gl_cv_func_malloc_posix], [ dnl It is too dangerous to try to allocate a large amount of memory: dnl some systems go to their knees when you do that. So assume that dnl all Unix implementations of the function are POSIX compliant. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[]], [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ choke me #endif ]])], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no]) ]) ]) gnuastro-0.5/bootstrapped/m4/lt~obsolete.m40000644000175000017500000001377413217177774016037 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2017 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) gnuastro-0.5/bootstrapped/m4/ltversion.m40000644000175000017500000000133513217177774015500 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2017 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4219 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6.40-6ca5-dirty]) m4_define([LT_PACKAGE_REVISION], [2.4.6.40]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6.40-6ca5-dirty' macro_revision='2.4.6.40' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) gnuastro-0.5/bootstrapped/m4/ltsugar.m40000644000175000017500000001044013217177774015131 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2017 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) gnuastro-0.5/bootstrapped/m4/ltoptions.m40000644000175000017500000003426213217177774015513 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2017 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) gnuastro-0.5/bootstrapped/m4/lstat.m40000644000175000017500000000516313217200022014552 00000000000000# serial 30 # Copyright (C) 1997-2001, 2003-2017 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. dnl From Jim Meyering. AC_DEFUN([gl_FUNC_LSTAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl If lstat does not exist, the replacement does dnl "#define lstat stat", and lstat.c is a no-op. AC_CHECK_FUNCS_ONCE([lstat]) if test $ac_cv_func_lstat = yes; then AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in solaris* | *no) REPLACE_LSTAT=1 ;; esac else HAVE_LSTAT=0 fi ]) # Prerequisites of lib/lstat.c. AC_DEFUN([gl_PREREQ_LSTAT], [:]) AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK], [ dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ. AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether lstat correctly handles trailing slash], [gl_cv_func_lstat_dereferences_slashed_symlink], [rm -f conftest.sym conftest.file echo >conftest.file AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[struct stat sbuf; if (symlink ("conftest.file", "conftest.sym") != 0) return 1; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ]])], [gl_cv_func_lstat_dereferences_slashed_symlink=yes], [gl_cv_func_lstat_dereferences_slashed_symlink=no], [case "$host_os" in *-gnu*) # Guess yes on glibc systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; mingw*) # Guess no on native Windows. gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; *) # If we don't know, assume the worst. gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; esac ]) rm -f conftest.sym conftest.file ]) case "$gl_cv_func_lstat_dereferences_slashed_symlink" in *yes) AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1], [Define to 1 if 'lstat' dereferences a symlink specified with a trailing slash.]) ;; esac ]) gnuastro-0.5/bootstrapped/m4/longlong.m40000644000175000017500000001120313217200022015232 00000000000000# longlong.m4 serial 17 dnl Copyright (C) 1999-2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_LONG_LONG_INT if 'long long int' works. # This fixes a bug in Autoconf 2.61, and can be faster # than what's in Autoconf 2.62 through 2.68. # Note: If the type 'long long int' exists but is only 32 bits large # (as on some very old compilers), HAVE_LONG_LONG_INT will not be # defined. In this case you can treat 'long long int' like 'long int'. AC_DEFUN([AC_TYPE_LONG_LONG_INT], [ AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], [ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. dnl If cross compiling, assume the bug is not important, since dnl nobody cross compiles for this platform as far as we know. AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[@%:@include @%:@ifndef LLONG_MAX @%:@ define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) @%:@ define LLONG_MAX (HALF - 1 + HALF) @%:@endif]], [[long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0;]])], [], [ac_cv_type_long_long_int=no], [:]) fi fi]) if test $ac_cv_type_long_long_int = yes; then AC_DEFINE([HAVE_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'long long int'.]) fi ]) # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. # This fixes a bug in Autoconf 2.61, and can be faster # than what's in Autoconf 2.62 through 2.68. # Note: If the type 'unsigned long long int' exists but is only 32 bits # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT # will not be defined. In this case you can treat 'unsigned long long int' # like 'unsigned long int'. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], [ AC_CACHE_CHECK([for unsigned long long int], [ac_cv_type_unsigned_long_long_int], [ac_cv_type_unsigned_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then AC_LINK_IFELSE( [_AC_TYPE_LONG_LONG_SNIPPET], [], [ac_cv_type_unsigned_long_long_int=no]) fi]) if test $ac_cv_type_unsigned_long_long_int = yes; then AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'unsigned long long int'.]) fi ]) # Expands to a C program that can be used to test for simultaneous support # of 'long long' and 'unsigned long long'. We don't want to say that # 'long long' is available if 'unsigned long long' is not, or vice versa, # because too many programs rely on the symmetry between signed and unsigned # integer types (excluding 'bool'). AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], [ AC_LANG_PROGRAM( [[/* For now, do not test the preprocessor; as of 2007 there are too many implementations with broken preprocessors. Perhaps this can be revisited in 2012. In the meantime, code should not expect #if to work with literals wider than 32 bits. */ /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63;]], [[/* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull));]]) ]) gnuastro-0.5/bootstrapped/m4/lock.m40000644000175000017500000000303713217200022014351 00000000000000# lock.m4 serial 14 dnl Copyright (C) 2005-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_LOCK], [ AC_REQUIRE([gl_THREADLIB]) if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false AC_CHECK_TYPE([pthread_rwlock_t], [has_rwlock=true AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], [Define if the POSIX multithreading library has read/write locks.])], [], [#include ]) if $has_rwlock; then gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [[#include ]], [[ #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ]])], [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1], [Define if the defines PTHREAD_MUTEX_RECURSIVE.])]) fi gl_PREREQ_LOCK ]) # Prerequisites of lib/glthread/lock.c. AC_DEFUN([gl_PREREQ_LOCK], [:]) gnuastro-0.5/bootstrapped/m4/localtime-buffer.m40000644000175000017500000000123013217200022016632 00000000000000# localtime-buffer.m4 serial 1 dnl Copyright (C) 2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LOCALTIME_BUFFER_DEFAULTS], [ NEED_LOCALTIME_BUFFER=0 ]) dnl Macro invoked from other modules, to signal that the compilation of dnl module 'localtime-buffer' is needed. AC_DEFUN([gl_LOCALTIME_BUFFER_NEEDED], [ AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS]) AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) NEED_LOCALTIME_BUFFER=1 REPLACE_GMTIME=1 REPLACE_LOCALTIME=1 ]) gnuastro-0.5/bootstrapped/m4/localename.m40000644000175000017500000000113413217200022015515 00000000000000# localename.m4 serial 2 dnl Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LOCALENAME], [ AC_REQUIRE([gt_LC_MESSAGES]) AC_REQUIRE([gt_INTL_MACOSX]) AC_CHECK_FUNCS([setlocale uselocale]) dnl Solaris 12 provides getlocalename_l, while Illumos doesn't have dnl it nor the equivalent. if test $ac_cv_func_uselocale = yes; then AC_CHECK_FUNCS([getlocalename_l]) fi ]) gnuastro-0.5/bootstrapped/m4/localeconv.m40000644000175000017500000000114713217200022015546 00000000000000# localeconv.m4 serial 1 dnl Copyright (C) 2012-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOCALECONV], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([gl_LOCALE_H]) if test $REPLACE_STRUCT_LCONV = 1; then REPLACE_LOCALECONV=1 fi ]) # Prerequisites of lib/localeconv.c. AC_DEFUN([gl_PREREQ_LOCALECONV], [ AC_CHECK_MEMBERS([struct lconv.decimal_point], [], [], [[#include ]]) ]) gnuastro-0.5/bootstrapped/m4/locale_h.m40000644000175000017500000001037313217200022015170 00000000000000# locale_h.m4 serial 20 dnl Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LOCALE_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) dnl Persuade glibc to define locale_t and the int_p_*, int_n_* dnl members of 'struct lconv'. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl If is replaced, then must also be replaced. AC_REQUIRE([gl_STDDEF_H]) dnl Solaris 11.0 defines the int_p_*, int_n_* members of 'struct lconv' dnl only if _LCONV_C99 is defined. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in solaris*) AC_DEFINE([_LCONV_C99], [1], [Define to 1 on Solaris.]) ;; esac AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001], [gl_cv_header_locale_h_posix2001], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include int x = LC_MESSAGES; int y = sizeof (((struct lconv *) 0)->decimal_point);]], [[]])], [gl_cv_header_locale_h_posix2001=yes], [gl_cv_header_locale_h_posix2001=no])]) dnl Check for . AC_CHECK_HEADERS_ONCE([xlocale.h]) if test $ac_cv_header_xlocale_h = yes; then HAVE_XLOCALE_H=1 dnl Check whether use of locale_t requires inclusion of , dnl e.g. on Mac OS X 10.5. If does not define locale_t by dnl itself, we assume that will do so. AC_CACHE_CHECK([whether locale.h defines locale_t], [gl_cv_header_locale_has_locale_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include locale_t x;]], [[]])], [gl_cv_header_locale_has_locale_t=yes], [gl_cv_header_locale_has_locale_t=no]) ]) if test $gl_cv_header_locale_has_locale_t = yes; then gl_cv_header_locale_h_needs_xlocale_h=no else gl_cv_header_locale_h_needs_xlocale_h=yes fi else HAVE_XLOCALE_H=0 gl_cv_header_locale_h_needs_xlocale_h=no fi AC_SUBST([HAVE_XLOCALE_H]) dnl Check whether 'struct lconv' is complete. dnl Bionic libc's 'struct lconv' is just a dummy. dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members. AC_CACHE_CHECK([whether struct lconv is properly defined], [gl_cv_sys_struct_lconv_ok], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include struct lconv l; int x = sizeof (l.decimal_point); int y = sizeof (l.int_p_cs_precedes);]], [[]])], [gl_cv_sys_struct_lconv_ok=yes], [gl_cv_sys_struct_lconv_ok=no]) ]) if test $gl_cv_sys_struct_lconv_ok = no; then REPLACE_STRUCT_LCONV=1 fi dnl is always overridden, because of GNULIB_POSIXCHECK. gl_NEXT_HEADERS([locale.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include /* Some systems provide declarations in a non-standard header. */ #if HAVE_XLOCALE_H # include #endif ]], [setlocale duplocale]) ]) AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_LOCALE_H_DEFAULTS], [ GNULIB_LOCALECONV=0; AC_SUBST([GNULIB_LOCALECONV]) GNULIB_SETLOCALE=0; AC_SUBST([GNULIB_SETLOCALE]) GNULIB_DUPLOCALE=0; AC_SUBST([GNULIB_DUPLOCALE]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV]) REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV]) ]) gnuastro-0.5/bootstrapped/m4/locale-zh.m40000644000175000017500000001270513217200022015301 00000000000000# locale-zh.m4 serial 13 dnl Copyright (C) 2003, 2005-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a chinese locale with GB18030 encoding. AC_DEFUN([gt_LOCALE_ZH_CN], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([ changequote(,)dnl #include #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } changequote([,])dnl ])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* ]) LOCALE_ZH_CN=$gt_cv_locale_zh_CN AC_SUBST([LOCALE_ZH_CN]) ]) gnuastro-0.5/bootstrapped/m4/locale-tr.m40000644000175000017500000001211113217200022015274 00000000000000# locale-tr.m4 serial 10 dnl Copyright (C) 2003, 2005-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a turkish locale with UTF-8 encoding. AC_DEFUN([gt_LOCALE_TR_UTF8], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a turkish Unicode locale], [gt_cv_locale_tr_utf8], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([ changequote(,)dnl #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. But BeOS does not implement the Turkish upper-/lowercase mappings. Therefore, let this program return 1 on BeOS. */ /* Check whether the given locale name is recognized by the system. */ #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; #else if (setlocale (LC_ALL, "") == NULL) return 1; #endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ #if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } #endif #ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; #endif /* Check whether in the abbreviation of the eighth month, the second character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) return 1; /* Check whether the upper-/lowercase mappings are as expected for Turkish. */ if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) return 1; return 0; } changequote([,])dnl ])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Turkish_Turkey.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=Turkish_Turkey.65001 else # None found. gt_cv_locale_tr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr_TR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr_TR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr.UTF-8 else # None found. gt_cv_locale_tr_utf8=none fi fi fi ;; esac else gt_cv_locale_tr_utf8=none fi rm -fr conftest* ]) LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 AC_SUBST([LOCALE_TR_UTF8]) ]) gnuastro-0.5/bootstrapped/m4/locale-ja.m40000644000175000017500000001326213217200022015251 00000000000000# locale-ja.m4 serial 13 dnl Copyright (C) 2003, 2005-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a japanese locale with EUC-JP encoding. AC_DEFUN([gt_LOCALE_JA], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([ changequote(,)dnl #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } changequote([,])dnl ])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_JA=$gt_cv_locale_ja AC_SUBST([LOCALE_JA]) ]) gnuastro-0.5/bootstrapped/m4/locale-fr.m40000644000175000017500000002466213217200022015274 00000000000000# locale-fr.m4 serial 18 dnl Copyright (C) 2003, 2005-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a french locale with traditional encoding. AC_DEFUN([gt_LOCALE_FR], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([ changequote(,)dnl #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } changequote([,])dnl ])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_FR=$gt_cv_locale_fr AC_SUBST([LOCALE_FR]) ]) dnl Determine the name of a french locale with UTF-8 encoding. AC_DEFUN([gt_LOCALE_FR_UTF8], [ AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([ changequote(,)dnl #include #include #if HAVE_LANGINFO_CODESET # include #endif #include #include struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } changequote([,])dnl ])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 AC_SUBST([LOCALE_FR_UTF8]) ]) gnuastro-0.5/bootstrapped/m4/localcharset.m40000644000175000017500000000112513217200022016061 00000000000000# localcharset.m4 serial 7 dnl Copyright (C) 2002, 2004, 2006, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LOCALCHARSET], [ dnl Prerequisites of lib/localcharset.c. AC_REQUIRE([AM_LANGINFO_CODESET]) AC_REQUIRE([gl_FCNTL_O_FLAGS]) AC_CHECK_DECLS_ONCE([getc_unlocked]) dnl Prerequisites of the lib/Makefile.am snippet. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_GLIBC21]) ]) gnuastro-0.5/bootstrapped/m4/limits-h.m40000644000175000017500000000202613217200022015144 00000000000000dnl Check whether limits.h has needed features. dnl Copyright 2016-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_DEFUN_ONCE([gl_LIMITS_H], [ gl_CHECK_NEXT_HEADERS([limits.h]) AC_CACHE_CHECK([whether limits.h has ULLONG_WIDTH etc.], [gl_cv_header_limits_width], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include int ullw = ULLONG_WIDTH;]])], [gl_cv_header_limits_width=yes], [gl_cv_header_limits_width=no])]) if test "$gl_cv_header_limits_width" = yes; then LIMITS_H= else LIMITS_H=limits.h fi AC_SUBST([LIMITS_H]) AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) ]) gnuastro-0.5/bootstrapped/m4/libunistring-base.m40000644000175000017500000001426013217200022017042 00000000000000# libunistring-base.m4 serial 5 dnl Copyright (C) 2010-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paolo Bonzini and Bruno Haible. dnl gl_LIBUNISTRING_MODULE([VERSION], [Module]) dnl Declares that the source files of Module should be compiled, unless we dnl are linking with libunistring and its version is >= the given VERSION. dnl Defines an automake conditional LIBUNISTRING_COMPILE_$MODULE that is dnl true if the source files of Module should be compiled. dnl This macro is to be used for public libunistring API, not for dnl undocumented API. dnl dnl You have to bump the VERSION argument to the next projected version dnl number each time you make a change that affects the behaviour of the dnl functions defined in Module (even if the sources of Module itself do not dnl change). AC_DEFUN([gl_LIBUNISTRING_MODULE], [ AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE]) dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from dnl gl_LIBUNISTRING_CORE if that macro has been run. AM_CONDITIONAL(AS_TR_CPP([LIBUNISTRING_COMPILE_$2]), [gl_LIBUNISTRING_VERSION_CMP([$1])]) ]) dnl gl_LIBUNISTRING_LIBHEADER([VERSION], [HeaderFile]) dnl Declares that HeaderFile should be created, unless we are linking dnl with libunistring and its version is >= the given VERSION. dnl HeaderFile should be relative to the lib directory and end in '.h'. dnl Prepares for substituting LIBUNISTRING_HEADERFILE (to HeaderFile or empty). dnl dnl When we are linking with the already installed libunistring and its version dnl is < VERSION, we create HeaderFile here, because we may compile functions dnl (via gl_LIBUNISTRING_MODULE above) that are not contained in the installed dnl version. dnl When we are linking with the already installed libunistring and its version dnl is > VERSION, we don't create HeaderFile here: it could cause compilation dnl errors in other libunistring header files if some types are missing. dnl dnl You have to bump the VERSION argument to the next projected version dnl number each time you make a non-comment change to the HeaderFile. AC_DEFUN([gl_LIBUNISTRING_LIBHEADER], [ AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE]) dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from dnl gl_LIBUNISTRING_CORE if that macro has been run. if gl_LIBUNISTRING_VERSION_CMP([$1]); then LIBUNISTRING_[]AS_TR_CPP([$2])='$2' else LIBUNISTRING_[]AS_TR_CPP([$2])= fi AC_SUBST([LIBUNISTRING_]AS_TR_CPP([$2])) ]) dnl Miscellaneous preparations/initializations. AC_DEFUN([gl_LIBUNISTRING_LIB_PREPARE], [ dnl Ensure that HAVE_LIBUNISTRING is fully determined at this point. m4_ifdef([gl_LIBUNISTRING], [AC_REQUIRE([gl_LIBUNISTRING])]) AC_REQUIRE([AC_PROG_AWK]) dnl Sed expressions to extract the parts of a version number. changequote(,) gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;} i\ 0 q ' gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;} i\ 0 q ' gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;} i\ 0 q ' changequote([,]) if test "$HAVE_LIBUNISTRING" = yes; then LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"` LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"` LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"` fi ]) dnl gl_LIBUNISTRING_VERSION_CMP([VERSION]) dnl Expands to a shell statement that evaluates to true if LIBUNISTRING_VERSION dnl is less than the VERSION argument. AC_DEFUN([gl_LIBUNISTRING_VERSION_CMP], [ { test "$HAVE_LIBUNISTRING" != yes \ || { dnl AS_LITERAL_IF exists and works fine since autoconf-2.59 at least. AS_LITERAL_IF([$1], [dnl This is the optimized variant, that assumes the argument is a literal: m4_pushdef([requested_version_major], [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^\([0-9]*\).*], [\1]), [])]) m4_pushdef([requested_version_minor], [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.]\([0-9]*\).*], [\1]), [$1])]) m4_pushdef([requested_version_subminor], [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.][0-9]*[.]\([0-9]*\).*], [\1]), [$1])]) test $LIBUNISTRING_VERSION_MAJOR -lt requested_version_major \ || { test $LIBUNISTRING_VERSION_MAJOR -eq requested_version_major \ && { test $LIBUNISTRING_VERSION_MINOR -lt requested_version_minor \ || { test $LIBUNISTRING_VERSION_MINOR -eq requested_version_minor \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt requested_version_subminor } } } m4_popdef([requested_version_subminor]) m4_popdef([requested_version_minor]) m4_popdef([requested_version_major]) ], [dnl This is the unoptimized variant: requested_version_major=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_major"` requested_version_minor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_minor"` requested_version_subminor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_subminor"` test $LIBUNISTRING_VERSION_MAJOR -lt $requested_version_major \ || { test $LIBUNISTRING_VERSION_MAJOR -eq $requested_version_major \ && { test $LIBUNISTRING_VERSION_MINOR -lt $requested_version_minor \ || { test $LIBUNISTRING_VERSION_MINOR -eq $requested_version_minor \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt $requested_version_subminor } } } ]) } }]) dnl gl_LIBUNISTRING_ARG_OR_ZERO([ARG], [ORIG]) expands to ARG if it is not the dnl same as ORIG, otherwise to 0. m4_define([gl_LIBUNISTRING_ARG_OR_ZERO], [m4_if([$1], [$2], [0], [$1])]) gnuastro-0.5/bootstrapped/m4/libtool.m40000644000175000017500000112707613217177774015133 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2017 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} _LT_DECL([], [AR], [1], [The archiver]) # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS _LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)]) # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. _LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -z "$STRIP"; then AC_MSG_RESULT([no]) else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS gnuastro-0.5/bootstrapped/m4/lib-prefix.m40000644000175000017500000002405513217200022015465 00000000000000# lib-prefix.m4 serial 11 dnl Copyright (C) 2001-2005, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HOST_CPU_C_ABI]) dnl Allow the user to override the result by setting acl_cv_libdirstems. AC_CACHE_CHECK([for the common suffixes of directories in the library search path], [acl_cv_libdirstems], [acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _LP64 int ok; #else error fail #endif ]])], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) dnl If $CC generates code for a 32-bit ABI, the libraries are dnl surely under $prefix/lib, not $prefix/lib64. case "$gl_cv_host_cpu_c_abi" in i386 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | s390 | sparc) ;; *) # x86_64 | arm64 | hppa64 | ia64 | mips64 | powerpc64* | s390x | sparc64 | ... dnl The result is a property of the system. However, non-system dnl compilers sometimes have odd library search paths. Therefore dnl prefer asking /usr/bin/gcc, if available, rather than $CC. searchpath=`(if test -f /usr/bin/gcc \ && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ LC_ALL=C /usr/bin/gcc -print-search-dirs; \ else \ LC_ALL=C $CC -print-search-dirs; \ fi) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" ]) # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` ]) gnuastro-0.5/bootstrapped/m4/lib-link.m40000644000175000017500000010044313217200022015121 00000000000000# lib-link.m4 serial 26 (gettext-0.18.2) dnl Copyright (C) 2001-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.54]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_LINK_IFELSE( [AC_LANG_PROGRAM([[$3]], [[$4]])], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_libname_spec, dnl acl_library_names_spec, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) gnuastro-0.5/bootstrapped/m4/lib-ld.m40000644000175000017500000001237213217200022014566 00000000000000# lib-ld.m4 serial 9 dnl Copyright (C) 1996-2003, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 /dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test -n "$LD"; then AC_MSG_CHECKING([for ld]) elif test "$GCC" = yes; then AC_MSG_CHECKING([for ld used by $CC]) elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi if test -n "$LD"; then # Let the user override the test with a path. : else AC_CACHE_VAL([acl_cv_path_LD], [ acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 double (*funcptr) (double, int) = ldexp; double x;]], [[return ldexp (x, -1) > 0;]])], [gl_cv_func_ldexp_in_libm=yes], [gl_cv_func_ldexp_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_ldexp_in_libm = yes; then LDEXP_LIBM=-lm fi fi AC_SUBST([LDEXP_LIBM]) ]) dnl Test whether ldexp() can be used without linking with libm. dnl Set gl_cv_func_ldexp_no_libm to 'yes' or 'no' accordingly. AC_DEFUN([gl_CHECK_LDEXP_NO_LIBM], [ AC_CACHE_CHECK([whether ldexp() can be used without linking with libm], [gl_cv_func_ldexp_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include double (*funcptr) (double, int) = ldexp; double x;]], [[return ldexp (x, -1) > 0;]])], [gl_cv_func_ldexp_no_libm=yes], [gl_cv_func_ldexp_no_libm=no]) ]) ]) gnuastro-0.5/bootstrapped/m4/lcmessage.m40000644000175000017500000000252513217200022015365 00000000000000# lcmessage.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1995-2002, 2004-2005, 2008-2014, 2016 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995. # Check whether LC_MESSAGES is available in . AC_DEFUN([gt_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[return LC_MESSAGES]])], [gt_cv_val_LC_MESSAGES=yes], [gt_cv_val_LC_MESSAGES=no])]) if test $gt_cv_val_LC_MESSAGES = yes; then AC_DEFINE([HAVE_LC_MESSAGES], [1], [Define if your file defines LC_MESSAGES.]) fi ]) gnuastro-0.5/bootstrapped/m4/largefile.m40000644000175000017500000001345313217200022015356 00000000000000# Enable large files on systems where this is not the default. # Copyright 1992-1996, 1998-2017 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. # The following implementation works around a problem in autoconf <= 2.69; # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, # or configures them incorrectly in some cases. m4_version_prereq([2.70], [] ,[ # _AC_SYS_LARGEFILE_TEST_INCLUDES # ------------------------------- m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], [@%:@include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ @%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]];[]dnl ]) # _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, # CACHE-VAR, # DESCRIPTION, # PROLOGUE, [FUNCTION-BODY]) # -------------------------------------------------------- m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE], [AC_CACHE_CHECK([for $1 value needed for large files], [$3], [while :; do m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( [AC_LANG_PROGRAM([$5], [$6])], [$3=no; break]) m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( [AC_LANG_PROGRAM([@%:@define $1 $2 $5], [$6])], [$3=$2; break]) $3=unknown break done]) case $$3 in #( no | unknown) ;; *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);; esac rm -rf conftest*[]dnl ])# _AC_SYS_LARGEFILE_MACRO_VALUE # AC_SYS_LARGEFILE # ---------------- # By default, many hosts won't let programs access large files; # one must use special compiler options to get large-file access to work. # For more details about this brain damage please see: # http://www.unix-systems.org/version2/whatsnew/lfs20mar.html AC_DEFUN([AC_SYS_LARGEFILE], [AC_ARG_ENABLE(largefile, [ --disable-largefile omit support for large files]) if test "$enable_largefile" != no; then AC_CACHE_CHECK([for special C compiler options needed for large files], ac_cv_sys_largefile_CC, [ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])]) AC_COMPILE_IFELSE([], [break]) CC="$CC -n32" AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break]) break done CC=$ac_save_CC rm -f conftest.$ac_ext fi]) if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits, [Number of bits in a file offset, on hosts where this is settable.], [_AC_SYS_LARGEFILE_TEST_INCLUDES]) if test $ac_cv_sys_file_offset_bits = unknown; then _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, ac_cv_sys_large_files, [Define for large files, on AIX-style hosts.], [_AC_SYS_LARGEFILE_TEST_INCLUDES]) fi AC_DEFINE([_DARWIN_USE_64_BIT_INODE], [1], [Enable large inode numbers on Mac OS X 10.5.]) fi ])# AC_SYS_LARGEFILE ])# m4_version_prereq 2.70 # Enable large files on systems where this is implemented by Gnulib, not by the # system headers. # Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib # overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively. AC_DEFUN([gl_LARGEFILE], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) dnl Native Windows. dnl mingw64 defines off_t to a 64-bit type already, if dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE. AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; ]], [[]])], [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no]) ]) if test $gl_cv_type_off_t_64 = no; then WINDOWS_64_BIT_OFF_T=1 else WINDOWS_64_BIT_OFF_T=0 fi dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat' dnl to 'struct _stat32i64' or 'struct _stat64' (depending on dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member. AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include struct stat buf; int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; ]], [[]])], [gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no]) ]) if test $gl_cv_member_st_size_64 = no; then WINDOWS_64_BIT_ST_SIZE=1 else WINDOWS_64_BIT_ST_SIZE=0 fi ;; *) dnl Nothing to do on gnulib's side. dnl A 64-bit off_t is dnl - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX, dnl OSF/1, Cygwin, dnl - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on dnl glibc, HP-UX, Solaris, dnl - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX, dnl - impossible to achieve on Minix 3.1.8. WINDOWS_64_BIT_OFF_T=0 WINDOWS_64_BIT_ST_SIZE=0 ;; esac ]) gnuastro-0.5/bootstrapped/m4/langinfo_h.m40000644000175000017500000000672113217200022015530 00000000000000# langinfo_h.m4 serial 7 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LANGINFO_H], [ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) dnl Persuade glibc-2.0.6 to define CODESET. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([langinfo.h]) dnl Determine whether exists. It is missing on mingw and BeOS. HAVE_LANGINFO_CODESET=0 HAVE_LANGINFO_T_FMT_AMPM=0 HAVE_LANGINFO_ERA=0 HAVE_LANGINFO_YESEXPR=0 AC_CHECK_HEADERS_ONCE([langinfo.h]) if test $ac_cv_header_langinfo_h = yes; then HAVE_LANGINFO_H=1 dnl Determine what defines. CODESET and ERA etc. are missing dnl on OpenBSD 3.8. T_FMT_AMPM and YESEXPR, NOEXPR are missing on IRIX 5.3. AC_CACHE_CHECK([whether langinfo.h defines CODESET], [gl_cv_header_langinfo_codeset], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include int a = CODESET; ]])], [gl_cv_header_langinfo_codeset=yes], [gl_cv_header_langinfo_codeset=no]) ]) if test $gl_cv_header_langinfo_codeset = yes; then HAVE_LANGINFO_CODESET=1 fi AC_CACHE_CHECK([whether langinfo.h defines T_FMT_AMPM], [gl_cv_header_langinfo_t_fmt_ampm], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include int a = T_FMT_AMPM; ]])], [gl_cv_header_langinfo_t_fmt_ampm=yes], [gl_cv_header_langinfo_t_fmt_ampm=no]) ]) if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then HAVE_LANGINFO_T_FMT_AMPM=1 fi AC_CACHE_CHECK([whether langinfo.h defines ERA], [gl_cv_header_langinfo_era], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include int a = ERA; ]])], [gl_cv_header_langinfo_era=yes], [gl_cv_header_langinfo_era=no]) ]) if test $gl_cv_header_langinfo_era = yes; then HAVE_LANGINFO_ERA=1 fi AC_CACHE_CHECK([whether langinfo.h defines YESEXPR], [gl_cv_header_langinfo_yesexpr], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include int a = YESEXPR; ]])], [gl_cv_header_langinfo_yesexpr=yes], [gl_cv_header_langinfo_yesexpr=no]) ]) if test $gl_cv_header_langinfo_yesexpr = yes; then HAVE_LANGINFO_YESEXPR=1 fi else HAVE_LANGINFO_H=0 fi AC_SUBST([HAVE_LANGINFO_H]) AC_SUBST([HAVE_LANGINFO_CODESET]) AC_SUBST([HAVE_LANGINFO_T_FMT_AMPM]) AC_SUBST([HAVE_LANGINFO_ERA]) AC_SUBST([HAVE_LANGINFO_YESEXPR]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include ]], [nl_langinfo]) ]) AC_DEFUN([gl_LANGINFO_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_LANGINFO_H_DEFAULTS], [ GNULIB_NL_LANGINFO=0; AC_SUBST([GNULIB_NL_LANGINFO]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_NL_LANGINFO=1; AC_SUBST([HAVE_NL_LANGINFO]) REPLACE_NL_LANGINFO=0; AC_SUBST([REPLACE_NL_LANGINFO]) ]) gnuastro-0.5/bootstrapped/m4/iswblank.m40000644000175000017500000000234113217200022015230 00000000000000# iswblank.m4 serial 4 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISWBLANK], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) dnl Persuade glibc to declare iswblank(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([iswblank]) AC_CHECK_DECLS([iswblank], , , [[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include #include ]]) if test $ac_cv_func_iswblank = no; then HAVE_ISWBLANK=0 if test $ac_cv_have_decl_iswblank = yes; then REPLACE_ISWBLANK=1 fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl Redefine all of iswcntrl, ..., towupper in . : else if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then dnl Redefine only iswblank. : fi fi ]) gnuastro-0.5/bootstrapped/m4/isnanl.m40000644000175000017500000001641713217200022014713 00000000000000# isnanl.m4 serial 20 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISNANL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNANL_LIBM= gl_HAVE_ISNANL_NO_LIBM if test $gl_cv_func_isnanl_no_libm = no; then gl_HAVE_ISNANL_IN_LIBM if test $gl_cv_func_isnanl_in_libm = yes; then ISNANL_LIBM=-lm fi fi dnl The variable gl_func_isnanl set here is used by isnan.m4. if test $gl_cv_func_isnanl_no_libm = yes \ || test $gl_cv_func_isnanl_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $ISNANL_LIBM" gl_FUNC_ISNANL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_isnanl_works" in *yes) gl_func_isnanl=yes ;; *) gl_func_isnanl=no; ISNANL_LIBM= ;; esac else gl_func_isnanl=no fi if test $gl_func_isnanl != yes; then HAVE_ISNANL=0 fi AC_SUBST([ISNANL_LIBM]) ]) AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM], [ gl_HAVE_ISNANL_NO_LIBM gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm if test $gl_func_isnanl_no_libm = yes; then gl_FUNC_ISNANL_WORKS case "$gl_cv_func_isnanl_works" in *yes) ;; *) gl_func_isnanl_no_libm=no ;; esac fi if test $gl_func_isnanl_no_libm = yes; then AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1], [Define if the isnan(long double) function is available in libc.]) fi ]) dnl Prerequisites of replacement isnanl definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNANL], [ gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) ]) dnl Test whether isnanl() can be used without libm. AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm], [gl_cv_func_isnanl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include #if __GNUC__ >= 4 # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x;]], [[return isnanl (x);]])], [gl_cv_func_isnanl_no_libm=yes], [gl_cv_func_isnanl_no_libm=no]) ]) ]) dnl Test whether isnanl() can be used with libm. AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(long double) can be used with libm], [gl_cv_func_isnanl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include #if __GNUC__ >= 4 # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x;]], [[return isnanl (x);]])], [gl_cv_func_isnanl_in_libm=yes], [gl_cv_func_isnanl_in_libm=no]) LIBS="$save_LIBS" ]) ]) dnl Test whether isnanl() recognizes all canonical numbers which are neither dnl finite nor infinite. AC_DEFUN([gl_FUNC_ISNANL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #if __GNUC__ >= 4 # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif int main () { int result = 0; if (!isnanl (NaNl ())) result |= 1; { memory_long_double m; unsigned int i; /* The isnanl function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit (since the exponent never extends to bit 31). */ m.value = NaNl (); m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); for (i = 0; i < NWORDS; i++) m.word[i] |= 1; if (!isnanl (m.value)) result |= 1; } #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } /* isnanl should return something even for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 64; } #endif return result; }]])], [gl_cv_func_isnanl_works=yes], [gl_cv_func_isnanl_works=no], [case "$host_os" in mingw*) # Guess yes on mingw, no on MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_func_isnanl_works="guessing yes"], [gl_cv_func_isnanl_works="guessing no"]) ;; *) gl_cv_func_isnanl_works="guessing yes" ;; esac ]) ]) ]) gnuastro-0.5/bootstrapped/m4/isnanf.m40000644000175000017500000001264313217200022014702 00000000000000# isnanf.m4 serial 15 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to get or define isnanf(). AC_DEFUN([gl_FUNC_ISNANF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNANF_LIBM= gl_HAVE_ISNANF_NO_LIBM if test $gl_cv_func_isnanf_no_libm = no; then gl_HAVE_ISNANF_IN_LIBM if test $gl_cv_func_isnanf_in_libm = yes; then ISNANF_LIBM=-lm fi fi dnl The variable gl_func_isnanf set here is used by isnan.m4. if test $gl_cv_func_isnanf_no_libm = yes \ || test $gl_cv_func_isnanf_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $ISNANF_LIBM" gl_ISNANF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_isnanf_works" in *yes) gl_func_isnanf=yes ;; *) gl_func_isnanf=no; ISNANF_LIBM= ;; esac else gl_func_isnanf=no fi if test $gl_func_isnanf != yes; then HAVE_ISNANF=0 fi AC_SUBST([ISNANF_LIBM]) ]) dnl Check how to get or define isnanf() without linking with libm. AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM], [ gl_HAVE_ISNANF_NO_LIBM if test $gl_cv_func_isnanf_no_libm = yes; then gl_ISNANF_WORKS fi if test $gl_cv_func_isnanf_no_libm = yes \ && { case "$gl_cv_func_isnanf_works" in *yes) true;; *) false;; esac }; then gl_func_isnanf_no_libm=yes AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1], [Define if the isnan(float) function is available in libc.]) else gl_func_isnanf_no_libm=no fi ]) dnl Prerequisites of replacement isnanf definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNANF], [ gl_FLOAT_EXPONENT_LOCATION ]) dnl Test whether isnanf() can be used without libm. AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm], [gl_cv_func_isnanf_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include #if __GNUC__ >= 4 # undef isnanf # define isnanf(x) __builtin_isnanf ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x;]], [[return isnanf (x);]])], [gl_cv_func_isnanf_no_libm=yes], [gl_cv_func_isnanf_no_libm=no]) ]) ]) dnl Test whether isnanf() can be used with libm. AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(float) can be used with libm], [gl_cv_func_isnanf_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include #if __GNUC__ >= 4 # undef isnanf # define isnanf(x) __builtin_isnanf ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x;]], [[return isnanf (x);]])], [gl_cv_func_isnanf_in_libm=yes], [gl_cv_func_isnanf_in_libm=no]) LIBS="$save_LIBS" ]) ]) dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1), dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5). AC_DEFUN([gl_ISNANF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #if __GNUC__ >= 4 # undef isnanf # define isnanf(x) __builtin_isnanf ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif /* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ #ifdef __DECC static float NaN () { static float zero = 0.0f; return zero / zero; } #else # define NaN() (0.0f / 0.0f) #endif #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; float value; } memory_float; int main() { int result = 0; if (isnanf (1.0f / 0.0f)) result |= 1; if (!isnanf (NaN ())) result |= 2; #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* The isnanf function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit. */ if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) { memory_float m; m.value = NaN (); /* Set the bits below the exponent to 01111...111. */ m.word[0] &= -1U << FLT_EXPBIT0_BIT; m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1; if (!isnanf (m.value)) result |= 4; } #endif return result; }]])], [gl_cv_func_isnanf_works=yes], [gl_cv_func_isnanf_works=no], [case "$host_os" in irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;; mingw*) # Guess yes on mingw, no on MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_func_isnanf_works="guessing yes"], [gl_cv_func_isnanf_works="guessing no"]) ;; *) gl_cv_func_isnanf_works="guessing yes" ;; esac ]) ]) ]) gnuastro-0.5/bootstrapped/m4/isnand.m40000644000175000017500000000525113217200022014675 00000000000000# isnand.m4 serial 11 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to get or define isnand(). AC_DEFUN([gl_FUNC_ISNAND], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNAND_LIBM= gl_HAVE_ISNAND_NO_LIBM if test $gl_cv_func_isnand_no_libm = no; then gl_HAVE_ISNAND_IN_LIBM if test $gl_cv_func_isnand_in_libm = yes; then ISNAND_LIBM=-lm fi fi dnl The variable gl_func_isnand set here is used by isnan.m4. if test $gl_cv_func_isnand_no_libm = yes \ || test $gl_cv_func_isnand_in_libm = yes; then gl_func_isnand=yes else gl_func_isnand=no HAVE_ISNAND=0 fi AC_SUBST([ISNAND_LIBM]) ]) dnl Check how to get or define isnand() without linking with libm. AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM], [ gl_HAVE_ISNAND_NO_LIBM gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm if test $gl_cv_func_isnand_no_libm = yes; then AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1], [Define if the isnan(double) function is available in libc.]) fi ]) dnl Prerequisites of replacement isnand definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNAND], [ AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) ]) dnl Test whether isnand() can be used with libm. AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(double) can be used with libm], [gl_cv_func_isnand_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include #if __GNUC__ >= 4 # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #elif defined isnan # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x;]], [[return isnand (x);]])], [gl_cv_func_isnand_in_libm=yes], [gl_cv_func_isnand_in_libm=no]) LIBS="$save_LIBS" ]) ]) AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm], [gl_cv_func_isnand_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include #if __GNUC__ >= 4 # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #else # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x;]], [[return isnand (x);]])], [gl_cv_func_isnand_no_libm=yes], [gl_cv_func_isnand_no_libm=no]) ]) ]) gnuastro-0.5/bootstrapped/m4/isblank.m40000644000175000017500000000103213217200022015035 00000000000000# isblank.m4 serial 3 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISBLANK], [ dnl Persuade glibc to declare isblank(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([isblank]) if test $ac_cv_func_isblank = no; then HAVE_ISBLANK=0 fi ]) gnuastro-0.5/bootstrapped/m4/ioctl.m40000644000175000017500000000305013217200022014526 00000000000000# ioctl.m4 serial 5 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_IOCTL], [ AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_SYS_SOCKET]) HAVE_IOCTL=1 if test "$ac_cv_header_winsock2_h" = yes; then dnl Even if the 'socket' module is not used here, another part of the dnl application may use it and pass file descriptors that refer to dnl sockets to the ioctl() function. So enable the support for sockets. HAVE_IOCTL=0 else AC_CHECK_FUNCS([ioctl]) dnl On glibc systems, the second parameter is 'unsigned long int request', dnl not 'int request'. We cannot simply cast the function pointer, but dnl instead need a wrapper. AC_CACHE_CHECK([for ioctl with POSIX signature], [gl_cv_func_ioctl_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include /* On some platforms, ioctl() is declared in . */ #include ]], [[extern #ifdef __cplusplus "C" #endif int ioctl (int, int, ...); ]]) ], [gl_cv_func_ioctl_posix_signature=yes], [gl_cv_func_ioctl_posix_signature=no]) ]) if test $gl_cv_func_ioctl_posix_signature != yes; then REPLACE_IOCTL=1 fi fi ]) gnuastro-0.5/bootstrapped/m4/inttypes_h.m40000644000175000017500000000177413217200022015615 00000000000000# inttypes_h.m4 serial 10 dnl Copyright (C) 1997-2004, 2006, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_inttypes_h=yes], [gl_cv_header_inttypes_h=no])]) if test $gl_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) gnuastro-0.5/bootstrapped/m4/inttypes.m40000644000175000017500000001232013217200022015273 00000000000000# inttypes.m4 serial 26 dnl Copyright (C) 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Derek Price, Bruno Haible. dnl Test whether is supported or must be substituted. AC_DEFUN([gl_INTTYPES_H], [ AC_REQUIRE([gl_INTTYPES_INCOMPLETE]) gl_INTTYPES_PRI_SCN ]) AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE], [ AC_REQUIRE([gl_STDINT_H]) AC_CHECK_HEADERS_ONCE([inttypes.h]) dnl Override always, so that the portability warnings work. AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([inttypes.h]) AC_REQUIRE([gl_MULTIARCH]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include ]], [imaxabs imaxdiv strtoimax strtoumax]) ]) # Ensure that the PRI* and SCN* macros are defined appropriately. AC_DEFUN([gl_INTTYPES_PRI_SCN], [ AC_REQUIRE([gt_INTTYPES_PRI]) PRIPTR_PREFIX= if test -n "$STDINT_H"; then dnl Using the gnulib . It always defines intptr_t to 'long'. PRIPTR_PREFIX='"l"' else dnl Using the system's . for glpfx in '' l ll I64; do case $glpfx in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; I64) gltype1='__int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include extern intptr_t foo; extern $gltype1 foo;]])], [PRIPTR_PREFIX='"'$glpfx'"']) test -n "$PRIPTR_PREFIX" && break done fi AC_SUBST([PRIPTR_PREFIX]) gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [INT32_MAX_LT_INTMAX_MAX], [defined INT32_MAX && defined INTMAX_MAX], [INT32_MAX < INTMAX_MAX], [sizeof (int) < sizeof (long long int)]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [INT64_MAX_EQ_LONG_MAX], [defined INT64_MAX], [INT64_MAX == LONG_MAX], [sizeof (long long int) == sizeof (long int)]) else INT64_MAX_EQ_LONG_MAX=-1 fi gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [UINT32_MAX_LT_UINTMAX_MAX], [defined UINT32_MAX && defined UINTMAX_MAX], [UINT32_MAX < UINTMAX_MAX], [sizeof (unsigned int) < sizeof (unsigned long long int)]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [UINT64_MAX_EQ_ULONG_MAX], [defined UINT64_MAX], [UINT64_MAX == ULONG_MAX], [sizeof (unsigned long long int) == sizeof (unsigned long int)]) else UINT64_MAX_EQ_ULONG_MAX=-1 fi ]) # Define the symbol $1 to be 1 if the condition is true, 0 otherwise. # If $2 is true, the condition is $3; otherwise if long long int is supported # approximate the condition with $4; otherwise, assume the condition is false. # The condition should work on all C99 platforms; the approximations should be # good enough to work on all practical pre-C99 platforms. # $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants. AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], [ AC_CACHE_CHECK([whether $3], [gl_cv_test_$1], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include #if HAVE_STDINT_H #include #endif #if $2 #define CONDITION ($3) #elif HAVE_LONG_LONG_INT #define CONDITION ($4) #else #define CONDITION 0 #endif int test[CONDITION ? 1 : -1];]])], [gl_cv_test_$1=yes], [gl_cv_test_$1=no])]) if test $gl_cv_test_$1 = yes; then $1=1; else $1=0; fi AC_SUBST([$1]) ]) AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_INTTYPES_H_DEFAULTS], [ GNULIB_IMAXABS=0; AC_SUBST([GNULIB_IMAXABS]) GNULIB_IMAXDIV=0; AC_SUBST([GNULIB_IMAXDIV]) GNULIB_STRTOIMAX=0; AC_SUBST([GNULIB_STRTOIMAX]) GNULIB_STRTOUMAX=0; AC_SUBST([GNULIB_STRTOUMAX]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS]) HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX]) HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX]) REPLACE_STRTOIMAX=0; AC_SUBST([REPLACE_STRTOIMAX]) REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX]) INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX]) INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX]) PRI_MACROS_BROKEN=0; AC_SUBST([PRI_MACROS_BROKEN]) PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX]) UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX]) UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX]) ]) gnuastro-0.5/bootstrapped/m4/inttypes-pri.m40000644000175000017500000000234513217200022016071 00000000000000# inttypes-pri.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1997-2002, 2006, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.53]) # Define PRI_MACROS_BROKEN if exists and defines the PRI* # macros to non-string values. This is the case on AIX 4.3.3. AC_DEFUN([gt_INTTYPES_PRI], [ AC_CHECK_HEADERS([inttypes.h]) if test $ac_cv_header_inttypes_h = yes; then AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], [gt_cv_inttypes_pri_broken], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifdef PRId32 char *p = PRId32; #endif ]], [[]])], [gt_cv_inttypes_pri_broken=no], [gt_cv_inttypes_pri_broken=yes]) ]) fi if test "$gt_cv_inttypes_pri_broken" = yes; then AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1], [Define if exists and defines unusable PRI* macros.]) PRI_MACROS_BROKEN=1 else PRI_MACROS_BROKEN=0 fi AC_SUBST([PRI_MACROS_BROKEN]) ]) gnuastro-0.5/bootstrapped/m4/intmax_t.m40000644000175000017500000000416613217200022015250 00000000000000# intmax_t.m4 serial 8 dnl Copyright (C) 1997-2004, 2006-2007, 2009-2017 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_PREREQ([2.53]) # Define intmax_t to 'long' or 'long long' # if it is not already defined in or . AC_DEFUN([gl_AC_TYPE_INTMAX_T], [ dnl For simplicity, we assume that a header file defines 'intmax_t' if and dnl only if it defines 'uintmax_t'. AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) test $ac_cv_type_long_long_int = yes \ && ac_type='long long' \ || ac_type='long' AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], [Define to long or long long if and don't define.]) else AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in or .]) fi ]) dnl An alternative would be to explicitly test for 'intmax_t'. AC_DEFUN([gt_AC_TYPE_INTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif ]], [[intmax_t x = -1; return !x;]])], [gt_cv_c_intmax_t=yes], [gt_cv_c_intmax_t=no])]) if test $gt_cv_c_intmax_t = yes; then AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in or .]) else AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) test $ac_cv_type_long_long_int = yes \ && ac_type='long long' \ || ac_type='long' AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], [Define to long or long long if and don't define.]) fi ]) gnuastro-0.5/bootstrapped/m4/intlmacosx.m40000644000175000017500000000474513217200022015611 00000000000000# intlmacosx.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2004-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in Mac OS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFLocaleCopyCurrent();]])], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) gnuastro-0.5/bootstrapped/m4/inet_pton.m40000644000175000017500000000422313217200022015416 00000000000000# inet_pton.m4 serial 18 dnl Copyright (C) 2006, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_INET_PTON], [ AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) dnl Persuade Solaris to declare inet_pton. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_C_RESTRICT]) dnl Most platforms that provide inet_pton define it in libc. dnl Solaris 8..10 provide inet_pton in libnsl instead. dnl Solaris 2.6..7 provide inet_pton in libresolv instead. dnl Haiku provides it in -lnetwork. dnl Native Windows provides it in -lws2_32 instead, with a declaration in dnl , and it uses stdcall calling convention, not cdecl dnl (hence we cannot use AC_CHECK_FUNCS, AC_SEARCH_LIBS to find it). HAVE_INET_PTON=1 INET_PTON_LIB= gl_PREREQ_SYS_H_WINSOCK2 if test $HAVE_WINSOCK2_H = 1; then AC_CHECK_DECLS([inet_pton],,, [[#include ]]) if test $ac_cv_have_decl_inet_pton = yes; then dnl It needs to be overridden, because the stdcall calling convention dnl is not compliant with POSIX. REPLACE_INET_PTON=1 INET_PTON_LIB="-lws2_32" else HAVE_DECL_INET_PTON=0 HAVE_INET_PTON=0 fi else gl_save_LIBS=$LIBS AC_SEARCH_LIBS([inet_pton], [nsl resolv network], [], [AC_CHECK_FUNCS([inet_pton]) if test $ac_cv_func_inet_pton = no; then HAVE_INET_PTON=0 fi ]) LIBS=$gl_save_LIBS if test "$ac_cv_search_inet_pton" != "no" \ && test "$ac_cv_search_inet_pton" != "none required"; then INET_PTON_LIB="$ac_cv_search_inet_pton" fi AC_CHECK_HEADERS_ONCE([netdb.h]) AC_CHECK_DECLS([inet_pton],,, [[#include #if HAVE_NETDB_H # include #endif ]]) if test $ac_cv_have_decl_inet_pton = no; then HAVE_DECL_INET_PTON=0 fi fi AC_SUBST([INET_PTON_LIB]) ]) # Prerequisites of lib/inet_pton.c. AC_DEFUN([gl_PREREQ_INET_PTON], [ AC_REQUIRE([gl_SOCKET_FAMILIES]) ]) gnuastro-0.5/bootstrapped/m4/include_next.m40000644000175000017500000002106113217200022016077 00000000000000# include_next.m4 serial 24 dnl Copyright (C) 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Derek Price. dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER, dnl and PRAGMA_COLUMNS. dnl dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to dnl 'include' otherwise. dnl dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler dnl supports it in the special case that it is the first include directive in dnl the given file, or to 'include' otherwise. dnl dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, dnl so as to avoid GCC warnings when the gcc option -pedantic is used. dnl '#pragma GCC system_header' has the same effect as if the file was found dnl through the include search path specified with '-isystem' options (as dnl opposed to the search path specified with '-I' options). Namely, gcc dnl does not warn about some things, and on some systems (Solaris and Interix) dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead dnl of plain '__STDC__'. dnl dnl PRAGMA_COLUMNS can be used in files that override system header files, so dnl as to avoid compilation errors on HP NonStop systems when the gnulib file dnl is included by a system header file that does a "#pragma COLUMNS 80" (which dnl has the effect of truncating the lines of that file and all files that it dnl includes to 80 columns) and the gnulib file has lines longer than 80 dnl columns. AC_DEFUN([gl_INCLUDE_NEXT], [ AC_LANG_PREPROC_REQUIRE() AC_CACHE_CHECK([whether the preprocessor supports include_next], [gl_cv_have_include_next], [rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on dnl AIX 6.1 support include_next when used as first preprocessor directive dnl in a file, but not when preceded by another include directive. Check dnl for this bug by including . dnl Additionally, with this same compiler, include_next is a no-op when dnl used in a header file that was included by specifying its absolute dnl file name. Despite these two bugs, include_next is used in the dnl compiler's . By virtue of the second bug, we need to use dnl include_next as well in this case. cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" dnl We intentionally avoid using AC_LANG_SOURCE here. AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], [gl_cv_have_include_next=yes], [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], [gl_cv_have_include_next=buggy], [gl_cv_have_include_next=no]) ]) CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 ]) PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi AC_SUBST([INCLUDE_NEXT]) AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) AC_SUBST([PRAGMA_SYSTEM_HEADER]) AC_CACHE_CHECK([whether system header files limit the line length], [gl_cv_pragma_columns], [dnl HP NonStop systems, which define __TANDEM, have this misfeature. AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_pragma_columns=yes], [gl_cv_pragma_columns=no]) ]) if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi AC_SUBST([PRAGMA_COLUMNS]) ]) # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------------ # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be # ''; otherwise define it to be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # Also, if #include_next works as first preprocessing directive in a file, # define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be ''; otherwise define it to # be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # That way, a header file with the following line: # #@INCLUDE_NEXT@ @NEXT_FOO_H@ # or # #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ # behaves (after sed substitution) as if it contained # #include_next # even if the compiler does not support include_next. # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. # # This macro also checks whether each header exists, by invoking # AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. AC_DEFUN([gl_CHECK_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [check]) ]) # gl_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------ # Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. # This is suitable for headers like that are standardized by C89 # and therefore can be assumed to exist. AC_DEFUN([gl_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [assume]) ]) # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], [ AC_REQUIRE([gl_INCLUDE_NEXT]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_if([$2], [check], [AC_CHECK_HEADERS_ONCE([$1]) ]) dnl FIXME: gl_next_header and gl_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_next_header], [gl_cv_next_]m4_defn([gl_HEADER_NAME])) if test $gl_cv_have_include_next = yes; then AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) else AC_CACHE_CHECK( [absolute name of <]m4_defn([gl_HEADER_NAME])[>], m4_defn([gl_next_header]), [m4_if([$2], [check], [AS_VAR_PUSHDEF([gl_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME])) if test AS_VAR_GET(gl_header_exists) = yes; then AS_VAR_POPDEF([gl_header_exists]) ]) gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) AS_VAR_SET(gl_next_header, ['"'$gl_header'"']) m4_if([$2], [check], [else AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) fi ]) ]) fi AC_SUBST( AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), [AS_VAR_GET(gl_next_header)]) if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'gl_HEADER_NAME'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=AS_VAR_GET(gl_next_header) fi AC_SUBST( AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), [$gl_next_as_first_directive]) AS_VAR_POPDEF([gl_next_header])]) ]) # Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; # this fallback is safe for all earlier autoconf versions. m4_define_default([AC_LANG_DEFINES_PROVIDED]) gnuastro-0.5/bootstrapped/m4/host-cpu-c-abi.m40000644000175000017500000003043113217200022016132 00000000000000# host-cpu-c-abi.m4 serial 8 dnl Copyright (C) 2002-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible and Sam Steingold. dnl Sets the HOST_CPU variable to the canonical name of the CPU. dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its dnl C language ABI (application binary interface). dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in dnl config.h. dnl dnl This canonical name can be used to select a particular assembly language dnl source file that will interoperate with C code on the given host. dnl dnl For example: dnl * 'i386' and 'sparc' are different canonical names, because code for i386 dnl will not run on SPARC CPUs and vice versa. They have different dnl instruction sets. dnl * 'sparc' and 'sparc64' are different canonical names, because code for dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit dnl mode, but not both. dnl * 'mips' and 'mipsn32' are different canonical names, because they use dnl different argument passing and return conventions for C functions, and dnl although the instruction set of 'mips' is a large subset of the dnl instruction set of 'mipsn32'. dnl * 'mipsn32' and 'mips64' are different canonical names, because they use dnl different sizes for the C types like 'int' and 'void *', and although dnl the instruction sets of 'mipsn32' and 'mips64' are the same. dnl * The same canonical name is used for different endiannesses. You can dnl determine the endianness through preprocessor symbols: dnl - 'arm': test __ARMEL__. dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because dnl - Instructions that do not exist on all of these CPUs (cmpxchg, dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your dnl assembly language source files use such instructions, you will dnl need to make the distinction. dnl - Speed of execution of the common instruction set is reasonable across dnl the entire family of CPUs. If you have assembly language source files dnl that are optimized for particular CPU types (like GNU gmp has), you dnl will need to make the distinction. dnl See . AC_DEFUN([gl_HOST_CPU_C_ABI], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], [case "$host_cpu" in changequote(,)dnl i[4567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=x86_64-x32], [gl_cv_host_cpu_c_abi=x86_64])], [gl_cv_host_cpu_c_abi=i386]) ;; changequote(,)dnl alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) changequote([,])dnl gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __aarch64__ int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=arm64-ilp32], [gl_cv_host_cpu_c_abi=arm64])], [# Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 if LC_ALL=C grep -E 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* ]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=hppa64], [gl_cv_host_cpu_c_abi=hppa]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=ia64-ilp32], [gl_cv_host_cpu_c_abi=ia64]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mips64], [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIO32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mipsn32], [gl_cv_host_cpu_c_abi=mips])]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif ]])], [# On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=powerpc64-elfv2], [gl_cv_host_cpu_c_abi=powerpc64]) ], [gl_cv_host_cpu_c_abi=powerpc]) ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=s390x], [gl_cv_host_cpu_c_abi=s390]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=sparc64], [gl_cv_host_cpu_c_abi=sparc]) ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac ]) dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" AC_SUBST([HOST_CPU]) AC_SUBST([HOST_CPU_C_ABI]) # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h <. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from ./configure.ac, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([gl_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable # Pre-early section. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_PROG_AR_RANLIB]) AC_REQUIRE([AM_PROG_CC_C_O]) # Code from module absolute-header: # Code from module accept: # Code from module accept-tests: # Code from module alloca: # Code from module alloca-opt: # Code from module alloca-opt-tests: # Code from module argp: # Code from module argp-tests: # Code from module arpa_inet: # Code from module arpa_inet-tests: # Code from module binary-io: # Code from module binary-io-tests: # Code from module bind: # Code from module bind-tests: # Code from module btowc: # Code from module btowc-tests: # Code from module builtin-expect: # Code from module c-ctype: # Code from module c-ctype-tests: # Code from module c-strcase: # Code from module c-strcase-tests: # Code from module cloexec: # Code from module cloexec-tests: # Code from module close: # Code from module close-tests: # Code from module configmake: # Code from module connect: # Code from module connect-tests: # Code from module ctype: # Code from module ctype-tests: # Code from module dirname-lgpl: # Code from module dosname: # Code from module double-slash-root: # Code from module dup2: # Code from module dup2-tests: # Code from module environ: # Code from module environ-tests: # Code from module errno: # Code from module errno-tests: # Code from module error: # Code from module extensions: # Code from module extern-inline: # Code from module fcntl: # Code from module fcntl-h: # Code from module fcntl-h-tests: # Code from module fcntl-tests: # Code from module fd-hook: # Code from module fdl: # Code from module fdopen: # Code from module fdopen-tests: # Code from module fgetc-tests: # Code from module filename: # Code from module flexmember: # Code from module float: # Code from module float-tests: # Code from module fpieee: AC_REQUIRE([gl_FP_IEEE]) # Code from module fpucw: # Code from module fputc-tests: # Code from module fread-tests: # Code from module fstat: # Code from module fstat-tests: # Code from module ftruncate: # Code from module ftruncate-tests: # Code from module func: # Code from module func-tests: # Code from module fwrite-tests: # Code from module gendocs: # Code from module getcwd-lgpl: # Code from module getcwd-lgpl-tests: # Code from module getdelim: # Code from module getdelim-tests: # Code from module getdtablesize: # Code from module getdtablesize-tests: # Code from module getline: # Code from module getline-tests: # Code from module getopt-gnu: # Code from module getopt-gnu-tests: # Code from module getopt-posix: # Code from module getopt-posix-tests: # Code from module getpagesize: # Code from module getprogname: # Code from module getprogname-tests: # Code from module gettext-h: # Code from module gettimeofday: # Code from module gettimeofday-tests: # Code from module git-version-gen: # Code from module hard-locale: # Code from module havelib: # Code from module host-cpu-c-abi: # Code from module ignore-value: # Code from module ignore-value-tests: # Code from module include_next: # Code from module inet_pton: # Code from module inet_pton-tests: # Code from module intprops: # Code from module intprops-tests: # Code from module inttypes: # Code from module inttypes-incomplete: # Code from module inttypes-tests: # Code from module ioctl: # Code from module ioctl-tests: # Code from module isblank: # Code from module isblank-tests: # Code from module isnand-nolibm: # Code from module isnand-nolibm-tests: # Code from module isnanf-nolibm: # Code from module isnanf-nolibm-tests: # Code from module isnanl-nolibm: # Code from module isnanl-nolibm-tests: # Code from module iswblank: # Code from module iswblank-tests: # Code from module langinfo: # Code from module langinfo-tests: # Code from module largefile: AC_REQUIRE([AC_SYS_LARGEFILE]) # Code from module limits-h: # Code from module limits-h-tests: # Code from module listen: # Code from module listen-tests: # Code from module localcharset: # Code from module locale: # Code from module locale-tests: # Code from module localeconv: # Code from module localeconv-tests: # Code from module localename: # Code from module localename-tests: # Code from module localtime-buffer: # Code from module lock: # Code from module lock-tests: # Code from module lstat: # Code from module lstat-tests: # Code from module malloc-gnu: # Code from module malloc-gnu-tests: # Code from module malloc-posix: # Code from module malloca: # Code from module malloca-tests: # Code from module math: # Code from module math-tests: # Code from module mbchar: # Code from module mbrtowc: # Code from module mbrtowc-tests: # Code from module mbschr: # Code from module mbschr-tests: # Code from module mbsinit: # Code from module mbsinit-tests: # Code from module mbspbrk: # Code from module mbspbrk-tests: # Code from module mbsspn: # Code from module mbsspn-tests: # Code from module mbstok_r: # Code from module mbtowc: # Code from module mbuiter: # Code from module memchr: # Code from module memchr-tests: # Code from module mempcpy: # Code from module minmax: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module nanosleep: # Code from module nanosleep-tests: # Code from module netinet_in: # Code from module netinet_in-tests: # Code from module nl_langinfo: # Code from module nl_langinfo-tests: # Code from module nocrash: # Code from module nproc: # Code from module open: # Code from module open-tests: # Code from module pathmax: # Code from module pathmax-tests: # Code from module perror: # Code from module perror-tests: # Code from module pipe-posix: # Code from module pipe-posix-tests: # Code from module pthread_sigmask: # Code from module pthread_sigmask-tests: # Code from module putenv: # Code from module raise: # Code from module raise-tests: # Code from module rawmemchr: # Code from module rawmemchr-tests: # Code from module regex: # Code from module regex-tests: # Code from module same-inode: # Code from module select: # Code from module select-tests: # Code from module setenv: # Code from module setenv-tests: # Code from module setlocale: # Code from module setlocale-tests: # Code from module setsockopt: # Code from module setsockopt-tests: # Code from module sigaction: # Code from module sigaction-tests: # Code from module signal-h: # Code from module signal-h-tests: # Code from module signbit: # Code from module signbit-tests: # Code from module sigprocmask: # Code from module sigprocmask-tests: # Code from module size_max: # Code from module sleep: # Code from module sleep-tests: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module socket: # Code from module socketlib: # Code from module sockets: # Code from module sockets-tests: # Code from module socklen: # Code from module ssize_t: # Code from module stat: # Code from module stat-tests: # Code from module stat-time: # Code from module stat-time-tests: # Code from module stdalign: # Code from module stdalign-tests: # Code from module stdbool: # Code from module stdbool-tests: # Code from module stddef: # Code from module stddef-tests: # Code from module stdint: # Code from module stdint-tests: # Code from module stdio: # Code from module stdio-tests: # Code from module stdlib: # Code from module stdlib-tests: # Code from module strcase: # Code from module strchrnul: # Code from module strchrnul-tests: # Code from module streq: # Code from module strerror: # Code from module strerror-override: # Code from module strerror-tests: # Code from module strerror_r-posix: # Code from module strerror_r-posix-tests: # Code from module string: # Code from module string-tests: # Code from module strings: # Code from module strings-tests: # Code from module strndup: # Code from module strnlen: # Code from module strnlen-tests: # Code from module strnlen1: # Code from module strtod: # Code from module strtod-tests: # Code from module strtok_r: # Code from module symlink: # Code from module symlink-tests: # Code from module sys_ioctl: # Code from module sys_ioctl-tests: # Code from module sys_select: # Code from module sys_select-tests: # Code from module sys_socket: # Code from module sys_socket-tests: # Code from module sys_stat: # Code from module sys_stat-tests: # Code from module sys_time: # Code from module sys_time-tests: # Code from module sys_types: # Code from module sys_types-tests: # Code from module sys_uio: # Code from module sys_uio-tests: # Code from module sysexits: # Code from module sysexits-tests: # Code from module test-framework-sh: # Code from module test-framework-sh-tests: # Code from module thread: # Code from module thread-tests: # Code from module threadlib: gl_THREADLIB_EARLY # Code from module time: # Code from module time-tests: # Code from module unistd: # Code from module unistd-tests: # Code from module unitypes: # Code from module uniwidth/base: # Code from module uniwidth/width: # Code from module uniwidth/width-tests: # Code from module unsetenv: # Code from module unsetenv-tests: # Code from module usleep: # Code from module usleep-tests: # Code from module vasnprintf: # Code from module vasnprintf-tests: # Code from module verify: # Code from module verify-tests: # Code from module vsnprintf: # Code from module vsnprintf-tests: # Code from module wchar: # Code from module wchar-tests: # Code from module wcrtomb: # Code from module wcrtomb-tests: # Code from module wctob: # Code from module wctomb: # Code from module wctype-h: # Code from module wctype-h-tests: # Code from module wcwidth: # Code from module wcwidth-tests: # Code from module xalloc-oversized: # Code from module xsize: # Code from module yield: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([gl_INIT], [ AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) gl_cond_libtool=true gl_m4_base='bootstrapped/m4' m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) m4_pushdef([gl_LIBSOURCES_LIST], []) m4_pushdef([gl_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='bootstrapped/lib' changequote(,)dnl LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` changequote([, ])dnl AC_SUBST([LTALLOCA]) gl_FUNC_ALLOCA gl_ARGP m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=argp_error:2:c-format]) AM_][XGETTEXT_OPTION([--flag=argp_failure:4:c-format])]) gl_FUNC_BTOWC if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then AC_LIBOBJ([btowc]) gl_PREREQ_BTOWC fi gl_WCHAR_MODULE_INDICATOR([btowc]) gl___BUILTIN_EXPECT gl_CONFIGMAKE_PREP gl_DIRNAME_LGPL gl_DOUBLE_SLASH_ROOT gl_HEADER_ERRNO_H gl_ERROR if test $ac_cv_lib_error_at_line = no; then AC_LIBOBJ([error]) gl_PREREQ_ERROR fi m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) AC_REQUIRE([gl_EXTERN_INLINE]) gl_FLOAT_H if test $REPLACE_FLOAT_LDBL = 1; then AC_LIBOBJ([float]) fi if test $REPLACE_ITOLD = 1; then AC_LIBOBJ([itold]) fi gl_FUNC gl_FUNC_GETDELIM if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then AC_LIBOBJ([getdelim]) gl_PREREQ_GETDELIM fi gl_STDIO_MODULE_INDICATOR([getdelim]) gl_FUNC_GETLINE if test $REPLACE_GETLINE = 1; then AC_LIBOBJ([getline]) gl_PREREQ_GETLINE fi gl_STDIO_MODULE_INDICATOR([getline]) gl_FUNC_GETOPT_GNU dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are dnl done in the getopt-posix module. gl_FUNC_GETOPT_POSIX if test $REPLACE_GETOPT = 1; then AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1]) dnl Arrange for unistd.h to include getopt.h. GNULIB_GL_UNISTD_H_GETOPT=1 fi AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT]) gl_FUNC_GETPROGNAME AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) gl_HARD_LOCALE AC_REQUIRE([gl_HOST_CPU_C_ABI]) gl_INTTYPES_H gl_INTTYPES_INCOMPLETE gl_FUNC_ISWBLANK if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : else if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then AC_LIBOBJ([iswblank]) fi fi gl_WCTYPE_MODULE_INDICATOR([iswblank]) gl_LANGINFO_H gl_LIMITS_H gl_LOCALCHARSET LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\"" AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) gl_LOCALE_H gl_FUNC_LOCALECONV if test $REPLACE_LOCALECONV = 1; then AC_LIBOBJ([localeconv]) gl_PREREQ_LOCALECONV fi gl_LOCALE_MODULE_INDICATOR([localeconv]) gl_LOCK gl_MODULE_INDICATOR([lock]) gl_FUNC_MALLOC_GNU if test $REPLACE_MALLOC = 1; then AC_LIBOBJ([malloc]) fi gl_MODULE_INDICATOR([malloc-gnu]) gl_FUNC_MALLOC_POSIX if test $REPLACE_MALLOC = 1; then AC_LIBOBJ([malloc]) fi gl_STDLIB_MODULE_INDICATOR([malloc-posix]) gl_MATH_H gl_MBCHAR gl_FUNC_MBRTOWC if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then AC_LIBOBJ([mbrtowc]) gl_PREREQ_MBRTOWC fi gl_WCHAR_MODULE_INDICATOR([mbrtowc]) gl_STRING_MODULE_INDICATOR([mbschr]) gl_FUNC_MBSINIT if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then AC_LIBOBJ([mbsinit]) gl_PREREQ_MBSINIT fi gl_WCHAR_MODULE_INDICATOR([mbsinit]) gl_STRING_MODULE_INDICATOR([mbspbrk]) gl_STRING_MODULE_INDICATOR([mbsspn]) gl_STRING_MODULE_INDICATOR([mbstok_r]) gl_FUNC_MBTOWC if test $REPLACE_MBTOWC = 1; then AC_LIBOBJ([mbtowc]) gl_PREREQ_MBTOWC fi gl_STDLIB_MODULE_INDICATOR([mbtowc]) gl_MBITER gl_FUNC_MEMCHR if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then AC_LIBOBJ([memchr]) gl_PREREQ_MEMCHR fi gl_STRING_MODULE_INDICATOR([memchr]) gl_FUNC_MEMPCPY if test $HAVE_MEMPCPY = 0; then AC_LIBOBJ([mempcpy]) gl_PREREQ_MEMPCPY fi gl_STRING_MODULE_INDICATOR([mempcpy]) gl_MINMAX AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-inval]) fi AC_REQUIRE([gl_MSVC_NOTHROW]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-nothrow]) fi gl_MODULE_INDICATOR([msvc-nothrow]) gl_MULTIARCH gl_FUNC_NL_LANGINFO if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then AC_LIBOBJ([nl_langinfo]) fi gl_LANGINFO_MODULE_INDICATOR([nl_langinfo]) gl_NPROC gl_FUNC_RAWMEMCHR if test $HAVE_RAWMEMCHR = 0; then AC_LIBOBJ([rawmemchr]) gl_PREREQ_RAWMEMCHR fi gl_STRING_MODULE_INDICATOR([rawmemchr]) gl_REGEX if test $ac_use_included_regex = yes; then AC_LIBOBJ([regex]) gl_PREREQ_REGEX fi gl_SIZE_MAX gl_FUNC_SLEEP if test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1; then AC_LIBOBJ([sleep]) fi gl_UNISTD_MODULE_INDICATOR([sleep]) gt_TYPE_SSIZE_T gl_STDALIGN_H AM_STDBOOL_H gl_STDDEF_H gl_STDINT_H gl_STDIO_H gl_STDLIB_H gl_STRCASE if test $HAVE_STRCASECMP = 0; then AC_LIBOBJ([strcasecmp]) gl_PREREQ_STRCASECMP fi if test $HAVE_STRNCASECMP = 0; then AC_LIBOBJ([strncasecmp]) gl_PREREQ_STRNCASECMP fi gl_FUNC_STRCHRNUL if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then AC_LIBOBJ([strchrnul]) gl_PREREQ_STRCHRNUL fi gl_STRING_MODULE_INDICATOR([strchrnul]) gl_FUNC_STRERROR if test $REPLACE_STRERROR = 1; then AC_LIBOBJ([strerror]) fi gl_MODULE_INDICATOR([strerror]) gl_STRING_MODULE_INDICATOR([strerror]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then AC_LIBOBJ([strerror-override]) gl_PREREQ_SYS_H_WINSOCK2 fi gl_HEADER_STRING_H gl_HEADER_STRINGS_H gl_FUNC_STRNDUP if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then AC_LIBOBJ([strndup]) fi gl_STRING_MODULE_INDICATOR([strndup]) gl_FUNC_STRNLEN if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then AC_LIBOBJ([strnlen]) gl_PREREQ_STRNLEN fi gl_STRING_MODULE_INDICATOR([strnlen]) gl_FUNC_STRTOD if test $HAVE_STRTOD = 0 || test $REPLACE_STRTOD = 1; then AC_LIBOBJ([strtod]) gl_PREREQ_STRTOD fi gl_STDLIB_MODULE_INDICATOR([strtod]) gl_FUNC_STRTOK_R if test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1; then AC_LIBOBJ([strtok_r]) gl_PREREQ_STRTOK_R fi gl_STRING_MODULE_INDICATOR([strtok_r]) gl_SYS_TYPES_H AC_PROG_MKDIR_P gl_SYSEXITS gl_THREADLIB gl_UNISTD_H gl_LIBUNISTRING_LIBHEADER([0.9.4], [unitypes.h]) gl_LIBUNISTRING_LIBHEADER([0.9.4], [uniwidth.h]) gl_LIBUNISTRING_MODULE([0.9.8], [uniwidth/width]) gl_FUNC_VASNPRINTF gl_FUNC_VSNPRINTF gl_STDIO_MODULE_INDICATOR([vsnprintf]) gl_WCHAR_H gl_FUNC_WCRTOMB if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then AC_LIBOBJ([wcrtomb]) gl_PREREQ_WCRTOMB fi gl_WCHAR_MODULE_INDICATOR([wcrtomb]) gl_WCTYPE_H gl_FUNC_WCWIDTH if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then AC_LIBOBJ([wcwidth]) fi gl_WCHAR_MODULE_INDICATOR([wcwidth]) gl_XSIZE # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || for gl_file in ]gl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([gl_LIBSOURCES_DIR]) m4_popdef([gl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gl_libobjs= gl_ltlibobjs= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" done fi AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) m4_pushdef([gltests_LIBSOURCES_LIST], []) m4_pushdef([gltests_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='bootstrapped/tests' changequote(,)dnl gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS changequote([, ])dnl AC_SUBST([gltests_WITNESS]) gl_module_indicator_condition=$gltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) AC_REQUIRE([gl_HEADER_SYS_SOCKET]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([accept]) fi gl_SYS_SOCKET_MODULE_INDICATOR([accept]) gl_HEADER_ARPA_INET AC_PROG_MKDIR_P AC_REQUIRE([gl_HEADER_SYS_SOCKET]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([bind]) fi gl_SYS_SOCKET_MODULE_INDICATOR([bind]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_FR gt_LOCALE_TR_UTF8 gl_MODULE_INDICATOR_FOR_TESTS([cloexec]) gl_FUNC_CLOSE if test $REPLACE_CLOSE = 1; then AC_LIBOBJ([close]) fi gl_UNISTD_MODULE_INDICATOR([close]) AC_REQUIRE([gl_HEADER_SYS_SOCKET]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([connect]) fi gl_SYS_SOCKET_MODULE_INDICATOR([connect]) gl_CTYPE_H gl_FUNC_DUP2 if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then AC_LIBOBJ([dup2]) gl_PREREQ_DUP2 fi gl_UNISTD_MODULE_INDICATOR([dup2]) gl_ENVIRON gl_UNISTD_MODULE_INDICATOR([environ]) gl_FUNC_FCNTL if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then AC_LIBOBJ([fcntl]) fi gl_FCNTL_MODULE_INDICATOR([fcntl]) gl_FCNTL_H gl_FUNC_FDOPEN if test $REPLACE_FDOPEN = 1; then AC_LIBOBJ([fdopen]) gl_PREREQ_FDOPEN fi gl_STDIO_MODULE_INDICATOR([fdopen]) AC_C_FLEXIBLE_ARRAY_MEMBER gl_FUNC_FSTAT if test $REPLACE_FSTAT = 1; then AC_LIBOBJ([fstat]) case "$host_os" in mingw*) AC_LIBOBJ([stat-w32]) ;; esac gl_PREREQ_FSTAT fi gl_SYS_STAT_MODULE_INDICATOR([fstat]) gl_FUNC_FTRUNCATE if test $HAVE_FTRUNCATE = 0 || test $REPLACE_FTRUNCATE = 1; then AC_LIBOBJ([ftruncate]) gl_PREREQ_FTRUNCATE fi gl_UNISTD_MODULE_INDICATOR([ftruncate]) gl_FUNC_GETCWD_LGPL if test $REPLACE_GETCWD = 1; then AC_LIBOBJ([getcwd-lgpl]) fi gl_UNISTD_MODULE_INDICATOR([getcwd]) gl_FUNC_GETDTABLESIZE if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then AC_LIBOBJ([getdtablesize]) gl_PREREQ_GETDTABLESIZE fi gl_UNISTD_MODULE_INDICATOR([getdtablesize]) gl_FUNC_GETPAGESIZE if test $REPLACE_GETPAGESIZE = 1; then AC_LIBOBJ([getpagesize]) fi gl_UNISTD_MODULE_INDICATOR([getpagesize]) gl_FUNC_GETTIMEOFDAY if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then AC_LIBOBJ([gettimeofday]) gl_PREREQ_GETTIMEOFDAY fi gl_SYS_TIME_MODULE_INDICATOR([gettimeofday]) gl_FUNC_INET_PTON if test $HAVE_INET_PTON = 0 || test $REPLACE_INET_NTOP = 1; then AC_LIBOBJ([inet_pton]) gl_PREREQ_INET_PTON fi gl_ARPA_INET_MODULE_INDICATOR([inet_pton]) AC_C_BIGENDIAN gl_FUNC_IOCTL if test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1; then AC_LIBOBJ([ioctl]) fi gl_SYS_IOCTL_MODULE_INDICATOR([ioctl]) gl_FUNC_ISBLANK if test $HAVE_ISBLANK = 0; then AC_LIBOBJ([isblank]) fi gl_CTYPE_MODULE_INDICATOR([isblank]) gl_FUNC_ISNAND_NO_LIBM if test $gl_func_isnand_no_libm != yes; then AC_LIBOBJ([isnand]) gl_PREREQ_ISNAND fi gl_DOUBLE_EXPONENT_LOCATION gl_FUNC_ISNANF_NO_LIBM if test $gl_func_isnanf_no_libm != yes; then AC_LIBOBJ([isnanf]) gl_PREREQ_ISNANF fi gl_FLOAT_EXPONENT_LOCATION gl_FUNC_ISNANL_NO_LIBM if test $gl_func_isnanl_no_libm != yes; then AC_LIBOBJ([isnanl]) gl_PREREQ_ISNANL fi gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_LARGEFILE]) AC_REQUIRE([gl_HEADER_SYS_SOCKET]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([listen]) fi gl_SYS_SOCKET_MODULE_INDICATOR([listen]) AC_CHECK_FUNCS_ONCE([newlocale]) gl_LOCALENAME AC_CHECK_FUNCS_ONCE([newlocale]) AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS]) AC_LIBOBJ([localtime-buffer]) AC_CHECK_HEADERS_ONCE([semaphore.h]) gl_FUNC_LSTAT if test $REPLACE_LSTAT = 1; then AC_LIBOBJ([lstat]) gl_PREREQ_LSTAT fi gl_SYS_STAT_MODULE_INDICATOR([lstat]) gl_MALLOCA gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gt_LOCALE_ZH_CN gt_LOCALE_FR_UTF8 gt_LOCALE_FR_UTF8 gt_LOCALE_FR_UTF8 dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) gl_FUNC_NANOSLEEP if test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1; then AC_LIBOBJ([nanosleep]) gl_PREREQ_NANOSLEEP fi gl_TIME_MODULE_INDICATOR([nanosleep]) AC_CHECK_DECLS_ONCE([alarm]) gl_HEADER_NETINET_IN AC_PROG_MKDIR_P gt_LOCALE_FR gt_LOCALE_FR_UTF8 gl_FUNC_OPEN if test $REPLACE_OPEN = 1; then AC_LIBOBJ([open]) gl_PREREQ_OPEN fi gl_FCNTL_MODULE_INDICATOR([open]) gl_PATHMAX gl_FUNC_PERROR if test $REPLACE_PERROR = 1; then AC_LIBOBJ([perror]) fi gl_STRING_MODULE_INDICATOR([perror]) gl_FUNC_PIPE if test $HAVE_PIPE = 0; then AC_LIBOBJ([pipe]) fi gl_UNISTD_MODULE_INDICATOR([pipe]) gl_FUNC_PTHREAD_SIGMASK if test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1; then AC_LIBOBJ([pthread_sigmask]) gl_PREREQ_PTHREAD_SIGMASK fi gl_SIGNAL_MODULE_INDICATOR([pthread_sigmask]) gl_FUNC_PUTENV if test $REPLACE_PUTENV = 1; then AC_LIBOBJ([putenv]) gl_PREREQ_PUTENV fi gl_STDLIB_MODULE_INDICATOR([putenv]) gl_FUNC_RAISE if test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1; then AC_LIBOBJ([raise]) gl_PREREQ_RAISE fi gl_SIGNAL_MODULE_INDICATOR([raise]) dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) gl_FUNC_SELECT if test $REPLACE_SELECT = 1; then AC_LIBOBJ([select]) fi gl_SYS_SELECT_MODULE_INDICATOR([select]) AC_CHECK_HEADERS_ONCE([sys/wait.h]) gl_FUNC_SETENV if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then AC_LIBOBJ([setenv]) fi gl_STDLIB_MODULE_INDICATOR([setenv]) gl_FUNC_SETLOCALE if test $REPLACE_SETLOCALE = 1; then AC_LIBOBJ([setlocale]) gl_PREREQ_SETLOCALE fi gl_LOCALE_MODULE_INDICATOR([setlocale]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN AC_REQUIRE([gl_HEADER_SYS_SOCKET]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([setsockopt]) fi gl_SYS_SOCKET_MODULE_INDICATOR([setsockopt]) gl_SIGACTION if test $HAVE_SIGACTION = 0; then AC_LIBOBJ([sigaction]) gl_PREREQ_SIGACTION fi gl_SIGNAL_MODULE_INDICATOR([sigaction]) gl_SIGNAL_H gl_SIGNBIT if test $REPLACE_SIGNBIT = 1; then AC_LIBOBJ([signbitf]) AC_LIBOBJ([signbitd]) AC_LIBOBJ([signbitl]) fi gl_MATH_MODULE_INDICATOR([signbit]) AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) AC_REQUIRE([gl_LONG_DOUBLE_EXPONENT_LOCATION]) gl_SIGNALBLOCKING if test $HAVE_POSIX_SIGNALBLOCKING = 0; then AC_LIBOBJ([sigprocmask]) gl_PREREQ_SIGPROCMASK fi gl_SIGNAL_MODULE_INDICATOR([sigprocmask]) AC_CHECK_DECLS_ONCE([alarm]) AC_REQUIRE([gl_HEADER_SYS_SOCKET]) if test "$ac_cv_header_winsock2_h" = yes; then AC_LIBOBJ([socket]) fi # When this module is used, sockets may actually occur as file descriptors, # hence it is worth warning if the modules 'close' and 'ioctl' are not used. m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) AC_REQUIRE([gl_PREREQ_SYS_H_WINSOCK2]) if test "$ac_cv_header_winsock2_h" = yes; then UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 fi gl_SYS_SOCKET_MODULE_INDICATOR([socket]) AC_REQUIRE([gl_SOCKETLIB]) AC_REQUIRE([gl_SOCKETS]) gl_TYPE_SOCKLEN_T gl_FUNC_STAT if test $REPLACE_STAT = 1; then AC_LIBOBJ([stat]) case "$host_os" in mingw*) AC_LIBOBJ([stat-w32]) ;; esac gl_PREREQ_STAT fi gl_SYS_STAT_MODULE_INDICATOR([stat]) gl_STAT_TIME gl_STAT_BIRTHTIME AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) gl_FUNC_STRERROR_R if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then AC_LIBOBJ([strerror_r]) gl_PREREQ_STRERROR_R fi gl_STRING_MODULE_INDICATOR([strerror_r]) dnl For the modules argp, error. gl_MODULE_INDICATOR([strerror_r-posix]) dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) gl_FUNC_SYMLINK if test $HAVE_SYMLINK = 0 || test $REPLACE_SYMLINK = 1; then AC_LIBOBJ([symlink]) fi gl_UNISTD_MODULE_INDICATOR([symlink]) gl_SYS_IOCTL_H AC_PROG_MKDIR_P AC_REQUIRE([gl_HEADER_SYS_SELECT]) AC_PROG_MKDIR_P AC_REQUIRE([gl_HEADER_SYS_SOCKET]) AC_PROG_MKDIR_P AC_CHECK_FUNCS_ONCE([shutdown]) gl_HEADER_SYS_STAT_H AC_PROG_MKDIR_P gl_HEADER_SYS_TIME_H AC_PROG_MKDIR_P gl_HEADER_SYS_UIO AC_PROG_MKDIR_P gl_THREAD gl_HEADER_TIME_H gl_FUNC_UNSETENV if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then AC_LIBOBJ([unsetenv]) gl_PREREQ_UNSETENV fi gl_STDLIB_MODULE_INDICATOR([unsetenv]) gl_FUNC_USLEEP if test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1; then AC_LIBOBJ([usleep]) fi gl_UNISTD_MODULE_INDICATOR([usleep]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gl_FUNC_WCTOB if test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1; then AC_LIBOBJ([wctob]) gl_PREREQ_WCTOB fi gl_WCHAR_MODULE_INDICATOR([wctob]) gl_FUNC_WCTOMB if test $REPLACE_WCTOMB = 1; then AC_LIBOBJ([wctomb]) gl_PREREQ_WCTOMB fi gl_STDLIB_MODULE_INDICATOR([wctomb]) gl_YIELD m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(gltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || for gl_file in ]gltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([gltests_LIBSOURCES_DIR]) m4_popdef([gltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gltests_libobjs= gltests_ltlibobjs= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" done fi AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) ]) LIBTESTS_LIBDEPS="$gltests_libdeps" AC_SUBST([LIBTESTS_LIBDEPS]) ]) # Like AC_LIBOBJ, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_LIBOBJ], [ AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gl_LIBSOURCES_DIR], [bootstrapped/lib]) m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_LIBOBJ], [ AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gltests_LIBSOURCES_DIR], [bootstrapped/tests]) m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([gl_FILE_LIST], [ build-aux/config.rpath build-aux/gendocs.sh build-aux/git-version-gen doc/fdl.texi doc/gendocs_template doc/gendocs_template_min lib/_Noreturn.h lib/alloca.c lib/alloca.in.h lib/arg-nonnull.h lib/argp-ba.c lib/argp-eexst.c lib/argp-fmtstream.c lib/argp-fmtstream.h lib/argp-fs-xinl.c lib/argp-help.c lib/argp-namefrob.h lib/argp-parse.c lib/argp-pin.c lib/argp-pv.c lib/argp-pvh.c lib/argp-xinl.c lib/argp.h lib/asnprintf.c lib/basename-lgpl.c lib/btowc.c lib/c++defs.h lib/c-ctype.c lib/c-ctype.h lib/config.charset lib/dirname-lgpl.c lib/dirname.h lib/dosname.h lib/errno.in.h lib/error.c lib/error.h lib/float+.h lib/float.c lib/float.in.h lib/getdelim.c lib/getline.c lib/getopt-cdefs.in.h lib/getopt-core.h lib/getopt-ext.h lib/getopt-pfx-core.h lib/getopt-pfx-ext.h lib/getopt.c lib/getopt.in.h lib/getopt1.c lib/getopt_int.h lib/getprogname.c lib/getprogname.h lib/gettext.h lib/glthread/lock.c lib/glthread/lock.h lib/glthread/threadlib.c lib/hard-locale.c lib/hard-locale.h lib/intprops.h lib/inttypes.in.h lib/iswblank.c lib/itold.c lib/langinfo.in.h lib/limits.in.h lib/localcharset.c lib/localcharset.h lib/locale.in.h lib/localeconv.c lib/malloc.c lib/math.c lib/math.in.h lib/mbchar.c lib/mbchar.h lib/mbrtowc.c lib/mbschr.c lib/mbsinit.c lib/mbspbrk.c lib/mbsspn.c lib/mbstok_r.c lib/mbtowc-impl.h lib/mbtowc.c lib/mbuiter.c lib/mbuiter.h lib/memchr.c lib/memchr.valgrind lib/mempcpy.c lib/minmax.h lib/msvc-inval.c lib/msvc-inval.h lib/msvc-nothrow.c lib/msvc-nothrow.h lib/nl_langinfo.c lib/nproc.c lib/nproc.h lib/printf-args.c lib/printf-args.h lib/printf-parse.c lib/printf-parse.h lib/rawmemchr.c lib/rawmemchr.valgrind lib/ref-add.sin lib/ref-del.sin lib/regcomp.c lib/regex.c lib/regex.h lib/regex_internal.c lib/regex_internal.h lib/regexec.c lib/size_max.h lib/sleep.c lib/stdalign.in.h lib/stdbool.in.h lib/stddef.in.h lib/stdint.in.h lib/stdio.in.h lib/stdlib.in.h lib/strcasecmp.c lib/strchrnul.c lib/strchrnul.valgrind lib/streq.h lib/strerror-override.c lib/strerror-override.h lib/strerror.c lib/string.in.h lib/strings.in.h lib/stripslash.c lib/strncasecmp.c lib/strndup.c lib/strnlen.c lib/strnlen1.c lib/strnlen1.h lib/strtod.c lib/strtok_r.c lib/sys_types.in.h lib/sysexits.in.h lib/unistd.c lib/unistd.in.h lib/unitypes.in.h lib/uniwidth.in.h lib/uniwidth/cjk.h lib/uniwidth/width.c lib/vasnprintf.c lib/vasnprintf.h lib/verify.h lib/vsnprintf.c lib/warn-on-use.h lib/wchar.in.h lib/wcrtomb.c lib/wctype-h.c lib/wctype.in.h lib/wcwidth.c lib/xsize.c lib/xsize.h m4/00gnulib.m4 m4/absolute-header.m4 m4/alloca.m4 m4/argp.m4 m4/arpa_inet_h.m4 m4/asm-underscore.m4 m4/btowc.m4 m4/builtin-expect.m4 m4/close.m4 m4/codeset.m4 m4/configmake.m4 m4/ctype.m4 m4/dirname.m4 m4/double-slash-root.m4 m4/dup2.m4 m4/eealloc.m4 m4/environ.m4 m4/errno_h.m4 m4/error.m4 m4/exponentd.m4 m4/exponentf.m4 m4/exponentl.m4 m4/extensions.m4 m4/extern-inline.m4 m4/fcntl-o.m4 m4/fcntl.m4 m4/fcntl_h.m4 m4/fdopen.m4 m4/flexmember.m4 m4/float_h.m4 m4/fpieee.m4 m4/fstat.m4 m4/ftruncate.m4 m4/func.m4 m4/getcwd.m4 m4/getdelim.m4 m4/getdtablesize.m4 m4/getline.m4 m4/getopt.m4 m4/getpagesize.m4 m4/getprogname.m4 m4/gettimeofday.m4 m4/glibc21.m4 m4/gnulib-common.m4 m4/hard-locale.m4 m4/host-cpu-c-abi.m4 m4/include_next.m4 m4/inet_pton.m4 m4/intlmacosx.m4 m4/intmax_t.m4 m4/inttypes-pri.m4 m4/inttypes.m4 m4/inttypes_h.m4 m4/ioctl.m4 m4/isblank.m4 m4/isnand.m4 m4/isnanf.m4 m4/isnanl.m4 m4/iswblank.m4 m4/langinfo_h.m4 m4/largefile.m4 m4/lcmessage.m4 m4/ldexp.m4 m4/lib-ld.m4 m4/lib-link.m4 m4/lib-prefix.m4 m4/libunistring-base.m4 m4/limits-h.m4 m4/localcharset.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-tr.m4 m4/locale-zh.m4 m4/locale_h.m4 m4/localeconv.m4 m4/localename.m4 m4/localtime-buffer.m4 m4/lock.m4 m4/longlong.m4 m4/lstat.m4 m4/malloc.m4 m4/malloca.m4 m4/math_h.m4 m4/mbchar.m4 m4/mbiter.m4 m4/mbrtowc.m4 m4/mbsinit.m4 m4/mbstate_t.m4 m4/mbtowc.m4 m4/memchr.m4 m4/mempcpy.m4 m4/minmax.m4 m4/mmap-anon.m4 m4/mode_t.m4 m4/msvc-inval.m4 m4/msvc-nothrow.m4 m4/multiarch.m4 m4/nanosleep.m4 m4/netinet_in_h.m4 m4/nl_langinfo.m4 m4/nocrash.m4 m4/nproc.m4 m4/off_t.m4 m4/open-cloexec.m4 m4/open.m4 m4/pathmax.m4 m4/perror.m4 m4/pipe.m4 m4/printf.m4 m4/pthread_rwlock_rdlock.m4 m4/pthread_sigmask.m4 m4/putenv.m4 m4/raise.m4 m4/rawmemchr.m4 m4/regex.m4 m4/select.m4 m4/setenv.m4 m4/setlocale.m4 m4/sigaction.m4 m4/signal_h.m4 m4/signalblocking.m4 m4/signbit.m4 m4/size_max.m4 m4/sleep.m4 m4/socketlib.m4 m4/sockets.m4 m4/socklen.m4 m4/sockpfaf.m4 m4/ssize_t.m4 m4/stat-time.m4 m4/stat.m4 m4/stdalign.m4 m4/stdbool.m4 m4/stddef_h.m4 m4/stdint.m4 m4/stdint_h.m4 m4/stdio_h.m4 m4/stdlib_h.m4 m4/strcase.m4 m4/strchrnul.m4 m4/strerror.m4 m4/strerror_r.m4 m4/string_h.m4 m4/strings_h.m4 m4/strndup.m4 m4/strnlen.m4 m4/strtod.m4 m4/strtok_r.m4 m4/symlink.m4 m4/sys_ioctl_h.m4 m4/sys_select_h.m4 m4/sys_socket_h.m4 m4/sys_stat_h.m4 m4/sys_time_h.m4 m4/sys_types_h.m4 m4/sys_uio_h.m4 m4/sysexits.m4 m4/thread.m4 m4/threadlib.m4 m4/time_h.m4 m4/unistd_h.m4 m4/usleep.m4 m4/vasnprintf.m4 m4/vsnprintf.m4 m4/warn-on-use.m4 m4/wchar_h.m4 m4/wchar_t.m4 m4/wcrtomb.m4 m4/wctob.m4 m4/wctomb.m4 m4/wctype_h.m4 m4/wcwidth.m4 m4/wint_t.m4 m4/xsize.m4 m4/yield.m4 tests/infinity.h tests/init.sh tests/macros.h tests/minus-zero.h tests/nan.h tests/nap.h tests/signature.h tests/test-accept.c tests/test-alloca-opt.c tests/test-argp-2.sh tests/test-argp.c tests/test-arpa_inet.c tests/test-binary-io.c tests/test-binary-io.sh tests/test-bind.c tests/test-btowc.c tests/test-btowc1.sh tests/test-btowc2.sh tests/test-c-ctype.c tests/test-c-strcase.sh tests/test-c-strcasecmp.c tests/test-c-strncasecmp.c tests/test-cloexec.c tests/test-close.c tests/test-connect.c tests/test-ctype.c tests/test-dup2.c tests/test-environ.c tests/test-errno.c tests/test-fcntl-h.c tests/test-fcntl.c tests/test-fdopen.c tests/test-fgetc.c tests/test-float.c tests/test-fputc.c tests/test-fread.c tests/test-fstat.c tests/test-ftruncate.c tests/test-ftruncate.sh tests/test-func.c tests/test-fwrite.c tests/test-getcwd-lgpl.c tests/test-getdelim.c tests/test-getdtablesize.c tests/test-getline.c tests/test-getopt-gnu.c tests/test-getopt-main.h tests/test-getopt-posix.c tests/test-getopt.h tests/test-getopt_long.h tests/test-getprogname.c tests/test-gettimeofday.c tests/test-ignore-value.c tests/test-inet_pton.c tests/test-init.sh tests/test-intprops.c tests/test-inttypes.c tests/test-ioctl.c tests/test-isblank.c tests/test-isnand-nolibm.c tests/test-isnand.h tests/test-isnanf-nolibm.c tests/test-isnanf.h tests/test-isnanl-nolibm.c tests/test-isnanl.h tests/test-iswblank.c tests/test-langinfo.c tests/test-limits-h.c tests/test-listen.c tests/test-locale.c tests/test-localeconv.c tests/test-localename.c tests/test-lock.c tests/test-lstat.c tests/test-lstat.h tests/test-malloc-gnu.c tests/test-malloca.c tests/test-math.c tests/test-mbrtowc-w32-1.sh tests/test-mbrtowc-w32-2.sh tests/test-mbrtowc-w32-3.sh tests/test-mbrtowc-w32-4.sh tests/test-mbrtowc-w32-5.sh tests/test-mbrtowc-w32.c tests/test-mbrtowc.c tests/test-mbrtowc1.sh tests/test-mbrtowc2.sh tests/test-mbrtowc3.sh tests/test-mbrtowc4.sh tests/test-mbrtowc5.sh tests/test-mbschr.c tests/test-mbschr.sh tests/test-mbsinit.c tests/test-mbsinit.sh tests/test-mbspbrk.c tests/test-mbspbrk.sh tests/test-mbsspn.c tests/test-mbsspn.sh tests/test-memchr.c tests/test-nanosleep.c tests/test-netinet_in.c tests/test-nl_langinfo.c tests/test-nl_langinfo.sh tests/test-open.c tests/test-open.h tests/test-pathmax.c tests/test-perror.c tests/test-perror.sh tests/test-perror2.c tests/test-pipe.c tests/test-pthread_sigmask1.c tests/test-pthread_sigmask2.c tests/test-raise.c tests/test-rawmemchr.c tests/test-regex.c tests/test-rwlock1.c tests/test-select-fd.c tests/test-select-in.sh tests/test-select-out.sh tests/test-select-stdin.c tests/test-select.c tests/test-select.h tests/test-setenv.c tests/test-setlocale1.c tests/test-setlocale1.sh tests/test-setlocale2.c tests/test-setlocale2.sh tests/test-setsockopt.c tests/test-sigaction.c tests/test-signal-h.c tests/test-signbit.c tests/test-sigprocmask.c tests/test-sleep.c tests/test-sockets.c tests/test-stat-time.c tests/test-stat.c tests/test-stat.h tests/test-stdalign.c tests/test-stdbool.c tests/test-stddef.c tests/test-stdint.c tests/test-stdio.c tests/test-stdlib.c tests/test-strchrnul.c tests/test-strerror.c tests/test-strerror_r.c tests/test-string.c tests/test-strings.c tests/test-strnlen.c tests/test-strtod.c tests/test-symlink.c tests/test-symlink.h tests/test-sys_ioctl.c tests/test-sys_select.c tests/test-sys_socket.c tests/test-sys_stat.c tests/test-sys_time.c tests/test-sys_types.c tests/test-sys_uio.c tests/test-sys_wait.h tests/test-sysexits.c tests/test-thread_create.c tests/test-thread_self.c tests/test-time.c tests/test-unistd.c tests/test-unsetenv.c tests/test-usleep.c tests/test-vasnprintf.c tests/test-verify-try.c tests/test-verify.c tests/test-verify.sh tests/test-vsnprintf.c tests/test-wchar.c tests/test-wcrtomb-w32-1.sh tests/test-wcrtomb-w32-2.sh tests/test-wcrtomb-w32-3.sh tests/test-wcrtomb-w32-4.sh tests/test-wcrtomb-w32-5.sh tests/test-wcrtomb-w32.c tests/test-wcrtomb.c tests/test-wcrtomb.sh tests/test-wctype-h.c tests/test-wcwidth.c tests/uniwidth/test-uc_width.c tests/uniwidth/test-uc_width2.c tests/uniwidth/test-uc_width2.sh tests/zerosize-ptr.h tests=lib/_Noreturn.h tests=lib/accept.c tests=lib/arg-nonnull.h tests=lib/arpa_inet.in.h tests=lib/binary-io.c tests=lib/binary-io.h tests=lib/bind.c tests=lib/c++defs.h tests=lib/c-strcase.h tests=lib/c-strcasecmp.c tests=lib/c-strncasecmp.c tests=lib/cloexec.c tests=lib/cloexec.h tests=lib/close.c tests=lib/connect.c tests=lib/ctype.in.h tests=lib/dup2.c tests=lib/fcntl.c tests=lib/fcntl.in.h tests=lib/fd-hook.c tests=lib/fd-hook.h tests=lib/fdopen.c tests=lib/filename.h tests=lib/flexmember.h tests=lib/float+.h tests=lib/fpucw.h tests=lib/fstat.c tests=lib/ftruncate.c tests=lib/getcwd-lgpl.c tests=lib/getdtablesize.c tests=lib/getpagesize.c tests=lib/gettimeofday.c tests=lib/glthread/thread.c tests=lib/glthread/thread.h tests=lib/glthread/yield.h tests=lib/ignore-value.h tests=lib/inet_pton.c tests=lib/ioctl.c tests=lib/isblank.c tests=lib/isnan.c tests=lib/isnand-nolibm.h tests=lib/isnand.c tests=lib/isnanf-nolibm.h tests=lib/isnanf.c tests=lib/isnanl-nolibm.h tests=lib/isnanl.c tests=lib/listen.c tests=lib/localename.c tests=lib/localename.h tests=lib/localtime-buffer.c tests=lib/localtime-buffer.h tests=lib/lstat.c tests=lib/malloca.c tests=lib/malloca.h tests=lib/malloca.valgrind tests=lib/nanosleep.c tests=lib/netinet_in.in.h tests=lib/open.c tests=lib/pathmax.h tests=lib/perror.c tests=lib/pipe.c tests=lib/pthread_sigmask.c tests=lib/putenv.c tests=lib/raise.c tests=lib/same-inode.h tests=lib/select.c tests=lib/setenv.c tests=lib/setlocale.c tests=lib/setsockopt.c tests=lib/sig-handler.c tests=lib/sig-handler.h tests=lib/sigaction.c tests=lib/signal.in.h tests=lib/signbitd.c tests=lib/signbitf.c tests=lib/signbitl.c tests=lib/sigprocmask.c tests=lib/socket.c tests=lib/sockets.c tests=lib/sockets.h tests=lib/stat-time.c tests=lib/stat-time.h tests=lib/stat-w32.c tests=lib/stat-w32.h tests=lib/stat.c tests=lib/strerror_r.c tests=lib/symlink.c tests=lib/sys_ioctl.in.h tests=lib/sys_select.in.h tests=lib/sys_socket.c tests=lib/sys_socket.in.h tests=lib/sys_stat.in.h tests=lib/sys_time.in.h tests=lib/sys_uio.in.h tests=lib/time.in.h tests=lib/unsetenv.c tests=lib/usleep.c tests=lib/w32sock.h tests=lib/warn-on-use.h tests=lib/wctob.c tests=lib/wctomb-impl.h tests=lib/wctomb.c tests=lib/xalloc-oversized.h ]) gnuastro-0.5/bootstrapped/m4/gnulib-common.m40000644000175000017500000004273613217200022016200 00000000000000# gnulib-common.m4 serial 38 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_COMMON # is expanded unconditionally through gnulib-tool magic. AC_DEFUN([gl_COMMON], [ dnl Use AC_REQUIRE here, so that the code is expanded once only. AC_REQUIRE([gl_00GNULIB]) AC_REQUIRE([gl_COMMON_BODY]) ]) AC_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of C11. */ #if ! (defined _Noreturn \ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ]) AH_VERBATIM([isoc99_inline], [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif]) AH_VERBATIM([unused_parameter], [/* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* gcc supports the "unused" attribute on possibly unused labels, and g++ has since version 4.5. Note to support C++ as well as C, _GL_UNUSED_LABEL should be used with a trailing ; */ #if !defined __cplusplus || __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define _GL_UNUSED_LABEL _GL_UNUSED #else # define _GL_UNUSED_LABEL #endif /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif ]) dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not dnl to /dev/tty, so they can be redirected to log files. Such diagnostics dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ ]) # gl_MODULE_INDICATOR_CONDITION # expands to a C preprocessor expression that evaluates to 1 or 0, depending # whether a gnulib module that has been requested shall be considered present # or not. m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) # gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) # sets the shell variable that indicates the presence of the given module to # a C preprocessor expression that will evaluate to 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], [ gl_MODULE_INDICATOR_SET_VARIABLE_AUX( [GNULIB_[]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], [gl_MODULE_INDICATOR_CONDITION]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) # modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. # The shell variable's value is a C preprocessor expression that evaluates # to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], [ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], [ dnl Simplify the expression VALUE || 1 to 1. $1=1 ], [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], [gl_MODULE_INDICATOR_CONDITION])]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) # modifies the shell variable to include the given condition. The shell # variable's value is a C preprocessor expression that evaluates to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], [ dnl Simplify the expression 1 || CONDITION to 1. if test "$[]$1" != 1; then dnl Simplify the expression 0 || CONDITION to CONDITION. if test "$[]$1" = 0; then $1=$2 else $1="($[]$1 || $2)" fi fi ]) # gl_MODULE_INDICATOR([modulename]) # defines a C macro indicating the presence of the given module # in a location where it can be used. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 0 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR], [ AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [gl_MODULE_INDICATOR_CONDITION], [Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module $1 shall be considered present.]) ]) # gl_MODULE_INDICATOR_FOR_TESTS([modulename]) # defines a C macro indicating the presence of the given module # in lib or tests. This is useful to determine whether the module # should be tested. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [ AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], [Define to 1 when the gnulib module $1 should be tested.]) ]) # gl_ASSERT_NO_GNULIB_POSIXCHECK # asserts that there will never be a need to #define GNULIB_POSIXCHECK. # and thereby enables an optimization of configure and config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], [ dnl Override gl_WARN_ON_USE_PREPARE. dnl But hide this definition from 'aclocal'. AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) ]) # gl_ASSERT_NO_GNULIB_TESTS # asserts that there will be no gnulib tests in the scope of the configure.ac # and thereby enables an optimization of config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], [ dnl Override gl_MODULE_INDICATOR_FOR_TESTS. AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) ]) # Test whether exists. # Set HAVE_FEATURES_H. AC_DEFUN([gl_FEATURES_H], [ AC_CHECK_HEADERS_ONCE([features.h]) if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi AC_SUBST([HAVE_FEATURES_H]) ]) # m4_foreach_w # is a backport of autoconf-2.59c's m4_foreach_w. # Remove this macro when we can assume autoconf >= 2.60. m4_ifndef([m4_foreach_w], [m4_define([m4_foreach_w], [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) # AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) # ---------------------------------------------------- # Backport of autoconf-2.63b's macro. # Remove this macro when we can assume autoconf >= 2.64. m4_ifndef([AS_VAR_IF], [m4_define([AS_VAR_IF], [AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. # This is like AC_PROG_CC_C99, except that # - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60, # - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC # , # but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 # . # Remaining problems: # - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options # to CC twice # . # - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. AC_DEFUN([gl_PROG_CC_C99], [ dnl Change that version number to the minimum Autoconf version that supports dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. m4_version_prereq([9.0], [AC_REQUIRE([AC_PROG_CC_C99])], [AC_REQUIRE([AC_PROG_CC_STDC])]) ]) # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override # the values. AC_DEFUN([gl_PROG_AR_RANLIB], [ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler dnl as "cc", and GCC as "gcc". They have different object file formats and dnl library formats. In particular, the GNU binutils programs ar and ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) dnl The '][' hides this use from 'aclocal'. AC_BEFORE([$0], [A][M_PROG_AR]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], [ #ifdef __ACK__ Amsterdam #endif ], [gl_cv_c_amsterdam_compiler=yes], [gl_cv_c_amsterdam_compiler=no]) ]) dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not dnl building with __ACK__. if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST dnl ARFLAGS variable (it is filed into Makefile.in directly by automake dnl script on-demand, if not specified by ./configure of course). dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block dnl because AM_PROG_AR is written so it could re-set AR variable even for dnl __ACK__. It may seem like its easier to avoid calling the macro here, dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good dnl default value and automake should usually know them). dnl dnl The '][' hides this use from 'aclocal'. m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) fi dnl In case the code above has not helped with setting AR/ARFLAGS, use dnl Automake-documented default values for AR and ARFLAGS, but prefer dnl ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cr' fi AC_SUBST([AR]) AC_SUBST([ARFLAGS]) if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else dnl Use the ranlib program if it is available. AC_PROG_RANLIB fi fi AC_SUBST([RANLIB]) ]) # AC_PROG_MKDIR_P # is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix # for interoperability with automake-1.9.6 from autoconf-2.62. # Remove this macro when we can assume autoconf >= 2.62 or # autoconf >= 2.60 && automake >= 1.10. # AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness. m4_ifndef([AC_AUTOCONF_VERSION],[ m4_ifdef([AC_PROG_MKDIR_P], [ dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed. m4_define([AC_PROG_MKDIR_P], m4_defn([AC_PROG_MKDIR_P])[ AC_SUBST([MKDIR_P])])], [ dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P. AC_DEFUN_ONCE([AC_PROG_MKDIR_P], [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake MKDIR_P='$(mkdir_p)' AC_SUBST([MKDIR_P])])]) ]) # AC_C_RESTRICT # This definition is copied from post-2.69 Autoconf and overrides the # AC_C_RESTRICT macro from autoconf 2.60..2.69. It can be removed # once autoconf >= 2.70 can be assumed. It's painful to check version # numbers, and in practice this macro is more up-to-date than Autoconf # is, so override Autoconf unconditionally. AC_DEFUN([AC_C_RESTRICT], [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], [ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } ]], [[int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ]])], [ac_cv_c_restrict=$ac_kw]) test "$ac_cv_c_restrict" != no && break done ]) AH_VERBATIM([restrict], [/* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. Perhaps some future version of Sun C++ will work with restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict # define __restrict__ #endif]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ])# AC_C_RESTRICT # gl_BIGENDIAN # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. # Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some # macros invoke AC_C_BIGENDIAN with arguments. AC_DEFUN([gl_BIGENDIAN], [ AC_C_BIGENDIAN ]) # gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) # is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not # output a spurious "(cached)" mark in the midst of other configure output. # This macro should be used instead of AC_CACHE_VAL when it is not surrounded # by an AC_MSG_CHECKING/AC_MSG_RESULT pair. AC_DEFUN([gl_CACHE_VAL_SILENT], [ saved_as_echo_n="$as_echo_n" as_echo_n=':' AC_CACHE_VAL([$1], [$2]) as_echo_n="$saved_as_echo_n" ]) # AS_VAR_COPY was added in autoconf 2.63b m4_define_default([AS_VAR_COPY], [AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) # AC_PROG_SED was added in autoconf 2.59b m4_ifndef([AC_PROG_SED], [AC_DEFUN([AC_PROG_SED], [AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED, [dnl ac_script should not contain more than 99 commands (for HP-UX sed), dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed. ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed AS_UNSET([ac_script]) if test -z "$SED"; then ac_path_SED_found=false _AS_PATH_WALK([], [ for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" AS_EXECUTABLE_P(["$ac_path_SED"]) || continue case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED=$ac_path_SED ac_path_SED_found=:;; *) ac_count=0 _AS_ECHO_N([0123456789]) >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >> conftest.nl "$ac_path_SED" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_SED_max-0}; then # Best so far, but keep looking for better ac_cv_path_SED=$ac_path_SED ac_path_SED_max=$ac_count fi test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done]) if test -z "$ac_cv_path_SED"; then AC_ERROR([no acceptable sed could be found in \$PATH]) fi else ac_cv_path_SED=$SED fi ]) SED="$ac_cv_path_SED" AC_SUBST([SED])dnl rm -f conftest.sed ]) ]) gnuastro-0.5/bootstrapped/m4/glibc21.m40000644000175000017500000000161313217200022014642 00000000000000# glibc21.m4 serial 5 dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2017 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for the GNU C Library, version 2.1 or newer, or uClibc. # From Bruno Haible. AC_DEFUN([gl_GLIBC21], [ AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc], [ac_cv_gnu_library_2_1], [AC_EGREP_CPP([Lucky], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif #ifdef __UCLIBC__ Lucky user #endif ], [ac_cv_gnu_library_2_1=yes], [ac_cv_gnu_library_2_1=no]) ] ) AC_SUBST([GLIBC21]) GLIBC21="$ac_cv_gnu_library_2_1" ] ) gnuastro-0.5/bootstrapped/m4/gettimeofday.m40000644000175000017500000001103313217200022016075 00000000000000# serial 24 # Copyright (C) 2001-2003, 2005, 2007, 2009-2017 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. dnl From Jim Meyering. AC_DEFUN([gl_FUNC_GETTIMEOFDAY], [ AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HEADER_SYS_TIME_H]) AC_CHECK_FUNCS_ONCE([gettimeofday]) gl_gettimeofday_timezone=void if test $ac_cv_func_gettimeofday != yes; then HAVE_GETTIMEOFDAY=0 else gl_FUNC_GETTIMEOFDAY_CLOBBER AC_CACHE_CHECK([for gettimeofday with POSIX signature], [gl_cv_func_gettimeofday_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include struct timeval c; int gettimeofday (struct timeval *restrict, void *restrict); ]], [[/* glibc uses struct timezone * rather than the POSIX void * if _GNU_SOURCE is defined. However, since the only portable use of gettimeofday uses NULL as the second parameter, and since the glibc definition is actually more typesafe, it is not worth wrapping this to get a compliant signature. */ int (*f) (struct timeval *restrict, void *restrict) = gettimeofday; int x = f (&c, 0); return !(x | c.tv_sec | c.tv_usec); ]])], [gl_cv_func_gettimeofday_posix_signature=yes], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include int gettimeofday (struct timeval *restrict, struct timezone *restrict); ]])], [gl_cv_func_gettimeofday_posix_signature=almost], [gl_cv_func_gettimeofday_posix_signature=no])])]) if test $gl_cv_func_gettimeofday_posix_signature = almost; then gl_gettimeofday_timezone='struct timezone' elif test $gl_cv_func_gettimeofday_posix_signature != yes; then REPLACE_GETTIMEOFDAY=1 fi dnl If we override 'struct timeval', we also have to override gettimeofday. if test $REPLACE_STRUCT_TIMEVAL = 1; then REPLACE_GETTIMEOFDAY=1 fi dnl On mingw, the original gettimeofday has only a precision of 15.6 dnl milliseconds. So override it. case "$host_os" in mingw*) REPLACE_GETTIMEOFDAY=1 ;; esac fi AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone], [Define this to 'void' or 'struct timezone' to match the system's declaration of the second argument to gettimeofday.]) ]) dnl See if gettimeofday clobbers the static buffer that localtime uses dnl for its return value. The gettimeofday function from Mac OS X 10.0.4 dnl (i.e., Darwin 1.3.7) has this problem. dnl dnl If it does, then arrange to use gettimeofday and localtime only via dnl the wrapper functions that work around the problem. AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER], [ AC_REQUIRE([gl_HEADER_SYS_TIME_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS]) AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], [gl_cv_func_gettimeofday_clobber], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #include #include ]], [[ time_t t = 0; struct tm *lt; struct tm saved_lt; struct timeval tv; lt = localtime (&t); saved_lt = *lt; gettimeofday (&tv, NULL); return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; ]])], [gl_cv_func_gettimeofday_clobber=no], [gl_cv_func_gettimeofday_clobber=yes], [# When cross-compiling: case "$host_os" in # Guess all is fine on glibc systems. *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_gettimeofday_clobber="guessing no" ;; # If we don't know, assume the worst. *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; esac ])]) case "$gl_cv_func_gettimeofday_clobber" in *yes) REPLACE_GETTIMEOFDAY=1 AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1], [Define if gettimeofday clobbers the localtime buffer.]) gl_LOCALTIME_BUFFER_NEEDED ;; esac ]) # Prerequisites of lib/gettimeofday.c. AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:]) gnuastro-0.5/bootstrapped/m4/getprogname.m40000644000175000017500000000263313217200022015732 00000000000000# getprogname.m4 - check for getprogname or replacements for it # Copyright (C) 2016-2017 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. # serial 4 AC_DEFUN([gl_FUNC_GETPROGNAME], [ AC_CHECK_FUNCS_ONCE([getprogname getexecname]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) ac_found=0 AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [], [#include ]) AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [], [#include ]) AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include ]) # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. AC_CACHE_CHECK([whether __progname is defined in default libraries], [gl_cv_var___progname], [ gl_cv_var___progname= AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *__progname;]], [[return *__progname;]] )], [gl_cv_var___progname=yes] ) ] ) if test "$gl_cv_var___progname" = yes; then AC_DEFINE([HAVE_VAR___PROGNAME], 1, [Define if you have a global __progname variable]) fi fi ]) gnuastro-0.5/bootstrapped/m4/getpagesize.m40000644000175000017500000000172213217200022015727 00000000000000# getpagesize.m4 serial 9 dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2017 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETPAGESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS([getpagesize]) if test $ac_cv_func_getpagesize = no; then HAVE_GETPAGESIZE=0 AC_CHECK_HEADERS([OS.h]) if test $ac_cv_header_OS_h = yes; then HAVE_OS_H=1 fi AC_CHECK_HEADERS([sys/param.h]) if test $ac_cv_header_sys_param_h = yes; then HAVE_SYS_PARAM_H=1 fi fi case "$host_os" in mingw*) REPLACE_GETPAGESIZE=1 ;; esac dnl Also check whether it's declared. dnl mingw has getpagesize() in libgcc.a but doesn't declare it. AC_CHECK_DECL([getpagesize], , [HAVE_DECL_GETPAGESIZE=0]) ]) gnuastro-0.5/bootstrapped/m4/getopt.m40000644000175000017500000003131113217200022014717 00000000000000# getopt.m4 serial 46 dnl Copyright (C) 2002-2006, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Request a POSIX compliant getopt function. AC_DEFUN([gl_FUNC_GETOPT_POSIX], [ m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) dnl Other modules can request the gnulib implementation of the getopt dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS. dnl argp.m4 does this. m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [ REPLACE_GETOPT=1 ], [ REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi ]) if test $REPLACE_GETOPT = 1; then dnl Arrange for getopt.h to be created. gl_GETOPT_SUBSTITUTE_HEADER fi ]) # Request a POSIX compliant getopt function with GNU extensions (such as # options with optional arguments) and the functions getopt_long, # getopt_long_only. AC_DEFUN([gl_FUNC_GETOPT_GNU], [ dnl Set the variable gl_getopt_required, so that all invocations of dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file dnl will check for getopt with GNU extensions. dnl This means that if one gnulib-tool invocation requests getopt-posix dnl and another gnulib-tool invocation requests getopt-gnu, it is as if dnl both had requested getopt-gnu. m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically dnl done through the module dependency getopt-gnu -> getopt-posix. ]) # Determine whether to replace the entire getopt facility. AC_DEFUN([gl_GETOPT_CHECK_HEADERS], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON dnl Persuade Solaris to declare optarg, optind, opterr, optopt. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_CHECK_NEXT_HEADERS([getopt.h]) if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi AC_SUBST([HAVE_GETOPT_H]) gl_replace_getopt= dnl Test whether is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes]) fi dnl Test whether the function getopt_long is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes]) fi dnl POSIX 2008 does not specify leading '+' behavior, but see dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on dnl the next version of POSIX. For now, we only guarantee leading '+' dnl behavior with getopt-gnu. if test -z "$gl_replace_getopt"; then AC_CACHE_CHECK([whether getopt is POSIX compatible], [gl_cv_func_getopt_posix], [ dnl Merging these three different test programs into a single one dnl would require a reset mechanism. On BSD systems, it can be done dnl through 'optreset'; on some others (glibc), it can be done by dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1, dnl Solaris 9, musl libc), there is no such mechanism. if test $cross_compiling = no; then dnl Sanity check. Succeeds everywhere (except on MSVC, dnl which lacks and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) if test $gl_cv_func_getopt_posix = maybe; then dnl Sanity check with '+'. Succeeds everywhere (except on MSVC, dnl which lacks and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) fi if test $gl_cv_func_getopt_posix = maybe; then dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } ]])], [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no]) fi else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi ]) case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu], [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. dnl GNU Coding Standards currently allow awk but not env; besides, env dnl is ambiguous with environment values that contain newlines. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" #include #include ]GL_NOCRASH[ ]], [[ int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ]])], [gl_cv_func_getopt_gnu=yes], [gl_cv_func_getopt_gnu=no], [dnl Cross compiling. Assume the worst, even on glibc platforms. gl_cv_func_getopt_gnu="guessing no" ]) case $gl_had_POSIXLY_CORRECT in exported) ;; yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; *) AS_UNSET([POSIXLY_CORRECT]) ;; esac ]) if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else AC_CACHE_CHECK([for working GNU getopt_long function], [gl_cv_func_getopt_long_gnu], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #include ]], [[static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ]])], [gl_cv_func_getopt_long_gnu=yes], [gl_cv_func_getopt_long_gnu=no], [dnl Cross compiling. Guess no on OpenBSD, yes otherwise. case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac ]) ]) case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi ]) AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], [ AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi AC_SUBST([HAVE_SYS_CDEFS_H]) AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], [Define to rpl_ if the getopt replacement functions and variables should be used.]) GETOPT_H=getopt.h GETOPT_CDEFS_H=getopt-cdefs.h AC_SUBST([GETOPT_H]) AC_SUBST([GETOPT_CDEFS_H]) ]) gnuastro-0.5/bootstrapped/m4/getline.m40000644000175000017500000000601313217200022015045 00000000000000# getline.m4 serial 28 dnl Copyright (C) 1998-2003, 2005-2007, 2009-2017 Free Software Foundation, dnl Inc. dnl dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.59]) dnl See if there's a working, system-supplied version of the getline function. dnl We can't just do AC_REPLACE_FUNCS([getline]) because some systems dnl have a function by that name in -linet that doesn't have anything dnl to do with the function we need. AC_DEFUN([gl_FUNC_GETLINE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) dnl Persuade glibc to declare getline(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getline]) gl_getline_needs_run_time_check=no AC_CHECK_FUNC([getline], [dnl Found it in some library. Verify that it works. gl_getline_needs_run_time_check=yes], [am_cv_func_working_getline=no]) if test $gl_getline_needs_run_time_check = yes; then AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline], [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data AC_RUN_IFELSE([AC_LANG_SOURCE([[ # include # include # include int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getline (&line, &siz, in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getline (&line, &siz, in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } ]])], [am_cv_func_working_getline=yes] dnl The library version works. , [am_cv_func_working_getline=no] dnl The library version does NOT work. , dnl We're cross compiling. Assume it works on glibc2 systems. [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [am_cv_func_working_getline="guessing yes"], [am_cv_func_working_getline="guessing no"])] )]) fi if test $ac_cv_have_decl_getline = no; then HAVE_DECL_GETLINE=0 fi case "$am_cv_func_working_getline" in *no) dnl Set REPLACE_GETLINE always: Even if we have not found the broken dnl getline function among $LIBS, it may exist in libinet and the dnl executable may be linked with -linet. REPLACE_GETLINE=1 ;; esac ]) # Prerequisites of lib/getline.c. AC_DEFUN([gl_PREREQ_GETLINE], [ : ]) gnuastro-0.5/bootstrapped/m4/getdtablesize.m40000644000175000017500000000474013217200022016251 00000000000000# getdtablesize.m4 serial 7 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETDTABLESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([getdtablesize]) AC_CHECK_DECLS_ONCE([getdtablesize]) if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then AC_CACHE_CHECK([whether getdtablesize works], [gl_cv_func_getdtablesize_works], [dnl There are two concepts: the "maximum possible file descriptor value + 1" dnl and the "maximum number of open file descriptors in a process". dnl Per SUSv2 and POSIX, getdtablesize() should return the first one. dnl On most platforms, the first and the second concept are the same. dnl On OpenVMS, however, they are different and getdtablesize() returns dnl the second one; thus the test below fails. But we don't care dnl because there's no good way to write a replacement getdtablesize(). case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft dnl limit up to an unchangeable hard limit; all other platforms dnl correctly require setrlimit before getdtablesize() can report dnl a larger value. AC_RUN_IFELSE([ AC_LANG_PROGRAM([[#include ]], [int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ])], [gl_cv_func_getdtablesize_works=yes], [gl_cv_func_getdtablesize_works=no], [case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac ]) ;; esac ]) case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi ]) # Prerequisites of lib/getdtablesize.c. AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:]) gnuastro-0.5/bootstrapped/m4/getdelim.m40000644000175000017500000000504313217200022015212 00000000000000# getdelim.m4 serial 12 dnl Copyright (C) 2005-2007, 2009-2017 Free Software Foundation, Inc. dnl dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.59]) AC_DEFUN([gl_FUNC_GETDELIM], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) dnl Persuade glibc to declare getdelim(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getdelim]) AC_CHECK_FUNCS_ONCE([getdelim]) if test $ac_cv_func_getdelim = yes; then HAVE_GETDELIM=1 dnl Found it in some library. Verify that it works. AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim], [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data AC_RUN_IFELSE([AC_LANG_SOURCE([[ # include # include # include int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getdelim (&line, &siz, '\n', in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getdelim (&line, &siz, '\n', in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } ]])], [gl_cv_func_working_getdelim=yes] dnl The library version works. , [gl_cv_func_working_getdelim=no] dnl The library version does NOT work. , dnl We're cross compiling. Assume it works on glibc2 systems. [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [gl_cv_func_working_getdelim="guessing yes"], [gl_cv_func_working_getdelim="guessing no"])] )]) case "$gl_cv_func_working_getdelim" in *no) REPLACE_GETDELIM=1 ;; esac else HAVE_GETDELIM=0 fi if test $ac_cv_have_decl_getdelim = no; then HAVE_DECL_GETDELIM=0 fi ]) # Prerequisites of lib/getdelim.c. AC_DEFUN([gl_PREREQ_GETDELIM], [ AC_CHECK_FUNCS([flockfile funlockfile]) AC_CHECK_DECLS([getc_unlocked]) ]) gnuastro-0.5/bootstrapped/m4/getcwd.m40000644000175000017500000001172013217200022014674 00000000000000# getcwd.m4 - check for working getcwd that is compatible with glibc # Copyright (C) 2001, 2003-2007, 2009-2017 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. # Written by Paul Eggert. # serial 14 AC_DEFUN([gl_FUNC_GETCWD_NULL], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether getcwd (NULL, 0) allocates memory for result], [gl_cv_func_getcwd_null], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ # include # if HAVE_UNISTD_H # include # else /* on Windows with MSVC */ # include # endif # ifndef getcwd char *getcwd (); # endif ]], [[ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* mingw cwd does not start with '/', but getcwd does allocate. However, mingw fails to honor non-zero size. */ #else if (chdir ("/") != 0) return 1; else { char *f = getcwd (NULL, 0); if (! f) return 2; if (f[0] != '/') { free (f); return 3; } if (f[1] != '\0') { free (f); return 4; } free (f); return 0; } #endif ]])], [gl_cv_func_getcwd_null=yes], [gl_cv_func_getcwd_null=no], [[case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_getcwd_null="guessing yes";; # If we don't know, assume the worst. *) gl_cv_func_getcwd_null="guessing no";; esac ]])]) ]) AC_DEFUN([gl_FUNC_GETCWD_SIGNATURE], [ AC_CACHE_CHECK([for getcwd with POSIX signature], [gl_cv_func_getcwd_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[extern #ifdef __cplusplus "C" #endif char *getcwd (char *, size_t); ]]) ], [gl_cv_func_getcwd_posix_signature=yes], [gl_cv_func_getcwd_posix_signature=no]) ]) ]) dnl Guarantee that getcwd will malloc with a NULL first argument. Assumes dnl that either the system getcwd is robust, or that calling code is okay dnl with spurious failures when run from a directory with an absolute name dnl larger than 4k bytes. dnl dnl Assumes that getcwd exists; if you are worried about obsolete dnl platforms that lacked getcwd(), then you need to use the GPL module. AC_DEFUN([gl_FUNC_GETCWD_LGPL], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETCWD_NULL]) AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE]) case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature in *yes,yes) ;; *) dnl Minimal replacement lib/getcwd-lgpl.c. REPLACE_GETCWD=1 ;; esac ]) dnl Check for all known getcwd bugs; useful for a program likely to be dnl executed from an arbitrary location. AC_DEFUN([gl_FUNC_GETCWD], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETCWD_NULL]) AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_abort_bug=no case "$host_os" in mingw*) gl_cv_func_getcwd_path_max=yes ;; *) gl_FUNC_GETCWD_PATH_MAX case "$gl_cv_func_getcwd_null" in *yes) gl_FUNC_GETCWD_ABORT_BUG([gl_abort_bug=yes]) ;; esac ;; esac dnl Define HAVE_MINIMALLY_WORKING_GETCWD and HAVE_PARTLY_WORKING_GETCWD dnl if appropriate. case "$gl_cv_func_getcwd_path_max" in "no"|"no, it has the AIX bug") ;; *) AC_DEFINE([HAVE_MINIMALLY_WORKING_GETCWD], [1], [Define to 1 if getcwd minimally works, that is, its result can be trusted when it succeeds.]) ;; esac case "$gl_cv_func_getcwd_path_max" in "no, but it is partly working") AC_DEFINE([HAVE_PARTLY_WORKING_GETCWD], [1], [Define to 1 if getcwd works, except it sometimes fails when it shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT.]) ;; "yes, but with shorter paths") AC_DEFINE([HAVE_GETCWD_SHORTER], [1], [Define to 1 if getcwd works, but with shorter paths than is generally tested with the replacement.]) ;; esac if { case "$gl_cv_func_getcwd_null" in *yes) false;; *) true;; esac; } \ || test $gl_cv_func_getcwd_posix_signature != yes \ || { case "$gl_cv_func_getcwd_path_max" in *yes*) false;; *) true;; esac; } \ || test $gl_abort_bug = yes; then REPLACE_GETCWD=1 fi ]) # Prerequisites of lib/getcwd.c, when full replacement is in effect. AC_DEFUN([gl_PREREQ_GETCWD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO]) : ]) gnuastro-0.5/bootstrapped/m4/func.m40000644000175000017500000000131313217200022014347 00000000000000# func.m4 serial 2 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Simon Josefsson AC_DEFUN([gl_FUNC], [ AC_CACHE_CHECK([whether __func__ is available], [gl_cv_var_func], AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[const char *str = __func__;]])], [gl_cv_var_func=yes], [gl_cv_var_func=no])) if test "$gl_cv_var_func" != yes; then AC_DEFINE([__func__], [""], [Define as a replacement for the ISO C99 __func__ variable.]) fi ]) gnuastro-0.5/bootstrapped/m4/ftruncate.m40000644000175000017500000000233313217200022015412 00000000000000# serial 20 # See if we need to emulate a missing ftruncate function using chsize. # Copyright (C) 2000-2001, 2003-2007, 2009-2017 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. AC_DEFUN([gl_FUNC_FTRUNCATE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([ftruncate]) if test $ac_cv_func_ftruncate = yes; then m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) dnl Native Windows, and Large File Support is requested. dnl The MSVCRT _chsize() function only accepts a 32-bit file size, dnl and the mingw64 ftruncate64() function is unreliable (it may dnl delete the file, see dnl ). dnl Use gnulib's ftruncate() implementation instead. REPLACE_FTRUNCATE=1 ;; esac ], [ : ]) else HAVE_FTRUNCATE=0 fi ]) # Prerequisites of lib/ftruncate.c. AC_DEFUN([gl_PREREQ_FTRUNCATE], [ AC_CHECK_FUNCS([chsize]) ]) gnuastro-0.5/bootstrapped/m4/fstat.m40000644000175000017500000000206313217200022014540 00000000000000# fstat.m4 serial 6 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSTAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) case "$host_os" in mingw* | solaris*) dnl On MinGW, the original stat() returns st_atime, st_mtime, dnl st_ctime values that are affected by the time zone. dnl Solaris stat can return a negative tv_nsec. REPLACE_FSTAT=1 ;; esac dnl Replace fstat() for supporting the gnulib-defined open() on directories. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then case "$gl_cv_func_open_directory_works" in *yes) ;; *) REPLACE_FSTAT=1 ;; esac fi ]) ]) # Prerequisites of lib/fstat.c and lib/stat-w32.c. AC_DEFUN([gl_PREREQ_FSTAT], [ AC_REQUIRE([gl_HEADER_SYS_STAT_H]) : ]) gnuastro-0.5/bootstrapped/m4/fpieee.m40000644000175000017500000000434013217200022014654 00000000000000# fpieee.m4 serial 2 -*- coding: utf-8 -*- dnl Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl IEEE 754 standardized three items: dnl - The formats of single-float and double-float - nowadays commonly dnl available as 'float' and 'double' in C and C++. dnl No autoconf test needed. dnl - The overflow and division by zero behaviour: The result are values dnl '±Inf' and 'NaN', rather than exceptions as it was before. dnl This file provides an autoconf macro for ensuring this behaviour of dnl floating-point operations. dnl - A set of conditions (overflow, underflow, inexact, etc.) which can dnl be configured to trigger an exception. dnl This cannot be done in a portable way: it depends on the compiler, dnl libc, kernel, and CPU. No autoconf macro is provided for this. dnl Ensure non-trapping behaviour of floating-point overflow and dnl floating-point division by zero. dnl (For integer overflow, see gcc's -ftrapv option; for integer division by dnl zero, see the autoconf macro in intdiv0.m4.) AC_DEFUN([gl_FP_IEEE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) # IEEE behaviour is the default on all CPUs except Alpha and SH # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 # and the GCC 4.1.2 manual). case "$host_cpu" in alpha*) # On Alpha systems, a compiler option provides the behaviour. # See the ieee(3) manual page, also available at # if test -n "$GCC"; then # GCC has the option -mieee. # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. CPPFLAGS="$CPPFLAGS -mieee" else # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. CPPFLAGS="$CPPFLAGS -ieee" fi ;; sh*) if test -n "$GCC"; then # GCC has the option -mieee. CPPFLAGS="$CPPFLAGS -mieee" fi ;; esac ]) gnuastro-0.5/bootstrapped/m4/float_h.m40000644000175000017500000000545713217200022015045 00000000000000# float_h.m4 serial 12 dnl Copyright (C) 2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FLOAT_H], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) FLOAT_H= REPLACE_FLOAT_LDBL=0 case "$host_os" in aix* | beos* | openbsd* | mirbsd* | irix*) FLOAT_H=float.h ;; freebsd* | dragonfly*) case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl FLOAT_H=float.h ;; x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__ int ok; #else error fail #endif ]])], [], [FLOAT_H=float.h]) ;; esac ;; linux*) case "$host_cpu" in powerpc*) FLOAT_H=float.h ;; esac ;; esac case "$host_os" in aix* | freebsd* | dragonfly* | linux*) if test -n "$FLOAT_H"; then REPLACE_FLOAT_LDBL=1 fi ;; esac dnl Test against glibc-2.7 Linux/SPARC64 bug. REPLACE_ITOLD=0 AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works], [gl_cv_func_itold_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ int i = -1; volatile long double ld; int main () { ld += i * 1.0L; if (ld > 0) return 1; return 0; }]])], [gl_cv_func_itold_works=yes], [gl_cv_func_itold_works=no], [case "$host" in sparc*-*-linux*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_func_itold_works="guessing no"], [gl_cv_func_itold_works="guessing yes"]) ;; # Guess yes on native Windows. mingw*) gl_cv_func_itold_works="guessing yes" ;; *) gl_cv_func_itold_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_itold_works" in *no) REPLACE_ITOLD=1 dnl We add the workaround to but also to , dnl to increase the chances that the fix function gets pulled in. FLOAT_H=float.h ;; esac if test -n "$FLOAT_H"; then gl_NEXT_HEADERS([float.h]) fi AC_SUBST([FLOAT_H]) AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"]) AC_SUBST([REPLACE_ITOLD]) ]) gnuastro-0.5/bootstrapped/m4/flexmember.m40000644000175000017500000000345313217200022015551 00000000000000# serial 5 # Check for flexible array member support. # Copyright (C) 2006, 2009-2017 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. # Written by Paul Eggert. AC_DEFUN([AC_C_FLEXIBLE_ARRAY_MEMBER], [ AC_CACHE_CHECK([for flexible array member], ac_cv_c_flexmember, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include #include #include struct m { struct m *next, **list; char name[]; }; struct s { struct s *p; struct m *m; int n; double d[]; };]], [[int m = getchar (); size_t nbytes = offsetof (struct s, d) + m * sizeof (double); nbytes += sizeof (struct s) - 1; nbytes -= nbytes % sizeof (struct s); struct s *p = malloc (nbytes); p->p = p; p->m = NULL; p->d[0] = 0.0; return p->d != (double *) NULL;]])], [ac_cv_c_flexmember=yes], [ac_cv_c_flexmember=no])]) if test $ac_cv_c_flexmember = yes; then AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], [Define to nothing if C supports flexible array members, and to 1 if it does not. That way, with a declaration like 'struct s { int n; double d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack can be used with pre-C99 compilers. When computing the size of such an object, don't use 'sizeof (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)' instead. Don't use 'offsetof (struct s, d@<:@0@:>@)', as this doesn't work with MSVC and with C++ compilers.]) else AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1]) fi ]) gnuastro-0.5/bootstrapped/m4/fdopen.m40000644000175000017500000000257613217200022014703 00000000000000# fdopen.m4 serial 4 dnl Copyright (C) 2011-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FDOPEN], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_FDOPEN=1 fi ]) if test $REPLACE_FDOPEN = 0; then dnl Test whether fdopen() sets errno when it fails due to a bad fd argument. AC_CACHE_CHECK([whether fdopen sets errno], [gl_cv_func_fdopen_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include int main (void) { FILE *fp; errno = 0; fp = fdopen (-1, "r"); if (fp == NULL && errno == 0) return 1; return 0; }]])], [gl_cv_func_fdopen_works=yes], [gl_cv_func_fdopen_works=no], [case "$host_os" in mingw*) gl_cv_func_fdopen_works="guessing no" ;; *) gl_cv_func_fdopen_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_fdopen_works" in *no) REPLACE_FDOPEN=1 ;; esac fi ]) dnl Prerequisites of lib/fdopen.c. AC_DEFUN([gl_PREREQ_FDOPEN], []) gnuastro-0.5/bootstrapped/m4/fcntl_h.m40000644000175000017500000000327113217200022015036 00000000000000# serial 15 # Configure fcntl.h. dnl Copyright (C) 2006-2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_FCNTL_H], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([gl_FCNTL_O_FLAGS]) gl_NEXT_HEADERS([fcntl.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include ]], [fcntl openat]) ]) AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_FCNTL_H_DEFAULTS], [ GNULIB_FCNTL=0; AC_SUBST([GNULIB_FCNTL]) GNULIB_NONBLOCKING=0; AC_SUBST([GNULIB_NONBLOCKING]) GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN]) GNULIB_OPENAT=0; AC_SUBST([GNULIB_OPENAT]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL]) HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT]) REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) ]) gnuastro-0.5/bootstrapped/m4/fcntl.m40000644000175000017500000001035113217200022014524 00000000000000# fcntl.m4 serial 9 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # For now, this module ensures that fcntl() # - supports F_DUPFD correctly # - supports or emulates F_DUPFD_CLOEXEC # - supports F_GETFD # Still to be ported to mingw: # - F_SETFD # - F_GETFL, F_SETFL # - F_GETOWN, F_SETOWN # - F_GETLK, F_SETLK, F_SETLKW AC_DEFUN([gl_FUNC_FCNTL], [ dnl Persuade glibc to expose F_DUPFD_CLOEXEC. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then gl_REPLACE_FCNTL else dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target dnl haiku alpha 2 F_DUPFD has wrong errno AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly], [gl_cv_func_fcntl_f_dupfd_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #include #include #include #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result;]])], [gl_cv_func_fcntl_f_dupfd_works=yes], [gl_cv_func_fcntl_f_dupfd_works=no], [case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac])]) case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) gl_REPLACE_FCNTL AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD behavior does not match POSIX]) ;; esac dnl Many systems lack F_DUPFD_CLOEXEC AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC], [gl_cv_func_fcntl_f_dupfd_cloexec], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #ifndef F_DUPFD_CLOEXEC choke me #endif ]])], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif ]])], [gl_cv_func_fcntl_f_dupfd_cloexec=yes], [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"])], [gl_cv_func_fcntl_f_dupfd_cloexec=no])]) if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then gl_REPLACE_FCNTL dnl No witness macro needed for this bug. fi fi dnl Replace fcntl() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then gl_REPLACE_FCNTL fi ]) ]) AC_DEFUN([gl_REPLACE_FCNTL], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi ]) gnuastro-0.5/bootstrapped/m4/fcntl-o.m40000644000175000017500000001144013217200022014760 00000000000000# fcntl-o.m4 serial 5 dnl Copyright (C) 2006, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. # Test whether the flags O_NOATIME and O_NOFOLLOW actually work. # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. AC_DEFUN([gl_FCNTL_O_FLAGS], [ dnl Persuade glibc to define O_NOATIME and O_NOFOLLOW. dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes dnl AC_GNU_SOURCE. m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], [AC_REQUIRE([AC_GNU_SOURCE])]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([symlink]) AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #if HAVE_UNISTD_H # include #else /* on Windows with MSVC */ # include # include # defined sleep(n) _sleep ((n) * 1000) #endif #include #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], [[ int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result;]])], [gl_cv_header_working_fcntl_h=yes], [case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac], [case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac ]) ]) case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], [Define to 1 if O_NOATIME works.]) case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], [Define to 1 if O_NOFOLLOW works.]) ]) gnuastro-0.5/bootstrapped/m4/extern-inline.m40000644000175000017500000001036313217200022016202 00000000000000dnl 'extern inline' a la ISO C99. dnl Copyright 2012-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EXTERN_INLINE], [ AH_VERBATIM([extern_inline], [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like . For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions. This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Assume DragonFly and FreeBSD will be similar. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see and . */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif]) ]) gnuastro-0.5/bootstrapped/m4/extensions.m40000644000175000017500000001536513217200022015627 00000000000000# serial 17 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 2006-2017 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 definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git # Autoconf. Perhaps we can remove this once we can assume Autoconf # 2.70 or later everywhere, but since Autoconf mutates rapidly # enough in this area it's likely we'll need to redefine # AC_USE_SYSTEM_EXTENSIONS for quite some time. # If autoconf reports a warning # warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # the fix is # 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked # but always AC_REQUIREd, # 2) to ensure that for each occurrence of # AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) # or # AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # the corresponding gnulib module description has 'extensions' among # its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS # invocation occurs in gl_EARLY, not in gl_INIT. # AC_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. # # Remember that #undef in AH_VERBATIM gets replaced with #define by # AC_DEFINE. The goal here is to define all known feature-enabling # macros, then, if reports of conflicts are made, disable macros that # cause problems on some platforms (such as __EXTENSIONS__). AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], [AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) if test "$MINIX" = yes; then AC_DEFINE([_POSIX_SOURCE], [1], [Define to 1 if you need to in order for 'stat' and other things to work.]) AC_DEFINE([_POSIX_1_SOURCE], [2], [Define to 2 if the system does not provide POSIX.1 features except with this defined.]) AC_DEFINE([_MINIX], [1], [Define to 1 if on MINIX.]) AC_DEFINE([_NETBSD_SOURCE], [1], [Define to 1 to make NetBSD features available. MINIX 3 needs this.]) fi dnl Use a different key than __EXTENSIONS__, as that name broke existing dnl configure.ac when using autoheader 2.62. AH_VERBATIM([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable NetBSD extensions on NetBSD. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD extensions on NetBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions if necessary. HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif ]) AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], [ac_cv_safe_to_define___extensions__], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ # define __EXTENSIONS__ 1 ]AC_INCLUDES_DEFAULT])], [ac_cv_safe_to_define___extensions__=yes], [ac_cv_safe_to_define___extensions__=no])]) test $ac_cv_safe_to_define___extensions__ = yes && AC_DEFINE([__EXTENSIONS__]) AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_NETBSD_SOURCE]) AC_DEFINE([_OPENBSD_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) AC_DEFINE([__STDC_WANT_LIB_EXT2__]) AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) AC_DEFINE([_TANDEM_SOURCE]) AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], [ac_cv_should_define__xopen_source], [ac_cv_should_define__xopen_source=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include mbstate_t x;]])], [], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE 500 #include mbstate_t x;]])], [ac_cv_should_define__xopen_source=yes])])]) test $ac_cv_should_define__xopen_source = yes && AC_DEFINE([_XOPEN_SOURCE], [500]) ])# AC_USE_SYSTEM_EXTENSIONS # gl_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], [ dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. dnl gnulib does not need it. But if it gets required by third-party macros dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. AC_REQUIRE([AC_GNU_SOURCE]) AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) gnuastro-0.5/bootstrapped/m4/exponentl.m40000644000175000017500000000713713217200022015442 00000000000000# exponentl.m4 serial 4 dnl Copyright (C) 2007-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LONG_DOUBLE_EXPONENT_LOCATION], [ AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([where to find the exponent in a 'long double'], [gl_cv_cc_long_double_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #include #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (long double x) { memory_long_double m; size_t i; /* Clear it first, in case sizeof (long double) < sizeof (memory_long_double). */ memset (&m, 0, sizeof (memory_long_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25L); add_to_ored_words (0.5L); add_to_ored_words (1.0L); add_to_ored_words (2.0L); add_to_ored_words (4.0L); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_long_double_expbit0=`cat conftest.out`], [gl_cv_cc_long_double_expbit0="unknown"], [ dnl When cross-compiling, in general we don't know. It depends on the dnl ABI and compiler version. There are too many cases. gl_cv_cc_long_double_expbit0="unknown" case "$host_os" in mingw*) # On native Windows (little-endian), we know the result # in two cases: mingw, MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_cc_long_double_expbit0="word 2 bit 0"]) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_cc_long_double_expbit0="word 1 bit 20"]) ;; esac ]) rm -f conftest.out ]) case "$gl_cv_cc_long_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'long double'.]) AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.]) ;; esac ]) gnuastro-0.5/bootstrapped/m4/exponentf.m40000644000175000017500000000545613217200022015436 00000000000000# exponentf.m4 serial 2 dnl Copyright (C) 2007-2008, 2010-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FLOAT_EXPONENT_LOCATION], [ AC_CACHE_CHECK([where to find the exponent in a 'float'], [gl_cv_cc_float_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #include #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (float x) { memory_float m; size_t i; /* Clear it first, in case sizeof (float) < sizeof (memory_float). */ memset (&m, 0, sizeof (memory_float)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25f); add_to_ored_words (0.5f); add_to_ored_words (1.0f); add_to_ored_words (2.0f); add_to_ored_words (4.0f); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_float_expbit0=`cat conftest.out`], [gl_cv_cc_float_expbit0="unknown"], [gl_cv_cc_float_expbit0="word 0 bit 23"]) rm -f conftest.out ]) case "$gl_cv_cc_float_expbit0" in word*bit*) word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'float'.]) AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'float'.]) ;; esac ]) gnuastro-0.5/bootstrapped/m4/exponentd.m40000644000175000017500000000755213217200022015433 00000000000000# exponentd.m4 serial 3 dnl Copyright (C) 2007-2008, 2010-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION], [ AC_CACHE_CHECK([where to find the exponent in a 'double'], [gl_cv_cc_double_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include #include #include #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (double x) { memory_double m; size_t i; /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ memset (&m, 0, sizeof (memory_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25); add_to_ored_words (0.5); add_to_ored_words (1.0); add_to_ored_words (2.0); add_to_ored_words (4.0); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_double_expbit0=`cat conftest.out`], [gl_cv_cc_double_expbit0="unknown"], [ dnl On ARM, there are two 'double' floating-point formats, used by dnl different sets of instructions: The older FPA instructions assume dnl that they are stored in big-endian word order, while the words dnl (like integer types) are stored in little-endian byte order. dnl The newer VFP instructions assume little-endian order dnl consistently. AC_EGREP_CPP([mixed_endianness], [ #if defined arm || defined __arm || defined __arm__ mixed_endianness #endif ], [gl_cv_cc_double_expbit0="unknown"], [ pushdef([AC_MSG_CHECKING],[:])dnl pushdef([AC_MSG_RESULT],[:])dnl pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl AC_C_BIGENDIAN( [gl_cv_cc_double_expbit0="word 0 bit 20"], [gl_cv_cc_double_expbit0="word 1 bit 20"], [gl_cv_cc_double_expbit0="unknown"]) popdef([AC_MSG_RESULT_UNQUOTED])dnl popdef([AC_MSG_RESULT])dnl popdef([AC_MSG_CHECKING])dnl ]) ]) rm -f conftest.out ]) case "$gl_cv_cc_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'double'.]) AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) ;; esac ]) gnuastro-0.5/bootstrapped/m4/error.m40000644000175000017500000000151013217200022014544 00000000000000#serial 14 # Copyright (C) 1996-1998, 2001-2004, 2009-2017 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. AC_DEFUN([gl_ERROR], [ dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer dnl maintained in Autoconf and because it invokes AC_LIBOBJ. AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[error_at_line (0, 0, "", 0, "an error occurred");]])], [ac_cv_lib_error_at_line=yes], [ac_cv_lib_error_at_line=no])]) ]) # Prerequisites of lib/error.c. AC_DEFUN([gl_PREREQ_ERROR], [ AC_REQUIRE([AC_FUNC_STRERROR_R]) : ]) gnuastro-0.5/bootstrapped/m4/errno_h.m40000644000175000017500000000623413217200022015057 00000000000000# errno_h.m4 serial 12 dnl Copyright (C) 2004, 2006, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ AC_EGREP_CPP([booboo],[ #include #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif ], [gl_cv_header_errno_h_complete=no], [gl_cv_header_errno_h_complete=yes]) ]) if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else gl_NEXT_HEADERS([errno.h]) ERRNO_H='errno.h' fi AC_SUBST([ERRNO_H]) AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"]) gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) gl_REPLACE_ERRNO_VALUE([ENOLINK]) gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) ]) # Assuming $1 = EOVERFLOW. # The EOVERFLOW errno value ought to be defined in , according to # POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and # some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. # Check for the value of EOVERFLOW. # Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. AC_DEFUN([gl_REPLACE_ERRNO_VALUE], [ if test -n "$ERRNO_H"; then AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ AC_EGREP_CPP([yes],[ #include #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=yes], [gl_cv_header_errno_h_]$1[=no]) if test $gl_cv_header_errno_h_]$1[ = no; then AC_EGREP_CPP([yes],[ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=hidden]) if test $gl_cv_header_errno_h_]$1[ = hidden; then dnl The macro exists but is hidden. dnl Define it to the same value. AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include ]) fi fi ]) case $gl_cv_header_errno_h_]$1[ in yes | no) ]$1[_HIDDEN=0; ]$1[_VALUE= ;; *) ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" ;; esac AC_SUBST($1[_HIDDEN]) AC_SUBST($1[_VALUE]) fi ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) gnuastro-0.5/bootstrapped/m4/environ.m40000644000175000017500000000261613217200022015103 00000000000000# environ.m4 serial 6 dnl Copyright (C) 2001-2004, 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_ENVIRON], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc to declare environ. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([unistd.h]) gt_CHECK_VAR_DECL( [#if HAVE_UNISTD_H #include #endif /* mingw, BeOS, Haiku declare environ in , not in . */ #include ], [environ]) if test $gt_cv_var_environ_declaration != yes; then HAVE_DECL_ENVIRON=0 fi ]) # Check if a variable is properly declared. # gt_CHECK_VAR_DECL(includes,variable) AC_DEFUN([gt_CHECK_VAR_DECL], [ define([gt_cv_var], [gt_cv_var_]$2[_declaration]) AC_MSG_CHECKING([if $2 is properly declared]) AC_CACHE_VAL([gt_cv_var], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[$1 extern struct { int foo; } $2;]], [[$2.foo = 1;]])], [gt_cv_var=no], [gt_cv_var=yes])]) AC_MSG_RESULT([$gt_cv_var]) if test $gt_cv_var = yes; then AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1, [Define if you have the declaration of $2.]) fi undefine([gt_cv_var]) ]) gnuastro-0.5/bootstrapped/m4/eealloc.m40000644000175000017500000000166713217200022015034 00000000000000# eealloc.m4 serial 3 dnl Copyright (C) 2003, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EEALLOC], [ AC_REQUIRE([gl_EEMALLOC]) AC_REQUIRE([gl_EEREALLOC]) ]) AC_DEFUN([gl_EEMALLOC], [ _AC_FUNC_MALLOC_IF( [gl_cv_func_malloc_0_nonnull=1], [gl_cv_func_malloc_0_nonnull=0]) AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull], [If malloc(0) is != NULL, define this to 1. Otherwise define this to 0.]) ]) AC_DEFUN([gl_EEREALLOC], [ _AC_FUNC_REALLOC_IF( [gl_cv_func_realloc_0_nonnull=1], [gl_cv_func_realloc_0_nonnull=0]) AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull], [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this to 0.]) ]) gnuastro-0.5/bootstrapped/m4/dup2.m40000644000175000017500000001013413217200022014267 00000000000000#serial 25 dnl Copyright (C) 2002, 2005, 2007, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DUP2], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_ifdef([gl_FUNC_DUP2_OBSOLETE], [ AC_CHECK_FUNCS_ONCE([dup2]) if test $ac_cv_func_dup2 = no; then HAVE_DUP2=0 fi ], [ AC_DEFINE([HAVE_DUP2], [1], [Define to 1 if you have the 'dup2' function.]) ]) if test $HAVE_DUP2 = 1; then AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[#include #include #include #include #include #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result;]]) ], [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no], [case "$host_os" in mingw*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac]) ]) case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 AC_CHECK_FUNCS([setdtablesize]) ;; esac fi dnl Replace dup2() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then if test $HAVE_DUP2 = 1; then REPLACE_DUP2=1 fi fi ]) ]) # Prerequisites of lib/dup2.c. AC_DEFUN([gl_PREREQ_DUP2], []) gnuastro-0.5/bootstrapped/m4/double-slash-root.m40000644000175000017500000000312513217200022016762 00000000000000# double-slash-root.m4 serial 4 -*- Autoconf -*- dnl Copyright (C) 2006, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_DOUBLE_SLASH_ROOT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], [ if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # . case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi]) if test "$gl_cv_double_slash_root" = yes; then AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], [Define to 1 if // is a file system root distinct from /.]) fi ]) gnuastro-0.5/bootstrapped/m4/dirname.m40000644000175000017500000000105413217200022015035 00000000000000#serial 10 -*- autoconf -*- dnl Copyright (C) 2002-2006, 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_DIRNAME], [ AC_REQUIRE([gl_DIRNAME_LGPL]) ]) AC_DEFUN([gl_DIRNAME_LGPL], [ dnl Prerequisites of lib/dirname.h. AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) dnl No prerequisites of lib/basename-lgpl.c, lib/dirname-lgpl.c, dnl lib/stripslash.c. ]) gnuastro-0.5/bootstrapped/m4/ctype.m40000644000175000017500000000177513217200022014554 00000000000000# ctype_h.m4 serial 6 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_CTYPE_H], [ AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) dnl is always overridden, because of GNULIB_POSIXCHECK. gl_NEXT_HEADERS([ctype.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include ]], [isblank]) ]) AC_DEFUN([gl_CTYPE_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_CTYPE_H_DEFAULTS], [ GNULIB_ISBLANK=0; AC_SUBST([GNULIB_ISBLANK]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ISBLANK=1; AC_SUBST([HAVE_ISBLANK]) ]) gnuastro-0.5/bootstrapped/m4/configmake.m40000644000175000017500000000402113217200022015516 00000000000000# configmake.m4 serial 2 dnl Copyright (C) 2010-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_CONFIGMAKE_PREP # ------------------ # Guarantee all of the standard directory variables, even when used with # autoconf 2.59 (datarootdir wasn't supported until 2.59c, and runstatedir # in 2.70) or automake 1.9.6 (pkglibexecdir wasn't supported until 1.10b, # and runstatedir in 1.14.1). AC_DEFUN([gl_CONFIGMAKE_PREP], [ dnl Technically, datadir should default to datarootdir. But if dnl autoconf is too old to provide datarootdir, then reversing the dnl definition is a reasonable compromise. Only AC_SUBST a variable dnl if it was not already defined earlier by autoconf. if test "x$datarootdir" = x; then AC_SUBST([datarootdir], ['${datadir}']) fi dnl Copy the approach used in autoconf 2.60. if test "x$docdir" = x; then AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) fi dnl The remaining variables missing from autoconf 2.59 are easier. if test "x$htmldir" = x; then AC_SUBST([htmldir], ['${docdir}']) fi if test "x$dvidir" = x; then AC_SUBST([dvidir], ['${docdir}']) fi if test "x$pdfdir" = x; then AC_SUBST([pdfdir], ['${docdir}']) fi if test "x$psdir" = x; then AC_SUBST([psdir], ['${docdir}']) fi if test "x$lispdir" = x; then AC_SUBST([lispdir], ['${datarootdir}/emacs/site-lisp']) fi if test "x$localedir" = x; then AC_SUBST([localedir], ['${datarootdir}/locale']) fi dnl Added in autoconf 2.70 if test "x$runstatedir" = x; then AC_SUBST([runstatedir], ['${localstatedir}/run']) fi dnl Automake 1.9.6 only lacks pkglibexecdir; and since 1.11 merely dnl provides it without AC_SUBST, this blind use of AC_SUBST is safe. AC_SUBST([pkglibexecdir], ['${libexecdir}/${PACKAGE}']) ]) gnuastro-0.5/bootstrapped/m4/codeset.m40000644000175000017500000000151213217200022015043 00000000000000# codeset.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[char* cs = nl_langinfo(CODESET); return !cs;]])], [am_cv_langinfo_codeset=yes], [am_cv_langinfo_codeset=no]) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE([HAVE_LANGINFO_CODESET], [1], [Define if you have and nl_langinfo(CODESET).]) fi ]) gnuastro-0.5/bootstrapped/m4/close.m40000644000175000017500000000222113217200022014520 00000000000000# close.m4 serial 9 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CLOSE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi ]) m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [ gl_PREREQ_SYS_H_WINSOCK2 if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then dnl Even if the 'socket' module is not used here, another part of the dnl application may use it and pass file descriptors that refer to dnl sockets to the close() function. So enable the support for sockets. REPLACE_CLOSE=1 fi ]) dnl Replace close() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_CLOSE = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_CLOSE=1 fi fi ]) ]) gnuastro-0.5/bootstrapped/m4/builtin-expect.m40000644000175000017500000000302313217200022016350 00000000000000dnl Check for __builtin_expect. dnl Copyright 2016-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl___BUILTIN_EXPECT], [ AC_CACHE_CHECK([for __builtin_expect], [gl_cv___builtin_expect], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect=yes], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #include int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect="in "], [gl_cv___builtin_expect=no])])]) if test "$gl_cv___builtin_expect" = yes; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [1]) elif test "$gl_cv___builtin_expect" = "in "; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [2]) fi AH_VERBATIM([HAVE___BUILTIN_EXPECT], [/* Define to 1 if the compiler supports __builtin_expect, and to 2 if does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include #endif ]) ]) gnuastro-0.5/bootstrapped/m4/btowc.m40000644000175000017500000000647413217200022014547 00000000000000# btowc.m4 serial 11 dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_BTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl Check whether is usable at all, first. Otherwise the test dnl program below may lead to an endless loop. See dnl . AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) AC_CHECK_FUNCS_ONCE([btowc]) if test $ac_cv_func_btowc = no; then HAVE_BTOWC=0 else AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Cygwin 1.7.2 btowc('\0') is WEOF, not 0. AC_CACHE_CHECK([whether btowc(0) is correct], [gl_cv_func_btowc_nul], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (btowc ('\0') != 0) return 1; return 0; }]])], [gl_cv_func_btowc_nul=yes], [gl_cv_func_btowc_nul=no], [ changequote(,)dnl case "$host_os" in # Guess no on Cygwin. cygwin*) gl_cv_func_btowc_nul="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_nul="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_nul="guessing yes" ;; esac changequote([,])dnl ]) ]) dnl IRIX 6.5 btowc(EOF) is 0xFF, not WEOF. AC_CACHE_CHECK([whether btowc(EOF) is correct], [gl_cv_func_btowc_eof], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on IRIX. irix*) gl_cv_func_btowc_eof="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_eof="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_eof="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (btowc (EOF) != WEOF) return 1; } return 0; }]])], [gl_cv_func_btowc_eof=yes], [gl_cv_func_btowc_eof=no], [:]) fi ]) case "$gl_cv_func_btowc_nul" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_eof" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac fi ]) # Prerequisites of lib/btowc.c. AC_DEFUN([gl_PREREQ_BTOWC], [ : ]) gnuastro-0.5/bootstrapped/m4/ax_pthread.m40000644000175000017500000005052213217200050015542 00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). (This # is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also to link with them as well. For example, you might link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threaded programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to # that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 24 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_PROG_SED]) AC_LANG_PUSH([C]) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on Tru64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes]) AC_MSG_RESULT([$ax_pthread_ok]) if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi CC="$ax_pthread_save_CC" CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 # (Note: HP C rejects this with "bad form for `-t' option") # -pthreads: Solaris/gcc (Note: HP C also rejects) # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads and # -D_REENTRANT too), HP C (must be checked before -lpthread, which # is present but should not be used directly; and before -mthreads, # because the compiler interprets this as "-mt" + "-hreads") # -mthreads: Mingw32/gcc, Lynx/gcc # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case $host_os in freebsd*) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) ax_pthread_flags="-kthread lthread $ax_pthread_flags" ;; hpux*) # From the cc(1) man page: "[-mt] Sets various -D flags to enable # multi-threading and also sets -lpthread." ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" ;; openedition*) # IBM z/OS requires a feature-test macro to be defined in order to # enable POSIX threads at all, so give the user a hint if this is # not set. (We don't define these ourselves, as they can affect # other portions of the system API in unpredictable ways.) AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING], [ # if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) AX_PTHREAD_ZOS_MISSING # endif ], [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])]) ;; solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (N.B.: The stubs are missing # pthread_cleanup_push, or rather a function called by this macro, # so we could check for that, but who knows whether they'll stub # that too in a future libc.) So we'll check first for the # standard Solaris way of linking pthreads (-mt -lpthread). ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags" ;; esac # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) AS_IF([test "x$GCC" = "xyes"], [ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"]) # The presence of a feature test macro requesting re-entrant function # definitions is, on some systems, a strong hint that pthreads support is # correctly enabled case $host_os in darwin* | hpux* | linux* | osf* | solaris*) ax_pthread_check_macro="_REENTRANT" ;; aix*) ax_pthread_check_macro="_THREAD_SAFE" ;; *) ax_pthread_check_macro="--" ;; esac AS_IF([test "x$ax_pthread_check_macro" = "x--"], [ax_pthread_check_cond=0], [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"]) # Are we compiling with Clang? AC_CACHE_CHECK([whether $CC is Clang], [ax_cv_PTHREAD_CLANG], [ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ # if defined(__clang__) && defined(__llvm__) AX_PTHREAD_CC_IS_CLANG # endif ], [ax_cv_PTHREAD_CLANG=yes]) fi ]) ax_pthread_clang="$ax_cv_PTHREAD_CLANG" ax_pthread_clang_warning=no # Clang needs special handling, because older versions handle the -pthread # option in a rather... idiosyncratic way if test "x$ax_pthread_clang" = "xyes"; then # Clang takes -pthread; it has never supported any other flag # (Note 1: This will need to be revisited if a system that Clang # supports has POSIX threads in a separate library. This tends not # to be the way of modern systems, but it's conceivable.) # (Note 2: On some systems, notably Darwin, -pthread is not needed # to get POSIX threads support; the API is always present and # active. We could reasonably leave PTHREAD_CFLAGS empty. But # -pthread does define _REENTRANT, and while the Darwin headers # ignore this macro, third-party headers might not.) PTHREAD_CFLAGS="-pthread" PTHREAD_LIBS= ax_pthread_ok=yes # However, older versions of Clang make a point of warning the user # that, in an invocation where only linking and no compilation is # taking place, the -pthread option has no effect ("argument unused # during compilation"). They expect -pthread to be passed in only # when source code is being compiled. # # Problem is, this is at odds with the way Automake and most other # C build frameworks function, which is that the same flags used in # compilation (CFLAGS) are also used in linking. Many systems # supported by AX_PTHREAD require exactly this for POSIX threads # support, and in fact it is often not straightforward to specify a # flag that is used only in the compilation phase and not in # linking. Such a scenario is extremely rare in practice. # # Even though use of the -pthread flag in linking would only print # a warning, this can be a nuisance for well-run software projects # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread], [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG], [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one # (.c -> exe), because the warning occurs only in the second # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do AS_IF([test "x$ax_pthread_try" = "xunknown"], [break]) CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" ac_link="$ax_pthread_save_ac_link" AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], [ac_link="$ax_pthread_2step_ac_link" AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], [break]) ]) done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no]) ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" ]) case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; esac fi # $ax_pthread_clang = yes if test "x$ax_pthread_ok" = "xno"; then for ax_pthread_try_flag in $ax_pthread_flags; do case $ax_pthread_try_flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -mt,pthread) AC_MSG_CHECKING([whether pthreads work with -mt -lpthread]) PTHREAD_CFLAGS="-mt" PTHREAD_LIBS="-lpthread" ;; -*) AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_LINK_IFELSE([AC_LANG_PROGRAM([#include # if $ax_pthread_check_cond # error "$ax_pthread_check_macro must be defined" # endif static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; }], [pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */])], [ax_pthread_ok=yes], []) CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" AC_MSG_RESULT([$ax_pthread_ok]) AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = "xyes"; then ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_CACHE_CHECK([for joinable pthread attribute], [ax_cv_PTHREAD_JOINABLE_ATTR], [ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [int attr = $ax_pthread_attr; return attr /* ; */])], [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break], []) done ]) AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ test "x$ax_pthread_joinable_attr_defined" != "xyes"], [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$ax_cv_PTHREAD_JOINABLE_ATTR], [Define to necessary symbol if this constant uses a non-standard name on your system.]) ax_pthread_joinable_attr_defined=yes ]) AC_CACHE_CHECK([whether more special flags are required for pthreads], [ax_cv_PTHREAD_SPECIAL_FLAGS], [ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" ;; esac ]) AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ test "x$ax_pthread_special_flags_added" != "xyes"], [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes]) AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], [ax_cv_PTHREAD_PRIO_INHERIT], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[int i = PTHREAD_PRIO_INHERIT;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ test "x$ax_pthread_prio_inherit_defined" != "xyes"], [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.]) ax_pthread_prio_inherit_defined=yes ]) CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" # More AIX lossage: compile with *_r variant if test "x$GCC" != "xyes"; then case $host_os in aix*) AS_CASE(["x/$CC"], [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_POP ])dnl AX_PTHREAD gnuastro-0.5/bootstrapped/m4/ax_compare_version.m40000644000175000017500000001465313217200050017313 00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_compare_version.html # =========================================================================== # # SYNOPSIS # # AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # # DESCRIPTION # # This macro compares two version strings. Due to the various number of # minor-version numbers that can exist, and the fact that string # comparisons are not compatible with numeric comparisons, this is not # necessarily trivial to do in a autoconf script. This macro makes doing # these comparisons easy. # # The six basic comparisons are available, as well as checking equality # limited to a certain number of minor-version levels. # # The operator OP determines what type of comparison to do, and can be one # of: # # eq - equal (test A == B) # ne - not equal (test A != B) # le - less than or equal (test A <= B) # ge - greater than or equal (test A >= B) # lt - less than (test A < B) # gt - greater than (test A > B) # # Additionally, the eq and ne operator can have a number after it to limit # the test to that number of minor versions. # # eq0 - equal up to the length of the shorter version # ne0 - not equal up to the length of the shorter version # eqN - equal up to N sub-version levels # neN - not equal up to N sub-version levels # # When the condition is true, shell commands ACTION-IF-TRUE are run, # otherwise shell commands ACTION-IF-FALSE are run. The environment # variable 'ax_compare_version' is always set to either 'true' or 'false' # as well. # # Examples: # # AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) # AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) # # would both be true. # # AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) # AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) # # would both be false. # # AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) # # would be true because it is only comparing two minor versions. # # AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) # # would be true because it is only comparing the lesser number of minor # versions of the two values. # # Note: The characters that separate the version numbers do not matter. An # empty string is the same as version 0. OP is evaluated by autoconf, not # configure, so must be a string, not a variable. # # The author would like to acknowledge Guido Draheim whose advice about # the m4_case and m4_ifvaln functions make this macro only include the # portions necessary to perform the specific comparison specified by the # OP argument in the final configure script. # # LICENSE # # Copyright (c) 2008 Tim Toolan # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 13 dnl ######################################################################### AC_DEFUN([AX_COMPARE_VERSION], [ AC_REQUIRE([AC_PROG_AWK]) # Used to indicate true or false condition ax_compare_version=false # Convert the two version strings to be compared into a format that # allows a simple string comparison. The end result is that a version # string of the form 1.12.5-r617 will be converted to the form # 0001001200050617. In other words, each number is zero padded to four # digits, and non digits are removed. AS_VAR_PUSHDEF([A],[ax_compare_version_A]) A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/[[^0-9]]//g'` AS_VAR_PUSHDEF([B],[ax_compare_version_B]) B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/[[^0-9]]//g'` dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary dnl # then the first line is used to determine if the condition is true. dnl # The sed right after the echo is to remove any indented white space. m4_case(m4_tolower($2), [lt],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"` ], [gt],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"` ], [le],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"` ], [ge],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"` ],[ dnl Split the operator from the subversion count if present. m4_bmatch(m4_substr($2,2), [0],[ # A count of zero means use the length of the shorter version. # Determine the number of characters in A and B. ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'` ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'` # Set A to no more than B's length and B to no more than A's length. A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"` B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"` ], [[0-9]+],[ # A count greater than zero means use only that many subversions A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` ], [.+],[ AC_WARNING( [invalid OP numeric parameter: $2]) ],[]) # Pad zeros at end of numbers to make same length. ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`" B="$B`echo $A | sed 's/./0/g'`" A="$ax_compare_version_tmp_A" # Check for equality or inequality as necessary. m4_case(m4_tolower(m4_substr($2,0,2)), [eq],[ test "x$A" = "x$B" && ax_compare_version=true ], [ne],[ test "x$A" != "x$B" && ax_compare_version=true ],[ AC_WARNING([invalid OP parameter: $2]) ]) ]) AS_VAR_POPDEF([A])dnl AS_VAR_POPDEF([B])dnl dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE. if test "$ax_compare_version" = "true" ; then m4_ifvaln([$4],[$4],[:])dnl m4_ifvaln([$5],[else $5])dnl fi ]) dnl AX_COMPARE_VERSION gnuastro-0.5/bootstrapped/m4/ax_check_compile_flag.m40000644000175000017500000000640313217200050017670 00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # Check whether the given FLAG works with the current language's compiler # or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 5 AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_COMPILE_FLAGS gnuastro-0.5/bootstrapped/m4/asm-underscore.m40000644000175000017500000000440213217200022016345 00000000000000# asm-underscore.m4 serial 3 dnl Copyright (C) 2010-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. Based on as-underscore.m4 in GNU clisp. # gl_ASM_SYMBOL_PREFIX # Tests for the prefix of C symbols at the assembly language level and the # linker level. This prefix is either an underscore or empty. Defines the # C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to # a stringified variant of this prefix. AC_DEFUN([gl_ASM_SYMBOL_PREFIX], [ dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because dnl 1. It works only for GCC. dnl 2. It is incorrectly defined on some platforms, in some GCC versions. AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK( [whether C symbols are prefixed with underscore at the linker level], [gl_cv_prog_as_underscore], [cat > conftest.c </dev/null 2>&1 if LC_ALL=C grep -E '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then gl_cv_prog_as_underscore=yes else gl_cv_prog_as_underscore=no fi rm -f conftest* ]) if test $gl_cv_prog_as_underscore = yes; then USER_LABEL_PREFIX=_ else USER_LABEL_PREFIX= fi AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX], [Define to the prefix of C symbols at the assembler and linker level, either an underscore or empty.]) ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"' AC_SUBST([ASM_SYMBOL_PREFIX]) ]) # gl_C_ASM # Determines how to produce an assembly language file from C source code. # Sets the variables: # gl_asmext - the extension of assembly language output, # gl_c_asm_opt - the C compiler option that produces assembly language output. AC_DEFUN([gl_C_ASM], [ AC_EGREP_CPP([MicrosoftCompiler], [ #ifdef _MSC_VER MicrosoftCompiler #endif ], [gl_asmext='asm' gl_c_asm_opt='-c -Fa' ], [gl_asmext='s' gl_c_asm_opt='-S' ]) ]) gnuastro-0.5/bootstrapped/m4/arpa_inet_h.m40000644000175000017500000000357113217200022015675 00000000000000# arpa_inet_h.m4 serial 13 dnl Copyright (C) 2006, 2008-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Simon Josefsson and Bruno Haible AC_DEFUN([gl_HEADER_ARPA_INET], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) AC_CHECK_HEADERS_ONCE([arpa/inet.h]) if test $ac_cv_header_arpa_inet_h = yes; then HAVE_ARPA_INET_H=1 else HAVE_ARPA_INET_H=0 fi AC_SUBST([HAVE_ARPA_INET_H]) dnl is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([arpa/inet.h]) AC_REQUIRE([gl_FEATURES_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* On some systems, this header is not self-consistent. */ #if !(defined __GLIBC__ || defined __UCLIBC__) # include #endif #ifdef __TANDEM # include #endif #include ]], [inet_ntop inet_pton]) ]) AC_DEFUN([gl_ARPA_INET_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_ARPA_INET_H_DEFAULTS], [ GNULIB_INET_NTOP=0; AC_SUBST([GNULIB_INET_NTOP]) GNULIB_INET_PTON=0; AC_SUBST([GNULIB_INET_PTON]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_INET_NTOP=1; AC_SUBST([HAVE_DECL_INET_NTOP]) HAVE_DECL_INET_PTON=1; AC_SUBST([HAVE_DECL_INET_PTON]) REPLACE_INET_NTOP=0; AC_SUBST([REPLACE_INET_NTOP]) REPLACE_INET_PTON=0; AC_SUBST([REPLACE_INET_PTON]) ]) gnuastro-0.5/bootstrapped/m4/argp.m40000644000175000017500000000542613217200022014356 00000000000000# argp.m4 serial 15 dnl Copyright (C) 2003-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_ARGP], [ AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS([program_invocation_name], [], [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_NAME], [1], [Define to 1 to add extern declaration of program_invocation_name to argp.h])], [[#include ]]) AC_CHECK_DECLS([program_invocation_short_name], [], [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_SHORT_NAME], [1], [Define to 1 to add extern declaration of program_invocation_short_name to argp.h])], [[#include ]]) # Check if program_invocation_name and program_invocation_short_name # are defined elsewhere. It is improbable that only one of them will # be defined and other not, I prefer to stay on the safe side and to # test each one separately. AC_MSG_CHECKING([whether program_invocation_name is defined]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[program_invocation_name = "test";]])], [AC_DEFINE([HAVE_PROGRAM_INVOCATION_NAME], [1], [Define if program_invocation_name is defined]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_MSG_CHECKING([whether program_invocation_short_name is defined]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[program_invocation_short_name = "test";]])], [AC_DEFINE([HAVE_PROGRAM_INVOCATION_SHORT_NAME], [1], [Define if program_invocation_short_name is defined]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_CHECK_DECLS_ONCE([clearerr_unlocked]) AC_CHECK_DECLS_ONCE([feof_unlocked]) AC_CHECK_DECLS_ONCE([ferror_unlocked]) AC_CHECK_DECLS_ONCE([fflush_unlocked]) AC_CHECK_DECLS_ONCE([fgets_unlocked]) AC_CHECK_DECLS_ONCE([fputc_unlocked]) AC_CHECK_DECLS_ONCE([fputs_unlocked]) AC_CHECK_DECLS_ONCE([fread_unlocked]) AC_CHECK_DECLS_ONCE([fwrite_unlocked]) AC_CHECK_DECLS_ONCE([getc_unlocked]) AC_CHECK_DECLS_ONCE([getchar_unlocked]) AC_CHECK_DECLS_ONCE([putc_unlocked]) AC_CHECK_DECLS_ONCE([putchar_unlocked]) AC_CHECK_FUNCS_ONCE([flockfile funlockfile]) AC_CHECK_HEADERS_ONCE([features.h linewrap.h]) AC_REQUIRE([AC_FUNC_STRERROR_R]) ]) dnl argp-parse.c depends on GNU getopt internals, therefore use GNU getopt dnl always. AC_DEFUN([gl_REPLACE_GETOPT_ALWAYS], []) gnuastro-0.5/bootstrapped/m4/alloca.m40000644000175000017500000001037213217200022014654 00000000000000# alloca.m4 serial 14 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2017 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ALLOCA], [ AC_REQUIRE([AC_FUNC_ALLOCA]) if test $ac_cv_func_alloca_works = no; then gl_PREREQ_ALLOCA fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ AC_EGREP_CPP([Need own alloca], [ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) ]) if test $gl_cv_rpl_alloca = yes; then dnl OK, alloca can be implemented through a compiler built-in. AC_DEFINE([HAVE_ALLOCA], [1], [Define to 1 if you have 'alloca' after including , a header that may be supplied by this distribution.]) ALLOCA_H=alloca.h else dnl alloca exists as a library function, i.e. it is slow and probably dnl a memory leak. Don't define HAVE_ALLOCA in this case. ALLOCA_H= fi else ALLOCA_H=alloca.h fi AC_SUBST([ALLOCA_H]) AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"]) ]) # Prerequisites of lib/alloca.c. # STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. AC_DEFUN([gl_PREREQ_ALLOCA], [:]) # This works around a bug in autoconf <= 2.68. # See . m4_version_prereq([2.69], [] ,[ # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=6cd9f12520b0d6f76d3230d7565feba1ecf29497 # _AC_LIBOBJ_ALLOCA # ----------------- # Set up the LIBOBJ replacement of 'alloca'. Well, not exactly # AC_LIBOBJ since we actually set the output variable 'ALLOCA'. # Nevertheless, for Automake, AC_LIBSOURCES it. m4_define([_AC_LIBOBJ_ALLOCA], [# The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. AC_LIBSOURCES(alloca.c) AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) AC_CACHE_CHECK(whether 'alloca.c' needs Cray hooks, ac_cv_os_cray, [AC_EGREP_CPP(webecray, [#if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif ], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do AC_CHECK_FUNC($ac_func, [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, [Define to one of '_getb67', 'GETB67', 'getb67' for Cray-2 and Cray-YMP systems. This function is required for 'alloca.c' support on those systems.]) break]) done fi AC_CACHE_CHECK([stack direction for C alloca], [ac_cv_c_stack_direction], [AC_RUN_IFELSE([AC_LANG_SOURCE( [AC_INCLUDES_DEFAULT int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; }])], [ac_cv_c_stack_direction=1], [ac_cv_c_stack_direction=-1], [ac_cv_c_stack_direction=0])]) AH_VERBATIM([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ @%:@undef STACK_DIRECTION])dnl AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) ])# _AC_LIBOBJ_ALLOCA ]) gnuastro-0.5/bootstrapped/m4/absolute-header.m40000644000175000017500000001034713217200022016467 00000000000000# absolute-header.m4 serial 16 dnl Copyright (C) 2006-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Derek Price. # gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) # --------------------------------------- # Find the absolute name of a header file, testing first if the header exists. # If the header were sys/inttypes.h, this macro would define # ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h # in config.h # (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. AC_DEFUN([gl_ABSOLUTE_HEADER], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PREPROC_REQUIRE()dnl dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_absolute_header], [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], m4_defn([gl_absolute_header]), [AS_VAR_PUSHDEF([ac_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl if test AS_VAR_GET(ac_header_exists) = yes; then gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) fi AS_VAR_POPDEF([ac_header_exists])dnl ])dnl AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), ["AS_VAR_GET(gl_absolute_header)"], [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) AS_VAR_POPDEF([gl_absolute_header])dnl ])dnl ])# gl_ABSOLUTE_HEADER # gl_ABSOLUTE_HEADER_ONE(HEADER) # ------------------------------ # Like gl_ABSOLUTE_HEADER, except that: # - it assumes that the header exists, # - it uses the current CPPFLAGS, # - it does not cache the result, # - it is silent. AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) dnl AIX "xlc -E" and "cc -E" omit #line directives for header files dnl that contain only a #include of other header files and no dnl non-comment tokens of their own. This leads to a failure to dnl detect the absolute name of , , dnl and others. The workaround is to force preservation of comments dnl through option -C. This ensures all necessary #line directives dnl are present. GCC supports option -C as well. case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac changequote(,) case "$host_os" in mingw*) dnl For the sake of native Windows compilers (excluding gcc), dnl treat backslash as a directory separator, like /. dnl Actually, these compilers use a double-backslash as dnl directory separator, inside the dnl # line "filename" dnl directives. gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac dnl A sed expression that turns a string into a basic regular dnl expression, for use within "/.../". gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo '$1' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' changequote([,]) dnl eval is necessary to expand gl_absname_cpp. dnl Ultrix and Pyramid sh refuse to redirect output of eval, dnl so use subshell. AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), [`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`]) ]) gnuastro-0.5/bootstrapped/m4/00gnulib.m40000644000175000017500000000415213217200022015040 00000000000000# 00gnulib.m4 serial 3 dnl Copyright (C) 2009-2017 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file must be named something that sorts before all other dnl gnulib-provided .m4 files. It is needed until such time as we can dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and dnl m4_divert semantics. # Until autoconf 2.63, handling of the diversion stack required m4_init # to be called first; but this does not happen with aclocal. Wrapping # the entire execution in another layer of the diversion stack fixes this. # Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4 # for whether it was FIFO or LIFO; in order to properly balance with # m4_init, we need to undo our push just before anything wrapped within # the m4_init body. The way to ensure this is to wrap both sides of # m4_init with a one-shot macro that does the pop at the right time. m4_ifndef([_m4_divert_diversion], [m4_divert_push([KILL]) m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])]) m4_define([m4_init], [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])]) # AC_DEFUN_ONCE([NAME], VALUE) # ---------------------------- # Define NAME to expand to VALUE on the first use (whether by direct # expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. # Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This # definition is slower than the version in Autoconf 2.64, because it # can only use interfaces that existed since 2.59; but it achieves the # same effect. Quoting is necessary to avoid confusing Automake. m4_version_prereq([2.63.263], [], [m4_define([AC][_DEFUN_ONCE], [AC][_DEFUN([$1], [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl [AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) # gl_00GNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file prior to all other gnulib .m4 files. AC_DEFUN([gl_00GNULIB]) gnuastro-0.5/bootstrapped/build-aux/0000755000175000017500000000000013217220465014623 500000000000000gnuastro-0.5/bootstrapped/build-aux/test-driver0000755000175000017500000001104113217200071016725 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2016-01-11.22; # UTC # Copyright (C) 2011-2017 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnuastro-0.5/bootstrapped/build-aux/git-version-gen0000755000175000017500000001760513217200020017500 00000000000000#!/bin/sh # Print a version string. scriptversion=2017-09-13.06; # UTC # Copyright (C) 2007-2017 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/. # It may be run two ways: # - from a git repository in which the "git describe" command below # produces useful output (thus requiring at least one signed tag) # - from a non-git-repo directory containing a .tarball-version file, which # presumes this script is invoked like "./git-version-gen .tarball-version". # In order to use intra-version strings in your project, you will need two # separate generated version string files: # # .tarball-version - present only in a distribution tarball, and not in # a checked-out repository. Created with contents that were learned at # the last time autoconf was run, and used by git-version-gen. Must not # be present in either $(srcdir) or $(builddir) for git-version-gen to # give accurate answers during normal development with a checked out tree, # but must be present in a tarball when there is no version control system. # Therefore, it cannot be used in any dependencies. GNUmakefile has # hooks to force a reconfigure at distribution time to get the value # correct, without penalizing normal development with extra reconfigures. # # .version - present in a checked-out repository and in a distribution # tarball. Usable in dependencies, particularly for files that don't # want to depend on config.h but do want to track version changes. # Delete this file prior to any autoconf run where you want to rebuild # files to pick up a version string change; and leave it stale to # minimize rebuild time after unrelated changes to configure sources. # # As with any generated file in a VC'd directory, you should add # /.version to .gitignore, so that you don't accidentally commit it. # .tarball-version is never generated in a VC'd directory, so needn't # be listed there. # # Use the following line in your configure.ac, so that $(VERSION) will # automatically be up-to-date each time configure is run (and note that # since configure.ac no longer includes a version string, Makefile rules # should not depend on configure.ac for version updates). # # AC_INIT([GNU project], # m4_esyscmd([build-aux/git-version-gen .tarball-version]), # [bug-project@example]) # # Then use the following lines in your Makefile.am, so that .version # will be present for dependencies, and so that .version and # .tarball-version will exist in distribution tarballs. # # EXTRA_DIST = $(top_srcdir)/.version # BUILT_SOURCES = $(top_srcdir)/.version # $(top_srcdir)/.version: # echo $(VERSION) > $@-t && mv $@-t $@ # dist-hook: # echo $(VERSION) > $(distdir)/.tarball-version me=$0 version="git-version-gen $scriptversion Copyright 2011 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING." usage="\ Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT] Print a version string. Options: --prefix PREFIX prefix of git tags (default 'v') --fallback VERSION fallback version to use if \"git --version\" fails --help display this help and exit --version output version information and exit Running without arguments will suffice in most cases." prefix=v fallback= while test $# -gt 0; do case $1 in --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; --prefix) shift; prefix=${1?};; --fallback) shift; fallback=${1?};; -*) echo "$0: Unknown option '$1'." >&2 echo "$0: Try '--help' for more information." >&2 exit 1;; *) if test "x$tarball_version_file" = x; then tarball_version_file="$1" elif test "x$tag_sed_script" = x; then tag_sed_script="$1" else echo "$0: extra non-option argument '$1'." >&2 exit 1 fi;; esac shift done if test "x$tarball_version_file" = x; then echo "$usage" exit 1 fi tag_sed_script="${tag_sed_script:-s/x/x/}" nl=' ' # Avoid meddling by environment variable of the same name. v= v_from_git= # First see if there is a tarball-only version file. # then try "git describe", then default. if test -f $tarball_version_file then v=`cat $tarball_version_file` || v= case $v in *$nl*) v= ;; # reject multi-line output [0-9]*) ;; *) v= ;; esac test "x$v" = x \ && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2 fi if test "x$v" != x then : # use $v # Otherwise, if there is at least one git commit involving the working # directory, and "git describe" output looks sensible, use that to # derive a version string. elif test "`git log -1 --pretty=format:x . 2>&1`" = x \ && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \ || git describe --abbrev=4 HEAD 2>/dev/null` \ && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \ && case $v in $prefix[0-9]*) ;; *) (exit 1) ;; esac then # Is this a new git that lists number of commits since the last # tag or the previous older version that did not? # Newer: v6.10-77-g0f8faeb # Older: v6.10-g0f8faeb vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v case $vprefix in *-*) : git describe is probably okay three part flavor ;; *) : git describe is older two part flavor # Recreate the number of commits and rewrite such that the # result is the same as if we were using the newer version # of git describe. vtag=`echo "$v" | sed 's/-.*//'` commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \ || { commit_list=failed; echo "$0: WARNING: git rev-list failed" 1>&2; } numcommits=`echo "$commit_list" | wc -l` v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`; test "$commit_list" = failed && v=UNKNOWN ;; esac # Change the penultimate "-" to ".", for version-comparing tools. # Remove the "g" to save a byte. v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`; v_from_git=1 elif test "x$fallback" = x || git --version >/dev/null 2>&1; then v=UNKNOWN else v=$fallback fi v=`echo "$v" |sed "s/^$prefix//"` # Test whether to append the "-dirty" suffix only if the version # string we're using came from git. I.e., skip the test if it's "UNKNOWN" # or if it came from .tarball-version. if test "x$v_from_git" != x; then # Don't declare a version "dirty" merely because a timestamp has changed. git update-index --refresh > /dev/null 2>&1 dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty= case "$dirty" in '') ;; *) # Append the suffix only if there isn't one already. case $v in *-dirty) ;; *) v="$v-dirty" ;; esac ;; esac fi # Omit the trailing newline, so that m4_esyscmd can use the result directly. printf %s "$v" # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnuastro-0.5/bootstrapped/build-aux/gendocs.sh0000755000175000017500000004110413217200020016505 00000000000000#!/bin/sh -e # gendocs.sh -- generate a GNU manual in many formats. This script is # mentioned in maintain.texi. See the help message below for usage details. scriptversion=2017-09-12.23 # Copyright 2003-2017 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Original author: Mohit Agarwal. # Send bug reports and any other correspondence to bug-gnulib@gnu.org. # # The latest version of this script, and the companion template, is # available from the Gnulib repository: # # https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh # https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template # TODO: # - image importing was only implemented for HTML generated by # makeinfo. But it should be simple enough to adjust. # - images are not imported in the source tarball. All the needed # formats (PDF, PNG, etc.) should be included. prog=`basename "$0"` srcdir=`pwd` scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh" templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template" : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} : ${MAKEINFO="makeinfo"} : ${TEXI2DVI="texi2dvi"} : ${DOCBOOK2HTML="docbook2html"} : ${DOCBOOK2PDF="docbook2pdf"} : ${DOCBOOK2TXT="docbook2txt"} : ${GENDOCS_TEMPLATE_DIR="."} : ${PERL='perl'} : ${TEXI2HTML="texi2html"} unset CDPATH unset use_texi2html MANUAL_TITLE= PACKAGE= EMAIL=webmasters@gnu.org # please override with --email commonarg= # passed to all makeinfo/texi2html invcations. dirargs= # passed to all tools (-I dir). dirs= # -I directories. htmlarg="--css-ref=/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual" infoarg=--no-split generate_ascii=true generate_html=true generate_info=true generate_tex=true outdir=manual source_extra= split=node srcfile= texarg="-t @finalout" version="gendocs.sh $scriptversion Copyright 2017 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING." usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE Generate output in various formats from PACKAGE.texinfo (or .texi or .txi) source. See the GNU Maintainers document for a more extensive discussion: https://www.gnu.org/prep/maintain_toc.html Options: --email ADR use ADR as contact in generated web pages; always give this. -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} -o OUTDIR write files into OUTDIR, instead of manual/. -I DIR append DIR to the Texinfo search path. --common ARG pass ARG in all invocations. --html ARG pass ARG to makeinfo or texi2html for HTML targets, instead of '$htmlarg'. --info ARG pass ARG to makeinfo for Info, instead of --no-split. --no-ascii skip generating the plain text output. --no-html skip generating the html output. --no-info skip generating the info output. --no-tex skip generating the dvi and pdf output. --source ARG include ARG in tar archive of sources. --split HOW make split HTML by node, section, chapter; default node. --tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout. --texi2html use texi2html to make HTML target, with all split versions. --docbook convert through DocBook too (xml, txt, html, pdf). --help display this help and exit successfully. --version display version information and exit successfully. Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" Typical sequence: cd PACKAGESOURCE/doc wget \"$scripturl\" wget \"$templateurl\" $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" Output will be in a new subdirectory \"manual\" (by default; use -o OUTDIR to override). Move all the new files into your web CVS tree, as explained in the Web Pages node of maintain.texi. Please use the --email ADDRESS option so your own bug-reporting address will be used in the generated HTML pages. MANUAL-TITLE is included as part of the HTML of the overall manual/index.html file. It should include the name of the package being documented. manual/index.html is created by substitution from the file $GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the generic template for your own purposes.) If you have several manuals, you'll need to run this script several times with different MANUAL values, specifying a different output directory with -o each time. Then write (by hand) an overall index.html with links to them all. If a manual's Texinfo sources are spread across several directories, first copy or symlink all Texinfo sources into a single directory. (Part of the script's work is to make a tar.gz of the sources.) As implied above, by default monolithic Info files are generated. If you want split Info, or other Info options, use --info to override. You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and PERL to control the programs that get executed, and GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is looked for. With --docbook, the environment variables DOCBOOK2HTML, DOCBOOK2PDF, and DOCBOOK2TXT are also consulted. By default, makeinfo and texi2dvi are run in the default (English) locale, since that's the language of most Texinfo manuals. If you happen to have a non-English manual and non-English web site, see the SETLANG setting in the source. Email bug reports or enhancement requests to bug-gnulib@gnu.org. " while test $# -gt 0; do case $1 in -s) shift; srcfile=$1;; -o) shift; outdir=$1;; -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";; --common) shift; commonarg=$1;; --docbook) docbook=yes;; --email) shift; EMAIL=$1;; --html) shift; htmlarg=$1;; --info) shift; infoarg=$1;; --no-ascii) generate_ascii=false;; --no-html) generate_ascii=false;; --no-info) generate_info=false;; --no-tex) generate_tex=false;; --source) shift; source_extra=$1;; --split) shift; split=$1;; --tex) shift; texarg=$1;; --texi2html) use_texi2html=1;; --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; -*) echo "$0: Unknown option \`$1'." >&2 echo "$0: Try \`--help' for more information." >&2 exit 1;; *) if test -z "$PACKAGE"; then PACKAGE=$1 elif test -z "$MANUAL_TITLE"; then MANUAL_TITLE=$1 else echo "$0: extra non-option argument \`$1'." >&2 exit 1 fi;; esac shift done # makeinfo uses the dirargs, but texi2dvi doesn't. commonarg=" $dirargs $commonarg" # For most of the following, the base name is just $PACKAGE base=$PACKAGE if test -n "$srcfile"; then # but here, we use the basename of $srcfile base=`basename "$srcfile"` case $base in *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;; esac PACKAGE=$base elif test -s "$srcdir/$PACKAGE.texinfo"; then srcfile=$srcdir/$PACKAGE.texinfo elif test -s "$srcdir/$PACKAGE.texi"; then srcfile=$srcdir/$PACKAGE.texi elif test -s "$srcdir/$PACKAGE.txi"; then srcfile=$srcdir/$PACKAGE.txi else echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 exit 1 fi if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2 echo "$0: it is available from $templateurl." >&2 exit 1 fi # Function to return size of $1 in something resembling kilobytes. calcsize() { size=`ls -ksl $1 | awk '{print $1}'` echo $size } # copy_images OUTDIR HTML-FILE... # ------------------------------- # Copy all the images needed by the HTML-FILEs into OUTDIR. # Look for them in . and the -I directories; this is simpler than what # makeinfo supports with -I, but hopefully it will suffice. copy_images() { local odir odir=$1 shift $PERL -n -e " BEGIN { \$me = '$prog'; \$odir = '$odir'; @dirs = qw(. $dirs); } " -e ' /<img src="(.*?)"/g && ++$need{$1}; END { #print "$me: @{[keys %need]}\n"; # for debugging, show images found. FILE: for my $f (keys %need) { for my $d (@dirs) { if (-f "$d/$f") { use File::Basename; my $dest = dirname ("$odir/$f"); # use File::Path; -d $dest || mkpath ($dest) || die "$me: cannot mkdir $dest: $!\n"; # use File::Copy; copy ("$d/$f", $dest) || die "$me: cannot copy $d/$f to $dest: $!\n"; next FILE; } } die "$me: $ARGV: cannot find image $f\n"; } } ' -- "$@" || exit 1 } case $outdir in /*) abs_outdir=$outdir;; *) abs_outdir=$srcdir/$outdir;; esac echo "Making output for $srcfile" echo " in `pwd`" mkdir -p "$outdir/" # if $generate_info; then cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\"" echo "Generating info... ($cmd)" rm -f $PACKAGE.info* # get rid of any strays eval "$cmd" tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* ls -l "$outdir/$PACKAGE.info.tar.gz" info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"` # do not mv the info files, there's no point in having them available # separately on the web. fi # end info # if $generate_tex; then cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\"" printf "\nGenerating dvi... ($cmd)\n" eval "$cmd" # compress/finish dvi: gzip -f -9 $PACKAGE.dvi dvi_gz_size=`calcsize $PACKAGE.dvi.gz` mv $PACKAGE.dvi.gz "$outdir/" ls -l "$outdir/$PACKAGE.dvi.gz" cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\"" printf "\nGenerating pdf... ($cmd)\n" eval "$cmd" pdf_size=`calcsize $PACKAGE.pdf` mv $PACKAGE.pdf "$outdir/" ls -l "$outdir/$PACKAGE.pdf" fi # end tex (dvi + pdf) # if $generate_ascii; then opt="-o $PACKAGE.txt --no-split --no-headers $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating ascii... ($cmd)\n" eval "$cmd" ascii_size=`calcsize $PACKAGE.txt` gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz" ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"` mv $PACKAGE.txt "$outdir/" ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz" fi # if $generate_html; then # Split HTML at level $1. Used for texi2html. html_split() { opt="--split=$1 --node-files $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" printf "\nGenerating html by $1... ($cmd)\n" eval "$cmd" split_html_dir=$PACKAGE.html ( cd ${split_html_dir} || exit 1 ln -sf ${PACKAGE}.html index.html tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html ) eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"` rm -f "$outdir"/html_$1/*.html mkdir -p "$outdir/html_$1/" mv ${split_html_dir}/*.html "$outdir/html_$1/" rmdir ${split_html_dir} } if test -z "$use_texi2html"; then opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating monolithic html... ($cmd)\n" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` copy_images "$outdir/" $PACKAGE.html mv $PACKAGE.html "$outdir/" ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz" # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option, # it just always split by node. So if we're splitting by node anyway, # leave it out. if test "x$split" = xnode; then split_arg= else split_arg=--split=$split fi # opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating html by $split... ($cmd)\n" eval "$cmd" split_html_dir=$PACKAGE.html copy_images $split_html_dir/ $split_html_dir/*.html ( cd $split_html_dir || exit 1 tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- * ) eval \ html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"` rm -rf "$outdir/html_$split/" mv $split_html_dir "$outdir/html_$split/" du -s "$outdir/html_$split/" ls -l "$outdir/$PACKAGE.html_$split.tar.gz" else # use texi2html: opt="--output $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\"" printf "\nGenerating monolithic html with texi2html... ($cmd)\n" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` mv $PACKAGE.html "$outdir/" html_split node html_split chapter html_split section fi fi # end html # printf "\nMaking .tar.gz for sources...\n" d=`dirname $srcfile` ( cd "$d" srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles ls -l "$abs_outdir/$PACKAGE.texi.tar.gz" ) texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` # # Do everything again through docbook. if test -n "$docbook"; then opt="-o - --docbook $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml" printf "\nGenerating docbook XML... ($cmd)\n" eval "$cmd" docbook_xml_size=`calcsize $PACKAGE-db.xml` gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz" docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"` mv $PACKAGE-db.xml "$outdir/" split_html_db_dir=html_node_db opt="$commonarg -o $split_html_db_dir" cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook HTML... ($cmd)\n" eval "$cmd" ( cd ${split_html_db_dir} || exit 1 tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html ) html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"` rm -f "$outdir"/html_node_db/*.html mkdir -p "$outdir/html_node_db" mv ${split_html_db_dir}/*.html "$outdir/html_node_db/" rmdir ${split_html_db_dir} cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook ASCII... ($cmd)\n" eval "$cmd" docbook_ascii_size=`calcsize $PACKAGE-db.txt` mv $PACKAGE-db.txt "$outdir/" cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook PDF... ($cmd)\n" eval "$cmd" docbook_pdf_size=`calcsize $PACKAGE-db.pdf` mv $PACKAGE-db.pdf "$outdir/" fi # printf "\nMaking index.html for $PACKAGE...\n" if test -z "$use_texi2html"; then CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" else # should take account of --split here. CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" fi curdate=`$SETLANG date '+%B %d, %Y'` sed \ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \ -e "s!%%EMAIL%%!$EMAIL!g" \ -e "s!%%PACKAGE%%!$PACKAGE!g" \ -e "s!%%DATE%%!$curdate!g" \ -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \ -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \ -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \ -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \ -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ -e "s!%%PDF_SIZE%%!$pdf_size!g" \ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ -e "s,%%SCRIPTURL%%,$scripturl,g" \ -e "s!%%SCRIPTNAME%%!$prog!g" \ -e "$CONDS" \ $GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html" echo "Done, see $outdir/ subdirectory for new files." # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bootstrapped/build-aux/texinfo.tex�����������������������������������������������������0000644�0001750�0001750�00001350454�13216277135�016762� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2017-12-18.20} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 % Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see <https://www.gnu.org/licenses/>. % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % https://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is https://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} % LaTeX's \typeout. This ensures that the messages it is used for % are identical in format to the corresponding ones from latex/pdflatex. \def\typeout{\immediate\write17}% \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexsp=\sp \let\ptexstar=\* \let\ptexsup=\sup \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Give the space character the catcode for a space. \def\spaceisspace{\catcode`\ =10\relax} % Likewise for ^^M, the end of line character. \def\endlineisspace{\catcode13=10\relax} \chardef\dashChar = `\- \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Output routine % % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. % \domark is called twice inside \chapmacro, to add one % mark before the section break, and one after. % In the second call \prevchapterdefs is the same as \lastchapterdefs, % and \prevsectiondefs is the same as \lastsectiondefs. % Then if the page is not broken at the mark, some of the previous % section appears on the page, and we can get the name of this section % from \firstmark for @everyheadingmarks top. % @everyheadingmarks bottom uses \botmark. % % See page 260 of The TeXbook. \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom \noexpand\else \the\toks8 % 2: color marks }% } % \gettopheadingmarks, \getbottomheadingmarks, % \getcolormarks - extract needed part of mark. % % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\lastsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\txipagewidth \newdimen\txipageheight % Main output routine. % \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. % \shipout a vbox for a single page, adding an optional header, footer, % cropmarks, and footnote. This also causes index entries for this page % to be written to the auxiliary files. % \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Common context changes for both heading and footing. % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \def\commmonheadfootline{\let\hsize=\txipagewidth \texinfochars} % % Retrieve the information for the headings from the marks in the page, % and call Plain TeX's \makeheadline and \makefootline, which use the % values in \headline and \footline. % % This is used to check if we are on the first page of a chapter. \ifcase1\topmark\fi \let\prevchaptername\thischaptername \ifcase0\firstmark\fi \let\curchaptername\thischaptername % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi % \ifx\curchaptername\prevchaptername \let\thischapterheading\thischapter \else % \thischapterheading is the same as \thischapter except it is blank % for the first page of a chapter. This is to prevent the chapter name % being shown twice. \def\thischapterheading{}% \fi % \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}% \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}% % {% % Set context for writing to auxiliary files like index files. % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen % Main part of page, including any footnotes \def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Argument parsing % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % For example, \def\foo{\parsearg\fooxxx}. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. Also remove a @texinfoc % comment (see \scanmacro for details). Pass the result on to \argcheckspaces. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argremovetexinfoc #1\texinfoc\ArgTerm} \def\argremovetexinfoc#1\texinfoc#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef - define a command taking an argument on the line % % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. \addgroupbox \prevdepth = \dimen1 \checkinserts } \def\addgroupbox{ % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \txipageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\txipageheight \page \fi \fi \box\groupbox } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\c{\begingroup \catcode`\^^M=\active% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \cxxx} {\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}} % \let\comment\c % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent {\restorefirstparagraphindent \indent}% \gdef\noindent{\restorefirstparagraphindent \noindent}% \global\everypar = {\kern -\parindent \restorefirstparagraphindent}% } % \gdef\restorefirstparagraphindent{% \global\let\indent = \ptexindent \global\let\noindent = \ptexnoindent \global\everypar = {}% } % @refill is a no-op. \let\refill=\relax % @setfilename INFO-FILENAME - ignored \let\setfilename=\comment % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newbox\boxB \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % % For LuaTeX % \newif\iftxiuseunicodedestname \txiuseunicodedestnamefalse % For pdfTeX etc. \ifx\luatexversion\thisisundefined \else % Use Unicode destination names \txiuseunicodedestnametrue % Escape PDF strings with converting UTF-16 from UTF-8 \begingroup \catcode`\%=12 \directlua{ function UTF16oct(str) tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377') for c in string.utfvalues(str) do if c < 0x10000 then tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', (c / 256), (c % 256))) else c = c - 0x10000 local c_hi = c / 1024 + 0xd800 local c_lo = c % 1024 + 0xdc00 tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', (c_hi / 256), (c_hi % 256), (c_lo / 256), (c_lo % 256))) end end end } \endgroup \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}} % Escape PDF strings without converting \begingroup \directlua{ function PDFescstr(str) for c in string.bytes(str) do if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o', c)) else tex.sprint(string.char(c)) end end end } \endgroup \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} \ifnum\luatexversion>84 % For LuaTeX >= 0.85 \def\pdfdest{\pdfextension dest} \let\pdfoutput\outputmode \def\pdfliteral{\pdfextension literal} \def\pdfcatalog{\pdfextension catalog} \def\pdftexversion{\numexpr\pdffeedback version\relax} \let\pdfximage\saveimageresource \let\pdfrefximage\useimageresource \let\pdflastximage\lastsavedimageresourceindex \def\pdfendlink{\pdfextension endlink\relax} \def\pdfoutline{\pdfextension outline} \def\pdfstartlink{\pdfextension startlink} \def\pdffontattr{\pdfextension fontattr} \def\pdfobj{\pdfextension obj} \def\pdflastobj{\numexpr\pdffeedback lastobj\relax} \let\pdfpagewidth\pagewidth \let\pdfpageheight\pageheight \edef\pdfhorigin{\pdfvariable horigin} \edef\pdfvorigin{\pdfvariable vorigin} \fi \fi % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \xdef#1{#1}% \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \def\txiescapepdfutfsixteen#1{% \ifx\pdfescapestrutfsixteen\thisisundefined % No UTF-16 converting macro available. \txiescapepdf{#1}% \else \xdef#1{\pdfescapestrutfsixteen{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros using ideas from pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. The dark red here is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. We use % black by default, though. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % rg sets the color for filling (usual text, etc.); % RG sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\setpdfdestname#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \makevalueexpandable \turnoffactive \iftxiuseunicodedestname \ifx \declaredencoding \latone % Pass through Latin-1 characters. % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode. \else \ifx \declaredencoding \utfeight % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \fi \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \indexnofonts \makevalueexpandable \turnoffactive \ifx \declaredencoding \latone % The PDF format can use an extended form of Latin-1 in bookmark % strings. See Appendix D of the PDF Reference, Sixth Edition, for % the "PDFDocEncoding". \passthroughcharstrue % Pass through Latin-1 characters. % LuaTeX: Convert to Unicode % pdfTeX: Use Latin-1 as PDFDocEncoding \def\pdfoutlinetext{#1}% \else \ifx \declaredencoding \utfeight \ifx\luatexversion\thisisundefined % For pdfTeX with UTF-8. % TODO: the PDF format can use UTF-16 in bookmark strings, % but the code for this isn't done yet. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \else % For LuaTeX with UTF-8. % Pass through Unicode characters for title texts. \passthroughcharstrue \def\pdfoutlinetext{#1}% \fi \else % For non-Latin-1 or non-UTF-8 encodings. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \fi \fi % LuaTeX: Convert to UTF-16 % pdfTeX: Use Latin-1 as PDFDocEncoding \txiescapepdfutfsixteen\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput % % For XeTeX % \ifx\XeTeXrevision\thisisundefined \else % % XeTeX version check % \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1 % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307. % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941). % For avoiding PDF destination name replacement, we use this special % instead of xdvipdfmx's command line option `-C 0x0010'. \special{dvipdfmx:config C 0x0010} % XeTeX 0.99995+ comes with xdvipdfmx 20160307+. % It can handle Unicode destination names for PDF. \txiuseunicodedestnametrue \else % XeTeX < 0.99996 (TeX Live < 2016) cannot use the % `dvipdfmx:config' special. % So for avoiding PDF destination name replacement, % xdvipdfmx's command line option `-C 0x0010' is necessary. % % XeTeX < 0.99995 can not handle Unicode destination names for PDF % because xdvipdfmx 20150315 has a UTF-16 conversion issue. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). \txiuseunicodedestnamefalse \fi % % Color support % \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % \def\pdfsetcolor#1{\special{pdf:scolor [#1]}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % PDF outline support % % Emulate pdfTeX primitive \def\pdfdest name#1 xyz{% \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}% } % \def\setpdfdestname#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \makevalueexpandable \turnoffactive \iftxiuseunicodedestname % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \turnoffactive % Always use Unicode characters in title texts. \def\pdfoutlinetext{#1}% % For XeTeX, xdvipdfmx converts to UTF-16. % So we do not convert. \txiescapepdf\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % \def\dopdfoutline#1#2#3#4{% \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A << /S /GoTo /D (\pdfdestname) >> >> }% } % \def\pdfmakeoutlines{% \begingroup % % For XeTeX, counts of subentries are not necessary. % Therefore, we read toc only once. % % We use node names as destinations. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{1}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{2}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{3}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% \dopdfoutline{##1}{4}{##3}{##4}}% % \let\appentry\numchapentry% \let\appsecentry\numsecentry% \let\appsubsecentry\numsubsecentry% \let\appsubsubsecentry\numsubsubsecentry% \let\unnchapentry\numchapentry% \let\unnsecentry\numsecentry% \let\unnsubsecentry\numsubsecentry% \let\unnsubsubsecentry\numsubsubsecentry% % % For XeTeX, xdvipdfmx converts strings to UTF-16. % Therefore, the encoding and the language may not be considered. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] \special{pdf:docview << /PageMode /UseOutlines >> } % ``\special{pdf:tounicode ...}'' is not necessary % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it. % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315, % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \special{pdf:bann << /Border [0 0 0] /Subtype /Link /A << /S /URI /URI (#1) >> >>}% \endgroup} \def\endlink{\setcolor{\maincolor}\special{pdf:eann}} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}% \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} % % % @image support % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\doxeteximage#1#2#3{% \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\xeteximgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errmessage{Could not find image file #1 for XeTeX}% \else \gdef\xeteximgext{JPG}% \fi \else \gdef\xeteximgext{jpeg}% \fi \else \gdef\xeteximgext{jpg}% \fi \else \gdef\xeteximgext{png}% \fi \else \gdef\xeteximgext{PDF}% \fi \else \gdef\xeteximgext{pdf}% \fi \closein 1 \endgroup % \def\xetexpdfext{pdf}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \def\xetexpdfext{PDF}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \XeTeXpicfile "#1".\xeteximgext "" \fi \fi \ifdim \wd0 >0pt width \xeteximagewidth \fi \ifdim \wd2 >0pt height \xeteximageheight \fi \relax } \fi % \message{fonts,} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defsl\slshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\ttslfont=\defttsl \let\slfont=\defsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acronym in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defsl\slshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\slfont=\defsl \let\ttslfont=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acronym in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname #1font\endcsname % change the current font } \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. We don't % bother to reset \scriptfont and \scriptscriptfont; awaiting user need. % \def\resetmathfonts{% \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont \textfont\ttfam=\ttfont \textfont\sffam=\sffont } % % The font-changing commands (all called \...fonts) redefine the meanings % of \STYLEfont, instead of just \STYLE. We do this because \STYLE needs % to also set the current \fam for math mode. Our \STYLE (e.g., \rm) % commands hardwire \STYLEfont to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used % in, e.g., the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\assignfonts#1{% \expandafter\let\expandafter\rmfont\csname #1rm\endcsname \expandafter\let\expandafter\itfont\csname #1it\endcsname \expandafter\let\expandafter\slfont\csname #1sl\endcsname \expandafter\let\expandafter\bffont\csname #1bf\endcsname \expandafter\let\expandafter\ttfont\csname #1tt\endcsname \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname \expandafter\let\expandafter\sffont \csname #1sf\endcsname \expandafter\let\expandafter\ifont \csname #1i\endcsname \expandafter\let\expandafter\syfont \csname #1sy\endcsname \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname } \newif\ifrmisbold % Select smaller font size with the current style. Used to change font size % in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for % normal roman text, also use bold fonts for roman text in the smaller size. \def\switchtolllsize{% \expandafter\assignfonts\expandafter{\lllsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\switchtolsize{% \expandafter\assignfonts\expandafter{\lsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\definefontsetatsize#1#2#3#4#5{% \expandafter\def\csname #1fonts\endcsname{% \def\curfontsize{#1}% \def\lsize{#2}\def\lllsize{#3}% \csname rmisbold#5\endcsname \assignfonts{#1}% \resetmathfonts \setleading{#4}% }} \definefontsetatsize{text} {reduced}{smaller}{\textleading}{false} \definefontsetatsize{title} {chap} {subsec} {27pt} {true} \definefontsetatsize{chap} {sec} {text} {19pt} {true} \definefontsetatsize{sec} {subsec} {reduced}{17pt} {true} \definefontsetatsize{ssec} {text} {small} {15pt} {true} \definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false} \definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false} \definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false} \def\titlefont#1{{\titlefonts\rm #1}} \let\subsecfonts = \ssecfonts \let\subsubsecfonts = \ssecfonts % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ifx\next\.% \else\ifx\next\comma% \else\ptexslash \fi\fi\fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % (But see \codedashfinish below.) % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi % Given -foo (with a single dash), we do not want to allow a break % after the hyphen. \global\let\codedashprev=\codedash % \codex } % \gdef\codedash{\futurelet\next\codedashfinish} \gdef\codedashfinish{% \normaldash % always output the dash character itself. % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or % (b) the preceding character is a -. % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else \ifx\codedashprev\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a % space token; it would get swallowed otherwise. As in @code{- a}. \global\let\codedashprev= \next } } \def\normaldash{-} % \def\codex #1{\tclose{#1}\endgroup} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') aka @url takes an optional % (comma-separated) second argument specifying the text to display and % an optional third arg as text to display instead of (rather than in % addition to) the url itself. First (mandatory) arg is the url. % TeX-only option to allow changing PDF output to show only the second % arg (if given), and not the url (which is then just the link target). \newif\ifurefurlonlylink % The main macro is \urefbreak, which allows breaking at expected % places within the url. (There used to be another version, which % didn't support automatic breaking.) \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak % \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% look for second arg \ifdim\wd0 > 0pt \ifpdf % For pdfTeX and LuaTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \else \ifx\XeTeXrevision\thisisundefined \unhbox0\ (\urefcode{#1})% DVI, always show arg and url \else % For XeTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \fi \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode`\&=\active \catcode`\.=\active \catcode`\#=\active \catcode`\?=\active \catcode`\/=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretchamount{.13em} \def\urefpoststretchamount{.1em} \def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax} \def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax} % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \ifx\XeTeXrevision\thisisundefined \let\email=\uref \else \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \fi \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\switchtolsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \ifmmode\else % only go into math if not in math mode already \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot % have to provide another name for sup operator \let\mathopsup=\sup $\expandafter\finishmath\fi } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % for @sub and @sup, if in math mode, just do a normal sub/superscript. % If in text, use math to place as sub/superscript, but switch % into text mode, with smaller fonts. This is a different font than the % one used for real math sub/superscripts (8pt vs. 7pt), but let's not % fix it (significant additions to font machinery) until someone notices. % \def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi} \def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}% % \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi} \def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}% % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if % FMTNAME is tex, else ELSE-TEXT. \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} \long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi } % % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } % @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. % \long\def\inlineifset#1{\doinlineifset #1,\finish} \long\def\doinlineifset#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \else\ignorespaces#2\fi } % @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. % \long\def\inlineifclear#1{\doinlineifclear #1,\finish} \long\def\doinlineifclear#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. \def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}} \def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}} \let\{=\lbracechar \let\}=\rbracechar % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \switchtolllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. Define \ensuremath to switch into math mode % unless we are already there. Expansion tricks may not be needed here, % but safer, and can't hurt. \def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi} \def\ensuredmath#1{$\relax#1$} % \def\bullet{\ensuremath\ptexbullet} \def\geq{\ensuremath\ge} \def\leq{\ensuremath\le} \def\minus{\ensuremath-} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\ttfont \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the European Computer Modern fonts (cm-super in outline format) % for non-CM glyphs. That is ec* for regular text and tc* for the text % companion symbols (LaTeX TS1 encoding). Both are part of the ec % package and follow the same conventions. % \def\ecfont{\etcfont{e}} \def\tcfont{\etcfont{t}} % \def\etcfont#1{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = #1ctt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % @setcontentsaftertitlepage used to do an implicit @contents or % @shortcontents after @end titlepage, but it is now obsolete. \def\setcontentsaftertitlepage{% \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo command; move your @contents command if you want the contents after the title page.}}% \def\setshortcontentsaftertitlepage{% \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo command; move your @shortcontents and @contents commands if you want the contents after the title page.}}% \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. \par should % be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rm \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\rmfont \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rm \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make \makeheadline and \makefootline in Plain TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\txipageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks % These define \getoddheadingmarks, \getevenheadingmarks, % \getoddfootingmarks, and \getevenfootingmarks, each to one of % \gettopheadingmarks, \getbottomheadingmarks. % \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \parseargdef\headings{\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapterheading\hfil\folio}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapterheading\hfil\folio}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark so that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \ifinner\else \vadjust{\penalty 1200}% not good to break after first line of item. \fi % We can be in inner vertical mode in a footnote, although an % @itemize looks awful there. }% \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a <number>. % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. Assignments % have to be global since we are inside the implicit group of an % alignment entry. \everycr below resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % default for tables with no headings. \let\headitemcrhook=\relax % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% Reset from possible headitem. \global\colcount=0 % Reset the column counter. % % Check for saved footnotes, etc.: \checkinserts % % Perhaps a \nobreak, then reset: \headitemcrhook \global\let\headitemcrhook=\relax }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\-=\active \catcode`\_=\active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % % Unfortunately, this has the consequence that when _ is in the *value* % of an @set, it does not print properly in the roman fonts (get the cmr % dot accent at position 126 instead). No fix comes to mind, and it's % been this way since 2003 or earlier, so just ignore it. % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % Like \expandablevalue, but completely expandable (the \message in the % definition above operates at the execution level of TeX). Used when % writing to auxiliary files, due to the expansion that \write does. % If flag is undefined, pass through an unexpanded @value command: maybe it % will be set by the time it is read back in. % % NB flag names containing - or _ may not work here. \def\dummyvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax \noexpand\value{#1}% \else \csname SET#1\endcsname \fi } % Used for @value's in index entries to form the sort key: expand the @value % if possible, otherwise sort late. \def\indexnofontsvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax ZZZZZZZ \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get the special treatment we need for `@end ifset,' we call % \makecond and then redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named IX. % It automatically defines \IXindex such that % \IXindex ...rest of line... puts an entry in the index IX. % It also defines \IXindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is IX. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % The default indices: \newindex{cp}% concepts, \newcodeindex{fn}% functions, \newcodeindex{vr}% variables, \newcodeindex{tp}% types, \newcodeindex{ky}% keys \newcodeindex{pg}% and programs. % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% \requireopenindexfile{#3}% % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all index macros. % Argument #1 is generated by the calling \fooindex macro, % and it is the two-letter name of the index. \def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx} \def\doindexxxx #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx} \def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}} % Used when writing an index entry out to an index file to prevent % expansion of Texinfo commands that can appear in an index entry. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \definedummyletter\@% \definedummyletter\ % % % For texindex which always views { and } as separators. \def\{{\lbracechar{}}% \def\}{\rbracechar{}}% % % Do the redefinitions. \definedummies } % Used for the aux and toc files, where @ is the escape character. % \def\atdummies{% \definedummyletter\@% \definedummyletter\ % \definedummyletter\{% \definedummyletter\}% % % Do the redefinitions. \definedummies \otherbackslash } % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % % For control letters, we have \definedummyletter, which omits the % space. % \def\definedummyword #1{\def#1{\string#1\space}}% \def\definedummyletter#1{\def#1{\string#1}}% \let\definedummyaccent\definedummyletter % Called from \indexdummies and \atdummies, to effectively prevent % the expansion of commands. % \def\definedummies{% % \let\commondummyword\definedummyword \let\commondummyletter\definedummyletter \let\commondummyaccent\definedummyaccent \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\atchar \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\mathopsup \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\sub \definedummyword\sup \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist \let\value\dummyvalue % \normalturnoffactive } % \commondummiesnofonts: common to \definedummies and \indexnofonts. % Define \commondummyletter, \commondummyaccent and \commondummyword before % using. Used for accents, font commands, and various control letters. % \def\commondummiesnofonts{% % Control letters and accents. \commondummyletter\!% \commondummyaccent\"% \commondummyaccent\'% \commondummyletter\*% \commondummyaccent\,% \commondummyletter\.% \commondummyletter\/% \commondummyletter\:% \commondummyaccent\=% \commondummyletter\?% \commondummyaccent\^% \commondummyaccent\`% \commondummyaccent\~% \commondummyword\u \commondummyword\v \commondummyword\H \commondummyword\dotaccent \commondummyword\ogonek \commondummyword\ringaccent \commondummyword\tieaccent \commondummyword\ubaraccent \commondummyword\udotaccent \commondummyword\dotless % % Texinfo font commands. \commondummyword\b \commondummyword\i \commondummyword\r \commondummyword\sansserif \commondummyword\sc \commondummyword\slanted \commondummyword\t % % Commands that take arguments. \commondummyword\abbr \commondummyword\acronym \commondummyword\anchor \commondummyword\cite \commondummyword\code \commondummyword\command \commondummyword\dfn \commondummyword\dmn \commondummyword\email \commondummyword\emph \commondummyword\env \commondummyword\file \commondummyword\image \commondummyword\indicateurl \commondummyword\inforef \commondummyword\kbd \commondummyword\key \commondummyword\math \commondummyword\option \commondummyword\pxref \commondummyword\ref \commondummyword\samp \commondummyword\strong \commondummyword\tie \commondummyword\U \commondummyword\uref \commondummyword\url \commondummyword\var \commondummyword\verb \commondummyword\w \commondummyword\xref } % For testing: output @{ and @} in index sort strings as \{ and \}. \newif\ifusebracesinindexes \let\indexlbrace\relax \let\indexrbrace\relax {\catcode`\@=0 \catcode`\\=13 @gdef@backslashdisappear{@def\{}} } { \catcode`\<=13 \catcode`\-=13 \catcode`\`=13 \gdef\indexnonalnumdisappear{% \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else % @set txiindexlquoteignore makes us ignore left quotes in the sort term. % (Introduced for FSFS 2nd ed.) \let`=\empty \fi % \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else \backslashdisappear \fi % \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else \def-{}% \fi \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else \def<{}% \fi \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else \def\@{}% \fi } \gdef\indexnonalnumreappear{% \useindexbackslash \let-\normaldash \let<\normalless \def\@{@}% } } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\commondummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\commondummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\commondummyword\commondummyaccent \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % \uccode`\1=`\{ \uppercase{\def\{{1}}% \uccode`\1=`\} \uppercase{\def\}{1}}% \let\lbracechar\{% \let\rbracechar\}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{TH}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{th}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. \defglyph gives the control sequence a % definition that removes the {} that follows its use. \defglyph\atchar{@}% \defglyph\arrow{->}% \defglyph\bullet{bullet}% \defglyph\comma{,}% \defglyph\copyright{copyright}% \defglyph\dots{...}% \defglyph\enddots{...}% \defglyph\equiv{==}% \defglyph\error{error}% \defglyph\euro{euro}% \defglyph\expansion{==>}% \defglyph\geq{>=}% \defglyph\guillemetleft{<<}% \defglyph\guillemetright{>>}% \defglyph\guilsinglleft{<}% \defglyph\guilsinglright{>}% \defglyph\leq{<=}% \defglyph\lbracechar{\{}% \defglyph\minus{-}% \defglyph\point{.}% \defglyph\pounds{pounds}% \defglyph\print{-|}% \defglyph\quotedblbase{"}% \defglyph\quotedblleft{"}% \defglyph\quotedblright{"}% \defglyph\quoteleft{`}% \defglyph\quoteright{'}% \defglyph\quotesinglbase{,}% \defglyph\rbracechar{\}}% \defglyph\registeredsymbol{R}% \defglyph\result{=>}% \defglyph\textdegree{o}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist \let\value\indexnofontsvalue } \def\defglyph#1#2{\def#1##1{#2}} % see above \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. % TODO: Two-level index? Operation index? % Workhorse for all indexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% \requireopenindexfile{#1}% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Check if an index file has been opened, and if not, open it. \def\requireopenindexfile#1{% \ifnum\csname #1indfile\endcsname=0 \expandafter\newwrite \csname#1indfile\endcsname \edef\suffix{#1}% % A .fls suffix would conflict with the file extension for the output % of -recorder, so use .f1s instead. \ifx\suffix\indexisfl\def\suffix{f1}\fi % Open the file \immediate\openout\csname#1indfile\endcsname \jobname.\suffix % Using \immediate above here prevents an object entering into the current % box, which could confound checks such as those in \safewhatsit for % preceding skips. \typeout{Writing index file \jobname.\suffix}% \fi} \def\indexisfl{fl} % Output \ as {\indexbackslash}, because \ is an escape character in % the index files. \let\indexbackslash=\relax {\catcode`\@=0 \catcode`\\=\active @gdef@useindexbackslash{@def\{{@indexbackslash}}} } % Definition for writing index entry text. \def\sortas#1{\ignorespaces}% % Definition for writing index entry sort key. Should occur at the at % the beginning of the index entry, like % @cindex @sortas{september} \september % The \ignorespaces takes care of following space, but there's no way % to remove space before it. { \catcode`\-=13 \gdef\indexwritesortas{% \begingroup \indexnonalnumreappear \indexwritesortasxxx} \gdef\indexwritesortasxxx#1{% \xdef\indexsortkey{#1}\endgroup} } % Write the entry in \toks0 to the index file. % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \useindexbackslash % \indexbackslash isn't defined now so it will be output % as is; and it will print as backslash. % The braces around \indexbrace are recognized by texindex. % % Get the string to sort by, by processing the index entry with all % font commands turned off. {\indexnofonts \def\lbracechar{{\indexlbrace}}% \def\rbracechar{{\indexrbrace}}% \let\{=\lbracechar \let\}=\rbracechar \indexnonalnumdisappear \xdef\indexsortkey{}% \let\sortas=\indexwritesortas \edef\temp{\the\toks0}% \setbox\dummybox = \hbox{\temp}% Make sure to execute any \sortas \ifx\indexsortkey\empty \xdef\indexsortkey{\temp}% \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi \fi }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsortkey}{\noexpand\folio}{\the\toks0}}% }% \temp } \newbox\dummybox % used above % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 12 % See comment in \requireopenindexfile. \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi \openin 1 \jobname.\indexname s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \typeout{No file \jobname.\indexname s.}% \else \catcode`\\ = 0 % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \thisline \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\ttbackslash}% \let\indexlbrace\{ % Likewise, set these sequences for braces \let\indexrbrace\} % used in the sort key. \begindoublecolumns \let\dotheinsertentrybox\dotheinsertentryboxwithpenalty % % Read input from the index file line by line. \loopdo \ifeof1 \else \read 1 to \nextline \fi % \indexinputprocessing \thisline % \ifeof1\else \let\thisline\nextline \repeat %% \enddoublecolumns \fi \fi \closein 1 \endgroup} \def\loopdo#1\repeat{\def\body{#1}\loopdoxxx} \def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next} \def\indexinputprocessing{% \ifeof1 \let\firsttoken\relax \else \edef\act{\gdef\noexpand\firsttoken{\getfirsttoken\nextline}}% \act \fi } \def\getfirsttoken#1{\expandafter\getfirsttokenx#1\endfirsttoken} \long\def\getfirsttokenx#1#2\endfirsttoken{\noexpand#1} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. {\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13 \catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 \catcode`\$=3 \gdef\initialglyphs{% % Some changes for non-alphabetic characters. Using the glyphs from the % math fonts looks more consistent than the typewriter font used elsewhere % for these characters. \def\indexbackslash{\math{\backslash}}% \let\\=\indexbackslash % % Can't get bold backslash so don't use bold forward slash \catcode`\/=13 \def/{{\secrmnotbold \normalslash}}% \def-{{\normaldash\normaldash}}% en dash `--' \def^{{\chapbf \normalcaret}}% \def~{{\chapbf \normaltilde}}% \def\_{% \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }% \def|{$\vert$}% \def<{$\less$}% \def>{$\gtr$}% \def+{$\normalplus$}% }} \def\initial{% \bgroup \initialglyphs \initialx } \def\initialx#1{% % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. % The glue before the bonus allows a little bit of space at the % bottom of a column to reduce an increase in inter-line spacing. \nobreak \vskip 0pt plus 5\baselineskip \penalty -300 \vskip 0pt plus -5\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus 1\baselineskip \leftline{\secfonts \kern-0.05em \secbf #1}% % \secfonts is inside the argument of \leftline so that the change of % \baselineskip will not affect any glue inserted before the vbox that % \leftline creates. % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip \egroup % \initialglyphs } \newdimen\entryrightmargin \entryrightmargin=0pt % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % \def\entry{% \begingroup % % For pdfTeX and XeTeX. % The redefinition of \domark stops marks being added in \pdflink to % preserve coloured links across page boundaries. Otherwise the marks % would get in the way of \lastbox in \insertentrybox. \let\domark\relax % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % No extra space above this paragraph. \parskip = 0in % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% An undocumented command % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% % Save the text of the entry \global\setbox\boxA=\hbox\bgroup \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. % Not absorbing as a macro argument reduces the chance of problems % with catcodes occurring. } {\catcode`\@=11 \gdef\finishentry#1{% \egroup % end box A \dimen@ = \wd\boxA % Length of text of entry \global\setbox\boxA=\hbox\bgroup\unhbox\boxA % #1 is the page number. % % Get the width of the page numbers, and only use % leaders if they are present. \global\setbox\boxB = \hbox{#1}% \ifdim\wd\boxB = 0pt \null\nobreak\hfill\ % \else % \null\nobreak\indexdotfill % Have leaders before the page number. % \ifpdf \pdfgettoks#1.% \hskip\skip\thinshrinkable\the\toksA \else \ifx\XeTeXrevision\thisisundefined \hskip\skip\thinshrinkable #1% \else \pdfgettoks#1.% \hskip\skip\thinshrinkable\the\toksA \fi \fi \fi \egroup % end \boxA \ifdim\wd\boxB = 0pt \global\setbox\entrybox=\vbox{\unhbox\boxA}% \else \global\setbox\entrybox=\vbox\bgroup % We want the text of the entries to be aligned to the left, and the % page numbers to be aligned to the right. % \parindent = 0pt \advance\leftskip by 0pt plus 1fil \advance\leftskip by 0pt plus -1fill \rightskip = 0pt plus -1fil \advance\rightskip by 0pt plus 1fill % Cause last line, which could consist of page numbers on their own % if the list of page numbers is long, to be aligned to the right. \parfillskip=0pt plus -1fill % \advance\rightskip by \entryrightmargin % Determine how far we can stretch into the margin. % This allows, e.g., "Appendix H GNU Free Documentation License" to % fit on one line in @letterpaper format. \ifdim\entryrightmargin>2.1em \dimen@i=2.1em \else \dimen@i=0em \fi \advance \parfillskip by 0pt minus 1\dimen@i % \dimen@ii = \hsize \advance\dimen@ii by -1\leftskip \advance\dimen@ii by -1\entryrightmargin \advance\dimen@ii by 1\dimen@i \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line \ifdim\dimen@ > 0.8\dimen@ii % due to long index text % Try to split the text roughly evenly. \dimen@ will be the length of % the first line. \dimen@ = 0.7\dimen@ \dimen@ii = \hsize \ifnum\dimen@>\dimen@ii % If the entry is too long (for example, if it needs more than % two lines), use all the space in the first line. \dimen@ = \dimen@ii \fi \advance\leftskip by 0pt plus 1fill % ragged right \advance \dimen@ by 1\rightskip \parshape = 2 0pt \dimen@ 0em \dimen@ii % Ideally we'd add a finite glue at the end of the first line only, % instead of using \parshape with explicit line lengths, but TeX % doesn't seem to provide a way to do such a thing. % % Indent all lines but the first one. \advance\leftskip by 1em \advance\parindent by -1em \fi\fi \indent % start paragraph \unhbox\boxA % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % Word spacing - no stretch \spaceskip=\fontdimen2\font minus \fontdimen4\font % \linepenalty=1000 % Discourage line breaks. \hyphenpenalty=5000 % Discourage hyphenation. % \par % format the paragraph \egroup % The \vbox \fi \endgroup \dotheinsertentrybox }} \newskip\thinshrinkable \skip\thinshrinkable=.15em minus .15em \newbox\entrybox \def\insertentrybox{% \ourunvbox\entrybox } % default definition \let\dotheinsertentrybox\insertentrybox % Use \lastbox to take apart vbox box by box, and add each sub-box % to the current vertical list. \def\ourunvbox#1{% \bgroup % for local binding of \delayedbox % Remove the last box from box #1 \global\setbox#1=\vbox{% \unvbox#1% \unskip % remove any glue \unpenalty \global\setbox\interbox=\lastbox }% \setbox\delayedbox=\box\interbox \ifdim\ht#1=0pt\else \ourunvbox#1 % Repeat on what's left of the box \nobreak \fi \box\delayedbox \egroup } \newbox\delayedbox \newbox\interbox % Used from \printindex. \firsttoken should be the first token % after the \entry. If it's not another \entry, we are at the last % line of a group of index entries, so insert a penalty to discourage % widowed index entries. \def\dotheinsertentryboxwithpenalty{% \ifx\firsttoken\isentry \else \penalty 9000 \fi \insertentrybox } \def\isentry{\entry}% % Like plain.tex's \dotfill, except uses up at least 1 em. % The filll stretch here overpowers both the fil and fill stretch to push % the page number to the right. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else \ifx\XeTeXrevision\thisisundefined #2 \else \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \fi \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 % private names \newbox\partialpage \newdimen\doublecolumnhsize % Use inside an output routine to save \topmark and \firstmark \def\savemarks{% \global\savedtopmark=\expandafter{\topmark }% \global\savedfirstmark=\expandafter{\firstmark }% } \newtoks\savedtopmark \newtoks\savedfirstmark % Set \topmark and \firstmark for next time \output runs. % Can't be run from withinside \output (because any material % added while an output routine is active, including % penalties, is saved for after it finishes). The page so far % should be empty, otherwise what's on it will be thrown away. \def\restoremarks{% \mark{\the\savedtopmark}% \bgroup\output = {% \setbox\dummybox=\box\PAGE }abc\eject\egroup % "abc" because output routine doesn't fire for a completely empty page. \mark{\the\savedfirstmark}% } \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % If not much space left on page, start a new page. \ifdim\pagetotal>0.8\vsize\vfill\eject\fi % % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% \savemarks }% \eject % run that output routine to set \partialpage \restoremarks % % We recover the two marks that the last output routine saved in order % to propagate the information in marks added around a chapter heading, % which could be otherwise be lost by the time the final page is output. % % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. \advance\vsize by -\ht\partialpage \vsize = 2\vsize % % For the benefit of balancing columns \advance\baselineskip by 0pt plus 0.5pt } % The double-column output routine for all double-column pages except % the last, which is done by \balancecolumns. % \def\doublecolumnout{% % \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@ \global\advance\vsize by 2\ht\partialpage \onepageout\pagesofar \unvbox\PAGE \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\txipagewidth{\box0\hfil\box2}% } % Finished with with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \txipageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. \savemarks \balancecolumns }% \eject % call the \output just set \ifdim\pagetotal=0pt % Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. \global\output = {\onepageout{\pagecontents\PAGE}}% % \endgroup % started in \begindoublecolumns \restoremarks % Leave the double-column material on the current page, no automatic % page break. \box\balancedcolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize. \global\vsize = \txipageheight % \pagegoal = \txipageheight % \else % We had some left-over material. This might happen when \doublecolumnout % is called in \balancecolumns. Try again. \expandafter\enddoublecolumns \fi } \newbox\balancedcolumns \setbox\balancedcolumns=\vbox{shouldnt see this}% % % Only called for the last of the double column material. \doublecolumnout % does the others. \def\balancecolumns{% \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \ifdim\dimen@<5\baselineskip % Don't split a short final column in two. \setbox2=\vbox{}% \global\setbox\balancedcolumns=\vbox{\pagesofar}% \else \divide\dimen@ by 2 % target to split to \dimen@ii = \dimen@ \splittopskip = \topskip % Loop until left column is at least as high as the right column. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht1<\ht3 \global\advance\dimen@ by 1pt \repeat }% % Now the left column is in box 1, and the right column in box 3. % % Check whether the left column has come out higher than the page itself. % (Note that we have doubled \vsize for the double columns, so % the actual height of the page is 0.5\vsize). \ifdim2\ht1>\vsize % It appears that we have been called upon to balance too much material. % Output some of it with \doublecolumnout, leaving the rest on the page. \setbox\PAGE=\box0 \doublecolumnout \else % Compare the heights of the two columns. \ifdim4\ht1>5\ht3 % Column heights are too different, so don't make their bottoms % flush with each other. \setbox2=\vbox to \ht1 {\unvbox3\vfill}% \setbox0=\vbox to \ht1 {\unvbox1\vfill}% \else % Make column bottoms flush with each other. \setbox2=\vbox to\ht1{\unvbox3\unskip}% \setbox0=\vbox to\ht1{\unvbox1\unskip}% \fi \global\setbox\balancedcolumns=\vbox{\pagesofar}% \fi \fi % } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rm #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page % This outputs a mark at the end of the page that clears \thischapter % and \thissection, as is done in \startcontents. \let\pchapsepmacro\relax \chapmacro{}{Yomitfromtoc}{}% \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the<toks register> to achieve this: TeX expands \the<toks> only once, % simply yielding the contents of <toks register>. (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} % Start a new page \def\chappager{\par\vfill\supereject} % \chapoddpage - start on an odd page for a new chapter % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % \chapmacro - Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % Not used for @heading series. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yappendixkeyword{Yappendix} \def\Yomitfromtockeyword{Yomitfromtoc} % \def\chapmacro#1#2#3{% \expandafter\ifx\thisenv\titlepage\else \checkenv{}% chapters, etc., should not start inside an environment. \fi % FIXME: \chapmacro is currently called from inside \titlepage when % \setcontentsaftertitlepage to print the "Table of Contents" heading, but % this should probably be done by \sectionheading with an option to print % in chapter size. % % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rm \let\footnote=\errfootnoteheading % give better error message % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text of the title, % #2 is the section level (sec/subsec/subsubsec), % #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc), % #4 is the section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \def\sectionlevel{#2}% \def\temptype{#3}% % % It is ok for the @heading series commands to appear inside an % environment (it's been historically allowed, though the logic is % dubious), but not the others. \ifx\temptype\Yomitfromtockeyword\else \checkenv{}% non-@*heading should not be in an environment. \fi \let\footnote=\errfootnoteheading % % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \global\let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \else \ifx\XeTeXrevision\thisisundefined \else \global\pdfmakepagedesttrue \fi \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund <tege@matematik.su.se> \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \entryrightmargin=\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{% % Add stretch and a bonus for breaking the page before the part heading. % This reduces the chance of the page being broken immediately after the % part heading, before a following chapter heading. \vskip 0pt plus 5\baselineskip \penalty-300 \vskip 0pt plus -5\baselineskip \dochapentry{\numeralbox\labelspace#1}{}% } % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup % Move the page numbers slightly to the right \advance\entryrightmargin by -0.05em \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode `\`=\other \catcode `\'=\other % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % % Inverse of the list at the beginning of the file. \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\sp=\ptexsp \let\*=\ptexstar %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % we've made it outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip \ifnum\lastpenalty<10000 % Penalize breaking before the environment, because preceding text % often leads into it. \penalty100 \fi \vskip\envskipamount \fi \fi }} \def\afterenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \setbox\groupbox=\vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \addgroupbox \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. Don't stretch around special % characters in urls in this environment, since the stretch at the right % should be enough. \envdef\raggedright{% \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax \def\urefprestretchamount{0pt}% \def\urefpoststretchamount{0pt}% } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} % If we want to allow any <char> as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'<char>#1<char>'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) } % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \rmfont % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi % alias because \c means cedilla in @tex or @math \let\texinfoc=\c \newcount\savedcatcodeone \newcount\savedcatcodetwo % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M \def\xeatspaces{\eatspaces}% % % Temporarily undo catcode changes of \printindex. Set catcode of @ to % 0 so that @-commands in macro expansions aren't printed literally when % formatting an index file, where \ is used as the escape character. \savedcatcodeone=\catcode`\@ \savedcatcodetwo=\catcode`\\ \catcode`\@=0 \catcode`\\=\active % % Process the macro body under the current catcode regime. \scantokens{#1@texinfoc}% % \catcode`\@=\savedcatcodeone \catcode`\\=\savedcatcodetwo % % The \texinfoc is to remove the \newlinechar added by \scantokens, and % can be noticed by \parsearg. % We avoid surrounding the call to \scantokens with \bgroup and \egroup % to allow macros to open or close groups themselves. } % Used for copying and captions \def\scanexp#1{% \expandafter\scanmacro\expandafter{#1}% } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \commondummyword\macro1\commondummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\commondummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \passthroughcharstrue } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\@=\other \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\ =\other \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } % Used when scanning braced macro arguments. Note, however, that catcode % changes here are ineffectual if the macro invocation was nested inside % an argument to another Texinfo command. \def\macroargctxt{% \scanctxt \catcode`\ =\active \catcode`\^^M=\other \catcode`\\=\active } \def\macrolineargctxt{% used for whole-line arguments without braces \scanctxt \catcode`\{=\other \catcode`\}=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\commondummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\commondummyword \noexpand#1% \fi } % \getargs -- Parse the arguments to a @macro line. Set \macname to % the name of the macro, and \argl to the braced argument list. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % This made use of the feature that if the last token of a % <parameter list> is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. % Parse the optional {params} list to @macro or @rmacro. % Set \paramno to the number of arguments, % and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a % three-param macro.) Define \macarg.BLAH for each BLAH in the params % list to some hook where the argument is to be expanded. If there are % less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % If there are 10 or more arguments, a different technique is used: see % \parsemmanyargdef. % \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax % \hash is redefined to `#' later to get it into definitions \let\xeatspaces\relax \parsemargdefxxx#1,;,% \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % \parsemacbody, \parsermacbody % % Read recursive and nonrecursive macro bodies. (They're different since % rec and nonrec macros end differently.) % % We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro % body to be transformed. % Set \macrobody to the body of the macro, and call \defmacro. % {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% \xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% \xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% % Make @ a letter, so that we can make private-to-Texinfo macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax %%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime under which the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, no macro can have more than 256 arguments (else error). % % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments' values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa. % \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } % Define the named-macro outside of this group and then close this group. % \def\macargexpandinbody@{% \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Trailing missing arguments are set to empty. % \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } %%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%% % This defines a Texinfo @macro or @rmacro, called by \parsemacbody. % \macrobody has the body of the macro in it, with placeholders for % its parameters, looking like "\xeatspaces{\hash 1}". % \paramno is the number of parameters % \paramlist is a TeX parameter text, e.g. "#1,#2,#3," % There are four cases: macros of zero, one, up to nine, and many arguments. % \xdef is used so that macro definitions will survive the file % they're defined in: @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifnum\paramno=1 \def\xeatspaces##1{##1}% % This removes the pair of braces around the argument. We don't % use \eatspaces, because this can cause ends of lines to be lost % when the argument to \eatspaces is read, leading to line-based % commands like "@itemize" not being read correctly. \else \let\xeatspaces\relax % suppress expansion \fi \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\spaceisspace \noexpand\endlineisspace \noexpand\expandafter % skip any whitespace after the macro name. \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname{% \egroup \noexpand\scanmacro{\macrobody}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \egroup \noexpand\scanmacro{\macrobody}% }% \else % at most 9 \ifnum\paramno<10\relax % @MACNAME sets the context for reading the macro argument % @MACNAME@@ gets the argument, processes backslashes and appends a % comma. % @MACNAME@@@ removes braces surrounding the argument list. % @MACNAME@@@@ scans the macro body with arguments substituted. \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\expandafter % This \expandafter skip any spaces after the \noexpand\macroargctxt % macro before we change the catcode of space. \noexpand\expandafter \expandafter\noexpand\csname\the\macname @@\endcsname}% \expandafter\xdef\csname\the\macname @@\endcsname##1{% \noexpand\passargtomacro \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname @@@@\endcsname\paramlist{% \egroup\noexpand\scanmacro{\macrobody}}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi} \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % {\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape @catcode`@_=11 % private names @catcode`@!=11 % used as argument separator % \passargtomacro#1#2 - % Call #1 with a list of tokens #2, with any doubled backslashes in #2 % compressed to one. % % This implementation works by expansion, and not execution (so we cannot use % \def or similar). This reduces the risk of this failing in contexts where % complete expansion is done with no execution (for example, in writing out to % an auxiliary file for an index entry). % % State is kept in the input stream: the argument passed to % @look_ahead, @gobble_and_check_finish and @add_segment is % % THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input) % % where: % THE_MACRO - name of the macro we want to call % ARG_RESULT - argument list we build to pass to that macro % PENDING_BS - either a backslash or nothing % NEXT_TOKEN - used to look ahead in the input stream to see what's coming next @gdef@passargtomacro#1#2{% @add_segment #1!{}@relax#2\@_finish\% } @gdef@_finish{@_finishx} @global@let@_finishx@relax % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 used to look ahead % % If the next token is not a backslash, process the rest of the argument; % otherwise, remove the next token. @gdef@look_ahead#1!#2#3#4{% @ifx#4\% @expandafter@gobble_and_check_finish @else @expandafter@add_segment @fi#1!{#2}#4#4% } % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 should be a backslash, which is gobbled. % #5 looks ahead % % Double backslash found. Add a single backslash, and look ahead. @gdef@gobble_and_check_finish#1!#2#3#4#5{% @add_segment#1\!{}#5#5% } @gdef@is_fi{@fi} % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 is input stream until next backslash % % Input stream is either at the start of the argument, or just after a % backslash sequence, either a lone backslash, or a doubled backslash. % NEXT_TOKEN contains the first token in the input stream: if it is \finish, % finish; otherwise, append to ARG_RESULT the segment of the argument up until % the next backslash. PENDING_BACKSLASH contains a backslash to represent % a backslash just before the start of the input stream that has not been % added to ARG_RESULT. @gdef@add_segment#1!#2#3#4\{% @ifx#3@_finish @call_the_macro#1!% @else % append the pending backslash to the result, followed by the next segment @expandafter@is_fi@look_ahead#1#2#4!{\}@fi % this @fi is discarded by @look_ahead. % we can't get rid of it with \expandafter because we don't know how % long #4 is. } % #1 - THE_MACRO % #2 - ARG_RESULT % #3 discards the res of the conditional in @add_segment, and @is_fi ends the % conditional. @gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \braceorline MAC is used for a one-argument macro MAC. It checks % whether the next non-whitespace character is a {. It sets the context % for reading the argument (slightly different in the two cases). Then, % to read the argument, in the whole-line case, it then calls the regular % \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC. % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup \macroargctxt \expandafter\passargtomacro \else \macrolineargctxt\expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \requireauxfile \atdummies % preserve commands, but don't expand them % match definition in \xrdef, \refx, \xrefX. \def\value##1{##1}% \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref{\putwordsee{} \xrefXX} \def\xref{\putwordSee{} \xrefXX} \def\ref{\xrefXX} \def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX} \def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf % For pdfTeX and LuaTeX {\indexnofonts \makevalueexpandable \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfdestname}% \else goto name{\pdfmkpgn{\pdfdestname}}% \fi }% \setcolor{\linkcolor}% \else \ifx\XeTeXrevision\thisisundefined \else % For XeTeX {\indexnofonts \makevalueexpandable \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \ifnum\filenamelength>0 % With default settings, % XeTeX (xdvipdfmx) replaces link destination names with integers. % In this case, the replaced destination names of % remote PDFs are no longer known. In order to avoid a replacement, % you can use xdvipdfmx's command line option `-C 0x0010'. % If you use XeTeX 0.99996+ (TeX Live 2016+), % this command line option is no longer necessary % because we can use the `dvipdfmx:config' special. \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}% \else \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (\pdfdestname) >> >>}% \fi }% \setcolor{\linkcolor}% \fi \fi {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". \iffloat distinguishes them by % \Xthisreftitle being set to a magic string. \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% % Add a , if xref followed by a space \if\space\noexpand\tokenafterxref ,% \else\ifx\ \tokenafterxref ,% @TAB \else\ifx\*\tokenafterxref ,% @* \else\ifx\ \tokenafterxref ,% @SPACE \else\ifx\ \tokenafterxref ,% @NL \else\ifx\tie\tokenafterxref ,% @tie \fi\fi\fi\fi\fi\fi \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME. SUFFIX % is output afterwards if non-empty. \def\refx#1#2{% \requireauxfile {% \indexnofonts \otherbackslash \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Define a control % sequence for a cross-reference target (we prepend XR to the control sequence % name to avoid collisions). The value is the page number. If this is a float % type, we have more work to do. % \def\xrdef#1#2{% {% Expand the node or anchor name to remove control sequences. % \turnoffactive stops 8-bit characters being changed to commands % like @'e. \refx does the same to retrieve the value in the definition. \indexnofonts \turnoffactive \def\value##1{##1}% \xdef\safexrefname{#1}% }% % \bgroup \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% \egroup % We put the \gdef inside a group to avoid the definitions building up on % TeX's save stack, which can cause it to run out of space for aux files with % thousands of lines. \gdef doesn't use the save stack, but \csname does % when it defines an unknown control sequence as \relax. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate at the beginning of the file. % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % Used when writing to the aux file, or when using data from it. \def\requireauxfile{% \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi \global\let\requireauxfile=\relax % Only do this once. } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % % Nested footnotes are not supported in TeX, that would take a lot % more work. (\startsavinginserts does not suffice.) \let\footnote=\errfootnotenest % % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\txipagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 \def\errfootnotenest{% \errhelp=\EMsimple \errmessage{Nested footnotes not supported in texinfo.tex, even though they work in makeinfo; sorry} } \def\errfootnoteheading{% \errhelp=\EMsimple \errmessage{Footnotes in chapters, sections, etc., are not supported} } % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf % For pdfTeX and LuaTeX <= 0.80 \dopdfimage{#1}{#2}{#3}% \else \ifx\XeTeXrevision\thisisundefined % For epsf.tex % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \else % For XeTeX \doxeteximage{#1}{#2}{#3}% \fi \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \requireauxfile \atdummies % \ifx\thisshortcaption\empty \def\gtemp{\thiscaption}% \else \def\gtemp{\thisshortcaption}% \fi \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \let_ = \normalunderscore % normal _ character for filename test \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore #1_\finish \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX } % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % XeTeX and LuaTeX can handle Unicode natively. % Their default I/O uses UTF-8 sequences instead of a byte-wise operation. % Other TeX engines' I/O (pdfTeX, etc.) is byte-wise. % \newif\iftxinativeunicodecapable \newif\iftxiusebytewiseio \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \txinativeunicodecapablefalse \txiusebytewiseiotrue \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi % Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex % for non-UTF-8 (byte-wise) encodings. % \def\setbytewiseio{% \ifx\XeTeXrevision\thisisundefined \else \XeTeXdefaultencoding "bytes" % For subsequent files to be read \XeTeXinputencoding "bytes" % For document root file % Unfortunately, there seems to be no corresponding XeTeX command for % output encoding. This is a problem for auxiliary index and TOC files. % The only solution would be perhaps to write out @U{...} sequences in % place of non-ASCII characters. \fi \ifx\luatexversion\thisisundefined \else \directlua{ local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub local function convert_char (char) return utf8_char(byte(char)) end local function convert_line (line) return gsub(line, ".", convert_char) end callback.register("process_input_buffer", convert_line) local function convert_line_out (line) local line_out = "" for c in string.utfvalues(line) do line_out = line_out .. string.char(c) end return line_out end callback.register("process_output_buffer", convert_line_out) } \fi \txiusebytewiseiotrue } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz} \def\documentencodingzzz#1{% % % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \iftxinativeunicodecapable % For native Unicode handling (XeTeX and LuaTeX) \nativeunicodechardefs \else % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX) \setnonasciicharscatcode\active % since we already invoked \utfeightchardefs at the top level % (below), do not re-invoke it, otherwise our check for duplicated % definitions gets triggered. Making non-ascii chars active is % sufficient. \fi % \else \message{Ignoring unknown document encoding: #1.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii % \ifx\XeTeXrevision\thisisundefined \else \ifx \declaredencoding \utfeight \else \ifx \declaredencoding \ascii \else \message{Warning: XeTeX with non-UTF-8 encodings cannot handle % non-ASCII characters in auxiliary files.}% \fi \fi \fi } % emacs-page % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing, sorry: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % \def\gdefchar#1#2{% \gdef#1{% \ifpassthroughchars \string#1% \else #2% \fi }} % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\exclamdown} \gdefchar^^a2{{\tcfont \char162}} % cent \gdefchar^^a3{\pounds{}} \gdefchar^^a4{{\tcfont \char164}} % currency \gdefchar^^a5{{\tcfont \char165}} % yen \gdefchar^^a6{{\tcfont \char166}} % broken bar \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\copyright{}} \gdefchar^^aa{\ordf} \gdefchar^^ab{\guillemetleft{}} \gdefchar^^ac{\ensuremath\lnot} \gdefchar^^ad{\-} \gdefchar^^ae{\registeredsymbol{}} \gdefchar^^af{\={}} % \gdefchar^^b0{\textdegree} \gdefchar^^b1{$\pm$} \gdefchar^^b2{$^2$} \gdefchar^^b3{$^3$} \gdefchar^^b4{\'{}} \gdefchar^^b5{$\mu$} \gdefchar^^b6{\P} \gdefchar^^b7{\ensuremath\cdot} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{$^1$} \gdefchar^^ba{\ordm} \gdefchar^^bb{\guillemetright{}} \gdefchar^^bc{$1\over4$} \gdefchar^^bd{$1\over2$} \gdefchar^^be{$3\over4$} \gdefchar^^bf{\questiondown} % \gdefchar^^c0{\`A} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\~A} \gdefchar^^c4{\"A} \gdefchar^^c5{\ringaccent A} \gdefchar^^c6{\AE} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\`E} \gdefchar^^c9{\'E} \gdefchar^^ca{\^E} \gdefchar^^cb{\"E} \gdefchar^^cc{\`I} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\"I} % \gdefchar^^d0{\DH} \gdefchar^^d1{\~N} \gdefchar^^d2{\`O} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\~O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\O} \gdefchar^^d9{\`U} \gdefchar^^da{\'U} \gdefchar^^db{\^U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\TH} \gdefchar^^df{\ss} % \gdefchar^^e0{\`a} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\~a} \gdefchar^^e4{\"a} \gdefchar^^e5{\ringaccent a} \gdefchar^^e6{\ae} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\`e} \gdefchar^^e9{\'e} \gdefchar^^ea{\^e} \gdefchar^^eb{\"e} \gdefchar^^ec{\`{\dotless i}} \gdefchar^^ed{\'{\dotless i}} \gdefchar^^ee{\^{\dotless i}} \gdefchar^^ef{\"{\dotless i}} % \gdefchar^^f0{\dh} \gdefchar^^f1{\~n} \gdefchar^^f2{\`o} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\~o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\o} \gdefchar^^f9{\`u} \gdefchar^^fa{\'u} \gdefchar^^fb{\^u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\th} \gdefchar^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdefchar^^a4{\euro{}} \gdefchar^^a6{\v S} \gdefchar^^a8{\v s} \gdefchar^^b4{\v Z} \gdefchar^^b8{\v z} \gdefchar^^bc{\OE} \gdefchar^^bd{\oe} \gdefchar^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\ogonek{A}} \gdefchar^^a2{\u{}} \gdefchar^^a3{\L} \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}} \gdefchar^^a5{\v L} \gdefchar^^a6{\'S} \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\v S} \gdefchar^^aa{\cedilla S} \gdefchar^^ab{\v T} \gdefchar^^ac{\'Z} \gdefchar^^ad{\-} \gdefchar^^ae{\v Z} \gdefchar^^af{\dotaccent Z} % \gdefchar^^b0{\textdegree{}} \gdefchar^^b1{\ogonek{a}} \gdefchar^^b2{\ogonek{ }} \gdefchar^^b3{\l} \gdefchar^^b4{\'{}} \gdefchar^^b5{\v l} \gdefchar^^b6{\'s} \gdefchar^^b7{\v{}} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{\v s} \gdefchar^^ba{\cedilla s} \gdefchar^^bb{\v t} \gdefchar^^bc{\'z} \gdefchar^^bd{\H{}} \gdefchar^^be{\v z} \gdefchar^^bf{\dotaccent z} % \gdefchar^^c0{\'R} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\u A} \gdefchar^^c4{\"A} \gdefchar^^c5{\'L} \gdefchar^^c6{\'C} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\v C} \gdefchar^^c9{\'E} \gdefchar^^ca{\ogonek{E}} \gdefchar^^cb{\"E} \gdefchar^^cc{\v E} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\v D} % \gdefchar^^d0{\DH} \gdefchar^^d1{\'N} \gdefchar^^d2{\v N} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\H O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\v R} \gdefchar^^d9{\ringaccent U} \gdefchar^^da{\'U} \gdefchar^^db{\H U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\cedilla T} \gdefchar^^df{\ss} % \gdefchar^^e0{\'r} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\u a} \gdefchar^^e4{\"a} \gdefchar^^e5{\'l} \gdefchar^^e6{\'c} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\v c} \gdefchar^^e9{\'e} \gdefchar^^ea{\ogonek{e}} \gdefchar^^eb{\"e} \gdefchar^^ec{\v e} \gdefchar^^ed{\'{\dotless{i}}} \gdefchar^^ee{\^{\dotless{i}}} \gdefchar^^ef{\v d} % \gdefchar^^f0{\dh} \gdefchar^^f1{\'n} \gdefchar^^f2{\v n} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\H o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\v r} \gdefchar^^f9{\ringaccent u} \gdefchar^^fa{\'u} \gdefchar^^fb{\H u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\cedilla t} \gdefchar^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } % Give non-ASCII bytes the active definitions for processing UTF-8 sequences \begingroup \catcode`\~13 \catcode`\$12 \catcode`\"12 % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp % substituting ~ and $ with a character token of that value. \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uccode`\$\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} % For bytes other than the first in a UTF-8 sequence. Not expected to % be expanded except when writing to auxiliary files. \countUTFx = "80 \countUTFy = "C2 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $\fi}}% \UTFviiiLoop \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiFourOctets\expandafter$\fi }}% \UTFviiiLoop \endgroup \def\globallet{\global\let} % save some \expandafter's below % @U{xxxx} to produce U+xxxx, if we support it. \def\U#1{% \expandafter\ifx\csname uni:#1\endcsname \relax \iftxinativeunicodecapable % All Unicode characters can be used if native Unicode handling is % active. However, if the font does not have the glyph, % letters are missing. \begingroup \uccode`\.="#1\relax \uppercase{.} \endgroup \else \errhelp = \EMsimple \errmessage{Unicode character U+#1 not supported, sorry}% \fi \else \csname uni:#1\endcsname \fi } % These macros are used here to construct the name of a control % sequence to be defined. \def\UTFviiiTwoOctetsName#1#2{% \csname u8:#1\string #2\endcsname}% \def\UTFviiiThreeOctetsName#1#2#3{% \csname u8:#1\string #2\string #3\endcsname}% \def\UTFviiiFourOctetsName#1#2#3#4{% \csname u8:#1\string #2\string #3\string #4\endcsname}% % For UTF-8 byte sequences (TeX, e-TeX and pdfTeX), % provide a definition macro to replace a Unicode character; % this gets used by the @U command % \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacterUTFviii#1#2{% \countUTFz = "#1\relax \begingroup \parseXMLCharref % Give \u8:... its definition. The sequence of seven \expandafter's % expands after the \gdef three times, e.g. % % 1. \UTFviiTwoOctetsName B1 B2 % 2. \csname u8:B1 \string B2 \endcsname % 3. \u8: B1 B2 (a single control sequence token) % \expandafter\expandafter \expandafter\expandafter \expandafter\expandafter \expandafter\gdef \UTFviiiTmp{#2}% % \expandafter\ifx\csname uni:#1\endcsname \relax \else \message{Internal error, already defined: #1}% \fi % % define an additional control sequence for this code point. \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp \endgroup} % % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp % to the corresponding UTF-8 sequence. \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctetsName.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}% \fi\fi\fi } % Extract a byte from the end of the UTF-8 representation of \countUTFx. % It must be a non-initial byte in the sequence. % Change \uccode of #1 for it to be used in \parseUTFviiiB as one % of the bytes. \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz % Save to be the future value of \countUTFz. \multiply\countUTFz by 64 % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract % in order to get the last five bits. \advance\countUTFx by -\countUTFz % Convert this to the byte in the UTF-8 sequence. \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} % Used to put a UTF-8 byte sequence into \UTFviiiTmp % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8 % sequence. % #2 is one of the \UTFviii*OctetsName macros. % #3 is always a full stop (.) % #4 is a template for the other bytes in the sequence. The values for these % bytes is substituted in here with \uppercase using the \uccode's. \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro that sets a catcode to `other' non-globally % \def\DeclareUnicodeCharacterNativeOther#1#2{% \catcode"#1=\other } % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M % U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block) % U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B % % Many of our renditions are less than wonderful, and all the missing % characters are available somewhere. Loading the necessary fonts % awaits user request. We can't truly support Unicode without % reimplementing everything that's been done in LaTeX for many years, % plus probably using luatex or xetex, and who knows what else. % We won't be doing that here in this simple file. But we can try to at % least make most of the characters not bomb out. % \def\unicodechardefs{% \DeclareUnicodeCharacter{00A0}{\tie}% \DeclareUnicodeCharacter{00A1}{\exclamdown}% \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent \DeclareUnicodeCharacter{00A3}{\pounds{}}% \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar \DeclareUnicodeCharacter{00A7}{\S}% \DeclareUnicodeCharacter{00A8}{\"{ }}% \DeclareUnicodeCharacter{00A9}{\copyright{}}% \DeclareUnicodeCharacter{00AA}{\ordf}% \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}% \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}% \DeclareUnicodeCharacter{00AD}{\-}% \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}% \DeclareUnicodeCharacter{00AF}{\={ }}% % \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}% \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}% \DeclareUnicodeCharacter{00B2}{$^2$}% \DeclareUnicodeCharacter{00B3}{$^3$}% \DeclareUnicodeCharacter{00B4}{\'{ }}% \DeclareUnicodeCharacter{00B5}{$\mu$}% \DeclareUnicodeCharacter{00B6}{\P}% \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}% \DeclareUnicodeCharacter{00B8}{\cedilla{ }}% \DeclareUnicodeCharacter{00B9}{$^1$}% \DeclareUnicodeCharacter{00BA}{\ordm}% \DeclareUnicodeCharacter{00BB}{\guillemetright{}}% \DeclareUnicodeCharacter{00BC}{$1\over4$}% \DeclareUnicodeCharacter{00BD}{$1\over2$}% \DeclareUnicodeCharacter{00BE}{$3\over4$}% \DeclareUnicodeCharacter{00BF}{\questiondown}% % \DeclareUnicodeCharacter{00C0}{\`A}% \DeclareUnicodeCharacter{00C1}{\'A}% \DeclareUnicodeCharacter{00C2}{\^A}% \DeclareUnicodeCharacter{00C3}{\~A}% \DeclareUnicodeCharacter{00C4}{\"A}% \DeclareUnicodeCharacter{00C5}{\AA}% \DeclareUnicodeCharacter{00C6}{\AE}% \DeclareUnicodeCharacter{00C7}{\cedilla{C}}% \DeclareUnicodeCharacter{00C8}{\`E}% \DeclareUnicodeCharacter{00C9}{\'E}% \DeclareUnicodeCharacter{00CA}{\^E}% \DeclareUnicodeCharacter{00CB}{\"E}% \DeclareUnicodeCharacter{00CC}{\`I}% \DeclareUnicodeCharacter{00CD}{\'I}% \DeclareUnicodeCharacter{00CE}{\^I}% \DeclareUnicodeCharacter{00CF}{\"I}% % \DeclareUnicodeCharacter{00D0}{\DH}% \DeclareUnicodeCharacter{00D1}{\~N}% \DeclareUnicodeCharacter{00D2}{\`O}% \DeclareUnicodeCharacter{00D3}{\'O}% \DeclareUnicodeCharacter{00D4}{\^O}% \DeclareUnicodeCharacter{00D5}{\~O}% \DeclareUnicodeCharacter{00D6}{\"O}% \DeclareUnicodeCharacter{00D7}{\ensuremath\times}% \DeclareUnicodeCharacter{00D8}{\O}% \DeclareUnicodeCharacter{00D9}{\`U}% \DeclareUnicodeCharacter{00DA}{\'U}% \DeclareUnicodeCharacter{00DB}{\^U}% \DeclareUnicodeCharacter{00DC}{\"U}% \DeclareUnicodeCharacter{00DD}{\'Y}% \DeclareUnicodeCharacter{00DE}{\TH}% \DeclareUnicodeCharacter{00DF}{\ss}% % \DeclareUnicodeCharacter{00E0}{\`a}% \DeclareUnicodeCharacter{00E1}{\'a}% \DeclareUnicodeCharacter{00E2}{\^a}% \DeclareUnicodeCharacter{00E3}{\~a}% \DeclareUnicodeCharacter{00E4}{\"a}% \DeclareUnicodeCharacter{00E5}{\aa}% \DeclareUnicodeCharacter{00E6}{\ae}% \DeclareUnicodeCharacter{00E7}{\cedilla{c}}% \DeclareUnicodeCharacter{00E8}{\`e}% \DeclareUnicodeCharacter{00E9}{\'e}% \DeclareUnicodeCharacter{00EA}{\^e}% \DeclareUnicodeCharacter{00EB}{\"e}% \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}% \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}% \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}% \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}% % \DeclareUnicodeCharacter{00F0}{\dh}% \DeclareUnicodeCharacter{00F1}{\~n}% \DeclareUnicodeCharacter{00F2}{\`o}% \DeclareUnicodeCharacter{00F3}{\'o}% \DeclareUnicodeCharacter{00F4}{\^o}% \DeclareUnicodeCharacter{00F5}{\~o}% \DeclareUnicodeCharacter{00F6}{\"o}% \DeclareUnicodeCharacter{00F7}{\ensuremath\div}% \DeclareUnicodeCharacter{00F8}{\o}% \DeclareUnicodeCharacter{00F9}{\`u}% \DeclareUnicodeCharacter{00FA}{\'u}% \DeclareUnicodeCharacter{00FB}{\^u}% \DeclareUnicodeCharacter{00FC}{\"u}% \DeclareUnicodeCharacter{00FD}{\'y}% \DeclareUnicodeCharacter{00FE}{\th}% \DeclareUnicodeCharacter{00FF}{\"y}% % \DeclareUnicodeCharacter{0100}{\=A}% \DeclareUnicodeCharacter{0101}{\=a}% \DeclareUnicodeCharacter{0102}{\u{A}}% \DeclareUnicodeCharacter{0103}{\u{a}}% \DeclareUnicodeCharacter{0104}{\ogonek{A}}% \DeclareUnicodeCharacter{0105}{\ogonek{a}}% \DeclareUnicodeCharacter{0106}{\'C}% \DeclareUnicodeCharacter{0107}{\'c}% \DeclareUnicodeCharacter{0108}{\^C}% \DeclareUnicodeCharacter{0109}{\^c}% \DeclareUnicodeCharacter{010A}{\dotaccent{C}}% \DeclareUnicodeCharacter{010B}{\dotaccent{c}}% \DeclareUnicodeCharacter{010C}{\v{C}}% \DeclareUnicodeCharacter{010D}{\v{c}}% \DeclareUnicodeCharacter{010E}{\v{D}}% \DeclareUnicodeCharacter{010F}{d'}% % \DeclareUnicodeCharacter{0110}{\DH}% \DeclareUnicodeCharacter{0111}{\dh}% \DeclareUnicodeCharacter{0112}{\=E}% \DeclareUnicodeCharacter{0113}{\=e}% \DeclareUnicodeCharacter{0114}{\u{E}}% \DeclareUnicodeCharacter{0115}{\u{e}}% \DeclareUnicodeCharacter{0116}{\dotaccent{E}}% \DeclareUnicodeCharacter{0117}{\dotaccent{e}}% \DeclareUnicodeCharacter{0118}{\ogonek{E}}% \DeclareUnicodeCharacter{0119}{\ogonek{e}}% \DeclareUnicodeCharacter{011A}{\v{E}}% \DeclareUnicodeCharacter{011B}{\v{e}}% \DeclareUnicodeCharacter{011C}{\^G}% \DeclareUnicodeCharacter{011D}{\^g}% \DeclareUnicodeCharacter{011E}{\u{G}}% \DeclareUnicodeCharacter{011F}{\u{g}}% % \DeclareUnicodeCharacter{0120}{\dotaccent{G}}% \DeclareUnicodeCharacter{0121}{\dotaccent{g}}% \DeclareUnicodeCharacter{0122}{\cedilla{G}}% \DeclareUnicodeCharacter{0123}{\cedilla{g}}% \DeclareUnicodeCharacter{0124}{\^H}% \DeclareUnicodeCharacter{0125}{\^h}% \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0128}{\~I}% \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}% \DeclareUnicodeCharacter{012A}{\=I}% \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}% \DeclareUnicodeCharacter{012C}{\u{I}}% \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}% \DeclareUnicodeCharacter{012E}{\ogonek{I}}% \DeclareUnicodeCharacter{012F}{\ogonek{i}}% % \DeclareUnicodeCharacter{0130}{\dotaccent{I}}% \DeclareUnicodeCharacter{0131}{\dotless{i}}% \DeclareUnicodeCharacter{0132}{IJ}% \DeclareUnicodeCharacter{0133}{ij}% \DeclareUnicodeCharacter{0134}{\^J}% \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}% \DeclareUnicodeCharacter{0136}{\cedilla{K}}% \DeclareUnicodeCharacter{0137}{\cedilla{k}}% \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}% \DeclareUnicodeCharacter{0139}{\'L}% \DeclareUnicodeCharacter{013A}{\'l}% \DeclareUnicodeCharacter{013B}{\cedilla{L}}% \DeclareUnicodeCharacter{013C}{\cedilla{l}}% \DeclareUnicodeCharacter{013D}{L'}% should kern \DeclareUnicodeCharacter{013E}{l'}% should kern \DeclareUnicodeCharacter{013F}{L\U{00B7}}% % \DeclareUnicodeCharacter{0140}{l\U{00B7}}% \DeclareUnicodeCharacter{0141}{\L}% \DeclareUnicodeCharacter{0142}{\l}% \DeclareUnicodeCharacter{0143}{\'N}% \DeclareUnicodeCharacter{0144}{\'n}% \DeclareUnicodeCharacter{0145}{\cedilla{N}}% \DeclareUnicodeCharacter{0146}{\cedilla{n}}% \DeclareUnicodeCharacter{0147}{\v{N}}% \DeclareUnicodeCharacter{0148}{\v{n}}% \DeclareUnicodeCharacter{0149}{'n}% \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}% \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}% \DeclareUnicodeCharacter{014C}{\=O}% \DeclareUnicodeCharacter{014D}{\=o}% \DeclareUnicodeCharacter{014E}{\u{O}}% \DeclareUnicodeCharacter{014F}{\u{o}}% % \DeclareUnicodeCharacter{0150}{\H{O}}% \DeclareUnicodeCharacter{0151}{\H{o}}% \DeclareUnicodeCharacter{0152}{\OE}% \DeclareUnicodeCharacter{0153}{\oe}% \DeclareUnicodeCharacter{0154}{\'R}% \DeclareUnicodeCharacter{0155}{\'r}% \DeclareUnicodeCharacter{0156}{\cedilla{R}}% \DeclareUnicodeCharacter{0157}{\cedilla{r}}% \DeclareUnicodeCharacter{0158}{\v{R}}% \DeclareUnicodeCharacter{0159}{\v{r}}% \DeclareUnicodeCharacter{015A}{\'S}% \DeclareUnicodeCharacter{015B}{\'s}% \DeclareUnicodeCharacter{015C}{\^S}% \DeclareUnicodeCharacter{015D}{\^s}% \DeclareUnicodeCharacter{015E}{\cedilla{S}}% \DeclareUnicodeCharacter{015F}{\cedilla{s}}% % \DeclareUnicodeCharacter{0160}{\v{S}}% \DeclareUnicodeCharacter{0161}{\v{s}}% \DeclareUnicodeCharacter{0162}{\cedilla{T}}% \DeclareUnicodeCharacter{0163}{\cedilla{t}}% \DeclareUnicodeCharacter{0164}{\v{T}}% \DeclareUnicodeCharacter{0165}{\v{t}}% \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0168}{\~U}% \DeclareUnicodeCharacter{0169}{\~u}% \DeclareUnicodeCharacter{016A}{\=U}% \DeclareUnicodeCharacter{016B}{\=u}% \DeclareUnicodeCharacter{016C}{\u{U}}% \DeclareUnicodeCharacter{016D}{\u{u}}% \DeclareUnicodeCharacter{016E}{\ringaccent{U}}% \DeclareUnicodeCharacter{016F}{\ringaccent{u}}% % \DeclareUnicodeCharacter{0170}{\H{U}}% \DeclareUnicodeCharacter{0171}{\H{u}}% \DeclareUnicodeCharacter{0172}{\ogonek{U}}% \DeclareUnicodeCharacter{0173}{\ogonek{u}}% \DeclareUnicodeCharacter{0174}{\^W}% \DeclareUnicodeCharacter{0175}{\^w}% \DeclareUnicodeCharacter{0176}{\^Y}% \DeclareUnicodeCharacter{0177}{\^y}% \DeclareUnicodeCharacter{0178}{\"Y}% \DeclareUnicodeCharacter{0179}{\'Z}% \DeclareUnicodeCharacter{017A}{\'z}% \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}% \DeclareUnicodeCharacter{017C}{\dotaccent{z}}% \DeclareUnicodeCharacter{017D}{\v{Z}}% \DeclareUnicodeCharacter{017E}{\v{z}}% \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}% % \DeclareUnicodeCharacter{01C4}{D\v{Z}}% \DeclareUnicodeCharacter{01C5}{D\v{z}}% \DeclareUnicodeCharacter{01C6}{d\v{z}}% \DeclareUnicodeCharacter{01C7}{LJ}% \DeclareUnicodeCharacter{01C8}{Lj}% \DeclareUnicodeCharacter{01C9}{lj}% \DeclareUnicodeCharacter{01CA}{NJ}% \DeclareUnicodeCharacter{01CB}{Nj}% \DeclareUnicodeCharacter{01CC}{nj}% \DeclareUnicodeCharacter{01CD}{\v{A}}% \DeclareUnicodeCharacter{01CE}{\v{a}}% \DeclareUnicodeCharacter{01CF}{\v{I}}% % \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}% \DeclareUnicodeCharacter{01D1}{\v{O}}% \DeclareUnicodeCharacter{01D2}{\v{o}}% \DeclareUnicodeCharacter{01D3}{\v{U}}% \DeclareUnicodeCharacter{01D4}{\v{u}}% % \DeclareUnicodeCharacter{01E2}{\={\AE}}% \DeclareUnicodeCharacter{01E3}{\={\ae}}% \DeclareUnicodeCharacter{01E6}{\v{G}}% \DeclareUnicodeCharacter{01E7}{\v{g}}% \DeclareUnicodeCharacter{01E8}{\v{K}}% \DeclareUnicodeCharacter{01E9}{\v{k}}% % \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}% \DeclareUnicodeCharacter{01F1}{DZ}% \DeclareUnicodeCharacter{01F2}{Dz}% \DeclareUnicodeCharacter{01F3}{dz}% \DeclareUnicodeCharacter{01F4}{\'G}% \DeclareUnicodeCharacter{01F5}{\'g}% \DeclareUnicodeCharacter{01F8}{\`N}% \DeclareUnicodeCharacter{01F9}{\`n}% \DeclareUnicodeCharacter{01FC}{\'{\AE}}% \DeclareUnicodeCharacter{01FD}{\'{\ae}}% \DeclareUnicodeCharacter{01FE}{\'{\O}}% \DeclareUnicodeCharacter{01FF}{\'{\o}}% % \DeclareUnicodeCharacter{021E}{\v{H}}% \DeclareUnicodeCharacter{021F}{\v{h}}% % \DeclareUnicodeCharacter{0226}{\dotaccent{A}}% \DeclareUnicodeCharacter{0227}{\dotaccent{a}}% \DeclareUnicodeCharacter{0228}{\cedilla{E}}% \DeclareUnicodeCharacter{0229}{\cedilla{e}}% \DeclareUnicodeCharacter{022E}{\dotaccent{O}}% \DeclareUnicodeCharacter{022F}{\dotaccent{o}}% % \DeclareUnicodeCharacter{0232}{\=Y}% \DeclareUnicodeCharacter{0233}{\=y}% \DeclareUnicodeCharacter{0237}{\dotless{j}}% % \DeclareUnicodeCharacter{02DB}{\ogonek{ }}% % % Greek letters upper case \DeclareUnicodeCharacter{0391}{{\it A}}% \DeclareUnicodeCharacter{0392}{{\it B}}% \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}% \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}% \DeclareUnicodeCharacter{0395}{{\it E}}% \DeclareUnicodeCharacter{0396}{{\it Z}}% \DeclareUnicodeCharacter{0397}{{\it H}}% \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}% \DeclareUnicodeCharacter{0399}{{\it I}}% \DeclareUnicodeCharacter{039A}{{\it K}}% \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}% \DeclareUnicodeCharacter{039C}{{\it M}}% \DeclareUnicodeCharacter{039D}{{\it N}}% \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}% \DeclareUnicodeCharacter{039F}{{\it O}}% \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}% \DeclareUnicodeCharacter{03A1}{{\it P}}% %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}% \DeclareUnicodeCharacter{03A4}{{\it T}}% \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}% \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}% \DeclareUnicodeCharacter{03A7}{{\it X}}% \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}% \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}% % % Vowels with accents \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}% \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}% \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}% \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}% \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}% \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}% % % Standalone accent \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}% % % Greek letters lower case \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}% \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}% \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}% \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}% \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}% \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}% \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}% \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}% \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}% \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}% \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}% \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}% \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}% \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}% \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}% \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}% \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}% \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}% \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}% \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}% \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}% \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}% \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}% \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}% % % More Greek vowels with accents \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}% \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}% \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}% \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}% \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}% % % Variant Greek letters \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}% \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}% \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}% % \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}% \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}% \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}% \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}% \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}% \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}% \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}% \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}% \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}% \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}% \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}% \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}% % \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}% \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}% % \DeclareUnicodeCharacter{1E20}{\=G}% \DeclareUnicodeCharacter{1E21}{\=g}% \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}% \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}% \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}% \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}% \DeclareUnicodeCharacter{1E26}{\"H}% \DeclareUnicodeCharacter{1E27}{\"h}% % \DeclareUnicodeCharacter{1E30}{\'K}% \DeclareUnicodeCharacter{1E31}{\'k}% \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}% \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}% \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}% \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}% \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}% \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}% \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}% \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}% \DeclareUnicodeCharacter{1E3E}{\'M}% \DeclareUnicodeCharacter{1E3F}{\'m}% % \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}% \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}% \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}% \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}% \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}% \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}% \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}% \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}% \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}% \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}% % \DeclareUnicodeCharacter{1E54}{\'P}% \DeclareUnicodeCharacter{1E55}{\'p}% \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}% \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}% \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}% \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}% \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}% \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}% \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}% \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}% % \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}% \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}% \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}% \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}% \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}% \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}% \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}% \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}% \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}% \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}% % \DeclareUnicodeCharacter{1E7C}{\~V}% \DeclareUnicodeCharacter{1E7D}{\~v}% \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}% \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}% % \DeclareUnicodeCharacter{1E80}{\`W}% \DeclareUnicodeCharacter{1E81}{\`w}% \DeclareUnicodeCharacter{1E82}{\'W}% \DeclareUnicodeCharacter{1E83}{\'w}% \DeclareUnicodeCharacter{1E84}{\"W}% \DeclareUnicodeCharacter{1E85}{\"w}% \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}% \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}% \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}% \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}% \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}% \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}% \DeclareUnicodeCharacter{1E8C}{\"X}% \DeclareUnicodeCharacter{1E8D}{\"x}% \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}% \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}% % \DeclareUnicodeCharacter{1E90}{\^Z}% \DeclareUnicodeCharacter{1E91}{\^z}% \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}% \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}% \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}% \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}% \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}% \DeclareUnicodeCharacter{1E97}{\"t}% \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}% \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}% % \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}% \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}% % \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}% \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}% \DeclareUnicodeCharacter{1EBC}{\~E}% \DeclareUnicodeCharacter{1EBD}{\~e}% % \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}% \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}% \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}% \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}% % \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}% \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}% % \DeclareUnicodeCharacter{1EF2}{\`Y}% \DeclareUnicodeCharacter{1EF3}{\`y}% \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}% % \DeclareUnicodeCharacter{1EF8}{\~Y}% \DeclareUnicodeCharacter{1EF9}{\~y}% % % Punctuation \DeclareUnicodeCharacter{2013}{--}% \DeclareUnicodeCharacter{2014}{---}% \DeclareUnicodeCharacter{2018}{\quoteleft{}}% \DeclareUnicodeCharacter{2019}{\quoteright{}}% \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}% \DeclareUnicodeCharacter{201C}{\quotedblleft{}}% \DeclareUnicodeCharacter{201D}{\quotedblright{}}% \DeclareUnicodeCharacter{201E}{\quotedblbase{}}% \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}% \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}% \DeclareUnicodeCharacter{2022}{\bullet{}}% \DeclareUnicodeCharacter{202F}{\thinspace}% \DeclareUnicodeCharacter{2026}{\dots{}}% \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}% \DeclareUnicodeCharacter{203A}{\guilsinglright{}}% % \DeclareUnicodeCharacter{20AC}{\euro{}}% % \DeclareUnicodeCharacter{2192}{\expansion{}}% \DeclareUnicodeCharacter{21D2}{\result{}}% % % Mathematical symbols \DeclareUnicodeCharacter{2200}{\ensuremath\forall}% \DeclareUnicodeCharacter{2203}{\ensuremath\exists}% \DeclareUnicodeCharacter{2208}{\ensuremath\in}% \DeclareUnicodeCharacter{2212}{\minus{}}% \DeclareUnicodeCharacter{2217}{\ast}% \DeclareUnicodeCharacter{221E}{\ensuremath\infty}% \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}% \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}% \DeclareUnicodeCharacter{2229}{\ensuremath\cap}% \DeclareUnicodeCharacter{2261}{\equiv{}}% \DeclareUnicodeCharacter{2264}{\ensuremath\leq}% \DeclareUnicodeCharacter{2265}{\ensuremath\geq}% \DeclareUnicodeCharacter{2282}{\ensuremath\subset}% \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}% % \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}% \DeclareUnicodeCharacter{2032}{\ensuremath\prime}% \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}% \DeclareUnicodeCharacter{2111}{\ensuremath\Im}% \DeclareUnicodeCharacter{2113}{\ensuremath\ell}% \DeclareUnicodeCharacter{2118}{\ensuremath\wp}% \DeclareUnicodeCharacter{211C}{\ensuremath\Re}% \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}% \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}% \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}% \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}% \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}% \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}% \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}% \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}% \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}% \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}% \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}% \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}% \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}% \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}% \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}% \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}% \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}% \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}% \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}% \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}% \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}% \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}% \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}% \DeclareUnicodeCharacter{2202}{\ensuremath\partial}% \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}% \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}% \DeclareUnicodeCharacter{2209}{\ensuremath\notin}% \DeclareUnicodeCharacter{220B}{\ensuremath\owns}% \DeclareUnicodeCharacter{220F}{\ensuremath\prod}% \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}% \DeclareUnicodeCharacter{2211}{\ensuremath\sum}% \DeclareUnicodeCharacter{2213}{\ensuremath\mp}% \DeclareUnicodeCharacter{2218}{\ensuremath\circ}% \DeclareUnicodeCharacter{221A}{\ensuremath\surd}% \DeclareUnicodeCharacter{221D}{\ensuremath\propto}% \DeclareUnicodeCharacter{2220}{\ensuremath\angle}% \DeclareUnicodeCharacter{2223}{\ensuremath\mid}% \DeclareUnicodeCharacter{2228}{\ensuremath\vee}% \DeclareUnicodeCharacter{222A}{\ensuremath\cup}% \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}% \DeclareUnicodeCharacter{222E}{\ensuremath\oint}% \DeclareUnicodeCharacter{223C}{\ensuremath\sim}% \DeclareUnicodeCharacter{2240}{\ensuremath\wr}% \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}% \DeclareUnicodeCharacter{2245}{\ensuremath\cong}% \DeclareUnicodeCharacter{2248}{\ensuremath\approx}% \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}% \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}% \DeclareUnicodeCharacter{2260}{\ensuremath\neq}% \DeclareUnicodeCharacter{226A}{\ensuremath\ll}% \DeclareUnicodeCharacter{226B}{\ensuremath\gg}% \DeclareUnicodeCharacter{227A}{\ensuremath\prec}% \DeclareUnicodeCharacter{227B}{\ensuremath\succ}% \DeclareUnicodeCharacter{2283}{\ensuremath\supset}% \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}% \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}% \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}% \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}% \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}% \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}% \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}% \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}% \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}% \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}% \DeclareUnicodeCharacter{2299}{\ensuremath\odot}% \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}% \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}% \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}% \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}% \DeclareUnicodeCharacter{22A8}{\ensuremath\models}% \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}% \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}% \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}% \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}% \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}% \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}% \DeclareUnicodeCharacter{22C6}{\ensuremath\star}% \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}% \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}% \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}% \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}% \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}% \DeclareUnicodeCharacter{2322}{\ensuremath\frown}% \DeclareUnicodeCharacter{2323}{\ensuremath\smile}% % \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}% \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}% \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}% \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}% \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}% \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}% \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}% \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}% \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}% \DeclareUnicodeCharacter{266D}{\ensuremath\flat}% \DeclareUnicodeCharacter{266E}{\ensuremath\natural}% \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}% \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}% \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}% \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}% \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}% \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}% \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}% \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}% \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}% \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}% \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}% \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}% \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}% \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}% \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}% \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}% \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}% \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}% % \global\mathchardef\checkmark="1370% actually the square root sign \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}% }% end of \unicodechardefs % UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command) % It makes the setting that replace UTF-8 byte sequence. \def\utfeightchardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii \unicodechardefs } % Whether the active definitions of non-ASCII characters expand to % non-active tokens with the same character code. This is used to % write characters literally, instead of using active definitions for % printing the correct glyphs. \newif\ifpassthroughchars \passthroughcharsfalse % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro to replace/pass-through a Unicode character % \def\DeclareUnicodeCharacterNative#1#2{% \catcode"#1=\active \def\dodeclareunicodecharacternative##1##2##3{% \begingroup \uccode`\~="##2\relax \uppercase{\gdef~}{% \ifpassthroughchars ##1% \else ##3% \fi } \endgroup } \begingroup \uccode`\.="#1\relax \uppercase{\def\UTFNativeTmp{.}}% \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}% \endgroup } % Native Unicode handling (XeTeX and LuaTeX) character replacing definition. % It activates the setting that replaces Unicode characters. \def\nativeunicodechardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative \unicodechardefs } % For native Unicode handling (XeTeX and LuaTeX), % make the character token expand % to the sequences given in \unicodechardefs for printing. \def\DeclareUnicodeCharacterNativeAtU#1#2{% \def\UTFAtUTmp{#2} \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp } % @U command definitions for native Unicode handling (XeTeX and LuaTeX). \def\nativeunicodechardefsatu{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU \unicodechardefs } % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % define all Unicode characters we know about, for the sake of @U. \iftxinativeunicodecapable \nativeunicodechardefsatu \else \utfeightchardefs \fi % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \txipageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \txipagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \else \ifx\XeTeXrevision\thisisundefined \special{papersize=#8,#7}% \else \pdfpageheight #7\relax \pdfpagewidth #8\relax % XeTeX does not have \pdfhorigin and \pdfvorigin. \fi \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset \advance\dimen0 by 1in % reference point for DVI is 1 inch from top of page % \dimen2 = \hsize \advance\dimen2 by \normaloffset \advance\dimen2 by 1in % reference point is 1 inch from left edge of page % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper % Default value of \hfuzz, for suppressing warnings about overfull hboxes. \hfuzz = 1pt \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Set catcodes for Texinfo file % Active characters for printing the wanted glyph. % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. % \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde \chardef\hatchar=`\^ \catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \let\realunder=_ \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> \catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix \catcode`\-=\active \let-=\normaldash % used for headline/footline in the output routine, in case the page % breaks in the middle of an @tex block. \def\texinfochars{% \let< = \activeless \let> = \activegtr \let~ = \activetilde \let^ = \activehat \markupsetuplqdefault \markupsetuprqdefault \let\b = \strong \let\i = \smartitalic % in principle, all other definitions in \tex have to be undone too. } % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In Texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % Print a typewriter backslash. For math mode, we can't simply use % \backslashcurfont: the story here is that in math mode, the \char % of \backslashcurfont ends up printing the roman \ from the math symbol % font (because \char in math mode uses the \mathcode, and plain.tex % sets \mathcode`\\="026E). Hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @ttbackslash % @backslashchar{} is for user documents. % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % {@catcode`- = @active @gdef@normalturnoffactive{% @passthroughcharstrue @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @let\=@ttbackslash @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have @fixbackslash turn them back on. @catcode`+=@other @catcode`@_=@other % \enablebackslashhack - allow file to begin `\input texinfo' % % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % If the file did not have a `\input texinfo', then it is turned off after % the first line; otherwise the first `\' in the file would cause an error. % This is used on the very last line of this file, texinfo.tex. % We also use @c to call @fixbackslash, in case ends of lines are hidden. { @catcode`@^=7 @catcode`@^^M=13@gdef@enablebackslashhack{% @global@let\ = @eatinput% @catcode`@^^M=13% @def@c{@fixbackslash@c}% % Definition for the newline at the end of this file. @def ^^M{@let^^M@secondlinenl}% % Definition for a newline in the main Texinfo file. @gdef @secondlinenl{@fixbackslash}% % In case the first line has a whole-line command on it @let@originalparsearg@parsearg @def@parsearg{@fixbackslash@originalparsearg} }} {@catcode`@^=7 @catcode`@^^M=13% @gdef@eatinput input texinfo#1^^M{@fixbackslash}} % Emergency active definition of newline, in case an active newline token % appears by mistake. {@catcode`@^=7 @catcode13=13% @gdef@enableemergencynewline{% @gdef^^M{% @par% %<warning: active newline>@par% }}} @gdef@fixbackslash{% @ifx\@eatinput @let\ = @ttbackslash @fi @catcode13=5 % regular end of line @enableemergencynewline @let@c=@texinfoc @let@parsearg@originalparsearg % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. @catcode`+=@active @catcode`@_=@active % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. This macro, @fixbackslash, gets % called at the beginning of every Texinfo file. Not opening texinfo.cnf % directly in this file, texinfo.tex, makes it possible to make a format % file for Texinfo. % @openin 1 texinfo.cnf @ifeof 1 @else @input texinfo.cnf @fi @closein 1 } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message\\|emacs-page" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @enablebackslashhack ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bootstrapped/build-aux/mdate-sh��������������������������������������������������������0000755�0001750�0001750�00000013732�13163446446�016212� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2017-09-22.02; # UTC # Copyright (C) 1995-2017 Free Software Foundation, Inc. # written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi case $1 in '') echo "$0: No file. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification day of FILE, in the format: 1 January 1970 Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # Use UTC to get reproducible result. TZ=UTC0 export TZ # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume 'unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A 'ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named "Jan", or "Feb", etc. However, it's unlikely that '/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done test -n "$month" || error "failed parsing '$ls_command /' output" # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\\\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��������������������������������������gnuastro-0.5/bootstrapped/build-aux/depcomp���������������������������������������������������������0000755�0001750�0001750�00000056020�13163446446�016134� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2017-09-16.17; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bootstrapped/build-aux/missing���������������������������������������������������������0000755�0001750�0001750�00000015331�13217200067�016141� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2016-01-11.22; # UTC # Copyright (C) 1996-2017 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to <bug-automake@gnu.org>." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bootstrapped/build-aux/ltmain.sh�������������������������������������������������������0000644�0001750�0001750�00001206740�13217177774�016413� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2016-02-21.11 # libtool (GNU libtool) 2.4.6.40-6ca5-dirty # Provide generalized library-building support services. # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # Copyright (C) 1996-2017 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. PROGRAM=libtool PACKAGE=libtool VERSION=2.4.6.40-6ca5-dirty package_revision=2.4.6.40 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2017-04-19.12; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2004-2017 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # <https://opensource.org/license/MIT>, and GPL version 3 or later # <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # <https://github.com/gnulib-modules/bootstrap/issues> ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # func_unset VAR # -------------- # Portably unset VAR. # In some shells, an 'unset VAR' statement leaves a non-zero return # status if VAR is already unset, which might be problematic if the # statement is used at the end of a function (thus poisoning its return # value) or when 'set -e' is active (causing even a spurious abort of # the script in this case). func_unset () { { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } } # Make sure CDPATH doesn't cause `cd` commands to output the target dir. func_unset CDPATH # Make sure ${,E,F}GREP behave sanely. func_unset GREP_OPTIONS ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1+=\\ \$func_quote_arg_result" }' else func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1=\$$1\\ \$func_quote_arg_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_portable EVAL ARG # ---------------------------- # Internal function to portably implement func_quote_arg. Note that we still # keep attention to performance here so we as much as possible try to avoid # calling sed binary (so far O(N) complexity as long as func_append is O(1)). func_quote_portable () { $debug_cmd func_quote_portable_result=$2 # one-time-loop (easy break) while true do if $1; then func_quote_portable_result=`$ECHO "$2" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` break fi # Quote for eval. case $func_quote_portable_result in *[\\\`\"\$]*) case $func_quote_portable_result in *[\[\*\?]*) func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ | $SED "$sed_quote_subst"` break ;; esac func_quote_portable_old_IFS=$IFS for _G_char in '\' '`' '"' '$' do # STATE($1) PREV($2) SEPARATOR($3) set start "" "" func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy IFS=$_G_char for _G_part in $func_quote_portable_result do case $1 in quote) func_append func_quote_portable_result "$3$2" set quote "$_G_part" "\\$_G_char" ;; start) set first "" "" func_quote_portable_result= ;; first) set quote "$_G_part" "" ;; esac done done IFS=$func_quote_portable_old_IFS ;; *) ;; esac break done func_quote_portable_unquoted_result=$func_quote_portable_result case $func_quote_portable_result in # double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # many bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_portable_result=\"$func_quote_portable_result\" ;; esac } # func_quotefast_eval ARG # ----------------------- # Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', # but optimized for speed. Result is stored in $func_quotefast_eval. if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then printf -v _GL_test_printf_tilde %q '~' if test '\~' = "$_GL_test_printf_tilde"; then func_quotefast_eval () { printf -v func_quotefast_eval_result %q "$1" } else # Broken older Bash implementations. Make those faster too if possible. func_quotefast_eval () { case $1 in '~'*) func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result ;; *) printf -v func_quotefast_eval_result %q "$1" ;; esac } fi else func_quotefast_eval () { func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result } fi # func_quote_arg MODEs ARG # ------------------------ # Quote one ARG to be evaled later. MODEs argument may contain zero or more # specifiers listed below separated by ',' character. This function returns two # values: # i) func_quote_arg_result # double-quoted (when needed), suitable for a subsequent eval # ii) func_quote_arg_unquoted_result # has all characters that are still active within double # quotes backslashified. Available only if 'unquoted' is specified. # # Available modes: # ---------------- # 'eval' (default) # - escape shell special characters # 'expand' # - the same as 'eval'; but do not quote variable references # 'pretty' # - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might # be used later in func_quote to get output like: 'echo "a b"' instead # of 'echo a\ b'. This is slower than default on some shells. # 'unquoted' # - produce also $func_quote_arg_unquoted_result which does not contain # wrapping double-quotes. # # Examples for 'func_quote_arg pretty,unquoted string': # # string | *_result | *_unquoted_result # ------------+-----------------------+------------------- # " | \" | \" # a b | "a b" | a b # "a b" | "\"a b\"" | \"a b\" # * | "*" | * # z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" # # Examples for 'func_quote_arg pretty,unquoted,expand string': # # string | *_result | *_unquoted_result # --------------+---------------------+-------------------- # z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" func_quote_arg () { _G_quote_expand=false case ,$1, in *,expand,*) _G_quote_expand=: ;; esac case ,$1, in *,pretty,*|*,expand,*|*,unquoted,*) func_quote_portable $_G_quote_expand "$2" func_quote_arg_result=$func_quote_portable_result func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result ;; *) # Faster quote-for-eval for some shells. func_quotefast_eval "$2" func_quote_arg_result=$func_quotefast_eval_result ;; esac } # func_quote MODEs ARGs... # ------------------------ # Quote all ARGs to be evaled later and join them into single command. See # func_quote_arg's description for more info. func_quote () { $debug_cmd _G_func_quote_mode=$1 ; shift func_quote_result= while test 0 -lt $#; do func_quote_arg "$_G_func_quote_mode" "$1" if test -n "$func_quote_result"; then func_append func_quote_result " $func_quote_arg_result" else func_append func_quote_result "$func_quote_arg_result" fi shift done } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_arg pretty,expand "$_G_cmd" eval "func_notquiet $func_quote_arg_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_arg expand,pretty "$_G_cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2010-2017 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # <https://opensource.org/license/MIT>, and GPL version 3 or later # <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # <https://github.com/gnulib-modules/bootstrap/issues> # Set a version string for this script. scriptversion=2016-03-06.01; # UTC ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# Copyright'. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug in processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # in the main code. A hook is just a list of function names that can be # run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of hook functions to be called by # FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_propagate_result FUNC_NAME_A FUNC_NAME_B # --------------------------------------------- # If the *_result variable of FUNC_NAME_A _is set_, assign its value to # *_result variable of FUNC_NAME_B. func_propagate_result () { $debug_cmd func_propagate_result_result=: if eval "test \"\${${1}_result+set}\" = set" then eval "${2}_result=\$${1}_result" else func_propagate_result_result=false fi } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It's assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do func_unset "${_G_hook}_result" eval $_G_hook '${1+"$@"}' func_propagate_result $_G_hook func_run_hooks if $func_propagate_result_result; then eval set dummy "$func_run_hooks_result"; shift fi done } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list from your hook function. You may remove # or edit any options that you action, and then pass back the remaining # unprocessed options in '<hooked_function_name>_result', escaped # suitably for 'eval'. # # The '<hooked_function_name>_result' variable is automatically unset # before your hook gets called; for best performance, only set the # *_result variable when necessary (i.e. don't call the 'func_quote' # function unnecessarily because it can be an expensive operation on some # machines). # # Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # No change in '$@' (ignored completely by this hook). Leave # # my_options_prep_result variable intact. # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # args_changed=false # # # Note that, for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: # args_changed=: # ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # args_changed=: # ;; # *) # Make sure the first unrecognised option "$_G_opt" # # is added back to "$@" in case we need it later, # # if $args_changed was set to 'true'. # set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # # # Only call 'func_quote' here if we processed at least one argument. # if $args_changed; then # func_quote eval ${1+"$@"} # my_silent_option_result=$func_quote_result # fi # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # } # func_add_hook func_validate_options my_option_validation # # You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options_finish [ARG]... # ---------------------------- # Finishing the option parse loop (call 'func_options' hooks ATM). func_options_finish () { $debug_cmd func_run_hooks func_options ${1+"$@"} func_propagate_result func_run_hooks func_options_finish } # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd _G_options_quoted=false for my_func in options_prep parse_options validate_options options_finish do func_unset func_${my_func}_result func_unset func_run_hooks_result eval func_$my_func '${1+"$@"}' func_propagate_result func_$my_func func_options if $func_propagate_result_result; then eval set dummy "$func_options_result"; shift _G_options_quoted=: fi done $_G_options_quoted || { # As we (func_options) are top-level options-parser function and # nobody quoted "$@" for us yet, we need to do it explicitly for # caller. func_quote eval ${1+"$@"} func_options_result=$func_quote_result } } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propagate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} func_propagate_result func_run_hooks func_options_prep } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd _G_parse_options_requote=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} func_propagate_result func_run_hooks func_parse_options if $func_propagate_result_result; then eval set dummy "$func_parse_options_result"; shift # Even though we may have changed "$@", we passed the "$@" array # down into the hook and it quoted it for us (because we are in # this if-branch). No need to quote it again. _G_parse_options_requote=false fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break # We expect that one of the options parsed in this function matches # and thus we remove _G_opt from "$@" and need to re-quote. _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" >&2 $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) if test $# = 0 && func_missing_arg $_G_opt; then _G_parse_options_requote=: break fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) _G_parse_options_requote=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift _G_match_parse_options=false break ;; esac if $_G_match_parse_options; then _G_parse_options_requote=: fi done if $_G_parse_options_requote; then # save modified positional parameters for caller func_quote eval ${1+"$@"} func_parse_options_result=$func_quote_result fi } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} func_propagate_result func_run_hooks func_validate_options # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables # after splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} if test "x$func_split_equals_lhs" = "x$1"; then func_split_equals_rhs= fi }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. # The version message is extracted from the calling file's header # comments, with leading '# ' stripped: # 1. First display the progname and version # 2. Followed by the header comment line matching /^# Written by / # 3. Then a blank line followed by the first following line matching # /^# Copyright / # 4. Immediately followed by any lines between the previous matches, # except lines preceding the intervening completely blank line. # For example, see the header comments of this file. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /^# Written by /!b s|^# ||; p; n :fwd2blnk /./ { n b fwd2blnk } p; n :holdwrnt s|^# || s|^# *$|| /^Copyright /!{ /./H n b holdwrnt } s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| G s|\(\n\)\n*|\1|g p; q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6.40-6ca5-dirty' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname (GNU libtool) 2.4.6.40-6ca5-dirty automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to <bug-libtool@gnu.org>. GNU libtool home page: <http://www.gnu.org/s/libtool/>. General help using GNU software: <http://www.gnu.org/gethelp/>." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= _G_rc_lt_options_prep=: # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; *) _G_rc_lt_options_prep=false ;; esac if $_G_rc_lt_options_prep; then # Pass back the list of options. func_quote eval ${1+"$@"} libtool_options_prep_result=$func_quote_result fi } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd _G_rc_lt_parse_options=false # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"} ; shift _G_match_lt_parse_options=false break ;; esac $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done if $_G_rc_lt_parse_options; then # save modified positional parameters for caller func_quote eval ${1+"$@"} libtool_parse_options_result=$func_quote_result fi } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote eval ${1+"$@"} libtool_validate_options_result=$func_quote_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <<EOF # $write_libobj - a libtool object file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object=$write_lobj # Name of the non-PIC object non_pic_object=$write_oldobj EOF $MV "${write_libobj}T" "$write_libobj" } } ################################################## # FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # ################################################## # func_convert_core_file_wine_to_w32 ARG # Helper function used by file name conversion functions when $build is *nix, # and $host is mingw, cygwin, or some other w32 environment. Relies on a # correctly configured wine environment available, with the winepath program # in $build's $PATH. # # ARG is the $build file name to be converted to w32 format. # Result is available in $func_convert_core_file_wine_to_w32_result, and will # be empty on error (or when ARG is empty) func_convert_core_file_wine_to_w32 () { $debug_cmd func_convert_core_file_wine_to_w32_result=$1 if test -n "$1"; then # Unfortunately, winepath does not exit with a non-zero error code, so we # are forced to check the contents of stdout. On the other hand, if the # command is not found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both error code of # zero AND non-empty stdout, which explains the odd construction: func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_arg pretty "$libobj" test "X$libobj" != "X$func_quote_arg_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_arg pretty "$srcfile" qsrcfile=$func_quote_arg_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_arg pretty "$nonopt" install_prog="$func_quote_arg_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_arg pretty "$arg" func_append install_prog "$func_quote_arg_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_arg pretty "$arg" func_append install_prog " $func_quote_arg_result" if test -n "$arg2"; then func_quote_arg pretty "$arg2" fi func_append install_shared_prog " $func_quote_arg_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_arg pretty "$install_override_mode" func_append install_shared_prog " -m $func_quote_arg_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_arg expand,pretty "$relink_command" eval "func_echo $func_quote_arg_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen <import library>. $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 </dev/null >/dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" func_quote_arg pretty "$ECHO" qECHO=$func_quote_arg_result $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=$qECHO fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat <<EOF /* $cwrappersource - temporary wrapper executable for $objdir/$outputname Generated by $PROGRAM (GNU $PACKAGE) $VERSION The $output program cannot be directly executed until all the libtool libraries that it depends on are installed. This wrapper executable should never be moved out of the build directory. If it is, it will not operate correctly. */ EOF cat <<"EOF" #ifdef _MSC_VER # define _CRT_SECURE_NO_DEPRECATE 1 #endif #include <stdio.h> #include <stdlib.h> #ifdef _MSC_VER # include <direct.h> # include <process.h> # include <io.h> #else # include <unistd.h> # include <stdint.h> # ifdef __CYGWIN__ # include <io.h> # endif #endif #include <malloc.h> #include <stdarg.h> #include <assert.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <<EOF #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) # define externally_visible volatile #else # define externally_visible __attribute__((externally_visible)) volatile #endif externally_visible const char * MAGIC_EXE = "$magic_exe"; const char * LIB_PATH_VARNAME = "$shlibpath_var"; EOF if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then func_to_host_path "$temp_rpath" cat <<EOF const char * LIB_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * LIB_PATH_VALUE = ""; EOF fi if test -n "$dllsearchpath"; then func_to_host_path "$dllsearchpath:" cat <<EOF const char * EXE_PATH_VARNAME = "PATH"; const char * EXE_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * EXE_PATH_VARNAME = ""; const char * EXE_PATH_VALUE = ""; EOF fi if test yes = "$fast_install"; then cat <<EOF const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ EOF else cat <<EOF const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ EOF fi cat <<"EOF" #define LTWRAPPER_OPTION_PREFIX "--lt-" static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; int main (int argc, char *argv[]) { char **newargz; int newargc; char *tmp_pathspec; char *actual_cwrapper_path; char *actual_cwrapper_name; char *target_name; char *lt_argv_zero; int rval = 127; int i; program_name = (char *) xstrdup (base_name (argv[0])); newargz = XMALLOC (char *, (size_t) argc + 1); /* very simple arg parsing; don't want to rely on getopt * also, copy all non cwrapper options to newargz, except * argz[0], which is handled differently */ newargc=0; for (i = 1; i < argc; i++) { if (STREQ (argv[i], dumpscript_opt)) { EOF case $host in *mingw* | *cygwin* ) # make stdout use "unix" line endings echo " setmode(1,_O_BINARY);" ;; esac cat <<"EOF" lt_dump_script (stdout); return 0; } if (STREQ (argv[i], debug_opt)) { lt_debug = 1; continue; } if (STREQ (argv[i], ltwrapper_option_prefix)) { /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX namespace, but it is not one of the ones we know about and have already dealt with, above (inluding dump-script), then report an error. Otherwise, targets might begin to believe they are allowed to use options in the LTWRAPPER_OPTION_PREFIX namespace. The first time any user complains about this, we'll need to make LTWRAPPER_OPTION_PREFIX a configure-time option or a configure.ac-settable value. */ lt_fatal (__FILE__, __LINE__, "unrecognized %s option: '%s'", ltwrapper_option_prefix, argv[i]); } /* otherwise ... */ newargz[++newargc] = xstrdup (argv[i]); } newargz[++newargc] = NULL; EOF cat <<EOF /* The GNU banner must be the first non-error debug message */ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); EOF cat <<"EOF" lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); tmp_pathspec = find_executable (argv[0]); if (tmp_pathspec == NULL) lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (before symlink chase) at: %s\n", tmp_pathspec); actual_cwrapper_path = chase_symlinks (tmp_pathspec); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (after symlink chase) at: %s\n", actual_cwrapper_path); XFREE (tmp_pathspec); actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); strendzap (actual_cwrapper_path, actual_cwrapper_name); /* wrapper name transforms */ strendzap (actual_cwrapper_name, ".exe"); tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); XFREE (actual_cwrapper_name); actual_cwrapper_name = tmp_pathspec; tmp_pathspec = 0; /* target_name transforms -- use actual target program name; might have lt- prefix */ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); strendzap (target_name, ".exe"); tmp_pathspec = lt_extend_str (target_name, ".exe", 1); XFREE (target_name); target_name = tmp_pathspec; tmp_pathspec = 0; lt_debugprintf (__FILE__, __LINE__, "(main) libtool target name: %s\n", target_name); EOF cat <<EOF newargz[0] = XMALLOC (char, (strlen (actual_cwrapper_path) + strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); strcpy (newargz[0], actual_cwrapper_path); strcat (newargz[0], "$objdir"); strcat (newargz[0], "/"); EOF cat <<"EOF" /* stop here, and copy so we don't have to do this twice */ tmp_pathspec = xstrdup (newargz[0]); /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ strcat (newargz[0], actual_cwrapper_name); /* DO want the lt- prefix here if it exists, so use target_name */ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); XFREE (tmp_pathspec); tmp_pathspec = NULL; EOF case $host_os in mingw*) cat <<"EOF" { char* p; while ((p = strchr (newargz[0], '\\')) != NULL) { *p = '/'; } while ((p = strchr (lt_argv_zero, '\\')) != NULL) { *p = '/'; } } EOF ;; esac cat <<"EOF" XFREE (target_name); XFREE (actual_cwrapper_path); XFREE (actual_cwrapper_name); lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ lt_setenv ("DUALCASE", "1"); /* for MSK sh */ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) because on Windows, both *_VARNAMEs are PATH but uninstalled libraries must come first. */ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", nonnull (lt_argv_zero)); for (i = 0; i < newargc; i++) { lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", i, nonnull (newargz[i])); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ newargz = prepare_spawn (newargz); rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ lt_debugprintf (__FILE__, __LINE__, "(main) failed to launch target \"%s\": %s\n", lt_argv_zero, nonnull (strerror (errno))); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal (__FILE__, __LINE__, "memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined HAVE_DOS_BASED_FILE_SYSTEM /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_arg pretty,unquoted "$arg" qarg=$func_quote_arg_unquoted_result func_append libtool_args " $func_quote_arg_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $func_quote_arg_result" func_append compiler_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $wl$func_quote_arg_result" func_append compiler_flags " $wl$func_quote_arg_result" func_append linker_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer # -fuse-ld=* Linker select flags for GCC -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*|-fuse-ld=*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_arg pretty "$arg" arg=$func_quote_arg_result fi ;; # Some other compiler flag. -* | +*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c <<EOF int main() { return 0; } EOF $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then ldd_output=`ldd conftest` for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" i= ;; esac fi if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which I believe you do not have" echo "*** because a test_compile did reveal that the linker did not use it for" echo "*** its dynamic dependency list that programs get resolved with at runtime." fi fi ;; *) func_append newdeplibs " $i" ;; esac done else # Error occurred in the first compile. Let's try to salvage # the situation: Compile a separate program for each library. for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" i= ;; esac fi if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because a test_compile did reveal that the linker did not use this one" echo "*** as a dynamic dependency that programs can get resolved with at runtime." fi fi else droppeddeps=yes echo $ECHO "*** Warning! Library $i is needed by this library but I was not able to" echo "*** make it link in! You will probably need to install it or some" echo "*** library that it depends on before this library will be fully" echo "*** functional. Installing it before continuing would be even better." fi ;; *) func_append newdeplibs " $i" ;; esac done fi ;; file_magic*) set dummy $deplibs_check_method; shift file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do if test yes = "$want_nocaseglob"; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty "$var_value" relink_command="$var=$func_quote_arg_result; export $var; $relink_command" fi done func_quote eval cd "`pwd`" func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" relink_command=$func_quote_arg_unquoted_result fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty,unquoted "$var_value" relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" fi done # Quote the link command for shipping. func_quote eval cd "`pwd`" relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" func_quote_arg pretty,unquoted "$relink_command" relink_command=$func_quote_arg_unquoted_result if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: ��������������������������������gnuastro-0.5/bootstrapped/build-aux/install-sh������������������������������������������������������0000755�0001750�0001750�00000034717�13163446446�016574� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2017-09-23.17; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: �������������������������������������������������gnuastro-0.5/bootstrapped/build-aux/config.sub������������������������������������������������������0000755�0001750�0001750�00000107524�13206310254�016531� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2017 Free Software Foundation, Inc. timestamp='2017-11-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to <config-patches@gnu.org>. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright 1992-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2*) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsx-tandem) basic_machine=nsx-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; wasm32) basic_machine=wasm32-unknown ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; x64) basic_machine=x86_64-pc ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases that might get confused # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bootstrapped/build-aux/config.rpath����������������������������������������������������0000755�0001750�0001750�00000044216�13217200020�017043� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2017 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF # How to pass a linker flag through the compiler. wl="$escaped_wl" # Static library suffix (normally "a"). libext="$libext" # Shared library suffix (normally "so"). shlibext="$shlibext" # Format of library name prefix. libname_spec="$escaped_libname_spec" # Library names that the linker finds when passed -lNAME. library_names_spec="$escaped_library_names_spec" # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="$hardcode_libdir_separator" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct="$hardcode_direct" # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L="$hardcode_minus_L" EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bootstrapped/build-aux/config.guess����������������������������������������������������0000755�0001750�0001750�00000125545�13215521032�017067� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2017 Free Software Foundation, Inc. timestamp='2017-12-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to <config-patches@gnu.org>. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} exit ;; *:MidnightBSD:*:*) echo ${UNAME_MACHINE}-unknown-midnightbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix exit ;; *:Redox:*:*) echo ${UNAME_MACHINE}-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <sys/systemcfg.h> main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <unistd.h> int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; k1om:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; mips64el:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` echo ${UNAME_MACHINE}-pc-isc$UNAME_REL elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "${UNAME_MACHINE}:${UNAME_SYSTEM}" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <<EOF NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize the system type. Please install a C compiler and try again. EOF ;; esac cat >&2 <<EOF This script (version $timestamp), has failed to recognize the operating system you are using. If your script is old, overwrite *all* copies of config.guess and config.sub with the latest versions from: https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess and https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub If $0 has already been updated, send the following data and any information you think might be pertinent to config-patches@gnu.org to provide the necessary information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: �����������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bootstrapped/build-aux/compile���������������������������������������������������������0000755�0001750�0001750�00000016326�13217200067�016125� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # Written by Tom Tromey <tromey@cygnus.com>. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bootstrapped/build-aux/ar-lib����������������������������������������������������������0000755�0001750�0001750�00000013302�13217200067�015632� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2017 Free Software Foundation, Inc. # Written by Peter Rosin <peda@lysator.liu.se>. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <<EOF Usage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...] Members may be specified in a file named with @FILE. EOF exit $? ;; -v | --v*) echo "$me, version $scriptversion" exit $? ;; esac if test $# -lt 3; then func_error "you must specify a program, an action and an archive" fi AR=$1 shift while : do if test $# -lt 2; then func_error "you must specify a program, an action and an archive" fi case $1 in -lib | -LIB \ | -ltcg | -LTCG \ | -machine* | -MACHINE* \ | -subsystem* | -SUBSYSTEM* \ | -verbose | -VERBOSE \ | -wx* | -WX* ) AR="$AR $1" shift ;; *) action=$1 shift break ;; esac done orig_archive=$1 shift func_file_conv "$orig_archive" archive=$file # strip leading dash in $action action=${action#-} delete= extract= list= quick= replace= index= create= while test -n "$action" do case $action in d*) delete=yes ;; x*) extract=yes ;; t*) list=yes ;; q*) quick=yes ;; r*) replace=yes ;; s*) index=yes ;; S*) ;; # the index is always updated implicitly c*) create=yes ;; u*) ;; # TODO: don't ignore the update modifier v*) ;; # TODO: don't ignore the verbose modifier *) func_error "unknown action specified" ;; esac action=${action#?} done case $delete$extract$list$quick$replace,$index in yes,* | ,yes) ;; yesyes*) func_error "more than one action specified" ;; *) func_error "no action specified" ;; esac if test -n "$delete"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi for member do case $1 in @*) func_at_file "${1#@}" -REMOVE "$archive" ;; *) func_file_conv "$1" $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $? ;; esac done elif test -n "$extract"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi if test $# -gt 0; then for member do case $1 in @*) func_at_file "${1#@}" -EXTRACT "$archive" ;; *) func_file_conv "$1" $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $? ;; esac done else $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member do $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $? done fi elif test -n "$quick$replace"; then if test ! -f "$orig_archive"; then if test -z "$create"; then echo "$me: creating $orig_archive" fi orig_archive= else orig_archive=$archive fi for member do case $1 in @*) func_file_conv "${1#@}" set x "$@" "@$file" ;; *) func_file_conv "$1" set x "$@" "$file" ;; esac shift shift done if test -n "$orig_archive"; then $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $? else $AR -NOLOGO -OUT:"$archive" "$@" || exit $? fi elif test -n "$list"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi $AR -NOLOGO -LIST "$archive" || exit $? fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/�����������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220467�010775� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/warp/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220467�011746� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/warp/warp.h������������������������������������������������������������������������0000644�0001750�0001750�00000002766�13121462410�013011� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef IMGTRANSFORM_H #define IMGTRANSFORM_H #include <gnuastro/threads.h> /* Limits to account for floating point errors: */ #define ABSOLUTEFLTERROR 1e-10 #define RELATIVEFLTERROR 1e-6 /* Internal structure. */ struct iwpparams { /* General input parameters: */ struct warpparams *p; /* Thread parameters. */ size_t *indexs; /* Indexs to be used in this thread. */ pthread_barrier_t *b; /* Barrier to keep threads waiting. */ }; /* Extenal functions. */ void warp(struct warpparams *p); #endif ����������gnuastro-0.5/bin/warp/ui.h��������������������������������������������������������������������������0000644�0001750�0001750�00000004014�13174462540�012455� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_WARPS = GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Available letters for short options: b d g i j l n u v w x y z A B E G H J L O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_KEEPWCS = 'k', UI_KEY_COVEREDFRAC = 'C', UI_KEY_ALIGN = 'a', UI_KEY_ROTATE = 'r', UI_KEY_SCALE = 's', UI_KEY_FLIP = 'f', UI_KEY_SHEAR = 'e', UI_KEY_TRANSLATE = 't', UI_KEY_PROJECT = 'p', UI_KEY_MATRIX = 'm', UI_KEY_CENTERONCORNER = 'c', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_HSTARTWCS = 1000, UI_KEY_HENDWCS, }; /* Functions */ void ui_read_check_inputs_setup(int argc, char *argv[], struct warpparams *p); void ui_free_report(struct warpparams *p, struct timeval *t1); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/warp/args.h������������������������������������������������������������������������0000644�0001750�0001750�00000012774�13202610317�012775� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input. */ { "hstartwcs", UI_KEY_HSTARTWCS, "INT", 0, "Header keyword number to start reading WCS.", GAL_OPTIONS_GROUP_INPUT, &p->hstartwcs, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "hendwcs", UI_KEY_HENDWCS, "INT", 0, "Header keyword number to end reading WCS.", GAL_OPTIONS_GROUP_INPUT, &p->hendwcs, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output. */ { "keepwcs", UI_KEY_KEEPWCS, 0, 0, "Do not apply warp to input's WCS", GAL_OPTIONS_GROUP_OUTPUT, &p->keepwcs, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "coveredfrac", UI_KEY_COVEREDFRAC, "FLT", 0, "Acceptable fraction of output pixel covered.", GAL_OPTIONS_GROUP_OUTPUT, &p->coveredfrac, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Warps:", UI_GROUP_WARPS }, { "align", UI_KEY_ALIGN, 0, 0, "Align the image and celestial axes.", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "rotate", UI_KEY_ROTATE, "FLT", 0, "Rotate by the given angle in degrees.", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "scale", UI_KEY_SCALE, "FLT[,FLT]", 0, "Scale along the given axis(es).", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "flip", UI_KEY_FLIP, "INT[,INT]", 0, "Flip along the given axis(es).", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "shear", UI_KEY_SHEAR, "FLT[,FLT]", 0, "Shear along the given axis(es).", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "translate", UI_KEY_TRANSLATE, "FLT[,FLT]", 0, "Translate along the given axis(es).", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "project", UI_KEY_PROJECT, "FLT[,FLT]", 0, "Project along the given axis(es).", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "matrix", UI_KEY_MATRIX, "STR", 0, "Raw transformation matrix, highest priority.", UI_GROUP_WARPS, &p->matrix, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "centeroncorner", UI_KEY_CENTERONCORNER, 0, 0, "Center of coordinates on first pixel corner.", UI_GROUP_WARPS, &p->centeroncorner, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ����gnuastro-0.5/bin/warp/authors-cite.h����������������������������������������������������������������0000644�0001750�0001750�00000002756�13211076737�014463� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif ������������������gnuastro-0.5/bin/warp/main.h������������������������������������������������������������������������0000644�0001750�0001750�00000005540�13125721536�012770� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "Warp" /* Program full name. */ #define PROGRAM_EXEC "astwarp" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Main program structure. */ struct warpparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ char *inputname; /* Name of input file. */ size_t hstartwcs; /* Header keyword No. to start reading WCS. */ size_t hendwcs; /* Header keyword No. to end reading WCS. */ uint8_t keepwcs; /* Wrap the warped/transfomed pixels. */ uint8_t centeroncorner; /* Shift center by 0.5 before and after. */ double coveredfrac; /* Acceptable fraction of output covered. */ /* Internal parameters: */ gal_data_t *input; /* Input data structure. */ gal_data_t *output; /* output data structure. */ gal_data_t *matrix; /* Warp/Transformation matrix. */ gal_data_t *modularll; /* List of modular warpings. */ double *inverse; /* Inverse of the input matrix. */ double *inwcsmatrix; /* Input WCS matrix. */ double *pixelscale; /* Pixel scale of input image. */ time_t rawtime; /* Starting time of the program. */ size_t extinds[4]; /* Indexs of the minimum and maximum values. */ size_t ordinds[4]; /* Indexs of anticlockwise vertices. */ double outfpixval[2]; /* Pixel value of first output pixel. */ double opixarea; /* Area of output pix in units of input pix. */ }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/warp/warp.c������������������������������������������������������������������������0000644�0001750�0001750�00000044715�13151366335�013020� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <float.h> #include <stdlib.h> #include <gnuastro/wcs.h> #include <gnuastro/fits.h> #include <gnuastro/polygon.h> #include "main.h" #include "warp.h" /***************************************************************/ /************** MACROS ******************/ /***************************************************************/ /* Multiply a 2 element vector with a transformation matrix and put the result in the 2 element output array. It is assumed that the input is from a flat coordinate systemy. */ #define mappoint(V, T, O) \ { \ (O)[0]=( ( (T)[0]*(V)[0] + (T)[1]*(V)[1] + (T)[2] ) \ / ( (T)[6]*(V)[0] + (T)[7]*(V)[1] + (T)[8] ) ); \ (O)[1]=( ( (T)[3]*(V)[0] + (T)[4]*(V)[1] + (T)[5] ) \ / ( (T)[6]*(V)[0] + (T)[7]*(V)[1] + (T)[8] ) ); \ } \ /* A pixel's center is an integer value. This function will give the integer value that is nearest to a floating point number. Works for both positive and negative values and includes floating point errors. nearestint_halfhigher(0.5f) --> 1.0f */ #define nearestint_halfhigher(D) \ (ceil((D)) - (D) > 0.5f \ + GAL_POLYGON_ROUND_ERR ? ceil((D))-1.0f : ceil((D))) /* Similar to `nearestint_halflower' but: nearestint_halflower(0.5f) --> 0.0f; */ #define nearestint_halflower(D) \ (ceil((D)) - (D) > 0.5f - GAL_POLYGON_ROUND_ERR ? ceil((D))-1.0f : ceil((D))) #define ceilwitherr(D) \ ( fabs( nearbyint((D)) - (D) ) < GAL_POLYGON_ROUND_ERR \ ? nearbyint((D)) : nearbyint((D))+1 ) /***************************************************************/ /************** Processing function ******************/ /***************************************************************/ static void * warp_onthread(void *inparam) { struct iwpparams *iwp=(struct iwpparams*)inparam; struct warpparams *p=iwp->p; size_t *extinds=p->extinds, *ordinds=p->ordinds; long is0=p->input->dsize[0], is1=p->input->dsize[1]; double area, filledarea, *input=p->input->array, v=NAN; size_t i, j, ind, os1=p->output->dsize[1], numcrn, numinput; long x, y, xstart, xend, ystart, yend; /* Might be negative */ double ocrn[8], icrn_base[8], icrn[8], *output=p->output->array; double pcrn[8], *outfpixval=p->outfpixval, ccrn[GAL_POLYGON_MAX_CORNERS]; for(i=0; (ind=iwp->indexs[i])!=GAL_BLANK_SIZE_T; ++i) { /* Initialize the output pixel value: */ numinput=0; output[ind]=filledarea=0.0f; /* Set the corners of this output pixel. The ind/os1 and ind%os1 start from 0. Note that the outfpixval already contains the correction for the fact that the FITS standard considers the center of first pixel to be at (1.0f, 1.0f).*/ ocrn[0]=(double)(ind%os1)-0.5f+outfpixval[0]; ocrn[1]=(double)(ind/os1)-0.5f+outfpixval[1]; ocrn[2]=(double)(ind%os1)+0.5f+outfpixval[0]; ocrn[3]=(double)(ind/os1)-0.5f+outfpixval[1]; ocrn[4]=(double)(ind%os1)-0.5f+outfpixval[0]; ocrn[5]=(double)(ind/os1)+0.5f+outfpixval[1]; ocrn[6]=(double)(ind%os1)+0.5f+outfpixval[0]; ocrn[7]=(double)(ind/os1)+0.5f+outfpixval[1]; /* Transform the four corners of the output pixel to the input image coordinates. */ for(j=0;j<4;++j) mappoint(&ocrn[j*2], p->inverse, &icrn_base[j*2]); /* Using the known relationships between the vertice locations, put everything in the right place: */ xstart = nearestint_halfhigher( icrn_base[extinds[0]] ); xend = nearestint_halflower( icrn_base[extinds[1]] ) + 1; ystart = nearestint_halfhigher( icrn_base[extinds[2]] ); yend = nearestint_halflower( icrn_base[extinds[3]] ) + 1; icrn[0]=icrn_base[ordinds[0]*2]; icrn[1]=icrn_base[ordinds[0]*2+1]; icrn[2]=icrn_base[ordinds[1]*2]; icrn[3]=icrn_base[ordinds[1]*2+1]; icrn[4]=icrn_base[ordinds[2]*2]; icrn[5]=icrn_base[ordinds[2]*2+1]; icrn[6]=icrn_base[ordinds[3]*2]; icrn[7]=icrn_base[ordinds[3]*2+1]; /* For a check: if(ind==9999) { printf("\n\n\nind: %zu: (%zu, %zu):\n", ind, ind%os1+1, ind/os1+1); for(j=0;j<4;++j) printf("(%.3f, %.3f) --> (%.3f, %.3f)\n", ocrn[j*2], ocrn[j*2+1], icrn_base[j*2], icrn_base[j*2+1]); printf("------- Ordered -------\n"); for(j=0;j<4;++j) printf("(%.3f, %.3f)\n", icrn[j*2], icrn[j*2+1]); printf("------- Start and ending pixels -------\n"); printf("X: %ld -- %ld\n", xstart, xend); printf("Y: %ld -- %ld\n", ystart, yend); } */ /* Go over all the input pixels that are covered. Note that x and y are the centers of the pixel. */ for(y=ystart;y<yend;++y) { /* If the pixel isn't in the image (note that the pixel coordinates start from 1), contine to next. Note that the pixel polygon should be counter clockwise. */ if( y<1 || y>is0 ) continue; pcrn[1]=y-0.5f; pcrn[3]=y-0.5f; pcrn[5]=y+0.5f; pcrn[7]=y+0.5f; for(x=xstart;x<xend;++x) { if( x<1 || x>is1 ) continue; /* Read the value of the input pixel. */ v=input[(y-1)*is1+x-1]; pcrn[0]=x-0.5f; pcrn[2]=x+0.5f; pcrn[4]=x+0.5f; pcrn[6]=x-0.5f; /* Find the overlapping (clipped) polygon: */ gal_polygon_clip(icrn, 4, pcrn, 4, ccrn, &numcrn); area=gal_polygon_area(ccrn, numcrn); /* Add the fractional value of this pixel. If this output pixel covers a NaN pixel in the input grid, then calculate the area of this NaN pixel to account for it later. */ if( !isnan(v) ) { ++numinput; filledarea+=area; output[ind]+=v*area; } /* For a polygon check: if(ind==9999) { printf("%zu -- (%zd, %zd):\n", ind, x, y); printf("icrn:\n"); for(j=0;j<4;++j) printf("\t%.3f, %.3f\n", icrn[j*2], icrn[j*2+1]); printf("pcrn:\n"); for(j=0;j<4;++j) printf("\t%.3f, %.3f\n", pcrn[j*2], pcrn[j*2+1]); printf("ccrn:\n"); for(j=0;j<numcrn;++j) printf("\t%.3f, %.3f\n", ccrn[j*2], ccrn[j*2+1]); printf("[%zu]: %.3f of [%ld, %ld]: %f\n", ind, gal_polygon_area(ccrn, numcrn), x, y, input[(y-1)*is1+x-1]); } */ /* For a simple pixel value check: if(ind==97387) printf("%f --> (%zu) %f\n", v*gal_polygon_area(ccrn, numcrn), numinput, output[ind]); */ } } /* See if the pixel value should be set to NaN or not (because of not enough coverage). */ if(numinput && filledarea/p->opixarea < p->coveredfrac-1e-5) numinput=0; /* Write the final value to disk: */ if(numinput==0) output[ind]=NAN; } /* Wait until all other threads finish. */ if(p->cp.numthreads>1) pthread_barrier_wait(iwp->b); return NULL; } /***************************************************************/ /************** Preparations ******************/ /***************************************************************/ /* Do all the preparations. Make the output array. We transform the four corners of the image into the output space. To find the four sides of the image. About fpixel and lpixel. The point is that we don't want to spend time, transforming any pixels which we know will not be in the input image. Find the proper order of transformed pixel corners from the output array to the input array. The order is fixed for all the pixels in the image altough the scale might change. */ static void warp_preparations(struct warpparams *p) { double is0=p->input->dsize[0], is1=p->input->dsize[1]; double output[8], forarea[8]; double icrn[8]={0,0,0,0,0,0,0,0}; size_t i, *extinds=p->extinds, dsize[2]; double xmin=DBL_MAX, xmax=-DBL_MAX, ymin=DBL_MAX, ymax=-DBL_MAX; double ocrn[8]={0.5f,0.5f, 1.5f,0.5f, 0.5f,1.5f, 1.5f, 1.5f}; double input[8]={ 0.5f, 0.5f, is1+0.5f, 0.5f, 0.5f, is0+0.5f, is1+0.5f, is0+0.5f }; /* Find the range of pixels of the input image. All the input positions are moved to the negative by half a pixel since the center of the pixel is an integer value.*/ for(i=0;i<4;++i) { mappoint(&input[i*2], (double *)(p->matrix->array), &output[i*2]); if(output[i*2]<xmin) xmin = output[i*2]; if(output[i*2]>xmax) xmax = output[i*2]; if(output[i*2+1]<ymin) ymin = output[i*2+1]; if(output[i*2+1]>ymax) ymax = output[i*2+1]; } /* For a check: for(i=0;i<4;++i) printf("(%.3f, %.3f) --> (%.3f, %.3f)\n", input[i*2], input[i*2+1], output[i*2], output[i*2+1]); printf("xmin: %.3f\nxmax: %.3f\nymin: %.3f\nymax: %.3f\n", xmin, xmax, ymin, ymax); */ /* Set the final size of the image. The X axis is horizontal. The reason we are using the halflower variation of `nearestint' for the maximums is that these points are the farthest extremes of the input image. If they are half a pixel value, they should point to the pixel before. */ dsize[1]=nearestint_halflower(xmax)-nearestint_halfhigher(xmin)+1; dsize[0]=nearestint_halflower(ymax)-nearestint_halfhigher(ymin)+1; p->outfpixval[0]=nearestint_halfhigher(xmin); p->outfpixval[1]=nearestint_halfhigher(ymin); /* For a check: printf("Wrapped:\n"); printf("dsize [C]: (%zu, %zu)\n", dsize[0], dsize[1]); printf("outfpixval [FITS]: (%.4f, %.4f)\n", p->outfpixval[0], p->outfpixval[1]); */ /* We now know the size of the output and the starting and ending coordinates in the output image (bottom left corners of pixels) for the transformation. */ p->output=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, dsize, p->input->wcs, 0, p->cp.minmapsize, "Warped", p->input->unit, NULL); /* Order the corners of the inverse-transformed pixel (from the output to the input) in an anti-clockwise transformation. In a general homographic transform, the scales of the output pixels may change, but the relative positions of the corners will not. */ for(i=0;i<4;++i) { ocrn[i*2] += p->outfpixval[0]; ocrn[i*2+1] += p->outfpixval[1]; mappoint(&ocrn[i*2], p->inverse, &icrn[i*2]); } /* Order the transformed output pixel. */ gal_polygon_ordered_corners(icrn, 4, p->ordinds); /* Find the area of the output pixel in units of the input pixel, this is necessary if we are going to have NAN pixels in the image to account for the area lost due to a NAN value. */ for(i=0;i<4;++i) { forarea[2*i]=icrn[2*p->ordinds[i]]; forarea[2*i+1]=icrn[2*p->ordinds[i]+1]; } p->opixarea=gal_polygon_area(forarea, 4); /* Find which index after transformation will have the minimum and maximum positions along the two axises. We can't use the starting loop because that is based on the input image which can be not-a-square! So we do it here where pixels are squares. */ xmin=DBL_MAX; xmax=-DBL_MAX; ymin=DBL_MAX; ymax=-DBL_MAX; for(i=0;i<4;++i) { if(icrn[i*2]<xmin) { xmin=icrn[i*2]; extinds[0]=i*2; } if(icrn[i*2]>xmax) { xmax=icrn[i*2]; extinds[1]=i*2; } if(icrn[i*2+1]<ymin) { ymin=icrn[i*2+1]; extinds[2]=i*2+1; } if(icrn[i*2+1]>ymax) { ymax=icrn[i*2+1]; extinds[3]=i*2+1; } } /* For a check: for(i=0;i<4;++i) printf("(%.3f, %.3f) --> (%.3f, %.3f)\n", ocrn[i*2], ocrn[i*2+1], icrn[i*2], icrn[i*2+1]); printf("xmin: %.3f\nxmax: %.3f\nymin: %.3f\nymax: %.3f\n", xmin, xmax, ymin, ymax); */ } /* Correct the WCS coordinates (Multiply the 2x2 PC matrix of the WCS structure by the INVERSE of the transform in 2x2). Then Multiply the crpix array with the ACTUAL transformation matrix. */ void correct_wcs_save_output(struct warpparams *p) { size_t i; double tcrpix[3]; char keyword[9*FLEN_KEYWORD]; double *m=p->matrix->array, diff; struct wcsprm *wcs=p->output->wcs; gal_fits_list_key_t *headers=NULL; double *crpix=wcs->crpix, *w=p->inwcsmatrix; /* `tinv' is the 2 by 2 inverse matrix. Recall that `p->inverse' is 3 by 3 to account for homogeneous coordinates. */ double tinv[4]={p->inverse[0]/p->inverse[8], p->inverse[1]/p->inverse[8], p->inverse[3]/p->inverse[8], p->inverse[4]/p->inverse[8]}; /* Make the WCS corrections if necessary. */ if(p->keepwcs==0 && wcs) { /* Correct the input WCS matrix. Since we are re-writing the PC matrix from the full rotation matrix (including pixel scale), we'll also have to set the CDELT fields to 1. Just to be sure that the PC matrix is used in the end by WCSLIB, we'll also set altlin to 1.*/ wcs->altlin=1; wcs->cdelt[0] = wcs->cdelt[1] = 1.0f; wcs->pc[0] = w[0]*tinv[0] + w[1]*tinv[2]; wcs->pc[1] = w[0]*tinv[1] + w[1]*tinv[3]; wcs->pc[2] = w[2]*tinv[0] + w[3]*tinv[2]; wcs->pc[3] = w[2]*tinv[1] + w[3]*tinv[3]; /* Correct the CRPIX point. The +1 in the end of the last two lines is because FITS counts from 1. */ tcrpix[0] = m[0]*crpix[0]+m[1]*crpix[1]+m[2]; tcrpix[1] = m[3]*crpix[0]+m[4]*crpix[1]+m[5]; tcrpix[2] = m[6]*crpix[0]+m[7]*crpix[1]+m[8]; crpix[0] = tcrpix[0]/tcrpix[2] - p->outfpixval[0] + 1; crpix[1] = tcrpix[1]/tcrpix[2] - p->outfpixval[1] + 1; } /* Add the appropriate headers: */ gal_fits_key_write_filename("INF", p->inputname, &headers); for(i=0;i<9;++i) { sprintf(&keyword[i*FLEN_KEYWORD], "WMTX%zu_%zu", i/3+1, i%3+1); gal_fits_key_list_add_end(&headers, GAL_TYPE_FLOAT64, &keyword[i*FLEN_KEYWORD], 0, &m[i], 0, "Warp matrix element value", 0, NULL); } /* Due to floating point errors extremely small values of PC matrix can be set to zero and extremely small differences between PC1_1 and PC2_2 can be ignored. The reason for all the `fabs' functions is because the signs are usually different.*/ if( fabs(wcs->pc[1])<ABSOLUTEFLTERROR ) wcs->pc[1]=0.0f; if( fabs(wcs->pc[2])<ABSOLUTEFLTERROR ) wcs->pc[2]=0.0f; diff=fabs(wcs->pc[0])-fabs(wcs->pc[3]); if( fabs(diff/p->pixelscale[0])<RELATIVEFLTERROR ) wcs->pc[3] = ( (wcs->pc[3] < 0.0f ? -1.0f : 1.0f) * fabs(wcs->pc[0]) ); /* Save the output into the proper type and write it. */ if(p->cp.type!=p->output->type) p->output=gal_data_copy_to_new_type_free(p->output, p->cp.type); gal_fits_img_write(p->output, p->cp.output, headers, PROGRAM_NAME); } /***************************************************************/ /************** Outside function ******************/ /***************************************************************/ void warp(struct warpparams *p) { int err; pthread_t t; /* All thread ids saved in this, not used. */ pthread_attr_t attr; pthread_barrier_t b; struct iwpparams *iwp; size_t nt=p->cp.numthreads; size_t i, nb, *indexs, thrdcols; /* Array keeping thread parameters for each thread. */ errno=0; iwp=malloc(nt*sizeof *iwp); if(iwp==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for iwp", __func__, nt*sizeof *iwp); /* Prepare the output array and all the necessary things: */ warp_preparations(p); /* Distribute the output pixels into the threads: */ gal_threads_dist_in_threads(p->output->size, nt, &indexs, &thrdcols); /* Start the convolution. */ if(nt==1) { iwp[0].p=p; iwp[0].indexs=indexs; warp_onthread(&iwp[0]); } else { /* Initialize the attributes. Note that this running thread (that spinns off the nt threads) is also a thread, so the number the barrier should be one more than the number of threads spinned off. */ if(p->output->size<nt) nb=p->output->size+1; else nb=nt+1; gal_threads_attr_barrier_init(&attr, &b, nb); /* Spin off the threads: */ for(i=0;i<nt;++i) if(indexs[i*thrdcols]!=GAL_BLANK_SIZE_T) { iwp[i].p=p; iwp[i].b=&b; iwp[i].indexs=&indexs[i*thrdcols]; err=pthread_create(&t, &attr, warp_onthread, &iwp[i]); if(err) error(EXIT_FAILURE, 0, "%s: can't create thread %zu", __func__, i); } /* Wait for all threads to finish and free the spaces. */ pthread_barrier_wait(&b); pthread_attr_destroy(&attr); pthread_barrier_destroy(&b); } /* Save the output. */ correct_wcs_save_output(p); /* Free the allocated spaces: */ free(iwp); free(indexs); gal_data_free(p->output); } ���������������������������������������������������gnuastro-0.5/bin/warp/ui.c��������������������������������������������������������������������������0000644�0001750�0001750�00000070373�13216276304�012461� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <gnuastro/wcs.h> #include <gnuastro/fits.h> #include <gnuastro/table.h> #include <gnuastro/threads.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will warp/transform the " "input image using an input coordinate matrix. Currently it accepts any " "general projective mapping (which includes affine mappings as a " "subset). \n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct warpparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Set the mandatory common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct warpparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: if(p->inputname) argp_error(state, "only one argument (input file) should be given"); else p->inputname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /********** Modular matrix linked list *************/ /**************************************************************/ /* Save the codes of the user's desired modular warpings into the linked list. Because the types of these options are `GAL_TYPE_INVALID', this function will not be called when printing the full list of parameters and their values. */ static void * ui_add_to_modular_warps_ll(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { size_t i; double tmp; gal_data_t *new; struct warpparams *p=(struct warpparams *)params; /* Parse the (possible) arguments. */ if(option->key==UI_KEY_ALIGN) { /* For functions the standard checking isn't done, so first, we'll make sure that if we are in a configuration file (where `arg!=NULL'), the value is either 0 or 1. */ if( arg && strcmp(arg, "0") && strcmp(arg, "1") ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the `--align' " "option takes no arguments. In a configuration file " "it can only have the values `1' or `0', indicating " "if it should be used or not"); /* Align doesn't take any values, but if called in a configuration file with a value of `0', we should ignore it. */ if(arg && *arg=='0') return NULL; /* Allocate the data structure. */ new=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 0, NULL, NULL, 0, -1, NULL, NULL, NULL); } else new=gal_options_parse_list_of_numbers(arg, filename, lineno); /* If this was a matrix, then put it in the matrix element of the main data structure. Otherwise, add the list of given values to the modular warpings list. */ if(option->key==UI_KEY_MATRIX) { /* Some sanity checks. */ if(p->matrix) error_at_line(EXIT_FAILURE, 0, filename, lineno, "only one matrix " "may be given, you can use multiple modular warpings"); if(new->size!=4 && new->size!=9) error_at_line(EXIT_FAILURE, 0, filename, lineno, "only a 4 or 9 " "element `matrix' is currently acceptable. `%s' has " "%zu elements", arg, new->size); /* Keep the matrix in the main structure. */ p->matrix=new; } else { /* No more than two numbers should be given for the modular warpings. */ if(new->size>2) error_at_line(EXIT_FAILURE, 0, filename, lineno, "%zu numbers " "given to the `%s' option. Modular warpings can " "accept 2 numbers at the most currently (for 2D " "datasets)", new->size, option->name); /* Some modular-warp specific sanity checks: rotate only needs one number, and flip's values should only be 0 and 1. */ if(option->key==UI_KEY_ROTATE) { if(new->size!=1) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the `rotate' " "option only takes one value (the angle of rotation). " "You have given: `%s'", arg); } else if (option->key==UI_KEY_FLIP) { for(i=0;i<new->size;++i) { tmp=((double *)(new->array))[i]; if(tmp!=0.0f && tmp!=1.0f) error_at_line(EXIT_FAILURE, 0, filename, lineno, "`flip' " "only takes values of `1' and `0'. You have " "given `%s'", arg); } } /* Keep the final value. */ new->status=option->key; new->next=p->modularll; p->modularll=new; } return NULL; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ static void ui_check_options_and_arguments(struct warpparams *p) { /* Read the input.*/ if(p->inputname) { /* Make sure a HDU is given. */ if( gal_fits_name_is_fits(p->inputname) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified, you can use the `--hdu' " "(`-h') option and give it the HDU number (starting from " "zero), or extension name (generally, anything acceptable " "by CFITSIO)"); /* Read the input image as double type and its WCS structure. */ p->input=gal_fits_img_read_to_type(p->inputname, p->cp.hdu, GAL_TYPE_FLOAT64, p->cp.minmapsize, p->hstartwcs, p->hendwcs); if(p->input->wcs) { p->pixelscale=gal_wcs_pixel_scale(p->input->wcs); p->inwcsmatrix=gal_wcs_warp_matrix(p->input->wcs); } } else error(EXIT_FAILURE, 0, "no input file is specified"); } /**************************************************************/ /*************** Matrix preparations ******************/ /**************************************************************/ static void ui_error_no_warps() { error(EXIT_FAILURE, 0, "no warping specified, you can either use the " "`--matrix' option for any low-level warp, or specify multipole " "modular warpings with options like `--rotate', `--scale' and etc. " "You can see the full list with the `--help' option"); } /* This function is mainly for easy checking/debugging. */ static void ui_matrix_print(double *matrix) { printf("%-10.3f%-10.3f%-10.3f\n", matrix[0], matrix[1], matrix[2]); printf("%-10.3f%-10.3f%-10.3f\n", matrix[3], matrix[4], matrix[5]); printf("%-10.3f%-10.3f%-10.3f\n", matrix[6], matrix[7], matrix[8]); } static void ui_matrix_prepare_raw(struct warpparams *p) { size_t *dsize; double *in=p->matrix->array, *final; /* If the matrix was 2D, then convert it to 3D. Note that we done a size check when reading the matrix, so at this point, it either has 9 elements, or 4. */ if(p->matrix->size==4) { /* Allocate the final matrix. */ final=gal_data_malloc_array(GAL_TYPE_FLOAT64, 9, __func__, "final"); /* Fill in the final 3x3 matrix from the 2x2 matrix. */ final[0]=in[0]; final[1]=in[1]; final[2]=0.0f; final[3]=in[2]; final[4]=in[3]; final[5]=0.0f; final[6]=0.0f; final[7]=0.0f; final[8]=1.0f; /* Free the old matrix array and put in the new one. */ free(p->matrix->array); p->matrix->size=9; p->matrix->array=final; } /* Correct the dimensional information, because the matrix was read as a single dimensional list of numbers. */ free(p->matrix->dsize); dsize=p->matrix->dsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, 2, __func__, "dsize"); dsize[0]=dsize[1]=3; p->matrix->ndim=2; } /* Set the matrix so the image is aligned with the axises. Note that WCSLIB automatically fills the CRPI */ static void ui_matrix_make_align(struct warpparams *p, double *tmatrix) { double A, *w, *P, x[4]; /* Make sure the input image had a WCS structure. */ if(p->input->wcs==NULL) error(EXIT_FAILURE, 0, "%s (hdu: %s): no WCS information present, " "hence the `--align' option cannot be used", p->inputname, p->cp.hdu); /* Check if there is only two WCS axises: */ if(p->input->wcs->naxis!=2) error(EXIT_FAILURE, 0, "the WCS structure of %s (hdu: %s) has %d " "axises. For the `--align' option to operate it must be 2", p->inputname, p->cp.hdu, p->input->wcs->naxis); /* For help in reading, use aliases for the WCS matrix and pixel scale.*/ P=p->pixelscale; w=p->inwcsmatrix; /* Lets call the given WCS orientation `W', the rotation matrix we want to find as `X' and the final (aligned matrix) `P' (which is the pixel scale): x0 x1 w0 w1 -P0 0 x2 x3 * w2 w3 = 0 P1 Let's open up the matrix multiplication, so we can find the `X' elements as function of the `W' elements and `a'. x0*w0 + x1*w2 = -P0 (1) x0*w1 + x1*w3 = 0 (2) x2*w0 + x3*w2 = 0 (3) x2*w1 + x3*w3 = P1 (4) Let's bring the X with the smaller index in each equation to the left side: x0 = (-w2/w0)*x1 - P0/w0 (5) x0 = (-w3/w1)*x1 (6) x2 = (-w2/w0)*x3 (7) x2 = (-w3/w1)*x3 + P1/w1 (8) Using (5) and (6) we can find x0 and x1, by first eliminating x0: (-w2/w0)*x1 - P0/w0 = (-w3/w1)*x1 -> (w3/w1 - w2/w0) * x1 = P0/w0 For easy reading/writing, let's define: A = (w3/w1 - w2/w0) --> x1 = P0 / w0 / A --> x0 = -1 * x1 * w3 / w1 Similar to the above, we can find x2 and x3 from (7) and (8): (-w2/w0)*x3 = (-w3/w1)*x3 + P1/w1 -> (w3/w1 - w2/w0) * x3 = P1/w1 --> x3 = P1 / w1 / A --> x2 = -1 * x3 * w2 / w0 Note that when the image is already aligned (off-diagonals are zero), only the signs of the diagonal elements matter. */ if( w[1]==0.0f && w[2]==0.0f ) { x[0] = w[0]<0 ? 1.0f : -1.0f; /* Has to be negative. */ x[1] = 0.0f; x[2] = 0.0f; x[3] = w[3]>0 ? 1.0f : -1.0f; /* Has to be positive. */ } else { A = (w[3]/w[1]) - (w[2]/w[0]); x[1] = P[0] / w[0] / A; x[3] = P[1] / w[1] / A; x[0] = -1 * x[1] * w[3] / w[1]; x[2] = -1 * x[3] * w[2] / w[0]; } /* For a check: printf("ps: (%e, %e)\n", P[0], P[1]); printf("w:\n"); printf(" %.8e %.8e\n", w[0], w[1]); printf(" %.8e %.8e\n", w[2], w[3]); printf("x:\n"); printf(" %.8e %.8e\n", x[0], x[1]); printf(" %.8e %.8e\n", x[2], x[3]); exit(0); */ /* Put the matrix elements into the output array: */ tmatrix[0]=x[0]; tmatrix[1]=x[1]; tmatrix[2]=0.0f; tmatrix[3]=x[2]; tmatrix[4]=x[3]; tmatrix[5]=0.0f; tmatrix[6]=0.0f; tmatrix[7]=0.0f; tmatrix[8]=1.0f; } static void ui_matrix_inplacw_multiply(double *in, double *with) { /* `tin' will keep the values of the input array because we want to write the multiplication result in the input array. */ double tin[9]={in[0],in[1],in[2],in[3],in[4],in[5],in[6],in[7],in[8]}; /* For easy checking, here are the matrix/memory layouts: tin[0] tin[1] tin[2] with[0] with[1] with[2] tin[3] tin[4] tin[5] * with[3] with[4] with[5] tin[6] tin[7] tin[8] with[6] with[7] with[8] */ in[0] = tin[0]*with[0] + tin[1]*with[3] + tin[2]*with[6]; in[1] = tin[0]*with[1] + tin[1]*with[4] + tin[2]*with[7]; in[2] = tin[0]*with[2] + tin[1]*with[5] + tin[2]*with[8]; in[3] = tin[3]*with[0] + tin[4]*with[3] + tin[5]*with[6]; in[4] = tin[3]*with[1] + tin[4]*with[4] + tin[5]*with[7]; in[5] = tin[3]*with[2] + tin[4]*with[5] + tin[5]*with[8]; in[6] = tin[6]*with[0] + tin[7]*with[3] + tin[8]*with[6]; in[7] = tin[6]*with[1] + tin[7]*with[4] + tin[8]*with[7]; in[8] = tin[6]*with[2] + tin[7]*with[5] + tin[8]*with[8]; } static void ui_matrix_from_modular(struct warpparams *p) { gal_data_t *pop; size_t dsize[]={3,3}; double s, c, v1, v2, *final, module[9]={1,0,0, 0,1,0, 0,0,1}; /* Reverse the list of modular warpings to be in the same order as the user specified.*/ gal_list_data_reverse(&p->modularll); /* Allocate space for the final matrix. */ p->matrix=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, dsize, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); final=p->matrix->array; /* Fill in the final matrix to start with. */ final[0]=1.0f; final[1]=0.0f; final[2]=0.0f; final[3]=0.0f; final[4]=1.0f; final[5]=0.0f; final[6]=0.0f; final[7]=0.0f; final[8]=1.0f; /* Apply all modular warps. */ while(p->modularll) { /* Pop the top element. */ pop=gal_list_data_pop(&p->modularll); /* Set the (possibly) two values given for this warp. */ v1 = pop->ndim ? ((double *)(pop->array))[0] : 0.0f; v2 = pop->size>1 ? ((double *)(pop->array))[1] : v1; /* Depending on the type of the modular warp do it. Recall that the code for the warp, was stored in the `status' element of the data structure.*/ switch(pop->status) { case UI_KEY_ALIGN: ui_matrix_make_align(p, module); break; case UI_KEY_ROTATE: s = sin( v1 * M_PI / 180 ); c = cos( v1 * M_PI / 180 ); module[0]=c; module[1]=-1.0f*s; module[2]=0.0f; module[3]=s; module[4]=c; module[5]=0.0f; module[6]=0.0f; module[7]=0.0f; module[8]=1.0f; break; case UI_KEY_SCALE: module[0]=v1; module[1]=0.0f; module[2]=0.0f; module[3]=0.0f; module[4]=v2; module[5]=0.0f; module[6]=0.0f; module[7]=0.0f; module[8]=1.0f; break; case UI_KEY_FLIP: if ( v1==1.0f && v2==0.0f ) { module[0]=1.0f; module[1]=0.0f; module[3]=0.0f; module[4]=-1.0f; } else if ( v1==0.0f && v2==1.0f ) { module[0]=-1.0f; module[1]=0.0f; module[3]=0.0f; module[4]=1.0f; } else if ( v1==1.0f && v2==1.0f ) { module[0]=-1.0f; module[1]=0.0f; module[3]=0.0f; module[4]=-1.0f; } else /* When both are zero, just in case! */ { module[0]=1.0f; module[1]=0.0f; module[3]=0.0f; module[4]=1.0f; } module[2]=0.0f; module[5]=0.0f; module[6]=0.0f; module[7]=0.0f; module[8]=1.0f; break; case UI_KEY_SHEAR: module[0]=1.0f; module[1]=v1; module[2]=0.0f; module[3]=v2; module[4]=1.0f; module[5]=0.0f; module[6]=0.0f; module[7]=0.0f; module[8]=1.0f; break; case UI_KEY_TRANSLATE: module[0]=1.0f; module[1]=0.0f; module[2]=v1; module[3]=0.0f; module[4]=1.0f; module[5]=v2; module[6]=0.0f; module[7]=0.0f; module[8]=1.0f; break; case UI_KEY_PROJECT: module[0]=1.0f; module[1]=0.0f; module[2]=0.0f; module[3]=0.0f; module[4]=1.0f; module[5]=0.0f; module[6]=v1; module[7]=v2; module[8]=1.0f; break; default: error(EXIT_FAILURE, 0, "a bug! the code %d is not recognized as " "a valid modular warp in `ui_matrix_from_modular', this is " "not your fault, something in the programming has gone " "wrong. Please contact us at %s so we can correct it", pop->status, PACKAGE_BUGREPORT); } /* Multiply the main matrix with this modular matrix. */ ui_matrix_inplacw_multiply(p->matrix->array, module); /* Clean up. */ gal_data_free(pop); } } static void ui_matrix_center_on_corner(struct warpparams *p) { double *b, *d, *df; double before[9]={1,0,0.5,0,1,0.5,0,0,1}; double after[9]={1,0,-0.5,0,1,-0.5,0,0,1}; /* Shift the matrix by +0.5 so the coordinate center lies at the bottom left corner of the first pixel. Note that the updated values are written into the first argument of the function.*/ ui_matrix_inplacw_multiply(before, p->matrix->array); /* Translate them back into the proper FITS center. */ ui_matrix_inplacw_multiply(before, after); /* The final matrix is in `before', so put its values into the output matrix. */ b = before; df = (d=p->matrix->array) + p->matrix->size; do *d=*b++; while(++d<df); } static void ui_matrix_finalize(struct warpparams *p) { double *d, *df, *inv; /* If a matrix string is not given, the use the modular warpings. */ if(p->matrix) ui_matrix_prepare_raw(p); else if (p->modularll) ui_matrix_from_modular(p); else ui_error_no_warps(); /* If the user has asked for it, set the coordinate center on the corner of the first pixel. */ if(p->centeroncorner) ui_matrix_center_on_corner(p); /* Check if there are any non-normal numbers in the matrix: */ df=(d=p->matrix->array)+p->matrix->size; do if(!isfinite(*d++)) { ui_matrix_print(p->matrix->array); error(EXIT_FAILURE, 0, "%f is not a `normal' number in the " "input matrix shown above", *(d-1)); } while(d<df); /* Check if the determinant is not zero: */ d=p->matrix->array; if( d[0]*d[4]*d[8] + d[1]*d[5]*d[6] + d[2]*d[3]*d[7] - d[2]*d[4]*d[6] - d[1]*d[3]*d[8] - d[0]*d[5]*d[7] == 0 ) error(EXIT_FAILURE, 0, "the determinant of the given matrix " "is zero"); /* Note yet implemented: Check if the transformation is spatially invariant, in other words, if it differs between differet regions of the output. If it doesn't we can use this information for a more efficient processing. */ /* Make the inverse matrix: */ inv=p->inverse=gal_data_malloc_array(GAL_TYPE_FLOAT64, 9, __func__, "p->inverse"); inv[0] = d[4]*d[8] - d[5]*d[7]; inv[1] = d[2]*d[7] - d[1]*d[8]; inv[2] = d[1]*d[5] - d[2]*d[4]; inv[3] = d[5]*d[6] - d[3]*d[8]; inv[4] = d[0]*d[8] - d[2]*d[6]; inv[5] = d[2]*d[3] - d[0]*d[5]; inv[6] = d[3]*d[7] - d[4]*d[6]; inv[7] = d[1]*d[6] - d[0]*d[7]; inv[8] = d[0]*d[4] - d[1]*d[3]; /* Just for a test: { size_t i; printf("\nInput matrix:"); for(i=0;i<9;++i) { if(i%3==0) printf("\n"); printf("%-10.5f", d[i]); } printf("\n-----------\n"); printf("Inverse matrix:"); for(i=0;i<9;++i) { if(i%3==0) printf("\n"); printf("%-10.5f", inv[i]); } printf("\n\n"); } */ } /**************************************************************/ /************ General preparations ****************/ /**************************************************************/ /* When only one transformation is required, set the suffix for automatic output to more meaningful string. */ char * ui_set_suffix(struct warpparams *p) { /* A small independent sanity check: we either need a matrix or at least one modular warping. */ if(p->matrix==NULL && p->modularll==NULL) ui_error_no_warps(); /* We only want the more meaningful suffix when the list is defined AND when its only has one node (the `next' element is NULL). */ if(p->matrix==NULL && p->modularll->next==NULL) switch(p->modularll->status) { case UI_KEY_ALIGN: return "_aligned.fits"; case UI_KEY_ROTATE: return "_rotated.fits"; case UI_KEY_SCALE: return "_scaled.fits"; case UI_KEY_FLIP: return "_flipped.fits"; case UI_KEY_SHEAR: return "_sheared.fits"; case UI_KEY_TRANSLATE: return "_translated.fits"; case UI_KEY_PROJECT: return "_projected.fits"; default: error(EXIT_FAILURE, 0, "a bug! please contact us at %s so we can " "fix the problem. The modular warp code %d is not recognized " "in `ui_set_suffix'", PACKAGE_BUGREPORT, p->modularll->status); return NULL; } else return "_warped.fits"; } static void ui_preparations(struct warpparams *p) { /* Set the output name. This needs to be done before `ui_finalize_matrix' because that function will free the linked list of modular warpings which we will need to determine the suffix if no output name is specified. */ if(p->cp.output) gal_checkset_writable_remove(p->cp.output, 0, p->cp.dontdelete); else p->cp.output=gal_checkset_automatic_output(&p->cp, p->inputname, ui_set_suffix(p)); /* Prepare the final warping matrix. */ ui_matrix_finalize(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct warpparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Everything is ready, notify the user of the program starting. */ if(!p->cp.quiet) { double *matrix=p->matrix->array; printf(PROGRAM_NAME" started on %s", ctime(&p->rawtime)); printf(" Using %zu CPU thread%s\n", p->cp.numthreads, p->cp.numthreads==1 ? "." : "s."); printf(" Input: %s (hdu: %s)\n", p->inputname, p->cp.hdu); printf(" matrix:" "\n\t%.4f %.4f %.4f" "\n\t%.4f %.4f %.4f" "\n\t%.4f %.4f %.4f\n", matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5], matrix[6], matrix[7], matrix[8]); } } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct warpparams *p, struct timeval *t1) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->cp.output); gal_data_free(p->input); gal_data_free(p->matrix); if(p->pixelscale) free(p->pixelscale); if(p->inwcsmatrix) free(p->inwcsmatrix); /* Report how long the operation took. */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/warp/main.c������������������������������������������������������������������������0000644�0001750�0001750�00000003005�13121462410�012742� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" #include "warp.h" int main (int argc, char *argv[]) { struct timeval t1; struct warpparams p={{{0},0},0}; /* Set the starting time.*/ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Warp */ warp(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully.*/ return EXIT_SUCCESS; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/warp/Makefile.in�������������������������������������������������������������������0000644�0001750�0001750�00000211221�13217217706�013734� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astwarp$(EXEEXT) subdir = bin/warp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astwarp_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) warp.$(OBJEXT) astwarp_OBJECTS = $(am_astwarp_OBJECTS) astwarp_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astwarp_SOURCES) DIST_SOURCES = $(astwarp_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astwarp_LDADD = -lgnuastro astwarp_SOURCES = main.c ui.c warp.c EXTRA_DIST = main.h authors-cite.h args.h ui.h warp.h dist_sysconf_DATA = astwarp.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/warp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/warp/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astwarp$(EXEEXT): $(astwarp_OBJECTS) $(astwarp_DEPENDENCIES) $(EXTRA_astwarp_DEPENDENCIES) @rm -f astwarp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astwarp_OBJECTS) $(astwarp_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/warp.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/warp/astwarp.conf������������������������������������������������������������������0000644�0001750�0001750�00000001721�13121462410�014205� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for Warp. # Warp is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '(space), or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astwarp --help # Full list of options, short doc. # $ astwarp -P # Print all options and used values. # $ info astwarp # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: # Output: coveredfrac 1.0 # Common parameters type float32 �����������������������������������������������gnuastro-0.5/bin/warp/Makefile.am�������������������������������������������������������������������0000644�0001750�0001750�00000002552�13121462410�013714� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astwarp astwarp_LDADD = -lgnuastro astwarp_SOURCES = main.c ui.c warp.c EXTRA_DIST = main.h authors-cite.h args.h ui.h warp.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astwarp.conf ������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/table/�����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220467�012064� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/table/table.h����������������������������������������������������������������������0000644�0001750�0001750�00000002054�13121462410�013233� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef TABLE_H #define TABLE_H void table(struct tableparams *p); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/table/ui.h�������������������������������������������������������������������������0000644�0001750�0001750�00000003044�13174462540�012575� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Available letters for short options: a b d e f g j k l m n p r s t u v w x y z A B C E G H J L O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_COLUMN = 'c', UI_KEY_INFORMATION = 'i', /* Only with long version (start with a value 1000, the rest will be set automatically). */ }; void ui_read_check_inputs_setup(int argc, char *argv[], struct tableparams *p); void ui_free_report(struct tableparams *p); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/table/args.h�����������������������������������������������������������������������0000644�0001750�0001750�00000004334�13121462410�013103� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { "column", UI_KEY_COLUMN, "STR", 0, "Column number (counting from 1) or search string.", GAL_OPTIONS_GROUP_INPUT, &p->columns, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "information", UI_KEY_INFORMATION, 0, 0, "Only print table and column information.", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->information, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/table/authors-cite.h���������������������������������������������������������������0000644�0001750�0001750�00000002767�13211076737�014603� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif ���������gnuastro-0.5/bin/table/main.h�����������������������������������������������������������������������0000644�0001750�0001750�00000003726�13121462410�013077� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "Table" /* Program full name. */ #define PROGRAM_EXEC "asttable" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Main program parameters structure */ struct tableparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ char *filename; /* Input filename. */ gal_list_str_t *columns; /* List of given columns. */ uint8_t information; /* ==1, only print FITS information. */ /* Output: */ gal_data_t *table; /* Linked list of output table columns. */ gal_data_t *allcolinfo; /* Information of all the columns. */ time_t rawtime; /* Starting time of the program. */ }; #endif ������������������������������������������gnuastro-0.5/bin/table/table.c����������������������������������������������������������������������0000644�0001750�0001750�00000003134�13175442274�013245� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <gnuastro/fits.h> #include <gnuastro/table.h> #include <gnuastro-internal/checkset.h> #include "main.h" /**************************************************************/ /*************** Top function *******************/ /**************************************************************/ void table(struct tableparams *p) { gal_checkset_writable_remove(p->cp.output, 0, p->cp.dontdelete); gal_table_write(p->table, NULL, p->cp.tableformat, p->cp.output, "TABLE"); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/table/ui.c�������������������������������������������������������������������������0000644�0001750�0001750�00000025525�13211616535�012575� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <gnuastro/fits.h> #include <gnuastro/table.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" can be used to view the " "information, select columns, or convert tables. The inputs and outputs " "can be plain text (with white-space or comma as delimiters), FITS ascii, " "or FITS binary tables. The output columns can either be selected by " "number (counting from 1), name or using regular expressions. For regular " "expressions, enclose the value to the `--column' (`-c') option in " "slashes (`\\', as in `-c\\^mag\\'). To print the selected columns on the " "command-line, don't specify an output file.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct tableparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct tableparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: if(p->filename) argp_error(state, "only one argument (input file) should be given"); else p->filename=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct tableparams *p) { /* Check if the format of the output table is valid, given the type of the output. */ gal_tableintern_check_fits_format(p->cp.output, p->cp.tableformat); } static void ui_check_options_and_arguments(struct tableparams *p) { /* Make sure an input file name was given and if it was a FITS file, that a HDU is also given. */ if(p->filename) { if( gal_fits_name_is_fits(p->filename) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a FITS " "file, a HDU must also be specified, you can use the `--hdu' " "(`-h') option and give it the HDU number (starting from " "zero), extension name, or anything acceptable by CFITSIO"); } else error(EXIT_FAILURE, 0, "no input file is specified"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ void ui_print_info_exit(struct tableparams *p) { char *tmp; int tableformat; gal_data_t *allcols; size_t i, numcols, numrows; /* Read the table information for the number of columns and rows. */ allcols=gal_table_info(p->filename, p->cp.hdu, &numcols, &numrows, &tableformat); /* If there was no actual data in the file, then inform the user */ if(allcols==NULL) error(EXIT_FAILURE, 0, "%s: no usable data rows", p->filename); /* Print the file information. */ printf("--------\n"); tmp=gal_fits_name_save_as_string(p->filename, p->cp.hdu); printf("%s\n", tmp); free(tmp); /* Print each column's information. */ gal_table_print_info(allcols, numcols, numrows); /* Free the information from all the columns. */ for(i=0;i<numcols;++i) gal_data_free_contents(&allcols[i]); free(allcols); /* Free the allocated spaces and exit. Otherwise, add the number of columns to the list if the user wanted to print the columns (didn't just want their information. */ ui_free_report(p); exit(EXIT_SUCCESS); } void ui_preparations(struct tableparams *p) { struct gal_options_common_params *cp=&p->cp; /* If there were no columns specified or the user has asked for information on the columns, we want the full set of columns. */ if(p->information) ui_print_info_exit(p); /* Read in the table columns. */ p->table=gal_table_read(p->filename, cp->hdu, p->columns, cp->searchin, cp->ignorecase, cp->minmapsize, NULL); /* If there was no actual data in the file, then inform the user and abort. */ if(p->table==NULL) error(EXIT_FAILURE, 0, "%s: no usable data rows (non-commented and " "non-blank lines)", p->filename); /* Now that the data columns are ready, we can free the string linked list. */ gal_list_str_free(p->columns, 1); p->columns=NULL; } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct tableparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct tableparams *p) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->cp.output); gal_list_data_free(p->table); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/table/main.c�����������������������������������������������������������������������0000644�0001750�0001750�00000003142�13121462410�013062� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" /* needs main.h. */ #include "table.h" /* needs main.h. */ /* Main function */ int main (int argc, char *argv[]) { struct tableparams p={{{0},0},0}; /* Set they starting time. */ time(&p.rawtime); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ table(&p); /* Free all non-freed allocations. */ ui_free_report(&p); /* Return successfully.*/ return EXIT_SUCCESS; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/table/Makefile.in������������������������������������������������������������������0000644�0001750�0001750�00000211251�13217217706�014055� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = asttable$(EXEEXT) subdir = bin/table ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_asttable_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) table.$(OBJEXT) asttable_OBJECTS = $(am_asttable_OBJECTS) asttable_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(asttable_SOURCES) DIST_SOURCES = $(asttable_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib asttable_LDADD = -lgnuastro asttable_SOURCES = main.c ui.c table.c EXTRA_DIST = main.h authors-cite.h args.h ui.h table.h dist_sysconf_DATA = asttable.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/table/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/table/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list asttable$(EXEEXT): $(asttable_OBJECTS) $(asttable_DEPENDENCIES) $(EXTRA_asttable_DEPENDENCIES) @rm -f asttable$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asttable_OBJECTS) $(asttable_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/table.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/table/asttable.conf����������������������������������������������������������������0000644�0001750�0001750�00000001577�13121462410�014452� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for Table. # Table is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ asttable --help # Full list of options, short doc. # $ asttable -P # Print all options and used values. # $ info asttable # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. ���������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/table/Makefile.am������������������������������������������������������������������0000644�0001750�0001750�00000002560�13121462410�014031� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2016, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = asttable asttable_LDADD = -lgnuastro asttable_SOURCES = main.c ui.c table.c EXTRA_DIST = main.h authors-cite.h args.h ui.h table.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = asttable.conf ������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220467�013167� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/statistics.h������������������������������������������������������������0000644�0001750�0001750�00000002104�13121462410�015435� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef STATISTICS_H #define STATISTICS_H void statistics(struct statisticsparams *p); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/sky.h�������������������������������������������������������������������0000644�0001750�0001750�00000002057�13121462410�014060� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef SKY_H #define SKY_H void sky(struct statisticsparams *p); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/ui.h��������������������������������������������������������������������0000644�0001750�0001750�00000005262�13174462540�013704� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_SINGLE_VALUE = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_PARTICULAR_STAT, UI_GROUP_SKY, UI_GROUP_HIST_CFP, }; /* Available letters for short options: a b e f j p v w x z B G J L R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_COLUMN = 'c', UI_KEY_REFCOL = 'r', UI_KEY_GREATEREQUAL = 'g', UI_KEY_LESSTHAN = 'l', UI_KEY_QRANGE = 'Q', UI_KEY_MEAN = 'm', UI_KEY_STD = 'd', UI_KEY_MEDIAN = 'E', UI_KEY_MODE = 'O', UI_KEY_QUANTILE = 'u', UI_KEY_ASCIIHIST = 'A', UI_KEY_HISTOGRAM = 'H', UI_KEY_CUMULATIVE = 'C', UI_KEY_SIGMACLIP = 's', UI_KEY_NORMALIZE = 'n', UI_KEY_ONTILE = 't', UI_KEY_INTERPOLATE = 'i', UI_KEY_SKY = 'y', UI_KEY_KERNEL = 'k', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_NUMBER = 1000, UI_KEY_MINIMUM, UI_KEY_MAXIMUM, UI_KEY_SUM, UI_KEY_MODEQUANT, UI_KEY_MODESYM, UI_KEY_MODESYMVALUE, UI_KEY_QUANTFUNC, UI_KEY_ASCIICFP, UI_KEY_MIRROR, UI_KEY_NUMBINS, UI_KEY_NUMASCIIBINS, UI_KEY_ASCIIHEIGHT, UI_KEY_LOWERBIN, UI_KEY_ONEBINSTART, UI_KEY_MAXBINONE, UI_KEY_KHDU, UI_KEY_MIRRORDIST, UI_KEY_MODMEDQDIFF, UI_KEY_SMOOTHWIDTH, UI_KEY_CHECKSKY, UI_KEY_SCLIPPARAMS, }; /* Functions */ void ui_read_check_inputs_setup(int argc, char *argv[], struct statisticsparams *p); void ui_free_report(struct statisticsparams *p); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/args.h������������������������������������������������������������������0000644�0001750�0001750�00000033142�13174462540�014221� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { "column", UI_KEY_COLUMN, "STR", 0, "Column name or number if input is a table.", GAL_OPTIONS_GROUP_INPUT, &p->column, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "refcol", UI_KEY_REFCOL, "STR", 0, "Reference column name or number.", GAL_OPTIONS_GROUP_INPUT, &p->refcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "greaterequal", UI_KEY_GREATEREQUAL, "FLT", 0, "Only use values greater-equal than this.", GAL_OPTIONS_GROUP_INPUT, &p->greaterequal, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "lessthan", UI_KEY_LESSTHAN, "FLT", 0, "Only use values less than this.", GAL_OPTIONS_GROUP_INPUT, &p->lessthan, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "qrange", UI_KEY_QRANGE, "FLT[,FLT]", 0, "Quantile range: one (from Q to 1-Q) or two.", GAL_OPTIONS_GROUP_INPUT, NULL, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_read_quantile_range }, /* Tessellation */ { "interpolate", UI_KEY_INTERPOLATE, 0, 0, "Interpolate over blank tiles to fill them.", GAL_OPTIONS_GROUP_TESSELLATION, &p->interpolate, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Single value measurements", UI_GROUP_SINGLE_VALUE }, { "number", UI_KEY_NUMBER, 0, 0, "Number (non-blank).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "minimum", UI_KEY_MINIMUM, 0, 0, "Minimum.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "maximum", UI_KEY_MAXIMUM, 0, 0, "Maximum.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "sum", UI_KEY_SUM, 0, 0, "Sum.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "mean", UI_KEY_MEAN, 0, 0, "Mean.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "std", UI_KEY_STD, 0, 0, "Standad deviation.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "median", UI_KEY_MEDIAN, 0, 0, "Median.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "quantile", UI_KEY_QUANTILE, "FLT[,...]", 0, "Quantile (multiple values acceptable).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "quantfunc", UI_KEY_QUANTFUNC, "FLT[,...]", 0, "Quantile function (multiple values acceptable).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "mode", UI_KEY_MODE, 0, 0, "Mode (Appendix C of arXiv:1505.01664).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "modequant", UI_KEY_MODEQUANT, 0, 0, "Mode quantile (see --mode)", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "modesym", UI_KEY_MODESYM, 0, 0, "Mode symmetricity (see --mode).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "modesymvalue", UI_KEY_MODESYMVALUE, 0, 0, "Value at mode symmetricity (see --mode).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { 0, 0, 0, 0, "Particular calculation", UI_GROUP_PARTICULAR_STAT }, { "asciihist", UI_KEY_ASCIIHIST, 0, 0, "Print an ASCII histogram.", UI_GROUP_PARTICULAR_STAT, &p->asciihist, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "asciicfp", UI_KEY_ASCIICFP, 0, 0, "Print an ASCII cumulative frequency plot.", UI_GROUP_PARTICULAR_STAT, &p->asciicfp, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "histogram", UI_KEY_HISTOGRAM, 0, 0, "Save the histogram in output.", UI_GROUP_PARTICULAR_STAT, &p->histogram, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "cumulative", UI_KEY_CUMULATIVE, 0, 0, "Save the cumulative frequency plot in output.", UI_GROUP_PARTICULAR_STAT, &p->cumulative, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mirror", UI_KEY_MIRROR, "FLT", 0, "Save the histogram and CFP of the mirror dist.", UI_GROUP_PARTICULAR_STAT, &p->mirror, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "ontile", UI_KEY_ONTILE, 0, 0, "Single values on separate tiles, not full input.", UI_GROUP_PARTICULAR_STAT, &p->ontile, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sky", UI_KEY_SKY, 0, 0, "Find the Sky and its STD over the tessellation.", UI_GROUP_PARTICULAR_STAT, &p->sky, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sigmaclip", UI_KEY_SIGMACLIP, 0, 0, "Overall sigma-clipping (see `--sclipparams')", UI_GROUP_PARTICULAR_STAT, &p->sigmaclip, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Sky and Sky STD settings", UI_GROUP_SKY }, { "kernel", UI_KEY_KERNEL, "STR", 0, "File name of kernel to convolve input.", UI_GROUP_SKY, &p->kernelname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "khdu", UI_KEY_KHDU, "STR", 0, "HDU/extension name or number of kernel.", UI_GROUP_SKY, &p->khdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mirrordist", UI_KEY_MIRRORDIST, "FLT", 0, "Max. distance (error multip.) to find mode.", UI_GROUP_SKY, &p->mirrordist, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "modmedqdiff", UI_KEY_MODMEDQDIFF, "FLT", 0, "Max. mode and median quantile diff. per tile.", UI_GROUP_SKY, &p->modmedqdiff, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sclipparams", UI_KEY_SCLIPPARAMS, "FLT,FLT", 0, "Sigma clip: Multiple, and tolerance/number.", UI_GROUP_SKY, p->sclipparams, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_sigma_clip }, { "smoothwidth", UI_KEY_SMOOTHWIDTH, "INT", 0, "Sky: flat kernel width to smooth interpolated.", UI_GROUP_SKY, &p->smoothwidth, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_0_OR_ODD, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checksky", UI_KEY_CHECKSKY, 0, 0, "Store steps in `_sky_steps.fits' file.", UI_GROUP_SKY, &p->checksky, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Histogram and CFP settings", UI_GROUP_HIST_CFP }, { "numbins", UI_KEY_NUMBINS, "INT", 0, "No. of bins in histogram or CFP tables.", UI_GROUP_HIST_CFP, &p->numbins, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "numasciibins", UI_KEY_NUMASCIIBINS, "INT", 0, "No. of bins in ASCII histogram or CFP plots.", UI_GROUP_HIST_CFP, &p->numasciibins, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "asciiheight", UI_KEY_ASCIIHEIGHT, "INT", 0, "Height of ASCII histogram or CFP plots.", UI_GROUP_HIST_CFP, &p->asciiheight, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "normalize", UI_KEY_NORMALIZE, 0, 0, "Set sum of all bins to 1.", UI_GROUP_HIST_CFP, &p->normalize, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "maxbinone", UI_KEY_MAXBINONE, 0, 0, "Scale such that the maximum bin has value of one.", UI_GROUP_HIST_CFP, &p->maxbinone, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "onebinstart", UI_KEY_ONEBINSTART, "FLT", 0, "Shift bins so one bin starts on this value.", UI_GROUP_HIST_CFP, &p->onebinstart, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/authors-cite.h����������������������������������������������������������0000644�0001750�0001750�00000002773�13211076737�015703� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif �����gnuastro-0.5/bin/statistics/main.h������������������������������������������������������������������0000644�0001750�0001750�00000012010�13121462410�014164� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "Statistics" /* Program full name. */ #define PROGRAM_EXEC "aststatistics" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Input formats. */ enum statistics_input_format { INPUT_FORMAT_INVALID, INPUT_FORMAT_TABLE, INPUT_FORMAT_IMAGE, }; /* Main program parameters structure */ struct statisticsparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_list_i32_t *singlevalue; /* Single value calculations. */ gal_list_f64_t *tp_args; /* Arguments for printing. */ char *inputname; /* Input filename. */ char *column; /* Column name or number if input is table. */ char *refcol; /* Reference column name or number. */ float greaterequal; /* Only use values >= this value. */ float lessthan; /* Only use values < this value. */ float quantmin; /* Quantile min or range: from Q to 1-Q. */ float quantmax; /* Quantile maximum. */ uint8_t ontile; /* Do single value calculations on tiles. */ uint8_t interpolate; /* Use interpolation to fill blank tiles. */ uint8_t asciihist; /* Print an ASCII histogram. */ uint8_t asciicfp; /* Print an ASCII cumulative frequency plot.*/ uint8_t histogram; /* Save histogram in output. */ uint8_t cumulative; /* Save cumulative distibution in output. */ double mirror; /* Mirror value for hist and CFP. */ uint8_t sky; /* Find the Sky value over the image. */ uint8_t sigmaclip; /* So sigma-clipping over all dataset. */ size_t numbins; /* Number of bins in histogram or CFP. */ size_t numasciibins; /* Number of bins in ASCII plots. */ size_t asciiheight; /* Height of ASCII histogram or CFP plots. */ uint8_t normalize; /* set the sum of all bins to 1. */ float onebinstart; /* Shift bins to start at this value. */ uint8_t maxbinone; /* Set the maximum bin to 1. */ float mirrordist; /* Maximum distance after mirror for mode. */ char *kernelname; /* File name of kernel to convolve input. */ char *khdu; /* Kernel HDU. */ float modmedqdiff; /* Mode and median quantile difference. */ size_t smoothwidth; /* Width of flat kernel to smooth interpd. */ uint8_t checksky; /* Save the steps for deriving the Sky. */ double sclipparams[2]; /* Muliple and parameter of sigma clipping. */ /* Internal */ uint8_t inputformat; /* Format of input dataset. */ int numoutfiles; /* Number of output files made in this run. */ uint8_t needssort; /* If sorting is needed. */ gal_data_t *input; /* Input data structure. */ gal_data_t *sorted; /* Sorted input data structure. */ gal_data_t *reference; /* Reference data structure. */ int isfits; /* Input is a FITS file. */ int hdu_type; /* Type of HDU (image or table). */ gal_data_t *kernel; /* Kernel for convolution of input for Sky. */ gal_data_t *convolved; /* Convolved input. */ gal_data_t *sky_t; /* Sky on each tile. */ gal_data_t *std_t; /* Sky standard deviation on each tile. */ char *checkskyname; /* Name of file for Sky calculation steps. */ time_t rawtime; /* Starting time of the program. */ }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/statistics.c������������������������������������������������������������0000644�0001750�0001750�00000066543�13175442274�015470� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <errno.h> #include <error.h> #include <float.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/tile.h> #include <gnuastro/blank.h> #include <gnuastro/arithmetic.h> #include <gnuastro/statistics.h> #include <gnuastro/interpolate.h> #include <gnuastro/permutation.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "ui.h" #include "sky.h" #include "statistics.h" /*******************************************************************/ /************** Print in one row ***************/ /*******************************************************************/ static gal_data_t * statistics_pull_out_element(gal_data_t *input, size_t index) { size_t dsize=1; gal_data_t *out=gal_data_alloc(NULL, input->type, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); memcpy( out->array, gal_data_ptr_increment(input->array, index, input->type), gal_type_sizeof(input->type) ); return out; } static double statistics_read_check_args(struct statisticsparams *p) { double d; if(p->tp_args==NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "address the problem. Not enough arguments for the requested " "single measurement options", __func__, PACKAGE_BUGREPORT); d=gal_list_f64_pop(&p->tp_args); return d; } static void statistics_print_one_row(struct statisticsparams *p) { int mustfree; char *toprint; size_t dsize=1; double arg, *d; gal_list_i32_t *tmp; gal_data_t *tmpv, *out=NULL, *num=NULL, *min=NULL, *max=NULL; gal_data_t *sum=NULL, *med=NULL, *meanstd=NULL, *modearr=NULL; /* The user can ask for any of the operators more than once, also some operators might return more than one usable value (like mode). So we will calculate the desired values once, and then print them. */ for(tmp=p->singlevalue; tmp!=NULL; tmp=tmp->next) switch(tmp->v) { /* Calculate respective values. Checking with `if(num==NULL)' gives compiler warnings of `this if clause does not guard ...'. So we are using this empty-if and else statement. */ case UI_KEY_NUMBER: num = num ? num : gal_statistics_number(p->input); break; case UI_KEY_MINIMUM: min = min ? min : gal_statistics_minimum(p->input); break; case UI_KEY_MAXIMUM: max = max ? max : gal_statistics_maximum(p->input); break; case UI_KEY_SUM: sum = sum ? sum : gal_statistics_sum(p->input); break; case UI_KEY_MEDIAN: med = med ? med : gal_statistics_median(p->sorted, 0); break; case UI_KEY_MEAN: case UI_KEY_STD: meanstd = meanstd ? meanstd : gal_statistics_mean_std(p->input); break; case UI_KEY_MODE: case UI_KEY_MODEQUANT: case UI_KEY_MODESYM: case UI_KEY_MODESYMVALUE: modearr = ( modearr ? modearr : gal_statistics_mode(p->sorted, p->mirrordist, 0) ); d=modearr->array; if(d[2]<GAL_STATISTICS_MODE_GOOD_SYM) d[0]=d[1]=NAN; break; /* Will be calculated as printed. */ case UI_KEY_QUANTILE: case UI_KEY_QUANTFUNC: break; /* The option isn't recognized. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we " "can address the problem. Operation code %d not recognized", __func__, PACKAGE_BUGREPORT, tmp->v); } /* Print every requested number. */ for(tmp=p->singlevalue; tmp!=NULL; tmp=tmp->next) { /* By default don't free anything. */ mustfree=0; /* Get the output. */ switch(tmp->v) { /* Previously calculated values. */ case UI_KEY_NUMBER: out=num; break; case UI_KEY_MINIMUM: out=min; break; case UI_KEY_MAXIMUM: out=max; break; case UI_KEY_SUM: out=sum; break; case UI_KEY_MEDIAN: out=med; break; case UI_KEY_MEAN: out=statistics_pull_out_element(meanstd, 0); mustfree=1; break; case UI_KEY_STD: out=statistics_pull_out_element(meanstd, 1); mustfree=1; break; case UI_KEY_MODE: out=statistics_pull_out_element(modearr, 0); mustfree=1; break; case UI_KEY_MODEQUANT: out=statistics_pull_out_element(modearr, 1); mustfree=1; break; case UI_KEY_MODESYM: out=statistics_pull_out_element(modearr, 2); mustfree=1; break; case UI_KEY_MODESYMVALUE: out=statistics_pull_out_element(modearr, 3); mustfree=1; break; /* Not previously calculated. */ case UI_KEY_QUANTILE: arg = statistics_read_check_args(p); out = gal_statistics_quantile(p->sorted, arg, 0); break; case UI_KEY_QUANTFUNC: arg = statistics_read_check_args(p); tmpv = gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); *((double *)(tmpv->array)) = arg; tmpv = gal_data_copy_to_new_type_free(tmpv, p->input->type); out = gal_statistics_quantile_function(p->sorted, tmpv, 0); break; } /* Print the number. */ toprint=gal_type_to_string(out->array, out->type, 0); printf("%s ", toprint); free(toprint); /* Clean up (if necessary). */ if(mustfree) gal_data_free(out); } /* Print a new line. */ printf("\n"); /* Clean any of the allocated arrays. */ if(num) gal_data_free(num); if(min) gal_data_free(min); if(max) gal_data_free(max); if(sum) gal_data_free(sum); if(med) gal_data_free(med); if(meanstd) gal_data_free(meanstd); if(modearr) gal_data_free(modearr); } /*******************************************************************/ /************** Single value on tile ***************/ /*******************************************************************/ static void statistics_interpolate_and_write(struct statisticsparams *p, gal_data_t *values, char *output) { gal_data_t *interpd; struct gal_options_common_params *cp=&p->cp; /* Do the interpolation (if necessary). */ if( p->interpolate && !(p->cp.interponlyblank && gal_blank_present(values, 1)==0) ) { interpd=gal_interpolate_close_neighbors(values, &cp->tl, cp->interpnumngb, cp->numthreads, cp->interponlyblank, 0); gal_data_free(values); values=interpd; } /* Write the values. */ gal_tile_full_values_write(values, &cp->tl, 1, output, NULL, PROGRAM_NAME); } static void statistics_on_tile(struct statisticsparams *p) { double arg=0; gal_list_i32_t *operation; gal_data_t *tile, *values; size_t tind, dsize=1, mind=-1; uint8_t type=GAL_TYPE_INVALID; gal_data_t *tmp=NULL, *tmpv=NULL, *ttmp; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&p->cp.tl; char *output=gal_checkset_automatic_output(cp, cp->output ? cp->output : p->inputname, "_ontile.fits"); /* Do the operation on each tile. */ for(operation=p->singlevalue; operation!=NULL; operation=operation->next) { /* Set the type of the output array. */ switch(operation->v) { case UI_KEY_NUMBER: type=GAL_TYPE_INT32; break; case UI_KEY_MINIMUM: case UI_KEY_MAXIMUM: case UI_KEY_MEDIAN: case UI_KEY_MODE: case UI_KEY_QUANTFUNC: type=p->input->type; break; case UI_KEY_SUM: case UI_KEY_MEAN: case UI_KEY_STD: case UI_KEY_QUANTILE: case UI_KEY_MODEQUANT: case UI_KEY_MODESYM: case UI_KEY_MODESYMVALUE: type=GAL_TYPE_FLOAT64; break; default: error(EXIT_FAILURE, 0, "%s: a bug! %d is not a recognized operation " "code", __func__, operation->v); } /* Allocate the space necessary to keep the value for each tile. */ values=gal_data_alloc(NULL, type, p->input->ndim, tl->numtiles, NULL, 0, p->input->minmapsize, NULL, NULL, NULL); /* Read the argument for those operations that need it. This is done here, because below, the functions are repeated on each tile. */ switch(operation->v) { case UI_KEY_QUANTILE: arg = statistics_read_check_args(p); break; case UI_KEY_QUANTFUNC: arg = statistics_read_check_args(p); tmpv = gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); *((double *)(tmpv->array)) = arg; tmpv = gal_data_copy_to_new_type_free(tmpv, p->input->type); } /* Do the operation on each tile. */ tind=0; for(tile=tl->tiles; tile!=NULL; tile=tile->next) { /* Do the proper operation. */ switch(operation->v) { case UI_KEY_NUMBER: tmp=gal_statistics_number(tile); break; case UI_KEY_MINIMUM: tmp=gal_statistics_minimum(tile); break; case UI_KEY_MAXIMUM: tmp=gal_statistics_maximum(tile); break; case UI_KEY_MEDIAN: tmp=gal_statistics_median(tile, 1); break; case UI_KEY_QUANTFUNC: tmp=gal_statistics_quantile_function(tile, tmpv, 1); break; case UI_KEY_SUM: tmp=gal_statistics_sum(tile); break; case UI_KEY_MEAN: tmp=gal_statistics_mean(tile); break; case UI_KEY_STD: tmp=gal_statistics_std(tile); break; case UI_KEY_QUANTILE: tmp=gal_statistics_quantile(tile, arg, 1); break; case UI_KEY_MODE: case UI_KEY_MODESYM: case UI_KEY_MODEQUANT: case UI_KEY_MODESYMVALUE: switch(operation->v) { case UI_KEY_MODE: mind=0; break; case UI_KEY_MODESYM: mind=2; break; case UI_KEY_MODEQUANT: mind=1; break; case UI_KEY_MODESYMVALUE: mind=3; break; } tmp=gal_statistics_mode(tile, p->mirrordist, 1); ttmp=statistics_pull_out_element(tmp, mind); gal_data_free(tmp); tmp=ttmp; break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to " "fix the problem. The operation code %d is not " "recognized", __func__, PACKAGE_BUGREPORT, operation->v); } /* Put the output value into the `values' array and clean up. */ tmp=gal_data_copy_to_new_type_free(tmp, type); memcpy(gal_data_ptr_increment(values->array, tind++, values->type), tmp->array, gal_type_sizeof(type)); gal_data_free(tmp); } /* Do the interpolation (if necessary) and write the array into the output. */ statistics_interpolate_and_write(p, values, output); /* Clean up. */ gal_data_free(values); if(operation->v==UI_KEY_QUANTFUNC) gal_data_free(tmpv); } /* Clean up. */ free(output); } /*******************************************************************/ /************** ASCII plots ***************/ /*******************************************************************/ static void print_ascii_plot(struct statisticsparams *p, gal_data_t *plot, gal_data_t *bins, int h1_c0, int printinfo) { int i, j; size_t *s, *sf, max=0; double *b, v, halfbinwidth, correction; /* Find the maximum of the plot. */ sf=(s=plot->array)+plot->size; do max = *s>max ? *s : max; while(++s<sf); /* Print the range so the user knows. */ if(printinfo) { b=bins->array; halfbinwidth = (b[1]-b[0])/2; printf("\nASCII %s:\n", ( h1_c0 ? "Histogram" : "Cumulative frequency plot") ); if(h1_c0) printf("Number: %zu\n", p->input->size); printf("Y: (linear: 0 to %zu)\n", max); printf("X: (linear: %g -- %g, in %zu bins)\n", b[0]-halfbinwidth, b[ bins->size - 1 ] + halfbinwidth, bins->size); } /* Print the ASCII plot: */ s=plot->array; correction = (double)(p->asciiheight) / (double)max; for(i=p->asciiheight;i>=0;--i) { printf(" |"); for(j=0;j<plot->size;++j) { v = (double)s[j] * correction; if( v >= ((double)i-0.5f) && v > 0.0f ) printf("*"); else printf(" "); } printf("\n"); } printf(" |"); for(j=0;j<plot->size;++j) printf("-"); printf("\n\n"); } static void ascii_plots(struct statisticsparams *p) { gal_data_t *bins, *hist, *cfp=NULL; /* Make the bins and the respective plot. */ bins=gal_statistics_regular_bins(p->input, NULL, p->numasciibins, NAN); hist=gal_statistics_histogram(p->input, bins, 0, 0); if(p->asciicfp) { bins->next=hist; cfp=gal_statistics_cfp(p->input, bins, 0); } /* Print the plots. */ if(p->asciihist) print_ascii_plot(p, hist, bins, 1, 1); if(p->asciicfp) print_ascii_plot(p, cfp, bins, 0, 1); /* Clean up.*/ gal_data_free(bins); gal_data_free(hist); if(p->asciicfp) gal_data_free(cfp); } /*******************************************************************/ /******* Histogram and cumulative frequency tables ***********/ /*******************************************************************/ void write_output_table(struct statisticsparams *p, gal_data_t *table, char *suf, char *contents) { char *output; int use_auto_output=0; char *fix, *suffix=NULL, *tmp; gal_list_str_t *comments=NULL; /* Automatic output should be used when no output name was specified or we have more than one output file. */ use_auto_output = p->cp.output ? (p->numoutfiles>1 ? 1 : 0) : 1; /* Set the `fix' and `suffix' strings. Note that `fix' is necessary in every case, even when no automatic output is to be used. Since it is used to determine the format of the output. */ fix = ( p->cp.output ? gal_fits_name_is_fits(p->cp.output) ? "fits" : "txt" : "txt" ); if(use_auto_output) asprintf(&suffix, "%s.%s", suf, fix); /* Make the output name. */ output = ( use_auto_output ? gal_checkset_automatic_output(&p->cp, p->inputname, suffix) : p->cp.output ); /* Write the comments, NOTE: we are writing the first two in reverse of the order we want them. They will later be freed as part of the list's freeing.*/ tmp=gal_fits_name_save_as_string(p->inputname, p->cp.hdu); gal_list_str_add(&comments, tmp, 0); asprintf(&tmp, "%s created from:", contents); gal_list_str_add(&comments, tmp, 0); if(strcmp(fix, "fits")) /* The intro info will be in FITS files anyway.*/ gal_table_comments_add_intro(&comments, PROGRAM_NAME, &p->rawtime); /* Write the table. */ gal_checkset_writable_remove(output, 0, p->cp.dontdelete); gal_table_write(table, comments, p->cp.tableformat, output, "TABLE"); /* Let the user know, if we aren't in quiet mode. */ if(!p->cp.quiet) printf("%s created.\n", output); /* Clean up. */ if(suffix) free(suffix); gal_list_str_free(comments, 1); if(output!=p->cp.output) free(output); } static void save_hist_and_or_cfp(struct statisticsparams *p) { char *suf, *contents; gal_data_t *bins, *hist, *cfp=NULL; /* Set the bins and make the histogram, this is necessary for both the histogram and CFP (recall that the CFP is built from the histogram). */ bins=gal_statistics_regular_bins(p->input, NULL, p->numbins, p->onebinstart); hist=gal_statistics_histogram(p->input, bins, p->normalize, p->maxbinone); /* Set the histogram as the next pointer of bins. This is again necessary in both cases: when only a histogram is requested, it is used for the plotting. When only a CFP is desired, it is used as input into `gal_statistics_cfp'. */ bins->next=hist; /* Make the cumulative frequency plot if the user wanted it. Make the CFP, note that for the CFP, `maxbinone' and `normalize' are the same: the last bin (largest value) must be one. So if any of them are given, then set the last argument to 1.*/ if(p->cumulative) cfp=gal_statistics_cfp(p->input, bins, p->normalize || p->maxbinone); /* FITS tables don't accept `uint64_t', so to be consistent, we'll conver the histogram and CFP to `uint32_t'.*/ if(hist->type==GAL_TYPE_UINT64) hist=gal_data_copy_to_new_type_free(hist, GAL_TYPE_UINT32); if(cfp && cfp->type==GAL_TYPE_UINT64) cfp=gal_data_copy_to_new_type_free(cfp, GAL_TYPE_UINT32); /* Finalize the next pointers. */ bins->next=hist; hist->next=cfp; /* Prepare the contents. */ if(p->histogram && p->cumulative) { suf="_hist_cfp"; contents="Histogram and cumulative frequency plot"; } else if(p->histogram) { suf="_hist"; contents="Histogram"; } else { suf="_cfp"; contents="Cumulative frequency plot"; } /* Set the output file name. */ write_output_table(p, bins, suf, contents); } void print_mirror_hist_cfp(struct statisticsparams *p) { size_t dsize=1; gal_data_t *table; double mirror_val; gal_data_t *mirror=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, NULL, NULL, NULL); /* Convert the given mirror value into the type of the input dataset. */ *((double *)(mirror->array)) = p->mirror; mirror=gal_data_copy_to_new_type_free(mirror, p->input->type); /* Make the table columns. */ table=gal_statistics_mode_mirror_plots(p->sorted, mirror, p->numbins, 0, &mirror_val); if(p->mirror!=mirror_val) { fprintf(stderr, "Warning: Mirror value is %f.\n", mirror_val); if(!p->cp.quiet) fprintf(stderr, "\nNote that the mirror distribution is discrete " "and depends on the input data. So the closest point in " "the data to your desired mirror at %f was %f.\n\n", p->mirror, mirror_val); } /* If the mirror value was out-of-range, then no table will be made. */ if(table) write_output_table(p, table, "_mirror_hist_cfp", "Histogram and CFP of mirror distribution"); else error(EXIT_FAILURE, 0, "%s: mirror value %g is out of range", __func__, p->mirror); } /*******************************************************************/ /************** Basic information ***************/ /*******************************************************************/ /* To keep things in `print_basics' clean, we'll define the input data here, then only print the values there. */ void print_input_info(struct statisticsparams *p) { char *str, *name, *col=NULL; /* Print the program name and version. */ printf("%s\n", PROGRAM_NAME); /* Print the input information, if the input was a table, we also need to give the column information. When the column has a name, it will be printed, when it doesn't, we'll use the same string the user gave. */ printf("-------\n"); name=gal_fits_name_save_as_string(p->inputname, p->cp.hdu); printf("Input: %s\n", name); /* If a table was given, print the column. */ if(p->column) printf("Column: %s\n", p->input->name ? p->input->name : p->column); /* Range. */ str=NULL; if( !isnan(p->greaterequal) && !isnan(p->lessthan) ) asprintf(&str, "from (inclusive) %g, up to (exclusive) %g", p->greaterequal, p->lessthan); else if( !isnan(p->greaterequal) ) asprintf(&str, "from (inclusive) %g", p->greaterequal); else if( !isnan(p->lessthan) ) asprintf(&str, "up to (exclusive) %g", p->lessthan); if(str) { printf("Range: "); if(p->refcol) printf("[on column %s] ", p->reference->name ? p->reference->name : p->refcol); printf("%s.\n", str); free(str); } /* Units. */ if(p->input->unit) printf("Unit: %s\n", p->input->unit); /* Clean up. */ if(col) free(col); free(name); printf("-------\n"); } /* This function will report the simple immediate statistics of the data. For the average and standard deviation, the unsorted data is used so we don't suddenly encounter rounding errors. */ void print_basics(struct statisticsparams *p) { char *str; int namewidth=40; float mirrdist=1.5; double mean, std, *d; gal_data_t *tmp, *bins, *hist; /* Define the input dataset. */ print_input_info(p); /* Print the number: */ printf(" %-*s %zu\n", namewidth, "Number of elements:", p->input->size); /* Minimum: */ tmp=gal_statistics_minimum(p->input); str=gal_type_to_string(tmp->array, tmp->type, 0); printf(" %-*s %s\n", namewidth, "Minimum:", str); gal_data_free(tmp); free(str); /* Maximum: */ tmp=gal_statistics_maximum(p->input); str=gal_type_to_string(tmp->array, tmp->type, 0); printf(" %-*s %s\n", namewidth, "Maximum:", str); gal_data_free(tmp); free(str); /* Find the mean and standard deviation, but don't print them, see explanations under median. */ tmp=gal_statistics_mean_std(p->input); mean = ((double *)(tmp->array))[0]; std = ((double *)(tmp->array))[1]; gal_data_free(tmp); /* Mode of the distribution (if it is valid). we want the mode and median to be found in place to save time/memory. But having a sorted array can decrease the floating point accuracy of the standard deviation. So we'll do the median calculation in the end.*/ tmp=gal_statistics_mode(p->input, mirrdist, 1); d=tmp->array; if(d[2]>GAL_STATISTICS_MODE_GOOD_SYM) { /* Same format as `gal_data_write_to_string' */ printf(" %-*s %.10g\n", namewidth, "Mode:", d[0]); printf(" %-*s %.10g\n", namewidth, "Mode quantile:", d[1]); } gal_data_free(tmp); /* Find and print the median: */ tmp=gal_statistics_median(p->input, 0); str=gal_type_to_string(tmp->array, tmp->type, 0); printf(" %-*s %s\n", namewidth, "Median:", str); gal_data_free(tmp); free(str); /* Print the mean and standard deviation. Same format as `gal_data_write_to_string' */ printf(" %-*s %.10g\n", namewidth, "Mean:", mean); printf(" %-*s %.10g\n", namewidth, "Standard deviation:", std); /* Ascii histogram. Note that we don't want to force the user to have the plotting parameters. Also, when a reference column is defined, the range shown in the basic information section applies to that, not the range of the histogram. In that case, we want to print the histogram information. */ printf("-------"); p->asciiheight = p->asciiheight ? p->asciiheight : 10; p->numasciibins = p->numasciibins ? p->numasciibins : 70; bins=gal_statistics_regular_bins(p->input, NULL, p->numasciibins, NAN); hist=gal_statistics_histogram(p->input, bins, 0, 0); if(p->refcol==NULL) printf("\nHistogram:\n"); print_ascii_plot(p, hist, bins, 1, p->refcol ? 1 : 0); gal_data_free(bins); gal_data_free(hist); } /*******************************************************************/ /************** Sigma clipping ***************/ /*******************************************************************/ void print_sigma_clip(struct statisticsparams *p) { float *a; char *mode; int namewidth=40; gal_data_t *sigclip; /* Set the mode for printing: */ if( p->sclipparams[1]>=1.0f ) asprintf(&mode, "for %g clips", p->sclipparams[1]); else asprintf(&mode, "until relative change in STD is less than %g", p->sclipparams[1]); /* Report the status */ if(!p->cp.quiet) { print_input_info(p); printf("%g-sigma clipping steps %s:\n\n", p->sclipparams[0], mode); } /* Do the Sigma clipping: */ sigclip=gal_statistics_sigma_clip(p->sorted, p->sclipparams[0], p->sclipparams[1], 0, p->cp.quiet); a=sigclip->array; /* Finish the introduction. */ if(!p->cp.quiet) printf("-------\nSummary:\n"); else printf("%g-sigma clipped %s:\n", p->sclipparams[0], mode); /* Print the final results: */ printf(" %-*s %zu\n", namewidth, "Number of input elements:", p->input->size); if( p->sclipparams[1] < 1.0f ) printf(" %-*s %d\n", namewidth, "Number of clips:", sigclip->status); printf(" %-*s %.0f\n", namewidth, "Final number of elements:", a[0]); printf(" %-*s %g\n", namewidth, "Median:", a[1]); printf(" %-*s %g\n", namewidth, "Mean:", a[2]); printf(" %-*s %g\n", namewidth, "Standard deviation:", a[3]); /* Clean up. */ free(mode); } /*******************************************************************/ /************** Main function ***************/ /*******************************************************************/ void statistics(struct statisticsparams *p) { int print_basic_info=1; /* Print the one-row numbers if the user asked for them. */ if(p->singlevalue) { print_basic_info=0; if(p->ontile) statistics_on_tile(p); else statistics_print_one_row(p); } /* Find the Sky value if called. */ if(p->sky) { sky(p); print_basic_info=0; } /* Print the ASCII plots if requested. */ if(p->asciihist || p->asciicfp) { ascii_plots(p); print_basic_info=0; } /* Save the histogram and CFP as tables if requested. */ if(p->histogram || p->cumulative) { print_basic_info=0; save_hist_and_or_cfp(p); } /* Print the sigma-clipped results. */ if( p->sigmaclip ) { print_basic_info=0; print_sigma_clip(p); } /* Make the mirror table. */ if( !isnan(p->mirror) ) { print_basic_info=0; print_mirror_hist_cfp(p); } /* If nothing was requested print the simple statistics. */ if(print_basic_info) print_basics(p); } �������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/sky.c�������������������������������������������������������������������0000644�0001750�0001750�00000021751�13156610402�014061� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/qsort.h> #include <gnuastro/blank.h> #include <gnuastro/threads.h> #include <gnuastro/convolve.h> #include <gnuastro/statistics.h> #include <gnuastro/interpolate.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" static void * sky_on_thread(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct statisticsparams *p=(struct statisticsparams *)tprm->params; double *darr; int stype=p->sky_t->type; void *tblock=NULL, *tarray=NULL; gal_data_t *tile, *mode, *sigmaclip; size_t i, tind, twidth=gal_type_sizeof(stype); /* Find the Sky and its standard deviation on the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Set the tile and copy its values into the array we'll be using. */ tind = tprm->indexs[i]; tile = &p->cp.tl.tiles[tind]; /* If we have a convolved image, temporarily (only for finding the mode) change the tile's pointers so we can work on the convolved image for the mode. */ if(p->kernel) { tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, p->convolved); tile->block=p->convolved; } mode=gal_statistics_mode(tile, p->mirrordist, 1); if(p->kernel) { tile->array=tarray; tile->block=tblock; } /* Check the mode value. Note that if the mode is in-accurate, then the values will be NaN and all conditionals will fail. So, we'll go onto finding values for this tile */ darr=mode->array; if( fabs(darr[1]-0.5f) < p->modmedqdiff ) { /* Get the sigma-clipped mean and standard deviation. `inplace' is irrelevant here because this is a tile and it will be copied anyway. */ sigmaclip=gal_statistics_sigma_clip(tile, p->sclipparams[0], p->sclipparams[1], 1, 1); /* Put the mean and its standard deviation into the respective place for this tile. */ sigmaclip=gal_data_copy_to_new_type_free(sigmaclip, stype); memcpy(gal_data_ptr_increment(p->sky_t->array, tind, stype), gal_data_ptr_increment(sigmaclip->array, 2, stype), twidth); memcpy(gal_data_ptr_increment(p->std_t->array, tind, stype), gal_data_ptr_increment(sigmaclip->array, 3, stype), twidth); /* Clean up. */ gal_data_free(sigmaclip); } else { gal_blank_write(gal_data_ptr_increment(p->sky_t->array, tind, stype), stype); gal_blank_write(gal_data_ptr_increment(p->std_t->array, tind, stype), stype); } /* Clean up. */ gal_data_free(mode); } /* Wait for all threads to finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } void sky(struct statisticsparams *p) { char *msg, *outname; struct timeval t0, t1; gal_data_t *num, *tmp; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&cp->tl; /* Print basic information */ if(!cp->quiet) { gettimeofday(&t0, NULL); printf("%s\n", PROGRAM_STRING); printf("Estimating Sky (reference value) and its STD.\n"); printf("-----------\n"); printf(" - Using %zu CPU thread%s.\n", cp->numthreads, cp->numthreads==1 ? "" : "s"); printf(" - Input: %s (hdu: %s)\n", p->inputname, cp->hdu); if(p->kernelname) printf(" - Kernel: %s (hdu: %s)\n", p->kernelname, p->khdu); } /* When checking steps, the input image is the first extension. */ if(p->checksky) gal_fits_img_write(p->input, p->checkskyname, NULL, PROGRAM_NAME); /* Convolve the image (if desired). */ if(p->kernel) { if(!cp->quiet) gettimeofday(&t1, NULL); p->convolved=gal_convolve_spatial(tl->tiles, p->kernel, cp->numthreads, 1, tl->workoverch); if(p->checksky) gal_fits_img_write(p->convolved, p->checkskyname, NULL, PROGRAM_NAME); if(!cp->quiet) gal_timing_report(&t1, "Input convolved with kernel.", 1); } /* Make the arrays keeping the Sky and Sky standard deviation values. */ p->sky_t=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->input->ndim, tl->numtiles, NULL, 0, p->input->minmapsize, "SKY", p->input->unit, NULL); p->std_t=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->input->ndim, tl->numtiles, NULL, 0, p->input->minmapsize, "SKY STD", p->input->unit, NULL); /* Find the Sky and Sky standard deviation on the tiles. */ if(!cp->quiet) gettimeofday(&t1, NULL); gal_threads_spin_off(sky_on_thread, p, tl->tottiles, cp->numthreads); if(!cp->quiet) { num=gal_statistics_number(p->sky_t); asprintf(&msg, "Sky and its STD found on %zu/%zu tiles.", (size_t)(*((uint64_t *)(num->array))), tl->tottiles ); gal_timing_report(&t1, msg, 1); gal_data_free(num); free(msg); } if(p->checksky) { gal_tile_full_values_write(p->sky_t, tl, 1, p->checkskyname, NULL, PROGRAM_NAME); gal_tile_full_values_write(p->std_t, tl, 1, p->checkskyname, NULL, PROGRAM_NAME); } /* Interpolate the Sky and its standard deviation. */ if(!cp->quiet) gettimeofday(&t1, NULL); p->sky_t->next=p->std_t; tmp=gal_interpolate_close_neighbors(p->sky_t, tl, cp->interpnumngb, cp->numthreads, cp->interponlyblank, 1); gal_data_free(p->sky_t); gal_data_free(p->std_t); p->sky_t=tmp; p->std_t=tmp->next; p->sky_t->next=p->std_t->next=NULL; if(!cp->quiet) gal_timing_report(&t1, "All blank tiles filled (interplated).", 1); if(p->checksky) { gal_tile_full_values_write(p->sky_t, tl, 1, p->checkskyname, NULL, PROGRAM_NAME); gal_tile_full_values_write(p->std_t, tl, 1, p->checkskyname, NULL, PROGRAM_NAME); } /* Smooth the Sky and Sky STD arrays. */ if(p->smoothwidth>1) { if(!cp->quiet) gettimeofday(&t1, NULL); tmp=gal_tile_full_values_smooth(p->sky_t, tl, p->smoothwidth, p->cp.numthreads); gal_data_free(p->sky_t); p->sky_t=tmp; tmp=gal_tile_full_values_smooth(p->std_t, tl, p->smoothwidth, p->cp.numthreads); gal_data_free(p->std_t); p->std_t=tmp; if(!cp->quiet) gal_timing_report(&t1, "Smoothed Sky and Sky STD values on tiles.", 1); if(p->checksky) { gal_tile_full_values_write(p->sky_t, tl, 1, p->checkskyname, NULL, PROGRAM_NAME); gal_tile_full_values_write(p->std_t, tl, 1, p->checkskyname, NULL, PROGRAM_NAME); } } /* Save the Sky and its standard deviation */ outname=gal_checkset_automatic_output(&p->cp, ( p->cp.output ? p->cp.output : p->inputname ), "_sky.fits"); gal_tile_full_values_write(p->sky_t, tl, 1, outname, NULL, PROGRAM_NAME); gal_tile_full_values_write(p->std_t, tl, 1, outname, NULL, PROGRAM_NAME); if(!cp->quiet) printf(" - Written to `%s'.\n", outname); /* Clean up and return. */ free(outname); gal_data_free(p->sky_t); gal_data_free(p->std_t); gal_data_free(p->convolved); if(!cp->quiet) { printf("-----------\n"); gal_timing_report(&t0, "Completed in:", 0); printf("-----------\n"); } } �����������������������gnuastro-0.5/bin/statistics/ui.c��������������������������������������������������������������������0000644�0001750�0001750�00000074346�13211616535�013705� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <gnuastro/wcs.h> #include <gnuastro/fits.h> #include <gnuastro/tile.h> #include <gnuastro/qsort.h> #include <gnuastro/blank.h> #include <gnuastro/table.h> #include <gnuastro/threads.h> #include <gnuastro/arithmetic.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will do statistical " "analysis on the input dataset (table column or image). All blank " "pixels or pixels outside of the given range are ignored. You can " "either directly ask for certain statistics in one line/row as shown " "below with the same order as requested, or get tables of different " "statistical measures like the histogram, cumulative frequency style " "and etc. If no particular statistic is requested, some basic " "information about the dataset is printed on the command-line.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct statisticsparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; cp->numthreads = gal_threads_number(); cp->tl.remainderfrac = NAN; /* Program-specific initializers */ p->lessthan = NAN; p->onebinstart = NAN; p->greaterequal = NAN; p->quantmin = NAN; p->quantmax = NAN; p->mirror = NAN; p->mirrordist = NAN; p->modmedqdiff = NAN; p->sclipparams[0] = NAN; p->sclipparams[1] = NAN; /* Set the mandatory common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_TYPE: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct statisticsparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: if(p->inputname) argp_error(state, "only one argument (input file) should be given"); else p->inputname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } static void * ui_add_to_single_value(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { size_t i; double *d; gal_data_t *inputs=NULL; struct statisticsparams *p=(struct statisticsparams *)params; /* In case of printing the option values. */ if(lineno==-1) error(EXIT_FAILURE, 0, "currently the options to be printed in one row " "(like `--number', `--mean', and etc) do not support printing " "with the `--printparams' (`-P'), or writing into configuration " "files due to lack of time when implementing these features. " "You can put them into configuration files manually. Please get " "in touch with us at `%s', so we can implement it", PACKAGE_BUGREPORT); /* Some of these options take values and some don't. */ if(option->type==GAL_OPTIONS_NO_ARG_TYPE) { /* If this option is given in a configuration file, then `arg' will not be NULL and we don't want to do anything if it is `0'. */ if(arg) { /* Make sure the value is only `0' or `1'. */ if( arg[1]!='\0' && *arg!='0' && *arg!='1' ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the `--%s' " "option takes no arguments. In a configuration " "file it can only have the values `1' or `0', " "indicating if it should be used or not", option->name); /* Only proceed if the (possibly given) argument is 1. */ if(arg[0]=='0' && arg[1]=='\0') return NULL; } /* Add this option to the print list. */ gal_list_i32_add(&p->singlevalue, option->key); } else { /* Read the string of numbers. */ inputs=gal_options_parse_list_of_numbers(arg, filename, lineno); d=inputs->array; /* Do the appropriate operations with the */ switch(option->key) { case UI_KEY_QUANTILE: case UI_KEY_QUANTFUNC: /* For the quantile and the quantile function, its possible to give any number of arguments, so add the operation index and the argument once for each given number. */ for(i=0;i<inputs->size;++i) { if(option->key==UI_KEY_QUANTILE && (d[i]<0 || d[i]>1) ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "values " "to `--quantile' (`-u') must be between 0 " "and 1, you had asked for %g (read from `%s')", d[i], arg); gal_list_f64_add(&p->tp_args, d[i]); gal_list_i32_add(&p->singlevalue, option->key); } break; default: error_at_line(EXIT_FAILURE, 0, filename, lineno, "a bug! please " "contact us at %s so we can address the problem. " "the option given to `ui_add_to_print_in_row' is " "marked as requiring a value, but is not recognized", PACKAGE_BUGREPORT); } } return NULL; } static void * ui_read_quantile_range(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { char *str; gal_data_t *in; struct statisticsparams *p=(struct statisticsparams *)params; /* For the `--printparams' (`-P') option:*/ if(lineno==-1) { if( isnan(p->quantmax) ) asprintf(&str, "%g", p->quantmin); else asprintf(&str, "%g,%g", p->quantmin, p->quantmax); return str; } /* Parse the inputs. */ in=gal_options_parse_list_of_numbers(arg, filename, lineno); /* Check if there was only two numbers. */ if(in->size!=1 && in->size!=2) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the `--%s' " "option takes one or two values values (separated by " "a comma) to define the range of used values with " "quantiles. However, %zu numbers were read in the " "string `%s' (value to this option).\n\n" "If there is only one number as input, it will be " "interpretted as the lower quantile (Q) range. The " "higher range will be set to the quantile (1-Q). " "When two numbers are given, they will be used as the " "lower and higher quantile range respectively", option->name, in->size, arg); /* Read the values in. */ p->quantmin = ((double *)(in->array))[0]; if(in->size==2) p->quantmax = ((double *)(in->array))[1]; /* Make sure the values are between 0 and 1. */ if( (p->quantmin<0 || p->quantmin>1) || ( !isnan(p->quantmax) && (p->quantmax<0 || p->quantmax>1) ) ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "values to the " "`--quantrange' option must be between 0 and 1 " "(inclusive). Your input was: `%s'", arg); /* When only one value is given, make sure it is less than 0.5. */ if( !isnan(p->quantmax) && p->quantmin>0.5 ) error(EXIT_FAILURE, 0, "%g>=0.5! When only one value is given to the " "`--%s' option, the range is defined as Q and 1-Q. Thus, the " "value must be less than 0.5", p->quantmin, option->name); /* Clean up and return. */ gal_data_free(in); return NULL; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct statisticsparams *p) { gal_list_i32_t *tmp; struct gal_tile_two_layer_params *tl=&p->cp.tl; /* Check if the format of the output table is valid, given the type of the output. */ gal_tableintern_check_fits_format(p->cp.output, p->cp.tableformat); /* If in tile-mode, we must have at least one single valued option. */ if(p->ontile && p->singlevalue==NULL) error(EXIT_FAILURE, 0, "at least one of the single-value measurements " "(for example `--median') must be requested with the `--ontile' " "option: there is no value to put in each tile"); /* Tessellation related options. */ if( p->ontile || p->sky ) { /* The tile or sky mode cannot be called with any other modes. */ if(p->asciihist || p->asciicfp || p->histogram || p->cumulative || p->sigmaclip || !isnan(p->mirror) ) error(EXIT_FAILURE, 0, "`--ontile' or `--sky' cannot be called with " "any of the `particular' calculation options, for example " "`--histogram'. This is because the latter work over the whole " "dataset and element positions are changed, but in the former " "positions are significant"); /* Make sure the tessellation defining options are given. */ if( tl->tilesize==NULL || tl->numchannels==NULL || isnan(tl->remainderfrac) ) error(EXIT_FAILURE, 0, "`--tilesize', `--numchannels', and " "`--remainderfrac' are mandatory options when dealing with " "a tessellation (in `--ontile' or `--sky' mode). Atleast " "one of these options wasn't given a value."); } /* In Sky mode, several options are mandatory. */ if( p->sky ) { /* Mandatory options. */ if ( isnan(p->modmedqdiff) || isnan(p->sclipparams[0]) || p->cp.interpnumngb==0 || isnan(p->mirrordist) ) error(EXIT_FAILURE, 0, "`--modmedqdiff', `--sclipparams', " "`--mirrordist', and `--interpnumngb' are mandatory with " "`--sky'"); /* If mode and median distance is a reasonable value. */ if(p->modmedqdiff>0.5) error(EXIT_FAILURE, 0, "%f not acceptable for `--modmedqdiff'. It " "cannot take values larger than 0.5 (quantile of median)", p->modmedqdiff); /* If a kernel name has been given, we need the HDU. */ if(p->kernelname && gal_fits_name_is_fits(p->kernelname) && p->khdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified for the kernel image. When " "A HDU is necessary for FITS files. You can use the `--khdu' " "(`-u') option and give it the HDU number (starting from " "zero), extension name, or anything acceptable by CFITSIO"); } /* Sigma-clipping needs `sclipparams'. */ if(p->sigmaclip && isnan(p->sclipparams[0])) error(EXIT_FAILURE, 0, "`--sclipparams' is necessary with `--sigmaclip'. " "`--sclipparams' takes two values (separated by a comma) for " "defining the sigma-clip: the multiple of sigma, and tolerance " "(<1) or number of clips (>1)."); /* If any of the mode measurements are requested, then `mirrordist' is mandatory. */ for(tmp=p->singlevalue; tmp!=NULL; tmp=tmp->next) switch(tmp->v) { case UI_KEY_MODE: case UI_KEY_MODESYM: case UI_KEY_MODEQUANT: case UI_KEY_MODESYMVALUE: if( isnan(p->mirrordist) ) error(EXIT_FAILURE, 0, "`--mirrordist' is required for the " "mode-related single measurements (`--mode', `--modequant', " "`--modesym', and `--modesymvalue')"); } /* If less than and greater than are both given, make sure that the value to greater than is smaller than the value to less-than. */ if( !isnan(p->lessthan) && !isnan(p->greaterequal) && p->lessthan < p->greaterequal ) error(EXIT_FAILURE, 0, "the value to `--lessthan' (%g) must be larger " "than the value to `--greaterequal' (%g)", p->lessthan, p->greaterequal); /* Less-than and greater-equal cannot be called together with quantrange. */ if( ( !isnan(p->lessthan) || !isnan(p->greaterequal) ) && !isnan(p->quantmin) ) error(EXIT_FAILURE, 0, "`--lessthan' and/or `--greaterequal' cannot " "be called together with `--quantrange'"); /* When binned outputs are requested, make sure that `numbins' is set. */ if( (p->histogram || p->cumulative || !isnan(p->mirror)) && p->numbins==0) error(EXIT_FAILURE, 0, "`--numbins' isn't set. When the histogram or " "cumulative frequency plots are requested, the number of bins " "(`--numbins') is necessary"); /* If an ascii plot is requested, check if the ascii number of bins and height are given. */ if( (p->asciihist || p->asciicfp) && (p->numasciibins==0 || p->asciiheight==0) ) error(EXIT_FAILURE, 0, "when an ascii plot is requested, " "`--numasciibins' and `--asciiheight' are mandatory, but atleast " "one of these has not been given"); /* Reverse the list of statistics to print in one row and also the arguments, so it has the same order the user wanted. */ gal_list_f64_reverse(&p->tp_args); gal_list_i32_reverse(&p->singlevalue); } static void ui_check_options_and_arguments(struct statisticsparams *p) { char *name=NULL; if(p->inputname) { /* If input is FITS. */ if( (p->isfits=gal_fits_name_is_fits(p->inputname)) ) { /* Check if a HDU is given. */ if( p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a " "FITS file, a HDU must also be specified, you can use " "the `--hdu' (`-h') option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); /* If its a table, make sure a column is also specified. */ p->hdu_type=gal_fits_hdu_format(p->inputname, p->cp.hdu); if(p->hdu_type==IMAGE_HDU) { if(p->column) error(EXIT_FAILURE, 0, "%s (hdu: %s): is a FITS image " "extension. The `--column' option is only applicable " "to tables.", p->inputname, p->cp.hdu); } else if(p->column==NULL) asprintf(&name, "%s (hdu: %s)", p->inputname, p->cp.hdu); } /* If its not FITS, it must be a table. */ else { if(p->column==NULL) name=p->inputname; } /* If a column was necessary, but not given, print an error. */ if(name) error(EXIT_FAILURE, 0, "%s is a table but no column is " "specified. Please use the `--column' (`-c') option to " "specify a column.\n\nYou can either give it the column number " "(couting from 1), or a match/search in its meta-data (e.g., " "column names). For more information, please run the " "following command (press the `SPACE' key to go down and " "`q' to return to the command-line):\n\n" " $ info gnuastro \"Selecting table columns\"\n", name); } else error(EXIT_FAILURE, 0, "no input file is specified"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_out_of_range_to_blank(struct statisticsparams *p) { size_t one=1; unsigned char flags=GAL_ARITHMETIC_NUMOK; unsigned char flagsor = ( GAL_ARITHMETIC_FREE | GAL_ARITHMETIC_INPLACE | GAL_ARITHMETIC_NUMOK ); gal_data_t *tmp, *cond_g=NULL, *cond_l=NULL, *cond, *blank, *ref; /* Set the dataset that should be used for the condition. */ ref = p->reference ? p->reference : p->input; /* If the user has given a quantile range, then set the `greaterequal' and `lessthan' values. */ if( !isnan(p->quantmin) ) { /* If only one value was given, set the maximum quantile range. */ if( isnan(p->quantmax) ) p->quantmax = 1 - p->quantmin; /* Set the greater-equal value. */ tmp=gal_statistics_quantile(ref, p->quantmin, 1); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->greaterequal=*((float *)(tmp->array)); /* Set the lower-than value. */ tmp=gal_statistics_quantile(ref, p->quantmax, 1); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->lessthan=*((float *)(tmp->array)); } /* Set the condition. Note that the `greaterequal' name is for the data we want. So we will set the condition based on those that are less-than */ if(!isnan(p->greaterequal)) { tmp=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, NULL, NULL, NULL); *((float *)(tmp->array)) = p->greaterequal; cond_g=gal_arithmetic(GAL_ARITHMETIC_OP_LT, flags, ref, tmp); gal_data_free(tmp); } /* Same reasoning as above for `p->greaterthan'. */ if(!isnan(p->lessthan)) { tmp=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, NULL, NULL, NULL); *((float *)(tmp->array)) = p->lessthan; cond_l=gal_arithmetic(GAL_ARITHMETIC_OP_GE, flags, ref, tmp); gal_data_free(tmp); } /* Now, set the final condition. If both values were specified, then use the GAL_ARITHMETIC_OP_OR to merge them into one. */ switch( !isnan(p->greaterequal) + !isnan(p->lessthan) ) { case 0: return; /* No condition was specified, return. */ case 1: /* Only one condition was specified. */ cond = isnan(p->greaterequal) ? cond_l : cond_g; break; case 2: cond = gal_arithmetic(GAL_ARITHMETIC_OP_OR, flagsor, cond_l, cond_g); break; } /* Allocate a blank value to mask all pixels that don't satisfy the condition. */ blank=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, NULL, NULL, NULL); *((float *)(blank->array)) = NAN; /* Set all the pixels that satisfy the condition to blank. Note that a blank value will be used in the proper type of the input in the `where' operator.*/ gal_arithmetic(GAL_ARITHMETIC_OP_WHERE, flagsor, p->input, cond, blank); } /* Check if a sorted array is necessary and if so, then make a sorted array. */ static void ui_make_sorted_if_necessary(struct statisticsparams *p) { int is_necessary=0; gal_list_i32_t *tmp; /* Check in the one-row outputs. */ for(tmp=p->singlevalue; tmp!=NULL; tmp=tmp->next) switch(tmp->v) { case UI_KEY_MODE: case UI_KEY_MEDIAN: case UI_KEY_QUANTILE: case UI_KEY_QUANTFUNC: is_necessary=1; break; } /* Check in the rest of the outputs. */ if( is_necessary==0 && ( p->sigmaclip || !isnan(p->mirror) ) ) is_necessary=1; /* Do the sorting, we will keep the sorted array in a separate space, since the unsorted nature of the original dataset will help decrease floating point errors. If the input is already sorted, we'll just point it to the input.*/ if(is_necessary) { if( gal_statistics_is_sorted(p->input) ) p->sorted=p->input; else { p->sorted=gal_data_copy(p->input); gal_statistics_sort_increasing(p->sorted); } } } void ui_read_columns(struct statisticsparams *p) { int toomanycols=0; size_t size, counter=0; gal_data_t *cols, *tmp; gal_list_str_t *column=NULL; /* Define the columns that we want, note that they should be added to the list in reverse. */ if(p->refcol) gal_list_str_add(&column, p->refcol, 0); gal_list_str_add(&column, p->column, 0); /* Read the desired column(s). */ cols=gal_table_read(p->inputname, p->cp.hdu, column, p->cp.searchin, p->cp.ignorecase, p->cp.minmapsize, NULL); /* Put the columns into the proper gal_data_t. */ size=cols->size; while(cols!=NULL) { /* Pop out the top column. */ tmp=gal_list_data_pop(&cols); /* Make sure it has the proper size. */ if(tmp->size!=size) error(EXIT_FAILURE, 0, " read column number %zu has a %zu elements, " "while previous column(s) had %zu", counter, tmp->size, size); /* Make sure it is a usable datatype. */ switch(tmp->type) { case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_STRING: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, " read column number %zu has a %s type, " "which is not currently supported by %s", counter, gal_type_name(tmp->type, 1), PROGRAM_NAME); } /* Put the column into the proper pointer. */ switch(++counter) { case 1: p->input=tmp; break; case 2: if(p->refcol) p->reference=tmp; else toomanycols=1; break; default: toomanycols=1; } /* Print an error if there are too many columns: */ if(toomanycols) gal_tableintern_error_col_selection(p->inputname, p->cp.hdu, "too many " "columns were selected by the " "given values to the `--column' " "and/or `--refcol' options. Only " "one is acceptable for each."); } /* Clean up. */ gal_list_str_free(column, 0); } void ui_preparations(struct statisticsparams *p) { gal_data_t *check; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&cp->tl; /* Read the input. */ if(p->isfits && p->hdu_type==IMAGE_HDU) { p->inputformat=INPUT_FORMAT_IMAGE; p->input=gal_fits_img_read(p->inputname, cp->hdu, cp->minmapsize, 0, 0); } else { ui_read_columns(p); p->inputformat=INPUT_FORMAT_TABLE; } /* Read the convolution kernel if necessary. */ if(p->sky && p->kernelname) p->kernel=gal_fits_img_read_kernel(p->kernelname, p->khdu, cp->minmapsize); /* Tile and channel sanity checks and preparations. */ if(p->ontile || p->sky) { /* Check the tiles and make the tile structure. */ gal_tile_full_sanity_check(p->inputname, p->cp.hdu, p->input, tl); gal_tile_full_two_layers(p->input, tl); gal_tile_full_permutation(tl); /* Make the tile check image if requested. */ if(tl->checktiles) { tl->tilecheckname=gal_checkset_automatic_output(cp, p->inputname, "_tiled.fits"); check=gal_tile_block_check_tiles(tl->tiles); if(p->inputformat==INPUT_FORMAT_IMAGE) gal_fits_img_write(check, tl->tilecheckname, NULL, PROGRAM_NAME); else { gal_checkset_writable_remove(tl->tilecheckname, 0, cp->dontdelete); gal_table_write(check, NULL, cp->tableformat, tl->tilecheckname, "TABLE"); } gal_data_free(check); } /* Set the steps image name. */ if(p->sky && p->checksky) p->checkskyname=gal_checkset_automatic_output(cp, p->inputname, "_sky_steps.fits"); } /* Set the out-of-range values in the input to blank. */ ui_out_of_range_to_blank(p); /* If we are not to work on tiles, then re-order and change the input. */ if(p->ontile==0 && p->sky==0) { /* Only keep the elements we want. */ gal_blank_remove(p->input); p->input->flag &= ~GAL_DATA_FLAG_HASBLANK ; p->input->flag |= GAL_DATA_FLAG_BLANK_CH ; /* Make sure there is data remaining: */ if(p->input->size==0) error(EXIT_FAILURE, 0, "%s: no data, maybe the `--greaterequal' or " "`--lessthan' options need to be adjusted", gal_fits_name_save_as_string(p->inputname, cp->hdu) ); /* Make the sorted array if necessary. */ ui_make_sorted_if_necessary(p); /* Set the number of output files. */ if( !isnan(p->mirror) ) ++p->numoutfiles; if( p->histogram || p->cumulative ) ++p->numoutfiles; } } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct statisticsparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct statisticsparams *p) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->cp.output); gal_data_free(p->input); gal_data_free(p->reference); gal_list_f64_free(p->tp_args); gal_list_i32_free(p->singlevalue); gal_tile_full_free_contents(&p->cp.tl); if(p->sorted!=p->input) gal_data_free(p->sorted); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/main.c������������������������������������������������������������������0000644�0001750�0001750�00000003035�13121462410�014166� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" #include "statistics.h" int main (int argc, char *argv[]) { struct timeval t1; struct statisticsparams p={{{0},0},0}; /* Set the starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ statistics(&p); /* Free all non-freed allocations. */ ui_free_report(&p); /* Return successfully.*/ return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/Makefile.in�������������������������������������������������������������0000644�0001750�0001750�00000211601�13217217706�015157� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = aststatistics$(EXEEXT) subdir = bin/statistics ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_aststatistics_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) sky.$(OBJEXT) \ statistics.$(OBJEXT) aststatistics_OBJECTS = $(am_aststatistics_OBJECTS) aststatistics_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(aststatistics_SOURCES) DIST_SOURCES = $(aststatistics_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib aststatistics_LDADD = -lgnuastro aststatistics_SOURCES = main.c ui.c sky.c statistics.c EXTRA_DIST = main.h authors-cite.h args.h ui.h sky.h statistics.h dist_sysconf_DATA = aststatistics.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/statistics/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/statistics/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list aststatistics$(EXEEXT): $(aststatistics_OBJECTS) $(aststatistics_DEPENDENCIES) $(EXTRA_aststatistics_DEPENDENCIES) @rm -f aststatistics$(EXEEXT) $(AM_V_CCLD)$(LINK) $(aststatistics_OBJECTS) $(aststatistics_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sky.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statistics.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/aststatistics.conf������������������������������������������������������0000644�0001750�0001750�00000002223�13121462410�016645� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for Statistics. # Statistics is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ aststatistics --help # Full list of options, short doc. # $ aststatistics -P # Print all options and used values. # $ info aststatistics # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input image: # Sky and its STD settings khdu 1 modmedqdiff 0.01 smoothwidth 3 sclipparams 3,0.1 # Histogram and CFP settings numasciibins 70 asciiheight 10 numbins 100 mirrordist 1.5 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/statistics/Makefile.am�������������������������������������������������������������0000644�0001750�0001750�00000002632�13121462410�015134� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = aststatistics aststatistics_LDADD = -lgnuastro aststatistics_SOURCES = main.c ui.c sky.c statistics.c EXTRA_DIST = main.h authors-cite.h args.h ui.h sky.h statistics.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = aststatistics.conf ������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/�����������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220467�013302� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/threshold.h������������������������������������������������������������0000644�0001750�0001750�00000003272�13156610402�015365� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef THRESHOLD_H #define THRESHOLD_H #define THRESHOLD_NO_ERODE_VALUE 2 enum threshold_type { THRESHOLD_QUANTILES, THRESHOLD_SKY_STD, }; void threshold_apply(struct noisechiselparams *p, float *value1, float *value2, int type); void threshold_write_sn_table(struct noisechiselparams *p, gal_data_t *sntable, gal_data_t *snind, char *filename, gal_list_str_t *comments); void threshold_interp_smooth(struct noisechiselparams *p, gal_data_t **first, gal_data_t **second, gal_data_t **third, char *filename); void threshold_quantile_find_apply(struct noisechiselparams *p); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/sky.h������������������������������������������������������������������0000644�0001750�0001750�00000002203�13121462410�014164� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef SKY_H #define SKY_H void sky_and_std(struct noisechiselparams *p, char *checkname); void sky_subtract(struct noisechiselparams *p); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/segmentation.h���������������������������������������������������������0000644�0001750�0001750�00000002124�13121462410�016055� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef SEGMENTATION_H #define SEGMENTATION_H void segmentation(struct noisechiselparams *p); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/noisechisel.h����������������������������������������������������������0000644�0001750�0001750�00000002121�13121462410�015662� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef NOISECHISEL_H #define NOISECHISEL_H void noisechisel(struct noisechiselparams *p); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/detection.h������������������������������������������������������������0000644�0001750�0001750�00000002201�13121462410�015332� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef DETECTION_H #define DETECTION_H void detection_initial(struct noisechiselparams *p); void detection(struct noisechiselparams *p); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/clumps.h���������������������������������������������������������������0000644�0001750�0001750�00000007177�13176441456�014721� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef CLUMPS_H #define CLUMPS_H /* Constants for the clump over-segmentation. */ #define CLUMPS_INIT -1 #define CLUMPS_RIVER -2 #define CLUMPS_TMPCHECK -3 /* Parameters for all threads. */ struct clumps_params { /* General */ int step; /* Counter if we want to check steps. */ int sky0_det1; /* If working on the Sky or Detections. */ struct noisechiselparams *p; /* Pointer to main NoiseChisel parameters. */ pthread_mutex_t labmutex; /* Mutex to change the total numbers. */ /* For Sky region. */ gal_data_t *sn; /* Array of clump S/N tables. */ gal_data_t *snind; /* Array of clump S/N index (for check). */ /* For detections. */ gal_data_t *labindexs; /* Array of `gal_data_t' with obj indexs. */ size_t totobjects; /* Total number of objects at any point. */ size_t totclumps; /* Total number of clumps at any point. */ }; /* Parameters for one thread (a tile or a detected region). */ struct clumps_thread_params { size_t id; /* ID of this detection/tile over tile. */ size_t *topinds; /* Indexs of all local maxima. */ size_t numinitclumps; /* Number of clumps in tile/detection. */ size_t numtrueclumps; /* Number of true clumps in tile/detection.*/ size_t numobjects; /* Number of objects over this clump. */ float std; /* Standard deviation of noise on center. */ gal_data_t *indexs; /* Array containing indexs of this det. */ gal_data_t *diffuseindexs; /* Diffuse region (after finding clumps). */ gal_data_t *info; /* Information for all clumps. */ gal_data_t *sn; /* Signal-to-noise ratio for these clumps. */ gal_data_t *snind; /* Index of S/N for these clumps. */ gal_data_t *clumptoobj; /* Index of object that a clump belongs to.*/ struct clumps_params *clprm; /* Pointer to main structure. */ }; void clumps_oversegment(struct clumps_thread_params *cltprm); void clumps_grow_prepare_initial(struct clumps_thread_params *cltprm); void clumps_grow_prepare_final(struct clumps_thread_params *cltprm); void clumps_grow(gal_data_t *labels, gal_data_t *diffuseindexs, int withrivers, int connectivity); void clumps_true_find_sn_thresh(struct noisechiselparams *p); void clumps_make_sn_table(struct clumps_thread_params *cltprm); gal_data_t * clumps_det_label_indexs(struct noisechiselparams *p); void clumps_det_keep_true_relabel(struct clumps_thread_params *cltprm); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/ui.h�������������������������������������������������������������������0000644�0001750�0001750�00000006035�13177434204�014015� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_DETECTION = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_SEGMENTATION, }; /* Available letters for short options: a b f j l n u x z A H J W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_LARGETILESIZE = 'L', UI_KEY_KERNEL = 'k', UI_KEY_WIDEKERNEL = 'w', UI_KEY_SKYSUBTRACTED = 'E', UI_KEY_MINSKYFRAC = 'B', UI_KEY_MIRRORDIST = 'r', UI_KEY_MODMEDQDIFF = 'Q', UI_KEY_QTHRESH = 't', UI_KEY_ERODE = 'e', UI_KEY_OPENING = 'p', UI_KEY_SIGMACLIP = 's', UI_KEY_DTHRESH = 'R', UI_KEY_DETSNMINAREA = 'i', UI_KEY_DETQUANT = 'c', UI_KEY_DETGROWQUANT = 'd', UI_KEY_SEGSNMINAREA = 'm', UI_KEY_SEGQUANT = 'g', UI_KEY_KEEPMAXNEARRIVER = 'v', UI_KEY_GTHRESH = 'G', UI_KEY_MINRIVERLENGTH = 'y', UI_KEY_OBJBORDERSN = 'O', UI_KEY_CONTINUEAFTERCHECK = 'C', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_KHDU = 1000, UI_KEY_CONVOLVED, UI_KEY_CONVOLVEDHDU, UI_KEY_WKHDU, UI_KEY_MINNUMFALSE, UI_KEY_ONLYDETECTION, UI_KEY_GROWNCLUMPS, UI_KEY_SMOOTHWIDTH, UI_KEY_QTHRESHTILEQUANT, UI_KEY_CHECKQTHRESH, UI_KEY_ERODENGB, UI_KEY_NOERODEQUANT, UI_KEY_OPENINGNGB, UI_KEY_CHECKDETSKY, UI_KEY_CHECKDETSN, UI_KEY_DETGROWMAXHOLESIZE, UI_KEY_CLEANGROWNDET, UI_KEY_CHECKDETECTION, UI_KEY_CHECKSKY, UI_KEY_CHECKCLUMPSN, UI_KEY_CHECKSEGMENTATION, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct noisechiselparams *p); void ui_abort_after_check(struct noisechiselparams *p, char *filename, char *file2name, char *description); void ui_free_report(struct noisechiselparams *p, struct timeval *t1); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/args.h�����������������������������������������������������������������0000644�0001750�0001750�00000034601�13216276304�014333� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Options in argp_option format. */ struct argp_option program_options[] = { /* Input options. */ { "kernel", UI_KEY_KERNEL, "STR", 0, "Filename of kernel to convolve with input", GAL_OPTIONS_GROUP_INPUT, &p->kernelname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "khdu", UI_KEY_KHDU, "STR", 0, "HDU containing kernel image.", GAL_OPTIONS_GROUP_INPUT, &p->khdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "convolved", UI_KEY_CONVOLVED, "STR", 0, "Convolved image file to avoid convolution.", GAL_OPTIONS_GROUP_INPUT, &p->convolvedname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "convolvedhdu", UI_KEY_CONVOLVEDHDU, "STR", 0, "HDU/extension of convolved image in file.", GAL_OPTIONS_GROUP_INPUT, &p->convolvedhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "widekernel", UI_KEY_WIDEKERNEL, "STR", 0, "Filename of wider kernel for better qthresh", GAL_OPTIONS_GROUP_INPUT, &p->widekernelname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "wkhdu", UI_KEY_WKHDU, "STR", 0, "HDU containing wide kernel image.", GAL_OPTIONS_GROUP_INPUT, &p->wkhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "skysubtracted", UI_KEY_SKYSUBTRACTED, 0, 0, "Input is Sky subtracted (for error estimation).", GAL_OPTIONS_GROUP_INPUT, &p->skysubtracted, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minskyfrac", UI_KEY_MINSKYFRAC, "FLT", 0, "Min. fraction of undetected area in tile.", GAL_OPTIONS_GROUP_INPUT, &p->minskyfrac, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minnumfalse", UI_KEY_MINNUMFALSE, "INT", 0, "Minimum number for S/N estimation.", GAL_OPTIONS_GROUP_INPUT, &p->minnumfalse, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Tessellation. */ { "largetilesize", UI_KEY_LARGETILESIZE, "INT[,INT]", 0, "Sim. to --tilesize, but for larger tiles.", GAL_OPTIONS_GROUP_TESSELLATION, &p->ltl.tilesize, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, /* Output options. */ { "onlydetection", UI_KEY_ONLYDETECTION, 0, 0, "Stop at the end of detection.", GAL_OPTIONS_GROUP_OUTPUT, &p->onlydetection, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Detection. */ { 0, 0, 0, 0, "Detection:", UI_GROUP_DETECTION }, { "mirrordist", UI_KEY_MIRRORDIST, "FLT", 0, "Max. dist. (error multip.) to find mode.", UI_GROUP_DETECTION, &p->mirrordist, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "modmedqdiff", UI_KEY_MODMEDQDIFF, "FLT", 0, "Max. mode and median quant diff. per tile.", UI_GROUP_DETECTION, &p->modmedqdiff, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "qthresh", UI_KEY_QTHRESH, "FLT", 0, "Quantile threshold on convolved image.", UI_GROUP_DETECTION, &p->qthresh, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LT_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "qthreshtilequant", UI_KEY_QTHRESHTILEQUANT, "FLT", 0, "Remove tiles at higher quantiles.", UI_GROUP_DETECTION, &p->qthreshtilequant, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "smoothwidth", UI_KEY_SMOOTHWIDTH, "INT", 0, "Flat kernel width to smooth interpolated.", UI_GROUP_DETECTION, &p->smoothwidth, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_0_OR_ODD, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checkqthresh", UI_KEY_CHECKQTHRESH, 0, 0, "Save quantile threshold estimation in file.", UI_GROUP_DETECTION, &p->checkqthresh, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "erode", UI_KEY_ERODE, "INT", 0, "Number of erosions after thresholding.", UI_GROUP_DETECTION, &p->erode, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "erodengb", UI_KEY_ERODENGB, "INT", 0, "4 or 8 connectivity in erosion.", UI_GROUP_DETECTION, &p->erodengb, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "noerodequant", UI_KEY_NOERODEQUANT, "FLT", 0, "Quantile for no erosion.", UI_GROUP_DETECTION, &p->noerodequant, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "opening", UI_KEY_OPENING, "INT", 0, "Depth of opening after erosion.", UI_GROUP_DETECTION, &p->opening, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "openingngb", UI_KEY_OPENINGNGB, "INT", 0, "4 or 8 connectivity in opening.", UI_GROUP_DETECTION, &p->openingngb, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sigmaclip", UI_KEY_SIGMACLIP, "FLT,FLT", 0, "Sigma multiple and, tolerance or number.", UI_GROUP_DETECTION, &p->sigmaclip, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_sigma_clip }, { "checkdetsky", UI_KEY_CHECKDETSKY, 0, 0, "Save Sky value estimation for pseudo-dets.", UI_GROUP_DETECTION, &p->checkdetsky, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "dthresh", UI_KEY_DTHRESH, "FLT", 0, "Sigma threshold for Pseudo-detections.", UI_GROUP_DETECTION, &p->dthresh, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "detsnminarea", UI_KEY_DETSNMINAREA, "INT", 0, "Min. pseudo-detection area for S/N dist.", UI_GROUP_DETECTION, &p->detsnminarea, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checkdetsn", UI_KEY_CHECKDETSN, 0, 0, "Save pseudo-detection S/N values to a file.", UI_GROUP_DETECTION, &p->checkdetsn, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "detquant", UI_KEY_DETQUANT, "FLT", 0, "Quantile in pseudo-det. to define true.", UI_GROUP_DETECTION, &p->detquant, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0_LT_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "detgrowquant", UI_KEY_DETGROWQUANT, "FLT", 0, "Minimum quant. to expand true detections.", UI_GROUP_DETECTION, &p->detgrowquant, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "detgrowmaxholesize", UI_KEY_DETGROWMAXHOLESIZE, "INT", 0, "Max. area of holes after growth to fill.", UI_GROUP_DETECTION, &p->detgrowmaxholesize, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "cleangrowndet", UI_KEY_CLEANGROWNDET, 0, 0, "Remove small S/N grown detections.", UI_GROUP_DETECTION, &p->cleangrowndet, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checkdetection", UI_KEY_CHECKDETECTION, 0, 0, "Save all the detection steps to a file.", UI_GROUP_DETECTION, &p->checkdetection, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checksky", UI_KEY_CHECKSKY, 0, 0, "Final sky and its STD steps in a file.", UI_GROUP_DETECTION, &p->checksky, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Segmentation */ { 0, 0, 0, 0, "Segmentation:", UI_GROUP_SEGMENTATION }, { "segsnminarea", UI_KEY_SEGSNMINAREA, "INT", 0, "Minimum area of clumps for S/N estimation.", UI_GROUP_SEGMENTATION, &p->segsnminarea, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checkclumpsn", UI_KEY_CHECKCLUMPSN, 0, 0, "Save Sky clump S/N values into a file.", UI_GROUP_SEGMENTATION, &p->checkclumpsn, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "segquant", UI_KEY_SEGQUANT, "FLT", 0, "S/N Quantile of true sky clumps.", UI_GROUP_SEGMENTATION, &p->segquant, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "keepmaxnearriver", UI_KEY_KEEPMAXNEARRIVER, 0, 0, "Keep clumps with peak touching a river.", UI_GROUP_SEGMENTATION, &p->keepmaxnearriver, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "gthresh", UI_KEY_GTHRESH, "FLT", 0, "Multiple of STD to stop growing clumps.", UI_GROUP_SEGMENTATION, &p->gthresh, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minriverlength", UI_KEY_MINRIVERLENGTH, "INT", 0, "Minimum len of useful grown clump rivers.", UI_GROUP_SEGMENTATION, &p->minriverlength, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "objbordersn", UI_KEY_OBJBORDERSN, "FLT", 0, "Min. S/N for grown clumps as one object.", UI_GROUP_SEGMENTATION, &p->objbordersn, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "grownclumps", UI_KEY_GROWNCLUMPS, 0, 0, "Save grown clumps instead of original.", UI_GROUP_SEGMENTATION, &p->grownclumps, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checksegmentation", UI_KEY_CHECKSEGMENTATION, 0, 0, "Store segmentation steps in a file.", UI_GROUP_SEGMENTATION, &p->checksegmentation, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Operating mode options. */ { "continueaftercheck", UI_KEY_CONTINUEAFTERCHECK, 0, 0, "Continue processing after checks.", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->continueaftercheck, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* End of options. */ {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif �������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/authors-cite.h���������������������������������������������������������0000644�0001750�0001750�00000003004�13211076737�016002� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/main.h�����������������������������������������������������������������0000644�0001750�0001750�00000017103�13177434204�014322� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "NoiseChisel" /* Program full name. */ #define PROGRAM_EXEC "astnoisechisel" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Main program parameters structure */ struct noisechiselparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ struct gal_tile_two_layer_params ltl;/* Large tessellation. */ char *inputname; /* Input filename. */ char *kernelname; /* Input kernel filename. */ char *widekernelname; /* Name of wider kernel to be used. */ char *convolvedname; /* Convolved image (to avoid convolution).*/ char *convolvedhdu; /* HDU of convolved image. */ char *khdu; /* Kernel HDU. */ char *wkhdu; /* Wide kernel HDU. */ uint8_t skysubtracted; /* Input has been Sky subtracted before. */ float minskyfrac; /* Undetected area min. frac. in tile. */ size_t minnumfalse; /* Min No. of det/seg for true quantile. */ uint8_t onlydetection; /* Do not do any segmentation. */ uint8_t grownclumps; /* Save grown clumps instead of original. */ uint8_t continueaftercheck; /* Don't abort after the check steps. */ float mirrordist; /* Maximum distance to check mode sym. */ float modmedqdiff; /* Difference between mode and median. */ float qthresh; /* Quantile threshold on convolved image. */ float qthreshtilequant; /* Remove tiles with lower quantile. */ size_t smoothwidth; /* Width of flat kernel to smooth. */ uint8_t checkqthresh; /* Save the quantile threhsold steps. */ size_t erode; /* Number of erosions after thresholding. */ size_t erodengb; /* Connectivity for erosion. */ float noerodequant; /* Quantile for no erosion. */ size_t opening; /* Depth of opening after erosion. */ size_t openingngb; /* Connectivity to use for opening. */ double sigmaclip[2]; /* Sigma-clipping parameters. */ uint8_t checkdetsky; /* Check pseudo-detection sky value. */ float dthresh; /* Sigma threshold for Pseudo-detections. */ size_t detsnminarea; /* Minimum pseudo-detection area for S/N. */ uint8_t checkdetsn; /* Save pseudo-detection S/N values. */ float detquant; /* True detection quantile. */ float detgrowquant; /* Quantile to grow true detections. */ size_t detgrowmaxholesize; /* Max. size of holes to fill in growth. */ uint8_t cleangrowndet; /* Remove grown objects with small S/N. */ uint8_t checkdetection; /* Save all detection steps to a file. */ uint8_t checksky; /* Check the Sky value estimation. */ size_t segsnminarea; /* Minimum area for segmentation. */ uint8_t checkclumpsn; /* Save the clump S/N values to a file. */ float segquant; /* Quantile of clumps in sky for true S/N.*/ uint8_t keepmaxnearriver; /* Keep clumps with a peak near a river. */ float gthresh; /* Multiple of STD to stop growing clumps.*/ size_t minriverlength; /* Min, len of good grown clump rivers. */ float objbordersn; /* Minimum S/N for grown clumps to be one.*/ uint8_t checksegmentation; /* Save the segmentation steps in file. */ /* Internal. */ char *qthreshname; /* Name of Quantile threshold check image.*/ char *detskyname; /* Name of Initial det sky check image. */ char *detsn_s_name; /* Sky pseudo-detections S/N name. */ char *detsn_d_name; /* Detection pseudo-detections S/N name. */ char *detsn_D_name; /* Final detection S/N name. */ char *detectionname; /* Name of detection steps file. */ char *skyname; /* Name of Sky estimation steps file. */ char *clumpsn_s_name; /* Sky clump S/N name. */ char *clumpsn_d_name; /* Detection clumps S/N name. */ char *segmentationname; /* Name of segmentation steps file. */ gal_data_t *input; /* Input image. */ gal_data_t *kernel; /* Sharper kernel. */ gal_data_t *widekernel; /* Wider kernel. */ gal_data_t *conv; /* Convolved wth sharper kernel. */ gal_data_t *wconv; /* Convolved with wider kernel. */ gal_data_t *binary; /* For binary operations. */ gal_data_t *olabel; /* Labels of objects in the detection. */ gal_data_t *clabel; /* Labels of clumps in the detection. */ gal_data_t *expand_thresh; /* Quantile threshold to expand per tile. */ gal_data_t *sky; /* Mean of undetected pixels, per tile. */ gal_data_t *std; /* STD of undetected pixels, per tile. */ size_t maxtcontig; /* Maximum contiguous space for a tile. */ size_t maxltcontig; /* Maximum contiguous space for a tile. */ size_t *maxtsize; /* Maximum size of a single small tile. */ size_t *maxltsize; /* Maximum size of a single large tile. */ time_t rawtime; /* Starting time of the program. */ float medstd; /* Median STD before interpolation. */ float minstd; /* Minimum STD before interpolation. */ float maxstd; /* Maximum STD before interpolation. */ float cpscorr; /* Counts/second correction. */ size_t numinitialdets; /* Number of initial detections. */ size_t numdetections; /* Number of final detections. */ size_t numclumps; /* Number of true clumps. */ size_t numobjects; /* Number of objects. */ float detsnthresh; /* Pseudo-detection S/N threshold. */ float clumpsnthresh; /* Clump S/N threshold. */ }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/threshold.c������������������������������������������������������������0000644�0001750�0001750�00000061147�13216276304�015373� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/threads.h> #include <gnuastro/statistics.h> #include <gnuastro/interpolate.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "ui.h" #include "threshold.h" /**********************************************************************/ /*************** Apply a given threshold. *****************/ /**********************************************************************/ struct threshold_apply_p { float *value1; float *value2; int kind; struct noisechiselparams *p; }; /* Apply the threshold on the tiles given to this thread. */ static void * threshold_apply_on_thread(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct threshold_apply_p *taprm=(struct threshold_apply_p *)(tprm->params); struct noisechiselparams *p=taprm->p; size_t i, tid; void *tarray=NULL; gal_data_t *tile, *tblock=NULL; float *value1=taprm->value1, *value2=taprm->value2; /* Go over all the tiles assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ tid=tprm->indexs[i]; tile=&p->cp.tl.tiles[tid]; /* Based on the kind of threshold. */ switch(taprm->kind) { /* This is a quantile threshold. */ case THRESHOLD_QUANTILES: /* Correct the tile's pointers to apply the threshold on the convolved image. */ if(p->conv) { tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, p->conv); tile->block=p->conv; } /* Apply the threshold: When the `>' comparison fails, it can be either because the pixel was actually smaller than the threshold, or that it was a NaN value. In the first case, return 0, in the second, return a blank value. We already know if a tile contains a blank value (which is a constant over the whole loop). So before checking if the value is blank, see if the tile actually has a blank value. This will help in efficiency, because the compiler can move this check out of the loop and only check for NaN values when we know the tile has blank pixels. */ GAL_TILE_PO_OISET(float, uint8_t, tile, p->binary, 1, 0, { *o = ( *i > value1[tid] ? ( *i > value2[tid] ? THRESHOLD_NO_ERODE_VALUE : 1 ) : ( (tile->flag & GAL_DATA_FLAG_HASBLANK) && !(*i==*i) ? GAL_BLANK_UINT8 : 0 ) ); }); /* Revert the tile's pointers back to what they were. */ if(p->conv) { tile->array=tarray; tile->block=tblock; } break; /* This is a Sky and Sky STD threshold. */ case THRESHOLD_SKY_STD: /* See the explanation above the same step in the quantile threshold for an explanation. */ GAL_TILE_PO_OISET(float, uint8_t, tile, p->binary, 1, 0, { *o = ( ( *i - value1[tid] > p->dthresh * value2[tid] ) ? 1 : ( (tile->flag & GAL_DATA_FLAG_HASBLANK) && !(*i==*i) ? GAL_BLANK_UINT8 : 0 ) ); }); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we " "can address the problem. A value of %d had for " "`taprm->kind' is not valid", __func__, PACKAGE_BUGREPORT, taprm->kind); } } /* Wait until all the other threads finish. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* Apply a given threshold threshold on the tiles. */ void threshold_apply(struct noisechiselparams *p, float *value1, float *value2, int kind) { struct threshold_apply_p taprm={value1, value2, kind, p}; gal_threads_spin_off(threshold_apply_on_thread, &taprm, p->cp.tl.tottiles, p->cp.numthreads); } /**********************************************************************/ /*************** Write S/N values *****************/ /**********************************************************************/ void threshold_write_sn_table(struct noisechiselparams *p, gal_data_t *insn, gal_data_t *inind, char *filename, gal_list_str_t *comments) { gal_data_t *sn, *ind, *cols; /* Remove all blank elements. The index and sn values must have the same set of blank elements, but checking on the integer array is faster. */ if( gal_blank_present(inind, 1) ) { ind=gal_data_copy(inind); sn=gal_data_copy(insn); gal_blank_remove(ind); gal_blank_remove(sn); } else { sn = insn; ind = inind; } /* Set the columns. */ cols = ind; cols->next = sn; /* Prepare the comments. */ gal_table_comments_add_intro(&comments, PROGRAM_STRING, &p->rawtime); /* write the table. */ gal_checkset_writable_remove(filename, 0, 1); gal_table_write(cols, comments, p->cp.tableformat, filename, "SN"); /* Clean up (if necessary). */ if(sn!=insn) gal_data_free(sn); if(ind==inind) ind->next=NULL; else gal_data_free(ind); } /**********************************************************************/ /*************** Interpolation and smoothing *****************/ /**********************************************************************/ /* Interpolate and smooth the values for each tile over the whole image. */ void threshold_interp_smooth(struct noisechiselparams *p, gal_data_t **first, gal_data_t **second, gal_data_t **third, char *filename) { gal_data_t *tmp; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&cp->tl; /* A small sanity check. */ if( (*first)->next ) error(EXIT_FAILURE, 0, "%s: `first' must not have any `next' pointer.", __func__); if( (*second)->next ) error(EXIT_FAILURE, 0, "%s: `second' must not have any `next' pointer.", __func__); if( third && (*third)->next ) error(EXIT_FAILURE, 0, "%s: `third' must not have any `next' pointer.", __func__); /* Do the interpolation of both arrays. */ (*first)->next = *second; if(third) (*second)->next = *third; tmp=gal_interpolate_close_neighbors(*first, tl, cp->interpnumngb, cp->numthreads, cp->interponlyblank, 1); gal_data_free(*first); gal_data_free(*second); if(third) gal_data_free(*third); *first=tmp; *second=(*first)->next; if(third) { *third=(*second)->next; (*third)->next=NULL; } (*first)->next=(*second)->next=NULL; if(filename) { (*first)->name="THRESH1_INTERP"; (*second)->name="THRESH2_INTERP"; if(third) (*third)->name="THRESH3_INTERP"; gal_tile_full_values_write(*first, tl, 1, filename, NULL, PROGRAM_NAME); gal_tile_full_values_write(*second, tl, 1, filename, NULL, PROGRAM_NAME); if(third) gal_tile_full_values_write(*third, tl, 1, filename, NULL, PROGRAM_NAME); (*first)->name = (*second)->name = NULL; if(third) (*third)->name=NULL; } /* Smooth the threshold if requested. */ if(p->smoothwidth>1) { /* Smooth the first. */ tmp=gal_tile_full_values_smooth(*first, tl, p->smoothwidth, p->cp.numthreads); gal_data_free(*first); *first=tmp; /* Smooth the second */ tmp=gal_tile_full_values_smooth(*second, tl, p->smoothwidth, p->cp.numthreads); gal_data_free(*second); *second=tmp; /* Smooth the third */ if(third) { tmp=gal_tile_full_values_smooth(*third, tl, p->smoothwidth, p->cp.numthreads); gal_data_free(*third); *third=tmp; } /* Add them to the check image. */ if(filename) { (*first)->name="THRESH1_SMOOTH"; (*second)->name="THRESH2_SMOOTH"; if(third) (*third)->name="THRESH3_SMOOTH"; gal_tile_full_values_write(*first, tl, 1, filename, NULL, PROGRAM_NAME); gal_tile_full_values_write(*second, tl, 1, filename, NULL, PROGRAM_NAME); if(third) gal_tile_full_values_write(*third, tl, 1, filename, NULL, PROGRAM_NAME); (*first)->name = (*second)->name = NULL; if(third) (*third)->name=NULL; } } } /**************************************************************** ************ Quantile threshold ************ ****************************************************************/ struct qthreshparams { gal_data_t *erode_th; gal_data_t *noerode_th; gal_data_t *expand_th; void *usage; struct noisechiselparams *p; }; static void * qthresh_on_tile(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct qthreshparams *qprm=(struct qthreshparams *)tprm->params; struct noisechiselparams *p=qprm->p; double *darr; void *tarray=NULL; int type=qprm->erode_th->type; gal_data_t *modeconv = p->wconv ? p->wconv : p->conv; gal_data_t *tile, *mode, *qvalue, *usage, *tblock=NULL; size_t i, tind, twidth=gal_type_sizeof(type), ndim=p->input->ndim; /* Put the temporary usage space for this thread into a data set for easy processing. */ usage=gal_data_alloc(gal_data_ptr_increment(qprm->usage, tprm->id*p->maxtcontig, type), type, ndim, p->maxtsize, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); /* Go over all the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Re-initialize the usage array's space (will be changed in `gal_data_copy_to_allocated' for each tile). */ usage->ndim=ndim; usage->size=p->maxtcontig; memcpy(usage->dsize, p->maxtsize, ndim*sizeof *p->maxtsize); /* For easy reading. */ tind = tprm->indexs[i]; tile = &p->cp.tl.tiles[tind]; /* Temporarily change the tile's pointers so we can do the work on the convolved image, then copy the desired contents into the already allocated `usage' array. */ tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, modeconv); tile->block=modeconv; gal_data_copy_to_allocated(tile, usage); tile->array=tarray; tile->block=tblock; /* Find the mode on this tile, note that we have set the `inplace' flag to `1' to avoid extra allocation. */ mode=gal_statistics_mode(usage, p->mirrordist, 1); /* Check the mode value. Note that if the mode is not accurate, then the contents of `darr' will be NaN and all conditions will fail. In such cases, the tile will be ignored. */ darr=mode->array; if( fabs(darr[1]-0.5f) < p->modmedqdiff ) { /* The mode was found on the wider convolved image, but the qthresh values have to be found on the sharper convolved images. This is because the distribution becomes more skewed with a wider kernel, helping us find tiles with no data more easily. But for the quantile threshold, we want to use the sharper convolved image to loose less of the spatial information. */ if(modeconv!=p->conv) { tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, p->conv); tile->block=p->conv; usage->ndim=ndim; /* Since usage was modified in */ usage->size=p->maxtcontig; /* place, it needs to be */ gal_data_copy_to_allocated(tile, usage); /* re-initialized. */ tile->array=tarray; tile->block=tblock; } /* Get the erosion quantile for this tile and save it. Note that the type of `qvalue' is the same as the input dataset. */ qvalue=gal_statistics_quantile(usage, p->qthresh, 1); memcpy(gal_data_ptr_increment(qprm->erode_th->array, tind, type), qvalue->array, twidth); gal_data_free(qvalue); /* Same for the no-erode quantile. */ qvalue=gal_statistics_quantile(usage, p->noerodequant, 1); memcpy(gal_data_ptr_increment(qprm->noerode_th->array, tind, type), qvalue->array, twidth); gal_data_free(qvalue); /* Same for the expansion quantile. */ if(p->detgrowquant!=1.0f) { qvalue=gal_statistics_quantile(usage, p->detgrowquant, 1); memcpy(gal_data_ptr_increment(qprm->expand_th->array, tind, type), qvalue->array, twidth); gal_data_free(qvalue); } } else { gal_blank_write(gal_data_ptr_increment(qprm->erode_th->array, tind, type), type); gal_blank_write(gal_data_ptr_increment(qprm->noerode_th->array, tind, type), type); if(p->detgrowquant!=1.0f) gal_blank_write(gal_data_ptr_increment(qprm->expand_th->array, tind, type), type); } /* Clean up and fix the tile's pointers. */ gal_data_free(mode); } /* Clean up and wait for the other threads to finish, then return. */ usage->array=NULL; /* Not allocated here. */ gal_data_free(usage); if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* The main working function for `threshold_qthresh_clean'. The main purpose/problem is this: when we have channels, the qthresh values for each channel should be treated independently. */ static void threshold_qthresh_clean_work(struct noisechiselparams *p, gal_data_t *first, gal_data_t *second, gal_data_t *third, size_t start, size_t number) { gal_data_t *quantile; size_t i, osize=first->size; float *oa1=NULL, *oa2=NULL, *oa3=NULL; float q, *arr1=NULL, *arr2=NULL, *arr3=NULL; /* A small sanity check. */ if(first->type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: datatype has to be float32", __func__); /* Correct the arrays (if necessary). IMPORTANT: The datasets are multi-dimensional. However, when estimating the quantile, their dimensionality doesn't matter (only the `size' element is checked by `gal_statistics_quantile', not `ndim' or `dsize'). So we just need to correct `size' if channels are to be considered. */ if(start || number!=first->size) { /* Keep the original values for re-setting later. */ oa1=first->array; oa2=second->array; if(third) oa3=third->array; /* Increment the array pointers. */ first->array=gal_data_ptr_increment(first->array, start, first->type); second->array=gal_data_ptr_increment(second->array, start, second->type); if(third) third->array=gal_data_ptr_increment(third->array, start, third->type); /* Correct their sizes. */ first->size=number; second->size=number; if(third) third->size=number; } /* Find the quantile and remove all tiles that are more than it in the first array. */ arr1=first->array; quantile=gal_statistics_quantile(first, p->qthreshtilequant, 0); q=*((float *)(quantile->array)); for(i=0;i<first->size;++i) /* Just note that we have blank (NaN) values, so to avoid doing a NaN check with `isnan', we will check if the value is below the quantile, if it succeeds (isn't NaN and is below the quantile), then we'll put it's actual value, otherwise, a NaN. */ arr1[i] = arr1[i]<q ? arr1[i] : NAN; gal_data_free(quantile); /* Second quantile threshold. */ arr2=second->array; quantile=gal_statistics_quantile(second, p->qthreshtilequant, 0); q=*((float *)(quantile->array)); for(i=0;i<second->size;++i) arr2[i] = arr2[i]<q ? arr2[i] : NAN; gal_data_free(quantile); /* The third (if it exists). */ if(third) { arr3=third->array; quantile=gal_statistics_quantile(third, p->qthreshtilequant, 0); q=*((float *)(quantile->array)); for(i=0;i<third->size;++i) arr3[i] = arr3[i]<q ? arr3[i] : NAN; gal_data_free(quantile); } /* Make sure all three have the same NaN pixels. */ for(i=0;i<first->size;++i) if( isnan(arr1[i]) || isnan(arr2[i]) || isnan(arr3[i]) ) { arr1[i] = arr2[i] = NAN; if(third) arr3[i] = NAN; } /* Correct the values if they were changed. */ if(start || number!=osize) { first->array=oa1; second->array=oa2; first->size = second->size = osize; if(third) { third->array=oa3; third->size=osize; } } } /* Clean higher valued quantile thresholds: useful when the diffuse (almost flat) structures are much larger than the tile size. */ static void threshold_qthresh_clean(struct noisechiselparams *p, gal_data_t *first, gal_data_t *second, gal_data_t *third, char *filename) { size_t i; struct gal_tile_two_layer_params *tl=&p->cp.tl; /* A small sanity check: */ if(first->size!=tl->tottiles) error(EXIT_FAILURE, 0, "%s: `first->size' and `tl->tottiles' must have " "the same value, but they don't: %zu, %zu", __func__, first->size, tl->tottiles); /* If the input is from a tile structure and the user has asked to ignore channels, then re-order the values. */ for(i=0;i<tl->totchannels;++i) threshold_qthresh_clean_work(p, first, second, third, i*tl->tottilesinch, tl->tottilesinch); /* If the user wants to see the steps. */ if(p->qthreshname) { first->name="QTHRESH_ERODE_CLEAN"; second->name="QTHRESH_NOERODE_CLEAN"; gal_tile_full_values_write(first, tl, 1, p->qthreshname, NULL, PROGRAM_NAME); gal_tile_full_values_write(second, tl, 1, p->qthreshname, NULL, PROGRAM_NAME); first->name=second->name=NULL; if(third) { third->name="QTHRESH_EXPAND_CLEAN"; gal_tile_full_values_write(third, tl, 1, p->qthreshname, NULL, PROGRAM_NAME); third->name=NULL; } } } void threshold_quantile_find_apply(struct noisechiselparams *p) { char *msg; struct timeval t1; struct qthreshparams qprm; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&cp->tl; /* Get the starting time if necessary. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); /* Add image to check image if requested. If the user has asked for `oneelempertile', then the size of values is not going to be the same as the input, making it hard to inspect visually. So we'll only put the full input when `oneelempertile' isn't requested. */ if(p->qthreshname && !tl->oneelempertile) { gal_fits_img_write(p->conv ? p->conv : p->input, p->qthreshname, NULL, PROGRAM_NAME); if(p->wconv) gal_fits_img_write(p->wconv ? p->wconv : p->input, p->qthreshname, NULL, PROGRAM_NAME); } /* Allocate space for the quantile threshold values. */ qprm.erode_th=gal_data_alloc(NULL, p->input->type, p->input->ndim, tl->numtiles, NULL, 0, cp->minmapsize, NULL, p->input->unit, NULL); qprm.noerode_th=gal_data_alloc(NULL, p->input->type, p->input->ndim, tl->numtiles, NULL, 0, cp->minmapsize, NULL, p->input->unit, NULL); if(p->detgrowquant!=1.0f) qprm.expand_th=gal_data_alloc(NULL, p->input->type, p->input->ndim, tl->numtiles, NULL, 0, cp->minmapsize, NULL, p->input->unit, NULL); else qprm.expand_th=NULL; /* Allocate temporary space for processing in each tile. */ qprm.usage=gal_data_malloc_array(p->input->type, cp->numthreads * p->maxtcontig, __func__, "qprm.usage"); /* Find the threshold on each tile, free the temporary processing space and set the blank flag on both. Since they have the same blank elements, it is only necessary to check one (with the `updateflag' value set to 1), then update the next. */ qprm.p=p; gal_threads_spin_off(qthresh_on_tile, &qprm, tl->tottiles, cp->numthreads); free(qprm.usage); if( gal_blank_present(qprm.erode_th, 1) ) { qprm.noerode_th->flag |= GAL_DATA_FLAG_HASBLANK; if(qprm.expand_th) qprm.expand_th->flag |= GAL_DATA_FLAG_HASBLANK; } qprm.noerode_th->flag |= GAL_DATA_FLAG_BLANK_CH; if(p->detgrowquant!=1.0f) qprm.expand_th->flag |= GAL_DATA_FLAG_BLANK_CH; if(p->qthreshname) { qprm.erode_th->name="QTHRESH_ERODE"; qprm.noerode_th->name="QTHRESH_NOERODE"; gal_tile_full_values_write(qprm.erode_th, tl, 1, p->qthreshname, NULL, PROGRAM_NAME); gal_tile_full_values_write(qprm.noerode_th, tl, 1, p->qthreshname, NULL, PROGRAM_NAME); qprm.erode_th->name=qprm.noerode_th->name=NULL; if(qprm.expand_th) { qprm.expand_th->name="QTHRESH_EXPAND"; gal_tile_full_values_write(qprm.expand_th, tl, 1, p->qthreshname, NULL, PROGRAM_NAME); qprm.expand_th->name=NULL; } } /* Remove higher thresholds if requested. */ if(p->qthreshtilequant!=1.0) threshold_qthresh_clean(p, qprm.erode_th, qprm.noerode_th, qprm.expand_th ? qprm.expand_th : NULL, p->qthreshname); /* Interpolate and smooth the derived values. */ threshold_interp_smooth(p, &qprm.erode_th, &qprm.noerode_th, qprm.expand_th ? &qprm.expand_th : NULL, p->qthreshname); /* We now have a threshold for all tiles, apply it. */ threshold_apply(p, qprm.erode_th->array, qprm.noerode_th->array, THRESHOLD_QUANTILES); /* Write the binary image if check is requested. */ if(p->qthreshname && !tl->oneelempertile) gal_fits_img_write(p->binary, p->qthreshname, NULL, PROGRAM_NAME); /* Set the expansion quantile if necessary. */ p->expand_thresh = qprm.expand_th ? qprm.expand_th : NULL; /* Clean up and report duration if necessary. */ gal_data_free(qprm.erode_th); gal_data_free(qprm.noerode_th); if(!p->cp.quiet) { asprintf(&msg, "%.2f & %0.2f quantile thresholds applied.", p->qthresh, p->noerodequant); gal_timing_report(&t1, msg, 2); free(msg); } /* If the user wanted to check the threshold and hasn't called `continueaftercheck', then stop NoiseChisel. */ if(p->qthreshname && !p->continueaftercheck) ui_abort_after_check(p, p->qthreshname, NULL, "quantile threshold check"); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/segmentation.c���������������������������������������������������������0000644�0001750�0001750�00000076337�13205003172�016070� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/binary.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "ui.h" #include "clumps.h" #include "segmentation.h" /***********************************************************************/ /***************** Relabeling (grown) clumps *****************/ /***********************************************************************/ /* Correct the label of an detection when it doesn't need segmentation (it is fully one object). The final labels for the object(s) with a detected region will be set later (don't forget that we have detections that are composed of multiple objects). So the labels within each detection start from 1.*/ static void segmentation_relab_noseg(struct clumps_thread_params *cltprm) { int32_t *olabel=cltprm->clprm->p->olabel->array; size_t *s=cltprm->indexs->array, *sf=s+cltprm->indexs->size; do olabel[ *s ] = 1; while(++s<sf); } /* Find the adjacency matrixs (number, sum and signal to noise) for the rivers between potentially separate objects in a detection region. They have to be allocated prior to entering this funciton. The way to find connected objects is through an adjacency matrix. It is a square matrix with a side equal to numobjs. So to see if regions `a` and `b` are connected. All we have to do is to look at element a*numobjs+b or b*numobjs+a and get the answer. Since the number of objects in a given region will not be too high, this is efficient. */ static void segmentation_relab_to_objects(struct clumps_thread_params *cltprm) { size_t amwidth=cltprm->numtrueclumps+1; struct noisechiselparams *p=cltprm->clprm->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; size_t mdsize[2]={amwidth, amwidth}; gal_data_t *nums_d=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 2, mdsize, NULL, 1, p->cp.minmapsize, NULL, NULL, NULL); gal_data_t *sums_d=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, mdsize, NULL, 1, p->cp.minmapsize, NULL, NULL, NULL); gal_data_t *adjacency_d=gal_data_alloc(NULL, GAL_TYPE_UINT8, 2, mdsize, NULL, 1, p->cp.minmapsize, NULL, NULL, NULL); float *imgss=p->input->array; uint8_t *adjacency=adjacency_d->array; size_t nngb=gal_dimension_num_neighbors(ndim); int32_t *clumptoobj, *olabel=p->olabel->array; size_t *dinc=gal_dimension_increment(ndim, dsize); size_t *s, *sf, i, j, ii, rpnum, *nums=nums_d->array; double ave, rpsum, c=sqrt(1/p->cpscorr), *sums=sums_d->array; double err=cltprm->std*cltprm->std*(p->skysubtracted?1.0f:2.0f); int32_t *ngblabs=gal_data_malloc_array(GAL_TYPE_UINT32, nngb, __func__, "ngblabs"); /* Go over all the still-unlabeled pixels (if they exist) and see which labels they touch. In the process, get the average value of the river-pixel values and put them in the respective adjacency matrix. Note that at this point, the rivers are also part of the "diffuse" regions. So we don't need to go over all the indexs of this object, only its diffuse indexs. */ if(cltprm->diffuseindexs->size) { sf=(s=cltprm->diffuseindexs->array)+cltprm->diffuseindexs->size; do /* We only want to work on pixels that have already been identified as touching more than one label: river pixels. */ if( olabel[ *s ]==CLUMPS_RIVER ) { /* Initialize the values. */ i=ii=0; rpnum=1; /* River-pixel number of points used. */ rpsum=imgss[*s]; /* River-pixel sum of values used. */ memset(ngblabs, 0, nngb*sizeof *ngblabs); /* Check all the fully-connected neighbors of this pixel and see if it touches a label or not */ GAL_DIMENSION_NEIGHBOR_OP(*s, ndim, dsize, ndim, dinc, { if( olabel[nind] > 0 ) { /* Add this neighbor's value and increment the number. */ if( !isnan(imgss[nind]) ) { ++rpnum; rpsum+=imgss[nind]; } /* Go over the already found neighbors and see if this grown clump has already been considered or not. */ for(i=0;i<ii;++i) if(ngblabs[i]==olabel[nind]) break; /* This is the first time we are getting to this neighbor: */ if(i==ii) ngblabs[ ii++ ] = olabel[nind]; } } ); /* For a check: if(ii>0) { printf("%zu, %zu:\n", *s%dsize[1]+1, *s/dsize[1]+1); for(i=0;i<ii;++i) printf("\t%u\n", ngblabs[i]); } */ /* If more than one neighboring label was found, fill in the 'sums' and 'nums' adjacency matrixs with the values for this pixel. Recall that ii is the number of neighboring labels to this river pixel. */ if(ii>i) for(i=0;i<ii;++i) for(j=0;j<ii;++j) if(i!=j) { /* For safety, we will fill both sides of the diagonal. */ ++nums[ ngblabs[i] * amwidth + ngblabs[j] ]; ++nums[ ngblabs[j] * amwidth + ngblabs[i] ]; sums[ ngblabs[i] * amwidth + ngblabs[j] ] += rpsum/rpnum; sums[ ngblabs[j] * amwidth + ngblabs[i] ] += rpsum/rpnum; } } while(++s<sf); /* We now have the average values and number of all rivers between the grown clumps. We now want to finalize their connection (given the user's criteria). */ for(i=1;i<amwidth;++i) for(j=1;j<i;++j) { ii = i * amwidth + j; if(nums[ii]>p->minriverlength) /* There is a connection. */ { /* For easy reading. */ ave=sums[ii]/nums[ii]; /* In case the average is negative (only possible if `sums' is negative), don't change the adjacency: it is already initialized to zero. Note that even an area of 1 is acceptable, and we put no area criteria here, because the fact that a river exists between two clumps is important. */ if( ave>0.0f && ( c * ave / sqrt(ave+err) ) > p->objbordersn ) { adjacency[ii]=1; /* We want to set both sides of the */ adjacency[ j * amwidth + i ] = 1; /* Symmetric matrix. */ } } } /* For a check: if(cltprm->id==XXX) { printf("=====================\n"); printf("%zu:\n--------\n", cltprm->id); for(i=1;i<amwidth;++i) { printf(" %zu...\n", i); for(j=1;j<amwidth;++j) { ii=i*amwidth+j; if(nums[ii]) { ave=sums[ii]/nums[ii]; printf(" ...%zu: N:%-4zu S:%-10.2f S/N: %-10.2f " "--> %u\n", j, nums[ii], sums[ii], c*ave/sqrt(ave+err), adjacency[ii]); } } printf("\n"); } } */ /* Calculate the new labels for each grown clump. */ cltprm->clumptoobj = gal_binary_connected_adjacency_matrix(adjacency_d, &cltprm->numobjects); clumptoobj = cltprm->clumptoobj->array; } /* There was no list of diffuse pixels, this happens when the user sets a very high `gthresh' threshold and wants to make sure that each clump is a separate object. So we need to define the number of objects and `clumptoobj' manually. */ else { /* Allocate the `clumptoobj' array. */ cltprm->clumptoobj = gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &amwidth, NULL, 1, p->cp.minmapsize, NULL, NULL, NULL); clumptoobj = cltprm->clumptoobj->array; /* Fill in the `clumptoobj' array with the indexs of the objects. */ for(i=0;i<amwidth;++i) clumptoobj[i]=i; /* Set the number of objects. */ cltprm->numobjects = cltprm->numtrueclumps; } /* For a check if(cltprm->id==XXXX) { printf("NUMTRUECLUMPS: %zu\n----------\n", cltprm->numtrueclumps); for(i=0;i<cltprm->numtrueclumps+1;++i) printf("\t%zu --> %d\n", i, clumptoobj[i]); printf("=== numobjects: %zu====\n", cltprm->numobjects); exit(0); } */ /* Correct all the labels. */ sf=(s=cltprm->indexs->array)+cltprm->indexs->size; do if( olabel[*s] > 0 ) olabel[*s] = clumptoobj[ olabel[*s] ]; while(++s<sf); /* Clean up and return. */ free(dinc); free(ngblabs); gal_data_free(nums_d); gal_data_free(sums_d); gal_data_free(adjacency_d); } /* The correspondance between the clumps and objects has been found. With this function, we want to correct the clump labels so the clump IDs in each object start from 1 and are contiguous. */ static void segmentation_relab_clumps_in_objects(struct clumps_thread_params *cltprm) { size_t numobjects=cltprm->numobjects, numtrueclumps=cltprm->numtrueclumps; int32_t *clumptoobj=cltprm->clumptoobj->array; int32_t *clabel=cltprm->clprm->p->clabel->array; size_t i, *s=cltprm->indexs->array, *sf=s+cltprm->indexs->size; size_t *nclumpsinobj=gal_data_calloc_array(GAL_TYPE_SIZE_T, numobjects+1, __func__, "nclumpsinobj"); int32_t *newlabs=gal_data_calloc_array(GAL_TYPE_UINT32, numtrueclumps+1, __func__, "newlabs"); /* Fill both arrays. */ for(i=1;i<numtrueclumps+1;++i) newlabs[i] = ++nclumpsinobj[ clumptoobj[i] ]; /* Reset the clump labels over the detection region. */ do if(clabel[*s]>0) clabel[*s] = newlabs[ clabel[*s] ]; while(++s<sf); /* Clean up. */ free(newlabs); free(nclumpsinobj); } /* Prior to this function, the objects have labels that are unique and contiguous (the labels are contiguous, not the objects!) within each detection and start from 1. However, for the final output, it is necessary that each object over the whole dataset have a unique ID. Since multiple threads are working on separate objects at every instance, this function will use a mutex to limit the reading and writing to the variable keeping the total number of objects counter. */ static void segmentation_relab_overall(struct clumps_thread_params *cltprm) { struct clumps_params *clprm=cltprm->clprm; int32_t startinglab, *olabel=clprm->p->olabel->array; size_t *s=cltprm->indexs->array, *sf=s+cltprm->indexs->size; /* Lock the mutex if we are working on more than one thread. NOTE: it is very important to keep the number of operations within the mutex to a minimum so other threads don't get delayed. */ if(clprm->p->cp.numthreads>1) pthread_mutex_lock(&clprm->labmutex); /* Save the total number of objects found so far into `startinglab', then increment the total number of objects and clumps. */ startinglab = clprm->totobjects; clprm->totobjects += cltprm->numobjects; clprm->totclumps += cltprm->numtrueclumps; /* Unlock the mutex (if it was locked). */ if(clprm->p->cp.numthreads>1) pthread_mutex_unlock(&clprm->labmutex); /* Increase all the object labels by `startinglab'. */ do olabel[*s] += startinglab; while(++s<sf); } /***********************************************************************/ /***************** Over detections *****************/ /***********************************************************************/ /* Find the true clumps over each detection. */ static void * segmentation_on_threads(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct clumps_params *clprm=(struct clumps_params *)(tprm->params); struct noisechiselparams *p=clprm->p; size_t i, *s, *sf; gal_data_t *topinds; struct clumps_thread_params cltprm; int32_t *clabel=p->clabel->array, *olabel=p->olabel->array; /* Initialize the general parameters for this thread. */ cltprm.clprm = clprm; /* Go over all the detections given to this thread (counting from zero.) */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Set the ID of this detection, note that for the threads, we counted from zero, but the IDs start from 1, so we'll add a 1 to the ID given to this thread. */ cltprm.id = tprm->indexs[i]+1; cltprm.indexs = &clprm->labindexs[ cltprm.id ]; /* The `topinds' array is only necessary when the user wants to ignore true clumps with a peak touching a river. */ if(p->keepmaxnearriver==0) { /* Allocate the list of local maxima. For each clump there is going to be one local maxima. But we don't know the number of clumps a-priori, so we'll just allocate the number of pixels given to this detected region. */ topinds=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, cltprm.indexs->dsize, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); cltprm.topinds=topinds->array; } else { cltprm.topinds=NULL; topinds=NULL; } /* Find the clumps over this region. */ clumps_oversegment(&cltprm); /* Make the clump S/N table. This table is made before (possibly) stopping the process (if a check is requested). This is because if the user has also asked for a check image, we can break out of the loop at that point. Note that the array of `gal_data_t' that keeps the S/N table for each detection is allocated before threading starts. However, when the user wants to inspect the steps, this function is called multiple times. So we need to avoid over-writing the allocations. */ if( clprm->sn[ cltprm.id ].dsize==NULL ) clumps_make_sn_table(&cltprm); else cltprm.sn=&clprm->sn[ cltprm.id ]; /* If the user wanted to check the segmentation steps or the clump S/N values in a table, then we have to stop the process at this point. */ if(clprm->step==1 || p->checkclumpsn) { gal_data_free(topinds); continue; } /* Only keep true clumps. */ clumps_det_keep_true_relabel(&cltprm); gal_data_free(topinds); if(clprm->step==2) continue; /* Set the internal (with the detection) clump and object labels. Segmenting a detection into multiple objects is only defined when there is more than one true clump over the detection. When there is only one true clump (cltprm->numtrueclumps==1) or none (p->numtrueclumps==0), then just set the required preliminaries to make the next steps be generic for all cases. */ if(cltprm.numtrueclumps<=1) { /* Set the basics. */ cltprm.numobjects=1; segmentation_relab_noseg(&cltprm); /* If the user wanted a check image, this object doesn't change. */ if( clprm->step >= 3 && clprm->step <= 6) continue; /* If the user has asked for grown clumps in the clumps image instead of the raw clumps, then replace the indexs in the `clabel' array is well. In this case, there will always be one "clump". */ if(p->grownclumps) { sf=(s=cltprm.indexs->array)+cltprm.indexs->size; do clabel[ *s++ ] = 1; while(s<sf); cltprm.numtrueclumps=1; } } else { /* Grow the true clumps over the detection. */ clumps_grow_prepare_initial(&cltprm); if(cltprm.diffuseindexs->size) clumps_grow(p->olabel, cltprm.diffuseindexs, 1, 1); if(clprm->step==3) { gal_data_free(cltprm.diffuseindexs); continue; } /* If grown clumps are desired instead of the raw clumps, then replace all the grown clumps with those in clabel. */ if(p->grownclumps) { sf=(s=cltprm.indexs->array)+cltprm.indexs->size; do if(olabel[*s]>0) clabel[*s]=olabel[*s]; while(++s<sf); } /* Identify the objects in this detection using the grown clumps and correct the grown clump labels into new object labels. */ segmentation_relab_to_objects(&cltprm); if(clprm->step==4) { gal_data_free(cltprm.clumptoobj); gal_data_free(cltprm.diffuseindexs); continue; } /* Continue the growth and cover the whole area, we don't need the diffuse indexs any more, so after filling the detected region, free the indexs. */ if( cltprm.numobjects == 1 ) segmentation_relab_noseg(&cltprm); else { /* Correct the labels so every non-labeled pixel can be grown. */ clumps_grow_prepare_final(&cltprm); /* Cover the whole area (using maximum connectivity to not miss any pixels). */ clumps_grow(p->olabel, cltprm.diffuseindexs, 0, p->olabel->ndim); /* Make sure all diffuse pixels are labeled. */ if(cltprm.diffuseindexs->size) error(EXIT_FAILURE, 0, "a bug! Please contact us at %s to " "fix it. %zu pixels of detection %zu have not been " "labeled (as an object)", PACKAGE_BUGREPORT, cltprm.diffuseindexs->size, cltprm.id); } gal_data_free(cltprm.diffuseindexs); if(clprm->step==5) { gal_data_free(cltprm.clumptoobj); continue; } /* Correct the clump labels. Note that this is only necessary when there is more than object over the detection or when there were multiple clumps over the detection. */ if(cltprm.numobjects>1) segmentation_relab_clumps_in_objects(&cltprm); gal_data_free(cltprm.clumptoobj); if(clprm->step==6) {continue;} } /* Convert the object labels to their final value */ segmentation_relab_overall(&cltprm); } /* Wait until all the threads finish then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* If the user wanted to see the S/N table in a file, this function will be called and will do the job. */ static void segmentation_save_sn_table(struct clumps_params *clprm) { char *msg; float *sarr; int32_t *oiarr, *cioarr; gal_list_str_t *comments=NULL; size_t i, j, c=0, totclumps=0; gal_data_t *sn, *objind, *clumpinobj; struct noisechiselparams *p=clprm->p; /* Find the total number of clumps in all the initial detections. Recall that the `size' values were one more than the actual number because the labelings start from 1. */ for(i=1;i<p->numdetections+1;++i) totclumps += clprm->sn[i].size-1; /* Allocate the columns for the table. */ sn=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &totclumps, NULL, 0, p->cp.minmapsize, "CLUMP_S/N", "ratio", "Signal-to-noise ratio."); objind=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &totclumps, NULL, 0, p->cp.minmapsize, "HOST_DET_ID", "counter", "ID of detection hosting this clump."); clumpinobj=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &totclumps, NULL, 0, p->cp.minmapsize, "CLUMP_ID_IN_OBJ", "counter", "ID of clump in host detection."); /* Fill in the columns. */ sarr=sn->array; oiarr=objind->array; cioarr=clumpinobj->array; for(i=1;i<p->numdetections+1;++i) for(j=1;j<clprm->sn[i].size;++j) { oiarr[c] = i; cioarr[c] = j; sarr[c] = ((float *)(clprm->sn[i].array))[j]; ++c; } /* Write the comments. */ gal_list_str_add(&comments, "See also: `CLUMPS_ALL_DET' HDU of " "output with `--checksegmentation'.", 1); asprintf(&msg, "S/N values of `nan': clumps smaller than `--segsnminarea' " "of %zu.", p->segsnminarea); gal_list_str_add(&comments, msg, 0); gal_list_str_add(&comments, "S/N of clumps over detected regions.", 1); gal_table_comments_add_intro(&comments, PROGRAM_STRING, &p->rawtime); /* Set the column pointers and write them into a table.. */ clumpinobj->next=sn; objind->next=clumpinobj; gal_checkset_writable_remove(p->clumpsn_d_name, 0, 1); gal_table_write(objind, comments, p->cp.tableformat, p->clumpsn_d_name, "CLUMPS_SN"); /* Clean up. */ gal_data_free(sn); gal_data_free(objind); gal_data_free(clumpinobj); gal_list_str_free(comments, 1); /* Abort NoiseChisel if necessary. */ if(!p->continueaftercheck) ui_abort_after_check(p, p->clumpsn_s_name, p->clumpsn_d_name, "showing all clump S/N values"); } /* Find true clumps over the detected regions. */ static void segmentation_detections(struct noisechiselparams *p) { char *msg; struct clumps_params clprm; gal_data_t *labindexs, *claborig, *demo=NULL; /* Get the indexs of all the pixels in each label. */ labindexs=clumps_det_label_indexs(p); /* Initialize the necessary thread parameters. Note that since the object labels begin from one, the `sn' array will have one extra element.*/ clprm.p=p; clprm.sky0_det1=1; clprm.totclumps=0; clprm.totobjects=0; clprm.snind = NULL; clprm.labindexs=labindexs; clprm.sn=gal_data_array_calloc(p->numdetections+1); /* When more than one thread is to be used, initialize the mutex. */ if( p->cp.numthreads > 1 ) pthread_mutex_init(&clprm.labmutex, NULL); /* Spin off the threads to start the work. Note that several steps are done on each tile within a thread. So if the user wants to check steps, we need to break out of the processing get an over-all output, then reset the input and call it again. So it will be slower, but its is natural, since the user is testing to find the correct combination of parameters for later use. */ if(p->segmentationname) { /* Necessary initializations. */ clprm.step=1; claborig=p->clabel; p->clabel=gal_data_copy(claborig); /* Do each step. */ while(clprm.step<8) { /* Reset the temporary copy of clabel back to its original. */ if(clprm.step>1) memcpy(p->clabel->array, claborig->array, claborig->size*gal_type_sizeof(claborig->type)); /* (Re-)do everything until this step. */ gal_threads_spin_off(segmentation_on_threads, &clprm, p->numdetections, p->cp.numthreads); /* Set the extension name. */ switch(clprm.step) { case 1: demo=p->clabel; demo->name = "DET_CLUMPS_ALL"; if(!p->cp.quiet) { asprintf(&msg, "Identified clumps over detections " "(HDU: `%s').", demo->name); gal_timing_report(NULL, msg, 2); free(msg); } break; case 2: demo=p->clabel; demo->name = "DET_CLUMPS_TRUE"; if(!p->cp.quiet) { asprintf(&msg, "True clumps found " "(HDU: `%s').", demo->name); gal_timing_report(NULL, msg, 2); free(msg); } break; case 3: demo=p->olabel; demo->name = "DET_CLUMPS_GROWN"; if(!p->cp.quiet) { gal_timing_report(NULL, "Starting to identify objects.", 1); asprintf(&msg, "True clumps grown " "(HDU: `%s').", demo->name); gal_timing_report(NULL, msg, 2); free(msg); } break; case 4: demo=p->olabel; demo->name = "DET_OBJ_IDENTIFIED"; if(!p->cp.quiet) { asprintf(&msg, "Identified objects over detections " "(HDU: `%s').", demo->name); gal_timing_report(NULL, msg, 2); free(msg); } break; case 5: demo=p->olabel; demo->name = "DET_OBJECTS_FULL"; if(!p->cp.quiet) { asprintf(&msg, "Objects grown to cover full area " "(HDU: `%s').", demo->name); gal_timing_report(NULL, msg, 2); free(msg); } break; case 6: demo=p->clabel; demo->name = "CLUMPS_FINAL"; if(!p->cp.quiet) { asprintf(&msg, "Clumps given their final label " "(HDU: `%s').", demo->name); gal_timing_report(NULL, msg, 2); free(msg); } break; case 7: demo=p->olabel; demo->name = "OBJECTS_FINAL"; if(!p->cp.quiet) { asprintf(&msg, "Objects given their final label " "(HDU: `%s').", demo->name); gal_timing_report(NULL, msg, 2); free(msg); } break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so " "we can address the issue. The value %d is not " "recognized for clprm.step", __func__, PACKAGE_BUGREPORT, clprm.step); } /* Write the demonstration array into the check image. The default values are hard to view, so we'll make a copy of the demo, set all Sky regions to blank and all clump macro values to zero. */ gal_fits_img_write(demo, p->segmentationname, NULL, PROGRAM_NAME); /* If the user wanted to check the clump S/N values, then break out of the loop, we don't need the rest of the process any more. */ if( clprm.step==1 && ( p->checkclumpsn && !p->continueaftercheck ) ) break; /* Increment the step counter. */ ++clprm.step; } /* Clean up (we don't need the original any more). */ gal_data_free(claborig); p->olabel->name = p->clabel->name = NULL; } else { clprm.step=0; gal_threads_spin_off(segmentation_on_threads, &clprm, p->numdetections, p->cp.numthreads); } /* Save the final number of objects and clumps. */ p->numclumps=clprm.totclumps; p->numobjects=clprm.totobjects; /* If the user wanted to see the S/N table, then make the S/N table. */ if(p->checkclumpsn) segmentation_save_sn_table(&clprm); /* Clean up allocated structures and destroy the mutex. */ gal_data_array_free(clprm.sn, p->numdetections+1, 1); gal_data_array_free(labindexs, p->numdetections+1, 1); if( p->cp.numthreads>1 ) pthread_mutex_destroy(&clprm.labmutex); } /***********************************************************************/ /***************** High level function *****************/ /***********************************************************************/ void segmentation(struct noisechiselparams *p) { float *f; char *msg; int32_t *l, *lf; struct timeval t1; /* To keep the user up to date. */ if(!p->cp.quiet) { if(!p->cp.quiet) gettimeofday(&t1, NULL); gal_timing_report(NULL, "Starting segmentation.", 1); } /* If a check segmentation image was requested, then put in the inputs. */ if(p->segmentationname) { gal_fits_img_write(p->input, p->segmentationname, NULL, PROGRAM_NAME); gal_fits_img_write(p->conv, p->segmentationname, NULL, PROGRAM_NAME); p->olabel->name="DETECTION_LABELS"; gal_fits_img_write(p->olabel, p->segmentationname, NULL, PROGRAM_NAME); p->olabel->name=NULL; } /* Allocate the clump labels image. */ p->clabel=gal_data_alloc(NULL, p->olabel->type, p->olabel->ndim, p->olabel->dsize, p->olabel->wcs, 1, p->cp.minmapsize, NULL, NULL, NULL); p->clabel->flag=p->input->flag; /* Set any possibly existing NaN values to blank. */ f=p->input->array; lf=(l=p->clabel->array)+p->clabel->size; do if(isnan(*f++)) *l=GAL_BLANK_INT32; while(++l<lf); /* Find the clump S/N threshold. */ clumps_true_find_sn_thresh(p); /* Reset the clabel array to find true clumps in objects. */ f=p->input->array; lf=(l=p->clabel->array)+p->clabel->size; do *l = isnan(*f++) ? GAL_BLANK_INT32 : 0; while(++l<lf); /* Find true clumps over the detected regions. */ segmentation_detections(p); /* Report the results and timing to the user. */ if(!p->cp.quiet) { asprintf(&msg, "%zu object%s""containing %zu clump%sfound.", p->numobjects, p->numobjects==1 ? " " : "s ", p->numclumps, p->numclumps ==1 ? " " : "s "); gal_timing_report(&t1, msg, 1); free(msg); } /* If the user wanted to check the segmentation and hasn't called `continueaftercheck', then stop NoiseChisel. */ if(p->segmentationname && !p->continueaftercheck) ui_abort_after_check(p, p->segmentationname, NULL, "showing all segmentation steps"); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/sky.c������������������������������������������������������������������0000644�0001750�0001750�00000021253�13156610402�014171� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/tile.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/threads.h> #include <gnuastro/statistics.h> #include "main.h" #include "ui.h" #include "threshold.h" /**************************************************************** ************ Estimate the Sky ************ ****************************************************************/ static void * sky_mean_std_undetected(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct noisechiselparams *p=(struct noisechiselparams *)tprm->params; double *darr, s, s2; int type=p->sky->type; size_t i, tind, numsky, dsize=2; gal_data_t *tile, *meanstd_d, *meanstd, *bintile; /* A dataset to keep the mean and STD in double type. */ meanstd_d=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); darr=meanstd_d->array; /* An empty dataset to replicate a tile on the binary array. */ bintile=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, NULL, NULL, NULL); free(bintile->array); free(bintile->dsize); bintile->block=p->binary; bintile->ndim=p->binary->ndim; /* Go over all the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Basic definitions */ numsky=0; tind = tprm->indexs[i]; tile = &p->cp.tl.tiles[tind]; /* Correct the fake binary tile's properties to be the same as this one, then count the number of zero valued elements in it. */ bintile->size=tile->size; bintile->dsize=tile->dsize; bintile->array=gal_tile_block_relative_to_other(tile, p->binary); GAL_TILE_PARSE_OPERATE(tile, bintile, 1, 1, {if(!*o) numsky++;}); /* Only continue, if the fraction of Sky values are less than the requested fraction. */ if( (float)(numsky)/(float)(tile->size) > p->minskyfrac) { /* Calculate the mean and STD over this tile. */ s=s2=0.0f; GAL_TILE_PARSE_OPERATE(tile, bintile, 1, 1, { if(!*o) { s += *i; s2 += *i * *i; } } ); darr[0]=s/numsky; darr[1]=sqrt( (s2-s*s/numsky)/numsky ); /* Convert the mean and std into the same type as the sky and std arrays. */ meanstd=gal_data_copy_to_new_type(meanstd_d, type); /* Copy the mean and STD to their respective places in the tile arrays. */ memcpy(gal_data_ptr_increment(p->sky->array, tind, type), meanstd->array, gal_type_sizeof(type)); memcpy(gal_data_ptr_increment(p->std->array, tind, type), gal_data_ptr_increment(meanstd->array, 1, type), gal_type_sizeof(type)); /* Clean up. */ gal_data_free(meanstd); } else { gal_blank_write(gal_data_ptr_increment(p->sky->array, tind, type), type); gal_blank_write(gal_data_ptr_increment(p->std->array, tind, type), type); } } /* Clean up and wait for other threads to finish and abort. */ bintile->array=NULL; bintile->dsize=NULL; gal_data_free(bintile); gal_data_free(meanstd_d); if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } void sky_and_std(struct noisechiselparams *p, char *checkname) { gal_data_t *tmp; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&cp->tl; /* When the check image has the same resolution as the input, write the binary array as a reference to help in the comparison. */ if(checkname && !tl->oneelempertile) { p->binary->name="DETECTED"; gal_fits_img_write(p->binary, checkname, NULL, PROGRAM_NAME); p->binary->name=NULL; } /* Allocate space for the mean and standard deviation. */ p->sky=gal_data_alloc(NULL, p->input->type, p->input->ndim, tl->numtiles, NULL, 0, cp->minmapsize, "SKY", p->input->unit, NULL); p->std=gal_data_alloc(NULL, p->input->type, p->input->ndim, tl->numtiles, NULL, 0, cp->minmapsize, "STD", p->input->unit, NULL); /* Find the Sky and its STD on proper tiles. */ gal_threads_spin_off(sky_mean_std_undetected, p, tl->tottiles, cp->numthreads); if(checkname) { gal_tile_full_values_write(p->sky, tl, 1, checkname, NULL, PROGRAM_NAME); gal_tile_full_values_write(p->std, tl, 1, checkname, NULL, PROGRAM_NAME); } /* Get the basic information about the standard deviation distribution. */ tmp=gal_statistics_median(p->std, 0); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); memcpy(&p->medstd, tmp->array, sizeof p->medstd); gal_data_free(tmp); tmp=gal_statistics_minimum(p->std); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); memcpy(&p->minstd, tmp->array, sizeof p->minstd); gal_data_free(tmp); tmp=gal_statistics_maximum(p->std); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); memcpy(&p->maxstd, tmp->array, sizeof p->maxstd); gal_data_free(tmp); /* In case the image is in electrons or counts per second, the standard deviation of the noise will become smaller than unity, so we need to correct it in the S/N calculation. So, we'll calculate the correction factor here. */ p->cpscorr = p->minstd>1 ? 1.0f : p->minstd; /* Interpolate and smooth the derived values. */ threshold_interp_smooth(p, &p->sky, &p->std, NULL, checkname); /* If a check was requested, abort NoiseChisel. */ if(checkname && !p->continueaftercheck) ui_abort_after_check(p, checkname, NULL, "showing derivation of Sky " "value and its standard deviation, or STD"); } /**************************************************************** ************ Subtract the Sky ************ ****************************************************************/ void sky_subtract(struct noisechiselparams *p) { size_t tid; void *tarray=NULL; float *sky=p->sky->array; gal_data_t *tile, *tblock=NULL; /* A small sanity check. */ if(p->sky->type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: only `float32' type is acceptable " "for sky values. but `p->sky' has type `%s'", __func__, gal_type_name(p->sky->type, 1)); /* Go over all the tiles. */ for(tid=0; tid<p->cp.tl.tottiles; ++tid) { /* For easy reading. */ tile=&p->cp.tl.tiles[tid]; /* First subtract the Sky value from the input image. */ GAL_TILE_PARSE_OPERATE(tile, NULL, 0, 0, {*i-=sky[tid];}); /* Change to the convolved image. */ tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, p->conv); tile->block=p->conv; /* The threshold is always low. So for the majority of non-NaN pixels in the image, the condition above will be true. If we come over a NaN pixel, then by definition of NaN, all conditionals will fail. If an image doesn't have any NaN pixels, only the pixels below the threshold have to be checked for a NaN which are by definition a very small fraction of the total pixels. And if there are NaN pixels in the image. */ GAL_TILE_PARSE_OPERATE(tile, NULL, 0, 0, {*i-=sky[tid];}); /* Revert back to the original block. */ tile->array=tarray; tile->block=tblock; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/noisechisel.c����������������������������������������������������������0000644�0001750�0001750�00000022777�13177434336�015721� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/convolve.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "ui.h" #include "sky.h" #include "detection.h" #include "threshold.h" #include "segmentation.h" /***********************************************************************/ /************* Wrapper functions (for clean high-level) ***************/ /***********************************************************************/ static void noisechisel_convolve(struct noisechiselparams *p) { struct timeval t1; struct gal_tile_two_layer_params *tl=&p->cp.tl; /* Convovle with sharper kernel. */ if(p->conv==NULL) { /* Make the convolved image. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); p->conv = gal_convolve_spatial(tl->tiles, p->kernel, p->cp.numthreads, 1, tl->workoverch); /* Report and write check images if necessary. */ if(!p->cp.quiet) { if(p->widekernel) gal_timing_report(&t1, "Convolved with sharper kernel.", 1); else gal_timing_report(&t1, "Convolved with given kernel.", 1); } } /* Set a fixed name for the convolved image (since it will be used in many check images). */ if(p->conv->name) free(p->conv->name); gal_checkset_allocate_copy( ( p->widekernel ? "CONVOLVED-SHARPER" : "CONVOLVED" ), &p->conv->name); /* Save the convolution step if necessary. */ if(p->detectionname) { gal_fits_img_write(p->input, p->detectionname, NULL, PROGRAM_NAME); gal_fits_img_write(p->conv, p->detectionname, NULL, PROGRAM_NAME); } /* Convolve with wider kernel (if requested). */ if(p->widekernel) { if(!p->cp.quiet) gettimeofday(&t1, NULL); p->wconv=gal_convolve_spatial(tl->tiles, p->widekernel, p->cp.numthreads, 1, tl->workoverch); gal_checkset_allocate_copy("CONVOLVED-WIDER", &p->wconv->name); if(!p->cp.quiet) gal_timing_report(&t1, "Convolved with wider kernel.", 1); } } static void noisechisel_find_sky_subtract(struct noisechiselparams *p) { /* Find the final Sky value. */ sky_and_std(p, p->skyname); /* Abort if the user only wanted to see until this point.*/ if(p->skyname && !p->continueaftercheck) ui_abort_after_check(p, p->skyname, NULL, "derivation of final Sky (and its STD) value"); /* Subtract the Sky from the Input and Convolved (necessary for segmentation) images. */ sky_subtract(p); } /* If convolution was not done while respecting channel edges (when there is more than one channel, pixels outside the edge weren't used in the convolution), then correct it. */ static void noisechisel_convolve_correct_ch_edges(struct noisechiselparams *p) { struct gal_tile_two_layer_params *tl=&p->cp.tl; /* Correct the convolved image if necessary. */ if( tl->totchannels>1 && tl->workoverch==0 ) { /* Do the correction. */ gal_convolve_spatial_correct_ch_edge(tl->tiles, p->kernel, p->cp.numthreads, 1, p->conv); /* Inform the user. */ if(!p->cp.quiet) gal_timing_report(NULL, "Corrected convolution of touching channel " "edges", 1); } } /***********************************************************************/ /************* Output ***************/ /***********************************************************************/ /* The input image has been sky subtracted for further processing. So we'll need to copy the input image directly into the output. */ static void noisechisel_output_copy_input(struct noisechiselparams *p) { int status=0; fitsfile *in, *out; char card[FLEN_CARD]; /* Create/open the output file. */ out=gal_fits_open_to_write(p->cp.output); /* Open the input FITS file in the proper extension. */ in=gal_fits_hdu_open(p->inputname, p->cp.hdu, READWRITE); /* Copy the input HDU into the output. */ if( fits_copy_hdu(in, out, 0, &status) ) gal_fits_io_error(status, "copying input hdu into first output hdu"); /* If an extension name exists in the input HDU, then don't touch it. If the input doesn't have any, then make an EXTNAME keyword for it. Note that `fits_read_card' will return a non-zero if it doesn't find the keyword. */ if( fits_read_card(out, "EXTNAME", card, &status) ) { status=0; fits_write_key(out, TSTRING, "EXTNAME", "INPUT", "", &status); } /* Close the two files. */ fits_close_file(in, &status); fits_close_file(out, &status); } /* Write the output file. */ static void noisechisel_output(struct noisechiselparams *p) { gal_fits_list_key_t *keys=NULL; /* Copy the input image into the first extension. */ noisechisel_output_copy_input(p); /* Write the object labels and useful information into it's header. */ if(p->onlydetection==0) gal_fits_key_list_add(&keys, GAL_TYPE_STRING, "WCLUMPS", 0, "yes", 0, "Generate catalog with clumps?", 0, "bool"); gal_fits_key_list_add(&keys, GAL_TYPE_SIZE_T, "NUMLABS", 0, &p->numobjects, 0, "Total number of labels " "(inclusive)", 0, "counter"); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "DETSN", 0, &p->detsnthresh, 0, "Minimum S/N of true pseudo-detections", 0, "ratio"); p->olabel->name = p->onlydetection ? "DETECTIONS" : "OBJECTS"; gal_fits_img_write(p->olabel, p->cp.output, keys, PROGRAM_NAME); p->olabel->name=NULL; keys=NULL; /* Write the clumps labels and useful information into it's header. Note that to make the clumps image more easily viewable, we will set all sky pixels to blank. Only clump pixels that have an overlapping object pixel will be use anyway, so the sky pixels are irrelevant. */ if(p->onlydetection==0) { p->clabel->name="CLUMPS"; gal_fits_key_list_add(&keys, GAL_TYPE_SIZE_T, "NUMLABS", 0, &p->numclumps, 0, "Total number of clumps", 0, "counter"); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "CLUMPSN", 0, &p->clumpsnthresh, 0, "Minimum S/N of true clumps", 0, "ratio"); gal_fits_img_write(p->clabel, p->cp.output, keys, PROGRAM_NAME); p->clabel->name=NULL; keys=NULL; } /* Write the Sky image into the output */ if(p->sky->name) free(p->sky->name); p->sky->name="SKY"; gal_tile_full_values_write(p->sky, &p->cp.tl, 1, p->cp.output, NULL, PROGRAM_NAME); p->sky->name=NULL; /* Write the Sky standard deviation into the output. */ p->std->name="SKY_STD"; gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "MAXSTD", 0, &p->maxstd, 0, "Maximum raw tile standard deviation", 0, p->input->unit); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "MINSTD", 0, &p->minstd, 0, "Minimum raw tile standard deviation", 0, p->input->unit); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "MEDSTD", 0, &p->medstd, 0, "Median raw tile standard deviation", 0, p->input->unit); gal_tile_full_values_write(p->std, &p->cp.tl, 1, p->cp.output, keys, PROGRAM_NAME); p->std->name=NULL; } /***********************************************************************/ /************* High level function ***************/ /***********************************************************************/ void noisechisel(struct noisechiselparams *p) { /* Convolve the image. */ noisechisel_convolve(p); /* Do the initial detection. */ detection_initial(p); /* Remove false detections. */ detection(p); /* Find the Sky value and subtract it from the input and convolved images. */ noisechisel_find_sky_subtract(p); /* If the user only wanted detection, ignore the segmentation steps. */ if(p->onlydetection==0) { /* Correct the convolved image channel edges if necessary. */ noisechisel_convolve_correct_ch_edges(p); /* Do the segmentation. */ segmentation(p); } else p->numobjects=p->numdetections; /* Write the output. */ noisechisel_output(p); } �gnuastro-0.5/bin/noisechisel/detection.c������������������������������������������������������������0000644�0001750�0001750�00000105732�13216276304�015354� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/fits.h> #include <gnuastro/binary.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" #include "sky.h" #include "clumps.h" #include "threshold.h" /**************************************************************** ************ Initial detection ************ ****************************************************************/ void detection_initial(struct noisechiselparams *p) { char *msg; uint8_t *b, *bf; struct timeval t0, t1; /* Get the starting time. */ if(!p->cp.quiet) { gal_timing_report(NULL, "Starting to find initial detections.", 1); gettimeofday(&t0, NULL); } /* Find and apply the threshold on the input. */ threshold_quantile_find_apply(p); if(p->detectionname) { p->binary->name="THRESHOLDED"; gal_fits_img_write(p->binary, p->detectionname, NULL, PROGRAM_NAME); p->binary->name=NULL; } /* Erode the image. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); gal_binary_erode(p->binary, p->erode, p->erodengb==4 ? 1 : 2, 1); if(!p->cp.quiet) { asprintf(&msg, "Eroded %zu time%s (%zu-connectivity).", p->erode, p->erode>1?"s":"", p->erodengb); gal_timing_report(&t1, msg, 2); free(msg); } if(p->detectionname) { p->binary->name="ERODED"; gal_fits_img_write(p->binary, p->detectionname, NULL, PROGRAM_NAME); p->binary->name=NULL; } /* Correct the no-erode values. */ bf=(b=p->binary->array)+p->binary->size; do *b = *b==THRESHOLD_NO_ERODE_VALUE ? 1 : *b; while(++b<bf); /* Do the opening. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); gal_binary_open(p->binary, p->opening, p->openingngb==4 ? 1 : 2, 1); if(!p->cp.quiet) { asprintf(&msg, "Opened (depth: %zu, %s connectivity).", p->opening, p->openingngb==4 ? "4" : "8"); gal_timing_report(&t1, msg, 2); free(msg); } /* Label the connected components. */ p->numinitialdets=gal_binary_connected_components(p->binary, &p->olabel, p->binary->ndim); if(p->detectionname) { p->olabel->name="OPENED_AND_LABELED"; gal_fits_img_write(p->olabel, p->detectionname, NULL, PROGRAM_NAME); p->olabel->name=NULL; } /* Report the ending of initial detection. */ if(!p->cp.quiet) { asprintf(&msg, "%zu initial detections found.", p->numinitialdets); gal_timing_report(&t0, msg, 1); free(msg); } } /**************************************************************** ************ Pseudo detections ************ ****************************************************************/ /* Set all the pixels we don't need to Nan. */ static void detection_pseudo_sky_or_det(struct noisechiselparams *p, uint8_t *w, int s0d1) { int32_t *l=p->olabel->array; uint8_t *b=p->binary->array, *bf=b+p->binary->size; if(s0d1) /* Set all sky regions (label equal to zero) to zero, since a blank pixel is also non-zero, we don't need to check for blanks in this case. */ do *w++ = *l++ ? *b : 0; while(++b<bf); else /* Set all detected pixels to 1. */ do { *w++ = *l ? *l==GAL_BLANK_INT32 ? GAL_BLANK_UINT8 : 1 : *b; ++l; } while(++b<bf); } /* Copy the space of this tile into the full/large array. */ static void detection_write_in_large(gal_data_t *tile, gal_data_t *copy) { uint8_t *c=copy->array; GAL_TILE_PARSE_OPERATE(tile, NULL, 0, 0, {*i=*c++;}); } /* Fill the holes and open on multiple threads to find the pseudo-detections. Ideally both these should be done immediately after each other on each large tile, but when the user wants to check the steps, we need to break out of the threads at each step. */ struct fho_params { int step; uint8_t *copyspace; gal_data_t *workbin; gal_data_t *worklab; struct noisechiselparams *p; }; static void * detection_fill_holes_open(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct fho_params *fho_prm=(struct fho_params *)(tprm->params); struct noisechiselparams *p=fho_prm->p; void *tarray; gal_data_t *tile, *copy, *tblock; size_t i, dsize[]={1,1,1,1,1,1,1,1,1,1}; /* For upto 10-Dimensions! */ /* A temporary data structure to wrap around the copy space. Note that the initially allocated space for this tile is only 1 pixel! */ copy=gal_data_alloc(NULL, GAL_TYPE_UINT8, p->input->ndim, dsize, NULL, 0, -1, NULL, NULL, NULL); free(copy->array); copy->array=&fho_prm->copyspace[p->maxltcontig*tprm->id]; /* Go over all the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ tile=&p->ltl.tiles[tprm->indexs[i]]; /* Change the tile pointers (temporarily). */ tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, fho_prm->workbin); tile->block=fho_prm->workbin; /* Copy the tile into the contiguous patch of memory to work on, but first reset the size element so `gal_data_copy_to_allocated' knows there is enough space. */ copy->size=p->maxltcontig; gal_data_copy_to_allocated(tile, copy); /* Fill the holes in this tile: holes with maximal connectivity means that they are most strongly bounded. */ gal_binary_fill_holes(copy, copy->ndim, -1); if(fho_prm->step==1) { detection_write_in_large(tile, copy); tile->array=tarray; tile->block=tblock; continue; } /* Open all the regions. */ gal_binary_open(copy, 1, 1, 1); /* Write the copied region back into the large input and AFTERWARDS, correct the tile's pointers, the pointers must not be corrected before writing the copy. */ detection_write_in_large(tile, copy); tile->array=tarray; tile->block=tblock; } /* Clean up. */ copy->array=NULL; gal_data_free(copy); /* Wait until all the threads finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* We have the thresholded image (with blank values for regions that should not be used). Find the pseudo-detections in those regions. */ static size_t detection_pseudo_find(struct noisechiselparams *p, gal_data_t *workbin, gal_data_t *worklab, int s0d1) { gal_data_t *bin; struct fho_params fho_prm={0, NULL, workbin, worklab, p}; /* Set all the initial detected pixels to blank values. */ detection_pseudo_sky_or_det(p, workbin->array, s0d1); if(p->detectionname) { workbin->name = s0d1 ? "DTHRESH-ON-DET" : "DTHRESH-ON-SKY"; gal_fits_img_write(workbin, p->detectionname, NULL, PROGRAM_NAME); workbin->name=NULL; } /* Allocate the space necessary to work on each tile (to avoid having to allocate it it separately for each tile and within each thread. `maxltcontig' is the maximum contiguous patch of memory needed to store all tiles. Finally, since we are working on a `uint8_t' type, the size of each element is only 1 byte. */ fho_prm.copyspace=gal_data_malloc_array(GAL_TYPE_UINT8, p->cp.numthreads*p->maxltcontig, __func__, "fho_prm.copyspace"); /* Fill the holes and open on each large tile. When no check image is requested, the two steps can be done independently on each tile, but when a check image is requested, we need to break out of the thread spinning function to save the full image then continue it. */ if( p->detectionname ) { /* Necessary initializations. */ bin=gal_data_copy(workbin); /* - Temporary array for demonstration. */ fho_prm.workbin=bin; /* - To pass onto the thread. */ fho_prm.step=1; /* - So we can break out of the threads. */ /* Do each step. */ while(fho_prm.step<3) { /* Put a copy of `workbin' into `bin' for every step (only necessary for the second step and after). For the first time it was already copied.*/ if(fho_prm.step>1) memcpy(bin->array, workbin->array, workbin->size); /* Do the respective step. */ gal_threads_spin_off(detection_fill_holes_open, &fho_prm, p->ltl.tottiles, p->cp.numthreads); /* Set the extension name based on the step. */ switch(fho_prm.step) { case 1: bin->name="HOLES-FILLED"; break; case 2: bin->name="OPENED"; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so " "we can address the issue. the value %d is not " "recognized.", __func__, PACKAGE_BUGREPORT, fho_prm.step); } /* Write the temporary array into the check image. */ gal_fits_img_write(bin, p->detectionname, NULL, PROGRAM_NAME); /* Increment the step counter. */ ++fho_prm.step; } /* Clean up: the array in `bin' should just be replaced with that in `workbin' because it is used in later steps. */ if(workbin->mmapname) { /* Delete the memory mapped file and set the filename of `bin' for `workbin'. */ remove(workbin->mmapname); free(workbin->mmapname); workbin->mmapname=bin->mmapname; bin->mmapname=NULL; } else free(workbin->array); workbin->array=bin->array; bin->name=bin->array=NULL; gal_data_free(bin); } else gal_threads_spin_off(detection_fill_holes_open, &fho_prm, p->ltl.tottiles, p->cp.numthreads); /* Clean up. */ free(fho_prm.copyspace); /* Label all regions, but first, deal with the blank pixels in the `workbin' dataset when working on the Sky. Recall that in this case, the blank pixels are the detections. On the Sky image, blank should be set to 1 (because we want the detected objects to have the same labels as the pseudo-detections that cover them). This will allow us to later remove these pseudo-detections. if(s0d1==0) { bf=(b=workbin->array)+workbin->size; do if(*b==GAL_BLANK_UINT8) *b = !s0d1; while(++b<bf); } */ return gal_binary_connected_components(workbin, &worklab, 1); } /* Write the S/N tables to a file. */ static void detection_sn_write_to_file(struct noisechiselparams *p, gal_data_t *sn, gal_data_t *snind, int s0d1D2) { char *str; gal_list_str_t *comments=NULL; /* Comment for extension on further explanation. */ asprintf(&str, "See also: `%s' HDU of output with " "`--checkdetection'", ( s0d1D2<2 ? "PSEUDOS-FOR-SN": "DILATED" )); gal_list_str_add(&comments, str, 0); /* Description comment. */ str = ( s0d1D2 ? ( s0d1D2==2 ? "S/N of grown detections." : "Pseudo-detection S/N over initial detections." ) : "Pseudo-detection S/N over initial undetections."); gal_list_str_add(&comments, str, 1); /* Set the file name. */ str = ( s0d1D2 ? ( s0d1D2==2 ? p->detsn_D_name : p->detsn_d_name ) : p->detsn_s_name ); threshold_write_sn_table(p, sn, snind, str, comments); gal_list_str_free(comments, 1); /* Abort NoiseChisel if the user asked for it. */ if(s0d1D2==2 && !p->continueaftercheck) ui_abort_after_check(p, p->detsn_s_name, p->detsn_d_name, "pseudo-detection and grown/final detection S/N " "values in a table"); } static gal_data_t * detection_sn(struct noisechiselparams *p, gal_data_t *worklab, size_t num, int s0d1D2, char *extname) { float *snarr; uint8_t *flag; size_t tablen=num+1; gal_data_t *sn, *snind; int32_t *plabend, *indarr=NULL; double ave, err, *xy, *brightness; size_t ind, ndim=p->input->ndim, xyncols=1+ndim; size_t i, *area, counter=0, *dsize=p->input->dsize; float *img=p->input->array, *f=p->input->array, *ff=f+p->input->size; int32_t *plab = worklab->array, *dlab = s0d1D2 ? NULL : p->olabel->array; size_t *coord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "coord"); /* Sanity check. */ if(p->input->type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: the input dataset must be float32 type, " "it is %s", __func__, gal_type_name(p->input->type, 1)); if(!isnan(GAL_BLANK_FLOAT32)) error(EXIT_FAILURE, 0, "%s: only a NaN value is recognized for blank " "floating point data types, the blank value is defined to be %f", __func__, GAL_BLANK_FLOAT32); if(ndim!=2) error(EXIT_FAILURE, 0, "%s: only 2D datasets are acceptable, your input " "is %zu dimensions", __func__, ndim); /* Allocate all the necessary arrays, note that since we want to put each object's information into the same index, the number of allocated spaces has to be `tablen=num+1'. */ area = gal_data_calloc_array(GAL_TYPE_SIZE_T, tablen, __func__, "area"); brightness = gal_data_calloc_array(GAL_TYPE_FLOAT64, tablen, __func__, "brightness"); xy = gal_data_calloc_array(GAL_TYPE_FLOAT64, xyncols*tablen, __func__, "xy"); flag = ( s0d1D2==0 ? gal_data_calloc_array(GAL_TYPE_UINT8, tablen, __func__, "flag") : NULL ); sn = gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &tablen, NULL, 1, p->cp.minmapsize, "SIGNAL-TO-NOISE", "ratio", NULL); snind = ( p->checkdetsn==0 ? NULL : gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &tablen, NULL, 1, p->cp.minmapsize, "LABEL", "counter", NULL) ); /* Go over all the pixels and get the necessary information. */ do { /* All this work is only necessary when we are actually on a pseudo-detection label: it is non-zero and not blank. */ if(*plab && ( (p->input->flag | GAL_DATA_FLAG_HASBLANK) && *plab!=GAL_BLANK_INT32 ) ) { /* For Sky pseudo-detections we'll start to see if it has already been determined that the object lies over a detected object or not. If it does, then just ignore it. */ if(s0d1D2==0) { if( flag[*plab] ) { ++plab; ++dlab; continue; } else if(*dlab) /* We are on a detection. */ { flag[*plab]=1; area[*plab]=0; ++plab; ++dlab; continue; } } /* If we are on a blank pixel, ignore this pixel. */ if( isnan(*f) ) { ++plab; if(s0d1D2==0) ++dlab; continue; } /* Save all the necessary values. */ ++area[*plab]; brightness[*plab] += *f; if( *f > 0.0f ) /* For calculatiing the approximate center, */ { /* necessary for calculating Sky and STD. */ xy[*plab*xyncols ] += *f; xy[*plab*xyncols+1] += (double)((f-img)/dsize[1]) * *f; xy[*plab*xyncols+2] += (double)((f-img)%dsize[1]) * *f; } } /* Increment the other two labels. */ ++plab; if(s0d1D2==0) ++dlab; } while(++f<ff); /* A small sanity check. { size_t i; for(i=1;i<num+1;++i) printf("%zu (%u): %-5zu %-13.3f %-13.3f %-13.3f %-13.3f\n", i, flag[i], area[i], brightness[i], xy[i*xyncols], xy[i*xyncols+1], xy[i*xyncols+2]); } */ /* If the user wants to see the steps (on the background) and we are working on pseudo-detections, remove those that will not be used in the final quantile calculation. */ if(p->detectionname) { if(s0d1D2<2) { plabend = (plab=worklab->array) + worklab->size; do if( *plab!=GAL_BLANK_INT32 && ( area[*plab]<p->detsnminarea || brightness[*plab]<0) ) *plab=0; while(++plab<plabend); } worklab->name=extname; gal_fits_img_write(worklab, p->detectionname, NULL, PROGRAM_NAME); worklab->name=NULL; } /* Calculate the signal to noise for successful detections: */ snarr=sn->array; if(snind) indarr=snind->array; if(s0d1D2) { snarr[0]=NAN; if(snind) indarr[0]=GAL_BLANK_INT32; } for(i=1;i<tablen;++i) { ave=brightness[i]/area[i]; if( area[i]>p->detsnminarea && ave>0.0f && xy[i*xyncols]>0.0f ) { /* Get the flux weighted center coordinates. */ coord[0]=GAL_DIMENSION_FLT_TO_INT( xy[i*xyncols+1]/xy[i*xyncols] ); coord[1]=GAL_DIMENSION_FLT_TO_INT( xy[i*xyncols+2]/xy[i*xyncols] ); /* Calculate the Sky and Sky standard deviation on this tile. */ ave -= ((float *)(p->sky->array))[ gal_tile_full_id_from_coord(&p->cp.tl, coord) ]; err = ((float *)(p->std->array))[ gal_tile_full_id_from_coord(&p->cp.tl, coord) ]; /* If the image was already sky subtracted, the second power of the error needs to be doubled. */ err *= p->skysubtracted ? err : 2.0f*err; /* Correct the index in the sn to store the Signal to noise ratio. When we are dealing with the noise, we only want the non-zero signal to noise values, so we will just use a counter. But for initial detections, it is very important that their Signal to noise ratio be placed in the same index as their label. */ ind = s0d1D2 ? i : counter++; if(snind) indarr[ind]=i; snarr[ind] = ( sqrt( (float)(area[i])/p->cpscorr ) * ave / sqrt(ave+err) ); } else /* In detection pseudo-detections, order matters, so we will set all non-usable values to blank. */ if(s0d1D2) { snarr[i]=NAN; if(snind) indarr[i]=GAL_BLANK_INT32;; } } /* If we are in Sky mode, the sizes have to be corrected */ if(s0d1D2==0) { sn->dsize[0]=sn->size=counter; if(snind) snind->dsize[0]=snind->size=counter; } /* If the user wanted a list of S/N values for all pseudo-detections, save it. */ if(snind) detection_sn_write_to_file(p, sn, snind, s0d1D2); /* Clean up and return. */ free(xy); free(area); free(coord); free(brightness); if(flag) free(flag); if(snind) gal_data_free(snind); return sn; } /* ONLY FOR PSEUDO DETECTIONS: remove pseudo-detections that have a small S/N from the binary image (the labeled image will be left untouched). */ static void detection_pseudo_remove_low_sn(struct noisechiselparams *p, gal_data_t *workbin, gal_data_t *worklab, gal_data_t *sn) { size_t i; float *snarr=sn->array; uint8_t *b=workbin->array; int32_t *l=worklab->array, *lf=l+worklab->size; uint8_t *keep=gal_data_calloc_array(GAL_TYPE_UINT8, sn->size, __func__, "keep"); /* Specify the new labels for those that must be kept/changed. Note that when an object didn't have an S/N, its S/N was given a value of NaN (which will fail on any condition), so it acts as if it had an S/N lower than the required value. */ for(i=0;i<sn->size;++i) if( snarr[i] > p->detsnthresh ) keep[i]=1; /* Go over the pseudo-detection labels and only keep those that must be kept (using the new labels) in the binary array. */ if( p->input->flag & GAL_DATA_FLAG_HASBLANK ) do *b++ = *l == GAL_BLANK_INT32 ? GAL_BLANK_UINT8 : keep[ *l ] > 0; while(++l<lf); else do *b++ = keep[ *l ] > 0; while(++l<lf); /* If the user wanted to see the steps. */ if(p->detectionname) { workbin->name="TRUE-PSEUDOS"; gal_fits_img_write(workbin, p->detectionname, NULL, PROGRAM_NAME); workbin->name=NULL; } /* Clean up: */ free(keep); } /* Find and do the necessary work on pseudo-detections. */ static gal_data_t * detection_pseudo_real(struct noisechiselparams *p) { char *msg; size_t numpseudo; struct timeval t1; gal_data_t *sn, *quant, *workbin, *worklab; /* Allocate the space for the working datasets. */ worklab=gal_data_copy(p->olabel); workbin=gal_data_alloc(NULL, GAL_TYPE_UINT8, p->input->ndim, p->input->dsize, p->input->wcs, 0, p->cp.minmapsize, NULL, NULL, NULL); workbin->flag=p->input->flag; /* Over the Sky: find the pseudo-detections and make the S/N table. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); numpseudo=detection_pseudo_find(p, workbin, worklab, 0); sn=detection_sn(p, worklab, numpseudo, 0, "PSEUDOS-FOR-SN"); /* A small sanity check */ if( sn->size < p->minnumfalse) error(EXIT_FAILURE, 0, "only %zu pseudo-detections could be found over " "the sky region to estimate an S/N. This is less than %zu (value " "to `--minnumfalse' option). Please adjust parameters like " "`--dthresh', `--detsnminarea', or make sure that there actually " "is sufficient sky area after initial detection. You can use " "`--checkdetection' to see every step until this point", sn->size, p->minnumfalse); /* Get the S/N quantile and report it if we are in non-quiet mode. */ quant=gal_statistics_quantile(sn, p->detquant, 1); p->detsnthresh = *((float *)(quant->array)); if(!p->cp.quiet) { asprintf(&msg, "Pseudo-det S/N: %.2f (%.2f quant of %zu).", p->detsnthresh, p->detquant, sn->size); gal_timing_report(&t1, msg, 2); free(msg); } gal_data_free(sn); gal_data_free(quant); /* Over the detections: find pseudo-detections and make S/N table. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); numpseudo=detection_pseudo_find(p, workbin, worklab, 1); sn=detection_sn(p, worklab, numpseudo, 1, "PSEUDOS-FOR-SN"); /* Remove the pseudo detections with a low S/N. */ detection_pseudo_remove_low_sn(p, workbin, worklab, sn); /* Clean up and return. */ gal_data_free(sn); gal_data_free(worklab); return workbin; } /* This is for the final detections (grown) detections. */ static size_t detection_final_remove_small_sn(struct noisechiselparams *p, gal_data_t *workbin, size_t num) { size_t i; int8_t *b; float *snarr; gal_data_t *sn, *snind; int32_t *l, *lf, curlab=1; gal_list_str_t *comments=NULL; int32_t *newlabs=gal_data_calloc_array(GAL_TYPE_INT32, num+1, __func__, "newlabs"); /* Get the Signal to noise ratio of all detections. */ sn=detection_sn(p, p->olabel, num, 2, "DILATED"); /* Only keep the objects with an S/N above the pseudo-detection limit. */ snarr=sn->array; for(i=1;i<num+1;++i) newlabs[i] = snarr[i] > p->detsnthresh ? curlab++ : 0; /* Go over the labeled image and correct the labels. */ b=workbin->array; lf=(l=p->olabel->array)+p->olabel->size; if( p->input->flag & GAL_DATA_FLAG_HASBLANK ) { do { if( *l != GAL_BLANK_INT32 ) *b = (*l=newlabs[ *l ]) > 0; ++b; } while(++l<lf); } else do *b++ = (*l=newlabs[ *l ]) > 0; while(++l<lf); /* Save the S/N values if the user asked for them. */ if(p->detsn_D_name) { /* Make the S/N index array. */ snind=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &num, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); /* Fill in the indexs. Note that the S/N array had num+1 elements, so we also want to shift them back by one element, so we also need to correct its size. */ l=snind->array; sn->size = sn->dsize[0] = num; for(i=0;i<num;++i) { l[i]=i+1; snarr[i]=snarr[i+1]; } /* Make the comments, then write the table. */ gal_list_str_add(&comments, "See also: `DILATED' " "HDU of output with `--checkdetection'.", 1); gal_list_str_add(&comments, "S/N of finally grown detections.", 1); threshold_write_sn_table(p, sn, snind, p->detsn_D_name, comments); gal_list_str_free(comments, 1); } /* Clean up and return. */ free(newlabs); gal_data_free(sn); return curlab-1; } /**************************************************************** ************ Removing false detections ************ ****************************************************************/ static size_t detection_remove_false_initial(struct noisechiselparams *p, gal_data_t *workbin) { size_t i; uint8_t *b=workbin->array; int32_t *l=p->olabel->array, *lf=l+p->olabel->size, curlab=1; int32_t *newlabels=gal_data_calloc_array(GAL_TYPE_UINT32, p->numinitialdets+1, __func__, "newlabels"); /* Find the new labels for all the existing labels. Recall that `newlabels' was initialized to zero, so any label that is not given a new label here will be automatically removed. After the first pixel of a label overlaps with dbyt[i], we don't need to check the rest of that object's pixels. At this point, tokeep is only binary: 0 or 1. Note that the zeroth element of tokeep can also be non zero, this is because the holes of the labeled regions might be filled during filling the holes, but have not been filled in the original labeled array. They are not important so you can just ignore them. */ do { if( *l && *l!=GAL_BLANK_INT32 ) { newlabels[ *l ] = newlabels[ *l ] /* Have we already checked this label? */ ? 1 /* Yes we have. Just set it to 1. */ : *b; /* No we haven't, check pseudo-detection. */ } ++b; } while(++l<lf); newlabels[0]=0; /* Now that we know which labels to keep, set the new labels for the detections that must be kept. */ for(i=0;i<p->numinitialdets;++i) if(newlabels[i]) newlabels[i] = curlab++; /* Replace the byt and olab values with their proper values. If the user doesn't want to grow, then change the labels in `lab' too. Otherwise, you don't have to worry about the label array. After dilation a new labeling will be done and the whole labeled array will be re-filled.*/ b=workbin->array; l=p->olabel->array; if(p->detgrowquant==1.0f) /* We need the binary array even when */ do /* there is no growth: the binary */ { /* array is used for estimating the */ if(*l!=GAL_BLANK_INT32) /* Sky and its STD. */ *b = ( *l = newlabels[ *l ] ) > 0; ++b; } while(++l<lf); else do { if(*l!=GAL_BLANK_INT32) *b = newlabels[ *l ] > 0; ++b; } while(++l<lf); /* Clean up and return. */ free(newlabels); return curlab-1; } static size_t detection_quantile_expand(struct noisechiselparams *p, gal_data_t *workbin) { int32_t *o, *of; size_t *d, counter=0, numexpanded; float *i, *e_th, *arr=p->conv->array; gal_data_t *exp_thresh_full, *diffuseindexs; uint8_t *b=workbin->array, *bf=b+workbin->size; /* Expand the threshold values (from one value for each tile) to the whole dataset. Since we know the tiles cover the whole image, we don't neeed to initialize or check for blanks.*/ exp_thresh_full=gal_tile_block_write_const_value(p->expand_thresh, p->cp.tl.tiles, 0, 0); /* Count the pixels that must be expanded. */ e_th=exp_thresh_full->array; do { if(*b++==0 && *arr>*e_th) ++counter; ++arr; ++e_th; } while(b<bf); /* Allocate the space necessary to keep the index of all the pixels that must be expanded and re-initialize the necessary pointers. */ diffuseindexs=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &counter, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); /* Fill in the diffuse indexs and initialize the objects dataset. */ b=workbin->array; arr=p->conv->array; d=diffuseindexs->array; e_th=exp_thresh_full->array; of=(o=p->olabel->array)+p->olabel->size; do { /* If the binary value is 1, then we want an initial label of 1 (the object is already detected). If it isn't, then we only want it if it is above the threshold. */ *o = *b==1 ? 1 : ( *arr>*e_th ? CLUMPS_INIT : 0); if(*b==0 && *arr>*e_th) *d++ = o - (int32_t *)(p->olabel->array); /* Increment the points and go onto the next pixel. */ ++b; ++arr; ++e_th; } while(++o<of); /* Expand the detections. */ clumps_grow(p->olabel, diffuseindexs, 0, p->olabel->ndim); /* Only keep the 1 valued pixels in the binary array and fill its holes. */ o=p->olabel->array; bf=(b=workbin->array)+workbin->size; do *b = (*o++ == 1); while(++b<bf); workbin=gal_binary_dilate(workbin, 1, 1, 1); gal_binary_fill_holes(workbin, 1, p->detgrowmaxholesize); /* Get the labeled image. */ numexpanded=gal_binary_connected_components(workbin, &p->olabel, workbin->ndim); /* Set all the input's blank pixels to blank in the labeled and binary arrays. */ if( gal_blank_present(p->input, 1) ) { b=workbin->array; i=p->input->array; of=(o=p->olabel->array)+p->olabel->size; do { if(isnan(*i++)) { *o=GAL_BLANK_INT32; *b=GAL_BLANK_UINT8; } ++b; } while(++o<of); } /* Clean up and return */ gal_data_free(p->expand_thresh); gal_data_free(exp_thresh_full); gal_data_free(diffuseindexs); return numexpanded; } /* The initial detection has been done, now we want to remove false detections. */ void detection(struct noisechiselparams *p) { char *msg; gal_data_t *workbin; struct timeval t0, t1; size_t num_true_initial; /* Report for the user. */ if(!p->cp.quiet) { gal_timing_report(NULL, "Starting to find/remove false detections.", 1); gettimeofday(&t0, NULL); } /* Find the Sky and its Standard Deviation from the initial detectios. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); sky_and_std(p, p->detskyname); if(!p->cp.quiet) gal_timing_report(&t1, "Initial (crude) Sky and its STD found.", 2); /* Apply the sky threshold. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); threshold_apply(p, p->sky->array, p->std->array, THRESHOLD_SKY_STD); if(!p->cp.quiet) { asprintf(&msg, "Pseudo-detection thresh (%.3f sigma) applied.", p->dthresh); gal_timing_report(&t1, msg, 2); free(msg); } /* Find the real pseudo-detections. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); workbin=detection_pseudo_real(p); /* Only keep the initial detections that overlap with the real pseudo-detections. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); num_true_initial=detection_remove_false_initial(p, workbin); if(!p->cp.quiet) { asprintf(&msg, "%zu false initial detections removed.", p->numinitialdets - num_true_initial); gal_timing_report(&t1, msg, 2); free(msg); } /* If the user asked for dilation/expansion, then apply it and report the final number of detections. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); if(p->detgrowquant!=1.0f) num_true_initial=detection_quantile_expand(p, workbin); if(!p->cp.quiet) { if(p->detgrowquant==1.0f) asprintf(&msg, "%zu detections with no growth.", num_true_initial); else asprintf(&msg, "%zu detections after growth to %.3f quantile.", num_true_initial, p->detgrowquant); gal_timing_report(&t1, msg, 2); free(msg); } /* When the final (grown or over-all object) detection's S/N is less than the pseudo-detection's S/N limit, the object is false. For a real detection, the actual object S/N should be higher than any of its pseudo-detection because it has a much larger area (and possibly more flux under it). So when the final S/N is smaller than the minimum acceptable S/N threshold, we have a false pseudo-detection. */ p->numdetections = ( p->cleangrowndet ? detection_final_remove_small_sn(p, workbin, num_true_initial) : num_true_initial ); if(!p->cp.quiet) { asprintf(&msg, "%zu final true detections.", p->numdetections); gal_timing_report(&t0, msg, 1); free(msg); } if(p->detectionname) { p->olabel->name="DETECTION-FINAL"; gal_fits_img_write(p->olabel, p->detectionname, NULL, PROGRAM_NAME); p->olabel->name=NULL; } /* p->binary was used to keep the initial pseudo-detection threshold. But we don't need it any more, so we'll just free it and put the `workbin' array in its place. Note that `workbin' has a map of all the detected objects, which is still necessary during NoiseChisel. */ gal_data_free(p->binary); p->binary=workbin; /* The initial Sky and Sky STD values were only for detection. */ gal_data_free(p->sky); gal_data_free(p->std); p->sky = p->std = NULL; /* If the user wanted to check the threshold and hasn't called `continueaftercheck', then stop NoiseChisel. */ if(p->detectionname && !p->continueaftercheck) ui_abort_after_check(p, p->detectionname, NULL, "showing all detection steps"); } ��������������������������������������gnuastro-0.5/bin/noisechisel/clumps.c���������������������������������������������������������������0000644�0001750�0001750�00000163262�13216276304�014703� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/fits.h> #include <gnuastro/qsort.h> #include <gnuastro/blank.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "ui.h" #include "clumps.h" #include "threshold.h" /**************************************************************** ***************** Over segmentation ******************** ****************************************************************/ /* Over-segment the region specified by its indexs into peaks and their respective regions (clumps). This is very similar to the immersion method of Vincent & Soille(1991), but here, we will not separate the image into layers, instead, we will work based on the ordered flux values. If a certain pixel (at a certain level) has no neighbors, it is a local maximum and will be assigned a new label. If it has a labeled neighbor, it will take that label and if there is more than one neighboring labeled region that pixel will be a `river` pixel. */ void clumps_oversegment(struct clumps_thread_params *cltprm) { struct noisechiselparams *p=cltprm->clprm->p; size_t ndim=p->input->ndim; float *arr=p->conv->array; gal_data_t *indexs=cltprm->indexs; gal_list_sizet_t *Q=NULL, *cleanup=NULL; size_t *a, *af, ind, *dsize=p->input->dsize; size_t *dinc=gal_dimension_increment(ndim, dsize); int32_t n1, nlab, rlab, curlab=1, *clabel=p->clabel->array; /********************************************* For checks and debugging:* gal_data_t *crop; size_t extcount=1; int32_t *cr, *crf; size_t checkdsize[2]={10,10}; size_t checkstart[2]={50,145}; char *filename="clumpbuild.fits"; size_t checkstartind=gal_dimension_coord_to_index(2, dsize, checkstart); gal_data_t *tile=gal_data_alloc(gal_data_ptr_increment(arr, checkstartind, p->conv->type), GAL_TYPE_INVALID, 2, checkdsize, NULL, 0, 0, NULL, NULL, NULL); tile->block=p->conv; gal_checkset_writable_remove(filename, 0, 0); if(p->cp.numthreads!=1) error(EXIT_FAILURE, 0, "in the debugging mode of `clumps_oversegment' " "only one thread must be used"); crop=gal_data_copy(tile); gal_fits_img_write(crop, filename, NULL, PROGRAM_NAME); gal_data_free(crop); printf("blank: %u\nriver: %u\ntmpcheck: %u\ninit: %u\nmaxlab: %u\n", (int32_t)GAL_BLANK_INT32, (int32_t)CLUMPS_RIVER, (int32_t)CLUMPS_TMPCHECK, (int32_t)CLUMPS_INIT, (int32_t)CLUMPS_MAXLAB); tile->array=gal_tile_block_relative_to_other(tile, p->clabel); tile->block=p->clabel; **********************************************/ /* If the size of the indexs is zero, then this function is pointless. */ if(indexs->size==0) { cltprm->numinitclumps=0; return; } /* Sort the given indexs based on their flux (`gal_qsort_index_arr' is defined as static in `gnuastro/qsort.h') */ gal_qsort_index_arr=p->conv->array; qsort(indexs->array, indexs->size, sizeof(size_t), gal_qsort_index_float_decreasing); /* Initialize the region we want to over-segment. */ af=(a=indexs->array)+indexs->size; do clabel[*a]=CLUMPS_INIT; while(++a<af); /* Go over all the given indexs and pull out the clumps. */ af=(a=indexs->array)+indexs->size; do /* When regions of a constant flux or masked regions exist, some later indexs (although they have same flux) will be filled before hand. If they are done, there is no need to do them again. */ if(clabel[*a]==CLUMPS_INIT) { /* It might happen where one or multiple regions of the pixels under study have the same flux. So two equal valued pixels of two separate (but equal flux) regions will fall immediately after each other in the sorted list of indexs and we have to account for this. Therefore, if we see that the next pixel in the index list has the same flux as this one, it does not guarantee that it should be given the same label. Similar to the breadth first search algorithm for finding connected components, we will search all the neighbours and the neighbours of those neighbours that have the same flux of this pixel to see if they touch any label or not and to finally give them all the same label. */ if( (a+1)<af && arr[*a]==arr[*(a+1)] ) { /* Label of first neighbor found. */ n1=0; /* A small sanity check. */ if(Q!=NULL || cleanup!=NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so " "we can fix this problem. `Q' and `cleanup' should be " "NULL but while checking the equal flux regions they " "aren't", __func__, PACKAGE_BUGREPORT); /* Add this pixel to a queue. */ gal_list_sizet_add(&Q, *a); gal_list_sizet_add(&cleanup, *a); clabel[*a] = CLUMPS_TMPCHECK; /* Find all the pixels that have the same flux and are connected. */ while(Q!=NULL) { /* Pop an element from the queue. */ ind=gal_list_sizet_pop(&Q); /* Look at the neighbors and see if we already have a label. */ GAL_DIMENSION_NEIGHBOR_OP(ind, ndim, dsize, ndim, dinc, { /* If it is already decided to be a river, then stop looking at the neighbors. */ if(n1!=CLUMPS_RIVER) { /* For easy reading. */ nlab=clabel[ nind ]; /* This neighbor's label isn't zero. */ if(nlab) { /* If this neighbor has not been labeled yet and has an equal flux, add it to the queue to expand the studied region.*/ if( nlab==CLUMPS_INIT && arr[nind]==arr[*a] ) { clabel[nind]=CLUMPS_TMPCHECK; gal_list_sizet_add(&Q, nind); gal_list_sizet_add(&cleanup, nind); } else n1=( nlab>0 /* If this neighbor has a positive nlab, it belongs to another object, so if `n1' has not been set for the whole region (n1==0), put `nlab' into `n1'. If `n1' has been set and is different from `nlab' then this whole equal flux region should be a wide river because it is connecting two connected regions.*/ ? ( n1 ? (n1==nlab ? n1 : CLUMPS_RIVER) : nlab ) /* If the data has blank pixels (recall that blank in int32 is negative), see if the neighbor is blank and if so, set the label to a river. Since the flag checking can be done outside this loop, for datasets with no blank element this last step will be completley ignored. */ : ( ( (p->input->flag & GAL_DATA_FLAG_HASBLANK) && nlab==GAL_BLANK_INT32 ) ? CLUMPS_RIVER : n1 ) ); } /* If this neigbour has a label of zero, then we are on the edge of the indexed region (the neighbor is not in the initial list of pixels to segment). When over-segmenting the noise and the detections, `clabel' is zero for the parts of the image that we are not interested in here. */ else clabel[*a]=CLUMPS_RIVER; } } ); } /* Set the label that is to be given to this equal flux region. If `n1' was set to any value, then that label should be used for the whole region. Otherwise, this is a new label, see the case for a non-flat region. */ if(n1) rlab = n1; else { rlab = curlab++; if( cltprm->topinds ) /* This is a local maximum of */ cltprm->topinds[rlab]=*a; /* this region, save its index.*/ } /* Give the same label to the whole connected equal flux region, except those that might have been on the side of the image and were a river pixel. */ while(cleanup!=NULL) { ind=gal_list_sizet_pop(&cleanup); /* If it was on the sides of the image, it has been changed to a river pixel. */ if( clabel[ ind ]==CLUMPS_TMPCHECK ) clabel[ ind ]=rlab; } } /* The flux of this pixel is not the same as the next sorted flux, so simply find the label for this object. */ else { /* `n1' is the label of the first labeled neighbor found, so we'll initialize it to zero. */ n1=0; /* Go over all the fully connected neighbors of this pixel and see if all the neighbors (with maximum connectivity: the number of dimensions) that have a non-macro value (less than CLUMPS_MAXLAB) belong to one label or not. If the pixel is neighboured by more than one label, set it as a river pixel. Also if it is touching a zero valued pixel (which does not belong to this object), set it as a river pixel.*/ GAL_DIMENSION_NEIGHBOR_OP(*a, ndim, dsize, ndim, dinc, { /* When `n1' has already been set as a river, there is no point in looking at the other neighbors. */ if(n1!=CLUMPS_RIVER) { /* For easy reading. */ nlab=clabel[ nind ]; /* If this neighbor is on a non-processing label, then set the first neighbor accordingly. Note that we also want the zero valued neighbors (detections if working on sky, and sky if working on detection): we want rivers between the two domains. */ n1 = ( nlab /* nlab is non-zero. */ ? ( nlab>0 /* Neighbor has a meaningful label, so check with any previously found labeled neighbors. */ ? ( n1 ? ( nlab==n1 ? n1 : CLUMPS_RIVER ) : nlab ) /* If the dataset has blank values and this neighbor is blank, then the pixel should be a river. Note that the blank checking can be optimized out, so if the input doesn't have blank values, `nlab==GAL_BLANK_INT32' will never be checked. */ : ( (p->input->flag & GAL_DATA_FLAG_HASBLANK) && nlab==GAL_BLANK_INT32 ? CLUMPS_RIVER : n1 ) ) /* `nlab==0' (the neighbor lies in the other domain (sky or detections). To avoid the different domains touching, this pixel should be a river. */ : CLUMPS_RIVER ); } }); /* Either assign a new label to this pixel, or give it the one of its neighbors. If n1 equals zero, then this is a new peak, and a new label should be created. But if n1!=0, it is either a river pixel (has more than one labeled neighbor and has been set to `CLUMPS_RIVER' before) or all its neighbors have the same label. In both such cases, rlab should be set to n1.*/ if(n1) rlab = n1; else { rlab = curlab++; if( cltprm->topinds ) cltprm->topinds[ rlab ]=*a; } /* Put the found label in the pixel. */ clabel[ *a ] = rlab; } /********************************************* For checks and debugging: if( *a / dsize[1] >= checkstart[0] && *a / dsize[1] < checkstart[0] + checkdsize[0] && *a % dsize[1] >= checkstart[1] && *a % dsize[1] < checkstart[1] + checkdsize[1] ) { printf("%zu (%zu: %zu, %zu): %u\n", ++extcount, *a, (*a%dsize[1])-checkstart[1], (*a/dsize[1])-checkstart[0], clabel[*a]); crop=gal_data_copy(tile); crf=(cr=crop->array)+crop->size; do if(*cr==CLUMPS_RIVER) *cr=0; while(++cr<crf); gal_fits_img_write(crop, filename, NULL, PROGRAM_NAME); gal_data_free(crop); } **********************************************/ } while(++a<af); /* Save the total number of clumps. */ cltprm->numinitclumps=curlab-1; /* Set all the river pixels to zero. Note that this is only necessary for the detected clumps. When finding clumps over the Sky, we will be going over the full tile and removing rivers after this function. This is because, we set the borders of the tile to a river value and didn't include them in the list of indexs. */ if(cltprm->clprm->sky0_det1) { af=(a=indexs->array)+indexs->size; do if( clabel[*a]==CLUMPS_RIVER ) clabel[*a]=CLUMPS_INIT; while(++a<af); } /********************************************* For checks and debugging: tile->array=NULL; gal_data_free(tile); printf("Total number of clumps: %u\n", curlab-1); **********************************************/ /* Clean up. */ free(dinc); } /**********************************************************************/ /***************** Grow clumps *****************/ /**********************************************************************/ /* Make the preparations for the intiial growing the clumps to identify objects: a single standard deviation for the whole object and preparing the labels (because the growth is going to happen on the `olabel' image. */ void clumps_grow_prepare_initial(struct clumps_thread_params *cltprm) { gal_data_t *indexs=cltprm->indexs; gal_data_t *input=cltprm->clprm->p->input; struct noisechiselparams *p=cltprm->clprm->p; size_t *s, *sf, *dsize=input->dsize; size_t ndiffuse=0, coord[2], *dindexs; double wcoord[2]={0.0f,0.0f}, brightness=0.0f; float glimit, *imgss=input->array, *std=p->std->array; int32_t *olabel=p->olabel->array, *clabel=p->clabel->array; /* Find the flux weighted center (meaningful only for positive valued pixels). */ sf=(s=indexs->array)+indexs->size; do if( imgss[ *s ] > 0.0f ) { brightness += imgss[ *s ]; wcoord[0] += imgss[ *s ] * (*s/dsize[1]); wcoord[1] += imgss[ *s ] * (*s%dsize[1]); } while(++s<sf); /* Calculate the center, if no pixels were positive, use the geometric center (irrespective of flux). */ if(brightness==0.0f) { sf=(s=indexs->array)+indexs->size; do { wcoord[0] += *s / dsize[1]; wcoord[1] += *s % dsize[1]; } while(++s<sf); brightness = indexs->size; } /* Convert floatint point coordinates to FITS integers. */ coord[0] = GAL_DIMENSION_FLT_TO_INT(wcoord[0]); coord[1] = GAL_DIMENSION_FLT_TO_INT(wcoord[1]); /* Find the growth limit */ cltprm->std = std[ gal_tile_full_id_from_coord(&p->cp.tl, coord) ]; glimit = p->gthresh * cltprm->std; /* Allocate space to keep the diffuse indexs over this detection. We need to keep the actual indexs since it is our only connection to the object at this stage: we are also going to re-label the pixels to grow. For most astronomical objects, the major part of the detection area is going to be diffuse flux, so we will just allocate the same size as `indexs' array (the `dsize' will be corrected after getting the exact number. */ cltprm->diffuseindexs=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, cltprm->indexs->dsize, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); dindexs=cltprm->diffuseindexs->array; sf=(s=indexs->array)+indexs->size; do { olabel[*s] = clabel[*s]; if( clabel[*s]==CLUMPS_INIT ) if( imgss[*s]>glimit ) dindexs[ ndiffuse++ ] = *s; } while(++s<sf); /* Correct the sizes of the `diffuseindexs' data structure. */ cltprm->diffuseindexs->size = cltprm->diffuseindexs->dsize[0] = ndiffuse; } /* Add all the remaining pixels in the detection (below the growth threshold, or those that were not touching). Note that initially `diffuseindexs' was filled with the pixels that are above the growth threshold. That was necessary for identifying the objects. Now that we have identified the objects and labeled them, we want to add the remaining diffuse pixels to it too before doing the final growth. Note that the most efficient way is just to re-fill the `diffuseindexs' array instead of adding the pixels below the threshold and sorting them afterwards.*/ void clumps_grow_prepare_final(struct clumps_thread_params *cltprm) { size_t ndiffuse=0; size_t *dindexs=cltprm->diffuseindexs->array; int32_t *olabel=cltprm->clprm->p->olabel->array; size_t *s=cltprm->indexs->array, *sf=s+cltprm->indexs->size; /* Recall that we initially allocated `diffuseindexs' to have the same size as the indexs. So there is no problem if there are more pixels in this final round compared to the initial round. */ do if( olabel[*s] < 0 ) dindexs[ ndiffuse++ ] = *s; while(++s<sf); /* Correct the sizes of the `diffuseindexs' data structure. */ cltprm->diffuseindexs->size = cltprm->diffuseindexs->dsize[0] = ndiffuse; } /* Grow the true clumps over the diffuse regions of a detection. Note that unlike before, were river pixels would get a separate label for them selves, here, they don't, they just get set back to SEGMENTINIT. This is because some of the pixels that lie immediately between two labeled regions might not be in the blankinds array (they were below the threshold). So we have to find river pixels later on, after the growth is done independently. This function is going to be used before identifying objects and also after it (to completely fill in the diffuse area). The distinguishing point between these two steps is the presence of rivers, so you can use the `withrivers' argument. Input: labels: The labels array that must be operated on. The pixels that must be "grown" must have the value `CLUMPS_INIT' (negative). diffuseindexs: The indexs of the pixels that must be grown. withrivers: as described above. connectivity: connectivity to define neighbors for growth. */ void clumps_grow(gal_data_t *labels, gal_data_t *diffuseindexs, int withrivers, int connectivity) { int searchngb; size_t *diarray=diffuseindexs->array; int32_t n1, nlab, *olabel=labels->array; size_t *s, *sf, thisround, ndiffuse=diffuseindexs->size; size_t *dinc=gal_dimension_increment(labels->ndim, labels->dsize); /* A small sanity check: */ if(labels->type!=GAL_TYPE_INT32) error(EXIT_FAILURE, 0, "%s: `labels' has to have type of int32_t", __func__); if(diffuseindexs->type!=GAL_TYPE_SIZE_T) error(EXIT_FAILURE, 0, "%s: `diffuseindexs' has to have type of size_t", __func__); /* The basic idea is this: after growing, not all the blank pixels are necessarily filled, for example the pixels might belong to two regions above the growth threshold. So the pixels in between them (which are below the threshold will not ever be able to get a label). Therefore, the safest way we can terminate the loop of growing the objects is to stop it when the number of pixels left to fill in this round (thisround) equals the number of blanks. To start the loop, we set `thisround' to one more than the number of diffuse pixels. Note that it will be corrected immediately after the loop has started, it is just important to pass the `while'. */ thisround=ndiffuse+1; while( thisround > ndiffuse ) { /* `thisround' will keep the number of pixels to be inspected in this round. `ndiffuse' will count the number of pixels left without a label by the end of this round. Since `ndiffuse' comes from the previous loop (or outside, for the first round) it has to be saved in `thisround' to begin counting a fresh. */ thisround=ndiffuse; ndiffuse=0; /* Go over all the available indexs. */ sf=(s=diffuseindexs->array)+diffuseindexs->size; do { /* We'll begin by assuming the nearest neighbor of this pixel has no label (has a value of 0). */ n1=0; /* Check the very closest neighbors of each pixel (4-connectivity in a 2D image). Note that since this macro has multiple loops within it, we can't use break. We'll use a variable instead. */ searchngb=1; GAL_DIMENSION_NEIGHBOR_OP(*s, labels->ndim, labels->dsize, connectivity, dinc, { if(searchngb) { /* For easy reading. */ nlab = olabel[nind]; /* This neighbor's label is meaningful. */ if(nlab>0) /* This is a real label. */ { if(n1) /* A prev. neighboring label has been found. */ { if( n1 != nlab ) /* Different label from */ { /* prevously found neighbor for this pixel. */ n1=CLUMPS_RIVER; searchngb=0; } } else { /* This is the first labeld neighbor found. */ n1=nlab; /* If we want to completely fill in the region (`withrivers==0'), then there is no point in looking in other neighbors, the first neighbor we find is the one we'll use. */ if(!withrivers) searchngb=0; } } } } ); /* The loop above over neighbors finishes with three possibilities: n1==0 --> No labeled neighbor was found. n1==CLUMPS_RIVER --> Connecting two labeled regions. n1>0 --> Only has one neighbouring label. The first one means that no neighbors were found and this pixel should be kept for the next loop (we'll be growing the objects pixel-layer by pixel-layer). In the other two cases, we just need to write in the value of `n1'. */ if(n1) { olabel[*s]=n1; if(withrivers && n1==CLUMPS_RIVER) /* To keep rivers in */ diarray[ ndiffuse++ ] = *s; /* the diffuse list. */ } else diarray[ ndiffuse++ ] = *s; /* Correct the size of the `diffuseindexs' dataset. */ diffuseindexs->size = diffuseindexs->dsize[0] = ndiffuse; } while(++s<sf); } /* Clean up. */ free(dinc); } /**********************************************************************/ /***************** S/N threshold *****************/ /**********************************************************************/ /* In this function we want to find the general information for each clump in an over-segmented labeled array. The signal in each clump is the average signal inside it subtracted by the average signal in the river pixels around it. So this function will go over all the pixels in the object (already found in deblendclumps()) and add them appropriately. The output is an array of size cltprm->numinitial*INFO_NCOLS. as listed below.*/ enum infocols { INFO_X, /* Flux weighted X center col, 0 by C std. */ INFO_Y, /* Flux weighted Y center col. */ INFO_NFF, /* Number of non-negative pixels (for X,Y).*/ INFO_INFLUX, /* Tatal flux within clump. */ INFO_INAREA, /* Tatal area within clump. */ INFO_RIVFLUX, /* Tatal flux within rivers around clump. */ INFO_RIVAREA, /* Tatal area within rivers around clump. */ INFO_INSTD, /* Standard deviation at clump center. */ INFO_NCOLS, /* Total number of columns. */ }; static void clumps_get_raw_info(struct clumps_thread_params *cltprm) { struct noisechiselparams *p=cltprm->clprm->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; size_t i, *a, *af, ii, coord[2]; double *row, *info=cltprm->info->array; size_t nngb=gal_dimension_num_neighbors(ndim); float *arr=p->input->array, *std=p->std->array; size_t *dinc=gal_dimension_increment(ndim, dsize); int32_t lab, nlab, *ngblabs, *clabel=p->clabel->array; /* Allocate the array to keep the neighbor labels of river pixels. */ ngblabs=gal_data_malloc_array(GAL_TYPE_INT32, nngb, __func__, "ngblabs"); /* Go over all the pixels in this region. */ af=(a=cltprm->indexs->array)+cltprm->indexs->size; do if( !isnan(arr[ *a ]) ) { /* This pixel belongs to a clump. */ if( clabel[ *a ]>0 ) { lab=clabel[*a]; ++info[ lab * INFO_NCOLS + INFO_INAREA ]; info[ lab * INFO_NCOLS + INFO_INFLUX ] += arr[*a]; if( arr[*a]>0.0f ) { info[ lab * INFO_NCOLS + INFO_NFF ] += arr[*a]; info[ lab * INFO_NCOLS + INFO_X ] += arr[*a] * (*a/dsize[1]); info[ lab * INFO_NCOLS + INFO_Y ] += arr[*a] * (*a%dsize[1]); } } /* This pixel belongs to a river (has a value of zero and isn't blank). */ else { /* We are on a river pixel. So the value of this pixel has to be added to any of the clumps in touches. But since it might touch a labeled region more than once, we use `ngblabs' to keep track of which label we have already added its value to. `ii` is the number of different labels this river pixel has already been considered for. `ngblabs' will keep the list labels. */ ii=0; memset(ngblabs, 0, nngb*sizeof *ngblabs); /* Look into the 8-connected neighbors (recall that a connectivity of `ndim' means all pixels touching it (even on one vertice). */ GAL_DIMENSION_NEIGHBOR_OP(*a, ndim, dsize, ndim, dinc, { /* This neighbor's label. */ nlab=clabel[ nind ]; /* We only want those neighbors that are not rivers (>0) or any of the flag values. */ if(nlab>0) { /* Go over all already checked labels and make sure this clump hasn't already been considered. */ for(i=0;i<ii;++i) if(ngblabs[i]==nlab) break; /* This neighbor clump hasn't been considered yet: */ if(i==ii) { ngblabs[ii++] = nlab; ++info[ nlab * INFO_NCOLS + INFO_RIVAREA ]; info[ nlab * INFO_NCOLS + INFO_RIVFLUX ] += arr[*a]; } } } ); } } while(++a<af); /* Do the final preparations. All the calculations are only necessary for the clumps that satisfy the minimum area. So there is no need to waste time on the smaller ones. */ for(lab=1; lab<=cltprm->numinitclumps; ++lab) { row = &info [ lab * INFO_NCOLS ]; if ( row[INFO_INAREA] > p->segsnminarea ) { /* Especially over the undetected regions, it might happen that none of the pixels were positive. In that case, set the total area of the clump to zero so it is no longer considered.*/ if( row[INFO_NFF]==0.0f ) row[INFO_INAREA]=0; else { coord[0]=GAL_DIMENSION_FLT_TO_INT(row[INFO_X]/row[INFO_NFF]); coord[1]=GAL_DIMENSION_FLT_TO_INT(row[INFO_Y]/row[INFO_NFF]); row[INFO_INSTD] = std[ gal_tile_full_id_from_coord(&p->cp.tl, coord) ]; /* For a check printf("---------\n"); printf("\t%f --> %zu\n", row[INFO_Y]/row[INFO_NFF], coord[1]); printf("\t%f --> %zu\n", row[INFO_X]/row[INFO_NFF], coord[0]); printf("%u: (%zu, %zu): %.3f\n", lab, coord[1]+1, coord[0]+1, row[INFO_INSTD]); */ } } } /* Clean up. */ free(dinc); free(ngblabs); } /* Make an S/N table for the clumps in a given region. */ void clumps_make_sn_table(struct clumps_thread_params *cltprm) { struct noisechiselparams *p=cltprm->clprm->p; size_t tablen=cltprm->numinitclumps+1; float *snarr; int32_t *indarr=NULL; double I, O, Ni, var, *row; int sky0_det1=cltprm->clprm->sky0_det1; size_t i, ind, counter=0, infodsize[2]={tablen, INFO_NCOLS}; /* If there were no initial clumps, then ignore this function. */ if(cltprm->numinitclumps==0) { cltprm->snind=cltprm->sn=NULL; return; } /* Allocate the arrays to keep the final S/N table (and possibly S/N index) for this object or tile. */ cltprm->sn = &cltprm->clprm->sn[ cltprm->id ]; cltprm->sn->ndim = 1; /* Depends on `cltprm->sn' */ cltprm->sn->type = GAL_TYPE_FLOAT32; cltprm->sn->dsize = gal_data_malloc_array(GAL_TYPE_SIZE_T, 1, __func__, "cltprm->sn->dsize"); cltprm->sn->array = gal_data_malloc_array(cltprm->sn->type, tablen, __func__, "cltprm->sn->array"); cltprm->sn->size = cltprm->sn->dsize[0] = tablen; /* After dsize. */ if( cltprm->clprm->snind ) { cltprm->snind = &cltprm->clprm->snind [ cltprm->id ]; cltprm->snind->ndim = 1; /* Depends on `cltprm->snind' */ cltprm->snind->type = GAL_TYPE_INT32; cltprm->snind->dsize = gal_data_malloc_array(GAL_TYPE_SIZE_T, 1, __func__, "cltprm->snind->dsize"); cltprm->snind->size = cltprm->snind->dsize[0]=tablen;/* After dsize */ cltprm->snind->array = gal_data_malloc_array(cltprm->snind->type, tablen, __func__, "cltprm->snind->array"); } else cltprm->snind=NULL; /* Allocate the array to keep the raw information of each clump. Note the `+1' in `infodsize', this is because the labels begin with 1 and we want each label to have one row on the same label.*/ cltprm->info=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, infodsize, NULL, 1, p->cp.minmapsize, NULL, NULL, NULL); /* First get the raw information necessary for making the S/N table. */ clumps_get_raw_info(cltprm); /* Calculate the signal to noise ratio for successful clumps */ snarr=cltprm->sn->array; if(cltprm->snind) indarr=cltprm->snind->array; for(i=1;i<tablen;++i) { /* For readability. */ row = &( ((double *)(cltprm->info->array))[ i * INFO_NCOLS ] ); Ni = row[ INFO_INAREA ]; I = row[ INFO_INFLUX ] / row[ INFO_INAREA ]; O = row[ INFO_RIVFLUX ] / row[ INFO_RIVAREA ]; /* If the inner flux is smaller than the outer flux (happens only in noise cases) or the area is smaller than the minimum area to calculate signal-to-noise, then set the S/N of this segment to zero. */ if( I>O && Ni>p->segsnminarea ) { /* Here we have done sky subtraction once. However, if the sky was already subtracted (informed by the user), then the varience should be multiplied by 2. */ var = ( (p->skysubtracted ? 2.0f : 1.0f) * row[INFO_INSTD] * row[INFO_INSTD] ); /* Calculate the Signal to noise ratio, if we are on the noise regions, we don't care about the IDs of the clumps anymore, so store the Signal to noise ratios contiguously (for easy sorting and etc). Note that counter will always be smaller and equal to i. */ ind = sky0_det1 ? i : counter++; if(cltprm->snind) indarr[ind]=i; snarr[ind]=( sqrt(Ni/p->cpscorr) * (I-O) / sqrt( (I>0?I:-1*I) + (O>0?O:-1*O) + var ) ); } else { /* Only over detections, we should put a NaN when the S/N */ if(sky0_det1) { snarr[i]=NAN; if(cltprm->snind) indarr[i]=i; } } } /* If we are in Sky mode, the sizes have to be corrected */ if(sky0_det1==0) { cltprm->sn->dsize[0] = cltprm->sn->size = counter; if(cltprm->snind) cltprm->snind->dsize[0] = cltprm->snind->size=counter; } /* Clean up. */ gal_data_free(cltprm->info); } /* Correct the labels of the clumps that will be used in determining the S/N threshold for true clumps. */ static void clumps_correct_sky_labels_for_check(struct clumps_thread_params *cltprm, gal_data_t *tile) { gal_data_t *newinds; int32_t *ninds, curlab, *l, *lf; size_t len=cltprm->numinitclumps+1; struct noisechiselparams *p=cltprm->clprm->p; /* If there are no clumps in this tile, then this function can be ignored. */ if(cltprm->snind->size==0) return; /* A small sanity check. */ if(gal_tile_block(tile)!=p->clabel) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to address " "the problem. `tile->block' must point to the `clabel' dataset", __func__, PACKAGE_BUGREPORT); /* Allocate a dataset with the new indexs, note that it will need to have one element for each initial label (the excluded clumps need to be set to zero). So we also need to clear the allocated space. */ newinds=gal_data_alloc(NULL, p->clabel->type, 1, &len, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); /* Get the next available label for these clumps. If more than one thread was used, we are first going to lock the mutex (so no other thread changes these values), we will then read the shared number for this thread to use, then update the shared number and finally, unlock the mutex so other threads can do the same when they get to this point. */ if(p->cp.numthreads>1) pthread_mutex_lock(&cltprm->clprm->labmutex); curlab = p->numclumps+1; /* Note that counting begins from 1. */ p->numclumps += cltprm->snind->size; if(p->cp.numthreads>1) pthread_mutex_unlock(&cltprm->clprm->labmutex); /* Initialize the newinds array to CLUMPS_INIT (which be used as a new label for all the clumps that must be removed. */ lf = (l=newinds->array) + newinds->size; do *l++=CLUMPS_INIT; while(l<lf); /* The new indexs array has been initialized to zero. So we just need to go over the labels in `cltprm->sninds' and give them a value of `curlab++'. */ ninds=newinds->array; lf = (l=cltprm->snind->array) + cltprm->snind->size; do { ninds[*l]=curlab++; *l=ninds[*l]; } while(++l<lf); /* Go over this tile and correct the values. */ GAL_TILE_PARSE_OPERATE( tile, NULL, 0, 1, {if(*i>0) *i=ninds[ *(int32_t *)i ];} ); /* Clean up. */ gal_data_free(newinds); } static void * clumps_find_make_sn_table(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct clumps_params *clprm=(struct clumps_params *)(tprm->params); struct noisechiselparams *p=clprm->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; void *tarray; double numdet; gal_data_t *tile, *tblock, *tmp; uint8_t *binary=p->binary->array; struct clumps_thread_params cltprm; size_t i, c, ind, tind, num, numsky, *indarr; size_t *scoord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "scoord"); size_t *icoord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "icoord"); /* Initialize the parameters for this thread. */ cltprm.clprm = clprm; cltprm.topinds = NULL; /* Go over all the tiles/detections given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* IDs. */ cltprm.id = tind = tprm->indexs[i]; tile = &p->ltl.tiles[tind]; /* Change the tile's pointers to the binary image (which has 1 for detected pixels and 0 for un-detected regions). */ tarray=tile->array; tblock=tile->block; tile->array = gal_tile_block_relative_to_other(tile, p->binary); tile->block = p->binary; /* Get the number of usable elements in this tile (note that tiles can have blank pixels), so we can't simply use `tile->size'. */ if(tile->flag & GAL_DATA_FLAG_HASBLANK) { tmp=gal_statistics_number(tile); num=*((size_t *)(tmp->array)); gal_data_free(tmp); } else num=tile->size; /* Find the number of detected pixels over this tile. Since this is the binary image, this is just the sum of all the pixels. Note that `numdet' can be `nan' when the whole tile is blank and so there was no values to sum. Recall that in summing, when there is not input, the output is `nan'. */ tmp=gal_statistics_sum(tile); numdet=*((double *)(tmp->array)); gal_data_free(tmp); /* See if this tile should be used or not (has enough undetected pixels). Note that it might happen that some tiles are fully blank. In such cases, it is important to first check the number of detected pixels. */ numsky=num-numdet; if( num && (float)numsky/(float)num > p->minskyfrac ) { /* Add the indexs of all undetected pixels in this tile into an array. */ cltprm.indexs=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &numsky, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); /* Change the tile's block to the clump labels dataset (because we'll need to set the labels of the rivers on the edge of the tile here). */ tile->array = gal_tile_block_relative_to_other(tile, p->clabel); tile->block = p->clabel; /* We need to set all the pixels on the edge of the tile to rivers and not include them in the list of indexs to set clumps. To do that, we need this tile's starting coordinates. */ gal_dimension_index_to_coord(gal_data_ptr_dist(p->clabel->array, tile->array, p->clabel->type), ndim, dsize, scoord); /* Add the index of every sky element to the array of indexs. Note that since we know the array is always of type `int32_t', we can call the `GAL_TILE_PO_OISET' macro to avoid having to deal with multiple possible types in `GAL_TILE_PARSE_OPERATE'. Since the OUT macro-variable is NULL, the `int' is just a place-holder, it will not be used. */ c=0; indarr=cltprm.indexs->array; GAL_TILE_PO_OISET(int32_t, int, tile, NULL, 0, 1, { /* This pixel's index over all the image. */ ind = (int32_t *)i - (int32_t *)(p->clabel->array); gal_dimension_index_to_coord(ind, ndim, dsize, icoord); /* If the pixel is on the tile edge, set it as river and don't include it in the indexs. */ if( icoord[0]==scoord[0] || icoord[0]==scoord[0]+tile->dsize[0]-1 || icoord[1]==scoord[1] || icoord[1]==scoord[1]+tile->dsize[1]-1 ) *(int32_t *)i=CLUMPS_RIVER; /* This pixel is not on the edge, check if it had a value of `0' in the binary image (is not detected) then add it to the list of indexs (note that the binary image also contains the blank pixels, so only sky regions have a value of 0 in the binary image). */ else if( binary[ind]==0 ) { /* if(c!=cltprm.indexs->size) { if(cltprm.id==282) *i+=2; */ indarr[c++]=gal_data_ptr_dist(p->clabel->array, i, p->clabel->type); /* } else if(cltprm.id==282) { int32_t *clabel=p->clabel->array; size_t kjd=gal_data_ptr_dist(p->clabel->array, i, p->clabel->type); printf("%zu, %zu: %u\n", kjd%dsize[1]+1, kjd/dsize[1]+1, clabel[kjd]); } */ } }); /* Correct the number of indexs. */ cltprm.indexs->size=cltprm.indexs->dsize[0]=c; /* Generate the clumps over this region. */ clumps_oversegment(&cltprm); /* Set all river pixels to CLUMPS_INIT (to be distinguishable from the detected regions). */ GAL_TILE_PO_OISET( int32_t, int, tile, NULL, 0, 1, {if(*i==CLUMPS_RIVER) *i=CLUMPS_INIT;} ); /* For a check, the step variable will be set. */ if(clprm->step==1) { gal_data_free(cltprm.indexs); continue; } /* Make the clump S/N table. */ clumps_make_sn_table(&cltprm); /* If the user wanted to check the steps, remove the clumps that weren't used from the `clabel' image (they have been already excluded from the table). */ if(cltprm.snind) clumps_correct_sky_labels_for_check(&cltprm, tile); /* Clean up. */ gal_data_free(cltprm.indexs); } /* Reset the tile's pointers back to what they were. */ tile->array=tarray; tile->block=tblock; } /* Clean up. */ free(scoord); free(icoord); /* Wait for the all the threads to finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* Find the true clump signal to noise value from the clumps in the sky region. Each thread will find the useful signal to noise values for the tiles that have been assigned to it. It will then store the pointer to the S/N table into the sntablearr array (with the size of the number of meshs). If no clumps could be found in a mesh, then sntablearr[i]=NULL. Otherwise, it points to an array of the useful S/N values in that clump. Note that we don't care about the order of S/N values any more! There is also an accompanying array to keep the number of elements in the final S/N array of each mesh: numclumpsarr. Using these two arrays, after all the threads are finished, we can concatenate all the S/N values into one array and send it to the main findsnthresh function in thresh.c. */ void clumps_true_find_sn_thresh(struct noisechiselparams *p) { char *msg; struct timeval t1; size_t i, j, c, numsn=0; struct clumps_params clprm; gal_list_str_t *comments=NULL; gal_data_t *sn, *snind, *quant, *claborig; /* Get starting time for later reporting if necessary. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); /* Initialize/allocate the clump parameters structure, Note that the S/N indexs are also needed when we want to check the segmentation steps (they are used to correct the indexs in the final output). */ clprm.p=p; clprm.sky0_det1=0; clprm.sn=gal_data_array_calloc(p->ltl.tottiles); clprm.snind = ( p->checksegmentation || p->checkclumpsn ? gal_data_array_calloc(p->ltl.tottiles) : NULL ); /* If the user wants to check the steps of get an S/N table, then we need a unique label for each clump. But in each region, the labels start from 1. So we need a central place to keep the next available label. Since `p->numclumps' is not used yet, we will use it here. When multiple threads are used, we will need a mutex to make sure that only one thread can change this central variable at every one moment. */ if(p->checksegmentation || p->checkclumpsn) { p->numclumps=0; if( p->cp.numthreads > 1 ) pthread_mutex_init(&clprm.labmutex, NULL); } /* Spin off the threads to start the work. Note that several steps are done on each tile within a thread. So if the user wants to check steps, we need to break out of the processing get an over-all output, then reset the input and call it again. So it will be slower, but its is natural, since the user is testing to find the correct combination of parameters for later use. */ if(p->segmentationname) { /* Necessary initializations. */ clprm.step=1; claborig=p->clabel; p->clabel=gal_data_copy(claborig); /* Do each step. */ while(clprm.step<3) { /* Reset the temporary copy of clabel back to its original. */ if(clprm.step>1) memcpy(p->clabel->array, claborig->array, claborig->size*gal_type_sizeof(claborig->type)); /* Do this step. */ gal_threads_spin_off(clumps_find_make_sn_table, &clprm, p->ltl.tottiles, p->cp.numthreads); /* Set the extension name. */ switch(clprm.step) { case 1: p->clabel->name = "SKY_CLUMPS_ALL"; break; case 2: p->clabel->name = "SKY_CLUMPS_FOR_SN"; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so " "we can address the issue. The value %d is not valid for " "clprm.step", __func__, PACKAGE_BUGREPORT, clprm.step); } /* Write the demonstration array into the check image. The default values are hard to view, so we'll make a copy of the demo, set all Sky regions to blank and all clump macro values to zero. */ gal_fits_img_write(p->clabel, p->segmentationname, NULL, PROGRAM_NAME); /* Increment the step counter. */ ++clprm.step; } /* Clean up (we don't need the original any more). */ gal_data_free(claborig); p->clabel->name=NULL; } else { clprm.step=0; gal_threads_spin_off(clumps_find_make_sn_table, &clprm, p->ltl.tottiles, p->cp.numthreads); } /* Destroy the mutex if it was initialized. */ if( p->cp.numthreads>1 && (p->checksegmentation || p->checkclumpsn) ) pthread_mutex_destroy(&clprm.labmutex); /* Find the total number of S/N values we have for all the clumps. */ for(i=0;i<p->ltl.tottiles;++i) if(clprm.sn[i].ndim) /* Only on tiles were an S/N was calculated. */ numsn+=clprm.sn[i].size; if( numsn < p->minnumfalse ) error(EXIT_FAILURE, 0, "only %zu clumps could be identified in the " "undetected regions. This is less than %zu (value to " "`--minnumfalse' option). Please either decrease this value or " "other options to change prior processing steps", numsn, p->minnumfalse); /* Allocate the space to keep all the S/N values. */ sn=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &numsn, NULL, 0, p->cp.minmapsize, "CLUMP_S/N", "ratio", "Signal-to-noise ratio"); snind = ( p->checkclumpsn ? gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &numsn, NULL, 0, p->cp.minmapsize, "CLUMP_ID", "counter", "Unique ID for this clump.") : NULL ); /* Copy the S/N values of all the clumps into the unified array. */ c=0; for(i=0;i<p->ltl.tottiles;++i) if(clprm.sn[i].ndim) for(j=0;j<clprm.sn[i].size;++j) { ((float *)(sn->array))[c] = ((float *)(clprm.sn[i].array))[j]; if(snind) ((int32_t *)(snind->array))[c] = ((int32_t *)(clprm.snind[i].array))[j]; ++c; } /* The S/N array of sky clumps is desiged to have no blank values, so set the flags accordingly to avoid a redundant blank search. */ sn->flag = GAL_DATA_FLAG_BLANK_CH | GAL_DATA_FLAG_HASBLANK; /* If the user wanted to see the S/N table, then save it. */ if(p->checkclumpsn) { /* Make the comments, then write the table and free the comments. */ if(p->cp.numthreads>1) gal_list_str_add(&comments, "NOTE: In multi-threaded mode, clump " "IDs differ in each run and are not sorted.", 1); gal_list_str_add(&comments, "See also: `SKY_CLUMPS_FOR_SN' HDU of " "output with `--checksegmentation'.", 1); gal_list_str_add(&comments, "S/N of clumps over undetected regions.", 1); threshold_write_sn_table(p, sn, snind, p->clumpsn_s_name, comments); gal_list_str_free(comments, 1); } /* Find the desired quantile from the full S/N distribution. */ quant = gal_statistics_quantile(sn, p->segquant, 1); p->clumpsnthresh = *((float *)(quant->array)); if(!p->cp.quiet) { asprintf(&msg, "Clump S/N: %.2f (%.3f quant of %zu).", p->clumpsnthresh, p->segquant, sn->size); gal_timing_report(&t1, msg, 2); free(msg); } /* Clean up. */ gal_data_free(sn); gal_data_free(snind); gal_data_free(quant); gal_data_array_free(clprm.sn, p->ltl.tottiles, 1); gal_data_array_free(clprm.snind, p->ltl.tottiles, 1); } /***********************************************************************/ /***************** Over detections *****************/ /***********************************************************************/ /* Put the indexs of each labeled region into an array of `gal_data_t's (where each element is a dataset containing the respective label's indexs). */ gal_data_t * clumps_det_label_indexs(struct noisechiselparams *p) { size_t i, *areas; int32_t *a, *l, *lf; gal_data_t *labindexs=gal_data_array_calloc(p->numdetections+1); /* Find the area in each detected objects (to see how much space we need to allocate). */ areas=gal_data_calloc_array(GAL_TYPE_SIZE_T, p->numdetections+1, __func__, "areas"); if(gal_blank_present(p->input, 1)) { lf=(l=p->olabel->array)+p->olabel->size; /* Blank pixels have a */ do if(*l>0) ++areas[*l]; while(++l<lf); /* negative value in int32. */ } else { lf=(l=p->olabel->array)+p->olabel->size; do ++areas[*l]; while(++l<lf); areas[0]=0; } /* For a check. for(i=0;i<p->numdetections+1;++i) printf("detection %zu: %zu\n", i, areas[i]); exit(0); */ /* Allocate/Initialize the dataset containing the indexs of each object. We don't want the labels of the non-detected regions (areas[0]). So we'll set that to zero.*/ for(i=1;i<p->numdetections+1;++i) gal_data_initialize(&labindexs[i], NULL, GAL_TYPE_SIZE_T, 1, &areas[i], NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); /* Put the indexs into each dataset. We will use the areas array again, but this time, use it as a counter. */ memset(areas, 0, (p->numdetections+1)*sizeof *areas); lf=(a=l=p->olabel->array)+p->olabel->size; do if(*l>0) /* No undetected regions (*l==0), or blank (<0) */ ((size_t *)(labindexs[*l].array))[ areas[*l]++ ] = l-a; while(++l<lf); /* Clean up and return. */ free(areas); return labindexs; } /* Only keep true clumps over detections. */ void clumps_det_keep_true_relabel(struct clumps_thread_params *cltprm) { struct noisechiselparams *p=cltprm->clprm->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; int istouching; size_t i, *s, *sf, *dinc; float *sn = cltprm->sn ? cltprm->sn->array : NULL; int32_t *l, *lf, *newlabs, curlab=1, *clabel=p->clabel->array; /* If there were no clumps over the detection, then just set the number of true clumps to zero, otherwise, see which ones should be removed. */ if(cltprm->sn) { /* Allocate the necessary arrays. */ newlabs=gal_data_malloc_array(GAL_TYPE_INT32, cltprm->numinitclumps+1, __func__, "newlabs"); dinc=gal_dimension_increment(ndim, dsize); /* Initialize the new labels with CLUMPS_INIT (so the diffuse area can be distinguished from the clumps). */ lf=(l=newlabs)+cltprm->numinitclumps+1; do *l++=CLUMPS_INIT; while(l<lf); /* Set the new labels. Here we will also be removing clumps with a peak that touches a river pixel. */ if(p->keepmaxnearriver) { for(i=1;i<cltprm->numinitclumps+1;++i) if( sn[i] > p->clumpsnthresh ) newlabs[i]=curlab++; } else { for(i=1;i<cltprm->numinitclumps+1;++i) { /* Check if all the neighbors of this top element are touching a river or not. */ istouching=0; GAL_DIMENSION_NEIGHBOR_OP(cltprm->topinds[i], ndim, dsize, ndim, dinc, { if(clabel[nind]==0) istouching=1; }); /* If the peak isn't touching a river, then check its S/N and if that is also good, give it a new label. */ if( !istouching && sn[i] > p->clumpsnthresh ) newlabs[i]=curlab++; } } /* Correct the clump labels. Note that the non-clumpy regions over the detections (rivers) have already been initialized to CLUMPS_INIT (which is negative). So we'll just need to correct the ones with a value larger than 0. */ sf=(s=cltprm->indexs->array)+cltprm->indexs->size; do if(clabel[*s]>0) clabel[*s] = newlabs[ clabel[*s] ]; while(++s<sf); /* Save the total number of true clumps in this detection. */ cltprm->numtrueclumps=curlab-1; /* Clean up. */ free(dinc); free(newlabs); } else cltprm->numtrueclumps=0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/ui.c�������������������������������������������������������������������0000644�0001750�0001750�00000063101�13216276304�014004� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <gnuastro/wcs.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" Detects and segments signal " "that is deeply burried in noise. It employs a noise-based detection and " "segmentation method enabling it to be very resilient to the rich diversity " "of shapes in astronomical targets.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct noisechiselparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_TILESIZE: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_NUMCHANNELS: case GAL_OPTIONS_KEY_INTERPNUMNGB: case GAL_OPTIONS_KEY_REMAINDERFRAC: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; cp->coptions[i].doc="`txt', `fits-ascii', `fits-binary'."; break; } } } /* Parse a single option: */ static error_t parse_opt(int key, char *arg, struct argp_state *state) { struct noisechiselparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: if(p->inputname) argp_error(state, "only one argument (input file) should be given"); else p->inputname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct noisechiselparams *p) { /* If the convolved option is given, then the convolved HDU is also mandatory. */ if(p->convolvedname && p->convolvedhdu==NULL) error(EXIT_FAILURE, 0, "no value given to `--convolvedhdu'. When the " "`--convolved' option is called (to specify a convolved image " "and avoid convolution) it is mandatory to also specify a HDU " "for it"); /* Make sure the connectivities have the correct values. */ if(p->erodengb!=4 && p->erodengb!=8) error(EXIT_FAILURE, 0, "%zu not acceptable for `--erodengb'. It must " "be 4 or 8 (specifying the type of connectivity)", p->erodengb); if(p->openingngb!=4 && p->openingngb!=8) error(EXIT_FAILURE, 0, "%zu not acceptable for `--openingngb'. It must " "be 4 or 8 (specifying the type of connectivity)", p->openingngb); /* Make sure that the no-erode-quantile is not smaller or equal to qthresh. */ if( p->noerodequant <= p->qthresh) error(EXIT_FAILURE, 0, "the quantile for no erosion (`--noerodequant') " "must be larger than the base quantile threshold (`--qthresh', " "or `-t'). You have provided %.4f and %.4f for the former and " "latter, respectively", p->noerodequant, p->qthresh); /* For the options that make tables, the table formation option is mandatory. */ if( (p->checkdetsn || p->checkclumpsn) && p->cp.tableformat==0 ) error(EXIT_FAILURE, 0, "`--tableformat' is necessary with the " "`--checkdetsn' and `--checkclumpsn' options.\n" "Please see description for `--tableformat' after running the " "following command for more information (use `SPACE' to go down " "the page and `q' to return to the command-line):\n\n" " $ info gnuastro \"Input Output options\""); /* Kernel checks. */ if(p->kernelname) { /* Check if it exists. */ gal_checkset_check_file(p->kernelname); /* If its FITS, see if a HDU has been provided. */ if( gal_fits_name_is_fits(p->kernelname) && p->khdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified for kernel. When the " "kernel is a FITS file, a HDU must also be specified. You " "can use the `--khdu' option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); } /* Wide kernel checks. */ if(p->widekernelname) { /* Check if it exists. */ gal_checkset_check_file(p->widekernelname); /* If its FITS, see if a HDU has been provided. */ if( gal_fits_name_is_fits(p->widekernelname) && p->wkhdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified for wide kernel. When the " "wide kernel is a FITS file, a HDU must also be specified. You " "can use the `--khdu' option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); } } static void ui_check_options_and_arguments(struct noisechiselparams *p) { /* Basic input file checks. */ if(p->inputname) { /* Check if it exists. */ gal_checkset_check_file(p->inputname); /* If its FITS, see if a HDU has been provided. */ if( gal_fits_name_is_fits(p->inputname) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified for input. When the input " "is a FITS file, a HDU must also be specified, you can use " "the `--hdu' (`-h') option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); } else error(EXIT_FAILURE, 0, "no input file is specified"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_set_output_names(struct noisechiselparams *p) { char *output=p->cp.output; char *basename = output ? output : p->inputname; /* Main program output. */ if(output) { /* Delete the file if it already exists. */ gal_checkset_writable_remove(p->cp.output, 0, p->cp.dontdelete); /* When the output name is given (possibly with directory information), the check images will also be put in that same directory.. */ p->cp.keepinputdir=1; } else p->cp.output=gal_checkset_automatic_output(&p->cp, p->inputname, "_labeled.fits"); /* Tile check. */ if(p->cp.tl.checktiles) p->cp.tl.tilecheckname=gal_checkset_automatic_output(&p->cp, basename, "_tiles.fits"); /* Quantile threshold. */ if(p->checkqthresh) p->qthreshname=gal_checkset_automatic_output(&p->cp, basename, "_qthresh.fits"); /* Initial detection Sky values. */ if(p->checkdetsky) p->detskyname=gal_checkset_automatic_output(&p->cp, basename, "_detsky.fits"); /* Pseudo-detection S/N values. */ if(p->checkdetsn) { p->detsn_s_name=gal_checkset_automatic_output(&p->cp, basename, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_detsn_sky.txt" : "_detsn_sky.fits") ); p->detsn_d_name=gal_checkset_automatic_output(&p->cp, basename, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_detsn_det.txt" : "_detsn_det.fits") ); p->detsn_D_name=gal_checkset_automatic_output(&p->cp, basename, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_detsn_grown.txt" : "_detsn_grown.fits") ); } /* Detection steps. */ if(p->checkdetection) p->detectionname=gal_checkset_automatic_output(&p->cp, basename, "_det.fits"); /* Detection steps. */ if(p->checksky) p->skyname=gal_checkset_automatic_output(&p->cp, basename, "_sky.fits"); /* Clump S/N values. */ if(p->checkclumpsn) { p->clumpsn_s_name=gal_checkset_automatic_output(&p->cp, basename, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_clumpsn_sky.txt" : "_clumpsn_sky.fits") ); p->clumpsn_d_name=gal_checkset_automatic_output(&p->cp, basename, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_clumpsn_det.txt" : "_clumpsn_det.fits") ); } /* Segmentation steps. */ if(p->checksegmentation) p->segmentationname=gal_checkset_automatic_output(&p->cp, basename, "_seg.fits"); } static void ui_prepare_kernel(struct noisechiselparams *p) { /* The default kernel. It was created by saving the following commands in a script and running it. It will create a plain text array along with a FITS image. The crop is because the first and last rows and columns of all PSFs made by MakeProfiles are blank (zero) when you run with oversample=1. You can keep the spaces when copying and pasting ;-). Just make it executable and run it. set -o errexit # Stop if a program returns false. echo "0 0.0 0.0 3 2 0 0 1 1 5" > tmp.txt export GSL_RNG_TYPE=ranlxs2 export GSL_RNG_SEED=1 astmkprof tmp.txt --oversample=1 --envseed --numrandom=10000 \ --tolerance=0.01 --nomerged astcrop 0_tmp.fits --section=2:*-1,2:*-1 --zeroisnotblank \ --output=fwhm2.fits astconvertt fwhm2.fits --output=fwhm2.txt rm 0_tmp.fits tmp.txt */ size_t kernel_2d_dsize[2]={11,11}; float *f, *ff, *k, kernel_2d[121]= { 0, 0, 0, 0, 0, 6.57699e-09, 0, 0, 0, 0, 0, 0, 0, 6.57699e-09, 2.10464e-07, 1.68371e-06, 3.36742e-06, 1.68371e-06, 2.10464e-07, 6.57699e-09, 0, 0, 0, 6.57699e-09, 8.41855e-07, 2.69394e-05, 0.000383569, 0.000717224, 0.000379782, 2.69394e-05, 8.41855e-07, 6.57699e-09, 0, 0, 2.10464e-07, 2.69394e-05, 0.00140714, 0.00888549, 0.016448, 0.00867408, 0.00138203, 2.69394e-05, 2.10464e-07, 0, 0, 1.68371e-06, 0.000381138, 0.00875434, 0.0573377, 0.106308, 0.0570693, 0.00891745, 0.000378914, 1.68371e-06, 0, 6.57699e-09, 3.36742e-06, 0.00071364, 0.0164971, 0.106865, 0.197316, 0.106787, 0.0166434, 0.000713827, 3.36742e-06, 6.57699e-09, 0, 1.68371e-06, 0.000215515, 0.00894112, 0.0573699, 0.106239, 0.0567907, 0.00901191, 0.000215515, 1.68371e-06, 0, 0, 2.10464e-07, 2.69394e-05, 0.00135085, 0.0089288, 0.0164171, 0.00879334, 0.0013622, 2.69394e-05, 2.10464e-07, 0, 0, 6.57699e-09, 8.41855e-07, 2.69394e-05, 0.000215515, 0.000724137, 0.000215515, 2.69394e-05, 8.41855e-07, 6.57699e-09, 0, 0, 0, 6.57699e-09, 2.10464e-07, 1.68371e-06, 3.36742e-06, 1.68371e-06, 2.10464e-07, 6.57699e-09, 0, 0, 0, 0, 0, 0, 0, 6.57699e-09, 0, 0, 0, 0, 0 }; /* If a kernel file is given, then use it. Otherwise, use the default kernel. */ if(p->kernelname) p->kernel=gal_fits_img_read_kernel(p->kernelname, p->khdu, p->cp.minmapsize); else { /* Allocate space for the kernel (we don't want to use the statically allocated array. */ p->kernel=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 2, kernel_2d_dsize, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); /* Now copy the staticly allocated array into it. */ k=p->kernel->array; ff=(f=kernel_2d)+gal_dimension_total_size(2, p->kernel->dsize); do *k++=*f; while(++f<ff); } /* If a wide kernel is given, then read it into memory. Otherwise, just ignore it. */ if(p->widekernelname) p->widekernel=gal_fits_img_read_kernel(p->widekernelname, p->wkhdu, p->cp.minmapsize); } static void ui_prepare_tiles(struct noisechiselparams *p) { gal_data_t *check; struct gal_tile_two_layer_params *tl=&p->cp.tl, *ltl=&p->ltl; /* Check the tile parameters for the small tile sizes and make the tile structure. We will also need the dimensions of the tile with the maximum required memory. */ p->maxtsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, p->input->ndim, __func__, "p->maxtsize"); gal_tile_full_sanity_check(p->inputname, p->cp.hdu, p->input, tl); gal_tile_full_two_layers(p->input, tl); gal_tile_full_permutation(tl); for(check=tl->tiles; check!=NULL; check=check->next) if( check->size > p->maxtcontig )/* p->maxtcontig initialized to 0. */ { p->maxtcontig=check->size; memcpy(p->maxtsize, check->dsize, tl->ndim*sizeof *p->maxtsize); } /* Make the large tessellation, except for the size, the rest of the parameters are the same as the small tile sizes. */ ltl->numchannels = tl->numchannels; ltl->remainderfrac = tl->remainderfrac; ltl->workoverch = tl->workoverch; ltl->checktiles = tl->checktiles; ltl->oneelempertile = tl->oneelempertile; p->maxltsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, p->input->ndim, __func__, "p->maxltsize"); gal_tile_full_sanity_check(p->inputname, p->cp.hdu, p->input, ltl); gal_tile_full_two_layers(p->input, ltl); gal_tile_full_permutation(ltl); for(check=ltl->tiles; check!=NULL; check=check->next) if( check->size > p->maxltcontig )/* p->maxltcontig initialized to 0. */ { p->maxltcontig=check->size; memcpy(p->maxltsize, check->dsize, ltl->ndim*sizeof *p->maxltsize); } /* If the input has blank elements, then set teh appropriate flag for each tile.*/ if( p->input->flag & GAL_DATA_FLAG_HASBLANK ) { gal_tile_block_blank_flag(tl->tiles, p->cp.numthreads); gal_tile_block_blank_flag(ltl->tiles, p->cp.numthreads); } /* Make the tile check image if requested. */ if(tl->checktiles) { /* Large tiles. */ check=gal_tile_block_check_tiles(ltl->tiles); gal_fits_img_write(check, tl->tilecheckname, NULL, PROGRAM_NAME); gal_data_free(check); /* Small tiles. */ check=gal_tile_block_check_tiles(tl->tiles); gal_fits_img_write(check, tl->tilecheckname, NULL, PROGRAM_NAME); gal_data_free(check); /* If `continueaftercheck' hasn't been called, abort NoiseChisel. */ if(!p->continueaftercheck) ui_abort_after_check(p, tl->tilecheckname, NULL, "showing all tiles over the image"); /* Free the name. */ free(tl->tilecheckname); } } static void ui_preparations(struct noisechiselparams *p) { /* Prepare the names of the outputs. */ ui_set_output_names(p); /* Read the input as a single precision floating point dataset. */ p->input = gal_fits_img_read_to_type(p->inputname, p->cp.hdu, GAL_TYPE_FLOAT32, p->cp.minmapsize, 0, 0); if(p->input->name==NULL) gal_checkset_allocate_copy("INPUT", &p->input->name); /* NoiseChisel currently only works on 2D datasets (images). */ if(p->input->ndim!=2) error(EXIT_FAILURE, 0, "%s (hdu: %s) has %zu dimensions but NoiseChisel " "can only operate on 2D datasets (images)", p->inputname, p->cp.hdu, p->input->ndim); /* If a convolved image was given, read it in. Otherwise, read the given kernel. */ if(p->convolvedname) { /* Read the input convolved image. */ p->conv = gal_fits_img_read_to_type(p->convolvedname, p->convolvedhdu, GAL_TYPE_FLOAT32, p->cp.minmapsize, 0, 0); /* Make sure the convolved image is the same size as the input. */ if( gal_data_dsize_is_different(p->input, p->conv) ) error(EXIT_FAILURE, 0, "%s (hdu %s), given to `--convolved' and " "`--convolvehdu', is not the same size as NoiseChisel's " "input: %s (hdu: %s)", p->convolvedname, p->convolvedhdu, p->inputname, p->cp.hdu); } else ui_prepare_kernel(p); /* Check for blank values to help later processing. */ gal_blank_present(p->input, 1); /* Prepare the tessellation. */ ui_prepare_tiles(p); /* Allocate space for the over-all necessary arrays. */ p->binary=gal_data_alloc(NULL, GAL_TYPE_UINT8, p->input->ndim, p->input->dsize, p->input->wcs, 0, p->cp.minmapsize, NULL, "binary", NULL); p->olabel=gal_data_alloc(NULL, GAL_TYPE_INT32, p->input->ndim, p->input->dsize, p->input->wcs, 0, p->cp.minmapsize, NULL, "labels", NULL); p->binary->flag = p->olabel->flag = p->input->flag; } /**************************************************************/ /************ High level reading function *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct noisechiselparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Let the user know that processing has started. */ if(!p->cp.quiet) { printf(PROGRAM_NAME" started on %s", ctime(&p->rawtime)); printf(" - Using %zu CPU thread%s\n", p->cp.numthreads, p->cp.numthreads==1 ? "." : "s."); printf(" - Input: %s (hdu: %s)\n", p->inputname, p->cp.hdu); if(p->convolvedname) printf(" - Convolved input: %s (hdu: %s)\n", p->convolvedname, p->convolvedhdu); else { if(p->kernelname) printf(" - %s: %s (hdu: %s)\n", p->widekernelname ? "Sharp Kernel" : "Kernel", p->kernelname, p->khdu); else printf(" - %s: FWHM=2 pixel Gaussian.\n", p->widekernelname ? "Sharp Kernel" : "Kernel"); } if(p->widekernelname) printf(" - Wide Kernel: %s (hdu: %s)\n", p->widekernelname, p->wkhdu); } } /**************************************************************/ /************ Pre-finish/abort operations *************/ /**************************************************************/ void ui_abort_after_check(struct noisechiselparams *p, char *filename, char *file2name, char *description) { char *name; if(file2name) asprintf(&name, "`%s' and `%s'", filename, file2name); else asprintf(&name, "`%s'", filename); /* Let the user know that NoiseChisel is aborting. */ fprintf(stderr, "------------------------------------------------\n" "%s aborted for a check\n" "------------------------------------------------\n" "%s (%s) has been created.\n\n" "If you want %s to continue its processing AND save any " "requested check outputs, please run it again with " "`--continueaftercheck'.\n" "------------------------------------------------\n", PROGRAM_NAME, name, description, PROGRAM_NAME); /* Clean up. */ free(name); ui_free_report(p, NULL); /* Abort. */ exit(EXIT_SUCCESS); } void ui_free_report(struct noisechiselparams *p, struct timeval *t1) { /* Free the simply allocated spaces. */ free(p->cp.hdu); free(p->maxtsize); free(p->maxltsize); free(p->cp.output); if(p->skyname) free(p->skyname); if(p->detskyname) free(p->detskyname); if(p->qthreshname) free(p->qthreshname); if(p->detsn_s_name) free(p->detsn_s_name); if(p->detsn_d_name) free(p->detsn_d_name); if(p->detectionname) free(p->detectionname); if(p->clumpsn_s_name) free(p->clumpsn_s_name); if(p->clumpsn_d_name) free(p->clumpsn_d_name); if(p->segmentationname) free(p->segmentationname); /* Free the allocated datasets. */ gal_data_free(p->sky); gal_data_free(p->std); gal_data_free(p->conv); gal_data_free(p->wconv); gal_data_free(p->input); gal_data_free(p->kernel); gal_data_free(p->binary); gal_data_free(p->olabel); gal_data_free(p->clabel); gal_data_free(p->widekernel); /* Clean up the tile structure. */ p->ltl.numchannels=NULL; gal_tile_full_free_contents(&p->ltl); gal_tile_full_free_contents(&p->cp.tl); /* Print the final message. */ if(!p->cp.quiet && t1) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/main.c�����������������������������������������������������������������0000644�0001750�0001750�00000003123�13121462410�014277� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* NoiseChisel - Detect and segment signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" #include "noisechisel.h" /* Main function */ int main (int argc, char *argv[]) { struct timeval t1; struct noisechiselparams p={{{0},0},{0},0}; /* Set they starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ noisechisel(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully.*/ return EXIT_SUCCESS; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/Makefile.in������������������������������������������������������������0000644�0001750�0001750�00000212576�13217217705�015305� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astnoisechisel$(EXEEXT) subdir = bin/noisechisel ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astnoisechisel_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ clumps.$(OBJEXT) detection.$(OBJEXT) noisechisel.$(OBJEXT) \ sky.$(OBJEXT) segmentation.$(OBJEXT) threshold.$(OBJEXT) astnoisechisel_OBJECTS = $(am_astnoisechisel_OBJECTS) astnoisechisel_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astnoisechisel_SOURCES) DIST_SOURCES = $(astnoisechisel_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astnoisechisel_LDADD = -lgnuastro astnoisechisel_SOURCES = main.c ui.c clumps.c detection.c noisechisel.c \ sky.c segmentation.c threshold.c EXTRA_DIST = main.h authors-cite.h args.h ui.h clumps.h detection.h \ noisechisel.h segmentation.h sky.h threshold.h dist_sysconf_DATA = astnoisechisel.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/noisechisel/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/noisechisel/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astnoisechisel$(EXEEXT): $(astnoisechisel_OBJECTS) $(astnoisechisel_DEPENDENCIES) $(EXTRA_astnoisechisel_DEPENDENCIES) @rm -f astnoisechisel$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astnoisechisel_OBJECTS) $(astnoisechisel_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clumps.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/noisechisel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/segmentation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sky.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threshold.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/astnoisechisel.conf����������������������������������������������������0000644�0001750�0001750�00000003215�13177434204�017110� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for NoiseChisel. # NoiseChisel is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astnoisechisel --help # Full list of options, short doc. # $ astnoisechisel -P # Print all options and used values. # $ info astnoisechisel # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: khdu 1 wkhdu 1 convolvedhdu 1 minskyfrac 0.7 minnumfalse 100 # Tessellation largetilesize 200,200 # Detection: mirrordist 1.5 modmedqdiff 0.01 qthresh 0.3 qthreshtilequant 1.0 smoothwidth 3 erode 2 erodengb 4 noerodequant 0.9331 opening 1 openingngb 8 sigmaclip 3,0.2 dthresh 0.0 detsnminarea 10 detquant 0.95 detgrowquant 0.70 detgrowmaxholesize 100 # Segmentation segsnminarea 15 keepmaxnearriver 0 segquant 0.95 gthresh 0.5 minriverlength 15 objbordersn 1 # Operating mode continueaftercheck 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/noisechisel/Makefile.am������������������������������������������������������������0000644�0001750�0001750�00000003014�13216276304�015254� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2016, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astnoisechisel astnoisechisel_LDADD = -lgnuastro astnoisechisel_SOURCES = main.c ui.c clumps.c detection.c noisechisel.c \ sky.c segmentation.c threshold.c EXTRA_DIST = main.h authors-cite.h args.h ui.h clumps.h detection.h \ noisechisel.h segmentation.h sky.h threshold.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astnoisechisel.conf ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220467�012273� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/profiles.h������������������������������������������������������������������0000644�0001750�0001750�00000003135�13134433053�014204� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef PROFILES_H #define PROFILES_H double profiles_radial_distance(struct mkonthread *mkp); double profiles_gaussian_total(double q); double profiles_gaussian(struct mkonthread *mkp); double profiles_moffat_alpha(double fwhm, double beta); double profiles_moffat_total(double alpha, double beta, double q); double profiles_moffat(struct mkonthread *mkp); double profiles_sersic_b(double n); double profiles_sersic_total(double n, double re, double b, double q); double profiles_sersic(struct mkonthread *mkp); double profiles_circumference(struct mkonthread *mkp); double profiles_flat(struct mkonthread *mkp); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/oneprofile.h����������������������������������������������������������������0000644�0001750�0001750�00000002272�13132200542�014515� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/******************************************************************** MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ONEPROFILE_H #define ONEPROFILE_H #include "mkprof.h" int oneprofile_ispsf(uint8_t fcolvalue); void oneprof_set_prof_params(struct mkonthread *mkp); void oneprofile_make(struct mkonthread *mkp); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/mkprof.h��������������������������������������������������������������������0000644�0001750�0001750�00000006627�13216276304�013675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MOCKGALS_H #define MOCKGALS_H #include <gnuastro/threads.h> #include "main.h" struct mkonthread { /* General parameters: */ double r; /* Elliptical radius at this point. */ double coord[2]; /* Pixel coordinate. */ double lower[2]; /* Coordinates of lower pixel position. */ double higher[2]; /* Coordinates of higher pixel position. */ double c[1]; /* Cosine of position angle(s). */ double s[1]; /* Sine of position angle(s). */ double q[1]; /* Axis ratio(s). */ double center[2]; /* Center (in FITS) in oversampled image.*/ double (*profile)(struct mkonthread *); /* Function to use. */ double truncr; /* Truncation radius in pixels. */ double intruncr; /* Inner truncation radius in pixels. */ long width[2]; /* Enclosing box in FITS axes, not C. */ float peakflux; /* Flux at profile peak. */ float brightness; /* The brightness of the profile. */ uint8_t func; /* Radial function of the profile. */ long *onaxes; /* Sides of the unover-sampled image. */ long fpixel_i[2]; /* fpixel_i before running overlap. */ int correction; /* ==1: correct the pixels afterwards. */ /* Random number generator: */ gsl_rng *rng; /* Copy of main random number generator. */ /* Profile specific parameters: */ double sersic_re; /* r/re in Sersic profile. */ double sersic_inv_n; /* Sersic index of Sersic profile. */ double sersic_nb; /* Negative of b(n) constant. */ double moffat_alphasq; /* r divided by alpha in Moffat. */ double moffat_nb; /* Negative beta in the Moffat. */ double gaussian_c; /* Constant value in Gaussian. */ double fixedvalue; /* Value of a point source. */ /* General parameters */ struct mkprofparams *p; /* Pointer to the main.h structure. */ size_t *indexs; /* Indexs to build on this thread. */ pthread_barrier_t *b; /* Pthread barrier pointer. */ struct builtqueue *ibq; /* Internally built queue. */ }; void mkprof(struct mkprofparams *p); #endif ���������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/ui.h������������������������������������������������������������������������0000644�0001750�0001750�00000004766�13216276304�013016� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_PROFILES = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_CATALOG, UI_GROUP_WCS, }; /* Keys for each option. Available letters (-V which is used by GNU is also removed): a b d g j l n u v y A G H J L O Q W Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_BACKGROUND = 'k', UI_KEY_BACKHDU = 'B', UI_KEY_NAXIS = 'x', UI_KEY_CLEARCANVAS = 'C', UI_KEY_KERNEL = 'E', UI_KEY_OVERSAMPLE = 's', UI_KEY_INDIVIDUAL = 'i', UI_KEY_NOMERGED = 'm', UI_KEY_NUMRANDOM = 'r', UI_KEY_TOLERANCE = 't', UI_KEY_TUNITINP = 'p', UI_KEY_SHIFT = 'X', UI_KEY_PREPFORCONV = 'c', UI_KEY_ZEROPOINT = 'z', UI_KEY_CIRCUMWIDTH = 'w', UI_KEY_REPLACE = 'R', UI_KEY_ENVSEED = 'e', UI_KEY_MFORFLATPIX = 'f', /* Only with long version. */ UI_KEY_PSFINIMG = 1000, UI_KEY_MAGATPEAK, UI_KEY_MCOLISBRIGHTNESS, UI_KEY_MODE, UI_KEY_CCOL, UI_KEY_FCOL, UI_KEY_RCOL, UI_KEY_NCOL, UI_KEY_PCOL, UI_KEY_QCOL, UI_KEY_MCOL, UI_KEY_TCOL, UI_KEY_CRPIX, UI_KEY_CRVAL, UI_KEY_CDELT, UI_KEY_PC, UI_KEY_CUNIT, UI_KEY_CTYPE, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct mkprofparams *p); void ui_free_report(struct mkprofparams *p, struct timeval *t1); #endif ����������gnuastro-0.5/bin/mkprof/args.h����������������������������������������������������������������������0000644�0001750�0001750�00000030256�13216276304�013326� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Option definition array. */ struct argp_option program_options[] = { { "background", UI_KEY_BACKGROUND, "STR", 0, "A background image to make the profiles on.", GAL_OPTIONS_GROUP_INPUT, &p->backname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "backhdu", UI_KEY_BACKHDU, "INT/STR", 0, "HDU of background image.", GAL_OPTIONS_GROUP_INPUT, &p->backhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "clearcanvas", UI_KEY_CLEARCANVAS, 0, 0, "All pixels in background image read as zero.", GAL_OPTIONS_GROUP_INPUT, &p->clearcanvas, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "kernel", UI_KEY_KERNEL, "STR", 0, "Parameters to only build one kernel.", GAL_OPTIONS_GROUP_INPUT, &p->kernel, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_parse_kernel }, { "naxis", UI_KEY_NAXIS, "INT[,INT,...]", 0, "Merged image size along each dimension.", GAL_OPTIONS_GROUP_OUTPUT, &p->dsize, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, { "oversample", UI_KEY_OVERSAMPLE, "INT", 0, "Scale of oversampling (>0 and odd).", GAL_OPTIONS_GROUP_OUTPUT, &p->oversample, GAL_TYPE_UINT8, GAL_OPTIONS_RANGE_GT_0_ODD, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "psfinimg", UI_KEY_PSFINIMG, 0, 0, "PSF profiles made with all in output image.", GAL_OPTIONS_GROUP_OUTPUT, &p->psfinimg, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "individual", UI_KEY_INDIVIDUAL, 0, 0, "Build all profiles separately.", GAL_OPTIONS_GROUP_OUTPUT, &p->individual, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "nomerged", UI_KEY_NOMERGED, 0, 0, "Do not create a merged image of all profiles.", GAL_OPTIONS_GROUP_OUTPUT, &p->nomerged, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Profiles:", UI_GROUP_PROFILES }, { "mode", UI_KEY_MODE, "STR", 0, "Mode of `--ccol': `img' or `wcs'.", UI_GROUP_PROFILES, &p->mode, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, ui_parse_coordinate_mode }, { "numrandom", UI_KEY_NUMRANDOM, "INT", 0, "No. of random points in Monte Carlo integration.", UI_GROUP_PROFILES, &p->numrandom, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "envseed", UI_KEY_ENVSEED, 0, 0, "Use GSL_RNG_SEED environment variable for seed.", UI_GROUP_PROFILES, &p->envseed, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "tolerance", UI_KEY_TOLERANCE, "FLT", 0, "Tolerance to switch to less accurate method.", UI_GROUP_PROFILES, &p->tolerance, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "tunitinp", UI_KEY_TUNITINP, 0, 0, "Truncation is in units of pixels, not radius.", UI_GROUP_PROFILES, &p->tunitinp, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mforflatpix", UI_KEY_MFORFLATPIX, 0, 0, "mcol is flat pixel value (when fcol is 5 or 6)", UI_GROUP_PROFILES, &p->mforflatpix, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mcolisbrightness", UI_KEY_MCOLISBRIGHTNESS, 0, 0, "mcol is total brightness, not magnitude.", UI_GROUP_PROFILES, &p->mcolisbrightness, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "shift", UI_KEY_SHIFT, "INT[, ...]", 0, "Shift profile centers in output image.", UI_GROUP_PROFILES, &p->shift, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, { "prepforconv", UI_KEY_PREPFORCONV, 0, 0, "Shift and expand based on first catalog PSF.", UI_GROUP_PROFILES, &p->prepforconv, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "zeropoint", UI_KEY_ZEROPOINT, "FLT", 0, "Magnitude zero point.", UI_GROUP_PROFILES, &p->zeropoint, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "magatpeak", UI_KEY_MAGATPEAK, 0, 0, "Magnitude is for peak pixel, not full profile.", UI_GROUP_PROFILES, &p->magatpeak, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "circumwidth", UI_KEY_CIRCUMWIDTH, "FLT", 0, "Width of circumference (inward) profiles", UI_GROUP_PROFILES, &p->circumwidth, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "replace", UI_KEY_REPLACE, 0, 0, "Replace overlapping profile pixels, don't add.", UI_GROUP_PROFILES, &p->replace, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Columns, by info (see `--searchin'), or number (starting from 1):", UI_GROUP_CATALOG }, { "ccol", UI_KEY_CCOL, "STR/INT", 0, "Coordinate columns (one call for each dimension).", UI_GROUP_CATALOG, &p->ccol, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fcol", UI_KEY_FCOL, "STR/INT", 0, "sersic (1), moffat (2), gaussian (3), point (4), " "flat (5), circumference (6), distance (7).", UI_GROUP_CATALOG, &p->fcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "rcol", UI_KEY_RCOL, "STR/INT", 0, "Effective radius or FWHM in pixels.", UI_GROUP_CATALOG, &p->rcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "ncol", UI_KEY_NCOL, "STR/INT", 0, "Sersic index or Moffat beta.", UI_GROUP_CATALOG, &p->ncol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "pcol", UI_KEY_PCOL, "STR/INT", 0, "Position angle.", UI_GROUP_CATALOG, &p->pcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "qcol", UI_KEY_QCOL, "STR/INT", 0, "Axis ratio.", UI_GROUP_CATALOG, &p->qcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mcol", UI_KEY_MCOL, "STR/INT", 0, "Magnitude.", UI_GROUP_CATALOG, &p->mcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "tcol", UI_KEY_TCOL, "STR/INT", 0, "Truncation in units of --rcol, unless --tunitinp.", UI_GROUP_CATALOG, &p->tcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "WCS parameters:", UI_GROUP_WCS }, { "crpix", UI_KEY_CRPIX, "FLT[, ...]", 0, "Pixel coordinates of reference point.", UI_GROUP_WCS, &p->crpix, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "crval", UI_KEY_CRVAL, "FLT[, ...]", 0, "WCS coordinates of reference point.", UI_GROUP_WCS, &p->crval, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "cdelt", UI_KEY_CDELT, "FLT[, ...]", 0, "Resolution in each dimension.", UI_GROUP_WCS, &p->cdelt, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "pc", UI_KEY_PC, "FLT[, ...]", 0, "WCS rotation matrix (all elements).", UI_GROUP_WCS, &p->pc, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "cunit", UI_KEY_CUNIT, "STR[, ... ]", 0, "Units of the WCS coordinates (e.g., `deg').", UI_GROUP_WCS, &p->cunit, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, { "ctype", UI_KEY_CTYPE, "STR[, ... ]", 0, "One of FITS standard WCS types.", UI_GROUP_WCS, &p->ctype, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/authors-cite.h��������������������������������������������������������������0000644�0001750�0001750�00000002773�13211076737�015007� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif �����gnuastro-0.5/bin/mkprof/main.h����������������������������������������������������������������������0000644�0001750�0001750�00000021152�13216276304�013311� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H #include <pthread.h> #include <gsl/gsl_rng.h> #include <gnuastro/fits.h> #include <gnuastro-internal/options.h> /* Progarm name macros: */ #define PROGRAM_NAME "MakeProfiles" /* Program full name. */ #define PROGRAM_EXEC "astmkprof" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Some constants */ #define EPSREL_FOR_INTEG 2 #define DEGREESTORADIANS M_PI/180.0 /* Modes to interpret coordinates. */ enum coord_modes { MKPROF_MODE_INVALID, /* For sanity checks. */ MKPROF_MODE_IMG, /* Use image coordinates. */ MKPROF_MODE_WCS, /* Use WCS coordinates. */ }; /* Types of profiles. */ enum profile_types { PROFILE_INVALID, /* Invalid (=0 by C standard). */ PROFILE_SERSIC, /* Sersic profile. */ PROFILE_MOFFAT, /* Moffat Profile. */ PROFILE_GAUSSIAN, /* Gaussian Profile. */ PROFILE_POINT, /* Point profile. */ PROFILE_FLAT, /* Flat profile. */ PROFILE_CIRCUMFERENCE, /* Circumference profile. */ PROFILE_DISTANCE, /* Elliptical radius of pixel. */ PROFILE_MAXIMUM_CODE, /* Just for a sanity check. */ }; #define MINCIRCUMWIDTH 0.5f /* Log file: 0: ID. 1: Overlap magnitude. 2: Number of accurate pixels. 3: Fraction of accurate values. 4: Is individual file created? */ #define LOGNUMCOLS 5 #define LOGFILENAME PROGRAM_EXEC".log" struct builtqueue { size_t id; /* ID of this object. */ int ispsf; /* This is a PSF profile. */ int overlaps; /* ==1: Overlaps with the image. */ gal_data_t *image; /* Array of this profile's image. */ gal_data_t *overlap_i; /* Overlap tile over individual array. */ gal_data_t *overlap_m; /* Overlap tile over merged array. */ int func; /* Profile's radial function. */ int indivcreated; /* ==1: an individual file is created. */ size_t numaccu; /* Number of accurate pixels. */ double accufrac; /* Difference of accurate values. */ struct builtqueue *next; /* Pointer to next element. */ }; struct mkprofparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ char *backname; /* Name of background image file name. */ char *catname; /* Name of catalog of parameters. */ char *backhdu; /* HDU of background image. */ size_t *dsize; /* Size of the output image. */ uint8_t clearcanvas; /* Pixels in background image set to zero. */ gal_data_t *kernel; /* Parameters to define a kernel. */ uint8_t oversample; /* Oversampling scale. */ uint8_t psfinimg; /* ==1: Build PSF profiles in image. */ uint8_t individual; /* ==1: Build all catalog separately. */ uint8_t nomerged; /* ==1: Don't make a merged image of all. */ char *typestr; /* Type of finally merged output image. */ size_t numrandom; /* Number of radom points for integration. */ float tolerance; /* Accuracy to stop integration. */ uint8_t tunitinp; /* ==1: Truncation is in pixels, not radial.*/ size_t *shift; /* Shift along axeses position of profiles. */ uint8_t prepforconv; /* Shift and expand by size of first psf. */ float zeropoint; /* Magnitude of zero point flux. */ double circumwidth; /* Width of circumference (inward). */ uint8_t replace; /* Replace overlaping profile pixel values. */ uint8_t magatpeak; /* Mag only for peak pixel, not all profile.*/ uint8_t envseed; /* Use GSL_RNG_SEED for random seed. */ uint8_t mode; /* Coordinates in WCS or image standard. */ gal_list_str_t *ccol; /* Columns that keep coordinates. */ char *fcol; /* Column specifying profile function. */ char *rcol; /* Effective radius of profile. */ char *ncol; /* Sersic index column of profile. */ char *pcol; /* Position angle column of profile. */ char *qcol; /* Axis ratio column of profile. */ char *mcol; /* Magnitude column. */ char *tcol; /* Truncation of the profiles. */ uint8_t mforflatpix; /* mcol is flat pixel value (f is 4 or 5). */ uint8_t mcolisbrightness; /* mcol is total brightness not magnitude. */ gal_data_t *crpix; /* CRPIX FITS header keywords. */ gal_data_t *crval; /* CRVAL FITS header keywords. */ gal_data_t *cdelt; /* For CDELTi FITS header keywords. */ gal_data_t *pc; /* WCS PC matrix. */ gal_data_t *cunit; /* Units of each coordinate. */ gal_data_t *ctype; /* Type of the coordinates. */ /* Output */ gal_data_t *out; /* Output image. */ char *outdir; /* Output directory. */ char *basename; /* Merged image name with no directory. */ /* Processing parameters: */ size_t num; /* The number of profiles. */ double *x; /* X axis position of profile center. */ double *y; /* Y axis position of profile center. */ uint8_t *f; /* Profile function code. */ float *r; /* Radius of profile. */ float *n; /* Index of profile. */ float *p; /* Position angle of profile. */ float *q; /* Axis ratio of profile. */ float *m; /* Magnitude of profile. */ float *t; /* Truncation distance. */ gsl_rng *rng; /* Main instance of random number generator.*/ time_t rawtime; /* Starting time of the program. */ double *cat; /* Input catalog. */ gal_data_t *log; /* Log data to be printed. */ struct builtqueue *bq; /* Top (last) elem of build queue. */ pthread_cond_t qready; /* bq is ready to be written. */ pthread_mutex_t qlock; /* Mutex lock to change builtq. */ double halfpixel; /* Half pixel in oversampled image. */ char *wcsheader; /* The WCS header information for main img. */ int wcsnkeyrec; /* The number of keywords in the WCS header.*/ char *mergedimgname; /* Name of merged image. */ int nwcs; /* for WCSLIB: no. coord. representations. */ struct wcsprm *wcs; /* WCS information for this dataset. */ size_t ndim; /* Number of dimensions (for `nomerged'). */ /* We can't put it in `out' because it is */ /* meaning ful there. */ }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/profiles.c������������������������������������������������������������������0000644�0001750�0001750�00000010121�13134502440�014165� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <stdlib.h> #include <gsl/gsl_sf_gamma.h> /* For total Sersic brightness. */ #include "main.h" #include "mkprof.h" /* Needs main.h, astrthreads.h */ #include "profiles.h" /**************************************************************** ***************** Profiles: ******************** ****************************************************************/ /* The Gaussian function at a point. */ double profiles_radial_distance(struct mkonthread *mkp) { return mkp->r; } /* The integral of the Gaussian from -inf to +inf equals the square root of PI. So from zero to +inf it equals half of that.*/ double profiles_gaussian_total(double q) { return q*sqrt(M_PI)/2; } /* The Gaussian function at a point. */ double profiles_gaussian(struct mkonthread *mkp) { return exp( mkp->gaussian_c * mkp->r * mkp->r ); } /* This function will find the moffat function alpha value based on the explantions here: http://labs.adsabs.harvard.edu/adsabs/abs/2001MNRAS.328..977T/ alpha=(FWHM/2)/(2^(1.0/beta)-1)^(0.5). Then the moffat function at r is: (1.0 + (r/alpha)^2.0)^(-1.0*beta)*/ double profiles_moffat_alpha(double fwhm, double beta) { return (fwhm/2)/pow((pow(2, 1/beta)-1), 0.5f); } /* Find the total value of the Moffat profile. I am using equation 10 from Pengetal 2010 (Galfit). In finding the profiles, I am assuming \Sigma_0=1. So that is what I put here too.*/ double profiles_moffat_total(double alpha, double beta, double q) { return M_PI*alpha*alpha*q/(beta-1); } /* Find the Moffat profile for a certain radius. rda=r/alpha and nb=-1*b. This is done before hand to speed up the process. */ double profiles_moffat(struct mkonthread *mkp) { return pow(1+mkp->r*mkp->r/mkp->moffat_alphasq, mkp->moffat_nb); } /* This approximation of b(n) for n>0.35 is taken from McArthur, Courteau and Holtzman 2003: http://adsabs.harvard.edu/abs/2003ApJ...582..689 */ double profiles_sersic_b(double n) { if(n<=0.35f) error(EXIT_FAILURE, 0, "the Sersic index cannot be smaller " "than 0.35. It is %.3f", n); return 2*n-(1/3)+(4/(405*n))+(46/(25515*n*n))+ (131/(1148175*n*n*n)-(2194697/(30690717750*n*n*n*n))); } /* Find the total brightness in a Sersic profile. From equation 4 in Peng 2010. This assumes the surface brightness at the effective radius is 1.*/ double profiles_sersic_total(double n, double re, double b, double q) { return (2*M_PI*re*re*exp(b)*n*pow(b, -2*n)*q* gsl_sf_gamma(2*n)); } /* Find the Sersic profile for a certain radius. rdre=r/re, inv_n=1/n, nb= -1*b. */ double profiles_sersic(struct mkonthread *mkp) { return exp( mkp->sersic_nb * ( pow(mkp->r/mkp->sersic_re, mkp->sersic_inv_n) -1 ) ); } /* Make a circumference (inner to the radius). */ double profiles_circumference(struct mkonthread *mkp) { return mkp->r > mkp->intruncr ? mkp->fixedvalue : 0.0f; } /* Always returns a fixed value: */ double profiles_flat(struct mkonthread *mkp) { return mkp->fixedvalue; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/oneprofile.c����������������������������������������������������������������0000644�0001750�0001750�00000045250�13216276304�014527� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/******************************************************************** MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <sys/time.h> /* generate random seed */ #include <gsl/gsl_rng.h> /* used in setrandoms */ #include <gsl/gsl_randist.h> /* To make noise. */ #include <gsl/gsl_integration.h> /* gsl_integration_qng */ #include <gnuastro/fits.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "mkprof.h" /* Needs main.h and astrthreads.h */ #include "profiles.h" #include "oneprofile.h" /**************************************************************** ************** Radial distance ****************** ****************************************************************/ /* Set the center position of the profile in the oversampled image. Note that `mkp->width' is in the non-oversampled scale. IMPORTANT: the ordering is in FITS coordinate order. */ static void oneprofile_center_oversampled(struct mkonthread *mkp) { struct mkprofparams *p=mkp->p; double *dim; long os=p->oversample; size_t i, id=mkp->ibq->id; double val, pixfrac, intpart; for(i=0;i<p->ndim;++i) { dim = i==0 ? p->x : p->y; pixfrac = modf(fabs(dim[id]), &intpart); val = ( os*(mkp->width[i]/2 + pixfrac) + (pixfrac<0.5f ? os/2 : -1*os/2-1) ); mkp->center[i] = round(val*100)/100; } } static void oneprofile_set_coord(struct mkonthread *mkp, size_t index) { size_t i, coord_c[2]; uint8_t os=mkp->p->oversample; size_t ndim=mkp->ibq->image->ndim, *dsize=mkp->ibq->image->dsize; /* Get the coordinates in C order. */ gal_dimension_index_to_coord(index, ndim, dsize, coord_c); /* Convert these coordinates to one where the profile center is at the center and the image is not over-sampled. Note that only `coord_c' is in C order.*/ for(i=0;i<ndim;++i) mkp->coord[i] = ( coord_c[ndim-i-1] - mkp->center[i] )/os; } /* Convert cartesian coordinates to the rotated elliptical radius. See the "Defining an ellipse" section of the book for the full derivation. */ static void oneprofile_r_el(struct mkonthread *mkp) { double Xr, Yr; /* Rotated x and y. */ double q=mkp->q[0]; double c=mkp->c[0], s=mkp->s[0]; double x=mkp->coord[0], y=mkp->coord[1]; Xr = x * ( c ) + y * ( s ); Yr = x * ( -1.0f*s ) + y * ( c ); mkp->r = sqrt( Xr*Xr + Yr*Yr/q/q ); } /* Calculate the circular/spherical distance of a pixel to the profile center. This is just used to add pixels in the stack. Later, when the pixels are popped from the stack, the elliptical radius will be used to give them a value.*/ static float oneprofile_r_circle(size_t index, struct mkonthread *mkp) { size_t i, c[2]; double d, sum=0.0f; size_t ndim=mkp->ibq->image->ndim, *dsize=mkp->ibq->image->dsize; /* Convert the index into a coordinate. */ gal_dimension_index_to_coord(index, ndim, dsize, c); /* Find the distance to the center along each dimension (in FITS order). */ for(i=0;i<ndim;++i) { d = c[ndim-i-1] - mkp->center[i]; sum += d*d; } /* Return the distance. */ return sqrt(sum); } /**************************************************************** ************** Random points ****************** ****************************************************************/ /* Fill pixel with random values */ float oneprofile_randompoints(struct mkonthread *mkp) { double range[2], sum=0.0f; size_t i, j, numrandom=mkp->p->numrandom, ndim=mkp->p->ndim; /* Set the range in each dimension. */ for(i=0;i<ndim;++i) range[i] = mkp->higher[i] - mkp->lower[i]; /* Find the sum of the profile on the random positions. */ for(i=0;i<numrandom;++i) { for(j=0;j<ndim;++j) mkp->coord[j] = mkp->lower[j] + gsl_rng_uniform(mkp->rng) * range[j]; oneprofile_r_el(mkp); sum+=mkp->profile(mkp); } return sum/numrandom; } /**************************************************************** ***************** 2D integration ******************** ****************************************************************/ /* This is an old implementation which we are not using now. But it is kept here in case it can be useful */ #if 0 double twod_over_x(double x, void *params) { struct mkonthread *mkp=(struct mkonthread *) params; mkp->x=x; oneprofile_r_el(mkp); return mkp->profile(mkp); } /* Find the 2d integration over the region. */ double twod_over_xy(double y, void *params) { gsl_function F; static double abserr; static size_t neval=0; double epsabs=0, epsrel=EPSREL_FOR_INTEG, result; struct mkonthread *mkp=(struct mkonthread *) params; F.function = &twod_over_x; F.params = params; mkp->y=y; gsl_integration_qng(&F, mkp->xl, mkp->xh, epsabs, epsrel, &result, &abserr, &neval); return result; } /* 2D integration of a profile.*/ double integ2d(struct mkonthread *mkp) { gsl_function F; static double abserr; static size_t neval=0; double epsabs=0, epsrel=EPSREL_FOR_INTEG, result; F.function = &twod_over_xy; F.params = mkp; gsl_integration_qng(&F, mkp->yl, mkp->yh, epsabs, epsrel, &result, &abserr, &neval); return result; } #endif /**************************************************************/ /************ Pixel by pixel building *************/ /********* Positions are in C not FITS *********/ /**************************************************************/ /* `oneprofile_center_oversampled' stored the center of the profile in floating point coordinates. This function will convert that into a pixel index. */ static size_t oneprofile_center_pix_index(struct mkonthread *mkp) { double pixfrac, intpart; size_t *dsize=mkp->ibq->image->dsize; size_t i, coord[2], ndim=mkp->p->ndim; /* Find the coordinates of the center point. Note `mkp->center' is in FITS coordinates, while coord must be in C coordinates (to be used in `gal_dimension_coord_to_index'). */ for(i=0;i<ndim;++i) { pixfrac = modf(mkp->center[i], &intpart); coord[ndim-i-1] = (long)(mkp->center[i]) + ( pixfrac<0.5f ? 0 : 1 ); } /* Retun the pixel index of this coordinate. */ return gal_dimension_coord_to_index(ndim, dsize, coord); } static void oneprofile_pix_by_pix(struct mkonthread *mkp) { struct builtqueue *ibq=mkp->ibq; size_t ndim=ibq->image->ndim, *dsize=ibq->image->dsize; uint8_t *byt; gal_list_sizet_t *Q=NULL; int use_rand_points=1, ispeak=1; double tolerance=mkp->p->tolerance; float circ_r, *array=mkp->ibq->image->array; double (*profile)(struct mkonthread *)=mkp->profile; double truncr=mkp->truncr, approx, hp=0.5f/mkp->p->oversample; size_t i, p, *dinc=gal_dimension_increment(ndim, dsize); /* lQ: Largest. sQ: Smallest in queue */ gal_list_dosizet_t *lQ=NULL, *sQ; /* Find the nearest pixel to the profile center and add it to the queue. */ p=oneprofile_center_pix_index(mkp); /* If this is a point source, just fill that one pixel and leave this function. */ if(mkp->func==PROFILE_POINT) { array[p]=1; return; } /* Allocate the `byt' array. It is used as a flag to make sure that we don't re-calculate the profile value on a pixel more than once. */ byt = gal_data_calloc_array(GAL_TYPE_UINT8, gal_dimension_total_size(ndim, dsize), __func__, "byt"); /* Start the queue: */ byt[p]=1; gal_list_dosizet_add( &lQ, &sQ, p, oneprofile_r_circle(p, mkp) ); /* If random points are necessary, then do it: */ switch(mkp->func) { case PROFILE_SERSIC: case PROFILE_MOFFAT: case PROFILE_GAUSSIAN: while(sQ) { /* In case you want to see the status of the twosided ordered queue, increasing and decreasing side by side, uncomment this line. Note that there will be a lot of lines printed! */ /*print_tossll(lQ, sQ);*/ /* Pop a pixel from the queue, convert its index into coordinates and use them to estimate the elliptical radius of the pixel. If the pixel is outside the truncation radius, ignore it. */ p=gal_list_dosizet_pop_smallest(&lQ, &sQ, &circ_r); oneprofile_set_coord(mkp, p); oneprofile_r_el(mkp); if(mkp->r > truncr) continue; /* Find the value for this pixel: */ for(i=0;i<ndim;++i) { mkp->lower[i] = mkp->coord[i] - hp; mkp->higher[i] = mkp->coord[i] + hp; } /* Find the random points and profile center. */ array[p]=oneprofile_randompoints(mkp); approx=profile(mkp); if (fabs(array[p]-approx)/array[p] < tolerance) use_rand_points=0; /* Save the peak flux if this is the first pixel: */ if(ispeak) { mkp->peakflux=array[p]; ispeak=0; } /* For the log file: */ ++ibq->numaccu; ibq->accufrac+=array[p]; /* Go over the neighbors and add them to queue of elements to check if they haven't been done already. */ GAL_DIMENSION_NEIGHBOR_OP(p, ndim, dsize, 1, dinc, { if(byt[nind]==0) { byt[nind]=1; gal_list_dosizet_add( &lQ, &sQ, nind, oneprofile_r_circle(nind, mkp) ); } } ); if(use_rand_points==0) break; } } /* All the pixels that required integration or random points are now done, so we don't need an ordered array any more. */ gal_list_dosizet_to_sizet(lQ, &Q); /* Order doesn't matter any more, add all the pixels you find. */ while(Q) { p=gal_list_sizet_pop(&Q); oneprofile_set_coord(mkp, p); oneprofile_r_el(mkp); /* See if this pixel's radial distance is larger than the truncation radius. If so, then don't add its neighbors to the queue and continue to the next pixel in the queue. */ if(mkp->r>truncr) { /* For the circumference, if the profile is too elongated and circumwidth is too small, then some parts of the circumference will not be shown without this condition. */ if(mkp->func==PROFILE_CIRCUMFERENCE) array[p]=profile(mkp); continue; } /* Find the value for this pixel: */ array[p]=profile(mkp); /* Save the peak flux if this is the first pixel: */ if(ispeak) { mkp->peakflux=array[p]; ispeak=0; } /* Go over the neighbours and add them to queue of elements to check. */ GAL_DIMENSION_NEIGHBOR_OP(p, ndim, dsize, 1, dinc, { if(byt[nind]==0) { byt[nind]=1; gal_list_sizet_add(&Q, nind); } } ); } /* Clean up. */ free(byt); free(dinc); } /**************************************************************/ /************ Set profile parameters *************/ /**************************************************************/ int oneprofile_ispsf(uint8_t fcode) { return fcode==PROFILE_MOFFAT || fcode==PROFILE_GAUSSIAN; } /* Prepare all the parameters for any type of profile. */ void oneprof_set_prof_params(struct mkonthread *mkp) { struct mkprofparams *p=mkp->p; double sigma; int tp=p->tunitinp; size_t id=mkp->ibq->id; /* Fill the most basic profile agnostic parameters. */ mkp->brightness = ( p->mcolisbrightness ? p->m[id] : pow( 10, (p->zeropoint - p->m[id]) / 2.5f ) ); mkp->ibq->ispsf = p->kernel ? 1 : oneprofile_ispsf(p->f[id]); mkp->func = mkp->ibq->func = p->f[id]; /* Shifts were already multiplied with oversample. Just note that p->x and p->y are in the FITS ordering, while p->shift is in C ordering. */ mkp->q[0] = p->q[id]; p->x[id] += p->shift[1]/p->oversample; p->y[id] += p->shift[0]/p->oversample; mkp->c[0] = cos( p->p[id] * DEGREESTORADIANS ); mkp->s[0] = sin( p->p[id] * DEGREESTORADIANS ); /* Fill the profile-dependent parameters. */ switch (mkp->func) { case PROFILE_SERSIC: mkp->correction = 1; mkp->profile = &profiles_sersic; mkp->sersic_re = p->r[id]; mkp->sersic_inv_n = 1.0f/p->n[id]; mkp->sersic_nb = -1.0f*profiles_sersic_b(p->n[id]); mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]; break; case PROFILE_MOFFAT: mkp->correction = 1; mkp->profile = &profiles_moffat; mkp->moffat_nb = -1.0f*p->n[id]; mkp->moffat_alphasq = profiles_moffat_alpha(p->r[id], p->n[id]); mkp->moffat_alphasq *= mkp->moffat_alphasq; mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]/2; if(p->psfinimg==0 && p->individual==0) { mkp->brightness = 1.0f; /* When the PSF is a separate image, */ p->x[id] = 0.0f; /* it should be centered and have a */ p->y[id] = 0.0f; /* total brightness of 1.0f. */ } break; case PROFILE_GAUSSIAN: mkp->correction = 1; mkp->profile = &profiles_gaussian; sigma = p->r[id]/2.35482f; mkp->gaussian_c = -1.0f/(2.0f*sigma*sigma); mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]/2; if(p->psfinimg==0 && p->individual==0) { mkp->brightness = 1.0f; /* Same as the explanations for */ p->x[id] = 0.0f; /* The Moffat profile. */ p->y[id] = 0.0f; } break; case PROFILE_POINT: mkp->correction = 1; mkp->fixedvalue = 1.0f; mkp->profile = &profiles_flat; break; case PROFILE_FLAT: mkp->profile = &profiles_flat; mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]; if(p->mforflatpix) { mkp->correction = 0; mkp->fixedvalue = p->m[id]; } else { mkp->correction = 1; mkp->fixedvalue = 1.0f; } break; case PROFILE_CIRCUMFERENCE: mkp->profile = &profiles_circumference; mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]; mkp->intruncr = mkp->truncr - p->circumwidth; if(p->mforflatpix) { mkp->correction = 0; mkp->fixedvalue = p->m[id]; } else { mkp->correction = 1; mkp->fixedvalue = 1.0f; } if(mkp->intruncr<0.0f) mkp->intruncr = 0.0f; break; case PROFILE_DISTANCE: mkp->profile = profiles_radial_distance; mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]; mkp->correction = 0; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us so we can correct " "this problem. The profile code %u is not recognized.", __func__, mkp->func); } } /**************************************************************/ /************ Outside functions *************/ /**************************************************************/ void oneprofile_make(struct mkonthread *mkp) { struct mkprofparams *p=mkp->p; double sum; float *f, *ff; size_t i, dsize[3], ndim=p->ndim; /* Find the profile center in the over-sampled image in C coordinates. IMPORTANT: width must not be oversampled.*/ oneprofile_center_oversampled(mkp); /* From this point on, the widths will be in the actual pixel widths (with oversampling). */ for(i=0;i<ndim;++i) { mkp->width[i] *= p->oversample; dsize[ndim-i-1] = mkp->width[i]; } /* Allocate and clear the array for this one profile. */ mkp->ibq->image=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, ndim, dsize, NULL, 1, p->cp.minmapsize, "MOCK", "Brightness", NULL); /* Build the profile in the image. */ oneprofile_pix_by_pix(mkp); /* Correct the sum of pixels in the profile so it has the fixed total magnitude or pixel value, mkp->correction was set in setprofparams. Note that the profiles were not normalized during the building.*/ if(mkp->correction) { /* First get the sum of all the pixels in the profile. */ ff=(f=mkp->ibq->image->array) + mkp->ibq->image->size; sum=0.0f; do sum+=*f++; while(f<ff); /* Correct the fraction of brightness that was calculated accurately (not using the pixel center). */ mkp->ibq->accufrac /= sum; /* Correct all the profile pixels. Note that ideally, if a user wants a NaN valued profile, they should use the `flat' profile with `--mforflatpix', which won't need this correction. However, it might happen that they forget the later, or the catalog might be generated by a script that gives a NaN value for the magnitude with any kind of profile. In such cases if we don't check the NaN value, then the whole profile's box is going to be NaN values, which is inconvenient and with the simple check here we can avoid it (only have the profile's pixels set to NaN. */ ff = (f=mkp->ibq->image->array) + mkp->ibq->image->size; if(isnan(mkp->brightness)) do *f = *f ? NAN : *f ; while(++f<ff); else { if(p->magatpeak) do *f++ *= mkp->brightness/mkp->peakflux; while(f<ff); else do *f++ *= mkp->brightness/sum; while(f<ff); } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/mkprof.c��������������������������������������������������������������������0000644�0001750�0001750�00000050624�13216276304�013664� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/******************************************************************** MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <float.h> #include <string.h> #include <stdlib.h> #include <gnuastro/box.h> #include <gnuastro/git.h> #include <gnuastro/fits.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "mkprof.h" /* Needs main.h astrthreads.h */ #include "oneprofile.h" /**************************************************************/ /************ builtqueue linked list *************/ /**************************************************************/ /* Add an empty element to the existing builtqueue. */ void builtqueue_addempty(struct builtqueue **bq) { struct builtqueue *tbq; /* Allocate the element. */ errno=0; tbq=malloc(sizeof *tbq); if(tbq==NULL) error(EXIT_FAILURE, 0, "%s: allocating %zu bytes for `tbq'", __func__, sizeof *tbq); /* Initialize the values (same order as in structure definition). */ tbq->id = GAL_BLANK_SIZE_T; tbq->ispsf = 0; tbq->overlaps = 0; tbq->image = NULL; tbq->overlap_i = NULL; tbq->overlap_m = NULL; tbq->func = PROFILE_MAXIMUM_CODE; tbq->indivcreated = 0; tbq->numaccu = 0; tbq->accufrac = 0.0f; /* Set its next element to the input bq and re-set the input bq. */ tbq->next=*bq; *bq=tbq; } /**************************************************************/ /************ Save individual *************/ /**************************************************************/ #define NUMBERNAMESTRLEN 100 void saveindividual(struct mkonthread *mkp) { struct mkprofparams *p=mkp->p; double *crpix; long os=p->oversample; size_t i, ndim=p->ndim; struct builtqueue *ibq=mkp->ibq; char *filename, *jobname, *outdir=p->outdir; /* Write the name and remove a similarly named file when the `--kernel' option wasn't called. If `--kernel' is called, then we should just use the final merged filename. */ if(p->kernel) filename=p->mergedimgname; else { asprintf(&filename, "%s%zu_%s", outdir, ibq->id, p->basename); gal_checkset_writable_remove(filename, 0, p->cp.dontdelete); } /* Write the array to file (a separately built PSF doesn't need WCS coordinates). */ if(ibq->ispsf && p->psfinimg==0) gal_fits_img_write(ibq->image, filename, NULL, PROGRAM_NAME); else { /* Allocate space for the corrected crpix and fill it in. Both `crpix' and `fpixel_i' are in FITS order. */ crpix=gal_data_malloc_array(GAL_TYPE_FLOAT64, ndim, __func__, "crpix"); for(i=0;i<ndim;++i) crpix[i] = ((double *)(p->crpix->array))[i] - os*(mkp->fpixel_i[i]-1); /* Write the image. */ gal_fits_img_write_corr_wcs_str(ibq->image, filename, p->wcsheader, p->wcsnkeyrec, crpix, NULL, PROGRAM_NAME); } ibq->indivcreated=1; /* Report if in verbose mode. */ if(!p->cp.quiet) { asprintf(&jobname, "%s created.", filename); gal_timing_report(NULL, jobname, 2); free(jobname); } /* Clean up. */ if(p->kernel==NULL) free(filename); } /**************************************************************/ /************ The builders *************/ /**************************************************************/ /* High-level function to built a single profile and prepare it for the next steps. */ static void mkprof_build_single(struct mkonthread *mkp, long *fpixel_i, long *lpixel_i, long *fpixel_o) { struct mkprofparams *p = mkp->p; struct builtqueue *ibq = mkp->ibq; void *ptr; int needs_crop=0; size_t i, ind, fits_i, ndim=p->ndim; size_t start_indiv[2], start_mrg[2], dsize[2], os=p->oversample; /* Make a copy of the main random number generator to use for this profile (in this thread). */ gsl_rng_memcpy(mkp->rng, p->rng); /* Set the seed of the random number generator if the environment is not to be used. */ if(mkp->p->envseed==0) gsl_rng_set(mkp->rng, gal_timing_time_based_rng_seed()); /* Make the profile */ oneprofile_make(mkp); /* Build an individual image if necessary. */ if( p->individual || (ibq->ispsf && p->psfinimg==0)) { saveindividual(mkp); if(ibq->ispsf && p->psfinimg==0) ibq->overlaps=0; } /* If we want a merged image, then a tile needs to be defined over the individual profile array and the output merged array to define the overlapping region. */ if(p->out) { /* Note that `fpixel_o' and `lpixel_o' were in the un-oversampled image, they are also in the FITS coordinates. */ for(i=0;i<ndim;++i) { /* Set the start and width of the overlap. */ fits_i = ndim-i-1; start_indiv[i] = os * (fpixel_o[fits_i] - 1); start_mrg[i] = os * (fpixel_i[fits_i] - 1); dsize[i] = os * (lpixel_i[fits_i] - fpixel_i[fits_i] + 1); /* Check if we need to crop the individual image or not. */ if(dsize[i] != ibq->image->dsize[i]) needs_crop=1; } /* Define the individual overlap tile. */ if(needs_crop) { /* If a crop is needed, set the starting pointer. */ ind=gal_dimension_coord_to_index(ndim, ibq->image->dsize, start_indiv); ptr=gal_data_ptr_increment(ibq->image->array, ind, ibq->image->type); } else ptr=ibq->image->array; ibq->overlap_i=gal_data_alloc(ptr, ibq->image->type, ndim, dsize, NULL, 0, -1, NULL, NULL, NULL); ibq->overlap_i->block=ibq->image; /* Define the merged overlap tile. */ ind=gal_dimension_coord_to_index(ndim, p->out->dsize, start_mrg); ptr=gal_data_ptr_increment(p->out->array, ind, p->out->type); ibq->overlap_m=gal_data_alloc(ptr, p->out->type, ndim, dsize, NULL, 0, -1, NULL, NULL, NULL); ibq->overlap_m->block=p->out; } } /* The profile has been built, now add it to the queue of profiles that must be written into the final merged image. */ static void mkprof_add_built_to_write_queue(struct mkonthread *mkp, struct builtqueue *ibq, struct builtqueue **fbq, size_t counter) { struct mkprofparams *p = mkp->p; int lockresult; pthread_mutex_t *qlock=&p->qlock; pthread_cond_t *qready=&p->qready; /* Try locking the mutex so no thread can change the value of p->bq. If you can lock it, then put the internal builtqueue on top of the general builtqueue. If you can't, continue adding to the internal builtqueue (make the next profiles) until you find a chance to lock the mutex. */ lockresult=pthread_mutex_trylock(qlock); if(lockresult==0) /* Mutex was successfully locked. */ { /* Add this internal queue to system queue. */ (*fbq)->next=p->bq; p->bq=ibq; /* If the list was empty when you locked the mutex, then either `mkprof_write` is waiting behind a condition variable for you to fill it up or not (either it hasn't got to setting the condition variable yet (this function locked the mutex before `mkprof_write`) or it just got the list to be made and is busy writing the arrays in the output). In either case, pthread_cond_signal will work. */ if((*fbq)->next==NULL) pthread_cond_signal(qready); pthread_mutex_unlock(qlock); /* Finally set both the internal queue and the first internal queue element to NULL.*/ (*fbq)=NULL; mkp->ibq=NULL; } /* The mutex couldn't be locked and there are no more objects for this thread to build (giving a chance for this thread to add up its built profiles). So we have to lock the mutex to pass on this built structure to the builtqueue. */ else if (mkp->indexs[counter+1]==GAL_BLANK_SIZE_T) { pthread_mutex_lock(qlock); (*fbq)->next=p->bq; p->bq=ibq; pthread_cond_signal(qready); pthread_mutex_unlock(qlock); } } /* Build the profiles that are indexed in the indexs array of the mkonthread structure that was assigned to it. See the explanation above overlap (/lib/box.c) for a complete explanation of fpixel_i, lpixel_i, fpixel_o and lpixel_o. ========================================================= About the Central x and y of each profile: The user has asked for the profile to be built on the coordinates (real numbers) of `x` and `y` in an output image in the FITS format. We are building the full image for each galaxy separately in an array with an odd number of sides which maybe oversampled. In the FITS format, the pixel centers have an integer value. So for example in 1D, a pixel whose center value is 10.00 covers the area of: [9.5,10.5). We want the fractional part of `x` (don't forget, this example is 1D) to be in the central pixel of this separate array (with odd sides) that we will be building. The result of this convention is that in 1D, a continuous space pixel with a fractional value of 0.1 is going to be after the central pixel's center, while one with a fractional value of 0.9 will be before it. In this manner, later on, when we want to find the overlap between this array and the output array, if we have a fractional value >=0.5, we will just shift the integer part of the central pixel by one and completely ignore the fractional part. */ static void * mkprof_build(void *inparam) { struct mkonthread *mkp=(struct mkonthread *)inparam; struct mkprofparams *p=mkp->p; double center[2]; size_t i, id, ndim=p->ndim; struct builtqueue *ibq, *fbq=NULL; long fpixel_i[2], lpixel_i[2], fpixel_o[2], lpixel_o[2]; /* Make each profile that was specified for this thread. */ for(i=0; mkp->indexs[i]!=GAL_BLANK_SIZE_T; ++i) { /* Create a new builtqueue element with all the information. fbq will be used when we want to add ibq to p->bq. It is defined so we don't have to waste time traversing the ibq. Its characteristic compared to the other elements of ibq is that fbq->next==NULL. So to add ibq to p->bq, we just have to set fbq->next=p->bq and then set p->bq to ibq.*/ builtqueue_addempty(&mkp->ibq); ibq=mkp->ibq; id=ibq->id=mkp->indexs[i]; if(fbq==NULL) fbq=ibq; /* Write the necessary parameters for this profile into mkp.*/ oneprof_set_prof_params(mkp); /* Find the bounding box size (NOT oversampled). */ if( p->f[id] == PROFILE_POINT ) mkp->width[0]=mkp->width[1]=1; else gal_box_bound_ellipse(mkp->truncr, mkp->q[0]*mkp->truncr, p->p[id], mkp->width); /* Get the overlapping pixels using the starting points (NOT oversampled). */ if(p->out) { center[0]=p->x[id]; center[1]=p->y[id]; gal_box_border_from_center(center, ndim, mkp->width, fpixel_i, lpixel_i); memcpy(mkp->fpixel_i, fpixel_i, ndim*sizeof *fpixel_i); ibq->overlaps = gal_box_overlap(mkp->onaxes, fpixel_i, lpixel_i, fpixel_o, lpixel_o, ndim); } /* Build the profile if necessary. */ if(ibq->overlaps || p->individual || (ibq->ispsf && p->psfinimg==0)) mkprof_build_single(mkp, fpixel_i, lpixel_i, fpixel_o); /* Add this profile to the list of profiles that must be written onto the final merged image with another thread. */ if(p->cp.numthreads>1) mkprof_add_built_to_write_queue(mkp, ibq, &fbq, i); } /* Free the allocated space for this thread and wait until all other threads finish. */ gsl_rng_free(mkp->rng); if(p->cp.numthreads==1) p->bq=mkp->ibq; else pthread_barrier_wait(mkp->b); return NULL; } /**************************************************************/ /************ The writer *************/ /**************************************************************/ static void mkprof_write(struct mkprofparams *p) { double sum; char *jobname; struct timeval t1; gal_data_t *out=p->out, *log; struct builtqueue *ibq=NULL, *tbq; size_t complete=0, num=p->num, clog; /* Write each image into the output array. */ while(complete<p->num) { /* Set ibq. */ if(ibq==NULL) { if(p->cp.numthreads==1) ibq=p->bq; else { pthread_mutex_lock(&p->qlock); while(p->bq==NULL) pthread_cond_wait(&p->qready, &p->qlock); ibq=p->bq; p->bq=NULL; pthread_mutex_unlock(&p->qlock); } } sum=0.0f; /* During the build process, we also defined the overlap tiles of both the individual array and the final merged array, here we will use those to put the required profile pixels into the final array. */ if(ibq->overlaps && out) GAL_TILE_PO_OISET(float,float,ibq->overlap_i,ibq->overlap_m,1,0, { *o = p->replace ? ( *i==0.0f ? *o : *i ) : (*i + *o); sum += *i; }); /* Fill the log array. */ if(p->cp.log) { clog=0; for(log=p->log; log!=NULL; log=log->next) switch(++clog) { case 5: ((unsigned char *)(log->array))[ibq->id] = ibq->indivcreated; break; case 4: ((float *)(log->array))[ibq->id] = ibq->accufrac; break; case 3: ((unsigned long *)(log->array))[ibq->id]=ibq->numaccu; break; case 2: ((float *)(log->array))[ibq->id] = sum>0.0f ? -2.5f*log10(sum)+p->zeropoint : NAN; break; case 1: ((unsigned long *)(log->array))[ibq->id]=ibq->id+1; break; } } /* Report if in verbose mode. */ ++complete; if(!p->cp.quiet && p->num>1) { asprintf(&jobname, "row %zu complete, %zu left to go", ibq->id+1, num-complete); gal_timing_report(NULL, jobname, 2); free(jobname); } /* Free the array and the queue element and change it to the next one and increment complete. Note that there is no problem to free a NULL pointer (when the built array didn't overlap). */ gal_data_free(ibq->overlap_i); gal_data_free(ibq->overlap_m); gal_data_free(ibq->image); tbq=ibq->next; free(ibq); ibq=tbq; } /* Write the final array to the output FITS image if a merged image is to be created. */ if(out) { /* Get the current time for verbose output. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); /* Write the final image into a FITS file with the requested type. Until now, we were using `p->wcs' for the WCS, but from now on, will put it in `out' to also free it while freeing `out'. */ out->wcs=p->wcs; gal_fits_img_write_to_type(out, p->mergedimgname, NULL, PROGRAM_NAME, p->cp.type); p->wcs=NULL; /* Clean up */ gal_data_free(out); /* In verbose mode, print the information. */ if(!p->cp.quiet) { asprintf(&jobname, "%s created.", p->mergedimgname); gal_timing_report(&t1, jobname, 1); free(jobname); } } } /**************************************************************/ /************ Outside function *************/ /**************************************************************/ void mkprof(struct mkprofparams *p) { int err; char *tmp; pthread_t t; /* Thread id not used, all are saved here. */ pthread_attr_t attr; pthread_barrier_t b; struct mkonthread *mkp; gal_list_str_t *comments=NULL; size_t i, fi, *indexs, thrdcols; long *onaxes=NULL, os=p->oversample; size_t nb, ndim=p->ndim, nt=p->cp.numthreads; /* Allocate the arrays to keep the thread and parameters for each thread. Note that we only want nt-1 threads to do the building. */ errno=0; mkp=malloc(nt*sizeof *mkp); if(mkp==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `mkp'", __func__, (nt-1)*sizeof *mkp); /* Distribute the different profiles for different threads. Note that one thread is left out for writing, while nt-1 are left for building. */ gal_threads_dist_in_threads(p->num, nt, &indexs, &thrdcols); /* `onaxes' are size of the merged output image without over-sampling or shifting in FITS order. When no output merged image is needed, we can ignore it. */ if(p->out) { onaxes=gal_data_malloc_array(GAL_TYPE_LONG, ndim, __func__, "onaxes"); for(fi=0; fi < ndim; ++fi) { i=ndim-fi-1; onaxes[fi] = ( ( p->dsize[i] - 2 * p->shift[i] ) / os + 2 * p->shift[i]/os ); } } /* Build the profiles: */ if(nt==1) { mkp[0].p=p; mkp[0].onaxes=onaxes; mkp[0].indexs=indexs; mkp[0].rng=gsl_rng_clone(p->rng); mkprof_build(&mkp[0]); } else { /* Initialize the attributes. Note that this main thread will also have to be kept behind the barrier, so we need nt+1 barrier stops. */ if(p->num<nt) nb=p->num+1; else nb=nt+1; gal_threads_attr_barrier_init(&attr, &b, nb); /* Initialize the condition variable and mutex. */ err=pthread_mutex_init(&p->qlock, NULL); if(err) error(EXIT_FAILURE, 0, "%s: mutex not initialized", __func__); err=pthread_cond_init(&p->qready, NULL); if(err) error(EXIT_FAILURE, 0, "%s: condition variable not initialized", __func__); /* Spin off the threads: */ for(i=0;i<nt;++i) if(indexs[i*thrdcols]!=GAL_BLANK_SIZE_T) { mkp[i].p=p; mkp[i].b=&b; mkp[i].ibq=NULL; mkp[i].onaxes=onaxes; mkp[i].rng=gsl_rng_clone(p->rng); mkp[i].indexs=&indexs[i*thrdcols]; err=pthread_create(&t, &attr, mkprof_build, &mkp[i]); if(err) error(EXIT_FAILURE, 0, "%s: can't create thread %zu", __func__, i); } } /* Write the created arrays into the image. */ mkprof_write(p); /* Write the log file. */ if(p->cp.log) { asprintf(&tmp, "Zeropoint: %g", p->zeropoint); gal_list_str_add(&comments, tmp, 0); gal_checkset_writable_remove(LOGFILENAME, 0, p->cp.dontdelete); gal_table_write_log(p->log, PROGRAM_STRING, &p->rawtime, comments, LOGFILENAME, p->cp.quiet); gal_list_str_free(comments, 1); } /* If numthreads>1, then wait for all the jobs to finish and destroy the attribute and barrier. */ if(nt>1) { pthread_barrier_wait(&b); pthread_attr_destroy(&attr); pthread_barrier_destroy(&b); pthread_cond_destroy(&p->qready); pthread_mutex_destroy(&p->qlock); } /* Clean up. */ free(mkp); free(indexs); if(onaxes) free(onaxes); } ������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/ui.c������������������������������������������������������������������������0000644�0001750�0001750�00000137656�13216276304�013016� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <gnuastro/wcs.h> #include <gnuastro/box.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/table.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "oneprofile.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "[Options] [Catalog]"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will create a FITS image " "containing any number of mock astronomical profiles based on an input " "catalog. All the profiles will be built from the center outwards. First " "by Monte Carlo integration, then using the central pixel position. The " "tolerance level specifies when the switch will occur.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static uint8_t ui_profile_name_read(char *string, size_t row) { if( !strcmp("sersic", string) ) return PROFILE_SERSIC; else if ( !strcmp("moffat", string) ) return PROFILE_MOFFAT; else if ( !strcmp("gaussian", string) ) return PROFILE_GAUSSIAN; else if ( !strcmp("point", string) ) return PROFILE_POINT; else if ( !strcmp("flat", string) ) return PROFILE_FLAT; else if ( !strcmp("circum", string) ) return PROFILE_CIRCUMFERENCE; else if ( !strcmp("distance", string) ) return PROFILE_DISTANCE; else if ( !strcmp(GAL_BLANK_STRING, string) ) error(EXIT_FAILURE, 0, "atleast one profile function is blank"); else { if(row) error(EXIT_FAILURE, 0, "`%s' not recognized as a profile function " "name in row %zu", string, row); else error(EXIT_FAILURE, 0, "`%s' not recognized as a profile function " "name in values to `--kernel' option", string); } return PROFILE_INVALID; } static char * ui_profile_name_write(int profile_code) { switch(profile_code) { case PROFILE_SERSIC: return "sersic"; case PROFILE_MOFFAT: return "moffat"; case PROFILE_GAUSSIAN: return "gaussian"; case PROFILE_POINT: return "point"; case PROFILE_FLAT: return "flat"; case PROFILE_CIRCUMFERENCE: return "circum"; case PROFILE_DISTANCE: return "distance"; default: error(EXIT_FAILURE, 0, "%s: %d not recognized as a profile code", __func__, profile_code); } return NULL; } static void ui_initialize_options(struct mkprofparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Default program parameters. */ p->zeropoint = NAN; p->cp.type = GAL_TYPE_FLOAT32; /* Modify the common options for this program. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].doc="Input catalog HDU name or number (if FITS)."; break; case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct mkprofparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: if(p->catname) argp_error(state, "only one argument (input catalog) may be given"); else p->catname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /* Parse the kernel properties, the format is like this: PROFILE_NAME,PARAM_1,PARAM_2,PARAM_3,...,PARAM_N */ void * ui_parse_kernel(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { long profcode; double *darray; gal_data_t *kernel; size_t i, nc, need=0; char *c, *profile, *tailptr; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Set the value pointer to kernel. */ kernel=*(gal_data_t **)(option->value); darray = kernel->array; /* First write the profile function code into the output string. */ nc=0; profile=ui_profile_name_write(kernel->status); nc += sprintf(sstr+nc, "%s,", profile); /* Write the values into a string. */ for(i=0;i<kernel->size;++i) { if( nc > GAL_OPTIONS_STATIC_MEM_FOR_VALUES-100 ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s so we " "can address the problem. The number of necessary " "characters in the statically allocated string has become " "too close to %d", __func__, PACKAGE_BUGREPORT, GAL_OPTIONS_STATIC_MEM_FOR_VALUES); nc += sprintf(sstr+nc, "%g,", darray[i]); } sstr[nc-1]='\0'; /* Copy the string into a dynamically allocated space, because it will be freed later.*/ gal_checkset_allocate_copy(sstr, &str); return str; } else { /* The first part of `arg' (before the first comma) is not necessarily a number. So we need to separate the first part from the rest.*/ c=arg;while(*c!='\0' && *c!=',') ++c; profile=arg; arg = (*c=='\0') ? NULL : c+1; /* the `point' profile doesn't need */ *c='\0'; /* any numbers. */ /* Read the parameters. */ kernel=gal_options_parse_list_of_numbers(arg, filename, lineno); *(gal_data_t **)(option->value) = kernel; /* All parameters must be positive. */ darray=kernel->array; for(i=0;i<kernel->size;++i) if(darray[i]<=0) error(EXIT_FAILURE, 0, "value number %zu (%g) in the given list " "of kernel parameters (`%s') is not acceptable. All " "parameters to the `--kernel' option must be non-zero and " "positive", i+1, darray[i], arg); /* Write the profile type code into `kernel->status'. If it starts with a digit, then the user might have given the code of the profile directly. In that case, parse the number. Otherwise, let `ui_profile_name_read' find the value. */ if( isdigit(*profile) ) { profcode=strtol(profile, &tailptr, 0); if(*tailptr!='\0') error_at_line(EXIT_FAILURE, 0, filename, lineno, "`%s' " "couldn't be read as a profile code", profile); if(profcode<=0 || profcode>=PROFILE_MAXIMUM_CODE) error_at_line(EXIT_FAILURE, 0, filename, lineno, "`%s' " "isn't a valid profile code. Please run with " "`--help' and see the acceptable codes in " "explanation of the `--fcol' option", profile); kernel->status=profcode; } else kernel->status=ui_profile_name_read(profile, 0); /* Make sure the number of parameters conforms with the profile. */ switch(kernel->status) { case PROFILE_SERSIC: need = 3; break; case PROFILE_MOFFAT: need = 3; break; case PROFILE_GAUSSIAN: need = 2; break; case PROFILE_POINT: need = 0; break; case PROFILE_FLAT: need = 1; break; case PROFILE_CIRCUMFERENCE: need = 1; break; case PROFILE_DISTANCE: need = 1; break; default: error_at_line(EXIT_FAILURE, 0, filename, lineno, "%s: a bug! " "Please contact us at %s to correct the issue. " "Profile code %d is not recognized", __func__, PACKAGE_BUGREPORT, kernel->status); } /* Make sure the number of parameters given are the same number that are needed. */ if( kernel->size != need ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "as a kernel, " "a `%s' profile needs %zu parameters, but %zu " "parameter%s given to `--kernel'", ui_profile_name_write(kernel->status), need, kernel->size, kernel->size>1?"s are":" is"); /* Our job is done, return NULL. */ return NULL; } } /* Parse the mode to interpret the given coordinates. */ void * ui_parse_coordinate_mode(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *outstr; /* We want to print the stored values. */ if(lineno==-1) { gal_checkset_allocate_copy( *(uint8_t *)(option->value)==MKPROF_MODE_IMG ? "img" : "wcs", &outstr ); return outstr; } else { if(!strcmp(arg, "img")) *(uint8_t *)(option->value)=MKPROF_MODE_IMG; else if (!strcmp(arg, "wcs")) *(uint8_t *)(option->value)=MKPROF_MODE_WCS; else error_at_line(EXIT_FAILURE, 0, filename, lineno, "`%s' (value to " "`--mode') not recognized as a coordinate standard " "mode. Recognized values are `img' and `wcs'. This " "option is necessary to identify the nature of your " "input coordinates", arg); return NULL; } } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct mkprofparams *p) { size_t i; /* When a no-merged image is to be created, type is necessary. */ if( p->cp.type==GAL_TYPE_INVALID && p->nomerged==0) error(EXIT_FAILURE, 0, "an output type `--type' is necessary when a " "merged image is to be built."); /* Check if one of the coordinate columns has been given, the other is also given. To simplify the job, we use the fact that conditions in C return either a 0 (when failed) and 1 (when successful). Note that if neighter coordinates are specified there is no problem, the user might have input the other coordinate standard. We'll also check for that after this.*/ if(p->kernel==NULL) { if(p->mode==0) error(EXIT_FAILURE, 0, "the `--mode' option is necessary when " "building profiles from a catalog. It can take two values: " "`img' or `wcs' which specify how to interpret the " "coordinate columns"); } /* The zeropoint magnitude is only necessary when `mcolisbrightness' is not called. */ if( p->mcolisbrightness==0 && isnan(p->zeropoint) ) error(EXIT_FAILURE, 0, "no zeropoint magnitude given. A zeropoint " "magnitude is necessary when `--mcolisbrightness' is not called " "(i.e., when the contents of `--mcol' must be interpretted as " "a magnitude, not brightness)."); /* Make sure no zero value is given for the `--naxis' option (only when it is necessary). */ if(p->dsize && p->backname==NULL) for(i=0;p->dsize[i]!=GAL_BLANK_SIZE_T;++i) if(p->dsize[i]==0) error(EXIT_FAILURE, 0, "values to `--naxes' option must not be " "zero"); } /* Sanity check on options AND arguments. If only option values are to be checked, use `ui_read_check_only_options'. */ static void ui_check_options_and_arguments(struct mkprofparams *p) { int d0f1; char *tmpname; /* If no kernel is given, make sure an input catalog is given, and if it is FITS, that the HDU is also provided. When a kernel option, we will set a fiducial catalog name called `kernel.txt' to automatic output filename generation. */ if(p->kernel) { if(p->catname) error(EXIT_FAILURE, 0, "`--kernel' cannot be called with an input " "catalog (`%s'). The parameters necessary to build a single " "kernel output should be given to `--kernel', not in a " "catalog", p->catname); p->catname="kernel.option"; } else { if(p->catname) { if( gal_fits_name_is_fits(p->catname) && p->cp.hdu==NULL) error(EXIT_FAILURE, 0, "no `hdu' specified for the input FITS " "table '%s', to ", p->catname); } else error(EXIT_FAILURE, 0, "no input catalog provided. To build " "profiles, you need to give a catalog/table containing " "the information of the profiles"); } /* If cp->output was not specified on the command line or in any of the configuration files, then automatic output should be used, in which case, cp->output should be the current directory. */ if(p->cp.output==NULL) gal_checkset_allocate_copy("./", &p->cp.output); /* Set the necessary output names. */ d0f1=gal_checkset_dir_0_file_1(p->cp.output, p->cp.dontdelete); if(d0f1) /* --output is a file name. */ { p->mergedimgname=p->cp.output; p->outdir=gal_checkset_dir_part(p->mergedimgname); } else /* --output is a directory name. */ { gal_checkset_allocate_copy(p->cp.output, &p->outdir); gal_checkset_check_dir_write_add_slash(&p->outdir); tmpname=gal_checkset_automatic_output(&p->cp, p->catname, ".fits"); p->mergedimgname=gal_checkset_malloc_cat(p->outdir, tmpname); free(tmpname); } p->basename=gal_checkset_not_dir_part(p->mergedimgname); /* If a merged image is requested (or `--kernel' the option is called), then delete the final filename if it exists. */ if(p->nomerged==0 && p->kernel) gal_checkset_writable_remove(p->mergedimgname, p->cp.keep, p->cp.dontdelete); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_read_cols(struct mkprofparams *p) { int checkblank; size_t i, counter=0; char *colname=NULL, **strarr; gal_list_str_t *colstrs=NULL, *ccol; gal_data_t *cols, *tmp, *corrtype=NULL; /* The coordinate columns are a linked list of strings. */ ccol=p->ccol; for(i=0; i<p->ndim; ++i) { gal_list_str_add(&colstrs, ccol->v, 0); ccol=ccol->next; } /* Add the rest of the columns in a specific order. */ gal_list_str_add(&colstrs, p->fcol, 0); gal_list_str_add(&colstrs, p->rcol, 0); gal_list_str_add(&colstrs, p->ncol, 0); gal_list_str_add(&colstrs, p->pcol, 0); gal_list_str_add(&colstrs, p->qcol, 0); gal_list_str_add(&colstrs, p->mcol, 0); gal_list_str_add(&colstrs, p->tcol, 0); /* Reverse the order to make the column orders correspond to how we added them here and avoid possible bugs. */ gal_list_str_reverse(&colstrs); /* Read the desired columns from the file. */ cols=gal_table_read(p->catname, p->cp.hdu, colstrs, p->cp.searchin, p->cp.ignorecase, p->cp.minmapsize, NULL); /* Set the number of objects. */ p->num=cols->size; /* Put each column's data in the respective internal array. */ while(cols!=NULL) { /* Pop out the top column. */ tmp=gal_list_data_pop(&cols); /* By default check if the column has blank values, but it can be turned off for some columns. */ checkblank=1; /* See which column we are currently reading. */ switch(++counter) { case 1: case 2: colname = ( counter==1 ? "first coordinate column (`--coordcol')" : "second coordinate column (`--coordcol')" ); corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64); switch(counter) { case 1: p->x=corrtype->array; break; case 2: p->y=corrtype->array; break; } break; case 3: if(tmp->type==GAL_TYPE_STRING) { p->f=gal_data_malloc_array(GAL_TYPE_UINT8, p->num, __func__, "p->f"); strarr=tmp->array; for(i=0;i<p->num;++i) p->f[i]=ui_profile_name_read(strarr[i], i+1); gal_data_free(tmp); corrtype=NULL; } else { /* Read the user's profile codes. */ colname="profile function code (`fcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_UINT8); p->f=corrtype->array; /* Check if they are in the correct range. */ for(i=0;i<p->num;++i) if(p->f[i]<=PROFILE_INVALID || p->f[i]>=PROFILE_MAXIMUM_CODE) error(EXIT_FAILURE, 0, "%s: row %zu, the function " "code is %u. It should be >%d and <%d. Please run " "again with `--help' and check the acceptable " "codes.\n\nAlternatively, you can use alphabetic " "strings to specify the profile functions, see the " "explanations under `fcol' from the command " "below (press the `SPACE' key to go down, and the " "`q' to return back to the command-line):\n\n" " $ info %s\n", p->catname, i+1, p->f[i], PROFILE_INVALID, PROFILE_MAXIMUM_CODE, PROGRAM_EXEC); } break; case 4: colname="radius (`rcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->r=corrtype->array; /* Check if there is no negative or zero-radius profile. */ for(i=0;i<p->num;++i) if(p->r[i]<=0.0f) error(EXIT_FAILURE, 0, "%s: row %zu, the radius value %g is " "not acceptable. It has to be larger than 0", p->catname, i+1, p->r[i]); break; case 5: colname="index (`ncol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->n=corrtype->array; break; case 6: colname="position angle (`pcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->p=corrtype->array; break; case 7: colname="axis ratio (`qcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->q=corrtype->array; /* Check if there is no negative or >1.0f axis ratio. */ for(i=0;i<p->num;++i) if(p->q[i]<=0.0f || p->q[i]>1.0f) error(EXIT_FAILURE, 0, "%s: row %zu, the axis ratio value %g " "is not acceptable. It has to be >0 and <=1", p->catname, i+1, p->q[i]); break; case 8: colname="magnitude (`mcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->m=corrtype->array; checkblank=0; /* Magnitude can be NaN: to mask regions. */ break; case 9: colname="truncation (`tcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->t=corrtype->array; /* Check if there is no negative or zero truncation radius. */ for(i=0;i<p->num;++i) if(p->t[i]<=0.0f) error(EXIT_FAILURE, 0, "%s: row %zu, the truncation radius " "value %g is not acceptable. It has to be larger than 0", p->catname, i+1, p->t[i]); break; /* If the index isn't recognized, then it is larger, showing that there was more than one match for the given criteria */ default: gal_tableintern_error_col_selection(p->catname, p->cp.hdu, "too " "many columns were selected " "by the given values to the " "options ending in `col'."); } /* Sanity check and clean up. Note that it might happen that the input structure is already freed. In that case, `corrtype' will be NULL. */ if(corrtype) { /* Make sure there are no blank values in this column. */ if( checkblank && gal_blank_present(corrtype, 1) ) error(EXIT_FAILURE, 0, "%s column has blank values. " "Input columns cannot contain blank values", colname); /* Free the unnecessary sturcture information. The correct-type (`corrtype') data structure's array is necessary for later steps, so its pointer has been copied in the main program's structure. Hence, we should set the structure's pointer to NULL so the important data isn't freed.*/ corrtype->array=NULL; gal_data_free(corrtype); } } } /* It is possible to define the internal catalog through a catalog or the `--kernel' option. This function will do the job. */ static void ui_prepare_columns(struct mkprofparams *p) { double *karr; float r, n, t; /* If the kernel option was called, then we need to build a series of single element columns to create an internal catalog. */ if(p->kernel) { /* Number of profiles to be built. */ p->num=1; /* Allocate the necessary columns. */ p->x = gal_data_calloc_array(GAL_TYPE_FLOAT64, 1, __func__, "p->x"); p->y = gal_data_calloc_array(GAL_TYPE_FLOAT64, 1, __func__, "p->y"); p->f = gal_data_calloc_array(GAL_TYPE_UINT8, 1, __func__, "p->f"); p->r = gal_data_calloc_array(GAL_TYPE_FLOAT32, 1, __func__, "p->r"); p->n = gal_data_calloc_array(GAL_TYPE_FLOAT32, 1, __func__, "p->n"); p->p = gal_data_calloc_array(GAL_TYPE_FLOAT32, 1, __func__, "p->p"); p->q = gal_data_calloc_array(GAL_TYPE_FLOAT32, 1, __func__, "p->q"); p->m = gal_data_calloc_array(GAL_TYPE_FLOAT32, 1, __func__, "p->m"); p->t = gal_data_calloc_array(GAL_TYPE_FLOAT32, 1, __func__, "p->t"); /* For profiles that need a different number of input values. Note that when a profile doesn't need a value, it will be ignored. */ karr=p->kernel->array; if(p->kernel->size) { r = karr[0]; n = p->kernel->size==2 ? 0.0f : karr[1]; t = p->kernel->size==1 ? 1.0f : karr[ p->kernel->size - 1 ]; } else r=n=t=0.0f; /* Fill the allocated spaces. */ p->x[0] = 0.0f; p->y[0] = 0.0f; p->f[0] = p->kernel->status; p->r[0] = r; p->n[0] = n; p->p[0] = 0.0f; p->q[0] = 1.0f; p->m[0] = 0.0f; p->t[0] = t; } else { /* Make sure the number of coordinate columns and number of dimensions in outputs are the same. There is no problem if it is more than `ndim'. In that case, the last values (possibly in configuration files) will be ignored. */ if( gal_list_str_number(p->ccol) < p->ndim ) error(EXIT_FAILURE, 0, "%zu coordinate columns (calls to " "`--coordcol') given but output has %zu dimensions", gal_list_str_number(p->ccol), p->ndim); /* Call the column-reading function. */ ui_read_cols(p); } } /* To keep things clean, we'll do the WCS sanity checks in this small function. If everything is ok, this function will return 0 (so an if condition won't be executed). If any of the necessary inputs aren't given, it will return 1. */ static int ui_wcs_sanity_check(struct mkprofparams *p) { size_t ndim=p->ndim; if(p->crpix) { if(p->crpix->size!=ndim) error(EXIT_FAILURE, 0, "%zu values given to `--crpix'. This must be " "the same as the output dimension (%zu)", p->crpix->size, ndim); return 0; } else return 1; if(p->crval) { if(p->crval->size!=ndim) error(EXIT_FAILURE, 0, "%zu values given to `--crval'. This must be " "the same as the output dimension (%zu)", p->crval->size, ndim); return 0; } else return 1; if(p->cdelt) { if(p->cdelt->size!=ndim) error(EXIT_FAILURE, 0, "%zu values given to `--cdelt'. This must be " "the same as the output dimension (%zu)", p->cdelt->size, ndim); return 0; } else return 1; if(p->pc) { if(p->pc->size!=ndim*ndim) error(EXIT_FAILURE, 0, "%zu values given to `--pc'. This must be " "the square as the output dimension (%zu)", p->pc->size, ndim*ndim); return 0; } else return 1; if(p->cunit) { if(p->cunit->size!=ndim) error(EXIT_FAILURE, 0, "%zu values given to `--cunit'. This must be " "the same as the output dimension (%zu)", p->cunit->size, ndim); return 0; } else return 1; if(p->ctype) { if(p->ctype->size!=ndim) error(EXIT_FAILURE, 0, "%zu values given to `--ctype'. This must be " "the same as the output dimension (%zu)", p->ctype->size, ndim); return 0; } else return 1; } static void ui_prepare_wcs(struct mkprofparams *p) { int status; struct wcsprm *wcs; char **cunit, **ctype; size_t i, ndim=p->ndim; double *crpix, *crval, *cdelt, *pc; /* Check and initialize the WCS information. If any of the necessary WCS parameters are missing, then don't build any WCS. */ if( ui_wcs_sanity_check(p) ) return; crpix = p->crpix->array; crval = p->crval->array; cdelt = p->cdelt->array; pc = p->pc->array; cunit = p->cunit->array; ctype = p->ctype->array; /* Allocate the memory necessary for the wcsprm structure. */ errno=0; wcs=p->wcs=malloc(sizeof *wcs); if(wcs==NULL) error(EXIT_FAILURE, errno, "%zu for wcs in preparewcs", sizeof *wcs); /* Initialize the structure (allocate all its internal arrays). */ wcs->flag=-1; if( (status=wcsini(1, ndim, wcs)) ) error(EXIT_FAILURE, 0, "wcsini error %d: %s", status, wcs_errmsg[status]); /* Fill in all the important WCS structure parameters. */ wcs->altlin = 0x1; wcs->equinox = 2000.0f; for(i=0;i<ndim;++i) { /* IMPORTANT: At this point, we don't want the WCS to be over-sampled because if the user has given RA and Dec for the profiles, they need to be converted to non-oversampled and shifted image coordinates. After the conversion (in `ui_finalize_coordinates') we are going to correct for the oversampling in the WCS.*/ wcs->crpix[i] = crpix[i]; wcs->crval[i] = crval[i]; wcs->cdelt[i] = cdelt[i]; strcpy(wcs->cunit[i], cunit[i]); strcpy(wcs->ctype[i], ctype[i]); } for(i=0;i<ndim*ndim;++i) wcs->pc[i]=pc[i]; /* Set up the wcs structure with the constants defined above. */ status=wcsset(wcs); if(status) error(EXIT_FAILURE, 0, "wcsset error %d: %s", status, wcs_errmsg[status]); } static void ui_prepare_canvas(struct mkprofparams *p) { float *f, *ff; double truncr; gal_data_t *keysll; long width[2]={1,1}; int status=0, setshift=0; size_t i, nshift=0, *dsize=NULL, ndim_counter; /* If a background image is specified, then use that as the output image to build the profiles over. */ if(p->backname) { /* Make sure the kernel option is not called. */ if(p->kernel) error(EXIT_FAILURE, 0, "the `--kernel' and `--background' options " "cannot be called together"); /* Small sanity check. */ if(p->backhdu==NULL) error(EXIT_FAILURE, 0, "no hdu specified for the background image " "%s. Please run again `--backhdu' option", p->backname); /* Read in the background image and its coordinates, note that when no merged image is desired, we just need the WCS information of the background image and the number of its dimensions. So `ndim==0' and what `dsize' points to is irrelevant. */ if(p->nomerged) { /* Get the number of the background image's dimensions. */ keysll=gal_data_array_calloc(1); keysll->name="NAXIS"; keysll->type=GAL_TYPE_SIZE_T; gal_fits_key_read(p->backname, p->backhdu, keysll, 0, 0); p->ndim = *(size_t *)(keysll->array); keysll->name=NULL; gal_data_array_free(keysll, 1, 1); /* Read the WCS structure of the background image. */ p->wcs=gal_wcs_read(p->backname, p->backhdu, 0, 0, &p->nwcs); } else { /* Read the image. */ p->out=gal_fits_img_read_to_type(p->backname, p->backhdu, GAL_TYPE_FLOAT32, p->cp.minmapsize, 0, 0); /* Put the WCS structure and number of dimensions in the MakeProfiles's main structure for generality. The WCS structure will be put back in the end when writing. */ p->wcs=p->out->wcs; p->nwcs=p->out->nwcs; p->ndim=p->out->ndim; p->out->wcs=NULL; p->out->nwcs=0; /* If p->dsize was given as an option, free it. */ if( p->dsize ) free(p->dsize); /* Write the size of the background image into `dsize'. */ p->dsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, p->ndim, __func__, "p->dsize"); for(i=0;i<p->ndim;++i) p->dsize[i] = p->out->dsize[i]; /* Set all pixels to zero if the user wanted a clear canvas. */ if(p->clearcanvas) {ff=(f=p->out->array)+p->out->size; do *f++=0.0f; while(f<ff);} } /* Currently, things are only implemented for 2D. */ if(p->ndim!=2) error(EXIT_FAILURE, 0, "%s (hdu %s) has %zu dimensions. Currently " "only a 2 dimensional background image is acceptable", p->backname, p->backhdu, p->ndim); /* When a background image is specified, oversample must be 1 and there is no shifts. */ p->oversample=1; if(p->shift) free(p->shift); p->shift=gal_data_calloc_array(GAL_TYPE_SIZE_T, p->ndim, __func__, "p->shift (1)"); } else { /* Get the number of dimensions. */ ndim_counter=0; for(i=0;p->dsize[i]!=GAL_BLANK_SIZE_T;++i) ++ndim_counter; p->ndim=ndim_counter; /* Currently, things are only implemented for 2D. */ if(p->ndim!=2) error(EXIT_FAILURE, 0, "%zu numbers given to `--naxis', only 2 " "values may be given", p->ndim); /* If any of the shift elements are zero, the others should be too!*/ if(p->shift && p->shift[0] && p->shift[1]) { /* Multiply the shift by the over-sample. */ for(i=0;p->shift[i]!=GAL_BLANK_SIZE_T;++i) { ++nshift; p->shift[i] *= p->oversample; } /* Make sure it has the same number of elements as naxis. */ if(p->ndim!=nshift) error(EXIT_FAILURE, 0, "%zu and %zu elements given to `--ndim' " "and `--shift' respectively. These two numbers must be the " "same", p->ndim, nshift); } else { /* `prepforconv' is only valid when xshift and yshift are both zero. Also, a PSF profile should exist in the image. */ if(p->prepforconv) { /* Check if there is at least one Moffat or Gaussian profile. */ for(i=0;i<p->num;++i) if( oneprofile_ispsf(p->f[i]) ) { /* Calculate the size of the box holding the PSF. Note: - For the Moffat and Gaussian profiles, the radius column is actually the FWHM which is actually the diameter, not radius. So we have to divide it by half. - encloseellipse outputs the total width, we only want half of it for the shift. */ setshift=1; truncr = p->tunitinp ? p->t[i] : p->t[i] * p->r[i]/2; gal_box_bound_ellipse(truncr, p->q[i]*truncr, p->p[i], width); } /* Either set the shifts to zero or to the values set from the PSF. Note that the user might have given any number of shifts (from zero). So, we'll just free it and reset it. */ if(p->shift) free(p->shift); p->shift=gal_data_calloc_array(GAL_TYPE_SIZE_T, p->ndim, __func__, "p->shift (2)"); if(setshift) { p->shift[0] = (width[0]/2)*p->oversample; p->shift[1] = (width[1]/2)*p->oversample; } } } /* If shift has not been set until now, set it. */ if(p->shift==NULL) p->shift=gal_data_calloc_array(GAL_TYPE_SIZE_T, p->ndim, __func__, "p->shift (3)"); /* Prepare the sizes of the final merged image (if it is to be made). Note that even if we don't want a merged image, we still need its WCS structure. */ if(p->nomerged==0) { ndim_counter=0; for(i=0;p->dsize[i]!=GAL_BLANK_SIZE_T;++i) { /* Count the number of dimensions. */ ++ndim_counter; /* Correct dsize. */ p->dsize[i] = (p->dsize[i]*p->oversample) + (2*p->shift[i]); } dsize = p->dsize; /* Make the output structure. */ p->out=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, ndim_counter, dsize, NULL, 1, p->cp.minmapsize, NULL, NULL, NULL); } } /* Make the WCS structure of the output data structure if it has not been set yet. */ if(p->wcs==NULL) ui_prepare_wcs(p); /* Set the name, comments and units of the final merged output. */ if(p->out) { if(p->out->name) free(p->out->name); gal_checkset_allocate_copy("Mock profiles", &p->out->name); if(p->out->unit==NULL) gal_checkset_allocate_copy("Brightness", &p->out->unit); } /* When individual mode is requested, write the WCS structure to a header string to speed up the process: if we don't do it here, this process will be necessary on every individual profile's output. So it is much more efficient done once here. */ if(p->individual && p->wcs) { status=wcshdo(WCSHDO_safe, p->wcs, &p->wcsnkeyrec, &p->wcsheader); if(status) error(EXIT_FAILURE, 0, "wcshdo error %d: %s", status, wcs_errmsg[status]); } } static void ui_finalize_coordinates(struct mkprofparams *p) { void *arr=NULL; size_t i=0, ndim=p->ndim; uint8_t os=p->oversample; gal_data_t *tmp, *coords=NULL; double *cdelt=p->wcs->cdelt, *crpix=p->wcs->crpix; /* When the user specified RA and Dec columns, the respective values where stored in the `p->x' and `p->y' arrays. So before proceeding, we need to change them into actual image coordinates. */ if(p->mode==MKPROF_MODE_WCS) { /* Make list of coordinates for input of `gal_wcs_world_to_img'. */ for(i=0;i<ndim;++i) { /* Set the array pointer. Note that we read the WCS columns into the `p->x', `p->y' and `p->z' arrays temporarily before. Here, we will convert them to image coordinates in place. */ switch(i) { /* Note that the linked list gets filled in a first-in-last-out order, so the last column added should be the first WCS dimension. */ case 0: arr = p->y; break; case 1: arr = p->x; break; default: error(EXIT_FAILURE, 0, "conversion from WCS to image " "coordinates is not currently supported for " "%zu-dimensional datasets", ndim); } /* Allocate the list of coordinates. */ gal_list_data_add_alloc(&coords, arr, GAL_TYPE_FLOAT64, 1, &p->num, NULL, 0, -1, NULL, NULL, NULL); } /* Convert the world coordinates to image coordinates (inplace). */ gal_wcs_world_to_img(coords, p->wcs, 1); /* If any conversions created a WCSLIB error, both the outputs will be set to NaN. */ for(i=0;i<p->num;++i) if( isnan(p->x[i]) ) error(EXIT_FAILURE, 0, "catalog row %zu: WCSLIB could not convert " "(%f, %f) coordinates into image coordinates", i, p->x[i], p->y[i]); /* We want the actual arrays of each `coords' column. So, first we'll set all the array elements to NULL, then free it. */ for(tmp=coords;tmp!=NULL;tmp=tmp->next) tmp->array=NULL; gal_list_data_free(coords); } /* Correct the WCS scale. Note that when the WCS is read from a background image, oversample is set to 1. This is done here because the conversion of WCS to pixel coordinates needs to be done with the non-over-sampled image.*/ for(i=0;i<p->ndim;++i) { /* Oversampling has already been applied in `p->shift'. Also note that shift is in the C dimension ordring, while crpix is in FITS ordering. */ crpix[i] = crpix[i]*os + p->shift[ndim-i-1] - os/2; cdelt[i] /= os; } /* For a sanity check: printf("\nui_finalize_coordinates sanity check:\n"); for(i=0;i<p->num;++i) printf("%f, %f\n", p->x[i], p->y[i]); */ } /* Add all the columns of the log file. Just note that since this is a linked list, we have to add them in the opposite order. */ static void ui_make_log(struct mkprofparams *p) { char *name, *comment; /* Return if no long file is to be created. */ if(p->cp.log==0) return; /* Individual created. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_UINT8, 1, &p->num, NULL, 1, p->cp.minmapsize, "INDIV_CREATED", "bool", "If an individual image was made (1) or not (0)."); /* Fraction of monte-carlo. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_FLOAT32, 1, &p->num, NULL, 1, p->cp.minmapsize, "FRAC_MONTECARLO", "frac", "Fraction of brightness in Monte-carlo integrated " "pixels."); /* Number of monte-carlo. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_UINT64, 1, &p->num, NULL, 1, p->cp.minmapsize, "NUM_MONTECARLO", "count", "Number of Monte Carlo integrated pixels."); /* Magnitude of profile overlap. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_FLOAT32, 1, &p->num, NULL, 1, p->cp.minmapsize, "MAG_OVERLAP", "mag", "Magnitude of profile's overlap with merged " "image."); /* Row number in input catalog. */ name=gal_fits_name_save_as_string(p->catname, p->cp.hdu); asprintf(&comment, "Row number of profile in %s.", name); gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_UINT64, 1, &p->num, NULL, 1, p->cp.minmapsize, "INPUT_ROW_NO", "count", comment); free(comment); free(name); } static void ui_preparations(struct mkprofparams *p) { /* If the kernel option was given, some parameters need to be over-written: */ if(p->kernel) { /* Set the necessary constants. */ p->ndim=2; p->nomerged=1; p->psfinimg=0; p->individual=1; /* Set the shift array. */ p->shift=gal_data_calloc_array(GAL_TYPE_SIZE_T, p->ndim, __func__, "p->shift"); } else ui_prepare_canvas(p); /* Read in all the columns. */ ui_prepare_columns(p); /* Read the (possible) RA/Dec inputs into X and Y for the builder.*/ if(p->wcs) ui_finalize_coordinates(p); /* Allocate the random number generator: */ gsl_rng_env_setup(); p->rng=gsl_rng_alloc(gsl_rng_ranlxs1); /* Make the log linked list. */ ui_make_log(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ static void ui_print_intro(struct mkprofparams *p) { char *jobname; if(p->cp.quiet) return; printf(PROGRAM_NAME" started on %s", ctime(&p->rawtime)); if(p->kernel) asprintf(&jobname, "Building one %s kernel", ui_profile_name_write(p->kernel->status)); else asprintf(&jobname, "%zu profile%sread from %s", p->num, p->num>1?"s ":" ", p->catname); gal_timing_report(NULL, jobname, 1); free(jobname); if(p->backname) { if(p->nomerged) asprintf(&jobname, "WCS information read from %s", p->backname); else asprintf(&jobname, "%s is read and will be used as canvas", p->backname); gal_timing_report(NULL, jobname, 1); free(jobname); } asprintf(&jobname, "Random number generator (RNG) type: %s", gsl_rng_name(p->rng)); gal_timing_report(NULL, jobname, 1); free(jobname); if(p->envseed) { asprintf(&jobname, "RNG seed for all profiles: %lu", gsl_rng_default_seed); gal_timing_report(NULL, jobname, 1); free(jobname); } if(p->kernel==NULL) { asprintf(&jobname, "Using %zu threads.", p->cp.numthreads); gal_timing_report(NULL, jobname, 1); free(jobname); } } void ui_read_check_inputs_setup(int argc, char *argv[], struct mkprofparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the sanity check so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Print introductory information. */ ui_print_intro(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct mkprofparams *p, struct timeval *t1) { /* Free all the allocated arrays. */ free(p->cat); free(p->cp.hdu); free(p->outdir); free(p->basename); /* p->cp.output might be equal to p->mergedimgname. In this case, if we simply free them after each other, there will be a double free error. So after freeing output, we set it to NULL since free(NULL) is ok.*/ if(p->cp.output==p->mergedimgname) free(p->cp.output); else { free(p->cp.output); free(p->mergedimgname); } /* Free the WCS headers string that was defined for individual mode. */ if(p->individual) free(p->wcsheader); /* Free the random number generator: */ gsl_rng_free(p->rng); /* Free the log file information. */ if(p->cp.log) gal_list_data_free(p->log); /* Report the duration of the job */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in", 0); } ����������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/main.c����������������������������������������������������������������������0000644�0001750�0001750�00000003125�13121462410�013272� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "mkprof.h" #include "ui.h" /* needs main.h. */ int main (int argc, char *argv[]) { struct timeval t1; struct mkprofparams p={{{0},0},0}; /* Set the starting time.*/ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ mkprof(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully.*/ return EXIT_SUCCESS; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/Makefile.in�����������������������������������������������������������������0000644�0001750�0001750�00000211666�13217217705�014275� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astmkprof$(EXEEXT) subdir = bin/mkprof ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astmkprof_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) mkprof.$(OBJEXT) \ oneprofile.$(OBJEXT) profiles.$(OBJEXT) astmkprof_OBJECTS = $(am_astmkprof_OBJECTS) astmkprof_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astmkprof_SOURCES) DIST_SOURCES = $(astmkprof_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astmkprof_LDADD = -lgnuastro astmkprof_SOURCES = main.c ui.c mkprof.c oneprofile.c profiles.c EXTRA_DIST = main.h authors-cite.h args.h ui.h mkprof.h oneprofile.h \ profiles.h dist_sysconf_DATA = astmkprof.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/mkprof/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/mkprof/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astmkprof$(EXEEXT): $(astmkprof_OBJECTS) $(astmkprof_DEPENDENCIES) $(EXTRA_astmkprof_DEPENDENCIES) @rm -f astmkprof$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astmkprof_OBJECTS) $(astmkprof_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkprof.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oneprofile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/profiles.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/astmkprof.conf��������������������������������������������������������������0000644�0001750�0001750�00000003226�13126740520�015067� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for MakeProfiles. # MakeProfiles is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astmkprof --help # Full list of options, short doc. # $ astmkprof -P # Print all options and used values. # $ info astmkprof # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. #input backhdu 1 # Output: naxis 1000,1000 oversample 5 circumwidth 2 type float32 # Profiles: tunitinp 0 numrandom 10000 tolerance 0.01 zeropoint 0.00 # Catalog: mode img ccol 2 ccol 3 fcol 4 rcol 5 ncol 6 pcol 7 qcol 8 mcol 9 tcol 10 # WCS: crpix 1,1 crval 1,1 cdelt 0.03/3600,0.03/3600 pc -1,0,0,1 cunit deg,deg ctype RA---TAN,DEC--TAN ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkprof/Makefile.am�����������������������������������������������������������������0000644�0001750�0001750�00000002655�13216276304�014257� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astmkprof astmkprof_LDADD = -lgnuastro astmkprof_SOURCES = main.c ui.c mkprof.c oneprofile.c profiles.c EXTRA_DIST = main.h authors-cite.h args.h ui.h mkprof.h oneprofile.h \ profiles.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astmkprof.conf �����������������������������������������������������������������������������������gnuastro-0.5/bin/mknoise/���������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220467�012442� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mknoise/mknoise.h������������������������������������������������������������������0000644�0001750�0001750�00000002047�12616616510�014203� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeNoise - Add noise to a dataset. MakeNoise is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MKNOISE_H #define MKNOISE_H void mknoise(struct mknoiseparams *p); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mknoise/ui.h�����������������������������������������������������������������������0000644�0001750�0001750�00000003202�13174462540�013147� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeNoise - Add noise to a dataset. MakeNoise is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Available letters for short options: a c d f g j k l m n p r t u v w x y A B C E G H J L O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_SIGMA = 's', UI_KEY_INSTRUMENTAL = 'i', UI_KEY_BACKGROUND = 'b', UI_KEY_ZEROPOINT = 'z', UI_KEY_ENVSEED = 'e', /* Only with long version (start with a value 1000, the rest will be set automatically). */ }; void ui_read_check_inputs_setup(int argc, char *argv[], struct mknoiseparams *p); void ui_free_report(struct mknoiseparams *p, struct timeval *t1); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mknoise/args.h���������������������������������������������������������������������0000644�0001750�0001750�00000006072�13136637645�013506� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeNoise - Add noise to a dataset. MakeNoise is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { "sigma", UI_KEY_SIGMA, "FLT", 0, "Total noise sigma, ignore other options.", GAL_OPTIONS_GROUP_INPUT, &p->sigma, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "instrumental", UI_KEY_INSTRUMENTAL, "FLT", 0, "Instrument noise level (in pixel value units).", GAL_OPTIONS_GROUP_INPUT, &p->instrumental, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "background", UI_KEY_BACKGROUND, "FLT", 0, "Fixed background magnitude for whole input.", GAL_OPTIONS_GROUP_INPUT, &p->background_mag, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "zeropoint", UI_KEY_ZEROPOINT, "FLT", 0, "Zeropoint magnitude of input.", GAL_OPTIONS_GROUP_INPUT, &p->zeropoint, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "envseed", UI_KEY_ENVSEED, 0, 0, "Use GSL_RNG_SEED environment variable for seed", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->envseed, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mknoise/authors-cite.h�������������������������������������������������������������0000644�0001750�0001750�00000002752�13211076737�015153� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeNoise - Add noise to a dataset. MakeNoise is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif ����������������������gnuastro-0.5/bin/mknoise/main.h���������������������������������������������������������������������0000644�0001750�0001750�00000004662�13136637645�013501� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeNoise - Add noise to a dataset. MakeNoise is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gsl/gsl_rng.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "MakeNoise" /* Program full name. */ #define PROGRAM_EXEC "astmknoise" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Main program parameters structure */ struct mknoiseparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ char *inputname; /* Input filename. */ double sigma; /* Total noise sigma (ignoring others). */ double instrumental; /* Standard deviation constants. */ double zeropoint; /* Zeropoint magnitude of image. */ double background_mag; /* Background in magnitudes. */ uint8_t envseed; /* ==1, generate a random seed. */ /* Internal */ gal_data_t *input; /* Input image data in double precision. */ double background; /* Background in units of brightness. */ gsl_rng *rng; /* Main instance of random number generator.*/ char *rng_type; /* The type of the Random number gen. */ int64_t rng_seed; /* Seed of Random number generator. */ time_t rawtime; /* Starting time of the program. */ }; #endif ������������������������������������������������������������������������������gnuastro-0.5/bin/mknoise/mknoise.c������������������������������������������������������������������0000644�0001750�0001750�00000007661�13151366335�014207� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeNoise - Add noise to a dataset. MakeNoise is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <sys/time.h> /* Generate random seed. */ #include <gsl/gsl_rng.h> /* Used in setrandoms. */ #include <gnuastro/fits.h> #include <gsl/gsl_randist.h> /* To make noise. */ #include <gnuastro-internal/timing.h> #include "main.h" void convertsaveoutput(struct mknoiseparams *p) { char keyname1[FLEN_KEYWORD]; gal_fits_list_key_t *headers=NULL; char keyname2[FLEN_KEYWORD], keyname3[FLEN_KEYWORD]; char keyname4[FLEN_KEYWORD], keyname5[FLEN_KEYWORD]; /* Add the proper information to the header of the output: */ gal_fits_key_write_filename("INF", p->inputname, &headers); if( !isnan(p->background_mag) ) { strcpy(keyname1, "BCKGRND"); gal_fits_key_list_add_end(&headers, GAL_TYPE_FLOAT64, keyname1, 0, &p->background_mag, 0, "Background " "value (in magnitude) for noise.", 0, NULL); strcpy(keyname2, "BZRPNT"); gal_fits_key_list_add_end(&headers, GAL_TYPE_FLOAT64, keyname2, 0, &p->zeropoint, 0, "Zeropoint magnitude of image.", 0, NULL); strcpy(keyname3, "INSTRU"); gal_fits_key_list_add_end(&headers, GAL_TYPE_FLOAT64, keyname3, 0, &p->instrumental, 0, "Instrumental noise in units of flux.", 0, NULL); } else { strcpy(keyname1, "SIGMA"); gal_fits_key_list_add_end(&headers, GAL_TYPE_FLOAT64, keyname1, 0, &p->sigma, 0, "Total noise sigma", 0, NULL); } strcpy(keyname4, "RNGTYPE"); gal_fits_key_list_add_end(&headers, GAL_TYPE_STRING, keyname4, 0, p->rng_type, 0, "Random number generator (by " "GSL) type.", 0, NULL); strcpy(keyname5, "RNGSEED"); gal_fits_key_list_add_end(&headers, GAL_TYPE_INT64, keyname5, 0, &p->rng_seed, 0, "Random number generator (by GSL) seed.", 0, NULL); /* Save the output: */ p->input=gal_data_copy_to_new_type_free(p->input, p->cp.type); gal_fits_img_write(p->input, p->cp.output, headers, PROGRAM_NAME); } void mknoise(struct mknoiseparams *p) { double *d, *df, background=p->background, instrumental=p->instrumental; /* Add the noise: */ df=(d=p->input->array)+p->input->size; if( !isnan(p->sigma) ) { do *d += gsl_ran_gaussian(p->rng, p->sigma); while(++d<df); } else { do *d += ( background + gsl_ran_gaussian(p->rng, sqrt( instrumental + background + *d )) ); while(++d<df); } /* Convert and save the output in the proper format: */ convertsaveoutput(p); } �������������������������������������������������������������������������������gnuastro-0.5/bin/mknoise/ui.c�����������������������������������������������������������������������0000644�0001750�0001750�00000026754�13175670623�013167� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeNoise - Add noise to a dataset. MakeNoise is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <inttypes.h> #include <gnuastro/wcs.h> #include <gnuastro/fits.h> #include <gnuastro/table.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will add noise to all the " "pixels in an input dataset. The noise parameters can be specified with " "the options below. \n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct mknoiseparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->coptions = gal_commonopts_options; /* Initialize options for this program. */ p->sigma = NAN; p->zeropoint = NAN; p->background_mag = NAN; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Selet individually */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct mknoiseparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: if(p->inputname) argp_error(state, "only one argument (input file) should be given"); else p->inputname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct mknoiseparams *p) { /* At leaset one of `--sigma' or `--background' are necessary. */ if( isnan(p->sigma) && isnan(p->background_mag) ) error(EXIT_FAILURE, 0, "at least one of `--sigma' or `--background' " "must be given to identify the noise level"); /* If a background magnitude is given (and the user hasn't given a `--sigma'), the zeropoint is necessary. */ if( isnan(p->sigma) && !isnan(p->background_mag) && isnan(p->zeropoint) ) error(EXIT_FAILURE, 0, "no zeropoint magnitude given. When the noise is " "identified by the background magnitude, a zeropoint magnitude " "is mandatory. Please use the `--zeropoint' option to specify " "a zeropoint magnitude"); } static void ui_check_options_and_arguments(struct mknoiseparams *p) { /* Make sure an input file name was given and if it was a FITS file, that a HDU is also given. */ if(p->inputname) { if( gal_fits_name_is_fits(p->inputname) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a FITS " "file, a HDU must also be specified, you can use the `--hdu' " "(`-h') option and give it the HDU number (starting from " "zero), extension name, or anything acceptable by CFITSIO"); } else error(EXIT_FAILURE, 0, "no input file is specified"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ void ui_preparations(struct mknoiseparams *p) { /* Read the input image as a double type */ p->input=gal_fits_img_read_to_type(p->inputname, p->cp.hdu, GAL_TYPE_FLOAT64, p->cp.minmapsize, 0,0); /* If we are dealing with an input table, make sure the format of the output table is valid, given the type of the output. */ if(p->input->ndim==1) gal_tableintern_check_fits_format(p->cp.output, p->cp.tableformat); /* Set the output name: */ if(p->cp.output) gal_checkset_writable_remove(p->cp.output, 0, p->cp.dontdelete); else p->cp.output=gal_checkset_automatic_output(&p->cp, p->inputname, "_noised.fits"); /* Convert the background value from magnitudes to flux. Note that magnitudes are actually calculated from the ratio of brightness, not flux. But in the context of MakeNoise where everything is done on pixels independently, brightness and flux are the same (flux is multiplied by the area of one pixel (=1) to give brightness).*/ if( !isnan(p->background_mag) ) p->background=pow(10, (p->zeropoint-p->background_mag)/2.5f); /* Allocate the random number generator: */ gsl_rng_env_setup(); p->rng=gsl_rng_alloc(gsl_rng_ranlxs1); p->rng_seed = ( p->envseed ? gsl_rng_default_seed : gal_timing_time_based_rng_seed() ); gsl_rng_set(p->rng, p->rng_seed); gal_checkset_allocate_copy(gsl_rng_name(p->rng), &p->rng_type); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct mknoiseparams *p) { struct gal_options_common_params *cp=&p->cp; char message[GAL_TIMING_VERB_MSG_LENGTH_V]; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Everything is ready, notify the user of the program starting. */ if(!p->cp.quiet) { printf(PROGRAM_NAME" started on %s", ctime(&p->rawtime)); sprintf(message, "Random number generator type: %s", gsl_rng_name(p->rng)); gal_timing_report(NULL, message, 1); sprintf(message, "Random number generator seed: %"PRId64, p->rng_seed); gal_timing_report(NULL, message, 1); } } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct mknoiseparams *p, struct timeval *t1) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->rng_type); free(p->cp.output); gal_data_free(p->input); /* Print the final message. */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } ��������������������gnuastro-0.5/bin/mknoise/main.c���������������������������������������������������������������������0000644�0001750�0001750�00000003167�13121462410�013447� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeNoise - Add noise to a dataset. MakeNoise is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" /* needs main.h. */ #include "mknoise.h" /* needs main.h. */ int main (int argc, char *argv[]) { struct timeval t1; struct mknoiseparams p={{{0},0},0}; /* Set the starting time.*/ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ mknoise(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully.*/ return EXIT_SUCCESS; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mknoise/Makefile.in����������������������������������������������������������������0000644�0001750�0001750�00000211331�13217217705�014431� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astmknoise$(EXEEXT) subdir = bin/mknoise ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astmknoise_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) mknoise.$(OBJEXT) astmknoise_OBJECTS = $(am_astmknoise_OBJECTS) astmknoise_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astmknoise_SOURCES) DIST_SOURCES = $(astmknoise_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astmknoise_LDADD = -lgnuastro astmknoise_SOURCES = main.c ui.c mknoise.c EXTRA_DIST = main.h authors-cite.h args.h ui.h mknoise.h dist_sysconf_DATA = astmknoise.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/mknoise/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/mknoise/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astmknoise$(EXEEXT): $(astmknoise_OBJECTS) $(astmknoise_DEPENDENCIES) $(EXTRA_astmknoise_DEPENDENCIES) @rm -f astmknoise$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astmknoise_OBJECTS) $(astmknoise_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mknoise.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mknoise/astmknoise.conf������������������������������������������������������������0000644�0001750�0001750�00000002010�13136637645�015411� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for MakeNoise. # MakeNoise is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astmknoise --help # Full list of options, short doc. # $ astmknoise -P # Print all options and used values. # $ info astmknoise # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: background -10.00 instrumental 0.000 zeropoint 0.00 # Output: type float32 # Common options ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mknoise/Makefile.am����������������������������������������������������������������0000644�0001750�0001750�00000002575�13121462410�014415� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astmknoise astmknoise_LDADD = -lgnuastro astmknoise_SOURCES = main.c ui.c mknoise.c EXTRA_DIST = main.h authors-cite.h args.h ui.h mknoise.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astmknoise.conf �����������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220467�012737� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/upperlimit.h�������������������������������������������������������������0000644�0001750�0001750�00000002136�13121462410�015212� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UPPERLIMIT_H #define UPPERLIMIT_H void upperlimit_calculate(struct mkcatalog_passparams *pp); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/columns.h����������������������������������������������������������������0000644�0001750�0001750�00000002207�13121462410�014477� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef COLUMNS_H #define COLUMNS_H void columns_define_alloc(struct mkcatalogparams *p); void columns_fill(struct mkcatalog_passparams *pp); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/mkcatalog.h��������������������������������������������������������������0000644�0001750�0001750�00000004435�13121462410�014766� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MKCATALOG_H #define MKCATALOG_H struct mkcatalog_passparams { struct mkcatalogparams *p; /* Main MakeCatalog paramers. */ double *oi; /* Intermediate values for objects. */ double *ci; /* Intermediate values for clumps. */ int32_t object; /* Object that is currently working on. */ size_t clumpsinobj; /* The number of clumps in this object. */ gal_data_t *tile; /* The tile to pass-over. */ float *st_i; /* Starting pointer for input image. */ int32_t *st_o; /* Starting pointer for objects image. */ int32_t *st_c; /* Starting pointer for objects image. */ float *st_sky; /* Starting pointer for input image. */ float *st_std; /* Starting pointer for input image. */ size_t start_end_inc[2]; /* Starting and ending indexs. */ size_t *shift; /* Shift coordinates for coordinates. */ gsl_rng *rng; /* Random number generator. */ size_t clumpstartindex; /* Clump starting row in final catalog. */ gal_data_t *up_vals; /* Container for upper-limit values. */ }; void mkcatalog(struct mkcatalogparams *p); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/ui.h���������������������������������������������������������������������0000644�0001750�0001750�00000006776�13216276304�013465� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_UPPERLIMIT = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_COLUMNS_IDS, UI_GROUP_COLUMNS_POSITION_PIXEL, UI_GROUP_COLUMNS_POSITION_WCS, UI_GROUP_COLUMNS_BRIGHTNESS, UI_GROUP_COLUMNS_MORPHOLOGY, }; /* Available letters for short options: f g k l u v w x y z H J L W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_OBJECTSFILE = 'O', /* General settings. */ UI_KEY_CLUMPSFILE = 'C', UI_KEY_SKYFILE = 's', UI_KEY_STDFILE = 't', UI_KEY_SKYSUBTRACTED = 'E', UI_KEY_THRESHOLD = 'R', UI_KEY_ENVSEED = 'e', UI_KEY_IDS = 'i', /* Catalog columns. */ UI_KEY_HOSTOBJID = 'j', UI_KEY_NUMCLUMPS = 'c', UI_KEY_AREA = 'a', UI_KEY_X = 'x', UI_KEY_Y = 'y', UI_KEY_RA = 'r', UI_KEY_DEC = 'd', UI_KEY_BRIGHTNESS = 'b', UI_KEY_MAGNITUDE = 'm', UI_KEY_MAGNITUDEERR = 'G', UI_KEY_UPPERLIMITMAG = 'u', UI_KEY_SN = 'n', UI_KEY_SEMIMAJOR = 'A', UI_KEY_SEMIMINOR = 'B', UI_KEY_AXISRATIO = 'Q', UI_KEY_POSITIONANGLE = 'p', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_OBJECTSHDU = 1000, /* General settings. */ UI_KEY_CLUMPSHDU, UI_KEY_SKYHDU, UI_KEY_STDHDU, UI_KEY_ZEROPOINT, UI_KEY_SFMAGNSIGMA, UI_KEY_SFMAGAREA, UI_KEY_UPMASKFILE, UI_KEY_UPMASKHDU, UI_KEY_UPNUM, UI_KEY_UPRANGE, UI_KEY_UPSIGMACLIP, UI_KEY_UPNSIGMA, UI_KEY_OBJID, /* Catalog columns. */ UI_KEY_IDINHOSTOBJ, UI_KEY_CLUMPSAREA, UI_KEY_WEIGHTAREA, UI_KEY_GEOX, UI_KEY_GEOY, UI_KEY_CLUMPSX, UI_KEY_CLUMPSY, UI_KEY_CLUMPSGEOX, UI_KEY_CLUMPSGEOY, UI_KEY_W1, UI_KEY_W2, UI_KEY_GEOW1, UI_KEY_GEOW2, UI_KEY_CLUMPSW1, UI_KEY_CLUMPSW2, UI_KEY_CLUMPSGEOW1, UI_KEY_CLUMPSGEOW2, UI_KEY_CLUMPSBRIGHTNESS, UI_KEY_NORIVERBRIGHTNESS, UI_KEY_CLUMPSMAGNITUDE, UI_KEY_UPPERLIMIT, UI_KEY_RIVERAVE, UI_KEY_RIVERNUM, UI_KEY_SKY, UI_KEY_STD, UI_KEY_GEOSEMIMAJOR, UI_KEY_GEOSEMIMINOR, UI_KEY_GEOAXISRATIO, UI_KEY_GEOPOSITIONANGLE, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct mkcatalogparams *p); void ui_free_report(struct mkcatalogparams *p, struct timeval *t1); #endif ��gnuastro-0.5/bin/mkcatalog/args.h�������������������������������������������������������������������0000644�0001750�0001750�00000054302�13216276304�013770� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input options. */ { "objectsfile", UI_KEY_OBJECTSFILE, "STR", 0, "Image containing object/detection labels.", GAL_OPTIONS_GROUP_INPUT, &p->objectsfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "objectshdu", UI_KEY_OBJECTSHDU, "STR", 0, "Object image extension name or number.", GAL_OPTIONS_GROUP_INPUT, &p->objectshdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "clumpsfile", UI_KEY_CLUMPSFILE, "STR", 0, "Image containing clump labels.", GAL_OPTIONS_GROUP_INPUT, &p->clumpsfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "clumpshdu", UI_KEY_CLUMPSHDU, "STR", 0, "Clump image extension name or number.", GAL_OPTIONS_GROUP_INPUT, &p->clumpshdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "skyfile", UI_KEY_SKYFILE, "STR", 0, "Image containing sky values.", GAL_OPTIONS_GROUP_INPUT, &p->skyfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "skyhdu", UI_KEY_SKYHDU, "STR", 0, "Sky image extension name or number.", GAL_OPTIONS_GROUP_INPUT, &p->skyhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "stdfile", UI_KEY_STDFILE, "STR", 0, "Image containing sky STD values.", GAL_OPTIONS_GROUP_INPUT, &p->stdfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "stdhdu", UI_KEY_STDHDU, "STR", 0, "Sky image extension name or number.", GAL_OPTIONS_GROUP_INPUT, &p->stdhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "zeropoint", UI_KEY_ZEROPOINT, "FLT", 0, "Zeropoint magnitude of input dataset.", GAL_OPTIONS_GROUP_INPUT, &p->zeropoint, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "skysubtracted", UI_KEY_SKYSUBTRACTED, 0, 0, "Input is already sky subtracted (for S/N).", GAL_OPTIONS_GROUP_INPUT, &p->skysubtracted, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "threshold", UI_KEY_THRESHOLD, "FLT", 0, "Use pixels more than this multiple of STD.", GAL_OPTIONS_GROUP_INPUT, &p->threshold, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output. */ { "sfmagnsigma", UI_KEY_SFMAGNSIGMA, "FLT", 0, "Surface brightness multiple of Sky STD.", GAL_OPTIONS_GROUP_OUTPUT, &p->sfmagnsigma, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sfmagarea", UI_KEY_SFMAGAREA, "FLT", 0, "Surface brightness area (in arcseconds^2).", GAL_OPTIONS_GROUP_OUTPUT, &p->sfmagarea, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Upper limit magnitude configurations. */ { 0, 0, 0, 0, "Upper limit magnitude settings:", UI_GROUP_UPPERLIMIT }, { "upmaskfile", UI_KEY_UPMASKFILE, "STR", 0, "Mask image file name only for upper limit.", UI_GROUP_UPPERLIMIT, &p->upmaskfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "upmaskhdu", UI_KEY_UPMASKHDU, "STR", 0, "Mask image HDU only for upper limit.", UI_GROUP_UPPERLIMIT, &p->upmaskhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "upnum", UI_KEY_UPNUM, "INT", 0, "Number of randomly positioned samples", UI_GROUP_UPPERLIMIT, &p->upnum, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "uprange", UI_KEY_UPRANGE, "INT,INT", 0, "Range of random positions (pix) around target.", UI_GROUP_UPPERLIMIT, &p->uprange, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, { "envseed", UI_KEY_ENVSEED, 0, 0, "Use GSL_RNG_SEED environment variable for seed.", UI_GROUP_UPPERLIMIT, &p->envseed, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "upsigmaclip", UI_KEY_UPSIGMACLIP, "FLT,FLT", 0, "Sigma multiple and, tolerance or number.", UI_GROUP_UPPERLIMIT, &p->upsigmaclip, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_sigma_clip }, { "upnsigma", UI_KEY_UPNSIGMA, "FLT", 0, "Multiple of sigma to define upperlimit.", UI_GROUP_UPPERLIMIT, &p->upnsigma, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, /* ID related columns. */ { 0, 0, 0, 0, "Identifier columns", UI_GROUP_COLUMNS_IDS }, { /* `ids' is not a unique column, it is a combination of several columns. */ "ids", UI_KEY_IDS, 0, 0, "All IDs of objects and clumps.", UI_GROUP_COLUMNS_IDS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "objid", UI_KEY_OBJID, 0, 0, "Object label/ID.", UI_GROUP_COLUMNS_IDS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "hostobjid", UI_KEY_HOSTOBJID, 0, 0, "ID of object hosting this clump.", UI_GROUP_COLUMNS_IDS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "idinhostobj", UI_KEY_IDINHOSTOBJ, 0, 0, "ID of clump in host object.", UI_GROUP_COLUMNS_IDS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Position related columns (pixel). */ { 0, 0, 0, 0, "Positional columns (pixel)", UI_GROUP_COLUMNS_POSITION_PIXEL }, { "x", UI_KEY_X, 0, 0, "Flux weighted center in first FITS axis.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "y", UI_KEY_Y, 0, 0, "Flux weighted center in second FITS axis.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geox", UI_KEY_GEOX, 0, 0, "Geometric center in first FITS axis.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geoy", UI_KEY_GEOY, 0, 0, "Geometric center in second FITS axis.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpsx", UI_KEY_CLUMPSX, 0, 0, "Flux.wht center of all clumps in obj. (X).", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpsy", UI_KEY_CLUMPSY, 0, 0, "Flux.wht center of all clumps in obj. (Y).", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpsgeox", UI_KEY_CLUMPSGEOX, 0, 0, "Geometric center of all clumps in obj. (X).", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpsgeoy", UI_KEY_CLUMPSGEOY, 0, 0, "Geometric center of all clumps in obj. (Y).", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Position related columns (WCS). */ { 0, 0, 0, 0, "Positional columns (WCS)", UI_GROUP_COLUMNS_POSITION_WCS }, { "ra", UI_KEY_RA, 0, 0, "Flux weighted center right ascension.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "dec", UI_KEY_DEC, 0, 0, "Flux weighted center declination.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "w1", UI_KEY_W1, 0, 0, "Flux weighted center in first WCS axis.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "w2", UI_KEY_W2, 0, 0, "Flux weighted center in second WCS axis.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geow1", UI_KEY_GEOW1, 0, 0, "Geometric center in first WCS axis.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geow2", UI_KEY_GEOW2, 0, 0, "Geometric center in second WCS axis.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpsw1", UI_KEY_CLUMPSW1, 0, 0, "Flux.wht center of all clumps in 1st WCS.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpsw2", UI_KEY_CLUMPSW2, 0, 0, "Flux.wht center of all clumps in 2nd WCS.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpsgeow1", UI_KEY_CLUMPSGEOW1, 0, 0, "Geometric center of all clumps in 1st WCS.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpsgeow2", UI_KEY_CLUMPSGEOW2, 0, 0, "Geometric center of all clumps in 2nd WCS.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Brightness/pixel-value related columns. */ { 0, 0, 0, 0, "Brightness/magnitude related columns", UI_GROUP_COLUMNS_BRIGHTNESS }, { "brightness", UI_KEY_BRIGHTNESS, 0, 0, "Brightness (sum of pixel values).", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpbrightness", UI_KEY_CLUMPSBRIGHTNESS, 0, 0, "Brightness of clumps in an object.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "noriverbrightness", UI_KEY_NORIVERBRIGHTNESS, 0, 0, "Sky (not river) subtracted clump brightness.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "magnitude", UI_KEY_MAGNITUDE, 0, 0, "Total magnitude of objects or clumps.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "magnitudeerr", UI_KEY_MAGNITUDEERR, 0, 0, "Magnitude error of objects or clumps.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpsmagnitude", UI_KEY_CLUMPSMAGNITUDE, 0, 0, "Magnitude of all clumps in object.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "upperlimit", UI_KEY_UPPERLIMIT, 0, 0, "Upper-limit value, use other options to config.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "upperlimitmag", UI_KEY_UPPERLIMITMAG, 0, 0, "Upper-limit mag. use other options to config.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "riverave", UI_KEY_RIVERAVE, 0, 0, "Average river value surrounding a clump.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "rivernum", UI_KEY_RIVERNUM, 0, 0, "Number of river pixels around a clump.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sn", UI_KEY_SN, 0, 0, "Signal to noise ratio of objects or clumps.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sky", UI_KEY_SKY, 0, 0, "Average Sky value under this clump or object.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "std", UI_KEY_STD, 0, 0, "Average Sky standard deviation.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Morphology/shapre related columns. */ { 0, 0, 0, 0, "Morphology/shape related columns", UI_GROUP_COLUMNS_MORPHOLOGY }, { "numclumps", UI_KEY_NUMCLUMPS, 0, 0, "Number of clumps in this object.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "area", UI_KEY_AREA, 0, 0, "Number of pixels in clump or object.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumpsarea", UI_KEY_CLUMPSAREA, 0, 0, "Sum of all clump areas in an object.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "weightarea", UI_KEY_WEIGHTAREA, 0, 0, "Area used for flux weighted positions.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "semimajor", UI_KEY_SEMIMAJOR, 0, 0, "Flux weighted semi-major axis.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "semiminor", UI_KEY_SEMIMINOR, 0, 0, "Flux weighted semi-minor axis.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "axisratio", UI_KEY_AXISRATIO, 0, 0, "Flux weighted axis ratio.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "positionangle", UI_KEY_POSITIONANGLE, 0, 0, "Flux weighted position angle.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geosemimajor", UI_KEY_GEOSEMIMAJOR, 0, 0, "Geometric semi-major axis.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geosemiminor", UI_KEY_GEOSEMIMINOR, 0, 0, "Geometric semi-minor axis.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geoaxisratio", UI_KEY_GEOAXISRATIO, 0, 0, "Geometric axis ratio.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geopositionangle", UI_KEY_GEOPOSITIONANGLE, 0, 0, "Geometric position angle.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, {0} }; /* Define the child argp structure ------------------------------- NOTE: these parts can be left untouched.*/ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/authors-cite.h�����������������������������������������������������������0000644�0001750�0001750�00000005205�13211076737�015444� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX \ "Description of MakeCatalog\n" \ "--------------------------\n" \ "@ARTICLE{2016arXiv161106387A,\n" \ " author = {{Akhlaghi}, M.},\n" \ " title = \"{Separating detection and catalog production}\",\n" \ " journal = {ASP Conf. Ser. (in press)},\n" \ "archivePrefix = \"arXiv\",\n" \ " eprint = {1611.06387},\n" \ "primaryClass = \"astro-ph.IM\",\n" \ " keywords = {Astrophysics - Instrumentation and Methods for " \ "Astrophysics},\n" \ " year = 2016,\n" \ " month = nov,\n" \ " adsurl = {http://adsabs.harvard.edu/abs/2016arXiv161106387A},\n" \ " adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n" \ "};\n" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/main.h�������������������������������������������������������������������0000644�0001750�0001750�00000026042�13216276304�013760� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gsl/gsl_rng.h> #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "MakeCatalog" /* Program full name. */ #define PROGRAM_EXEC "astmkcatalog" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Multiple of given number to stop searching for upper-limit magnitude. */ #define MKCATALOG_UPPERLIMIT_STOP_MULTIP 50 #define MKCATALOG_UPPERLIMIT_MINIMUM_NUM 20 /* Intermediate/raw array elements =============================== Commonly, several high-level calculations need the same low-level measurements. So to avoid having to do these low-level calculations on each pixel multiple tiles, each thread/object will have one array of intermediate values which will be filled in the pass over the pixels. After this intermediate array is filled, and we don't need to pass over the pixels any more, we will use the intermediate values to derive the higher-level steps. According to the C standard, the first enum variable has a value of 0 (int), and when none are explicitly set (with an = sign), the values of the subsequent enum variables are 1 larger. We want column indexs that also start with zero, but setting the values by hand manually as preprocessor macros can be buggy (repeated numbers). So defining them as an enum is the perfect solution. Any future column that is to be added (or if any are removed), we (the developers) don't have to worry. --------------------- POSITIONS IN FITS standard --------------------- Like the final output, positions in this intermediate array are also in the FITS standard (fastest dimension is first). */ enum objectcols { OCOL_NUMALL, /* Number of all pixels with this label. */ OCOL_NUM, /* Number of pixels above threshold. */ OCOL_SUM, /* Sum of (value-sky) in object. */ OCOL_VX, /* Sum of (value-sky) * x. */ OCOL_VY, /* Sum of (value-sky) * y. */ OCOL_SX, /* Shift along X axis. */ OCOL_SY, /* Shift along Y axis. */ OCOL_VXX, /* Sum of (value-sky) * x * x. */ OCOL_VYY, /* Sum of (value-sky) * y * y. */ OCOL_VXY, /* Sum of (value-sky) * x * y. */ OCOL_SUMSKY, /* Sum of sky value on this object. */ OCOL_SUMSTD, /* Sum of sky STD value on this object. */ OCOL_SUMWHT, /* Sum of positive image pixels. */ OCOL_NUMWHT, /* Number of positive pixels used for wht. */ OCOL_GX, /* Geometric center of object in X. */ OCOL_GY, /* Geometric center of object in Y. */ OCOL_GXX, /* Second order geometric variable: X*X. */ OCOL_GYY, /* Second order geometric variable: Y*Y. */ OCOL_GXY, /* Second order geometric variable: X*Y. */ OCOL_UPPERLIMIT_B, /* Upper limit magnitude. */ OCOL_C_NUMALL, /* Value independent no. of pixels in clumps.*/ OCOL_C_NUM, /* Area of clumps in this object. */ OCOL_C_SUM, /* Brightness in object clumps. */ OCOL_C_VX, /* Sum of (value-sky)*x on clumps. */ OCOL_C_VY, /* Sum of (value-sky)*y on obj. clumps. */ OCOL_C_GX, /* Geometric center of clumps in object X. */ OCOL_C_GY, /* Geometric center of clumps in object Y. */ OCOL_C_SUMWHT, /* Sum of positive image pixels for wht. */ OCOL_C_NUMWHT, /* Num of positive image pixels for wht. */ OCOL_NUMCOLS, /* SHOULD BE LAST: total number of columns. */ }; enum clumpcols { CCOL_NUMALL, /* Area of clump irrespective of threshold. */ CCOL_NUM, /* Area of this clump. */ CCOL_VX, /* Sum of (value-sky) * x. */ CCOL_VY, /* Sum of (value-sky) * y. */ CCOL_VXX, /* Sum of flux*x*x of this clump. */ CCOL_VYY, /* Sum of flux*y*y of this clump. */ CCOL_VXY, /* Sum of flux*x*y of this clump. */ CCOL_SUM, /* River subtracted brightness. */ CCOL_RIV_SUM, /* Sum of rivers around clump. */ CCOL_RIV_NUM, /* Num river pixels around this clump. */ CCOL_SUMSKY, /* Sum of sky value on this object. */ CCOL_SUMSTD, /* Sum of sky STD value on this object. */ CCOL_SUMWHT, /* Sum of positive image pixels for wht. */ CCOL_NUMWHT, /* Num of positive image pixels for wht. */ CCOL_GX, /* Geometric center of clump in X. */ CCOL_GY, /* Geometric center of clump in Y. */ CCOL_GXX, /* Second order geometric moment. */ CCOL_GYY, /* Second order geometric moment. */ CCOL_GXY, /* Second order geometric moment. */ CCOL_UPPERLIMIT_B, /* Upper limit magnitude. */ CCOL_NUMCOLS, /* SHOULD BE LAST: total number of columns. */ }; /* Main program parameters structure */ struct mkcatalogparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_list_i32_t *columnids; /* The desired column codes. */ char *inputname; /* Input filename. */ char *objectsfile; /* File name of objects file. */ char *objectshdu; /* HDU of objects image. */ char *clumpsfile; /* File name of objects file. */ char *clumpshdu; /* HDU of objects image. */ char *skyfile; /* File name of sky file. */ char *skyhdu; /* HDU of sky image. */ char *stdfile; /* File name of sky STD file. */ char *stdhdu; /* HDU of sky STD image. */ float zeropoint; /* Zero-point magnitude of object. */ uint8_t skysubtracted; /* If image is already sky subtracted. */ float threshold; /* Only use values above this threshold.*/ float sfmagnsigma; /* Surface brightness multiple of sigma.*/ float sfmagarea; /* Surface brightness area (arcsec^2). */ char *upmaskfile; /* Name of upper limit mask file. */ char *upmaskhdu; /* HDU of upper limit mask file. */ size_t upnum; /* Number of upper-limit random samples.*/ size_t *uprange; /* Range of random positions about target. */ uint8_t envseed; /* Use the environment for random seed. */ double upsigmaclip[2]; /* Sigma clip to measure upper limit. */ float upnsigma; /* Multiple of sigma to define up-lim. */ /* Internal. */ time_t rawtime; /* Starting time of the program. */ gal_data_t *input; /* Input. */ gal_data_t *objects; /* Object labels. */ gal_data_t *clumps; /* Clump labels. */ gal_data_t *sky; /* Sky. */ gal_data_t *std; /* Sky standard deviation. */ gal_data_t *upmask; /* Upper limit magnitude mask. */ float minstd; /* Minimum Standard deviation value. */ float medstd; /* Median standard deviation value. */ float cpscorr; /* Counts-per-second correction. */ float detsn; /* Minimum detection S/N threshold. */ size_t numobjects; /* Number of object labels in image. */ float clumpsn; /* Clump S/N threshold. */ size_t numclumps; /* Number of clumps in image. */ gal_data_t *objectcols; /* Output columns for the objects. */ gal_data_t *clumpcols; /* Output columns for the clumps. */ gal_data_t *tiles; /* Tiles to cover each object. */ char *objectsout; /* Output objects catalog. */ char *clumpsout; /* Output clumps catalog. */ uint8_t *oiflag; /* Intermediate flags for objects. */ uint8_t *ciflag; /* Intermediate flags for clumps. */ pthread_mutex_t mutex; /* Mutex to change the total numbers. */ size_t clumprowsfilled; /* No. filled clump rows at this moment.*/ gsl_rng *rng; /* Main random number generator. */ uint64_t seed; /* Random number generator seed. */ const char *rngname; /* Name of random number generator. */ size_t rngmin; /* Minimum possible value of RNG. */ size_t rngdiff; /* Difference of RNG max and min. */ gal_data_t *wcs_vo; /* Object RA-Dec flux weighted X, Y. */ gal_data_t *wcs_vc; /* Clump RA-Dec flux weighted X, Y. */ gal_data_t *wcs_go; /* Object RA-Dec geometric X,Y. */ gal_data_t *wcs_gc; /* Clump RA-Dec geometric X, Y. */ gal_data_t *wcs_vcc; /* All clumps RA-Dec flx. wht. X, Y. */ gal_data_t *wcs_gcc; /* All clumps RA-Dec geometric X, Y. */ char **ctype; /* Type of WCS axis. */ uint8_t hasblank; /* Dataset has blank values. */ uint8_t hasmag; /* Catalog has magnitude columns. */ uint8_t upperlimit; /* Calculate upper limit magnitude. */ }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/upperlimit.c�������������������������������������������������������������0000644�0001750�0001750�00000035113�13216276304�015220� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <float.h> #include <stdlib.h> #include <gnuastro/tile.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include "main.h" #include "mkcatalog.h" /*********************************************************************/ /******************* Tiles for clumps ********************/ /*********************************************************************/ static gal_data_t * upperlimit_make_clump_tiles(struct mkcatalog_passparams *pp) { gal_data_t *input=pp->p->input; size_t ndim=input->ndim, *dsize=input->dsize; int32_t *O, *C; gal_data_t *tiles=NULL; float *I, *II, *start=input->array; size_t increment=0, num_increment=1; size_t i, d, *min, *max, width=2*ndim; size_t *coord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "coord"); size_t *minmax=gal_data_malloc_array(GAL_TYPE_SIZE_T, width*pp->clumpsinobj, __func__, "minmax"); /* Initialize the minimum and maximum position for each tile/clump. So, we'll initialize the minimum coordinates to the maximum possible `size_t' value (in `GAL_BLANK_SIZE_T') and the maximums to zero. */ for(i=0;i<pp->clumpsinobj;++i) for(d=0;d<ndim;++d) { minmax[ i * width + d ] = GAL_BLANK_SIZE_T; /* Minimum. */ minmax[ i * width + ndim + d ] = 0; /* Maximum. */ } /* Parse over the object and get the clump's minimum and maximum. */ while( pp->start_end_inc[0] + increment <= pp->start_end_inc[1] ) { /* Set the pointers for this tile. */ I = pp->st_i + increment; O = pp->st_o + increment; C = pp->st_c + increment; /* Go over the contiguous region. */ II = I + dsize[ndim-1]; do { /* Only consider clumps. */ if( *O==pp->object && *C>0 ) { /* Get the coordinates of this pixel. */ gal_dimension_index_to_coord(I-start, ndim, dsize, coord); /* Check to see if this coordinate is the smallest/largest found so far for this label. Note that labels start from 1, while indexs here start from zero. */ min = &minmax[ (*C-1) * width ]; max = &minmax[ (*C-1) * width + ndim ]; for(d=0;d<ndim;++d) { if( coord[d] < min[d] ) min[d] = coord[d]; if( coord[d] > max[d] ) max[d] = coord[d]; } } /* Increment the other pointers. */ ++O; ++C; } while(++I<II); /* Increment to the next contiguous region. */ increment += ( gal_tile_block_increment(input, dsize, num_increment++, NULL) ); } /* For a check. for(i=0;i<pp->clumpsinobj;++i) printf("%zu: (%zu, %zu) --> (%zu, %zu)\n", i+1, minmax[i*width], minmax[i*width+1], minmax[i*width+2], minmax[i*width+3]); */ /* Make the tiles. */ tiles=gal_tile_series_from_minmax(input, minmax, pp->clumpsinobj); /* Cleanup and return. */ free(coord); free(minmax); return tiles; } /*********************************************************************/ /******************* For one tile ********************/ /*********************************************************************/ static void upperlimit_random_range(struct mkcatalog_passparams *pp, gal_data_t *tile, size_t *min, size_t *max, int32_t clumplab) { struct mkcatalogparams *p=pp->p; size_t d, tstart, minext, maxext, coord[]={0,0}; size_t ndim=p->input->ndim, *dsize=p->input->dsize; /* Set the minimum and maximum acceptable value for the range. */ if(p->uprange) { tstart=gal_data_ptr_dist(tile->block->array, tile->array, p->input->type); gal_dimension_index_to_coord(tstart, ndim, dsize, coord); } /* Go over the dimensions and set the range along each dimension. */ for(d=0;d<ndim;++d) { /* If uprange is given and it is not zero, then use it, otherwise, just use the full possible range. */ if( p->uprange && p->uprange[d] ) { /* Set the minimum of the random range. Since `size_t' is always positive, to make sure the difference isn't negative, we need to convert them to integer first. */ if( (int)coord[d] - ((int)p->uprange[d])/2 > 0 ) { min[d] = coord[d]-p->uprange[d]/2; maxext = 0; } else { min[d] = 0; maxext = -1 * ((int)coord[d] - ((int)p->uprange[d])/2); } /* Set the maximum of the random range. */ if( coord[d] + p->uprange[d]/2 < dsize[d] - tile->dsize[d] ) { max[d] = coord[d] + p->uprange[d]/2; minext = 0; } else { max[d] = dsize[d] - tile->dsize[d] - 1; minext = ( (coord[d] + p->uprange[d]/2) - (dsize[d] - tile->dsize[d]) ); } /* `minadd' and `maxadd' were defined to account for the removed smaller range when an object is on the edge. Their role is to add to the other side of the range as much as possible when one side is decreased on an edge. */ if(minext) min[d] = ((int)(min[d]) - (int)minext >= 0) ? (min[d]-minext) : 0; if(maxext) max[d] = ( (max[d] + maxext < dsize[d] - tile->dsize[d]) ? (max[d] + maxext) : (dsize[d]-tile->dsize[d]-1) ); } else { min[d]=0; max[d]=dsize[d]-tile->dsize[d]-1; } /* A small sanity check. */ if( max[d]-min[d] < 2*tile->dsize[d] ) { if(clumplab) fprintf(stderr, "WARNING: object %d clump %d: range of random " "positions (%zu) along dimension %zu for upper-limit " "calculations is smaller than double of its size (%zu) " "in this dimension.\n\n", pp->object, clumplab, max[d]-min[d], ndim-d, 2*tile->dsize[d]); else fprintf(stderr, "WARNING: object %d: range of random " "positions (%zu) along dimension %zu for upper-limit " "calculations is smaller than double of its size (%zu) " "in this dimension.\n\n", pp->object, max[d]-min[d], ndim-d, 2*tile->dsize[d]); } } } /* Return a random position in the requested dimension. */ static size_t upperlimit_random_position(struct mkcatalog_passparams *pp, gal_data_t *tile, size_t dim, size_t *min, size_t *max) { size_t r; struct mkcatalogparams *p=pp->p; /* `gsl_rng_get' returns an inclusive value between the minimum and maximum of the particular generator. It may happen that the labeled region extends the full range of a dimension. In that case, the only possible starting point would be 0. */ if( (int)(p->input->dsize[dim]) - (int)(tile->dsize[dim]) > 0 ) { r=gsl_rng_get(pp->rng); /* For easy reading. */ return lrint( (float)(min[dim]) + ( (float)(r-p->rngmin)/(float)(p->rngdiff) * (float)(max[dim] - min[dim]) ) ); } else return 0; } static double upperlimit_one_tile(struct mkcatalog_passparams *pp, gal_data_t *tile, unsigned long seed, int32_t clumplab) { struct mkcatalogparams *p=pp->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; void *tarray; double sum, out; int continueparse; gal_data_t *sigclip; uint8_t *M=NULL, *st_m=NULL; float *uparr=pp->up_vals->array; float *I, *II, *SK, *st_i, *st_sky; size_t d, tcounter=0, counter=0, se_inc[2]; size_t min[2], max[2], increment, num_increment; int32_t *O, *oO, *st_o, *st_oo, *st_oc, *oC=NULL; size_t maxcount = p->upnum * MKCATALOG_UPPERLIMIT_STOP_MULTIP; size_t *rcoord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "rcoord"); /* Initializations. */ tarray=tile->array; gsl_rng_set(pp->rng, seed); /* Set the range of random values for this tile. */ upperlimit_random_range(pp, tile, min, max, clumplab); /* `se_inc' is just used temporarily, the important thing here is `st_oo'. */ st_oo = ( clumplab ? gal_tile_start_end_ind_inclusive(tile, p->objects, se_inc) : pp->st_o ); st_oc = clumplab ? (int32_t *)(p->clumps->array) + se_inc[0] : NULL; /* Continue measuring randomly until we get the desired total number. */ while(tcounter<maxcount && counter<p->upnum) { /* Get the random coordinates. */ for(d=0;d<ndim;++d) rcoord[d] = upperlimit_random_position(pp, tile, d, min, max); /* Set the tile's new starting pointer. */ tile->array = gal_data_ptr_increment(p->input->array, gal_dimension_coord_to_index(ndim, dsize, rcoord), p->input->type); /* Starting and ending coordinates for this random position, note that in `pp' we have the starting and ending coordinates of the actual tile. */ increment = 0; num_increment = 1; continueparse = 1; sum = 0.0f; /* Starting pointers for the random tile. */ st_i = gal_tile_start_end_ind_inclusive(tile, p->input, se_inc); st_o = (int32_t *)(p->objects->array) + se_inc[0]; st_sky = (float *)(p->sky->array) + se_inc[0]; if(p->upmask) st_m = (uint8_t *)(p->upmask->array) + se_inc[0]; /* Parse over this object/clump. */ while( se_inc[0] + increment <= se_inc[1] ) { /* Set the pointers. */ I = st_i + increment; /* Random tile. */ SK = st_sky + increment; /* Random tile. */ O = st_o + increment; /* Random tile. */ if(st_m) M = st_m + increment; /* Random tile. */ oO = st_oo + increment; /* Original tile. */ if(clumplab) oC = st_oc + increment; /* Original tile. */ /* Parse over this contiguous region, similar to the first and second pass functions. */ II = I + tile->dsize[ndim-1]; do { /* Only use pixels over this object/clump. */ if( *oO==pp->object && ( oC==NULL || clumplab==0 || *oC==clumplab ) ) { if( *O || (M && *M) || ( p->hasblank && isnan(*I) ) ) continueparse=0; else sum += *I-*SK; } /* Increment the other pointers. */ ++SK; ++O; ++oO; if(oC) ++oC; } while(continueparse && ++I<II); /* Increment to the next contiguous region of this tile. */ if(continueparse) increment += ( gal_tile_block_increment(p->input, dsize, num_increment++, NULL) ); else break; } /* Further processing is only necessary if this random tile actually covered the sky region. */ if(continueparse) uparr[ counter++ ] = sum; /* Increment the total-counter. */ ++tcounter; } /* Calculate the standard deviation of this distribution. */ if(counter==p->upnum) { sigclip=gal_statistics_sigma_clip(pp->up_vals, p->upsigmaclip[0], p->upsigmaclip[1], 1, 1); out = ((float *)(sigclip->array))[3] * p->upnsigma; } else out=NAN; /* Reset the tile's array pointer, clean up and return. */ tile->array=tarray; free(rcoord); return out; } /*********************************************************************/ /******************* High level funciton ********************/ /*********************************************************************/ void upperlimit_calculate(struct mkcatalog_passparams *pp) { size_t i; double *ci; unsigned long seed; gal_data_t *clumptiles; struct mkcatalogparams *p=pp->p; /* First find the upper limit magnitude for this object. */ pp->oi[OCOL_UPPERLIMIT_B] = upperlimit_one_tile(pp, pp->tile, p->seed+pp->object, 0); /* If a clumps image is present (a clump catalog is requested( and this object has clumps, then find the upper limit magnitude for the clumps within this object. */ if(p->clumps && pp->clumpsinobj) { /* Make tiles covering the clumps. */ clumptiles=upperlimit_make_clump_tiles(pp); /* Go over all the clumps. The random number generator seed for each clump/object has to be unique, but also reproducible (given the intial seed and identical inputs). So we have defined it based on the total number of objects and clumps and this object and clump's IDs. */ for(i=0;i<pp->clumpsinobj;++i) { ci=&pp->ci[ i * CCOL_NUMCOLS ]; seed = p->seed + p->numobjects + p->numclumps * pp->object + i; ci[CCOL_UPPERLIMIT_B] = upperlimit_one_tile(pp, &clumptiles[i], seed, i+1); } /* Clean up the clump tiles. */ gal_data_array_free(clumptiles, pp->clumpsinobj, 0); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/columns.c����������������������������������������������������������������0000644�0001750�0001750�00000153301�13216276304�014506� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "mkcatalog.h" #include "ui.h" #include "columns.h" /******************************************************************/ /******************* Intermediate arrays ******************/ /******************************************************************/ /* Allocate RA-DEC internal arrays. These arrays are defined to keep all the positions in one place and do the RA-DEC conversion once in the end. They are all allocated together, but we don't know if RA is requested first or Dec or if they are requested multiple times. So before the allocation, we'll check the first one. The space that is allocated in `columns_define_alloc' is for the final values that are written in the output file. */ static void columns_alloc_radec(struct mkcatalogparams *p) { size_t i; /* For objects. */ if(p->wcs_vo==NULL) for(i=0;i<p->input->ndim;++i) gal_list_data_add_alloc(&p->wcs_vo, NULL, GAL_TYPE_FLOAT64, 1, &p->numobjects, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); /* For clumps */ if(p->clumps && p->wcs_vc==NULL) for(i=0;i<p->input->ndim;++i) gal_list_data_add_alloc(&p->wcs_vc, NULL, GAL_TYPE_FLOAT64, 1, &p->numclumps, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); } /* Similar to `columns_alloc_radec'. */ static void columns_alloc_georadec(struct mkcatalogparams *p) { size_t i; /* For objects. */ if(p->wcs_go==NULL) for(i=0;i<p->input->ndim;++i) gal_list_data_add_alloc(&p->wcs_go, NULL, GAL_TYPE_FLOAT64, 1, &p->numobjects, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); /* For clumps */ if(p->clumps && p->wcs_gc==NULL) for(i=0;i<p->input->ndim;++i) gal_list_data_add_alloc(&p->wcs_gc, NULL, GAL_TYPE_FLOAT64, 1, &p->numclumps, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); } /* Similar to `columns_alloc_radec'. */ static void columns_alloc_clumpsradec(struct mkcatalogparams *p) { size_t i; if(p->wcs_vcc==NULL) for(i=0;i<p->input->ndim;++i) gal_list_data_add_alloc(&p->wcs_vcc, NULL, GAL_TYPE_FLOAT64, 1, &p->numobjects, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); } /* Similar to `columns_alloc_radec'. */ static void columns_alloc_clumpsgeoradec(struct mkcatalogparams *p) { size_t i; if(p->wcs_gcc==NULL) for(i=0;i<p->input->ndim;++i) gal_list_data_add_alloc(&p->wcs_gcc, NULL, GAL_TYPE_FLOAT64, 1, &p->numobjects, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); } /* Set pointers to fascilitate filling in the values. */ #define SET_WCS_PREPARE(ARR, LIST, ARRNAME) { \ d=0; \ errno=0; \ (ARR)=malloc(p->input->ndim * sizeof (ARR) ); \ if( (ARR)==NULL ) \ error(EXIT_FAILURE, 0, "%s: %zu bytes for %s", __func__, \ p->input->ndim * sizeof (ARR), ARRNAME); \ for(tmp=(LIST);tmp!=NULL;tmp=tmp->next) (ARR)[d++]=tmp->array; \ } static void columns_set_wcs_pointers(struct mkcatalogparams *p, double ***vo, double ***vc, double ***go, double ***gc, double ***vcc, double ***gcc) { size_t d; gal_data_t *tmp; if(p->wcs_vo) SET_WCS_PREPARE(*vo, p->wcs_vo, "vo" ); if(p->wcs_vc) SET_WCS_PREPARE(*vc, p->wcs_vc, "vc" ); if(p->wcs_go) SET_WCS_PREPARE(*go, p->wcs_go, "go" ); if(p->wcs_gc) SET_WCS_PREPARE(*gc, p->wcs_gc, "gc" ); if(p->wcs_vcc) SET_WCS_PREPARE(*vcc, p->wcs_vcc, "vcc"); if(p->wcs_gcc) SET_WCS_PREPARE(*gcc, p->wcs_gcc, "gcc"); } /******************************************************************/ /********** Column definition/allocation ***************/ /******************************************************************/ static void columns_wcs_preparation(struct mkcatalogparams *p) { size_t i; gal_list_i32_t *colcode; int continue_wcs_check=1; /* Make sure a WCS structure is present if we need it. */ for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) { if(continue_wcs_check) { switch(colcode->v) { /* High-level. */ case UI_KEY_RA: case UI_KEY_DEC: /* Low-level. */ case UI_KEY_W1: case UI_KEY_W2: case UI_KEY_GEOW1: case UI_KEY_GEOW2: case UI_KEY_CLUMPSW1: case UI_KEY_CLUMPSW2: case UI_KEY_CLUMPSGEOW1: case UI_KEY_CLUMPSGEOW2: if(p->input->wcs) continue_wcs_check=0; else error(EXIT_FAILURE, 0, "input doesn't have WCS meta-data for " "defining world coordinates (like RA and Dec). Atleast " "one of the requested columns requires this " "information"); break; } } else break; } /* Convert the high-level WCS columns to low-level ones. */ for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) switch(colcode->v) { case UI_KEY_RA: case UI_KEY_DEC: /* Check all the CTYPES. */ for(i=0;i<p->input->ndim;++i) if( !strcmp(p->ctype[i], colcode->v==UI_KEY_RA ? "RA" : "DEC") ) { colcode->v = i==0 ? UI_KEY_W1 : UI_KEY_W2; break; } /* Make sure it actually existed. */ if(i==p->input->ndim) error(EXIT_FAILURE, 0, "%s (hdu: %s): %s not present in any of " "the WCS axis types (CTYPE)", p->inputname, p->cp.hdu, colcode->v==UI_KEY_RA ? "RA" : "DEC"); break; } } /* Set the necessary parameters for each output column and allocate the space necessary to keep the values. */ void columns_define_alloc(struct mkcatalogparams *p) { gal_list_i32_t *colcode; gal_list_str_t *strtmp, *noclumpimg=NULL; int disp_fmt=0, disp_width=0, disp_precision=0; char *name=NULL, *unit=NULL, *ocomment=NULL, *ccomment=NULL; uint8_t otype=GAL_TYPE_INVALID, ctype=GAL_TYPE_INVALID, *oiflag, *ciflag; /* If there is any columns that need WCS, the input image needs to have a WCS in its headers. So before anything, we need to check if a WCS is present or not. This can't be done after the initial setting of column properties because the WCS-related columns use information that is based on it (for units and names). */ columns_wcs_preparation(p); /* Allocate the array for which intermediate parameters are necessary. The basic issue is that higher-level calculations require a smaller domain of raw measurements. So to avoid having to calculate something multiple times, each parameter will flag the intermediate parameters it requires in these arrays. */ oiflag = p->oiflag = gal_data_malloc_array(GAL_TYPE_UINT8, OCOL_NUMCOLS, __func__, "oiflag"); ciflag = p->ciflag = gal_data_malloc_array(GAL_TYPE_UINT8, CCOL_NUMCOLS, __func__, "ciflag"); /* Allocate the columns. */ for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) { /* Set the column-specific parameters, please follow the same order as `args.h'. IMPORTANT: we want the names to be the same as the option names. Note that zero `disp_' variables will be automatically determined.*/ switch(colcode->v) { case UI_KEY_OBJID: name = "OBJ_ID"; unit = "counter"; ocomment = "Object identifier."; ccomment = NULL; otype = GAL_TYPE_INT32; /* Same type as clumps image. */ ctype = GAL_TYPE_INVALID; disp_fmt = 0; disp_width = 6; disp_precision = 0; /* Is an internal parameter. */ break; case UI_KEY_HOSTOBJID: name = "HOST_OBJ_ID"; unit = "counter"; ocomment = NULL; ccomment = "Object identifier hosting this clump."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; /* Is an internal parameter. */ break; case UI_KEY_IDINHOSTOBJ: name = "ID_IN_HOST_OBJ"; unit = "counter"; ocomment = NULL; ccomment = "ID of clump in its host object."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; /* Is an internal parameter. */ break; case UI_KEY_NUMCLUMPS: name = "NUM_CLUMPS"; unit = "counter"; ocomment = "Number of clumps in this object."; ccomment = NULL; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INVALID; disp_fmt = 0; disp_width = 5; disp_precision = 0; /* Is an internal parameter. */ break; case UI_KEY_AREA: name = "AREA"; unit = "counter"; ocomment = "Number of pixels covered."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 5; disp_precision = 0; oiflag[ OCOL_NUMALL ] = 1; ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_CLUMPSAREA: name = "CLUMPS_AREA"; unit = "counter"; ocomment = "Total number of clump pixels in object."; ccomment = NULL; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INVALID; disp_fmt = 0; disp_width = 5; disp_precision = 0; oiflag[ OCOL_C_NUM ] = 1; break; case UI_KEY_WEIGHTAREA: name = "WEIGHT_AREA"; unit = "counter"; ocomment = "Area used for flux-weighted positions."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 5; disp_precision = 0; oiflag[ OCOL_NUMWHT ] = 1; ciflag[ CCOL_NUMWHT ] = 1; break; case UI_KEY_X: name = "X"; unit = "pixel"; ocomment = "Flux weighted center (FITS axis 1)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_VX ] = 1; ciflag[ CCOL_VX ] = 1; break; case UI_KEY_Y: name = "Y"; unit = "pixel"; ocomment = "Flux weighted center (FITS axis 2)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_VY ] = 1; ciflag[ CCOL_VY ] = 1; break; case UI_KEY_GEOX: name = "GEO_X"; unit = "pixel"; ocomment = "Geometric center (FITS axis 1)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_GX ] = 1; ciflag[ CCOL_GX ] = 1; break; case UI_KEY_GEOY: name = "GEO_Y"; unit = "pixel"; ocomment = "Geometric center (FITS axis 2)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_GY ] = 1; ciflag[ CCOL_GY ] = 1; break; case UI_KEY_CLUMPSX: name = "CLUMPS_X"; unit = "pixel"; ocomment = "Flux weighted center of clumps (FITS axis 1)."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_C_VX ] = 1; break; case UI_KEY_CLUMPSY: name = "CLUMPS_Y"; unit = "pixel"; ocomment = "Flux weighted center of clumps (FITS axis 2)."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_C_VY ] = 1; break; case UI_KEY_CLUMPSGEOX: name = "CLUMPS_GEO_X"; unit = "pixel"; ocomment = "Geometric center of clumps (FITS axis 1)."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_C_GX ] = 1; break; case UI_KEY_CLUMPSGEOY: name = "CLUMPS_GEO_Y"; unit = "pixel"; ocomment = "Geometric center of clumps (FITS axis 2)."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_C_GY ] = 1; break; case UI_KEY_W1: name = p->ctype[0]; unit = p->input->wcs->cunit[0]; ocomment = "Flux weighted center (WCS axis 1)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_FLOAT64; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 13; disp_precision = 7; oiflag[ OCOL_VX ] = 1; oiflag[ OCOL_VY ] = 1; oiflag[ CCOL_VX ] = 1; oiflag[ CCOL_VY ] = 1; columns_alloc_radec(p); break; case UI_KEY_W2: name = p->ctype[1]; unit = p->input->wcs->cunit[1]; ocomment = "Flux weighted center (WCS axis 2)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_FLOAT64; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 13; disp_precision = 7; oiflag[ OCOL_VX ] = 1; oiflag[ OCOL_VY ] = 1; oiflag[ CCOL_VX ] = 1; oiflag[ CCOL_VY ] = 1; columns_alloc_radec(p); break; case UI_KEY_GEOW1: name = gal_checkset_malloc_cat("GEO_", p->ctype[0]); unit = p->input->wcs->cunit[0]; ocomment = "Geometric center (WCS axis 1)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_FLOAT64; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 13; disp_precision = 7; oiflag[ OCOL_GX ] = 1; oiflag[ OCOL_GY ] = 1; ciflag[ CCOL_GX ] = 1; ciflag[ CCOL_GY ] = 1; columns_alloc_georadec(p); break; case UI_KEY_GEOW2: name = gal_checkset_malloc_cat("GEO_", p->ctype[1]); unit = p->input->wcs->cunit[1]; ocomment = "Geometric center (WCS axis 2)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_FLOAT64; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 13; disp_precision = 7; oiflag[ OCOL_GX ] = 1; oiflag[ OCOL_GY ] = 1; ciflag[ CCOL_GX ] = 1; ciflag[ CCOL_GY ] = 1; columns_alloc_georadec(p); break; case UI_KEY_CLUMPSW1: name = gal_checkset_malloc_cat("CLUMPS_", p->ctype[0]); unit = p->input->wcs->cunit[0]; ocomment = "Flux.wht center of all clumps (WCS axis 1)."; ccomment = NULL; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 13; disp_precision = 7; oiflag[ OCOL_C_VX ] = 1; oiflag[ OCOL_C_VY ] = 1; columns_alloc_clumpsradec(p); break; case UI_KEY_CLUMPSW2: name = gal_checkset_malloc_cat("CLUMPS_", p->ctype[1]); unit = p->input->wcs->cunit[1]; ocomment = "Flux.wht center of all clumps (WCS axis 2)."; ccomment = NULL; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 15; disp_precision = 7; oiflag[ OCOL_C_VX ] = 1; oiflag[ OCOL_C_VY ] = 1; columns_alloc_clumpsradec(p); break; case UI_KEY_CLUMPSGEOW1: name = gal_checkset_malloc_cat("CLUMPS_GEO", p->ctype[0]); unit = p->input->wcs->cunit[0]; ocomment = "Geometric center of all clumps (WCS axis 1)."; ccomment = NULL; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 13; disp_precision = 7; oiflag[ OCOL_C_GX ] = 1; oiflag[ OCOL_C_GY ] = 1; columns_alloc_clumpsgeoradec(p); break; case UI_KEY_CLUMPSGEOW2: name = gal_checkset_malloc_cat("CLUMPS_GEO", p->ctype[1]); unit = p->input->wcs->cunit[1]; ocomment = "Geometric center of all clumps (WCS axis 2)."; ccomment = NULL; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 13; disp_precision = 7; oiflag[ OCOL_C_GX ] = 1; oiflag[ OCOL_C_GY ] = 1; columns_alloc_clumpsgeoradec(p); break; case UI_KEY_BRIGHTNESS: name = "BRIGHTNESS"; unit = p->input->unit ? p->input->unit : "pixelunit"; ocomment = "Brightness (sum of sky subtracted values)."; ccomment = "Brightness (sum of pixels subtracted by rivers)."; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 4; oiflag[ OCOL_SUM ] = 1; ciflag[ CCOL_SUM ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_CLUMPSBRIGHTNESS: name = "CLUMPS_BRIGHTNESS"; unit = p->input->unit ? p->input->unit : "pixelunit"; ocomment = "Brightness (sum of pixel values) in clumps."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 4; oiflag[ OCOL_C_SUM ] = 1; break; case UI_KEY_NORIVERBRIGHTNESS: name = "NO_RIVER_BRIGHTNESS"; unit = p->input->unit ? p->input->unit : "pixelunit"; ocomment = NULL; ccomment = "Brightness (sum of sky subtracted values)."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 4; ciflag[ CCOL_SUM ] = 1; break; case UI_KEY_MAGNITUDE: name = "MAGNITUDE"; unit = "log"; ocomment = "Magnitude."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 8; disp_precision = 3; oiflag[ OCOL_SUM ] = 1; ciflag[ CCOL_SUM ] = 1; p->hasmag = 1; break; case UI_KEY_MAGNITUDEERR: name = "MAGNITUDE_ERR"; unit = "log"; ocomment = "Error in measuring magnitude."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 8; disp_precision = 3; oiflag[ OCOL_SUMSTD ] = 1; oiflag[ OCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = 1; ciflag[ CCOL_SUMSTD ] = 1; ciflag[ CCOL_NUM ] = 1; ciflag[ CCOL_SUM ] = 1; break; case UI_KEY_CLUMPSMAGNITUDE: name = "CLUMPS_MAGNITUDE"; unit = "log"; ocomment = "Magnitude in all clumps."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 8; disp_precision = 3; oiflag[ OCOL_C_SUM ] = 1; p->hasmag = 1; break; case UI_KEY_UPPERLIMIT: name = "UPPERLIMIT"; unit = p->input->unit; ocomment = "Upper limit value (random positionings)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 8; disp_precision = 3; p->upperlimit = 1; /* Doesn't need per-pixel calculations. */ break; case UI_KEY_UPPERLIMITMAG: name = "UPPERLIMIT_MAG"; unit = "log"; ocomment = "Upper limit magnitude (random positionings)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 8; disp_precision = 3; p->upperlimit = 1; p->hasmag = 1; /* Doesn't need per-pixel calculations. */ break; case UI_KEY_RIVERAVE: name = "RIVER_AVE"; unit = p->input->unit ? p->input->unit : "pixelunit"; ocomment = NULL; ccomment = "Average river value surrounding this clump."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 4; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_RIVERNUM: name = "RIVER_NUM"; unit = "counter"; ocomment = NULL; ccomment = "Number of river pixels around this clump."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 5; disp_precision = 0; ciflag[ CCOL_RIV_NUM ] = 1; break; case UI_KEY_SN: name = "SN"; unit = "ratio"; ocomment = "Signal to noise ratio."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_SUMSTD ] = 1; oiflag[ OCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = 1; ciflag[ CCOL_SUMSTD ] = 1; ciflag[ CCOL_NUM ] = 1; ciflag[ CCOL_SUM ] = 1; break; case UI_KEY_SKY: name = "SKY"; unit = p->input->unit ? p->input->unit : "pixelunit"; ocomment = "Average input sky value."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 4; oiflag[ OCOL_NUM ] = 1; oiflag[ OCOL_SUMSKY ] = 1; ciflag[ CCOL_NUM ] = 1; ciflag[ CCOL_SUMSKY ] = 1; break; case UI_KEY_STD: name = "STD"; unit = p->input->unit ? p->input->unit : "pixelunit"; ocomment = "Average of input standard deviation."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 4; oiflag[ OCOL_NUM ] = 1; oiflag[ OCOL_SUMSTD ] = 1; ciflag[ CCOL_NUM ] = 1; ciflag[ CCOL_SUMSTD ] = 1; break; case UI_KEY_SEMIMAJOR: name = "SEMI_MAJOR"; unit = "pixel"; ocomment = "Flux weighted semi-major axis."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_VXX ] = 1; oiflag[ OCOL_VYY ] = 1; oiflag[ OCOL_VXY ] = 1; ciflag[ CCOL_VXX ] = 1; ciflag[ CCOL_VYY ] = 1; ciflag[ CCOL_VXY ] = 1; break; case UI_KEY_SEMIMINOR: name = "SEMI_MINOR"; unit = "pixel"; ocomment = "Flux weighted semi-minor axis."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_VXX ] = 1; oiflag[ OCOL_VYY ] = 1; oiflag[ OCOL_VXY ] = 1; ciflag[ CCOL_VXX ] = 1; ciflag[ CCOL_VYY ] = 1; ciflag[ CCOL_VXY ] = 1; break; case UI_KEY_AXISRATIO: name = "AXIS_RATIO"; unit = "ratio"; ocomment = "Flux weighted axis ratio (minor/major)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 7; disp_precision = 3; oiflag[ OCOL_VXX ] = 1; oiflag[ OCOL_VYY ] = 1; oiflag[ OCOL_VXY ] = 1; ciflag[ CCOL_VXX ] = 1; ciflag[ CCOL_VYY ] = 1; ciflag[ CCOL_VXY ] = 1; break; case UI_KEY_POSITIONANGLE: name = "POSITION_ANGLE"; unit = "degrees"; ocomment = "Position angle."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_VXX ] = 1; oiflag[ OCOL_VYY ] = 1; oiflag[ OCOL_VXY ] = 1; ciflag[ CCOL_VXX ] = 1; ciflag[ CCOL_VYY ] = 1; ciflag[ CCOL_VXY ] = 1; break; case UI_KEY_GEOSEMIMAJOR: name = "GEO_SEMI_MAJOR"; unit = "pixel"; ocomment = "Geometric semi-major axis."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = 1; ciflag[ CCOL_GXX ] = 1; ciflag[ CCOL_GYY ] = 1; ciflag[ CCOL_GXY ] = 1; break; case UI_KEY_GEOSEMIMINOR: name = "GEO_SEMI_MINOR"; unit = "pixel"; ocomment = "Geometric semi-minor axis."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = 1; ciflag[ CCOL_GXX ] = 1; ciflag[ CCOL_GYY ] = 1; ciflag[ CCOL_GXY ] = 1; break; case UI_KEY_GEOAXISRATIO: name = "GEO_AXIS_RATIO"; unit = "ratio"; ocomment = "Geometric axis ratio (minor/major)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 7; disp_precision = 3; oiflag[ OCOL_VXX ] = 1; oiflag[ OCOL_VYY ] = 1; oiflag[ OCOL_VXY ] = 1; ciflag[ CCOL_VXX ] = 1; ciflag[ CCOL_VYY ] = 1; ciflag[ CCOL_VXY ] = 1; break; case UI_KEY_GEOPOSITIONANGLE: name = "GEO_POSITION_ANGLE"; unit = "degrees"; ocomment = "Geometric Position angle."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FLOAT; disp_width = 10; disp_precision = 3; oiflag[ OCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = 1; ciflag[ CCOL_GXX ] = 1; ciflag[ CCOL_GYY ] = 1; ciflag[ CCOL_GXY ] = 1; break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to fix " "the problem. The code %d is not an internally recognized " "column code", __func__, PACKAGE_BUGREPORT, colcode->v); } /* If this is an objects column, add it to the list of columns. We will be using the `status' element to keep the MakeCatalog code for the columns. */ if(otype!=GAL_TYPE_INVALID) { gal_list_data_add_alloc(&p->objectcols, NULL, otype, 1, &p->numobjects, NULL, 0, p->cp.minmapsize, name, unit, ocomment); p->objectcols->status = colcode->v; p->objectcols->disp_fmt = disp_fmt; p->objectcols->disp_width = disp_width; p->objectcols->disp_precision = disp_precision; } /* Similar to the objects column above but for clumps, but since the clumps image is optional, we need a further check before actually allocating the column. */ if(ctype!=GAL_TYPE_INVALID) { /* A clumps image has been given, so allocate space for this column. */ if(p->clumps) { gal_list_data_add_alloc(&p->clumpcols, NULL, ctype, 1, &p->numclumps, NULL, 0, p->cp.minmapsize, name, unit, ccomment); p->clumpcols->status = colcode->v; p->clumpcols->disp_fmt = disp_fmt; p->clumpcols->disp_width = disp_width; p->clumpcols->disp_precision = disp_precision; } /* If this is a clumps-only column and no clumps image was given. Add the column to the list of similar columns to inform the user. */ else if(otype==GAL_TYPE_INVALID) gal_list_str_add(&noclumpimg, name, 1); } } /* If a warning for clumps columns and no clumps image is necessary make the warning. */ if(noclumpimg) { gal_list_str_reverse(&noclumpimg); fprintf(stderr, "\n-------\n" "WARNING: the following column(s) are unique to " "clumps (not objects), but the objects image doesn't have " " `WCLUMPS' keyword. So these requested columns will be " "ignored.\n\n"); for(strtmp=noclumpimg; strtmp!=NULL; strtmp=strtmp->next) fprintf(stderr, "\t%s\n", strtmp->v); gal_list_str_free(noclumpimg, 1); fprintf(stderr, "\n-------\n"); } /* Free the general columns information because it is no longe needed, we'll set it back to NULL afterwards so it is not mistakenly used. */ gal_list_i32_free(p->columnids); p->columnids=NULL; } /******************************************************************/ /********** Column calculation ***************/ /******************************************************************/ #define MKC_RATIO(TOP,BOT) ( (BOT)!=0.0f ? (TOP)/(BOT) : NAN ) #define MKC_MAG(B) ( ((B)>0) ? -2.5f * log10(B) + p->zeropoint : NAN ) /* Calculate the Signal to noise ratio for the object. */ static double columns_sn(struct mkcatalogparams *p, double *row, int o0c1) { double var, sn, std, Ni, I, O; /* Get all the values as averages (per pixel). */ Ni = row[ o0c1 ? CCOL_NUM : OCOL_NUM ]; I = MKC_RATIO( row[ o0c1 ? CCOL_SUM : OCOL_SUM ], Ni ); std = MKC_RATIO( row[ o0c1 ? CCOL_SUMSTD : OCOL_SUMSTD ], Ni ); var = (p->skysubtracted ? 2.0f : 1.0f) * std * std; /* Calculate the S/N. Note that when grown clumps are requested from NoiseChisel, some "clumps" will completely cover their objects and there will be no rivers. So if this is a clump, and the river area is 0, we should treat the S/N as a an object. */ if( o0c1 && row[ CCOL_RIV_NUM ] ) { /* If the Sky is already subtracted, the varience should be counted two times. */ O = row[ CCOL_RIV_SUM ] / row[ CCOL_RIV_NUM ]; /* Outside. */ sn = ( (I-O)>0 ? ( sqrt(Ni/p->cpscorr) * (I-O) / sqrt( (I>0?I:-1*I) + (O>0?O:-1*O) + var ) ) : NAN ); } else sn = I>0 ? sqrt(Ni/p->cpscorr) * I / sqrt( (I>0?I:-1*I) + var ) : NAN; /* Return the derived value. */ return sn; } /* Do the second order calculations, see "Measuring elliptical parameters" section of the book/manual for a thorough explanation of the derivation. */ static double columns_second_order(struct mkcatalog_passparams *pp, double *row, int key, int o0c1) { double x=NAN, y=NAN, xx=NAN, yy=NAN, xy=NAN; double denom, kx=pp->shift[1]+1, ky=pp->shift[0]+1; /* Preparations. */ switch(key) { /* Brightness weighted. */ case UI_KEY_SEMIMAJOR: case UI_KEY_SEMIMINOR: case UI_KEY_POSITIONANGLE: /* Denominator (to be divided). */ denom = row[ o0c1 ? CCOL_SUMWHT : OCOL_SUMWHT ]; /* First order. */ x = MKC_RATIO( row[ o0c1 ? CCOL_VX : OCOL_VX ], denom ); y = MKC_RATIO( row[ o0c1 ? CCOL_VY : OCOL_VY ], denom ); /* Second order. */ xx = ( MKC_RATIO( row[ o0c1 ? CCOL_VXX : OCOL_VXX ], denom ) - (x-kx) * (x-kx) ); yy = ( MKC_RATIO( row[ o0c1 ? CCOL_VYY : OCOL_VYY ], denom ) - (y-ky) * (y-ky) ); xy = ( MKC_RATIO( row[ o0c1 ? CCOL_VXY : OCOL_VXY ], denom ) - (x-kx) * (y-ky) ); break; /* Geometric. */ case UI_KEY_GEOSEMIMAJOR: case UI_KEY_GEOSEMIMINOR: case UI_KEY_GEOPOSITIONANGLE: /* Denominator (to be divided). */ denom = row[ o0c1 ? CCOL_NUMALL : OCOL_NUMALL ]; /* First order. */ x = MKC_RATIO( row[ o0c1 ? CCOL_GX : OCOL_GX ], denom ); y = MKC_RATIO( row[ o0c1 ? CCOL_GY : OCOL_GY ], denom ); /* Second order. */ xx = ( MKC_RATIO( row[ o0c1 ? CCOL_GXX : OCOL_GXX ], denom ) - (x-kx) * (x-kx) ); yy = ( MKC_RATIO( row[ o0c1 ? CCOL_GYY : OCOL_GYY ], denom ) - (y-ky) * (y-ky) ); xy = ( MKC_RATIO( row[ o0c1 ? CCOL_GXY : OCOL_GXY ], denom ) - (x-kx) * (y-ky) ); break; /* Error. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Code %d not a recognized key", __func__, key); } /* Return the output. */ switch(key) { /* Semi-major axis. */ case UI_KEY_SEMIMAJOR: case UI_KEY_GEOSEMIMAJOR: return sqrt( ( xx + yy ) / 2 + sqrt( (xx - yy)/2 * (xx - yy)/2 + xy * xy ) ); /* Semi-minor axis. */ case UI_KEY_SEMIMINOR: case UI_KEY_GEOSEMIMINOR: /*printf("\nhere\n");*/ return sqrt( ( xx + yy )/2 - sqrt( (xx - yy)/2 * (xx - yy)/2 + xy * xy ) ); /* Position angle. */ case UI_KEY_POSITIONANGLE: case UI_KEY_GEOPOSITIONANGLE: return 0.5f * atan2(2 * xy, xx - yy) * 180/M_PI; } /* Control should not reach here! If it does, its a bug, so abort and let the user know. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s, so we can " "address the problem. Control should not have reached the end of " "this function", __func__, PACKAGE_BUGREPORT); return NAN; } /* The magnitude error is directly derivable from the S/N: To derive the error in measuring the magnitude from the S/N, let's take `F' as the flux, `Z' is the zeropoint, `M' is the magnitude, `S' is the S/N, and `D' to stand for capital delta (or error in a value) then from `M = -2.5*log10(F) + Z' we get the following equation after calculating the derivative with respect to F. `dM/df = -2.5 * ( 1 / ( F * ln(10) ) )' From the Tailor series, `DM' can be written as: `DM = dM/dF * DF' So `DM = |-2.5/ln(10)| * DF/F' But `DF/F' is just the inverse of the Signal to noise ratio, or `1/S'. So `DM = 2.5 / ( S * ln(10) )' */ #define MAG_ERROR(P,ROW,O0C1) (2.5f/(columns_sn((P),(ROW),(O0C1)) * log(10))) /* All the raw first and second pass information has been collected, now write them into the output columns. The list of columns here is in the same order as `columns_alloc_set_out_cols', see there for the type of each column. */ #define POS_V_G(ARRAY, SUMWHT_COL, NUMALL_COL, V_COL, G_COL) \ ( (ARRAY)[ SUMWHT_COL ]>0 \ ? MKC_RATIO( (ARRAY)[ V_COL ], (ARRAY)[ SUMWHT_COL ] ) \ : MKC_RATIO( (ARRAY)[ G_COL ], (ARRAY)[ NUMALL_COL ] ) ) void columns_fill(struct mkcatalog_passparams *pp) { struct mkcatalogparams *p=pp->p; int key; double tmp; void *colarr; gal_data_t *column; double *ci, *oi=pp->oi; size_t sr=pp->clumpstartindex, cind, coind; size_t oind=pp->object-1; /* IDs start from 1, indexs from 0. */ double **vo=NULL, **vc=NULL, **go=NULL, **gc=NULL, **vcc=NULL, **gcc=NULL; /* If a WCS column is requested (check will be done inside the function), then set the pointers. */ columns_set_wcs_pointers(p, &vo, &vc, &go, &gc, &vcc, &gcc); /* Go over all the object columns and fill in the information. */ for(column=p->objectcols; column!=NULL; column=column->next) { /* For easy reading. */ key=column->status; colarr=column->array; /* Go over all the columns. */ switch(key) { case UI_KEY_OBJID: ((int32_t *)colarr)[oind] = pp->object; break; case UI_KEY_NUMCLUMPS: ((int32_t *)colarr)[oind] = pp->clumpsinobj; break; case UI_KEY_AREA: ((int32_t *)colarr)[oind] = oi[OCOL_NUMALL]; break; case UI_KEY_CLUMPSAREA: ((int32_t *)colarr)[oind] = oi[OCOL_C_NUMALL]; break; case UI_KEY_WEIGHTAREA: ((int32_t *)colarr)[oind] = oi[OCOL_NUMWHT]; break; case UI_KEY_X: ((float *)colarr)[oind] = POS_V_G(oi, OCOL_SUMWHT, OCOL_NUMALL, OCOL_VX, OCOL_GX); break; case UI_KEY_Y: ((float *)colarr)[oind] = POS_V_G(oi, OCOL_SUMWHT, OCOL_NUMALL, OCOL_VY, OCOL_GY); break; case UI_KEY_GEOX: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_GX], oi[OCOL_NUMALL] ); break; case UI_KEY_GEOY: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_GY], oi[OCOL_NUMALL] ); break; case UI_KEY_CLUMPSX: ((float *)colarr)[oind] = POS_V_G(oi, OCOL_C_SUMWHT, OCOL_C_NUMALL, OCOL_C_VX, OCOL_C_GX); break; case UI_KEY_CLUMPSY: ((float *)colarr)[oind] = POS_V_G(oi, OCOL_C_SUMWHT, OCOL_C_NUMALL, OCOL_C_VY, OCOL_C_GY); break; case UI_KEY_CLUMPSGEOX: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_C_GX], oi[OCOL_C_NUMALL] ); break; case UI_KEY_CLUMPSGEOY: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_C_GY], oi[OCOL_C_NUMALL] ); break; case UI_KEY_W1: case UI_KEY_W2: vo[0][oind] = POS_V_G(oi, OCOL_SUMWHT, OCOL_NUMALL, OCOL_VX, OCOL_GX); vo[1][oind] = POS_V_G(oi, OCOL_SUMWHT, OCOL_NUMALL, OCOL_VY, OCOL_GY); break; case UI_KEY_GEOW1: case UI_KEY_GEOW2: go[0][oind] = MKC_RATIO( oi[OCOL_GX], oi[OCOL_NUMALL] ); go[1][oind] = MKC_RATIO( oi[OCOL_GY], oi[OCOL_NUMALL] ); break; case UI_KEY_CLUMPSW1: case UI_KEY_CLUMPSW2: vcc[0][oind] = POS_V_G(oi, OCOL_C_SUMWHT, OCOL_C_NUMALL, OCOL_C_VX, OCOL_C_GX); vcc[1][oind] = POS_V_G(oi, OCOL_C_SUMWHT, OCOL_C_NUMALL, OCOL_C_VY, OCOL_C_GY); break; case UI_KEY_CLUMPSGEOW1: case UI_KEY_CLUMPSGEOW2: gcc[0][oind] = MKC_RATIO( oi[OCOL_C_GX], oi[OCOL_C_NUMALL] ); gcc[1][oind] = MKC_RATIO( oi[OCOL_C_GY], oi[OCOL_C_NUMALL] ); break; case UI_KEY_BRIGHTNESS: ((float *)colarr)[oind] = ( oi[ OCOL_NUM ]>0.0f ? oi[ OCOL_SUM ] : NAN ); break; case UI_KEY_CLUMPSBRIGHTNESS: ((float *)colarr)[oind] = ( oi[ OCOL_C_NUM ]>0.0f ? oi[ OCOL_C_SUM ] : NAN ); break; case UI_KEY_MAGNITUDE: ((float *)colarr)[oind] = MKC_MAG(oi[ OCOL_SUM ]); break; case UI_KEY_MAGNITUDEERR: ((float *)colarr)[oind] = MAG_ERROR(p, oi, 0); break; case UI_KEY_CLUMPSMAGNITUDE: ((float *)colarr)[oind] = MKC_MAG(oi[ OCOL_C_SUM ]); break; case UI_KEY_UPPERLIMIT: ((float *)colarr)[oind] = oi[ OCOL_UPPERLIMIT_B ]; break; case UI_KEY_UPPERLIMITMAG: ((float *)colarr)[oind] = MKC_MAG(oi[ OCOL_UPPERLIMIT_B ]); break; case UI_KEY_SN: ((float *)colarr)[oind] = columns_sn(p, oi, 0); break; case UI_KEY_SKY: ((float *)colarr)[oind] = MKC_RATIO(oi[OCOL_SUMSKY], oi[OCOL_NUM]); break; case UI_KEY_STD: ((float *)colarr)[oind] = MKC_RATIO(oi[OCOL_SUMSTD], oi[OCOL_NUM]); break; case UI_KEY_SEMIMAJOR: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_SEMIMINOR: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_AXISRATIO: ((float *)colarr)[oind] = ( columns_second_order(pp, oi, UI_KEY_SEMIMINOR, 0) / columns_second_order(pp, oi, UI_KEY_SEMIMAJOR, 0) ); break; case UI_KEY_POSITIONANGLE: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_GEOSEMIMAJOR: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_GEOSEMIMINOR: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_GEOAXISRATIO: ((float *)colarr)[oind] = ( columns_second_order(pp, oi, UI_KEY_GEOSEMIMINOR, 0) / columns_second_order(pp, oi, UI_KEY_GEOSEMIMAJOR, 0) ); break; case UI_KEY_GEOPOSITIONANGLE: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "solve the problem. the output column code %d not recognized " "(for objects). ", __func__, PACKAGE_BUGREPORT, key); } } /* Go over the clump columns and fill the information. */ for(column=p->clumpcols; column!=NULL; column=column->next) for(coind=0;coind<pp->clumpsinobj;++coind) { /* `coind': clump-in-object-index. `cind': clump-index (over all the catalog). */ cind = sr + coind; colarr = column->array; key = column->status; ci = &pp->ci[ coind * CCOL_NUMCOLS ]; /* Parse columns */ switch(key) { case UI_KEY_HOSTOBJID: ((int32_t *)colarr)[cind]=pp->object; break; case UI_KEY_IDINHOSTOBJ: ((int32_t *)colarr)[cind]=coind+1; break; case UI_KEY_AREA: ((int32_t *)colarr)[cind]=ci[CCOL_NUMALL]; break; case UI_KEY_WEIGHTAREA: ((int32_t *)colarr)[cind]=ci[CCOL_NUMWHT]; break; case UI_KEY_X: ((float *)colarr)[cind] = POS_V_G(ci, CCOL_SUMWHT, CCOL_NUMALL, CCOL_VX, CCOL_GX); break; case UI_KEY_Y: ((float *)colarr)[cind] = POS_V_G(ci, CCOL_SUMWHT, CCOL_NUMALL, CCOL_VY, CCOL_GY); break; case UI_KEY_GEOX: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_GX], ci[CCOL_NUMALL] ); break; case UI_KEY_GEOY: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_GY], ci[CCOL_NUMALL] ); break; case UI_KEY_W1: case UI_KEY_W2: vc[0][cind] = POS_V_G(ci, CCOL_SUMWHT, CCOL_NUMALL, CCOL_VX, CCOL_GX); vc[1][cind] = POS_V_G(ci, CCOL_SUMWHT, CCOL_NUMALL, CCOL_VY, CCOL_GY); break; case UI_KEY_GEOW1: case UI_KEY_GEOW2: gc[0][cind] = MKC_RATIO( ci[CCOL_GX], ci[CCOL_NUMALL] ); gc[1][cind] = MKC_RATIO( ci[CCOL_GY], ci[CCOL_NUMALL] ); break; case UI_KEY_BRIGHTNESS: /* Calculate the river flux over the clump area. But only when rivers are present. When grown clumps are requested, the clumps can fully cover a detection (that has one or no clumps). */ tmp = ( ci[ CCOL_RIV_NUM ]>0.0f ? ci[ CCOL_RIV_SUM ]/ci[ CCOL_RIV_NUM ]*ci[ CCOL_NUM ] : 0 ); /* Subtract it from the clump's brightness. */ ((float *)colarr)[cind] = ( ci[ CCOL_NUM ]>0.0f ? (ci[ CCOL_SUM ] - tmp) : NAN ); break; case UI_KEY_NORIVERBRIGHTNESS: ((float *)colarr)[cind] = ( ci[ CCOL_NUM ]>0.0f ? ci[ CCOL_SUM ] : NAN ); break; case UI_KEY_MAGNITUDE: /* Similar: brightness for clumps */ tmp = ( ci[ CCOL_RIV_NUM ] ? ci[ CCOL_RIV_SUM ]/ci[ CCOL_RIV_NUM ]*ci[ CCOL_NUM ] : 0 ); ((float *)colarr)[cind] = MKC_MAG(ci[ CCOL_SUM ]-tmp); break; case UI_KEY_MAGNITUDEERR: ((float *)colarr)[cind] = MAG_ERROR(p, ci, 1); break; case UI_KEY_UPPERLIMIT: ((float *)colarr)[cind] = ci[ CCOL_UPPERLIMIT_B ]; break; case UI_KEY_UPPERLIMITMAG: ((float *)colarr)[cind] = MKC_MAG(ci[ CCOL_UPPERLIMIT_B ]); break; case UI_KEY_RIVERAVE: ((float *)colarr)[cind] = ( ci[ CCOL_RIV_NUM] ? ci[ CCOL_RIV_SUM ]/ci[ CCOL_RIV_NUM] : NAN ); break; case UI_KEY_RIVERNUM: ((int32_t *)colarr)[cind] = ci[ CCOL_RIV_NUM ]; break; case UI_KEY_SN: ((float *)colarr)[cind] = columns_sn(p, ci, 1); break; case UI_KEY_SKY: ((float *)colarr)[cind] = MKC_RATIO( ci[ CCOL_SUMSKY], ci[ CCOL_NUM] ); break; case UI_KEY_STD: ((float *)colarr)[cind] = MKC_RATIO( ci[ CCOL_SUMSTD ], ci[ CCOL_NUM ] ); break; case UI_KEY_SEMIMAJOR: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_SEMIMINOR: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_AXISRATIO: ((float *)colarr)[cind] = ( columns_second_order(pp, ci, UI_KEY_SEMIMINOR, 1) / columns_second_order(pp, ci, UI_KEY_SEMIMAJOR, 1) ); break; case UI_KEY_POSITIONANGLE: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_GEOSEMIMAJOR: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_GEOSEMIMINOR: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_GEOAXISRATIO: ((float *)colarr)[cind] = ( columns_second_order(pp, ci, UI_KEY_GEOSEMIMINOR, 1) / columns_second_order(pp, ci, UI_KEY_GEOSEMIMAJOR, 1) ); break; case UI_KEY_GEOPOSITIONANGLE: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "solve the problem. The output column code %d not " "recognized (for clumps). ", __func__, PACKAGE_BUGREPORT, key); } } /* Clean up. */ if(vo) free(vo); if(vc) free(vc); if(go) free(go); if(gc) free(gc); if(vcc) free(vcc); if(gcc) free(gcc); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/mkcatalog.c��������������������������������������������������������������0000644�0001750�0001750�00000075532�13216276304�015001� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <float.h> #include <string.h> #include <stdlib.h> #include <inttypes.h> #include <gnuastro/git.h> #include <gnuastro/wcs.h> #include <gnuastro/data.h> #include <gnuastro/fits.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "mkcatalog.h" #include "ui.h" #include "columns.h" #include "upperlimit.h" /*********************************************************************/ /************* Definitions and initialization ***************/ /*********************************************************************/ /* Both passes are going to need their starting pointers set, so we'll do that here. */ static void mkcatalog_initialize_params(struct mkcatalog_passparams *pp) { struct mkcatalogparams *p=pp->p; /* Initialize the number of clumps in this object. */ pp->clumpsinobj=0; /* Initialize the intermediate values. */ memset(pp->oi, 0, OCOL_NUMCOLS * sizeof *pp->oi); /* Set the shifts in every dimension to avoid round-off errors in large numbers for the non-linear calculations. We are using the first pixel of each object's tile as the shift parameter to keep the mean (average) reasonably near to the standard deviation. Otherwise, when the object is far out in the image (large x and y positions), then roundoff errors are going to decrease the accuracy of the second order calculations. */ gal_dimension_index_to_coord( ( (float *)(pp->tile->array) - (float *)(pp->tile->block->array) ), p->input->ndim, p->input->dsize, pp->shift); /* Set the starting and ending indexs of this tile/object. */ pp->st_i = gal_tile_start_end_ind_inclusive(pp->tile, p->input, pp->start_end_inc); pp->st_sky = (float *)(p->sky->array) + pp->start_end_inc[0]; pp->st_std = (float *)(p->std->array) + pp->start_end_inc[0]; pp->st_o = (int32_t *)(p->objects->array) + pp->start_end_inc[0]; pp->st_c = ( p->clumps ? (int32_t *)(p->clumps->array) + pp->start_end_inc[0] : NULL ); } /*********************************************************************/ /************* First and second passes ***************/ /*********************************************************************/ static void mkcatalog_first_pass(struct mkcatalog_passparams *pp) { struct mkcatalogparams *p=pp->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; double *oi=pp->oi; int32_t *O, *C=NULL; size_t d, increment=0, num_increment=1; float ss, *I, *II, *SK, *ST, *input=p->input->array; size_t *c=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "c"); size_t *sc=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "sc"); /* Parse each contiguous patch of memory covered by this object. */ while( pp->start_end_inc[0] + increment <= pp->start_end_inc[1] ) { /* Set the contiguous range to parse, we will check the count over the `I' pointer and just increment the rest. */ O = pp->st_o + increment; SK = pp->st_sky + increment; ST = pp->st_std + increment; if(p->clumps) C = pp->st_c + increment; II = ( I = pp->st_i + increment ) + pp->tile->dsize[ndim-1]; /* Parse the tile. */ do { /* If this pixel belongs to the requested object then do the processing. */ if( *O==pp->object ) { /* Get the number of clumps in this object: the largest clump ID over each object. */ if( p->clumps && *C>0 ) pp->clumpsinobj = *C > pp->clumpsinobj ? *C : pp->clumpsinobj; /* Get the coordinates of this point. */ gal_dimension_index_to_coord(I-input, ndim, dsize, c); /* Calculate the shifted coordinates for second order calculations. The coordinate is incremented because from now on, the positions are in the FITS standard (starting from one). IMPORTANT NOTE: this is a postfix increment, so after the expression (difference) is evaluated, the coordinate is going to change. This is necessary because `shift' is also starting from zero. */ for(d=0;d<ndim;++d) sc[d] = c[d]++ - pp->shift[d]; /* Do the general geometric (independent of pixel value) calculations. */ oi[ OCOL_NUMALL ]++; oi[ OCOL_GX ] += c[1]; oi[ OCOL_GY ] += c[0]; oi[ OCOL_GXX ] += sc[1] * sc[1]; oi[ OCOL_GYY ] += sc[0] * sc[0]; oi[ OCOL_GXY ] += sc[1] * sc[0]; if(p->clumps && *C>0) { oi[ OCOL_C_GX ] += c[1]; oi[ OCOL_C_GY ] += c[0]; } /* Start the pixel value related parameters. ABOUT THE CHECK: The reason this condition is given like this is that the `threshold' value is optional and we don't want to do multiple checks. The basic idea is this: when the user doesn't want any thresholds applied, then `p->threshold==NAN' and any conditional that involves a NaN will fail, so its logical negation will be positive and the calculations below will be done. However, if the user does specify a threhold and the pixel is above the threshold, then (`ss < p->threshold * *ST') will be false and its logical negation will be positive, so the pixel will be included. */ if( !( p->hasblank && isnan(*I) ) && !( (ss = *I - *SK) < p->threshold * *ST ) ) { /* General flux summations. */ oi[ OCOL_NUM ]++; oi[ OCOL_SUM ] += ss; oi[ OCOL_SUMSKY ] += *SK; oi[ OCOL_SUMSTD ] += *ST; if(p->clumps && *C>0) { oi[ OCOL_C_NUM ]++; oi[ OCOL_C_SUM ] += ss; } /* For flux weighted centers, we can only use positive values, so do those measurements here. */ if( ss > 0.0f ) { oi[ OCOL_NUMWHT ]++; oi[ OCOL_SUMWHT ] += ss; oi[ OCOL_VX ] += ss * c[1]; oi[ OCOL_VY ] += ss * c[0]; oi[ OCOL_VXX ] += ss * sc[1] * sc[1]; oi[ OCOL_VYY ] += ss * sc[0] * sc[0]; oi[ OCOL_VXY ] += ss * sc[1] * sc[0]; if(p->clumps && *C>0) { oi[ OCOL_C_NUMWHT ]++; oi[ OCOL_C_SUMWHT ] += ss; oi[ OCOL_C_VX ] += ss * c[1]; oi[ OCOL_C_VY ] += ss * c[0]; } } } } /* Increment the other pointers. */ ++O; ++SK; ++ST; if(p->clumps) ++C; } while(++I<II); /* Increment to the next contiguous region of this tile. */ increment += ( gal_tile_block_increment(p->input, dsize, num_increment++, NULL) ); } /* Clean up. */ free(c); free(sc); } /* Do the second pass */ static void mkcatalog_second_pass(struct mkcatalog_passparams *pp) { struct mkcatalogparams *p=pp->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; double *ci; int32_t *O, *C=NULL, nlab, *ngblabs; size_t i, ii, d, increment=0, num_increment=1; size_t nngb=gal_dimension_num_neighbors(ndim); size_t *dinc=gal_dimension_increment(ndim, dsize); float ss, *I, *II, *SK, *ST, *input=p->input->array; int32_t *objects=p->objects->array, *clumps=p->clumps->array; size_t *c=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "c"); size_t *sc=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "sc"); /* Allocate array to keep the neighbor labels. */ ngblabs=gal_data_malloc_array(GAL_TYPE_INT32, nngb, __func__, "ngblabs"); /* Parse each contiguous patch of memory covered by this object. */ while( pp->start_end_inc[0] + increment <= pp->start_end_inc[1] ) { /* Set the contiguous range to parse, we will check the count over the `I' pointer and just increment the rest. */ O = pp->st_o + increment; SK = pp->st_sky + increment; ST = pp->st_std + increment; if(p->clumps) C = pp->st_c + increment; II = ( I = pp->st_i + increment ) + pp->tile->dsize[ndim-1]; /* Parse the next contiguous region of this tile. */ do { /* If this pixel belongs to the requested object, is a clumps and isn't NAN, then do the processing. `hasblank' is constant, so when the input doesn't have any blank values, the `isnan' will never be checked. */ if( *O==pp->object ) { /* We are on a clump. */ if(p->clumps && *C>0) { /* Pointer to make things easier. Note that the clump labels start from 1, but the array indexs from 0.*/ ci=&pp->ci[ (*C-1) * CCOL_NUMCOLS ]; /* Get the coordinates of this point. */ gal_dimension_index_to_coord(I-input, ndim, dsize, c); /* Shifted coordinates for second order moments, see explanations in the first pass.*/ for(d=0;d<ndim;++d) sc[d] = c[d]++ - pp->shift[d]; /* Geometric measurements (independent of pixel value). */ ci[ CCOL_NUMALL ]++; ci[ CCOL_GX ] += c[1]; ci[ CCOL_GY ] += c[0]; ci[ CCOL_GXX ] += sc[1] * sc[1]; ci[ CCOL_GYY ] += sc[0] * sc[0]; ci[ CCOL_GXY ] += sc[1] * sc[0]; /* Only use pixels above the threshold, see explanations in first pass for an explanation. */ if( !( p->hasblank && isnan(*I) ) && !( (ss = *I - *SK) < p->threshold * *ST ) ) { /* Fill in the necessary information. */ ci[ CCOL_NUM ]++; ci[ CCOL_SUM ] += ss; ci[ CCOL_SUMSKY ] += *SK; ci[ CCOL_SUMSTD ] += *ST; if( ss > 0.0f ) { ci[ CCOL_NUMWHT ]++; ci[ CCOL_SUMWHT ] += ss; ci[ CCOL_VX ] += ss * c[1]; ci[ CCOL_VY ] += ss * c[0]; ci[ CCOL_VXX ] += ss * sc[1] * sc[1]; ci[ CCOL_VYY ] += ss * sc[0] * sc[0]; ci[ CCOL_VXY ] += ss * sc[1] * sc[0]; } } } /* This pixel is on the diffuse region, check to see if it is touching a clump or not, but only if this object actually has any clumps. */ else if(pp->clumpsinobj) { /* We are on a diffuse (possibly a river) pixel. So the value of this pixel has to be added to any of the clumps in touches. But since it might touch a labeled region more than once, we use `ngblabs' to keep track of which label we have already added its value to. `ii' is the number of different labels this river pixel has already been considered for. `ngblabs' will keep the list labels. */ ii=0; memset(ngblabs, 0, nngb*sizeof *ngblabs); /* Go over the neighbors and see if this pixel is touching a clump or not. */ GAL_DIMENSION_NEIGHBOR_OP(I-input, ndim, dsize, ndim, dinc, { /* Neighbor's label (mainly for easy reading). */ nlab=clumps[nind]; /* We only want neighbors that are a clump and part of this object and part of the same object. */ if( nlab>0 && objects[nind]==pp->object) { /* Go over all already checked labels and make sure this clump hasn't already been considered. */ for(i=0;i<ii;++i) if(ngblabs[i]==nlab) break; /* It hasn't been considered yet: */ if(i==ii) { ngblabs[ii++] = nlab; ++(pp->ci)[ (nlab-1) * CCOL_NUMCOLS + CCOL_RIV_NUM ]; pp->ci[ (nlab-1) * CCOL_NUMCOLS + CCOL_RIV_SUM ] += *I-*SK; } } }); } } /* Increment the other pointers. */ ++O; ++SK; ++ST; if(p->clumps) ++C; } while(++I<II); /* Increment to the next contiguous region of this tile. */ increment += ( gal_tile_block_increment(p->input, dsize, num_increment++, NULL) ); } /* Clean up. */ free(c); free(sc); free(dinc); free(ngblabs); } /*********************************************************************/ /***************** High-level funcitons *******************/ /*********************************************************************/ static void mkcatalog_clump_starting_index(struct mkcatalog_passparams *pp) { struct mkcatalogparams *p=pp->p; /* Lock the mutex if we are working on more than one thread. NOTE: it is very important to keep the number of operations within the mutex to a minimum so other threads don't get delayed. */ if(p->cp.numthreads>1) pthread_mutex_lock(&p->mutex); /* Put the current total number of rows filled into the output, then increment the total number by the number of clumps. */ pp->clumpstartindex = p->clumprowsfilled; p->clumprowsfilled += pp->clumpsinobj; /* Unlock the mutex (if it was locked). */ if(p->cp.numthreads>1) pthread_mutex_unlock(&p->mutex); } /* Each thread will call this function once. It will go over all the objects that are assigned to it. */ static void * mkcatalog_single_object(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct mkcatalogparams *p=(struct mkcatalogparams *)(tprm->params); size_t ndim=p->input->ndim; size_t i; struct mkcatalog_passparams pp; /* Initialize the mkcatalog_passparams elements. */ pp.p = p; pp.clumpstartindex = 0; pp.rng = p->rng ? gsl_rng_clone(p->rng) : NULL; pp.shift = gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "pp.shift"); pp.oi = gal_data_malloc_array(GAL_TYPE_FLOAT64, OCOL_NUMCOLS, __func__, "pp.oi"); /* If we have upper-limit mode, then allocate the container to keep the values to calculate the standard deviation. */ pp.up_vals = p->upperlimit ? gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &p->upnum, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL) : NULL; /* Fill the desired columns for all the objects given to this thread. */ for(i=0; tprm->indexs[i]!=GAL_BLANK_SIZE_T; ++i) { /* For easy reading, Note that the object IDs start from one while the array positions start from 0. */ pp.ci=NULL; pp.object = tprm->indexs[i] + 1; pp.tile = &p->tiles[ tprm->indexs[i] ]; /* Initialize the parameters for this object/tile. */ mkcatalog_initialize_params(&pp); /* Get the first pass information. */ mkcatalog_first_pass(&pp); /* Currently the second pass is only necessary when there is a clumps image. */ if(p->clumps) { /* Allocate space for the properties of each clump. */ pp.ci = gal_data_calloc_array(GAL_TYPE_FLOAT64, pp.clumpsinobj * CCOL_NUMCOLS, __func__, "pp.ci"); /* Get the starting row of this object's clumps in the final catalog. This index is also necessary for the unique random number generator seeds of each clump. */ mkcatalog_clump_starting_index(&pp); /* Get the second pass information. */ mkcatalog_second_pass(&pp); } /* Calculate the upper limit magnitude (if necessary). */ if(p->upperlimit) upperlimit_calculate(&pp); /* Write the pass information into the columns. */ columns_fill(&pp); /* Clean up for this object. */ if(pp.ci) free(pp.ci); } /* Clean up. */ free(pp.oi); free(pp.shift); gal_data_free(pp.up_vals); if(pp.rng) gsl_rng_free(pp.rng); /* Wait until all the threads finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /*********************************************************************/ /******** Processing after threads finish *************/ /*********************************************************************/ /* Convert internal image coordinates to WCS for table. Note that from the beginning (during the passing steps), we saved FITS coordinates. Also note that we are doing the conversion in place. */ static void mkcatalog_wcs_conversion(struct mkcatalogparams *p) { gal_data_t *c; gal_data_t *column; /* Flux weighted center positions for clumps and objects. */ if(p->wcs_vo) { gal_wcs_img_to_world(p->wcs_vo, p->input->wcs, 1); if(p->wcs_vc) gal_wcs_img_to_world(p->wcs_vc, p->input->wcs, 1); } /* Geometric center positions for clumps and objects. */ if(p->wcs_go) { gal_wcs_img_to_world(p->wcs_go, p->input->wcs, 1); if(p->wcs_gc) gal_wcs_img_to_world(p->wcs_gc, p->input->wcs, 1); } /* All clumps flux weighted center. */ if(p->wcs_vcc) gal_wcs_img_to_world(p->wcs_vcc, p->input->wcs, 1); /* All clumps geometric center. */ if(p->wcs_gcc) gal_wcs_img_to_world(p->wcs_gcc, p->input->wcs, 1); /* Go over all the object columns and fill in the values. */ for(column=p->objectcols; column!=NULL; column=column->next) { /* Definitions */ c=NULL; /* Set `c' for the columns that must be corrected. Note that this `switch' statement doesn't need any `default', because there are probably columns that don't need any correction. */ switch(column->status) { case UI_KEY_W1: c=p->wcs_vo; break; case UI_KEY_W2: c=p->wcs_vo->next; break; case UI_KEY_GEOW1: c=p->wcs_go; break; case UI_KEY_GEOW2: c=p->wcs_go->next; break; case UI_KEY_CLUMPSW1: c=p->wcs_vcc; break; case UI_KEY_CLUMPSW2: c=p->wcs_vcc->next; break; case UI_KEY_CLUMPSGEOW1: c=p->wcs_gcc; break; case UI_KEY_CLUMPSGEOW2: c=p->wcs_gcc->next; break; } /* Copy the elements into the output column. */ if(c) memcpy(column->array, c->array, column->size*gal_type_sizeof(c->type)); } /* Go over all the clump columns and fill in the values. */ for(column=p->clumpcols; column!=NULL; column=column->next) { /* Definitions */ c=NULL; /* Set `c' for the columns that must be corrected. Note that this `switch' statement doesn't need any `default', because there are probably columns that don't need any correction. */ switch(column->status) { case UI_KEY_W1: c=p->wcs_vc; break; case UI_KEY_W2: c=p->wcs_vc->next; break; case UI_KEY_GEOW1: c=p->wcs_gc; break; case UI_KEY_GEOW2: c=p->wcs_gc->next; break; } /* Copy the elements into the output column. */ if(c) memcpy(column->array, c->array, column->size*gal_type_sizeof(c->type)); } } /* Write the similar information. */ static gal_list_str_t * mkcatalog_outputs_same_start(struct mkcatalogparams *p, int o0c1, char *ObjClump) { float snlim; char *str, *tstr; double pixarea=NAN; gal_list_str_t *comments=NULL; char *skyfile=p->skyfile ? p->skyfile : p->inputname; char *stdfile=p->stdfile ? p->stdfile : p->inputname; char *clumpsfile=p->clumpsfile ? p->clumpsfile : p->inputname; char *objectsfile=p->objectsfile ? p->objectsfile : p->inputname; asprintf(&str, "%s catalog of %s", o0c1 ? "Object" : "Clump", PROGRAM_STRING); gal_list_str_add(&comments, str, 0); /* If in a Git controlled directory and output isn't a FITS file (in FITS, this will be automatically included). */ if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT && gal_git_describe()) { asprintf(&str, "Working directory commit %s", gal_git_describe()); gal_list_str_add(&comments, str, 0); } /* Write the date. However, `ctime' is going to put a new-line character in the end of its string, so we are going to remove it manually. */ asprintf(&str, "%s started on %s", PROGRAM_NAME, ctime(&p->rawtime)); str[strlen(str)-1]='\0'; gal_list_str_add(&comments, str, 0); if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) { asprintf(&str, "--------- Input files ---------"); gal_list_str_add(&comments, str, 0); } asprintf(&str, "Values: %s (hdu: %s).", p->inputname, p->cp.hdu); gal_list_str_add(&comments, str, 0); asprintf(&str, "Objects: %s (hdu: %s).", objectsfile, p->objectshdu); gal_list_str_add(&comments, str, 0); if(p->clumps) { asprintf(&str, "Clumps: %s (hdu: %s).", clumpsfile, p->clumpshdu); gal_list_str_add(&comments, str, 0); } asprintf(&str, "Sky: %s (hdu: %s).", skyfile, p->skyhdu); gal_list_str_add(&comments, str, 0); asprintf(&str, "Sky STD: %s (hdu: %s).", stdfile, p->stdhdu); gal_list_str_add(&comments, str, 0); if(p->upmaskfile) { asprintf(&str, "Upperlimit mask: %s (hdu: %s).", p->upmaskfile, p->upmaskhdu); gal_list_str_add(&comments, str, 0); } if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) { asprintf(&str, "--------- Supplimentary information ---------"); gal_list_str_add(&comments, str, 0); } if(p->input->wcs) { pixarea=gal_wcs_pixel_area_arcsec2(p->input->wcs); if( isnan(pixarea)==0 ) { asprintf(&str, "Pixel area (arcsec^2): %g", pixarea); gal_list_str_add(&comments, str, 0); } } if(p->hasmag) { asprintf(&str, "Zeropoint magnitude: %.4f", p->zeropoint); gal_list_str_add(&comments, str, 0); } /* Print surface brightness limits. */ if( !isnan(p->zeropoint) && !isnan(p->sfmagnsigma) ) { /* Per pixel. */ asprintf(&str, "%g sigma surface brightness (magnitude/pixel): %.3f", p->sfmagnsigma, ( -2.5f *log10( p->sfmagnsigma * p->medstd ) + p->zeropoint ) ); gal_list_str_add(&comments, str, 0); /* Per requested projected area: if a pixel area could be measured (a WCS was given), then also estimate the surface brightness over one arcsecond^2. From the pixel area, we know how many pixels are necessary to fill the requested projected area (in arcsecond^2). We also know that as the number of samples (pixels) increases (to N), the noise increases by sqrt(N), see the full discussion in the book. */ if(!isnan(pixarea) && !isnan(p->sfmagarea)) { /* Prepare the comment/information. */ if(p->sfmagarea==1.0f) tstr=NULL; else asprintf(&tstr, "%g-", p->sfmagarea); asprintf(&str, "%g sigma surface brightness (magnitude/%sarcsec^2): " "%.3f", p->sfmagnsigma, tstr ? tstr : "", ( -2.5f * log10( p->sfmagnsigma * p->medstd * sqrt( p->sfmagarea / pixarea) ) + p->zeropoint ) ); /* Add the final string/line to the catalog comments. */ gal_list_str_add(&comments, str, 0); /* Clean up (if necessary). */ if (tstr) { free(tstr); tstr=NULL; } } /* Notice: */ asprintf(&str, "Pixel STD for surface brightness calculation%s: %f", (!isnan(pixarea) && !isnan(p->sfmagarea))?"s":"", p->medstd); gal_list_str_add(&comments, str, 0); } snlim = o0c1 ? p->clumpsn : p->detsn; if( !isnan(snlim) ) { asprintf(&str, "%s limiting signal-to-noise ratio: %.3f", ObjClump, snlim); gal_list_str_add(&comments, str, 0); } if(o0c1==0) { asprintf(&str, "(NOTE: S/N limit above is for pseudo-detections, " "not objects.)"); gal_list_str_add(&comments, str, 0); } if(p->cpscorr>1.0f) { asprintf(&str, "Counts-per-second correction: %.3f", p->cpscorr); gal_list_str_add(&comments, str, 0); } if( !isnan(p->threshold) ) { asprintf(&str, "**IMPORTANT** Pixel threshold (multiple of local " "std): %.3f", p->threshold); gal_list_str_add(&comments, str, 0); } if(p->upperlimit) { if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) { asprintf(&str, "--------- Upper-limit measurement ---------"); gal_list_str_add(&comments, str, 0); } asprintf(&str, "Number of random samples: %zu", p->upnum); gal_list_str_add(&comments, str, 0); if(p->uprange) { asprintf(&str, "Range of random samples about target: %zu, %zu", p->uprange[1], p->uprange[0]); gal_list_str_add(&comments, str, 0); } asprintf(&str, "Random number generator name: %s", p->rngname); gal_list_str_add(&comments, str, 0); asprintf(&str, "Random number generator seed: %"PRIu64, p->seed); gal_list_str_add(&comments, str, 0); asprintf(&str, "Multiple of STD used for sigma-clipping: %.3f", p->upsigmaclip[0]); gal_list_str_add(&comments, str, 0); if(p->upsigmaclip[1]>=1.0f) asprintf(&str, "Number of clips for sigma-clipping: %.0f", p->upsigmaclip[1]); else asprintf(&str, "Tolerance level to sigma-clipping: %.3f", p->upsigmaclip[1]); gal_list_str_add(&comments, str, 0); asprintf(&str, "Multiple of sigma-clipped STD for upper-limit: %.3f", p->upnsigma); gal_list_str_add(&comments, str, 0); } if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) { asprintf(&str, "--------- Table columns ---------"); gal_list_str_add(&comments, str, 0); } /* Return the comments. */ return comments; } /* Write the produced columns into the output */ static void mkcatalog_write_outputs(struct mkcatalogparams *p) { /*char *str;*/ gal_list_str_t *comments; /* OBJECT CATALOG ============== */ comments=mkcatalog_outputs_same_start(p, 0, "Detection"); /* Write objects catalog --------------------- Reverse the comments list (so it is printed in the same order here), write the objects catalog and free the comments. */ gal_list_str_reverse(&comments); gal_table_write(p->objectcols, comments, p->cp.tableformat, p->objectsout, "OBJECTS"); gal_list_str_free(comments, 1); /* CLUMPS CATALOG ============== */ if(p->clumps) { comments=mkcatalog_outputs_same_start(p, 1, "Clumps"); /* Write objects catalog --------------------- Reverse the comments list (so it is printed in the same order here), write the objects catalog and free the comments. */ gal_list_str_reverse(&comments); gal_table_write(p->clumpcols, comments, p->cp.tableformat, p->clumpsout, "CLUMPS"); gal_list_str_free(comments, 1); } } /*********************************************************************/ /***************** Top-level function *******************/ /*********************************************************************/ void mkcatalog(struct mkcatalogparams *p) { /* When more than one thread is to be used, initialize the mutex: we need it to assign a column to the clumps in the final catalog. */ if( p->cp.numthreads > 1 ) pthread_mutex_init(&p->mutex, NULL); /* Do the processing on each thread. */ gal_threads_spin_off(mkcatalog_single_object, p, p->numobjects, p->cp.numthreads); /* Post-thread processing, for example to convert image coordinates to RA and Dec. */ mkcatalog_wcs_conversion(p); /* Write the filled columns into the output. */ mkcatalog_write_outputs(p); /* Destroy the mutex. */ if( p->cp.numthreads>1 ) pthread_mutex_destroy(&p->mutex); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/ui.c���������������������������������������������������������������������0000644�0001750�0001750�00000103503�13216276304�013442� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <inttypes.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro/arithmetic.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "mkcatalog.h" #include "ui.h" #include "columns.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will create a catalog from " "an input, labeled, and noise images.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct mkcatalogparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Specific to this program. */ p->sfmagnsigma = NAN; p->sfmagarea = NAN; p->upnsigma = NAN; p->zeropoint = NAN; p->threshold = NAN; p->upsigmaclip[0] = NAN; p->upsigmaclip[1] = NAN; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: cp->coptions[i].flags=OPTION_HIDDEN; cp->coptions[i].mandatory=GAL_OPTIONS_NOT_MANDATORY; break; case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct mkcatalogparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: if(p->inputname) argp_error(state, "only one argument (input file) should be given"); else p->inputname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /* Read the user's desired columns. Because the types of these options are `GAL_TYPE_INVALID', this function will not be called when printing the full list of parameters and their values. */ void * ui_column_codes_ll(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { struct mkcatalogparams *p=(struct mkcatalogparams *)params; /* These options don't take arguments on the command-line but in the configuration files they can take values of 0 or 1. In the latter case, the column shouldn't be added if the value is 0. */ if(arg) { if( arg[0]=='0' && arg[1]=='\0' ) return NULL; else if ( !(arg[0]=='1' && arg[1]=='\0') ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "`%s' is not a " "valid value to the `%s' option: (\"%s\").\n\n`%s' is " "an on/off option specifying if you want this column " "in the output catalog, it doesn't take any " "arguments. In a configuration file, it can only take " "a value of `0' (to be ignored) or `1'", arg, option->name, option->doc, option->name); } /* The user wants this column, so add it to the list. Note that the `ids' column means three columns. */ if(option->key==UI_KEY_IDS) { gal_list_i32_add(&p->columnids, UI_KEY_OBJID); gal_list_i32_add(&p->columnids, UI_KEY_HOSTOBJID); gal_list_i32_add(&p->columnids, UI_KEY_IDINHOSTOBJ); } else gal_list_i32_add(&p->columnids, option->key); /* Return NULL */ return NULL; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. static void ui_read_check_only_options(struct mkcatalogparams *p) { } */ static void ui_check_options_and_arguments(struct mkcatalogparams *p) { /* Make sure an input file name was given and if it was a FITS file, that a HDU is also given. */ if(p->inputname) { if( gal_fits_name_is_fits(p->inputname) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a FITS " "file, a HDU must also be specified, you can use the `--hdu' " "(`-h') option and give it the HDU number (starting from " "zero), extension name, or anything acceptable by CFITSIO"); } else error(EXIT_FAILURE, 0, "no input file is specified"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ /* If a WCS structure is present, then read its basic information to use in the table meta-data. */ static void ui_wcs_info(struct mkcatalogparams *p) { char *c; size_t i; /* Read the basic WCS information. */ if(p->input->wcs) { /* Allocate space for the array of strings. */ errno=0; p->ctype=malloc(p->input->ndim * sizeof *p->ctype); if(p->ctype==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for `p->ctype'", __func__, p->input->ndim * sizeof *p->ctype); /* Fill in the values. */ for(i=0;i<p->input->ndim;++i) { /* CTYPE might contain `-' characters, we just want the first non-dash characters. The loop will either stop either at the end or where there is a dash. So we can just replace it with an end-of-string character. */ gal_checkset_allocate_copy(p->input->wcs->ctype[i], &p->ctype[i]); c=p->ctype[i]; while(*c!='\0' && *c!='-') ++c; *c='\0'; } } } static void ui_preparations_read_inputs(struct mkcatalogparams *p) { size_t one=1; int readclumps=0; char *namestypes, **strarr=NULL; gal_data_t *zero, *key=gal_data_array_calloc(1); char *skyfile=p->skyfile ? p->skyfile : p->inputname; char *stdfile=p->stdfile ? p->stdfile : p->inputname; char *clumpsfile=p->clumpsfile ? p->clumpsfile : p->inputname; char *objectsfile=p->objectsfile ? p->objectsfile : p->inputname; /* Read the input image. */ p->input=gal_fits_img_read_to_type(p->inputname, p->cp.hdu, GAL_TYPE_FLOAT32, p->cp.minmapsize, 0,0); /* Read basic WCS information for final table meta-data. */ ui_wcs_info(p); /* Currently MakeCatalog is only implemented for 2D images. */ if(p->input->ndim!=2) error(EXIT_FAILURE, 0, "%s (hdu %s) has %zu dimensions, MakeCatalog " "currently only supports 2D inputs", p->inputname, p->cp.hdu, p->input->ndim); /* See if the input has blank pixels and set the flags appropriately. */ p->hasblank = gal_blank_present(p->input, 1); /* Read the object label image and check its size. */ p->objects = gal_fits_img_read(objectsfile, p->objectshdu, p->cp.minmapsize, 0, 0); if( gal_data_dsize_is_different(p->input, p->objects) ) error(EXIT_FAILURE, 0, "`%s' (hdu: %s) and `%s' (hdu: %s) have a" "different dimension/size", objectsfile, p->objectshdu, p->inputname, p->cp.hdu); /* Read the Sky image and check its size. */ p->sky=gal_fits_img_read_to_type(skyfile, p->skyhdu, GAL_TYPE_FLOAT32, p->cp.minmapsize, 0, 0); if( gal_data_dsize_is_different(p->input, p->sky) ) error(EXIT_FAILURE, 0, "`%s' (hdu: %s) and `%s' (hdu: %s) have a" "different dimension/size", skyfile, p->skyhdu, p->inputname, p->cp.hdu); /* Read the Sky standard deviation image and check its size. */ p->std=gal_fits_img_read_to_type(stdfile, p->stdhdu, GAL_TYPE_FLOAT32, p->cp.minmapsize, 0, 0); if( gal_data_dsize_is_different(p->input, p->std) ) error(EXIT_FAILURE, 0, "`%s' (hdu: %s) and `%s' (hdu: %s) have a" "different dimension/size", stdfile, p->stdhdu, p->inputname, p->cp.hdu); /* If an upper-limit mask image was given, read it. */ if(p->upmaskfile) { /* Read the mask image. */ p->upmask = gal_fits_img_read(p->upmaskfile, p->upmaskhdu, p->cp.minmapsize, 0, 0); if( gal_data_dsize_is_different(p->input, p->upmask) ) error(EXIT_FAILURE, 0, "`%s' (hdu: %s) and `%s' (hdu: %s) have a" "different dimension/size", p->upmaskfile, p->upmaskhdu, p->inputname, p->cp.hdu); /* If it isn't an integer type, report an error, otherwise, convert it to a uint8_t: with a 1 for all non-zero pixels and 0 for zero pixels. */ zero=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &one, NULL, 1, -1, NULL, NULL, NULL); p->upmask=gal_arithmetic(GAL_ARITHMETIC_OP_NE, ( GAL_ARITHMETIC_INPLACE | GAL_ARITHMETIC_FREE | GAL_ARITHMETIC_NUMOK ), p->upmask, zero); } /* Check to see if the objects extension has a `WCLUMPS' keyword and that its value is 'yes', `y', or `1'. */ key->name="WCLUMPS"; key->type=GAL_TYPE_STRING; gal_fits_key_read(objectsfile, p->objectshdu, key, 0, 0); if(key->status==KEY_NO_EXIST) readclumps=0; else { if(key->status) gal_fits_io_error(key->status, "CFITSIO error while reading " "WCLUMPS keyword"); else { strarr=key->array; if( !strcasecmp(strarr[0], "yes") || !strcasecmp(strarr[0], "y") || !strcmp(strarr[0], "1") ) readclumps=1; } } /* Read the clumps array if necessary. */ if(readclumps) { /* Make sure the user did indeed give the clumps HDU. */ if(p->clumpshdu==NULL) error(EXIT_FAILURE, 0, "no `--clumpshdu' given! The WCLUMPS keyword " "in %s (hdu: %s) has a value of `%s', so MakeCatalog expects " "a clump image.\n\nYou can use the optional `--clumpsfile' " "option to give the filename and the mandatory `--clumpshdu' " "to specify the extension. If `--clumpsfile' is not given, " "MakeCatalog will look into the input file for the given " "extension. Alternatively, you can modify/remove this " "keyword using Gnuastro's Fits program, please run `$ info " "astfits' for more information (press `SPACE' to go down and " "`q' to return to the command-line).", objectsfile, p->objectshdu, strarr[0]); /* Read the clumps image and check its size. */ p->clumps = gal_fits_img_read(clumpsfile, p->clumpshdu, p->cp.minmapsize, 0, 0); if( gal_data_dsize_is_different(p->input, p->std) ) error(EXIT_FAILURE, 0, "`%s' (hdu: %s) and `%s' (hdu: %s) have a" "different dimension/size", clumpsfile, p->clumpshdu, p->inputname, p->cp.hdu); } /* Make sure the object and clump label images have an integer type, then to be safe that they have the correct integer type, run `gal_data_copy_to_new_type' on them. */ if( p->objects->type==GAL_TYPE_FLOAT32 || p->objects->type==GAL_TYPE_FLOAT64 || (p->clumps && ( p->clumps->type==GAL_TYPE_FLOAT32 || p->clumps->type==GAL_TYPE_FLOAT64 ) ) ) { if(p->clumps) asprintf(&namestypes, "However, `%s' (hdu: %s) and `%s' (hdu: %s) " "have types of `%s' and `%s' respectively", objectsfile, p->objectshdu, clumpsfile, p->clumpshdu, gal_type_name(p->objects->type, 1), gal_type_name(p->clumps->type, 1) ); else asprintf(&namestypes, "However, %s (hdu: %s) has a type of %s", objectsfile, p->objectshdu, gal_type_name(p->objects->type, 1)); error(EXIT_FAILURE, 0, "labeled images (for objects or clumps) must " "have an integer datatype. %s.\n\n" "If you are sure the images contain only integer values but " "are just stored in a floating point container, you can " "put them in an integer container with Gnuastro's Arithmetic " "program using a command like below:\n\n" " $ astarithmetic img.fits int32", namestypes); } p->objects=gal_data_copy_to_new_type_free(p->objects, GAL_TYPE_INT32); if(p->clumps) p->clumps=gal_data_copy_to_new_type_free(p->clumps, GAL_TYPE_INT32); /* Clean up. */ key->name=NULL; gal_data_array_free(key, 1, 1); } /* The input images can have extensions to speed up the processing. */ static void ui_preparations_read_keywords(struct mkcatalogparams *p) { char *msg; gal_data_t *tmp; gal_data_t *keys=gal_data_array_calloc(2); char *stdfile=p->stdfile ? p->stdfile : p->inputname; char *clumpsfile=p->clumpsfile ? p->clumpsfile : p->inputname; char *objectsfile=p->objectsfile ? p->objectsfile : p->inputname; /* Read the keywords from the standard deviation image. */ keys[0].next=&keys[1]; keys[0].name="MINSTD"; keys[1].name="MEDSTD"; keys[0].type=GAL_TYPE_FLOAT32; keys[1].type=GAL_TYPE_FLOAT32; keys[0].array=&p->minstd; keys[1].array=&p->medstd; gal_fits_key_read(stdfile, p->stdhdu, keys, 0, 0); /* If the two keywords couldn't be read, calculate them. */ if(keys[0].status) { /* Calculate the minimum STD. */ tmp=gal_statistics_minimum(p->std); p->minstd=*((float *)(tmp->array)); gal_data_free(tmp); } if(keys[1].status) { /* Calculate the median STD. */ tmp=gal_statistics_median(p->std, 0); p->medstd=*((float *)(tmp->array)); gal_data_free(tmp); /* Alert the user if it wasn't calculated from a header keyword. */ fprintf(stderr, "---------------\n" "Warning: Could not find the `MEDSTD' keyword in `%s' " "(hdu: %s). The median standard deviation is thus found on " "the (interpolated) standard deviation image. NoiseChisel " "finds the median before interpolation which is more " "accurate. Ho the reported value in the final catalog will " "not be accurate: it will depend on how many tiles were " "blank and their spatial position relative to the non-blank " "ones.\n" "---------------\n", stdfile, p->stdhdu); } p->cpscorr = p->minstd>1 ? 1.0f : p->minstd; /* Read the keywords from the objects image. */ keys[0].name="DETSN"; keys[1].name="NUMLABS"; keys[0].type=GAL_TYPE_FLOAT32; keys[1].type=GAL_TYPE_SIZE_T; keys[0].array=&p->detsn; keys[1].array=&p->numobjects; gal_fits_key_read(objectsfile, p->objectshdu, keys, 0, 0); if(keys[0].status) p->detsn=NAN; /* When `status!=0', then */ if(keys[1].status) /* the key couldn't be read. */ { tmp=gal_statistics_maximum(p->objects); p->numobjects=*((int32_t *)(tmp->array)); /*numobjects is in int32_t.*/ gal_data_free(tmp); } /* If there were no objects in the input, then inform the user with an error (no catalog was built). */ if(p->numobjects==0) error(EXIT_FAILURE, 0, "no object labels (non-zero pixels) in " "%s (hdu %s). To make a catalog, labeled regions must be defined", objectsfile, p->objectshdu); /* Read the keywords from the clumps image if necessary. */ if(p->clumps) { keys[0].name="CLUMPSN"; keys[1].name="NUMLABS"; keys[0].type=GAL_TYPE_FLOAT32; keys[1].type=GAL_TYPE_SIZE_T; keys[0].array=&p->clumpsn; keys[1].array=&p->numclumps; gal_fits_key_read(clumpsfile, p->clumpshdu, keys, 0, 0); if(keys[0].status) p->clumpsn=NAN; if(keys[1].status) { asprintf(&msg, "couldn't find/read NUMLABS in the header of " "%s (hdu: %s), see error above", clumpsfile, p->clumpshdu); gal_fits_io_error(keys[1].status, msg); } } /* If there were no clumps, then free the clumps array and set it to NULL, so for the rest of the processing, MakeCatalog things that no clumps image was given. */ if(p->numclumps==0) { gal_data_free(p->clumps); p->clumps=NULL; } /* Clean up. */ keys[0].name=keys[1].name=NULL; keys[0].array=keys[1].array=NULL; gal_data_array_free(keys, 2, 1); } /* To make the catalog processing more scalable (and later allow for over-lappping regions), we will define a tile for each object. */ void ui_one_tile_per_object(struct mkcatalogparams *p) { size_t ndim=p->input->ndim; int32_t *l, *lf, *start; size_t i, d, *min, *max, width=2*ndim; size_t *minmax=gal_data_malloc_array(GAL_TYPE_SIZE_T, width*p->numobjects, __func__, "minmax"); size_t *coord=gal_data_malloc_array(GAL_TYPE_SIZE_T, ndim, __func__, "coord"); /* Initialize the minimum and maximum position for each tile/object. So, we'll initialize the minimum coordinates to the maximum possible `size_t' value (in `GAL_BLANK_SIZE_T') and the maximums to zero. */ for(i=0;i<p->numobjects;++i) for(d=0;d<ndim;++d) { minmax[ i * width + d ] = GAL_BLANK_SIZE_T; /* Minimum. */ minmax[ i * width + ndim + d ] = 0; /* Maximum. */ } /* Go over the objects label image and correct the minimum and maximum coordinates. */ start=p->objects->array; lf=(l=p->objects->array)+p->objects->size; do if(*l>0) { /* Get the coordinates of this pixel. */ gal_dimension_index_to_coord(l-start, ndim, p->objects->dsize, coord); /* Check to see this coordinate is the smallest/largest found so far for this label. Note that labels start from 1, while indexs here start from zero. */ min = &minmax[ (*l-1) * width ]; max = &minmax[ (*l-1) * width + ndim ]; for(d=0;d<ndim;++d) { if( coord[d] < min[d] ) min[d] = coord[d]; if( coord[d] > max[d] ) max[d] = coord[d]; } } while(++l<lf); /* For a check. for(i=0;i<p->numobjects;++i) printf("%zu: (%zu, %zu) --> (%zu, %zu)\n", i+1, minmax[i*width], minmax[i*width+1], minmax[i*width+2], minmax[i*width+3]); */ /* Make the tiles. */ p->tiles=gal_tile_series_from_minmax(p->input, minmax, p->numobjects); /* Clean up. */ free(coord); free(minmax); } /* When both catalogs need to be made, we need a separator, the output names will either be built based on the input name or output name (if given). In both cases, the operations are the same, just the base name differs. So to keep things clean, we have defined this function. */ static void ui_preparations_both_names(struct mkcatalogparams *p) { char *basename, *suffix=".fits"; uint8_t keepinputdir=p->cp.keepinputdir; /* See below. */ /* Set the type ending. */ if(p->cp.output) { /* When the user has specified a name, any possible directories in that name must be respected. So we have kept the actual `keepinputdir' value in a temporary variable above and set it to 1 only for this operation. Later we set it back to what it was. */ p->cp.keepinputdir=1; /* Set the base name (if necessary). */ basename = p->cp.output; /* FITS speicifc preparations. */ if( gal_fits_name_is_fits(p->cp.output) ) { /* The output file name that the user has given supersedes the `tableformat' argument. In this case, the filename is a FITS file, so if `tableformat' is a text file, we will change it to a default binary FITS table. */ if( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ) p->cp.tableformat=GAL_TABLE_FORMAT_BFITS; } } else { /* Note that suffix is not used in the text table outputs, so it doesn't matter if the output table is not FITS. */ suffix="_catalog.fits"; basename = p->inputname; } /* Set the final filename. If the output is a text file, we need two files. But when its a FITS file we want to make a multi-extension FITS file. */ if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) { p->objectsout=gal_checkset_automatic_output(&p->cp, basename, "_o.txt"); p->clumpsout=gal_checkset_automatic_output(&p->cp, basename, "_c.txt"); } else { p->objectsout=gal_checkset_automatic_output(&p->cp, basename, suffix); p->clumpsout=p->objectsout; } /* Revert `keepinputdir' to what it was and free `p->cp.output', we will be using `p->objectsout' and `p->clumpsout' from now on. */ if(p->cp.output) { p->cp.keepinputdir=keepinputdir; free(p->cp.output); p->cp.output=NULL; } } /* Set the output name. */ static void ui_preparations_outnames(struct mkcatalogparams *p) { char *suffix; /* Set the output filename */ if(p->cp.output) { /* If the output name is a FITS file, then `gal_tableintern_check_fits_format' will see if the tableformat corresponds to a FITS table or not. If the output name isn't a FITS file then the current value of `p->cp.tableformat' is irrelevant and it must be set to text. We use this value in the end to determine specific features. */ if( gal_fits_name_is_fits(p->cp.output) ) gal_tableintern_check_fits_format(p->cp.output, p->cp.tableformat); else p->cp.tableformat=GAL_TABLE_FORMAT_TXT; /* If a clumps image has been read, then we have two outputs. */ if(p->clumps) ui_preparations_both_names(p); else { gal_checkset_writable_remove(p->cp.output, 0, p->cp.dontdelete); p->objectsout=p->cp.output; p->cp.output=NULL; } } else { /* Both clumps and object catalogs are necessary. */ if(p->clumps) ui_preparations_both_names(p); /* We only need one objects catalog. */ else { suffix = ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "._cat.txt" : "_cat.fits" ); p->objectsout=gal_checkset_automatic_output(&p->cp, p->inputname, suffix); } } } /* Sanity checks and preparations for the upper-limit magnitude. */ static void ui_preparations_upperlimit(struct mkcatalogparams *p) { size_t i, c=0; /* Check if the given range has the same number of elements as dimensions in the input. */ if(p->uprange) { for(i=0;p->uprange[i]!=-1;++i) ++c; if(c!=p->input->ndim) error(EXIT_FAILURE, 0, "%zu values given to `--uprange', but input " "has %zu dimensions", c, p->input->ndim); } /* Check the number of random samples. */ if( p->upnum < MKCATALOG_UPPERLIMIT_MINIMUM_NUM ) error(EXIT_FAILURE, 0, "%zu not acceptable as `--upnum'. The minimum " "acceptable number of random samples for the upper limit " "magnitude is %d", p->upnum, MKCATALOG_UPPERLIMIT_MINIMUM_NUM); /* Check if sigma-clipping parameters have been given. */ if( isnan(p->upsigmaclip[0]) ) error(EXIT_FAILURE, 0, "`--upsigmaclip' is mandatory for measuring " "the upper-limit magnitude. It takes two numbers separated by " "a comma. The first is the multiple of sigma and the second is " "the aborting criteria: <1: tolerance level, >1: number of " "clips"); /* Check if the sigma multiple is given. */ if( isnan(p->upnsigma) ) error(EXIT_FAILURE, 0, "`--upnsigma' is mandatory for measuring the " "upperlimit magnitude. Its value is the multiple of final sigma " "that is reported as the upper-limit"); /* Set the random number generator. */ gsl_rng_env_setup(); p->rng=gsl_rng_alloc(gsl_rng_ranlxs1); p->seed = ( p->envseed ? gsl_rng_default_seed : gal_timing_time_based_rng_seed() ); if(p->envseed) gsl_rng_set(p->rng, p->seed); p->rngname=gsl_rng_name(p->rng); /* Keep the minimum and maximum values of the random number generator. */ p->rngmin=gsl_rng_min(p->rng); p->rngdiff=gsl_rng_max(p->rng)-p->rngmin; } void ui_preparations(struct mkcatalogparams *p) { /* If no columns are requested, then inform the user. */ if(p->columnids==NULL) error(EXIT_FAILURE, 0, "no columns requested, please run again with " "`--help' for the full list of columns you can ask for"); /* Read the inputs. */ ui_preparations_read_inputs(p); /* Read the helper keywords from the inputs and if they aren't present then calculate the necessary parameters. */ ui_preparations_read_keywords(p); /* Set the output filename(s). */ ui_preparations_outnames(p); /* Allocate the output columns to fill up with the program. */ columns_define_alloc(p); /* Make the tiles that cover each object. */ ui_one_tile_per_object(p); /* Allocate the reference random number generator and seed values. It will be cloned once for every thread. If the user hasn't called `envseed', then we want it to be different for every run, so we need to re-set the seed. */ if(p->upperlimit) ui_preparations_upperlimit(p); if( p->hasmag && isnan(p->zeropoint) ) error(EXIT_FAILURE, 0, "no zeropoint specified"); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct mkcatalogparams *p) { struct gal_options_common_params *cp=&p->cp; char *skyfile, *stdfile, *clumpsfile, *objectsfile; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. ui_read_check_only_options(p); */ /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Inform the user. */ if(!p->cp.quiet) { /* Set the names for easy reading. */ skyfile = p->skyfile ? p->skyfile : p->inputname; stdfile = p->stdfile ? p->stdfile : p->inputname; clumpsfile = p->clumpsfile ? p->clumpsfile : p->inputname; objectsfile = p->objectsfile ? p->objectsfile : p->inputname; /* Write the information. */ printf(PROGRAM_NAME" started on %s", ctime(&p->rawtime)); printf(" - Using %zu CPU thread%s\n", p->cp.numthreads, p->cp.numthreads==1 ? "." : "s."); printf(" - Input: %s (hdu: %s)\n", p->inputname, p->cp.hdu); printf(" - Objects: %s (hdu: %s)\n", objectsfile, p->objectshdu); if(p->clumps) printf(" - Clumps: %s (hdu: %s)\n", clumpsfile, p->clumpshdu); printf(" - Sky: %s (hdu: %s)\n", skyfile, p->skyhdu); printf(" - Sky STD: %s (hdu: %s)\n", stdfile, p->stdhdu); if(p->upmaskfile) printf(" - Upper limit magnitude mask: %s (hdu: %s)\n", p->upmaskfile, p->cp.hdu); if(p->upperlimit) { printf(" - Random number generator name: %s\n", p->rngname); printf(" - Random number generator seed: %"PRIu64"\n", p->seed); } } } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct mkcatalogparams *p, struct timeval *t1) { size_t d; /* The temporary arrays for WCS coordinates. */ if(p->wcs_vo ) gal_list_data_free(p->wcs_vo); if(p->wcs_vc ) gal_list_data_free(p->wcs_vc); if(p->wcs_go ) gal_list_data_free(p->wcs_go); if(p->wcs_gc ) gal_list_data_free(p->wcs_gc); if(p->wcs_vcc) gal_list_data_free(p->wcs_vcc); if(p->wcs_gcc) gal_list_data_free(p->wcs_gcc); /* Free the types of the WCS coordinates (for catalog meta-data). */ if(p->ctype) { for(d=0;d<p->input->ndim;++d) free(p->ctype[d]); free(p->ctype); } /* If a random number generator was allocated, free it. */ if(p->rng) gsl_rng_free(p->rng); /* Free output names. */ if(p->clumpsout && p->clumpsout!=p->objectsout) free(p->clumpsout); free(p->objectsout); /* Free the allocated arrays: */ free(p->skyhdu); free(p->stdhdu); free(p->cp.hdu); free(p->oiflag); free(p->ciflag); free(p->skyfile); free(p->stdfile); free(p->clumpshdu); free(p->objectshdu); free(p->clumpsfile); free(p->objectsfile); gal_data_free(p->sky); gal_data_free(p->std); gal_data_free(p->input); gal_data_free(p->upmask); gal_data_free(p->clumps); gal_data_free(p->objects); gal_data_array_free(p->tiles, p->numobjects, 0); /* Print the final message. */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/main.c�������������������������������������������������������������������0000644�0001750�0001750�00000003230�13121462410�013733� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" /* needs main.h. */ #include "mkcatalog.h" /* needs main.h. */ int main (int argc, char *argv[]) { struct timeval t1; struct mkcatalogparams p={{{0},0},0}; /* Set the starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ mkcatalog(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully.*/ return EXIT_SUCCESS; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/Makefile.in��������������������������������������������������������������0000644�0001750�0001750�00000211767�13217217705�014743� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astmkcatalog$(EXEEXT) subdir = bin/mkcatalog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astmkcatalog_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ mkcatalog.$(OBJEXT) columns.$(OBJEXT) upperlimit.$(OBJEXT) astmkcatalog_OBJECTS = $(am_astmkcatalog_OBJECTS) astmkcatalog_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astmkcatalog_SOURCES) DIST_SOURCES = $(astmkcatalog_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astmkcatalog_LDADD = -lgnuastro astmkcatalog_SOURCES = main.c ui.c mkcatalog.c columns.c upperlimit.c EXTRA_DIST = main.h authors-cite.h args.h ui.h mkcatalog.h columns.h \ upperlimit.h dist_sysconf_DATA = astmkcatalog.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/mkcatalog/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/mkcatalog/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astmkcatalog$(EXEEXT): $(astmkcatalog_OBJECTS) $(astmkcatalog_DEPENDENCIES) $(EXTRA_astmkcatalog_DEPENDENCIES) @rm -f astmkcatalog$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astmkcatalog_OBJECTS) $(astmkcatalog_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/columns.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkcatalog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/upperlimit.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������gnuastro-0.5/bin/mkcatalog/astmkcatalog.conf��������������������������������������������������������0000644�0001750�0001750�00000002326�13121462410�016171� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for MakeCatalog. # MakeCatalog is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astmkcatalog --help # Full list of options, short doc. # $ astmkcatalog -P # Print all options and used values. # $ info astmkcatalog # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: hdu 1 objectshdu 2 clumpshdu 3 skyhdu SKY stdhdu SKY_STD zeropoint 0.0 skysubtracted 0 # Output: sfmagnsigma 1 sfmagarea 1 # Upper limit magnitude: upnum 100 upsigmaclip 3,0.2 upnsigma 1 # Catalog columns: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/mkcatalog/Makefile.am��������������������������������������������������������������0000644�0001750�0001750�00000002672�13121462410�014710� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astmkcatalog astmkcatalog_LDADD = -lgnuastro astmkcatalog_SOURCES = main.c ui.c mkcatalog.c columns.c upperlimit.c EXTRA_DIST = main.h authors-cite.h args.h ui.h mkcatalog.h columns.h \ upperlimit.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astmkcatalog.conf ����������������������������������������������������������������������gnuastro-0.5/bin/match/�����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220466�012070� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/match/match.h����������������������������������������������������������������������0000644�0001750�0001750�00000002051�13211076737�013257� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MATCH_H #define MATCH_H void match(struct matchparams *p); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/match/ui.h�������������������������������������������������������������������������0000644�0001750�0001750�00000003470�13211616535�012602� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Group codes. */ enum program_args_groups { UI_GROUP_CATALOGMATCH = GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Available letters for short options: b d e f g i j k m n p r s t u v w x y z A B E G J L O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_HDU2 = 'H', UI_KEY_APERTURE = 'a', UI_KEY_LOGASOUTPUT = 'l', UI_KEY_CCOL1 = 'c', UI_KEY_CCOL2 = 'C', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_NOTMATCHED = 1000, UI_KEY_OUTCOLS, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct matchparams *p); void ui_free_report(struct matchparams *p, struct timeval *t1); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/match/args.h�����������������������������������������������������������������������0000644�0001750�0001750�00000007777�13216276304�013140� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input file parameters. */ { "hdu2", UI_KEY_HDU2, "STR/INT", 0, "Extension name or number of second input.", GAL_OPTIONS_GROUP_INPUT, &p->hdu2, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Outputs. */ { "logasoutput", UI_KEY_LOGASOUTPUT, 0, 0, "No rearranging of inputs, output is log file", GAL_OPTIONS_GROUP_OUTPUT, &p->logasoutput, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "notmatched", UI_KEY_NOTMATCHED, 0, 0, "Output is rows that don't match.", GAL_OPTIONS_GROUP_OUTPUT, &p->notmatched, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outcols", UI_KEY_OUTCOLS, "STR", 0, "Out cols in CSV, `a': first, `b': second input.", GAL_OPTIONS_GROUP_OUTPUT, &p->outcols, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, /* Catalog matching. */ { 0, 0, 0, 0, "Catalog matching", UI_GROUP_CATALOGMATCH }, { "ccol1", UI_KEY_CCOL1, "STR[,STR]", 0, "Column name/number of first catalog.", UI_GROUP_CATALOGMATCH, &p->ccol1, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, { "ccol2", UI_KEY_CCOL2, "STR[,STR]", 0, "Column name/number of second catalog.", UI_GROUP_CATALOGMATCH, &p->ccol2, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, { "aperture", UI_KEY_APERTURE, "FLT[,FLT[,FLT]]", 0, "Acceptable aperture for matching.", UI_GROUP_CATALOGMATCH, &p->aperture, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, {0} }; /* Define the child argp structure ------------------------------- NOTE: these parts can be left untouched.*/ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif �gnuastro-0.5/bin/match/authors-cite.h���������������������������������������������������������������0000644�0001750�0001750�00000002764�13211076737�014605� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif ������������gnuastro-0.5/bin/match/main.h�����������������������������������������������������������������������0000644�0001750�0001750�00000005723�13211616535�013114� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "Match" /* Program full name. */ #define PROGRAM_EXEC "astmatch" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION enum match_modes { MATCH_MODE_INVALID, /* ==0 by default. */ MATCH_MODE_WCS, MATCH_MODE_CATALOG, }; /* Main program parameters structure */ struct matchparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ char *input1name; /* First input filename. */ char *input2name; /* Second input filename. */ char *hdu2; /* Second input's HDU. */ gal_data_t *ccol1; /* Array of firs input column names. */ gal_data_t *ccol2; /* Array of second input column names. */ gal_data_t *outcols; /* Array of second input column names. */ gal_data_t *aperture; /* Acceptable matching aperture. */ uint8_t logasoutput; /* Don't rearrange inputs, out is log. */ uint8_t notmatched; /* Output is rows that don't match. */ /* Internal */ int mode; /* Mode of operation: image or catalog. */ gal_data_t *cols1; /* Column values of first input. */ gal_data_t *cols2; /* Column values of second input. */ gal_list_str_t *acols; /* Output columns from first input. */ gal_list_str_t *bcols; /* Output columns from second input. */ char *logname; /* Name of log file. */ char *out1name; /* Name of first matched output. */ char *out2name; /* Name of second matched output. */ /* Output: */ time_t rawtime; /* Starting time of the program. */ }; #endif ���������������������������������������������gnuastro-0.5/bin/match/match.c����������������������������������������������������������������������0000644�0001750�0001750�00000022466�13211616535�013262� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/match.h> #include <gnuastro/table.h> #include <gnuastro/permutation.h> #include <gnuastro-internal/checkset.h> #include <main.h> /* Read the catalog in the given file and use the given permutation to keep the proper columns. */ static gal_data_t * match_catalog_read_write_all(struct matchparams *p, size_t *permutation, size_t nummatched, int f1s2, size_t **numcolmatch) { size_t origsize; gal_data_t *tmp, *cat; gal_list_void_t *arrays=NULL; char *hdu = (f1s2==1) ? p->cp.hdu : p->hdu2; gal_list_str_t *cols = (f1s2==1) ? p->acols : p->bcols; char *extname = (f1s2==1) ? "INPUT_1" : "INPUT_2"; char *outname = (f1s2==1) ? p->out1name : p->out2name; char *filename = (f1s2==1) ? p->input1name : p->input2name; /* When the output contains columns from both inputs, we need to keep the number of columns matched against each column identifier. */ if(p->outcols) *numcolmatch=gal_data_malloc_array(GAL_TYPE_SIZE_T, gal_list_str_number(cols), __func__, "numcolmatch"); /* Read the full table. */ cat=gal_table_read(filename, hdu, cols, p->cp.searchin, p->cp.ignorecase, p->cp.minmapsize, *numcolmatch); origsize=cat->size; /* Go over each column and permute its contents. */ for(tmp=cat; tmp!=NULL; tmp=tmp->next) { /* Do the permutation. */ gal_permutation_apply(tmp, permutation); /* Correct the size of the array so only the matching columns are saved as output. This is only Gnuastro's convention, it has no effect on later freeing of the array in the memory. */ if(p->notmatched) { /* Add the original array pointer to a list (we need to reset it later). */ gal_list_void_add(&arrays, tmp->array); /* Reset the data structure's array element to start where the non-matched elements start. */ tmp->array=gal_data_ptr_increment(tmp->array, nummatched, tmp->type); /* Correct the size of the tile. */ tmp->size = tmp->dsize[0] = tmp->size - nummatched; } else tmp->size=tmp->dsize[0]=nummatched; } /* Write the catalog to the output. */ if(p->outcols) return cat; else { /* Write the catalog to a file. */ gal_table_write(cat, NULL, p->cp.tableformat, outname, extname); /* Correct arrays and sizes (when `notmatched' was called). The `array' element has to be corrected for later freeing. IMPORTANT: `--notmatched' cannot be called with `--outcols'. So you don't have to worry about the checks here being done later. */ if(p->notmatched) { /* Reverse the list of array pointers to write them back in. */ gal_list_void_reverse(&arrays); /* Correct the array and size pointers. */ for(tmp=cat; tmp!=NULL; tmp=tmp->next) { tmp->array=gal_list_void_pop(&arrays); tmp->size=tmp->dsize[0]=origsize; tmp->block=NULL; } } /* Clean up. */ gal_list_data_free(cat); return NULL; } } /* When specific columns from both inputs are requested, this function will write them out into a single table. */ static void match_catalog_write_one(struct matchparams *p, gal_data_t *a, gal_data_t *b, size_t *acolmatch, size_t *bcolmatch) { gal_data_t *cat=NULL; size_t i, j, ac=0, bc=0; char **strarr=p->outcols->array; /* Go over the initial list of strings. */ for(i=0; i<p->outcols->size; ++i) switch(strarr[i][0]) { case 'a': for(j=0;j<acolmatch[ac];++j) gal_list_data_add(&cat, gal_list_data_pop(&a)); ac++; break; case 'b': for(j=0;j<bcolmatch[bc];++j) gal_list_data_add(&cat, gal_list_data_pop(&b)); bc++; break; default: error(EXIT_FAILURE, 0, "a bug! Please contact us at %s to fix the " "problem. the value to strarr[%zu][0] (%c) is not recognized", PACKAGE_BUGREPORT, i, strarr[i][0]); } /* Reverse the table and write it out. */ gal_list_data_reverse(&cat); gal_table_write(cat, NULL, p->cp.tableformat, p->cp.output, "MATCHED"); } static void match_catalog(struct matchparams *p) { uint32_t *u, *uf; gal_data_t *tmp, *mcols; gal_data_t *a=NULL, *b=NULL; size_t nummatched, *acolmatch, *bcolmatch; /* Find the matching coordinates. We are doing the processing in place, */ mcols=gal_match_coordinates(p->cols1, p->cols2, p->aperture->array, 0, 1, p->cp.minmapsize, &nummatched); /* If a match was found, then make the output files. */ if(mcols) { /* Read all the first catalog columns. */ if(p->logasoutput==0) { /* Read (and possibly write) the outputs. Note that we only need to read the table when it is necessary for the output (the user user might have asked for `--outcols', only with columns of one of the two inputs. */ if(p->outcols==NULL || p->acols) a=match_catalog_read_write_all(p, mcols->array, nummatched, 1, &acolmatch); if(p->outcols==NULL || p->bcols) b=match_catalog_read_write_all(p, mcols->next->array, nummatched, 2, &bcolmatch); /* If one catalog (with specific columns from either of the two inputs) was requested, then write it out. */ if(p->outcols) { /* Arrange the columns and write the output. */ match_catalog_write_one(p, a, b, acolmatch, bcolmatch); /* Clean up. */ if(acolmatch) free(acolmatch); if(bcolmatch) free(bcolmatch); } } /* Write the raw information in a log file if necessary. */ if(p->logname) { /* Note that unsigned 64-bit integers are not recognized in FITS tables. So if the log file is a FITS table, covert the two index columns to uint32. */ tmp=gal_data_copy_to_new_type(mcols, GAL_TYPE_UINT32); tmp->next=mcols->next; tmp->size=nummatched; gal_data_free(mcols); mcols=tmp; /* We also want everything to be incremented by one. In a C program, counting starts with zero, so `gal_match_coordinates' will return indexs starting from zero. But outside a C program, on the command-line people expect counting to start from 1 (for example with AWK). */ uf = (u=mcols->array) + tmp->size; do (*u)++; while(++u<uf); /* Same for the second set of indexs. */ tmp=gal_data_copy_to_new_type(mcols->next, GAL_TYPE_UINT32); uf = (u=tmp->array) + tmp->size; do (*u)++; while(++u<uf); tmp->next=mcols->next->next; gal_data_free(mcols->next); tmp->size=nummatched; mcols->next=tmp; /* Correct the comments. */ free(mcols->comment); mcols->comment="Row index in first catalog (counting from 1)."; free(mcols->next->comment); mcols->next->comment="Row index in second catalog (counting " "from 1)."; /* Write them into the table. */ gal_table_write(mcols, NULL, p->cp.tableformat, p->logname, "LOG_INFO"); /* Set the comment pointer to NULL: they weren't allocated. */ mcols->comment=NULL; mcols->next->comment=NULL; } gal_list_data_free(mcols); } /* Print the number of matches if not in quiet mode. */ if(!p->cp.quiet) fprintf(stdout, "%zu\n", nummatched); } /*******************************************************************/ /************* Top level function *************/ /*******************************************************************/ void match(struct matchparams *p) { if(p->mode==MATCH_MODE_CATALOG) match_catalog(p); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/match/ui.c�������������������������������������������������������������������������0000644�0001750�0001750�00000054355�13216276304�012606� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <gnuastro/fits.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" matches catalogs of objects " "and (by default) will return the re-arranged matching inputs. The " "optional log file will return low-level information about the match " "(indexs and distances).\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct matchparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].doc="Extension name or number of first input."; break; case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_NUMTHREADS: cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct matchparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: if(p->input1name) { if(p->input2name) argp_error(state, "only two arguments (input files) should be " "given"); else p->input2name=arg; } else p->input1name=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct matchparams *p) { if(p->outcols && p->notmatched) error(EXIT_FAILURE, 0, "`--outcols' and `--notmatched' cannot be called " "at the same time. The former is only for cases when the matches " "are required"); } static void ui_check_options_and_arguments(struct matchparams *p) { /* Make sure two input file names were given and if they a FITS file, that a HDU is also given for each. */ if(p->input1name) { if( gal_fits_name_is_fits(p->input1name) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU for first input. When the input is " "a FITS file, a HDU must also be specified, you can use the " "`--hdu' (`-h') option and give it the HDU number (starting " "from zero), extension name, or anything acceptable by " "CFITSIO"); } else error(EXIT_FAILURE, 0, "no input file is specified: two inputs are " "necessary"); if(p->input2name) { if( gal_fits_name_is_fits(p->input2name) && p->hdu2==NULL ) error(EXIT_FAILURE, 0, "no HDU for second input. Please use the " "`--hdu2' (`-H') option and give it the HDU number (starting " "from zero), extension name, or anything acceptable by " "CFITSIO"); } else error(EXIT_FAILURE, 0, "second input file not specified: two inputs are " "necessary"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_set_mode(struct matchparams *p) { /* Check if we are in image or catalog mode. We will base the mode on the first input, then check with the second. */ if( gal_fits_name_is_fits(p->input1name) ) p->mode = ( (gal_fits_hdu_format(p->input1name, p->cp.hdu) == IMAGE_HDU) ? MATCH_MODE_WCS : MATCH_MODE_CATALOG ); else p->mode=MATCH_MODE_CATALOG; /* Now that the mode is set, check the second input's type. */ if( gal_fits_name_is_fits(p->input2name) ) { if(gal_fits_hdu_format(p->input2name, p->hdu2) == IMAGE_HDU) { if( p->mode==MATCH_MODE_CATALOG) error(EXIT_FAILURE, 0, "%s is a catalog, while %s is an image. " "Both inputs have to be images or catalogs", gal_checkset_dataset_name(p->input1name, p->cp.hdu), gal_checkset_dataset_name(p->input2name, p->hdu2) ); } else { if( p->mode==MATCH_MODE_WCS) error(EXIT_FAILURE, 0, "%s is an image, while %s is a catalog. " "Both inputs have to be images or catalogs", gal_checkset_dataset_name(p->input1name, p->cp.hdu), gal_checkset_dataset_name(p->input2name, p->hdu2)); } } else if(p->mode==MATCH_MODE_WCS) error(EXIT_FAILURE, 0, "%s is an image, while %s is a catalog! Both " "inputs have to be images or catalogs", gal_checkset_dataset_name(p->input1name, p->cp.hdu), gal_checkset_dataset_name(p->input2name, p->hdu2)); } /* The final aperture must have the following values: p->aperture[0]: Major axis length. p->aperture[1]: Axis ratio. p->aperture[2]: Position angle (relative to first dim). */ static void ui_read_columns_aperture_2d(struct matchparams *p) { size_t apersize=3; gal_data_t *newaper=NULL; double *naper, *oaper=p->aperture->array; /* A general sanity check: the first two elements of aperture cannot be zero or negative. */ if( oaper[0]<=0 ) error(EXIT_FAILURE, 0, "the first value of `--aperture' cannot be " "zero or negative"); if( p->aperture->size>1 && oaper[1]<=0 ) error(EXIT_FAILURE, 0, "the second value of `--aperture' cannot be " "zero or negative"); /* Will be needed in more than one case. */ if(p->aperture->size!=3) { newaper=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &apersize, NULL, 0, -1, NULL, NULL, NULL); naper=newaper->array; } /* Different based on */ switch(p->aperture->size) { case 1: naper[0]=oaper[0]; naper[1]=1; naper[2]=0; break; case 2: naper[0] = oaper[0]>oaper[1] ? oaper[0] : oaper[1]; naper[1] = oaper[0]>oaper[1] ? oaper[1]/oaper[0] : oaper[0]/oaper[1]; naper[2] = oaper[0]>oaper[1] ? 0 : 90; break; case 3: if(oaper[1]>1) error(EXIT_FAILURE, 0, "second value to `--aperture' is larger " "than one. When three numbers are given to this option, the " "second is the axis ratio (which must always be less than 1)."); break; default: error(EXIT_FAILURE, 0, "%zu values given to `--aperture'. In 2D, this " "option can only take 1, 2, or 3 values", p->aperture->size); } /* If a new aperture was defined, then replace it with the exitsting one. */ if(newaper) { gal_data_free(p->aperture); p->aperture=newaper; } } /* We want to keep the columns as double type. So what-ever their original type is, convert it. */ static gal_data_t * ui_read_columns_to_double(struct matchparams *p, char *filename, char *hdu, gal_list_str_t *cols, size_t numcols) { gal_data_t *tmp, *ttmp, *tout, *out=NULL; struct gal_options_common_params *cp=&p->cp; char *diff_cols_error="%s: the number of columns matched (%zu) " "differs from the number of usable calls to `--ccol1' (%zu). " "Please give more specific values to `--ccol1' (column " "numberes are the only identifiers guaranteed to be unique)."; /* Read the columns. */ tout=gal_table_read(filename, hdu, cols, cp->searchin, cp->ignorecase, cp->minmapsize, NULL); /* A small sanity check. */ if(gal_list_data_number(tout)!=numcols) error(EXIT_FAILURE, 0, diff_cols_error, gal_checkset_dataset_name(filename, hdu), gal_list_data_number(tout), numcols); /* Go over the columns and see if they are double or not. To keep things simple, we'll keep a new list even if all the types are float64.*/ tmp=tout; while(tmp!=NULL) { /* We need ot set the `next' pointer */ ttmp=tmp->next; tmp->next=NULL; /* Correct the type if necessary. */ if(tmp->type==GAL_TYPE_FLOAT64) gal_list_data_add(&out, tmp); else gal_list_data_add(&out, gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64) ); /* Set `tmp' to the initial `next pointer. */ tmp=ttmp; } /* The `out' above is in reverse, so correct it and return */ gal_list_data_reverse(&out); return out; } /* Read catalog columns */ static void ui_read_columns(struct matchparams *p) { size_t i; size_t ccol1n=p->ccol1->size; size_t ccol2n=p->ccol2->size; gal_list_str_t *cols1=NULL, *cols2=NULL; char **strarr1=p->ccol1->array, **strarr2=p->ccol2->array; /* Make sure the same number of columns is given to both. */ if(ccol1n!=ccol2n) error(EXIT_FAILURE, 0, "the number of values given to `--ccol1' and " "`--ccol2' (%zu and %zu) are not equal", ccol1n, ccol2n); /* Read/check the aperture values. */ if(p->aperture) switch(ccol1n) { case 1: if(p->aperture->size>1) error(EXIT_FAILURE, 0, "%zu values given to `--aperture'. In a 1D " "match, this option can only take one value", p->aperture->size); break; case 2: ui_read_columns_aperture_2d(p); break; default: error(EXIT_FAILURE, 0, "%zu dimensional matches are not currently " "supported (maximum is 2 dimensions). The number of " "dimensions is deduced from the number of values given to " "`--ccol1' and `--ccol2'", ccol1n); } else error(EXIT_FAILURE, 0, "no matching aperture specified. Please use " "the `--aperture' option to define the acceptable aperture for " "matching the coordinates (in the same units as each " "dimension). Please run the following command for more " "information.\n\n $ info %s\n", PROGRAM_EXEC); /* Convert the array of strings to a list of strings for the column names. */ for(i=0;i<ccol1n;++i) { gal_list_str_add(&cols1, strarr1[i], 0); gal_list_str_add(&cols2, strarr2[i], 0); strarr1[i]=strarr2[i]=NULL; /* So they are not freed later. */ } gal_list_str_reverse(&cols1); gal_list_str_reverse(&cols2); /* Read the columns. */ if(p->cp.searchin) { /* Read the first dataset. */ p->cols1=ui_read_columns_to_double(p, p->input1name, p->cp.hdu, cols1, ccol1n); p->cols2=ui_read_columns_to_double(p, p->input2name, p->hdu2, cols2, ccol2n); } else error(EXIT_FAILURE, 0, "no `--searchin' option specified. Please run " "the following command for more information:\n\n" " $ info gnuastro \"selecting table columns\"\n"); /* Free the extra spaces. */ gal_list_str_free(cols1, 1); gal_list_str_free(cols2, 1); gal_data_free(p->ccol1); gal_data_free(p->ccol2); p->ccol1=p->ccol2=NULL; } static void ui_preparations_out_cols(struct matchparams *p) { size_t i; char **strarr=p->outcols->array; /* Go over all the values and put the respective column identifier in the proper list. */ for(i=0;i<p->outcols->size;++i) switch(strarr[i][0]) { case 'a': gal_list_str_add(&p->acols, strarr[i]+1, 0); break; case 'b': gal_list_str_add(&p->bcols, strarr[i]+1, 0); break; default: error(EXIT_FAILURE, 0, "`%s' is not a valid value for `--outcols'. " "The first character of each value to this option must be " "either `a' or `b'. The former specifies a column from the " "first input and the latter a column from the second. The " "characters after them can be any column identifier (number, " "name, or regular expression). For more on column selection, " "please run this command:\n\n" " $ info gnuastro \"Selecting table columns\"\n", strarr[i]); } /* Revere the lists so they correspond to the input order. */ gal_list_str_reverse(&p->acols); gal_list_str_reverse(&p->bcols); } static void ui_preparations_out_name(struct matchparams *p) { if(p->logasoutput) { /* Set the logname (as output). */ if(p->cp.output) gal_checkset_allocate_copy(p->cp.output, &p->logname); else { if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) p->logname=gal_checkset_automatic_output(&p->cp, p->input1name, "_matched.txt"); else p->logname=gal_checkset_automatic_output(&p->cp, p->input1name, "_matched.fits"); } /* Make sure a file with this name doesn't exist. */ gal_checkset_writable_remove(p->out1name, 0, p->cp.dontdelete); } else { if(p->outcols) { if(p->cp.output==NULL) p->cp.output = gal_checkset_automatic_output(&p->cp, p->input1name, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_matched.txt" : "_matched.fits") ); gal_checkset_writable_remove(p->cp.output, 0, p->cp.dontdelete); } else { /* Set `p->out1name' and `p->out2name'. */ if(p->cp.output) { if( gal_fits_name_is_fits(p->cp.output) ) { gal_checkset_allocate_copy(p->cp.output, &p->out1name); gal_checkset_allocate_copy(p->cp.output, &p->out2name); } else { p->out1name=gal_checkset_automatic_output(&p->cp, p->cp.output, "_matched_1.txt"); p->out2name=gal_checkset_automatic_output(&p->cp, p->cp.output, "_matched_2.txt"); } } else { if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) { p->out1name=gal_checkset_automatic_output(&p->cp, p->input1name, "_matched_1.txt"); p->out2name=gal_checkset_automatic_output(&p->cp, p->input2name, "_matched_2.txt"); } else { p->out1name=gal_checkset_automatic_output(&p->cp, p->input1name, "_matched.fits"); gal_checkset_allocate_copy(p->out1name, &p->out2name); } } /* Make sure no file with these names exists. */ gal_checkset_writable_remove(p->out1name, 0, p->cp.dontdelete); gal_checkset_writable_remove(p->out2name, 0, p->cp.dontdelete); } /* If a log file is necessary, set its name here. */ if(p->cp.log) { p->logname = ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? PROGRAM_EXEC".txt" : PROGRAM_EXEC".fits" ); gal_checkset_writable_remove(p->logname, 0, p->cp.dontdelete); } } } static void ui_preparations(struct matchparams *p) { /* Set the mode of the program. */ ui_set_mode(p); /* Currently Match only works on catalogs. */ if(p->mode==MATCH_MODE_WCS) error(EXIT_FAILURE, 0, "currently Match only works on catalogs, we will " "implement the WCS matching routines later"); else { ui_read_columns(p); if(p->outcols) ui_preparations_out_cols(p); } /* Set the output filename. */ ui_preparations_out_name(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct matchparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct matchparams *p, struct timeval *t1) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->out1name); free(p->out2name); free(p->cp.output); /* Print the final message. if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); */ } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/match/main.c�����������������������������������������������������������������������0000644�0001750�0001750�00000003055�13211076737�013107� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" #include "match.h" /* Main function */ int main (int argc, char *argv[]) { struct timeval t1; struct matchparams p={{{0},0},0}; /* Set they starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ match(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully.*/ return EXIT_SUCCESS; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/match/Makefile.in������������������������������������������������������������������0000644�0001750�0001750�00000211251�13217217705�014061� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astmatch$(EXEEXT) subdir = bin/match ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astmatch_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) match.$(OBJEXT) astmatch_OBJECTS = $(am_astmatch_OBJECTS) astmatch_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astmatch_SOURCES) DIST_SOURCES = $(astmatch_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astmatch_LDADD = -lgnuastro astmatch_SOURCES = main.c ui.c match.c EXTRA_DIST = main.h authors-cite.h args.h ui.h match.h dist_sysconf_DATA = astmatch.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/match/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/match/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astmatch$(EXEEXT): $(astmatch_OBJECTS) $(astmatch_DEPENDENCIES) $(EXTRA_astmatch_DEPENDENCIES) @rm -f astmatch$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astmatch_OBJECTS) $(astmatch_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/match.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/match/astmatch.conf����������������������������������������������������������������0000644�0001750�0001750�00000001731�13211076737�014471� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for Match. # Match is part of GNU Astronomy Utilities. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astmatch --help # Full list of options, short doc. # $ astmatch -P # Print all options and used values. # $ info astmatch # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input hdu2 1 # Catalog matching ccol1 2,3 ccol2 2,3���������������������������������������gnuastro-0.5/bin/match/Makefile.am������������������������������������������������������������������0000644�0001750�0001750�00000002560�13211076737�014053� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2017, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astmatch astmatch_LDADD = -lgnuastro astmatch_SOURCES = main.c ui.c match.c EXTRA_DIST = main.h authors-cite.h args.h ui.h match.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astmatch.conf ������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220466�011741� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/keywords.h��������������������������������������������������������������������0000644�0001750�0001750�00000002064�13121462410�013672� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef HEADER_H #define HEADER_H int keywords(struct fitsparams *p); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/fits.h������������������������������������������������������������������������0000644�0001750�0001750�00000002572�13121462410�012774� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef FITS_H #define FITS_H enum fits_action_ids { FITS_ACTION_INVALID, /* ==0: by C standard. */ FITS_ACTION_DELETE, FITS_ACTION_RENAME, FITS_ACTION_UPDATE, FITS_ACTION_WRITE, FITS_ACTION_COPY, FITS_ACTION_REMOVE, }; int fits_has_error(struct fitsparams *p, int actioncode, char *string, int status); int fits(struct fitsparams *p); #endif ��������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/ui.h��������������������������������������������������������������������������0000644�0001750�0001750�00000004021�13174462540�012447� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_EXTENSION = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_KEYWORD, }; /* Available letters for short options: b e f g i j l m n s v x y z A B E G J L O W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_REMOVE = 'R', UI_KEY_COPY = 'C', UI_KEY_CUT = 'k', UI_KEY_PRINTALLKEYS = 'p', UI_KEY_ASIS = 'a', UI_KEY_DELETE = 'd', UI_KEY_RENAME = 'r', UI_KEY_UPDATE = 'u', UI_KEY_WRITE = 'w', UI_KEY_COMMENT = 'c', UI_KEY_HISTORY = 'H', UI_KEY_DATE = 't', UI_KEY_QUITONERROR = 'Q', /* Only with long version (start with a value 1000, the rest will be set automatically). */ }; void ui_read_check_inputs_setup(int argc, char *argv[], struct fitsparams *p); void ui_free_and_report(struct fitsparams *p); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/args.h������������������������������������������������������������������������0000644�0001750�0001750�00000012517�13174462540�012777� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { 0, 0, 0, 0, "HDUs (extensions):", UI_GROUP_EXTENSION }, { "remove", UI_KEY_REMOVE, "STR", 0, "Remove extension from input file.", UI_GROUP_EXTENSION, &p->remove, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "copy", UI_KEY_COPY, "STR", 0, "Copy extension to output file.", UI_GROUP_EXTENSION, &p->copy, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "cut", UI_KEY_CUT, "STR", 0, "Copy extension to output and remove from input.", UI_GROUP_EXTENSION, &p->cut, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Keywords (in one HDU):", UI_GROUP_KEYWORD }, { "asis", UI_KEY_ASIS, "STR", 0, "Write the argument string as is into the header.", UI_GROUP_KEYWORD, &p->asis, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "delete", UI_KEY_DELETE, "STR", 0, "Delete a keyword from the header.", UI_GROUP_KEYWORD, &p->delete, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "rename", UI_KEY_RENAME, "STR", 0, "Rename keyword, keeping value and comments.", UI_GROUP_KEYWORD, &p->rename, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "update", UI_KEY_UPDATE, "STR", 0, "Update a keyword value or comments.", UI_GROUP_KEYWORD, &p->update, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "write", UI_KEY_WRITE, "STR", 0, "Write a keyword (with value, comments and units).", UI_GROUP_KEYWORD, &p->write, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "history", UI_KEY_HISTORY, "STR", 0, "Add HISTORY keyword, any length is ok.", UI_GROUP_KEYWORD, &p->history, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "comment", UI_KEY_COMMENT, "STR", 0, "Add COMMENT keyword, any length is ok.", UI_GROUP_KEYWORD, &p->comment, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "date", UI_KEY_DATE, 0, 0, "Set the DATE keyword to the current time.", UI_GROUP_KEYWORD, &p->date, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "printallkeys", UI_KEY_PRINTALLKEYS, 0, 0, "Print all keywords in the selected HDU.", UI_GROUP_KEYWORD, &p->printallkeys, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "quitonerror", UI_KEY_QUITONERROR, 0, 0, "Quit if there is an error on any action.", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->quitonerror, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/authors-cite.h����������������������������������������������������������������0000644�0001750�0001750�00000002774�13211076737�014457� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif ����gnuastro-0.5/bin/fits/main.h������������������������������������������������������������������������0000644�0001750�0001750�00000005734�13161316532�012765� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H #include <gnuastro/list.h> #include <gnuastro/fits.h> #include <gnuastro-internal/options.h> /* Progarm name macros: */ #define PROGRAM_NAME "Fits" /* Program full name. */ #define PROGRAM_EXEC "astfits" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION enum fits_mode { FITS_MODE_INVALID, /* ==0, by C standard. */ FITS_MODE_HDU, FITS_MODE_KEY, }; /* Main program's structure */ struct fitsparams { /* From the environment. */ struct gal_options_common_params cp; /* Common parameters. */ int hdu_in_commandline; /* HDU wasn't given in config. file. */ char *filename; /* Name of input file. */ gal_list_str_t *remove; /* Remove extensions from a file. */ gal_list_str_t *copy; /* Copy extensions to output. */ gal_list_str_t *cut; /* Copy ext. to output and remove. */ uint8_t printallkeys; /* Print all the header keywords. */ uint8_t date; /* Set DATE to current time. */ char *comment; /* COMMENT value. */ char *history; /* HISTORY value. */ gal_list_str_t *asis; /* Strings to write asis. */ gal_list_str_t *delete; /* Keywords to remove. */ gal_list_str_t *rename; /* Rename a keyword. */ gal_list_str_t *update; /* For keywords to update. */ gal_list_str_t *write; /* Full arg. for keywords to add. */ uint8_t quitonerror; /* Quit if an error occurs. */ /* Internal: */ int mode; /* Operating on HDUs or keywords. */ gal_fits_list_key_t *write_keys; /* Keys to write in the header. */ gal_fits_list_key_t *update_keys; /* Keys to update in the header. */ time_t rawtime; /* Starting time of the program. */ }; #endif ������������������������������������gnuastro-0.5/bin/fits/keywords.c��������������������������������������������������������������������0000644�0001750�0001750�00000021243�13121462410�013665� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "fits.h" /***********************************************************************/ /****************** Preparations ********************/ /***********************************************************************/ static void keywords_open(struct fitsparams *p, fitsfile **fptr, int iomode) { if(*fptr==NULL) *fptr=gal_fits_hdu_open(p->filename, p->cp.hdu, iomode); } /***********************************************************************/ /****************** File manipulation ********************/ /***********************************************************************/ static void keywords_rename_keys(struct fitsparams *p, fitsfile **fptr, int *r) { int status=0; char *copy, *str, *from, *to; /* Set the FITS file pointer. */ keywords_open(p, fptr, READWRITE); /* Tokenize the */ while(p->rename!=NULL) { /* Pop out the top element. */ str=gal_list_str_pop(&p->rename); /* Take a copy of the input string for error reporting, because `strtok' will write into the array. */ gal_checkset_allocate_copy(str, ©); /* Tokenize the input. */ from = strtok(str, ", "); to = strtok(NULL, ", "); /* Make sure both elements were read. */ if(from==NULL || to==NULL) error(EXIT_FAILURE, 0, "`%s' could not be tokenized in order to " "complete rename. There should be a space character " "or a comma (,) between the two keyword names. If you have " "used the space character, be sure to enclose the value to " "the `--rename' option in double quotation marks", copy); /* Rename the keyword */ fits_modify_name(*fptr, from, to, &status); if(status) *r=fits_has_error(p, FITS_ACTION_RENAME, from, status); /* Clean up the user's input string. Note that `strtok' just changes characters within the allocated string, no extra allocation is done. */ free(str); free(copy); } } static void keywords_write_update(struct fitsparams *p, fitsfile **fptr, gal_fits_list_key_t *keyll, int u1w2) { int status=0; gal_fits_list_key_t *tmp; /* Open the FITS file if it hasn't been opened yet. */ keywords_open(p, fptr, READWRITE); /* Go through each key and write it in the FITS file. */ while(keyll!=NULL) { /* Write the information: */ if(u1w2==1) { if(keyll->value) { if( fits_update_key(*fptr, gal_fits_type_to_datatype(keyll->type), keyll->keyname, keyll->value, keyll->comment, &status) ) gal_fits_io_error(status, NULL); } else { if(fits_write_key_null(*fptr, keyll->keyname, keyll->comment, &status)) gal_fits_io_error(status, NULL); } } else if (u1w2==2) { if(keyll->value) { if( fits_write_key(*fptr, gal_fits_type_to_datatype(keyll->type), keyll->keyname, keyll->value, keyll->comment, &status) ) gal_fits_io_error(status, NULL); } else { if(fits_write_key_null(*fptr, keyll->keyname, keyll->comment, &status)) gal_fits_io_error(status, NULL); } if(keyll->unit && fits_write_key_unit(*fptr, keyll->keyname, keyll->unit, &status) ) gal_fits_io_error(status, NULL); } else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at `%s' so we " "can fix this problem. The value %d is not valid for `u1w2'", __func__, PACKAGE_BUGREPORT, u1w2); /* Add the unit (if one was given). */ if(keyll->unit && fits_write_key_unit(*fptr, keyll->keyname, keyll->unit, &status) ) gal_fits_io_error(status, NULL); /* Free the allocated spaces if necessary: */ if(keyll->vfree) free(keyll->value); if(keyll->kfree) free(keyll->keyname); if(keyll->cfree) free(keyll->comment); /* Keep the pointer to the next keyword and free the allocated space for this keyword.*/ tmp=keyll->next; free(keyll); keyll=tmp; } } static void keywords_print_all_keys(struct fitsparams *p, fitsfile **fptr) { size_t i=0; int nkeys, status=0; char *fullheader, *c, *cf; /* Open the FITS file. */ keywords_open(p, fptr, READONLY); /* Conver the header into a contiguous string. */ if( fits_hdr2str(*fptr, 0, NULL, 0, &fullheader, &nkeys, &status) ) gal_fits_io_error(status, NULL); /* FLEN_CARD supposes that the NULL string character is in the end of each keyword header card. In fits_hdr2str, the NULL characters are removed and so the maximum length is one less. */ cf=(c=fullheader)+nkeys*(FLEN_CARD-1); do { if(i && i%(FLEN_CARD-1)==0) putc('\n', stdout); putc(*c++, stdout); ++i; } while(c<cf); printf("\n"); if (fits_free_memory(fullheader, &status) ) gal_fits_io_error(status, "problem in header.c for freeing " "the memory used to keep all the headers"); } /***********************************************************************/ /****************** Main function ********************/ /***********************************************************************/ int keywords(struct fitsparams *p) { int status=0; int r=EXIT_SUCCESS; fitsfile *fptr=NULL; gal_list_str_t *tstll; /* Delete the requested keywords. */ if(p->delete) { keywords_open(p, &fptr, READWRITE); for(tstll=p->delete; tstll!=NULL; tstll=tstll->next) { fits_delete_key(fptr, tstll->v, &status); if(status) r=fits_has_error(p, FITS_ACTION_DELETE, tstll->v, status); } } /* Rename the requested keywords. */ if(p->rename) keywords_rename_keys(p, &fptr, &r); /* Update the requested keywords. */ if(p->update) keywords_write_update(p, &fptr, p->update_keys, 1); /* Write the requested keywords. */ if(p->write) keywords_write_update(p, &fptr, p->write_keys, 2); /* Put in any full line of keywords as-is. */ if(p->asis) for(tstll=p->asis; tstll!=NULL; tstll=tstll->next) { fits_write_record(fptr, tstll->v, &status); if(status) r=fits_has_error(p, FITS_ACTION_WRITE, tstll->v, status); } /* Add the history keyword(s). */ if(p->history) { fits_write_history(fptr, p->history, &status); if(status) r=fits_has_error(p, FITS_ACTION_WRITE, "HISTORY", status); } /* Add comment(s). */ if(p->comment) { fits_write_comment(fptr, p->comment, &status); if(status) r=fits_has_error(p, FITS_ACTION_WRITE, "COMMENT", status); } /* Update/add the date. */ if(p->date) { fits_write_date(fptr, &status); if(status) r=fits_has_error(p, FITS_ACTION_WRITE, "DATE", status); } /* If nothing was requested, then print all the keywords in this extension. */ if(p->printallkeys) keywords_print_all_keys(p, &fptr); /* Close the FITS file */ if(fits_close_file(fptr, &status)) gal_fits_io_error(status, NULL); /* Return. */ return r; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/fits.c������������������������������������������������������������������������0000644�0001750�0001750�00000023640�13175442274�013005� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <string.h> #include <gnuastro/list.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "fits.h" #include "keywords.h" int fits_has_error(struct fitsparams *p, int actioncode, char *string, int status) { char *action=NULL; int r=EXIT_SUCCESS; switch(actioncode) { case FITS_ACTION_DELETE: action="deleted"; break; case FITS_ACTION_RENAME: action="renamed"; break; case FITS_ACTION_UPDATE: action="updated"; break; case FITS_ACTION_WRITE: action="written"; break; case FITS_ACTION_COPY: action="copied"; break; case FITS_ACTION_REMOVE: action="renoved"; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at `%s' so we " "can fix this problem. The value of `actioncode' must not be %d", __func__, PACKAGE_BUGREPORT, actioncode); } if(p->quitonerror) { fits_report_error(stderr, status); error(EXIT_FAILURE, 0, "%s: not %s: %s\n", __func__, action, string); } else { fprintf(stderr, "Not %s: %s\n", action, string); r=EXIT_FAILURE; } return r; } /* Print all the extension informations. */ void fits_print_extension_info(struct fitsparams *p) { uint16_t *ui16; fitsfile *fptr; gal_data_t *cols=NULL, *tmp; char **tstra, **estra, **sstra; size_t i, numext, *dsize, ndim; int j, nc, numhdu, hdutype, status=0, type; char *msg, *tstr=NULL, sstr[1000], extname[FLEN_VALUE]; /* Open the FITS file and read the first extension type, upon moving to the next extension, we will read its type, so for the first we will need to do it explicitly. */ fptr=gal_fits_hdu_open(p->filename, "0", READONLY); if (fits_get_hdu_type(fptr, &hdutype, &status) ) gal_fits_io_error(status, "reading first extension"); /* Get the number of HDUs. */ if( fits_get_num_hdus(fptr, &numhdu, &status) ) gal_fits_io_error(status, "finding number of HDUs"); numext=numhdu; /* Allocate all the columns (in reverse order, since this is a simple linked list). */ gal_list_data_add_alloc(&cols, NULL, GAL_TYPE_STRING, 1, &numext, NULL, 1, p->cp.minmapsize, "HDU_SIZE", "name", "Size of " "image or table number of rows and columns."); gal_list_data_add_alloc(&cols, NULL, GAL_TYPE_STRING, 1, &numext, NULL, 1, p->cp.minmapsize, "HDU_TYPE", "name", "Image " "data type or `table' format (ASCII or binary)."); gal_list_data_add_alloc(&cols, NULL, GAL_TYPE_STRING, 1, &numext, NULL, 1, p->cp.minmapsize, "EXTNAME", "name", "Extension name of this HDU (EXTNAME in FITS)."); gal_list_data_add_alloc(&cols, NULL, GAL_TYPE_UINT16, 1, &numext, NULL, 1, p->cp.minmapsize, "HDU_INDEX", "count", "Index " "(starting from zero) of each HDU (extension)."); /* Keep pointers to the array of each column for easy writing. */ ui16 = cols->array; estra = cols->next->array; tstra = cols->next->next->array; sstra = cols->next->next->next->array; cols->next->disp_width=15; cols->next->next->disp_width=15; /* Fill in each column. */ for(i=0;i<numext;++i) { /* Work based on the type of the extension. */ switch(hdutype) { case IMAGE_HDU: gal_fits_img_info(fptr, &type, &ndim, &dsize, NULL, NULL); tstr=gal_type_name(type , 1); break; case ASCII_TBL: case BINARY_TBL: ndim=2; tstr = hdutype==ASCII_TBL ? "table_ascii" : "table_binary"; dsize=gal_data_malloc_array(GAL_TYPE_SIZE_T, 2, __func__, "dsize"); gal_fits_tab_size(fptr, dsize+1, dsize); break; default: error(EXIT_FAILURE, 0, "%s: a bug! the `hdutype' code %d not " "recognized", __func__, hdutype); } /* Read the extension name*/ fits_read_keyword(fptr, "EXTNAME", extname, NULL, &status); switch(status) { case 0: gal_fits_key_clean_str_value(extname); break; case KEY_NO_EXIST: sprintf(extname, "%s", GAL_BLANK_STRING); status=0; break; default: gal_fits_io_error(status, "reading EXTNAME keyword"); } status=0; /* Write the size into a string. `sprintf' returns the number of written characters (excluding the `\0'). So for each dimension's size that is written, we add to `nc' (the number of characters). Note that FITS allows blank extensions, in those cases, return "0". */ if(ndim>0) { nc=0; for(j=ndim-1;j>=0;--j) nc += sprintf(sstr+nc, "%zux", dsize[j]); sstr[nc-1]='\0'; free(dsize); } else { sstr[0]='0'; sstr[1]='\0'; } /* Write the strings into the columns. */ j=0; for(tmp=cols; tmp!=NULL; tmp=tmp->next) { switch(j) { case 0: ui16[i]=i; break; case 1: gal_checkset_allocate_copy(extname, estra+i); break; case 2: gal_checkset_allocate_copy(tstr, tstra+i); break; case 3: gal_checkset_allocate_copy(sstr, sstra+i); break; } ++j; } /* Move to the next extension if we aren't on the last extension. */ if( i!=numext-1 && fits_movrel_hdu(fptr, 1, &hdutype, &status) ) { asprintf(&msg, "moving to hdu %zu", i+1); gal_fits_io_error(status, msg); } } /* Print the resutls. */ if(!p->cp.quiet) { printf("%s\nRun on %s-----\n", PROGRAM_STRING, ctime(&p->rawtime)); printf("HDU (extension) information: `%s'.\n", p->filename); printf(" Column 1: Index (counting from 0, usable with `--hdu').\n"); printf(" Column 2: Name (`EXTNAME' in FITS standard, usable with " "`--hdu').\n"); printf(" Column 3: Image data type or `table' format (ASCII or " "binary).\n"); printf(" Column 4: Size of data in HDU.\n"); printf("-----\n"); } gal_table_write(cols, NULL, GAL_TABLE_FORMAT_TXT, NULL, NULL); gal_list_data_free(cols); } static void fits_hdu_remove(struct fitsparams *p, int *r) { char *hdu; fitsfile *fptr; int status=0, hdutype; while(p->remove) { /* Pop-out the top element. */ hdu=gal_list_str_pop(&p->remove); /* Open the FITS file at the specified HDU. */ fptr=gal_fits_hdu_open(p->filename, hdu, READWRITE); /* Delete the extension. */ if( fits_delete_hdu(fptr, &hdutype, &status) ) *r=fits_has_error(p, FITS_ACTION_REMOVE, hdu, status); /* Close the file. */ fits_close_file(fptr, &status); } } static void fits_hdu_copy(struct fitsparams *p, int cut1_copy0, int *r) { char *hdu; fitsfile *in, *out; int status=0, hdutype; gal_list_str_t *list = cut1_copy0 ? p->cut : p->copy; /* Open the output file. */ out=gal_fits_open_to_write(p->cp.output); /* Copy all the given extensions. */ while(list) { /* Pop-out the top element. */ hdu=gal_list_str_pop(&list); /* Open the FITS file at the specified HDU. */ in=gal_fits_hdu_open(p->filename, hdu, cut1_copy0 ? READWRITE : READONLY); /* Copy to the extension. */ if( fits_copy_hdu(in, out, 0, &status) ) *r=fits_has_error(p, FITS_ACTION_COPY, hdu, status); /* If this is a `cut' operation, then remove the extension. */ if(cut1_copy0) if( fits_delete_hdu(in, &hdutype, &status) ) *r=fits_has_error(p, FITS_ACTION_REMOVE, hdu, status); /* Close the input file. */ fits_close_file(in, &status); } /* Close the output file. */ fits_close_file(out, &status); } int fits(struct fitsparams *p) { int r=EXIT_SUCCESS, printhduinfo=1; switch(p->mode) { /* Keywords, we have a separate set of functions in `keywords.c'. */ case FITS_MODE_KEY: r=keywords(p); break; /* HDU, functions defined here. */ case FITS_MODE_HDU: if(p->copy) { fits_hdu_copy(p, 0, &r); printhduinfo=0; } if(p->cut) { fits_hdu_copy(p, 1, &r); printhduinfo=0; } if(p->remove) { fits_hdu_remove(p, &r); printhduinfo=0; } if(printhduinfo) fits_print_extension_info(p); break; /* Not recognized. */ default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to address " "the problem. The code %d is not recognized for p->mode", __func__, PACKAGE_BUGREPORT, p->mode); } return r; } ������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/extension.c�������������������������������������������������������������������0000644�0001750�0001750�00000001771�13121462410�014036� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> �������gnuastro-0.5/bin/fits/ui.c��������������������������������������������������������������������������0000644�0001750�0001750�00000034504�13211076737�012454� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <gnuastro/fits.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" allows you to view and " "manipulate (add, delete, or modify) FITS extensions (or HDUs) and FITS " "header keywords within one extension.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct fitsparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->keep = 1; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* For clarity and non-zero initializations. */ p->mode = FITS_MODE_INVALID; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_TABLEFORMAT: case GAL_OPTIONS_KEY_DONTDELETE: case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_NUMTHREADS: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_OUTPUT: cp->coptions[i].doc="Output file name (only for writing HDUs)."; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct fitsparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* Only FITS files are acceptable. */ if( gal_fits_name_is_fits(arg) ) { if(p->filename) argp_error(state, "only one input file should be given"); else p->filename=arg; } else argp_error(state, "%s is not a recognized FITS file", arg); break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct fitsparams *p) { /* If any of the keyword manipulation options are requested, then set the mode flag to keyword-mode. */ if( p->date || p->comment || p->history || p->asis || p->delete || p->rename || p->update || p->write || p->printallkeys ) { /* Set the mode. */ p->mode=FITS_MODE_KEY; /* Check if a HDU is given. */ if(p->cp.hdu==NULL) error(EXIT_FAILURE, 0, "a HDU (extension) is necessary for keywrod " "related options but none was defined. Please use the " "`--hdu' (or `-h') option to select one"); } /* Same for the extension-related options */ if( p->remove || p->copy || p->cut ) { /* A small sanity check. */ if(p->mode!=FITS_MODE_INVALID) error(EXIT_FAILURE, 0, "extension and keyword manipulation options " "cannot be called together"); /* Set the mode and turn on the `needshdu' flag. */ p->mode=FITS_MODE_HDU; /* Make sure the output name is set. */ if(p->cp.output) gal_checkset_writable_remove(p->cp.output, 1, p->cp.dontdelete); else p->cp.output=gal_checkset_automatic_output(&p->cp, p->filename, "_ext.fits"); } /* If no options are given, go into HDU mode, which will print the HDU information when nothing is asked. */ if(p->mode==FITS_MODE_INVALID) { if(p->hdu_in_commandline) { p->printallkeys=1; p->mode = FITS_MODE_KEY; } else p->mode = FITS_MODE_HDU; } } static void ui_check_options_and_arguments(struct fitsparams *p) { /* Make sure an input file name was given and if it was a FITS file, that a HDU is also given. */ if(p->filename==NULL) error(EXIT_FAILURE, 0, "no input file is specified"); } /**************************************************************/ /***************** Preparations ********************/ /**************************************************************/ /* The `--update' and `--write' options take multiple values for each keyword, so here, we tokenize them and put them into a `gal_fits_list_key_t' list. */ static void ui_fill_fits_headerll(gal_list_str_t *input, gal_fits_list_key_t **output) { long l, *lp; void *fvalue; double d, *dp; gal_list_str_t *tmp; int i=0, type, vfree; char *c, *cf, *start, *tailptr; char *original, *keyname, *value, *comment, *unit; for(tmp=input; tmp!=NULL; tmp=tmp->next) { i=0; tailptr=NULL; /* `c' is created in case of an error, so the input value can be reported. */ errno=0; original=malloc(strlen(tmp->v)+1); if(original==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `original'", __func__, strlen(tmp->v)+1); strcpy(original, tmp->v); /* Tokenize the input. Note that strlen does not include the \0 character. So we have added it with a 1. */ cf=(c=start=tmp->v)+strlen(tmp->v)+1; keyname=value=comment=unit=NULL; do { switch(*c) { case ',': case '\0': *c='\0'; if(start!=c) switch(i) { case 0: keyname=start; break; case 1: value=start; break; case 2: comment=start; break; case 3: unit=start; break; default: error(EXIT_FAILURE, 0, "%s: only three commas should " "be given in the write or update keyword " "options. The general expected format is:\n" " KEYWORD,value,\"a comment string\",unit\n", original); } ++i; start=c+1; break; default: break; } } while(++c<cf); if(keyname==NULL) error(EXIT_FAILURE, 0, "the keyword in %s was not readable. " "The general expected format is:\n" " KEYWORD,value,\"a comment string\",unit\n" "Any space characters around the the comma (,) characters " "will be seen as part of the respective token", original); /* printf("\n\n-%s-\n-%s-\n-%s-\n-%s-\n", keyname, value, comment, unit); */ /* Find the of the value: */ errno=0; l=strtol(value, &tailptr, 10); if(*tailptr=='\0' && errno==0) { vfree=1; type=GAL_TYPE_INT64; errno=0; fvalue=lp=malloc(sizeof *lp); if(lp==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for `lp'", __func__, sizeof *lp); *lp=l; } else { errno=0; d=strtod(value, &tailptr); if(*tailptr=='\0' && errno==0) { vfree=1; type=GAL_TYPE_FLOAT64; errno=0; fvalue=dp=malloc(sizeof *dp); if(dp==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for " "`dp'", __func__, sizeof *dp); *dp=d; } else { fvalue=value; type=GAL_TYPE_STRING; vfree=0; } } gal_fits_key_list_add(output, type, keyname, 0, fvalue, vfree, comment, 0, unit); free(original); } } static void ui_preparations(struct fitsparams *p) { /* Fill in the key linked lists. We want to do this here so if there is any error in parsing the user's input, the error is reported before any change is made in the input file. */ if(p->write) ui_fill_fits_headerll(p->write, &p->write_keys); if(p->update) ui_fill_fits_headerll(p->update, &p->update_keys); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct fitsparams *p) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Check if the HDU is specified on the command-line. If so, then later, if no operation is requested, we will print the header of the given HDU.*/ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) if(cp->coptions[i].key==GAL_OPTIONS_KEY_HDU && cp->coptions[i].set) p->hdu_in_commandline=1; /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_and_report(struct fitsparams *p) { /* Free the allocated arrays: */ free(p->cp.output); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/main.c������������������������������������������������������������������������0000644�0001750�0001750�00000002753�13121462410�012747� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" #include "fits.h" int main (int argc, char *argv[]) { int r; struct fitsparams p={{{0},0},0}; /* Get the starting time. */ time(&p.rawtime); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ r=fits(&p); /* Free all non-freed allocations. */ ui_free_and_report(&p); /* Return successfully.*/ return r; } ���������������������gnuastro-0.5/bin/fits/Makefile.in�������������������������������������������������������������������0000644�0001750�0001750�00000211572�13217217705�013740� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astfits$(EXEEXT) subdir = bin/fits ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astfits_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) extension.$(OBJEXT) \ fits.$(OBJEXT) keywords.$(OBJEXT) astfits_OBJECTS = $(am_astfits_OBJECTS) astfits_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astfits_SOURCES) DIST_SOURCES = $(astfits_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astfits_LDADD = -lgnuastro astfits_SOURCES = main.c ui.c extension.c fits.c keywords.c EXTRA_DIST = main.h authors-cite.h args.h ui.h extension.c fits.h keywords.h dist_sysconf_DATA = astfits.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/fits/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/fits/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astfits$(EXEEXT): $(astfits_OBJECTS) $(astfits_DEPENDENCIES) $(EXTRA_astfits_DEPENDENCIES) @rm -f astfits$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astfits_OBJECTS) $(astfits_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extension.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keywords.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/astfits.conf������������������������������������������������������������������0000644�0001750�0001750�00000001575�13121462410�014204� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for Fits. # Fits is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astfits --help # Full list of options, short doc. # $ astfits -P # Print all options and used values. # $ info astfits # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. �����������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/fits/Makefile.am�������������������������������������������������������������������0000644�0001750�0001750�00000002630�13121462410�013705� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astfits astfits_LDADD = -lgnuastro astfits_SOURCES = main.c ui.c extension.c fits.c keywords.c EXTRA_DIST = main.h authors-cite.h args.h ui.h extension.c fits.h keywords.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astfits.conf ��������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220466�011737� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/onecrop.h���������������������������������������������������������������������0000644�0001750�0001750�00000005245�13216276304�013504� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ONECROP_H #define ONECROP_H #include <fitsio.h> #include <gnuastro/threads.h> struct onecropparams { void *array; /* Pointer to basic structure: */ struct cropparams *p; /* About input image. */ size_t in_ind; /* Index of this image in the input names. */ fitsfile *infits; /* Pointer to the input FITS image. */ long fpixel[2]; /* Position of first pixel in input image. */ long lpixel[2]; /* Position of last pixel in input image. */ double *ipolygon; /* Input image based polygon vertices. */ /* Output (cropped) image. */ size_t out_ind; /* Index of this crop in the output list. */ double world[2]; /* World coordinates of crop center. */ double sized[2]; /* Width and height of image in degrees. */ double corners[8]; /* RA and Dec of this crop's four sides. */ double equatorcorr[2]; /* Crop crosses the equator, see wcsmode.c. */ fitsfile *outfits; /* Pointer to the output FITS image. */ /* For log */ char *name; /* Filename of crop. */ size_t numimg; /* Number of images used to make this crop. */ unsigned char centerfilled; /* ==1 if the center is filled. */ /* Thread parameters. */ size_t *indexs; /* Indexs to be used in this thread. */ pthread_barrier_t *b; /* pthread barrier to keep threads waiting. */ }; void onecrop_parse_polygon(struct cropparams *p); void onecrop_name(struct onecropparams *crp); void onecrop(struct onecropparams *crp); int onecrop_center_filled(struct onecropparams *crp); void crop_print_log(struct onecropparams *p); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/wcsmode.h���������������������������������������������������������������������0000644�0001750�0001750�00000002360�13124524246�013472� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef WCSMODE_H #define WCSMODE_H void wcsmode_check_prepare(struct cropparams *p, struct inputimgs *img); void wcsmode_crop_corners(struct onecropparams *crp); void fillcrpipolygon(struct onecropparams *crp); int wcsmode_overlap(struct onecropparams *crp); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/crop.h������������������������������������������������������������������������0000644�0001750�0001750�00000002056�13121462410�012765� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef IMGMODE_H #define IMGMODE_H void crop(struct cropparams *p); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/ui.h��������������������������������������������������������������������������0000644�0001750�0001750�00000004214�13174462540�012451� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_CENTER_GENERAL = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_CENTER_SINGLE, UI_GROUP_CENTER_CATALOG, UI_GROUP_REGION, }; /* Available letters for short options: a d e f g i j k m r t u v y A B E G H J L Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_CATALOG = 'C', UI_KEY_NOBLANK = 'b', UI_KEY_SUFFIX = 'p', UI_KEY_NAMECOL = 'n', UI_KEY_SECTION = 's', UI_KEY_POLYGON = 'l', UI_KEY_ZEROISNOTBLANK = 'z', UI_KEY_MODE = 'O', UI_KEY_WIDTH = 'w', UI_KEY_CENTER = 'c', UI_KEY_COORDCOL = 'x', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_CATHDU = 1000, UI_KEY_HSTARTWCS, UI_KEY_HENDWCS, UI_KEY_OUTPOLYGON, UI_KEY_CHECKCENTER, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct cropparams *p); void ui_free_report(struct cropparams *p, struct timeval *t1); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/args.h������������������������������������������������������������������������0000644�0001750�0001750�00000015123�13211076737�012772� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input. */ { "mode", UI_KEY_MODE, "STR", 0, "Coordinate mode `img' or `wcs'.", GAL_OPTIONS_GROUP_INPUT, &p->mode, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, ui_parse_coordinate_mode }, { "hstartwcs", UI_KEY_HSTARTWCS, "INT", 0, "Header keyword number to start reading WCS.", GAL_OPTIONS_GROUP_INPUT, &p->hstartwcs, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "hendwcs", UI_KEY_HENDWCS, "INT", 0, "Header keyword number to stop reading WCS.", GAL_OPTIONS_GROUP_INPUT, &p->hendwcs, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "zeroisnotblank", UI_KEY_ZEROISNOTBLANK, 0, 0, "0.0 in float or double images are not blank.", GAL_OPTIONS_GROUP_INPUT, &p->zeroisnotblank, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output. */ { "noblank", UI_KEY_NOBLANK, 0, 0, "Remove parts of the crop box out of input image.", GAL_OPTIONS_GROUP_OUTPUT, &p->noblank, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "suffix", UI_KEY_SUFFIX, "STR", 0, "Suffix (postfix) of cropped images.", GAL_OPTIONS_GROUP_OUTPUT, &p->suffix, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Crop by center", UI_GROUP_CENTER_GENERAL }, { "checkcenter", UI_KEY_CHECKCENTER, "INT", 0, "Width (in pixels) of box at center to check.", UI_GROUP_CENTER_GENERAL, &p->checkcenter, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_0_OR_ODD, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "width", UI_KEY_WIDTH, "FLT[,...]", 0, "Width when crop is defined by its center.", UI_GROUP_CENTER_GENERAL, &p->width, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "center", UI_KEY_CENTER, "FLT[,...]", 0, "Central coordinates of a single crop.", UI_GROUP_CENTER_GENERAL, &p->center, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { 0, 0, 0, 0, "Crop by center (when a catalog is given)", UI_GROUP_CENTER_CATALOG }, { "catalog", UI_KEY_CATALOG, "STR", 0, "Input catalog filename.", UI_GROUP_CENTER_CATALOG, &p->catname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "cathdu", UI_KEY_CATHDU, "STR/INT", 0, "HDU of catalog, if it is a FITS table.", UI_GROUP_CENTER_CATALOG, &p->cathdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "namecol", UI_KEY_NAMECOL, "STR/INT", 0, "Column no./info of crop filename (no suffix).", UI_GROUP_CENTER_CATALOG, &p->namecol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "coordcol", UI_KEY_COORDCOL, "STR/INT", 0, "Column no./info containing coordinates.", UI_GROUP_CENTER_CATALOG, &p->coordcol, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Crop by region", UI_GROUP_REGION }, { "section", UI_KEY_SECTION, "STR", 0, "Image section string specifying crop range.", UI_GROUP_REGION, &p->section, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "polygon", UI_KEY_POLYGON, "STR", 0, "Polygon vertices of region to crop, keep inside.", UI_GROUP_REGION, &p->polygon, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outpolygon", UI_KEY_OUTPOLYGON, 0, 0, "Keep the polygon's outside, mask the inside.", UI_GROUP_REGION, &p->outpolygon, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Operating mode */ {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/authors-cite.h����������������������������������������������������������������0000644�0001750�0001750�00000002767�13211076737�014457� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif ���������gnuastro-0.5/bin/crop/main.h������������������������������������������������������������������������0000644�0001750�0001750�00000012314�13216276304�012756� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "Crop" /* Program full name. */ #define PROGRAM_EXEC "astcrop" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Macros */ #define LOGFILENAME PROGRAM_EXEC".log" #define FILENAME_BUFFER_IN_VERB 30 #define MAXDIM 2 /* Modes to interpret coordinates. */ enum crop_modes { IMGCROP_MODE_INVALID, /* For sanity checks. */ IMGCROP_MODE_IMG, /* Use image coordinates. */ IMGCROP_MODE_WCS, /* Use WCS coordinates. */ }; /* The sides of the image keep the celestial coordinates of the four sides of this image. With respect to the pixels they are. */ struct inputimgs { char *name; /* File name of input image. */ size_t ndim; /* Number of dimensions of this image. */ size_t *dsize; /* Size of the image. */ int nwcs; /* Number of WCS in each input image. */ struct wcsprm *wcs; /* WCS structure of each input image. */ char *wcstxt; /* Text output of each WCS. */ int nwcskeys; /* Number of keywords in the header WCS. */ double corners[8]; /* RA and Dec of this image corners (within). */ double sized[2]; /* Width and height of image in degrees. */ double equatorcorr[2]; /* If image crosses the equator, see wcsmode.c.*/ }; /* Main program parameters: */ struct cropparams { /* Directly from command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_list_str_t *inputs; /* All input FITS files. */ size_t hstartwcs; /* Header keyword No. to start read WCS. */ size_t hendwcs; /* Header keyword No. to end read WCS. */ int mode; /* Image or WCS mode. */ uint8_t zeroisnotblank; /* ==1: In float or double, keep 0.0. */ uint8_t noblank; /* ==1: no blank (out of image) pixels. */ char *suffix; /* Ending of output file name. */ size_t checkcenter; /* width of a box to check for zeros */ gal_data_t *center; /* Center position of crop. */ gal_data_t *width; /* Width of crop when defined by center. */ char *catname; /* Name of input catalog. */ char *cathdu; /* HDU of catalog if its a FITS file. */ char *namecol; /* Filename (without suffix) of crop col.*/ gal_list_str_t *coordcol; /* Column in catalog with coordinates. */ char *section; /* Section string. */ char *polygon; /* Input string of polygon vertices. */ uint8_t outpolygon; /* ==1: Keep the inner polygon region. */ /* Internal */ size_t numin; /* Number of input images. */ size_t numout; /* Number of output images. */ double **centercoords; /* The center coordinates. */ char **name; /* filename of crop in row. */ double *wpolygon; /* Array of WCS polygon vertices. */ double *ipolygon; /* Array of image polygon vertices. */ size_t nvertices; /* Number of polygon vertices. */ long iwidth[2]; /* Image mode width (in pixels). */ double *pixscale; /* Resolution in each dimension. */ time_t rawtime; /* Starting time of the program. */ int outnameisfile; /* Output filename is a directory. */ int type; /* Type of output(s). */ void *bitnul; /* Null value for this data-type. */ struct inputimgs *imgs; /* WCS and size information for inputs. */ gal_data_t *log; /* Log file contents. */ }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/onecrop.c���������������������������������������������������������������������0000644�0001750�0001750�00000065337�13216276304�013507� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <ctype.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <float.h> #include <string.h> #include <stdlib.h> #include <gnuastro/box.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/polygon.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "onecrop.h" #include "wcsmode.h" /*******************************************************************/ /************ Set/correct first and last pixel **************/ /*******************************************************************/ /* Read the section string and set the starting and ending pixels based on that. */ void onecrop_parse_section(struct cropparams *p, size_t *dsize, long *fpixel, long *lpixel) { int add; long read; char *tailptr; char forl='f', *pt=p->section; long naxes[2]={dsize[1], dsize[0]}; size_t i, dim=0, ndim=p->imgs->ndim; /* When the user asks for a section of the dataset, then the cropped region is not defined by its center. So it makes no sense to later check if the center is blank or not. Hence, we will over-write it with zero. */ p->checkcenter=0; /* Initialize the fpixel and lpixel arrays (note that `section' is only defined in image mode, so there will only be one element in `imgs'. */ for(i=0;i<ndim;++i) { fpixel[i] = 1; lpixel[i] = naxes[i] = p->imgs->dsize[ ndim - i - 1 ]; } /* Parse the string. */ while(*pt!='\0') { add=0; switch(*pt) { case ',': ++dim; if(dim>=ndim) error(EXIT_FAILURE, 0, "Extra `,` in `%s`", p->section); forl='f'; ++pt; break; case ':': forl='l'; ++pt; break; case '.': error(EXIT_FAILURE, 0, "the numbers in the argument to " "`--section` (`-s') have to be integers. You input " "includes a float number: %s", p->section); break; case ' ': case '\t': ++pt; break; case '*': add=1; /* If it is an asterisk, then add the */ ++pt; /* given value to the maximum size of */ break; /* the image. */ default: break; } /* Read the number: */ read=strtol(pt, &tailptr, 0); /* Check if there actually was a number. printf("\n\n------\n%c: %ld (%s)\n", *pt, read, tailptr); */ /* Make sure if a number was read at all? */ if(tailptr==pt) /* No number was read! */ { if(add) read=0; /* We have a * followed by `:' or `,'. */ else continue; } /* Put it in the correct array. */ if(forl=='f') fpixel[dim] = add ? naxes[dim]+read : read; else lpixel[dim] = add ? naxes[dim]+read : read; pt=tailptr; } /* Make sure the first pixel is located before/below the last pixel. */ for(i=0;i<ndim;++i) if(fpixel[i]>lpixel[i]) error(EXIT_FAILURE, 0, "the bottom left corner coordinates " "cannot be larger or equal to the top right's! Your section " "string (%s) has been read as: bottom left coordinate " "(%ld, %ld) to top right coordinate (%ld, %ld)", p->section, fpixel[0], fpixel[1], lpixel[0], lpixel[1]); /* For a check: printf("\n%s\n", p->section); printf("fpixel: ("); for(i=0;i<ndim;++i) printf("%ld, ", fpixel[i]); printf("\b\b)\n"); printf("lpixel: ("); for(i=0;i<ndim;++i) printf("%ld, ", lpixel[i]); printf("\b\b)\n\n"); exit(0); */ } void onecrop_parse_polygon(struct cropparams *p) { size_t dim=0; char *tailptr; char *pt=p->polygon; double read, *array; gal_list_f64_t *vertices=NULL; /* If control reached here, then the cropped region is not defined by its center. So it makes no sense to check if the center is blank. */ p->checkcenter=0; /* Parse the string. */ while(*pt!='\0') { switch(*pt) { case ',': ++dim; if(dim==2) error(EXIT_FAILURE, 0, "Extra `,` in `%s`", p->polygon); ++pt; break; case ':': if(dim==0) error(EXIT_FAILURE, 0, "not enough coordinates for at least " "one polygon vertex (in %s)", p->polygon); dim=0; ++pt; break; default: break; } /* strtod will skip white spaces if they are before a number, but not when they are before a : or ,. So we need to remove all white spaces. White spaces are usually put beside each other, so if one is encountered, go along the string until the white space characters finish. */ if(isspace(*pt)) ++pt; else { /* Read the number: */ read=strtod(pt, &tailptr); /* Check if there actually was a number. printf("\n\n------\n%zu: %f (%s)\n", dim, read, tailptr); */ /* Make sure if a number was read at all? */ if(tailptr==pt) /* No number was read! */ error(EXIT_FAILURE, 0, "%s could not be parsed as a floating " "point number", tailptr); /* Check if there are no extra characters in the number, for example we don't have a case like `1.00132.17', or 1.01i:2.0. Such errors are not uncommon when typing large numbers, and if ignored, they can lead to unpredictable results, so its best to abort and inform the user. */ if( *tailptr!='\0' && !isspace(*tailptr) && strchr(":,", *tailptr)==NULL ) error(EXIT_FAILURE, 0, "'%s' is an invalid floating point number " "sequence in the value to the `--polygon' option, error " "detected at '%s'", pt, tailptr); /* Add the read coordinate to the list of coordinates. */ gal_list_f64_add(&vertices, read); /* The job here is done, start from tailptr */ pt=tailptr; } } /* Put the coordinates into an array while reversing their order so they correspond to the user's order, then put it in the right place.*/ array=gal_list_f64_to_array(vertices, 1, &p->nvertices); if(p->mode==IMGCROP_MODE_IMG) { p->ipolygon=array; p->wpolygon=NULL; } else { p->ipolygon=NULL; p->wpolygon=array; } /* The number of vertices is actually the number of nodes in the list divided by the dimension of the dataset (note that we were counting the dimension from 0. */ p->nvertices/=(dim+1); /* For a check: { size_t i; double *polygon=p->mode==IMGCROP_MODE_IMG?p->ipolygon:p->wpolygon; for(i=0;i<p->nvertices;++i) printf("(%f, %f)\n", polygon[i*2], polygon[i*2+1]); } exit(0); */ /* Clean up: */ gal_list_f64_free(vertices); } void onecrop_ipolygon_fl(double *ipolygon, size_t nvertices, long *fpixel, long *lpixel) { size_t i; double minx=FLT_MAX, miny=FLT_MAX; double maxx=-FLT_MAX, maxy=-FLT_MAX; /* Find their minimum and maximum values. */ for(i=0;i<nvertices;++i) { if(ipolygon[i*2]>maxx) maxx=ipolygon[i*2]; if(ipolygon[i*2]<minx) minx=ipolygon[i*2]; if(ipolygon[i*2+1]>maxy) maxy=ipolygon[i*2+1]; if(ipolygon[i*2+1]<miny) miny=ipolygon[i*2+1]; } /* Set the first and last pixel. */ fpixel[0] = minx - (int)minx >=0.5 ? (int)minx + 1 : (int)minx; fpixel[1] = miny - (int)miny >=0.5 ? (int)miny + 1 : (int)miny; lpixel[0] = maxx - (int)maxx >=0.5 ? (int)maxx + 1 : (int)maxx; lpixel[1] = maxy - (int)maxy >=0.5 ? (int)maxy + 1 : (int)maxy; } #define POLYGON_MASK(CTYPE) { \ CTYPE *ba=array, *bb=gal_blank_alloc_write(type); \ for(i=0;i<size;++i) \ { \ point[0]=i%s1+1; point[1]=i/s1+1; \ if(gal_polygon_pin(ipolygon, point, nvertices)==outpolygon) \ ba[i]=*bb; \ } \ free(bb); \ } void polygonmask(struct onecropparams *crp, void *array, long *fpixel_i, size_t s0, size_t s1) { int type=crp->p->type; double *ipolygon, point[2]; int outpolygon=crp->p->outpolygon; size_t i, *ordinds, size=s0*s1, nvertices=crp->p->nvertices; /* First of all, allocate enough space to put a copy of the input coordinates (we will be using that after sorting in an anti-clickwise manner.) */ errno=0; ipolygon=malloc(2*nvertices*sizeof *ipolygon); if(ipolygon==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for ipolygon", __func__, 2*nvertices*sizeof *ipolygon); errno=0; ordinds=malloc(nvertices*sizeof *ordinds); if(ordinds==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for ordinds", __func__, nvertices*sizeof *ordinds); /* Find the order of the polygons and put the elements in the proper order. Also subtract the fpixel_i coordinates from all the vertices to bring them into the crop image coordinates.*/ gal_polygon_ordered_corners(crp->ipolygon, crp->p->nvertices, ordinds); for(i=0;i<crp->p->nvertices;++i) { ipolygon[i*2 ] = crp->ipolygon[ordinds[i]*2] - fpixel_i[0]; ipolygon[i*2+1] = crp->ipolygon[ordinds[i]*2+1] - fpixel_i[1]; } /* Go over all the pixels in the image and if they are within the polygon keep them if the user has asked for it.*/ switch(type) { case GAL_TYPE_UINT8: POLYGON_MASK(uint8_t); break; case GAL_TYPE_INT8: POLYGON_MASK(int8_t); break; case GAL_TYPE_UINT16: POLYGON_MASK(uint16_t); break; case GAL_TYPE_INT16: POLYGON_MASK(int16_t); break; case GAL_TYPE_UINT32: POLYGON_MASK(uint32_t); break; case GAL_TYPE_INT32: POLYGON_MASK(int32_t); break; case GAL_TYPE_INT64: POLYGON_MASK(int64_t); break; case GAL_TYPE_FLOAT32: POLYGON_MASK(float); break; case GAL_TYPE_FLOAT64: POLYGON_MASK(double); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s, so we " "can fix the problem. Type code %d is not recognized", __func__, PACKAGE_BUGREPORT, type); } /* Clean up: */ free(ordinds); free(ipolygon); } /*******************************************************************/ /****************** One crop. *********************/ /*******************************************************************/ static void onecrop_zero_to_nan(void *array, size_t size, int type) { float *fp, *ffp; double *dp, *fdp; switch(type) { case GAL_TYPE_FLOAT32: ffp=(fp=array)+size; do if(*fp==0.0f) *fp=NAN; while(++fp<ffp); break; case GAL_TYPE_FLOAT64: fdp=(dp=array)+size; do if(*dp==0.0f) *dp=NAN; while(++dp<fdp); break; default: error(EXIT_FAILURE, 0, "%s: %d is not a recognized type", __func__, type); } } /* Set the output name and image output sizes. */ void onecrop_name(struct onecropparams *crp) { char **strarr; struct cropparams *p=crp->p; struct gal_options_common_params *cp=&p->cp; /* Set the output name and crop sides: */ if(p->catname) { /* If a name column was set, use it, otherwise, use the ID of the profile. */ if(p->name) { strarr=p->name; asprintf(&crp->name, "%s%s%s", cp->output, strarr[crp->out_ind], p->suffix); } else asprintf(&crp->name, "%s%zu%s", cp->output, crp->out_ind+1, p->suffix); /* Make sure the file doesn't exist. */ gal_checkset_writable_remove(crp->name, 0, cp->dontdelete); } else { /* Set the output name. */ if(p->outnameisfile) /* An output file was specified. */ { crp->name=cp->output; gal_checkset_writable_remove(crp->name, 0, cp->dontdelete); } else /* The output was a directory, use automatic output. */ crp->name=gal_checkset_automatic_output(cp, p->imgs[crp->in_ind].name, p->suffix); } } /* Find the first and last pixel of a crop. */ static void onecrop_flpixel(struct onecropparams *crp) { struct cropparams *p=crp->p; size_t ndim=p->imgs->ndim; double center[MAXDIM]; int ncoord=1, status=0; size_t i, *dsize=p->imgs[crp->in_ind].dsize; long *fpixel=crp->fpixel, *lpixel=crp->lpixel; double pixcrd[MAXDIM], imgcrd[MAXDIM], phi[1], theta[1]; switch(p->mode) { case IMGCROP_MODE_IMG: if(p->section) /* Defined by section. */ onecrop_parse_section(p, dsize, fpixel, lpixel); else if(p->polygon) /* Defined by polygon. */ { if(p->outpolygon==0) onecrop_ipolygon_fl(p->ipolygon, p->nvertices, fpixel, lpixel); } else { for(i=0;i<ndim;++i) center[i] = p->centercoords[i][crp->out_ind]; gal_box_border_from_center(center, ndim, p->iwidth, fpixel, lpixel); } break; case IMGCROP_MODE_WCS: /* In wcsmode, crp->world is already filled. */ if(p->polygon) /* Note: p->iwidth was set based on p->wwidth. */ { /* Fill crp->ipolygon in wcspolygonpixel, then set flpixel*/ fillcrpipolygon(crp); if(p->outpolygon==0) onecrop_ipolygon_fl(crp->ipolygon, p->nvertices, fpixel, lpixel); } else { /* Convert `crp->world' (in WCS) into `pixcrd' (image coord). */ if(wcss2p(p->imgs[crp->in_ind].wcs, ncoord, ndim, crp->world, phi, theta, imgcrd, pixcrd, &status) ) if(status) error(EXIT_FAILURE, 0, "%s: wcss2p error %d: %s", __func__, status, wcs_errmsg[status]); /* Find the first and last pixels of this crop. */ gal_box_border_from_center(pixcrd, ndim, p->iwidth, fpixel, lpixel); } break; default: error(EXIT_FAILURE, 0, "%s: a bug! The domain (WCS or image) are not " "set. Please contact us at %s so we can see how it got to this " "impossible place", __func__, PACKAGE_BUGREPORT); } /* If the user only wants regions outside to the polygon, then set the fpixel and lpixel to cover the full input image. */ if(p->polygon && p->outpolygon) { crp->fpixel[0]=crp->fpixel[1]=1; crp->lpixel[0]=dsize[1]; crp->lpixel[1]=dsize[0]; } } /* Find the size of the final FITS image (irrespective of how many crops will be needed for it) and make the image to keep the data. NOTE: The fpixel and lpixel in crp keep the first and last pixel of the total image for this crop, irrespective of the final keeping blank areas or not. While the fpixel_i and lpixel_i arrays keep the first and last pixels after the blank pixels have been removed. */ static void onecrop_make_array(struct onecropparams *crp, long *fpixel_i, long *lpixel_i, long *fpixel_c, long *lpixel_c) { double crpix; fitsfile *ofp; long naxes[MAXDIM]; char *outname=crp->name; int status=0, type=crp->p->type; size_t i, ndim=crp->p->imgs->ndim; char **strarr, cpname[FLEN_KEYWORD]; gal_data_t *rkey=gal_data_array_calloc(1); char *cp, *cpf, blankrec[80], titlerec[80]; struct inputimgs *img=&crp->p->imgs[crp->in_ind]; /* Set the last element of the blank array. */ cpf=blankrec+79; *cpf='\0'; titlerec[79]='\0'; cp=blankrec; do *cp=' '; while(++cp<cpf); /* Set the size of the output, in WCS mode, noblank==0. */ if(crp->p->noblank && crp->p->mode==IMGCROP_MODE_IMG) for(i=0;i<ndim;++i) { fpixel_c[i] = 1; lpixel_c[i] = naxes[i] = lpixel_i[i]-fpixel_i[i]+1; } else for(i=0;i<ndim;++i) naxes[i] = crp->lpixel[i]-crp->fpixel[i]+1; /* Create the FITS file with a blank first extension, then close it, so with the next `fits_open_file', we build the image in the second extension. This way, atleast for Gnuastro's outputs, we can consistently use `-h1' (something like how you count columns, or generally everything from 1). */ if(fits_create_file(&ofp, outname, &status)) gal_fits_io_error(status, "creating file"); fits_create_img(ofp, SHORT_IMG, 0, naxes, &status); fits_close_file(ofp, &status); /* Create the output crop image. */ fits_open_file(&crp->outfits, outname, READWRITE, &status); fits_create_img(crp->outfits, gal_fits_type_to_bitpix(type), ndim, naxes, &status); gal_fits_io_error(status, "creating image"); ofp=crp->outfits; /* When CFITSIO creates a FITS extension it adds two comments linking to the FITS paper. Since we are mentioning the version of CFITSIO and only use its ruitines to read/write from/to FITS files, this is redundant. If `status!=0', then `gal_fits_io_error' will abort, but in case CFITSIO doesn't write the comments, status will become non-zero. So we are resetting it to zero after these (because not being able to delete them isn't an error). */ fits_delete_key(ofp, "COMMENT", &status); fits_delete_key(ofp, "COMMENT", &status); status=0; /* Read the units of the input dataset and store them in the output. */ rkey->next=NULL; rkey->name="BUNIT"; rkey->type=GAL_TYPE_STRING; gal_fits_key_read_from_ptr(crp->infits, rkey, 1, 1); if(rkey->status==0) /* The BUNIT keyword was read. */ { strarr=rkey->array; fits_update_key(ofp, TSTRING, "BUNIT", strarr[0], "physical units", &status); gal_fits_io_error(status, "writing BUNIT"); } rkey->name=NULL; /* `name' wasn't allocated. */ gal_data_free(rkey); /* Write the blank value as a FITS keyword if necessary. */ if( type!=GAL_TYPE_FLOAT32 && type!=GAL_TYPE_FLOAT64 ) if(fits_write_key(ofp, gal_fits_type_to_datatype(crp->p->type), "BLANK", crp->p->bitnul, "pixels with no data", &status) ) gal_fits_io_error(status, "adding Blank"); if(fits_write_null_img(ofp, 1, naxes[0]*naxes[1], &status)) gal_fits_io_error(status, "writing null array"); /* Write the WCS header keywords in the output FITS image, then update the header keywords. */ if(img->wcs) { /* Write the WCS title and common WCS information. */ if(fits_write_record(ofp, blankrec, &status)) gal_fits_io_error(status, NULL); sprintf(titlerec, "%sWCS information", GAL_FITS_KEY_TITLE_START); for(i=strlen(titlerec);i<79;++i) titlerec[i]=' '; fits_write_record(ofp, titlerec, &status); for(i=0;i<img->nwcskeys-1;++i) fits_write_record(ofp, &img->wcstxt[i*80], &status); gal_fits_io_error(status, NULL); /* Correct the CRPIX keywords. */ for(i=0;i<ndim;++i) { sprintf(cpname, "CRPIX%zu", i+1); crpix = img->wcs->crpix[i] - (fpixel_i[i]-1) + (fpixel_c[i]-1); fits_update_key(ofp, TDOUBLE, cpname, &crpix, NULL, &status); gal_fits_io_error(status, NULL); } } /* Add the Crop information. */ sprintf(titlerec, "%sCrop information", GAL_FITS_KEY_TITLE_START); for(i=strlen(titlerec);i<79;++i) titlerec[i]=' '; if(fits_write_record(ofp, titlerec, &status)) gal_fits_io_error(status, NULL); } /* The starting and ending points are set in the onecropparams structure for one crop from one image. Crop that region out of the input. */ void onecrop(struct onecropparams *crp) { struct cropparams *p=crp->p; struct inputimgs *img=&p->imgs[crp->in_ind]; void *array; int status=0, anynul=0; char basename[FLEN_KEYWORD]; fitsfile *ifp=crp->infits, *ofp; gal_fits_list_key_t *headers=NULL; size_t i, j, cropsize=1, ndim=img->ndim; char region[FLEN_VALUE], regionkey[FLEN_KEYWORD]; long fpixel_o[MAXDIM], lpixel_o[MAXDIM], inc[MAXDIM]; long naxes[MAXDIM], fpixel_i[MAXDIM] , lpixel_i[MAXDIM]; /* Fill the `naxes' and `inc' arrays. */ for(i=0;i<ndim;++i) { inc[ i ] = 1; naxes[ i ] = img->dsize[ ndim - i - 1 ]; } /* Find the first and last pixel of this crop box from this input image. Then copy the first and last pixels into the `_i' arrays.*/ onecrop_flpixel(crp); memcpy(fpixel_i, crp->fpixel, ndim*sizeof *fpixel_i); memcpy(lpixel_i, crp->lpixel, ndim*sizeof *lpixel_i); /* Find the overlap and apply it if there is any overlap. */ if( gal_box_overlap(naxes, fpixel_i, lpixel_i, fpixel_o, lpixel_o, ndim) ) { /* Make the output FITS image and initialize it with an array of NaN or BLANK values. */ if(crp->outfits==NULL) onecrop_make_array(crp, fpixel_i, lpixel_i, fpixel_o, lpixel_o); ofp=crp->outfits; /* Allocate an array to keep the desired crop region, then read the desired pixels onto it. */ status=0; for(i=0;i<ndim;++i) cropsize *= ( lpixel_i[i] - fpixel_i[i] + 1 ); array=gal_data_malloc_array(p->type, cropsize, __func__, "array"); if(fits_read_subset(ifp, gal_fits_type_to_datatype(p->type), fpixel_i, lpixel_i, inc, p->bitnul, array, &anynul, &status)) gal_fits_io_error(status, NULL); /* If we have a floating point or double image, pixels with zero value should actually be a NaN. Unless the user specificly asks for it, make the conversion.*/ if(p->zeroisnotblank==0 && (p->type==GAL_TYPE_FLOAT32 || p->type==GAL_TYPE_FLOAT64) ) onecrop_zero_to_nan(array, cropsize, p->type); /* If a polygon is given, remove all the pixels within or outside of it.*/ if(p->polygon) { /* In WCS mode, crp->ipolygon was allocated and filled in wcspolygonflpixel (wcsmode.c). */ if(p->mode==IMGCROP_MODE_IMG) crp->ipolygon=p->ipolygon; polygonmask(crp, array, fpixel_i, lpixel_i[1]-fpixel_i[1]+1, lpixel_i[0]-fpixel_i[0]+1); if(p->mode==IMGCROP_MODE_WCS) free(crp->ipolygon); } /* Write the array into the image. */ status=0; if( fits_write_subset(ofp, gal_fits_type_to_datatype(p->type), fpixel_o, lpixel_o, array, &status) ) gal_fits_io_error(status, NULL); /* Write the selected region of this image as a string to include as a FITS keyword. Then we want to delete the last coma `,'.*/ j=0; for(i=0;i<ndim;++i) j += sprintf(®ion[j], "%ld:%ld,", fpixel_i[i], lpixel_i[i]); region[j-1]='\0'; /* A section has been added to the cropped image from this input image, so save the information of this image. */ sprintf(basename, "ICF%zu", crp->numimg); gal_fits_key_write_filename(basename, img->name, &headers); sprintf(regionkey, "%sPIX", basename); gal_fits_key_list_add_end(&headers, GAL_TYPE_STRING, regionkey, 0, region, 0, "Range of pixels used for " "this output.", 0, NULL); gal_fits_key_write(ofp, &headers); /* Free the allocated array. */ free(array); } else if(p->polygon && p->outpolygon==0 && p->mode==IMGCROP_MODE_WCS) free(crp->ipolygon); /* The crop is complete. */ return; } /*******************************************************************/ /****************** Check center *********************/ /*******************************************************************/ int onecrop_center_filled(struct onecropparams *crp) { struct cropparams *p=crp->p; void *array; size_t size, ndim, *dsize; fitsfile *ofp=crp->outfits; int status=0, anynul=0, type; long checkcenter=p->checkcenter; long naxes[2], fpixel[2], lpixel[2], inc[2]={1,1}; /* If checkcenter is zero, then don't check. */ if(checkcenter==0) return GAL_BLANK_UINT8; /* Get the final size of the output image. */ gal_fits_img_info(ofp, &type, &ndim, &dsize, NULL, NULL); naxes[0]=dsize[1]; naxes[1]=dsize[0]; /* Get the size and range of the central region to check. The +1 is because in FITS, counting begins from 1, not zero. It might happen that the image is actually smaller than the width to check the center (for example 1 or 2 pixels wide). In that case, we'll just use the full image to check. */ size = ( (naxes[0]>checkcenter ? checkcenter : naxes[0]) * (naxes[1]>checkcenter ? checkcenter : naxes[1]) ); fpixel[0] = naxes[0]>checkcenter ? (naxes[0]/2+1)-checkcenter/2 : 1; fpixel[1] = naxes[1]>checkcenter ? (naxes[1]/2+1)-checkcenter/2 : 1; lpixel[0] = naxes[0]>checkcenter ? (naxes[0]/2+1)+checkcenter/2 : naxes[0]; lpixel[1] = naxes[1]>checkcenter ? (naxes[1]/2+1)+checkcenter/2 : naxes[1]; /* For a check: printf("naxes: %ld, %ld\nfpixel: (%ld, %ld)\nlpixel: (%ld, %ld)\n" "size: %zu\n", naxes[0], naxes[1], fpixel[0], fpixel[1], lpixel[0], lpixel[1], size); */ /* Allocate the array and read in the pixels. */ array=gal_data_malloc_array(type, size, __func__, "array"); if( fits_read_subset(ofp, gal_fits_type_to_datatype(type), fpixel, lpixel, inc, p->bitnul, array, &anynul, &status) ) gal_fits_io_error(status, NULL); free(array); /* CFITSIO already checks if there are any blank pixels. If there are, then `anynul' will be 1, if there aren't it will be 0. So the output of this function is just the inverse of that number. */ return !anynul; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/wcsmode.c���������������������������������������������������������������������0000644�0001750�0001750�00000046061�13216276304�013474� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <float.h> #include <string.h> #include <stdlib.h> #include <gnuastro/wcs.h> #include "main.h" #include "onecrop.h" /*******************************************************************/ /**************** Check for ui.c *********************/ /*******************************************************************/ /* This function is called from ui.c. Its job is to check the WCS values of this */ void wcsmode_check_prepare(struct cropparams *p, struct inputimgs *img) { double *pixscale; struct wcsprm *wcs=img->wcs; int i, status[4]={0,0,0,0}, ncorners=4; size_t *dsize=img->dsize, ndim=img->ndim; double imgcrd[8], phi[4], theta[4], pixcrd[8]; /* Check if the image is aligned with the WCS coordinates. Note that because of small floating point errors, some programs might still keep very small values in the off-diagonal matrix elements. */ if( fabs(wcs->pc[1]/wcs->pc[3])>1e-6 || fabs(wcs->pc[2]/wcs->pc[3])>1e-6 ) error(EXIT_FAILURE, 0, "%s: HDU %s: is not aligned to the " "celestial coordinates. The first FITS axis should be " "along the Right Ascension and the second FITS axis " "should be along the declination.\n\n" "Gnuastro's Warp program can align it with the following " "command:\n\n" " $ astwarp %s --hdu=%s --align\n", img->name, p->cp.hdu, img->name, p->cp.hdu); if(wcs->pc[0]>0) error(EXIT_FAILURE, 0, "%s: HDU %s: An increase in the first " "FITS axis pixel coordinates should be a decrease in the " "RA. You have to flip the image along the second axis " "before running Crop", img->name, p->cp.hdu); if(wcs->pc[3]<0) error(EXIT_FAILURE, 0, "%s: HDU %s: An increase in the second " "FITS axis pixel coordinates should translate to an " "increase in the declination. You have to flip the " "image along the first axis before running Crop", img->name, p->cp.hdu); /* Check the nature of the coordinates, currently we can only support RA and Dec, other modes haven't been checked. */ if( strcmp(wcs->ctype[0], "RA---TAN") || strcmp(wcs->ctype[1], "DEC--TAN") ) error(EXIT_FAILURE, 0, "currently the only WCS types usable are " "`RA---TAN' and `DEC--TAN' for the first and second axises " "respectively. The WCS types of `%s' (hdu %s) are `%s' and `%s' " "respectively", img->name, p->cp.hdu, wcs->ctype[0], wcs->ctype[1]); /* Check if the pixels are actually a square, then compare the resolution with the other input images. Due to floating point errors, some very small differences might exist in the pixel scale, so break out with an error only if the pixel scales are more different than 1e-6. */ pixscale=gal_wcs_pixel_scale(wcs); if( fabs(pixscale[0]-pixscale[1])/pixscale[0] > 1e-6 ) error(EXIT_FAILURE, 0, "%s: HDU %s: The pixel scale along " "the two image axises is not the same. The first axis " "is %.15g deg/pixel, while the second is %.15g", img->name, p->cp.hdu, pixscale[1], pixscale[0]); if(p->pixscale) { for(i=0;i<ndim;++i) if(p->pixscale[i] != pixscale[i]) error(EXIT_FAILURE, 0, "%s (hdu %s): has resolution of %g along " "dimension %d. However, previously checked input(s) had " "a resolution of %g in this dimension", img->name, p->cp.hdu, pixscale[i], i+1, p->pixscale[i]); free(pixscale); } else p->pixscale=pixscale; /* Set the coordinates of the dataset's corners. Note that `dsize' is in C order, while pixcrd is in FITS order.*/ pixcrd[0] = 1; pixcrd[1] = 1; pixcrd[2] = dsize[1]; pixcrd[3] = 1; pixcrd[4] = 1; pixcrd[5] = dsize[0]; pixcrd[6] = dsize[1]; pixcrd[7] = dsize[0]; /* Get the coordinates of the corners of the dataset in WCS. */ wcsp2s(wcs, ncorners, ndim, pixcrd, imgcrd, phi, theta, img->corners, status); /* Check if there was no error in the conversion. */ for(i=0;i<ncorners;++i) if(status[i]) error(EXIT_FAILURE, 0, "wcsp2s ERROR %d in row %d of pixcrd: %s", i, status[i], wcs_errmsg[status[i]]); /* Fill in the size of the dataset in WCS from the first pixel in the image. Note that `dsize' is in C axises, while the `pixscale', `corners' and `sized' are in FITS axises. */ img->sized[0] = ( img->dsize[1] * p->pixscale[0] / cos( img->corners[1] * M_PI / 180 ) ); img->sized[1] = img->dsize[0] * p->pixscale[1]; /* In case the image crosses the equator, we will calculate these values here so later on, we don't have to calculate them on every check. See the explanation above `point_in_dataset'. Note that in both 2D and 3D data, the declination is in the second coordinate (index 1). */ if( img->corners[1] * (img->corners[1]+img->sized[1]) < 0 ) { /* re in the comments above `point_in_dataset'. */ img->equatorcorr[0]=img->corners[0] -0.5*img->sized[0]*(1-cos(img->corners[1]*M_PI/180)); /* sre in the comments above `point_in_dataset'. */ img->equatorcorr[1]=img->sized[0]*cos(img->corners[1]*M_PI/180); } /* Just to check: printf("\n\n%s:\n", img->name); printf("(%.10f, %.10f)\n" "(%.10f, %.10f)\n" "(%.10f, %.10f)\n" "(%.10f, %.10f)\n\n", img->corners[0], img->corners[1], img->corners[2], img->corners[3], img->corners[4], img->corners[5], img->corners[6], img->corners[7]); exit(0); */ } /*******************************************************************/ /************ Check if WCS is in image **************/ /*******************************************************************/ /* Set the four sides around the point of interest in RA and Dec. NOTE: When the image is aligned with the celestial coordinates (current working paradigm), the declination is measured on a great circle, while the right ascension is not. So we have to consider this in calculating the difference in RA. */ void wcsmode_crop_corners(struct onecropparams *crp) { struct cropparams *p=crp->p; size_t i, ndim=p->imgs->ndim; double minra=FLT_MAX, mindec=FLT_MAX; double maxra=-FLT_MAX, maxdec=-FLT_MAX; double r, d, dr, h[MAXDIM], hr[MAXDIM]; size_t rmini=-1, rmaxi=-1, dmini=-1, dmaxi=-1; /* Set the four corners of the WCS region. */ if(p->polygon) { /* Find their minimum and maximum values. */ for(i=0;i<p->nvertices;++i) { if(p->wpolygon[i*2]>maxra) maxra=p->wpolygon[i*2]; if(p->wpolygon[i*2]<minra) minra=p->wpolygon[i*2]; if(p->wpolygon[i*2+1]>maxdec) maxdec=p->wpolygon[i*2+1]; if(p->wpolygon[i*2+1]<mindec) mindec=p->wpolygon[i*2+1]; } /* Set the corners: */ crp->corners[0] = maxra; crp->corners[1] = mindec; /* Bottom Left */ crp->corners[2] = minra; crp->corners[3] = mindec; /* Bottom Right */ crp->corners[4] = maxra; crp->corners[5] = maxdec; /* Top Left */ crp->corners[6] = minra; crp->corners[7] = maxdec; /* Top Right */ } else { /* Set the RA and Dec to use as center. */ r=crp->world[0]=p->centercoords[0][crp->out_ind]; d=crp->world[1]=p->centercoords[1][crp->out_ind]; /* Calculate the declination in radians for easy readability. */ dr=d*M_PI/180; /* Set the half width in each dimension. For the angular dimensions, also calculate it in radians. */ hr[0] = ( h[0] = ((double *)(p->width->array))[0] / 2 ) * M_PI / 180; hr[1] = ( h[1] = ((double *)(p->width->array))[1] / 2 ) * M_PI / 180; /* Set the corners of this crop. */ crp->corners[0] = r+h[0]/cos(dr-hr[1]); crp->corners[1] = d-h[1]; /* Bottom left. */ crp->corners[2] = r-h[0]/cos(dr-hr[1]); crp->corners[3] = d-h[1]; /* Bottom Right. */ crp->corners[4] = r+h[0]/cos(dr+hr[1]); crp->corners[5] = d+h[1]; /* Top Left. */ crp->corners[6] = r-h[0]/cos(dr+hr[1]); crp->corners[7] = d+h[1]; /* Top Right. */ } /* Set the bottom width and height of the crop in degrees. Note that the width changes as the height changes, so here we want the height and the lowest declination. Note that in 2D on the bottom edge, corners[0] is the maximum RA and corners[2] is the minimum RA. For all the 2D region, corners[5] is one of the maximum declinations and corners[1] is one of the the minimum declinations. North and south hemispheres are no problem: When using the center, they are set properly (in any hemisphere) and for a polygon, the minimums and maximums are automatically found. */ rmini = ndim; /* First element in second corner. */ rmaxi = 0; /* First element. */ dmini = 1; /* Second element. */ dmaxi = 5; /* Second element in third corner. */ crp->sized[0]=( (crp->corners[rmaxi]-crp->corners[rmini]) / cos(crp->corners[dmini]*M_PI/180) ); crp->sized[1]=crp->corners[dmaxi]-crp->corners[dmini]; /* In case the crop crosses the equator, then we need these two corrections. See the complete explanations above `point_in_dataset'. */ if(crp->corners[1]*(crp->corners[1]+crp->sized[1]) < 0 ) { /* re in the explanations above `point_in_dataset'. */ crp->equatorcorr[0]=crp->corners[0] -0.5*crp->sized[0]*(1-cos(crp->corners[1]*M_PI/180)); /* sre in the explanations above `point_in_dataset'. */ crp->equatorcorr[1]=crp->sized[0]*cos(crp->corners[1]*M_PI/180); } /* Just to check: printf("\n\n%g, %g:\n", r, d); printf("\t(%.10f, %.10f)\n" "\t(%.10f, %.10f)\n" "\t(%.10f, %.10f)\n" "\t(%.10f, %.10f)\n\n", crp->corners[0], crp->corners[1], crp->corners[2], crp->corners[3], crp->corners[4], crp->corners[5], crp->corners[6], crp->corners[7]); exit(0); */ } /* We have the polygon vertices in WCS coordinates and need to change them to one input image's pixel coordinates. */ void fillcrpipolygon(struct onecropparams *crp) { struct cropparams *p=crp->p; gal_data_t *tmp, *coords=NULL; size_t i, d, ndim=p->imgs->ndim; /* Allocate the necessary arrays for each column. */ for(d=0;d<ndim;++d) gal_list_data_add_alloc(&coords, NULL, GAL_TYPE_FLOAT64, 1, &p->nvertices, NULL, 0, -1, NULL, NULL, NULL); /* Fill in the world coordinate columns. */ for(i=0;i<p->nvertices;++i) { d=0; for(tmp=coords;tmp!=NULL;tmp=tmp->next) ((double *)(tmp->array))[i] = p->wpolygon[ i * ndim + d++ ]; } /* Convert them to image coordinates. */ gal_wcs_world_to_img(coords, p->imgs[crp->in_ind].wcs, 1); /* Allocate the image polygon array, and put the image polygon vertice values into it. */ crp->ipolygon=gal_data_malloc_array(GAL_TYPE_FLOAT64, ndim*p->nvertices, __func__, "crp->ipolygon"); for(i=0;i<p->nvertices;++i) { d=0; for(tmp=coords;tmp!=NULL;tmp=tmp->next) crp->ipolygon[ i * ndim + d++ ] = ((double *)(tmp->array))[i]; } /* Clean up. */ gal_list_data_free(coords); } /* BASICS: ======= An image is a rectangle, but the sky is on a globe. When the images are aligned to the celstial coordinates, (as we have required here in wcscheckprepare) the first FITS axis shows change in RA, while the second axis shows change in Dec. The declination always changes along a great circle, so there is no problem. But unless declination is constrained to zero, RA changes on small circles. See the rectangle below, assume it is an image. To check if a given point is within the same declination as this rectangle is very simple, since d3==d4 and d1==d2. Note that r1>r2 and r3>r4 (because right ascension increases to the east). (r3,d3) ------------------ (r4,d4) | | | | | | | | (r1,d1) ------------------ (r2,d2) But for RA, the same number of pixels on each declination, corresponds to different ranges in right ascention. As the declination gets higher in the northern hemisphere (where the declination rises towards the top of the image) r1-r2 becomes smaller than r3-r4. So, in terms of coverage in RA and Dec, this box should rather be shown like this trapezoid (exaggerated): -------------------- | | | | (Northern hemisphere) | | | | -------------- On the southern hemisphere it should be shown like this: ---------------- | | | | (Southern hemisphere) | | | | ---------------------- The functional form of the change is the inverse cosine, so: (r3-r4)=(r1-r2)/cos(d3-d1) (North) (r1-r2)=(r3-r4)/cos(d1-d3) (South) QUESTION: ======== Is a given point at the RA and Dec of (rp,dp) inside our rectangular image? IMAGE IS FULLY WITHIN ONE HEMISPHERE ------------------------------------ Our reference point for the image is the first pixel in the image, which by convention is the (r1,d1) point in the rectangle above. We also have the angular size of the rectangular image as 'sr', 'sd' (for "size in RA" and "size in dec"). NOTE: This has to be We also assume r1+sr and d1+sd are the distances to the last pixels in our rectangular image. As explained above, to check the declination range, everything is very easy: dp>=d1 && dp<=d1+sd For RA, things become a little more complicated (recall that r1>r3). `n` is defined as half of the extra space between the top and bottom lines of the two trapezoids. (North) n=0.5*sr*(1/cos(dp-d1)-1) ==> rp<=r1+n && rp>=r1-sr-n (South) n=0.5*sr*(1-cos(dp-d1)) ==> rp<=r1-n && rp>=r1-sr+n IMAGE CROSSES THE EQUATOR ------------------------- When d1*(d1+sd)<0, the image crosses the equator (d1 is negative and d1+sd is positive). In this case, we define `re` and `sre` as an equivalent of r1 and sr but on the equator: re=r1-0.5*sr*(1-cos(d1)) && sre=sr*cos(d1) then for all the points with negative declination we use the (South) equations of above as before and for those points that have a positive declination, we use the North formula but replacing r1 with re, d1 with 0 and sr with sre. INPUTS ------ p[]: Point coordinates (rp and dp above). i[]: Coordinates of first pixel in image. (r1 and d1 above). s[]: Size/width of box (sr and sd above). c[]: Corrections if equator is passed, (se and sre above). IMPORTANT: It is assumed that the dimensions are ordered with: 0: RA 1: Dec 2: Third dimension (independent of RA and Dec). */ static int point_in_dataset(double *p, double *i, double *s, double *c, size_t ndim) { double n; /* In the RA and Dec checks, first check the declination. If it is not in range, you can safely return 0. */ if(p[1]>=i[1] && p[1]<=i[1]+s[1]) { if(p[1]<=0) /* Point is in southern hemisphere, it */ { /* doesn't matter if image passes equator! */ n=0.5f*s[0]*( 1 - cos((p[1]-i[1])*M_PI/180) ); if(p[0]<=i[0]-n && p[0]>=i[0]-s[0]+n) return 1; } else /* Point is in the northern hemisphere. */ { if( i[1] * (s[1]+i[1]) > 0 ) /* Image does not cross equator. */ { n=0.5f*s[0]*( 1/cos((p[1]-i[1])*M_PI/180) - 1); if(p[0]<=i[0]+n && p[0]>=i[0]-s[0]-n) return 1; } else /* Image crosses the equator.*/ { n=0.5f*c[1]*( 1/cos((p[1] )*M_PI/180) - 1); if(p[0]<=c[0]+n && p[0]>=c[0]-c[1]-n) return 1; } } } return 0; } /* Is there an overlap between this crop box and the survey image? This function will return 0 if there isn't and 1 if there is. We don't want to necessarily assume that the crop box is smaller than the survey images. If we made that assumption, we only had to check if the corners of the crop are in the image. When we allow the input survey images to be smaller than the crop box, it might happen that none of the corners of the crop are in the image but there is an overlap (the survey image is completely within the crop box). So we have to check both. */ int wcsmode_overlap(struct onecropparams *crp) { double *d, *fd; double *i, *s, *c; /* for clear viewing. */ struct cropparams *p=crp->p; size_t ndim=crp->p->imgs->ndim; /* First check if the corners of the crop are in the image.*/ s=p->imgs[crp->in_ind].sized; i=p->imgs[crp->in_ind].corners; c=p->imgs[crp->in_ind].equatorcorr; fd=(d=crp->corners) + 8; do { /* As long as one of the crop corners are in the image, we know there is overlap and can return a true value. We don't need to check all corners. */ if( point_in_dataset(d, i, s, c, ndim) ) return 1; d+=ndim; } while(d<fd); /* None of the crop box corners where within the image. Now check if the image corners are within the crop.*/ s=crp->sized; i=crp->corners; c=crp->equatorcorr; fd=(d=p->imgs[crp->in_ind].corners) + 8; do { if( point_in_dataset(d, i, s, c, ndim) ) return 1; d+=ndim; } while(d<fd); /* If control reaches here, there was no overlap. */ return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/crop.c������������������������������������������������������������������������0000644�0001750�0001750�00000032241�13216276304�012771� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/threads.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "onecrop.h" #include "wcsmode.h" /* Write the log entry for each crop. A maximum length of FILENAME_BUFFER_IN_VERB characters is set for the filename to be displayed in stdout in verbose mode. This length is set to make the output on the user's terminal reasonable (in one line). So when the filename is longer than this, its first set of characters are truncated. In the log-file there is no truncation, therefore the log file should be used for checking the outputs, not the outputs printed on the screen. */ static void crop_verbose_info(struct onecropparams *crp) { char *filestatus, *msg; size_t outnamelen=strlen(crp->name);; /* Human readable values. */ filestatus = ( crp->centerfilled==0 ? ( crp->numimg == 0 ? "no overlap" : "removed (blank center)" ) : "created"); /* Define the output string based on the length of the output file. */ if ( outnamelen > FILENAME_BUFFER_IN_VERB ) asprintf(&msg, "...%s %s: %zu input%s.", &crp->name[ outnamelen - FILENAME_BUFFER_IN_VERB + 3 ], filestatus, crp->numimg, crp->numimg==1 ? "" :"s"); else asprintf(&msg, "%-*s %s: %zu input%s.", FILENAME_BUFFER_IN_VERB, crp->name, filestatus, crp->numimg, crp->numimg==1 ? "" : "s"); /* Print the results. */ gal_timing_report(NULL, msg, 2); free(msg); } /* Print final statistics in verbose mode. */ static void crop_verbose_final(struct cropparams *p) { char *msg; gal_data_t *tmp; size_t i, counter=0, numcrops=0, numstitched=0, numcfilled=0; /* This function is only useful in verbose (non-quiet) mode. */ if(p->cp.quiet) return; /* The information is only available if the user asks for a log file. */ if(p->catname && p->log) { /* Get the basic counts. */ for(tmp=p->log; tmp!=NULL; tmp=tmp->next) switch(++counter) { case 2: for(i=0;i<p->numout;++i) if( ((unsigned short *)(tmp->array))[i] > 1) ++numstitched; break; case 3: /* When the center wasn't checked it has a value of -1, and when it was checked and the center was filled, it has a value of 1. So if `array[i]==0', we know that the file was removed. */ for(i=0;i<p->numout;++i) { if( ((unsigned char *)(tmp->array))[i] ) ++numcrops; if( ((unsigned char *)(tmp->array))[i] == 1 ) ++numcfilled; } break; } /* Print the basic information. */ asprintf(&msg, "%zu crops created.", numcrops); gal_timing_report(NULL, msg, 1); free(msg); /* Only if the user wanted to check the center. */ if(p->checkcenter) { asprintf(&msg, "%zu filled in the center.", numcfilled); gal_timing_report(NULL, msg, 1); free(msg); } /* Only if there were stitched images. */ if(numstitched) { asprintf(&msg, "%zu crops used more than one input.", numstitched); gal_timing_report(NULL, msg, 1); free(msg); } } } static void crop_write_to_log(struct onecropparams *crp) { char **strarr; gal_data_t *tmp; size_t counter=0; for(tmp=crp->p->log; tmp!=NULL; tmp=tmp->next) { switch(++counter) { case 1: strarr=tmp->array; gal_checkset_allocate_copy(crp->name, &strarr[crp->out_ind]); break; case 2: ((unsigned short *)(tmp->array))[crp->out_ind]=crp->numimg; break; case 3: ((unsigned char *)(tmp->array))[crp->out_ind]=crp->centerfilled; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The value of %zu is not valid for `counter'", __func__, PACKAGE_BUGREPORT, counter); } } } static void * crop_mode_img(void *inparam) { struct onecropparams *crp=(struct onecropparams *)inparam; struct cropparams *p=crp->p; size_t i; int status; struct inputimgs *img; /* In image mode, we always only have one image. */ crp->in_ind=0; /* The whole catalog is from one image, so you can get the information here:*/ img=&p->imgs[crp->in_ind]; crp->infits=gal_fits_hdu_open_format(img->name, p->cp.hdu, 0); /* Go over all the outputs that are assigned to this thread: */ for(i=0; crp->indexs[i]!=GAL_BLANK_SIZE_T; ++i) { /* Set all the output parameters: */ crp->out_ind=crp->indexs[i]; crp->outfits=NULL; crp->numimg=1; /* In Image mode there is only one input image. */ onecrop_name(crp); /* Crop the image. */ onecrop(crp); /* Check the final output: */ if(crp->numimg) { /* Check if the center of the crop is filled or not. */ crp->centerfilled=onecrop_center_filled(crp); /* Add the final headers and close output FITS image: */ gal_fits_key_write_version(crp->outfits, NULL, PROGRAM_NAME); status=0; if( fits_close_file(crp->outfits, &status) ) gal_fits_io_error(status, "CFITSIO could not close " "the opened file"); /* Remove the output image if its center was not filled. */ if(crp->centerfilled==0) { errno=0; if(unlink(crp->name)) error(EXIT_FAILURE, errno, "can't delete %s (center" "was blank)", crp->name); } } else crp->centerfilled=0; /* Report the status on stdout if verbose mode is requested. */ if(!p->cp.quiet) crop_verbose_info(crp); if(p->cp.log) crop_write_to_log(crp); } /* Close the input image. */ status=0; if( fits_close_file(crp->infits, &status) ) gal_fits_io_error(status, "could not close FITS file"); /* Wait until all other threads finish. */ if(p->cp.numthreads>1) pthread_barrier_wait(crp->b); return NULL; } static void * crop_mode_wcs(void *inparam) { struct onecropparams *crp=(struct onecropparams *)inparam; struct cropparams *p=crp->p; size_t i; int status; /* Go over all the output objects for this thread. */ for(i=0; crp->indexs[i]!=GAL_BLANK_SIZE_T; ++i) { /* Set all the output parameters: */ crp->out_ind=crp->indexs[i]; crp->outfits=NULL; crp->name=NULL; crp->numimg=0; /* Set the sides of the crop in RA and Dec */ wcsmode_crop_corners(crp); /* Go over all the images to see if this target is within their range or not. */ crp->in_ind=0; do if(wcsmode_overlap(crp)) { /* Open the input FITS file. */ crp->infits=gal_fits_hdu_open_format(p->imgs[crp->in_ind].name, p->cp.hdu, 0); /* If a name isn't set yet, set it. */ if(crp->name==NULL) onecrop_name(crp); /* Increment the number of images used (necessary for the header keywords that are written in `onecrop'). Then do the crop. */ ++crp->numimg; onecrop(crp); /* Close the file. */ status=0; if( fits_close_file(crp->infits, &status) ) gal_fits_io_error(status, "could not close FITS file"); } while ( ++(crp->in_ind) < p->numin ); /* Correct in_ind. The loop above went until `in_ind' is one more than the index for the last input image (that is how it exited the loop). But `crp->in_ind' is needed later, so correct it here. */ --crp->in_ind; /* Check the final output: */ if(crp->numimg) { /* See if the center is filled. */ crp->centerfilled=onecrop_center_filled(crp); /* Write all the dependency versions and close the file. */ gal_fits_key_write_version(crp->outfits, NULL, PROGRAM_NAME); status=0; if( fits_close_file(crp->outfits, &status) ) gal_fits_io_error(status, "CFITSIO could not close the " "opened file"); if(crp->centerfilled==0) { errno=0; if(unlink(crp->name)) error(EXIT_FAILURE, errno, "%s", crp->name); } } else { onecrop_name(crp); crp->centerfilled=0; } /* Report the status on stdout if verbose mode is requested. */ if(!p->cp.quiet) crop_verbose_info(crp); if(p->cp.log) crop_write_to_log(crp); } /* Wait until all other threads finish, then return. */ if(p->cp.numthreads>1) pthread_barrier_wait(crp->b); return NULL; } /*******************************************************************/ /************** Output function ****************/ /*******************************************************************/ /* Main function for the Image Mode. It is assumed that if only one crop box from each input image is desired, the first and last pixels are already set, irrespective of how the user specified that box. */ void crop(struct cropparams *p) { int err=0; char *tmp; pthread_t t; /* We don't use the thread id, so all are saved here. */ pthread_attr_t attr; pthread_barrier_t b; struct onecropparams *crp; size_t i, *indexs, thrdcols; gal_list_str_t *comments=NULL; size_t nt=p->cp.numthreads, nb; void *(*modefunction)(void *)=NULL; /* Set the function to run: */ modefunction = p->mode==IMGCROP_MODE_IMG ? &crop_mode_img : &crop_mode_wcs; /* Allocate the array of structures to keep the thread and parameters for each thread. */ errno=0; crp=malloc(nt*sizeof *crp); if(crp==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `crp'", __func__, nt*sizeof *crp); /* Distribute the indexs into the threads (this is needed even if we only have one object where p->cs0 is not defined): */ gal_threads_dist_in_threads(p->catname ? p->numout : 1, nt, &indexs, &thrdcols); /* Run the job, if there is only one thread, don't go through the trouble of spinning off a thread! */ if(nt==1) { crp[0].p=p; crp[0].indexs=indexs; modefunction(&crp[0]); } else { /* Initialize the attributes. Note that this running thread (that spinns off the nt threads) is also a thread, so the number the barrier should be one more than the number of threads spinned off. */ if(p->numout<nt) nb=p->numout+1; else nb=nt+1; gal_threads_attr_barrier_init(&attr, &b, nb); /* Spin off the threads: */ for(i=0;i<nt;++i) if(indexs[i*thrdcols]!=GAL_BLANK_SIZE_T) { crp[i].p=p; crp[i].b=&b; crp[i].indexs=&indexs[i*thrdcols]; err=pthread_create(&t, &attr, modefunction, &crp[i]); if(err) error(EXIT_FAILURE, 0, "%s: can't create thread %zu", __func__, i); } /* Wait for all threads to finish and free the spaces. */ pthread_barrier_wait(&b); pthread_attr_destroy(&attr); pthread_barrier_destroy(&b); } /* Print the log file. */ if(p->cp.log) { if(p->checkcenter) { asprintf(&tmp, "Width of central check box: %zu", p->checkcenter); gal_list_str_add(&comments, tmp, 0); } gal_checkset_writable_remove(LOGFILENAME, 0, p->cp.dontdelete); gal_table_write_log(p->log, PROGRAM_STRING, &p->rawtime, comments, LOGFILENAME, p->cp.quiet); gal_list_str_free(comments, 1); } /* Print the final verbose info, save log, and clean up: */ crop_verbose_final(p); free(indexs); free(crp); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/ui.c��������������������������������������������������������������������������0000644�0001750�0001750�00000100522�13216276304�012441� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <gnuastro/wcs.h> #include <gnuastro/list.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/table.h> #include <gnuastro/dimension.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "onecrop.h" #include "wcsmode.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "[Crop-identifiers] ASTRdata ..."; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will create cutouts, " "thumbnails, postage stamps or crops of region(s) from input image(s) " "using image or celestial coordinates. If muliple crops are desired, a " "catalog must be provided. When in WCS mode, if the cut out covers more " "than one input image, all overlapping input images will be stitched in " "the output.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct cropparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Initalize necessary parameters. */ p->mode = IMGCROP_MODE_INVALID; cp->searchin = GAL_TABLE_SEARCH_INVALID; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; cp->coptions[i].doc="Extension name or number of (all) input(s)."; break; case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: cp->coptions[i].group=UI_GROUP_CENTER_CATALOG; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct cropparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: gal_list_str_add(&p->inputs, arg, 0); ++p->numin; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /* Parse the mode to interpret the given coordinates. */ void * ui_parse_coordinate_mode(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *outstr; /* We want to print the stored values. */ if(lineno==-1) { gal_checkset_allocate_copy( *(int *)(option->value)==IMGCROP_MODE_IMG ? "img" : "wcs", &outstr ); return outstr; } else { if (!strcmp(arg, "img")) *(int *)(option->value)=IMGCROP_MODE_IMG; else if (!strcmp(arg, "wcs")) *(int *)(option->value)=IMGCROP_MODE_WCS; else error_at_line(EXIT_FAILURE, 0, filename, lineno, "`%s' (value to " "`--mode') not recognized as an input mode. " "Recognized values are `img' and `wcs'. This option " "is necessary to identify the nature of your input " "coordinates.\n\n" "Please run the following command for more " "information (press the `SPACE' key to go down and " "`q' to return to the command-line):\n\n" " $ info gnuastro \"Crop modes\"\n", arg); return NULL; } } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct cropparams *p) { double *darray; int i, checksum; /* Make sure that only one of the crop definitions is given. */ checksum = ( (p->center!=NULL) + (p->catname!=NULL) + (p->section!=NULL) + (p->polygon!=NULL) ); switch(checksum) { case 0: error(EXIT_FAILURE, 0, "no crop definition. You can use any of the " "following options to define the crop(s): `--center', " "`--catalog', `--section', or `--polygon'. Please run this " "command for more information:\n\n" " $ info gnuastro \"Crop modes\"\n"); case 1: /* Everything is ok, just ignore the switch structure. */ break; default: error(EXIT_FAILURE, 0, "more than one crop type specified. In each " "run, only one crop definition is acceptable on the " "command-line or in configuration files. You have called: " "%s%s%s%s\b\b.", p->center!=NULL ? "`--center', " : "", p->catname!=NULL ? "`--catalog', " : "", p->section!=NULL ? "`--section', " : "", p->polygon!=NULL ? "`--polygon', " : ""); } /* The width values must not be negative. */ if(p->width) { darray=p->width->array; for(i=0;i<p->width->size;++i) if(darray[i]<=0.0f) error(EXIT_FAILURE, 0, "%g is <=0. The values to the `--width' " "option must be larger than zero. %g is input number %d to " "this option", darray[i], darray[i], i+1); } /* Section is currentlyl only defined in Image mode. */ if(p->section && p->mode!=IMGCROP_MODE_IMG) error(EXIT_FAILURE, 0, "The `--section' option is only available in " "image coordinate mode, currently it doesn't work with WCS mode. " "Please run with `--mode=img' and if necessary, change the " "values accordingly"); /* Sanity checks and mode setting based on the desired crop. */ if(p->catname) { /* If the searchin option has been given. */ if(p->cp.searchin==GAL_TABLE_SEARCH_INVALID) error(EXIT_FAILURE, 0, "%s: no field specified to search for " "columns. Please use the `--searchin' option to specify " "which column meta-data you would like to search in: `name', " "`unit' and `comment'. You may also select columns by their " "number, which won't use this option, but for complentess its " "best for this option to have a value", p->catname); /* If it is a FITS file, we need the HDU. */ if( gal_fits_name_is_fits(p->catname) && p->cathdu==NULL ) error(EXIT_FAILURE, 0, "%s: no hdu given. Please use the `--cathdu' " "option to specify which extension contains the table", p->catname); /* Atleast one of the (X,Y), and (RA,Dec) set of columns are necessary. Note that we have checked that they are together if given, so we only need to check one of the two in each couple. */ if(p->coordcol==NULL) error(EXIT_FAILURE, 0, "no crop center columns given to read from " "the input catalog (`%s'). Please use `--coordcol' two times " "to specify the column keeping the center position the " "respective dimension.\n\n" "For more information on how to select columns in Gnuastro, " "please run the following command:\n\n" " $ info gnuastro \"Selecting table columns\"", p->catname); } /* Parse the polygon vertices if they are given to make sure that it is in the proper format. */ if(p->polygon) { onecrop_parse_polygon(p); if(p->nvertices<3) error(EXIT_FAILURE, 0, "a polygon has to have 3 or more vertices, " "you have only given %zu (%s)", p->nvertices, p->polygon); if(p->outpolygon && p->numin>1) error(EXIT_FAILURE, 0, "currently in WCS mode, outpolygon can only " "be set to zero when there is one image, you have given %zu " "images. For multiple images the region will be very large. " "It is best if you first crop out the larger region you want " "into one image, then mask the polygon", p->numin); } else p->wpolygon=p->ipolygon=NULL; /* If we are in WCS mode, noblanks must be off */ if(p->mode==IMGCROP_MODE_WCS && p->noblank) error(EXIT_FAILURE, 0, "`--noblanks` (`-b`) is only for image mode. " "You have called it with WCS mode"); } static void ui_check_options_and_arguments(struct cropparams *p) { /* Make sure we actually have inputs. */ if(p->inputs==NULL) error(EXIT_FAILURE, 0, "no input file given"); /* Make sure that a HDU is also given. */ if(p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a FITS " "file, a HDU must also be specified, you can use the `--hdu' " "(`-h') option and give it the HDU number (starting from " "zero), extension name, or anything acceptable by CFITSIO"); /* If in image mode, there should only be one input image. */ if(p->mode==IMGCROP_MODE_IMG && p->numin>1) error(EXIT_FAILURE, 0, "in image mode, only one input image may be " "specified"); /* If no output name is given, set it to the current directory. */ if(p->cp.output==NULL) gal_checkset_allocate_copy("./", &p->cp.output); /* Only catalog mode needs multiple threads and a directory for the output. */ if(p->catname) { /* When multiple threads need to access a file, CFITSIO needs to be configured with the `--enable-reentrant` option. */ if(p->cp.numthreads>1 && fits_is_reentrant()==0) error(EXIT_FAILURE, 0, "CFITSIO was not configured with the " "`--enable-reentrant` option but you have asked to crop " "on %zu threads.\n\nPlease configure, make and install CFITSIO " "again with this flag. Alternatively, to avoid this error " "you can set the number of threads to 1 by adding the " "`--numthreads=1` or `-N1` options. Please run the following " "command to learn more about configuring CFITSIO:\n\n" " $ info gnuastro CFITSIO", p->cp.numthreads); /* Make sure the given output is a directory. */ gal_checkset_check_dir_write_add_slash(&p->cp.output); } else { p->cp.numthreads=1; p->outnameisfile=gal_checkset_dir_0_file_1(p->cp.output, p->cp.dontdelete); } } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ /* When the crop is defined by its center, the final width that we need must be in actual number of pixels (an integer). But the user's values can be in WCS mode or even in image mode, they may be non-integers. */ static void ui_set_iwidth(struct cropparams *p) { gal_data_t *newwidth; double pwidth, *warray; size_t i, ndim=p->imgs->ndim; /* Make sure a width value is actually given. */ if(p->width==NULL) error(EXIT_FAILURE, 0, "no crop width specified. When crops are " "defined by their center (with `--center' or `--catalog') a " "width is necessary (using the `--width' option)"); /* Make sure that the width array only has one element or the same number of elements as the input's dimensions. */ if(p->width->size!=ndim && p->width->size!=1) error(EXIT_FAILURE, 0, "%zu values give to `--width', but input is %zu " "dimensions. It can only take either one value (same width in all " "dimensions), or the same number as the input's dimensions", p->width->size, ndim); /* If the width array has only one value, that single value should be used for all dimensions. */ if(p->width->size==1) { /* Allocate the new width dataset. */ newwidth=gal_data_alloc(NULL, p->width->type, 1, &ndim, NULL, 0, -1, NULL, NULL, NULL); /* Fill the new width. */ warray=newwidth->array; for(i=0;i<ndim;++i) warray[i] = *(double *)(p->width->array); /* Free the old (single element) width dataset and put the new one in its place. */ gal_data_free(p->width); p->width=newwidth; } else warray=p->width->array; /* Fill in `p->iwidth' depending on the mode. */ for(i=0;i<ndim;++i) { /* Set iwidth. */ if(p->mode==IMGCROP_MODE_WCS) { /* Convert the width in units of the input's WCS into pixels. */ pwidth = warray[i]/p->pixscale[i]; if(pwidth<3 || pwidth>50000) error(EXIT_FAILURE, 0, "%g (width along dimension %zu) " "translates to %.0f pixels. This is probably not what " "you wanted. Note that the resolution in this dimension " "is %g", warray[i], i+1, pwidth, p->pixscale[i]); /* Write the single valued width in WCS and the image width for this dimension. */ p->iwidth[i]=GAL_DIMENSION_FLT_TO_INT(pwidth); if(p->iwidth[i]%2==0) { p->iwidth[i] += 1; warray[i] += p->pixscale[i]; } } else { p->iwidth[i]=GAL_DIMENSION_FLT_TO_INT(warray[i]); if(p->iwidth[i]%2==0) p->iwidth[i] += 1; } } /* For a check: printf("Width: "); for(i=0;i<ndim;++i) printf("\t%ld\n\t", p->iwidth[i]); exit(0); */ } static void ui_read_cols(struct cropparams *p) { char colname[100]; gal_data_t *cols, *tmp, *corrtype=NULL; gal_list_str_t *colstrs=NULL, *extracolstr, *lastcolstr; size_t i, ncoordcols, counter=0, dcounter=0, ndim=p->imgs->ndim; /* See if the number of columns given for coordinates corresponds to the number of dimensions of the input dataset. */ if(p->coordcol) { /* Check if the number of columns given for coordinates is the same as the number of dimensions in the input dataset(s). */ ncoordcols=gal_list_str_number(p->coordcol); if( ncoordcols < ndim) error(EXIT_FAILURE, 0, "`--coordcol' was called %zu times, but the " "input dataset%s %zu dimensions. Recall that through " "`--coordcol' you are specifying the columns containing the " "coordinates of the center of the crop in a catalog", ncoordcols, (p->numin==1?" has":"s have"), ndim); /* If the number of given columns is more than the input's dimensions, then we'll just delete all the unnecessary columns. */ else if( ncoordcols > ndim ) { /* Go over the columns find the last, but first initialize the two (`lastcolstr' to avoid compiler warnings). */ lastcolstr=extracolstr=p->coordcol; for(i=0;i<ndim;++i) { /* Keep the last node if on the last (useful) column. */ if(i==ndim-1) lastcolstr=extracolstr; /* Go onto the next one. */ extracolstr=extracolstr->next; } /* Set the `next' element of the last node to NULL and free the extra ones. */ lastcolstr->next=NULL; gal_list_str_free(extracolstr, 1); } } else error(EXIT_FAILURE, 0, "no coordinate columns specified. When a catalog" "is given, it is necessary to identify which columns identify " "the coordinate values in which dimension.\n\n" "You can do this by calling `--coordcol' multiple times, the " "order must be in the same order as the input's dimensions. " "For more information on how to select columns in Gnuastro, " "please run the following command:\n\n" " $ info gnuastro \"Selecting table columns\""); /* If a name column was also given, the put that as the first column to read, otherwise just use the given set of columns (in the same order). */ if(p->namecol) { gal_list_str_add(&colstrs, p->namecol, 0); colstrs->next=p->coordcol; } else colstrs=p->coordcol; /* Read the desired columns from the file. */ cols=gal_table_read(p->catname, p->cathdu, colstrs, p->cp.searchin, p->cp.ignorecase, p->cp.minmapsize, NULL); /* Set the number of objects (rows in each column). */ p->numout=cols->size; /* Make sure more columns were not read (the name matchings might result in more than one column being read from the inputs). */ if( gal_list_data_number(cols) != ndim + (p->namecol!=NULL) ) gal_tableintern_error_col_selection(p->catname, p->cathdu, "too many " "columns were selected by the given " "values to the options ending in " "`col'."); /* Put the information in each column in the proper place. */ while(cols!=NULL) { /* Pop out the top node. */ tmp=gal_list_data_pop(&cols); /* See which column it is. */ switch(++counter) { case 1: if(p->namecol) { sprintf(colname, "crop name prefix"); corrtype = (tmp->type==GAL_TYPE_STRING ? tmp : gal_data_copy_to_new_type_free(tmp, GAL_TYPE_STRING)); p->name=corrtype->array; } else { sprintf(colname, "position in dimension %zu", dcounter+1); corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64); p->centercoords[ dcounter++ ]=corrtype->array; } break; default: sprintf(colname, "position in dimension %zu", dcounter+1); corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64); p->centercoords[ dcounter++ ] = corrtype->array; } /* Sanity check and clean up. Note that it might happen that the input structure is already freed. In that case, `corrtype' will be NULL. */ if(corrtype) { /* Make sure there are no blank values in this column. */ if( gal_blank_present(corrtype, 1) ) error(EXIT_FAILURE, 0, "%s: column with %s has blank values. " "Input columns must not contain blank values", gal_fits_name_save_as_string(p->catname, p->cathdu), colname); /* Free the unnecessary sturcture information. The correct-type (`corrtype') data structure's array is necessary for later steps, so its pointer has been copied in the main program's structure. Hence, we should set the structure's pointer to NULL so the important data isn't freed.*/ corrtype->array=NULL; gal_data_free(corrtype); corrtype=NULL; } } } static void ui_prepare_center(struct cropparams *p) { double *carray; size_t i, ndim=p->imgs->ndim; /* Allocate space to keep the central positions. */ errno=0; p->centercoords=malloc(ndim*sizeof *p->centercoords); if( p->centercoords==NULL ) error(EXIT_FAILURE, 0, "%s: %zu bytes for `p->centercoords'", __func__, ndim*sizeof *p->centercoords); /* Set the integer widths of the crop(s) when defined by center. */ ui_set_iwidth(p); /* For a catalog, we have a separate function, but for a single center value, put the center values into an array. This will essentially simulate a catalog with one row. So from this point on, there is no difference between a catalog input and a central position input. */ if(p->catname) ui_read_cols(p); else { carray=p->center->array; for(i=0;i<ndim;++i) { p->centercoords[i]=gal_data_malloc_array(GAL_TYPE_FLOAT64, 1, __func__, "p->centercoords[i]"); p->centercoords[i][0]=carray[i]; } } } /* Add all the columns of the log file. Just note that since this is a linked list, we have to add them in the opposite order. */ static void ui_make_log(struct cropparams *p) { char *comment; /* Return if no long file was requested. */ if(p->cp.log==0) return; /* Column to specify if the central pixels are filled. */ asprintf(&comment, "Are the central pixels filled? (1: yes, 0: no, " "%u: not checked)", GAL_BLANK_UINT8); gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_UINT8, 1, &p->numout, NULL, 1, p->cp.minmapsize, "CENTER_FILLED", "bool", comment); free(comment); /* Column for number of datasets used in this crop. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_UINT16, 1, &p->numout, NULL, 1, p->cp.minmapsize, "NUM_INPUTS", "count", "Number of input datasets used to make this crop."); /* Filename of crop. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_STRING, 1, &p->numout, NULL, 1, p->cp.minmapsize, "CROP_NAME", "name", "File name of crop."); } void ui_preparations(struct cropparams *p) { fitsfile *tmpfits; struct inputimgs *img; int status, firsttype=0; size_t input_counter, firstndim=0; /* For polygon and section, there should be no center checking. */ if(p->polygon || p->section) p->checkcenter=0; /* Allocate space for all the input images. This is done here because WCSLIB is unfortunately not thread-safe when reading the WCS information from the FITS files. In cases where the number of cropped images are more than the input images, this can also be a preformance boost because each image information is only read once. The images are filled in opposite order because we used a linked list to read them in, which is a first in first out structure.*/ errno=0; p->imgs=malloc(p->numin*sizeof *p->imgs); if(p->imgs==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for p->imgs", __func__, p->numin*sizeof *p->imgs); /* Fill in the WCS information of each image. */ input_counter=p->numin; while(p->inputs) { /* Pop from the list of input images and get the info. */ status=0; img=&p->imgs[--input_counter]; img->name=gal_list_str_pop(&p->inputs); tmpfits=gal_fits_hdu_open_format(img->name, p->cp.hdu, 0); gal_fits_img_info(tmpfits, &p->type, &img->ndim, &img->dsize, NULL, NULL); img->wcs=gal_wcs_read_fitsptr(tmpfits, p->hstartwcs, p->hendwcs, &img->nwcs); if(img->wcs) { gal_wcs_decompose_pc_cdelt(img->wcs); status=wcshdo(0, img->wcs, &img->nwcskeys, &img->wcstxt); if(status) error(EXIT_FAILURE, 0, "wcshdo ERROR %d: %s", status, wcs_errmsg[status]); } else if(p->mode==IMGCROP_MODE_WCS) error(EXIT_FAILURE, 0, "the WCS structure of %s (hdu: %s) " "image is not recognized. So WCS mode cannot be used " "as input coordinates. You can try with pixel coordinates " "with `--mode=img'", img->name, p->cp.hdu); fits_close_file(tmpfits, &status); gal_fits_io_error(status, NULL); /* Make sure all the images have the same type and dimensions. */ if(firsttype==0) { /* Set the basic information. */ firsttype = p->type; firstndim = img->ndim; p->bitnul = gal_fits_key_img_blank(p->type); /* Make sure the number of dimensions is supported. */ if(firstndim>MAXDIM) error(EXIT_FAILURE, 0, "%s: is as %zu dimensional dataset, Crop " "currently only supports a maximum of %d dimensions", img->name, firstndim, MAXDIM); /* Make sure the number of coordinates given for center correspond to the dimensionality of the data. */ if(p->center && p->center->size!=firstndim) error(EXIT_FAILURE, 0, "%s (hdu %s) has %zu dimensions, but " "%zu coordinates were given to `--center'", img->name, p->cp.hdu, firstndim, p->center->size); } else { if(firsttype!=p->type) error(EXIT_FAILURE, 0, "%s: type is `%s' while previous input(s) " "were `%s' type. All inputs must have the same pixel data " "type.\n\nYou can use Gnuastro's Arithmetic program to " "convert `%s' to `%s', please run this command for more " "information (press `SPACE' for going down and `q' to " "return to the command-line):\n\n" " $ info Arithmetic\n", img->name, gal_type_name(p->type, 1), gal_type_name(firsttype, 1), img->name, gal_type_name(p->type, 1)); if(firstndim!=img->ndim) error(EXIT_FAILURE, 0, "%s: type has %zu dimensions, while " "previous input(s) had %zu dimensions. All inputs must " "have the same number of dimensions", img->name, img->ndim, firstndim); } /* In WCS mode, we need some additional preparations. */ if(p->mode==IMGCROP_MODE_WCS) wcsmode_check_prepare(p, img); } /* Unify central crop methods into `p->centercoords'. */ if(p->catname || p->center) ui_prepare_center(p); /* `ui_read_cols' set the number of output crops when a catalog was given, in all other cases, we only have one output. */ if(p->catname==NULL) p->numout=1; /* Prepare the log file if the user has asked for it. */ ui_make_log(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct cropparams *p) { char *msg; struct timeval t1; struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* To see how long it takes to read meta-data. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Report timing: */ if(!p->cp.quiet) { printf(PROGRAM_NAME" started on %s", ctime(&p->rawtime)); asprintf(&msg, "Read metadata of %zu dataset%s.", p->numin, p->numin>1 ? "s" : ""); gal_timing_report(&t1, msg, 1); if(p->numout>1) { asprintf(&msg, "Will try making %zu crops (from catalog).", p->numout); gal_timing_report(NULL, msg, 1); } } } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct cropparams *p, struct timeval *t1) { size_t i; /* Free the simple arrays (if they were set). */ gal_data_free(p->center); if(p->cp.hdu) free(p->cp.hdu); if(p->cathdu) free(p->cathdu); if(p->catname) free(p->catname); /* The arguments (note that the values were not allocated). */ gal_list_str_free(p->inputs, 0); /* Free the name/ array. */ if(p->name) { for(i=0;i<p->numout;++i) free(p->name[i]); free(p->name); } /* Free the log information. */ if(p->cp.log) gal_list_data_free(p->log); /* Print the final message. */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/main.c������������������������������������������������������������������������0000644�0001750�0001750�00000003051�13121462410�012735� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" #include "crop.h" #include "onecrop.h" int main (int argc, char *argv[]) { struct timeval t1; struct cropparams p={{{0},0},0}; /* Set the starting time.*/ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Image Crop */ crop(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully.*/ return EXIT_SUCCESS; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/Makefile.in�������������������������������������������������������������������0000644�0001750�0001750�00000211556�13217217705�013740� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astcrop$(EXEEXT) subdir = bin/crop ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astcrop_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) crop.$(OBJEXT) \ wcsmode.$(OBJEXT) onecrop.$(OBJEXT) astcrop_OBJECTS = $(am_astcrop_OBJECTS) astcrop_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astcrop_SOURCES) DIST_SOURCES = $(astcrop_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astcrop_LDADD = -lgnuastro astcrop_SOURCES = main.c ui.c crop.c wcsmode.c onecrop.c EXTRA_DIST = main.h authors-cite.h args.h ui.h crop.h wcsmode.h onecrop.h dist_sysconf_DATA = astcrop.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/crop/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/crop/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astcrop$(EXEEXT): $(astcrop_OBJECTS) $(astcrop_DEPENDENCIES) $(EXTRA_astcrop_DEPENDENCIES) @rm -f astcrop$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astcrop_OBJECTS) $(astcrop_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/onecrop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcsmode.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/astcrop.conf������������������������������������������������������������������0000644�0001750�0001750�00000002226�13216276304�014204� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for Crop. # Crop is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astcrop --help # Full list of options, short doc. # $ astcrop -P # Print all options and used values. # $ info astcrop # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input image and catalog parameters: cathdu 1 hstartwcs 0 hendwcs 0 # Output parameters: checkcenter 0 suffix _cropped.fits # Crop by center (when a catalog is given) coordcol 2 coordcol 3 # Operating mode: mode wcs ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/crop/Makefile.am�������������������������������������������������������������������0000644�0001750�0001750�00000002622�13121462410�013704� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astcrop astcrop_LDADD = -lgnuastro astcrop_SOURCES = main.c ui.c crop.c wcsmode.c onecrop.c EXTRA_DIST = main.h authors-cite.h args.h ui.h crop.h wcsmode.h onecrop.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.ma dist_sysconf_DATA = astcrop.conf ��������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220466�012731� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/cosmiccal.h��������������������������������������������������������������0000644�0001750�0001750�00000002252�13174362166�014766� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef COSMICCAL_H #define COSMICCAL_H /* Format of final outputs */ # define FLTFORMAT " - %-55s%f\n" # define EXPFORMAT " - %-55s%e\n" void cosmiccal(struct cosmiccalparams *p); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/ui.h���������������������������������������������������������������������0000644�0001750�0001750�00000004271�13174462540�013446� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_SPECIFIC = GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Available letters for short options: e f i j k n p t w x y B E J O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_REDSHIFT = 'z', UI_KEY_H0 = 'H', UI_KEY_OLAMBDA = 'l', UI_KEY_OMATTER = 'm', UI_KEY_ORADIATION = 'r', UI_KEY_AGENOW = 'G', UI_KEY_CRITICALDENSITYNOW = 'C', UI_KEY_PROPERDISTANCE = 'd', UI_KEY_ANGULARDIMDIST = 'A', UI_KEY_ARCSECTANDIST = 's', UI_KEY_LUMINOSITYDIST = 'L', UI_KEY_DISTANCEMODULUS = 'u', UI_KEY_ABSMAGCONV = 'a', UI_KEY_AGE = 'g', UI_KEY_LOOKBACKTIME = 'b', UI_KEY_CRITICALDENSITY = 'c', UI_KEY_VOLUME = 'v', /* Only with long version (start with a value 1000, the rest will be set automatically). */ }; void ui_read_check_inputs_setup(int argc, char *argv[], struct cosmiccalparams *p); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/args.h�������������������������������������������������������������������0000644�0001750�0001750�00000015567�13175442274�014002� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { "redshift", UI_KEY_REDSHIFT, "FLT", 0, "Redshift of interest.", GAL_OPTIONS_GROUP_INPUT, &p->redshift, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "H0", UI_KEY_H0, "FLT", 0, "Current expansion rate (Hubble constant).", GAL_OPTIONS_GROUP_INPUT, &p->H0, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "olambda", UI_KEY_OLAMBDA, "FLT", 0, "Current cosmological cst. dens. per crit. dens.", GAL_OPTIONS_GROUP_INPUT, &p->olambda, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "omatter", UI_KEY_OMATTER, "FLT", 0, "Current matter density per critical density.", GAL_OPTIONS_GROUP_INPUT, &p->omatter, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "oradiation", UI_KEY_ORADIATION, "FLT", 0, "Current radiation density per critical density.", GAL_OPTIONS_GROUP_INPUT, &p->oradiation, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Specific calculations", UI_GROUP_SPECIFIC }, { "agenow", UI_KEY_AGENOW, 0, 0, "Age of universe now (Gyr).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "criticaldensitynow", UI_KEY_CRITICALDENSITYNOW, 0, 0, "Critical density now (g/cm^3).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "properdistance", UI_KEY_PROPERDISTANCE, 0, 0, "Proper distance to z (Mpc).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "angulardimdist", UI_KEY_ANGULARDIMDIST, 0, 0, "Angular diameter distance (Mpc).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "arcsectandist", UI_KEY_ARCSECTANDIST, 0, 0, "Tangential dist. covered by 1arcsec at z (kpc).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "luminositydist", UI_KEY_LUMINOSITYDIST, 0, 0, "Luminosity distance to z (Mpc).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "distancemodulus", UI_KEY_DISTANCEMODULUS, 0, 0, "Distance modulus at z (no units).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "absmagconv", UI_KEY_ABSMAGCONV, 0, 0, "Conversion to absolute magnitude (no unit).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "age", UI_KEY_AGE, 0, 0, "Age of universe at z (Gyr).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "lookbacktime", UI_KEY_LOOKBACKTIME, 0, 0, "Look back time to z (Gyr).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "criticaldensity", UI_KEY_CRITICALDENSITY, 0, 0, "Critical density at z (g/cm^3).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "volume", UI_KEY_VOLUME, 0, 0, "Comoving volume (4pi str) to z (Mpc^3).", UI_GROUP_SPECIFIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif �����������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/authors-cite.h�����������������������������������������������������������0000644�0001750�0001750�00000003002�13211076737�015430� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/main.h�������������������������������������������������������������������0000644�0001750�0001750�00000004164�13174462540�013756� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gnuastro/list.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "CosmicCalculator" /* Program full name. */ #define PROGRAM_EXEC "astcosmiccal" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Main program parameters structure */ struct cosmiccalparams { /* Other structures: */ struct gal_options_common_params cp; /* Common parameters. */ /* Input: */ double redshift; /* Redshift of interest. */ double H0; /* Current expansion rate (km/sec/Mpc). */ double olambda; /* Current cosmological constant dens. */ double omatter; /* Current matter density. */ double oradiation; /* Current radiation density. */ /* Outputs. */ gal_list_i32_t *specific; /* Codes for single row calculations. */ /* Internal: */ time_t rawtime; /* Starting time of the program. */ }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/cosmiccal.c��������������������������������������������������������������0000644�0001750�0001750�00000023300�13174462540�014753� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/cosmology.h> #include "main.h" #include "ui.h" #include "cosmiccal.h" /**************************************************************/ /************ Main function *************/ /**************************************************************/ static void cosmiccal_print_input(struct cosmiccalparams *p) { printf("%s\n", PROGRAM_STRING); printf("\n Input parameters\n"); printf( " ----------------\n"); if( !isnan(p->redshift) ) printf(FLTFORMAT, "Desired redshift for calculations (z):", p->redshift); printf(FLTFORMAT, "Expansion rate (Hubble constant, H0), now:", p->H0); printf(FLTFORMAT, "Cosmological constant fractional density, now:", p->olambda); printf(FLTFORMAT, "Matter fractional density, now:", p->omatter); printf(EXPFORMAT, "Radiation fractional density, now:", p->oradiation); printf(EXPFORMAT, "Curvatue fractional density (from the above):", 1 - ( p->olambda + p->omatter + p->oradiation )); } static void cosmiccal_printall(struct cosmiccalparams *p) { double ad, ld, vz, pd, absmagconv; double curage, ccritd, distmod, outage, zcritd; /* The user wants everything, do all the calculations and print everything with full descriptions. */ curage=gal_cosmology_age(0.0f, p->H0, p->olambda, p->omatter, p->oradiation); ccritd=gal_cosmology_critical_density(0.0f, p->H0, p->olambda, p->omatter, p->oradiation); pd=gal_cosmology_proper_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation); ad=gal_cosmology_angular_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation); ld=gal_cosmology_luminosity_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation); distmod=gal_cosmology_distance_modulus(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation); absmagconv=gal_cosmology_to_absolute_mag(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation); outage=gal_cosmology_age(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation); zcritd=gal_cosmology_critical_density(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation); vz=gal_cosmology_comoving_volume(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation); /* Print out results: */ cosmiccal_print_input(p); printf("\n\n Universe now\n"); printf( " ------------\n"); printf(FLTFORMAT, "Age of Universe now (Gyr):", curage); printf(EXPFORMAT, "Critical density now (g/cm^3):", ccritd); printf(FLTFORMAT, "Proper distance to z (Mpc):", pd); printf(FLTFORMAT, "Angular diameter distance to z (Mpc):", ad); printf(FLTFORMAT, "Tangential distance covered by 1 arcsec at z (Kpc):", ad*1000*M_PI/3600/180); printf(FLTFORMAT, "Luminosity distance to z (Mpc):", ld); printf(FLTFORMAT, "Distance modulus at z (no unit):", distmod); printf(FLTFORMAT, "Conversion to absolute magnitude (no unit):", absmagconv); printf("\n\n Universe at desired redshift z\n"); printf( " ------------------------------\n"); printf(FLTFORMAT, "Age of Universe at z (Gyr):", outage); printf(FLTFORMAT, "Look-back time to z (Gyr):", curage-outage); printf(EXPFORMAT, "Critical density at z (g/cm^3):", zcritd); printf("\n\n Comoving universe (time independent)\n"); printf( " ------------------------------------\n"); printf(FLTFORMAT, "Comoving volume over 4pi stradian to z (Mpc^3):", vz); } void cosmiccal(struct cosmiccalparams *p) { gal_list_i32_t *tmp; double curage, zage; /* If no redshift is given, just print the input parameters along with a notice that further calculations are only possible with a redshift and abort. */ if(isnan(p->redshift)) { cosmiccal_print_input(p); printf("\n\nPlease specify a redshift with the `--redshift' (or `-z') " "option.\n"); return; } /* In case the user just wants one number, only print that and return. */ if(p->specific) { for(tmp=p->specific;tmp!=NULL;tmp=tmp->next) switch(tmp->v) { case UI_KEY_AGENOW: printf("%f ", gal_cosmology_age(0.0f, p->H0, p->olambda, p->omatter, p->oradiation)); break; case UI_KEY_CRITICALDENSITYNOW: printf("%e ", gal_cosmology_critical_density(0.0f, p->H0, p->olambda, p->omatter, p->oradiation)); break; case UI_KEY_PROPERDISTANCE: printf("%f ", gal_cosmology_proper_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation)); break; case UI_KEY_ANGULARDIMDIST: printf("%f ", gal_cosmology_angular_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation)); break; case UI_KEY_ARCSECTANDIST: printf("%f ", ( gal_cosmology_angular_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation) * 1000 * M_PI / 3600 / 180 ) ); break; case UI_KEY_LUMINOSITYDIST: printf("%f ", gal_cosmology_luminosity_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation)); break; case UI_KEY_DISTANCEMODULUS: printf("%f ", gal_cosmology_distance_modulus(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation)); break; case UI_KEY_ABSMAGCONV: printf("%f ", gal_cosmology_to_absolute_mag(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation)); break; case UI_KEY_AGE: printf("%f ", gal_cosmology_age(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation)); break; case UI_KEY_LOOKBACKTIME: curage=gal_cosmology_age(0.0f, p->H0, p->olambda, p->omatter, p->oradiation); zage=gal_cosmology_age(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation); printf("%f ", curage-zage); break; case UI_KEY_CRITICALDENSITY: printf("%e ", gal_cosmology_critical_density(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation)); break; case UI_KEY_VOLUME: printf("%f ", gal_cosmology_comoving_volume(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation)); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code %d is not recognized as a " "single value calculation code", __func__, PACKAGE_BUGREPORT, tmp->v); } /* Print a new-line character to finish the output. */ printf("\n"); } else cosmiccal_printall(p); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/ui.c���������������������������������������������������������������������0000644�0001750�0001750�00000023640�13211076737�013443� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <gsl/gsl_const_mksa.h> #include <gnuastro/fits.h> #include <gnuastro/table.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = ""; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will do cosmological " "calculations. If no redshfit is specified, it will only print the main " "input parameters. If only a redshift is given, it will print a table of " "all calculations. If any of the single row calculations are requested, " "only their values will be printed with a single space between each.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct cosmiccalparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Program specific initializations. */ p->redshift = NAN; /* Modify the common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_OUTPUT: case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select specific options. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_QUIET: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_NUMTHREADS: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct cosmiccalparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: argp_error(state, "currently %s doesn't take any arguments", PROGRAM_NAME); break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } static void * ui_add_to_single_value(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { /* In case of printing the option values. */ if(lineno==-1) error(EXIT_FAILURE, 0, "currently the options to be printed in one row " "(like `--age', `--luminositydist', and etc) do not support " "printing with the `--printparams' (`-P'), or writing into " "configuration files due to lack of time when implementing " "these features. You can put them into configuration files " "manually. Please get in touch with us at `%s', so we can " "implement it", PACKAGE_BUGREPORT); /* If this option is given in a configuration file, then `arg' will not be NULL and we don't want to do anything if it is `0'. */ if(arg) { /* Make sure the value is only `0' or `1'. */ if( arg[1]!='\0' && *arg!='0' && *arg!='1' ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the `--%s' " "option takes no arguments. In a configuration " "file it can only have the values `1' or `0', " "indicating if it should be used or not", option->name); /* Only proceed if the (possibly given) argument is 1. */ if(arg[0]=='0' && arg[1]=='\0') return NULL; } /* Add this option to the print list and return. */ gal_list_i32_add(option->value, option->key); return NULL; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct cosmiccalparams *p) { double sum = p->olambda + p->omatter + p->oradiation; /* Check if the density fractions add up to 1 (within floating point error). */ if( sum > (1+1e-8) || sum < (1-1e-8) ) error(EXIT_FAILURE, 0, "sum of fractional densities is not 1, but %.8f. " "The cosmological constant (`olambda'), matter (`omatter') " "and radiation (`oradiation') densities are given as %.8f, %.8f, " "%.8f", sum, p->olambda, p->omatter, p->oradiation); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_preparations(struct cosmiccalparams *p) { /* The list is filled out in a first-in-last-out order. By the time control reaches here, the list is finalized. So we should just reverse it so the user gets values in the same order they requested them. */ gal_list_i32_reverse(&p->specific); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct cosmiccalparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } ������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/main.c�������������������������������������������������������������������0000644�0001750�0001750�00000003040�13174364642�013745� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" /* needs main.h. */ #include "cosmiccal.h" /* needs main.h. */ int main (int argc, char *argv[]) { struct cosmiccalparams p={{{0},0},0}; /* Get the starting time. */ time(&p.rawtime); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ cosmiccal(&p); /* Return successfully.*/ return EXIT_SUCCESS; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/Makefile.in��������������������������������������������������������������0000644�0001750�0001750�00000211414�13217217705�014723� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astcosmiccal$(EXEEXT) subdir = bin/cosmiccal ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astcosmiccal_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ cosmiccal.$(OBJEXT) astcosmiccal_OBJECTS = $(am_astcosmiccal_OBJECTS) astcosmiccal_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astcosmiccal_SOURCES) DIST_SOURCES = $(astcosmiccal_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astcosmiccal_LDADD = -lgnuastro astcosmiccal_SOURCES = main.c ui.c cosmiccal.c EXTRA_DIST = main.h authors-cite.h args.h ui.h cosmiccal.h dist_sysconf_DATA = astcosmiccal.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/cosmiccal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/cosmiccal/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astcosmiccal$(EXEEXT): $(astcosmiccal_OBJECTS) $(astcosmiccal_DEPENDENCIES) $(EXTRA_astcosmiccal_DEPENDENCIES) @rm -f astcosmiccal$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astcosmiccal_OBJECTS) $(astcosmiccal_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cosmiccal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/astcosmiccal.conf��������������������������������������������������������0000644�0001750�0001750�00000002661�13174462540�016175� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for CosmicCalculator. # CosmicCalculator is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astcosmiccal --help # Full list of options, short doc. # $ astcosmiccal -P # Print all options and used values. # $ info astcosmiccal # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Citation # ======== # # The current default cosmological values in CosmicCalculator are taken # from the Planck 2015 results (paper XIII, A&A 594, A13 (2016), Table 4, # page 31, last column: "TT,TE,EE+lowP+lensing+ext"). # # http://www.aanda.org/articles/aa/full_html/2016/10/aa25830-15/aa25830-15.html # # IMPORTANT NOTES: If you change these system-wide default values, please # change this comment and cite the source. # Input: H0 67.74 olambda 0.6911 omatter 0.3089 oradiation 0.0 # Output: �������������������������������������������������������������������������������gnuastro-0.5/bin/cosmiccal/Makefile.am��������������������������������������������������������������0000644�0001750�0001750�00000002610�13121462410�014673� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2016, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astcosmiccal astcosmiccal_LDADD = -lgnuastro astcosmiccal_SOURCES = main.c ui.c cosmiccal.c EXTRA_DIST = main.h authors-cite.h args.h ui.h cosmiccal.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astcosmiccal.conf ������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convolve/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220466�012627� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convolve/convolve.h����������������������������������������������������������������0000644�0001750�0001750�00000003522�13121462410�014544� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef CONVOLVE_H #define CONVOLVE_H #include <gnuastro/threads.h> #include <gsl/gsl_fft_complex.h> struct fftonthreadparams { /* Operating info: */ size_t id; /* The number of this thread. */ struct convolveparams *p; /* Pointer to main program structure. */ int forward1backwardn1; /* Operate on one or two images. */ size_t stride; /* 1D FFT on rows or columns? */ /* Pointers to GSL FFT structures: */ gsl_fft_complex_wavetable *ps0wave; gsl_fft_complex_wavetable *ps1wave; gsl_fft_complex_workspace *ps0work; gsl_fft_complex_workspace *ps1work; /* Thread parameters. */ size_t *indexs; /* Indexs to be used in this thread. */ pthread_barrier_t *b; /* Barrier to keep threads waiting. */ }; void convolve(struct convolveparams *p); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convolve/ui.h����������������������������������������������������������������������0000644�0001750�0001750�00000003753�13174462540�013350� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_MESH_GRID = GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Available letters for short options: a b e f g i j l n p s v w x y z A B E G J L O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_KERNEL = 'k', UI_KEY_KHDU = 'u', UI_KEY_MINSHARPSPEC = 'H', UI_KEY_CHECKFREQSTEPS = 'C', UI_KEY_TILESIZE = 't', UI_KEY_NUMCHANNELS = 'c', UI_KEY_REMAINDERFRAC = 'r', UI_KEY_DOMAIN = 'd', UI_KEY_MAKEKERNEL = 'm', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_NOKERNELFLIP = 1000, UI_KEY_NOKERNELNORM, UI_KEY_NOEDGECORRECTION, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct convolveparams *p); void ui_free_report(struct convolveparams *p, struct timeval *t1); #endif ���������������������gnuastro-0.5/bin/convolve/args.h��������������������������������������������������������������������0000644�0001750�0001750�00000010471�13121462410�013646� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Inputs */ { "kernel", UI_KEY_KERNEL, "STR", 0, "File name of kernel for convolution.", GAL_OPTIONS_GROUP_INPUT, &p->kernelname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "khdu", UI_KEY_KHDU, "STR", 0, "HDU containing the kernel.", GAL_OPTIONS_GROUP_INPUT, &p->khdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "nokernelflip", UI_KEY_NOKERNELFLIP, 0, 0, "Do not flip the kernel image.", GAL_OPTIONS_GROUP_INPUT, &p->nokernelflip, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "nokernelnorm", UI_KEY_NOKERNELNORM, 0, 0, "Do not normalize the kernel image.", GAL_OPTIONS_GROUP_INPUT, &p->nokernelnorm, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minsharpspec", UI_KEY_MINSHARPSPEC, "FLT", 0, "Deconvolution: min spectrum of sharp img.", GAL_OPTIONS_GROUP_INPUT, &p->minsharpspec, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Outputs */ { "checkfreqsteps", UI_KEY_CHECKFREQSTEPS, 0, 0, "View the steps in the frequency domain.", GAL_OPTIONS_GROUP_OUTPUT, &p->checkfreqsteps, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "noedgecorrection", UI_KEY_NOEDGECORRECTION, 0, 0, "Do not correct the edges in the spatial domain", GAL_OPTIONS_GROUP_OUTPUT, &p->noedgecorrection, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Operating mode. */ { "domain", UI_KEY_DOMAIN, "STR", 0, "Convolution domain: `spatial', `frequency'.", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->domainstr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "makekernel", UI_KEY_MAKEKERNEL, "INT", 0, "Make 2*INT kernel to create input image.", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->makekernel, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convolve/authors-cite.h������������������������������������������������������������0000644�0001750�0001750�00000002771�13211076737�015342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif �������gnuastro-0.5/bin/convolve/main.h��������������������������������������������������������������������0000644�0001750�0001750�00000006632�13121462410�013642� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Program names. */ #define PROGRAM_NAME "Convolve" /* Program full name. */ #define PROGRAM_EXEC "astconvolve" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Macros */ #define CONVFLOATINGPOINTERR 1e-10 /* Enumerators */ enum complex_to_real { COMPLEX_TO_REAL_INVALID, /* ==0 by C standard. */ COMPLEX_TO_REAL_SPEC, COMPLEX_TO_REAL_PHASE, COMPLEX_TO_REAL_REAL, }; enum domain_codes { CONVOLVE_DOMAIN_INVALID, /* ==0 by C standard. */ CONVOLVE_DOMAIN_SPATIAL, CONVOLVE_DOMAIN_FREQUENCY, }; /* Processing parameters structure */ struct convolveparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ char *filename; /* Name of input file. */ char *kernelname; /* File name of kernel. */ char *khdu; /* HDU of kernel. */ uint8_t nokernelflip; /* Do not flip the kernel. */ uint8_t nokernelnorm; /* Do not normalize the kernel. */ double minsharpspec; /* Deconvolution: min spect. of sharp img. */ uint8_t checkfreqsteps; /* View the frequency domain steps. */ char *domainstr; /* String value specifying domain. */ size_t makekernel; /* Make a kernel to create input. */ uint8_t noedgecorrection; /* Do not correct spatial edge effects. */ /* Internal */ int domain; /* Frequency or spatial domain conv. */ gal_data_t *input; /* Input image array. */ gal_data_t *kernel; /* Input Kernel array. */ double *pimg; /* Padded image array. */ double *pker; /* Padded kernel array. */ double *rpad; /* Real final image before removing pad'd. */ size_t ps0; /* Padded size along first C axis. */ size_t ps1; /* Padded size along second C axis. */ char *freqstepsname; /* Name of file to check frequency steps. */ time_t rawtime; /* Starting time of the program. */ }; #endif ������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convolve/convolve.c����������������������������������������������������������������0000644�0001750�0001750�00000056352�13151366335�014564� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gsl/gsl_errno.h> #include <gnuastro/wcs.h> #include <gnuastro/tile.h> #include <gnuastro/fits.h> #include <gnuastro/threads.h> #include <gnuastro/convolve.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "convolve.h" /******************************************************************/ /************* Complex numbers *****************/ /******************************************************************/ /* We have a complex (R+iI) array and we want to display it. But we can only do that either with the spectrum, or the phase: Spectrum: sqrt(R^2+I^2) Phase: arctan(I/R) */ void complextoreal(double *c, size_t size, int action, double **output) { double *out, *o, *of; /* Allocate the space for the real array. */ *output=out=gal_data_malloc_array(GAL_TYPE_FLOAT64, size, __func__, "output"); /* Fill the real array with the derived value from the complex array. */ of=(o=out)+size; switch(action) { case COMPLEX_TO_REAL_SPEC: do { *o++ = sqrt( *c**c + *(c+1)**(c+1) ); c+=2; } while(o<of); break; case COMPLEX_TO_REAL_PHASE: do { *o++ = atan2( *(c+1), *c ); c+=2; } while(o<of); break; case COMPLEX_TO_REAL_REAL: do { *o++ = *c; c+=2; } while(o<of); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "correct it. The `action' code %d is not recognized", __func__, PACKAGE_BUGREPORT, action); } } /* Multily two complex arrays and save the result in the first: (a+ib)*(c+id)=ac+iad+ibc-bd=(ac-bd)+i(ad-bc) The loop is easy to understand: we want to replace two variables. But changing one, will affect the other. So what we do, is to store the final value of one, then replace the second, then finally replace the first one. Here, we first get the real component but don't put it in the output. Then we find and replace the imaginary component, finally, we put the new real component in the image. */ void complexarraymultiply(double *a, double *b, size_t size) { double r, *af; af=a+2*size; do { r = (*a * *b) - (*(a+1) * *(b+1)); *(a+1) = (*(a+1) * *b) + (*a * *(b+1)); *a++=r; /* Go onto (set) the imaginary part of a. */ b+=2; } while(++a<af); /* Go onto the next complex number. */ } /* Divide the elements of the first array by the elements of the second array and put the result into the elements of the first array. (a+ib)/(c+id)=[(a+ib)*(c-id)]/[(c+id)*(c-id)] =(ac-iad+ibc+bd)/(c^2+d^2) =[(ac+bd)+i(bc-ad)]/(c^2+d^2) See the explanations above complexarraymultiply for an explanation on the loop. */ void complexarraydivide(double *a, double *b, size_t size, double minsharpspec) { double r, *af; af=a+2*size; do { if (sqrt(*b**b + *(b+1)**(b+1))>minsharpspec) { r = ( ( (*a * *b) + (*(a+1) * *(b+1)) ) / ( *b * *b + *(b+1) * *(b+1) ) ); *(a+1) = ( ( (*(a+1) * *b) - (*a * *(b+1)) ) / ( *b * *b + *(b+1) * *(b+1) ) ); *a=r; /* Just as a sanity check (the result should never be larger than one. */ if(sqrt(*a**a + *(a+1)**(a+1))>1.00001f) *a=*(a+1)=0.0f; } else { *a=0; *(a+1)=0; } a+=2; b+=2; } while(a<af); /* Go onto the next complex number. */ } /******************************************************************/ /************* Padding and initializing *****************/ /******************************************************************/ void frequency_make_padded_complex(struct convolveparams *p) { size_t i, ps0, ps1; double *o, *op, *pimg, *pker; size_t is0=p->input->dsize[0], is1=p->input->dsize[1]; size_t ks0=p->kernel->dsize[0], ks1=p->kernel->dsize[1]; float *f, *ff, *input=p->input->array, *kernel=p->kernel->array; /* Find the sizes of the padded image, note that since the kernel sizes are always odd, the extra padding on the input image is always going to be an even number (clearly divisable). */ ps0=p->ps0 = p->makekernel ? is0 : is0 + ks0 - 1; ps1=p->ps1 = p->makekernel ? is1 : is1 + ks1 - 1; /* The Discrete Fourier transforms operate faster on even-sized arrays. So if the padded sides are not even, make them so: */ if(ps0%2) ps0=p->ps0=ps0+1; if(ps1%2) ps1=p->ps1=ps1+1; /* Allocate the space for the padded input image and fill it. */ pimg=p->pimg=gal_data_malloc_array(GAL_TYPE_FLOAT64, 2*ps0*ps1, __func__, "pimg"); for(i=0;i<ps0;++i) { op=(o=pimg+i*2*ps1)+2*ps1; /* pimg is complex. */ if(i<is0) { ff=(f=input+i*is1)+is1; do {*o++=*f; *o++=0.0f;} while(++f<ff); } do *o++=0.0f; while(o<op); } /* Allocate the space for the padded Kernel and fill it. */ pker=p->pker=gal_data_malloc_array(GAL_TYPE_FLOAT64, 2*ps0*ps1, __func__, "pker"); for(i=0;i<ps0;++i) { op=(o=pker+i*2*ps1)+2*ps1; /* pker is complex. */ if(i<ks0) { ff=(f=kernel+i*ks1)+ks1; do {*o++=*f; *o++=0.0f;} while(++f<ff); } do *o++=0.0f; while(o<op); } } /* Remove the padding from the final convolved image and also correct for roundoff errors. NOTE: The padding to the input image (on the first axis for example) was `p->kernel->dsize[0]-1'. Since `p->kernel->dsize[0]' is always odd, the padding will always be even. */ void removepaddingcorrectroundoff(struct convolveparams *p) { size_t ps1=p->ps1; size_t *isize=p->input->dsize; float *o, *input=p->input->array; double *d, *df, *start, *rpad=p->rpad; size_t i, hi0, hi1, mkwidth=2*p->makekernel-1; /* Set all the necessary parameters to crop the desired region. hi0 and hi1 are the coordinates of the first pixel in the output image. In the case of deconvolution, if the maximum radius is larger than the input image, we will also only be using region that contains non-zero rows and columns.*/ if(p->makekernel) { hi0 = mkwidth < isize[0] ? p->ps0/2-p->makekernel : 0; hi1 = mkwidth < isize[1] ? p->ps1/2-p->makekernel : 0; isize[0] = mkwidth < isize[0] ? 2*p->makekernel-1 : isize[0]; isize[1] = mkwidth < isize[1] ? 2*p->makekernel-1 : isize[1]; } else { hi0 = ( p->kernel->dsize[0] - 1 )/2; hi1 = ( p->kernel->dsize[1] - 1 )/2; } /* To start with, `start' points to the first pixel in the final image: */ start=&rpad[hi0*ps1+hi1]; for(i=0;i<isize[0];++i) { o = &input[ i * isize[1] ]; df = ( d = start + i * ps1 ) + isize[1]; do *o++ = ( *d<-CONVFLOATINGPOINTERR || *d>CONVFLOATINGPOINTERR ) ? *d : 0.0f; while (++d<df); } } /* Allocate the necessary arrays, note that we put everything in the first element of the fftonthreadparams structure array. All the other elements will point to this one later. This structure will be given to threads to run two times with a fixed set of parameters, that is why we are doing this here to facilitate the job. */ void fftinitializer(struct convolveparams *p, struct fftonthreadparams **outfp) { size_t i; struct fftonthreadparams *fp; /* Allocate the fftonthreadparams array. */ errno=0; *outfp=fp=malloc(p->cp.numthreads*sizeof *fp); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for fp", __func__, p->cp.numthreads*sizeof *fp); /* Initialize the gsl_fft_wavetable structures (these are thread safe): */ fp[0].ps0wave=gsl_fft_complex_wavetable_alloc(p->ps0); fp[0].ps1wave=gsl_fft_complex_wavetable_alloc(p->ps1); /* Set the values for all the other threads: */ for(i=0;i<p->cp.numthreads;++i) { fp[i].p=p; fp[i].ps0wave=fp[0].ps0wave; fp[i].ps1wave=fp[0].ps1wave; fp[i].ps0work=gsl_fft_complex_workspace_alloc(p->ps0); fp[i].ps1work=gsl_fft_complex_workspace_alloc(p->ps1); } } void freefp(struct fftonthreadparams *fp) { size_t i; gsl_fft_complex_wavetable_free(fp[0].ps0wave); gsl_fft_complex_wavetable_free(fp[0].ps1wave); for(i=0;i<fp->p->cp.numthreads;++i) { gsl_fft_complex_workspace_free(fp[i].ps0work); gsl_fft_complex_workspace_free(fp[i].ps1work); } free(fp); } /* Unfortunately I don't understand why the division operation in deconvolution (makekernel) does not produce a centered image, the image is translated by half the input size in both dimensions. So I am correcting this in the spatial domain here. */ void correctdeconvolve(struct convolveparams *p, double **spatial) { double r, *s, *n, *d, *df, sum=0.0f; size_t i, j, ps0=p->ps0, ps1=p->ps1; int ii, jj, ci=p->ps0/2-1, cj=p->ps1/2-1; /* Check if the image has even sides. */ if(ps0%2 || ps1%2) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s. The padded " "image sides are not an even number", __func__, PACKAGE_BUGREPORT); /* First convert the complex image to a real image: */ complextoreal(p->pimg, ps0*ps1, COMPLEX_TO_REAL_SPEC, &s); /* Allocate the array to keep the new values */ errno=0; n=malloc(ps0*ps1*sizeof *n); if(n==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `n'", __func__, ps0*ps1*sizeof *n); /* Put the elements in their proper place: For example in one dimention where the values are actually the true distances: s[0]=0, s[1]=1, s[2]=2, s[3]=3, s[4]=4, s[5]=5 We want the value 0 to be in the `center'. Note that `s' is periodic, for example the next 6 elements have distances: s[6]=0, s[7]=1, s[8]=2, s[9]=3, s[10]=4, s[11]=5 So a `center'ed array would be like: s[0]=4, s[1]=5, s[2]=0, s[3]=1, s[4]=2, s[5]=3 The relations between the old (i and j) and new (ii and jj) come from something like the above line. */ for(i=0;i<ps0;++i) { ii= i>ps0/2 ? i-(ps0/2+1) : i+ps0/2-1; for(j=0;j<ps1;++j) { jj = j>ps1/2 ? j-(ps1/2+1) : j+ps1/2-1; r=sqrt( (ii-ci)*(ii-ci) + (jj-cj)*(jj-cj) ); sum += n[ii*ps1+jj] = r < p->makekernel ? s[i*ps1+j] : 0; /*printf("(%zu, %zu) --> (%zu, %zu)\n", i, j, ii, jj);*/ } } /* Divide all elements by the sum so the kernel is normalized: */ df=(d=n)+ps0*ps1; do *d++/=sum; while(d<df); /* Clean up: */ free(s); *spatial=n; } /******************************************************************/ /************* Frequency domain convolution *****************/ /******************************************************************/ /* The indexs array specifies the row or column numbers for this thread to work on. If forward1backwardn1 is one, then this is the forward transform, meaning that in convolution there are two images. If it is -1, then this is the final backward transform and there is only one image to run FFTW on and the values in indexs will always be smaller than p->s0 and p->s1. When there are two images, then the index numbers are going to be at most double p->s0 and p->s1. In this case, those index values which are smaller than p->s0 or p->s1 belong to the input image and those which are equal or larger than larger belong to the kernel image (after subtraction for p->s0 or p->s1).*/ void * onedimensionfft(void *inparam) { struct fftonthreadparams *fp = (struct fftonthreadparams *)inparam; struct convolveparams *p=fp->p; double *d, *df; size_t indmultip, maxindex; gsl_fft_complex_workspace *work; gsl_fft_complex_wavetable *wavetable; double *data, *pimg=p->pimg, *pker=p->pker; int forward1backwardn1=fp->forward1backwardn1; size_t i, size, stride=fp->stride, *indexs=fp->indexs; /* Set the number of points to transform, indmultip: The value to be multiplied by the value in indexs to specify the first pixel of the row or column. */ if(stride==1) { size=p->ps1; wavetable=fp->ps1wave; work=fp->ps1work; maxindex=p->ps0; indmultip=p->ps1; } else { size=p->ps0; wavetable=fp->ps0wave; work=fp->ps0work; maxindex=p->ps1; indmultip=1; } /* Go over all the rows or columns given for this thread. NOTE: The final array (after the two FFT'd arrays are multiplied by each other) is stored in p->pimg. So the check below works both in the forward and the backward transformation. */ for(i=0; indexs[i]!=GAL_BLANK_SIZE_T; ++i) { data = ( indexs[i]<maxindex ? &pimg[ 2*indexs[i]*indmultip ] /* *2 because complex. */ : &pker[ 2*(indexs[i]-maxindex)*indmultip ] ); gsl_fft_complex_transform(data, stride, size, wavetable, work, forward1backwardn1); /* Normalize in the backward transform: */ if(forward1backwardn1==-1) { df=(d=data)+2*size*stride; do {*d/=size; *(d+1)/=size; d+=2*stride;} while(d<df); } } /* Wait until all other threads finish. */ if(p->cp.numthreads>1) pthread_barrier_wait(fp->b); return NULL; } /* Do the forward Fast Fourier Transform either on two input images (the padded image and kernel) or on one image (the multiplication of the FFT of the two). In the second case, it is assumed that we are looking at the complex conjugate of the array so in practice this will be a backward transform. */ void twodimensionfft(struct convolveparams *p, struct fftonthreadparams *fp, int forward1backwardn1) { int err; pthread_t t; /* All thread ids saved in this, not used. */ pthread_attr_t attr; pthread_barrier_t b; size_t i, nb, *indexs, thrdcols; size_t nt=p->cp.numthreads, multiple=0; /* First we are going to get the 1D fourier transform on the rows of both images. */ if(forward1backwardn1==1) multiple=2; else if(forward1backwardn1==-1) multiple=1; else error(EXIT_FAILURE, 0, "%s: a bug! The value of the variable " "`forward1backwardn1' is %d not 1 or 2. Please contact us at %s " "so we can find the cause of the problem and fix it", __func__, forward1backwardn1, PACKAGE_BUGREPORT); /* ==================== */ /* 1D FFT on each row. */ /* ==================== */ gal_threads_dist_in_threads(multiple*p->ps0, nt, &indexs, &thrdcols); if(nt==1) { fp[0].stride=1; fp[0].indexs=&indexs[0]; fp[0].forward1backwardn1=forward1backwardn1; onedimensionfft(&fp[0]); } else { /* Initialize the attributes. Note that this running thread (that spinns off the nt threads) is also a thread, so the number the barrier should be one more than the number of threads spinned off. */ if( multiple*p->ps0 < nt ) nb=multiple*p->ps0+1; else nb=nt+1; gal_threads_attr_barrier_init(&attr, &b, nb); /* Spin off the threads: */ for(i=0;i<nt;++i) if(indexs[i*thrdcols]!=GAL_BLANK_SIZE_T) { fp[i].id=i; fp[i].b=&b; fp[i].stride=1; /* On each row, stride=1 */ fp[i].indexs=&indexs[i*thrdcols]; fp[i].forward1backwardn1=forward1backwardn1; err=pthread_create(&t, &attr, onedimensionfft, &fp[i]); if(err) error(EXIT_FAILURE, 0, "%s: can't create thread %zu for rows", __func__, i); } /* Wait for all threads to finish and free the spaces. */ pthread_barrier_wait(&b); pthread_attr_destroy(&attr); pthread_barrier_destroy(&b); } free(indexs); /* ====================== */ /* 1D FFT on each column. */ /* ====================== */ /* No comments, exact duplicate, except the p->ps1s! */ gal_threads_dist_in_threads(multiple*p->ps1, nt, &indexs, &thrdcols); if(nt==1) { fp[0].stride=p->ps1; fp[0].indexs=indexs; fp[0].forward1backwardn1=forward1backwardn1; onedimensionfft(&fp[0]); } else { if( multiple*p->ps1 < nt ) nb=multiple*p->ps1+1; else nb=nt+1; gal_threads_attr_barrier_init(&attr, &b, nb); for(i=0;i<nt;++i) if(indexs[i*thrdcols]!=GAL_BLANK_SIZE_T) { fp[i].b=&b; fp[i].stride=p->ps1; /* On each column, stride is p->ps1 */ fp[i].indexs=&indexs[i*thrdcols]; fp[i].forward1backwardn1=forward1backwardn1; err=pthread_create(&t, &attr, onedimensionfft, &fp[i]); if(err) error(EXIT_FAILURE, 0, "%s: can't create thread %zu for columns", __func__, i); } pthread_barrier_wait(&b); pthread_attr_destroy(&attr); pthread_barrier_destroy(&b); } free(indexs); } void convolve_frequency(struct convolveparams *p) { double *tmp; size_t dsize[2]; struct timeval t1; gal_data_t *data=NULL; struct fftonthreadparams *fp; /* Make the padded arrays. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); frequency_make_padded_complex(p); if(!p->cp.quiet) gal_timing_report(&t1, "Input and Kernel images padded.", 1); if(p->checkfreqsteps) { /* Prepare the data structure for viewing the steps, note that we don't need the array that is initially made. */ dsize[0]=p->ps0; dsize[1]=p->ps1; data=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, dsize, NULL, 0, p->cp.minmapsize, NULL, NULL, NULL); free(data->array); /* Save the padded input image. */ complextoreal(p->pimg, p->ps0*p->ps1, COMPLEX_TO_REAL_REAL, &tmp); data->array=tmp; data->name="input padded"; gal_fits_img_write(data, p->freqstepsname, NULL, PROGRAM_NAME); free(tmp); data->name=NULL; /* Save the padded kernel image. */ complextoreal(p->pker, p->ps0*p->ps1, COMPLEX_TO_REAL_REAL, &tmp); data->array=tmp; data->name="kernel padded"; gal_fits_img_write(data, p->freqstepsname, NULL, PROGRAM_NAME); free(tmp); data->name=NULL; } /* Initialize the structures: */ fftinitializer(p, &fp); /* Forward 2D FFT on each image. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); twodimensionfft(p, fp, 1); if(!p->cp.quiet) gal_timing_report(&t1, "Images converted to frequency domain.", 1); if(p->checkfreqsteps) { complextoreal(p->pimg, p->ps0*p->ps1, COMPLEX_TO_REAL_SPEC, &tmp); data->array=tmp; data->name="input transformed"; gal_fits_img_write(data, p->freqstepsname, NULL, PROGRAM_NAME); free(tmp); data->name=NULL; complextoreal(p->pker, p->ps0*p->ps1, COMPLEX_TO_REAL_SPEC, &tmp); data->array=tmp; data->name="kernel transformed"; gal_fits_img_write(data, p->freqstepsname, NULL, PROGRAM_NAME); free(tmp); data->name=NULL; } /* Multiply or divide the two arrays and save them in the output.*/ if(!p->cp.quiet) gettimeofday(&t1, NULL); if(p->makekernel) { complexarraydivide(p->pimg, p->pker, p->ps0*p->ps1, p->minsharpspec); if(!p->cp.quiet) gal_timing_report(&t1, "Divided in the frequency domain.", 1); } else { complexarraymultiply(p->pimg, p->pker, p->ps0*p->ps1); if(!p->cp.quiet) gal_timing_report(&t1, "Multiplied in the frequency domain.", 1); } if(p->checkfreqsteps) { complextoreal(p->pimg, p->ps0*p->ps1, COMPLEX_TO_REAL_SPEC, &tmp); data->array=tmp; data->name=p->makekernel ? "Divided" : "Multiplied"; gal_fits_img_write(data, p->freqstepsname, NULL, PROGRAM_NAME); free(tmp); data->name=NULL; } /* Forward (in practice inverse) 2D FFT on each image. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); twodimensionfft(p, fp, -1); if(p->makekernel) correctdeconvolve(p, &p->rpad); else complextoreal(p->pimg, p->ps0*p->ps1, COMPLEX_TO_REAL_REAL, &p->rpad); if(!p->cp.quiet) gal_timing_report(&t1, "Converted back to the spatial domain.", 1); if(p->checkfreqsteps) { data->array=p->rpad; data->name="padded output"; gal_fits_img_write(data, p->freqstepsname, NULL, PROGRAM_NAME); data->name=NULL; data->array=NULL; } /* Free the padded arrays (they are no longer needed) and put the converted array (that is real, not complex) in p->pimg. */ gal_data_free(data); free(p->pimg); free(p->pker); /* Crop out the center, numbers smaller than 10^{-17} are errors, remove them. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); removepaddingcorrectroundoff(p); if(!p->cp.quiet) gal_timing_report(&t1, "Padded parts removed.", 1); /* Free all the allocated space. */ freefp(fp); } /******************************************************************/ /************* Outside function *****************/ /******************************************************************/ void convolve(struct convolveparams *p) { gal_data_t *out, *check; struct gal_options_common_params *cp=&p->cp; /* Do the convolution. */ if(p->domain==CONVOLVE_DOMAIN_SPATIAL) { /* Prepare the mesh structure. */ gal_tile_full_two_layers(p->input, &cp->tl); /* Save the tile IDs if they are requested. */ if(cp->tl.tilecheckname) { check=gal_tile_block_check_tiles(cp->tl.tiles); gal_fits_img_write(check, cp->tl.tilecheckname, NULL, PROGRAM_NAME); gal_data_free(check); } /* Do the spatial convolution. One of the main reason someone would want to do spatial domain convolution with this Convolve program is edge correction. So by default we assume it and will only ignore it if the user asks.*/ out=gal_convolve_spatial(cp->tl.tiles, p->kernel, cp->numthreads, !p->noedgecorrection, cp->tl.workoverch); /* Clean up: free the actual input and replace it's pointer with the convolved dataset to save as output. */ gal_tile_full_free_contents(&cp->tl); gal_data_free(p->input); p->input=out; } else convolve_frequency(p); /* Save the output (which is in p->input) array. */ gal_fits_img_write_to_type(p->input, cp->output, NULL, PROGRAM_NAME, cp->type); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convolve/ui.c����������������������������������������������������������������������0000644�0001750�0001750�00000041556�13216276304�013344� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <gnuastro/wcs.h> #include <gnuastro/fits.h> #include <gnuastro/tile.h> #include <gnuastro/blank.h> #include <gnuastro/table.h> #include <gnuastro/threads.h> #include <gnuastro/arithmetic.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will convolve an input " "image with a given spatial kernel (image) in the spatial domain (no " "edge effects) or frequency domain. The latter suffers from edge effects, " "but can be much faster.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct convolveparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Set the mandatory common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_TABLEFORMAT: case GAL_OPTIONS_KEY_INTERPNUMNGB: case GAL_OPTIONS_KEY_INTERPONLYBLANK: cp->coptions[i].flags=OPTION_HIDDEN; break; } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct convolveparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: if(p->filename) argp_error(state, "only one argument (input file) should be given"); else p->filename=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ static void ui_read_check_only_options(struct convolveparams *p) { struct gal_options_common_params *cp=&p->cp; /* Make sure the kernel name is a FITS file and a HDU is given. */ if( gal_fits_name_is_fits(p->kernelname)==0 ) error(EXIT_FAILURE, 0, "`%s' is not a recognized FITS file name", p->kernelname); /* Read the domain from a string into an integer. */ if( !strcmp("spatial", p->domainstr) ) p->domain=CONVOLVE_DOMAIN_SPATIAL; else if( !strcmp("frequency", p->domainstr) ) p->domain=CONVOLVE_DOMAIN_FREQUENCY; else error(EXIT_FAILURE, 0, "domain value `%s' not recognized. Please use " "either `spatial' or `frequency'", p->domainstr); /* If we are in the spatial domain, make sure that the necessary parameters are set. */ if( p->domain==CONVOLVE_DOMAIN_SPATIAL ) if( cp->tl.tilesize==NULL || cp->tl.numchannels==NULL ) { if( cp->tl.tilesize==NULL && cp->tl.numchannels==NULL ) error(EXIT_FAILURE, 0, "in spatial convolution, `--numchannels' " "and `--tilesize' are mandatory"); else error(EXIT_FAILURE, 0, "in spatial convolution, `--%s' is " "mandatory: you should use it to set the %s", cp->tl.tilesize ? "numchannels" : "tilesize", ( cp->tl.tilesize ? "number of channels along each dimension of the input" : "size of tiles to cover the input along each " "dimension" ) ); } } static void ui_check_options_and_arguments(struct convolveparams *p) { /* Make sure an input file name was given and if it was a FITS file, that a HDU is also given. */ if(p->filename==NULL) error(EXIT_FAILURE, 0, "no input file is specified"); /* Make sure the input name is a FITS file name. */ if( gal_fits_name_is_fits(p->filename)==0 ) error(EXIT_FAILURE, 0, "`%s' is not a recognized FITS file name", p->filename); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ /* Read the kernel. VERY IMPORTANT: We can't use the `fits_img_read_kernel' because the Convolve program also does de-convolution. */ static void ui_read_kernel(struct convolveparams *p) { float *f, *ff; /* Read the image into file. */ p->kernel = gal_fits_img_read_to_type(p->kernelname, p->khdu, GAL_TYPE_FLOAT32, p->cp.minmapsize, 0, 0); if(p->kernel->wcs) { wcsfree(p->kernel->wcs); p->kernel->wcs=NULL; } /* Convert all the NaN pixels to zero if the kernel contains blank pixels, also update the flags so it is not checked any more. */ if(gal_blank_present(p->kernel, 1)) { ff = (f=p->kernel->array) + p->kernel->size; do *f = isnan(*f) ? 0.0f : *f; while(++f<ff); p->kernel->flag |= GAL_DATA_FLAG_BLANK_CH; p->kernel->flag &= ~GAL_DATA_FLAG_HASBLANK; } } static void ui_preparations(struct convolveparams *p) { size_t i, size; gal_data_t *sum; float *kernel, tmp; struct gal_options_common_params *cp=&p->cp; char *outsuffix = p->makekernel ? "_kernel.fits" : "_convolved.fits"; /* Set the output name if the user hasn't set it. */ if(cp->output==NULL) cp->output=gal_checkset_automatic_output(cp, p->filename, outsuffix); gal_checkset_writable_remove(cp->output, 0, cp->dontdelete); if(p->checkfreqsteps) { p->freqstepsname=gal_checkset_automatic_output(cp, p->filename, "_freqsteps.fits"); gal_checkset_writable_remove(p->freqstepsname, 0, cp->dontdelete); } if(cp->tl.checktiles) { cp->tl.tilecheckname=gal_checkset_automatic_output(cp, p->filename, "_tiled.fits"); gal_checkset_writable_remove(cp->tl.tilecheckname, 0, cp->dontdelete); } /* Read the input image as a float64 array. */ p->input=gal_fits_img_read_to_type(p->filename, cp->hdu, GAL_TYPE_FLOAT32, cp->minmapsize, 0, 0); /* Currently Convolve only works on 2D images. */ if(p->input->ndim!=2) error(EXIT_FAILURE, 0, "%s (hdu %s) has %zu dimensions. Currently " "Convolve only operates on 2D images", p->filename, cp->hdu, p->input->ndim); /* See if there are any blank values. */ if(p->domain==CONVOLVE_DOMAIN_FREQUENCY) { if( gal_blank_present(p->input, 1) ) fprintf(stderr, "\n----------------------------------------\n" "######## %s WARNING ########\n" "There are blank pixels in `%s' (hdu: `%s') and you have " "asked for frequency domain convolution. As a result, all " "the pixels in the output (`%s') will be blank. Only " "spatial domain convolution can account for blank pixels " "in the input data. You can run %s again with " "`--domain=spatial'\n" "----------------------------------------\n\n", PROGRAM_NAME, p->filename, cp->hdu, cp->output, PROGRAM_NAME); } else gal_tile_full_sanity_check(p->filename, cp->hdu, p->input, &cp->tl); /* Read the file specified by --kernel. If makekernel is specified, then this is actually the sharper image and the input image (given as an argument) is the blurry image. */ if(p->makekernel) { /* Read in the kernel array. */ ui_read_kernel(p); /* Make sure the size of the kernel is the same as the input */ if( p->input->dsize[0]!=p->kernel->dsize[0] || p->input->dsize[1]!=p->kernel->dsize[1] ) error(EXIT_FAILURE, 0, "with the `--makekernel' (`-m') option, " "the input image and the image specified with the `--kernel' " "(`-k') option should have the same size. The lower resolution " "input image (%s) has %zux%zu pixels while the sharper image " "(%s) specified with the kernel option has %zux%zu pixels", p->filename, p->input->dsize[1], p->input->dsize[0], p->kernelname, p->kernel->dsize[1], p->kernel->dsize[0]); /* Divide both images by their sum so their lowest frequency becomes 1 and their division (in the frequency domain) would be meaningful. */ sum=gal_statistics_sum(p->input); sum=gal_data_copy_to_new_type_free(sum, GAL_TYPE_FLOAT32); p->input = gal_arithmetic(GAL_ARITHMETIC_OP_DIVIDE, GAL_ARITHMETIC_FLAGS_ALL, p->input, sum); sum=gal_statistics_sum(p->kernel); sum=gal_data_copy_to_new_type_free(sum, GAL_TYPE_FLOAT32); p->kernel = gal_arithmetic(GAL_ARITHMETIC_OP_DIVIDE, GAL_ARITHMETIC_FLAGS_ALL, p->kernel, sum); } /* Read the kernel. If there is anything particular to Convolve, then don't use the standard kernel reading function in fits.c. Otherwise just use the same one that all programs use. The standard one is faster because it mixes the NaN conversion and also the normalization into one loop. */ else { if(p->nokernelnorm || p->nokernelflip) { /* Read in the kernel array: */ ui_read_kernel(p); /* Check its size (must be odd). */ if(p->kernel->dsize[0]%2==0 || p->kernel->dsize[1]%2==0) error(EXIT_FAILURE, 0, "the kernel image has to have an odd " "number of pixels on both sides (there has to be on pixel " "in the center). %s (hdu: %s) is %zu by %zu", p->kernelname, p->khdu, p->kernel->dsize[1], p->kernel->dsize[0]); /* Normalize the kernel: */ if( !p->nokernelnorm ) { sum=gal_statistics_sum(p->kernel); p->kernel = gal_arithmetic(GAL_ARITHMETIC_OP_DIVIDE, GAL_ARITHMETIC_FLAGS_ALL, p->kernel, sum); } /* Flip the kernel: */ if( !p->nokernelflip ) { size=p->kernel->size; kernel=p->kernel->array; for(i=0;i<p->kernel->size/2;++i) { tmp = kernel[ i ]; kernel[ i ] = kernel[ size - i - 1 ]; kernel[ size - i - 1 ] = tmp; } } } else p->kernel = gal_fits_img_read_kernel(p->kernelname, p->khdu, cp->minmapsize); } } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ static void ui_print_intro(struct convolveparams *p) { printf("%s started on %s", PROGRAM_NAME, ctime(&p->rawtime)); printf(" - Using %zu CPU threads.\n", p->cp.numthreads); printf(" - Input: %s (hdu: %s)\n", p->filename, p->cp.hdu); printf(" - Kernel: %s (hdu: %s)\n", p->kernelname, p->khdu); } void ui_read_check_inputs_setup(int argc, char *argv[], struct convolveparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Do a sanity check only on options. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Everything is ready, print the intro if not in quiet mode. */ if(!p->cp.quiet) ui_print_intro(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct convolveparams *p, struct timeval *t1) { /* Free the allocated arrays: */ free(p->khdu); free(p->cp.hdu); free(p->cp.output); gal_data_free(p->input); gal_data_free(p->kernel); /* Print the final message. */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } ��������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convolve/main.c��������������������������������������������������������������������0000644�0001750�0001750�00000003127�13121462410�013631� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "convolve.h" #include "ui.h" /* Needs convolveparams in main.h */ int main(int argc, char *argv[]) { struct timeval t1; struct convolveparams p={{{0},0},0}; /* Set the starting time.*/ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Image Crop */ convolve(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully. */ return EXIT_SUCCESS; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convolve/Makefile.in���������������������������������������������������������������0000644�0001750�0001750�00000211364�13217217705�014625� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astconvolve$(EXEEXT) subdir = bin/convolve ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astconvolve_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ convolve.$(OBJEXT) astconvolve_OBJECTS = $(am_astconvolve_OBJECTS) astconvolve_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astconvolve_SOURCES) DIST_SOURCES = $(astconvolve_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astconvolve_LDADD = -lgnuastro astconvolve_SOURCES = main.c ui.c convolve.c EXTRA_DIST = main.h authors-cite.h args.h ui.h convolve.h dist_sysconf_DATA = astconvolve.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/convolve/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/convolve/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astconvolve$(EXEEXT): $(astconvolve_OBJECTS) $(astconvolve_DEPENDENCIES) $(EXTRA_astconvolve_DEPENDENCIES) @rm -f astconvolve$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astconvolve_OBJECTS) $(astconvolve_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolve.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convolve/astconvolve.conf����������������������������������������������������������0000644�0001750�0001750�00000002067�13142046003�015754� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for Convolve. # Convolve is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astconvolve --help # Full list of options, short doc. # $ astconvolve -P # Print all options and used values. # $ info astconvolve # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: kernel kernel.fits khdu 1 # Output: type float32 # Operating mode: domain frequency minsharpspec 0.005 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convolve/Makefile.am���������������������������������������������������������������0000644�0001750�0001750�00000002602�13121462410�014572� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astconvolve astconvolve_LDADD = -lgnuastro astconvolve_SOURCES = main.c ui.c convolve.c EXTRA_DIST = main.h authors-cite.h args.h ui.h convolve.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astconvolve.conf ������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220466�012640� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/jpeg.h��������������������������������������������������������������������0000644�0001750�0001750�00000002310�13121462410�013641� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef JPEG_H #define JPEG_H int nameisjpeg(char *name); int nameisjpegsuffix(char *name); size_t jpeg_read_to_ll(char *filename, gal_data_t **list, size_t minmapsize); void jpeg_write(struct converttparams *p); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/eps.h���������������������������������������������������������������������0000644�0001750�0001750�00000002275�13121462410�013515� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef EPS_H #define EPS_H int nameiseps(char *name); int nameisepssuffix(char *name); int nameispdf(char *name); int nameispdfsuffix(char *name); void eps_write_eps_or_pdf(struct converttparams *p); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/convertt.h����������������������������������������������������������������0000644�0001750�0001750�00000002077�12616616510�014604� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef CONVERTT_H #define CONVERTT_H void convertt(struct converttparams *p); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/ui.h����������������������������������������������������������������������0000644�0001750�0001750�00000004031�13174462540�013347� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Option groups particular to this program */ enum program_args_groups { UI_GROUP_FLUX = GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Available letters for short options: a d e f g j k l n p r s t v y z E G J O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_QUALITY = 'u', UI_KEY_WIDTHINCM = 'w', UI_KEY_BORDERWIDTH = 'b', UI_KEY_HEX = 'x', UI_KEY_FLUXLOW = 'L', UI_KEY_FLUXHIGH = 'H', UI_KEY_MAXBYTE = 'm', UI_KEY_FLMINBYTE = 'A', UI_KEY_FHMAXBYTE = 'B', UI_KEY_CHANGE = 'c', UI_KEY_CHANGEAFTERTRUNC = 'C', UI_KEY_INVERT = 'i', /* Only with long version (start with a value 1000, the rest will be set automatically). */ }; void ui_read_check_inputs_setup(int argc, char *argv[], struct converttparams *p); void ui_free_report(struct converttparams *p); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/args.h��������������������������������������������������������������������0000644�0001750�0001750�00000012100�13174462540�013662� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Output */ { "quality", UI_KEY_QUALITY, "INT", 0, "Quality of output JPEG image (1 to 100).", GAL_OPTIONS_GROUP_OUTPUT, &p->quality, GAL_TYPE_UINT8, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "widthincm", UI_KEY_WIDTHINCM, "FLT", 0, "Width in units of centimeters.", GAL_OPTIONS_GROUP_OUTPUT, &p->widthincm, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "borderwidth", UI_KEY_BORDERWIDTH, "INT", 0, "EPS/PDF border width in units of 1/72 inch.", GAL_OPTIONS_GROUP_OUTPUT, &p->borderwidth, GAL_TYPE_UINT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "hex", UI_KEY_HEX, 0, 0, "Hexadecimal encoding in EPS. Default: ASCII85.", GAL_OPTIONS_GROUP_OUTPUT, &p->hex, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Flux:", UI_GROUP_FLUX }, { "fluxlow", UI_KEY_FLUXLOW, "FLT", 0, "Lower flux truncation value.", UI_GROUP_FLUX, &p->fluxlowstr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fluxhigh", UI_KEY_FLUXHIGH, "FLT", 0, "Higher flux truncation value.", UI_GROUP_FLUX, &p->fluxhighstr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "maxbyte", UI_KEY_MAXBYTE, "INT", 0, "Maximum byte value for all color channels.", UI_GROUP_FLUX, &p->maxbyte, GAL_TYPE_UINT8, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "flminbyte", UI_KEY_FLMINBYTE, 0, 0, "Set value of fluxlow as the minimum byte value.", UI_GROUP_FLUX, &p->flminbyte, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fhmaxbyte", UI_KEY_FHMAXBYTE, 0, 0, "Set value of fluxhigh as the maximum byte value.", UI_GROUP_FLUX, &p->fhmaxbyte, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "change", UI_KEY_CHANGE, "STR", 0, "Change pixel values `from_1:to_1,from_2:to_2`.", UI_GROUP_FLUX, &p->changestr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "changeaftertrunc", UI_KEY_CHANGEAFTERTRUNC, 0, 0, "First truncate then change pixel values.", UI_GROUP_FLUX, &p->changeaftertrunc, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "invert", UI_KEY_INVERT, 0, 0, "Invert the values in JPEG and EPS/PDF.", UI_GROUP_FLUX, &p->invert, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/authors-cite.h������������������������������������������������������������0000644�0001750�0001750�00000002776�13211076737�015360� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif ��gnuastro-0.5/bin/convertt/main.h��������������������������������������������������������������������0000644�0001750�0001750�00000006615�13121462410�013654� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "ConvertType" /* Program full name. */ #define PROGRAM_EXEC "astconvertt" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Constants/macros. */ #define BLANK_CHANNEL_NAME "blank" enum output_formats { OUT_FORMAT_INVALID, /* ==0 by C standard */ OUT_FORMAT_TXT, OUT_FORMAT_EPS, OUT_FORMAT_PDF, OUT_FORMAT_FITS, OUT_FORMAT_JPEG, }; /* This is used in converting certain values in the array. */ struct change { gal_data_t *from; gal_data_t *to; struct change *next; }; struct converttparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_list_str_t *inputnames; /* The names of input files. */ gal_list_str_t *hdus; /* The names of input hdus. */ uint8_t quality; /* Quality of JPEG image. */ float widthincm; /* Width in centimeters. */ uint32_t borderwidth; /* Width of border in PostScript points. */ uint8_t hex; /* Use hexadecimal not ASCII85 encoding. */ char *fluxlowstr; /* Lower flux truncation value. */ char *fluxhighstr; /* Higher flux truncation value. */ uint8_t maxbyte; /* Maximum byte value. */ uint8_t flminbyte; /* fluxlow is minimum byte. */ uint8_t fhmaxbyte; /* fluxhigh is maximum byte. */ char *changestr; /* String of change values. */ uint8_t changeaftertrunc; /* First convert, then truncate. */ uint8_t invert; /* ==1: invert the output image. */ /* Internal */ struct change *change; /* The value conversion string. */ gal_data_t *fluxlow; /* The lower flux truncation. */ gal_data_t *fluxhigh; /* The higher flux truncation. */ time_t rawtime; /* Starting time of the program. */ int outformat; /* The format of the output file. */ size_t numch; /* Current Channel. */ gal_data_t *chll; /* Linked list of color channels. */ }; #endif �������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/jpeg.c��������������������������������������������������������������������0000644�0001750�0001750�00000024407�13121462410�013647� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <setjmp.h> #include <string.h> #ifdef HAVE_LIBJPEG #include <jpeglib.h> #endif #include <gnuastro/list.h> #include <gnuastro/fits.h> #include "main.h" #include "jpeg.h" /************************************************************* ************** Acceptable JPEG names ************** *************************************************************/ int nameisjpeg(char *name) { size_t len; len=strlen(name); if ( ( len>=3 && strcmp(&name[len-3], "jpg") == 0 ) || ( len>=3 && strcmp(&name[len-3], "JPG") == 0 ) || ( len>=4 && strcmp(&name[len-4], "jpeg") == 0 ) || ( len>=4 && strcmp(&name[len-4], "JPEG") == 0 ) || ( len>=3 && strcmp(&name[len-3], "jpe") == 0 ) || ( len>=3 && strcmp(&name[len-3], "jif") == 0 ) || ( len>=4 && strcmp(&name[len-4], "jfif") == 0 ) || ( len>=3 && strcmp(&name[len-3], "jfi") == 0 ) ) return 1; else return 0; } int nameisjpegsuffix(char *name) { if (strcmp(name, "jpg") == 0 || strcmp(name, ".jpg") == 0 || strcmp(name, "JPG") == 0 || strcmp(name, ".JPG") == 0 || strcmp(name, "jpeg") == 0 || strcmp(name, ".jpeg") == 0 || strcmp(name, "JPEG") == 0 || strcmp(name, ".JPEG") == 0 || strcmp(name, "jpe") == 0 || strcmp(name, ".jpe") == 0 || strcmp(name, "jif") == 0 || strcmp(name, ".jif") == 0 || strcmp(name, "jfif") == 0 || strcmp(name, ".jfif") == 0 || strcmp(name, "jfi") == 0 || strcmp(name, ".jfi") == 0) return 1; else return 0; } #ifdef HAVE_LIBJPEG /************************************************************* ************** Read a JPEG image ************** *************************************************************/ /* Read the example.c in libjpeg's source code to understand the details of what is going on here. */ struct my_error_mgr { struct jpeg_error_mgr pub; /* "public" fields */ jmp_buf setjmp_buffer; /* for return to caller */ }; typedef struct my_error_mgr *my_error_ptr; METHODDEF(void) jpeg_error_exit(j_common_ptr cinfo) { /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */ my_error_ptr myerr = (my_error_ptr) cinfo->err; /* Always display the message. */ /* We could postpone this until after returning, if we chose. */ (*cinfo->err->output_message) (cinfo); /* Return control to the setjmp point */ longjmp(myerr->setjmp_buffer, 1); } void makejsample(JSAMPLE **a, size_t size) { JSAMPLE *jsarr; if(sizeof *jsarr!=1) { printf("\n\nJSAMPLE has to be unsigned char!\n\n"); exit(EXIT_FAILURE); } errno=0; jsarr=malloc(size*sizeof *jsarr); if(jsarr==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for jsarr", __func__, size*sizeof *jsarr); *a=jsarr; } unsigned char ** readjpg(char *inname, size_t *outs0, size_t *outs1, size_t *numcolors) { FILE * infile; JSAMPROW jrow; JSAMPLE *jsamp; int rowstride, c; JSAMPARRAY jsarr; unsigned char **all; struct my_error_mgr jerr; size_t i, j, size, nc, s0, s1; struct jpeg_decompress_struct cinfo; /* Open the input file */ errno=0; if ((infile = fopen(inname, "rb")) == NULL) error(EXIT_FAILURE, errno, "%s", inname); /* Set up the error and decompressing (reading) functions. */ cinfo.err = jpeg_std_error(&jerr.pub); jerr.pub.error_exit = jpeg_error_exit; if (setjmp(jerr.setjmp_buffer)) { jpeg_destroy_decompress(&cinfo); fclose(infile); error(EXIT_FAILURE, 0, "%s: problem in reading %s", __func__, inname); } jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, infile); /* Read the JPEG header information and start de-compressing: */ jpeg_read_header(&cinfo, TRUE); jpeg_start_decompress(&cinfo); /* Get the array width and height and number of color channels: */ s0=*outs0=cinfo.output_height; s1=*outs1=cinfo.output_width; size=s0*s1; nc=*numcolors=cinfo.output_components; rowstride=s1*nc; makejsample(&jsamp, size*nc); /* Allocate all the arrays for each color: */ errno=0; all=malloc(nc*sizeof *all); if(all==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `all'", __func__, nc*sizeof *all); for(i=0;i<nc;++i) { errno=0; all[i]=malloc(s0*s1*sizeof *all[i]); if(all[i]==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `all[%zu]'", __func__, s0*s1*sizeof *all[i], i); } /* Read the image line by line: */ c=s0-1; while (cinfo.output_scanline < cinfo.output_height) { jrow=&jsamp[c-- * rowstride]; jsarr=&jrow; jpeg_read_scanlines(&cinfo, jsarr, 1); } /* Put the different colors into the different arrays */ for(i=0;i<size;++i) for(j=0;j<nc;++j) all[j][i]=jsamp[i*nc+j]; /* Finish decompression, destroy it and close file: */ jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); fclose(infile); free(jsamp); return all; } /* Read each color channel of a JPEG image as a separate array and put them in a linked list of data-structures. */ size_t jpeg_read_to_ll(char *filename, gal_data_t **list, size_t minmapsize) { char *name; size_t ndim=2, dsize[2]; unsigned char **allcolors; size_t i, s0, s1, numcolors; /* Read the JPEG image into the all array. */ allcolors=readjpg(filename, &s0, &s1, &numcolors); /* Add the arrays to the linked list. */ for(i=0;i<numcolors;++i) { dsize[0]=s0; dsize[1]=s1; asprintf(&name, "JPEG_CH_%zu", i+1); gal_list_data_add_alloc(list, allcolors[i], GAL_TYPE_UINT8, ndim, dsize, NULL, 0, minmapsize, name, NULL, NULL); free(name); } /* Free the array keeping the pointers to each channel. Note that each channel was allocated separately and goes out of this function with the data structure, so we just have to free the outer array that kept all the channels. */ free(allcolors); /* Return the number of color channels. */ return numcolors; } /************************************************************* ************** Write a JPEG image ************** *************************************************************/ static void jpeg_write_array(JSAMPLE *jsr, struct converttparams *p) { JSAMPROW r[1]; FILE * outfile; int row_stride=0, c; struct jpeg_error_mgr jerr; size_t *dsize=p->chll->dsize; struct jpeg_compress_struct cinfo; /* Begin the JPEG writing, following libjpeg's example.c */ cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); errno=0; if ((outfile = fopen(p->cp.output, "wb")) == NULL) error(EXIT_FAILURE, errno, "%s", p->cp.output); jpeg_stdio_dest(&cinfo, outfile); cinfo.image_width = dsize[1]; cinfo.image_height = dsize[0]; switch(p->numch) { case 1: row_stride=dsize[1]; cinfo.input_components = 1; cinfo.in_color_space = JCS_GRAYSCALE; break; case 3: row_stride=3*dsize[1]; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; break; case 4: row_stride=4*dsize[1]; cinfo.input_components = 4; cinfo.in_color_space = JCS_CMYK; break; default: error(EXIT_FAILURE, 0, "%s: a bug! The number of channels is not 1, 3 " "or 4, but %zu. This should not happen. Please contact us so we " "can fix the problem", __func__, p->numch); } jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo, p->quality, TRUE); cinfo.density_unit=1; cinfo.Y_density=cinfo.X_density=dsize[1]/(p->widthincm/2.54); jpeg_start_compress(&cinfo, TRUE); /* cinfo.next_scanline is 'unsigned int' */ c=dsize[0]-1; /* In JPEG the first row is on the bottom! */ while (cinfo.next_scanline < cinfo.image_height) { r[0] = & jsr[c-- * row_stride]; (void) jpeg_write_scanlines(&cinfo, r, 1); } jpeg_finish_compress(&cinfo); fclose(outfile); jpeg_destroy_compress(&cinfo); } void jpeg_write(struct converttparams *p) { JSAMPLE *jsr; gal_data_t *channel; unsigned char *colors[4]; size_t i, pixel, color, numch=p->numch; /* A small sanity check */ if(p->numch==2 || p->numch>4) error(EXIT_FAILURE, 0, "%s: only 1, 3, and 4 color channels are " "acceptable", __func__); /* Make sure the JSAMPLE is 8bits, then allocate the necessary space based on the number of channels. */ if(sizeof *jsr!=1) error(EXIT_FAILURE, 0, "%s: JSAMPLE has to be 8bit", __func__); errno=0; jsr=malloc(numch * p->chll->size * sizeof *jsr); if(jsr==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for jsr", __func__, numch * p->chll->size * sizeof *jsr ); /* Set the pointers to each color. */ i=0; for(channel=p->chll; channel!=NULL; channel=channel->next) colors[i++]=channel->array; /* Write the different colors into jsr. */ for(pixel=0; pixel<p->chll->size; ++pixel) for(color=0;color<numch;++color) { jsr[pixel*numch+color] = colors[color][pixel]; /* printf("color: %zu, pixel: %zu, jsr: %d\n", color, pixel, (int)jsr[pixel*numch+color]); */ } /* Write jsr to a JPEG image and clean up. */ jpeg_write_array(jsr, p); free(jsr); } #endif /* HAVE_LIBJPEG */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/eps.c���������������������������������������������������������������������0000644�0001750�0001750�00000030606�13152356630�013521� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" /************************************************************* ************** Acceptable EPS names *************** *************************************************************/ int nameiseps(char *name) { size_t len; len=strlen(name); if ( ( len>=3 && strcmp(&name[len-3], "eps") == 0 ) || ( len>=3 && strcmp(&name[len-3], "EPS") == 0 ) || ( len>=4 && strcmp(&name[len-4], "epsf") == 0 ) || ( len>=4 && strcmp(&name[len-4], "epsi") == 0 ) ) return 1; else return 0; } int nameisepssuffix(char *name) { if (strcmp(name, "eps") == 0 || strcmp(name, ".eps") == 0 || strcmp(name, "EPS") == 0 || strcmp(name, ".EPS") == 0 || strcmp(name, "epsf") == 0 || strcmp(name, ".epsf") == 0 || strcmp(name, "epsi") == 0 || strcmp(name, ".epsi") == 0) return 1; else return 0; } int nameispdf(char *name) { size_t len; len=strlen(name); if (strcmp(&name[len-3], "pdf") == 0 || strcmp(&name[len-3], "PDF") == 0) return 1; else return 0; } int nameispdfsuffix(char *name) { if (strcmp(name, "pdf") == 0 || strcmp(name, ".pdf") == 0 || strcmp(name, "PDF") == 0 || strcmp(name, ".PDF") == 0) return 1; else return 0; } /************************************************************* ************** Write an EPS image ************** *************************************************************/ static int eps_is_binary(struct converttparams *p) { gal_data_t *channel; unsigned char *i, *fi; /* Go through all the channels. */ for(channel=p->chll; channel!=NULL; channel=channel->next) { /* Go through all the values and see they are 0 and break out of the loop as soon as you get to a pixel that is not 0 or `maxbyte'. */ fi = (i=p->chll->array) + p->chll->size; do if(*i!=p->maxbyte && *i!=0) break; while(++i<fi); /* If we didn't get to the end of the channel, then we have a non-binary image. */ if(i!=fi) return 0; } /* If we get to this point, then all the channels were binary, so return success. */ return 1; } /* Show the bit values in a uint8_t variable. It is included here as a test in debugging problems with blackandwhite. To test it use a very small valued input to make the outputs reasonable. For example I am now testing it with an input text array of 12 elements (while calling the --invert option): 1 0 1 0 0 0 0 0 0 1 0 1 */ void eps_show_bits(uint8_t x) { int i; for(i=7;i>=0;--i) (x&(1<<i)) ? putchar('1') : putchar('0'); putchar('\n'); } /* Convert the channels into into a 0 and 1 bit stream. This function is only called when the image is binary (has only two values). NOTE: each row has to have an integer number of bytes, so when the number of pixels in a row is not a multiple of 8, we'll add one. */ size_t eps_convert_to_bitstream(struct converttparams *p) { gal_data_t *channel; size_t i, j, k, bytesinrow, bytesinimg; unsigned char *bits, byte, curbit, *in; size_t s0=p->chll->dsize[0], s1=p->chll->dsize[1]; /* Find the size values and allocate the array. */ if( s1 % 8 ) bytesinrow = s1/8 + 1; else bytesinrow = s1/8; bytesinimg = bytesinrow*s0; /* Go over all the channels. */ for(channel=p->chll; channel!=NULL; channel=channel->next) { /* Allocate the array. */ bits=gal_data_malloc_array(GAL_TYPE_UINT8, bytesinimg, __func__, "bits"); /* Put the values in. */ in=channel->array; for(i=0;i<s0;++i) { for(j=0;j<bytesinrow;++j) { /* i*s0+j is the byte, not bit position. */ byte=0; /* Set the 8 bits to zero. */ curbit=0x80; /* Current bit position, starting at: */ for(k=0;k<8;++k) { if( j*8+k < s1 ) { if(in[i*s1+j*8+k]) byte |= curbit; curbit >>= 1; } else break; } /*eps_show_bits(byte);*/ bits[i*bytesinrow+j]=byte; } } free(channel->array); channel->array=bits; channel->type=GAL_TYPE_BIT; } /* Return the total number of bytes in the image. */ return bytesinimg; } void eps_write_hex(struct converttparams *p, FILE *fp, size_t size) { unsigned char *in; gal_data_t *channel; size_t i=0, j, elem_for_newline=35; for(channel=p->chll; channel!=NULL; channel=channel->next) { if(channel->status) /* A blank channel has status==1. */ fprintf(fp, "{<00>} %% Channel %zu is blank\n", i); else { in=channel->array; fprintf(fp, "{<"); for(j=0;j<size;++j) { fprintf(fp, "%02X", in[j]); if(j%elem_for_newline==0) fprintf(fp, "\n"); } fprintf(fp, ">}\n"); } ++i; } } void eps_write_ascii85(struct converttparams *p, FILE *fp, size_t size) { unsigned char *in; gal_data_t *channel; uint32_t anint, base; size_t i=0, j, k, elem_for_newline=15; /* 15*5=75 */ for(channel=p->chll; channel!=NULL; channel=channel->next) { if(channel->status) fprintf(fp, "{<00>} %% Channel %zu is blank\n", i); else { in=channel->array; fprintf(fp, "{<~"); for(j=0;j<size;j+=4) { /* This is the last four bytes */ if(size-j<4) { anint=in[j]*256*256*256; if(size-j>1) anint+=in[j+1]*256*256; if(size-j==3) anint+=in[j+2]*256; } else anint=( in[j]*256*256*256 + in[j+1]*256*256 + in[j+2]*256 + in[j+3] ); /* If all four bytes are zero, then just print `z'. */ if(anint==0) fprintf(fp, "z"); else { /* To check, just change the fprintf below to printf: printf("\n\n"); printf("%u %u %u %u\n", in[i], in[i+1], in[i+2], in[i+3]); */ base=85*85*85*85; /* Do the ASCII85 encoding: */ for(k=0;k<5;++k) { fprintf(fp, "%c", anint/base+33); anint%=base; base/=85; } } /* Go to the next line if on the right place: */ if(j%elem_for_newline==0) fprintf(fp, "\n"); } fprintf(fp, "~>}\n"); } ++i; } } static void eps_write_image(struct converttparams *p, FILE *fp) { int bpc=8; size_t i, size, *dsize=p->chll->dsize; /* Set the number of bits per component. */ if( p->numch==1 && eps_is_binary(p) ) { bpc=1; size=eps_convert_to_bitstream(p); } else size=p->chll->size; switch(p->numch) { case 1: fprintf(fp, "/DeviceGray setcolorspace\n"); break; case 3: fprintf(fp, "/DeviceRGB setcolorspace\n"); break; case 4: fprintf(fp, "/DeviceCMYK setcolorspace\n"); break; default: error(EXIT_FAILURE, 0, "%s: a bug! The number of channels (%zu) is not " "1, 3 or 4. Please contact us so we can find the issue and fix it", __func__, p->numch); } fprintf(fp, "<<\n"); fprintf(fp, " /ImageType 1\n"); fprintf(fp, " /Width %zu\n", dsize[1]); fprintf(fp, " /Height %zu\n", dsize[0]); fprintf(fp, " /ImageMatrix [ %zu 0 0 %zu 0 0 ]\n", dsize[1], dsize[0]); fprintf(fp, " /MultipleDataSources true\n"); fprintf(fp, " /BitsPerComponent %d\n", bpc); fprintf(fp, " /Decode["); for(i=0;i<p->numch;++i) {fprintf(fp, " 0 1");} fprintf(fp, " ]\n"); fprintf(fp, " /Interpolate false\n"); fprintf(fp, " /DataSource [\n"); if(p->hex) eps_write_hex(p, fp, size); else eps_write_ascii85(p, fp, size); fprintf(fp, " ]\n"); fprintf(fp, ">>\n"); fprintf(fp, "image\n\n"); } void eps_write_eps_or_pdf(struct converttparams *p) { FILE *fp; float hbw; char command[20000], *epsfilename=NULL; size_t winpt, hinpt, *dsize=p->chll->dsize; /* Find the bounding box */ winpt=p->widthincm*72.0f/2.54f; hinpt=(float)( dsize[0] * winpt )/(float)(dsize[1]); hbw=(float)p->borderwidth/2.0f; /* EPS filename */ if(p->outformat==OUT_FORMAT_EPS) { epsfilename=p->cp.output; gal_checkset_writable_remove(epsfilename, 0, p->cp.dontdelete); } else if (p->outformat==OUT_FORMAT_PDF) { gal_checkset_writable_remove(p->cp.output, 0, p->cp.dontdelete); epsfilename=gal_checkset_automatic_output(&p->cp, p->cp.output, ".ps"); } else error(EXIT_FAILURE, 0, "%s: a bug! code %d not recognized for " "`p->outformat'", __func__, p->outformat); /* Open the output file and write the top comments. */ errno=0; fp=fopen(epsfilename, "w"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s", p->cp.output); fprintf(fp, "%%!PS-Adobe-3.0 EPSF-3.0\n"); fprintf(fp, "%%%%BoundingBox: 0 0 %zu %zu\n", winpt+2*p->borderwidth, hinpt+2*p->borderwidth); fprintf(fp, "%%%%Creator: %s\n", PROGRAM_STRING); fprintf(fp, "%%%%CreationDate: %s", ctime(&p->rawtime)); fprintf(fp, "%%%%LanuageLevel: 3\n"); fprintf(fp, "%%%%EndComments\n\n"); if(p->outformat==OUT_FORMAT_EPS) fprintf(fp, "gsave\n\n"); /* Commands to draw the border: */ if(p->borderwidth) { fprintf(fp, "%% Draw the border:\n"); fprintf(fp, "0 setgray\n"); fprintf(fp, "%d setlinewidth\n", p->borderwidth); fprintf(fp, "%.1f %.1f moveto\n", hbw, hbw); fprintf(fp, "0 %zu rlineto\n", hinpt+p->borderwidth); fprintf(fp, "%zu 0 rlineto\n", winpt+p->borderwidth); fprintf(fp, "0 -%zu rlineto\n", hinpt+p->borderwidth); fprintf(fp, "closepath\n"); fprintf(fp, "stroke\n\n"); } /* Write the image: */ fprintf(fp, "%% Draw the image:\n"); fprintf(fp, "%d %d translate\n", p->borderwidth, p->borderwidth); fprintf(fp, "%zu %zu scale\n", winpt, hinpt); eps_write_image(p, fp); /* Ending of the EPS file: */ if(p->outformat==OUT_FORMAT_EPS) fprintf(fp, "grestore\n"); else fprintf(fp, "showpage\n"); fprintf(fp, "%%%%EOF"); fclose(fp); if(p->outformat==OUT_FORMAT_PDF) { sprintf(command, "gs -q -o %s -sDEVICE=pdfwrite -dDEVICEWIDTHPOINTS=%zu" " -dDEVICEHEIGHTPOINTS=%zu -dPDFFitPage %s", p->cp.output, winpt+2*p->borderwidth, hinpt+2*p->borderwidth, epsfilename); if(system(command)) error(EXIT_FAILURE, 0, "the command to convert a PostScript file to " "PDF (`%s') was not successful! The PostScript file (%s) is " "left if you want to convert or use it through any other " "means", command, epsfilename); sprintf(command, "rm %s", epsfilename); if(system(command)) error(EXIT_FAILURE, 0, "The PDF output (%s) was created, but the " "PostScript file which was used to make it (%s) could not be" "removed", p->cp.output, epsfilename); free(epsfilename); } } ��������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/convertt.c����������������������������������������������������������������0000644�0001750�0001750�00000024556�13175442274�014612� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/txt.h> #include <gnuastro/fits.h> #include <gnuastro/arithmetic.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "eps.h" #include "jpeg.h" /**************************************************************/ /************** Modifying pixel values ***************/ /**************************************************************/ static void convertt_change(struct converttparams *p) { gal_data_t *channel, *cond; struct change *change, *tmp; unsigned char flags = ( GAL_ARITHMETIC_NUMOK | GAL_ARITHMETIC_FREE | GAL_ARITHMETIC_INPLACE ); /* In case there is no value to convert. */ if(p->change==NULL) return; /* Do the conversion on all channels for each change. */ for(change=p->change; change!=NULL; change=change->next) for(channel=p->chll; channel!=NULL; channel=channel->next) { /* Make a condition array: all pixels with a value equal to `change->from' will be set as 1 in this array. */ cond=gal_arithmetic(GAL_ARITHMETIC_OP_EQ, GAL_ARITHMETIC_NUMOK, channel, change->from); /* Now, use the condition array to set the proper values. */ channel=gal_arithmetic(GAL_ARITHMETIC_OP_WHERE, flags, channel, cond, change->to); /* Clean up, since we set the free flag, all extra arrays have been freed.*/ gal_data_free(change->from); } /* Free the channels linked list. */ change=p->change; while(change!=NULL) { tmp=change->next; free(change); change=tmp; } } static void convertt_trunc_function(int operator, gal_data_t *data, gal_data_t *value) { gal_data_t *cond, *out; /* Note that we need the fluxlow and fluxhigh values later. */ unsigned char flags = ( GAL_ARITHMETIC_NUMOK | GAL_ARITHMETIC_INPLACE ); /* Make a condition array: all pixels with a value equal to `change->from' will be set as 1 in this array. */ cond=gal_arithmetic(operator, GAL_ARITHMETIC_NUMOK, data, value); /* Now, use the condition array to set the proper values. */ out=gal_arithmetic(GAL_ARITHMETIC_OP_WHERE, flags, data, cond, value); /* A small sanity check. The process must be in-place so the original data structure must not have changed. */ if(out!=data) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to solve the " "problem. The `out' and `data' pointers are the same", __func__, PACKAGE_BUGREPORT); /* Clean up. */ gal_data_free(cond); } static void convertt_truncate(struct converttparams *p) { gal_data_t *channel; /* Return if no truncation is desired. */ if(p->fluxhigh==NULL && p->fluxlow==NULL) return; /* Do the truncation for each channel. */ for(channel=p->chll; channel!=NULL; channel=channel->next) { if(p->fluxlow) convertt_trunc_function(GAL_ARITHMETIC_OP_LT, channel, p->fluxlow); if(p->fluxhigh) convertt_trunc_function(GAL_ARITHMETIC_OP_GT, channel, p->fluxhigh); } } /**************************************************************/ /************** Save text and FITS ***************/ /**************************************************************/ static void save_with_gnuastro_lib(struct converttparams *p) { gal_data_t *channel; /* Determine the type. */ switch(p->outformat) { /* FITS: a FITS file can have many extensions (channels). */ case OUT_FORMAT_FITS: for(channel=p->chll; channel!=NULL; channel=channel->next) gal_fits_img_write(channel, p->cp.output, NULL, PROGRAM_NAME); break; /* Plain text: only one channel is acceptable. */ case OUT_FORMAT_TXT: gal_checkset_writable_remove(p->cp.output, 0, p->cp.dontdelete); gal_txt_write(p->chll, NULL, p->cp.output); break; /* Not recognized. */ default: error(EXIT_FAILURE, 0, "%s: a bug! output format code `%d' not " "recognized", __func__, p->outformat); } } /**************************************************************/ /************** convert to 8 bit ***************/ /**************************************************************/ void convertt_scale_to_uchar(struct converttparams *p) { size_t size=p->chll->size; unsigned char *u, *fu, maxbyte=p->maxbyte; gal_data_t *channel, *prev, *copied, *mind, *maxd; float *f, *ff, m, tmin, tmax, min=FLT_MAX, max=-FLT_MAX; /* Convert everything to single precision floating point type and find the minimum and maximum values of all the channels in the process. */ prev=NULL; for(channel=p->chll; channel!=NULL; channel=channel->next) { /* Only for channels that weren't originally blank. */ if(channel->status==0) { /* If the type isn't float, then convert it to float. */ if(channel->type!=GAL_TYPE_FLOAT32) { /* Change the type to float. */ copied=gal_data_copy_to_new_type(channel, GAL_TYPE_FLOAT32); /* Correct the pointers. */ copied->next=channel->next; if(prev) prev->next=copied; else p->chll=copied; /* Clean the old data structure and put in the new one */ gal_data_free(channel); channel=copied; } /* Calculate the minimum and maximum. */ mind = gal_arithmetic(GAL_ARITHMETIC_OP_MINVAL, 0, channel); maxd = gal_arithmetic(GAL_ARITHMETIC_OP_MAXVAL, 0, channel); tmin = *((float *)(mind->array)); tmax = *((float *)(maxd->array)); gal_data_free(mind); gal_data_free(maxd); /* See the over-all minimum and maximum values. */ if(tmin<min) min=tmin; if(tmax>max) max=tmax; } /* Set the prev pointer. */ prev=channel; } /* Change the minimum and maximum if desired, Note that this is only non-redundant when fluxhigh and fluxlow are more or less than the maximum and minimum values in the image.*/ if(p->fluxlow || p->fluxhigh) { if(p->flminbyte) { /* Convert the fluxlow value to float and put it in min. */ copied=gal_data_copy_to_new_type(p->fluxlow, GAL_TYPE_FLOAT32); min = *((float *)(copied->array)); gal_data_free(copied); } if(p->fhmaxbyte) { /* Convert the fluxhigh value to float and put it in min. */ copied=gal_data_copy_to_new_type(p->fluxhigh, GAL_TYPE_FLOAT32); max = *((float *)(copied->array)); gal_data_free(copied); } } m=(float)maxbyte/(max-min); /* Convert all the non-blank channels to unsigned char. */ prev=NULL; for(channel=p->chll; channel!=NULL; channel=channel->next) { if(channel->status==0) { /* Convert the values into a range between `0' and `maxbyte'. */ ff=(f=channel->array)+size; if(p->invert) { do *f = isnan(*f) ? maxbyte : maxbyte-(*f-min)*m; while(++f<ff); } else { do *f = isnan(*f) ? 0 : (*f-min)*m; while(++f<ff); } /* Change the type to unsigned char. */ copied=gal_data_copy_to_new_type(channel, GAL_TYPE_UINT8); /* Correct the pointers. */ copied->next=channel->next; if(prev) prev->next=copied; else p->chll=copied; /* Clean the old data structure and put in the new one */ gal_data_free(channel); channel=copied; } else { /* In CMYK, a blank channel should have a maximum value. */ if(p->numch==4) {fu=(u=channel->array)+size; do *u=UINT8_MAX; while(++u<fu);} } /* Set the prev pointer. */ prev=channel; } } /**************************************************************/ /************** Main function ***************/ /**************************************************************/ void convertt(struct converttparams *p) { /* Make any of the desired changes to the data. */ if(p->changeaftertrunc) { convertt_truncate(p); convertt_change(p); } else { convertt_change(p); convertt_truncate(p); } /* Save the outputs: */ switch(p->outformat) { case OUT_FORMAT_TXT: case OUT_FORMAT_FITS: save_with_gnuastro_lib(p); break; case OUT_FORMAT_JPEG: #ifdef HAVE_LIBJPEG convertt_scale_to_uchar(p); jpeg_write(p); #else error(EXIT_FAILURE, 0, "you have asked for a JPEG output, however, " "when %s was configured libjpeg was not available. To write " "to JPEG files, libjpeg is required. Please install it and " "configure, make and install %s again", PACKAGE_STRING, PACKAGE_STRING); #endif break; case OUT_FORMAT_EPS: case OUT_FORMAT_PDF: convertt_scale_to_uchar(p); eps_write_eps_or_pdf(p); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us so we can find " "the problem and fix it The internal type of the output is " "not recognized. ", __func__); } } ��������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/ui.c����������������������������������������������������������������������0000644�0001750�0001750�00000056730�13174462540�013357� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2016, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <gnuastro/txt.h> #include <gnuastro/wcs.h> #include <gnuastro/list.h> #include <gnuastro/fits.h> #include <gnuastro/table.h> #include <gnuastro/blank.h> #include <gnuastro/arithmetic.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "eps.h" #include "jpeg.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "InputFile1 [InputFile2] ... [InputFile4]"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will convert any of the " "known input formats to any other of the known formats. The output file " "will have the same number of pixels.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct converttparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Program specific non-zero values. */ p->maxbyte = UINT8_MAX; p->quality = GAL_BLANK_UINT8; /* Modify the common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].value=&p->hdus; cp->coptions[i].type=GAL_TYPE_STRLL; cp->coptions[i].doc="FITS input HDU, multiple calls possible."; break; case GAL_OPTIONS_KEY_OUTPUT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; cp->coptions[i].doc="Output filename or suffix."; break; case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct converttparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: gal_list_str_add(&p->inputnames, arg, 0); break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct converttparams *p) { gal_data_t *cond; /* Read the truncation values into a data structure and see if flux low is indeed smaller than fluxhigh. */ if(p->fluxlowstr) { p->fluxlow=gal_data_copy_string_to_number(p->fluxlowstr); if(p->fluxlow==NULL) error(EXIT_FAILURE, 0, "value to the `--fluxlow' (`-L', %s) " "couldn't be read as a number", p->fluxlowstr); } if(p->fluxhighstr) { p->fluxhigh=gal_data_copy_string_to_number(p->fluxhighstr); if(p->fluxhigh==NULL) error(EXIT_FAILURE, 0, "value to the `--fluxhigh' (`-H', %s) " "couldn't be read as a number", p->fluxhighstr); } if(p->fluxhighstr && p->fluxlowstr) { cond=gal_arithmetic(GAL_ARITHMETIC_OP_GT, GAL_ARITHMETIC_NUMOK, p->fluxhigh, p->fluxlow); if( *((unsigned char *)cond->array) == 0 ) error(EXIT_FAILURE, 0, "The value of `--fluxlow' must be less " "than `--fluxhigh'"); gal_data_free(cond); } } static void ui_check_options_and_arguments(struct converttparams *p) { /* Check if there was any inputs. */ if(p->inputnames==NULL) error(EXIT_FAILURE, 0, "no input files given"); /* Reverse the `inputnames' linked list, note that the `hdu' linked list was reversed during option parsing.*/ gal_list_str_reverse(&p->inputnames); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static struct change * ui_make_change_struct(char *arg) { char *p=arg; gal_data_t *data; size_t len=0, counter=0; struct change *out=NULL, *last=NULL, *ch; /* First set all the delimiters to `\0' and count the number of characters in the full string. */ while(*p!='\0') { if( isspace(*p) || *p==':' || *p==',' ) *p='\0'; ++p; } len=p-arg; /* Now, go through the string and read everything that remains. */ p=arg; while(p<arg+len) { if(*p=='\0') ++p; else { /* Read the number and increment the counter. */ ++counter; data=gal_data_copy_string_to_number(p); if(data==NULL) error(EXIT_FAILURE, 0, "`%s' (input number %zu to the " "`--change' option) couldn't be read as a number", p, counter); /* Go to the end of this number (until you reach a `\0'). */ while(*p!='\0') {++p; continue;} /* Put the data structure in the correct place. When the counter is an odd number, we have just started a new set of changes.*/ if(counter%2) /* Odd. */ { /* Allocate space for the new structure. */ errno=0; ch=malloc(sizeof *ch); if(ch==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `ch'", __func__, sizeof *ch); /* If the last structure has already been defined (!=NULL) then we should set its next element to `ch' and change it to point to `ch'. On the other hand, when this is the first structure to be created, then `last==NULL', so to start off the process, we should put `ch' into both the `out' and `last' lists.. */ if(last) { last->next=ch; last=ch; } else out=last=ch; /* Put `data' in the `from' element, and since this is the last structure, set its next element to NULL. */ last->from=data; last->next=NULL; } else /* Even. */ last->to=data; } } /* { struct change *tmp; for(tmp=out;tmp!=NULL;tmp=tmp->next) printf("%f --> %f\n", tmp->from, tmp->to); } */ return out; } /* Go through the input files and make a linked list of all the channels that exist in them. When this function finishes the list of channels will be filled in the same order as they were read from the inputs. */ static void ui_make_channels_ll(struct converttparams *p) { char *hdu=NULL; size_t dsize=0; gal_data_t *data; gal_list_str_t *name; /* Go through the input files and add the channel(s). */ p->numch=0; for(name=p->inputnames; name!=NULL; name=name->next) { /* Check if p->numch has not exceeded 4. */ if(p->numch>=4) error(EXIT_FAILURE, 0, "the number of input color channels (not " "necessarily files) has exceeded 4! Note that one file can " "contain more than one color channel (for example a JPEG " "file in RGB has 3 channels)"); /* Make sure this input file exists (if it isn't blank). */ if(strcmp(name->v, "blank")) gal_checkset_check_file(name->v); /* FITS: */ if( gal_fits_name_is_fits(name->v) ) { /* Get the HDU value for this channel. */ if(p->hdus) hdu=gal_list_str_pop(&p->hdus); else error(EXIT_FAILURE, 0, "not enough HDUs. Every input FITS image " "needs a HDU, you can use the `--hdu' (`-h') option once " "for each input FITS image (in the same order)"); /* Read in the array and its WCS information. */ data=gal_fits_img_read(name->v, hdu, p->cp.minmapsize, 0, 0); gal_list_data_add(&p->chll, data); /* A FITS file only has one channel. */ ++p->numch; } /* JPEG: */ else if ( nameisjpeg(name->v) ) { #ifndef HAVE_LIBJPEG error(EXIT_FAILURE, 0, "you are giving a JPEG input, however, " "when %s was configured libjpeg was not available. To read " "from (and write to) JPEG files, libjpeg is required. " "Please install it and configure, make and install %s " "again", PACKAGE_STRING, PACKAGE_STRING); #else p->numch += jpeg_read_to_ll(name->v, &p->chll, p->cp.minmapsize); #endif } /* Blank: */ else if(strcmp(name->v, BLANK_CHANNEL_NAME)==0) { gal_list_data_add_alloc(&p->chll, NULL, GAL_TYPE_INVALID, 0, &dsize, NULL, 0, p->cp.minmapsize, "blank", NULL, NULL); ++p->numch; } /* EPS: */ else if ( nameiseps(name->v) ) error(EXIT_FAILURE, 0, "EPS files cannot be used as input. Since " "EPS files are not raster graphics, they are only used as " "output"); /* PDF: */ else if ( nameispdf(name->v) ) error(EXIT_FAILURE, 0, "PDF files cannot be used as input. Since " "PDF files are not raster graphics, they are only used as " "output"); /* Text: */ else { data=gal_txt_image_read(name->v, p->cp.minmapsize); gal_list_data_add(&p->chll, data); ++p->numch; } } /* Reverse the list of channels into the input order. */ gal_list_data_reverse(&p->chll); } /* Read the input(s)/channels. */ static void ui_prepare_input_channels(struct converttparams *p) { struct wcsprm *wcs=NULL; size_t i, ndim=0, *dsize=NULL; gal_data_t *tmp, *blank, *prev; /* Fill in the channels linked list. */ ui_make_channels_ll(p); /* Make sure there are 1 (for grayscale), 3 (for RGB) or 4 (for CMYK) color channels. */ if(p->numch!=1 && p->numch!=3 && p->numch!=4) error(EXIT_FAILURE, 0, "the number of input color channels has to be " "1 (for non image data, grayscale or only K channel in CMYK), " "3 (for RGB) and 4 (for CMYK). You have given %zu color channels. " "Note that some file formats (for example JPEG in RGB mode) can " "contain more than one color channel", p->numch); /* Go over the channels and make the proper checks/corrections. We won't be checking blank channels here, recall that blank channels had a dimension of zero. */ for(tmp=p->chll; tmp!=NULL; tmp=tmp->next) if(tmp->ndim>0) { /* Set the reference size (to check and also use for the blank channels). */ if(dsize==NULL) { ndim=tmp->ndim; dsize=tmp->dsize; } else { if(tmp->ndim!=ndim) error(EXIT_FAILURE, 0, "All channels must have the same " "number of dimensions, the first input channel had " "%zu dimensions while atleast one other has %zu", ndim, tmp->ndim); for(i=0;i<ndim;++i) if(dsize[i]!=tmp->dsize[i]) error(EXIT_FAILURE, 0, "The length along each dimension of " "the channels must be the same"); } /* Incase there is WCS information, also keep a pointer to the first WCS information encountered. */ if(wcs==NULL && tmp->wcs) wcs=tmp->wcs; } /* If ndim is still NULL, then there were no non-blank inputs, so print an error. */ if(dsize==NULL) error(EXIT_FAILURE, 0, "all the input(s) are of type blank"); /* Now, fill in the blank channels with zero valued arrays. */ prev=NULL; for(tmp=p->chll; tmp!=NULL; tmp=tmp->next) { /* If this is a blank structure, then set it to a zero valued array. */ if(tmp->ndim==0) { /* Make the blank data structure. */ blank=gal_data_alloc(NULL, GAL_TYPE_UINT8, ndim, dsize, wcs, 1, p->cp.minmapsize, "blank channel", NULL, NULL); /* We will use the status value of the data structuer to mark it as one that was originally blank. */ blank->status=1; /* If a previous node pointed to this old blank structure, then correct it. */ if(prev) prev->next=blank; else p->chll=blank; /* Set the next pointer of this one to same pointer that the old blank pointer pointed to. */ blank->next=tmp->next; /* Free the old data structure and put this one in its place. */ gal_data_free(tmp); tmp=blank; } /* This is the final (to be used) data structure, so keep its pointer in case the next one is blank and this structure's `next' element must be corrected. */ prev=tmp; } } /* We know cp->output is a known suffix, we just don't know if it has a `.` before it or not. If it doesn't, one will be added to it and the output name will be set using the automatic output function. */ void ui_add_dot_use_automatic_output(struct converttparams *p) { gal_list_str_t *stll; char *tmp, *firstname="output.txt", *suffix=p->cp.output; /* Find the first non-blank file name in the input(s). */ for(stll=p->inputnames; stll!=NULL; stll=stll->next) if(strcmp(stll->v, BLANK_CHANNEL_NAME)) { firstname=stll->v; break; } /* If the suffix does not start with a `.', put one there. */ if(suffix[0]!='.') { asprintf(&tmp, ".%s", suffix); free(suffix); suffix=tmp; } /* Set the automatic output and make sure we have write access. */ p->cp.output=gal_checkset_automatic_output(&p->cp, firstname, suffix); } /* Set output name, not that for ConvertType, the output option value is mandatory (in `args.h'). So by the time the program reaches here, we know it exists. */ static void ui_set_output(struct converttparams *p) { struct gal_options_common_params *cp=&p->cp; /* Determine the type */ if(gal_fits_name_is_fits(cp->output)) { p->outformat=OUT_FORMAT_FITS; if( gal_fits_suffix_is_fits(cp->output) ) ui_add_dot_use_automatic_output(p); } else if(nameisjpeg(cp->output)) { #ifndef HAVE_LIBJPEG error(EXIT_FAILURE, 0, "you have asked for a JPEG output, " "however, when %s was configured libjpeg was not " "available. To write to JPEG files, libjpeg is required. " "Please install it and configure, make and install %s " "again", PACKAGE_STRING, PACKAGE_STRING); #else /* Small sanity checks. */ if(p->quality == GAL_BLANK_UINT8) error(EXIT_FAILURE, 0, "the `--quality' (`-u') option is necessary for " "jpeg outputs, but it has not been given"); if(p->quality > 100) error(EXIT_FAILURE, 0, "`%u' is larger than 100. The value to the " "`--quality' (`-u') option must be between 1 and 100 (inclusive)", p->quality); /* Preparations. */ p->outformat=OUT_FORMAT_JPEG; if( nameisjpegsuffix(cp->output) ) ui_add_dot_use_automatic_output(p); #endif } else if(nameiseps(cp->output)) { p->outformat=OUT_FORMAT_EPS; if( nameisepssuffix(cp->output) ) ui_add_dot_use_automatic_output(p); } else if(nameispdf(cp->output)) { p->outformat=OUT_FORMAT_PDF; if( nameispdfsuffix(cp->output) ) ui_add_dot_use_automatic_output(p); } else { p->outformat=OUT_FORMAT_TXT; /* If the given value is `stdout', then set p->cp.output to NULL, so the result will be printed to the standard output. */ if( !strcmp(p->cp.output, "stdout") ) { free(p->cp.output); p->cp.output=NULL; } else { /* Plain text files don't have any unique set of suffixes. So, here, we will just adopt two of the most common ones: `txt' or `dat'. If the output is just one of these two suffixes, then we will use automatic output to generate the full name, otherwise, we'll just take the user's given value as the filename. */ if( !strcmp(cp->output, "txt") || !strcmp(cp->output, ".txt") || !strcmp(cp->output, "dat") || !strcmp(cp->output, ".dat") ) ui_add_dot_use_automatic_output(p); /* If output type is not an image, there should only be one color channel: */ if(p->numch>1) error(EXIT_FAILURE, 0, "text output (`--output=%s`) can only be " "completed with one input color channel. You have given " "%zu. Note that some formats (for example JPEG) can have " "more than one color channel in each file. You can first " "convert the file to FITS, then convert the desired " "channel to text by specifying the HDU", cp->output, p->numch); } } /* Check if the output already exists. */ gal_checkset_writable_remove(cp->output, 0, cp->dontdelete); } void ui_preparations(struct converttparams *p) { /* Convert the change string into the proper list. */ if(p->changestr) p->change=ui_make_change_struct(p->changestr); /* Read the input channels. */ ui_prepare_input_channels(p); /* Set the output name. */ ui_set_output(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct converttparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct converttparams *p) { /* Free the allocated spaces */ gal_data_free(p->fluxlow); gal_data_free(p->fluxhigh); gal_list_str_free(p->hdus, 1); if(p->cp.output) free(p->cp.output); gal_list_str_free(p->inputnames, 0); } ����������������������������������������gnuastro-0.5/bin/convertt/main.c��������������������������������������������������������������������0000644�0001750�0001750�00000003044�13121462410�013640� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" /* needs main.h. */ #include "convertt.h" int main(int argc, char *argv[]) { struct converttparams p={{{0},0},0}; /* Set the starting time.*/ time(&p.rawtime); /* Read the input parameters.*/ ui_read_check_inputs_setup(argc, argv, &p); /* Run Convert. */ convertt(&p); /* Free all non-freed allocations. */ ui_free_report(&p); /* Return successfully.*/ return EXIT_SUCCESS; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/Makefile.in���������������������������������������������������������������0000644�0001750�0001750�00000211662�13217217705�014637� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astconvertt$(EXEEXT) subdir = bin/convertt ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astconvertt_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ convertt.$(OBJEXT) eps.$(OBJEXT) jpeg.$(OBJEXT) astconvertt_OBJECTS = $(am_astconvertt_OBJECTS) astconvertt_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astconvertt_SOURCES) DIST_SOURCES = $(astconvertt_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astconvertt_LDADD = -lgnuastro astconvertt_SOURCES = main.c ui.c convertt.c eps.c jpeg.c EXTRA_DIST = main.h authors-cite.h args.h ui.h convertt.h eps.h jpeg.h dist_sysconf_DATA = astconvertt.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/convertt/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/convertt/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astconvertt$(EXEEXT): $(astconvertt_OBJECTS) $(astconvertt_DEPENDENCIES) $(EXTRA_astconvertt_DEPENDENCIES) @rm -f astconvertt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astconvertt_OBJECTS) $(astconvertt_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convertt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eps.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpeg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/astconvertt.conf����������������������������������������������������������0000644�0001750�0001750�00000002072�13121462410�015773� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for ConvertType. # ConvertType is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astconvertt --help # Full list of options, short doc. # $ astconvertt -P # Print all options and used values. # $ info astconvertt # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: # Output: quality 100 widthincm 10.0 borderwidth 1 output jpg # Flux: invert 0 # Common options ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/convertt/Makefile.am���������������������������������������������������������������0000644�0001750�0001750�00000002634�13121462410�014610� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astconvertt astconvertt_LDADD = -lgnuastro astconvertt_SOURCES = main.c ui.c convertt.c eps.c jpeg.c EXTRA_DIST = main.h authors-cite.h args.h ui.h convertt.h eps.h jpeg.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astconvertt.conf ����������������������������������������������������������������������������������������������������gnuastro-0.5/bin/buildprog/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220466�012763� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/buildprog/buildprog.h��������������������������������������������������������������0000644�0001750�0001750�00000002115�13121462410�015031� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef BUILDPROG_H #define BUILDPROG_H int buildprog(struct buildprogparams *p); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/buildprog/ui.h���������������������������������������������������������������������0000644�0001750�0001750�00000003440�13211076737�013476� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Available letters for short options: c d e f i j k n p r s t u v w x y z A B C E G H J Q R X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_INCLUDE = 'I', UI_KEY_LINKDIR = 'L', UI_KEY_LINKLIB = 'l', UI_KEY_LA = 'a', UI_KEY_ONLYBUILD = 'b', UI_KEY_DEBUG = 'g', UI_KEY_OPTIMIZE = 'O', UI_KEY_WARNING = 'W', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_DETELECOMPILED = 1000, UI_KEY_TAG, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct buildprogparams *p); void ui_free_report(struct buildprogparams *p); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/buildprog/args.h�������������������������������������������������������������������0000644�0001750�0001750�00000010775�13211076737�014026� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { "includedir", UI_KEY_INCLUDE, "STR", 0, "Directories to search for `#include's.", GAL_OPTIONS_GROUP_INPUT, &p->include, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "linkdir", UI_KEY_LINKDIR, "STR", 0, "Directory to search for libraries to link.", GAL_OPTIONS_GROUP_INPUT, &p->linkdir, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "linklib", UI_KEY_LINKLIB, "STR", 0, "Link libraries, e.g., for libgsl: `-lgsl'.", GAL_OPTIONS_GROUP_INPUT, &p->linklib, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "la", UI_KEY_LA, "STR", 0, "Libtool `.la' to use instead of default.", GAL_OPTIONS_GROUP_INPUT, &p->la, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "tag", UI_KEY_TAG, "STR", 0, "Libtool `--tag': programming language.", GAL_OPTIONS_GROUP_INPUT, &p->tag, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "debug", UI_KEY_DEBUG, 0, 0, "Debugging information in compiled binary.", GAL_OPTIONS_GROUP_OUTPUT, &p->debug, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "optimize", UI_KEY_OPTIMIZE, "INT", 0, "Optimization level: 0, 1, 2, 3.", GAL_OPTIONS_GROUP_OUTPUT, &p->optimize, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "warning", UI_KEY_WARNING, "STR", 0, "Compilation warnings on command-line.", GAL_OPTIONS_GROUP_OUTPUT, &p->warning, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "onlybuild", UI_KEY_ONLYBUILD, 0, 0, "Don't run the built program.", GAL_OPTIONS_GROUP_OUTPUT, &p->onlybuild, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "deletecompiled", UI_KEY_DETELECOMPILED, 0, 0, "Delete compiled program after running.", GAL_OPTIONS_GROUP_OUTPUT, &p->deletecompiled, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure ------------------------------- NOTE: these parts can be left untouched.*/ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ���gnuastro-0.5/bin/buildprog/authors-cite.h�����������������������������������������������������������0000644�0001750�0001750�00000003011�13211076737�015462� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/buildprog/main.h�������������������������������������������������������������������0000644�0001750�0001750�00000004667�13211076737�014021� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Progarm names. */ #define PROGRAM_NAME "BuildProgram" /* Program full name. */ #define PROGRAM_EXEC "astbuildprog" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Main program parameters structure */ struct buildprogparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_list_str_t *sourceargs; /* Source files and arguments. */ gal_list_str_t *include; /* Libraries to link against. */ gal_list_str_t *linkdir; /* Libraries to link against. */ gal_list_str_t *linklib; /* Libraries to link against. */ char *la; /* Libtool `.la' instead of default. */ char *tag; /* Libtool tag (programming language).*/ char *optimize; /* Optimization level. */ char *debug; /* Keep debugging information. */ char *warning; /* Compiler warnings. */ uint8_t onlybuild; /* Don't run the compiled program. */ uint8_t deletecompiled; /* Delete compiled program after running. */ /* Output: */ time_t rawtime; /* Starting time of the program. */ }; #endif �������������������������������������������������������������������������gnuastro-0.5/bin/buildprog/buildprog.c��������������������������������������������������������������0000644�0001750�0001750�00000011627�13211076737�015051� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/list.h> #include <main.h> /* Write the given list into */ char * buildprog_as_one_string(char *opt, gal_list_str_t *list) { char *out; size_t len=0; gal_list_str_t *tmp; /* Only if we have a list. */ if(list) { /* For every node in the list, we want the `opt' and a space along with the actual string. */ for(tmp=list; tmp!=NULL; tmp=tmp->next) len += 1 + (opt ? strlen(opt) : 0) + strlen(tmp->v); /* Allocate space for the string. */ out=gal_data_malloc_array(GAL_TYPE_UINT8, len+1, __func__, "out"); /* Write all the strings into the allocated space. */ len=0; for(tmp=list; tmp!=NULL; tmp=tmp->next) len += sprintf(&out[len], "%s%s ", opt ? opt : "", tmp->v); } else out=NULL; /* Return the final string. */ return out; } int buildprog(struct buildprogparams *p) { /* Note that the first node of `sourceargs' is the acutal source and the rest are arguments to be run later. */ int retval; char *fullla; char *command, *optimize=NULL, *warning=NULL; char *include = buildprog_as_one_string("-I", p->include); char *linkdir = buildprog_as_one_string("-L", p->linkdir); char *linklib = buildprog_as_one_string("-l", p->linklib); char *arguments = buildprog_as_one_string(NULL, p->sourceargs->next); /* If not in quiet mode, let the user know. */ if(!p->cp.quiet) { printf("\nCompiling and linking the program\n"); printf("---------------------------------\n"); } /* Compiler options with values: */ if(p->warning) asprintf(&warning, "-W%s", p->warning); if(p->optimize) asprintf(&optimize, "-O%s", p->optimize); /* Libtool `.la' file: */ if(p->la) fullla=p->la; else asprintf(&fullla, "%s/libgnuastro.la", LIBDIR); /* Put the command to run into a string. */ asprintf(&command, "%s %s %s%s --mode=link gcc %s %s %s %s %s %s %s " "-I%s %s -o %s", GAL_CONFIG_GNULIBTOOL_EXEC, p->cp.quiet ? "--quiet" : "", p->tag ? "--tag=" : "", p->tag ? p->tag : "", warning ? warning : "", p->debug ? "-g" : "", optimize ? optimize : "", include ? include : "", linkdir ? linkdir : "", p->sourceargs->v, linklib ?linklib : "", INCLUDEDIR, fullla, p->cp.output); /* Compile (and link): */ retval=system(command); if(retval!=EXIT_SUCCESS) error(EXIT_FAILURE, 0, "failed to build, see libtool error above"); else if(p->onlybuild==0) { /* Free the initial command. */ free(command); /* Wright the command to run the program. Note that if the output value doesn't start with a directory, we'll have to put one for it. */ switch(p->cp.output[0]) { case '.': case '/': asprintf(&command, "%s %s", p->cp.output, arguments?arguments:""); break; default: asprintf(&command, "./%s %s", p->cp.output, arguments?arguments:""); } /* Print the executed command if necessary, then run it. */ if(!p->cp.quiet) { printf("\nRun the compiled program\n"); printf("------------------------\n"); printf("%s\n", command); } retval=system(command); /* Delete the compiled program after running it. */ if(p->deletecompiled) { errno=0; if( remove(p->cp.output) == -1 ) error(EXIT_FAILURE, 0, "unable to delete %s", p->cp.output); } } /* Clean up and return. */ free(include); free(linkdir); free(linklib); free(command); if(warning) free(warning); if(optimize) free(optimize); if(!p->la && fullla) free(fullla); return retval; } ���������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/buildprog/ui.c���������������������������������������������������������������������0000644�0001750�0001750�00000023515�13175442274�013500� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <gnuastro/fits.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "C-source [ARGUMENTS TO RUN]"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will compile and run a " "C program, while automatically linking with libraries that Gnuastro " "depends on. Hence you do not have to worry about explicitly linking " "with CFITSIO for example if you want to work on a FITS file, or with " "GSL if you want to use GNU Scientific Library's functions. The standard " "compiler options of `-I', `-L', and `-l' are also available for further " "customization of the build.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct buildprogparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_HDU: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_NUMTHREADS: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].flags=OPTION_HIDDEN; cp->coptions[i].mandatory=GAL_OPTIONS_NOT_MANDATORY; break; /* `--ignorecase's default short format is `I', but here we want to follow the compiler format, hence we need `I' for `include'. Therefore, here, we'll change the key for `include' to some large number just to avoid confusion.*/ case GAL_OPTIONS_KEY_IGNORECASE: cp->coptions[i].key=20000; cp->coptions[i].flags=OPTION_HIDDEN; cp->coptions[i].mandatory=GAL_OPTIONS_NOT_MANDATORY; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct buildprogparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: gal_list_str_add(&p->sourceargs, arg, 0); break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Read and check ONLY the options. When arguments are involved, do the check in `ui_check_options_and_arguments'. */ static void ui_read_check_only_options(struct buildprogparams *p) { size_t len; /* If an `.la' file is given, make sure it has the correct suffix. */ if(p->la) { len=strlen(p->la); if(len>=4) if(strcmp(&p->la[len-3], ".la")) error(EXIT_FAILURE, 0, "`%s' is not a Libtool control file name " "(with a `.la' suffix). The file name given to the `--la' " "(`-a') option must be a Libtool control file", p->la); } } /* Check the options and arguments. */ static void ui_check_options_and_arguments(struct buildprogparams *p) { if(p->sourceargs==NULL) error(EXIT_FAILURE, 0, "no input (C source file) given"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ void ui_preparations(struct buildprogparams *p) { /* Reverse the sourceargs list (note that the options are reversed in options.c). */ gal_list_str_reverse(&p->sourceargs); /* Set the final output name. `EXEEXT' comes from the configuration script (given by BuildProgram's `Makefile.am'). */ if(p->cp.output==NULL) p->cp.output=gal_checkset_automatic_output(&p->cp, p->sourceargs->v, EXEEXT); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct buildprogparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Read the options into the program's structure, and check them and their relations prior to printing. */ ui_read_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct buildprogparams *p) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->cp.output); gal_list_str_free(p->include, 1); gal_list_str_free(p->linkdir, 1); gal_list_str_free(p->linklib, 1); gal_list_str_free(p->sourceargs, 0); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/buildprog/main.c�������������������������������������������������������������������0000644�0001750�0001750�00000003050�13121462410�013760� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" #include "buildprog.h" /* Main function */ int main (int argc, char *argv[]) { int retval; struct buildprogparams p={{{0},0},0}; /* Set they starting time. */ time(&p.rawtime); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ retval=buildprog(&p); /* Free all non-freed allocations. */ ui_free_report(&p); /* Return successfully.*/ return retval; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/buildprog/Makefile.in��������������������������������������������������������������0000644�0001750�0001750�00000211553�13217217705�014761� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astbuildprog$(EXEEXT) subdir = bin/buildprog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astbuildprog_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ buildprog.$(OBJEXT) astbuildprog_OBJECTS = $(am_astbuildprog_OBJECTS) astbuildprog_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astbuildprog_SOURCES) DIST_SOURCES = $(astbuildprog_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib -DLIBDIR=\"$(libdir)\" \ -DINCLUDEDIR=\"$(includedir)\" -DEXEEXT=\"$(EXEEXT)\" astbuildprog_LDADD = -lgnuastro astbuildprog_SOURCES = main.c ui.c buildprog.c EXTRA_DIST = main.h authors-cite.h args.h ui.h buildprog.h dist_sysconf_DATA = astbuildprog.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/buildprog/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/buildprog/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astbuildprog$(EXEEXT): $(astbuildprog_OBJECTS) $(astbuildprog_DEPENDENCIES) $(EXTRA_astbuildprog_DEPENDENCIES) @rm -f astbuildprog$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astbuildprog_OBJECTS) $(astbuildprog_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildprog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/buildprog/astbuildprog.conf��������������������������������������������������������0000644�0001750�0001750�00000001710�13211076737�016254� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for BuildProgram. # BuildProgram is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astbuildprog --help # Full list of options, short doc. # $ astbuildprog -P # Print all options and used values. # $ info astbuildprog # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Output optimize 3 warning all tag CC ��������������������������������������������������������gnuastro-0.5/bin/buildprog/Makefile.am��������������������������������������������������������������0000644�0001750�0001750�00000003240�13164537456�014751� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Your Name <your@email> ## Contributing author(s): ## Copyright (C) YYYY, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. ## ## Buildprog will also need some system-specific information that is ## gathered at compile time (for example the library installation directory ## (LIBDIR) and the executive file suffix (EXEEXT). AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib -DLIBDIR=\"$(libdir)\" \ -DINCLUDEDIR=\"$(includedir)\" -DEXEEXT=\"$(EXEEXT)\" ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astbuildprog astbuildprog_LDADD = -lgnuastro astbuildprog_SOURCES = main.c ui.c buildprog.c EXTRA_DIST = main.h authors-cite.h args.h ui.h buildprog.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astbuildprog.conf ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/������������������������������������������������������������������������0000755�0001750�0001750�00000000000�13217220466�013125� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/operands.h��������������������������������������������������������������0000644�0001750�0001750�00000002334�13121462410�015022� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef OPERANDS_H #define OPERANDS_H size_t operands_num(struct arithmeticparams *p); void operands_add(struct arithmeticparams *p, char *filename, gal_data_t *data); gal_data_t * operands_pop(struct arithmeticparams *p, char *operator); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/arithmetic.h������������������������������������������������������������0000644�0001750�0001750�00000002466�13173367042�015362� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef IMGARITH_H #define IMGARITH_H #include <gnuastro/arithmetic.h> /* These are operator codes for functions that aren't in the arithmetic library. */ enum arithmetic_prog_operators { ARITHMETIC_OP_FILTER_MEDIAN=GAL_ARITHMETIC_OP_LAST_CODE, ARITHMETIC_OP_FILTER_MEAN, }; void imgarith(struct arithmeticparams *p); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/ui.h��������������������������������������������������������������������0000644�0001750�0001750�00000003051�13174462540�013635� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include <gnuastro-internal/options.h> /* Available letters for short options: a b c d e f i j k l m n p r s t u v w x y z A B C E G H J L O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_GLOBALHDU = 'g', /* Only with long version (start with a value 1000, the rest will be set automatically). */ }; void ui_read_check_inputs_setup(int argc, char *argv[], struct arithmeticparams *p); void freeandreport(struct arithmeticparams *p, struct timeval *t1); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/args.h������������������������������������������������������������������0000644�0001750�0001750�00000003652�13124332637�014161� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Definition of program-specific options. */ struct argp_option program_options[] = { { "globalhdu", UI_KEY_GLOBALHDU, "STR", 0, "Use this HDU for all inputs, ignore `--hdu'.", GAL_OPTIONS_GROUP_INPUT, &p->globalhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif ��������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/authors-cite.h����������������������������������������������������������0000644�0001750�0001750�00000002770�13211076737�015637� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2017, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of `-' with the same length and then put the BibTeX. See the `gnuastro_bibtex' variable in `lib/options' (from the top Gnuastro source code directory) as an example.*/ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif ��������gnuastro-0.5/bin/arithmetic/main.h������������������������������������������������������������������0000644�0001750�0001750�00000005334�13124332637�014150� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef MAIN_H #define MAIN_H #include <gnuastro/fits.h> #include <gnuastro/list.h> #include <gnuastro-internal/options.h> /* Progarm name macros: */ #define PROGRAM_NAME "Arithmetic" /* Program full name. */ #define PROGRAM_EXEC "astarithmetic" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Constants: */ #define NEG_DASH_REPLACE 11 /* Vertical tab (ASCII=11) for negative dash */ /* In every node of the operand linked list, only one of the `filename' or `data' should be non-NULL. Otherwise it will be a bug and will cause problems. All the operands operate on this premise. */ struct operand { char *filename; /* !=NULL if the operand is a filename. */ char *hdu; /* !=NULL if the operand is a filename. */ gal_data_t *data; /* !=NULL if the operand is a dataset. */ struct operand *next; /* Pointer to next operand. */ }; struct arithmeticparams { /* Other structures: */ struct gal_options_common_params cp; /* Common parameters. */ /* Input: */ gal_list_str_t *hdus; /* List of all given HDU strings. */ gal_list_str_t *tokens; /* List of all arithmetic tokens. */ size_t addcounter; /* The number of FITS images added. */ size_t popcounter; /* The number of FITS images popped. */ gal_data_t refdata; /* Container for information of the data. */ char *globalhdu; /* Single HDU for all inputs. */ /* Operating mode: */ /* Internal: */ struct operand *operands; /* The operands linked list. */ time_t rawtime; /* Starting time of the program. */ }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/operands.c��������������������������������������������������������������0000644�0001750�0001750�00000012442�13164537456�015042� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/wcs.h> #include <gnuastro/fits.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "operands.h" size_t operands_num(struct arithmeticparams *p) { size_t counter=0; struct operand *tmp=NULL; for(tmp=p->operands;tmp!=NULL;tmp=tmp->next) ++counter; return counter; } void operands_add(struct arithmeticparams *p, char *filename, gal_data_t *data) { struct operand *newnode; /* Some operators might not actually return any dataset (data=NULL), in such cases filename will also be NULL (since the operand was not added from the command-line). So, we shouldn't add anything to the stack. */ if(data || filename) { /* Allocate space for the new operand. */ errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `newnode'", __func__, sizeof *newnode); /* Fill in the values. */ newnode->data=data; newnode->filename=filename; if(filename != NULL && gal_fits_name_is_fits(filename)) { /* Set the HDU for this filename. */ if(p->globalhdu) gal_checkset_allocate_copy(p->globalhdu, &newnode->hdu); else newnode->hdu=gal_list_str_pop(&p->hdus); /* Increment the FITS counter. */ ++p->addcounter; } /* Make the link to the previous list. */ newnode->next=p->operands; p->operands=newnode; } } gal_data_t * operands_pop(struct arithmeticparams *p, char *operator) { size_t i; gal_data_t *data; char *filename, *hdu; struct operand *operands=p->operands; /* If the operand linked list has finished, then give an error and exit. */ if(operands==NULL) error(EXIT_FAILURE, 0, "not enough operands for the \"%s\" operator", operator); /* Set the dataset. If filename is present then read the file and fill in the array, if not then just set the array. */ if(operands->filename) { hdu=operands->hdu; filename=operands->filename; /* Read the dataset. */ data=gal_fits_img_read(filename, hdu, p->cp.minmapsize, 0, 0); /* In case this is the first image that is read, then keep the WCS information in the `refdata' structure. Otherwise, the WCS is not necessary and we can safely free it. In any case, `data' must not have a WCS structure. */ if(p->popcounter==0) { p->refdata.wcs=data->wcs; p->refdata.nwcs=data->nwcs; } else wcsfree(data->wcs); data->wcs=NULL; data->nwcs=0; /* When the reference data structure's dimensionality is non-zero, it means that this is not the first image read. So, write its basic information into the reference data structure for future checks. */ if(p->refdata.ndim) { if(gal_data_dsize_is_different(&p->refdata, data)) error(EXIT_FAILURE, 0, "%s (hdu=%s): has a different size " "compared to previous images. All the images must be " "the same size in order for Arithmetic to work", filename, hdu); } else { /* Set the dimensionality. */ p->refdata.ndim=(data)->ndim; /* Allocate the dsize array. */ errno=0; p->refdata.dsize=malloc(p->refdata.ndim * sizeof *p->refdata.dsize); if(p->refdata.dsize==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for " "p->refdata.dsize", __func__, p->refdata.ndim * sizeof *p->refdata.dsize); /* Write the values into it. */ for(i=0;i<p->refdata.ndim;++i) p->refdata.dsize[i]=data->dsize[i]; } /* Report the read image if desired: */ if(!p->cp.quiet) printf(" - %s (hdu %s) is read.\n", filename, hdu); /* Free the HDU string: */ free(hdu); /* Add to the number of popped FITS images: */ ++p->popcounter; } else data=operands->data; /* Remove this node from the queue, return the data structure. */ p->operands=operands->next; free(operands); return data; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/arithmetic.c������������������������������������������������������������0000644�0001750�0001750�00000064620�13215601241�015342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/wcs.h> #include <gnuastro/fits.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include <gnuastro/arithmetic.h> #include <gnuastro-internal/checkset.h> #include "main.h" #include "operands.h" #include "arithmetic.h" /***************************************************************/ /************* Internal functions *************/ /***************************************************************/ #define SET_NUM_OP(CTYPE) { \ CTYPE a=*(CTYPE *)(data->array); if(a>0) return a; } static size_t pop_number_of_operands(struct arithmeticparams *p, gal_data_t *data, char *token_string) { /* Check if its a number. */ if(data->size>1) error(EXIT_FAILURE, 0, "the first popped operand to the \"%s\" " "operator must be a number, not an array", token_string); /* Check its type and return the value. */ switch(data->type) { /* For the integer types, if they are unsigned, then just pass their value, if they are signed, you have to make sure they are zero or positive. */ case GAL_TYPE_UINT8: SET_NUM_OP(uint8_t); break; case GAL_TYPE_INT8: SET_NUM_OP(int8_t); break; case GAL_TYPE_UINT16: SET_NUM_OP(uint16_t); break; case GAL_TYPE_INT16: SET_NUM_OP(int16_t); break; case GAL_TYPE_UINT32: SET_NUM_OP(uint32_t); break; case GAL_TYPE_INT32: SET_NUM_OP(int32_t); break; case GAL_TYPE_UINT64: SET_NUM_OP(uint64_t); break; case GAL_TYPE_INT64: SET_NUM_OP(int64_t); break; /* Floating point numbers are not acceptable in this context. */ case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: error(EXIT_FAILURE, 0, "the first popped operand to the \"%s\" " "operator must be an integer type", token_string); default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, data->type); } /* If control reaches here, then the number must have been a negative value, so print an error. */ error(EXIT_FAILURE, 0, "the first popped operand to the \"%s\" operator " "cannot be zero or a negative number", token_string); return 0; } /**********************************************************************/ /**************** Filtering operators *****************/ /**********************************************************************/ #define ARITHMETIC_FILTER_DIM 10 struct arithmetic_filter_p { int operator; /* The type of filtering. */ size_t *fsize; /* Filter size. */ size_t *hpfsize; /* Positive Half-filter size. */ size_t *hnfsize; /* Negative Half-filter size. */ gal_data_t *input; /* Input dataset. */ gal_data_t *out; /* Output dataset. */ int hasblank; /* If the dataset has blank values.*/ }; /* Main filtering work function. */ static void * arithmetic_filter(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct arithmetic_filter_p *afp=(struct arithmetic_filter_p *)tprm->params; gal_data_t *input=afp->input; size_t ind,index; int out_type_checked=0; gal_data_t *result=NULL; size_t *hpfsize=afp->hpfsize, *hnfsize=afp->hnfsize; size_t *tsize, *dsize=input->dsize, *fsize=afp->fsize; size_t i, j, coord[ARITHMETIC_FILTER_DIM], ndim=input->ndim; size_t start[ARITHMETIC_FILTER_DIM], end[ARITHMETIC_FILTER_DIM]; gal_data_t *tile=gal_data_alloc(NULL, input->type, ndim, afp->fsize, NULL, 0, -1, NULL, NULL, NULL); /* Prepare the tile. */ free(tile->array); tsize=tile->dsize; tile->block=input; /* Go over all the pixels that were assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Get the coordinate of the pixel. */ ind=tprm->indexs[i]; gal_dimension_index_to_coord(ind, ndim, dsize, coord); /* See which dimensions need trimming. */ tile->size=1; for(j=0;j<ndim;++j) { /* Estimate the coordinate of the filter's starting point. Note that we are dealing with size_t (unsigned int) type here, so there are no negatives. A negative result will produce an extremely large number, so instead of checking for negative, we can just see if the result of a subtraction is less than the width of the input. */ if( (coord[j] - hnfsize[j] > dsize[j]) || (coord[j] + hpfsize[j] >= dsize[j]) ) { start[j] = ( (coord[j] - hnfsize[j] > dsize[j]) ? 0 : coord[j] - hnfsize[j] ); end[j] = ( (coord[j] + hpfsize[j] >= dsize[j]) ? dsize[j] : coord[j] + hpfsize[j] + 1); tsize[j] = end[j] - start[j]; } else /* We are NOT on the edge (given requested filter width). */ { tsize[j] = fsize[j]; start[j] = coord[j] - hnfsize[j]; } tile->size *= tsize[j]; } /* Set the tile's starting pointer. */ index=gal_dimension_coord_to_index(ndim, dsize, start); tile->array=gal_data_ptr_increment(input->array, index, input->type); /* Do the necessary calculation. */ switch(afp->operator) { case ARITHMETIC_OP_FILTER_MEDIAN: result=gal_statistics_median(tile, 0); break; case ARITHMETIC_OP_FILTER_MEAN: result=gal_statistics_mean(tile); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. `afp->operator' code %d is not " "recognized", PACKAGE_BUGREPORT, __func__, afp->operator); } /* Make sure the output array type and result's type are the same. We only need to do this once, but we'll suffice to once for each thread for simplicify of the code, it is too negligible to have any real affect. */ if( out_type_checked==0) { if(result->type!=afp->out->type ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s so " "we can address the problem. The tyes of `result' and " "`out' aren't the same, they are respectively: `%s' and " "`%s'", __func__, PACKAGE_BUGREPORT, gal_type_name(result->type, 1), gal_type_name(afp->out->type, 1)); out_type_checked=1; } /* Copy the result into the output array. */ memcpy(gal_data_ptr_increment(afp->out->array, ind, afp->out->type), result->array, gal_type_sizeof(afp->out->type)); /* Clean up. */ gal_data_free(result); } /* Clean up. */ tile->array=NULL; tile->block=NULL; gal_data_free(tile); /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } static void wrapper_for_filter(struct arithmeticparams *p, char *token, int operator) { size_t i=0, ndim, one=1; int type=GAL_TYPE_INVALID; struct arithmetic_filter_p afp={0}; size_t fsize[ARITHMETIC_FILTER_DIM]; gal_data_t *tmp, *tmp2, *zero, *comp, *fsize_list=NULL; size_t hnfsize[ARITHMETIC_FILTER_DIM], hpfsize[ARITHMETIC_FILTER_DIM]; /* Get the input's number of dimensions. */ afp.input=operands_pop(p, token); afp.operator=operator; ndim=afp.input->ndim; afp.hnfsize=hnfsize; afp.hpfsize=hpfsize; afp.fsize=fsize; /* A small sanity check. */ if(ndim>ARITHMETIC_FILTER_DIM) error(EXIT_FAILURE, 0, "%s: currently only datasets with less than " "%d dimensions are acceptable. The input has %zu dimensions", __func__, ARITHMETIC_FILTER_DIM, ndim); /* A zero value for checking the value of input widths. */ zero=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &one, NULL, 1, -1, NULL, NULL, NULL); /* Based on the dimensions of the popped operand, pop the necessary number of operands. */ for(i=0;i<ndim;++i) gal_list_data_add(&fsize_list, operands_pop(p, token)); /* Make sure the filter size only has single values. */ i=0; for(tmp=fsize_list; tmp!=NULL; tmp=tmp->next) { ++i; if(tmp->size!=1) error(EXIT_FAILURE, 0, "the filter length values given to the " "filter operators can only be numbers. Value number %zu has " "%zu elements, so its an array", ndim-i-1, tmp->size); } /* If the input only has one element, filtering makes no sense, so don't waste time, just add the input onto the stack. */ if(afp.input->size==1) afp.out=afp.input; else { /* Allocate an array for the size of the filter and fill it in. The values must be written in the inverse order since the user gives dimensions with the FITS standard. */ i=ndim-1; for(tmp=fsize_list; tmp!=NULL; tmp=tmp->next) { /* Make sure the user has given an integer type. */ if(tmp->type==GAL_TYPE_FLOAT32 || tmp->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "lengths of filter along dimensions " "must be integer values, not floats. The given length " "along dimension %zu is a float", ndim-i); /* Make sure it isn't negative. */ comp=gal_arithmetic(GAL_ARITHMETIC_OP_GT, 0, tmp, zero); if( *(uint8_t *)(comp->array) == 0 ) error(EXIT_FAILURE, 0, "lengths of filter along dimensions " "must be positive. The given length in dimension %zu" "is either zero or negative", ndim-i); /* Convert the input into size_t and put it into the array that keeps the filter size. */ tmp2=gal_data_copy_to_new_type(tmp, GAL_TYPE_SIZE_T); fsize[ i ] = *(size_t *)(tmp2->array); gal_data_free(tmp2); /* If the width is larger than the input's size, change the width to the input's size. */ if( fsize[i] > afp.input->dsize[i] ) error(EXIT_FAILURE, 0, "%s: the filter size along dimension %zu " "(%zu) is greater than the input's length in that " "dimension (%zu)", __func__, i, fsize[i], afp.input->dsize[i]); /* Go onto the previous dimension. */ --i; } /* Set the half filter sizes. Note that when the size is an odd number, the number of pixels before and after the actual pixel are equal, but for an even number, we will look into one element more when looking before than the ones after. */ for(i=0;i<ndim;++i) { if( fsize[i]%2 ) hnfsize[i]=hpfsize[i]=fsize[i]/2; else { hnfsize[i]=fsize[i]/2; hpfsize[i]=fsize[i]/2-1; } } /* See if the input has blank pixels. */ afp.hasblank=gal_blank_present(afp.input, 1); /* Set the type of the output dataset. */ switch(operator) { case ARITHMETIC_OP_FILTER_MEDIAN: type=afp.input->type; break; case ARITHMETIC_OP_FILTER_MEAN: type=GAL_TYPE_FLOAT64; break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to fix " "the problem. The `operator' code %d is not recognized", PACKAGE_BUGREPORT, __func__, operator); } /* Allocate the output dataset. Note that filtering doesn't change the units of the dataset. */ afp.out=gal_data_alloc(NULL, type, ndim, afp.input->dsize, afp.input->wcs, 0, afp.input->minmapsize, NULL, afp.input->unit, NULL); /* Spin off threads for each pixel. */ gal_threads_spin_off(arithmetic_filter, &afp, afp.input->size, p->cp.numthreads); } /* Add the output to the top of the stack. */ operands_add(p, NULL, afp.out); /* Clean up and add the output on top of the stack */ gal_data_free(afp.input); gal_list_data_free(fsize_list); } /***************************************************************/ /************* Reverse Polish algorithm *************/ /***************************************************************/ /* This function implements the reverse polish algorithm as explained in the Wikipedia page. NOTE that in ui.c, the input linked list of tokens was ordered to have the same order as what the user provided. */ void reversepolish(struct arithmeticparams *p) { int op=0, nop=0; char *filename, *hdu; unsigned int numop, i; gal_list_str_t *token; gal_data_t *d1=NULL, *d2=NULL, *d3=NULL; int flags = ( GAL_ARITHMETIC_INPLACE | GAL_ARITHMETIC_FREE | GAL_ARITHMETIC_NUMOK ); /* Prepare the processing: */ p->operands=NULL; p->addcounter=p->popcounter=0; /* Go over each input token and do the work. */ for(token=p->tokens;token!=NULL;token=token->next) { /* If we have a name or number, then add it to the operands linked list. Otherwise, pull out two members and do the specified operation on them. */ if(gal_fits_name_is_fits(token->v)) operands_add(p, token->v, NULL); else if( (d1=gal_data_copy_string_to_number(token->v)) ) operands_add(p, NULL, d1); else { /* Order is the same as in the manual. */ /* Simple arithmetic operators. */ if (!strcmp(token->v, "+" )) { op=GAL_ARITHMETIC_OP_PLUS; nop=2; } else if (!strcmp(token->v, "-" )) { op=GAL_ARITHMETIC_OP_MINUS; nop=2; } else if (!strcmp(token->v, "x" )) { op=GAL_ARITHMETIC_OP_MULTIPLY; nop=2; } else if (!strcmp(token->v, "/" )) { op=GAL_ARITHMETIC_OP_DIVIDE; nop=2; } else if (!strcmp(token->v, "%" )) { op=GAL_ARITHMETIC_OP_MODULO; nop=2; } /* Mathematical Operators. */ else if (!strcmp(token->v, "abs")) { op=GAL_ARITHMETIC_OP_ABS; nop=1; } else if (!strcmp(token->v, "pow")) { op=GAL_ARITHMETIC_OP_POW; nop=2; } else if (!strcmp(token->v, "sqrt")) { op=GAL_ARITHMETIC_OP_SQRT; nop=1; } else if (!strcmp(token->v, "log")) { op=GAL_ARITHMETIC_OP_LOG; nop=1; } else if (!strcmp(token->v, "log10")) { op=GAL_ARITHMETIC_OP_LOG10; nop=1; } /* Statistical/higher-level operators. */ else if (!strcmp(token->v, "minvalue")) { op=GAL_ARITHMETIC_OP_MINVAL; nop=1; } else if (!strcmp(token->v, "maxvalue")) { op=GAL_ARITHMETIC_OP_MAXVAL; nop=1; } else if (!strcmp(token->v, "numvalue")) { op=GAL_ARITHMETIC_OP_NUMVAL; nop=1; } else if (!strcmp(token->v, "sumvalue")) { op=GAL_ARITHMETIC_OP_SUMVAL; nop=1; } else if (!strcmp(token->v, "meanvalue")) { op=GAL_ARITHMETIC_OP_MEANVAL; nop=1; } else if (!strcmp(token->v, "stdvalue")) { op=GAL_ARITHMETIC_OP_STDVAL; nop=1; } else if (!strcmp(token->v, "medianvalue")) { op=GAL_ARITHMETIC_OP_MEDIANVAL; nop=1; } else if (!strcmp(token->v, "min")) { op=GAL_ARITHMETIC_OP_MIN; nop=-1; } else if (!strcmp(token->v, "max")) { op=GAL_ARITHMETIC_OP_MAX; nop=-1; } else if (!strcmp(token->v, "num")) { op=GAL_ARITHMETIC_OP_NUM; nop=-1; } else if (!strcmp(token->v, "sum")) { op=GAL_ARITHMETIC_OP_SUM; nop=-1; } else if (!strcmp(token->v, "mean")) { op=GAL_ARITHMETIC_OP_MEAN; nop=-1; } else if (!strcmp(token->v, "std")) { op=GAL_ARITHMETIC_OP_STD; nop=-1; } else if (!strcmp(token->v, "median")) { op=GAL_ARITHMETIC_OP_MEDIAN; nop=-1; } /* Conditional operators. */ else if (!strcmp(token->v, "lt" )) { op=GAL_ARITHMETIC_OP_LT; nop=2; } else if (!strcmp(token->v, "le")) { op=GAL_ARITHMETIC_OP_LE; nop=2; } else if (!strcmp(token->v, "gt" )) { op=GAL_ARITHMETIC_OP_GT; nop=2; } else if (!strcmp(token->v, "ge")) { op=GAL_ARITHMETIC_OP_GE; nop=2; } else if (!strcmp(token->v, "eq")) { op=GAL_ARITHMETIC_OP_EQ; nop=2; } else if (!strcmp(token->v, "ne")) { op=GAL_ARITHMETIC_OP_NE; nop=2; } else if (!strcmp(token->v, "and")) { op=GAL_ARITHMETIC_OP_AND; nop=2; } else if (!strcmp(token->v, "or")) { op=GAL_ARITHMETIC_OP_OR; nop=2; } else if (!strcmp(token->v, "not")) { op=GAL_ARITHMETIC_OP_NOT; nop=1; } else if (!strcmp(token->v, "isblank")) { op=GAL_ARITHMETIC_OP_ISBLANK; nop=1; } else if (!strcmp(token->v, "where")) { op=GAL_ARITHMETIC_OP_WHERE; nop=3; } /* Bitwise operators. */ else if (!strcmp(token->v, "bitand")) { op=GAL_ARITHMETIC_OP_BITAND; nop=2; } else if (!strcmp(token->v, "bitor")) { op=GAL_ARITHMETIC_OP_BITOR; nop=2; } else if (!strcmp(token->v, "bitxor")) { op=GAL_ARITHMETIC_OP_BITXOR; nop=2; } else if (!strcmp(token->v, "lshift")) { op=GAL_ARITHMETIC_OP_BITLSH; nop=2; } else if (!strcmp(token->v, "rshift")) { op=GAL_ARITHMETIC_OP_BITRSH; nop=2; } else if (!strcmp(token->v, "bitnot")) { op=GAL_ARITHMETIC_OP_BITNOT; nop=1; } /* Type conversion. */ else if (!strcmp(token->v, "uint8")) { op=GAL_ARITHMETIC_OP_TO_UINT8; nop=1; } else if (!strcmp(token->v, "int8")) { op=GAL_ARITHMETIC_OP_TO_INT8; nop=1; } else if (!strcmp(token->v, "uint16")) { op=GAL_ARITHMETIC_OP_TO_UINT16; nop=1; } else if (!strcmp(token->v, "int16")) { op=GAL_ARITHMETIC_OP_TO_INT16; nop=1; } else if (!strcmp(token->v, "uint32")) { op=GAL_ARITHMETIC_OP_TO_UINT32; nop=1; } else if (!strcmp(token->v, "int32")) { op=GAL_ARITHMETIC_OP_TO_INT32; nop=1; } else if (!strcmp(token->v, "uint64")) { op=GAL_ARITHMETIC_OP_TO_UINT64; nop=1; } else if (!strcmp(token->v, "int64")) { op=GAL_ARITHMETIC_OP_TO_INT64; nop=1; } else if (!strcmp(token->v, "float32")) { op=GAL_ARITHMETIC_OP_TO_FLOAT32; nop=1; } else if (!strcmp(token->v, "float64")) { op=GAL_ARITHMETIC_OP_TO_FLOAT64; nop=1; } /* Filters. */ else if (!strcmp(token->v, "filter-median")) { op=ARITHMETIC_OP_FILTER_MEDIAN; nop=0; } else if (!strcmp(token->v, "filter-mean")) { op=ARITHMETIC_OP_FILTER_MEAN; nop=0; } /* Finished checks with known operators */ else error(EXIT_FAILURE, 0, "the argument \"%s\" could not be " "interpretted as a FITS file, number, or operator", token->v); /* See if the arithmetic library must be called or not. */ if(nop) { /* Pop the necessary number of operators. Note that the operators are poped from a linked list (which is last-in-first-out). So for the operators which need a specific order, the first poped operand is actally the last (right most, in in-fix notation) input operand.*/ switch(nop) { case 1: d1=operands_pop(p, token->v); break; case 2: d2=operands_pop(p, token->v); d1=operands_pop(p, token->v); break; case 3: d3=operands_pop(p, token->v); d2=operands_pop(p, token->v); d1=operands_pop(p, token->v); break; case -1: /* This case is when the number of operands is itself an operand. So the first popped operand must be an integer number, we will use that to construct a linked list of any number of operands within the single `d1' pointer. */ d1=NULL; numop=pop_number_of_operands(p, operands_pop(p, token->v), token->v); for(i=0;i<numop;++i) gal_list_data_add(&d1, operands_pop(p, token->v)); break; default: error(EXIT_FAILURE, 0, "no operators, `%s' needs %d " "operand(s)", token->v, nop); } /* Run the arithmetic operation. Note that `gal_arithmetic' is a variable argument function (like printf). So the number of arguments it uses depend on the operator. So when the operator doesn't need three operands, the extra arguments will be ignored. */ operands_add(p, NULL, gal_arithmetic(op, flags, d1, d2, d3)); } /* No need to call the arithmetic library, call the proper wrappers directly. */ else { switch(op) { case ARITHMETIC_OP_FILTER_MEAN: case ARITHMETIC_OP_FILTER_MEDIAN: wrapper_for_filter(p, token->v, op); break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at " "%s to fix the problem. The code %d is not " "recognized for `op'", __func__, PACKAGE_BUGREPORT, op); } } } } /* If there is more than one node in the operands stack then the user has given too many operands which is an error. */ if(p->operands->next!=NULL) error(EXIT_FAILURE, 0, "too many operands"); /* If the final operand has a filename, but its `data' element is NULL, then the file hasn't actually be read yet. In this case, we need to read the contents of the file and put the resulting dataset into the operands `data' element. This can happen for example if no operators are called and there is only one filename as an argument (which can happen in scripts). */ if(p->operands->data==NULL && p->operands->filename) { /* Read the desired image and report it if necessary. */ hdu=p->operands->hdu; filename=p->operands->filename; if( gal_fits_name_is_fits(filename) ) { p->operands->data=gal_fits_img_read(filename,hdu,p->cp.minmapsize, 0, 0); p->refdata.wcs=p->operands->data->wcs; p->refdata.nwcs=p->operands->data->nwcs; p->operands->data->wcs=NULL; if(!p->cp.quiet) printf(" - %s (hdu %s) is read.\n", filename, hdu); } else error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to fix " "the problem. While `operands->data' is NULL, the filename " "(`%s') is not recognized as a FITS file", __func__, PACKAGE_BUGREPORT, filename); } /* If the final data structure has more than one element, write it as a FITS file. Otherwise, print it in the standard output. */ d1=p->operands->data; if(d1->size==1) { /* To simplify the printing process, we will first change it to double, then use printf's `%g' to print it, so integers will be printed as an integer. */ d2=gal_data_copy_to_new_type(d1, GAL_TYPE_FLOAT64); printf("%g\n", *(double *)d2->array); if(d2!=d1) gal_data_free(d2); } else { /* Put a copy of the WCS structure from the reference image, it will be freed while freeing d1. */ d1->wcs=p->refdata.wcs; gal_fits_img_write(d1, p->cp.output, NULL, PROGRAM_NAME); if(!p->cp.quiet) printf(" - Output written to %s\n", p->cp.output); } /* Clean up, note that above, we copied the pointer to `refdata->wcs' into `d1', so it is freed when freeing d1. */ gal_data_free(d1); free(p->refdata.dsize); /* Clean up. Note that the tokens were taken from the command-line arguments, so the string within each token linked list must not be freed. */ gal_list_str_free(p->tokens, 0); free(p->operands); } /***************************************************************/ /************* Top function *************/ /***************************************************************/ void imgarith(struct arithmeticparams *p) { /* Parse the arguments */ reversepolish(p); } ����������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/ui.c��������������������������������������������������������������������0000644�0001750�0001750�00000030502�13211076737�013632� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <gnuastro/list.h> #include <gnuastro/fits.h> #include <gnuastro/table.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/fixedstringmacros.h> #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata or number [ASTRdata] OPERATOR ..."; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will do arithmetic " "operations on one or multiple images and numbers. Simply put, the name " "of the image along with the arithmetic operators and possible numbers " "are given as arguments. The extensions of each input are specified with " "(possibly multiple) calls to the `--hdu' option." "\n\nCurrently "PROGRAM_NAME" only supports postfix or reverse polish " "notation. For example to get the result of `5+6', you should write " "`5 6 +', or to get the average of two images, you should write `a.fits " "b.fits + 2 /' (or more simply use the `average' operator with " "`a.fits b.fits average'). Please see the manual for more information. " "\n\n"PROGRAM_NAME" recognizes a large collection of standard operators, " "including basic arithmetic (e.g., +, -, x, /), mathematical (e.g., abs, " "pow, sqrt, log), statistical (minvalue, min, max, average), comparison " "(e.g., lt, le, gt), logical (e.g., and, or, not), the full set of bitwise " "operators, and numeric type conversion operators to all known types. " "Please run the command below for a complete list describing all " "operators (press the `SPACE' keyboard key, or arrow keys, to go down " "and `q' to return to the command-line):\n\n" " $ info gnuastro \"Arithmetic operators\"\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct arithmeticparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Modify the common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].value=&p->hdus; cp->coptions[i].type=GAL_TYPE_STRLL; cp->coptions[i].doc="Nth call, used for HDU of Nth input FITS."; break; case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct arithmeticparams *p = state->input; /* Pass `gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then `arg` start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign (`=`). For short " "options, `=` should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: gal_list_str_add(&p->tokens, arg, 0); break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Sanity check on options AND arguments. If only option values are to be checked, use `ui_read_check_only_options'. */ static void ui_check_options_and_arguments(struct arithmeticparams *p) { int output_checked=0; size_t numfits=0, numhdus=0; gal_list_str_t *token, *hdu; /* First, make sure that any tokens are actually given. */ if(p->tokens==NULL) error(EXIT_FAILURE, 0, "no input tokens. Please specify a filename or " "number (as operands) along with operator(s) as input. Please run " "any of the following commands for more information.\n\n" " $ astarithmetic --help # Short info.\n" " $ info astarithmetic # Full invocation " "documentation.\n"); /* The input tokens are put in a lastin-firstout (simple) linked list, so change them to the correct order so the order we pop a token is the same order that the user input a value. Note that for the options this was done in `gal_options_read_config_set'. */ gal_list_str_reverse(&p->tokens); /* Set the output file name (if any is needed). Note that since the lists are already reversed, the first FITS file encountered, is the first FITS file given by teh user. Also, notet that these file name operations are only necessary for the first FITS file in the token list. */ for(token=p->tokens; token!=NULL; token=token->next) { /* This token is a FITS file, count them and use it to set the output filename if it has not been set. */ if(gal_fits_name_is_fits(token->v)) { /* Increment the counter for FITS files. */ ++numfits; /* If the output filename isn't set yet, then set it. */ if(output_checked==0) { if(p->cp.output) gal_checkset_writable_remove(p->cp.output, 0, p->cp.dontdelete); else p->cp.output=gal_checkset_automatic_output(&p->cp, token->v, "_arith.fits"); output_checked=1; } } /* This token is a number. Check if a negative dash was present that has been temporarily replaced with `NEG_DASH_REPLACE' before option parsing. */ else if(token->v[0]==NEG_DASH_REPLACE && isdigit(token->v[1]) ) token->v[0]='-'; } /* Count the number of HDU values (if globalhdu isn't given) and check if its not less than the number of input FITS images. */ if(p->globalhdu) { if(p->hdus) { gal_list_str_free(p->hdus, 1); p->hdus=NULL; }; } else { for(hdu=p->hdus; hdu!=NULL; hdu=hdu->next) ++numhdus; if(numhdus<numfits) error(EXIT_FAILURE, 0, "not enough HDUs. There are %zu input FITS " "files, so the `--hdu' (`-h') option must be called %zu " "times (once for each FITS file). If the HDU value is the " "same for all the files, you may use `--globalhdu' (`-g') to " "specify a single HDU to be used for any number of input " "files", numfits, numfits); } } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct arithmeticparams *p) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program (`args.h') and for the common options to all Gnuastro (`commonopts.h'). We want to directly put the pointers to the fields in `p' and `cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include <gnuastro-internal/commonopts.h> #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* The dash of a negative number will cause problems with the option readin. To work properly we will go over all the options/arguments and if any one starts with a dash and is followed by a number, then the dash is replaced by NEG_DASH_REPLACE. */ for(i=0;i<argc;++i) if(argv[i][0]=='-' && isdigit(argv[i][1])) argv[i][0]=NEG_DASH_REPLACE; /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files. */ gal_options_read_config_set(cp); /* Print the option values if asked. Note that this needs to be done after the sanity check so un-sane values are not printed in the output state. */ gal_options_print_state(cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void freeandreport(struct arithmeticparams *p, struct timeval *t1) { /* Free the simple strings. */ free(p->cp.output); if(p->globalhdu) free(p->globalhdu); /* If there are any remaining HDUs in the hdus linked list, then free them. */ if(p->hdus) gal_list_str_free(p->hdus, 1); /* Report the duration of the job */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in", 0); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/main.c������������������������������������������������������������������0000644�0001750�0001750�00000003167�13121462410�014133� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <akhlaghi@gnu.org> Contributing author(s): Copyright (C) 2015, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro-internal/timing.h> #include "main.h" #include "ui.h" /* needs main.h. */ #include "arithmetic.h" /* needs main.h. */ int main (int argc, char *argv[]) { struct timeval t1; struct arithmeticparams p={{{0},0},0}; /* Set the starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles */ imgarith(&p); /* Free any allocated space */ freeandreport(&p, &t1); /* Return successfully.*/ return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/Makefile.in�������������������������������������������������������������0000644�0001750�0001750�00000211625�13217217705�015123� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 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@ 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@ bin_PROGRAMS = astarithmetic$(EXEEXT) subdir = bin/arithmetic ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/asm-underscore.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/configmake.m4 \ $(top_srcdir)/bootstrapped/m4/ctype.m4 \ $(top_srcdir)/bootstrapped/m4/dirname.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/glibc21.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/hard-locale.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes-pri.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/localtime-buffer.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/longlong.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/sigaction.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stdbool.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astarithmetic_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ arithmetic.$(OBJEXT) operands.$(OBJEXT) astarithmetic_OBJECTS = $(am_astarithmetic_OBJECTS) astarithmetic_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/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 = $(astarithmetic_SOURCES) DIST_SOURCES = $(astarithmetic_SOURCES) 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; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GLIBC21 = @GLIBC21@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ASINF = @GNULIB_ASINF@ GNULIB_ASINL = @GNULIB_ASINL@ GNULIB_ATAN2F = @GNULIB_ATAN2F@ GNULIB_ATANF = @GNULIB_ATANF@ GNULIB_ATANL = @GNULIB_ATANL@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_BIND = @GNULIB_BIND@ GNULIB_BTOWC = @GNULIB_BTOWC@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CBRT = @GNULIB_CBRT@ GNULIB_CBRTF = @GNULIB_CBRTF@ GNULIB_CBRTL = @GNULIB_CBRTL@ GNULIB_CEIL = @GNULIB_CEIL@ GNULIB_CEILF = @GNULIB_CEILF@ GNULIB_CEILL = @GNULIB_CEILL@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_CONNECT = @GNULIB_CONNECT@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ GNULIB_EXP2F = @GNULIB_EXP2F@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ GNULIB_FABSF = @GNULIB_FABSF@ GNULIB_FABSL = @GNULIB_FABSL@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFS = @GNULIB_FFS@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FLOOR = @GNULIB_FLOOR@ GNULIB_FLOORF = @GNULIB_FLOORF@ GNULIB_FLOORL = @GNULIB_FLOORL@ GNULIB_FMA = @GNULIB_FMA@ GNULIB_FMAF = @GNULIB_FMAF@ GNULIB_FMAL = @GNULIB_FMAL@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FREXP = @GNULIB_FREXP@ GNULIB_FREXPF = @GNULIB_FREXPF@ GNULIB_FREXPL = @GNULIB_FREXPL@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSTAT = @GNULIB_FSTAT@ GNULIB_FSTATAT = @GNULIB_FSTATAT@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ GNULIB_HYPOTF = @GNULIB_HYPOTF@ GNULIB_HYPOTL = @GNULIB_HYPOTL@ GNULIB_ILOGB = @GNULIB_ILOGB@ GNULIB_ILOGBF = @GNULIB_ILOGBF@ GNULIB_ILOGBL = @GNULIB_ILOGBL@ GNULIB_IMAXABS = @GNULIB_IMAXABS@ GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_IOCTL = @GNULIB_IOCTL@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ GNULIB_ISNAND = @GNULIB_ISNAND@ GNULIB_ISNANF = @GNULIB_ISNANF@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ GNULIB_LDEXPL = @GNULIB_LDEXPL@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ GNULIB_LOG10L = @GNULIB_LOG10L@ GNULIB_LOG1P = @GNULIB_LOG1P@ GNULIB_LOG1PF = @GNULIB_LOG1PF@ GNULIB_LOG1PL = @GNULIB_LOG1PL@ GNULIB_LOG2 = @GNULIB_LOG2@ GNULIB_LOG2F = @GNULIB_LOG2F@ GNULIB_LOG2L = @GNULIB_LOG2L@ GNULIB_LOGB = @GNULIB_LOGB@ GNULIB_LOGBF = @GNULIB_LOGBF@ GNULIB_LOGBL = @GNULIB_LOGBL@ GNULIB_LOGF = @GNULIB_LOGF@ GNULIB_LOGL = @GNULIB_LOGL@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_LSTAT = @GNULIB_LSTAT@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBRLEN = @GNULIB_MBRLEN@ GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSINIT = @GNULIB_MBSINIT@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKFIFO = @GNULIB_MKFIFO@ GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ GNULIB_MKNOD = @GNULIB_MKNOD@ GNULIB_MKNODAT = @GNULIB_MKNODAT@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_MKTIME = @GNULIB_MKTIME@ GNULIB_MODF = @GNULIB_MODF@ GNULIB_MODFF = @GNULIB_MODFF@ GNULIB_MODFL = @GNULIB_MODFL@ GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_POWF = @GNULIB_POWF@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PSELECT = @GNULIB_PSELECT@ GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RAISE = @GNULIB_RAISE@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ GNULIB_RECVFROM = @GNULIB_RECVFROM@ GNULIB_REMAINDER = @GNULIB_REMAINDER@ GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RINT = @GNULIB_RINT@ GNULIB_RINTF = @GNULIB_RINTF@ GNULIB_RINTL = @GNULIB_RINTL@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_ROUND = @GNULIB_ROUND@ GNULIB_ROUNDF = @GNULIB_ROUNDF@ GNULIB_ROUNDL = @GNULIB_ROUNDL@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SELECT = @GNULIB_SELECT@ GNULIB_SEND = @GNULIB_SEND@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ GNULIB_SINF = @GNULIB_SINF@ GNULIB_SINHF = @GNULIB_SINHF@ GNULIB_SINL = @GNULIB_SINL@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SOCKET = @GNULIB_SOCKET@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_SQRTF = @GNULIB_SQRTF@ GNULIB_SQRTL = @GNULIB_SQRTL@ GNULIB_STAT = @GNULIB_STAT@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRPTIME = @GNULIB_STRPTIME@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TANF = @GNULIB_TANF@ GNULIB_TANHF = @GNULIB_TANHF@ GNULIB_TANL = @GNULIB_TANL@ GNULIB_TIMEGM = @GNULIB_TIMEGM@ GNULIB_TIME_R = @GNULIB_TIME_R@ GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCPCPY = @GNULIB_WCPCPY@ GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ GNULIB_WCSCAT = @GNULIB_WCSCAT@ GNULIB_WCSCHR = @GNULIB_WCSCHR@ GNULIB_WCSCMP = @GNULIB_WCSCMP@ GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ GNULIB_WCSSPN = @GNULIB_WCSSPN@ GNULIB_WCSSTR = @GNULIB_WCSSTR@ GNULIB_WCSTOK = @GNULIB_WCSTOK@ GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ GNULIB_WCTOB = @GNULIB_WCTOB@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WCTRANS = @GNULIB_WCTRANS@ GNULIB_WCTYPE = @GNULIB_WCTYPE@ GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TRUNCATE = @HAVE_TRUNCATE@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SELECT = @LIB_SELECT@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ 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_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ 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_CXX = @ac_ct_CXX@ 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@ ax_pthread_config = @ax_pthread_config@ 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@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ 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@ lispdir = @lispdir@ 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_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib astarithmetic_LDADD = -lgnuastro astarithmetic_SOURCES = main.c ui.c arithmetic.c operands.c EXTRA_DIST = main.h authors-cite.h args.h ui.h arithmetic.h operands.h dist_sysconf_DATA = astarithmetic.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu bin/arithmetic/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/arithmetic/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astarithmetic$(EXEEXT): $(astarithmetic_OBJECTS) $(astarithmetic_DEPENDENCIES) $(EXTRA_astarithmetic_DEPENDENCIES) @rm -f astarithmetic$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astarithmetic_OBJECTS) $(astarithmetic_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/operands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || 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)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/astarithmetic.conf������������������������������������������������������0000644�0001750�0001750�00000001611�13121462410�016543� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default parameters (System) for Arithmetic. # Arithmetic is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astarithmetic --help # Full list of options, short doc. # $ astarithmetic -P # Print all options and used values. # $ info astarithmetic # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. �����������������������������������������������������������������������������������������������������������������������gnuastro-0.5/bin/arithmetic/Makefile.am�������������������������������������������������������������0000644�0001750�0001750�00000002644�13121462410�015076� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <akhlaghi@gnu.org> ## Contributing author(s): ## Copyright (C) 2015, Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Pre-processer flags (for Gnulib's headers). Recall that the compiled ## Gnulib library was statically linked to (copied in) Gnuastro's library. AM_CPPFLAGS = -I\$(top_srcdir)/bootstrapped/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astarithmetic astarithmetic_LDADD = -lgnuastro astarithmetic_SOURCES = main.c ui.c arithmetic.c operands.c EXTRA_DIST = main.h authors-cite.h args.h ui.h arithmetic.h operands.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astarithmetic.conf ��������������������������������������������������������������������������������������������gnuastro-0.5/bin/gnuastro.conf����������������������������������������������������������������������0000644�0001750�0001750�00000001755�13142046236�013433� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Default values for the common options to all the programs in GNU # Astronomy Utitlies. # # Use the long option name of each paramter followed by # a value. The name and value should be separated by # atleast one of the following charaacters: # space, `,`, `=` or `:` # # Run with `--help` option or read the manual for a full # explanation of what each option means. # # NOTE I: All counting is from zero, not one. # NOTE II: Lines starting with `#` are ignored. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Input: hdu 1 ignorecase 1 searchin name # Tessellation tilesize 50,50 numchannels 1,1 remainderfrac 0.1 workoverch 0 interpnumngb 9 interponlyblank 0 # Output: tableformat fits-binary # Operating mode minmapsize 1000000000���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������